stow-cli 1.0.3 → 2.0.2

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 (63) hide show
  1. package/dist/{app-JPUDM4LJ.js → app-2A2CFVBC.js} +1 -1
  2. package/dist/app-2H4TLSN7.js +239 -0
  3. package/dist/app-DTW2LNXW.js +249 -0
  4. package/dist/app-HYCPA7GA.js +239 -0
  5. package/dist/app-IZGSPZPX.js +239 -0
  6. package/dist/app-UGUM75MC.js +239 -0
  7. package/dist/app-XPOEAZJC.js +239 -0
  8. package/dist/app-YITP5APT.js +233 -0
  9. package/dist/{backfill-QZTVNJZM.js → backfill-G57M2BRA.js} +3 -3
  10. package/dist/{buckets-JQKZ3PH3.js → buckets-NXIVHPW5.js} +2 -2
  11. package/dist/chunk-2AORPTQB.js +23 -0
  12. package/dist/chunk-5LU25QZK.js +17 -0
  13. package/dist/chunk-FEMMZ4YZ.js +125 -0
  14. package/dist/chunk-LYCXXF2T.js +79 -0
  15. package/dist/chunk-MHRMBH4Y.js +36 -0
  16. package/dist/{chunk-WAQSCS57.js → chunk-QF7PVPWQ.js} +1 -1
  17. package/dist/chunk-R5CCBTXZ.js +79 -0
  18. package/dist/chunk-TOADDO2F.js +23 -0
  19. package/dist/chunk-YRHPOFJT.js +115 -0
  20. package/dist/chunk-ZDVARBCV.js +43 -0
  21. package/dist/cli.d.ts +1 -0
  22. package/dist/cli.js +43 -43
  23. package/dist/delete-AECEJX5W.js +18 -0
  24. package/dist/delete-GEX3O7YS.js +14 -0
  25. package/dist/delete-KYOZEODD.js +18 -0
  26. package/dist/delete-OLOAJRRO.js +18 -0
  27. package/dist/delete-V4EY4UBG.js +18 -0
  28. package/dist/{drops-QXGTYB5E.js → drops-RD55IDZ4.js} +2 -2
  29. package/dist/{files-OCYICIAM.js → files-E662TXUP.js} +3 -3
  30. package/dist/{health-YMZTZUFX.js → health-6LWM7KAT.js} +3 -3
  31. package/dist/{jobs-6JY4SVV5.js → jobs-CLXYKZ3B.js} +4 -4
  32. package/dist/{jobs-OKKGKSIH.js → jobs-K3LTNETU.js} +5 -5
  33. package/dist/list-7A3VZA2T.js +97 -0
  34. package/dist/list-DHXVIMRI.js +94 -0
  35. package/dist/list-DJEAKEZJ.js +106 -0
  36. package/dist/list-DQRU6QHO.js +106 -0
  37. package/dist/list-I5A6LTHX.js +106 -0
  38. package/dist/list-KEQPJY7I.js +109 -0
  39. package/dist/list-Z3MPT6MI.js +109 -0
  40. package/dist/{maintenance-EZUHQK5Q.js → maintenance-7LOAGG6J.js} +6 -6
  41. package/dist/open-2YNHG3MA.js +15 -0
  42. package/dist/open-F73Q2OHD.js +15 -0
  43. package/dist/{profiles-GWLBEEIT.js → profiles-C6SCFXS6.js} +2 -2
  44. package/dist/{queues-EQX7EJZF.js → queues-2GJAMMNF.js} +4 -4
  45. package/dist/{search-2PXM6XQ6.js → search-DV4VV62L.js} +2 -2
  46. package/dist/{tags-LSVEIIUF.js → tags-URHK2YH5.js} +2 -2
  47. package/dist/upload-3NS5O3UL.js +120 -0
  48. package/dist/upload-5RIDB2C5.js +92 -0
  49. package/dist/upload-B2PGW3AN.js +125 -0
  50. package/dist/{upload-ESYKBYHA.js → upload-DQDBDIDI.js} +1 -1
  51. package/dist/upload-FGNGNPC3.js +93 -0
  52. package/dist/upload-HKUPWTK2.js +173 -0
  53. package/dist/upload-JDVSJVWK.js +173 -0
  54. package/dist/upload-K4H7ZVRW.js +98 -0
  55. package/dist/upload-MI6VFGTC.js +92 -0
  56. package/dist/whoami-2SLCNVKP.js +27 -0
  57. package/dist/whoami-5IYRZKWS.js +28 -0
  58. package/dist/{whoami-4UYMSRVP.js → whoami-754O5IML.js} +1 -1
  59. package/dist/whoami-DOMX3Z5K.js +28 -0
  60. package/dist/whoami-IPMCUEUH.js +27 -0
  61. package/dist/whoami-JSQA2IDN.js +27 -0
  62. package/dist/whoami-RKH5HHPR.js +27 -0
  63. package/package.json +4 -4
@@ -0,0 +1,115 @@
1
+ import {
2
+ getApiKey,
3
+ getBaseUrl
4
+ } from "./chunk-2AORPTQB.js";
5
+
6
+ // src/lib/api.ts
7
+ var StowApiError = class extends Error {
8
+ status;
9
+ code;
10
+ constructor(status, message, code) {
11
+ super(message);
12
+ this.name = "StowApiError";
13
+ this.status = status;
14
+ this.code = code;
15
+ }
16
+ };
17
+ function formatApiError(status, message) {
18
+ switch (status) {
19
+ case 401:
20
+ return "Invalid API key. Set STOW_API_KEY or get one at stow.sh/dashboard/api-keys";
21
+ case 403:
22
+ return message || "Permission denied";
23
+ case 404:
24
+ return message || "Not found";
25
+ case 413:
26
+ return "File too large (max 50MB)";
27
+ case 429:
28
+ return "Rate limit exceeded. Try again shortly.";
29
+ default:
30
+ return message || `Request failed (${status})`;
31
+ }
32
+ }
33
+ async function apiRequest(path, options = {}) {
34
+ const apiKey = getApiKey();
35
+ const baseUrl = getBaseUrl();
36
+ const url = `${baseUrl}${path}`;
37
+ const headers = {
38
+ "x-api-key": apiKey,
39
+ ...options.headers || {}
40
+ };
41
+ if (options.body && typeof options.body === "string") {
42
+ headers["Content-Type"] = "application/json";
43
+ }
44
+ let response;
45
+ try {
46
+ response = await fetch(url, { ...options, headers });
47
+ } catch (err) {
48
+ const msg = err instanceof Error ? err.message : String(err);
49
+ if (msg.includes("ECONNREFUSED")) {
50
+ throw new StowApiError(0, `Cannot connect to ${baseUrl}. Is the server running?`);
51
+ }
52
+ if (msg.includes("ENOTFOUND")) {
53
+ throw new StowApiError(0, `Cannot resolve ${baseUrl}. Check your STOW_API_URL or internet connection.`);
54
+ }
55
+ throw new StowApiError(0, `Network error: ${msg}`);
56
+ }
57
+ if (!response.ok) {
58
+ const data = await response.json().catch(() => ({}));
59
+ const serverMsg = data.error;
60
+ const code = data.code;
61
+ throw new StowApiError(
62
+ response.status,
63
+ formatApiError(response.status, serverMsg || ""),
64
+ code
65
+ );
66
+ }
67
+ return await response.json();
68
+ }
69
+ async function apiUpload(path, fileBuffer, filename, contentType) {
70
+ const apiKey = getApiKey();
71
+ const baseUrl = getBaseUrl();
72
+ const boundary = `----stow${Date.now()}`;
73
+ const parts = [];
74
+ parts.push(Buffer.from(`--${boundary}\r
75
+ `));
76
+ parts.push(Buffer.from(`Content-Disposition: form-data; name="file"; filename="${filename}"\r
77
+ `));
78
+ parts.push(Buffer.from(`Content-Type: ${contentType}\r
79
+ \r
80
+ `));
81
+ parts.push(fileBuffer);
82
+ parts.push(Buffer.from(`\r
83
+ --${boundary}--\r
84
+ `));
85
+ const body = Buffer.concat(parts);
86
+ let response;
87
+ try {
88
+ response = await fetch(`${baseUrl}${path}`, {
89
+ method: "POST",
90
+ headers: {
91
+ "x-api-key": apiKey,
92
+ "Content-Type": `multipart/form-data; boundary=${boundary}`
93
+ },
94
+ body
95
+ });
96
+ } catch (err) {
97
+ const msg = err instanceof Error ? err.message : String(err);
98
+ throw new StowApiError(0, `Network error: ${msg}`);
99
+ }
100
+ if (!response.ok) {
101
+ const data = await response.json().catch(() => ({}));
102
+ const serverMsg = data.error;
103
+ throw new StowApiError(
104
+ response.status,
105
+ formatApiError(response.status, serverMsg || "")
106
+ );
107
+ }
108
+ return await response.json();
109
+ }
110
+
111
+ export {
112
+ StowApiError,
113
+ apiRequest,
114
+ apiUpload
115
+ };
@@ -0,0 +1,43 @@
1
+ // src/lib/format.ts
2
+ function formatBytes(bytes) {
3
+ if (bytes === 0) {
4
+ return "0 B";
5
+ }
6
+ const units = ["B", "KB", "MB", "GB", "TB"];
7
+ const i = Math.floor(Math.log(bytes) / Math.log(1024));
8
+ return `${(bytes / 1024 ** i).toFixed(i > 0 ? 1 : 0)} ${units[i]}`;
9
+ }
10
+ function formatTable(headers, rows) {
11
+ if (rows.length === 0) {
12
+ return "";
13
+ }
14
+ const widths = headers.map((h, i) => {
15
+ const dataMax = rows.reduce(
16
+ (max, row) => Math.max(max, (row[i] || "").length),
17
+ 0
18
+ );
19
+ return Math.max(h.length, dataMax);
20
+ });
21
+ const pad = (str, width) => str.padEnd(width);
22
+ const sep = widths.map((w) => "\u2500".repeat(w)).join("\u2500\u2500");
23
+ const lines = [];
24
+ lines.push(headers.map((h, i) => pad(h, widths[i])).join(" "));
25
+ lines.push(sep);
26
+ for (const row of rows) {
27
+ lines.push(row.map((cell, i) => pad(cell || "", widths[i])).join(" "));
28
+ }
29
+ return lines.join("\n");
30
+ }
31
+ function usageBar(used, total, width = 20) {
32
+ const ratio = Math.min(used / total, 1);
33
+ const filled = Math.round(ratio * width);
34
+ const empty = width - filled;
35
+ const pct = Math.round(ratio * 100);
36
+ return `[${"\u2588".repeat(filled)}${"\u2591".repeat(empty)}] ${pct}%`;
37
+ }
38
+
39
+ export {
40
+ formatBytes,
41
+ formatTable,
42
+ usageBar
43
+ };
package/dist/cli.d.ts ADDED
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node
package/dist/cli.js CHANGED
@@ -344,7 +344,7 @@ var program = new Command();
344
344
  program.name("stow").description(CLI_DOCS.root.description).version(VERSION).addHelpText("after", renderCommandHelp("root"));
345
345
  program.command("drop").description(CLI_DOCS.drop.description).argument("<file>", "File to upload").option("-q, --quiet", "Only output the URL").addHelpText("after", renderCommandHelp("drop")).action(async (file, options) => {
346
346
  try {
347
- const { uploadDrop } = await import("./upload-ESYKBYHA.js");
347
+ const { uploadDrop } = await import("./upload-5RIDB2C5.js");
348
348
  await uploadDrop(file, options);
349
349
  } catch (err) {
350
350
  handleError(err);
@@ -353,7 +353,7 @@ program.command("drop").description(CLI_DOCS.drop.description).argument("<file>"
353
353
  program.command("upload").description(CLI_DOCS.upload.description).argument("<file>", "File to upload").option("-b, --bucket <name>", "Bucket name or ID").option("-q, --quiet", "Only output the URL").addHelpText("after", renderCommandHelp("upload")).action(
354
354
  async (file, options) => {
355
355
  try {
356
- const { uploadFile } = await import("./upload-ESYKBYHA.js");
356
+ const { uploadFile } = await import("./upload-5RIDB2C5.js");
357
357
  await uploadFile(file, options);
358
358
  } catch (err) {
359
359
  handleError(err);
@@ -362,7 +362,7 @@ program.command("upload").description(CLI_DOCS.upload.description).argument("<fi
362
362
  );
363
363
  var bucketsCmd = program.command("buckets").description(CLI_DOCS.buckets.description).addHelpText("after", renderCommandHelp("buckets")).action(async () => {
364
364
  try {
365
- const { listBuckets } = await import("./buckets-JQKZ3PH3.js");
365
+ const { listBuckets } = await import("./buckets-NXIVHPW5.js");
366
366
  await listBuckets();
367
367
  } catch (err) {
368
368
  handleError(err);
@@ -371,7 +371,7 @@ var bucketsCmd = program.command("buckets").description(CLI_DOCS.buckets.descrip
371
371
  bucketsCmd.command("create").description(CLI_DOCS.bucketsCreate.description).argument("<name>", "Bucket name").option("-d, --description <text>", "Bucket description").option("--public", "Make bucket public").addHelpText("after", renderCommandHelp("bucketsCreate")).action(
372
372
  async (name, options) => {
373
373
  try {
374
- const { createBucket } = await import("./buckets-JQKZ3PH3.js");
374
+ const { createBucket } = await import("./buckets-NXIVHPW5.js");
375
375
  await createBucket(name, options);
376
376
  } catch (err) {
377
377
  handleError(err);
@@ -380,7 +380,7 @@ bucketsCmd.command("create").description(CLI_DOCS.bucketsCreate.description).arg
380
380
  );
381
381
  bucketsCmd.command("rename").description(CLI_DOCS.bucketsRename.description).argument("<name>", "Current bucket name").argument("<new-name>", "New bucket name").option("-y, --yes", "Skip confirmation warning").addHelpText("after", renderCommandHelp("bucketsRename")).action(async (name, newName, options) => {
382
382
  try {
383
- const { renameBucket } = await import("./buckets-JQKZ3PH3.js");
383
+ const { renameBucket } = await import("./buckets-NXIVHPW5.js");
384
384
  await renameBucket(name, newName, options);
385
385
  } catch (err) {
386
386
  handleError(err);
@@ -388,7 +388,7 @@ bucketsCmd.command("rename").description(CLI_DOCS.bucketsRename.description).arg
388
388
  });
389
389
  bucketsCmd.command("delete").description(CLI_DOCS.bucketsDelete.description).argument("<id>", "Bucket ID").addHelpText("after", renderCommandHelp("bucketsDelete")).action(async (id) => {
390
390
  try {
391
- const { deleteBucket } = await import("./buckets-JQKZ3PH3.js");
391
+ const { deleteBucket } = await import("./buckets-NXIVHPW5.js");
392
392
  await deleteBucket(id);
393
393
  } catch (err) {
394
394
  handleError(err);
@@ -401,7 +401,7 @@ var filesCmd = program.command("files").description(CLI_DOCS.files.description).
401
401
  return;
402
402
  }
403
403
  try {
404
- const { listFiles } = await import("./files-OCYICIAM.js");
404
+ const { listFiles } = await import("./files-E662TXUP.js");
405
405
  await listFiles(bucket, options);
406
406
  } catch (err) {
407
407
  handleError(err);
@@ -410,7 +410,7 @@ var filesCmd = program.command("files").description(CLI_DOCS.files.description).
410
410
  );
411
411
  filesCmd.command("get").description(CLI_DOCS.filesGet.description).argument("<bucket>", "Bucket name").argument("<key>", "File key").option("--json", "Output as JSON").addHelpText("after", renderCommandHelp("filesGet")).action(async (bucket, key, options) => {
412
412
  try {
413
- const { getFile } = await import("./files-OCYICIAM.js");
413
+ const { getFile } = await import("./files-E662TXUP.js");
414
414
  await getFile(bucket, key, options);
415
415
  } catch (err) {
416
416
  handleError(err);
@@ -419,7 +419,7 @@ filesCmd.command("get").description(CLI_DOCS.filesGet.description).argument("<bu
419
419
  filesCmd.command("update").description(CLI_DOCS.filesUpdate.description).argument("<bucket>", "Bucket name").argument("<key>", "File key").option("-m, --metadata <kv...>", "Metadata key=value pairs").option("--json", "Output as JSON").addHelpText("after", renderCommandHelp("filesUpdate")).action(
420
420
  async (bucket, key, options) => {
421
421
  try {
422
- const { updateFile } = await import("./files-OCYICIAM.js");
422
+ const { updateFile } = await import("./files-E662TXUP.js");
423
423
  await updateFile(bucket, key, options);
424
424
  } catch (err) {
425
425
  handleError(err);
@@ -428,7 +428,7 @@ filesCmd.command("update").description(CLI_DOCS.filesUpdate.description).argumen
428
428
  );
429
429
  filesCmd.command("enrich").description(CLI_DOCS.filesEnrich.description).argument("<bucket>", "Bucket name").argument("<key>", "File key").addHelpText("after", renderCommandHelp("filesEnrich")).action(async (bucket, key) => {
430
430
  try {
431
- const { enrichFile } = await import("./files-OCYICIAM.js");
431
+ const { enrichFile } = await import("./files-E662TXUP.js");
432
432
  await enrichFile(bucket, key);
433
433
  } catch (err) {
434
434
  handleError(err);
@@ -437,7 +437,7 @@ filesCmd.command("enrich").description(CLI_DOCS.filesEnrich.description).argumen
437
437
  filesCmd.command("missing").description(CLI_DOCS.filesMissing.description).argument("<bucket>", "Bucket name").argument("<type>", "dimensions | embeddings | colors").option("-l, --limit <count>", "Max files to return").option("--json", "Output as JSON").addHelpText("after", renderCommandHelp("filesMissing")).action(
438
438
  async (bucket, type, options) => {
439
439
  try {
440
- const { listMissing } = await import("./files-OCYICIAM.js");
440
+ const { listMissing } = await import("./files-E662TXUP.js");
441
441
  await listMissing(bucket, type, options);
442
442
  } catch (err) {
443
443
  handleError(err);
@@ -446,7 +446,7 @@ filesCmd.command("missing").description(CLI_DOCS.filesMissing.description).argum
446
446
  );
447
447
  var dropsCmd = program.command("drops").description(CLI_DOCS.drops.description).addHelpText("after", renderCommandHelp("drops")).action(async () => {
448
448
  try {
449
- const { listDrops } = await import("./drops-QXGTYB5E.js");
449
+ const { listDrops } = await import("./drops-RD55IDZ4.js");
450
450
  await listDrops();
451
451
  } catch (err) {
452
452
  handleError(err);
@@ -454,7 +454,7 @@ var dropsCmd = program.command("drops").description(CLI_DOCS.drops.description).
454
454
  });
455
455
  dropsCmd.command("delete").description(CLI_DOCS.dropsDelete.description).argument("<id>", "Drop ID").addHelpText("after", renderCommandHelp("dropsDelete")).action(async (id) => {
456
456
  try {
457
- const { deleteDrop } = await import("./drops-QXGTYB5E.js");
457
+ const { deleteDrop } = await import("./drops-RD55IDZ4.js");
458
458
  await deleteDrop(id);
459
459
  } catch (err) {
460
460
  handleError(err);
@@ -464,7 +464,7 @@ var searchCmd = program.command("search").description(CLI_DOCS.search.descriptio
464
464
  searchCmd.command("text").description(CLI_DOCS.searchText.description).argument("<query>", "Search query").option("-b, --bucket <name>", "Bucket name").option("-l, --limit <count>", "Max results").option("--json", "Output as JSON").addHelpText("after", renderCommandHelp("searchText")).action(
465
465
  async (query, options) => {
466
466
  try {
467
- const { textSearch } = await import("./search-2PXM6XQ6.js");
467
+ const { textSearch } = await import("./search-DV4VV62L.js");
468
468
  await textSearch(query, options);
469
469
  } catch (err) {
470
470
  handleError(err);
@@ -474,7 +474,7 @@ searchCmd.command("text").description(CLI_DOCS.searchText.description).argument(
474
474
  searchCmd.command("similar").description(CLI_DOCS.searchSimilar.description).requiredOption("--file <key>", "File key to search from").option("-b, --bucket <name>", "Bucket name").option("-l, --limit <count>", "Max results").option("--json", "Output as JSON").addHelpText("after", renderCommandHelp("searchSimilar")).action(
475
475
  async (options) => {
476
476
  try {
477
- const { similarSearch } = await import("./search-2PXM6XQ6.js");
477
+ const { similarSearch } = await import("./search-DV4VV62L.js");
478
478
  await similarSearch(options);
479
479
  } catch (err) {
480
480
  handleError(err);
@@ -484,7 +484,7 @@ searchCmd.command("similar").description(CLI_DOCS.searchSimilar.description).req
484
484
  searchCmd.command("color").description(CLI_DOCS.searchColor.description).requiredOption("--hex <color>", "Hex color code").option("-b, --bucket <name>", "Bucket name").option("-l, --limit <count>", "Max results").option("--json", "Output as JSON").addHelpText("after", renderCommandHelp("searchColor")).action(
485
485
  async (options) => {
486
486
  try {
487
- const { colorSearch } = await import("./search-2PXM6XQ6.js");
487
+ const { colorSearch } = await import("./search-DV4VV62L.js");
488
488
  await colorSearch(options);
489
489
  } catch (err) {
490
490
  handleError(err);
@@ -494,7 +494,7 @@ searchCmd.command("color").description(CLI_DOCS.searchColor.description).require
494
494
  searchCmd.command("diverse").description(CLI_DOCS.searchDiverse.description).option("-b, --bucket <name>", "Bucket name").option("-l, --limit <count>", "Max results").option("--json", "Output as JSON").addHelpText("after", renderCommandHelp("searchDiverse")).action(
495
495
  async (options) => {
496
496
  try {
497
- const { diverseSearch } = await import("./search-2PXM6XQ6.js");
497
+ const { diverseSearch } = await import("./search-DV4VV62L.js");
498
498
  await diverseSearch(options);
499
499
  } catch (err) {
500
500
  handleError(err);
@@ -503,7 +503,7 @@ searchCmd.command("diverse").description(CLI_DOCS.searchDiverse.description).opt
503
503
  );
504
504
  var tagsCmd = program.command("tags").description(CLI_DOCS.tags.description).option("--json", "Output as JSON").addHelpText("after", renderCommandHelp("tags")).action(async (options) => {
505
505
  try {
506
- const { listTags } = await import("./tags-LSVEIIUF.js");
506
+ const { listTags } = await import("./tags-URHK2YH5.js");
507
507
  await listTags(options);
508
508
  } catch (err) {
509
509
  handleError(err);
@@ -511,7 +511,7 @@ var tagsCmd = program.command("tags").description(CLI_DOCS.tags.description).opt
511
511
  });
512
512
  tagsCmd.command("create").description(CLI_DOCS.tagsCreate.description).argument("<name>", "Tag name").option("--color <hex>", "Tag color (hex)").option("--json", "Output as JSON").addHelpText("after", renderCommandHelp("tagsCreate")).action(async (name, options) => {
513
513
  try {
514
- const { createTag } = await import("./tags-LSVEIIUF.js");
514
+ const { createTag } = await import("./tags-URHK2YH5.js");
515
515
  await createTag(name, options);
516
516
  } catch (err) {
517
517
  handleError(err);
@@ -519,7 +519,7 @@ tagsCmd.command("create").description(CLI_DOCS.tagsCreate.description).argument(
519
519
  });
520
520
  tagsCmd.command("delete").description(CLI_DOCS.tagsDelete.description).argument("<id>", "Tag ID").addHelpText("after", renderCommandHelp("tagsDelete")).action(async (id) => {
521
521
  try {
522
- const { deleteTag } = await import("./tags-LSVEIIUF.js");
522
+ const { deleteTag } = await import("./tags-URHK2YH5.js");
523
523
  await deleteTag(id);
524
524
  } catch (err) {
525
525
  handleError(err);
@@ -529,7 +529,7 @@ var profilesCmd = program.command("profiles").description(CLI_DOCS.profiles.desc
529
529
  profilesCmd.command("create").description(CLI_DOCS.profilesCreate.description).requiredOption("--name <name>", "Profile name").option("-b, --bucket <id>", "Bucket ID").option("--json", "Output as JSON").addHelpText("after", renderCommandHelp("profilesCreate")).action(
530
530
  async (options) => {
531
531
  try {
532
- const { createProfile } = await import("./profiles-GWLBEEIT.js");
532
+ const { createProfile } = await import("./profiles-C6SCFXS6.js");
533
533
  await createProfile(options);
534
534
  } catch (err) {
535
535
  handleError(err);
@@ -538,7 +538,7 @@ profilesCmd.command("create").description(CLI_DOCS.profilesCreate.description).r
538
538
  );
539
539
  profilesCmd.command("get").description(CLI_DOCS.profilesGet.description).argument("<id>", "Profile ID").option("--json", "Output as JSON").addHelpText("after", renderCommandHelp("profilesGet")).action(async (id, options) => {
540
540
  try {
541
- const { getProfile } = await import("./profiles-GWLBEEIT.js");
541
+ const { getProfile } = await import("./profiles-C6SCFXS6.js");
542
542
  await getProfile(id, options);
543
543
  } catch (err) {
544
544
  handleError(err);
@@ -546,7 +546,7 @@ profilesCmd.command("get").description(CLI_DOCS.profilesGet.description).argumen
546
546
  });
547
547
  profilesCmd.command("delete").description(CLI_DOCS.profilesDelete.description).argument("<id>", "Profile ID").addHelpText("after", renderCommandHelp("profilesDelete")).action(async (id) => {
548
548
  try {
549
- const { deleteProfile } = await import("./profiles-GWLBEEIT.js");
549
+ const { deleteProfile } = await import("./profiles-C6SCFXS6.js");
550
550
  await deleteProfile(id);
551
551
  } catch (err) {
552
552
  handleError(err);
@@ -555,7 +555,7 @@ profilesCmd.command("delete").description(CLI_DOCS.profilesDelete.description).a
555
555
  var jobsCmd = program.command("jobs").description(CLI_DOCS.jobs.description).requiredOption("-b, --bucket <id>", "Bucket ID (required)").option("-s, --status <status>", "Filter by status").option("-q, --queue <name>", "Filter by queue name").option("-l, --limit <count>", "Max jobs to return").option("--json", "Output as JSON").addHelpText("after", renderCommandHelp("jobs")).action(
556
556
  async (options) => {
557
557
  try {
558
- const { listJobs } = await import("./jobs-6JY4SVV5.js");
558
+ const { listJobs } = await import("./jobs-CLXYKZ3B.js");
559
559
  await listJobs(options.bucket, options);
560
560
  } catch (err) {
561
561
  handleError(err);
@@ -564,7 +564,7 @@ var jobsCmd = program.command("jobs").description(CLI_DOCS.jobs.description).req
564
564
  );
565
565
  jobsCmd.command("retry").description(CLI_DOCS.jobsRetry.description).argument("<id>", "Job ID").requiredOption("-q, --queue <name>", "Queue name").requiredOption("-b, --bucket <id>", "Bucket ID").addHelpText("after", renderCommandHelp("jobsRetry")).action(async (id, options) => {
566
566
  try {
567
- const { retryJob } = await import("./jobs-6JY4SVV5.js");
567
+ const { retryJob } = await import("./jobs-CLXYKZ3B.js");
568
568
  await retryJob(id, options);
569
569
  } catch (err) {
570
570
  handleError(err);
@@ -572,7 +572,7 @@ jobsCmd.command("retry").description(CLI_DOCS.jobsRetry.description).argument("<
572
572
  });
573
573
  jobsCmd.command("delete").description(CLI_DOCS.jobsDelete.description).argument("<id>", "Job ID").requiredOption("-q, --queue <name>", "Queue name").requiredOption("-b, --bucket <id>", "Bucket ID").addHelpText("after", renderCommandHelp("jobsDelete")).action(async (id, options) => {
574
574
  try {
575
- const { deleteJob } = await import("./jobs-6JY4SVV5.js");
575
+ const { deleteJob } = await import("./jobs-CLXYKZ3B.js");
576
576
  await deleteJob(id, options);
577
577
  } catch (err) {
578
578
  handleError(err);
@@ -581,7 +581,7 @@ jobsCmd.command("delete").description(CLI_DOCS.jobsDelete.description).argument(
581
581
  var adminCmd = program.command("admin").description(CLI_DOCS.admin.description).addHelpText("after", renderCommandHelp("admin"));
582
582
  adminCmd.command("health").description(CLI_DOCS.adminHealth.description).option("--json", "Output as JSON").addHelpText("after", renderCommandHelp("adminHealth")).action(async (options) => {
583
583
  try {
584
- const { health } = await import("./health-YMZTZUFX.js");
584
+ const { health } = await import("./health-6LWM7KAT.js");
585
585
  await health(options);
586
586
  } catch (err) {
587
587
  handleError(err);
@@ -591,7 +591,7 @@ var backfillCmd = adminCmd.command("backfill").description(CLI_DOCS.adminBackfil
591
591
  backfillCmd.command("dimensions").description("Backfill image dimensions").option("--bucket <id>", "Bucket ID").option("-l, --limit <count>", "Max files to enqueue").option("--dry-run", "Preview without enqueuing").option("--json", "Output as JSON").action(
592
592
  async (options) => {
593
593
  try {
594
- const { backfillDimensions } = await import("./backfill-QZTVNJZM.js");
594
+ const { backfillDimensions } = await import("./backfill-G57M2BRA.js");
595
595
  await backfillDimensions(options);
596
596
  } catch (err) {
597
597
  handleError(err);
@@ -601,7 +601,7 @@ backfillCmd.command("dimensions").description("Backfill image dimensions").optio
601
601
  backfillCmd.command("colors").description("Backfill color extraction").option("--bucket <id>", "Bucket ID").option("-l, --limit <count>", "Max files to enqueue").option("--dry-run", "Preview without enqueuing").option("--json", "Output as JSON").action(
602
602
  async (options) => {
603
603
  try {
604
- const { backfillColors } = await import("./backfill-QZTVNJZM.js");
604
+ const { backfillColors } = await import("./backfill-G57M2BRA.js");
605
605
  await backfillColors(options);
606
606
  } catch (err) {
607
607
  handleError(err);
@@ -611,7 +611,7 @@ backfillCmd.command("colors").description("Backfill color extraction").option("-
611
611
  backfillCmd.command("embeddings").description("Backfill embedding generation").option("--bucket <id>", "Bucket ID").option("-l, --limit <count>", "Max files to enqueue").option("--dry-run", "Preview without enqueuing").option("--json", "Output as JSON").action(
612
612
  async (options) => {
613
613
  try {
614
- const { backfillEmbeddings } = await import("./backfill-QZTVNJZM.js");
614
+ const { backfillEmbeddings } = await import("./backfill-G57M2BRA.js");
615
615
  await backfillEmbeddings(options);
616
616
  } catch (err) {
617
617
  handleError(err);
@@ -621,7 +621,7 @@ backfillCmd.command("embeddings").description("Backfill embedding generation").o
621
621
  adminCmd.command("cleanup-drops").description(CLI_DOCS.adminCleanupDrops.description).option("--max-age-hours <hours>", "Max age in hours").option("--dry-run", "Preview without deleting").option("--json", "Output as JSON").addHelpText("after", renderCommandHelp("adminCleanupDrops")).action(
622
622
  async (options) => {
623
623
  try {
624
- const { cleanupDrops } = await import("./maintenance-EZUHQK5Q.js");
624
+ const { cleanupDrops } = await import("./maintenance-7LOAGG6J.js");
625
625
  await cleanupDrops(options);
626
626
  } catch (err) {
627
627
  handleError(err);
@@ -630,7 +630,7 @@ adminCmd.command("cleanup-drops").description(CLI_DOCS.adminCleanupDrops.descrip
630
630
  );
631
631
  adminCmd.command("purge-events").description(CLI_DOCS.adminPurgeEvents.description).option("--dry-run", "Preview without deleting").option("--json", "Output as JSON").addHelpText("after", renderCommandHelp("adminPurgeEvents")).action(async (options) => {
632
632
  try {
633
- const { purgeEvents } = await import("./maintenance-EZUHQK5Q.js");
633
+ const { purgeEvents } = await import("./maintenance-7LOAGG6J.js");
634
634
  await purgeEvents(options);
635
635
  } catch (err) {
636
636
  handleError(err);
@@ -639,7 +639,7 @@ adminCmd.command("purge-events").description(CLI_DOCS.adminPurgeEvents.descripti
639
639
  adminCmd.command("reconcile-files").description(CLI_DOCS.adminReconcileFiles.description).requiredOption("--bucket <id>", "Bucket ID").option("--dry-run", "Preview without reconciling").option("--json", "Output as JSON").addHelpText("after", renderCommandHelp("adminReconcileFiles")).action(
640
640
  async (options) => {
641
641
  try {
642
- const { reconcileFiles } = await import("./maintenance-EZUHQK5Q.js");
642
+ const { reconcileFiles } = await import("./maintenance-7LOAGG6J.js");
643
643
  await reconcileFiles(options);
644
644
  } catch (err) {
645
645
  handleError(err);
@@ -648,7 +648,7 @@ adminCmd.command("reconcile-files").description(CLI_DOCS.adminReconcileFiles.des
648
648
  );
649
649
  adminCmd.command("retry-sync-failures").description(CLI_DOCS.adminRetrySyncFailures.description).option("--json", "Output as JSON").addHelpText("after", renderCommandHelp("adminRetrySyncFailures")).action(async (options) => {
650
650
  try {
651
- const { retrySyncFailures } = await import("./maintenance-EZUHQK5Q.js");
651
+ const { retrySyncFailures } = await import("./maintenance-7LOAGG6J.js");
652
652
  await retrySyncFailures(options);
653
653
  } catch (err) {
654
654
  handleError(err);
@@ -657,7 +657,7 @@ adminCmd.command("retry-sync-failures").description(CLI_DOCS.adminRetrySyncFailu
657
657
  var adminJobsCmd = adminCmd.command("jobs").description(CLI_DOCS.adminJobs.description).option("--org <id>", "Filter by org ID").option("--bucket <id>", "Filter by bucket ID").option("-s, --status <status>", "Filter by status").option("-q, --queue <name>", "Filter by queue name").option("-l, --limit <count>", "Max jobs to return").option("--json", "Output as JSON").addHelpText("after", renderCommandHelp("adminJobs")).action(
658
658
  async (options) => {
659
659
  try {
660
- const { listAdminJobs } = await import("./jobs-OKKGKSIH.js");
660
+ const { listAdminJobs } = await import("./jobs-K3LTNETU.js");
661
661
  await listAdminJobs(options);
662
662
  } catch (err) {
663
663
  handleError(err);
@@ -666,7 +666,7 @@ var adminJobsCmd = adminCmd.command("jobs").description(CLI_DOCS.adminJobs.descr
666
666
  );
667
667
  adminJobsCmd.command("retry").description(CLI_DOCS.adminJobsRetry.description).argument("<id>", "Job ID").requiredOption("-q, --queue <name>", "Queue name").addHelpText("after", renderCommandHelp("adminJobsRetry")).action(async (id, options) => {
668
668
  try {
669
- const { retryAdminJob } = await import("./jobs-OKKGKSIH.js");
669
+ const { retryAdminJob } = await import("./jobs-K3LTNETU.js");
670
670
  await retryAdminJob(id, options);
671
671
  } catch (err) {
672
672
  handleError(err);
@@ -674,7 +674,7 @@ adminJobsCmd.command("retry").description(CLI_DOCS.adminJobsRetry.description).a
674
674
  });
675
675
  adminJobsCmd.command("delete").description(CLI_DOCS.adminJobsDelete.description).argument("<id>", "Job ID").requiredOption("-q, --queue <name>", "Queue name").addHelpText("after", renderCommandHelp("adminJobsDelete")).action(async (id, options) => {
676
676
  try {
677
- const { deleteAdminJob } = await import("./jobs-OKKGKSIH.js");
677
+ const { deleteAdminJob } = await import("./jobs-K3LTNETU.js");
678
678
  await deleteAdminJob(id, options);
679
679
  } catch (err) {
680
680
  handleError(err);
@@ -682,7 +682,7 @@ adminJobsCmd.command("delete").description(CLI_DOCS.adminJobsDelete.description)
682
682
  });
683
683
  var adminQueuesCmd = adminCmd.command("queues").description(CLI_DOCS.adminQueues.description).option("--json", "Output as JSON").addHelpText("after", renderCommandHelp("adminQueues")).action(async (options) => {
684
684
  try {
685
- const { listQueues } = await import("./queues-EQX7EJZF.js");
685
+ const { listQueues } = await import("./queues-2GJAMMNF.js");
686
686
  await listQueues(options);
687
687
  } catch (err) {
688
688
  handleError(err);
@@ -691,7 +691,7 @@ var adminQueuesCmd = adminCmd.command("queues").description(CLI_DOCS.adminQueues
691
691
  adminQueuesCmd.command("clean").description(CLI_DOCS.adminQueuesClean.description).argument("<name>", "Queue name").option("--failed", "Clean failed jobs").option("--completed", "Clean completed jobs").option("--grace <seconds>", "Grace period in seconds").addHelpText("after", renderCommandHelp("adminQueuesClean")).action(
692
692
  async (name, options) => {
693
693
  try {
694
- const { cleanQueue } = await import("./queues-EQX7EJZF.js");
694
+ const { cleanQueue } = await import("./queues-2GJAMMNF.js");
695
695
  await cleanQueue(name, options);
696
696
  } catch (err) {
697
697
  handleError(err);
@@ -700,7 +700,7 @@ adminQueuesCmd.command("clean").description(CLI_DOCS.adminQueuesClean.descriptio
700
700
  );
701
701
  program.command("delete").description(CLI_DOCS.delete.description).argument("<bucket>", "Bucket name").argument("<key>", "File key").addHelpText("after", renderCommandHelp("delete")).action(async (bucket, key) => {
702
702
  try {
703
- const { deleteFile } = await import("./delete-NAV6P5O5.js");
703
+ const { deleteFile } = await import("./delete-GEX3O7YS.js");
704
704
  await deleteFile(bucket, key);
705
705
  } catch (err) {
706
706
  handleError(err);
@@ -708,7 +708,7 @@ program.command("delete").description(CLI_DOCS.delete.description).argument("<bu
708
708
  });
709
709
  program.command("whoami").description(CLI_DOCS.whoami.description).addHelpText("after", renderCommandHelp("whoami")).action(async () => {
710
710
  try {
711
- const { whoami } = await import("./whoami-4UYMSRVP.js");
711
+ const { whoami } = await import("./whoami-5IYRZKWS.js");
712
712
  await whoami();
713
713
  } catch (err) {
714
714
  handleError(err);
@@ -716,7 +716,7 @@ program.command("whoami").description(CLI_DOCS.whoami.description).addHelpText("
716
716
  });
717
717
  program.command("open").description(CLI_DOCS.open.description).argument("<bucket>", "Bucket name").addHelpText("after", renderCommandHelp("open")).action(async (bucket) => {
718
718
  try {
719
- const { openBucket } = await import("./open-F3LHXI3R.js");
719
+ const { openBucket } = await import("./open-F73Q2OHD.js");
720
720
  await openBucket(bucket);
721
721
  } catch (err) {
722
722
  handleError(err);
@@ -727,5 +727,5 @@ program.parse();
727
727
  var opts = program.opts();
728
728
  var args = process.argv.slice(2);
729
729
  if (args.length === 0 || args.length === 1 && opts.interactive) {
730
- import("./app-JPUDM4LJ.js").then(({ startInteractive }) => startInteractive()).catch(handleError);
730
+ import("./app-DTW2LNXW.js").then(({ startInteractive }) => startInteractive()).catch(handleError);
731
731
  }
@@ -0,0 +1,18 @@
1
+ import {
2
+ apiRequest
3
+ } from "./chunk-FEMMZ4YZ.js";
4
+ import "./chunk-2AORPTQB.js";
5
+
6
+ // src/commands/delete.ts
7
+ async function deleteFile(bucket, key) {
8
+ const encodedKey = encodeURIComponent(key);
9
+ const params = new URLSearchParams({ bucket });
10
+ await apiRequest(
11
+ `/api/files/${encodedKey}?${params}`,
12
+ { method: "DELETE" }
13
+ );
14
+ console.log(`Deleted: ${key} from ${bucket}`);
15
+ }
16
+ export {
17
+ deleteFile
18
+ };
@@ -0,0 +1,14 @@
1
+ import {
2
+ createStow
3
+ } from "./chunk-5LU25QZK.js";
4
+ import "./chunk-TOADDO2F.js";
5
+
6
+ // src/commands/delete.ts
7
+ async function deleteFile(bucket, key) {
8
+ const stow = createStow();
9
+ await stow.deleteFile(key, { bucket });
10
+ console.log(`Deleted: ${key} from ${bucket}`);
11
+ }
12
+ export {
13
+ deleteFile
14
+ };
@@ -0,0 +1,18 @@
1
+ import {
2
+ apiRequest
3
+ } from "./chunk-R5CCBTXZ.js";
4
+ import "./chunk-2AORPTQB.js";
5
+
6
+ // src/commands/delete.ts
7
+ async function deleteFile(bucket, key) {
8
+ const encodedKey = encodeURIComponent(key);
9
+ const params = new URLSearchParams({ bucket });
10
+ await apiRequest(
11
+ `/api/files/${encodedKey}?${params}`,
12
+ { method: "DELETE" }
13
+ );
14
+ console.log(`Deleted: ${key} from ${bucket}`);
15
+ }
16
+ export {
17
+ deleteFile
18
+ };
@@ -0,0 +1,18 @@
1
+ import {
2
+ apiRequest
3
+ } from "./chunk-LYCXXF2T.js";
4
+ import "./chunk-OZ7QQTIZ.js";
5
+
6
+ // src/commands/delete.ts
7
+ async function deleteFile(bucket, key) {
8
+ const encodedKey = encodeURIComponent(key);
9
+ const params = new URLSearchParams({ bucket });
10
+ await apiRequest(
11
+ `/api/files/${encodedKey}?${params}`,
12
+ { method: "DELETE" }
13
+ );
14
+ console.log(`Deleted: ${key} from ${bucket}`);
15
+ }
16
+ export {
17
+ deleteFile
18
+ };
@@ -0,0 +1,18 @@
1
+ import {
2
+ apiRequest
3
+ } from "./chunk-YRHPOFJT.js";
4
+ import "./chunk-2AORPTQB.js";
5
+
6
+ // src/commands/delete.ts
7
+ async function deleteFile(bucket, key) {
8
+ const encodedKey = encodeURIComponent(key);
9
+ const params = new URLSearchParams({ bucket });
10
+ await apiRequest(
11
+ `/api/files/${encodedKey}?${params}`,
12
+ { method: "DELETE" }
13
+ );
14
+ console.log(`Deleted: ${key} from ${bucket}`);
15
+ }
16
+ export {
17
+ deleteFile
18
+ };
@@ -5,8 +5,8 @@ import {
5
5
  } from "./chunk-ELSDWMEB.js";
6
6
  import {
7
7
  createStow
8
- } from "./chunk-JYOMHKFS.js";
9
- import "./chunk-OZ7QQTIZ.js";
8
+ } from "./chunk-5LU25QZK.js";
9
+ import "./chunk-TOADDO2F.js";
10
10
 
11
11
  // src/commands/drops.ts
12
12
  async function listDrops() {