pupt 1.2.0
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/LICENSE +21 -0
- package/README.md +517 -0
- package/dist/annotations/annotation-analyzer.d.ts +17 -0
- package/dist/annotations/annotation-analyzer.d.ts.map +1 -0
- package/dist/annotations/annotation-analyzer.js +145 -0
- package/dist/annotations/annotation-analyzer.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +375 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/add.d.ts +2 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +149 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/annotate.d.ts +2 -0
- package/dist/commands/annotate.d.ts.map +1 -0
- package/dist/commands/annotate.js +223 -0
- package/dist/commands/annotate.js.map +1 -0
- package/dist/commands/base-command.d.ts +23 -0
- package/dist/commands/base-command.d.ts.map +1 -0
- package/dist/commands/base-command.js +41 -0
- package/dist/commands/base-command.js.map +1 -0
- package/dist/commands/edit.d.ts +2 -0
- package/dist/commands/edit.d.ts.map +1 -0
- package/dist/commands/edit.js +31 -0
- package/dist/commands/edit.js.map +1 -0
- package/dist/commands/help.d.ts +2 -0
- package/dist/commands/help.d.ts.map +1 -0
- package/dist/commands/help.js +25 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/commands/history.d.ts +9 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +232 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/init-refactored.d.ts +19 -0
- package/dist/commands/init-refactored.d.ts.map +1 -0
- package/dist/commands/init-refactored.js +141 -0
- package/dist/commands/init-refactored.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +124 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/install.d.ts +10 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +224 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/review.d.ts +3 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +158 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/run.d.ts +28 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +340 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/config/config-manager.d.ts +19 -0
- package/dist/config/config-manager.d.ts.map +1 -0
- package/dist/config/config-manager.js +386 -0
- package/dist/config/config-manager.js.map +1 -0
- package/dist/config/migration.d.ts +11 -0
- package/dist/config/migration.d.ts.map +1 -0
- package/dist/config/migration.js +153 -0
- package/dist/config/migration.js.map +1 -0
- package/dist/history/enhanced-history-manager.d.ts +25 -0
- package/dist/history/enhanced-history-manager.d.ts.map +1 -0
- package/dist/history/enhanced-history-manager.js +88 -0
- package/dist/history/enhanced-history-manager.js.map +1 -0
- package/dist/history/history-manager.d.ts +33 -0
- package/dist/history/history-manager.d.ts.map +1 -0
- package/dist/history/history-manager.js +176 -0
- package/dist/history/history-manager.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/input-types/file-prompt.d.ts +12 -0
- package/dist/prompts/input-types/file-prompt.d.ts.map +1 -0
- package/dist/prompts/input-types/file-prompt.js +166 -0
- package/dist/prompts/input-types/file-prompt.js.map +1 -0
- package/dist/prompts/input-types/file-search-prompt.d.ts +12 -0
- package/dist/prompts/input-types/file-search-prompt.d.ts.map +1 -0
- package/dist/prompts/input-types/file-search-prompt.js +54 -0
- package/dist/prompts/input-types/file-search-prompt.js.map +1 -0
- package/dist/prompts/input-types/review-file-prompt.d.ts +4 -0
- package/dist/prompts/input-types/review-file-prompt.d.ts.map +1 -0
- package/dist/prompts/input-types/review-file-prompt.js +10 -0
- package/dist/prompts/input-types/review-file-prompt.js.map +1 -0
- package/dist/prompts/prompt-manager.d.ts +12 -0
- package/dist/prompts/prompt-manager.d.ts.map +1 -0
- package/dist/prompts/prompt-manager.js +102 -0
- package/dist/prompts/prompt-manager.js.map +1 -0
- package/dist/pupt-1.2.0.tgz +0 -0
- package/dist/schemas/config-schema.d.ts +1268 -0
- package/dist/schemas/config-schema.d.ts.map +1 -0
- package/dist/schemas/config-schema.js +100 -0
- package/dist/schemas/config-schema.js.map +1 -0
- package/dist/schemas/prompt-schema.d.ts +927 -0
- package/dist/schemas/prompt-schema.d.ts.map +1 -0
- package/dist/schemas/prompt-schema.js +110 -0
- package/dist/schemas/prompt-schema.js.map +1 -0
- package/dist/search/file-search-engine.d.ts +36 -0
- package/dist/search/file-search-engine.d.ts.map +1 -0
- package/dist/search/file-search-engine.js +184 -0
- package/dist/search/file-search-engine.js.map +1 -0
- package/dist/search/search-engine.d.ts +8 -0
- package/dist/search/search-engine.d.ts.map +1 -0
- package/dist/search/search-engine.js +52 -0
- package/dist/search/search-engine.js.map +1 -0
- package/dist/services/auto-annotation-service.d.ts +39 -0
- package/dist/services/auto-annotation-service.d.ts.map +1 -0
- package/dist/services/auto-annotation-service.js +203 -0
- package/dist/services/auto-annotation-service.js.map +1 -0
- package/dist/services/file-system-service.d.ts +42 -0
- package/dist/services/file-system-service.d.ts.map +1 -0
- package/dist/services/file-system-service.js +269 -0
- package/dist/services/file-system-service.js.map +1 -0
- package/dist/services/git-service.d.ts +27 -0
- package/dist/services/git-service.d.ts.map +1 -0
- package/dist/services/git-service.js +157 -0
- package/dist/services/git-service.js.map +1 -0
- package/dist/services/logging-service.d.ts +50 -0
- package/dist/services/logging-service.d.ts.map +1 -0
- package/dist/services/logging-service.js +203 -0
- package/dist/services/logging-service.js.map +1 -0
- package/dist/services/output-capture-service.d.ts +25 -0
- package/dist/services/output-capture-service.d.ts.map +1 -0
- package/dist/services/output-capture-service.js +277 -0
- package/dist/services/output-capture-service.js.map +1 -0
- package/dist/services/pattern-detector.d.ts +15 -0
- package/dist/services/pattern-detector.d.ts.map +1 -0
- package/dist/services/pattern-detector.js +219 -0
- package/dist/services/pattern-detector.js.map +1 -0
- package/dist/services/prompt-service.d.ts +30 -0
- package/dist/services/prompt-service.d.ts.map +1 -0
- package/dist/services/prompt-service.js +278 -0
- package/dist/services/prompt-service.js.map +1 -0
- package/dist/services/review-data-builder.d.ts +22 -0
- package/dist/services/review-data-builder.d.ts.map +1 -0
- package/dist/services/review-data-builder.js +263 -0
- package/dist/services/review-data-builder.js.map +1 -0
- package/dist/services/suggestion-generator.d.ts +11 -0
- package/dist/services/suggestion-generator.d.ts.map +1 -0
- package/dist/services/suggestion-generator.js +146 -0
- package/dist/services/suggestion-generator.js.map +1 -0
- package/dist/services/ui-service.d.ts +49 -0
- package/dist/services/ui-service.d.ts.map +1 -0
- package/dist/services/ui-service.js +183 -0
- package/dist/services/ui-service.js.map +1 -0
- package/dist/template/helpers/index.d.ts +4 -0
- package/dist/template/helpers/index.d.ts.map +1 -0
- package/dist/template/helpers/index.js +132 -0
- package/dist/template/helpers/index.js.map +1 -0
- package/dist/template/template-context.d.ts +26 -0
- package/dist/template/template-context.d.ts.map +1 -0
- package/dist/template/template-context.js +65 -0
- package/dist/template/template-context.js.map +1 -0
- package/dist/template/template-engine.d.ts +13 -0
- package/dist/template/template-engine.d.ts.map +1 -0
- package/dist/template/template-engine.js +83 -0
- package/dist/template/template-engine.js.map +1 -0
- package/dist/types/annotations.d.ts +49 -0
- package/dist/types/annotations.d.ts.map +1 -0
- package/dist/types/annotations.js +2 -0
- package/dist/types/annotations.js.map +1 -0
- package/dist/types/config.d.ts +49 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +8 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/history.d.ts +32 -0
- package/dist/types/history.d.ts.map +1 -0
- package/dist/types/history.js +2 -0
- package/dist/types/history.js.map +1 -0
- package/dist/types/patterns.d.ts +24 -0
- package/dist/types/patterns.d.ts.map +1 -0
- package/dist/types/patterns.js +2 -0
- package/dist/types/patterns.js.map +1 -0
- package/dist/types/prompt.d.ts +23 -0
- package/dist/types/prompt.d.ts.map +1 -0
- package/dist/types/prompt.js +2 -0
- package/dist/types/prompt.js.map +1 -0
- package/dist/types/review.d.ts +76 -0
- package/dist/types/review.d.ts.map +1 -0
- package/dist/types/review.js +2 -0
- package/dist/types/review.js.map +1 -0
- package/dist/ui/console-ui.d.ts +35 -0
- package/dist/ui/console-ui.d.ts.map +1 -0
- package/dist/ui/console-ui.js +83 -0
- package/dist/ui/console-ui.js.map +1 -0
- package/dist/ui/interactive-search.d.ts +8 -0
- package/dist/ui/interactive-search.d.ts.map +1 -0
- package/dist/ui/interactive-search.js +29 -0
- package/dist/ui/interactive-search.js.map +1 -0
- package/dist/utils/date-formatter.d.ts +10 -0
- package/dist/utils/date-formatter.d.ts.map +1 -0
- package/dist/utils/date-formatter.js +43 -0
- package/dist/utils/date-formatter.js.map +1 -0
- package/dist/utils/editor.d.ts +13 -0
- package/dist/utils/editor.d.ts.map +1 -0
- package/dist/utils/editor.js +62 -0
- package/dist/utils/editor.js.map +1 -0
- package/dist/utils/errors.d.ts +55 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +248 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/file-utils.d.ts +18 -0
- package/dist/utils/file-utils.d.ts.map +1 -0
- package/dist/utils/file-utils.js +88 -0
- package/dist/utils/file-utils.js.map +1 -0
- package/dist/utils/git-info.d.ts +8 -0
- package/dist/utils/git-info.d.ts.map +1 -0
- package/dist/utils/git-info.js +41 -0
- package/dist/utils/git-info.js.map +1 -0
- package/dist/utils/gitignore.d.ts +10 -0
- package/dist/utils/gitignore.d.ts.map +1 -0
- package/dist/utils/gitignore.js +72 -0
- package/dist/utils/gitignore.js.map +1 -0
- package/dist/utils/handlebars-extensions.d.ts +4 -0
- package/dist/utils/handlebars-extensions.d.ts.map +1 -0
- package/dist/utils/handlebars-extensions.js +87 -0
- package/dist/utils/handlebars-extensions.js.map +1 -0
- package/dist/utils/logger.d.ts +39 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +143 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/platform.d.ts +9 -0
- package/dist/utils/platform.d.ts.map +1 -0
- package/dist/utils/platform.js +44 -0
- package/dist/utils/platform.js.map +1 -0
- package/dist/utils/security.d.ts +5 -0
- package/dist/utils/security.d.ts.map +1 -0
- package/dist/utils/security.js +57 -0
- package/dist/utils/security.js.map +1 -0
- package/dist/utils/tool-detection.d.ts +11 -0
- package/dist/utils/tool-detection.d.ts.map +1 -0
- package/dist/utils/tool-detection.js +32 -0
- package/dist/utils/tool-detection.js.map +1 -0
- package/dist/utils/trie.d.ts +18 -0
- package/dist/utils/trie.d.ts.map +1 -0
- package/dist/utils/trie.js +84 -0
- package/dist/utils/trie.js.map +1 -0
- package/package.json +102 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { ConfigManager } from '../config/config-manager.js';
|
|
2
|
+
import { ReviewDataBuilder } from '../services/review-data-builder.js';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import fs from 'fs-extra';
|
|
5
|
+
import { logger } from '../utils/logger.js';
|
|
6
|
+
export async function reviewCommand(promptName, options = {}) {
|
|
7
|
+
try {
|
|
8
|
+
const config = await ConfigManager.load();
|
|
9
|
+
const builder = new ReviewDataBuilder(config);
|
|
10
|
+
// Build review data
|
|
11
|
+
const reviewData = await builder.buildReviewData({
|
|
12
|
+
promptName,
|
|
13
|
+
since: options.since,
|
|
14
|
+
});
|
|
15
|
+
// Format and output based on options
|
|
16
|
+
if (options.format === 'json') {
|
|
17
|
+
const output = JSON.stringify(reviewData, null, 2);
|
|
18
|
+
if (options.output) {
|
|
19
|
+
await fs.writeFile(options.output, output);
|
|
20
|
+
logger.log(chalk.green(`✓ Review data written to ${options.output}`));
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
logger.log(output);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
// Default to markdown format
|
|
28
|
+
const report = formatMarkdownReport(reviewData);
|
|
29
|
+
if (options.output) {
|
|
30
|
+
await fs.writeFile(options.output, report);
|
|
31
|
+
logger.log(chalk.green(`✓ Review report written to ${options.output}`));
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
logger.log(report);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
logger.error(chalk.red(`Error generating review: ${error instanceof Error ? error.message : String(error)}`));
|
|
40
|
+
if (options.since) {
|
|
41
|
+
logger.error(chalk.yellow('\nHint: Check that the time filter format is correct (e.g., 7d, 24h, 2w)'));
|
|
42
|
+
}
|
|
43
|
+
if (promptName) {
|
|
44
|
+
logger.error(chalk.yellow('\nHint: Verify that the prompt name exists'));
|
|
45
|
+
}
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function formatMarkdownReport(data) {
|
|
50
|
+
const lines = [];
|
|
51
|
+
// Header
|
|
52
|
+
lines.push('# Prompt Review Report');
|
|
53
|
+
lines.push(`*Generated: ${new Date().toISOString()}*`);
|
|
54
|
+
lines.push(`*Analysis Period: ${data.metadata.analysis_period}*`);
|
|
55
|
+
lines.push('');
|
|
56
|
+
// Summary
|
|
57
|
+
lines.push('## Summary');
|
|
58
|
+
lines.push(`- Total Prompts: ${data.metadata.total_prompts}`);
|
|
59
|
+
lines.push(`- Total Executions: ${data.metadata.total_executions}`);
|
|
60
|
+
lines.push('');
|
|
61
|
+
// Data Completeness
|
|
62
|
+
lines.push('## Data Completeness');
|
|
63
|
+
lines.push(`- With Annotations: ${data.metadata.data_completeness.with_annotations}%`);
|
|
64
|
+
lines.push(`- With Output Capture: ${data.metadata.data_completeness.with_output_capture}%`);
|
|
65
|
+
lines.push(`- With Environment Data: ${data.metadata.data_completeness.with_environment_data}%`);
|
|
66
|
+
lines.push('');
|
|
67
|
+
// Prompt Details
|
|
68
|
+
lines.push('## Prompt Analysis');
|
|
69
|
+
lines.push('');
|
|
70
|
+
// Sort prompts by success rate (ascending) to highlight problematic ones first
|
|
71
|
+
const sortedPrompts = [...data.prompts].sort((a, b) => a.usage_statistics.success_rate - b.usage_statistics.success_rate);
|
|
72
|
+
for (const prompt of sortedPrompts) {
|
|
73
|
+
lines.push(`### ${prompt.name}`);
|
|
74
|
+
lines.push(`- **Path**: ${prompt.path}`);
|
|
75
|
+
lines.push(`- **Last Modified**: ${formatDate(prompt.last_modified)}`);
|
|
76
|
+
lines.push(`- **Last Used**: ${formatDate(prompt.usage_statistics.last_used)}`);
|
|
77
|
+
lines.push('');
|
|
78
|
+
// Usage Statistics
|
|
79
|
+
lines.push('#### Usage Statistics');
|
|
80
|
+
lines.push(`- Total Runs: ${prompt.usage_statistics.total_runs}`);
|
|
81
|
+
lines.push(`- Annotated Runs: ${prompt.usage_statistics.annotated_runs}`);
|
|
82
|
+
lines.push(`- **Success Rate: ${(prompt.usage_statistics.success_rate * 100).toFixed(1)}%**`);
|
|
83
|
+
lines.push(`- Average Duration: ${prompt.usage_statistics.avg_duration}`);
|
|
84
|
+
lines.push('');
|
|
85
|
+
// Execution Outcomes
|
|
86
|
+
if (prompt.usage_statistics.annotated_runs > 0) {
|
|
87
|
+
lines.push('#### Execution Outcomes');
|
|
88
|
+
lines.push(`- ${chalk.green('✓ Success')}: ${prompt.execution_outcomes.success}`);
|
|
89
|
+
lines.push(`- ${chalk.yellow('⚠ Partial')}: ${prompt.execution_outcomes.partial}`);
|
|
90
|
+
lines.push(`- ${chalk.red('✗ Failure')}: ${prompt.execution_outcomes.failure}`);
|
|
91
|
+
lines.push('');
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
lines.push('*No annotations available for this prompt*');
|
|
95
|
+
lines.push('');
|
|
96
|
+
}
|
|
97
|
+
// Recent Annotations
|
|
98
|
+
if (prompt.user_annotations.length > 0) {
|
|
99
|
+
lines.push('#### Recent Annotations');
|
|
100
|
+
const recentAnnotations = prompt.user_annotations
|
|
101
|
+
.sort((a, b) => b.timestamp.localeCompare(a.timestamp))
|
|
102
|
+
.slice(0, 3);
|
|
103
|
+
for (const annotation of recentAnnotations) {
|
|
104
|
+
const statusIcon = getStatusIcon(annotation.status);
|
|
105
|
+
lines.push(`- ${formatDate(annotation.timestamp)} - ${statusIcon} ${annotation.status}`);
|
|
106
|
+
if (annotation.notes) {
|
|
107
|
+
const truncatedNotes = annotation.notes.substring(0, 100);
|
|
108
|
+
const notes = annotation.notes.length > 100 ? truncatedNotes + '...' : truncatedNotes;
|
|
109
|
+
lines.push(` *"${notes}"*`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
lines.push('');
|
|
113
|
+
}
|
|
114
|
+
// Detected Patterns (will be populated in Phase 5)
|
|
115
|
+
if (prompt.detected_patterns.length > 0) {
|
|
116
|
+
lines.push('#### Detected Patterns');
|
|
117
|
+
for (const pattern of prompt.detected_patterns) {
|
|
118
|
+
lines.push(`- **${pattern.pattern_type}** (${pattern.severity}): ${pattern.frequency} occurrences`);
|
|
119
|
+
}
|
|
120
|
+
lines.push('');
|
|
121
|
+
}
|
|
122
|
+
lines.push('---');
|
|
123
|
+
lines.push('');
|
|
124
|
+
}
|
|
125
|
+
// Cross-Prompt Patterns (will be populated in Phase 5)
|
|
126
|
+
if (data.cross_prompt_patterns.length > 0) {
|
|
127
|
+
lines.push('## Cross-Prompt Patterns');
|
|
128
|
+
for (const pattern of data.cross_prompt_patterns) {
|
|
129
|
+
lines.push(`- **${pattern.pattern}**: Affects ${pattern.affected_prompts.length} prompts`);
|
|
130
|
+
lines.push(` - Total Occurrences: ${pattern.total_occurrences}`);
|
|
131
|
+
lines.push(` - Impact: ${pattern.impact_assessment}`);
|
|
132
|
+
}
|
|
133
|
+
lines.push('');
|
|
134
|
+
}
|
|
135
|
+
return lines.join('\n');
|
|
136
|
+
}
|
|
137
|
+
function formatDate(isoDate) {
|
|
138
|
+
try {
|
|
139
|
+
const date = new Date(isoDate);
|
|
140
|
+
return date.toLocaleDateString() + ' ' + date.toLocaleTimeString();
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
return isoDate;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
function getStatusIcon(status) {
|
|
147
|
+
switch (status) {
|
|
148
|
+
case 'success':
|
|
149
|
+
return chalk.green('✓');
|
|
150
|
+
case 'partial':
|
|
151
|
+
return chalk.yellow('⚠');
|
|
152
|
+
case 'failure':
|
|
153
|
+
return chalk.red('✗');
|
|
154
|
+
default:
|
|
155
|
+
return '•';
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface RunOptions {
|
|
2
|
+
historyIndex?: number;
|
|
3
|
+
prompt?: string;
|
|
4
|
+
skipPromptSelection?: boolean;
|
|
5
|
+
templateInfo?: {
|
|
6
|
+
templatePath: string;
|
|
7
|
+
templateContent: string;
|
|
8
|
+
variables: Map<string, unknown>;
|
|
9
|
+
finalPrompt: string;
|
|
10
|
+
title?: string;
|
|
11
|
+
summary?: string;
|
|
12
|
+
reviewFiles?: Array<{
|
|
13
|
+
name: string;
|
|
14
|
+
value: unknown;
|
|
15
|
+
}>;
|
|
16
|
+
timestamp?: Date;
|
|
17
|
+
};
|
|
18
|
+
isAutoRun?: boolean;
|
|
19
|
+
}
|
|
20
|
+
interface ParsedArgs {
|
|
21
|
+
tool: string | undefined;
|
|
22
|
+
toolArgs: string[];
|
|
23
|
+
extraArgs: string[];
|
|
24
|
+
}
|
|
25
|
+
export declare function parseRunArgs(args: string[]): ParsedArgs;
|
|
26
|
+
export declare function runCommand(args: string[], options: RunOptions): Promise<void>;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,UAAU;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,YAAY,CAAC,EAAE;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;QACtD,SAAS,CAAC,EAAE,IAAI,CAAC;KAClB,CAAC;IACF,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAqBvD;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAmOnF"}
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
import { ConfigManager } from '../config/config-manager.js';
|
|
2
|
+
import { PromptManager } from '../prompts/prompt-manager.js';
|
|
3
|
+
import { InteractiveSearch } from '../ui/interactive-search.js';
|
|
4
|
+
import { TemplateEngine } from '../template/template-engine.js';
|
|
5
|
+
import { HistoryManager } from '../history/history-manager.js';
|
|
6
|
+
import { spawn } from 'node:child_process';
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import { confirm } from '@inquirer/prompts';
|
|
9
|
+
import { errors } from '../utils/errors.js';
|
|
10
|
+
import { logger } from '../utils/logger.js';
|
|
11
|
+
import * as path from 'node:path';
|
|
12
|
+
import { pathExists } from 'fs-extra';
|
|
13
|
+
import { editorLauncher } from '../utils/editor.js';
|
|
14
|
+
import { OutputCaptureService } from '../services/output-capture-service.js';
|
|
15
|
+
import { AutoAnnotationService } from '../services/auto-annotation-service.js';
|
|
16
|
+
import { DateFormats } from '../utils/date-formatter.js';
|
|
17
|
+
import crypto from 'node:crypto';
|
|
18
|
+
export function parseRunArgs(args) {
|
|
19
|
+
const separatorIndex = args.indexOf('--');
|
|
20
|
+
if (separatorIndex === -1) {
|
|
21
|
+
// No separator, all args go to tool
|
|
22
|
+
return {
|
|
23
|
+
tool: args[0],
|
|
24
|
+
toolArgs: args.slice(1),
|
|
25
|
+
extraArgs: []
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
// Split at separator
|
|
29
|
+
const beforeSeparator = args.slice(0, separatorIndex);
|
|
30
|
+
const afterSeparator = args.slice(separatorIndex + 1);
|
|
31
|
+
return {
|
|
32
|
+
tool: beforeSeparator[0],
|
|
33
|
+
toolArgs: beforeSeparator.slice(1),
|
|
34
|
+
extraArgs: afterSeparator
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export async function runCommand(args, options) {
|
|
38
|
+
// Capture start timestamp for history
|
|
39
|
+
const startTimestamp = new Date();
|
|
40
|
+
// Generate filename components once for synchronized naming
|
|
41
|
+
const dateStr = DateFormats.YYYYMMDD(startTimestamp);
|
|
42
|
+
const hours = String(startTimestamp.getHours()).padStart(2, '0');
|
|
43
|
+
const minutes = String(startTimestamp.getMinutes()).padStart(2, '0');
|
|
44
|
+
const seconds = String(startTimestamp.getSeconds()).padStart(2, '0');
|
|
45
|
+
const timeStr = `${hours}${minutes}${seconds}`;
|
|
46
|
+
const randomSuffix = crypto.randomBytes(4).toString('hex');
|
|
47
|
+
// Load configuration
|
|
48
|
+
const configResult = await ConfigManager.loadWithPath();
|
|
49
|
+
const config = configResult.config;
|
|
50
|
+
const configDir = configResult.filepath ? path.dirname(configResult.filepath) : undefined;
|
|
51
|
+
// Parse arguments
|
|
52
|
+
const { tool, toolArgs, extraArgs } = parseRunArgs(args);
|
|
53
|
+
// Determine which tool to use
|
|
54
|
+
let finalTool;
|
|
55
|
+
let finalArgs;
|
|
56
|
+
if (tool) {
|
|
57
|
+
// Explicit tool specified
|
|
58
|
+
finalTool = tool;
|
|
59
|
+
finalArgs = [...toolArgs, ...extraArgs];
|
|
60
|
+
}
|
|
61
|
+
else if ((config.defaultCmd && config.defaultCmd.trim() !== '') || (config.codingTool && config.codingTool.trim() !== '')) {
|
|
62
|
+
// Use configured tool (prefer new field name)
|
|
63
|
+
finalTool = (config.defaultCmd && config.defaultCmd.trim() !== '' ? config.defaultCmd : config.codingTool);
|
|
64
|
+
finalArgs = [...(config.defaultCmdArgs || config.codingToolArgs || []), ...extraArgs];
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
throw errors.toolNotFound('', ['claude', 'copilot', 'chat']);
|
|
68
|
+
}
|
|
69
|
+
let promptResult;
|
|
70
|
+
let templateInfo;
|
|
71
|
+
let exitCode = null;
|
|
72
|
+
// Check if using provided prompt (from autoRun)
|
|
73
|
+
if (options.prompt) {
|
|
74
|
+
promptResult = options.prompt;
|
|
75
|
+
// Use templateInfo if provided
|
|
76
|
+
if (options.templateInfo) {
|
|
77
|
+
templateInfo = options.templateInfo;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else if (options.historyIndex) {
|
|
81
|
+
// Validate history is enabled
|
|
82
|
+
if (!config.historyDir) {
|
|
83
|
+
throw errors.featureNotEnabled('History tracking', [
|
|
84
|
+
'Track all your prompts',
|
|
85
|
+
'Re-run previous prompts',
|
|
86
|
+
'Add annotations'
|
|
87
|
+
]);
|
|
88
|
+
}
|
|
89
|
+
// Load prompt from history
|
|
90
|
+
const historyManager = new HistoryManager(config.historyDir);
|
|
91
|
+
const historyEntry = await historyManager.getHistoryEntry(options.historyIndex);
|
|
92
|
+
if (!historyEntry) {
|
|
93
|
+
const entries = await historyManager.listHistory();
|
|
94
|
+
throw errors.historyNotFound(options.historyIndex, entries.length);
|
|
95
|
+
}
|
|
96
|
+
logger.log(chalk.blue(`\nUsing prompt from history #${options.historyIndex}`));
|
|
97
|
+
logger.log(chalk.dim(`Original: ${historyEntry.title || 'Untitled'}`));
|
|
98
|
+
logger.log(chalk.dim(`From: ${new Date(historyEntry.timestamp).toLocaleString()}\n`));
|
|
99
|
+
promptResult = historyEntry.finalPrompt;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
// Normal flow - discover and process prompts
|
|
103
|
+
const promptManager = new PromptManager(config.promptDirs);
|
|
104
|
+
const prompts = await promptManager.discoverPrompts();
|
|
105
|
+
if (prompts.length === 0) {
|
|
106
|
+
throw errors.noPromptsFound(config.promptDirs);
|
|
107
|
+
}
|
|
108
|
+
// Interactive search
|
|
109
|
+
const search = new InteractiveSearch();
|
|
110
|
+
const selected = await search.selectPrompt(prompts);
|
|
111
|
+
logger.log(chalk.blue(`\nProcessing: ${selected.title}`));
|
|
112
|
+
logger.log(chalk.dim(`Location: ${selected.path}\n`));
|
|
113
|
+
// Process template
|
|
114
|
+
const engine = new TemplateEngine(config, configDir);
|
|
115
|
+
promptResult = await engine.processTemplate(selected.content, selected);
|
|
116
|
+
// Store template info for history saving after successful execution
|
|
117
|
+
templateInfo = {
|
|
118
|
+
templatePath: selected.path,
|
|
119
|
+
templateContent: selected.content,
|
|
120
|
+
variables: engine.getContext().getMaskedValues(),
|
|
121
|
+
finalPrompt: promptResult,
|
|
122
|
+
title: selected.title,
|
|
123
|
+
timestamp: startTimestamp,
|
|
124
|
+
summary: selected.summary,
|
|
125
|
+
reviewFiles: engine.getContext().getVariablesByType('reviewFile')
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
// Handle coding tool options - always prompt when using default tool with options configured
|
|
129
|
+
if (!tool && ((config.defaultCmd && config.defaultCmd.trim() !== '') || (config.codingTool && config.codingTool.trim() !== '')) && (config.defaultCmdOptions || config.codingToolOptions)) {
|
|
130
|
+
// Prompt for each option
|
|
131
|
+
const selectedOptions = [];
|
|
132
|
+
for (const [question, arg] of Object.entries(config.defaultCmdOptions || config.codingToolOptions || {})) {
|
|
133
|
+
const answer = await confirm({
|
|
134
|
+
message: question,
|
|
135
|
+
default: false
|
|
136
|
+
});
|
|
137
|
+
if (answer) {
|
|
138
|
+
selectedOptions.push(arg);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// Insert options before extra args
|
|
142
|
+
finalArgs = [
|
|
143
|
+
...(config.defaultCmdArgs || config.codingToolArgs || []),
|
|
144
|
+
...selectedOptions,
|
|
145
|
+
...extraArgs
|
|
146
|
+
];
|
|
147
|
+
}
|
|
148
|
+
// Execute tool with prompt
|
|
149
|
+
logger.log(chalk.blue(`\nRunning: ${finalTool} ${finalArgs.join(' ')}`));
|
|
150
|
+
logger.log(chalk.dim('─'.repeat(60)));
|
|
151
|
+
const startTime = Date.now();
|
|
152
|
+
let outputFile;
|
|
153
|
+
let outputSize;
|
|
154
|
+
try {
|
|
155
|
+
// Check if output capture is enabled
|
|
156
|
+
if (config.outputCapture?.enabled && config.historyDir) {
|
|
157
|
+
const result = await executeToolWithCapture(finalTool, finalArgs, promptResult, config, {
|
|
158
|
+
dateStr,
|
|
159
|
+
timeStr,
|
|
160
|
+
randomSuffix
|
|
161
|
+
});
|
|
162
|
+
exitCode = result.exitCode;
|
|
163
|
+
outputFile = result.outputFile;
|
|
164
|
+
outputSize = result.outputSize;
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
exitCode = await executeTool(finalTool, finalArgs, promptResult);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
finally {
|
|
171
|
+
const executionTime = Date.now() - startTime;
|
|
172
|
+
// Save to history regardless of exit code
|
|
173
|
+
if (config.historyDir && templateInfo && promptResult.trim().length > 0) {
|
|
174
|
+
const historyManager = new HistoryManager(config.historyDir, config.annotationDir);
|
|
175
|
+
const historyFilename = await historyManager.savePrompt({
|
|
176
|
+
...templateInfo,
|
|
177
|
+
outputFile,
|
|
178
|
+
outputSize,
|
|
179
|
+
executionTime,
|
|
180
|
+
exitCode,
|
|
181
|
+
filenameComponents: {
|
|
182
|
+
dateStr,
|
|
183
|
+
timeStr,
|
|
184
|
+
randomSuffix
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
// Trigger auto-annotation if configured
|
|
188
|
+
if (config.autoAnnotate?.enabled && historyFilename) {
|
|
189
|
+
const promptManager = new PromptManager(config.promptDirs || []);
|
|
190
|
+
const autoAnnotationService = new AutoAnnotationService(config, promptManager, historyManager);
|
|
191
|
+
// Extract prompt name from template path
|
|
192
|
+
const promptName = path.basename(templateInfo.templatePath, path.extname(templateInfo.templatePath));
|
|
193
|
+
if (autoAnnotationService.shouldAutoAnnotate(promptName)) {
|
|
194
|
+
// Create enhanced history entry for auto-annotation
|
|
195
|
+
const enhancedEntry = {
|
|
196
|
+
timestamp: startTimestamp.toISOString(),
|
|
197
|
+
templatePath: templateInfo.templatePath,
|
|
198
|
+
templateContent: templateInfo.templateContent,
|
|
199
|
+
variables: Object.fromEntries(templateInfo.variables),
|
|
200
|
+
finalPrompt: templateInfo.finalPrompt,
|
|
201
|
+
title: templateInfo.title,
|
|
202
|
+
summary: templateInfo.summary,
|
|
203
|
+
filename: historyFilename,
|
|
204
|
+
execution: {
|
|
205
|
+
start_time: startTimestamp.toISOString(),
|
|
206
|
+
end_time: new Date().toISOString(),
|
|
207
|
+
duration: `${executionTime}ms`,
|
|
208
|
+
exit_code: exitCode,
|
|
209
|
+
command: `${finalTool} ${finalArgs.join(' ')}`,
|
|
210
|
+
output_file: outputFile,
|
|
211
|
+
output_size: outputSize,
|
|
212
|
+
},
|
|
213
|
+
};
|
|
214
|
+
// Run auto-annotation asynchronously
|
|
215
|
+
autoAnnotationService.analyzeExecution(enhancedEntry).catch(error => {
|
|
216
|
+
logger.debug('Auto-annotation failed:', error);
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
// Handle post-run file reviews
|
|
222
|
+
if (templateInfo?.reviewFiles && templateInfo.reviewFiles.length > 0) {
|
|
223
|
+
await handlePostRunReviews(templateInfo.reviewFiles, config, options.isAutoRun);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// Exit with the same code as the tool
|
|
227
|
+
if (exitCode !== null && exitCode !== 0) {
|
|
228
|
+
process.exit(exitCode);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
async function executeToolWithCapture(tool, args, prompt, config, filenameComponents) {
|
|
232
|
+
const outputCapture = new OutputCaptureService({
|
|
233
|
+
outputDirectory: config.outputCapture?.directory || config.historyDir,
|
|
234
|
+
maxOutputSize: (config.outputCapture?.maxSizeMB || 10) * 1024 * 1024
|
|
235
|
+
});
|
|
236
|
+
// Use provided filename components for synchronized naming
|
|
237
|
+
const { dateStr, timeStr, randomSuffix } = filenameComponents;
|
|
238
|
+
const outputFilename = `${dateStr}-${timeStr}-${randomSuffix}-output.txt`;
|
|
239
|
+
const outputPath = path.join(config.outputCapture?.directory || config.historyDir, outputFilename);
|
|
240
|
+
const result = await outputCapture.captureCommand(tool, args, prompt, outputPath);
|
|
241
|
+
return {
|
|
242
|
+
exitCode: result.exitCode,
|
|
243
|
+
outputFile: outputPath,
|
|
244
|
+
outputSize: result.outputSize
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
async function executeTool(tool, args, prompt) {
|
|
248
|
+
return new Promise((resolve, reject) => {
|
|
249
|
+
const child = spawn(tool, args, {
|
|
250
|
+
stdio: ['pipe', 'inherit', 'inherit']
|
|
251
|
+
});
|
|
252
|
+
child.on('error', (error) => {
|
|
253
|
+
if (error.code === 'ENOENT') {
|
|
254
|
+
// Try to suggest similar tools
|
|
255
|
+
const commonTools = ['claude', 'code', 'cat', 'less', 'vim'];
|
|
256
|
+
const suggestions = commonTools.filter(t => t.toLowerCase().includes(tool.toLowerCase()) ||
|
|
257
|
+
tool.toLowerCase().includes(t.toLowerCase()));
|
|
258
|
+
reject(errors.toolNotFound(tool, suggestions));
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
reject(error);
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
child.on('close', (code) => {
|
|
265
|
+
resolve(code);
|
|
266
|
+
});
|
|
267
|
+
// Write prompt to stdin
|
|
268
|
+
try {
|
|
269
|
+
if (child.stdin) {
|
|
270
|
+
// Only add error handler if stdin has on method (not mocked in tests)
|
|
271
|
+
if (typeof child.stdin.on === 'function') {
|
|
272
|
+
child.stdin.on('error', (error) => {
|
|
273
|
+
// Ignore EPIPE errors which happen when the tool closes stdin early
|
|
274
|
+
const errorCode = error.code;
|
|
275
|
+
if (errorCode !== 'EPIPE') {
|
|
276
|
+
logger.error(`stdin error: ${error}`);
|
|
277
|
+
}
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
child.stdin.write(prompt);
|
|
281
|
+
child.stdin.end();
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
catch (error) {
|
|
285
|
+
// Ignore EPIPE errors which happen when the tool closes stdin early
|
|
286
|
+
const errorCode = error.code;
|
|
287
|
+
if (errorCode !== 'EPIPE') {
|
|
288
|
+
reject(new Error(`Failed to write prompt to tool: ${error instanceof Error ? error.message : String(error)}`));
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
async function handlePostRunReviews(reviewFiles, config, isAutoRun) {
|
|
294
|
+
logger.log(chalk.dim('\n' + '─'.repeat(60)));
|
|
295
|
+
for (const { name, value } of reviewFiles) {
|
|
296
|
+
const filePath = String(value);
|
|
297
|
+
// Check if file exists
|
|
298
|
+
const fileExists = await pathExists(filePath);
|
|
299
|
+
if (!fileExists) {
|
|
300
|
+
logger.log(chalk.yellow(`\nFile for '${name}' not found: ${filePath}`));
|
|
301
|
+
continue;
|
|
302
|
+
}
|
|
303
|
+
// In autoRun mode, skip the confirmation prompt and directly open the file
|
|
304
|
+
let shouldReview = false;
|
|
305
|
+
if (isAutoRun) {
|
|
306
|
+
shouldReview = true;
|
|
307
|
+
logger.log(chalk.blue(`\nAuto-reviewing file '${name}' (${filePath})`));
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
// Prompt user to review the file
|
|
311
|
+
shouldReview = await confirm({
|
|
312
|
+
message: `Would you like to review the file '${name}' (${filePath})?`,
|
|
313
|
+
default: true
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
if (shouldReview) {
|
|
317
|
+
// Check autoReview setting (default to true)
|
|
318
|
+
const autoReview = config.autoReview ?? true;
|
|
319
|
+
if (autoReview) {
|
|
320
|
+
// Find an editor and open the file
|
|
321
|
+
const editor = await editorLauncher.findEditor();
|
|
322
|
+
if (!editor) {
|
|
323
|
+
logger.log(chalk.yellow('No editor found. Please configure an editor or set autoReview to false.'));
|
|
324
|
+
continue;
|
|
325
|
+
}
|
|
326
|
+
try {
|
|
327
|
+
logger.log(chalk.blue(`Opening ${filePath} in ${editor}...`));
|
|
328
|
+
await editorLauncher.openInEditor(editor, filePath);
|
|
329
|
+
}
|
|
330
|
+
catch (error) {
|
|
331
|
+
logger.error(chalk.red(`Failed to open editor: ${error instanceof Error ? error.message : String(error)}`));
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
logger.log(chalk.dim(`File saved at: ${filePath}`));
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Config } from '../types/config.js';
|
|
2
|
+
export interface ConfigResult {
|
|
3
|
+
config: Config;
|
|
4
|
+
filepath?: string;
|
|
5
|
+
configDir?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class ConfigManager {
|
|
8
|
+
private static getExplorer;
|
|
9
|
+
static checkForOldConfigFiles(dir?: string): Promise<string[]>;
|
|
10
|
+
static renameOldConfigFile(oldPath: string): Promise<string>;
|
|
11
|
+
static load(startDir?: string): Promise<Config>;
|
|
12
|
+
static loadWithPath(startDir?: string): Promise<ConfigResult>;
|
|
13
|
+
private static validateConfig;
|
|
14
|
+
private static migrateConfig;
|
|
15
|
+
private static mergeConfigs;
|
|
16
|
+
private static expandPaths;
|
|
17
|
+
private static expandPath;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=config-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../src/config/config-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAkB,MAAM,oBAAoB,CAAC;AAW5D,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,WAAW;WAeb,sBAAsB,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;WActE,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;WAgCrD,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;WAKxC,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAoFnE,OAAO,CAAC,MAAM,CAAC,cAAc;mBAyCR,aAAa;IA+DlC,OAAO,CAAC,MAAM,CAAC,YAAY;IAmH3B,OAAO,CAAC,MAAM,CAAC,WAAW;IAuD1B,OAAO,CAAC,MAAM,CAAC,UAAU;CAkB1B"}
|