democut 1.0.112 → 1.0.114

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 +266 -2
  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.112";
6919
+ var VERSION = "1.0.114";
6920
6920
 
6921
6921
  // src/device-flow.ts
6922
6922
  var DeviceFlowError = class extends Error {
@@ -7827,7 +7827,7 @@ var GENERATED_TOOLS = [
7827
7827
  },
7828
7828
  {
7829
7829
  "name": "democut_upload_asset",
7830
- "description": "\uC774\uBBF8\uC9C0\xB7\uB098\uB808\uC774\uC158 wav\xB7\uC6D0\uBCF8 \uC601\uC0C1\xB7tsx\xB7\uC644\uC131 \uCEF7 \uC601\uC0C1\uC744 \uC790\uC0B0\uC73C\uB85C \uC62C\uB9B0\uB2E4(0\uC6D0). \uC751\uB2F5\uC758 state \uAC00 ready \uC5EC\uC57C spec \uC5D0 \uC4F8 \uC218 \uC788\uB2E4. \uB2E4\uC74C \uD638\uCD9C: democut_estimate_cuts, democut_import_cut.",
7830
+ "description": "\uC774\uBBF8\uC9C0\xB7\uB098\uB808\uC774\uC158 wav\xB7\uC6D0\uBCF8 \uC601\uC0C1\xB7tsx\xB7\uC644\uC131 \uCEF7 \uC601\uC0C1\uC744 \uC790\uC0B0\uC73C\uB85C \uC62C\uB9B0\uB2E4(0\uC6D0). \uC751\uB2F5\uC758 state \uAC00 ready \uC5EC\uC57C spec \uC5D0 \uC4F8 \uC218 \uC788\uB2E4. \uC6D0\uACA9 \uC5F0\uACB0\uC5D0\uC11C \uACF5\uAC1C https \uC8FC\uC18C \uC5C6\uC774 \uB85C\uCEEC \uD30C\uC77C\uB9CC \uC788\uC73C\uBA74 democut_create_upload_url \uB85C \uC5C5\uB85C\uB4DC \uC8FC\uC18C\uB97C \uBC1B\uC544 \uC178\uC5D0\uC11C \uC9C1\uC811 \uC62C\uB824\uB77C. \uB2E4\uC74C \uD638\uCD9C: democut_estimate_cuts, democut_import_cut.",
7831
7831
  "inputSchema": {
7832
7832
  "type": "object",
7833
7833
  "properties": {
@@ -8562,6 +8562,82 @@ var GENERATED_TOOLS = [
8562
8562
  "openWorldHint": false
8563
8563
  }
8564
8564
  },
8565
+ {
8566
+ "name": "democut_create_upload_url",
8567
+ "description": '\uB85C\uCEEC \uD30C\uC77C\uB9CC \uC788\uACE0 \uACF5\uAC1C https \uC8FC\uC18C\uAC00 \uC5C6\uC744 \uB54C(\uC6D0\uACA9 \uC5F0\uACB0) \uC5C5\uB85C\uB4DC \uC8FC\uC18C\uB97C \uBC1B\uB294\uB2E4(0\uC6D0). \uC751\uB2F5\uC758 upload_url \uB85C **15\uBD84 \uC548\uC5D0** \uC178\uC5D0\uC11C `curl -sS -T <\uD30C\uC77C> "<upload_url>"` \uCC98\uB7FC \uBCF8\uBB38\uC744 PUT \uD558\uBA74 \uADF8 \uC751\uB2F5(\uB610\uB294 democut_get_asset)\uC758 state \uAC00 ready \uAC00 \uB418\uACE0 \uADF8 asset_id \uB97C spec \uC5D0 \uC4F8 \uC218 \uC788\uB2E4. \uC8FC\uC18C\uB294 \uD55C \uBC88\uB9CC \uC4F8 \uC218 \uC788\uACE0(\uB2E4\uC2DC \uC62C\uB9AC\uB824\uBA74 \uC0C8\uB85C \uBC1B\uB294\uB2E4) \uBCF8\uBB38\uC740 \uC751\uB2F5\uC758 max_bytes \uAE4C\uC9C0\uB2E4. \uC178\uC774 \uC5C6\uC73C\uBA74 democut_upload_asset \uC758 source_url \uC744 \uC4F4\uB2E4. \uB2E4\uC74C \uD638\uCD9C: democut_get_asset.',
8568
+ "inputSchema": {
8569
+ "type": "object",
8570
+ "properties": {
8571
+ "kind": {
8572
+ "enum": [
8573
+ "image",
8574
+ "video",
8575
+ "audio",
8576
+ "subtitle",
8577
+ "code",
8578
+ "archive"
8579
+ ],
8580
+ "type": "string"
8581
+ },
8582
+ "project_slug": {
8583
+ "anyOf": [
8584
+ {
8585
+ "type": "string"
8586
+ },
8587
+ {
8588
+ "type": "null"
8589
+ }
8590
+ ],
8591
+ "default": null
8592
+ },
8593
+ "filename": {
8594
+ "anyOf": [
8595
+ {
8596
+ "type": "string"
8597
+ },
8598
+ {
8599
+ "type": "null"
8600
+ }
8601
+ ],
8602
+ "default": null
8603
+ }
8604
+ },
8605
+ "required": [
8606
+ "kind"
8607
+ ],
8608
+ "additionalProperties": false
8609
+ },
8610
+ "outputSchema": {
8611
+ "type": "object",
8612
+ "properties": {
8613
+ "asset": {},
8614
+ "upload_url": {
8615
+ "type": "string"
8616
+ },
8617
+ "method": {
8618
+ "type": "string"
8619
+ },
8620
+ "expires_at": {
8621
+ "type": "string"
8622
+ },
8623
+ "max_bytes": {
8624
+ "type": "integer"
8625
+ }
8626
+ },
8627
+ "required": [
8628
+ "asset",
8629
+ "upload_url",
8630
+ "expires_at",
8631
+ "max_bytes"
8632
+ ]
8633
+ },
8634
+ "annotations": {
8635
+ "readOnlyHint": false,
8636
+ "destructiveHint": false,
8637
+ "idempotentHint": false,
8638
+ "openWorldHint": false
8639
+ }
8640
+ },
8565
8641
  {
8566
8642
  "name": "democut_set_cut_image",
8567
8643
  "description": "\uC62C\uB9B0 \uC774\uBBF8\uC9C0 \uC790\uC0B0\uC744 \uCEF7 \uC774\uBBF8\uC9C0 \uD6C4\uBCF4\uB85C \uBD99\uC778\uB2E4(0\uC6D0). AI \uC601\uC0C1 \uCEF7\uC758 \uCCAB \uC7A5\uC774\uBA74 \uADF8 \uADF8\uB9BC\uC774 \uCCAB \uC7A5\uBA74\uC73C\uB85C \uCD08\uC548(draft_spec.image_asset_id)\uC5D0 \uC801\uD78C\uB2E4.",
@@ -11530,6 +11606,117 @@ var GENERATED_TOOLS = [
11530
11606
  "openWorldHint": false
11531
11607
  }
11532
11608
  },
11609
+ {
11610
+ "name": "democut_set_cuts_hook_text",
11611
+ "description": "\uC138\uB85C \uD504\uB85C\uC81D\uD2B8\uC5D0\uC11C \uC5EC\uB7EC \uCEF7\uC758 \uD6C4\uD0B9 \uBB38\uAD6C(hook_text)\uB97C \uD55C \uBC88\uC5D0 \uAC19\uC740 \uAE00\uB85C \uBC14\uAFBC\uB2E4(0\uC6D0, \uB2E4\uC2DC \uB9CC\uB4E4\uC9C0 \uC54A\uB294\uB2E4). **\uBCF5\uC0AC**\uB77C \uBC14\uAFBC \uB4A4 \uCEF7\uB9C8\uB2E4 \uB530\uB85C \uACE0\uCE60 \uC218 \uC788\uB2E4. cut_ids \uB97C \uBE44\uC6B0\uBA74 \uC601\uC0C1 \uCEF7 \uC804\uBD80, hook_text=null \uC774\uBA74 \uC9C0\uC6B4\uB2E4. \uCEF7\uB9C8\uB2E4 \uB2E4\uB978 \uAE00\uC740 texts {cut_id: \uAE00|null} \uD55C \uBC88. \uD55C \uCEF7\uB9CC\uC774\uBA74 democut_put_cut_draft. rev \uC624\uB978\uB2E4(If-Match).",
11612
+ "inputSchema": {
11613
+ "type": "object",
11614
+ "properties": {
11615
+ "slug": {
11616
+ "type": "string",
11617
+ "description": "\uD504\uB85C\uC81D\uD2B8 \uC2AC\uB7EC\uADF8(democut_list_projects)"
11618
+ },
11619
+ "hook_text": {
11620
+ "anyOf": [
11621
+ {
11622
+ "maxLength": 60,
11623
+ "type": "string"
11624
+ },
11625
+ {
11626
+ "type": "null"
11627
+ }
11628
+ ],
11629
+ "default": null,
11630
+ "description": "\uB123\uC744 \uD6C4\uD0B9 \uBB38\uAD6C(\uC904\uBC14\uAFC8 \\n, 2\uC904\uAE4C\uC9C0). null \uB610\uB294 \uBE48 \uAE00\uC774\uBA74 \uADF8 \uCEF7\uB4E4\uC758 \uBB38\uAD6C\uB97C \uC9C0\uC6B4\uB2E4. texts \uC640 \uD568\uAED8 \uC4F0\uC9C0 \uC54A\uB294\uB2E4"
11631
+ },
11632
+ "cut_ids": {
11633
+ "anyOf": [
11634
+ {
11635
+ "items": {
11636
+ "type": "string"
11637
+ },
11638
+ "maxItems": 200,
11639
+ "minItems": 1,
11640
+ "type": "array"
11641
+ },
11642
+ {
11643
+ "type": "null"
11644
+ }
11645
+ ],
11646
+ "default": null,
11647
+ "description": "hook_text \uB97C \uB123\uC744 \uCEF7 id. \uBE44\uC6B0\uBA74 \uC774 \uD504\uB85C\uC81D\uD2B8\uC758 \uC601\uC0C1 \uCEF7 \uC804\uBD80(\uC774\uBBF8\uC9C0 \uCEF7 \uC81C\uC678)"
11648
+ },
11649
+ "texts": {
11650
+ "anyOf": [
11651
+ {
11652
+ "additionalProperties": {
11653
+ "anyOf": [
11654
+ {
11655
+ "maxLength": 60,
11656
+ "type": "string"
11657
+ },
11658
+ {
11659
+ "type": "null"
11660
+ }
11661
+ ]
11662
+ },
11663
+ "maxProperties": 200,
11664
+ "minProperties": 1,
11665
+ "type": "object"
11666
+ },
11667
+ {
11668
+ "type": "null"
11669
+ }
11670
+ ],
11671
+ "default": null,
11672
+ "description": "\uCEF7\uB9C8\uB2E4 \uB2E4\uB978 \uAE00 {cut_id: \uAE00|null} \u2014 hook_text\xB7cut_ids \uB300\uC2E0. null \uC774\uBA74 \uADF8 \uCEF7\uC758 \uBB38\uAD6C\uB97C \uC9C0\uC6B4\uB2E4"
11673
+ },
11674
+ "rev": {
11675
+ "type": "integer",
11676
+ "minimum": 0,
11677
+ "description": "\uD604\uC7AC rev(democut_get_storyboard \uC758 \uAC12 \uADF8\uB300\uB85C). \uADF8 \uC0AC\uC774 \uBC14\uB00C\uC5C8\uC73C\uBA74 409 REV_MISMATCH"
11678
+ }
11679
+ },
11680
+ "required": [
11681
+ "slug",
11682
+ "rev"
11683
+ ],
11684
+ "additionalProperties": false
11685
+ },
11686
+ "outputSchema": {
11687
+ "type": "object",
11688
+ "properties": {
11689
+ "rev": {
11690
+ "type": "integer"
11691
+ },
11692
+ "order": {
11693
+ "type": "array"
11694
+ },
11695
+ "cuts": {
11696
+ "type": "array"
11697
+ },
11698
+ "start_cut_id": {},
11699
+ "chains": {
11700
+ "type": "array"
11701
+ },
11702
+ "usage_bytes": {
11703
+ "type": "integer"
11704
+ },
11705
+ "next_calls": {
11706
+ "type": "array"
11707
+ }
11708
+ },
11709
+ "required": [
11710
+ "rev"
11711
+ ]
11712
+ },
11713
+ "annotations": {
11714
+ "readOnlyHint": false,
11715
+ "destructiveHint": false,
11716
+ "idempotentHint": true,
11717
+ "openWorldHint": false
11718
+ }
11719
+ },
11533
11720
  {
11534
11721
  "name": "democut_get_silence",
11535
11722
  "description": "\uC120\uD0DD\uB41C \uBC84\uC804\uC758 \uBB34\uC74C \uAD6C\uAC04 \uBBF8\uB9AC\uBCF4\uAE30(threshold_ms).",
@@ -13221,6 +13408,12 @@ var TOOL_META = {
13221
13408
  "method": "GET",
13222
13409
  "path": "/api/assets/{asset_id}"
13223
13410
  },
13411
+ "democut_create_upload_url": {
13412
+ "cost": "none",
13413
+ "group": "core",
13414
+ "method": "POST",
13415
+ "path": "/api/assets/upload-url"
13416
+ },
13224
13417
  "democut_set_cut_image": {
13225
13418
  "cost": "none",
13226
13419
  "group": "images",
@@ -13455,6 +13648,12 @@ var TOOL_META = {
13455
13648
  "method": "PUT",
13456
13649
  "path": "/api/projects/{slug}/cuts/enabled"
13457
13650
  },
13651
+ "democut_set_cuts_hook_text": {
13652
+ "cost": "none",
13653
+ "group": "storyboard",
13654
+ "method": "PUT",
13655
+ "path": "/api/projects/{slug}/cuts/hook-text"
13656
+ },
13458
13657
  "democut_get_silence": {
13459
13658
  "cost": "none",
13460
13659
  "group": "storyboard",
@@ -14601,6 +14800,8 @@ function getAsset(a = {}, deps = {}) {
14601
14800
  if (view.download_url) {
14602
14801
  lines.push(`\uB2E4\uC6B4\uB85C\uB4DC: ${view.download_url} (\uC11C\uBA85 URL \u2014 \uB9CC\uB8CC\uB418\uBA74 \uC774 \uB3C4\uAD6C\uB97C \uB2E4\uC2DC \uBD80\uB974\uC138\uC694)`);
14603
14802
  }
14803
+ } else if (view.state === "pending" && view.origin === "upload") {
14804
+ lines.push("\uC544\uC9C1 \uBCF8\uBB38\uC774 \uC62C\uB77C\uC624\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4 \u2014 democut_create_upload_url \uC774 \uC900 \uC8FC\uC18C\uB85C PUT \uD588\uB294\uC9C0 \uD655\uC778\uD558\uC138\uC694.");
14604
14805
  } else if (view.state === "pending") {
14605
14806
  lines.push("\uC544\uC9C1 \uAC00\uC838\uC624\uB294 \uC911\uC785\uB2C8\uB2E4 \u2014 \uC7A0\uC2DC \uB4A4 \uB2E4\uC2DC \uBD80\uB974\uC138\uC694.");
14606
14807
  } else {
@@ -14610,6 +14811,28 @@ function getAsset(a = {}, deps = {}) {
14610
14811
  return { text: lines.join("\n"), structured: callableStructured(view) };
14611
14812
  });
14612
14813
  }
14814
+ function createUploadUrl(a = {}, deps = {}) {
14815
+ return guarded(READ_ONLY, async () => {
14816
+ if (!a.kind) return { isError: true, text: "kind \uAC00 \uD544\uC694\uD569\uB2C8\uB2E4 (image\xB7audio\xB7video\xB7subtitle\xB7code \uB4F1)." };
14817
+ const base = resolveBaseUrl(deps.baseUrl);
14818
+ const out4 = await apiRequest(
14819
+ base,
14820
+ "/api/assets/upload-url",
14821
+ { method: "POST", body: { kind: a.kind, project_slug: a.project_slug, filename: a.filename } },
14822
+ deps
14823
+ );
14824
+ return {
14825
+ text: [
14826
+ `\uC5C5\uB85C\uB4DC \uC790\uB9AC\uB97C \uB9CC\uB4E4\uC5C8\uC2B5\uB2C8\uB2E4 \u2014 asset_id=${out4.asset.id} (${out4.asset.kind}) state=${out4.asset.state}`,
14827
+ `upload_url: ${out4.upload_url}`,
14828
+ `method: ${out4.method} \xB7 expires_at: ${out4.expires_at} \xB7 max_bytes: ${out4.max_bytes}`,
14829
+ `\uC178\uC5D0\uC11C \uBCF8\uBB38\uC744 \uC62C\uB9AC\uC138\uC694: curl -sS -T <\uD30C\uC77C \uACBD\uB85C> "${out4.upload_url}"`,
14830
+ "\uC751\uB2F5(\uB610\uB294 democut_get_asset)\uC758 state \uAC00 ready \uBA74 \uC774 asset_id \uB97C spec \uC5D0 \uC4F0\uBA74 \uB429\uB2C8\uB2E4. \uC8FC\uC18C\uB294 \uD55C \uBC88\uB9CC \uC4F8 \uC218 \uC788\uACE0, \uB9CC\uB8CC\uB410\uAC70\uB098 \uB2E4\uC2DC \uC62C\uB9AC\uB824\uBA74 \uC774 \uB3C4\uAD6C\uB97C \uB2E4\uC2DC \uBD80\uB974\uC138\uC694."
14831
+ ].join("\n"),
14832
+ structured: callableStructured(out4)
14833
+ };
14834
+ });
14835
+ }
14613
14836
  function estimateCuts(a = {}, deps = {}) {
14614
14837
  return guarded(READ_ONLY, async () => {
14615
14838
  const slug = needSlug(a);
@@ -15173,6 +15396,43 @@ function setCutsEnabled(a = {}, deps = {}) {
15173
15396
  return { text: lines.join("\n"), structured: callableStructured(board) };
15174
15397
  });
15175
15398
  }
15399
+ function setCutsHookText(a = {}, deps = {}) {
15400
+ return guarded(READ_ONLY, async () => {
15401
+ const slug = needSlug(a);
15402
+ if (typeof slug !== "string") return slug;
15403
+ if (a.hook_text === void 0 && a.texts === void 0) {
15404
+ return { isError: true, text: "hook_text(\uC9C0\uC6B0\uB824\uBA74 null) \uB610\uB294 texts {cut_id: \uAE00|null} \uAC00 \uD544\uC694\uD569\uB2C8\uB2E4." };
15405
+ }
15406
+ if (a.texts !== void 0 && (a.hook_text !== void 0 || a.cut_ids !== void 0)) {
15407
+ return { isError: true, text: "texts \uB294 hook_text\xB7cut_ids \uC640 \uD568\uAED8 \uC4F8 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 \u2014 \uB458 \uC911 \uD558\uB098\uB9CC \uC8FC\uC138\uC694." };
15408
+ }
15409
+ if (a.cut_ids !== void 0 && (!Array.isArray(a.cut_ids) || a.cut_ids.length === 0)) {
15410
+ return { isError: true, text: "cut_ids \uB294 \uBE44\uC6B0\uAC70\uB098(\uC601\uC0C1 \uCEF7 \uC804\uBD80) \uCEF7 id \uBC30\uC5F4\uB85C \uC8FC\uC138\uC694." };
15411
+ }
15412
+ if (a.rev === void 0 || a.rev === null) {
15413
+ return {
15414
+ isError: true,
15415
+ text: callableToolNames("rev \uAC00 \uD544\uC694\uD569\uB2C8\uB2E4 \u2014 get_storyboard \uB85C \uD604\uC7AC rev \uB97C \uC77D\uC5B4 \uADF8\uB300\uB85C \uB123\uC73C\uC138\uC694.")
15416
+ };
15417
+ }
15418
+ const base = resolveBaseUrl(deps.baseUrl);
15419
+ const board = await apiRequest(
15420
+ base,
15421
+ projectPath(slug, "/cuts/hook-text"),
15422
+ {
15423
+ method: "PUT",
15424
+ body: a.texts !== void 0 ? { texts: a.texts } : { hook_text: a.hook_text, ...a.cut_ids ? { cut_ids: a.cut_ids } : {} },
15425
+ headers: { "If-Match": String(a.rev) }
15426
+ },
15427
+ deps
15428
+ );
15429
+ const head = a.texts !== void 0 ? `\uCEF7 ${Object.keys(a.texts).length}\uAC1C\uC758 \uD6C4\uD0B9 \uBB38\uAD6C\uB97C \uCEF7\uB9C8\uB2E4 \uBC14\uAFE8\uC2B5\uB2C8\uB2E4` : `${a.cut_ids ? `\uCEF7 ${a.cut_ids.length}\uAC1C` : "\uC601\uC0C1 \uCEF7 \uC804\uBD80"}\uC758 ${a.hook_text ? `\uD6C4\uD0B9 \uBB38\uAD6C\uB97C \u300C${a.hook_text}\u300D \uB85C \uBC14\uAFE8\uC2B5\uB2C8\uB2E4` : "\uD6C4\uD0B9 \uBB38\uAD6C\uB97C \uC9C0\uC6E0\uC2B5\uB2C8\uB2E4"}`;
15430
+ const lines = [`${head} \u2014 rev ${board.rev}(0\uC6D0, \uC644\uC131\uBCF8\uC744 \uB2E4\uC2DC \uB9CC\uB4E4\uBA74 \uBC18\uC601)`];
15431
+ if (board.next_calls?.length)
15432
+ lines.push(callableToolNames(`\uB2E4\uC74C \uD638\uCD9C: ${board.next_calls.join(", ")}`));
15433
+ return { text: lines.join("\n"), structured: callableStructured(board) };
15434
+ });
15435
+ }
15176
15436
  function setCutLink(a = {}, deps = {}) {
15177
15437
  return guarded(READ_ONLY, async () => {
15178
15438
  const slug = needSlug(a);
@@ -16536,6 +16796,8 @@ function dispatch(name, args, deps = {}) {
16536
16796
  return uploadAsset(args, deps);
16537
16797
  case "democut_get_asset":
16538
16798
  return getAsset(args, deps);
16799
+ case "democut_create_upload_url":
16800
+ return createUploadUrl(args, deps);
16539
16801
  case "democut_estimate_cuts":
16540
16802
  return estimateCuts(args, deps);
16541
16803
  case "democut_make_cuts":
@@ -16568,6 +16830,8 @@ function dispatch(name, args, deps = {}) {
16568
16830
  return setCutLink(args, deps);
16569
16831
  case "democut_set_cuts_enabled":
16570
16832
  return setCutsEnabled(args, deps);
16833
+ case "democut_set_cuts_hook_text":
16834
+ return setCutsHookText(args, deps);
16571
16835
  case "democut_set_start_cut":
16572
16836
  return setStartCut(args, deps);
16573
16837
  case "democut_put_cut_draft":
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "democut",
3
- "version": "1.0.112",
3
+ "version": "1.0.114",
4
4
  "description": "DemoCut 에이전트 CLI — device flow 로그인(RFC 8628) + 영상 생성",
5
5
  "license": "MIT",
6
6
  "author": "InfoGrab",