@riotprompt/riotprompt 0.0.4 → 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/README.md CHANGED
@@ -75,7 +75,7 @@ RiotPrompt is designed to be completely generic and unopinionated. Unlike other
75
75
 
76
76
  ## 🤝 Contributing
77
77
 
78
- Contributions are welcome! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
78
+ Contributions are welcome! Please see our [Contributing Guide](CONTRIBUTING.md) for details. Test.
79
79
 
80
80
  ## 📄 License
81
81
 
@@ -10,6 +10,11 @@ export interface Section<T extends Weighted> {
10
10
  insert: (index: number, item: T | T[] | Section<T> | Section<T>[] | string | string[], options?: Partial<WeightedOptions>) => Section<T>;
11
11
  replace: (index: number, item: T | Section<T> | string, options?: Partial<WeightedOptions>) => Section<T>;
12
12
  remove: (index: number) => Section<T>;
13
+ toJSON: () => {
14
+ title?: string;
15
+ items: any[];
16
+ weight?: number;
17
+ };
13
18
  }
14
19
  export declare const SectionOptionsSchema: z.ZodObject<{
15
20
  title: z.ZodOptional<z.ZodString>;
@@ -97,6 +97,16 @@ const create = (options = {})=>{
97
97
  };
98
98
  return append(item, itemOptions);
99
99
  };
100
+ const toJSON = ()=>{
101
+ return {
102
+ title: section.title,
103
+ items: items.map((item)=>{
104
+ // If the item has a toJSON method, call it, otherwise return the item itself
105
+ return typeof item === 'object' && item !== null && 'toJSON' in item && typeof item.toJSON === 'function' ? item.toJSON() : item;
106
+ }),
107
+ weight: section.weight
108
+ };
109
+ };
100
110
  const section = {
101
111
  title: sectionOptions.title,
102
112
  items,
@@ -106,7 +116,8 @@ const create = (options = {})=>{
106
116
  prepend,
107
117
  insert,
108
118
  remove,
109
- replace
119
+ replace,
120
+ toJSON
110
121
  };
111
122
  return section;
112
123
  };
@@ -1 +1 @@
1
- {"version":3,"file":"section.js","sources":["../../src/items/section.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { ParametersSchema } from \"./parameters\";\nimport { Weighted, WeightedOptions, WeightedOptionsSchema, create as createWeighted } from \"./weighted\";\n\nexport interface Section<T extends Weighted> {\n title?: string;\n items: (T | Section<T>)[];\n weight?: number;\n add: (\n item: T | T[] | Section<T> | Section<T>[] | string | string[],\n options?: Partial<WeightedOptions>\n ) => Section<T>;\n append: (\n item: T | T[] | Section<T> | Section<T>[] | string | string[],\n options?: Partial<WeightedOptions>\n ) => Section<T>;\n prepend: (\n item: T | T[] | Section<T> | Section<T>[] | string | string[],\n options?: Partial<WeightedOptions>\n ) => Section<T>;\n insert: (\n index: number,\n item: T | T[] | Section<T> | Section<T>[] | string | string[],\n options?: Partial<WeightedOptions>\n ) => Section<T>;\n replace: (\n index: number,\n item: T | Section<T> | string,\n options?: Partial<WeightedOptions>\n ) => Section<T>;\n remove: (index: number) => Section<T>;\n}\n\nexport const SectionOptionsSchema = z.object({\n title: z.string().optional(),\n weight: z.number().optional(),\n itemWeight: z.number().optional(),\n parameters: ParametersSchema.optional().default({}),\n});\n\nexport type SectionOptions = z.infer<typeof SectionOptionsSchema>;\n\nexport const isSection = (object: any): boolean => {\n return object !== undefined && object != null && typeof object === 'object' && 'items' in object;\n}\n\nexport const convertToSection = (\n object: any,\n options: Partial<SectionOptions> = {}\n): Section<Weighted> => {\n const sectionOptions = SectionOptionsSchema.parse(options);\n\n const weightedOptions = WeightedOptionsSchema.parse({\n ...sectionOptions,\n weight: sectionOptions.itemWeight,\n });\n\n if (isSection(object)) {\n const section = create({ ...sectionOptions, title: object.title });\n object.items.forEach((item: any) => {\n if (isSection(item)) {\n section.append(convertToSection(item, sectionOptions));\n } else {\n section.append(createWeighted(item.text, weightedOptions));\n }\n });\n return section;\n } else {\n throw new Error('Object is not a section');\n }\n}\n\nexport const create = <T extends Weighted>(\n options: Partial<SectionOptions> = {}\n): Section<T> => {\n const items: (T | Section<T>)[] = [];\n const sectionOptions = SectionOptionsSchema.parse(options);\n\n const sectionItemOptions = WeightedOptionsSchema.parse({\n ...sectionOptions,\n weight: sectionOptions.itemWeight,\n });\n\n const append = (item: T | T[] | Section<T> | Section<T>[] | string | string[], options: Partial<WeightedOptions> = {}): Section<T> => {\n let itemOptions: WeightedOptions = WeightedOptionsSchema.parse(options);\n itemOptions = { ...sectionItemOptions, ...itemOptions };\n\n if (Array.isArray(item)) {\n item.forEach((item) => {\n append(item);\n });\n } else {\n if (typeof item === 'string') {\n items.push(createWeighted<T>(item, itemOptions));\n } else {\n items.push(item);\n }\n }\n return section;\n }\n\n const prepend = (item: T | T[] | Section<T> | Section<T>[] | string | string[], options: Partial<WeightedOptions> = {}): Section<T> => {\n let itemOptions: WeightedOptions = WeightedOptionsSchema.parse(options);\n itemOptions = { ...sectionItemOptions, ...itemOptions };\n\n if (Array.isArray(item)) {\n item.forEach((item) => {\n prepend(item);\n });\n } else {\n if (typeof item === 'string') {\n items.unshift(createWeighted<T>(item, itemOptions));\n } else {\n items.unshift(item);\n }\n }\n return section;\n }\n\n const insert = (index: number, item: T | T[] | Section<T> | Section<T>[] | string | string[], options: Partial<WeightedOptions> = {}): Section<T> => {\n let itemOptions: WeightedOptions = WeightedOptionsSchema.parse(options);\n itemOptions = { ...sectionItemOptions, ...itemOptions };\n\n if (Array.isArray(item)) {\n item.forEach((item) => {\n insert(index, item);\n });\n } else {\n if (typeof item === 'string') {\n items.splice(index, 0, createWeighted<T>(item, itemOptions));\n } else {\n items.splice(index, 0, item);\n }\n }\n return section;\n }\n\n const remove = (index: number): Section<T> => {\n items.splice(index, 1);\n return section;\n }\n\n const replace = (index: number, item: T | Section<T> | string, options: Partial<WeightedOptions> = {}): Section<T> => {\n let itemOptions: WeightedOptions = WeightedOptionsSchema.parse(options);\n itemOptions = { ...sectionItemOptions, ...itemOptions };\n\n if (typeof item === 'string') {\n items[index] = createWeighted<T>(item, itemOptions);\n } else {\n items[index] = item;\n }\n return section;\n }\n\n const add = (item: T | T[] | Section<T> | Section<T>[] | string | string[], options: Partial<WeightedOptions> = {}): Section<T> => {\n let itemOptions: WeightedOptions = WeightedOptionsSchema.parse(options);\n itemOptions = { ...sectionItemOptions, ...itemOptions };\n\n return append(item, itemOptions);\n }\n\n const section: Section<T> = {\n title: sectionOptions.title,\n items,\n weight: sectionOptions.weight,\n add,\n append,\n prepend,\n insert,\n remove,\n replace,\n }\n\n return section;\n}\n\n\n"],"names":["SectionOptionsSchema","z","object","title","string","optional","weight","number","itemWeight","parameters","ParametersSchema","default","create","options","items","sectionOptions","parse","sectionItemOptions","WeightedOptionsSchema","append","item","itemOptions","Array","isArray","forEach","push","createWeighted","section","prepend","unshift","insert","index","splice","remove","replace","add"],"mappings":"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"}
1
+ {"version":3,"file":"section.js","sources":["../../src/items/section.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { ParametersSchema } from \"./parameters\";\nimport { Weighted, WeightedOptions, WeightedOptionsSchema, create as createWeighted } from \"./weighted\";\n\nexport interface Section<T extends Weighted> {\n title?: string;\n items: (T | Section<T>)[];\n weight?: number;\n add: (\n item: T | T[] | Section<T> | Section<T>[] | string | string[],\n options?: Partial<WeightedOptions>\n ) => Section<T>;\n append: (\n item: T | T[] | Section<T> | Section<T>[] | string | string[],\n options?: Partial<WeightedOptions>\n ) => Section<T>;\n prepend: (\n item: T | T[] | Section<T> | Section<T>[] | string | string[],\n options?: Partial<WeightedOptions>\n ) => Section<T>;\n insert: (\n index: number,\n item: T | T[] | Section<T> | Section<T>[] | string | string[],\n options?: Partial<WeightedOptions>\n ) => Section<T>;\n replace: (\n index: number,\n item: T | Section<T> | string,\n options?: Partial<WeightedOptions>\n ) => Section<T>;\n remove: (index: number) => Section<T>;\n toJSON: () => { title?: string; items: any[]; weight?: number; };\n}\n\nexport const SectionOptionsSchema = z.object({\n title: z.string().optional(),\n weight: z.number().optional(),\n itemWeight: z.number().optional(),\n parameters: ParametersSchema.optional().default({}),\n});\n\nexport type SectionOptions = z.infer<typeof SectionOptionsSchema>;\n\nexport const isSection = (object: any): boolean => {\n return object !== undefined && object != null && typeof object === 'object' && 'items' in object;\n}\n\nexport const convertToSection = (\n object: any,\n options: Partial<SectionOptions> = {}\n): Section<Weighted> => {\n const sectionOptions = SectionOptionsSchema.parse(options);\n\n const weightedOptions = WeightedOptionsSchema.parse({\n ...sectionOptions,\n weight: sectionOptions.itemWeight,\n });\n\n if (isSection(object)) {\n const section = create({ ...sectionOptions, title: object.title });\n object.items.forEach((item: any) => {\n if (isSection(item)) {\n section.append(convertToSection(item, sectionOptions));\n } else {\n section.append(createWeighted(item.text, weightedOptions));\n }\n });\n return section;\n } else {\n throw new Error('Object is not a section');\n }\n}\n\nexport const create = <T extends Weighted>(\n options: Partial<SectionOptions> = {}\n): Section<T> => {\n const items: (T | Section<T>)[] = [];\n const sectionOptions = SectionOptionsSchema.parse(options);\n\n const sectionItemOptions = WeightedOptionsSchema.parse({\n ...sectionOptions,\n weight: sectionOptions.itemWeight,\n });\n\n const append = (item: T | T[] | Section<T> | Section<T>[] | string | string[], options: Partial<WeightedOptions> = {}): Section<T> => {\n let itemOptions: WeightedOptions = WeightedOptionsSchema.parse(options);\n itemOptions = { ...sectionItemOptions, ...itemOptions };\n\n if (Array.isArray(item)) {\n item.forEach((item) => {\n append(item);\n });\n } else {\n if (typeof item === 'string') {\n items.push(createWeighted<T>(item, itemOptions));\n } else {\n items.push(item);\n }\n }\n return section;\n }\n\n const prepend = (item: T | T[] | Section<T> | Section<T>[] | string | string[], options: Partial<WeightedOptions> = {}): Section<T> => {\n let itemOptions: WeightedOptions = WeightedOptionsSchema.parse(options);\n itemOptions = { ...sectionItemOptions, ...itemOptions };\n\n if (Array.isArray(item)) {\n item.forEach((item) => {\n prepend(item);\n });\n } else {\n if (typeof item === 'string') {\n items.unshift(createWeighted<T>(item, itemOptions));\n } else {\n items.unshift(item);\n }\n }\n return section;\n }\n\n const insert = (index: number, item: T | T[] | Section<T> | Section<T>[] | string | string[], options: Partial<WeightedOptions> = {}): Section<T> => {\n let itemOptions: WeightedOptions = WeightedOptionsSchema.parse(options);\n itemOptions = { ...sectionItemOptions, ...itemOptions };\n\n if (Array.isArray(item)) {\n item.forEach((item) => {\n insert(index, item);\n });\n } else {\n if (typeof item === 'string') {\n items.splice(index, 0, createWeighted<T>(item, itemOptions));\n } else {\n items.splice(index, 0, item);\n }\n }\n return section;\n }\n\n const remove = (index: number): Section<T> => {\n items.splice(index, 1);\n return section;\n }\n\n const replace = (index: number, item: T | Section<T> | string, options: Partial<WeightedOptions> = {}): Section<T> => {\n let itemOptions: WeightedOptions = WeightedOptionsSchema.parse(options);\n itemOptions = { ...sectionItemOptions, ...itemOptions };\n\n if (typeof item === 'string') {\n items[index] = createWeighted<T>(item, itemOptions);\n } else {\n items[index] = item;\n }\n return section;\n }\n\n const add = (item: T | T[] | Section<T> | Section<T>[] | string | string[], options: Partial<WeightedOptions> = {}): Section<T> => {\n let itemOptions: WeightedOptions = WeightedOptionsSchema.parse(options);\n itemOptions = { ...sectionItemOptions, ...itemOptions };\n\n return append(item, itemOptions);\n }\n\n const toJSON = () => {\n return {\n title: section.title,\n items: items.map(item => {\n // If the item has a toJSON method, call it, otherwise return the item itself\n return typeof item === 'object' && item !== null && 'toJSON' in item && typeof item.toJSON === 'function'\n ? item.toJSON()\n : item;\n }),\n weight: section.weight,\n };\n };\n\n const section: Section<T> = {\n title: sectionOptions.title,\n items,\n weight: sectionOptions.weight,\n add,\n append,\n prepend,\n insert,\n remove,\n replace,\n toJSON,\n }\n\n return section;\n}\n\n\n"],"names":["SectionOptionsSchema","z","object","title","string","optional","weight","number","itemWeight","parameters","ParametersSchema","default","create","options","items","sectionOptions","parse","sectionItemOptions","WeightedOptionsSchema","append","item","itemOptions","Array","isArray","forEach","push","createWeighted","section","prepend","unshift","insert","index","splice","remove","replace","add","toJSON","map"],"mappings":"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"}
package/dist/recipes.d.ts CHANGED
@@ -353,21 +353,15 @@ export declare const cook: (config: Partial<RecipeConfig> & {
353
353
  basePath: string;
354
354
  }) => Promise<Prompt>;
355
355
  export declare const recipe: (basePath: string) => {
356
- template: (name: string) => {
357
- with: (config: Partial<RecipeConfig>) => Promise<Prompt>;
358
- };
359
- persona: (persona: ContentItem) => {
360
- instructions: (...instructions: ContentItem[]) => {
361
- content: (...content: ContentItem[]) => {
362
- context: (...context: ContentItem[]) => {
363
- cook: () => Promise<Prompt>;
364
- };
365
- cook: () => Promise<Prompt>;
366
- };
367
- cook: () => Promise<Prompt>;
368
- };
369
- cook: () => Promise<Prompt>;
370
- };
371
- cook: (config: Partial<RecipeConfig>) => Promise<Prompt>;
356
+ template: (name: string) => /*elided*/ any;
357
+ with: (partialConfig: Partial<RecipeConfig>) => /*elided*/ any;
358
+ persona: (persona: ContentItem) => /*elided*/ any;
359
+ instructions: (...instructions: ContentItem[]) => /*elided*/ any;
360
+ content: (...content: ContentItem[]) => /*elided*/ any;
361
+ context: (...context: ContentItem[]) => /*elided*/ any;
362
+ parameters: (parameters: any) => /*elided*/ any;
363
+ overrides: (enabled: boolean) => /*elided*/ any;
364
+ overridePaths: (paths: string[]) => /*elided*/ any;
365
+ cook: () => Promise<Prompt>;
372
366
  };
373
367
  export type { RecipeConfig, ContentItem };
package/dist/recipes.js CHANGED
@@ -169,7 +169,10 @@ const cook = async (config)=>{
169
169
  parameters: finalConfig.parameters});
170
170
  }
171
171
  // Process content
172
+ // eslint-disable-next-line no-console
172
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));
173
176
  await processContentItem(item, contentSection, 'content', {
174
177
  basePath: finalConfig.basePath,
175
178
  parser: parser$1,
@@ -200,11 +203,11 @@ const processContentItem = async (item, section, type, ctx)=>{
200
203
  };
201
204
  if (typeof item === 'string') {
202
205
  // Simple string content
203
- const parsedSection = ctx.parser.parse(item, sectionOptions);
206
+ const parsedSection = await ctx.parser.parse(item, sectionOptions);
204
207
  section.add(parsedSection);
205
208
  } else if ('content' in item) {
206
209
  // Inline content with options
207
- const parsedSection = ctx.parser.parse(item.content, {
210
+ const parsedSection = await ctx.parser.parse(item.content, {
208
211
  ...sectionOptions,
209
212
  title: item.title,
210
213
  weight: item.weight
@@ -231,49 +234,63 @@ const processContentItem = async (item, section, type, ctx)=>{
231
234
  }
232
235
  };
233
236
  // ===== FLUENT RECIPE BUILDER =====
234
- const recipe = (basePath)=>({
235
- template: (name)=>({
236
- with: (config)=>cook({
237
- basePath,
238
- template: name,
239
- ...config
240
- })
241
- }),
242
- persona: (persona)=>({
243
- instructions: (...instructions)=>({
244
- content: (...content)=>({
245
- context: (...context)=>({
246
- cook: ()=>cook({
247
- basePath,
248
- persona,
249
- instructions,
250
- content,
251
- context
252
- })
253
- }),
254
- cook: ()=>cook({
255
- basePath,
256
- persona,
257
- instructions,
258
- content
259
- })
260
- }),
261
- cook: ()=>cook({
262
- basePath,
263
- persona,
264
- instructions
265
- })
266
- }),
267
- cook: ()=>cook({
268
- basePath,
269
- persona
270
- })
271
- }),
272
- cook: (config)=>cook({
273
- basePath,
274
- ...config
275
- })
276
- });
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
+ };
277
294
 
278
295
  export { clearTemplates, cook, getTemplates, recipe, registerTemplates };
279
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\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 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// ===== FLUENT RECIPE BUILDER =====\n\nexport const recipe = (basePath: string) => ({\n template: (name: string) => ({\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","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","createPrompt","contents","contexts","section","type","ctx","sectionOptions","parsedSection","add","fullPath","join","parseFile","overrideSection","customize","sections","load","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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"}
@@ -201,6 +201,16 @@ const create$8 = (options = {})=>{
201
201
  };
202
202
  return append(item, itemOptions);
203
203
  };
204
+ const toJSON = ()=>{
205
+ return {
206
+ title: section.title,
207
+ items: items.map((item)=>{
208
+ // If the item has a toJSON method, call it, otherwise return the item itself
209
+ return typeof item === 'object' && item !== null && 'toJSON' in item && typeof item.toJSON === 'function' ? item.toJSON() : item;
210
+ }),
211
+ weight: section.weight
212
+ };
213
+ };
204
214
  const section = {
205
215
  title: sectionOptions.title,
206
216
  items,
@@ -210,7 +220,8 @@ const create$8 = (options = {})=>{
210
220
  prepend,
211
221
  insert,
212
222
  remove,
213
- replace
223
+ replace,
224
+ toJSON
214
225
  };
215
226
  return section;
216
227
  };
@@ -1523,7 +1534,10 @@ const cook = async (config)=>{
1523
1534
  parameters: finalConfig.parameters});
1524
1535
  }
1525
1536
  // Process content
1537
+ // eslint-disable-next-line no-console
1526
1538
  for (const item of finalConfig.content || []){
1539
+ // eslint-disable-next-line no-console
1540
+ console.log('Processing content item:', JSON.stringify(item, null, 2));
1527
1541
  await processContentItem(item, contentSection, 'content', {
1528
1542
  basePath: finalConfig.basePath,
1529
1543
  parser: parser$1,
@@ -1554,11 +1568,11 @@ const processContentItem = async (item, section, type, ctx)=>{
1554
1568
  };
1555
1569
  if (typeof item === 'string') {
1556
1570
  // Simple string content
1557
- const parsedSection = ctx.parser.parse(item, sectionOptions);
1571
+ const parsedSection = await ctx.parser.parse(item, sectionOptions);
1558
1572
  section.add(parsedSection);
1559
1573
  } else if ('content' in item) {
1560
1574
  // Inline content with options
1561
- const parsedSection = ctx.parser.parse(item.content, {
1575
+ const parsedSection = await ctx.parser.parse(item.content, {
1562
1576
  ...sectionOptions,
1563
1577
  title: item.title,
1564
1578
  weight: item.weight
@@ -1585,49 +1599,63 @@ const processContentItem = async (item, section, type, ctx)=>{
1585
1599
  }
1586
1600
  };
1587
1601
  // ===== FLUENT RECIPE BUILDER =====
1588
- const recipe = (basePath)=>({
1589
- template: (name)=>({
1590
- with: (config)=>cook({
1591
- basePath,
1592
- template: name,
1593
- ...config
1594
- })
1595
- }),
1596
- persona: (persona)=>({
1597
- instructions: (...instructions)=>({
1598
- content: (...content)=>({
1599
- context: (...context)=>({
1600
- cook: ()=>cook({
1601
- basePath,
1602
- persona,
1603
- instructions,
1604
- content,
1605
- context
1606
- })
1607
- }),
1608
- cook: ()=>cook({
1609
- basePath,
1610
- persona,
1611
- instructions,
1612
- content
1613
- })
1614
- }),
1615
- cook: ()=>cook({
1616
- basePath,
1617
- persona,
1618
- instructions
1619
- })
1620
- }),
1621
- cook: ()=>cook({
1622
- basePath,
1623
- persona
1624
- })
1625
- }),
1626
- cook: (config)=>cook({
1627
- basePath,
1628
- ...config
1629
- })
1630
- });
1602
+ const recipe = (basePath)=>{
1603
+ const config = {
1604
+ basePath
1605
+ };
1606
+ const builder = {
1607
+ template: (name)=>{
1608
+ config.template = name;
1609
+ return builder;
1610
+ },
1611
+ with: (partialConfig)=>{
1612
+ Object.assign(config, partialConfig);
1613
+ return builder;
1614
+ },
1615
+ persona: (persona)=>{
1616
+ config.persona = persona;
1617
+ return builder;
1618
+ },
1619
+ instructions: (...instructions)=>{
1620
+ config.instructions = [
1621
+ ...config.instructions || [],
1622
+ ...instructions
1623
+ ];
1624
+ return builder;
1625
+ },
1626
+ content: (...content)=>{
1627
+ config.content = [
1628
+ ...config.content || [],
1629
+ ...content
1630
+ ];
1631
+ return builder;
1632
+ },
1633
+ context: (...context)=>{
1634
+ config.context = [
1635
+ ...config.context || [],
1636
+ ...context
1637
+ ];
1638
+ return builder;
1639
+ },
1640
+ parameters: (parameters)=>{
1641
+ config.parameters = {
1642
+ ...config.parameters,
1643
+ ...parameters
1644
+ };
1645
+ return builder;
1646
+ },
1647
+ overrides: (enabled)=>{
1648
+ config.overrides = enabled;
1649
+ return builder;
1650
+ },
1651
+ overridePaths: (paths)=>{
1652
+ config.overridePaths = paths;
1653
+ return builder;
1654
+ },
1655
+ cook: ()=>cook(config)
1656
+ };
1657
+ return builder;
1658
+ };
1631
1659
 
1632
1660
  const recipes = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
1633
1661
  __proto__: null,