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,172 @@
|
|
|
1
|
+
import { existsSync, writeFileSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { getProvider } from '../ai/provider.js';
|
|
4
|
+
import { projectSummaryPrompt, architectureDocPrompt } from '../ai/prompts.js';
|
|
5
|
+
import { spinner } from '../utils/logger.js';
|
|
6
|
+
export async function generateDocs(rootDir, analysis, scan, useAI, regenerate = false) {
|
|
7
|
+
const docs = [];
|
|
8
|
+
// PROJECT_SUMMARY.md
|
|
9
|
+
const summaryPath = join(rootDir, 'PROJECT_SUMMARY.md');
|
|
10
|
+
if (!existsSync(summaryPath) || regenerate) {
|
|
11
|
+
const content = useAI
|
|
12
|
+
? await generateWithAI('project summary', projectSummaryPrompt(analysis))
|
|
13
|
+
: generateTemplateSummary(analysis);
|
|
14
|
+
if (content) {
|
|
15
|
+
docs.push({ name: 'PROJECT_SUMMARY.md', path: summaryPath, content, exists: existsSync(summaryPath) });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
// ARCHITECTURE.md
|
|
19
|
+
const archPath = join(rootDir, 'ARCHITECTURE.md');
|
|
20
|
+
if (!existsSync(archPath) || regenerate) {
|
|
21
|
+
const folderStructure = buildFolderStructure(scan);
|
|
22
|
+
const content = useAI
|
|
23
|
+
? await generateWithAI('architecture doc', architectureDocPrompt(analysis, folderStructure))
|
|
24
|
+
: generateTemplateArchitecture(analysis, folderStructure);
|
|
25
|
+
if (content) {
|
|
26
|
+
docs.push({ name: 'ARCHITECTURE.md', path: archPath, content, exists: existsSync(archPath) });
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// CONTRIBUTING.md
|
|
30
|
+
const contribPath = join(rootDir, 'CONTRIBUTING.md');
|
|
31
|
+
if (!existsSync(contribPath) || regenerate) {
|
|
32
|
+
const content = generateContributing(analysis);
|
|
33
|
+
docs.push({ name: 'CONTRIBUTING.md', path: contribPath, content, exists: existsSync(contribPath) });
|
|
34
|
+
}
|
|
35
|
+
return docs;
|
|
36
|
+
}
|
|
37
|
+
export function writeDocs(docs) {
|
|
38
|
+
for (const doc of docs) {
|
|
39
|
+
writeFileSync(doc.path, doc.content, 'utf-8');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async function generateWithAI(docType, prompt) {
|
|
43
|
+
const spin = spinner(`Generating ${docType} with AI...`).start();
|
|
44
|
+
try {
|
|
45
|
+
const provider = getProvider();
|
|
46
|
+
const messages = [
|
|
47
|
+
{ role: 'system', content: 'You are a technical documentation expert. Generate clean, professional Markdown documentation.' },
|
|
48
|
+
{ role: 'user', content: prompt },
|
|
49
|
+
];
|
|
50
|
+
const response = await provider.generate(messages, { temperature: 0.5 });
|
|
51
|
+
let content = response.content.trim();
|
|
52
|
+
// Strip markdown fencing
|
|
53
|
+
if (content.startsWith('```markdown') || content.startsWith('```md')) {
|
|
54
|
+
content = content.replace(/^```(?:markdown|md)\n?/, '').replace(/\n?```$/, '');
|
|
55
|
+
}
|
|
56
|
+
else if (content.startsWith('```')) {
|
|
57
|
+
content = content.slice(3).replace(/\n?```$/, '');
|
|
58
|
+
}
|
|
59
|
+
spin.succeed(`${docType} generated`);
|
|
60
|
+
return content.trim();
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
spin.fail(`Failed to generate ${docType}: ${error.message}`);
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function buildFolderStructure(scan, maxDepth = 3) {
|
|
68
|
+
const lines = [];
|
|
69
|
+
const topDirs = scan.directories.filter(d => !d.includes('/') || d.split('/').length <= maxDepth);
|
|
70
|
+
for (const dir of topDirs.slice(0, 30)) {
|
|
71
|
+
const depth = dir.split('/').length - 1;
|
|
72
|
+
const indent = ' '.repeat(depth);
|
|
73
|
+
const name = dir.split('/').pop() || dir;
|
|
74
|
+
lines.push(`${indent}├── ${name}/`);
|
|
75
|
+
}
|
|
76
|
+
return lines.join('\n') || 'No directories detected';
|
|
77
|
+
}
|
|
78
|
+
function generateTemplateSummary(analysis) {
|
|
79
|
+
return `# Project Summary
|
|
80
|
+
|
|
81
|
+
## Overview
|
|
82
|
+
|
|
83
|
+
${analysis.name} is a ${analysis.languages[0] || 'software'} project${analysis.frameworks.length ? ` built with ${analysis.frameworks.join(', ')}` : ''}.
|
|
84
|
+
|
|
85
|
+
${analysis.description || ''}
|
|
86
|
+
|
|
87
|
+
## Key Technologies
|
|
88
|
+
|
|
89
|
+
${[...analysis.languages, ...analysis.frameworks, ...analysis.libraries].map(t => `- ${t}`).join('\n')}
|
|
90
|
+
|
|
91
|
+
## Architecture
|
|
92
|
+
|
|
93
|
+
${analysis.architecture}
|
|
94
|
+
|
|
95
|
+
## Build & Development
|
|
96
|
+
|
|
97
|
+
- **Package Manager:** ${analysis.packageManager || 'N/A'}
|
|
98
|
+
- **Build System:** ${analysis.buildSystem || 'N/A'}
|
|
99
|
+
- **Test Framework:** ${analysis.testFramework || 'N/A'}
|
|
100
|
+
|
|
101
|
+
${analysis.deployment.length ? `## Deployment\n\n${analysis.deployment.map(d => `- ${d}`).join('\n')}` : ''}
|
|
102
|
+
`;
|
|
103
|
+
}
|
|
104
|
+
function generateTemplateArchitecture(analysis, folderStructure) {
|
|
105
|
+
return `# Architecture
|
|
106
|
+
|
|
107
|
+
## Overview
|
|
108
|
+
|
|
109
|
+
This document describes the high-level architecture of ${analysis.name}.
|
|
110
|
+
|
|
111
|
+
## Project Structure
|
|
112
|
+
|
|
113
|
+
\`\`\`
|
|
114
|
+
${folderStructure}
|
|
115
|
+
\`\`\`
|
|
116
|
+
|
|
117
|
+
## Technology Stack
|
|
118
|
+
|
|
119
|
+
| Layer | Technology |
|
|
120
|
+
|-------|-----------|
|
|
121
|
+
${analysis.languages.length ? `| Language | ${analysis.languages.join(', ')} |` : ''}
|
|
122
|
+
${analysis.frameworks.length ? `| Framework | ${analysis.frameworks.join(', ')} |` : ''}
|
|
123
|
+
${analysis.database.length ? `| Database | ${analysis.database.join(', ')} |` : ''}
|
|
124
|
+
${analysis.deployment.length ? `| Deployment | ${analysis.deployment.join(', ')} |` : ''}
|
|
125
|
+
|
|
126
|
+
## Architecture Pattern
|
|
127
|
+
|
|
128
|
+
${analysis.architecture}
|
|
129
|
+
|
|
130
|
+
## Data Flow
|
|
131
|
+
|
|
132
|
+
*Document your application's data flow here.*
|
|
133
|
+
`;
|
|
134
|
+
}
|
|
135
|
+
function generateContributing(analysis) {
|
|
136
|
+
const pm = analysis.packageManager || 'npm';
|
|
137
|
+
const installCmd = pm === 'yarn' ? 'yarn' : pm === 'pnpm' ? 'pnpm install' : `${pm} install`;
|
|
138
|
+
return `# Contributing
|
|
139
|
+
|
|
140
|
+
Thank you for your interest in contributing to ${analysis.name}!
|
|
141
|
+
|
|
142
|
+
## Getting Started
|
|
143
|
+
|
|
144
|
+
1. Fork the repository
|
|
145
|
+
2. Clone your fork: \`git clone https://github.com/YOUR_USERNAME/${analysis.name}.git\`
|
|
146
|
+
3. Create a branch: \`git checkout -b feature/your-feature\`
|
|
147
|
+
4. Install dependencies: \`${installCmd}\`
|
|
148
|
+
5. Make your changes
|
|
149
|
+
6. Run tests${analysis.testFramework ? ` (\`${pm === 'yarn' ? 'yarn test' : `${pm} test`}\`)` : ''}
|
|
150
|
+
7. Commit your changes following [Conventional Commits](https://www.conventionalcommits.org/)
|
|
151
|
+
8. Push to your fork: \`git push origin feature/your-feature\`
|
|
152
|
+
9. Open a Pull Request
|
|
153
|
+
|
|
154
|
+
## Code Style
|
|
155
|
+
|
|
156
|
+
- Follow the existing code style and conventions
|
|
157
|
+
- Write meaningful commit messages
|
|
158
|
+
- Add tests for new features
|
|
159
|
+
- Update documentation when needed
|
|
160
|
+
|
|
161
|
+
## Reporting Issues
|
|
162
|
+
|
|
163
|
+
- Use GitHub Issues to report bugs
|
|
164
|
+
- Include reproduction steps
|
|
165
|
+
- Provide environment details
|
|
166
|
+
|
|
167
|
+
## License
|
|
168
|
+
|
|
169
|
+
By contributing, you agree that your contributions will be licensed under the project's ${analysis.license || 'existing'} license.
|
|
170
|
+
`;
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=docs-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs-generator.js","sourceRoot":"","sources":["../../src/services/docs-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ProjectAnalysis } from '../scanner/project-analyzer.js';
|
|
2
|
+
export interface GitStatus {
|
|
3
|
+
isRepo: boolean;
|
|
4
|
+
branch: string;
|
|
5
|
+
hasRemote: boolean;
|
|
6
|
+
remoteUrl: string | null;
|
|
7
|
+
isDirty: boolean;
|
|
8
|
+
staged: string[];
|
|
9
|
+
unstaged: string[];
|
|
10
|
+
untracked: string[];
|
|
11
|
+
}
|
|
12
|
+
export declare function getGitStatus(rootDir: string): Promise<GitStatus>;
|
|
13
|
+
export declare function initGit(rootDir: string): Promise<void>;
|
|
14
|
+
export declare function generateGitignore(rootDir: string, analysis: ProjectAnalysis): Promise<void>;
|
|
15
|
+
export declare function stageAll(rootDir: string): Promise<void>;
|
|
16
|
+
export declare function stageFiles(rootDir: string, files: string[]): Promise<void>;
|
|
17
|
+
export declare function generateCommitMessage(rootDir: string, useAI: boolean): Promise<string>;
|
|
18
|
+
export declare function commit(rootDir: string, message: string): Promise<void>;
|
|
19
|
+
export declare function push(rootDir: string, branch?: string): Promise<void>;
|
|
20
|
+
export declare function addRemote(rootDir: string, url: string): Promise<void>;
|
|
21
|
+
export declare function getCurrentBranch(rootDir: string): Promise<string>;
|
|
22
|
+
//# sourceMappingURL=git-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-service.d.ts","sourceRoot":"","sources":["../../src/services/git-service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAKtE,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CA4CtE;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI5D;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAyDjG;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG7D;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhF;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAsC5F;AAED,wBAAsB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5E;AAED,wBAAsB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAe1E;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS3E;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAIvE"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import simpleGit from 'simple-git';
|
|
2
|
+
import { existsSync, writeFileSync } from 'fs';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { getProvider } from '../ai/provider.js';
|
|
5
|
+
import { commitMessagePrompt } from '../ai/prompts.js';
|
|
6
|
+
import { logger } from '../utils/logger.js';
|
|
7
|
+
export async function getGitStatus(rootDir) {
|
|
8
|
+
const git = simpleGit(rootDir);
|
|
9
|
+
try {
|
|
10
|
+
const isRepo = await git.checkIsRepo();
|
|
11
|
+
if (!isRepo) {
|
|
12
|
+
return {
|
|
13
|
+
isRepo: false,
|
|
14
|
+
branch: '',
|
|
15
|
+
hasRemote: false,
|
|
16
|
+
remoteUrl: null,
|
|
17
|
+
isDirty: false,
|
|
18
|
+
staged: [],
|
|
19
|
+
unstaged: [],
|
|
20
|
+
untracked: [],
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
const status = await git.status();
|
|
24
|
+
const remotes = await git.getRemotes(true);
|
|
25
|
+
const origin = remotes.find(r => r.name === 'origin');
|
|
26
|
+
return {
|
|
27
|
+
isRepo: true,
|
|
28
|
+
branch: status.current || 'main',
|
|
29
|
+
hasRemote: !!origin,
|
|
30
|
+
remoteUrl: origin?.refs?.push || null,
|
|
31
|
+
isDirty: !status.isClean(),
|
|
32
|
+
staged: status.staged,
|
|
33
|
+
unstaged: status.modified,
|
|
34
|
+
untracked: status.not_added,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return {
|
|
39
|
+
isRepo: false,
|
|
40
|
+
branch: '',
|
|
41
|
+
hasRemote: false,
|
|
42
|
+
remoteUrl: null,
|
|
43
|
+
isDirty: false,
|
|
44
|
+
staged: [],
|
|
45
|
+
unstaged: [],
|
|
46
|
+
untracked: [],
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export async function initGit(rootDir) {
|
|
51
|
+
const git = simpleGit(rootDir);
|
|
52
|
+
await git.init();
|
|
53
|
+
logger.success('Initialized Git repository');
|
|
54
|
+
}
|
|
55
|
+
export async function generateGitignore(rootDir, analysis) {
|
|
56
|
+
const gitignorePath = join(rootDir, '.gitignore');
|
|
57
|
+
if (existsSync(gitignorePath))
|
|
58
|
+
return;
|
|
59
|
+
const entries = [
|
|
60
|
+
'# Dependencies',
|
|
61
|
+
];
|
|
62
|
+
if (analysis.packageManager === 'npm' || analysis.packageManager === 'yarn' || analysis.packageManager === 'pnpm' || analysis.packageManager === 'bun') {
|
|
63
|
+
entries.push('node_modules/');
|
|
64
|
+
}
|
|
65
|
+
if (analysis.languages.includes('Python')) {
|
|
66
|
+
entries.push('__pycache__/', '*.pyc', '.venv/', 'venv/');
|
|
67
|
+
}
|
|
68
|
+
if (analysis.languages.includes('Rust')) {
|
|
69
|
+
entries.push('target/');
|
|
70
|
+
}
|
|
71
|
+
if (analysis.languages.includes('Go')) {
|
|
72
|
+
entries.push('vendor/');
|
|
73
|
+
}
|
|
74
|
+
if (analysis.languages.includes('Java') || analysis.languages.includes('Kotlin')) {
|
|
75
|
+
entries.push('build/', '.gradle/', '*.class');
|
|
76
|
+
}
|
|
77
|
+
if (analysis.languages.includes('C#')) {
|
|
78
|
+
entries.push('bin/', 'obj/', '*.user', '*.suo');
|
|
79
|
+
}
|
|
80
|
+
entries.push('', '# Build output', 'dist/', 'build/', 'out/', '', '# Environment', '.env', '.env.local', '.env.*.local', '', '# IDE', '.idea/', '.vscode/', '*.swp', '*.swo', '.DS_Store', 'Thumbs.db', '', '# Testing', 'coverage/', '', '# Logs', '*.log', 'npm-debug.log*');
|
|
81
|
+
writeFileSync(gitignorePath, entries.join('\n') + '\n', 'utf-8');
|
|
82
|
+
logger.success('Generated .gitignore');
|
|
83
|
+
}
|
|
84
|
+
export async function stageAll(rootDir) {
|
|
85
|
+
const git = simpleGit(rootDir);
|
|
86
|
+
await git.add('.');
|
|
87
|
+
}
|
|
88
|
+
export async function stageFiles(rootDir, files) {
|
|
89
|
+
const git = simpleGit(rootDir);
|
|
90
|
+
await git.add(files);
|
|
91
|
+
}
|
|
92
|
+
export async function generateCommitMessage(rootDir, useAI) {
|
|
93
|
+
const git = simpleGit(rootDir);
|
|
94
|
+
// Get diff summary for commit message
|
|
95
|
+
const diff = await git.diff(['--cached', '--stat']);
|
|
96
|
+
if (!diff) {
|
|
97
|
+
return 'docs: update project documentation';
|
|
98
|
+
}
|
|
99
|
+
if (!useAI) {
|
|
100
|
+
// Generate a simple conventional commit
|
|
101
|
+
if (diff.includes('README'))
|
|
102
|
+
return 'docs: update README';
|
|
103
|
+
if (diff.includes('package.json'))
|
|
104
|
+
return 'chore: update dependencies';
|
|
105
|
+
return 'docs: update project documentation';
|
|
106
|
+
}
|
|
107
|
+
try {
|
|
108
|
+
const provider = getProvider();
|
|
109
|
+
const prompt = commitMessagePrompt(diff);
|
|
110
|
+
const messages = [
|
|
111
|
+
{ role: 'system', content: 'You generate concise, conventional git commit messages.' },
|
|
112
|
+
{ role: 'user', content: prompt },
|
|
113
|
+
];
|
|
114
|
+
const response = await provider.generate(messages, { temperature: 0.3, maxTokens: 100 });
|
|
115
|
+
let msg = response.content.trim();
|
|
116
|
+
// Clean up any quotes or backticks
|
|
117
|
+
msg = msg.replace(/^["'`]+|["'`]+$/g, '');
|
|
118
|
+
// Take only first line
|
|
119
|
+
msg = msg.split('\n')[0].trim();
|
|
120
|
+
return msg || 'docs: update project documentation';
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
return 'docs: update project documentation';
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
export async function commit(rootDir, message) {
|
|
127
|
+
const git = simpleGit(rootDir);
|
|
128
|
+
await git.commit(message);
|
|
129
|
+
}
|
|
130
|
+
export async function push(rootDir, branch) {
|
|
131
|
+
const git = simpleGit(rootDir);
|
|
132
|
+
const status = await git.status();
|
|
133
|
+
const currentBranch = branch || status.current || 'main';
|
|
134
|
+
try {
|
|
135
|
+
await git.push('origin', currentBranch, ['--set-upstream']);
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
// If push fails, it might be because branch doesn't exist on remote
|
|
139
|
+
if (error.message?.includes('has no upstream')) {
|
|
140
|
+
await git.push(['--set-upstream', 'origin', currentBranch]);
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
throw error;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
export async function addRemote(rootDir, url) {
|
|
148
|
+
const git = simpleGit(rootDir);
|
|
149
|
+
const remotes = await git.getRemotes();
|
|
150
|
+
if (remotes.some(r => r.name === 'origin')) {
|
|
151
|
+
await git.remote(['set-url', 'origin', url]);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
await git.addRemote('origin', url);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
export async function getCurrentBranch(rootDir) {
|
|
158
|
+
const git = simpleGit(rootDir);
|
|
159
|
+
const status = await git.status();
|
|
160
|
+
return status.current || 'main';
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=git-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-service.js","sourceRoot":"","sources":["../../src/services/git-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export interface RepoInfo {
|
|
2
|
+
name: string;
|
|
3
|
+
fullName: string;
|
|
4
|
+
description: string;
|
|
5
|
+
url: string;
|
|
6
|
+
htmlUrl: string;
|
|
7
|
+
cloneUrl: string;
|
|
8
|
+
sshUrl: string;
|
|
9
|
+
private: boolean;
|
|
10
|
+
defaultBranch: string;
|
|
11
|
+
}
|
|
12
|
+
export interface CreateRepoOptions {
|
|
13
|
+
name: string;
|
|
14
|
+
description?: string;
|
|
15
|
+
isPrivate?: boolean;
|
|
16
|
+
topics?: string[];
|
|
17
|
+
homepage?: string;
|
|
18
|
+
}
|
|
19
|
+
/** Call this after saving a new token so the cached instance is replaced. */
|
|
20
|
+
export declare function resetOctokitCache(): void;
|
|
21
|
+
export declare function getAuthenticatedUser(): Promise<{
|
|
22
|
+
login: string;
|
|
23
|
+
name: string | null;
|
|
24
|
+
}>;
|
|
25
|
+
export declare function repoExists(owner: string, repo: string): Promise<boolean>;
|
|
26
|
+
export declare function createRepo(options: CreateRepoOptions): Promise<RepoInfo>;
|
|
27
|
+
export declare function getRepo(owner: string, repo: string): Promise<RepoInfo>;
|
|
28
|
+
export declare function updateRepo(owner: string, repo: string, updates: {
|
|
29
|
+
description?: string;
|
|
30
|
+
homepage?: string;
|
|
31
|
+
topics?: string[];
|
|
32
|
+
}): Promise<void>;
|
|
33
|
+
export declare function createRelease(owner: string, repo: string, options: {
|
|
34
|
+
tag: string;
|
|
35
|
+
name: string;
|
|
36
|
+
body: string;
|
|
37
|
+
draft?: boolean;
|
|
38
|
+
prerelease?: boolean;
|
|
39
|
+
}): Promise<{
|
|
40
|
+
htmlUrl: string;
|
|
41
|
+
}>;
|
|
42
|
+
export declare function generateTopics(analysis: any): string[];
|
|
43
|
+
export declare function isGitHubConfigured(): boolean;
|
|
44
|
+
//# sourceMappingURL=github-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-service.d.ts","sourceRoot":"","sources":["../../src/services/github-service.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,6EAA6E;AAC7E,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAmBD,wBAAsB,oBAAoB,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAI5F;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAS9E;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,QAAQ,CAAC,CA+B9E;AAED,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAe5E;AAED,wBAAsB,UAAU,CAC9B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GACtE,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IACP,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,GACA,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAc9B;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM,EAAE,CAgBtD;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { Octokit } from 'octokit';
|
|
2
|
+
import { getGitHubToken } from '../config/manager.js';
|
|
3
|
+
let octokitInstance = null;
|
|
4
|
+
/** Call this after saving a new token so the cached instance is replaced. */
|
|
5
|
+
export function resetOctokitCache() {
|
|
6
|
+
octokitInstance = null;
|
|
7
|
+
}
|
|
8
|
+
function getOctokit() {
|
|
9
|
+
if (octokitInstance)
|
|
10
|
+
return octokitInstance;
|
|
11
|
+
const token = getGitHubToken();
|
|
12
|
+
if (!token) {
|
|
13
|
+
throw new Error('No GitHub token found.\n' +
|
|
14
|
+
' → Run: autogit login\n' +
|
|
15
|
+
' → Or set: GITHUB_TOKEN environment variable\n' +
|
|
16
|
+
' → Create token at: https://github.com/settings/tokens (scopes: repo, read:user)');
|
|
17
|
+
}
|
|
18
|
+
octokitInstance = new Octokit({ auth: token });
|
|
19
|
+
return octokitInstance;
|
|
20
|
+
}
|
|
21
|
+
export async function getAuthenticatedUser() {
|
|
22
|
+
const octokit = getOctokit();
|
|
23
|
+
const { data } = await octokit.rest.users.getAuthenticated();
|
|
24
|
+
return { login: data.login, name: data.name };
|
|
25
|
+
}
|
|
26
|
+
export async function repoExists(owner, repo) {
|
|
27
|
+
const octokit = getOctokit();
|
|
28
|
+
try {
|
|
29
|
+
await octokit.rest.repos.get({ owner, repo });
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
if (error.status === 404)
|
|
34
|
+
return false;
|
|
35
|
+
throw error;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export async function createRepo(options) {
|
|
39
|
+
const octokit = getOctokit();
|
|
40
|
+
const { data } = await octokit.rest.repos.createForAuthenticatedUser({
|
|
41
|
+
name: options.name,
|
|
42
|
+
description: options.description || '',
|
|
43
|
+
private: options.isPrivate ?? false,
|
|
44
|
+
auto_init: false,
|
|
45
|
+
});
|
|
46
|
+
// Set topics if provided
|
|
47
|
+
if (options.topics && options.topics.length > 0) {
|
|
48
|
+
const user = await getAuthenticatedUser();
|
|
49
|
+
await octokit.rest.repos.replaceAllTopics({
|
|
50
|
+
owner: user.login,
|
|
51
|
+
repo: options.name,
|
|
52
|
+
names: options.topics.slice(0, 20), // GitHub limit
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
name: data.name,
|
|
57
|
+
fullName: data.full_name,
|
|
58
|
+
description: data.description || '',
|
|
59
|
+
url: data.url,
|
|
60
|
+
htmlUrl: data.html_url,
|
|
61
|
+
cloneUrl: data.clone_url,
|
|
62
|
+
sshUrl: data.ssh_url,
|
|
63
|
+
private: data.private,
|
|
64
|
+
defaultBranch: data.default_branch,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export async function getRepo(owner, repo) {
|
|
68
|
+
const octokit = getOctokit();
|
|
69
|
+
const { data } = await octokit.rest.repos.get({ owner, repo });
|
|
70
|
+
return {
|
|
71
|
+
name: data.name,
|
|
72
|
+
fullName: data.full_name,
|
|
73
|
+
description: data.description || '',
|
|
74
|
+
url: data.url,
|
|
75
|
+
htmlUrl: data.html_url,
|
|
76
|
+
cloneUrl: data.clone_url,
|
|
77
|
+
sshUrl: data.ssh_url,
|
|
78
|
+
private: data.private,
|
|
79
|
+
defaultBranch: data.default_branch,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
export async function updateRepo(owner, repo, updates) {
|
|
83
|
+
const octokit = getOctokit();
|
|
84
|
+
if (updates.description || updates.homepage) {
|
|
85
|
+
await octokit.rest.repos.update({
|
|
86
|
+
owner,
|
|
87
|
+
repo,
|
|
88
|
+
description: updates.description,
|
|
89
|
+
homepage: updates.homepage,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
if (updates.topics) {
|
|
93
|
+
await octokit.rest.repos.replaceAllTopics({
|
|
94
|
+
owner,
|
|
95
|
+
repo,
|
|
96
|
+
names: updates.topics.slice(0, 20),
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
export async function createRelease(owner, repo, options) {
|
|
101
|
+
const octokit = getOctokit();
|
|
102
|
+
const { data } = await octokit.rest.repos.createRelease({
|
|
103
|
+
owner,
|
|
104
|
+
repo,
|
|
105
|
+
tag_name: options.tag,
|
|
106
|
+
name: options.name,
|
|
107
|
+
body: options.body,
|
|
108
|
+
draft: options.draft ?? false,
|
|
109
|
+
prerelease: options.prerelease ?? false,
|
|
110
|
+
});
|
|
111
|
+
return { htmlUrl: data.html_url };
|
|
112
|
+
}
|
|
113
|
+
export function generateTopics(analysis) {
|
|
114
|
+
const topics = [];
|
|
115
|
+
// Add languages (lowercase)
|
|
116
|
+
for (const lang of analysis.languages.slice(0, 5)) {
|
|
117
|
+
topics.push(lang.toLowerCase().replace(/[^a-z0-9-]/g, ''));
|
|
118
|
+
}
|
|
119
|
+
// Add frameworks
|
|
120
|
+
for (const fw of analysis.frameworks.slice(0, 5)) {
|
|
121
|
+
const normalized = fw.toLowerCase().replace(/[^a-z0-9-]/g, '-').replace(/-+/g, '-');
|
|
122
|
+
if (normalized.length <= 35)
|
|
123
|
+
topics.push(normalized);
|
|
124
|
+
}
|
|
125
|
+
// Deduplicate and limit
|
|
126
|
+
return [...new Set(topics)].slice(0, 15);
|
|
127
|
+
}
|
|
128
|
+
export function isGitHubConfigured() {
|
|
129
|
+
return !!getGitHubToken();
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=github-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-service.js","sourceRoot":"","sources":["../../src/services/github-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ProjectAnalysis } from '../scanner/project-analyzer.js';
|
|
2
|
+
import type { ScanResult } from '../scanner/file-scanner.js';
|
|
3
|
+
export interface ProjectInsights {
|
|
4
|
+
documentationScore: {
|
|
5
|
+
score: number;
|
|
6
|
+
reason: string;
|
|
7
|
+
};
|
|
8
|
+
codeQualityScore: {
|
|
9
|
+
score: number;
|
|
10
|
+
reason: string;
|
|
11
|
+
};
|
|
12
|
+
maintainabilityScore: {
|
|
13
|
+
score: number;
|
|
14
|
+
reason: string;
|
|
15
|
+
};
|
|
16
|
+
suggestions: string[];
|
|
17
|
+
performanceRecommendations: string[];
|
|
18
|
+
securityObservations: string[];
|
|
19
|
+
missingTests: string[];
|
|
20
|
+
missingDocumentation: string[];
|
|
21
|
+
todoSummary: string[];
|
|
22
|
+
}
|
|
23
|
+
export declare function generateInsights(analysis: ProjectAnalysis, scan: ScanResult, useAI: boolean): Promise<ProjectInsights>;
|
|
24
|
+
//# sourceMappingURL=insights.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insights.d.ts","sourceRoot":"","sources":["../../src/services/insights.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAK7D,MAAM,WAAW,eAAe;IAC9B,kBAAkB,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACtD,gBAAgB,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,oBAAoB,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,0BAA0B,EAAE,MAAM,EAAE,CAAC;IACrC,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,eAAe,EACzB,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,eAAe,CAAC,CA+C1B"}
|