@wundr.io/cli 1.0.1 → 1.0.3

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 (249) hide show
  1. package/dist/ai/ai-service.d.ts +152 -0
  2. package/dist/ai/ai-service.d.ts.map +1 -0
  3. package/dist/ai/ai-service.js +430 -0
  4. package/dist/ai/ai-service.js.map +1 -0
  5. package/dist/ai/claude-client.d.ts +130 -0
  6. package/dist/ai/claude-client.d.ts.map +1 -0
  7. package/dist/ai/claude-client.js +340 -0
  8. package/dist/ai/claude-client.js.map +1 -0
  9. package/dist/ai/conversation-manager.d.ts +164 -0
  10. package/dist/ai/conversation-manager.d.ts.map +1 -0
  11. package/dist/ai/conversation-manager.js +614 -0
  12. package/dist/ai/conversation-manager.js.map +1 -0
  13. package/dist/ai/index.d.ts +5 -0
  14. package/dist/ai/index.d.ts.map +1 -0
  15. package/dist/ai/index.js +8 -0
  16. package/dist/ai/index.js.map +1 -0
  17. package/dist/cli.d.ts +36 -0
  18. package/dist/cli.d.ts.map +1 -0
  19. package/dist/cli.js +192 -0
  20. package/dist/cli.js.map +1 -0
  21. package/dist/commands/ai.d.ts +89 -0
  22. package/dist/commands/ai.d.ts.map +1 -0
  23. package/dist/commands/ai.js +735 -0
  24. package/dist/commands/ai.js.map +1 -0
  25. package/dist/commands/alignment.d.ts +78 -0
  26. package/dist/commands/alignment.d.ts.map +1 -0
  27. package/dist/commands/alignment.js +817 -0
  28. package/dist/commands/alignment.js.map +1 -0
  29. package/dist/commands/analyze-optimized.d.ts +14 -0
  30. package/dist/commands/analyze-optimized.d.ts.map +1 -0
  31. package/dist/commands/analyze-optimized.js +440 -0
  32. package/dist/commands/analyze-optimized.js.map +1 -0
  33. package/dist/commands/analyze.d.ts +65 -0
  34. package/dist/commands/analyze.d.ts.map +1 -0
  35. package/dist/commands/analyze.js +435 -0
  36. package/dist/commands/analyze.js.map +1 -0
  37. package/dist/commands/batch.d.ts +71 -0
  38. package/dist/commands/batch.d.ts.map +1 -0
  39. package/dist/commands/batch.js +738 -0
  40. package/dist/commands/batch.js.map +1 -0
  41. package/dist/commands/chat.d.ts +71 -0
  42. package/dist/commands/chat.d.ts.map +1 -0
  43. package/dist/commands/chat.js +674 -0
  44. package/dist/commands/chat.js.map +1 -0
  45. package/dist/commands/claude-init.d.ts +28 -0
  46. package/dist/commands/claude-init.d.ts.map +1 -0
  47. package/dist/commands/claude-init.js +591 -0
  48. package/dist/commands/claude-init.js.map +1 -0
  49. package/dist/commands/claude-setup.d.ts +119 -0
  50. package/dist/commands/claude-setup.d.ts.map +1 -0
  51. package/dist/commands/claude-setup.js +1073 -0
  52. package/dist/commands/claude-setup.js.map +1 -0
  53. package/dist/commands/computer-setup-commands.d.ts +53 -0
  54. package/dist/commands/computer-setup-commands.d.ts.map +1 -0
  55. package/dist/commands/computer-setup-commands.js +705 -0
  56. package/dist/commands/computer-setup-commands.js.map +1 -0
  57. package/dist/commands/computer-setup.d.ts +7 -0
  58. package/dist/commands/computer-setup.d.ts.map +1 -0
  59. package/dist/commands/computer-setup.js +849 -0
  60. package/dist/commands/computer-setup.js.map +1 -0
  61. package/dist/commands/create-command.d.ts +7 -0
  62. package/dist/commands/create-command.d.ts.map +1 -0
  63. package/dist/commands/create-command.js +158 -0
  64. package/dist/commands/create-command.js.map +1 -0
  65. package/dist/commands/create.d.ts +74 -0
  66. package/dist/commands/create.d.ts.map +1 -0
  67. package/dist/commands/create.js +556 -0
  68. package/dist/commands/create.js.map +1 -0
  69. package/dist/commands/dashboard.d.ts +91 -0
  70. package/dist/commands/dashboard.d.ts.map +1 -0
  71. package/dist/commands/dashboard.js +538 -0
  72. package/dist/commands/dashboard.js.map +1 -0
  73. package/dist/commands/govern.d.ts +70 -0
  74. package/dist/commands/govern.d.ts.map +1 -0
  75. package/dist/commands/govern.js +481 -0
  76. package/dist/commands/govern.js.map +1 -0
  77. package/dist/commands/governance.d.ts +17 -0
  78. package/dist/commands/governance.d.ts.map +1 -0
  79. package/dist/commands/governance.js +703 -0
  80. package/dist/commands/governance.js.map +1 -0
  81. package/dist/commands/guardian.d.ts +20 -0
  82. package/dist/commands/guardian.d.ts.map +1 -0
  83. package/dist/commands/guardian.js +597 -0
  84. package/dist/commands/guardian.js.map +1 -0
  85. package/dist/commands/init.d.ts +59 -0
  86. package/dist/commands/init.d.ts.map +1 -0
  87. package/dist/commands/init.js +650 -0
  88. package/dist/commands/init.js.map +1 -0
  89. package/dist/commands/performance-optimizer.d.ts +30 -0
  90. package/dist/commands/performance-optimizer.d.ts.map +1 -0
  91. package/dist/commands/performance-optimizer.js +650 -0
  92. package/dist/commands/performance-optimizer.js.map +1 -0
  93. package/dist/commands/plugins.d.ts +87 -0
  94. package/dist/commands/plugins.d.ts.map +1 -0
  95. package/dist/commands/plugins.js +685 -0
  96. package/dist/commands/plugins.js.map +1 -0
  97. package/dist/commands/rag.d.ts +7 -0
  98. package/dist/commands/rag.d.ts.map +1 -0
  99. package/dist/commands/rag.js +748 -0
  100. package/dist/commands/rag.js.map +1 -0
  101. package/dist/commands/session.d.ts +41 -0
  102. package/dist/commands/session.d.ts.map +1 -0
  103. package/dist/commands/session.js +441 -0
  104. package/dist/commands/session.js.map +1 -0
  105. package/dist/commands/setup.d.ts +29 -0
  106. package/dist/commands/setup.d.ts.map +1 -0
  107. package/dist/commands/setup.js +397 -0
  108. package/dist/commands/setup.js.map +1 -0
  109. package/dist/commands/test-init.d.ts +9 -0
  110. package/dist/commands/test-init.d.ts.map +1 -0
  111. package/dist/commands/test-init.js +222 -0
  112. package/dist/commands/test-init.js.map +1 -0
  113. package/dist/commands/test.d.ts +25 -0
  114. package/dist/commands/test.d.ts.map +1 -0
  115. package/dist/commands/test.js +217 -0
  116. package/dist/commands/test.js.map +1 -0
  117. package/dist/commands/vp.d.ts +7 -0
  118. package/dist/commands/vp.d.ts.map +1 -0
  119. package/dist/commands/vp.js +571 -0
  120. package/dist/commands/vp.js.map +1 -0
  121. package/dist/commands/watch.d.ts +76 -0
  122. package/dist/commands/watch.d.ts.map +1 -0
  123. package/dist/commands/watch.js +613 -0
  124. package/dist/commands/watch.js.map +1 -0
  125. package/dist/commands/worktree.d.ts +63 -0
  126. package/dist/commands/worktree.d.ts.map +1 -0
  127. package/dist/commands/worktree.js +774 -0
  128. package/dist/commands/worktree.js.map +1 -0
  129. package/dist/context/context-manager.d.ts +155 -0
  130. package/dist/context/context-manager.d.ts.map +1 -0
  131. package/dist/context/context-manager.js +383 -0
  132. package/dist/context/context-manager.js.map +1 -0
  133. package/dist/context/index.d.ts +3 -0
  134. package/dist/context/index.d.ts.map +1 -0
  135. package/dist/context/index.js +6 -0
  136. package/dist/context/index.js.map +1 -0
  137. package/dist/context/session-manager.d.ts +207 -0
  138. package/dist/context/session-manager.d.ts.map +1 -0
  139. package/dist/context/session-manager.js +686 -0
  140. package/dist/context/session-manager.js.map +1 -0
  141. package/dist/index.d.ts +8 -0
  142. package/dist/index.d.ts.map +1 -0
  143. package/dist/index.js +51 -0
  144. package/dist/index.js.map +1 -0
  145. package/dist/interactive/interactive-mode.d.ts +76 -0
  146. package/dist/interactive/interactive-mode.d.ts.map +1 -0
  147. package/dist/interactive/interactive-mode.js +732 -0
  148. package/dist/interactive/interactive-mode.js.map +1 -0
  149. package/dist/nlp/command-mapper.d.ts +174 -0
  150. package/dist/nlp/command-mapper.d.ts.map +1 -0
  151. package/dist/nlp/command-mapper.js +624 -0
  152. package/dist/nlp/command-mapper.js.map +1 -0
  153. package/dist/nlp/command-parser.d.ts +106 -0
  154. package/dist/nlp/command-parser.d.ts.map +1 -0
  155. package/dist/nlp/command-parser.js +417 -0
  156. package/dist/nlp/command-parser.js.map +1 -0
  157. package/dist/nlp/index.d.ts +5 -0
  158. package/dist/nlp/index.d.ts.map +1 -0
  159. package/dist/nlp/index.js +8 -0
  160. package/dist/nlp/index.js.map +1 -0
  161. package/dist/nlp/intent-classifier.d.ts +59 -0
  162. package/dist/nlp/intent-classifier.d.ts.map +1 -0
  163. package/dist/nlp/intent-classifier.js +384 -0
  164. package/dist/nlp/intent-classifier.js.map +1 -0
  165. package/dist/nlp/intent-parser.d.ts +152 -0
  166. package/dist/nlp/intent-parser.d.ts.map +1 -0
  167. package/dist/nlp/intent-parser.js +744 -0
  168. package/dist/nlp/intent-parser.js.map +1 -0
  169. package/dist/plugins/plugin-manager.d.ts +120 -0
  170. package/dist/plugins/plugin-manager.d.ts.map +1 -0
  171. package/dist/plugins/plugin-manager.js +595 -0
  172. package/dist/plugins/plugin-manager.js.map +1 -0
  173. package/dist/types/index.d.ts +224 -0
  174. package/dist/types/index.d.ts.map +1 -0
  175. package/dist/types/index.js +3 -0
  176. package/dist/types/index.js.map +1 -0
  177. package/dist/utils/backup-rollback-manager.d.ts +72 -0
  178. package/dist/utils/backup-rollback-manager.d.ts.map +1 -0
  179. package/dist/utils/backup-rollback-manager.js +289 -0
  180. package/dist/utils/backup-rollback-manager.js.map +1 -0
  181. package/dist/utils/claude-config-installer.d.ts +94 -0
  182. package/dist/utils/claude-config-installer.d.ts.map +1 -0
  183. package/dist/utils/claude-config-installer.js +628 -0
  184. package/dist/utils/claude-config-installer.js.map +1 -0
  185. package/dist/utils/config-manager.d.ts +73 -0
  186. package/dist/utils/config-manager.d.ts.map +1 -0
  187. package/dist/utils/config-manager.js +339 -0
  188. package/dist/utils/config-manager.js.map +1 -0
  189. package/dist/utils/error-handler.d.ts +46 -0
  190. package/dist/utils/error-handler.d.ts.map +1 -0
  191. package/dist/utils/error-handler.js +169 -0
  192. package/dist/utils/error-handler.js.map +1 -0
  193. package/dist/utils/logger.d.ts +25 -0
  194. package/dist/utils/logger.d.ts.map +1 -0
  195. package/dist/utils/logger.js +105 -0
  196. package/dist/utils/logger.js.map +1 -0
  197. package/package.json +23 -4
  198. package/src/ai/ai-service.ts +22 -19
  199. package/src/ai/claude-client.ts +20 -16
  200. package/src/ai/conversation-manager.ts +37 -30
  201. package/src/cli.ts +42 -13
  202. package/src/commands/ai.ts +59 -57
  203. package/src/commands/alignment.ts +1212 -0
  204. package/src/commands/analyze-optimized.ts +70 -62
  205. package/src/commands/analyze.ts +22 -20
  206. package/src/commands/batch.ts +41 -38
  207. package/src/commands/chat.ts +37 -34
  208. package/src/commands/claude-init.ts +38 -30
  209. package/src/commands/claude-setup.ts +692 -97
  210. package/src/commands/computer-setup-commands.ts +45 -39
  211. package/src/commands/computer-setup.ts +474 -4
  212. package/src/commands/create-command.ts +7 -7
  213. package/src/commands/create.ts +36 -33
  214. package/src/commands/dashboard.ts +33 -28
  215. package/src/commands/govern.ts +34 -29
  216. package/src/commands/governance.ts +1005 -0
  217. package/src/commands/guardian.ts +887 -0
  218. package/src/commands/init.ts +112 -22
  219. package/src/commands/performance-optimizer.ts +48 -42
  220. package/src/commands/plugins.ts +35 -32
  221. package/src/commands/project-update.ts +1053 -0
  222. package/src/commands/rag.ts +904 -0
  223. package/src/commands/session.ts +631 -0
  224. package/src/commands/setup.ts +35 -31
  225. package/src/commands/test-init.ts +6 -5
  226. package/src/commands/test.ts +7 -6
  227. package/src/commands/vp.ts +762 -0
  228. package/src/commands/watch.ts +44 -33
  229. package/src/commands/worktree.ts +1057 -0
  230. package/src/context/context-manager.ts +15 -12
  231. package/src/context/session-manager.ts +51 -40
  232. package/src/index.ts +7 -6
  233. package/src/interactive/interactive-mode.ts +25 -18
  234. package/src/lib/conflict-resolution.ts +28 -0
  235. package/src/lib/merge-strategy.ts +28 -0
  236. package/src/lib/safety-mechanisms.ts +47 -0
  237. package/src/lib/state-detection.ts +28 -0
  238. package/src/nlp/command-mapper.ts +35 -30
  239. package/src/nlp/command-parser.ts +20 -17
  240. package/src/nlp/intent-classifier.ts +7 -7
  241. package/src/nlp/intent-parser.ts +61 -49
  242. package/src/plugins/plugin-manager.ts +27 -23
  243. package/src/types/index.ts +1 -1
  244. package/src/types/modules.d.ts +1 -0
  245. package/src/utils/backup-rollback-manager.ts +13 -11
  246. package/src/utils/claude-config-installer.ts +18 -16
  247. package/src/utils/config-manager.ts +12 -9
  248. package/src/utils/error-handler.ts +5 -3
  249. package/src/utils/logger.ts +35 -12
@@ -0,0 +1,73 @@
1
+ import type { WundrConfig } from '../types';
2
+ /**
3
+ * Configuration management system
4
+ */
5
+ export declare class ConfigManager {
6
+ private config;
7
+ private configPath;
8
+ private userConfigDir;
9
+ constructor();
10
+ /**
11
+ * Load configuration from file or create default
12
+ */
13
+ loadConfig(customPath?: string): Promise<WundrConfig>;
14
+ /**
15
+ * Save current configuration to file
16
+ */
17
+ saveConfig(customPath?: string): Promise<void>;
18
+ /**
19
+ * Get current configuration
20
+ */
21
+ getConfig(): WundrConfig;
22
+ /**
23
+ * Update configuration values
24
+ */
25
+ updateConfig(updates: Partial<WundrConfig>): void;
26
+ /**
27
+ * Validate configuration against schema
28
+ */
29
+ validateConfig(config?: any): {
30
+ valid: boolean;
31
+ errors: string[];
32
+ };
33
+ /**
34
+ * Get configuration value by path
35
+ */
36
+ get<T>(path: string, defaultValue?: T): T | undefined;
37
+ /**
38
+ * Set configuration value by path
39
+ */
40
+ set(path: string, value: any): void;
41
+ /**
42
+ * Create default configuration
43
+ */
44
+ private createDefaultConfig;
45
+ /**
46
+ * Merge environment variables into configuration
47
+ */
48
+ private mergeEnvironmentVariables;
49
+ /**
50
+ * Get API key for AI provider with fallback mechanisms
51
+ */
52
+ getAIApiKey(provider?: string): string | undefined;
53
+ /**
54
+ * Set API key securely in config
55
+ */
56
+ setAIApiKey(apiKey: string, provider?: string): Promise<void>;
57
+ /**
58
+ * Check if AI is properly configured
59
+ */
60
+ isAIConfigured(): boolean;
61
+ /**
62
+ * Get config file paths
63
+ */
64
+ getConfigPaths(): {
65
+ user: string;
66
+ project: string;
67
+ };
68
+ /**
69
+ * Merge project config with user config
70
+ */
71
+ loadProjectConfig(): Promise<WundrConfig>;
72
+ }
73
+ //# sourceMappingURL=config-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../src/utils/config-manager.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAqD5C;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAS;;IAO9B;;OAEG;IACG,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAiC3D;;OAEG;IACG,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBpD;;OAEG;IACH,SAAS,IAAI,WAAW;IAOxB;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI;IAQjD;;OAEG;IACH,cAAc,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IAmBlE;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAmBrD;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAgCnC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAsB3B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAwCjC;;OAEG;IACH,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAmBlD;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAanE;;OAEG;IACH,cAAc,IAAI,OAAO;IAOzB;;OAEG;IACH,cAAc,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAOnD;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC;CA4BhD"}
@@ -0,0 +1,339 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConfigManager = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const os_1 = tslib_1.__importDefault(require("os"));
6
+ const path_1 = tslib_1.__importDefault(require("path"));
7
+ const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
8
+ const zod_1 = require("zod");
9
+ const error_handler_1 = require("./error-handler");
10
+ const logger_1 = require("./logger");
11
+ // Zod schema for configuration validation
12
+ const WundrConfigSchema = zod_1.z.object({
13
+ version: zod_1.z.string(),
14
+ defaultMode: zod_1.z.enum(['cli', 'interactive', 'chat', 'tui']).default('cli'),
15
+ plugins: zod_1.z.array(zod_1.z.string()).default([]),
16
+ integrations: zod_1.z
17
+ .object({
18
+ github: zod_1.z
19
+ .object({
20
+ token: zod_1.z.string(),
21
+ owner: zod_1.z.string(),
22
+ repo: zod_1.z.string(),
23
+ webhooks: zod_1.z.boolean().optional(),
24
+ })
25
+ .optional(),
26
+ slack: zod_1.z
27
+ .object({
28
+ token: zod_1.z.string(),
29
+ channel: zod_1.z.string(),
30
+ webhooks: zod_1.z.boolean().optional(),
31
+ })
32
+ .optional(),
33
+ jira: zod_1.z
34
+ .object({
35
+ url: zod_1.z.string(),
36
+ email: zod_1.z.string(),
37
+ token: zod_1.z.string(),
38
+ })
39
+ .optional(),
40
+ })
41
+ .default({}),
42
+ ai: zod_1.z.object({
43
+ provider: zod_1.z.string().default('claude'),
44
+ model: zod_1.z.string().default('claude-3'),
45
+ apiKey: zod_1.z.string().optional(),
46
+ }),
47
+ analysis: zod_1.z.object({
48
+ patterns: zod_1.z
49
+ .array(zod_1.z.string())
50
+ .default(['**/*.ts', '**/*.js', '**/*.tsx', '**/*.jsx']),
51
+ excludes: zod_1.z
52
+ .array(zod_1.z.string())
53
+ .default(['**/node_modules/**', '**/dist/**', '**/build/**']),
54
+ maxDepth: zod_1.z.number().default(10),
55
+ }),
56
+ governance: zod_1.z.object({
57
+ rules: zod_1.z.array(zod_1.z.string()).default([]),
58
+ severity: zod_1.z.enum(['error', 'warning', 'info']).default('warning'),
59
+ }),
60
+ });
61
+ /**
62
+ * Configuration management system
63
+ */
64
+ class ConfigManager {
65
+ config = null;
66
+ configPath;
67
+ userConfigDir;
68
+ constructor() {
69
+ this.userConfigDir = path_1.default.join(os_1.default.homedir(), '.wundr');
70
+ this.configPath = path_1.default.join(this.userConfigDir, 'config.json');
71
+ }
72
+ /**
73
+ * Load configuration from file or create default
74
+ */
75
+ async loadConfig(customPath) {
76
+ const configFile = customPath || this.configPath;
77
+ try {
78
+ // Ensure config directory exists
79
+ await fs_extra_1.default.ensureDir(path_1.default.dirname(configFile));
80
+ // Load existing config or create default
81
+ if (await fs_extra_1.default.pathExists(configFile)) {
82
+ const rawConfig = await fs_extra_1.default.readJson(configFile);
83
+ this.config = WundrConfigSchema.parse(rawConfig);
84
+ logger_1.logger.debug(`Loaded config from: ${configFile}`);
85
+ }
86
+ else {
87
+ this.config = this.createDefaultConfig();
88
+ await this.saveConfig();
89
+ logger_1.logger.info('Created default configuration');
90
+ }
91
+ // Merge with environment variables
92
+ this.config = this.mergeEnvironmentVariables(this.config);
93
+ return this.config;
94
+ }
95
+ catch (error) {
96
+ logger_1.logger.error('Failed to load configuration:', error);
97
+ throw error_handler_1.errorHandler.createError('WUNDR_CONFIG_INVALID', 'Failed to load or parse configuration file', { configPath: configFile }, true);
98
+ }
99
+ }
100
+ /**
101
+ * Save current configuration to file
102
+ */
103
+ async saveConfig(customPath) {
104
+ if (!this.config) {
105
+ throw new Error('No configuration to save');
106
+ }
107
+ const configFile = customPath || this.configPath;
108
+ try {
109
+ await fs_extra_1.default.ensureDir(path_1.default.dirname(configFile));
110
+ await fs_extra_1.default.writeJson(configFile, this.config, { spaces: 2 });
111
+ logger_1.logger.debug(`Saved config to: ${configFile}`);
112
+ }
113
+ catch (error) {
114
+ logger_1.logger.error('Failed to save configuration:', error);
115
+ throw error_handler_1.errorHandler.createError('WUNDR_CONFIG_INVALID', 'Failed to save configuration file', { configPath: configFile }, false);
116
+ }
117
+ }
118
+ /**
119
+ * Get current configuration
120
+ */
121
+ getConfig() {
122
+ if (!this.config) {
123
+ throw new Error('Configuration not loaded. Call loadConfig() first.');
124
+ }
125
+ return this.config;
126
+ }
127
+ /**
128
+ * Update configuration values
129
+ */
130
+ updateConfig(updates) {
131
+ if (!this.config) {
132
+ throw new Error('Configuration not loaded. Call loadConfig() first.');
133
+ }
134
+ this.config = { ...this.config, ...updates };
135
+ }
136
+ /**
137
+ * Validate configuration against schema
138
+ */
139
+ validateConfig(config) {
140
+ const configToValidate = config || this.config;
141
+ try {
142
+ WundrConfigSchema.parse(configToValidate);
143
+ return { valid: true, errors: [] };
144
+ }
145
+ catch (error) {
146
+ if (error instanceof zod_1.z.ZodError) {
147
+ return {
148
+ valid: false,
149
+ errors: error.issues.map(issue => `${issue.path.join('.')}: ${issue.message}`),
150
+ };
151
+ }
152
+ return { valid: false, errors: [error.message] };
153
+ }
154
+ }
155
+ /**
156
+ * Get configuration value by path
157
+ */
158
+ get(path, defaultValue) {
159
+ if (!this.config) {
160
+ return defaultValue;
161
+ }
162
+ const keys = path.split('.');
163
+ let value = this.config;
164
+ for (const key of keys) {
165
+ if (value && typeof value === 'object' && key in value) {
166
+ value = value[key];
167
+ }
168
+ else {
169
+ return defaultValue;
170
+ }
171
+ }
172
+ return value;
173
+ }
174
+ /**
175
+ * Set configuration value by path
176
+ */
177
+ set(path, value) {
178
+ if (!this.config) {
179
+ throw new Error('Configuration not loaded. Call loadConfig() first.');
180
+ }
181
+ const keys = path.split('.');
182
+ let current = this.config;
183
+ for (let i = 0; i < keys.length - 1; i++) {
184
+ const key = keys[i];
185
+ if (!key) {
186
+ throw new Error(`Invalid path: empty key at position ${i}`);
187
+ }
188
+ if (!current || typeof current !== 'object') {
189
+ throw new Error('Invalid path: cannot set property on non-object');
190
+ }
191
+ if (!current[key] || typeof current[key] !== 'object') {
192
+ current[key] = {};
193
+ }
194
+ current = current[key];
195
+ }
196
+ const finalKey = keys[keys.length - 1];
197
+ if (!finalKey) {
198
+ throw new Error('Invalid path: empty final key');
199
+ }
200
+ if (!finalKey || !current || typeof current !== 'object') {
201
+ throw new Error('Invalid path: cannot set property');
202
+ }
203
+ current[finalKey] = value;
204
+ }
205
+ /**
206
+ * Create default configuration
207
+ */
208
+ createDefaultConfig() {
209
+ return {
210
+ version: '1.0.0',
211
+ defaultMode: 'cli',
212
+ plugins: [],
213
+ integrations: {},
214
+ ai: {
215
+ provider: 'claude',
216
+ model: 'claude-3-opus-20240229',
217
+ },
218
+ analysis: {
219
+ patterns: ['**/*.ts', '**/*.js', '**/*.tsx', '**/*.jsx'],
220
+ excludes: ['**/node_modules/**', '**/dist/**', '**/build/**'],
221
+ maxDepth: 10,
222
+ },
223
+ governance: {
224
+ rules: [],
225
+ severity: 'warning',
226
+ },
227
+ };
228
+ }
229
+ /**
230
+ * Merge environment variables into configuration
231
+ */
232
+ mergeEnvironmentVariables(config) {
233
+ const envConfig = { ...config };
234
+ // AI API Key from environment
235
+ if (process.env['CLAUDE_API_KEY'] && !envConfig.ai.apiKey) {
236
+ envConfig.ai.apiKey = process.env['CLAUDE_API_KEY'];
237
+ }
238
+ if (process.env['OPENAI_API_KEY'] &&
239
+ envConfig.ai.provider === 'openai' &&
240
+ !envConfig.ai.apiKey) {
241
+ envConfig.ai.apiKey = process.env['OPENAI_API_KEY'];
242
+ }
243
+ // AI Provider and Model from environment
244
+ if (process.env['WUNDR_AI_PROVIDER']) {
245
+ envConfig.ai.provider = process.env['WUNDR_AI_PROVIDER'];
246
+ }
247
+ if (process.env['WUNDR_AI_MODEL']) {
248
+ envConfig.ai.model = process.env['WUNDR_AI_MODEL'];
249
+ }
250
+ // GitHub integration
251
+ if (process.env['GITHUB_TOKEN']) {
252
+ envConfig.integrations.github = envConfig.integrations.github || {
253
+ token: process.env['GITHUB_TOKEN'],
254
+ owner: process.env['GITHUB_OWNER'] || '',
255
+ repo: process.env['GITHUB_REPO'] || '',
256
+ };
257
+ if (!envConfig.integrations.github.token) {
258
+ envConfig.integrations.github.token = process.env['GITHUB_TOKEN'];
259
+ }
260
+ }
261
+ return envConfig;
262
+ }
263
+ /**
264
+ * Get API key for AI provider with fallback mechanisms
265
+ */
266
+ getAIApiKey(provider) {
267
+ const currentProvider = provider || this.config?.ai?.provider || 'claude';
268
+ // First check config
269
+ if (this.config?.ai?.apiKey) {
270
+ return this.config.ai.apiKey;
271
+ }
272
+ // Then check environment variables based on provider
273
+ switch (currentProvider.toLowerCase()) {
274
+ case 'claude':
275
+ return process.env['CLAUDE_API_KEY'];
276
+ case 'openai':
277
+ return process.env['OPENAI_API_KEY'];
278
+ default:
279
+ return process.env['CLAUDE_API_KEY']; // Default fallback
280
+ }
281
+ }
282
+ /**
283
+ * Set API key securely in config
284
+ */
285
+ async setAIApiKey(apiKey, provider) {
286
+ if (!this.config) {
287
+ await this.loadConfig();
288
+ }
289
+ if (provider && provider !== this.config.ai.provider) {
290
+ this.config.ai.provider = provider;
291
+ }
292
+ this.config.ai.apiKey = apiKey;
293
+ await this.saveConfig();
294
+ }
295
+ /**
296
+ * Check if AI is properly configured
297
+ */
298
+ isAIConfigured() {
299
+ const apiKey = this.getAIApiKey();
300
+ const provider = this.config?.ai?.provider;
301
+ return !!(apiKey && provider);
302
+ }
303
+ /**
304
+ * Get config file paths
305
+ */
306
+ getConfigPaths() {
307
+ return {
308
+ user: this.configPath,
309
+ project: path_1.default.join(process.cwd(), 'wundr.config.json'),
310
+ };
311
+ }
312
+ /**
313
+ * Merge project config with user config
314
+ */
315
+ async loadProjectConfig() {
316
+ const projectConfigPath = path_1.default.join(process.cwd(), 'wundr.config.json');
317
+ // Load user config first
318
+ await this.loadConfig();
319
+ // Merge with project config if it exists
320
+ if (await fs_extra_1.default.pathExists(projectConfigPath)) {
321
+ try {
322
+ const projectConfig = await fs_extra_1.default.readJson(projectConfigPath);
323
+ const validatedProjectConfig = WundrConfigSchema.partial().parse(projectConfig);
324
+ this.config = {
325
+ ...this.config,
326
+ ...validatedProjectConfig,
327
+ };
328
+ logger_1.logger.debug(`Merged project config from: ${projectConfigPath}`);
329
+ }
330
+ catch (error) {
331
+ const message = error instanceof Error ? error.message : 'Unknown error';
332
+ logger_1.logger.warn(`Failed to load project config: ${message}`);
333
+ }
334
+ }
335
+ return this.config;
336
+ }
337
+ }
338
+ exports.ConfigManager = ConfigManager;
339
+ //# sourceMappingURL=config-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../src/utils/config-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { WundrError } from '../types';
2
+ /**
3
+ * Centralized error handling system
4
+ */
5
+ declare class ErrorHandler {
6
+ private errorCodes;
7
+ /**
8
+ * Handle various types of errors with appropriate formatting
9
+ */
10
+ handle(error: Error | WundrError): void;
11
+ /**
12
+ * Check if error is a known Wundr error
13
+ */
14
+ private isKnownError;
15
+ /**
16
+ * Check if error is a system/Node.js error
17
+ */
18
+ private isSystemError;
19
+ /**
20
+ * Handle known Wundr errors
21
+ */
22
+ private handleKnownError;
23
+ /**
24
+ * Handle system errors
25
+ */
26
+ private handleSystemError;
27
+ /**
28
+ * Handle unknown errors
29
+ */
30
+ private handleUnknownError;
31
+ /**
32
+ * Suggest recovery actions based on error code
33
+ */
34
+ private suggestRecoveryActions;
35
+ /**
36
+ * Create a standardized Wundr error
37
+ */
38
+ createError(code: string, message: string, context?: Record<string, any>, recoverable?: boolean): WundrError;
39
+ /**
40
+ * Wrap async operations with error handling
41
+ */
42
+ wrap<T>(operation: () => Promise<T>, context?: string): Promise<T>;
43
+ }
44
+ export declare const errorHandler: ErrorHandler;
45
+ export {};
46
+ //# sourceMappingURL=error-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C;;GAEG;AACH,cAAM,YAAY;IAChB,OAAO,CAAC,UAAU,CAaf;IAEH;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,UAAU,GAAG,IAAI;IAevC;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiBzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAqC9B;;OAEG;IACH,WAAW,CACT,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,WAAW,UAAQ,GAClB,UAAU;IAQb;;OAEG;IACG,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAUzE;AAED,eAAO,MAAM,YAAY,cAAqB,CAAC"}
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.errorHandler = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const chalk_1 = tslib_1.__importDefault(require("chalk"));
6
+ const logger_1 = require("./logger");
7
+ /**
8
+ * Centralized error handling system
9
+ */
10
+ class ErrorHandler {
11
+ errorCodes = new Map([
12
+ ['ENOENT', 'File or directory not found'],
13
+ ['EACCES', 'Permission denied'],
14
+ ['EEXIST', 'File or directory already exists'],
15
+ ['ENOTDIR', 'Not a directory'],
16
+ ['EISDIR', 'Is a directory'],
17
+ ['EMFILE', 'Too many open files'],
18
+ ['ENOTFOUND', 'Command or resource not found'],
19
+ ['WUNDR_CONFIG_INVALID', 'Invalid configuration file'],
20
+ ['WUNDR_PLUGIN_LOAD_FAILED', 'Failed to load plugin'],
21
+ ['WUNDR_COMMAND_FAILED', 'Command execution failed'],
22
+ ['WUNDR_ANALYSIS_FAILED', 'Analysis operation failed'],
23
+ ['WUNDR_NETWORK_ERROR', 'Network operation failed'],
24
+ ]);
25
+ /**
26
+ * Handle various types of errors with appropriate formatting
27
+ */
28
+ handle(error) {
29
+ const wundrError = error;
30
+ // Log the raw error in debug mode
31
+ logger_1.logger.debug('Raw error:', error);
32
+ if (this.isKnownError(wundrError)) {
33
+ this.handleKnownError(wundrError);
34
+ }
35
+ else if (this.isSystemError(error)) {
36
+ this.handleSystemError(error);
37
+ }
38
+ else {
39
+ this.handleUnknownError(error);
40
+ }
41
+ }
42
+ /**
43
+ * Check if error is a known Wundr error
44
+ */
45
+ isKnownError(error) {
46
+ return !!error.code && error.code.startsWith('WUNDR_');
47
+ }
48
+ /**
49
+ * Check if error is a system/Node.js error
50
+ */
51
+ isSystemError(error) {
52
+ return 'code' in error && typeof error.code === 'string';
53
+ }
54
+ /**
55
+ * Handle known Wundr errors
56
+ */
57
+ handleKnownError(error) {
58
+ const description = this.errorCodes.get(error.code || '') || 'Unknown error';
59
+ console.error(chalk_1.default.red('āœ– Wundr Error'));
60
+ console.error(chalk_1.default.red(` Code: ${error.code}`));
61
+ console.error(chalk_1.default.red(` Message: ${error.message}`));
62
+ console.error(chalk_1.default.gray(` Description: ${description}`));
63
+ if (error.context) {
64
+ console.error(chalk_1.default.gray(' Context:'));
65
+ Object.entries(error.context).forEach(([key, value]) => {
66
+ console.error(chalk_1.default.gray(` ${key}: ${value}`));
67
+ });
68
+ }
69
+ if (error.recoverable) {
70
+ console.error(chalk_1.default.yellow('\nšŸ’” This error might be recoverable. Try:'));
71
+ this.suggestRecoveryActions(error.code || '');
72
+ }
73
+ }
74
+ /**
75
+ * Handle system errors
76
+ */
77
+ handleSystemError(error) {
78
+ const description = this.errorCodes.get(error.code) || 'System error';
79
+ console.error(chalk_1.default.red('āœ– System Error'));
80
+ console.error(chalk_1.default.red(` Code: ${error.code}`));
81
+ console.error(chalk_1.default.red(` Message: ${error.message}`));
82
+ console.error(chalk_1.default.gray(` Description: ${description}`));
83
+ if (error.path) {
84
+ console.error(chalk_1.default.gray(` Path: ${error.path}`));
85
+ }
86
+ if (error.syscall) {
87
+ console.error(chalk_1.default.gray(` System Call: ${error.syscall}`));
88
+ }
89
+ }
90
+ /**
91
+ * Handle unknown errors
92
+ */
93
+ handleUnknownError(error) {
94
+ console.error(chalk_1.default.red('āœ– Unexpected Error'));
95
+ console.error(chalk_1.default.red(` Message: ${error.message}`));
96
+ if (error.stack) {
97
+ console.error(chalk_1.default.gray(' Stack Trace:'));
98
+ error.stack.split('\n').forEach(line => {
99
+ console.error(chalk_1.default.gray(` ${line}`));
100
+ });
101
+ }
102
+ console.error(chalk_1.default.yellow('\nšŸ’” This appears to be an unexpected error.'));
103
+ console.error(chalk_1.default.yellow(' Please report this issue with the above details.'));
104
+ }
105
+ /**
106
+ * Suggest recovery actions based on error code
107
+ */
108
+ suggestRecoveryActions(code) {
109
+ const suggestions = {
110
+ WUNDR_CONFIG_INVALID: [
111
+ '• Check your wundr.config.json syntax',
112
+ '• Run `wundr init` to create a new configuration',
113
+ '• Validate your configuration with `wundr config validate`',
114
+ ],
115
+ WUNDR_PLUGIN_LOAD_FAILED: [
116
+ '• Check if the plugin is properly installed',
117
+ '• Verify plugin compatibility with current Wundr version',
118
+ '• Run `wundr plugins list` to see available plugins',
119
+ ],
120
+ WUNDR_COMMAND_FAILED: [
121
+ '• Check command syntax and arguments',
122
+ '• Verify you have necessary permissions',
123
+ '• Run with --verbose for more details',
124
+ ],
125
+ ENOENT: [
126
+ '• Verify the file or directory path',
127
+ "• Check if you're in the correct directory",
128
+ '• Run `wundr init` if in a new project',
129
+ ],
130
+ EACCES: [
131
+ '• Check file permissions',
132
+ '• Run with appropriate user privileges',
133
+ '• Verify directory access rights',
134
+ ],
135
+ };
136
+ const actions = suggestions[code];
137
+ if (actions) {
138
+ actions.forEach(action => {
139
+ console.error(chalk_1.default.yellow(action));
140
+ });
141
+ }
142
+ }
143
+ /**
144
+ * Create a standardized Wundr error
145
+ */
146
+ createError(code, message, context, recoverable = false) {
147
+ const error = new Error(message);
148
+ error.code = code;
149
+ error.context = context;
150
+ error.recoverable = recoverable;
151
+ return error;
152
+ }
153
+ /**
154
+ * Wrap async operations with error handling
155
+ */
156
+ async wrap(operation, context) {
157
+ try {
158
+ return await operation();
159
+ }
160
+ catch (error) {
161
+ if (context) {
162
+ logger_1.logger.error(`Error in ${context}:`, error);
163
+ }
164
+ throw error;
165
+ }
166
+ }
167
+ }
168
+ exports.errorHandler = new ErrorHandler();
169
+ //# sourceMappingURL=error-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"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"}