@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
package/dist/utils/prompts.js
CHANGED
|
@@ -1,100 +1,160 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* Interactive prompt utilities
|
|
3
|
+
* Interactive prompt utilities using @clack/prompts
|
|
4
4
|
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
5
38
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
39
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
40
|
};
|
|
8
41
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
42
|
exports.promptJiraCredentials = promptJiraCredentials;
|
|
10
43
|
exports.confirmOverwrite = confirmOverwrite;
|
|
44
|
+
exports.confirmJiraSetup = confirmJiraSetup;
|
|
11
45
|
exports.showApiTokenInstructions = showApiTokenInstructions;
|
|
12
|
-
const
|
|
46
|
+
const p = __importStar(require("@clack/prompts"));
|
|
13
47
|
const chalk_1 = __importDefault(require("chalk"));
|
|
14
48
|
/**
|
|
15
49
|
* Prompt user for Jira credentials
|
|
16
50
|
*/
|
|
17
51
|
async function promptJiraCredentials() {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
52
|
+
p.intro(chalk_1.default.bold.cyan('Jira Configuration'));
|
|
53
|
+
const url = await p.text({
|
|
54
|
+
message: 'Jira URL',
|
|
55
|
+
placeholder: 'https://company.atlassian.net',
|
|
56
|
+
validate: (value) => {
|
|
57
|
+
if (!value)
|
|
58
|
+
return 'URL is required';
|
|
59
|
+
if (!value.startsWith('http')) {
|
|
60
|
+
return 'URL must start with http:// or https://';
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
if (p.isCancel(url)) {
|
|
65
|
+
p.cancel('Operation cancelled');
|
|
66
|
+
process.exit(0);
|
|
67
|
+
}
|
|
68
|
+
const email = await p.text({
|
|
69
|
+
message: 'Jira Email',
|
|
70
|
+
placeholder: 'your.email@company.com',
|
|
71
|
+
validate: (value) => {
|
|
72
|
+
if (!value)
|
|
73
|
+
return 'Email is required';
|
|
74
|
+
if (!value.includes('@')) {
|
|
75
|
+
return 'Please enter a valid email address';
|
|
31
76
|
}
|
|
32
77
|
},
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
78
|
+
});
|
|
79
|
+
if (p.isCancel(email)) {
|
|
80
|
+
p.cancel('Operation cancelled');
|
|
81
|
+
process.exit(0);
|
|
82
|
+
}
|
|
83
|
+
const apiToken = await p.password({
|
|
84
|
+
message: 'Jira API Token',
|
|
85
|
+
validate: (value) => {
|
|
86
|
+
if (!value)
|
|
87
|
+
return 'API token is required';
|
|
88
|
+
if (value.length < 10) {
|
|
89
|
+
return 'API token seems too short. Please enter a valid token.';
|
|
42
90
|
}
|
|
43
91
|
},
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
92
|
+
});
|
|
93
|
+
if (p.isCancel(apiToken)) {
|
|
94
|
+
p.cancel('Operation cancelled');
|
|
95
|
+
process.exit(0);
|
|
96
|
+
}
|
|
97
|
+
const projectKey = await p.text({
|
|
98
|
+
message: 'Jira Project Key',
|
|
99
|
+
placeholder: 'PROJ',
|
|
100
|
+
validate: (value) => {
|
|
101
|
+
if (!value)
|
|
102
|
+
return 'Project key is required';
|
|
103
|
+
if (!/^[A-Z]+$/i.test(value)) {
|
|
104
|
+
return 'Project key must be letters only (e.g., PROJ, QS)';
|
|
54
105
|
}
|
|
55
106
|
},
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
return 'Project key must be uppercase letters only (e.g., PROJ, QS)';
|
|
63
|
-
}
|
|
64
|
-
return true;
|
|
65
|
-
},
|
|
66
|
-
transformer: (input) => input.toUpperCase()
|
|
67
|
-
}
|
|
68
|
-
]);
|
|
107
|
+
});
|
|
108
|
+
if (p.isCancel(projectKey)) {
|
|
109
|
+
p.cancel('Operation cancelled');
|
|
110
|
+
process.exit(0);
|
|
111
|
+
}
|
|
112
|
+
p.outro(chalk_1.default.green('ā Jira credentials configured'));
|
|
69
113
|
return {
|
|
70
|
-
url:
|
|
71
|
-
email:
|
|
72
|
-
apiToken:
|
|
73
|
-
projectKey:
|
|
114
|
+
url: url,
|
|
115
|
+
email: email,
|
|
116
|
+
apiToken: apiToken,
|
|
117
|
+
projectKey: projectKey.toUpperCase(),
|
|
74
118
|
};
|
|
75
119
|
}
|
|
76
120
|
/**
|
|
77
121
|
* Confirm overwrite of existing setup
|
|
78
122
|
*/
|
|
79
123
|
async function confirmOverwrite() {
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
124
|
+
const confirm = await p.confirm({
|
|
125
|
+
message: 'CSVibe is already initialized. Overwrite existing setup?',
|
|
126
|
+
initialValue: false,
|
|
127
|
+
});
|
|
128
|
+
if (p.isCancel(confirm)) {
|
|
129
|
+
p.cancel('Operation cancelled');
|
|
130
|
+
process.exit(0);
|
|
131
|
+
}
|
|
132
|
+
return confirm;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Confirm Jira setup (optional configuration)
|
|
136
|
+
*/
|
|
137
|
+
async function confirmJiraSetup() {
|
|
138
|
+
const confirm = await p.confirm({
|
|
139
|
+
message: 'Configure Jira integration now?',
|
|
140
|
+
initialValue: false,
|
|
141
|
+
});
|
|
142
|
+
if (p.isCancel(confirm)) {
|
|
143
|
+
p.cancel('Operation cancelled');
|
|
144
|
+
process.exit(0);
|
|
145
|
+
}
|
|
88
146
|
return confirm;
|
|
89
147
|
}
|
|
90
148
|
/**
|
|
91
149
|
* Show API token creation instructions
|
|
92
150
|
*/
|
|
93
151
|
function showApiTokenInstructions() {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
152
|
+
p.note(chalk_1.default.gray('1. Go to: ' +
|
|
153
|
+
chalk_1.default.cyan('https://id.atlassian.com/manage-profile/security/api-tokens') +
|
|
154
|
+
'\n' +
|
|
155
|
+
'2. Click "Create API token"\n' +
|
|
156
|
+
'3. Give it a name (e.g., "CSVibe CLI")\n' +
|
|
157
|
+
'4. Copy the token and paste it below'), chalk_1.default.bold('š How to create a Jira API Token'));
|
|
158
|
+
console.log(); // spacing
|
|
99
159
|
}
|
|
100
160
|
//# sourceMappingURL=prompts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":";AAAA;;GAEG
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thanhvn14/csvibe",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "CSVibe CLI - GitHub Copilot Vibecoding Workflow",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -27,17 +27,21 @@
|
|
|
27
27
|
"node": ">=16.0.0"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
+
"@clack/prompts": "^0.7.0",
|
|
31
|
+
"@octokit/rest": "^22.0.1",
|
|
30
32
|
"chalk": "^5.0.0",
|
|
33
|
+
"cli-progress": "^3.12.0",
|
|
31
34
|
"commander": "^11.0.0",
|
|
32
35
|
"execa": "^8.0.0",
|
|
33
36
|
"fs-extra": "^11.3.3",
|
|
34
|
-
"
|
|
37
|
+
"keytar": "^7.9.0",
|
|
35
38
|
"ora": "^6.0.0",
|
|
39
|
+
"p-retry": "^6.2.1",
|
|
36
40
|
"yaml": "^2.8.2"
|
|
37
41
|
},
|
|
38
42
|
"devDependencies": {
|
|
43
|
+
"@types/cli-progress": "^3.11.6",
|
|
39
44
|
"@types/fs-extra": "^11.0.4",
|
|
40
|
-
"@types/inquirer": "^9.0.9",
|
|
41
45
|
"@types/node": "^20.0.0",
|
|
42
46
|
"@vitest/coverage-v8": "^1.0.0",
|
|
43
47
|
"tsx": "^4.0.0",
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Debug test for csvibe init - Jira prompt
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
console.log('Testing Jira prompt flow...\n');
|
|
8
|
+
|
|
9
|
+
// Load the actual compiled functions
|
|
10
|
+
const promptHandler = require('./dist/commands/init/phases/prompt-handler.js');
|
|
11
|
+
const prompts = require('./dist/utils/prompts.js');
|
|
12
|
+
|
|
13
|
+
console.log('ā Loaded prompt-handler');
|
|
14
|
+
console.log('ā Loaded prompts utils');
|
|
15
|
+
console.log('\nFunctions available:');
|
|
16
|
+
console.log(' - confirmJiraSetup:', typeof prompts.confirmJiraSetup);
|
|
17
|
+
console.log(' - promptConfiguration:', typeof promptHandler.promptConfiguration);
|
|
18
|
+
|
|
19
|
+
console.log('\n--- Starting promptConfiguration() ---\n');
|
|
20
|
+
|
|
21
|
+
// Call the actual function
|
|
22
|
+
promptHandler.promptConfiguration()
|
|
23
|
+
.then(result => {
|
|
24
|
+
console.log('\n--- Result ---');
|
|
25
|
+
console.log('Returned:', result);
|
|
26
|
+
process.exit(0);
|
|
27
|
+
})
|
|
28
|
+
.catch(err => {
|
|
29
|
+
console.error('\n--- Error ---');
|
|
30
|
+
console.error(err);
|
|
31
|
+
process.exit(1);
|
|
32
|
+
});
|
package/dist/commands/init.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAsBH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAwFjD"}
|
package/dist/commands/init.js
DELETED
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Init command implementation
|
|
4
|
-
* Bootstraps CSVibe project with agents, config, and project scaffolding
|
|
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.initCommand = initCommand;
|
|
11
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
12
|
-
const path_1 = __importDefault(require("path"));
|
|
13
|
-
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
14
|
-
const constants_1 = require("../config/constants");
|
|
15
|
-
const logger_1 = require("../utils/logger");
|
|
16
|
-
const gh_cli_1 = require("../utils/gh-cli");
|
|
17
|
-
const project_detector_1 = require("../utils/project-detector");
|
|
18
|
-
const prompts_1 = require("../utils/prompts");
|
|
19
|
-
const config_generator_1 = require("../utils/config-generator");
|
|
20
|
-
const scaffolder_1 = require("../utils/scaffolder");
|
|
21
|
-
const downloader_1 = require("../utils/downloader");
|
|
22
|
-
const vscode_validator_1 = require("../utils/vscode-validator");
|
|
23
|
-
async function initCommand() {
|
|
24
|
-
console.log(chalk_1.default.bold.cyan('\nš Initializing CSVibe Project\n'));
|
|
25
|
-
const projectRoot = process.cwd();
|
|
26
|
-
try {
|
|
27
|
-
// Step 1: Validate gh CLI and repo access
|
|
28
|
-
const spinner1 = logger_1.logger.spinner('Validating GitHub CLI and repository access');
|
|
29
|
-
try {
|
|
30
|
-
await (0, gh_cli_1.validateGhCli)(constants_1.CONSTANTS.REPO_FULL);
|
|
31
|
-
spinner1.succeed('GitHub CLI validated');
|
|
32
|
-
}
|
|
33
|
-
catch (error) {
|
|
34
|
-
spinner1.fail('GitHub CLI validation failed');
|
|
35
|
-
throw error;
|
|
36
|
-
}
|
|
37
|
-
// Step 2: Check if already initialized
|
|
38
|
-
if (await (0, config_generator_1.isInitialized)(projectRoot)) {
|
|
39
|
-
logger_1.logger.warning('CSVibe is already initialized in this directory');
|
|
40
|
-
const shouldOverwrite = await (0, prompts_1.confirmOverwrite)();
|
|
41
|
-
if (!shouldOverwrite) {
|
|
42
|
-
console.log(chalk_1.default.gray('\nInitialization cancelled.\n'));
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
console.log(); // spacing
|
|
46
|
-
}
|
|
47
|
-
// Step 3: Detect project type
|
|
48
|
-
const spinner2 = logger_1.logger.spinner('Detecting project type');
|
|
49
|
-
const projectType = await (0, project_detector_1.detectProjectType)(projectRoot);
|
|
50
|
-
spinner2.succeed(`Project type detected: ${chalk_1.default.cyan(projectType)}`);
|
|
51
|
-
// Step 4: Get project metadata
|
|
52
|
-
const projectName = path_1.default.basename(projectRoot);
|
|
53
|
-
const projectVersion = await getProjectVersion(projectRoot);
|
|
54
|
-
// Step 5: Prompt for Jira credentials
|
|
55
|
-
(0, prompts_1.showApiTokenInstructions)();
|
|
56
|
-
const jiraCredentials = await (0, prompts_1.promptJiraCredentials)();
|
|
57
|
-
console.log(); // spacing
|
|
58
|
-
// Step 6: Scaffold directory structure
|
|
59
|
-
const spinner3 = logger_1.logger.spinner('Creating directory structure');
|
|
60
|
-
await (0, scaffolder_1.scaffold)(projectRoot);
|
|
61
|
-
spinner3.succeed('Directory structure created');
|
|
62
|
-
// Step 7: Download assets from csvibe-engine
|
|
63
|
-
await (0, downloader_1.downloadGithubAssets)(constants_1.CONSTANTS.REPO_FULL, 'main', projectRoot);
|
|
64
|
-
// Step 8: Generate config.yml
|
|
65
|
-
const spinner4 = logger_1.logger.spinner('Generating configuration');
|
|
66
|
-
const configTemplate = await (0, downloader_1.downloadConfigTemplate)(constants_1.CONSTANTS.REPO_FULL);
|
|
67
|
-
await (0, config_generator_1.generateConfig)(configTemplate, {
|
|
68
|
-
projectName,
|
|
69
|
-
projectType,
|
|
70
|
-
projectVersion,
|
|
71
|
-
jiraCredentials,
|
|
72
|
-
targetDir: projectRoot
|
|
73
|
-
});
|
|
74
|
-
spinner4.succeed('Configuration generated');
|
|
75
|
-
// Step 9: Validate VSCode and Copilot (non-blocking)
|
|
76
|
-
console.log(); // spacing
|
|
77
|
-
await (0, vscode_validator_1.validateVSCodeSetup)();
|
|
78
|
-
// Step 10: Display success message
|
|
79
|
-
console.log(chalk_1.default.bold.green('\nā CSVibe initialized successfully!\n'));
|
|
80
|
-
console.log(chalk_1.default.bold('Next steps:'));
|
|
81
|
-
console.log(' 1. Review ' + chalk_1.default.cyan('.csvibe/config.yml') + ' and adjust as needed');
|
|
82
|
-
console.log(' 2. Review ' + chalk_1.default.cyan('.github/agents/') + ' templates');
|
|
83
|
-
console.log(' 3. Start vibecoding with ' + chalk_1.default.cyan('csvibe run'));
|
|
84
|
-
console.log();
|
|
85
|
-
console.log(chalk_1.default.gray('Configuration saved to: ') + chalk_1.default.cyan(path_1.default.join(projectRoot, constants_1.CONSTANTS.CONFIG_FILE)));
|
|
86
|
-
console.log();
|
|
87
|
-
}
|
|
88
|
-
catch (error) {
|
|
89
|
-
if (error instanceof Error) {
|
|
90
|
-
logger_1.logger.error(error.message);
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
logger_1.logger.error('An unexpected error occurred during initialization');
|
|
94
|
-
}
|
|
95
|
-
console.log('\n' + chalk_1.default.gray('For help, visit: ') + chalk_1.default.cyan(constants_1.CONSTANTS.ISSUES_URL) + '\n');
|
|
96
|
-
process.exit(1);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Get project version from package.json or other manifest files
|
|
101
|
-
*/
|
|
102
|
-
async function getProjectVersion(projectRoot) {
|
|
103
|
-
// Try package.json first (Node.js projects)
|
|
104
|
-
const packageJsonPath = path_1.default.join(projectRoot, 'package.json');
|
|
105
|
-
if (await fs_extra_1.default.pathExists(packageJsonPath)) {
|
|
106
|
-
try {
|
|
107
|
-
const pkg = await fs_extra_1.default.readJson(packageJsonPath);
|
|
108
|
-
if (pkg.version) {
|
|
109
|
-
return pkg.version;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
catch {
|
|
113
|
-
// Ignore parse errors
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
// Try pyproject.toml (Python projects)
|
|
117
|
-
const pyprojectPath = path_1.default.join(projectRoot, 'pyproject.toml');
|
|
118
|
-
if (await fs_extra_1.default.pathExists(pyprojectPath)) {
|
|
119
|
-
try {
|
|
120
|
-
const content = await fs_extra_1.default.readFile(pyprojectPath, 'utf-8');
|
|
121
|
-
const versionMatch = content.match(/version\s*=\s*["']([^"']+)["']/);
|
|
122
|
-
if (versionMatch && versionMatch[1]) {
|
|
123
|
-
return versionMatch[1];
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
catch {
|
|
127
|
-
// Ignore parse errors
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
// Try Cargo.toml (Rust projects)
|
|
131
|
-
const cargoPath = path_1.default.join(projectRoot, 'Cargo.toml');
|
|
132
|
-
if (await fs_extra_1.default.pathExists(cargoPath)) {
|
|
133
|
-
try {
|
|
134
|
-
const content = await fs_extra_1.default.readFile(cargoPath, 'utf-8');
|
|
135
|
-
const versionMatch = content.match(/version\s*=\s*["']([^"']+)["']/);
|
|
136
|
-
if (versionMatch && versionMatch[1]) {
|
|
137
|
-
return versionMatch[1];
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
catch {
|
|
141
|
-
// Ignore parse errors
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
// Default fallback
|
|
145
|
-
return '0.1.0';
|
|
146
|
-
}
|
|
147
|
-
//# sourceMappingURL=init.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|