ai-devkit 0.2.0 → 0.4.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 (106) hide show
  1. package/CHANGELOG.md +11 -1
  2. package/README.md +20 -87
  3. package/dist/__tests__/lib/Config.test.d.ts +2 -0
  4. package/dist/__tests__/lib/Config.test.d.ts.map +1 -0
  5. package/dist/__tests__/lib/Config.test.js +281 -0
  6. package/dist/__tests__/lib/Config.test.js.map +1 -0
  7. package/dist/__tests__/lib/EnvironmentSelector.test.d.ts +2 -0
  8. package/dist/__tests__/lib/EnvironmentSelector.test.d.ts.map +1 -0
  9. package/dist/__tests__/lib/EnvironmentSelector.test.js +117 -0
  10. package/dist/__tests__/lib/EnvironmentSelector.test.js.map +1 -0
  11. package/dist/__tests__/lib/PhaseSelector.test.d.ts +2 -0
  12. package/dist/__tests__/lib/PhaseSelector.test.d.ts.map +1 -0
  13. package/dist/__tests__/lib/PhaseSelector.test.js +77 -0
  14. package/dist/__tests__/lib/PhaseSelector.test.js.map +1 -0
  15. package/dist/__tests__/util/env.test.d.ts +2 -0
  16. package/dist/__tests__/util/env.test.d.ts.map +1 -0
  17. package/dist/__tests__/util/env.test.js +166 -0
  18. package/dist/__tests__/util/env.test.js.map +1 -0
  19. package/dist/commands/init.d.ts +2 -2
  20. package/dist/commands/init.d.ts.map +1 -1
  21. package/dist/commands/init.js +54 -73
  22. package/dist/commands/init.js.map +1 -1
  23. package/dist/commands/phase.d.ts.map +1 -1
  24. package/dist/commands/phase.js +1 -5
  25. package/dist/commands/phase.js.map +1 -1
  26. package/dist/lib/Config.d.ts +5 -2
  27. package/dist/lib/Config.d.ts.map +1 -1
  28. package/dist/lib/Config.js +18 -3
  29. package/dist/lib/Config.js.map +1 -1
  30. package/dist/lib/EnvironmentSelector.d.ts +7 -0
  31. package/dist/lib/EnvironmentSelector.d.ts.map +1 -0
  32. package/dist/lib/EnvironmentSelector.js +62 -0
  33. package/dist/lib/EnvironmentSelector.js.map +1 -0
  34. package/dist/lib/PhaseSelector.d.ts +8 -0
  35. package/dist/lib/PhaseSelector.d.ts.map +1 -0
  36. package/dist/lib/PhaseSelector.js +58 -0
  37. package/dist/lib/PhaseSelector.js.map +1 -0
  38. package/dist/lib/TemplateManager.d.ts +5 -5
  39. package/dist/lib/TemplateManager.d.ts.map +1 -1
  40. package/dist/lib/TemplateManager.js +73 -66
  41. package/dist/lib/TemplateManager.js.map +1 -1
  42. package/dist/types.d.ts +9 -2
  43. package/dist/types.d.ts.map +1 -1
  44. package/dist/types.js.map +1 -1
  45. package/dist/util/env.d.ts +11 -0
  46. package/dist/util/env.d.ts.map +1 -0
  47. package/dist/util/env.js +109 -0
  48. package/dist/util/env.js.map +1 -0
  49. package/jest.config.js +22 -0
  50. package/package.json +16 -11
  51. package/templates/commands/capture-knowledge.md +46 -0
  52. package/templates/commands/debug.md +45 -0
  53. package/templates/{env/cursor/commands → commands}/new-requirement.md +1 -1
  54. package/web/.nojekyll +2 -0
  55. package/web/CNAME +1 -0
  56. package/web/README.md +100 -0
  57. package/web/app/favicon.ico +0 -0
  58. package/web/app/globals.css +122 -0
  59. package/web/app/layout.tsx +106 -0
  60. package/web/app/page.tsx +119 -0
  61. package/web/app/roadmap/page.tsx +150 -0
  62. package/web/app/robots.ts +16 -0
  63. package/web/app/sitemap.ts +46 -0
  64. package/web/app/vision/page.tsx +49 -0
  65. package/web/components/Footer.tsx +81 -0
  66. package/web/components/GitHubButton.tsx +49 -0
  67. package/web/components/GitHubStars.tsx +27 -0
  68. package/web/components/Header.tsx +108 -0
  69. package/web/components/MarkdownContent.tsx +35 -0
  70. package/web/components/SkipToContent.tsx +11 -0
  71. package/web/content/pages/vision.md +42 -0
  72. package/web/content/roadmap/1-web.md +9 -0
  73. package/web/content/roadmap/2-integrations.md +7 -0
  74. package/web/content/roadmap/3-cli-enhancements.md +8 -0
  75. package/web/content/roadmap/4-local-memory.md +8 -0
  76. package/web/eslint.config.mjs +18 -0
  77. package/web/lib/GitHubContext.tsx +57 -0
  78. package/web/lib/content/loader.ts +152 -0
  79. package/web/lib/content/types.ts +37 -0
  80. package/web/lib/utils.ts +12 -0
  81. package/web/next.config.ts +11 -0
  82. package/web/package-lock.json +8837 -0
  83. package/web/package.json +34 -0
  84. package/web/postcss.config.mjs +7 -0
  85. package/web/public/file.svg +1 -0
  86. package/web/public/globe.svg +1 -0
  87. package/web/public/next.svg +1 -0
  88. package/web/public/vercel.svg +1 -0
  89. package/web/public/window.svg +1 -0
  90. package/templates/env/claude/CLAUDE.md +0 -52
  91. package/templates/env/claude/commands/code-review.md +0 -81
  92. package/templates/env/claude/commands/execute-plan.md +0 -71
  93. package/templates/env/claude/commands/new-requirement.md +0 -127
  94. package/templates/env/claude/commands/update-planning.md +0 -61
  95. package/templates/env/cursor/commands/check-implementation.md +0 -21
  96. package/templates/env/cursor/commands/review-design.md +0 -11
  97. package/templates/env/cursor/commands/review-requirements.md +0 -9
  98. package/templates/env/cursor/commands/writing-test.md +0 -44
  99. package/templates/env/cursor/rules/ai-devkit.md +0 -51
  100. /package/templates/{env/claude/commands → commands}/check-implementation.md +0 -0
  101. /package/templates/{env/cursor/commands → commands}/code-review.md +0 -0
  102. /package/templates/{env/cursor/commands → commands}/execute-plan.md +0 -0
  103. /package/templates/{env/claude/commands → commands}/review-design.md +0 -0
  104. /package/templates/{env/claude/commands → commands}/review-requirements.md +0 -0
  105. /package/templates/{env/cursor/commands → commands}/update-planning.md +0 -0
  106. /package/templates/{env/claude/commands → commands}/writing-test.md +0 -0
@@ -32,10 +32,14 @@ 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.ConfigManager = void 0;
37
40
  const fs = __importStar(require("fs-extra"));
38
41
  const path = __importStar(require("path"));
42
+ const package_json_1 = __importDefault(require("../../package.json"));
39
43
  const CONFIG_FILE_NAME = '.ai-devkit.json';
40
44
  class ConfigManager {
41
45
  constructor(targetDir = process.cwd()) {
@@ -50,10 +54,10 @@ class ConfigManager {
50
54
  }
51
55
  return null;
52
56
  }
53
- async create(environment) {
57
+ async create() {
54
58
  const config = {
55
- version: '0.1.0',
56
- environment,
59
+ version: package_json_1.default.version,
60
+ environments: [],
57
61
  initializedPhases: [],
58
62
  createdAt: new Date().toISOString(),
59
63
  updatedAt: new Date().toISOString()
@@ -89,6 +93,17 @@ class ConfigManager {
89
93
  const config = await this.read();
90
94
  return config ? config.initializedPhases.includes(phase) : false;
91
95
  }
96
+ async getEnvironments() {
97
+ const config = await this.read();
98
+ return config?.environments || [];
99
+ }
100
+ async setEnvironments(environments) {
101
+ return this.update({ environments });
102
+ }
103
+ async hasEnvironment(envId) {
104
+ const environments = await this.getEnvironments();
105
+ return environments.includes(envId);
106
+ }
92
107
  }
93
108
  exports.ConfigManager = ConfigManager;
94
109
  //# sourceMappingURL=Config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Config.js","sourceRoot":"","sources":["../../src/lib/Config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA+B;AAC/B,2CAA6B;AAG7B,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AAE3C,MAAa,aAAa;IAGxB,YAAY,YAAoB,OAAO,CAAC,GAAG,EAAE;QAC3C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACxB,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,WAAyB;QACpC,MAAM,MAAM,GAAiB;YAC3B,OAAO,EAAE,OAAO;YAChB,WAAW;YACX,iBAAiB,EAAE,EAAE;YACrB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QAEF,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAA8B;QACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,OAAO,GAAG;YACd,GAAG,MAAM;YACT,GAAG,OAAO;YACV,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QAEF,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5D,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAAY;QACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9C,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrC,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAAY;QACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACnE,CAAC;CACF;AAjED,sCAiEC"}
1
+ {"version":3,"file":"Config.js","sourceRoot":"","sources":["../../src/lib/Config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { EnvironmentCode } from '../types';
2
+ export declare class EnvironmentSelector {
3
+ selectEnvironments(): Promise<EnvironmentCode[]>;
4
+ confirmOverride(conflicts: EnvironmentCode[]): Promise<boolean>;
5
+ displaySelectionSummary(selected: EnvironmentCode[]): void;
6
+ }
7
+ //# sourceMappingURL=EnvironmentSelector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnvironmentSelector.d.ts","sourceRoot":"","sources":["../../src/lib/EnvironmentSelector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG3C,qBAAa,mBAAmB;IACxB,kBAAkB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IA4BhD,eAAe,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAmBrE,uBAAuB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,IAAI;CAY3D"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.EnvironmentSelector = void 0;
7
+ const inquirer_1 = __importDefault(require("inquirer"));
8
+ const env_1 = require("../util/env");
9
+ class EnvironmentSelector {
10
+ async selectEnvironments() {
11
+ const environments = (0, env_1.getAllEnvironments)();
12
+ const choices = environments.map(env => ({
13
+ name: env.name,
14
+ value: env.code,
15
+ short: env.name
16
+ }));
17
+ const answers = await inquirer_1.default.prompt([
18
+ {
19
+ type: 'checkbox',
20
+ name: 'environments',
21
+ message: 'Select AI environments to set up (use space to select, enter to confirm):',
22
+ choices,
23
+ pageSize: 10,
24
+ validate: (input) => {
25
+ if (input.length === 0) {
26
+ return 'Please select at least one environment.';
27
+ }
28
+ return true;
29
+ }
30
+ }
31
+ ]);
32
+ return answers.environments;
33
+ }
34
+ async confirmOverride(conflicts) {
35
+ if (conflicts.length === 0) {
36
+ return true;
37
+ }
38
+ const conflictNames = conflicts.map(id => (0, env_1.getEnvironmentDisplayName)(id));
39
+ const answers = await inquirer_1.default.prompt([
40
+ {
41
+ type: 'confirm',
42
+ name: 'proceed',
43
+ message: `The following environments are already set up and will be overwritten:\n ${conflictNames.join(', ')}\n\nDo you want to continue?`,
44
+ default: false
45
+ }
46
+ ]);
47
+ return answers.proceed;
48
+ }
49
+ displaySelectionSummary(selected) {
50
+ if (selected.length === 0) {
51
+ console.log('No environments selected.');
52
+ return;
53
+ }
54
+ console.log('\nSelected environments:');
55
+ selected.forEach(envId => {
56
+ console.log(` [OK] ${(0, env_1.getEnvironmentDisplayName)(envId)}`);
57
+ });
58
+ console.log('');
59
+ }
60
+ }
61
+ exports.EnvironmentSelector = EnvironmentSelector;
62
+ //# sourceMappingURL=EnvironmentSelector.js.map
@@ -0,0 +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,UAAU,IAAA,+BAAyB,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;CACF;AA5DD,kDA4DC"}
@@ -0,0 +1,8 @@
1
+ import { Phase } from '../types';
2
+ export declare class PhaseSelector {
3
+ selectPhases(all?: boolean, phases?: string): Promise<Phase[]>;
4
+ private promptPhaseSelection;
5
+ private parsePhaseString;
6
+ displaySelectionSummary(selected: Phase[]): void;
7
+ }
8
+ //# sourceMappingURL=PhaseSelector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PhaseSelector.d.ts","sourceRoot":"","sources":["../../src/lib/PhaseSelector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAyC,MAAM,UAAU,CAAC;AAExE,qBAAa,aAAa;IAClB,YAAY,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;YAmBtD,oBAAoB;IAiBlC,OAAO,CAAC,gBAAgB;IAGxB,uBAAuB,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI;CAYjD"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PhaseSelector = void 0;
7
+ const inquirer_1 = __importDefault(require("inquirer"));
8
+ const types_1 = require("../types");
9
+ class PhaseSelector {
10
+ async selectPhases(all, phases) {
11
+ let selectedPhases = [];
12
+ if (all) {
13
+ selectedPhases = [...types_1.AVAILABLE_PHASES];
14
+ }
15
+ else if (phases) {
16
+ selectedPhases = this.parsePhaseString(phases);
17
+ }
18
+ else {
19
+ selectedPhases = await this.promptPhaseSelection();
20
+ }
21
+ if (selectedPhases.length === 0) {
22
+ console.log('No phases selected.');
23
+ return [];
24
+ }
25
+ return selectedPhases;
26
+ }
27
+ async promptPhaseSelection() {
28
+ const answers = await inquirer_1.default.prompt([
29
+ {
30
+ type: 'checkbox',
31
+ name: 'phases',
32
+ message: 'Which phases do you want to initialize? (or use --all flag)',
33
+ choices: types_1.AVAILABLE_PHASES.map(phase => ({
34
+ name: types_1.PHASE_DISPLAY_NAMES[phase],
35
+ value: phase,
36
+ checked: true
37
+ }))
38
+ }
39
+ ]);
40
+ return answers.phases;
41
+ }
42
+ parsePhaseString(phases) {
43
+ return phases.split(',').map(p => p.trim());
44
+ }
45
+ displaySelectionSummary(selected) {
46
+ if (selected.length === 0) {
47
+ console.log('No phases selected.');
48
+ return;
49
+ }
50
+ console.log('\nSelected phases:');
51
+ selected.forEach(phase => {
52
+ console.log(` [OK] ${types_1.PHASE_DISPLAY_NAMES[phase]}`);
53
+ });
54
+ console.log('');
55
+ }
56
+ }
57
+ exports.PhaseSelector = PhaseSelector;
58
+ //# sourceMappingURL=PhaseSelector.js.map
@@ -0,0 +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,UAAU,2BAAmB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;CACF;AApDD,sCAoDC"}
@@ -1,13 +1,13 @@
1
- import { Phase, Environment } from '../types';
1
+ import { Phase, EnvironmentCode } from '../types';
2
2
  export declare class TemplateManager {
3
3
  private templatesDir;
4
4
  private targetDir;
5
5
  constructor(targetDir?: string);
6
6
  copyPhaseTemplate(phase: Phase): Promise<string>;
7
- copyEnvironmentTemplates(environment: Environment): Promise<string[]>;
8
- private copyCursorTemplates;
9
- private copyClaudeTemplates;
10
7
  fileExists(phase: Phase): Promise<boolean>;
11
- environmentFilesExist(environment: Environment): Promise<boolean>;
8
+ setupMultipleEnvironments(environmentIds: EnvironmentCode[]): Promise<string[]>;
9
+ checkEnvironmentExists(envId: EnvironmentCode): Promise<boolean>;
10
+ private setupSingleEnvironment;
11
+ private copyCursorSpecificFiles;
12
12
  }
13
13
  //# 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,WAAW,EAAE,MAAM,UAAU,CAAC;AAE9C,qBAAa,eAAe;IAC1B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,GAAE,MAAsB;IAMvC,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAWhD,wBAAwB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAgB7D,mBAAmB;YA8BnB,mBAAmB;IA0B3B,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;IAK1C,qBAAqB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;CAaxE"}
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;IAYhD,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;IAK1C,yBAAyB,CAAC,cAAc,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAsB/E,sBAAsB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;YAgBxD,sBAAsB;YAyCtB,uBAAuB;CActC"}
@@ -36,9 +36,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.TemplateManager = void 0;
37
37
  const fs = __importStar(require("fs-extra"));
38
38
  const path = __importStar(require("path"));
39
+ const env_1 = require("../util/env");
39
40
  class TemplateManager {
40
41
  constructor(targetDir = process.cwd()) {
41
- // Templates are in the package directory, not the target directory
42
42
  this.templatesDir = path.join(__dirname, '../../templates');
43
43
  this.targetDir = targetDir;
44
44
  }
@@ -50,79 +50,86 @@ class TemplateManager {
50
50
  await fs.copy(sourceFile, targetFile);
51
51
  return targetFile;
52
52
  }
53
- async copyEnvironmentTemplates(environment) {
53
+ async fileExists(phase) {
54
+ const targetFile = path.join(this.targetDir, 'docs', 'ai', phase, 'README.md');
55
+ return fs.pathExists(targetFile);
56
+ }
57
+ async setupMultipleEnvironments(environmentIds) {
54
58
  const copiedFiles = [];
55
- if (environment === 'cursor' || environment === 'both') {
56
- const cursorFiles = await this.copyCursorTemplates();
57
- copiedFiles.push(...cursorFiles);
59
+ for (const envId of environmentIds) {
60
+ const env = (0, env_1.getEnvironment)(envId);
61
+ if (!env) {
62
+ console.warn(`Warning: Environment '${envId}' not found, skipping`);
63
+ continue;
64
+ }
65
+ try {
66
+ const envFiles = await this.setupSingleEnvironment(env);
67
+ copiedFiles.push(...envFiles);
68
+ }
69
+ catch (error) {
70
+ console.error(`Error setting up environment '${env.name}':`, error);
71
+ throw error; // Re-throw to stop the entire process on failure
72
+ }
58
73
  }
59
- if (environment === 'claude' || environment === 'both') {
60
- const claudeFiles = await this.copyClaudeTemplates();
61
- copiedFiles.push(...claudeFiles);
74
+ return copiedFiles;
75
+ }
76
+ async checkEnvironmentExists(envId) {
77
+ const env = (0, env_1.getEnvironment)(envId);
78
+ if (!env) {
79
+ return false;
80
+ }
81
+ const contextFilePath = path.join(this.targetDir, env.contextFileName);
82
+ const contextFileExists = await fs.pathExists(contextFilePath);
83
+ const commandDirPath = path.join(this.targetDir, env.commandPath);
84
+ const commandDirExists = await fs.pathExists(commandDirPath);
85
+ return contextFileExists || commandDirExists;
86
+ }
87
+ async setupSingleEnvironment(env) {
88
+ const copiedFiles = [];
89
+ try {
90
+ const contextSource = path.join(this.templatesDir, 'env', 'AGENTS.md');
91
+ const contextTarget = path.join(this.targetDir, env.contextFileName);
92
+ if (await fs.pathExists(contextSource)) {
93
+ await fs.copy(contextSource, contextTarget);
94
+ copiedFiles.push(contextTarget);
95
+ }
96
+ else {
97
+ console.warn(`Warning: Context file not found: ${contextSource}`);
98
+ }
99
+ const commandsSourceDir = path.join(this.templatesDir, 'commands');
100
+ const commandsTargetDir = path.join(this.targetDir, env.commandPath);
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
+ });
108
+ }
109
+ else {
110
+ console.warn(`Warning: Commands directory not found: ${commandsSourceDir}`);
111
+ }
112
+ if (env.code === 'cursor') {
113
+ await this.copyCursorSpecificFiles(copiedFiles);
114
+ }
115
+ }
116
+ catch (error) {
117
+ console.error(`Error setting up environment ${env.name}:`, error);
118
+ throw error;
62
119
  }
63
120
  return copiedFiles;
64
121
  }
65
- async copyCursorTemplates() {
66
- const files = [];
67
- // Copy rules to .cursor/rules directory (new format, .cursorrules is deprecated)
122
+ async copyCursorSpecificFiles(copiedFiles) {
68
123
  const rulesSourceDir = path.join(this.templatesDir, 'env', 'cursor', 'rules');
69
124
  const rulesTargetDir = path.join(this.targetDir, '.cursor', 'rules');
70
- await fs.ensureDir(rulesTargetDir);
71
- await fs.copy(rulesSourceDir, rulesTargetDir);
72
- // List all rule files for feedback
73
- const ruleFiles = await fs.readdir(rulesSourceDir);
74
- ruleFiles.forEach(file => {
75
- files.push(path.join(rulesTargetDir, file));
76
- });
77
- // Copy slash commands to .cursor/commands directory
78
- const commandsSourceDir = path.join(this.templatesDir, 'env', 'cursor', 'commands');
79
- const commandsTargetDir = path.join(this.targetDir, '.cursor', 'commands');
80
- await fs.ensureDir(commandsTargetDir);
81
- await fs.copy(commandsSourceDir, commandsTargetDir);
82
- // List all command files for feedback
83
- const commandFiles = await fs.readdir(commandsSourceDir);
84
- commandFiles.forEach(file => {
85
- files.push(path.join(commandsTargetDir, file));
86
- });
87
- return files;
88
- }
89
- async copyClaudeTemplates() {
90
- const files = [];
91
- // Copy Claude workspace config
92
- const workspaceSource = path.join(this.templatesDir, 'env', 'claude', 'CLAUDE.md');
93
- const workspaceDir = path.join(this.targetDir, '.claude');
94
- const workspaceTarget = path.join(workspaceDir, 'CLAUDE.md');
95
- await fs.ensureDir(workspaceDir);
96
- await fs.copy(workspaceSource, workspaceTarget);
97
- files.push(workspaceTarget);
98
- // Copy Claude commands
99
- const commandsSourceDir = path.join(this.templatesDir, 'env', 'claude', 'commands');
100
- const commandsTargetDir = path.join(this.targetDir, '.claude', 'commands');
101
- await fs.ensureDir(commandsTargetDir);
102
- await fs.copy(commandsSourceDir, commandsTargetDir);
103
- // List all command files for feedback
104
- const commandFiles = await fs.readdir(commandsSourceDir);
105
- commandFiles.forEach(file => {
106
- files.push(path.join(commandsTargetDir, file));
107
- });
108
- return files;
109
- }
110
- async fileExists(phase) {
111
- const targetFile = path.join(this.targetDir, 'docs', 'ai', phase, 'README.md');
112
- return fs.pathExists(targetFile);
113
- }
114
- async environmentFilesExist(environment) {
115
- if (environment === 'cursor' || environment === 'both') {
116
- const rulesExists = await fs.pathExists(path.join(this.targetDir, '.cursor', 'rules'));
117
- if (rulesExists)
118
- return true;
119
- }
120
- if (environment === 'claude' || environment === 'both') {
121
- const workspaceExists = await fs.pathExists(path.join(this.targetDir, '.claude', 'CLAUDE.md'));
122
- if (workspaceExists)
123
- return true;
125
+ if (await fs.pathExists(rulesSourceDir)) {
126
+ await fs.ensureDir(rulesTargetDir);
127
+ await fs.copy(rulesSourceDir, rulesTargetDir);
128
+ const ruleFiles = await fs.readdir(rulesSourceDir);
129
+ ruleFiles.forEach(file => {
130
+ copiedFiles.push(path.join(rulesTargetDir, file));
131
+ });
124
132
  }
125
- return false;
126
133
  }
127
134
  }
128
135
  exports.TemplateManager = TemplateManager;
@@ -1 +1 @@
1
- {"version":3,"file":"TemplateManager.js","sourceRoot":"","sources":["../../src/lib/TemplateManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TemplateManager.js","sourceRoot":"","sources":["../../src/lib/TemplateManager.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,8 +1,15 @@
1
1
  export type Phase = 'requirements' | 'design' | 'planning' | 'implementation' | 'testing' | 'deployment' | 'monitoring';
2
- export type Environment = 'cursor' | 'claude' | 'both';
2
+ export interface EnvironmentDefinition {
3
+ code: string;
4
+ name: string;
5
+ contextFileName: string;
6
+ commandPath: string;
7
+ description?: string;
8
+ }
9
+ export type EnvironmentCode = 'cursor' | 'claude' | 'github' | 'gemini' | 'codex' | 'windsurf' | 'kilocode' | 'amp' | 'opencode' | 'roo';
3
10
  export interface DevKitConfig {
4
11
  version: string;
5
- environment?: Environment;
12
+ environments: EnvironmentCode[];
6
13
  initializedPhases: Phase[];
7
14
  createdAt: string;
8
15
  updatedAt: string;
@@ -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,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEvD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,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"}
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;CACtB;AAED,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,KAAK,GAAG,UAAU,GAAG,KAAK,CAAC;AAEzI,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":";;;AAyBa,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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAiCa,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"}
@@ -0,0 +1,11 @@
1
+ import { EnvironmentDefinition, EnvironmentCode } from '../types.js';
2
+ export declare const ENVIRONMENT_DEFINITIONS: Record<EnvironmentCode, EnvironmentDefinition>;
3
+ export declare const ALL_ENVIRONMENT_CODES: EnvironmentCode[];
4
+ export declare function getAllEnvironments(): EnvironmentDefinition[];
5
+ export declare function getEnvironment(envCode: EnvironmentCode): EnvironmentDefinition | undefined;
6
+ export declare function getAllEnvironmentCodes(): EnvironmentCode[];
7
+ export declare function getEnvironmentsByCodes(codes: EnvironmentCode[]): EnvironmentDefinition[];
8
+ export declare function isValidEnvironmentCode(value: string): value is EnvironmentCode;
9
+ export declare function getEnvironmentDisplayName(envCode: EnvironmentCode): string;
10
+ export declare function validateEnvironmentCodes(envCodes: string[]): EnvironmentCode[];
11
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +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,CA6DlF,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"}
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ALL_ENVIRONMENT_CODES = exports.ENVIRONMENT_DEFINITIONS = void 0;
4
+ exports.getAllEnvironments = getAllEnvironments;
5
+ exports.getEnvironment = getEnvironment;
6
+ exports.getAllEnvironmentCodes = getAllEnvironmentCodes;
7
+ exports.getEnvironmentsByCodes = getEnvironmentsByCodes;
8
+ exports.isValidEnvironmentCode = isValidEnvironmentCode;
9
+ exports.getEnvironmentDisplayName = getEnvironmentDisplayName;
10
+ exports.validateEnvironmentCodes = validateEnvironmentCodes;
11
+ exports.ENVIRONMENT_DEFINITIONS = {
12
+ cursor: {
13
+ code: 'cursor',
14
+ name: 'Cursor',
15
+ contextFileName: 'AGENTS.md',
16
+ commandPath: '.cursor/commands',
17
+ },
18
+ claude: {
19
+ code: 'claude',
20
+ name: 'Claude Code',
21
+ contextFileName: 'CLAUDE.md',
22
+ commandPath: '.claude/commands',
23
+ },
24
+ github: {
25
+ code: 'github',
26
+ name: 'GitHub Copilot',
27
+ contextFileName: 'AGENTS.md',
28
+ commandPath: '.github/commands',
29
+ },
30
+ gemini: {
31
+ code: 'gemini',
32
+ name: 'Google Gemini',
33
+ contextFileName: 'AGENTS.md',
34
+ commandPath: '.gemini/commands',
35
+ },
36
+ codex: {
37
+ code: 'codex',
38
+ name: 'OpenAI Codex',
39
+ contextFileName: 'AGENTS.md',
40
+ commandPath: '.codex/commands',
41
+ },
42
+ windsurf: {
43
+ code: 'windsurf',
44
+ name: 'Windsurf',
45
+ contextFileName: 'AGENTS.md',
46
+ commandPath: '.windsurf/commands',
47
+ },
48
+ kilocode: {
49
+ code: 'kilocode',
50
+ name: 'KiloCode',
51
+ contextFileName: 'AGENTS.md',
52
+ commandPath: '.kilocode/commands',
53
+ },
54
+ amp: {
55
+ code: 'amp',
56
+ name: 'AMP',
57
+ contextFileName: 'AGENTS.md',
58
+ commandPath: '.agents/commands',
59
+ },
60
+ opencode: {
61
+ code: 'opencode',
62
+ name: 'OpenCode',
63
+ contextFileName: 'AGENTS.md',
64
+ commandPath: '.opencode/commands',
65
+ },
66
+ roo: {
67
+ code: 'roo',
68
+ name: 'Roo Code',
69
+ contextFileName: 'AGENTS.md',
70
+ commandPath: '.roo/commands',
71
+ }
72
+ };
73
+ exports.ALL_ENVIRONMENT_CODES = Object.keys(exports.ENVIRONMENT_DEFINITIONS);
74
+ function getAllEnvironments() {
75
+ return Object.values(exports.ENVIRONMENT_DEFINITIONS);
76
+ }
77
+ function getEnvironment(envCode) {
78
+ return exports.ENVIRONMENT_DEFINITIONS[envCode];
79
+ }
80
+ function getAllEnvironmentCodes() {
81
+ return [...exports.ALL_ENVIRONMENT_CODES];
82
+ }
83
+ function getEnvironmentsByCodes(codes) {
84
+ return codes.map(code => getEnvironment(code)).filter((env) => env !== undefined);
85
+ }
86
+ function isValidEnvironmentCode(value) {
87
+ return exports.ALL_ENVIRONMENT_CODES.includes(value);
88
+ }
89
+ function getEnvironmentDisplayName(envCode) {
90
+ const env = getEnvironment(envCode);
91
+ return env ? env.name : envCode;
92
+ }
93
+ function validateEnvironmentCodes(envCodes) {
94
+ const validCodes = [];
95
+ const invalidCodes = [];
96
+ for (const code of envCodes) {
97
+ if (isValidEnvironmentCode(code)) {
98
+ validCodes.push(code);
99
+ }
100
+ else {
101
+ invalidCodes.push(code);
102
+ }
103
+ }
104
+ if (invalidCodes.length > 0) {
105
+ throw new Error(`Invalid environment codes: ${invalidCodes.join(', ')}`);
106
+ }
107
+ return validCodes;
108
+ }
109
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/util/env.ts"],"names":[],"mappings":";;;AAmEA,gDAEC;AAED,wCAEC;AAED,wDAEC;AAED,wDAEC;AAED,wDAEC;AAED,8DAGC;AAED,4DAiBC;AA3GY,QAAA,uBAAuB,GAAmD;IACrF,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,QAAQ;QACd,eAAe,EAAE,WAAW;QAC5B,WAAW,EAAE,kBAAkB;KAChC;IACD,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,aAAa;QACnB,eAAe,EAAE,WAAW;QAC5B,WAAW,EAAE,kBAAkB;KAChC;IACD,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,gBAAgB;QACtB,eAAe,EAAE,WAAW;QAC5B,WAAW,EAAE,kBAAkB;KAChC;IACD,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,eAAe;QACrB,eAAe,EAAE,WAAW;QAC5B,WAAW,EAAE,kBAAkB;KAChC;IACD,KAAK,EAAE;QACL,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,cAAc;QACpB,eAAe,EAAE,WAAW;QAC5B,WAAW,EAAE,iBAAiB;KAC/B;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,UAAU;QAChB,eAAe,EAAE,WAAW;QAC5B,WAAW,EAAE,oBAAoB;KAClC;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,UAAU;QAChB,eAAe,EAAE,WAAW;QAC5B,WAAW,EAAE,oBAAoB;KAClC;IACD,GAAG,EAAE;QACH,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,KAAK;QACX,eAAe,EAAE,WAAW;QAC5B,WAAW,EAAE,kBAAkB;KAChC;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,UAAU;QAChB,eAAe,EAAE,WAAW;QAC5B,WAAW,EAAE,oBAAoB;KAClC;IACD,GAAG,EAAE;QACH,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,UAAU;QAChB,eAAe,EAAE,WAAW;QAC5B,WAAW,EAAE,eAAe;KAC7B;CACF,CAAC;AAEW,QAAA,qBAAqB,GAAsB,MAAM,CAAC,IAAI,CAAC,+BAAuB,CAAsB,CAAC;AAElH,SAAgB,kBAAkB;IAChC,OAAO,MAAM,CAAC,MAAM,CAAC,+BAAuB,CAAC,CAAC;AAChD,CAAC;AAED,SAAgB,cAAc,CAAC,OAAwB;IACrD,OAAO,+BAAuB,CAAC,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED,SAAgB,sBAAsB;IACpC,OAAO,CAAC,GAAG,6BAAqB,CAAC,CAAC;AACpC,CAAC;AAED,SAAgB,sBAAsB,CAAC,KAAwB;IAC7D,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAgC,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;AAClH,CAAC;AAED,SAAgB,sBAAsB,CAAC,KAAa;IAClD,OAAO,6BAAqB,CAAC,QAAQ,CAAC,KAAwB,CAAC,CAAC;AAClE,CAAC;AAED,SAAgB,yBAAyB,CAAC,OAAwB;IAChE,MAAM,GAAG,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;AAClC,CAAC;AAED,SAAgB,wBAAwB,CAAC,QAAkB;IACzD,MAAM,UAAU,GAAsB,EAAE,CAAC;IACzC,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,8BAA8B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC"}
package/jest.config.js ADDED
@@ -0,0 +1,22 @@
1
+ module.exports = {
2
+ preset: 'ts-jest',
3
+ testEnvironment: 'node',
4
+ roots: ['<rootDir>/src'],
5
+ testMatch: ['**/__tests__/**/*.test.ts', '**/?(*.)+(spec|test).ts'],
6
+ collectCoverageFrom: [
7
+ 'src/**/*.{ts,js}',
8
+ '!src/**/*.d.ts',
9
+ '!src/cli.ts',
10
+ '!src/index.ts'
11
+ ],
12
+ coverageDirectory: 'coverage',
13
+ coverageReporters: ['text', 'lcov', 'html'],
14
+ coverageThreshold: {
15
+ global: {
16
+ branches: 80,
17
+ functions: 80,
18
+ lines: 80,
19
+ statements: 80
20
+ }
21
+ }
22
+ };