@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.
- 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 +138 -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 -8278
- package/dist/version.d.ts +0 -1
- package/dist/version.js +0 -1
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
import { writeFile } from "node:fs/promises";
|
|
2
|
+
import { join, resolve as resolvePath } from "node:path";
|
|
3
|
+
import { createAuthenticatedClient, FloomApiError } from "../lib/api.js";
|
|
4
|
+
import { getCommandName } from "../lib/command-name.js";
|
|
5
|
+
import { log, printJson, renderTable } from "../lib/output.js";
|
|
6
|
+
function parseSseChunk(chunk) {
|
|
7
|
+
const events = [];
|
|
8
|
+
for (const block of chunk.split(/\r?\n\r?\n/)) {
|
|
9
|
+
if (!block.trim())
|
|
10
|
+
continue;
|
|
11
|
+
const dataLines = block
|
|
12
|
+
.split(/\r?\n/)
|
|
13
|
+
.filter((line) => line.startsWith("data:"))
|
|
14
|
+
.map((line) => line.slice(5).trim());
|
|
15
|
+
if (!dataLines.length)
|
|
16
|
+
continue;
|
|
17
|
+
const payload = dataLines.join("\n");
|
|
18
|
+
try {
|
|
19
|
+
events.push(JSON.parse(payload));
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
events.push(payload);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return events;
|
|
26
|
+
}
|
|
27
|
+
function handleAuthError(error) {
|
|
28
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
29
|
+
if (message.includes("Not logged in")) {
|
|
30
|
+
log.err("Not authenticated.");
|
|
31
|
+
process.stderr.write(`Run: ${getCommandName()} login\n`);
|
|
32
|
+
return 1;
|
|
33
|
+
}
|
|
34
|
+
if (error instanceof FloomApiError && (error.status === 401 || error.status === 403)) {
|
|
35
|
+
log.err("Your session expired.");
|
|
36
|
+
process.stderr.write(`Re-run: ${getCommandName()} login\n`);
|
|
37
|
+
return 1;
|
|
38
|
+
}
|
|
39
|
+
if (error instanceof FloomApiError && error.status && error.status >= 500) {
|
|
40
|
+
log.err(`API error: ${message}`);
|
|
41
|
+
process.stderr.write("Check API status, then retry. Report: https://github.com/floomhq/floom/issues\n");
|
|
42
|
+
return 1;
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
export async function runsListCommand(options) {
|
|
47
|
+
try {
|
|
48
|
+
const { client } = await createAuthenticatedClient();
|
|
49
|
+
const runs = (await client.requestJson("GET", "/runs", {
|
|
50
|
+
query: {
|
|
51
|
+
worker_id: options.worker,
|
|
52
|
+
status: options.status,
|
|
53
|
+
limit: options.limit || 20,
|
|
54
|
+
offset: 0,
|
|
55
|
+
},
|
|
56
|
+
}));
|
|
57
|
+
if (options.json) {
|
|
58
|
+
printJson(runs);
|
|
59
|
+
return 0;
|
|
60
|
+
}
|
|
61
|
+
process.stdout.write(renderTable(runs.map((run) => ({
|
|
62
|
+
id: run.id,
|
|
63
|
+
worker: run.worker_id,
|
|
64
|
+
status: run.status,
|
|
65
|
+
trigger: run.trigger_source,
|
|
66
|
+
created: run.created_at || "-",
|
|
67
|
+
})), [
|
|
68
|
+
{ key: "id", label: "Run" },
|
|
69
|
+
{ key: "worker", label: "Worker" },
|
|
70
|
+
{ key: "status", label: "Status" },
|
|
71
|
+
{ key: "trigger", label: "Trigger" },
|
|
72
|
+
{ key: "created", label: "Created" },
|
|
73
|
+
]) + "\n");
|
|
74
|
+
return 0;
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
const handled = handleAuthError(error);
|
|
78
|
+
if (handled !== null)
|
|
79
|
+
return handled;
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
export async function runsShowCommand(runId, options) {
|
|
84
|
+
try {
|
|
85
|
+
const { client } = await createAuthenticatedClient();
|
|
86
|
+
const run = await client.requestJson("GET", `/runs/${encodeURIComponent(runId)}`);
|
|
87
|
+
if (options.json) {
|
|
88
|
+
printJson(run);
|
|
89
|
+
return 0;
|
|
90
|
+
}
|
|
91
|
+
const detail = run;
|
|
92
|
+
log.heading(`Run ${detail.id}`);
|
|
93
|
+
log.kv("Worker", detail.worker_id);
|
|
94
|
+
log.kv("Status", detail.status);
|
|
95
|
+
if (detail.duration_ms !== undefined)
|
|
96
|
+
log.kv("Duration", `${detail.duration_ms}ms`);
|
|
97
|
+
if (detail.trigger_source)
|
|
98
|
+
log.kv("Trigger", detail.trigger_source);
|
|
99
|
+
// #1732: when the run is waiting on a human, surface the same tokenised
|
|
100
|
+
// review/approve link the web UI and chat tool emit so an operator can act
|
|
101
|
+
// straight from the terminal instead of hunting for the URL.
|
|
102
|
+
if (detail.status === "pending_approval" && detail.approval_trail?.link) {
|
|
103
|
+
log.kv("Review/approve at", detail.approval_trail.link);
|
|
104
|
+
}
|
|
105
|
+
if (detail.output && Object.keys(detail.output).length) {
|
|
106
|
+
log.blank();
|
|
107
|
+
log.info("Output:");
|
|
108
|
+
process.stdout.write(JSON.stringify(detail.output, null, 2) + "\n");
|
|
109
|
+
}
|
|
110
|
+
if (detail.artifacts?.length) {
|
|
111
|
+
log.blank();
|
|
112
|
+
log.info("Artifacts:");
|
|
113
|
+
for (const artifact of detail.artifacts) {
|
|
114
|
+
log.step(`${artifact.name} (${artifact.id})`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return 0;
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
if (error instanceof FloomApiError && error.status === 404) {
|
|
121
|
+
log.err(`Run '${runId}' not found.`);
|
|
122
|
+
log.info(`List recent runs: ${getCommandName()} runs list`);
|
|
123
|
+
return 1;
|
|
124
|
+
}
|
|
125
|
+
const handled = handleAuthError(error);
|
|
126
|
+
if (handled !== null)
|
|
127
|
+
return handled;
|
|
128
|
+
throw error;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
export async function runsLogsCommand(runId, options) {
|
|
132
|
+
try {
|
|
133
|
+
const { client, credentials } = await createAuthenticatedClient();
|
|
134
|
+
if (!options.follow) {
|
|
135
|
+
const logs = (await client.requestJson("GET", `/runs/${encodeURIComponent(runId)}/logs`));
|
|
136
|
+
for (const entry of logs) {
|
|
137
|
+
process.stdout.write(`[${entry.timestamp}] ${entry.level.toUpperCase()}: ${entry.message}\n`);
|
|
138
|
+
}
|
|
139
|
+
return 0;
|
|
140
|
+
}
|
|
141
|
+
// SSE follow needs a raw fetch (not requestJson), but we still want the
|
|
142
|
+
// hosted JWT + workspace header in hosted mode and x-floom-secret in OSS
|
|
143
|
+
// mode. authHeaders() resolves the right pair; the engine is mounted
|
|
144
|
+
// under /api on the cloud app, so prefix the events path there.
|
|
145
|
+
const eventsPath = credentials.mode === "cloud"
|
|
146
|
+
? `/api/runs/${encodeURIComponent(runId)}/events`
|
|
147
|
+
: `/runs/${encodeURIComponent(runId)}/events`;
|
|
148
|
+
const authHeaders = await client.authHeaders();
|
|
149
|
+
const response = await fetch(`${credentials.api_base}${eventsPath}`, {
|
|
150
|
+
method: "GET",
|
|
151
|
+
headers: {
|
|
152
|
+
accept: "text/event-stream",
|
|
153
|
+
...authHeaders,
|
|
154
|
+
},
|
|
155
|
+
});
|
|
156
|
+
if (!response.ok) {
|
|
157
|
+
log.err(`Failed to follow logs: HTTP ${response.status}`);
|
|
158
|
+
log.info(`Check run status: ${getCommandName()} runs show ${runId}`);
|
|
159
|
+
return 1;
|
|
160
|
+
}
|
|
161
|
+
if (!response.body) {
|
|
162
|
+
log.err("Events response body is missing");
|
|
163
|
+
log.info(`Check run status: ${getCommandName()} runs show ${runId}`);
|
|
164
|
+
return 1;
|
|
165
|
+
}
|
|
166
|
+
const terminalStatuses = new Set(["completed", "failed", "error", "approved", "rejected"]);
|
|
167
|
+
const reader = response.body.getReader();
|
|
168
|
+
const decoder = new TextDecoder();
|
|
169
|
+
let buffer = "";
|
|
170
|
+
while (true) {
|
|
171
|
+
const { done, value } = await reader.read();
|
|
172
|
+
if (done)
|
|
173
|
+
break;
|
|
174
|
+
buffer += decoder.decode(value, { stream: true });
|
|
175
|
+
const blocks = buffer.split(/\r?\n\r?\n/);
|
|
176
|
+
buffer = blocks.pop() || "";
|
|
177
|
+
for (const block of blocks) {
|
|
178
|
+
for (const event of parseSseChunk(block)) {
|
|
179
|
+
if (typeof event === "string") {
|
|
180
|
+
process.stdout.write(event + "\n");
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
const typed = event;
|
|
184
|
+
process.stdout.write(JSON.stringify(event) + "\n");
|
|
185
|
+
const status = typed.status || typed.data?.status;
|
|
186
|
+
const type = typed.type || typed.data?.type;
|
|
187
|
+
if (type === "close" || (status && terminalStatuses.has(status))) {
|
|
188
|
+
await reader.cancel();
|
|
189
|
+
return 0;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return 0;
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
const handled = handleAuthError(error);
|
|
198
|
+
if (handled !== null)
|
|
199
|
+
return handled;
|
|
200
|
+
throw error;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
export async function runsDownloadCommand(runId) {
|
|
204
|
+
try {
|
|
205
|
+
const { client } = await createAuthenticatedClient();
|
|
206
|
+
try {
|
|
207
|
+
const payload = await client.requestBuffer("GET", `/runs/${encodeURIComponent(runId)}/download`);
|
|
208
|
+
const outputPath = join(resolvePath(process.cwd()), `run-${runId}.zip`);
|
|
209
|
+
await writeFile(outputPath, payload);
|
|
210
|
+
log.ok(`Saved ${outputPath}`);
|
|
211
|
+
return 0;
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
if (error instanceof FloomApiError && error.status === 404) {
|
|
215
|
+
log.warn("Run download is not yet available for this run.");
|
|
216
|
+
log.info(`View run details: ${getCommandName()} runs show ${runId}`);
|
|
217
|
+
return 0;
|
|
218
|
+
}
|
|
219
|
+
throw error;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
const handled = handleAuthError(error);
|
|
224
|
+
if (handled !== null)
|
|
225
|
+
return handled;
|
|
226
|
+
throw error;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
export async function runsApproveCommand(runId, options) {
|
|
230
|
+
try {
|
|
231
|
+
const { client } = await createAuthenticatedClient();
|
|
232
|
+
let editedOutput;
|
|
233
|
+
if (options.edit) {
|
|
234
|
+
try {
|
|
235
|
+
editedOutput = JSON.parse(options.edit);
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
log.err("--edit must be valid JSON");
|
|
239
|
+
return 1;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
const body = {};
|
|
243
|
+
if (options.comment)
|
|
244
|
+
body.comment = options.comment;
|
|
245
|
+
if (editedOutput !== undefined)
|
|
246
|
+
body.edited_output = editedOutput;
|
|
247
|
+
const result = await client.requestJson("POST", `/runs/${encodeURIComponent(runId)}/approve`, { body });
|
|
248
|
+
if (options.json) {
|
|
249
|
+
printJson(result);
|
|
250
|
+
return 0;
|
|
251
|
+
}
|
|
252
|
+
const out = result;
|
|
253
|
+
log.ok(`Approved ${runId}`);
|
|
254
|
+
if (out.run_id && out.run_id !== runId)
|
|
255
|
+
log.info(`Follow-up run: ${out.run_id}`);
|
|
256
|
+
return 0;
|
|
257
|
+
}
|
|
258
|
+
catch (error) {
|
|
259
|
+
const handled = handleAuthError(error);
|
|
260
|
+
if (handled !== null)
|
|
261
|
+
return handled;
|
|
262
|
+
if (error instanceof FloomApiError && error.status === 404) {
|
|
263
|
+
log.err(`Run '${runId}' not found.`);
|
|
264
|
+
return 1;
|
|
265
|
+
}
|
|
266
|
+
if (error instanceof FloomApiError && error.status === 409) {
|
|
267
|
+
log.err(error.message);
|
|
268
|
+
return 1;
|
|
269
|
+
}
|
|
270
|
+
throw error;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
export async function runsRejectCommand(runId, options) {
|
|
274
|
+
try {
|
|
275
|
+
const { client } = await createAuthenticatedClient();
|
|
276
|
+
const body = {};
|
|
277
|
+
if (options.reason)
|
|
278
|
+
body.reason = options.reason;
|
|
279
|
+
const result = await client.requestJson("POST", `/runs/${encodeURIComponent(runId)}/reject`, { body });
|
|
280
|
+
if (options.json) {
|
|
281
|
+
printJson(result);
|
|
282
|
+
return 0;
|
|
283
|
+
}
|
|
284
|
+
log.ok(`Rejected ${runId}`);
|
|
285
|
+
return 0;
|
|
286
|
+
}
|
|
287
|
+
catch (error) {
|
|
288
|
+
const handled = handleAuthError(error);
|
|
289
|
+
if (handled !== null)
|
|
290
|
+
return handled;
|
|
291
|
+
if (error instanceof FloomApiError && error.status === 404) {
|
|
292
|
+
log.err(`Run '${runId}' not found.`);
|
|
293
|
+
return 1;
|
|
294
|
+
}
|
|
295
|
+
if (error instanceof FloomApiError && error.status === 409) {
|
|
296
|
+
log.err(error.message);
|
|
297
|
+
return 1;
|
|
298
|
+
}
|
|
299
|
+
throw error;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
export async function runsCancelCommand(runId, options) {
|
|
303
|
+
try {
|
|
304
|
+
const { client } = await createAuthenticatedClient();
|
|
305
|
+
const result = await client.requestJson("POST", `/runs/${encodeURIComponent(runId)}/cancel`);
|
|
306
|
+
if (options.json) {
|
|
307
|
+
printJson(result);
|
|
308
|
+
return 0;
|
|
309
|
+
}
|
|
310
|
+
log.ok(`Cancelled ${runId}`);
|
|
311
|
+
return 0;
|
|
312
|
+
}
|
|
313
|
+
catch (error) {
|
|
314
|
+
const handled = handleAuthError(error);
|
|
315
|
+
if (handled !== null)
|
|
316
|
+
return handled;
|
|
317
|
+
if (error instanceof FloomApiError && error.status === 404) {
|
|
318
|
+
log.err(`Run '${runId}' not found.`);
|
|
319
|
+
return 1;
|
|
320
|
+
}
|
|
321
|
+
throw error;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
//# sourceMappingURL=runs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runs.js","sourceRoot":"","sources":["../../src/commands/runs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function secretsListCommand(options: {
|
|
2
|
+
json?: boolean;
|
|
3
|
+
}): Promise<number>;
|
|
4
|
+
export declare function secretsSetCommand(key: string, options?: {
|
|
5
|
+
value?: string;
|
|
6
|
+
}): Promise<number>;
|
|
7
|
+
export declare function secretsDeleteCommand(key: string, options: {
|
|
8
|
+
yes?: boolean;
|
|
9
|
+
}): Promise<number>;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { createAuthenticatedClient, FloomApiError } from "../lib/api.js";
|
|
2
|
+
import { getCommandName } from "../lib/command-name.js";
|
|
3
|
+
import { promptHidden, promptYesNo } from "../lib/prompt.js";
|
|
4
|
+
import { log, printJson, renderTable } from "../lib/output.js";
|
|
5
|
+
const SECRET_NAME_PATTERN = /^[A-Z][A-Z0-9_]*$/;
|
|
6
|
+
function handleAuthError(error) {
|
|
7
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
8
|
+
if (message.includes("Not logged in")) {
|
|
9
|
+
log.err("Not authenticated.");
|
|
10
|
+
process.stderr.write(`Run: ${getCommandName()} login\n`);
|
|
11
|
+
return 1;
|
|
12
|
+
}
|
|
13
|
+
if (error instanceof FloomApiError && (error.status === 401 || error.status === 403)) {
|
|
14
|
+
log.err("Your session expired.");
|
|
15
|
+
process.stderr.write(`Re-run: ${getCommandName()} login\n`);
|
|
16
|
+
return 1;
|
|
17
|
+
}
|
|
18
|
+
if (error instanceof FloomApiError && error.status && error.status >= 500) {
|
|
19
|
+
log.err(`API error: ${message}`);
|
|
20
|
+
process.stderr.write("Check API status, then retry. Report: https://github.com/floomhq/floom/issues\n");
|
|
21
|
+
return 1;
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
export async function secretsListCommand(options) {
|
|
26
|
+
try {
|
|
27
|
+
const { client } = await createAuthenticatedClient();
|
|
28
|
+
const secrets = (await client.requestJson("GET", "/secrets"));
|
|
29
|
+
if (options.json) {
|
|
30
|
+
printJson(secrets);
|
|
31
|
+
return 0;
|
|
32
|
+
}
|
|
33
|
+
if (!secrets.length) {
|
|
34
|
+
log.info("No secrets stored.");
|
|
35
|
+
log.info(`Add one: ${getCommandName()} secrets set MY_SECRET`);
|
|
36
|
+
return 0;
|
|
37
|
+
}
|
|
38
|
+
process.stdout.write(renderTable(secrets.map((secret) => ({ name: secret.name })), [{ key: "name", label: "Name" }]) + "\n");
|
|
39
|
+
return 0;
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
const handled = handleAuthError(error);
|
|
43
|
+
if (handled !== null)
|
|
44
|
+
return handled;
|
|
45
|
+
throw error;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export async function secretsSetCommand(key, options = {}) {
|
|
49
|
+
if (!SECRET_NAME_PATTERN.test(key)) {
|
|
50
|
+
log.err(`Invalid secret name: '${key}'`);
|
|
51
|
+
log.info("Use UPPER_SNAKE_CASE (e.g., GITHUB_PAT)");
|
|
52
|
+
return 1;
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
const { client } = await createAuthenticatedClient();
|
|
56
|
+
const value = options.value ?? await promptHidden(`Value for ${key}: `);
|
|
57
|
+
if (!value) {
|
|
58
|
+
log.err("Secret value cannot be empty.");
|
|
59
|
+
log.info(`Run: ${getCommandName()} secrets set ${key} --value <value>`);
|
|
60
|
+
return 1;
|
|
61
|
+
}
|
|
62
|
+
await client.requestJson("POST", `/secrets/${encodeURIComponent(key)}`, { body: { value } });
|
|
63
|
+
log.ok(`Saved ${key}`);
|
|
64
|
+
return 0;
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
const handled = handleAuthError(error);
|
|
68
|
+
if (handled !== null)
|
|
69
|
+
return handled;
|
|
70
|
+
throw error;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
export async function secretsDeleteCommand(key, options) {
|
|
74
|
+
try {
|
|
75
|
+
const { client } = await createAuthenticatedClient();
|
|
76
|
+
const confirmed = options.yes || await promptYesNo(`Delete secret ${key}? [y/N] `, false);
|
|
77
|
+
if (!confirmed) {
|
|
78
|
+
log.info("Cancelled.");
|
|
79
|
+
return 0;
|
|
80
|
+
}
|
|
81
|
+
await client.requestJson("DELETE", `/secrets/${encodeURIComponent(key)}`);
|
|
82
|
+
log.ok(`Deleted ${key}`);
|
|
83
|
+
return 0;
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
if (error instanceof FloomApiError && error.status === 404) {
|
|
87
|
+
log.err(`Secret '${key}' not found.`);
|
|
88
|
+
log.info(`List available secrets: ${getCommandName()} secrets list`);
|
|
89
|
+
return 1;
|
|
90
|
+
}
|
|
91
|
+
const handled = handleAuthError(error);
|
|
92
|
+
if (handled !== null)
|
|
93
|
+
return handled;
|
|
94
|
+
throw error;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=secrets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/commands/secrets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { createAuthenticatedClient } from "../lib/api.js";
|
|
2
|
+
import { getCommandName } from "../lib/command-name.js";
|
|
3
|
+
import { maskSecret } from "../lib/credentials.js";
|
|
4
|
+
import { log, printJson } from "../lib/output.js";
|
|
5
|
+
export async function runWhoamiCommand(options = {}) {
|
|
6
|
+
try {
|
|
7
|
+
const { client, credentials } = await createAuthenticatedClient();
|
|
8
|
+
// /system/info lives on the engine app. In cloud the engine is mounted
|
|
9
|
+
// under /api, so cloud-mode whoami needs the /api prefix.
|
|
10
|
+
const path = credentials.mode === "cloud" ? "/api/system/info" : "/system/info";
|
|
11
|
+
const info = await client.requestJson("GET", path);
|
|
12
|
+
const payload = {
|
|
13
|
+
mode: credentials.mode,
|
|
14
|
+
api_base: credentials.api_base,
|
|
15
|
+
authed_at: credentials.authed_at,
|
|
16
|
+
system_info: info,
|
|
17
|
+
};
|
|
18
|
+
if (credentials.mode === "cloud") {
|
|
19
|
+
payload.workspace_id = credentials.workspace_id || null;
|
|
20
|
+
payload.workspace_name = credentials.workspace_name || null;
|
|
21
|
+
if (credentials.api_token) {
|
|
22
|
+
payload.api_token_masked = maskSecret(credentials.api_token);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
payload.refresh_token_masked = maskSecret(credentials.refresh_token || "");
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
payload.api_secret_masked = maskSecret(credentials.api_secret || "");
|
|
30
|
+
payload.user = credentials.user || null;
|
|
31
|
+
}
|
|
32
|
+
if (options.json) {
|
|
33
|
+
printJson(payload);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
log.heading("Identity");
|
|
37
|
+
log.kv("Mode", credentials.mode);
|
|
38
|
+
log.kv("API base", credentials.api_base);
|
|
39
|
+
const ws = credentials.workspace_name || credentials.workspace_id;
|
|
40
|
+
log.kv("Workspace", ws ? ws : `(none, run \`${getCommandName()} workspace switch <name>\`)`);
|
|
41
|
+
if (credentials.mode === "cloud") {
|
|
42
|
+
if (credentials.api_token) {
|
|
43
|
+
log.kv("API token", maskSecret(credentials.api_token));
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
log.kv("Refresh token", maskSecret(credentials.refresh_token || ""));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
log.kv("API secret", maskSecret(credentials.api_secret || ""));
|
|
51
|
+
if (credentials.user) {
|
|
52
|
+
log.kv("User", credentials.user);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
log.kv("Authed at", credentials.authed_at);
|
|
56
|
+
log.ok("System reachable");
|
|
57
|
+
}
|
|
58
|
+
return 0;
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
62
|
+
if (message.includes("Not logged in")) {
|
|
63
|
+
log.err("Not logged in.");
|
|
64
|
+
log.info(`Run: ${getCommandName()} login`);
|
|
65
|
+
return 1;
|
|
66
|
+
}
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=whoami.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
type WorkerSource = {
|
|
2
|
+
dir: string;
|
|
3
|
+
workerYml: string;
|
|
4
|
+
runPy?: string;
|
|
5
|
+
skillMd?: string;
|
|
6
|
+
files: Array<{
|
|
7
|
+
path: string;
|
|
8
|
+
content: string;
|
|
9
|
+
}>;
|
|
10
|
+
workerId: string;
|
|
11
|
+
displayName: string;
|
|
12
|
+
runtime: string;
|
|
13
|
+
entrypoint?: string;
|
|
14
|
+
};
|
|
15
|
+
export declare function loadWorkerSource(dirArg: string): Promise<{
|
|
16
|
+
source?: WorkerSource;
|
|
17
|
+
errors: string[];
|
|
18
|
+
}>;
|
|
19
|
+
export declare function workersValidateCommand(dir: string): Promise<number>;
|
|
20
|
+
export declare function workersPushCommand(dir: string): Promise<number>;
|
|
21
|
+
export declare function workersListCommand(options: {
|
|
22
|
+
json?: boolean;
|
|
23
|
+
}): Promise<number>;
|
|
24
|
+
export declare function workersShowCommand(workerId: string, options: {
|
|
25
|
+
json?: boolean;
|
|
26
|
+
}): Promise<number>;
|
|
27
|
+
export declare function workersInfoCommand(workerId: string, options: {
|
|
28
|
+
json?: boolean;
|
|
29
|
+
}): Promise<number>;
|
|
30
|
+
export {};
|