@riotprompt/riotprompt 0.0.7 → 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 (52) hide show
  1. package/.kodrdriv-test-cache.json +6 -0
  2. package/README.md +2 -2
  3. package/dist/builder.d.ts +3 -15
  4. package/dist/builder.js +3 -0
  5. package/dist/builder.js.map +1 -1
  6. package/dist/context-manager.d.ts +135 -0
  7. package/dist/context-manager.js +220 -0
  8. package/dist/context-manager.js.map +1 -0
  9. package/dist/conversation-logger.d.ts +283 -0
  10. package/dist/conversation-logger.js +454 -0
  11. package/dist/conversation-logger.js.map +1 -0
  12. package/dist/conversation.d.ts +271 -0
  13. package/dist/conversation.js +622 -0
  14. package/dist/conversation.js.map +1 -0
  15. package/dist/formatter.d.ts +27 -57
  16. package/dist/formatter.js +2 -2
  17. package/dist/formatter.js.map +1 -1
  18. package/dist/items/parameters.d.ts +1 -1
  19. package/dist/items/section.d.ts +2 -12
  20. package/dist/items/weighted.d.ts +3 -15
  21. package/dist/iteration-strategy.d.ts +231 -0
  22. package/dist/iteration-strategy.js +486 -0
  23. package/dist/iteration-strategy.js.map +1 -0
  24. package/dist/loader.d.ts +3 -11
  25. package/dist/loader.js +3 -0
  26. package/dist/loader.js.map +1 -1
  27. package/dist/message-builder.d.ts +156 -0
  28. package/dist/message-builder.js +254 -0
  29. package/dist/message-builder.js.map +1 -0
  30. package/dist/override.d.ts +3 -13
  31. package/dist/override.js +3 -0
  32. package/dist/override.js.map +1 -1
  33. package/dist/parser.d.ts +2 -8
  34. package/dist/recipes.d.ts +70 -268
  35. package/dist/recipes.js +189 -4
  36. package/dist/recipes.js.map +1 -1
  37. package/dist/reflection.d.ts +250 -0
  38. package/dist/reflection.js +416 -0
  39. package/dist/reflection.js.map +1 -0
  40. package/dist/riotprompt.cjs +3551 -220
  41. package/dist/riotprompt.cjs.map +1 -1
  42. package/dist/riotprompt.d.ts +18 -2
  43. package/dist/riotprompt.js +9 -1
  44. package/dist/riotprompt.js.map +1 -1
  45. package/dist/token-budget.d.ts +177 -0
  46. package/dist/token-budget.js +404 -0
  47. package/dist/token-budget.js.map +1 -0
  48. package/dist/tools.d.ts +239 -0
  49. package/dist/tools.js +324 -0
  50. package/dist/tools.js.map +1 -0
  51. package/package.json +35 -36
  52. package/.cursor/rules/focus-on-prompt.mdc +0 -5
@@ -1 +1 @@
1
- {"version":3,"file":"riotprompt.cjs","sources":["../src/items/parameters.ts","../src/items/weighted.ts","../src/items/content.ts","../src/items/context.ts","../src/items/instruction.ts","../src/items/section.ts","../src/items/trait.ts","../src/prompt.ts","../src/constants.ts","../src/chat.ts","../src/logger.ts","../src/util/general.ts","../src/formatter.ts","../src/parse/markdown.ts","../src/parse/text.ts","../src/util/markdown.ts","../src/util/text.ts","../src/parser.ts","../src/util/storage.ts","../src/loader.ts","../src/override.ts","../src/builder.ts","../src/recipes.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport const ParametersSchema = z.record(z.string(), z.union([z.string(), z.number(), z.boolean(), z.array(z.union([z.string(), z.number(), z.boolean()]))]));\n\nexport type Parameters = z.infer<typeof ParametersSchema>;\n\nexport const create = (parameters: Parameters): Parameters => {\n return parameters;\n}\n\nexport const apply = (text: string, parameters?: Parameters): string => {\n if (!parameters) {\n return text;\n }\n\n // First, trim parameters keys to handle whitespace in placeholder names\n const trimmedParams: Record<string, any> = {};\n Object.keys(parameters).forEach(key => {\n trimmedParams[key.trim()] = parameters[key];\n });\n\n // Process all placeholders, preserving ones that don't have matching parameters\n return text.replace(/\\{\\{([^{}]+)\\}\\}/g, (match, p1) => {\n const paramKey = p1.trim();\n const parameter = trimmedParams[paramKey];\n\n if (parameter === undefined) {\n // Preserve the original placeholder if parameter doesn't exist\n return match;\n } else if (typeof parameter === 'string') {\n return parameter;\n } else if (typeof parameter === 'number') {\n return parameter.toString();\n } else if (typeof parameter === 'boolean') {\n return parameter.toString();\n } else if (Array.isArray(parameter)) {\n return parameter.join(', ');\n } else {\n return match;\n }\n });\n}","import { z } from \"zod\";\nimport { ParametersSchema, apply as applyParameters } from \"./parameters\";\n\nexport const WeightedSchema = z.object({\n text: z.string(),\n weight: z.number().optional(),\n});\n\nexport type Weighted = z.infer<typeof WeightedSchema>;\n\nexport const WeightedOptionsSchema = z.object({\n weight: z.number().optional(),\n parameters: ParametersSchema.optional(),\n});\n\nexport type WeightedOptions = z.infer<typeof WeightedOptionsSchema>;\n\n\nexport const create = <T extends Weighted>(\n text: string,\n options: Partial<WeightedOptions> = {}\n): T => {\n const weightedOptions = WeightedOptionsSchema.parse(options);\n const parameterizedText = applyParameters(text, weightedOptions.parameters);\n\n return {\n text: parameterizedText,\n weight: weightedOptions.weight,\n } as T;\n}","import { Weighted, WeightedOptions, WeightedOptionsSchema, create as createWeighted } from \"./weighted\";\n\n// Define Content as a type alias for Weighted\nexport type Content = Weighted;\n\n// Export create function\nexport const create = (text: string, options: Partial<WeightedOptions> = {}): Content => {\n const weightedOptions = WeightedOptionsSchema.parse(options);\n return createWeighted<Content>(text, weightedOptions);\n}\n\n","import { Weighted, WeightedOptions, WeightedOptionsSchema, create as createWeighted } from \"./weighted\";\n\nexport type Context = Weighted;\n\nexport const create = (text: string, options: Partial<WeightedOptions> = {}): Context => {\n const weightedOptions = WeightedOptionsSchema.parse(options);\n return createWeighted<Context>(text, weightedOptions);\n}\n\n","import { Weighted, WeightedOptions, WeightedOptionsSchema, create as createWeighted } from \"./weighted\";\n\nexport type Instruction = Weighted;\n\nexport const create = (text: string, options: Partial<WeightedOptions> = {}): Instruction => {\n const weightedOptions = WeightedOptionsSchema.parse(options);\n return createWeighted<Instruction>(text, weightedOptions);\n}","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","import { Weighted, WeightedOptions, WeightedOptionsSchema, create as createWeighted } from \"./weighted\";\n\nexport type Trait = Weighted;\n\nexport const create = (text: string, options: WeightedOptions = {}): Trait => {\n const weightedOptions = WeightedOptionsSchema.parse(options);\n return createWeighted<Trait>(text, weightedOptions);\n}","import { Content } from \"./items/content\";\nimport { Context } from \"./items/context\";\nimport { Instruction } from \"./items/instruction\";\nimport { Section } from \"./items/section\";\n\nexport interface Prompt {\n persona?: Section<Instruction>;\n instructions: Section<Instruction>;\n contents?: Section<Content>;\n contexts?: Section<Context>;\n}\n\nexport const create = ({\n persona,\n instructions,\n contents,\n contexts,\n}: {\n persona?: Section<Instruction>,\n instructions: Section<Instruction>,\n contents?: Section<Content>,\n contexts?: Section<Context>\n}): Prompt => {\n\n return {\n persona,\n instructions,\n contents,\n contexts,\n }\n}","import { SectionSeparator } from \"formatter\";\n\nimport { FormatOptions } from \"formatter\";\n\nexport const DEFAULT_CHARACTER_ENCODING = \"utf8\";\nexport const LIBRARY_NAME = \"riotprompt\";\n\nexport const DEFAULT_PERSONA_ROLE = \"developer\";\n\nexport const DEFAULT_INSTRUCTIONS_AREA_TITLE = \"Instructions\";\nexport const DEFAULT_CONTENTS_AREA_TITLE = \"Contents\";\nexport const DEFAULT_CONTEXT_AREA_TITLE = \"Context\";\n\nexport const DEFAULT_IGNORE_PATTERNS: string[] = [\n \"^\\\\..*\", // Hidden files (e.g., .git, .DS_Store)\n \"\\\\.(jpg|jpeg|png|gif|bmp|svg|webp|ico)$\", // Image files\n \"\\\\.(mp3|wav|ogg|aac|flac)$\", // Audio files\n \"\\\\.(mp4|mov|avi|mkv|webm)$\", // Video files\n \"\\\\.(pdf|doc|docx|xls|xlsx|ppt|pptx)$\", // Document files\n \"\\\\.(zip|tar|gz|rar|7z)$\" // Compressed files\n];\n\nexport const DEFAULT_SECTION_SEPARATOR: SectionSeparator = \"tag\";\nexport const DEFAULT_SECTION_INDENTATION = true;\nexport const DEFAULT_SECTION_TAG = \"section\";\nexport const DEFAULT_SECTION_TITLE_PROPERTY = \"title\";\n\nexport const DEFAULT_FORMAT_OPTIONS: FormatOptions = {\n sectionSeparator: DEFAULT_SECTION_SEPARATOR,\n sectionIndentation: DEFAULT_SECTION_INDENTATION,\n sectionTitleProperty: DEFAULT_SECTION_TITLE_PROPERTY,\n sectionDepth: 0,\n}\n","import { DEFAULT_PERSONA_ROLE } from \"./constants\";\n\nexport type Role = \"user\" | \"assistant\" | \"system\" | \"developer\";\n\nexport type Model = \"gpt-4o\" | \"gpt-4o-mini\" | \"o1-preview\" | \"o1-mini\" | \"o1\" | \"o3-mini\" | \"o1-pro\";\n\nexport interface Message {\n role: Role;\n content: string | string[];\n name?: string;\n}\n\nexport interface Request {\n messages: Message[];\n model: Model;\n\n addMessage(message: Message): void;\n}\n\nexport const getPersonaRole = (model: Model): Role => {\n if (model === \"gpt-4o\" || model === \"gpt-4o-mini\") {\n return \"system\";\n }\n return DEFAULT_PERSONA_ROLE;\n}\n\nexport const createRequest = (model: Model): Request => {\n const messages: Message[] = [];\n\n return {\n model,\n messages,\n addMessage: (message: Message) => {\n messages.push(message);\n }\n }\n}\n","/* eslint-disable no-console */\nimport { LIBRARY_NAME } from \"./constants\";\n\nexport interface Logger {\n name: string;\n debug: (message: string, ...args: any[]) => void;\n info: (message: string, ...args: any[]) => void;\n warn: (message: string, ...args: any[]) => void;\n error: (message: string, ...args: any[]) => void;\n verbose: (message: string, ...args: any[]) => void;\n silly: (message: string, ...args: any[]) => void;\n}\n\nexport const DEFAULT_LOGGER: Logger = {\n name: 'default',\n debug: (message: string, ...args: any[]) => console.debug(message, ...args),\n info: (message: string, ...args: any[]) => console.info(message, ...args),\n warn: (message: string, ...args: any[]) => console.warn(message, ...args),\n error: (message: string, ...args: any[]) => console.error(message, ...args),\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n verbose: (message: string, ...args: any[]) => { },\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n silly: (message: string, ...args: any[]) => { },\n}\n\nexport const wrapLogger = (toWrap: Logger, name?: string): Logger => {\n\n const requiredMethods: (keyof Logger)[] = ['debug', 'info', 'warn', 'error', 'verbose', 'silly'];\n const missingMethods = requiredMethods.filter(method => typeof toWrap[method] !== 'function');\n\n if (missingMethods.length > 0) {\n throw new Error(`Logger is missing required methods: ${missingMethods.join(', ')}`);\n }\n\n const log = (level: keyof Logger, message: string, ...args: any[]) => {\n message = `[${LIBRARY_NAME}] ${name ? `[${name}]` : ''}: ${message}`;\n\n if (level === 'debug') toWrap.debug(message, ...args);\n else if (level === 'info') toWrap.info(message, ...args);\n else if (level === 'warn') toWrap.warn(message, ...args);\n else if (level === 'error') toWrap.error(message, ...args);\n else if (level === 'verbose') toWrap.verbose(message, ...args);\n else if (level === 'silly') toWrap.silly(message, ...args);\n }\n\n return {\n name: 'wrapped',\n debug: (message: string, ...args: any[]) => log('debug', message, ...args),\n info: (message: string, ...args: any[]) => log('info', message, ...args),\n warn: (message: string, ...args: any[]) => log('warn', message, ...args),\n error: (message: string, ...args: any[]) => log('error', message, ...args),\n verbose: (message: string, ...args: any[]) => log('verbose', message, ...args),\n silly: (message: string, ...args: any[]) => log('silly', message, ...args),\n }\n}","export const clean = (obj: any) => {\n return Object.fromEntries(\n Object.entries(obj).filter(([_, v]) => v !== undefined)\n );\n}\n\n//Recursive implementation of jSON.stringify;\nexport const stringifyJSON = function (obj: any, visited: Set<any> = new Set()): string {\n const arrOfKeyVals: string[] = [];\n const arrVals: string[] = [];\n let objKeys: string[] = [];\n\n /*********CHECK FOR PRIMITIVE TYPES**********/\n if (typeof obj === 'number' || typeof obj === 'boolean' || obj === null)\n return '' + obj;\n else if (typeof obj === 'string')\n return '\"' + obj + '\"';\n\n /*********DETECT CIRCULAR REFERENCES**********/\n if (obj instanceof Object && visited.has(obj)) {\n return '\"(circular)\"';\n }\n\n /*********CHECK FOR ARRAY**********/\n else if (Array.isArray(obj)) {\n //check for empty array\n if (obj[0] === undefined)\n return '[]';\n else {\n // Add array to visited before processing its elements\n visited.add(obj);\n obj.forEach(function (el) {\n arrVals.push(stringifyJSON(el, visited));\n });\n return '[' + arrVals + ']';\n }\n }\n /*********CHECK FOR OBJECT**********/\n else if (obj instanceof Object) {\n // Add object to visited before processing its properties\n visited.add(obj);\n //get object keys\n objKeys = Object.keys(obj);\n //set key output;\n objKeys.forEach(function (key) {\n const keyOut = '\"' + key + '\":';\n const keyValOut = obj[key];\n //skip functions and undefined properties\n if (keyValOut instanceof Function || keyValOut === undefined)\n return; // Skip this entry entirely instead of pushing an empty string\n else if (typeof keyValOut === 'string')\n arrOfKeyVals.push(keyOut + '\"' + keyValOut + '\"');\n else if (typeof keyValOut === 'boolean' || typeof keyValOut === 'number' || keyValOut === null)\n arrOfKeyVals.push(keyOut + keyValOut);\n //check for nested objects, call recursively until no more objects\n else if (keyValOut instanceof Object) {\n arrOfKeyVals.push(keyOut + stringifyJSON(keyValOut, visited));\n }\n });\n return '{' + arrOfKeyVals + '}';\n }\n return '';\n};","import { Instruction } from \"riotprompt\";\nimport { z } from \"zod\";\nimport * as Chat from \"./chat\";\nimport { getPersonaRole, Message, Model } from \"./chat\";\nimport { DEFAULT_FORMAT_OPTIONS } from \"./constants\";\nimport { Section } from \"./items/section\";\nimport { Weighted } from \"./items/weighted\";\nimport { DEFAULT_LOGGER, wrapLogger } from \"./logger\";\nimport { Prompt } from \"./prompt\";\nimport { clean, stringifyJSON } from \"./util/general\";\n\nexport const SectionSeparatorSchema = z.enum([\"tag\", \"markdown\"]);\nexport const SectionTitlePropertySchema = z.enum([\"title\", \"name\"]);\n\nexport type SectionSeparator = z.infer<typeof SectionSeparatorSchema>;\nexport type SectionTitleProperty = z.infer<typeof SectionTitlePropertySchema>;\n\n\nexport const FormatOptionsSchema = z.object({\n sectionSeparator: SectionSeparatorSchema,\n sectionIndentation: z.boolean(),\n sectionTitleProperty: SectionTitlePropertySchema,\n sectionTitlePrefix: z.string().optional(),\n sectionTitleSeparator: z.string().optional(),\n sectionDepth: z.number().default(1),\n});\n\nexport type FormatOptions = z.infer<typeof FormatOptionsSchema>;\n\n\nexport const OptionSchema = z.object({\n logger: z.any().optional().default(DEFAULT_LOGGER),\n formatOptions: FormatOptionsSchema.partial().optional().default(DEFAULT_FORMAT_OPTIONS),\n});\n\nexport type Options = z.infer<typeof OptionSchema>;\n\nexport type OptionsParam = Partial<Options>;\n\nexport interface Instance {\n formatPersona: (model: Model, persona: Section<Instruction>) => Message;\n format: <T extends Weighted>(weightedText: T | Section<T>, sectionDepth?: number) => string;\n formatArray: <T extends Weighted>(items: (T | Section<T>)[], sectionDepth?: number) => string;\n formatPrompt: (model: Model, prompt: Prompt) => Chat.Request;\n}\n\n// Type guard to check if an object is a Section\nfunction isSection<T extends Weighted>(obj: T | Section<T>): obj is Section<T> {\n return obj && typeof obj === 'object' && 'items' in obj && Array.isArray((obj as Section<T>).items);\n}\n\n// Type guard to check if an object is a Section\nfunction isWeighted<T extends Weighted>(obj: T | Section<T>): obj is T {\n return obj && typeof obj === 'object' && 'text' in obj;\n}\n\n\nexport const create = (formatterOptions?: OptionsParam): Instance => {\n const options: Required<Options> = OptionSchema.parse(formatterOptions || {}) as Required<Options>;\n\n const logger = wrapLogger(options.logger, 'Formatter');\n\n let formatOptions: FormatOptions = DEFAULT_FORMAT_OPTIONS;\n if (options?.formatOptions) {\n formatOptions = {\n ...formatOptions,\n ...clean(options.formatOptions),\n };\n }\n\n const formatPersona = (model: Model, persona: Section<Instruction>): Message => {\n logger.silly(`Formatting persona`);\n if (persona) {\n const formattedPersona = formatSection(persona);\n\n return {\n role: getPersonaRole(model),\n content: `${formattedPersona}`,\n }\n } else {\n throw new Error(\"Persona is required\");\n }\n }\n\n const format = <T extends Weighted>(\n item: T | Section<T>,\n sectionDepth?: number,\n ): string => {\n logger.silly(`Formatting ${isSection(item) ? \"section\" : \"item\"} Item: %s`, stringifyJSON(item));\n const currentSectionDepth = sectionDepth ?? formatOptions.sectionDepth;\n logger.silly(`\\t\\tCurrent section depth: ${currentSectionDepth}`);\n\n let result: string = \"\";\n if (isSection(item)) {\n result = formatSection(item, currentSectionDepth + 1);\n } else if (isWeighted(item)) {\n result = item.text;\n } else {\n //If the item is neither a section nor a weighted item, it is empty.\n result = '';\n }\n return result;\n }\n\n const formatSection = <T extends Weighted>(section: Section<T>, sectionDepth?: number): string => {\n logger.silly(`Formatting section`);\n const currentSectionDepth = sectionDepth ?? formatOptions.sectionDepth;\n logger.silly(`\\t\\tCurrent section depth: ${currentSectionDepth}`);\n\n if (section) {\n const formattedItems = section.items.map(item => format(item, currentSectionDepth)).join(\"\\n\\n\");\n\n if (formatOptions.sectionSeparator === \"tag\") {\n return `<${section.title ?? \"section\"}>\\n${formattedItems}\\n</${section.title ?? \"section\"}>`;\n } else {\n // Default depth to 1 if not provided, resulting in H2 (##) matching the test case.\n const headingLevel = currentSectionDepth;\n const hashes = '#'.repeat(headingLevel);\n logger.silly(`\\t\\tHeading level: ${headingLevel}`);\n logger.silly(`\\t\\tSection title: ${section.title}`);\n return `${hashes} ${formatOptions.sectionTitlePrefix ? `${formatOptions.sectionTitlePrefix} ${formatOptions.sectionTitleSeparator} ` : \"\"}${section.title}\\n\\n${formattedItems}`;\n }\n } else {\n return '';\n }\n }\n\n // Helper function to format arrays of items or sections\n const formatArray = <T extends Weighted>(\n items: (T | Section<T>)[],\n sectionDepth?: number\n ): string => {\n logger.silly(`Formatting array`);\n const currentSectionDepth = sectionDepth ?? formatOptions.sectionDepth;\n return items.map(item => format(item, currentSectionDepth)).join(\"\\n\\n\");\n }\n\n const formatPrompt = (model: Model, prompt: Prompt): Chat.Request => {\n logger.silly('Formatting prompt');\n const chatRequest: Chat.Request = Chat.createRequest(model);\n\n if (prompt.persona) {\n [prompt.persona].forEach((persona: Section<Instruction>) => {\n chatRequest.addMessage(formatPersona(model, persona));\n });\n }\n\n let formattedAreas: string = formatSection(prompt.instructions) + '\\n\\n';\n\n if (prompt.contents) {\n formattedAreas += formatSection(prompt.contents) + '\\n\\n';\n }\n\n if (prompt.contexts) {\n formattedAreas += formatSection(prompt.contexts) + '\\n\\n';\n }\n\n chatRequest.addMessage({\n role: \"user\",\n content: formattedAreas,\n });\n\n return chatRequest;\n }\n\n return {\n formatPersona,\n format,\n formatPrompt,\n formatArray,\n }\n}\n","import { create as createSection, Section, SectionOptions, SectionOptionsSchema } from '../items/section';\nimport { create as createWeighted, Weighted, WeightedOptionsSchema } from '../items/weighted';\n\nexport const parseMarkdown = async <T extends Weighted>(\n input: string | Buffer,\n options: Partial<SectionOptions> = {}\n): Promise<Section<T>> => {\n\n // Dynamic import for marked (ES module)\n const { marked } = await import('marked');\n\n let markdownContent;\n if (typeof input === 'string') {\n markdownContent = input;\n } else {\n markdownContent = input.toString();\n }\n\n const sectionOptions = SectionOptionsSchema.parse(options);\n\n // Use marked.lexer to get tokens without full parsing/rendering\n const tokens = marked.lexer(markdownContent);\n\n // Create the main section (with a Title from the options)\n const mainSection = createSection<T>(sectionOptions);\n\n // Track sections at each depth level\n const sectionStack: Section<T>[] = [mainSection];\n\n // Set if we've seen the first token\n let isFirstToken = true;\n\n // Set the item options\n const itemOptions = WeightedOptionsSchema.parse({\n ...sectionOptions,\n weight: sectionOptions.itemWeight,\n });\n\n for (const token of tokens) {\n switch (token.type) {\n case 'heading': {\n const depth = token.depth;\n\n // If this is the first token and it's a heading, use it as the main section title\n if (isFirstToken) {\n mainSection.title = token.text;\n isFirstToken = false;\n break;\n }\n\n isFirstToken = false;\n\n // Create a new section with this heading\n const newSection = createSection<T>({ ...sectionOptions, title: token.text });\n\n // Ensure the section stack has the right size based on this heading's depth\n // (e.g., a depth-2 heading should be added to the depth-1 section)\n // We need to ensure the stack length is exactly depth, not just less than or equal to depth\n while (sectionStack.length > depth && sectionStack.length > 1) {\n sectionStack.pop();\n }\n\n // Make sure we're at the right level for this heading\n // If we stay at the same heading level (e.g., two h2s in sequence),\n // we need to pop once more to get to the parent level\n if (sectionStack.length === depth && sectionStack.length > 1) {\n sectionStack.pop();\n }\n\n // Add new section to its parent\n const parentSection = sectionStack[sectionStack.length - 1];\n parentSection.add(newSection, itemOptions);\n\n // Push this section onto the stack\n sectionStack.push(newSection);\n break;\n }\n\n case 'paragraph': {\n isFirstToken = false;\n const instruction: T = createWeighted<T>(token.text, itemOptions);\n const currentSection = sectionStack[sectionStack.length - 1];\n currentSection.add(instruction, itemOptions);\n break;\n }\n\n case 'list': {\n isFirstToken = false;\n // Convert list items to instructions\n const listInstructionContent = token.items.map((item: any) => `- ${item.text}`).join('\\n');\n const listInstruction: T = createWeighted<T>(listInstructionContent, itemOptions);\n const currentSection = sectionStack[sectionStack.length - 1];\n currentSection.add(listInstruction, itemOptions);\n break;\n }\n\n case 'code': {\n isFirstToken = false;\n // Represent code blocks as instructions\n const codeInstruction: T = createWeighted<T>(`\\`\\`\\`${token.lang || ''}\\n${token.text}\\n\\`\\`\\``, itemOptions);\n const currentSection = sectionStack[sectionStack.length - 1];\n currentSection.add(codeInstruction, itemOptions);\n break;\n }\n\n case 'space':\n // Usually ignore space tokens between block elements\n break;\n\n default: {\n isFirstToken = false;\n // Treat other block tokens' text as instructions for robustness\n if ('text' in token && token.text) {\n const fallbackInstruction: T = createWeighted<T>(token.text, itemOptions);\n const currentSection = sectionStack[sectionStack.length - 1];\n currentSection.add(fallbackInstruction, itemOptions);\n }\n break;\n }\n }\n }\n return mainSection;\n}\n","import { create as createSection, Section, SectionOptions, SectionOptionsSchema } from '../items/section';\nimport { create as createWeighted, Weighted, WeightedOptionsSchema } from '../items/weighted';\n\nexport const parseText = <T extends Weighted>(\n input: string | Buffer,\n options: Partial<SectionOptions> = {}\n): Section<T> => {\n\n let text;\n if (typeof input === 'string') {\n text = input;\n } else {\n text = input.toString();\n }\n\n const sectionOptions = SectionOptionsSchema.parse(options);\n\n // Set the item options\n const itemOptions = WeightedOptionsSchema.parse({\n ...sectionOptions,\n weight: sectionOptions.itemWeight,\n });\n\n // Split the text on newlines\n const lines = text.split(/\\r?\\n/).filter(line => line.trim().length > 0);\n\n // Create the main section with the supplied title\n const mainSection = createSection<T>(sectionOptions);\n\n for (const line of lines) {\n const instruction: T = createWeighted<T>(line, itemOptions);\n mainSection.add(instruction, itemOptions);\n }\n\n return mainSection;\n}\n","import { DEFAULT_CHARACTER_ENCODING } from \"../constants\";\n\n// Heuristic to check for Markdown syntax. This is not a full parser.\n// It looks for common Markdown patterns.\nconst markdownRegex = /^(#+\\s|\\*\\s|-\\s|\\+\\s|>\\s|\\[.*\\]\\(.*\\)|```|~~~|---\\\\s*$)/m;\n\n/**\n * Inspects a string to see if it likely contains Markdown syntax.\n *\n * @param input The string or Buffer content to inspect.\n * @returns True if Markdown syntax is suspected, false otherwise.\n */\nexport function isMarkdown(input: string | Buffer): boolean {\n if (input == null) {\n return false;\n }\n // Convert Buffer to string if necessary\n const content = typeof input === 'string' ? input : input.toString(DEFAULT_CHARACTER_ENCODING);\n if (!content || content.trim() === '') {\n return false; // Empty string is not considered Markdown\n }\n\n // Check for common Markdown patterns in the entire content\n if (markdownRegex.test(content)) {\n return true;\n }\n\n // Fallback: Check for a high prevalence of Markdown-like list/header starters\n // or thematic breaks, or code blocks.\n // We'll consider up to the first ~2000 characters, roughly equivalent to the byte check.\n const effectiveContent = content.length > 2000 ? content.substring(0, 2000) : content;\n const lines = effectiveContent.split('\\n');\n let markdownFeatureCount = 0;\n const featurePatterns = [\n /^#+\\s+.+/, // Headers (e.g., # Heading)\n /^\\s*[*+-]\\s+.+/, // List items (e.g., * item, - item, + item)\n /^\\s*>\\s+.+/, // Blockquotes (e.g., > quote)\n /\\[.+\\]\\(.+\\)/, // Links (e.g., [text](url))\n /!\\[.+\\]\\(.+\\)/, // Images (e.g., ![alt](src))\n /`{1,3}[^`]+`{1,3}/, // Inline code (e.g., `code`) or code blocks (```code```)\n /^\\s*_{3,}\\s*$/, // Thematic breaks (e.g., ---, ***, ___)\n /^\\s*-{3,}\\s*$/,\n /^\\s*\\*{3,}\\s*$/\n ];\n\n for (const line of lines) {\n // Stop checking if we have already found enough features to be confident.\n // This is a small optimization for very long inputs that are clearly markdown early on.\n if (markdownFeatureCount >= 2 && lines.length > 10) { // Heuristic threshold\n const significantLineCountEarly = Math.min(lines.indexOf(line) + 1, 20);\n if (significantLineCountEarly > 0 && markdownFeatureCount / significantLineCountEarly > 0.1) {\n return true;\n }\n }\n\n for (const pattern of featurePatterns) {\n if (pattern.test(line.trim())) {\n markdownFeatureCount++;\n break; // Count each line only once\n }\n }\n }\n\n // If more than 5% of the first few lines (up to 20 lines or all lines if fewer)\n // show markdown features, or if there are at least 2 distinct features in short texts,\n // consider it Markdown.\n const significantLineCount = Math.min(lines.length, 20);\n if (significantLineCount > 0) {\n // Calculate the exact threshold percentage\n const thresholdPercentage = markdownFeatureCount / significantLineCount;\n\n // Check against the 5% threshold (0.05)\n // Using >= 0.05 exactly matches 5%, > 0.05 requires more than 5%\n if (thresholdPercentage >= 0.05 + 0.0001) { // Adding a small epsilon to ensure exactly 5% passes but just below fails\n return true;\n }\n\n // Other conditions for returning true\n if ((markdownFeatureCount >= 1 && significantLineCount <= 5) || markdownFeatureCount >= 2) {\n return true;\n }\n }\n\n return false;\n}\n\n// Example usage (optional, for testing):\n// function testIsMarkdownString() {\n// console.log('--- Testing isMarkdownString ---');\n// const markdown1 = '# Hello World\\\\nThis is a test.';\n// console.log(`Test 1 (Header): \"${markdown1.substring(0,10)}...\" -> ${isMarkdownString(markdown1)}`); // true\n\n// const markdown2 = '* Item 1\\\\n* Item 2';\n// console.log(`Test 2 (List): \"${markdown2.substring(0,10)}...\" -> ${isMarkdownString(markdown2)}`); // true\n\n// const markdown3 = '[Google](https://google.com)';\n// console.log(`Test 3 (Link): \"${markdown3.substring(0,15)}...\" -> ${isMarkdownString(markdown3)}`); // true\n\n// const markdown4 = '> This is a quote.';\n// console.log(`Test 4 (Blockquote): \"${markdown4.substring(0,10)}...\" -> ${isMarkdownString(markdown4)}`); // true\n\n// const markdown5 = '```javascript\\\\nconsole.log(\"hello\");\\\\n```';\n// console.log(`Test 5 (Code block): \"${markdown5.substring(0,15)}...\" -> ${isMarkdownString(markdown5)}`); // true\n\n// const text1 = 'This is a plain text string.';\n// console.log(`Test 6 (Plain text): \"${text1.substring(0,10)}...\" -> ${isMarkdownString(text1)}`); // false\n\n// const text2 = 'hello_world.this_is_a_test_string_with_underscores_but_not_markdown_thematic_break';\n// console.log(`Test 7 (Long non-markdown): \"${text2.substring(0,10)}...\" -> ${isMarkdownString(text2)}`); // false\n\n// const text3 = '<xml><tag>value</tag></xml>';\n// console.log(`Test 8 (XML): \"${text3.substring(0,10)}...\" -> ${isMarkdownString(text3)}`); // false\n\n// const shortMarkdown = '# H';\n// console.log(`Test 9 (Short Markdown): \"${shortMarkdown}\" -> ${isMarkdownString(shortMarkdown)}`); // true\n\n// const shortNonMarkdown = 'Hello';\n// console.log(`Test 10 (Short Non-Markdown): \"${shortNonMarkdown}\" -> ${isMarkdownString(shortNonMarkdown)}`); // false\n\n// const emptyString = '';\n// console.log(`Test 11 (Empty string): \"\" -> ${isMarkdownString(emptyString)}`); // false\n\n// const whitespaceString = ' \\t \\n ';\n// console.log(`Test 12 (Whitespace string): \"${whitespaceString.substring(0,5)}...\" -> ${isMarkdownString(whitespaceString)}`); // false\n\n// const markdownWithManyFeatures = `# Title\\\\n\\\\n* list\\\\n* list2\\\\n\\\\n> quote here\\\\n\\\\n\\`\\`\\`\\\\ncode\\\\n\\`\\`\\`\\\\n\\\\nnormal text paragraph with a [link](url).\\n---\\nAnother paragraph.\\nThis is just a test string to see how it performs with multiple markdown features present.\\nHello world this is a very long line that does not contain any markdown syntax at all, it is just plain text that goes on and on.\\n* Another list item\\n* And another one\\n# Another Header\\n## Subheader\\nThis is fun.\\nOkay I think this is enough.\\nFinal line.\\nAnother final line.\\nOne more for good measure.\\nOkay that should be enough lines to test the early exit.\\n`;\n// console.log(`Test 13 (Many Features): \"${markdownWithManyFeatures.substring(0,10)}...\" -> ${isMarkdownString(markdownWithManyFeatures)}`); // true\n\n// const htmlLike = '<div><p>Hello</p><ul><li>item</li></ul></div>';\n// console.log(`Test 14 (HTML-like): \"${htmlLike.substring(0,10)}...\" -> ${isMarkdownString(htmlLike)}`); // false\n\n// console.log('--- End Testing ---');\n// }\n\n// testIsMarkdownString();\n","import { DEFAULT_CHARACTER_ENCODING } from \"../constants\";\n\n// Returns true if the input is likely text, false if likely binary\nexport function isText(input: string | Buffer): boolean {\n let buf: Buffer;\n if (typeof input === 'string') {\n buf = Buffer.from(input, DEFAULT_CHARACTER_ENCODING);\n } else {\n buf = input;\n }\n\n // Empty buffers are considered text\n if (buf.length === 0) {\n return true;\n }\n\n // If the buffer contains null bytes, it's likely binary\n if (buf.includes(0)) {\n return false;\n }\n\n // For UTF-8 encoded text (including emoji and international characters),\n // convert to string first and check if there are non-printable characters\n const str = buf.toString(DEFAULT_CHARACTER_ENCODING);\n\n // Count the number of non-printable ASCII characters (excluding common whitespace)\n let nonPrintable = 0;\n const len = Math.min(str.length, 512); // Only check the first 512 characters for performance\n\n for (let i = 0; i < len; i++) {\n const charCode = str.charCodeAt(i);\n // Allow: tab (9), line feed (10), carriage return (13), printable ASCII (32-126)\n // Also allow all non-ASCII Unicode characters (charCode > 127)\n if (\n charCode !== 9 && charCode !== 10 && charCode !== 13 &&\n (charCode < 32 || (charCode > 126 && charCode < 128))\n ) {\n nonPrintable++;\n }\n }\n\n // If more than 10% of the checked characters are non-printable, consider it binary\n return nonPrintable / len < 0.1;\n}\n","import * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { z } from 'zod';\nimport { ParametersSchema } from './items/parameters';\nimport { Section, SectionOptions, SectionOptionsSchema } from './items/section';\nimport { Weighted } from './items/weighted';\nimport { DEFAULT_LOGGER, wrapLogger } from './logger';\nimport { parseMarkdown } from './parse/markdown';\nimport { parseText } from './parse/text';\nimport { isMarkdown } from './util/markdown';\nimport { isText } from './util/text';\n\nconst OptionsSchema = z.object({\n logger: z.any().optional().default(DEFAULT_LOGGER),\n parameters: ParametersSchema.optional().default({}),\n});\n\nexport type Options = z.infer<typeof OptionsSchema>;\n\nexport type OptionsParam = Partial<Options>;\n\nexport interface Instance {\n parse: <T extends Weighted>(input: string | Buffer, options?: SectionOptions) => Promise<Section<T>>;\n parseFile: <T extends Weighted>(filePath: string, options?: SectionOptions) => Promise<Section<T>>;\n}\n\nexport const create = (parserOptions?: OptionsParam): Instance => {\n const options: Required<Options> = OptionsSchema.parse(parserOptions || {}) as Required<Options>;\n const parameters = options.parameters;\n\n const logger = wrapLogger(options.logger, 'Parser');\n\n const loadOptions = (sectionOptions: Partial<SectionOptions> = {}): SectionOptions => {\n const currentOptions = SectionOptionsSchema.parse(sectionOptions);\n return {\n ...currentOptions,\n parameters: {\n ...parameters,\n ...currentOptions.parameters\n }\n }\n }\n\n const parseFile = async <T extends Weighted>(\n filePath: string,\n options: Partial<SectionOptions> = {}\n ): Promise<Section<T>> => {\n const currentOptions = loadOptions(options);\n try {\n const content = await fs.readFile(filePath, 'utf-8');\n // Only use the filename as title if no title was explicitly provided\n const fileName = path.basename(filePath, path.extname(filePath));\n return await parse(content, {\n ...currentOptions,\n title: currentOptions?.title || fileName\n });\n } catch (error) {\n // Log the error or handle it appropriately\n logger.error(`Error reading or parsing file with marked at ${filePath}:`, error);\n throw new Error(`Failed to parse instructions from ${filePath}: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n /**\n * Reads Markdown content and parses it into a single Section.\n * \n * - If the content starts with a heading, that becomes the title of the returned Section\n * - If no heading at the start, creates a Section with no title\n * - Headers within the content create nested sections based on their depth\n * - All content is organized in a hierarchical structure based on heading levels\n *\n * @param content The content to parse\n * @returns A Section containing all content in a hierarchical structure\n */\n const parse = async <T extends Weighted>(\n content: string | Buffer,\n options: Partial<SectionOptions> = {}\n ): Promise<Section<T>> => {\n const currentOptions = loadOptions(options);\n\n let mainSection: Section<T>;\n if (isMarkdown(content)) {\n mainSection = await parseMarkdown<T>(content, currentOptions);\n } else if (isText(content)) {\n mainSection = parseText<T>(content, currentOptions);\n } else {\n throw new Error(`Unsupported content supplied to parse, riotprompt currently only supports markdown and text`);\n }\n return mainSection;\n }\n\n return {\n parse,\n parseFile\n }\n}","// eslint-disable-next-line no-restricted-imports\nimport * as fs from 'fs';\nimport { glob } from 'glob';\nimport path from 'path';\nimport crypto from 'crypto';\n/**\n * This module exists to isolate filesystem operations from the rest of the codebase.\n * This makes testing easier by avoiding direct fs mocking in jest configuration.\n * \n * Additionally, abstracting storage operations allows for future flexibility - \n * this export utility may need to work with storage systems other than the local filesystem\n * (e.g. S3, Google Cloud Storage, etc).\n */\n\nexport interface Utility {\n exists: (path: string) => Promise<boolean>;\n isDirectory: (path: string) => Promise<boolean>;\n isFile: (path: string) => Promise<boolean>;\n isReadable: (path: string) => Promise<boolean>;\n isWritable: (path: string) => Promise<boolean>;\n isFileReadable: (path: string) => Promise<boolean>;\n isDirectoryWritable: (path: string) => Promise<boolean>;\n isDirectoryReadable: (path: string) => Promise<boolean>;\n createDirectory: (path: string) => Promise<void>;\n readFile: (path: string, encoding: string) => Promise<string>;\n readStream: (path: string) => Promise<fs.ReadStream>;\n writeFile: (path: string, data: string | Buffer, encoding: string) => Promise<void>;\n forEachFileIn: (directory: string, callback: (path: string) => Promise<void>, options?: { pattern: string, limit?: number }) => Promise<void>;\n hashFile: (path: string, length: number) => Promise<string>;\n listFiles: (directory: string) => Promise<string[]>;\n}\n\nexport const create = (params: { log?: (message: string, ...args: any[]) => void }): Utility => {\n\n // eslint-disable-next-line no-console\n const log = params.log || console.log;\n\n const exists = async (path: string): Promise<boolean> => {\n try {\n await fs.promises.stat(path);\n return true;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error: any) {\n return false;\n }\n }\n\n const isDirectory = async (path: string): Promise<boolean> => {\n const stats = await fs.promises.stat(path);\n if (!stats.isDirectory()) {\n log(`${path} is not a directory`);\n return false;\n }\n return true;\n }\n\n const isFile = async (path: string): Promise<boolean> => {\n const stats = await fs.promises.stat(path);\n if (!stats.isFile()) {\n log(`${path} is not a file`);\n return false;\n }\n return true;\n }\n\n const isReadable = async (path: string): Promise<boolean> => {\n try {\n await fs.promises.access(path, fs.constants.R_OK);\n } catch (error: any) {\n log(`${path} is not readable: %s %s`, error.message, error.stack);\n return false;\n }\n return true;\n }\n\n const isWritable = async (path: string): Promise<boolean> => {\n try {\n await fs.promises.access(path, fs.constants.W_OK);\n } catch (error: any) {\n log(`${path} is not writable: %s %s`, error.message, error.stack);\n return false;\n }\n return true;\n }\n\n const isFileReadable = async (path: string): Promise<boolean> => {\n return await exists(path) && await isFile(path) && await isReadable(path);\n }\n\n const isDirectoryWritable = async (path: string): Promise<boolean> => {\n return await exists(path) && await isDirectory(path) && await isWritable(path);\n }\n\n const isDirectoryReadable = async (path: string): Promise<boolean> => {\n return await exists(path) && await isDirectory(path) && await isReadable(path);\n }\n\n const createDirectory = async (path: string): Promise<void> => {\n try {\n await fs.promises.mkdir(path, { recursive: true });\n } catch (mkdirError: any) {\n throw new Error(`Failed to create output directory ${path}: ${mkdirError.message} ${mkdirError.stack}`);\n }\n }\n\n const readFile = async (path: string, encoding: string): Promise<string> => {\n return await fs.promises.readFile(path, { encoding: encoding as BufferEncoding });\n }\n\n const writeFile = async (path: string, data: string | Buffer, encoding: string): Promise<void> => {\n await fs.promises.writeFile(path, data, { encoding: encoding as BufferEncoding });\n }\n\n const forEachFileIn = async (\n directory: string,\n callback: (file: string) => Promise<void>,\n options: { pattern: string | string[], limit?: number } = { pattern: '*.*' },\n ): Promise<void> => {\n try {\n let filesProcessed = 0;\n const files = await glob(options.pattern, { cwd: directory, nodir: true });\n for (const file of files) {\n await callback(path.join(directory, file));\n filesProcessed++;\n if (options.limit && filesProcessed >= options.limit) {\n log(`Reached limit of ${options.limit} files, stopping`);\n break;\n }\n }\n } catch (err: any) {\n throw new Error(`Failed to glob pattern ${options.pattern} in ${directory}: ${err.message}`);\n }\n }\n\n const readStream = async (path: string): Promise<fs.ReadStream> => {\n return fs.createReadStream(path);\n }\n\n const hashFile = async (path: string, length: number): Promise<string> => {\n const file = await readFile(path, 'utf8');\n return crypto.createHash('sha256').update(file).digest('hex').slice(0, length);\n }\n\n const listFiles = async (directory: string): Promise<string[]> => {\n return await fs.promises.readdir(directory);\n }\n\n return {\n exists,\n isDirectory,\n isFile,\n isReadable,\n isWritable,\n isFileReadable,\n isDirectoryWritable,\n isDirectoryReadable,\n createDirectory,\n readFile,\n readStream,\n writeFile,\n forEachFileIn,\n hashFile,\n listFiles,\n };\n}","import path from \"path\";\nimport { z } from \"zod\";\nimport { DEFAULT_IGNORE_PATTERNS } from \"./constants\";\nimport { ParametersSchema } from \"./items/parameters\";\nimport { SectionOptions, SectionOptionsSchema } from \"./items/section\";\nimport { DEFAULT_LOGGER, wrapLogger } from \"./logger\";\nimport { Section, Weighted, createSection } from \"./riotprompt\";\nimport * as Storage from \"./util/storage\";\n\nconst OptionsSchema = z.object({\n logger: z.any().optional().default(DEFAULT_LOGGER),\n ignorePatterns: z.array(z.string()).optional().default(DEFAULT_IGNORE_PATTERNS),\n parameters: ParametersSchema.optional().default({}),\n});\n\nexport type Options = z.infer<typeof OptionsSchema>;\n\nexport type OptionsParam = Partial<Options>;\n\nexport interface Instance {\n load: <T extends Weighted>(contextDirectories?: string[], options?: SectionOptions) => Promise<Section<T>[]>;\n}\n\n/**\n * Extracts the first header from Markdown text\n * @param markdownText The Markdown text to parse\n * @returns The first header found in the Markdown or null if none is found\n */\nexport function extractFirstHeader(markdownText: string): string | null {\n // Regular expression to match Markdown headers (# Header, ## Header, etc.)\n const headerRegex = /^(#{1,6})\\s+(.+?)(?:\\n|$)/m;\n const match = markdownText.match(headerRegex);\n\n if (match && match[2]) {\n return match[2].trim();\n }\n\n return null;\n}\n\n/**\n * Removes the first header from Markdown text\n * @param markdownText The Markdown text to process\n * @returns The Markdown text without the first header\n */\nexport function removeFirstHeader(markdownText: string): string {\n // Regular expression to match Markdown headers (# Header, ## Header, etc.)\n const headerRegex = /^(#{1,6})\\s+(.+?)(?:\\n|$)/m;\n const match = markdownText.match(headerRegex);\n\n if (match) {\n return markdownText.replace(headerRegex, '').trim();\n }\n\n return markdownText;\n}\n\nexport const create = (loaderOptions?: OptionsParam): Instance => {\n const options: Required<Options> = OptionsSchema.parse(loaderOptions || {}) as Required<Options>;\n const parameters = options.parameters;\n\n const logger = wrapLogger(options.logger, 'Loader');\n const ignorePatterns = options.ignorePatterns;\n\n const loadOptions = (sectionOptions: Partial<SectionOptions> = {}): SectionOptions => {\n const currentOptions = SectionOptionsSchema.parse(sectionOptions);\n return {\n ...currentOptions,\n parameters: {\n ...parameters,\n ...currentOptions.parameters\n }\n }\n }\n\n /**\n * Loads context from the provided directories and returns instruction sections\n * \n * @param contextDirectories Directories containing context files\n * @returns Array of instruction sections loaded from context directories\n */\n const load = async<T extends Weighted>(\n contextDirectories: string[] = [],\n options: Partial<SectionOptions> = {}\n ): Promise<Section<T>[]> => {\n const sectionOptions = loadOptions(options);\n\n logger.debug(`Loading context from ${contextDirectories}`);\n const contextSections: Section<T>[] = [];\n\n if (!contextDirectories || contextDirectories.length === 0) {\n logger.debug(`No context directories provided, returning empty context`);\n return contextSections;\n }\n\n const storage = Storage.create({ log: logger.debug });\n\n // Add context sections from each directory\n for (const contextDir of contextDirectories) {\n try {\n const dirName = path.basename(contextDir);\n logger.debug(`Processing context directory ${dirName}`);\n let mainContextSection: Section<T>;\n\n // First check if there's a context.md file\n const contextFile = path.join(contextDir, 'context.md');\n\n if (await storage.exists(contextFile)) {\n logger.debug(`Found context.md file in ${contextDir}`);\n const mainContextContent = await storage.readFile(contextFile, 'utf8');\n // Extract the first header from the Markdown content\n const firstHeader = extractFirstHeader(mainContextContent);\n\n // Use the header from context.md as the section title, or fallback to directory name\n const sectionTitle = firstHeader || dirName;\n mainContextSection = createSection<T>({ ...sectionOptions, title: sectionTitle });\n\n // Add content without the header\n if (firstHeader) {\n mainContextSection.add(removeFirstHeader(mainContextContent), { ...sectionOptions });\n } else {\n mainContextSection.add(mainContextContent, { ...sectionOptions });\n }\n } else {\n // If no context.md exists, use directory name as title\n mainContextSection = createSection<T>({ ...sectionOptions, title: dirName });\n }\n\n // Get all other files in the directory\n const files = await storage.listFiles(contextDir);\n const ignorePatternsRegex = ignorePatterns.map(pattern => new RegExp(pattern, 'i'));\n\n const filteredFiles = files.filter(file =>\n !ignorePatternsRegex.some(regex => regex.test(file))\n );\n\n for (const file of filteredFiles) {\n // Skip the context.md file as it's already processed\n if (file === 'context.md') continue;\n\n logger.debug(`Processing file ${file} in ${contextDir}`);\n const filePath = path.join(contextDir, file);\n if (await storage.isFile(filePath)) {\n const fileContent = await storage.readFile(filePath, 'utf8');\n let sectionName = file;\n let contentToAdd = fileContent;\n\n // Extract header if it exists\n if (file.endsWith('.md')) {\n const fileHeader = extractFirstHeader(fileContent);\n if (fileHeader) {\n sectionName = fileHeader;\n // Remove the header from the content\n contentToAdd = removeFirstHeader(fileContent);\n }\n }\n\n // Create a subsection with the extracted name\n const fileSection = createSection<T>({ ...sectionOptions, title: sectionName });\n fileSection.add(contentToAdd, { ...sectionOptions });\n\n // Add this file section to the main context section\n mainContextSection.add(fileSection as unknown as T, { ...sectionOptions });\n }\n }\n\n contextSections.push(mainContextSection);\n } catch (error) {\n logger.error(`Error processing context directory ${contextDir}: ${error}`);\n }\n }\n\n return contextSections;\n }\n\n\n return {\n load\n }\n}\n","import path from 'path';\nimport { z } from 'zod';\nimport { ParametersSchema } from './items/parameters';\nimport { SectionOptions, SectionOptionsSchema } from './items/section';\nimport { DEFAULT_LOGGER, wrapLogger } from './logger';\nimport { Formatter, Parser, Section, Weighted } from './riotprompt';\nimport * as Storage from './util/storage';\n\nconst OptionsSchema = z.object({\n logger: z.any().optional().default(DEFAULT_LOGGER),\n configDirs: z.array(z.string()).default(['./overrides']),\n overrides: z.boolean().default(false),\n parameters: ParametersSchema.optional().default({}),\n});\n\nexport type Options = z.infer<typeof OptionsSchema>;\n\nexport type OptionsParam = Partial<Options>;\n\nexport interface Instance {\n customize: <T extends Weighted>(overrideFile: string, section: Section<T>, sectionOptions?: SectionOptions) => Promise<Section<T>>;\n override: <T extends Weighted>(overrideFile: string, section: Section<T>, sectionOptions?: SectionOptions) =>\n Promise<{ override?: Section<T>, prepends: Section<T>[], appends: Section<T>[] }>;\n}\n\nexport const create = (overrideOptions: OptionsParam = {}): Instance => {\n const options: Required<Options> = OptionsSchema.parse(overrideOptions) as Required<Options>;\n\n const parameters = options.parameters;\n\n const logger = wrapLogger(options?.logger, 'Override');\n const storage = Storage.create({ log: logger.debug });\n\n const loadOptions = (sectionOptions: Partial<SectionOptions> = {}): SectionOptions => {\n const currentOptions = SectionOptionsSchema.parse(sectionOptions);\n return {\n ...currentOptions,\n parameters: {\n ...parameters,\n ...currentOptions.parameters\n }\n }\n }\n\n const override = async <T extends Weighted>(\n overrideFile: string,\n section: Section<T>,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<{ override?: Section<T>, prepends: Section<T>[], appends: Section<T>[] }> => {\n const currentSectionOptions = loadOptions(sectionOptions);\n\n const response: { override?: Section<T>, prepends: Section<T>[], appends: Section<T>[] } = {\n prepends: [],\n appends: []\n };\n\n // Process directories in order (closest to furthest)\n for (let i = 0; i < options.configDirs.length; i++) {\n const configDir = options.configDirs[i];\n const baseFile = path.join(configDir, overrideFile);\n const preFile = baseFile.replace('.md', '-pre.md');\n const postFile = baseFile.replace('.md', '-post.md');\n\n // Check for prepend files (-pre.md)\n if (await storage.exists(preFile)) {\n logger.silly('Found pre file %s (layer %d)', preFile, i + 1);\n const parser = Parser.create({ logger });\n const prependSection = await parser.parseFile<T>(preFile, currentSectionOptions);\n response.prepends.push(prependSection);\n }\n\n // Check for append files (-post.md)\n if (await storage.exists(postFile)) {\n logger.silly('Found post file %s (layer %d)', postFile, i + 1);\n const parser = Parser.create({ logger });\n const appendSection = await parser.parseFile<T>(postFile, currentSectionOptions);\n response.appends.push(appendSection);\n }\n\n // Check for complete override files - use the first (closest) one found\n if (!response.override && await storage.exists(baseFile)) {\n logger.silly('Found base file %s (layer %d)', baseFile, i + 1);\n if (options.overrides) {\n logger.warn('WARNING: Core directives are being overwritten by custom configuration at layer %d', i + 1);\n const parser = Parser.create({ logger });\n response.override = await parser.parseFile<T>(baseFile, currentSectionOptions);\n } else {\n logger.error('ERROR: Core directives are being overwritten by custom configuration');\n throw new Error('Core directives are being overwritten by custom configuration, but overrides are not enabled. Please enable --overrides to use this feature.');\n }\n }\n }\n\n return response;\n }\n\n const customize = async <T extends Weighted>(\n overrideFile: string,\n section: Section<T>,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Section<T>> => {\n const currentSectionOptions = loadOptions(sectionOptions);\n\n const { override: overrideContent, prepends, appends }: { override?: Section<T>, prepends: Section<T>[], appends: Section<T>[] } = await override(overrideFile, section, currentSectionOptions);\n let finalSection: Section<T> = section;\n\n if (overrideContent) {\n if (options.overrides) {\n logger.warn('Override found, replacing content from file %s', overrideContent);\n finalSection = overrideContent;\n } else {\n logger.error('ERROR: Core directives are being overwritten by custom configuration');\n throw new Error('Core directives are being overwritten by custom configuration, but overrides are not enabled. Please enable --overrides to use this feature.');\n }\n }\n\n // Apply prepends in order (closest layer first)\n for (const prepend of prepends) {\n logger.silly('Prepend found, adding to content from file %s', prepend);\n finalSection = finalSection.prepend(prepend);\n }\n\n // Apply appends in reverse order (furthest layers first, then closest)\n for (const append of appends.reverse()) {\n logger.silly('Append found, adding to content from file %s', append);\n finalSection = finalSection.append(append);\n }\n\n const formatter = Formatter.create({ logger });\n logger.silly('Final section %s:\\n\\n%s\\n\\n', logger.name, formatter.format(finalSection));\n\n return finalSection;\n }\n\n return {\n override,\n customize,\n }\n}","import path from \"path\";\nimport { z } from \"zod\";\nimport { ParametersSchema } from \"./items/parameters\";\nimport { SectionOptions, SectionOptionsSchema } from \"./items/section\";\nimport { DEFAULT_LOGGER, wrapLogger } from \"./logger\";\nimport { Content, Context, createPrompt, createSection, Instruction, Loader, Override, Parser, Prompt, Section, Weighted } from \"./riotprompt\";\n\nconst OptionSchema = z.object({\n logger: z.any().optional().default(DEFAULT_LOGGER),\n basePath: z.string(),\n overridePaths: z.array(z.string()).optional().default([\"./\"]),\n overrides: z.boolean().optional().default(false),\n parameters: ParametersSchema.optional().default({}),\n});\n\nexport type Options = z.infer<typeof OptionSchema>;\n\nexport type OptionsParam = Required<Pick<Options, 'basePath'>> & Partial<Omit<Options, 'basePath'>>;\n\nexport interface Instance {\n addPersonaPath(contentPath: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n addContextPath(contentPath: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n addInstructionPath(contentPath: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n addContentPath(contentPath: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n addContent(content: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n addContext(context: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n loadContext(contextDirectories: string[], sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n loadContent(contentDirectories: string[], sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n build(): Promise<Prompt>;\n}\n\nexport const create = (builderOptions: OptionsParam): Instance => {\n const options: Required<Options> = OptionSchema.parse(builderOptions) as Required<Options>;\n\n const logger = wrapLogger(options.logger, 'Builder');\n const parser = Parser.create({ logger });\n const override = Override.create({\n logger, configDirs: options.overridePaths || [\"./\"],\n overrides: options.overrides || false\n });\n const loader = Loader.create({ logger });\n\n const personaSection: Section<Instruction> = createSection({ title: \"Persona\" });\n const contextSection: Section<Context> = createSection({ title: \"Context\" });\n const instructionSection: Section<Instruction> = createSection({ title: \"Instruction\" });\n const contentSection: Section<Content> = createSection({ title: \"Content\" });\n const parameters = options.parameters;\n\n\n const instance: Partial<Instance> = {}\n\n const loadOptions = (sectionOptions: Partial<SectionOptions> = {}): SectionOptions => {\n const currentOptions = SectionOptionsSchema.parse(sectionOptions);\n return {\n ...currentOptions,\n parameters: {\n ...parameters,\n ...currentOptions.parameters\n }\n }\n }\n\n const loadDirectories = async <T extends Weighted>(\n directories: string[],\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Section<T>[]> => {\n const currentOptions = loadOptions(sectionOptions);\n logger.debug(\"Loading directories\", directories);\n const sections: Section<T>[] = await loader.load<T>(directories, currentOptions);\n return sections;\n }\n\n const loadContext = async (\n contextDirectories: string[],\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n const currentOptions = loadOptions(sectionOptions);\n logger.debug('Loading context', contextDirectories);\n const context: Section<Context>[] = await loadDirectories<Context>(contextDirectories, currentOptions);\n contextSection.add(context);\n return instance as Instance;\n }\n instance.loadContext = loadContext;\n\n const loadContent = async (\n contentDirectories: string[],\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n const currentOptions = loadOptions(sectionOptions);\n const content: Section<Content>[] = await loadDirectories<Content>(contentDirectories, currentOptions);\n contentSection.add(content);\n return instance as Instance;\n }\n instance.loadContent = loadContent;\n\n const loadPath = async <T extends Weighted>(\n contentPath: string,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Section<T>> => {\n const currentOptions = loadOptions(sectionOptions);\n const defaultPath = path.join(options.basePath as string, contentPath);\n const section: Section<T> = await parser.parseFile<T>(defaultPath, currentOptions);\n const overrideSection = await override.customize<T>(contentPath, section, currentOptions);\n return overrideSection;\n }\n\n const addPersonaPath = async (\n contentPath: string,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n const currentOptions = loadOptions(sectionOptions);\n const persona: Section<Instruction> = await loadPath<Instruction>(contentPath, currentOptions);\n personaSection.add(persona);\n return instance as Instance;\n }\n instance.addPersonaPath = addPersonaPath;\n\n const addContextPath = async (\n contentPath: string,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n logger.debug(\"Adding context path\", contentPath);\n const currentOptions = loadOptions(sectionOptions);\n const context: Section<Context> = await loadPath<Context>(contentPath, currentOptions);\n contextSection.add(context);\n return instance as Instance;\n }\n instance.addContextPath = addContextPath;\n\n const addInstructionPath = async (\n contentPath: string,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n logger.debug(\"Adding instruction path\", contentPath);\n const currentOptions = loadOptions(sectionOptions);\n const instruction: Section<Instruction> = await loadPath<Instruction>(contentPath, currentOptions);\n instructionSection.add(instruction);\n return instance as Instance;\n }\n instance.addInstructionPath = addInstructionPath;\n\n const addContentPath = async (\n contentPath: string,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n logger.debug(\"Adding content path\", contentPath);\n const currentOptions = loadOptions(sectionOptions);\n const content: Section<Content> = await loadPath<Content>(contentPath, currentOptions);\n contentSection.add(content);\n return instance as Instance;\n }\n instance.addContentPath = addContentPath;\n\n const addContent = async (\n content: string | Buffer,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n logger.debug(\"Adding content\", typeof content);\n const currentOptions = loadOptions(sectionOptions);\n const parsedContentSection: Section<Content> = await parser.parse<Content>(content, currentOptions);\n contentSection.add(parsedContentSection);\n return instance as Instance;\n }\n instance.addContent = addContent;\n\n const addContext = async (\n context: string | Buffer,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n logger.debug(\"Adding context\", typeof context);\n const currentOptions = loadOptions(sectionOptions);\n const parsedContextSection: Section<Context> = await parser.parse<Context>(context, currentOptions);\n contextSection.add(parsedContextSection);\n return instance as Instance;\n }\n instance.addContext = addContext;\n\n const build = async () => {\n logger.debug(\"Building prompt\", {});\n const prompt = createPrompt({ persona: personaSection, contexts: contextSection, instructions: instructionSection, contents: contentSection });\n return prompt;\n }\n instance.build = build;\n\n return instance as Instance;\n}\n","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":["ParametersSchema","z","record","string","union","number","boolean","array","create","parameters","apply","text","trimmedParams","Object","keys","forEach","key","trim","replace","match","p1","paramKey","parameter","undefined","toString","Array","isArray","join","object","weight","optional","WeightedOptionsSchema","options","weightedOptions","parse","parameterizedText","applyParameters","createWeighted","SectionOptionsSchema","title","itemWeight","default","items","sectionOptions","sectionItemOptions","append","item","itemOptions","push","section","prepend","unshift","insert","index","splice","remove","add","toJSON","map","persona","instructions","contents","contexts","DEFAULT_CHARACTER_ENCODING","LIBRARY_NAME","DEFAULT_PERSONA_ROLE","DEFAULT_IGNORE_PATTERNS","DEFAULT_SECTION_SEPARATOR","DEFAULT_SECTION_INDENTATION","DEFAULT_SECTION_TITLE_PROPERTY","DEFAULT_FORMAT_OPTIONS","sectionSeparator","sectionIndentation","sectionTitleProperty","sectionDepth","getPersonaRole","model","createRequest","messages","addMessage","message","DEFAULT_LOGGER","name","debug","args","console","info","warn","error","verbose","silly","wrapLogger","toWrap","requiredMethods","missingMethods","filter","method","length","Error","log","level","clean","obj","fromEntries","entries","_","v","stringifyJSON","visited","Set","arrOfKeyVals","arrVals","objKeys","has","el","keyOut","keyValOut","Function","SectionSeparatorSchema","enum","SectionTitlePropertySchema","FormatOptionsSchema","sectionTitlePrefix","sectionTitleSeparator","OptionSchema","logger","any","formatOptions","partial","isSection","isWeighted","formatterOptions","formatPersona","formattedPersona","formatSection","role","content","format","currentSectionDepth","result","formattedItems","headingLevel","hashes","repeat","formatArray","formatPrompt","prompt","chatRequest","Chat","formattedAreas","parseMarkdown","input","marked","markdownContent","tokens","lexer","mainSection","createSection","sectionStack","isFirstToken","token","type","depth","newSection","pop","parentSection","instruction","currentSection","listInstructionContent","listInstruction","codeInstruction","lang","fallbackInstruction","parseText","lines","split","line","markdownRegex","isMarkdown","test","effectiveContent","substring","markdownFeatureCount","featurePatterns","significantLineCountEarly","Math","min","indexOf","pattern","significantLineCount","thresholdPercentage","isText","buf","Buffer","from","includes","str","nonPrintable","len","i","charCode","charCodeAt","OptionsSchema","parserOptions","loadOptions","currentOptions","parseFile","filePath","fs","readFile","fileName","path","basename","extname","String","params","exists","promises","stat","isDirectory","stats","isFile","isReadable","access","constants","R_OK","stack","isWritable","W_OK","isFileReadable","isDirectoryWritable","isDirectoryReadable","createDirectory","mkdir","recursive","mkdirError","encoding","writeFile","data","forEachFileIn","directory","callback","filesProcessed","files","glob","cwd","nodir","file","limit","err","readStream","createReadStream","hashFile","crypto","createHash","update","digest","slice","listFiles","readdir","ignorePatterns","extractFirstHeader","markdownText","headerRegex","removeFirstHeader","loaderOptions","load","contextDirectories","contextSections","storage","Storage","contextDir","dirName","mainContextSection","contextFile","mainContextContent","firstHeader","sectionTitle","ignorePatternsRegex","RegExp","filteredFiles","some","regex","fileContent","sectionName","contentToAdd","endsWith","fileHeader","fileSection","configDirs","overrides","overrideOptions","override","overrideFile","currentSectionOptions","response","prepends","appends","configDir","baseFile","preFile","postFile","parser","Parser","prependSection","appendSection","customize","overrideContent","finalSection","reverse","formatter","Formatter","basePath","overridePaths","builderOptions","Override","loader","Loader","personaSection","contextSection","instructionSection","contentSection","instance","loadDirectories","directories","sections","loadContext","context","loadContent","contentDirectories","loadPath","contentPath","defaultPath","overrideSection","addPersonaPath","addContextPath","addInstructionPath","addContentPath","addContent","parsedContentSection","addContext","parsedContextSection","build","createPrompt","ContentItemSchema","RecipeConfigSchema","extends","template","TEMPLATES","registerTemplates","templates","getTemplates","clearTemplates","cook","config","validatedConfig","finalConfig","processContentItem","ctx","parsedSection","fullPath","recipe","builder","with","partialConfig","assign","enabled","paths"],"mappings":"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"}
1
+ {"version":3,"file":"riotprompt.cjs","sources":["../src/items/parameters.ts","../src/items/weighted.ts","../src/items/content.ts","../src/items/context.ts","../src/items/instruction.ts","../src/items/section.ts","../src/items/trait.ts","../src/prompt.ts","../src/constants.ts","../src/chat.ts","../src/logger.ts","../src/util/general.ts","../src/formatter.ts","../src/parse/markdown.ts","../src/parse/text.ts","../src/util/markdown.ts","../src/util/text.ts","../src/parser.ts","../src/util/storage.ts","../src/loader.ts","../src/override.ts","../src/builder.ts","../src/context-manager.ts","../src/conversation-logger.ts","../src/message-builder.ts","../src/token-budget.ts","../src/conversation.ts","../src/tools.ts","../src/reflection.ts","../src/iteration-strategy.ts","../src/recipes.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport const ParametersSchema = z.record(z.string(), z.union([z.string(), z.number(), z.boolean(), z.array(z.union([z.string(), z.number(), z.boolean()]))]));\n\nexport type Parameters = z.infer<typeof ParametersSchema>;\n\nexport const create = (parameters: Parameters): Parameters => {\n return parameters;\n}\n\nexport const apply = (text: string, parameters?: Parameters): string => {\n if (!parameters) {\n return text;\n }\n\n // First, trim parameters keys to handle whitespace in placeholder names\n const trimmedParams: Record<string, any> = {};\n Object.keys(parameters).forEach(key => {\n trimmedParams[key.trim()] = parameters[key];\n });\n\n // Process all placeholders, preserving ones that don't have matching parameters\n return text.replace(/\\{\\{([^{}]+)\\}\\}/g, (match, p1) => {\n const paramKey = p1.trim();\n const parameter = trimmedParams[paramKey];\n\n if (parameter === undefined) {\n // Preserve the original placeholder if parameter doesn't exist\n return match;\n } else if (typeof parameter === 'string') {\n return parameter;\n } else if (typeof parameter === 'number') {\n return parameter.toString();\n } else if (typeof parameter === 'boolean') {\n return parameter.toString();\n } else if (Array.isArray(parameter)) {\n return parameter.join(', ');\n } else {\n return match;\n }\n });\n}","import { z } from \"zod\";\nimport { ParametersSchema, apply as applyParameters } from \"./parameters\";\n\nexport const WeightedSchema = z.object({\n text: z.string(),\n weight: z.number().optional(),\n});\n\nexport type Weighted = z.infer<typeof WeightedSchema>;\n\nexport const WeightedOptionsSchema = z.object({\n weight: z.number().optional(),\n parameters: ParametersSchema.optional(),\n});\n\nexport type WeightedOptions = z.infer<typeof WeightedOptionsSchema>;\n\n\nexport const create = <T extends Weighted>(\n text: string,\n options: Partial<WeightedOptions> = {}\n): T => {\n const weightedOptions = WeightedOptionsSchema.parse(options);\n const parameterizedText = applyParameters(text, weightedOptions.parameters);\n\n return {\n text: parameterizedText,\n weight: weightedOptions.weight,\n } as T;\n}","import { Weighted, WeightedOptions, WeightedOptionsSchema, create as createWeighted } from \"./weighted\";\n\n// Define Content as a type alias for Weighted\nexport type Content = Weighted;\n\n// Export create function\nexport const create = (text: string, options: Partial<WeightedOptions> = {}): Content => {\n const weightedOptions = WeightedOptionsSchema.parse(options);\n return createWeighted<Content>(text, weightedOptions);\n}\n\n","import { Weighted, WeightedOptions, WeightedOptionsSchema, create as createWeighted } from \"./weighted\";\n\nexport type Context = Weighted;\n\nexport const create = (text: string, options: Partial<WeightedOptions> = {}): Context => {\n const weightedOptions = WeightedOptionsSchema.parse(options);\n return createWeighted<Context>(text, weightedOptions);\n}\n\n","import { Weighted, WeightedOptions, WeightedOptionsSchema, create as createWeighted } from \"./weighted\";\n\nexport type Instruction = Weighted;\n\nexport const create = (text: string, options: Partial<WeightedOptions> = {}): Instruction => {\n const weightedOptions = WeightedOptionsSchema.parse(options);\n return createWeighted<Instruction>(text, weightedOptions);\n}","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","import { Weighted, WeightedOptions, WeightedOptionsSchema, create as createWeighted } from \"./weighted\";\n\nexport type Trait = Weighted;\n\nexport const create = (text: string, options: WeightedOptions = {}): Trait => {\n const weightedOptions = WeightedOptionsSchema.parse(options);\n return createWeighted<Trait>(text, weightedOptions);\n}","import { Content } from \"./items/content\";\nimport { Context } from \"./items/context\";\nimport { Instruction } from \"./items/instruction\";\nimport { Section } from \"./items/section\";\n\nexport interface Prompt {\n persona?: Section<Instruction>;\n instructions: Section<Instruction>;\n contents?: Section<Content>;\n contexts?: Section<Context>;\n}\n\nexport const create = ({\n persona,\n instructions,\n contents,\n contexts,\n}: {\n persona?: Section<Instruction>,\n instructions: Section<Instruction>,\n contents?: Section<Content>,\n contexts?: Section<Context>\n}): Prompt => {\n\n return {\n persona,\n instructions,\n contents,\n contexts,\n }\n}","import { SectionSeparator } from \"formatter\";\n\nimport { FormatOptions } from \"formatter\";\n\nexport const DEFAULT_CHARACTER_ENCODING = \"utf8\";\nexport const LIBRARY_NAME = \"riotprompt\";\n\nexport const DEFAULT_PERSONA_ROLE = \"developer\";\n\nexport const DEFAULT_INSTRUCTIONS_AREA_TITLE = \"Instructions\";\nexport const DEFAULT_CONTENTS_AREA_TITLE = \"Contents\";\nexport const DEFAULT_CONTEXT_AREA_TITLE = \"Context\";\n\nexport const DEFAULT_IGNORE_PATTERNS: string[] = [\n \"^\\\\..*\", // Hidden files (e.g., .git, .DS_Store)\n \"\\\\.(jpg|jpeg|png|gif|bmp|svg|webp|ico)$\", // Image files\n \"\\\\.(mp3|wav|ogg|aac|flac)$\", // Audio files\n \"\\\\.(mp4|mov|avi|mkv|webm)$\", // Video files\n \"\\\\.(pdf|doc|docx|xls|xlsx|ppt|pptx)$\", // Document files\n \"\\\\.(zip|tar|gz|rar|7z)$\" // Compressed files\n];\n\nexport const DEFAULT_SECTION_SEPARATOR: SectionSeparator = \"tag\";\nexport const DEFAULT_SECTION_INDENTATION = true;\nexport const DEFAULT_SECTION_TAG = \"section\";\nexport const DEFAULT_SECTION_TITLE_PROPERTY = \"title\";\n\nexport const DEFAULT_FORMAT_OPTIONS: FormatOptions = {\n sectionSeparator: DEFAULT_SECTION_SEPARATOR,\n sectionIndentation: DEFAULT_SECTION_INDENTATION,\n sectionTitleProperty: DEFAULT_SECTION_TITLE_PROPERTY,\n sectionDepth: 0,\n}\n","import { DEFAULT_PERSONA_ROLE } from \"./constants\";\n\nexport type Role = \"user\" | \"assistant\" | \"system\" | \"developer\";\n\nexport type Model = \"gpt-4o\" | \"gpt-4o-mini\" | \"o1-preview\" | \"o1-mini\" | \"o1\" | \"o3-mini\" | \"o1-pro\";\n\nexport interface Message {\n role: Role;\n content: string | string[];\n name?: string;\n}\n\nexport interface Request {\n messages: Message[];\n model: Model;\n\n addMessage(message: Message): void;\n}\n\nexport const getPersonaRole = (model: Model): Role => {\n if (model === \"gpt-4o\" || model === \"gpt-4o-mini\") {\n return \"system\";\n }\n return DEFAULT_PERSONA_ROLE;\n}\n\nexport const createRequest = (model: Model): Request => {\n const messages: Message[] = [];\n\n return {\n model,\n messages,\n addMessage: (message: Message) => {\n messages.push(message);\n }\n }\n}\n","/* eslint-disable no-console */\nimport { LIBRARY_NAME } from \"./constants\";\n\nexport interface Logger {\n name: string;\n debug: (message: string, ...args: any[]) => void;\n info: (message: string, ...args: any[]) => void;\n warn: (message: string, ...args: any[]) => void;\n error: (message: string, ...args: any[]) => void;\n verbose: (message: string, ...args: any[]) => void;\n silly: (message: string, ...args: any[]) => void;\n}\n\nexport const DEFAULT_LOGGER: Logger = {\n name: 'default',\n debug: (message: string, ...args: any[]) => console.debug(message, ...args),\n info: (message: string, ...args: any[]) => console.info(message, ...args),\n warn: (message: string, ...args: any[]) => console.warn(message, ...args),\n error: (message: string, ...args: any[]) => console.error(message, ...args),\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n verbose: (message: string, ...args: any[]) => { },\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n silly: (message: string, ...args: any[]) => { },\n}\n\nexport const wrapLogger = (toWrap: Logger, name?: string): Logger => {\n\n const requiredMethods: (keyof Logger)[] = ['debug', 'info', 'warn', 'error', 'verbose', 'silly'];\n const missingMethods = requiredMethods.filter(method => typeof toWrap[method] !== 'function');\n\n if (missingMethods.length > 0) {\n throw new Error(`Logger is missing required methods: ${missingMethods.join(', ')}`);\n }\n\n const log = (level: keyof Logger, message: string, ...args: any[]) => {\n message = `[${LIBRARY_NAME}] ${name ? `[${name}]` : ''}: ${message}`;\n\n if (level === 'debug') toWrap.debug(message, ...args);\n else if (level === 'info') toWrap.info(message, ...args);\n else if (level === 'warn') toWrap.warn(message, ...args);\n else if (level === 'error') toWrap.error(message, ...args);\n else if (level === 'verbose') toWrap.verbose(message, ...args);\n else if (level === 'silly') toWrap.silly(message, ...args);\n }\n\n return {\n name: 'wrapped',\n debug: (message: string, ...args: any[]) => log('debug', message, ...args),\n info: (message: string, ...args: any[]) => log('info', message, ...args),\n warn: (message: string, ...args: any[]) => log('warn', message, ...args),\n error: (message: string, ...args: any[]) => log('error', message, ...args),\n verbose: (message: string, ...args: any[]) => log('verbose', message, ...args),\n silly: (message: string, ...args: any[]) => log('silly', message, ...args),\n }\n}","export const clean = (obj: any) => {\n return Object.fromEntries(\n Object.entries(obj).filter(([_, v]) => v !== undefined)\n );\n}\n\n//Recursive implementation of jSON.stringify;\nexport const stringifyJSON = function (obj: any, visited: Set<any> = new Set()): string {\n const arrOfKeyVals: string[] = [];\n const arrVals: string[] = [];\n let objKeys: string[] = [];\n\n /*********CHECK FOR PRIMITIVE TYPES**********/\n if (typeof obj === 'number' || typeof obj === 'boolean' || obj === null)\n return '' + obj;\n else if (typeof obj === 'string')\n return '\"' + obj + '\"';\n\n /*********DETECT CIRCULAR REFERENCES**********/\n if (obj instanceof Object && visited.has(obj)) {\n return '\"(circular)\"';\n }\n\n /*********CHECK FOR ARRAY**********/\n else if (Array.isArray(obj)) {\n //check for empty array\n if (obj[0] === undefined)\n return '[]';\n else {\n // Add array to visited before processing its elements\n visited.add(obj);\n obj.forEach(function (el) {\n arrVals.push(stringifyJSON(el, visited));\n });\n return '[' + arrVals + ']';\n }\n }\n /*********CHECK FOR OBJECT**********/\n else if (obj instanceof Object) {\n // Add object to visited before processing its properties\n visited.add(obj);\n //get object keys\n objKeys = Object.keys(obj);\n //set key output;\n objKeys.forEach(function (key) {\n const keyOut = '\"' + key + '\":';\n const keyValOut = obj[key];\n //skip functions and undefined properties\n if (keyValOut instanceof Function || keyValOut === undefined)\n return; // Skip this entry entirely instead of pushing an empty string\n else if (typeof keyValOut === 'string')\n arrOfKeyVals.push(keyOut + '\"' + keyValOut + '\"');\n else if (typeof keyValOut === 'boolean' || typeof keyValOut === 'number' || keyValOut === null)\n arrOfKeyVals.push(keyOut + keyValOut);\n //check for nested objects, call recursively until no more objects\n else if (keyValOut instanceof Object) {\n arrOfKeyVals.push(keyOut + stringifyJSON(keyValOut, visited));\n }\n });\n return '{' + arrOfKeyVals + '}';\n }\n return '';\n};","import { Instruction } from \"riotprompt\";\nimport { z } from \"zod\";\nimport * as Chat from \"./chat\";\nimport { getPersonaRole, Message, Model } from \"./chat\";\nimport { DEFAULT_FORMAT_OPTIONS } from \"./constants\";\nimport { Section } from \"./items/section\";\nimport { Weighted } from \"./items/weighted\";\nimport { DEFAULT_LOGGER, wrapLogger } from \"./logger\";\nimport { Prompt } from \"./prompt\";\nimport { clean, stringifyJSON } from \"./util/general\";\n\nexport const SectionSeparatorSchema = z.enum([\"tag\", \"markdown\"]);\nexport const SectionTitlePropertySchema = z.enum([\"title\", \"name\"]);\n\nexport type SectionSeparator = z.infer<typeof SectionSeparatorSchema>;\nexport type SectionTitleProperty = z.infer<typeof SectionTitlePropertySchema>;\n\n\nexport const FormatOptionsSchema = z.object({\n sectionSeparator: SectionSeparatorSchema,\n sectionIndentation: z.boolean(),\n sectionTitleProperty: SectionTitlePropertySchema,\n sectionTitlePrefix: z.string().optional(),\n sectionTitleSeparator: z.string().optional(),\n sectionDepth: z.number().default(0),\n});\n\nexport type FormatOptions = z.infer<typeof FormatOptionsSchema>;\n\n\nexport const OptionSchema = z.object({\n logger: z.any().optional().default(DEFAULT_LOGGER),\n formatOptions: FormatOptionsSchema.partial().optional().default(DEFAULT_FORMAT_OPTIONS),\n});\n\nexport type Options = z.infer<typeof OptionSchema>;\n\nexport type OptionsParam = Partial<Options>;\n\nexport interface Instance {\n formatPersona: (model: Model, persona: Section<Instruction>) => Message;\n format: <T extends Weighted>(weightedText: T | Section<T>, sectionDepth?: number) => string;\n formatArray: <T extends Weighted>(items: (T | Section<T>)[], sectionDepth?: number) => string;\n formatPrompt: (model: Model, prompt: Prompt) => Chat.Request;\n}\n\n// Type guard to check if an object is a Section\nfunction isSection<T extends Weighted>(obj: T | Section<T>): obj is Section<T> {\n return obj && typeof obj === 'object' && 'items' in obj && Array.isArray((obj as Section<T>).items);\n}\n\n// Type guard to check if an object is a Section\nfunction isWeighted<T extends Weighted>(obj: T | Section<T>): obj is T {\n return obj && typeof obj === 'object' && 'text' in obj;\n}\n\n\nexport const create = (formatterOptions?: OptionsParam): Instance => {\n const options: Required<Options> = OptionSchema.parse(formatterOptions || {}) as Required<Options>;\n\n const logger = wrapLogger(options.logger, 'Formatter');\n\n let formatOptions: FormatOptions = DEFAULT_FORMAT_OPTIONS;\n if (options?.formatOptions) {\n formatOptions = {\n ...formatOptions,\n ...clean(options.formatOptions),\n };\n }\n\n const formatPersona = (model: Model, persona: Section<Instruction>): Message => {\n logger.silly(`Formatting persona`);\n if (persona) {\n const formattedPersona = formatSection(persona);\n\n return {\n role: getPersonaRole(model),\n content: `${formattedPersona}`,\n }\n } else {\n throw new Error(\"Persona is required\");\n }\n }\n\n const format = <T extends Weighted>(\n item: T | Section<T>,\n sectionDepth?: number,\n ): string => {\n logger.silly(`Formatting ${isSection(item) ? \"section\" : \"item\"} Item: %s`, stringifyJSON(item));\n const currentSectionDepth = sectionDepth ?? formatOptions.sectionDepth;\n logger.silly(`\\t\\tCurrent section depth: ${currentSectionDepth}`);\n\n let result: string = \"\";\n if (isSection(item)) {\n result = formatSection(item, currentSectionDepth + 1);\n } else if (isWeighted(item)) {\n result = item.text;\n } else {\n //If the item is neither a section nor a weighted item, it is empty.\n result = '';\n }\n return result;\n }\n\n const formatSection = <T extends Weighted>(section: Section<T>, sectionDepth?: number): string => {\n logger.silly(`Formatting section`);\n const currentSectionDepth = sectionDepth ?? formatOptions.sectionDepth;\n logger.silly(`\\t\\tCurrent section depth: ${currentSectionDepth}`);\n\n if (section) {\n const formattedItems = section.items.map(item => format(item, currentSectionDepth)).join(\"\\n\\n\");\n\n if (formatOptions.sectionSeparator === \"tag\") {\n return `<${section.title ?? \"section\"}>\\n${formattedItems}\\n</${section.title ?? \"section\"}>`;\n } else {\n // Use the current section depth for heading level\n const headingLevel = currentSectionDepth;\n const hashes = '#'.repeat(headingLevel);\n logger.silly(`\\t\\tHeading level: ${headingLevel}`);\n logger.silly(`\\t\\tSection title: ${section.title}`);\n return `${hashes} ${formatOptions.sectionTitlePrefix ? `${formatOptions.sectionTitlePrefix} ${formatOptions.sectionTitleSeparator} ` : \"\"}${section.title}\\n\\n${formattedItems}`;\n }\n } else {\n return '';\n }\n }\n\n // Helper function to format arrays of items or sections\n const formatArray = <T extends Weighted>(\n items: (T | Section<T>)[],\n sectionDepth?: number\n ): string => {\n logger.silly(`Formatting array`);\n const currentSectionDepth = sectionDepth ?? formatOptions.sectionDepth;\n return items.map(item => format(item, currentSectionDepth)).join(\"\\n\\n\");\n }\n\n const formatPrompt = (model: Model, prompt: Prompt): Chat.Request => {\n logger.silly('Formatting prompt');\n const chatRequest: Chat.Request = Chat.createRequest(model);\n\n if (prompt.persona) {\n [prompt.persona].forEach((persona: Section<Instruction>) => {\n chatRequest.addMessage(formatPersona(model, persona));\n });\n }\n\n let formattedAreas: string = formatSection(prompt.instructions) + '\\n\\n';\n\n if (prompt.contents) {\n formattedAreas += formatSection(prompt.contents) + '\\n\\n';\n }\n\n if (prompt.contexts) {\n formattedAreas += formatSection(prompt.contexts) + '\\n\\n';\n }\n\n chatRequest.addMessage({\n role: \"user\",\n content: formattedAreas,\n });\n\n return chatRequest;\n }\n\n return {\n formatPersona,\n format,\n formatPrompt,\n formatArray,\n }\n}\n","import { create as createSection, Section, SectionOptions, SectionOptionsSchema } from '../items/section';\nimport { create as createWeighted, Weighted, WeightedOptionsSchema } from '../items/weighted';\n\nexport const parseMarkdown = async <T extends Weighted>(\n input: string | Buffer,\n options: Partial<SectionOptions> = {}\n): Promise<Section<T>> => {\n\n // Dynamic import for marked (ES module)\n const { marked } = await import('marked');\n\n let markdownContent;\n if (typeof input === 'string') {\n markdownContent = input;\n } else {\n markdownContent = input.toString();\n }\n\n const sectionOptions = SectionOptionsSchema.parse(options);\n\n // Use marked.lexer to get tokens without full parsing/rendering\n const tokens = marked.lexer(markdownContent);\n\n // Create the main section (with a Title from the options)\n const mainSection = createSection<T>(sectionOptions);\n\n // Track sections at each depth level\n const sectionStack: Section<T>[] = [mainSection];\n\n // Set if we've seen the first token\n let isFirstToken = true;\n\n // Set the item options\n const itemOptions = WeightedOptionsSchema.parse({\n ...sectionOptions,\n weight: sectionOptions.itemWeight,\n });\n\n for (const token of tokens) {\n switch (token.type) {\n case 'heading': {\n const depth = token.depth;\n\n // If this is the first token and it's a heading, use it as the main section title\n if (isFirstToken) {\n mainSection.title = token.text;\n isFirstToken = false;\n break;\n }\n\n isFirstToken = false;\n\n // Create a new section with this heading\n const newSection = createSection<T>({ ...sectionOptions, title: token.text });\n\n // Ensure the section stack has the right size based on this heading's depth\n // (e.g., a depth-2 heading should be added to the depth-1 section)\n // We need to ensure the stack length is exactly depth, not just less than or equal to depth\n while (sectionStack.length > depth && sectionStack.length > 1) {\n sectionStack.pop();\n }\n\n // Make sure we're at the right level for this heading\n // If we stay at the same heading level (e.g., two h2s in sequence),\n // we need to pop once more to get to the parent level\n if (sectionStack.length === depth && sectionStack.length > 1) {\n sectionStack.pop();\n }\n\n // Add new section to its parent\n const parentSection = sectionStack[sectionStack.length - 1];\n parentSection.add(newSection, itemOptions);\n\n // Push this section onto the stack\n sectionStack.push(newSection);\n break;\n }\n\n case 'paragraph': {\n isFirstToken = false;\n const instruction: T = createWeighted<T>(token.text, itemOptions);\n const currentSection = sectionStack[sectionStack.length - 1];\n currentSection.add(instruction, itemOptions);\n break;\n }\n\n case 'list': {\n isFirstToken = false;\n // Convert list items to instructions\n const listInstructionContent = token.items.map((item: any) => `- ${item.text}`).join('\\n');\n const listInstruction: T = createWeighted<T>(listInstructionContent, itemOptions);\n const currentSection = sectionStack[sectionStack.length - 1];\n currentSection.add(listInstruction, itemOptions);\n break;\n }\n\n case 'code': {\n isFirstToken = false;\n // Represent code blocks as instructions\n const codeInstruction: T = createWeighted<T>(`\\`\\`\\`${token.lang || ''}\\n${token.text}\\n\\`\\`\\``, itemOptions);\n const currentSection = sectionStack[sectionStack.length - 1];\n currentSection.add(codeInstruction, itemOptions);\n break;\n }\n\n case 'space':\n // Usually ignore space tokens between block elements\n break;\n\n default: {\n isFirstToken = false;\n // Treat other block tokens' text as instructions for robustness\n if ('text' in token && token.text) {\n const fallbackInstruction: T = createWeighted<T>(token.text, itemOptions);\n const currentSection = sectionStack[sectionStack.length - 1];\n currentSection.add(fallbackInstruction, itemOptions);\n }\n break;\n }\n }\n }\n return mainSection;\n}\n","import { create as createSection, Section, SectionOptions, SectionOptionsSchema } from '../items/section';\nimport { create as createWeighted, Weighted, WeightedOptionsSchema } from '../items/weighted';\n\nexport const parseText = <T extends Weighted>(\n input: string | Buffer,\n options: Partial<SectionOptions> = {}\n): Section<T> => {\n\n let text;\n if (typeof input === 'string') {\n text = input;\n } else {\n text = input.toString();\n }\n\n const sectionOptions = SectionOptionsSchema.parse(options);\n\n // Set the item options\n const itemOptions = WeightedOptionsSchema.parse({\n ...sectionOptions,\n weight: sectionOptions.itemWeight,\n });\n\n // Split the text on newlines\n const lines = text.split(/\\r?\\n/).filter(line => line.trim().length > 0);\n\n // Create the main section with the supplied title\n const mainSection = createSection<T>(sectionOptions);\n\n for (const line of lines) {\n const instruction: T = createWeighted<T>(line, itemOptions);\n mainSection.add(instruction, itemOptions);\n }\n\n return mainSection;\n}\n","import { DEFAULT_CHARACTER_ENCODING } from \"../constants\";\n\n// Heuristic to check for Markdown syntax. This is not a full parser.\n// It looks for common Markdown patterns.\nconst markdownRegex = /^(#+\\s|\\*\\s|-\\s|\\+\\s|>\\s|\\[.*\\]\\(.*\\)|```|~~~|---\\\\s*$)/m;\n\n/**\n * Inspects a string to see if it likely contains Markdown syntax.\n *\n * @param input The string or Buffer content to inspect.\n * @returns True if Markdown syntax is suspected, false otherwise.\n */\nexport function isMarkdown(input: string | Buffer): boolean {\n if (input == null) {\n return false;\n }\n // Convert Buffer to string if necessary\n const content = typeof input === 'string' ? input : input.toString(DEFAULT_CHARACTER_ENCODING);\n if (!content || content.trim() === '') {\n return false; // Empty string is not considered Markdown\n }\n\n // Check for common Markdown patterns in the entire content\n if (markdownRegex.test(content)) {\n return true;\n }\n\n // Fallback: Check for a high prevalence of Markdown-like list/header starters\n // or thematic breaks, or code blocks.\n // We'll consider up to the first ~2000 characters, roughly equivalent to the byte check.\n const effectiveContent = content.length > 2000 ? content.substring(0, 2000) : content;\n const lines = effectiveContent.split('\\n');\n let markdownFeatureCount = 0;\n const featurePatterns = [\n /^#+\\s+.+/, // Headers (e.g., # Heading)\n /^\\s*[*+-]\\s+.+/, // List items (e.g., * item, - item, + item)\n /^\\s*>\\s+.+/, // Blockquotes (e.g., > quote)\n /\\[.+\\]\\(.+\\)/, // Links (e.g., [text](url))\n /!\\[.+\\]\\(.+\\)/, // Images (e.g., ![alt](src))\n /`{1,3}[^`]+`{1,3}/, // Inline code (e.g., `code`) or code blocks (```code```)\n /^\\s*_{3,}\\s*$/, // Thematic breaks (e.g., ---, ***, ___)\n /^\\s*-{3,}\\s*$/,\n /^\\s*\\*{3,}\\s*$/\n ];\n\n for (const line of lines) {\n // Stop checking if we have already found enough features to be confident.\n // This is a small optimization for very long inputs that are clearly markdown early on.\n if (markdownFeatureCount >= 2 && lines.length > 10) { // Heuristic threshold\n const significantLineCountEarly = Math.min(lines.indexOf(line) + 1, 20);\n if (significantLineCountEarly > 0 && markdownFeatureCount / significantLineCountEarly > 0.1) {\n return true;\n }\n }\n\n for (const pattern of featurePatterns) {\n if (pattern.test(line.trim())) {\n markdownFeatureCount++;\n break; // Count each line only once\n }\n }\n }\n\n // If more than 5% of the first few lines (up to 20 lines or all lines if fewer)\n // show markdown features, or if there are at least 2 distinct features in short texts,\n // consider it Markdown.\n const significantLineCount = Math.min(lines.length, 20);\n if (significantLineCount > 0) {\n // Calculate the exact threshold percentage\n const thresholdPercentage = markdownFeatureCount / significantLineCount;\n\n // Check against the 5% threshold (0.05)\n // Using >= 0.05 exactly matches 5%, > 0.05 requires more than 5%\n if (thresholdPercentage >= 0.05 + 0.0001) { // Adding a small epsilon to ensure exactly 5% passes but just below fails\n return true;\n }\n\n // Other conditions for returning true\n if ((markdownFeatureCount >= 1 && significantLineCount <= 5) || markdownFeatureCount >= 2) {\n return true;\n }\n }\n\n return false;\n}\n\n// Example usage (optional, for testing):\n// function testIsMarkdownString() {\n// console.log('--- Testing isMarkdownString ---');\n// const markdown1 = '# Hello World\\\\nThis is a test.';\n// console.log(`Test 1 (Header): \"${markdown1.substring(0,10)}...\" -> ${isMarkdownString(markdown1)}`); // true\n\n// const markdown2 = '* Item 1\\\\n* Item 2';\n// console.log(`Test 2 (List): \"${markdown2.substring(0,10)}...\" -> ${isMarkdownString(markdown2)}`); // true\n\n// const markdown3 = '[Google](https://google.com)';\n// console.log(`Test 3 (Link): \"${markdown3.substring(0,15)}...\" -> ${isMarkdownString(markdown3)}`); // true\n\n// const markdown4 = '> This is a quote.';\n// console.log(`Test 4 (Blockquote): \"${markdown4.substring(0,10)}...\" -> ${isMarkdownString(markdown4)}`); // true\n\n// const markdown5 = '```javascript\\\\nconsole.log(\"hello\");\\\\n```';\n// console.log(`Test 5 (Code block): \"${markdown5.substring(0,15)}...\" -> ${isMarkdownString(markdown5)}`); // true\n\n// const text1 = 'This is a plain text string.';\n// console.log(`Test 6 (Plain text): \"${text1.substring(0,10)}...\" -> ${isMarkdownString(text1)}`); // false\n\n// const text2 = 'hello_world.this_is_a_test_string_with_underscores_but_not_markdown_thematic_break';\n// console.log(`Test 7 (Long non-markdown): \"${text2.substring(0,10)}...\" -> ${isMarkdownString(text2)}`); // false\n\n// const text3 = '<xml><tag>value</tag></xml>';\n// console.log(`Test 8 (XML): \"${text3.substring(0,10)}...\" -> ${isMarkdownString(text3)}`); // false\n\n// const shortMarkdown = '# H';\n// console.log(`Test 9 (Short Markdown): \"${shortMarkdown}\" -> ${isMarkdownString(shortMarkdown)}`); // true\n\n// const shortNonMarkdown = 'Hello';\n// console.log(`Test 10 (Short Non-Markdown): \"${shortNonMarkdown}\" -> ${isMarkdownString(shortNonMarkdown)}`); // false\n\n// const emptyString = '';\n// console.log(`Test 11 (Empty string): \"\" -> ${isMarkdownString(emptyString)}`); // false\n\n// const whitespaceString = ' \\t \\n ';\n// console.log(`Test 12 (Whitespace string): \"${whitespaceString.substring(0,5)}...\" -> ${isMarkdownString(whitespaceString)}`); // false\n\n// const markdownWithManyFeatures = `# Title\\\\n\\\\n* list\\\\n* list2\\\\n\\\\n> quote here\\\\n\\\\n\\`\\`\\`\\\\ncode\\\\n\\`\\`\\`\\\\n\\\\nnormal text paragraph with a [link](url).\\n---\\nAnother paragraph.\\nThis is just a test string to see how it performs with multiple markdown features present.\\nHello world this is a very long line that does not contain any markdown syntax at all, it is just plain text that goes on and on.\\n* Another list item\\n* And another one\\n# Another Header\\n## Subheader\\nThis is fun.\\nOkay I think this is enough.\\nFinal line.\\nAnother final line.\\nOne more for good measure.\\nOkay that should be enough lines to test the early exit.\\n`;\n// console.log(`Test 13 (Many Features): \"${markdownWithManyFeatures.substring(0,10)}...\" -> ${isMarkdownString(markdownWithManyFeatures)}`); // true\n\n// const htmlLike = '<div><p>Hello</p><ul><li>item</li></ul></div>';\n// console.log(`Test 14 (HTML-like): \"${htmlLike.substring(0,10)}...\" -> ${isMarkdownString(htmlLike)}`); // false\n\n// console.log('--- End Testing ---');\n// }\n\n// testIsMarkdownString();\n","import { DEFAULT_CHARACTER_ENCODING } from \"../constants\";\n\n// Returns true if the input is likely text, false if likely binary\nexport function isText(input: string | Buffer): boolean {\n let buf: Buffer;\n if (typeof input === 'string') {\n buf = Buffer.from(input, DEFAULT_CHARACTER_ENCODING);\n } else {\n buf = input;\n }\n\n // Empty buffers are considered text\n if (buf.length === 0) {\n return true;\n }\n\n // If the buffer contains null bytes, it's likely binary\n if (buf.includes(0)) {\n return false;\n }\n\n // For UTF-8 encoded text (including emoji and international characters),\n // convert to string first and check if there are non-printable characters\n const str = buf.toString(DEFAULT_CHARACTER_ENCODING);\n\n // Count the number of non-printable ASCII characters (excluding common whitespace)\n let nonPrintable = 0;\n const len = Math.min(str.length, 512); // Only check the first 512 characters for performance\n\n for (let i = 0; i < len; i++) {\n const charCode = str.charCodeAt(i);\n // Allow: tab (9), line feed (10), carriage return (13), printable ASCII (32-126)\n // Also allow all non-ASCII Unicode characters (charCode > 127)\n if (\n charCode !== 9 && charCode !== 10 && charCode !== 13 &&\n (charCode < 32 || (charCode > 126 && charCode < 128))\n ) {\n nonPrintable++;\n }\n }\n\n // If more than 10% of the checked characters are non-printable, consider it binary\n return nonPrintable / len < 0.1;\n}\n","import * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { z } from 'zod';\nimport { ParametersSchema } from './items/parameters';\nimport { Section, SectionOptions, SectionOptionsSchema } from './items/section';\nimport { Weighted } from './items/weighted';\nimport { DEFAULT_LOGGER, wrapLogger } from './logger';\nimport { parseMarkdown } from './parse/markdown';\nimport { parseText } from './parse/text';\nimport { isMarkdown } from './util/markdown';\nimport { isText } from './util/text';\n\nconst OptionsSchema = z.object({\n logger: z.any().optional().default(DEFAULT_LOGGER),\n parameters: ParametersSchema.optional().default({}),\n});\n\nexport type Options = z.infer<typeof OptionsSchema>;\n\nexport type OptionsParam = Partial<Options>;\n\nexport interface Instance {\n parse: <T extends Weighted>(input: string | Buffer, options?: SectionOptions) => Promise<Section<T>>;\n parseFile: <T extends Weighted>(filePath: string, options?: SectionOptions) => Promise<Section<T>>;\n}\n\nexport const create = (parserOptions?: OptionsParam): Instance => {\n const options: Required<Options> = OptionsSchema.parse(parserOptions || {}) as Required<Options>;\n const parameters = options.parameters;\n\n const logger = wrapLogger(options.logger, 'Parser');\n\n const loadOptions = (sectionOptions: Partial<SectionOptions> = {}): SectionOptions => {\n const currentOptions = SectionOptionsSchema.parse(sectionOptions);\n return {\n ...currentOptions,\n parameters: {\n ...parameters,\n ...currentOptions.parameters\n }\n }\n }\n\n const parseFile = async <T extends Weighted>(\n filePath: string,\n options: Partial<SectionOptions> = {}\n ): Promise<Section<T>> => {\n const currentOptions = loadOptions(options);\n try {\n const content = await fs.readFile(filePath, 'utf-8');\n // Only use the filename as title if no title was explicitly provided\n const fileName = path.basename(filePath, path.extname(filePath));\n return await parse(content, {\n ...currentOptions,\n title: currentOptions?.title || fileName\n });\n } catch (error) {\n // Log the error or handle it appropriately\n logger.error(`Error reading or parsing file with marked at ${filePath}:`, error);\n throw new Error(`Failed to parse instructions from ${filePath}: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n /**\n * Reads Markdown content and parses it into a single Section.\n * \n * - If the content starts with a heading, that becomes the title of the returned Section\n * - If no heading at the start, creates a Section with no title\n * - Headers within the content create nested sections based on their depth\n * - All content is organized in a hierarchical structure based on heading levels\n *\n * @param content The content to parse\n * @returns A Section containing all content in a hierarchical structure\n */\n const parse = async <T extends Weighted>(\n content: string | Buffer,\n options: Partial<SectionOptions> = {}\n ): Promise<Section<T>> => {\n const currentOptions = loadOptions(options);\n\n let mainSection: Section<T>;\n if (isMarkdown(content)) {\n mainSection = await parseMarkdown<T>(content, currentOptions);\n } else if (isText(content)) {\n mainSection = parseText<T>(content, currentOptions);\n } else {\n throw new Error(`Unsupported content supplied to parse, riotprompt currently only supports markdown and text`);\n }\n return mainSection;\n }\n\n return {\n parse,\n parseFile\n }\n}","// eslint-disable-next-line no-restricted-imports\nimport * as fs from 'fs';\nimport { glob } from 'glob';\nimport path from 'path';\nimport crypto from 'crypto';\n/**\n * This module exists to isolate filesystem operations from the rest of the codebase.\n * This makes testing easier by avoiding direct fs mocking in jest configuration.\n * \n * Additionally, abstracting storage operations allows for future flexibility - \n * this export utility may need to work with storage systems other than the local filesystem\n * (e.g. S3, Google Cloud Storage, etc).\n */\n\nexport interface Utility {\n exists: (path: string) => Promise<boolean>;\n isDirectory: (path: string) => Promise<boolean>;\n isFile: (path: string) => Promise<boolean>;\n isReadable: (path: string) => Promise<boolean>;\n isWritable: (path: string) => Promise<boolean>;\n isFileReadable: (path: string) => Promise<boolean>;\n isDirectoryWritable: (path: string) => Promise<boolean>;\n isDirectoryReadable: (path: string) => Promise<boolean>;\n createDirectory: (path: string) => Promise<void>;\n readFile: (path: string, encoding: string) => Promise<string>;\n readStream: (path: string) => Promise<fs.ReadStream>;\n writeFile: (path: string, data: string | Buffer, encoding: string) => Promise<void>;\n forEachFileIn: (directory: string, callback: (path: string) => Promise<void>, options?: { pattern: string, limit?: number }) => Promise<void>;\n hashFile: (path: string, length: number) => Promise<string>;\n listFiles: (directory: string) => Promise<string[]>;\n}\n\nexport const create = (params: { log?: (message: string, ...args: any[]) => void }): Utility => {\n\n // eslint-disable-next-line no-console\n const log = params.log || console.log;\n\n const exists = async (path: string): Promise<boolean> => {\n try {\n await fs.promises.stat(path);\n return true;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error: any) {\n return false;\n }\n }\n\n const isDirectory = async (path: string): Promise<boolean> => {\n const stats = await fs.promises.stat(path);\n if (!stats.isDirectory()) {\n log(`${path} is not a directory`);\n return false;\n }\n return true;\n }\n\n const isFile = async (path: string): Promise<boolean> => {\n const stats = await fs.promises.stat(path);\n if (!stats.isFile()) {\n log(`${path} is not a file`);\n return false;\n }\n return true;\n }\n\n const isReadable = async (path: string): Promise<boolean> => {\n try {\n await fs.promises.access(path, fs.constants.R_OK);\n } catch (error: any) {\n log(`${path} is not readable: %s %s`, error.message, error.stack);\n return false;\n }\n return true;\n }\n\n const isWritable = async (path: string): Promise<boolean> => {\n try {\n await fs.promises.access(path, fs.constants.W_OK);\n } catch (error: any) {\n log(`${path} is not writable: %s %s`, error.message, error.stack);\n return false;\n }\n return true;\n }\n\n const isFileReadable = async (path: string): Promise<boolean> => {\n return await exists(path) && await isFile(path) && await isReadable(path);\n }\n\n const isDirectoryWritable = async (path: string): Promise<boolean> => {\n return await exists(path) && await isDirectory(path) && await isWritable(path);\n }\n\n const isDirectoryReadable = async (path: string): Promise<boolean> => {\n return await exists(path) && await isDirectory(path) && await isReadable(path);\n }\n\n const createDirectory = async (path: string): Promise<void> => {\n try {\n await fs.promises.mkdir(path, { recursive: true });\n } catch (mkdirError: any) {\n throw new Error(`Failed to create output directory ${path}: ${mkdirError.message} ${mkdirError.stack}`);\n }\n }\n\n const readFile = async (path: string, encoding: string): Promise<string> => {\n return await fs.promises.readFile(path, { encoding: encoding as BufferEncoding });\n }\n\n const writeFile = async (path: string, data: string | Buffer, encoding: string): Promise<void> => {\n await fs.promises.writeFile(path, data, { encoding: encoding as BufferEncoding });\n }\n\n const forEachFileIn = async (\n directory: string,\n callback: (file: string) => Promise<void>,\n options: { pattern: string | string[], limit?: number } = { pattern: '*.*' },\n ): Promise<void> => {\n try {\n let filesProcessed = 0;\n const files = await glob(options.pattern, { cwd: directory, nodir: true });\n for (const file of files) {\n await callback(path.join(directory, file));\n filesProcessed++;\n if (options.limit && filesProcessed >= options.limit) {\n log(`Reached limit of ${options.limit} files, stopping`);\n break;\n }\n }\n } catch (err: any) {\n throw new Error(`Failed to glob pattern ${options.pattern} in ${directory}: ${err.message}`);\n }\n }\n\n const readStream = async (path: string): Promise<fs.ReadStream> => {\n return fs.createReadStream(path);\n }\n\n const hashFile = async (path: string, length: number): Promise<string> => {\n const file = await readFile(path, 'utf8');\n return crypto.createHash('sha256').update(file).digest('hex').slice(0, length);\n }\n\n const listFiles = async (directory: string): Promise<string[]> => {\n return await fs.promises.readdir(directory);\n }\n\n return {\n exists,\n isDirectory,\n isFile,\n isReadable,\n isWritable,\n isFileReadable,\n isDirectoryWritable,\n isDirectoryReadable,\n createDirectory,\n readFile,\n readStream,\n writeFile,\n forEachFileIn,\n hashFile,\n listFiles,\n };\n}","import path from \"path\";\nimport { z } from \"zod\";\nimport { DEFAULT_IGNORE_PATTERNS } from \"./constants\";\nimport { ParametersSchema } from \"./items/parameters\";\nimport { SectionOptions, SectionOptionsSchema } from \"./items/section\";\nimport { DEFAULT_LOGGER, wrapLogger } from \"./logger\";\nimport { Section, Weighted, createSection } from \"./riotprompt\";\nimport * as Storage from \"./util/storage\";\n\nconst OptionsSchema = z.object({\n logger: z.any().optional().default(DEFAULT_LOGGER),\n ignorePatterns: z.array(z.string()).optional().default(DEFAULT_IGNORE_PATTERNS),\n parameters: ParametersSchema.optional().default({}),\n});\n\nexport type Options = z.infer<typeof OptionsSchema>;\n\nexport type OptionsParam = Partial<Options>;\n\nexport interface Instance {\n load: <T extends Weighted>(contextDirectories?: string[], options?: SectionOptions) => Promise<Section<T>[]>;\n}\n\n/**\n * Extracts the first header from Markdown text\n * @param markdownText The Markdown text to parse\n * @returns The first header found in the Markdown or null if none is found\n */\nexport function extractFirstHeader(markdownText: string): string | null {\n // Regular expression to match Markdown headers (# Header, ## Header, etc.)\n const headerRegex = /^(#{1,6})\\s+(.+?)(?:\\n|$)/m;\n const match = markdownText.match(headerRegex);\n\n if (match && match[2]) {\n return match[2].trim();\n }\n\n return null;\n}\n\n/**\n * Removes the first header from Markdown text\n * @param markdownText The Markdown text to process\n * @returns The Markdown text without the first header\n */\nexport function removeFirstHeader(markdownText: string): string {\n // Regular expression to match Markdown headers (# Header, ## Header, etc.)\n const headerRegex = /^(#{1,6})\\s+(.+?)(?:\\n|$)/m;\n const match = markdownText.match(headerRegex);\n\n if (match) {\n return markdownText.replace(headerRegex, '').trim();\n }\n\n return markdownText;\n}\n\nexport const create = (loaderOptions?: OptionsParam): Instance => {\n const options: Required<Options> = OptionsSchema.parse(loaderOptions || {}) as Required<Options>;\n const parameters = options.parameters;\n\n const logger = wrapLogger(options.logger, 'Loader');\n const ignorePatterns = options.ignorePatterns;\n\n const loadOptions = (sectionOptions: Partial<SectionOptions> = {}): SectionOptions => {\n const currentOptions = SectionOptionsSchema.parse(sectionOptions);\n return {\n ...currentOptions,\n parameters: {\n ...parameters,\n ...currentOptions.parameters\n }\n }\n }\n\n /**\n * Loads context from the provided directories and returns instruction sections\n * \n * @param contextDirectories Directories containing context files\n * @returns Array of instruction sections loaded from context directories\n */\n const load = async<T extends Weighted>(\n contextDirectories: string[] = [],\n options: Partial<SectionOptions> = {}\n ): Promise<Section<T>[]> => {\n const sectionOptions = loadOptions(options);\n\n logger.debug(`Loading context from ${contextDirectories}`);\n const contextSections: Section<T>[] = [];\n\n if (!contextDirectories || contextDirectories.length === 0) {\n logger.debug(`No context directories provided, returning empty context`);\n return contextSections;\n }\n\n const storage = Storage.create({ log: logger.debug });\n\n // Add context sections from each directory\n for (const contextDir of contextDirectories) {\n try {\n const dirName = path.basename(contextDir);\n logger.debug(`Processing context directory ${dirName}`);\n let mainContextSection: Section<T>;\n\n // First check if there's a context.md file\n const contextFile = path.join(contextDir, 'context.md');\n\n if (await storage.exists(contextFile)) {\n logger.debug(`Found context.md file in ${contextDir}`);\n const mainContextContent = await storage.readFile(contextFile, 'utf8');\n // Extract the first header from the Markdown content\n const firstHeader = extractFirstHeader(mainContextContent);\n\n // Use the header from context.md as the section title, or fallback to directory name\n const sectionTitle = firstHeader || dirName;\n mainContextSection = createSection<T>({ ...sectionOptions, title: sectionTitle });\n\n // Add content without the header\n if (firstHeader) {\n mainContextSection.add(removeFirstHeader(mainContextContent), { ...sectionOptions });\n } else {\n mainContextSection.add(mainContextContent, { ...sectionOptions });\n }\n } else {\n // If no context.md exists, use directory name as title\n mainContextSection = createSection<T>({ ...sectionOptions, title: dirName });\n }\n\n // Get all other files in the directory\n const files = await storage.listFiles(contextDir);\n const ignorePatternsRegex = ignorePatterns.map(pattern => new RegExp(pattern, 'i'));\n\n const filteredFiles = files.filter(file =>\n !ignorePatternsRegex.some(regex => regex.test(file))\n );\n\n for (const file of filteredFiles) {\n // Skip the context.md file as it's already processed\n if (file === 'context.md') continue;\n\n logger.debug(`Processing file ${file} in ${contextDir}`);\n const filePath = path.join(contextDir, file);\n if (await storage.isFile(filePath)) {\n const fileContent = await storage.readFile(filePath, 'utf8');\n let sectionName = file;\n let contentToAdd = fileContent;\n\n // Extract header if it exists\n if (file.endsWith('.md')) {\n const fileHeader = extractFirstHeader(fileContent);\n if (fileHeader) {\n sectionName = fileHeader;\n // Remove the header from the content\n contentToAdd = removeFirstHeader(fileContent);\n }\n }\n\n // Create a subsection with the extracted name\n const fileSection = createSection<T>({ ...sectionOptions, title: sectionName });\n fileSection.add(contentToAdd, { ...sectionOptions });\n\n // Add this file section to the main context section\n mainContextSection.add(fileSection as unknown as T, { ...sectionOptions });\n }\n }\n\n contextSections.push(mainContextSection);\n } catch (error) {\n logger.error(`Error processing context directory ${contextDir}: ${error}`);\n }\n }\n\n return contextSections;\n }\n\n\n return {\n load\n }\n}\n","import path from 'path';\nimport { z } from 'zod';\nimport { ParametersSchema } from './items/parameters';\nimport { SectionOptions, SectionOptionsSchema } from './items/section';\nimport { DEFAULT_LOGGER, wrapLogger } from './logger';\nimport { Formatter, Parser, Section, Weighted } from './riotprompt';\nimport * as Storage from './util/storage';\n\nconst OptionsSchema = z.object({\n logger: z.any().optional().default(DEFAULT_LOGGER),\n configDirs: z.array(z.string()).default(['./overrides']),\n overrides: z.boolean().default(false),\n parameters: ParametersSchema.optional().default({}),\n});\n\nexport type Options = z.infer<typeof OptionsSchema>;\n\nexport type OptionsParam = Partial<Options>;\n\nexport interface Instance {\n customize: <T extends Weighted>(overrideFile: string, section: Section<T>, sectionOptions?: SectionOptions) => Promise<Section<T>>;\n override: <T extends Weighted>(overrideFile: string, section: Section<T>, sectionOptions?: SectionOptions) =>\n Promise<{ override?: Section<T>, prepends: Section<T>[], appends: Section<T>[] }>;\n}\n\nexport const create = (overrideOptions: OptionsParam = {}): Instance => {\n const options: Required<Options> = OptionsSchema.parse(overrideOptions) as Required<Options>;\n\n const parameters = options.parameters;\n\n const logger = wrapLogger(options?.logger, 'Override');\n const storage = Storage.create({ log: logger.debug });\n\n const loadOptions = (sectionOptions: Partial<SectionOptions> = {}): SectionOptions => {\n const currentOptions = SectionOptionsSchema.parse(sectionOptions);\n return {\n ...currentOptions,\n parameters: {\n ...parameters,\n ...currentOptions.parameters\n }\n }\n }\n\n const override = async <T extends Weighted>(\n overrideFile: string,\n section: Section<T>,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<{ override?: Section<T>, prepends: Section<T>[], appends: Section<T>[] }> => {\n const currentSectionOptions = loadOptions(sectionOptions);\n\n const response: { override?: Section<T>, prepends: Section<T>[], appends: Section<T>[] } = {\n prepends: [],\n appends: []\n };\n\n // Process directories in order (closest to furthest)\n for (let i = 0; i < options.configDirs.length; i++) {\n const configDir = options.configDirs[i];\n const baseFile = path.join(configDir, overrideFile);\n const preFile = baseFile.replace('.md', '-pre.md');\n const postFile = baseFile.replace('.md', '-post.md');\n\n // Check for prepend files (-pre.md)\n if (await storage.exists(preFile)) {\n logger.silly('Found pre file %s (layer %d)', preFile, i + 1);\n const parser = Parser.create({ logger });\n const prependSection = await parser.parseFile<T>(preFile, currentSectionOptions);\n response.prepends.push(prependSection);\n }\n\n // Check for append files (-post.md)\n if (await storage.exists(postFile)) {\n logger.silly('Found post file %s (layer %d)', postFile, i + 1);\n const parser = Parser.create({ logger });\n const appendSection = await parser.parseFile<T>(postFile, currentSectionOptions);\n response.appends.push(appendSection);\n }\n\n // Check for complete override files - use the first (closest) one found\n if (!response.override && await storage.exists(baseFile)) {\n logger.silly('Found base file %s (layer %d)', baseFile, i + 1);\n if (options.overrides) {\n logger.warn('WARNING: Core directives are being overwritten by custom configuration at layer %d', i + 1);\n const parser = Parser.create({ logger });\n response.override = await parser.parseFile<T>(baseFile, currentSectionOptions);\n } else {\n logger.error('ERROR: Core directives are being overwritten by custom configuration');\n throw new Error('Core directives are being overwritten by custom configuration, but overrides are not enabled. Please enable --overrides to use this feature.');\n }\n }\n }\n\n return response;\n }\n\n const customize = async <T extends Weighted>(\n overrideFile: string,\n section: Section<T>,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Section<T>> => {\n const currentSectionOptions = loadOptions(sectionOptions);\n\n const { override: overrideContent, prepends, appends }: { override?: Section<T>, prepends: Section<T>[], appends: Section<T>[] } = await override(overrideFile, section, currentSectionOptions);\n let finalSection: Section<T> = section;\n\n if (overrideContent) {\n if (options.overrides) {\n logger.warn('Override found, replacing content from file %s', overrideContent);\n finalSection = overrideContent;\n } else {\n logger.error('ERROR: Core directives are being overwritten by custom configuration');\n throw new Error('Core directives are being overwritten by custom configuration, but overrides are not enabled. Please enable --overrides to use this feature.');\n }\n }\n\n // Apply prepends in order (closest layer first)\n for (const prepend of prepends) {\n logger.silly('Prepend found, adding to content from file %s', prepend);\n finalSection = finalSection.prepend(prepend);\n }\n\n // Apply appends in reverse order (furthest layers first, then closest)\n for (const append of appends.reverse()) {\n logger.silly('Append found, adding to content from file %s', append);\n finalSection = finalSection.append(append);\n }\n\n const formatter = Formatter.create({ logger });\n logger.silly('Final section %s:\\n\\n%s\\n\\n', logger.name, formatter.format(finalSection));\n\n return finalSection;\n }\n\n return {\n override,\n customize,\n }\n}","import path from \"path\";\nimport { z } from \"zod\";\nimport { ParametersSchema } from \"./items/parameters\";\nimport { SectionOptions, SectionOptionsSchema } from \"./items/section\";\nimport { DEFAULT_LOGGER, wrapLogger } from \"./logger\";\nimport { Content, Context, createPrompt, createSection, Instruction, Loader, Override, Parser, Prompt, Section, Weighted } from \"./riotprompt\";\n\nconst OptionSchema = z.object({\n logger: z.any().optional().default(DEFAULT_LOGGER),\n basePath: z.string(),\n overridePaths: z.array(z.string()).optional().default([\"./\"]),\n overrides: z.boolean().optional().default(false),\n parameters: ParametersSchema.optional().default({}),\n});\n\nexport type Options = z.infer<typeof OptionSchema>;\n\nexport type OptionsParam = Required<Pick<Options, 'basePath'>> & Partial<Omit<Options, 'basePath'>>;\n\nexport interface Instance {\n addPersonaPath(contentPath: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n addContextPath(contentPath: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n addInstructionPath(contentPath: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n addContentPath(contentPath: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n addContent(content: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n addContext(context: string, sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n loadContext(contextDirectories: string[], sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n loadContent(contentDirectories: string[], sectionOptions?: Partial<SectionOptions>): Promise<Instance>;\n build(): Promise<Prompt>;\n}\n\nexport const create = (builderOptions: OptionsParam): Instance => {\n const options: Required<Options> = OptionSchema.parse(builderOptions) as Required<Options>;\n\n const logger = wrapLogger(options.logger, 'Builder');\n const parser = Parser.create({ logger });\n const override = Override.create({\n logger, configDirs: options.overridePaths || [\"./\"],\n overrides: options.overrides || false\n });\n const loader = Loader.create({ logger });\n\n const personaSection: Section<Instruction> = createSection({ title: \"Persona\" });\n const contextSection: Section<Context> = createSection({ title: \"Context\" });\n const instructionSection: Section<Instruction> = createSection({ title: \"Instruction\" });\n const contentSection: Section<Content> = createSection({ title: \"Content\" });\n const parameters = options.parameters;\n\n\n const instance: Partial<Instance> = {}\n\n const loadOptions = (sectionOptions: Partial<SectionOptions> = {}): SectionOptions => {\n const currentOptions = SectionOptionsSchema.parse(sectionOptions);\n return {\n ...currentOptions,\n parameters: {\n ...parameters,\n ...currentOptions.parameters\n }\n }\n }\n\n const loadDirectories = async <T extends Weighted>(\n directories: string[],\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Section<T>[]> => {\n const currentOptions = loadOptions(sectionOptions);\n logger.debug(\"Loading directories\", directories);\n const sections: Section<T>[] = await loader.load<T>(directories, currentOptions);\n return sections;\n }\n\n const loadContext = async (\n contextDirectories: string[],\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n const currentOptions = loadOptions(sectionOptions);\n logger.debug('Loading context', contextDirectories);\n const context: Section<Context>[] = await loadDirectories<Context>(contextDirectories, currentOptions);\n contextSection.add(context);\n return instance as Instance;\n }\n instance.loadContext = loadContext;\n\n const loadContent = async (\n contentDirectories: string[],\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n const currentOptions = loadOptions(sectionOptions);\n const content: Section<Content>[] = await loadDirectories<Content>(contentDirectories, currentOptions);\n contentSection.add(content);\n return instance as Instance;\n }\n instance.loadContent = loadContent;\n\n const loadPath = async <T extends Weighted>(\n contentPath: string,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Section<T>> => {\n const currentOptions = loadOptions(sectionOptions);\n const defaultPath = path.join(options.basePath as string, contentPath);\n const section: Section<T> = await parser.parseFile<T>(defaultPath, currentOptions);\n const overrideSection = await override.customize<T>(contentPath, section, currentOptions);\n return overrideSection;\n }\n\n const addPersonaPath = async (\n contentPath: string,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n const currentOptions = loadOptions(sectionOptions);\n const persona: Section<Instruction> = await loadPath<Instruction>(contentPath, currentOptions);\n personaSection.add(persona);\n return instance as Instance;\n }\n instance.addPersonaPath = addPersonaPath;\n\n const addContextPath = async (\n contentPath: string,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n logger.debug(\"Adding context path\", contentPath);\n const currentOptions = loadOptions(sectionOptions);\n const context: Section<Context> = await loadPath<Context>(contentPath, currentOptions);\n contextSection.add(context);\n return instance as Instance;\n }\n instance.addContextPath = addContextPath;\n\n const addInstructionPath = async (\n contentPath: string,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n logger.debug(\"Adding instruction path\", contentPath);\n const currentOptions = loadOptions(sectionOptions);\n const instruction: Section<Instruction> = await loadPath<Instruction>(contentPath, currentOptions);\n instructionSection.add(instruction);\n return instance as Instance;\n }\n instance.addInstructionPath = addInstructionPath;\n\n const addContentPath = async (\n contentPath: string,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n logger.debug(\"Adding content path\", contentPath);\n const currentOptions = loadOptions(sectionOptions);\n const content: Section<Content> = await loadPath<Content>(contentPath, currentOptions);\n contentSection.add(content);\n return instance as Instance;\n }\n instance.addContentPath = addContentPath;\n\n const addContent = async (\n content: string | Buffer,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n logger.debug(\"Adding content\", typeof content);\n const currentOptions = loadOptions(sectionOptions);\n const parsedContentSection: Section<Content> = await parser.parse<Content>(content, currentOptions);\n contentSection.add(parsedContentSection);\n return instance as Instance;\n }\n instance.addContent = addContent;\n\n const addContext = async (\n context: string | Buffer,\n sectionOptions: Partial<SectionOptions> = {}\n ): Promise<Instance> => {\n logger.debug(\"Adding context\", typeof context);\n const currentOptions = loadOptions(sectionOptions);\n const parsedContextSection: Section<Context> = await parser.parse<Context>(context, currentOptions);\n contextSection.add(parsedContextSection);\n return instance as Instance;\n }\n instance.addContext = addContext;\n\n const build = async () => {\n logger.debug(\"Building prompt\", {});\n const prompt = createPrompt({ persona: personaSection, contexts: contextSection, instructions: instructionSection, contents: contentSection });\n return prompt;\n }\n instance.build = build;\n\n return instance as Instance;\n}\n","import crypto from 'crypto';\nimport { DEFAULT_LOGGER, wrapLogger } from \"./logger\";\n\n// ===== TYPE DEFINITIONS =====\n\n/**\n * Dynamic content item with enhanced tracking and lifecycle\n */\nexport interface DynamicContentItem {\n content: string;\n title?: string;\n weight?: number;\n\n // Unique identifier for deduplication\n id?: string;\n\n // Category for grouping\n category?: string;\n\n // Source of context\n source?: string;\n\n // Priority level\n priority?: 'high' | 'medium' | 'low';\n\n // Timestamp\n timestamp?: Date;\n}\n\n/**\n * Tracked context item with metadata\n */\nexport interface TrackedContextItem extends DynamicContentItem {\n id: string;\n hash: string;\n position: number;\n injectedAt: Date;\n}\n\n/**\n * Context statistics\n */\nexport interface ContextStats {\n totalItems: number;\n byCategory: Map<string, number>;\n byPriority: Map<string, number>;\n bySource: Map<string, number>;\n oldestTimestamp?: Date;\n newestTimestamp?: Date;\n}\n\n/**\n * ContextManager tracks and manages dynamically injected context.\n *\n * Features:\n * - Track all injected context with metadata\n * - Deduplication by ID, hash, or content\n * - Category-based organization\n * - Query context state\n * - Context statistics\n *\n * @example\n * ```typescript\n * const manager = new ContextManager();\n *\n * // Track injected context\n * manager.track({\n * id: 'file:main.ts',\n * content: fileContent,\n * title: 'Main File',\n * category: 'source-code'\n * }, 5);\n *\n * // Check for duplicates\n * if (manager.hasContext('file:main.ts')) {\n * console.log('Already provided');\n * }\n *\n * // Query by category\n * const sourceFiles = manager.getByCategory('source-code');\n * ```\n */\nexport class ContextManager {\n private items: Map<string, TrackedContextItem>;\n private hashes: Set<string>;\n private logger: any;\n\n constructor(logger?: any) {\n this.items = new Map();\n this.hashes = new Set();\n this.logger = wrapLogger(logger || DEFAULT_LOGGER, 'ContextManager');\n }\n\n /**\n * Track a context item\n */\n track(item: DynamicContentItem, position: number): void {\n const id = item.id || this.generateId();\n const hash = this.hashContent(item.content);\n\n const trackedItem: TrackedContextItem = {\n ...item,\n id,\n hash,\n position,\n injectedAt: new Date(),\n timestamp: item.timestamp || new Date(),\n priority: item.priority || 'medium',\n };\n\n this.items.set(id, trackedItem);\n this.hashes.add(hash);\n\n this.logger.debug('Tracked context item', { id, category: item.category, position });\n }\n\n /**\n * Check if context with given ID exists\n */\n hasContext(id: string): boolean {\n return this.items.has(id);\n }\n\n /**\n * Check if content with given hash exists\n */\n hasContentHash(content: string): boolean {\n const hash = this.hashContent(content);\n return this.hashes.has(hash);\n }\n\n /**\n * Check if similar content exists (fuzzy match)\n */\n hasSimilarContent(content: string): boolean {\n const normalized = this.normalizeContent(content);\n\n for (const item of this.items.values()) {\n const itemNormalized = this.normalizeContent(item.content || '');\n\n // Exact match\n if (normalized === itemNormalized) {\n return true;\n }\n\n // Substring match (one contains the other)\n if (normalized.includes(itemNormalized) || itemNormalized.includes(normalized)) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Get context item by ID\n */\n get(id: string): TrackedContextItem | undefined {\n return this.items.get(id);\n }\n\n /**\n * Get all tracked context items\n */\n getAll(): TrackedContextItem[] {\n return Array.from(this.items.values());\n }\n\n /**\n * Get context items by category\n */\n getByCategory(category: string): TrackedContextItem[] {\n return this.getAll().filter(item => item.category === category);\n }\n\n /**\n * Get context items by priority\n */\n getByPriority(priority: 'high' | 'medium' | 'low'): TrackedContextItem[] {\n return this.getAll().filter(item => item.priority === priority);\n }\n\n /**\n * Get context items by source\n */\n getBySource(source: string): TrackedContextItem[] {\n return this.getAll().filter(item => item.source === source);\n }\n\n /**\n * Get all categories\n */\n getCategories(): string[] {\n const categories = new Set<string>();\n this.items.forEach(item => {\n if (item.category) {\n categories.add(item.category);\n }\n });\n return Array.from(categories).sort();\n }\n\n /**\n * Get context statistics\n */\n getStats(): ContextStats {\n const byCategory = new Map<string, number>();\n const byPriority = new Map<string, number>();\n const bySource = new Map<string, number>();\n let oldestTimestamp: Date | undefined;\n let newestTimestamp: Date | undefined;\n\n this.items.forEach(item => {\n // Category stats\n if (item.category) {\n byCategory.set(item.category, (byCategory.get(item.category) || 0) + 1);\n }\n\n // Priority stats\n const priority = item.priority || 'medium';\n byPriority.set(priority, (byPriority.get(priority) || 0) + 1);\n\n // Source stats\n if (item.source) {\n bySource.set(item.source, (bySource.get(item.source) || 0) + 1);\n }\n\n // Timestamp stats\n if (item.timestamp) {\n if (!oldestTimestamp || item.timestamp < oldestTimestamp) {\n oldestTimestamp = item.timestamp;\n }\n if (!newestTimestamp || item.timestamp > newestTimestamp) {\n newestTimestamp = item.timestamp;\n }\n }\n });\n\n return {\n totalItems: this.items.size,\n byCategory,\n byPriority,\n bySource,\n oldestTimestamp,\n newestTimestamp,\n };\n }\n\n /**\n * Remove context item by ID\n */\n remove(id: string): boolean {\n const item = this.items.get(id);\n if (item) {\n this.items.delete(id);\n this.hashes.delete(item.hash);\n this.logger.debug('Removed context item', { id });\n return true;\n }\n return false;\n }\n\n /**\n * Clear all tracked context\n */\n clear(): void {\n this.items.clear();\n this.hashes.clear();\n this.logger.debug('Cleared all context');\n }\n\n /**\n * Generate unique ID for context item\n */\n private generateId(): string {\n return `ctx-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n }\n\n /**\n * Hash content for deduplication\n */\n private hashContent(content: string): string {\n return crypto\n .createHash('sha256')\n .update(content)\n .digest('hex')\n .substring(0, 16);\n }\n\n /**\n * Normalize content for comparison\n */\n private normalizeContent(content: string): string {\n return content.replace(/\\s+/g, ' ').trim().toLowerCase();\n }\n}\n\nexport default ContextManager;\n\n","import fs from 'fs/promises';\nimport path from 'path';\nimport { DEFAULT_LOGGER, wrapLogger } from \"./logger\";\nimport type { ConversationMessage, ToolCall } from \"./conversation\";\n\n// ===== TYPE DEFINITIONS =====\n\n/**\n * Log format\n */\nexport type LogFormat = 'json' | 'markdown' | 'jsonl';\n\n/**\n * Log configuration\n */\nexport interface LogConfig {\n enabled: boolean;\n outputPath?: string;\n format?: LogFormat;\n filenameTemplate?: string;\n includeMetadata?: boolean;\n includePrompt?: boolean;\n redactSensitive?: boolean;\n redactPatterns?: RegExp[];\n onSaved?: (path: string) => void;\n onError?: (error: Error) => void;\n}\n\n/**\n * Logged conversation structure\n */\nexport interface LoggedConversation {\n id: string;\n metadata: ConversationLogMetadata;\n prompt?: PromptSnapshot;\n messages: LoggedMessage[];\n summary: ConversationSummary;\n}\n\n/**\n * Conversation metadata for logging\n */\nexport interface ConversationLogMetadata {\n startTime: Date;\n endTime?: Date;\n duration?: number;\n model: string;\n template?: string;\n userContext?: Record<string, any>;\n}\n\n/**\n * Snapshot of prompt configuration\n */\nexport interface PromptSnapshot {\n persona?: string;\n instructions?: string;\n content?: string[];\n context?: string[];\n}\n\n/**\n * Logged message with metadata\n */\nexport interface LoggedMessage {\n index: number;\n timestamp: string;\n role: string;\n content: string | null;\n tool_calls?: ToolCall[];\n tool_call_id?: string;\n metadata?: MessageLogMetadata;\n}\n\n/**\n * Message metadata for logging\n */\nexport interface MessageLogMetadata {\n tokens?: number;\n source?: string;\n latency?: number;\n tool?: string;\n duration?: number;\n success?: boolean;\n [key: string]: any;\n}\n\n/**\n * Conversation summary\n */\nexport interface ConversationSummary {\n totalMessages: number;\n totalTokens?: number;\n toolCallsExecuted: number;\n iterations: number;\n finalOutput?: string;\n success: boolean;\n}\n\n/**\n * Tool call log entry\n */\nexport interface ToolCallLog {\n callId: string;\n toolName: string;\n timestamp: string;\n iteration: number;\n arguments: any;\n result: any;\n duration: number;\n success: boolean;\n error?: string;\n}\n\n// ===== CONVERSATION LOGGER =====\n\n/**\n * ConversationLogger logs conversations to various formats.\n *\n * Features:\n * - Multiple formats (JSON, Markdown, JSONL)\n * - Automatic timestamping\n * - Metadata tracking\n * - Sensitive data redaction\n * - Streaming support (JSONL)\n *\n * @example\n * ```typescript\n * const logger = new ConversationLogger({\n * enabled: true,\n * outputPath: 'logs/conversations',\n * format: 'json',\n * includeMetadata: true\n * });\n *\n * logger.onConversationStart({ model: 'gpt-4o', startTime: new Date() });\n * logger.onMessageAdded(message);\n * const path = await logger.save();\n * ```\n */\nexport class ConversationLogger {\n private config: Required<LogConfig>;\n private conversationId: string;\n private metadata: ConversationLogMetadata;\n private messages: LoggedMessage[];\n private toolCalls: ToolCallLog[];\n private startTime: Date;\n private logger: any;\n private messageIndex: number;\n\n constructor(config: LogConfig, logger?: any) {\n this.config = {\n outputPath: 'logs/conversations',\n format: 'json',\n filenameTemplate: 'conversation-{timestamp}',\n includeMetadata: true,\n includePrompt: false,\n redactSensitive: false,\n redactPatterns: [],\n onSaved: () => {},\n onError: () => {},\n ...config,\n } as Required<LogConfig>;\n\n this.conversationId = this.generateId();\n this.messages = [];\n this.toolCalls = [];\n this.startTime = new Date();\n this.messageIndex = 0;\n this.logger = wrapLogger(logger || DEFAULT_LOGGER, 'ConversationLogger');\n\n this.metadata = {\n startTime: this.startTime,\n model: 'unknown',\n };\n }\n\n /**\n * Start conversation logging\n */\n onConversationStart(metadata: Partial<ConversationLogMetadata>): void {\n this.metadata = {\n ...this.metadata,\n ...metadata,\n startTime: this.startTime,\n };\n\n this.logger.debug('Conversation logging started', { id: this.conversationId });\n }\n\n /**\n * Log a message\n */\n onMessageAdded(message: ConversationMessage, metadata?: MessageLogMetadata): void {\n let content = message.content;\n\n // Redact sensitive data if enabled\n if (this.config.redactSensitive && content && typeof content === 'string') {\n content = this.redactContent(content);\n }\n\n const loggedMessage: LoggedMessage = {\n index: this.messageIndex++,\n timestamp: new Date().toISOString(),\n role: message.role,\n content,\n tool_calls: message.tool_calls,\n tool_call_id: message.tool_call_id,\n metadata,\n };\n\n this.messages.push(loggedMessage);\n\n // For JSONL format, append immediately\n if (this.config.format === 'jsonl') {\n this.appendToJSONL(loggedMessage).catch(this.config.onError);\n }\n }\n\n /**\n * Log a tool call\n */\n onToolCall(\n callId: string,\n toolName: string,\n iteration: number,\n args: any,\n result: any,\n duration: number,\n success: boolean,\n error?: string\n ): void {\n this.toolCalls.push({\n callId,\n toolName,\n timestamp: new Date().toISOString(),\n iteration,\n arguments: args,\n result,\n duration,\n success,\n error,\n });\n }\n\n /**\n * End conversation logging\n */\n onConversationEnd(_summary: ConversationSummary): void {\n this.metadata.endTime = new Date();\n this.metadata.duration = this.metadata.endTime.getTime() - this.startTime.getTime();\n\n this.logger.debug('Conversation logging ended', {\n messages: this.messages.length,\n duration: this.metadata.duration\n });\n }\n\n /**\n * Save conversation to disk\n */\n async save(): Promise<string> {\n if (!this.config.enabled) {\n return '';\n }\n\n try {\n const outputPath = await this.getOutputPath();\n\n switch (this.config.format) {\n case 'json':\n await this.saveAsJSON(outputPath);\n break;\n case 'markdown':\n await this.saveAsMarkdown(outputPath);\n break;\n case 'jsonl':\n // Already saved during execution\n break;\n }\n\n this.config.onSaved(outputPath);\n this.logger.info('Conversation saved', { path: outputPath });\n\n return outputPath;\n } catch (error) {\n this.config.onError(error as Error);\n this.logger.error('Failed to save conversation', { error });\n throw error;\n }\n }\n\n /**\n * Get logged conversation object\n */\n getConversation(): LoggedConversation {\n return {\n id: this.conversationId,\n metadata: this.metadata,\n messages: this.messages,\n summary: {\n totalMessages: this.messages.length,\n toolCallsExecuted: this.toolCalls.length,\n iterations: 0, // Would need to be tracked externally\n success: true,\n },\n };\n }\n\n /**\n * Generate unique conversation ID\n */\n private generateId(): string {\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n const random = Math.random().toString(36).substring(2, 8);\n return `conv-${timestamp}-${random}`;\n }\n\n /**\n * Get output file path\n */\n private async getOutputPath(): Promise<string> {\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n const filename = this.config.filenameTemplate\n .replace('{timestamp}', timestamp)\n .replace('{id}', this.conversationId)\n .replace('{template}', this.metadata.template || 'default');\n\n const ext = this.config.format === 'markdown' ? '.md' : '.json';\n const fullPath = path.join(this.config.outputPath, filename + ext);\n\n // Ensure directory exists\n await fs.mkdir(path.dirname(fullPath), { recursive: true });\n\n return fullPath;\n }\n\n /**\n * Save as JSON\n */\n private async saveAsJSON(outputPath: string): Promise<void> {\n const data: LoggedConversation = {\n id: this.conversationId,\n metadata: this.metadata,\n messages: this.messages,\n summary: {\n totalMessages: this.messages.length,\n toolCallsExecuted: this.toolCalls.length,\n iterations: 0,\n success: true,\n },\n };\n\n await fs.writeFile(outputPath, JSON.stringify(data, null, 2), 'utf-8');\n }\n\n /**\n * Save as Markdown\n */\n private async saveAsMarkdown(outputPath: string): Promise<void> {\n let markdown = `# Conversation Log\\n\\n`;\n markdown += `**ID**: ${this.conversationId}\\n`;\n markdown += `**Started**: ${this.metadata.startTime.toISOString()}\\n`;\n if (this.metadata.duration) {\n markdown += `**Duration**: ${(this.metadata.duration / 1000).toFixed(1)}s\\n`;\n }\n markdown += `**Model**: ${this.metadata.model}\\n`;\n if (this.metadata.template) {\n markdown += `**Template**: ${this.metadata.template}\\n`;\n }\n markdown += `\\n## Conversation\\n\\n`;\n\n for (const msg of this.messages) {\n const time = new Date(msg.timestamp).toLocaleTimeString();\n markdown += `### Message ${msg.index + 1} (${time}) - ${msg.role}\\n\\n`;\n\n if (msg.content) {\n markdown += `\\`\\`\\`\\n${msg.content}\\n\\`\\`\\`\\n\\n`;\n }\n\n if (msg.tool_calls) {\n markdown += `**Tool Calls:**\\n`;\n for (const call of msg.tool_calls) {\n markdown += `- ${call.function.name}: \\`${call.function.arguments}\\`\\n`;\n }\n markdown += `\\n`;\n }\n\n if (msg.metadata) {\n markdown += `*Metadata: ${JSON.stringify(msg.metadata)}*\\n\\n`;\n }\n }\n\n markdown += `## Summary\\n\\n`;\n markdown += `- **Total Messages**: ${this.messages.length}\\n`;\n markdown += `- **Tool Calls**: ${this.toolCalls.length}\\n`;\n\n await fs.writeFile(outputPath, markdown, 'utf-8');\n }\n\n /**\n * Append to JSONL file (streaming)\n */\n private async appendToJSONL(message: LoggedMessage): Promise<void> {\n const outputPath = await this.getOutputPath();\n const line = JSON.stringify(message) + '\\n';\n await fs.appendFile(outputPath, line, 'utf-8');\n }\n\n /**\n * Redact sensitive content\n */\n private redactContent(content: string): string {\n let redacted = content;\n\n // Apply custom patterns\n for (const pattern of this.config.redactPatterns) {\n redacted = redacted.replace(pattern, '[REDACTED]');\n }\n\n // Default patterns\n const defaultPatterns = [\n /api[_-]?key[\\s:=\"']+[\\w-]+/gi,\n /password[\\s:=\"']+[\\w-]+/gi,\n /Bearer\\s+[\\w-]+/gi,\n /sk-[a-zA-Z0-9]{48}/g,\n ];\n\n for (const pattern of defaultPatterns) {\n redacted = redacted.replace(pattern, '[REDACTED]');\n }\n\n return redacted;\n }\n}\n\n// ===== CONVERSATION REPLAYER =====\n\n/**\n * Replay options\n */\nexport interface ReplayOptions {\n model?: string;\n maxIterations?: number;\n retryFailedTools?: boolean;\n toolTimeout?: number;\n expectSimilarOutput?: boolean;\n}\n\n/**\n * Replay result\n */\nexport interface ReplayResult {\n success: boolean;\n conversation: LoggedConversation;\n errors?: Error[];\n}\n\n/**\n * Comparison result\n */\nexport interface ComparisonResult {\n messageDiff: number;\n toolCallDiff: number;\n tokenDiff?: number;\n outputSimilarity: number;\n costSavings?: number;\n}\n\n/**\n * ConversationReplayer loads and replays logged conversations.\n *\n * Features:\n * - Load from various formats\n * - Replay conversations\n * - Compare replays with originals\n * - Export to different formats\n *\n * @example\n * ```typescript\n * const replayer = await ConversationReplayer.load('logs/conv.json');\n *\n * console.log('Messages:', replayer.messages.length);\n * console.log('Tool calls:', replayer.getToolCalls().length);\n *\n * const timeline = replayer.getTimeline();\n * console.log('Events:', timeline.length);\n * ```\n */\nexport class ConversationReplayer {\n private conversation: LoggedConversation;\n private logger: any;\n\n private constructor(conversation: LoggedConversation, logger?: any) {\n this.conversation = conversation;\n this.logger = wrapLogger(logger || DEFAULT_LOGGER, 'ConversationReplayer');\n }\n\n /**\n * Load conversation from file\n */\n static async load(filePath: string, logger?: any): Promise<ConversationReplayer> {\n const wlogger = wrapLogger(logger || DEFAULT_LOGGER, 'ConversationReplayer');\n wlogger.debug('Loading conversation', { path: filePath });\n\n try {\n const content = await fs.readFile(filePath, 'utf-8');\n\n // Determine format by extension\n if (filePath.endsWith('.json')) {\n const data: LoggedConversation = JSON.parse(content);\n return new ConversationReplayer(data, logger);\n } else if (filePath.endsWith('.jsonl')) {\n const lines = content.trim().split('\\n');\n const messages = lines.map(line => JSON.parse(line));\n\n const conversation: LoggedConversation = {\n id: `replayer-${Date.now()}`,\n metadata: {\n startTime: new Date(),\n model: 'unknown'\n },\n messages,\n summary: {\n totalMessages: messages.length,\n toolCallsExecuted: 0,\n iterations: 0,\n success: true\n }\n };\n\n return new ConversationReplayer(conversation, logger);\n } else {\n throw new Error(`Unsupported format: ${filePath}`);\n }\n } catch (error) {\n wlogger.error('Failed to load conversation', { path: filePath, error });\n throw error;\n }\n }\n\n /**\n * Load latest conversation from directory\n */\n static async loadLatest(directory: string, logger?: any): Promise<ConversationReplayer> {\n const files = await fs.readdir(directory);\n const jsonFiles = files.filter(f => f.endsWith('.json')).sort().reverse();\n\n if (jsonFiles.length === 0) {\n throw new Error(`No conversation logs found in ${directory}`);\n }\n\n const latestPath = path.join(directory, jsonFiles[0]);\n return ConversationReplayer.load(latestPath, logger);\n }\n\n /**\n * Get all messages\n */\n get messages(): LoggedMessage[] {\n return this.conversation.messages;\n }\n\n /**\n * Get conversation metadata\n */\n getMetadata(): ConversationLogMetadata {\n return { ...this.conversation.metadata };\n }\n\n /**\n * Get tool calls\n */\n getToolCalls(): ToolCallLog[] {\n const toolCalls: ToolCallLog[] = [];\n\n for (const msg of this.conversation.messages) {\n if (msg.tool_calls) {\n for (const call of msg.tool_calls) {\n toolCalls.push({\n callId: call.id,\n toolName: call.function.name,\n timestamp: msg.timestamp,\n iteration: 0, // Would need to be calculated\n arguments: JSON.parse(call.function.arguments),\n result: null, // Would need to find corresponding tool message\n duration: 0,\n success: true,\n });\n }\n }\n }\n\n return toolCalls;\n }\n\n /**\n * Get message at index\n */\n getMessageAt(index: number): LoggedMessage | undefined {\n return this.conversation.messages[index];\n }\n\n /**\n * Get timeline of events\n */\n getTimeline(): TimelineEvent[] {\n const events: TimelineEvent[] = [];\n\n for (const msg of this.conversation.messages) {\n events.push({\n timestamp: msg.timestamp,\n iteration: 0, // Would need iteration tracking\n type: 'message',\n description: `${msg.role} message`,\n });\n }\n\n return events;\n }\n\n /**\n * Export to format\n */\n async exportToFormat(format: LogFormat, outputPath: string): Promise<string> {\n this.logger.debug('Exporting to format', { format, path: outputPath });\n\n switch (format) {\n case 'json':\n await fs.writeFile(outputPath, JSON.stringify(this.conversation, null, 2), 'utf-8');\n break;\n case 'markdown':\n await this.exportMarkdown(outputPath);\n break;\n case 'jsonl': {\n const lines = this.messages.map(m => JSON.stringify(m)).join('\\n');\n await fs.writeFile(outputPath, lines, 'utf-8');\n break;\n }\n }\n\n return outputPath;\n }\n\n /**\n * Export as markdown\n */\n private async exportMarkdown(outputPath: string): Promise<void> {\n let markdown = `# Conversation Log\\n\\n`;\n markdown += `**ID**: ${this.conversation.id}\\n`;\n\n const startTime = typeof this.conversation.metadata.startTime === 'string'\n ? this.conversation.metadata.startTime\n : this.conversation.metadata.startTime.toISOString();\n\n markdown += `**Started**: ${startTime}\\n\\n`;\n\n for (const msg of this.conversation.messages) {\n markdown += `## ${msg.role.toUpperCase()} (${msg.index})\\n\\n`;\n if (msg.content) {\n markdown += `${msg.content}\\n\\n`;\n }\n }\n\n await fs.writeFile(outputPath, markdown, 'utf-8');\n }\n}\n\n/**\n * Timeline event interface\n */\ninterface TimelineEvent {\n timestamp: string;\n iteration: number;\n type: string;\n description: string;\n duration?: number;\n success?: boolean;\n}\n\nexport default ConversationLogger;\n\n","import { Model } from \"./chat\";\nimport { Context } from \"./items/context\";\nimport { Instruction } from \"./items/instruction\";\nimport { Section } from \"./items/section\";\nimport { DEFAULT_LOGGER, wrapLogger } from \"./logger\";\nimport type { ConversationMessage, ToolCall } from \"./conversation\";\nimport * as Formatter from \"./formatter\";\n\n// ===== TYPE DEFINITIONS =====\n\n/**\n * Semantic message role\n */\nexport type SemanticRole = 'system' | 'user' | 'assistant' | 'tool' | 'developer';\n\n/**\n * Message metadata\n */\nexport interface MessageMetadata {\n priority?: 'high' | 'medium' | 'low';\n timestamp?: Date;\n source?: string;\n [key: string]: any;\n}\n\n/**\n * MessageBuilder provides semantic, type-safe message construction.\n *\n * Features:\n * - Semantic message types (system, user, assistant, tool)\n * - Model-specific role handling (system vs developer)\n * - Structured content composition\n * - Metadata attachment\n * - Format-aware building\n *\n * @example\n * ```typescript\n * const message = MessageBuilder.system()\n * .withContent('You are a helpful assistant')\n * .withInstructions(instructionSection)\n * .buildForModel('gpt-4o');\n *\n * const toolMessage = MessageBuilder.tool('call_123')\n * .withResult(result)\n * .withMetadata({ duration: 45 })\n * .build();\n * ```\n */\nexport class MessageBuilder {\n private semanticRole: SemanticRole;\n private contentParts: string[];\n private metadata: MessageMetadata;\n private formatter?: Formatter.Instance;\n private toolCallId?: string;\n private toolCalls?: ToolCall[];\n private logger: any;\n\n private constructor(role: SemanticRole, logger?: any) {\n this.semanticRole = role;\n this.contentParts = [];\n this.metadata = {};\n this.logger = wrapLogger(logger || DEFAULT_LOGGER, 'MessageBuilder');\n }\n\n /**\n * Create system message builder\n */\n static system(logger?: any): MessageBuilder {\n return new MessageBuilder('system', logger);\n }\n\n /**\n * Create user message builder\n */\n static user(logger?: any): MessageBuilder {\n return new MessageBuilder('user', logger);\n }\n\n /**\n * Create assistant message builder\n */\n static assistant(logger?: any): MessageBuilder {\n return new MessageBuilder('assistant', logger);\n }\n\n /**\n * Create tool message builder\n */\n static tool(callId: string, logger?: any): MessageBuilder {\n const builder = new MessageBuilder('tool', logger);\n builder.toolCallId = callId;\n return builder;\n }\n\n /**\n * Create developer message builder (for o1 models)\n */\n static developer(logger?: any): MessageBuilder {\n return new MessageBuilder('developer', logger);\n }\n\n /**\n * Add content to message\n */\n withContent(content: string | Section<any>): this {\n if (typeof content === 'string') {\n this.contentParts.push(content);\n } else {\n // Format section\n const formatter = this.formatter || Formatter.create();\n this.contentParts.push(formatter.format(content));\n }\n return this;\n }\n\n /**\n * Add persona section (typically for system messages)\n */\n withPersona(persona: Section<Instruction>): this {\n const formatter = this.formatter || Formatter.create();\n this.contentParts.push(formatter.format(persona));\n return this;\n }\n\n /**\n * Add instructions section\n */\n withInstructions(instructions: Section<Instruction> | string[]): this {\n if (Array.isArray(instructions)) {\n this.contentParts.push(instructions.join('\\n'));\n } else {\n const formatter = this.formatter || Formatter.create();\n this.contentParts.push(formatter.format(instructions));\n }\n return this;\n }\n\n /**\n * Add context section\n */\n withContext(context: Section<Context> | Array<{ content: string; title?: string }>): this {\n if (Array.isArray(context)) {\n const contextStr = context.map(c =>\n c.title ? `## ${c.title}\\n\\n${c.content}` : c.content\n ).join('\\n\\n');\n this.contentParts.push(contextStr);\n } else {\n const formatter = this.formatter || Formatter.create();\n this.contentParts.push(formatter.format(context));\n }\n return this;\n }\n\n /**\n * Set tool call ID (for tool messages)\n */\n withCallId(id: string): this {\n this.toolCallId = id;\n return this;\n }\n\n /**\n * Set tool result (for tool messages)\n */\n withResult(result: any): this {\n const resultStr = typeof result === 'string' ? result : JSON.stringify(result, null, 2);\n this.contentParts.push(resultStr);\n return this;\n }\n\n /**\n * Add tool calls (for assistant messages)\n */\n withToolCalls(calls: ToolCall[]): this {\n this.toolCalls = calls;\n return this;\n }\n\n /**\n * Add metadata\n */\n withMetadata(metadata: Record<string, any>): this {\n this.metadata = { ...this.metadata, ...metadata };\n return this;\n }\n\n /**\n * Add timestamp to metadata\n */\n withTimestamp(): this {\n this.metadata.timestamp = new Date();\n return this;\n }\n\n /**\n * Set priority in metadata\n */\n withPriority(priority: 'high' | 'medium' | 'low'): this {\n this.metadata.priority = priority;\n return this;\n }\n\n /**\n * Set formatter for section rendering\n */\n withFormatter(formatter: Formatter.Instance): this {\n this.formatter = formatter;\n return this;\n }\n\n /**\n * Build message with semantic role\n */\n build(): ConversationMessage {\n const content = this.contentParts.join('\\n\\n');\n\n const message: ConversationMessage = {\n role: this.semanticRole as any,\n content: content || null,\n };\n\n // Add tool-specific fields\n if (this.semanticRole === 'tool' && this.toolCallId) {\n message.tool_call_id = this.toolCallId;\n }\n\n if (this.toolCalls) {\n message.tool_calls = this.toolCalls;\n }\n\n return message;\n }\n\n /**\n * Build message with model-specific role\n */\n buildForModel(model: Model): ConversationMessage {\n const message = this.build();\n\n // Handle model-specific role requirements\n if (this.semanticRole === 'system') {\n // O1 models use 'developer' instead of 'system'\n if (model.startsWith('o1') || model.startsWith('o3') || model === 'o1-pro') {\n message.role = 'developer' as any;\n }\n }\n\n return message;\n }\n}\n\n/**\n * Message template functions for common patterns\n */\nexport const MessageTemplates = {\n /**\n * System message for agentic tasks\n */\n agenticSystem: (persona?: string, instructions?: string[]) => {\n const builder = MessageBuilder.system();\n\n if (persona) {\n builder.withContent(persona);\n }\n\n if (instructions) {\n builder.withInstructions(instructions);\n }\n\n return builder;\n },\n\n /**\n * User query with optional context\n */\n userQuery: (query: string, context?: Array<{ content: string; title?: string }>) => {\n const builder = MessageBuilder.user().withContent(query);\n\n if (context) {\n builder.withContext(context);\n }\n\n return builder;\n },\n\n /**\n * Tool result with metadata\n */\n toolResult: (callId: string, result: any, metadata?: Record<string, any>) => {\n const builder = MessageBuilder.tool(callId)\n .withResult(result)\n .withTimestamp();\n\n if (metadata) {\n builder.withMetadata(metadata);\n }\n\n return builder;\n },\n\n /**\n * Tool success result\n */\n toolSuccess: (callId: string, result: any, duration?: number) => {\n return MessageBuilder.tool(callId)\n .withResult(result)\n .withMetadata({ success: true, duration })\n .withTimestamp();\n },\n\n /**\n * Tool failure result\n */\n toolFailure: (callId: string, error: Error) => {\n return MessageBuilder.tool(callId)\n .withResult({ error: error.message, stack: error.stack })\n .withMetadata({ success: false, errorName: error.name })\n .withTimestamp();\n },\n};\n\nexport default MessageBuilder;\n\n","import { encoding_for_model, Tiktoken, TiktokenModel } from 'tiktoken';\nimport type { ConversationMessage } from './conversation';\nimport { Model } from './chat';\nimport { DEFAULT_LOGGER, wrapLogger } from './logger';\n\n// ===== TYPE DEFINITIONS =====\n\n/**\n * Token usage information\n */\nexport interface TokenUsage {\n used: number;\n max: number;\n remaining: number;\n percentage: number;\n}\n\n/**\n * Compression statistics\n */\nexport interface CompressionStats {\n messagesBefore: number;\n messagesAfter: number;\n tokensBefore: number;\n tokensAfter: number;\n tokensSaved: number;\n strategy: CompressionStrategy;\n}\n\n/**\n * Compression strategy\n */\nexport type CompressionStrategy = 'priority-based' | 'fifo' | 'summarize' | 'adaptive';\n\n/**\n * Token budget configuration\n */\nexport interface TokenBudgetConfig {\n // Hard limits\n max: number;\n reserveForResponse: number;\n warningThreshold?: number; // Default: 0.8 (80%)\n\n // Compression strategy\n strategy: CompressionStrategy;\n\n // Behavior when budget exceeded\n onBudgetExceeded: 'compress' | 'error' | 'warn' | 'truncate';\n\n // What to preserve\n preserveRecent?: number;\n preserveSystem?: boolean; // Default: true\n preserveHighPriority?: boolean; // Default: true\n\n // Monitoring\n onWarning?: (usage: TokenUsage) => void;\n onCompression?: (stats: CompressionStats) => void;\n}\n\n// ===== TOKEN COUNTER =====\n\n/**\n * TokenCounter counts tokens using tiktoken for accurate model-specific counting.\n *\n * Features:\n * - Model-specific token counting\n * - Message overhead calculation\n * - Tool call token estimation\n * - Response token estimation\n *\n * @example\n * ```typescript\n * const counter = new TokenCounter('gpt-4o');\n *\n * const tokens = counter.count('Hello, world!');\n * console.log(`Text uses ${tokens} tokens`);\n *\n * const messageTokens = counter.countMessage({\n * role: 'user',\n * content: 'What is the weather?'\n * });\n * ```\n */\nexport class TokenCounter {\n private encoder: Tiktoken;\n private model: Model;\n private logger: any;\n\n constructor(model: Model, logger?: any) {\n this.model = model;\n this.logger = wrapLogger(logger || DEFAULT_LOGGER, 'TokenCounter');\n\n // Map RiotPrompt models to Tiktoken models\n const tiktokenModel = this.mapToTiktokenModel(model);\n this.encoder = encoding_for_model(tiktokenModel);\n\n this.logger.debug('Created TokenCounter', { model });\n }\n\n /**\n * Count tokens in text\n */\n count(text: string): number {\n if (!text) return 0;\n return this.encoder.encode(text).length;\n }\n\n /**\n * Count tokens in a single message\n */\n countMessage(message: ConversationMessage): number {\n let tokens = 4; // Base overhead per message\n\n // Content tokens\n if (message.content) {\n tokens += this.count(message.content);\n }\n\n // Role tokens\n tokens += 1;\n\n // Tool call tokens\n if (message.tool_calls) {\n for (const toolCall of message.tool_calls) {\n tokens += this.count(JSON.stringify(toolCall));\n tokens += 3; // Tool call overhead\n }\n }\n\n // Tool result tokens\n if (message.tool_call_id) {\n tokens += this.count(message.tool_call_id);\n tokens += 2; // Tool result overhead\n }\n\n return tokens;\n }\n\n /**\n * Count tokens in entire conversation\n */\n countConversation(messages: ConversationMessage[]): number {\n let total = 3; // Conversation start overhead\n\n for (const message of messages) {\n total += this.countMessage(message);\n }\n\n return total;\n }\n\n /**\n * Count with additional overhead estimation\n */\n countWithOverhead(\n messages: ConversationMessage[],\n includeToolOverhead: boolean = false\n ): number {\n let total = this.countConversation(messages);\n\n // Add tool definition overhead if tools are present\n if (includeToolOverhead) {\n const hasTools = messages.some(m => m.tool_calls && m.tool_calls.length > 0);\n if (hasTools) {\n total += 100; // Estimated tool definition overhead\n }\n }\n\n return total;\n }\n\n /**\n * Estimate tokens needed for response\n */\n estimateResponseTokens(messages: ConversationMessage[]): number {\n // Heuristic: average response is about 20% of input\n const inputTokens = this.countConversation(messages);\n return Math.max(500, Math.floor(inputTokens * 0.2));\n }\n\n /**\n * Map RiotPrompt model to Tiktoken model\n */\n private mapToTiktokenModel(model: Model): TiktokenModel {\n switch (model) {\n case 'gpt-4o':\n case 'gpt-4o-mini':\n return 'gpt-4o';\n case 'o1-preview':\n case 'o1-mini':\n case 'o1':\n case 'o3-mini':\n case 'o1-pro':\n // O1 models use gpt-4o tokenization\n return 'gpt-4o';\n default:\n return 'gpt-4o';\n }\n }\n\n /**\n * Free encoder resources\n */\n dispose(): void {\n this.encoder.free();\n }\n}\n\n// ===== TOKEN BUDGET MANAGER =====\n\n/**\n * TokenBudgetManager manages token budgets and compression strategies.\n *\n * Features:\n * - Monitor token usage\n * - Automatic compression when budget exceeded\n * - Multiple compression strategies\n * - Priority-based message retention\n * - Usage statistics and callbacks\n *\n * @example\n * ```typescript\n * const manager = new TokenBudgetManager({\n * max: 8000,\n * reserveForResponse: 1000,\n * strategy: 'priority-based',\n * onBudgetExceeded: 'compress'\n * }, 'gpt-4o');\n *\n * // Check if message can be added\n * if (manager.canAddMessage(message)) {\n * messages.push(message);\n * } else {\n * // Compress conversation\n * messages = manager.compress(messages);\n * messages.push(message);\n * }\n * ```\n */\nexport class TokenBudgetManager {\n private config: Required<TokenBudgetConfig>;\n private counter: TokenCounter;\n private logger: any;\n\n constructor(config: TokenBudgetConfig, model: Model, logger?: any) {\n this.config = {\n warningThreshold: 0.8,\n preserveRecent: 3,\n preserveSystem: true,\n preserveHighPriority: true,\n onWarning: () => {},\n onCompression: () => {},\n ...config,\n } as Required<TokenBudgetConfig>;\n\n this.counter = new TokenCounter(model, logger);\n this.logger = wrapLogger(logger || DEFAULT_LOGGER, 'TokenBudgetManager');\n\n this.logger.debug('Created TokenBudgetManager', {\n max: this.config.max,\n strategy: this.config.strategy\n });\n }\n\n /**\n * Get current token usage\n */\n getCurrentUsage(messages: ConversationMessage[]): TokenUsage {\n const used = this.counter.countConversation(messages);\n const max = this.config.max;\n const remaining = Math.max(0, max - used - this.config.reserveForResponse);\n const percentage = (used / max) * 100;\n\n return { used, max, remaining, percentage };\n }\n\n /**\n * Get remaining tokens available\n */\n getRemainingTokens(messages: ConversationMessage[]): number {\n return this.getCurrentUsage(messages).remaining;\n }\n\n /**\n * Check if near token limit\n */\n isNearLimit(messages: ConversationMessage[], threshold?: number): boolean {\n const usage = this.getCurrentUsage(messages);\n const checkThreshold = threshold ?? this.config.warningThreshold;\n\n const isNear = usage.percentage >= (checkThreshold * 100);\n\n if (isNear) {\n this.config.onWarning?.(usage);\n }\n\n return isNear;\n }\n\n /**\n * Check if a message can be added without exceeding budget\n */\n canAddMessage(message: ConversationMessage, currentMessages: ConversationMessage[]): boolean {\n const currentTokens = this.counter.countConversation(currentMessages);\n const messageTokens = this.counter.countMessage(message);\n const total = currentTokens + messageTokens + this.config.reserveForResponse;\n\n return total <= this.config.max;\n }\n\n /**\n * Compress messages according to strategy\n */\n compress(messages: ConversationMessage[]): ConversationMessage[] {\n const before = messages.length;\n const tokensBefore = this.counter.countConversation(messages);\n const targetTokens = this.config.max - this.config.reserveForResponse;\n\n this.logger.debug('Compressing messages', {\n before,\n tokensBefore,\n targetTokens,\n strategy: this.config.strategy\n });\n\n // No compression needed\n if (tokensBefore <= targetTokens) {\n return messages;\n }\n\n let compressed: ConversationMessage[];\n\n switch (this.config.strategy) {\n case 'priority-based':\n compressed = this.compressByPriority(messages, targetTokens);\n break;\n case 'fifo':\n compressed = this.compressFIFO(messages, targetTokens);\n break;\n case 'adaptive':\n compressed = this.compressAdaptive(messages, targetTokens);\n break;\n case 'summarize':\n // For now, fall back to FIFO (summarization would require LLM call)\n compressed = this.compressFIFO(messages, targetTokens);\n break;\n default:\n compressed = this.compressFIFO(messages, targetTokens);\n }\n\n const tokensAfter = this.counter.countConversation(compressed);\n\n const stats: CompressionStats = {\n messagesBefore: before,\n messagesAfter: compressed.length,\n tokensBefore,\n tokensAfter,\n tokensSaved: tokensBefore - tokensAfter,\n strategy: this.config.strategy,\n };\n\n this.config.onCompression?.(stats);\n\n this.logger.info('Compressed conversation', stats);\n\n return compressed;\n }\n\n /**\n * Compress by priority (keep high-priority messages)\n */\n private compressByPriority(\n messages: ConversationMessage[],\n targetTokens: number\n ): ConversationMessage[] {\n // Calculate priority for each message\n const withPriority = messages.map((msg, idx) => ({\n message: msg,\n priority: this.calculatePriority(msg, idx, messages.length),\n tokens: this.counter.countMessage(msg),\n index: idx,\n }));\n\n // Sort by priority (descending)\n withPriority.sort((a, b) => b.priority - a.priority);\n\n // Keep highest priority messages that fit in budget\n const kept: typeof withPriority = [];\n let totalTokens = 0;\n\n for (const item of withPriority) {\n if (totalTokens + item.tokens <= targetTokens) {\n kept.push(item);\n totalTokens += item.tokens;\n }\n }\n\n // Sort back to original order\n kept.sort((a, b) => a.index - b.index);\n\n return kept.map(item => item.message);\n }\n\n /**\n * Compress using FIFO (remove oldest first)\n */\n private compressFIFO(\n messages: ConversationMessage[],\n targetTokens: number\n ): ConversationMessage[] {\n const preserved: ConversationMessage[] = [];\n let totalTokens = 0;\n\n // Always preserve system messages if configured\n const systemMessages = messages.filter(m => m.role === 'system');\n if (this.config.preserveSystem) {\n for (const msg of systemMessages) {\n preserved.push(msg);\n totalTokens += this.counter.countMessage(msg);\n }\n }\n\n // Preserve recent messages\n const recentCount = this.config.preserveRecent ?? 3;\n const recentMessages = messages.slice(-recentCount).filter(m => m.role !== 'system');\n for (const msg of recentMessages) {\n if (!preserved.includes(msg)) {\n const tokens = this.counter.countMessage(msg);\n if (totalTokens + tokens <= targetTokens) {\n preserved.push(msg);\n totalTokens += tokens;\n }\n }\n }\n\n // Add older messages if space available\n const otherMessages = messages.filter(\n m => !preserved.includes(m) && m.role !== 'system'\n );\n\n for (let i = otherMessages.length - 1; i >= 0; i--) {\n const msg = otherMessages[i];\n const tokens = this.counter.countMessage(msg);\n\n if (totalTokens + tokens <= targetTokens) {\n preserved.unshift(msg);\n totalTokens += tokens;\n } else {\n break;\n }\n }\n\n // Sort to maintain conversation order\n return messages.filter(m => preserved.includes(m));\n }\n\n /**\n * Adaptive compression based on conversation phase\n */\n private compressAdaptive(\n messages: ConversationMessage[],\n targetTokens: number\n ): ConversationMessage[] {\n const messageCount = messages.length;\n\n // Early phase: minimal compression (keep most messages)\n if (messageCount <= 5) {\n return this.compressFIFO(messages, targetTokens);\n }\n\n // Mid phase: moderate compression\n if (messageCount <= 15) {\n // Use FIFO but preserve more recent messages\n const modifiedConfig = { ...this.config, preserveRecent: 5 };\n const tempManager = new TokenBudgetManager(\n modifiedConfig,\n 'gpt-4o', // Model doesn't matter here\n this.logger\n );\n return tempManager.compressFIFO(messages, targetTokens);\n }\n\n // Late phase: aggressive compression (priority-based)\n return this.compressByPriority(messages, targetTokens);\n }\n\n /**\n * Calculate message priority for compression\n */\n private calculatePriority(\n message: ConversationMessage,\n index: number,\n total: number\n ): number {\n let priority = 1.0;\n\n // System messages: highest priority\n if (message.role === 'system') {\n priority = 10.0;\n }\n\n // Recent messages: higher priority\n const recencyBonus = index / total;\n priority += recencyBonus * 2;\n\n // Tool results: moderate priority\n if (message.role === 'tool') {\n priority += 0.5;\n }\n\n // Messages with tool calls: keep for context\n if (message.tool_calls && message.tool_calls.length > 0) {\n priority += 0.8;\n }\n\n return priority;\n }\n\n /**\n * Truncate to exact number of messages\n */\n truncate(messages: ConversationMessage[], maxMessages: number): ConversationMessage[] {\n if (messages.length <= maxMessages) {\n return messages;\n }\n\n // Keep system messages + recent messages\n const systemMessages = messages.filter(m => m.role === 'system');\n const otherMessages = messages.filter(m => m.role !== 'system');\n\n const recentOther = otherMessages.slice(-(maxMessages - systemMessages.length));\n\n return [...systemMessages, ...recentOther];\n }\n\n /**\n * Dispose resources\n */\n dispose(): void {\n this.counter.dispose();\n }\n}\n\nexport default TokenBudgetManager;\n\n","import { z } from \"zod\";\nimport { Model } from \"./chat\";\nimport { ContextManager, type DynamicContentItem } from \"./context-manager\";\nimport { ConversationLogger, type LogConfig } from \"./conversation-logger\";\nimport { Content } from \"./items/content\";\nimport { Context } from \"./items/context\";\nimport { Instruction } from \"./items/instruction\";\nimport { Section } from \"./items/section\";\nimport { DEFAULT_LOGGER, wrapLogger } from \"./logger\";\nimport { MessageBuilder } from \"./message-builder\";\nimport { Prompt } from \"./prompt\";\nimport * as Formatter from \"./formatter\";\nimport { TokenBudgetManager, type TokenBudgetConfig, type TokenUsage, type CompressionStrategy } from \"./token-budget\";\n\n// ===== TYPE DEFINITIONS =====\n\n/**\n * Options for injecting context\n */\nexport interface InjectOptions {\n // Where to inject\n position?: 'end' | 'before-last' | 'after-system' | number;\n\n // How to format\n format?: 'structured' | 'inline' | 'reference';\n\n // Deduplication\n deduplicate?: boolean;\n deduplicateBy?: 'id' | 'content' | 'hash';\n\n // Priority\n priority?: 'high' | 'medium' | 'low';\n weight?: number;\n\n // Metadata\n category?: string;\n source?: string;\n}\n\n/**\n * Represents a tool call made by the assistant\n */\nexport interface ToolCall {\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n}\n\n/**\n * Message in a conversation (compatible with OpenAI ChatCompletionMessageParam)\n */\nexport interface ConversationMessage {\n role: 'system' | 'user' | 'assistant' | 'tool';\n content: string | null;\n name?: string;\n tool_calls?: ToolCall[];\n tool_call_id?: string;\n}\n\n/**\n * Configuration for ConversationBuilder\n */\nexport interface ConversationBuilderConfig {\n model: Model;\n formatter?: Formatter.Instance;\n trackContext?: boolean;\n deduplicateContext?: boolean;\n}\n\n/**\n * Metadata about the conversation\n */\nexport interface ConversationMetadata {\n model: Model;\n created: Date;\n lastModified: Date;\n messageCount: number;\n toolCallCount: number;\n}\n\n/**\n * Internal state of a conversation\n */\nexport interface ConversationState {\n messages: ConversationMessage[];\n metadata: ConversationMetadata;\n contextProvided: Set<string>;\n contextManager: ContextManager;\n}\n\n/**\n * Serializable conversation state for persistence\n */\nexport interface SerializedConversation {\n messages: ConversationMessage[];\n metadata: Omit<ConversationMetadata, 'created' | 'lastModified'> & {\n created: string;\n lastModified: string;\n };\n contextProvided: string[];\n}\n\n// ===== SCHEMAS =====\n\nconst ConversationBuilderConfigSchema = z.object({\n model: z.string(),\n formatter: z.any().optional(),\n trackContext: z.boolean().optional().default(true),\n deduplicateContext: z.boolean().optional().default(true),\n});\n\n// ===== CONVERSATION BUILDER =====\n\n/**\n * ConversationBuilder manages multi-turn conversations with full lifecycle support.\n *\n * Features:\n * - Initialize from RiotPrompt prompts\n * - Add messages of any type (system, user, assistant, tool)\n * - Handle tool calls and results\n * - Inject dynamic context\n * - Clone for parallel exploration\n * - Serialize/deserialize for persistence\n *\n * @example\n * ```typescript\n * // Create from prompt\n * const conversation = ConversationBuilder.create()\n * .fromPrompt(prompt, 'gpt-4o')\n * .build();\n *\n * // Add messages\n * conversation.addUserMessage('Analyze this code');\n *\n * // Handle tool calls\n * conversation.addAssistantWithToolCalls(null, toolCalls);\n * conversation.addToolResult(toolCallId, result);\n *\n * // Export\n * const messages = conversation.toMessages();\n * ```\n */\nexport class ConversationBuilder {\n private state: ConversationState;\n private config: ConversationBuilderConfig;\n private logger: any;\n private budgetManager?: TokenBudgetManager;\n private conversationLogger?: ConversationLogger;\n\n private constructor(config: ConversationBuilderConfig, logger?: any) {\n this.config = ConversationBuilderConfigSchema.parse(config) as ConversationBuilderConfig;\n this.logger = wrapLogger(logger || DEFAULT_LOGGER, 'ConversationBuilder');\n\n this.state = {\n messages: [],\n metadata: {\n model: this.config.model,\n created: new Date(),\n lastModified: new Date(),\n messageCount: 0,\n toolCallCount: 0,\n },\n contextProvided: new Set<string>(),\n contextManager: new ContextManager(logger),\n };\n\n this.logger.debug('Created ConversationBuilder', { model: this.config.model });\n }\n\n /**\n * Create a new ConversationBuilder instance\n */\n static create(config?: Partial<ConversationBuilderConfig>, logger?: any): ConversationBuilder {\n const defaultConfig: ConversationBuilderConfig = {\n model: 'gpt-4o',\n trackContext: true,\n deduplicateContext: true,\n ...config,\n };\n\n return new ConversationBuilder(defaultConfig, logger);\n }\n\n /**\n * Initialize conversation from a RiotPrompt prompt\n */\n fromPrompt(prompt: Prompt, model?: Model): this {\n const targetModel = model || this.config.model;\n this.logger.debug('Initializing from prompt', { model: targetModel });\n\n // Use formatter (provided or create new one)\n const formatter = this.config.formatter || Formatter.create();\n const request = formatter.formatPrompt(targetModel, prompt);\n\n // Add all messages from formatted request\n request.messages.forEach(msg => {\n this.state.messages.push(msg as ConversationMessage);\n });\n\n this.updateMetadata();\n this.logger.debug('Initialized from prompt', { messageCount: this.state.messages.length });\n\n return this;\n }\n\n /**\n * Add a system message\n */\n addSystemMessage(content: string | Section<Instruction>): this {\n this.logger.debug('Adding system message');\n\n let messageContent: string;\n if (typeof content === 'string') {\n messageContent = content;\n } else {\n // Format section using formatter\n const formatter = this.config.formatter || Formatter.create();\n messageContent = formatter.format(content);\n }\n\n this.state.messages.push({\n role: 'system',\n content: messageContent,\n });\n\n this.updateMetadata();\n return this;\n }\n\n /**\n * Add a user message (with automatic budget management)\n */\n addUserMessage(content: string | Section<Content>): this {\n this.logger.debug('Adding user message');\n\n let messageContent: string;\n if (typeof content === 'string') {\n messageContent = content;\n } else {\n // Format section using formatter\n const formatter = this.config.formatter || Formatter.create();\n messageContent = formatter.format(content);\n }\n\n const message: ConversationMessage = {\n role: 'user',\n content: messageContent,\n };\n\n // Check budget if enabled\n if (this.budgetManager) {\n if (!this.budgetManager.canAddMessage(message, this.state.messages)) {\n this.logger.warn('Budget exceeded, compressing conversation');\n this.state.messages = this.budgetManager.compress(this.state.messages);\n }\n }\n\n this.state.messages.push(message);\n\n this.updateMetadata();\n return this;\n }\n\n /**\n * Add an assistant message\n */\n addAssistantMessage(content: string | null): this {\n this.logger.debug('Adding assistant message');\n\n this.state.messages.push({\n role: 'assistant',\n content: content || '',\n });\n\n this.updateMetadata();\n return this;\n }\n\n /**\n * Add an assistant message with tool calls\n */\n addAssistantWithToolCalls(content: string | null, toolCalls: ToolCall[]): this {\n this.logger.debug('Adding assistant message with tool calls', { toolCount: toolCalls.length });\n\n this.state.messages.push({\n role: 'assistant',\n content: content,\n tool_calls: toolCalls,\n });\n\n this.state.metadata.toolCallCount += toolCalls.length;\n this.updateMetadata();\n return this;\n }\n\n /**\n * Add a tool result message\n */\n addToolResult(toolCallId: string, content: string, toolName?: string): this {\n this.logger.debug('Adding tool result', { toolCallId, toolName });\n\n const message: ConversationMessage = {\n role: 'tool',\n tool_call_id: toolCallId,\n content: content,\n };\n\n if (toolName) {\n message.name = toolName;\n }\n\n this.state.messages.push(message);\n this.updateMetadata();\n return this;\n }\n\n /**\n * Alias for addToolResult (more intuitive naming)\n */\n addToolMessage(toolCallId: string, content: string, toolName?: string): this {\n return this.addToolResult(toolCallId, content, toolName);\n }\n\n /**\n * Inject context into the conversation with advanced options\n *\n * @param context - Array of content items to inject\n * @param options - Injection options (position, format, deduplication, etc.)\n */\n injectContext(context: DynamicContentItem[], options?: InjectOptions): this {\n const opts: Required<InjectOptions> = {\n position: 'end',\n format: 'structured',\n deduplicate: this.config.deduplicateContext ?? true,\n deduplicateBy: 'id',\n priority: 'medium',\n weight: 1.0,\n category: undefined as any,\n source: undefined as any,\n ...options,\n };\n\n this.logger.debug('Injecting context', { itemCount: context.length, options: opts });\n\n // Filter out duplicates if enabled\n const itemsToAdd: DynamicContentItem[] = [];\n\n for (const item of context) {\n const enrichedItem: DynamicContentItem = {\n ...item,\n priority: item.priority || opts.priority,\n weight: item.weight || opts.weight,\n category: item.category || opts.category,\n source: item.source || opts.source,\n timestamp: item.timestamp || new Date(),\n };\n\n // Check deduplication\n if (opts.deduplicate) {\n let skip = false;\n\n switch (opts.deduplicateBy) {\n case 'id':\n if (enrichedItem.id && this.state.contextManager.hasContext(enrichedItem.id)) {\n this.logger.debug('Skipping duplicate context by ID', { id: enrichedItem.id });\n skip = true;\n }\n break;\n case 'hash':\n if (this.state.contextManager.hasContentHash(enrichedItem.content)) {\n this.logger.debug('Skipping duplicate context by hash');\n skip = true;\n }\n break;\n case 'content':\n if (this.state.contextManager.hasSimilarContent(enrichedItem.content)) {\n this.logger.debug('Skipping duplicate context by content');\n skip = true;\n }\n break;\n }\n\n if (skip) {\n continue;\n }\n }\n\n itemsToAdd.push(enrichedItem);\n }\n\n // Only proceed if we have items to add\n if (itemsToAdd.length === 0) {\n return this;\n }\n\n // Calculate position\n const position = this.calculatePosition(opts.position);\n\n // Format and inject\n for (const item of itemsToAdd) {\n const formatted = this.formatContextItem(item, opts.format);\n const contextMessage: ConversationMessage = {\n role: 'user',\n content: formatted,\n };\n\n this.state.messages.splice(position, 0, contextMessage);\n\n // Track in context manager\n this.state.contextManager.track(item, position);\n }\n\n this.updateMetadata();\n return this;\n }\n\n /**\n * Inject system-level context\n */\n injectSystemContext(context: Section<Context> | string): this {\n this.logger.debug('Injecting system context');\n\n let messageContent: string;\n if (typeof context === 'string') {\n messageContent = context;\n } else {\n const formatter = this.config.formatter || Formatter.create();\n messageContent = formatter.format(context);\n }\n\n this.state.messages.push({\n role: 'system',\n content: messageContent,\n });\n\n this.updateMetadata();\n return this;\n }\n\n /**\n * Get the number of messages in the conversation\n */\n getMessageCount(): number {\n return this.state.messages.length;\n }\n\n /**\n * Get the last message in the conversation\n */\n getLastMessage(): ConversationMessage | undefined {\n return this.state.messages[this.state.messages.length - 1];\n }\n\n /**\n * Get all messages\n */\n getMessages(): ConversationMessage[] {\n return [...this.state.messages];\n }\n\n /**\n * Check if conversation has any tool calls\n */\n hasToolCalls(): boolean {\n return this.state.metadata.toolCallCount > 0;\n }\n\n /**\n * Get conversation metadata\n */\n getMetadata(): ConversationMetadata {\n return { ...this.state.metadata };\n }\n\n /**\n * Export messages in OpenAI format\n */\n toMessages(): ConversationMessage[] {\n return this.state.messages.map(msg => ({ ...msg }));\n }\n\n /**\n * Serialize conversation to JSON\n */\n toJSON(): string {\n const serialized: SerializedConversation = {\n messages: this.state.messages,\n metadata: {\n ...this.state.metadata,\n created: this.state.metadata.created.toISOString(),\n lastModified: this.state.metadata.lastModified.toISOString(),\n },\n contextProvided: Array.from(this.state.contextProvided),\n };\n\n return JSON.stringify(serialized, null, 2);\n }\n\n /**\n * Restore conversation from JSON\n */\n static fromJSON(json: string, config?: Partial<ConversationBuilderConfig>, logger?: any): ConversationBuilder {\n const parsed: SerializedConversation = JSON.parse(json);\n\n const builder = ConversationBuilder.create(\n {\n model: parsed.metadata.model,\n ...config,\n },\n logger\n );\n\n // Restore state\n builder.state.messages = parsed.messages;\n builder.state.metadata = {\n ...parsed.metadata,\n created: new Date(parsed.metadata.created),\n lastModified: new Date(parsed.metadata.lastModified),\n };\n builder.state.contextProvided = new Set(parsed.contextProvided);\n\n return builder;\n }\n\n /**\n * Clone the conversation for parallel exploration\n */\n clone(): ConversationBuilder {\n this.logger.debug('Cloning conversation');\n\n const cloned = ConversationBuilder.create(\n { ...this.config },\n this.logger\n );\n\n // Deep copy state (note: contextManager is already created in constructor)\n cloned.state.messages = this.state.messages.map(msg => ({ ...msg }));\n cloned.state.metadata = { ...this.state.metadata };\n cloned.state.contextProvided = new Set(this.state.contextProvided);\n\n // Copy context manager state\n const allContext = this.state.contextManager.getAll();\n allContext.forEach(item => {\n cloned.state.contextManager.track(item, item.position);\n });\n\n return cloned;\n }\n\n /**\n * Truncate conversation to last N messages\n */\n truncate(maxMessages: number): this {\n this.logger.debug('Truncating conversation', { maxMessages, current: this.state.messages.length });\n\n if (this.state.messages.length > maxMessages) {\n this.state.messages = this.state.messages.slice(-maxMessages);\n this.updateMetadata();\n }\n\n return this;\n }\n\n /**\n * Remove all messages of a specific type\n */\n removeMessagesOfType(role: 'system' | 'user' | 'assistant' | 'tool'): this {\n this.logger.debug('Removing messages of type', { role });\n\n this.state.messages = this.state.messages.filter(msg => msg.role !== role);\n this.updateMetadata();\n\n return this;\n }\n\n /**\n * Get the context manager\n */\n getContextManager(): ContextManager {\n return this.state.contextManager;\n }\n\n /**\n * Get conversation state (for conditional injection)\n */\n getState(): ConversationState {\n return {\n messages: [...this.state.messages],\n metadata: { ...this.state.metadata },\n contextProvided: new Set(this.state.contextProvided),\n contextManager: this.state.contextManager,\n };\n }\n\n // ===== SEMANTIC MESSAGE METHODS (Feature 5) =====\n\n /**\n * Add a system message using semantic builder\n */\n asSystem(content: string | Section<Instruction>): this {\n const message = MessageBuilder.system(this.logger)\n .withContent(content)\n .withFormatter(this.config.formatter || Formatter.create())\n .buildForModel(this.config.model);\n\n this.state.messages.push(message);\n this.updateMetadata();\n return this;\n }\n\n /**\n * Add a user message using semantic builder\n */\n asUser(content: string | Section<Content>): this {\n const message = MessageBuilder.user(this.logger)\n .withContent(content)\n .withFormatter(this.config.formatter || Formatter.create())\n .buildForModel(this.config.model);\n\n // Check budget if enabled\n if (this.budgetManager) {\n if (!this.budgetManager.canAddMessage(message, this.state.messages)) {\n this.logger.warn('Budget exceeded, compressing conversation');\n this.state.messages = this.budgetManager.compress(this.state.messages);\n }\n }\n\n this.state.messages.push(message);\n this.updateMetadata();\n return this;\n }\n\n /**\n * Add an assistant message using semantic builder\n */\n asAssistant(content: string | null, toolCalls?: ToolCall[]): this {\n const builder = MessageBuilder.assistant(this.logger)\n .withFormatter(this.config.formatter || Formatter.create());\n\n if (content) {\n builder.withContent(content);\n }\n\n if (toolCalls) {\n builder.withToolCalls(toolCalls);\n }\n\n const message = builder.buildForModel(this.config.model);\n\n if (toolCalls) {\n this.state.metadata.toolCallCount += toolCalls.length;\n }\n\n this.state.messages.push(message);\n this.updateMetadata();\n return this;\n }\n\n /**\n * Add a tool result message using semantic builder\n */\n asTool(callId: string, result: any, metadata?: Record<string, any>): this {\n const builder = MessageBuilder.tool(callId, this.logger)\n .withResult(result);\n\n if (metadata) {\n builder.withMetadata(metadata);\n }\n\n const message = builder.buildForModel(this.config.model);\n\n this.state.messages.push(message);\n this.updateMetadata();\n return this;\n }\n\n /**\n * Configure token budget\n */\n withTokenBudget(config: TokenBudgetConfig): this {\n this.logger.debug('Configuring token budget', { max: config.max });\n this.budgetManager = new TokenBudgetManager(config, this.config.model, this.logger);\n return this;\n }\n\n /**\n * Configure conversation logging\n */\n withLogging(config: LogConfig): this {\n this.logger.debug('Configuring conversation logging');\n this.conversationLogger = new ConversationLogger(config, this.logger);\n this.conversationLogger.onConversationStart({\n model: this.config.model,\n startTime: new Date(),\n });\n return this;\n }\n\n /**\n * Save conversation log\n */\n async saveLog(): Promise<string> {\n if (!this.conversationLogger) {\n throw new Error('Logging not enabled. Call withLogging() first.');\n }\n\n this.conversationLogger.onConversationEnd({\n totalMessages: this.state.messages.length,\n toolCallsExecuted: this.state.metadata.toolCallCount,\n iterations: 0,\n success: true,\n });\n\n return await this.conversationLogger.save();\n }\n\n /**\n * Get current token usage\n */\n getTokenUsage(): TokenUsage {\n if (!this.budgetManager) {\n return { used: 0, max: Infinity, remaining: Infinity, percentage: 0 };\n }\n return this.budgetManager.getCurrentUsage(this.state.messages);\n }\n\n /**\n * Manually compress conversation\n */\n compress(_strategy?: CompressionStrategy): this {\n if (this.budgetManager) {\n this.state.messages = this.budgetManager.compress(this.state.messages);\n }\n return this;\n }\n\n /**\n * Build and return the builder (for fluent API compatibility)\n */\n build(): this {\n return this;\n }\n\n /**\n * Calculate position for context injection\n */\n private calculatePosition(position: InjectOptions['position']): number {\n if (typeof position === 'number') {\n return Math.max(0, Math.min(position, this.state.messages.length));\n }\n\n switch (position) {\n case 'end':\n return this.state.messages.length;\n case 'before-last':\n return Math.max(0, this.state.messages.length - 1);\n case 'after-system': {\n // Find last system message (reverse search for compatibility)\n let lastSystemIdx = -1;\n for (let i = this.state.messages.length - 1; i >= 0; i--) {\n if (this.state.messages[i].role === 'system') {\n lastSystemIdx = i;\n break;\n }\n }\n return lastSystemIdx >= 0 ? lastSystemIdx + 1 : 0;\n }\n default:\n return this.state.messages.length;\n }\n }\n\n /**\n * Format context item based on format option\n */\n private formatContextItem(item: DynamicContentItem, format: 'structured' | 'inline' | 'reference'): string {\n switch (format) {\n case 'structured': {\n let result = `## ${item.title || 'Context'}\\n\\n${item.content}`;\n\n // Add metadata if available\n const metadata: string[] = [];\n if (item.source) {\n metadata.push(`Source: ${item.source}`);\n }\n if (item.timestamp) {\n metadata.push(`Timestamp: ${item.timestamp.toISOString()}`);\n }\n if (metadata.length > 0) {\n result += `\\n\\n_${metadata.join(' | ')}_`;\n }\n\n return result;\n }\n\n case 'inline':\n return `Note: ${item.title ? `${item.title}: ` : ''}${item.content}`;\n\n case 'reference':\n return `[Context Reference: ${item.id || 'unknown'}]\\nSee attached context${item.title ? ` for ${item.title}` : ''}`;\n\n default:\n return item.content;\n }\n }\n\n /**\n * Update metadata after state changes\n */\n private updateMetadata(): void {\n this.state.metadata.messageCount = this.state.messages.length;\n this.state.metadata.lastModified = new Date();\n }\n}\n\n/**\n * Export the builder for use in other modules\n */\nexport default ConversationBuilder;\n\n","import { z } from \"zod\";\nimport { DEFAULT_LOGGER, wrapLogger } from \"./logger\";\n\n// ===== TYPE DEFINITIONS =====\n\n/**\n * Parameter definition for a tool\n */\nexport interface ToolParameter {\n type: 'string' | 'number' | 'boolean' | 'array' | 'object';\n description: string;\n items?: ToolParameter;\n properties?: Record<string, ToolParameter>;\n required?: string[];\n enum?: string[];\n default?: any;\n}\n\n/**\n * Context provided to tool execution\n */\nexport interface ToolContext {\n workingDirectory?: string;\n storage?: any;\n logger?: any;\n conversationState?: any;\n [key: string]: any;\n}\n\n/**\n * Example usage of a tool\n */\nexport interface ToolExample {\n scenario: string;\n params: any;\n expectedResult: string;\n}\n\n/**\n * Cost hint for tool execution\n */\nexport type ToolCost = 'cheap' | 'moderate' | 'expensive';\n\n/**\n * Tool definition\n */\nexport interface Tool {\n name: string;\n description: string;\n parameters: {\n type: 'object';\n properties: Record<string, ToolParameter>;\n required?: string[];\n };\n execute: (params: any, context?: ToolContext) => Promise<any>;\n\n // Optional metadata\n category?: string;\n cost?: ToolCost;\n examples?: ToolExample[];\n}\n\n/**\n * OpenAI-compatible tool format\n */\nexport interface OpenAITool {\n type: 'function';\n function: {\n name: string;\n description: string;\n parameters: {\n type: 'object';\n properties: Record<string, any>;\n required?: string[];\n };\n };\n}\n\n/**\n * Anthropic-compatible tool format\n */\nexport interface AnthropicTool {\n name: string;\n description: string;\n input_schema: {\n type: 'object';\n properties: Record<string, any>;\n required?: string[];\n };\n}\n\n/**\n * Tool execution result\n */\nexport interface ToolExecutionResult {\n success: boolean;\n result?: any;\n error?: string;\n duration?: number;\n}\n\n/**\n * Usage statistics for a tool\n */\nexport interface ToolUsageStats {\n calls: number;\n failures: number;\n successRate: number;\n averageDuration?: number;\n}\n\n/**\n * Tool definition for export\n */\nexport interface ToolDefinition {\n name: string;\n description: string;\n parameters: Tool['parameters'];\n category?: string;\n cost?: ToolCost;\n examples?: ToolExample[];\n}\n\n// ===== VALIDATION SCHEMAS =====\n\n// Simplified parameter schema - just validate structure, not deep nesting\nconst ToolSchema = z.object({\n name: z.string().min(1),\n description: z.string().min(1),\n parameters: z.object({\n type: z.literal('object'),\n properties: z.record(z.string(), z.any()).default({}), // Allow any parameter structure\n required: z.array(z.string()).optional(),\n }).passthrough(), // Allow additional fields\n execute: z.custom<(params: any, context?: any) => Promise<any>>(\n (val) => typeof val === 'function',\n { message: 'execute must be a function' }\n ),\n category: z.string().optional(),\n cost: z.enum(['cheap', 'moderate', 'expensive']).optional(),\n examples: z.array(z.object({\n scenario: z.string(),\n params: z.any(),\n expectedResult: z.string(),\n })).optional(),\n}).passthrough(); // Allow additional fields at tool level too\n\n// ===== TOOL REGISTRY =====\n\n/**\n * ToolRegistry manages tool definitions and execution.\n *\n * Features:\n * - Register and manage tools\n * - Execute tools with context\n * - Track usage statistics\n * - Export to different formats (OpenAI, Anthropic)\n * - Filter by category\n *\n * @example\n * ```typescript\n * const registry = ToolRegistry.create({\n * workingDirectory: process.cwd(),\n * logger: myLogger\n * });\n *\n * registry.register({\n * name: 'read_file',\n * description: 'Read a file',\n * parameters: {\n * type: 'object',\n * properties: {\n * path: { type: 'string', description: 'File path' }\n * },\n * required: ['path']\n * },\n * execute: async ({ path }) => {\n * return await fs.readFile(path, 'utf-8');\n * }\n * });\n *\n * const result = await registry.execute('read_file', { path: 'test.txt' });\n * ```\n */\nexport class ToolRegistry {\n private tools: Map<string, Tool>;\n private context: ToolContext;\n private logger: any;\n private usageStats: Map<string, { calls: number; failures: number; totalDuration: number }>;\n\n private constructor(context: ToolContext = {}, logger?: any) {\n this.tools = new Map();\n this.context = context;\n this.logger = wrapLogger(logger || DEFAULT_LOGGER, 'ToolRegistry');\n this.usageStats = new Map();\n\n this.logger.debug('Created ToolRegistry');\n }\n\n /**\n * Create a new ToolRegistry instance\n */\n static create(context?: ToolContext, logger?: any): ToolRegistry {\n return new ToolRegistry(context, logger);\n }\n\n /**\n * Register a single tool\n */\n register(tool: Tool): void {\n // Validate tool\n try {\n ToolSchema.parse(tool);\n } catch (error) {\n throw new Error(`Invalid tool definition for \"${tool.name}\": ${error}`);\n }\n\n if (this.tools.has(tool.name)) {\n this.logger.warn(`Tool \"${tool.name}\" already registered, overwriting`);\n }\n\n this.tools.set(tool.name, tool);\n this.usageStats.set(tool.name, { calls: 0, failures: 0, totalDuration: 0 });\n\n this.logger.debug('Registered tool', { name: tool.name, category: tool.category });\n }\n\n /**\n * Register multiple tools at once\n */\n registerAll(tools: Tool[]): void {\n this.logger.debug('Registering multiple tools', { count: tools.length });\n\n tools.forEach(tool => this.register(tool));\n }\n\n /**\n * Get a tool by name\n */\n get(name: string): Tool | undefined {\n return this.tools.get(name);\n }\n\n /**\n * Get all registered tools\n */\n getAll(): Tool[] {\n return Array.from(this.tools.values());\n }\n\n /**\n * Get tools by category\n */\n getByCategory(category: string): Tool[] {\n return this.getAll().filter(tool => tool.category === category);\n }\n\n /**\n * Check if a tool is registered\n */\n has(name: string): boolean {\n return this.tools.has(name);\n }\n\n /**\n * Get number of registered tools\n */\n count(): number {\n return this.tools.size;\n }\n\n /**\n * Execute a tool by name\n */\n async execute(name: string, params: any): Promise<any> {\n const tool = this.tools.get(name);\n\n if (!tool) {\n throw new Error(`Tool \"${name}\" not found`);\n }\n\n this.logger.debug('Executing tool', { name, params });\n\n const startTime = Date.now();\n const stats = this.usageStats.get(name)!;\n stats.calls++;\n\n try {\n const result = await tool.execute(params, this.context);\n\n const duration = Date.now() - startTime;\n stats.totalDuration += duration;\n\n this.logger.debug('Tool execution succeeded', { name, duration });\n\n return result;\n } catch (error) {\n stats.failures++;\n\n this.logger.error('Tool execution failed', { name, error });\n\n throw error;\n }\n }\n\n /**\n * Execute multiple tools in sequence\n */\n async executeBatch(calls: Array<{ name: string; params: any }>): Promise<any[]> {\n this.logger.debug('Executing batch', { count: calls.length });\n\n const results: any[] = [];\n\n for (const call of calls) {\n try {\n const result = await this.execute(call.name, call.params);\n results.push(result);\n } catch (error) {\n results.push({ error: String(error) });\n }\n }\n\n return results;\n }\n\n /**\n * Export tools in OpenAI format\n */\n toOpenAIFormat(): OpenAITool[] {\n return this.getAll().map(tool => ({\n type: 'function' as const,\n function: {\n name: tool.name,\n description: tool.description,\n parameters: {\n type: 'object' as const,\n properties: tool.parameters.properties,\n required: tool.parameters.required,\n },\n },\n }));\n }\n\n /**\n * Export tools in Anthropic format\n */\n toAnthropicFormat(): AnthropicTool[] {\n return this.getAll().map(tool => ({\n name: tool.name,\n description: tool.description,\n input_schema: {\n type: 'object' as const,\n properties: tool.parameters.properties,\n required: tool.parameters.required,\n },\n }));\n }\n\n /**\n * Get tool definitions (without execute function)\n */\n getDefinitions(): ToolDefinition[] {\n return this.getAll().map(tool => ({\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n category: tool.category,\n cost: tool.cost,\n examples: tool.examples,\n }));\n }\n\n /**\n * Get usage statistics for all tools\n */\n getUsageStats(): Map<string, ToolUsageStats> {\n const stats = new Map<string, ToolUsageStats>();\n\n this.usageStats.forEach((rawStats, name) => {\n stats.set(name, {\n calls: rawStats.calls,\n failures: rawStats.failures,\n successRate: rawStats.calls > 0\n ? (rawStats.calls - rawStats.failures) / rawStats.calls\n : 0,\n averageDuration: rawStats.calls > 0\n ? rawStats.totalDuration / rawStats.calls\n : undefined,\n });\n });\n\n return stats;\n }\n\n /**\n * Get most frequently used tools\n */\n getMostUsed(limit: number = 5): Tool[] {\n const sorted = Array.from(this.usageStats.entries())\n .sort((a, b) => b[1].calls - a[1].calls)\n .slice(0, limit)\n .map(([name]) => this.tools.get(name)!)\n .filter(tool => tool !== undefined);\n\n return sorted;\n }\n\n /**\n * Get list of all categories\n */\n getCategories(): string[] {\n const categories = new Set<string>();\n\n this.getAll().forEach(tool => {\n if (tool.category) {\n categories.add(tool.category);\n }\n });\n\n return Array.from(categories).sort();\n }\n\n /**\n * Update execution context\n */\n updateContext(context: Partial<ToolContext>): void {\n this.context = { ...this.context, ...context };\n this.logger.debug('Updated context', { keys: Object.keys(context) });\n }\n\n /**\n * Get current context\n */\n getContext(): ToolContext {\n return { ...this.context };\n }\n\n /**\n * Clear all tools\n */\n clear(): void {\n this.logger.debug('Clearing all tools');\n this.tools.clear();\n this.usageStats.clear();\n }\n\n /**\n * Unregister a specific tool\n */\n unregister(name: string): boolean {\n if (this.tools.has(name)) {\n this.tools.delete(name);\n this.usageStats.delete(name);\n this.logger.debug('Unregistered tool', { name });\n return true;\n }\n\n return false;\n }\n\n /**\n * Reset usage statistics\n */\n resetStats(): void {\n this.logger.debug('Resetting usage statistics');\n\n this.usageStats.forEach(stats => {\n stats.calls = 0;\n stats.failures = 0;\n stats.totalDuration = 0;\n });\n }\n}\n\n/**\n * Export the registry for use in other modules\n */\nexport default ToolRegistry;\n\n","import { DEFAULT_LOGGER, wrapLogger } from \"./logger\";\nimport type { ConversationMessage } from \"./conversation\";\nimport type { StrategyResult } from \"./iteration-strategy\";\nimport { TokenCounter } from \"./token-budget\";\nimport { Model } from \"./chat\";\n\n// ===== TYPE DEFINITIONS =====\n\n/**\n * Tool execution metric for a single call\n */\nexport interface ToolExecutionMetric {\n name: string;\n iteration: number;\n timestamp: string;\n duration: number;\n success: boolean;\n error?: string;\n inputSize?: number;\n outputSize?: number;\n}\n\n/**\n * Aggregated statistics for a tool\n */\nexport interface ToolStats {\n name: string;\n total: number;\n success: number;\n failures: number;\n totalDuration: number;\n avgDuration: number;\n successRate: number;\n}\n\n/**\n * Token usage metrics\n */\nexport interface TokenUsageMetrics {\n total: number;\n systemPrompt: number;\n userContent: number;\n toolResults: number;\n conversation: number;\n percentage?: number;\n budget?: number;\n}\n\n/**\n * Complete execution metrics\n */\nexport interface AgenticExecutionMetrics {\n startTime: Date;\n endTime?: Date;\n totalDuration: number;\n iterations: number;\n toolCallsExecuted: number;\n toolMetrics: ToolExecutionMetric[];\n toolStats: Map<string, ToolStats>;\n messageCount: number;\n tokenUsage?: TokenUsageMetrics;\n investigationDepth: 'shallow' | 'moderate' | 'deep';\n toolDiversity: number;\n iterationEfficiency: number;\n}\n\n/**\n * Recommendation type\n */\nexport type RecommendationType =\n | 'tool-failure'\n | 'performance'\n | 'investigation-depth'\n | 'token-budget'\n | 'strategy-adjustment'\n | 'quality-issue';\n\n/**\n * Recommendation from analysis\n */\nexport interface Recommendation {\n type: RecommendationType;\n severity: 'high' | 'medium' | 'low';\n message: string;\n suggestion?: string;\n relatedTools?: string[];\n relatedMetrics?: any;\n}\n\n/**\n * Tool effectiveness analysis\n */\nexport interface ToolEffectivenessAnalysis {\n overallSuccessRate: number;\n toolStats: Map<string, ToolStats>;\n failedTools: Array<{ name: string; failures: number; rate: number }>;\n slowTools: Array<{ name: string; avgDuration: number }>;\n mostUsedTools: Array<{ name: string; count: number }>;\n}\n\n/**\n * Performance insights\n */\nexport interface PerformanceInsights {\n totalDuration: number;\n avgIterationDuration: number;\n slowestTool?: { name: string; duration: number };\n fastestTool?: { name: string; duration: number };\n bottlenecks: string[];\n}\n\n/**\n * Timeline event\n */\nexport interface TimelineEvent {\n timestamp: string;\n iteration: number;\n type: 'message' | 'tool-call' | 'tool-result';\n description: string;\n duration?: number;\n success?: boolean;\n}\n\n/**\n * Quality assessment\n */\nexport interface QualityAssessment {\n investigationDepth: 'shallow' | 'moderate' | 'deep';\n toolDiversity: number;\n iterationEfficiency: number;\n coverage: number;\n overall: number; // 0-1\n}\n\n/**\n * Complete reflection report\n */\nexport interface ReflectionReport {\n id: string;\n generated: Date;\n summary: {\n startTime: Date;\n endTime: Date;\n totalDuration: number;\n iterations: number;\n toolCallsExecuted: number;\n uniqueToolsUsed: number;\n successRate: number;\n };\n toolEffectiveness: ToolEffectivenessAnalysis;\n performanceInsights: PerformanceInsights;\n timeline: TimelineEvent[];\n tokenUsage?: TokenUsageMetrics;\n qualityAssessment: QualityAssessment;\n recommendations: Recommendation[];\n conversationHistory?: ConversationMessage[];\n output?: string;\n}\n\n/**\n * Reflection configuration\n */\nexport interface ReflectionConfig {\n enabled: boolean;\n outputPath?: string;\n format?: 'markdown' | 'json' | 'html';\n includeConversation?: boolean;\n includeRecommendations?: boolean;\n sections?: ReflectionSection[];\n}\n\nexport type ReflectionSection =\n | 'summary'\n | 'tool-effectiveness'\n | 'performance'\n | 'timeline'\n | 'token-usage'\n | 'quality-assessment'\n | 'recommendations'\n | 'conversation'\n | 'output';\n\n// ===== METRICS COLLECTOR =====\n\n/**\n * MetricsCollector gathers execution metrics during agentic execution.\n *\n * @example\n * ```typescript\n * const collector = new MetricsCollector();\n *\n * collector.recordToolCall('read_file', iteration, duration, true);\n * collector.recordToolCall('search_code', iteration, duration, false, error);\n *\n * const metrics = collector.getMetrics(messages);\n * ```\n */\nexport class MetricsCollector {\n private startTime: Date;\n private toolMetrics: ToolExecutionMetric[];\n private iterationCount: number;\n private logger: any;\n\n constructor(logger?: any) {\n this.startTime = new Date();\n this.toolMetrics = [];\n this.iterationCount = 0;\n this.logger = wrapLogger(logger || DEFAULT_LOGGER, 'MetricsCollector');\n }\n\n /**\n * Record a tool execution\n */\n recordToolCall(\n name: string,\n iteration: number,\n duration: number,\n success: boolean,\n error?: string,\n inputSize?: number,\n outputSize?: number\n ): void {\n this.toolMetrics.push({\n name,\n iteration,\n timestamp: new Date().toISOString(),\n duration,\n success,\n error,\n inputSize,\n outputSize,\n });\n }\n\n /**\n * Increment iteration count\n */\n incrementIteration(): void {\n this.iterationCount++;\n }\n\n /**\n * Get complete metrics\n */\n getMetrics(messages: ConversationMessage[], model?: Model): AgenticExecutionMetrics {\n const endTime = new Date();\n const totalDuration = endTime.getTime() - this.startTime.getTime();\n\n // Calculate tool statistics\n const toolStats = this.calculateToolStats();\n\n // Count unique tools\n const uniqueTools = new Set(this.toolMetrics.map(m => m.name));\n\n // Calculate investigation depth\n const totalTools = this.toolMetrics.length;\n const investigationDepth: 'shallow' | 'moderate' | 'deep' =\n totalTools < 3 ? 'shallow' :\n totalTools < 8 ? 'moderate' : 'deep';\n\n // Calculate iteration efficiency\n const iterationEfficiency = this.iterationCount > 0\n ? totalTools / this.iterationCount\n : 0;\n\n // Calculate token usage if model provided\n let tokenUsage: TokenUsageMetrics | undefined;\n if (model) {\n try {\n const counter = new TokenCounter(model);\n const total = counter.countConversation(messages);\n counter.dispose();\n\n tokenUsage = {\n total,\n systemPrompt: 0, // Could be calculated by filtering messages\n userContent: 0,\n toolResults: 0,\n conversation: total,\n };\n } catch (error) {\n this.logger.warn('Could not calculate token usage', { error });\n }\n }\n\n return {\n startTime: this.startTime,\n endTime,\n totalDuration,\n iterations: this.iterationCount,\n toolCallsExecuted: this.toolMetrics.length,\n toolMetrics: this.toolMetrics,\n toolStats,\n messageCount: messages.length,\n tokenUsage,\n investigationDepth,\n toolDiversity: uniqueTools.size,\n iterationEfficiency,\n };\n }\n\n /**\n * Calculate aggregated tool statistics\n */\n private calculateToolStats(): Map<string, ToolStats> {\n const stats = new Map<string, ToolStats>();\n\n // Group by tool name\n const byTool = new Map<string, ToolExecutionMetric[]>();\n for (const metric of this.toolMetrics) {\n if (!byTool.has(metric.name)) {\n byTool.set(metric.name, []);\n }\n byTool.get(metric.name)!.push(metric);\n }\n\n // Calculate stats for each tool\n for (const [name, metrics] of byTool) {\n const total = metrics.length;\n const success = metrics.filter(m => m.success).length;\n const failures = total - success;\n const totalDuration = metrics.reduce((sum, m) => sum + m.duration, 0);\n const avgDuration = totalDuration / total;\n const successRate = total > 0 ? success / total : 0;\n\n stats.set(name, {\n name,\n total,\n success,\n failures,\n totalDuration,\n avgDuration,\n successRate,\n });\n }\n\n return stats;\n }\n}\n\n// ===== REFLECTION REPORT GENERATOR =====\n\n/**\n * ReflectionReportGenerator generates analysis reports from execution metrics.\n *\n * @example\n * ```typescript\n * const generator = new ReflectionReportGenerator();\n * const report = generator.generate(metrics, result);\n *\n * console.log('Success rate:', report.toolEffectiveness.overallSuccessRate);\n * console.log('Recommendations:', report.recommendations.length);\n * ```\n */\nexport class ReflectionReportGenerator {\n private logger: any;\n\n constructor(logger?: any) {\n this.logger = wrapLogger(logger || DEFAULT_LOGGER, 'ReflectionReportGenerator');\n }\n\n /**\n * Generate reflection report\n */\n generate(\n metrics: AgenticExecutionMetrics,\n result: StrategyResult\n ): ReflectionReport {\n this.logger.debug('Generating reflection report');\n\n const report: ReflectionReport = {\n id: `reflection-${Date.now()}`,\n generated: new Date(),\n summary: this.generateSummary(metrics),\n toolEffectiveness: this.analyzeToolEffectiveness(metrics),\n performanceInsights: this.analyzePerformance(metrics),\n timeline: this.buildTimeline(metrics),\n tokenUsage: metrics.tokenUsage,\n qualityAssessment: this.assessQuality(metrics),\n recommendations: this.generateRecommendations(metrics, result),\n conversationHistory: result.conversation.getMessages(),\n output: result.finalMessage?.content || undefined,\n };\n\n this.logger.info('Generated reflection report', {\n recommendations: report.recommendations.length,\n toolsAnalyzed: metrics.toolStats.size\n });\n\n return report;\n }\n\n /**\n * Generate execution summary\n */\n private generateSummary(metrics: AgenticExecutionMetrics) {\n const successfulTools = metrics.toolMetrics.filter(m => m.success).length;\n const successRate = metrics.toolMetrics.length > 0\n ? successfulTools / metrics.toolMetrics.length\n : 0;\n\n return {\n startTime: metrics.startTime,\n endTime: metrics.endTime || new Date(),\n totalDuration: metrics.totalDuration,\n iterations: metrics.iterations,\n toolCallsExecuted: metrics.toolCallsExecuted,\n uniqueToolsUsed: metrics.toolDiversity,\n successRate,\n };\n }\n\n /**\n * Analyze tool effectiveness\n */\n private analyzeToolEffectiveness(metrics: AgenticExecutionMetrics): ToolEffectivenessAnalysis {\n const successfulTools = metrics.toolMetrics.filter(m => m.success).length;\n const overallSuccessRate = metrics.toolMetrics.length > 0\n ? successfulTools / metrics.toolMetrics.length\n : 1;\n\n // Find failed tools\n const failedTools = Array.from(metrics.toolStats.values())\n .filter(stats => stats.failures > 0)\n .map(stats => ({\n name: stats.name,\n failures: stats.failures,\n rate: stats.successRate\n }))\n .sort((a, b) => b.failures - a.failures);\n\n // Find slow tools (>1s average)\n const slowTools = Array.from(metrics.toolStats.values())\n .filter(stats => stats.avgDuration > 1000)\n .map(stats => ({\n name: stats.name,\n avgDuration: stats.avgDuration\n }))\n .sort((a, b) => b.avgDuration - a.avgDuration);\n\n // Most used tools\n const mostUsedTools = Array.from(metrics.toolStats.values())\n .map(stats => ({\n name: stats.name,\n count: stats.total\n }))\n .sort((a, b) => b.count - a.count)\n .slice(0, 5);\n\n return {\n overallSuccessRate,\n toolStats: metrics.toolStats,\n failedTools,\n slowTools,\n mostUsedTools,\n };\n }\n\n /**\n * Analyze performance\n */\n private analyzePerformance(metrics: AgenticExecutionMetrics): PerformanceInsights {\n const avgIterationDuration = metrics.iterations > 0\n ? metrics.totalDuration / metrics.iterations\n : 0;\n\n // Find slowest and fastest tools\n const toolsBySpeed = Array.from(metrics.toolStats.values())\n .sort((a, b) => b.avgDuration - a.avgDuration);\n\n const slowestTool = toolsBySpeed[0]\n ? { name: toolsBySpeed[0].name, duration: toolsBySpeed[0].avgDuration }\n : undefined;\n\n const fastestTool = toolsBySpeed[toolsBySpeed.length - 1]\n ? { name: toolsBySpeed[toolsBySpeed.length - 1].name, duration: toolsBySpeed[toolsBySpeed.length - 1].avgDuration }\n : undefined;\n\n // Identify bottlenecks\n const bottlenecks: string[] = [];\n if (slowestTool && slowestTool.duration > 1000) {\n bottlenecks.push(`${slowestTool.name} averaging ${slowestTool.duration}ms`);\n }\n if (avgIterationDuration > 10000) {\n bottlenecks.push(`Slow iterations averaging ${avgIterationDuration.toFixed(0)}ms`);\n }\n\n return {\n totalDuration: metrics.totalDuration,\n avgIterationDuration,\n slowestTool,\n fastestTool,\n bottlenecks,\n };\n }\n\n /**\n * Build execution timeline\n */\n private buildTimeline(metrics: AgenticExecutionMetrics): TimelineEvent[] {\n const events: TimelineEvent[] = [];\n\n for (const metric of metrics.toolMetrics) {\n events.push({\n timestamp: metric.timestamp,\n iteration: metric.iteration,\n type: 'tool-call',\n description: `${metric.name}(${metric.success ? 'success' : 'failure'})`,\n duration: metric.duration,\n success: metric.success,\n });\n }\n\n return events.sort((a, b) =>\n new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime()\n );\n }\n\n /**\n * Assess investigation quality\n */\n private assessQuality(metrics: AgenticExecutionMetrics): QualityAssessment {\n const toolDiversity = metrics.toolDiversity;\n const iterationEfficiency = metrics.iterationEfficiency;\n\n // Calculate coverage (tools / iterations - aim for 1-2)\n const coverage = metrics.iterations > 0\n ? Math.min(1, metrics.toolCallsExecuted / (metrics.iterations * 2))\n : 0;\n\n // Overall quality score (0-1)\n const depthScore = metrics.investigationDepth === 'deep' ? 1 :\n metrics.investigationDepth === 'moderate' ? 0.7 : 0.3;\n const diversityScore = Math.min(1, toolDiversity / 5); // 5+ tools = max score\n const efficiencyScore = Math.min(1, iterationEfficiency / 2); // 2 tools/iteration = max\n\n const overall = (depthScore + diversityScore + efficiencyScore) / 3;\n\n return {\n investigationDepth: metrics.investigationDepth,\n toolDiversity,\n iterationEfficiency,\n coverage,\n overall,\n };\n }\n\n /**\n * Generate recommendations\n */\n private generateRecommendations(\n metrics: AgenticExecutionMetrics,\n _result: StrategyResult\n ): Recommendation[] {\n const recommendations: Recommendation[] = [];\n\n // Check for tool failures\n const failedTools = Array.from(metrics.toolStats.values())\n .filter(stats => stats.failures > 0);\n\n if (failedTools.length > 0) {\n recommendations.push({\n type: 'tool-failure',\n severity: 'high',\n message: `${failedTools.length} tool(s) had failures. Review tool implementations.`,\n suggestion: 'Check error logs and validate tool parameters',\n relatedTools: failedTools.map(t => t.name),\n });\n }\n\n // Check for shallow investigation\n if (metrics.investigationDepth === 'shallow' && metrics.toolCallsExecuted < 2) {\n recommendations.push({\n type: 'investigation-depth',\n severity: 'medium',\n message: 'Investigation was shallow. Consider adjusting strategy to encourage more tool usage.',\n suggestion: 'Use investigateThenRespond strategy with requireMinimumTools',\n });\n }\n\n // Check for slow tools\n const slowTools = Array.from(metrics.toolStats.values())\n .filter(stats => stats.avgDuration > 1000);\n\n if (slowTools.length > 0) {\n recommendations.push({\n type: 'performance',\n severity: 'medium',\n message: `${slowTools.length} tool(s) taking >1s. Consider optimization.`,\n suggestion: 'Add caching, reduce scope, or optimize implementations',\n relatedTools: slowTools.map(t => t.name),\n });\n }\n\n // Check token usage\n if (metrics.tokenUsage) {\n if (metrics.tokenUsage.percentage && metrics.tokenUsage.percentage > 80) {\n recommendations.push({\n type: 'token-budget',\n severity: 'high',\n message: `Token usage at ${metrics.tokenUsage.percentage.toFixed(1)}%. Increase budget or enable compression.`,\n suggestion: 'Increase max tokens or use priority-based compression',\n });\n }\n }\n\n return recommendations;\n }\n\n /**\n * Format report as markdown\n */\n formatMarkdown(report: ReflectionReport): string {\n let markdown = `# Agentic Execution - Self-Reflection Report\\n\\n`;\n markdown += `**Generated:** ${report.generated.toISOString()}\\n`;\n markdown += `**Duration:** ${(report.summary.totalDuration / 1000).toFixed(1)}s\\n\\n`;\n\n markdown += `## Execution Summary\\n\\n`;\n markdown += `- **Iterations**: ${report.summary.iterations}\\n`;\n markdown += `- **Tool Calls**: ${report.summary.toolCallsExecuted}\\n`;\n markdown += `- **Unique Tools**: ${report.summary.uniqueToolsUsed}\\n`;\n markdown += `- **Investigation Depth**: ${report.qualityAssessment.investigationDepth}\\n`;\n markdown += `- **Success Rate**: ${(report.summary.successRate * 100).toFixed(1)}%\\n\\n`;\n\n markdown += `## Tool Effectiveness Analysis\\n\\n`;\n markdown += `| Tool | Calls | Success | Failures | Success Rate | Avg Duration |\\n`;\n markdown += `|------|-------|---------|----------|--------------|---------------|\\n`;\n\n for (const [name, stats] of report.toolEffectiveness.toolStats) {\n markdown += `| ${name} | ${stats.total} | ${stats.success} | ${stats.failures} | `;\n markdown += `${(stats.successRate * 100).toFixed(1)}% | ${stats.avgDuration.toFixed(0)}ms |\\n`;\n }\n\n if (report.toolEffectiveness.failedTools.length > 0) {\n markdown += `\\n### Tools with Failures\\n\\n`;\n for (const tool of report.toolEffectiveness.failedTools) {\n markdown += `- **${tool.name}**: ${tool.failures} failures (${(tool.rate * 100).toFixed(1)}% success)\\n`;\n }\n }\n\n if (report.toolEffectiveness.slowTools.length > 0) {\n markdown += `\\n### Slow Tools (>1s average)\\n\\n`;\n for (const tool of report.toolEffectiveness.slowTools) {\n markdown += `- **${tool.name}**: ${(tool.avgDuration / 1000).toFixed(2)}s average\\n`;\n }\n }\n\n markdown += `\\n## Quality Assessment\\n\\n`;\n markdown += `- **Overall Score**: ${(report.qualityAssessment.overall * 100).toFixed(0)}%\\n`;\n markdown += `- **Investigation Depth**: ${report.qualityAssessment.investigationDepth}\\n`;\n markdown += `- **Tool Diversity**: ${report.qualityAssessment.toolDiversity} unique tools\\n`;\n markdown += `- **Efficiency**: ${report.qualityAssessment.iterationEfficiency.toFixed(2)} tools per iteration\\n\\n`;\n\n if (report.recommendations.length > 0) {\n markdown += `## Recommendations\\n\\n`;\n\n const byPriority = {\n high: report.recommendations.filter(r => r.severity === 'high'),\n medium: report.recommendations.filter(r => r.severity === 'medium'),\n low: report.recommendations.filter(r => r.severity === 'low'),\n };\n\n if (byPriority.high.length > 0) {\n markdown += `### 🔴 High Priority\\n\\n`;\n byPriority.high.forEach((rec, i) => {\n markdown += `${i + 1}. **${rec.message}**\\n`;\n if (rec.suggestion) {\n markdown += ` - Suggestion: ${rec.suggestion}\\n`;\n }\n markdown += `\\n`;\n });\n }\n\n if (byPriority.medium.length > 0) {\n markdown += `### 🟡 Medium Priority\\n\\n`;\n byPriority.medium.forEach((rec, i) => {\n markdown += `${i + 1}. **${rec.message}**\\n`;\n if (rec.suggestion) {\n markdown += ` - Suggestion: ${rec.suggestion}\\n`;\n }\n markdown += `\\n`;\n });\n }\n }\n\n if (report.output) {\n markdown += `## Final Output\\n\\n`;\n markdown += `\\`\\`\\`\\n${report.output}\\n\\`\\`\\`\\n\\n`;\n }\n\n markdown += `---\\n\\n`;\n markdown += `*Report generated by RiotPrompt Agentic Reflection System*\\n`;\n\n return markdown;\n }\n}\n\nexport default ReflectionReportGenerator;\n\n","import { ConversationBuilder, type ConversationMessage, type ToolCall } from \"./conversation\";\nimport { ToolRegistry, type Tool } from \"./tools\";\nimport { DEFAULT_LOGGER, wrapLogger } from \"./logger\";\nimport { MetricsCollector, ReflectionReportGenerator, type ReflectionReport, type ReflectionConfig } from \"./reflection\";\n\n// ===== TYPE DEFINITIONS =====\n\n/**\n * Tool usage policy for a phase\n */\nexport type ToolUsagePolicy = 'required' | 'encouraged' | 'optional' | 'forbidden';\n\n/**\n * LLM client interface (generic, provider-agnostic)\n */\nexport interface LLMClient {\n complete(messages: ConversationMessage[], tools?: any[]): Promise<{\n content: string | null;\n tool_calls?: ToolCall[];\n }>;\n}\n\n/**\n * Context provided to strategy execution\n */\nexport interface StrategyContext {\n conversation: ConversationBuilder;\n tools: ToolRegistry;\n llm: LLMClient;\n state: StrategyState;\n}\n\n/**\n * Current state of strategy execution\n */\nexport interface StrategyState {\n phase: string | number;\n iteration: number;\n toolCallsExecuted: number;\n startTime: number;\n insights: Insight[];\n findings: any[];\n errors: Error[];\n [key: string]: any;\n}\n\n/**\n * Insight discovered during execution\n */\nexport interface Insight {\n source: string;\n content: string;\n confidence: number;\n relatedTo?: string[];\n}\n\n/**\n * Result of tool execution\n */\nexport interface ToolResult {\n callId: string;\n toolName: string;\n result: any;\n error?: Error;\n duration: number;\n}\n\n/**\n * Action to take after iteration\n */\nexport type IterationAction = 'continue' | 'stop' | 'next-phase';\n\n/**\n * Action to take for tool call\n */\nexport type ToolCallAction = 'execute' | 'skip' | 'defer';\n\n/**\n * Result of a phase\n */\nexport interface PhaseResult {\n name: string;\n iterations: number;\n toolCalls: number;\n success: boolean;\n insights?: Insight[];\n}\n\n/**\n * Final strategy result\n */\nexport interface StrategyResult {\n finalMessage: ConversationMessage | undefined;\n phases: PhaseResult[];\n totalIterations: number;\n toolCallsExecuted: number;\n duration: number;\n success: boolean;\n conversation: ConversationBuilder;\n reflection?: ReflectionReport;\n}\n\n/**\n * Configuration for a strategy phase\n */\nexport interface StrategyPhase {\n name: string;\n maxIterations: number;\n toolUsage: ToolUsagePolicy;\n allowedTools?: string[];\n minToolCalls?: number;\n maxToolCalls?: number;\n instructions?: string;\n earlyExit?: boolean;\n requireFinalAnswer?: boolean;\n adaptiveDepth?: boolean;\n continueIf?: (state: StrategyState) => boolean;\n skipIf?: (state: StrategyState) => boolean;\n}\n\n/**\n * Iteration strategy interface\n */\nexport interface IterationStrategy {\n name: string;\n description: string;\n maxIterations: number;\n maxToolCalls?: number;\n timeoutMs?: number;\n phases?: StrategyPhase[];\n\n // Lifecycle hooks\n onStart?: (context: StrategyContext) => Promise<void>;\n onIteration?: (iteration: number, state: StrategyState) => Promise<IterationAction>;\n onToolCall?: (toolCall: ToolCall, state: StrategyState) => Promise<ToolCallAction>;\n onToolResult?: (result: ToolResult, state: StrategyState) => Promise<void>;\n onPhaseComplete?: (phase: PhaseResult, state: StrategyState) => Promise<void>;\n onComplete?: (result: StrategyResult) => Promise<void>;\n\n // Decision logic\n shouldContinue?: (state: StrategyState) => boolean;\n shouldCallTool?: (tool: Tool, state: StrategyState) => boolean;\n selectTools?: (available: Tool[], state: StrategyState) => Tool[];\n}\n\n// ===== STRATEGY EXECUTOR =====\n\n/**\n * StrategyExecutor executes iteration strategies.\n *\n * Features:\n * - Execute multi-phase strategies\n * - Manage tool calls and results\n * - Track state and metrics\n * - Handle timeouts and errors\n * - Provide lifecycle hooks\n *\n * @example\n * ```typescript\n * const executor = new StrategyExecutor(llmClient);\n *\n * const result = await executor.execute(\n * conversation,\n * toolRegistry,\n * strategy\n * );\n *\n * console.log('Completed in', result.totalIterations, 'iterations');\n * console.log('Used', result.toolCallsExecuted, 'tools');\n * ```\n */\nexport class StrategyExecutor {\n private llm: LLMClient;\n private logger: any;\n private metricsCollector?: MetricsCollector;\n private reflectionConfig?: ReflectionConfig;\n\n constructor(llm: LLMClient, logger?: any) {\n this.llm = llm;\n this.logger = wrapLogger(logger || DEFAULT_LOGGER, 'StrategyExecutor');\n }\n\n /**\n * Enable reflection generation\n */\n withReflection(config: ReflectionConfig): this {\n this.reflectionConfig = config;\n return this;\n }\n\n /**\n * Execute a strategy\n */\n async execute(\n conversation: ConversationBuilder,\n tools: ToolRegistry,\n strategy: IterationStrategy\n ): Promise<StrategyResult> {\n const startTime = Date.now();\n\n // Initialize metrics collector if reflection enabled\n if (this.reflectionConfig?.enabled) {\n this.metricsCollector = new MetricsCollector(this.logger);\n }\n\n const state: StrategyState = {\n phase: 0,\n iteration: 0,\n toolCallsExecuted: 0,\n startTime,\n insights: [],\n findings: [],\n errors: [],\n };\n\n this.logger.info('Starting strategy execution', { strategy: strategy.name });\n\n const context: StrategyContext = { conversation, tools, llm: this.llm, state };\n\n try {\n // Initialize\n await strategy.onStart?.(context);\n\n // Execute phases or single loop\n const phases = strategy.phases || [\n {\n name: 'default',\n maxIterations: strategy.maxIterations,\n toolUsage: 'encouraged' as ToolUsagePolicy,\n }\n ];\n\n const phaseResults: PhaseResult[] = [];\n\n for (const phase of phases) {\n // Check if should skip phase\n if (phase.skipIf?.(state)) {\n this.logger.debug('Skipping phase', { phase: phase.name });\n continue;\n }\n\n state.phase = phase.name;\n state.iteration = 0;\n\n this.logger.debug('Starting phase', { phase: phase.name });\n\n const phaseResult = await this.executePhase(\n conversation,\n tools,\n phase,\n state,\n strategy\n );\n\n phaseResults.push(phaseResult);\n\n // Track iteration for metrics\n if (this.metricsCollector) {\n this.metricsCollector.incrementIteration();\n }\n\n await strategy.onPhaseComplete?.(phaseResult, state);\n\n // Check if should continue\n if (strategy.shouldContinue && !strategy.shouldContinue(state)) {\n this.logger.debug('Strategy decided to stop');\n break;\n }\n }\n\n const duration = Date.now() - startTime;\n\n const result: StrategyResult = {\n finalMessage: conversation.getLastMessage(),\n phases: phaseResults,\n totalIterations: state.iteration,\n toolCallsExecuted: state.toolCallsExecuted,\n duration,\n success: true,\n conversation,\n };\n\n // Generate reflection if enabled\n if (this.metricsCollector && this.reflectionConfig?.enabled) {\n const metrics = this.metricsCollector.getMetrics(\n conversation.getMessages(),\n conversation.getMetadata().model\n );\n\n const generator = new ReflectionReportGenerator(this.logger);\n result.reflection = generator.generate(metrics, result);\n\n // Save reflection if output path specified\n if (this.reflectionConfig.outputPath && result.reflection) {\n await this.saveReflection(result.reflection, this.reflectionConfig);\n }\n }\n\n await strategy.onComplete?.(result);\n\n this.logger.info('Strategy execution complete', {\n iterations: result.totalIterations,\n toolCalls: result.toolCallsExecuted,\n duration\n });\n\n return result;\n\n } catch (error) {\n this.logger.error('Strategy execution failed', { error });\n\n return {\n finalMessage: conversation.getLastMessage(),\n phases: [],\n totalIterations: state.iteration,\n toolCallsExecuted: state.toolCallsExecuted,\n duration: Date.now() - startTime,\n success: false,\n conversation,\n };\n }\n }\n\n /**\n * Save reflection report\n */\n private async saveReflection(\n reflection: ReflectionReport,\n config: ReflectionConfig\n ): Promise<void> {\n if (!config.outputPath) {\n return;\n }\n\n try {\n const fs = await import('fs/promises');\n const path = await import('path');\n\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n const filename = `reflection-${timestamp}.${config.format === 'json' ? 'json' : 'md'}`;\n const fullPath = path.join(config.outputPath, filename);\n\n // Ensure directory exists\n await fs.mkdir(config.outputPath, { recursive: true });\n\n // Save based on format\n if (config.format === 'json') {\n await fs.writeFile(fullPath, JSON.stringify(reflection, null, 2), 'utf-8');\n } else {\n const generator = new ReflectionReportGenerator(this.logger);\n const markdown = generator.formatMarkdown(reflection);\n await fs.writeFile(fullPath, markdown, 'utf-8');\n }\n\n this.logger.info('Reflection saved', { path: fullPath });\n } catch (error) {\n this.logger.error('Failed to save reflection', { error });\n }\n }\n\n /**\n * Execute a single phase\n */\n private async executePhase(\n conversation: ConversationBuilder,\n tools: ToolRegistry,\n phase: StrategyPhase,\n state: StrategyState,\n strategy: IterationStrategy\n ): Promise<PhaseResult> {\n const phaseStartTools = state.toolCallsExecuted;\n\n // Add phase instructions if provided\n if (phase.instructions) {\n conversation.asUser(phase.instructions);\n }\n\n // Iteration loop for this phase\n for (let i = 0; i < phase.maxIterations; i++) {\n state.iteration++;\n\n this.logger.debug('Iteration', { phase: phase.name, iteration: i + 1 });\n\n // Check iteration hook\n const action = await strategy.onIteration?.(i, state);\n if (action === 'stop') {\n break;\n }\n if (action === 'next-phase') {\n break;\n }\n\n // Get LLM response\n const toolsToProvide = phase.toolUsage !== 'forbidden' ? tools.toOpenAIFormat() : undefined;\n const response = await this.llm.complete(\n conversation.toMessages(),\n toolsToProvide\n );\n\n // Handle tool calls\n if (response.tool_calls && response.tool_calls.length > 0) {\n if (phase.toolUsage === 'forbidden') {\n this.logger.warn('Tool calls requested but forbidden in this phase');\n conversation.asAssistant(response.content);\n continue;\n }\n\n conversation.asAssistant(response.content, response.tool_calls);\n\n // Execute tools\n for (const toolCall of response.tool_calls) {\n // Check if tool is allowed in this phase\n if (phase.allowedTools && !phase.allowedTools.includes(toolCall.function.name)) {\n this.logger.debug('Tool not allowed in phase', { tool: toolCall.function.name });\n continue;\n }\n\n // Check tool call hook\n const toolAction = await strategy.onToolCall?.(toolCall, state);\n if (toolAction === 'skip') {\n continue;\n }\n\n // Execute tool\n const toolStart = Date.now();\n try {\n const result = await tools.execute(\n toolCall.function.name,\n JSON.parse(toolCall.function.arguments)\n );\n\n const toolDuration = Date.now() - toolStart;\n\n const toolResult: ToolResult = {\n callId: toolCall.id,\n toolName: toolCall.function.name,\n result,\n duration: toolDuration,\n };\n\n conversation.asTool(toolCall.id, result, {\n duration: toolDuration,\n success: true\n });\n\n state.toolCallsExecuted++;\n\n // Record metrics\n if (this.metricsCollector) {\n this.metricsCollector.recordToolCall(\n toolCall.function.name,\n state.iteration,\n toolDuration,\n true\n );\n }\n\n await strategy.onToolResult?.(toolResult, state);\n\n } catch (error) {\n this.logger.error('Tool execution failed', { tool: toolCall.function.name, error });\n\n const toolDuration = Date.now() - toolStart;\n\n const toolResult: ToolResult = {\n callId: toolCall.id,\n toolName: toolCall.function.name,\n result: null,\n error: error as Error,\n duration: toolDuration,\n };\n\n conversation.asTool(toolCall.id, {\n error: (error as Error).message\n }, {\n success: false,\n errorName: (error as Error).name\n });\n\n state.errors.push(error as Error);\n\n // Record metrics\n if (this.metricsCollector) {\n this.metricsCollector.recordToolCall(\n toolCall.function.name,\n state.iteration,\n toolDuration,\n false,\n (error as Error).message\n );\n }\n\n await strategy.onToolResult?.(toolResult, state);\n }\n }\n\n } else {\n // No tool calls - add response and potentially end phase\n conversation.asAssistant(response.content);\n\n // Check if this phase requires tool calls\n if (phase.toolUsage === 'required' && state.toolCallsExecuted === phaseStartTools) {\n this.logger.warn('No tools used but required in phase');\n // Continue to try again\n } else if (phase.earlyExit !== false) {\n // Exit phase early if we got a response without tools\n break;\n }\n }\n\n // Check phase completion conditions\n const toolCallsInPhase = state.toolCallsExecuted - phaseStartTools;\n\n if (phase.minToolCalls && toolCallsInPhase < phase.minToolCalls) {\n continue; // Need more tool calls\n }\n\n if (phase.maxToolCalls && toolCallsInPhase >= phase.maxToolCalls) {\n break; // Hit max tool calls for phase\n }\n\n if (phase.continueIf && !phase.continueIf(state)) {\n break; // Condition not met\n }\n }\n\n return {\n name: phase.name,\n iterations: state.iteration,\n toolCalls: state.toolCallsExecuted - phaseStartTools,\n success: true,\n insights: state.insights,\n };\n }\n}\n\n// ===== PRE-BUILT STRATEGIES =====\n\n/**\n * Factory for creating iteration strategies\n */\nexport class IterationStrategyFactory {\n /**\n * Investigate then respond strategy\n * Phase 1: Use tools to gather information\n * Phase 2: Synthesize into final answer\n */\n static investigateThenRespond(config: {\n maxInvestigationSteps?: number;\n requireMinimumTools?: number;\n finalSynthesis?: boolean;\n } = {}): IterationStrategy {\n const {\n maxInvestigationSteps = 5,\n requireMinimumTools = 1,\n finalSynthesis = true,\n } = config;\n\n return {\n name: 'investigate-then-respond',\n description: 'Investigate using tools, then synthesize findings',\n maxIterations: maxInvestigationSteps + (finalSynthesis ? 1 : 0),\n phases: [\n {\n name: 'investigate',\n maxIterations: maxInvestigationSteps,\n toolUsage: 'encouraged',\n minToolCalls: requireMinimumTools,\n earlyExit: false,\n },\n ...(finalSynthesis ? [{\n name: 'respond',\n maxIterations: 1,\n toolUsage: 'forbidden' as ToolUsagePolicy,\n instructions: 'Based on your investigation, provide a comprehensive answer.',\n requireFinalAnswer: true,\n }] : []),\n ],\n };\n }\n\n /**\n * Multi-pass refinement strategy\n * Generate, critique, refine repeatedly\n */\n static multiPassRefinement(config: {\n passes?: number;\n critiqueBetweenPasses?: boolean;\n improvementThreshold?: number;\n } = {}): IterationStrategy {\n const {\n passes = 3,\n critiqueBetweenPasses = true,\n } = config;\n\n const phases: StrategyPhase[] = [];\n\n for (let i = 0; i < passes; i++) {\n phases.push({\n name: `pass-${i + 1}`,\n maxIterations: 1,\n toolUsage: 'optional',\n instructions: i === 0\n ? 'Generate your best response'\n : 'Refine your previous response based on the critique',\n });\n\n if (critiqueBetweenPasses && i < passes - 1) {\n phases.push({\n name: `critique-${i + 1}`,\n maxIterations: 1,\n toolUsage: 'forbidden',\n instructions: 'Critique the previous response. What can be improved?',\n });\n }\n }\n\n return {\n name: 'multi-pass-refinement',\n description: 'Iteratively refine response through multiple passes',\n maxIterations: passes * 2,\n phases,\n };\n }\n\n /**\n * Breadth-first investigation\n * Explore broadly before going deep\n */\n static breadthFirst(config: {\n levelsDeep?: number;\n toolsPerLevel?: number;\n } = {}): IterationStrategy {\n const {\n levelsDeep = 3,\n toolsPerLevel = 4,\n } = config;\n\n const phases: StrategyPhase[] = [];\n\n for (let level = 0; level < levelsDeep; level++) {\n phases.push({\n name: `level-${level + 1}`,\n maxIterations: toolsPerLevel,\n toolUsage: 'encouraged',\n minToolCalls: 1,\n maxToolCalls: toolsPerLevel,\n instructions: level === 0\n ? 'Get a broad overview'\n : `Dive deeper into areas discovered in level ${level}`,\n });\n }\n\n return {\n name: 'breadth-first',\n description: 'Explore broadly at each level before going deeper',\n maxIterations: levelsDeep * toolsPerLevel,\n phases,\n };\n }\n\n /**\n * Depth-first investigation\n * Deep dive immediately\n */\n static depthFirst(config: {\n maxDepth?: number;\n backtrackOnFailure?: boolean;\n } = {}): IterationStrategy {\n const {\n maxDepth = 5,\n backtrackOnFailure = true,\n } = config;\n\n return {\n name: 'depth-first',\n description: 'Deep dive investigation path',\n maxIterations: maxDepth,\n phases: [{\n name: 'deep-dive',\n maxIterations: maxDepth,\n toolUsage: 'encouraged',\n adaptiveDepth: true,\n }],\n shouldContinue: (state) => {\n // Continue if making progress\n if (backtrackOnFailure && state.errors.length > 2) {\n return false;\n }\n return true;\n },\n };\n }\n\n /**\n * Adaptive strategy\n * Changes behavior based on progress\n */\n static adaptive(_config: {\n strategies?: IterationStrategy[];\n switchConditions?: Array<{\n when: (state: StrategyState) => boolean;\n switchTo: number;\n }>;\n } = {}): IterationStrategy {\n return {\n name: 'adaptive',\n description: 'Adapts strategy based on progress',\n maxIterations: 20,\n onIteration: async (iteration, state) => {\n // Change behavior based on iteration count\n if (iteration < 5) {\n // Early: broad exploration\n return 'continue';\n } else if (iteration < 15) {\n // Mid: focused investigation\n return 'continue';\n } else {\n // Late: wrap up\n return state.toolCallsExecuted > 0 ? 'continue' : 'stop';\n }\n },\n };\n }\n\n /**\n * Simple iteration (basic tool-use loop)\n */\n static simple(config: {\n maxIterations?: number;\n allowTools?: boolean;\n } = {}): IterationStrategy {\n const {\n maxIterations = 10,\n allowTools = true,\n } = config;\n\n return {\n name: 'simple',\n description: 'Simple iteration loop',\n maxIterations,\n phases: [{\n name: 'main',\n maxIterations,\n toolUsage: allowTools ? 'encouraged' : 'forbidden',\n earlyExit: true,\n }],\n };\n }\n}\n\nexport default IterationStrategyFactory;\n\n","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":["ParametersSchema","z","record","string","union","number","boolean","array","create","parameters","apply","text","trimmedParams","Object","keys","forEach","key","trim","replace","match","p1","paramKey","parameter","undefined","toString","Array","isArray","join","object","weight","optional","WeightedOptionsSchema","options","weightedOptions","parse","parameterizedText","applyParameters","createWeighted","SectionOptionsSchema","title","itemWeight","default","items","sectionOptions","sectionItemOptions","append","item","itemOptions","push","section","prepend","unshift","insert","index","splice","remove","add","toJSON","map","persona","instructions","contents","contexts","DEFAULT_CHARACTER_ENCODING","LIBRARY_NAME","DEFAULT_PERSONA_ROLE","DEFAULT_IGNORE_PATTERNS","DEFAULT_SECTION_SEPARATOR","DEFAULT_SECTION_INDENTATION","DEFAULT_SECTION_TITLE_PROPERTY","DEFAULT_FORMAT_OPTIONS","sectionSeparator","sectionIndentation","sectionTitleProperty","sectionDepth","getPersonaRole","model","createRequest","messages","addMessage","message","DEFAULT_LOGGER","name","debug","args","console","info","warn","error","verbose","silly","wrapLogger","toWrap","requiredMethods","missingMethods","filter","method","length","Error","log","level","clean","obj","fromEntries","entries","_","v","stringifyJSON","visited","Set","arrOfKeyVals","arrVals","objKeys","has","el","keyOut","keyValOut","Function","SectionSeparatorSchema","enum","SectionTitlePropertySchema","FormatOptionsSchema","sectionTitlePrefix","sectionTitleSeparator","OptionSchema","logger","any","formatOptions","partial","isSection","isWeighted","formatterOptions","formatPersona","formattedPersona","formatSection","role","content","format","currentSectionDepth","result","formattedItems","headingLevel","hashes","repeat","formatArray","formatPrompt","prompt","chatRequest","Chat","formattedAreas","parseMarkdown","input","marked","markdownContent","tokens","lexer","mainSection","createSection","sectionStack","isFirstToken","token","type","depth","newSection","pop","parentSection","instruction","currentSection","listInstructionContent","listInstruction","codeInstruction","lang","fallbackInstruction","parseText","lines","split","line","markdownRegex","isMarkdown","test","effectiveContent","substring","markdownFeatureCount","featurePatterns","significantLineCountEarly","Math","min","indexOf","pattern","significantLineCount","thresholdPercentage","isText","buf","Buffer","from","includes","str","nonPrintable","len","i","charCode","charCodeAt","OptionsSchema","parserOptions","loadOptions","currentOptions","parseFile","filePath","fs","readFile","fileName","path","basename","extname","String","params","exists","promises","stat","isDirectory","stats","isFile","isReadable","access","constants","R_OK","stack","isWritable","W_OK","isFileReadable","isDirectoryWritable","isDirectoryReadable","createDirectory","mkdir","recursive","mkdirError","encoding","writeFile","data","forEachFileIn","directory","callback","filesProcessed","files","glob","cwd","nodir","file","limit","err","readStream","createReadStream","hashFile","crypto","createHash","update","digest","slice","listFiles","readdir","ignorePatterns","extractFirstHeader","markdownText","headerRegex","removeFirstHeader","loaderOptions","load","contextDirectories","contextSections","storage","Storage","contextDir","dirName","mainContextSection","contextFile","mainContextContent","firstHeader","sectionTitle","ignorePatternsRegex","RegExp","filteredFiles","some","regex","fileContent","sectionName","contentToAdd","endsWith","fileHeader","fileSection","configDirs","overrides","overrideOptions","override","overrideFile","currentSectionOptions","response","prepends","appends","configDir","baseFile","preFile","postFile","parser","Parser","prependSection","appendSection","customize","overrideContent","finalSection","reverse","formatter","Formatter","basePath","overridePaths","builderOptions","Override","loader","Loader","personaSection","contextSection","instructionSection","contentSection","instance","loadDirectories","directories","sections","loadContext","context","loadContent","contentDirectories","loadPath","contentPath","defaultPath","overrideSection","addPersonaPath","addContextPath","addInstructionPath","addContentPath","addContent","parsedContentSection","addContext","parsedContextSection","build","createPrompt","ContextManager","track","position","id","generateId","hash","hashContent","trackedItem","injectedAt","Date","timestamp","priority","set","category","hasContext","hasContentHash","hasSimilarContent","normalized","normalizeContent","values","itemNormalized","get","getAll","getByCategory","getByPriority","getBySource","source","getCategories","categories","sort","getStats","byCategory","Map","byPriority","bySource","oldestTimestamp","newestTimestamp","totalItems","size","delete","clear","now","random","toLowerCase","_define_property","ConversationLogger","onConversationStart","metadata","startTime","conversationId","onMessageAdded","config","redactSensitive","redactContent","loggedMessage","messageIndex","toISOString","tool_calls","tool_call_id","appendToJSONL","catch","onError","onToolCall","callId","toolName","iteration","duration","success","toolCalls","arguments","onConversationEnd","_summary","endTime","getTime","save","enabled","outputPath","getOutputPath","saveAsJSON","saveAsMarkdown","onSaved","getConversation","summary","totalMessages","toolCallsExecuted","iterations","filename","filenameTemplate","template","ext","fullPath","dirname","JSON","stringify","markdown","toFixed","msg","time","toLocaleTimeString","call","function","appendFile","redacted","redactPatterns","defaultPatterns","includeMetadata","includePrompt","ConversationReplayer","wlogger","conversation","loadLatest","jsonFiles","f","latestPath","getMetadata","getToolCalls","getMessageAt","getTimeline","events","description","exportToFormat","exportMarkdown","m","toUpperCase","MessageBuilder","system","user","assistant","tool","builder","toolCallId","developer","withContent","contentParts","withPersona","withInstructions","withContext","contextStr","c","withCallId","withResult","resultStr","withToolCalls","calls","withMetadata","withTimestamp","withPriority","withFormatter","semanticRole","buildForModel","startsWith","MessageTemplates","agenticSystem","userQuery","query","toolResult","toolSuccess","toolFailure","errorName","TokenCounter","count","encoder","encode","countMessage","toolCall","countConversation","total","countWithOverhead","includeToolOverhead","hasTools","estimateResponseTokens","inputTokens","max","floor","mapToTiktokenModel","dispose","free","tiktokenModel","encoding_for_model","TokenBudgetManager","getCurrentUsage","used","counter","remaining","reserveForResponse","percentage","getRemainingTokens","isNearLimit","threshold","usage","checkThreshold","warningThreshold","isNear","onWarning","canAddMessage","currentMessages","currentTokens","messageTokens","compress","before","tokensBefore","targetTokens","strategy","compressed","compressByPriority","compressFIFO","compressAdaptive","tokensAfter","messagesBefore","messagesAfter","tokensSaved","onCompression","idx","calculatePriority","a","b","kept","totalTokens","preserved","systemMessages","preserveSystem","recentCount","preserveRecent","recentMessages","otherMessages","messageCount","modifiedConfig","tempManager","recencyBonus","truncate","maxMessages","recentOther","preserveHighPriority","ConversationBuilderConfigSchema","trackContext","deduplicateContext","ConversationBuilder","defaultConfig","fromPrompt","targetModel","request","state","updateMetadata","addSystemMessage","messageContent","addUserMessage","budgetManager","addAssistantMessage","addAssistantWithToolCalls","toolCount","toolCallCount","addToolResult","addToolMessage","injectContext","opts","deduplicate","deduplicateBy","itemCount","itemsToAdd","enrichedItem","skip","contextManager","calculatePosition","formatted","formatContextItem","contextMessage","injectSystemContext","getMessageCount","getLastMessage","getMessages","hasToolCalls","toMessages","serialized","created","lastModified","contextProvided","fromJSON","json","parsed","clone","cloned","allContext","current","removeMessagesOfType","getContextManager","getState","asSystem","asUser","asAssistant","asTool","withTokenBudget","withLogging","conversationLogger","saveLog","getTokenUsage","Infinity","_strategy","lastSystemIdx","ToolSchema","literal","properties","required","passthrough","execute","custom","val","cost","examples","scenario","expectedResult","ToolRegistry","register","tools","usageStats","failures","totalDuration","registerAll","executeBatch","results","toOpenAIFormat","toAnthropicFormat","input_schema","getDefinitions","getUsageStats","rawStats","successRate","averageDuration","getMostUsed","sorted","updateContext","getContext","unregister","resetStats","MetricsCollector","recordToolCall","inputSize","outputSize","toolMetrics","incrementIteration","iterationCount","getMetrics","toolStats","calculateToolStats","uniqueTools","totalTools","investigationDepth","iterationEfficiency","tokenUsage","systemPrompt","userContent","toolResults","toolDiversity","byTool","metric","metrics","reduce","sum","avgDuration","ReflectionReportGenerator","generate","report","generated","generateSummary","toolEffectiveness","analyzeToolEffectiveness","performanceInsights","analyzePerformance","timeline","buildTimeline","qualityAssessment","assessQuality","recommendations","generateRecommendations","conversationHistory","output","finalMessage","toolsAnalyzed","successfulTools","uniqueToolsUsed","overallSuccessRate","failedTools","rate","slowTools","mostUsedTools","avgIterationDuration","toolsBySpeed","slowestTool","fastestTool","bottlenecks","coverage","depthScore","diversityScore","efficiencyScore","overall","_result","severity","suggestion","relatedTools","t","formatMarkdown","high","r","medium","low","rec","StrategyExecutor","withReflection","reflectionConfig","metricsCollector","phase","insights","findings","errors","llm","onStart","phases","maxIterations","toolUsage","phaseResults","skipIf","phaseResult","executePhase","onPhaseComplete","shouldContinue","totalIterations","generator","reflection","saveReflection","onComplete","phaseStartTools","action","onIteration","toolsToProvide","complete","allowedTools","toolAction","toolStart","toolDuration","onToolResult","earlyExit","toolCallsInPhase","minToolCalls","maxToolCalls","continueIf","IterationStrategyFactory","investigateThenRespond","maxInvestigationSteps","requireMinimumTools","finalSynthesis","requireFinalAnswer","multiPassRefinement","passes","critiqueBetweenPasses","breadthFirst","levelsDeep","toolsPerLevel","depthFirst","maxDepth","backtrackOnFailure","adaptiveDepth","adaptive","_config","simple","allowTools","ContentItemSchema","RecipeConfigSchema","extends","toolGuidance","includeExamples","explainWhenToUse","includeCategories","customInstructions","toolCategories","TEMPLATES","registerTemplates","templates","getTemplates","clearTemplates","generateToolGuidance","guidance","categorized","categoryTools","formatToolGuidance","paramList","param","isRequired","example","cook","validatedConfig","finalConfig","processContentItem","filteredTools","toolSection","ctx","parsedSection","recipe","with","partialConfig","assign","paths","toolRegistry","registry","buildConversation","tokenBudget","getToolRegistry","executeWith","executor"],"mappings":"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"}