democut 0.6.17 → 0.6.19
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.
- package/dist/cli.js +141 -22
- 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.
|
|
6919
|
+
var VERSION = "0.6.19";
|
|
6920
6920
|
|
|
6921
6921
|
// src/device-flow.ts
|
|
6922
6922
|
var DeviceFlowError = class extends Error {
|
|
@@ -18343,6 +18343,74 @@ var GENERATED_TOOLS = [
|
|
|
18343
18343
|
"idempotentHint": true,
|
|
18344
18344
|
"openWorldHint": false
|
|
18345
18345
|
}
|
|
18346
|
+
},
|
|
18347
|
+
{
|
|
18348
|
+
"name": "democut_add_character_photo",
|
|
18349
|
+
"description": "\uC62C\uB9B0 \uC774\uBBF8\uC9C0\uB97C \uC0AC\uC9C4 \uD310\uC73C\uB85C \uCD94\uAC00\uD55C\uB2E4(0\uC6D0). \uC18C\uAE09 \uC5C6\uC74C.",
|
|
18350
|
+
"inputSchema": {
|
|
18351
|
+
"type": "object",
|
|
18352
|
+
"properties": {
|
|
18353
|
+
"character_id": {
|
|
18354
|
+
"type": "string",
|
|
18355
|
+
"description": "\uC544\uBC14\uD0C0 id(chr_\u2026)"
|
|
18356
|
+
},
|
|
18357
|
+
"asset_id": {
|
|
18358
|
+
"title": "Asset Id",
|
|
18359
|
+
"type": "string"
|
|
18360
|
+
},
|
|
18361
|
+
"note": {
|
|
18362
|
+
"anyOf": [
|
|
18363
|
+
{
|
|
18364
|
+
"type": "string"
|
|
18365
|
+
},
|
|
18366
|
+
{
|
|
18367
|
+
"type": "null"
|
|
18368
|
+
}
|
|
18369
|
+
],
|
|
18370
|
+
"default": null,
|
|
18371
|
+
"title": "Note"
|
|
18372
|
+
}
|
|
18373
|
+
},
|
|
18374
|
+
"required": [
|
|
18375
|
+
"character_id",
|
|
18376
|
+
"asset_id"
|
|
18377
|
+
],
|
|
18378
|
+
"additionalProperties": false
|
|
18379
|
+
},
|
|
18380
|
+
"annotations": {
|
|
18381
|
+
"readOnlyHint": false,
|
|
18382
|
+
"destructiveHint": false,
|
|
18383
|
+
"idempotentHint": false,
|
|
18384
|
+
"openWorldHint": false
|
|
18385
|
+
}
|
|
18386
|
+
},
|
|
18387
|
+
{
|
|
18388
|
+
"name": "democut_select_character_photo",
|
|
18389
|
+
"description": "\uB300\uD45C \uC0AC\uC9C4\uC744 \uACE0\uB978\uB2E4(\uC774\uBBF8 \uB9CC\uB4E0 \uCEF7\uC5D0\uB294 \uC18C\uAE09\uD558\uC9C0 \uC54A\uB294\uB2E4).",
|
|
18390
|
+
"inputSchema": {
|
|
18391
|
+
"type": "object",
|
|
18392
|
+
"properties": {
|
|
18393
|
+
"character_id": {
|
|
18394
|
+
"type": "string",
|
|
18395
|
+
"description": "\uC544\uBC14\uD0C0 id(chr_\u2026)"
|
|
18396
|
+
},
|
|
18397
|
+
"photo_id": {
|
|
18398
|
+
"title": "Photo Id",
|
|
18399
|
+
"type": "string"
|
|
18400
|
+
}
|
|
18401
|
+
},
|
|
18402
|
+
"required": [
|
|
18403
|
+
"character_id",
|
|
18404
|
+
"photo_id"
|
|
18405
|
+
],
|
|
18406
|
+
"additionalProperties": false
|
|
18407
|
+
},
|
|
18408
|
+
"annotations": {
|
|
18409
|
+
"readOnlyHint": false,
|
|
18410
|
+
"destructiveHint": false,
|
|
18411
|
+
"idempotentHint": true,
|
|
18412
|
+
"openWorldHint": false
|
|
18413
|
+
}
|
|
18346
18414
|
}
|
|
18347
18415
|
];
|
|
18348
18416
|
|
|
@@ -18825,19 +18893,6 @@ function listProjects(a = {}, deps = {}) {
|
|
|
18825
18893
|
return { text: lines.join("\n") };
|
|
18826
18894
|
});
|
|
18827
18895
|
}
|
|
18828
|
-
var PROJECT_FIELD_DEFAULTS = {
|
|
18829
|
-
ratio: "16:9",
|
|
18830
|
-
resolution: "1080p",
|
|
18831
|
-
folder_id: null,
|
|
18832
|
-
defaults: null
|
|
18833
|
-
};
|
|
18834
|
-
function unsupportedProjectFields(a) {
|
|
18835
|
-
const given = a;
|
|
18836
|
-
return Object.keys(PROJECT_FIELD_DEFAULTS).filter((key) => {
|
|
18837
|
-
const v = given[key];
|
|
18838
|
-
return v !== void 0 && v !== null && v !== PROJECT_FIELD_DEFAULTS[key];
|
|
18839
|
-
});
|
|
18840
|
-
}
|
|
18841
18896
|
function createProject(a = {}, deps = {}) {
|
|
18842
18897
|
return guarded(READ_ONLY, async () => {
|
|
18843
18898
|
const title = (a.title ?? "").trim();
|
|
@@ -18847,24 +18902,38 @@ function createProject(a = {}, deps = {}) {
|
|
|
18847
18902
|
text: "title \uC774 \uD544\uC694\uD569\uB2C8\uB2E4. \uC0AC\uC6A9\uC790\uAC00 \uC54C\uC544\uBCFC \uC218 \uC788\uB294 \uD504\uB85C\uC81D\uD2B8 \uC774\uB984\uC744 \uB123\uC5B4 \uB2E4\uC2DC \uD638\uCD9C\uD558\uC138\uC694."
|
|
18848
18903
|
};
|
|
18849
18904
|
}
|
|
18850
|
-
const unsupported = unsupportedProjectFields(a);
|
|
18851
|
-
if (unsupported.length > 0) {
|
|
18852
|
-
return {
|
|
18853
|
-
isError: true,
|
|
18854
|
-
text: `${unsupported.join(", ")} \uC740 \uC544\uC9C1 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4(\uAE30\uBCF8\uAC12\uB9CC \uAC00\uB2A5). \uADF8 \uC778\uC790\uB97C \uBE7C\uACE0 \uB2E4\uC2DC \uD638\uCD9C\uD558\uBA74 ${PROJECT_FIELD_DEFAULTS.ratio}\xB7${PROJECT_FIELD_DEFAULTS.resolution} \uB85C \uB9CC\uB4E4\uC5B4\uC9D1\uB2C8\uB2E4.`
|
|
18855
|
-
};
|
|
18856
|
-
}
|
|
18857
18905
|
const base = resolveBaseUrl(deps.baseUrl);
|
|
18858
18906
|
const voiceId = await defaultVoiceId(base, deps);
|
|
18859
18907
|
const p = await create(
|
|
18860
18908
|
base,
|
|
18861
|
-
{
|
|
18909
|
+
{
|
|
18910
|
+
title,
|
|
18911
|
+
voice_id: voiceId,
|
|
18912
|
+
external_ref: `mcp:project:${title}`,
|
|
18913
|
+
...a.ratio !== void 0 ? { ratio: a.ratio } : {},
|
|
18914
|
+
...a.resolution !== void 0 ? { resolution: a.resolution } : {},
|
|
18915
|
+
...a.folder_id !== void 0 ? { folder_id: a.folder_id } : {},
|
|
18916
|
+
...a.defaults !== void 0 ? { defaults: a.defaults } : {}
|
|
18917
|
+
},
|
|
18862
18918
|
deps
|
|
18863
18919
|
);
|
|
18920
|
+
const asked = a.ratio;
|
|
18921
|
+
const mismatch = asked && p.ratio && p.ratio !== asked;
|
|
18864
18922
|
return {
|
|
18865
18923
|
text: [
|
|
18866
18924
|
`\uD504\uB85C\uC81D\uD2B8 \uC900\uBE44\uB428 \u2014 slug: ${p.slug}`,
|
|
18867
18925
|
`\uC81C\uBAA9: ${p.title}`,
|
|
18926
|
+
// ⚠️ 롤링 중 옛 api 는 이 둘을 내지 않는다 — 없으면 **말하지 않는다**(undefined 를 찍으면
|
|
18927
|
+
// 모델이 그것을 사실로 읽는다).
|
|
18928
|
+
...p.ratio && p.resolution ? [
|
|
18929
|
+
`\uBE44\uC728\xB7\uD574\uC0C1\uB3C4: ${p.ratio} \xB7 ${p.resolution}` + (p.ratio !== "16:9" ? " (\uBE44\uC728\uC740 \uC774\uD6C4 \uBC14\uAFC0 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4)" : "")
|
|
18930
|
+
] : [],
|
|
18931
|
+
...mismatch ? [
|
|
18932
|
+
`\u26A0\uFE0F ${asked} \uB85C \uC694\uCCAD\uD588\uC9C0\uB9CC ${p.ratio} \uB85C \uB9CC\uB4E4\uC5B4\uC84C\uC2B5\uB2C8\uB2E4 \u2014 \uC11C\uBC84\uAC00 \uC544\uC9C1 \uC774 \uC635\uC158\uC744 \uBC1B\uC9C0 \uC54A\uB294 \uBC84\uC804\uC77C \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uBE44\uC728\uC740 \uBC14\uAFC0 \uC218 \uC5C6\uC73C\uB2C8, ${asked} \uAC00 \uD544\uC694\uD558\uBA74 \uC774 \uD504\uB85C\uC81D\uD2B8\uB97C \uC4F0\uC9C0 \uB9D0\uACE0 \uC0AC\uC6A9\uC790\uC5D0\uAC8C \uC54C\uB9B0 \uB4A4 \uC7A0\uC2DC \uD6C4 \uB2E4\uC2DC \uB9CC\uB4DC\uC138\uC694.`
|
|
18933
|
+
] : [],
|
|
18934
|
+
...asked && !p.ratio ? [
|
|
18935
|
+
`\u26A0\uFE0F \uC11C\uBC84\uAC00 \uBE44\uC728\uC744 \uC54C\uB824\uC8FC\uC9C0 \uC54A\uC544 ${asked} \uB85C \uB9CC\uB4E4\uC5B4\uC84C\uB294\uC9C0 \uD655\uC778\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 (\uC61B \uBC84\uC804\uC77C \uC218 \uC788\uC2B5\uB2C8\uB2E4). democut_get_options \uB85C \uD655\uC778\uD558\uC138\uC694.`
|
|
18936
|
+
] : [],
|
|
18868
18937
|
"",
|
|
18869
18938
|
"\uD504\uB85C\uC81D\uD2B8\uB97C \uC694\uAD6C\uD558\uB294 \uB3C4\uAD6C\uC758 project_slug \uC5D0 \uC704 slug \uB97C \uADF8\uB300\uB85C \uB123\uC73C\uC138\uC694.",
|
|
18870
18939
|
"\uAC19\uC740 \uC81C\uBAA9\uC73C\uB85C \uC774 \uB3C4\uAD6C\uB97C \uB2E4\uC2DC \uBD88\uB7EC\uB3C4 \uC0C8\uB85C \uB9CC\uB4E4\uC9C0 \uC54A\uACE0 \uC774 \uD504\uB85C\uC81D\uD2B8\uAC00 \uB098\uC635\uB2C8\uB2E4."
|
|
@@ -19244,6 +19313,52 @@ function putCharacter(a = {}, deps = {}) {
|
|
|
19244
19313
|
return { text: `\uC544\uBC14\uD0C0\uB97C \uBC14\uAFE8\uC2B5\uB2C8\uB2E4: ${characterLine(out2)}` };
|
|
19245
19314
|
});
|
|
19246
19315
|
}
|
|
19316
|
+
function addCharacterPhoto(a = {}, deps = {}) {
|
|
19317
|
+
return guarded(READ_ONLY, async () => {
|
|
19318
|
+
const id = (a.character_id ?? "").trim();
|
|
19319
|
+
if (!id) return { isError: true, text: "character_id \uAC00 \uD544\uC694\uD569\uB2C8\uB2E4." };
|
|
19320
|
+
const assetId = (a.asset_id ?? "").trim();
|
|
19321
|
+
if (!assetId) {
|
|
19322
|
+
return {
|
|
19323
|
+
isError: true,
|
|
19324
|
+
text: "asset_id \uAC00 \uD544\uC694\uD569\uB2C8\uB2E4 \u2014 democut_upload_asset \uC73C\uB85C \uC774\uBBF8\uC9C0\uB97C \uBA3C\uC800 \uC62C\uB9AC\uC138\uC694."
|
|
19325
|
+
};
|
|
19326
|
+
}
|
|
19327
|
+
const base = resolveBaseUrl(deps.baseUrl);
|
|
19328
|
+
const out2 = await apiRequest(
|
|
19329
|
+
base,
|
|
19330
|
+
`/api/characters/${encodeURIComponent(id)}/photos`,
|
|
19331
|
+
{ method: "POST", body: { asset_id: assetId, ...a.note ? { note: a.note } : {} } },
|
|
19332
|
+
deps
|
|
19333
|
+
);
|
|
19334
|
+
const added = out2.photos?.[out2.photos.length - 1];
|
|
19335
|
+
const tail = added && out2.current_photo_id === added.id ? " \uCCAB \uC0AC\uC9C4\uC774\uB77C \uB300\uD45C\uB85C \uC815\uD588\uC2B5\uB2C8\uB2E4." : "";
|
|
19336
|
+
return { text: `\uC0AC\uC9C4\uC744 \uCD94\uAC00\uD588\uC2B5\uB2C8\uB2E4: ${characterLine(out2)}${tail}` };
|
|
19337
|
+
});
|
|
19338
|
+
}
|
|
19339
|
+
function selectCharacterPhoto(a = {}, deps = {}) {
|
|
19340
|
+
return guarded(READ_ONLY, async () => {
|
|
19341
|
+
const id = (a.character_id ?? "").trim();
|
|
19342
|
+
if (!id) return { isError: true, text: "character_id \uAC00 \uD544\uC694\uD569\uB2C8\uB2E4." };
|
|
19343
|
+
const photoId = (a.photo_id ?? "").trim();
|
|
19344
|
+
if (!photoId) {
|
|
19345
|
+
return {
|
|
19346
|
+
isError: true,
|
|
19347
|
+
text: "photo_id \uAC00 \uD544\uC694\uD569\uB2C8\uB2E4 \u2014 democut_get_character \uC758 photos[].id \uB97C \uC4F0\uC138\uC694."
|
|
19348
|
+
};
|
|
19349
|
+
}
|
|
19350
|
+
const base = resolveBaseUrl(deps.baseUrl);
|
|
19351
|
+
const out2 = await apiRequest(
|
|
19352
|
+
base,
|
|
19353
|
+
`/api/characters/${encodeURIComponent(id)}/photos/current`,
|
|
19354
|
+
{ method: "PUT", body: { photo_id: photoId } },
|
|
19355
|
+
deps
|
|
19356
|
+
);
|
|
19357
|
+
return {
|
|
19358
|
+
text: `\uB300\uD45C \uC0AC\uC9C4\uC744 \uBC14\uAFE8\uC2B5\uB2C8\uB2E4: ${characterLine(out2)} \u2014 \uC774\uBBF8 \uB9CC\uB4E0 \uCEF7\uC740 \uADF8\uB300\uB85C\uC785\uB2C8\uB2E4.`
|
|
19359
|
+
};
|
|
19360
|
+
});
|
|
19361
|
+
}
|
|
19247
19362
|
function deleteCharacter(a = {}, deps = {}) {
|
|
19248
19363
|
return guarded(READ_ONLY, async () => {
|
|
19249
19364
|
const id = (a.character_id ?? "").trim();
|
|
@@ -19302,6 +19417,10 @@ function dispatch(name, args, deps = {}) {
|
|
|
19302
19417
|
return getCharacter(args, deps);
|
|
19303
19418
|
case "democut_put_character":
|
|
19304
19419
|
return putCharacter(args, deps);
|
|
19420
|
+
case "democut_add_character_photo":
|
|
19421
|
+
return addCharacterPhoto(args, deps);
|
|
19422
|
+
case "democut_select_character_photo":
|
|
19423
|
+
return selectCharacterPhoto(args, deps);
|
|
19305
19424
|
case "democut_delete_character":
|
|
19306
19425
|
return deleteCharacter(args, deps);
|
|
19307
19426
|
default:
|