@floomhq/floom 3.0.4 → 5.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/LICENSE +6 -0
- package/README.md +346 -168
- package/bin/floom-mcp +9 -0
- package/bin/workeros-mcp +13 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.js +336 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/completion.d.ts +2 -0
- package/dist/commands/completion.js +81 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/connections.d.ts +22 -0
- package/dist/commands/connections.js +158 -0
- package/dist/commands/connections.js.map +1 -0
- package/dist/commands/contexts.d.ts +34 -0
- package/dist/commands/contexts.js +247 -0
- package/dist/commands/contexts.js.map +1 -0
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.js +158 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/login.d.ts +14 -0
- package/dist/commands/login.js +349 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +1 -0
- package/dist/commands/logout.js +15 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/mcp.d.ts +42 -0
- package/dist/commands/mcp.js +382 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/run.d.ts +15 -0
- package/dist/commands/run.js +154 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/runs.d.ts +25 -0
- package/dist/commands/runs.js +324 -0
- package/dist/commands/runs.js.map +1 -0
- package/dist/commands/secrets.d.ts +9 -0
- package/dist/commands/secrets.js +97 -0
- package/dist/commands/secrets.js.map +1 -0
- package/dist/commands/whoami.d.ts +3 -0
- package/dist/commands/whoami.js +70 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/commands/workers.d.ts +30 -0
- package/dist/commands/workers.js +773 -0
- package/dist/commands/workers.js.map +1 -0
- package/dist/commands/workspaces.d.ts +10 -0
- package/dist/commands/workspaces.js +171 -0
- package/dist/commands/workspaces.js.map +1 -0
- package/dist/lib/api.d.ts +38 -0
- package/dist/lib/api.js +311 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/cli-errors.d.ts +1 -0
- package/dist/lib/cli-errors.js +20 -0
- package/dist/lib/cli-errors.js.map +1 -0
- package/dist/lib/command-name.d.ts +4 -0
- package/dist/lib/command-name.js +23 -0
- package/dist/lib/command-name.js.map +1 -0
- package/dist/lib/credentials.d.ts +21 -0
- package/dist/lib/credentials.js +126 -0
- package/dist/lib/credentials.js.map +1 -0
- package/dist/lib/output.d.ts +18 -0
- package/dist/lib/output.js +44 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/prompt.d.ts +2 -0
- package/dist/lib/prompt.js +55 -0
- package/dist/lib/prompt.js.map +1 -0
- package/dist/server.d.ts +5 -0
- package/dist/server.js +1171 -0
- package/dist/server.js.map +1 -0
- package/package.json +43 -51
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -8276
- package/dist/version.d.ts +0 -1
- package/dist/version.js +0 -1
package/dist/cli.js
ADDED
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { readFileSync, realpathSync } from "node:fs";
|
|
3
|
+
import { Command } from "commander";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { dirname, join, resolve } from "node:path";
|
|
6
|
+
import { runLoginCommand } from "./commands/login.js";
|
|
7
|
+
import { runLogoutCommand } from "./commands/logout.js";
|
|
8
|
+
import { runWhoamiCommand } from "./commands/whoami.js";
|
|
9
|
+
import { runWorkerCommand } from "./commands/run.js";
|
|
10
|
+
import { workersListCommand, workersShowCommand, workersInfoCommand, workersPushCommand, workersValidateCommand, } from "./commands/workers.js";
|
|
11
|
+
import { workspacesCreateCommand, workspacesListCommand, workspacesShowCommand, workspacesSwitchCommand, } from "./commands/workspaces.js";
|
|
12
|
+
import { runsApproveCommand, runsCancelCommand, runsDownloadCommand, runsListCommand, runsLogsCommand, runsRejectCommand, runsShowCommand, } from "./commands/runs.js";
|
|
13
|
+
import { secretsDeleteCommand, secretsListCommand, secretsSetCommand, } from "./commands/secrets.js";
|
|
14
|
+
import { connectionsAddCommand, connectionsImportMcpConfigCommand, connectionsListCommand, } from "./commands/connections.js";
|
|
15
|
+
import { contextsCreateCommand, contextsDeleteCommand, contextsDeleteFileCommand, contextsListCommand, contextsReadCommand, contextsRollbackCommand, contextsUploadCommand, contextsVersionsCommand, contextsWriteCommand, } from "./commands/contexts.js";
|
|
16
|
+
import { mcpInstallCommand, mcpListCommand, mcpSwitchCommand, mcpTestCommand, mcpUninstallCommand, } from "./commands/mcp.js";
|
|
17
|
+
import { completionCommand } from "./commands/completion.js";
|
|
18
|
+
import { doctorCommand } from "./commands/doctor.js";
|
|
19
|
+
import { main as runServer } from "./server.js";
|
|
20
|
+
import { getCommandName, resolveCommandName, setCommandName, } from "./lib/command-name.js";
|
|
21
|
+
export function getPackageVersion() {
|
|
22
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
23
|
+
const packageJsonPath = join(here, "..", "package.json");
|
|
24
|
+
const parsed = JSON.parse(readFileSync(packageJsonPath, "utf8"));
|
|
25
|
+
return parsed.version || "0.0.0";
|
|
26
|
+
}
|
|
27
|
+
async function runAction(result) {
|
|
28
|
+
const code = await result;
|
|
29
|
+
if (code !== 0) {
|
|
30
|
+
process.exitCode = code;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export function buildCliProgram(commandName = "floom") {
|
|
34
|
+
const program = new Command();
|
|
35
|
+
program
|
|
36
|
+
.name(commandName)
|
|
37
|
+
.description("Floom CLI")
|
|
38
|
+
.version(getPackageVersion())
|
|
39
|
+
.showHelpAfterError()
|
|
40
|
+
// OSS/self-hosted: identity sent as x-floom-user (engines with user-header
|
|
41
|
+
// scope require it). Also settable via WORKEROS_USER / FLOOM_USER.
|
|
42
|
+
.option("--user <user>", "OSS self-hosted: send x-floom-user header");
|
|
43
|
+
// A global --user must reach readCredentials(), which reads from env. Mirror
|
|
44
|
+
// the flag into WORKEROS_USER before any subcommand action runs.
|
|
45
|
+
program.hook("preSubcommand", (thisCommand) => {
|
|
46
|
+
const user = thisCommand.opts().user;
|
|
47
|
+
if (typeof user === "string" && user.trim()) {
|
|
48
|
+
process.env.WORKEROS_USER = user.trim();
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
program.command("login")
|
|
52
|
+
.description("Login via browser device authorization")
|
|
53
|
+
.option("--cloud", "Authenticate against a hosted Floom instance")
|
|
54
|
+
.action(async (options) => runAction(runLoginCommand(options)));
|
|
55
|
+
program.command("logout")
|
|
56
|
+
.description("Remove saved CLI credentials")
|
|
57
|
+
.action(async () => runAction(runLogoutCommand()));
|
|
58
|
+
program.command("whoami")
|
|
59
|
+
.description("Show current auth identity")
|
|
60
|
+
.option("--json", "Print raw JSON")
|
|
61
|
+
.action(async (options) => runAction(runWhoamiCommand(options)));
|
|
62
|
+
program.command("run")
|
|
63
|
+
.description("Start and monitor a worker run")
|
|
64
|
+
.argument("<id>", "Worker id")
|
|
65
|
+
.option("--input <key=value>", "Input key/value (repeatable)", (value, acc) => [...acc, value], [])
|
|
66
|
+
.option("-f, --inputs-file <path>", "Path to JSON inputs object")
|
|
67
|
+
.option("--output-dir <path>", "Save artifacts to this directory")
|
|
68
|
+
.option("--json", "Print final run JSON")
|
|
69
|
+
.action(async (id, options) => runAction(runWorkerCommand(id, options)));
|
|
70
|
+
const workers = program.command("workers").description("List or inspect workers");
|
|
71
|
+
workers.command("list")
|
|
72
|
+
.description("List workers")
|
|
73
|
+
.option("--json", "Print raw JSON")
|
|
74
|
+
.action(async (options) => runAction(workersListCommand(options)));
|
|
75
|
+
workers.command("show")
|
|
76
|
+
.description("Show a worker")
|
|
77
|
+
.argument("<id>", "Worker id")
|
|
78
|
+
.option("--json", "Print raw JSON")
|
|
79
|
+
.action(async (id, options) => runAction(workersShowCommand(id, options)));
|
|
80
|
+
workers.command("info")
|
|
81
|
+
.description("Pretty single-worker summary (description, trigger, connections, last run)")
|
|
82
|
+
.argument("<id>", "Worker id")
|
|
83
|
+
.option("--json", "Print raw JSON")
|
|
84
|
+
.action(async (id, options) => runAction(workersInfoCommand(id, options)));
|
|
85
|
+
workers.command("validate")
|
|
86
|
+
.description("Validate a local worker directory")
|
|
87
|
+
.argument("<dir>", "Directory containing worker.yml plus run.py or SKILL.md")
|
|
88
|
+
.action(async (dir) => runAction(workersValidateCommand(dir)));
|
|
89
|
+
workers.command("push")
|
|
90
|
+
.description("Create or update a worker from a local worker directory")
|
|
91
|
+
.argument("<dir>", "Directory containing worker.yml plus run.py or SKILL.md")
|
|
92
|
+
.action(async (dir) => runAction(workersPushCommand(dir)));
|
|
93
|
+
workers.command("run")
|
|
94
|
+
.description(`Trigger a worker run (alias for \`${commandName} run\`)`)
|
|
95
|
+
.argument("<id>", "Worker id")
|
|
96
|
+
.option("--input <key=value>", "Input key/value (repeatable)", (value, acc) => [...acc, value], [])
|
|
97
|
+
.option("-f, --inputs-file <path>", "Path to JSON inputs object")
|
|
98
|
+
.option("--output-dir <path>", "Save artifacts to this directory")
|
|
99
|
+
.option("--json", "Print final run JSON")
|
|
100
|
+
.action(async (id, options) => runAction(runWorkerCommand(id, options)));
|
|
101
|
+
const workspaces = program.command("workspaces")
|
|
102
|
+
.alias("workspace")
|
|
103
|
+
.description("Manage workspaces");
|
|
104
|
+
workspaces.command("list")
|
|
105
|
+
.description("List workspaces your credentials can access")
|
|
106
|
+
.option("--json", "Print raw JSON")
|
|
107
|
+
.action(async (options) => runAction(workspacesListCommand(options)));
|
|
108
|
+
workspaces.command("create")
|
|
109
|
+
.description("Create a workspace and make it active")
|
|
110
|
+
.argument("<name>", "Workspace name")
|
|
111
|
+
.option("--json", "Print raw JSON")
|
|
112
|
+
.action(async (name, options) => runAction(workspacesCreateCommand(name, options)));
|
|
113
|
+
workspaces.command("show")
|
|
114
|
+
.description("Show the currently active workspace")
|
|
115
|
+
.option("--json", "Print raw JSON")
|
|
116
|
+
.action(async (options) => runAction(workspacesShowCommand(options)));
|
|
117
|
+
workspaces.command("switch")
|
|
118
|
+
.alias("use")
|
|
119
|
+
.description("Switch the active workspace (matches by name or id; requires authenticated access)")
|
|
120
|
+
.argument("<name-or-id>", "Workspace name or id")
|
|
121
|
+
.action(async (target) => runAction(workspacesSwitchCommand(target)));
|
|
122
|
+
const runs = program.command("runs").description("Inspect worker runs");
|
|
123
|
+
runs.command("list")
|
|
124
|
+
.description("List runs")
|
|
125
|
+
.option("--worker <id>", "Filter by worker id")
|
|
126
|
+
.option("--status <status>", "Filter by run status")
|
|
127
|
+
.option("--limit <n>", "Number of rows", (value) => Number(value), 20)
|
|
128
|
+
.option("--json", "Print raw JSON")
|
|
129
|
+
.action(async (options) => runAction(runsListCommand(options)));
|
|
130
|
+
runs.command("show")
|
|
131
|
+
.description("Show run details")
|
|
132
|
+
.argument("<id>", "Run id")
|
|
133
|
+
.option("--json", "Print raw JSON")
|
|
134
|
+
.action(async (id, options) => runAction(runsShowCommand(id, options)));
|
|
135
|
+
runs.command("logs")
|
|
136
|
+
.description("Show run logs")
|
|
137
|
+
.argument("<id>", "Run id")
|
|
138
|
+
.option("-f, --follow", "Follow live run events")
|
|
139
|
+
.action(async (id, options) => runAction(runsLogsCommand(id, options)));
|
|
140
|
+
runs.command("download")
|
|
141
|
+
.description("Download run bundle archive")
|
|
142
|
+
.argument("<id>", "Run id")
|
|
143
|
+
.action(async (id) => runAction(runsDownloadCommand(id)));
|
|
144
|
+
runs.command("approve")
|
|
145
|
+
.description("Approve a pending approval run")
|
|
146
|
+
.argument("<id>", "Run id")
|
|
147
|
+
.option("--comment <text>", "Optional approval comment")
|
|
148
|
+
.option("--edit <json>", "Edited output JSON to approve with")
|
|
149
|
+
.option("--json", "Print raw JSON")
|
|
150
|
+
.action(async (id, options) => runAction(runsApproveCommand(id, options)));
|
|
151
|
+
runs.command("reject")
|
|
152
|
+
.description("Reject a pending approval run")
|
|
153
|
+
.argument("<id>", "Run id")
|
|
154
|
+
.option("--reason <text>", "Rejection reason")
|
|
155
|
+
.option("--json", "Print raw JSON")
|
|
156
|
+
.action(async (id, options) => runAction(runsRejectCommand(id, options)));
|
|
157
|
+
runs.command("cancel")
|
|
158
|
+
.description("Cancel a queued or running run")
|
|
159
|
+
.argument("<id>", "Run id")
|
|
160
|
+
.option("--json", "Print raw JSON")
|
|
161
|
+
.action(async (id, options) => runAction(runsCancelCommand(id, options)));
|
|
162
|
+
const secrets = program.command("secrets").description("Manage secrets");
|
|
163
|
+
secrets.command("list")
|
|
164
|
+
.description("List secret names")
|
|
165
|
+
.option("--json", "Print raw JSON")
|
|
166
|
+
.action(async (options) => runAction(secretsListCommand(options)));
|
|
167
|
+
secrets.command("set")
|
|
168
|
+
.description("Set a secret value")
|
|
169
|
+
.argument("<key>", "Secret name")
|
|
170
|
+
.option("--value <value>", "Secret value for non-interactive automation")
|
|
171
|
+
.action(async (key, options) => runAction(secretsSetCommand(key, options)));
|
|
172
|
+
secrets.command("delete")
|
|
173
|
+
.description("Delete a secret")
|
|
174
|
+
.argument("<key>", "Secret name")
|
|
175
|
+
.option("-y, --yes", "Skip confirmation")
|
|
176
|
+
.action(async (key, options) => runAction(secretsDeleteCommand(key, options)));
|
|
177
|
+
const connections = program.command("connections").description("Manage app and MCP connections");
|
|
178
|
+
connections.command("list")
|
|
179
|
+
.description("List saved connections")
|
|
180
|
+
.option("--json", "Print raw JSON")
|
|
181
|
+
.action(async (options) => runAction(connectionsListCommand(options)));
|
|
182
|
+
connections.command("add")
|
|
183
|
+
.description("Start OAuth for an app connection")
|
|
184
|
+
.argument("<app>", "App/toolkit slug, for example gmail, github, googlecalendar")
|
|
185
|
+
.option("--open", "Open the authorization URL in a browser")
|
|
186
|
+
.option("--json", "Print raw JSON")
|
|
187
|
+
.action(async (app, options) => runAction(connectionsAddCommand(app, options)));
|
|
188
|
+
connections.command("import-mcp-config")
|
|
189
|
+
.description("Import MCP servers from a Claude/Cursor/VS Code mcpServers JSON file")
|
|
190
|
+
.argument("<path>", "Path to MCP client config JSON")
|
|
191
|
+
.option("--json", "Print raw JSON")
|
|
192
|
+
.action(async (path, options) => runAction(connectionsImportMcpConfigCommand(path, options)));
|
|
193
|
+
const contexts = program.command("contexts")
|
|
194
|
+
.alias("context")
|
|
195
|
+
.description("Manage brain pack context folders");
|
|
196
|
+
contexts.command("list")
|
|
197
|
+
.description("List brain packs")
|
|
198
|
+
.option("--json", "Print raw JSON")
|
|
199
|
+
.action(async (options) => runAction(contextsListCommand(options)));
|
|
200
|
+
contexts.command("create")
|
|
201
|
+
.description("Create a brain pack")
|
|
202
|
+
.argument("<name>", "Brain pack name")
|
|
203
|
+
.option("--writeable", "Allow workers to write to this brain pack")
|
|
204
|
+
.option("--no-sensitive", "Enable git version history for this brain pack")
|
|
205
|
+
.option("--json", "Print raw JSON")
|
|
206
|
+
.action(async (name, options) => runAction(contextsCreateCommand(name, options)));
|
|
207
|
+
contexts.command("read")
|
|
208
|
+
.description("Read a UTF-8 file from a brain pack")
|
|
209
|
+
.argument("<name>", "Brain pack name")
|
|
210
|
+
.argument("<path>", "File path inside the brain pack")
|
|
211
|
+
.option("--json", "Print raw JSON")
|
|
212
|
+
.action(async (name, path, options) => runAction(contextsReadCommand(name, path, options)));
|
|
213
|
+
contexts.command("write")
|
|
214
|
+
.description("Write a UTF-8 file into a brain pack")
|
|
215
|
+
.argument("<name>", "Brain pack name")
|
|
216
|
+
.argument("<path>", "File path inside the brain pack")
|
|
217
|
+
.option("--content <text>", "Text content to write")
|
|
218
|
+
.option("--file <path>", "Read text content from a local file")
|
|
219
|
+
.option("--json", "Print raw JSON")
|
|
220
|
+
.action(async (name, path, options) => runAction(contextsWriteCommand(name, path, options)));
|
|
221
|
+
contexts.command("upload")
|
|
222
|
+
.description("Upload a local file into a brain pack")
|
|
223
|
+
.argument("<name>", "Brain pack name")
|
|
224
|
+
.argument("<file>", "Local file to upload")
|
|
225
|
+
.option("--path <path>", "Destination path inside the brain pack")
|
|
226
|
+
.option("--json", "Print raw JSON")
|
|
227
|
+
.action(async (name, file, options) => runAction(contextsUploadCommand(name, file, options)));
|
|
228
|
+
contexts.command("delete")
|
|
229
|
+
.description("Delete a brain pack")
|
|
230
|
+
.argument("<name>", "Brain pack name")
|
|
231
|
+
.option("--force", "Delete even when workers reference this brain pack")
|
|
232
|
+
.option("--json", "Print raw JSON")
|
|
233
|
+
.action(async (name, options) => runAction(contextsDeleteCommand(name, options)));
|
|
234
|
+
contexts.command("delete-file")
|
|
235
|
+
.description("Delete one file from a brain pack")
|
|
236
|
+
.argument("<name>", "Brain pack name")
|
|
237
|
+
.argument("<path>", "File path inside the brain pack")
|
|
238
|
+
.option("--json", "Print raw JSON")
|
|
239
|
+
.action(async (name, path, options) => runAction(contextsDeleteFileCommand(name, path, options)));
|
|
240
|
+
contexts.command("versions")
|
|
241
|
+
.description("List brain pack version history")
|
|
242
|
+
.argument("<name>", "Brain pack name")
|
|
243
|
+
.option("--limit <n>", "Number of versions", (value) => Number(value), 50)
|
|
244
|
+
.option("--json", "Print raw JSON")
|
|
245
|
+
.action(async (name, options) => runAction(contextsVersionsCommand(name, options)));
|
|
246
|
+
contexts.command("rollback")
|
|
247
|
+
.description("Restore a brain pack to a previous version")
|
|
248
|
+
.argument("<name>", "Brain pack name")
|
|
249
|
+
.argument("<version-id>", "Version id or git SHA")
|
|
250
|
+
.option("--json", "Print raw JSON")
|
|
251
|
+
.action(async (name, versionId, options) => runAction(contextsRollbackCommand(name, versionId, options)));
|
|
252
|
+
const mcp = program.command("mcp").description("Manage MCP servers and client config");
|
|
253
|
+
mcp.command("list")
|
|
254
|
+
.description("List configured MCP servers and mark the active one")
|
|
255
|
+
.option("--json", "Print raw JSON")
|
|
256
|
+
.action(async (options) => runAction(mcpListCommand(options)));
|
|
257
|
+
mcp.command("switch")
|
|
258
|
+
.description("Switch the active MCP server (matches by label)")
|
|
259
|
+
.argument("<name>", "MCP server label")
|
|
260
|
+
.action(async (target) => runAction(mcpSwitchCommand(target)));
|
|
261
|
+
mcp.command("test")
|
|
262
|
+
.description("Probe an MCP server (initialize + tools/list); defaults to the active one")
|
|
263
|
+
.argument("[name]", "MCP server label (defaults to the active server)")
|
|
264
|
+
.option("--json", "Print raw JSON")
|
|
265
|
+
.action(async (target, options) => runAction(mcpTestCommand(target, options)));
|
|
266
|
+
mcp.command("add")
|
|
267
|
+
.description("Add Floom to an MCP client config")
|
|
268
|
+
.option("--target <target>", "claude | cursor | vscode | windsurf | continue | generic")
|
|
269
|
+
.action(async (options) => runAction(mcpInstallCommand(options)));
|
|
270
|
+
mcp.command("install")
|
|
271
|
+
.description("Install MCP config for a client")
|
|
272
|
+
.option("--target <target>", "claude | cursor | vscode | windsurf | continue | generic")
|
|
273
|
+
.action(async (options) => runAction(mcpInstallCommand(options)));
|
|
274
|
+
mcp.command("uninstall")
|
|
275
|
+
.description("Remove MCP config for a client")
|
|
276
|
+
.option("--target <target>", "claude | cursor | vscode | windsurf | continue | generic")
|
|
277
|
+
.action(async (options) => runAction(mcpUninstallCommand(options)));
|
|
278
|
+
program.command("completion")
|
|
279
|
+
.description("Print shell completion script")
|
|
280
|
+
.argument("<shell>", "bash | zsh | fish")
|
|
281
|
+
.action(async (shell) => {
|
|
282
|
+
if (!["bash", "zsh", "fish"].includes(shell)) {
|
|
283
|
+
throw new Error("Shell must be one of: bash, zsh, fish");
|
|
284
|
+
}
|
|
285
|
+
await runAction(completionCommand(shell));
|
|
286
|
+
});
|
|
287
|
+
program.command("install")
|
|
288
|
+
.description("Install MCP config (deprecated alias for mcp install)")
|
|
289
|
+
.action(async () => runAction(mcpInstallCommand({})));
|
|
290
|
+
program.command("doctor")
|
|
291
|
+
.description("Check CLI setup: API reachable, auth valid, MCP installed, runs endpoint working")
|
|
292
|
+
.option("--json", "Print raw JSON")
|
|
293
|
+
.action(async (options) => runAction(doctorCommand(options)));
|
|
294
|
+
return program;
|
|
295
|
+
}
|
|
296
|
+
export async function main(argv = process.argv) {
|
|
297
|
+
const commandName = resolveCommandName(argv);
|
|
298
|
+
setCommandName(commandName);
|
|
299
|
+
const program = buildCliProgram(commandName);
|
|
300
|
+
const args = argv.slice(2);
|
|
301
|
+
if (args.length === 0) {
|
|
302
|
+
// MCP clients launch the server with a piped stdin (no TTY). A human running
|
|
303
|
+
// the bare command in a terminal instead gets help and a non-zero exit,
|
|
304
|
+
// rather than a silently-hanging stdio server.
|
|
305
|
+
if (process.stdin.isTTY) {
|
|
306
|
+
program.outputHelp();
|
|
307
|
+
process.exitCode = 1;
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
await runServer();
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
await program.parseAsync(argv);
|
|
314
|
+
}
|
|
315
|
+
function resolveExecutedPath(argv1) {
|
|
316
|
+
if (!argv1)
|
|
317
|
+
return "";
|
|
318
|
+
const absolute = resolve(argv1);
|
|
319
|
+
// npm installs bins as symlinks (node_modules/.bin/floom -> ../@floomhq/floom/dist/cli.js).
|
|
320
|
+
// import.meta.url is always the real module path, so compare against the resolved symlink target.
|
|
321
|
+
try {
|
|
322
|
+
return realpathSync(absolute);
|
|
323
|
+
}
|
|
324
|
+
catch {
|
|
325
|
+
return absolute;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
const executedPath = resolveExecutedPath(process.argv[1]);
|
|
329
|
+
if (executedPath && fileURLToPath(import.meta.url) === executedPath) {
|
|
330
|
+
main().catch((error) => {
|
|
331
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
332
|
+
console.error(`${getCommandName()} failed: ${message}`);
|
|
333
|
+
process.exit(1);
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,qBAAqB,EACrB,iCAAiC,EACjC,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAEL,cAAc,EACd,kBAAkB,EAClB,cAAc,GACf,MAAM,uBAAuB,CAAC;AAI/B,MAAM,UAAU,iBAAiB;IAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAyB,CAAC;IACzF,OAAO,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC;AACnC,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,MAAiB;IACxC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC;IAC1B,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QACf,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,cAA2B,OAAO;IAChE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,OAAO;SACJ,IAAI,CAAC,WAAW,CAAC;SACjB,WAAW,CAAC,WAAW,CAAC;SACxB,OAAO,CAAC,iBAAiB,EAAE,CAAC;SAC5B,kBAAkB,EAAE;QACrB,2EAA2E;QAC3E,mEAAmE;SAClE,MAAM,CAAC,eAAe,EAAE,2CAA2C,CAAC,CAAC;IAExE,6EAA6E;IAC7E,iEAAiE;IACjE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,WAAW,EAAE,EAAE;QAC5C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC;QACrC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;SACrB,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,SAAS,EAAE,8CAA8C,CAAC;SACjE,MAAM,CAAC,KAAK,EAAE,OAA4B,EAAE,EAAE,CAAC,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAEvF,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;SACtB,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;IAErD,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;SACtB,WAAW,CAAC,4BAA4B,CAAC;SACzC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,OAA2B,EAAE,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAEvF,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;SACnB,WAAW,CAAC,gCAAgC,CAAC;SAC7C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;SAC7B,MAAM,CAAC,qBAAqB,EAAE,8BAA8B,EAAE,CAAC,KAAa,EAAE,GAAa,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;SACpH,MAAM,CAAC,0BAA0B,EAAE,4BAA4B,CAAC;SAChE,MAAM,CAAC,qBAAqB,EAAE,kCAAkC,CAAC;SACjE,MAAM,CAAC,QAAQ,EAAE,sBAAsB,CAAC;SACxC,MAAM,CAAC,KAAK,EACX,EAAU,EACV,OAAsF,EACtF,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAEjD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;IAClF,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;SACpB,WAAW,CAAC,cAAc,CAAC;SAC3B,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,OAA2B,EAAE,EAAE,CAAC,SAAS,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACzF,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;SACpB,WAAW,CAAC,eAAe,CAAC;SAC5B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;SAC7B,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAA2B,EAAE,EAAE,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACzG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;SACpB,WAAW,CAAC,4EAA4E,CAAC;SACzF,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;SAC7B,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAA2B,EAAE,EAAE,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACzG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;SACxB,WAAW,CAAC,mCAAmC,CAAC;SAChD,QAAQ,CAAC,OAAO,EAAE,yDAAyD,CAAC;SAC5E,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,EAAE,CAAC,SAAS,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;SACpB,WAAW,CAAC,yDAAyD,CAAC;SACtE,QAAQ,CAAC,OAAO,EAAE,yDAAyD,CAAC;SAC5E,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,EAAE,CAAC,SAAS,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;SACnB,WAAW,CAAC,qCAAqC,WAAW,SAAS,CAAC;SACtE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;SAC7B,MAAM,CAAC,qBAAqB,EAAE,8BAA8B,EAAE,CAAC,KAAa,EAAE,GAAa,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;SACpH,MAAM,CAAC,0BAA0B,EAAE,4BAA4B,CAAC;SAChE,MAAM,CAAC,qBAAqB,EAAE,kCAAkC,CAAC;SACjE,MAAM,CAAC,QAAQ,EAAE,sBAAsB,CAAC;SACxC,MAAM,CAAC,KAAK,EACX,EAAU,EACV,OAAsF,EACtF,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAEjD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;SAC7C,KAAK,CAAC,WAAW,CAAC;SAClB,WAAW,CAAC,mBAAmB,CAAC,CAAC;IACpC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;SACvB,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,OAA2B,EAAE,EAAE,CAAC,SAAS,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5F,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC;SACzB,WAAW,CAAC,uCAAuC,CAAC;SACpD,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SACpC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAA2B,EAAE,EAAE,CAAC,SAAS,CAAC,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAClH,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;SACvB,WAAW,CAAC,qCAAqC,CAAC;SAClD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,OAA2B,EAAE,EAAE,CAAC,SAAS,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5F,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC;SACzB,KAAK,CAAC,KAAK,CAAC;SACZ,WAAW,CAAC,oFAAoF,CAAC;SACjG,QAAQ,CAAC,cAAc,EAAE,sBAAsB,CAAC;SAChD,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,EAAE,CAAC,SAAS,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAEhF,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;IACxE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;SACjB,WAAW,CAAC,WAAW,CAAC;SACxB,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAAC;SAC9C,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;SACnD,MAAM,CAAC,aAAa,EAAE,gBAAgB,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;SAC7E,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,OAA6E,EAAE,EAAE,CAC9F,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;SACjB,WAAW,CAAC,kBAAkB,CAAC;SAC/B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;SAC1B,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAA2B,EAAE,EAAE,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACtG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;SACjB,WAAW,CAAC,eAAe,CAAC;SAC5B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;SAC1B,MAAM,CAAC,cAAc,EAAE,wBAAwB,CAAC;SAChD,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAA6B,EAAE,EAAE,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACxG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;SACrB,WAAW,CAAC,6BAA6B,CAAC;SAC1C,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;SAC1B,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE,CAAC,SAAS,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;SACpB,WAAW,CAAC,gCAAgC,CAAC;SAC7C,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;SAC1B,MAAM,CAAC,kBAAkB,EAAE,2BAA2B,CAAC;SACvD,MAAM,CAAC,eAAe,EAAE,oCAAoC,CAAC;SAC7D,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAA4D,EAAE,EAAE,CACzF,SAAS,CAAC,kBAAkB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;SACnB,WAAW,CAAC,+BAA+B,CAAC;SAC5C,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;SAC1B,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;SAC7C,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAA4C,EAAE,EAAE,CACzE,SAAS,CAAC,iBAAiB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;SACnB,WAAW,CAAC,gCAAgC,CAAC;SAC7C,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;SAC1B,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAA2B,EAAE,EAAE,CACxD,SAAS,CAAC,iBAAiB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAE/C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IACzE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;SACpB,WAAW,CAAC,mBAAmB,CAAC;SAChC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,OAA2B,EAAE,EAAE,CAAC,SAAS,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACzF,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;SACnB,WAAW,CAAC,oBAAoB,CAAC;SACjC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;SAChC,MAAM,CAAC,iBAAiB,EAAE,6CAA6C,CAAC;SACxE,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,OAA2B,EAAE,EAAE,CAAC,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1G,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;SACtB,WAAW,CAAC,iBAAiB,CAAC;SAC9B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;SAChC,MAAM,CAAC,WAAW,EAAE,mBAAmB,CAAC;SACxC,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,OAA0B,EAAE,EAAE,CAAC,SAAS,CAAC,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAE5G,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC;IACjG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACxB,WAAW,CAAC,wBAAwB,CAAC;SACrC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,OAA2B,EAAE,EAAE,CAAC,SAAS,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7F,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;SACvB,WAAW,CAAC,mCAAmC,CAAC;SAChD,QAAQ,CAAC,OAAO,EAAE,6DAA6D,CAAC;SAChF,MAAM,CAAC,QAAQ,EAAE,yCAAyC,CAAC;SAC3D,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,OAA2C,EAAE,EAAE,CACzE,SAAS,CAAC,qBAAqB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACpD,WAAW,CAAC,OAAO,CAAC,mBAAmB,CAAC;SACrC,WAAW,CAAC,sEAAsE,CAAC;SACnF,QAAQ,CAAC,QAAQ,EAAE,gCAAgC,CAAC;SACpD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAA2B,EAAE,EAAE,CAC1D,SAAS,CAAC,iCAAiC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAEjE,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;SACzC,KAAK,CAAC,SAAS,CAAC;SAChB,WAAW,CAAC,mCAAmC,CAAC,CAAC;IACpD,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;SACrB,WAAW,CAAC,kBAAkB,CAAC;SAC/B,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,OAA2B,EAAE,EAAE,CAAC,SAAS,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1F,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;SACvB,WAAW,CAAC,qBAAqB,CAAC;SAClC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;SACrC,MAAM,CAAC,aAAa,EAAE,2CAA2C,CAAC;SAClE,MAAM,CAAC,gBAAgB,EAAE,gDAAgD,CAAC;SAC1E,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAAqE,EAAE,EAAE,CACpG,SAAS,CAAC,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;SACrB,WAAW,CAAC,qCAAqC,CAAC;SAClD,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;SACrC,QAAQ,CAAC,QAAQ,EAAE,iCAAiC,CAAC;SACrD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAY,EAAE,OAA2B,EAAE,EAAE,CACxE,SAAS,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACzD,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;SACtB,WAAW,CAAC,sCAAsC,CAAC;SACnD,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;SACrC,QAAQ,CAAC,QAAQ,EAAE,iCAAiC,CAAC;SACrD,MAAM,CAAC,kBAAkB,EAAE,uBAAuB,CAAC;SACnD,MAAM,CAAC,eAAe,EAAE,qCAAqC,CAAC;SAC9D,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAY,EAAE,OAA4D,EAAE,EAAE,CACzG,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1D,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;SACvB,WAAW,CAAC,uCAAuC,CAAC;SACpD,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;SACrC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;SAC1C,MAAM,CAAC,eAAe,EAAE,wCAAwC,CAAC;SACjE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAY,EAAE,OAA0C,EAAE,EAAE,CACvF,SAAS,CAAC,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3D,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;SACvB,WAAW,CAAC,qBAAqB,CAAC;SAClC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;SACrC,MAAM,CAAC,SAAS,EAAE,oDAAoD,CAAC;SACvE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAA4C,EAAE,EAAE,CAC3E,SAAS,CAAC,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC;SAC5B,WAAW,CAAC,mCAAmC,CAAC;SAChD,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;SACrC,QAAQ,CAAC,QAAQ,EAAE,iCAAiC,CAAC;SACrD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAY,EAAE,OAA2B,EAAE,EAAE,CACxE,SAAS,CAAC,yBAAyB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/D,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;SACzB,WAAW,CAAC,iCAAiC,CAAC;SAC9C,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;SACrC,MAAM,CAAC,aAAa,EAAE,oBAAoB,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;SACjF,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAA2C,EAAE,EAAE,CAC1E,SAAS,CAAC,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACvD,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;SACzB,WAAW,CAAC,4CAA4C,CAAC;SACzD,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;SACrC,QAAQ,CAAC,cAAc,EAAE,uBAAuB,CAAC;SACjD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,SAAiB,EAAE,OAA2B,EAAE,EAAE,CAC7E,SAAS,CAAC,uBAAuB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAElE,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,sCAAsC,CAAC,CAAC;IACvF,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;SAChB,WAAW,CAAC,qDAAqD,CAAC;SAClE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,OAA2B,EAAE,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACrF,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC;SAClB,WAAW,CAAC,iDAAiD,CAAC;SAC9D,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;SACtC,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACzE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;SAChB,WAAW,CAAC,2EAA2E,CAAC;SACxF,QAAQ,CAAC,QAAQ,EAAE,kDAAkD,CAAC;SACtE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,MAA0B,EAAE,OAA2B,EAAE,EAAE,CACxE,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAChD,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;SACf,WAAW,CAAC,mCAAmC,CAAC;SAChD,MAAM,CAAC,mBAAmB,EAAE,0DAA0D,CAAC;SACvF,MAAM,CAAC,KAAK,EAAE,OAA0F,EAAE,EAAE,CAC3G,SAAS,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;SACnB,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,mBAAmB,EAAE,0DAA0D,CAAC;SACvF,MAAM,CAAC,KAAK,EAAE,OAA0F,EAAE,EAAE,CAC3G,SAAS,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3C,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC;SACrB,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,mBAAmB,EAAE,0DAA0D,CAAC;SACvF,MAAM,CAAC,KAAK,EAAE,OAA0F,EAAE,EAAE,CAC3G,SAAS,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAE7C,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;SAC1B,WAAW,CAAC,+BAA+B,CAAC;SAC5C,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;SACxC,MAAM,CAAC,KAAK,EAAE,KAA8B,EAAE,EAAE;QAC/C,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEL,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;SACvB,WAAW,CAAC,uDAAuD,CAAC;SACpE,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAExD,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;SACtB,WAAW,CAAC,kFAAkF,CAAC;SAC/F,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,OAA2B,EAAE,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAEpF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;IAC5C,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC7C,cAAc,CAAC,WAAW,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,6EAA6E;QAC7E,wEAAwE;QACxE,+CAA+C;QAC/C,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACxB,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,MAAM,SAAS,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IACD,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAChC,4FAA4F;IAC5F,kGAAkG;IAClG,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,IAAI,YAAY,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,YAAY,EAAE,CAAC;IACpE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QAC9B,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CAAC,GAAG,cAAc,EAAE,YAAY,OAAO,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { getCommandName } from "../lib/command-name.js";
|
|
2
|
+
function bashCompletion(name) {
|
|
3
|
+
return `# ${name} bash completion
|
|
4
|
+
_${name}_completion() {
|
|
5
|
+
local cur prev
|
|
6
|
+
COMPREPLY=()
|
|
7
|
+
cur="\${COMP_WORDS[COMP_CWORD]}"
|
|
8
|
+
prev="\${COMP_WORDS[COMP_CWORD-1]}"
|
|
9
|
+
local commands="login logout whoami run workers workspaces workspace runs secrets connections contexts context mcp completion --help --version"
|
|
10
|
+
local workers_sub="list show"
|
|
11
|
+
local workspaces_sub="list create show switch use"
|
|
12
|
+
local runs_sub="list show logs download approve reject cancel"
|
|
13
|
+
local secrets_sub="list set delete"
|
|
14
|
+
local connections_sub="list add import-mcp-config"
|
|
15
|
+
local contexts_sub="list create read write upload delete delete-file versions rollback"
|
|
16
|
+
local mcp_sub="list switch test add install uninstall"
|
|
17
|
+
|
|
18
|
+
if [[ \${COMP_CWORD} -eq 1 ]]; then
|
|
19
|
+
COMPREPLY=( $(compgen -W "\${commands}" -- "\${cur}") )
|
|
20
|
+
return 0
|
|
21
|
+
fi
|
|
22
|
+
|
|
23
|
+
case "\${COMP_WORDS[1]}" in
|
|
24
|
+
workers) COMPREPLY=( $(compgen -W "\${workers_sub}" -- "\${cur}") ) ;;
|
|
25
|
+
workspaces|workspace) COMPREPLY=( $(compgen -W "\${workspaces_sub}" -- "\${cur}") ) ;;
|
|
26
|
+
runs) COMPREPLY=( $(compgen -W "\${runs_sub}" -- "\${cur}") ) ;;
|
|
27
|
+
secrets) COMPREPLY=( $(compgen -W "\${secrets_sub}" -- "\${cur}") ) ;;
|
|
28
|
+
connections) COMPREPLY=( $(compgen -W "\${connections_sub}" -- "\${cur}") ) ;;
|
|
29
|
+
contexts|context) COMPREPLY=( $(compgen -W "\${contexts_sub}" -- "\${cur}") ) ;;
|
|
30
|
+
mcp) COMPREPLY=( $(compgen -W "\${mcp_sub}" -- "\${cur}") ) ;;
|
|
31
|
+
esac
|
|
32
|
+
}
|
|
33
|
+
complete -F _${name}_completion ${name}
|
|
34
|
+
`;
|
|
35
|
+
}
|
|
36
|
+
function zshCompletion(name) {
|
|
37
|
+
return `#compdef ${name}
|
|
38
|
+
_${name}() {
|
|
39
|
+
local -a commands
|
|
40
|
+
commands=(
|
|
41
|
+
'login:Login via device code'
|
|
42
|
+
'logout:Clear local credentials'
|
|
43
|
+
'whoami:Show current identity'
|
|
44
|
+
'run:Run a worker'
|
|
45
|
+
'workers:List or show workers'
|
|
46
|
+
'workspaces:Manage workspaces'
|
|
47
|
+
'runs:List or inspect runs'
|
|
48
|
+
'secrets:Manage secrets'
|
|
49
|
+
'connections:Manage app and MCP connections'
|
|
50
|
+
'contexts:Manage brain pack context folders'
|
|
51
|
+
'mcp:Manage MCP servers and client config'
|
|
52
|
+
'completion:Print completion scripts'
|
|
53
|
+
)
|
|
54
|
+
_describe 'command' commands
|
|
55
|
+
}
|
|
56
|
+
compdef _${name} ${name}
|
|
57
|
+
`;
|
|
58
|
+
}
|
|
59
|
+
function fishCompletion(name) {
|
|
60
|
+
return `complete -c ${name} -f -a "login logout whoami run workers workspaces workspace runs secrets connections contexts context mcp completion"
|
|
61
|
+
complete -c ${name} -n "__fish_seen_subcommand_from workers" -a "list show"
|
|
62
|
+
complete -c ${name} -n "__fish_seen_subcommand_from workspaces workspace" -a "list create show switch use"
|
|
63
|
+
complete -c ${name} -n "__fish_seen_subcommand_from runs" -a "list show logs download approve reject cancel"
|
|
64
|
+
complete -c ${name} -n "__fish_seen_subcommand_from secrets" -a "list set delete"
|
|
65
|
+
complete -c ${name} -n "__fish_seen_subcommand_from connections" -a "list add import-mcp-config"
|
|
66
|
+
complete -c ${name} -n "__fish_seen_subcommand_from contexts context" -a "list create read write upload delete delete-file versions rollback"
|
|
67
|
+
complete -c ${name} -n "__fish_seen_subcommand_from mcp" -a "list switch test add install uninstall"
|
|
68
|
+
`;
|
|
69
|
+
}
|
|
70
|
+
export function completionScriptFor(shell, name = getCommandName()) {
|
|
71
|
+
if (shell === "bash")
|
|
72
|
+
return bashCompletion(name);
|
|
73
|
+
if (shell === "zsh")
|
|
74
|
+
return zshCompletion(name);
|
|
75
|
+
return fishCompletion(name);
|
|
76
|
+
}
|
|
77
|
+
export async function completionCommand(shell) {
|
|
78
|
+
process.stdout.write(completionScriptFor(shell));
|
|
79
|
+
return 0;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=completion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,KAAK,IAAI;GACf,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eA6BQ,IAAI,eAAe,IAAI;CACrC,CAAC;AACF,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,YAAY,IAAI;GACtB,IAAI;;;;;;;;;;;;;;;;;;WAkBI,IAAI,IAAI,IAAI;CACtB,CAAC;AACF,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,eAAe,IAAI;cACd,IAAI;cACJ,IAAI;cACJ,IAAI;cACJ,IAAI;cACJ,IAAI;cACJ,IAAI;cACJ,IAAI;CACjB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,KAA8B,EAC9B,OAAe,cAAc,EAAE;IAE/B,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAA8B;IACpE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
type McpTransport = "streamable_http" | "sse" | "stdio";
|
|
2
|
+
type ParsedMcpServer = {
|
|
3
|
+
label: string;
|
|
4
|
+
transport: McpTransport;
|
|
5
|
+
url?: string | null;
|
|
6
|
+
command?: string | null;
|
|
7
|
+
args?: string[];
|
|
8
|
+
env?: Record<string, string>;
|
|
9
|
+
cwd?: string | null;
|
|
10
|
+
};
|
|
11
|
+
export declare function parseMcpClientConfig(raw: string): ParsedMcpServer[];
|
|
12
|
+
export declare function connectionsListCommand(options: {
|
|
13
|
+
json?: boolean;
|
|
14
|
+
}): Promise<number>;
|
|
15
|
+
export declare function connectionsAddCommand(appName: string, options?: {
|
|
16
|
+
json?: boolean;
|
|
17
|
+
open?: boolean;
|
|
18
|
+
}): Promise<number>;
|
|
19
|
+
export declare function connectionsImportMcpConfigCommand(path: string, options: {
|
|
20
|
+
json?: boolean;
|
|
21
|
+
}): Promise<number>;
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import open from "open";
|
|
3
|
+
import { createAuthenticatedClient } from "../lib/api.js";
|
|
4
|
+
import { handleAuthError } from "../lib/cli-errors.js";
|
|
5
|
+
import { getCommandName } from "../lib/command-name.js";
|
|
6
|
+
import { log, printJson, renderTable } from "../lib/output.js";
|
|
7
|
+
function isRecord(value) {
|
|
8
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
9
|
+
}
|
|
10
|
+
function normalizeImportedEnv(env) {
|
|
11
|
+
const result = {};
|
|
12
|
+
for (const [key, value] of Object.entries(env)) {
|
|
13
|
+
const placeholder = value.match(/^\$\{?([A-Za-z_][A-Za-z0-9_]*)\}?$/);
|
|
14
|
+
result[key] = value.startsWith("secret:")
|
|
15
|
+
? value
|
|
16
|
+
: placeholder
|
|
17
|
+
? `secret:${placeholder[1]}`
|
|
18
|
+
: `secret:${key}`;
|
|
19
|
+
}
|
|
20
|
+
return result;
|
|
21
|
+
}
|
|
22
|
+
export function parseMcpClientConfig(raw) {
|
|
23
|
+
const parsed = JSON.parse(raw);
|
|
24
|
+
if (!isRecord(parsed))
|
|
25
|
+
throw new Error("MCP config must be a JSON object");
|
|
26
|
+
const servers = isRecord(parsed.mcpServers) ? parsed.mcpServers : parsed;
|
|
27
|
+
return Object.entries(servers).map(([label, value]) => {
|
|
28
|
+
if (!isRecord(value))
|
|
29
|
+
throw new Error(`MCP server "${label}" must be an object`);
|
|
30
|
+
const command = typeof value.command === "string" && value.command.trim() ? value.command.trim() : null;
|
|
31
|
+
const args = Array.isArray(value.args)
|
|
32
|
+
? value.args.filter((item) => typeof item === "string" && item.trim().length > 0)
|
|
33
|
+
: [];
|
|
34
|
+
const url = typeof value.url === "string" && value.url.trim()
|
|
35
|
+
? value.url.trim()
|
|
36
|
+
: typeof value.endpoint === "string" && value.endpoint.trim()
|
|
37
|
+
? value.endpoint.trim()
|
|
38
|
+
: null;
|
|
39
|
+
const transport = command || args.length
|
|
40
|
+
? "stdio"
|
|
41
|
+
: String(value.transport || "").toLowerCase() === "sse"
|
|
42
|
+
? "sse"
|
|
43
|
+
: "streamable_http";
|
|
44
|
+
const rawEnv = isRecord(value.env) ? value.env : {};
|
|
45
|
+
const env = {};
|
|
46
|
+
for (const [key, nested] of Object.entries(rawEnv)) {
|
|
47
|
+
if (typeof nested === "string")
|
|
48
|
+
env[key] = nested;
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
label,
|
|
52
|
+
transport,
|
|
53
|
+
url,
|
|
54
|
+
command,
|
|
55
|
+
args,
|
|
56
|
+
env: normalizeImportedEnv(env),
|
|
57
|
+
cwd: typeof value.cwd === "string" && value.cwd.trim() ? value.cwd.trim() : null,
|
|
58
|
+
};
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
export async function connectionsListCommand(options) {
|
|
62
|
+
try {
|
|
63
|
+
const { client } = await createAuthenticatedClient();
|
|
64
|
+
const rows = (await client.requestJson("GET", "/connections"));
|
|
65
|
+
if (options.json) {
|
|
66
|
+
printJson(rows);
|
|
67
|
+
return 0;
|
|
68
|
+
}
|
|
69
|
+
process.stdout.write(renderTable(rows.map((row) => ({
|
|
70
|
+
kind: row.kind || "composio",
|
|
71
|
+
app: row.kind === "mcp" ? row.mcp_label || row.app_name : row.app_name,
|
|
72
|
+
account: row.account_label || row.display_name || row.mcp_url || "-",
|
|
73
|
+
status: row.status,
|
|
74
|
+
last_used_by: row.last_used_by || "-",
|
|
75
|
+
})), [
|
|
76
|
+
{ key: "kind", label: "Kind" },
|
|
77
|
+
{ key: "app", label: "App" },
|
|
78
|
+
{ key: "account", label: "Account" },
|
|
79
|
+
{ key: "status", label: "Status" },
|
|
80
|
+
{ key: "last_used_by", label: "Last used by" },
|
|
81
|
+
]) + "\n");
|
|
82
|
+
return 0;
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
const handled = handleAuthError(error);
|
|
86
|
+
if (handled !== null)
|
|
87
|
+
return handled;
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
export async function connectionsAddCommand(appName, options = {}) {
|
|
92
|
+
try {
|
|
93
|
+
const normalized = appName.trim().toLowerCase();
|
|
94
|
+
if (!normalized) {
|
|
95
|
+
log.err("app name is required");
|
|
96
|
+
return 1;
|
|
97
|
+
}
|
|
98
|
+
const { client } = await createAuthenticatedClient();
|
|
99
|
+
const created = (await client.requestJson("POST", "/connections", {
|
|
100
|
+
body: { app_name: normalized },
|
|
101
|
+
}));
|
|
102
|
+
if (options.open) {
|
|
103
|
+
try {
|
|
104
|
+
await open(created.redirect_url);
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
log.warn("Could not open browser automatically.");
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (options.json) {
|
|
111
|
+
printJson(created);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
log.ok(`Started ${created.app_name} connection (${created.id}).`);
|
|
115
|
+
log.kv("Authorize", created.redirect_url);
|
|
116
|
+
log.step(`Complete the OAuth flow in the browser, then run \`${getCommandName()} connections list\`.`);
|
|
117
|
+
}
|
|
118
|
+
return 0;
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
const handled = handleAuthError(error);
|
|
122
|
+
if (handled !== null)
|
|
123
|
+
return handled;
|
|
124
|
+
throw error;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
export async function connectionsImportMcpConfigCommand(path, options) {
|
|
128
|
+
try {
|
|
129
|
+
const raw = await readFile(path, "utf8");
|
|
130
|
+
const servers = parseMcpClientConfig(raw);
|
|
131
|
+
const { client } = await createAuthenticatedClient();
|
|
132
|
+
const created = [];
|
|
133
|
+
for (const server of servers) {
|
|
134
|
+
if (server.transport === "stdio" && !server.command)
|
|
135
|
+
continue;
|
|
136
|
+
if (server.transport !== "stdio" && !server.url)
|
|
137
|
+
continue;
|
|
138
|
+
created.push(await client.requestJson("POST", "/connections/mcp", { body: server }));
|
|
139
|
+
}
|
|
140
|
+
if (options.json) {
|
|
141
|
+
printJson(created);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
log.ok(`Imported ${created.length} MCP server${created.length === 1 ? "" : "s"}`);
|
|
145
|
+
for (const server of created) {
|
|
146
|
+
log.kv(String(server.mcp_label || server.app_name || "mcp"), String(server.mcp_transport || "streamable_http"));
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return 0;
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
const handled = handleAuthError(error);
|
|
153
|
+
if (handled !== null)
|
|
154
|
+
return handled;
|
|
155
|
+
throw error;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=connections.js.map
|