@mixio-pro/kalaasetu-mcp 1.2.1 → 2.0.1-beta
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/fal-config.json +106 -0
- package/package.json +2 -1
- package/src/index.ts +0 -9
- package/src/tools/fal/config.ts +120 -23
- package/src/tools/fal/generate.ts +370 -84
- package/src/tools/fal/index.ts +2 -7
- package/src/tools/fal/models.ts +163 -29
- package/src/tools/fal/storage.ts +9 -2
- package/src/tools/gemini.ts +106 -26
- package/src/tools/image-to-video.ts +359 -129
- package/src/tools/perplexity.ts +61 -61
- package/src/tools/youtube.ts +8 -3
- package/src/utils/llm-prompt-enhancer.ts +302 -0
- package/src/utils/prompt-enhancer-presets.ts +303 -0
- package/src/utils/prompt-enhancer.ts +186 -0
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt Enhancer Presets
|
|
3
|
+
*
|
|
4
|
+
* A factory/dictionary of predefined prompt enhancer configurations.
|
|
5
|
+
* Organized by use case: image generation, video generation, and specialized styles.
|
|
6
|
+
*
|
|
7
|
+
* Based on best practices from LTX-2 prompting guide and industry standards.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { PromptEnhancer, type PromptEnhancerConfig } from "./prompt-enhancer";
|
|
11
|
+
|
|
12
|
+
// =============================================================================
|
|
13
|
+
// IMAGE GENERATION PRESETS
|
|
14
|
+
// =============================================================================
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Presets optimized for image generation (Gemini Imagen, Flux, SD, etc.)
|
|
18
|
+
*/
|
|
19
|
+
export const IMAGE_PRESETS: Record<string, PromptEnhancerConfig> = {
|
|
20
|
+
/**
|
|
21
|
+
* Cinematic still photography style
|
|
22
|
+
*/
|
|
23
|
+
cinematic: {
|
|
24
|
+
styleGuide:
|
|
25
|
+
"cinematic composition, dramatic lighting, shallow depth of field, film grain, 4K, hyperdetailed",
|
|
26
|
+
negativeElements:
|
|
27
|
+
"blurry, low quality, pixelated, distorted, watermark, text, logo",
|
|
28
|
+
},
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Photorealistic, DSLR-quality imagery
|
|
32
|
+
*/
|
|
33
|
+
photorealistic: {
|
|
34
|
+
styleGuide:
|
|
35
|
+
"photorealistic, ultra-detailed, natural lighting, DSLR quality, 8K resolution, sharp focus",
|
|
36
|
+
negativeElements:
|
|
37
|
+
"cartoon, anime, illustration, painting, blurry, distorted, artificial",
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Anime and manga illustration style
|
|
42
|
+
*/
|
|
43
|
+
anime: {
|
|
44
|
+
styleGuide:
|
|
45
|
+
"anime style, vibrant colors, cel-shaded, detailed linework, Studio Ghibli inspired",
|
|
46
|
+
negativeElements:
|
|
47
|
+
"photorealistic, 3D render, Western cartoon, blurry, low detail",
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Abstract and modern art
|
|
52
|
+
*/
|
|
53
|
+
abstract: {
|
|
54
|
+
styleGuide:
|
|
55
|
+
"abstract art, geometric shapes, bold colors, modern art, contemporary, expressive brushstrokes",
|
|
56
|
+
negativeElements:
|
|
57
|
+
"photorealistic, detailed faces, text, logo, realistic proportions",
|
|
58
|
+
},
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Vintage and retro aesthetic
|
|
62
|
+
*/
|
|
63
|
+
vintage: {
|
|
64
|
+
styleGuide:
|
|
65
|
+
"vintage aesthetic, retro, film grain, 1970s color palette, warm tones, nostalgic, analog photography",
|
|
66
|
+
negativeElements:
|
|
67
|
+
"modern, digital, clean, sharp, contemporary, high contrast",
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Fashion editorial photography
|
|
72
|
+
*/
|
|
73
|
+
fashion_editorial: {
|
|
74
|
+
styleGuide:
|
|
75
|
+
"fashion editorial, high-end photography, professional lighting, Vogue style, elegant composition, soft rim light",
|
|
76
|
+
negativeElements:
|
|
77
|
+
"casual, amateur, blurry, bad lighting, unflattering angle",
|
|
78
|
+
},
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Fantasy illustration
|
|
82
|
+
*/
|
|
83
|
+
fantasy: {
|
|
84
|
+
styleGuide:
|
|
85
|
+
"fantasy art, epic composition, magical atmosphere, detailed, painterly, dramatic lighting, ethereal",
|
|
86
|
+
negativeElements: "modern, realistic, mundane, blurry, low detail",
|
|
87
|
+
},
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Minimalist design
|
|
91
|
+
*/
|
|
92
|
+
minimalist: {
|
|
93
|
+
styleGuide:
|
|
94
|
+
"minimalist design, clean lines, negative space, simple composition, modern, elegant, refined",
|
|
95
|
+
negativeElements: "cluttered, busy, detailed, ornate, complex, messy",
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
// =============================================================================
|
|
100
|
+
// VIDEO GENERATION PRESETS
|
|
101
|
+
// Based on LTX-2 Prompting Guide best practices
|
|
102
|
+
// =============================================================================
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Presets optimized for video generation (LTX, Luma, Veo, etc.)
|
|
106
|
+
* Following LTX-2 guidelines:
|
|
107
|
+
* - Establish the shot with cinematography terms
|
|
108
|
+
* - Set the scene with lighting/atmosphere
|
|
109
|
+
* - Describe action as natural sequence
|
|
110
|
+
* - Define camera movements clearly
|
|
111
|
+
*/
|
|
112
|
+
export const VIDEO_PRESETS: Record<string, PromptEnhancerConfig> = {
|
|
113
|
+
/**
|
|
114
|
+
* LTX-2 specific preset based on official prompting guide.
|
|
115
|
+
* Key principles:
|
|
116
|
+
* - Establish shot with cinematography terms
|
|
117
|
+
* - Set scene with lighting/atmosphere
|
|
118
|
+
* - Describe action as natural flowing sequence
|
|
119
|
+
* - Use clean, readable camera language
|
|
120
|
+
* - Focus on emotive moments, atmosphere, and stylized aesthetics
|
|
121
|
+
*/
|
|
122
|
+
ltx2: {
|
|
123
|
+
// No prefix - LTX-2 wants complete flowing scenes, not formulaic starts
|
|
124
|
+
suffix:
|
|
125
|
+
"The camera captures this with thoughtful cinematography, shallow depth of field, and natural motion.",
|
|
126
|
+
styleGuide:
|
|
127
|
+
"cinematic composition, present tense, flowing narrative, clear camera language, atmospheric lighting, emotive expressions through physical cues",
|
|
128
|
+
negativeElements:
|
|
129
|
+
"text, logos, signage, brand names, complex physics, chaotic motion, jumping, juggling, conflicting light sources, overloaded scene, too many characters, internal emotional states without visual cues",
|
|
130
|
+
},
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Cinematic video with dramatic camera work
|
|
134
|
+
*/
|
|
135
|
+
cinematic_video: {
|
|
136
|
+
prefix: "A cinematic shot.",
|
|
137
|
+
styleGuide:
|
|
138
|
+
"smooth camera movement, professional cinematography, dramatic lighting, shallow depth of field, film grain, cinematic color grading",
|
|
139
|
+
negativeElements:
|
|
140
|
+
"shaky camera, low quality, pixelated, glitchy, jerky motion, text overlay",
|
|
141
|
+
},
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Documentary-style realistic footage
|
|
145
|
+
*/
|
|
146
|
+
documentary: {
|
|
147
|
+
prefix: "Documentary footage.",
|
|
148
|
+
styleGuide:
|
|
149
|
+
"natural lighting, handheld camera feel, authentic, observational, steady tracking shot",
|
|
150
|
+
negativeElements:
|
|
151
|
+
"staged, artificial, over-produced, fantasy elements, special effects",
|
|
152
|
+
},
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Action-packed dynamic shots
|
|
156
|
+
*/
|
|
157
|
+
action: {
|
|
158
|
+
prefix: "An action packed shot.",
|
|
159
|
+
styleGuide:
|
|
160
|
+
"dynamic camera movement, motion blur, intense, fast-paced, dramatic angles, handheld feel",
|
|
161
|
+
negativeElements:
|
|
162
|
+
"static, slow, boring, calm, peaceful, stable tripod shot",
|
|
163
|
+
},
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Slow and atmospheric
|
|
167
|
+
*/
|
|
168
|
+
atmospheric: {
|
|
169
|
+
styleGuide:
|
|
170
|
+
"slow camera movement, atmospheric, moody lighting, fog or mist, ambient, lingering shot, soft focus background",
|
|
171
|
+
negativeElements:
|
|
172
|
+
"fast motion, harsh lighting, chaotic, busy, cluttered scene",
|
|
173
|
+
},
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Talking head / dialogue scene
|
|
177
|
+
*/
|
|
178
|
+
dialogue: {
|
|
179
|
+
prefix: "A warm, intimate scene.",
|
|
180
|
+
styleGuide:
|
|
181
|
+
"medium close-up, soft lighting, natural conversation, over-the-shoulder shots, subtle camera movement, realistic acting",
|
|
182
|
+
negativeElements:
|
|
183
|
+
"wide shot, action, fast movement, loud, chaotic, unrealistic",
|
|
184
|
+
},
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Product showcase / commercial
|
|
188
|
+
*/
|
|
189
|
+
commercial: {
|
|
190
|
+
styleGuide:
|
|
191
|
+
"smooth dolly movement, professional studio lighting, clean background, product focus, slow rotation, sharp detail, premium aesthetic",
|
|
192
|
+
negativeElements:
|
|
193
|
+
"cluttered, dark, amateur, shaky, low quality, distraction",
|
|
194
|
+
},
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Animation / stylized motion
|
|
198
|
+
*/
|
|
199
|
+
animated: {
|
|
200
|
+
styleGuide:
|
|
201
|
+
"animated style, expressive movement, stylized timing, smooth transitions, character animation, vibrant colors",
|
|
202
|
+
negativeElements: "photorealistic, live action, jerky, static, dull colors",
|
|
203
|
+
},
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Establish wide shot for scene setting
|
|
207
|
+
*/
|
|
208
|
+
establishing: {
|
|
209
|
+
prefix: "Wide establishing shot.",
|
|
210
|
+
styleGuide:
|
|
211
|
+
"expansive view, slow pan or static frame, epic scale, atmospheric, cinematic composition, golden hour lighting",
|
|
212
|
+
negativeElements:
|
|
213
|
+
"close-up, cluttered, indoor, tight framing, rapid movement",
|
|
214
|
+
},
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Intimate close-up for emotional moments
|
|
218
|
+
*/
|
|
219
|
+
closeup_emotional: {
|
|
220
|
+
prefix: "An intimate close-up.",
|
|
221
|
+
styleGuide:
|
|
222
|
+
"tight framing on face, shallow depth of field, emotional expression, soft lighting, subtle movement, eyes in focus",
|
|
223
|
+
negativeElements:
|
|
224
|
+
"wide shot, distant, cold lighting, static expression, fast movement",
|
|
225
|
+
},
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
// =============================================================================
|
|
229
|
+
// COMBINED PRESETS DICTIONARY
|
|
230
|
+
// =============================================================================
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* All available prompt enhancer presets.
|
|
234
|
+
*/
|
|
235
|
+
export const PROMPT_ENHANCER_PRESETS: Record<string, PromptEnhancerConfig> = {
|
|
236
|
+
...IMAGE_PRESETS,
|
|
237
|
+
...VIDEO_PRESETS,
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
// =============================================================================
|
|
241
|
+
// HELPER FUNCTIONS
|
|
242
|
+
// =============================================================================
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Get a PromptEnhancer for a named preset.
|
|
246
|
+
* Returns undefined if the preset doesn't exist.
|
|
247
|
+
*/
|
|
248
|
+
export function getPromptEnhancer(
|
|
249
|
+
presetName: string
|
|
250
|
+
): PromptEnhancer | undefined {
|
|
251
|
+
const config = PROMPT_ENHANCER_PRESETS[presetName];
|
|
252
|
+
if (!config) {
|
|
253
|
+
return undefined;
|
|
254
|
+
}
|
|
255
|
+
return PromptEnhancer.fromConfig(config);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* List all available enhancer preset names.
|
|
260
|
+
*/
|
|
261
|
+
export function listEnhancerPresets(): string[] {
|
|
262
|
+
return Object.keys(PROMPT_ENHANCER_PRESETS);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* List image-specific enhancer preset names.
|
|
267
|
+
*/
|
|
268
|
+
export function listImageEnhancerPresets(): string[] {
|
|
269
|
+
return Object.keys(IMAGE_PRESETS);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* List video-specific enhancer preset names.
|
|
274
|
+
*/
|
|
275
|
+
export function listVideoEnhancerPresets(): string[] {
|
|
276
|
+
return Object.keys(VIDEO_PRESETS);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Resolve an enhancer from either a preset name (string) or inline config.
|
|
281
|
+
* Returns PASSTHROUGH enhancer if resolution fails.
|
|
282
|
+
*/
|
|
283
|
+
export function resolveEnhancer(
|
|
284
|
+
input: string | PromptEnhancerConfig | undefined
|
|
285
|
+
): PromptEnhancer {
|
|
286
|
+
if (!input) {
|
|
287
|
+
return PromptEnhancer.PASSTHROUGH;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
if (typeof input === "string") {
|
|
291
|
+
const enhancer = getPromptEnhancer(input);
|
|
292
|
+
if (!enhancer) {
|
|
293
|
+
console.warn(
|
|
294
|
+
`Prompt enhancer preset '${input}' not found, using passthrough.`
|
|
295
|
+
);
|
|
296
|
+
return PromptEnhancer.PASSTHROUGH;
|
|
297
|
+
}
|
|
298
|
+
return enhancer;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
// It's an inline config object
|
|
302
|
+
return PromptEnhancer.fromConfig(input);
|
|
303
|
+
}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt Enhancer Utility
|
|
3
|
+
*
|
|
4
|
+
* A fluent builder pattern for constructing prompt enhancers that can be
|
|
5
|
+
* applied to improve prompts for image and video generation models.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Configuration interface for a prompt enhancer.
|
|
10
|
+
*/
|
|
11
|
+
export interface PromptEnhancerConfig {
|
|
12
|
+
/** Added before the user prompt */
|
|
13
|
+
prefix?: string;
|
|
14
|
+
/** Added after the user prompt */
|
|
15
|
+
suffix?: string;
|
|
16
|
+
/** Style/quality modifiers (e.g., "cinematic, 8k, hyperdetailed") */
|
|
17
|
+
styleGuide?: string;
|
|
18
|
+
/** Elements to avoid (used where supported as negative_prompt) */
|
|
19
|
+
negativeElements?: string;
|
|
20
|
+
/** How to join parts (default: " ") */
|
|
21
|
+
separator?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Template to wrap the entire result. Use "{prompt}" as placeholder.
|
|
24
|
+
* Example: "A cinematic shot of {prompt}, dramatic lighting"
|
|
25
|
+
*/
|
|
26
|
+
wrapTemplate?: string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Fluent builder for constructing PromptEnhancer instances.
|
|
31
|
+
*/
|
|
32
|
+
export class PromptEnhancerBuilder {
|
|
33
|
+
private config: PromptEnhancerConfig = {};
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Add text before the user's prompt.
|
|
37
|
+
* Useful for establishing shot type or scene context.
|
|
38
|
+
*/
|
|
39
|
+
withPrefix(text: string): this {
|
|
40
|
+
this.config.prefix = text;
|
|
41
|
+
return this;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Add text after the user's prompt.
|
|
46
|
+
* Useful for technical specifications or quality modifiers.
|
|
47
|
+
*/
|
|
48
|
+
withSuffix(text: string): this {
|
|
49
|
+
this.config.suffix = text;
|
|
50
|
+
return this;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Add style guide modifiers that get appended.
|
|
55
|
+
* Examples: "cinematic, film grain, dramatic lighting"
|
|
56
|
+
*/
|
|
57
|
+
withStyleGuide(styles: string): this {
|
|
58
|
+
this.config.styleGuide = styles;
|
|
59
|
+
return this;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Set negative elements to avoid in generation.
|
|
64
|
+
* Used as negative_prompt where supported.
|
|
65
|
+
*/
|
|
66
|
+
withNegativeElements(elements: string): this {
|
|
67
|
+
this.config.negativeElements = elements;
|
|
68
|
+
return this;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Set the separator between prompt parts.
|
|
73
|
+
* Default is a single space " ".
|
|
74
|
+
*/
|
|
75
|
+
withSeparator(sep: string): this {
|
|
76
|
+
this.config.separator = sep;
|
|
77
|
+
return this;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Set a template that wraps the entire enhanced prompt.
|
|
82
|
+
* Use "{prompt}" as placeholder for the combined prompt content.
|
|
83
|
+
*/
|
|
84
|
+
withTemplate(template: string): this {
|
|
85
|
+
this.config.wrapTemplate = template;
|
|
86
|
+
return this;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Build the final PromptEnhancer instance.
|
|
91
|
+
*/
|
|
92
|
+
build(): PromptEnhancer {
|
|
93
|
+
return PromptEnhancer.fromConfig({ ...this.config });
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Main prompt enhancer class.
|
|
99
|
+
* Applies configured transformations to improve prompts for AI generation.
|
|
100
|
+
*/
|
|
101
|
+
export class PromptEnhancer {
|
|
102
|
+
private config: PromptEnhancerConfig;
|
|
103
|
+
|
|
104
|
+
private constructor(config: PromptEnhancerConfig) {
|
|
105
|
+
this.config = config;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Create a new fluent builder instance.
|
|
110
|
+
*/
|
|
111
|
+
static builder(): PromptEnhancerBuilder {
|
|
112
|
+
return new PromptEnhancerBuilder();
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Create a PromptEnhancer directly from a config object.
|
|
117
|
+
*/
|
|
118
|
+
static fromConfig(config: PromptEnhancerConfig): PromptEnhancer {
|
|
119
|
+
return new PromptEnhancer({ ...config });
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* A no-op enhancer that returns prompts unchanged.
|
|
124
|
+
*/
|
|
125
|
+
static readonly PASSTHROUGH = new PromptEnhancer({});
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Enhance a prompt by applying all configured transformations.
|
|
129
|
+
*
|
|
130
|
+
* Order of operations:
|
|
131
|
+
* 1. Combine: prefix + prompt + suffix + styleGuide
|
|
132
|
+
* 2. Apply wrapTemplate if set
|
|
133
|
+
*/
|
|
134
|
+
enhance(prompt: string): string {
|
|
135
|
+
const separator = this.config.separator ?? " ";
|
|
136
|
+
const parts: string[] = [];
|
|
137
|
+
|
|
138
|
+
if (this.config.prefix) {
|
|
139
|
+
parts.push(this.config.prefix);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
parts.push(prompt);
|
|
143
|
+
|
|
144
|
+
if (this.config.suffix) {
|
|
145
|
+
parts.push(this.config.suffix);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
if (this.config.styleGuide) {
|
|
149
|
+
parts.push(this.config.styleGuide);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
let result = parts.join(separator);
|
|
153
|
+
|
|
154
|
+
if (this.config.wrapTemplate) {
|
|
155
|
+
result = this.config.wrapTemplate.replace("{prompt}", result);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
return result;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Get the negative elements (for use as negative_prompt).
|
|
163
|
+
*/
|
|
164
|
+
getNegativeElements(): string | undefined {
|
|
165
|
+
return this.config.negativeElements;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Check if this enhancer has any transformations configured.
|
|
170
|
+
*/
|
|
171
|
+
hasTransformations(): boolean {
|
|
172
|
+
return !!(
|
|
173
|
+
this.config.prefix ||
|
|
174
|
+
this.config.suffix ||
|
|
175
|
+
this.config.styleGuide ||
|
|
176
|
+
this.config.wrapTemplate
|
|
177
|
+
);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Export the enhancer's configuration.
|
|
182
|
+
*/
|
|
183
|
+
toConfig(): PromptEnhancerConfig {
|
|
184
|
+
return { ...this.config };
|
|
185
|
+
}
|
|
186
|
+
}
|