@riotprompt/riotprompt 0.0.3 → 0.0.6

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.
package/dist/recipes.js CHANGED
@@ -39,104 +39,50 @@ const RecipeConfigSchema = z.object({
39
39
  ]),
40
40
  overrides: z.boolean().optional().default(false),
41
41
  parameters: ParametersSchema.optional().default({}),
42
- // Content sections - smart inference based on naming
42
+ // Content sections
43
43
  persona: ContentItemSchema.optional(),
44
44
  instructions: z.array(ContentItemSchema).optional().default([]),
45
45
  content: z.array(ContentItemSchema).optional().default([]),
46
46
  context: z.array(ContentItemSchema).optional().default([]),
47
47
  // Templates and inheritance
48
48
  extends: z.string().optional(),
49
- template: z.enum([
50
- 'commit',
51
- 'release',
52
- 'documentation',
53
- 'review',
54
- 'custom'
55
- ]).optional()
49
+ template: z.string().optional()
56
50
  });
57
- // Built-in template configurations matching common patterns
58
- const DEFAULT_TEMPLATES = {
59
- commit: {
60
- persona: {
61
- path: "personas/developer.md",
62
- title: "Developer Persona"
63
- },
64
- instructions: [
65
- {
66
- path: "instructions/commit.md",
67
- title: "Commit Instructions"
68
- }
69
- ]
70
- },
71
- release: {
72
- persona: {
73
- path: "personas/releaser.md",
74
- title: "Release Manager Persona"
75
- },
76
- instructions: [
77
- {
78
- path: "instructions/release.md",
79
- title: "Release Instructions"
80
- }
81
- ]
82
- },
83
- documentation: {
84
- persona: {
85
- path: "personas/technical-writer.md",
86
- title: "Technical Writer Persona"
87
- },
88
- instructions: [
89
- {
90
- path: "instructions/documentation.md",
91
- title: "Documentation Instructions"
92
- }
93
- ]
94
- },
95
- review: {
96
- persona: {
97
- path: "personas/reviewer.md",
98
- title: "Code Reviewer Persona"
99
- },
100
- instructions: [
101
- {
102
- path: "instructions/review.md",
103
- title: "Review Instructions"
104
- }
105
- ]
106
- }
107
- };
108
51
  // User-customizable template registry
109
- let TEMPLATES = {
110
- ...DEFAULT_TEMPLATES
111
- };
52
+ let TEMPLATES = {};
112
53
  /**
113
- * Configure custom template paths (perfect for KodrDriv constants!)
54
+ * Register custom templates with the recipes system
114
55
  *
115
56
  * @example
116
57
  * ```typescript
117
- * // Configure using your KodrDriv constants
118
- * configureTemplates({
119
- * commit: {
120
- * persona: { path: DEFAULT_PERSONA_YOU_FILE },
121
- * instructions: [{ path: DEFAULT_INSTRUCTIONS_COMMIT_FILE }]
58
+ * // Register your own templates
59
+ * registerTemplates({
60
+ * myWorkflow: {
61
+ * persona: { path: "personas/my-persona.md" },
62
+ * instructions: [{ path: "instructions/my-instructions.md" }]
122
63
  * },
123
- * release: {
124
- * persona: { path: DEFAULT_PERSONA_RELEASER_FILE },
125
- * instructions: [{ path: DEFAULT_INSTRUCTIONS_RELEASE_FILE }]
64
+ * anotherTemplate: {
65
+ * persona: { content: "You are a helpful assistant" },
66
+ * instructions: [{ content: "Follow these steps..." }]
126
67
  * }
127
68
  * });
128
69
  * ```
129
- */ const configureTemplates = (customTemplates)=>{
70
+ */ const registerTemplates = (templates)=>{
130
71
  TEMPLATES = {
131
- ...DEFAULT_TEMPLATES,
132
- ...customTemplates
72
+ ...TEMPLATES,
73
+ ...templates
133
74
  };
134
75
  };
135
76
  /**
136
- * Get current template configuration
77
+ * Get currently registered templates
137
78
  */ const getTemplates = ()=>({
138
79
  ...TEMPLATES
139
80
  });
81
+ /**
82
+ * Clear all registered templates
83
+ */ const clearTemplates = ()=>{
84
+ TEMPLATES = {};
85
+ };
140
86
  // ===== CORE RECIPE ENGINE =====
141
87
  const cook = async (config)=>{
142
88
  // Parse and validate configuration with defaults
@@ -159,8 +105,20 @@ const cook = async (config)=>{
159
105
  const template = TEMPLATES[validatedConfig.template];
160
106
  if (template) {
161
107
  finalConfig = {
162
- ...template,
163
- ...validatedConfig
108
+ ...validatedConfig,
109
+ persona: validatedConfig.persona || template.persona,
110
+ instructions: [
111
+ ...template.instructions || [],
112
+ ...validatedConfig.instructions || []
113
+ ],
114
+ content: [
115
+ ...template.content || [],
116
+ ...validatedConfig.content || []
117
+ ],
118
+ context: [
119
+ ...template.context || [],
120
+ ...validatedConfig.context || []
121
+ ]
164
122
  };
165
123
  }
166
124
  }
@@ -211,7 +169,10 @@ const cook = async (config)=>{
211
169
  parameters: finalConfig.parameters});
212
170
  }
213
171
  // Process content
172
+ // eslint-disable-next-line no-console
214
173
  for (const item of finalConfig.content || []){
174
+ // eslint-disable-next-line no-console
175
+ console.log('Processing content item:', JSON.stringify(item, null, 2));
215
176
  await processContentItem(item, contentSection, 'content', {
216
177
  basePath: finalConfig.basePath,
217
178
  parser: parser$1,
@@ -242,11 +203,11 @@ const processContentItem = async (item, section, type, ctx)=>{
242
203
  };
243
204
  if (typeof item === 'string') {
244
205
  // Simple string content
245
- const parsedSection = ctx.parser.parse(item, sectionOptions);
206
+ const parsedSection = await ctx.parser.parse(item, sectionOptions);
246
207
  section.add(parsedSection);
247
208
  } else if ('content' in item) {
248
209
  // Inline content with options
249
- const parsedSection = ctx.parser.parse(item.content, {
210
+ const parsedSection = await ctx.parser.parse(item.content, {
250
211
  ...sectionOptions,
251
212
  title: item.title,
252
213
  weight: item.weight
@@ -272,153 +233,64 @@ const processContentItem = async (item, section, type, ctx)=>{
272
233
  section.add(sections);
273
234
  }
274
235
  };
275
- // ===== CONVENIENCE FUNCTIONS =====
276
- const commit = (config)=>cook({
277
- ...config,
278
- template: 'commit'
279
- });
280
- const release = (config)=>cook({
281
- ...config,
282
- template: 'release'
283
- });
284
- const documentation = (config)=>cook({
285
- ...config,
286
- template: 'documentation'
287
- });
288
- const review = (config)=>cook({
289
- ...config,
290
- template: 'review'
291
- });
292
- // ===== QUICK BUILDERS =====
293
- const quick = {
294
- /**
295
- * Create a commit prompt with minimal configuration
296
- */ commit: async (diffContent, options)=>{
297
- return cook({
298
- basePath: options.basePath,
299
- overridePaths: options.overridePaths,
300
- overrides: options.overrides,
301
- template: 'commit',
302
- content: [
303
- ...options.userDirection ? [
304
- {
305
- content: options.userDirection,
306
- title: 'User Direction',
307
- weight: 1.0
308
- }
309
- ] : [],
310
- {
311
- content: diffContent,
312
- title: 'Diff',
313
- weight: 0.5
314
- }
315
- ],
316
- context: [
317
- ...options.context ? [
318
- {
319
- content: options.context,
320
- title: 'User Context',
321
- weight: 1.0
322
- }
323
- ] : [],
324
- ...options.directories ? [
325
- {
326
- directories: options.directories,
327
- weight: 0.5
328
- }
329
- ] : []
330
- ]
331
- });
332
- },
333
- /**
334
- * Create a release prompt with minimal configuration
335
- */ release: async (logContent, diffContent, options)=>{
336
- return cook({
337
- basePath: options.basePath,
338
- overridePaths: options.overridePaths,
339
- overrides: options.overrides,
340
- template: 'release',
341
- content: [
342
- ...options.releaseFocus ? [
343
- {
344
- content: options.releaseFocus,
345
- title: 'Release Focus',
346
- weight: 1.0
347
- }
348
- ] : [],
349
- {
350
- content: logContent,
351
- title: 'Log',
352
- weight: 0.5
353
- },
354
- {
355
- content: diffContent,
356
- title: 'Diff',
357
- weight: 0.5
358
- }
359
- ],
360
- context: [
361
- ...options.context ? [
362
- {
363
- content: options.context,
364
- title: 'User Context',
365
- weight: 1.0
366
- }
367
- ] : [],
368
- ...options.directories ? [
369
- {
370
- directories: options.directories,
371
- weight: 0.5
372
- }
373
- ] : []
374
- ]
375
- });
376
- }
377
- };
378
236
  // ===== FLUENT RECIPE BUILDER =====
379
- const recipe = (basePath)=>({
380
- template: (name)=>({
381
- with: (config)=>cook({
382
- basePath,
383
- template: name,
384
- ...config
385
- })
386
- }),
387
- persona: (persona)=>({
388
- instructions: (...instructions)=>({
389
- content: (...content)=>({
390
- context: (...context)=>({
391
- cook: ()=>cook({
392
- basePath,
393
- persona,
394
- instructions,
395
- content,
396
- context
397
- })
398
- }),
399
- cook: ()=>cook({
400
- basePath,
401
- persona,
402
- instructions,
403
- content
404
- })
405
- }),
406
- cook: ()=>cook({
407
- basePath,
408
- persona,
409
- instructions
410
- })
411
- }),
412
- cook: ()=>cook({
413
- basePath,
414
- persona
415
- })
416
- }),
417
- cook: (config)=>cook({
418
- basePath,
419
- ...config
420
- })
421
- });
237
+ const recipe = (basePath)=>{
238
+ const config = {
239
+ basePath
240
+ };
241
+ const builder = {
242
+ template: (name)=>{
243
+ config.template = name;
244
+ return builder;
245
+ },
246
+ with: (partialConfig)=>{
247
+ Object.assign(config, partialConfig);
248
+ return builder;
249
+ },
250
+ persona: (persona)=>{
251
+ config.persona = persona;
252
+ return builder;
253
+ },
254
+ instructions: (...instructions)=>{
255
+ config.instructions = [
256
+ ...config.instructions || [],
257
+ ...instructions
258
+ ];
259
+ return builder;
260
+ },
261
+ content: (...content)=>{
262
+ config.content = [
263
+ ...config.content || [],
264
+ ...content
265
+ ];
266
+ return builder;
267
+ },
268
+ context: (...context)=>{
269
+ config.context = [
270
+ ...config.context || [],
271
+ ...context
272
+ ];
273
+ return builder;
274
+ },
275
+ parameters: (parameters)=>{
276
+ config.parameters = {
277
+ ...config.parameters,
278
+ ...parameters
279
+ };
280
+ return builder;
281
+ },
282
+ overrides: (enabled)=>{
283
+ config.overrides = enabled;
284
+ return builder;
285
+ },
286
+ overridePaths: (paths)=>{
287
+ config.overridePaths = paths;
288
+ return builder;
289
+ },
290
+ cook: ()=>cook(config)
291
+ };
292
+ return builder;
293
+ };
422
294
 
423
- export { commit, configureTemplates, cook, documentation, getTemplates, quick, recipe, release, review };
295
+ export { clearTemplates, cook, getTemplates, recipe, registerTemplates };
424
296
  //# sourceMappingURL=recipes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"recipes.js","sources":["../src/recipes.ts"],"sourcesContent":["import path from \"path\";\nimport { z } from \"zod\";\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\";\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 - smart inference based on naming\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.enum(['commit', 'release', 'documentation', 'review', 'custom']).optional(),\n});\n\ntype RecipeConfig = z.infer<typeof RecipeConfigSchema>;\ntype ContentItem = z.infer<typeof ContentItemSchema>;\n\n// ===== CONFIGURABLE TEMPLATE PATHS =====\n\n// Default template configurations - can be overridden by user\nexport interface TemplateConfig {\n persona?: ContentItem;\n instructions?: ContentItem[];\n content?: ContentItem[];\n context?: ContentItem[];\n}\n\n// Built-in template configurations matching common patterns\nconst DEFAULT_TEMPLATES: Record<string, TemplateConfig> = {\n commit: {\n persona: { path: \"personas/developer.md\", title: \"Developer Persona\" },\n instructions: [\n { path: \"instructions/commit.md\", title: \"Commit Instructions\" },\n ],\n },\n release: {\n persona: { path: \"personas/releaser.md\", title: \"Release Manager Persona\" },\n instructions: [\n { path: \"instructions/release.md\", title: \"Release Instructions\" },\n ],\n },\n documentation: {\n persona: { path: \"personas/technical-writer.md\", title: \"Technical Writer Persona\" },\n instructions: [\n { path: \"instructions/documentation.md\", title: \"Documentation Instructions\" },\n ],\n },\n review: {\n persona: { path: \"personas/reviewer.md\", title: \"Code Reviewer Persona\" },\n instructions: [\n { path: \"instructions/review.md\", title: \"Review Instructions\" },\n ],\n },\n};\n\n// User-customizable template registry\nlet TEMPLATES = { ...DEFAULT_TEMPLATES };\n\n/**\n * Configure custom template paths (perfect for KodrDriv constants!)\n * \n * @example\n * ```typescript\n * // Configure using your KodrDriv constants\n * configureTemplates({\n * commit: {\n * persona: { path: DEFAULT_PERSONA_YOU_FILE },\n * instructions: [{ path: DEFAULT_INSTRUCTIONS_COMMIT_FILE }]\n * },\n * release: {\n * persona: { path: DEFAULT_PERSONA_RELEASER_FILE },\n * instructions: [{ path: DEFAULT_INSTRUCTIONS_RELEASE_FILE }]\n * }\n * });\n * ```\n */\nexport const configureTemplates = (customTemplates: Record<string, TemplateConfig>): void => {\n TEMPLATES = { ...DEFAULT_TEMPLATES, ...customTemplates };\n};\n\n/**\n * Get current template configuration\n */\nexport const getTemplates = (): Record<string, TemplateConfig> => ({ ...TEMPLATES });\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 ],\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 = { ...template, ...validatedConfig };\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 // 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 = ctx.parser.parse(item, sectionOptions);\n section.add(parsedSection);\n } else if ('content' in item) {\n // Inline content with options\n const parsedSection = 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// ===== CONVENIENCE FUNCTIONS =====\n\nexport const commit = (config: Partial<RecipeConfig> & { basePath: string }): Promise<Prompt> =>\n cook({ ...config, template: 'commit' });\n\nexport const release = (config: Partial<RecipeConfig> & { basePath: string }): Promise<Prompt> =>\n cook({ ...config, template: 'release' });\n\nexport const documentation = (config: Partial<RecipeConfig> & { basePath: string }): Promise<Prompt> =>\n cook({ ...config, template: 'documentation' });\n\nexport const review = (config: Partial<RecipeConfig> & { basePath: string }): Promise<Prompt> =>\n cook({ ...config, template: 'review' });\n\n// ===== QUICK BUILDERS =====\n\nexport const quick = {\n /**\n * Create a commit prompt with minimal configuration\n */\n commit: async (diffContent: string, options: {\n basePath: string;\n overridePaths?: string[];\n overrides?: boolean;\n userDirection?: string;\n context?: string;\n directories?: string[];\n }): Promise<Prompt> => {\n return cook({\n basePath: options.basePath,\n overridePaths: options.overridePaths,\n overrides: options.overrides,\n template: 'commit',\n content: [\n ...(options.userDirection ? [{ content: options.userDirection, title: 'User Direction', weight: 1.0 }] : []),\n { content: diffContent, title: 'Diff', weight: 0.5 },\n ],\n context: [\n ...(options.context ? [{ content: options.context, title: 'User Context', weight: 1.0 }] : []),\n ...(options.directories ? [{ directories: options.directories, weight: 0.5 }] : []),\n ],\n });\n },\n\n /**\n * Create a release prompt with minimal configuration\n */\n release: async (logContent: string, diffContent: string, options: {\n basePath: string;\n overridePaths?: string[];\n overrides?: boolean;\n releaseFocus?: string;\n context?: string;\n directories?: string[];\n }): Promise<Prompt> => {\n return cook({\n basePath: options.basePath,\n overridePaths: options.overridePaths,\n overrides: options.overrides,\n template: 'release',\n content: [\n ...(options.releaseFocus ? [{ content: options.releaseFocus, title: 'Release Focus', weight: 1.0 }] : []),\n { content: logContent, title: 'Log', weight: 0.5 },\n { content: diffContent, title: 'Diff', weight: 0.5 },\n ],\n context: [\n ...(options.context ? [{ content: options.context, title: 'User Context', weight: 1.0 }] : []),\n ...(options.directories ? [{ directories: options.directories, weight: 0.5 }] : []),\n ],\n });\n },\n};\n\n// ===== FLUENT RECIPE BUILDER =====\n\nexport const recipe = (basePath: string) => ({\n template: (name: 'commit' | 'release' | 'documentation' | 'review') => ({\n with: (config: Partial<RecipeConfig>) =>\n cook({ basePath, template: name, ...config }),\n }),\n\n persona: (persona: ContentItem) => ({\n instructions: (...instructions: ContentItem[]) => ({\n content: (...content: ContentItem[]) => ({\n context: (...context: ContentItem[]) => ({\n cook: () => cook({ basePath, persona, instructions, content, context }),\n }),\n cook: () => cook({ basePath, persona, instructions, content }),\n }),\n cook: () => cook({ basePath, persona, instructions }),\n }),\n cook: () => cook({ basePath, persona }),\n }),\n\n cook: (config: Partial<RecipeConfig>) => cook({ basePath, ...config }),\n});\n\n// Export types for external use\nexport type { RecipeConfig, ContentItem }; "],"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","enum","DEFAULT_TEMPLATES","commit","release","documentation","review","TEMPLATES","configureTemplates","customTemplates","getTemplates","cook","config","validatedConfig","parse","finalConfig","wrapLogger","parser","Parser","override","Override","configDirs","loader","Loader","personaSection","createSection","instructionSection","contentSection","contextSection","processContentItem","item","createPrompt","contents","contexts","section","type","ctx","sectionOptions","parsedSection","add","fullPath","join","parseFile","overrideSection","customize","sections","load","quick","diffContent","options","userDirection","logContent","releaseFocus","recipe","name","with"],"mappings":"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"}
1
+ {"version":3,"file":"recipes.js","sources":["../src/recipes.ts"],"sourcesContent":["import path from \"path\";\nimport { z } from \"zod\";\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\";\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\ntype RecipeConfig = z.infer<typeof RecipeConfigSchema>;\ntype ContentItem = z.infer<typeof ContentItemSchema>;\n\n// ===== CONFIGURABLE TEMPLATE SYSTEM =====\n\nexport interface TemplateConfig {\n persona?: ContentItem;\n instructions?: ContentItem[];\n content?: ContentItem[];\n context?: ContentItem[];\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// ===== 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 // Process content\n // eslint-disable-next-line no-console\n for (const item of finalConfig.content || []) {\n // eslint-disable-next-line no-console\n console.log('Processing content item:', JSON.stringify(item, null, 2));\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 cook: () => cook(config),\n };\n\n return builder;\n};\n\n// Export types for external use\nexport type { RecipeConfig, ContentItem }; "],"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","TEMPLATES","registerTemplates","templates","getTemplates","clearTemplates","cook","config","validatedConfig","parse","finalConfig","wrapLogger","parser","Parser","override","Override","configDirs","loader","Loader","personaSection","createSection","instructionSection","contentSection","contextSection","processContentItem","item","console","log","JSON","stringify","createPrompt","contents","contexts","section","type","ctx","sectionOptions","parsedSection","add","fullPath","join","parseFile","overrideSection","customize","sections","load","recipe","builder","name","with","partialConfig","Object","assign","enabled","paths"],"mappings":"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"}