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,386 @@
|
|
|
1
|
+
import { cosmiconfig } from 'cosmiconfig';
|
|
2
|
+
import { DEFAULT_CONFIG } from '../types/config.js';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import os from 'node:os';
|
|
5
|
+
import { getHomePath } from '../utils/platform.js';
|
|
6
|
+
import fs from 'fs-extra';
|
|
7
|
+
import { errors, createError, ErrorCategory } from '../utils/errors.js';
|
|
8
|
+
import { migrateConfig } from './migration.js';
|
|
9
|
+
import { ConfigSchema, ConfigFileSchema } from '../schemas/config-schema.js';
|
|
10
|
+
import { logger } from '../utils/logger.js';
|
|
11
|
+
export class ConfigManager {
|
|
12
|
+
static getExplorer() {
|
|
13
|
+
return cosmiconfig('pt', {
|
|
14
|
+
searchPlaces: [
|
|
15
|
+
'.pt-config',
|
|
16
|
+
'.pt-config.json',
|
|
17
|
+
'.pt-config.yaml',
|
|
18
|
+
'.pt-config.yml',
|
|
19
|
+
'.pt-config.js',
|
|
20
|
+
'.pt-config.cjs',
|
|
21
|
+
'pt.config.js',
|
|
22
|
+
],
|
|
23
|
+
stopDir: os.homedir(), // This enables parent directory search up to home directory
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
static async checkForOldConfigFiles(dir = process.cwd()) {
|
|
27
|
+
const oldConfigPatterns = ['.ptrc', '.ptrc.json', '.ptrc.yaml', '.ptrc.yml', '.ptrc.js', '.ptrc.cjs'];
|
|
28
|
+
const foundOldFiles = [];
|
|
29
|
+
for (const pattern of oldConfigPatterns) {
|
|
30
|
+
const filePath = path.join(dir, pattern);
|
|
31
|
+
if (await fs.pathExists(filePath)) {
|
|
32
|
+
foundOldFiles.push(filePath);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return foundOldFiles;
|
|
36
|
+
}
|
|
37
|
+
static async renameOldConfigFile(oldPath) {
|
|
38
|
+
const dir = path.dirname(oldPath);
|
|
39
|
+
const filename = path.basename(oldPath);
|
|
40
|
+
// Map old names to new names
|
|
41
|
+
const nameMapping = {
|
|
42
|
+
'.ptrc': '.pt-config',
|
|
43
|
+
'.ptrc.json': '.pt-config.json',
|
|
44
|
+
'.ptrc.yaml': '.pt-config.yaml',
|
|
45
|
+
'.ptrc.yml': '.pt-config.yml',
|
|
46
|
+
'.ptrc.js': '.pt-config.js',
|
|
47
|
+
'.ptrc.cjs': '.pt-config.cjs'
|
|
48
|
+
};
|
|
49
|
+
const newFilename = nameMapping[filename];
|
|
50
|
+
if (!newFilename) {
|
|
51
|
+
throw new Error(`Unknown config file pattern: ${filename}`);
|
|
52
|
+
}
|
|
53
|
+
const newPath = path.join(dir, newFilename);
|
|
54
|
+
// Check if new file already exists
|
|
55
|
+
if (await fs.pathExists(newPath)) {
|
|
56
|
+
throw new Error(`Cannot rename ${filename} to ${newFilename}: destination file already exists`);
|
|
57
|
+
}
|
|
58
|
+
// Rename the file
|
|
59
|
+
await fs.rename(oldPath, newPath);
|
|
60
|
+
return newPath;
|
|
61
|
+
}
|
|
62
|
+
static async load(startDir) {
|
|
63
|
+
const result = await this.loadWithPath(startDir);
|
|
64
|
+
return result.config;
|
|
65
|
+
}
|
|
66
|
+
static async loadWithPath(startDir) {
|
|
67
|
+
const searchFrom = startDir || process.cwd();
|
|
68
|
+
const explorer = this.getExplorer();
|
|
69
|
+
// Use cosmiconfig's search which handles the directory traversal up to the root
|
|
70
|
+
const result = await explorer.search(searchFrom);
|
|
71
|
+
if (!result || !result.config) {
|
|
72
|
+
// Create default config with all defaults
|
|
73
|
+
const defaultConfig = {
|
|
74
|
+
promptDirs: [path.join(os.homedir(), '.pt/prompts')],
|
|
75
|
+
...DEFAULT_CONFIG
|
|
76
|
+
};
|
|
77
|
+
return {
|
|
78
|
+
config: this.expandPaths(defaultConfig),
|
|
79
|
+
filepath: undefined,
|
|
80
|
+
configDir: undefined
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
// Validate the loaded config
|
|
84
|
+
this.validateConfig(result.config);
|
|
85
|
+
// Check if migration is needed
|
|
86
|
+
const migrated = await this.migrateConfig(result.config, result.filepath);
|
|
87
|
+
// Get the directory containing the config file
|
|
88
|
+
const configDir = path.dirname(result.filepath);
|
|
89
|
+
// Expand paths relative to the config file directory
|
|
90
|
+
return {
|
|
91
|
+
config: this.expandPaths(migrated, configDir),
|
|
92
|
+
filepath: result.filepath,
|
|
93
|
+
configDir: configDir
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/* private static formatValidationError(issue: z.ZodIssue): string {
|
|
97
|
+
// Handle specific type validation errors
|
|
98
|
+
if (issue.code === 'invalid_type') {
|
|
99
|
+
const fieldName = issue.path[issue.path.length - 1];
|
|
100
|
+
const expectedType = issue.expected;
|
|
101
|
+
let typeDescription = expectedType;
|
|
102
|
+
|
|
103
|
+
// Map Zod types to user-friendly descriptions
|
|
104
|
+
if (expectedType === 'string') {
|
|
105
|
+
typeDescription = 'a string';
|
|
106
|
+
} else if (expectedType === 'array') {
|
|
107
|
+
typeDescription = 'an array';
|
|
108
|
+
} else if (expectedType === 'boolean') {
|
|
109
|
+
typeDescription = 'a boolean';
|
|
110
|
+
} else if (expectedType === 'object') {
|
|
111
|
+
typeDescription = 'an object';
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return `'${fieldName}' must be ${typeDescription}`;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Handle union validation messages
|
|
118
|
+
if (issue.code === 'invalid_union' && issue.path && issue.path.length > 0) {
|
|
119
|
+
const fieldName = issue.path[issue.path.length - 1];
|
|
120
|
+
// Try to infer the expected type from the field name
|
|
121
|
+
if (fieldName === 'historyDir' || fieldName === 'annotationDir' || fieldName === 'gitPromptDir') {
|
|
122
|
+
return `'${fieldName}' must be a string`;
|
|
123
|
+
} else if (fieldName === 'autoReview' || fieldName === 'autoRun') {
|
|
124
|
+
return `'${fieldName}' must be a boolean`;
|
|
125
|
+
} else if (fieldName === 'handlebarsExtensions' || fieldName === 'defaultCmdArgs') {
|
|
126
|
+
return `'${fieldName}' must be an array`;
|
|
127
|
+
} else if (fieldName === 'defaultCmdOptions') {
|
|
128
|
+
return `'${fieldName}' must be an object`;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Handle enum validation for handlebarsExtensions type field
|
|
133
|
+
if (issue.code === 'invalid_enum_value' && issue.path && issue.path.length >= 2) {
|
|
134
|
+
const fieldPath = issue.path;
|
|
135
|
+
if (fieldPath[0] === 'handlebarsExtensions' && fieldPath[2] === 'type') {
|
|
136
|
+
return "handlebarsExtension type must be 'inline' or 'file'";
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return issue.message;
|
|
141
|
+
} */
|
|
142
|
+
static validateConfig(config) {
|
|
143
|
+
// First validate that it's a valid config file format (any version)
|
|
144
|
+
const fileResult = ConfigFileSchema.safeParse(config);
|
|
145
|
+
if (!fileResult.success) {
|
|
146
|
+
const issues = fileResult.error.issues;
|
|
147
|
+
const firstIssue = issues[0];
|
|
148
|
+
// Handle union errors by looking for the most specific error
|
|
149
|
+
let specificIssue = firstIssue;
|
|
150
|
+
if (firstIssue.code === 'invalid_union' && 'unionErrors' in firstIssue) {
|
|
151
|
+
// Try to find a more specific error in union errors
|
|
152
|
+
// Look for errors that match the actual config fields (not old schema fields)
|
|
153
|
+
const cfg = config;
|
|
154
|
+
const unionIssue = firstIssue;
|
|
155
|
+
for (const unionError of unionIssue.unionErrors) {
|
|
156
|
+
if (unionError.issues && unionError.issues.length > 0) {
|
|
157
|
+
const issue = unionError.issues[0];
|
|
158
|
+
if (issue.path && issue.path.length > 0) {
|
|
159
|
+
const fieldName = issue.path[0];
|
|
160
|
+
// Check if this field exists in the actual config
|
|
161
|
+
if (fieldName in cfg) {
|
|
162
|
+
specificIssue = issue;
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// Create user-friendly error messages
|
|
170
|
+
if (specificIssue.path && specificIssue.path.length > 0) {
|
|
171
|
+
const field = specificIssue.path.join('.');
|
|
172
|
+
// const message = this.formatValidationError(specificIssue);
|
|
173
|
+
throw errors.invalidConfig(field, specificIssue.message, 'invalid value');
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
throw errors.invalidConfig('format', 'valid JSON', 'invalid JSON');
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
static async migrateConfig(config, filepath) {
|
|
181
|
+
const cfg = config;
|
|
182
|
+
// Check if migration is needed
|
|
183
|
+
if (migrateConfig.needsMigration(cfg)) {
|
|
184
|
+
// Create backup before migration
|
|
185
|
+
if (filepath && await fs.pathExists(filepath)) {
|
|
186
|
+
try {
|
|
187
|
+
await migrateConfig.createBackup(filepath);
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
// Backup failed, but continue with migration
|
|
191
|
+
logger.warn(`Warning: Could not create backup of config file: ${error instanceof Error ? error.message : String(error)}`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// Apply migration
|
|
195
|
+
const migrated = migrateConfig(cfg);
|
|
196
|
+
// Validate the migrated config with the current schema
|
|
197
|
+
const result = ConfigSchema.safeParse(migrated);
|
|
198
|
+
if (!result.success) {
|
|
199
|
+
const firstIssue = result.error.issues[0];
|
|
200
|
+
throw createError({
|
|
201
|
+
message: `Configuration migration failed: ${firstIssue.message}`,
|
|
202
|
+
code: 'MIGRATION_FAILED',
|
|
203
|
+
category: ErrorCategory.CONFIG_ERROR,
|
|
204
|
+
suggestions: [
|
|
205
|
+
{ text: 'Check your configuration file for invalid values' },
|
|
206
|
+
{ text: 'Try removing the config file and running "pt init" to start fresh' }
|
|
207
|
+
],
|
|
208
|
+
icon: '⚙️'
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
// Save migrated config back to disk
|
|
212
|
+
if (filepath && filepath.endsWith('.json')) {
|
|
213
|
+
await fs.writeJson(filepath, migrated, { spaces: 2 });
|
|
214
|
+
}
|
|
215
|
+
return migrated;
|
|
216
|
+
}
|
|
217
|
+
// Validate existing config is valid for current version
|
|
218
|
+
const result = ConfigSchema.safeParse(cfg);
|
|
219
|
+
if (!result.success) {
|
|
220
|
+
// Try to migrate even if needsMigration returned false
|
|
221
|
+
const migrated = migrateConfig(cfg);
|
|
222
|
+
const retryResult = ConfigSchema.safeParse(migrated);
|
|
223
|
+
if (retryResult.success) {
|
|
224
|
+
return migrated;
|
|
225
|
+
}
|
|
226
|
+
// Still invalid after migration attempt
|
|
227
|
+
const firstIssue = retryResult.error.issues[0];
|
|
228
|
+
const message = firstIssue.message;
|
|
229
|
+
throw errors.invalidConfig('validation', 'valid configuration', message);
|
|
230
|
+
}
|
|
231
|
+
return result.data;
|
|
232
|
+
}
|
|
233
|
+
static mergeConfigs(configs) {
|
|
234
|
+
const merged = { promptDirs: [] };
|
|
235
|
+
// Start with default config if no configs provided
|
|
236
|
+
if (configs.length === 0) {
|
|
237
|
+
return {
|
|
238
|
+
promptDirs: [path.join(os.homedir(), '.pt/prompts')],
|
|
239
|
+
...DEFAULT_CONFIG
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
for (const config of configs) {
|
|
243
|
+
if (config.promptDirs) {
|
|
244
|
+
merged.promptDirs = [...merged.promptDirs, ...config.promptDirs];
|
|
245
|
+
}
|
|
246
|
+
if (config.historyDir) {
|
|
247
|
+
merged.historyDir = config.historyDir;
|
|
248
|
+
}
|
|
249
|
+
if (config.annotationDir) {
|
|
250
|
+
merged.annotationDir = config.annotationDir;
|
|
251
|
+
}
|
|
252
|
+
// Merge new field names
|
|
253
|
+
if (config.defaultCmd) {
|
|
254
|
+
merged.defaultCmd = config.defaultCmd;
|
|
255
|
+
}
|
|
256
|
+
if (config.defaultCmdArgs) {
|
|
257
|
+
merged.defaultCmdArgs = config.defaultCmdArgs;
|
|
258
|
+
}
|
|
259
|
+
if (config.defaultCmdOptions) {
|
|
260
|
+
merged.defaultCmdOptions = config.defaultCmdOptions;
|
|
261
|
+
}
|
|
262
|
+
if (config.autoReview !== undefined) {
|
|
263
|
+
merged.autoReview = config.autoReview;
|
|
264
|
+
}
|
|
265
|
+
if (config.autoRun !== undefined) {
|
|
266
|
+
merged.autoRun = config.autoRun;
|
|
267
|
+
}
|
|
268
|
+
if (config.gitPromptDir) {
|
|
269
|
+
merged.gitPromptDir = config.gitPromptDir;
|
|
270
|
+
}
|
|
271
|
+
if (config.handlebarsExtensions) {
|
|
272
|
+
merged.handlebarsExtensions = config.handlebarsExtensions;
|
|
273
|
+
}
|
|
274
|
+
// Also merge legacy fields if present (will be migrated later)
|
|
275
|
+
if (config.codingTool) {
|
|
276
|
+
merged.codingTool = config.codingTool;
|
|
277
|
+
}
|
|
278
|
+
if (config.codingToolArgs) {
|
|
279
|
+
merged.codingToolArgs = config.codingToolArgs;
|
|
280
|
+
}
|
|
281
|
+
if (config.codingToolOptions) {
|
|
282
|
+
merged.codingToolOptions = config.codingToolOptions;
|
|
283
|
+
}
|
|
284
|
+
if (config.version) {
|
|
285
|
+
merged.version = config.version;
|
|
286
|
+
}
|
|
287
|
+
if (config.helpers) {
|
|
288
|
+
merged.helpers = { ...merged.helpers, ...config.helpers };
|
|
289
|
+
}
|
|
290
|
+
if (config.outputCapture) {
|
|
291
|
+
merged.outputCapture = config.outputCapture;
|
|
292
|
+
}
|
|
293
|
+
if (config.autoAnnotate) {
|
|
294
|
+
merged.autoAnnotate = config.autoAnnotate;
|
|
295
|
+
}
|
|
296
|
+
if (config.logLevel) {
|
|
297
|
+
merged.logLevel = config.logLevel;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
// Remove duplicates from promptDirs
|
|
301
|
+
merged.promptDirs = [...new Set(merged.promptDirs)];
|
|
302
|
+
// If no promptDirs were specified in any config, use default
|
|
303
|
+
if (merged.promptDirs.length === 0) {
|
|
304
|
+
merged.promptDirs = [path.join(os.homedir(), '.pt/prompts')];
|
|
305
|
+
}
|
|
306
|
+
// Don't apply default tool settings here anymore - they come from tool detection during init
|
|
307
|
+
if (merged.autoReview === undefined && DEFAULT_CONFIG.autoReview !== undefined) {
|
|
308
|
+
merged.autoReview = DEFAULT_CONFIG.autoReview;
|
|
309
|
+
}
|
|
310
|
+
if (merged.autoRun === undefined && DEFAULT_CONFIG.autoRun !== undefined) {
|
|
311
|
+
merged.autoRun = DEFAULT_CONFIG.autoRun;
|
|
312
|
+
}
|
|
313
|
+
if (!merged.gitPromptDir && DEFAULT_CONFIG.gitPromptDir) {
|
|
314
|
+
merged.gitPromptDir = DEFAULT_CONFIG.gitPromptDir;
|
|
315
|
+
}
|
|
316
|
+
if (!merged.handlebarsExtensions && DEFAULT_CONFIG.handlebarsExtensions) {
|
|
317
|
+
merged.handlebarsExtensions = DEFAULT_CONFIG.handlebarsExtensions;
|
|
318
|
+
}
|
|
319
|
+
if (!merged.version && DEFAULT_CONFIG.version) {
|
|
320
|
+
merged.version = DEFAULT_CONFIG.version;
|
|
321
|
+
}
|
|
322
|
+
return merged;
|
|
323
|
+
}
|
|
324
|
+
static expandPaths(config, configDir) {
|
|
325
|
+
const expanded = { ...config };
|
|
326
|
+
// Expand prompt directories
|
|
327
|
+
if (config.promptDirs) {
|
|
328
|
+
expanded.promptDirs = config.promptDirs.map(dir => this.expandPath(dir, configDir));
|
|
329
|
+
}
|
|
330
|
+
// Expand history directory
|
|
331
|
+
if (config.historyDir) {
|
|
332
|
+
expanded.historyDir = this.expandPath(config.historyDir, configDir);
|
|
333
|
+
}
|
|
334
|
+
// Expand annotation directory
|
|
335
|
+
if (config.annotationDir) {
|
|
336
|
+
expanded.annotationDir = this.expandPath(config.annotationDir, configDir);
|
|
337
|
+
}
|
|
338
|
+
// Expand git prompt directory
|
|
339
|
+
if (config.gitPromptDir) {
|
|
340
|
+
expanded.gitPromptDir = this.expandPath(config.gitPromptDir, configDir);
|
|
341
|
+
}
|
|
342
|
+
// Expand helper paths
|
|
343
|
+
if (config.helpers) {
|
|
344
|
+
expanded.helpers = {};
|
|
345
|
+
for (const [name, helper] of Object.entries(config.helpers)) {
|
|
346
|
+
expanded.helpers[name] = { ...helper };
|
|
347
|
+
if (helper.type === 'file' && helper.path) {
|
|
348
|
+
expanded.helpers[name].path = this.expandPath(helper.path, configDir);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
// Expand handlebars extension paths
|
|
353
|
+
if (config.handlebarsExtensions) {
|
|
354
|
+
expanded.handlebarsExtensions = config.handlebarsExtensions.map(ext => {
|
|
355
|
+
if (ext.type === 'file' && ext.path) {
|
|
356
|
+
return { ...ext, path: this.expandPath(ext.path, configDir) };
|
|
357
|
+
}
|
|
358
|
+
return ext;
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
// Expand output capture directory
|
|
362
|
+
if (config.outputCapture && config.outputCapture.directory) {
|
|
363
|
+
expanded.outputCapture = {
|
|
364
|
+
...config.outputCapture,
|
|
365
|
+
directory: this.expandPath(config.outputCapture.directory, configDir)
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
return expanded;
|
|
369
|
+
}
|
|
370
|
+
static expandPath(filepath, configDir) {
|
|
371
|
+
if (filepath.startsWith('~/')) {
|
|
372
|
+
return path.join(getHomePath(), filepath.slice(2));
|
|
373
|
+
}
|
|
374
|
+
// If the path is already absolute, return it as is
|
|
375
|
+
if (path.isAbsolute(filepath)) {
|
|
376
|
+
return filepath;
|
|
377
|
+
}
|
|
378
|
+
// If we have a config directory, resolve relative paths from there
|
|
379
|
+
if (configDir) {
|
|
380
|
+
return path.resolve(configDir, filepath);
|
|
381
|
+
}
|
|
382
|
+
// Otherwise resolve from current working directory
|
|
383
|
+
return path.resolve(filepath);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
//# sourceMappingURL=config-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../src/config/config-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Config } from '../types/config.js';
|
|
2
|
+
export interface ConfigMigration {
|
|
3
|
+
version: string;
|
|
4
|
+
migrate: (config: Record<string, unknown>) => Record<string, unknown>;
|
|
5
|
+
}
|
|
6
|
+
export declare const migrations: ConfigMigration[];
|
|
7
|
+
export declare const migrateConfig: ((config: Record<string, unknown>) => Config) & {
|
|
8
|
+
needsMigration(config: Record<string, unknown>): boolean;
|
|
9
|
+
createBackup(configPath: string): Promise<void>;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=migration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../src/config/migration.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvE;AAED,eAAO,MAAM,UAAU,EAAE,eAAe,EAmHvC,CAAC;AAEF,eAAO,MAAM,aAAa,YACP,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,MAAM;2BAoBxB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;6BAmBzB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAkBxD,CAAC"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import { DateFormats } from '../utils/date-formatter.js';
|
|
3
|
+
export const migrations = [
|
|
4
|
+
{
|
|
5
|
+
version: '3.0.0',
|
|
6
|
+
migrate: (config) => {
|
|
7
|
+
const migrated = { ...config };
|
|
8
|
+
// Handle v1 format: promptDirectory -> promptDirs
|
|
9
|
+
if ('promptDirectory' in config) {
|
|
10
|
+
const pd = config.promptDirectory;
|
|
11
|
+
migrated.promptDirs = Array.isArray(pd) ? pd : [pd];
|
|
12
|
+
delete migrated.promptDirectory;
|
|
13
|
+
}
|
|
14
|
+
// Handle v1 format: historyDirectory -> historyDir
|
|
15
|
+
if ('historyDirectory' in config) {
|
|
16
|
+
migrated.historyDir = config.historyDirectory;
|
|
17
|
+
delete migrated.historyDirectory;
|
|
18
|
+
}
|
|
19
|
+
// Handle v1 format: annotationDirectory -> annotationDir
|
|
20
|
+
if ('annotationDirectory' in config) {
|
|
21
|
+
migrated.annotationDir = config.annotationDirectory;
|
|
22
|
+
delete migrated.annotationDirectory;
|
|
23
|
+
}
|
|
24
|
+
// Rename fields
|
|
25
|
+
if ('codingTool' in config) {
|
|
26
|
+
migrated.defaultCmd = config.codingTool;
|
|
27
|
+
delete migrated.codingTool;
|
|
28
|
+
}
|
|
29
|
+
if ('codingToolArgs' in config) {
|
|
30
|
+
migrated.defaultCmdArgs = config.codingToolArgs;
|
|
31
|
+
delete migrated.codingToolArgs;
|
|
32
|
+
}
|
|
33
|
+
if ('codingToolOptions' in config) {
|
|
34
|
+
migrated.defaultCmdOptions = config.codingToolOptions;
|
|
35
|
+
delete migrated.codingToolOptions;
|
|
36
|
+
}
|
|
37
|
+
// Add new fields with defaults
|
|
38
|
+
migrated.version = '3.0.0';
|
|
39
|
+
migrated.autoReview = migrated.autoReview ?? true;
|
|
40
|
+
migrated.autoRun = migrated.autoRun ?? false;
|
|
41
|
+
migrated.gitPromptDir = migrated.gitPromptDir ?? '.git-prompts';
|
|
42
|
+
migrated.handlebarsExtensions = migrated.handlebarsExtensions ?? [];
|
|
43
|
+
// Set defaults for renamed fields if they don't exist
|
|
44
|
+
migrated.defaultCmd = migrated.defaultCmd ?? 'claude';
|
|
45
|
+
migrated.defaultCmdArgs = migrated.defaultCmdArgs ?? [];
|
|
46
|
+
migrated.defaultCmdOptions = migrated.defaultCmdOptions ?? {
|
|
47
|
+
'Continue with last context?': '--continue'
|
|
48
|
+
};
|
|
49
|
+
// Ensure required fields exist
|
|
50
|
+
migrated.promptDirs = migrated.promptDirs ?? ['./.prompts'];
|
|
51
|
+
// Preserve outputCapture settings
|
|
52
|
+
if ('outputCapture' in config) {
|
|
53
|
+
migrated.outputCapture = config.outputCapture;
|
|
54
|
+
}
|
|
55
|
+
return migrated;
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
version: '4.0.0',
|
|
60
|
+
migrate: (config) => {
|
|
61
|
+
const migrated = { ...config };
|
|
62
|
+
// Update version
|
|
63
|
+
migrated.version = '4.0.0';
|
|
64
|
+
// Add output capture defaults if not present
|
|
65
|
+
if (!migrated.outputCapture) {
|
|
66
|
+
migrated.outputCapture = {
|
|
67
|
+
enabled: false,
|
|
68
|
+
directory: '.pt-output',
|
|
69
|
+
maxSizeMB: 50,
|
|
70
|
+
retentionDays: 30
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
// Add auto-annotation defaults if not present
|
|
74
|
+
if (!migrated.autoAnnotate) {
|
|
75
|
+
migrated.autoAnnotate = {
|
|
76
|
+
enabled: false,
|
|
77
|
+
triggers: ['claude', 'ai', 'assistant'],
|
|
78
|
+
analysisPrompt: 'analyze-execution',
|
|
79
|
+
fallbackRules: [
|
|
80
|
+
{
|
|
81
|
+
pattern: 'test.*fail|failing|failed',
|
|
82
|
+
category: 'verification_gap',
|
|
83
|
+
severity: 'high'
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
pattern: 'error:|exception:|Error:',
|
|
87
|
+
category: 'incomplete_task',
|
|
88
|
+
severity: 'medium'
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
pattern: 'stopped at|incomplete|unfinished',
|
|
92
|
+
category: 'incomplete_task',
|
|
93
|
+
severity: 'high'
|
|
94
|
+
}
|
|
95
|
+
]
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
// Preserve v3 defaults if not set
|
|
99
|
+
migrated.autoReview = migrated.autoReview ?? true;
|
|
100
|
+
migrated.autoRun = migrated.autoRun ?? false;
|
|
101
|
+
return migrated;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
];
|
|
105
|
+
export const migrateConfig = Object.assign(function (config) {
|
|
106
|
+
// Apply migrations in sequence
|
|
107
|
+
let migrated = { ...config };
|
|
108
|
+
// Start with the appropriate migration based on current version
|
|
109
|
+
const currentVersion = config.version;
|
|
110
|
+
if (!currentVersion || currentVersion < '3.0.0') {
|
|
111
|
+
// Apply v3 migration first
|
|
112
|
+
migrated = migrations[0].migrate(migrated);
|
|
113
|
+
}
|
|
114
|
+
if (!migrated.version || migrated.version < '4.0.0') {
|
|
115
|
+
// Apply v4 migration
|
|
116
|
+
migrated = migrations[1].migrate(migrated);
|
|
117
|
+
}
|
|
118
|
+
return migrated;
|
|
119
|
+
}, {
|
|
120
|
+
needsMigration(config) {
|
|
121
|
+
// Check if config has old v1 field names
|
|
122
|
+
if ('promptDirectory' in config || 'historyDirectory' in config || 'annotationDirectory' in config) {
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
// Check if config has old field names
|
|
126
|
+
if ('codingTool' in config || 'codingToolArgs' in config || 'codingToolOptions' in config) {
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
// Check if version is missing or old
|
|
130
|
+
if (!config.version || config.version !== '4.0.0') {
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
return false;
|
|
134
|
+
},
|
|
135
|
+
async createBackup(configPath) {
|
|
136
|
+
const backupPath = configPath + '.backup';
|
|
137
|
+
// If backup already exists, create timestamped backup
|
|
138
|
+
if (await fs.pathExists(backupPath)) {
|
|
139
|
+
const now = new Date();
|
|
140
|
+
const dateStr = DateFormats.YYYYMMDD(now);
|
|
141
|
+
const hours = String(now.getHours()).padStart(2, '0');
|
|
142
|
+
const minutes = String(now.getMinutes()).padStart(2, '0');
|
|
143
|
+
const seconds = String(now.getSeconds()).padStart(2, '0');
|
|
144
|
+
const timestamp = `${dateStr}${hours}${minutes}${seconds}`;
|
|
145
|
+
const timestampedBackup = configPath + '.backup.' + timestamp;
|
|
146
|
+
await fs.copy(configPath, timestampedBackup);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
await fs.copy(configPath, backupPath);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
//# sourceMappingURL=migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/config/migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { HistoryManager } from './history-manager.js';
|
|
2
|
+
import { EnhancedHistoryEntry } from '../types/history.js';
|
|
3
|
+
export interface EnhancedHistorySaveOptions {
|
|
4
|
+
templatePath: string;
|
|
5
|
+
templateContent: string;
|
|
6
|
+
variables: Map<string, unknown>;
|
|
7
|
+
finalPrompt: string;
|
|
8
|
+
title?: string;
|
|
9
|
+
summary?: string;
|
|
10
|
+
timestamp?: Date;
|
|
11
|
+
startTime?: Date;
|
|
12
|
+
endTime?: Date;
|
|
13
|
+
command?: string;
|
|
14
|
+
exitCode?: number | null;
|
|
15
|
+
outputFile?: string;
|
|
16
|
+
outputSize?: number;
|
|
17
|
+
}
|
|
18
|
+
export declare class EnhancedHistoryManager extends HistoryManager {
|
|
19
|
+
private enhancedHistoryDir;
|
|
20
|
+
constructor(enhancedHistoryDir: string);
|
|
21
|
+
listHistory(limit?: number): Promise<EnhancedHistoryEntry[]>;
|
|
22
|
+
getHistoryEntry(index: number): Promise<EnhancedHistoryEntry | null>;
|
|
23
|
+
savePrompt(options: EnhancedHistorySaveOptions): Promise<string>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=enhanced-history-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enhanced-history-manager.d.ts","sourceRoot":"","sources":["../../src/history/enhanced-history-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAQ3D,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,sBAAuB,SAAQ,cAAc;IAC5C,OAAO,CAAC,kBAAkB;gBAAlB,kBAAkB,EAAE,MAAM;IAIxC,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAO5D,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAIpE,UAAU,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,MAAM,CAAC;CAyEvE"}
|