@codebakers/cli 1.1.4 → 1.1.6

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 (44) hide show
  1. package/dist/commands/doctor.d.ts +8 -0
  2. package/dist/commands/doctor.js +218 -0
  3. package/dist/commands/init.d.ts +4 -0
  4. package/dist/commands/init.js +772 -0
  5. package/dist/commands/install-hook.d.ts +12 -0
  6. package/dist/commands/install-hook.js +193 -0
  7. package/dist/commands/install.d.ts +1 -0
  8. package/dist/commands/install.js +81 -0
  9. package/dist/commands/login.d.ts +1 -0
  10. package/dist/commands/login.js +54 -0
  11. package/dist/commands/mcp-config.d.ts +6 -0
  12. package/dist/commands/mcp-config.js +209 -0
  13. package/dist/commands/serve.d.ts +1 -0
  14. package/dist/commands/serve.js +26 -0
  15. package/dist/commands/setup.d.ts +1 -0
  16. package/dist/commands/setup.js +92 -0
  17. package/dist/commands/status.d.ts +1 -0
  18. package/dist/commands/status.js +49 -0
  19. package/dist/commands/uninstall.d.ts +1 -0
  20. package/dist/commands/uninstall.js +50 -0
  21. package/dist/config.d.ts +5 -0
  22. package/dist/config.js +33 -0
  23. package/dist/index.d.ts +1 -0
  24. package/dist/index.js +71 -1026
  25. package/dist/mcp/server.d.ts +2 -0
  26. package/dist/mcp/server.js +544 -0
  27. package/package.json +16 -38
  28. package/src/commands/doctor.ts +231 -0
  29. package/src/commands/init.ts +827 -0
  30. package/src/commands/install-hook.ts +207 -0
  31. package/src/commands/install.ts +94 -0
  32. package/src/commands/login.ts +56 -0
  33. package/src/commands/mcp-config.ts +235 -0
  34. package/src/commands/serve.ts +23 -0
  35. package/src/commands/setup.ts +104 -0
  36. package/src/commands/status.ts +48 -0
  37. package/src/commands/uninstall.ts +49 -0
  38. package/src/config.ts +34 -0
  39. package/src/index.ts +87 -0
  40. package/src/mcp/server.ts +617 -0
  41. package/tsconfig.json +16 -0
  42. package/README.md +0 -89
  43. package/dist/chunk-7CKLRE2H.js +0 -36
  44. package/dist/config-R2H6JKGW.js +0 -16
@@ -0,0 +1,92 @@
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.setup = setup;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const ora_1 = __importDefault(require("ora"));
9
+ const readline_1 = require("readline");
10
+ const config_js_1 = require("../config.js");
11
+ function prompt(question) {
12
+ const rl = (0, readline_1.createInterface)({
13
+ input: process.stdin,
14
+ output: process.stdout,
15
+ });
16
+ return new Promise((resolve) => {
17
+ rl.question(question, (answer) => {
18
+ rl.close();
19
+ resolve(answer.trim());
20
+ });
21
+ });
22
+ }
23
+ async function setup() {
24
+ console.log(chalk_1.default.blue('\n ╔══════════════════════════════════════╗'));
25
+ console.log(chalk_1.default.blue(' ║') + chalk_1.default.white(' CodeBakers One-Time Setup ') + chalk_1.default.blue('║'));
26
+ console.log(chalk_1.default.blue(' ╚══════════════════════════════════════╝\n'));
27
+ // Check if already set up
28
+ const existingKey = (0, config_js_1.getApiKey)();
29
+ if (existingKey) {
30
+ console.log(chalk_1.default.yellow(' You\'re already logged in!\n'));
31
+ const reconfigure = await prompt(chalk_1.default.gray(' Reconfigure? (y/N): '));
32
+ if (reconfigure.toLowerCase() !== 'y') {
33
+ showFinalInstructions();
34
+ return;
35
+ }
36
+ console.log('');
37
+ }
38
+ // Step 1: Get API key
39
+ console.log(chalk_1.default.white(' Step 1: Enter your API key\n'));
40
+ console.log(chalk_1.default.gray(' Find it at: https://codebakers.ai/dashboard\n'));
41
+ const apiKey = await prompt(chalk_1.default.cyan(' API Key: '));
42
+ if (!apiKey) {
43
+ console.log(chalk_1.default.red('\n API key is required.\n'));
44
+ process.exit(1);
45
+ }
46
+ // Validate API key
47
+ const spinner = (0, ora_1.default)('Validating API key...').start();
48
+ try {
49
+ const apiUrl = (0, config_js_1.getApiUrl)();
50
+ const response = await fetch(`${apiUrl}/api/patterns`, {
51
+ method: 'GET',
52
+ headers: {
53
+ Authorization: `Bearer ${apiKey}`,
54
+ },
55
+ });
56
+ if (!response.ok) {
57
+ spinner.fail('Invalid API key');
58
+ const error = await response.json().catch(() => ({}));
59
+ console.log(chalk_1.default.red(`\n ${error.error || 'API key validation failed'}\n`));
60
+ process.exit(1);
61
+ }
62
+ spinner.succeed('API key validated');
63
+ }
64
+ catch {
65
+ spinner.fail('Could not connect to CodeBakers');
66
+ console.log(chalk_1.default.red('\n Check your internet connection and try again.\n'));
67
+ process.exit(1);
68
+ }
69
+ // Save API key
70
+ (0, config_js_1.setApiKey)(apiKey);
71
+ console.log(chalk_1.default.green(' ✓ API key saved\n'));
72
+ showFinalInstructions();
73
+ }
74
+ function showFinalInstructions() {
75
+ console.log(chalk_1.default.white(' Step 2: Enable in Claude Code\n'));
76
+ console.log(chalk_1.default.gray(' Copy this command and paste it into Claude Code:\n'));
77
+ // Box around the command for easy copying
78
+ const command = '/mcp add codebakers npx -y @codebakers/cli serve';
79
+ console.log(chalk_1.default.cyan(' ┌─────────────────────────────────────────────────────┐'));
80
+ console.log(chalk_1.default.cyan(' │ ') + chalk_1.default.white(command) + chalk_1.default.cyan(' │'));
81
+ console.log(chalk_1.default.cyan(' └─────────────────────────────────────────────────────┘\n'));
82
+ console.log(chalk_1.default.gray(' This only needs to be done once. No restart needed!\n'));
83
+ console.log(chalk_1.default.blue(' ══════════════════════════════════════\n'));
84
+ console.log(chalk_1.default.green(' Almost done! 🎉\n'));
85
+ console.log(chalk_1.default.white(' After running that command in Claude Code:\n'));
86
+ console.log(chalk_1.default.gray(' • Claude will have access to 34 production patterns'));
87
+ console.log(chalk_1.default.gray(' • Patterns are fetched on-demand (never stored locally)'));
88
+ console.log(chalk_1.default.gray(' • Works across all your projects\n'));
89
+ console.log(chalk_1.default.white(' Example prompt to try:\n'));
90
+ console.log(chalk_1.default.cyan(' "Build a login form with email validation"\n'));
91
+ console.log(chalk_1.default.gray(' Need help? https://codebakers.ai/docs\n'));
92
+ }
@@ -0,0 +1 @@
1
+ export declare function status(): Promise<void>;
@@ -0,0 +1,49 @@
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.status = status;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const fs_1 = require("fs");
9
+ const path_1 = require("path");
10
+ const config_js_1 = require("../config.js");
11
+ async function status() {
12
+ console.log(chalk_1.default.blue('\n CodeBakers Status\n'));
13
+ // Check login status
14
+ const apiKey = (0, config_js_1.getApiKey)();
15
+ if (apiKey) {
16
+ console.log(chalk_1.default.green(' ✓ Logged in'));
17
+ console.log(chalk_1.default.gray(` Key: ${apiKey.slice(0, 10)}...`));
18
+ }
19
+ else {
20
+ console.log(chalk_1.default.red(' ✗ Not logged in'));
21
+ console.log(chalk_1.default.gray(' Run `codebakers login` to authenticate'));
22
+ }
23
+ console.log('');
24
+ // Check installation status in current directory
25
+ const cwd = process.cwd();
26
+ const cursorrules = (0, path_1.join)(cwd, '.cursorrules');
27
+ const claudemd = (0, path_1.join)(cwd, 'CLAUDE.md');
28
+ const claudeDir = (0, path_1.join)(cwd, '.claude');
29
+ const hasCursorRules = (0, fs_1.existsSync)(cursorrules);
30
+ const hasClaudeMd = (0, fs_1.existsSync)(claudemd);
31
+ const hasClaudeDir = (0, fs_1.existsSync)(claudeDir);
32
+ if (hasCursorRules || hasClaudeMd || hasClaudeDir) {
33
+ console.log(chalk_1.default.green(' ✓ Patterns installed in this directory'));
34
+ if (hasCursorRules) {
35
+ console.log(chalk_1.default.gray(' - .cursorrules (Cursor IDE)'));
36
+ }
37
+ if (hasClaudeMd) {
38
+ console.log(chalk_1.default.gray(' - CLAUDE.md (Claude Code)'));
39
+ }
40
+ if (hasClaudeDir) {
41
+ console.log(chalk_1.default.gray(' - .claude/ (Pattern modules)'));
42
+ }
43
+ }
44
+ else {
45
+ console.log(chalk_1.default.yellow(' ○ Patterns not installed in this directory'));
46
+ console.log(chalk_1.default.gray(' Run `codebakers install` to install'));
47
+ }
48
+ console.log('');
49
+ }
@@ -0,0 +1 @@
1
+ export declare function uninstall(): Promise<void>;
@@ -0,0 +1,50 @@
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.uninstall = uninstall;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const ora_1 = __importDefault(require("ora"));
9
+ const fs_1 = require("fs");
10
+ const path_1 = require("path");
11
+ async function uninstall() {
12
+ console.log(chalk_1.default.blue('\n CodeBakers Uninstall\n'));
13
+ const spinner = (0, ora_1.default)('Removing patterns...').start();
14
+ try {
15
+ const cwd = process.cwd();
16
+ let removed = 0;
17
+ // Remove .cursorrules
18
+ const cursorrules = (0, path_1.join)(cwd, '.cursorrules');
19
+ if ((0, fs_1.existsSync)(cursorrules)) {
20
+ (0, fs_1.unlinkSync)(cursorrules);
21
+ removed++;
22
+ }
23
+ // Remove CLAUDE.md
24
+ const claudemd = (0, path_1.join)(cwd, 'CLAUDE.md');
25
+ if ((0, fs_1.existsSync)(claudemd)) {
26
+ (0, fs_1.unlinkSync)(claudemd);
27
+ removed++;
28
+ }
29
+ // Remove .claude directory
30
+ const claudeDir = (0, path_1.join)(cwd, '.claude');
31
+ if ((0, fs_1.existsSync)(claudeDir)) {
32
+ (0, fs_1.rmSync)(claudeDir, { recursive: true });
33
+ removed++;
34
+ }
35
+ if (removed > 0) {
36
+ spinner.succeed('Patterns removed successfully!');
37
+ console.log(chalk_1.default.gray(`\n Removed ${removed} item(s)\n`));
38
+ }
39
+ else {
40
+ spinner.info('No patterns found to remove');
41
+ console.log(chalk_1.default.gray('\n This directory has no CodeBakers patterns installed.\n'));
42
+ }
43
+ }
44
+ catch (error) {
45
+ spinner.fail('Uninstall failed');
46
+ const message = error instanceof Error ? error.message : 'Unknown error';
47
+ console.log(chalk_1.default.red(`\n Error: ${message}\n`));
48
+ process.exit(1);
49
+ }
50
+ }
@@ -0,0 +1,5 @@
1
+ export declare function getApiKey(): string | null;
2
+ export declare function setApiKey(key: string): void;
3
+ export declare function clearApiKey(): void;
4
+ export declare function getApiUrl(): string;
5
+ export declare function setApiUrl(url: string): void;
package/dist/config.js ADDED
@@ -0,0 +1,33 @@
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.getApiKey = getApiKey;
7
+ exports.setApiKey = setApiKey;
8
+ exports.clearApiKey = clearApiKey;
9
+ exports.getApiUrl = getApiUrl;
10
+ exports.setApiUrl = setApiUrl;
11
+ const conf_1 = __importDefault(require("conf"));
12
+ const config = new conf_1.default({
13
+ projectName: 'codebakers',
14
+ defaults: {
15
+ apiKey: null,
16
+ apiUrl: 'https://codebakers.ai',
17
+ },
18
+ });
19
+ function getApiKey() {
20
+ return config.get('apiKey');
21
+ }
22
+ function setApiKey(key) {
23
+ config.set('apiKey', key);
24
+ }
25
+ function clearApiKey() {
26
+ config.delete('apiKey');
27
+ }
28
+ function getApiUrl() {
29
+ return config.get('apiUrl');
30
+ }
31
+ function setApiUrl(url) {
32
+ config.set('apiUrl', url);
33
+ }
package/dist/index.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  #!/usr/bin/env node
2
+ export {};