@thanhvn14/csvibe 0.1.0 → 0.1.2
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/.csvibe/state/approaches.json +1 -0
- package/README.md +142 -3
- package/dist/commands/brainstorm.d.ts +16 -0
- package/dist/commands/brainstorm.d.ts.map +1 -0
- package/dist/commands/brainstorm.js +186 -0
- package/dist/commands/brainstorm.js.map +1 -0
- package/dist/commands/doctor.d.ts +9 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +72 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/help.d.ts.map +1 -1
- package/dist/commands/help.js +13 -7
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/index.d.ts +3 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +7 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init/index.d.ts +7 -0
- package/dist/commands/init/index.d.ts.map +1 -0
- package/dist/commands/init/index.js +10 -0
- package/dist/commands/init/index.js.map +1 -0
- package/dist/commands/init/init-command.d.ts +10 -0
- package/dist/commands/init/init-command.d.ts.map +1 -0
- package/dist/commands/init/init-command.js +75 -0
- package/dist/commands/init/init-command.js.map +1 -0
- package/dist/commands/init/phases/config-handler.d.ts +10 -0
- package/dist/commands/init/phases/config-handler.d.ts.map +1 -0
- package/dist/commands/init/phases/config-handler.js +21 -0
- package/dist/commands/init/phases/config-handler.js.map +1 -0
- package/dist/commands/init/phases/detection-handler.d.ts +10 -0
- package/dist/commands/init/phases/detection-handler.d.ts.map +1 -0
- package/dist/commands/init/phases/detection-handler.js +80 -0
- package/dist/commands/init/phases/detection-handler.js.map +1 -0
- package/dist/commands/init/phases/download-handler.d.ts +9 -0
- package/dist/commands/init/phases/download-handler.d.ts.map +1 -0
- package/dist/commands/init/phases/download-handler.js +16 -0
- package/dist/commands/init/phases/download-handler.js.map +1 -0
- package/dist/commands/init/phases/prompt-handler.d.ts +10 -0
- package/dist/commands/init/phases/prompt-handler.d.ts.map +1 -0
- package/dist/commands/init/phases/prompt-handler.js +24 -0
- package/dist/commands/init/phases/prompt-handler.js.map +1 -0
- package/dist/commands/init/phases/scaffold-handler.d.ts +9 -0
- package/dist/commands/init/phases/scaffold-handler.d.ts.map +1 -0
- package/dist/commands/init/phases/scaffold-handler.js +18 -0
- package/dist/commands/init/phases/scaffold-handler.js.map +1 -0
- package/dist/commands/init/phases/validation-handler.d.ts +14 -0
- package/dist/commands/init/phases/validation-handler.d.ts.map +1 -0
- package/dist/commands/init/phases/validation-handler.js +50 -0
- package/dist/commands/init/phases/validation-handler.js.map +1 -0
- package/dist/commands/init/phases/vscode-handler.d.ts +9 -0
- package/dist/commands/init/phases/vscode-handler.d.ts.map +1 -0
- package/dist/commands/init/phases/vscode-handler.js +16 -0
- package/dist/commands/init/phases/vscode-handler.js.map +1 -0
- package/dist/commands/init/types.d.ts +28 -0
- package/dist/commands/init/types.d.ts.map +1 -0
- package/dist/commands/init/types.js +6 -0
- package/dist/commands/init/types.js.map +1 -0
- package/dist/commands/scout.d.ts +30 -0
- package/dist/commands/scout.d.ts.map +1 -0
- package/dist/commands/scout.js +116 -0
- package/dist/commands/scout.js.map +1 -0
- package/dist/config/constants.d.ts +3 -3
- package/dist/config/constants.js +3 -3
- package/dist/config/constants.js.map +1 -1
- package/dist/domains/config/generator.d.ts +17 -0
- package/dist/domains/config/generator.d.ts.map +1 -0
- package/dist/domains/config/generator.js +67 -0
- package/dist/domains/config/generator.js.map +1 -0
- package/dist/domains/config/index.d.ts +8 -0
- package/dist/domains/config/index.d.ts.map +1 -0
- package/dist/domains/config/index.js +15 -0
- package/dist/domains/config/index.js.map +1 -0
- package/dist/domains/config/types.d.ts +39 -0
- package/dist/domains/config/types.d.ts.map +1 -0
- package/dist/domains/config/types.js +6 -0
- package/dist/domains/config/types.js.map +1 -0
- package/dist/domains/config/validator.d.ts +17 -0
- package/dist/domains/config/validator.d.ts.map +1 -0
- package/dist/domains/config/validator.js +54 -0
- package/dist/domains/config/validator.js.map +1 -0
- package/dist/domains/github/auth-api.d.ts +19 -0
- package/dist/domains/github/auth-api.d.ts.map +1 -0
- package/dist/domains/github/auth-api.js +196 -0
- package/dist/domains/github/auth-api.js.map +1 -0
- package/dist/domains/github/github-client.d.ts +323 -0
- package/dist/domains/github/github-client.d.ts.map +1 -0
- package/dist/domains/github/github-client.js +192 -0
- package/dist/domains/github/github-client.js.map +1 -0
- package/dist/domains/github/index.d.ts +9 -0
- package/dist/domains/github/index.d.ts.map +1 -0
- package/dist/domains/github/index.js +23 -0
- package/dist/domains/github/index.js.map +1 -0
- package/dist/domains/github/keychain.d.ts +19 -0
- package/dist/domains/github/keychain.d.ts.map +1 -0
- package/dist/domains/github/keychain.js +132 -0
- package/dist/domains/github/keychain.js.map +1 -0
- package/dist/domains/github/types.d.ts +40 -0
- package/dist/domains/github/types.d.ts.map +1 -0
- package/dist/domains/github/types.js +6 -0
- package/dist/domains/github/types.js.map +1 -0
- package/dist/domains/health-checks/auto-healer.d.ts +14 -0
- package/dist/domains/health-checks/auto-healer.d.ts.map +1 -0
- package/dist/domains/health-checks/auto-healer.js +160 -0
- package/dist/domains/health-checks/auto-healer.js.map +1 -0
- package/dist/domains/health-checks/check-runner.d.ts +10 -0
- package/dist/domains/health-checks/check-runner.d.ts.map +1 -0
- package/dist/domains/health-checks/check-runner.js +31 -0
- package/dist/domains/health-checks/check-runner.js.map +1 -0
- package/dist/domains/health-checks/checkers/auth-checker.d.ts +10 -0
- package/dist/domains/health-checks/checkers/auth-checker.d.ts.map +1 -0
- package/dist/domains/health-checks/checkers/auth-checker.js +90 -0
- package/dist/domains/health-checks/checkers/auth-checker.js.map +1 -0
- package/dist/domains/health-checks/checkers/deps-checker.d.ts +10 -0
- package/dist/domains/health-checks/checkers/deps-checker.d.ts.map +1 -0
- package/dist/domains/health-checks/checkers/deps-checker.js +150 -0
- package/dist/domains/health-checks/checkers/deps-checker.js.map +1 -0
- package/dist/domains/health-checks/checkers/project-checker.d.ts +10 -0
- package/dist/domains/health-checks/checkers/project-checker.d.ts.map +1 -0
- package/dist/domains/health-checks/checkers/project-checker.js +124 -0
- package/dist/domains/health-checks/checkers/project-checker.js.map +1 -0
- package/dist/domains/health-checks/checkers/system-checker.d.ts +10 -0
- package/dist/domains/health-checks/checkers/system-checker.d.ts.map +1 -0
- package/dist/domains/health-checks/checkers/system-checker.js +135 -0
- package/dist/domains/health-checks/checkers/system-checker.js.map +1 -0
- package/dist/domains/health-checks/index.d.ts +9 -0
- package/dist/domains/health-checks/index.d.ts.map +1 -0
- package/dist/domains/health-checks/index.js +21 -0
- package/dist/domains/health-checks/index.js.map +1 -0
- package/dist/domains/health-checks/report-generator.d.ts +18 -0
- package/dist/domains/health-checks/report-generator.d.ts.map +1 -0
- package/dist/domains/health-checks/report-generator.js +117 -0
- package/dist/domains/health-checks/report-generator.js.map +1 -0
- package/dist/domains/health-checks/types.d.ts +35 -0
- package/dist/domains/health-checks/types.d.ts.map +1 -0
- package/dist/domains/health-checks/types.js +6 -0
- package/dist/domains/health-checks/types.js.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/approaches-validator.d.ts +40 -0
- package/dist/utils/approaches-validator.d.ts.map +1 -0
- package/dist/utils/approaches-validator.js +101 -0
- package/dist/utils/approaches-validator.js.map +1 -0
- package/dist/utils/dependency-analyzer.d.ts +31 -0
- package/dist/utils/dependency-analyzer.d.ts.map +1 -0
- package/dist/utils/dependency-analyzer.js +294 -0
- package/dist/utils/dependency-analyzer.js.map +1 -0
- package/dist/utils/directory-analyzer.d.ts +23 -0
- package/dist/utils/directory-analyzer.d.ts.map +1 -0
- package/dist/utils/directory-analyzer.js +81 -0
- package/dist/utils/directory-analyzer.js.map +1 -0
- package/dist/utils/downloader.d.ts +3 -3
- package/dist/utils/downloader.d.ts.map +1 -1
- package/dist/utils/downloader.js +35 -65
- package/dist/utils/downloader.js.map +1 -1
- package/dist/utils/errors.d.ts +64 -10
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +136 -22
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/gh-cli.d.ts +4 -2
- package/dist/utils/gh-cli.d.ts.map +1 -1
- package/dist/utils/gh-cli.js +33 -38
- package/dist/utils/gh-cli.js.map +1 -1
- package/dist/utils/progress.d.ts +37 -0
- package/dist/utils/progress.d.ts.map +1 -0
- package/dist/utils/progress.js +121 -0
- package/dist/utils/progress.js.map +1 -0
- package/dist/utils/prompts.d.ts +5 -1
- package/dist/utils/prompts.d.ts.map +1 -1
- package/dist/utils/prompts.js +124 -64
- package/dist/utils/prompts.js.map +1 -1
- package/package.json +7 -3
- package/test-jira-prompt.js +32 -0
- package/dist/commands/init.d.ts +0 -6
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -147
- package/dist/commands/init.js.map +0 -1
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Scout command - Analyze project structure for vibecoding
|
|
4
|
+
* Gathers context about project type, tech stack, dependencies, and directory structure
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.scoutCommand = scoutCommand;
|
|
11
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
12
|
+
const ora_1 = __importDefault(require("ora"));
|
|
13
|
+
const path_1 = __importDefault(require("path"));
|
|
14
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
15
|
+
const project_detector_1 = require("../utils/project-detector");
|
|
16
|
+
const dependency_analyzer_1 = require("../utils/dependency-analyzer");
|
|
17
|
+
const directory_analyzer_1 = require("../utils/directory-analyzer");
|
|
18
|
+
const constants_1 = require("../config/constants");
|
|
19
|
+
/**
|
|
20
|
+
* Scout command - Main entry point
|
|
21
|
+
* Analyzes project structure and outputs context to JSON
|
|
22
|
+
*
|
|
23
|
+
* @param options - Command options
|
|
24
|
+
*/
|
|
25
|
+
async function scoutCommand(options = {}) {
|
|
26
|
+
console.log(chalk_1.default.bold.cyan('\n🔍 Scouting Project...\n'));
|
|
27
|
+
const projectRoot = process.cwd();
|
|
28
|
+
const outputPath = options.output || path_1.default.join(projectRoot, constants_1.CONSTANTS.STATE_DIR, 'scout-context.json');
|
|
29
|
+
try {
|
|
30
|
+
// Step 1: Validate state directory
|
|
31
|
+
const spinner1 = (0, ora_1.default)('Validating project structure').start();
|
|
32
|
+
const stateDir = path_1.default.join(projectRoot, constants_1.CONSTANTS.STATE_DIR);
|
|
33
|
+
if (!await fs_extra_1.default.pathExists(stateDir)) {
|
|
34
|
+
spinner1.fail('Project not initialized');
|
|
35
|
+
throw new Error('Run `csvibe init` first to set up project');
|
|
36
|
+
}
|
|
37
|
+
spinner1.succeed('Project structure validated');
|
|
38
|
+
// Step 2: Detect project type
|
|
39
|
+
const spinner2 = (0, ora_1.default)('Detecting project type').start();
|
|
40
|
+
const projectType = await (0, project_detector_1.detectProjectType)(projectRoot);
|
|
41
|
+
spinner2.succeed(`Project type: ${chalk_1.default.cyan(projectType)}`);
|
|
42
|
+
// Step 3: Analyze directories
|
|
43
|
+
const spinner3 = (0, ora_1.default)('Analyzing directory structure').start();
|
|
44
|
+
const directories = await (0, directory_analyzer_1.analyzeDirectories)(projectRoot, projectType);
|
|
45
|
+
const sourceCount = directories.source.length;
|
|
46
|
+
spinner3.succeed(`Found ${chalk_1.default.cyan(sourceCount)} source ${sourceCount === 1 ? 'directory' : 'directories'}`);
|
|
47
|
+
// Step 4: Analyze dependencies
|
|
48
|
+
const spinner4 = (0, ora_1.default)('Extracting dependencies').start();
|
|
49
|
+
const dependencies = await (0, dependency_analyzer_1.analyzeDependencies)(projectRoot, projectType);
|
|
50
|
+
const depCount = Object.keys(dependencies).length;
|
|
51
|
+
spinner4.succeed(`Extracted ${chalk_1.default.cyan(depCount)} ${depCount === 1 ? 'dependency' : 'dependencies'}`);
|
|
52
|
+
// Step 5: Infer tech stack
|
|
53
|
+
const spinner5 = (0, ora_1.default)('Inferring tech stack').start();
|
|
54
|
+
const techStack = (0, dependency_analyzer_1.inferTechStack)(dependencies, projectType);
|
|
55
|
+
if (techStack.length > 0) {
|
|
56
|
+
spinner5.succeed(`Tech stack: ${chalk_1.default.cyan(techStack.join(', '))}`);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
spinner5.succeed('Tech stack: None detected');
|
|
60
|
+
}
|
|
61
|
+
// Step 6: Detect build tool
|
|
62
|
+
const spinner6 = (0, ora_1.default)('Detecting build tool').start();
|
|
63
|
+
const buildTool = await (0, dependency_analyzer_1.detectBuildTool)(projectRoot, projectType);
|
|
64
|
+
spinner6.succeed(`Build tool: ${chalk_1.default.cyan(buildTool)}`);
|
|
65
|
+
// Step 7: Generate architecture summary
|
|
66
|
+
const architecture = generateArchitectureSummary(projectType, directories, techStack);
|
|
67
|
+
// Step 8: Write output
|
|
68
|
+
const spinner7 = (0, ora_1.default)('Writing context file').start();
|
|
69
|
+
const context = {
|
|
70
|
+
projectType,
|
|
71
|
+
techStack,
|
|
72
|
+
directories,
|
|
73
|
+
dependencies,
|
|
74
|
+
buildTool,
|
|
75
|
+
architecture
|
|
76
|
+
};
|
|
77
|
+
await fs_extra_1.default.ensureDir(path_1.default.dirname(outputPath));
|
|
78
|
+
await fs_extra_1.default.writeJson(outputPath, context, { spaces: 2 });
|
|
79
|
+
spinner7.succeed('Context saved');
|
|
80
|
+
// Success message
|
|
81
|
+
console.log(chalk_1.default.bold.green('\n✓ Scout phase complete!\n'));
|
|
82
|
+
console.log(chalk_1.default.gray('Context saved to: ') + chalk_1.default.cyan(path_1.default.relative(process.cwd(), outputPath)));
|
|
83
|
+
console.log(chalk_1.default.gray('\nNext step: ') + chalk_1.default.cyan('csvibe run --phase=brainstorm\n'));
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
if (error instanceof Error) {
|
|
87
|
+
console.error(chalk_1.default.red(`\n✗ Error: ${error.message}\n`));
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
console.error(chalk_1.default.red('\n✗ An unexpected error occurred during scout phase\n'));
|
|
91
|
+
}
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Generate human-readable architecture summary
|
|
97
|
+
*
|
|
98
|
+
* @param projectType - Detected project type
|
|
99
|
+
* @param directories - Analyzed directory structure
|
|
100
|
+
* @param techStack - Inferred tech stack
|
|
101
|
+
* @returns Architecture summary string
|
|
102
|
+
*/
|
|
103
|
+
function generateArchitectureSummary(projectType, directories, techStack) {
|
|
104
|
+
const parts = [projectType];
|
|
105
|
+
// Add primary technologies (limit to top 3)
|
|
106
|
+
if (techStack.length > 0) {
|
|
107
|
+
const topTech = techStack.slice(0, 3).join(', ');
|
|
108
|
+
parts.push(`with ${topTech}`);
|
|
109
|
+
}
|
|
110
|
+
// Add structure info for monorepos
|
|
111
|
+
if (directories.source.length > 1) {
|
|
112
|
+
parts.push('(multi-package structure)');
|
|
113
|
+
}
|
|
114
|
+
return parts.join(' ');
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=scout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scout.js","sourceRoot":"","sources":["../../src/commands/scout.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Configuration constants for CSVibe CLI
|
|
3
3
|
*/
|
|
4
4
|
export declare const CONSTANTS: {
|
|
5
|
-
readonly REPO_OWNER: "
|
|
5
|
+
readonly REPO_OWNER: "vsvn-ThanhVN";
|
|
6
6
|
readonly REPO_NAME: "csvibe-engine";
|
|
7
7
|
readonly REPO_FULL: string;
|
|
8
8
|
readonly MIN_NODE_VERSION: 16;
|
|
@@ -16,8 +16,8 @@ export declare const CONSTANTS: {
|
|
|
16
16
|
readonly STATE_DIR: ".csvibe/state";
|
|
17
17
|
readonly CACHE_DIR: ".csvibe/cache";
|
|
18
18
|
readonly CONFIG_FILE: ".csvibe/config.yml";
|
|
19
|
-
readonly REPO_URL: "https://github.com/
|
|
20
|
-
readonly ISSUES_URL: "https://github.com/
|
|
19
|
+
readonly REPO_URL: "https://github.com/vsvn-ThanhVN/csvibe-engine";
|
|
20
|
+
readonly ISSUES_URL: "https://github.com/vsvn-ThanhVN/csvibe-engine/issues";
|
|
21
21
|
readonly GH_CLI_INSTALL: "https://github.com/cli/cli#installation";
|
|
22
22
|
};
|
|
23
23
|
//# sourceMappingURL=constants.d.ts.map
|
package/dist/config/constants.js
CHANGED
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.CONSTANTS = void 0;
|
|
7
7
|
exports.CONSTANTS = {
|
|
8
8
|
// Private repository
|
|
9
|
-
REPO_OWNER: '
|
|
9
|
+
REPO_OWNER: 'vsvn-ThanhVN', // GitHub username/org
|
|
10
10
|
REPO_NAME: 'csvibe-engine',
|
|
11
11
|
get REPO_FULL() {
|
|
12
12
|
return `${this.REPO_OWNER}/${this.REPO_NAME}`;
|
|
@@ -27,8 +27,8 @@ exports.CONSTANTS = {
|
|
|
27
27
|
// Config file
|
|
28
28
|
CONFIG_FILE: '.csvibe/config.yml',
|
|
29
29
|
// URLs
|
|
30
|
-
REPO_URL: 'https://github.com/
|
|
31
|
-
ISSUES_URL: 'https://github.com/
|
|
30
|
+
REPO_URL: 'https://github.com/vsvn-ThanhVN/csvibe-engine',
|
|
31
|
+
ISSUES_URL: 'https://github.com/vsvn-ThanhVN/csvibe-engine/issues',
|
|
32
32
|
GH_CLI_INSTALL: 'https://github.com/cli/cli#installation'
|
|
33
33
|
};
|
|
34
34
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEU,QAAA,SAAS,GAAG;IACvB,qBAAqB;IACrB,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEU,QAAA,SAAS,GAAG;IACvB,qBAAqB;IACrB,UAAU,EAAE,cAAc,EAAG,sBAAsB;IACnD,SAAS,EAAE,eAAe;IAC1B,IAAI,SAAS;QACX,OAAO,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;IAChD,CAAC;IAED,mBAAmB;IACnB,gBAAgB,EAAE,EAAE;IACpB,cAAc,EAAE,OAAO;IAEvB,mBAAmB;IACnB,WAAW,EAAE,wBAAwB;IAErC,cAAc;IACd,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE,gBAAgB;IAC5B,WAAW,EAAE,iBAAiB;IAC9B,gBAAgB,EAAE,sBAAsB;IACxC,SAAS,EAAE,eAAe;IAC1B,SAAS,EAAE,eAAe;IAE1B,cAAc;IACd,WAAW,EAAE,oBAAoB;IAEjC,OAAO;IACP,QAAQ,EAAE,+CAA+C;IACzD,UAAU,EAAE,sDAAsD;IAClE,cAAc,EAAE,yCAAyC;CACjD,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration file generation
|
|
3
|
+
*/
|
|
4
|
+
import type { ConfigOptions, CSVibeConfig } from './types';
|
|
5
|
+
/**
|
|
6
|
+
* Generate config.yml from template and options
|
|
7
|
+
*/
|
|
8
|
+
export declare function generateConfig(template: string, options: ConfigOptions): Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* Check if CSVibe is already initialized
|
|
11
|
+
*/
|
|
12
|
+
export declare function isInitialized(dir?: string): Promise<boolean>;
|
|
13
|
+
/**
|
|
14
|
+
* Load existing config
|
|
15
|
+
*/
|
|
16
|
+
export declare function loadConfig(dir?: string): Promise<CSVibeConfig>;
|
|
17
|
+
//# sourceMappingURL=generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../src/domains/config/generator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE3D;;GAEG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAqCf;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,CAGjF;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,YAAY,CAAC,CAInF"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Configuration file generation
|
|
4
|
+
*/
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.generateConfig = generateConfig;
|
|
10
|
+
exports.isInitialized = isInitialized;
|
|
11
|
+
exports.loadConfig = loadConfig;
|
|
12
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
13
|
+
const path_1 = __importDefault(require("path"));
|
|
14
|
+
const yaml_1 = __importDefault(require("yaml"));
|
|
15
|
+
/**
|
|
16
|
+
* Generate config.yml from template and options
|
|
17
|
+
*/
|
|
18
|
+
async function generateConfig(template, options) {
|
|
19
|
+
const targetDir = options.targetDir || process.cwd();
|
|
20
|
+
const configPath = path_1.default.join(targetDir, '.csvibe', 'config.yml');
|
|
21
|
+
// Ensure .csvibe directory exists
|
|
22
|
+
await fs_extra_1.default.ensureDir(path_1.default.join(targetDir, '.csvibe'));
|
|
23
|
+
// Replace template placeholders
|
|
24
|
+
let config = template
|
|
25
|
+
.replace(/{{GENERATED_DATE}}/g, new Date().toISOString())
|
|
26
|
+
.replace(/{{PROJECT_NAME}}/g, options.projectName)
|
|
27
|
+
.replace(/{{PROJECT_TYPE}}/g, options.projectType)
|
|
28
|
+
.replace(/{{PROJECT_VERSION}}/g, options.projectVersion);
|
|
29
|
+
// Replace Jira placeholders if credentials provided
|
|
30
|
+
if (options.jiraCredentials) {
|
|
31
|
+
config = config
|
|
32
|
+
.replace(/{{JIRA_URL}}/g, options.jiraCredentials.url)
|
|
33
|
+
.replace(/{{JIRA_EMAIL}}/g, options.jiraCredentials.email)
|
|
34
|
+
.replace(/{{JIRA_API_TOKEN}}/g, options.jiraCredentials.apiToken)
|
|
35
|
+
.replace(/{{JIRA_PROJECT_KEY}}/g, options.jiraCredentials.projectKey);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
// Use placeholder values for unconfigured Jira
|
|
39
|
+
config = config
|
|
40
|
+
.replace(/{{JIRA_URL}}/g, '')
|
|
41
|
+
.replace(/{{JIRA_EMAIL}}/g, '')
|
|
42
|
+
.replace(/{{JIRA_API_TOKEN}}/g, '')
|
|
43
|
+
.replace(/{{JIRA_PROJECT_KEY}}/g, '');
|
|
44
|
+
}
|
|
45
|
+
// Write config file
|
|
46
|
+
await fs_extra_1.default.writeFile(configPath, config, 'utf-8');
|
|
47
|
+
// Set restrictive permissions (config contains sensitive data)
|
|
48
|
+
if (process.platform !== 'win32') {
|
|
49
|
+
await fs_extra_1.default.chmod(configPath, 0o600); // rw------- (owner only)
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Check if CSVibe is already initialized
|
|
54
|
+
*/
|
|
55
|
+
async function isInitialized(dir = process.cwd()) {
|
|
56
|
+
const configPath = path_1.default.join(dir, '.csvibe', 'config.yml');
|
|
57
|
+
return await fs_extra_1.default.pathExists(configPath);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Load existing config
|
|
61
|
+
*/
|
|
62
|
+
async function loadConfig(dir = process.cwd()) {
|
|
63
|
+
const configPath = path_1.default.join(dir, '.csvibe', 'config.yml');
|
|
64
|
+
const content = await fs_extra_1.default.readFile(configPath, 'utf-8');
|
|
65
|
+
return yaml_1.default.parse(content);
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../src/domains/config/generator.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;AAUH,wCAwCC;AAKD,sCAGC;AAKD,gCAIC;AAjED,wDAA0B;AAC1B,gDAAwB;AACxB,gDAAwB;AAGxB;;GAEG;AACI,KAAK,UAAU,cAAc,CAClC,QAAgB,EAChB,OAAsB;IAEtB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACrD,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAEjE,kCAAkC;IAClC,MAAM,kBAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAEpD,gCAAgC;IAChC,IAAI,MAAM,GAAG,QAAQ;SAClB,OAAO,CAAC,qBAAqB,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;SACxD,OAAO,CAAC,mBAAmB,EAAE,OAAO,CAAC,WAAW,CAAC;SACjD,OAAO,CAAC,mBAAmB,EAAE,OAAO,CAAC,WAAW,CAAC;SACjD,OAAO,CAAC,sBAAsB,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAE3D,oDAAoD;IACpD,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;QAC5B,MAAM,GAAG,MAAM;aACZ,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC;aACrD,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC;aACzD,OAAO,CAAC,qBAAqB,EAAE,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC;aAChE,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IAC1E,CAAC;SAAM,CAAC;QACN,+CAA+C;QAC/C,MAAM,GAAG,MAAM;aACZ,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;aAC5B,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;aAC9B,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC;aAClC,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,oBAAoB;IACpB,MAAM,kBAAE,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAEhD,+DAA+D;IAC/D,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,kBAAE,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,yBAAyB;IAC9D,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,aAAa,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAC7D,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAC3D,OAAO,MAAM,kBAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,UAAU,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAC1D,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACvD,OAAO,cAAI,CAAC,KAAK,CAAC,OAAO,CAAiB,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config domain facade
|
|
3
|
+
* Public API for configuration management
|
|
4
|
+
*/
|
|
5
|
+
export { generateConfig, isInitialized, loadConfig } from './generator';
|
|
6
|
+
export { validateConfig, isValidConfig, type ValidationError } from './validator';
|
|
7
|
+
export type { ConfigOptions, CSVibeConfig } from './types';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domains/config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAClF,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Config domain facade
|
|
4
|
+
* Public API for configuration management
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.isValidConfig = exports.validateConfig = exports.loadConfig = exports.isInitialized = exports.generateConfig = void 0;
|
|
8
|
+
var generator_1 = require("./generator");
|
|
9
|
+
Object.defineProperty(exports, "generateConfig", { enumerable: true, get: function () { return generator_1.generateConfig; } });
|
|
10
|
+
Object.defineProperty(exports, "isInitialized", { enumerable: true, get: function () { return generator_1.isInitialized; } });
|
|
11
|
+
Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return generator_1.loadConfig; } });
|
|
12
|
+
var validator_1 = require("./validator");
|
|
13
|
+
Object.defineProperty(exports, "validateConfig", { enumerable: true, get: function () { return validator_1.validateConfig; } });
|
|
14
|
+
Object.defineProperty(exports, "isValidConfig", { enumerable: true, get: function () { return validator_1.isValidConfig; } });
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domains/config/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,yCAAwE;AAA/D,2GAAA,cAAc,OAAA;AAAE,0GAAA,aAAa,OAAA;AAAE,uGAAA,UAAU,OAAA;AAClD,yCAAkF;AAAzE,2GAAA,cAAc,OAAA;AAAE,0GAAA,aAAa,OAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config domain types
|
|
3
|
+
*/
|
|
4
|
+
import type { JiraCredentials } from '../../utils/prompts';
|
|
5
|
+
import type { ProjectType } from '../../utils/project-detector';
|
|
6
|
+
export interface ConfigOptions {
|
|
7
|
+
projectName: string;
|
|
8
|
+
projectType: ProjectType;
|
|
9
|
+
projectVersion: string;
|
|
10
|
+
jiraCredentials: JiraCredentials | null;
|
|
11
|
+
targetDir?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface CSVibeConfig {
|
|
14
|
+
project: {
|
|
15
|
+
name: string;
|
|
16
|
+
type: string;
|
|
17
|
+
version: string;
|
|
18
|
+
};
|
|
19
|
+
github: {
|
|
20
|
+
private_repo: string;
|
|
21
|
+
branch: string;
|
|
22
|
+
};
|
|
23
|
+
jira: {
|
|
24
|
+
url: string;
|
|
25
|
+
email: string;
|
|
26
|
+
api_token: string;
|
|
27
|
+
project_key: string;
|
|
28
|
+
};
|
|
29
|
+
pipeline: {
|
|
30
|
+
phases: string[];
|
|
31
|
+
enabled: boolean;
|
|
32
|
+
dry_run: boolean;
|
|
33
|
+
};
|
|
34
|
+
vscode: {
|
|
35
|
+
copilot_required: boolean;
|
|
36
|
+
workspace_path: string;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/domains/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAEhE,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,MAAM,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,IAAI,EAAE;QACJ,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;IACF,MAAM,EAAE;QACN,gBAAgB,EAAE,OAAO,CAAC;QAC1B,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/domains/config/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration validation
|
|
3
|
+
*/
|
|
4
|
+
import type { CSVibeConfig } from './types';
|
|
5
|
+
export interface ValidationError {
|
|
6
|
+
field: string;
|
|
7
|
+
message: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Validate config structure
|
|
11
|
+
*/
|
|
12
|
+
export declare function validateConfig(config: CSVibeConfig): ValidationError[];
|
|
13
|
+
/**
|
|
14
|
+
* Check if config is valid (no errors)
|
|
15
|
+
*/
|
|
16
|
+
export declare function isValidConfig(config: CSVibeConfig): boolean;
|
|
17
|
+
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../src/domains/config/validator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,eAAe,EAAE,CAyCtE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAE3D"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Configuration validation
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.validateConfig = validateConfig;
|
|
7
|
+
exports.isValidConfig = isValidConfig;
|
|
8
|
+
/**
|
|
9
|
+
* Validate config structure
|
|
10
|
+
*/
|
|
11
|
+
function validateConfig(config) {
|
|
12
|
+
const errors = [];
|
|
13
|
+
// Validate project section
|
|
14
|
+
if (!config.project?.name) {
|
|
15
|
+
errors.push({ field: 'project.name', message: 'Project name is required' });
|
|
16
|
+
}
|
|
17
|
+
if (!config.project?.type) {
|
|
18
|
+
errors.push({ field: 'project.type', message: 'Project type is required' });
|
|
19
|
+
}
|
|
20
|
+
if (!config.project?.version) {
|
|
21
|
+
errors.push({ field: 'project.version', message: 'Project version is required' });
|
|
22
|
+
}
|
|
23
|
+
// Validate Jira section
|
|
24
|
+
if (!config.jira?.url) {
|
|
25
|
+
errors.push({ field: 'jira.url', message: 'Jira URL is required' });
|
|
26
|
+
}
|
|
27
|
+
else if (!config.jira.url.startsWith('http')) {
|
|
28
|
+
errors.push({ field: 'jira.url', message: 'Jira URL must start with http:// or https://' });
|
|
29
|
+
}
|
|
30
|
+
if (!config.jira?.email) {
|
|
31
|
+
errors.push({ field: 'jira.email', message: 'Jira email is required' });
|
|
32
|
+
}
|
|
33
|
+
else if (!config.jira.email.includes('@')) {
|
|
34
|
+
errors.push({ field: 'jira.email', message: 'Jira email must be valid' });
|
|
35
|
+
}
|
|
36
|
+
if (!config.jira?.api_token) {
|
|
37
|
+
errors.push({ field: 'jira.api_token', message: 'Jira API token is required' });
|
|
38
|
+
}
|
|
39
|
+
if (!config.jira?.project_key) {
|
|
40
|
+
errors.push({ field: 'jira.project_key', message: 'Jira project key is required' });
|
|
41
|
+
}
|
|
42
|
+
// Validate pipeline section
|
|
43
|
+
if (!Array.isArray(config.pipeline?.phases)) {
|
|
44
|
+
errors.push({ field: 'pipeline.phases', message: 'Pipeline phases must be an array' });
|
|
45
|
+
}
|
|
46
|
+
return errors;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Check if config is valid (no errors)
|
|
50
|
+
*/
|
|
51
|
+
function isValidConfig(config) {
|
|
52
|
+
return validateConfig(config).length === 0;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../src/domains/config/validator.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAYH,wCAyCC;AAKD,sCAEC;AAnDD;;GAEG;AACH,SAAgB,cAAc,CAAC,MAAoB;IACjD,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,2BAA2B;IAC3B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,wBAAwB;IACxB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;QACtB,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC,CAAC;IACtE,CAAC;SAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,8CAA8C,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAC;IAC1E,CAAC;SAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,4BAA4B;IAC5B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,kCAAkC,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,MAAoB;IAChD,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-tier GitHub authentication system
|
|
3
|
+
* Implements 5-tier fallback: gh CLI → env → config → keychain → prompt
|
|
4
|
+
*/
|
|
5
|
+
import type { AuthMethod, GitHubTokenInfo } from './types';
|
|
6
|
+
/**
|
|
7
|
+
* Get GitHub token using 5-tier fallback strategy
|
|
8
|
+
* @throws {GitHubAuthError} if no authentication method available
|
|
9
|
+
*/
|
|
10
|
+
export declare function getGitHubToken(): Promise<GitHubTokenInfo>;
|
|
11
|
+
/**
|
|
12
|
+
* Validate GitHub token by making a test API call
|
|
13
|
+
*/
|
|
14
|
+
export declare function validateToken(token: string): Promise<boolean>;
|
|
15
|
+
/**
|
|
16
|
+
* Get authentication method description for logging
|
|
17
|
+
*/
|
|
18
|
+
export declare function getAuthMethodDescription(method: AuthMethod): string;
|
|
19
|
+
//# sourceMappingURL=auth-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-api.d.ts","sourceRoot":"","sources":["../../../src/domains/github/auth-api.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE3D;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,eAAe,CAAC,CAkC/D;AA+FD;;GAEG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAcnE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAUnE"}
|