democut 1.0.65 → 1.0.67
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/cli.js +109 -3
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -6916,7 +6916,7 @@ import { realpathSync } from "fs";
|
|
|
6916
6916
|
import { fileURLToPath } from "url";
|
|
6917
6917
|
|
|
6918
6918
|
// src/version.ts
|
|
6919
|
-
var VERSION = "1.0.
|
|
6919
|
+
var VERSION = "1.0.67";
|
|
6920
6920
|
|
|
6921
6921
|
// src/device-flow.ts
|
|
6922
6922
|
var DeviceFlowError = class extends Error {
|
|
@@ -11648,6 +11648,62 @@ var GENERATED_TOOLS = [
|
|
|
11648
11648
|
"openWorldHint": false
|
|
11649
11649
|
}
|
|
11650
11650
|
},
|
|
11651
|
+
{
|
|
11652
|
+
"name": "democut_download_export",
|
|
11653
|
+
"description": "\uC644\uC131\uBCF8 \uC0B0\uCD9C\uBB3C \uD558\uB098\uB97C \uB0B4\uB824\uBC1B\uB294\uB2E4(kind: video|subtitle). stdio \uB294 output_path \uC5D0 \uC800\uC7A5, \uC6D0\uACA9\uC740 \uC11C\uBA85 URL(1\uC2DC\uAC04). democut_make_export \uB4A4 democut_wait_jobs \uAC00 \uC900 result.export_number \uB97C \uADF8\uB300\uB85C \uB123\uC5B4\uB77C \u2014 democut_get_export \uB97C \uAC70\uCE60 \uD544\uC694\uAC00 \uC5C6\uB2E4(\uCEF7\uC758 democut_download \uC640 \uAC19\uC740 \uADDC\uC57D).",
|
|
11654
|
+
"inputSchema": {
|
|
11655
|
+
"type": "object",
|
|
11656
|
+
"properties": {
|
|
11657
|
+
"slug": {
|
|
11658
|
+
"type": "string",
|
|
11659
|
+
"description": "\uD504\uB85C\uC81D\uD2B8 \uC2AC\uB7EC\uADF8(democut_list_projects)"
|
|
11660
|
+
},
|
|
11661
|
+
"number": {
|
|
11662
|
+
"type": "string",
|
|
11663
|
+
"description": "\uC644\uC131\uBCF8 \uBC88\uD638(1\uBD80\uD130)"
|
|
11664
|
+
},
|
|
11665
|
+
"kind": {
|
|
11666
|
+
"default": "video",
|
|
11667
|
+
"enum": [
|
|
11668
|
+
"video",
|
|
11669
|
+
"subtitle"
|
|
11670
|
+
],
|
|
11671
|
+
"type": "string"
|
|
11672
|
+
},
|
|
11673
|
+
"output_path": {
|
|
11674
|
+
"type": "string",
|
|
11675
|
+
"description": "\uC800\uC7A5\uD560 \uB85C\uCEEC \uACBD\uB85C(stdio \uC804\uC6A9). \uC5C6\uC73C\uBA74 URL \uB9CC \uB3CC\uB824\uC900\uB2E4"
|
|
11676
|
+
}
|
|
11677
|
+
},
|
|
11678
|
+
"required": [
|
|
11679
|
+
"slug",
|
|
11680
|
+
"number"
|
|
11681
|
+
],
|
|
11682
|
+
"additionalProperties": false
|
|
11683
|
+
},
|
|
11684
|
+
"outputSchema": {
|
|
11685
|
+
"type": "object",
|
|
11686
|
+
"properties": {
|
|
11687
|
+
"url": {
|
|
11688
|
+
"type": "string"
|
|
11689
|
+
},
|
|
11690
|
+
"expires_at": {
|
|
11691
|
+
"type": "string"
|
|
11692
|
+
},
|
|
11693
|
+
"saved_to": {}
|
|
11694
|
+
},
|
|
11695
|
+
"required": [
|
|
11696
|
+
"url",
|
|
11697
|
+
"expires_at"
|
|
11698
|
+
]
|
|
11699
|
+
},
|
|
11700
|
+
"annotations": {
|
|
11701
|
+
"readOnlyHint": true,
|
|
11702
|
+
"destructiveHint": false,
|
|
11703
|
+
"idempotentHint": true,
|
|
11704
|
+
"openWorldHint": false
|
|
11705
|
+
}
|
|
11706
|
+
},
|
|
11651
11707
|
{
|
|
11652
11708
|
"name": "democut_make_thumbnails",
|
|
11653
11709
|
"description": "\uC378\uB124\uC77C \uB9CC\uB4E4\uAE30(\uCCAD\uAD6C) \u2014 styles \uB85C bold\xB7minimal\xB7dramatic \uC911 \uACE0\uB978 \uC2A4\uD0C0\uC77C\uB9CC(\uBE44\uC6B0\uBA74 \uC14B \uB2E4), \uC7A5\uB9C8\uB2E4 \uCCAD\uAD6C\xB7\uC2E4\uD328\uD55C \uC7A5\uB9CC \uD658\uBD88. \uB3D9\uC758\uC561 = thumbnail:variant \uB2E8\uAC00 \xD7 \uACE0\uB978 \uC218. \uC644\uC131\uBCF8 \uC601\uC0C1\uC774 \uC788\uC5B4\uC57C \uD55C\uB2E4(\uC5C6\uC73C\uBA74 409). \uB300\uCCB4: democut_upload_asset + democut_select_thumbnail. \uBCC4\uB3C4 \uACAC\uC801 \uB3C4\uAD6C\uAC00 \uC5C6\uB2E4: democut_get_options \uC758 rates \uC5D0\uC11C thumbnail:variant \uB2E8\uAC00\uC640 rate_version \uC744 \uC77D\uC5B4 **\uACE0\uB978 \uC2A4\uD0C0\uC77C \uC218**\uB9CC\uD07C \uACF1\uD574 confirmed_cost_krw \uC5D0 \uADF8\uB300\uB85C \uB123\uC5B4\uB77C(styles \uB97C \uBE44\uC6B0\uBA74 3\uC7A5). \uC5B4\uAE0B\uB098\uBA74 409 QUOTE_MISMATCH \uAC00 \uC7AC\uACC4\uC0B0 \uACAC\uC801(data.quote)\uC744 \uC900\uB2E4(\uACFC\uAE08 \uC5C6\uC74C). \uC751\uB2F5\uC740 202 \u2014 \uACB0\uACFC\uB294 democut_wait_jobs \uB85C \uBC1B\uB294\uB2E4. \uB2E4\uC74C \uD638\uCD9C: democut_wait_jobs, democut_get_export.",
|
|
@@ -12878,6 +12934,12 @@ var TOOL_META = {
|
|
|
12878
12934
|
"method": "GET",
|
|
12879
12935
|
"path": "/api/projects/{slug}/exports/{number}"
|
|
12880
12936
|
},
|
|
12937
|
+
"democut_download_export": {
|
|
12938
|
+
"cost": "none",
|
|
12939
|
+
"group": "export",
|
|
12940
|
+
"method": "GET",
|
|
12941
|
+
"path": "/api/projects/{slug}/exports/{number}/download"
|
|
12942
|
+
},
|
|
12881
12943
|
"democut_make_thumbnails": {
|
|
12882
12944
|
"cost": "charge",
|
|
12883
12945
|
"group": "export",
|
|
@@ -13475,6 +13537,13 @@ function authStatus(deps = {}) {
|
|
|
13475
13537
|
});
|
|
13476
13538
|
}
|
|
13477
13539
|
var krw = (v) => `${v.toLocaleString("ko-KR")}\uC6D0`;
|
|
13540
|
+
function refundBits(err4) {
|
|
13541
|
+
const refunded = Math.max(0, err4.refunded_krw ?? 0);
|
|
13542
|
+
const charged = Math.max(0, err4.charged_krw ?? 0);
|
|
13543
|
+
if (charged <= 0) return refunded > 0 ? [`\uD658\uBD88 ${krw(refunded)}`] : [];
|
|
13544
|
+
if (refunded >= charged) return [`\uD658\uBD88 ${krw(refunded)}`];
|
|
13545
|
+
return [`\uCCAD\uAD6C ${krw(charged)} \uC911 \uD658\uBD88 ${krw(refunded)}`, `${krw(charged - refunded)} \uC740 \uB3CC\uC544\uC624\uC9C0 \uC54A\uB294\uB2E4`];
|
|
13546
|
+
}
|
|
13478
13547
|
var NO_WORKSPACE = {
|
|
13479
13548
|
isError: true,
|
|
13480
13549
|
text: "\uD65C\uC131 \uC6CC\uD06C\uC2A4\uD398\uC774\uC2A4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. democut_auth_status \uB85C \uB85C\uADF8\uC778 \uC0C1\uD0DC\uB97C \uD655\uC778\uD558\uACE0, \uC18C\uC18D\uB41C \uC6CC\uD06C\uC2A4\uD398\uC774\uC2A4\uAC00 \uC5C6\uB2E4\uBA74 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uCD08\uB300\uB97C \uBC1B\uC544\uC57C \uD55C\uB2E4\uACE0 \uC54C\uB9AC\uC138\uC694."
|
|
@@ -14089,7 +14158,7 @@ function jobLine(j) {
|
|
|
14089
14158
|
}
|
|
14090
14159
|
if (j.error) {
|
|
14091
14160
|
bits.push(`\uC624\uB958 ${j.error.code}: ${firstLine(j.error.message)}`);
|
|
14092
|
-
|
|
14161
|
+
bits.push(...refundBits(j.error));
|
|
14093
14162
|
}
|
|
14094
14163
|
if (j.result?.version != null) bits.push(`\u2192 v${j.result.version}`);
|
|
14095
14164
|
const refunded = j.result?.extra?.refunded_krw;
|
|
@@ -14250,7 +14319,7 @@ function cutLine(cut) {
|
|
|
14250
14319
|
if (cut.blocked_reason) bits.push(`\uB9C9\uD798: ${callableToolNames(cut.blocked_reason)}`);
|
|
14251
14320
|
if (cut.last_error) {
|
|
14252
14321
|
bits.push(`\uC2E4\uD328 ${cut.last_error.code}: ${firstLine(cut.last_error.message)}`);
|
|
14253
|
-
|
|
14322
|
+
bits.push(...refundBits(cut.last_error));
|
|
14254
14323
|
}
|
|
14255
14324
|
return bits.join(" \xB7 ");
|
|
14256
14325
|
}
|
|
@@ -15365,6 +15434,41 @@ function needExportNumber(a) {
|
|
|
15365
15434
|
}
|
|
15366
15435
|
return Number(a.number);
|
|
15367
15436
|
}
|
|
15437
|
+
function downloadExport(a = {}, deps = {}) {
|
|
15438
|
+
return guarded(READ_ONLY, async () => {
|
|
15439
|
+
const slug = needSlug(a);
|
|
15440
|
+
if (typeof slug !== "string") return slug;
|
|
15441
|
+
const number3 = needExportNumber(a);
|
|
15442
|
+
if (typeof number3 !== "number") return number3;
|
|
15443
|
+
const kind = a.kind ?? "video";
|
|
15444
|
+
const base = resolveBaseUrl(deps.baseUrl);
|
|
15445
|
+
const q = new URLSearchParams({ kind });
|
|
15446
|
+
let out4;
|
|
15447
|
+
try {
|
|
15448
|
+
out4 = await apiRequest(base, projectPath(slug, `/exports/${number3}/download?${q}`), {}, deps);
|
|
15449
|
+
} catch (e) {
|
|
15450
|
+
if (e instanceof ApiError && e.status === 404 && e.code === `HTTP_404`) {
|
|
15451
|
+
return {
|
|
15452
|
+
isError: true,
|
|
15453
|
+
text: "\uC774 \uC11C\uBC84\uC5D0\uB294 \uC544\uC9C1 \uC644\uC131\uBCF8 \uB0B4\uB824\uBC1B\uAE30\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4 \u2014 CLI \uAC00 \uC11C\uBC84\uBCF4\uB2E4 \uBA3C\uC800 \uC62C\uB77C\uAC00 \uC0DD\uAE30\uB294 \uC77C\uC2DC\uC801\uC778 \uCC28\uC774\uC785\uB2C8\uB2E4.\n\uC2AC\uB7EC\uADF8\uC640 \uBC88\uD638\uB294 \uBB38\uC81C\uAC00 \uC544\uB2C8\uB2C8 \uACE0\uCE58\uC9C0 \uB9C8\uC138\uC694. \uC11C\uBC84\uAC00 \uBC30\uD3EC\uB420 \uB54C\uAE4C\uC9C0\uB294 democut_get_export \uAC00 \uC8FC\uB294 download.video\xB7download.subtitle \uC8FC\uC18C\uB97C \uC4F0\uC138\uC694(\uC11C\uBA85\uC740 1\uC2DC\uAC04)."
|
|
15454
|
+
};
|
|
15455
|
+
}
|
|
15456
|
+
throw e;
|
|
15457
|
+
}
|
|
15458
|
+
if (a.output_path) {
|
|
15459
|
+
await (deps.downloadImpl ? deps.downloadImpl(out4.url, a.output_path) : saveUrlToFile(out4.url, a.output_path, deps.fetchImpl ?? fetch));
|
|
15460
|
+
return { text: `\uC644\uC131\uBCF8 #${number3} ${kind} \uB97C \uC800\uC7A5\uD588\uC2B5\uB2C8\uB2E4: ${a.output_path}`, structured: callableStructured({ ...out4, saved_to: a.output_path }) };
|
|
15461
|
+
}
|
|
15462
|
+
return {
|
|
15463
|
+
text: [
|
|
15464
|
+
`\uC644\uC131\uBCF8 #${number3} ${kind} \uB0B4\uB824\uBC1B\uAE30 \uC8FC\uC18C (\uB9CC\uB8CC ${out4.expires_at}):`,
|
|
15465
|
+
out4.url,
|
|
15466
|
+
"output_path \uB97C \uC8FC\uBA74 \uC774 \uD30C\uC77C\uC744 \uADF8 \uACBD\uB85C\uC5D0 \uBC14\uB85C \uC800\uC7A5\uD569\uB2C8\uB2E4."
|
|
15467
|
+
].join("\n"),
|
|
15468
|
+
structured: callableStructured(out4)
|
|
15469
|
+
};
|
|
15470
|
+
});
|
|
15471
|
+
}
|
|
15368
15472
|
function getExport(a = {}, deps = {}) {
|
|
15369
15473
|
return guarded(READ_ONLY, async () => {
|
|
15370
15474
|
const slug = needSlug(a);
|
|
@@ -15648,6 +15752,8 @@ function dispatch(name, args, deps = {}) {
|
|
|
15648
15752
|
return listExports(args, deps);
|
|
15649
15753
|
case "democut_get_export":
|
|
15650
15754
|
return getExport(args, deps);
|
|
15755
|
+
case "democut_download_export":
|
|
15756
|
+
return downloadExport(args, deps);
|
|
15651
15757
|
case "democut_make_thumbnails":
|
|
15652
15758
|
return makeThumbnails(args, deps);
|
|
15653
15759
|
case "democut_select_thumbnail":
|