@wundr.io/prompt-templates 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/engine.d.ts +206 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +506 -0
- package/dist/engine.js.map +1 -0
- package/dist/helpers.d.ts +201 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +566 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.d.ts +56 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +102 -0
- package/dist/index.js.map +1 -0
- package/dist/loader.d.ts +129 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +415 -0
- package/dist/loader.js.map +1 -0
- package/dist/macros.d.ts +64 -0
- package/dist/macros.d.ts.map +1 -0
- package/dist/macros.js +620 -0
- package/dist/macros.js.map +1 -0
- package/dist/types.d.ts +443 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +62 -0
- package/dist/types.js.map +1 -0
- package/package.json +45 -0
- package/src/engine.ts +616 -0
- package/src/helpers.ts +650 -0
- package/src/index.ts +138 -0
- package/src/loader.ts +468 -0
- package/src/macros.ts +635 -0
- package/src/types.ts +380 -0
package/dist/macros.d.ts
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @wundr/prompt-templates - Reusable macro library for prompt templating
|
|
3
|
+
*/
|
|
4
|
+
import type { MacroDefinition } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* System role macro - defines AI assistant behavior
|
|
7
|
+
*/
|
|
8
|
+
export declare const systemRoleMacro: MacroDefinition;
|
|
9
|
+
/**
|
|
10
|
+
* Task context macro - provides context for a specific task
|
|
11
|
+
*/
|
|
12
|
+
export declare const taskContextMacro: MacroDefinition;
|
|
13
|
+
/**
|
|
14
|
+
* Output format macro - specifies expected output format
|
|
15
|
+
*/
|
|
16
|
+
export declare const outputFormatMacro: MacroDefinition;
|
|
17
|
+
/**
|
|
18
|
+
* Conversation history macro - formats previous messages
|
|
19
|
+
*/
|
|
20
|
+
export declare const conversationHistoryMacro: MacroDefinition;
|
|
21
|
+
/**
|
|
22
|
+
* Tools section macro - formats available tools
|
|
23
|
+
*/
|
|
24
|
+
export declare const toolsSectionMacro: MacroDefinition;
|
|
25
|
+
/**
|
|
26
|
+
* Code context macro - provides code snippet context
|
|
27
|
+
*/
|
|
28
|
+
export declare const codeContextMacro: MacroDefinition;
|
|
29
|
+
/**
|
|
30
|
+
* Chain of thought macro - encourages step-by-step reasoning
|
|
31
|
+
*/
|
|
32
|
+
export declare const chainOfThoughtMacro: MacroDefinition;
|
|
33
|
+
/**
|
|
34
|
+
* Few-shot examples macro - provides learning examples
|
|
35
|
+
*/
|
|
36
|
+
export declare const fewShotExamplesMacro: MacroDefinition;
|
|
37
|
+
/**
|
|
38
|
+
* Safety guardrails macro - adds safety constraints
|
|
39
|
+
*/
|
|
40
|
+
export declare const safetyGuardrailsMacro: MacroDefinition;
|
|
41
|
+
/**
|
|
42
|
+
* Persona definition macro - creates a detailed persona
|
|
43
|
+
*/
|
|
44
|
+
export declare const personaMacro: MacroDefinition;
|
|
45
|
+
/**
|
|
46
|
+
* Get all built-in macro definitions
|
|
47
|
+
*
|
|
48
|
+
* @returns Array of macro definitions
|
|
49
|
+
*/
|
|
50
|
+
export declare function getBuiltinMacros(): MacroDefinition[];
|
|
51
|
+
/**
|
|
52
|
+
* Get a macro by name
|
|
53
|
+
*
|
|
54
|
+
* @param name - Macro name
|
|
55
|
+
* @returns Macro definition or undefined
|
|
56
|
+
*/
|
|
57
|
+
export declare function getMacroByName(name: string): MacroDefinition | undefined;
|
|
58
|
+
/**
|
|
59
|
+
* Get macro names
|
|
60
|
+
*
|
|
61
|
+
* @returns Array of macro names
|
|
62
|
+
*/
|
|
63
|
+
export declare function getMacroNames(): string[];
|
|
64
|
+
//# sourceMappingURL=macros.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"macros.d.ts","sourceRoot":"","sources":["../src/macros.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,eA0C7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,eA+D9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,eA2E/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,eA+BtC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,eAqC/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,eA2D9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,eAqCjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,eAkDlC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,eA0DnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,eAwF1B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,eAAe,EAAE,CAapD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAGxE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAExC"}
|
package/dist/macros.js
ADDED
|
@@ -0,0 +1,620 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @wundr/prompt-templates - Reusable macro library for prompt templating
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.personaMacro = exports.safetyGuardrailsMacro = exports.fewShotExamplesMacro = exports.chainOfThoughtMacro = exports.codeContextMacro = exports.toolsSectionMacro = exports.conversationHistoryMacro = exports.outputFormatMacro = exports.taskContextMacro = exports.systemRoleMacro = void 0;
|
|
7
|
+
exports.getBuiltinMacros = getBuiltinMacros;
|
|
8
|
+
exports.getMacroByName = getMacroByName;
|
|
9
|
+
exports.getMacroNames = getMacroNames;
|
|
10
|
+
/**
|
|
11
|
+
* System role macro - defines AI assistant behavior
|
|
12
|
+
*/
|
|
13
|
+
exports.systemRoleMacro = {
|
|
14
|
+
name: 'systemRole',
|
|
15
|
+
description: 'Define the AI assistant role and behavior',
|
|
16
|
+
template: `You are {{role}}{{#ifDefined expertise}}, specialized in {{expertise}}{{/ifDefined}}.
|
|
17
|
+
|
|
18
|
+
{{#ifDefined personality}}
|
|
19
|
+
Your personality traits:
|
|
20
|
+
{{bulletList personality}}
|
|
21
|
+
{{/ifDefined}}
|
|
22
|
+
|
|
23
|
+
{{#ifDefined constraints}}
|
|
24
|
+
You must follow these constraints:
|
|
25
|
+
{{bulletList constraints}}
|
|
26
|
+
{{/ifDefined}}`,
|
|
27
|
+
parameters: [
|
|
28
|
+
{
|
|
29
|
+
name: 'role',
|
|
30
|
+
description: 'The role of the AI assistant',
|
|
31
|
+
type: 'string',
|
|
32
|
+
required: true,
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: 'expertise',
|
|
36
|
+
description: 'Areas of expertise',
|
|
37
|
+
type: 'string',
|
|
38
|
+
required: false,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: 'personality',
|
|
42
|
+
description: 'Personality traits',
|
|
43
|
+
type: 'array',
|
|
44
|
+
required: false,
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'constraints',
|
|
48
|
+
description: 'Behavioral constraints',
|
|
49
|
+
type: 'array',
|
|
50
|
+
required: false,
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
example: '{{> systemRole role="a helpful assistant" expertise="software development" personality=(array "friendly" "concise") }}',
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Task context macro - provides context for a specific task
|
|
57
|
+
*/
|
|
58
|
+
exports.taskContextMacro = {
|
|
59
|
+
name: 'taskContext',
|
|
60
|
+
description: 'Provide context for a specific task',
|
|
61
|
+
template: `## Task: {{taskName}}
|
|
62
|
+
|
|
63
|
+
{{#ifDefined description}}
|
|
64
|
+
### Description
|
|
65
|
+
{{description}}
|
|
66
|
+
{{/ifDefined}}
|
|
67
|
+
|
|
68
|
+
{{#ifDefined objectives}}
|
|
69
|
+
### Objectives
|
|
70
|
+
{{numberedList objectives}}
|
|
71
|
+
{{/ifDefined}}
|
|
72
|
+
|
|
73
|
+
{{#ifDefined constraints}}
|
|
74
|
+
### Constraints
|
|
75
|
+
{{bulletList constraints}}
|
|
76
|
+
{{/ifDefined}}
|
|
77
|
+
|
|
78
|
+
{{#ifDefined examples}}
|
|
79
|
+
### Examples
|
|
80
|
+
{{#each examples}}
|
|
81
|
+
**Example {{@index}}:**
|
|
82
|
+
{{#codeBlock language}}
|
|
83
|
+
{{code}}
|
|
84
|
+
{{/codeBlock}}
|
|
85
|
+
{{/each}}
|
|
86
|
+
{{/ifDefined}}`,
|
|
87
|
+
parameters: [
|
|
88
|
+
{
|
|
89
|
+
name: 'taskName',
|
|
90
|
+
description: 'Name of the task',
|
|
91
|
+
type: 'string',
|
|
92
|
+
required: true,
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
name: 'description',
|
|
96
|
+
description: 'Task description',
|
|
97
|
+
type: 'string',
|
|
98
|
+
required: false,
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
name: 'objectives',
|
|
102
|
+
description: 'List of objectives',
|
|
103
|
+
type: 'array',
|
|
104
|
+
required: false,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
name: 'constraints',
|
|
108
|
+
description: 'Task constraints',
|
|
109
|
+
type: 'array',
|
|
110
|
+
required: false,
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: 'examples',
|
|
114
|
+
description: 'Example inputs/outputs',
|
|
115
|
+
type: 'array',
|
|
116
|
+
required: false,
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
example: '{{> taskContext taskName="Code Review" objectives=(array "Find bugs" "Suggest improvements") }}',
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* Output format macro - specifies expected output format
|
|
123
|
+
*/
|
|
124
|
+
exports.outputFormatMacro = {
|
|
125
|
+
name: 'outputFormat',
|
|
126
|
+
description: 'Specify the expected output format',
|
|
127
|
+
template: `## Output Format
|
|
128
|
+
|
|
129
|
+
{{#compare format "eq" "json"}}
|
|
130
|
+
Respond with valid JSON in the following structure:
|
|
131
|
+
{{#codeBlock "json"}}
|
|
132
|
+
{{schema}}
|
|
133
|
+
{{/codeBlock}}
|
|
134
|
+
{{/compare}}
|
|
135
|
+
|
|
136
|
+
{{#compare format "eq" "markdown"}}
|
|
137
|
+
Respond in Markdown format with the following sections:
|
|
138
|
+
{{bulletList sections}}
|
|
139
|
+
{{/compare}}
|
|
140
|
+
|
|
141
|
+
{{#compare format "eq" "structured"}}
|
|
142
|
+
Respond with the following structure:
|
|
143
|
+
{{#each fields}}
|
|
144
|
+
- **{{name}}**: {{description}}{{#ifDefined required}} (required){{/ifDefined}}
|
|
145
|
+
{{/each}}
|
|
146
|
+
{{/compare}}
|
|
147
|
+
|
|
148
|
+
{{#compare format "eq" "freeform"}}
|
|
149
|
+
Respond in natural language.
|
|
150
|
+
{{/compare}}
|
|
151
|
+
|
|
152
|
+
{{#ifDefined example}}
|
|
153
|
+
### Example Output
|
|
154
|
+
{{#codeBlock language}}
|
|
155
|
+
{{example}}
|
|
156
|
+
{{/codeBlock}}
|
|
157
|
+
{{/ifDefined}}`,
|
|
158
|
+
parameters: [
|
|
159
|
+
{
|
|
160
|
+
name: 'format',
|
|
161
|
+
description: 'Output format type (json, markdown, structured, freeform)',
|
|
162
|
+
type: 'string',
|
|
163
|
+
required: true,
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
name: 'schema',
|
|
167
|
+
description: 'JSON schema for json format',
|
|
168
|
+
type: 'string',
|
|
169
|
+
required: false,
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
name: 'sections',
|
|
173
|
+
description: 'Section names for markdown format',
|
|
174
|
+
type: 'array',
|
|
175
|
+
required: false,
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
name: 'fields',
|
|
179
|
+
description: 'Field definitions for structured format',
|
|
180
|
+
type: 'array',
|
|
181
|
+
required: false,
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
name: 'example',
|
|
185
|
+
description: 'Example output',
|
|
186
|
+
type: 'string',
|
|
187
|
+
required: false,
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
name: 'language',
|
|
191
|
+
description: 'Code block language for example',
|
|
192
|
+
type: 'string',
|
|
193
|
+
required: false,
|
|
194
|
+
default: '',
|
|
195
|
+
},
|
|
196
|
+
],
|
|
197
|
+
example: '{{> outputFormat format="json" schema=\'{"result": "string", "confidence": "number"}\' }}',
|
|
198
|
+
};
|
|
199
|
+
/**
|
|
200
|
+
* Conversation history macro - formats previous messages
|
|
201
|
+
*/
|
|
202
|
+
exports.conversationHistoryMacro = {
|
|
203
|
+
name: 'conversationHistory',
|
|
204
|
+
description: 'Include formatted conversation history',
|
|
205
|
+
template: `{{#ifDefined messages}}
|
|
206
|
+
## Conversation History
|
|
207
|
+
|
|
208
|
+
{{formatMemory messages max=maxMessages format=format}}
|
|
209
|
+
{{/ifDefined}}`,
|
|
210
|
+
parameters: [
|
|
211
|
+
{
|
|
212
|
+
name: 'messages',
|
|
213
|
+
description: 'Array of conversation messages',
|
|
214
|
+
type: 'array',
|
|
215
|
+
required: true,
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
name: 'maxMessages',
|
|
219
|
+
description: 'Maximum number of messages to include',
|
|
220
|
+
type: 'number',
|
|
221
|
+
required: false,
|
|
222
|
+
default: 10,
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
name: 'format',
|
|
226
|
+
description: 'Output format (default, compact, xml)',
|
|
227
|
+
type: 'string',
|
|
228
|
+
required: false,
|
|
229
|
+
default: 'default',
|
|
230
|
+
},
|
|
231
|
+
],
|
|
232
|
+
example: '{{> conversationHistory messages=memory.messages maxMessages=5 }}',
|
|
233
|
+
};
|
|
234
|
+
/**
|
|
235
|
+
* Tools section macro - formats available tools
|
|
236
|
+
*/
|
|
237
|
+
exports.toolsSectionMacro = {
|
|
238
|
+
name: 'toolsSection',
|
|
239
|
+
description: 'Include available tools documentation',
|
|
240
|
+
template: `{{#ifDefined tools}}
|
|
241
|
+
## Available Tools
|
|
242
|
+
|
|
243
|
+
You have access to the following tools:
|
|
244
|
+
|
|
245
|
+
{{formatTools tools format=format}}
|
|
246
|
+
|
|
247
|
+
{{#ifDefined instructions}}
|
|
248
|
+
### Tool Usage Instructions
|
|
249
|
+
{{instructions}}
|
|
250
|
+
{{/ifDefined}}
|
|
251
|
+
{{/ifDefined}}`,
|
|
252
|
+
parameters: [
|
|
253
|
+
{
|
|
254
|
+
name: 'tools',
|
|
255
|
+
description: 'Array of tool definitions',
|
|
256
|
+
type: 'array',
|
|
257
|
+
required: true,
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
name: 'format',
|
|
261
|
+
description: 'Tool format (default, compact, json)',
|
|
262
|
+
type: 'string',
|
|
263
|
+
required: false,
|
|
264
|
+
default: 'default',
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
name: 'instructions',
|
|
268
|
+
description: 'Additional tool usage instructions',
|
|
269
|
+
type: 'string',
|
|
270
|
+
required: false,
|
|
271
|
+
},
|
|
272
|
+
],
|
|
273
|
+
example: '{{> toolsSection tools=tools format="compact" }}',
|
|
274
|
+
};
|
|
275
|
+
/**
|
|
276
|
+
* Code context macro - provides code snippet context
|
|
277
|
+
*/
|
|
278
|
+
exports.codeContextMacro = {
|
|
279
|
+
name: 'codeContext',
|
|
280
|
+
description: 'Provide code context for analysis or generation',
|
|
281
|
+
template: `## Code Context
|
|
282
|
+
|
|
283
|
+
{{#ifDefined filename}}
|
|
284
|
+
**File:** \`{{filename}}\`
|
|
285
|
+
{{/ifDefined}}
|
|
286
|
+
|
|
287
|
+
{{#ifDefined language}}
|
|
288
|
+
**Language:** {{language}}
|
|
289
|
+
{{/ifDefined}}
|
|
290
|
+
|
|
291
|
+
{{#codeBlock language}}
|
|
292
|
+
{{code}}
|
|
293
|
+
{{/codeBlock}}
|
|
294
|
+
|
|
295
|
+
{{#ifDefined lineNumbers}}
|
|
296
|
+
**Lines:** {{lineNumbers.start}} - {{lineNumbers.end}}
|
|
297
|
+
{{/ifDefined}}
|
|
298
|
+
|
|
299
|
+
{{#ifDefined relatedFiles}}
|
|
300
|
+
### Related Files
|
|
301
|
+
{{bulletList relatedFiles}}
|
|
302
|
+
{{/ifDefined}}`,
|
|
303
|
+
parameters: [
|
|
304
|
+
{
|
|
305
|
+
name: 'code',
|
|
306
|
+
description: 'The code snippet',
|
|
307
|
+
type: 'string',
|
|
308
|
+
required: true,
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
name: 'language',
|
|
312
|
+
description: 'Programming language',
|
|
313
|
+
type: 'string',
|
|
314
|
+
required: false,
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
name: 'filename',
|
|
318
|
+
description: 'Source filename',
|
|
319
|
+
type: 'string',
|
|
320
|
+
required: false,
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
name: 'lineNumbers',
|
|
324
|
+
description: 'Line number range',
|
|
325
|
+
type: 'object',
|
|
326
|
+
required: false,
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
name: 'relatedFiles',
|
|
330
|
+
description: 'List of related files',
|
|
331
|
+
type: 'array',
|
|
332
|
+
required: false,
|
|
333
|
+
},
|
|
334
|
+
],
|
|
335
|
+
example: '{{> codeContext code=sourceCode language="typescript" filename="index.ts" }}',
|
|
336
|
+
};
|
|
337
|
+
/**
|
|
338
|
+
* Chain of thought macro - encourages step-by-step reasoning
|
|
339
|
+
*/
|
|
340
|
+
exports.chainOfThoughtMacro = {
|
|
341
|
+
name: 'chainOfThought',
|
|
342
|
+
description: 'Encourage step-by-step reasoning',
|
|
343
|
+
template: `## Reasoning Instructions
|
|
344
|
+
|
|
345
|
+
Think through this problem step by step:
|
|
346
|
+
|
|
347
|
+
{{#ifDefined steps}}
|
|
348
|
+
{{numberedList steps}}
|
|
349
|
+
{{else}}
|
|
350
|
+
1. First, understand the problem/request completely
|
|
351
|
+
2. Break down the problem into smaller parts
|
|
352
|
+
3. Consider different approaches
|
|
353
|
+
4. Evaluate the pros and cons of each approach
|
|
354
|
+
5. Select the best approach and implement it
|
|
355
|
+
6. Verify your solution
|
|
356
|
+
{{/ifDefined}}
|
|
357
|
+
|
|
358
|
+
{{#ifDefined showThinking}}
|
|
359
|
+
Please show your reasoning process before providing the final answer.
|
|
360
|
+
{{/ifDefined}}`,
|
|
361
|
+
parameters: [
|
|
362
|
+
{
|
|
363
|
+
name: 'steps',
|
|
364
|
+
description: 'Custom reasoning steps',
|
|
365
|
+
type: 'array',
|
|
366
|
+
required: false,
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
name: 'showThinking',
|
|
370
|
+
description: 'Whether to show reasoning process',
|
|
371
|
+
type: 'boolean',
|
|
372
|
+
required: false,
|
|
373
|
+
default: true,
|
|
374
|
+
},
|
|
375
|
+
],
|
|
376
|
+
example: '{{> chainOfThought showThinking=true }}',
|
|
377
|
+
};
|
|
378
|
+
/**
|
|
379
|
+
* Few-shot examples macro - provides learning examples
|
|
380
|
+
*/
|
|
381
|
+
exports.fewShotExamplesMacro = {
|
|
382
|
+
name: 'fewShotExamples',
|
|
383
|
+
description: 'Provide few-shot learning examples',
|
|
384
|
+
template: `## Examples
|
|
385
|
+
|
|
386
|
+
Here are some examples to guide your response:
|
|
387
|
+
|
|
388
|
+
{{#each examples}}
|
|
389
|
+
### Example {{add @index 1}}
|
|
390
|
+
|
|
391
|
+
**Input:**
|
|
392
|
+
{{#codeBlock inputLanguage}}
|
|
393
|
+
{{input}}
|
|
394
|
+
{{/codeBlock}}
|
|
395
|
+
|
|
396
|
+
**Output:**
|
|
397
|
+
{{#codeBlock outputLanguage}}
|
|
398
|
+
{{output}}
|
|
399
|
+
{{/codeBlock}}
|
|
400
|
+
|
|
401
|
+
{{#ifDefined explanation}}
|
|
402
|
+
**Explanation:** {{explanation}}
|
|
403
|
+
{{/ifDefined}}
|
|
404
|
+
|
|
405
|
+
---
|
|
406
|
+
{{/each}}`,
|
|
407
|
+
parameters: [
|
|
408
|
+
{
|
|
409
|
+
name: 'examples',
|
|
410
|
+
description: 'Array of input/output examples',
|
|
411
|
+
type: 'array',
|
|
412
|
+
required: true,
|
|
413
|
+
},
|
|
414
|
+
{
|
|
415
|
+
name: 'inputLanguage',
|
|
416
|
+
description: 'Language for input code blocks',
|
|
417
|
+
type: 'string',
|
|
418
|
+
required: false,
|
|
419
|
+
default: '',
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
name: 'outputLanguage',
|
|
423
|
+
description: 'Language for output code blocks',
|
|
424
|
+
type: 'string',
|
|
425
|
+
required: false,
|
|
426
|
+
default: '',
|
|
427
|
+
},
|
|
428
|
+
],
|
|
429
|
+
example: '{{> fewShotExamples examples=examples inputLanguage="text" outputLanguage="json" }}',
|
|
430
|
+
};
|
|
431
|
+
/**
|
|
432
|
+
* Safety guardrails macro - adds safety constraints
|
|
433
|
+
*/
|
|
434
|
+
exports.safetyGuardrailsMacro = {
|
|
435
|
+
name: 'safetyGuardrails',
|
|
436
|
+
description: 'Add safety constraints and guardrails',
|
|
437
|
+
template: `## Safety Guidelines
|
|
438
|
+
|
|
439
|
+
{{#ifDefined level}}
|
|
440
|
+
**Safety Level:** {{uppercase level}}
|
|
441
|
+
{{/ifDefined}}
|
|
442
|
+
|
|
443
|
+
You must adhere to these safety guidelines:
|
|
444
|
+
|
|
445
|
+
{{#ifDefined allowed}}
|
|
446
|
+
### Allowed Actions
|
|
447
|
+
{{bulletList allowed}}
|
|
448
|
+
{{/ifDefined}}
|
|
449
|
+
|
|
450
|
+
{{#ifDefined prohibited}}
|
|
451
|
+
### Prohibited Actions
|
|
452
|
+
{{bulletList prohibited}}
|
|
453
|
+
{{/ifDefined}}
|
|
454
|
+
|
|
455
|
+
{{#ifDefined responseGuidelines}}
|
|
456
|
+
### Response Guidelines
|
|
457
|
+
{{bulletList responseGuidelines}}
|
|
458
|
+
{{/ifDefined}}
|
|
459
|
+
|
|
460
|
+
{{#compare level "eq" "strict"}}
|
|
461
|
+
If a request violates any guideline, politely decline and explain why.
|
|
462
|
+
{{/compare}}`,
|
|
463
|
+
parameters: [
|
|
464
|
+
{
|
|
465
|
+
name: 'level',
|
|
466
|
+
description: 'Safety level (strict, moderate, relaxed)',
|
|
467
|
+
type: 'string',
|
|
468
|
+
required: false,
|
|
469
|
+
default: 'moderate',
|
|
470
|
+
},
|
|
471
|
+
{
|
|
472
|
+
name: 'allowed',
|
|
473
|
+
description: 'List of allowed actions',
|
|
474
|
+
type: 'array',
|
|
475
|
+
required: false,
|
|
476
|
+
},
|
|
477
|
+
{
|
|
478
|
+
name: 'prohibited',
|
|
479
|
+
description: 'List of prohibited actions',
|
|
480
|
+
type: 'array',
|
|
481
|
+
required: false,
|
|
482
|
+
},
|
|
483
|
+
{
|
|
484
|
+
name: 'responseGuidelines',
|
|
485
|
+
description: 'Guidelines for responses',
|
|
486
|
+
type: 'array',
|
|
487
|
+
required: false,
|
|
488
|
+
},
|
|
489
|
+
],
|
|
490
|
+
example: '{{> safetyGuardrails level="strict" prohibited=(array "Generate harmful content" "Share personal data") }}',
|
|
491
|
+
};
|
|
492
|
+
/**
|
|
493
|
+
* Persona definition macro - creates a detailed persona
|
|
494
|
+
*/
|
|
495
|
+
exports.personaMacro = {
|
|
496
|
+
name: 'persona',
|
|
497
|
+
description: 'Define a detailed AI persona',
|
|
498
|
+
template: `# Persona: {{name}}
|
|
499
|
+
|
|
500
|
+
{{#ifDefined tagline}}
|
|
501
|
+
*{{tagline}}*
|
|
502
|
+
{{/ifDefined}}
|
|
503
|
+
|
|
504
|
+
## About
|
|
505
|
+
{{description}}
|
|
506
|
+
|
|
507
|
+
{{#ifDefined background}}
|
|
508
|
+
## Background
|
|
509
|
+
{{background}}
|
|
510
|
+
{{/ifDefined}}
|
|
511
|
+
|
|
512
|
+
{{#ifDefined skills}}
|
|
513
|
+
## Skills & Expertise
|
|
514
|
+
{{bulletList skills}}
|
|
515
|
+
{{/ifDefined}}
|
|
516
|
+
|
|
517
|
+
{{#ifDefined communication}}
|
|
518
|
+
## Communication Style
|
|
519
|
+
{{bulletList communication}}
|
|
520
|
+
{{/ifDefined}}
|
|
521
|
+
|
|
522
|
+
{{#ifDefined knowledge}}
|
|
523
|
+
## Knowledge Base
|
|
524
|
+
{{bulletList knowledge}}
|
|
525
|
+
{{/ifDefined}}
|
|
526
|
+
|
|
527
|
+
{{#ifDefined limitations}}
|
|
528
|
+
## Limitations
|
|
529
|
+
{{bulletList limitations}}
|
|
530
|
+
{{/ifDefined}}`,
|
|
531
|
+
parameters: [
|
|
532
|
+
{
|
|
533
|
+
name: 'name',
|
|
534
|
+
description: 'Persona name',
|
|
535
|
+
type: 'string',
|
|
536
|
+
required: true,
|
|
537
|
+
},
|
|
538
|
+
{
|
|
539
|
+
name: 'description',
|
|
540
|
+
description: 'Short description',
|
|
541
|
+
type: 'string',
|
|
542
|
+
required: true,
|
|
543
|
+
},
|
|
544
|
+
{
|
|
545
|
+
name: 'tagline',
|
|
546
|
+
description: 'Persona tagline',
|
|
547
|
+
type: 'string',
|
|
548
|
+
required: false,
|
|
549
|
+
},
|
|
550
|
+
{
|
|
551
|
+
name: 'background',
|
|
552
|
+
description: 'Background information',
|
|
553
|
+
type: 'string',
|
|
554
|
+
required: false,
|
|
555
|
+
},
|
|
556
|
+
{
|
|
557
|
+
name: 'skills',
|
|
558
|
+
description: 'List of skills',
|
|
559
|
+
type: 'array',
|
|
560
|
+
required: false,
|
|
561
|
+
},
|
|
562
|
+
{
|
|
563
|
+
name: 'communication',
|
|
564
|
+
description: 'Communication style traits',
|
|
565
|
+
type: 'array',
|
|
566
|
+
required: false,
|
|
567
|
+
},
|
|
568
|
+
{
|
|
569
|
+
name: 'knowledge',
|
|
570
|
+
description: 'Knowledge domains',
|
|
571
|
+
type: 'array',
|
|
572
|
+
required: false,
|
|
573
|
+
},
|
|
574
|
+
{
|
|
575
|
+
name: 'limitations',
|
|
576
|
+
description: 'Known limitations',
|
|
577
|
+
type: 'array',
|
|
578
|
+
required: false,
|
|
579
|
+
},
|
|
580
|
+
],
|
|
581
|
+
example: '{{> persona name="CodeBot" description="A helpful coding assistant" skills=(array "JavaScript" "Python" "TypeScript") }}',
|
|
582
|
+
};
|
|
583
|
+
/**
|
|
584
|
+
* Get all built-in macro definitions
|
|
585
|
+
*
|
|
586
|
+
* @returns Array of macro definitions
|
|
587
|
+
*/
|
|
588
|
+
function getBuiltinMacros() {
|
|
589
|
+
return [
|
|
590
|
+
exports.systemRoleMacro,
|
|
591
|
+
exports.taskContextMacro,
|
|
592
|
+
exports.outputFormatMacro,
|
|
593
|
+
exports.conversationHistoryMacro,
|
|
594
|
+
exports.toolsSectionMacro,
|
|
595
|
+
exports.codeContextMacro,
|
|
596
|
+
exports.chainOfThoughtMacro,
|
|
597
|
+
exports.fewShotExamplesMacro,
|
|
598
|
+
exports.safetyGuardrailsMacro,
|
|
599
|
+
exports.personaMacro,
|
|
600
|
+
];
|
|
601
|
+
}
|
|
602
|
+
/**
|
|
603
|
+
* Get a macro by name
|
|
604
|
+
*
|
|
605
|
+
* @param name - Macro name
|
|
606
|
+
* @returns Macro definition or undefined
|
|
607
|
+
*/
|
|
608
|
+
function getMacroByName(name) {
|
|
609
|
+
const macros = getBuiltinMacros();
|
|
610
|
+
return macros.find(macro => macro.name === name);
|
|
611
|
+
}
|
|
612
|
+
/**
|
|
613
|
+
* Get macro names
|
|
614
|
+
*
|
|
615
|
+
* @returns Array of macro names
|
|
616
|
+
*/
|
|
617
|
+
function getMacroNames() {
|
|
618
|
+
return getBuiltinMacros().map(macro => macro.name);
|
|
619
|
+
}
|
|
620
|
+
//# sourceMappingURL=macros.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"macros.js","sourceRoot":"","sources":["../src/macros.ts"],"names":[],"mappings":"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"}
|