@riotprompt/riotprompt 0.0.2 → 0.0.4

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 (53) hide show
  1. package/.cursor/rules/focus-on-prompt.mdc +5 -0
  2. package/README.md +65 -492
  3. package/dist/builder.d.ts +3 -3
  4. package/dist/builder.js +9 -4
  5. package/dist/builder.js.map +1 -1
  6. package/dist/chat.js.map +1 -1
  7. package/dist/constants.js.map +1 -1
  8. package/dist/formatter.js.map +1 -1
  9. package/dist/items/content.js.map +1 -1
  10. package/dist/items/context.js.map +1 -1
  11. package/dist/items/instruction.js.map +1 -1
  12. package/dist/items/parameters.js.map +1 -1
  13. package/dist/items/section.js.map +1 -1
  14. package/dist/items/trait.js.map +1 -1
  15. package/dist/items/weighted.js.map +1 -1
  16. package/dist/loader.js +1 -0
  17. package/dist/loader.js.map +1 -1
  18. package/dist/logger.js.map +1 -1
  19. package/dist/override.d.ts +5 -5
  20. package/dist/override.js +47 -30
  21. package/dist/override.js.map +1 -1
  22. package/dist/parse/markdown.d.ts +1 -1
  23. package/dist/parse/markdown.js +3 -2
  24. package/dist/parse/markdown.js.map +1 -1
  25. package/dist/parse/text.js.map +1 -1
  26. package/dist/parser.d.ts +1 -1
  27. package/dist/parser.js +3 -3
  28. package/dist/parser.js.map +1 -1
  29. package/dist/prompt.js.map +1 -1
  30. package/dist/recipes.d.ts +373 -0
  31. package/dist/recipes.js +279 -0
  32. package/dist/recipes.js.map +1 -0
  33. package/dist/riotprompt.cjs +340 -40
  34. package/dist/riotprompt.cjs.map +1 -1
  35. package/dist/riotprompt.d.ts +3 -0
  36. package/dist/riotprompt.js +3 -0
  37. package/dist/riotprompt.js.map +1 -1
  38. package/dist/util/general.js.map +1 -1
  39. package/dist/util/markdown.js.map +1 -1
  40. package/dist/util/storage.js.map +1 -1
  41. package/dist/util/text.js.map +1 -1
  42. package/package.json +29 -24
  43. package/.gitcarve/config.yaml +0 -10
  44. package/.gitcarve/context/content.md +0 -11
  45. package/.markdown-doctest-setup.mjs +0 -23
  46. package/.nvmrc +0 -1
  47. package/docs/loader.md +0 -237
  48. package/docs/override.md +0 -323
  49. package/docs/parser.md +0 -130
  50. package/eslint.config.mjs +0 -82
  51. package/nodemon.json +0 -14
  52. package/vite.config.ts +0 -114
  53. package/vitest.config.ts +0 -25
@@ -0,0 +1,279 @@
1
+ import path__default from 'path';
2
+ import { z } from 'zod';
3
+ import { ParametersSchema } from './items/parameters.js';
4
+ import { DEFAULT_LOGGER, wrapLogger } from './logger.js';
5
+ import './items/weighted.js';
6
+ import { create as create$3 } from './items/section.js';
7
+ import { create as create$4 } from './prompt.js';
8
+ import './formatter.js';
9
+ import { create } from './parser.js';
10
+ import { create as create$2 } from './loader.js';
11
+ import { create as create$1 } from './override.js';
12
+ import './builder.js';
13
+
14
+ // ===== CONFIGURATION SCHEMAS =====
15
+ const ContentItemSchema = z.union([
16
+ z.string(),
17
+ z.object({
18
+ content: z.string(),
19
+ title: z.string().optional(),
20
+ weight: z.number().optional()
21
+ }),
22
+ z.object({
23
+ path: z.string(),
24
+ title: z.string().optional(),
25
+ weight: z.number().optional()
26
+ }),
27
+ z.object({
28
+ directories: z.array(z.string()),
29
+ title: z.string().optional(),
30
+ weight: z.number().optional()
31
+ })
32
+ ]);
33
+ const RecipeConfigSchema = z.object({
34
+ // Core settings
35
+ basePath: z.string(),
36
+ logger: z.any().optional().default(DEFAULT_LOGGER),
37
+ overridePaths: z.array(z.string()).optional().default([
38
+ "./"
39
+ ]),
40
+ overrides: z.boolean().optional().default(false),
41
+ parameters: ParametersSchema.optional().default({}),
42
+ // Content sections
43
+ persona: ContentItemSchema.optional(),
44
+ instructions: z.array(ContentItemSchema).optional().default([]),
45
+ content: z.array(ContentItemSchema).optional().default([]),
46
+ context: z.array(ContentItemSchema).optional().default([]),
47
+ // Templates and inheritance
48
+ extends: z.string().optional(),
49
+ template: z.string().optional()
50
+ });
51
+ // User-customizable template registry
52
+ let TEMPLATES = {};
53
+ /**
54
+ * Register custom templates with the recipes system
55
+ *
56
+ * @example
57
+ * ```typescript
58
+ * // Register your own templates
59
+ * registerTemplates({
60
+ * myWorkflow: {
61
+ * persona: { path: "personas/my-persona.md" },
62
+ * instructions: [{ path: "instructions/my-instructions.md" }]
63
+ * },
64
+ * anotherTemplate: {
65
+ * persona: { content: "You are a helpful assistant" },
66
+ * instructions: [{ content: "Follow these steps..." }]
67
+ * }
68
+ * });
69
+ * ```
70
+ */ const registerTemplates = (templates)=>{
71
+ TEMPLATES = {
72
+ ...TEMPLATES,
73
+ ...templates
74
+ };
75
+ };
76
+ /**
77
+ * Get currently registered templates
78
+ */ const getTemplates = ()=>({
79
+ ...TEMPLATES
80
+ });
81
+ /**
82
+ * Clear all registered templates
83
+ */ const clearTemplates = ()=>{
84
+ TEMPLATES = {};
85
+ };
86
+ // ===== CORE RECIPE ENGINE =====
87
+ const cook = async (config)=>{
88
+ // Parse and validate configuration with defaults
89
+ const validatedConfig = RecipeConfigSchema.parse({
90
+ overridePaths: [
91
+ "./"
92
+ ],
93
+ overrides: false,
94
+ parameters: {},
95
+ instructions: [],
96
+ content: [],
97
+ context: [],
98
+ ...config
99
+ });
100
+ // Handle template inheritance
101
+ let finalConfig = {
102
+ ...validatedConfig
103
+ };
104
+ if (validatedConfig.template) {
105
+ const template = TEMPLATES[validatedConfig.template];
106
+ if (template) {
107
+ finalConfig = {
108
+ ...validatedConfig,
109
+ persona: validatedConfig.persona || template.persona,
110
+ instructions: [
111
+ ...template.instructions || [],
112
+ ...validatedConfig.instructions || []
113
+ ],
114
+ content: [
115
+ ...template.content || [],
116
+ ...validatedConfig.content || []
117
+ ],
118
+ context: [
119
+ ...template.context || [],
120
+ ...validatedConfig.context || []
121
+ ]
122
+ };
123
+ }
124
+ }
125
+ // Setup internal services
126
+ const logger = wrapLogger(finalConfig.logger, 'Recipe');
127
+ const parser$1 = create({
128
+ logger
129
+ });
130
+ const override$1 = create$1({
131
+ logger,
132
+ configDirs: finalConfig.overridePaths || [
133
+ "./"
134
+ ],
135
+ overrides: finalConfig.overrides || false
136
+ });
137
+ const loader$1 = create$2({
138
+ logger
139
+ });
140
+ // Create sections
141
+ const personaSection = create$3({
142
+ title: "Persona"
143
+ });
144
+ const instructionSection = create$3({
145
+ title: "Instruction"
146
+ });
147
+ const contentSection = create$3({
148
+ title: "Content"
149
+ });
150
+ const contextSection = create$3({
151
+ title: "Context"
152
+ });
153
+ // Process persona
154
+ if (finalConfig.persona) {
155
+ await processContentItem(finalConfig.persona, personaSection, 'persona', {
156
+ basePath: finalConfig.basePath,
157
+ parser: parser$1,
158
+ override: override$1,
159
+ loader: loader$1,
160
+ parameters: finalConfig.parameters});
161
+ }
162
+ // Process instructions
163
+ for (const item of finalConfig.instructions || []){
164
+ await processContentItem(item, instructionSection, 'instruction', {
165
+ basePath: finalConfig.basePath,
166
+ parser: parser$1,
167
+ override: override$1,
168
+ loader: loader$1,
169
+ parameters: finalConfig.parameters});
170
+ }
171
+ // Process content
172
+ for (const item of finalConfig.content || []){
173
+ await processContentItem(item, contentSection, 'content', {
174
+ basePath: finalConfig.basePath,
175
+ parser: parser$1,
176
+ override: override$1,
177
+ loader: loader$1,
178
+ parameters: finalConfig.parameters});
179
+ }
180
+ // Process context
181
+ for (const item of finalConfig.context || []){
182
+ await processContentItem(item, contextSection, 'context', {
183
+ basePath: finalConfig.basePath,
184
+ parser: parser$1,
185
+ override: override$1,
186
+ loader: loader$1,
187
+ parameters: finalConfig.parameters});
188
+ }
189
+ // Build and return prompt
190
+ return create$4({
191
+ persona: personaSection,
192
+ instructions: instructionSection,
193
+ contents: contentSection,
194
+ contexts: contextSection
195
+ });
196
+ };
197
+ const processContentItem = async (item, section, type, ctx)=>{
198
+ const sectionOptions = {
199
+ parameters: ctx.parameters
200
+ };
201
+ if (typeof item === 'string') {
202
+ // Simple string content
203
+ const parsedSection = ctx.parser.parse(item, sectionOptions);
204
+ section.add(parsedSection);
205
+ } else if ('content' in item) {
206
+ // Inline content with options
207
+ const parsedSection = ctx.parser.parse(item.content, {
208
+ ...sectionOptions,
209
+ title: item.title,
210
+ weight: item.weight
211
+ });
212
+ section.add(parsedSection);
213
+ } else if ('path' in item) {
214
+ // File path
215
+ const fullPath = path__default.join(ctx.basePath, item.path);
216
+ const parsedSection = await ctx.parser.parseFile(fullPath, {
217
+ ...sectionOptions,
218
+ title: item.title,
219
+ weight: item.weight
220
+ });
221
+ const overrideSection = await ctx.override.customize(item.path, parsedSection, sectionOptions);
222
+ section.add(overrideSection);
223
+ } else if ('directories' in item) {
224
+ // Directory loading
225
+ const sections = await ctx.loader.load(item.directories, {
226
+ ...sectionOptions,
227
+ title: item.title,
228
+ weight: item.weight
229
+ });
230
+ section.add(sections);
231
+ }
232
+ };
233
+ // ===== FLUENT RECIPE BUILDER =====
234
+ const recipe = (basePath)=>({
235
+ template: (name)=>({
236
+ with: (config)=>cook({
237
+ basePath,
238
+ template: name,
239
+ ...config
240
+ })
241
+ }),
242
+ persona: (persona)=>({
243
+ instructions: (...instructions)=>({
244
+ content: (...content)=>({
245
+ context: (...context)=>({
246
+ cook: ()=>cook({
247
+ basePath,
248
+ persona,
249
+ instructions,
250
+ content,
251
+ context
252
+ })
253
+ }),
254
+ cook: ()=>cook({
255
+ basePath,
256
+ persona,
257
+ instructions,
258
+ content
259
+ })
260
+ }),
261
+ cook: ()=>cook({
262
+ basePath,
263
+ persona,
264
+ instructions
265
+ })
266
+ }),
267
+ cook: ()=>cook({
268
+ basePath,
269
+ persona
270
+ })
271
+ }),
272
+ cook: (config)=>cook({
273
+ basePath,
274
+ ...config
275
+ })
276
+ });
277
+
278
+ export { clearTemplates, cook, getTemplates, recipe, registerTemplates };
279
+ //# sourceMappingURL=recipes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipes.js","sources":["../src/recipes.ts"],"sourcesContent":["import path from \"path\";\nimport { z } from \"zod\";\nimport { ParametersSchema } from \"./items/parameters\";\nimport { SectionOptions } from \"./items/section\";\nimport { DEFAULT_LOGGER, wrapLogger } from \"./logger\";\nimport { Content, Context, createPrompt, createSection, Instruction, Loader, Override, Parser, Prompt, Section, Weighted } from \"./riotprompt\";\n\n// ===== CONFIGURATION SCHEMAS =====\n\nconst ContentItemSchema = z.union([\n z.string(), // Simple string content\n z.object({\n content: z.string(),\n title: z.string().optional(),\n weight: z.number().optional(),\n }),\n z.object({\n path: z.string(),\n title: z.string().optional(),\n weight: z.number().optional(),\n }),\n z.object({\n directories: z.array(z.string()),\n title: z.string().optional(),\n weight: z.number().optional(),\n })\n]);\n\nconst RecipeConfigSchema = z.object({\n // Core settings\n basePath: z.string(),\n logger: z.any().optional().default(DEFAULT_LOGGER),\n overridePaths: z.array(z.string()).optional().default([\"./\"]),\n overrides: z.boolean().optional().default(false),\n parameters: ParametersSchema.optional().default({}),\n\n // Content sections\n persona: ContentItemSchema.optional(),\n instructions: z.array(ContentItemSchema).optional().default([]),\n content: z.array(ContentItemSchema).optional().default([]),\n context: z.array(ContentItemSchema).optional().default([]),\n\n // Templates and inheritance\n extends: z.string().optional(), // Extend another recipe\n template: z.string().optional(), // Generic template name\n});\n\ntype RecipeConfig = z.infer<typeof RecipeConfigSchema>;\ntype ContentItem = z.infer<typeof ContentItemSchema>;\n\n// ===== CONFIGURABLE TEMPLATE SYSTEM =====\n\nexport interface TemplateConfig {\n persona?: ContentItem;\n instructions?: ContentItem[];\n content?: ContentItem[];\n context?: ContentItem[];\n}\n\n// User-customizable template registry\nlet TEMPLATES: Record<string, TemplateConfig> = {};\n\n/**\n * Register custom templates with the recipes system\n * \n * @example\n * ```typescript\n * // Register your own templates\n * registerTemplates({\n * myWorkflow: {\n * persona: { path: \"personas/my-persona.md\" },\n * instructions: [{ path: \"instructions/my-instructions.md\" }]\n * },\n * anotherTemplate: {\n * persona: { content: \"You are a helpful assistant\" },\n * instructions: [{ content: \"Follow these steps...\" }]\n * }\n * });\n * ```\n */\nexport const registerTemplates = (templates: Record<string, TemplateConfig>): void => {\n TEMPLATES = { ...TEMPLATES, ...templates };\n};\n\n/**\n * Get currently registered templates\n */\nexport const getTemplates = (): Record<string, TemplateConfig> => ({ ...TEMPLATES });\n\n/**\n * Clear all registered templates\n */\nexport const clearTemplates = (): void => {\n TEMPLATES = {};\n};\n\n// ===== CORE RECIPE ENGINE =====\n\nexport const cook = async (config: Partial<RecipeConfig> & { basePath: string }): Promise<Prompt> => {\n // Parse and validate configuration with defaults\n const validatedConfig = RecipeConfigSchema.parse({\n overridePaths: [\"./\"],\n overrides: false,\n parameters: {},\n instructions: [],\n content: [],\n context: [],\n ...config\n });\n\n // Handle template inheritance\n let finalConfig = { ...validatedConfig };\n if (validatedConfig.template) {\n const template = TEMPLATES[validatedConfig.template];\n if (template) {\n finalConfig = {\n ...validatedConfig,\n persona: validatedConfig.persona || template.persona,\n instructions: [\n ...(template.instructions || []),\n ...(validatedConfig.instructions || [])\n ],\n content: [\n ...(template.content || []),\n ...(validatedConfig.content || [])\n ],\n context: [\n ...(template.context || []),\n ...(validatedConfig.context || [])\n ],\n };\n }\n }\n\n // Setup internal services\n const logger = wrapLogger(finalConfig.logger, 'Recipe');\n const parser = Parser.create({ logger });\n const override = Override.create({\n logger,\n configDirs: finalConfig.overridePaths || [\"./\"],\n overrides: finalConfig.overrides || false\n });\n const loader = Loader.create({ logger });\n\n // Create sections\n const personaSection: Section<Instruction> = createSection({ title: \"Persona\" });\n const instructionSection: Section<Instruction> = createSection({ title: \"Instruction\" });\n const contentSection: Section<Content> = createSection({ title: \"Content\" });\n const contextSection: Section<Context> = createSection({ title: \"Context\" });\n\n // Process persona\n if (finalConfig.persona) {\n await processContentItem(finalConfig.persona, personaSection, 'persona', {\n basePath: finalConfig.basePath,\n parser,\n override,\n loader,\n parameters: finalConfig.parameters,\n logger\n });\n }\n\n // Process instructions\n for (const item of finalConfig.instructions || []) {\n await processContentItem(item, instructionSection, 'instruction', {\n basePath: finalConfig.basePath,\n parser,\n override,\n loader,\n parameters: finalConfig.parameters,\n logger\n });\n }\n\n // Process content\n for (const item of finalConfig.content || []) {\n await processContentItem(item, contentSection, 'content', {\n basePath: finalConfig.basePath,\n parser,\n override,\n loader,\n parameters: finalConfig.parameters,\n logger\n });\n }\n\n // Process context\n for (const item of finalConfig.context || []) {\n await processContentItem(item, contextSection, 'context', {\n basePath: finalConfig.basePath,\n parser,\n override,\n loader,\n parameters: finalConfig.parameters,\n logger\n });\n }\n\n // Build and return prompt\n return createPrompt({\n persona: personaSection,\n instructions: instructionSection,\n contents: contentSection,\n contexts: contextSection\n });\n};\n\n// ===== CONTENT PROCESSING =====\n\ninterface ProcessingContext {\n basePath: string;\n parser: any;\n override: any;\n loader: any;\n parameters: any;\n logger: any;\n}\n\nconst processContentItem = async <T extends Weighted>(\n item: ContentItem,\n section: Section<T>,\n type: 'persona' | 'instruction' | 'content' | 'context',\n ctx: ProcessingContext\n): Promise<void> => {\n const sectionOptions: SectionOptions = {\n parameters: ctx.parameters,\n };\n\n if (typeof item === 'string') {\n // Simple string content\n const parsedSection = ctx.parser.parse(item, sectionOptions);\n section.add(parsedSection);\n } else if ('content' in item) {\n // Inline content with options\n const parsedSection = ctx.parser.parse(item.content, {\n ...sectionOptions,\n title: item.title,\n weight: item.weight,\n });\n section.add(parsedSection);\n } else if ('path' in item) {\n // File path\n const fullPath = path.join(ctx.basePath, item.path);\n const parsedSection = await ctx.parser.parseFile(fullPath, {\n ...sectionOptions,\n title: item.title,\n weight: item.weight,\n });\n const overrideSection = await ctx.override.customize(item.path, parsedSection, sectionOptions);\n section.add(overrideSection);\n } else if ('directories' in item) {\n // Directory loading\n const sections = await ctx.loader.load(item.directories, {\n ...sectionOptions,\n title: item.title,\n weight: item.weight,\n });\n section.add(sections);\n }\n};\n\n// ===== FLUENT RECIPE BUILDER =====\n\nexport const recipe = (basePath: string) => ({\n template: (name: string) => ({\n with: (config: Partial<RecipeConfig>) =>\n cook({ basePath, template: name, ...config }),\n }),\n\n persona: (persona: ContentItem) => ({\n instructions: (...instructions: ContentItem[]) => ({\n content: (...content: ContentItem[]) => ({\n context: (...context: ContentItem[]) => ({\n cook: () => cook({ basePath, persona, instructions, content, context }),\n }),\n cook: () => cook({ basePath, persona, instructions, content }),\n }),\n cook: () => cook({ basePath, persona, instructions }),\n }),\n cook: () => cook({ basePath, persona }),\n }),\n\n cook: (config: Partial<RecipeConfig>) => cook({ basePath, ...config }),\n});\n\n// Export types for external use\nexport type { RecipeConfig, ContentItem }; "],"names":["ContentItemSchema","z","union","string","object","content","title","optional","weight","number","path","directories","array","RecipeConfigSchema","basePath","logger","any","default","DEFAULT_LOGGER","overridePaths","overrides","boolean","parameters","ParametersSchema","persona","instructions","context","extends","template","TEMPLATES","registerTemplates","templates","getTemplates","clearTemplates","cook","config","validatedConfig","parse","finalConfig","wrapLogger","parser","Parser","override","Override","configDirs","loader","Loader","personaSection","createSection","instructionSection","contentSection","contextSection","processContentItem","item","createPrompt","contents","contexts","section","type","ctx","sectionOptions","parsedSection","add","fullPath","join","parseFile","overrideSection","customize","sections","load","recipe","name","with"],"mappings":"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"}