democut 1.0.170 → 1.0.171

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 +214 -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.170";
6919
+ var VERSION = "1.0.171";
6920
6920
 
6921
6921
  // src/device-flow.ts
6922
6922
  var DeviceFlowError = class extends Error {
@@ -9348,6 +9348,7 @@ var GENERATED_TOOLS = [
9348
9348
  "ai_image",
9349
9349
  "character",
9350
9350
  "voice",
9351
+ "music",
9351
9352
  "subtitle",
9352
9353
  "motion",
9353
9354
  "agent",
@@ -11551,6 +11552,144 @@ var GENERATED_TOOLS = [
11551
11552
  "openWorldHint": false
11552
11553
  }
11553
11554
  },
11555
+ {
11556
+ "name": "democut_estimate_music",
11557
+ "description": "AI \uBC30\uACBD\uC74C\uC545 \uACAC\uC801(0\uC6D0). 5\uBD84 \uC0C1\uD55C\uC774\uACE0 \uC2E4\uC81C \uAE38\uC774\uB85C \uCC28\uC561\uC744 \uB3CC\uB824\uC900\uB2E4.",
11558
+ "inputSchema": {
11559
+ "type": "object",
11560
+ "properties": {
11561
+ "prompt": {
11562
+ "default": "",
11563
+ "description": "\uBD84\uC704\uAE30\xB7\uC7A5\uB974\xB7\uC545\uAE30\xB7\uBE60\uB974\uAE30",
11564
+ "maxLength": 2e3,
11565
+ "type": "string"
11566
+ },
11567
+ "instrumental": {
11568
+ "default": true,
11569
+ "description": "\uBCF4\uCEEC \uC5C6\uB294 \uC5F0\uC8FC\uACE1",
11570
+ "type": "boolean"
11571
+ }
11572
+ },
11573
+ "required": [],
11574
+ "additionalProperties": false
11575
+ },
11576
+ "outputSchema": {
11577
+ "type": "object",
11578
+ "properties": {
11579
+ "items": {
11580
+ "type": "array"
11581
+ },
11582
+ "notes": {
11583
+ "type": "array"
11584
+ },
11585
+ "total_krw": {
11586
+ "type": "integer"
11587
+ },
11588
+ "rate_version": {
11589
+ "type": "integer"
11590
+ },
11591
+ "balance_krw": {
11592
+ "type": "integer"
11593
+ },
11594
+ "balance_after_krw": {
11595
+ "type": "integer"
11596
+ },
11597
+ "can_afford": {
11598
+ "type": "boolean"
11599
+ },
11600
+ "mock": {
11601
+ "type": "boolean"
11602
+ },
11603
+ "provisional": {
11604
+ "type": "boolean"
11605
+ }
11606
+ },
11607
+ "required": [
11608
+ "total_krw",
11609
+ "rate_version",
11610
+ "balance_krw",
11611
+ "balance_after_krw",
11612
+ "can_afford"
11613
+ ]
11614
+ },
11615
+ "annotations": {
11616
+ "readOnlyHint": false,
11617
+ "destructiveHint": false,
11618
+ "idempotentHint": false,
11619
+ "openWorldHint": false
11620
+ }
11621
+ },
11622
+ {
11623
+ "name": "democut_make_music",
11624
+ "description": "\uACE1\uC744 \uB9CC\uB4E0\uB2E4(\uCCAD\uAD6C\xB7\uC0C1\uD55C). \uACB0\uACFC\uC758 asset_id \uB97C democut_set_cut_bgm \uC5D0 \uC4F4\uB2E4. \uB3C8\uC774 \uB098\uAC00\uB294 \uB3C4\uAD6C\uB2E4 \u2014 \uC9DD\uC774 \uB418\uB294 estimate \uB3C4\uAD6C\uC758 \uAE08\uC561\uC5D0 \uC0AC\uC6A9\uC790\uAC00 \uB3D9\uC758\uD55C \uB4A4 confirmed_*_krw\xB7rate_version \uC744 \uADF8\uB300\uB85C \uB123\uC5B4\uB77C. \uC2E4\uD328\uD574\uB3C4 \uC7AC\uC81C\uCD9C\uD558\uC9C0 \uB9C8\uB77C(\uAC19\uC740 spec \uC774 \uD65C\uC131\uC774\uBA74 \uAE30\uC874 \uC7A1\uC744 \uB3CC\uB824\uC900\uB2E4 \u2014 deduplicated=true). \uB2E4\uC74C \uD638\uCD9C: democut_wait_jobs.",
11625
+ "inputSchema": {
11626
+ "type": "object",
11627
+ "properties": {
11628
+ "prompt": {
11629
+ "default": "",
11630
+ "description": "\uBD84\uC704\uAE30\xB7\uC7A5\uB974\xB7\uC545\uAE30\xB7\uBE60\uB974\uAE30",
11631
+ "maxLength": 2e3,
11632
+ "type": "string"
11633
+ },
11634
+ "instrumental": {
11635
+ "default": true,
11636
+ "description": "\uBCF4\uCEEC \uC5C6\uB294 \uC5F0\uC8FC\uACE1",
11637
+ "type": "boolean"
11638
+ },
11639
+ "title": {
11640
+ "default": "",
11641
+ "maxLength": 100,
11642
+ "type": "string"
11643
+ },
11644
+ "project_slug": {
11645
+ "anyOf": [
11646
+ {
11647
+ "type": "string"
11648
+ },
11649
+ {
11650
+ "type": "null"
11651
+ }
11652
+ ],
11653
+ "default": null,
11654
+ "description": "\uADF8 \uD504\uB85C\uC81D\uD2B8 \uACE1 \uBAA9\uB85D\uC5D0\uB3C4 \uB123\uB294\uB2E4"
11655
+ },
11656
+ "confirmed_cost_krw": {
11657
+ "minimum": 0,
11658
+ "type": "integer"
11659
+ },
11660
+ "rate_version": {
11661
+ "minimum": 1,
11662
+ "type": "integer"
11663
+ }
11664
+ },
11665
+ "required": [
11666
+ "confirmed_cost_krw",
11667
+ "rate_version"
11668
+ ],
11669
+ "additionalProperties": false
11670
+ },
11671
+ "outputSchema": {
11672
+ "type": "object",
11673
+ "properties": {
11674
+ "job_id": {
11675
+ "type": "string"
11676
+ },
11677
+ "quote": {},
11678
+ "next_calls": {
11679
+ "type": "array"
11680
+ }
11681
+ },
11682
+ "required": [
11683
+ "job_id"
11684
+ ]
11685
+ },
11686
+ "annotations": {
11687
+ "readOnlyHint": false,
11688
+ "destructiveHint": false,
11689
+ "idempotentHint": false,
11690
+ "openWorldHint": false
11691
+ }
11692
+ },
11554
11693
  {
11555
11694
  "name": "democut_reorder_cuts",
11556
11695
  "description": "\uC5F0\uACB0 \uC21C\uC11C\uB97C \uD1B5\uC9F8\uB85C \uB2E4\uC2DC \uC4F4\uB2E4(If-Match rev). \uBE60\uC9C4 \uCEF7\uC740 \uB5BC\uC5B4 \uB454 \uCEF7\uC774 \uB41C\uB2E4. \uB2E4\uC74C \uD638\uCD9C: democut_make_export.",
@@ -14024,6 +14163,18 @@ var TOOL_META = {
14024
14163
  "method": "DELETE",
14025
14164
  "path": "/api/projects/{slug}/music/{asset_id}"
14026
14165
  },
14166
+ "democut_estimate_music": {
14167
+ "cost": "quote",
14168
+ "group": "storyboard",
14169
+ "method": "POST",
14170
+ "path": "/api/music/estimate"
14171
+ },
14172
+ "democut_make_music": {
14173
+ "cost": "charge",
14174
+ "group": "storyboard",
14175
+ "method": "POST",
14176
+ "path": "/api/music/generate"
14177
+ },
14027
14178
  "democut_reorder_cuts": {
14028
14179
  "cost": "none",
14029
14180
  "group": "storyboard",
@@ -16832,6 +16983,64 @@ function makeCharacterPhoto(a = {}, deps = {}) {
16832
16983
  };
16833
16984
  });
16834
16985
  }
16986
+ function musicBody(a) {
16987
+ return {
16988
+ prompt: (a.prompt ?? "").trim(),
16989
+ ...typeof a.instrumental === "boolean" ? { instrumental: a.instrumental } : {}
16990
+ };
16991
+ }
16992
+ function estimateMusic(a = {}, deps = {}) {
16993
+ return guarded(READ_ONLY, async () => {
16994
+ if (!(a.prompt ?? "").trim()) return { isError: true, text: "prompt(\uACE1 \uC124\uBA85)\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4." };
16995
+ const base = resolveBaseUrl(deps.baseUrl);
16996
+ const out4 = await apiRequest(base, "/api/music/estimate", { method: "POST", body: musicBody(a) }, deps);
16997
+ const item = out4.items?.[0];
16998
+ if (!item || item.blocked_reason) {
16999
+ return {
17000
+ text: `\uC9C0\uAE08\uC740 AI \uC74C\uC545\uC744 \uACAC\uC801\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 \u2014 ${item?.blocked_reason ?? "\uACAC\uC801\uD560 \uD56D\uBAA9\uC774 \uC5C6\uC2B5\uB2C8\uB2E4"}`,
17001
+ structured: callableStructured(out4)
17002
+ };
17003
+ }
17004
+ const lines = [
17005
+ `AI \uC74C\uC545 \uACAC\uC801 (\uC694\uC728 v${out4.rate_version}) \u2014 \uBD80\uC791\uC6A9\uB3C4 \uACFC\uAE08\uB3C4 \uC5C6\uC2B5\uB2C8\uB2E4`,
17006
+ ` ${krw(item.total_krw ?? 0)} \u2014 5\uBD84 \uC0C1\uD55C\uC785\uB2C8\uB2E4. \uAE38\uC774\uB294 \uBAA8\uB378\uC774 \uC815\uD558\uACE0, \uBC1B\uC740 \uACE1 \uAE38\uC774\uB9CC\uD07C \uC815\uC0B0\uD574 \uCC28\uC561\uC744 \uB3CC\uB824\uB4DC\uB9BD\uB2C8\uB2E4.`,
17007
+ `\uC794\uC561 ${krw(out4.balance_krw)} \u2192 \uB0A8\uC744 \uC794\uC561 ${krw(out4.balance_after_krw)}`,
17008
+ out4.can_afford ? "\uCDA9\uBD84\uD569\uB2C8\uB2E4." : "\u26A0\uFE0F \uC794\uC561\uC774 \uBD80\uC871\uD569\uB2C8\uB2E4 \u2014 \uC6CC\uD06C\uC2A4\uD398\uC774\uC2A4 \uAD00\uB9AC\uC790\uC5D0\uAC8C \uCDA9\uC804\uC744 \uC694\uCCAD\uD558\uC138\uC694."
17009
+ ];
17010
+ if (out4.mock) lines.push("(mock \uB2E8\uAC00\uC785\uB2C8\uB2E4 \u2014 \uC2E4\uC81C \uCCAD\uAD6C\uC640 \uB2E4\uB97C \uC218 \uC788\uC2B5\uB2C8\uB2E4.)");
17011
+ return { text: lines.join("\n"), structured: callableStructured(out4) };
17012
+ });
17013
+ }
17014
+ function makeMusic(a = {}, deps = {}) {
17015
+ return guarded(SUBMITTING, async () => {
17016
+ if (!(a.prompt ?? "").trim()) return { isError: true, text: "prompt(\uACE1 \uC124\uBA85)\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4." };
17017
+ const base = resolveBaseUrl(deps.baseUrl);
17018
+ const out4 = await apiRequest(
17019
+ base,
17020
+ "/api/music/generate",
17021
+ {
17022
+ method: "POST",
17023
+ body: {
17024
+ ...musicBody(a),
17025
+ ...a.title ? { title: a.title } : {},
17026
+ ...a.project_slug ? { project_slug: a.project_slug } : {},
17027
+ // ★ 동의는 **명시**다 — 없으면 서버가 0원 동의로 읽고 409 로 거부한다(그것이 옳다).
17028
+ confirmed_cost_krw: a.confirmed_cost_krw ?? 0,
17029
+ rate_version: a.rate_version
17030
+ }
17031
+ },
17032
+ deps
17033
+ );
17034
+ return {
17035
+ text: [
17036
+ `\uACE1\uC744 \uB9CC\uB4DC\uB294 \uC911\uC785\uB2C8\uB2E4 \u2014 ${out4.job_id}`,
17037
+ `\uCCAD\uAD6C ${krw(out4.quote?.total_krw ?? 0)} \u2014 5\uBD84 \uC0C1\uD55C\uC785\uB2C8\uB2E4. \uBC1B\uC740 \uACE1 \uAE38\uC774\uB9CC\uD07C \uC815\uC0B0\uD574 \uCC28\uC561\uC744 \uB3CC\uB824\uB4DC\uB9BD\uB2C8\uB2E4.`,
17038
+ "democut_wait_jobs \uB85C \uB05D\uB098\uBA74 \uACB0\uACFC\uC758 asset_id \uAC00 \uACE1\uC785\uB2C8\uB2E4 \u2014 democut_set_cut_bgm \uC5D0 \uADF8\uB300\uB85C \uC4F0\uC138\uC694." + (a.project_slug ? " \uADF8 \uD504\uB85C\uC81D\uD2B8\uC758 \uACE1 \uBAA9\uB85D\uC5D0\uB3C4 \uB4E4\uC5B4\uAC11\uB2C8\uB2E4." : "")
17039
+ ].join("\n"),
17040
+ structured: callableStructured(out4)
17041
+ };
17042
+ });
17043
+ }
16835
17044
  function selectCharacterPhoto(a = {}, deps = {}) {
16836
17045
  return guarded(READ_ONLY, async () => {
16837
17046
  const id = (a.character_id ?? "").trim();
@@ -17636,6 +17845,10 @@ function dispatch(name, args, deps = {}) {
17636
17845
  return estimateCharacterPhoto(args, deps);
17637
17846
  case "democut_make_character_photo":
17638
17847
  return makeCharacterPhoto(args, deps);
17848
+ case "democut_estimate_music":
17849
+ return estimateMusic(args, deps);
17850
+ case "democut_make_music":
17851
+ return makeMusic(args, deps);
17639
17852
  case "democut_delete_character_photo":
17640
17853
  return deleteCharacterPhoto(args, deps);
17641
17854
  case "democut_delete_character":
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "democut",
3
- "version": "1.0.170",
3
+ "version": "1.0.171",
4
4
  "description": "DemoCut 에이전트 CLI — device flow 로그인(RFC 8628) + 영상 생성",
5
5
  "license": "MIT",
6
6
  "author": "InfoGrab",