@floomhq/floom 3.1.0 → 5.0.1

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.
Files changed (72) hide show
  1. package/LICENSE +6 -0
  2. package/README.md +346 -168
  3. package/bin/floom-mcp +9 -0
  4. package/bin/workeros-mcp +13 -0
  5. package/dist/cli.d.ts +6 -0
  6. package/dist/cli.js +336 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/completion.d.ts +2 -0
  9. package/dist/commands/completion.js +81 -0
  10. package/dist/commands/completion.js.map +1 -0
  11. package/dist/commands/connections.d.ts +22 -0
  12. package/dist/commands/connections.js +158 -0
  13. package/dist/commands/connections.js.map +1 -0
  14. package/dist/commands/contexts.d.ts +34 -0
  15. package/dist/commands/contexts.js +247 -0
  16. package/dist/commands/contexts.js.map +1 -0
  17. package/dist/commands/doctor.d.ts +3 -0
  18. package/dist/commands/doctor.js +158 -0
  19. package/dist/commands/doctor.js.map +1 -0
  20. package/dist/commands/login.d.ts +14 -0
  21. package/dist/commands/login.js +349 -0
  22. package/dist/commands/login.js.map +1 -0
  23. package/dist/commands/logout.d.ts +1 -0
  24. package/dist/commands/logout.js +15 -0
  25. package/dist/commands/logout.js.map +1 -0
  26. package/dist/commands/mcp.d.ts +42 -0
  27. package/dist/commands/mcp.js +382 -0
  28. package/dist/commands/mcp.js.map +1 -0
  29. package/dist/commands/run.d.ts +15 -0
  30. package/dist/commands/run.js +154 -0
  31. package/dist/commands/run.js.map +1 -0
  32. package/dist/commands/runs.d.ts +25 -0
  33. package/dist/commands/runs.js +324 -0
  34. package/dist/commands/runs.js.map +1 -0
  35. package/dist/commands/secrets.d.ts +9 -0
  36. package/dist/commands/secrets.js +97 -0
  37. package/dist/commands/secrets.js.map +1 -0
  38. package/dist/commands/whoami.d.ts +3 -0
  39. package/dist/commands/whoami.js +70 -0
  40. package/dist/commands/whoami.js.map +1 -0
  41. package/dist/commands/workers.d.ts +30 -0
  42. package/dist/commands/workers.js +773 -0
  43. package/dist/commands/workers.js.map +1 -0
  44. package/dist/commands/workspaces.d.ts +10 -0
  45. package/dist/commands/workspaces.js +171 -0
  46. package/dist/commands/workspaces.js.map +1 -0
  47. package/dist/lib/api.d.ts +38 -0
  48. package/dist/lib/api.js +311 -0
  49. package/dist/lib/api.js.map +1 -0
  50. package/dist/lib/cli-errors.d.ts +1 -0
  51. package/dist/lib/cli-errors.js +20 -0
  52. package/dist/lib/cli-errors.js.map +1 -0
  53. package/dist/lib/command-name.d.ts +4 -0
  54. package/dist/lib/command-name.js +23 -0
  55. package/dist/lib/command-name.js.map +1 -0
  56. package/dist/lib/credentials.d.ts +21 -0
  57. package/dist/lib/credentials.js +138 -0
  58. package/dist/lib/credentials.js.map +1 -0
  59. package/dist/lib/output.d.ts +18 -0
  60. package/dist/lib/output.js +44 -0
  61. package/dist/lib/output.js.map +1 -0
  62. package/dist/lib/prompt.d.ts +2 -0
  63. package/dist/lib/prompt.js +55 -0
  64. package/dist/lib/prompt.js.map +1 -0
  65. package/dist/server.d.ts +5 -0
  66. package/dist/server.js +1171 -0
  67. package/dist/server.js.map +1 -0
  68. package/package.json +43 -51
  69. package/dist/index.d.ts +0 -1
  70. package/dist/index.js +0 -8278
  71. package/dist/version.d.ts +0 -1
  72. package/dist/version.js +0 -1
@@ -0,0 +1,382 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { mkdir, writeFile } from "node:fs/promises";
3
+ import { dirname, join } from "node:path";
4
+ import { createAuthenticatedClient, FloomApiClient } from "../lib/api.js";
5
+ import { handleAuthError } from "../lib/cli-errors.js";
6
+ import { getCommandName } from "../lib/command-name.js";
7
+ import { readCredentials, updateCredentials } from "../lib/credentials.js";
8
+ import { log, printJson, renderTable } from "../lib/output.js";
9
+ const DEFAULT_CLOUD_API_BASE = "https://workeros-api.floom.dev";
10
+ const DEFAULT_OSS_API_BASE = "https://localhost:8000";
11
+ const MCP_SERVER_NAME = "floom";
12
+ const LEGACY_MCP_SERVER_NAME = "workeros";
13
+ // Targets that write a file (kind = "object" or "array" for config shape).
14
+ const FILE_CLIENTS = [
15
+ { target: "claude", name: "Claude Code", path: ".claude/settings.json", kind: "object" },
16
+ { target: "cursor", name: "Cursor", path: ".cursor/mcp.json", kind: "object" },
17
+ { target: "windsurf", name: "Windsurf", path: ".codeium/windsurf/mcp_config.json", kind: "object" },
18
+ // VS Code: project-local first; fall back to user settings via --target vscode.
19
+ { target: "vscode", name: "VS Code", path: ".vscode/mcp.json", kind: "object" },
20
+ { target: "continue", name: "Continue", path: ".continue/.continuerc.json", kind: "array" },
21
+ ];
22
+ function resolveHomeDir() {
23
+ return process.env.HOME || process.env.USERPROFILE || "";
24
+ }
25
+ function readJson(path) {
26
+ if (!existsSync(path))
27
+ return {};
28
+ const raw = readFileSync(path, "utf8").trim();
29
+ if (!raw)
30
+ return {};
31
+ return JSON.parse(raw);
32
+ }
33
+ async function writeJson(path, value) {
34
+ await mkdir(dirname(path), { recursive: true });
35
+ await writeFile(path, `${JSON.stringify(value, null, 2)}\n`, "utf8");
36
+ }
37
+ // HTTP MCP config — url + headers, no subprocess needed.
38
+ function serverConfig(mcpUrl, headers) {
39
+ return { url: mcpUrl, headers };
40
+ }
41
+ function patchObjectConfig(config, mcpUrl, headers) {
42
+ const next = { ...config };
43
+ const mcpServers = typeof next.mcpServers === "object" && next.mcpServers && !Array.isArray(next.mcpServers)
44
+ ? { ...next.mcpServers }
45
+ : {};
46
+ delete mcpServers[LEGACY_MCP_SERVER_NAME];
47
+ mcpServers[MCP_SERVER_NAME] = serverConfig(mcpUrl, headers);
48
+ next.mcpServers = mcpServers;
49
+ return next;
50
+ }
51
+ function patchContinueConfig(config, mcpUrl, headers) {
52
+ const next = { ...config };
53
+ const servers = Array.isArray(next.mcpServers) ? [...next.mcpServers] : [];
54
+ const entry = {
55
+ name: MCP_SERVER_NAME,
56
+ ...serverConfig(mcpUrl, headers),
57
+ };
58
+ const existing = servers.findIndex((server) => (typeof server === "object" &&
59
+ server !== null &&
60
+ [MCP_SERVER_NAME, LEGACY_MCP_SERVER_NAME].includes(String(server.name))));
61
+ if (existing === -1) {
62
+ servers.push(entry);
63
+ }
64
+ else {
65
+ servers[existing] = entry;
66
+ }
67
+ next.mcpServers = servers;
68
+ return next;
69
+ }
70
+ function removeObjectConfig(config) {
71
+ const next = { ...config };
72
+ if (typeof next.mcpServers === "object" && next.mcpServers && !Array.isArray(next.mcpServers)) {
73
+ const mcpServers = { ...next.mcpServers };
74
+ delete mcpServers[MCP_SERVER_NAME];
75
+ delete mcpServers[LEGACY_MCP_SERVER_NAME];
76
+ next.mcpServers = mcpServers;
77
+ }
78
+ return next;
79
+ }
80
+ function removeContinueConfig(config) {
81
+ const next = { ...config };
82
+ const servers = Array.isArray(next.mcpServers) ? [...next.mcpServers] : [];
83
+ next.mcpServers = servers.filter((server) => (!(typeof server === "object" &&
84
+ server !== null &&
85
+ [MCP_SERVER_NAME, LEGACY_MCP_SERVER_NAME].includes(String(server.name)))));
86
+ return next;
87
+ }
88
+ function genericSnippet(mcpUrl, headers) {
89
+ return JSON.stringify({
90
+ mcpServers: {
91
+ [MCP_SERVER_NAME]: serverConfig(mcpUrl, headers),
92
+ },
93
+ }, null, 2);
94
+ }
95
+ function redactedHeaders(headers) {
96
+ return Object.fromEntries(Object.keys(headers).map((key) => [key, `<${key}>`]));
97
+ }
98
+ function manualSnippets(mcpUrl, headers) {
99
+ const snippet = genericSnippet(mcpUrl, redactedHeaders(headers));
100
+ return [
101
+ "No supported MCP client config was found.",
102
+ "Create one of these files and add the snippet below:",
103
+ "- ~/.claude/settings.json (--target claude)",
104
+ "- ~/.cursor/mcp.json (--target cursor)",
105
+ "- ~/.codeium/windsurf/mcp_config.json (--target windsurf)",
106
+ "- .vscode/mcp.json (--target vscode, workspace-local)",
107
+ "- ~/.continue/.continuerc.json (--target continue)",
108
+ "Or run with --target generic to print this snippet and paste it manually.",
109
+ "",
110
+ snippet,
111
+ ].join("\n");
112
+ }
113
+ function selectFileClients(target) {
114
+ return FILE_CLIENTS.filter((c) => c.target === target);
115
+ }
116
+ async function resolveMcpConfig(credentials, apiBase) {
117
+ if (credentials.mode === "oss") {
118
+ if (!credentials.api_secret) {
119
+ throw new Error(`OSS credentials missing api_secret. Run: ${getCommandName()} login`);
120
+ }
121
+ const headers = { "x-floom-secret": credentials.api_secret };
122
+ // OSS scopes by header, not URL: bake the active workspace in so the MCP
123
+ // session lands on the selected workspace instead of the default one.
124
+ if (credentials.workspace_id) {
125
+ headers["x-workeros-workspace"] = credentials.workspace_id;
126
+ }
127
+ // Self-hosted engines with user-header scope require x-floom-user.
128
+ if (credentials.user) {
129
+ headers["x-floom-user"] = credentials.user;
130
+ }
131
+ return {
132
+ mcpUrl: `${apiBase}/mcp-tools/serve`,
133
+ headers,
134
+ };
135
+ }
136
+ // Hosted mode requires a PAT — JWTs expire hourly and cannot be embedded in
137
+ // a static MCP config. PATs do not expire.
138
+ const pat = credentials.api_token;
139
+ if (!pat) {
140
+ throw new Error("Cloud MCP install requires a Personal Access Token (PAT).\n" +
141
+ "Generate one at https://floom.ai/settings/tokens, then run:\n" +
142
+ ` ${getCommandName()} login --pat <your-token>`);
143
+ }
144
+ // Resolve the workspace_id: stored in credentials, set via env var, or fetched from API.
145
+ let workspaceId = credentials.workspace_id || process.env.WORKEROS_WORKSPACE_ID?.trim();
146
+ if (!workspaceId) {
147
+ const client = new FloomApiClient(apiBase, credentials);
148
+ try {
149
+ const workspaces = await client.requestJson("GET", "/api/workspaces");
150
+ if (!Array.isArray(workspaces) || workspaces.length === 0) {
151
+ throw new Error("No workspaces found. Create a workspace first at https://floom.ai");
152
+ }
153
+ workspaceId = workspaces[0].id;
154
+ }
155
+ catch (err) {
156
+ const msg = err instanceof Error ? err.message : String(err);
157
+ throw new Error(`Could not resolve workspace ID. Set WORKEROS_WORKSPACE_ID or run: ${getCommandName()} login\nDetails: ${msg}`);
158
+ }
159
+ }
160
+ return {
161
+ mcpUrl: `${apiBase}/mcp/${workspaceId}`,
162
+ headers: { Authorization: `Bearer ${pat}` },
163
+ };
164
+ }
165
+ export async function mcpInstallCommand(options) {
166
+ const home = resolveHomeDir();
167
+ if (!home)
168
+ throw new Error("HOME is required");
169
+ const credentials = await readCredentials();
170
+ if (!credentials) {
171
+ log.err("Not logged in. Cannot install MCP config without credentials.");
172
+ log.info(`Run: ${getCommandName()} login`);
173
+ return 1;
174
+ }
175
+ const resolvedBase = (credentials.api_base ||
176
+ process.env.WORKEROS_API_BASE ||
177
+ (credentials.mode === "cloud" ? DEFAULT_CLOUD_API_BASE : DEFAULT_OSS_API_BASE)).replace(/\/+$/, "");
178
+ let mcpConfig;
179
+ try {
180
+ mcpConfig = await resolveMcpConfig(credentials, resolvedBase);
181
+ }
182
+ catch (err) {
183
+ log.err(err instanceof Error ? err.message : String(err));
184
+ return 1;
185
+ }
186
+ const { mcpUrl, headers } = mcpConfig;
187
+ // "generic" — print snippet for manual paste, no file written.
188
+ if (options.target === "generic") {
189
+ process.stdout.write(genericSnippet(mcpUrl, headers) + "\n");
190
+ return 0;
191
+ }
192
+ if (options.target) {
193
+ // Explicit target: write unconditionally (create file if absent).
194
+ const clients = selectFileClients(options.target);
195
+ if (clients.length === 0) {
196
+ log.err(`Unknown target: ${options.target}`);
197
+ log.info("Supported targets: claude | cursor | vscode | windsurf | continue | generic");
198
+ return 1;
199
+ }
200
+ const client = clients[0];
201
+ // VS Code workspace config lives relative to CWD, not HOME.
202
+ const configPath = client.target === "vscode"
203
+ ? join(process.cwd(), client.path)
204
+ : join(home, client.path);
205
+ const config = readJson(configPath);
206
+ const patched = client.kind === "array"
207
+ ? patchContinueConfig(config, mcpUrl, headers)
208
+ : patchObjectConfig(config, mcpUrl, headers);
209
+ await writeJson(configPath, patched);
210
+ const displayPath = client.target === "vscode" ? client.path : `~/${client.path}`;
211
+ log.ok(`Installed Floom MCP config for ${client.name}`);
212
+ log.kv("Config path", displayPath);
213
+ log.kv("MCP URL", mcpUrl);
214
+ return 0;
215
+ }
216
+ // No --target: auto-detect the first existing config file.
217
+ for (const client of FILE_CLIENTS) {
218
+ const configPath = client.target === "vscode"
219
+ ? join(process.cwd(), client.path)
220
+ : join(home, client.path);
221
+ if (!existsSync(configPath))
222
+ continue;
223
+ const config = readJson(configPath);
224
+ const patched = client.kind === "array"
225
+ ? patchContinueConfig(config, mcpUrl, headers)
226
+ : patchObjectConfig(config, mcpUrl, headers);
227
+ await writeJson(configPath, patched);
228
+ const displayPath = client.target === "vscode" ? client.path : `~/${client.path}`;
229
+ log.ok(`Installed Floom MCP config for ${client.name} (auto-detected)`);
230
+ log.kv("Config path", displayPath);
231
+ log.kv("MCP URL", mcpUrl);
232
+ return 0;
233
+ }
234
+ process.stdout.write(manualSnippets(mcpUrl, headers) + "\n");
235
+ return 0;
236
+ }
237
+ export async function mcpUninstallCommand(options) {
238
+ const home = resolveHomeDir();
239
+ if (!home)
240
+ throw new Error("HOME is required");
241
+ if (options.target === "generic") {
242
+ log.warn("generic target writes no file — nothing to uninstall.");
243
+ return 0;
244
+ }
245
+ const candidates = options.target
246
+ ? selectFileClients(options.target)
247
+ : [...FILE_CLIENTS];
248
+ for (const client of candidates) {
249
+ const configPath = client.target === "vscode"
250
+ ? join(process.cwd(), client.path)
251
+ : join(home, client.path);
252
+ if (!existsSync(configPath))
253
+ continue;
254
+ const config = readJson(configPath);
255
+ const patched = client.kind === "array" ? removeContinueConfig(config) : removeObjectConfig(config);
256
+ await writeJson(configPath, patched);
257
+ const displayPath = client.target === "vscode" ? client.path : `~/${client.path}`;
258
+ log.ok(`Removed Floom MCP config from ${client.name}`);
259
+ log.kv("Config path", displayPath);
260
+ return 0;
261
+ }
262
+ log.warn("No Floom MCP config entries were found.");
263
+ log.info(`Install first: ${getCommandName()} mcp install`);
264
+ return 0;
265
+ }
266
+ function mcpRowLabel(row) {
267
+ return String(row.mcp_label || row.display_name || row.app_name || "");
268
+ }
269
+ async function fetchMcpConnections(client) {
270
+ const rows = (await client.requestJson("GET", "/connections"));
271
+ return (Array.isArray(rows) ? rows : []).filter((row) => (row.kind || "composio") === "mcp");
272
+ }
273
+ export async function mcpListCommand(options) {
274
+ try {
275
+ const { client, credentials } = await createAuthenticatedClient();
276
+ const servers = await fetchMcpConnections(client);
277
+ const active = (credentials.active_mcp_label || "").toLowerCase();
278
+ if (options.json) {
279
+ printJson(servers.map((row) => ({
280
+ ...row,
281
+ active: !!active && mcpRowLabel(row).toLowerCase() === active,
282
+ })));
283
+ return 0;
284
+ }
285
+ if (servers.length === 0) {
286
+ log.info("No MCP servers configured.");
287
+ log.info(`Add one: ${getCommandName()} connections import-mcp-config <path>`);
288
+ return 0;
289
+ }
290
+ process.stdout.write(renderTable(servers.map((row) => ({
291
+ Active: mcpRowLabel(row).toLowerCase() === active && active ? "*" : " ",
292
+ Label: mcpRowLabel(row),
293
+ Transport: row.mcp_transport || "streamable_http",
294
+ Status: row.status || "-",
295
+ })), [
296
+ { key: "Active", label: " " },
297
+ { key: "Label", label: "Label" },
298
+ { key: "Transport", label: "Transport" },
299
+ { key: "Status", label: "Status" },
300
+ ]) + "\n");
301
+ return 0;
302
+ }
303
+ catch (error) {
304
+ const handled = handleAuthError(error);
305
+ if (handled !== null)
306
+ return handled;
307
+ throw error;
308
+ }
309
+ }
310
+ export async function mcpSwitchCommand(target) {
311
+ try {
312
+ const { client } = await createAuthenticatedClient();
313
+ const needle = target.trim().toLowerCase();
314
+ if (!needle) {
315
+ log.err("MCP server name is required");
316
+ return 1;
317
+ }
318
+ const servers = await fetchMcpConnections(client);
319
+ const match = servers.find((row) => mcpRowLabel(row).toLowerCase() === needle);
320
+ if (!match) {
321
+ log.err(`No configured MCP server matches "${target}".`);
322
+ process.stderr.write(`Run \`${getCommandName()} mcp list\` to see configured servers, or add one with ` +
323
+ `\`${getCommandName()} connections import-mcp-config <path>\`.\n`);
324
+ return 1;
325
+ }
326
+ const label = mcpRowLabel(match);
327
+ await updateCredentials({ active_mcp_label: label });
328
+ log.ok(`Active MCP server set to ${label}.`);
329
+ log.step(`Verify it responds: ${getCommandName()} mcp test`);
330
+ return 0;
331
+ }
332
+ catch (error) {
333
+ const handled = handleAuthError(error);
334
+ if (handled !== null)
335
+ return handled;
336
+ throw error;
337
+ }
338
+ }
339
+ // Tests the named MCP server, or the active one (`floom mcp switch`) when no
340
+ // name is given. The API probes the server live: MCP initialize + tools/list.
341
+ export async function mcpTestCommand(target, options) {
342
+ try {
343
+ const { client, credentials } = await createAuthenticatedClient();
344
+ const name = (target || credentials.active_mcp_label || "").trim();
345
+ if (!name) {
346
+ log.err("No MCP server specified and no active one is set.");
347
+ process.stderr.write(`Run \`${getCommandName()} mcp switch <name>\` first, or pass a name: ${getCommandName()} mcp test <name>\n`);
348
+ return 1;
349
+ }
350
+ const servers = await fetchMcpConnections(client);
351
+ const needle = name.toLowerCase();
352
+ const match = servers.find((row) => mcpRowLabel(row).toLowerCase() === needle);
353
+ if (!match || !match.id) {
354
+ log.err(`No configured MCP server matches "${name}".`);
355
+ process.stderr.write(`Run \`${getCommandName()} mcp list\` to see configured servers.\n`);
356
+ return 1;
357
+ }
358
+ const result = (await client.requestJson("POST", `/connections/${encodeURIComponent(match.id)}/test`));
359
+ const valid = result.status === "valid";
360
+ if (options.json) {
361
+ printJson({ label: mcpRowLabel(match), ...result });
362
+ return valid ? 0 : 1;
363
+ }
364
+ if (valid) {
365
+ log.ok(`${mcpRowLabel(match)} is reachable.`);
366
+ }
367
+ else {
368
+ log.err(`${mcpRowLabel(match)} failed: ${result.reason || result.status || "unknown error"}`);
369
+ }
370
+ if (result.tools && result.tools.length) {
371
+ log.kv("Tools", `${result.tools.length} (${result.tools.slice(0, 8).join(", ")}${result.tools.length > 8 ? ", …" : ""})`);
372
+ }
373
+ return valid ? 0 : 1;
374
+ }
375
+ catch (error) {
376
+ const handled = handleAuthError(error);
377
+ if (handled !== null)
378
+ return handled;
379
+ throw error;
380
+ }
381
+ }
382
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ type ParsedInputs = {
2
+ values: Record<string, unknown>;
3
+ fileUploads: Array<{
4
+ key: string;
5
+ path: string;
6
+ }>;
7
+ };
8
+ export declare function parseInputAssignments(inputs?: string[], inputsFile?: string): ParsedInputs;
9
+ export declare function runWorkerCommand(workerId: string, options: {
10
+ input?: string[];
11
+ inputsFile?: string;
12
+ outputDir?: string;
13
+ json?: boolean;
14
+ }): Promise<number>;
15
+ export {};
@@ -0,0 +1,154 @@
1
+ import { basename, resolve as resolvePath, join } from "node:path";
2
+ import { readFileSync } from "node:fs";
3
+ import { mkdir, writeFile } from "node:fs/promises";
4
+ import { createAuthenticatedClient, FloomApiError } from "../lib/api.js";
5
+ import { getCommandName } from "../lib/command-name.js";
6
+ import { log, printJson } from "../lib/output.js";
7
+ function sleep(ms) {
8
+ return new Promise((resolve) => setTimeout(resolve, ms));
9
+ }
10
+ function parseKeyValue(raw) {
11
+ const index = raw.indexOf("=");
12
+ if (index <= 0) {
13
+ throw new Error(`Invalid --input ${raw}. Expected key=value.`);
14
+ }
15
+ return { key: raw.slice(0, index).trim(), value: raw.slice(index + 1) };
16
+ }
17
+ export function parseInputAssignments(inputs = [], inputsFile) {
18
+ const values = {};
19
+ const fileUploads = [];
20
+ if (inputsFile) {
21
+ const raw = readFileSync(inputsFile, "utf8");
22
+ const parsed = JSON.parse(raw);
23
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
24
+ throw new Error("inputs file must contain a JSON object");
25
+ }
26
+ for (const [key, value] of Object.entries(parsed)) {
27
+ if (typeof value === "string" && value.startsWith("@")) {
28
+ fileUploads.push({ key, path: value.slice(1) });
29
+ }
30
+ else {
31
+ values[key] = value;
32
+ }
33
+ }
34
+ }
35
+ for (const item of inputs) {
36
+ const { key, value } = parseKeyValue(item);
37
+ if (value.startsWith("@")) {
38
+ fileUploads.push({ key, path: value.slice(1) });
39
+ }
40
+ else {
41
+ values[key] = value;
42
+ }
43
+ }
44
+ return { values, fileUploads };
45
+ }
46
+ function printPrettyRun(run, savedPaths) {
47
+ log.heading(`Run ${run.id}`);
48
+ log.kv("Status", run.status);
49
+ if (run.error) {
50
+ log.err(run.error);
51
+ }
52
+ if (run.output && Object.keys(run.output).length) {
53
+ log.blank();
54
+ log.info("Output:");
55
+ for (const [key, value] of Object.entries(run.output)) {
56
+ log.step(`${key}:`);
57
+ if (typeof value === "string") {
58
+ process.stdout.write(value + "\n");
59
+ }
60
+ else {
61
+ process.stdout.write(JSON.stringify(value, null, 2) + "\n");
62
+ }
63
+ }
64
+ }
65
+ if (savedPaths.length) {
66
+ log.blank();
67
+ log.info("Saved artifacts:");
68
+ for (const path of savedPaths) {
69
+ log.step(path);
70
+ }
71
+ }
72
+ }
73
+ export async function runWorkerCommand(workerId, options) {
74
+ const { client } = await createAuthenticatedClient().catch((error) => {
75
+ const message = error instanceof Error ? error.message : String(error);
76
+ if (message.includes("Not logged in")) {
77
+ log.err("Not authenticated.");
78
+ log.info(`Run: ${getCommandName()} login`);
79
+ process.exit(1);
80
+ }
81
+ throw error;
82
+ });
83
+ const parsedInputs = parseInputAssignments(options.input || [], options.inputsFile);
84
+ const resolvedInputs = { ...parsedInputs.values };
85
+ for (const upload of parsedInputs.fileUploads) {
86
+ const absolutePath = resolvePath(upload.path);
87
+ const uploadId = await client.uploadFile(upload.key, absolutePath);
88
+ resolvedInputs[upload.key] = uploadId;
89
+ }
90
+ let started;
91
+ try {
92
+ started = (await client.requestJson("POST", `/workers/${encodeURIComponent(workerId)}/runs`, { body: { inputs: resolvedInputs, trigger_source: "manual" } }));
93
+ }
94
+ catch (error) {
95
+ if (error instanceof FloomApiError && error.status === 404) {
96
+ log.err(`Worker '${workerId}' not found.`);
97
+ log.info(`List available workers: ${getCommandName()} workers list`);
98
+ return 1;
99
+ }
100
+ if (error instanceof FloomApiError && (error.status === 401 || error.status === 403)) {
101
+ log.err("Your session expired.");
102
+ log.info(`Re-run: ${getCommandName()} login`);
103
+ return 1;
104
+ }
105
+ if (error instanceof FloomApiError && error.status && error.status >= 500) {
106
+ log.err(`API error starting run.`);
107
+ log.info("Check API status, then retry. Report: https://github.com/floomhq/floom/issues");
108
+ return 1;
109
+ }
110
+ throw error;
111
+ }
112
+ const runId = started.run_id;
113
+ if (!runId) {
114
+ throw new Error("Run creation did not return run_id");
115
+ }
116
+ log.step(`Run started: ${runId}`);
117
+ let latest = null;
118
+ let lastStatus = "";
119
+ const terminal = new Set(["completed", "failed", "error", "approved", "rejected"]);
120
+ while (true) {
121
+ latest = (await client.requestJson("GET", `/runs/${encodeURIComponent(runId)}`));
122
+ if (latest.status !== lastStatus) {
123
+ log.step(`Status: ${latest.status}`);
124
+ lastStatus = latest.status;
125
+ }
126
+ if (terminal.has(latest.status))
127
+ break;
128
+ await sleep(2000);
129
+ }
130
+ const savedPaths = [];
131
+ if (options.outputDir && latest?.artifacts?.length) {
132
+ const outputDir = resolvePath(options.outputDir);
133
+ await mkdir(outputDir, { recursive: true });
134
+ for (const artifact of latest.artifacts) {
135
+ const name = basename(artifact.name || `${artifact.id}.bin`);
136
+ const targetPath = join(outputDir, name);
137
+ const bytes = await client.requestBuffer("GET", `/runs/${encodeURIComponent(runId)}/artifacts/${encodeURIComponent(artifact.id)}/download`);
138
+ await writeFile(targetPath, bytes);
139
+ savedPaths.push(targetPath);
140
+ }
141
+ }
142
+ if (!latest) {
143
+ throw new Error("Run polling ended without a run payload");
144
+ }
145
+ if (options.json) {
146
+ printJson(latest);
147
+ }
148
+ else {
149
+ printPrettyRun(latest, savedPaths);
150
+ }
151
+ const success = latest.status === "completed" || latest.status === "approved" || latest.status === "success";
152
+ return success ? 0 : 1;
153
+ }
154
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,WAAW,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAelD,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,uBAAuB,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,SAAmB,EAAE,EAAE,UAAmB;IAC9E,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,MAAM,WAAW,GAAyC,EAAE,CAAC;IAE7D,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QAC1D,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvD,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,cAAc,CAAC,GAAc,EAAE,UAAoB;IAC1D,GAAG,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;QACjD,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACtD,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;YACpB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QACtB,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC7B,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAgB,EAChB,OAAsF;IAEtF,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,yBAAyB,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACnE,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACtC,GAAG,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAC9B,GAAG,CAAC,IAAI,CAAC,QAAQ,cAAc,EAAE,QAAQ,CAAC,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,qBAAqB,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAEpF,MAAM,cAAc,GAA4B,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;IAC3E,KAAK,MAAM,MAAM,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC;QAC9C,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACnE,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;IACxC,CAAC;IAED,IAAI,OAA6C,CAAC;IAClD,IAAI,CAAC;QACH,OAAO,GAAG,CAAC,MAAM,MAAM,CAAC,WAAW,CACjC,MAAM,EACN,YAAY,kBAAkB,CAAC,QAAQ,CAAC,OAAO,EAC/C,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,CAC/D,CAAyC,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,aAAa,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,WAAW,QAAQ,cAAc,CAAC,CAAC;YAC3C,GAAG,CAAC,IAAI,CAAC,2BAA2B,cAAc,EAAE,eAAe,CAAC,CAAC;YACrE,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,KAAK,YAAY,aAAa,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC;YACrF,GAAG,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;YACjC,GAAG,CAAC,IAAI,CAAC,WAAW,cAAc,EAAE,QAAQ,CAAC,CAAC;YAC9C,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,KAAK,YAAY,aAAa,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;YAC1E,GAAG,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;YACnC,GAAG,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAC;YAC1F,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,gBAAgB,KAAK,EAAE,CAAC,CAAC;IAClC,IAAI,MAAM,GAAqB,IAAI,CAAC;IACpC,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;IACnF,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAc,CAAC;QAC9F,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,GAAG,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACrC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,CAAC;QACD,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;YAAE,MAAM;QACvC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,OAAO,CAAC,SAAS,IAAI,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QACnD,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;YAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACzC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,aAAa,CACtC,KAAK,EACL,SAAS,kBAAkB,CAAC,KAAK,CAAC,cAAc,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,CAC3F,CAAC;YACF,MAAM,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YACnC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,SAAS,CAAC,MAAM,CAAC,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC;IAC7G,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC"}
@@ -0,0 +1,25 @@
1
+ export declare function runsListCommand(options: {
2
+ worker?: string;
3
+ status?: string;
4
+ limit?: number;
5
+ json?: boolean;
6
+ }): Promise<number>;
7
+ export declare function runsShowCommand(runId: string, options: {
8
+ json?: boolean;
9
+ }): Promise<number>;
10
+ export declare function runsLogsCommand(runId: string, options: {
11
+ follow?: boolean;
12
+ }): Promise<number>;
13
+ export declare function runsDownloadCommand(runId: string): Promise<number>;
14
+ export declare function runsApproveCommand(runId: string, options: {
15
+ comment?: string;
16
+ edit?: string;
17
+ json?: boolean;
18
+ }): Promise<number>;
19
+ export declare function runsRejectCommand(runId: string, options: {
20
+ reason?: string;
21
+ json?: boolean;
22
+ }): Promise<number>;
23
+ export declare function runsCancelCommand(runId: string, options: {
24
+ json?: boolean;
25
+ }): Promise<number>;