democut 1.0.64 → 1.0.66

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 (2) hide show
  1. package/dist/cli.js +100 -1
  2. 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.64";
6919
+ var VERSION = "1.0.66";
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",
@@ -15365,6 +15427,41 @@ function needExportNumber(a) {
15365
15427
  }
15366
15428
  return Number(a.number);
15367
15429
  }
15430
+ function downloadExport(a = {}, deps = {}) {
15431
+ return guarded(READ_ONLY, async () => {
15432
+ const slug = needSlug(a);
15433
+ if (typeof slug !== "string") return slug;
15434
+ const number3 = needExportNumber(a);
15435
+ if (typeof number3 !== "number") return number3;
15436
+ const kind = a.kind ?? "video";
15437
+ const base = resolveBaseUrl(deps.baseUrl);
15438
+ const q = new URLSearchParams({ kind });
15439
+ let out4;
15440
+ try {
15441
+ out4 = await apiRequest(base, projectPath(slug, `/exports/${number3}/download?${q}`), {}, deps);
15442
+ } catch (e) {
15443
+ if (e instanceof ApiError && e.status === 404 && e.code === `HTTP_404`) {
15444
+ return {
15445
+ isError: true,
15446
+ 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)."
15447
+ };
15448
+ }
15449
+ throw e;
15450
+ }
15451
+ if (a.output_path) {
15452
+ await (deps.downloadImpl ? deps.downloadImpl(out4.url, a.output_path) : saveUrlToFile(out4.url, a.output_path, deps.fetchImpl ?? fetch));
15453
+ 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 }) };
15454
+ }
15455
+ return {
15456
+ text: [
15457
+ `\uC644\uC131\uBCF8 #${number3} ${kind} \uB0B4\uB824\uBC1B\uAE30 \uC8FC\uC18C (\uB9CC\uB8CC ${out4.expires_at}):`,
15458
+ out4.url,
15459
+ "output_path \uB97C \uC8FC\uBA74 \uC774 \uD30C\uC77C\uC744 \uADF8 \uACBD\uB85C\uC5D0 \uBC14\uB85C \uC800\uC7A5\uD569\uB2C8\uB2E4."
15460
+ ].join("\n"),
15461
+ structured: callableStructured(out4)
15462
+ };
15463
+ });
15464
+ }
15368
15465
  function getExport(a = {}, deps = {}) {
15369
15466
  return guarded(READ_ONLY, async () => {
15370
15467
  const slug = needSlug(a);
@@ -15648,6 +15745,8 @@ function dispatch(name, args, deps = {}) {
15648
15745
  return listExports(args, deps);
15649
15746
  case "democut_get_export":
15650
15747
  return getExport(args, deps);
15748
+ case "democut_download_export":
15749
+ return downloadExport(args, deps);
15651
15750
  case "democut_make_thumbnails":
15652
15751
  return makeThumbnails(args, deps);
15653
15752
  case "democut_select_thumbnail":
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "democut",
3
- "version": "1.0.64",
3
+ "version": "1.0.66",
4
4
  "description": "DemoCut 에이전트 CLI — device flow 로그인(RFC 8628) + 영상 생성",
5
5
  "license": "MIT",
6
6
  "author": "InfoGrab",