@reck98/git-smart 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 +229 -0
- package/dist/ai/index.d.ts +3 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +15 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/prompt.d.ts +4 -0
- package/dist/ai/prompt.d.ts.map +1 -0
- package/dist/ai/prompt.js +47 -0
- package/dist/ai/prompt.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +43 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/commit.d.ts +2 -0
- package/dist/commands/commit.d.ts.map +1 -0
- package/dist/commands/commit.js +65 -0
- package/dist/commands/commit.js.map +1 -0
- package/dist/commands/prechecks.d.ts +6 -0
- package/dist/commands/prechecks.d.ts.map +1 -0
- package/dist/commands/prechecks.js +75 -0
- package/dist/commands/prechecks.js.map +1 -0
- package/dist/commands/push.d.ts +2 -0
- package/dist/commands/push.d.ts.map +1 -0
- package/dist/commands/push.js +27 -0
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/summary.d.ts +2 -0
- package/dist/commands/summary.d.ts.map +1 -0
- package/dist/commands/summary.js +34 -0
- package/dist/commands/summary.js.map +1 -0
- package/dist/commands/workflow.d.ts +7 -0
- package/dist/commands/workflow.d.ts.map +1 -0
- package/dist/commands/workflow.js +83 -0
- package/dist/commands/workflow.js.map +1 -0
- package/dist/core/config.d.ts +4 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +46 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/git.d.ts +16 -0
- package/dist/core/git.d.ts.map +1 -0
- package/dist/core/git.js +107 -0
- package/dist/core/git.js.map +1 -0
- package/dist/core/types.d.ts +37 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +13 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/index.d.ts +12 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +143 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/providers/anthropic.d.ts +6 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +24 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/gemini.d.ts +6 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +17 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/index.d.ts +4 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +18 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai.d.ts +6 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +19 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/openrouter.d.ts +6 -0
- package/dist/providers/openrouter.d.ts.map +1 -0
- package/dist/providers/openrouter.js +22 -0
- package/dist/providers/openrouter.js.map +1 -0
- package/dist/providers/types.d.ts +5 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/utils/classification.d.ts +3 -0
- package/dist/utils/classification.d.ts.map +1 -0
- package/dist/utils/classification.js +28 -0
- package/dist/utils/classification.js.map +1 -0
- package/dist/utils/display.d.ts +5 -0
- package/dist/utils/display.d.ts.map +1 -0
- package/dist/utils/display.js +32 -0
- package/dist/utils/display.js.map +1 -0
- package/dist/utils/templates/go.gitignore +9 -0
- package/dist/utils/templates/java.gitignore +13 -0
- package/dist/utils/templates/node.gitignore +11 -0
- package/dist/utils/templates/php.gitignore +6 -0
- package/dist/utils/templates/python.gitignore +13 -0
- package/dist/utils/templates/ruby.gitignore +6 -0
- package/dist/utils/templates/rust.gitignore +3 -0
- package/dist/utils/templates.d.ts +3 -0
- package/dist/utils/templates.d.ts.map +1 -0
- package/dist/utils/templates.js +79 -0
- package/dist/utils/templates.js.map +1 -0
- package/package.json +48 -0
- package/src/utils/templates/go.gitignore +9 -0
- package/src/utils/templates/java.gitignore +13 -0
- package/src/utils/templates/node.gitignore +11 -0
- package/src/utils/templates/php.gitignore +6 -0
- package/src/utils/templates/python.gitignore +13 -0
- package/src/utils/templates/ruby.gitignore +6 -0
- package/src/utils/templates/rust.gitignore +3 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import ora from 'ora';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { getRepoState, stageAll, stageFiles, getStagedDiff, getDiffStats, getCurrentBranch, commit, push } from '../core/git.js';
|
|
4
|
+
import { loadConfig } from '../core/config.js';
|
|
5
|
+
import { classifyFiles } from '../utils/classification.js';
|
|
6
|
+
import { printRepoState, printDiffStats, printAIResponse } from '../utils/display.js';
|
|
7
|
+
import { promptStageChanges, promptSelectFiles, promptUseConventionalCommits, promptSelectCommitMessage, promptPushToRemote } from '../prompts/index.js';
|
|
8
|
+
import { generateAIContent } from '../ai/index.js';
|
|
9
|
+
export async function runWorkflow(options = {}) {
|
|
10
|
+
const spinner = ora();
|
|
11
|
+
const config = loadConfig();
|
|
12
|
+
spinner.start('Analyzing repository state...');
|
|
13
|
+
const repoState = await getRepoState();
|
|
14
|
+
spinner.stop();
|
|
15
|
+
printRepoState(repoState);
|
|
16
|
+
const allFiles = [...repoState.modified, ...repoState.added, ...repoState.deleted, ...repoState.untracked];
|
|
17
|
+
if (allFiles.length === 0) {
|
|
18
|
+
console.log(chalk.yellow('\nNo changes detected. Nothing to commit.'));
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const classification = classifyFiles(allFiles);
|
|
22
|
+
if (!options.dryRun) {
|
|
23
|
+
const stageChoice = await promptStageChanges();
|
|
24
|
+
if (stageChoice === 'all') {
|
|
25
|
+
const stageSpinner = ora('Staging all files...').start();
|
|
26
|
+
await stageAll();
|
|
27
|
+
stageSpinner.succeed('All files staged.');
|
|
28
|
+
}
|
|
29
|
+
else if (stageChoice === 'select') {
|
|
30
|
+
const selected = await promptSelectFiles(allFiles);
|
|
31
|
+
const stageSpinner = ora('Staging selected files...').start();
|
|
32
|
+
await stageFiles(selected);
|
|
33
|
+
stageSpinner.succeed(`${selected.length} file(s) staged.`);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
console.log(chalk.yellow('Skipped staging.'));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
spinner.start('Collecting diff...');
|
|
40
|
+
const diff = await getStagedDiff();
|
|
41
|
+
const stats = await getDiffStats();
|
|
42
|
+
spinner.stop();
|
|
43
|
+
if (!diff || diff.trim().length === 0) {
|
|
44
|
+
console.log(chalk.yellow('\nNo staged changes. Nothing to commit.'));
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
printDiffStats(stats);
|
|
48
|
+
spinner.start('Generating AI analysis...');
|
|
49
|
+
try {
|
|
50
|
+
const aiResponse = await generateAIContent(repoState, classification.high.concat(classification.medium), stats, diff);
|
|
51
|
+
spinner.stop();
|
|
52
|
+
printAIResponse(aiResponse);
|
|
53
|
+
if (options.dryRun) {
|
|
54
|
+
console.log(chalk.cyan('\nℹ Dry run — no commit or push performed.'));
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const useConventional = await promptUseConventionalCommits();
|
|
58
|
+
let finalMessages = aiResponse.messages;
|
|
59
|
+
if (useConventional && !config.conventionalCommits) {
|
|
60
|
+
console.log(chalk.dim('Generating conventional commit messages...'));
|
|
61
|
+
}
|
|
62
|
+
const selectedMessage = await promptSelectCommitMessage(finalMessages);
|
|
63
|
+
const commitSpinner = ora('Committing...').start();
|
|
64
|
+
await commit(selectedMessage);
|
|
65
|
+
commitSpinner.succeed(`Committed: ${selectedMessage}`);
|
|
66
|
+
if (!options.skipCommit && !options.skipPush) {
|
|
67
|
+
const branch = await getCurrentBranch();
|
|
68
|
+
if (branch !== 'unknown') {
|
|
69
|
+
const shouldPush = await promptPushToRemote();
|
|
70
|
+
if (shouldPush) {
|
|
71
|
+
const pushSpinner = ora(`Pushing to origin/${branch}...`).start();
|
|
72
|
+
await push(branch);
|
|
73
|
+
pushSpinner.succeed('Push completed.');
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
spinner.fail('AI generation failed.');
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/commands/workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAqBtD,wBAAgB,UAAU,IAAI,cAAc,CAkB3C;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CASxF"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
const BUILTIN_API_KEY = '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';
|
|
4
|
+
const DEFAULT_CONFIG = {
|
|
5
|
+
provider: 'openrouter',
|
|
6
|
+
model: 'google/gemma-2-9b-it:free',
|
|
7
|
+
conventionalCommits: true,
|
|
8
|
+
autoPush: false,
|
|
9
|
+
showSummary: true,
|
|
10
|
+
apiKey: undefined,
|
|
11
|
+
};
|
|
12
|
+
function getProviderFromKey(provider) {
|
|
13
|
+
const key = provider.toLowerCase();
|
|
14
|
+
if (['openai', 'openrouter', 'anthropic', 'gemini'].includes(key)) {
|
|
15
|
+
return key;
|
|
16
|
+
}
|
|
17
|
+
return DEFAULT_CONFIG.provider;
|
|
18
|
+
}
|
|
19
|
+
export function loadConfig() {
|
|
20
|
+
const configPath = join(process.cwd(), '.git-smart.json');
|
|
21
|
+
if (existsSync(configPath)) {
|
|
22
|
+
try {
|
|
23
|
+
const raw = readFileSync(configPath, 'utf-8');
|
|
24
|
+
const parsed = JSON.parse(raw);
|
|
25
|
+
return {
|
|
26
|
+
...DEFAULT_CONFIG,
|
|
27
|
+
...parsed,
|
|
28
|
+
provider: getProviderFromKey(parsed.provider || DEFAULT_CONFIG.provider),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
console.warn('Warning: Could not parse .git-smart.json, using defaults.');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return { ...DEFAULT_CONFIG };
|
|
36
|
+
}
|
|
37
|
+
export function getApiKey(provider, config) {
|
|
38
|
+
const envMap = {
|
|
39
|
+
openai: 'OPENAI_API_KEY',
|
|
40
|
+
openrouter: 'OPENROUTER_API_KEY',
|
|
41
|
+
anthropic: 'ANTHROPIC_API_KEY',
|
|
42
|
+
gemini: 'GEMINI_API_KEY',
|
|
43
|
+
};
|
|
44
|
+
return process.env[envMap[provider]] || config.apiKey || BUILTIN_API_KEY || undefined;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,eAAe,GAAG,2EAA2E,CAAC;AAEpG,MAAM,cAAc,GAAmB;IACrC,QAAQ,EAAE,YAAY;IACtB,KAAK,EAAE,2BAA2B;IAClC,mBAAmB,EAAE,IAAI;IACzB,QAAQ,EAAE,KAAK;IACf,WAAW,EAAE,IAAI;IACjB,MAAM,EAAE,SAAS;CAClB,CAAC;AAEF,SAAS,kBAAkB,CAAC,QAAgB;IAC1C,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACnC,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAClE,OAAO,GAAe,CAAC;IACzB,CAAC;IACD,OAAO,cAAc,CAAC,QAAQ,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAE1D,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/B,OAAO;gBACL,GAAG,cAAc;gBACjB,GAAG,MAAM;gBACT,QAAQ,EAAE,kBAAkB,CAAC,MAAM,CAAC,QAAQ,IAAI,cAAc,CAAC,QAAQ,CAAC;aACzE,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,QAAkB,EAAE,MAAsB;IAClE,MAAM,MAAM,GAA6B;QACvC,MAAM,EAAE,gBAAgB;QACxB,UAAU,EAAE,oBAAoB;QAChC,SAAS,EAAE,mBAAmB;QAC9B,MAAM,EAAE,gBAAgB;KACzB,CAAC;IAEF,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,eAAe,IAAI,SAAS,CAAC;AACxF,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { DiffStats, RepoState } from './types.js';
|
|
2
|
+
export declare function isGitRepo(): Promise<boolean>;
|
|
3
|
+
export declare function gitInit(): Promise<void>;
|
|
4
|
+
export declare function hasGitIgnore(): Promise<boolean>;
|
|
5
|
+
export declare function getRemoteUrl(): Promise<string | null>;
|
|
6
|
+
export declare function addRemote(url: string): Promise<void>;
|
|
7
|
+
export declare function isFirstCommit(): Promise<boolean>;
|
|
8
|
+
export declare function getRepoState(): Promise<RepoState>;
|
|
9
|
+
export declare function stageAll(): Promise<void>;
|
|
10
|
+
export declare function stageFiles(files: string[]): Promise<void>;
|
|
11
|
+
export declare function getStagedDiff(): Promise<string>;
|
|
12
|
+
export declare function getDiffStats(): Promise<DiffStats>;
|
|
13
|
+
export declare function getCurrentBranch(): Promise<string>;
|
|
14
|
+
export declare function commit(message: string): Promise<void>;
|
|
15
|
+
export declare function push(branch: string): Promise<void>;
|
|
16
|
+
//# sourceMappingURL=git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/core/git.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAIlD,wBAAsB,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAOlD;AAED,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAE7C;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAQrD;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQ3D;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAOtD;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,CASvD;AAED,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAE9C;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/D;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAOrD;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,CAwBvD;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAMxD;AAED,wBAAsB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3D;AAED,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAExD"}
|
package/dist/core/git.js
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import simpleGit from 'simple-git';
|
|
2
|
+
const git = simpleGit();
|
|
3
|
+
export async function isGitRepo() {
|
|
4
|
+
try {
|
|
5
|
+
await git.revparse(['--git-dir']);
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export async function gitInit() {
|
|
13
|
+
await git.init();
|
|
14
|
+
}
|
|
15
|
+
export async function hasGitIgnore() {
|
|
16
|
+
try {
|
|
17
|
+
const files = await git.raw(['ls-files', '--others', '--exclude-standard', '.gitignore']);
|
|
18
|
+
const rootFiles = await git.raw(['ls-files', '.gitignore']);
|
|
19
|
+
return files.trim().length > 0 || rootFiles.trim().length > 0;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export async function getRemoteUrl() {
|
|
26
|
+
try {
|
|
27
|
+
const remotes = await git.getRemotes(true);
|
|
28
|
+
const origin = remotes.find(r => r.name === 'origin');
|
|
29
|
+
return origin?.refs.fetch || null;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export async function addRemote(url) {
|
|
36
|
+
await git.addRemote('origin', url);
|
|
37
|
+
}
|
|
38
|
+
export async function isFirstCommit() {
|
|
39
|
+
try {
|
|
40
|
+
await git.revparse(['--verify', 'HEAD']);
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export async function getRepoState() {
|
|
48
|
+
const status = await git.status();
|
|
49
|
+
return {
|
|
50
|
+
modified: status.modified,
|
|
51
|
+
added: status.created,
|
|
52
|
+
deleted: status.deleted,
|
|
53
|
+
untracked: status.not_added,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export async function stageAll() {
|
|
57
|
+
await git.add('.');
|
|
58
|
+
}
|
|
59
|
+
export async function stageFiles(files) {
|
|
60
|
+
await git.add(files);
|
|
61
|
+
}
|
|
62
|
+
export async function getStagedDiff() {
|
|
63
|
+
try {
|
|
64
|
+
const diff = await git.raw(['diff', '--cached']);
|
|
65
|
+
return diff || '';
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return '';
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
export async function getDiffStats() {
|
|
72
|
+
try {
|
|
73
|
+
const stat = await git.raw(['diff', '--cached', '--numstat']);
|
|
74
|
+
const lines = stat.trim().split('\n').filter(Boolean);
|
|
75
|
+
let insertions = 0;
|
|
76
|
+
let deletions = 0;
|
|
77
|
+
for (const line of lines) {
|
|
78
|
+
const parts = line.split('\t');
|
|
79
|
+
if (parts.length >= 2) {
|
|
80
|
+
insertions += parseInt(parts[0], 10) || 0;
|
|
81
|
+
deletions += parseInt(parts[1], 10) || 0;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const statOutput = await git.raw(['diff', '--cached', '--stat']);
|
|
85
|
+
const filesMatch = statOutput.match(/(\d+) file[s]? changed/);
|
|
86
|
+
const files = filesMatch ? parseInt(filesMatch[1], 10) : lines.length;
|
|
87
|
+
return { files, insertions, deletions };
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return { files: 0, insertions: 0, deletions: 0 };
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export async function getCurrentBranch() {
|
|
94
|
+
try {
|
|
95
|
+
return await git.revparse(['--abbrev-ref', 'HEAD']);
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return 'unknown';
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
export async function commit(message) {
|
|
102
|
+
await git.commit(message);
|
|
103
|
+
}
|
|
104
|
+
export async function push(branch) {
|
|
105
|
+
await git.push('origin', branch);
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/core/git.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export interface GitSmartConfig {
|
|
2
|
+
provider: 'openai' | 'openrouter' | 'anthropic' | 'gemini';
|
|
3
|
+
model: string;
|
|
4
|
+
conventionalCommits: boolean;
|
|
5
|
+
autoPush: boolean;
|
|
6
|
+
showSummary: boolean;
|
|
7
|
+
apiKey?: string;
|
|
8
|
+
}
|
|
9
|
+
export type ImpactLevel = 'low' | 'medium' | 'high';
|
|
10
|
+
export interface AIResponse {
|
|
11
|
+
summary: string[];
|
|
12
|
+
impact: ImpactLevel;
|
|
13
|
+
messages: string[];
|
|
14
|
+
}
|
|
15
|
+
export interface DiffStats {
|
|
16
|
+
files: number;
|
|
17
|
+
insertions: number;
|
|
18
|
+
deletions: number;
|
|
19
|
+
}
|
|
20
|
+
export interface RepoState {
|
|
21
|
+
modified: string[];
|
|
22
|
+
added: string[];
|
|
23
|
+
deleted: string[];
|
|
24
|
+
untracked: string[];
|
|
25
|
+
}
|
|
26
|
+
export interface FileClassification {
|
|
27
|
+
high: string[];
|
|
28
|
+
medium: string[];
|
|
29
|
+
low: string[];
|
|
30
|
+
ignored: string[];
|
|
31
|
+
}
|
|
32
|
+
export type Provider = 'openai' | 'openrouter' | 'anthropic' | 'gemini';
|
|
33
|
+
export declare const HIGH_IMPORTANCE_PATTERNS: string[];
|
|
34
|
+
export declare const MEDIUM_IMPORTANCE_PATTERNS: string[];
|
|
35
|
+
export declare const LOW_IMPORTANCE_PATTERNS: string[];
|
|
36
|
+
export declare const IGNORE_PATTERNS: string[];
|
|
37
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,QAAQ,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3D,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,OAAO,CAAC;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEpD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;AAExE,eAAO,MAAM,wBAAwB,UAEpC,CAAC;AAEF,eAAO,MAAM,0BAA0B,UAEtC,CAAC;AAEF,eAAO,MAAM,uBAAuB,UAEnC,CAAC;AAEF,eAAO,MAAM,eAAe,UAE3B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const HIGH_IMPORTANCE_PATTERNS = [
|
|
2
|
+
'controllers', 'routes', 'services', 'models', 'middlewares',
|
|
3
|
+
];
|
|
4
|
+
export const MEDIUM_IMPORTANCE_PATTERNS = [
|
|
5
|
+
'utils', 'configs',
|
|
6
|
+
];
|
|
7
|
+
export const LOW_IMPORTANCE_PATTERNS = [
|
|
8
|
+
'package-lock', 'yarn.lock', 'pnpm-lock',
|
|
9
|
+
];
|
|
10
|
+
export const IGNORE_PATTERNS = [
|
|
11
|
+
'dist', 'build', 'coverage', 'node_modules',
|
|
12
|
+
];
|
|
13
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAuCA,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa;CAC7D,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,cAAc,EAAE,WAAW,EAAE,WAAW;CACzC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc;CAC5C,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;AAE5B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare function promptInitOrExit(): Promise<'init' | 'exit'>;
|
|
2
|
+
export type GitignoreOption = 'node' | 'python' | 'go' | 'php' | 'ruby' | 'rust' | 'java' | 'skip';
|
|
3
|
+
export type StageChoice = 'all' | 'none' | 'select';
|
|
4
|
+
export declare function promptGitignore(): Promise<GitignoreOption>;
|
|
5
|
+
export declare function promptAddRemote(): Promise<'yes' | 'no'>;
|
|
6
|
+
export declare function promptRemoteUrl(): Promise<string>;
|
|
7
|
+
export declare function promptStageChanges(): Promise<StageChoice>;
|
|
8
|
+
export declare function promptSelectFiles(files: string[]): Promise<string[]>;
|
|
9
|
+
export declare function promptUseConventionalCommits(): Promise<boolean>;
|
|
10
|
+
export declare function promptSelectCommitMessage(messages: string[]): Promise<string>;
|
|
11
|
+
export declare function promptPushToRemote(): Promise<boolean>;
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAEA,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,CAajE;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AACnG,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEpD,wBAAsB,eAAe,IAAI,OAAO,CAAC,eAAe,CAAC,CAmBhE;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAa7D;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAUvD;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,WAAW,CAAC,CAc/D;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAW1E;AAED,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,OAAO,CAAC,CAarE;AAED,wBAAsB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA8BnF;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAa3D"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import inquirer from 'inquirer';
|
|
2
|
+
export async function promptInitOrExit() {
|
|
3
|
+
const { action } = await inquirer.prompt([
|
|
4
|
+
{
|
|
5
|
+
type: 'list',
|
|
6
|
+
name: 'action',
|
|
7
|
+
message: 'This directory is not a Git repository.',
|
|
8
|
+
choices: [
|
|
9
|
+
{ name: 'Initialize Repository', value: 'init' },
|
|
10
|
+
{ name: 'Exit', value: 'exit' },
|
|
11
|
+
],
|
|
12
|
+
},
|
|
13
|
+
]);
|
|
14
|
+
return action;
|
|
15
|
+
}
|
|
16
|
+
export async function promptGitignore() {
|
|
17
|
+
const { option } = await inquirer.prompt([
|
|
18
|
+
{
|
|
19
|
+
type: 'list',
|
|
20
|
+
name: 'option',
|
|
21
|
+
message: 'No .gitignore file found. Generate one?',
|
|
22
|
+
choices: [
|
|
23
|
+
{ name: 'Node', value: 'node' },
|
|
24
|
+
{ name: 'Python', value: 'python' },
|
|
25
|
+
{ name: 'Go', value: 'go' },
|
|
26
|
+
{ name: 'PHP', value: 'php' },
|
|
27
|
+
{ name: 'Ruby', value: 'ruby' },
|
|
28
|
+
{ name: 'Rust', value: 'rust' },
|
|
29
|
+
{ name: 'Java', value: 'java' },
|
|
30
|
+
{ name: 'Skip', value: 'skip' },
|
|
31
|
+
],
|
|
32
|
+
},
|
|
33
|
+
]);
|
|
34
|
+
return option;
|
|
35
|
+
}
|
|
36
|
+
export async function promptAddRemote() {
|
|
37
|
+
const { action } = await inquirer.prompt([
|
|
38
|
+
{
|
|
39
|
+
type: 'list',
|
|
40
|
+
name: 'action',
|
|
41
|
+
message: 'No remote repository configured. Would you like to add one?',
|
|
42
|
+
choices: [
|
|
43
|
+
{ name: 'Yes', value: 'yes' },
|
|
44
|
+
{ name: 'No', value: 'no' },
|
|
45
|
+
],
|
|
46
|
+
},
|
|
47
|
+
]);
|
|
48
|
+
return action;
|
|
49
|
+
}
|
|
50
|
+
export async function promptRemoteUrl() {
|
|
51
|
+
const { url } = await inquirer.prompt([
|
|
52
|
+
{
|
|
53
|
+
type: 'input',
|
|
54
|
+
name: 'url',
|
|
55
|
+
message: 'Remote URL:',
|
|
56
|
+
validate: (input) => input.trim().length > 0 || 'URL cannot be empty',
|
|
57
|
+
},
|
|
58
|
+
]);
|
|
59
|
+
return url;
|
|
60
|
+
}
|
|
61
|
+
export async function promptStageChanges() {
|
|
62
|
+
const { choice } = await inquirer.prompt([
|
|
63
|
+
{
|
|
64
|
+
type: 'list',
|
|
65
|
+
name: 'choice',
|
|
66
|
+
message: 'Stage all changes?',
|
|
67
|
+
choices: [
|
|
68
|
+
{ name: 'Yes, stage all', value: 'all' },
|
|
69
|
+
{ name: 'No, skip staging', value: 'none' },
|
|
70
|
+
{ name: 'Select files', value: 'select' },
|
|
71
|
+
],
|
|
72
|
+
},
|
|
73
|
+
]);
|
|
74
|
+
return choice;
|
|
75
|
+
}
|
|
76
|
+
export async function promptSelectFiles(files) {
|
|
77
|
+
const { selected } = await inquirer.prompt([
|
|
78
|
+
{
|
|
79
|
+
type: 'checkbox',
|
|
80
|
+
name: 'selected',
|
|
81
|
+
message: 'Select files to stage:',
|
|
82
|
+
choices: files.map(f => ({ name: f, value: f })),
|
|
83
|
+
validate: (input) => input.length > 0 || 'Select at least one file',
|
|
84
|
+
},
|
|
85
|
+
]);
|
|
86
|
+
return selected;
|
|
87
|
+
}
|
|
88
|
+
export async function promptUseConventionalCommits() {
|
|
89
|
+
const { use } = await inquirer.prompt([
|
|
90
|
+
{
|
|
91
|
+
type: 'list',
|
|
92
|
+
name: 'use',
|
|
93
|
+
message: 'Use Conventional Commits?',
|
|
94
|
+
choices: [
|
|
95
|
+
{ name: 'Yes', value: true },
|
|
96
|
+
{ name: 'No', value: false },
|
|
97
|
+
],
|
|
98
|
+
},
|
|
99
|
+
]);
|
|
100
|
+
return use;
|
|
101
|
+
}
|
|
102
|
+
export async function promptSelectCommitMessage(messages) {
|
|
103
|
+
const choices = messages.map((msg, i) => ({
|
|
104
|
+
name: `${i + 1}. ${msg}`,
|
|
105
|
+
value: msg,
|
|
106
|
+
}));
|
|
107
|
+
choices.push({ name: 'Custom', value: '__custom__' });
|
|
108
|
+
const { selected } = await inquirer.prompt([
|
|
109
|
+
{
|
|
110
|
+
type: 'list',
|
|
111
|
+
name: 'selected',
|
|
112
|
+
message: 'Select Commit Message',
|
|
113
|
+
choices,
|
|
114
|
+
},
|
|
115
|
+
]);
|
|
116
|
+
if (selected === '__custom__') {
|
|
117
|
+
const { custom } = await inquirer.prompt([
|
|
118
|
+
{
|
|
119
|
+
type: 'input',
|
|
120
|
+
name: 'custom',
|
|
121
|
+
message: 'Enter commit message:',
|
|
122
|
+
validate: (input) => input.trim().length > 0 || 'Message cannot be empty',
|
|
123
|
+
},
|
|
124
|
+
]);
|
|
125
|
+
return custom;
|
|
126
|
+
}
|
|
127
|
+
return selected;
|
|
128
|
+
}
|
|
129
|
+
export async function promptPushToRemote() {
|
|
130
|
+
const { push } = await inquirer.prompt([
|
|
131
|
+
{
|
|
132
|
+
type: 'list',
|
|
133
|
+
name: 'push',
|
|
134
|
+
message: 'Push to remote?',
|
|
135
|
+
choices: [
|
|
136
|
+
{ name: 'Yes', value: true },
|
|
137
|
+
{ name: 'No', value: false },
|
|
138
|
+
],
|
|
139
|
+
},
|
|
140
|
+
]);
|
|
141
|
+
return push;
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { AIResponse } from '../core/types.js';
|
|
2
|
+
import { LLMProvider } from './types.js';
|
|
3
|
+
export declare class AnthropicProvider implements LLMProvider {
|
|
4
|
+
generateResponse(systemPrompt: string, userPrompt: string, apiKey: string, model: string): Promise<AIResponse>;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,qBAAa,iBAAkB,YAAW,WAAW;IAC7C,gBAAgB,CACpB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,UAAU,CAAC;CAuBvB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import Anthropic from '@anthropic-ai/sdk';
|
|
2
|
+
export class AnthropicProvider {
|
|
3
|
+
async generateResponse(systemPrompt, userPrompt, apiKey, model) {
|
|
4
|
+
const client = new Anthropic({ apiKey });
|
|
5
|
+
const response = await client.messages.create({
|
|
6
|
+
model,
|
|
7
|
+
max_tokens: 4096,
|
|
8
|
+
system: systemPrompt,
|
|
9
|
+
messages: [
|
|
10
|
+
{ role: 'user', content: userPrompt },
|
|
11
|
+
],
|
|
12
|
+
});
|
|
13
|
+
const contentBlock = response.content[0];
|
|
14
|
+
if (contentBlock?.type !== 'text') {
|
|
15
|
+
throw new Error('No text response from Anthropic');
|
|
16
|
+
}
|
|
17
|
+
const text = contentBlock.text;
|
|
18
|
+
const jsonMatch = text.match(/\{[\s\S]*\}/);
|
|
19
|
+
if (!jsonMatch)
|
|
20
|
+
throw new Error('No JSON found in Anthropic response');
|
|
21
|
+
return JSON.parse(jsonMatch[0]);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=anthropic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAI1C,MAAM,OAAO,iBAAiB;IAC5B,KAAK,CAAC,gBAAgB,CACpB,YAAoB,EACpB,UAAkB,EAClB,MAAc,EACd,KAAa;QAEb,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAEzC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC5C,KAAK;YACL,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,YAAY;YACpB,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE;aACtC;SACF,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,YAAY,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC5C,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAEvE,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAe,CAAC;IAChD,CAAC;CACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { AIResponse } from '../core/types.js';
|
|
2
|
+
import { LLMProvider } from './types.js';
|
|
3
|
+
export declare class GeminiProvider implements LLMProvider {
|
|
4
|
+
generateResponse(systemPrompt: string, userPrompt: string, apiKey: string, model: string): Promise<AIResponse>;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=gemini.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,qBAAa,cAAe,YAAW,WAAW;IAC1C,gBAAgB,CACpB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,UAAU,CAAC;CAevB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { GoogleGenerativeAI } from '@google/generative-ai';
|
|
2
|
+
export class GeminiProvider {
|
|
3
|
+
async generateResponse(systemPrompt, userPrompt, apiKey, model) {
|
|
4
|
+
const genAI = new GoogleGenerativeAI(apiKey);
|
|
5
|
+
const geminiModel = genAI.getGenerativeModel({ model });
|
|
6
|
+
const result = await geminiModel.generateContent([
|
|
7
|
+
{ text: systemPrompt },
|
|
8
|
+
{ text: userPrompt },
|
|
9
|
+
]);
|
|
10
|
+
const text = result.response.text();
|
|
11
|
+
const jsonMatch = text.match(/\{[\s\S]*\}/);
|
|
12
|
+
if (!jsonMatch)
|
|
13
|
+
throw new Error('No JSON found in Gemini response');
|
|
14
|
+
return JSON.parse(jsonMatch[0]);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=gemini.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAI3D,MAAM,OAAO,cAAc;IACzB,KAAK,CAAC,gBAAgB,CACpB,YAAoB,EACpB,UAAkB,EAClB,MAAc,EACd,KAAa;QAEb,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,WAAW,GAAG,KAAK,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAExD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,eAAe,CAAC;YAC/C,EAAE,IAAI,EAAE,YAAY,EAAE;YACtB,EAAE,IAAI,EAAE,UAAU,EAAE;SACrB,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC5C,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAEpE,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAe,CAAC;IAChD,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAMzC,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,WAAW,CAc3D"}
|