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.
- package/LICENSE +21 -0
- package/README.md +42 -0
- package/dist/ai/prompts.d.ts +10 -0
- package/dist/ai/prompts.d.ts.map +1 -0
- package/dist/ai/prompts.js +169 -0
- package/dist/ai/prompts.js.map +1 -0
- package/dist/ai/provider.d.ts +24 -0
- package/dist/ai/provider.d.ts.map +1 -0
- package/dist/ai/provider.js +305 -0
- package/dist/ai/provider.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +228 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/analyze.d.ts +4 -0
- package/dist/commands/analyze.d.ts.map +1 -0
- package/dist/commands/analyze.js +63 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/config.d.ts +8 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +457 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/docs.d.ts +5 -0
- package/dist/commands/docs.d.ts.map +1 -0
- package/dist/commands/docs.js +22 -0
- package/dist/commands/docs.js.map +1 -0
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +69 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/github.d.ts +5 -0
- package/dist/commands/github.d.ts.map +1 -0
- package/dist/commands/github.js +46 -0
- package/dist/commands/github.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +38 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/linkedin.d.ts +4 -0
- package/dist/commands/linkedin.d.ts.map +1 -0
- package/dist/commands/linkedin.js +42 -0
- package/dist/commands/linkedin.js.map +1 -0
- package/dist/commands/login.d.ts +2 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +301 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/publish.d.ts +5 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +58 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/readme.d.ts +5 -0
- package/dist/commands/readme.d.ts.map +1 -0
- package/dist/commands/readme.js +32 -0
- package/dist/commands/readme.js.map +1 -0
- package/dist/commands/release.d.ts +5 -0
- package/dist/commands/release.d.ts.map +1 -0
- package/dist/commands/release.js +56 -0
- package/dist/commands/release.js.map +1 -0
- package/dist/commands/resume.d.ts +8 -0
- package/dist/commands/resume.d.ts.map +1 -0
- package/dist/commands/resume.js +228 -0
- package/dist/commands/resume.js.map +1 -0
- package/dist/config/manager.d.ts +67 -0
- package/dist/config/manager.d.ts.map +1 -0
- package/dist/config/manager.js +78 -0
- package/dist/config/manager.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/pipeline/main-pipeline.d.ts +15 -0
- package/dist/pipeline/main-pipeline.d.ts.map +1 -0
- package/dist/pipeline/main-pipeline.js +279 -0
- package/dist/pipeline/main-pipeline.js.map +1 -0
- package/dist/scanner/file-scanner.d.ts +21 -0
- package/dist/scanner/file-scanner.d.ts.map +1 -0
- package/dist/scanner/file-scanner.js +90 -0
- package/dist/scanner/file-scanner.js.map +1 -0
- package/dist/scanner/project-analyzer.d.ts +26 -0
- package/dist/scanner/project-analyzer.d.ts.map +1 -0
- package/dist/scanner/project-analyzer.js +454 -0
- package/dist/scanner/project-analyzer.js.map +1 -0
- package/dist/services/docs-generator.d.ts +11 -0
- package/dist/services/docs-generator.d.ts.map +1 -0
- package/dist/services/docs-generator.js +172 -0
- package/dist/services/docs-generator.js.map +1 -0
- package/dist/services/git-service.d.ts +22 -0
- package/dist/services/git-service.d.ts.map +1 -0
- package/dist/services/git-service.js +162 -0
- package/dist/services/git-service.js.map +1 -0
- package/dist/services/github-service.d.ts +44 -0
- package/dist/services/github-service.d.ts.map +1 -0
- package/dist/services/github-service.js +131 -0
- package/dist/services/github-service.js.map +1 -0
- package/dist/services/insights.d.ts +24 -0
- package/dist/services/insights.d.ts.map +1 -0
- package/dist/services/insights.js +140 -0
- package/dist/services/insights.js.map +1 -0
- package/dist/services/readme-manager.d.ts +11 -0
- package/dist/services/readme-manager.d.ts.map +1 -0
- package/dist/services/readme-manager.js +180 -0
- package/dist/services/readme-manager.js.map +1 -0
- package/dist/services/resume-manager.d.ts +29 -0
- package/dist/services/resume-manager.d.ts.map +1 -0
- package/dist/services/resume-manager.js +186 -0
- package/dist/services/resume-manager.js.map +1 -0
- package/dist/services/social-generator.d.ts +14 -0
- package/dist/services/social-generator.d.ts.map +1 -0
- package/dist/services/social-generator.js +93 -0
- package/dist/services/social-generator.js.map +1 -0
- package/dist/utils/logger.d.ts +19 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +81 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/platform.d.ts +8 -0
- package/dist/utils/platform.d.ts.map +1 -0
- package/dist/utils/platform.js +27 -0
- package/dist/utils/platform.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1,46 @@
|
|
|
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 { createRepo, getAuthenticatedUser, repoExists, generateTopics, isGitHubConfigured } from '../services/github-service.js';
|
|
7
|
+
import { addRemote } from '../services/git-service.js';
|
|
8
|
+
import { logger } from '../utils/logger.js';
|
|
9
|
+
export async function cmdGithub(opts) {
|
|
10
|
+
const rootDir = resolve(process.cwd());
|
|
11
|
+
logger.header('GitHub');
|
|
12
|
+
if (!isGitHubConfigured()) {
|
|
13
|
+
logger.error('GitHub not configured. Run "autogit login" or set GITHUB_TOKEN');
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const user = await getAuthenticatedUser();
|
|
17
|
+
logger.info(`Authenticated as: ${chalk.bold(user.login)}`);
|
|
18
|
+
const scan = scanProject(rootDir);
|
|
19
|
+
const analysis = analyzeProject(rootDir, scan);
|
|
20
|
+
const exists = await repoExists(user.login, analysis.name);
|
|
21
|
+
if (exists) {
|
|
22
|
+
logger.info(`Repository exists: ${chalk.underline(`https://github.com/${user.login}/${analysis.name}`)}`);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (!opts.create) {
|
|
26
|
+
const { confirm } = await inquirer.prompt([{
|
|
27
|
+
type: 'confirm',
|
|
28
|
+
name: 'confirm',
|
|
29
|
+
message: `Create repository "${analysis.name}"?`,
|
|
30
|
+
default: true,
|
|
31
|
+
}]);
|
|
32
|
+
if (!confirm)
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const topics = generateTopics(analysis);
|
|
36
|
+
const repo = await createRepo({
|
|
37
|
+
name: analysis.name,
|
|
38
|
+
description: analysis.description || `${analysis.languages[0] || ''} project`,
|
|
39
|
+
isPrivate: opts.private ?? false,
|
|
40
|
+
topics,
|
|
41
|
+
});
|
|
42
|
+
await addRemote(rootDir, repo.cloneUrl);
|
|
43
|
+
logger.success(`Created: ${chalk.underline(repo.htmlUrl)}`);
|
|
44
|
+
logger.info(`Topics: ${topics.join(', ')}`);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=github.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/commands/github.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,UAAU,EAAE,oBAAoB,EAAE,UAAU,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACjI,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAA6C;IAC3E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAEvC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAExB,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;QAC/E,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,oBAAoB,EAAE,CAAC;IAC1C,MAAM,CAAC,IAAI,CAAC,qBAAqB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAE3D,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAE/C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE3D,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CAAC,sBAAsB,KAAK,CAAC,SAAS,CAAC,sBAAsB,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1G,OAAO;IACT,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACzC,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,sBAAsB,QAAQ,CAAC,IAAI,IAAI;gBAChD,OAAO,EAAE,IAAI;aACd,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,OAAO;YAAE,OAAO;IACvB,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC;QAC5B,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU;QAC7E,SAAS,EAAE,IAAI,CAAC,OAAO,IAAI,KAAK;QAChC,MAAM;KACP,CAAC,CAAC;IAEH,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,CAAC,OAAO,CAAC,YAAY,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5D,MAAM,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAQA,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAiC7C"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { resolve } from 'path';
|
|
2
|
+
import { existsSync } from 'fs';
|
|
3
|
+
import inquirer from 'inquirer';
|
|
4
|
+
import { scanProject } from '../scanner/file-scanner.js';
|
|
5
|
+
import { analyzeProject } from '../scanner/project-analyzer.js';
|
|
6
|
+
import { getGitStatus, initGit, generateGitignore } from '../services/git-service.js';
|
|
7
|
+
import { logger } from '../utils/logger.js';
|
|
8
|
+
export async function cmdInit() {
|
|
9
|
+
const rootDir = resolve(process.cwd());
|
|
10
|
+
logger.header('AutoGit Init');
|
|
11
|
+
const scan = scanProject(rootDir);
|
|
12
|
+
const analysis = analyzeProject(rootDir, scan);
|
|
13
|
+
const gitStatus = await getGitStatus(rootDir);
|
|
14
|
+
if (gitStatus.isRepo) {
|
|
15
|
+
logger.info('Git repository already initialized');
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
const { confirm } = await inquirer.prompt([{
|
|
19
|
+
type: 'confirm',
|
|
20
|
+
name: 'confirm',
|
|
21
|
+
message: 'Initialize Git repository?',
|
|
22
|
+
default: true,
|
|
23
|
+
}]);
|
|
24
|
+
if (confirm) {
|
|
25
|
+
await initGit(rootDir);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// Generate .gitignore
|
|
29
|
+
if (!existsSync(resolve(rootDir, '.gitignore'))) {
|
|
30
|
+
await generateGitignore(rootDir, analysis);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
logger.info('.gitignore already exists');
|
|
34
|
+
}
|
|
35
|
+
logger.blank();
|
|
36
|
+
logger.success('Project initialized! Run "autogit" to generate docs and publish.');
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACtF,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAEvC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAE9B,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;IAE9C,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACzC,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,4BAA4B;gBACrC,OAAO,EAAE,IAAI;aACd,CAAC,CAAC,CAAC;QAEJ,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;QAChD,MAAM,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,CAAC,OAAO,CAAC,kEAAkE,CAAC,CAAC;AACrF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linkedin.d.ts","sourceRoot":"","sources":["../../src/commands/linkedin.ts"],"names":[],"mappings":"AAOA,wBAAsB,WAAW,CAAC,IAAI,EAAE;IAAE,EAAE,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CvE"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { resolve } from 'path';
|
|
2
|
+
import { scanProject } from '../scanner/file-scanner.js';
|
|
3
|
+
import { analyzeProject } from '../scanner/project-analyzer.js';
|
|
4
|
+
import { generateSocialContent } from '../services/social-generator.js';
|
|
5
|
+
import { logger } from '../utils/logger.js';
|
|
6
|
+
export async function cmdLinkedin(opts) {
|
|
7
|
+
const rootDir = resolve(process.cwd());
|
|
8
|
+
logger.header('Social Media Content');
|
|
9
|
+
const scan = scanProject(rootDir);
|
|
10
|
+
const analysis = analyzeProject(rootDir, scan);
|
|
11
|
+
const useAI = opts.ai !== false;
|
|
12
|
+
const content = await generateSocialContent(analysis, useAI);
|
|
13
|
+
// LinkedIn posts
|
|
14
|
+
logger.blank();
|
|
15
|
+
logger.header('LinkedIn Post — Short');
|
|
16
|
+
console.log(content.linkedin.short);
|
|
17
|
+
logger.blank();
|
|
18
|
+
logger.header('LinkedIn Post — Medium');
|
|
19
|
+
console.log(content.linkedin.medium);
|
|
20
|
+
logger.blank();
|
|
21
|
+
logger.header('LinkedIn Post — Long');
|
|
22
|
+
console.log(content.linkedin.long);
|
|
23
|
+
// Twitter
|
|
24
|
+
logger.blank();
|
|
25
|
+
logger.header('X (Twitter) Post');
|
|
26
|
+
console.log(content.twitter);
|
|
27
|
+
// DEV.to
|
|
28
|
+
logger.blank();
|
|
29
|
+
logger.header('DEV.to Article Draft');
|
|
30
|
+
console.log(content.devto);
|
|
31
|
+
// Resume
|
|
32
|
+
logger.blank();
|
|
33
|
+
logger.header('Resume Bullet Point');
|
|
34
|
+
console.log(content.resumeBullet);
|
|
35
|
+
// Portfolio
|
|
36
|
+
logger.blank();
|
|
37
|
+
logger.header('Portfolio Description');
|
|
38
|
+
console.log(content.portfolioDescription);
|
|
39
|
+
logger.blank();
|
|
40
|
+
logger.dimmed('Copy any version above and customize as needed.');
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=linkedin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linkedin.js","sourceRoot":"","sources":["../../src/commands/linkedin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAsB;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAEvC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAEtC,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC;IAEhC,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAE7D,iBAAiB;IACjB,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpC,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAErC,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEnC,UAAU;IACV,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE7B,SAAS;IACT,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAE3B,SAAS;IACT,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAElC,YAAY;IACZ,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAE1C,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,CAAC,MAAM,CAAC,iDAAiD,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAMA,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAqH9C"}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import inquirer from 'inquirer';
|
|
3
|
+
import { execSync } from 'child_process';
|
|
4
|
+
import { loadConfig, saveConfig } from '../config/manager.js';
|
|
5
|
+
import { logger, spinner } from '../utils/logger.js';
|
|
6
|
+
export async function cmdLogin() {
|
|
7
|
+
logger.header('GitHub Authentication');
|
|
8
|
+
// --check: diagnose where the current token comes from
|
|
9
|
+
if (process.argv.includes('--check')) {
|
|
10
|
+
await checkTokenSources();
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
// Detect bad env var upfront and guide through the fix interactively
|
|
14
|
+
const envToken = process.env.GITHUB_TOKEN || process.env.GH_TOKEN;
|
|
15
|
+
const envVarName = process.env.GITHUB_TOKEN ? 'GITHUB_TOKEN' : process.env.GH_TOKEN ? 'GH_TOKEN' : null;
|
|
16
|
+
if (envVarName && envToken) {
|
|
17
|
+
const spin = spinner(`Checking ${envVarName} env var...`).start();
|
|
18
|
+
const valid = await isTokenValid(envToken);
|
|
19
|
+
if (valid) {
|
|
20
|
+
spin.succeed(`${envVarName} is already valid — you're good to go!`);
|
|
21
|
+
const user = await getGitHubUser(envToken);
|
|
22
|
+
if (user)
|
|
23
|
+
logger.success(`Authenticated as ${chalk.bold(user)}`);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
spin.fail(`${envVarName} env var is set but rejected by GitHub (bad/expired token)`);
|
|
27
|
+
logger.blank();
|
|
28
|
+
logger.warn(`This env var overrides everything — fixing it now.`);
|
|
29
|
+
logger.blank();
|
|
30
|
+
await fixBadEnvVar(envVarName);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const ghUser = checkGhCli();
|
|
34
|
+
// If gh CLI is already authenticated, just grab the token silently — no prompt needed
|
|
35
|
+
if (ghUser) {
|
|
36
|
+
logger.info(`GitHub CLI is logged in as ${chalk.bold(ghUser)}`);
|
|
37
|
+
const spin = spinner('Importing token from GitHub CLI...').start();
|
|
38
|
+
try {
|
|
39
|
+
const token = execSync('gh auth token', {
|
|
40
|
+
encoding: 'utf-8',
|
|
41
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
42
|
+
}).trim();
|
|
43
|
+
if (!token)
|
|
44
|
+
throw new Error('gh auth token returned empty string');
|
|
45
|
+
const config = loadConfig();
|
|
46
|
+
config.github = config.github ?? {};
|
|
47
|
+
config.github.token = token;
|
|
48
|
+
saveConfig(config);
|
|
49
|
+
spin.succeed(`Token saved (***${token.slice(-4)})`);
|
|
50
|
+
await verifyToken(token);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
spin.fail(`Could not read token from GitHub CLI: ${e.message}`);
|
|
55
|
+
logger.dimmed('Falling back to manual entry...');
|
|
56
|
+
logger.blank();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const { method } = await inquirer.prompt([{
|
|
60
|
+
type: 'list',
|
|
61
|
+
name: 'method',
|
|
62
|
+
message: 'How would you like to authenticate?',
|
|
63
|
+
choices: [
|
|
64
|
+
{ name: 'Personal Access Token (classic or fine-grained)', value: 'pat' },
|
|
65
|
+
{ name: 'Show environment variable instructions', value: 'env' },
|
|
66
|
+
],
|
|
67
|
+
}]);
|
|
68
|
+
if (method === 'pat') {
|
|
69
|
+
logger.blank();
|
|
70
|
+
logger.info('Create a token at:');
|
|
71
|
+
logger.dimmed(' Classic token (easiest): https://github.com/settings/tokens/new');
|
|
72
|
+
logger.dimmed(' Required scopes: repo, read:user');
|
|
73
|
+
logger.blank();
|
|
74
|
+
const { raw } = await inquirer.prompt([{
|
|
75
|
+
type: 'input',
|
|
76
|
+
name: 'raw',
|
|
77
|
+
message: 'Paste your GitHub token:',
|
|
78
|
+
validate: (v) => v.trim().length > 0 || 'Token cannot be empty',
|
|
79
|
+
}]);
|
|
80
|
+
// Sanitize — strip invisible chars + trim
|
|
81
|
+
const token = sanitize(raw);
|
|
82
|
+
if (!token) {
|
|
83
|
+
logger.error('Token was empty after sanitizing');
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const config = loadConfig();
|
|
87
|
+
config.github = config.github ?? {};
|
|
88
|
+
config.github.token = token;
|
|
89
|
+
saveConfig(config);
|
|
90
|
+
logger.dimmed(`Saved token (***${token.slice(-4)})`);
|
|
91
|
+
await verifyToken(token);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
// env instructions
|
|
95
|
+
logger.blank();
|
|
96
|
+
logger.header('Set GITHUB_TOKEN in your shell');
|
|
97
|
+
logger.blank();
|
|
98
|
+
console.log(chalk.bold('PowerShell:'));
|
|
99
|
+
console.log(chalk.cyan(' $env:GITHUB_TOKEN = "github_pat_YOUR_TOKEN_HERE"'));
|
|
100
|
+
logger.blank();
|
|
101
|
+
console.log(chalk.bold('CMD:'));
|
|
102
|
+
console.log(chalk.cyan(' set GITHUB_TOKEN=github_pat_YOUR_TOKEN_HERE'));
|
|
103
|
+
logger.blank();
|
|
104
|
+
console.log(chalk.bold('Bash / Zsh:'));
|
|
105
|
+
console.log(chalk.cyan(' export GITHUB_TOKEN="github_pat_YOUR_TOKEN_HERE"'));
|
|
106
|
+
logger.blank();
|
|
107
|
+
logger.dimmed('AutoGit checks GITHUB_TOKEN and GH_TOKEN automatically.');
|
|
108
|
+
if (process.env.GITHUB_TOKEN) {
|
|
109
|
+
logger.success('GITHUB_TOKEN is already set in the current environment');
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
logger.warn('GITHUB_TOKEN is not set in the current environment');
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
116
|
+
async function fixBadEnvVar(envVarName) {
|
|
117
|
+
logger.info('Step 1 of 2 — Get a valid GitHub token');
|
|
118
|
+
logger.blank();
|
|
119
|
+
logger.dimmed('Create one at: https://github.com/settings/tokens/new');
|
|
120
|
+
logger.dimmed('Required scopes: repo, read:user');
|
|
121
|
+
logger.blank();
|
|
122
|
+
let token = '';
|
|
123
|
+
while (true) {
|
|
124
|
+
const { raw } = await inquirer.prompt([{
|
|
125
|
+
type: 'input',
|
|
126
|
+
name: 'raw',
|
|
127
|
+
message: 'Paste your new GitHub token:',
|
|
128
|
+
validate: (v) => v.trim().length > 0 || 'Cannot be empty',
|
|
129
|
+
}]);
|
|
130
|
+
token = sanitize(raw);
|
|
131
|
+
const spin = spinner('Verifying...').start();
|
|
132
|
+
const valid = await isTokenValid(token);
|
|
133
|
+
if (valid) {
|
|
134
|
+
const user = await getGitHubUser(token);
|
|
135
|
+
spin.succeed(`Valid! Authenticated as ${chalk.bold(user ?? 'unknown')}`);
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
spin.fail('GitHub still rejected that token. Check the token and try again.');
|
|
139
|
+
}
|
|
140
|
+
// Save to config file
|
|
141
|
+
const config = loadConfig();
|
|
142
|
+
config.github = config.github ?? {};
|
|
143
|
+
config.github.token = token;
|
|
144
|
+
saveConfig(config);
|
|
145
|
+
logger.success('Token saved to ~/.autogit/config.json');
|
|
146
|
+
logger.blank();
|
|
147
|
+
// Step 2 — Fix the env var in the current process AND print commands
|
|
148
|
+
logger.info('Step 2 of 2 — Fix the environment variable');
|
|
149
|
+
logger.blank();
|
|
150
|
+
logger.dimmed(`${envVarName} is still set to the bad value in your shell.`);
|
|
151
|
+
logger.dimmed('Run ONE of these in your terminal right now:');
|
|
152
|
+
logger.blank();
|
|
153
|
+
console.log(chalk.bold(' PowerShell:'));
|
|
154
|
+
console.log(chalk.cyan(` $env:${envVarName} = "${token}"`));
|
|
155
|
+
logger.blank();
|
|
156
|
+
console.log(chalk.bold(' CMD:'));
|
|
157
|
+
console.log(chalk.cyan(` set ${envVarName}=${token}`));
|
|
158
|
+
logger.blank();
|
|
159
|
+
logger.dimmed('Or to permanently remove it from Windows:');
|
|
160
|
+
console.log(chalk.cyan(` [System.Environment]::SetEnvironmentVariable("${envVarName}", $null, "User")`));
|
|
161
|
+
logger.blank();
|
|
162
|
+
logger.success('After running that command, autogit will work in all future terminals.');
|
|
163
|
+
}
|
|
164
|
+
async function checkTokenSources() {
|
|
165
|
+
logger.header('Token source diagnosis');
|
|
166
|
+
logger.blank();
|
|
167
|
+
const sources = [
|
|
168
|
+
{ label: 'GITHUB_TOKEN env var', token: process.env.GITHUB_TOKEN, source: 'env' },
|
|
169
|
+
{ label: 'GH_TOKEN env var', token: process.env.GH_TOKEN, source: 'env' },
|
|
170
|
+
{ label: '~/.autogit/config.json', token: loadConfig().github?.token, source: 'file' },
|
|
171
|
+
];
|
|
172
|
+
let activeToken;
|
|
173
|
+
let activeLabel = '';
|
|
174
|
+
for (const s of sources) {
|
|
175
|
+
if (s.token) {
|
|
176
|
+
const preview = s.token.length > 8
|
|
177
|
+
? `${s.token.slice(0, 4)}***${s.token.slice(-4)}`
|
|
178
|
+
: '(too short)';
|
|
179
|
+
const isActive = !activeToken;
|
|
180
|
+
const marker = isActive ? chalk.cyan(' ← ACTIVE (this is what AutoGit uses)') : '';
|
|
181
|
+
console.log(` ${chalk.green('✔')} ${s.label.padEnd(26)} ${chalk.dim(`[${s.token.length} chars]`)} ${preview}${marker}`);
|
|
182
|
+
if (isActive) {
|
|
183
|
+
activeToken = s.token;
|
|
184
|
+
activeLabel = s.label;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
console.log(` ${chalk.gray('○')} ${s.label.padEnd(26)} ${chalk.gray('(not set)')}`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
logger.blank();
|
|
192
|
+
if (!activeToken) {
|
|
193
|
+
logger.warn('No GitHub token found anywhere. Run "autogit login" to set one.');
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
logger.info(`Active token source: ${chalk.bold(activeLabel)}`);
|
|
197
|
+
logger.blank();
|
|
198
|
+
// Verify the active token
|
|
199
|
+
await verifyToken(activeToken);
|
|
200
|
+
// If the active token is an env var and it's bad, tell the user exactly how to fix it
|
|
201
|
+
if (activeLabel.includes('env')) {
|
|
202
|
+
logger.blank();
|
|
203
|
+
logger.warn(`The bad token is coming from the ${chalk.bold(activeLabel)} environment variable.`);
|
|
204
|
+
logger.dimmed('Even if you run "autogit login", the env var will override it.');
|
|
205
|
+
logger.blank();
|
|
206
|
+
logger.info('To fix — unset the bad env var in your current terminal:');
|
|
207
|
+
logger.blank();
|
|
208
|
+
console.log(chalk.bold(' PowerShell:'));
|
|
209
|
+
console.log(chalk.cyan(' Remove-Item Env:GITHUB_TOKEN'));
|
|
210
|
+
logger.blank();
|
|
211
|
+
console.log(chalk.bold(' CMD:'));
|
|
212
|
+
console.log(chalk.cyan(' set GITHUB_TOKEN='));
|
|
213
|
+
logger.blank();
|
|
214
|
+
logger.dimmed('Then run "autogit login" to save a fresh token.');
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
async function verifyToken(token) {
|
|
218
|
+
const spin = spinner('Verifying with GitHub...').start();
|
|
219
|
+
const res = await rawGitHubFetch(token);
|
|
220
|
+
if (res.ok) {
|
|
221
|
+
const user = (await res.json());
|
|
222
|
+
spin.succeed(`Authenticated as ${chalk.bold(user.login)} ✔`);
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
const body = (await res.json());
|
|
226
|
+
spin.fail(`GitHub rejected the token (HTTP ${res.status})`);
|
|
227
|
+
logger.blank();
|
|
228
|
+
if (res.status === 401) {
|
|
229
|
+
logger.warn('401 Bad credentials — common causes:');
|
|
230
|
+
logger.dimmed(' • Token was copied incorrectly (missing chars, extra spaces)');
|
|
231
|
+
logger.dimmed(' • Token has been revoked or expired');
|
|
232
|
+
logger.dimmed(' • Token is a fine-grained token missing "repo" permission');
|
|
233
|
+
logger.blank();
|
|
234
|
+
logger.dimmed('Fix:');
|
|
235
|
+
logger.dimmed(' 1. Go to https://github.com/settings/tokens');
|
|
236
|
+
logger.dimmed(' 2. Delete the old token and create a new one');
|
|
237
|
+
logger.dimmed(' 3. Scopes needed: repo, read:user');
|
|
238
|
+
logger.dimmed(' 4. Run "autogit login" again and paste the new token');
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
logger.warn(`GitHub error: ${body?.message ?? res.statusText}`);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
async function isTokenValid(token) {
|
|
245
|
+
try {
|
|
246
|
+
const res = await rawGitHubFetch(token);
|
|
247
|
+
return res.ok;
|
|
248
|
+
}
|
|
249
|
+
catch {
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
async function getGitHubUser(token) {
|
|
254
|
+
try {
|
|
255
|
+
const res = await rawGitHubFetch(token);
|
|
256
|
+
if (!res.ok)
|
|
257
|
+
return null;
|
|
258
|
+
const data = (await res.json());
|
|
259
|
+
return data.login ?? null;
|
|
260
|
+
}
|
|
261
|
+
catch {
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
async function rawGitHubFetch(token) {
|
|
266
|
+
return fetch('https://api.github.com/user', {
|
|
267
|
+
headers: {
|
|
268
|
+
Authorization: `Bearer ${token}`,
|
|
269
|
+
'User-Agent': 'autogit-cli',
|
|
270
|
+
},
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
function checkGhCli() {
|
|
274
|
+
try {
|
|
275
|
+
// Try the most reliable method first
|
|
276
|
+
const login = execSync('gh api user --jq .login', {
|
|
277
|
+
encoding: 'utf-8',
|
|
278
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
279
|
+
}).trim();
|
|
280
|
+
return login || null;
|
|
281
|
+
}
|
|
282
|
+
catch {
|
|
283
|
+
try {
|
|
284
|
+
const status = execSync('gh auth status', {
|
|
285
|
+
encoding: 'utf-8',
|
|
286
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
287
|
+
});
|
|
288
|
+
const match = status.match(/Logged in to github\.com(?:\s+as\s+account\s+|\s+account\s+)(\S+)/);
|
|
289
|
+
return match?.[1] ?? null;
|
|
290
|
+
}
|
|
291
|
+
catch {
|
|
292
|
+
return null;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
function sanitize(raw) {
|
|
297
|
+
return raw
|
|
298
|
+
.replace(/[\u0000-\u001F\u007F-\u009F\u200B-\u200D\uFEFF]/g, '')
|
|
299
|
+
.trim();
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"AASA,wBAAsB,UAAU,CAAC,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyD1F"}
|
|
@@ -0,0 +1,58 @@
|
|
|
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 { getGitStatus, stageAll, generateCommitMessage, commit, push, addRemote } from '../services/git-service.js';
|
|
7
|
+
import { createRepo, getAuthenticatedUser, repoExists, generateTopics, isGitHubConfigured } from '../services/github-service.js';
|
|
8
|
+
import { logger, spinner } from '../utils/logger.js';
|
|
9
|
+
export async function cmdPublish(opts) {
|
|
10
|
+
const rootDir = resolve(process.cwd());
|
|
11
|
+
logger.header('Publish to GitHub');
|
|
12
|
+
const scan = scanProject(rootDir);
|
|
13
|
+
const analysis = analyzeProject(rootDir, scan);
|
|
14
|
+
const status = await getGitStatus(rootDir);
|
|
15
|
+
if (!status.isRepo) {
|
|
16
|
+
logger.error('Not a Git repository. Run "autogit init" first.');
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
// Stage and commit
|
|
20
|
+
await stageAll(rootDir);
|
|
21
|
+
const commitMsg = await generateCommitMessage(rootDir, true);
|
|
22
|
+
if (!opts.yes) {
|
|
23
|
+
const { confirm } = await inquirer.prompt([{
|
|
24
|
+
type: 'confirm',
|
|
25
|
+
name: 'confirm',
|
|
26
|
+
message: `Commit with message: "${commitMsg}"?`,
|
|
27
|
+
default: true,
|
|
28
|
+
}]);
|
|
29
|
+
if (!confirm)
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
await commit(rootDir, commitMsg);
|
|
33
|
+
logger.success(`Committed: ${commitMsg}`);
|
|
34
|
+
// GitHub
|
|
35
|
+
if (!isGitHubConfigured()) {
|
|
36
|
+
logger.warn('GitHub not configured. Run "autogit login"');
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const user = await getAuthenticatedUser();
|
|
40
|
+
if (!status.hasRemote) {
|
|
41
|
+
const exists = await repoExists(user.login, analysis.name);
|
|
42
|
+
if (!exists) {
|
|
43
|
+
const topics = generateTopics(analysis);
|
|
44
|
+
const repo = await createRepo({
|
|
45
|
+
name: analysis.name,
|
|
46
|
+
description: analysis.description || '',
|
|
47
|
+
isPrivate: opts.private ?? false,
|
|
48
|
+
topics,
|
|
49
|
+
});
|
|
50
|
+
await addRemote(rootDir, repo.cloneUrl);
|
|
51
|
+
logger.success(`Created: ${chalk.underline(repo.htmlUrl)}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const pushSpin = spinner('Pushing...').start();
|
|
55
|
+
await push(rootDir);
|
|
56
|
+
pushSpin.succeed('Pushed to GitHub');
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=publish.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readme.d.ts","sourceRoot":"","sources":["../../src/commands/readme.ts"],"names":[],"mappings":"AAOA,wBAAsB,SAAS,CAAC,IAAI,EAAE;IAAE,EAAE,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B3F"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { resolve } from 'path';
|
|
2
|
+
import inquirer from 'inquirer';
|
|
3
|
+
import { scanProject } from '../scanner/file-scanner.js';
|
|
4
|
+
import { analyzeProject } from '../scanner/project-analyzer.js';
|
|
5
|
+
import { generateReadme, writeReadme, displayDiff } from '../services/readme-manager.js';
|
|
6
|
+
import { logger } from '../utils/logger.js';
|
|
7
|
+
export async function cmdReadme(opts) {
|
|
8
|
+
const rootDir = resolve(process.cwd());
|
|
9
|
+
logger.header('README Generator');
|
|
10
|
+
const scan = scanProject(rootDir);
|
|
11
|
+
const analysis = analyzeProject(rootDir, scan);
|
|
12
|
+
const useAI = opts.ai !== false;
|
|
13
|
+
const result = await generateReadme(rootDir, analysis, useAI);
|
|
14
|
+
if (result.diff) {
|
|
15
|
+
logger.blank();
|
|
16
|
+
displayDiff(result.diff);
|
|
17
|
+
logger.blank();
|
|
18
|
+
const { confirm } = await inquirer.prompt([{
|
|
19
|
+
type: 'confirm',
|
|
20
|
+
name: 'confirm',
|
|
21
|
+
message: 'Apply changes?',
|
|
22
|
+
default: true,
|
|
23
|
+
}]);
|
|
24
|
+
if (!confirm) {
|
|
25
|
+
logger.dimmed('Cancelled');
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
writeReadme(result);
|
|
30
|
+
logger.success(result.isNew ? 'README.md created' : 'README.md updated');
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=readme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readme.js","sourceRoot":"","sources":["../../src/commands/readme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAA4C;IAC1E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAEvC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAElC,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC;IAEhC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAE9D,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,CAAC,KAAK,EAAE,CAAC;QAEf,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACzC,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,gBAAgB;gBACzB,OAAO,EAAE,IAAI;aACd,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;IACH,CAAC;IAED,WAAW,CAAC,MAAM,CAAC,CAAC;IACpB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;AAC3E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../../src/commands/release.ts"],"names":[],"mappings":"AAQA,wBAAsB,UAAU,CAAC,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwDvF"}
|