@dedesfr/prompter 0.6.0 ā 0.6.2
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/CHANGELOG.md +48 -0
- package/dist/cli/index.js +58 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/api-contract-generator.d.ts +11 -0
- package/dist/commands/api-contract-generator.d.ts.map +1 -0
- package/dist/commands/api-contract-generator.js +97 -0
- package/dist/commands/api-contract-generator.js.map +1 -0
- package/dist/commands/document-explainer.d.ts +11 -0
- package/dist/commands/document-explainer.d.ts.map +1 -0
- package/dist/commands/document-explainer.js +97 -0
- package/dist/commands/document-explainer.js.map +1 -0
- package/dist/commands/erd-generator.d.ts +11 -0
- package/dist/commands/erd-generator.d.ts.map +1 -0
- package/dist/commands/erd-generator.js +97 -0
- package/dist/commands/erd-generator.js.map +1 -0
- package/dist/commands/fsd-generator.d.ts +11 -0
- package/dist/commands/fsd-generator.d.ts.map +1 -0
- package/dist/commands/fsd-generator.js +97 -0
- package/dist/commands/fsd-generator.js.map +1 -0
- package/dist/commands/tdd-generator.d.ts +11 -0
- package/dist/commands/tdd-generator.d.ts.map +1 -0
- package/dist/commands/tdd-generator.js +97 -0
- package/dist/commands/tdd-generator.js.map +1 -0
- package/dist/commands/tdd-lite-generator.d.ts +11 -0
- package/dist/commands/tdd-lite-generator.d.ts.map +1 -0
- package/dist/commands/tdd-lite-generator.js +97 -0
- package/dist/commands/tdd-lite-generator.js.map +1 -0
- package/dist/commands/wireframe-generator.d.ts +11 -0
- package/dist/commands/wireframe-generator.d.ts.map +1 -0
- package/dist/commands/wireframe-generator.js +97 -0
- package/dist/commands/wireframe-generator.js.map +1 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +42 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/configurators/slash/antigravity.d.ts.map +1 -1
- package/dist/core/configurators/slash/antigravity.js +16 -2
- package/dist/core/configurators/slash/antigravity.js.map +1 -1
- package/dist/core/configurators/slash/base.js +1 -1
- package/dist/core/configurators/slash/base.js.map +1 -1
- package/dist/core/configurators/slash/claude.d.ts.map +1 -1
- package/dist/core/configurators/slash/claude.js +16 -2
- package/dist/core/configurators/slash/claude.js.map +1 -1
- package/dist/core/configurators/slash/codex.d.ts.map +1 -1
- package/dist/core/configurators/slash/codex.js +16 -2
- package/dist/core/configurators/slash/codex.js.map +1 -1
- package/dist/core/configurators/slash/github-copilot.d.ts.map +1 -1
- package/dist/core/configurators/slash/github-copilot.js +16 -2
- package/dist/core/configurators/slash/github-copilot.js.map +1 -1
- package/dist/core/configurators/slash/kilocode.d.ts.map +1 -1
- package/dist/core/configurators/slash/kilocode.js +16 -2
- package/dist/core/configurators/slash/kilocode.js.map +1 -1
- package/dist/core/configurators/slash/opencode.d.ts.map +1 -1
- package/dist/core/configurators/slash/opencode.js +16 -2
- package/dist/core/configurators/slash/opencode.js.map +1 -1
- package/dist/core/prompt-templates.d.ts +7 -0
- package/dist/core/prompt-templates.d.ts.map +1 -1
- package/dist/core/prompt-templates.js +1429 -1
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/templates/slash-command-templates.d.ts +1 -1
- package/dist/core/templates/slash-command-templates.d.ts.map +1 -1
- package/dist/core/templates/slash-command-templates.js +9 -1
- package/dist/core/templates/slash-command-templates.js.map +1 -1
- package/docs/tasks.md +3 -0
- package/package.json +2 -2
- package/prompt/api-contract-generator.md +234 -0
- package/prompt/document-explainer.md +149 -0
- package/prompt/erd-generator.md +130 -0
- package/prompt/fsd-generator.md +157 -0
- package/prompt/tdd-generator.md +294 -0
- package/prompt/tdd-lite-generator.md +224 -0
- package/prompt/wireframe-generator.md +219 -0
- package/src/cli/index.ts +65 -2
- package/src/commands/api-contract-generator.ts +118 -0
- package/src/commands/document-explainer.ts +118 -0
- package/src/commands/erd-generator.ts +118 -0
- package/src/commands/fsd-generator.ts +118 -0
- package/src/commands/tdd-generator.ts +118 -0
- package/src/commands/tdd-lite-generator.ts +118 -0
- package/src/commands/wireframe-generator.ts +118 -0
- package/src/core/config.ts +42 -0
- package/src/core/configurators/slash/antigravity.ts +16 -2
- package/src/core/configurators/slash/base.ts +2 -2
- package/src/core/configurators/slash/claude.ts +16 -2
- package/src/core/configurators/slash/codex.ts +16 -2
- package/src/core/configurators/slash/github-copilot.ts +16 -2
- package/src/core/configurators/slash/kilocode.ts +16 -2
- package/src/core/configurators/slash/opencode.ts +16 -2
- package/src/core/prompt-templates.ts +1442 -8
- package/src/core/templates/slash-command-templates.ts +19 -2
- package/docs/prompt-template.md +0 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,53 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
|
+
## [0.6.2] - 2026-01-24
|
|
4
|
+
|
|
5
|
+
### ⨠Added
|
|
6
|
+
- **New Document Explainer Command**: Added `document-explainer` command to generate workflow files for document analysis
|
|
7
|
+
- Extracts value, identifies issues, and facilitates productive discussion about improvements
|
|
8
|
+
- Provides section-by-section breakdown in plain language
|
|
9
|
+
- Identifies gaps, redundancies, and structural improvement opportunities
|
|
10
|
+
- **Embedded Document Explainer Template**: New comprehensive prompt template for document analysis
|
|
11
|
+
- Complete workflow support for all supported AI tools
|
|
12
|
+
- Structured output including executive summary, key takeaways, and improvement suggestions
|
|
13
|
+
- **Init Command Enhancement**: Added `document-explainer` to prompt installation options
|
|
14
|
+
- Selectable in interactive `prompter init` mode
|
|
15
|
+
- Supported via `--prompts` flag
|
|
16
|
+
|
|
17
|
+
## [0.6.1] - 2026-01-23
|
|
18
|
+
|
|
19
|
+
### ⨠Added
|
|
20
|
+
- **New Generator Commands**: Added 6 new workflow generator commands for complete software development lifecycle
|
|
21
|
+
- `api-contract-generator`: Generate OpenAPI specification from FSD and ERD
|
|
22
|
+
- `erd-generator`: Generate Entity Relationship Diagram from FSD
|
|
23
|
+
- `fsd-generator`: Generate Functional Specification Document from PRD
|
|
24
|
+
- `tdd-generator`: Generate comprehensive Technical Design Document
|
|
25
|
+
- `tdd-lite-generator`: Generate lean Technical Design Document (TDD-Lite)
|
|
26
|
+
- `wireframe-generator`: Generate UI/UX wireframes from technical specs
|
|
27
|
+
- **Embedded Templates**: All 6 new generators include full embedded prompt templates
|
|
28
|
+
- Complete workflow support for all AI tools
|
|
29
|
+
- Comprehensive prompts for technical documentation generation
|
|
30
|
+
- End-to-end software development workflow coverage
|
|
31
|
+
- **Init Command Enhancement**: Updated `prompter init` to include all new prompts
|
|
32
|
+
- New prompts available in interactive selection
|
|
33
|
+
- Added to `--prompts` flag options
|
|
34
|
+
- Alphabetically organized prompt list
|
|
35
|
+
|
|
36
|
+
### š Changed
|
|
37
|
+
- **Tool Configurators**: Updated all AI tool configurators with new command paths
|
|
38
|
+
- GitHub Copilot: `.github/prompts/[command].prompt.md`
|
|
39
|
+
- Antigravity: `.agent/workflows/[command].md`
|
|
40
|
+
- Claude Code: `.claude/commands/prompter/[command].md`
|
|
41
|
+
- Codex: `.codex/prompts/[command].md`
|
|
42
|
+
- OpenCode: `.opencode/prompts/[command].md`
|
|
43
|
+
- Kilo Code: `.kilocode/workflows/[command].md`
|
|
44
|
+
|
|
45
|
+
### š§ Technical
|
|
46
|
+
- Extended `SlashCommandId` type with 6 new command identifiers
|
|
47
|
+
- Added command bodies to `slashCommandBodies` registry
|
|
48
|
+
- Updated `ALL_COMMANDS` array in base configurator
|
|
49
|
+
- Enhanced `AVAILABLE_PROMPTS` with new generator descriptions
|
|
50
|
+
|
|
3
51
|
## [0.6.0] - 2026-01-22
|
|
4
52
|
|
|
5
53
|
### ⨠Added
|
package/dist/cli/index.js
CHANGED
|
@@ -4,16 +4,23 @@ import { UpdateCommand } from '../commands/update.js';
|
|
|
4
4
|
import { ListCommand } from '../commands/list.js';
|
|
5
5
|
import { GuideCommand } from '../commands/guide.js';
|
|
6
6
|
import { UpgradeCommand } from '../commands/upgrade.js';
|
|
7
|
+
import { ApiContractGeneratorCommand } from '../commands/api-contract-generator.js';
|
|
8
|
+
import { ErdGeneratorCommand } from '../commands/erd-generator.js';
|
|
9
|
+
import { FsdGeneratorCommand } from '../commands/fsd-generator.js';
|
|
10
|
+
import { TddGeneratorCommand } from '../commands/tdd-generator.js';
|
|
11
|
+
import { TddLiteGeneratorCommand } from '../commands/tdd-lite-generator.js';
|
|
12
|
+
import { WireframeGeneratorCommand } from '../commands/wireframe-generator.js';
|
|
13
|
+
import { DocumentExplainerCommand } from '../commands/document-explainer.js';
|
|
7
14
|
const program = new Command();
|
|
8
15
|
program
|
|
9
16
|
.name('prompter')
|
|
10
17
|
.description('Enhance prompts directly in your AI coding workflow')
|
|
11
|
-
.version('0.6.
|
|
18
|
+
.version('0.6.2');
|
|
12
19
|
program
|
|
13
20
|
.command('init')
|
|
14
21
|
.description('Initialize Prompter in your project')
|
|
15
22
|
.option('--tools <tools...>', 'Specify AI tools to configure (antigravity, claude, codex, github-copilot, opencode, kilocode)')
|
|
16
|
-
.option('--prompts <prompts...>', 'Specify prompts to install (ai-humanizer, epic-single, prd-agent-generator, prd-generator, product-brief, qa-test-scenario, skill-creator, story-single)')
|
|
23
|
+
.option('--prompts <prompts...>', 'Specify prompts to install (ai-humanizer, api-contract-generator, document-explainer, epic-single, erd-generator, fsd-generator, prd-agent-generator, prd-generator, product-brief, qa-test-scenario, skill-creator, story-single, tdd-generator, tdd-lite-generator, wireframe-generator)')
|
|
17
24
|
.option('--no-interactive', 'Run without interactive prompts')
|
|
18
25
|
.action(async (options) => {
|
|
19
26
|
const initCommand = new InitCommand();
|
|
@@ -48,5 +55,54 @@ program
|
|
|
48
55
|
const upgradeCommand = new UpgradeCommand();
|
|
49
56
|
await upgradeCommand.execute();
|
|
50
57
|
});
|
|
58
|
+
program
|
|
59
|
+
.command('api-contract-generator')
|
|
60
|
+
.description('Generate API Contract workflow files')
|
|
61
|
+
.action(async () => {
|
|
62
|
+
const command = new ApiContractGeneratorCommand();
|
|
63
|
+
await command.execute();
|
|
64
|
+
});
|
|
65
|
+
program
|
|
66
|
+
.command('erd-generator')
|
|
67
|
+
.description('Generate ERD workflow files')
|
|
68
|
+
.action(async () => {
|
|
69
|
+
const command = new ErdGeneratorCommand();
|
|
70
|
+
await command.execute();
|
|
71
|
+
});
|
|
72
|
+
program
|
|
73
|
+
.command('fsd-generator')
|
|
74
|
+
.description('Generate FSD workflow files')
|
|
75
|
+
.action(async () => {
|
|
76
|
+
const command = new FsdGeneratorCommand();
|
|
77
|
+
await command.execute();
|
|
78
|
+
});
|
|
79
|
+
program
|
|
80
|
+
.command('tdd-generator')
|
|
81
|
+
.description('Generate TDD workflow files')
|
|
82
|
+
.action(async () => {
|
|
83
|
+
const command = new TddGeneratorCommand();
|
|
84
|
+
await command.execute();
|
|
85
|
+
});
|
|
86
|
+
program
|
|
87
|
+
.command('tdd-lite-generator')
|
|
88
|
+
.description('Generate TDD-Lite workflow files')
|
|
89
|
+
.action(async () => {
|
|
90
|
+
const command = new TddLiteGeneratorCommand();
|
|
91
|
+
await command.execute();
|
|
92
|
+
});
|
|
93
|
+
program
|
|
94
|
+
.command('wireframe-generator')
|
|
95
|
+
.description('Generate Wireframe workflow files')
|
|
96
|
+
.action(async () => {
|
|
97
|
+
const command = new WireframeGeneratorCommand();
|
|
98
|
+
await command.execute();
|
|
99
|
+
});
|
|
100
|
+
program
|
|
101
|
+
.command('document-explainer')
|
|
102
|
+
.description('Generate Document Explainer workflow files')
|
|
103
|
+
.action(async () => {
|
|
104
|
+
const command = new DocumentExplainerCommand();
|
|
105
|
+
await command.execute();
|
|
106
|
+
});
|
|
51
107
|
program.parse();
|
|
52
108
|
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface ApiContractGeneratorOptions {
|
|
2
|
+
tools?: string[];
|
|
3
|
+
noInteractive?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare class ApiContractGeneratorCommand {
|
|
6
|
+
execute(options?: ApiContractGeneratorOptions): Promise<void>;
|
|
7
|
+
private fileExists;
|
|
8
|
+
private detectConfiguredTools;
|
|
9
|
+
}
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=api-contract-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-contract-generator.d.ts","sourceRoot":"","sources":["../../src/commands/api-contract-generator.ts"],"names":[],"mappings":"AAMA,UAAU,2BAA2B;IACjC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,2BAA2B;IAC9B,OAAO,CAAC,OAAO,GAAE,2BAAgC,GAAG,OAAO,CAAC,IAAI,CAAC;YAyEzD,UAAU;YASV,qBAAqB;CAuBtC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { PrompterConfig, PROMPTER_MARKERS } from '../core/config.js';
|
|
5
|
+
import { registry } from '../core/configurators/slash/index.js';
|
|
6
|
+
export class ApiContractGeneratorCommand {
|
|
7
|
+
async execute(options = {}) {
|
|
8
|
+
const projectPath = process.cwd();
|
|
9
|
+
// Check if initialized
|
|
10
|
+
if (!await PrompterConfig.prompterDirExists(projectPath)) {
|
|
11
|
+
console.log(chalk.red('\nā Prompter is not initialized in this project.\n'));
|
|
12
|
+
console.log(chalk.gray(' Run `prompter init` first.\n'));
|
|
13
|
+
process.exitCode = 1;
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
console.log(chalk.blue('\nš Generating API Contract Generator workflow files...\n'));
|
|
17
|
+
// Detect currently configured tools
|
|
18
|
+
const configuredTools = await this.detectConfiguredTools(projectPath);
|
|
19
|
+
if (configuredTools.length === 0) {
|
|
20
|
+
console.log(chalk.yellow('ā ļø No tools configured yet.\n'));
|
|
21
|
+
console.log(chalk.gray(' Run `prompter init` to configure AI tools first.\n'));
|
|
22
|
+
process.exitCode = 1;
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
// Generate api-contract-generator workflow files for all configured tools
|
|
26
|
+
let successCount = 0;
|
|
27
|
+
let failCount = 0;
|
|
28
|
+
for (const toolId of configuredTools) {
|
|
29
|
+
const configurator = registry.get(toolId);
|
|
30
|
+
if (configurator) {
|
|
31
|
+
try {
|
|
32
|
+
// Generate only the api-contract-generator workflow file
|
|
33
|
+
const body = configurator['getBody']('api-contract-generator');
|
|
34
|
+
const relativePath = configurator['getRelativePath']('api-contract-generator');
|
|
35
|
+
const filePath = path.join(projectPath, relativePath);
|
|
36
|
+
// Ensure directory exists
|
|
37
|
+
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
38
|
+
// Check if file exists
|
|
39
|
+
const fileExists = await this.fileExists(filePath);
|
|
40
|
+
if (fileExists) {
|
|
41
|
+
console.log(chalk.yellow('ā ļø') + ` ${chalk.cyan(relativePath)} already exists, skipping`);
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
// Get frontmatter if needed
|
|
45
|
+
const frontmatter = configurator['getFrontmatter']('api-contract-generator');
|
|
46
|
+
const sections = [];
|
|
47
|
+
if (frontmatter) {
|
|
48
|
+
sections.push(frontmatter.trim());
|
|
49
|
+
}
|
|
50
|
+
sections.push(`${PROMPTER_MARKERS.start}\n${body}\n${PROMPTER_MARKERS.end}`);
|
|
51
|
+
const content = sections.join('\n') + '\n';
|
|
52
|
+
await fs.writeFile(filePath, content, 'utf-8');
|
|
53
|
+
console.log(chalk.green('ā') + ` Created ${chalk.cyan(relativePath)}`);
|
|
54
|
+
successCount++;
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
console.log(chalk.red('ā') + ` Failed to create files for ${toolId}: ${error}`);
|
|
58
|
+
failCount++;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Success message
|
|
63
|
+
console.log(chalk.green(`\nā
API Contract Generator workflow files created successfully!\n`));
|
|
64
|
+
console.log(chalk.blue('Next steps:'));
|
|
65
|
+
console.log(chalk.gray(' 1. Use /api-contract-generator in your AI tool to create API contracts'));
|
|
66
|
+
console.log(chalk.gray(' 2. API contracts will be saved to prompter/<slug>/api-contract.md\n'));
|
|
67
|
+
}
|
|
68
|
+
async fileExists(filePath) {
|
|
69
|
+
try {
|
|
70
|
+
await fs.access(filePath);
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async detectConfiguredTools(projectPath) {
|
|
78
|
+
const configuredTools = [];
|
|
79
|
+
const allConfigurators = registry.getAll();
|
|
80
|
+
for (const configurator of allConfigurators) {
|
|
81
|
+
const targets = configurator.getTargets();
|
|
82
|
+
let hasFiles = false;
|
|
83
|
+
for (const target of targets) {
|
|
84
|
+
const filePath = path.join(projectPath, target.path);
|
|
85
|
+
if (await this.fileExists(filePath)) {
|
|
86
|
+
hasFiles = true;
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (hasFiles) {
|
|
91
|
+
configuredTools.push(configurator.toolId);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return configuredTools;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=api-contract-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-contract-generator.js","sourceRoot":"","sources":["../../src/commands/api-contract-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface DocumentExplainerOptions {
|
|
2
|
+
tools?: string[];
|
|
3
|
+
noInteractive?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare class DocumentExplainerCommand {
|
|
6
|
+
execute(options?: DocumentExplainerOptions): Promise<void>;
|
|
7
|
+
private fileExists;
|
|
8
|
+
private detectConfiguredTools;
|
|
9
|
+
}
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=document-explainer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-explainer.d.ts","sourceRoot":"","sources":["../../src/commands/document-explainer.ts"],"names":[],"mappings":"AAMA,UAAU,wBAAwB;IAC9B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,wBAAwB;IAC3B,OAAO,CAAC,OAAO,GAAE,wBAA6B,GAAG,OAAO,CAAC,IAAI,CAAC;YAyEtD,UAAU;YASV,qBAAqB;CAuBtC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { PrompterConfig, PROMPTER_MARKERS } from '../core/config.js';
|
|
5
|
+
import { registry } from '../core/configurators/slash/index.js';
|
|
6
|
+
export class DocumentExplainerCommand {
|
|
7
|
+
async execute(options = {}) {
|
|
8
|
+
const projectPath = process.cwd();
|
|
9
|
+
// Check if initialized
|
|
10
|
+
if (!await PrompterConfig.prompterDirExists(projectPath)) {
|
|
11
|
+
console.log(chalk.red('\nā Prompter is not initialized in this project.\n'));
|
|
12
|
+
console.log(chalk.gray(' Run `prompter init` first.\n'));
|
|
13
|
+
process.exitCode = 1;
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
console.log(chalk.blue('\nš Generating document explainer workflow files...\n'));
|
|
17
|
+
// Detect currently configured tools
|
|
18
|
+
const configuredTools = await this.detectConfiguredTools(projectPath);
|
|
19
|
+
if (configuredTools.length === 0) {
|
|
20
|
+
console.log(chalk.yellow('ā ļø No tools configured yet.\n'));
|
|
21
|
+
console.log(chalk.gray(' Run `prompter init` to configure AI tools first.\n'));
|
|
22
|
+
process.exitCode = 1;
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
// Generate document-explainer workflow files for all configured tools
|
|
26
|
+
let successCount = 0;
|
|
27
|
+
let failCount = 0;
|
|
28
|
+
for (const toolId of configuredTools) {
|
|
29
|
+
const configurator = registry.get(toolId);
|
|
30
|
+
if (configurator) {
|
|
31
|
+
try {
|
|
32
|
+
// Generate only the document-explainer workflow file
|
|
33
|
+
const body = configurator['getBody']('document-explainer');
|
|
34
|
+
const relativePath = configurator['getRelativePath']('document-explainer');
|
|
35
|
+
const filePath = path.join(projectPath, relativePath);
|
|
36
|
+
// Ensure directory exists
|
|
37
|
+
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
38
|
+
// Check if file exists
|
|
39
|
+
const fileExists = await this.fileExists(filePath);
|
|
40
|
+
if (fileExists) {
|
|
41
|
+
console.log(chalk.yellow('ā ļø') + ` ${chalk.cyan(relativePath)} already exists, skipping`);
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
// Get frontmatter if needed
|
|
45
|
+
const frontmatter = configurator['getFrontmatter']('document-explainer');
|
|
46
|
+
const sections = [];
|
|
47
|
+
if (frontmatter) {
|
|
48
|
+
sections.push(frontmatter.trim());
|
|
49
|
+
}
|
|
50
|
+
sections.push(`${PROMPTER_MARKERS.start}\n${body}\n${PROMPTER_MARKERS.end}`);
|
|
51
|
+
const content = sections.join('\n') + '\n';
|
|
52
|
+
await fs.writeFile(filePath, content, 'utf-8');
|
|
53
|
+
console.log(chalk.green('ā') + ` Created ${chalk.cyan(relativePath)}`);
|
|
54
|
+
successCount++;
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
console.log(chalk.red('ā') + ` Failed to create files for ${toolId}: ${error}`);
|
|
58
|
+
failCount++;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Success message
|
|
63
|
+
console.log(chalk.green(`\nā
Document explainer workflow files created successfully!\n`));
|
|
64
|
+
console.log(chalk.blue('Next steps:'));
|
|
65
|
+
console.log(chalk.gray(' 1. Use /document-explainer in your AI tool to analyze complex documents'));
|
|
66
|
+
console.log(chalk.gray(' 2. Provide your document content to get a comprehensive breakdown and insights\n'));
|
|
67
|
+
}
|
|
68
|
+
async fileExists(filePath) {
|
|
69
|
+
try {
|
|
70
|
+
await fs.access(filePath);
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async detectConfiguredTools(projectPath) {
|
|
78
|
+
const configuredTools = [];
|
|
79
|
+
const allConfigurators = registry.getAll();
|
|
80
|
+
for (const configurator of allConfigurators) {
|
|
81
|
+
const targets = configurator.getTargets();
|
|
82
|
+
let hasFiles = false;
|
|
83
|
+
for (const target of targets) {
|
|
84
|
+
const filePath = path.join(projectPath, target.path);
|
|
85
|
+
if (await this.fileExists(filePath)) {
|
|
86
|
+
hasFiles = true;
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (hasFiles) {
|
|
91
|
+
configuredTools.push(configurator.toolId);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return configuredTools;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=document-explainer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-explainer.js","sourceRoot":"","sources":["../../src/commands/document-explainer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface ErdGeneratorOptions {
|
|
2
|
+
tools?: string[];
|
|
3
|
+
noInteractive?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare class ErdGeneratorCommand {
|
|
6
|
+
execute(options?: ErdGeneratorOptions): Promise<void>;
|
|
7
|
+
private fileExists;
|
|
8
|
+
private detectConfiguredTools;
|
|
9
|
+
}
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=erd-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erd-generator.d.ts","sourceRoot":"","sources":["../../src/commands/erd-generator.ts"],"names":[],"mappings":"AAMA,UAAU,mBAAmB;IACzB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,mBAAmB;IACtB,OAAO,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;YAyEjD,UAAU;YASV,qBAAqB;CAuBtC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { PrompterConfig, PROMPTER_MARKERS } from '../core/config.js';
|
|
5
|
+
import { registry } from '../core/configurators/slash/index.js';
|
|
6
|
+
export class ErdGeneratorCommand {
|
|
7
|
+
async execute(options = {}) {
|
|
8
|
+
const projectPath = process.cwd();
|
|
9
|
+
// Check if initialized
|
|
10
|
+
if (!await PrompterConfig.prompterDirExists(projectPath)) {
|
|
11
|
+
console.log(chalk.red('\nā Prompter is not initialized in this project.\n'));
|
|
12
|
+
console.log(chalk.gray(' Run `prompter init` first.\n'));
|
|
13
|
+
process.exitCode = 1;
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
console.log(chalk.blue('\nš Generating ERD Generator workflow files...\n'));
|
|
17
|
+
// Detect currently configured tools
|
|
18
|
+
const configuredTools = await this.detectConfiguredTools(projectPath);
|
|
19
|
+
if (configuredTools.length === 0) {
|
|
20
|
+
console.log(chalk.yellow('ā ļø No tools configured yet.\n'));
|
|
21
|
+
console.log(chalk.gray(' Run `prompter init` to configure AI tools first.\n'));
|
|
22
|
+
process.exitCode = 1;
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
// Generate erd-generator workflow files for all configured tools
|
|
26
|
+
let successCount = 0;
|
|
27
|
+
let failCount = 0;
|
|
28
|
+
for (const toolId of configuredTools) {
|
|
29
|
+
const configurator = registry.get(toolId);
|
|
30
|
+
if (configurator) {
|
|
31
|
+
try {
|
|
32
|
+
// Generate only the erd-generator workflow file
|
|
33
|
+
const body = configurator['getBody']('erd-generator');
|
|
34
|
+
const relativePath = configurator['getRelativePath']('erd-generator');
|
|
35
|
+
const filePath = path.join(projectPath, relativePath);
|
|
36
|
+
// Ensure directory exists
|
|
37
|
+
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
38
|
+
// Check if file exists
|
|
39
|
+
const fileExists = await this.fileExists(filePath);
|
|
40
|
+
if (fileExists) {
|
|
41
|
+
console.log(chalk.yellow('ā ļø') + ` ${chalk.cyan(relativePath)} already exists, skipping`);
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
// Get frontmatter if needed
|
|
45
|
+
const frontmatter = configurator['getFrontmatter']('erd-generator');
|
|
46
|
+
const sections = [];
|
|
47
|
+
if (frontmatter) {
|
|
48
|
+
sections.push(frontmatter.trim());
|
|
49
|
+
}
|
|
50
|
+
sections.push(`${PROMPTER_MARKERS.start}\n${body}\n${PROMPTER_MARKERS.end}`);
|
|
51
|
+
const content = sections.join('\n') + '\n';
|
|
52
|
+
await fs.writeFile(filePath, content, 'utf-8');
|
|
53
|
+
console.log(chalk.green('ā') + ` Created ${chalk.cyan(relativePath)}`);
|
|
54
|
+
successCount++;
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
console.log(chalk.red('ā') + ` Failed to create files for ${toolId}: ${error}`);
|
|
58
|
+
failCount++;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Success message
|
|
63
|
+
console.log(chalk.green(`\nā
ERD Generator workflow files created successfully!\n`));
|
|
64
|
+
console.log(chalk.blue('Next steps:'));
|
|
65
|
+
console.log(chalk.gray(' 1. Use /erd-generator in your AI tool to create ERDs'));
|
|
66
|
+
console.log(chalk.gray(' 2. ERDs will be saved to prompter/<slug>/erd.md\n'));
|
|
67
|
+
}
|
|
68
|
+
async fileExists(filePath) {
|
|
69
|
+
try {
|
|
70
|
+
await fs.access(filePath);
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async detectConfiguredTools(projectPath) {
|
|
78
|
+
const configuredTools = [];
|
|
79
|
+
const allConfigurators = registry.getAll();
|
|
80
|
+
for (const configurator of allConfigurators) {
|
|
81
|
+
const targets = configurator.getTargets();
|
|
82
|
+
let hasFiles = false;
|
|
83
|
+
for (const target of targets) {
|
|
84
|
+
const filePath = path.join(projectPath, target.path);
|
|
85
|
+
if (await this.fileExists(filePath)) {
|
|
86
|
+
hasFiles = true;
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (hasFiles) {
|
|
91
|
+
configuredTools.push(configurator.toolId);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return configuredTools;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=erd-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erd-generator.js","sourceRoot":"","sources":["../../src/commands/erd-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface FsdGeneratorOptions {
|
|
2
|
+
tools?: string[];
|
|
3
|
+
noInteractive?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare class FsdGeneratorCommand {
|
|
6
|
+
execute(options?: FsdGeneratorOptions): Promise<void>;
|
|
7
|
+
private fileExists;
|
|
8
|
+
private detectConfiguredTools;
|
|
9
|
+
}
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=fsd-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fsd-generator.d.ts","sourceRoot":"","sources":["../../src/commands/fsd-generator.ts"],"names":[],"mappings":"AAMA,UAAU,mBAAmB;IACzB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,mBAAmB;IACtB,OAAO,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;YAyEjD,UAAU;YASV,qBAAqB;CAuBtC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { PrompterConfig, PROMPTER_MARKERS } from '../core/config.js';
|
|
5
|
+
import { registry } from '../core/configurators/slash/index.js';
|
|
6
|
+
export class FsdGeneratorCommand {
|
|
7
|
+
async execute(options = {}) {
|
|
8
|
+
const projectPath = process.cwd();
|
|
9
|
+
// Check if initialized
|
|
10
|
+
if (!await PrompterConfig.prompterDirExists(projectPath)) {
|
|
11
|
+
console.log(chalk.red('\nā Prompter is not initialized in this project.\n'));
|
|
12
|
+
console.log(chalk.gray(' Run `prompter init` first.\n'));
|
|
13
|
+
process.exitCode = 1;
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
console.log(chalk.blue('\nš Generating FSD Generator workflow files...\n'));
|
|
17
|
+
// Detect currently configured tools
|
|
18
|
+
const configuredTools = await this.detectConfiguredTools(projectPath);
|
|
19
|
+
if (configuredTools.length === 0) {
|
|
20
|
+
console.log(chalk.yellow('ā ļø No tools configured yet.\n'));
|
|
21
|
+
console.log(chalk.gray(' Run `prompter init` to configure AI tools first.\n'));
|
|
22
|
+
process.exitCode = 1;
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
// Generate fsd-generator workflow files for all configured tools
|
|
26
|
+
let successCount = 0;
|
|
27
|
+
let failCount = 0;
|
|
28
|
+
for (const toolId of configuredTools) {
|
|
29
|
+
const configurator = registry.get(toolId);
|
|
30
|
+
if (configurator) {
|
|
31
|
+
try {
|
|
32
|
+
// Generate only the fsd-generator workflow file
|
|
33
|
+
const body = configurator['getBody']('fsd-generator');
|
|
34
|
+
const relativePath = configurator['getRelativePath']('fsd-generator');
|
|
35
|
+
const filePath = path.join(projectPath, relativePath);
|
|
36
|
+
// Ensure directory exists
|
|
37
|
+
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
38
|
+
// Check if file exists
|
|
39
|
+
const fileExists = await this.fileExists(filePath);
|
|
40
|
+
if (fileExists) {
|
|
41
|
+
console.log(chalk.yellow('ā ļø') + ` ${chalk.cyan(relativePath)} already exists, skipping`);
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
// Get frontmatter if needed
|
|
45
|
+
const frontmatter = configurator['getFrontmatter']('fsd-generator');
|
|
46
|
+
const sections = [];
|
|
47
|
+
if (frontmatter) {
|
|
48
|
+
sections.push(frontmatter.trim());
|
|
49
|
+
}
|
|
50
|
+
sections.push(`${PROMPTER_MARKERS.start}\n${body}\n${PROMPTER_MARKERS.end}`);
|
|
51
|
+
const content = sections.join('\n') + '\n';
|
|
52
|
+
await fs.writeFile(filePath, content, 'utf-8');
|
|
53
|
+
console.log(chalk.green('ā') + ` Created ${chalk.cyan(relativePath)}`);
|
|
54
|
+
successCount++;
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
console.log(chalk.red('ā') + ` Failed to create files for ${toolId}: ${error}`);
|
|
58
|
+
failCount++;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Success message
|
|
63
|
+
console.log(chalk.green(`\nā
FSD Generator workflow files created successfully!\n`));
|
|
64
|
+
console.log(chalk.blue('Next steps:'));
|
|
65
|
+
console.log(chalk.gray(' 1. Use /fsd-generator in your AI tool to create FSDs'));
|
|
66
|
+
console.log(chalk.gray(' 2. FSDs will be saved to prompter/<slug>/fsd.md\n'));
|
|
67
|
+
}
|
|
68
|
+
async fileExists(filePath) {
|
|
69
|
+
try {
|
|
70
|
+
await fs.access(filePath);
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async detectConfiguredTools(projectPath) {
|
|
78
|
+
const configuredTools = [];
|
|
79
|
+
const allConfigurators = registry.getAll();
|
|
80
|
+
for (const configurator of allConfigurators) {
|
|
81
|
+
const targets = configurator.getTargets();
|
|
82
|
+
let hasFiles = false;
|
|
83
|
+
for (const target of targets) {
|
|
84
|
+
const filePath = path.join(projectPath, target.path);
|
|
85
|
+
if (await this.fileExists(filePath)) {
|
|
86
|
+
hasFiles = true;
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (hasFiles) {
|
|
91
|
+
configuredTools.push(configurator.toolId);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return configuredTools;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=fsd-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fsd-generator.js","sourceRoot":"","sources":["../../src/commands/fsd-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAgB,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACnF,OAAO,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAOhE,MAAM,OAAO,mBAAmB;IAC5B,KAAK,CAAC,OAAO,CAAC,UAA+B,EAAE;QAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAElC,uBAAuB;QACvB,IAAI,CAAC,MAAM,cAAc,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC,CAAC;YAC7E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACX,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC,CAAC;QAE7E,oCAAoC;QACpC,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC;QAEtE,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC,CAAC;YACjF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACX,CAAC;QAED,iEAAiE;QACjE,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;YACnC,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,YAAY,EAAE,CAAC;gBACf,IAAI,CAAC;oBACD,gDAAgD;oBAChD,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,CAAC;oBACtD,MAAM,YAAY,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAC,eAAe,CAAC,CAAC;oBACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;oBAEtD,0BAA0B;oBAC1B,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBAE5D,uBAAuB;oBACvB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;oBAEnD,IAAI,UAAU,EAAE,CAAC;wBACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,2BAA2B,CAAC,CAAC;wBAC1F,SAAS;oBACb,CAAC;oBAED,4BAA4B;oBAC5B,MAAM,WAAW,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,CAAC;oBACpE,MAAM,QAAQ,GAAa,EAAE,CAAC;oBAC9B,IAAI,WAAW,EAAE,CAAC;wBACd,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;oBACtC,CAAC;oBACD,QAAQ,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,KAAK,KAAK,IAAI,KAAK,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC;oBAC7E,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;oBAE3C,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;oBACvE,YAAY,EAAE,CAAC;gBACnB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,+BAA+B,MAAM,KAAK,KAAK,EAAE,CAAC,CAAC;oBAChF,SAAS,EAAE,CAAC;gBAChB,CAAC;YACL,CAAC;QACL,CAAC;QAED,kBAAkB;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC,CAAC;QAClF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC,CAAC;IACnF,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,QAAgB;QACrC,IAAI,CAAC;YACD,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,qBAAqB,CAAC,WAAmB;QACnD,MAAM,eAAe,GAAa,EAAE,CAAC;QACrC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;QAE3C,KAAK,MAAM,YAAY,IAAI,gBAAgB,EAAE,CAAC;YAC1C,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,CAAC;YAC1C,IAAI,QAAQ,GAAG,KAAK,CAAC;YAErB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;gBACrD,IAAI,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAClC,QAAQ,GAAG,IAAI,CAAC;oBAChB,MAAM;gBACV,CAAC;YACL,CAAC;YAED,IAAI,QAAQ,EAAE,CAAC;gBACX,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC9C,CAAC;QACL,CAAC;QAED,OAAO,eAAe,CAAC;IAC3B,CAAC;CACJ"}
|