opalserve 0.1.2 → 3.0.0
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 +108 -115
- package/assets/logo.svg +51 -0
- package/dist/auth/api-keys.d.ts +7 -0
- package/dist/auth/api-keys.d.ts.map +1 -0
- package/dist/auth/api-keys.js +12 -0
- package/dist/auth/api-keys.js.map +1 -0
- package/dist/auth/index.d.ts +4 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +4 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/middleware.d.ts +11 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +46 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/auth/passwords.d.ts +3 -0
- package/dist/auth/passwords.d.ts.map +1 -0
- package/dist/auth/passwords.js +33 -0
- package/dist/auth/passwords.js.map +1 -0
- package/dist/cli/commands/admin.d.ts +13 -0
- package/dist/cli/commands/admin.d.ts.map +1 -0
- package/dist/cli/commands/admin.js +261 -0
- package/dist/cli/commands/admin.js.map +1 -0
- package/dist/cli/commands/auth.d.ts +4 -0
- package/dist/cli/commands/auth.d.ts.map +1 -0
- package/dist/cli/commands/auth.js +77 -0
- package/dist/cli/commands/auth.js.map +1 -0
- package/dist/cli/commands/context.d.ts +5 -0
- package/dist/cli/commands/context.d.ts.map +1 -0
- package/dist/cli/commands/context.js +190 -0
- package/dist/cli/commands/context.js.map +1 -0
- package/dist/cli/commands/health.d.ts +4 -0
- package/dist/cli/commands/health.d.ts.map +1 -0
- package/dist/cli/commands/health.js +36 -0
- package/dist/cli/commands/health.js.map +1 -0
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +81 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/server.d.ts +10 -0
- package/dist/cli/commands/server.d.ts.map +1 -0
- package/dist/cli/commands/server.js +108 -0
- package/dist/cli/commands/server.js.map +1 -0
- package/dist/cli/commands/start.d.ts +6 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +63 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/status.d.ts +2 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +21 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +2 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +58 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/commands/tools.d.ts +8 -0
- package/dist/cli/commands/tools.d.ts.map +1 -0
- package/dist/cli/commands/tools.js +28 -0
- package/dist/cli/commands/tools.js.map +1 -0
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +156 -30
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/ui/banner.d.ts +8 -0
- package/dist/cli/ui/banner.d.ts.map +1 -0
- package/dist/cli/ui/banner.js +54 -0
- package/dist/cli/ui/banner.js.map +1 -0
- package/dist/cli/ui/prompts.d.ts +11 -0
- package/dist/cli/ui/prompts.d.ts.map +1 -0
- package/dist/cli/ui/prompts.js +74 -0
- package/dist/cli/ui/prompts.js.map +1 -0
- package/dist/cli/ui/table.d.ts +5 -0
- package/dist/cli/ui/table.d.ts.map +1 -0
- package/dist/cli/ui/table.js +103 -0
- package/dist/cli/ui/table.js.map +1 -0
- package/dist/config/credentials.d.ts +10 -0
- package/dist/config/credentials.d.ts.map +1 -0
- package/dist/config/credentials.js +33 -0
- package/dist/config/credentials.js.map +1 -0
- package/dist/config/defaults.d.ts +5 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +20 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/loader.d.ts +4 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +57 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +2 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +2 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/constants.d.ts +5 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +5 -0
- package/dist/constants.js.map +1 -0
- package/dist/context/chunker.d.ts +2 -0
- package/dist/context/chunker.d.ts.map +1 -0
- package/dist/context/chunker.js +81 -0
- package/dist/context/chunker.js.map +1 -0
- package/dist/context/index.d.ts +26 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +97 -0
- package/dist/context/index.js.map +1 -0
- package/dist/core/discovery.d.ts +17 -0
- package/dist/core/discovery.d.ts.map +1 -0
- package/dist/core/discovery.js +31 -0
- package/dist/core/discovery.js.map +1 -0
- package/dist/core/proxy.d.ts +14 -0
- package/dist/core/proxy.d.ts.map +1 -0
- package/dist/core/proxy.js +36 -0
- package/dist/core/proxy.js.map +1 -0
- package/dist/core/registry.d.ts +30 -31
- package/dist/core/registry.d.ts.map +1 -1
- package/dist/core/registry.js +92 -234
- package/dist/core/registry.js.map +1 -1
- package/dist/core/secrets.d.ts +4 -0
- package/dist/core/secrets.d.ts.map +1 -0
- package/dist/core/secrets.js +40 -0
- package/dist/core/secrets.js.map +1 -0
- package/dist/core/server-manager.d.ts +18 -0
- package/dist/core/server-manager.d.ts.map +1 -0
- package/dist/core/server-manager.js +120 -0
- package/dist/core/server-manager.js.map +1 -0
- package/dist/dashboard/assets/index-BNOtcUPs.js +257 -0
- package/dist/dashboard/assets/index-Duwp34GW.css +1 -0
- package/dist/dashboard/index.html +14 -0
- package/dist/index.d.ts +22 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +31 -9
- package/dist/index.js.map +1 -1
- package/dist/integrations/github.d.ts +5 -0
- package/dist/integrations/github.d.ts.map +1 -0
- package/dist/integrations/github.js +63 -0
- package/dist/integrations/github.js.map +1 -0
- package/dist/integrations/slack.d.ts +21 -0
- package/dist/integrations/slack.d.ts.map +1 -0
- package/dist/integrations/slack.js +61 -0
- package/dist/integrations/slack.js.map +1 -0
- package/dist/monitoring/tracker.d.ts +31 -0
- package/dist/monitoring/tracker.d.ts.map +1 -0
- package/dist/monitoring/tracker.js +86 -0
- package/dist/monitoring/tracker.js.map +1 -0
- package/dist/server/app.d.ts +8 -0
- package/dist/server/app.d.ts.map +1 -0
- package/dist/server/app.js +81 -0
- package/dist/server/app.js.map +1 -0
- package/dist/server/mcp-gateway.d.ts +12 -0
- package/dist/server/mcp-gateway.d.ts.map +1 -0
- package/dist/server/mcp-gateway.js +91 -0
- package/dist/server/mcp-gateway.js.map +1 -0
- package/dist/server/routes/auth.d.ts +4 -0
- package/dist/server/routes/auth.d.ts.map +1 -0
- package/dist/server/routes/auth.js +117 -0
- package/dist/server/routes/auth.js.map +1 -0
- package/dist/server/routes/context.d.ts +4 -0
- package/dist/server/routes/context.d.ts.map +1 -0
- package/dist/server/routes/context.js +107 -0
- package/dist/server/routes/context.js.map +1 -0
- package/dist/server/routes/health.d.ts +4 -0
- package/dist/server/routes/health.d.ts.map +1 -0
- package/dist/server/routes/health.js +22 -0
- package/dist/server/routes/health.js.map +1 -0
- package/dist/server/routes/servers.d.ts +4 -0
- package/dist/server/routes/servers.d.ts.map +1 -0
- package/dist/server/routes/servers.js +47 -0
- package/dist/server/routes/servers.js.map +1 -0
- package/dist/server/routes/stats.d.ts +4 -0
- package/dist/server/routes/stats.d.ts.map +1 -0
- package/dist/server/routes/stats.js +97 -0
- package/dist/server/routes/stats.js.map +1 -0
- package/dist/server/routes/team-servers.d.ts +4 -0
- package/dist/server/routes/team-servers.d.ts.map +1 -0
- package/dist/server/routes/team-servers.js +108 -0
- package/dist/server/routes/team-servers.js.map +1 -0
- package/dist/server/routes/tools.d.ts +4 -0
- package/dist/server/routes/tools.d.ts.map +1 -0
- package/dist/server/routes/tools.js +44 -0
- package/dist/server/routes/tools.js.map +1 -0
- package/dist/server/routes/webhooks.d.ts +4 -0
- package/dist/server/routes/webhooks.d.ts.map +1 -0
- package/dist/server/routes/webhooks.js +77 -0
- package/dist/server/routes/webhooks.js.map +1 -0
- package/dist/storage/database.d.ts +48 -0
- package/dist/storage/database.d.ts.map +1 -0
- package/dist/storage/database.js +336 -0
- package/dist/storage/database.js.map +1 -0
- package/dist/storage/repositories/server-repo.d.ts +2 -0
- package/dist/storage/repositories/server-repo.d.ts.map +1 -0
- package/dist/storage/repositories/server-repo.js +3 -0
- package/dist/storage/repositories/server-repo.js.map +1 -0
- package/dist/storage/repositories/tool-repo.d.ts +2 -0
- package/dist/storage/repositories/tool-repo.d.ts.map +1 -0
- package/dist/storage/repositories/tool-repo.js +3 -0
- package/dist/storage/repositories/tool-repo.js.map +1 -0
- package/dist/types/index.d.ts +482 -587
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +52 -69
- package/dist/types/index.js.map +1 -1
- package/dist/utils/logger.d.ts +7 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +23 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +67 -56
- package/.env.example +0 -19
- package/config/servers.example.yaml +0 -67
- package/config/servers.yaml +0 -2
- package/dist/cli/discover.d.ts +0 -3
- package/dist/cli/discover.d.ts.map +0 -1
- package/dist/cli/discover.js +0 -160
- package/dist/cli/discover.js.map +0 -1
- package/dist/connectors/base.d.ts +0 -49
- package/dist/connectors/base.d.ts.map +0 -1
- package/dist/connectors/base.js +0 -45
- package/dist/connectors/base.js.map +0 -1
- package/dist/connectors/custom.d.ts +0 -19
- package/dist/connectors/custom.d.ts.map +0 -1
- package/dist/connectors/custom.js +0 -129
- package/dist/connectors/custom.js.map +0 -1
- package/dist/connectors/github.d.ts +0 -18
- package/dist/connectors/github.d.ts.map +0 -1
- package/dist/connectors/github.js +0 -188
- package/dist/connectors/github.js.map +0 -1
- package/dist/connectors/google-drive.d.ts +0 -18
- package/dist/connectors/google-drive.d.ts.map +0 -1
- package/dist/connectors/google-drive.js +0 -209
- package/dist/connectors/google-drive.js.map +0 -1
- package/dist/connectors/index.d.ts +0 -11
- package/dist/connectors/index.d.ts.map +0 -1
- package/dist/connectors/index.js +0 -76
- package/dist/connectors/index.js.map +0 -1
- package/dist/connectors/postgres.d.ts +0 -18
- package/dist/connectors/postgres.d.ts.map +0 -1
- package/dist/connectors/postgres.js +0 -140
- package/dist/connectors/postgres.js.map +0 -1
- package/dist/connectors/slack.d.ts +0 -18
- package/dist/connectors/slack.d.ts.map +0 -1
- package/dist/connectors/slack.js +0 -181
- package/dist/connectors/slack.js.map +0 -1
- package/dist/core/auth.d.ts +0 -26
- package/dist/core/auth.d.ts.map +0 -1
- package/dist/core/auth.js +0 -81
- package/dist/core/auth.js.map +0 -1
- package/dist/core/tokenizer.d.ts +0 -16
- package/dist/core/tokenizer.d.ts.map +0 -1
- package/dist/core/tokenizer.js +0 -29
- package/dist/core/tokenizer.js.map +0 -1
- package/dist/governance/audit.d.ts +0 -27
- package/dist/governance/audit.d.ts.map +0 -1
- package/dist/governance/audit.js +0 -149
- package/dist/governance/audit.js.map +0 -1
- package/dist/governance/index.d.ts +0 -5
- package/dist/governance/index.d.ts.map +0 -1
- package/dist/governance/index.js +0 -5
- package/dist/governance/index.js.map +0 -1
- package/dist/governance/policy.d.ts +0 -20
- package/dist/governance/policy.d.ts.map +0 -1
- package/dist/governance/policy.js +0 -162
- package/dist/governance/policy.js.map +0 -1
- package/dist/governance/rate-limiter.d.ts +0 -20
- package/dist/governance/rate-limiter.d.ts.map +0 -1
- package/dist/governance/rate-limiter.js +0 -73
- package/dist/governance/rate-limiter.js.map +0 -1
- package/dist/governance/types.d.ts +0 -246
- package/dist/governance/types.d.ts.map +0 -1
- package/dist/governance/types.js +0 -72
- package/dist/governance/types.js.map +0 -1
- package/dist/identity/access-control.d.ts +0 -15
- package/dist/identity/access-control.d.ts.map +0 -1
- package/dist/identity/access-control.js +0 -81
- package/dist/identity/access-control.js.map +0 -1
- package/dist/identity/index.d.ts +0 -4
- package/dist/identity/index.d.ts.map +0 -1
- package/dist/identity/index.js +0 -4
- package/dist/identity/index.js.map +0 -1
- package/dist/identity/manager.d.ts +0 -29
- package/dist/identity/manager.d.ts.map +0 -1
- package/dist/identity/manager.js +0 -167
- package/dist/identity/manager.js.map +0 -1
- package/dist/identity/types.d.ts +0 -237
- package/dist/identity/types.d.ts.map +0 -1
- package/dist/identity/types.js +0 -80
- package/dist/identity/types.js.map +0 -1
- package/dist/registry/server.d.ts +0 -14
- package/dist/registry/server.d.ts.map +0 -1
- package/dist/registry/server.js +0 -177
- package/dist/registry/server.js.map +0 -1
- package/dist/utils/config.d.ts +0 -29
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js +0 -47
- package/dist/utils/config.js.map +0 -1
- package/dist/utils/index.d.ts +0 -7
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -44
- package/dist/utils/index.js.map +0 -1
- package/dist/workflow/engine.d.ts +0 -18
- package/dist/workflow/engine.d.ts.map +0 -1
- package/dist/workflow/engine.js +0 -155
- package/dist/workflow/engine.js.map +0 -1
- package/dist/workflow/index.d.ts +0 -4
- package/dist/workflow/index.d.ts.map +0 -1
- package/dist/workflow/index.js +0 -4
- package/dist/workflow/index.js.map +0 -1
- package/dist/workflow/templates.d.ts +0 -4
- package/dist/workflow/templates.d.ts.map +0 -1
- package/dist/workflow/templates.js +0 -218
- package/dist/workflow/templates.js.map +0 -1
- package/dist/workflow/types.d.ts +0 -255
- package/dist/workflow/types.d.ts.map +0 -1
- package/dist/workflow/types.js +0 -48
- package/dist/workflow/types.js.map +0 -1
- package/eslint.config.js +0 -25
package/dist/cli/index.js
CHANGED
|
@@ -1,33 +1,159 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
import '
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
╔══════════════════════════════════════════════════════════════╗
|
|
24
|
-
║ O P A L S E R V E ║
|
|
25
|
-
║ MCP Tool Registry & Discovery Hub ║
|
|
26
|
-
║ Enterprise Edition ║
|
|
27
|
-
╚══════════════════════════════════════════════════════════════╝
|
|
28
|
-
`);
|
|
29
|
-
server.start().catch((error) => {
|
|
30
|
-
console.error('Failed to start server:', error);
|
|
31
|
-
process.exit(1);
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { showBanner } from './ui/banner.js';
|
|
4
|
+
import { initCommand } from './commands/init.js';
|
|
5
|
+
import { startCommand } from './commands/start.js';
|
|
6
|
+
import { serverListCommand, serverAddCommand, serverRemoveCommand } from './commands/server.js';
|
|
7
|
+
import { toolsListCommand, toolsSearchCommand } from './commands/tools.js';
|
|
8
|
+
import { statusCommand } from './commands/status.js';
|
|
9
|
+
import { healthCommand } from './commands/health.js';
|
|
10
|
+
import { loginCommand, logoutCommand, whoamiCommand } from './commands/auth.js';
|
|
11
|
+
import { syncCommand } from './commands/sync.js';
|
|
12
|
+
import { contextAddCommand, contextListCommand, contextSearchCommand, contextRemoveCommand } from './commands/context.js';
|
|
13
|
+
import { adminInitCommand, adminStatsCommand, adminUsersCommand, adminInviteCommand, adminLimitsCommand, adminPermissionsCommand } from './commands/admin.js';
|
|
14
|
+
const program = new Command()
|
|
15
|
+
.name('opalserve')
|
|
16
|
+
.description('Local MCP tool registry and discovery hub')
|
|
17
|
+
.version('3.0.0')
|
|
18
|
+
.hook('preAction', (thisCommand) => {
|
|
19
|
+
// Show banner only for root-level commands, not subcommands help
|
|
20
|
+
if (thisCommand.args.length === 0 || !['--help', '-h'].includes(thisCommand.args[0])) {
|
|
21
|
+
// Banner is shown inside each command
|
|
22
|
+
}
|
|
32
23
|
});
|
|
24
|
+
// --- Init ---
|
|
25
|
+
program
|
|
26
|
+
.command('init')
|
|
27
|
+
.description('Interactive setup wizard')
|
|
28
|
+
.action(initCommand);
|
|
29
|
+
// --- Start ---
|
|
30
|
+
program
|
|
31
|
+
.command('start')
|
|
32
|
+
.description('Start the registry server')
|
|
33
|
+
.option('-p, --port <port>', 'HTTP API port')
|
|
34
|
+
.option('-h, --host <host>', 'HTTP API host')
|
|
35
|
+
.option('-c, --config <path>', 'Config file path')
|
|
36
|
+
.action(startCommand);
|
|
37
|
+
// --- Status ---
|
|
38
|
+
program
|
|
39
|
+
.command('status')
|
|
40
|
+
.description('Show server status and tool counts')
|
|
41
|
+
.action(statusCommand);
|
|
42
|
+
// --- Auth ---
|
|
43
|
+
program
|
|
44
|
+
.command('login')
|
|
45
|
+
.description('Login to a team server')
|
|
46
|
+
.action(loginCommand);
|
|
47
|
+
program
|
|
48
|
+
.command('logout')
|
|
49
|
+
.description('Logout and clear credentials')
|
|
50
|
+
.action(logoutCommand);
|
|
51
|
+
program
|
|
52
|
+
.command('whoami')
|
|
53
|
+
.description('Show current user info')
|
|
54
|
+
.action(whoamiCommand);
|
|
55
|
+
// --- Sync ---
|
|
56
|
+
program
|
|
57
|
+
.command('sync')
|
|
58
|
+
.description('Sync team servers to local config')
|
|
59
|
+
.action(syncCommand);
|
|
60
|
+
// --- Server management ---
|
|
61
|
+
const serverCmd = program
|
|
62
|
+
.command('server')
|
|
63
|
+
.description('Manage MCP servers');
|
|
64
|
+
serverCmd
|
|
65
|
+
.command('list')
|
|
66
|
+
.description('List all registered servers')
|
|
67
|
+
.action(serverListCommand);
|
|
68
|
+
serverCmd
|
|
69
|
+
.command('add')
|
|
70
|
+
.description('Register a new MCP server')
|
|
71
|
+
.option('-n, --name <name>', 'Server name')
|
|
72
|
+
.option('-s, --stdio <command>', 'Stdio transport command (e.g., "npx -y @mcp/server")')
|
|
73
|
+
.option('-u, --url <url>', 'Remote server URL (for SSE/HTTP transport)')
|
|
74
|
+
.option('-t, --transport <type>', 'Transport type (sse or streamable-http)', 'sse')
|
|
75
|
+
.option('-e, --env <vars...>', 'Environment variables (KEY=VALUE)')
|
|
76
|
+
.action(serverAddCommand);
|
|
77
|
+
serverCmd
|
|
78
|
+
.command('remove <name>')
|
|
79
|
+
.description('Remove a registered server')
|
|
80
|
+
.action(serverRemoveCommand);
|
|
81
|
+
// --- Tools ---
|
|
82
|
+
const toolsCmd = program
|
|
83
|
+
.command('tools')
|
|
84
|
+
.description('Discover and search tools');
|
|
85
|
+
toolsCmd
|
|
86
|
+
.command('list')
|
|
87
|
+
.description('List all discovered tools')
|
|
88
|
+
.option('-s, --server <names>', 'Filter by server name(s), comma-separated')
|
|
89
|
+
.action(toolsListCommand);
|
|
90
|
+
toolsCmd
|
|
91
|
+
.command('search <query>')
|
|
92
|
+
.description('Search for tools')
|
|
93
|
+
.option('-l, --limit <n>', 'Max results', '10')
|
|
94
|
+
.option('-s, --server <names>', 'Filter by server name(s), comma-separated')
|
|
95
|
+
.action(toolsSearchCommand);
|
|
96
|
+
// --- Context ---
|
|
97
|
+
const contextCmd = program
|
|
98
|
+
.command('context')
|
|
99
|
+
.description('Manage context documents');
|
|
100
|
+
contextCmd
|
|
101
|
+
.command('add <files>')
|
|
102
|
+
.description('Upload files as context documents')
|
|
103
|
+
.action(contextAddCommand);
|
|
104
|
+
contextCmd
|
|
105
|
+
.command('list')
|
|
106
|
+
.description('List all context documents')
|
|
107
|
+
.action(contextListCommand);
|
|
108
|
+
contextCmd
|
|
109
|
+
.command('search <query>')
|
|
110
|
+
.description('Search context documents')
|
|
111
|
+
.action(contextSearchCommand);
|
|
112
|
+
contextCmd
|
|
113
|
+
.command('remove <id>')
|
|
114
|
+
.description('Remove a context document')
|
|
115
|
+
.action(contextRemoveCommand);
|
|
116
|
+
// --- Admin ---
|
|
117
|
+
const adminCmd = program
|
|
118
|
+
.command('admin')
|
|
119
|
+
.description('Team administration commands');
|
|
120
|
+
adminCmd
|
|
121
|
+
.command('init')
|
|
122
|
+
.description('Initialize team with admin user')
|
|
123
|
+
.action(adminInitCommand);
|
|
124
|
+
adminCmd
|
|
125
|
+
.command('stats')
|
|
126
|
+
.description('Show usage statistics')
|
|
127
|
+
.action(adminStatsCommand);
|
|
128
|
+
adminCmd
|
|
129
|
+
.command('users')
|
|
130
|
+
.description('List team members')
|
|
131
|
+
.action(adminUsersCommand);
|
|
132
|
+
adminCmd
|
|
133
|
+
.command('invite <email>')
|
|
134
|
+
.description('Invite a user to the team')
|
|
135
|
+
.action(adminInviteCommand);
|
|
136
|
+
adminCmd
|
|
137
|
+
.command('limits')
|
|
138
|
+
.description('Manage rate limits')
|
|
139
|
+
.option('--set <value>', 'Set a rate limit (format: role:limit_type:max_value)')
|
|
140
|
+
.option('--list', 'List all rate limits')
|
|
141
|
+
.action(adminLimitsCommand);
|
|
142
|
+
adminCmd
|
|
143
|
+
.command('permissions')
|
|
144
|
+
.description('Manage tool permissions')
|
|
145
|
+
.option('--set <value>', 'Set a permission (format: role:server:tool:permission)')
|
|
146
|
+
.option('--list', 'List all permissions')
|
|
147
|
+
.action(adminPermissionsCommand);
|
|
148
|
+
// --- Health ---
|
|
149
|
+
program
|
|
150
|
+
.command('health')
|
|
151
|
+
.description('Health check all servers')
|
|
152
|
+
.option('-s, --server <name>', 'Check specific server')
|
|
153
|
+
.action(healthCommand);
|
|
154
|
+
// Show banner on bare `opalserve` with no args
|
|
155
|
+
if (process.argv.length <= 2) {
|
|
156
|
+
showBanner();
|
|
157
|
+
}
|
|
158
|
+
program.parse();
|
|
33
159
|
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function showBanner(): void;
|
|
2
|
+
export declare function showMiniBanner(): void;
|
|
3
|
+
export declare function showBox(content: string, title?: string): void;
|
|
4
|
+
export declare function showSuccess(message: string): void;
|
|
5
|
+
export declare function showError(message: string): void;
|
|
6
|
+
export declare function showWarning(message: string): void;
|
|
7
|
+
export declare function showInfo(message: string): void;
|
|
8
|
+
//# sourceMappingURL=banner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../../src/cli/ui/banner.ts"],"names":[],"mappings":"AAoBA,wBAAgB,UAAU,IAAI,IAAI,CASjC;AAED,wBAAgB,cAAc,IAAI,IAAI,CAIrC;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAS7D;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE9C"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import gradient from 'gradient-string';
|
|
3
|
+
import boxen from 'boxen';
|
|
4
|
+
const ASCII_LOGO = `
|
|
5
|
+
██████╗ ██████╗ █████╗ ██╗
|
|
6
|
+
██╔═══██╗██╔══██╗██╔══██╗██║
|
|
7
|
+
██║ ██║██████╔╝███████║██║
|
|
8
|
+
██║ ██║██╔═══╝ ██╔══██║██║
|
|
9
|
+
╚██████╔╝██║ ██║ ██║███████╗
|
|
10
|
+
╚═════╝ ╚═╝ ╚═╝ ╚═╝╚══════╝
|
|
11
|
+
███████╗███████╗██████╗ ██╗ ██╗███████╗
|
|
12
|
+
██╔════╝██╔════╝██╔══██╗██║ ██║██╔════╝
|
|
13
|
+
███████╗█████╗ ██████╔╝██║ ██║█████╗
|
|
14
|
+
╚════██║██╔══╝ ██╔══██╗╚██╗ ██╔╝██╔══╝
|
|
15
|
+
███████║███████╗██║ ██║ ╚████╔╝ ███████╗
|
|
16
|
+
╚══════╝╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚══════╝`;
|
|
17
|
+
const opalGradient = gradient(['#F59E0B', '#F97316', '#EF4444', '#8B5CF6']);
|
|
18
|
+
export function showBanner() {
|
|
19
|
+
const banner = opalGradient.multiline(ASCII_LOGO);
|
|
20
|
+
const version = chalk.dim('v3.0.0');
|
|
21
|
+
const tagline = chalk.gray('Local MCP Tool Registry & Discovery Hub');
|
|
22
|
+
console.log('');
|
|
23
|
+
console.log(banner);
|
|
24
|
+
console.log(` ${tagline} ${version}`);
|
|
25
|
+
console.log('');
|
|
26
|
+
}
|
|
27
|
+
export function showMiniBanner() {
|
|
28
|
+
const title = opalGradient('OpalServe');
|
|
29
|
+
const version = chalk.dim('v3.0.0');
|
|
30
|
+
console.log(`\n ${title} ${version}\n`);
|
|
31
|
+
}
|
|
32
|
+
export function showBox(content, title) {
|
|
33
|
+
console.log(boxen(content, {
|
|
34
|
+
padding: 1,
|
|
35
|
+
margin: { top: 0, bottom: 1, left: 2, right: 2 },
|
|
36
|
+
borderStyle: 'round',
|
|
37
|
+
borderColor: '#F97316',
|
|
38
|
+
title,
|
|
39
|
+
titleAlignment: 'left',
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
export function showSuccess(message) {
|
|
43
|
+
console.log(` ${chalk.green('✓')} ${message}`);
|
|
44
|
+
}
|
|
45
|
+
export function showError(message) {
|
|
46
|
+
console.log(` ${chalk.red('✗')} ${message}`);
|
|
47
|
+
}
|
|
48
|
+
export function showWarning(message) {
|
|
49
|
+
console.log(` ${chalk.yellow('!')} ${message}`);
|
|
50
|
+
}
|
|
51
|
+
export function showInfo(message) {
|
|
52
|
+
console.log(` ${chalk.blue('i')} ${message}`);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=banner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../../../src/cli/ui/banner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,GAAG;;;;;;;;;;;;6CAY0B,CAAC;AAE9C,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAE5E,MAAM,UAAU,UAAU;IACxB,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IAEtE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,CAAC,GAAG,CAAC,MAAM,OAAO,KAAK,OAAO,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,KAAK,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,IAAI,OAAO,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAe,EAAE,KAAc;IACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE;QACzB,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;QAChD,WAAW,EAAE,OAAO;QACpB,WAAW,EAAE,SAAS;QACtB,KAAK;QACL,cAAc,EAAE,MAAM;KACvB,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare function promptServerName(): Promise<string>;
|
|
2
|
+
export declare function promptTransportType(): Promise<'stdio' | 'sse' | 'streamable-http'>;
|
|
3
|
+
export declare function promptStdioCommand(): Promise<{
|
|
4
|
+
command: string;
|
|
5
|
+
args: string[];
|
|
6
|
+
}>;
|
|
7
|
+
export declare function promptUrl(): Promise<string>;
|
|
8
|
+
export declare function promptEnvVars(): Promise<Record<string, string>>;
|
|
9
|
+
export declare function promptConfirm(message: string, defaultValue?: boolean): Promise<boolean>;
|
|
10
|
+
export declare function promptPort(): Promise<number>;
|
|
11
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/cli/ui/prompts.ts"],"names":[],"mappings":"AAEA,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAKxD;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,GAAG,KAAK,GAAG,iBAAiB,CAAC,CASxF;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAYvF;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAYjD;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAoBrE;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,UAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAE1F;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAUlD"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { input, select, confirm } from '@inquirer/prompts';
|
|
2
|
+
export async function promptServerName() {
|
|
3
|
+
return input({
|
|
4
|
+
message: 'Server name (lowercase, hyphens ok):',
|
|
5
|
+
validate: (val) => /^[a-z0-9-]+$/.test(val) || 'Must be lowercase alphanumeric with hyphens',
|
|
6
|
+
});
|
|
7
|
+
}
|
|
8
|
+
export async function promptTransportType() {
|
|
9
|
+
return select({
|
|
10
|
+
message: 'Transport type:',
|
|
11
|
+
choices: [
|
|
12
|
+
{ value: 'stdio', name: 'stdio — Local process (most common)' },
|
|
13
|
+
{ value: 'sse', name: 'SSE — Remote HTTP+SSE endpoint' },
|
|
14
|
+
{ value: 'streamable-http', name: 'Streamable HTTP — Remote HTTP endpoint' },
|
|
15
|
+
],
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
export async function promptStdioCommand() {
|
|
19
|
+
const command = await input({
|
|
20
|
+
message: 'Command to run:',
|
|
21
|
+
default: 'npx',
|
|
22
|
+
});
|
|
23
|
+
const argsStr = await input({
|
|
24
|
+
message: 'Arguments (space-separated):',
|
|
25
|
+
default: '-y @modelcontextprotocol/server-filesystem .',
|
|
26
|
+
});
|
|
27
|
+
return { command, args: argsStr.split(/\s+/).filter(Boolean) };
|
|
28
|
+
}
|
|
29
|
+
export async function promptUrl() {
|
|
30
|
+
return input({
|
|
31
|
+
message: 'Server URL:',
|
|
32
|
+
validate: (val) => {
|
|
33
|
+
try {
|
|
34
|
+
new URL(val);
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return 'Must be a valid URL';
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
export async function promptEnvVars() {
|
|
44
|
+
const env = {};
|
|
45
|
+
let addMore = await confirm({
|
|
46
|
+
message: 'Add environment variables?',
|
|
47
|
+
default: false,
|
|
48
|
+
});
|
|
49
|
+
while (addMore) {
|
|
50
|
+
const name = await input({ message: 'Variable name:' });
|
|
51
|
+
const value = await input({ message: `Value for ${name}:` });
|
|
52
|
+
env[name] = value;
|
|
53
|
+
addMore = await confirm({
|
|
54
|
+
message: 'Add another variable?',
|
|
55
|
+
default: false,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
return env;
|
|
59
|
+
}
|
|
60
|
+
export async function promptConfirm(message, defaultValue = true) {
|
|
61
|
+
return confirm({ message, default: defaultValue });
|
|
62
|
+
}
|
|
63
|
+
export async function promptPort() {
|
|
64
|
+
const portStr = await input({
|
|
65
|
+
message: 'HTTP API port:',
|
|
66
|
+
default: '3456',
|
|
67
|
+
validate: (val) => {
|
|
68
|
+
const n = parseInt(val, 10);
|
|
69
|
+
return (n >= 1 && n <= 65535) || 'Must be 1-65535';
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
return parseInt(portStr, 10);
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/cli/ui/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ConnectedServer, IndexedTool, SearchResult } from '../../types/index.js';
|
|
2
|
+
export declare function renderServerTable(servers: ConnectedServer[]): string;
|
|
3
|
+
export declare function renderToolList(tools: IndexedTool[]): string;
|
|
4
|
+
export declare function renderSearchResults(results: SearchResult[]): string;
|
|
5
|
+
//# sourceMappingURL=table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/cli/ui/table.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAyBvF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,CAiCpE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,CAwB3D;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CA2BnE"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import Table from 'cli-table3';
|
|
3
|
+
const STATUS_COLORS = {
|
|
4
|
+
connected: chalk.green,
|
|
5
|
+
connecting: chalk.yellow,
|
|
6
|
+
disconnected: chalk.gray,
|
|
7
|
+
error: chalk.red,
|
|
8
|
+
};
|
|
9
|
+
function colorStatus(status) {
|
|
10
|
+
const colorFn = STATUS_COLORS[status] || chalk.white;
|
|
11
|
+
return colorFn(status);
|
|
12
|
+
}
|
|
13
|
+
function timeAgo(dateStr) {
|
|
14
|
+
const now = Date.now();
|
|
15
|
+
const then = new Date(dateStr).getTime();
|
|
16
|
+
const diffSec = Math.floor((now - then) / 1000);
|
|
17
|
+
if (diffSec < 60)
|
|
18
|
+
return `${diffSec}s ago`;
|
|
19
|
+
if (diffSec < 3600)
|
|
20
|
+
return `${Math.floor(diffSec / 60)}m ago`;
|
|
21
|
+
if (diffSec < 86400)
|
|
22
|
+
return `${Math.floor(diffSec / 3600)}h ago`;
|
|
23
|
+
return `${Math.floor(diffSec / 86400)}d ago`;
|
|
24
|
+
}
|
|
25
|
+
export function renderServerTable(servers) {
|
|
26
|
+
if (servers.length === 0) {
|
|
27
|
+
return chalk.gray(' No servers registered. Run `opalserve server add` to add one.');
|
|
28
|
+
}
|
|
29
|
+
const table = new Table({
|
|
30
|
+
head: [
|
|
31
|
+
chalk.bold('Name'),
|
|
32
|
+
chalk.bold('Transport'),
|
|
33
|
+
chalk.bold('Tools'),
|
|
34
|
+
chalk.bold('Status'),
|
|
35
|
+
chalk.bold('Last Seen'),
|
|
36
|
+
],
|
|
37
|
+
style: { head: [], border: ['gray'] },
|
|
38
|
+
chars: {
|
|
39
|
+
'top': '─', 'top-mid': '┬', 'top-left': '┌', 'top-right': '┐',
|
|
40
|
+
'bottom': '─', 'bottom-mid': '┴', 'bottom-left': '└', 'bottom-right': '┘',
|
|
41
|
+
'left': '│', 'left-mid': '├', 'mid': '─', 'mid-mid': '┼',
|
|
42
|
+
'right': '│', 'right-mid': '┤', 'middle': '│',
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
for (const server of servers) {
|
|
46
|
+
table.push([
|
|
47
|
+
chalk.white(server.name),
|
|
48
|
+
chalk.dim(server.transport),
|
|
49
|
+
chalk.cyan(String(server.toolCount)),
|
|
50
|
+
colorStatus(server.status),
|
|
51
|
+
server.lastSeen ? chalk.dim(timeAgo(server.lastSeen)) : chalk.dim('never'),
|
|
52
|
+
]);
|
|
53
|
+
}
|
|
54
|
+
return table.toString();
|
|
55
|
+
}
|
|
56
|
+
export function renderToolList(tools) {
|
|
57
|
+
if (tools.length === 0) {
|
|
58
|
+
return chalk.gray(' No tools discovered. Connect a server first.');
|
|
59
|
+
}
|
|
60
|
+
// Group by server
|
|
61
|
+
const grouped = new Map();
|
|
62
|
+
for (const tool of tools) {
|
|
63
|
+
const existing = grouped.get(tool.serverName) || [];
|
|
64
|
+
existing.push(tool);
|
|
65
|
+
grouped.set(tool.serverName, existing);
|
|
66
|
+
}
|
|
67
|
+
const lines = [];
|
|
68
|
+
for (const [serverName, serverTools] of grouped) {
|
|
69
|
+
lines.push(`\n ${chalk.bold.white(serverName)} ${chalk.dim(`(${serverTools.length} tools)`)}`);
|
|
70
|
+
for (const tool of serverTools) {
|
|
71
|
+
const name = chalk.cyan(tool.name.padEnd(26));
|
|
72
|
+
const desc = chalk.gray(tool.description || '');
|
|
73
|
+
lines.push(` ${name}${desc}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return lines.join('\n');
|
|
77
|
+
}
|
|
78
|
+
export function renderSearchResults(results) {
|
|
79
|
+
if (results.length === 0) {
|
|
80
|
+
return chalk.gray(' No results found.');
|
|
81
|
+
}
|
|
82
|
+
const table = new Table({
|
|
83
|
+
head: [
|
|
84
|
+
chalk.bold('Rank'),
|
|
85
|
+
chalk.bold('Tool'),
|
|
86
|
+
chalk.bold('Server'),
|
|
87
|
+
chalk.bold('Description'),
|
|
88
|
+
],
|
|
89
|
+
style: { head: [], border: ['gray'] },
|
|
90
|
+
colWidths: [8, 28, 18, 44],
|
|
91
|
+
wordWrap: true,
|
|
92
|
+
});
|
|
93
|
+
results.forEach((result, index) => {
|
|
94
|
+
table.push([
|
|
95
|
+
chalk.yellow(`#${index + 1}`),
|
|
96
|
+
chalk.cyan(result.tool.name),
|
|
97
|
+
chalk.dim(result.tool.serverName),
|
|
98
|
+
chalk.gray(result.tool.description || ''),
|
|
99
|
+
]);
|
|
100
|
+
});
|
|
101
|
+
return table.toString();
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../../../src/cli/ui/table.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface StoredCredentials {
|
|
2
|
+
serverUrl: string;
|
|
3
|
+
apiKey: string;
|
|
4
|
+
teamId?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function saveCredentials(creds: StoredCredentials): void;
|
|
7
|
+
export declare function loadCredentials(): StoredCredentials | null;
|
|
8
|
+
export declare function clearCredentials(): void;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/config/credentials.ts"],"names":[],"mappings":"AAIA,UAAU,iBAAiB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAMD,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAI9D;AAED,wBAAgB,eAAe,IAAI,iBAAiB,GAAG,IAAI,CAY1D;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAKvC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, mkdirSync, unlinkSync, existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
function getCredentialsPath() {
|
|
5
|
+
return join(homedir(), '.opalserve', 'credentials.json');
|
|
6
|
+
}
|
|
7
|
+
export function saveCredentials(creds) {
|
|
8
|
+
const filePath = getCredentialsPath();
|
|
9
|
+
mkdirSync(join(homedir(), '.opalserve'), { recursive: true });
|
|
10
|
+
writeFileSync(filePath, JSON.stringify(creds, null, 2), { mode: 0o600 });
|
|
11
|
+
}
|
|
12
|
+
export function loadCredentials() {
|
|
13
|
+
const filePath = getCredentialsPath();
|
|
14
|
+
if (!existsSync(filePath))
|
|
15
|
+
return null;
|
|
16
|
+
try {
|
|
17
|
+
const raw = readFileSync(filePath, 'utf-8');
|
|
18
|
+
const parsed = JSON.parse(raw);
|
|
19
|
+
if (!parsed.serverUrl || !parsed.apiKey)
|
|
20
|
+
return null;
|
|
21
|
+
return parsed;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export function clearCredentials() {
|
|
28
|
+
const filePath = getCredentialsPath();
|
|
29
|
+
if (existsSync(filePath)) {
|
|
30
|
+
unlinkSync(filePath);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/config/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAQlC,SAAS,kBAAkB;IACzB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAwB;IACtD,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IACtC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IACtC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAsB,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACrD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IACtC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,UAAU,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIzD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,gBAAgB,IAAI,eAAe,CASlD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { homedir } from 'node:os';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
const OPALSERVE_DIR = join(homedir(), '.opalserve');
|
|
4
|
+
export function getConfigDir() {
|
|
5
|
+
return OPALSERVE_DIR;
|
|
6
|
+
}
|
|
7
|
+
export function getDefaultDbPath() {
|
|
8
|
+
return join(OPALSERVE_DIR, 'data.db');
|
|
9
|
+
}
|
|
10
|
+
export function getDefaultConfig() {
|
|
11
|
+
return {
|
|
12
|
+
mode: 'local',
|
|
13
|
+
servers: [],
|
|
14
|
+
gateway: { port: 3456, host: '127.0.0.1' },
|
|
15
|
+
storage: { path: '' },
|
|
16
|
+
logging: { level: 'info' },
|
|
17
|
+
team: {},
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AAEpD,MAAM,UAAU,YAAY;IAC1B,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE;QAC1C,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACrB,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;QAC1B,IAAI,EAAE,EAAE;KACT,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIzD,wBAAsB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA8C9E;AAED,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CASrF"}
|