@pupt/cli 0.0.1 → 2.3.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 (259) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +54 -29
  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 +435 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/commands/add.d.ts +5 -0
  12. package/dist/commands/add.d.ts.map +1 -0
  13. package/dist/commands/add.js +164 -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 +99 -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/cache.d.ts +9 -0
  24. package/dist/commands/cache.d.ts.map +1 -0
  25. package/dist/commands/cache.js +31 -0
  26. package/dist/commands/cache.js.map +1 -0
  27. package/dist/commands/config.d.ts +8 -0
  28. package/dist/commands/config.d.ts.map +1 -0
  29. package/dist/commands/config.js +93 -0
  30. package/dist/commands/config.js.map +1 -0
  31. package/dist/commands/edit.d.ts +2 -0
  32. package/dist/commands/edit.d.ts.map +1 -0
  33. package/dist/commands/edit.js +35 -0
  34. package/dist/commands/edit.js.map +1 -0
  35. package/dist/commands/help.d.ts +2 -0
  36. package/dist/commands/help.d.ts.map +1 -0
  37. package/dist/commands/help.js +26 -0
  38. package/dist/commands/help.js.map +1 -0
  39. package/dist/commands/history.d.ts +12 -0
  40. package/dist/commands/history.d.ts.map +1 -0
  41. package/dist/commands/history.js +317 -0
  42. package/dist/commands/history.js.map +1 -0
  43. package/dist/commands/init.d.ts +2 -0
  44. package/dist/commands/init.d.ts.map +1 -0
  45. package/dist/commands/init.js +137 -0
  46. package/dist/commands/init.js.map +1 -0
  47. package/dist/commands/install.d.ts +16 -0
  48. package/dist/commands/install.d.ts.map +1 -0
  49. package/dist/commands/install.js +263 -0
  50. package/dist/commands/install.js.map +1 -0
  51. package/dist/commands/review.d.ts +3 -0
  52. package/dist/commands/review.d.ts.map +1 -0
  53. package/dist/commands/review.js +160 -0
  54. package/dist/commands/review.js.map +1 -0
  55. package/dist/commands/run.d.ts +32 -0
  56. package/dist/commands/run.d.ts.map +1 -0
  57. package/dist/commands/run.js +367 -0
  58. package/dist/commands/run.js.map +1 -0
  59. package/dist/commands/uninstall.d.ts +2 -0
  60. package/dist/commands/uninstall.d.ts.map +1 -0
  61. package/dist/commands/uninstall.js +45 -0
  62. package/dist/commands/uninstall.js.map +1 -0
  63. package/dist/commands/update.d.ts +2 -0
  64. package/dist/commands/update.d.ts.map +1 -0
  65. package/dist/commands/update.js +113 -0
  66. package/dist/commands/update.js.map +1 -0
  67. package/dist/config/config-manager.d.ts +19 -0
  68. package/dist/config/config-manager.d.ts.map +1 -0
  69. package/dist/config/config-manager.js +221 -0
  70. package/dist/config/config-manager.js.map +1 -0
  71. package/dist/config/global-paths.d.ts +5 -0
  72. package/dist/config/global-paths.d.ts.map +1 -0
  73. package/dist/config/global-paths.js +16 -0
  74. package/dist/config/global-paths.js.map +1 -0
  75. package/dist/config/migration.d.ts +12 -0
  76. package/dist/config/migration.d.ts.map +1 -0
  77. package/dist/config/migration.js +270 -0
  78. package/dist/config/migration.js.map +1 -0
  79. package/dist/history/enhanced-history-manager.d.ts +27 -0
  80. package/dist/history/enhanced-history-manager.d.ts.map +1 -0
  81. package/dist/history/enhanced-history-manager.js +116 -0
  82. package/dist/history/enhanced-history-manager.js.map +1 -0
  83. package/dist/history/history-manager.d.ts +43 -0
  84. package/dist/history/history-manager.d.ts.map +1 -0
  85. package/dist/history/history-manager.js +229 -0
  86. package/dist/history/history-manager.js.map +1 -0
  87. package/dist/index.d.ts +6 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +6 -0
  90. package/dist/index.js.map +1 -0
  91. package/dist/prompts/input-types/file-search-prompt.d.ts +11 -0
  92. package/dist/prompts/input-types/file-search-prompt.d.ts.map +1 -0
  93. package/dist/prompts/input-types/file-search-prompt.js +53 -0
  94. package/dist/prompts/input-types/file-search-prompt.js.map +1 -0
  95. package/dist/prompts/input-types/review-file-prompt.d.ts +3 -0
  96. package/dist/prompts/input-types/review-file-prompt.d.ts.map +1 -0
  97. package/dist/prompts/input-types/review-file-prompt.js +9 -0
  98. package/dist/prompts/input-types/review-file-prompt.js.map +1 -0
  99. package/dist/schemas/config-schema.d.ts +1637 -0
  100. package/dist/schemas/config-schema.d.ts.map +1 -0
  101. package/dist/schemas/config-schema.js +136 -0
  102. package/dist/schemas/config-schema.js.map +1 -0
  103. package/dist/search/search-engine.d.ts +8 -0
  104. package/dist/search/search-engine.d.ts.map +1 -0
  105. package/dist/search/search-engine.js +53 -0
  106. package/dist/search/search-engine.js.map +1 -0
  107. package/dist/services/git-service.d.ts +28 -0
  108. package/dist/services/git-service.d.ts.map +1 -0
  109. package/dist/services/git-service.js +157 -0
  110. package/dist/services/git-service.js.map +1 -0
  111. package/dist/services/input-collector.d.ts +9 -0
  112. package/dist/services/input-collector.d.ts.map +1 -0
  113. package/dist/services/input-collector.js +162 -0
  114. package/dist/services/input-collector.js.map +1 -0
  115. package/dist/services/logging-service.d.ts +49 -0
  116. package/dist/services/logging-service.d.ts.map +1 -0
  117. package/dist/services/logging-service.js +203 -0
  118. package/dist/services/logging-service.js.map +1 -0
  119. package/dist/services/module-cache.d.ts +42 -0
  120. package/dist/services/module-cache.d.ts.map +1 -0
  121. package/dist/services/module-cache.js +205 -0
  122. package/dist/services/module-cache.js.map +1 -0
  123. package/dist/services/module-entry-builder.d.ts +20 -0
  124. package/dist/services/module-entry-builder.d.ts.map +1 -0
  125. package/dist/services/module-entry-builder.js +71 -0
  126. package/dist/services/module-entry-builder.js.map +1 -0
  127. package/dist/services/output-capture-service.d.ts +28 -0
  128. package/dist/services/output-capture-service.d.ts.map +1 -0
  129. package/dist/services/output-capture-service.js +348 -0
  130. package/dist/services/output-capture-service.js.map +1 -0
  131. package/dist/services/package-manager.d.ts +18 -0
  132. package/dist/services/package-manager.d.ts.map +1 -0
  133. package/dist/services/package-manager.js +141 -0
  134. package/dist/services/package-manager.js.map +1 -0
  135. package/dist/services/pattern-detector.d.ts +15 -0
  136. package/dist/services/pattern-detector.d.ts.map +1 -0
  137. package/dist/services/pattern-detector.js +228 -0
  138. package/dist/services/pattern-detector.js.map +1 -0
  139. package/dist/services/prompt-resolver.d.ts +32 -0
  140. package/dist/services/prompt-resolver.d.ts.map +1 -0
  141. package/dist/services/prompt-resolver.js +73 -0
  142. package/dist/services/prompt-resolver.js.map +1 -0
  143. package/dist/services/pupt-prompt-source.d.ts +16 -0
  144. package/dist/services/pupt-prompt-source.d.ts.map +1 -0
  145. package/dist/services/pupt-prompt-source.js +74 -0
  146. package/dist/services/pupt-prompt-source.js.map +1 -0
  147. package/dist/services/pupt-service.d.ts +33 -0
  148. package/dist/services/pupt-service.d.ts.map +1 -0
  149. package/dist/services/pupt-service.js +119 -0
  150. package/dist/services/pupt-service.js.map +1 -0
  151. package/dist/services/review-data-builder.d.ts +25 -0
  152. package/dist/services/review-data-builder.d.ts.map +1 -0
  153. package/dist/services/review-data-builder.js +333 -0
  154. package/dist/services/review-data-builder.js.map +1 -0
  155. package/dist/services/suggestion-generator.d.ts +11 -0
  156. package/dist/services/suggestion-generator.d.ts.map +1 -0
  157. package/dist/services/suggestion-generator.js +158 -0
  158. package/dist/services/suggestion-generator.js.map +1 -0
  159. package/dist/services/ui-service.d.ts +49 -0
  160. package/dist/services/ui-service.d.ts.map +1 -0
  161. package/dist/services/ui-service.js +196 -0
  162. package/dist/services/ui-service.js.map +1 -0
  163. package/dist/types/annotations.d.ts +50 -0
  164. package/dist/types/annotations.d.ts.map +1 -0
  165. package/dist/types/annotations.js +2 -0
  166. package/dist/types/annotations.js.map +1 -0
  167. package/dist/types/config.d.ts +110 -0
  168. package/dist/types/config.d.ts.map +1 -0
  169. package/dist/types/config.js +12 -0
  170. package/dist/types/config.js.map +1 -0
  171. package/dist/types/history.d.ts +36 -0
  172. package/dist/types/history.d.ts.map +1 -0
  173. package/dist/types/history.js +2 -0
  174. package/dist/types/history.js.map +1 -0
  175. package/dist/types/patterns.d.ts +25 -0
  176. package/dist/types/patterns.d.ts.map +1 -0
  177. package/dist/types/patterns.js +2 -0
  178. package/dist/types/patterns.js.map +1 -0
  179. package/dist/types/prompt.d.ts +29 -0
  180. package/dist/types/prompt.d.ts.map +1 -0
  181. package/dist/types/prompt.js +24 -0
  182. package/dist/types/prompt.js.map +1 -0
  183. package/dist/types/review.d.ts +81 -0
  184. package/dist/types/review.d.ts.map +1 -0
  185. package/dist/types/review.js +2 -0
  186. package/dist/types/review.js.map +1 -0
  187. package/dist/ui/console-ui.d.ts +30 -0
  188. package/dist/ui/console-ui.d.ts.map +1 -0
  189. package/dist/ui/console-ui.js +88 -0
  190. package/dist/ui/console-ui.js.map +1 -0
  191. package/dist/ui/interactive-search.d.ts +8 -0
  192. package/dist/ui/interactive-search.d.ts.map +1 -0
  193. package/dist/ui/interactive-search.js +29 -0
  194. package/dist/ui/interactive-search.js.map +1 -0
  195. package/dist/utils/annotation-migration.d.ts +12 -0
  196. package/dist/utils/annotation-migration.d.ts.map +1 -0
  197. package/dist/utils/annotation-migration.js +88 -0
  198. package/dist/utils/annotation-migration.js.map +1 -0
  199. package/dist/utils/date-formatter.d.ts +10 -0
  200. package/dist/utils/date-formatter.d.ts.map +1 -0
  201. package/dist/utils/date-formatter.js +46 -0
  202. package/dist/utils/date-formatter.js.map +1 -0
  203. package/dist/utils/editor.d.ts +14 -0
  204. package/dist/utils/editor.d.ts.map +1 -0
  205. package/dist/utils/editor.js +52 -0
  206. package/dist/utils/editor.js.map +1 -0
  207. package/dist/utils/errors.d.ts +58 -0
  208. package/dist/utils/errors.d.ts.map +1 -0
  209. package/dist/utils/errors.js +275 -0
  210. package/dist/utils/errors.js.map +1 -0
  211. package/dist/utils/git-info.d.ts +10 -0
  212. package/dist/utils/git-info.d.ts.map +1 -0
  213. package/dist/utils/git-info.js +44 -0
  214. package/dist/utils/git-info.js.map +1 -0
  215. package/dist/utils/gitignore.d.ts +10 -0
  216. package/dist/utils/gitignore.d.ts.map +1 -0
  217. package/dist/utils/gitignore.js +72 -0
  218. package/dist/utils/gitignore.js.map +1 -0
  219. package/dist/utils/logger.d.ts +39 -0
  220. package/dist/utils/logger.d.ts.map +1 -0
  221. package/dist/utils/logger.js +143 -0
  222. package/dist/utils/logger.js.map +1 -0
  223. package/dist/utils/platform.d.ts +9 -0
  224. package/dist/utils/platform.d.ts.map +1 -0
  225. package/dist/utils/platform.js +45 -0
  226. package/dist/utils/platform.js.map +1 -0
  227. package/dist/utils/project-root.d.ts +22 -0
  228. package/dist/utils/project-root.d.ts.map +1 -0
  229. package/dist/utils/project-root.js +226 -0
  230. package/dist/utils/project-root.js.map +1 -0
  231. package/dist/utils/prompt-dir-resolver.d.ts +5 -0
  232. package/dist/utils/prompt-dir-resolver.d.ts.map +1 -0
  233. package/dist/utils/prompt-dir-resolver.js +25 -0
  234. package/dist/utils/prompt-dir-resolver.js.map +1 -0
  235. package/dist/utils/security.d.ts +5 -0
  236. package/dist/utils/security.d.ts.map +1 -0
  237. package/dist/utils/security.js +57 -0
  238. package/dist/utils/security.js.map +1 -0
  239. package/dist/utils/tool-detection.d.ts +14 -0
  240. package/dist/utils/tool-detection.d.ts.map +1 -0
  241. package/dist/utils/tool-detection.js +43 -0
  242. package/dist/utils/tool-detection.js.map +1 -0
  243. package/package.json +79 -7
  244. package/prompts/prompts/ad-hoc-long.prompt +60 -0
  245. package/prompts/prompts/ad-hoc.prompt +29 -0
  246. package/prompts/prompts/code-review.prompt +99 -0
  247. package/prompts/prompts/debugging-error-message.prompt +81 -0
  248. package/prompts/prompts/fix-github-actions.prompt +62 -0
  249. package/prompts/prompts/fix-test-errors.prompt +73 -0
  250. package/prompts/prompts/git-commit-comment.prompt +61 -0
  251. package/prompts/prompts/implementation-phase.prompt +53 -0
  252. package/prompts/prompts/implementation-plan.prompt +101 -0
  253. package/prompts/prompts/new-feature.prompt +89 -0
  254. package/prompts/prompts/new-project.prompt +9 -0
  255. package/prompts/prompts/one-shot-change.prompt +79 -0
  256. package/prompts/prompts/pupt-prompt-improvement.prompt +270 -0
  257. package/prompts/prompts/simple-test.prompt +8 -0
  258. package/prompts/prompts/update-design.prompt +71 -0
  259. package/prompts/prompts/update-documentation.prompt +6 -0
@@ -0,0 +1,30 @@
1
+ import { type Ora } from 'ora';
2
+ export declare enum LogLevel {
3
+ ERROR = 0,
4
+ WARN = 1,
5
+ INFO = 2,
6
+ DEBUG = 3
7
+ }
8
+ interface UIOptions {
9
+ logLevel?: LogLevel;
10
+ useColor?: boolean;
11
+ silent?: boolean;
12
+ }
13
+ export declare class ConsoleUI {
14
+ private logLevel;
15
+ private useColor;
16
+ private silent;
17
+ constructor(options?: UIOptions);
18
+ success(message: string): void;
19
+ error(error: Error | string): void;
20
+ warn(message: string): void;
21
+ info(message: string): void;
22
+ debug(message: string): void;
23
+ spinner(text: string): Ora;
24
+ table(data: unknown[]): void;
25
+ json(data: unknown, pretty?: boolean): void;
26
+ setLogLevel(level: LogLevel): void;
27
+ setSilent(silent: boolean): void;
28
+ }
29
+ export {};
30
+ //# sourceMappingURL=console-ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console-ui.d.ts","sourceRoot":"","sources":["../../src/ui/console-ui.ts"],"names":[],"mappings":"AACA,OAAY,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAIpC,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;CACV;AAED,UAAU,SAAS;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,MAAM,CAAU;gBAEZ,OAAO,GAAE,SAAc;IAMnC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM9B,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI;IAOlC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM3B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM3B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM5B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG;IAa1B,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAK5B,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,UAAO,GAAG,IAAI;IAMxC,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAIlC,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;CAGjC"}
@@ -0,0 +1,88 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { logger } from '../utils/logger.js';
4
+ export var LogLevel;
5
+ (function (LogLevel) {
6
+ LogLevel[LogLevel["ERROR"] = 0] = "ERROR";
7
+ LogLevel[LogLevel["WARN"] = 1] = "WARN";
8
+ LogLevel[LogLevel["INFO"] = 2] = "INFO";
9
+ LogLevel[LogLevel["DEBUG"] = 3] = "DEBUG";
10
+ })(LogLevel || (LogLevel = {}));
11
+ export class ConsoleUI {
12
+ logLevel;
13
+ useColor;
14
+ silent;
15
+ constructor(options = {}) {
16
+ this.logLevel = options.logLevel ?? LogLevel.INFO;
17
+ this.useColor = options.useColor ?? true;
18
+ this.silent = options.silent ?? false;
19
+ }
20
+ success(message) {
21
+ if (this.silent || this.logLevel < LogLevel.INFO) {
22
+ return;
23
+ }
24
+ const formatted = this.useColor ? chalk.green(`✅ ${message}`) : `✅ ${message}`;
25
+ logger.log(formatted);
26
+ }
27
+ error(error) {
28
+ if (this.silent || this.logLevel < LogLevel.ERROR) {
29
+ return;
30
+ }
31
+ const message = error instanceof Error ? error.message : error;
32
+ const formatted = this.useColor ? chalk.red(`❌ ${message}`) : `❌ ${message}`;
33
+ logger.error(formatted);
34
+ }
35
+ warn(message) {
36
+ if (this.silent || this.logLevel < LogLevel.WARN) {
37
+ return;
38
+ }
39
+ const formatted = this.useColor ? chalk.yellow(`⚠️ ${message}`) : `⚠️ ${message}`;
40
+ logger.warn(formatted);
41
+ }
42
+ info(message) {
43
+ if (this.silent || this.logLevel < LogLevel.INFO) {
44
+ return;
45
+ }
46
+ const formatted = this.useColor ? chalk.blue(`ℹ️ ${message}`) : `ℹ️ ${message}`;
47
+ logger.log(formatted);
48
+ }
49
+ debug(message) {
50
+ if (this.silent || this.logLevel < LogLevel.DEBUG) {
51
+ return;
52
+ }
53
+ const formatted = this.useColor ? chalk.gray(`🐛 ${message}`) : `🐛 ${message}`;
54
+ logger.log(formatted);
55
+ }
56
+ spinner(text) {
57
+ if (this.silent) {
58
+ return {
59
+ start: () => { },
60
+ succeed: () => { },
61
+ fail: () => { },
62
+ stop: () => { },
63
+ text: ''
64
+ };
65
+ }
66
+ return ora(text);
67
+ }
68
+ table(data) {
69
+ if (this.silent || this.logLevel < LogLevel.INFO) {
70
+ return;
71
+ }
72
+ logger.log(JSON.stringify(data, null, 2));
73
+ }
74
+ json(data, pretty = true) {
75
+ if (this.silent || this.logLevel < LogLevel.INFO) {
76
+ return;
77
+ }
78
+ const output = pretty ? JSON.stringify(data, null, 2) : JSON.stringify(data);
79
+ logger.log(output);
80
+ }
81
+ setLogLevel(level) {
82
+ this.logLevel = level;
83
+ }
84
+ setSilent(silent) {
85
+ this.silent = silent;
86
+ }
87
+ }
88
+ //# sourceMappingURL=console-ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console-ui.js","sourceRoot":"","sources":["../../src/ui/console-ui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Prompt } from '../types/prompt.js';
2
+ export declare class InteractiveSearch {
3
+ private searchEngine;
4
+ constructor();
5
+ selectPrompt(prompts: Prompt[]): Promise<Prompt>;
6
+ private formatPromptDisplay;
7
+ }
8
+ //# sourceMappingURL=interactive-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive-search.d.ts","sourceRoot":"","sources":["../../src/ui/interactive-search.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,YAAY,CAAe;;IAM7B,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBtD,OAAO,CAAC,mBAAmB;CAK5B"}
@@ -0,0 +1,29 @@
1
+ import { search } from '@inquirer/prompts';
2
+ import chalk from 'chalk';
3
+ import { SearchEngine } from '../search/search-engine.js';
4
+ export class InteractiveSearch {
5
+ searchEngine;
6
+ constructor() {
7
+ this.searchEngine = new SearchEngine([]);
8
+ }
9
+ async selectPrompt(prompts) {
10
+ this.searchEngine = new SearchEngine(prompts);
11
+ const selected = await search({
12
+ message: 'Search for a prompt:',
13
+ source: input => {
14
+ const results = input ? this.searchEngine.search(input) : prompts;
15
+ return results.map(prompt => ({
16
+ name: this.formatPromptDisplay(prompt),
17
+ value: prompt,
18
+ description: prompt.relativePath,
19
+ }));
20
+ },
21
+ });
22
+ return selected;
23
+ }
24
+ formatPromptDisplay(prompt) {
25
+ const tags = prompt.tags.length > 0 ? chalk.dim(` [${prompt.tags.join(', ')}]`) : '';
26
+ return `${chalk.bold(prompt.title)}${tags}`;
27
+ }
28
+ }
29
+ //# sourceMappingURL=interactive-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive-search.js","sourceRoot":"","sources":["../../src/ui/interactive-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D,MAAM,OAAO,iBAAiB;IACpB,YAAY,CAAe;IAEnC;QACE,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAiB;QAClC,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;QAE9C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAS;YACpC,OAAO,EAAE,sBAAsB;YAC/B,MAAM,EAAE,KAAK,CAAC,EAAE;gBACd,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;gBAElE,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBAC5B,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;oBACtC,KAAK,EAAE,MAAM;oBACb,WAAW,EAAE,MAAM,CAAC,YAAY;iBACjC,CAAC,CAAC,CAAC;YACN,CAAC;SACF,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,mBAAmB,CAAC,MAAc;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAErF,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC;IAC9C,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ interface AnnotationMigrationResult {
2
+ migrated: number;
3
+ skipped: number;
4
+ failed: number;
5
+ errors: string[];
6
+ }
7
+ /**
8
+ * Migrate all markdown annotation files to JSON format in a directory
9
+ */
10
+ export declare function migrateAnnotationsToJson(annotationDir: string): Promise<AnnotationMigrationResult>;
11
+ export {};
12
+ //# sourceMappingURL=annotation-migration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annotation-migration.d.ts","sourceRoot":"","sources":["../../src/utils/annotation-migration.ts"],"names":[],"mappings":"AAQA,UAAU,yBAAyB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AA2BD;;GAEG;AACH,wBAAsB,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAwExG"}
@@ -0,0 +1,88 @@
1
+ import path from 'node:path';
2
+ import fs from 'fs-extra';
3
+ import yaml from 'js-yaml';
4
+ import { logger } from './logger.js';
5
+ /**
6
+ * Parse a markdown annotation file and extract all data
7
+ */
8
+ async function parseMarkdownAnnotation(filePath) {
9
+ const content = await fs.readFile(filePath, 'utf-8');
10
+ // Extract YAML frontmatter
11
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---\n/);
12
+ if (!frontmatterMatch) {
13
+ throw new Error('No frontmatter found in annotation file');
14
+ }
15
+ const yamlContent = frontmatterMatch[1];
16
+ const metadata = yaml.load(yamlContent);
17
+ // Extract notes section
18
+ const notesMatch = content.match(/## Notes\n\n([\s\S]*?)$/);
19
+ const notes = notesMatch ? notesMatch[1].trim() : '';
20
+ return {
21
+ ...metadata,
22
+ notes
23
+ };
24
+ }
25
+ /**
26
+ * Migrate all markdown annotation files to JSON format in a directory
27
+ */
28
+ export async function migrateAnnotationsToJson(annotationDir) {
29
+ const result = {
30
+ migrated: 0,
31
+ skipped: 0,
32
+ failed: 0,
33
+ errors: []
34
+ };
35
+ try {
36
+ // Ensure directory exists
37
+ if (!await fs.pathExists(annotationDir)) {
38
+ logger.debug('Annotation directory does not exist, nothing to migrate');
39
+ return result;
40
+ }
41
+ // Read all files in annotation directory
42
+ const files = await fs.readdir(annotationDir);
43
+ // Filter for markdown annotation files
44
+ const mdAnnotationFiles = files.filter(file => file.includes('-annotation-') && file.endsWith('.md'));
45
+ if (mdAnnotationFiles.length === 0) {
46
+ logger.debug('No markdown annotation files found to migrate');
47
+ return result;
48
+ }
49
+ logger.debug(`Found ${mdAnnotationFiles.length} markdown annotation files to migrate`);
50
+ // Process each file
51
+ for (const mdFile of mdAnnotationFiles) {
52
+ const mdPath = path.join(annotationDir, mdFile);
53
+ const jsonFile = mdFile.replace(/\.md$/, '.json');
54
+ const jsonPath = path.join(annotationDir, jsonFile);
55
+ try {
56
+ // Skip if JSON already exists
57
+ if (await fs.pathExists(jsonPath)) {
58
+ logger.debug(`Skipping ${mdFile} - JSON version already exists`);
59
+ result.skipped++;
60
+ continue;
61
+ }
62
+ // Parse markdown and convert to JSON
63
+ const annotationData = await parseMarkdownAnnotation(mdPath);
64
+ // Write JSON file
65
+ await fs.writeJson(jsonPath, annotationData, { spaces: 2 });
66
+ // Remove old markdown file
67
+ await fs.remove(mdPath);
68
+ result.migrated++;
69
+ logger.debug(`Migrated ${mdFile} to ${jsonFile}`);
70
+ }
71
+ catch (error) {
72
+ result.failed++;
73
+ const errorMsg = `Failed to migrate ${mdFile}: ${error instanceof Error ? error.message : 'unknown error'}`;
74
+ result.errors.push(errorMsg);
75
+ logger.error(errorMsg);
76
+ }
77
+ }
78
+ if (result.migrated > 0) {
79
+ logger.log(`Migrated ${result.migrated} annotation files from markdown to JSON format`);
80
+ }
81
+ return result;
82
+ }
83
+ catch (error) {
84
+ logger.error('Annotation migration failed:', error);
85
+ throw error;
86
+ }
87
+ }
88
+ //# sourceMappingURL=annotation-migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annotation-migration.js","sourceRoot":"","sources":["../../src/utils/annotation-migration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare const DateFormats: {
2
+ YYYYMMDD: (date: Date) => string;
3
+ UTC_DATETIME: (date: Date) => string;
4
+ LOCAL_DATE: (date: Date) => string;
5
+ LOCAL_TIME: (date: Date) => string;
6
+ LOCAL_DATETIME: (date: Date) => string;
7
+ RELATIVE: (date: Date) => string;
8
+ };
9
+ export declare function formatDate(date: Date, format: keyof typeof DateFormats): string;
10
+ //# sourceMappingURL=date-formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-formatter.d.ts","sourceRoot":"","sources":["../../src/utils/date-formatter.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW;qBACL,IAAI,KAAG,MAAM;yBAOT,IAAI,KAAG,MAAM;uBAIf,IAAI,KAAG,MAAM;uBAIb,IAAI,KAAG,MAAM;2BAIT,IAAI,KAAG,MAAM;qBAInB,IAAI,KAAG,MAAM;CAa/B,CAAC;AAEF,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,OAAO,WAAW,GAAG,MAAM,CAM/E"}
@@ -0,0 +1,46 @@
1
+ export const DateFormats = {
2
+ YYYYMMDD: (date) => {
3
+ const year = date.getFullYear();
4
+ const month = String(date.getMonth() + 1).padStart(2, '0');
5
+ const day = String(date.getDate()).padStart(2, '0');
6
+ return `${year}${month}${day}`;
7
+ },
8
+ UTC_DATETIME: (date) => {
9
+ return date.toISOString();
10
+ },
11
+ LOCAL_DATE: (date) => {
12
+ return date.toLocaleDateString();
13
+ },
14
+ LOCAL_TIME: (date) => {
15
+ return date.toLocaleTimeString();
16
+ },
17
+ LOCAL_DATETIME: (date) => {
18
+ return `${date.toLocaleDateString()} ${date.toLocaleTimeString()}`;
19
+ },
20
+ RELATIVE: (date) => {
21
+ const now = new Date();
22
+ const diff = now.getTime() - date.getTime();
23
+ const seconds = Math.floor(diff / 1000);
24
+ const minutes = Math.floor(seconds / 60);
25
+ const hours = Math.floor(minutes / 60);
26
+ const days = Math.floor(hours / 24);
27
+ if (days > 0) {
28
+ return `${days} day${days > 1 ? 's' : ''} ago`;
29
+ }
30
+ if (hours > 0) {
31
+ return `${hours} hour${hours > 1 ? 's' : ''} ago`;
32
+ }
33
+ if (minutes > 0) {
34
+ return `${minutes} minute${minutes > 1 ? 's' : ''} ago`;
35
+ }
36
+ return 'just now';
37
+ }
38
+ };
39
+ export function formatDate(date, format) {
40
+ const formatter = DateFormats[format];
41
+ if (!formatter) {
42
+ throw new Error(`Unknown date format: ${format}`);
43
+ }
44
+ return formatter(date);
45
+ }
46
+ //# sourceMappingURL=date-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-formatter.js","sourceRoot":"","sources":["../../src/utils/date-formatter.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,QAAQ,EAAE,CAAC,IAAU,EAAU,EAAE;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACpD,OAAO,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,EAAE,CAAC;IACjC,CAAC;IAED,YAAY,EAAE,CAAC,IAAU,EAAU,EAAE;QACnC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IAED,UAAU,EAAE,CAAC,IAAU,EAAU,EAAE;QACjC,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC;IACnC,CAAC;IAED,UAAU,EAAE,CAAC,IAAU,EAAU,EAAE;QACjC,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC;IACnC,CAAC;IAED,cAAc,EAAE,CAAC,IAAU,EAAU,EAAE;QACrC,OAAO,GAAG,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;IACrE,CAAC;IAED,QAAQ,EAAE,CAAC,IAAU,EAAU,EAAE;QAC/B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;QAEpC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YAAA,OAAO,GAAG,IAAI,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;QAAA,CAAC;QAC/D,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YAAA,OAAO,GAAG,KAAK,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;QAAA,CAAC;QACnE,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAAA,OAAO,GAAG,OAAO,UAAU,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;QAAA,CAAC;QAC3E,OAAO,UAAU,CAAC;IACpB,CAAC;CACF,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,IAAU,EAAE,MAAgC;IACrE,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC"}
@@ -0,0 +1,14 @@
1
+ interface EditorLauncher {
2
+ findEditor(): Promise<string | null>;
3
+ isEditorAvailable(editor: string): Promise<boolean>;
4
+ openInEditor(editor: string, filepath: string): Promise<void>;
5
+ }
6
+ export declare class DefaultEditorLauncher implements EditorLauncher {
7
+ private static readonly COMMON_EDITORS;
8
+ findEditor(): Promise<string | null>;
9
+ isEditorAvailable(editor: string): Promise<boolean>;
10
+ openInEditor(editor: string, filepath: string): Promise<void>;
11
+ }
12
+ export declare const editorLauncher: DefaultEditorLauncher;
13
+ export {};
14
+ //# sourceMappingURL=editor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../src/utils/editor.ts"],"names":[],"mappings":"AAKA,UAAU,cAAc;IACpB,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACrC,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpD,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE;AAED,qBAAa,qBAAsB,YAAW,cAAc;IACxD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAwE;IAExG,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAiBpC,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAanD,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAgBtE;AAED,eAAO,MAAM,cAAc,uBAA8B,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { execFile, spawn } from "node:child_process";
2
+ import { promisify } from "node:util";
3
+ const execFileAsync = promisify(execFile);
4
+ export class DefaultEditorLauncher {
5
+ static COMMON_EDITORS = ["code", "vim", "nano", "emacs", "subl", "atom", "gedit", "notepad"];
6
+ async findEditor() {
7
+ // Check environment variables first
8
+ const envEditor = process.env.VISUAL || process.env.EDITOR;
9
+ if (envEditor && (await this.isEditorAvailable(envEditor))) {
10
+ return envEditor;
11
+ }
12
+ // Try common editors
13
+ for (const editor of DefaultEditorLauncher.COMMON_EDITORS) {
14
+ if (await this.isEditorAvailable(editor)) {
15
+ return editor;
16
+ }
17
+ }
18
+ return null;
19
+ }
20
+ async isEditorAvailable(editor) {
21
+ try {
22
+ if (process.platform === "win32") {
23
+ await execFileAsync("where", [editor]);
24
+ }
25
+ else {
26
+ await execFileAsync("which", [editor]);
27
+ }
28
+ return true;
29
+ }
30
+ catch {
31
+ return false;
32
+ }
33
+ }
34
+ async openInEditor(editor, filepath) {
35
+ return new Promise((resolve, reject) => {
36
+ const child = spawn(editor, [filepath], {
37
+ stdio: "inherit",
38
+ });
39
+ child.on("error", reject);
40
+ child.on("exit", (code) => {
41
+ if (code === 0) {
42
+ resolve();
43
+ }
44
+ else {
45
+ reject(new Error(`Editor exited with code ${code}`));
46
+ }
47
+ });
48
+ });
49
+ }
50
+ }
51
+ export const editorLauncher = new DefaultEditorLauncher();
52
+ //# sourceMappingURL=editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor.js","sourceRoot":"","sources":["../../src/utils/editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAC,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAQ1C,MAAM,OAAO,qBAAqB;IACtB,MAAM,CAAU,cAAc,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAE9G,KAAK,CAAC,UAAU;QACZ,oCAAoC;QACpC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QAC3D,IAAI,SAAS,IAAI,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YACzD,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,qBAAqB;QACrB,KAAK,MAAM,MAAM,IAAI,qBAAqB,CAAC,cAAc,EAAE,CAAC;YACxD,IAAI,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvC,OAAO,MAAM,CAAC;YAClB,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,MAAc;QAClC,IAAI,CAAC;YACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAC/B,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACJ,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc,EAAE,QAAgB;QAC/C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE;gBACpC,KAAK,EAAE,SAAS;aACnB,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC1B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBACtB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACb,OAAO,EAAE,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC,CAAC;gBACzD,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;;AAGL,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,qBAAqB,EAAE,CAAC"}
@@ -0,0 +1,58 @@
1
+ export declare enum ErrorCategory {
2
+ USER_ERROR = "USER_ERROR",
3
+ CONFIG_ERROR = "CONFIG_ERROR",
4
+ FILE_SYSTEM_ERROR = "FILE_SYSTEM_ERROR",
5
+ NETWORK_ERROR = "NETWORK_ERROR",
6
+ EXTERNAL_TOOL_ERROR = "EXTERNAL_TOOL_ERROR",
7
+ SYSTEM_ERROR = "SYSTEM_ERROR",
8
+ UNKNOWN = "UNKNOWN"
9
+ }
10
+ export declare enum ErrorSeverity {
11
+ WARNING = "WARNING",
12
+ ERROR = "ERROR",
13
+ FATAL = "FATAL"
14
+ }
15
+ interface ErrorSuggestion {
16
+ text: string;
17
+ command?: string;
18
+ }
19
+ export declare class PromptToolError extends Error {
20
+ code: string;
21
+ category: ErrorCategory;
22
+ severity: ErrorSeverity;
23
+ suggestions: ErrorSuggestion[];
24
+ icon: string;
25
+ constructor(message: string, code: string, category?: ErrorCategory, severity?: ErrorSeverity, suggestions?: ErrorSuggestion[], icon?: string);
26
+ }
27
+ interface ErrorOptions {
28
+ message: string;
29
+ code: string;
30
+ category?: ErrorCategory;
31
+ severity?: ErrorSeverity;
32
+ suggestions?: ErrorSuggestion[];
33
+ icon?: string;
34
+ }
35
+ export declare function createError(options: ErrorOptions): PromptToolError;
36
+ export declare function isRecoverableError(error: unknown): boolean;
37
+ export declare function getErrorCategory(error: unknown): ErrorCategory;
38
+ export declare function displayError(error: PromptToolError | Error): void;
39
+ export declare const errors: {
40
+ fileNotFound: (path: string) => PromptToolError;
41
+ permissionDenied: (path: string) => PromptToolError;
42
+ noPromptsFound: (dirs: string[]) => PromptToolError;
43
+ validationError: (field: string, format: string, example: string) => PromptToolError;
44
+ templateError: (template: string, details: string) => PromptToolError;
45
+ configMissing: () => PromptToolError;
46
+ invalidConfig: (field: string, expected: string, actual: unknown) => PromptToolError;
47
+ featureNotEnabled: (feature: string, benefits: string[]) => PromptToolError;
48
+ toolNotFound: (tool: string, suggestions?: string[]) => PromptToolError;
49
+ noEditor: () => PromptToolError;
50
+ gitError: (details: string) => PromptToolError;
51
+ gitNotInstalled: () => PromptToolError;
52
+ networkError: (url: string, details: string) => PromptToolError;
53
+ historyNotFound: (index: number, total: number) => PromptToolError;
54
+ promptNotFound: (name: string) => PromptToolError;
55
+ commandNotFound: (command: string, suggestions?: string[], availableCommands?: string[]) => PromptToolError;
56
+ };
57
+ export {};
58
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAIA,oBAAY,aAAa;IACvB,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,iBAAiB,sBAAsB;IACvC,aAAa,kBAAkB;IAC/B,mBAAmB,wBAAwB;IAC3C,YAAY,iBAAiB;IAC7B,OAAO,YAAY;CACpB;AAED,oBAAY,aAAa;IACvB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,KAAK,UAAU;CAChB;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,eAAgB,SAAQ,KAAK;IAG/B,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,aAAa;IACvB,QAAQ,EAAE,aAAa;IACvB,WAAW,EAAE,eAAe,EAAE;IAC9B,IAAI,EAAE,MAAM;gBALnB,OAAO,EAAE,MAAM,EACR,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,aAAqC,EAC/C,QAAQ,GAAE,aAAmC,EAC7C,WAAW,GAAE,eAAe,EAAO,EACnC,IAAI,GAAE,MAAY;CAK5B;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,eAAe,CASlE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAiB1D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAK9D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,eAAe,GAAG,KAAK,GAAG,IAAI,CAgCjE;AAGD,eAAO,MAAM,MAAM;yBAEI,MAAM;6BAYF,MAAM;2BAaR,MAAM,EAAE;6BAWN,MAAM,UAAU,MAAM,WAAW,MAAM;8BAYtC,MAAM,WAAW,MAAM;;2BAuB1B,MAAM,YAAY,MAAM,UAAU,OAAO;iCAWnC,MAAM,YAAY,MAAM,EAAE;yBAalC,MAAM,gBAAe,MAAM,EAAE;;wBAwB9B,MAAM;;wBA0BN,MAAM,WAAW,MAAM;6BAclB,MAAM,SAAS,MAAM;2BAavB,MAAM;+BAYF,MAAM,gBAAe,MAAM,EAAE,sBAA0B,MAAM,EAAE;CAW3F,CAAC"}