autogit-tool 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 (119) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +42 -0
  3. package/dist/ai/prompts.d.ts +10 -0
  4. package/dist/ai/prompts.d.ts.map +1 -0
  5. package/dist/ai/prompts.js +169 -0
  6. package/dist/ai/prompts.js.map +1 -0
  7. package/dist/ai/provider.d.ts +24 -0
  8. package/dist/ai/provider.d.ts.map +1 -0
  9. package/dist/ai/provider.js +305 -0
  10. package/dist/ai/provider.js.map +1 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +228 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/commands/analyze.d.ts +4 -0
  16. package/dist/commands/analyze.d.ts.map +1 -0
  17. package/dist/commands/analyze.js +63 -0
  18. package/dist/commands/analyze.js.map +1 -0
  19. package/dist/commands/config.d.ts +8 -0
  20. package/dist/commands/config.d.ts.map +1 -0
  21. package/dist/commands/config.js +457 -0
  22. package/dist/commands/config.js.map +1 -0
  23. package/dist/commands/docs.d.ts +5 -0
  24. package/dist/commands/docs.d.ts.map +1 -0
  25. package/dist/commands/docs.js +22 -0
  26. package/dist/commands/docs.js.map +1 -0
  27. package/dist/commands/doctor.d.ts +2 -0
  28. package/dist/commands/doctor.d.ts.map +1 -0
  29. package/dist/commands/doctor.js +69 -0
  30. package/dist/commands/doctor.js.map +1 -0
  31. package/dist/commands/github.d.ts +5 -0
  32. package/dist/commands/github.d.ts.map +1 -0
  33. package/dist/commands/github.js +46 -0
  34. package/dist/commands/github.js.map +1 -0
  35. package/dist/commands/init.d.ts +2 -0
  36. package/dist/commands/init.d.ts.map +1 -0
  37. package/dist/commands/init.js +38 -0
  38. package/dist/commands/init.js.map +1 -0
  39. package/dist/commands/linkedin.d.ts +4 -0
  40. package/dist/commands/linkedin.d.ts.map +1 -0
  41. package/dist/commands/linkedin.js +42 -0
  42. package/dist/commands/linkedin.js.map +1 -0
  43. package/dist/commands/login.d.ts +2 -0
  44. package/dist/commands/login.d.ts.map +1 -0
  45. package/dist/commands/login.js +301 -0
  46. package/dist/commands/login.js.map +1 -0
  47. package/dist/commands/publish.d.ts +5 -0
  48. package/dist/commands/publish.d.ts.map +1 -0
  49. package/dist/commands/publish.js +58 -0
  50. package/dist/commands/publish.js.map +1 -0
  51. package/dist/commands/readme.d.ts +5 -0
  52. package/dist/commands/readme.d.ts.map +1 -0
  53. package/dist/commands/readme.js +32 -0
  54. package/dist/commands/readme.js.map +1 -0
  55. package/dist/commands/release.d.ts +5 -0
  56. package/dist/commands/release.d.ts.map +1 -0
  57. package/dist/commands/release.js +56 -0
  58. package/dist/commands/release.js.map +1 -0
  59. package/dist/commands/resume.d.ts +8 -0
  60. package/dist/commands/resume.d.ts.map +1 -0
  61. package/dist/commands/resume.js +228 -0
  62. package/dist/commands/resume.js.map +1 -0
  63. package/dist/config/manager.d.ts +67 -0
  64. package/dist/config/manager.d.ts.map +1 -0
  65. package/dist/config/manager.js +78 -0
  66. package/dist/config/manager.js.map +1 -0
  67. package/dist/index.d.ts +6 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +6 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/pipeline/main-pipeline.d.ts +15 -0
  72. package/dist/pipeline/main-pipeline.d.ts.map +1 -0
  73. package/dist/pipeline/main-pipeline.js +279 -0
  74. package/dist/pipeline/main-pipeline.js.map +1 -0
  75. package/dist/scanner/file-scanner.d.ts +21 -0
  76. package/dist/scanner/file-scanner.d.ts.map +1 -0
  77. package/dist/scanner/file-scanner.js +90 -0
  78. package/dist/scanner/file-scanner.js.map +1 -0
  79. package/dist/scanner/project-analyzer.d.ts +26 -0
  80. package/dist/scanner/project-analyzer.d.ts.map +1 -0
  81. package/dist/scanner/project-analyzer.js +454 -0
  82. package/dist/scanner/project-analyzer.js.map +1 -0
  83. package/dist/services/docs-generator.d.ts +11 -0
  84. package/dist/services/docs-generator.d.ts.map +1 -0
  85. package/dist/services/docs-generator.js +172 -0
  86. package/dist/services/docs-generator.js.map +1 -0
  87. package/dist/services/git-service.d.ts +22 -0
  88. package/dist/services/git-service.d.ts.map +1 -0
  89. package/dist/services/git-service.js +162 -0
  90. package/dist/services/git-service.js.map +1 -0
  91. package/dist/services/github-service.d.ts +44 -0
  92. package/dist/services/github-service.d.ts.map +1 -0
  93. package/dist/services/github-service.js +131 -0
  94. package/dist/services/github-service.js.map +1 -0
  95. package/dist/services/insights.d.ts +24 -0
  96. package/dist/services/insights.d.ts.map +1 -0
  97. package/dist/services/insights.js +140 -0
  98. package/dist/services/insights.js.map +1 -0
  99. package/dist/services/readme-manager.d.ts +11 -0
  100. package/dist/services/readme-manager.d.ts.map +1 -0
  101. package/dist/services/readme-manager.js +180 -0
  102. package/dist/services/readme-manager.js.map +1 -0
  103. package/dist/services/resume-manager.d.ts +29 -0
  104. package/dist/services/resume-manager.d.ts.map +1 -0
  105. package/dist/services/resume-manager.js +186 -0
  106. package/dist/services/resume-manager.js.map +1 -0
  107. package/dist/services/social-generator.d.ts +14 -0
  108. package/dist/services/social-generator.d.ts.map +1 -0
  109. package/dist/services/social-generator.js +93 -0
  110. package/dist/services/social-generator.js.map +1 -0
  111. package/dist/utils/logger.d.ts +19 -0
  112. package/dist/utils/logger.d.ts.map +1 -0
  113. package/dist/utils/logger.js +81 -0
  114. package/dist/utils/logger.js.map +1 -0
  115. package/dist/utils/platform.d.ts +8 -0
  116. package/dist/utils/platform.d.ts.map +1 -0
  117. package/dist/utils/platform.js +27 -0
  118. package/dist/utils/platform.js.map +1 -0
  119. package/package.json +74 -0
@@ -0,0 +1,56 @@
1
+ import { resolve } from 'path';
2
+ import chalk from 'chalk';
3
+ import inquirer from 'inquirer';
4
+ import { scanProject } from '../scanner/file-scanner.js';
5
+ import { analyzeProject } from '../scanner/project-analyzer.js';
6
+ import { getAuthenticatedUser, createRelease, repoExists, isGitHubConfigured } from '../services/github-service.js';
7
+ import { logger } from '../utils/logger.js';
8
+ export async function cmdRelease(opts) {
9
+ const rootDir = resolve(process.cwd());
10
+ logger.header('Create Release');
11
+ if (!isGitHubConfigured()) {
12
+ logger.error('GitHub not configured. Run "autogit login"');
13
+ return;
14
+ }
15
+ const scan = scanProject(rootDir);
16
+ const analysis = analyzeProject(rootDir, scan);
17
+ const user = await getAuthenticatedUser();
18
+ const repoName = analysis.name;
19
+ const exists = await repoExists(user.login, repoName);
20
+ if (!exists) {
21
+ logger.error(`Repository "${user.login}/${repoName}" not found. Run "autogit publish" first.`);
22
+ return;
23
+ }
24
+ // Determine version tag
25
+ let tag = opts.tag;
26
+ if (!tag) {
27
+ const defaultTag = analysis.version ? `v${analysis.version}` : 'v1.0.0';
28
+ const { inputTag } = await inquirer.prompt([{
29
+ type: 'input',
30
+ name: 'inputTag',
31
+ message: 'Release tag:',
32
+ default: defaultTag,
33
+ }]);
34
+ tag = inputTag;
35
+ }
36
+ const { title } = await inquirer.prompt([{
37
+ type: 'input',
38
+ name: 'title',
39
+ message: 'Release title:',
40
+ default: `Release ${tag}`,
41
+ }]);
42
+ const { notes } = await inquirer.prompt([{
43
+ type: 'editor',
44
+ name: 'notes',
45
+ message: 'Release notes (opens editor):',
46
+ default: `## What's New\n\n- Initial release\n\n## Full Changelog\n\nhttps://github.com/${user.login}/${repoName}/commits/${tag}`,
47
+ }]);
48
+ const release = await createRelease(user.login, repoName, {
49
+ tag: tag,
50
+ name: title,
51
+ body: notes,
52
+ draft: opts.draft,
53
+ });
54
+ logger.success(`Release created: ${chalk.underline(release.htmlUrl)}`);
55
+ }
56
+ //# sourceMappingURL=release.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release.js","sourceRoot":"","sources":["../../src/commands/release.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACpH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAuC;IACtE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAEvC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAEhC,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC3D,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,oBAAoB,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC;IAE/B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,KAAK,IAAI,QAAQ,2CAA2C,CAAC,CAAC;QAC/F,OAAO;IACT,CAAC;IAED,wBAAwB;IACxB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IACnB,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QACxE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC1C,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,cAAc;gBACvB,OAAO,EAAE,UAAU;aACpB,CAAC,CAAC,CAAC;QACJ,GAAG,GAAG,QAAQ,CAAC;IACjB,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,gBAAgB;YACzB,OAAO,EAAE,WAAW,GAAG,EAAE;SAC1B,CAAC,CAAC,CAAC;IAEJ,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,+BAA+B;YACxC,OAAO,EAAE,iFAAiF,IAAI,CAAC,KAAK,IAAI,QAAQ,YAAY,GAAG,EAAE;SAClI,CAAC,CAAC,CAAC;IAEJ,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE;QACxD,GAAG,EAAE,GAAI;QACT,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC,oBAAoB,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACzE,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface ResumeCommandOpts {
2
+ ai?: boolean;
3
+ setup?: boolean;
4
+ show?: boolean;
5
+ }
6
+ export declare function cmdResume(opts: ResumeCommandOpts): Promise<void>;
7
+ export declare function runResumeUpdate(projectDir: string, useAI: boolean, interactive: boolean): Promise<void>;
8
+ //# sourceMappingURL=resume.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume.d.ts","sourceRoot":"","sources":["../../src/commands/resume.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,iBAAiB;IAChC,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAID,wBAAsB,SAAS,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAItE;AAID,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,IAAI,CAAC,CAoFf"}
@@ -0,0 +1,228 @@
1
+ import { resolve, join } from 'path';
2
+ import { existsSync } from 'fs';
3
+ import { homedir } from 'os';
4
+ import chalk from 'chalk';
5
+ import inquirer from 'inquirer';
6
+ import { scanProject } from '../scanner/file-scanner.js';
7
+ import { analyzeProject } from '../scanner/project-analyzer.js';
8
+ import { loadConfig, saveConfig } from '../config/manager.js';
9
+ import { generateLatexProjectEntry, updateLatexResume, exportResumePDF, } from '../services/resume-manager.js';
10
+ import { logger } from '../utils/logger.js';
11
+ // ─── Main entry point ─────────────────────────────────────────────────────────
12
+ export async function cmdResume(opts) {
13
+ if (opts.setup) {
14
+ await setupResume();
15
+ return;
16
+ }
17
+ if (opts.show) {
18
+ showResumeConfig();
19
+ return;
20
+ }
21
+ await runResumeUpdate(resolve(process.cwd()), opts.ai !== false, true);
22
+ }
23
+ // ─── Called from the main pipeline ───────────────────────────────────────────
24
+ export async function runResumeUpdate(projectDir, useAI, interactive) {
25
+ const config = loadConfig();
26
+ const resumeCfg = config.resume;
27
+ // If resume isn't configured yet, offer to set it up interactively
28
+ if (!resumeCfg?.path || !existsSync(resumeCfg.path)) {
29
+ if (!interactive)
30
+ return; // skip silently during non-interactive pipeline
31
+ logger.blank();
32
+ logger.info('Resume file not configured.');
33
+ const { setup } = await inquirer.prompt([{
34
+ type: 'confirm',
35
+ name: 'setup',
36
+ message: 'Set up resume auto-update now?',
37
+ default: true,
38
+ }]);
39
+ if (!setup)
40
+ return;
41
+ await setupResume();
42
+ // Re-load after setup
43
+ const updated = loadConfig();
44
+ if (!updated.resume?.path)
45
+ return;
46
+ }
47
+ const finalConfig = loadConfig();
48
+ const resumePath = finalConfig.resume.path;
49
+ const ownerName = finalConfig.resume?.ownerName || 'Developer';
50
+ // Analyse the current project
51
+ const scan = scanProject(projectDir);
52
+ const analysis = analyzeProject(projectDir, scan);
53
+ logger.header('Resume Update');
54
+ logger.info(`Project: ${chalk.bold(analysis.name)}`);
55
+ logger.info(`Resume: ${chalk.dim(resumePath)}`);
56
+ logger.blank();
57
+ // Generate the LaTeX entry
58
+ const entry = await generateLatexProjectEntry(analysis, useAI, ownerName);
59
+ // Preview the entry
60
+ logger.blank();
61
+ logger.header('Generated resume entry preview');
62
+ console.log(chalk.dim('─'.repeat(60)));
63
+ console.log(entry);
64
+ console.log(chalk.dim('─'.repeat(60)));
65
+ logger.blank();
66
+ // Confirm before writing
67
+ if (interactive) {
68
+ const { confirm } = await inquirer.prompt([{
69
+ type: 'confirm',
70
+ name: 'confirm',
71
+ message: 'Add this entry to your resume?',
72
+ default: true,
73
+ }]);
74
+ if (!confirm) {
75
+ logger.dimmed('Resume update skipped.');
76
+ return;
77
+ }
78
+ }
79
+ // Write to resume
80
+ try {
81
+ const result = updateLatexResume(resumePath, entry);
82
+ logger.success(`Resume updated (backup: ${chalk.dim(result.backupPath.split(/[/\\]/).pop())})`);
83
+ }
84
+ catch (e) {
85
+ logger.error(`Failed to update resume: ${e.message}`);
86
+ return;
87
+ }
88
+ // Ask about PDF export
89
+ if (interactive) {
90
+ const docsDir = join(homedir(), 'Documents', 'resume');
91
+ const { exportPDF } = await inquirer.prompt([{
92
+ type: 'confirm',
93
+ name: 'exportPDF',
94
+ message: `Export updated resume to ${chalk.cyan(docsDir)}?`,
95
+ default: true,
96
+ }]);
97
+ if (exportPDF) {
98
+ await handlePDFExport(resumePath, docsDir);
99
+ }
100
+ }
101
+ }
102
+ // ─── Setup wizard ─────────────────────────────────────────────────────────────
103
+ async function setupResume() {
104
+ logger.header('Resume Setup');
105
+ logger.blank();
106
+ logger.dimmed('AutoGit will automatically add a project entry to your resume each time you run autogit.');
107
+ logger.blank();
108
+ const config = loadConfig();
109
+ // Find existing .tex files in common locations as suggestions
110
+ const suggestions = findTexFiles();
111
+ let resumePath;
112
+ if (suggestions.length > 0) {
113
+ const { choice } = await inquirer.prompt([{
114
+ type: 'list',
115
+ name: 'choice',
116
+ message: 'Select your resume .tex file:',
117
+ choices: [
118
+ ...suggestions.map(p => ({ name: p, value: p })),
119
+ { name: 'Enter path manually', value: '__manual__' },
120
+ ],
121
+ }]);
122
+ resumePath = choice === '__manual__' ? await askResumePath() : choice;
123
+ }
124
+ else {
125
+ resumePath = await askResumePath();
126
+ }
127
+ if (!existsSync(resumePath)) {
128
+ logger.error(`File not found: ${resumePath}`);
129
+ return;
130
+ }
131
+ const { ownerName } = await inquirer.prompt([{
132
+ type: 'input',
133
+ name: 'ownerName',
134
+ message: 'Your full name (for resume bullets):',
135
+ default: config.resume?.ownerName || 'Vardh Chhajer',
136
+ }]);
137
+ const { ownerEmail } = await inquirer.prompt([{
138
+ type: 'input',
139
+ name: 'ownerEmail',
140
+ message: 'Your email:',
141
+ default: config.resume?.ownerEmail || 'chhajervardh@gmail.com',
142
+ }]);
143
+ const { enabled } = await inquirer.prompt([{
144
+ type: 'confirm',
145
+ name: 'enabled',
146
+ message: 'Auto-update resume every time you run autogit?',
147
+ default: true,
148
+ }]);
149
+ config.resume = { path: resumePath, ownerName, ownerEmail, enabled };
150
+ saveConfig(config);
151
+ logger.blank();
152
+ logger.success('Resume configured!');
153
+ logger.dimmed(` File: ${resumePath}`);
154
+ logger.dimmed(` Name: ${ownerName}`);
155
+ logger.dimmed(` Auto: ${enabled ? 'yes — updates on every autogit run' : 'no — run "autogit resume" manually'}`);
156
+ }
157
+ async function askResumePath() {
158
+ const { raw } = await inquirer.prompt([{
159
+ type: 'input',
160
+ name: 'raw',
161
+ message: 'Path to your resume .tex file:',
162
+ validate: (v) => {
163
+ const p = v.trim();
164
+ if (!p)
165
+ return 'Path cannot be empty';
166
+ if (!p.toLowerCase().endsWith('.tex'))
167
+ return 'File must be a .tex file';
168
+ return true;
169
+ },
170
+ }]);
171
+ return raw.trim();
172
+ }
173
+ function showResumeConfig() {
174
+ const config = loadConfig();
175
+ const r = config.resume;
176
+ logger.header('Resume Configuration');
177
+ logger.blank();
178
+ if (!r?.path) {
179
+ logger.warn('Resume not configured. Run "autogit resume --setup" to set it up.');
180
+ return;
181
+ }
182
+ logger.info(`Path: ${r.path}`);
183
+ logger.info(`Exists: ${existsSync(r.path) ? chalk.green('yes') : chalk.red('no — file not found!')}`);
184
+ logger.info(`Name: ${r.ownerName || '(not set)'}`);
185
+ logger.info(`Email: ${r.ownerEmail || '(not set)'}`);
186
+ logger.info(`Auto: ${r.enabled !== false ? chalk.green('enabled') : chalk.gray('disabled')}`);
187
+ }
188
+ // ─── PDF export ───────────────────────────────────────────────────────────────
189
+ async function handlePDFExport(texPath, docsDir) {
190
+ // Copy the .tex file to Documents/resume regardless of pdflatex availability
191
+ const { mkdirSync, copyFileSync } = await import('fs');
192
+ if (!existsSync(docsDir))
193
+ mkdirSync(docsDir, { recursive: true });
194
+ const texFilename = texPath.split(/[/\\]/).pop();
195
+ const destTex = join(docsDir, texFilename);
196
+ try {
197
+ copyFileSync(texPath, destTex);
198
+ logger.success(`Resume .tex copied to: ${chalk.cyan(docsDir)}`);
199
+ }
200
+ catch (e) {
201
+ logger.error(`Could not copy file: ${e.message}`);
202
+ return;
203
+ }
204
+ // Try PDF compilation
205
+ const result = await exportResumePDF(texPath);
206
+ if (result.exported && result.pdfPath) {
207
+ logger.success(`PDF exported to: ${chalk.cyan(result.pdfPath)}`);
208
+ }
209
+ else {
210
+ logger.dimmed('pdflatex not found — only the .tex file was copied.');
211
+ logger.dimmed('To compile to PDF: install TeX Live or MiKTeX, then run:');
212
+ logger.dimmed(` pdflatex "${texPath}"`);
213
+ }
214
+ }
215
+ // ─── Helper: find .tex files in common locations ──────────────────────────────
216
+ function findTexFiles() {
217
+ const candidates = [
218
+ join(homedir(), 'resume.tex'),
219
+ join(homedir(), 'Resume.tex'),
220
+ join(homedir(), 'Documents', 'resume.tex'),
221
+ join(homedir(), 'Documents', 'Resume.tex'),
222
+ join(homedir(), 'Desktop', 'resume.tex'),
223
+ join(homedir(), 'Desktop', 'Resume.tex'),
224
+ join(homedir(), 'Documents', 'resume', 'resume.tex'),
225
+ ];
226
+ return candidates.filter(p => existsSync(p));
227
+ }
228
+ //# sourceMappingURL=resume.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume.js","sourceRoot":"","sources":["../../src/commands/resume.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ export declare function registerOctokitReset(fn: () => void): void;
2
+ export type AIProviderName = 'openai' | 'anthropic' | 'gemini' | 'ollama' | 'openrouter' | 'mistral' | 'groq' | 'deepseek' | 'perplexity' | 'together' | 'cohere' | 'xai' | 'azure-openai';
3
+ export interface AutoGitConfig {
4
+ github?: {
5
+ token?: string;
6
+ };
7
+ ai?: {
8
+ provider?: AIProviderName;
9
+ model?: string;
10
+ openaiKey?: string;
11
+ anthropicKey?: string;
12
+ geminiKey?: string;
13
+ ollamaEndpoint?: string;
14
+ openrouterKey?: string;
15
+ mistralKey?: string;
16
+ groqKey?: string;
17
+ deepseekKey?: string;
18
+ perplexityKey?: string;
19
+ togetherKey?: string;
20
+ cohereKey?: string;
21
+ xaiKey?: string;
22
+ azureOpenAIKey?: string;
23
+ azureOpenAIEndpoint?: string;
24
+ azureOpenAIDeployment?: string;
25
+ azureOpenAIApiVersion?: string;
26
+ };
27
+ defaults?: {
28
+ visibility?: 'public' | 'private';
29
+ branch?: string;
30
+ license?: string;
31
+ commitStyle?: 'conventional' | 'simple';
32
+ autoConfirm?: boolean;
33
+ linkedinStyle?: 'professional' | 'casual' | 'technical';
34
+ };
35
+ resume?: {
36
+ enabled?: boolean;
37
+ path?: string;
38
+ ownerName?: string;
39
+ ownerEmail?: string;
40
+ };
41
+ }
42
+ export declare function loadConfig(): AutoGitConfig;
43
+ export declare function saveConfig(config: AutoGitConfig): void;
44
+ export declare function getConfigValue<K extends keyof AutoGitConfig>(section: K): AutoGitConfig[K] | undefined;
45
+ export declare function setConfigValue<K extends keyof AutoGitConfig>(section: K, value: AutoGitConfig[K]): void;
46
+ export declare function getGitHubToken(): string | undefined;
47
+ export declare function getAIConfig(): {
48
+ provider: AIProviderName;
49
+ model: string | undefined;
50
+ openaiKey: string | undefined;
51
+ anthropicKey: string | undefined;
52
+ geminiKey: string | undefined;
53
+ ollamaEndpoint: string;
54
+ openrouterKey: string | undefined;
55
+ mistralKey: string | undefined;
56
+ groqKey: string | undefined;
57
+ deepseekKey: string | undefined;
58
+ perplexityKey: string | undefined;
59
+ togetherKey: string | undefined;
60
+ cohereKey: string | undefined;
61
+ xaiKey: string | undefined;
62
+ azureOpenAIKey: string | undefined;
63
+ azureOpenAIEndpoint: string | undefined;
64
+ azureOpenAIDeployment: string | undefined;
65
+ azureOpenAIApiVersion: string;
66
+ };
67
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"AAKA,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAEzD;AAED,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,WAAW,GACX,QAAQ,GACR,QAAQ,GACR,YAAY,GACZ,SAAS,GACT,MAAM,GACN,UAAU,GACV,YAAY,GACZ,UAAU,GACV,QAAQ,GACR,KAAK,GACL,cAAc,CAAC;AAEnB,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,EAAE,CAAC,EAAE;QACH,QAAQ,CAAC,EAAE,cAAc,CAAC;QAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;QAEf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;QAEvB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAEhB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;QAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;KAChC,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;QAClC,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,cAAc,GAAG,QAAQ,CAAC;QACxC,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,aAAa,CAAC,EAAE,cAAc,GAAG,QAAQ,GAAG,WAAW,CAAC;KACzD,CAAC;IACF,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAID,wBAAgB,UAAU,IAAI,aAAa,CAkB1C;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAStD;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,aAAa,EAC1D,OAAO,EAAE,CAAC,GACT,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS,CAE9B;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,aAAa,EAC1D,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GACtB,IAAI,CAIN;AAED,wBAAgB,cAAc,IAAI,MAAM,GAAG,SAAS,CAMnD;AAED,wBAAgB,WAAW;cAMmD,cAAc;;;;;;;;;;;;;;;;;;EAyB3F"}
@@ -0,0 +1,78 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
2
+ import { getConfigDir, getConfigPath } from '../utils/platform.js';
3
+ // Avoid circular import — we call this lazily after github token changes
4
+ let _resetOctokit = null;
5
+ export function registerOctokitReset(fn) {
6
+ _resetOctokit = fn;
7
+ }
8
+ let cachedConfig = null;
9
+ export function loadConfig() {
10
+ if (cachedConfig)
11
+ return cachedConfig;
12
+ const configPath = getConfigPath();
13
+ if (!existsSync(configPath)) {
14
+ cachedConfig = {};
15
+ return cachedConfig;
16
+ }
17
+ try {
18
+ const raw = readFileSync(configPath, 'utf-8');
19
+ cachedConfig = JSON.parse(raw);
20
+ return cachedConfig;
21
+ }
22
+ catch {
23
+ cachedConfig = {};
24
+ return cachedConfig;
25
+ }
26
+ }
27
+ export function saveConfig(config) {
28
+ const configDir = getConfigDir();
29
+ if (!existsSync(configDir)) {
30
+ mkdirSync(configDir, { recursive: true });
31
+ }
32
+ writeFileSync(getConfigPath(), JSON.stringify(config, null, 2), 'utf-8');
33
+ cachedConfig = config;
34
+ // Reset Octokit if the GitHub token changed
35
+ _resetOctokit?.();
36
+ }
37
+ export function getConfigValue(section) {
38
+ return loadConfig()[section];
39
+ }
40
+ export function setConfigValue(section, value) {
41
+ const config = loadConfig();
42
+ config[section] = value;
43
+ saveConfig(config);
44
+ }
45
+ export function getGitHubToken() {
46
+ return (process.env.GITHUB_TOKEN ||
47
+ process.env.GH_TOKEN ||
48
+ loadConfig().github?.token);
49
+ }
50
+ export function getAIConfig() {
51
+ const config = loadConfig();
52
+ const ai = config.ai ?? {};
53
+ return {
54
+ // Active provider + model
55
+ provider: (process.env.AUTOGIT_AI_PROVIDER || ai.provider || 'openai'),
56
+ model: process.env.AUTOGIT_AI_MODEL || ai.model,
57
+ // Original providers
58
+ openaiKey: process.env.OPENAI_API_KEY || ai.openaiKey,
59
+ anthropicKey: process.env.ANTHROPIC_API_KEY || ai.anthropicKey,
60
+ geminiKey: process.env.GEMINI_API_KEY || ai.geminiKey,
61
+ ollamaEndpoint: process.env.OLLAMA_ENDPOINT || ai.ollamaEndpoint || 'http://localhost:11434',
62
+ openrouterKey: process.env.OPENROUTER_API_KEY || ai.openrouterKey,
63
+ // New providers
64
+ mistralKey: process.env.MISTRAL_API_KEY || ai.mistralKey,
65
+ groqKey: process.env.GROQ_API_KEY || ai.groqKey,
66
+ deepseekKey: process.env.DEEPSEEK_API_KEY || ai.deepseekKey,
67
+ perplexityKey: process.env.PERPLEXITY_API_KEY || ai.perplexityKey,
68
+ togetherKey: process.env.TOGETHER_API_KEY || ai.togetherKey,
69
+ cohereKey: process.env.COHERE_API_KEY || ai.cohereKey,
70
+ xaiKey: process.env.XAI_API_KEY || ai.xaiKey,
71
+ // Azure OpenAI
72
+ azureOpenAIKey: process.env.AZURE_OPENAI_KEY || ai.azureOpenAIKey,
73
+ azureOpenAIEndpoint: process.env.AZURE_OPENAI_ENDPOINT || ai.azureOpenAIEndpoint,
74
+ azureOpenAIDeployment: process.env.AZURE_OPENAI_DEPLOYMENT || ai.azureOpenAIDeployment,
75
+ azureOpenAIApiVersion: process.env.AZURE_OPENAI_API_VERSION || ai.azureOpenAIApiVersion || '2024-02-01',
76
+ };
77
+ }
78
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { runMainPipeline } from './pipeline/main-pipeline.js';
2
+ export { scanProject } from './scanner/file-scanner.js';
3
+ export { analyzeProject } from './scanner/project-analyzer.js';
4
+ export { loadConfig, saveConfig } from './config/manager.js';
5
+ export { getProvider, listProviders } from './ai/provider.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export { runMainPipeline } from './pipeline/main-pipeline.js';
2
+ export { scanProject } from './scanner/file-scanner.js';
3
+ export { analyzeProject } from './scanner/project-analyzer.js';
4
+ export { loadConfig, saveConfig } from './config/manager.js';
5
+ export { getProvider, listProviders } from './ai/provider.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,15 @@
1
+ export interface PipelineOptions {
2
+ yes?: boolean;
3
+ dryRun?: boolean;
4
+ skipReadme?: boolean;
5
+ skipLinkedin?: boolean;
6
+ skipGithub?: boolean;
7
+ skipResume?: boolean;
8
+ noAI?: boolean;
9
+ force?: boolean;
10
+ regenerate?: boolean;
11
+ private?: boolean;
12
+ public?: boolean;
13
+ }
14
+ export declare function runMainPipeline(options: PipelineOptions): Promise<void>;
15
+ //# sourceMappingURL=main-pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main-pipeline.d.ts","sourceRoot":"","sources":["../../src/pipeline/main-pipeline.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA2D7E"}