democut 0.6.33 → 0.6.35

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 +660 -9
  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 = "0.6.33";
6919
+ var VERSION = "0.6.35";
6920
6920
 
6921
6921
  // src/device-flow.ts
6922
6922
  var DeviceFlowError = class extends Error {
@@ -15994,6 +15994,203 @@ var GENERATED_TOOLS = [
15994
15994
  "required": [],
15995
15995
  "additionalProperties": false
15996
15996
  },
15997
+ "outputSchema": {
15998
+ "$defs": {
15999
+ "Brand": {
16000
+ "additionalProperties": false,
16001
+ "properties": {
16002
+ "accent_hex": {
16003
+ "anyOf": [
16004
+ {
16005
+ "pattern": "^#[0-9A-Fa-f]{6}$",
16006
+ "type": "string"
16007
+ },
16008
+ {
16009
+ "type": "null"
16010
+ }
16011
+ ],
16012
+ "default": null,
16013
+ "title": "Accent Hex"
16014
+ },
16015
+ "heading_font": {
16016
+ "anyOf": [
16017
+ {
16018
+ "type": "string"
16019
+ },
16020
+ {
16021
+ "type": "null"
16022
+ }
16023
+ ],
16024
+ "default": null,
16025
+ "title": "Heading Font"
16026
+ },
16027
+ "body_font": {
16028
+ "anyOf": [
16029
+ {
16030
+ "type": "string"
16031
+ },
16032
+ {
16033
+ "type": "null"
16034
+ }
16035
+ ],
16036
+ "default": null,
16037
+ "title": "Body Font"
16038
+ },
16039
+ "logo_asset_id": {
16040
+ "anyOf": [
16041
+ {
16042
+ "type": "string"
16043
+ },
16044
+ {
16045
+ "type": "null"
16046
+ }
16047
+ ],
16048
+ "default": null,
16049
+ "title": "Logo Asset Id"
16050
+ }
16051
+ },
16052
+ "title": "Brand",
16053
+ "type": "object"
16054
+ },
16055
+ "ProjectDefaults": {
16056
+ "additionalProperties": false,
16057
+ "properties": {
16058
+ "voice_id": {
16059
+ "anyOf": [
16060
+ {
16061
+ "type": "string"
16062
+ },
16063
+ {
16064
+ "type": "null"
16065
+ }
16066
+ ],
16067
+ "default": null,
16068
+ "title": "Voice Id"
16069
+ },
16070
+ "character_id": {
16071
+ "anyOf": [
16072
+ {
16073
+ "type": "string"
16074
+ },
16075
+ {
16076
+ "type": "null"
16077
+ }
16078
+ ],
16079
+ "default": null,
16080
+ "title": "Character Id"
16081
+ },
16082
+ "subtitles": {
16083
+ "default": false,
16084
+ "title": "Subtitles",
16085
+ "type": "boolean"
16086
+ },
16087
+ "brand": {
16088
+ "$ref": "#/$defs/Brand"
16089
+ }
16090
+ },
16091
+ "title": "ProjectDefaults",
16092
+ "type": "object"
16093
+ },
16094
+ "ProjectView": {
16095
+ "additionalProperties": false,
16096
+ "properties": {
16097
+ "slug": {
16098
+ "title": "Slug",
16099
+ "type": "string"
16100
+ },
16101
+ "workspace_id": {
16102
+ "title": "Workspace Id",
16103
+ "type": "string"
16104
+ },
16105
+ "title": {
16106
+ "title": "Title",
16107
+ "type": "string"
16108
+ },
16109
+ "ratio": {
16110
+ "enum": [
16111
+ "16:9",
16112
+ "9:16",
16113
+ "1:1"
16114
+ ],
16115
+ "title": "Ratio",
16116
+ "type": "string"
16117
+ },
16118
+ "resolution": {
16119
+ "enum": [
16120
+ "720p",
16121
+ "1080p"
16122
+ ],
16123
+ "title": "Resolution",
16124
+ "type": "string"
16125
+ },
16126
+ "defaults": {
16127
+ "$ref": "#/$defs/ProjectDefaults"
16128
+ },
16129
+ "rev": {
16130
+ "default": 0,
16131
+ "title": "Rev",
16132
+ "type": "integer"
16133
+ },
16134
+ "folder_id": {
16135
+ "anyOf": [
16136
+ {
16137
+ "type": "string"
16138
+ },
16139
+ {
16140
+ "type": "null"
16141
+ }
16142
+ ],
16143
+ "default": null,
16144
+ "title": "Folder Id"
16145
+ },
16146
+ "cut_count": {
16147
+ "default": 0,
16148
+ "title": "Cut Count",
16149
+ "type": "integer"
16150
+ },
16151
+ "created_by": {
16152
+ "title": "Created By",
16153
+ "type": "string"
16154
+ },
16155
+ "created_at": {
16156
+ "title": "Created At",
16157
+ "type": "string"
16158
+ },
16159
+ "updated_at": {
16160
+ "title": "Updated At",
16161
+ "type": "string"
16162
+ }
16163
+ },
16164
+ "required": [
16165
+ "slug",
16166
+ "workspace_id",
16167
+ "title",
16168
+ "ratio",
16169
+ "resolution",
16170
+ "created_by",
16171
+ "created_at",
16172
+ "updated_at"
16173
+ ],
16174
+ "title": "ProjectView",
16175
+ "type": "object"
16176
+ }
16177
+ },
16178
+ "additionalProperties": false,
16179
+ "properties": {
16180
+ "projects": {
16181
+ "items": {
16182
+ "$ref": "#/$defs/ProjectView"
16183
+ },
16184
+ "title": "Projects",
16185
+ "type": "array"
16186
+ }
16187
+ },
16188
+ "required": [
16189
+ "projects"
16190
+ ],
16191
+ "title": "ProjectListResponse",
16192
+ "type": "object"
16193
+ },
15997
16194
  "annotations": {
15998
16195
  "readOnlyHint": true,
15999
16196
  "destructiveHint": false,
@@ -16001,6 +16198,244 @@ var GENERATED_TOOLS = [
16001
16198
  "openWorldHint": false
16002
16199
  }
16003
16200
  },
16201
+ {
16202
+ "name": "democut_get_project",
16203
+ "description": "\uD504\uB85C\uC81D\uD2B8 \uD558\uB098.",
16204
+ "inputSchema": {
16205
+ "type": "object",
16206
+ "properties": {
16207
+ "slug": {
16208
+ "type": "string",
16209
+ "description": "\uD504\uB85C\uC81D\uD2B8 \uC2AC\uB7EC\uADF8(list_projects)"
16210
+ }
16211
+ },
16212
+ "required": [
16213
+ "slug"
16214
+ ],
16215
+ "additionalProperties": false
16216
+ },
16217
+ "outputSchema": {
16218
+ "$defs": {
16219
+ "Brand": {
16220
+ "additionalProperties": false,
16221
+ "properties": {
16222
+ "accent_hex": {
16223
+ "anyOf": [
16224
+ {
16225
+ "pattern": "^#[0-9A-Fa-f]{6}$",
16226
+ "type": "string"
16227
+ },
16228
+ {
16229
+ "type": "null"
16230
+ }
16231
+ ],
16232
+ "default": null,
16233
+ "title": "Accent Hex"
16234
+ },
16235
+ "heading_font": {
16236
+ "anyOf": [
16237
+ {
16238
+ "type": "string"
16239
+ },
16240
+ {
16241
+ "type": "null"
16242
+ }
16243
+ ],
16244
+ "default": null,
16245
+ "title": "Heading Font"
16246
+ },
16247
+ "body_font": {
16248
+ "anyOf": [
16249
+ {
16250
+ "type": "string"
16251
+ },
16252
+ {
16253
+ "type": "null"
16254
+ }
16255
+ ],
16256
+ "default": null,
16257
+ "title": "Body Font"
16258
+ },
16259
+ "logo_asset_id": {
16260
+ "anyOf": [
16261
+ {
16262
+ "type": "string"
16263
+ },
16264
+ {
16265
+ "type": "null"
16266
+ }
16267
+ ],
16268
+ "default": null,
16269
+ "title": "Logo Asset Id"
16270
+ }
16271
+ },
16272
+ "title": "Brand",
16273
+ "type": "object"
16274
+ },
16275
+ "ProjectDefaults": {
16276
+ "additionalProperties": false,
16277
+ "properties": {
16278
+ "voice_id": {
16279
+ "anyOf": [
16280
+ {
16281
+ "type": "string"
16282
+ },
16283
+ {
16284
+ "type": "null"
16285
+ }
16286
+ ],
16287
+ "default": null,
16288
+ "title": "Voice Id"
16289
+ },
16290
+ "character_id": {
16291
+ "anyOf": [
16292
+ {
16293
+ "type": "string"
16294
+ },
16295
+ {
16296
+ "type": "null"
16297
+ }
16298
+ ],
16299
+ "default": null,
16300
+ "title": "Character Id"
16301
+ },
16302
+ "subtitles": {
16303
+ "default": false,
16304
+ "title": "Subtitles",
16305
+ "type": "boolean"
16306
+ },
16307
+ "brand": {
16308
+ "$ref": "#/$defs/Brand"
16309
+ }
16310
+ },
16311
+ "title": "ProjectDefaults",
16312
+ "type": "object"
16313
+ }
16314
+ },
16315
+ "additionalProperties": false,
16316
+ "properties": {
16317
+ "slug": {
16318
+ "title": "Slug",
16319
+ "type": "string"
16320
+ },
16321
+ "workspace_id": {
16322
+ "title": "Workspace Id",
16323
+ "type": "string"
16324
+ },
16325
+ "title": {
16326
+ "title": "Title",
16327
+ "type": "string"
16328
+ },
16329
+ "ratio": {
16330
+ "enum": [
16331
+ "16:9",
16332
+ "9:16",
16333
+ "1:1"
16334
+ ],
16335
+ "title": "Ratio",
16336
+ "type": "string"
16337
+ },
16338
+ "resolution": {
16339
+ "enum": [
16340
+ "720p",
16341
+ "1080p"
16342
+ ],
16343
+ "title": "Resolution",
16344
+ "type": "string"
16345
+ },
16346
+ "defaults": {
16347
+ "$ref": "#/$defs/ProjectDefaults"
16348
+ },
16349
+ "rev": {
16350
+ "default": 0,
16351
+ "title": "Rev",
16352
+ "type": "integer"
16353
+ },
16354
+ "folder_id": {
16355
+ "anyOf": [
16356
+ {
16357
+ "type": "string"
16358
+ },
16359
+ {
16360
+ "type": "null"
16361
+ }
16362
+ ],
16363
+ "default": null,
16364
+ "title": "Folder Id"
16365
+ },
16366
+ "cut_count": {
16367
+ "default": 0,
16368
+ "title": "Cut Count",
16369
+ "type": "integer"
16370
+ },
16371
+ "created_by": {
16372
+ "title": "Created By",
16373
+ "type": "string"
16374
+ },
16375
+ "created_at": {
16376
+ "title": "Created At",
16377
+ "type": "string"
16378
+ },
16379
+ "updated_at": {
16380
+ "title": "Updated At",
16381
+ "type": "string"
16382
+ }
16383
+ },
16384
+ "required": [
16385
+ "slug",
16386
+ "workspace_id",
16387
+ "title",
16388
+ "ratio",
16389
+ "resolution",
16390
+ "created_by",
16391
+ "created_at",
16392
+ "updated_at"
16393
+ ],
16394
+ "title": "ProjectView",
16395
+ "type": "object"
16396
+ },
16397
+ "annotations": {
16398
+ "readOnlyHint": true,
16399
+ "destructiveHint": false,
16400
+ "idempotentHint": true,
16401
+ "openWorldHint": false
16402
+ }
16403
+ },
16404
+ {
16405
+ "name": "democut_delete_project",
16406
+ "description": "\uD504\uB85C\uC81D\uD2B8\uC640 \uCEF7\xB7\uBC84\uC804\xB7\uC790\uC0B0\uC744 \uC9C0\uC6B4\uB2E4(\uD65C\uC131 \uC7A1\uC774 \uC788\uC73C\uBA74 409). \uC6D0\uC7A5\uC740 \uB0A8\uB294\uB2E4.",
16407
+ "inputSchema": {
16408
+ "type": "object",
16409
+ "properties": {
16410
+ "slug": {
16411
+ "type": "string",
16412
+ "description": "\uD504\uB85C\uC81D\uD2B8 \uC2AC\uB7EC\uADF8(list_projects)"
16413
+ }
16414
+ },
16415
+ "required": [
16416
+ "slug"
16417
+ ],
16418
+ "additionalProperties": false
16419
+ },
16420
+ "outputSchema": {
16421
+ "additionalProperties": false,
16422
+ "properties": {
16423
+ "deleted": {
16424
+ "default": true,
16425
+ "title": "Deleted",
16426
+ "type": "boolean"
16427
+ }
16428
+ },
16429
+ "title": "DeletedResponse",
16430
+ "type": "object"
16431
+ },
16432
+ "annotations": {
16433
+ "readOnlyHint": false,
16434
+ "destructiveHint": true,
16435
+ "idempotentHint": true,
16436
+ "openWorldHint": false
16437
+ }
16438
+ },
16004
16439
  {
16005
16440
  "name": "democut_create_project",
16006
16441
  "description": "\uD504\uB85C\uC81D\uD2B8\uB97C \uB9CC\uB4E0\uB2E4 \u2014 \uACFC\uAE08\uC740 \uC5C6\uC9C0\uB9CC \uACC4\uC815\uC5D0 \uB0A8\uB294 **\uC4F0\uAE30** \uC791\uC5C5\uC774\uB2E4. \uBE44\uC728(16:9|9:16|1:1)\uC740 \uC0DD\uC131 \uD6C4 \uBC14\uAFC0 \uC218 \uC5C6\uB2E4. \uAC19\uC740 \uC81C\uBAA9\uC73C\uB85C \uB2E4\uC2DC \uBD80\uB974\uBA74 \uC0C8\uB85C \uB9CC\uB4E4\uC9C0 \uC54A\uACE0 \uAE30\uC874 \uAC83\uC744 \uB3CC\uB824\uC900\uB2E4(\uC7AC\uC2DC\uB3C4 \uC548\uC804). \u2605 \uBA3C\uC800 democut_list_projects \uB85C \uC4F8 \uB9CC\uD55C \uAC83\uC774 \uC774\uBBF8 \uC788\uB294\uC9C0 \uBCF4\uACE0 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uC5B4\uB290 \uAC83\uC5D0 \uB123\uC744\uC9C0 \uBB3C\uC5B4\uB77C \u2014 \uBB3B\uC9C0 \uC54A\uACE0 \uB9CC\uB4E4\uBA74 \uBE44\uC2B7\uD55C \uD504\uB85C\uC81D\uD2B8\uAC00 \uC313\uC778\uB2E4. \uB2E4\uC74C \uD638\uCD9C: democut_get_options, democut_upload_asset, democut_estimate_cuts.",
@@ -27049,6 +27484,151 @@ var GENERATED_TOOLS = [
27049
27484
  "openWorldHint": false
27050
27485
  }
27051
27486
  },
27487
+ {
27488
+ "name": "democut_list_backgrounds",
27489
+ "description": "PIP \uBC30\uACBD \uCE74\uD0C8\uB85C\uADF8(origin=background \uC790\uC0B0) + \uC62C\uB9B0 \uBC30\uACBD.",
27490
+ "inputSchema": {
27491
+ "type": "object",
27492
+ "properties": {},
27493
+ "required": [],
27494
+ "additionalProperties": false
27495
+ },
27496
+ "outputSchema": {
27497
+ "$defs": {
27498
+ "AssetView": {
27499
+ "additionalProperties": false,
27500
+ "properties": {
27501
+ "id": {
27502
+ "title": "Id",
27503
+ "type": "string"
27504
+ },
27505
+ "workspace_id": {
27506
+ "title": "Workspace Id",
27507
+ "type": "string"
27508
+ },
27509
+ "project_slug": {
27510
+ "anyOf": [
27511
+ {
27512
+ "type": "string"
27513
+ },
27514
+ {
27515
+ "type": "null"
27516
+ }
27517
+ ],
27518
+ "default": null,
27519
+ "title": "Project Slug"
27520
+ },
27521
+ "kind": {
27522
+ "enum": [
27523
+ "image",
27524
+ "video",
27525
+ "audio",
27526
+ "subtitle",
27527
+ "code",
27528
+ "archive"
27529
+ ],
27530
+ "title": "Kind",
27531
+ "type": "string"
27532
+ },
27533
+ "origin": {
27534
+ "description": "upload|url_fetch|render|image_gen|export|pip|from_video|thumbnail|idle_motion|background|legacy_import (\uC77D\uAE30 \uAD00\uC6A9)",
27535
+ "title": "Origin",
27536
+ "type": "string"
27537
+ },
27538
+ "mime": {
27539
+ "title": "Mime",
27540
+ "type": "string"
27541
+ },
27542
+ "bytes": {
27543
+ "minimum": 0,
27544
+ "title": "Bytes",
27545
+ "type": "integer"
27546
+ },
27547
+ "sha256": {
27548
+ "anyOf": [
27549
+ {
27550
+ "type": "string"
27551
+ },
27552
+ {
27553
+ "type": "null"
27554
+ }
27555
+ ],
27556
+ "default": null,
27557
+ "title": "Sha256"
27558
+ },
27559
+ "meta": {
27560
+ "additionalProperties": true,
27561
+ "title": "Meta",
27562
+ "type": "object"
27563
+ },
27564
+ "state": {
27565
+ "enum": [
27566
+ "pending",
27567
+ "ready",
27568
+ "deleted"
27569
+ ],
27570
+ "title": "State",
27571
+ "type": "string"
27572
+ },
27573
+ "created_by": {
27574
+ "title": "Created By",
27575
+ "type": "string"
27576
+ },
27577
+ "created_at": {
27578
+ "title": "Created At",
27579
+ "type": "string"
27580
+ },
27581
+ "download_url": {
27582
+ "anyOf": [
27583
+ {
27584
+ "type": "string"
27585
+ },
27586
+ {
27587
+ "type": "null"
27588
+ }
27589
+ ],
27590
+ "default": null,
27591
+ "title": "Download Url"
27592
+ }
27593
+ },
27594
+ "required": [
27595
+ "id",
27596
+ "workspace_id",
27597
+ "kind",
27598
+ "origin",
27599
+ "mime",
27600
+ "bytes",
27601
+ "state",
27602
+ "created_by",
27603
+ "created_at"
27604
+ ],
27605
+ "title": "AssetView",
27606
+ "type": "object"
27607
+ }
27608
+ },
27609
+ "additionalProperties": false,
27610
+ "properties": {
27611
+ "backgrounds": {
27612
+ "items": {
27613
+ "$ref": "#/$defs/AssetView"
27614
+ },
27615
+ "title": "Backgrounds",
27616
+ "type": "array"
27617
+ }
27618
+ },
27619
+ "required": [
27620
+ "backgrounds"
27621
+ ],
27622
+ "title": "BackgroundListResponse",
27623
+ "type": "object"
27624
+ },
27625
+ "annotations": {
27626
+ "readOnlyHint": true,
27627
+ "destructiveHint": false,
27628
+ "idempotentHint": true,
27629
+ "openWorldHint": false
27630
+ }
27631
+ },
27052
27632
  {
27053
27633
  "name": "democut_get_storyboard",
27054
27634
  "description": "\uC2A4\uD1A0\uB9AC\uBCF4\uB4DC \u2014 rev\xB7\uC21C\uC11C\xB7\uCEF7(\uD30C\uC0DD \uD544\uB4DC)\xB7\uB300\uAE30 \uC81C\uC548\xB7\uC0AC\uC6A9\uB7C9. If-Match \uC5D0 \uC4F8 rev \uAC00 \uC5EC\uAE30 \uC788\uB2E4. \uB2E4\uC74C \uD638\uCD9C: democut_add_cut, democut_put_cut_draft, democut_reorder_cuts.",
@@ -38303,6 +38883,12 @@ var PROJECTS_MAX_LIMIT = 100;
38303
38883
  function list(baseUrl, deps = {}) {
38304
38884
  return apiRequest(baseUrl, "/api/projects", {}, deps);
38305
38885
  }
38886
+ function get(baseUrl, slug, deps = {}) {
38887
+ return apiRequest(baseUrl, `/api/projects/${encodeURIComponent(slug)}`, {}, deps);
38888
+ }
38889
+ function remove(baseUrl, slug, deps = {}) {
38890
+ return apiRequest(baseUrl, `/api/projects/${encodeURIComponent(slug)}`, { method: "DELETE" }, deps);
38891
+ }
38306
38892
  function create(baseUrl, body, deps = {}) {
38307
38893
  return apiRequest(baseUrl, "/api/projects", { method: "POST", body }, deps);
38308
38894
  }
@@ -38498,9 +39084,7 @@ function creditLedger(a = {}, deps = {}) {
38498
39084
  });
38499
39085
  }
38500
39086
  function projectLine(p) {
38501
- const parts = [p.slug ?? "?", p.title || "(\uC81C\uBAA9 \uC5C6\uC74C)"];
38502
- if (p.status) parts.push(p.status);
38503
- if (p.kind === "shorts") parts.push("shorts");
39087
+ const parts = [p.slug, p.title || "(\uC81C\uBAA9 \uC5C6\uC74C)", `\uCEF7 ${p.cut_count ?? 0}\uAC1C`];
38504
39088
  const updated = (p.updated_at ?? "").slice(0, 10);
38505
39089
  if (updated) parts.push(updated);
38506
39090
  return parts.join(" \xB7 ");
@@ -38522,14 +39106,16 @@ function listProjects(a = {}, deps = {}) {
38522
39106
  const matched = query ? all.filter(
38523
39107
  (p) => (p.slug ?? "").toLowerCase().includes(query) || (p.title ?? "").toLowerCase().includes(query)
38524
39108
  ) : all.slice();
38525
- matched.sort((x, y) => (y.updated_at ?? "").localeCompare(x.updated_at ?? ""));
39109
+ matched.sort((x, y) => (y.updated_at ?? "").localeCompare(x.updated_at ?? "") || y.slug.localeCompare(x.slug));
38526
39110
  const shown = matched.slice(0, limit);
38527
39111
  if (shown.length === 0) {
38528
39112
  return {
38529
- text: query ? `'${query}' \uC640 \uC77C\uCE58\uD558\uB294 \uD504\uB85C\uC81D\uD2B8\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. (\uC774 \uC6CC\uD06C\uC2A4\uD398\uC774\uC2A4\uC5D0 \uD504\uB85C\uC81D\uD2B8 ${total}\uAC1C) query \uB97C \uBE7C\uACE0 \uB2E4\uC2DC \uD638\uCD9C\uD574 \uC804\uCCB4\uB97C \uBCF4\uC138\uC694.` : "\uC774 \uC6CC\uD06C\uC2A4\uD398\uC774\uC2A4\uC5D0\uB294 \uC544\uC9C1 \uD504\uB85C\uC81D\uD2B8\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \uC0AC\uC6A9\uC790\uC5D0\uAC8C democut.ai \uC5D0\uC11C \uD504\uB85C\uC81D\uD2B8\uB97C \uD558\uB098 \uB9CC\uB4E0 \uB4A4 \uB2E4\uC2DC \uC694\uCCAD\uD574 \uB2EC\uB77C\uACE0 \uC54C\uB9AC\uC138\uC694 \u2014 \uB124\uAC00 \uC9C1\uC811 \uB9CC\uB4E4 \uC218\uB294 \uC5C6\uC2B5\uB2C8\uB2E4. \uC601\uC0C1 \uC0DD\uC131\uC740 \uADC0\uC18D\uC2DC\uD0AC \uD504\uB85C\uC81D\uD2B8\uAC00 \uC788\uC5B4\uC57C \uD569\uB2C8\uB2E4."
39113
+ text: query ? `'${query}' \uC640 \uC77C\uCE58\uD558\uB294 \uD504\uB85C\uC81D\uD2B8\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. (\uC774 \uC6CC\uD06C\uC2A4\uD398\uC774\uC2A4\uC5D0 \uD504\uB85C\uC81D\uD2B8 ${total}\uAC1C) query \uB97C \uBE7C\uACE0 \uB2E4\uC2DC \uD638\uCD9C\uD574 \uC804\uCCB4\uB97C \uBCF4\uC138\uC694.` : "\uC774 \uC6CC\uD06C\uC2A4\uD398\uC774\uC2A4\uC5D0\uB294 \uC544\uC9C1 \uD504\uB85C\uC81D\uD2B8\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \uC0AC\uC6A9\uC790\uC5D0\uAC8C democut.ai \uC5D0\uC11C \uD504\uB85C\uC81D\uD2B8\uB97C \uD558\uB098 \uB9CC\uB4E0 \uB4A4 \uB2E4\uC2DC \uC694\uCCAD\uD574 \uB2EC\uB77C\uACE0 \uC54C\uB9AC\uC138\uC694 \u2014 \uB124\uAC00 \uC9C1\uC811 \uB9CC\uB4E4 \uC218\uB294 \uC5C6\uC2B5\uB2C8\uB2E4. \uC601\uC0C1 \uC0DD\uC131\uC740 \uADC0\uC18D\uC2DC\uD0AC \uD504\uB85C\uC81D\uD2B8\uAC00 \uC788\uC5B4\uC57C \uD569\uB2C8\uB2E4.",
39114
+ // 빈 목록도 성공이다 — 광고한 outputSchema(ProjectListResponse)를 지켜 채운다.
39115
+ structured: callableStructured({ projects: [] })
38530
39116
  };
38531
39117
  }
38532
- const lines = ["\uD504\uB85C\uC81D\uD2B8 (\uCD5C\uADFC \uC218\uC815\uC21C) \u2014 slug \xB7 \uC81C\uBAA9 \xB7 \uC0C1\uD0DC \xB7 \uC218\uC815\uC77C", ""];
39118
+ const lines = ["\uD504\uB85C\uC81D\uD2B8 (\uCD5C\uADFC \uC218\uC815\uC21C) \u2014 slug \xB7 \uC81C\uBAA9 \xB7 \uCEF7 \uC218 \xB7 \uC218\uC815\uC77C", ""];
38533
39119
  for (const p of shown) lines.push(projectLine(p));
38534
39120
  lines.push("");
38535
39121
  if (matched.length > shown.length) {
@@ -38538,9 +39124,48 @@ function listProjects(a = {}, deps = {}) {
38538
39124
  );
38539
39125
  }
38540
39126
  lines.push(
38541
- "\uD504\uB85C\uC81D\uD2B8\uB97C \uC694\uAD6C\uD558\uB294 \uB3C4\uAD6C\uC758 project_slug \uC5D0\uB294 \uC704 **slug**(\uB9E8 \uC55E \uAC12)\uB97C \uADF8\uB300\uB85C \uB123\uC73C\uC138\uC694. \uC5B4\uB290 \uAC83\uC5D0 \uADC0\uC18D\uC2DC\uD0AC\uC9C0 \uBD84\uBA85\uD558\uC9C0 \uC54A\uC73C\uBA74 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uBB3C\uC73C\uC138\uC694."
39127
+ "\uD504\uB85C\uC81D\uD2B8\uB97C \uC694\uAD6C\uD558\uB294 \uB3C4\uAD6C\uC758 project_slug \uC5D0\uB294 \uC704 **slug**(\uB9E8 \uC55E \uAC12)\uB97C \uADF8\uB300\uB85C \uB123\uC73C\uC138\uC694. \uC5B4\uB290 \uAC83\uC5D0 \uADC0\uC18D\uC2DC\uD0AC\uC9C0 \uBD84\uBA85\uD558\uC9C0 \uC54A\uC73C\uBA74 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uBB3C\uC73C\uC138\uC694. \uD558\uB098\uB97C \uC790\uC138\uD788 \uBCF4\uB824\uBA74 get_project."
38542
39128
  );
38543
- return { text: lines.join("\n") };
39129
+ return {
39130
+ text: callableToolNames(lines.join("\n")),
39131
+ structured: callableStructured({ projects: shown })
39132
+ };
39133
+ });
39134
+ }
39135
+ function getProject(a = {}, deps = {}) {
39136
+ return guarded(READ_ONLY, async () => {
39137
+ const slug = (a.slug ?? "").trim();
39138
+ if (!slug) return { isError: true, text: "slug \uAC00 \uD544\uC694\uD569\uB2C8\uB2E4. democut_list_projects \uB85C slug \uB97C \uBA3C\uC800 \uCC3E\uC73C\uC138\uC694." };
39139
+ const base = resolveBaseUrl(deps.baseUrl);
39140
+ const view = await get(base, slug, deps);
39141
+ const lines = [
39142
+ `\uD504\uB85C\uC81D\uD2B8 \u2014 slug: ${view.slug}`,
39143
+ `\uC81C\uBAA9: ${view.title}`,
39144
+ `\uBE44\uC728 ${view.ratio} \xB7 \uD574\uC0C1\uB3C4 ${view.resolution} (\uBE44\uC728\uC740 \uBC14\uAFC0 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4)`,
39145
+ `\uCEF7 ${view.cut_count ?? 0}\uAC1C \xB7 rev ${view.rev ?? 0} \xB7 \uC218\uC815 ${(view.updated_at ?? "").slice(0, 19)}`
39146
+ ];
39147
+ if (view.folder_id) lines.push(`\uD3F4\uB354: ${view.folder_id}`);
39148
+ lines.push("", "\uC21C\uC11C\xB7\uC0C1\uD0DC\uB294 get_storyboard \uB85C, \uB9CC\uB4E4\uB824\uBA74 estimate_cuts \u2192 make_cuts \uB85C. If-Match \uAC00 \uD544\uC694\uD55C \uD3B8\uC9D1 \uB3C4\uAD6C\uC5D0\uB294 \uC704 rev \uB97C \uB123\uC73C\uC138\uC694.");
39149
+ return {
39150
+ text: callableToolNames(lines.join("\n")),
39151
+ structured: callableStructured(view)
39152
+ };
39153
+ });
39154
+ }
39155
+ function deleteProject(a = {}, deps = {}) {
39156
+ return guarded(READ_ONLY, async () => {
39157
+ const slug = (a.slug ?? "").trim();
39158
+ if (!slug) return { isError: true, text: "slug \uAC00 \uD544\uC694\uD569\uB2C8\uB2E4. democut_list_projects \uB85C slug \uB97C \uBA3C\uC800 \uCC3E\uC73C\uC138\uC694." };
39159
+ const base = resolveBaseUrl(deps.baseUrl);
39160
+ const res = await remove(base, slug, deps) ?? { deleted: true };
39161
+ return {
39162
+ text: callableToolNames([
39163
+ `\uD504\uB85C\uC81D\uD2B8\uB97C \uC9C0\uC6E0\uC2B5\uB2C8\uB2E4 \u2014 ${slug}`,
39164
+ "\uCEF7\xB7\uBC84\uC804\xB7\uCEF7 \uC774\uBBF8\uC9C0\uC640 \uC774 \uD504\uB85C\uC81D\uD2B8\uC758 \uC790\uC0B0 \uD589\uC774 \uD568\uAED8 \uC9C0\uC6CC\uC84C\uACE0, \uD06C\uB808\uB527 \uC6D0\uC7A5\uC740 \uB0A8\uC2B5\uB2C8\uB2E4. \uB418\uB3CC\uB9B4 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.",
39165
+ "\uBAA9\uB85D\uC744 \uB2E4\uC2DC \uBCF4\uB824\uBA74 list_projects."
39166
+ ].join("\n")),
39167
+ structured: callableStructured(res)
39168
+ };
38544
39169
  });
38545
39170
  }
38546
39171
  function createProject(a = {}, deps = {}) {
@@ -39316,6 +39941,26 @@ function characterLine(c) {
39316
39941
  const photos = c.photos?.length ? `\uC0AC\uC9C4 ${c.photos.length}\uC7A5` : "\uC0AC\uC9C4 \uC5C6\uC74C";
39317
39942
  return `${c.name} [${c.id}] rev=${c.rev} \xB7 ${photos}${c.current_photo_id ? " (\uB300\uD45C \uC788\uC74C)" : ""}`;
39318
39943
  }
39944
+ function listBackgrounds(_a3 = {}, deps = {}) {
39945
+ return guarded(READ_ONLY, async () => {
39946
+ const base = resolveBaseUrl(deps.baseUrl);
39947
+ const out2 = await apiRequest(base, "/api/backgrounds", {}, deps);
39948
+ if (!out2.backgrounds?.length) {
39949
+ return {
39950
+ 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.",
39951
+ structured: callableStructured(out2)
39952
+ };
39953
+ }
39954
+ const lines = [`\uBC30\uACBD ${out2.backgrounds.length}\uC7A5 \u2014 pip.background_asset_id \uC5D0 id \uB97C \uB123\uC73C\uC138\uC694.`];
39955
+ for (const a of out2.backgrounds.slice(0, 20)) {
39956
+ const meta2 = a.meta ?? {};
39957
+ const label = typeof meta2.label === "string" && meta2.label || typeof meta2.filename === "string" && meta2.filename || "";
39958
+ lines.push(` ${a.id}: ${label} (${a.mime}, ${a.bytes} bytes)`);
39959
+ }
39960
+ if (out2.backgrounds.length > 20) lines.push(` \u2026\uC678 ${out2.backgrounds.length - 20}\uC7A5`);
39961
+ return { text: lines.join("\n"), structured: callableStructured(out2) };
39962
+ });
39963
+ }
39319
39964
  function listCharacters(_a3 = {}, deps = {}) {
39320
39965
  return guarded(READ_ONLY, async () => {
39321
39966
  const base = resolveBaseUrl(deps.baseUrl);
@@ -39536,6 +40181,10 @@ function dispatch(name, args, deps = {}) {
39536
40181
  return creditLedger(args, deps);
39537
40182
  case "democut_list_projects":
39538
40183
  return listProjects(args, deps);
40184
+ case "democut_get_project":
40185
+ return getProject(args, deps);
40186
+ case "democut_delete_project":
40187
+ return deleteProject(args, deps);
39539
40188
  case "democut_create_project":
39540
40189
  return createProject(args, deps);
39541
40190
  case "democut_get_options":
@@ -39605,6 +40254,8 @@ function dispatch(name, args, deps = {}) {
39605
40254
  return makeCharacterPhoto(args, deps);
39606
40255
  case "democut_delete_character":
39607
40256
  return deleteCharacter(args, deps);
40257
+ case "democut_list_backgrounds":
40258
+ return listBackgrounds(args, deps);
39608
40259
  default:
39609
40260
  return Promise.resolve({ isError: true, text: `\uC54C \uC218 \uC5C6\uB294 \uB3C4\uAD6C: ${name}` });
39610
40261
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "democut",
3
- "version": "0.6.33",
3
+ "version": "0.6.35",
4
4
  "description": "DemoCut 에이전트 CLI — device flow 로그인(RFC 8628) + 영상 생성",
5
5
  "license": "MIT",
6
6
  "author": "InfoGrab",