@ngocsangairvds/vsaf 3.2.1 → 3.2.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/package.json +2 -2
- package/src/global.js +25 -59
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ngocsangairvds/vsaf",
|
|
3
|
-
"version": "3.2.
|
|
4
|
-
"description": "add vds script",
|
|
3
|
+
"version": "3.2.2",
|
|
4
|
+
"description": "add vds script env",
|
|
5
5
|
"keywords": ["claude", "claude-code", "ai", "sdlc", "framework", "bmad", "gitnexus", "superpowers"],
|
|
6
6
|
"bin": {
|
|
7
7
|
"vsaf": "./bin/vsaf.js"
|
package/src/global.js
CHANGED
|
@@ -17,7 +17,6 @@ async function installGlobal() {
|
|
|
17
17
|
installSkills();
|
|
18
18
|
installBinary('gitnexus', () => exec('npm install -g gitnexus@1.6.4-rc.79'));
|
|
19
19
|
setupGitnexusMcp();
|
|
20
|
-
await setupConfluenceMcp();
|
|
21
20
|
await setupVdsScriptsMcp();
|
|
22
21
|
|
|
23
22
|
console.log('\n\x1b[32m\x1b[1m✓ Global infra ready.\x1b[0m\n');
|
|
@@ -72,50 +71,7 @@ function setupGitnexusMcp() {
|
|
|
72
71
|
: warn('MCP setup failed — run manually: claude mcp add gitnexus -- npx -y gitnexus@1.6.4-rc.79 mcp');
|
|
73
72
|
}
|
|
74
73
|
|
|
75
|
-
async function setupConfluenceMcp() {
|
|
76
|
-
step('Confluence MCP');
|
|
77
74
|
|
|
78
|
-
if (!hasCommand('claude')) {
|
|
79
|
-
info('Claude Code CLI not found — skip Confluence MCP setup');
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
const url = await promptInput(
|
|
84
|
-
' Confluence URL (blank to skip, e.g. http://confluence.company.com): '
|
|
85
|
-
);
|
|
86
|
-
|
|
87
|
-
if (!url) {
|
|
88
|
-
warn('Confluence MCP skipped — run manually later:\n' +
|
|
89
|
-
' claude mcp add confluence -e CONF_MODE=server \\\n' +
|
|
90
|
-
' -e CONF_BASE_URL=<your-url> \\\n' +
|
|
91
|
-
' -e CONF_AUTH_MODE=bearer \\\n' +
|
|
92
|
-
' -e CONF_TOKEN=<your-token> \\\n' +
|
|
93
|
-
' -- npx -y confluence-mcp-server');
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
const token = await promptSecret(
|
|
98
|
-
' Confluence Personal Access Token: '
|
|
99
|
-
);
|
|
100
|
-
|
|
101
|
-
if (!token) {
|
|
102
|
-
warn('Confluence MCP skipped — token is required');
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
const cmd = [
|
|
107
|
-
'claude mcp add confluence',
|
|
108
|
-
'-e CONF_MODE=server',
|
|
109
|
-
`-e CONF_BASE_URL=${url}`,
|
|
110
|
-
'-e CONF_AUTH_MODE=bearer',
|
|
111
|
-
`-e CONF_TOKEN=${token}`,
|
|
112
|
-
'-- npx -y confluence-mcp-server',
|
|
113
|
-
].join(' ');
|
|
114
|
-
|
|
115
|
-
exec(cmd)
|
|
116
|
-
? ok('Confluence MCP configured')
|
|
117
|
-
: warn('Confluence MCP setup failed — run manually (see above)');
|
|
118
|
-
}
|
|
119
75
|
|
|
120
76
|
async function setupVdsScriptsMcp() {
|
|
121
77
|
step('VDS Scripts MCP');
|
|
@@ -126,38 +82,49 @@ async function setupVdsScriptsMcp() {
|
|
|
126
82
|
}
|
|
127
83
|
|
|
128
84
|
const srcDir = path.join(PKG_ROOT, 'tools', 'vds-scripts');
|
|
85
|
+
const destDir = path.join(CLAUDE_HOME, 'vds-scripts');
|
|
86
|
+
const mcpDir = path.join(destDir, 'mcp_server');
|
|
87
|
+
|
|
88
|
+
info(`Source: ${srcDir}`);
|
|
129
89
|
if (!fs.existsSync(srcDir)) {
|
|
130
90
|
warn('Không tìm thấy source vds-scripts trong package — bỏ qua cài đặt.');
|
|
131
91
|
return;
|
|
132
92
|
}
|
|
133
93
|
|
|
134
|
-
const destDir = path.join(CLAUDE_HOME, 'vds-scripts');
|
|
135
|
-
const mcpDir = path.join(destDir, 'mcp_server');
|
|
136
|
-
|
|
137
|
-
info(`Đang copy mã nguồn vds-scripts vào ${destDir}...`);
|
|
138
94
|
fs.mkdirSync(path.dirname(destDir), { recursive: true });
|
|
139
95
|
copyDir(srcDir, destDir);
|
|
140
|
-
ok('
|
|
96
|
+
ok('Cài đặt thành công.');
|
|
141
97
|
|
|
142
98
|
step('Cấu hình VDS CLI và Credentials');
|
|
143
99
|
const envDir = path.join(require('os').homedir(), '.vds');
|
|
144
100
|
const envFile = path.join(envDir, '.env');
|
|
145
101
|
if (!fs.existsSync(envFile)) {
|
|
146
|
-
info('Đang khởi tạo file cấu hình ~/.vds/.env...');
|
|
147
102
|
fs.mkdirSync(envDir, { recursive: true });
|
|
148
103
|
|
|
149
|
-
info('Vui lòng cung cấp các thông tin xác thực sau (
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
104
|
+
info('Vui lòng cung cấp các thông tin xác thực sau (Bắt buộc):');
|
|
105
|
+
let vdsUsername = ''; while (!vdsUsername) vdsUsername = await promptInput(' Nhập VDS_USERNAME: ');
|
|
106
|
+
let vdsPassword = ''; while (!vdsPassword) vdsPassword = await promptSecret(' Nhập VDS_PASSWORD: ');
|
|
107
|
+
let bitbucketToken = ''; while (!bitbucketToken) bitbucketToken = await promptSecret(' Nhập BITBUCKET_TOKEN: ');
|
|
108
|
+
let jiraToken = ''; while (!jiraToken) jiraToken = await promptSecret(' Nhập JIRA_TOKEN: ');
|
|
109
|
+
let confluenceToken = ''; while (!confluenceToken) confluenceToken = await promptSecret(' Nhập INTERNAL_CONFLUENCE_TOKEN: ');
|
|
110
|
+
let extConfluenceToken = ''; while (!extConfluenceToken) extConfluenceToken = await promptSecret(' Nhập EXTERNAL_CONFLUENCE_TOKEN: ');
|
|
111
|
+
|
|
112
|
+
let jiraBaseUrl = ''; while (!jiraBaseUrl) jiraBaseUrl = await promptInput(' Nhập JIRA_BASE_URL (e.g. https://jira.viettelmoney.vn/): ');
|
|
113
|
+
let bitbucketBaseUrl = ''; while (!bitbucketBaseUrl) bitbucketBaseUrl = await promptInput(' Nhập BITBUCKET_BASE_URL (e.g. http://bitbucket.digital.vn): ');
|
|
114
|
+
let confluenceInternalUrl = ''; while (!confluenceInternalUrl) confluenceInternalUrl = await promptInput(' Nhập CONFLUENCE_INTERNAL_URL (e.g. http://10.254.136.35:8090): ');
|
|
115
|
+
let confluenceExternalUrl = ''; while (!confluenceExternalUrl) confluenceExternalUrl = await promptInput(' Nhập CONFLUENCE_EXTERNAL_URL (e.g. http://10.254.136.35:8090): ');
|
|
153
116
|
|
|
154
117
|
const envContent = [
|
|
155
118
|
`VDS_USERNAME=${vdsUsername}`,
|
|
156
119
|
`VDS_PASSWORD=${vdsPassword}`,
|
|
157
|
-
`
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
120
|
+
`BITBUCKET_TOKEN=${bitbucketToken}`,
|
|
121
|
+
`JIRA_TOKEN=${jiraToken}`,
|
|
122
|
+
`INTERNAL_CONFLUENCE_TOKEN=${confluenceToken}`,
|
|
123
|
+
`EXTERNAL_CONFLUENCE_TOKEN=${extConfluenceToken}`,
|
|
124
|
+
`JIRA_BASE_URL=${jiraBaseUrl}`,
|
|
125
|
+
`CONFLUENCE_INTERNAL_URL=${confluenceInternalUrl}`,
|
|
126
|
+
`CONFLUENCE_EXTERNAL_URL=${confluenceExternalUrl}`,
|
|
127
|
+
`BITBUCKET_BASE_URL=${bitbucketBaseUrl}`
|
|
161
128
|
].join('\n') + '\n';
|
|
162
129
|
|
|
163
130
|
fs.writeFileSync(envFile, envContent);
|
|
@@ -166,7 +133,6 @@ async function setupVdsScriptsMcp() {
|
|
|
166
133
|
ok('Đã tìm thấy file cấu hình ~/.vds/.env');
|
|
167
134
|
}
|
|
168
135
|
|
|
169
|
-
info('Đang cấu hình VDS Scripts MCP vào Claude...');
|
|
170
136
|
const cmd = `claude mcp add vds-orchestrator -- uv run --project "${mcpDir}" vds-mcp-server`;
|
|
171
137
|
|
|
172
138
|
if (exec(cmd)) {
|