ai-devkit 0.4.0 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -0
- package/README.md +10 -10
- package/dist/__tests__/lib/EnvironmentSelector.test.js +3 -3
- package/dist/__tests__/lib/EnvironmentSelector.test.js.map +1 -1
- package/dist/__tests__/lib/PhaseSelector.test.js +3 -3
- package/dist/__tests__/lib/PhaseSelector.test.js.map +1 -1
- package/dist/__tests__/lib/TemplateManager.test.d.ts +2 -0
- package/dist/__tests__/lib/TemplateManager.test.d.ts.map +1 -0
- package/dist/__tests__/lib/TemplateManager.test.js +351 -0
- package/dist/__tests__/lib/TemplateManager.test.js.map +1 -0
- package/dist/lib/EnvironmentSelector.js +1 -1
- package/dist/lib/EnvironmentSelector.js.map +1 -1
- package/dist/lib/PhaseSelector.js +1 -1
- package/dist/lib/PhaseSelector.js.map +1 -1
- package/dist/lib/TemplateManager.d.ts +3 -1
- package/dist/lib/TemplateManager.d.ts.map +1 -1
- package/dist/lib/TemplateManager.js +50 -23
- package/dist/lib/TemplateManager.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/util/env.d.ts.map +1 -1
- package/dist/util/env.js +3 -1
- package/dist/util/env.js.map +1 -1
- package/package.json +1 -1
- package/templates/commands/capture-knowledge.toml +49 -0
- package/templates/commands/check-implementation.toml +21 -0
- package/templates/commands/code-review.toml +83 -0
- package/templates/commands/debug.toml +48 -0
- package/templates/commands/execute-plan.toml +74 -0
- package/templates/commands/new-requirement.toml +129 -0
- package/templates/commands/review-design.toml +13 -0
- package/templates/commands/review-requirements.toml +11 -0
- package/templates/commands/update-planning.toml +63 -0
- package/templates/commands/writing-test.toml +46 -0
- package/templates/env/base.md +51 -0
- package/web/content/pages/vision.md +2 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,34 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## Unreleased
|
|
9
|
+
|
|
10
|
+
- Fixed Gemini CLI integration https://github.com/codeaholicguy/ai-devkit/issues/3
|
|
11
|
+
- Added test for TemplateManager.ts
|
|
12
|
+
- Fixed Github Copilot integration https://github.com/codeaholicguy/ai-devkit/issues/4
|
|
13
|
+
|
|
14
|
+
## [0.4.0] - 2025-10-31
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
- **Multi-Environment Setup** - Support for 10 AI development environments
|
|
18
|
+
- Interactive environment selection with multi-choice prompts
|
|
19
|
+
- Support for Cursor, Claude Code, GitHub Copilot, Google Gemini, OpenAI Codex, Windsurf, KiloCode, AMP, OpenCode, and Roo Code
|
|
20
|
+
- Unified template structure with AGENTS.md files for all environments
|
|
21
|
+
- Environment-specific command directories and configuration files
|
|
22
|
+
- Override protection with confirmation prompts for existing environments
|
|
23
|
+
- Config persistence storing selected environments array
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
- **Breaking Changes** - Removed legacy single-environment support for cleaner API
|
|
27
|
+
- Renamed `EnvironmentId` to `EnvironmentCode` throughout codebase
|
|
28
|
+
- Removed legacy `Environment` type union (cursor | claude | both)
|
|
29
|
+
- Updated config schema to use `environments: EnvironmentCode[]`
|
|
30
|
+
- All environments now use standardized AGENTS.md context files
|
|
31
|
+
|
|
32
|
+
### Technical Improvements
|
|
33
|
+
- **Testing Infrastructure** - Complete test suite implementation
|
|
34
|
+
- **Architecture** - Modular design improvements
|
|
35
|
+
|
|
8
36
|
## [0.3.0] - 2025-10-15
|
|
9
37
|
|
|
10
38
|
### Added
|
package/README.md
CHANGED
|
@@ -121,16 +121,16 @@ your-project/
|
|
|
121
121
|
Supported Tools & Agents:
|
|
122
122
|
| Agent | Support | Notes |
|
|
123
123
|
|-----------------------------------------------------------|---------|---------------------------------------------------|
|
|
124
|
-
| [Claude Code](https://www.anthropic.com/claude-code) | ✅ |
|
|
125
|
-
| [GitHub Copilot](https://code.visualstudio.com/) | ✅ |
|
|
126
|
-
| [Gemini CLI](https://github.com/google-gemini/gemini-cli) | ✅ |
|
|
127
|
-
| [Cursor](https://cursor.sh/) | ✅ |
|
|
128
|
-
| [opencode](https://opencode.ai/) |
|
|
129
|
-
| [Windsurf](https://windsurf.com/) |
|
|
130
|
-
| [Kilo Code](https://github.com/Kilo-Org/kilocode) |
|
|
131
|
-
| [Roo Code](https://roocode.com/) |
|
|
132
|
-
| [Codex CLI](https://github.com/openai/codex) |
|
|
133
|
-
| [Amp](https://ampcode.com/)
|
|
124
|
+
| [Claude Code](https://www.anthropic.com/claude-code) | ✅ | |
|
|
125
|
+
| [GitHub Copilot](https://code.visualstudio.com/) | ✅ | VSCode only |
|
|
126
|
+
| [Gemini CLI](https://github.com/google-gemini/gemini-cli) | ✅ | |
|
|
127
|
+
| [Cursor](https://cursor.sh/) | ✅ | |
|
|
128
|
+
| [opencode](https://opencode.ai/) | 🚧 | Testing |
|
|
129
|
+
| [Windsurf](https://windsurf.com/) | 🚧 | Testing |
|
|
130
|
+
| [Kilo Code](https://github.com/Kilo-Org/kilocode) | 🚧 | Testing |
|
|
131
|
+
| [Roo Code](https://roocode.com/) | 🚧 | Testing |
|
|
132
|
+
| [Codex CLI](https://github.com/openai/codex) | 🚧 | Testing |
|
|
133
|
+
| [Amp](https://ampcode.com/) | 🚧 | Testing |
|
|
134
134
|
|
|
135
135
|
Templates are designed to provide structure while remaining concise and AI-friendly.
|
|
136
136
|
|
|
@@ -102,14 +102,14 @@ describe('EnvironmentSelector', () => {
|
|
|
102
102
|
it('should display selected environments with checkmarks', () => {
|
|
103
103
|
selector.displaySelectionSummary(['cursor', 'claude']);
|
|
104
104
|
expect(consoleSpy).toHaveBeenCalledWith('\nSelected environments:');
|
|
105
|
-
expect(consoleSpy).toHaveBeenCalledWith('
|
|
106
|
-
expect(consoleSpy).toHaveBeenCalledWith('
|
|
105
|
+
expect(consoleSpy).toHaveBeenCalledWith(' Cursor');
|
|
106
|
+
expect(consoleSpy).toHaveBeenCalledWith(' Claude Code');
|
|
107
107
|
expect(consoleSpy).toHaveBeenCalledWith('');
|
|
108
108
|
});
|
|
109
109
|
it('should handle single environment selection', () => {
|
|
110
110
|
selector.displaySelectionSummary(['cursor']);
|
|
111
111
|
expect(consoleSpy).toHaveBeenCalledWith('\nSelected environments:');
|
|
112
|
-
expect(consoleSpy).toHaveBeenCalledWith('
|
|
112
|
+
expect(consoleSpy).toHaveBeenCalledWith(' Cursor');
|
|
113
113
|
expect(consoleSpy).toHaveBeenCalledWith('');
|
|
114
114
|
});
|
|
115
115
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnvironmentSelector.test.js","sourceRoot":"","sources":["../../../src/__tests__/lib/EnvironmentSelector.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"EnvironmentSelector.test.js","sourceRoot":"","sources":["../../../src/__tests__/lib/EnvironmentSelector.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -62,14 +62,14 @@ describe('PhaseSelector', () => {
|
|
|
62
62
|
it('should display selected phases with checkmarks', () => {
|
|
63
63
|
selector.displaySelectionSummary(['requirements', 'design']);
|
|
64
64
|
expect(consoleSpy).toHaveBeenCalledWith('\nSelected phases:');
|
|
65
|
-
expect(consoleSpy).toHaveBeenCalledWith('
|
|
66
|
-
expect(consoleSpy).toHaveBeenCalledWith('
|
|
65
|
+
expect(consoleSpy).toHaveBeenCalledWith(' Requirements & Problem Understanding');
|
|
66
|
+
expect(consoleSpy).toHaveBeenCalledWith(' System Design & Architecture');
|
|
67
67
|
expect(consoleSpy).toHaveBeenCalledWith('');
|
|
68
68
|
});
|
|
69
69
|
it('should handle single phase selection', () => {
|
|
70
70
|
selector.displaySelectionSummary(['requirements']);
|
|
71
71
|
expect(consoleSpy).toHaveBeenCalledWith('\nSelected phases:');
|
|
72
|
-
expect(consoleSpy).toHaveBeenCalledWith('
|
|
72
|
+
expect(consoleSpy).toHaveBeenCalledWith(' Requirements & Problem Understanding');
|
|
73
73
|
expect(consoleSpy).toHaveBeenCalledWith('');
|
|
74
74
|
});
|
|
75
75
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PhaseSelector.test.js","sourceRoot":"","sources":["../../../src/__tests__/lib/PhaseSelector.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"PhaseSelector.test.js","sourceRoot":"","sources":["../../../src/__tests__/lib/PhaseSelector.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplateManager.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/lib/TemplateManager.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,351 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplateManager.test.js","sourceRoot":"","sources":["../../../src/__tests__/lib/TemplateManager.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -53,7 +53,7 @@ class EnvironmentSelector {
|
|
|
53
53
|
}
|
|
54
54
|
console.log('\nSelected environments:');
|
|
55
55
|
selected.forEach(envId => {
|
|
56
|
-
console.log(`
|
|
56
|
+
console.log(` ${(0, env_1.getEnvironmentDisplayName)(envId)}`);
|
|
57
57
|
});
|
|
58
58
|
console.log('');
|
|
59
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnvironmentSelector.js","sourceRoot":"","sources":["../../src/lib/EnvironmentSelector.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAgC;AAEhC,qCAAoG;AAEpG,MAAa,mBAAmB;IAC9B,KAAK,CAAC,kBAAkB;QACtB,MAAM,YAAY,GAAG,IAAA,wBAAkB,GAAE,CAAC;QAE1C,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACvC,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,KAAK,EAAE,GAAG,CAAC,IAAuB;YAClC,KAAK,EAAE,GAAG,CAAC,IAAI;SAChB,CAAC,CAAC,CAAC;QAEJ,MAAM,OAAO,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;YACpC;gBACE,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,2EAA2E;gBACpF,OAAO;gBACP,QAAQ,EAAE,EAAE;gBACZ,QAAQ,EAAE,CAAC,KAAwB,EAAE,EAAE;oBACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACvB,OAAO,yCAAyC,CAAC;oBACnD,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;aACF;SACF,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,YAAY,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,SAA4B;QAChD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAA,+BAAyB,EAAC,EAAE,CAAC,CAAC,CAAC;QAEzE,MAAM,OAAO,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;YACpC;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,6EAA6E,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,8BAA8B;gBAC5I,OAAO,EAAE,KAAK;aACf;SACF,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,OAAO,CAAC;IACzB,CAAC;IAED,uBAAuB,CAAC,QAA2B;QACjD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACvB,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"EnvironmentSelector.js","sourceRoot":"","sources":["../../src/lib/EnvironmentSelector.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAgC;AAEhC,qCAAoG;AAEpG,MAAa,mBAAmB;IAC9B,KAAK,CAAC,kBAAkB;QACtB,MAAM,YAAY,GAAG,IAAA,wBAAkB,GAAE,CAAC;QAE1C,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACvC,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,KAAK,EAAE,GAAG,CAAC,IAAuB;YAClC,KAAK,EAAE,GAAG,CAAC,IAAI;SAChB,CAAC,CAAC,CAAC;QAEJ,MAAM,OAAO,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;YACpC;gBACE,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,2EAA2E;gBACpF,OAAO;gBACP,QAAQ,EAAE,EAAE;gBACZ,QAAQ,EAAE,CAAC,KAAwB,EAAE,EAAE;oBACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACvB,OAAO,yCAAyC,CAAC;oBACnD,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;aACF;SACF,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,YAAY,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,SAA4B;QAChD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAA,+BAAyB,EAAC,EAAE,CAAC,CAAC,CAAC;QAEzE,MAAM,OAAO,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;YACpC;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,6EAA6E,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,8BAA8B;gBAC5I,OAAO,EAAE,KAAK;aACf;SACF,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,OAAO,CAAC;IACzB,CAAC;IAED,uBAAuB,CAAC,QAA2B;QACjD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,IAAA,+BAAyB,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;CACF;AA5DD,kDA4DC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PhaseSelector.js","sourceRoot":"","sources":["../../src/lib/PhaseSelector.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAgC;AAChC,oCAAwE;AAExE,MAAa,aAAa;IACxB,KAAK,CAAC,YAAY,CAAC,GAAa,EAAE,MAAe;QAC/C,IAAI,cAAc,GAAY,EAAE,CAAC;QAEjC,IAAI,GAAG,EAAE,CAAC;YACR,cAAc,GAAG,CAAC,GAAG,wBAAgB,CAAC,CAAC;QACzC,CAAC;aAAM,IAAI,MAAM,EAAE,CAAC;YAClB,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,cAAc,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACrD,CAAC;QAED,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACnC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;IAEO,KAAK,CAAC,oBAAoB;QAChC,MAAM,OAAO,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;YACpC;gBACE,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,6DAA6D;gBACtE,OAAO,EAAE,wBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACtC,IAAI,EAAE,2BAAmB,CAAC,KAAK,CAAC;oBAChC,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;aACJ;SACF,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,MAAM,CAAC;IACxB,CAAC;IAEO,gBAAgB,CAAC,MAAc;QACrC,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAY,CAAC;IACzD,CAAC;IACD,uBAAuB,CAAC,QAAiB;QACvC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACnC,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACvB,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"PhaseSelector.js","sourceRoot":"","sources":["../../src/lib/PhaseSelector.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAgC;AAChC,oCAAwE;AAExE,MAAa,aAAa;IACxB,KAAK,CAAC,YAAY,CAAC,GAAa,EAAE,MAAe;QAC/C,IAAI,cAAc,GAAY,EAAE,CAAC;QAEjC,IAAI,GAAG,EAAE,CAAC;YACR,cAAc,GAAG,CAAC,GAAG,wBAAgB,CAAC,CAAC;QACzC,CAAC;aAAM,IAAI,MAAM,EAAE,CAAC;YAClB,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,cAAc,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACrD,CAAC;QAED,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACnC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;IAEO,KAAK,CAAC,oBAAoB;QAChC,MAAM,OAAO,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;YACpC;gBACE,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,6DAA6D;gBACtE,OAAO,EAAE,wBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACtC,IAAI,EAAE,2BAAmB,CAAC,KAAK,CAAC;oBAChC,KAAK,EAAE,KAAK;oBACZ,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;aACJ;SACF,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,MAAM,CAAC;IACxB,CAAC;IAEO,gBAAgB,CAAC,MAAc;QACrC,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAY,CAAC;IACzD,CAAC;IACD,uBAAuB,CAAC,QAAiB;QACvC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACnC,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,2BAAmB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;CACF;AApDD,sCAoDC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Phase, EnvironmentCode } from
|
|
1
|
+
import { Phase, EnvironmentCode } from "../types";
|
|
2
2
|
export declare class TemplateManager {
|
|
3
3
|
private templatesDir;
|
|
4
4
|
private targetDir;
|
|
@@ -8,6 +8,8 @@ export declare class TemplateManager {
|
|
|
8
8
|
setupMultipleEnvironments(environmentIds: EnvironmentCode[]): Promise<string[]>;
|
|
9
9
|
checkEnvironmentExists(envId: EnvironmentCode): Promise<boolean>;
|
|
10
10
|
private setupSingleEnvironment;
|
|
11
|
+
private copyCommands;
|
|
11
12
|
private copyCursorSpecificFiles;
|
|
13
|
+
private copyGeminiSpecificFiles;
|
|
12
14
|
}
|
|
13
15
|
//# sourceMappingURL=TemplateManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemplateManager.d.ts","sourceRoot":"","sources":["../../src/lib/TemplateManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,eAAe,EAAyB,MAAM,UAAU,CAAC;AAGzE,qBAAa,eAAe;IAC1B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,GAAE,MAAsB;IAKvC,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"TemplateManager.d.ts","sourceRoot":"","sources":["../../src/lib/TemplateManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,eAAe,EAAyB,MAAM,UAAU,CAAC;AAGzE,qBAAa,eAAe;IAC1B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,GAAE,MAAsB;IAKvC,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAWhD,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;IAW1C,yBAAyB,CAC7B,cAAc,EAAE,eAAe,EAAE,GAChC,OAAO,CAAC,MAAM,EAAE,CAAC;IAsBd,sBAAsB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;YAgBxD,sBAAsB;YAsCtB,YAAY;YA+BZ,uBAAuB;YAoBvB,uBAAuB;CAmBtC"}
|