autogit-tool 1.0.18 → 1.0.21

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 (109) hide show
  1. package/README.md +61 -7
  2. package/dist/ai/code-reader.d.ts.map +1 -1
  3. package/dist/ai/code-reader.js +22 -9
  4. package/dist/ai/code-reader.js.map +1 -1
  5. package/dist/ai/prompts.d.ts +6 -0
  6. package/dist/ai/prompts.d.ts.map +1 -1
  7. package/dist/ai/prompts.js +154 -49
  8. package/dist/ai/prompts.js.map +1 -1
  9. package/dist/ai/provider.d.ts.map +1 -1
  10. package/dist/ai/provider.js +27 -0
  11. package/dist/ai/provider.js.map +1 -1
  12. package/dist/ai/readme-agent.d.ts +5 -0
  13. package/dist/ai/readme-agent.d.ts.map +1 -0
  14. package/dist/ai/readme-agent.js +126 -0
  15. package/dist/ai/readme-agent.js.map +1 -0
  16. package/dist/cli.js +62 -1
  17. package/dist/cli.js.map +1 -1
  18. package/dist/commands/brag.d.ts +2 -0
  19. package/dist/commands/brag.d.ts.map +1 -0
  20. package/dist/commands/brag.js +10 -0
  21. package/dist/commands/brag.js.map +1 -0
  22. package/dist/commands/config.d.ts +2 -0
  23. package/dist/commands/config.d.ts.map +1 -1
  24. package/dist/commands/config.js +18 -2
  25. package/dist/commands/config.js.map +1 -1
  26. package/dist/commands/github.d.ts +1 -0
  27. package/dist/commands/github.d.ts.map +1 -1
  28. package/dist/commands/github.js +11 -2
  29. package/dist/commands/github.js.map +1 -1
  30. package/dist/commands/linkedin.d.ts +3 -0
  31. package/dist/commands/linkedin.d.ts.map +1 -1
  32. package/dist/commands/linkedin.js +124 -12
  33. package/dist/commands/linkedin.js.map +1 -1
  34. package/dist/commands/publish.d.ts.map +1 -1
  35. package/dist/commands/publish.js +15 -46
  36. package/dist/commands/publish.js.map +1 -1
  37. package/dist/commands/readme.d.ts.map +1 -1
  38. package/dist/commands/readme.js +14 -0
  39. package/dist/commands/readme.js.map +1 -1
  40. package/dist/commands/resume.d.ts +2 -0
  41. package/dist/commands/resume.d.ts.map +1 -1
  42. package/dist/commands/resume.js +311 -81
  43. package/dist/commands/resume.js.map +1 -1
  44. package/dist/commands/setup.d.ts +3 -0
  45. package/dist/commands/setup.d.ts.map +1 -0
  46. package/dist/commands/setup.js +58 -0
  47. package/dist/commands/setup.js.map +1 -0
  48. package/dist/commands/showcase.d.ts +4 -0
  49. package/dist/commands/showcase.d.ts.map +1 -0
  50. package/dist/commands/showcase.js +35 -0
  51. package/dist/commands/showcase.js.map +1 -0
  52. package/dist/config/manager.d.ts +16 -1
  53. package/dist/config/manager.d.ts.map +1 -1
  54. package/dist/config/manager.js +9 -0
  55. package/dist/config/manager.js.map +1 -1
  56. package/dist/pipeline/main-pipeline.d.ts +2 -0
  57. package/dist/pipeline/main-pipeline.d.ts.map +1 -1
  58. package/dist/pipeline/main-pipeline.js +135 -119
  59. package/dist/pipeline/main-pipeline.js.map +1 -1
  60. package/dist/services/brag-agent.d.ts +19 -0
  61. package/dist/services/brag-agent.d.ts.map +1 -0
  62. package/dist/services/brag-agent.js +177 -0
  63. package/dist/services/brag-agent.js.map +1 -0
  64. package/dist/services/brag-runtime.d.ts +7 -0
  65. package/dist/services/brag-runtime.d.ts.map +1 -0
  66. package/dist/services/brag-runtime.js +68 -0
  67. package/dist/services/brag-runtime.js.map +1 -0
  68. package/dist/services/commit-workflow.d.ts +2 -0
  69. package/dist/services/commit-workflow.d.ts.map +1 -0
  70. package/dist/services/commit-workflow.js +60 -0
  71. package/dist/services/commit-workflow.js.map +1 -0
  72. package/dist/services/git-service.d.ts +12 -1
  73. package/dist/services/git-service.d.ts.map +1 -1
  74. package/dist/services/git-service.js +42 -3
  75. package/dist/services/git-service.js.map +1 -1
  76. package/dist/services/pdf-to-latex.d.ts +17 -0
  77. package/dist/services/pdf-to-latex.d.ts.map +1 -0
  78. package/dist/services/pdf-to-latex.js +108 -0
  79. package/dist/services/pdf-to-latex.js.map +1 -0
  80. package/dist/services/publish-workflow.d.ts +14 -0
  81. package/dist/services/publish-workflow.d.ts.map +1 -0
  82. package/dist/services/publish-workflow.js +96 -0
  83. package/dist/services/publish-workflow.js.map +1 -0
  84. package/dist/services/readme-manager.d.ts +2 -1
  85. package/dist/services/readme-manager.d.ts.map +1 -1
  86. package/dist/services/readme-manager.js +35 -24
  87. package/dist/services/readme-manager.js.map +1 -1
  88. package/dist/services/resume-manager.js +1 -1
  89. package/dist/services/share-package.d.ts +10 -0
  90. package/dist/services/share-package.d.ts.map +1 -0
  91. package/dist/services/share-package.js +21 -0
  92. package/dist/services/share-package.js.map +1 -0
  93. package/dist/services/showcase-cards.d.ts +7 -0
  94. package/dist/services/showcase-cards.d.ts.map +1 -0
  95. package/dist/services/showcase-cards.js +47 -0
  96. package/dist/services/showcase-cards.js.map +1 -0
  97. package/dist/services/showcase.d.ts +16 -0
  98. package/dist/services/showcase.d.ts.map +1 -0
  99. package/dist/services/showcase.js +79 -0
  100. package/dist/services/showcase.js.map +1 -0
  101. package/dist/services/social-generator.d.ts +5 -0
  102. package/dist/services/social-generator.d.ts.map +1 -1
  103. package/dist/services/social-generator.js +34 -0
  104. package/dist/services/social-generator.js.map +1 -1
  105. package/dist/services/social-images.d.ts +5 -0
  106. package/dist/services/social-images.d.ts.map +1 -0
  107. package/dist/services/social-images.js +79 -0
  108. package/dist/services/social-images.js.map +1 -0
  109. package/package.json +5 -1
@@ -1,5 +1,5 @@
1
- import { resolve, join } from 'path';
2
- import { existsSync } from 'fs';
1
+ import { resolve, join, basename } from 'path';
2
+ import { existsSync, writeFileSync, readdirSync, statSync } from 'fs';
3
3
  import { homedir } from 'os';
4
4
  import chalk from 'chalk';
5
5
  import inquirer from 'inquirer';
@@ -7,19 +7,142 @@ import { scanProject } from '../scanner/file-scanner.js';
7
7
  import { analyzeProject } from '../scanner/project-analyzer.js';
8
8
  import { loadConfig, saveConfig } from '../config/manager.js';
9
9
  import { generateLatexProjectEntry, updateLatexResume, exportResumePDF, } from '../services/resume-manager.js';
10
+ import { convertPDFToLatex } from '../services/pdf-to-latex.js';
10
11
  import { logger, spinner } from '../utils/logger.js';
11
12
  // ─── Main entry point ─────────────────────────────────────────────────────────
12
13
  export async function cmdResume(opts) {
14
+ if (opts.show) {
15
+ showResumeConfig();
16
+ return;
17
+ }
18
+ // --from-pdf: convert an existing PDF resume to LaTeX
19
+ if (opts.fromPdf) {
20
+ await convertFromPDF(opts.fromPdf.trim());
21
+ return;
22
+ }
23
+ // --file shortcut
24
+ if (opts.file) {
25
+ await setResumeFile(opts.file.trim());
26
+ return;
27
+ }
13
28
  if (opts.setup) {
14
29
  await setupResume();
15
30
  return;
16
31
  }
17
- if (opts.show) {
18
- showResumeConfig();
19
- return;
32
+ // If resume not configured at all, auto-enter setup
33
+ const config = loadConfig();
34
+ if (!config.resume?.path || !existsSync(config.resume.path)) {
35
+ logger.blank();
36
+ logger.info('No resume configured yet.');
37
+ await setupResume();
38
+ const updated = loadConfig();
39
+ if (!updated.resume?.path)
40
+ return;
20
41
  }
21
42
  await runResumeUpdate(resolve(process.cwd()), opts.ai !== false, true);
22
43
  }
44
+ // ─── PDF to LaTeX converter ───────────────────────────────────────────────────
45
+ async function convertFromPDF(pdfPath) {
46
+ // Strip surrounding quotes (drag-and-drop on Windows adds them)
47
+ const cleanPath = pdfPath.replace(/^["']|["']$/g, '');
48
+ if (!existsSync(cleanPath)) {
49
+ logger.error(`PDF not found: ${cleanPath}`);
50
+ logger.dimmed('Usage: autogit resume --from-pdf "C:\\path\\to\\resume.pdf"');
51
+ return;
52
+ }
53
+ if (!cleanPath.toLowerCase().endsWith('.pdf')) {
54
+ logger.error('File must be a .pdf');
55
+ return;
56
+ }
57
+ logger.header('PDF → LaTeX Resume Conversion');
58
+ logger.blank();
59
+ logger.info(`Source: ${chalk.cyan(cleanPath)}`);
60
+ logger.blank();
61
+ const config = loadConfig();
62
+ const { name } = await inquirer.prompt([{
63
+ type: 'input',
64
+ name: 'name',
65
+ message: 'Your full name (for the LaTeX heading):',
66
+ default: config.resume?.ownerName || '',
67
+ }]);
68
+ const { email } = await inquirer.prompt([{
69
+ type: 'input',
70
+ name: 'email',
71
+ message: 'Your email:',
72
+ default: config.resume?.ownerEmail || '',
73
+ }]);
74
+ const { website } = await inquirer.prompt([{
75
+ type: 'input',
76
+ name: 'website',
77
+ message: 'Your website (optional, e.g. vardh.me):',
78
+ default: '',
79
+ }]);
80
+ logger.blank();
81
+ try {
82
+ const result = await convertPDFToLatex(cleanPath, {
83
+ name: name.trim(),
84
+ email: email.trim(),
85
+ website: website.trim(),
86
+ });
87
+ logger.blank();
88
+ logger.success(`LaTeX resume saved to: ${chalk.cyan(result.outputPath)}`);
89
+ logger.blank();
90
+ // Ask if they want to use this as their autogit resume
91
+ const { useIt } = await inquirer.prompt([{
92
+ type: 'confirm',
93
+ name: 'useIt',
94
+ message: 'Use this .tex file as your autogit resume (for auto project entries)?',
95
+ default: true,
96
+ }]);
97
+ if (useIt) {
98
+ config.resume = {
99
+ path: result.outputPath,
100
+ ownerName: name.trim(),
101
+ ownerEmail: email.trim(),
102
+ enabled: config.resume?.enabled ?? true,
103
+ };
104
+ saveConfig(config);
105
+ logger.success('Resume configured! Run "autogit resume" in any project to add entries.');
106
+ }
107
+ logger.blank();
108
+ logger.info('Next steps:');
109
+ logger.dimmed(` 1. Open the file: ${result.outputPath}`);
110
+ logger.dimmed(' 2. Review and adjust the content');
111
+ logger.dimmed(' 3. Compile with: pdflatex ' + basename(result.outputPath));
112
+ logger.dimmed(' 4. Or upload to Overleaf: https://overleaf.com');
113
+ }
114
+ catch (e) {
115
+ logger.error(`Conversion failed: ${e.message}`);
116
+ if (e.message.includes('image-only') || e.message.includes('scanned')) {
117
+ logger.blank();
118
+ logger.info('Your PDF appears to be a scanned image. Options:');
119
+ logger.dimmed(' • Use a text-based PDF (export from Word, Google Docs, etc.)');
120
+ logger.dimmed(' • Run OCR first using Adobe Acrobat or an online tool');
121
+ }
122
+ }
123
+ }
124
+ // ─── Quick file setter (--file flag) ─────────────────────────────────────────
125
+ async function setResumeFile(filePath) {
126
+ if (!filePath.toLowerCase().endsWith('.tex')) {
127
+ logger.error('File must be a .tex file');
128
+ return;
129
+ }
130
+ if (!existsSync(filePath)) {
131
+ logger.error(`File not found: ${filePath}`);
132
+ return;
133
+ }
134
+ const config = loadConfig();
135
+ config.resume = {
136
+ ...config.resume,
137
+ path: filePath,
138
+ ownerName: config.resume?.ownerName || 'Developer',
139
+ ownerEmail: config.resume?.ownerEmail || '',
140
+ enabled: config.resume?.enabled ?? true,
141
+ };
142
+ saveConfig(config);
143
+ logger.success(`Resume set to: ${chalk.cyan(filePath)}`);
144
+ logger.dimmed('Run "autogit resume" in a project folder to generate an entry.');
145
+ }
23
146
  // ─── Called from the main pipeline ───────────────────────────────────────────
24
147
  export async function runResumeUpdate(projectDir, useAI, interactive, existingScan) {
25
148
  const config = loadConfig();
@@ -28,11 +151,11 @@ export async function runResumeUpdate(projectDir, useAI, interactive, existingSc
28
151
  if (!interactive)
29
152
  return;
30
153
  logger.blank();
31
- logger.info('Resume file not configured.');
154
+ logger.warn('Resume file not found or not configured.');
32
155
  const { setup } = await inquirer.prompt([{
33
156
  type: 'confirm',
34
157
  name: 'setup',
35
- message: 'Set up resume auto-update now?',
158
+ message: 'Set up your resume now?',
36
159
  default: true,
37
160
  }]);
38
161
  if (!setup)
@@ -45,103 +168,197 @@ export async function runResumeUpdate(projectDir, useAI, interactive, existingSc
45
168
  const finalConfig = loadConfig();
46
169
  const resumePath = finalConfig.resume.path;
47
170
  const ownerName = finalConfig.resume?.ownerName || 'Developer';
48
- // Reuse existing scan from pipeline or create a fresh one
49
171
  const scan = existingScan ?? scanProject(projectDir);
50
172
  const analysis = await analyzeProject(projectDir, scan);
51
173
  logger.header('Resume Update');
52
174
  logger.info(`Project: ${chalk.bold(analysis.displayName || analysis.name)}`);
53
175
  logger.info(`Resume: ${chalk.dim(resumePath)}`);
54
176
  logger.blank();
55
- // Pass scan so AI can read full file contents
56
177
  const entry = await generateLatexProjectEntry(analysis, useAI, ownerName, scan, projectDir);
57
- // Preview the entry
178
+ // Preview
58
179
  logger.blank();
59
- logger.header('Generated resume entry preview');
180
+ logger.header('Generated entry');
60
181
  console.log(chalk.dim('─'.repeat(60)));
61
182
  console.log(entry);
62
183
  console.log(chalk.dim('─'.repeat(60)));
63
184
  logger.blank();
64
- // Confirm before writing
65
185
  if (interactive) {
66
- const { confirm } = await inquirer.prompt([{
67
- type: 'confirm',
68
- name: 'confirm',
69
- message: 'Add this entry to your resume?',
70
- default: true,
186
+ const { action } = await inquirer.prompt([{
187
+ type: 'list',
188
+ name: 'action',
189
+ message: 'What would you like to do?',
190
+ choices: [
191
+ { name: 'Add to resume', value: 'add' },
192
+ { name: 'Regenerate entry', value: 'regen' },
193
+ { name: 'Regenerate without AI', value: 'regen_noai' },
194
+ { name: 'Skip', value: 'skip' },
195
+ ],
196
+ default: 'add',
71
197
  }]);
72
- if (!confirm) {
73
- logger.dimmed('Resume update skipped.');
198
+ if (action === 'skip') {
199
+ logger.dimmed('Skipped.');
200
+ return;
201
+ }
202
+ if (action === 'regen' || action === 'regen_noai') {
203
+ const regenEntry = await generateLatexProjectEntry(analysis, action === 'regen', ownerName, scan, projectDir);
204
+ console.log(chalk.dim('─'.repeat(60)));
205
+ console.log(regenEntry);
206
+ console.log(chalk.dim('─'.repeat(60)));
207
+ logger.blank();
208
+ const { confirmRegen } = await inquirer.prompt([{
209
+ type: 'confirm', name: 'confirmRegen', message: 'Add this entry?', default: true,
210
+ }]);
211
+ if (!confirmRegen) {
212
+ logger.dimmed('Skipped.');
213
+ return;
214
+ }
215
+ try {
216
+ const result = updateLatexResume(resumePath, regenEntry);
217
+ logger.success(`Resume updated (backup: ${chalk.dim(basename(result.backupPath))})`);
218
+ }
219
+ catch (e) {
220
+ logger.error(`Failed: ${e.message}`);
221
+ return;
222
+ }
223
+ await askPDFExport(resumePath);
74
224
  return;
75
225
  }
76
226
  }
77
- // Write to resume
78
227
  try {
79
228
  const result = updateLatexResume(resumePath, entry);
80
- logger.success(`Resume updated (backup: ${chalk.dim(result.backupPath.split(/[/\\]/).pop())})`);
229
+ logger.success(`Resume updated (backup: ${chalk.dim(basename(result.backupPath))})`);
81
230
  }
82
231
  catch (e) {
83
232
  logger.error(`Failed to update resume: ${e.message}`);
84
233
  return;
85
234
  }
86
- // Ask about PDF export
87
- if (interactive) {
88
- const docsDir = join(homedir(), 'Documents', 'resume');
89
- const { exportPDF } = await inquirer.prompt([{
90
- type: 'confirm',
91
- name: 'exportPDF',
92
- message: `Export updated resume to ${chalk.cyan(docsDir)}?`,
93
- default: true,
94
- }]);
95
- if (exportPDF) {
96
- await handlePDFExport(resumePath, docsDir);
97
- }
98
- }
235
+ if (interactive)
236
+ await askPDFExport(resumePath);
99
237
  }
100
238
  // ─── Setup wizard ─────────────────────────────────────────────────────────────
101
239
  async function setupResume() {
102
240
  logger.header('Resume Setup');
103
241
  logger.blank();
104
- logger.dimmed('AutoGit will automatically add a project entry to your resume each time you run autogit.');
242
+ logger.info('AutoGit will add a project entry to your resume every time you run autogit.');
105
243
  logger.blank();
106
244
  const config = loadConfig();
107
- // Find existing .tex files in common locations as suggestions
108
245
  const suggestions = findTexFiles();
109
- let resumePath;
246
+ // How they want to provide their resume
247
+ const choices = [];
110
248
  if (suggestions.length > 0) {
111
- const { choice } = await inquirer.prompt([{
112
- type: 'list',
113
- name: 'choice',
114
- message: 'Select your resume .tex file:',
115
- choices: [
116
- ...suggestions.map(p => ({ name: p, value: p })),
117
- { name: 'Enter path manually', value: '__manual__' },
118
- ],
249
+ choices.push(...suggestions.map(p => ({ name: `Use: ${p}`, value: `file:${p}` })));
250
+ }
251
+ choices.push({ name: 'Enter a file path manually', value: 'path' }, { name: 'Paste LaTeX content directly', value: 'paste' }, { name: 'Convert from PDF resume', value: 'pdf' });
252
+ const { method } = await inquirer.prompt([{
253
+ type: 'list',
254
+ name: 'method',
255
+ message: 'How would you like to provide your resume?',
256
+ choices,
257
+ }]);
258
+ let resumePath;
259
+ if (method.startsWith('file:')) {
260
+ // Auto-detected file
261
+ resumePath = method.slice(5);
262
+ }
263
+ else if (method === 'path') {
264
+ // Manual path entry — support drag-and-drop (Windows wraps in quotes)
265
+ const { raw } = await inquirer.prompt([{
266
+ type: 'input',
267
+ name: 'raw',
268
+ message: 'Paste or type the full path to your .tex file:',
269
+ validate: (v) => {
270
+ const p = v.trim().replace(/^["']|["']$/g, '');
271
+ if (!p)
272
+ return 'Path cannot be empty';
273
+ if (!p.toLowerCase().endsWith('.tex'))
274
+ return 'File must be a .tex file';
275
+ return true;
276
+ },
119
277
  }]);
120
- resumePath = choice === '__manual__' ? await askResumePath() : choice;
278
+ resumePath = raw.trim().replace(/^["']|["']$/g, '');
279
+ if (!existsSync(resumePath)) {
280
+ logger.error(`File not found: ${resumePath}`);
281
+ return;
282
+ }
121
283
  }
122
- else {
123
- resumePath = await askResumePath();
284
+ else if (method === 'pdf') {
285
+ // Convert PDF to LaTeX
286
+ const { pdfRaw } = await inquirer.prompt([{
287
+ type: 'input',
288
+ name: 'pdfRaw',
289
+ message: 'Path to your PDF resume:',
290
+ validate: (v) => {
291
+ const p = v.trim().replace(/^["']|["']$/g, '');
292
+ if (!p)
293
+ return 'Path cannot be empty';
294
+ if (!p.toLowerCase().endsWith('.pdf'))
295
+ return 'File must be a .pdf';
296
+ if (!existsSync(p))
297
+ return `File not found: ${p}`;
298
+ return true;
299
+ },
300
+ }]);
301
+ const pdfPath = pdfRaw.trim().replace(/^["']|["']$/g, '');
302
+ try {
303
+ const result = await convertPDFToLatex(pdfPath, {
304
+ name: config.resume?.ownerName || '',
305
+ email: config.resume?.ownerEmail || '',
306
+ website: '',
307
+ });
308
+ resumePath = result.outputPath;
309
+ logger.success(`LaTeX resume created: ${chalk.cyan(resumePath)}`);
310
+ }
311
+ catch (e) {
312
+ logger.error(`PDF conversion failed: ${e.message}`);
313
+ return;
314
+ }
124
315
  }
125
- if (!existsSync(resumePath)) {
126
- logger.error(`File not found: ${resumePath}`);
127
- return;
316
+ else {
317
+ logger.blank();
318
+ logger.info('Paste your full LaTeX resume content below.');
319
+ logger.dimmed('When done, type END on a new line and press Enter.');
320
+ logger.blank();
321
+ const lines = [];
322
+ const rl = await import('readline');
323
+ const iface = rl.createInterface({ input: process.stdin, output: process.stdout });
324
+ await new Promise(res => {
325
+ iface.on('line', (line) => {
326
+ if (line.trim() === 'END') {
327
+ iface.close();
328
+ res();
329
+ }
330
+ else
331
+ lines.push(line);
332
+ });
333
+ });
334
+ const content = lines.join('\n');
335
+ if (!content.includes('\\begin{document}')) {
336
+ logger.error('Content does not look like a valid LaTeX file (missing \\begin{document})');
337
+ return;
338
+ }
339
+ // Save to ~/.autogit/resume.tex
340
+ const savePath = join(homedir(), '.autogit', 'resume.tex');
341
+ writeFileSync(savePath, content, 'utf-8');
342
+ resumePath = savePath;
343
+ logger.success(`Resume saved to: ${chalk.cyan(savePath)}`);
128
344
  }
345
+ logger.blank();
129
346
  const { ownerName } = await inquirer.prompt([{
130
347
  type: 'input',
131
348
  name: 'ownerName',
132
- message: 'Your full name (for resume bullets):',
133
- default: config.resume?.ownerName || 'Vardh Chhajer',
349
+ message: 'Your full name:',
350
+ default: config.resume?.ownerName || '',
134
351
  }]);
135
352
  const { ownerEmail } = await inquirer.prompt([{
136
353
  type: 'input',
137
354
  name: 'ownerEmail',
138
355
  message: 'Your email:',
139
- default: config.resume?.ownerEmail || 'chhajervardh@gmail.com',
356
+ default: config.resume?.ownerEmail || '',
140
357
  }]);
141
358
  const { enabled } = await inquirer.prompt([{
142
359
  type: 'confirm',
143
360
  name: 'enabled',
144
- message: 'Auto-update resume every time you run autogit?',
361
+ message: 'Auto-update resume on every autogit run?',
145
362
  default: true,
146
363
  }]);
147
364
  config.resume = { path: resumePath, ownerName, ownerEmail, enabled };
@@ -150,23 +367,9 @@ async function setupResume() {
150
367
  logger.success('Resume configured!');
151
368
  logger.dimmed(` File: ${resumePath}`);
152
369
  logger.dimmed(` Name: ${ownerName}`);
153
- logger.dimmed(` Auto: ${enabled ? 'yes — updates on every autogit run' : 'no — run "autogit resume" manually'}`);
154
- }
155
- async function askResumePath() {
156
- const { raw } = await inquirer.prompt([{
157
- type: 'input',
158
- name: 'raw',
159
- message: 'Path to your resume .tex file:',
160
- validate: (v) => {
161
- const p = v.trim();
162
- if (!p)
163
- return 'Path cannot be empty';
164
- if (!p.toLowerCase().endsWith('.tex'))
165
- return 'File must be a .tex file';
166
- return true;
167
- },
168
- }]);
169
- return raw.trim();
370
+ logger.dimmed(` Auto: ${enabled ? 'yes' : 'no — run "autogit resume" manually'}`);
371
+ logger.blank();
372
+ logger.dimmed('Tip: to change the file later, run: autogit resume --file /path/to/resume.tex');
170
373
  }
171
374
  function showResumeConfig() {
172
375
  const config = loadConfig();
@@ -174,32 +377,45 @@ function showResumeConfig() {
174
377
  logger.header('Resume Configuration');
175
378
  logger.blank();
176
379
  if (!r?.path) {
177
- logger.warn('Resume not configured. Run "autogit resume --setup" to set it up.');
380
+ logger.warn('Not configured. Run: autogit resume --setup');
178
381
  return;
179
382
  }
383
+ const exists = existsSync(r.path);
180
384
  logger.info(`Path: ${r.path}`);
181
- logger.info(`Exists: ${existsSync(r.path) ? chalk.green('yes') : chalk.red('no — file not found!')}`);
385
+ logger.info(`Exists: ${exists ? chalk.green('yes') : chalk.red('no — file not found!')}`);
182
386
  logger.info(`Name: ${r.ownerName || '(not set)'}`);
183
387
  logger.info(`Email: ${r.ownerEmail || '(not set)'}`);
184
388
  logger.info(`Auto: ${r.enabled !== false ? chalk.green('enabled') : chalk.gray('disabled')}`);
389
+ logger.blank();
390
+ logger.dimmed('Commands:');
391
+ logger.dimmed(' autogit resume — update resume for current project');
392
+ logger.dimmed(' autogit resume --setup — change resume file or settings');
393
+ logger.dimmed(' autogit resume --file <path>— quickly set a new .tex file');
185
394
  }
186
- // ─── PDF export ───────────────────────────────────────────────────────────────
187
- async function handlePDFExport(texPath, docsDir) {
188
- const spin = spinner('Exporting resume...').start();
189
- const result = await exportResumePDF(texPath);
395
+ async function askPDFExport(resumePath) {
396
+ const docsDir = join(homedir(), 'Documents', 'resume');
397
+ const { exportPDF } = await inquirer.prompt([{
398
+ type: 'confirm',
399
+ name: 'exportPDF',
400
+ message: `Copy updated resume to ${chalk.cyan(docsDir)}?`,
401
+ default: true,
402
+ }]);
403
+ if (!exportPDF)
404
+ return;
405
+ const spin = spinner('Exporting...').start();
406
+ const result = await exportResumePDF(resumePath);
190
407
  if (result.exported && result.pdfPath) {
191
408
  spin.succeed(`PDF exported to: ${chalk.cyan(result.pdfPath)}`);
192
409
  }
193
410
  else if (result.texCopied) {
194
411
  spin.warn(`Resume .tex copied to ${chalk.cyan(docsDir)}`);
195
- logger.dimmed('PDF compilation unavailable — install TeX Live, MiKTeX, or pdflatex to compile.');
196
- logger.dimmed(`To compile manually: pdflatex "${texPath}"`);
412
+ logger.dimmed('pdflatex not found — install TeX Live or MiKTeX to compile to PDF.');
197
413
  }
198
414
  else {
199
415
  spin.fail('Export failed');
200
416
  }
201
417
  }
202
- // ─── Helper: find .tex files in common locations ──────────────────────────────
418
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
203
419
  function findTexFiles() {
204
420
  const candidates = [
205
421
  join(homedir(), 'resume.tex'),
@@ -209,7 +425,21 @@ function findTexFiles() {
209
425
  join(homedir(), 'Desktop', 'resume.tex'),
210
426
  join(homedir(), 'Desktop', 'Resume.tex'),
211
427
  join(homedir(), 'Documents', 'resume', 'resume.tex'),
428
+ join(homedir(), '.autogit', 'resume.tex'),
212
429
  ];
430
+ // Also scan Desktop and Documents for any .tex files (one level deep)
431
+ for (const dir of [join(homedir(), 'Desktop'), join(homedir(), 'Documents')]) {
432
+ try {
433
+ for (const f of readdirSync(dir)) {
434
+ if (f.toLowerCase().endsWith('.tex')) {
435
+ const full = join(dir, f);
436
+ if (!candidates.includes(full) && statSync(full).isFile())
437
+ candidates.push(full);
438
+ }
439
+ }
440
+ }
441
+ catch { /* directory not accessible */ }
442
+ }
213
443
  return candidates.filter(p => existsSync(p));
214
444
  }
215
445
  //# sourceMappingURL=resume.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resume.js","sourceRoot":"","sources":["../../src/commands/resume.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resume.js","sourceRoot":"","sources":["../../src/commands/resume.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function shouldRunFirstSetup(interactive: boolean): boolean;
2
+ export declare function cmdSetup(): Promise<void>;
3
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAOA,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CAEjE;AAED,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAkD9C"}
@@ -0,0 +1,58 @@
1
+ import inquirer from 'inquirer';
2
+ import { getAIConfig, loadConfig, saveConfig } from '../config/manager.js';
3
+ import { configureAI, configureDefaults } from './config.js';
4
+ import { logger } from '../utils/logger.js';
5
+ import { buildBragLaunch, ensureBragAgent, installBragSkill, selectBragAgent } from '../services/brag-agent.js';
6
+ import { ensureBragRuntime } from '../services/brag-runtime.js';
7
+ export function shouldRunFirstSetup(interactive) {
8
+ return interactive && loadConfig().setup?.completed !== true;
9
+ }
10
+ export async function cmdSetup() {
11
+ if (!process.stdin.isTTY || !process.stdout.isTTY) {
12
+ throw new Error('Setup needs an interactive terminal. Run autogit setup in a terminal.');
13
+ }
14
+ logger.header('AutoGit Setup');
15
+ const { mode } = await inquirer.prompt([{
16
+ type: 'list', name: 'mode', message: 'How would you like to set up AutoGit?',
17
+ choices: [
18
+ { name: 'Default setup (recommended)', value: 'default' },
19
+ { name: 'Customize settings', value: 'custom' },
20
+ ], default: 'default',
21
+ }]);
22
+ if (mode === 'custom')
23
+ await configureDefaults();
24
+ const { includeBrag } = await inquirer.prompt([{
25
+ type: 'confirm', name: 'includeBrag',
26
+ message: 'Install Brag and a coding agent matched to your AI provider?',
27
+ default: true,
28
+ }]);
29
+ logger.blank();
30
+ logger.header('AI Provider');
31
+ await configureAI();
32
+ let brag = 'skipped';
33
+ let agent;
34
+ if (includeBrag) {
35
+ const provider = loadConfig().ai?.provider || getAIConfig().provider;
36
+ agent = selectBragAgent(provider);
37
+ logger.info(`Setting up Brag with ${agent}...`);
38
+ try {
39
+ buildBragLaunch(provider, 'Verify provider configuration');
40
+ const runtime = await ensureBragRuntime();
41
+ await ensureBragAgent(agent, runtime.pathPrefix);
42
+ await installBragSkill(agent, runtime.pathPrefix);
43
+ brag = 'installed';
44
+ logger.success(`Brag skill and ${agent} are installed.`);
45
+ logger.dimmed('Video rendering uses Hyperframes, which may download its renderer on first use.');
46
+ }
47
+ catch (error) {
48
+ brag = 'failed';
49
+ logger.warn(`Brag setup failed: ${error.message}`);
50
+ logger.dimmed('AutoGit remains available. Run autogit setup to retry later.');
51
+ }
52
+ }
53
+ const config = loadConfig();
54
+ config.setup = { completed: true, brag, agent };
55
+ saveConfig(config);
56
+ logger.success('Setup complete.');
57
+ }
58
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function cmdShowcase(opts: {
2
+ ai?: boolean;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=showcase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"showcase.d.ts","sourceRoot":"","sources":["../../src/commands/showcase.ts"],"names":[],"mappings":"AAWA,wBAAsB,WAAW,CAAC,IAAI,EAAE;IAAE,EAAE,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBvE"}