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.
Files changed (240) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +517 -0
  3. package/dist/annotations/annotation-analyzer.d.ts +17 -0
  4. package/dist/annotations/annotation-analyzer.d.ts.map +1 -0
  5. package/dist/annotations/annotation-analyzer.js +145 -0
  6. package/dist/annotations/annotation-analyzer.js.map +1 -0
  7. package/dist/cli.d.ts +3 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +375 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/commands/add.d.ts +2 -0
  12. package/dist/commands/add.d.ts.map +1 -0
  13. package/dist/commands/add.js +149 -0
  14. package/dist/commands/add.js.map +1 -0
  15. package/dist/commands/annotate.d.ts +2 -0
  16. package/dist/commands/annotate.d.ts.map +1 -0
  17. package/dist/commands/annotate.js +223 -0
  18. package/dist/commands/annotate.js.map +1 -0
  19. package/dist/commands/base-command.d.ts +23 -0
  20. package/dist/commands/base-command.d.ts.map +1 -0
  21. package/dist/commands/base-command.js +41 -0
  22. package/dist/commands/base-command.js.map +1 -0
  23. package/dist/commands/edit.d.ts +2 -0
  24. package/dist/commands/edit.d.ts.map +1 -0
  25. package/dist/commands/edit.js +31 -0
  26. package/dist/commands/edit.js.map +1 -0
  27. package/dist/commands/help.d.ts +2 -0
  28. package/dist/commands/help.d.ts.map +1 -0
  29. package/dist/commands/help.js +25 -0
  30. package/dist/commands/help.js.map +1 -0
  31. package/dist/commands/history.d.ts +9 -0
  32. package/dist/commands/history.d.ts.map +1 -0
  33. package/dist/commands/history.js +232 -0
  34. package/dist/commands/history.js.map +1 -0
  35. package/dist/commands/init-refactored.d.ts +19 -0
  36. package/dist/commands/init-refactored.d.ts.map +1 -0
  37. package/dist/commands/init-refactored.js +141 -0
  38. package/dist/commands/init-refactored.js.map +1 -0
  39. package/dist/commands/init.d.ts +2 -0
  40. package/dist/commands/init.d.ts.map +1 -0
  41. package/dist/commands/init.js +124 -0
  42. package/dist/commands/init.js.map +1 -0
  43. package/dist/commands/install.d.ts +10 -0
  44. package/dist/commands/install.d.ts.map +1 -0
  45. package/dist/commands/install.js +224 -0
  46. package/dist/commands/install.js.map +1 -0
  47. package/dist/commands/review.d.ts +3 -0
  48. package/dist/commands/review.d.ts.map +1 -0
  49. package/dist/commands/review.js +158 -0
  50. package/dist/commands/review.js.map +1 -0
  51. package/dist/commands/run.d.ts +28 -0
  52. package/dist/commands/run.d.ts.map +1 -0
  53. package/dist/commands/run.js +340 -0
  54. package/dist/commands/run.js.map +1 -0
  55. package/dist/config/config-manager.d.ts +19 -0
  56. package/dist/config/config-manager.d.ts.map +1 -0
  57. package/dist/config/config-manager.js +386 -0
  58. package/dist/config/config-manager.js.map +1 -0
  59. package/dist/config/migration.d.ts +11 -0
  60. package/dist/config/migration.d.ts.map +1 -0
  61. package/dist/config/migration.js +153 -0
  62. package/dist/config/migration.js.map +1 -0
  63. package/dist/history/enhanced-history-manager.d.ts +25 -0
  64. package/dist/history/enhanced-history-manager.d.ts.map +1 -0
  65. package/dist/history/enhanced-history-manager.js +88 -0
  66. package/dist/history/enhanced-history-manager.js.map +1 -0
  67. package/dist/history/history-manager.d.ts +33 -0
  68. package/dist/history/history-manager.d.ts.map +1 -0
  69. package/dist/history/history-manager.js +176 -0
  70. package/dist/history/history-manager.js.map +1 -0
  71. package/dist/index.d.ts +6 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +6 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/prompts/input-types/file-prompt.d.ts +12 -0
  76. package/dist/prompts/input-types/file-prompt.d.ts.map +1 -0
  77. package/dist/prompts/input-types/file-prompt.js +166 -0
  78. package/dist/prompts/input-types/file-prompt.js.map +1 -0
  79. package/dist/prompts/input-types/file-search-prompt.d.ts +12 -0
  80. package/dist/prompts/input-types/file-search-prompt.d.ts.map +1 -0
  81. package/dist/prompts/input-types/file-search-prompt.js +54 -0
  82. package/dist/prompts/input-types/file-search-prompt.js.map +1 -0
  83. package/dist/prompts/input-types/review-file-prompt.d.ts +4 -0
  84. package/dist/prompts/input-types/review-file-prompt.d.ts.map +1 -0
  85. package/dist/prompts/input-types/review-file-prompt.js +10 -0
  86. package/dist/prompts/input-types/review-file-prompt.js.map +1 -0
  87. package/dist/prompts/prompt-manager.d.ts +12 -0
  88. package/dist/prompts/prompt-manager.d.ts.map +1 -0
  89. package/dist/prompts/prompt-manager.js +102 -0
  90. package/dist/prompts/prompt-manager.js.map +1 -0
  91. package/dist/pupt-1.2.0.tgz +0 -0
  92. package/dist/schemas/config-schema.d.ts +1268 -0
  93. package/dist/schemas/config-schema.d.ts.map +1 -0
  94. package/dist/schemas/config-schema.js +100 -0
  95. package/dist/schemas/config-schema.js.map +1 -0
  96. package/dist/schemas/prompt-schema.d.ts +927 -0
  97. package/dist/schemas/prompt-schema.d.ts.map +1 -0
  98. package/dist/schemas/prompt-schema.js +110 -0
  99. package/dist/schemas/prompt-schema.js.map +1 -0
  100. package/dist/search/file-search-engine.d.ts +36 -0
  101. package/dist/search/file-search-engine.d.ts.map +1 -0
  102. package/dist/search/file-search-engine.js +184 -0
  103. package/dist/search/file-search-engine.js.map +1 -0
  104. package/dist/search/search-engine.d.ts +8 -0
  105. package/dist/search/search-engine.d.ts.map +1 -0
  106. package/dist/search/search-engine.js +52 -0
  107. package/dist/search/search-engine.js.map +1 -0
  108. package/dist/services/auto-annotation-service.d.ts +39 -0
  109. package/dist/services/auto-annotation-service.d.ts.map +1 -0
  110. package/dist/services/auto-annotation-service.js +203 -0
  111. package/dist/services/auto-annotation-service.js.map +1 -0
  112. package/dist/services/file-system-service.d.ts +42 -0
  113. package/dist/services/file-system-service.d.ts.map +1 -0
  114. package/dist/services/file-system-service.js +269 -0
  115. package/dist/services/file-system-service.js.map +1 -0
  116. package/dist/services/git-service.d.ts +27 -0
  117. package/dist/services/git-service.d.ts.map +1 -0
  118. package/dist/services/git-service.js +157 -0
  119. package/dist/services/git-service.js.map +1 -0
  120. package/dist/services/logging-service.d.ts +50 -0
  121. package/dist/services/logging-service.d.ts.map +1 -0
  122. package/dist/services/logging-service.js +203 -0
  123. package/dist/services/logging-service.js.map +1 -0
  124. package/dist/services/output-capture-service.d.ts +25 -0
  125. package/dist/services/output-capture-service.d.ts.map +1 -0
  126. package/dist/services/output-capture-service.js +277 -0
  127. package/dist/services/output-capture-service.js.map +1 -0
  128. package/dist/services/pattern-detector.d.ts +15 -0
  129. package/dist/services/pattern-detector.d.ts.map +1 -0
  130. package/dist/services/pattern-detector.js +219 -0
  131. package/dist/services/pattern-detector.js.map +1 -0
  132. package/dist/services/prompt-service.d.ts +30 -0
  133. package/dist/services/prompt-service.d.ts.map +1 -0
  134. package/dist/services/prompt-service.js +278 -0
  135. package/dist/services/prompt-service.js.map +1 -0
  136. package/dist/services/review-data-builder.d.ts +22 -0
  137. package/dist/services/review-data-builder.d.ts.map +1 -0
  138. package/dist/services/review-data-builder.js +263 -0
  139. package/dist/services/review-data-builder.js.map +1 -0
  140. package/dist/services/suggestion-generator.d.ts +11 -0
  141. package/dist/services/suggestion-generator.d.ts.map +1 -0
  142. package/dist/services/suggestion-generator.js +146 -0
  143. package/dist/services/suggestion-generator.js.map +1 -0
  144. package/dist/services/ui-service.d.ts +49 -0
  145. package/dist/services/ui-service.d.ts.map +1 -0
  146. package/dist/services/ui-service.js +183 -0
  147. package/dist/services/ui-service.js.map +1 -0
  148. package/dist/template/helpers/index.d.ts +4 -0
  149. package/dist/template/helpers/index.d.ts.map +1 -0
  150. package/dist/template/helpers/index.js +132 -0
  151. package/dist/template/helpers/index.js.map +1 -0
  152. package/dist/template/template-context.d.ts +26 -0
  153. package/dist/template/template-context.d.ts.map +1 -0
  154. package/dist/template/template-context.js +65 -0
  155. package/dist/template/template-context.js.map +1 -0
  156. package/dist/template/template-engine.d.ts +13 -0
  157. package/dist/template/template-engine.d.ts.map +1 -0
  158. package/dist/template/template-engine.js +83 -0
  159. package/dist/template/template-engine.js.map +1 -0
  160. package/dist/types/annotations.d.ts +49 -0
  161. package/dist/types/annotations.d.ts.map +1 -0
  162. package/dist/types/annotations.js +2 -0
  163. package/dist/types/annotations.js.map +1 -0
  164. package/dist/types/config.d.ts +49 -0
  165. package/dist/types/config.d.ts.map +1 -0
  166. package/dist/types/config.js +8 -0
  167. package/dist/types/config.js.map +1 -0
  168. package/dist/types/history.d.ts +32 -0
  169. package/dist/types/history.d.ts.map +1 -0
  170. package/dist/types/history.js +2 -0
  171. package/dist/types/history.js.map +1 -0
  172. package/dist/types/patterns.d.ts +24 -0
  173. package/dist/types/patterns.d.ts.map +1 -0
  174. package/dist/types/patterns.js +2 -0
  175. package/dist/types/patterns.js.map +1 -0
  176. package/dist/types/prompt.d.ts +23 -0
  177. package/dist/types/prompt.d.ts.map +1 -0
  178. package/dist/types/prompt.js +2 -0
  179. package/dist/types/prompt.js.map +1 -0
  180. package/dist/types/review.d.ts +76 -0
  181. package/dist/types/review.d.ts.map +1 -0
  182. package/dist/types/review.js +2 -0
  183. package/dist/types/review.js.map +1 -0
  184. package/dist/ui/console-ui.d.ts +35 -0
  185. package/dist/ui/console-ui.d.ts.map +1 -0
  186. package/dist/ui/console-ui.js +83 -0
  187. package/dist/ui/console-ui.js.map +1 -0
  188. package/dist/ui/interactive-search.d.ts +8 -0
  189. package/dist/ui/interactive-search.d.ts.map +1 -0
  190. package/dist/ui/interactive-search.js +29 -0
  191. package/dist/ui/interactive-search.js.map +1 -0
  192. package/dist/utils/date-formatter.d.ts +10 -0
  193. package/dist/utils/date-formatter.d.ts.map +1 -0
  194. package/dist/utils/date-formatter.js +43 -0
  195. package/dist/utils/date-formatter.js.map +1 -0
  196. package/dist/utils/editor.d.ts +13 -0
  197. package/dist/utils/editor.d.ts.map +1 -0
  198. package/dist/utils/editor.js +62 -0
  199. package/dist/utils/editor.js.map +1 -0
  200. package/dist/utils/errors.d.ts +55 -0
  201. package/dist/utils/errors.d.ts.map +1 -0
  202. package/dist/utils/errors.js +248 -0
  203. package/dist/utils/errors.js.map +1 -0
  204. package/dist/utils/file-utils.d.ts +18 -0
  205. package/dist/utils/file-utils.d.ts.map +1 -0
  206. package/dist/utils/file-utils.js +88 -0
  207. package/dist/utils/file-utils.js.map +1 -0
  208. package/dist/utils/git-info.d.ts +8 -0
  209. package/dist/utils/git-info.d.ts.map +1 -0
  210. package/dist/utils/git-info.js +41 -0
  211. package/dist/utils/git-info.js.map +1 -0
  212. package/dist/utils/gitignore.d.ts +10 -0
  213. package/dist/utils/gitignore.d.ts.map +1 -0
  214. package/dist/utils/gitignore.js +72 -0
  215. package/dist/utils/gitignore.js.map +1 -0
  216. package/dist/utils/handlebars-extensions.d.ts +4 -0
  217. package/dist/utils/handlebars-extensions.d.ts.map +1 -0
  218. package/dist/utils/handlebars-extensions.js +87 -0
  219. package/dist/utils/handlebars-extensions.js.map +1 -0
  220. package/dist/utils/logger.d.ts +39 -0
  221. package/dist/utils/logger.d.ts.map +1 -0
  222. package/dist/utils/logger.js +143 -0
  223. package/dist/utils/logger.js.map +1 -0
  224. package/dist/utils/platform.d.ts +9 -0
  225. package/dist/utils/platform.d.ts.map +1 -0
  226. package/dist/utils/platform.js +44 -0
  227. package/dist/utils/platform.js.map +1 -0
  228. package/dist/utils/security.d.ts +5 -0
  229. package/dist/utils/security.d.ts.map +1 -0
  230. package/dist/utils/security.js +57 -0
  231. package/dist/utils/security.js.map +1 -0
  232. package/dist/utils/tool-detection.d.ts +11 -0
  233. package/dist/utils/tool-detection.d.ts.map +1 -0
  234. package/dist/utils/tool-detection.js +32 -0
  235. package/dist/utils/tool-detection.js.map +1 -0
  236. package/dist/utils/trie.d.ts +18 -0
  237. package/dist/utils/trie.d.ts.map +1 -0
  238. package/dist/utils/trie.js +84 -0
  239. package/dist/utils/trie.js.map +1 -0
  240. 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"}