@vibe-assurance/cli 1.0.2 → 1.0.4
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 +4 -3
- package/src/commands/login.js +1 -0
- package/src/commands/setup-claude.js +37 -48
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibe-assurance/cli",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "Vibe Assurance CLI - Connect
|
|
3
|
+
"version": "1.0.4",
|
|
4
|
+
"description": "Vibe Assurance CLI - Connect AI coding agents to your governance platform via MCP",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"vibe": "./bin/vibe.js"
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
"vibe-assurance",
|
|
15
15
|
"governance",
|
|
16
16
|
"mcp",
|
|
17
|
-
"
|
|
17
|
+
"model-context-protocol",
|
|
18
|
+
"ai-agents",
|
|
18
19
|
"compliance",
|
|
19
20
|
"security"
|
|
20
21
|
],
|
package/src/commands/login.js
CHANGED
|
@@ -145,6 +145,7 @@ async function login() {
|
|
|
145
145
|
console.log(' 1. Run `vibe setup-claude` to configure Claude Code');
|
|
146
146
|
console.log(' 2. Restart Claude Code');
|
|
147
147
|
console.log(' 3. Start using vibe_* tools in your conversations');
|
|
148
|
+
process.exit(0); // Exit cleanly after successful login
|
|
148
149
|
} catch (err) {
|
|
149
150
|
cleanup();
|
|
150
151
|
spinner.fail(`Authentication failed: ${err.message}`);
|
|
@@ -4,25 +4,24 @@ const os = require('os');
|
|
|
4
4
|
const chalk = require('chalk');
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
7
|
+
* Claude Code MCP configuration paths
|
|
8
|
+
*
|
|
9
|
+
* Per Claude Code documentation:
|
|
10
|
+
* - User (global): ~/.claude.json - MCP servers available across all projects
|
|
11
|
+
* - Project: .mcp.json in project root - Team-shared servers
|
|
12
|
+
*
|
|
13
|
+
* We default to user-level config for global availability
|
|
9
14
|
*/
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
path.join(os.homedir(), '.claude', 'mcp.json'),
|
|
13
|
-
// macOS Application Support
|
|
14
|
-
path.join(os.homedir(), 'Library', 'Application Support', 'Claude', 'mcp.json'),
|
|
15
|
-
// Windows AppData
|
|
16
|
-
path.join(os.homedir(), 'AppData', 'Roaming', 'Claude', 'mcp.json'),
|
|
17
|
-
// Linux config
|
|
18
|
-
path.join(os.homedir(), '.config', 'claude', 'mcp.json')
|
|
19
|
-
];
|
|
15
|
+
const USER_CONFIG_PATH = path.join(os.homedir(), '.claude.json');
|
|
16
|
+
const PROJECT_CONFIG_NAME = '.mcp.json';
|
|
20
17
|
|
|
21
18
|
/**
|
|
22
19
|
* MCP server configuration for Vibe Assurance
|
|
20
|
+
* Uses stdio transport type for local CLI execution
|
|
23
21
|
*/
|
|
24
22
|
const VIBE_MCP_CONFIG = {
|
|
25
23
|
vibeassurance: {
|
|
24
|
+
type: 'stdio',
|
|
26
25
|
command: 'vibe',
|
|
27
26
|
args: ['mcp-server']
|
|
28
27
|
}
|
|
@@ -32,43 +31,37 @@ const VIBE_MCP_CONFIG = {
|
|
|
32
31
|
* Setup Claude command
|
|
33
32
|
*
|
|
34
33
|
* Configures Claude Code to use the Vibe Assurance MCP server
|
|
35
|
-
* by adding the vibeassurance entry to
|
|
34
|
+
* by adding the vibeassurance entry to ~/.claude.json
|
|
35
|
+
*
|
|
36
|
+
* Per Claude Code docs, user-level config goes in ~/.claude.json
|
|
36
37
|
*/
|
|
37
38
|
async function setupClaude() {
|
|
38
39
|
console.log(chalk.blue('Configuring Claude Code to use Vibe Assurance MCP server...\n'));
|
|
39
40
|
|
|
40
|
-
|
|
41
|
-
let configPath = null;
|
|
41
|
+
const configPath = USER_CONFIG_PATH;
|
|
42
42
|
let existingConfig = {};
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
existingConfig = {};
|
|
54
|
-
}
|
|
55
|
-
break;
|
|
44
|
+
// Read existing config if it exists
|
|
45
|
+
if (fs.existsSync(configPath)) {
|
|
46
|
+
try {
|
|
47
|
+
const content = fs.readFileSync(configPath, 'utf8');
|
|
48
|
+
existingConfig = JSON.parse(content);
|
|
49
|
+
console.log(chalk.gray(`Found existing config at: ${configPath}`));
|
|
50
|
+
} catch (err) {
|
|
51
|
+
console.log(chalk.yellow(`Config file exists but couldn't parse JSON. Will merge carefully.`));
|
|
52
|
+
existingConfig = {};
|
|
56
53
|
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// If no existing config found, use the default path
|
|
60
|
-
if (!configPath) {
|
|
61
|
-
configPath = MCP_CONFIG_PATHS[0];
|
|
54
|
+
} else {
|
|
62
55
|
console.log(chalk.gray(`Creating new config at: ${configPath}`));
|
|
63
56
|
}
|
|
64
57
|
|
|
65
58
|
// Check if vibeassurance is already configured
|
|
66
59
|
if (existingConfig.mcpServers?.vibeassurance) {
|
|
67
60
|
console.log(chalk.yellow('Vibe Assurance is already configured in Claude Code.'));
|
|
68
|
-
console.log('Updating configuration
|
|
61
|
+
console.log('Updating configuration...\n');
|
|
69
62
|
}
|
|
70
63
|
|
|
71
|
-
// Merge configuration
|
|
64
|
+
// Merge configuration (preserve all existing settings)
|
|
72
65
|
const newConfig = {
|
|
73
66
|
...existingConfig,
|
|
74
67
|
mcpServers: {
|
|
@@ -77,36 +70,32 @@ async function setupClaude() {
|
|
|
77
70
|
}
|
|
78
71
|
};
|
|
79
72
|
|
|
80
|
-
// Ensure directory exists
|
|
81
|
-
const configDir = path.dirname(configPath);
|
|
82
|
-
if (!fs.existsSync(configDir)) {
|
|
83
|
-
fs.mkdirSync(configDir, { recursive: true });
|
|
84
|
-
console.log(chalk.gray(`Created directory: ${configDir}`));
|
|
85
|
-
}
|
|
86
|
-
|
|
87
73
|
// Write configuration
|
|
88
74
|
fs.writeFileSync(configPath, JSON.stringify(newConfig, null, 2));
|
|
89
75
|
|
|
90
76
|
// Success output
|
|
91
|
-
console.log();
|
|
92
77
|
console.log(chalk.green('Success!') + ' Claude Code has been configured.\n');
|
|
93
78
|
|
|
94
79
|
console.log('Configuration written to:');
|
|
95
|
-
console.log(chalk.
|
|
80
|
+
console.log(chalk.cyan(` ${configPath}\n`));
|
|
96
81
|
|
|
97
82
|
console.log('The following MCP server was added:');
|
|
98
|
-
console.log(chalk.gray(' vibeassurance:
|
|
83
|
+
console.log(chalk.gray(' vibeassurance:'));
|
|
84
|
+
console.log(chalk.gray(' type: stdio'));
|
|
85
|
+
console.log(chalk.gray(' command: vibe mcp-server\n'));
|
|
99
86
|
|
|
100
87
|
console.log(chalk.blue('Next steps:'));
|
|
101
|
-
console.log(' 1. Restart Claude Code');
|
|
88
|
+
console.log(' 1. Restart Claude Code (close and reopen)');
|
|
102
89
|
console.log(' 2. The vibe_* tools will be available automatically');
|
|
103
90
|
console.log(' 3. Try asking: "Get my governance context"\n');
|
|
104
91
|
|
|
105
92
|
console.log(chalk.gray('Available tools after restart:'));
|
|
106
|
-
console.log(chalk.gray(' - vibe_get_role
|
|
107
|
-
console.log(chalk.gray(' -
|
|
93
|
+
console.log(chalk.gray(' - vibe_get_role : Get AI analyst role prompts'));
|
|
94
|
+
console.log(chalk.gray(' - vibe_list_roles : List all available roles'));
|
|
95
|
+
console.log(chalk.gray(' - vibe_get_context : Get CRs, risks, vulnerabilities'));
|
|
96
|
+
console.log(chalk.gray(' - vibe_get_template : Get document templates'));
|
|
108
97
|
console.log(chalk.gray(' - vibe_store_artifact: Store created documents'));
|
|
109
|
-
console.log(chalk.gray(' -
|
|
98
|
+
console.log(chalk.gray(' - vibe_list_artifacts: List stored documents\n'));
|
|
110
99
|
}
|
|
111
100
|
|
|
112
101
|
module.exports = setupClaude;
|