ai-devkit 0.3.2 → 0.4.1

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 (89) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +15 -165
  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/cli.js +0 -0
  20. package/dist/commands/init.d.ts +2 -2
  21. package/dist/commands/init.d.ts.map +1 -1
  22. package/dist/commands/init.js +54 -67
  23. package/dist/commands/init.js.map +1 -1
  24. package/dist/commands/phase.js +1 -1
  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 -60
  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 -10
  51. package/web/.nojekyll +2 -0
  52. package/web/CNAME +1 -0
  53. package/web/README.md +100 -0
  54. package/web/app/favicon.ico +0 -0
  55. package/web/app/globals.css +122 -0
  56. package/web/app/layout.tsx +106 -0
  57. package/web/app/page.tsx +119 -0
  58. package/web/app/roadmap/page.tsx +150 -0
  59. package/web/app/robots.ts +16 -0
  60. package/web/app/sitemap.ts +46 -0
  61. package/web/app/vision/page.tsx +49 -0
  62. package/web/components/Footer.tsx +81 -0
  63. package/web/components/GitHubButton.tsx +49 -0
  64. package/web/components/GitHubStars.tsx +27 -0
  65. package/web/components/Header.tsx +108 -0
  66. package/web/components/MarkdownContent.tsx +35 -0
  67. package/web/components/SkipToContent.tsx +11 -0
  68. package/web/content/pages/vision.md +42 -0
  69. package/web/content/roadmap/1-web.md +9 -0
  70. package/web/content/roadmap/2-integrations.md +7 -0
  71. package/web/content/roadmap/3-cli-enhancements.md +8 -0
  72. package/web/content/roadmap/4-local-memory.md +8 -0
  73. package/web/eslint.config.mjs +18 -0
  74. package/web/lib/GitHubContext.tsx +57 -0
  75. package/web/lib/content/loader.ts +152 -0
  76. package/web/lib/content/types.ts +37 -0
  77. package/web/lib/utils.ts +12 -0
  78. package/web/next.config.ts +11 -0
  79. package/web/package-lock.json +8837 -0
  80. package/web/package.json +34 -0
  81. package/web/postcss.config.mjs +7 -0
  82. package/web/public/file.svg +1 -0
  83. package/web/public/globe.svg +1 -0
  84. package/web/public/next.svg +1 -0
  85. package/web/public/vercel.svg +1 -0
  86. package/web/public/window.svg +1 -0
  87. package/templates/env/claude/CLAUDE.md +0 -52
  88. package/templates/env/cursor/rules/base.md +0 -1
  89. /package/templates/env/{cursor/AGENTS.md → base.md} +0 -0
@@ -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;IAKvC,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAWhD,wBAAwB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAgB7D,mBAAmB;YA+BnB,mBAAmB;IAqB3B,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,6 +36,7 @@ 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
42
  this.templatesDir = path.join(__dirname, '../../templates');
@@ -49,74 +50,86 @@ class TemplateManager {
49
50
  await fs.copy(sourceFile, targetFile);
50
51
  return targetFile;
51
52
  }
52
- 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) {
53
58
  const copiedFiles = [];
54
- if (environment === 'cursor' || environment === 'both') {
55
- const cursorFiles = await this.copyCursorTemplates();
56
- 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
+ }
57
73
  }
58
- if (environment === 'claude' || environment === 'both') {
59
- const claudeFiles = await this.copyClaudeTemplates();
60
- 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', 'base.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;
61
119
  }
62
120
  return copiedFiles;
63
121
  }
64
- async copyCursorTemplates() {
65
- const files = [];
66
- const workspaceSource = path.join(this.templatesDir, 'env', 'cursor', 'AGENTS.md');
67
- const workspaceTarget = path.join(this.targetDir, 'AGENTS.md');
68
- await fs.copy(workspaceSource, workspaceTarget);
69
- files.push(workspaceTarget);
122
+ async copyCursorSpecificFiles(copiedFiles) {
70
123
  const rulesSourceDir = path.join(this.templatesDir, 'env', 'cursor', 'rules');
71
124
  const rulesTargetDir = path.join(this.targetDir, '.cursor', 'rules');
72
- await fs.ensureDir(rulesTargetDir);
73
- await fs.copy(rulesSourceDir, rulesTargetDir);
74
- const ruleFiles = await fs.readdir(rulesSourceDir);
75
- ruleFiles.forEach(file => {
76
- files.push(path.join(rulesTargetDir, file));
77
- });
78
- const commandsSourceDir = path.join(this.templatesDir, 'commands');
79
- const commandsTargetDir = path.join(this.targetDir, '.cursor', 'commands');
80
- await fs.ensureDir(commandsTargetDir);
81
- await fs.copy(commandsSourceDir, commandsTargetDir);
82
- const commandFiles = await fs.readdir(commandsSourceDir);
83
- commandFiles.forEach(file => {
84
- files.push(path.join(commandsTargetDir, file));
85
- });
86
- return files;
87
- }
88
- async copyClaudeTemplates() {
89
- const files = [];
90
- const workspaceSource = path.join(this.templatesDir, 'env', 'claude', 'CLAUDE.md');
91
- const workspaceTarget = path.join(this.targetDir, 'CLAUDE.md');
92
- await fs.copy(workspaceSource, workspaceTarget);
93
- files.push(workspaceTarget);
94
- const commandsSourceDir = path.join(this.templatesDir, 'commands');
95
- const commandsTargetDir = path.join(this.targetDir, '.claude', 'commands');
96
- await fs.ensureDir(commandsTargetDir);
97
- await fs.copy(commandsSourceDir, commandsTargetDir);
98
- const commandFiles = await fs.readdir(commandsSourceDir);
99
- commandFiles.forEach(file => {
100
- files.push(path.join(commandsTargetDir, file));
101
- });
102
- return files;
103
- }
104
- async fileExists(phase) {
105
- const targetFile = path.join(this.targetDir, 'docs', 'ai', phase, 'README.md');
106
- return fs.pathExists(targetFile);
107
- }
108
- async environmentFilesExist(environment) {
109
- if (environment === 'cursor' || environment === 'both') {
110
- const rulesExists = await fs.pathExists(path.join(this.targetDir, '.cursor', 'rules'));
111
- if (rulesExists)
112
- return true;
113
- }
114
- if (environment === 'claude' || environment === 'both') {
115
- const workspaceExists = await fs.pathExists(path.join(this.targetDir, '.claude', 'CLAUDE.md'));
116
- if (workspaceExists)
117
- 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
+ });
118
132
  }
119
- return false;
120
133
  }
121
134
  }
122
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":"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"}
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
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-devkit",
3
- "version": "0.3.2",
3
+ "version": "0.4.1",
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": {
@@ -10,6 +10,9 @@
10
10
  "build": "tsc",
11
11
  "dev": "ts-node src/cli.ts",
12
12
  "lint": "eslint src --ext .ts",
13
+ "test": "jest",
14
+ "test:watch": "jest --watch",
15
+ "test:coverage": "jest --coverage",
13
16
  "prepublishOnly": "npm run build"
14
17
  },
15
18
  "keywords": [
@@ -23,21 +26,24 @@
23
26
  "author": "",
24
27
  "license": "MIT",
25
28
  "dependencies": {
29
+ "chalk": "^4.1.2",
26
30
  "commander": "^11.1.0",
27
- "inquirer": "^8.2.6",
28
31
  "fs-extra": "^11.2.0",
29
- "yaml": "^2.3.4",
30
- "chalk": "^4.1.2"
32
+ "inquirer": "^8.2.6",
33
+ "yaml": "^2.3.4"
31
34
  },
32
35
  "devDependencies": {
33
- "@types/node": "^20.11.5",
34
- "@types/inquirer": "^8.2.10",
35
36
  "@types/fs-extra": "^11.0.4",
36
- "ts-node": "^10.9.2",
37
- "typescript": "^5.3.3",
38
- "eslint": "^8.56.0",
37
+ "@types/inquirer": "^8.2.10",
38
+ "@types/jest": "^30.0.0",
39
+ "@types/node": "^20.11.5",
39
40
  "@typescript-eslint/eslint-plugin": "^6.19.1",
40
- "@typescript-eslint/parser": "^6.19.1"
41
+ "@typescript-eslint/parser": "^6.19.1",
42
+ "eslint": "^8.56.0",
43
+ "jest": "^29.7.0",
44
+ "ts-jest": "^29.4.5",
45
+ "ts-node": "^10.9.2",
46
+ "typescript": "^5.3.3"
41
47
  },
42
48
  "engines": {
43
49
  "node": ">=16.0.0"
package/web/.nojekyll ADDED
@@ -0,0 +1,2 @@
1
+ # This file tells GitHub Pages not to process the site with Jekyll
2
+
package/web/CNAME ADDED
@@ -0,0 +1 @@
1
+ ai-devkit.com