ai-devkit 0.4.2 → 0.5.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 (53) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +2 -1
  3. package/dist/lib/TemplateManager.d.ts +5 -0
  4. package/dist/lib/TemplateManager.d.ts.map +1 -1
  5. package/dist/lib/TemplateManager.js +24 -3
  6. package/dist/lib/TemplateManager.js.map +1 -1
  7. package/dist/types.d.ts +1 -1
  8. package/dist/types.d.ts.map +1 -1
  9. package/dist/util/env.d.ts.map +1 -1
  10. package/dist/util/env.js +7 -1
  11. package/dist/util/env.js.map +1 -1
  12. package/package.json +2 -1
  13. package/templates/commands/capture-knowledge.md +4 -0
  14. package/templates/commands/check-implementation.md +4 -0
  15. package/templates/commands/code-review.md +4 -0
  16. package/templates/commands/debug.md +4 -0
  17. package/templates/commands/execute-plan.md +4 -0
  18. package/templates/commands/new-requirement.md +4 -0
  19. package/templates/commands/review-design.md +4 -0
  20. package/templates/commands/review-requirements.md +4 -0
  21. package/templates/commands/simplify-implementation.md +148 -0
  22. package/templates/commands/update-planning.md +4 -0
  23. package/templates/commands/writing-test.md +4 -0
  24. package/dist/__tests__/lib/Config.test.d.ts +0 -2
  25. package/dist/__tests__/lib/Config.test.d.ts.map +0 -1
  26. package/dist/__tests__/lib/Config.test.js +0 -281
  27. package/dist/__tests__/lib/Config.test.js.map +0 -1
  28. package/dist/__tests__/lib/EnvironmentSelector.test.d.ts +0 -2
  29. package/dist/__tests__/lib/EnvironmentSelector.test.d.ts.map +0 -1
  30. package/dist/__tests__/lib/EnvironmentSelector.test.js +0 -117
  31. package/dist/__tests__/lib/EnvironmentSelector.test.js.map +0 -1
  32. package/dist/__tests__/lib/PhaseSelector.test.d.ts +0 -2
  33. package/dist/__tests__/lib/PhaseSelector.test.d.ts.map +0 -1
  34. package/dist/__tests__/lib/PhaseSelector.test.js +0 -77
  35. package/dist/__tests__/lib/PhaseSelector.test.js.map +0 -1
  36. package/dist/__tests__/lib/TemplateManager.test.d.ts +0 -2
  37. package/dist/__tests__/lib/TemplateManager.test.d.ts.map +0 -1
  38. package/dist/__tests__/lib/TemplateManager.test.js +0 -351
  39. package/dist/__tests__/lib/TemplateManager.test.js.map +0 -1
  40. package/dist/__tests__/util/env.test.d.ts +0 -2
  41. package/dist/__tests__/util/env.test.d.ts.map +0 -1
  42. package/dist/__tests__/util/env.test.js +0 -166
  43. package/dist/__tests__/util/env.test.js.map +0 -1
  44. package/templates/commands/capture-knowledge.toml +0 -49
  45. package/templates/commands/check-implementation.toml +0 -21
  46. package/templates/commands/code-review.toml +0 -83
  47. package/templates/commands/debug.toml +0 -48
  48. package/templates/commands/execute-plan.toml +0 -74
  49. package/templates/commands/new-requirement.toml +0 -129
  50. package/templates/commands/review-design.toml +0 -13
  51. package/templates/commands/review-requirements.toml +0 -11
  52. package/templates/commands/update-planning.toml +0 -63
  53. package/templates/commands/writing-test.toml +0 -46
@@ -1,351 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- const fs = __importStar(require("fs-extra"));
37
- const path = __importStar(require("path"));
38
- const TemplateManager_1 = require("../../lib/TemplateManager");
39
- jest.mock('fs-extra');
40
- jest.mock('../../util/env');
41
- describe('TemplateManager', () => {
42
- let templateManager;
43
- let mockFs;
44
- let mockGetEnvironment;
45
- beforeEach(() => {
46
- mockFs = fs;
47
- mockGetEnvironment = require('../../util/env').getEnvironment;
48
- templateManager = new TemplateManager_1.TemplateManager('/test/target');
49
- jest.clearAllMocks();
50
- });
51
- afterEach(() => {
52
- jest.restoreAllMocks();
53
- });
54
- describe('setupSingleEnvironment', () => {
55
- it('should copy context file when it exists', async () => {
56
- const env = {
57
- code: 'test-env',
58
- name: 'Test Environment',
59
- contextFileName: '.test-context.md',
60
- commandPath: '.test',
61
- isCustomCommandPath: false
62
- };
63
- mockFs.pathExists
64
- .mockResolvedValueOnce(true)
65
- .mockResolvedValueOnce(true);
66
- mockFs.readdir.mockResolvedValue(['command1.md', 'command2.toml']);
67
- const result = await templateManager.setupSingleEnvironment(env);
68
- expect(mockFs.copy).toHaveBeenCalledWith(path.join(templateManager['templatesDir'], 'env', 'base.md'), path.join(templateManager['targetDir'], env.contextFileName));
69
- expect(result).toContain(path.join(templateManager['targetDir'], env.contextFileName));
70
- });
71
- it('should warn when context file does not exist', async () => {
72
- const consoleWarnSpy = jest.spyOn(console, 'warn').mockImplementation();
73
- const env = {
74
- code: 'test-env',
75
- name: 'Test Environment',
76
- contextFileName: '.test-context.md',
77
- commandPath: '.test',
78
- isCustomCommandPath: false
79
- };
80
- mockFs.pathExists
81
- .mockResolvedValueOnce(false)
82
- .mockResolvedValueOnce(true);
83
- mockFs.readdir.mockResolvedValue(['command1.md']);
84
- const result = await templateManager.setupSingleEnvironment(env);
85
- expect(consoleWarnSpy).toHaveBeenCalledWith(expect.stringContaining('Warning: Context file not found'));
86
- expect(result).toEqual([path.join(templateManager['targetDir'], env.commandPath, 'command1.md')]);
87
- consoleWarnSpy.mockRestore();
88
- });
89
- it('should copy commands when isCustomCommandPath is false', async () => {
90
- const env = {
91
- code: 'test-env',
92
- name: 'Test Environment',
93
- contextFileName: '.test-context.md',
94
- commandPath: '.test',
95
- isCustomCommandPath: false
96
- };
97
- const mockCommandFiles = ['command1.md', 'command2.toml', 'command3.md'];
98
- mockFs.pathExists
99
- .mockResolvedValueOnce(true) // context file exists
100
- .mockResolvedValueOnce(true); // commands directory exists
101
- mockFs.readdir.mockResolvedValue(mockCommandFiles);
102
- const result = await templateManager.setupSingleEnvironment(env);
103
- expect(mockFs.ensureDir).toHaveBeenCalledWith(path.join(templateManager['targetDir'], env.commandPath));
104
- // Should only copy .md files (not .toml files)
105
- expect(mockFs.copy).toHaveBeenCalledWith(path.join(templateManager['templatesDir'], 'commands', 'command1.md'), path.join(templateManager['targetDir'], env.commandPath, 'command1.md'));
106
- expect(mockFs.copy).toHaveBeenCalledWith(path.join(templateManager['templatesDir'], 'commands', 'command3.md'), path.join(templateManager['targetDir'], env.commandPath, 'command3.md'));
107
- expect(result).toContain(path.join(templateManager['targetDir'], env.commandPath, 'command1.md'));
108
- expect(result).toContain(path.join(templateManager['targetDir'], env.commandPath, 'command3.md'));
109
- });
110
- it('should skip commands when isCustomCommandPath is true', async () => {
111
- const env = {
112
- code: 'test-env',
113
- name: 'Test Environment',
114
- contextFileName: '.test-context.md',
115
- commandPath: '.test',
116
- isCustomCommandPath: true
117
- };
118
- mockFs.pathExists.mockResolvedValueOnce(true);
119
- const result = await templateManager.setupSingleEnvironment(env);
120
- expect(mockFs.ensureDir).not.toHaveBeenCalled();
121
- expect(mockFs.copy).toHaveBeenCalledTimes(1);
122
- expect(result).toContain(path.join(templateManager['targetDir'], env.contextFileName));
123
- });
124
- it('should handle cursor environment with special files', async () => {
125
- const env = {
126
- code: 'cursor',
127
- name: 'Cursor',
128
- contextFileName: '.cursor.md',
129
- commandPath: '.cursor',
130
- isCustomCommandPath: false
131
- };
132
- const mockRuleFiles = ['rule1.md', 'rule2.toml'];
133
- mockFs.pathExists
134
- .mockResolvedValueOnce(true)
135
- .mockResolvedValueOnce(true).mockResolvedValueOnce(true);
136
- mockFs.readdir
137
- .mockResolvedValueOnce([]).mockResolvedValueOnce(mockRuleFiles);
138
- const result = await templateManager.setupSingleEnvironment(env);
139
- expect(mockFs.ensureDir).toHaveBeenCalledWith(path.join(templateManager['targetDir'], '.cursor', 'rules'));
140
- expect(mockFs.copy).toHaveBeenCalledWith(path.join(templateManager['templatesDir'], 'env', 'cursor', 'rules'), path.join(templateManager['targetDir'], '.cursor', 'rules'));
141
- expect(result).toContain(path.join(templateManager['targetDir'], '.cursor', 'rules', 'rule1.md'));
142
- expect(result).toContain(path.join(templateManager['targetDir'], '.cursor', 'rules', 'rule2.toml'));
143
- });
144
- it('should handle gemini environment with toml files', async () => {
145
- const env = {
146
- code: 'gemini',
147
- name: 'Gemini',
148
- contextFileName: '.gemini.md',
149
- commandPath: '.gemini',
150
- isCustomCommandPath: false
151
- };
152
- const mockCommandFiles = ['command1.md', 'command2.toml', 'command3.toml'];
153
- mockFs.pathExists
154
- .mockResolvedValueOnce(true)
155
- .mockResolvedValueOnce(true).mockResolvedValueOnce(true); // gemini commands directory exists
156
- mockFs.readdir.mockResolvedValue(mockCommandFiles);
157
- const result = await templateManager.setupSingleEnvironment(env);
158
- expect(mockFs.ensureDir).toHaveBeenCalledWith(path.join(templateManager['targetDir'], '.gemini', 'commands'));
159
- expect(mockFs.copy).toHaveBeenCalledWith(path.join(templateManager['templatesDir'], 'commands', 'command2.toml'), path.join(templateManager['targetDir'], '.gemini', 'commands', 'command2.toml'));
160
- expect(mockFs.copy).toHaveBeenCalledWith(path.join(templateManager['templatesDir'], 'commands', 'command3.toml'), path.join(templateManager['targetDir'], '.gemini', 'commands', 'command3.toml'));
161
- expect(result).toContain(path.join(templateManager['targetDir'], '.gemini', 'commands', 'command2.toml'));
162
- expect(result).toContain(path.join(templateManager['targetDir'], '.gemini', 'commands', 'command3.toml'));
163
- });
164
- it('should handle errors and rethrow them', async () => {
165
- const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation();
166
- const env = {
167
- code: 'test-env',
168
- name: 'Test Environment',
169
- contextFileName: '.test-context.md',
170
- commandPath: '.test',
171
- isCustomCommandPath: false
172
- };
173
- const testError = new Error('Test error');
174
- mockFs.pathExists.mockRejectedValue(testError);
175
- await expect(templateManager.setupSingleEnvironment(env)).rejects.toThrow('Test error');
176
- expect(consoleErrorSpy).toHaveBeenCalledWith('Error setting up environment Test Environment:', testError);
177
- consoleErrorSpy.mockRestore();
178
- });
179
- });
180
- describe('copyPhaseTemplate', () => {
181
- it('should copy phase template and return target file path', async () => {
182
- const phase = 'requirements';
183
- mockFs.ensureDir.mockResolvedValue(undefined);
184
- mockFs.copy.mockResolvedValue(undefined);
185
- const result = await templateManager.copyPhaseTemplate(phase);
186
- expect(mockFs.ensureDir).toHaveBeenCalledWith(path.join(templateManager['targetDir'], 'docs', 'ai', phase));
187
- expect(mockFs.copy).toHaveBeenCalledWith(path.join(templateManager['templatesDir'], 'phases', `${phase}.md`), path.join(templateManager['targetDir'], 'docs', 'ai', phase, 'README.md'));
188
- expect(result).toBe(path.join(templateManager['targetDir'], 'docs', 'ai', phase, 'README.md'));
189
- });
190
- });
191
- describe('fileExists', () => {
192
- it('should return true when phase file exists', async () => {
193
- const phase = 'design';
194
- mockFs.pathExists.mockResolvedValue(true);
195
- const result = await templateManager.fileExists(phase);
196
- expect(mockFs.pathExists).toHaveBeenCalledWith(path.join(templateManager['targetDir'], 'docs', 'ai', phase, 'README.md'));
197
- expect(result).toBe(true);
198
- });
199
- it('should return false when phase file does not exist', async () => {
200
- const phase = 'planning';
201
- mockFs.pathExists.mockResolvedValue(false);
202
- const result = await templateManager.fileExists(phase);
203
- expect(mockFs.pathExists).toHaveBeenCalledWith(path.join(templateManager['targetDir'], 'docs', 'ai', phase, 'README.md'));
204
- expect(result).toBe(false);
205
- });
206
- });
207
- describe('setupMultipleEnvironments', () => {
208
- it('should setup multiple environments successfully', async () => {
209
- const envIds = ['cursor', 'gemini'];
210
- const cursorEnv = {
211
- code: 'cursor',
212
- name: 'Cursor',
213
- contextFileName: 'AGENTS.md',
214
- commandPath: '.cursor/commands',
215
- };
216
- const geminiEnv = {
217
- code: 'gemini',
218
- name: 'Gemini',
219
- contextFileName: 'AGENTS.md',
220
- commandPath: '.gemini/commands',
221
- isCustomCommandPath: true,
222
- };
223
- mockGetEnvironment
224
- .mockReturnValueOnce(cursorEnv)
225
- .mockReturnValueOnce(geminiEnv);
226
- // Mock setupSingleEnvironment
227
- const mockSetupSingleEnvironment = jest.fn();
228
- mockSetupSingleEnvironment
229
- .mockResolvedValueOnce(['/path/to/cursor/file1', '/path/to/cursor/file2'])
230
- .mockResolvedValueOnce(['/path/to/gemini/file1']);
231
- templateManager.setupSingleEnvironment = mockSetupSingleEnvironment;
232
- const result = await templateManager.setupMultipleEnvironments(envIds);
233
- expect(mockGetEnvironment).toHaveBeenCalledWith('cursor');
234
- expect(mockGetEnvironment).toHaveBeenCalledWith('gemini');
235
- expect(mockSetupSingleEnvironment).toHaveBeenCalledWith(cursorEnv);
236
- expect(mockSetupSingleEnvironment).toHaveBeenCalledWith(geminiEnv);
237
- expect(result).toEqual([
238
- '/path/to/cursor/file1',
239
- '/path/to/cursor/file2',
240
- '/path/to/gemini/file1'
241
- ]);
242
- });
243
- it('should skip invalid environments and continue with valid ones', async () => {
244
- const envIds = ['cursor', 'invalid', 'gemini'];
245
- const cursorEnv = {
246
- code: 'cursor',
247
- name: 'Cursor',
248
- contextFileName: 'AGENTS.md',
249
- commandPath: '.cursor/commands',
250
- };
251
- const geminiEnv = {
252
- code: 'gemini',
253
- name: 'Gemini',
254
- contextFileName: 'AGENTS.md',
255
- commandPath: '.gemini/commands',
256
- isCustomCommandPath: true,
257
- };
258
- const consoleWarnSpy = jest.spyOn(console, 'warn').mockImplementation();
259
- mockGetEnvironment
260
- .mockReturnValueOnce(cursorEnv)
261
- .mockReturnValueOnce(undefined) // invalid environment
262
- .mockReturnValueOnce(geminiEnv);
263
- // Mock setupSingleEnvironment
264
- const mockSetupSingleEnvironment = jest.fn();
265
- mockSetupSingleEnvironment
266
- .mockResolvedValueOnce(['/path/to/cursor/file1'])
267
- .mockResolvedValueOnce(['/path/to/gemini/file1']);
268
- templateManager.setupSingleEnvironment = mockSetupSingleEnvironment;
269
- const result = await templateManager.setupMultipleEnvironments(envIds);
270
- expect(consoleWarnSpy).toHaveBeenCalledWith("Warning: Environment 'invalid' not found, skipping");
271
- expect(result).toEqual([
272
- '/path/to/cursor/file1',
273
- '/path/to/gemini/file1'
274
- ]);
275
- consoleWarnSpy.mockRestore();
276
- });
277
- it('should throw error when setupSingleEnvironment fails', async () => {
278
- const envIds = ['cursor'];
279
- const cursorEnv = {
280
- code: 'cursor',
281
- name: 'Cursor',
282
- contextFileName: 'AGENTS.md',
283
- commandPath: '.cursor/commands',
284
- };
285
- mockGetEnvironment.mockReturnValue(cursorEnv);
286
- const mockSetupSingleEnvironment = jest.fn().mockRejectedValue(new Error('Setup failed'));
287
- templateManager.setupSingleEnvironment = mockSetupSingleEnvironment;
288
- const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation();
289
- await expect(templateManager.setupMultipleEnvironments(envIds)).rejects.toThrow('Setup failed');
290
- expect(consoleErrorSpy).toHaveBeenCalledWith("Error setting up environment 'Cursor':", expect.any(Error));
291
- consoleErrorSpy.mockRestore();
292
- });
293
- });
294
- describe('checkEnvironmentExists', () => {
295
- it('should return false when environment does not exist', async () => {
296
- const envId = 'cursor';
297
- mockGetEnvironment.mockReturnValue(undefined);
298
- const result = await templateManager.checkEnvironmentExists(envId);
299
- expect(mockGetEnvironment).toHaveBeenCalledWith(envId);
300
- expect(result).toBe(false);
301
- });
302
- it('should return true when context file exists', async () => {
303
- const envId = 'cursor';
304
- const env = {
305
- code: 'cursor',
306
- name: 'Cursor',
307
- contextFileName: 'AGENTS.md',
308
- commandPath: '.cursor/commands',
309
- };
310
- mockGetEnvironment.mockReturnValue(env);
311
- mockFs.pathExists
312
- .mockResolvedValueOnce(true) // context file exists
313
- .mockResolvedValueOnce(false); // command dir doesn't exist
314
- const result = await templateManager.checkEnvironmentExists(envId);
315
- expect(mockFs.pathExists).toHaveBeenCalledWith(path.join(templateManager['targetDir'], env.contextFileName));
316
- expect(mockFs.pathExists).toHaveBeenCalledWith(path.join(templateManager['targetDir'], env.commandPath));
317
- expect(result).toBe(true);
318
- });
319
- it('should return true when command directory exists', async () => {
320
- const envId = 'cursor';
321
- const env = {
322
- code: 'cursor',
323
- name: 'Cursor',
324
- contextFileName: 'AGENTS.md',
325
- commandPath: '.cursor/commands',
326
- };
327
- mockGetEnvironment.mockReturnValue(env);
328
- mockFs.pathExists
329
- .mockResolvedValueOnce(false) // context file doesn't exist
330
- .mockResolvedValueOnce(true); // command dir exists
331
- const result = await templateManager.checkEnvironmentExists(envId);
332
- expect(result).toBe(true);
333
- });
334
- it('should return false when neither context file nor command directory exists', async () => {
335
- const envId = 'cursor';
336
- const env = {
337
- code: 'cursor',
338
- name: 'Cursor',
339
- contextFileName: 'AGENTS.md',
340
- commandPath: '.cursor/commands',
341
- };
342
- mockGetEnvironment.mockReturnValue(env);
343
- mockFs.pathExists
344
- .mockResolvedValueOnce(false) // context file doesn't exist
345
- .mockResolvedValueOnce(false); // command dir doesn't exist
346
- const result = await templateManager.checkEnvironmentExists(envId);
347
- expect(result).toBe(false);
348
- });
349
- });
350
- });
351
- //# sourceMappingURL=TemplateManager.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TemplateManager.test.js","sourceRoot":"","sources":["../../../src/__tests__/lib/TemplateManager.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=env.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"env.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/util/env.test.ts"],"names":[],"mappings":""}
@@ -1,166 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const env_1 = require("../../util/env");
4
- describe('Environment Utilities', () => {
5
- describe('ENVIRONMENT_DEFINITIONS', () => {
6
- it('should contain all 10 environment definitions', () => {
7
- expect(Object.keys(env_1.ENVIRONMENT_DEFINITIONS)).toHaveLength(10);
8
- expect(env_1.ENVIRONMENT_DEFINITIONS).toHaveProperty('cursor');
9
- expect(env_1.ENVIRONMENT_DEFINITIONS).toHaveProperty('claude');
10
- expect(env_1.ENVIRONMENT_DEFINITIONS).toHaveProperty('github');
11
- expect(env_1.ENVIRONMENT_DEFINITIONS).toHaveProperty('gemini');
12
- expect(env_1.ENVIRONMENT_DEFINITIONS).toHaveProperty('codex');
13
- expect(env_1.ENVIRONMENT_DEFINITIONS).toHaveProperty('windsurf');
14
- expect(env_1.ENVIRONMENT_DEFINITIONS).toHaveProperty('kilocode');
15
- expect(env_1.ENVIRONMENT_DEFINITIONS).toHaveProperty('amp');
16
- expect(env_1.ENVIRONMENT_DEFINITIONS).toHaveProperty('opencode');
17
- expect(env_1.ENVIRONMENT_DEFINITIONS).toHaveProperty('roo');
18
- });
19
- it('should have correct structure for cursor environment', () => {
20
- const cursor = env_1.ENVIRONMENT_DEFINITIONS.cursor;
21
- expect(cursor).toEqual({
22
- code: 'cursor',
23
- name: 'Cursor',
24
- contextFileName: 'AGENTS.md',
25
- commandPath: '.cursor/commands'
26
- });
27
- });
28
- it('should have consistent structure across all environments', () => {
29
- Object.values(env_1.ENVIRONMENT_DEFINITIONS).forEach(env => {
30
- expect(env).toHaveProperty('code');
31
- expect(env).toHaveProperty('name');
32
- expect(env).toHaveProperty('contextFileName');
33
- expect(env).toHaveProperty('commandPath');
34
- expect(typeof env.code).toBe('string');
35
- expect(typeof env.name).toBe('string');
36
- expect(typeof env.contextFileName).toBe('string');
37
- expect(typeof env.commandPath).toBe('string');
38
- });
39
- });
40
- });
41
- describe('ALL_ENVIRONMENT_CODES', () => {
42
- it('should contain all 10 environment codes', () => {
43
- expect(env_1.ALL_ENVIRONMENT_CODES).toHaveLength(10);
44
- expect(env_1.ALL_ENVIRONMENT_CODES).toEqual(expect.arrayContaining([
45
- 'cursor', 'claude', 'github', 'gemini', 'codex',
46
- 'windsurf', 'kilocode', 'amp', 'opencode', 'roo'
47
- ]));
48
- });
49
- it('should be dynamically generated from ENVIRONMENT_DEFINITIONS keys', () => {
50
- const expectedCodes = Object.keys(env_1.ENVIRONMENT_DEFINITIONS);
51
- expect(env_1.ALL_ENVIRONMENT_CODES).toEqual(expectedCodes);
52
- });
53
- });
54
- describe('getAllEnvironments', () => {
55
- it('should return all environment definitions', () => {
56
- const environments = (0, env_1.getAllEnvironments)();
57
- expect(environments).toHaveLength(10);
58
- expect(environments).toEqual(Object.values(env_1.ENVIRONMENT_DEFINITIONS));
59
- });
60
- it('should return different array instances', () => {
61
- const envs1 = (0, env_1.getAllEnvironments)();
62
- const envs2 = (0, env_1.getAllEnvironments)();
63
- expect(envs1).not.toBe(envs2);
64
- expect(envs1).toEqual(envs2);
65
- });
66
- });
67
- describe('getEnvironment', () => {
68
- it('should return correct environment definition for valid codes', () => {
69
- const cursor = (0, env_1.getEnvironment)('cursor');
70
- expect(cursor).toBeDefined();
71
- expect(cursor?.code).toBe('cursor');
72
- expect(cursor?.name).toBe('Cursor');
73
- const claude = (0, env_1.getEnvironment)('claude');
74
- expect(claude).toBeDefined();
75
- expect(claude?.code).toBe('claude');
76
- expect(claude?.name).toBe('Claude Code');
77
- });
78
- it('should return undefined for invalid codes', () => {
79
- const invalid = (0, env_1.getEnvironment)('invalid');
80
- expect(invalid).toBeUndefined();
81
- });
82
- it('should return the same reference for repeated calls', () => {
83
- const env1 = (0, env_1.getEnvironment)('cursor');
84
- const env2 = (0, env_1.getEnvironment)('cursor');
85
- expect(env1).toBe(env2);
86
- });
87
- });
88
- describe('getAllEnvironmentCodes', () => {
89
- it('should return all environment codes', () => {
90
- const codes = (0, env_1.getAllEnvironmentCodes)();
91
- expect(codes).toHaveLength(10);
92
- expect(codes).toEqual(env_1.ALL_ENVIRONMENT_CODES);
93
- });
94
- it('should return different array instances', () => {
95
- const codes1 = (0, env_1.getAllEnvironmentCodes)();
96
- const codes2 = (0, env_1.getAllEnvironmentCodes)();
97
- expect(codes1).not.toBe(codes2);
98
- expect(codes1).toEqual(codes2);
99
- });
100
- });
101
- describe('getEnvironmentsByCodes', () => {
102
- it('should return correct environments for valid codes', () => {
103
- const environments = (0, env_1.getEnvironmentsByCodes)(['cursor', 'claude']);
104
- expect(environments).toHaveLength(2);
105
- expect(environments[0].code).toBe('cursor');
106
- expect(environments[1].code).toBe('claude');
107
- });
108
- it('should filter out invalid codes', () => {
109
- const environments = (0, env_1.getEnvironmentsByCodes)(['cursor', 'invalid', 'claude']);
110
- expect(environments).toHaveLength(2);
111
- expect(environments[0].code).toBe('cursor');
112
- expect(environments[1].code).toBe('claude');
113
- });
114
- it('should return empty array for empty input', () => {
115
- const environments = (0, env_1.getEnvironmentsByCodes)([]);
116
- expect(environments).toHaveLength(0);
117
- });
118
- it('should return empty array for all invalid codes', () => {
119
- const environments = (0, env_1.getEnvironmentsByCodes)(['invalid1', 'invalid2']);
120
- expect(environments).toHaveLength(0);
121
- });
122
- });
123
- describe('isValidEnvironmentCode', () => {
124
- it('should return true for valid environment codes', () => {
125
- expect((0, env_1.isValidEnvironmentCode)('cursor')).toBe(true);
126
- expect((0, env_1.isValidEnvironmentCode)('claude')).toBe(true);
127
- expect((0, env_1.isValidEnvironmentCode)('roo')).toBe(true);
128
- });
129
- it('should return false for invalid codes', () => {
130
- expect((0, env_1.isValidEnvironmentCode)('invalid')).toBe(false);
131
- expect((0, env_1.isValidEnvironmentCode)('')).toBe(false);
132
- expect((0, env_1.isValidEnvironmentCode)('CURSOR')).toBe(false);
133
- });
134
- });
135
- describe('getEnvironmentDisplayName', () => {
136
- it('should return environment name for valid codes', () => {
137
- expect((0, env_1.getEnvironmentDisplayName)('cursor')).toBe('Cursor');
138
- expect((0, env_1.getEnvironmentDisplayName)('claude')).toBe('Claude Code');
139
- expect((0, env_1.getEnvironmentDisplayName)('roo')).toBe('Roo Code');
140
- });
141
- it('should return code itself for invalid codes', () => {
142
- expect((0, env_1.getEnvironmentDisplayName)('invalid')).toBe('invalid');
143
- });
144
- });
145
- describe('validateEnvironmentCodes', () => {
146
- it('should return valid codes array for all valid inputs', () => {
147
- const result = (0, env_1.validateEnvironmentCodes)(['cursor', 'claude']);
148
- expect(result).toEqual(['cursor', 'claude']);
149
- });
150
- it('should throw error for invalid codes', () => {
151
- expect(() => {
152
- (0, env_1.validateEnvironmentCodes)(['cursor', 'invalid']);
153
- }).toThrow('Invalid environment codes: invalid');
154
- });
155
- it('should throw error with multiple invalid codes', () => {
156
- expect(() => {
157
- (0, env_1.validateEnvironmentCodes)(['cursor', 'invalid1', 'invalid2']);
158
- }).toThrow('Invalid environment codes: invalid1, invalid2');
159
- });
160
- it('should return empty array for empty input', () => {
161
- const result = (0, env_1.validateEnvironmentCodes)([]);
162
- expect(result).toEqual([]);
163
- });
164
- });
165
- });
166
- //# sourceMappingURL=env.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"env.test.js","sourceRoot":"","sources":["../../../src/__tests__/util/env.test.ts"],"names":[],"mappings":";;AAAA,wCAUwB;AAGxB,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,6BAAuB,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAC9D,MAAM,CAAC,6BAAuB,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YACzD,MAAM,CAAC,6BAAuB,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YACzD,MAAM,CAAC,6BAAuB,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YACzD,MAAM,CAAC,6BAAuB,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YACzD,MAAM,CAAC,6BAAuB,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YACxD,MAAM,CAAC,6BAAuB,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAC3D,MAAM,CAAC,6BAAuB,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAC3D,MAAM,CAAC,6BAAuB,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACtD,MAAM,CAAC,6BAAuB,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAC3D,MAAM,CAAC,6BAAuB,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,MAAM,MAAM,GAAG,6BAAuB,CAAC,MAAM,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,eAAe,EAAE,WAAW;gBAC5B,WAAW,EAAE,kBAAkB;aAChC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;YAClE,MAAM,CAAC,MAAM,CAAC,6BAAuB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACnD,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;gBACnC,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;gBACnC,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;gBAC9C,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;gBAC1C,MAAM,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvC,MAAM,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvC,MAAM,CAAC,OAAO,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAClD,MAAM,CAAC,OAAO,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,CAAC,2BAAqB,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAC/C,MAAM,CAAC,2BAAqB,CAAC,CAAC,OAAO,CACnC,MAAM,CAAC,eAAe,CAAC;gBACrB,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO;gBAC/C,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK;aACjD,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;YAC3E,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,6BAAuB,CAAsB,CAAC;YAChF,MAAM,CAAC,2BAAqB,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,YAAY,GAAG,IAAA,wBAAkB,GAAE,CAAC;YAC1C,MAAM,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACtC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,6BAAuB,CAAC,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,KAAK,GAAG,IAAA,wBAAkB,GAAE,CAAC;YACnC,MAAM,KAAK,GAAG,IAAA,wBAAkB,GAAE,CAAC;YACnC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;YACtE,MAAM,MAAM,GAAG,IAAA,oBAAc,EAAC,QAAQ,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YAC7B,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEpC,MAAM,MAAM,GAAG,IAAA,oBAAc,EAAC,QAAQ,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YAC7B,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,OAAO,GAAG,IAAA,oBAAc,EAAC,SAA4B,CAAC,CAAC;YAC7D,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,MAAM,IAAI,GAAG,IAAA,oBAAc,EAAC,QAAQ,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,IAAA,oBAAc,EAAC,QAAQ,CAAC,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,KAAK,GAAG,IAAA,4BAAsB,GAAE,CAAC;YACvC,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,2BAAqB,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,MAAM,GAAG,IAAA,4BAAsB,GAAE,CAAC;YACxC,MAAM,MAAM,GAAG,IAAA,4BAAsB,GAAE,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,MAAM,YAAY,GAAG,IAAA,4BAAsB,EAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;YAClE,MAAM,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,YAAY,GAAG,IAAA,4BAAsB,EAAC,CAAC,QAAQ,EAAE,SAA4B,EAAE,QAAQ,CAAC,CAAC,CAAC;YAChG,MAAM,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5C,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,YAAY,GAAG,IAAA,4BAAsB,EAAC,EAAE,CAAC,CAAC;YAChD,MAAM,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,YAAY,GAAG,IAAA,4BAAsB,EAAC,CAAC,UAA6B,EAAE,UAA6B,CAAC,CAAC,CAAC;YAC5G,MAAM,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,CAAC,IAAA,4BAAsB,EAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpD,MAAM,CAAC,IAAA,4BAAsB,EAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpD,MAAM,CAAC,IAAA,4BAAsB,EAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,CAAC,IAAA,4BAAsB,EAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtD,MAAM,CAAC,IAAA,4BAAsB,EAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/C,MAAM,CAAC,IAAA,4BAAsB,EAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACzC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,CAAC,IAAA,+BAAyB,EAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3D,MAAM,CAAC,IAAA,+BAAyB,EAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAChE,MAAM,CAAC,IAAA,+BAAyB,EAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,CAAC,IAAA,+BAAyB,EAAC,SAA4B,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,MAAM,MAAM,GAAG,IAAA,8BAAwB,EAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC9D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,CAAC,GAAG,EAAE;gBACV,IAAA,8BAAwB,EAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;YAClD,CAAC,CAAC,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,CAAC,GAAG,EAAE;gBACV,IAAA,8BAAwB,EAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,MAAM,GAAG,IAAA,8BAAwB,EAAC,EAAE,CAAC,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,49 +0,0 @@
1
- description='''Capture structured knowledge about a code entry point and save it
2
- to the knowledge docs.'''
3
- prompt='''# Knowledge Capture Assistant
4
-
5
- Guide me through creating a structured understanding of a code entry point and saving it to the knowledge docs.
6
-
7
- ## Step 1: Gather Context
8
- - Entry point (file, folder, function, API)
9
- - Why this entry point matters (feature, bug, investigation)
10
- - Relevant requirements/design docs (if any)
11
- - Desired depth or focus areas (logic, dependencies, data flow)
12
-
13
- ## Step 2: Validate Entry Point
14
- - Determine entry point type and confirm it exists
15
- - Surface ambiguity (multiple matches) and ask for clarification
16
- - If not found, suggest likely alternatives or spelling fixes
17
-
18
- ## Step 3: Collect Source Context
19
- - Read the primary file/module and summarize purpose, exports, key patterns
20
- - For folders: list structure, highlight key modules
21
- - For functions/APIs: capture signature, parameters, return values, error handling
22
- - Extract essential snippets (avoid large dumps)
23
-
24
- ## Step 4: Analyze Dependencies
25
- - Build a dependency view up to depth 3
26
- - Track visited nodes to avoid loops
27
- - Categorize dependencies (imports, function calls, services, external packages)
28
- - Note important external systems or generated code that should be excluded
29
-
30
- ## Step 5: Synthesize Explanation
31
- - Draft an overview (purpose, language, high-level behavior)
32
- - Detail core logic, key components, execution flow, patterns
33
- - Highlight error handling, performance, security considerations
34
- - Identify potential improvements or risks discovered during analysis
35
-
36
- ## Step 6: Create Documentation
37
- - Normalize entry point name to kebab-case (`calculateTotalPrice` → `calculate-total-price`)
38
- - Create `docs/ai/implementation/knowledge-{name}.md` using the headings implied in Step 5 (Overview, Implementation Details, Dependencies, Visual Diagrams, Additional Insights, Metadata, Next Steps)
39
- - Populate sections with findings, diagrams, and metadata (analysis date, depth, files touched)
40
- - Include mermaid diagrams when they clarify flows or relationships
41
-
42
- ## Step 7: Review & Next Actions
43
- - Summarize key insights and open questions for follow-up
44
- - Suggest related areas for deeper dives or refactors
45
- - Confirm the knowledge file path and remind to commit it
46
- - Encourage running `/capture-knowledge` again for related entry points if needed
47
-
48
- Let me know the entry point and goals when you’re ready to begin the knowledge capture.
49
- '''
@@ -1,21 +0,0 @@
1
- Compare the current implementation with the design in docs/ai/design/ and requirements in docs/ai/requirements/. Please follow this structured review:
2
-
3
- 1. Ask me for:
4
- - Feature/branch description
5
- - List of modified files
6
- - Relevant design doc(s) (feature-specific and/or project-level)
7
- - Any known constraints or assumptions
8
-
9
- 2. For each design doc:
10
- - Summarize key architectural decisions and constraints
11
- - Highlight components, interfaces, and data flows that must be respected
12
-
13
- 3. File-by-file comparison:
14
- - Confirm implementation matches design intent
15
- - Note deviations or missing pieces
16
- - Flag logic gaps, edge cases, or security issues
17
- - Suggest simplifications or refactors
18
- - Identify missing tests or documentation updates
19
-
20
- 4. Summarize findings with recommended next steps.
21
-