@quint-security/cli 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/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +87 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/http-proxy.d.ts +3 -0
- package/dist/commands/http-proxy.d.ts.map +1 -0
- package/dist/commands/http-proxy.js +35 -0
- package/dist/commands/http-proxy.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +343 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/keys.d.ts +3 -0
- package/dist/commands/keys.d.ts.map +1 -0
- package/dist/commands/keys.js +58 -0
- package/dist/commands/keys.js.map +1 -0
- package/dist/commands/logs.d.ts +3 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +50 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/policy.d.ts +3 -0
- package/dist/commands/policy.d.ts.map +1 -0
- package/dist/commands/policy.js +39 -0
- package/dist/commands/policy.js.map +1 -0
- package/dist/commands/proxy.d.ts +3 -0
- package/dist/commands/proxy.d.ts.map +1 -0
- package/dist/commands/proxy.js +24 -0
- package/dist/commands/proxy.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +46 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/verify.d.ts +3 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +104 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/package.json +27 -0
- package/src/commands/auth.ts +103 -0
- package/src/commands/http-proxy.ts +34 -0
- package/src/commands/init.ts +408 -0
- package/src/commands/keys.ts +71 -0
- package/src/commands/logs.ts +59 -0
- package/src/commands/policy.ts +39 -0
- package/src/commands/proxy.ts +22 -0
- package/src/commands/status.ts +51 -0
- package/src/commands/verify.ts +117 -0
- package/src/index.ts +29 -0
- package/tsconfig.json +12 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,WAAW,SACuC,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.authCommand = void 0;
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const core_1 = require("@quint-security/core");
|
|
6
|
+
exports.authCommand = new commander_1.Command("auth")
|
|
7
|
+
.description("Manage authentication (API keys and sessions)");
|
|
8
|
+
exports.authCommand
|
|
9
|
+
.command("create-key")
|
|
10
|
+
.description("Create a new API key")
|
|
11
|
+
.requiredOption("--label <name>", "Human-readable label for the key")
|
|
12
|
+
.option("--scopes <scopes>", "Comma-separated scopes (e.g. proxy:read,audit:write)")
|
|
13
|
+
.option("--ttl <seconds>", "Time-to-live in seconds (0 = no expiry)", "0")
|
|
14
|
+
.action((opts) => {
|
|
15
|
+
const policy = (0, core_1.loadPolicy)();
|
|
16
|
+
const dataDir = (0, core_1.resolveDataDir)(policy.data_dir);
|
|
17
|
+
const db = (0, core_1.openAuthDb)(dataDir);
|
|
18
|
+
const scopes = opts.scopes ? opts.scopes.split(",").map((s) => s.trim()) : [];
|
|
19
|
+
const ttl = parseInt(opts.ttl, 10);
|
|
20
|
+
const { rawKey, apiKey } = (0, core_1.generateApiKey)(db, {
|
|
21
|
+
label: opts.label,
|
|
22
|
+
scopes,
|
|
23
|
+
ttlSeconds: ttl > 0 ? ttl : undefined,
|
|
24
|
+
});
|
|
25
|
+
console.log(`API key created.\n`);
|
|
26
|
+
console.log(` ID: ${apiKey.id}`);
|
|
27
|
+
console.log(` Label: ${apiKey.label}`);
|
|
28
|
+
console.log(` Scopes: ${apiKey.scopes || "(all)"}`);
|
|
29
|
+
console.log(` Expires: ${apiKey.expires_at ?? "never"}`);
|
|
30
|
+
console.log(`\n Raw key (SAVE THIS — shown only once):\n`);
|
|
31
|
+
console.log(` ${rawKey}\n`);
|
|
32
|
+
db.close();
|
|
33
|
+
});
|
|
34
|
+
exports.authCommand
|
|
35
|
+
.command("list-keys")
|
|
36
|
+
.description("List all API keys")
|
|
37
|
+
.action(() => {
|
|
38
|
+
const policy = (0, core_1.loadPolicy)();
|
|
39
|
+
const dataDir = (0, core_1.resolveDataDir)(policy.data_dir);
|
|
40
|
+
const db = (0, core_1.openAuthDb)(dataDir);
|
|
41
|
+
const keys = db.listApiKeys();
|
|
42
|
+
if (keys.length === 0) {
|
|
43
|
+
console.log("No API keys found. Create one with `quint auth create-key`.");
|
|
44
|
+
db.close();
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
console.log(`${keys.length} API key(s):\n`);
|
|
48
|
+
for (const key of keys) {
|
|
49
|
+
const status = key.revoked
|
|
50
|
+
? "REVOKED"
|
|
51
|
+
: key.expires_at && new Date(key.expires_at) < new Date()
|
|
52
|
+
? "EXPIRED"
|
|
53
|
+
: "active";
|
|
54
|
+
const icon = status === "active" ? "●" : "○";
|
|
55
|
+
console.log(` ${icon} ${key.id} ${key.label} [${status}] scopes=${key.scopes || "*"} created=${key.created_at}`);
|
|
56
|
+
}
|
|
57
|
+
db.close();
|
|
58
|
+
});
|
|
59
|
+
exports.authCommand
|
|
60
|
+
.command("revoke-key")
|
|
61
|
+
.description("Revoke an API key")
|
|
62
|
+
.requiredOption("--id <id>", "API key ID to revoke")
|
|
63
|
+
.action((opts) => {
|
|
64
|
+
const policy = (0, core_1.loadPolicy)();
|
|
65
|
+
const dataDir = (0, core_1.resolveDataDir)(policy.data_dir);
|
|
66
|
+
const db = (0, core_1.openAuthDb)(dataDir);
|
|
67
|
+
const key = db.getApiKeyById(opts.id);
|
|
68
|
+
if (!key) {
|
|
69
|
+
console.error(`API key not found: ${opts.id}`);
|
|
70
|
+
db.close();
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
if (key.revoked) {
|
|
74
|
+
console.log(`Key ${opts.id} is already revoked.`);
|
|
75
|
+
db.close();
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
db.revokeApiKey(opts.id);
|
|
79
|
+
// Also revoke any sessions issued to this key
|
|
80
|
+
const revoked = db.revokeSessionsBySubject(opts.id);
|
|
81
|
+
console.log(`Revoked key ${opts.id} (${key.label}).`);
|
|
82
|
+
if (revoked > 0) {
|
|
83
|
+
console.log(` Also revoked ${revoked} active session(s).`);
|
|
84
|
+
}
|
|
85
|
+
db.close();
|
|
86
|
+
});
|
|
87
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-proxy.d.ts","sourceRoot":"","sources":["../../src/commands/http-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,gBAAgB,SA6BzB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.httpProxyCommand = void 0;
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const core_1 = require("@quint-security/core");
|
|
6
|
+
const proxy_1 = require("@quint-security/proxy");
|
|
7
|
+
exports.httpProxyCommand = new commander_1.Command("http-proxy")
|
|
8
|
+
.description("Run as HTTP proxy in front of a remote MCP server")
|
|
9
|
+
.requiredOption("--name <name>", "Name identifier for the proxied server")
|
|
10
|
+
.requiredOption("--port <port>", "Local port to listen on", parseInt)
|
|
11
|
+
.requiredOption("--target <url>", "Remote MCP server URL to proxy to")
|
|
12
|
+
.option("--policy <path>", "Path to policy.json (default: ~/.quint/policy.json)")
|
|
13
|
+
.option("--require-auth", "Require API key authentication on all requests")
|
|
14
|
+
.action(async (opts) => {
|
|
15
|
+
if (isNaN(opts.port) || opts.port < 1 || opts.port > 65535) {
|
|
16
|
+
process.stderr.write("quint: --port must be a valid port number (1-65535)\n");
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
new URL(opts.target);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
process.stderr.write(`quint: --target must be a valid URL\n`);
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
const policy = (0, core_1.loadPolicy)(opts.policy ? opts.policy : undefined);
|
|
27
|
+
await (0, proxy_1.startHttpProxy)({
|
|
28
|
+
serverName: opts.name,
|
|
29
|
+
port: opts.port,
|
|
30
|
+
targetUrl: opts.target,
|
|
31
|
+
policy,
|
|
32
|
+
requireAuth: opts.requireAuth,
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=http-proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-proxy.js","sourceRoot":"","sources":["../../src/commands/http-proxy.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC,+CAAkD;AAClD,iDAAuD;AAE1C,QAAA,gBAAgB,GAAG,IAAI,mBAAO,CAAC,YAAY,CAAC;KACtD,WAAW,CAAC,mDAAmD,CAAC;KAChE,cAAc,CAAC,eAAe,EAAE,wCAAwC,CAAC;KACzE,cAAc,CAAC,eAAe,EAAE,yBAAyB,EAAE,QAAQ,CAAC;KACpE,cAAc,CAAC,gBAAgB,EAAE,mCAAmC,CAAC;KACrE,MAAM,CAAC,iBAAiB,EAAE,qDAAqD,CAAC;KAChF,MAAM,CAAC,gBAAgB,EAAE,gDAAgD,CAAC;KAC1E,MAAM,CAAC,KAAK,EAAE,IAA4F,EAAE,EAAE;IAC7G,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,EAAE,CAAC;QAC3D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,iBAAU,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAEjE,MAAM,IAAA,sBAAc,EAAC;QACnB,UAAU,EAAE,IAAI,CAAC,IAAI;QACrB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,SAAS,EAAE,IAAI,CAAC,MAAM;QACtB,MAAM;QACN,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0NpC,eAAO,MAAM,WAAW,SA6LpB,CAAC"}
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.initCommand = void 0;
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const node_fs_1 = require("node:fs");
|
|
6
|
+
const node_path_1 = require("node:path");
|
|
7
|
+
const node_os_1 = require("node:os");
|
|
8
|
+
const core_1 = require("@quint-security/core");
|
|
9
|
+
const ROLE_PRESETS = {
|
|
10
|
+
"coding-assistant": {
|
|
11
|
+
name: "Coding Assistant",
|
|
12
|
+
description: "Read/write project files, run builds and tests. Block destructive ops, shell access outside project, and sensitive file access.",
|
|
13
|
+
defaultAction: "allow",
|
|
14
|
+
tools: [
|
|
15
|
+
{ tool: "Delete*", action: "deny" },
|
|
16
|
+
{ tool: "Remove*", action: "deny" },
|
|
17
|
+
{ tool: "Drop*", action: "deny" },
|
|
18
|
+
{ tool: "MechanicRun*", action: "deny" },
|
|
19
|
+
{ tool: "TicketingWrite*", action: "deny" },
|
|
20
|
+
],
|
|
21
|
+
},
|
|
22
|
+
"research-agent": {
|
|
23
|
+
name: "Research Agent",
|
|
24
|
+
description: "Read-only access. Can fetch web pages and search. All write/execute operations denied.",
|
|
25
|
+
defaultAction: "deny",
|
|
26
|
+
tools: [
|
|
27
|
+
{ tool: "Read*", action: "allow" },
|
|
28
|
+
{ tool: "Get*", action: "allow" },
|
|
29
|
+
{ tool: "List*", action: "allow" },
|
|
30
|
+
{ tool: "Search*", action: "allow" },
|
|
31
|
+
{ tool: "Fetch*", action: "allow" },
|
|
32
|
+
{ tool: "ReadInternalWebsites", action: "allow" },
|
|
33
|
+
{ tool: "MechanicDiscoverTools", action: "allow" },
|
|
34
|
+
{ tool: "MechanicDescribeTool", action: "allow" },
|
|
35
|
+
],
|
|
36
|
+
},
|
|
37
|
+
"strict": {
|
|
38
|
+
name: "Strict",
|
|
39
|
+
description: "Deny everything by default. Manually allowlist tools as needed.",
|
|
40
|
+
defaultAction: "deny",
|
|
41
|
+
tools: [],
|
|
42
|
+
},
|
|
43
|
+
"permissive": {
|
|
44
|
+
name: "Permissive",
|
|
45
|
+
description: "Allow everything, deny only known-dangerous operations. Good for trusted environments.",
|
|
46
|
+
defaultAction: "allow",
|
|
47
|
+
tools: [
|
|
48
|
+
{ tool: "Delete*", action: "deny" },
|
|
49
|
+
{ tool: "Remove*", action: "deny" },
|
|
50
|
+
{ tool: "Drop*", action: "deny" },
|
|
51
|
+
],
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
function detectMcpServers() {
|
|
55
|
+
const claudeConfigPath = (0, node_path_1.join)((0, node_os_1.homedir)(), ".claude.json");
|
|
56
|
+
if (!(0, node_fs_1.existsSync)(claudeConfigPath)) {
|
|
57
|
+
return [];
|
|
58
|
+
}
|
|
59
|
+
const raw = (0, node_fs_1.readFileSync)(claudeConfigPath, "utf-8");
|
|
60
|
+
let config;
|
|
61
|
+
try {
|
|
62
|
+
config = JSON.parse(raw);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
const servers = [];
|
|
68
|
+
const seen = new Set();
|
|
69
|
+
// Global MCP servers
|
|
70
|
+
const globalServers = config.mcpServers;
|
|
71
|
+
if (globalServers && typeof globalServers === "object") {
|
|
72
|
+
for (const [name, srv] of Object.entries(globalServers)) {
|
|
73
|
+
if (!seen.has(name)) {
|
|
74
|
+
seen.add(name);
|
|
75
|
+
servers.push({
|
|
76
|
+
name,
|
|
77
|
+
config: srv,
|
|
78
|
+
source: "global",
|
|
79
|
+
alreadyProxied: isAlreadyProxied(srv),
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Project-level MCP servers (current working directory)
|
|
85
|
+
const projects = config.projects;
|
|
86
|
+
if (projects) {
|
|
87
|
+
const cwd = process.cwd();
|
|
88
|
+
for (const [projectPath, proj] of Object.entries(projects)) {
|
|
89
|
+
if (cwd.startsWith(projectPath) && proj.mcpServers) {
|
|
90
|
+
for (const [name, srv] of Object.entries(proj.mcpServers)) {
|
|
91
|
+
if (!seen.has(name)) {
|
|
92
|
+
seen.add(name);
|
|
93
|
+
servers.push({
|
|
94
|
+
name,
|
|
95
|
+
config: srv,
|
|
96
|
+
source: "project",
|
|
97
|
+
alreadyProxied: isAlreadyProxied(srv),
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return servers;
|
|
105
|
+
}
|
|
106
|
+
function isAlreadyProxied(srv) {
|
|
107
|
+
return srv.command === "quint" || srv.command === "node" && (srv.args ?? []).some(a => a.includes("quint"));
|
|
108
|
+
}
|
|
109
|
+
// ── Generate wrapped config ─────────────────────────────────────
|
|
110
|
+
function generateWrappedConfig(server) {
|
|
111
|
+
if (server.alreadyProxied)
|
|
112
|
+
return null;
|
|
113
|
+
if (server.config.type === "stdio") {
|
|
114
|
+
return {
|
|
115
|
+
type: "stdio",
|
|
116
|
+
command: "quint",
|
|
117
|
+
args: [
|
|
118
|
+
"proxy",
|
|
119
|
+
"--name", server.name,
|
|
120
|
+
"--",
|
|
121
|
+
server.config.command,
|
|
122
|
+
...(server.config.args ?? []),
|
|
123
|
+
],
|
|
124
|
+
env: server.config.env ?? {},
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
if (server.config.type === "http" && server.config.url) {
|
|
128
|
+
return {
|
|
129
|
+
type: "stdio",
|
|
130
|
+
command: "quint",
|
|
131
|
+
args: [
|
|
132
|
+
"http-proxy",
|
|
133
|
+
"--name", server.name,
|
|
134
|
+
"--target", server.config.url,
|
|
135
|
+
],
|
|
136
|
+
env: server.config.env ?? {},
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
// ── Apply changes to claude.json ────────────────────────────────
|
|
142
|
+
function applyToClaudeConfig(servers) {
|
|
143
|
+
const claudeConfigPath = (0, node_path_1.join)((0, node_os_1.homedir)(), ".claude.json");
|
|
144
|
+
const raw = (0, node_fs_1.readFileSync)(claudeConfigPath, "utf-8");
|
|
145
|
+
const config = JSON.parse(raw);
|
|
146
|
+
let applied = 0;
|
|
147
|
+
for (const server of servers) {
|
|
148
|
+
if (server.alreadyProxied)
|
|
149
|
+
continue;
|
|
150
|
+
const wrapped = generateWrappedConfig(server);
|
|
151
|
+
if (!wrapped)
|
|
152
|
+
continue;
|
|
153
|
+
if (server.source === "global" && config.mcpServers?.[server.name]) {
|
|
154
|
+
config.mcpServers[server.name] = wrapped;
|
|
155
|
+
applied++;
|
|
156
|
+
}
|
|
157
|
+
else if (server.source === "project") {
|
|
158
|
+
// Find the project entry
|
|
159
|
+
for (const [projectPath, proj] of Object.entries(config.projects)) {
|
|
160
|
+
if (proj.mcpServers?.[server.name]) {
|
|
161
|
+
proj.mcpServers[server.name] = wrapped;
|
|
162
|
+
applied++;
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
(0, node_fs_1.writeFileSync)(claudeConfigPath, JSON.stringify(config, null, 2) + "\n");
|
|
169
|
+
return { applied, path: claudeConfigPath };
|
|
170
|
+
}
|
|
171
|
+
// ── The init command ────────────────────────────────────────────
|
|
172
|
+
exports.initCommand = new commander_1.Command("init")
|
|
173
|
+
.description("Set up Quint: detect MCP servers, generate keys, create policy, and optionally wrap your config")
|
|
174
|
+
.option("--role <role>", "Use a pre-built role preset (coding-assistant, research-agent, strict, permissive)")
|
|
175
|
+
.option("--apply", "Apply changes to ~/.claude.json (wraps MCP servers through Quint)")
|
|
176
|
+
.option("--revert", "Revert all Quint-proxied MCP servers back to direct connections")
|
|
177
|
+
.option("--dry-run", "Show what would change without modifying anything")
|
|
178
|
+
.option("--list-roles", "Show available role presets")
|
|
179
|
+
.action((opts) => {
|
|
180
|
+
// ── List roles ──
|
|
181
|
+
if (opts.listRoles) {
|
|
182
|
+
console.log("Available role presets:\n");
|
|
183
|
+
for (const [id, preset] of Object.entries(ROLE_PRESETS)) {
|
|
184
|
+
console.log(` ${id}`);
|
|
185
|
+
console.log(` ${preset.description}`);
|
|
186
|
+
console.log(` Default: ${preset.defaultAction}, ${preset.tools.length} tool rules`);
|
|
187
|
+
console.log("");
|
|
188
|
+
}
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
// ── Revert ──
|
|
192
|
+
if (opts.revert) {
|
|
193
|
+
const servers = detectMcpServers();
|
|
194
|
+
const proxied = servers.filter(s => s.alreadyProxied);
|
|
195
|
+
if (proxied.length === 0) {
|
|
196
|
+
console.log("No Quint-proxied servers found. Nothing to revert.");
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
if (opts.dryRun) {
|
|
200
|
+
console.log("Would revert these servers to direct connections:\n");
|
|
201
|
+
for (const s of proxied) {
|
|
202
|
+
// Extract the original command from quint proxy args
|
|
203
|
+
const args = s.config.args ?? [];
|
|
204
|
+
const dashDashIdx = args.indexOf("--");
|
|
205
|
+
if (dashDashIdx >= 0) {
|
|
206
|
+
const origCmd = args[dashDashIdx + 1];
|
|
207
|
+
const origArgs = args.slice(dashDashIdx + 2);
|
|
208
|
+
console.log(` ${s.name}: quint proxy → ${origCmd} ${origArgs.join(" ")}`);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
const claudeConfigPath = (0, node_path_1.join)((0, node_os_1.homedir)(), ".claude.json");
|
|
214
|
+
const raw = (0, node_fs_1.readFileSync)(claudeConfigPath, "utf-8");
|
|
215
|
+
const config = JSON.parse(raw);
|
|
216
|
+
let reverted = 0;
|
|
217
|
+
for (const s of proxied) {
|
|
218
|
+
const args = s.config.args ?? [];
|
|
219
|
+
const dashDashIdx = args.indexOf("--");
|
|
220
|
+
if (dashDashIdx < 0)
|
|
221
|
+
continue;
|
|
222
|
+
const origCmd = args[dashDashIdx + 1];
|
|
223
|
+
const origArgs = args.slice(dashDashIdx + 2);
|
|
224
|
+
const restored = {
|
|
225
|
+
type: "stdio",
|
|
226
|
+
command: origCmd,
|
|
227
|
+
args: origArgs,
|
|
228
|
+
env: s.config.env ?? {},
|
|
229
|
+
};
|
|
230
|
+
// Restore in the correct location
|
|
231
|
+
if (s.source === "global" && config.mcpServers?.[s.name]) {
|
|
232
|
+
config.mcpServers[s.name] = restored;
|
|
233
|
+
reverted++;
|
|
234
|
+
}
|
|
235
|
+
else if (s.source === "project" && config.projects) {
|
|
236
|
+
for (const proj of Object.values(config.projects)) {
|
|
237
|
+
if (proj.mcpServers?.[s.name]) {
|
|
238
|
+
proj.mcpServers[s.name] = restored;
|
|
239
|
+
reverted++;
|
|
240
|
+
break;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
(0, node_fs_1.writeFileSync)(claudeConfigPath, JSON.stringify(config, null, 2) + "\n");
|
|
246
|
+
console.log(`Reverted ${reverted} server(s) to direct connections.`);
|
|
247
|
+
console.log("Restart Claude Code for changes to take effect.");
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
// ── Normal init flow ──
|
|
251
|
+
console.log("Quint Setup\n");
|
|
252
|
+
// Step 1: Detect MCP servers
|
|
253
|
+
const servers = detectMcpServers();
|
|
254
|
+
if (servers.length === 0) {
|
|
255
|
+
console.log(" No MCP servers found in ~/.claude.json");
|
|
256
|
+
console.log(" Quint works by wrapping existing MCP servers.");
|
|
257
|
+
console.log(" Add MCP servers to Claude Code first, then run quint init again.");
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
console.log(` Found ${servers.length} MCP server(s):\n`);
|
|
261
|
+
for (const s of servers) {
|
|
262
|
+
const status = s.alreadyProxied ? " (already proxied)" : "";
|
|
263
|
+
const type = s.config.type === "http" ? ` [HTTP: ${s.config.url}]` : ` [stdio: ${s.config.command}]`;
|
|
264
|
+
console.log(` ${s.name}${type} (${s.source})${status}`);
|
|
265
|
+
}
|
|
266
|
+
const toWrap = servers.filter(s => !s.alreadyProxied);
|
|
267
|
+
if (toWrap.length === 0) {
|
|
268
|
+
console.log("\n All servers are already proxied through Quint.");
|
|
269
|
+
}
|
|
270
|
+
// Step 2: Generate keys
|
|
271
|
+
console.log("");
|
|
272
|
+
const dataDir = (0, core_1.resolveDataDir)("~/.quint");
|
|
273
|
+
const kp = (0, core_1.ensureKeyPair)(dataDir);
|
|
274
|
+
console.log(` Keys: ${(0, core_1.publicKeyFingerprint)(kp.publicKey)} (ready)`);
|
|
275
|
+
// Step 3: Generate policy
|
|
276
|
+
const role = opts.role ? ROLE_PRESETS[opts.role] : undefined;
|
|
277
|
+
if (opts.role && !role) {
|
|
278
|
+
console.error(`\n Unknown role: ${opts.role}`);
|
|
279
|
+
console.error(` Available: ${Object.keys(ROLE_PRESETS).join(", ")}`);
|
|
280
|
+
process.exit(1);
|
|
281
|
+
}
|
|
282
|
+
const serverPolicies = [];
|
|
283
|
+
for (const s of servers) {
|
|
284
|
+
if (role) {
|
|
285
|
+
serverPolicies.push({
|
|
286
|
+
server: s.name,
|
|
287
|
+
default_action: role.defaultAction,
|
|
288
|
+
tools: [...role.tools],
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
serverPolicies.push({
|
|
293
|
+
server: s.name,
|
|
294
|
+
default_action: "allow",
|
|
295
|
+
tools: [],
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
// Always add wildcard fallback
|
|
300
|
+
serverPolicies.push({ server: "*", default_action: "allow", tools: [] });
|
|
301
|
+
const policy = {
|
|
302
|
+
version: 1,
|
|
303
|
+
data_dir: "~/.quint",
|
|
304
|
+
log_level: "info",
|
|
305
|
+
servers: serverPolicies,
|
|
306
|
+
};
|
|
307
|
+
const policyPath = (0, node_path_1.join)(dataDir, "policy.json");
|
|
308
|
+
if (!(0, node_fs_1.existsSync)(policyPath)) {
|
|
309
|
+
(0, node_fs_1.writeFileSync)(policyPath, JSON.stringify(policy, null, 2) + "\n");
|
|
310
|
+
console.log(` Policy: ${policyPath} (created${role ? `, role: ${role.name}` : ""})`);
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
console.log(` Policy: ${policyPath} (exists, not overwritten)`);
|
|
314
|
+
}
|
|
315
|
+
// Step 4: Show or apply config changes
|
|
316
|
+
if (toWrap.length > 0) {
|
|
317
|
+
console.log(`\n Config changes needed for ${toWrap.length} server(s):\n`);
|
|
318
|
+
for (const s of toWrap) {
|
|
319
|
+
const wrapped = generateWrappedConfig(s);
|
|
320
|
+
if (!wrapped)
|
|
321
|
+
continue;
|
|
322
|
+
console.log(` ${s.name}:`);
|
|
323
|
+
console.log(` before: ${JSON.stringify({ command: s.config.command, args: s.config.args ?? [] })}`);
|
|
324
|
+
console.log(` after: ${JSON.stringify({ command: wrapped.command, args: wrapped.args })}`);
|
|
325
|
+
console.log("");
|
|
326
|
+
}
|
|
327
|
+
if (opts.apply && !opts.dryRun) {
|
|
328
|
+
const result = applyToClaudeConfig(toWrap);
|
|
329
|
+
console.log(` Applied ${result.applied} change(s) to ${result.path}`);
|
|
330
|
+
console.log(" Restart Claude Code for changes to take effect.");
|
|
331
|
+
}
|
|
332
|
+
else if (opts.dryRun) {
|
|
333
|
+
console.log(" (dry run — no changes made)");
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
336
|
+
console.log(" Run with --apply to modify ~/.claude.json automatically.");
|
|
337
|
+
console.log(" Run with --dry-run to preview without changes.");
|
|
338
|
+
console.log(" Run with --revert to undo Quint proxying.");
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
console.log("\n Setup complete. Run `quint status` to verify.");
|
|
342
|
+
});
|
|
343
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/commands/keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,eAAO,MAAM,WAAW,SACqB,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.keysCommand = void 0;
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const core_1 = require("@quint-security/core");
|
|
6
|
+
const node_fs_1 = require("node:fs");
|
|
7
|
+
const node_path_1 = require("node:path");
|
|
8
|
+
exports.keysCommand = new commander_1.Command("keys")
|
|
9
|
+
.description("Manage Ed25519 signing keys");
|
|
10
|
+
exports.keysCommand
|
|
11
|
+
.command("generate")
|
|
12
|
+
.description("Generate a new Ed25519 keypair")
|
|
13
|
+
.option("--force", "Overwrite existing keys")
|
|
14
|
+
.action((opts) => {
|
|
15
|
+
const policy = (0, core_1.loadPolicy)();
|
|
16
|
+
const dataDir = (0, core_1.resolveDataDir)(policy.data_dir);
|
|
17
|
+
const privPath = (0, node_path_1.join)(dataDir, "keys", "quint.key");
|
|
18
|
+
if ((0, node_fs_1.existsSync)(privPath) && !opts.force) {
|
|
19
|
+
console.log("Keys already exist. Use --force to overwrite.");
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const kp = (0, core_1.generateKeyPair)();
|
|
23
|
+
(0, core_1.saveKeyPair)(dataDir, kp);
|
|
24
|
+
const fp = (0, core_1.publicKeyFingerprint)(kp.publicKey);
|
|
25
|
+
console.log(`Ed25519 keypair generated.`);
|
|
26
|
+
console.log(` Private key: ${(0, node_path_1.join)(dataDir, "keys", "quint.key")} (mode 0600)`);
|
|
27
|
+
console.log(` Public key: ${(0, node_path_1.join)(dataDir, "keys", "quint.pub")}`);
|
|
28
|
+
console.log(` Fingerprint: ${fp}`);
|
|
29
|
+
});
|
|
30
|
+
exports.keysCommand
|
|
31
|
+
.command("show")
|
|
32
|
+
.description("Show current public key")
|
|
33
|
+
.action(() => {
|
|
34
|
+
const policy = (0, core_1.loadPolicy)();
|
|
35
|
+
const dataDir = (0, core_1.resolveDataDir)(policy.data_dir);
|
|
36
|
+
const kp = (0, core_1.loadKeyPair)(dataDir);
|
|
37
|
+
if (!kp) {
|
|
38
|
+
console.log("No keys found. Run `quint keys generate` first.");
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const fp = (0, core_1.publicKeyFingerprint)(kp.publicKey);
|
|
42
|
+
console.log(`Public key fingerprint: ${fp}`);
|
|
43
|
+
console.log(`\n${kp.publicKey.trim()}`);
|
|
44
|
+
});
|
|
45
|
+
exports.keysCommand
|
|
46
|
+
.command("export")
|
|
47
|
+
.description("Export public key to stdout")
|
|
48
|
+
.action(() => {
|
|
49
|
+
const policy = (0, core_1.loadPolicy)();
|
|
50
|
+
const dataDir = (0, core_1.resolveDataDir)(policy.data_dir);
|
|
51
|
+
const kp = (0, core_1.loadKeyPair)(dataDir);
|
|
52
|
+
if (!kp) {
|
|
53
|
+
console.error("No keys found. Run `quint keys generate` first.");
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
process.stdout.write(kp.publicKey);
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/commands/keys.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,eAAO,MAAM,WAAW,SA+CpB,CAAC"}
|