@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.
Files changed (104) hide show
  1. package/README.md +229 -0
  2. package/dist/ai/index.d.ts +3 -0
  3. package/dist/ai/index.d.ts.map +1 -0
  4. package/dist/ai/index.js +15 -0
  5. package/dist/ai/index.js.map +1 -0
  6. package/dist/ai/prompt.d.ts +4 -0
  7. package/dist/ai/prompt.d.ts.map +1 -0
  8. package/dist/ai/prompt.js +47 -0
  9. package/dist/ai/prompt.js.map +1 -0
  10. package/dist/cli.d.ts +3 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +43 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/commands/commit.d.ts +2 -0
  15. package/dist/commands/commit.d.ts.map +1 -0
  16. package/dist/commands/commit.js +65 -0
  17. package/dist/commands/commit.js.map +1 -0
  18. package/dist/commands/prechecks.d.ts +6 -0
  19. package/dist/commands/prechecks.d.ts.map +1 -0
  20. package/dist/commands/prechecks.js +75 -0
  21. package/dist/commands/prechecks.js.map +1 -0
  22. package/dist/commands/push.d.ts +2 -0
  23. package/dist/commands/push.d.ts.map +1 -0
  24. package/dist/commands/push.js +27 -0
  25. package/dist/commands/push.js.map +1 -0
  26. package/dist/commands/summary.d.ts +2 -0
  27. package/dist/commands/summary.d.ts.map +1 -0
  28. package/dist/commands/summary.js +34 -0
  29. package/dist/commands/summary.js.map +1 -0
  30. package/dist/commands/workflow.d.ts +7 -0
  31. package/dist/commands/workflow.d.ts.map +1 -0
  32. package/dist/commands/workflow.js +83 -0
  33. package/dist/commands/workflow.js.map +1 -0
  34. package/dist/core/config.d.ts +4 -0
  35. package/dist/core/config.d.ts.map +1 -0
  36. package/dist/core/config.js +46 -0
  37. package/dist/core/config.js.map +1 -0
  38. package/dist/core/git.d.ts +16 -0
  39. package/dist/core/git.d.ts.map +1 -0
  40. package/dist/core/git.js +107 -0
  41. package/dist/core/git.js.map +1 -0
  42. package/dist/core/types.d.ts +37 -0
  43. package/dist/core/types.d.ts.map +1 -0
  44. package/dist/core/types.js +13 -0
  45. package/dist/core/types.js.map +1 -0
  46. package/dist/index.d.ts +3 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +5 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/prompts/index.d.ts +12 -0
  51. package/dist/prompts/index.d.ts.map +1 -0
  52. package/dist/prompts/index.js +143 -0
  53. package/dist/prompts/index.js.map +1 -0
  54. package/dist/providers/anthropic.d.ts +6 -0
  55. package/dist/providers/anthropic.d.ts.map +1 -0
  56. package/dist/providers/anthropic.js +24 -0
  57. package/dist/providers/anthropic.js.map +1 -0
  58. package/dist/providers/gemini.d.ts +6 -0
  59. package/dist/providers/gemini.d.ts.map +1 -0
  60. package/dist/providers/gemini.js +17 -0
  61. package/dist/providers/gemini.js.map +1 -0
  62. package/dist/providers/index.d.ts +4 -0
  63. package/dist/providers/index.d.ts.map +1 -0
  64. package/dist/providers/index.js +18 -0
  65. package/dist/providers/index.js.map +1 -0
  66. package/dist/providers/openai.d.ts +6 -0
  67. package/dist/providers/openai.d.ts.map +1 -0
  68. package/dist/providers/openai.js +19 -0
  69. package/dist/providers/openai.js.map +1 -0
  70. package/dist/providers/openrouter.d.ts +6 -0
  71. package/dist/providers/openrouter.d.ts.map +1 -0
  72. package/dist/providers/openrouter.js +22 -0
  73. package/dist/providers/openrouter.js.map +1 -0
  74. package/dist/providers/types.d.ts +5 -0
  75. package/dist/providers/types.d.ts.map +1 -0
  76. package/dist/providers/types.js +2 -0
  77. package/dist/providers/types.js.map +1 -0
  78. package/dist/utils/classification.d.ts +3 -0
  79. package/dist/utils/classification.d.ts.map +1 -0
  80. package/dist/utils/classification.js +28 -0
  81. package/dist/utils/classification.js.map +1 -0
  82. package/dist/utils/display.d.ts +5 -0
  83. package/dist/utils/display.d.ts.map +1 -0
  84. package/dist/utils/display.js +32 -0
  85. package/dist/utils/display.js.map +1 -0
  86. package/dist/utils/templates/go.gitignore +9 -0
  87. package/dist/utils/templates/java.gitignore +13 -0
  88. package/dist/utils/templates/node.gitignore +11 -0
  89. package/dist/utils/templates/php.gitignore +6 -0
  90. package/dist/utils/templates/python.gitignore +13 -0
  91. package/dist/utils/templates/ruby.gitignore +6 -0
  92. package/dist/utils/templates/rust.gitignore +3 -0
  93. package/dist/utils/templates.d.ts +3 -0
  94. package/dist/utils/templates.d.ts.map +1 -0
  95. package/dist/utils/templates.js +79 -0
  96. package/dist/utils/templates.js.map +1 -0
  97. package/package.json +48 -0
  98. package/src/utils/templates/go.gitignore +9 -0
  99. package/src/utils/templates/java.gitignore +13 -0
  100. package/src/utils/templates/node.gitignore +11 -0
  101. package/src/utils/templates/php.gitignore +6 -0
  102. package/src/utils/templates/python.gitignore +13 -0
  103. package/src/utils/templates/ruby.gitignore +6 -0
  104. package/src/utils/templates/rust.gitignore +3 -0
@@ -0,0 +1,18 @@
1
+ import { OpenAIProvider } from './openai.js';
2
+ import { OpenRouterProvider } from './openrouter.js';
3
+ import { AnthropicProvider } from './anthropic.js';
4
+ import { GeminiProvider } from './gemini.js';
5
+ export function getProvider(provider) {
6
+ const providers = {
7
+ openai: () => new OpenAIProvider(),
8
+ openrouter: () => new OpenRouterProvider(),
9
+ anthropic: () => new AnthropicProvider(),
10
+ gemini: () => new GeminiProvider(),
11
+ };
12
+ const factory = providers[provider];
13
+ if (!factory) {
14
+ throw new Error(`Unknown provider: ${provider}`);
15
+ }
16
+ return factory();
17
+ }
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,UAAU,WAAW,CAAC,QAAkB;IAC5C,MAAM,SAAS,GAAwC;QACrD,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,cAAc,EAAE;QAClC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,kBAAkB,EAAE;QAC1C,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,iBAAiB,EAAE;QACxC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,cAAc,EAAE;KACnC,CAAC;IAEF,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,OAAO,EAAE,CAAC;AACnB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { AIResponse } from '../core/types.js';
2
+ import { LLMProvider } from './types.js';
3
+ export declare class OpenAIProvider implements LLMProvider {
4
+ generateResponse(systemPrompt: string, userPrompt: string, apiKey: string, model: string): Promise<AIResponse>;
5
+ }
6
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.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;CAiBvB"}
@@ -0,0 +1,19 @@
1
+ import OpenAI from 'openai';
2
+ export class OpenAIProvider {
3
+ async generateResponse(systemPrompt, userPrompt, apiKey, model) {
4
+ const client = new OpenAI({ apiKey });
5
+ const response = await client.chat.completions.create({
6
+ model,
7
+ messages: [
8
+ { role: 'system', content: systemPrompt },
9
+ { role: 'user', content: userPrompt },
10
+ ],
11
+ response_format: { type: 'json_object' },
12
+ });
13
+ const content = response.choices[0]?.message?.content;
14
+ if (!content)
15
+ throw new Error('No response from OpenAI');
16
+ return JSON.parse(content);
17
+ }
18
+ }
19
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAI5B,MAAM,OAAO,cAAc;IACzB,KAAK,CAAC,gBAAgB,CACpB,YAAoB,EACpB,UAAkB,EAClB,MAAc,EACd,KAAa;QAEb,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAEtC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YACpD,KAAK;YACL,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;gBACzC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE;aACtC;YACD,eAAe,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;SACzC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;QACtD,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAEzD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAe,CAAC;IAC3C,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ import { AIResponse } from '../core/types.js';
2
+ import { LLMProvider } from './types.js';
3
+ export declare class OpenRouterProvider implements LLMProvider {
4
+ generateResponse(systemPrompt: string, userPrompt: string, apiKey: string, model: string): Promise<AIResponse>;
5
+ }
6
+ //# sourceMappingURL=openrouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../src/providers/openrouter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,qBAAa,kBAAmB,YAAW,WAAW;IAC9C,gBAAgB,CACpB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,UAAU,CAAC;CAoBvB"}
@@ -0,0 +1,22 @@
1
+ import OpenAI from 'openai';
2
+ export class OpenRouterProvider {
3
+ async generateResponse(systemPrompt, userPrompt, apiKey, model) {
4
+ const client = new OpenAI({
5
+ apiKey,
6
+ baseURL: 'https://openrouter.ai/api/v1',
7
+ });
8
+ const response = await client.chat.completions.create({
9
+ model,
10
+ messages: [
11
+ { role: 'system', content: systemPrompt },
12
+ { role: 'user', content: userPrompt },
13
+ ],
14
+ response_format: { type: 'json_object' },
15
+ });
16
+ const content = response.choices[0]?.message?.content;
17
+ if (!content)
18
+ throw new Error('No response from OpenRouter');
19
+ return JSON.parse(content);
20
+ }
21
+ }
22
+ //# sourceMappingURL=openrouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../../src/providers/openrouter.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAI5B,MAAM,OAAO,kBAAkB;IAC7B,KAAK,CAAC,gBAAgB,CACpB,YAAoB,EACpB,UAAkB,EAClB,MAAc,EACd,KAAa;QAEb,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;YACxB,MAAM;YACN,OAAO,EAAE,8BAA8B;SACxC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YACpD,KAAK;YACL,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;gBACzC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE;aACtC;YACD,eAAe,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;SACzC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;QACtD,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAE7D,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAe,CAAC;IAC3C,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ import { AIResponse } from '../core/types.js';
2
+ export interface LLMProvider {
3
+ generateResponse(systemPrompt: string, userPrompt: string, apiKey: string, model: string): Promise<AIResponse>;
4
+ }
5
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,WAAW,WAAW;IAC1B,gBAAgB,CACd,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,UAAU,CAAC,CAAC;CACxB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { FileClassification } from '../core/types.js';
2
+ export declare function classifyFiles(files: string[]): FileClassification;
3
+ //# sourceMappingURL=classification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classification.d.ts","sourceRoot":"","sources":["../../src/utils/classification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkG,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtJ,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAuBjE"}
@@ -0,0 +1,28 @@
1
+ import { HIGH_IMPORTANCE_PATTERNS, MEDIUM_IMPORTANCE_PATTERNS, LOW_IMPORTANCE_PATTERNS, IGNORE_PATTERNS } from '../core/types.js';
2
+ export function classifyFiles(files) {
3
+ const result = {
4
+ high: [],
5
+ medium: [],
6
+ low: [],
7
+ ignored: [],
8
+ };
9
+ for (const file of files) {
10
+ if (IGNORE_PATTERNS.some(p => file.includes(p))) {
11
+ result.ignored.push(file);
12
+ }
13
+ else if (HIGH_IMPORTANCE_PATTERNS.some(p => file.includes(p))) {
14
+ result.high.push(file);
15
+ }
16
+ else if (MEDIUM_IMPORTANCE_PATTERNS.some(p => file.includes(p))) {
17
+ result.medium.push(file);
18
+ }
19
+ else if (LOW_IMPORTANCE_PATTERNS.some(p => file.includes(p))) {
20
+ result.low.push(file);
21
+ }
22
+ else {
23
+ result.medium.push(file);
24
+ }
25
+ }
26
+ return result;
27
+ }
28
+ //# sourceMappingURL=classification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classification.js","sourceRoot":"","sources":["../../src/utils/classification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,eAAe,EAAsB,MAAM,kBAAkB,CAAC;AAEtJ,MAAM,UAAU,aAAa,CAAC,KAAe;IAC3C,MAAM,MAAM,GAAuB;QACjC,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,EAAE;QACV,GAAG,EAAE,EAAE;QACP,OAAO,EAAE,EAAE;KACZ,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;aAAM,IAAI,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;aAAM,IAAI,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;aAAM,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/D,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { RepoState, DiffStats, AIResponse } from '../core/types.js';
2
+ export declare function printRepoState(state: RepoState): void;
3
+ export declare function printDiffStats(stats: DiffStats): void;
4
+ export declare function printAIResponse(response: AIResponse): void;
5
+ //# sourceMappingURL=display.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/utils/display.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAsB,SAAS,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAExF,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAiBrD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAErD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,UAAU,GAAG,IAAI,CAS1D"}
@@ -0,0 +1,32 @@
1
+ import chalk from 'chalk';
2
+ export function printRepoState(state) {
3
+ if (state.modified.length > 0) {
4
+ console.log(chalk.yellow('\nModified:'));
5
+ state.modified.forEach(f => console.log(chalk.white(` ${f}`)));
6
+ }
7
+ if (state.added.length > 0) {
8
+ console.log(chalk.green('\nAdded:'));
9
+ state.added.forEach(f => console.log(chalk.white(` ${f}`)));
10
+ }
11
+ if (state.deleted.length > 0) {
12
+ console.log(chalk.red('\nDeleted:'));
13
+ state.deleted.forEach(f => console.log(chalk.white(` ${f}`)));
14
+ }
15
+ if (state.untracked.length > 0) {
16
+ console.log(chalk.cyan('\nUntracked:'));
17
+ state.untracked.forEach(f => console.log(chalk.white(` ${f}`)));
18
+ }
19
+ }
20
+ export function printDiffStats(stats) {
21
+ console.log(chalk.dim(`\n${stats.files} file(s) changed, ${stats.insertions} insertions(+), ${stats.deletions} deletions(-)`));
22
+ }
23
+ export function printAIResponse(response) {
24
+ console.log(chalk.magenta(`\nImpact: ${response.impact.toUpperCase()}`));
25
+ console.log(chalk.cyan('\nSummary'));
26
+ response.summary.forEach(item => console.log(chalk.green(` ✓ ${item}`)));
27
+ console.log(chalk.cyan('\nSuggested Commits'));
28
+ response.messages.forEach((msg, i) => {
29
+ console.log(chalk.white(` ${i + 1}. ${msg}`));
30
+ });
31
+ }
32
+ //# sourceMappingURL=display.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display.js","sourceRoot":"","sources":["../../src/utils/display.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,UAAU,cAAc,CAAC,KAAgB;IAC7C,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;QACzC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QACrC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;QACrC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QACxC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAgB;IAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,qBAAqB,KAAK,CAAC,UAAU,mBAAmB,KAAK,CAAC,SAAS,eAAe,CAAC,CAAC,CAAC;AACjI,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAoB;IAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE1E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC/C,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,9 @@
1
+ go.work
2
+ *.exe
3
+ *.exe~
4
+ *.dll
5
+ *.so
6
+ *.dylib
7
+ *.test
8
+ *.out
9
+ vendor/
@@ -0,0 +1,13 @@
1
+ *.class
2
+ *.jar
3
+ *.war
4
+ *.nar
5
+ target/
6
+ !.mvn/wrapper/maven-wrapper.jar
7
+ *.log
8
+ build/
9
+ .idea/
10
+ *.iml
11
+ .settings/
12
+ .project
13
+ .classpath
@@ -0,0 +1,11 @@
1
+ node_modules/
2
+ dist/
3
+ build/
4
+ coverage/
5
+ .env
6
+ .env.local
7
+ *.log
8
+ npm-debug.log*
9
+ yarn-debug.log*
10
+ yarn-error.log*
11
+ .pnpm-debug.log*
@@ -0,0 +1,6 @@
1
+ vendor/
2
+ node_modules/
3
+ .env
4
+ *.log
5
+ .phpunit.cache
6
+ .php_cs.cache
@@ -0,0 +1,13 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ *$py.class
4
+ *.so
5
+ .Python
6
+ env/
7
+ venv/
8
+ .venv/
9
+ *.egg-info/
10
+ .eggs/
11
+ dist/
12
+ build/
13
+ *.egg
@@ -0,0 +1,6 @@
1
+ *.gem
2
+ .bundle/
3
+ vendor/bundle
4
+ .bundled_gems
5
+ *.lock
6
+ .env
@@ -0,0 +1,3 @@
1
+ target/
2
+ **/*.rs.bk
3
+ Cargo.lock
@@ -0,0 +1,3 @@
1
+ import { GitignoreOption } from '../prompts/index.js';
2
+ export declare function getGitignoreTemplate(option: GitignoreOption): string;
3
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/utils/templates.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AA6EtD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CASpE"}
@@ -0,0 +1,79 @@
1
+ import { readFileSync, existsSync } from 'node:fs';
2
+ import { join, dirname } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ const __dirname = dirname(fileURLToPath(import.meta.url));
5
+ const TEMPLATES_DIR = join(__dirname, 'templates');
6
+ const GITIGNORE_TEMPLATES = {
7
+ node: `node_modules/
8
+ dist/
9
+ build/
10
+ coverage/
11
+ .env
12
+ .env.local
13
+ *.log
14
+ npm-debug.log*
15
+ yarn-debug.log*
16
+ yarn-error.log*
17
+ .pnpm-debug.log*`,
18
+ python: `__pycache__/
19
+ *.py[cod]
20
+ *$py.class
21
+ *.so
22
+ .Python
23
+ env/
24
+ venv/
25
+ .venv/
26
+ *.egg-info/
27
+ .eggs/
28
+ dist/
29
+ build/
30
+ *.egg`,
31
+ go: `go.work
32
+ *.exe
33
+ *.exe~
34
+ *.dll
35
+ *.so
36
+ *.dylib
37
+ *.test
38
+ *.out
39
+ vendor/`,
40
+ php: `vendor/
41
+ node_modules/
42
+ .env
43
+ *.log
44
+ .phpunit.cache
45
+ .php_cs.cache`,
46
+ ruby: `*.gem
47
+ .bundle/
48
+ vendor/bundle
49
+ .bundled_gems
50
+ *.lock
51
+ .env`,
52
+ rust: `target/
53
+ **/*.rs.bk
54
+ Cargo.lock`,
55
+ java: `*.class
56
+ *.jar
57
+ *.war
58
+ *.nar
59
+ target/
60
+ !.mvn/wrapper/maven-wrapper.jar
61
+ *.log
62
+ build/
63
+ .idea/
64
+ *.iml
65
+ .settings/
66
+ .project
67
+ .classpath`,
68
+ skip: '',
69
+ };
70
+ export function getGitignoreTemplate(option) {
71
+ if (option === 'skip')
72
+ return '';
73
+ const customPath = join(TEMPLATES_DIR, `${option}.gitignore`);
74
+ if (existsSync(customPath)) {
75
+ return readFileSync(customPath, 'utf-8');
76
+ }
77
+ return GITIGNORE_TEMPLATES[option] || '';
78
+ }
79
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/utils/templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAEnD,MAAM,mBAAmB,GAAoC;IAC3D,IAAI,EAAE;;;;;;;;;;iBAUS;IAEf,MAAM,EAAE;;;;;;;;;;;;MAYJ;IAEJ,EAAE,EAAE;;;;;;;;QAQE;IAEN,GAAG,EAAE;;;;;cAKO;IAEZ,IAAI,EAAE;;;;;KAKH;IAEH,IAAI,EAAE;;WAEG;IAET,IAAI,EAAE;;;;;;;;;;;;WAYG;IACT,IAAI,EAAE,EAAE;CACT,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,MAAuB;IAC1D,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC;IAEjC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,MAAM,YAAY,CAAC,CAAC;IAC9D,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,OAAO,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,mBAAmB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AAC3C,CAAC"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@reck98/git-smart",
3
+ "version": "1.0.0",
4
+ "description": "AI-powered Git workflow assistant that generates production-quality commit messages, summarizes code changes, and streamlines Git operations.",
5
+ "type": "module",
6
+ "bin": {
7
+ "git-smart": "dist/index.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "src/utils/templates"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc && copyfiles -u 2 \"src/utils/templates/**/*\" dist/utils/",
15
+ "start": "node dist/index.js",
16
+ "dev": "tsx src/index.ts",
17
+ "prepublishOnly": "npm run build",
18
+ "postinstall": "npm run build"
19
+ },
20
+ "dependencies": {
21
+ "@anthropic-ai/sdk": "^0.24.0",
22
+ "@google/generative-ai": "^0.8.0",
23
+ "chalk": "^5.3.0",
24
+ "commander": "^12.0.0",
25
+ "inquirer": "^9.2.0",
26
+ "openai": "^4.40.0",
27
+ "ora": "^8.0.0",
28
+ "simple-git": "^3.22.0"
29
+ },
30
+ "devDependencies": {
31
+ "@types/inquirer": "^9.0.7",
32
+ "@types/node": "^20.11.0",
33
+ "copyfiles": "^2.4.1",
34
+ "tsx": "^4.7.0",
35
+ "typescript": "^5.3.0"
36
+ },
37
+ "engines": {
38
+ "node": ">=20"
39
+ },
40
+ "keywords": [
41
+ "git",
42
+ "commit",
43
+ "ai",
44
+ "conventional-commits",
45
+ "cli"
46
+ ],
47
+ "license": "MIT"
48
+ }
@@ -0,0 +1,9 @@
1
+ go.work
2
+ *.exe
3
+ *.exe~
4
+ *.dll
5
+ *.so
6
+ *.dylib
7
+ *.test
8
+ *.out
9
+ vendor/
@@ -0,0 +1,13 @@
1
+ *.class
2
+ *.jar
3
+ *.war
4
+ *.nar
5
+ target/
6
+ !.mvn/wrapper/maven-wrapper.jar
7
+ *.log
8
+ build/
9
+ .idea/
10
+ *.iml
11
+ .settings/
12
+ .project
13
+ .classpath
@@ -0,0 +1,11 @@
1
+ node_modules/
2
+ dist/
3
+ build/
4
+ coverage/
5
+ .env
6
+ .env.local
7
+ *.log
8
+ npm-debug.log*
9
+ yarn-debug.log*
10
+ yarn-error.log*
11
+ .pnpm-debug.log*
@@ -0,0 +1,6 @@
1
+ vendor/
2
+ node_modules/
3
+ .env
4
+ *.log
5
+ .phpunit.cache
6
+ .php_cs.cache
@@ -0,0 +1,13 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ *$py.class
4
+ *.so
5
+ .Python
6
+ env/
7
+ venv/
8
+ .venv/
9
+ *.egg-info/
10
+ .eggs/
11
+ dist/
12
+ build/
13
+ *.egg
@@ -0,0 +1,6 @@
1
+ *.gem
2
+ .bundle/
3
+ vendor/bundle
4
+ .bundled_gems
5
+ *.lock
6
+ .env
@@ -0,0 +1,3 @@
1
+ target/
2
+ **/*.rs.bk
3
+ Cargo.lock