smart-spec-kit-mcp 2.0.4 → 2.0.6

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.
@@ -0,0 +1,540 @@
1
+ /**
2
+ * Prompt Tools for Spec-Kit
3
+ *
4
+ * MCP tools that load and execute prompt-as-code files from .spec-kit/prompts/
5
+ * These tools are callable via natural language in Copilot Chat.
6
+ */
7
+ import * as fs from "node:fs/promises";
8
+ import * as path from "node:path";
9
+ import { z } from "zod";
10
+ // Schema for prompt tool arguments
11
+ const SpecifyArgsSchema = z.object({
12
+ requirements: z.string().optional().describe("The requirements to specify. Can be a feature description, user story, or Azure DevOps work item ID (e.g., #12345). If not provided, Copilot will ask the user."),
13
+ contextId: z.string().optional().describe("Optional context ID for the specification (used for filename)."),
14
+ });
15
+ const PlanArgsSchema = z.object({
16
+ specPath: z.string().optional().describe("Path to the specification file. If not provided, will look for the most recent spec."),
17
+ });
18
+ const TasksArgsSchema = z.object({
19
+ planPath: z.string().optional().describe("Path to the plan file. If not provided, will look for the most recent plan."),
20
+ });
21
+ const ImplementArgsSchema = z.object({
22
+ taskId: z.string().optional().describe("Optional specific task ID to implement. If not provided, implements the next pending task."),
23
+ });
24
+ const ClarifyArgsSchema = z.object({
25
+ specPath: z.string().optional().describe("Path to the specification file to clarify."),
26
+ questions: z.string().optional().describe("Specific questions or areas to clarify."),
27
+ });
28
+ const HelpArgsSchema = z.object({
29
+ topic: z.string().optional().describe("The topic to get help on. Examples: 'workflows', 'templates', 'prompts', 'customization', 'troubleshooting'."),
30
+ });
31
+ /**
32
+ * Load documentation from package
33
+ */
34
+ async function loadDocumentation() {
35
+ const currentDir = path.dirname(new URL(import.meta.url).pathname);
36
+ const normalizedDir = currentDir.replace(/^\/([A-Za-z]:)/, "$1");
37
+ const packageRoot = path.resolve(normalizedDir, "..", "..");
38
+ const docPath = path.join(packageRoot, "docs", "DOCUMENTATION.md");
39
+ try {
40
+ return await fs.readFile(docPath, "utf-8");
41
+ }
42
+ catch {
43
+ return getBuiltInDocumentation();
44
+ }
45
+ }
46
+ /**
47
+ * Built-in documentation fallback
48
+ */
49
+ function getBuiltInDocumentation() {
50
+ return `# Spec-Kit Help
51
+
52
+ ## Available Commands
53
+
54
+ All commands are conversational - parameters are optional. Just type the command and Copilot will guide you.
55
+
56
+ | Command | Description | Example |
57
+ |---------|-------------|---------|
58
+ | \`speckit: spec\` | Create a specification | \`speckit: spec pour un système de login\` |
59
+ | \`speckit: plan\` | Create implementation plan | \`speckit: plan\` |
60
+ | \`speckit: tasks\` | Generate task breakdown | \`speckit: tasks\` |
61
+ | \`speckit: implement\` | Implement tasks | \`speckit: implement\` or \`speckit: implement task 3\` |
62
+ | \`speckit: clarify\` | Clarify requirements | \`speckit: clarify\` |
63
+ | \`speckit: help\` | Get help | \`speckit: help workflows\` |
64
+
65
+ ## Quick Start
66
+
67
+ 1. **Create a spec**: \`speckit: spec\` then describe what you want
68
+ 2. **Plan it**: \`speckit: plan\`
69
+ 3. **Break into tasks**: \`speckit: tasks\`
70
+ 4. **Implement**: \`speckit: implement\`
71
+
72
+ ## Project Structure
73
+
74
+ \`\`\`
75
+ .spec-kit/
76
+ ├── prompts/ # Prompt-as-Code files (customize behavior)
77
+ ├── templates/ # Document templates (customize format)
78
+ ├── memory/ # Project constitution (your principles)
79
+ └── workflows/ # YAML workflows (multi-step processes)
80
+ specs/ # Generated specifications (output)
81
+ \`\`\`
82
+
83
+ ## Customization
84
+
85
+ ### Modify Prompts
86
+ Edit files in \`.spec-kit/prompts/\` to change command behavior.
87
+
88
+ ### Edit Templates
89
+ Modify \`.spec-kit/templates/\` for custom document formats.
90
+
91
+ ### Create Workflows
92
+ Add YAML files to \`.spec-kit/workflows/\` for custom multi-step processes.
93
+
94
+ ### Update Constitution
95
+ Edit \`.spec-kit/memory/constitution.md\` with your project principles (tech stack, conventions, etc.)
96
+
97
+ ## Troubleshooting
98
+
99
+ 1. Reload VS Code: Ctrl+Shift+P → "Developer: Reload Window"
100
+ 2. Check MCP config in .vscode/settings.json
101
+ 3. Run \`npx smart-spec-kit-mcp setup\` to reinstall
102
+ `;
103
+ }
104
+ /**
105
+ * Load a prompt file from .spec-kit/prompts/
106
+ */
107
+ async function loadPrompt(projectPath, promptName) {
108
+ const promptPath = path.join(projectPath, ".spec-kit", "prompts", `${promptName}.md`);
109
+ try {
110
+ const content = await fs.readFile(promptPath, "utf-8");
111
+ return content;
112
+ }
113
+ catch {
114
+ // Try loading from package defaults
115
+ return null;
116
+ }
117
+ }
118
+ /**
119
+ * Load project constitution from .spec-kit/memory/constitution.md
120
+ */
121
+ async function loadConstitution(projectPath) {
122
+ const constitutionPath = path.join(projectPath, ".spec-kit", "memory", "constitution.md");
123
+ try {
124
+ const content = await fs.readFile(constitutionPath, "utf-8");
125
+ return content;
126
+ }
127
+ catch {
128
+ return null;
129
+ }
130
+ }
131
+ /**
132
+ * Load a template from .spec-kit/templates/
133
+ */
134
+ async function loadTemplate(projectPath, templateName) {
135
+ const templatePath = path.join(projectPath, ".spec-kit", "templates", `${templateName}.md`);
136
+ try {
137
+ const content = await fs.readFile(templatePath, "utf-8");
138
+ return content;
139
+ }
140
+ catch {
141
+ return null;
142
+ }
143
+ }
144
+ /**
145
+ * Find the most recent file matching a pattern in specs/
146
+ */
147
+ async function findRecentSpec(projectPath, pattern) {
148
+ const specsDir = path.join(projectPath, "specs");
149
+ try {
150
+ const files = await fs.readdir(specsDir);
151
+ const matchingFiles = files.filter(f => f.includes(pattern) && f.endsWith(".md"));
152
+ if (matchingFiles.length === 0)
153
+ return null;
154
+ // Sort by modification time, most recent first
155
+ const filesWithStats = await Promise.all(matchingFiles.map(async (file) => {
156
+ const filePath = path.join(specsDir, file);
157
+ const stats = await fs.stat(filePath);
158
+ return { file, mtime: stats.mtime };
159
+ }));
160
+ filesWithStats.sort((a, b) => b.mtime.getTime() - a.mtime.getTime());
161
+ const mostRecent = filesWithStats[0];
162
+ if (!mostRecent)
163
+ return null;
164
+ return path.join(specsDir, mostRecent.file);
165
+ }
166
+ catch {
167
+ return null;
168
+ }
169
+ }
170
+ /**
171
+ * Check if spec-kit is properly set up in the project
172
+ */
173
+ async function checkSetup(projectPath) {
174
+ const checks = [
175
+ { path: path.join(projectPath, ".spec-kit", "prompts"), name: ".spec-kit/prompts" },
176
+ { path: path.join(projectPath, ".spec-kit", "templates"), name: ".spec-kit/templates" },
177
+ { path: path.join(projectPath, ".spec-kit", "memory", "constitution.md"), name: ".spec-kit/memory/constitution.md" },
178
+ ];
179
+ const missing = [];
180
+ for (const check of checks) {
181
+ try {
182
+ await fs.access(check.path);
183
+ }
184
+ catch {
185
+ missing.push(check.name);
186
+ }
187
+ }
188
+ return { ok: missing.length === 0, missing };
189
+ }
190
+ /**
191
+ * Build the full context for a prompt execution
192
+ */
193
+ async function buildPromptContext(projectPath, promptName, userInput, additionalContext) {
194
+ const parts = [];
195
+ // 1. Load the prompt instructions
196
+ const prompt = await loadPrompt(projectPath, promptName);
197
+ if (prompt) {
198
+ parts.push("## Prompt Instructions\n\n" + prompt);
199
+ }
200
+ // 2. Load project constitution
201
+ const constitution = await loadConstitution(projectPath);
202
+ if (constitution) {
203
+ parts.push("## Project Constitution\n\n" + constitution);
204
+ }
205
+ // 3. Add user input
206
+ parts.push("## User Input\n\n" + userInput);
207
+ // 4. Add additional context if provided
208
+ if (additionalContext) {
209
+ for (const [key, value] of Object.entries(additionalContext)) {
210
+ parts.push(`## ${key}\n\n${value}`);
211
+ }
212
+ }
213
+ return parts.join("\n\n---\n\n");
214
+ }
215
+ /**
216
+ * Register prompt tools with the MCP server
217
+ */
218
+ export function registerPromptTools(server) {
219
+ // speckit_specify - Create a functional specification
220
+ server.tool("speckit_specify", "Create a functional specification from requirements. Use this when the user wants to create a spec, document requirements, or says 'speckit: spec', 'speckit: specify', or 'créer une spec'. Requirements can be a description, user story, or optionally an Azure DevOps work item ID.", SpecifyArgsSchema.shape, async ({ requirements, contextId }) => {
221
+ const projectPath = process.cwd();
222
+ // Check setup
223
+ const setup = await checkSetup(projectPath);
224
+ if (!setup.ok) {
225
+ return {
226
+ content: [{
227
+ type: "text",
228
+ text: `## ⚠️ Spec-Kit Setup Required\n\nMissing: ${setup.missing.join(", ")}\n\nRun \`npx smart-spec-kit-mcp setup\` to initialize Spec-Kit in this project.`,
229
+ }],
230
+ };
231
+ }
232
+ // Load template
233
+ const template = await loadTemplate(projectPath, "functional-spec");
234
+ // Handle missing requirements - prompt user
235
+ const userInput = requirements || "[User will provide requirements]";
236
+ // Build context
237
+ const context = await buildPromptContext(projectPath, "specify", userInput, {
238
+ "Template": template || "No template found",
239
+ "Context ID": contextId || "auto-generated",
240
+ });
241
+ return {
242
+ content: [{
243
+ type: "text",
244
+ text: `## 📋 Specification Creation
245
+
246
+ ${requirements ? `**Requirements:** ${requirements}` : "**📝 Please describe what you want to build.**\n\nYou can provide:\n- A feature description (e.g., \"user authentication with email/password\")\n- A user story (e.g., \"As a user, I want to...\")\n- An Azure DevOps work item ID (e.g., \"#12345\") - optional"}
247
+ ${contextId ? `**Context ID:** ${contextId}` : ""}
248
+
249
+ ${context}
250
+
251
+ ---
252
+
253
+ ## Copilot Instructions
254
+
255
+ ${requirements ? `Based on the prompt instructions and project constitution above:
256
+ 1. Analyze the provided requirements
257
+ 2. Fill in the functional specification template
258
+ 3. Save the specification to \`specs/${contextId || "feature"}-spec.md\`
259
+ 4. Report what was created and suggest next steps (speckit_plan)` : `The user hasn't provided requirements yet. Ask them to describe:
260
+ - What feature or functionality they want to build
261
+ - The user need or problem it solves
262
+ - Any constraints or requirements they have
263
+
264
+ Once they provide this information, proceed with specification creation.`}`,
265
+ }],
266
+ };
267
+ });
268
+ // speckit_plan - Create an implementation plan
269
+ server.tool("speckit_plan", "Create a technical implementation plan from a specification. Use this when the user wants to plan implementation, or says 'speckit: plan', 'planifier', or 'créer un plan'.", PlanArgsSchema.shape, async ({ specPath }) => {
270
+ const projectPath = process.cwd();
271
+ // Check setup
272
+ const setup = await checkSetup(projectPath);
273
+ if (!setup.ok) {
274
+ return {
275
+ content: [{
276
+ type: "text",
277
+ text: `## ⚠️ Spec-Kit Setup Required\n\nMissing: ${setup.missing.join(", ")}\n\nRun \`npx smart-spec-kit-mcp setup\` to initialize Spec-Kit in this project.`,
278
+ }],
279
+ };
280
+ }
281
+ // Find specification
282
+ let specContent = "";
283
+ const resolvedSpecPath = specPath || await findRecentSpec(projectPath, "spec");
284
+ if (resolvedSpecPath) {
285
+ try {
286
+ specContent = await fs.readFile(resolvedSpecPath, "utf-8");
287
+ }
288
+ catch {
289
+ specContent = "Could not load specification file.";
290
+ }
291
+ }
292
+ // Load template
293
+ const template = await loadTemplate(projectPath, "plan-template");
294
+ // Build context
295
+ const context = await buildPromptContext(projectPath, "plan", specContent, {
296
+ "Specification Path": resolvedSpecPath || "Not found",
297
+ "Template": template || "No template found",
298
+ });
299
+ return {
300
+ content: [{
301
+ type: "text",
302
+ text: `## 📐 Implementation Plan Creation
303
+
304
+ ${resolvedSpecPath ? `**Specification:** ${resolvedSpecPath}` : "**Warning:** No specification found. Please run speckit_specify first."}
305
+
306
+ ${context}
307
+
308
+ ---
309
+
310
+ ## Copilot Instructions
311
+
312
+ Based on the prompt instructions, specification, and project constitution:
313
+ 1. Analyze the specification
314
+ 2. Create a technical implementation plan
315
+ 3. Break down into phases and milestones
316
+ 4. Save to \`specs/plan.md\`
317
+ 5. Suggest next step (speckit_tasks)`,
318
+ }],
319
+ };
320
+ });
321
+ // speckit_tasks - Generate task breakdown
322
+ server.tool("speckit_tasks", "Generate a detailed task breakdown from a plan. Use this when the user wants to create tasks, or says 'speckit: tasks', 'générer les tâches', or 'créer les tâches'.", TasksArgsSchema.shape, async ({ planPath }) => {
323
+ const projectPath = process.cwd();
324
+ // Check setup
325
+ const setup = await checkSetup(projectPath);
326
+ if (!setup.ok) {
327
+ return {
328
+ content: [{
329
+ type: "text",
330
+ text: `## ⚠️ Spec-Kit Setup Required\n\nMissing: ${setup.missing.join(", ")}\n\nRun \`npx smart-spec-kit-mcp setup\` to initialize Spec-Kit in this project.`,
331
+ }],
332
+ };
333
+ }
334
+ // Find plan
335
+ let planContent = "";
336
+ const resolvedPlanPath = planPath || await findRecentSpec(projectPath, "plan");
337
+ if (resolvedPlanPath) {
338
+ try {
339
+ planContent = await fs.readFile(resolvedPlanPath, "utf-8");
340
+ }
341
+ catch {
342
+ planContent = "Could not load plan file.";
343
+ }
344
+ }
345
+ // Load template
346
+ const template = await loadTemplate(projectPath, "tasks-template");
347
+ // Build context
348
+ const context = await buildPromptContext(projectPath, "tasks", planContent, {
349
+ "Plan Path": resolvedPlanPath || "Not found",
350
+ "Template": template || "No template found",
351
+ });
352
+ return {
353
+ content: [{
354
+ type: "text",
355
+ text: `## 📝 Task Breakdown Creation
356
+
357
+ ${resolvedPlanPath ? `**Plan:** ${resolvedPlanPath}` : "**Warning:** No plan found. Please run speckit_plan first."}
358
+
359
+ ${context}
360
+
361
+ ---
362
+
363
+ ## Copilot Instructions
364
+
365
+ Based on the prompt instructions, plan, and project constitution:
366
+ 1. Analyze the implementation plan
367
+ 2. Create atomic, actionable tasks
368
+ 3. Add acceptance criteria to each task
369
+ 4. Save to \`specs/tasks.md\`
370
+ 5. Suggest next step (speckit_implement)`,
371
+ }],
372
+ };
373
+ });
374
+ // speckit_implement - Start implementation
375
+ server.tool("speckit_implement", "Implement tasks from the task breakdown. Use this when the user wants to start coding, or says 'speckit: implement', 'implémenter', or 'coder'.", ImplementArgsSchema.shape, async ({ taskId }) => {
376
+ const projectPath = process.cwd();
377
+ // Check setup
378
+ const setup = await checkSetup(projectPath);
379
+ if (!setup.ok) {
380
+ return {
381
+ content: [{
382
+ type: "text",
383
+ text: `## ⚠️ Spec-Kit Setup Required\n\nMissing: ${setup.missing.join(", ")}\n\nRun \`npx smart-spec-kit-mcp setup\` to initialize Spec-Kit in this project.`,
384
+ }],
385
+ };
386
+ }
387
+ // Find tasks
388
+ const tasksPath = await findRecentSpec(projectPath, "tasks");
389
+ let tasksContent = "";
390
+ if (tasksPath) {
391
+ try {
392
+ tasksContent = await fs.readFile(tasksPath, "utf-8");
393
+ }
394
+ catch {
395
+ tasksContent = "Could not load tasks file.";
396
+ }
397
+ }
398
+ // Find spec for context
399
+ const specPath = await findRecentSpec(projectPath, "spec");
400
+ let specContent = "";
401
+ if (specPath) {
402
+ try {
403
+ specContent = await fs.readFile(specPath, "utf-8");
404
+ }
405
+ catch {
406
+ specContent = "";
407
+ }
408
+ }
409
+ // Build context
410
+ const context = await buildPromptContext(projectPath, "implement", tasksContent, {
411
+ "Task ID": taskId || "Next pending task",
412
+ "Specification": specContent || "Not loaded",
413
+ });
414
+ return {
415
+ content: [{
416
+ type: "text",
417
+ text: `## 🚀 Implementation
418
+
419
+ ${tasksPath ? `**Tasks:** ${tasksPath}` : "**Warning:** No tasks found. Please run speckit_tasks first."}
420
+ ${taskId ? `**Target Task:** ${taskId}` : "**Target:** Next pending task"}
421
+
422
+ ${context}
423
+
424
+ ---
425
+
426
+ ## Copilot Instructions
427
+
428
+ Based on the prompt instructions, tasks, specification, and project constitution:
429
+ 1. Find the ${taskId ? `task ${taskId}` : "next pending task"}
430
+ 2. Implement the code following project conventions
431
+ 3. Mark the task as completed in tasks.md
432
+ 4. Report what was implemented
433
+ 5. Ask if user wants to continue with next task`,
434
+ }],
435
+ };
436
+ });
437
+ // speckit_clarify - Clarify requirements
438
+ server.tool("speckit_clarify", "Clarify ambiguous requirements in a specification. Use this when the user wants to clarify, or says 'speckit: clarify', 'clarifier', or 'préciser'.", ClarifyArgsSchema.shape, async ({ specPath, questions }) => {
439
+ const projectPath = process.cwd();
440
+ // Check setup
441
+ const setup = await checkSetup(projectPath);
442
+ if (!setup.ok) {
443
+ return {
444
+ content: [{
445
+ type: "text",
446
+ text: `## ⚠️ Spec-Kit Setup Required\n\nMissing: ${setup.missing.join(", ")}\n\nRun \`npx smart-spec-kit-mcp setup\` to initialize Spec-Kit in this project.`,
447
+ }],
448
+ };
449
+ }
450
+ // Find specification
451
+ let specContent = "";
452
+ const resolvedSpecPath = specPath || await findRecentSpec(projectPath, "spec");
453
+ if (resolvedSpecPath) {
454
+ try {
455
+ specContent = await fs.readFile(resolvedSpecPath, "utf-8");
456
+ }
457
+ catch {
458
+ specContent = "Could not load specification file.";
459
+ }
460
+ }
461
+ // Build context
462
+ const context = await buildPromptContext(projectPath, "clarify", specContent, {
463
+ "Questions": questions || "Find all [NEEDS CLARIFICATION] markers",
464
+ });
465
+ return {
466
+ content: [{
467
+ type: "text",
468
+ text: `## 🔍 Requirements Clarification
469
+
470
+ ${resolvedSpecPath ? `**Specification:** ${resolvedSpecPath}` : "**Warning:** No specification found."}
471
+
472
+ ${context}
473
+
474
+ ---
475
+
476
+ ## Copilot Instructions
477
+
478
+ Based on the prompt instructions and specification:
479
+ 1. Find all [NEEDS CLARIFICATION] markers
480
+ 2. Ask targeted questions for each ambiguity
481
+ 3. Update the specification with clarified requirements
482
+ 4. Save the updated spec
483
+ 5. Suggest next step if all clarifications resolved`,
484
+ }],
485
+ };
486
+ });
487
+ // speckit_help - Get help and documentation
488
+ server.tool("speckit_help", "Get help on how to use Spec-Kit, customize it, create workflows, or troubleshoot issues. Use this when the user asks 'speckit: help', 'aide sur speckit', or has questions about Spec-Kit.", HelpArgsSchema.shape, async ({ topic }) => {
489
+ const documentation = await loadDocumentation();
490
+ // Extract relevant section if topic is provided
491
+ let relevantDoc = documentation;
492
+ if (topic) {
493
+ const topicLower = topic.toLowerCase();
494
+ const sections = documentation.split(/^## /gm);
495
+ const relevantSections = sections.filter(section => {
496
+ const sectionLower = section.toLowerCase();
497
+ return sectionLower.includes(topicLower) ||
498
+ (topicLower.includes("workflow") && sectionLower.includes("workflow")) ||
499
+ (topicLower.includes("template") && sectionLower.includes("template")) ||
500
+ (topicLower.includes("prompt") && sectionLower.includes("prompt")) ||
501
+ (topicLower.includes("custom") && sectionLower.includes("custom")) ||
502
+ (topicLower.includes("trouble") && sectionLower.includes("trouble")) ||
503
+ (topicLower.includes("agent") && sectionLower.includes("agent")) ||
504
+ (topicLower.includes("command") && sectionLower.includes("command")) ||
505
+ (topicLower.includes("tool") && sectionLower.includes("tool"));
506
+ });
507
+ if (relevantSections.length > 0) {
508
+ relevantDoc = relevantSections.map(s => "## " + s).join("\n");
509
+ }
510
+ }
511
+ return {
512
+ content: [{
513
+ type: "text",
514
+ text: `## ❓ Spec-Kit Help
515
+
516
+ ${topic ? `**Topic:** ${topic}` : "**General Help**"}
517
+
518
+ ---
519
+
520
+ ${relevantDoc}
521
+
522
+ ---
523
+
524
+ ## Need More Help?
525
+
526
+ - **Commands**: \`speckit: help commands\`
527
+ - **Customization**: \`speckit: help customization\`
528
+ - **Workflows**: \`speckit: help workflows\`
529
+ - **Templates**: \`speckit: help templates\`
530
+ - **Troubleshooting**: \`speckit: help troubleshooting\`
531
+
532
+ You can also ask specific questions like:
533
+ - "speckit: help comment créer un nouveau workflow ?"
534
+ - "speckit: help how to customize templates?"
535
+ - "speckit: help quels agents sont disponibles ?"`,
536
+ }],
537
+ };
538
+ });
539
+ }
540
+ //# sourceMappingURL=promptTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptTools.js","sourceRoot":"","sources":["../../src/tools/promptTools.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * Starter Kit Installer
3
3
  *
4
4
  * Handles the installation of Spec-Kit starter kit into user projects.
5
- * Copies prompts to .github/prompts/ and templates to .spec-kit/
5
+ * Copies prompts to .spec-kit/prompts/ and copilot-instructions.md to .github/
6
6
  */
7
7
  /**
8
8
  * Installation result
@@ -37,6 +37,7 @@ export declare function formatInstallReport(result: InstallResult, projectPath:
37
37
  */
38
38
  export declare function isSpecKitInstalled(projectPath: string): Promise<{
39
39
  hasPrompts: boolean;
40
+ hasInstructions: boolean;
40
41
  hasTemplates: boolean;
41
42
  hasMemory: boolean;
42
43
  hasSpecs: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"starterKitInstaller.d.ts","sourceRoot":"","sources":["../../src/utils/starterKitInstaller.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACjB,GACL,OAAO,CAAC,aAAa,CAAC,CAqGxB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAW7C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CA4EtF;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IACrE,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC,CAOD"}
1
+ {"version":3,"file":"starterKitInstaller.d.ts","sourceRoot":"","sources":["../../src/utils/starterKitInstaller.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACjB,GACL,OAAO,CAAC,aAAa,CAAC,CA0HxB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAW7C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CA2EtF;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IACrE,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC,CAQD"}