democut 1.0.52 → 1.0.54

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 +3 -481
  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.52";
6919
+ var VERSION = "1.0.54";
6920
6920
 
6921
6921
  // src/device-flow.ts
6922
6922
  var DeviceFlowError = class extends Error {
@@ -7753,7 +7753,7 @@ var GENERATED_TOOLS = [
7753
7753
  },
7754
7754
  {
7755
7755
  "name": "democut_get_options",
7756
- "description": "\uC774 \uD504\uB85C\uC81D\uD2B8\uC5D0\uC11C \uC4F8 \uC218 \uC788\uB294 \uBC29\uC2DD\xB7\uC9C4\uD589(host)\xB7\uD544\uC218 \uD544\uB4DC\xB7BYO \uD544\uB4DC\xB7\uBCF4\uC774\uC2A4\xB7\uC544\uBC14\uD0C0\xB7\uBC30\uACBD\xB7**\uBAA8\uC158\uADF8\uB798\uD53D \uD654\uBA74 \uAD6C\uC131**\xB7\uB2E8\uAC00\xB7\uC794\uC561. recommended_mode=ai_video. layout_patterns[] \uB294 motion_graphic \uC758 layout_pattern \uC774 \uBC1B\uB294 \uAC12\uC774\uACE0 \uAC01 \uD56D\uBAA9\uC774 \uC5B8\uC81C \uC4F0\uB294\uC9C0(when)\uB97C \uB9D0\uD55C\uB2E4 \u2014 \uBE44\uC6CC \uB450\uBA74 \uB300\uC0AC\uC5D0 \uB9DE\uB294 \uAD6C\uC131\uC744 \uC11C\uBC84\uAC00 \uACE0\uB978\uB2E4. \uB2E8\uAC00\uB294 \uCC38\uACE0\uAC12\uC774\uB2E4 \u2014 \uCCAD\uAD6C\uB294 democut_estimate_cuts \uC758 \uAC12\uC73C\uB85C. \uB2E4\uC74C \uD638\uCD9C: democut_upload_asset, democut_estimate_cuts.",
7756
+ "description": "\uC774 \uD504\uB85C\uC81D\uD2B8\uC5D0\uC11C \uC4F8 \uC218 \uC788\uB294 \uBC29\uC2DD\xB7\uC9C4\uD589(host)\xB7\uD544\uC218 \uD544\uB4DC\xB7BYO \uD544\uB4DC\xB7\uBCF4\uC774\uC2A4\xB7\uC544\uBC14\uD0C0\xB7**\uBAA8\uC158\uADF8\uB798\uD53D \uD654\uBA74 \uAD6C\uC131**\xB7\uB2E8\uAC00\xB7\uC794\uC561. recommended_mode=ai_video. layout_patterns[] \uB294 motion_graphic \uC758 layout_pattern \uC774 \uBC1B\uB294 \uAC12\uC774\uACE0 \uAC01 \uD56D\uBAA9\uC774 \uC5B8\uC81C \uC4F0\uB294\uC9C0(when)\uB97C \uB9D0\uD55C\uB2E4 \u2014 \uBE44\uC6CC \uB450\uBA74 \uB300\uC0AC\uC5D0 \uB9DE\uB294 \uAD6C\uC131\uC744 \uC11C\uBC84\uAC00 \uACE0\uB978\uB2E4. \uB2E8\uAC00\uB294 \uCC38\uACE0\uAC12\uC774\uB2E4 \u2014 \uCCAD\uAD6C\uB294 democut_estimate_cuts \uC758 \uAC12\uC73C\uB85C. \uB2E4\uC74C \uD638\uCD9C: democut_upload_asset, democut_estimate_cuts.",
7757
7757
  "inputSchema": {
7758
7758
  "type": "object",
7759
7759
  "properties": {
@@ -7782,9 +7782,6 @@ var GENERATED_TOOLS = [
7782
7782
  "characters": {
7783
7783
  "type": "array"
7784
7784
  },
7785
- "backgrounds": {
7786
- "type": "array"
7787
- },
7788
7785
  "rates": {},
7789
7786
  "video_providers": {
7790
7787
  "type": "array"
@@ -9879,338 +9876,6 @@ var GENERATED_TOOLS = [
9879
9876
  "openWorldHint": false
9880
9877
  }
9881
9878
  },
9882
- {
9883
- "name": "democut_list_backgrounds",
9884
- "description": "PIP \uBC30\uACBD \uCE74\uD0C8\uB85C\uADF8(origin=background \uC790\uC0B0) + \uC62C\uB9B0 \uBC30\uACBD.",
9885
- "inputSchema": {
9886
- "type": "object",
9887
- "properties": {},
9888
- "required": [],
9889
- "additionalProperties": false
9890
- },
9891
- "outputSchema": {
9892
- "type": "object",
9893
- "properties": {
9894
- "backgrounds": {
9895
- "type": "array"
9896
- }
9897
- },
9898
- "required": [
9899
- "backgrounds"
9900
- ]
9901
- },
9902
- "annotations": {
9903
- "readOnlyHint": true,
9904
- "destructiveHint": false,
9905
- "idempotentHint": true,
9906
- "openWorldHint": false
9907
- }
9908
- },
9909
- {
9910
- "name": "democut_estimate_background_image",
9911
- "description": "PIP \uBC30\uACBD AI \uC0DD\uC131 \uACAC\uC801(0\uC6D0). \uD06C\uAE30\uB294 \uAC00\uB85C 1536\xD71024 \uACE0\uC815. \uAE08\uC561\uC740 \uC0C1\uD55C\uC774\uACE0 \uC2E4\uCE21\uC73C\uB85C \uCC28\uC561\uC744 \uB3CC\uB824\uC900\uB2E4.",
9912
- "inputSchema": {
9913
- "type": "object",
9914
- "properties": {
9915
- "label": {
9916
- "anyOf": [
9917
- {
9918
- "maxLength": 128,
9919
- "type": "string"
9920
- },
9921
- {
9922
- "type": "null"
9923
- }
9924
- ],
9925
- "default": null,
9926
- "description": "\uBC30\uACBD \uC774\uB984(meta.label) \u2014 \uC124\uBA85\uC774 \uBE44\uBA74 \uC774\uAC83\uC73C\uB85C \uADF8\uB9B0\uB2E4"
9927
- },
9928
- "description": {
9929
- "anyOf": [
9930
- {
9931
- "maxLength": 1e3,
9932
- "type": "string"
9933
- },
9934
- {
9935
- "type": "null"
9936
- }
9937
- ],
9938
- "default": null,
9939
- "description": "\uBB34\uC5C7\uC774 \uBCF4\uC774\uB294 \uC7A5\uBA74\uC778\uAC00(meta.description)"
9940
- },
9941
- "quality": {
9942
- "default": "medium",
9943
- "enum": [
9944
- "low",
9945
- "medium",
9946
- "high"
9947
- ],
9948
- "type": "string"
9949
- },
9950
- "replaces_asset_id": {
9951
- "anyOf": [
9952
- {
9953
- "maxLength": 64,
9954
- "minLength": 1,
9955
- "type": "string"
9956
- },
9957
- {
9958
- "type": "null"
9959
- }
9960
- ],
9961
- "default": null,
9962
- "description": "\uB2E4\uC2DC \uB9CC\uB4E4 \uB54C \uAD50\uCCB4\uD560 \uAE30\uC874 \uBC30\uACBD \uC790\uC0B0 id(\uAE08\uC561\uACFC \uBB34\uAD00). \uC0C8 \uBC30\uACBD\uC774 \uC644\uC131\uB418\uBA74 \uC774\uAC83\uC744 \uC9C0\uC6B4\uB2E4(\uCEF7\uC774 \uC4F0\uACE0 \uC788\uC73C\uBA74 \uB0A8\uAE30\uACE0 \uACB0\uACFC extra.replaced \uB85C \uC54C\uB9B0\uB2E4)"
9963
- }
9964
- },
9965
- "required": [],
9966
- "additionalProperties": false
9967
- },
9968
- "outputSchema": {
9969
- "type": "object",
9970
- "properties": {
9971
- "items": {
9972
- "type": "array"
9973
- },
9974
- "notes": {
9975
- "type": "array"
9976
- },
9977
- "total_krw": {
9978
- "type": "integer"
9979
- },
9980
- "rate_version": {
9981
- "type": "integer"
9982
- },
9983
- "balance_krw": {
9984
- "type": "integer"
9985
- },
9986
- "balance_after_krw": {
9987
- "type": "integer"
9988
- },
9989
- "can_afford": {
9990
- "type": "boolean"
9991
- },
9992
- "mock": {
9993
- "type": "boolean"
9994
- },
9995
- "provisional": {
9996
- "type": "boolean"
9997
- }
9998
- },
9999
- "required": [
10000
- "total_krw",
10001
- "rate_version",
10002
- "balance_krw",
10003
- "balance_after_krw",
10004
- "can_afford"
10005
- ]
10006
- },
10007
- "annotations": {
10008
- "readOnlyHint": false,
10009
- "destructiveHint": false,
10010
- "idempotentHint": false,
10011
- "openWorldHint": false
10012
- }
10013
- },
10014
- {
10015
- "name": "democut_make_background_image",
10016
- "description": "PIP \uBC30\uACBD\uC744 AI \uB85C \uB9CC\uB4E0\uB2E4(\uCCAD\uAD6C\xB7\uC0C1\uD55C). description(\uBB34\uC5C7\uC774 \uBCF4\uC774\uB294 \uC7A5\uBA74\uC778\uAC00)\uC73C\uB85C \uADF8\uB9AC\uACE0, \uBE44\uC6B0\uBA74 label \uB85C \uADF8\uB9B0\uB2E4. \uC0AC\uB78C\uC774 \uC5C6\uB294 \uC7A5\uBA74\uC774\uB2E4(PIP \uC7A5\uBA74\uC774 \uADF8 \uC548\uC5D0 \uC544\uBC14\uD0C0\uB97C \uADF8\uB824 \uB123\uB294\uB2E4). \uB05D\uB098\uBA74 democut_list_backgrounds \uC5D0 \uB098\uC628\uB2E4. \uC788\uB294 \uBC30\uACBD\uC744 \uB2E4\uC2DC \uB9CC\uB4E4\uB824\uBA74 replaces_asset_id \uC5D0 \uADF8 id \uB97C \uB123\uB294\uB2E4 \u2014 \uC0C8 \uBC30\uACBD\uC774 \uC644\uC131\uB418\uBA74 \uC61B \uAC83\uC744 \uC9C0\uC6B0\uACE0, \uCEF7\uC774 \uC4F0\uACE0 \uC788\uC73C\uBA74 \uB0A8\uAE34\uB2E4(democut_wait_jobs \uACB0\uACFC\uC758 extra.replaced \uAC00 \uC5B4\uB290 \uCABD\uC778\uC9C0 \uB9D0\uD55C\uB2E4). \uB3C8\uC774 \uB098\uAC00\uB294 \uB3C4\uAD6C\uB2E4: estimate_cuts(\uB610\uB294 \uC9DD\uC774 \uB418\uB294 estimate \uB3C4\uAD6C)\uB85C \uAE08\uC561\uC744 \uBCF4\uACE0 \uC0AC\uC6A9\uC790 \uB3D9\uC758\uB97C \uBC1B\uC740 \uB4A4 confirmed_*_krw \uC640 rate_version \uC744 \uADF8\uB300\uB85C \uB123\uC5B4\uB77C. \uC5B4\uAE0B\uB098\uBA74 409 QUOTE_MISMATCH \uB85C \uC0C8 \uACAC\uC801\uC744 \uC900\uB2E4(\uACFC\uAE08 \uC5C6\uC74C). \uC2E4\uD328\uD574\uB3C4 \uC7AC\uC81C\uCD9C\uD558\uC9C0 \uB9C8\uB77C \u2014 \uAC19\uC740 spec \uC774 \uD65C\uC131\uC774\uBA74 \uC11C\uBC84\uAC00 \uAE30\uC874 \uC7A1\uC744 \uB3CC\uB824\uC900\uB2E4(deduplicated=true). \uC751\uB2F5\uC740 202 \u2014 \uACB0\uACFC\uB294 democut_wait_jobs \uB85C \uBC1B\uB294\uB2E4. \uB2E4\uC74C \uD638\uCD9C: democut_wait_jobs.",
10017
- "inputSchema": {
10018
- "type": "object",
10019
- "properties": {
10020
- "label": {
10021
- "anyOf": [
10022
- {
10023
- "maxLength": 128,
10024
- "type": "string"
10025
- },
10026
- {
10027
- "type": "null"
10028
- }
10029
- ],
10030
- "default": null,
10031
- "description": "\uBC30\uACBD \uC774\uB984(meta.label) \u2014 \uC124\uBA85\uC774 \uBE44\uBA74 \uC774\uAC83\uC73C\uB85C \uADF8\uB9B0\uB2E4"
10032
- },
10033
- "description": {
10034
- "anyOf": [
10035
- {
10036
- "maxLength": 1e3,
10037
- "type": "string"
10038
- },
10039
- {
10040
- "type": "null"
10041
- }
10042
- ],
10043
- "default": null,
10044
- "description": "\uBB34\uC5C7\uC774 \uBCF4\uC774\uB294 \uC7A5\uBA74\uC778\uAC00(meta.description)"
10045
- },
10046
- "quality": {
10047
- "default": "medium",
10048
- "enum": [
10049
- "low",
10050
- "medium",
10051
- "high"
10052
- ],
10053
- "type": "string"
10054
- },
10055
- "replaces_asset_id": {
10056
- "anyOf": [
10057
- {
10058
- "maxLength": 64,
10059
- "minLength": 1,
10060
- "type": "string"
10061
- },
10062
- {
10063
- "type": "null"
10064
- }
10065
- ],
10066
- "default": null,
10067
- "description": "\uB2E4\uC2DC \uB9CC\uB4E4 \uB54C \uAD50\uCCB4\uD560 \uAE30\uC874 \uBC30\uACBD \uC790\uC0B0 id(\uAE08\uC561\uACFC \uBB34\uAD00). \uC0C8 \uBC30\uACBD\uC774 \uC644\uC131\uB418\uBA74 \uC774\uAC83\uC744 \uC9C0\uC6B4\uB2E4(\uCEF7\uC774 \uC4F0\uACE0 \uC788\uC73C\uBA74 \uB0A8\uAE30\uACE0 \uACB0\uACFC extra.replaced \uB85C \uC54C\uB9B0\uB2E4)"
10068
- },
10069
- "confirmed_cost_krw": {
10070
- "minimum": 0,
10071
- "type": "integer"
10072
- },
10073
- "rate_version": {
10074
- "minimum": 1,
10075
- "type": "integer"
10076
- }
10077
- },
10078
- "required": [
10079
- "confirmed_cost_krw",
10080
- "rate_version"
10081
- ],
10082
- "additionalProperties": false
10083
- },
10084
- "outputSchema": {
10085
- "type": "object",
10086
- "properties": {
10087
- "job_id": {
10088
- "type": "string"
10089
- },
10090
- "quote": {},
10091
- "next_calls": {
10092
- "type": "array"
10093
- }
10094
- },
10095
- "required": [
10096
- "job_id"
10097
- ]
10098
- },
10099
- "annotations": {
10100
- "readOnlyHint": false,
10101
- "destructiveHint": false,
10102
- "idempotentHint": false,
10103
- "openWorldHint": false
10104
- }
10105
- },
10106
- {
10107
- "name": "democut_update_background",
10108
- "description": "\uBC30\uACBD\uC758 \uB77C\uBCA8\xB7\uC124\uBA85\uC744 \uACE0\uCE5C\uB2E4(0\uC6D0). \uC900 \uCE78\uB9CC \uBC14\uAFB8\uACE0 \uC548 \uC900 \uCE78\uC740 \uADF8\uB300\uB85C, \uBE48 \uBB38\uC790\uC5F4\uC740 \uADF8 \uCE78\uC744 \uBE44\uC6B4\uB2E4. \uADF8\uB9BC\uC740 \uADF8\uB300\uB85C\uB2E4 \u2014 \uB2E4\uC2DC \uADF8\uB9AC\uB824\uBA74 democut_make_background_image \uC5D0 replaces_asset_id.",
10109
- "inputSchema": {
10110
- "type": "object",
10111
- "properties": {
10112
- "asset_id": {
10113
- "type": "string",
10114
- "description": "\uC790\uC0B0 id(ast_\u2026)"
10115
- },
10116
- "label": {
10117
- "anyOf": [
10118
- {
10119
- "maxLength": 128,
10120
- "type": "string"
10121
- },
10122
- {
10123
- "type": "null"
10124
- }
10125
- ],
10126
- "default": null,
10127
- "description": "\uBC30\uACBD \uC774\uB984(meta.label). \uBE48 \uBB38\uC790\uC5F4\uC774\uBA74 \uBE44\uC6B4\uB2E4"
10128
- },
10129
- "description": {
10130
- "anyOf": [
10131
- {
10132
- "maxLength": 1e3,
10133
- "type": "string"
10134
- },
10135
- {
10136
- "type": "null"
10137
- }
10138
- ],
10139
- "default": null,
10140
- "description": "\uBB34\uC5C7\uC774 \uBCF4\uC774\uB294 \uC7A5\uBA74\uC778\uAC00(meta.description). \uBE48 \uBB38\uC790\uC5F4\uC774\uBA74 \uBE44\uC6B4\uB2E4"
10141
- }
10142
- },
10143
- "required": [
10144
- "asset_id"
10145
- ],
10146
- "additionalProperties": false,
10147
- "anyOf": [
10148
- {
10149
- "required": [
10150
- "label"
10151
- ]
10152
- },
10153
- {
10154
- "required": [
10155
- "description"
10156
- ]
10157
- }
10158
- ]
10159
- },
10160
- "outputSchema": {
10161
- "type": "object",
10162
- "properties": {
10163
- "id": {
10164
- "type": "string"
10165
- },
10166
- "workspace_id": {
10167
- "type": "string"
10168
- },
10169
- "project_slug": {},
10170
- "kind": {
10171
- "type": "string"
10172
- },
10173
- "origin": {
10174
- "type": "string"
10175
- },
10176
- "mime": {
10177
- "type": "string"
10178
- },
10179
- "bytes": {
10180
- "type": "integer"
10181
- },
10182
- "sha256": {},
10183
- "meta": {},
10184
- "state": {
10185
- "type": "string"
10186
- },
10187
- "created_by": {
10188
- "type": "string"
10189
- },
10190
- "created_at": {
10191
- "type": "string"
10192
- },
10193
- "download_url": {}
10194
- },
10195
- "required": [
10196
- "id",
10197
- "workspace_id",
10198
- "kind",
10199
- "origin",
10200
- "mime",
10201
- "bytes",
10202
- "state",
10203
- "created_by",
10204
- "created_at"
10205
- ]
10206
- },
10207
- "annotations": {
10208
- "readOnlyHint": false,
10209
- "destructiveHint": false,
10210
- "idempotentHint": false,
10211
- "openWorldHint": false
10212
- }
10213
- },
10214
9879
  {
10215
9880
  "name": "democut_get_brand_kit",
10216
9881
  "description": "\uC774 \uC6CC\uD06C\uC2A4\uD398\uC774\uC2A4\uC758 \uBE0C\uB79C\uB4DC\uD0B7(\uBE0C\uB79C\uB4DC \uC774\uB984\xB7\uB300\uD45C\uC0C9\xB7\uBCF4\uC870\uC0C9\xB7\uD1A4\xB7\uD5E4\uB529/\uBCF8\uBB38 \uD3F0\uD2B8\xB7\uB85C\uACE0)\uACFC \uACE0\uB97C \uC218 \uC788\uB294 \uD3F0\uD2B8(font_options \u2014 `is_default` \uAC00 \uD3F0\uD2B8\uB97C \uBE44\uC6E0\uC744 \uB54C \uC4F0\uC774\uB294 \uAC83). \uBD80\uC791\uC6A9\uB3C4 \uACFC\uAE08\uB3C4 \uC5C6\uB2E4. \uC800\uC7A5\uD55C \uC801\uC774 \uC5C6\uC73C\uBA74 \uBE48 \uBE0C\uB79C\uB4DC\uD0B7\uACFC rev 0 \uC774\uB2E4.",
@@ -12932,30 +12597,6 @@ var TOOL_META = {
12932
12597
  "method": "POST",
12933
12598
  "path": "/api/characters/{character_id}/sheet"
12934
12599
  },
12935
- "democut_list_backgrounds": {
12936
- "cost": "none",
12937
- "group": "character",
12938
- "method": "GET",
12939
- "path": "/api/backgrounds"
12940
- },
12941
- "democut_estimate_background_image": {
12942
- "cost": "quote",
12943
- "group": "character",
12944
- "method": "POST",
12945
- "path": "/api/backgrounds/estimate"
12946
- },
12947
- "democut_make_background_image": {
12948
- "cost": "charge",
12949
- "group": "character",
12950
- "method": "POST",
12951
- "path": "/api/backgrounds/generate"
12952
- },
12953
- "democut_update_background": {
12954
- "cost": "none",
12955
- "group": "character",
12956
- "method": "PATCH",
12957
- "path": "/api/backgrounds/{asset_id}"
12958
- },
12959
12600
  "democut_get_brand_kit": {
12960
12601
  "cost": "none",
12961
12602
  "group": "brand",
@@ -13965,7 +13606,7 @@ function getOptions(a = {}, deps = {}) {
13965
13606
  text: [
13966
13607
  `\uD504\uB85C\uC81D\uD2B8 ${out4.project.slug} \u2014 ${out4.project.ratio} ${out4.project.resolution}`,
13967
13608
  `\uAD8C\uC7A5 \uBC29\uC2DD: ${out4.recommended_mode} \xB7 \uAC00\uB2A5\uD55C \uBC29\uC2DD: ${modes}`,
13968
- `\uBCF4\uC774\uC2A4 ${(out4.voices ?? []).length}\uAC1C \xB7 \uC544\uBC14\uD0C0 ${(out4.characters ?? []).length}\uAC1C \xB7 \uBC30\uACBD ${(out4.backgrounds ?? []).length}\uAC1C`,
13609
+ `\uBCF4\uC774\uC2A4 ${(out4.voices ?? []).length}\uAC1C \xB7 \uC544\uBC14\uD0C0 ${(out4.characters ?? []).length}\uAC1C`,
13969
13610
  `\uC794\uC561 ${krw(out4.balance_krw)} \xB7 \uC694\uC728 v${out4.rate_version}`,
13970
13611
  "\uB2E8\uAC00\uB294 \uCC38\uACE0\uAC12\uC785\uB2C8\uB2E4 \u2014 \uCCAD\uAD6C\uB294 democut_estimate_cuts \uAC00 \uC900 total_krw\xB7rate_version \uC73C\uB85C \uD569\uB2C8\uB2E4."
13971
13612
  ].join("\n"),
@@ -14995,26 +14636,6 @@ function characterLine(c) {
14995
14636
  const photos = c.photos?.length ? `\uC0AC\uC9C4 ${c.photos.length}\uC7A5` : "\uC0AC\uC9C4 \uC5C6\uC74C";
14996
14637
  return `${c.name} [${c.id}] rev=${c.rev} \xB7 ${photos}${c.current_photo_id ? " (\uB300\uD45C \uC788\uC74C)" : ""}`;
14997
14638
  }
14998
- function listBackgrounds(_a3 = {}, deps = {}) {
14999
- return guarded(READ_ONLY, async () => {
15000
- const base = resolveBaseUrl(deps.baseUrl);
15001
- const out4 = await apiRequest(base, "/api/backgrounds", {}, deps);
15002
- if (!out4.backgrounds?.length) {
15003
- return {
15004
- text: "\uBC30\uACBD\uC774 \uC5C6\uC2B5\uB2C8\uB2E4 \u2014 \uC6F9\uC758 \uBC30\uACBD \uB77C\uC774\uBE0C\uB7EC\uB9AC(ultra)\uC5D0\uC11C \uC62C\uB9AC\uAC70\uB098, democut_upload_asset \uC73C\uB85C \uC62C\uB9B0 \uC774\uBBF8\uC9C0 \uC790\uC0B0\uC758 id \uB97C pip.background_asset_id \uC5D0 \uADF8\uB300\uB85C \uC368\uB3C4 \uB429\uB2C8\uB2E4.",
15005
- structured: callableStructured(out4)
15006
- };
15007
- }
15008
- const lines = [`\uBC30\uACBD ${out4.backgrounds.length}\uC7A5 \u2014 pip.background_asset_id \uC5D0 id \uB97C \uB123\uC73C\uC138\uC694.`];
15009
- for (const a of out4.backgrounds.slice(0, 20)) {
15010
- const meta2 = a.meta ?? {};
15011
- const label = typeof meta2.label === "string" && meta2.label || typeof meta2.filename === "string" && meta2.filename || "";
15012
- lines.push(` ${a.id}: ${label} (${a.mime}, ${a.bytes} bytes)`);
15013
- }
15014
- if (out4.backgrounds.length > 20) lines.push(` \u2026\uC678 ${out4.backgrounds.length - 20}\uC7A5`);
15015
- return { text: lines.join("\n"), structured: callableStructured(out4) };
15016
- });
15017
- }
15018
14639
  function listCharacters(_a3 = {}, deps = {}) {
15019
14640
  return guarded(READ_ONLY, async () => {
15020
14641
  const base = resolveBaseUrl(deps.baseUrl);
@@ -15236,97 +14857,6 @@ function makeCharacterPhoto(a = {}, deps = {}) {
15236
14857
  };
15237
14858
  });
15238
14859
  }
15239
- function backgroundImageBody(a) {
15240
- return {
15241
- ...a.label !== void 0 ? { label: a.label } : {},
15242
- ...a.description !== void 0 ? { description: a.description } : {},
15243
- ...a.quality !== void 0 ? { quality: a.quality } : {},
15244
- ...a.replaces_asset_id ? { replaces_asset_id: a.replaces_asset_id } : {}
15245
- };
15246
- }
15247
- function estimateBackgroundImage(a = {}, deps = {}) {
15248
- return guarded(READ_ONLY, async () => {
15249
- const base = resolveBaseUrl(deps.baseUrl);
15250
- const out4 = await apiRequest(
15251
- base,
15252
- "/api/backgrounds/estimate",
15253
- { method: "POST", body: backgroundImageBody(a) },
15254
- deps
15255
- );
15256
- const item = out4.items?.[0];
15257
- if (!item || item.blocked_reason) {
15258
- const reason = item?.blocked_reason ?? "\uACAC\uC801\uD560 \uD56D\uBAA9\uC774 \uC5C6\uC2B5\uB2C8\uB2E4";
15259
- return {
15260
- text: `\uC544\uC9C1 \uBC30\uACBD\uC744 \uB9CC\uB4E4 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 \u2014 ${reason}
15261
- \uAD00\uB9AC\uC790\uC5D0\uAC8C \uBB38\uC758\uD558\uC138\uC694(\uC0C1\uD55C \uBBF8\uC2E4\uCE21\uC740 \uC6B4\uC601\uC790 \uBAAB\uC785\uB2C8\uB2E4).`,
15262
- structured: callableStructured(out4)
15263
- };
15264
- }
15265
- const rows = (item.rows ?? []).map((r) => `${r.display_name || r.key} ${krw(r.krw)}`).join(", ") || "\uD589 \uC5C6\uC74C";
15266
- const lines = [
15267
- `\uBC30\uACBD \uACAC\uC801 (\uC694\uC728 v${out4.rate_version}) \u2014 \uBD80\uC791\uC6A9\uB3C4 \uACFC\uAE08\uB3C4 \uC5C6\uC2B5\uB2C8\uB2E4`,
15268
- ` ${krw(item.total_krw ?? 0)} (${rows})`,
15269
- `\uC794\uC561 ${krw(out4.balance_krw)} \u2192 \uB0A8\uC744 \uC794\uC561 ${krw(out4.balance_after_krw)}`,
15270
- 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.",
15271
- "\uC774 \uAE08\uC561\uC740 \uC0C1\uD55C\uC785\uB2C8\uB2E4 \u2014 \uC2E4\uC81C \uC0AC\uC6A9\uB7C9\uC774 \uC801\uC73C\uBA74 \uCC28\uC561\uC744 \uC790\uB3D9\uC73C\uB85C \uB3CC\uB824\uB4DC\uB9BD\uB2C8\uB2E4."
15272
- ];
15273
- if (out4.mock) lines.push("(mock \uB2E8\uAC00\uC785\uB2C8\uB2E4 \u2014 \uC2E4\uC81C \uCCAD\uAD6C\uC640 \uB2E4\uB97C \uC218 \uC788\uC2B5\uB2C8\uB2E4.)");
15274
- return { text: lines.join("\n"), structured: callableStructured(out4) };
15275
- });
15276
- }
15277
- function makeBackgroundImage(a = {}, deps = {}) {
15278
- return guarded(SUBMITTING, async () => {
15279
- const base = resolveBaseUrl(deps.baseUrl);
15280
- const out4 = await apiRequest(
15281
- base,
15282
- "/api/backgrounds/generate",
15283
- {
15284
- method: "POST",
15285
- body: {
15286
- ...backgroundImageBody(a),
15287
- // ★ 동의는 **명시**다 — 없으면 서버가 0원 동의로 읽고 409 로 거부한다(그것이 옳다).
15288
- confirmed_cost_krw: a.confirmed_cost_krw ?? 0,
15289
- rate_version: a.rate_version
15290
- }
15291
- },
15292
- deps
15293
- );
15294
- const total = out4.quote?.total_krw ?? 0;
15295
- return {
15296
- text: [
15297
- `\uBC30\uACBD\uC744 \uB9CC\uB4DC\uB294 \uC911\uC785\uB2C8\uB2E4 \u2014 ${out4.job_id}`,
15298
- `\uCCAD\uAD6C ${krw(total)} \u2014 \uC0C1\uD55C\uC785\uB2C8\uB2E4. \uC2E4\uC81C \uC0AC\uC6A9\uB7C9\uC774 \uC801\uC73C\uBA74 \uCC28\uC561\uC744 \uC790\uB3D9\uC73C\uB85C \uB3CC\uB824\uB4DC\uB9BD\uB2C8\uB2E4.`,
15299
- "democut_wait_jobs \uB85C \uB05D\uB098\uBA74 democut_list_backgrounds \uC5D0 \uC0C8 \uBC30\uACBD\uC774 \uB098\uC635\uB2C8\uB2E4 \u2014 \uADF8 id \uB97C pip.background_asset_id \uC5D0 \uB123\uC73C\uC138\uC694.",
15300
- ...a.replaces_asset_id ? [`\uB05D\uB098\uBA74 ${a.replaces_asset_id} \uB97C \uC9C0\uC6C1\uB2C8\uB2E4 \u2014 \uCEF7\uC774 \uC4F0\uACE0 \uC788\uC73C\uBA74 \uB0A8\uAE30\uACE0 wait_jobs \uACB0\uACFC\uC758 extra.replaced \uAC00 \uADF8\uB807\uAC8C \uB9D0\uD569\uB2C8\uB2E4.`] : []
15301
- ].join("\n"),
15302
- structured: callableStructured(out4)
15303
- };
15304
- });
15305
- }
15306
- function updateBackground(a = {}, deps = {}) {
15307
- return guarded(READ_ONLY, async () => {
15308
- const id = (a.asset_id ?? "").trim();
15309
- if (!id) return { isError: true, text: "asset_id \uAC00 \uD544\uC694\uD569\uB2C8\uB2E4." };
15310
- const base = resolveBaseUrl(deps.baseUrl);
15311
- const out4 = await apiRequest(
15312
- base,
15313
- `/api/backgrounds/${encodeURIComponent(id)}`,
15314
- {
15315
- method: "PATCH",
15316
- body: {
15317
- ...a.label !== void 0 ? { label: a.label } : {},
15318
- ...a.description !== void 0 ? { description: a.description } : {}
15319
- }
15320
- },
15321
- deps
15322
- );
15323
- const meta2 = out4.meta ?? {};
15324
- return {
15325
- text: `\uBC30\uACBD ${out4.id} \uC744 \uACE0\uCCE4\uC2B5\uB2C8\uB2E4 \u2014 \uB77C\uBCA8 \u300C${meta2.label ?? ""}\u300D, \uC124\uBA85 \u300C${meta2.description ?? ""}\u300D.`,
15326
- structured: callableStructured(out4)
15327
- };
15328
- });
15329
- }
15330
14860
  function estimateCharacterSheet(a = {}, deps = {}) {
15331
14861
  return guarded(READ_ONLY, async () => {
15332
14862
  const id = (a.character_id ?? "").trim();
@@ -15975,14 +15505,6 @@ function dispatch(name, args, deps = {}) {
15975
15505
  return makeCharacterSheet(args, deps);
15976
15506
  case "democut_delete_character":
15977
15507
  return deleteCharacter(args, deps);
15978
- case "democut_list_backgrounds":
15979
- return listBackgrounds(args, deps);
15980
- case "democut_estimate_background_image":
15981
- return estimateBackgroundImage(args, deps);
15982
- case "democut_make_background_image":
15983
- return makeBackgroundImage(args, deps);
15984
- case "democut_update_background":
15985
- return updateBackground(args, deps);
15986
15508
  default:
15987
15509
  return Promise.resolve({ isError: true, text: `\uC54C \uC218 \uC5C6\uB294 \uB3C4\uAD6C: ${name}` });
15988
15510
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "democut",
3
- "version": "1.0.52",
3
+ "version": "1.0.54",
4
4
  "description": "DemoCut 에이전트 CLI — device flow 로그인(RFC 8628) + 영상 생성",
5
5
  "license": "MIT",
6
6
  "author": "InfoGrab",