@riotprompt/riotprompt 0.0.8 → 0.0.9

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 (42) hide show
  1. package/.kodrdriv-test-cache.json +6 -0
  2. package/README.md +2 -2
  3. package/dist/builder.js +3 -0
  4. package/dist/builder.js.map +1 -1
  5. package/dist/context-manager.d.ts +135 -0
  6. package/dist/context-manager.js +220 -0
  7. package/dist/context-manager.js.map +1 -0
  8. package/dist/conversation-logger.d.ts +283 -0
  9. package/dist/conversation-logger.js +454 -0
  10. package/dist/conversation-logger.js.map +1 -0
  11. package/dist/conversation.d.ts +271 -0
  12. package/dist/conversation.js +622 -0
  13. package/dist/conversation.js.map +1 -0
  14. package/dist/formatter.js.map +1 -1
  15. package/dist/iteration-strategy.d.ts +231 -0
  16. package/dist/iteration-strategy.js +486 -0
  17. package/dist/iteration-strategy.js.map +1 -0
  18. package/dist/loader.js +3 -0
  19. package/dist/loader.js.map +1 -1
  20. package/dist/message-builder.d.ts +156 -0
  21. package/dist/message-builder.js +254 -0
  22. package/dist/message-builder.js.map +1 -0
  23. package/dist/override.js +3 -0
  24. package/dist/override.js.map +1 -1
  25. package/dist/recipes.d.ts +42 -0
  26. package/dist/recipes.js +189 -4
  27. package/dist/recipes.js.map +1 -1
  28. package/dist/reflection.d.ts +250 -0
  29. package/dist/reflection.js +416 -0
  30. package/dist/reflection.js.map +1 -0
  31. package/dist/riotprompt.cjs +3549 -218
  32. package/dist/riotprompt.cjs.map +1 -1
  33. package/dist/riotprompt.d.ts +18 -2
  34. package/dist/riotprompt.js +9 -1
  35. package/dist/riotprompt.js.map +1 -1
  36. package/dist/token-budget.d.ts +177 -0
  37. package/dist/token-budget.js +404 -0
  38. package/dist/token-budget.js.map +1 -0
  39. package/dist/tools.d.ts +239 -0
  40. package/dist/tools.js +324 -0
  41. package/dist/tools.js.map +1 -0
  42. package/package.json +23 -20
package/dist/recipes.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import path__default from 'path';
2
2
  import { z } from 'zod';
3
+ import { ConversationBuilder } from './conversation.js';
3
4
  import { ParametersSchema } from './items/parameters.js';
4
5
  import { DEFAULT_LOGGER, wrapLogger } from './logger.js';
5
6
  import './items/weighted.js';
@@ -10,6 +11,9 @@ import { create } from './parser.js';
10
11
  import { create as create$2 } from './loader.js';
11
12
  import { create as create$1 } from './override.js';
12
13
  import './builder.js';
14
+ import 'tiktoken';
15
+ import { ToolRegistry } from './tools.js';
16
+ import { StrategyExecutor } from './iteration-strategy.js';
13
17
 
14
18
  // ===== CONFIGURATION SCHEMAS =====
15
19
  const ContentItemSchema = z.union([
@@ -46,13 +50,34 @@ const RecipeConfigSchema = z.object({
46
50
  context: z.array(ContentItemSchema).optional().default([]),
47
51
  // Templates and inheritance
48
52
  extends: z.string().optional(),
49
- template: z.string().optional()
53
+ template: z.string().optional(),
54
+ // Tool integration
55
+ tools: z.any().optional(),
56
+ toolGuidance: z.union([
57
+ z.enum([
58
+ 'auto',
59
+ 'minimal',
60
+ 'detailed'
61
+ ]),
62
+ z.object({
63
+ strategy: z.enum([
64
+ 'adaptive',
65
+ 'prescriptive',
66
+ 'minimal'
67
+ ]),
68
+ includeExamples: z.boolean().optional(),
69
+ explainWhenToUse: z.boolean().optional(),
70
+ includeCategories: z.boolean().optional(),
71
+ customInstructions: z.string().optional()
72
+ })
73
+ ]).optional(),
74
+ toolCategories: z.array(z.string()).optional()
50
75
  });
51
76
  // User-customizable template registry
52
77
  let TEMPLATES = {};
53
78
  /**
54
79
  * Register custom templates with the recipes system
55
- *
80
+ *
56
81
  * @example
57
82
  * ```typescript
58
83
  * // Register your own templates
@@ -83,6 +108,99 @@ let TEMPLATES = {};
83
108
  */ const clearTemplates = ()=>{
84
109
  TEMPLATES = {};
85
110
  };
111
+ // ===== TOOL GUIDANCE GENERATION =====
112
+ /**
113
+ * Generate tool guidance instructions based on strategy
114
+ */ const generateToolGuidance = (tools, guidance)=>{
115
+ if (tools.length === 0) {
116
+ return '';
117
+ }
118
+ // Normalize guidance config
119
+ let config;
120
+ if (typeof guidance === 'string') {
121
+ switch(guidance){
122
+ case 'auto':
123
+ case 'detailed':
124
+ config = {
125
+ strategy: 'adaptive',
126
+ includeExamples: true,
127
+ explainWhenToUse: true
128
+ };
129
+ break;
130
+ case 'minimal':
131
+ config = {
132
+ strategy: 'minimal',
133
+ includeExamples: false,
134
+ explainWhenToUse: false
135
+ };
136
+ break;
137
+ default:
138
+ config = {
139
+ strategy: 'adaptive'
140
+ };
141
+ }
142
+ } else {
143
+ config = guidance;
144
+ }
145
+ let output = '## Available Tools\n\n';
146
+ if (config.customInstructions) {
147
+ output += config.customInstructions + '\n\n';
148
+ }
149
+ // Group by category if enabled
150
+ if (config.includeCategories) {
151
+ const categorized = new Map();
152
+ tools.forEach((tool)=>{
153
+ const category = tool.category || 'General';
154
+ if (!categorized.has(category)) {
155
+ categorized.set(category, []);
156
+ }
157
+ categorized.get(category).push(tool);
158
+ });
159
+ categorized.forEach((categoryTools, category)=>{
160
+ output += `### ${category}\n\n`;
161
+ categoryTools.forEach((tool)=>{
162
+ output += formatToolGuidance(tool, config);
163
+ });
164
+ });
165
+ } else {
166
+ tools.forEach((tool)=>{
167
+ output += formatToolGuidance(tool, config);
168
+ });
169
+ }
170
+ return output;
171
+ };
172
+ const formatToolGuidance = (tool, config)=>{
173
+ let output = `**${tool.name}**`;
174
+ if (tool.cost) {
175
+ output += ` _(${tool.cost})_`;
176
+ }
177
+ output += `\n${tool.description}\n\n`;
178
+ if (config.strategy !== 'minimal') {
179
+ // Parameters
180
+ const required = tool.parameters.required || [];
181
+ const paramList = Object.entries(tool.parameters.properties).map(([name, param])=>{
182
+ const isRequired = required.includes(name);
183
+ return `- \`${name}\`${isRequired ? ' (required)' : ''}: ${param.description}`;
184
+ }).join('\n');
185
+ if (paramList) {
186
+ output += 'Parameters:\n' + paramList + '\n\n';
187
+ }
188
+ // When to use (adaptive and prescriptive)
189
+ if (config.explainWhenToUse && (config.strategy === 'adaptive' || config.strategy === 'prescriptive')) {
190
+ output += `**When to use:** ${tool.description}\n\n`;
191
+ }
192
+ // Examples
193
+ if (config.includeExamples && tool.examples && tool.examples.length > 0) {
194
+ output += '**Examples:**\n';
195
+ tool.examples.forEach((example)=>{
196
+ output += `- ${example.scenario}: \`${tool.name}(${JSON.stringify(example.params)})\`\n`;
197
+ });
198
+ output += '\n';
199
+ }
200
+ }
201
+ output += '---\n\n';
202
+ return output;
203
+ };
86
204
  // ===== CORE RECIPE ENGINE =====
87
205
  const cook = async (config)=>{
88
206
  // Parse and validate configuration with defaults
@@ -168,6 +286,19 @@ const cook = async (config)=>{
168
286
  loader: loader$1,
169
287
  parameters: finalConfig.parameters});
170
288
  }
289
+ // Generate tool guidance if tools are provided
290
+ if (finalConfig.tools) {
291
+ const tools = Array.isArray(finalConfig.tools) ? finalConfig.tools : finalConfig.tools.getAll();
292
+ // Filter by categories if specified
293
+ const filteredTools = finalConfig.toolCategories ? tools.filter((tool)=>finalConfig.toolCategories.includes(tool.category || '')) : tools;
294
+ if (filteredTools.length > 0 && finalConfig.toolGuidance) {
295
+ const guidance = generateToolGuidance(filteredTools, finalConfig.toolGuidance);
296
+ const toolSection = await parser$1.parse(guidance, {
297
+ parameters: finalConfig.parameters
298
+ });
299
+ instructionSection.add(toolSection);
300
+ }
301
+ }
171
302
  // Process content
172
303
  for (const item of finalConfig.content || []){
173
304
  await processContentItem(item, contentSection, 'content', {
@@ -284,10 +415,64 @@ const recipe = (basePath)=>{
284
415
  config.overridePaths = paths;
285
416
  return builder;
286
417
  },
287
- cook: ()=>cook(config)
418
+ tools: (tools)=>{
419
+ config.tools = tools;
420
+ return builder;
421
+ },
422
+ toolRegistry: (registry)=>{
423
+ config.tools = registry;
424
+ return builder;
425
+ },
426
+ toolGuidance: (guidance)=>{
427
+ config.toolGuidance = guidance;
428
+ return builder;
429
+ },
430
+ toolCategories: (categories)=>{
431
+ config.toolCategories = categories;
432
+ return builder;
433
+ },
434
+ cook: ()=>cook(config),
435
+ buildConversation: async (model, tokenBudget)=>{
436
+ const prompt = await cook(config);
437
+ const conversation = ConversationBuilder.create({
438
+ model
439
+ }, config.logger);
440
+ conversation.fromPrompt(prompt, model);
441
+ // Apply token budget if provided
442
+ if (tokenBudget) {
443
+ conversation.withTokenBudget(tokenBudget);
444
+ }
445
+ return conversation;
446
+ },
447
+ getToolRegistry: ()=>{
448
+ if (config.tools instanceof ToolRegistry) {
449
+ return config.tools;
450
+ } else if (Array.isArray(config.tools)) {
451
+ const registry = ToolRegistry.create({}, config.logger);
452
+ registry.registerAll(config.tools);
453
+ return registry;
454
+ }
455
+ return undefined;
456
+ },
457
+ executeWith: async (llm, strategy, tokenBudget)=>{
458
+ const prompt = await cook(config);
459
+ const conversation = ConversationBuilder.create({
460
+ model: 'gpt-4o'
461
+ }, config.logger);
462
+ conversation.fromPrompt(prompt, 'gpt-4o');
463
+ if (tokenBudget) {
464
+ conversation.withTokenBudget(tokenBudget);
465
+ }
466
+ const registry = builder.getToolRegistry();
467
+ if (!registry) {
468
+ throw new Error('Tools must be configured to use executeWith');
469
+ }
470
+ const executor = new StrategyExecutor(llm, config.logger);
471
+ return executor.execute(conversation, registry, strategy);
472
+ }
288
473
  };
289
474
  return builder;
290
475
  };
291
476
 
292
- export { clearTemplates, cook, getTemplates, recipe, registerTemplates };
477
+ export { clearTemplates, cook, generateToolGuidance, getTemplates, recipe, registerTemplates };
293
478
  //# 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 = 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","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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"}
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) => 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 tokenBudget?: TokenBudgetConfig\n ): Promise<StrategyResult> => {\n const prompt = await cook(config);\n const conversation = ConversationBuilder.create({ model: 'gpt-4o' as Model }, config.logger);\n conversation.fromPrompt(prompt, 'gpt-4o' as 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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"}
@@ -0,0 +1,250 @@
1
+ import { ConversationMessage } from './conversation';
2
+ import { StrategyResult } from './iteration-strategy';
3
+ import { Model } from './chat';
4
+ /**
5
+ * Tool execution metric for a single call
6
+ */
7
+ export interface ToolExecutionMetric {
8
+ name: string;
9
+ iteration: number;
10
+ timestamp: string;
11
+ duration: number;
12
+ success: boolean;
13
+ error?: string;
14
+ inputSize?: number;
15
+ outputSize?: number;
16
+ }
17
+ /**
18
+ * Aggregated statistics for a tool
19
+ */
20
+ export interface ToolStats {
21
+ name: string;
22
+ total: number;
23
+ success: number;
24
+ failures: number;
25
+ totalDuration: number;
26
+ avgDuration: number;
27
+ successRate: number;
28
+ }
29
+ /**
30
+ * Token usage metrics
31
+ */
32
+ export interface TokenUsageMetrics {
33
+ total: number;
34
+ systemPrompt: number;
35
+ userContent: number;
36
+ toolResults: number;
37
+ conversation: number;
38
+ percentage?: number;
39
+ budget?: number;
40
+ }
41
+ /**
42
+ * Complete execution metrics
43
+ */
44
+ export interface AgenticExecutionMetrics {
45
+ startTime: Date;
46
+ endTime?: Date;
47
+ totalDuration: number;
48
+ iterations: number;
49
+ toolCallsExecuted: number;
50
+ toolMetrics: ToolExecutionMetric[];
51
+ toolStats: Map<string, ToolStats>;
52
+ messageCount: number;
53
+ tokenUsage?: TokenUsageMetrics;
54
+ investigationDepth: 'shallow' | 'moderate' | 'deep';
55
+ toolDiversity: number;
56
+ iterationEfficiency: number;
57
+ }
58
+ /**
59
+ * Recommendation type
60
+ */
61
+ export type RecommendationType = 'tool-failure' | 'performance' | 'investigation-depth' | 'token-budget' | 'strategy-adjustment' | 'quality-issue';
62
+ /**
63
+ * Recommendation from analysis
64
+ */
65
+ export interface Recommendation {
66
+ type: RecommendationType;
67
+ severity: 'high' | 'medium' | 'low';
68
+ message: string;
69
+ suggestion?: string;
70
+ relatedTools?: string[];
71
+ relatedMetrics?: any;
72
+ }
73
+ /**
74
+ * Tool effectiveness analysis
75
+ */
76
+ export interface ToolEffectivenessAnalysis {
77
+ overallSuccessRate: number;
78
+ toolStats: Map<string, ToolStats>;
79
+ failedTools: Array<{
80
+ name: string;
81
+ failures: number;
82
+ rate: number;
83
+ }>;
84
+ slowTools: Array<{
85
+ name: string;
86
+ avgDuration: number;
87
+ }>;
88
+ mostUsedTools: Array<{
89
+ name: string;
90
+ count: number;
91
+ }>;
92
+ }
93
+ /**
94
+ * Performance insights
95
+ */
96
+ export interface PerformanceInsights {
97
+ totalDuration: number;
98
+ avgIterationDuration: number;
99
+ slowestTool?: {
100
+ name: string;
101
+ duration: number;
102
+ };
103
+ fastestTool?: {
104
+ name: string;
105
+ duration: number;
106
+ };
107
+ bottlenecks: string[];
108
+ }
109
+ /**
110
+ * Timeline event
111
+ */
112
+ export interface TimelineEvent {
113
+ timestamp: string;
114
+ iteration: number;
115
+ type: 'message' | 'tool-call' | 'tool-result';
116
+ description: string;
117
+ duration?: number;
118
+ success?: boolean;
119
+ }
120
+ /**
121
+ * Quality assessment
122
+ */
123
+ export interface QualityAssessment {
124
+ investigationDepth: 'shallow' | 'moderate' | 'deep';
125
+ toolDiversity: number;
126
+ iterationEfficiency: number;
127
+ coverage: number;
128
+ overall: number;
129
+ }
130
+ /**
131
+ * Complete reflection report
132
+ */
133
+ export interface ReflectionReport {
134
+ id: string;
135
+ generated: Date;
136
+ summary: {
137
+ startTime: Date;
138
+ endTime: Date;
139
+ totalDuration: number;
140
+ iterations: number;
141
+ toolCallsExecuted: number;
142
+ uniqueToolsUsed: number;
143
+ successRate: number;
144
+ };
145
+ toolEffectiveness: ToolEffectivenessAnalysis;
146
+ performanceInsights: PerformanceInsights;
147
+ timeline: TimelineEvent[];
148
+ tokenUsage?: TokenUsageMetrics;
149
+ qualityAssessment: QualityAssessment;
150
+ recommendations: Recommendation[];
151
+ conversationHistory?: ConversationMessage[];
152
+ output?: string;
153
+ }
154
+ /**
155
+ * Reflection configuration
156
+ */
157
+ export interface ReflectionConfig {
158
+ enabled: boolean;
159
+ outputPath?: string;
160
+ format?: 'markdown' | 'json' | 'html';
161
+ includeConversation?: boolean;
162
+ includeRecommendations?: boolean;
163
+ sections?: ReflectionSection[];
164
+ }
165
+ export type ReflectionSection = 'summary' | 'tool-effectiveness' | 'performance' | 'timeline' | 'token-usage' | 'quality-assessment' | 'recommendations' | 'conversation' | 'output';
166
+ /**
167
+ * MetricsCollector gathers execution metrics during agentic execution.
168
+ *
169
+ * @example
170
+ * ```typescript
171
+ * const collector = new MetricsCollector();
172
+ *
173
+ * collector.recordToolCall('read_file', iteration, duration, true);
174
+ * collector.recordToolCall('search_code', iteration, duration, false, error);
175
+ *
176
+ * const metrics = collector.getMetrics(messages);
177
+ * ```
178
+ */
179
+ export declare class MetricsCollector {
180
+ private startTime;
181
+ private toolMetrics;
182
+ private iterationCount;
183
+ private logger;
184
+ constructor(logger?: any);
185
+ /**
186
+ * Record a tool execution
187
+ */
188
+ recordToolCall(name: string, iteration: number, duration: number, success: boolean, error?: string, inputSize?: number, outputSize?: number): void;
189
+ /**
190
+ * Increment iteration count
191
+ */
192
+ incrementIteration(): void;
193
+ /**
194
+ * Get complete metrics
195
+ */
196
+ getMetrics(messages: ConversationMessage[], model?: Model): AgenticExecutionMetrics;
197
+ /**
198
+ * Calculate aggregated tool statistics
199
+ */
200
+ private calculateToolStats;
201
+ }
202
+ /**
203
+ * ReflectionReportGenerator generates analysis reports from execution metrics.
204
+ *
205
+ * @example
206
+ * ```typescript
207
+ * const generator = new ReflectionReportGenerator();
208
+ * const report = generator.generate(metrics, result);
209
+ *
210
+ * console.log('Success rate:', report.toolEffectiveness.overallSuccessRate);
211
+ * console.log('Recommendations:', report.recommendations.length);
212
+ * ```
213
+ */
214
+ export declare class ReflectionReportGenerator {
215
+ private logger;
216
+ constructor(logger?: any);
217
+ /**
218
+ * Generate reflection report
219
+ */
220
+ generate(metrics: AgenticExecutionMetrics, result: StrategyResult): ReflectionReport;
221
+ /**
222
+ * Generate execution summary
223
+ */
224
+ private generateSummary;
225
+ /**
226
+ * Analyze tool effectiveness
227
+ */
228
+ private analyzeToolEffectiveness;
229
+ /**
230
+ * Analyze performance
231
+ */
232
+ private analyzePerformance;
233
+ /**
234
+ * Build execution timeline
235
+ */
236
+ private buildTimeline;
237
+ /**
238
+ * Assess investigation quality
239
+ */
240
+ private assessQuality;
241
+ /**
242
+ * Generate recommendations
243
+ */
244
+ private generateRecommendations;
245
+ /**
246
+ * Format report as markdown
247
+ */
248
+ formatMarkdown(report: ReflectionReport): string;
249
+ }
250
+ export default ReflectionReportGenerator;