hoolix 0.0.1 → 0.0.3
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/README.md +31 -1
- package/dist/commands/approvals.d.ts +2 -0
- package/dist/commands/approvals.d.ts.map +1 -0
- package/dist/commands/approvals.js +65 -0
- package/dist/commands/approvals.js.map +1 -0
- package/dist/commands/completion.d.ts.map +1 -1
- package/dist/commands/completion.js +123 -2
- package/dist/commands/completion.js.map +1 -1
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +8 -0
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +44 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/gateway.d.ts +2 -0
- package/dist/commands/gateway.d.ts.map +1 -0
- package/dist/commands/gateway.js +237 -0
- package/dist/commands/gateway.js.map +1 -0
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +22 -3
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/profile.d.ts +2 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +169 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/core/approvals.d.ts +67 -0
- package/dist/core/approvals.d.ts.map +1 -0
- package/dist/core/approvals.js +104 -0
- package/dist/core/approvals.js.map +1 -0
- package/dist/core/gateways.d.ts +62 -0
- package/dist/core/gateways.d.ts.map +1 -0
- package/dist/core/gateways.js +115 -0
- package/dist/core/gateways.js.map +1 -0
- package/dist/core/paths.d.ts +9 -0
- package/dist/core/paths.d.ts.map +1 -1
- package/dist/core/paths.js +27 -0
- package/dist/core/paths.js.map +1 -1
- package/dist/core/policy.d.ts +20 -0
- package/dist/core/policy.d.ts.map +1 -0
- package/dist/core/policy.js +95 -0
- package/dist/core/policy.js.map +1 -0
- package/dist/core/profiles.d.ts +141 -0
- package/dist/core/profiles.d.ts.map +1 -0
- package/dist/core/profiles.js +159 -0
- package/dist/core/profiles.js.map +1 -0
- package/dist/core/version.d.ts +1 -1
- package/dist/core/version.js +1 -1
- package/dist/index.js +38 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/gateway-host.d.ts +8 -0
- package/dist/mcp/gateway-host.d.ts.map +1 -0
- package/dist/mcp/gateway-host.js +447 -0
- package/dist/mcp/gateway-host.js.map +1 -0
- package/dist/mcp/proxy-host.d.ts.map +1 -1
- package/dist/mcp/proxy-host.js +3 -2
- package/dist/mcp/proxy-host.js.map +1 -1
- package/dist/process/manager.d.ts +17 -1
- package/dist/process/manager.d.ts.map +1 -1
- package/dist/process/manager.js +105 -1
- package/dist/process/manager.js.map +1 -1
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +223 -32
- package/dist/tui/index.js.map +1 -1
- package/dist/ui/help.d.ts.map +1 -1
- package/dist/ui/help.js +10 -0
- package/dist/ui/help.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import fs from 'fs-extra';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { createGateway, getGateway, listGateways } from '../core/gateways.js';
|
|
4
|
+
import { getProfile } from '../core/profiles.js';
|
|
5
|
+
import { serverManager } from '../process/manager.js';
|
|
6
|
+
import { logger } from '../core/logger.js';
|
|
7
|
+
import { ALL_CLIENTS, copyToClipboard, detectPreferredClient, getClientSteps, getConfigPath } from './connect.js';
|
|
8
|
+
import { printTitle, printSection, printDetails, printCommand, printJson, printTable, ui } from '../ui/format.js';
|
|
9
|
+
function parseIncludes(args) {
|
|
10
|
+
const includes = [];
|
|
11
|
+
for (let i = 0; i < args.length; i++) {
|
|
12
|
+
if (args[i] === '--include' && args[i + 1])
|
|
13
|
+
includes.push(args[i + 1]);
|
|
14
|
+
}
|
|
15
|
+
return includes;
|
|
16
|
+
}
|
|
17
|
+
function getPortArg(args) {
|
|
18
|
+
const idx = args.indexOf('--port');
|
|
19
|
+
return idx !== -1 ? parseInt(args[idx + 1] || '0', 10) || undefined : undefined;
|
|
20
|
+
}
|
|
21
|
+
function valueFor(args, flag) {
|
|
22
|
+
const idx = args.indexOf(flag);
|
|
23
|
+
return idx !== -1 ? args[idx + 1] : undefined;
|
|
24
|
+
}
|
|
25
|
+
function buildHttpEntry(authKey, port, profile) {
|
|
26
|
+
return {
|
|
27
|
+
type: 'streamable-http',
|
|
28
|
+
url: `http://127.0.0.1:${port}/mcp`,
|
|
29
|
+
headers: { Authorization: `Bearer ${authKey}`, ...(profile ? { 'X-Hoolix-Profile': profile } : {}) },
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function buildPayload(client, slug, entry, isProject) {
|
|
33
|
+
if (client === 'vscode' && isProject) {
|
|
34
|
+
return { key: 'servers', payload: { servers: { [slug]: entry } } };
|
|
35
|
+
}
|
|
36
|
+
return { key: 'mcpServers', payload: { mcpServers: { [slug]: entry } } };
|
|
37
|
+
}
|
|
38
|
+
async function writeClientConfig(client, key, payload, isProject) {
|
|
39
|
+
const cfgPath = getConfigPath(client, { projectCwd: isProject ? process.cwd() : undefined });
|
|
40
|
+
if (!cfgPath)
|
|
41
|
+
return null;
|
|
42
|
+
let existing = {};
|
|
43
|
+
if (await fs.pathExists(cfgPath)) {
|
|
44
|
+
try {
|
|
45
|
+
existing = await fs.readJson(cfgPath);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
existing = {};
|
|
49
|
+
}
|
|
50
|
+
const ts = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
|
|
51
|
+
await fs.copy(cfgPath, `${cfgPath}.${ts}.bak`).catch(() => { });
|
|
52
|
+
}
|
|
53
|
+
if (!existing[key] || typeof existing[key] !== 'object')
|
|
54
|
+
existing[key] = {};
|
|
55
|
+
existing[key] = { ...existing[key], ...(payload[key] ?? {}) };
|
|
56
|
+
await fs.ensureDir(path.dirname(cfgPath));
|
|
57
|
+
await fs.writeJson(cfgPath, existing, { spaces: 2 });
|
|
58
|
+
return cfgPath;
|
|
59
|
+
}
|
|
60
|
+
export async function cmdGateway(args, json) {
|
|
61
|
+
const sub = args[1] || 'list';
|
|
62
|
+
if (sub === 'create') {
|
|
63
|
+
const name = args[2];
|
|
64
|
+
const includes = parseIncludes(args);
|
|
65
|
+
if (!name || includes.length === 0) {
|
|
66
|
+
if (json)
|
|
67
|
+
printJson({ ok: false, error: 'Usage: hoolix gateway create <name> --include <server-slug> ...' });
|
|
68
|
+
else
|
|
69
|
+
logger.error('Usage: hoolix gateway create <name> --include <server-slug> --include <server-slug>');
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
const gateway = await createGateway(name, includes);
|
|
74
|
+
if (json) {
|
|
75
|
+
printJson({ ok: true, gateway, next: [`hoolix gateway start ${gateway.slug}`, `hoolix gateway connect ${gateway.slug} --client codex`] });
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
printTitle('Gateway created', `"${gateway.name}" aggregates ${gateway.backends.length} MCP server(s).`);
|
|
79
|
+
printDetails([
|
|
80
|
+
['Slug', gateway.slug],
|
|
81
|
+
['Backends', gateway.backends.map((backend) => `${backend.namespace}=${backend.slug}`).join(', ')],
|
|
82
|
+
['Auth', 'generated'],
|
|
83
|
+
]);
|
|
84
|
+
console.log('');
|
|
85
|
+
printSection('Next steps');
|
|
86
|
+
printCommand(`hoolix gateway start ${gateway.slug}`);
|
|
87
|
+
printCommand(`hoolix gateway connect ${gateway.slug} --client codex`);
|
|
88
|
+
}
|
|
89
|
+
catch (e) {
|
|
90
|
+
const message = e instanceof Error ? e.message : String(e);
|
|
91
|
+
if (json)
|
|
92
|
+
printJson({ ok: false, error: message });
|
|
93
|
+
else
|
|
94
|
+
logger.error(message);
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (sub === 'list') {
|
|
100
|
+
const gateways = await listGateways();
|
|
101
|
+
const rows = await Promise.all(gateways.map(async (gateway) => {
|
|
102
|
+
const status = await serverManager.getGatewayStatus(gateway.slug);
|
|
103
|
+
return {
|
|
104
|
+
Name: gateway.name,
|
|
105
|
+
Slug: gateway.slug,
|
|
106
|
+
Status: status.running && status.port ? `gateway:${status.port}` : 'stopped',
|
|
107
|
+
Backends: gateway.backends.map((backend) => backend.namespace).join(', '),
|
|
108
|
+
Created: gateway.createdAt.slice(0, 10),
|
|
109
|
+
};
|
|
110
|
+
}));
|
|
111
|
+
if (json) {
|
|
112
|
+
printJson(await Promise.all(gateways.map(async (gateway) => ({ ...gateway, status: await serverManager.getGatewayStatus(gateway.slug) }))));
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (gateways.length === 0) {
|
|
116
|
+
printTitle('Gateways', 'No unified MCP gateways yet.');
|
|
117
|
+
printCommand('hoolix gateway create my-tools --include github --include filesystem --include brave-search');
|
|
118
|
+
printCommand('hoolix install github-api --name github --yes');
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
printTitle('Gateways', `${gateways.length} unified gateway${gateways.length === 1 ? '' : 's'}`);
|
|
122
|
+
printTable(rows);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
if (sub === 'start') {
|
|
126
|
+
const slug = args[2];
|
|
127
|
+
if (!slug) {
|
|
128
|
+
if (json)
|
|
129
|
+
printJson({ ok: false, error: 'Missing gateway name. Next: hoolix gateway start <name>.' });
|
|
130
|
+
else
|
|
131
|
+
logger.error('Usage: hoolix gateway start <name> [--port N]');
|
|
132
|
+
process.exit(1);
|
|
133
|
+
}
|
|
134
|
+
const gateway = await getGateway(slug);
|
|
135
|
+
const port = getPortArg(args);
|
|
136
|
+
const started = await serverManager.startGateway(gateway.slug, { port, authKey: gateway.authKey });
|
|
137
|
+
if (json) {
|
|
138
|
+
printJson({
|
|
139
|
+
ok: true,
|
|
140
|
+
gateway: gateway.slug,
|
|
141
|
+
mode: 'gateway',
|
|
142
|
+
port: started.port,
|
|
143
|
+
pid: started.pid,
|
|
144
|
+
url: `http://127.0.0.1:${started.port}/mcp`,
|
|
145
|
+
mcpServers: { [gateway.slug]: buildHttpEntry(gateway.authKey, started.port) },
|
|
146
|
+
});
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
printTitle('Gateway running', `"${gateway.name}" is one MCP endpoint for ${gateway.backends.length} server(s).`);
|
|
150
|
+
printDetails([
|
|
151
|
+
['URL', `http://127.0.0.1:${started.port}/mcp`],
|
|
152
|
+
['Auth', `Authorization: Bearer ${gateway.authKey}`],
|
|
153
|
+
['Backends', gateway.backends.map((backend) => `${backend.namespace}.${backend.slug}`).join(', ')],
|
|
154
|
+
['PID', started.pid],
|
|
155
|
+
]);
|
|
156
|
+
console.log('');
|
|
157
|
+
printCommand(`hoolix gateway connect ${gateway.slug} --client codex`);
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
if (sub === 'stop') {
|
|
161
|
+
const slug = args[2];
|
|
162
|
+
if (!slug) {
|
|
163
|
+
if (json)
|
|
164
|
+
printJson({ ok: false, error: 'Missing gateway name. Next: hoolix gateway stop <name>.' });
|
|
165
|
+
else
|
|
166
|
+
logger.error('Usage: hoolix gateway stop <name>');
|
|
167
|
+
process.exit(1);
|
|
168
|
+
}
|
|
169
|
+
const stopped = await serverManager.stopGateway(slug);
|
|
170
|
+
if (json)
|
|
171
|
+
printJson({ ok: true, gateway: slug, stopped });
|
|
172
|
+
else if (stopped)
|
|
173
|
+
logger.success(`Stopped gateway ${slug}`);
|
|
174
|
+
else
|
|
175
|
+
logger.info(`Gateway ${slug} was not running.`);
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
if (sub === 'connect') {
|
|
179
|
+
const slug = args[2];
|
|
180
|
+
if (!slug) {
|
|
181
|
+
if (json)
|
|
182
|
+
printJson({ ok: false, error: 'Missing gateway name. Next: hoolix gateway connect <name> --client codex.' });
|
|
183
|
+
else
|
|
184
|
+
logger.error('Usage: hoolix gateway connect <name> --client <client>');
|
|
185
|
+
process.exit(1);
|
|
186
|
+
}
|
|
187
|
+
const gateway = await getGateway(slug);
|
|
188
|
+
const status = await serverManager.getGatewayStatus(gateway.slug);
|
|
189
|
+
const port = status.port || getPortArg(args);
|
|
190
|
+
if (!port) {
|
|
191
|
+
if (json)
|
|
192
|
+
printJson({ ok: false, error: `Gateway "${gateway.slug}" is not running. Next: hoolix gateway start ${gateway.slug}.` });
|
|
193
|
+
else
|
|
194
|
+
logger.error(`Gateway "${gateway.slug}" is not running. Next: hoolix gateway start ${gateway.slug}.`);
|
|
195
|
+
process.exit(1);
|
|
196
|
+
}
|
|
197
|
+
const clientIdx = args.indexOf('--client');
|
|
198
|
+
let client = (clientIdx !== -1 ? args[clientIdx + 1] : undefined);
|
|
199
|
+
if (!client || !ALL_CLIENTS.includes(client))
|
|
200
|
+
client = json ? 'generic' : detectPreferredClient();
|
|
201
|
+
const profileName = valueFor(args, '--profile');
|
|
202
|
+
const profile = profileName ? await getProfile(profileName) : null;
|
|
203
|
+
const isProject = args.includes('--project');
|
|
204
|
+
const isDryRun = args.includes('--dry-run');
|
|
205
|
+
const entry = buildHttpEntry(profile?.authKey ?? gateway.authKey, port, profile?.slug);
|
|
206
|
+
const { key, payload } = buildPayload(client, gateway.slug, entry, isProject);
|
|
207
|
+
if (json) {
|
|
208
|
+
printJson({ ...payload, transport: 'http', gateway: gateway.slug, client, profile: profile?.slug ?? null });
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
const cfgPath = isDryRun ? null : await writeClientConfig(client, key, payload, isProject);
|
|
212
|
+
printTitle('Gateway connect ready', `"${gateway.name}" → ${client}${profile ? ` (${profile.slug})` : ''}`);
|
|
213
|
+
printSection('MCP config snippet');
|
|
214
|
+
const entryStr = JSON.stringify(payload, null, 2);
|
|
215
|
+
console.log(entryStr);
|
|
216
|
+
console.log('');
|
|
217
|
+
if (cfgPath)
|
|
218
|
+
console.log(` ${ui.success('✓')} Merged into ${cfgPath}`);
|
|
219
|
+
else if (isDryRun)
|
|
220
|
+
console.log(` ${ui.warning('○')} Dry run — no files written.`);
|
|
221
|
+
else
|
|
222
|
+
console.log(` ${ui.muted('Manual config for this client; no safe auto-write path.')}`);
|
|
223
|
+
console.log('');
|
|
224
|
+
printSection(`Next steps for ${client}`);
|
|
225
|
+
getClientSteps(client, 'http').forEach((step, i) => console.log(` ${i + 1}. ${step}`));
|
|
226
|
+
console.log('');
|
|
227
|
+
if (copyToClipboard(entryStr))
|
|
228
|
+
console.log(` ${ui.success('✓')} Snippet copied to clipboard.`);
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
if (json)
|
|
232
|
+
printJson({ ok: false, error: `Unknown gateway command "${sub}". Next: use create, list, start, stop, or connect.` });
|
|
233
|
+
else
|
|
234
|
+
logger.error(`Unknown gateway command "${sub}". Next: run hoolix gateway list.`);
|
|
235
|
+
process.exit(1);
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=gateway.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/commands/gateway.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAOA,wBAAsB,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA6G1D"}
|
package/dist/commands/list.js
CHANGED
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
import { validateServerState } from '../core/registry.js';
|
|
2
2
|
import { getServerSourceLabel, listRegisteredServers } from '../app/services/servers.js';
|
|
3
3
|
import { serverManager } from '../process/manager.js';
|
|
4
|
+
import { listGateways } from '../core/gateways.js';
|
|
4
5
|
import { logger } from '../core/logger.js';
|
|
5
6
|
import { printTitle, printSection, printCommand, printTable, printJson, truncate, getFreshness, formatDate, ui } from '../ui/format.js';
|
|
6
7
|
export async function cmdList(json) {
|
|
7
8
|
const servers = await listRegisteredServers();
|
|
9
|
+
const gateways = await listGateways();
|
|
8
10
|
if (json) {
|
|
9
|
-
printJson(servers);
|
|
11
|
+
printJson({ servers, gateways: await Promise.all(gateways.map(async (gateway) => ({ ...gateway, status: await serverManager.getGatewayStatus(gateway.slug) }))) });
|
|
10
12
|
return;
|
|
11
13
|
}
|
|
12
|
-
if (servers.length === 0) {
|
|
13
|
-
printTitle('Servers', 'No MCP servers registered yet.');
|
|
14
|
+
if (servers.length === 0 && gateways.length === 0) {
|
|
15
|
+
printTitle('Servers + Gateways', 'No MCP servers or unified gateways registered yet.');
|
|
14
16
|
printSection('Create your first server');
|
|
15
17
|
printCommand('hoolix install filesystem /Users/jay/projects --yes');
|
|
16
18
|
printCommand('hoolix install github-api --yes');
|
|
19
|
+
printCommand('hoolix gateway create my-tools --include github --include filesystem');
|
|
17
20
|
printCommand('hoolix create "My Docs" --url https://example.com/docs/llms.txt');
|
|
18
21
|
printCommand('hoolix templates list');
|
|
19
22
|
console.log('');
|
|
@@ -68,6 +71,22 @@ export async function cmdList(json) {
|
|
|
68
71
|
});
|
|
69
72
|
printTable(rows);
|
|
70
73
|
console.log('');
|
|
74
|
+
if (gateways.length > 0) {
|
|
75
|
+
const gatewayRows = await Promise.all(gateways.map(async (gateway) => {
|
|
76
|
+
const st = await serverManager.getGatewayStatus(gateway.slug);
|
|
77
|
+
return {
|
|
78
|
+
Name: gateway.name,
|
|
79
|
+
Slug: gateway.slug,
|
|
80
|
+
Kind: 'gateway',
|
|
81
|
+
Status: st.running && st.port ? `gateway:${st.port}` : 'stopped',
|
|
82
|
+
Backends: gateway.backends.map((backend) => backend.namespace).join(', '),
|
|
83
|
+
Created: formatDate(gateway.createdAt),
|
|
84
|
+
};
|
|
85
|
+
}));
|
|
86
|
+
printSection('Unified gateways');
|
|
87
|
+
printTable(gatewayRows);
|
|
88
|
+
console.log('');
|
|
89
|
+
}
|
|
71
90
|
const proxyRunning = Object.values(statusMap).filter((s) => s.running && s.mode === 'proxy');
|
|
72
91
|
if (proxyRunning.length > 0) {
|
|
73
92
|
console.log(` ${ui.success('●')} ${proxyRunning.length} mcp-server(s) running in proxy mode. Use ${ui.accent('hoolix connect <slug>')} for HTTP config.`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAExI,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAa;IACzC,MAAM,OAAO,GAAG,MAAM,qBAAqB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"AA8CA,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAoH7E"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { createProfile, deleteProfile, getProfile, listProfiles, maskProfile, saveProfile, expandIncludes } from '../core/profiles.js';
|
|
2
|
+
import { logger } from '../core/logger.js';
|
|
3
|
+
import { printTitle, printSection, printDetails, printCommand, printJson, printTable } from '../ui/format.js';
|
|
4
|
+
function valuesFor(args, flag) {
|
|
5
|
+
const values = [];
|
|
6
|
+
for (let i = 0; i < args.length; i++) {
|
|
7
|
+
if (args[i] === flag && args[i + 1])
|
|
8
|
+
values.push(args[i + 1]);
|
|
9
|
+
}
|
|
10
|
+
return values;
|
|
11
|
+
}
|
|
12
|
+
function valueFor(args, flag) {
|
|
13
|
+
const idx = args.indexOf(flag);
|
|
14
|
+
return idx !== -1 ? args[idx + 1] : undefined;
|
|
15
|
+
}
|
|
16
|
+
function parseApproval(value) {
|
|
17
|
+
if (value === 'read-only')
|
|
18
|
+
return value;
|
|
19
|
+
if (value === 'always' || value === 'always-approve')
|
|
20
|
+
return 'always';
|
|
21
|
+
return 'writes';
|
|
22
|
+
}
|
|
23
|
+
function splitCsv(values) {
|
|
24
|
+
return values.flatMap((value) => value.split(',').map((part) => part.trim()).filter(Boolean));
|
|
25
|
+
}
|
|
26
|
+
function parseRules(values) {
|
|
27
|
+
return splitCsv(values).map((value) => {
|
|
28
|
+
const [match, effectRaw] = value.includes('=')
|
|
29
|
+
? value.split('=', 2)
|
|
30
|
+
: value.split(':', 2);
|
|
31
|
+
const effect = effectRaw === 'deny' || effectRaw === 'approve' ? effectRaw : 'allow';
|
|
32
|
+
return { match: match.trim(), effect };
|
|
33
|
+
}).filter((rule) => rule.match);
|
|
34
|
+
}
|
|
35
|
+
function parseSandbox(args) {
|
|
36
|
+
return {
|
|
37
|
+
filesystemRoots: splitCsv(valuesFor(args, '--fs-root')),
|
|
38
|
+
blockedPaths: splitCsv(valuesFor(args, '--block-path')),
|
|
39
|
+
allowedDomains: splitCsv(valuesFor(args, '--allow-domain')),
|
|
40
|
+
blockedDomains: splitCsv(valuesFor(args, '--block-domain')),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export async function cmdProfile(args, json) {
|
|
44
|
+
const sub = args[1] || 'list';
|
|
45
|
+
if (sub === 'create') {
|
|
46
|
+
const name = args[2];
|
|
47
|
+
if (!name) {
|
|
48
|
+
if (json)
|
|
49
|
+
printJson({ ok: false, error: 'Missing profile name. Next: hoolix profile create codex --include github,filesystem --approval writes.' });
|
|
50
|
+
else
|
|
51
|
+
logger.error('Usage: hoolix profile create <name> --include github,filesystem --approval writes');
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
const profile = await createProfile({
|
|
56
|
+
name,
|
|
57
|
+
includes: splitCsv(valuesFor(args, '--include')),
|
|
58
|
+
gateways: splitCsv(valuesFor(args, '--gateway')),
|
|
59
|
+
approvalMode: parseApproval(valueFor(args, '--approval')),
|
|
60
|
+
sandbox: parseSandbox(args),
|
|
61
|
+
});
|
|
62
|
+
const rules = parseRules(valuesFor(args, '--rule'));
|
|
63
|
+
const saved = rules.length > 0 ? await saveProfile({ ...profile, policy: { ...profile.policy, rules: [...profile.policy.rules, ...rules] } }) : profile;
|
|
64
|
+
if (json) {
|
|
65
|
+
printJson({ ok: true, profile: maskProfile(saved), next: [`hoolix gateway connect <gateway> --client codex --profile ${saved.slug}`] });
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
printTitle('Profile created', `"${saved.name}" will identify one MCP client or agent.`);
|
|
69
|
+
printDetails([
|
|
70
|
+
['Slug', saved.slug],
|
|
71
|
+
['Allowed tools', saved.allowedTools.join(', ')],
|
|
72
|
+
['Gateways', saved.allowedGateways.length ? saved.allowedGateways.join(', ') : 'any'],
|
|
73
|
+
['Approval', saved.approvalMode],
|
|
74
|
+
['Rules', String(saved.policy.rules.length)],
|
|
75
|
+
]);
|
|
76
|
+
console.log('');
|
|
77
|
+
printSection('Next steps');
|
|
78
|
+
printCommand(`hoolix gateway connect my-tools --client codex --profile ${saved.slug}`);
|
|
79
|
+
printCommand('hoolix approvals list');
|
|
80
|
+
}
|
|
81
|
+
catch (e) {
|
|
82
|
+
const message = e instanceof Error ? e.message : String(e);
|
|
83
|
+
if (json)
|
|
84
|
+
printJson({ ok: false, error: message });
|
|
85
|
+
else
|
|
86
|
+
logger.error(message);
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (sub === 'list') {
|
|
92
|
+
const profiles = await listProfiles();
|
|
93
|
+
if (json) {
|
|
94
|
+
printJson(profiles.map(maskProfile));
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (profiles.length === 0) {
|
|
98
|
+
printTitle('Profiles', 'No client profiles yet.');
|
|
99
|
+
printCommand('hoolix profile create codex --include github,filesystem --approval writes');
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
printTitle('Profiles', `${profiles.length} profile${profiles.length === 1 ? '' : 's'}`);
|
|
103
|
+
printTable(profiles.map((profile) => ({
|
|
104
|
+
Name: profile.name,
|
|
105
|
+
Slug: profile.slug,
|
|
106
|
+
Approval: profile.approvalMode,
|
|
107
|
+
Tools: profile.allowedTools.join(', '),
|
|
108
|
+
Gateways: profile.allowedGateways.length ? profile.allowedGateways.join(', ') : 'any',
|
|
109
|
+
Rules: String(profile.policy.rules.length),
|
|
110
|
+
})));
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
if (sub === 'edit') {
|
|
114
|
+
const slug = args[2];
|
|
115
|
+
if (!slug) {
|
|
116
|
+
if (json)
|
|
117
|
+
printJson({ ok: false, error: 'Missing profile name. Next: hoolix profile edit codex --approval always.' });
|
|
118
|
+
else
|
|
119
|
+
logger.error('Usage: hoolix profile edit <name> [--include ...] [--approval ...] [--rule pattern=effect]');
|
|
120
|
+
process.exit(1);
|
|
121
|
+
}
|
|
122
|
+
const current = await getProfile(slug);
|
|
123
|
+
const includes = splitCsv(valuesFor(args, '--include'));
|
|
124
|
+
const gateways = splitCsv(valuesFor(args, '--gateway'));
|
|
125
|
+
const rules = parseRules(valuesFor(args, '--rule'));
|
|
126
|
+
const approval = valueFor(args, '--approval');
|
|
127
|
+
const sandbox = parseSandbox(args);
|
|
128
|
+
const updated = await saveProfile({
|
|
129
|
+
...current,
|
|
130
|
+
allowedTools: includes.length ? expandIncludes(includes) : current.allowedTools,
|
|
131
|
+
allowedGateways: gateways.length ? gateways : current.allowedGateways,
|
|
132
|
+
approvalMode: approval ? parseApproval(approval) : current.approvalMode,
|
|
133
|
+
policy: rules.length ? { ...current.policy, rules: [...current.policy.rules, ...rules] } : current.policy,
|
|
134
|
+
sandbox: {
|
|
135
|
+
filesystemRoots: sandbox.filesystemRoots?.length ? sandbox.filesystemRoots : current.sandbox.filesystemRoots,
|
|
136
|
+
blockedPaths: sandbox.blockedPaths?.length ? sandbox.blockedPaths : current.sandbox.blockedPaths,
|
|
137
|
+
allowedDomains: sandbox.allowedDomains?.length ? sandbox.allowedDomains : current.sandbox.allowedDomains,
|
|
138
|
+
blockedDomains: sandbox.blockedDomains?.length ? sandbox.blockedDomains : current.sandbox.blockedDomains,
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
if (json)
|
|
142
|
+
printJson({ ok: true, profile: maskProfile(updated) });
|
|
143
|
+
else
|
|
144
|
+
logger.success(`Updated profile ${updated.slug}`);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
if (sub === 'delete') {
|
|
148
|
+
const slug = args[2];
|
|
149
|
+
if (!slug) {
|
|
150
|
+
if (json)
|
|
151
|
+
printJson({ ok: false, error: 'Missing profile name. Next: hoolix profile delete codex.' });
|
|
152
|
+
else
|
|
153
|
+
logger.error('Usage: hoolix profile delete <name>');
|
|
154
|
+
process.exit(1);
|
|
155
|
+
}
|
|
156
|
+
await deleteProfile(slug);
|
|
157
|
+
if (json)
|
|
158
|
+
printJson({ ok: true, profile: slug, deleted: true });
|
|
159
|
+
else
|
|
160
|
+
logger.success(`Deleted profile ${slug}`);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
if (json)
|
|
164
|
+
printJson({ ok: false, error: `Unknown profile command "${sub}". Next: use create, list, edit, or delete.` });
|
|
165
|
+
else
|
|
166
|
+
logger.error(`Unknown profile command "${sub}". Next: run hoolix profile list.`);
|
|
167
|
+
process.exit(1);
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const ApprovalStatusSchema: z.ZodEnum<["pending", "approved", "denied", "consumed"]>;
|
|
3
|
+
export declare const ApprovalRecordSchema: z.ZodObject<{
|
|
4
|
+
id: z.ZodString;
|
|
5
|
+
status: z.ZodEnum<["pending", "approved", "denied", "consumed"]>;
|
|
6
|
+
gateway: z.ZodString;
|
|
7
|
+
profile: z.ZodString;
|
|
8
|
+
toolName: z.ZodString;
|
|
9
|
+
backend: z.ZodOptional<z.ZodString>;
|
|
10
|
+
argumentsPreview: z.ZodString;
|
|
11
|
+
argumentsHash: z.ZodString;
|
|
12
|
+
createdAt: z.ZodString;
|
|
13
|
+
decidedAt: z.ZodOptional<z.ZodString>;
|
|
14
|
+
}, "strip", z.ZodTypeAny, {
|
|
15
|
+
status: "pending" | "approved" | "denied" | "consumed";
|
|
16
|
+
id: string;
|
|
17
|
+
createdAt: string;
|
|
18
|
+
toolName: string;
|
|
19
|
+
profile: string;
|
|
20
|
+
gateway: string;
|
|
21
|
+
argumentsPreview: string;
|
|
22
|
+
argumentsHash: string;
|
|
23
|
+
backend?: string | undefined;
|
|
24
|
+
decidedAt?: string | undefined;
|
|
25
|
+
}, {
|
|
26
|
+
status: "pending" | "approved" | "denied" | "consumed";
|
|
27
|
+
id: string;
|
|
28
|
+
createdAt: string;
|
|
29
|
+
toolName: string;
|
|
30
|
+
profile: string;
|
|
31
|
+
gateway: string;
|
|
32
|
+
argumentsPreview: string;
|
|
33
|
+
argumentsHash: string;
|
|
34
|
+
backend?: string | undefined;
|
|
35
|
+
decidedAt?: string | undefined;
|
|
36
|
+
}>;
|
|
37
|
+
export type ApprovalRecord = z.infer<typeof ApprovalRecordSchema>;
|
|
38
|
+
export interface ApprovalStore {
|
|
39
|
+
version: string;
|
|
40
|
+
approvals: ApprovalRecord[];
|
|
41
|
+
}
|
|
42
|
+
export declare function listApprovals(status?: ApprovalRecord['status']): Promise<ApprovalRecord[]>;
|
|
43
|
+
export declare function listPendingApprovals(): Promise<ApprovalRecord[]>;
|
|
44
|
+
export declare function queueApproval(input: {
|
|
45
|
+
gateway: string;
|
|
46
|
+
profile: string;
|
|
47
|
+
toolName: string;
|
|
48
|
+
backend?: string;
|
|
49
|
+
argumentsPreview: string;
|
|
50
|
+
argumentsHash: string;
|
|
51
|
+
}): Promise<ApprovalRecord>;
|
|
52
|
+
export declare function decideApproval(id: string, status: 'approved' | 'denied'): Promise<ApprovalRecord>;
|
|
53
|
+
export declare function consumeMatchingApproval(input: {
|
|
54
|
+
gateway: string;
|
|
55
|
+
profile: string;
|
|
56
|
+
toolName: string;
|
|
57
|
+
argumentsHash: string;
|
|
58
|
+
}): Promise<ApprovalRecord | null>;
|
|
59
|
+
export declare function findDeniedMatchingApproval(input: {
|
|
60
|
+
gateway: string;
|
|
61
|
+
profile: string;
|
|
62
|
+
toolName: string;
|
|
63
|
+
argumentsHash: string;
|
|
64
|
+
}): Promise<ApprovalRecord | null>;
|
|
65
|
+
export declare function previewArgs(value: unknown): string;
|
|
66
|
+
export declare function hashArgs(value: unknown): Promise<string>;
|
|
67
|
+
//# sourceMappingURL=approvals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approvals.d.ts","sourceRoot":"","sources":["../../src/core/approvals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,oBAAoB,0DAAwD,CAAC;AAE1F,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAW/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,cAAc,EAAE,CAAC;CAC7B;AAmBD,wBAAsB,aAAa,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAIhG;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAEtE;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,cAAc,CAAC,CAyB1B;AAED,wBAAsB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CAQvG;AAED,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAcjC;AAED,wBAAsB,0BAA0B,CAAC,KAAK,EAAE;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CASjC;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGlD;AAED,wBAAsB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAG9D"}
|