stow-cli 2.1.0 → 2.2.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/dist/app-Q6EW7VSM.js +249 -0
- package/dist/backfill-EVZT7RH6.js +67 -0
- package/dist/backfill-JCNPLFJU.js +67 -0
- package/dist/backfill-VAORMLMY.js +67 -0
- package/dist/buckets-AFNX7FV3.js +137 -0
- package/dist/buckets-VYI2QVLO.js +137 -0
- package/dist/buckets-ZHP3LBLC.js +137 -0
- package/dist/chunk-3BLL5SQJ.js +27 -0
- package/dist/chunk-5BVMPHKH.js +147 -0
- package/dist/chunk-5IX3ASXH.js +153 -0
- package/dist/chunk-FZGOTXTE.js +45 -0
- package/dist/chunk-P2BKGBQE.js +136 -0
- package/dist/chunk-PLZFHPLC.js +52 -0
- package/dist/cli.js +80 -53
- package/dist/delete-YEXSMG4I.js +34 -0
- package/dist/describe-CU5FBHZS.js +79 -0
- package/dist/describe-HSEHMJVD.js +79 -0
- package/dist/describe-J4ZMUXK7.js +79 -0
- package/dist/drops-5VIEW3XZ.js +39 -0
- package/dist/files-CFOTEASC.js +206 -0
- package/dist/files-UQODXWNT.js +206 -0
- package/dist/files-XU6MDPP4.js +206 -0
- package/dist/health-RICGWQGN.js +61 -0
- package/dist/health-SH6T6DZS.js +61 -0
- package/dist/health-YLNNKAFP.js +61 -0
- package/dist/jobs-PTV2W5PJ.js +102 -0
- package/dist/jobs-RMRGXLAA.js +90 -0
- package/dist/jobs-ROJFRPMR.js +90 -0
- package/dist/jobs-TND5AHCL.js +102 -0
- package/dist/jobs-TOLVGN6K.js +102 -0
- package/dist/jobs-ZWSEXNFA.js +90 -0
- package/dist/maintenance-6XNJ56LL.js +79 -0
- package/dist/maintenance-V2TXPXQE.js +79 -0
- package/dist/maintenance-ZJW2ES4L.js +79 -0
- package/dist/profiles-CHBGKQOE.js +53 -0
- package/dist/profiles-MB3TZQE4.js +53 -0
- package/dist/profiles-NVCJCYXR.js +53 -0
- package/dist/queues-AUGTAFBT.js +61 -0
- package/dist/queues-EZ2VZGXQ.js +61 -0
- package/dist/queues-NR25TGT7.js +61 -0
- package/dist/search-ETC2EXKM.js +135 -0
- package/dist/search-ICJO264J.js +135 -0
- package/dist/search-TRTPX2SQ.js +135 -0
- package/dist/tags-75SSHS26.js +90 -0
- package/dist/tags-TBFPDHIQ.js +90 -0
- package/dist/tags-VH44BGQL.js +90 -0
- package/dist/upload-OS6Q6LW5.js +126 -0
- package/dist/whoami-TVRKBM74.js +28 -0
- package/package.json +1 -1
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
// src/lib/sanitize-response.ts
|
|
2
|
+
var INJECTION_PATTERNS = [
|
|
3
|
+
// Direct instruction injection
|
|
4
|
+
/\b(?:ignore|disregard|forget)\b.*\b(?:previous|above|prior)\b.*\b(?:instructions?|rules?|context)\b/i,
|
|
5
|
+
// System prompt extraction attempts
|
|
6
|
+
/\b(?:reveal|show|print|output|display)\b.*\b(?:system\s*prompt|instructions?|rules?)\b/i,
|
|
7
|
+
// Role hijacking
|
|
8
|
+
/\byou\s+are\s+(?:now|a)\b/i,
|
|
9
|
+
// Tool/action injection
|
|
10
|
+
/\b(?:execute|run|call)\b.*\b(?:command|tool|function|bash|shell)\b/i,
|
|
11
|
+
// Markdown/XML injection that could affect agent parsing
|
|
12
|
+
/<\/?(?:system|user|assistant|tool_use|tool_result)\b/i
|
|
13
|
+
];
|
|
14
|
+
var USER_CONTENT_FIELDS = /* @__PURE__ */ new Set([
|
|
15
|
+
"originalFilename",
|
|
16
|
+
"filename",
|
|
17
|
+
"name",
|
|
18
|
+
"description",
|
|
19
|
+
"label",
|
|
20
|
+
"text",
|
|
21
|
+
"slug",
|
|
22
|
+
"webhookUrl"
|
|
23
|
+
]);
|
|
24
|
+
function detectInjection(value) {
|
|
25
|
+
return INJECTION_PATTERNS.some((pattern) => pattern.test(value));
|
|
26
|
+
}
|
|
27
|
+
function sanitizeValue(value) {
|
|
28
|
+
if (detectInjection(value)) {
|
|
29
|
+
return `[FLAGGED: potential prompt injection] ${value}`;
|
|
30
|
+
}
|
|
31
|
+
return value;
|
|
32
|
+
}
|
|
33
|
+
function sanitizeResponse(data) {
|
|
34
|
+
if (data === null || data === void 0) return data;
|
|
35
|
+
if (typeof data === "string") {
|
|
36
|
+
return sanitizeValue(data);
|
|
37
|
+
}
|
|
38
|
+
if (Array.isArray(data)) {
|
|
39
|
+
return data.map((item) => sanitizeResponse(item));
|
|
40
|
+
}
|
|
41
|
+
if (typeof data === "object") {
|
|
42
|
+
const result = {};
|
|
43
|
+
for (const [key, value] of Object.entries(
|
|
44
|
+
data
|
|
45
|
+
)) {
|
|
46
|
+
if (USER_CONTENT_FIELDS.has(key) && typeof value === "string") {
|
|
47
|
+
result[key] = sanitizeValue(value);
|
|
48
|
+
} else if (typeof value === "object" && value !== null) {
|
|
49
|
+
result[key] = sanitizeResponse(value);
|
|
50
|
+
} else {
|
|
51
|
+
result[key] = value;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
return data;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// src/lib/output.ts
|
|
60
|
+
var _forceHuman = false;
|
|
61
|
+
var _globalFields;
|
|
62
|
+
var _globalNdjson = false;
|
|
63
|
+
function setForceHuman(value) {
|
|
64
|
+
_forceHuman = value;
|
|
65
|
+
}
|
|
66
|
+
function setGlobalFields(fields) {
|
|
67
|
+
_globalFields = fields;
|
|
68
|
+
}
|
|
69
|
+
function setGlobalNdjson(value) {
|
|
70
|
+
_globalNdjson = value;
|
|
71
|
+
}
|
|
72
|
+
function isJsonOutput() {
|
|
73
|
+
if (_forceHuman) return false;
|
|
74
|
+
return !process.stdout.isTTY;
|
|
75
|
+
}
|
|
76
|
+
function output(data, humanFormatter, options) {
|
|
77
|
+
const sanitized = sanitizeResponse(data);
|
|
78
|
+
const masked = applyFieldMask(sanitized, _globalFields);
|
|
79
|
+
if (_globalNdjson && Array.isArray(masked)) {
|
|
80
|
+
outputNdjson(masked);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (options?.json || isJsonOutput()) {
|
|
84
|
+
console.log(JSON.stringify(masked, null, 2));
|
|
85
|
+
} else if (humanFormatter && !_globalFields) {
|
|
86
|
+
console.log(humanFormatter());
|
|
87
|
+
} else {
|
|
88
|
+
console.log(JSON.stringify(masked, null, 2));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function outputError(error, code, details) {
|
|
92
|
+
if (isJsonOutput()) {
|
|
93
|
+
console.error(
|
|
94
|
+
JSON.stringify({ error, ...code ? { code } : {}, ...details })
|
|
95
|
+
);
|
|
96
|
+
} else {
|
|
97
|
+
console.error(`Error: ${error}`);
|
|
98
|
+
}
|
|
99
|
+
process.exit(1);
|
|
100
|
+
}
|
|
101
|
+
function outputNdjson(items) {
|
|
102
|
+
for (const item of items) {
|
|
103
|
+
const sanitized = sanitizeResponse(item);
|
|
104
|
+
console.log(JSON.stringify(sanitized));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function applyFieldMask(data, fields) {
|
|
108
|
+
if (!fields) return data;
|
|
109
|
+
const fieldSet = new Set(fields.split(",").map((f) => f.trim()));
|
|
110
|
+
if (Array.isArray(data)) {
|
|
111
|
+
return data.map((item) => pickFields(item, fieldSet));
|
|
112
|
+
}
|
|
113
|
+
if (typeof data === "object" && data !== null) {
|
|
114
|
+
return pickFields(data, fieldSet);
|
|
115
|
+
}
|
|
116
|
+
return data;
|
|
117
|
+
}
|
|
118
|
+
function pickFields(obj, fieldSet) {
|
|
119
|
+
if (typeof obj !== "object" || obj === null) return {};
|
|
120
|
+
const result = {};
|
|
121
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
122
|
+
if (fieldSet.has(key)) {
|
|
123
|
+
result[key] = value;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return result;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export {
|
|
130
|
+
setForceHuman,
|
|
131
|
+
setGlobalFields,
|
|
132
|
+
setGlobalNdjson,
|
|
133
|
+
isJsonOutput,
|
|
134
|
+
output,
|
|
135
|
+
outputError
|
|
136
|
+
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// src/lib/validate-input.ts
|
|
2
|
+
import path from "path";
|
|
3
|
+
var InputValidationError = class extends Error {
|
|
4
|
+
constructor(message) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = "InputValidationError";
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
function validateInput(value, context) {
|
|
10
|
+
if (value.includes("../") || value.includes("..\\")) {
|
|
11
|
+
throw new InputValidationError(`${context}: path traversal not allowed`);
|
|
12
|
+
}
|
|
13
|
+
if (context !== "url" && value.includes("?")) {
|
|
14
|
+
throw new InputValidationError(
|
|
15
|
+
`${context}: embedded query parameters not allowed`
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
if (/[\x00-\x08\x0b\x0c\x0e-\x1f]/.test(value)) {
|
|
19
|
+
throw new InputValidationError(
|
|
20
|
+
`${context}: control characters not allowed`
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
if (/%25/.test(value)) {
|
|
24
|
+
throw new InputValidationError(
|
|
25
|
+
`${context}: double-encoded values not allowed`
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
if (/%2[fF]/.test(value) || /%2[eE]/.test(value)) {
|
|
29
|
+
throw new InputValidationError(
|
|
30
|
+
`${context}: percent-encoded path characters not allowed`
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
if (context !== "url" && value.includes("#")) {
|
|
34
|
+
throw new InputValidationError(
|
|
35
|
+
`${context}: embedded hash fragments not allowed`
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
function validateBucketName(name) {
|
|
41
|
+
return validateInput(name, "bucket name");
|
|
42
|
+
}
|
|
43
|
+
function validateFileKey(key) {
|
|
44
|
+
return validateInput(key, "file key");
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export {
|
|
48
|
+
InputValidationError,
|
|
49
|
+
validateInput,
|
|
50
|
+
validateBucketName,
|
|
51
|
+
validateFileKey
|
|
52
|
+
};
|
package/dist/cli.js
CHANGED
|
@@ -3,26 +3,53 @@ import {
|
|
|
3
3
|
CLI_DOCS,
|
|
4
4
|
renderCommandHelp
|
|
5
5
|
} from "./chunk-XJDK2CBE.js";
|
|
6
|
+
import {
|
|
7
|
+
InputValidationError
|
|
8
|
+
} from "./chunk-PLZFHPLC.js";
|
|
9
|
+
import {
|
|
10
|
+
outputError,
|
|
11
|
+
setForceHuman,
|
|
12
|
+
setGlobalFields,
|
|
13
|
+
setGlobalNdjson
|
|
14
|
+
} from "./chunk-5IX3ASXH.js";
|
|
6
15
|
|
|
7
16
|
// src/cli.ts
|
|
17
|
+
import { createRequire } from "module";
|
|
8
18
|
import { StowError } from "@howells/stow-server";
|
|
9
19
|
import { Command } from "commander";
|
|
10
|
-
var
|
|
20
|
+
var require2 = createRequire(import.meta.url);
|
|
21
|
+
var { version: VERSION } = require2("../package.json");
|
|
11
22
|
function handleError(err) {
|
|
12
23
|
if (err instanceof StowError) {
|
|
13
|
-
|
|
24
|
+
outputError(err.message, err.code, { status: err.status });
|
|
25
|
+
} else if (err instanceof InputValidationError) {
|
|
26
|
+
outputError(err.message, "INPUT_VALIDATION");
|
|
14
27
|
} else if (err instanceof Error) {
|
|
15
|
-
|
|
28
|
+
outputError(err.message);
|
|
16
29
|
} else {
|
|
17
|
-
|
|
30
|
+
outputError(String(err));
|
|
18
31
|
}
|
|
19
|
-
process.exit(1);
|
|
20
32
|
}
|
|
21
33
|
var program = new Command();
|
|
22
|
-
program.name("stow").description(CLI_DOCS.root.description).version(VERSION).
|
|
34
|
+
program.name("stow").description(CLI_DOCS.root.description).version(VERSION).option("--human", "Force human-readable output (default when TTY)").option(
|
|
35
|
+
"--fields <fields>",
|
|
36
|
+
"Comma-separated fields to include in output (e.g. key,similarity)"
|
|
37
|
+
).option("--ndjson", "Output as newline-delimited JSON (one object per line)").addHelpText("after", renderCommandHelp("root"));
|
|
38
|
+
program.hook("preAction", () => {
|
|
39
|
+
const opts2 = program.opts();
|
|
40
|
+
if (opts2.human) {
|
|
41
|
+
setForceHuman(true);
|
|
42
|
+
}
|
|
43
|
+
if (opts2.fields) {
|
|
44
|
+
setGlobalFields(opts2.fields);
|
|
45
|
+
}
|
|
46
|
+
if (opts2.ndjson) {
|
|
47
|
+
setGlobalNdjson(true);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
23
50
|
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) => {
|
|
24
51
|
try {
|
|
25
|
-
const { uploadDrop } = await import("./upload-
|
|
52
|
+
const { uploadDrop } = await import("./upload-OS6Q6LW5.js");
|
|
26
53
|
await uploadDrop(file, options);
|
|
27
54
|
} catch (err) {
|
|
28
55
|
handleError(err);
|
|
@@ -31,7 +58,7 @@ program.command("drop").description(CLI_DOCS.drop.description).argument("<file>"
|
|
|
31
58
|
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").option("--dry-run", "Preview without uploading").addHelpText("after", renderCommandHelp("upload")).action(
|
|
32
59
|
async (file, options) => {
|
|
33
60
|
try {
|
|
34
|
-
const { uploadFile } = await import("./upload-
|
|
61
|
+
const { uploadFile } = await import("./upload-OS6Q6LW5.js");
|
|
35
62
|
await uploadFile(file, options);
|
|
36
63
|
} catch (err) {
|
|
37
64
|
handleError(err);
|
|
@@ -40,26 +67,26 @@ program.command("upload").description(CLI_DOCS.upload.description).argument("<fi
|
|
|
40
67
|
);
|
|
41
68
|
var bucketsCmd = program.command("buckets").description(CLI_DOCS.buckets.description).addHelpText("after", renderCommandHelp("buckets")).action(async () => {
|
|
42
69
|
try {
|
|
43
|
-
const { listBuckets } = await import("./buckets-
|
|
70
|
+
const { listBuckets } = await import("./buckets-AFNX7FV3.js");
|
|
44
71
|
await listBuckets();
|
|
45
72
|
} catch (err) {
|
|
46
73
|
handleError(err);
|
|
47
74
|
}
|
|
48
75
|
});
|
|
49
|
-
bucketsCmd.command("create").description(CLI_DOCS.bucketsCreate.description).argument("<name>", "Bucket name").option("-d, --description <text>", "Bucket description").option("--public", "Make bucket public").option("--dry-run", "Preview without creating").addHelpText("after", renderCommandHelp("bucketsCreate")).action(
|
|
76
|
+
bucketsCmd.command("create").description(CLI_DOCS.bucketsCreate.description).argument("<name>", "Bucket name").option("-d, --description <text>", "Bucket description").option("--public", "Make bucket public").option("--dry-run", "Preview without creating").option("--input-json <json>", "Raw JSON payload").addHelpText("after", renderCommandHelp("bucketsCreate")).action(
|
|
50
77
|
async (name, options) => {
|
|
51
78
|
try {
|
|
52
|
-
const { createBucket } = await import("./buckets-
|
|
79
|
+
const { createBucket } = await import("./buckets-AFNX7FV3.js");
|
|
53
80
|
await createBucket(name, options);
|
|
54
81
|
} catch (err) {
|
|
55
82
|
handleError(err);
|
|
56
83
|
}
|
|
57
84
|
}
|
|
58
85
|
);
|
|
59
|
-
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").option("--dry-run", "Preview without renaming").addHelpText("after", renderCommandHelp("bucketsRename")).action(
|
|
86
|
+
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").option("--dry-run", "Preview without renaming").option("--input-json <json>", "Raw JSON payload").addHelpText("after", renderCommandHelp("bucketsRename")).action(
|
|
60
87
|
async (name, newName, options) => {
|
|
61
88
|
try {
|
|
62
|
-
const { renameBucket } = await import("./buckets-
|
|
89
|
+
const { renameBucket } = await import("./buckets-AFNX7FV3.js");
|
|
63
90
|
await renameBucket(name, newName, options);
|
|
64
91
|
} catch (err) {
|
|
65
92
|
handleError(err);
|
|
@@ -68,7 +95,7 @@ bucketsCmd.command("rename").description(CLI_DOCS.bucketsRename.description).arg
|
|
|
68
95
|
);
|
|
69
96
|
bucketsCmd.command("delete").description(CLI_DOCS.bucketsDelete.description).argument("<id>", "Bucket ID").option("--dry-run", "Preview without deleting").addHelpText("after", renderCommandHelp("bucketsDelete")).action(async (id, options) => {
|
|
70
97
|
try {
|
|
71
|
-
const { deleteBucket } = await import("./buckets-
|
|
98
|
+
const { deleteBucket } = await import("./buckets-AFNX7FV3.js");
|
|
72
99
|
await deleteBucket(id, options);
|
|
73
100
|
} catch (err) {
|
|
74
101
|
handleError(err);
|
|
@@ -81,7 +108,7 @@ var filesCmd = program.command("files").description(CLI_DOCS.files.description).
|
|
|
81
108
|
return;
|
|
82
109
|
}
|
|
83
110
|
try {
|
|
84
|
-
const { listFiles } = await import("./files-
|
|
111
|
+
const { listFiles } = await import("./files-XU6MDPP4.js");
|
|
85
112
|
await listFiles(bucket, options);
|
|
86
113
|
} catch (err) {
|
|
87
114
|
handleError(err);
|
|
@@ -90,16 +117,16 @@ var filesCmd = program.command("files").description(CLI_DOCS.files.description).
|
|
|
90
117
|
);
|
|
91
118
|
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) => {
|
|
92
119
|
try {
|
|
93
|
-
const { getFile } = await import("./files-
|
|
120
|
+
const { getFile } = await import("./files-XU6MDPP4.js");
|
|
94
121
|
await getFile(bucket, key, options);
|
|
95
122
|
} catch (err) {
|
|
96
123
|
handleError(err);
|
|
97
124
|
}
|
|
98
125
|
});
|
|
99
|
-
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").option("--dry-run", "Preview without updating").addHelpText("after", renderCommandHelp("filesUpdate")).action(
|
|
126
|
+
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").option("--dry-run", "Preview without updating").option("--input-json <json>", "Raw JSON payload").addHelpText("after", renderCommandHelp("filesUpdate")).action(
|
|
100
127
|
async (bucket, key, options) => {
|
|
101
128
|
try {
|
|
102
|
-
const { updateFile } = await import("./files-
|
|
129
|
+
const { updateFile } = await import("./files-XU6MDPP4.js");
|
|
103
130
|
await updateFile(bucket, key, options);
|
|
104
131
|
} catch (err) {
|
|
105
132
|
handleError(err);
|
|
@@ -108,7 +135,7 @@ filesCmd.command("update").description(CLI_DOCS.filesUpdate.description).argumen
|
|
|
108
135
|
);
|
|
109
136
|
filesCmd.command("enrich").description(CLI_DOCS.filesEnrich.description).argument("<bucket>", "Bucket name").argument("<key>", "File key").addHelpText("after", renderCommandHelp("filesEnrich")).action(async (bucket, key) => {
|
|
110
137
|
try {
|
|
111
|
-
const { enrichFile } = await import("./files-
|
|
138
|
+
const { enrichFile } = await import("./files-XU6MDPP4.js");
|
|
112
139
|
await enrichFile(bucket, key);
|
|
113
140
|
} catch (err) {
|
|
114
141
|
handleError(err);
|
|
@@ -117,7 +144,7 @@ filesCmd.command("enrich").description(CLI_DOCS.filesEnrich.description).argumen
|
|
|
117
144
|
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(
|
|
118
145
|
async (bucket, type, options) => {
|
|
119
146
|
try {
|
|
120
|
-
const { listMissing } = await import("./files-
|
|
147
|
+
const { listMissing } = await import("./files-XU6MDPP4.js");
|
|
121
148
|
await listMissing(bucket, type, options);
|
|
122
149
|
} catch (err) {
|
|
123
150
|
handleError(err);
|
|
@@ -126,7 +153,7 @@ filesCmd.command("missing").description(CLI_DOCS.filesMissing.description).argum
|
|
|
126
153
|
);
|
|
127
154
|
var dropsCmd = program.command("drops").description(CLI_DOCS.drops.description).addHelpText("after", renderCommandHelp("drops")).action(async () => {
|
|
128
155
|
try {
|
|
129
|
-
const { listDrops } = await import("./drops-
|
|
156
|
+
const { listDrops } = await import("./drops-5VIEW3XZ.js");
|
|
130
157
|
await listDrops();
|
|
131
158
|
} catch (err) {
|
|
132
159
|
handleError(err);
|
|
@@ -134,7 +161,7 @@ var dropsCmd = program.command("drops").description(CLI_DOCS.drops.description).
|
|
|
134
161
|
});
|
|
135
162
|
dropsCmd.command("delete").description(CLI_DOCS.dropsDelete.description).argument("<id>", "Drop ID").addHelpText("after", renderCommandHelp("dropsDelete")).action(async (id) => {
|
|
136
163
|
try {
|
|
137
|
-
const { deleteDrop } = await import("./drops-
|
|
164
|
+
const { deleteDrop } = await import("./drops-5VIEW3XZ.js");
|
|
138
165
|
await deleteDrop(id);
|
|
139
166
|
} catch (err) {
|
|
140
167
|
handleError(err);
|
|
@@ -144,7 +171,7 @@ var searchCmd = program.command("search").description(CLI_DOCS.search.descriptio
|
|
|
144
171
|
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(
|
|
145
172
|
async (query, options) => {
|
|
146
173
|
try {
|
|
147
|
-
const { textSearch } = await import("./search-
|
|
174
|
+
const { textSearch } = await import("./search-ETC2EXKM.js");
|
|
148
175
|
await textSearch(query, options);
|
|
149
176
|
} catch (err) {
|
|
150
177
|
handleError(err);
|
|
@@ -154,7 +181,7 @@ searchCmd.command("text").description(CLI_DOCS.searchText.description).argument(
|
|
|
154
181
|
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(
|
|
155
182
|
async (options) => {
|
|
156
183
|
try {
|
|
157
|
-
const { similarSearch } = await import("./search-
|
|
184
|
+
const { similarSearch } = await import("./search-ETC2EXKM.js");
|
|
158
185
|
await similarSearch(options);
|
|
159
186
|
} catch (err) {
|
|
160
187
|
handleError(err);
|
|
@@ -164,7 +191,7 @@ searchCmd.command("similar").description(CLI_DOCS.searchSimilar.description).req
|
|
|
164
191
|
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(
|
|
165
192
|
async (options) => {
|
|
166
193
|
try {
|
|
167
|
-
const { colorSearch } = await import("./search-
|
|
194
|
+
const { colorSearch } = await import("./search-ETC2EXKM.js");
|
|
168
195
|
await colorSearch(options);
|
|
169
196
|
} catch (err) {
|
|
170
197
|
handleError(err);
|
|
@@ -174,7 +201,7 @@ searchCmd.command("color").description(CLI_DOCS.searchColor.description).require
|
|
|
174
201
|
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(
|
|
175
202
|
async (options) => {
|
|
176
203
|
try {
|
|
177
|
-
const { diverseSearch } = await import("./search-
|
|
204
|
+
const { diverseSearch } = await import("./search-ETC2EXKM.js");
|
|
178
205
|
await diverseSearch(options);
|
|
179
206
|
} catch (err) {
|
|
180
207
|
handleError(err);
|
|
@@ -183,16 +210,16 @@ searchCmd.command("diverse").description(CLI_DOCS.searchDiverse.description).opt
|
|
|
183
210
|
);
|
|
184
211
|
var tagsCmd = program.command("tags").description(CLI_DOCS.tags.description).option("--json", "Output as JSON").addHelpText("after", renderCommandHelp("tags")).action(async (options) => {
|
|
185
212
|
try {
|
|
186
|
-
const { listTags } = await import("./tags-
|
|
213
|
+
const { listTags } = await import("./tags-TBFPDHIQ.js");
|
|
187
214
|
await listTags(options);
|
|
188
215
|
} catch (err) {
|
|
189
216
|
handleError(err);
|
|
190
217
|
}
|
|
191
218
|
});
|
|
192
|
-
tagsCmd.command("create").description(CLI_DOCS.tagsCreate.description).argument("<name>", "Tag name").option("--color <hex>", "Tag color (hex)").option("--json", "Output as JSON").option("--dry-run", "Preview without creating").addHelpText("after", renderCommandHelp("tagsCreate")).action(
|
|
219
|
+
tagsCmd.command("create").description(CLI_DOCS.tagsCreate.description).argument("<name>", "Tag name").option("--color <hex>", "Tag color (hex)").option("--json", "Output as JSON").option("--dry-run", "Preview without creating").option("--input-json <json>", "Raw JSON payload").addHelpText("after", renderCommandHelp("tagsCreate")).action(
|
|
193
220
|
async (name, options) => {
|
|
194
221
|
try {
|
|
195
|
-
const { createTag } = await import("./tags-
|
|
222
|
+
const { createTag } = await import("./tags-TBFPDHIQ.js");
|
|
196
223
|
await createTag(name, options);
|
|
197
224
|
} catch (err) {
|
|
198
225
|
handleError(err);
|
|
@@ -201,7 +228,7 @@ tagsCmd.command("create").description(CLI_DOCS.tagsCreate.description).argument(
|
|
|
201
228
|
);
|
|
202
229
|
tagsCmd.command("delete").description(CLI_DOCS.tagsDelete.description).argument("<id>", "Tag ID").option("--dry-run", "Preview without deleting").addHelpText("after", renderCommandHelp("tagsDelete")).action(async (id, options) => {
|
|
203
230
|
try {
|
|
204
|
-
const { deleteTag } = await import("./tags-
|
|
231
|
+
const { deleteTag } = await import("./tags-TBFPDHIQ.js");
|
|
205
232
|
await deleteTag(id, options);
|
|
206
233
|
} catch (err) {
|
|
207
234
|
handleError(err);
|
|
@@ -211,7 +238,7 @@ var profilesCmd = program.command("profiles").description(CLI_DOCS.profiles.desc
|
|
|
211
238
|
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(
|
|
212
239
|
async (options) => {
|
|
213
240
|
try {
|
|
214
|
-
const { createProfile } = await import("./profiles-
|
|
241
|
+
const { createProfile } = await import("./profiles-MB3TZQE4.js");
|
|
215
242
|
await createProfile(options);
|
|
216
243
|
} catch (err) {
|
|
217
244
|
handleError(err);
|
|
@@ -220,7 +247,7 @@ profilesCmd.command("create").description(CLI_DOCS.profilesCreate.description).r
|
|
|
220
247
|
);
|
|
221
248
|
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) => {
|
|
222
249
|
try {
|
|
223
|
-
const { getProfile } = await import("./profiles-
|
|
250
|
+
const { getProfile } = await import("./profiles-MB3TZQE4.js");
|
|
224
251
|
await getProfile(id, options);
|
|
225
252
|
} catch (err) {
|
|
226
253
|
handleError(err);
|
|
@@ -228,7 +255,7 @@ profilesCmd.command("get").description(CLI_DOCS.profilesGet.description).argumen
|
|
|
228
255
|
});
|
|
229
256
|
profilesCmd.command("delete").description(CLI_DOCS.profilesDelete.description).argument("<id>", "Profile ID").addHelpText("after", renderCommandHelp("profilesDelete")).action(async (id) => {
|
|
230
257
|
try {
|
|
231
|
-
const { deleteProfile } = await import("./profiles-
|
|
258
|
+
const { deleteProfile } = await import("./profiles-MB3TZQE4.js");
|
|
232
259
|
await deleteProfile(id);
|
|
233
260
|
} catch (err) {
|
|
234
261
|
handleError(err);
|
|
@@ -237,7 +264,7 @@ profilesCmd.command("delete").description(CLI_DOCS.profilesDelete.description).a
|
|
|
237
264
|
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(
|
|
238
265
|
async (options) => {
|
|
239
266
|
try {
|
|
240
|
-
const { listJobs } = await import("./jobs-
|
|
267
|
+
const { listJobs } = await import("./jobs-TND5AHCL.js");
|
|
241
268
|
await listJobs(options.bucket, options);
|
|
242
269
|
} catch (err) {
|
|
243
270
|
handleError(err);
|
|
@@ -246,7 +273,7 @@ var jobsCmd = program.command("jobs").description(CLI_DOCS.jobs.description).req
|
|
|
246
273
|
);
|
|
247
274
|
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) => {
|
|
248
275
|
try {
|
|
249
|
-
const { retryJob } = await import("./jobs-
|
|
276
|
+
const { retryJob } = await import("./jobs-TND5AHCL.js");
|
|
250
277
|
await retryJob(id, options);
|
|
251
278
|
} catch (err) {
|
|
252
279
|
handleError(err);
|
|
@@ -254,7 +281,7 @@ jobsCmd.command("retry").description(CLI_DOCS.jobsRetry.description).argument("<
|
|
|
254
281
|
});
|
|
255
282
|
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) => {
|
|
256
283
|
try {
|
|
257
|
-
const { deleteJob } = await import("./jobs-
|
|
284
|
+
const { deleteJob } = await import("./jobs-TND5AHCL.js");
|
|
258
285
|
await deleteJob(id, options);
|
|
259
286
|
} catch (err) {
|
|
260
287
|
handleError(err);
|
|
@@ -263,7 +290,7 @@ jobsCmd.command("delete").description(CLI_DOCS.jobsDelete.description).argument(
|
|
|
263
290
|
var adminCmd = program.command("admin").description(CLI_DOCS.admin.description).addHelpText("after", renderCommandHelp("admin"));
|
|
264
291
|
adminCmd.command("health").description(CLI_DOCS.adminHealth.description).option("--json", "Output as JSON").addHelpText("after", renderCommandHelp("adminHealth")).action(async (options) => {
|
|
265
292
|
try {
|
|
266
|
-
const { health } = await import("./health-
|
|
293
|
+
const { health } = await import("./health-SH6T6DZS.js");
|
|
267
294
|
await health(options);
|
|
268
295
|
} catch (err) {
|
|
269
296
|
handleError(err);
|
|
@@ -273,7 +300,7 @@ var backfillCmd = adminCmd.command("backfill").description(CLI_DOCS.adminBackfil
|
|
|
273
300
|
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(
|
|
274
301
|
async (options) => {
|
|
275
302
|
try {
|
|
276
|
-
const { backfillDimensions } = await import("./backfill-
|
|
303
|
+
const { backfillDimensions } = await import("./backfill-VAORMLMY.js");
|
|
277
304
|
await backfillDimensions(options);
|
|
278
305
|
} catch (err) {
|
|
279
306
|
handleError(err);
|
|
@@ -283,7 +310,7 @@ backfillCmd.command("dimensions").description("Backfill image dimensions").optio
|
|
|
283
310
|
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(
|
|
284
311
|
async (options) => {
|
|
285
312
|
try {
|
|
286
|
-
const { backfillColors } = await import("./backfill-
|
|
313
|
+
const { backfillColors } = await import("./backfill-VAORMLMY.js");
|
|
287
314
|
await backfillColors(options);
|
|
288
315
|
} catch (err) {
|
|
289
316
|
handleError(err);
|
|
@@ -293,7 +320,7 @@ backfillCmd.command("colors").description("Backfill color extraction").option("-
|
|
|
293
320
|
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(
|
|
294
321
|
async (options) => {
|
|
295
322
|
try {
|
|
296
|
-
const { backfillEmbeddings } = await import("./backfill-
|
|
323
|
+
const { backfillEmbeddings } = await import("./backfill-VAORMLMY.js");
|
|
297
324
|
await backfillEmbeddings(options);
|
|
298
325
|
} catch (err) {
|
|
299
326
|
handleError(err);
|
|
@@ -303,7 +330,7 @@ backfillCmd.command("embeddings").description("Backfill embedding generation").o
|
|
|
303
330
|
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(
|
|
304
331
|
async (options) => {
|
|
305
332
|
try {
|
|
306
|
-
const { cleanupDrops } = await import("./maintenance-
|
|
333
|
+
const { cleanupDrops } = await import("./maintenance-V2TXPXQE.js");
|
|
307
334
|
await cleanupDrops(options);
|
|
308
335
|
} catch (err) {
|
|
309
336
|
handleError(err);
|
|
@@ -312,7 +339,7 @@ adminCmd.command("cleanup-drops").description(CLI_DOCS.adminCleanupDrops.descrip
|
|
|
312
339
|
);
|
|
313
340
|
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) => {
|
|
314
341
|
try {
|
|
315
|
-
const { purgeEvents } = await import("./maintenance-
|
|
342
|
+
const { purgeEvents } = await import("./maintenance-V2TXPXQE.js");
|
|
316
343
|
await purgeEvents(options);
|
|
317
344
|
} catch (err) {
|
|
318
345
|
handleError(err);
|
|
@@ -321,7 +348,7 @@ adminCmd.command("purge-events").description(CLI_DOCS.adminPurgeEvents.descripti
|
|
|
321
348
|
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(
|
|
322
349
|
async (options) => {
|
|
323
350
|
try {
|
|
324
|
-
const { reconcileFiles } = await import("./maintenance-
|
|
351
|
+
const { reconcileFiles } = await import("./maintenance-V2TXPXQE.js");
|
|
325
352
|
await reconcileFiles(options);
|
|
326
353
|
} catch (err) {
|
|
327
354
|
handleError(err);
|
|
@@ -330,7 +357,7 @@ adminCmd.command("reconcile-files").description(CLI_DOCS.adminReconcileFiles.des
|
|
|
330
357
|
);
|
|
331
358
|
adminCmd.command("retry-sync-failures").description(CLI_DOCS.adminRetrySyncFailures.description).option("--json", "Output as JSON").addHelpText("after", renderCommandHelp("adminRetrySyncFailures")).action(async (options) => {
|
|
332
359
|
try {
|
|
333
|
-
const { retrySyncFailures } = await import("./maintenance-
|
|
360
|
+
const { retrySyncFailures } = await import("./maintenance-V2TXPXQE.js");
|
|
334
361
|
await retrySyncFailures(options);
|
|
335
362
|
} catch (err) {
|
|
336
363
|
handleError(err);
|
|
@@ -339,7 +366,7 @@ adminCmd.command("retry-sync-failures").description(CLI_DOCS.adminRetrySyncFailu
|
|
|
339
366
|
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(
|
|
340
367
|
async (options) => {
|
|
341
368
|
try {
|
|
342
|
-
const { listAdminJobs } = await import("./jobs-
|
|
369
|
+
const { listAdminJobs } = await import("./jobs-ROJFRPMR.js");
|
|
343
370
|
await listAdminJobs(options);
|
|
344
371
|
} catch (err) {
|
|
345
372
|
handleError(err);
|
|
@@ -348,7 +375,7 @@ var adminJobsCmd = adminCmd.command("jobs").description(CLI_DOCS.adminJobs.descr
|
|
|
348
375
|
);
|
|
349
376
|
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) => {
|
|
350
377
|
try {
|
|
351
|
-
const { retryAdminJob } = await import("./jobs-
|
|
378
|
+
const { retryAdminJob } = await import("./jobs-ROJFRPMR.js");
|
|
352
379
|
await retryAdminJob(id, options);
|
|
353
380
|
} catch (err) {
|
|
354
381
|
handleError(err);
|
|
@@ -356,7 +383,7 @@ adminJobsCmd.command("retry").description(CLI_DOCS.adminJobsRetry.description).a
|
|
|
356
383
|
});
|
|
357
384
|
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) => {
|
|
358
385
|
try {
|
|
359
|
-
const { deleteAdminJob } = await import("./jobs-
|
|
386
|
+
const { deleteAdminJob } = await import("./jobs-ROJFRPMR.js");
|
|
360
387
|
await deleteAdminJob(id, options);
|
|
361
388
|
} catch (err) {
|
|
362
389
|
handleError(err);
|
|
@@ -364,7 +391,7 @@ adminJobsCmd.command("delete").description(CLI_DOCS.adminJobsDelete.description)
|
|
|
364
391
|
});
|
|
365
392
|
var adminQueuesCmd = adminCmd.command("queues").description(CLI_DOCS.adminQueues.description).option("--json", "Output as JSON").addHelpText("after", renderCommandHelp("adminQueues")).action(async (options) => {
|
|
366
393
|
try {
|
|
367
|
-
const { listQueues } = await import("./queues-
|
|
394
|
+
const { listQueues } = await import("./queues-NR25TGT7.js");
|
|
368
395
|
await listQueues(options);
|
|
369
396
|
} catch (err) {
|
|
370
397
|
handleError(err);
|
|
@@ -373,7 +400,7 @@ var adminQueuesCmd = adminCmd.command("queues").description(CLI_DOCS.adminQueues
|
|
|
373
400
|
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(
|
|
374
401
|
async (name, options) => {
|
|
375
402
|
try {
|
|
376
|
-
const { cleanQueue } = await import("./queues-
|
|
403
|
+
const { cleanQueue } = await import("./queues-NR25TGT7.js");
|
|
377
404
|
await cleanQueue(name, options);
|
|
378
405
|
} catch (err) {
|
|
379
406
|
handleError(err);
|
|
@@ -383,7 +410,7 @@ adminQueuesCmd.command("clean").description(CLI_DOCS.adminQueuesClean.descriptio
|
|
|
383
410
|
program.command("delete").description(CLI_DOCS.delete.description).argument("<bucket>", "Bucket name").argument("<key>", "File key").option("--dry-run", "Preview without deleting").addHelpText("after", renderCommandHelp("delete")).action(
|
|
384
411
|
async (bucket, key, options) => {
|
|
385
412
|
try {
|
|
386
|
-
const { deleteFile } = await import("./delete-
|
|
413
|
+
const { deleteFile } = await import("./delete-YEXSMG4I.js");
|
|
387
414
|
await deleteFile(bucket, key, options);
|
|
388
415
|
} catch (err) {
|
|
389
416
|
handleError(err);
|
|
@@ -392,7 +419,7 @@ program.command("delete").description(CLI_DOCS.delete.description).argument("<bu
|
|
|
392
419
|
);
|
|
393
420
|
program.command("whoami").description(CLI_DOCS.whoami.description).addHelpText("after", renderCommandHelp("whoami")).action(async () => {
|
|
394
421
|
try {
|
|
395
|
-
const { whoami } = await import("./whoami-
|
|
422
|
+
const { whoami } = await import("./whoami-TVRKBM74.js");
|
|
396
423
|
await whoami();
|
|
397
424
|
} catch (err) {
|
|
398
425
|
handleError(err);
|
|
@@ -408,7 +435,7 @@ program.command("open").description(CLI_DOCS.open.description).argument("<bucket
|
|
|
408
435
|
});
|
|
409
436
|
program.command("describe").argument("[command]", "Command path (dot notation, e.g. search.text)").description("Show command schema for AI agents").action(async (command) => {
|
|
410
437
|
try {
|
|
411
|
-
const { describeCommand } = await import("./describe-
|
|
438
|
+
const { describeCommand } = await import("./describe-HSEHMJVD.js");
|
|
412
439
|
describeCommand(command ?? "");
|
|
413
440
|
} catch (err) {
|
|
414
441
|
handleError(err);
|
|
@@ -427,5 +454,5 @@ program.parse();
|
|
|
427
454
|
var opts = program.opts();
|
|
428
455
|
var args = process.argv.slice(2);
|
|
429
456
|
if (args.length === 0 || args.length === 1 && opts.interactive) {
|
|
430
|
-
import("./app-
|
|
457
|
+
import("./app-Q6EW7VSM.js").then(({ startInteractive }) => startInteractive()).catch(handleError);
|
|
431
458
|
}
|