diffscribe 1.0.1 → 1.0.3
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/dist/auth.d.ts +6 -0
- package/dist/auth.js +42 -0
- package/dist/auth.js.map +1 -0
- package/dist/config.js +20 -4
- package/dist/config.js.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/service.js +101 -3
- package/dist/service.js.map +1 -1
- package/package.json +1 -1
package/dist/auth.d.ts
ADDED
package/dist/auth.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { password } from '@inquirer/prompts';
|
|
2
|
+
import { homedir } from 'os';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { existsSync, mkdirSync, writeFileSync } from 'fs';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
function getConfigPath() {
|
|
7
|
+
return join(homedir(), '.diffscribe', 'config.json');
|
|
8
|
+
}
|
|
9
|
+
function ensureConfigDirExists() {
|
|
10
|
+
const configDir = join(homedir(), '.diffscribe');
|
|
11
|
+
if (!existsSync(configDir)) {
|
|
12
|
+
mkdirSync(configDir, { recursive: true });
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function writeConfigFile(config) {
|
|
16
|
+
ensureConfigDirExists();
|
|
17
|
+
const configPath = getConfigPath();
|
|
18
|
+
writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');
|
|
19
|
+
}
|
|
20
|
+
export async function setApiKey() {
|
|
21
|
+
const apiKey = await password({
|
|
22
|
+
message: 'Enter your OpenRouter API key:',
|
|
23
|
+
mask: true,
|
|
24
|
+
validate: (value) => {
|
|
25
|
+
if (!value || value.trim() === '') {
|
|
26
|
+
return 'API key cannot be empty';
|
|
27
|
+
}
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
console.log();
|
|
32
|
+
console.log(chalk.dim('Your OpenRouter API key will be stored locally at: ~/.diffscribe/config.json'));
|
|
33
|
+
console.log();
|
|
34
|
+
const config = {
|
|
35
|
+
openrouter: {
|
|
36
|
+
apiKey: apiKey.trim()
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
writeConfigFile(config);
|
|
40
|
+
console.log(`${chalk.bold.green('✓')} API key saved successfully!`);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=auth.js.map
|
package/dist/auth.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAgB,aAAa,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,SAAS,aAAa;IACpB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,qBAAqB;IAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;IAEjD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,MAAkB;IACzC,qBAAqB,EAAE,CAAC;IACxB,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IAEnC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;QAC5B,OAAO,EAAE,gCAAgC;QACzC,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;YAC1B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBAClC,OAAO,yBAAyB,CAAC;YACnC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC,CAAC;IACvG,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,MAAM,GAAe;QACzB,UAAU,EAAE;YACV,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;SACtB;KACF,CAAC;IAEF,eAAe,CAAC,MAAM,CAAC,CAAC;IAExB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;AACtE,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -1,18 +1,34 @@
|
|
|
1
1
|
import { config } from 'dotenv';
|
|
2
2
|
import { fileURLToPath } from 'url';
|
|
3
3
|
import { dirname, join } from 'path';
|
|
4
|
+
import { existsSync, readFileSync } from 'fs';
|
|
5
|
+
import { homedir } from 'os';
|
|
4
6
|
const __filename = fileURLToPath(import.meta.url);
|
|
5
7
|
const __dirname = dirname(__filename);
|
|
6
8
|
config({ path: join(__dirname, '../.env') });
|
|
7
9
|
export const DRAFT_MODEL_PRIMARY = 'google/gemini-2.5-flash-lite';
|
|
8
10
|
export const DRAFT_MODEL_BACKUP = 'mistralai/devstral-2512';
|
|
9
11
|
export const REFINEMENT_MODEL = 'google/gemini-2.5-flash';
|
|
12
|
+
function getApiKeyFromConfig() {
|
|
13
|
+
const configPath = join(homedir(), '.diffscribe', 'config.json');
|
|
14
|
+
if (!existsSync(configPath)) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
const configContent = readFileSync(configPath, 'utf-8');
|
|
19
|
+
const config = JSON.parse(configContent);
|
|
20
|
+
return config.openrouter?.apiKey || null;
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
throw new Error('Config file corrupted: ~/.diffscribe/config.json\n' +
|
|
24
|
+
'Please remove or fix the file, then run: dcs auth set');
|
|
25
|
+
}
|
|
26
|
+
}
|
|
10
27
|
export function getOpenRouterConfig() {
|
|
11
|
-
const apiKey = process.env.OPENROUTER_API_KEY;
|
|
28
|
+
const apiKey = getApiKeyFromConfig() || process.env.OPENROUTER_API_KEY;
|
|
12
29
|
if (!apiKey) {
|
|
13
|
-
throw new Error('
|
|
14
|
-
'
|
|
15
|
-
'Set it with: export OPENROUTER_API_KEY=your-key-here');
|
|
30
|
+
throw new Error('No OpenRouter API key found.\n' +
|
|
31
|
+
'Run: dcs auth set to store your API key.');
|
|
16
32
|
}
|
|
17
33
|
return {
|
|
18
34
|
apiKey,
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAE7B,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;AAqB7C,MAAM,CAAC,MAAM,mBAAmB,GAAG,8BAA8B,CAAC;AAElE,MAAM,CAAC,MAAM,kBAAkB,GAAG,yBAAyB,CAAC;AAE5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,yBAAyB,CAAC;AAQ1D,SAAS,mBAAmB;IAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IAEjE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACxD,MAAM,MAAM,GAAe,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAErD,OAAO,MAAM,CAAC,UAAU,EAAE,MAAM,IAAI,IAAI,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,oDAAoD;YACpD,uDAAuD,CACxD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,MAAM,MAAM,GAAG,mBAAmB,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAEvE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,gCAAgC;YAChC,0CAA0C,CAC3C,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM;QACN,OAAO,EAAE,4CAA4C;QACrD,QAAQ,EAAE,YAAY;KACvB,CAAC;AACJ,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,11 +5,18 @@ import { GitHelper } from './git.js';
|
|
|
5
5
|
import { CommitService } from './service.js';
|
|
6
6
|
import { promptCommitStyle, promptAction, promptContinueRegeneration } from './ui.js';
|
|
7
7
|
import { getOpenRouterConfig, DRAFT_MODEL_PRIMARY, DRAFT_MODEL_BACKUP, REFINEMENT_MODEL } from './config.js';
|
|
8
|
+
import { setApiKey } from './auth.js';
|
|
8
9
|
const program = new Command()
|
|
9
10
|
.name('diffscribe')
|
|
10
11
|
.description('AI-powered commit message generator')
|
|
11
12
|
.version('1.0.0')
|
|
12
13
|
.option('--mock', 'Use mock generation instead of LLM (for testing)');
|
|
14
|
+
program
|
|
15
|
+
.command('auth')
|
|
16
|
+
.description('Manage API key configuration')
|
|
17
|
+
.addCommand(new Command('set')
|
|
18
|
+
.description('Store your OpenRouter API key')
|
|
19
|
+
.action(setApiKey));
|
|
13
20
|
async function generateMockCommitMessage(style, diff) {
|
|
14
21
|
const hasTest = diff.includes('test') || diff.includes('spec');
|
|
15
22
|
const hasFix = diff.includes('fix') || diff.includes('bug');
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,gBAAgB,EAA8B,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/service.js
CHANGED
|
@@ -85,8 +85,44 @@ async function callModel(model, systemPrompt, userPrompt, maxTokens = 500) {
|
|
|
85
85
|
}
|
|
86
86
|
async function generateCommitMessage(diff, style, useFallback) {
|
|
87
87
|
const styleInstruction = style === 'concise'
|
|
88
|
-
?
|
|
89
|
-
|
|
88
|
+
? `Return a concise commit message in Conventional Commits format:
|
|
89
|
+
|
|
90
|
+
<type>(<scope>): <description>
|
|
91
|
+
|
|
92
|
+
- Bullet point 1
|
|
93
|
+
|
|
94
|
+
Use 1-4 bullet points dynamically based on the number of changes.
|
|
95
|
+
Only add bullet points if there are meaningful details to explain.`
|
|
96
|
+
: `Return a detailed commit message in Conventional Commits format.
|
|
97
|
+
|
|
98
|
+
Format Options (choose dynamically based on diff complexity):
|
|
99
|
+
|
|
100
|
+
SIMPLE FORMAT (for straightforward changes):
|
|
101
|
+
<type>(<scope>):
|
|
102
|
+
|
|
103
|
+
- Bullet point 1
|
|
104
|
+
- Bullet point 2
|
|
105
|
+
- Bullet point 3
|
|
106
|
+
|
|
107
|
+
STRUCTURED FORMAT (for complex changes with multiple aspects):
|
|
108
|
+
<type>(<scope>):
|
|
109
|
+
|
|
110
|
+
<Section Title>:
|
|
111
|
+
- Bullet point
|
|
112
|
+
- Bullet point
|
|
113
|
+
|
|
114
|
+
<Section Title>:
|
|
115
|
+
- Bullet point
|
|
116
|
+
- Bullet point
|
|
117
|
+
|
|
118
|
+
[Optional footer for breaking changes, etc.]
|
|
119
|
+
|
|
120
|
+
Use structured format when changes involve:
|
|
121
|
+
- Multiple features/aspects
|
|
122
|
+
- Different technical areas
|
|
123
|
+
- Implementation details + user impact
|
|
124
|
+
- Complex refactoring
|
|
125
|
+
Use simple format for focused, single-aspect changes.`;
|
|
90
126
|
const systemPrompt = `You are an expert developer who writes perfect Conventional Commits.
|
|
91
127
|
Your task is to analyze git diffs and generate clear, meaningful commit messages.
|
|
92
128
|
|
|
@@ -96,7 +132,69 @@ Rules:
|
|
|
96
132
|
- Description must be in imperative mood (e.g., "add" not "added" or "adds")
|
|
97
133
|
- Keep header under 72 characters
|
|
98
134
|
- No period at the end of header
|
|
99
|
-
- Focus on WHAT and WHY, not HOW
|
|
135
|
+
- Focus on WHAT and WHY, not HOW
|
|
136
|
+
|
|
137
|
+
Section Guidelines:
|
|
138
|
+
- Create logical sections based on the diff content
|
|
139
|
+
- Common section titles: Core Features, Changes, Technical, Implementation, Breaking Changes
|
|
140
|
+
- Use clear, descriptive section names
|
|
141
|
+
- Group related changes together
|
|
142
|
+
- Each section should have 4-5 bullet points maximum
|
|
143
|
+
- Each bullet should be a complete thought
|
|
144
|
+
|
|
145
|
+
EXAMPLES:
|
|
146
|
+
|
|
147
|
+
Simple Format Example:
|
|
148
|
+
feat(auth): implement OAuth login flow
|
|
149
|
+
|
|
150
|
+
- Add Google OAuth integration
|
|
151
|
+
- Update auth controller to handle OAuth callbacks
|
|
152
|
+
- Add OAuth configuration to environment variables
|
|
153
|
+
|
|
154
|
+
Structured Format Example:
|
|
155
|
+
feat(notes): implement note creation, reading, deletion with tag system
|
|
156
|
+
|
|
157
|
+
Core Features:
|
|
158
|
+
- Create notes with tag assignments
|
|
159
|
+
- Read and filter notes by tags
|
|
160
|
+
- Delete notes with UI confirmation
|
|
161
|
+
|
|
162
|
+
Tag System:
|
|
163
|
+
- Add multiple tags to notes
|
|
164
|
+
- Filter notes by tags
|
|
165
|
+
- Tag management interface
|
|
166
|
+
- Tag-based organization
|
|
167
|
+
|
|
168
|
+
Technical:
|
|
169
|
+
- Appwrite database integration
|
|
170
|
+
- Real-time note listing
|
|
171
|
+
- Tag filtering functionality
|
|
172
|
+
- Responsive UI design
|
|
173
|
+
|
|
174
|
+
Pending: Update functionality for existing notes
|
|
175
|
+
|
|
176
|
+
Fix Example:
|
|
177
|
+
fix(api): resolve null pointer in user authentication
|
|
178
|
+
|
|
179
|
+
Issue: Login fails when user has no profile image
|
|
180
|
+
- Add null check for profile images
|
|
181
|
+
- Update auth middleware to handle missing profiles
|
|
182
|
+
- Add error logging for authentication failures
|
|
183
|
+
|
|
184
|
+
Refactor Example:
|
|
185
|
+
refactor(core): migrate from Redux to Zustand
|
|
186
|
+
|
|
187
|
+
Migration:
|
|
188
|
+
- Replace Redux store with Zustand
|
|
189
|
+
- Update all state selectors
|
|
190
|
+
- Remove Redux middleware
|
|
191
|
+
- Migrate async actions to Zustand
|
|
192
|
+
|
|
193
|
+
Benefits:
|
|
194
|
+
- Smaller bundle size (reduced by 200KB)
|
|
195
|
+
- Simpler state management
|
|
196
|
+
- Better TypeScript support
|
|
197
|
+
- Improved developer experience`;
|
|
100
198
|
const userPrompt = `${styleInstruction}\n\nGit Diff:\n\`\`\`diff\n${diff}\n\`\`\``;
|
|
101
199
|
const result = await callModel(DRAFT_MODEL_PRIMARY, systemPrompt, userPrompt);
|
|
102
200
|
if (result.success) {
|
package/dist/service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|