democut 1.0.156 → 1.0.158
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 +261 -1
- 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.
|
|
6919
|
+
var VERSION = "1.0.158";
|
|
6920
6920
|
|
|
6921
6921
|
// src/device-flow.ts
|
|
6922
6922
|
var DeviceFlowError = class extends Error {
|
|
@@ -12263,6 +12263,171 @@ var GENERATED_TOOLS = [
|
|
|
12263
12263
|
"openWorldHint": false
|
|
12264
12264
|
}
|
|
12265
12265
|
},
|
|
12266
|
+
{
|
|
12267
|
+
"name": "democut_estimate_video_analysis",
|
|
12268
|
+
"description": '\uC601\uC0C1 \uCE21\uC815 \uACAC\uC801(0\uC6D0). source \uB294 {"asset_id":\u2026} \uB610\uB294 \uACF5\uAC1C \uC720\uD29C\uBE0C {"url":\u2026} \uC774\uACE0 60\uCD08 \uC774\uD558\uB9CC \uB41C\uB2E4. \uB2E4\uC74C \uD638\uCD9C: democut_make_video_analysis.',
|
|
12269
|
+
"inputSchema": {
|
|
12270
|
+
"type": "object",
|
|
12271
|
+
"properties": {
|
|
12272
|
+
"slug": {
|
|
12273
|
+
"type": "string",
|
|
12274
|
+
"description": "\uD504\uB85C\uC81D\uD2B8 \uC2AC\uB7EC\uADF8(democut_list_projects)"
|
|
12275
|
+
},
|
|
12276
|
+
"source": {
|
|
12277
|
+
"type": "object",
|
|
12278
|
+
"description": "\uBAA8\uB378 AnalysisSource \u2014 \uBAA8\uC591\uC740 \uC790\uC6D0 democut://guide \uC640 democut_get_options \uAC00 \uB9D0\uD55C\uB2E4(\uC5EC\uAE30\uC11C\uB294 \uC81C\uC57D\uC744 \uAC78\uC9C0 \uC54A\uB294\uB2E4)"
|
|
12279
|
+
}
|
|
12280
|
+
},
|
|
12281
|
+
"required": [
|
|
12282
|
+
"slug",
|
|
12283
|
+
"source"
|
|
12284
|
+
],
|
|
12285
|
+
"additionalProperties": false
|
|
12286
|
+
},
|
|
12287
|
+
"outputSchema": {
|
|
12288
|
+
"type": "object",
|
|
12289
|
+
"properties": {
|
|
12290
|
+
"items": {
|
|
12291
|
+
"type": "array"
|
|
12292
|
+
},
|
|
12293
|
+
"notes": {
|
|
12294
|
+
"type": "array"
|
|
12295
|
+
},
|
|
12296
|
+
"total_krw": {
|
|
12297
|
+
"type": "integer"
|
|
12298
|
+
},
|
|
12299
|
+
"rate_version": {
|
|
12300
|
+
"type": "integer"
|
|
12301
|
+
},
|
|
12302
|
+
"balance_krw": {
|
|
12303
|
+
"type": "integer"
|
|
12304
|
+
},
|
|
12305
|
+
"balance_after_krw": {
|
|
12306
|
+
"type": "integer"
|
|
12307
|
+
},
|
|
12308
|
+
"can_afford": {
|
|
12309
|
+
"type": "boolean"
|
|
12310
|
+
},
|
|
12311
|
+
"mock": {
|
|
12312
|
+
"type": "boolean"
|
|
12313
|
+
},
|
|
12314
|
+
"provisional": {
|
|
12315
|
+
"type": "boolean"
|
|
12316
|
+
}
|
|
12317
|
+
},
|
|
12318
|
+
"required": [
|
|
12319
|
+
"total_krw",
|
|
12320
|
+
"rate_version",
|
|
12321
|
+
"balance_krw",
|
|
12322
|
+
"balance_after_krw",
|
|
12323
|
+
"can_afford"
|
|
12324
|
+
]
|
|
12325
|
+
},
|
|
12326
|
+
"annotations": {
|
|
12327
|
+
"readOnlyHint": false,
|
|
12328
|
+
"destructiveHint": false,
|
|
12329
|
+
"idempotentHint": false,
|
|
12330
|
+
"openWorldHint": false
|
|
12331
|
+
}
|
|
12332
|
+
},
|
|
12333
|
+
{
|
|
12334
|
+
"name": "democut_make_video_analysis",
|
|
12335
|
+
"description": "\uC601\uC0C1\uC758 \uB300\uC0AC\xB7\uC7A5\uBA74 \uACBD\uACC4\xB7\uD504\uB808\uC784 \uACA9\uC790\xB7\uC74C\uB7C9\uC744 \uC7B0\uB2E4. \uCEF7\uC740 \uB9CC\uB4E4\uC9C0 \uC54A\uB294\uB2E4. democut_estimate_video_analysis \uC758 total_krw \uB97C confirmed_cost_krw \uC5D0, rate_version \uC744 \uADF8\uB300\uB85C \uB123\uC5B4\uB77C. \uC5B4\uAE0B\uB098\uBA74 409 QUOTE_MISMATCH \uB2E4(\uACFC\uAE08 \uC5C6\uC74C). \uB2E4\uC74C \uD638\uCD9C: democut_wait_jobs, democut_get_video_analysis.",
|
|
12336
|
+
"inputSchema": {
|
|
12337
|
+
"type": "object",
|
|
12338
|
+
"properties": {
|
|
12339
|
+
"slug": {
|
|
12340
|
+
"type": "string",
|
|
12341
|
+
"description": "\uD504\uB85C\uC81D\uD2B8 \uC2AC\uB7EC\uADF8(democut_list_projects)"
|
|
12342
|
+
},
|
|
12343
|
+
"source": {
|
|
12344
|
+
"type": "object",
|
|
12345
|
+
"description": "\uBAA8\uB378 AnalysisSource \u2014 \uBAA8\uC591\uC740 \uC790\uC6D0 democut://guide \uC640 democut_get_options \uAC00 \uB9D0\uD55C\uB2E4(\uC5EC\uAE30\uC11C\uB294 \uC81C\uC57D\uC744 \uAC78\uC9C0 \uC54A\uB294\uB2E4)"
|
|
12346
|
+
},
|
|
12347
|
+
"confirmed_cost_krw": {
|
|
12348
|
+
"minimum": 0,
|
|
12349
|
+
"type": "integer"
|
|
12350
|
+
},
|
|
12351
|
+
"rate_version": {
|
|
12352
|
+
"minimum": 1,
|
|
12353
|
+
"type": "integer"
|
|
12354
|
+
}
|
|
12355
|
+
},
|
|
12356
|
+
"required": [
|
|
12357
|
+
"slug",
|
|
12358
|
+
"source",
|
|
12359
|
+
"confirmed_cost_krw",
|
|
12360
|
+
"rate_version"
|
|
12361
|
+
],
|
|
12362
|
+
"additionalProperties": false
|
|
12363
|
+
},
|
|
12364
|
+
"outputSchema": {
|
|
12365
|
+
"type": "object",
|
|
12366
|
+
"properties": {
|
|
12367
|
+
"job_id": {
|
|
12368
|
+
"type": "string"
|
|
12369
|
+
},
|
|
12370
|
+
"quote": {},
|
|
12371
|
+
"next_calls": {
|
|
12372
|
+
"type": "array"
|
|
12373
|
+
}
|
|
12374
|
+
},
|
|
12375
|
+
"required": [
|
|
12376
|
+
"job_id"
|
|
12377
|
+
]
|
|
12378
|
+
},
|
|
12379
|
+
"annotations": {
|
|
12380
|
+
"readOnlyHint": false,
|
|
12381
|
+
"destructiveHint": false,
|
|
12382
|
+
"idempotentHint": false,
|
|
12383
|
+
"openWorldHint": false
|
|
12384
|
+
}
|
|
12385
|
+
},
|
|
12386
|
+
{
|
|
12387
|
+
"name": "democut_get_video_analysis",
|
|
12388
|
+
"description": "\uD504\uB85C\uC81D\uD2B8\uC758 \uAC00\uC7A5 \uCD5C\uADFC \uC601\uC0C1 \uBD84\uC11D(0\uC6D0). \uC5C6\uC73C\uBA74 state=none.",
|
|
12389
|
+
"inputSchema": {
|
|
12390
|
+
"type": "object",
|
|
12391
|
+
"properties": {
|
|
12392
|
+
"slug": {
|
|
12393
|
+
"type": "string",
|
|
12394
|
+
"description": "\uD504\uB85C\uC81D\uD2B8 \uC2AC\uB7EC\uADF8(democut_list_projects)"
|
|
12395
|
+
}
|
|
12396
|
+
},
|
|
12397
|
+
"required": [
|
|
12398
|
+
"slug"
|
|
12399
|
+
],
|
|
12400
|
+
"additionalProperties": false
|
|
12401
|
+
},
|
|
12402
|
+
"outputSchema": {
|
|
12403
|
+
"type": "object",
|
|
12404
|
+
"properties": {
|
|
12405
|
+
"state": {
|
|
12406
|
+
"type": "string"
|
|
12407
|
+
},
|
|
12408
|
+
"id": {},
|
|
12409
|
+
"job_id": {},
|
|
12410
|
+
"source": {},
|
|
12411
|
+
"schema_version": {
|
|
12412
|
+
"type": "integer"
|
|
12413
|
+
},
|
|
12414
|
+
"measured": {},
|
|
12415
|
+
"created_at": {},
|
|
12416
|
+
"next_calls": {
|
|
12417
|
+
"type": "array"
|
|
12418
|
+
}
|
|
12419
|
+
},
|
|
12420
|
+
"required": [
|
|
12421
|
+
"state"
|
|
12422
|
+
]
|
|
12423
|
+
},
|
|
12424
|
+
"annotations": {
|
|
12425
|
+
"readOnlyHint": true,
|
|
12426
|
+
"destructiveHint": false,
|
|
12427
|
+
"idempotentHint": true,
|
|
12428
|
+
"openWorldHint": false
|
|
12429
|
+
}
|
|
12430
|
+
},
|
|
12266
12431
|
{
|
|
12267
12432
|
"name": "democut_get_audio_tracks",
|
|
12268
12433
|
"description": "\uADF8 \uC720\uD29C\uBE0C \uD074\uB9BD \uCEF7\uC758 \uC74C\uC131 \uD2B8\uB799(\uC5B8\uC5B4) \uBAA9\uB85D \u2014 \uC6D0\uBCF8\uACFC \uC720\uD29C\uBE0C \uC790\uB3D9 \uB354\uBE59(0\uC6D0). \uC8FC\uC18C\uB294 \uCEF7 \uCD08\uC548(draft_spec.source.url)\uC5D0\uC11C \uC77D\uB294\uB2E4 \u2014 \uC5C6\uC73C\uBA74 422. \uACE0\uB978 lang \uC744 draft_spec.source.audio_lang \uC5D0 \uB123\uC5B4 democut_put_cut_draft \uD558\uBA74 \uADF8 \uC5B8\uC5B4\uC758 \uC74C\uC131\uC73C\uB85C \uB9CC\uB4E0\uB2E4(\uBE44\uC6B0\uBA74 \uC6D0\uBCF8). \uC74C\uC131\uC744 \uBC14\uAFB8\uBA74 \uB2E4\uB978 \uC601\uC0C1\uC774\uB77C \uC774\uBBF8 \uB9CC\uB4E0 \uCEF7\uC740 dirty \uAC00 \uB41C\uB2E4. \uD2B8\uB799\uC740 \uC601\uC0C1\uB9C8\uB2E4 \uB2E4\uB974\uB2E4 \u2014 \uC8FC\uC18C\uB97C \uBC14\uAFB8\uBA74 \uB2E4\uC2DC \uC77D\uC5B4\uB77C. \uB2E4\uC74C \uD638\uCD9C: democut_put_cut_draft, democut_estimate_cuts.",
|
|
@@ -13919,6 +14084,24 @@ var TOOL_META = {
|
|
|
13919
14084
|
"method": "POST",
|
|
13920
14085
|
"path": "/api/projects/{slug}/cuts/{cut_id}/hook_scan/pick"
|
|
13921
14086
|
},
|
|
14087
|
+
"democut_estimate_video_analysis": {
|
|
14088
|
+
"cost": "quote",
|
|
14089
|
+
"group": "storyboard",
|
|
14090
|
+
"method": "POST",
|
|
14091
|
+
"path": "/api/projects/{slug}/video_analysis/estimate"
|
|
14092
|
+
},
|
|
14093
|
+
"democut_make_video_analysis": {
|
|
14094
|
+
"cost": "charge",
|
|
14095
|
+
"group": "storyboard",
|
|
14096
|
+
"method": "POST",
|
|
14097
|
+
"path": "/api/projects/{slug}/video_analysis"
|
|
14098
|
+
},
|
|
14099
|
+
"democut_get_video_analysis": {
|
|
14100
|
+
"cost": "none",
|
|
14101
|
+
"group": "storyboard",
|
|
14102
|
+
"method": "GET",
|
|
14103
|
+
"path": "/api/projects/{slug}/video_analysis"
|
|
14104
|
+
},
|
|
13922
14105
|
"democut_get_audio_tracks": {
|
|
13923
14106
|
"cost": "none",
|
|
13924
14107
|
"group": "storyboard",
|
|
@@ -16726,6 +16909,77 @@ function estimateHookScan(a = {}, deps = {}) {
|
|
|
16726
16909
|
return { text: lines.join("\n"), structured: callableStructured(out4) };
|
|
16727
16910
|
});
|
|
16728
16911
|
}
|
|
16912
|
+
var analysisPath = (slug, tail = "") => `/api/projects/${encodeURIComponent(slug)}/video_analysis${tail}`;
|
|
16913
|
+
function estimateVideoAnalysis(a = {}, deps = {}) {
|
|
16914
|
+
return guarded(READ_ONLY, async () => {
|
|
16915
|
+
const slug = needSlug(a);
|
|
16916
|
+
if (typeof slug !== "string") return slug;
|
|
16917
|
+
const base = resolveBaseUrl(deps.baseUrl);
|
|
16918
|
+
const out4 = await apiRequest(
|
|
16919
|
+
base,
|
|
16920
|
+
analysisPath(slug, "/estimate"),
|
|
16921
|
+
{ method: "POST", body: { source: a.source } },
|
|
16922
|
+
deps
|
|
16923
|
+
);
|
|
16924
|
+
const rows = (out4.items ?? []).flatMap((item) => item.rows ?? []).map((r) => `${r.display_name || r.key} ${krw(r.krw)}`).join(", ") || "\uD589 \uC5C6\uC74C";
|
|
16925
|
+
const lines = [
|
|
16926
|
+
`\uC601\uC0C1 \uCE21\uC815 \uACAC\uC801 (\uC694\uC728 v${out4.rate_version}) \u2014 \uBD80\uC791\uC6A9\uB3C4 \uACFC\uAE08\uB3C4 \uC5C6\uC2B5\uB2C8\uB2E4`,
|
|
16927
|
+
` ${rows}`,
|
|
16928
|
+
`\uCD1D\uC561(\uC0C1\uD55C) ${krw(out4.total_krw)} \xB7 \uC794\uC561 ${krw(out4.balance_krw)} \u2192 \uB0A8\uC744 \uC794\uC561 ${krw(out4.balance_after_krw)}`,
|
|
16929
|
+
"\uC18C\uB9AC \uD2B8\uB799\uC774 \uC5C6\uB294 \uC601\uC0C1\uC774\uBA74 \uC804\uC0AC \uD589\uC740 \uD658\uBD88\uB429\uB2C8\uB2E4.",
|
|
16930
|
+
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.",
|
|
16931
|
+
"\uC774 total_krw \uB97C confirmed_cost_krw \uC5D0, rate_version \uC744 **\uADF8\uB300\uB85C** democut_make_video_analysis \uC5D0 \uB123\uC73C\uC138\uC694."
|
|
16932
|
+
];
|
|
16933
|
+
if (out4.mock) lines.push("(mock \uB2E8\uAC00\uC785\uB2C8\uB2E4 \u2014 \uC2E4\uC81C \uCCAD\uAD6C\uC640 \uB2E4\uB97C \uC218 \uC788\uC2B5\uB2C8\uB2E4.)");
|
|
16934
|
+
return { text: lines.join("\n"), structured: callableStructured(out4) };
|
|
16935
|
+
});
|
|
16936
|
+
}
|
|
16937
|
+
function makeVideoAnalysis(a = {}, deps = {}) {
|
|
16938
|
+
return guarded(SUBMITTING, async () => {
|
|
16939
|
+
const slug = needSlug(a);
|
|
16940
|
+
if (typeof slug !== "string") return slug;
|
|
16941
|
+
const base = resolveBaseUrl(deps.baseUrl);
|
|
16942
|
+
const out4 = await apiRequest(
|
|
16943
|
+
base,
|
|
16944
|
+
analysisPath(slug),
|
|
16945
|
+
{ method: "POST", body: { source: a.source, confirmed_cost_krw: a.confirmed_cost_krw, rate_version: a.rate_version } },
|
|
16946
|
+
deps
|
|
16947
|
+
);
|
|
16948
|
+
const text = `\uC601\uC0C1\uC744 \uC7AC\uB294 \uC911\uC785\uB2C8\uB2E4 \u2014 ${out4.job_id} (\uCD5C\uB300 ${krw(out4.quote?.total_krw ?? 0)}). \uCEF7\uC740 \uB9CC\uB4E4\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
|
|
16949
|
+
\uB2E4\uC74C \uD638\uCD9C: democut_wait_jobs, democut_get_video_analysis`;
|
|
16950
|
+
return { text, structured: callableStructured(out4) };
|
|
16951
|
+
});
|
|
16952
|
+
}
|
|
16953
|
+
function formatAnalysis(view) {
|
|
16954
|
+
if (view.state === "none") return "\uC774 \uD504\uB85C\uC81D\uD2B8\uC5D0\uB294 \uC601\uC0C1 \uBD84\uC11D\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. democut_estimate_video_analysis \uB85C \uC2DC\uC791\uD558\uC138\uC694.";
|
|
16955
|
+
if (view.state === "measuring") return `\uCE21\uC815 \uC911\uC785\uB2C8\uB2E4 \u2014 ${view.job_id}. democut_wait_jobs \uB85C \uAE30\uB2E4\uB9AC\uC138\uC694.`;
|
|
16956
|
+
const m = view.measured;
|
|
16957
|
+
if (view.state === "failed" || !m) return `\uCE21\uC815\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4 \u2014 ${view.job_id}. \uCCAD\uAD6C\uC561\uC740 \uD658\uBD88\uB429\uB2C8\uB2E4.`;
|
|
16958
|
+
const lines = [
|
|
16959
|
+
`\uC601\uC0C1 \uCE21\uC815 ${view.id}: ${m.duration_ms}ms \xB7 ${m.width}x${m.height} \xB7 \uC5B8\uC5B4 ${m.language || "\uC5C6\uC74C"}`,
|
|
16960
|
+
`\uC7A5\uBA74 ${m.shots.length}\uAC1C:`,
|
|
16961
|
+
...m.shots.map((s) => ` ${s.start_ms}-${s.end_ms}`),
|
|
16962
|
+
`\uB300\uC0AC: ${m.words.map((w) => `${w.text}@${w.start_ms}`).join(" ") || "\uC5C6\uC74C"}`,
|
|
16963
|
+
`\uD504\uB808\uC784 \uACA9\uC790 ${m.sheets.length}\uC7A5(\uC67C\uCABD \uC704\uBD80\uD130 \uAC00\uB85C\uB85C \uC77D\uB294\uB2E4):`,
|
|
16964
|
+
...m.sheets.map((s) => ` ${s.url || s.asset_id} \xB7 \uCE78 \uC2DC\uAC01 ${JSON.stringify(s.cells_ms)}`)
|
|
16965
|
+
];
|
|
16966
|
+
if (m.audio.has_audio) {
|
|
16967
|
+
const silences = m.audio.silences.map((s) => `${s.start_ms}-${s.end_ms}`).join(", ");
|
|
16968
|
+
lines.push(`\uBB34\uC74C: ${silences || "\uC5C6\uC74C"}`, `\uC74C\uB7C9(LUFS, ${m.audio.step_ms}ms \uAC04\uACA9): ${JSON.stringify(m.audio.loudness_lufs)}`);
|
|
16969
|
+
} else {
|
|
16970
|
+
lines.push("\uC18C\uB9AC \uD2B8\uB799\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. \uC804\uC0AC \uAE08\uC561\uC740 \uD658\uBD88\uB429\uB2C8\uB2E4.");
|
|
16971
|
+
}
|
|
16972
|
+
return lines.join("\n");
|
|
16973
|
+
}
|
|
16974
|
+
function getVideoAnalysis(a = {}, deps = {}) {
|
|
16975
|
+
return guarded(READ_ONLY, async () => {
|
|
16976
|
+
const slug = needSlug(a);
|
|
16977
|
+
if (typeof slug !== "string") return slug;
|
|
16978
|
+
const base = resolveBaseUrl(deps.baseUrl);
|
|
16979
|
+
const out4 = await apiRequest(base, analysisPath(slug), {}, deps);
|
|
16980
|
+
return { text: formatAnalysis(out4), structured: callableStructured(out4) };
|
|
16981
|
+
});
|
|
16982
|
+
}
|
|
16729
16983
|
function makeHookScan(a = {}, deps = {}) {
|
|
16730
16984
|
return guarded(SUBMITTING, async () => {
|
|
16731
16985
|
const slug = needSlug(a);
|
|
@@ -17269,6 +17523,12 @@ function dispatch(name, args, deps = {}) {
|
|
|
17269
17523
|
return download(args, deps);
|
|
17270
17524
|
case "democut_download_project":
|
|
17271
17525
|
return downloadProject(args, deps);
|
|
17526
|
+
case "democut_estimate_video_analysis":
|
|
17527
|
+
return estimateVideoAnalysis(args, deps);
|
|
17528
|
+
case "democut_make_video_analysis":
|
|
17529
|
+
return makeVideoAnalysis(args, deps);
|
|
17530
|
+
case "democut_get_video_analysis":
|
|
17531
|
+
return getVideoAnalysis(args, deps);
|
|
17272
17532
|
case "democut_estimate_hook_scan":
|
|
17273
17533
|
return estimateHookScan(args, deps);
|
|
17274
17534
|
case "democut_make_hook_scan":
|