@riotprompt/riotprompt 0.0.12 → 0.0.14

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 (61) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +136 -33
  3. package/dist/builder.js +3 -0
  4. package/dist/builder.js.map +1 -1
  5. package/dist/chat.d.ts +2 -0
  6. package/dist/chat.js +2 -0
  7. package/dist/chat.js.map +1 -1
  8. package/dist/cli.cjs +1617 -0
  9. package/dist/cli.d.ts +8 -0
  10. package/dist/config.d.ts +7 -0
  11. package/dist/conversation-logger.js +6 -1
  12. package/dist/conversation-logger.js.map +1 -1
  13. package/dist/execution/anthropic.d.ts +5 -0
  14. package/dist/execution/anthropic.js +70 -0
  15. package/dist/execution/anthropic.js.map +1 -0
  16. package/dist/execution/gemini.d.ts +5 -0
  17. package/dist/execution/gemini.js +122 -0
  18. package/dist/execution/gemini.js.map +1 -0
  19. package/dist/execution/index.d.ts +10 -0
  20. package/dist/execution/index.js +53 -0
  21. package/dist/execution/index.js.map +1 -0
  22. package/dist/execution/openai.d.ts +5 -0
  23. package/dist/execution/openai.js +45 -0
  24. package/dist/execution/openai.js.map +1 -0
  25. package/dist/execution/provider.d.ts +18 -0
  26. package/dist/formatter.js +42 -14
  27. package/dist/formatter.js.map +1 -1
  28. package/dist/loader.js +3 -0
  29. package/dist/loader.js.map +1 -1
  30. package/dist/model-config.d.ts +1 -0
  31. package/dist/model-config.js +19 -18
  32. package/dist/model-config.js.map +1 -1
  33. package/dist/override.js +3 -0
  34. package/dist/override.js.map +1 -1
  35. package/dist/prompt.d.ts +19 -1
  36. package/dist/prompt.js +11 -2
  37. package/dist/prompt.js.map +1 -1
  38. package/dist/recipes.d.ts +108 -0
  39. package/dist/recipes.js +198 -30
  40. package/dist/recipes.js.map +1 -1
  41. package/dist/riotprompt.cjs +930 -123
  42. package/dist/riotprompt.cjs.map +1 -1
  43. package/dist/riotprompt.d.ts +3 -0
  44. package/dist/riotprompt.js +6 -0
  45. package/dist/riotprompt.js.map +1 -1
  46. package/dist/serializer.d.ts +5 -0
  47. package/dist/serializer.js +220 -0
  48. package/dist/serializer.js.map +1 -0
  49. package/dist/writer.d.ts +2 -0
  50. package/dist/writer.js +91 -0
  51. package/dist/writer.js.map +1 -0
  52. package/guide/architecture.md +51 -0
  53. package/guide/configuration.md +51 -0
  54. package/guide/development.md +62 -0
  55. package/guide/index.md +55 -0
  56. package/guide/usage.md +99 -0
  57. package/package.json +15 -3
  58. package/vite.config.cli.ts +49 -0
  59. package/BUG-ANALYSIS.md +0 -523
  60. package/CODE-REVIEW-SUMMARY.md +0 -330
  61. package/FIXES-APPLIED.md +0 -437
package/dist/recipes.d.ts CHANGED
@@ -76,6 +76,98 @@ declare const RecipeConfigSchema: z.ZodObject<{
76
76
  title: z.ZodOptional<z.ZodString>;
77
77
  weight: z.ZodOptional<z.ZodNumber>;
78
78
  }, z.core.$strip>]>>>>;
79
+ constraints: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
80
+ content: z.ZodString;
81
+ title: z.ZodOptional<z.ZodString>;
82
+ weight: z.ZodOptional<z.ZodNumber>;
83
+ }, z.core.$strip>, z.ZodObject<{
84
+ path: z.ZodString;
85
+ title: z.ZodOptional<z.ZodString>;
86
+ weight: z.ZodOptional<z.ZodNumber>;
87
+ }, z.core.$strip>, z.ZodObject<{
88
+ directories: z.ZodArray<z.ZodString>;
89
+ title: z.ZodOptional<z.ZodString>;
90
+ weight: z.ZodOptional<z.ZodNumber>;
91
+ }, z.core.$strip>]>>>>;
92
+ tone: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
93
+ content: z.ZodString;
94
+ title: z.ZodOptional<z.ZodString>;
95
+ weight: z.ZodOptional<z.ZodNumber>;
96
+ }, z.core.$strip>, z.ZodObject<{
97
+ path: z.ZodString;
98
+ title: z.ZodOptional<z.ZodString>;
99
+ weight: z.ZodOptional<z.ZodNumber>;
100
+ }, z.core.$strip>, z.ZodObject<{
101
+ directories: z.ZodArray<z.ZodString>;
102
+ title: z.ZodOptional<z.ZodString>;
103
+ weight: z.ZodOptional<z.ZodNumber>;
104
+ }, z.core.$strip>]>>>>;
105
+ examples: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
106
+ content: z.ZodString;
107
+ title: z.ZodOptional<z.ZodString>;
108
+ weight: z.ZodOptional<z.ZodNumber>;
109
+ }, z.core.$strip>, z.ZodObject<{
110
+ path: z.ZodString;
111
+ title: z.ZodOptional<z.ZodString>;
112
+ weight: z.ZodOptional<z.ZodNumber>;
113
+ }, z.core.$strip>, z.ZodObject<{
114
+ directories: z.ZodArray<z.ZodString>;
115
+ title: z.ZodOptional<z.ZodString>;
116
+ weight: z.ZodOptional<z.ZodNumber>;
117
+ }, z.core.$strip>]>>>>;
118
+ reasoning: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
119
+ content: z.ZodString;
120
+ title: z.ZodOptional<z.ZodString>;
121
+ weight: z.ZodOptional<z.ZodNumber>;
122
+ }, z.core.$strip>, z.ZodObject<{
123
+ path: z.ZodString;
124
+ title: z.ZodOptional<z.ZodString>;
125
+ weight: z.ZodOptional<z.ZodNumber>;
126
+ }, z.core.$strip>, z.ZodObject<{
127
+ directories: z.ZodArray<z.ZodString>;
128
+ title: z.ZodOptional<z.ZodString>;
129
+ weight: z.ZodOptional<z.ZodNumber>;
130
+ }, z.core.$strip>]>>>>;
131
+ responseFormat: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
132
+ content: z.ZodString;
133
+ title: z.ZodOptional<z.ZodString>;
134
+ weight: z.ZodOptional<z.ZodNumber>;
135
+ }, z.core.$strip>, z.ZodObject<{
136
+ path: z.ZodString;
137
+ title: z.ZodOptional<z.ZodString>;
138
+ weight: z.ZodOptional<z.ZodNumber>;
139
+ }, z.core.$strip>, z.ZodObject<{
140
+ directories: z.ZodArray<z.ZodString>;
141
+ title: z.ZodOptional<z.ZodString>;
142
+ weight: z.ZodOptional<z.ZodNumber>;
143
+ }, z.core.$strip>]>>>>;
144
+ recap: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
145
+ content: z.ZodString;
146
+ title: z.ZodOptional<z.ZodString>;
147
+ weight: z.ZodOptional<z.ZodNumber>;
148
+ }, z.core.$strip>, z.ZodObject<{
149
+ path: z.ZodString;
150
+ title: z.ZodOptional<z.ZodString>;
151
+ weight: z.ZodOptional<z.ZodNumber>;
152
+ }, z.core.$strip>, z.ZodObject<{
153
+ directories: z.ZodArray<z.ZodString>;
154
+ title: z.ZodOptional<z.ZodString>;
155
+ weight: z.ZodOptional<z.ZodNumber>;
156
+ }, z.core.$strip>]>>>>;
157
+ safeguards: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
158
+ content: z.ZodString;
159
+ title: z.ZodOptional<z.ZodString>;
160
+ weight: z.ZodOptional<z.ZodNumber>;
161
+ }, z.core.$strip>, z.ZodObject<{
162
+ path: z.ZodString;
163
+ title: z.ZodOptional<z.ZodString>;
164
+ weight: z.ZodOptional<z.ZodNumber>;
165
+ }, z.core.$strip>, z.ZodObject<{
166
+ directories: z.ZodArray<z.ZodString>;
167
+ title: z.ZodOptional<z.ZodString>;
168
+ weight: z.ZodOptional<z.ZodNumber>;
169
+ }, z.core.$strip>]>>>>;
170
+ schema: z.ZodOptional<z.ZodAny>;
79
171
  extends: z.ZodOptional<z.ZodString>;
80
172
  template: z.ZodOptional<z.ZodString>;
81
173
  tools: z.ZodOptional<z.ZodAny>;
@@ -110,6 +202,14 @@ export interface TemplateConfig {
110
202
  instructions?: ContentItem[];
111
203
  content?: ContentItem[];
112
204
  context?: ContentItem[];
205
+ constraints?: ContentItem[];
206
+ tone?: ContentItem[];
207
+ examples?: ContentItem[];
208
+ reasoning?: ContentItem[];
209
+ responseFormat?: ContentItem[];
210
+ recap?: ContentItem[];
211
+ safeguards?: ContentItem[];
212
+ schema?: string | Record<string, any> | z.ZodType<any>;
113
213
  tools?: Tool[] | ToolRegistry;
114
214
  toolGuidance?: Partial<ToolGuidanceConfig> | 'auto' | 'minimal' | 'detailed';
115
215
  }
@@ -154,6 +254,14 @@ export declare const recipe: (basePath: string) => {
154
254
  instructions: (...instructions: ContentItem[]) => /*elided*/ any;
155
255
  content: (...content: ContentItem[]) => /*elided*/ any;
156
256
  context: (...context: ContentItem[]) => /*elided*/ any;
257
+ constraints: (...constraints: ContentItem[]) => /*elided*/ any;
258
+ tone: (...tone: ContentItem[]) => /*elided*/ any;
259
+ examples: (...examples: ContentItem[]) => /*elided*/ any;
260
+ reasoning: (...reasoning: ContentItem[]) => /*elided*/ any;
261
+ responseFormat: (...responseFormat: ContentItem[]) => /*elided*/ any;
262
+ recap: (...recap: ContentItem[]) => /*elided*/ any;
263
+ safeguards: (...safeguards: ContentItem[]) => /*elided*/ any;
264
+ schema: (schema: string | Record<string, any> | z.ZodType<any>) => /*elided*/ any;
157
265
  parameters: (parameters: any) => /*elided*/ any;
158
266
  overrides: (enabled: boolean) => /*elided*/ any;
159
267
  overridePaths: (paths: string[]) => /*elided*/ any;
package/dist/recipes.js CHANGED
@@ -1,5 +1,7 @@
1
1
  import path__default from 'path';
2
+ import fs__default from 'fs/promises';
2
3
  import { z } from 'zod';
4
+ import zodToJsonSchema from 'zod-to-json-schema';
3
5
  import { ConversationBuilder } from './conversation.js';
4
6
  import { ParametersSchema } from './items/parameters.js';
5
7
  import { DEFAULT_LOGGER, wrapLogger } from './logger.js';
@@ -14,6 +16,9 @@ import './builder.js';
14
16
  import 'tiktoken';
15
17
  import { ToolRegistry } from './tools.js';
16
18
  import { StrategyExecutor } from './iteration-strategy.js';
19
+ import 'openai';
20
+ import '@anthropic-ai/sdk';
21
+ import '@google/generative-ai';
17
22
 
18
23
  // ===== CONFIGURATION SCHEMAS =====
19
24
  const ContentItemSchema = z.union([
@@ -48,6 +53,15 @@ const RecipeConfigSchema = z.object({
48
53
  instructions: z.array(ContentItemSchema).optional().default([]),
49
54
  content: z.array(ContentItemSchema).optional().default([]),
50
55
  context: z.array(ContentItemSchema).optional().default([]),
56
+ // Advanced prompting sections
57
+ constraints: z.array(ContentItemSchema).optional().default([]),
58
+ tone: z.array(ContentItemSchema).optional().default([]),
59
+ examples: z.array(ContentItemSchema).optional().default([]),
60
+ reasoning: z.array(ContentItemSchema).optional().default([]),
61
+ responseFormat: z.array(ContentItemSchema).optional().default([]),
62
+ recap: z.array(ContentItemSchema).optional().default([]),
63
+ safeguards: z.array(ContentItemSchema).optional().default([]),
64
+ schema: z.any().optional(),
51
65
  // Templates and inheritance
52
66
  extends: z.string().optional(),
53
67
  template: z.string().optional(),
@@ -213,6 +227,13 @@ const cook = async (config)=>{
213
227
  instructions: [],
214
228
  content: [],
215
229
  context: [],
230
+ constraints: [],
231
+ tone: [],
232
+ examples: [],
233
+ reasoning: [],
234
+ responseFormat: [],
235
+ recap: [],
236
+ safeguards: [],
216
237
  ...config
217
238
  });
218
239
  // Handle template inheritance
@@ -236,7 +257,36 @@ const cook = async (config)=>{
236
257
  context: [
237
258
  ...template.context || [],
238
259
  ...validatedConfig.context || []
239
- ]
260
+ ],
261
+ constraints: [
262
+ ...template.constraints || [],
263
+ ...validatedConfig.constraints || []
264
+ ],
265
+ tone: [
266
+ ...template.tone || [],
267
+ ...validatedConfig.tone || []
268
+ ],
269
+ examples: [
270
+ ...template.examples || [],
271
+ ...validatedConfig.examples || []
272
+ ],
273
+ reasoning: [
274
+ ...template.reasoning || [],
275
+ ...validatedConfig.reasoning || []
276
+ ],
277
+ responseFormat: [
278
+ ...template.responseFormat || [],
279
+ ...validatedConfig.responseFormat || []
280
+ ],
281
+ recap: [
282
+ ...template.recap || [],
283
+ ...validatedConfig.recap || []
284
+ ],
285
+ safeguards: [
286
+ ...template.safeguards || [],
287
+ ...validatedConfig.safeguards || []
288
+ ],
289
+ schema: validatedConfig.schema || template.schema
240
290
  };
241
291
  }
242
292
  }
@@ -268,6 +318,39 @@ const cook = async (config)=>{
268
318
  const contextSection = create$3({
269
319
  title: "Context"
270
320
  });
321
+ // Advanced sections
322
+ const constraintSection = create$3({
323
+ title: "Constraints"
324
+ });
325
+ const toneSection = create$3({
326
+ title: "Tone"
327
+ });
328
+ const exampleSection = create$3({
329
+ title: "Examples"
330
+ });
331
+ const reasoningSection = create$3({
332
+ title: "Reasoning"
333
+ });
334
+ const responseFormatSection = create$3({
335
+ title: "Response Format"
336
+ });
337
+ const recapSection = create$3({
338
+ title: "Recap"
339
+ });
340
+ const safeguardSection = create$3({
341
+ title: "Safeguards"
342
+ });
343
+ // Helper for processing list items
344
+ const processList = async (items, section, type)=>{
345
+ for (const item of items){
346
+ await processContentItem(item, section, type, {
347
+ basePath: finalConfig.basePath,
348
+ parser: parser$1,
349
+ override: override$1,
350
+ loader: loader$1,
351
+ parameters: finalConfig.parameters});
352
+ }
353
+ };
271
354
  // Process persona
272
355
  if (finalConfig.persona) {
273
356
  await processContentItem(finalConfig.persona, personaSection, 'persona', {
@@ -277,15 +360,18 @@ const cook = async (config)=>{
277
360
  loader: loader$1,
278
361
  parameters: finalConfig.parameters});
279
362
  }
280
- // Process instructions
281
- for (const item of finalConfig.instructions || []){
282
- await processContentItem(item, instructionSection, 'instruction', {
283
- basePath: finalConfig.basePath,
284
- parser: parser$1,
285
- override: override$1,
286
- loader: loader$1,
287
- parameters: finalConfig.parameters});
288
- }
363
+ // Process standard sections
364
+ await processList(finalConfig.instructions || [], instructionSection, 'instruction');
365
+ await processList(finalConfig.content || [], contentSection, 'content');
366
+ await processList(finalConfig.context || [], contextSection, 'context');
367
+ // Process advanced sections
368
+ await processList(finalConfig.constraints || [], constraintSection, 'instruction');
369
+ await processList(finalConfig.tone || [], toneSection, 'instruction');
370
+ await processList(finalConfig.examples || [], exampleSection, 'content');
371
+ await processList(finalConfig.reasoning || [], reasoningSection, 'instruction');
372
+ await processList(finalConfig.responseFormat || [], responseFormatSection, 'instruction');
373
+ await processList(finalConfig.recap || [], recapSection, 'instruction');
374
+ await processList(finalConfig.safeguards || [], safeguardSection, 'instruction');
289
375
  // Generate tool guidance if tools are provided
290
376
  if (finalConfig.tools) {
291
377
  const tools = Array.isArray(finalConfig.tools) ? finalConfig.tools : finalConfig.tools.getAll();
@@ -299,30 +385,59 @@ const cook = async (config)=>{
299
385
  instructionSection.add(toolSection);
300
386
  }
301
387
  }
302
- // Process content
303
- for (const item of finalConfig.content || []){
304
- await processContentItem(item, contentSection, 'content', {
305
- basePath: finalConfig.basePath,
306
- parser: parser$1,
307
- override: override$1,
308
- loader: loader$1,
309
- parameters: finalConfig.parameters});
310
- }
311
- // Process context
312
- for (const item of finalConfig.context || []){
313
- await processContentItem(item, contextSection, 'context', {
314
- basePath: finalConfig.basePath,
315
- parser: parser$1,
316
- override: override$1,
317
- loader: loader$1,
318
- parameters: finalConfig.parameters});
388
+ // Process schema
389
+ let schema = finalConfig.schema;
390
+ let validator = undefined;
391
+ if (schema instanceof z.ZodType) {
392
+ var _jsonSchema_definitions;
393
+ // It's a Zod schema!
394
+ validator = schema;
395
+ const jsonSchema = zodToJsonSchema(schema, "response");
396
+ // Wrap in OpenAI Structured Output format
397
+ // zod-to-json-schema returns { "$schema": "...", "definitions": { "response": { ... } }, "$ref": "#/definitions/response" }
398
+ // We need to extract the schema part.
399
+ // Simpler usage for OpenAI: just get the schema object.
400
+ // Actually, zod-to-json-schema produces a full JSON schema object.
401
+ // OpenAI expects: { type: "json_schema", json_schema: { name: "...", schema: ... } }
402
+ // Let's create a clean schema object
403
+ // NOTE: OpenAI requires strict: true and additionalProperties: false
404
+ // zod-to-json-schema generally produces compatible schemas but strictness might need tweaking if required by OpenAI.
405
+ // For now, let's assume "response" as the name.
406
+ // We'll define a simpler conversion if possible, or trust the user to configure Zod strictly if they want strict mode.
407
+ // Extract the definition if it exists
408
+ const actualSchema = ((_jsonSchema_definitions = jsonSchema.definitions) === null || _jsonSchema_definitions === void 0 ? void 0 : _jsonSchema_definitions.response) || jsonSchema;
409
+ schema = {
410
+ type: "json_schema",
411
+ json_schema: {
412
+ name: "response",
413
+ schema: actualSchema,
414
+ strict: true // Try to enable strict mode for OpenAI
415
+ }
416
+ };
417
+ } else if (typeof schema === 'string') {
418
+ const schemaPath = path__default.resolve(finalConfig.basePath, schema);
419
+ try {
420
+ const schemaContent = await fs__default.readFile(schemaPath, 'utf-8');
421
+ schema = JSON.parse(schemaContent);
422
+ } catch (e) {
423
+ throw new Error(`Failed to load schema from ${schemaPath}: ${e.message}`);
424
+ }
319
425
  }
320
426
  // Build and return prompt
321
427
  return create$4({
322
- persona: personaSection,
428
+ persona: personaSection.items.length > 0 ? personaSection : undefined,
323
429
  instructions: instructionSection,
324
- contents: contentSection,
325
- contexts: contextSection
430
+ contents: contentSection.items.length > 0 ? contentSection : undefined,
431
+ contexts: contextSection.items.length > 0 ? contextSection : undefined,
432
+ constraints: constraintSection.items.length > 0 ? constraintSection : undefined,
433
+ tone: toneSection.items.length > 0 ? toneSection : undefined,
434
+ examples: exampleSection.items.length > 0 ? exampleSection : undefined,
435
+ reasoning: reasoningSection.items.length > 0 ? reasoningSection : undefined,
436
+ responseFormat: responseFormatSection.items.length > 0 ? responseFormatSection : undefined,
437
+ recap: recapSection.items.length > 0 ? recapSection : undefined,
438
+ safeguards: safeguardSection.items.length > 0 ? safeguardSection : undefined,
439
+ schema,
440
+ validator
326
441
  });
327
442
  };
328
443
  const processContentItem = async (item, section, type, ctx)=>{
@@ -400,6 +515,59 @@ const recipe = (basePath)=>{
400
515
  ];
401
516
  return builder;
402
517
  },
518
+ constraints: (...constraints)=>{
519
+ config.constraints = [
520
+ ...config.constraints || [],
521
+ ...constraints
522
+ ];
523
+ return builder;
524
+ },
525
+ tone: (...tone)=>{
526
+ config.tone = [
527
+ ...config.tone || [],
528
+ ...tone
529
+ ];
530
+ return builder;
531
+ },
532
+ examples: (...examples)=>{
533
+ config.examples = [
534
+ ...config.examples || [],
535
+ ...examples
536
+ ];
537
+ return builder;
538
+ },
539
+ reasoning: (...reasoning)=>{
540
+ config.reasoning = [
541
+ ...config.reasoning || [],
542
+ ...reasoning
543
+ ];
544
+ return builder;
545
+ },
546
+ responseFormat: (...responseFormat)=>{
547
+ config.responseFormat = [
548
+ ...config.responseFormat || [],
549
+ ...responseFormat
550
+ ];
551
+ return builder;
552
+ },
553
+ recap: (...recap)=>{
554
+ config.recap = [
555
+ ...config.recap || [],
556
+ ...recap
557
+ ];
558
+ return builder;
559
+ },
560
+ safeguards: (...safeguards)=>{
561
+ config.safeguards = [
562
+ ...config.safeguards || [],
563
+ ...safeguards
564
+ ];
565
+ return builder;
566
+ },
567
+ schema: (schema)=>{
568
+ config.schema = schema;
569
+ return builder;
570
+ },
403
571
  parameters: (parameters)=>{
404
572
  config.parameters = {
405
573
  ...config.parameters,
@@ -1 +1 @@
1
- {"version":3,"file":"recipes.js","sources":["../src/recipes.ts"],"sourcesContent":["import path from \"path\";\nimport { z } from \"zod\";\nimport { Model } from \"./chat\";\nimport { ConversationBuilder } from \"./conversation\";\nimport { ParametersSchema } from \"./items/parameters\";\nimport { SectionOptions } from \"./items/section\";\nimport { DEFAULT_LOGGER, wrapLogger } from \"./logger\";\nimport { Content, Context, createPrompt, createSection, Instruction, Loader, Override, Parser, Prompt, Section, Weighted } from \"./riotprompt\";\nimport { type TokenBudgetConfig } from \"./token-budget\";\nimport { Tool, ToolRegistry } from \"./tools\";\nimport { StrategyExecutor, type IterationStrategy, type LLMClient, type StrategyResult } from \"./iteration-strategy\";\n\n// ===== CONFIGURATION SCHEMAS =====\n\nconst ContentItemSchema = z.union([\n z.string(), // Simple string content\n z.object({\n content: z.string(),\n title: z.string().optional(),\n weight: z.number().optional(),\n }),\n z.object({\n path: z.string(),\n title: z.string().optional(),\n weight: z.number().optional(),\n }),\n z.object({\n directories: z.array(z.string()),\n title: z.string().optional(),\n weight: z.number().optional(),\n })\n]);\n\nconst RecipeConfigSchema = z.object({\n // Core settings\n basePath: z.string(),\n logger: z.any().optional().default(DEFAULT_LOGGER),\n overridePaths: z.array(z.string()).optional().default([\"./\"]),\n overrides: z.boolean().optional().default(false),\n parameters: ParametersSchema.optional().default({}),\n\n // Content sections\n persona: ContentItemSchema.optional(),\n instructions: z.array(ContentItemSchema).optional().default([]),\n content: z.array(ContentItemSchema).optional().default([]),\n context: z.array(ContentItemSchema).optional().default([]),\n\n // Templates and inheritance\n extends: z.string().optional(), // Extend another recipe\n template: z.string().optional(), // Generic template name\n\n // Tool integration\n tools: z.any().optional(), // Tool[] | ToolRegistry\n toolGuidance: z.union([\n z.enum(['auto', 'minimal', 'detailed']),\n z.object({\n strategy: z.enum(['adaptive', 'prescriptive', 'minimal']),\n includeExamples: z.boolean().optional(),\n explainWhenToUse: z.boolean().optional(),\n includeCategories: z.boolean().optional(),\n customInstructions: z.string().optional(),\n })\n ]).optional(),\n toolCategories: z.array(z.string()).optional(),\n});\n\ntype RecipeConfig = z.infer<typeof RecipeConfigSchema>;\ntype ContentItem = z.infer<typeof ContentItemSchema>;\n\n// ===== CONFIGURABLE TEMPLATE SYSTEM =====\n\nexport interface ToolGuidanceConfig {\n strategy: 'adaptive' | 'prescriptive' | 'minimal';\n includeExamples?: boolean;\n explainWhenToUse?: boolean;\n includeCategories?: boolean;\n customInstructions?: string;\n}\n\nexport interface TemplateConfig {\n persona?: ContentItem;\n instructions?: ContentItem[];\n content?: ContentItem[];\n context?: ContentItem[];\n tools?: Tool[] | ToolRegistry;\n toolGuidance?: Partial<ToolGuidanceConfig> | 'auto' | 'minimal' | 'detailed';\n}\n\n// User-customizable template registry\nlet TEMPLATES: Record<string, TemplateConfig> = {};\n\n/**\n * Register custom templates with the recipes system\n *\n * @example\n * ```typescript\n * // Register your own templates\n * registerTemplates({\n * myWorkflow: {\n * persona: { path: \"personas/my-persona.md\" },\n * instructions: [{ path: \"instructions/my-instructions.md\" }]\n * },\n * anotherTemplate: {\n * persona: { content: \"You are a helpful assistant\" },\n * instructions: [{ content: \"Follow these steps...\" }]\n * }\n * });\n * ```\n */\nexport const registerTemplates = (templates: Record<string, TemplateConfig>): void => {\n TEMPLATES = { ...TEMPLATES, ...templates };\n};\n\n/**\n * Get currently registered templates\n */\nexport const getTemplates = (): Record<string, TemplateConfig> => ({ ...TEMPLATES });\n\n/**\n * Clear all registered templates\n */\nexport const clearTemplates = (): void => {\n TEMPLATES = {};\n};\n\n// ===== TOOL GUIDANCE GENERATION =====\n\n/**\n * Generate tool guidance instructions based on strategy\n */\nexport const generateToolGuidance = (\n tools: Tool[],\n guidance: ToolGuidanceConfig | 'auto' | 'minimal' | 'detailed'\n): string => {\n if (tools.length === 0) {\n return '';\n }\n\n // Normalize guidance config\n let config: ToolGuidanceConfig;\n if (typeof guidance === 'string') {\n switch (guidance) {\n case 'auto':\n case 'detailed':\n config = { strategy: 'adaptive', includeExamples: true, explainWhenToUse: true };\n break;\n case 'minimal':\n config = { strategy: 'minimal', includeExamples: false, explainWhenToUse: false };\n break;\n default:\n config = { strategy: 'adaptive' };\n }\n } else {\n config = guidance;\n }\n\n let output = '## Available Tools\\n\\n';\n\n if (config.customInstructions) {\n output += config.customInstructions + '\\n\\n';\n }\n\n // Group by category if enabled\n if (config.includeCategories) {\n const categorized = new Map<string, Tool[]>();\n tools.forEach(tool => {\n const category = tool.category || 'General';\n if (!categorized.has(category)) {\n categorized.set(category, []);\n }\n categorized.get(category)!.push(tool);\n });\n\n categorized.forEach((categoryTools, category) => {\n output += `### ${category}\\n\\n`;\n categoryTools.forEach(tool => {\n output += formatToolGuidance(tool, config);\n });\n });\n } else {\n tools.forEach(tool => {\n output += formatToolGuidance(tool, config);\n });\n }\n\n return output;\n};\n\nconst formatToolGuidance = (tool: Tool, config: ToolGuidanceConfig): string => {\n let output = `**${tool.name}**`;\n\n if (tool.cost) {\n output += ` _(${tool.cost})_`;\n }\n\n output += `\\n${tool.description}\\n\\n`;\n\n if (config.strategy !== 'minimal') {\n // Parameters\n const required = tool.parameters.required || [];\n const paramList = Object.entries(tool.parameters.properties)\n .map(([name, param]) => {\n const isRequired = required.includes(name);\n return `- \\`${name}\\`${isRequired ? ' (required)' : ''}: ${param.description}`;\n })\n .join('\\n');\n\n if (paramList) {\n output += 'Parameters:\\n' + paramList + '\\n\\n';\n }\n\n // When to use (adaptive and prescriptive)\n if (config.explainWhenToUse && (config.strategy === 'adaptive' || config.strategy === 'prescriptive')) {\n output += `**When to use:** ${tool.description}\\n\\n`;\n }\n\n // Examples\n if (config.includeExamples && tool.examples && tool.examples.length > 0) {\n output += '**Examples:**\\n';\n tool.examples.forEach(example => {\n output += `- ${example.scenario}: \\`${tool.name}(${JSON.stringify(example.params)})\\`\\n`;\n });\n output += '\\n';\n }\n }\n\n output += '---\\n\\n';\n\n return output;\n};\n\n// ===== CORE RECIPE ENGINE =====\n\nexport const cook = async (config: Partial<RecipeConfig> & { basePath: string }): Promise<Prompt> => {\n // Parse and validate configuration with defaults\n const validatedConfig = RecipeConfigSchema.parse({\n overridePaths: [\"./\"],\n overrides: false,\n parameters: {},\n instructions: [],\n content: [],\n context: [],\n ...config\n });\n\n // Handle template inheritance\n let finalConfig = { ...validatedConfig };\n if (validatedConfig.template) {\n const template = TEMPLATES[validatedConfig.template];\n if (template) {\n finalConfig = {\n ...validatedConfig,\n persona: validatedConfig.persona || template.persona,\n instructions: [\n ...(template.instructions || []),\n ...(validatedConfig.instructions || [])\n ],\n content: [\n ...(template.content || []),\n ...(validatedConfig.content || [])\n ],\n context: [\n ...(template.context || []),\n ...(validatedConfig.context || [])\n ],\n };\n }\n }\n\n // Setup internal services\n const logger = wrapLogger(finalConfig.logger, 'Recipe');\n const parser = Parser.create({ logger });\n const override = Override.create({\n logger,\n configDirs: finalConfig.overridePaths || [\"./\"],\n overrides: finalConfig.overrides || false\n });\n const loader = Loader.create({ logger });\n\n // Create sections\n const personaSection: Section<Instruction> = createSection({ title: \"Persona\" });\n const instructionSection: Section<Instruction> = createSection({ title: \"Instruction\" });\n const contentSection: Section<Content> = createSection({ title: \"Content\" });\n const contextSection: Section<Context> = createSection({ title: \"Context\" });\n\n // Process persona\n if (finalConfig.persona) {\n await processContentItem(finalConfig.persona, personaSection, 'persona', {\n basePath: finalConfig.basePath,\n parser,\n override,\n loader,\n parameters: finalConfig.parameters,\n logger\n });\n }\n\n // Process instructions\n for (const item of finalConfig.instructions || []) {\n await processContentItem(item, instructionSection, 'instruction', {\n basePath: finalConfig.basePath,\n parser,\n override,\n loader,\n parameters: finalConfig.parameters,\n logger\n });\n }\n\n // Generate tool guidance if tools are provided\n if (finalConfig.tools) {\n const tools: Tool[] = Array.isArray(finalConfig.tools)\n ? finalConfig.tools\n : finalConfig.tools.getAll();\n\n // Filter by categories if specified\n const filteredTools: Tool[] = finalConfig.toolCategories\n ? tools.filter((tool: Tool) => tool.category && finalConfig.toolCategories!.includes(tool.category))\n : tools;\n\n if (filteredTools.length > 0 && finalConfig.toolGuidance) {\n const guidance = generateToolGuidance(filteredTools, finalConfig.toolGuidance);\n const toolSection = await parser.parse(guidance, { parameters: finalConfig.parameters });\n instructionSection.add(toolSection);\n }\n }\n\n // Process content\n for (const item of finalConfig.content || []) {\n await processContentItem(item, contentSection, 'content', {\n basePath: finalConfig.basePath,\n parser,\n override,\n loader,\n parameters: finalConfig.parameters,\n logger\n });\n }\n\n // Process context\n for (const item of finalConfig.context || []) {\n await processContentItem(item, contextSection, 'context', {\n basePath: finalConfig.basePath,\n parser,\n override,\n loader,\n parameters: finalConfig.parameters,\n logger\n });\n }\n\n // Build and return prompt\n return createPrompt({\n persona: personaSection,\n instructions: instructionSection,\n contents: contentSection,\n contexts: contextSection\n });\n};\n\n// ===== CONTENT PROCESSING =====\n\ninterface ProcessingContext {\n basePath: string;\n parser: any;\n override: any;\n loader: any;\n parameters: any;\n logger: any;\n}\n\nconst processContentItem = async <T extends Weighted>(\n item: ContentItem,\n section: Section<T>,\n type: 'persona' | 'instruction' | 'content' | 'context',\n ctx: ProcessingContext\n): Promise<void> => {\n const sectionOptions: SectionOptions = {\n parameters: ctx.parameters,\n };\n\n if (typeof item === 'string') {\n // Simple string content\n const parsedSection = await ctx.parser.parse(item, sectionOptions);\n section.add(parsedSection);\n } else if ('content' in item) {\n // Inline content with options\n const parsedSection = await ctx.parser.parse(item.content, {\n ...sectionOptions,\n title: item.title,\n weight: item.weight,\n });\n section.add(parsedSection);\n } else if ('path' in item) {\n // File path\n const fullPath = path.join(ctx.basePath, item.path);\n const parsedSection = await ctx.parser.parseFile(fullPath, {\n ...sectionOptions,\n title: item.title,\n weight: item.weight,\n });\n const overrideSection = await ctx.override.customize(item.path, parsedSection, sectionOptions);\n section.add(overrideSection);\n } else if ('directories' in item) {\n // Directory loading\n const sections = await ctx.loader.load(item.directories, {\n ...sectionOptions,\n title: item.title,\n weight: item.weight,\n });\n section.add(sections);\n }\n};\n\n// ===== FLUENT RECIPE BUILDER =====\n\nexport const recipe = (basePath: string) => {\n const config: Partial<RecipeConfig> & { basePath: string } = { basePath };\n\n const builder = {\n template: (name: string) => {\n config.template = name;\n return builder;\n },\n with: (partialConfig: Partial<RecipeConfig>) => {\n Object.assign(config, partialConfig);\n return builder;\n },\n persona: (persona: ContentItem) => {\n config.persona = persona;\n return builder;\n },\n instructions: (...instructions: ContentItem[]) => {\n config.instructions = [...(config.instructions || []), ...instructions];\n return builder;\n },\n content: (...content: ContentItem[]) => {\n config.content = [...(config.content || []), ...content];\n return builder;\n },\n context: (...context: ContentItem[]) => {\n config.context = [...(config.context || []), ...context];\n return builder;\n },\n parameters: (parameters: any) => {\n config.parameters = { ...config.parameters, ...parameters };\n return builder;\n },\n overrides: (enabled: boolean) => {\n config.overrides = enabled;\n return builder;\n },\n overridePaths: (paths: string[]) => {\n config.overridePaths = paths;\n return builder;\n },\n tools: (tools: Tool[] | ToolRegistry) => {\n config.tools = tools;\n return builder;\n },\n toolRegistry: (registry: ToolRegistry) => {\n config.tools = registry;\n return builder;\n },\n toolGuidance: (guidance: ToolGuidanceConfig | 'auto' | 'minimal' | 'detailed') => {\n config.toolGuidance = guidance as any;\n return builder;\n },\n toolCategories: (categories: string[]) => {\n config.toolCategories = categories;\n return builder;\n },\n cook: () => cook(config),\n buildConversation: async (model: Model, tokenBudget?: TokenBudgetConfig) => {\n const prompt = await cook(config);\n const conversation = ConversationBuilder.create({ model }, config.logger);\n conversation.fromPrompt(prompt, model);\n\n // Apply token budget if provided\n if (tokenBudget) {\n conversation.withTokenBudget(tokenBudget);\n }\n\n return conversation;\n },\n getToolRegistry: (): ToolRegistry | undefined => {\n if (config.tools instanceof ToolRegistry) {\n return config.tools;\n } else if (Array.isArray(config.tools)) {\n const registry = ToolRegistry.create({}, config.logger);\n registry.registerAll(config.tools);\n return registry;\n }\n return undefined;\n },\n executeWith: async (\n llm: LLMClient,\n strategy: IterationStrategy,\n model: Model = 'gpt-4o',\n tokenBudget?: TokenBudgetConfig\n ): Promise<StrategyResult> => {\n const prompt = await cook(config);\n const conversation = ConversationBuilder.create({ model }, config.logger);\n conversation.fromPrompt(prompt, model);\n\n if (tokenBudget) {\n conversation.withTokenBudget(tokenBudget);\n }\n\n const registry = builder.getToolRegistry();\n if (!registry) {\n throw new Error('Tools must be configured to use executeWith');\n }\n\n const executor = new StrategyExecutor(llm, config.logger);\n return executor.execute(conversation, registry, strategy);\n },\n };\n\n return builder;\n};\n\n// Export types for external use\nexport type { RecipeConfig, ContentItem };\n"],"names":["ContentItemSchema","z","union","string","object","content","title","optional","weight","number","path","directories","array","RecipeConfigSchema","basePath","logger","any","default","DEFAULT_LOGGER","overridePaths","overrides","boolean","parameters","ParametersSchema","persona","instructions","context","extends","template","tools","toolGuidance","enum","strategy","includeExamples","explainWhenToUse","includeCategories","customInstructions","toolCategories","TEMPLATES","registerTemplates","templates","getTemplates","clearTemplates","generateToolGuidance","guidance","length","config","output","categorized","Map","forEach","tool","category","has","set","get","push","categoryTools","formatToolGuidance","name","cost","description","required","paramList","Object","entries","properties","map","param","isRequired","includes","join","examples","example","scenario","JSON","stringify","params","cook","validatedConfig","parse","finalConfig","wrapLogger","parser","Parser","override","Override","configDirs","loader","Loader","personaSection","createSection","instructionSection","contentSection","contextSection","processContentItem","item","Array","isArray","getAll","filteredTools","filter","toolSection","add","createPrompt","contents","contexts","section","type","ctx","sectionOptions","parsedSection","fullPath","parseFile","overrideSection","customize","sections","load","recipe","builder","with","partialConfig","assign","enabled","paths","toolRegistry","registry","categories","buildConversation","model","tokenBudget","prompt","conversation","ConversationBuilder","create","fromPrompt","withTokenBudget","getToolRegistry","ToolRegistry","registerAll","undefined","executeWith","llm","Error","executor","StrategyExecutor","execute"],"mappings":"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"}
1
+ {"version":3,"file":"recipes.js","sources":["../src/recipes.ts"],"sourcesContent":["import path from \"path\";\nimport fs from \"fs/promises\";\nimport { z } from \"zod\";\nimport zodToJsonSchema from \"zod-to-json-schema\";\nimport { Model } from \"./chat\";\nimport { ConversationBuilder } from \"./conversation\";\nimport { ParametersSchema } from \"./items/parameters\";\nimport { SectionOptions } from \"./items/section\";\nimport { DEFAULT_LOGGER, wrapLogger } from \"./logger\";\nimport { Content, Context, createPrompt, createSection, Instruction, Loader, Override, Parser, Prompt, Section, Weighted } from \"./riotprompt\";\nimport { type TokenBudgetConfig } from \"./token-budget\";\nimport { Tool, ToolRegistry } from \"./tools\";\nimport { StrategyExecutor, type IterationStrategy, type LLMClient, type StrategyResult } from \"./iteration-strategy\";\n\n// ===== CONFIGURATION SCHEMAS =====\n\nconst ContentItemSchema = z.union([\n z.string(), // Simple string content\n z.object({\n content: z.string(),\n title: z.string().optional(),\n weight: z.number().optional(),\n }),\n z.object({\n path: z.string(),\n title: z.string().optional(),\n weight: z.number().optional(),\n }),\n z.object({\n directories: z.array(z.string()),\n title: z.string().optional(),\n weight: z.number().optional(),\n })\n]);\n\nconst RecipeConfigSchema = z.object({\n // Core settings\n basePath: z.string(),\n logger: z.any().optional().default(DEFAULT_LOGGER),\n overridePaths: z.array(z.string()).optional().default([\"./\"]),\n overrides: z.boolean().optional().default(false),\n parameters: ParametersSchema.optional().default({}),\n\n // Content sections\n persona: ContentItemSchema.optional(),\n instructions: z.array(ContentItemSchema).optional().default([]),\n content: z.array(ContentItemSchema).optional().default([]),\n context: z.array(ContentItemSchema).optional().default([]),\n\n // Advanced prompting sections\n constraints: z.array(ContentItemSchema).optional().default([]),\n tone: z.array(ContentItemSchema).optional().default([]),\n examples: z.array(ContentItemSchema).optional().default([]),\n reasoning: z.array(ContentItemSchema).optional().default([]),\n responseFormat: z.array(ContentItemSchema).optional().default([]),\n recap: z.array(ContentItemSchema).optional().default([]),\n safeguards: z.array(ContentItemSchema).optional().default([]),\n schema: z.any().optional(), // Can be string path, JSON object, or Zod schema\n\n // Templates and inheritance\n extends: z.string().optional(), // Extend another recipe\n template: z.string().optional(), // Generic template name\n\n // Tool integration\n tools: z.any().optional(), // Tool[] | ToolRegistry\n toolGuidance: z.union([\n z.enum(['auto', 'minimal', 'detailed']),\n z.object({\n strategy: z.enum(['adaptive', 'prescriptive', 'minimal']),\n includeExamples: z.boolean().optional(),\n explainWhenToUse: z.boolean().optional(),\n includeCategories: z.boolean().optional(),\n customInstructions: z.string().optional(),\n })\n ]).optional(),\n toolCategories: z.array(z.string()).optional(),\n});\n\ntype RecipeConfig = z.infer<typeof RecipeConfigSchema>;\ntype ContentItem = z.infer<typeof ContentItemSchema>;\n\n// ===== CONFIGURABLE TEMPLATE SYSTEM =====\n\nexport interface ToolGuidanceConfig {\n strategy: 'adaptive' | 'prescriptive' | 'minimal';\n includeExamples?: boolean;\n explainWhenToUse?: boolean;\n includeCategories?: boolean;\n customInstructions?: string;\n}\n\nexport interface TemplateConfig {\n persona?: ContentItem;\n instructions?: ContentItem[];\n content?: ContentItem[];\n context?: ContentItem[];\n constraints?: ContentItem[];\n tone?: ContentItem[];\n examples?: ContentItem[];\n reasoning?: ContentItem[];\n responseFormat?: ContentItem[];\n recap?: ContentItem[];\n safeguards?: ContentItem[];\n schema?: string | Record<string, any> | z.ZodType<any>;\n tools?: Tool[] | ToolRegistry;\n toolGuidance?: Partial<ToolGuidanceConfig> | 'auto' | 'minimal' | 'detailed';\n}\n\n// User-customizable template registry\nlet TEMPLATES: Record<string, TemplateConfig> = {};\n\n/**\n * Register custom templates with the recipes system\n *\n * @example\n * ```typescript\n * // Register your own templates\n * registerTemplates({\n * myWorkflow: {\n * persona: { path: \"personas/my-persona.md\" },\n * instructions: [{ path: \"instructions/my-instructions.md\" }]\n * },\n * anotherTemplate: {\n * persona: { content: \"You are a helpful assistant\" },\n * instructions: [{ content: \"Follow these steps...\" }]\n * }\n * });\n * ```\n */\nexport const registerTemplates = (templates: Record<string, TemplateConfig>): void => {\n TEMPLATES = { ...TEMPLATES, ...templates };\n};\n\n/**\n * Get currently registered templates\n */\nexport const getTemplates = (): Record<string, TemplateConfig> => ({ ...TEMPLATES });\n\n/**\n * Clear all registered templates\n */\nexport const clearTemplates = (): void => {\n TEMPLATES = {};\n};\n\n// ===== TOOL GUIDANCE GENERATION =====\n\n/**\n * Generate tool guidance instructions based on strategy\n */\nexport const generateToolGuidance = (\n tools: Tool[],\n guidance: ToolGuidanceConfig | 'auto' | 'minimal' | 'detailed'\n): string => {\n if (tools.length === 0) {\n return '';\n }\n\n // Normalize guidance config\n let config: ToolGuidanceConfig;\n if (typeof guidance === 'string') {\n switch (guidance) {\n case 'auto':\n case 'detailed':\n config = { strategy: 'adaptive', includeExamples: true, explainWhenToUse: true };\n break;\n case 'minimal':\n config = { strategy: 'minimal', includeExamples: false, explainWhenToUse: false };\n break;\n default:\n config = { strategy: 'adaptive' };\n }\n } else {\n config = guidance;\n }\n\n let output = '## Available Tools\\n\\n';\n\n if (config.customInstructions) {\n output += config.customInstructions + '\\n\\n';\n }\n\n // Group by category if enabled\n if (config.includeCategories) {\n const categorized = new Map<string, Tool[]>();\n tools.forEach(tool => {\n const category = tool.category || 'General';\n if (!categorized.has(category)) {\n categorized.set(category, []);\n }\n categorized.get(category)!.push(tool);\n });\n\n categorized.forEach((categoryTools, category) => {\n output += `### ${category}\\n\\n`;\n categoryTools.forEach(tool => {\n output += formatToolGuidance(tool, config);\n });\n });\n } else {\n tools.forEach(tool => {\n output += formatToolGuidance(tool, config);\n });\n }\n\n return output;\n};\n\nconst formatToolGuidance = (tool: Tool, config: ToolGuidanceConfig): string => {\n let output = `**${tool.name}**`;\n\n if (tool.cost) {\n output += ` _(${tool.cost})_`;\n }\n\n output += `\\n${tool.description}\\n\\n`;\n\n if (config.strategy !== 'minimal') {\n // Parameters\n const required = tool.parameters.required || [];\n const paramList = Object.entries(tool.parameters.properties)\n .map(([name, param]) => {\n const isRequired = required.includes(name);\n return `- \\`${name}\\`${isRequired ? ' (required)' : ''}: ${param.description}`;\n })\n .join('\\n');\n\n if (paramList) {\n output += 'Parameters:\\n' + paramList + '\\n\\n';\n }\n\n // When to use (adaptive and prescriptive)\n if (config.explainWhenToUse && (config.strategy === 'adaptive' || config.strategy === 'prescriptive')) {\n output += `**When to use:** ${tool.description}\\n\\n`;\n }\n\n // Examples\n if (config.includeExamples && tool.examples && tool.examples.length > 0) {\n output += '**Examples:**\\n';\n tool.examples.forEach(example => {\n output += `- ${example.scenario}: \\`${tool.name}(${JSON.stringify(example.params)})\\`\\n`;\n });\n output += '\\n';\n }\n }\n\n output += '---\\n\\n';\n\n return output;\n};\n\n// ===== CORE RECIPE ENGINE =====\n\nexport const cook = async (config: Partial<RecipeConfig> & { basePath: string }): Promise<Prompt> => {\n // Parse and validate configuration with defaults\n const validatedConfig = RecipeConfigSchema.parse({\n overridePaths: [\"./\"],\n overrides: false,\n parameters: {},\n instructions: [],\n content: [],\n context: [],\n constraints: [],\n tone: [],\n examples: [],\n reasoning: [],\n responseFormat: [],\n recap: [],\n safeguards: [],\n ...config\n });\n\n // Handle template inheritance\n let finalConfig = { ...validatedConfig };\n if (validatedConfig.template) {\n const template = TEMPLATES[validatedConfig.template];\n if (template) {\n finalConfig = {\n ...validatedConfig,\n persona: validatedConfig.persona || template.persona,\n instructions: [\n ...(template.instructions || []),\n ...(validatedConfig.instructions || [])\n ],\n content: [\n ...(template.content || []),\n ...(validatedConfig.content || [])\n ],\n context: [\n ...(template.context || []),\n ...(validatedConfig.context || [])\n ],\n constraints: [\n ...(template.constraints || []),\n ...(validatedConfig.constraints || [])\n ],\n tone: [\n ...(template.tone || []),\n ...(validatedConfig.tone || [])\n ],\n examples: [\n ...(template.examples || []),\n ...(validatedConfig.examples || [])\n ],\n reasoning: [\n ...(template.reasoning || []),\n ...(validatedConfig.reasoning || [])\n ],\n responseFormat: [\n ...(template.responseFormat || []),\n ...(validatedConfig.responseFormat || [])\n ],\n recap: [\n ...(template.recap || []),\n ...(validatedConfig.recap || [])\n ],\n safeguards: [\n ...(template.safeguards || []),\n ...(validatedConfig.safeguards || [])\n ],\n schema: validatedConfig.schema || template.schema,\n };\n }\n }\n\n // Setup internal services\n const logger = wrapLogger(finalConfig.logger, 'Recipe');\n const parser = Parser.create({ logger });\n const override = Override.create({\n logger,\n configDirs: finalConfig.overridePaths || [\"./\"],\n overrides: finalConfig.overrides || false\n });\n const loader = Loader.create({ logger });\n\n // Create sections\n const personaSection: Section<Instruction> = createSection({ title: \"Persona\" });\n const instructionSection: Section<Instruction> = createSection({ title: \"Instruction\" });\n const contentSection: Section<Content> = createSection({ title: \"Content\" });\n const contextSection: Section<Context> = createSection({ title: \"Context\" });\n \n // Advanced sections\n const constraintSection: Section<Instruction> = createSection({ title: \"Constraints\" });\n const toneSection: Section<Instruction> = createSection({ title: \"Tone\" });\n const exampleSection: Section<Content> = createSection({ title: \"Examples\" });\n const reasoningSection: Section<Instruction> = createSection({ title: \"Reasoning\" });\n const responseFormatSection: Section<Instruction> = createSection({ title: \"Response Format\" });\n const recapSection: Section<Instruction> = createSection({ title: \"Recap\" });\n const safeguardSection: Section<Instruction> = createSection({ title: \"Safeguards\" });\n\n // Helper for processing list items\n const processList = async <T extends Weighted>(\n items: ContentItem[],\n section: Section<T>,\n type: 'persona' | 'instruction' | 'content' | 'context'\n ) => {\n for (const item of items) {\n await processContentItem(item, section, type, {\n basePath: finalConfig.basePath,\n parser,\n override,\n loader,\n parameters: finalConfig.parameters,\n logger\n });\n }\n };\n\n // Process persona\n if (finalConfig.persona) {\n await processContentItem(finalConfig.persona, personaSection, 'persona', {\n basePath: finalConfig.basePath,\n parser,\n override,\n loader,\n parameters: finalConfig.parameters,\n logger\n });\n }\n\n // Process standard sections\n await processList(finalConfig.instructions || [], instructionSection, 'instruction');\n await processList(finalConfig.content || [], contentSection, 'content');\n await processList(finalConfig.context || [], contextSection, 'context');\n\n // Process advanced sections\n await processList(finalConfig.constraints || [], constraintSection, 'instruction');\n await processList(finalConfig.tone || [], toneSection, 'instruction');\n await processList(finalConfig.examples || [], exampleSection, 'content');\n await processList(finalConfig.reasoning || [], reasoningSection, 'instruction');\n await processList(finalConfig.responseFormat || [], responseFormatSection, 'instruction');\n await processList(finalConfig.recap || [], recapSection, 'instruction');\n await processList(finalConfig.safeguards || [], safeguardSection, 'instruction');\n\n // Generate tool guidance if tools are provided\n if (finalConfig.tools) {\n const tools: Tool[] = Array.isArray(finalConfig.tools)\n ? finalConfig.tools\n : finalConfig.tools.getAll();\n\n // Filter by categories if specified\n const filteredTools: Tool[] = finalConfig.toolCategories\n ? tools.filter((tool: Tool) => tool.category && finalConfig.toolCategories!.includes(tool.category))\n : tools;\n\n if (filteredTools.length > 0 && finalConfig.toolGuidance) {\n const guidance = generateToolGuidance(filteredTools, finalConfig.toolGuidance);\n const toolSection = await parser.parse(guidance, { parameters: finalConfig.parameters });\n instructionSection.add(toolSection);\n }\n }\n\n // Process schema\n let schema = finalConfig.schema;\n let validator: any = undefined;\n\n if (schema instanceof z.ZodType) {\n // It's a Zod schema!\n validator = schema;\n const jsonSchema = zodToJsonSchema(schema as any, \"response\");\n \n // Wrap in OpenAI Structured Output format\n // zod-to-json-schema returns { \"$schema\": \"...\", \"definitions\": { \"response\": { ... } }, \"$ref\": \"#/definitions/response\" }\n // We need to extract the schema part.\n \n // Simpler usage for OpenAI: just get the schema object.\n // Actually, zod-to-json-schema produces a full JSON schema object.\n // OpenAI expects: { type: \"json_schema\", json_schema: { name: \"...\", schema: ... } }\n \n // Let's create a clean schema object\n // NOTE: OpenAI requires strict: true and additionalProperties: false\n // zod-to-json-schema generally produces compatible schemas but strictness might need tweaking if required by OpenAI.\n // For now, let's assume \"response\" as the name.\n \n // We'll define a simpler conversion if possible, or trust the user to configure Zod strictly if they want strict mode.\n \n // Extract the definition if it exists\n const actualSchema = (jsonSchema as any).definitions?.response || jsonSchema;\n \n schema = {\n type: \"json_schema\",\n json_schema: {\n name: \"response\",\n schema: actualSchema,\n strict: true // Try to enable strict mode for OpenAI\n }\n };\n } else if (typeof schema === 'string') {\n const schemaPath = path.resolve(finalConfig.basePath, schema);\n try {\n const schemaContent = await fs.readFile(schemaPath, 'utf-8');\n schema = JSON.parse(schemaContent);\n } catch (e: any) {\n throw new Error(`Failed to load schema from ${schemaPath}: ${e.message}`);\n }\n }\n\n // Build and return prompt\n return createPrompt({\n persona: personaSection.items.length > 0 ? personaSection : undefined,\n instructions: instructionSection,\n contents: contentSection.items.length > 0 ? contentSection : undefined,\n contexts: contextSection.items.length > 0 ? contextSection : undefined,\n constraints: constraintSection.items.length > 0 ? constraintSection : undefined,\n tone: toneSection.items.length > 0 ? toneSection : undefined,\n examples: exampleSection.items.length > 0 ? exampleSection : undefined,\n reasoning: reasoningSection.items.length > 0 ? reasoningSection : undefined,\n responseFormat: responseFormatSection.items.length > 0 ? responseFormatSection : undefined,\n recap: recapSection.items.length > 0 ? recapSection : undefined,\n safeguards: safeguardSection.items.length > 0 ? safeguardSection : undefined,\n schema,\n validator,\n });\n};\n\n// ===== CONTENT PROCESSING =====\n\ninterface ProcessingContext {\n basePath: string;\n parser: any;\n override: any;\n loader: any;\n parameters: any;\n logger: any;\n}\n\nconst processContentItem = async <T extends Weighted>(\n item: ContentItem,\n section: Section<T>,\n type: 'persona' | 'instruction' | 'content' | 'context',\n ctx: ProcessingContext\n): Promise<void> => {\n const sectionOptions: SectionOptions = {\n parameters: ctx.parameters,\n };\n\n if (typeof item === 'string') {\n // Simple string content\n const parsedSection = await ctx.parser.parse(item, sectionOptions);\n section.add(parsedSection);\n } else if ('content' in item) {\n // Inline content with options\n const parsedSection = await ctx.parser.parse(item.content, {\n ...sectionOptions,\n title: item.title,\n weight: item.weight,\n });\n section.add(parsedSection);\n } else if ('path' in item) {\n // File path\n const fullPath = path.join(ctx.basePath, item.path);\n const parsedSection = await ctx.parser.parseFile(fullPath, {\n ...sectionOptions,\n title: item.title,\n weight: item.weight,\n });\n const overrideSection = await ctx.override.customize(item.path, parsedSection, sectionOptions);\n section.add(overrideSection);\n } else if ('directories' in item) {\n // Directory loading\n const sections = await ctx.loader.load(item.directories, {\n ...sectionOptions,\n title: item.title,\n weight: item.weight,\n });\n section.add(sections);\n }\n};\n\n// ===== FLUENT RECIPE BUILDER =====\n\nexport const recipe = (basePath: string) => {\n const config: Partial<RecipeConfig> & { basePath: string } = { basePath };\n\n const builder = {\n template: (name: string) => {\n config.template = name;\n return builder;\n },\n with: (partialConfig: Partial<RecipeConfig>) => {\n Object.assign(config, partialConfig);\n return builder;\n },\n persona: (persona: ContentItem) => {\n config.persona = persona;\n return builder;\n },\n instructions: (...instructions: ContentItem[]) => {\n config.instructions = [...(config.instructions || []), ...instructions];\n return builder;\n },\n content: (...content: ContentItem[]) => {\n config.content = [...(config.content || []), ...content];\n return builder;\n },\n context: (...context: ContentItem[]) => {\n config.context = [...(config.context || []), ...context];\n return builder;\n },\n constraints: (...constraints: ContentItem[]) => {\n config.constraints = [...(config.constraints || []), ...constraints];\n return builder;\n },\n tone: (...tone: ContentItem[]) => {\n config.tone = [...(config.tone || []), ...tone];\n return builder;\n },\n examples: (...examples: ContentItem[]) => {\n config.examples = [...(config.examples || []), ...examples];\n return builder;\n },\n reasoning: (...reasoning: ContentItem[]) => {\n config.reasoning = [...(config.reasoning || []), ...reasoning];\n return builder;\n },\n responseFormat: (...responseFormat: ContentItem[]) => {\n config.responseFormat = [...(config.responseFormat || []), ...responseFormat];\n return builder;\n },\n recap: (...recap: ContentItem[]) => {\n config.recap = [...(config.recap || []), ...recap];\n return builder;\n },\n safeguards: (...safeguards: ContentItem[]) => {\n config.safeguards = [...(config.safeguards || []), ...safeguards];\n return builder;\n },\n schema: (schema: string | Record<string, any> | z.ZodType<any>) => {\n config.schema = schema;\n return builder;\n },\n parameters: (parameters: any) => {\n config.parameters = { ...config.parameters, ...parameters };\n return builder;\n },\n overrides: (enabled: boolean) => {\n config.overrides = enabled;\n return builder;\n },\n overridePaths: (paths: string[]) => {\n config.overridePaths = paths;\n return builder;\n },\n tools: (tools: Tool[] | ToolRegistry) => {\n config.tools = tools;\n return builder;\n },\n toolRegistry: (registry: ToolRegistry) => {\n config.tools = registry;\n return builder;\n },\n toolGuidance: (guidance: ToolGuidanceConfig | 'auto' | 'minimal' | 'detailed') => {\n config.toolGuidance = guidance as any;\n return builder;\n },\n toolCategories: (categories: string[]) => {\n config.toolCategories = categories;\n return builder;\n },\n cook: () => cook(config),\n buildConversation: async (model: Model, tokenBudget?: TokenBudgetConfig) => {\n const prompt = await cook(config);\n const conversation = ConversationBuilder.create({ model }, config.logger);\n conversation.fromPrompt(prompt, model);\n\n // Apply token budget if provided\n if (tokenBudget) {\n conversation.withTokenBudget(tokenBudget);\n }\n\n return conversation;\n },\n getToolRegistry: (): ToolRegistry | undefined => {\n if (config.tools instanceof ToolRegistry) {\n return config.tools;\n } else if (Array.isArray(config.tools)) {\n const registry = ToolRegistry.create({}, config.logger);\n registry.registerAll(config.tools);\n return registry;\n }\n return undefined;\n },\n executeWith: async (\n llm: LLMClient,\n strategy: IterationStrategy,\n model: Model = 'gpt-4o',\n tokenBudget?: TokenBudgetConfig\n ): Promise<StrategyResult> => {\n const prompt = await cook(config);\n const conversation = ConversationBuilder.create({ model }, config.logger);\n conversation.fromPrompt(prompt, model);\n\n if (tokenBudget) {\n conversation.withTokenBudget(tokenBudget);\n }\n\n const registry = builder.getToolRegistry();\n if (!registry) {\n throw new Error('Tools must be configured to use executeWith');\n }\n\n const executor = new StrategyExecutor(llm, config.logger);\n return executor.execute(conversation, registry, strategy);\n },\n };\n\n return builder;\n};\n\n// Export types for external use\nexport type { RecipeConfig, ContentItem };\n"],"names":["ContentItemSchema","z","union","string","object","content","title","optional","weight","number","path","directories","array","RecipeConfigSchema","basePath","logger","any","default","DEFAULT_LOGGER","overridePaths","overrides","boolean","parameters","ParametersSchema","persona","instructions","context","constraints","tone","examples","reasoning","responseFormat","recap","safeguards","schema","extends","template","tools","toolGuidance","enum","strategy","includeExamples","explainWhenToUse","includeCategories","customInstructions","toolCategories","TEMPLATES","registerTemplates","templates","getTemplates","clearTemplates","generateToolGuidance","guidance","length","config","output","categorized","Map","forEach","tool","category","has","set","get","push","categoryTools","formatToolGuidance","name","cost","description","required","paramList","Object","entries","properties","map","param","isRequired","includes","join","example","scenario","JSON","stringify","params","cook","validatedConfig","parse","finalConfig","wrapLogger","parser","Parser","override","Override","configDirs","loader","Loader","personaSection","createSection","instructionSection","contentSection","contextSection","constraintSection","toneSection","exampleSection","reasoningSection","responseFormatSection","recapSection","safeguardSection","processList","items","section","type","item","processContentItem","Array","isArray","getAll","filteredTools","filter","toolSection","add","validator","undefined","ZodType","jsonSchema","zodToJsonSchema","actualSchema","definitions","response","json_schema","strict","schemaPath","resolve","schemaContent","fs","readFile","e","Error","message","createPrompt","contents","contexts","ctx","sectionOptions","parsedSection","fullPath","parseFile","overrideSection","customize","sections","load","recipe","builder","with","partialConfig","assign","enabled","paths","toolRegistry","registry","categories","buildConversation","model","tokenBudget","prompt","conversation","ConversationBuilder","create","fromPrompt","withTokenBudget","getToolRegistry","ToolRegistry","registerAll","executeWith","llm","executor","StrategyExecutor","execute"],"mappings":"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"}