@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.
- package/README.md +162 -0
- package/dist/ai/anthropic-client.js +92 -0
- package/dist/ai/commit-generator.js +200 -0
- package/dist/ai/gemini-client.js +201 -0
- package/dist/ai/git-interpreter.js +209 -0
- package/dist/ai/smart-solver.js +260 -0
- package/dist/auth/supabase-client.js +288 -0
- package/dist/commands/activate.js +108 -0
- package/dist/commands/commit.js +255 -0
- package/dist/commands/conflict.js +233 -0
- package/dist/commands/doctor.js +113 -0
- package/dist/commands/git-advanced.js +311 -0
- package/dist/commands/github-auth.js +193 -0
- package/dist/commands/login.js +11 -0
- package/dist/commands/natural.js +305 -0
- package/dist/commands/onboard.js +111 -0
- package/dist/commands/quick.js +173 -0
- package/dist/commands/setup.js +163 -0
- package/dist/commands/stats.js +128 -0
- package/dist/commands/uninstall.js +131 -0
- package/dist/db/database.js +99 -0
- package/dist/index.js +144 -0
- package/dist/lib/auth.js +171 -0
- package/dist/lib/github.js +280 -0
- package/dist/lib/multi-repo.js +276 -0
- package/dist/lib/supabase.js +153 -0
- package/dist/license/manager.js +203 -0
- package/dist/repl/index.js +185 -0
- package/dist/repl/interpreter.js +524 -0
- package/dist/utils/analytics.js +36 -0
- package/dist/utils/auth-storage.js +65 -0
- package/dist/utils/dopamine.js +211 -0
- package/dist/utils/errors.js +56 -0
- package/dist/utils/git.js +105 -0
- package/dist/utils/heatmap.js +265 -0
- package/dist/utils/rate-limit.js +68 -0
- package/dist/utils/retry.js +46 -0
- package/dist/utils/ui.js +189 -0
- package/dist/utils/version.js +81 -0
- 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
|
+
}
|