@snapcommit/cli 1.0.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 (40) hide show
  1. package/README.md +162 -0
  2. package/dist/ai/anthropic-client.js +92 -0
  3. package/dist/ai/commit-generator.js +200 -0
  4. package/dist/ai/gemini-client.js +201 -0
  5. package/dist/ai/git-interpreter.js +209 -0
  6. package/dist/ai/smart-solver.js +260 -0
  7. package/dist/auth/supabase-client.js +288 -0
  8. package/dist/commands/activate.js +108 -0
  9. package/dist/commands/commit.js +255 -0
  10. package/dist/commands/conflict.js +233 -0
  11. package/dist/commands/doctor.js +113 -0
  12. package/dist/commands/git-advanced.js +311 -0
  13. package/dist/commands/github-auth.js +193 -0
  14. package/dist/commands/login.js +11 -0
  15. package/dist/commands/natural.js +305 -0
  16. package/dist/commands/onboard.js +111 -0
  17. package/dist/commands/quick.js +173 -0
  18. package/dist/commands/setup.js +163 -0
  19. package/dist/commands/stats.js +128 -0
  20. package/dist/commands/uninstall.js +131 -0
  21. package/dist/db/database.js +99 -0
  22. package/dist/index.js +144 -0
  23. package/dist/lib/auth.js +171 -0
  24. package/dist/lib/github.js +280 -0
  25. package/dist/lib/multi-repo.js +276 -0
  26. package/dist/lib/supabase.js +153 -0
  27. package/dist/license/manager.js +203 -0
  28. package/dist/repl/index.js +185 -0
  29. package/dist/repl/interpreter.js +524 -0
  30. package/dist/utils/analytics.js +36 -0
  31. package/dist/utils/auth-storage.js +65 -0
  32. package/dist/utils/dopamine.js +211 -0
  33. package/dist/utils/errors.js +56 -0
  34. package/dist/utils/git.js +105 -0
  35. package/dist/utils/heatmap.js +265 -0
  36. package/dist/utils/rate-limit.js +68 -0
  37. package/dist/utils/retry.js +46 -0
  38. package/dist/utils/ui.js +189 -0
  39. package/dist/utils/version.js +81 -0
  40. package/package.json +69 -0
@@ -0,0 +1,185 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.startREPL = startREPL;
40
+ const readline_1 = __importDefault(require("readline"));
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const interpreter_1 = require("./interpreter");
43
+ const supabase_1 = require("../lib/supabase");
44
+ const stats_1 = require("../commands/stats");
45
+ const multiRepo = __importStar(require("../lib/multi-repo"));
46
+ const context = {};
47
+ /**
48
+ * Start the SnapCommit REPL (persistent interactive mode)
49
+ */
50
+ async function startREPL() {
51
+ console.log(chalk_1.default.bold.cyan('\n⚔ SnapCommit Interactive Mode\n'));
52
+ console.log(chalk_1.default.gray('Type naturally, like talking to a person. Type "exit" or "quit" to leave.\n'));
53
+ // Save current repo
54
+ multiRepo.saveCurrentRepo();
55
+ // Show current repo context
56
+ const repoContext = multiRepo.getRepoContext();
57
+ console.log(` ${repoContext}\n`);
58
+ // Check authentication status
59
+ const authenticated = await (0, supabase_1.isAuthenticated)();
60
+ if (!authenticated) {
61
+ console.log(chalk_1.default.yellow('šŸ’” Tip: Run "snapcommit login" to sync your stats across devices\n'));
62
+ }
63
+ const rl = readline_1.default.createInterface({
64
+ input: process.stdin,
65
+ output: process.stdout,
66
+ prompt: chalk_1.default.cyan('snap> '),
67
+ });
68
+ rl.prompt();
69
+ rl.on('line', async (input) => {
70
+ const trimmed = input.trim();
71
+ // Exit commands
72
+ if (trimmed === 'exit' || trimmed === 'quit' || trimmed === 'q') {
73
+ console.log(chalk_1.default.gray('\nšŸ‘‹ Great session! Keep building!\n'));
74
+ rl.close();
75
+ process.exit(0);
76
+ }
77
+ // Empty input
78
+ if (!trimmed) {
79
+ rl.prompt();
80
+ return;
81
+ }
82
+ // Special commands (non-natural language shortcuts)
83
+ if (trimmed === 'stats' || trimmed === 's') {
84
+ (0, stats_1.statsCommand)();
85
+ rl.prompt();
86
+ return;
87
+ }
88
+ if (trimmed === 'help' || trimmed === 'h' || trimmed === '?') {
89
+ showHelp();
90
+ rl.prompt();
91
+ return;
92
+ }
93
+ if (trimmed === 'clear' || trimmed === 'cls') {
94
+ console.clear();
95
+ console.log(chalk_1.default.bold.cyan('\n⚔ SnapCommit Interactive Mode\n'));
96
+ rl.prompt();
97
+ return;
98
+ }
99
+ // Multi-repo commands
100
+ if (trimmed === 'repos' || trimmed === 'list repos' || trimmed === 'show repos') {
101
+ multiRepo.listRepos();
102
+ rl.prompt();
103
+ return;
104
+ }
105
+ // Switch repo by name or index
106
+ const switchRepoMatch = trimmed.match(/^(?:switch to|cd|goto) (.+)$/i);
107
+ if (switchRepoMatch) {
108
+ const target = switchRepoMatch[1].trim();
109
+ // Check if it's a number (index)
110
+ const index = parseInt(target, 10);
111
+ if (!isNaN(index)) {
112
+ await multiRepo.switchToRepo(index);
113
+ }
114
+ else {
115
+ await multiRepo.switchToRepo(target);
116
+ }
117
+ rl.prompt();
118
+ return;
119
+ }
120
+ // Natural language processing
121
+ try {
122
+ await (0, interpreter_1.executeNaturalLanguageCommand)(trimmed, context);
123
+ }
124
+ catch (error) {
125
+ console.log(chalk_1.default.red(`\nāŒ ${error.message}\n`));
126
+ }
127
+ rl.prompt();
128
+ });
129
+ rl.on('close', () => {
130
+ console.log(chalk_1.default.gray('\nšŸ‘‹ Goodbye!\n'));
131
+ process.exit(0);
132
+ });
133
+ }
134
+ /**
135
+ * Show help menu
136
+ */
137
+ function showHelp() {
138
+ console.log(chalk_1.default.bold('\nšŸ“– SnapCommit Help\n'));
139
+ console.log(chalk_1.default.bold.cyan('šŸ’» Git Basics:'));
140
+ console.log(' • "commit my changes" - AI commit with staging');
141
+ console.log(' • "push" - Push to remote');
142
+ console.log(' • "pull" - Pull from remote');
143
+ console.log(' • "status" - Show git status');
144
+ console.log(' • "diff" - Show changes');
145
+ console.log(' • "log" - Show commit history');
146
+ console.log('');
147
+ console.log(chalk_1.default.bold.cyan('🌿 Branches:'));
148
+ console.log(' • "create branch feature-auth" - Create & switch');
149
+ console.log(' • "switch to main" - Switch branches');
150
+ console.log(' • "merge feature-auth" - Merge branch');
151
+ console.log(' • "delete branch old-feature" - Delete branch');
152
+ console.log('');
153
+ console.log(chalk_1.default.bold.cyan('šŸ’¾ Stash:'));
154
+ console.log(' • "stash my changes" - Save work temporarily');
155
+ console.log(' • "list stash" - Show stashed changes');
156
+ console.log(' • "pop stash" - Apply & remove stash');
157
+ console.log(' • "apply stash" - Apply stash (keep it)');
158
+ console.log('');
159
+ console.log(chalk_1.default.bold.cyan('šŸ”„ Advanced:'));
160
+ console.log(' • "rebase onto main" - Rebase current branch');
161
+ console.log(' • "cherry-pick abc123" - Cherry-pick commit');
162
+ console.log(' • "amend" - Fix last commit');
163
+ console.log('');
164
+ console.log(chalk_1.default.bold.cyan('šŸš€ GitHub:'));
165
+ console.log(' • "create a PR" - Create pull request');
166
+ console.log(' • "check ci" - Check CI/CD status');
167
+ console.log(' • "list prs" - List pull requests');
168
+ console.log(' • "merge pr 42" - Merge PR #42');
169
+ console.log('');
170
+ console.log(chalk_1.default.bold.cyan('šŸ“Š Stats:'));
171
+ console.log(' • "stats" - Show your progress');
172
+ console.log('');
173
+ console.log(chalk_1.default.bold.cyan('šŸ“ Multi-Repo:'));
174
+ console.log(' • "repos" - List all saved repos');
175
+ console.log(' • "cd project-name" - Switch to a repo');
176
+ console.log(' • "switch to project-name" - Switch to a repo');
177
+ console.log('');
178
+ console.log(chalk_1.default.bold.cyan('šŸ”§ System:'));
179
+ console.log(' • help, h, ? - Show this help');
180
+ console.log(' • clear, cls - Clear screen');
181
+ console.log(' • exit, quit, q - Exit SnapCommit');
182
+ console.log('');
183
+ console.log(chalk_1.default.gray('šŸ’” Type naturally! SnapCommit understands plain English.\n'));
184
+ console.log(chalk_1.default.gray('Examples: "undo that", "fix my last commit", "show what changed"\n'));
185
+ }