@m2015agg/git-skill 0.5.4 → 0.5.5
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 +3 -3
- package/dist/commands/install.js +129 -72
- package/dist/commands/install.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -46,7 +46,7 @@ If `git-skill` is not found after install, run `hash -r` to refresh your shell's
|
|
|
46
46
|
|
|
47
47
|
```bash
|
|
48
48
|
# First time only — interactive wizard configures embeddings + API key
|
|
49
|
-
git-skill
|
|
49
|
+
git-skill config
|
|
50
50
|
|
|
51
51
|
# Then in each repo
|
|
52
52
|
cd your-project
|
|
@@ -66,7 +66,7 @@ git-skill add-key sk-your-key-here # auto-detects OpenAI
|
|
|
66
66
|
For semantic search, configure an embedding provider. Works with any OpenAI-compatible endpoint (OpenAI, Ollama, LMStudio).
|
|
67
67
|
|
|
68
68
|
```bash
|
|
69
|
-
git-skill
|
|
69
|
+
git-skill config # Configure embedding provider
|
|
70
70
|
git-skill embed # Generate embeddings for all commits + enrichments
|
|
71
71
|
```
|
|
72
72
|
|
|
@@ -177,7 +177,7 @@ git-skill why <hash> # View enrichment for a commit
|
|
|
177
177
|
|
|
178
178
|
| Command | Description |
|
|
179
179
|
|---------|-------------|
|
|
180
|
-
| `git-skill
|
|
180
|
+
| `git-skill config` | Configure embeddings, enrichment, API keys (shows current, update or skip) |
|
|
181
181
|
| `git-skill init` | Per-project setup (hook, snapshot, workflow commands, 30-day context) |
|
|
182
182
|
| `git-skill add-key <key>` | Add or update API key (auto-detects Anthropic/OpenAI) |
|
|
183
183
|
| `git-skill approve` | Pre-approve read commands in Claude Code |
|
package/dist/commands/install.js
CHANGED
|
@@ -29,7 +29,6 @@ function writeApiKey(key) {
|
|
|
29
29
|
if (existsSync(envPath)) {
|
|
30
30
|
const content = readFileSync(envPath, "utf-8");
|
|
31
31
|
if (content.includes("GIT_SKILL_LLM_KEY=")) {
|
|
32
|
-
// Replace existing key
|
|
33
32
|
const updated = content.replace(/GIT_SKILL_LLM_KEY=.*/g, entry);
|
|
34
33
|
writeFileSync(envPath, updated, { mode: 0o600 });
|
|
35
34
|
write(" Updated GIT_SKILL_LLM_KEY in ~/.env\n");
|
|
@@ -64,11 +63,16 @@ async function testEmbeddingConnection(url, model) {
|
|
|
64
63
|
}
|
|
65
64
|
}
|
|
66
65
|
export function installCommand() {
|
|
67
|
-
return new Command("
|
|
68
|
-
.
|
|
66
|
+
return new Command("config")
|
|
67
|
+
.alias("install")
|
|
68
|
+
.description("Configure git-skill — embeddings, enrichment, API keys")
|
|
69
69
|
.option("--ci", "Non-interactive mode, use defaults")
|
|
70
70
|
.action(async (opts) => {
|
|
71
|
-
|
|
71
|
+
// Load existing or create new config
|
|
72
|
+
const existing = readConfig();
|
|
73
|
+
const config = existing ?? getDefaultConfig();
|
|
74
|
+
const isUpdate = !!existing;
|
|
75
|
+
write("git-skill Configuration\n");
|
|
72
76
|
write("═".repeat(40) + "\n\n");
|
|
73
77
|
// 1. Check git
|
|
74
78
|
write("1. Checking git...\n");
|
|
@@ -77,103 +81,156 @@ export function installCommand() {
|
|
|
77
81
|
process.exit(1);
|
|
78
82
|
}
|
|
79
83
|
write(" git found.\n\n");
|
|
80
|
-
//
|
|
81
|
-
|
|
84
|
+
// Show current config if exists
|
|
85
|
+
if (isUpdate) {
|
|
86
|
+
write("Current configuration:\n");
|
|
87
|
+
write(` Embeddings: ${config.embedding.enabled ? `enabled (${config.embedding.provider}, ${config.embedding.model})` : "disabled"}\n`);
|
|
88
|
+
write(` Enrichment: ${config.enrichment.enabled ? `enabled (${config.enrichment.model})` : "disabled"}\n`);
|
|
89
|
+
// Check for API key
|
|
90
|
+
const envPath = join(homedir(), ".env");
|
|
91
|
+
const hasKey = existsSync(envPath) && readFileSync(envPath, "utf-8").includes("GIT_SKILL_LLM_KEY=");
|
|
92
|
+
write(` API key: ${hasKey ? "set in ~/.env" : "not set"}\n`);
|
|
93
|
+
write("\n");
|
|
94
|
+
}
|
|
82
95
|
if (!opts.ci) {
|
|
83
96
|
// 2. Embedding setup
|
|
84
97
|
write("2. Embeddings (semantic search)\n");
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
write(" 2) OpenAI — https://api.openai.com/v1/embeddings\n");
|
|
92
|
-
write(" 3) Custom URL\n\n");
|
|
93
|
-
const provider = await ask(" Choose [1/2/3]: ");
|
|
94
|
-
if (provider === "1") {
|
|
95
|
-
const url = await ask(" Ollama URL [http://localhost:11434/api/embed]: ");
|
|
96
|
-
config.embedding.url = url || "http://localhost:11434/api/embed";
|
|
97
|
-
const model = await ask(" Embedding model [mxbai-embed-large]: ");
|
|
98
|
-
config.embedding.model = model || "mxbai-embed-large";
|
|
99
|
-
config.embedding.provider = "ollama";
|
|
100
|
-
config.embedding.dimensions = 1024;
|
|
101
|
-
}
|
|
102
|
-
else if (provider === "2") {
|
|
103
|
-
config.embedding.url = "https://api.openai.com/v1/embeddings";
|
|
104
|
-
config.embedding.model = "text-embedding-3-small";
|
|
105
|
-
config.embedding.provider = "openai";
|
|
106
|
-
config.embedding.apiKey = "${GIT_SKILL_LLM_KEY}";
|
|
107
|
-
config.embedding.dimensions = 1536;
|
|
98
|
+
if (config.embedding.enabled) {
|
|
99
|
+
write(` Currently: ${config.embedding.provider} (${config.embedding.model}) at ${config.embedding.url}\n`);
|
|
100
|
+
const change = await ask(" Update embedding config? [y/N] ");
|
|
101
|
+
if (change.toLowerCase() !== "y") {
|
|
102
|
+
write(" Keeping current config.\n\n");
|
|
103
|
+
goto_enrichment();
|
|
108
104
|
}
|
|
109
105
|
else {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
106
|
+
await configureEmbedding(config);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
write(" Embeddings let you search by meaning, not just keywords.\n");
|
|
111
|
+
write(" Requires an embedding provider (Ollama is free and local).\n\n");
|
|
112
|
+
const enable = await ask(" Enable embeddings? [y/N] ");
|
|
113
|
+
if (enable.toLowerCase() === "y") {
|
|
114
|
+
await configureEmbedding(config);
|
|
114
115
|
}
|
|
115
|
-
config.embedding.enabled = true;
|
|
116
|
-
await testEmbeddingConnection(config.embedding.url, config.embedding.model);
|
|
117
116
|
}
|
|
118
117
|
write("\n");
|
|
119
118
|
// 3. Enrichment setup
|
|
120
119
|
write("3. LLM Enrichment (commit analysis)\n");
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
write("\n Providers:\n");
|
|
127
|
-
write(" 1) Anthropic (recommended) — claude-sonnet-4-6\n");
|
|
128
|
-
write(" 2) OpenAI — gpt-4o\n\n");
|
|
129
|
-
const enrichProvider = await ask(" Choose [1/2]: ");
|
|
130
|
-
if (enrichProvider === "2") {
|
|
131
|
-
config.enrichment.url = "https://api.openai.com/v1/chat/completions";
|
|
132
|
-
config.enrichment.model = "gpt-4o";
|
|
120
|
+
if (config.enrichment.enabled) {
|
|
121
|
+
write(` Currently: ${config.enrichment.model} at ${config.enrichment.url}\n`);
|
|
122
|
+
const change = await ask(" Update enrichment config? [y/N] ");
|
|
123
|
+
if (change.toLowerCase() === "y") {
|
|
124
|
+
await configureEnrichment(config);
|
|
133
125
|
}
|
|
134
126
|
else {
|
|
135
|
-
|
|
136
|
-
config.enrichment.model = "claude-sonnet-4-6";
|
|
127
|
+
write(" Keeping current config.\n");
|
|
137
128
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
write("
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
write(" Enrichment uses an LLM to analyze each commit — what changed, why,\n");
|
|
132
|
+
write(" and what alternatives existed. Powers the 'verify' command.\n");
|
|
133
|
+
write(" Requires an API key (Anthropic or OpenAI).\n\n");
|
|
134
|
+
const enable = await ask(" Enable enrichment? [y/N] ");
|
|
135
|
+
if (enable.toLowerCase() === "y") {
|
|
136
|
+
await configureEnrichment(config);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
write("\n");
|
|
140
|
+
// 4. API key
|
|
141
|
+
write("4. API Key\n");
|
|
142
|
+
const envPath = join(homedir(), ".env");
|
|
143
|
+
const hasKey = existsSync(envPath) && readFileSync(envPath, "utf-8").includes("GIT_SKILL_LLM_KEY=");
|
|
144
|
+
if (hasKey) {
|
|
145
|
+
write(" API key already set in ~/.env\n");
|
|
146
|
+
const changeKey = await ask(" Update API key? [y/N] ");
|
|
147
|
+
if (changeKey.toLowerCase() === "y") {
|
|
148
|
+
const key = await ask(" Paste new API key: ");
|
|
149
|
+
if (key)
|
|
150
|
+
writeApiKey(key);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
else if (config.enrichment.enabled || (config.embedding.enabled && config.embedding.apiKey)) {
|
|
154
|
+
const key = await ask(" Paste your API key (stored in ~/.env): ");
|
|
155
|
+
if (key) {
|
|
156
|
+
writeApiKey(key);
|
|
144
157
|
}
|
|
145
158
|
else {
|
|
146
|
-
write(" Skipped — add
|
|
159
|
+
write(" Skipped — add later with: git-skill add-key <your-key>\n");
|
|
147
160
|
}
|
|
148
161
|
}
|
|
149
162
|
write("\n");
|
|
150
163
|
}
|
|
151
|
-
//
|
|
152
|
-
write("
|
|
164
|
+
// 5. Save config
|
|
165
|
+
write("5. Saving config...\n");
|
|
153
166
|
writeConfig(config);
|
|
154
|
-
write(
|
|
155
|
-
//
|
|
156
|
-
write("
|
|
167
|
+
write(" Config saved to ~/.config/git-skill/config.json\n");
|
|
168
|
+
// 6. Update CLAUDE.md
|
|
169
|
+
write("6. Updating ~/.claude/CLAUDE.md...\n");
|
|
157
170
|
const claudeMdPath = join(homedir(), ".claude", "CLAUDE.md");
|
|
158
171
|
const result = upsertSection(claudeMdPath, getSkillDoc());
|
|
159
172
|
write(` CLAUDE.md: ${result}\n`);
|
|
160
|
-
//
|
|
173
|
+
// Summary
|
|
161
174
|
write("\n" + "═".repeat(40) + "\n");
|
|
162
|
-
write(
|
|
175
|
+
write(`git-skill ${isUpdate ? "updated" : "configured"}!\n\n`);
|
|
163
176
|
write("Configuration:\n");
|
|
164
|
-
write(` Embeddings: ${config.embedding.enabled ? `enabled (${config.embedding.provider})` : "disabled"}\n`);
|
|
177
|
+
write(` Embeddings: ${config.embedding.enabled ? `enabled (${config.embedding.provider}, ${config.embedding.model})` : "disabled"}\n`);
|
|
165
178
|
write(` Enrichment: ${config.enrichment.enabled ? `enabled (${config.enrichment.model})` : "disabled"}\n`);
|
|
166
179
|
write("\n");
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
write(" git-skill enrich # analyze commit history with LLM\n");
|
|
172
|
-
}
|
|
173
|
-
if (config.embedding.enabled) {
|
|
174
|
-
write(" git-skill embed # generate embeddings for semantic search\n");
|
|
180
|
+
if (!isUpdate) {
|
|
181
|
+
write("Next steps:\n");
|
|
182
|
+
write(" cd <your-repo>\n");
|
|
183
|
+
write(" git-skill init # set up a repo\n");
|
|
175
184
|
}
|
|
176
185
|
write("\n");
|
|
177
186
|
});
|
|
178
187
|
}
|
|
188
|
+
async function configureEmbedding(config) {
|
|
189
|
+
write("\n Providers:\n");
|
|
190
|
+
write(" 1) Ollama (free, local) — http://localhost:11434/api/embed\n");
|
|
191
|
+
write(" 2) OpenAI — https://api.openai.com/v1/embeddings\n");
|
|
192
|
+
write(" 3) Custom URL\n\n");
|
|
193
|
+
const provider = await ask(" Choose [1/2/3]: ");
|
|
194
|
+
if (provider === "1") {
|
|
195
|
+
const url = await ask(" Ollama URL [http://localhost:11434/api/embed]: ");
|
|
196
|
+
config.embedding.url = url || "http://localhost:11434/api/embed";
|
|
197
|
+
const model = await ask(" Embedding model [mxbai-embed-large]: ");
|
|
198
|
+
config.embedding.model = model || "mxbai-embed-large";
|
|
199
|
+
config.embedding.provider = "ollama";
|
|
200
|
+
config.embedding.dimensions = 1024;
|
|
201
|
+
config.embedding.apiKey = "";
|
|
202
|
+
}
|
|
203
|
+
else if (provider === "2") {
|
|
204
|
+
config.embedding.url = "https://api.openai.com/v1/embeddings";
|
|
205
|
+
config.embedding.model = "text-embedding-3-small";
|
|
206
|
+
config.embedding.provider = "openai";
|
|
207
|
+
config.embedding.apiKey = "${GIT_SKILL_LLM_KEY}";
|
|
208
|
+
config.embedding.dimensions = 1536;
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
const url = await ask(" Embedding URL: ");
|
|
212
|
+
const model = await ask(" Model name: ");
|
|
213
|
+
config.embedding.url = url;
|
|
214
|
+
config.embedding.model = model;
|
|
215
|
+
}
|
|
216
|
+
config.embedding.enabled = true;
|
|
217
|
+
await testEmbeddingConnection(config.embedding.url, config.embedding.model);
|
|
218
|
+
}
|
|
219
|
+
async function configureEnrichment(config) {
|
|
220
|
+
write("\n Providers:\n");
|
|
221
|
+
write(" 1) Anthropic (recommended) — claude-sonnet-4-6\n");
|
|
222
|
+
write(" 2) OpenAI — gpt-4o\n\n");
|
|
223
|
+
const provider = await ask(" Choose [1/2]: ");
|
|
224
|
+
if (provider === "2") {
|
|
225
|
+
config.enrichment.url = "https://api.openai.com/v1/chat/completions";
|
|
226
|
+
config.enrichment.model = "gpt-4o";
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
config.enrichment.url = "https://api.anthropic.com/v1/messages";
|
|
230
|
+
config.enrichment.model = "claude-sonnet-4-6";
|
|
231
|
+
}
|
|
232
|
+
config.enrichment.apiKey = "${GIT_SKILL_LLM_KEY}";
|
|
233
|
+
config.enrichment.enabled = true;
|
|
234
|
+
}
|
|
235
|
+
function goto_enrichment() { }
|
|
179
236
|
//# sourceMappingURL=install.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAkB,MAAM,mBAAmB,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,SAAS,KAAK,CAAC,GAAW,IAAU,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEhE,SAAS,QAAQ;IACf,IAAI,CAAC;QAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AAC9F,CAAC;AAED,SAAS,GAAG,CAAC,QAAgB;IAC3B,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,qBAAqB,GAAG,EAAE,CAAC;IAEzC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC;YAC3C,
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|