melchizedek-agents 0.16.2 → 0.18.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 (100) hide show
  1. package/.env.example +40 -3
  2. package/AGENT_SETUP.md +4 -2
  3. package/CHANGELOG.md +246 -0
  4. package/DOCUMENTATION.md +311 -15
  5. package/QUICKSTART.md +2 -2
  6. package/README.md +125 -149
  7. package/config/agents/examples/harness.yaml +135 -0
  8. package/config/agents/examples/model_zoo.yaml +23 -9
  9. package/config/agents/examples/pipeline.yaml +120 -0
  10. package/config/agents/examples/specs/open-meteo-forecast.json +77 -0
  11. package/config/agents/examples/specs/open-meteo-geocoding.json +53 -0
  12. package/config/agents/examples/weather.yaml +59 -0
  13. package/config/agents/syndicateSchema.yaml +125 -1
  14. package/db/hardening.sql +4 -3
  15. package/db/migrations/0011_erase_expired.sql +198 -0
  16. package/db/migrations/0012_audit_log.sql +98 -0
  17. package/dist/lib/a2a/app.d.ts +27 -0
  18. package/dist/lib/a2a/app.js +101 -5
  19. package/dist/lib/a2a/executor.d.ts +34 -4
  20. package/dist/lib/a2a/executor.js +109 -9
  21. package/dist/lib/compile.d.ts +41 -3
  22. package/dist/lib/compile.js +162 -17
  23. package/dist/lib/config.d.ts +24 -0
  24. package/dist/lib/config.js +24 -0
  25. package/dist/lib/doctor.js +17 -4
  26. package/dist/lib/index.d.ts +2 -0
  27. package/dist/lib/index.js +1 -0
  28. package/dist/lib/loadEnv.d.ts +5 -0
  29. package/dist/lib/loadEnv.js +7 -0
  30. package/dist/lib/loadSyndicate.d.ts +50 -0
  31. package/dist/lib/loadSyndicate.js +19 -3
  32. package/dist/lib/memory/erase.d.ts +5 -0
  33. package/dist/lib/memory/erase.js +5 -0
  34. package/dist/lib/memory/providers.d.ts +27 -0
  35. package/dist/lib/memory/providers.js +28 -0
  36. package/dist/lib/models/capabilities.js +10 -0
  37. package/dist/lib/models/endpoints.d.ts +1 -1
  38. package/dist/lib/models/endpoints.js +4 -1
  39. package/dist/lib/models/fallback.d.ts +41 -0
  40. package/dist/lib/models/fallback.js +105 -0
  41. package/dist/lib/models/gateway.d.ts +2 -2
  42. package/dist/lib/models/gateway.js +4 -4
  43. package/dist/lib/models/kimiLlm.d.ts +123 -0
  44. package/dist/lib/models/kimiLlm.js +171 -0
  45. package/dist/lib/models/providerMap.d.ts +2 -2
  46. package/dist/lib/models/providerMap.js +4 -1
  47. package/dist/lib/models/registry.d.ts +1 -1
  48. package/dist/lib/models/registry.js +11 -3
  49. package/dist/lib/net/redirects.d.ts +14 -0
  50. package/dist/lib/net/redirects.js +94 -0
  51. package/dist/lib/observability/audit.d.ts +21 -0
  52. package/dist/lib/observability/audit.js +39 -0
  53. package/dist/lib/observability/metrics.d.ts +6 -0
  54. package/dist/lib/observability/tracer.d.ts +14 -1
  55. package/dist/lib/observability/tracer.js +16 -2
  56. package/dist/lib/persistence/supabaseProvider.d.ts +2 -6
  57. package/dist/lib/persistence/supabaseProvider.js +2 -31
  58. package/dist/lib/runtime/questions.d.ts +55 -0
  59. package/dist/lib/runtime/questions.js +107 -0
  60. package/dist/lib/runtime/syndicateTurn.d.ts +45 -5
  61. package/dist/lib/runtime/syndicateTurn.js +165 -17
  62. package/dist/lib/storage/postgres/index.d.ts +9 -0
  63. package/dist/lib/storage/postgres/index.js +13 -0
  64. package/dist/lib/storage/rlsStatus.d.ts +45 -0
  65. package/dist/lib/storage/rlsStatus.js +69 -0
  66. package/dist/lib/syndicateSchema.d.ts +177 -0
  67. package/dist/lib/syndicateSchema.js +343 -3
  68. package/dist/lib/toolRegistry.js +9 -0
  69. package/dist/lib/tools/mcpToolFactory.d.ts +26 -0
  70. package/dist/lib/tools/mcpToolFactory.js +61 -4
  71. package/dist/lib/tools/openapiTools.d.ts +52 -0
  72. package/dist/lib/tools/openapiTools.js +225 -0
  73. package/dist/lib/tools/skillToolset.d.ts +135 -0
  74. package/dist/lib/tools/skillToolset.js +247 -0
  75. package/dist/lib/tools/urlContextTool.d.ts +29 -0
  76. package/dist/lib/tools/urlContextTool.js +39 -0
  77. package/dist/lib/workflow.d.ts +72 -0
  78. package/dist/lib/workflow.js +180 -0
  79. package/dist/lib/workflowConfig.d.ts +95 -0
  80. package/dist/lib/workflowConfig.js +93 -0
  81. package/dist/scripts/a2a_server.js +51 -8
  82. package/dist/scripts/db.d.ts +9 -0
  83. package/dist/scripts/db.js +30 -15
  84. package/dist/scripts/syndicate_chat.js +39 -5
  85. package/package.json +6 -3
  86. package/skills/briefs/_shared.md +1 -1
  87. package/skills/briefs/melchizedek-author.md +8 -4
  88. package/skills/briefs/melchizedek-memory.md +1 -1
  89. package/skills/briefs/melchizedek-models.md +1 -1
  90. package/skills/briefs/melchizedek-scribe.md +4 -4
  91. package/skills/briefs/melchizedek-serve.md +1 -1
  92. package/skills/briefs/melchizedek.md +4 -1
  93. package/skills/melchizedek/SKILL.md +4 -1
  94. package/skills/melchizedek-author/SKILL.md +7 -3
  95. package/skills/melchizedek-memory/SKILL.md +1 -1
  96. package/skills/melchizedek-models/SKILL.md +1 -1
  97. package/skills/melchizedek-scribe/SKILL.md +3 -3
  98. package/skills/melchizedek-serve/SKILL.md +1 -1
  99. /package/skills/melchizedek-author/{templates → assets}/minimal.yaml +0 -0
  100. /package/skills/melchizedek-scribe/{templates → assets}/brief.md +0 -0
@@ -0,0 +1,45 @@
1
+ /**
2
+ * lib/storage/rlsStatus.ts — is db/hardening.sql in force? One set of rules
3
+ * for both storage paths.
4
+ *
5
+ * WHY: a Supabase project exposes the tables in `public` through its REST
6
+ * API, readable and writable with the published anon key wherever row-level
7
+ * security is off. The server refuses to start on a public deployment
8
+ * without the hardening (ADR 0021). The supabase-js path asked
9
+ * melchizedek_rls_status(); the DATABASE_URL path asked nothing, so a
10
+ * deployment that followed the recommended setup never had the check.
11
+ *
12
+ * Both paths now read the same rows and judge them here:
13
+ * - adk_memory_facts and adk_sessions must have RLS on;
14
+ * - adk_agent_registry, where it exists, must too (anon write access there
15
+ * is agent takeover);
16
+ * - adk_telemetry without RLS is reported but does not fail the check.
17
+ */
18
+ export interface RlsHardeningStatus {
19
+ /** true when db/hardening.sql is in force, or when nothing exposes the tables. */
20
+ applied: boolean;
21
+ /** Human-readable explanation for logs. */
22
+ detail: string;
23
+ }
24
+ export interface RlsRow {
25
+ table_name: string;
26
+ rls_enabled: boolean;
27
+ }
28
+ /** Judge the RLS flags of the shipped tables. */
29
+ export declare function evaluateRlsRows(rows: RlsRow[]): RlsHardeningStatus;
30
+ /** What a direct Postgres connection sees: the API roles, the schema, and the flags. */
31
+ export interface PostgresRlsFacts {
32
+ /** True when the Supabase API roles (anon, authenticated) exist. */
33
+ apiRoles: boolean;
34
+ /** The schema the tables live in (first on the search_path). */
35
+ schema: string;
36
+ rows: RlsRow[];
37
+ }
38
+ /**
39
+ * The DATABASE_URL path's judgment. Without the API roles nothing serves the
40
+ * tables over HTTP; in a schema other than `public` the Supabase REST API
41
+ * does not expose them unless someone adds that schema to it.
42
+ */
43
+ export declare function evaluatePostgresRls(facts: PostgresRlsFacts): RlsHardeningStatus;
44
+ /** The query evaluatePostgresRls reads. */
45
+ export declare const POSTGRES_RLS_QUERY = "\n SELECT\n EXISTS (SELECT 1 FROM pg_roles WHERE rolname IN ('anon', 'authenticated')) AS api_roles,\n current_schema() AS schema,\n coalesce(\n (SELECT json_agg(json_build_object('table_name', c.relname, 'rls_enabled', c.relrowsecurity))\n FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace\n WHERE n.nspname = current_schema()\n AND c.relname IN ('adk_memory_facts', 'adk_sessions', 'adk_agent_registry', 'adk_telemetry')),\n '[]'::json\n ) AS rows";
@@ -0,0 +1,69 @@
1
+ /**
2
+ * lib/storage/rlsStatus.ts — is db/hardening.sql in force? One set of rules
3
+ * for both storage paths.
4
+ *
5
+ * WHY: a Supabase project exposes the tables in `public` through its REST
6
+ * API, readable and writable with the published anon key wherever row-level
7
+ * security is off. The server refuses to start on a public deployment
8
+ * without the hardening (ADR 0021). The supabase-js path asked
9
+ * melchizedek_rls_status(); the DATABASE_URL path asked nothing, so a
10
+ * deployment that followed the recommended setup never had the check.
11
+ *
12
+ * Both paths now read the same rows and judge them here:
13
+ * - adk_memory_facts and adk_sessions must have RLS on;
14
+ * - adk_agent_registry, where it exists, must too (anon write access there
15
+ * is agent takeover);
16
+ * - adk_telemetry without RLS is reported but does not fail the check.
17
+ */
18
+ /** Judge the RLS flags of the shipped tables. */
19
+ export function evaluateRlsRows(rows) {
20
+ const unprotected = ['adk_memory_facts', 'adk_sessions'].filter((t) => !rows.some((r) => r.table_name === t && r.rls_enabled));
21
+ if (unprotected.length > 0) {
22
+ return { applied: false, detail: `RLS is disabled on: ${unprotected.join(', ')}` };
23
+ }
24
+ const registryRow = rows.find((r) => r.table_name === 'adk_agent_registry');
25
+ if (registryRow && !registryRow.rls_enabled) {
26
+ return {
27
+ applied: false,
28
+ detail: 'RLS is disabled on: adk_agent_registry (agent definitions are '
29
+ + 'writable with the anon key) — re-run db/hardening.sql',
30
+ };
31
+ }
32
+ const telemetryRow = rows.find((r) => r.table_name === 'adk_telemetry');
33
+ if (telemetryRow && !telemetryRow.rls_enabled) {
34
+ return {
35
+ applied: true,
36
+ detail: 'RLS enabled on adk_memory_facts and adk_sessions — but NOT on adk_telemetry; re-run db/hardening.sql',
37
+ };
38
+ }
39
+ return { applied: true, detail: 'RLS enabled on adk_memory_facts and adk_sessions' };
40
+ }
41
+ /**
42
+ * The DATABASE_URL path's judgment. Without the API roles nothing serves the
43
+ * tables over HTTP; in a schema other than `public` the Supabase REST API
44
+ * does not expose them unless someone adds that schema to it.
45
+ */
46
+ export function evaluatePostgresRls(facts) {
47
+ if (!facts.apiRoles) {
48
+ return { applied: true, detail: 'no anon or authenticated role in this database, so no API exposes the tables' };
49
+ }
50
+ if (facts.schema !== 'public') {
51
+ return {
52
+ applied: true,
53
+ detail: `tables live in schema "${facts.schema}", which the Supabase API does not expose unless it is added to the exposed schemas`,
54
+ };
55
+ }
56
+ return evaluateRlsRows(facts.rows);
57
+ }
58
+ /** The query evaluatePostgresRls reads. */
59
+ export const POSTGRES_RLS_QUERY = `
60
+ SELECT
61
+ EXISTS (SELECT 1 FROM pg_roles WHERE rolname IN ('anon', 'authenticated')) AS api_roles,
62
+ current_schema() AS schema,
63
+ coalesce(
64
+ (SELECT json_agg(json_build_object('table_name', c.relname, 'rls_enabled', c.relrowsecurity))
65
+ FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace
66
+ WHERE n.nspname = current_schema()
67
+ AND c.relname IN ('adk_memory_facts', 'adk_sessions', 'adk_agent_registry', 'adk_telemetry')),
68
+ '[]'::json
69
+ ) AS rows`;
@@ -24,10 +24,12 @@
24
24
  import { z } from 'zod';
25
25
  import type { SyndicateYamlConfig } from './loadSyndicate.ts';
26
26
  export declare const MEMORY_SYSTEMS: readonly ['internal-only', 'session-only', 'long-term'];
27
+ export declare const SKILL_SCRIPT_MODES: readonly ['none', 'local'];
27
28
  export declare const agentSchema: z.ZodObject<{
28
29
  name: z.ZodString;
29
30
  description: z.ZodOptional<z.ZodString>;
30
31
  model: z.ZodString;
32
+ fallback_model: z.ZodOptional<z.ZodString>;
31
33
  instruction: z.ZodString;
32
34
  globalInstruction: z.ZodOptional<z.ZodString>;
33
35
  tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -61,6 +63,43 @@ export declare const agentSchema: z.ZodObject<{
61
63
  }, z.core.$loose>>;
62
64
  outputSchema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
63
65
  mcp_server_url: z.ZodOptional<z.ZodString>;
66
+ mcp_tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
67
+ skills: z.ZodOptional<z.ZodObject<{
68
+ dir: z.ZodString;
69
+ scripts: z.ZodOptional<z.ZodEnum<{
70
+ local: "local";
71
+ none: "none";
72
+ }>>;
73
+ tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
74
+ }, z.core.$strict>>;
75
+ openapi: z.ZodOptional<z.ZodArray<z.ZodObject<{
76
+ spec: z.ZodString;
77
+ operations: z.ZodOptional<z.ZodArray<z.ZodString>>;
78
+ base_url: z.ZodOptional<z.ZodString>;
79
+ prefix: z.ZodOptional<z.ZodString>;
80
+ auth: z.ZodOptional<z.ZodObject<{
81
+ bearer_env: z.ZodOptional<z.ZodString>;
82
+ api_key: z.ZodOptional<z.ZodObject<{
83
+ env: z.ZodString;
84
+ in: z.ZodEnum<{
85
+ header: "header";
86
+ query: "query";
87
+ }>;
88
+ name: z.ZodString;
89
+ }, z.core.$strict>>;
90
+ }, z.core.$strict>>;
91
+ }, z.core.$strict>>>;
92
+ code_execution: z.ZodOptional<z.ZodLiteral<"gemini">>;
93
+ context: z.ZodOptional<z.ZodObject<{
94
+ compact_after_tokens: z.ZodNumber;
95
+ keep_recent_events: z.ZodOptional<z.ZodNumber>;
96
+ summary_model: z.ZodOptional<z.ZodString>;
97
+ }, z.core.$strict>>;
98
+ examples: z.ZodOptional<z.ZodArray<z.ZodObject<{
99
+ input: z.ZodString;
100
+ output: z.ZodString;
101
+ }, z.core.$strict>>>;
102
+ mode: z.ZodOptional<z.ZodLiteral<"task">>;
64
103
  orchestration: z.ZodOptional<z.ZodObject<{
65
104
  role: z.ZodOptional<z.ZodEnum<{
66
105
  primary: "primary";
@@ -77,6 +116,7 @@ export declare const agentSchema: z.ZodObject<{
77
116
  */
78
117
  export declare const subagentSchema: z.ZodObject<{
79
118
  name: z.ZodString;
119
+ fallback_model: z.ZodOptional<z.ZodString>;
80
120
  globalInstruction: z.ZodOptional<z.ZodString>;
81
121
  tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
82
122
  require_approval: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -109,6 +149,43 @@ export declare const subagentSchema: z.ZodObject<{
109
149
  }, z.core.$loose>>;
110
150
  outputSchema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
111
151
  mcp_server_url: z.ZodOptional<z.ZodString>;
152
+ mcp_tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
153
+ skills: z.ZodOptional<z.ZodObject<{
154
+ dir: z.ZodString;
155
+ scripts: z.ZodOptional<z.ZodEnum<{
156
+ local: "local";
157
+ none: "none";
158
+ }>>;
159
+ tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
160
+ }, z.core.$strict>>;
161
+ openapi: z.ZodOptional<z.ZodArray<z.ZodObject<{
162
+ spec: z.ZodString;
163
+ operations: z.ZodOptional<z.ZodArray<z.ZodString>>;
164
+ base_url: z.ZodOptional<z.ZodString>;
165
+ prefix: z.ZodOptional<z.ZodString>;
166
+ auth: z.ZodOptional<z.ZodObject<{
167
+ bearer_env: z.ZodOptional<z.ZodString>;
168
+ api_key: z.ZodOptional<z.ZodObject<{
169
+ env: z.ZodString;
170
+ in: z.ZodEnum<{
171
+ header: "header";
172
+ query: "query";
173
+ }>;
174
+ name: z.ZodString;
175
+ }, z.core.$strict>>;
176
+ }, z.core.$strict>>;
177
+ }, z.core.$strict>>>;
178
+ code_execution: z.ZodOptional<z.ZodLiteral<"gemini">>;
179
+ context: z.ZodOptional<z.ZodObject<{
180
+ compact_after_tokens: z.ZodNumber;
181
+ keep_recent_events: z.ZodOptional<z.ZodNumber>;
182
+ summary_model: z.ZodOptional<z.ZodString>;
183
+ }, z.core.$strict>>;
184
+ examples: z.ZodOptional<z.ZodArray<z.ZodObject<{
185
+ input: z.ZodString;
186
+ output: z.ZodString;
187
+ }, z.core.$strict>>>;
188
+ mode: z.ZodOptional<z.ZodLiteral<"task">>;
112
189
  orchestration: z.ZodOptional<z.ZodObject<{
113
190
  role: z.ZodOptional<z.ZodEnum<{
114
191
  primary: "primary";
@@ -128,6 +205,7 @@ export declare const syndicateSchema: z.ZodObject<{
128
205
  name: z.ZodString;
129
206
  description: z.ZodOptional<z.ZodString>;
130
207
  model: z.ZodString;
208
+ fallback_model: z.ZodOptional<z.ZodString>;
131
209
  instruction: z.ZodString;
132
210
  globalInstruction: z.ZodOptional<z.ZodString>;
133
211
  tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -161,6 +239,43 @@ export declare const syndicateSchema: z.ZodObject<{
161
239
  }, z.core.$loose>>;
162
240
  outputSchema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
163
241
  mcp_server_url: z.ZodOptional<z.ZodString>;
242
+ mcp_tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
243
+ skills: z.ZodOptional<z.ZodObject<{
244
+ dir: z.ZodString;
245
+ scripts: z.ZodOptional<z.ZodEnum<{
246
+ local: "local";
247
+ none: "none";
248
+ }>>;
249
+ tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
250
+ }, z.core.$strict>>;
251
+ openapi: z.ZodOptional<z.ZodArray<z.ZodObject<{
252
+ spec: z.ZodString;
253
+ operations: z.ZodOptional<z.ZodArray<z.ZodString>>;
254
+ base_url: z.ZodOptional<z.ZodString>;
255
+ prefix: z.ZodOptional<z.ZodString>;
256
+ auth: z.ZodOptional<z.ZodObject<{
257
+ bearer_env: z.ZodOptional<z.ZodString>;
258
+ api_key: z.ZodOptional<z.ZodObject<{
259
+ env: z.ZodString;
260
+ in: z.ZodEnum<{
261
+ header: "header";
262
+ query: "query";
263
+ }>;
264
+ name: z.ZodString;
265
+ }, z.core.$strict>>;
266
+ }, z.core.$strict>>;
267
+ }, z.core.$strict>>>;
268
+ code_execution: z.ZodOptional<z.ZodLiteral<"gemini">>;
269
+ context: z.ZodOptional<z.ZodObject<{
270
+ compact_after_tokens: z.ZodNumber;
271
+ keep_recent_events: z.ZodOptional<z.ZodNumber>;
272
+ summary_model: z.ZodOptional<z.ZodString>;
273
+ }, z.core.$strict>>;
274
+ examples: z.ZodOptional<z.ZodArray<z.ZodObject<{
275
+ input: z.ZodString;
276
+ output: z.ZodString;
277
+ }, z.core.$strict>>>;
278
+ mode: z.ZodOptional<z.ZodLiteral<"task">>;
164
279
  orchestration: z.ZodOptional<z.ZodObject<{
165
280
  role: z.ZodOptional<z.ZodEnum<{
166
281
  primary: "primary";
@@ -171,6 +286,7 @@ export declare const syndicateSchema: z.ZodObject<{
171
286
  }, z.core.$strict>;
172
287
  subagents: z.ZodOptional<z.ZodArray<z.ZodObject<{
173
288
  name: z.ZodString;
289
+ fallback_model: z.ZodOptional<z.ZodString>;
174
290
  globalInstruction: z.ZodOptional<z.ZodString>;
175
291
  tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
176
292
  require_approval: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -203,6 +319,43 @@ export declare const syndicateSchema: z.ZodObject<{
203
319
  }, z.core.$loose>>;
204
320
  outputSchema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
205
321
  mcp_server_url: z.ZodOptional<z.ZodString>;
322
+ mcp_tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
323
+ skills: z.ZodOptional<z.ZodObject<{
324
+ dir: z.ZodString;
325
+ scripts: z.ZodOptional<z.ZodEnum<{
326
+ local: "local";
327
+ none: "none";
328
+ }>>;
329
+ tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
330
+ }, z.core.$strict>>;
331
+ openapi: z.ZodOptional<z.ZodArray<z.ZodObject<{
332
+ spec: z.ZodString;
333
+ operations: z.ZodOptional<z.ZodArray<z.ZodString>>;
334
+ base_url: z.ZodOptional<z.ZodString>;
335
+ prefix: z.ZodOptional<z.ZodString>;
336
+ auth: z.ZodOptional<z.ZodObject<{
337
+ bearer_env: z.ZodOptional<z.ZodString>;
338
+ api_key: z.ZodOptional<z.ZodObject<{
339
+ env: z.ZodString;
340
+ in: z.ZodEnum<{
341
+ header: "header";
342
+ query: "query";
343
+ }>;
344
+ name: z.ZodString;
345
+ }, z.core.$strict>>;
346
+ }, z.core.$strict>>;
347
+ }, z.core.$strict>>>;
348
+ code_execution: z.ZodOptional<z.ZodLiteral<"gemini">>;
349
+ context: z.ZodOptional<z.ZodObject<{
350
+ compact_after_tokens: z.ZodNumber;
351
+ keep_recent_events: z.ZodOptional<z.ZodNumber>;
352
+ summary_model: z.ZodOptional<z.ZodString>;
353
+ }, z.core.$strict>>;
354
+ examples: z.ZodOptional<z.ZodArray<z.ZodObject<{
355
+ input: z.ZodString;
356
+ output: z.ZodString;
357
+ }, z.core.$strict>>>;
358
+ mode: z.ZodOptional<z.ZodLiteral<"task">>;
206
359
  orchestration: z.ZodOptional<z.ZodObject<{
207
360
  role: z.ZodOptional<z.ZodEnum<{
208
361
  primary: "primary";
@@ -227,6 +380,30 @@ export declare const syndicateSchema: z.ZodObject<{
227
380
  reason: z.ZodOptional<z.ZodString>;
228
381
  }, z.core.$strict>>>;
229
382
  }, z.core.$strict>>;
383
+ workflow: z.ZodOptional<z.ZodObject<{
384
+ edges: z.ZodArray<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>, z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>]>>>;
385
+ nodes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
386
+ ask_user: z.ZodOptional<z.ZodString>;
387
+ schema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
388
+ join: z.ZodOptional<z.ZodLiteral<true>>;
389
+ map: z.ZodOptional<z.ZodString>;
390
+ max_parallel: z.ZodOptional<z.ZodNumber>;
391
+ tool: z.ZodOptional<z.ZodString>;
392
+ route_key: z.ZodOptional<z.ZodString>;
393
+ retry: z.ZodOptional<z.ZodObject<{
394
+ max_attempts: z.ZodOptional<z.ZodNumber>;
395
+ initial_delay: z.ZodOptional<z.ZodNumber>;
396
+ max_delay: z.ZodOptional<z.ZodNumber>;
397
+ backoff_factor: z.ZodOptional<z.ZodNumber>;
398
+ }, z.core.$strict>>;
399
+ timeout: z.ZodOptional<z.ZodNumber>;
400
+ }, z.core.$strict>>>;
401
+ max_concurrency: z.ZodOptional<z.ZodNumber>;
402
+ }, z.core.$strict>>;
403
+ retries: z.ZodOptional<z.ZodObject<{
404
+ model_errors: z.ZodOptional<z.ZodNumber>;
405
+ tool_errors: z.ZodOptional<z.ZodNumber>;
406
+ }, z.core.$strict>>;
230
407
  variables: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
231
408
  memory_system: z.ZodOptional<z.ZodEnum<{
232
409
  "internal-only": "internal-only";