ai-devkit 0.4.1 → 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.
- package/CHANGELOG.md +6 -0
- package/README.md +11 -10
- 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 +8 -1
- package/dist/lib/TemplateManager.d.ts.map +1 -1
- package/dist/lib/TemplateManager.js +71 -23
- package/dist/lib/TemplateManager.js.map +1 -1
- package/dist/types.d.ts +3 -1
- 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 +10 -2
- package/dist/util/env.js.map +1 -1
- package/package.json +2 -1
- package/templates/commands/capture-knowledge.md +4 -0
- package/templates/commands/check-implementation.md +4 -0
- package/templates/commands/code-review.md +4 -0
- package/templates/commands/debug.md +4 -0
- package/templates/commands/execute-plan.md +4 -0
- package/templates/commands/new-requirement.md +4 -0
- package/templates/commands/review-design.md +4 -0
- package/templates/commands/review-requirements.md +4 -0
- package/templates/commands/simplify-implementation.md +148 -0
- package/templates/commands/update-planning.md +4 -0
- package/templates/commands/writing-test.md +4 -0
- package/web/content/pages/vision.md +2 -0
- package/dist/__tests__/lib/Config.test.d.ts +0 -2
- package/dist/__tests__/lib/Config.test.d.ts.map +0 -1
- package/dist/__tests__/lib/Config.test.js +0 -281
- package/dist/__tests__/lib/Config.test.js.map +0 -1
- package/dist/__tests__/lib/EnvironmentSelector.test.d.ts +0 -2
- package/dist/__tests__/lib/EnvironmentSelector.test.d.ts.map +0 -1
- package/dist/__tests__/lib/EnvironmentSelector.test.js +0 -117
- package/dist/__tests__/lib/EnvironmentSelector.test.js.map +0 -1
- package/dist/__tests__/lib/PhaseSelector.test.d.ts +0 -2
- package/dist/__tests__/lib/PhaseSelector.test.d.ts.map +0 -1
- package/dist/__tests__/lib/PhaseSelector.test.js +0 -77
- package/dist/__tests__/lib/PhaseSelector.test.js.map +0 -1
- package/dist/__tests__/util/env.test.d.ts +0 -2
- package/dist/__tests__/util/env.test.d.ts.map +0 -1
- package/dist/__tests__/util/env.test.js +0 -166
- package/dist/__tests__/util/env.test.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,12 @@ 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
|
+
## [0.4.2] - 2025-11-05
|
|
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
|
+
|
|
8
14
|
## [0.4.0] - 2025-10-31
|
|
9
15
|
|
|
10
16
|
### Added
|
package/README.md
CHANGED
|
@@ -121,16 +121,17 @@ 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
|
-
| [
|
|
130
|
-
| [
|
|
131
|
-
| [
|
|
132
|
-
| [
|
|
133
|
-
| [
|
|
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/) | ✅ | |
|
|
129
|
+
| [Antigravity](https://antigravity.google/) | ✅ | |
|
|
130
|
+
| [Windsurf](https://windsurf.com/) | 🚧 | Testing |
|
|
131
|
+
| [Kilo Code](https://github.com/Kilo-Org/kilocode) | 🚧 | Testing |
|
|
132
|
+
| [Roo Code](https://roocode.com/) | 🚧 | Testing |
|
|
133
|
+
| [Codex CLI](https://github.com/openai/codex) | 🚧 | Testing |
|
|
134
|
+
| [Amp](https://ampcode.com/) | 🚧 | Testing |
|
|
134
135
|
|
|
135
136
|
Templates are designed to provide structure while remaining concise and AI-friendly.
|
|
136
137
|
|
|
@@ -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,13 @@ 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;
|
|
14
|
+
/**
|
|
15
|
+
* Generate TOML content for Gemini commands.
|
|
16
|
+
* Uses triple quotes for multi-line strings.
|
|
17
|
+
*/
|
|
18
|
+
private generateTomlContent;
|
|
12
19
|
}
|
|
13
20
|
//# sourceMappingURL=TemplateManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemplateManager.d.ts","sourceRoot":"","sources":["../../src/lib/TemplateManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TemplateManager.d.ts","sourceRoot":"","sources":["../../src/lib/TemplateManager.ts"],"names":[],"mappings":"AAGA,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;IA8BrC;;;OAGG;IACH,OAAO,CAAC,mBAAmB;CAS5B"}
|
|
@@ -32,26 +32,30 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
32
32
|
return result;
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
35
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
39
|
exports.TemplateManager = void 0;
|
|
37
40
|
const fs = __importStar(require("fs-extra"));
|
|
38
41
|
const path = __importStar(require("path"));
|
|
42
|
+
const gray_matter_1 = __importDefault(require("gray-matter"));
|
|
39
43
|
const env_1 = require("../util/env");
|
|
40
44
|
class TemplateManager {
|
|
41
45
|
constructor(targetDir = process.cwd()) {
|
|
42
|
-
this.templatesDir = path.join(__dirname,
|
|
46
|
+
this.templatesDir = path.join(__dirname, "../../templates");
|
|
43
47
|
this.targetDir = targetDir;
|
|
44
48
|
}
|
|
45
49
|
async copyPhaseTemplate(phase) {
|
|
46
|
-
const sourceFile = path.join(this.templatesDir,
|
|
47
|
-
const targetDir = path.join(this.targetDir,
|
|
48
|
-
const targetFile = path.join(targetDir,
|
|
50
|
+
const sourceFile = path.join(this.templatesDir, "phases", `${phase}.md`);
|
|
51
|
+
const targetDir = path.join(this.targetDir, "docs", "ai", phase);
|
|
52
|
+
const targetFile = path.join(targetDir, "README.md");
|
|
49
53
|
await fs.ensureDir(targetDir);
|
|
50
54
|
await fs.copy(sourceFile, targetFile);
|
|
51
55
|
return targetFile;
|
|
52
56
|
}
|
|
53
57
|
async fileExists(phase) {
|
|
54
|
-
const targetFile = path.join(this.targetDir,
|
|
58
|
+
const targetFile = path.join(this.targetDir, "docs", "ai", phase, "README.md");
|
|
55
59
|
return fs.pathExists(targetFile);
|
|
56
60
|
}
|
|
57
61
|
async setupMultipleEnvironments(environmentIds) {
|
|
@@ -87,7 +91,7 @@ class TemplateManager {
|
|
|
87
91
|
async setupSingleEnvironment(env) {
|
|
88
92
|
const copiedFiles = [];
|
|
89
93
|
try {
|
|
90
|
-
const contextSource = path.join(this.templatesDir,
|
|
94
|
+
const contextSource = path.join(this.templatesDir, "env", "base.md");
|
|
91
95
|
const contextTarget = path.join(this.targetDir, env.contextFileName);
|
|
92
96
|
if (await fs.pathExists(contextSource)) {
|
|
93
97
|
await fs.copy(contextSource, contextTarget);
|
|
@@ -96,21 +100,18 @@ class TemplateManager {
|
|
|
96
100
|
else {
|
|
97
101
|
console.warn(`Warning: Context file not found: ${contextSource}`);
|
|
98
102
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
if (await fs.pathExists(commandsSourceDir)) {
|
|
102
|
-
await fs.ensureDir(commandsTargetDir);
|
|
103
|
-
await fs.copy(commandsSourceDir, commandsTargetDir);
|
|
104
|
-
const commandFiles = await fs.readdir(commandsTargetDir);
|
|
105
|
-
commandFiles.forEach(file => {
|
|
106
|
-
copiedFiles.push(path.join(commandsTargetDir, file));
|
|
107
|
-
});
|
|
103
|
+
if (!env.isCustomCommandPath) {
|
|
104
|
+
await this.copyCommands(env, copiedFiles);
|
|
108
105
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
106
|
+
switch (env.code) {
|
|
107
|
+
case "cursor":
|
|
108
|
+
await this.copyCursorSpecificFiles(copiedFiles);
|
|
109
|
+
break;
|
|
110
|
+
case "gemini":
|
|
111
|
+
await this.copyGeminiSpecificFiles(copiedFiles);
|
|
112
|
+
break;
|
|
113
|
+
default:
|
|
114
|
+
break;
|
|
114
115
|
}
|
|
115
116
|
}
|
|
116
117
|
catch (error) {
|
|
@@ -119,18 +120,65 @@ class TemplateManager {
|
|
|
119
120
|
}
|
|
120
121
|
return copiedFiles;
|
|
121
122
|
}
|
|
123
|
+
async copyCommands(env, copiedFiles) {
|
|
124
|
+
const commandsSourceDir = path.join(this.templatesDir, "commands");
|
|
125
|
+
const commandExtension = env.customCommandExtension || ".md";
|
|
126
|
+
const commandsTargetDir = path.join(this.targetDir, env.commandPath);
|
|
127
|
+
if (await fs.pathExists(commandsSourceDir)) {
|
|
128
|
+
await fs.ensureDir(commandsTargetDir);
|
|
129
|
+
const commandFiles = await fs.readdir(commandsSourceDir);
|
|
130
|
+
await Promise.all(commandFiles
|
|
131
|
+
.filter((file) => file.endsWith(".md"))
|
|
132
|
+
.map(async (file) => {
|
|
133
|
+
const targetFile = file.replace('.md', commandExtension);
|
|
134
|
+
await fs.copy(path.join(commandsSourceDir, file), path.join(commandsTargetDir, targetFile));
|
|
135
|
+
copiedFiles.push(path.join(commandsTargetDir, targetFile));
|
|
136
|
+
}));
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
console.warn(`Warning: Commands directory not found: ${commandsSourceDir}`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
122
142
|
async copyCursorSpecificFiles(copiedFiles) {
|
|
123
|
-
const rulesSourceDir = path.join(this.templatesDir,
|
|
124
|
-
const rulesTargetDir = path.join(this.targetDir,
|
|
143
|
+
const rulesSourceDir = path.join(this.templatesDir, "env", "cursor", "rules");
|
|
144
|
+
const rulesTargetDir = path.join(this.targetDir, ".cursor", "rules");
|
|
125
145
|
if (await fs.pathExists(rulesSourceDir)) {
|
|
126
146
|
await fs.ensureDir(rulesTargetDir);
|
|
127
147
|
await fs.copy(rulesSourceDir, rulesTargetDir);
|
|
128
148
|
const ruleFiles = await fs.readdir(rulesSourceDir);
|
|
129
|
-
ruleFiles.forEach(file => {
|
|
149
|
+
ruleFiles.forEach((file) => {
|
|
130
150
|
copiedFiles.push(path.join(rulesTargetDir, file));
|
|
131
151
|
});
|
|
132
152
|
}
|
|
133
153
|
}
|
|
154
|
+
async copyGeminiSpecificFiles(copiedFiles) {
|
|
155
|
+
const commandFiles = await fs.readdir(path.join(this.templatesDir, "commands"));
|
|
156
|
+
const commandTargetDir = path.join(this.targetDir, ".gemini", "commands");
|
|
157
|
+
await fs.ensureDir(commandTargetDir);
|
|
158
|
+
await Promise.all(commandFiles
|
|
159
|
+
.filter((file) => file.endsWith(".md"))
|
|
160
|
+
.map(async (file) => {
|
|
161
|
+
const mdContent = await fs.readFile(path.join(this.templatesDir, "commands", file), "utf-8");
|
|
162
|
+
const { data, content } = (0, gray_matter_1.default)(mdContent);
|
|
163
|
+
const description = data.description || "";
|
|
164
|
+
const tomlContent = this.generateTomlContent(description, content.trim());
|
|
165
|
+
const tomlFile = file.replace(".md", ".toml");
|
|
166
|
+
await fs.writeFile(path.join(commandTargetDir, tomlFile), tomlContent);
|
|
167
|
+
copiedFiles.push(path.join(commandTargetDir, tomlFile));
|
|
168
|
+
}));
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Generate TOML content for Gemini commands.
|
|
172
|
+
* Uses triple quotes for multi-line strings.
|
|
173
|
+
*/
|
|
174
|
+
generateTomlContent(description, prompt) {
|
|
175
|
+
// Escape any triple quotes in the content
|
|
176
|
+
const escapedDescription = description.replace(/'''/g, "'''");
|
|
177
|
+
const escapedPrompt = prompt.replace(/'''/g, "'''");
|
|
178
|
+
return `description='''${escapedDescription}'''
|
|
179
|
+
prompt='''${escapedPrompt}'''
|
|
180
|
+
`;
|
|
181
|
+
}
|
|
134
182
|
}
|
|
135
183
|
exports.TemplateManager = TemplateManager;
|
|
136
184
|
//# sourceMappingURL=TemplateManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemplateManager.js","sourceRoot":"","sources":["../../src/lib/TemplateManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TemplateManager.js","sourceRoot":"","sources":["../../src/lib/TemplateManager.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -5,8 +5,10 @@ export interface EnvironmentDefinition {
|
|
|
5
5
|
contextFileName: string;
|
|
6
6
|
commandPath: string;
|
|
7
7
|
description?: string;
|
|
8
|
+
isCustomCommandPath?: boolean;
|
|
9
|
+
customCommandExtension?: string;
|
|
8
10
|
}
|
|
9
|
-
export type EnvironmentCode = 'cursor' | 'claude' | 'github' | 'gemini' | 'codex' | 'windsurf' | 'kilocode' | 'amp' | 'opencode' | 'roo';
|
|
11
|
+
export type EnvironmentCode = 'cursor' | 'claude' | 'github' | 'gemini' | 'codex' | 'windsurf' | 'kilocode' | 'amp' | 'opencode' | 'roo' | 'antigravity';
|
|
10
12
|
export interface DevKitConfig {
|
|
11
13
|
version: string;
|
|
12
14
|
environments: EnvironmentCode[];
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GACb,cAAc,GACd,QAAQ,GACR,UAAU,GACV,gBAAgB,GAChB,SAAS,GACT,YAAY,GACZ,YAAY,CAAC;AAEjB,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GACb,cAAc,GACd,QAAQ,GACR,UAAU,GACV,gBAAgB,GAChB,SAAS,GACT,YAAY,GACZ,YAAY,CAAC;AAEjB,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,KAAK,GAAG,UAAU,GAAG,KAAK,GAAG,aAAa,CAAC;AAEzJ,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,iBAAiB,EAAE,KAAK,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,EAQnC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAQrD,CAAC"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAmCa,QAAA,gBAAgB,GAAY;IACvC,cAAc;IACd,QAAQ;IACR,UAAU;IACV,gBAAgB;IAChB,SAAS;IACT,YAAY;IACZ,YAAY;CACb,CAAC;AAEW,QAAA,mBAAmB,GAA0B;IACxD,YAAY,EAAE,sCAAsC;IACpD,MAAM,EAAE,8BAA8B;IACtC,QAAQ,EAAE,mCAAmC;IAC7C,cAAc,EAAE,sBAAsB;IACtC,OAAO,EAAE,kBAAkB;IAC3B,UAAU,EAAE,qBAAqB;IACjC,UAAU,EAAE,4BAA4B;CACzC,CAAC"}
|
package/dist/util/env.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/util/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAErE,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,eAAe,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/util/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAErE,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAqElF,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,eAAe,EAA8D,CAAC;AAElH,wBAAgB,kBAAkB,IAAI,qBAAqB,EAAE,CAE5D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,qBAAqB,GAAG,SAAS,CAE1F;AAED,wBAAgB,sBAAsB,IAAI,eAAe,EAAE,CAE1D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,qBAAqB,EAAE,CAExF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,eAAe,CAE9E;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAG1E;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CAiB9E"}
|
package/dist/util/env.js
CHANGED
|
@@ -25,13 +25,15 @@ exports.ENVIRONMENT_DEFINITIONS = {
|
|
|
25
25
|
code: 'github',
|
|
26
26
|
name: 'GitHub Copilot',
|
|
27
27
|
contextFileName: 'AGENTS.md',
|
|
28
|
-
commandPath: '.github/
|
|
28
|
+
commandPath: '.github/prompts',
|
|
29
|
+
customCommandExtension: '.prompt.md',
|
|
29
30
|
},
|
|
30
31
|
gemini: {
|
|
31
32
|
code: 'gemini',
|
|
32
33
|
name: 'Google Gemini',
|
|
33
|
-
contextFileName: '
|
|
34
|
+
contextFileName: 'GEMINI.md',
|
|
34
35
|
commandPath: '.gemini/commands',
|
|
36
|
+
isCustomCommandPath: true,
|
|
35
37
|
},
|
|
36
38
|
codex: {
|
|
37
39
|
code: 'codex',
|
|
@@ -68,6 +70,12 @@ exports.ENVIRONMENT_DEFINITIONS = {
|
|
|
68
70
|
name: 'Roo Code',
|
|
69
71
|
contextFileName: 'AGENTS.md',
|
|
70
72
|
commandPath: '.roo/commands',
|
|
73
|
+
},
|
|
74
|
+
antigravity: {
|
|
75
|
+
code: 'antigravity',
|
|
76
|
+
name: 'Antigravity',
|
|
77
|
+
contextFileName: 'AGENTS.md',
|
|
78
|
+
commandPath: '.agent/workflows',
|
|
71
79
|
}
|
|
72
80
|
};
|
|
73
81
|
exports.ALL_ENVIRONMENT_CODES = Object.keys(exports.ENVIRONMENT_DEFINITIONS);
|
package/dist/util/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/util/env.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/util/env.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ai-devkit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "A CLI toolkit for AI-assisted software development with phase templates and environment setup",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
"chalk": "^4.1.2",
|
|
30
30
|
"commander": "^11.1.0",
|
|
31
31
|
"fs-extra": "^11.2.0",
|
|
32
|
+
"gray-matter": "^4.0.3",
|
|
32
33
|
"inquirer": "^8.2.6",
|
|
33
34
|
"yaml": "^2.3.4"
|
|
34
35
|
},
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Compare implementation with design and requirements docs to ensure alignment.
|
|
3
|
+
---
|
|
4
|
+
|
|
1
5
|
Compare the current implementation with the design in docs/ai/design/ and requirements in docs/ai/requirements/. Please follow this structured review:
|
|
2
6
|
|
|
3
7
|
1. Ask me for:
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Perform a local code review before pushing changes, ensuring alignment with design docs and best practices.
|
|
3
|
+
---
|
|
4
|
+
|
|
1
5
|
# Local Code Review Assistant
|
|
2
6
|
|
|
3
7
|
You are helping me perform a local code review **before** I push changes. Please follow this structured workflow.
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Guide me through debugging a code issue by clarifying expectations, identifying gaps, and agreeing on a fix plan before changing code.
|
|
3
|
+
---
|
|
4
|
+
|
|
1
5
|
# Local Debugging Assistant
|
|
2
6
|
|
|
3
7
|
Help me debug an issue by clarifying expectations, identifying gaps, and agreeing on a fix plan before changing code.
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Add new feature/requirement documentation and guide me through the development workflow from requirements to testing.
|
|
3
|
+
---
|
|
4
|
+
|
|
1
5
|
I want to add a new feature/requirement. Please guide me through the complete development workflow:
|
|
2
6
|
|
|
3
7
|
## Step 1: Capture Requirement
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Review the design documentation for a feature to ensure completeness and accuracy.
|
|
3
|
+
---
|
|
4
|
+
|
|
1
5
|
Review the design documentation in docs/ai/design/feature-{name}.md (and the project-level README if relevant). Summarize:
|
|
2
6
|
- Architecture overview (ensure mermaid diagram is present and accurate)
|
|
3
7
|
- Key components and their responsibilities
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Review the requirements documentation for a feature to ensure completeness and alignment with project standards.
|
|
3
|
+
---
|
|
4
|
+
|
|
1
5
|
Please review `docs/ai/requirements/feature-{name}.md` and the project-level template `docs/ai/requirements/README.md` to ensure structure and content alignment. Summarize:
|
|
2
6
|
- Core problem statement and affected users
|
|
3
7
|
- Goals, non-goals, and success criteria
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Analyze and simplify existing implementations to reduce complexity, improve maintainability, and enhance scalability.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Simplify Implementation Assistant
|
|
6
|
+
|
|
7
|
+
You are an expert engineer focused on reducing complexity and improving scalability. Help me simplify an existing implementation while maintaining or improving its functionality.
|
|
8
|
+
|
|
9
|
+
## Step 1: Gather Context
|
|
10
|
+
Ask me for:
|
|
11
|
+
- Target file(s) or component(s) to simplify
|
|
12
|
+
- Current pain points (hard to understand, maintain, or extend?)
|
|
13
|
+
- Performance or scalability concerns
|
|
14
|
+
- Any constraints (backward compatibility, API stability, deadlines)
|
|
15
|
+
- Relevant design docs or requirements
|
|
16
|
+
|
|
17
|
+
If available, request the current implementation:
|
|
18
|
+
```bash
|
|
19
|
+
# For a specific file
|
|
20
|
+
cat <file_path>
|
|
21
|
+
|
|
22
|
+
# For recent changes
|
|
23
|
+
git diff HEAD~5 --stat
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Step 2: Analyze Current Complexity
|
|
27
|
+
For each target file or component:
|
|
28
|
+
1. **Identify complexity sources:**
|
|
29
|
+
- Deep nesting or long functions
|
|
30
|
+
- Duplicate or redundant code
|
|
31
|
+
- Unclear abstractions or leaky interfaces
|
|
32
|
+
- Tightly coupled components
|
|
33
|
+
- Over-engineering or premature optimization
|
|
34
|
+
- Magic numbers, hardcoded values, or scattered configuration
|
|
35
|
+
|
|
36
|
+
2. **Measure impact:**
|
|
37
|
+
- Lines of code that could be reduced
|
|
38
|
+
- Number of dependencies that could be removed
|
|
39
|
+
- Cognitive load for future maintainers
|
|
40
|
+
|
|
41
|
+
3. **Assess scalability blockers:**
|
|
42
|
+
- Single points of failure
|
|
43
|
+
- Synchronous operations that should be async
|
|
44
|
+
- Missing caching or memoization opportunities
|
|
45
|
+
- Inefficient data structures or algorithms
|
|
46
|
+
|
|
47
|
+
## Step 3: Apply Readability Principles
|
|
48
|
+
|
|
49
|
+
**Core Philosophy: Good code reads like a good book — naturally, from left to right, top to bottom.**
|
|
50
|
+
|
|
51
|
+
When simplifying, prioritize readability over brevity. The goal is not to write the shortest code, but to write code that communicates intent clearly.
|
|
52
|
+
|
|
53
|
+
### ✅ DO: Embrace Readability
|
|
54
|
+
- **Linear flow:** Code should tell a story. A reader should understand the logic by reading top-to-bottom without jumping around.
|
|
55
|
+
- **Explicit over implicit:** Favor clear, explicit code over clever shortcuts that require mental decoding.
|
|
56
|
+
- **Meaningful names:** Variables, functions, and classes should describe their purpose without needing comments.
|
|
57
|
+
- **Consistent patterns:** Use the same patterns throughout the codebase so readers build familiarity.
|
|
58
|
+
- **Appropriate abstraction level:** Each function should operate at one level of abstraction.
|
|
59
|
+
- **White space and grouping:** Use blank lines to separate logical blocks, like paragraphs in prose.
|
|
60
|
+
|
|
61
|
+
### ❌ AVOID: Over-Optimization for Brevity
|
|
62
|
+
Reducing line count is NOT the goal. These patterns often harm readability:
|
|
63
|
+
|
|
64
|
+
| Anti-Pattern | Problem | Better Alternative |
|
|
65
|
+
|--------------|---------|--------------------|
|
|
66
|
+
| **Nested ternaries** | `a ? b ? c : d : e` is cryptic | Use explicit if/else blocks |
|
|
67
|
+
| **Chained one-liners** | `x.map().filter().reduce().flat()` is hard to debug | Break into named intermediate steps |
|
|
68
|
+
| **Clever bitwise tricks** | `n & 1` instead of `n % 2 === 1` obscures intent | Use readable arithmetic unless performance-critical |
|
|
69
|
+
| **Overly short variable names** | `const x = getData(); const y = x.filter(z => z.a);` | Use descriptive names like `users`, `activeUsers` |
|
|
70
|
+
| **Implicit returns everywhere** | Arrow functions without braces hide complexity | Add braces and explicit returns for complex logic |
|
|
71
|
+
| **Magic one-liners** | Regex or reduce expressions that "do everything" | Split into documented steps |
|
|
72
|
+
| **Premature DRY** | Forcing abstraction to avoid 2-3 lines of duplication | Some duplication is clearer than wrong abstraction |
|
|
73
|
+
|
|
74
|
+
### 📖 The "Reading Test"
|
|
75
|
+
For each simplification, ask:
|
|
76
|
+
1. Can a new team member understand this in under 30 seconds?
|
|
77
|
+
2. Does the code flow naturally without needing to jump to other files?
|
|
78
|
+
3. Are there any "wait, what does this do?" moments?
|
|
79
|
+
4. Would this code still be clear 6 months from now?
|
|
80
|
+
|
|
81
|
+
If the answer is "no" to any of these, the code needs more clarity, not more optimization.
|
|
82
|
+
|
|
83
|
+
## Step 4: Propose Simplifications
|
|
84
|
+
For each identified issue, suggest concrete improvements:
|
|
85
|
+
|
|
86
|
+
| Category | Pattern |
|
|
87
|
+
|----------|---------|
|
|
88
|
+
| **Extract** | Long functions → smaller, focused functions |
|
|
89
|
+
| **Consolidate** | Duplicate code → shared utilities or base classes |
|
|
90
|
+
| **Flatten** | Deep nesting → early returns, guard clauses |
|
|
91
|
+
| **Decouple** | Tight coupling → dependency injection, interfaces |
|
|
92
|
+
| **Remove** | Dead code, unused features, excessive abstractions |
|
|
93
|
+
| **Replace** | Complex logic → built-in language/library features |
|
|
94
|
+
| **Defer** | Premature optimization → measure-first approach |
|
|
95
|
+
|
|
96
|
+
## Step 5: Prioritize Changes
|
|
97
|
+
Rank suggestions by:
|
|
98
|
+
1. **High impact, low risk** — Do first
|
|
99
|
+
2. **High impact, higher risk** — Plan carefully
|
|
100
|
+
3. **Low impact, low risk** — Quick wins if time permits
|
|
101
|
+
4. **Low impact, high risk** — Skip or defer
|
|
102
|
+
|
|
103
|
+
For each change, specify:
|
|
104
|
+
- Before/after code snippets
|
|
105
|
+
- Risk level (breaking change? needs migration?)
|
|
106
|
+
- Testing requirements
|
|
107
|
+
- Estimated effort
|
|
108
|
+
|
|
109
|
+
## Step 6: Create Simplification Plan
|
|
110
|
+
Provide a structured action plan:
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
### Simplification Summary
|
|
114
|
+
- Total suggestions: [count]
|
|
115
|
+
- Estimated LOC reduction: [estimate]
|
|
116
|
+
- Complexity score before/after: [if measurable]
|
|
117
|
+
|
|
118
|
+
### Prioritized Actions
|
|
119
|
+
1. **[Component/Function Name]**
|
|
120
|
+
- Issue: ...
|
|
121
|
+
- Solution: ...
|
|
122
|
+
- Risk: Low/Medium/High
|
|
123
|
+
- Effort: S/M/L
|
|
124
|
+
|
|
125
|
+
2. ... (repeat)
|
|
126
|
+
|
|
127
|
+
### Recommended Order
|
|
128
|
+
1. [ ] [First change - safest, unlocks others]
|
|
129
|
+
2. [ ] [Second change]
|
|
130
|
+
3. [ ] ...
|
|
131
|
+
|
|
132
|
+
### Post-Simplification Checklist
|
|
133
|
+
- [ ] Run existing tests to verify no regressions
|
|
134
|
+
- [ ] Add tests for any new helper functions
|
|
135
|
+
- [ ] Update documentation if interfaces changed
|
|
136
|
+
- [ ] Review with team before merging larger refactors
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## Step 7: Scalability Recommendations
|
|
140
|
+
Beyond immediate simplification, suggest patterns for future scalability:
|
|
141
|
+
- Modular architecture improvements
|
|
142
|
+
- Caching strategies
|
|
143
|
+
- Async/parallel processing opportunities
|
|
144
|
+
- Configuration externalization
|
|
145
|
+
- Feature flags for gradual rollouts
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
Let me know when you're ready to simplify your implementation.
|