democut 1.0.23 → 1.0.24

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 +3081 -237
  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.23";
6919
+ var VERSION = "1.0.24";
6920
6920
 
6921
6921
  // src/device-flow.ts
6922
6922
  var DeviceFlowError = class extends Error {
@@ -14348,6 +14348,74 @@ var GENERATED_TOOLS = [
14348
14348
  "title": "FromVersionImageRef",
14349
14349
  "type": "object"
14350
14350
  },
14351
+ "HookCandidate": {
14352
+ "description": "\uD6C4\uD0B9 \uAD6C\uAC04 \uD6C4\uBCF4 \uD558\uB098 \u2014 \uC0AC\uB78C\uC774 \uBAA9\uB85D\uC5D0\uC11C \uBCF4\uACE0 \uACE0\uB974\uB294 \uB2E8\uC704(\uC20F\uCE20 \uC7AC\uC124\uACC4 2026-09-22).\n\n\u2605\u2605 `title` \uACFC `reasoning` \uC740 **\uB2E4\uB978 \uAC83**\uC774\uB2E4(\uC61B `clip_extractor_service` \uC758 \uC5ED\uD560 \uBD84\uB2F4):\n `title` \uC740 **\uD6C4\uD06C \uCE74\uD53C**(\uACE0\uB974\uBA74 \uADF8\uB300\uB85C \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4), `reasoning` \uC740 **\uC65C \uACE8\uB790\uB294\uC9C0**\uB2E4.\n\u2605\u2605 `score` \uB294 **\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uAC15\uB3C4**\uB2E4 \u2014 \uC808\uB300 \uAE30\uC900\uC774 \uC5C6\uC5B4 \uB2E4\uB978 \uC601\uC0C1\uC758 \uC810\uC218\uC640 \uACAC\uC8FC\uBA74 \uC548 \uB41C\uB2E4.\n \uBAA9\uB85D\uC740 \uC774 \uAC12\uC758 \uB0B4\uB9BC\uCC28\uC21C\uC774\uACE0, \uADF8\uB798\uC11C **\uCCAB\uC9F8\uAC00 \uACE7 \uAC00\uC7A5 \uC88B\uC740 \uAC83**\uC774\uB2E4(\uC81C\uC548\uC774 \uC790\uB3D9\uC73C\uB85C \uACE0\uB974\uB294 \uAC83\uB3C4 \uADF8\uAC83).",
14353
+ "properties": {
14354
+ "start_s": {
14355
+ "minimum": 0,
14356
+ "title": "Start S",
14357
+ "type": "number"
14358
+ },
14359
+ "end_s": {
14360
+ "exclusiveMinimum": 0,
14361
+ "title": "End S",
14362
+ "type": "number"
14363
+ },
14364
+ "title": {
14365
+ "default": "",
14366
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
14367
+ "title": "Title",
14368
+ "type": "string"
14369
+ },
14370
+ "score": {
14371
+ "default": 0,
14372
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
14373
+ "maximum": 100,
14374
+ "minimum": 0,
14375
+ "title": "Score",
14376
+ "type": "integer"
14377
+ },
14378
+ "reasoning": {
14379
+ "default": "",
14380
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
14381
+ "title": "Reasoning",
14382
+ "type": "string"
14383
+ }
14384
+ },
14385
+ "required": [
14386
+ "start_s",
14387
+ "end_s"
14388
+ ],
14389
+ "title": "HookCandidate",
14390
+ "type": "object"
14391
+ },
14392
+ "HookCandidates": {
14393
+ "description": "\uD55C \uCEF7\uC758 \uD0D0\uC0C9 \uACB0\uACFC \u2014 \uD6C4\uBCF4 \uBAA9\uB85D + **\uADF8\uB54C\uC758 \uC8FC\uC18C**.\n\n\u2605\u2605 `url` \uC744 \uD568\uAED8 \uB2F4\uB294 \uC774\uC720: \uC8FC\uC18C\uB97C \uBC14\uAFD4\uB3C4 \uD6C4\uBCF4\uB294 \uC9C0\uC6B0\uC9C0 \uC54A\uC73C\uBBC0\uB85C(\uC0AC\uC6A9\uC790 \uACB0\uC815) \uD654\uBA74\uC774 \u300C\uC774\uAC74 \uB2E4\uB978\n \uC601\uC0C1\uC758 \uAD6C\uAC04\uC774\uB2E4\u300D \uB97C \uC54C \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4. \uC0C8 \uC8FC\uC18C\uB85C \uB2E4\uC2DC \uCC3E\uC73C\uBA74 \uD1B5\uC9F8\uB85C \uB36E\uC778\uB2E4.\n\u2605 `items` \uAC00 **\uBE48 \uBC30\uC5F4**\uC778 \uAC83\uACFC `hook_candidates` \uC790\uCCB4\uAC00 \uC5C6\uB294 \uAC83\uC740 \uB2E4\uB978 \uB73B\uC774\uB2E4 \u2014 \uC804\uC790\uB294\n \u300C\uCC3E\uC558\uB294\uB370 \uC4F8 \uB9CC\uD55C \uAC83\uC774 \uC5C6\uC5C8\uB2E4\u300D, \uD6C4\uC790\uB294 \u300C\uC544\uC9C1 \uCC3E\uC740 \uC801 \uC5C6\uB2E4\u300D.",
14394
+ "properties": {
14395
+ "url": {
14396
+ "title": "Url",
14397
+ "type": "string"
14398
+ },
14399
+ "found_at": {
14400
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
14401
+ "title": "Found At",
14402
+ "type": "string"
14403
+ },
14404
+ "items": {
14405
+ "items": {
14406
+ "$ref": "#/$defs/HookCandidate"
14407
+ },
14408
+ "title": "Items",
14409
+ "type": "array"
14410
+ }
14411
+ },
14412
+ "required": [
14413
+ "url",
14414
+ "found_at"
14415
+ ],
14416
+ "title": "HookCandidates",
14417
+ "type": "object"
14418
+ },
14351
14419
  "JobError": {
14352
14420
  "description": '\uC7A1 \uC2E4\uD328\uC758 \uB300\uC678 \uC5BC\uAD74. \u2605\u2605 **\uB7F0\uD0C0\uC784\uC758 \uBAA8\uB4E0 \uC2E4\uD328 \uBD84\uAE30\uAC00 \uB9CC\uB4DC\uB294 \uBD09\uD22C\uB97C \uBC1B\uC544\uB0BC \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4** \u2014\n`to_view` \uAC00 `JobError(**rec.error)` \uB85C \uBCC0\uD658\uD558\uB294\uB370 \uC774 \uBAA8\uB378\uC740 `extra="forbid"` \uB77C, \uBD09\uD22C\uC5D0\uB9CC \uC788\uACE0\n\uC5EC\uAE30 \uC5C6\uB294 \uD0A4\uAC00 \uD558\uB098\uB77C\uB3C4 \uC788\uC73C\uBA74 **\uADF8 \uC7A1\uC758 \uC870\uD68C\uAC00 500** \uC774 \uB41C\uB2E4(2026-09-10 \uC2E4\uCE21: \uB2E4\uC12F \uACBD\uB85C \uC911 \uB137).\n\n\u26A0\uFE0F \uADF8 \uACB0\uD568\uC740 \uC870\uC6A9\uD558\uB2E4 \u2014 \uBD09\uD22C\uB97C *\uB9CC\uB4DC\uB294* \uACF3(`jobs/runtime.py` \uC758 except \uBD84\uAE30)\uACFC *\uC77D\uB294* \uACF3\uC774\n\uAC08\uB824 \uC788\uC5B4 \uC5B4\uB290 \uCABD \uD14C\uC2A4\uD2B8\uB3C4 \uC655\uBCF5\uC744 \uBCF4\uC9C0 \uC54A\uC558\uB2E4. \uADF8\uB798\uC11C `cause`(\uC7AC\uC2DC\uB3C4 \uC18C\uC9C4)\uC640 `data`(FatalError\xB7\nDemoCutError)\uAC00 \uACC4\uC57D \uBC16\uC5D0 \uC788\uB294 \uCC44\uB85C \uC624\uB798 \uC0B4\uC544\uB0A8\uC558\uACE0, **\uC2E4\uD328\uD55C \uC7A1\uC77C\uC218\uB85D \uC870\uD68C\uAC00 \uC548 \uB418\uB294** \uC0C1\uD0DC\uC600\uB2E4\n(\uB3C8\uC774 \uB098\uAC04 \uC790\uB9AC\uC758 \uC548\uB0B4\uB97C \uADF8 \uC870\uD68C\uB85C \uC804\uD558\uB294\uB370 \uB9D0\uC774\uB2E4). \uAC00\uB4DC\uB294 \uB124 \uBD84\uAE30\uB97C \uC2E4\uC81C\uB85C \uD0DC\uC6CC \uC655\uBCF5\uC2DC\uD0A8\uB2E4\n(`test_every_failure_envelope_survives_the_view`).',
14353
14421
  "properties": {
@@ -15122,6 +15190,17 @@ var GENERATED_TOOLS = [
15122
15190
  "title": "Images",
15123
15191
  "type": "array"
15124
15192
  },
15193
+ "hook_candidates": {
15194
+ "anyOf": [
15195
+ {
15196
+ "$ref": "#/$defs/HookCandidates"
15197
+ },
15198
+ {
15199
+ "type": "null"
15200
+ }
15201
+ ],
15202
+ "default": null
15203
+ },
15125
15204
  "versions": {
15126
15205
  "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
15127
15206
  "items": {
@@ -16525,6 +16604,74 @@ var GENERATED_TOOLS = [
16525
16604
  "title": "FromVersionImageRef",
16526
16605
  "type": "object"
16527
16606
  },
16607
+ "HookCandidate": {
16608
+ "description": "\uD6C4\uD0B9 \uAD6C\uAC04 \uD6C4\uBCF4 \uD558\uB098 \u2014 \uC0AC\uB78C\uC774 \uBAA9\uB85D\uC5D0\uC11C \uBCF4\uACE0 \uACE0\uB974\uB294 \uB2E8\uC704(\uC20F\uCE20 \uC7AC\uC124\uACC4 2026-09-22).\n\n\u2605\u2605 `title` \uACFC `reasoning` \uC740 **\uB2E4\uB978 \uAC83**\uC774\uB2E4(\uC61B `clip_extractor_service` \uC758 \uC5ED\uD560 \uBD84\uB2F4):\n `title` \uC740 **\uD6C4\uD06C \uCE74\uD53C**(\uACE0\uB974\uBA74 \uADF8\uB300\uB85C \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4), `reasoning` \uC740 **\uC65C \uACE8\uB790\uB294\uC9C0**\uB2E4.\n\u2605\u2605 `score` \uB294 **\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uAC15\uB3C4**\uB2E4 \u2014 \uC808\uB300 \uAE30\uC900\uC774 \uC5C6\uC5B4 \uB2E4\uB978 \uC601\uC0C1\uC758 \uC810\uC218\uC640 \uACAC\uC8FC\uBA74 \uC548 \uB41C\uB2E4.\n \uBAA9\uB85D\uC740 \uC774 \uAC12\uC758 \uB0B4\uB9BC\uCC28\uC21C\uC774\uACE0, \uADF8\uB798\uC11C **\uCCAB\uC9F8\uAC00 \uACE7 \uAC00\uC7A5 \uC88B\uC740 \uAC83**\uC774\uB2E4(\uC81C\uC548\uC774 \uC790\uB3D9\uC73C\uB85C \uACE0\uB974\uB294 \uAC83\uB3C4 \uADF8\uAC83).",
16609
+ "properties": {
16610
+ "start_s": {
16611
+ "minimum": 0,
16612
+ "title": "Start S",
16613
+ "type": "number"
16614
+ },
16615
+ "end_s": {
16616
+ "exclusiveMinimum": 0,
16617
+ "title": "End S",
16618
+ "type": "number"
16619
+ },
16620
+ "title": {
16621
+ "default": "",
16622
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
16623
+ "title": "Title",
16624
+ "type": "string"
16625
+ },
16626
+ "score": {
16627
+ "default": 0,
16628
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
16629
+ "maximum": 100,
16630
+ "minimum": 0,
16631
+ "title": "Score",
16632
+ "type": "integer"
16633
+ },
16634
+ "reasoning": {
16635
+ "default": "",
16636
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
16637
+ "title": "Reasoning",
16638
+ "type": "string"
16639
+ }
16640
+ },
16641
+ "required": [
16642
+ "start_s",
16643
+ "end_s"
16644
+ ],
16645
+ "title": "HookCandidate",
16646
+ "type": "object"
16647
+ },
16648
+ "HookCandidates": {
16649
+ "description": "\uD55C \uCEF7\uC758 \uD0D0\uC0C9 \uACB0\uACFC \u2014 \uD6C4\uBCF4 \uBAA9\uB85D + **\uADF8\uB54C\uC758 \uC8FC\uC18C**.\n\n\u2605\u2605 `url` \uC744 \uD568\uAED8 \uB2F4\uB294 \uC774\uC720: \uC8FC\uC18C\uB97C \uBC14\uAFD4\uB3C4 \uD6C4\uBCF4\uB294 \uC9C0\uC6B0\uC9C0 \uC54A\uC73C\uBBC0\uB85C(\uC0AC\uC6A9\uC790 \uACB0\uC815) \uD654\uBA74\uC774 \u300C\uC774\uAC74 \uB2E4\uB978\n \uC601\uC0C1\uC758 \uAD6C\uAC04\uC774\uB2E4\u300D \uB97C \uC54C \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4. \uC0C8 \uC8FC\uC18C\uB85C \uB2E4\uC2DC \uCC3E\uC73C\uBA74 \uD1B5\uC9F8\uB85C \uB36E\uC778\uB2E4.\n\u2605 `items` \uAC00 **\uBE48 \uBC30\uC5F4**\uC778 \uAC83\uACFC `hook_candidates` \uC790\uCCB4\uAC00 \uC5C6\uB294 \uAC83\uC740 \uB2E4\uB978 \uB73B\uC774\uB2E4 \u2014 \uC804\uC790\uB294\n \u300C\uCC3E\uC558\uB294\uB370 \uC4F8 \uB9CC\uD55C \uAC83\uC774 \uC5C6\uC5C8\uB2E4\u300D, \uD6C4\uC790\uB294 \u300C\uC544\uC9C1 \uCC3E\uC740 \uC801 \uC5C6\uB2E4\u300D.",
16650
+ "properties": {
16651
+ "url": {
16652
+ "title": "Url",
16653
+ "type": "string"
16654
+ },
16655
+ "found_at": {
16656
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
16657
+ "title": "Found At",
16658
+ "type": "string"
16659
+ },
16660
+ "items": {
16661
+ "items": {
16662
+ "$ref": "#/$defs/HookCandidate"
16663
+ },
16664
+ "title": "Items",
16665
+ "type": "array"
16666
+ }
16667
+ },
16668
+ "required": [
16669
+ "url",
16670
+ "found_at"
16671
+ ],
16672
+ "title": "HookCandidates",
16673
+ "type": "object"
16674
+ },
16528
16675
  "JobError": {
16529
16676
  "description": '\uC7A1 \uC2E4\uD328\uC758 \uB300\uC678 \uC5BC\uAD74. \u2605\u2605 **\uB7F0\uD0C0\uC784\uC758 \uBAA8\uB4E0 \uC2E4\uD328 \uBD84\uAE30\uAC00 \uB9CC\uB4DC\uB294 \uBD09\uD22C\uB97C \uBC1B\uC544\uB0BC \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4** \u2014\n`to_view` \uAC00 `JobError(**rec.error)` \uB85C \uBCC0\uD658\uD558\uB294\uB370 \uC774 \uBAA8\uB378\uC740 `extra="forbid"` \uB77C, \uBD09\uD22C\uC5D0\uB9CC \uC788\uACE0\n\uC5EC\uAE30 \uC5C6\uB294 \uD0A4\uAC00 \uD558\uB098\uB77C\uB3C4 \uC788\uC73C\uBA74 **\uADF8 \uC7A1\uC758 \uC870\uD68C\uAC00 500** \uC774 \uB41C\uB2E4(2026-09-10 \uC2E4\uCE21: \uB2E4\uC12F \uACBD\uB85C \uC911 \uB137).\n\n\u26A0\uFE0F \uADF8 \uACB0\uD568\uC740 \uC870\uC6A9\uD558\uB2E4 \u2014 \uBD09\uD22C\uB97C *\uB9CC\uB4DC\uB294* \uACF3(`jobs/runtime.py` \uC758 except \uBD84\uAE30)\uACFC *\uC77D\uB294* \uACF3\uC774\n\uAC08\uB824 \uC788\uC5B4 \uC5B4\uB290 \uCABD \uD14C\uC2A4\uD2B8\uB3C4 \uC655\uBCF5\uC744 \uBCF4\uC9C0 \uC54A\uC558\uB2E4. \uADF8\uB798\uC11C `cause`(\uC7AC\uC2DC\uB3C4 \uC18C\uC9C4)\uC640 `data`(FatalError\xB7\nDemoCutError)\uAC00 \uACC4\uC57D \uBC16\uC5D0 \uC788\uB294 \uCC44\uB85C \uC624\uB798 \uC0B4\uC544\uB0A8\uC558\uACE0, **\uC2E4\uD328\uD55C \uC7A1\uC77C\uC218\uB85D \uC870\uD68C\uAC00 \uC548 \uB418\uB294** \uC0C1\uD0DC\uC600\uB2E4\n(\uB3C8\uC774 \uB098\uAC04 \uC790\uB9AC\uC758 \uC548\uB0B4\uB97C \uADF8 \uC870\uD68C\uB85C \uC804\uD558\uB294\uB370 \uB9D0\uC774\uB2E4). \uAC00\uB4DC\uB294 \uB124 \uBD84\uAE30\uB97C \uC2E4\uC81C\uB85C \uD0DC\uC6CC \uC655\uBCF5\uC2DC\uD0A8\uB2E4\n(`test_every_failure_envelope_survives_the_view`).',
16530
16677
  "properties": {
@@ -17299,6 +17446,17 @@ var GENERATED_TOOLS = [
17299
17446
  "title": "Images",
17300
17447
  "type": "array"
17301
17448
  },
17449
+ "hook_candidates": {
17450
+ "anyOf": [
17451
+ {
17452
+ "$ref": "#/$defs/HookCandidates"
17453
+ },
17454
+ {
17455
+ "type": "null"
17456
+ }
17457
+ ],
17458
+ "default": null
17459
+ },
17302
17460
  "versions": {
17303
17461
  "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
17304
17462
  "items": {
@@ -18231,6 +18389,74 @@ var GENERATED_TOOLS = [
18231
18389
  "title": "FromVersionImageRef",
18232
18390
  "type": "object"
18233
18391
  },
18392
+ "HookCandidate": {
18393
+ "description": "\uD6C4\uD0B9 \uAD6C\uAC04 \uD6C4\uBCF4 \uD558\uB098 \u2014 \uC0AC\uB78C\uC774 \uBAA9\uB85D\uC5D0\uC11C \uBCF4\uACE0 \uACE0\uB974\uB294 \uB2E8\uC704(\uC20F\uCE20 \uC7AC\uC124\uACC4 2026-09-22).\n\n\u2605\u2605 `title` \uACFC `reasoning` \uC740 **\uB2E4\uB978 \uAC83**\uC774\uB2E4(\uC61B `clip_extractor_service` \uC758 \uC5ED\uD560 \uBD84\uB2F4):\n `title` \uC740 **\uD6C4\uD06C \uCE74\uD53C**(\uACE0\uB974\uBA74 \uADF8\uB300\uB85C \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4), `reasoning` \uC740 **\uC65C \uACE8\uB790\uB294\uC9C0**\uB2E4.\n\u2605\u2605 `score` \uB294 **\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uAC15\uB3C4**\uB2E4 \u2014 \uC808\uB300 \uAE30\uC900\uC774 \uC5C6\uC5B4 \uB2E4\uB978 \uC601\uC0C1\uC758 \uC810\uC218\uC640 \uACAC\uC8FC\uBA74 \uC548 \uB41C\uB2E4.\n \uBAA9\uB85D\uC740 \uC774 \uAC12\uC758 \uB0B4\uB9BC\uCC28\uC21C\uC774\uACE0, \uADF8\uB798\uC11C **\uCCAB\uC9F8\uAC00 \uACE7 \uAC00\uC7A5 \uC88B\uC740 \uAC83**\uC774\uB2E4(\uC81C\uC548\uC774 \uC790\uB3D9\uC73C\uB85C \uACE0\uB974\uB294 \uAC83\uB3C4 \uADF8\uAC83).",
18394
+ "properties": {
18395
+ "start_s": {
18396
+ "minimum": 0,
18397
+ "title": "Start S",
18398
+ "type": "number"
18399
+ },
18400
+ "end_s": {
18401
+ "exclusiveMinimum": 0,
18402
+ "title": "End S",
18403
+ "type": "number"
18404
+ },
18405
+ "title": {
18406
+ "default": "",
18407
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
18408
+ "title": "Title",
18409
+ "type": "string"
18410
+ },
18411
+ "score": {
18412
+ "default": 0,
18413
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
18414
+ "maximum": 100,
18415
+ "minimum": 0,
18416
+ "title": "Score",
18417
+ "type": "integer"
18418
+ },
18419
+ "reasoning": {
18420
+ "default": "",
18421
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
18422
+ "title": "Reasoning",
18423
+ "type": "string"
18424
+ }
18425
+ },
18426
+ "required": [
18427
+ "start_s",
18428
+ "end_s"
18429
+ ],
18430
+ "title": "HookCandidate",
18431
+ "type": "object"
18432
+ },
18433
+ "HookCandidates": {
18434
+ "description": "\uD55C \uCEF7\uC758 \uD0D0\uC0C9 \uACB0\uACFC \u2014 \uD6C4\uBCF4 \uBAA9\uB85D + **\uADF8\uB54C\uC758 \uC8FC\uC18C**.\n\n\u2605\u2605 `url` \uC744 \uD568\uAED8 \uB2F4\uB294 \uC774\uC720: \uC8FC\uC18C\uB97C \uBC14\uAFD4\uB3C4 \uD6C4\uBCF4\uB294 \uC9C0\uC6B0\uC9C0 \uC54A\uC73C\uBBC0\uB85C(\uC0AC\uC6A9\uC790 \uACB0\uC815) \uD654\uBA74\uC774 \u300C\uC774\uAC74 \uB2E4\uB978\n \uC601\uC0C1\uC758 \uAD6C\uAC04\uC774\uB2E4\u300D \uB97C \uC54C \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4. \uC0C8 \uC8FC\uC18C\uB85C \uB2E4\uC2DC \uCC3E\uC73C\uBA74 \uD1B5\uC9F8\uB85C \uB36E\uC778\uB2E4.\n\u2605 `items` \uAC00 **\uBE48 \uBC30\uC5F4**\uC778 \uAC83\uACFC `hook_candidates` \uC790\uCCB4\uAC00 \uC5C6\uB294 \uAC83\uC740 \uB2E4\uB978 \uB73B\uC774\uB2E4 \u2014 \uC804\uC790\uB294\n \u300C\uCC3E\uC558\uB294\uB370 \uC4F8 \uB9CC\uD55C \uAC83\uC774 \uC5C6\uC5C8\uB2E4\u300D, \uD6C4\uC790\uB294 \u300C\uC544\uC9C1 \uCC3E\uC740 \uC801 \uC5C6\uB2E4\u300D.",
18435
+ "properties": {
18436
+ "url": {
18437
+ "title": "Url",
18438
+ "type": "string"
18439
+ },
18440
+ "found_at": {
18441
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
18442
+ "title": "Found At",
18443
+ "type": "string"
18444
+ },
18445
+ "items": {
18446
+ "items": {
18447
+ "$ref": "#/$defs/HookCandidate"
18448
+ },
18449
+ "title": "Items",
18450
+ "type": "array"
18451
+ }
18452
+ },
18453
+ "required": [
18454
+ "url",
18455
+ "found_at"
18456
+ ],
18457
+ "title": "HookCandidates",
18458
+ "type": "object"
18459
+ },
18234
18460
  "JobError": {
18235
18461
  "description": '\uC7A1 \uC2E4\uD328\uC758 \uB300\uC678 \uC5BC\uAD74. \u2605\u2605 **\uB7F0\uD0C0\uC784\uC758 \uBAA8\uB4E0 \uC2E4\uD328 \uBD84\uAE30\uAC00 \uB9CC\uB4DC\uB294 \uBD09\uD22C\uB97C \uBC1B\uC544\uB0BC \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4** \u2014\n`to_view` \uAC00 `JobError(**rec.error)` \uB85C \uBCC0\uD658\uD558\uB294\uB370 \uC774 \uBAA8\uB378\uC740 `extra="forbid"` \uB77C, \uBD09\uD22C\uC5D0\uB9CC \uC788\uACE0\n\uC5EC\uAE30 \uC5C6\uB294 \uD0A4\uAC00 \uD558\uB098\uB77C\uB3C4 \uC788\uC73C\uBA74 **\uADF8 \uC7A1\uC758 \uC870\uD68C\uAC00 500** \uC774 \uB41C\uB2E4(2026-09-10 \uC2E4\uCE21: \uB2E4\uC12F \uACBD\uB85C \uC911 \uB137).\n\n\u26A0\uFE0F \uADF8 \uACB0\uD568\uC740 \uC870\uC6A9\uD558\uB2E4 \u2014 \uBD09\uD22C\uB97C *\uB9CC\uB4DC\uB294* \uACF3(`jobs/runtime.py` \uC758 except \uBD84\uAE30)\uACFC *\uC77D\uB294* \uACF3\uC774\n\uAC08\uB824 \uC788\uC5B4 \uC5B4\uB290 \uCABD \uD14C\uC2A4\uD2B8\uB3C4 \uC655\uBCF5\uC744 \uBCF4\uC9C0 \uC54A\uC558\uB2E4. \uADF8\uB798\uC11C `cause`(\uC7AC\uC2DC\uB3C4 \uC18C\uC9C4)\uC640 `data`(FatalError\xB7\nDemoCutError)\uAC00 \uACC4\uC57D \uBC16\uC5D0 \uC788\uB294 \uCC44\uB85C \uC624\uB798 \uC0B4\uC544\uB0A8\uC558\uACE0, **\uC2E4\uD328\uD55C \uC7A1\uC77C\uC218\uB85D \uC870\uD68C\uAC00 \uC548 \uB418\uB294** \uC0C1\uD0DC\uC600\uB2E4\n(\uB3C8\uC774 \uB098\uAC04 \uC790\uB9AC\uC758 \uC548\uB0B4\uB97C \uADF8 \uC870\uD68C\uB85C \uC804\uD558\uB294\uB370 \uB9D0\uC774\uB2E4). \uAC00\uB4DC\uB294 \uB124 \uBD84\uAE30\uB97C \uC2E4\uC81C\uB85C \uD0DC\uC6CC \uC655\uBCF5\uC2DC\uD0A8\uB2E4\n(`test_every_failure_envelope_survives_the_view`).',
18236
18462
  "properties": {
@@ -19005,6 +19231,17 @@ var GENERATED_TOOLS = [
19005
19231
  "title": "Images",
19006
19232
  "type": "array"
19007
19233
  },
19234
+ "hook_candidates": {
19235
+ "anyOf": [
19236
+ {
19237
+ "$ref": "#/$defs/HookCandidates"
19238
+ },
19239
+ {
19240
+ "type": "null"
19241
+ }
19242
+ ],
19243
+ "default": null
19244
+ },
19008
19245
  "versions": {
19009
19246
  "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
19010
19247
  "items": {
@@ -23069,6 +23306,17 @@ var GENERATED_TOOLS = [
23069
23306
  "title": "Images",
23070
23307
  "type": "array"
23071
23308
  },
23309
+ "hook_candidates": {
23310
+ "anyOf": [
23311
+ {
23312
+ "$ref": "#/$defs/HookCandidates"
23313
+ },
23314
+ {
23315
+ "type": "null"
23316
+ }
23317
+ ],
23318
+ "default": null
23319
+ },
23072
23320
  "versions": {
23073
23321
  "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
23074
23322
  "items": {
@@ -23415,6 +23663,74 @@ var GENERATED_TOOLS = [
23415
23663
  "title": "FromVersionImageRef",
23416
23664
  "type": "object"
23417
23665
  },
23666
+ "HookCandidate": {
23667
+ "description": "\uD6C4\uD0B9 \uAD6C\uAC04 \uD6C4\uBCF4 \uD558\uB098 \u2014 \uC0AC\uB78C\uC774 \uBAA9\uB85D\uC5D0\uC11C \uBCF4\uACE0 \uACE0\uB974\uB294 \uB2E8\uC704(\uC20F\uCE20 \uC7AC\uC124\uACC4 2026-09-22).\n\n\u2605\u2605 `title` \uACFC `reasoning` \uC740 **\uB2E4\uB978 \uAC83**\uC774\uB2E4(\uC61B `clip_extractor_service` \uC758 \uC5ED\uD560 \uBD84\uB2F4):\n `title` \uC740 **\uD6C4\uD06C \uCE74\uD53C**(\uACE0\uB974\uBA74 \uADF8\uB300\uB85C \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4), `reasoning` \uC740 **\uC65C \uACE8\uB790\uB294\uC9C0**\uB2E4.\n\u2605\u2605 `score` \uB294 **\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uAC15\uB3C4**\uB2E4 \u2014 \uC808\uB300 \uAE30\uC900\uC774 \uC5C6\uC5B4 \uB2E4\uB978 \uC601\uC0C1\uC758 \uC810\uC218\uC640 \uACAC\uC8FC\uBA74 \uC548 \uB41C\uB2E4.\n \uBAA9\uB85D\uC740 \uC774 \uAC12\uC758 \uB0B4\uB9BC\uCC28\uC21C\uC774\uACE0, \uADF8\uB798\uC11C **\uCCAB\uC9F8\uAC00 \uACE7 \uAC00\uC7A5 \uC88B\uC740 \uAC83**\uC774\uB2E4(\uC81C\uC548\uC774 \uC790\uB3D9\uC73C\uB85C \uACE0\uB974\uB294 \uAC83\uB3C4 \uADF8\uAC83).",
23668
+ "properties": {
23669
+ "start_s": {
23670
+ "minimum": 0,
23671
+ "title": "Start S",
23672
+ "type": "number"
23673
+ },
23674
+ "end_s": {
23675
+ "exclusiveMinimum": 0,
23676
+ "title": "End S",
23677
+ "type": "number"
23678
+ },
23679
+ "title": {
23680
+ "default": "",
23681
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
23682
+ "title": "Title",
23683
+ "type": "string"
23684
+ },
23685
+ "score": {
23686
+ "default": 0,
23687
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
23688
+ "maximum": 100,
23689
+ "minimum": 0,
23690
+ "title": "Score",
23691
+ "type": "integer"
23692
+ },
23693
+ "reasoning": {
23694
+ "default": "",
23695
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
23696
+ "title": "Reasoning",
23697
+ "type": "string"
23698
+ }
23699
+ },
23700
+ "required": [
23701
+ "start_s",
23702
+ "end_s"
23703
+ ],
23704
+ "title": "HookCandidate",
23705
+ "type": "object"
23706
+ },
23707
+ "HookCandidates": {
23708
+ "description": "\uD55C \uCEF7\uC758 \uD0D0\uC0C9 \uACB0\uACFC \u2014 \uD6C4\uBCF4 \uBAA9\uB85D + **\uADF8\uB54C\uC758 \uC8FC\uC18C**.\n\n\u2605\u2605 `url` \uC744 \uD568\uAED8 \uB2F4\uB294 \uC774\uC720: \uC8FC\uC18C\uB97C \uBC14\uAFD4\uB3C4 \uD6C4\uBCF4\uB294 \uC9C0\uC6B0\uC9C0 \uC54A\uC73C\uBBC0\uB85C(\uC0AC\uC6A9\uC790 \uACB0\uC815) \uD654\uBA74\uC774 \u300C\uC774\uAC74 \uB2E4\uB978\n \uC601\uC0C1\uC758 \uAD6C\uAC04\uC774\uB2E4\u300D \uB97C \uC54C \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4. \uC0C8 \uC8FC\uC18C\uB85C \uB2E4\uC2DC \uCC3E\uC73C\uBA74 \uD1B5\uC9F8\uB85C \uB36E\uC778\uB2E4.\n\u2605 `items` \uAC00 **\uBE48 \uBC30\uC5F4**\uC778 \uAC83\uACFC `hook_candidates` \uC790\uCCB4\uAC00 \uC5C6\uB294 \uAC83\uC740 \uB2E4\uB978 \uB73B\uC774\uB2E4 \u2014 \uC804\uC790\uB294\n \u300C\uCC3E\uC558\uB294\uB370 \uC4F8 \uB9CC\uD55C \uAC83\uC774 \uC5C6\uC5C8\uB2E4\u300D, \uD6C4\uC790\uB294 \u300C\uC544\uC9C1 \uCC3E\uC740 \uC801 \uC5C6\uB2E4\u300D.",
23709
+ "properties": {
23710
+ "url": {
23711
+ "title": "Url",
23712
+ "type": "string"
23713
+ },
23714
+ "found_at": {
23715
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
23716
+ "title": "Found At",
23717
+ "type": "string"
23718
+ },
23719
+ "items": {
23720
+ "items": {
23721
+ "$ref": "#/$defs/HookCandidate"
23722
+ },
23723
+ "title": "Items",
23724
+ "type": "array"
23725
+ }
23726
+ },
23727
+ "required": [
23728
+ "url",
23729
+ "found_at"
23730
+ ],
23731
+ "title": "HookCandidates",
23732
+ "type": "object"
23733
+ },
23418
23734
  "JobError": {
23419
23735
  "description": '\uC7A1 \uC2E4\uD328\uC758 \uB300\uC678 \uC5BC\uAD74. \u2605\u2605 **\uB7F0\uD0C0\uC784\uC758 \uBAA8\uB4E0 \uC2E4\uD328 \uBD84\uAE30\uAC00 \uB9CC\uB4DC\uB294 \uBD09\uD22C\uB97C \uBC1B\uC544\uB0BC \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4** \u2014\n`to_view` \uAC00 `JobError(**rec.error)` \uB85C \uBCC0\uD658\uD558\uB294\uB370 \uC774 \uBAA8\uB378\uC740 `extra="forbid"` \uB77C, \uBD09\uD22C\uC5D0\uB9CC \uC788\uACE0\n\uC5EC\uAE30 \uC5C6\uB294 \uD0A4\uAC00 \uD558\uB098\uB77C\uB3C4 \uC788\uC73C\uBA74 **\uADF8 \uC7A1\uC758 \uC870\uD68C\uAC00 500** \uC774 \uB41C\uB2E4(2026-09-10 \uC2E4\uCE21: \uB2E4\uC12F \uACBD\uB85C \uC911 \uB137).\n\n\u26A0\uFE0F \uADF8 \uACB0\uD568\uC740 \uC870\uC6A9\uD558\uB2E4 \u2014 \uBD09\uD22C\uB97C *\uB9CC\uB4DC\uB294* \uACF3(`jobs/runtime.py` \uC758 except \uBD84\uAE30)\uACFC *\uC77D\uB294* \uACF3\uC774\n\uAC08\uB824 \uC788\uC5B4 \uC5B4\uB290 \uCABD \uD14C\uC2A4\uD2B8\uB3C4 \uC655\uBCF5\uC744 \uBCF4\uC9C0 \uC54A\uC558\uB2E4. \uADF8\uB798\uC11C `cause`(\uC7AC\uC2DC\uB3C4 \uC18C\uC9C4)\uC640 `data`(FatalError\xB7\nDemoCutError)\uAC00 \uACC4\uC57D \uBC16\uC5D0 \uC788\uB294 \uCC44\uB85C \uC624\uB798 \uC0B4\uC544\uB0A8\uC558\uACE0, **\uC2E4\uD328\uD55C \uC7A1\uC77C\uC218\uB85D \uC870\uD68C\uAC00 \uC548 \uB418\uB294** \uC0C1\uD0DC\uC600\uB2E4\n(\uB3C8\uC774 \uB098\uAC04 \uC790\uB9AC\uC758 \uC548\uB0B4\uB97C \uADF8 \uC870\uD68C\uB85C \uC804\uD558\uB294\uB370 \uB9D0\uC774\uB2E4). \uAC00\uB4DC\uB294 \uB124 \uBD84\uAE30\uB97C \uC2E4\uC81C\uB85C \uD0DC\uC6CC \uC655\uBCF5\uC2DC\uD0A8\uB2E4\n(`test_every_failure_envelope_survives_the_view`).',
23420
23736
  "properties": {
@@ -25067,6 +25383,17 @@ var GENERATED_TOOLS = [
25067
25383
  "title": "Images",
25068
25384
  "type": "array"
25069
25385
  },
25386
+ "hook_candidates": {
25387
+ "anyOf": [
25388
+ {
25389
+ "$ref": "#/$defs/HookCandidates"
25390
+ },
25391
+ {
25392
+ "type": "null"
25393
+ }
25394
+ ],
25395
+ "default": null
25396
+ },
25070
25397
  "versions": {
25071
25398
  "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
25072
25399
  "items": {
@@ -25399,6 +25726,74 @@ var GENERATED_TOOLS = [
25399
25726
  "title": "FromVersionImageRef",
25400
25727
  "type": "object"
25401
25728
  },
25729
+ "HookCandidate": {
25730
+ "description": "\uD6C4\uD0B9 \uAD6C\uAC04 \uD6C4\uBCF4 \uD558\uB098 \u2014 \uC0AC\uB78C\uC774 \uBAA9\uB85D\uC5D0\uC11C \uBCF4\uACE0 \uACE0\uB974\uB294 \uB2E8\uC704(\uC20F\uCE20 \uC7AC\uC124\uACC4 2026-09-22).\n\n\u2605\u2605 `title` \uACFC `reasoning` \uC740 **\uB2E4\uB978 \uAC83**\uC774\uB2E4(\uC61B `clip_extractor_service` \uC758 \uC5ED\uD560 \uBD84\uB2F4):\n `title` \uC740 **\uD6C4\uD06C \uCE74\uD53C**(\uACE0\uB974\uBA74 \uADF8\uB300\uB85C \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4), `reasoning` \uC740 **\uC65C \uACE8\uB790\uB294\uC9C0**\uB2E4.\n\u2605\u2605 `score` \uB294 **\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uAC15\uB3C4**\uB2E4 \u2014 \uC808\uB300 \uAE30\uC900\uC774 \uC5C6\uC5B4 \uB2E4\uB978 \uC601\uC0C1\uC758 \uC810\uC218\uC640 \uACAC\uC8FC\uBA74 \uC548 \uB41C\uB2E4.\n \uBAA9\uB85D\uC740 \uC774 \uAC12\uC758 \uB0B4\uB9BC\uCC28\uC21C\uC774\uACE0, \uADF8\uB798\uC11C **\uCCAB\uC9F8\uAC00 \uACE7 \uAC00\uC7A5 \uC88B\uC740 \uAC83**\uC774\uB2E4(\uC81C\uC548\uC774 \uC790\uB3D9\uC73C\uB85C \uACE0\uB974\uB294 \uAC83\uB3C4 \uADF8\uAC83).",
25731
+ "properties": {
25732
+ "start_s": {
25733
+ "minimum": 0,
25734
+ "title": "Start S",
25735
+ "type": "number"
25736
+ },
25737
+ "end_s": {
25738
+ "exclusiveMinimum": 0,
25739
+ "title": "End S",
25740
+ "type": "number"
25741
+ },
25742
+ "title": {
25743
+ "default": "",
25744
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
25745
+ "title": "Title",
25746
+ "type": "string"
25747
+ },
25748
+ "score": {
25749
+ "default": 0,
25750
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
25751
+ "maximum": 100,
25752
+ "minimum": 0,
25753
+ "title": "Score",
25754
+ "type": "integer"
25755
+ },
25756
+ "reasoning": {
25757
+ "default": "",
25758
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
25759
+ "title": "Reasoning",
25760
+ "type": "string"
25761
+ }
25762
+ },
25763
+ "required": [
25764
+ "start_s",
25765
+ "end_s"
25766
+ ],
25767
+ "title": "HookCandidate",
25768
+ "type": "object"
25769
+ },
25770
+ "HookCandidates": {
25771
+ "description": "\uD55C \uCEF7\uC758 \uD0D0\uC0C9 \uACB0\uACFC \u2014 \uD6C4\uBCF4 \uBAA9\uB85D + **\uADF8\uB54C\uC758 \uC8FC\uC18C**.\n\n\u2605\u2605 `url` \uC744 \uD568\uAED8 \uB2F4\uB294 \uC774\uC720: \uC8FC\uC18C\uB97C \uBC14\uAFD4\uB3C4 \uD6C4\uBCF4\uB294 \uC9C0\uC6B0\uC9C0 \uC54A\uC73C\uBBC0\uB85C(\uC0AC\uC6A9\uC790 \uACB0\uC815) \uD654\uBA74\uC774 \u300C\uC774\uAC74 \uB2E4\uB978\n \uC601\uC0C1\uC758 \uAD6C\uAC04\uC774\uB2E4\u300D \uB97C \uC54C \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4. \uC0C8 \uC8FC\uC18C\uB85C \uB2E4\uC2DC \uCC3E\uC73C\uBA74 \uD1B5\uC9F8\uB85C \uB36E\uC778\uB2E4.\n\u2605 `items` \uAC00 **\uBE48 \uBC30\uC5F4**\uC778 \uAC83\uACFC `hook_candidates` \uC790\uCCB4\uAC00 \uC5C6\uB294 \uAC83\uC740 \uB2E4\uB978 \uB73B\uC774\uB2E4 \u2014 \uC804\uC790\uB294\n \u300C\uCC3E\uC558\uB294\uB370 \uC4F8 \uB9CC\uD55C \uAC83\uC774 \uC5C6\uC5C8\uB2E4\u300D, \uD6C4\uC790\uB294 \u300C\uC544\uC9C1 \uCC3E\uC740 \uC801 \uC5C6\uB2E4\u300D.",
25772
+ "properties": {
25773
+ "url": {
25774
+ "title": "Url",
25775
+ "type": "string"
25776
+ },
25777
+ "found_at": {
25778
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
25779
+ "title": "Found At",
25780
+ "type": "string"
25781
+ },
25782
+ "items": {
25783
+ "items": {
25784
+ "$ref": "#/$defs/HookCandidate"
25785
+ },
25786
+ "title": "Items",
25787
+ "type": "array"
25788
+ }
25789
+ },
25790
+ "required": [
25791
+ "url",
25792
+ "found_at"
25793
+ ],
25794
+ "title": "HookCandidates",
25795
+ "type": "object"
25796
+ },
25402
25797
  "JobError": {
25403
25798
  "description": '\uC7A1 \uC2E4\uD328\uC758 \uB300\uC678 \uC5BC\uAD74. \u2605\u2605 **\uB7F0\uD0C0\uC784\uC758 \uBAA8\uB4E0 \uC2E4\uD328 \uBD84\uAE30\uAC00 \uB9CC\uB4DC\uB294 \uBD09\uD22C\uB97C \uBC1B\uC544\uB0BC \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4** \u2014\n`to_view` \uAC00 `JobError(**rec.error)` \uB85C \uBCC0\uD658\uD558\uB294\uB370 \uC774 \uBAA8\uB378\uC740 `extra="forbid"` \uB77C, \uBD09\uD22C\uC5D0\uB9CC \uC788\uACE0\n\uC5EC\uAE30 \uC5C6\uB294 \uD0A4\uAC00 \uD558\uB098\uB77C\uB3C4 \uC788\uC73C\uBA74 **\uADF8 \uC7A1\uC758 \uC870\uD68C\uAC00 500** \uC774 \uB41C\uB2E4(2026-09-10 \uC2E4\uCE21: \uB2E4\uC12F \uACBD\uB85C \uC911 \uB137).\n\n\u26A0\uFE0F \uADF8 \uACB0\uD568\uC740 \uC870\uC6A9\uD558\uB2E4 \u2014 \uBD09\uD22C\uB97C *\uB9CC\uB4DC\uB294* \uACF3(`jobs/runtime.py` \uC758 except \uBD84\uAE30)\uACFC *\uC77D\uB294* \uACF3\uC774\n\uAC08\uB824 \uC788\uC5B4 \uC5B4\uB290 \uCABD \uD14C\uC2A4\uD2B8\uB3C4 \uC655\uBCF5\uC744 \uBCF4\uC9C0 \uC54A\uC558\uB2E4. \uADF8\uB798\uC11C `cause`(\uC7AC\uC2DC\uB3C4 \uC18C\uC9C4)\uC640 `data`(FatalError\xB7\nDemoCutError)\uAC00 \uACC4\uC57D \uBC16\uC5D0 \uC788\uB294 \uCC44\uB85C \uC624\uB798 \uC0B4\uC544\uB0A8\uC558\uACE0, **\uC2E4\uD328\uD55C \uC7A1\uC77C\uC218\uB85D \uC870\uD68C\uAC00 \uC548 \uB418\uB294** \uC0C1\uD0DC\uC600\uB2E4\n(\uB3C8\uC774 \uB098\uAC04 \uC790\uB9AC\uC758 \uC548\uB0B4\uB97C \uADF8 \uC870\uD68C\uB85C \uC804\uD558\uB294\uB370 \uB9D0\uC774\uB2E4). \uAC00\uB4DC\uB294 \uB124 \uBD84\uAE30\uB97C \uC2E4\uC81C\uB85C \uD0DC\uC6CC \uC655\uBCF5\uC2DC\uD0A8\uB2E4\n(`test_every_failure_envelope_survives_the_view`).',
25404
25799
  "properties": {
@@ -27768,6 +28163,74 @@ var GENERATED_TOOLS = [
27768
28163
  "title": "FromVersionImageRef",
27769
28164
  "type": "object"
27770
28165
  },
28166
+ "HookCandidate": {
28167
+ "description": "\uD6C4\uD0B9 \uAD6C\uAC04 \uD6C4\uBCF4 \uD558\uB098 \u2014 \uC0AC\uB78C\uC774 \uBAA9\uB85D\uC5D0\uC11C \uBCF4\uACE0 \uACE0\uB974\uB294 \uB2E8\uC704(\uC20F\uCE20 \uC7AC\uC124\uACC4 2026-09-22).\n\n\u2605\u2605 `title` \uACFC `reasoning` \uC740 **\uB2E4\uB978 \uAC83**\uC774\uB2E4(\uC61B `clip_extractor_service` \uC758 \uC5ED\uD560 \uBD84\uB2F4):\n `title` \uC740 **\uD6C4\uD06C \uCE74\uD53C**(\uACE0\uB974\uBA74 \uADF8\uB300\uB85C \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4), `reasoning` \uC740 **\uC65C \uACE8\uB790\uB294\uC9C0**\uB2E4.\n\u2605\u2605 `score` \uB294 **\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uAC15\uB3C4**\uB2E4 \u2014 \uC808\uB300 \uAE30\uC900\uC774 \uC5C6\uC5B4 \uB2E4\uB978 \uC601\uC0C1\uC758 \uC810\uC218\uC640 \uACAC\uC8FC\uBA74 \uC548 \uB41C\uB2E4.\n \uBAA9\uB85D\uC740 \uC774 \uAC12\uC758 \uB0B4\uB9BC\uCC28\uC21C\uC774\uACE0, \uADF8\uB798\uC11C **\uCCAB\uC9F8\uAC00 \uACE7 \uAC00\uC7A5 \uC88B\uC740 \uAC83**\uC774\uB2E4(\uC81C\uC548\uC774 \uC790\uB3D9\uC73C\uB85C \uACE0\uB974\uB294 \uAC83\uB3C4 \uADF8\uAC83).",
28168
+ "properties": {
28169
+ "start_s": {
28170
+ "minimum": 0,
28171
+ "title": "Start S",
28172
+ "type": "number"
28173
+ },
28174
+ "end_s": {
28175
+ "exclusiveMinimum": 0,
28176
+ "title": "End S",
28177
+ "type": "number"
28178
+ },
28179
+ "title": {
28180
+ "default": "",
28181
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
28182
+ "title": "Title",
28183
+ "type": "string"
28184
+ },
28185
+ "score": {
28186
+ "default": 0,
28187
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
28188
+ "maximum": 100,
28189
+ "minimum": 0,
28190
+ "title": "Score",
28191
+ "type": "integer"
28192
+ },
28193
+ "reasoning": {
28194
+ "default": "",
28195
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
28196
+ "title": "Reasoning",
28197
+ "type": "string"
28198
+ }
28199
+ },
28200
+ "required": [
28201
+ "start_s",
28202
+ "end_s"
28203
+ ],
28204
+ "title": "HookCandidate",
28205
+ "type": "object"
28206
+ },
28207
+ "HookCandidates": {
28208
+ "description": "\uD55C \uCEF7\uC758 \uD0D0\uC0C9 \uACB0\uACFC \u2014 \uD6C4\uBCF4 \uBAA9\uB85D + **\uADF8\uB54C\uC758 \uC8FC\uC18C**.\n\n\u2605\u2605 `url` \uC744 \uD568\uAED8 \uB2F4\uB294 \uC774\uC720: \uC8FC\uC18C\uB97C \uBC14\uAFD4\uB3C4 \uD6C4\uBCF4\uB294 \uC9C0\uC6B0\uC9C0 \uC54A\uC73C\uBBC0\uB85C(\uC0AC\uC6A9\uC790 \uACB0\uC815) \uD654\uBA74\uC774 \u300C\uC774\uAC74 \uB2E4\uB978\n \uC601\uC0C1\uC758 \uAD6C\uAC04\uC774\uB2E4\u300D \uB97C \uC54C \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4. \uC0C8 \uC8FC\uC18C\uB85C \uB2E4\uC2DC \uCC3E\uC73C\uBA74 \uD1B5\uC9F8\uB85C \uB36E\uC778\uB2E4.\n\u2605 `items` \uAC00 **\uBE48 \uBC30\uC5F4**\uC778 \uAC83\uACFC `hook_candidates` \uC790\uCCB4\uAC00 \uC5C6\uB294 \uAC83\uC740 \uB2E4\uB978 \uB73B\uC774\uB2E4 \u2014 \uC804\uC790\uB294\n \u300C\uCC3E\uC558\uB294\uB370 \uC4F8 \uB9CC\uD55C \uAC83\uC774 \uC5C6\uC5C8\uB2E4\u300D, \uD6C4\uC790\uB294 \u300C\uC544\uC9C1 \uCC3E\uC740 \uC801 \uC5C6\uB2E4\u300D.",
28209
+ "properties": {
28210
+ "url": {
28211
+ "title": "Url",
28212
+ "type": "string"
28213
+ },
28214
+ "found_at": {
28215
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
28216
+ "title": "Found At",
28217
+ "type": "string"
28218
+ },
28219
+ "items": {
28220
+ "items": {
28221
+ "$ref": "#/$defs/HookCandidate"
28222
+ },
28223
+ "title": "Items",
28224
+ "type": "array"
28225
+ }
28226
+ },
28227
+ "required": [
28228
+ "url",
28229
+ "found_at"
28230
+ ],
28231
+ "title": "HookCandidates",
28232
+ "type": "object"
28233
+ },
27771
28234
  "JobError": {
27772
28235
  "description": '\uC7A1 \uC2E4\uD328\uC758 \uB300\uC678 \uC5BC\uAD74. \u2605\u2605 **\uB7F0\uD0C0\uC784\uC758 \uBAA8\uB4E0 \uC2E4\uD328 \uBD84\uAE30\uAC00 \uB9CC\uB4DC\uB294 \uBD09\uD22C\uB97C \uBC1B\uC544\uB0BC \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4** \u2014\n`to_view` \uAC00 `JobError(**rec.error)` \uB85C \uBCC0\uD658\uD558\uB294\uB370 \uC774 \uBAA8\uB378\uC740 `extra="forbid"` \uB77C, \uBD09\uD22C\uC5D0\uB9CC \uC788\uACE0\n\uC5EC\uAE30 \uC5C6\uB294 \uD0A4\uAC00 \uD558\uB098\uB77C\uB3C4 \uC788\uC73C\uBA74 **\uADF8 \uC7A1\uC758 \uC870\uD68C\uAC00 500** \uC774 \uB41C\uB2E4(2026-09-10 \uC2E4\uCE21: \uB2E4\uC12F \uACBD\uB85C \uC911 \uB137).\n\n\u26A0\uFE0F \uADF8 \uACB0\uD568\uC740 \uC870\uC6A9\uD558\uB2E4 \u2014 \uBD09\uD22C\uB97C *\uB9CC\uB4DC\uB294* \uACF3(`jobs/runtime.py` \uC758 except \uBD84\uAE30)\uACFC *\uC77D\uB294* \uACF3\uC774\n\uAC08\uB824 \uC788\uC5B4 \uC5B4\uB290 \uCABD \uD14C\uC2A4\uD2B8\uB3C4 \uC655\uBCF5\uC744 \uBCF4\uC9C0 \uC54A\uC558\uB2E4. \uADF8\uB798\uC11C `cause`(\uC7AC\uC2DC\uB3C4 \uC18C\uC9C4)\uC640 `data`(FatalError\xB7\nDemoCutError)\uAC00 \uACC4\uC57D \uBC16\uC5D0 \uC788\uB294 \uCC44\uB85C \uC624\uB798 \uC0B4\uC544\uB0A8\uC558\uACE0, **\uC2E4\uD328\uD55C \uC7A1\uC77C\uC218\uB85D \uC870\uD68C\uAC00 \uC548 \uB418\uB294** \uC0C1\uD0DC\uC600\uB2E4\n(\uB3C8\uC774 \uB098\uAC04 \uC790\uB9AC\uC758 \uC548\uB0B4\uB97C \uADF8 \uC870\uD68C\uB85C \uC804\uD558\uB294\uB370 \uB9D0\uC774\uB2E4). \uAC00\uB4DC\uB294 \uB124 \uBD84\uAE30\uB97C \uC2E4\uC81C\uB85C \uD0DC\uC6CC \uC655\uBCF5\uC2DC\uD0A8\uB2E4\n(`test_every_failure_envelope_survives_the_view`).',
27773
28236
  "properties": {
@@ -28542,6 +29005,17 @@ var GENERATED_TOOLS = [
28542
29005
  "title": "Images",
28543
29006
  "type": "array"
28544
29007
  },
29008
+ "hook_candidates": {
29009
+ "anyOf": [
29010
+ {
29011
+ "$ref": "#/$defs/HookCandidates"
29012
+ },
29013
+ {
29014
+ "type": "null"
29015
+ }
29016
+ ],
29017
+ "default": null
29018
+ },
28545
29019
  "versions": {
28546
29020
  "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
28547
29021
  "items": {
@@ -29461,6 +29935,74 @@ var GENERATED_TOOLS = [
29461
29935
  "title": "FromVersionImageRef",
29462
29936
  "type": "object"
29463
29937
  },
29938
+ "HookCandidate": {
29939
+ "description": "\uD6C4\uD0B9 \uAD6C\uAC04 \uD6C4\uBCF4 \uD558\uB098 \u2014 \uC0AC\uB78C\uC774 \uBAA9\uB85D\uC5D0\uC11C \uBCF4\uACE0 \uACE0\uB974\uB294 \uB2E8\uC704(\uC20F\uCE20 \uC7AC\uC124\uACC4 2026-09-22).\n\n\u2605\u2605 `title` \uACFC `reasoning` \uC740 **\uB2E4\uB978 \uAC83**\uC774\uB2E4(\uC61B `clip_extractor_service` \uC758 \uC5ED\uD560 \uBD84\uB2F4):\n `title` \uC740 **\uD6C4\uD06C \uCE74\uD53C**(\uACE0\uB974\uBA74 \uADF8\uB300\uB85C \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4), `reasoning` \uC740 **\uC65C \uACE8\uB790\uB294\uC9C0**\uB2E4.\n\u2605\u2605 `score` \uB294 **\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uAC15\uB3C4**\uB2E4 \u2014 \uC808\uB300 \uAE30\uC900\uC774 \uC5C6\uC5B4 \uB2E4\uB978 \uC601\uC0C1\uC758 \uC810\uC218\uC640 \uACAC\uC8FC\uBA74 \uC548 \uB41C\uB2E4.\n \uBAA9\uB85D\uC740 \uC774 \uAC12\uC758 \uB0B4\uB9BC\uCC28\uC21C\uC774\uACE0, \uADF8\uB798\uC11C **\uCCAB\uC9F8\uAC00 \uACE7 \uAC00\uC7A5 \uC88B\uC740 \uAC83**\uC774\uB2E4(\uC81C\uC548\uC774 \uC790\uB3D9\uC73C\uB85C \uACE0\uB974\uB294 \uAC83\uB3C4 \uADF8\uAC83).",
29940
+ "properties": {
29941
+ "start_s": {
29942
+ "minimum": 0,
29943
+ "title": "Start S",
29944
+ "type": "number"
29945
+ },
29946
+ "end_s": {
29947
+ "exclusiveMinimum": 0,
29948
+ "title": "End S",
29949
+ "type": "number"
29950
+ },
29951
+ "title": {
29952
+ "default": "",
29953
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
29954
+ "title": "Title",
29955
+ "type": "string"
29956
+ },
29957
+ "score": {
29958
+ "default": 0,
29959
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
29960
+ "maximum": 100,
29961
+ "minimum": 0,
29962
+ "title": "Score",
29963
+ "type": "integer"
29964
+ },
29965
+ "reasoning": {
29966
+ "default": "",
29967
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
29968
+ "title": "Reasoning",
29969
+ "type": "string"
29970
+ }
29971
+ },
29972
+ "required": [
29973
+ "start_s",
29974
+ "end_s"
29975
+ ],
29976
+ "title": "HookCandidate",
29977
+ "type": "object"
29978
+ },
29979
+ "HookCandidates": {
29980
+ "description": "\uD55C \uCEF7\uC758 \uD0D0\uC0C9 \uACB0\uACFC \u2014 \uD6C4\uBCF4 \uBAA9\uB85D + **\uADF8\uB54C\uC758 \uC8FC\uC18C**.\n\n\u2605\u2605 `url` \uC744 \uD568\uAED8 \uB2F4\uB294 \uC774\uC720: \uC8FC\uC18C\uB97C \uBC14\uAFD4\uB3C4 \uD6C4\uBCF4\uB294 \uC9C0\uC6B0\uC9C0 \uC54A\uC73C\uBBC0\uB85C(\uC0AC\uC6A9\uC790 \uACB0\uC815) \uD654\uBA74\uC774 \u300C\uC774\uAC74 \uB2E4\uB978\n \uC601\uC0C1\uC758 \uAD6C\uAC04\uC774\uB2E4\u300D \uB97C \uC54C \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4. \uC0C8 \uC8FC\uC18C\uB85C \uB2E4\uC2DC \uCC3E\uC73C\uBA74 \uD1B5\uC9F8\uB85C \uB36E\uC778\uB2E4.\n\u2605 `items` \uAC00 **\uBE48 \uBC30\uC5F4**\uC778 \uAC83\uACFC `hook_candidates` \uC790\uCCB4\uAC00 \uC5C6\uB294 \uAC83\uC740 \uB2E4\uB978 \uB73B\uC774\uB2E4 \u2014 \uC804\uC790\uB294\n \u300C\uCC3E\uC558\uB294\uB370 \uC4F8 \uB9CC\uD55C \uAC83\uC774 \uC5C6\uC5C8\uB2E4\u300D, \uD6C4\uC790\uB294 \u300C\uC544\uC9C1 \uCC3E\uC740 \uC801 \uC5C6\uB2E4\u300D.",
29981
+ "properties": {
29982
+ "url": {
29983
+ "title": "Url",
29984
+ "type": "string"
29985
+ },
29986
+ "found_at": {
29987
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
29988
+ "title": "Found At",
29989
+ "type": "string"
29990
+ },
29991
+ "items": {
29992
+ "items": {
29993
+ "$ref": "#/$defs/HookCandidate"
29994
+ },
29995
+ "title": "Items",
29996
+ "type": "array"
29997
+ }
29998
+ },
29999
+ "required": [
30000
+ "url",
30001
+ "found_at"
30002
+ ],
30003
+ "title": "HookCandidates",
30004
+ "type": "object"
30005
+ },
29464
30006
  "JobError": {
29465
30007
  "description": '\uC7A1 \uC2E4\uD328\uC758 \uB300\uC678 \uC5BC\uAD74. \u2605\u2605 **\uB7F0\uD0C0\uC784\uC758 \uBAA8\uB4E0 \uC2E4\uD328 \uBD84\uAE30\uAC00 \uB9CC\uB4DC\uB294 \uBD09\uD22C\uB97C \uBC1B\uC544\uB0BC \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4** \u2014\n`to_view` \uAC00 `JobError(**rec.error)` \uB85C \uBCC0\uD658\uD558\uB294\uB370 \uC774 \uBAA8\uB378\uC740 `extra="forbid"` \uB77C, \uBD09\uD22C\uC5D0\uB9CC \uC788\uACE0\n\uC5EC\uAE30 \uC5C6\uB294 \uD0A4\uAC00 \uD558\uB098\uB77C\uB3C4 \uC788\uC73C\uBA74 **\uADF8 \uC7A1\uC758 \uC870\uD68C\uAC00 500** \uC774 \uB41C\uB2E4(2026-09-10 \uC2E4\uCE21: \uB2E4\uC12F \uACBD\uB85C \uC911 \uB137).\n\n\u26A0\uFE0F \uADF8 \uACB0\uD568\uC740 \uC870\uC6A9\uD558\uB2E4 \u2014 \uBD09\uD22C\uB97C *\uB9CC\uB4DC\uB294* \uACF3(`jobs/runtime.py` \uC758 except \uBD84\uAE30)\uACFC *\uC77D\uB294* \uACF3\uC774\n\uAC08\uB824 \uC788\uC5B4 \uC5B4\uB290 \uCABD \uD14C\uC2A4\uD2B8\uB3C4 \uC655\uBCF5\uC744 \uBCF4\uC9C0 \uC54A\uC558\uB2E4. \uADF8\uB798\uC11C `cause`(\uC7AC\uC2DC\uB3C4 \uC18C\uC9C4)\uC640 `data`(FatalError\xB7\nDemoCutError)\uAC00 \uACC4\uC57D \uBC16\uC5D0 \uC788\uB294 \uCC44\uB85C \uC624\uB798 \uC0B4\uC544\uB0A8\uC558\uACE0, **\uC2E4\uD328\uD55C \uC7A1\uC77C\uC218\uB85D \uC870\uD68C\uAC00 \uC548 \uB418\uB294** \uC0C1\uD0DC\uC600\uB2E4\n(\uB3C8\uC774 \uB098\uAC04 \uC790\uB9AC\uC758 \uC548\uB0B4\uB97C \uADF8 \uC870\uD68C\uB85C \uC804\uD558\uB294\uB370 \uB9D0\uC774\uB2E4). \uAC00\uB4DC\uB294 \uB124 \uBD84\uAE30\uB97C \uC2E4\uC81C\uB85C \uD0DC\uC6CC \uC655\uBCF5\uC2DC\uD0A8\uB2E4\n(`test_every_failure_envelope_survives_the_view`).',
29466
30008
  "properties": {
@@ -30235,6 +30777,17 @@ var GENERATED_TOOLS = [
30235
30777
  "title": "Images",
30236
30778
  "type": "array"
30237
30779
  },
30780
+ "hook_candidates": {
30781
+ "anyOf": [
30782
+ {
30783
+ "$ref": "#/$defs/HookCandidates"
30784
+ },
30785
+ {
30786
+ "type": "null"
30787
+ }
30788
+ ],
30789
+ "default": null
30790
+ },
30238
30791
  "versions": {
30239
30792
  "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
30240
30793
  "items": {
@@ -32066,6 +32619,74 @@ var GENERATED_TOOLS = [
32066
32619
  "title": "FromVersionImageRef",
32067
32620
  "type": "object"
32068
32621
  },
32622
+ "HookCandidate": {
32623
+ "description": "\uD6C4\uD0B9 \uAD6C\uAC04 \uD6C4\uBCF4 \uD558\uB098 \u2014 \uC0AC\uB78C\uC774 \uBAA9\uB85D\uC5D0\uC11C \uBCF4\uACE0 \uACE0\uB974\uB294 \uB2E8\uC704(\uC20F\uCE20 \uC7AC\uC124\uACC4 2026-09-22).\n\n\u2605\u2605 `title` \uACFC `reasoning` \uC740 **\uB2E4\uB978 \uAC83**\uC774\uB2E4(\uC61B `clip_extractor_service` \uC758 \uC5ED\uD560 \uBD84\uB2F4):\n `title` \uC740 **\uD6C4\uD06C \uCE74\uD53C**(\uACE0\uB974\uBA74 \uADF8\uB300\uB85C \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4), `reasoning` \uC740 **\uC65C \uACE8\uB790\uB294\uC9C0**\uB2E4.\n\u2605\u2605 `score` \uB294 **\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uAC15\uB3C4**\uB2E4 \u2014 \uC808\uB300 \uAE30\uC900\uC774 \uC5C6\uC5B4 \uB2E4\uB978 \uC601\uC0C1\uC758 \uC810\uC218\uC640 \uACAC\uC8FC\uBA74 \uC548 \uB41C\uB2E4.\n \uBAA9\uB85D\uC740 \uC774 \uAC12\uC758 \uB0B4\uB9BC\uCC28\uC21C\uC774\uACE0, \uADF8\uB798\uC11C **\uCCAB\uC9F8\uAC00 \uACE7 \uAC00\uC7A5 \uC88B\uC740 \uAC83**\uC774\uB2E4(\uC81C\uC548\uC774 \uC790\uB3D9\uC73C\uB85C \uACE0\uB974\uB294 \uAC83\uB3C4 \uADF8\uAC83).",
32624
+ "properties": {
32625
+ "start_s": {
32626
+ "minimum": 0,
32627
+ "title": "Start S",
32628
+ "type": "number"
32629
+ },
32630
+ "end_s": {
32631
+ "exclusiveMinimum": 0,
32632
+ "title": "End S",
32633
+ "type": "number"
32634
+ },
32635
+ "title": {
32636
+ "default": "",
32637
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
32638
+ "title": "Title",
32639
+ "type": "string"
32640
+ },
32641
+ "score": {
32642
+ "default": 0,
32643
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
32644
+ "maximum": 100,
32645
+ "minimum": 0,
32646
+ "title": "Score",
32647
+ "type": "integer"
32648
+ },
32649
+ "reasoning": {
32650
+ "default": "",
32651
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
32652
+ "title": "Reasoning",
32653
+ "type": "string"
32654
+ }
32655
+ },
32656
+ "required": [
32657
+ "start_s",
32658
+ "end_s"
32659
+ ],
32660
+ "title": "HookCandidate",
32661
+ "type": "object"
32662
+ },
32663
+ "HookCandidates": {
32664
+ "description": "\uD55C \uCEF7\uC758 \uD0D0\uC0C9 \uACB0\uACFC \u2014 \uD6C4\uBCF4 \uBAA9\uB85D + **\uADF8\uB54C\uC758 \uC8FC\uC18C**.\n\n\u2605\u2605 `url` \uC744 \uD568\uAED8 \uB2F4\uB294 \uC774\uC720: \uC8FC\uC18C\uB97C \uBC14\uAFD4\uB3C4 \uD6C4\uBCF4\uB294 \uC9C0\uC6B0\uC9C0 \uC54A\uC73C\uBBC0\uB85C(\uC0AC\uC6A9\uC790 \uACB0\uC815) \uD654\uBA74\uC774 \u300C\uC774\uAC74 \uB2E4\uB978\n \uC601\uC0C1\uC758 \uAD6C\uAC04\uC774\uB2E4\u300D \uB97C \uC54C \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4. \uC0C8 \uC8FC\uC18C\uB85C \uB2E4\uC2DC \uCC3E\uC73C\uBA74 \uD1B5\uC9F8\uB85C \uB36E\uC778\uB2E4.\n\u2605 `items` \uAC00 **\uBE48 \uBC30\uC5F4**\uC778 \uAC83\uACFC `hook_candidates` \uC790\uCCB4\uAC00 \uC5C6\uB294 \uAC83\uC740 \uB2E4\uB978 \uB73B\uC774\uB2E4 \u2014 \uC804\uC790\uB294\n \u300C\uCC3E\uC558\uB294\uB370 \uC4F8 \uB9CC\uD55C \uAC83\uC774 \uC5C6\uC5C8\uB2E4\u300D, \uD6C4\uC790\uB294 \u300C\uC544\uC9C1 \uCC3E\uC740 \uC801 \uC5C6\uB2E4\u300D.",
32665
+ "properties": {
32666
+ "url": {
32667
+ "title": "Url",
32668
+ "type": "string"
32669
+ },
32670
+ "found_at": {
32671
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
32672
+ "title": "Found At",
32673
+ "type": "string"
32674
+ },
32675
+ "items": {
32676
+ "items": {
32677
+ "$ref": "#/$defs/HookCandidate"
32678
+ },
32679
+ "title": "Items",
32680
+ "type": "array"
32681
+ }
32682
+ },
32683
+ "required": [
32684
+ "url",
32685
+ "found_at"
32686
+ ],
32687
+ "title": "HookCandidates",
32688
+ "type": "object"
32689
+ },
32069
32690
  "JobError": {
32070
32691
  "description": '\uC7A1 \uC2E4\uD328\uC758 \uB300\uC678 \uC5BC\uAD74. \u2605\u2605 **\uB7F0\uD0C0\uC784\uC758 \uBAA8\uB4E0 \uC2E4\uD328 \uBD84\uAE30\uAC00 \uB9CC\uB4DC\uB294 \uBD09\uD22C\uB97C \uBC1B\uC544\uB0BC \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4** \u2014\n`to_view` \uAC00 `JobError(**rec.error)` \uB85C \uBCC0\uD658\uD558\uB294\uB370 \uC774 \uBAA8\uB378\uC740 `extra="forbid"` \uB77C, \uBD09\uD22C\uC5D0\uB9CC \uC788\uACE0\n\uC5EC\uAE30 \uC5C6\uB294 \uD0A4\uAC00 \uD558\uB098\uB77C\uB3C4 \uC788\uC73C\uBA74 **\uADF8 \uC7A1\uC758 \uC870\uD68C\uAC00 500** \uC774 \uB41C\uB2E4(2026-09-10 \uC2E4\uCE21: \uB2E4\uC12F \uACBD\uB85C \uC911 \uB137).\n\n\u26A0\uFE0F \uADF8 \uACB0\uD568\uC740 \uC870\uC6A9\uD558\uB2E4 \u2014 \uBD09\uD22C\uB97C *\uB9CC\uB4DC\uB294* \uACF3(`jobs/runtime.py` \uC758 except \uBD84\uAE30)\uACFC *\uC77D\uB294* \uACF3\uC774\n\uAC08\uB824 \uC788\uC5B4 \uC5B4\uB290 \uCABD \uD14C\uC2A4\uD2B8\uB3C4 \uC655\uBCF5\uC744 \uBCF4\uC9C0 \uC54A\uC558\uB2E4. \uADF8\uB798\uC11C `cause`(\uC7AC\uC2DC\uB3C4 \uC18C\uC9C4)\uC640 `data`(FatalError\xB7\nDemoCutError)\uAC00 \uACC4\uC57D \uBC16\uC5D0 \uC788\uB294 \uCC44\uB85C \uC624\uB798 \uC0B4\uC544\uB0A8\uC558\uACE0, **\uC2E4\uD328\uD55C \uC7A1\uC77C\uC218\uB85D \uC870\uD68C\uAC00 \uC548 \uB418\uB294** \uC0C1\uD0DC\uC600\uB2E4\n(\uB3C8\uC774 \uB098\uAC04 \uC790\uB9AC\uC758 \uC548\uB0B4\uB97C \uADF8 \uC870\uD68C\uB85C \uC804\uD558\uB294\uB370 \uB9D0\uC774\uB2E4). \uAC00\uB4DC\uB294 \uB124 \uBD84\uAE30\uB97C \uC2E4\uC81C\uB85C \uD0DC\uC6CC \uC655\uBCF5\uC2DC\uD0A8\uB2E4\n(`test_every_failure_envelope_survives_the_view`).',
32071
32692
  "properties": {
@@ -32840,6 +33461,17 @@ var GENERATED_TOOLS = [
32840
33461
  "title": "Images",
32841
33462
  "type": "array"
32842
33463
  },
33464
+ "hook_candidates": {
33465
+ "anyOf": [
33466
+ {
33467
+ "$ref": "#/$defs/HookCandidates"
33468
+ },
33469
+ {
33470
+ "type": "null"
33471
+ }
33472
+ ],
33473
+ "default": null
33474
+ },
32843
33475
  "versions": {
32844
33476
  "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
32845
33477
  "items": {
@@ -33803,6 +34435,74 @@ var GENERATED_TOOLS = [
33803
34435
  "title": "FromVersionImageRef",
33804
34436
  "type": "object"
33805
34437
  },
34438
+ "HookCandidate": {
34439
+ "description": "\uD6C4\uD0B9 \uAD6C\uAC04 \uD6C4\uBCF4 \uD558\uB098 \u2014 \uC0AC\uB78C\uC774 \uBAA9\uB85D\uC5D0\uC11C \uBCF4\uACE0 \uACE0\uB974\uB294 \uB2E8\uC704(\uC20F\uCE20 \uC7AC\uC124\uACC4 2026-09-22).\n\n\u2605\u2605 `title` \uACFC `reasoning` \uC740 **\uB2E4\uB978 \uAC83**\uC774\uB2E4(\uC61B `clip_extractor_service` \uC758 \uC5ED\uD560 \uBD84\uB2F4):\n `title` \uC740 **\uD6C4\uD06C \uCE74\uD53C**(\uACE0\uB974\uBA74 \uADF8\uB300\uB85C \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4), `reasoning` \uC740 **\uC65C \uACE8\uB790\uB294\uC9C0**\uB2E4.\n\u2605\u2605 `score` \uB294 **\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uAC15\uB3C4**\uB2E4 \u2014 \uC808\uB300 \uAE30\uC900\uC774 \uC5C6\uC5B4 \uB2E4\uB978 \uC601\uC0C1\uC758 \uC810\uC218\uC640 \uACAC\uC8FC\uBA74 \uC548 \uB41C\uB2E4.\n \uBAA9\uB85D\uC740 \uC774 \uAC12\uC758 \uB0B4\uB9BC\uCC28\uC21C\uC774\uACE0, \uADF8\uB798\uC11C **\uCCAB\uC9F8\uAC00 \uACE7 \uAC00\uC7A5 \uC88B\uC740 \uAC83**\uC774\uB2E4(\uC81C\uC548\uC774 \uC790\uB3D9\uC73C\uB85C \uACE0\uB974\uB294 \uAC83\uB3C4 \uADF8\uAC83).",
34440
+ "properties": {
34441
+ "start_s": {
34442
+ "minimum": 0,
34443
+ "title": "Start S",
34444
+ "type": "number"
34445
+ },
34446
+ "end_s": {
34447
+ "exclusiveMinimum": 0,
34448
+ "title": "End S",
34449
+ "type": "number"
34450
+ },
34451
+ "title": {
34452
+ "default": "",
34453
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
34454
+ "title": "Title",
34455
+ "type": "string"
34456
+ },
34457
+ "score": {
34458
+ "default": 0,
34459
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
34460
+ "maximum": 100,
34461
+ "minimum": 0,
34462
+ "title": "Score",
34463
+ "type": "integer"
34464
+ },
34465
+ "reasoning": {
34466
+ "default": "",
34467
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
34468
+ "title": "Reasoning",
34469
+ "type": "string"
34470
+ }
34471
+ },
34472
+ "required": [
34473
+ "start_s",
34474
+ "end_s"
34475
+ ],
34476
+ "title": "HookCandidate",
34477
+ "type": "object"
34478
+ },
34479
+ "HookCandidates": {
34480
+ "description": "\uD55C \uCEF7\uC758 \uD0D0\uC0C9 \uACB0\uACFC \u2014 \uD6C4\uBCF4 \uBAA9\uB85D + **\uADF8\uB54C\uC758 \uC8FC\uC18C**.\n\n\u2605\u2605 `url` \uC744 \uD568\uAED8 \uB2F4\uB294 \uC774\uC720: \uC8FC\uC18C\uB97C \uBC14\uAFD4\uB3C4 \uD6C4\uBCF4\uB294 \uC9C0\uC6B0\uC9C0 \uC54A\uC73C\uBBC0\uB85C(\uC0AC\uC6A9\uC790 \uACB0\uC815) \uD654\uBA74\uC774 \u300C\uC774\uAC74 \uB2E4\uB978\n \uC601\uC0C1\uC758 \uAD6C\uAC04\uC774\uB2E4\u300D \uB97C \uC54C \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4. \uC0C8 \uC8FC\uC18C\uB85C \uB2E4\uC2DC \uCC3E\uC73C\uBA74 \uD1B5\uC9F8\uB85C \uB36E\uC778\uB2E4.\n\u2605 `items` \uAC00 **\uBE48 \uBC30\uC5F4**\uC778 \uAC83\uACFC `hook_candidates` \uC790\uCCB4\uAC00 \uC5C6\uB294 \uAC83\uC740 \uB2E4\uB978 \uB73B\uC774\uB2E4 \u2014 \uC804\uC790\uB294\n \u300C\uCC3E\uC558\uB294\uB370 \uC4F8 \uB9CC\uD55C \uAC83\uC774 \uC5C6\uC5C8\uB2E4\u300D, \uD6C4\uC790\uB294 \u300C\uC544\uC9C1 \uCC3E\uC740 \uC801 \uC5C6\uB2E4\u300D.",
34481
+ "properties": {
34482
+ "url": {
34483
+ "title": "Url",
34484
+ "type": "string"
34485
+ },
34486
+ "found_at": {
34487
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
34488
+ "title": "Found At",
34489
+ "type": "string"
34490
+ },
34491
+ "items": {
34492
+ "items": {
34493
+ "$ref": "#/$defs/HookCandidate"
34494
+ },
34495
+ "title": "Items",
34496
+ "type": "array"
34497
+ }
34498
+ },
34499
+ "required": [
34500
+ "url",
34501
+ "found_at"
34502
+ ],
34503
+ "title": "HookCandidates",
34504
+ "type": "object"
34505
+ },
33806
34506
  "JobError": {
33807
34507
  "description": '\uC7A1 \uC2E4\uD328\uC758 \uB300\uC678 \uC5BC\uAD74. \u2605\u2605 **\uB7F0\uD0C0\uC784\uC758 \uBAA8\uB4E0 \uC2E4\uD328 \uBD84\uAE30\uAC00 \uB9CC\uB4DC\uB294 \uBD09\uD22C\uB97C \uBC1B\uC544\uB0BC \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4** \u2014\n`to_view` \uAC00 `JobError(**rec.error)` \uB85C \uBCC0\uD658\uD558\uB294\uB370 \uC774 \uBAA8\uB378\uC740 `extra="forbid"` \uB77C, \uBD09\uD22C\uC5D0\uB9CC \uC788\uACE0\n\uC5EC\uAE30 \uC5C6\uB294 \uD0A4\uAC00 \uD558\uB098\uB77C\uB3C4 \uC788\uC73C\uBA74 **\uADF8 \uC7A1\uC758 \uC870\uD68C\uAC00 500** \uC774 \uB41C\uB2E4(2026-09-10 \uC2E4\uCE21: \uB2E4\uC12F \uACBD\uB85C \uC911 \uB137).\n\n\u26A0\uFE0F \uADF8 \uACB0\uD568\uC740 \uC870\uC6A9\uD558\uB2E4 \u2014 \uBD09\uD22C\uB97C *\uB9CC\uB4DC\uB294* \uACF3(`jobs/runtime.py` \uC758 except \uBD84\uAE30)\uACFC *\uC77D\uB294* \uACF3\uC774\n\uAC08\uB824 \uC788\uC5B4 \uC5B4\uB290 \uCABD \uD14C\uC2A4\uD2B8\uB3C4 \uC655\uBCF5\uC744 \uBCF4\uC9C0 \uC54A\uC558\uB2E4. \uADF8\uB798\uC11C `cause`(\uC7AC\uC2DC\uB3C4 \uC18C\uC9C4)\uC640 `data`(FatalError\xB7\nDemoCutError)\uAC00 \uACC4\uC57D \uBC16\uC5D0 \uC788\uB294 \uCC44\uB85C \uC624\uB798 \uC0B4\uC544\uB0A8\uC558\uACE0, **\uC2E4\uD328\uD55C \uC7A1\uC77C\uC218\uB85D \uC870\uD68C\uAC00 \uC548 \uB418\uB294** \uC0C1\uD0DC\uC600\uB2E4\n(\uB3C8\uC774 \uB098\uAC04 \uC790\uB9AC\uC758 \uC548\uB0B4\uB97C \uADF8 \uC870\uD68C\uB85C \uC804\uD558\uB294\uB370 \uB9D0\uC774\uB2E4). \uAC00\uB4DC\uB294 \uB124 \uBD84\uAE30\uB97C \uC2E4\uC81C\uB85C \uD0DC\uC6CC \uC655\uBCF5\uC2DC\uD0A8\uB2E4\n(`test_every_failure_envelope_survives_the_view`).',
33808
34508
  "properties": {
@@ -34577,6 +35277,17 @@ var GENERATED_TOOLS = [
34577
35277
  "title": "Images",
34578
35278
  "type": "array"
34579
35279
  },
35280
+ "hook_candidates": {
35281
+ "anyOf": [
35282
+ {
35283
+ "$ref": "#/$defs/HookCandidates"
35284
+ },
35285
+ {
35286
+ "type": "null"
35287
+ }
35288
+ ],
35289
+ "default": null
35290
+ },
34580
35291
  "versions": {
34581
35292
  "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
34582
35293
  "items": {
@@ -35502,6 +36213,74 @@ var GENERATED_TOOLS = [
35502
36213
  "title": "FromVersionImageRef",
35503
36214
  "type": "object"
35504
36215
  },
36216
+ "HookCandidate": {
36217
+ "description": "\uD6C4\uD0B9 \uAD6C\uAC04 \uD6C4\uBCF4 \uD558\uB098 \u2014 \uC0AC\uB78C\uC774 \uBAA9\uB85D\uC5D0\uC11C \uBCF4\uACE0 \uACE0\uB974\uB294 \uB2E8\uC704(\uC20F\uCE20 \uC7AC\uC124\uACC4 2026-09-22).\n\n\u2605\u2605 `title` \uACFC `reasoning` \uC740 **\uB2E4\uB978 \uAC83**\uC774\uB2E4(\uC61B `clip_extractor_service` \uC758 \uC5ED\uD560 \uBD84\uB2F4):\n `title` \uC740 **\uD6C4\uD06C \uCE74\uD53C**(\uACE0\uB974\uBA74 \uADF8\uB300\uB85C \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4), `reasoning` \uC740 **\uC65C \uACE8\uB790\uB294\uC9C0**\uB2E4.\n\u2605\u2605 `score` \uB294 **\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uAC15\uB3C4**\uB2E4 \u2014 \uC808\uB300 \uAE30\uC900\uC774 \uC5C6\uC5B4 \uB2E4\uB978 \uC601\uC0C1\uC758 \uC810\uC218\uC640 \uACAC\uC8FC\uBA74 \uC548 \uB41C\uB2E4.\n \uBAA9\uB85D\uC740 \uC774 \uAC12\uC758 \uB0B4\uB9BC\uCC28\uC21C\uC774\uACE0, \uADF8\uB798\uC11C **\uCCAB\uC9F8\uAC00 \uACE7 \uAC00\uC7A5 \uC88B\uC740 \uAC83**\uC774\uB2E4(\uC81C\uC548\uC774 \uC790\uB3D9\uC73C\uB85C \uACE0\uB974\uB294 \uAC83\uB3C4 \uADF8\uAC83).",
36218
+ "properties": {
36219
+ "start_s": {
36220
+ "minimum": 0,
36221
+ "title": "Start S",
36222
+ "type": "number"
36223
+ },
36224
+ "end_s": {
36225
+ "exclusiveMinimum": 0,
36226
+ "title": "End S",
36227
+ "type": "number"
36228
+ },
36229
+ "title": {
36230
+ "default": "",
36231
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
36232
+ "title": "Title",
36233
+ "type": "string"
36234
+ },
36235
+ "score": {
36236
+ "default": 0,
36237
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
36238
+ "maximum": 100,
36239
+ "minimum": 0,
36240
+ "title": "Score",
36241
+ "type": "integer"
36242
+ },
36243
+ "reasoning": {
36244
+ "default": "",
36245
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
36246
+ "title": "Reasoning",
36247
+ "type": "string"
36248
+ }
36249
+ },
36250
+ "required": [
36251
+ "start_s",
36252
+ "end_s"
36253
+ ],
36254
+ "title": "HookCandidate",
36255
+ "type": "object"
36256
+ },
36257
+ "HookCandidates": {
36258
+ "description": "\uD55C \uCEF7\uC758 \uD0D0\uC0C9 \uACB0\uACFC \u2014 \uD6C4\uBCF4 \uBAA9\uB85D + **\uADF8\uB54C\uC758 \uC8FC\uC18C**.\n\n\u2605\u2605 `url` \uC744 \uD568\uAED8 \uB2F4\uB294 \uC774\uC720: \uC8FC\uC18C\uB97C \uBC14\uAFD4\uB3C4 \uD6C4\uBCF4\uB294 \uC9C0\uC6B0\uC9C0 \uC54A\uC73C\uBBC0\uB85C(\uC0AC\uC6A9\uC790 \uACB0\uC815) \uD654\uBA74\uC774 \u300C\uC774\uAC74 \uB2E4\uB978\n \uC601\uC0C1\uC758 \uAD6C\uAC04\uC774\uB2E4\u300D \uB97C \uC54C \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4. \uC0C8 \uC8FC\uC18C\uB85C \uB2E4\uC2DC \uCC3E\uC73C\uBA74 \uD1B5\uC9F8\uB85C \uB36E\uC778\uB2E4.\n\u2605 `items` \uAC00 **\uBE48 \uBC30\uC5F4**\uC778 \uAC83\uACFC `hook_candidates` \uC790\uCCB4\uAC00 \uC5C6\uB294 \uAC83\uC740 \uB2E4\uB978 \uB73B\uC774\uB2E4 \u2014 \uC804\uC790\uB294\n \u300C\uCC3E\uC558\uB294\uB370 \uC4F8 \uB9CC\uD55C \uAC83\uC774 \uC5C6\uC5C8\uB2E4\u300D, \uD6C4\uC790\uB294 \u300C\uC544\uC9C1 \uCC3E\uC740 \uC801 \uC5C6\uB2E4\u300D.",
36259
+ "properties": {
36260
+ "url": {
36261
+ "title": "Url",
36262
+ "type": "string"
36263
+ },
36264
+ "found_at": {
36265
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
36266
+ "title": "Found At",
36267
+ "type": "string"
36268
+ },
36269
+ "items": {
36270
+ "items": {
36271
+ "$ref": "#/$defs/HookCandidate"
36272
+ },
36273
+ "title": "Items",
36274
+ "type": "array"
36275
+ }
36276
+ },
36277
+ "required": [
36278
+ "url",
36279
+ "found_at"
36280
+ ],
36281
+ "title": "HookCandidates",
36282
+ "type": "object"
36283
+ },
35505
36284
  "JobError": {
35506
36285
  "description": '\uC7A1 \uC2E4\uD328\uC758 \uB300\uC678 \uC5BC\uAD74. \u2605\u2605 **\uB7F0\uD0C0\uC784\uC758 \uBAA8\uB4E0 \uC2E4\uD328 \uBD84\uAE30\uAC00 \uB9CC\uB4DC\uB294 \uBD09\uD22C\uB97C \uBC1B\uC544\uB0BC \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4** \u2014\n`to_view` \uAC00 `JobError(**rec.error)` \uB85C \uBCC0\uD658\uD558\uB294\uB370 \uC774 \uBAA8\uB378\uC740 `extra="forbid"` \uB77C, \uBD09\uD22C\uC5D0\uB9CC \uC788\uACE0\n\uC5EC\uAE30 \uC5C6\uB294 \uD0A4\uAC00 \uD558\uB098\uB77C\uB3C4 \uC788\uC73C\uBA74 **\uADF8 \uC7A1\uC758 \uC870\uD68C\uAC00 500** \uC774 \uB41C\uB2E4(2026-09-10 \uC2E4\uCE21: \uB2E4\uC12F \uACBD\uB85C \uC911 \uB137).\n\n\u26A0\uFE0F \uADF8 \uACB0\uD568\uC740 \uC870\uC6A9\uD558\uB2E4 \u2014 \uBD09\uD22C\uB97C *\uB9CC\uB4DC\uB294* \uACF3(`jobs/runtime.py` \uC758 except \uBD84\uAE30)\uACFC *\uC77D\uB294* \uACF3\uC774\n\uAC08\uB824 \uC788\uC5B4 \uC5B4\uB290 \uCABD \uD14C\uC2A4\uD2B8\uB3C4 \uC655\uBCF5\uC744 \uBCF4\uC9C0 \uC54A\uC558\uB2E4. \uADF8\uB798\uC11C `cause`(\uC7AC\uC2DC\uB3C4 \uC18C\uC9C4)\uC640 `data`(FatalError\xB7\nDemoCutError)\uAC00 \uACC4\uC57D \uBC16\uC5D0 \uC788\uB294 \uCC44\uB85C \uC624\uB798 \uC0B4\uC544\uB0A8\uC558\uACE0, **\uC2E4\uD328\uD55C \uC7A1\uC77C\uC218\uB85D \uC870\uD68C\uAC00 \uC548 \uB418\uB294** \uC0C1\uD0DC\uC600\uB2E4\n(\uB3C8\uC774 \uB098\uAC04 \uC790\uB9AC\uC758 \uC548\uB0B4\uB97C \uADF8 \uC870\uD68C\uB85C \uC804\uD558\uB294\uB370 \uB9D0\uC774\uB2E4). \uAC00\uB4DC\uB294 \uB124 \uBD84\uAE30\uB97C \uC2E4\uC81C\uB85C \uD0DC\uC6CC \uC655\uBCF5\uC2DC\uD0A8\uB2E4\n(`test_every_failure_envelope_survives_the_view`).',
35507
36286
  "properties": {
@@ -36276,6 +37055,17 @@ var GENERATED_TOOLS = [
36276
37055
  "title": "Images",
36277
37056
  "type": "array"
36278
37057
  },
37058
+ "hook_candidates": {
37059
+ "anyOf": [
37060
+ {
37061
+ "$ref": "#/$defs/HookCandidates"
37062
+ },
37063
+ {
37064
+ "type": "null"
37065
+ }
37066
+ ],
37067
+ "default": null
37068
+ },
36279
37069
  "versions": {
36280
37070
  "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
36281
37071
  "items": {
@@ -37170,6 +37960,17 @@ var GENERATED_TOOLS = [
37170
37960
  "title": "Images",
37171
37961
  "type": "array"
37172
37962
  },
37963
+ "hook_candidates": {
37964
+ "anyOf": [
37965
+ {
37966
+ "$ref": "#/$defs/HookCandidates"
37967
+ },
37968
+ {
37969
+ "type": "null"
37970
+ }
37971
+ ],
37972
+ "default": null
37973
+ },
37173
37974
  "versions": {
37174
37975
  "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
37175
37976
  "items": {
@@ -37516,6 +38317,74 @@ var GENERATED_TOOLS = [
37516
38317
  "title": "FromVersionImageRef",
37517
38318
  "type": "object"
37518
38319
  },
38320
+ "HookCandidate": {
38321
+ "description": "\uD6C4\uD0B9 \uAD6C\uAC04 \uD6C4\uBCF4 \uD558\uB098 \u2014 \uC0AC\uB78C\uC774 \uBAA9\uB85D\uC5D0\uC11C \uBCF4\uACE0 \uACE0\uB974\uB294 \uB2E8\uC704(\uC20F\uCE20 \uC7AC\uC124\uACC4 2026-09-22).\n\n\u2605\u2605 `title` \uACFC `reasoning` \uC740 **\uB2E4\uB978 \uAC83**\uC774\uB2E4(\uC61B `clip_extractor_service` \uC758 \uC5ED\uD560 \uBD84\uB2F4):\n `title` \uC740 **\uD6C4\uD06C \uCE74\uD53C**(\uACE0\uB974\uBA74 \uADF8\uB300\uB85C \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4), `reasoning` \uC740 **\uC65C \uACE8\uB790\uB294\uC9C0**\uB2E4.\n\u2605\u2605 `score` \uB294 **\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uAC15\uB3C4**\uB2E4 \u2014 \uC808\uB300 \uAE30\uC900\uC774 \uC5C6\uC5B4 \uB2E4\uB978 \uC601\uC0C1\uC758 \uC810\uC218\uC640 \uACAC\uC8FC\uBA74 \uC548 \uB41C\uB2E4.\n \uBAA9\uB85D\uC740 \uC774 \uAC12\uC758 \uB0B4\uB9BC\uCC28\uC21C\uC774\uACE0, \uADF8\uB798\uC11C **\uCCAB\uC9F8\uAC00 \uACE7 \uAC00\uC7A5 \uC88B\uC740 \uAC83**\uC774\uB2E4(\uC81C\uC548\uC774 \uC790\uB3D9\uC73C\uB85C \uACE0\uB974\uB294 \uAC83\uB3C4 \uADF8\uAC83).",
38322
+ "properties": {
38323
+ "start_s": {
38324
+ "minimum": 0,
38325
+ "title": "Start S",
38326
+ "type": "number"
38327
+ },
38328
+ "end_s": {
38329
+ "exclusiveMinimum": 0,
38330
+ "title": "End S",
38331
+ "type": "number"
38332
+ },
38333
+ "title": {
38334
+ "default": "",
38335
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
38336
+ "title": "Title",
38337
+ "type": "string"
38338
+ },
38339
+ "score": {
38340
+ "default": 0,
38341
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
38342
+ "maximum": 100,
38343
+ "minimum": 0,
38344
+ "title": "Score",
38345
+ "type": "integer"
38346
+ },
38347
+ "reasoning": {
38348
+ "default": "",
38349
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
38350
+ "title": "Reasoning",
38351
+ "type": "string"
38352
+ }
38353
+ },
38354
+ "required": [
38355
+ "start_s",
38356
+ "end_s"
38357
+ ],
38358
+ "title": "HookCandidate",
38359
+ "type": "object"
38360
+ },
38361
+ "HookCandidates": {
38362
+ "description": "\uD55C \uCEF7\uC758 \uD0D0\uC0C9 \uACB0\uACFC \u2014 \uD6C4\uBCF4 \uBAA9\uB85D + **\uADF8\uB54C\uC758 \uC8FC\uC18C**.\n\n\u2605\u2605 `url` \uC744 \uD568\uAED8 \uB2F4\uB294 \uC774\uC720: \uC8FC\uC18C\uB97C \uBC14\uAFD4\uB3C4 \uD6C4\uBCF4\uB294 \uC9C0\uC6B0\uC9C0 \uC54A\uC73C\uBBC0\uB85C(\uC0AC\uC6A9\uC790 \uACB0\uC815) \uD654\uBA74\uC774 \u300C\uC774\uAC74 \uB2E4\uB978\n \uC601\uC0C1\uC758 \uAD6C\uAC04\uC774\uB2E4\u300D \uB97C \uC54C \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4. \uC0C8 \uC8FC\uC18C\uB85C \uB2E4\uC2DC \uCC3E\uC73C\uBA74 \uD1B5\uC9F8\uB85C \uB36E\uC778\uB2E4.\n\u2605 `items` \uAC00 **\uBE48 \uBC30\uC5F4**\uC778 \uAC83\uACFC `hook_candidates` \uC790\uCCB4\uAC00 \uC5C6\uB294 \uAC83\uC740 \uB2E4\uB978 \uB73B\uC774\uB2E4 \u2014 \uC804\uC790\uB294\n \u300C\uCC3E\uC558\uB294\uB370 \uC4F8 \uB9CC\uD55C \uAC83\uC774 \uC5C6\uC5C8\uB2E4\u300D, \uD6C4\uC790\uB294 \u300C\uC544\uC9C1 \uCC3E\uC740 \uC801 \uC5C6\uB2E4\u300D.",
38363
+ "properties": {
38364
+ "url": {
38365
+ "title": "Url",
38366
+ "type": "string"
38367
+ },
38368
+ "found_at": {
38369
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
38370
+ "title": "Found At",
38371
+ "type": "string"
38372
+ },
38373
+ "items": {
38374
+ "items": {
38375
+ "$ref": "#/$defs/HookCandidate"
38376
+ },
38377
+ "title": "Items",
38378
+ "type": "array"
38379
+ }
38380
+ },
38381
+ "required": [
38382
+ "url",
38383
+ "found_at"
38384
+ ],
38385
+ "title": "HookCandidates",
38386
+ "type": "object"
38387
+ },
37519
38388
  "JobError": {
37520
38389
  "description": '\uC7A1 \uC2E4\uD328\uC758 \uB300\uC678 \uC5BC\uAD74. \u2605\u2605 **\uB7F0\uD0C0\uC784\uC758 \uBAA8\uB4E0 \uC2E4\uD328 \uBD84\uAE30\uAC00 \uB9CC\uB4DC\uB294 \uBD09\uD22C\uB97C \uBC1B\uC544\uB0BC \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4** \u2014\n`to_view` \uAC00 `JobError(**rec.error)` \uB85C \uBCC0\uD658\uD558\uB294\uB370 \uC774 \uBAA8\uB378\uC740 `extra="forbid"` \uB77C, \uBD09\uD22C\uC5D0\uB9CC \uC788\uACE0\n\uC5EC\uAE30 \uC5C6\uB294 \uD0A4\uAC00 \uD558\uB098\uB77C\uB3C4 \uC788\uC73C\uBA74 **\uADF8 \uC7A1\uC758 \uC870\uD68C\uAC00 500** \uC774 \uB41C\uB2E4(2026-09-10 \uC2E4\uCE21: \uB2E4\uC12F \uACBD\uB85C \uC911 \uB137).\n\n\u26A0\uFE0F \uADF8 \uACB0\uD568\uC740 \uC870\uC6A9\uD558\uB2E4 \u2014 \uBD09\uD22C\uB97C *\uB9CC\uB4DC\uB294* \uACF3(`jobs/runtime.py` \uC758 except \uBD84\uAE30)\uACFC *\uC77D\uB294* \uACF3\uC774\n\uAC08\uB824 \uC788\uC5B4 \uC5B4\uB290 \uCABD \uD14C\uC2A4\uD2B8\uB3C4 \uC655\uBCF5\uC744 \uBCF4\uC9C0 \uC54A\uC558\uB2E4. \uADF8\uB798\uC11C `cause`(\uC7AC\uC2DC\uB3C4 \uC18C\uC9C4)\uC640 `data`(FatalError\xB7\nDemoCutError)\uAC00 \uACC4\uC57D \uBC16\uC5D0 \uC788\uB294 \uCC44\uB85C \uC624\uB798 \uC0B4\uC544\uB0A8\uC558\uACE0, **\uC2E4\uD328\uD55C \uC7A1\uC77C\uC218\uB85D \uC870\uD68C\uAC00 \uC548 \uB418\uB294** \uC0C1\uD0DC\uC600\uB2E4\n(\uB3C8\uC774 \uB098\uAC04 \uC790\uB9AC\uC758 \uC548\uB0B4\uB97C \uADF8 \uC870\uD68C\uB85C \uC804\uD558\uB294\uB370 \uB9D0\uC774\uB2E4). \uAC00\uB4DC\uB294 \uB124 \uBD84\uAE30\uB97C \uC2E4\uC81C\uB85C \uD0DC\uC6CC \uC655\uBCF5\uC2DC\uD0A8\uB2E4\n(`test_every_failure_envelope_survives_the_view`).',
37521
38390
  "properties": {
@@ -40741,6 +41610,17 @@ var GENERATED_TOOLS = [
40741
41610
  "title": "Images",
40742
41611
  "type": "array"
40743
41612
  },
41613
+ "hook_candidates": {
41614
+ "anyOf": [
41615
+ {
41616
+ "$ref": "#/$defs/HookCandidates"
41617
+ },
41618
+ {
41619
+ "type": "null"
41620
+ }
41621
+ ],
41622
+ "default": null
41623
+ },
40744
41624
  "versions": {
40745
41625
  "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
40746
41626
  "items": {
@@ -41087,6 +41967,74 @@ var GENERATED_TOOLS = [
41087
41967
  "title": "FromVersionImageRef",
41088
41968
  "type": "object"
41089
41969
  },
41970
+ "HookCandidate": {
41971
+ "description": "\uD6C4\uD0B9 \uAD6C\uAC04 \uD6C4\uBCF4 \uD558\uB098 \u2014 \uC0AC\uB78C\uC774 \uBAA9\uB85D\uC5D0\uC11C \uBCF4\uACE0 \uACE0\uB974\uB294 \uB2E8\uC704(\uC20F\uCE20 \uC7AC\uC124\uACC4 2026-09-22).\n\n\u2605\u2605 `title` \uACFC `reasoning` \uC740 **\uB2E4\uB978 \uAC83**\uC774\uB2E4(\uC61B `clip_extractor_service` \uC758 \uC5ED\uD560 \uBD84\uB2F4):\n `title` \uC740 **\uD6C4\uD06C \uCE74\uD53C**(\uACE0\uB974\uBA74 \uADF8\uB300\uB85C \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4), `reasoning` \uC740 **\uC65C \uACE8\uB790\uB294\uC9C0**\uB2E4.\n\u2605\u2605 `score` \uB294 **\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uAC15\uB3C4**\uB2E4 \u2014 \uC808\uB300 \uAE30\uC900\uC774 \uC5C6\uC5B4 \uB2E4\uB978 \uC601\uC0C1\uC758 \uC810\uC218\uC640 \uACAC\uC8FC\uBA74 \uC548 \uB41C\uB2E4.\n \uBAA9\uB85D\uC740 \uC774 \uAC12\uC758 \uB0B4\uB9BC\uCC28\uC21C\uC774\uACE0, \uADF8\uB798\uC11C **\uCCAB\uC9F8\uAC00 \uACE7 \uAC00\uC7A5 \uC88B\uC740 \uAC83**\uC774\uB2E4(\uC81C\uC548\uC774 \uC790\uB3D9\uC73C\uB85C \uACE0\uB974\uB294 \uAC83\uB3C4 \uADF8\uAC83).",
41972
+ "properties": {
41973
+ "start_s": {
41974
+ "minimum": 0,
41975
+ "title": "Start S",
41976
+ "type": "number"
41977
+ },
41978
+ "end_s": {
41979
+ "exclusiveMinimum": 0,
41980
+ "title": "End S",
41981
+ "type": "number"
41982
+ },
41983
+ "title": {
41984
+ "default": "",
41985
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
41986
+ "title": "Title",
41987
+ "type": "string"
41988
+ },
41989
+ "score": {
41990
+ "default": 0,
41991
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
41992
+ "maximum": 100,
41993
+ "minimum": 0,
41994
+ "title": "Score",
41995
+ "type": "integer"
41996
+ },
41997
+ "reasoning": {
41998
+ "default": "",
41999
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
42000
+ "title": "Reasoning",
42001
+ "type": "string"
42002
+ }
42003
+ },
42004
+ "required": [
42005
+ "start_s",
42006
+ "end_s"
42007
+ ],
42008
+ "title": "HookCandidate",
42009
+ "type": "object"
42010
+ },
42011
+ "HookCandidates": {
42012
+ "description": "\uD55C \uCEF7\uC758 \uD0D0\uC0C9 \uACB0\uACFC \u2014 \uD6C4\uBCF4 \uBAA9\uB85D + **\uADF8\uB54C\uC758 \uC8FC\uC18C**.\n\n\u2605\u2605 `url` \uC744 \uD568\uAED8 \uB2F4\uB294 \uC774\uC720: \uC8FC\uC18C\uB97C \uBC14\uAFD4\uB3C4 \uD6C4\uBCF4\uB294 \uC9C0\uC6B0\uC9C0 \uC54A\uC73C\uBBC0\uB85C(\uC0AC\uC6A9\uC790 \uACB0\uC815) \uD654\uBA74\uC774 \u300C\uC774\uAC74 \uB2E4\uB978\n \uC601\uC0C1\uC758 \uAD6C\uAC04\uC774\uB2E4\u300D \uB97C \uC54C \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4. \uC0C8 \uC8FC\uC18C\uB85C \uB2E4\uC2DC \uCC3E\uC73C\uBA74 \uD1B5\uC9F8\uB85C \uB36E\uC778\uB2E4.\n\u2605 `items` \uAC00 **\uBE48 \uBC30\uC5F4**\uC778 \uAC83\uACFC `hook_candidates` \uC790\uCCB4\uAC00 \uC5C6\uB294 \uAC83\uC740 \uB2E4\uB978 \uB73B\uC774\uB2E4 \u2014 \uC804\uC790\uB294\n \u300C\uCC3E\uC558\uB294\uB370 \uC4F8 \uB9CC\uD55C \uAC83\uC774 \uC5C6\uC5C8\uB2E4\u300D, \uD6C4\uC790\uB294 \u300C\uC544\uC9C1 \uCC3E\uC740 \uC801 \uC5C6\uB2E4\u300D.",
42013
+ "properties": {
42014
+ "url": {
42015
+ "title": "Url",
42016
+ "type": "string"
42017
+ },
42018
+ "found_at": {
42019
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
42020
+ "title": "Found At",
42021
+ "type": "string"
42022
+ },
42023
+ "items": {
42024
+ "items": {
42025
+ "$ref": "#/$defs/HookCandidate"
42026
+ },
42027
+ "title": "Items",
42028
+ "type": "array"
42029
+ }
42030
+ },
42031
+ "required": [
42032
+ "url",
42033
+ "found_at"
42034
+ ],
42035
+ "title": "HookCandidates",
42036
+ "type": "object"
42037
+ },
41090
42038
  "JobError": {
41091
42039
  "description": '\uC7A1 \uC2E4\uD328\uC758 \uB300\uC678 \uC5BC\uAD74. \u2605\u2605 **\uB7F0\uD0C0\uC784\uC758 \uBAA8\uB4E0 \uC2E4\uD328 \uBD84\uAE30\uAC00 \uB9CC\uB4DC\uB294 \uBD09\uD22C\uB97C \uBC1B\uC544\uB0BC \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4** \u2014\n`to_view` \uAC00 `JobError(**rec.error)` \uB85C \uBCC0\uD658\uD558\uB294\uB370 \uC774 \uBAA8\uB378\uC740 `extra="forbid"` \uB77C, \uBD09\uD22C\uC5D0\uB9CC \uC788\uACE0\n\uC5EC\uAE30 \uC5C6\uB294 \uD0A4\uAC00 \uD558\uB098\uB77C\uB3C4 \uC788\uC73C\uBA74 **\uADF8 \uC7A1\uC758 \uC870\uD68C\uAC00 500** \uC774 \uB41C\uB2E4(2026-09-10 \uC2E4\uCE21: \uB2E4\uC12F \uACBD\uB85C \uC911 \uB137).\n\n\u26A0\uFE0F \uADF8 \uACB0\uD568\uC740 \uC870\uC6A9\uD558\uB2E4 \u2014 \uBD09\uD22C\uB97C *\uB9CC\uB4DC\uB294* \uACF3(`jobs/runtime.py` \uC758 except \uBD84\uAE30)\uACFC *\uC77D\uB294* \uACF3\uC774\n\uAC08\uB824 \uC788\uC5B4 \uC5B4\uB290 \uCABD \uD14C\uC2A4\uD2B8\uB3C4 \uC655\uBCF5\uC744 \uBCF4\uC9C0 \uC54A\uC558\uB2E4. \uADF8\uB798\uC11C `cause`(\uC7AC\uC2DC\uB3C4 \uC18C\uC9C4)\uC640 `data`(FatalError\xB7\nDemoCutError)\uAC00 \uACC4\uC57D \uBC16\uC5D0 \uC788\uB294 \uCC44\uB85C \uC624\uB798 \uC0B4\uC544\uB0A8\uC558\uACE0, **\uC2E4\uD328\uD55C \uC7A1\uC77C\uC218\uB85D \uC870\uD68C\uAC00 \uC548 \uB418\uB294** \uC0C1\uD0DC\uC600\uB2E4\n(\uB3C8\uC774 \uB098\uAC04 \uC790\uB9AC\uC758 \uC548\uB0B4\uB97C \uADF8 \uC870\uD68C\uB85C \uC804\uD558\uB294\uB370 \uB9D0\uC774\uB2E4). \uAC00\uB4DC\uB294 \uB124 \uBD84\uAE30\uB97C \uC2E4\uC81C\uB85C \uD0DC\uC6CC \uC655\uBCF5\uC2DC\uD0A8\uB2E4\n(`test_every_failure_envelope_survives_the_view`).',
41092
42040
  "properties": {
@@ -42490,7 +43438,7 @@ var GENERATED_TOOLS = [
42490
43438
  },
42491
43439
  {
42492
43440
  "name": "democut_estimate_hook_scan",
42493
- "description": "\uC720\uD29C\uBE0C \uC6D0\uBCF8\uC5D0\uC11C \uC20F\uD3FC\uC73C\uB85C \uC4F8 \uAD6C\uAC04\uC744 \uCC3E\uB294 \uACAC\uC801. \u2605 \uD569\uACC4\uB294 **\uC0C1\uD55C**\uC774\uB2E4 \u2014 \uC601\uC0C1\uC5D0 \uC790\uB9C9\uC774 \uC788\uC73C\uBA74 \uC804\uC0AC \uD589\uC740 \uC815\uC0B0\uC5D0\uC11C \uC804\uC561 \uD658\uBD88\uB41C\uB2E4.",
43441
+ "description": "\uADF8 \uC720\uD29C\uBE0C \uD074\uB9BD \uCEF7\uC758 \uC8FC\uC18C\uC5D0\uC11C \uC20F\uD3FC\uC73C\uB85C \uC4F8 \uAD6C\uAC04\uC744 \uCC3E\uB294 \uACAC\uC801. \uC8FC\uC18C\uB294 \uCEF7 \uCD08\uC548(draft_spec.source.url)\uC5D0\uC11C \uC77D\uB294\uB2E4 \u2014 \uC5C6\uC73C\uBA74 422. \u2605 \uD569\uACC4\uB294 **\uC0C1\uD55C**\uC774\uB2E4 \u2014 \uC601\uC0C1\uC5D0 \uC790\uB9C9\uC774 \uC788\uC73C\uBA74 \uC804\uC0AC \uD589\uC740 \uC815\uC0B0\uC5D0\uC11C \uC804\uC561 \uD658\uBD88\uB41C\uB2E4.",
42494
43442
  "inputSchema": {
42495
43443
  "type": "object",
42496
43444
  "properties": {
@@ -42498,15 +43446,13 @@ var GENERATED_TOOLS = [
42498
43446
  "type": "string",
42499
43447
  "description": "\uD504\uB85C\uC81D\uD2B8 \uC2AC\uB7EC\uADF8(list_projects)"
42500
43448
  },
42501
- "url": {
42502
- "description": "\uBD84\uC11D\uD560 \uC720\uD29C\uBE0C \uC8FC\uC18C(\uACF5\uAC1C \uC601\uC0C1)",
42503
- "minLength": 1,
42504
- "title": "Url",
42505
- "type": "string"
43449
+ "cut_id": {
43450
+ "type": "string",
43451
+ "description": "\uCEF7 id(cut_\u2026)"
42506
43452
  },
42507
43453
  "count": {
42508
- "default": 3,
42509
- "description": "\uACE0\uB97C \uAD6C\uAC04 \uC218(\uAE30\uBCF8 3)",
43454
+ "default": 5,
43455
+ "description": "\uCC3E\uC744 \uD6C4\uBCF4 \uC218(\uAE30\uBCF8 5)",
42510
43456
  "maximum": 10,
42511
43457
  "minimum": 1,
42512
43458
  "title": "Count",
@@ -42515,7 +43461,7 @@ var GENERATED_TOOLS = [
42515
43461
  },
42516
43462
  "required": [
42517
43463
  "slug",
42518
- "url"
43464
+ "cut_id"
42519
43465
  ],
42520
43466
  "additionalProperties": false
42521
43467
  },
@@ -42594,274 +43540,2037 @@ var GENERATED_TOOLS = [
42594
43540
  }
42595
43541
  ],
42596
43542
  "default": null,
42597
- "title": "Cut Id"
43543
+ "title": "Cut Id"
43544
+ }
43545
+ },
43546
+ "required": [
43547
+ "code",
43548
+ "message"
43549
+ ],
43550
+ "title": "EstimateNote",
43551
+ "type": "object"
43552
+ },
43553
+ "QuoteRow": {
43554
+ "properties": {
43555
+ "key": {
43556
+ "description": "\uC7A1 \uC548\uC5D0\uC11C \uC720\uC77C\uD55C \uD589 \uD0A4 \u2014 tts:<line_id> \xB7 videogen:i2v \xB7 lipsync \xB7 render:\u2026",
43557
+ "title": "Key",
43558
+ "type": "string"
43559
+ },
43560
+ "ref_type": {
43561
+ "description": "\uC6D0\uAC00\uD45C \uD0A4(credits/pricing.BASE_PRICES)",
43562
+ "title": "Ref Type",
43563
+ "type": "string"
43564
+ },
43565
+ "units": {
43566
+ "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
43567
+ "title": "Units",
43568
+ "type": "string"
43569
+ },
43570
+ "unit_kind": {
43571
+ "title": "Unit Kind",
43572
+ "type": "string"
43573
+ },
43574
+ "display_name": {
43575
+ "title": "Display Name",
43576
+ "type": "string"
43577
+ },
43578
+ "krw": {
43579
+ "minimum": 0,
43580
+ "title": "Krw",
43581
+ "type": "integer"
43582
+ },
43583
+ "provisional": {
43584
+ "default": false,
43585
+ "title": "Provisional",
43586
+ "type": "boolean"
43587
+ }
43588
+ },
43589
+ "required": [
43590
+ "key",
43591
+ "ref_type",
43592
+ "units",
43593
+ "unit_kind",
43594
+ "display_name",
43595
+ "krw"
43596
+ ],
43597
+ "title": "QuoteRow",
43598
+ "type": "object"
43599
+ }
43600
+ },
43601
+ "properties": {
43602
+ "items": {
43603
+ "items": {
43604
+ "$ref": "#/$defs/EstimateItemResult"
43605
+ },
43606
+ "title": "Items",
43607
+ "type": "array"
43608
+ },
43609
+ "notes": {
43610
+ "items": {
43611
+ "$ref": "#/$defs/EstimateNote"
43612
+ },
43613
+ "title": "Notes",
43614
+ "type": "array"
43615
+ },
43616
+ "total_krw": {
43617
+ "title": "Total Krw",
43618
+ "type": "integer"
43619
+ },
43620
+ "rate_version": {
43621
+ "title": "Rate Version",
43622
+ "type": "integer"
43623
+ },
43624
+ "balance_krw": {
43625
+ "title": "Balance Krw",
43626
+ "type": "integer"
43627
+ },
43628
+ "balance_after_krw": {
43629
+ "title": "Balance After Krw",
43630
+ "type": "integer"
43631
+ },
43632
+ "can_afford": {
43633
+ "title": "Can Afford",
43634
+ "type": "boolean"
43635
+ },
43636
+ "mock": {
43637
+ "default": false,
43638
+ "title": "Mock",
43639
+ "type": "boolean"
43640
+ },
43641
+ "provisional": {
43642
+ "default": false,
43643
+ "title": "Provisional",
43644
+ "type": "boolean"
43645
+ }
43646
+ },
43647
+ "required": [
43648
+ "total_krw",
43649
+ "rate_version",
43650
+ "balance_krw",
43651
+ "balance_after_krw",
43652
+ "can_afford"
43653
+ ],
43654
+ "title": "EstimateResponse",
43655
+ "type": "object"
43656
+ },
43657
+ "annotations": {
43658
+ "readOnlyHint": false,
43659
+ "destructiveHint": false,
43660
+ "idempotentHint": false,
43661
+ "openWorldHint": false
43662
+ }
43663
+ },
43664
+ {
43665
+ "name": "democut_make_hook_scan",
43666
+ "description": "\uADF8 \uCEF7\uC758 \uD6C4\uD0B9 \uAD6C\uAC04 \uD6C4\uBCF4\uB97C \uCC3E\uB294\uB2E4(\uCCAD\uAD6C, \uC7A1). **\uCEF7\uC744 \uC0C8\uB85C \uB9CC\uB4E4\uC9C0 \uC54A\uB294\uB2E4** \u2014 \uB05D\uB098\uBA74 democut_get_cut \uC758 hook_candidates \uAC00 \uC810\uC218\uC21C\uC73C\uB85C \uCC44\uC6CC\uC9C0\uACE0, democut_pick_hook_candidate \uB85C \uD558\uB098\uB97C \uACE8\uB77C\uC57C \uADF8 \uCEF7\uC758 \uAD6C\uAC04\uC774 \uB41C\uB2E4. \uAD6C\uAC04\uC740 5~30\uCD08. democut_estimate_hook_scan \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). \uCCAD\uAD6C\uC561\uC740 **\uC0C1\uD55C**\uC774\uB2E4 \u2014 \uC790\uB9C9\uC774 \uC788\uB294 \uC601\uC0C1\uC774\uBA74 \uC804\uC0AC \uD589\uC774 \uD658\uBD88\uB3FC \uC2E4\uC81C \uCCAD\uAD6C\uB294 \uADF8\uBCF4\uB2E4 \uC801\uB2E4. \uB2E4\uC2DC \uCC3E\uC73C\uBA74 \uC55E\uC758 \uD6C4\uBCF4\uB294 \uB36E\uC778\uB2E4(\uADF8\uB9AC\uACE0 \uB2E4\uC2DC \uCCAD\uAD6C\uB41C\uB2E4). \uC751\uB2F5\uC740 202 \u2014 \uACB0\uACFC\uB294 democut_wait_jobs \uB85C \uBC1B\uB294\uB2E4. \uB2E4\uC74C \uD638\uCD9C: democut_wait_jobs, democut_get_cut, democut_pick_hook_candidate.",
43667
+ "inputSchema": {
43668
+ "type": "object",
43669
+ "properties": {
43670
+ "slug": {
43671
+ "type": "string",
43672
+ "description": "\uD504\uB85C\uC81D\uD2B8 \uC2AC\uB7EC\uADF8(list_projects)"
43673
+ },
43674
+ "cut_id": {
43675
+ "type": "string",
43676
+ "description": "\uCEF7 id(cut_\u2026)"
43677
+ },
43678
+ "count": {
43679
+ "default": 5,
43680
+ "description": "\uCC3E\uC744 \uD6C4\uBCF4 \uC218(\uAE30\uBCF8 5)",
43681
+ "maximum": 10,
43682
+ "minimum": 1,
43683
+ "title": "Count",
43684
+ "type": "integer"
43685
+ },
43686
+ "confirmed_cost_krw": {
43687
+ "minimum": 0,
43688
+ "title": "Confirmed Cost Krw",
43689
+ "type": "integer"
43690
+ },
43691
+ "rate_version": {
43692
+ "minimum": 1,
43693
+ "title": "Rate Version",
43694
+ "type": "integer"
43695
+ }
43696
+ },
43697
+ "required": [
43698
+ "slug",
43699
+ "cut_id",
43700
+ "confirmed_cost_krw",
43701
+ "rate_version"
43702
+ ],
43703
+ "additionalProperties": false
43704
+ },
43705
+ "outputSchema": {
43706
+ "$defs": {
43707
+ "Quote": {
43708
+ "properties": {
43709
+ "rows": {
43710
+ "items": {
43711
+ "$ref": "#/$defs/QuoteRow"
43712
+ },
43713
+ "title": "Rows",
43714
+ "type": "array"
43715
+ },
43716
+ "total_krw": {
43717
+ "minimum": 0,
43718
+ "title": "Total Krw",
43719
+ "type": "integer"
43720
+ },
43721
+ "rate_version": {
43722
+ "description": "pricing_config.version \u2014 make \uAC00 \uAC19\uC740 \uAC12\uC744 \uC694\uAD6C\uD55C\uB2E4",
43723
+ "minimum": 1,
43724
+ "title": "Rate Version",
43725
+ "type": "integer"
43726
+ },
43727
+ "mock": {
43728
+ "default": false,
43729
+ "title": "Mock",
43730
+ "type": "boolean"
43731
+ },
43732
+ "provisional": {
43733
+ "default": false,
43734
+ "description": "\uD589 \uC911 \uD558\uB098\uB77C\uB3C4 \uC784\uC2DC \uB2E8\uAC00\uBA74 True",
43735
+ "title": "Provisional",
43736
+ "type": "boolean"
43737
+ }
43738
+ },
43739
+ "required": [
43740
+ "total_krw",
43741
+ "rate_version"
43742
+ ],
43743
+ "title": "Quote",
43744
+ "type": "object"
43745
+ },
43746
+ "QuoteRow": {
43747
+ "properties": {
43748
+ "key": {
43749
+ "description": "\uC7A1 \uC548\uC5D0\uC11C \uC720\uC77C\uD55C \uD589 \uD0A4 \u2014 tts:<line_id> \xB7 videogen:i2v \xB7 lipsync \xB7 render:\u2026",
43750
+ "title": "Key",
43751
+ "type": "string"
43752
+ },
43753
+ "ref_type": {
43754
+ "description": "\uC6D0\uAC00\uD45C \uD0A4(credits/pricing.BASE_PRICES)",
43755
+ "title": "Ref Type",
43756
+ "type": "string"
43757
+ },
43758
+ "units": {
43759
+ "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
43760
+ "title": "Units",
43761
+ "type": "string"
43762
+ },
43763
+ "unit_kind": {
43764
+ "title": "Unit Kind",
43765
+ "type": "string"
43766
+ },
43767
+ "display_name": {
43768
+ "title": "Display Name",
43769
+ "type": "string"
43770
+ },
43771
+ "krw": {
43772
+ "minimum": 0,
43773
+ "title": "Krw",
43774
+ "type": "integer"
43775
+ },
43776
+ "provisional": {
43777
+ "default": false,
43778
+ "title": "Provisional",
43779
+ "type": "boolean"
43780
+ }
43781
+ },
43782
+ "required": [
43783
+ "key",
43784
+ "ref_type",
43785
+ "units",
43786
+ "unit_kind",
43787
+ "display_name",
43788
+ "krw"
43789
+ ],
43790
+ "title": "QuoteRow",
43791
+ "type": "object"
43792
+ }
43793
+ },
43794
+ "properties": {
43795
+ "job_id": {
43796
+ "title": "Job Id",
43797
+ "type": "string"
43798
+ },
43799
+ "quote": {
43800
+ "anyOf": [
43801
+ {
43802
+ "$ref": "#/$defs/Quote"
43803
+ },
43804
+ {
43805
+ "type": "null"
43806
+ }
43807
+ ],
43808
+ "default": null
43809
+ },
43810
+ "next_calls": {
43811
+ "items": {
43812
+ "type": "string"
43813
+ },
43814
+ "title": "Next Calls",
43815
+ "type": "array"
43816
+ }
43817
+ },
43818
+ "required": [
43819
+ "job_id"
43820
+ ],
43821
+ "title": "JobAccepted",
43822
+ "type": "object"
43823
+ },
43824
+ "annotations": {
43825
+ "readOnlyHint": false,
43826
+ "destructiveHint": false,
43827
+ "idempotentHint": false,
43828
+ "openWorldHint": false
43829
+ }
43830
+ },
43831
+ {
43832
+ "name": "democut_pick_hook_candidate",
43833
+ "description": "\uD6C4\uBCF4 \uD558\uB098\uB97C \uC774 \uCEF7\uC758 \uAD6C\uAC04\uC73C\uB85C \uC0BC\uB294\uB2E4(0\uC6D0). index \uB294 hook_candidates.items \uC758 \uC790\uB9AC\uC774\uACE0 \uBAA9\uB85D\uC774 \uC810\uC218\uC21C\uC774\uB77C 0 \uC774 \uAC00\uC7A5 \uC88B\uC740 \uAC83\uC774\uB2E4. \uCEF7 \uC81C\uBAA9\uB3C4 \uADF8 \uD6C4\uBCF4\uC758 \uD6C4\uD06C \uCE74\uD53C\uAC00 \uB41C\uB2E4. \uAD6C\uAC04\uC774 \uBC14\uB00C\uBBC0\uB85C \uC774\uBBF8 \uC601\uC0C1\uC774 \uC788\uB358 \uCEF7\uC740 dirty \uAC00 \uB41C\uB2E4(\uB2E4\uC2DC \uB9CC\uB4E4\uC5B4\uC57C \uD55C\uB2E4).",
43834
+ "inputSchema": {
43835
+ "type": "object",
43836
+ "properties": {
43837
+ "slug": {
43838
+ "type": "string",
43839
+ "description": "\uD504\uB85C\uC81D\uD2B8 \uC2AC\uB7EC\uADF8(list_projects)"
43840
+ },
43841
+ "cut_id": {
43842
+ "type": "string",
43843
+ "description": "\uCEF7 id(cut_\u2026)"
43844
+ },
43845
+ "index": {
43846
+ "description": "hook_candidates.items \uC758 \uC790\uB9AC(0 = \uAC00\uC7A5 \uC88B\uC740 \uAC83)",
43847
+ "minimum": 0,
43848
+ "title": "Index",
43849
+ "type": "integer"
43850
+ }
43851
+ },
43852
+ "required": [
43853
+ "slug",
43854
+ "cut_id",
43855
+ "index"
43856
+ ],
43857
+ "additionalProperties": false
43858
+ },
43859
+ "outputSchema": {
43860
+ "$defs": {
43861
+ "AiImageSpec": {
43862
+ "description": 'AI \uC774\uBBF8\uC9C0 \uCEF7 \u2014 \uADF8\uB9BC \uD55C \uC7A5\uC774 \uACB0\uACFC\uBB3C\uC774\uB2E4(\uC124\uACC4 2026-09-21). \uCE78\uC740 \uAE00\xB7\uADF8\uB9BC + \uCC38\uACE0 \uC785\uB825 \uB458(`reference_*`)\uBFD0\uC774\uB2E4.\n\n\u2605 `image_prompt` \uAC00 \uB9CC\uB4E4 \uADF8\uB9BC\uC758 \uAE00\uC774\uACE0 `image_asset_id` \uAC00 **\uB9CC\uB4E4\uC5B4\uC9C4(\uB610\uB294 \uC62C\uB9B0) \uADF8\uB9BC**\uC774\uB2E4 \u2014 AI \uC601\uC0C1 \uCEF7\uC758 \u300C\uCCAB \uC7A5\uBA74\u300D \uACFC\n \uAC19\uC740 \uCE78\uC744 \uC4F4\uB2E4(`services/first_frame`: \uACE0\uB974\uB294 \uC77C\uC774 \uACE7 \uCD08\uC548\uC5D0 \uC801\uB294 \uC77C). \uADF8\uB798\uC11C \uC774 \uCEF7\uC744 \uC601\uC0C1\uC73C\uB85C \uC787\uB294 \uAC83\uC740 \uADF8 \uB450 \uAC12\uC744\n `add_cut(mode=ai_video)` \uC5D0 \uADF8\uB300\uB85C \uB118\uAE30\uB294 \uC77C\uC774\uB2E4.\n\u2605\u2605 `CutSpecBase` \uB97C **\uC0C1\uC18D\uD558\uC9C0 \uC54A\uB294\uB2E4**(faceta !512) \u2014 \uC0C1\uC18D\uD558\uBA74 \uC9C4\uD589\xB7\uB300\uC0AC\xB7\uB098\uB808\uC774\uC158\xB7\uAE38\uC774\xB7\uC790\uB9C9\uC774 OpenAPI\xB7\uC6F9\xB7CLI \uD0C0\uC785\uC5D0\n \uC774\uBBF8\uC9C0 \uCEF7\uC758 \uC785\uB825\uCC98\uB7FC \uAD11\uACE0\uB418\uACE0, \uB123\uC73C\uBA74 \uC11C\uBC84\uAC00 \uAC70\uBD80\uD558\uB294 \u300C\uAD11\uACE0\uD588\uB294\uB370 \uAC70\uBD80\u300D \uAC00 \uB41C\uB2E4. \uC5C6\uB294 \uD544\uB4DC\uB294 `extra="forbid"` \uAC00\n `VALIDATION_FAILED` \uB85C \uAC70\uBD80\uD55C\uB2E4(\uC870\uC6A9\uD788 \uBC84\uB9AC\uC9C0 \uC54A\uB294\uB2E4).',
43863
+ "properties": {
43864
+ "mode": {
43865
+ "const": "ai_image",
43866
+ "default": "ai_image",
43867
+ "title": "Mode",
43868
+ "type": "string"
43869
+ },
43870
+ "image_prompt": {
43871
+ "description": "\uB9CC\uB4E4 \uADF8\uB9BC\uC744 \uC124\uBA85\uD558\uB294 \uAE00 \u2014 make_cut_image \uC758 prompt \uB97C \uBE44\uC6B0\uBA74 \uC774 \uAE00\uB85C \uB9CC\uB4E0\uB2E4",
43872
+ "maxLength": 4e3,
43873
+ "minLength": 1,
43874
+ "title": "Image Prompt",
43875
+ "type": "string"
43876
+ },
43877
+ "image_asset_id": {
43878
+ "anyOf": [
43879
+ {
43880
+ "minLength": 1,
43881
+ "type": "string"
43882
+ },
43883
+ {
43884
+ "type": "null"
43885
+ }
43886
+ ],
43887
+ "default": null,
43888
+ "description": "\uC774 \uCEF7\uC758 \uADF8\uB9BC(\uACB0\uACFC\uBB3C). make_cut_image\xB7set_cut_image\xB7select_cut_image \uAC00 \uC801\uB294\uB2E4. \uC601\uC0C1\uC73C\uB85C \uC774\uC744 \uB54C add_cut(ai_video) \uC5D0 \uADF8\uB300\uB85C \uB118\uAE34\uB2E4",
43889
+ "title": "Image Asset Id"
43890
+ },
43891
+ "reference_asset_ids": {
43892
+ "description": "\uCC38\uACE0 \uC774\uBBF8\uC9C0 \uC790\uC0B0 id(\u22643\uC7A5, \uB0B4 \uAC83\xB7ready\xB7image). make_cut_image \uAC00 \uADF8\uB9BC\uC744 \uB9CC\uB4E4 \uB54C \uD568\uAED8 \uBCF4\uB0B8\uB2E4 \u2014 \uC5B4\uB5BB\uAC8C \uC4F8\uC9C0\uB294 image_prompt \uAC00 \uC815\uD55C\uB2E4. \uC785\uB825 \uC774\uBBF8\uC9C0 \uD1A0\uD070\uC774 \uB530\uB85C \uCCAD\uAD6C\uB41C\uB2E4(\uACAC\uC801\uC5D0 \uD589\uC774 \uD558\uB098 \uB354 \uC2E4\uB9B0\uB2E4)",
43893
+ "items": {
43894
+ "type": "string"
43895
+ },
43896
+ "maxItems": 3,
43897
+ "title": "Reference Asset Ids",
43898
+ "type": "array",
43899
+ "x-hash": "ignore"
43900
+ },
43901
+ "reference_avatar_id": {
43902
+ "anyOf": [
43903
+ {
43904
+ "minLength": 1,
43905
+ "type": "string"
43906
+ },
43907
+ {
43908
+ "type": "null"
43909
+ }
43910
+ ],
43911
+ "default": null,
43912
+ "description": "\uCC38\uACE0 \uC778\uBB3C \u2014 \uC544\uBC14\uD0C0 id(GET /api/characters). \uADF8 \uC544\uBC14\uD0C0\uC758 \uB300\uD45C \uC0AC\uC9C4\uC774 \uCC38\uACE0 \uD55C \uC7A5\uC73C\uB85C \uB4E4\uC5B4\uAC04\uB2E4. Ultra \uC804\uC6A9(TIER_REQUIRED)",
43913
+ "title": "Reference Avatar Id",
43914
+ "x-hash": "ignore"
43915
+ }
43916
+ },
43917
+ "required": [
43918
+ "image_prompt"
43919
+ ],
43920
+ "title": "AiImageSpec",
43921
+ "type": "object"
43922
+ },
43923
+ "AiVideoSpec": {
43924
+ "properties": {
43925
+ "dialogue": {
43926
+ "items": {
43927
+ "$ref": "#/$defs/DialogueLine"
43928
+ },
43929
+ "title": "Dialogue",
43930
+ "type": "array"
43931
+ },
43932
+ "narration_asset_id": {
43933
+ "anyOf": [
43934
+ {
43935
+ "minLength": 1,
43936
+ "type": "string"
43937
+ },
43938
+ {
43939
+ "type": "null"
43940
+ }
43941
+ ],
43942
+ "default": null,
43943
+ "description": "BYO: \uCEF7 \uC804\uCCB4 \uB098\uB808\uC774\uC158 wav \uD55C \uAC1C(\uB300\uC0AC\uAC00 \uC788\uC5B4\uC57C \uD55C\uB2E4 \u2014 \uC790\uB9C9\xB7\uD0C0\uC774\uBC0D\uC758 \uADFC\uAC70). \uC904\uBCC4 audio_asset_id \uC640 \uB3D9\uC2DC \uC9C0\uC815 422",
43944
+ "title": "Narration Asset Id"
43945
+ },
43946
+ "subtitles": {
43947
+ "default": true,
43948
+ "description": "\uC644\uC131\uBCF8\uC5D0 \uC774 \uCEF7\uC758 \uC790\uB9C9\uC744 \uBC88\uC778\uD55C\uB2E4 \u2014 \uB044\uBA74 \uC790\uB9C9 \uD30C\uC77C\uC740 \uADF8\uB300\uB85C \uB9CC\uB4E4\uC5B4\uC9C0\uACE0(\uC815\uB82C \uAC12\uC740 \uCCAD\uAD6C\uB41C\uB2E4) \uC644\uC131\uBCF8\uC5D0\uB9CC \uC548 \uB098\uAC04\uB2E4. \uCEF7 \uC601\uC0C1\uC740 \uB2EC\uB77C\uC9C0\uC9C0 \uC54A\uC73C\uBBC0\uB85C \uC774 \uAC12\uC744 \uBC14\uAFD4\uB3C4 \uB2E4\uC2DC \uB9CC\uB4E4 \uD544\uC694\uAC00 \uC5C6\uB2E4",
43949
+ "title": "Subtitles",
43950
+ "type": "boolean",
43951
+ "x-diff": "ignore"
43952
+ },
43953
+ "host": {
43954
+ "anyOf": [
43955
+ {
43956
+ "type": "string"
43957
+ },
43958
+ {
43959
+ "type": "null"
43960
+ }
43961
+ ],
43962
+ "default": null,
43963
+ "description": "\uC9C4\uD589 \u2014 \uD5C8\uC6A9 \uC9D1\uD569\uC740 \uCE74\uD0C8\uB85C\uADF8(\uBC29\uC2DD\uBCC4). \uBAA8\uC158\uADF8\uB798\uD53D\uC740 \uD544\uC218",
43964
+ "title": "Host"
43965
+ },
43966
+ "voice_id": {
43967
+ "anyOf": [
43968
+ {
43969
+ "minLength": 1,
43970
+ "type": "string"
43971
+ },
43972
+ {
43973
+ "type": "null"
43974
+ }
43975
+ ],
43976
+ "default": null,
43977
+ "description": "host\u2208{voice,avatar} \uC774\uACE0 BYO \uC624\uB514\uC624\uAC00 \uC5C6\uC744 \uB54C \uD544\uC218",
43978
+ "title": "Voice Id"
43979
+ },
43980
+ "pip": {
43981
+ "anyOf": [
43982
+ {
43983
+ "$ref": "#/$defs/PipSpec"
43984
+ },
43985
+ {
43986
+ "type": "null"
43987
+ }
43988
+ ],
43989
+ "default": null,
43990
+ "description": "host=avatar \uC77C \uB54C \uD544\uC218"
43991
+ },
43992
+ "image_asset_id": {
43993
+ "anyOf": [
43994
+ {
43995
+ "minLength": 1,
43996
+ "type": "string"
43997
+ },
43998
+ {
43999
+ "type": "null"
44000
+ }
44001
+ ],
44002
+ "default": null,
44003
+ "description": "\uCEF7 \uC774\uBBF8\uC9C0\uB97C spec \uC5D0\uC11C \uC9C1\uC811 \uC9C0\uC815(\uC5D0\uC774\uC804\uD2B8 \uC6D0\uC0F7\uC6A9)",
44004
+ "title": "Image Asset Id"
44005
+ },
44006
+ "duration_s": {
44007
+ "default": 5,
44008
+ "maximum": 15,
44009
+ "minimum": 4,
44010
+ "title": "Duration S",
44011
+ "type": "number"
44012
+ },
44013
+ "mode": {
44014
+ "const": "ai_video",
44015
+ "default": "ai_video",
44016
+ "title": "Mode",
44017
+ "type": "string"
44018
+ },
44019
+ "image_prompt": {
44020
+ "maxLength": 4e3,
44021
+ "minLength": 1,
44022
+ "title": "Image Prompt",
44023
+ "type": "string"
44024
+ },
44025
+ "reference_asset_ids": {
44026
+ "description": "\uCC38\uACE0 \uC774\uBBF8\uC9C0 \uC790\uC0B0 id(\u22643\uC7A5, \uB0B4 \uAC83\xB7ready\xB7image). make_cut_image \uAC00 \uADF8\uB9BC\uC744 \uB9CC\uB4E4 \uB54C \uD568\uAED8 \uBCF4\uB0B8\uB2E4 \u2014 \uC5B4\uB5BB\uAC8C \uC4F8\uC9C0\uB294 image_prompt \uAC00 \uC815\uD55C\uB2E4. \uC785\uB825 \uC774\uBBF8\uC9C0 \uD1A0\uD070\uC774 \uB530\uB85C \uCCAD\uAD6C\uB41C\uB2E4(\uACAC\uC801\uC5D0 \uD589\uC774 \uD558\uB098 \uB354 \uC2E4\uB9B0\uB2E4)",
44027
+ "items": {
44028
+ "type": "string"
44029
+ },
44030
+ "maxItems": 3,
44031
+ "title": "Reference Asset Ids",
44032
+ "type": "array",
44033
+ "x-hash": "ignore"
44034
+ },
44035
+ "reference_avatar_id": {
44036
+ "anyOf": [
44037
+ {
44038
+ "minLength": 1,
44039
+ "type": "string"
44040
+ },
44041
+ {
44042
+ "type": "null"
44043
+ }
44044
+ ],
44045
+ "default": null,
44046
+ "description": "\uCC38\uACE0 \uC778\uBB3C \u2014 \uC544\uBC14\uD0C0 id(GET /api/characters). \uADF8 \uC544\uBC14\uD0C0\uC758 \uB300\uD45C \uC0AC\uC9C4\uC774 \uCC38\uACE0 \uD55C \uC7A5\uC73C\uB85C \uB4E4\uC5B4\uAC04\uB2E4. Ultra \uC804\uC6A9(TIER_REQUIRED)",
44047
+ "title": "Reference Avatar Id",
44048
+ "x-hash": "ignore"
44049
+ },
44050
+ "provider": {
44051
+ "anyOf": [
44052
+ {
44053
+ "maxLength": 32,
44054
+ "minLength": 1,
44055
+ "type": "string"
44056
+ },
44057
+ {
44058
+ "type": "null"
44059
+ }
44060
+ ],
44061
+ "default": null,
44062
+ "description": "\uC601\uC0C1 \uC0DD\uC131 \uACF5\uAE09\uC790(\uC608: minimax). \uBE44\uC6B0\uBA74 \uC11C\uBC84 \uAE30\uBCF8\uAC12 \u2014 \uC4F8 \uC218 \uC788\uB294 \uBAA9\uB85D\uC740 GET \u2026/options \uC758 videogen_providers",
44063
+ "title": "Provider"
44064
+ },
44065
+ "seed": {
44066
+ "anyOf": [
44067
+ {
44068
+ "minimum": 0,
44069
+ "type": "integer"
44070
+ },
44071
+ {
44072
+ "type": "null"
44073
+ }
44074
+ ],
44075
+ "default": null,
44076
+ "title": "Seed"
44077
+ },
44078
+ "image": {
44079
+ "anyOf": [
44080
+ {
44081
+ "discriminator": {
44082
+ "mapping": {
44083
+ "asset": "#/$defs/AssetImageRef",
44084
+ "from_cut": "#/$defs/FromCutImageRef",
44085
+ "from_version": "#/$defs/FromVersionImageRef"
44086
+ },
44087
+ "propertyName": "kind"
44088
+ },
44089
+ "oneOf": [
44090
+ {
44091
+ "$ref": "#/$defs/AssetImageRef"
44092
+ },
44093
+ {
44094
+ "$ref": "#/$defs/FromCutImageRef"
44095
+ },
44096
+ {
44097
+ "$ref": "#/$defs/FromVersionImageRef"
44098
+ }
44099
+ ]
44100
+ },
44101
+ {
44102
+ "type": "null"
44103
+ }
44104
+ ],
44105
+ "default": null,
44106
+ "description": "\uCCAB \uD504\uB808\uC784. \uC5C6\uC73C\uBA74 image_asset_id \u2192 \uADF8\uAC83\uB3C4 \uC5C6\uC73C\uBA74 t2v(\uD14D\uC2A4\uD2B8\uB9CC) \u2014 \uACAC\uC801\uC774 notes \uB85C \uC54C\uB824\uC900\uB2E4",
44107
+ "title": "Image"
44108
+ },
44109
+ "end_image": {
44110
+ "anyOf": [
44111
+ {
44112
+ "discriminator": {
44113
+ "mapping": {
44114
+ "asset": "#/$defs/AssetImageRef",
44115
+ "from_cut": "#/$defs/FromCutImageRef",
44116
+ "from_version": "#/$defs/FromVersionImageRef"
44117
+ },
44118
+ "propertyName": "kind"
44119
+ },
44120
+ "oneOf": [
44121
+ {
44122
+ "$ref": "#/$defs/AssetImageRef"
44123
+ },
44124
+ {
44125
+ "$ref": "#/$defs/FromCutImageRef"
44126
+ },
44127
+ {
44128
+ "$ref": "#/$defs/FromVersionImageRef"
44129
+ }
44130
+ ]
44131
+ },
44132
+ {
44133
+ "type": "null"
44134
+ }
44135
+ ],
44136
+ "default": null,
44137
+ "title": "End Image"
44138
+ }
44139
+ },
44140
+ "required": [
44141
+ "image_prompt"
44142
+ ],
44143
+ "title": "AiVideoSpec",
44144
+ "type": "object"
44145
+ },
44146
+ "AssetImageRef": {
44147
+ "properties": {
44148
+ "kind": {
44149
+ "const": "asset",
44150
+ "default": "asset",
44151
+ "title": "Kind",
44152
+ "type": "string"
44153
+ },
44154
+ "asset_id": {
44155
+ "minLength": 1,
44156
+ "title": "Asset Id",
44157
+ "type": "string"
44158
+ }
44159
+ },
44160
+ "required": [
44161
+ "asset_id"
44162
+ ],
44163
+ "title": "AssetImageRef",
44164
+ "type": "object"
44165
+ },
44166
+ "CanvasPos": {
44167
+ "properties": {
44168
+ "x": {
44169
+ "default": 0,
44170
+ "title": "X",
44171
+ "type": "number"
44172
+ },
44173
+ "y": {
44174
+ "default": 0,
44175
+ "title": "Y",
44176
+ "type": "number"
44177
+ }
44178
+ },
44179
+ "title": "CanvasPos",
44180
+ "type": "object"
44181
+ },
44182
+ "CutEdit": {
44183
+ "properties": {
44184
+ "trim_in_ms": {
44185
+ "default": 0,
44186
+ "minimum": 0,
44187
+ "title": "Trim In Ms",
44188
+ "type": "integer"
44189
+ },
44190
+ "trim_out_ms": {
44191
+ "anyOf": [
44192
+ {
44193
+ "minimum": 1,
44194
+ "type": "integer"
44195
+ },
44196
+ {
44197
+ "type": "null"
44198
+ }
44199
+ ],
44200
+ "default": null,
44201
+ "title": "Trim Out Ms"
44202
+ },
44203
+ "silence_removal": {
44204
+ "default": false,
44205
+ "title": "Silence Removal",
44206
+ "type": "boolean"
44207
+ },
44208
+ "silence_threshold_ms": {
44209
+ "default": 800,
44210
+ "maximum": 5e3,
44211
+ "minimum": 100,
44212
+ "title": "Silence Threshold Ms",
44213
+ "type": "integer"
44214
+ }
44215
+ },
44216
+ "title": "CutEdit",
44217
+ "type": "object"
44218
+ },
44219
+ "CutImageView": {
44220
+ "properties": {
44221
+ "id": {
44222
+ "title": "Id",
44223
+ "type": "string"
44224
+ },
44225
+ "seq": {
44226
+ "title": "Seq",
44227
+ "type": "integer"
44228
+ },
44229
+ "asset_id": {
44230
+ "title": "Asset Id",
44231
+ "type": "string"
44232
+ },
44233
+ "source": {
44234
+ "enum": [
44235
+ "upload",
44236
+ "image_gen",
44237
+ "from_video"
44238
+ ],
44239
+ "title": "Source",
44240
+ "type": "string"
44241
+ },
44242
+ "from_version": {
44243
+ "anyOf": [
44244
+ {
44245
+ "type": "integer"
44246
+ },
44247
+ {
44248
+ "type": "null"
44249
+ }
44250
+ ],
44251
+ "default": null,
44252
+ "title": "From Version"
44253
+ },
44254
+ "url": {
44255
+ "anyOf": [
44256
+ {
44257
+ "type": "string"
44258
+ },
44259
+ {
44260
+ "type": "null"
44261
+ }
44262
+ ],
44263
+ "default": null,
44264
+ "description": "\uC11C\uBA85 URL",
44265
+ "title": "Url"
44266
+ },
44267
+ "model": {
44268
+ "anyOf": [
44269
+ {
44270
+ "type": "string"
44271
+ },
44272
+ {
44273
+ "type": "null"
44274
+ }
44275
+ ],
44276
+ "default": null,
44277
+ "description": "AI \uB85C \uB9CC\uB4E0 \uC774\uBBF8\uC9C0\uC758 \uC0DD\uC131 \uBAA8\uB378(source=image_gen). \uC62C\uB9B0 \uC774\uBBF8\uC9C0\xB72026-09-11 \uC774\uC804 \uC0DD\uC131\uBD84\uC740 null",
44278
+ "title": "Model"
44279
+ },
44280
+ "quality": {
44281
+ "anyOf": [
44282
+ {
44283
+ "type": "string"
44284
+ },
44285
+ {
44286
+ "type": "null"
44287
+ }
44288
+ ],
44289
+ "default": null,
44290
+ "description": "\uC0DD\uC131 \uD488\uC9C8(low|medium|high). model \uACFC \uAC19\uC740 \uC870\uAC74\uC5D0\uC11C\uB9CC",
44291
+ "title": "Quality"
44292
+ }
44293
+ },
44294
+ "required": [
44295
+ "id",
44296
+ "seq",
44297
+ "asset_id",
44298
+ "source"
44299
+ ],
44300
+ "title": "CutImageView",
44301
+ "type": "object"
44302
+ },
44303
+ "CutVersionView": {
44304
+ "properties": {
44305
+ "version": {
44306
+ "minimum": 1,
44307
+ "title": "Version",
44308
+ "type": "integer"
44309
+ },
44310
+ "origin": {
44311
+ "enum": [
44312
+ "render",
44313
+ "import"
44314
+ ],
44315
+ "title": "Origin",
44316
+ "type": "string"
44317
+ },
44318
+ "spec": {
44319
+ "additionalProperties": true,
44320
+ "description": "\uBC15\uC81C\uB41C spec(\uD574\uC11D\uB41C asset_id \uD3EC\uD568). origin=render \uBA74 \uC2A4\uD0A4\uB9C8\uB294 CutSpec, origin=import \uBA74 **\uBE48 \uAC1D\uCCB4**\uB2E4 \u2014 \uADF8 \uC601\uC0C1\uC740 \uC6B0\uB9AC\uAC00 \uB9CC\uB4E4\uC9C0 \uC54A\uC558\uC73C\uBBC0\uB85C \uB9CC\uB4E0 \uBC29\uBC95\uC774 \uC5C6\uB2E4. \uBC29\uC2DD\uC744 \uC54C\uC544\uC57C \uD558\uBA74 origin \uC744 \uBCF4\uB77C(mode \uC5D0 import \uAC12\uC740 \uC5C6\uB2E4).",
44321
+ "title": "Spec",
44322
+ "type": "object"
44323
+ },
44324
+ "based_on": {
44325
+ "anyOf": [
44326
+ {
44327
+ "type": "integer"
44328
+ },
44329
+ {
44330
+ "type": "null"
44331
+ }
44332
+ ],
44333
+ "default": null,
44334
+ "title": "Based On"
44335
+ },
44336
+ "note": {
44337
+ "anyOf": [
44338
+ {
44339
+ "type": "string"
44340
+ },
44341
+ {
44342
+ "type": "null"
44343
+ }
44344
+ ],
44345
+ "default": null,
44346
+ "title": "Note"
44347
+ },
44348
+ "job_id": {
44349
+ "title": "Job Id",
44350
+ "type": "string"
44351
+ },
44352
+ "duration_ms": {
44353
+ "minimum": 0,
44354
+ "title": "Duration Ms",
44355
+ "type": "integer"
44356
+ },
44357
+ "width": {
44358
+ "title": "Width",
44359
+ "type": "integer"
44360
+ },
44361
+ "height": {
44362
+ "title": "Height",
44363
+ "type": "integer"
44364
+ },
44365
+ "fps": {
44366
+ "title": "Fps",
44367
+ "type": "number"
44368
+ },
44369
+ "timing": {
44370
+ "$ref": "#/$defs/Timing"
44371
+ },
44372
+ "quote": {
44373
+ "$ref": "#/$defs/Quote"
44374
+ },
44375
+ "mock": {
44376
+ "default": false,
44377
+ "title": "Mock",
44378
+ "type": "boolean"
44379
+ },
44380
+ "created_by": {
44381
+ "title": "Created By",
44382
+ "type": "string"
44383
+ },
44384
+ "created_at": {
44385
+ "title": "Created At",
44386
+ "type": "string"
44387
+ },
44388
+ "download": {
44389
+ "$ref": "#/$defs/DownloadUrls"
44390
+ },
44391
+ "subtitle_tracks": {
44392
+ "description": "\uB098\uB808\uC774\uC158 \uC6D0\uBB38(download.subtitle) \uBC16\uC758 \uC790\uB9C9 \uD2B8\uB799 \u2014 \uC720\uD29C\uBE0C \uD074\uB9BD\uC758 \uC6D0\uBCF8 \uB9D0\uC18C\uB9AC \uB4F1. \uC644\uC131\uBCF8\uC740 \uB098\uB808\uC774\uC158\uC774 \uC5C6\uB294 \uCEF7\uC5D0 \uC6D0\uBCF8 \uD2B8\uB799\uC744 \uBC88\uC778\uD55C\uB2E4",
44393
+ "items": {
44394
+ "$ref": "#/$defs/SubtitleTrackView"
44395
+ },
44396
+ "title": "Subtitle Tracks",
44397
+ "type": "array"
44398
+ }
44399
+ },
44400
+ "required": [
44401
+ "version",
44402
+ "origin",
44403
+ "spec",
44404
+ "job_id",
44405
+ "duration_ms",
44406
+ "width",
44407
+ "height",
44408
+ "fps",
44409
+ "timing",
44410
+ "quote",
44411
+ "created_by",
44412
+ "created_at",
44413
+ "download"
44414
+ ],
44415
+ "title": "CutVersionView",
44416
+ "type": "object"
44417
+ },
44418
+ "DialogueLine": {
44419
+ "properties": {
44420
+ "id": {
44421
+ "description": "\uC904 id ln_<6> \u2014 \uC81C\uC548 diff \uC758 \uB300\uC870 \uD0A4",
44422
+ "pattern": "^ln_[a-z0-9]{6}$",
44423
+ "title": "Id",
44424
+ "type": "string",
44425
+ "x-diff": "ignore"
44426
+ },
44427
+ "text": {
44428
+ "description": "\uBC1C\uD654 \uD14D\uC2A4\uD2B8(\uC22B\uC790\uB294 \uC11C\uBC84\uAC00 \uC77D\uB294 \uBC95\uC744 \uC815\uD55C\uB2E4 \u2014 \uD480\uC5B4\uC4F0\uC9C0 \uC54A\uB294\uB2E4)",
44429
+ "maxLength": 2e3,
44430
+ "minLength": 1,
44431
+ "title": "Text",
44432
+ "type": "string"
44433
+ },
44434
+ "subtitle_text": {
44435
+ "anyOf": [
44436
+ {
44437
+ "maxLength": 2e3,
44438
+ "type": "string"
44439
+ },
44440
+ {
44441
+ "type": "null"
44442
+ }
44443
+ ],
44444
+ "default": null,
44445
+ "description": "\uC790\uB9C9 \uD45C\uAE30(\uC6D0\uBB38 \uD45C\uAE30). \uC5C6\uC73C\uBA74 text",
44446
+ "title": "Subtitle Text"
44447
+ },
44448
+ "audio_asset_id": {
44449
+ "anyOf": [
44450
+ {
44451
+ "minLength": 1,
44452
+ "type": "string"
44453
+ },
44454
+ {
44455
+ "type": "null"
44456
+ }
44457
+ ],
44458
+ "default": null,
44459
+ "description": "BYO: \uC774 \uC904\uC758 \uB098\uB808\uC774\uC158 \uC624\uB514\uC624 \uC790\uC0B0 \u2014 TTS \uD589 0\uC6D0, \uC815\uB82C \uD589\uB9CC",
44460
+ "title": "Audio Asset Id"
44461
+ }
44462
+ },
44463
+ "required": [
44464
+ "id",
44465
+ "text"
44466
+ ],
44467
+ "title": "DialogueLine",
44468
+ "type": "object"
44469
+ },
44470
+ "DialogueTiming": {
44471
+ "properties": {
44472
+ "id": {
44473
+ "title": "Id",
44474
+ "type": "string"
44475
+ },
44476
+ "start_ms": {
44477
+ "minimum": 0,
44478
+ "title": "Start Ms",
44479
+ "type": "integer"
44480
+ },
44481
+ "end_ms": {
44482
+ "minimum": 0,
44483
+ "title": "End Ms",
44484
+ "type": "integer"
44485
+ }
44486
+ },
44487
+ "required": [
44488
+ "id",
44489
+ "start_ms",
44490
+ "end_ms"
44491
+ ],
44492
+ "title": "DialogueTiming",
44493
+ "type": "object"
44494
+ },
44495
+ "DownloadUrls": {
44496
+ "description": "\uBC84\uC804\uC758 \uC5ED\uD560\uBCC4 \uC0B0\uCD9C\uBB3C \uC11C\uBA85 URL. \uC5C6\uB294 \uC5ED\uD560\uC740 ``None``.\n\n``timing`` \uC740 **\uD56D\uC0C1 None** \uC774\uB2E4 \u2014 \uC790\uC0B0\uC774 \uC544\uB2C8\uB77C \uD589 \uC548\uC758 JSON \uC774\uB77C \uC11C\uBA85\uD560 blob \uC774 \uC5C6\uB2E4. \uC2E4\uC81C \uAC12\uC740 \uAC19\uC740 \uC751\uB2F5\uC758\n``CutVersionView.timing`` \uC5D0 \uC778\uB77C\uC778\uC73C\uB85C \uC2E4\uB9B0\uB2E4. \uD544\uB4DC\uB97C \uC9C0\uC6B0\uC9C0 \uC54A\uB294 \uAC83\uC740 \uC5ED\uD560 \uD45C\uB97C \uD55C\uC790\uB9AC\uC5D0 \uBCF4\uC774\uAC8C \uB450\uAE30 \uC704\uD568\uC774\uB2E4.",
44497
+ "properties": {
44498
+ "video": {
44499
+ "anyOf": [
44500
+ {
44501
+ "type": "string"
44502
+ },
44503
+ {
44504
+ "type": "null"
44505
+ }
44506
+ ],
44507
+ "default": null,
44508
+ "title": "Video"
44509
+ },
44510
+ "audio": {
44511
+ "anyOf": [
44512
+ {
44513
+ "type": "string"
44514
+ },
44515
+ {
44516
+ "type": "null"
44517
+ }
44518
+ ],
44519
+ "default": null,
44520
+ "title": "Audio"
44521
+ },
44522
+ "subtitle": {
44523
+ "anyOf": [
44524
+ {
44525
+ "type": "string"
44526
+ },
44527
+ {
44528
+ "type": "null"
44529
+ }
44530
+ ],
44531
+ "default": null,
44532
+ "title": "Subtitle"
44533
+ },
44534
+ "still": {
44535
+ "anyOf": [
44536
+ {
44537
+ "type": "string"
44538
+ },
44539
+ {
44540
+ "type": "null"
44541
+ }
44542
+ ],
44543
+ "default": null,
44544
+ "title": "Still"
44545
+ },
44546
+ "timing": {
44547
+ "anyOf": [
44548
+ {
44549
+ "type": "string"
44550
+ },
44551
+ {
44552
+ "type": "null"
44553
+ }
44554
+ ],
44555
+ "default": null,
44556
+ "title": "Timing"
44557
+ }
44558
+ },
44559
+ "title": "DownloadUrls",
44560
+ "type": "object"
44561
+ },
44562
+ "FromCutImageRef": {
44563
+ "properties": {
44564
+ "kind": {
44565
+ "const": "from_cut",
44566
+ "default": "from_cut",
44567
+ "title": "Kind",
44568
+ "type": "string"
44569
+ },
44570
+ "from_cut": {
44571
+ "description": "\uB2E4\uB978 \uCEF7\uC758 \uB300\uD45C \uBC84\uC804 \uD504\uB808\uC784(\uC5F0\uC18D\uC131 \uB3C4\uC6B0\uBBF8)",
44572
+ "minLength": 1,
44573
+ "title": "From Cut",
44574
+ "type": "string"
44575
+ },
44576
+ "frame": {
44577
+ "default": "last",
44578
+ "enum": [
44579
+ "first",
44580
+ "last"
44581
+ ],
44582
+ "title": "Frame",
44583
+ "type": "string"
44584
+ }
44585
+ },
44586
+ "required": [
44587
+ "from_cut"
44588
+ ],
44589
+ "title": "FromCutImageRef",
44590
+ "type": "object"
44591
+ },
44592
+ "FromVersionImageRef": {
44593
+ "properties": {
44594
+ "kind": {
44595
+ "const": "from_version",
44596
+ "default": "from_version",
44597
+ "title": "Kind",
44598
+ "type": "string"
44599
+ },
44600
+ "from_version": {
44601
+ "description": "\uC774 \uCEF7\uC758 \uD2B9\uC815 \uBC84\uC804 \uD504\uB808\uC784",
44602
+ "minimum": 1,
44603
+ "title": "From Version",
44604
+ "type": "integer"
44605
+ },
44606
+ "frame": {
44607
+ "default": "last",
44608
+ "enum": [
44609
+ "first",
44610
+ "last"
44611
+ ],
44612
+ "title": "Frame",
44613
+ "type": "string"
44614
+ }
44615
+ },
44616
+ "required": [
44617
+ "from_version"
44618
+ ],
44619
+ "title": "FromVersionImageRef",
44620
+ "type": "object"
44621
+ },
44622
+ "HookCandidate": {
44623
+ "description": "\uD6C4\uD0B9 \uAD6C\uAC04 \uD6C4\uBCF4 \uD558\uB098 \u2014 \uC0AC\uB78C\uC774 \uBAA9\uB85D\uC5D0\uC11C \uBCF4\uACE0 \uACE0\uB974\uB294 \uB2E8\uC704(\uC20F\uCE20 \uC7AC\uC124\uACC4 2026-09-22).\n\n\u2605\u2605 `title` \uACFC `reasoning` \uC740 **\uB2E4\uB978 \uAC83**\uC774\uB2E4(\uC61B `clip_extractor_service` \uC758 \uC5ED\uD560 \uBD84\uB2F4):\n `title` \uC740 **\uD6C4\uD06C \uCE74\uD53C**(\uACE0\uB974\uBA74 \uADF8\uB300\uB85C \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4), `reasoning` \uC740 **\uC65C \uACE8\uB790\uB294\uC9C0**\uB2E4.\n\u2605\u2605 `score` \uB294 **\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uAC15\uB3C4**\uB2E4 \u2014 \uC808\uB300 \uAE30\uC900\uC774 \uC5C6\uC5B4 \uB2E4\uB978 \uC601\uC0C1\uC758 \uC810\uC218\uC640 \uACAC\uC8FC\uBA74 \uC548 \uB41C\uB2E4.\n \uBAA9\uB85D\uC740 \uC774 \uAC12\uC758 \uB0B4\uB9BC\uCC28\uC21C\uC774\uACE0, \uADF8\uB798\uC11C **\uCCAB\uC9F8\uAC00 \uACE7 \uAC00\uC7A5 \uC88B\uC740 \uAC83**\uC774\uB2E4(\uC81C\uC548\uC774 \uC790\uB3D9\uC73C\uB85C \uACE0\uB974\uB294 \uAC83\uB3C4 \uADF8\uAC83).",
44624
+ "properties": {
44625
+ "start_s": {
44626
+ "minimum": 0,
44627
+ "title": "Start S",
44628
+ "type": "number"
44629
+ },
44630
+ "end_s": {
44631
+ "exclusiveMinimum": 0,
44632
+ "title": "End S",
44633
+ "type": "number"
44634
+ },
44635
+ "title": {
44636
+ "default": "",
44637
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
44638
+ "title": "Title",
44639
+ "type": "string"
44640
+ },
44641
+ "score": {
44642
+ "default": 0,
44643
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
44644
+ "maximum": 100,
44645
+ "minimum": 0,
44646
+ "title": "Score",
44647
+ "type": "integer"
44648
+ },
44649
+ "reasoning": {
44650
+ "default": "",
44651
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
44652
+ "title": "Reasoning",
44653
+ "type": "string"
44654
+ }
44655
+ },
44656
+ "required": [
44657
+ "start_s",
44658
+ "end_s"
44659
+ ],
44660
+ "title": "HookCandidate",
44661
+ "type": "object"
44662
+ },
44663
+ "HookCandidates": {
44664
+ "description": "\uD55C \uCEF7\uC758 \uD0D0\uC0C9 \uACB0\uACFC \u2014 \uD6C4\uBCF4 \uBAA9\uB85D + **\uADF8\uB54C\uC758 \uC8FC\uC18C**.\n\n\u2605\u2605 `url` \uC744 \uD568\uAED8 \uB2F4\uB294 \uC774\uC720: \uC8FC\uC18C\uB97C \uBC14\uAFD4\uB3C4 \uD6C4\uBCF4\uB294 \uC9C0\uC6B0\uC9C0 \uC54A\uC73C\uBBC0\uB85C(\uC0AC\uC6A9\uC790 \uACB0\uC815) \uD654\uBA74\uC774 \u300C\uC774\uAC74 \uB2E4\uB978\n \uC601\uC0C1\uC758 \uAD6C\uAC04\uC774\uB2E4\u300D \uB97C \uC54C \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4. \uC0C8 \uC8FC\uC18C\uB85C \uB2E4\uC2DC \uCC3E\uC73C\uBA74 \uD1B5\uC9F8\uB85C \uB36E\uC778\uB2E4.\n\u2605 `items` \uAC00 **\uBE48 \uBC30\uC5F4**\uC778 \uAC83\uACFC `hook_candidates` \uC790\uCCB4\uAC00 \uC5C6\uB294 \uAC83\uC740 \uB2E4\uB978 \uB73B\uC774\uB2E4 \u2014 \uC804\uC790\uB294\n \u300C\uCC3E\uC558\uB294\uB370 \uC4F8 \uB9CC\uD55C \uAC83\uC774 \uC5C6\uC5C8\uB2E4\u300D, \uD6C4\uC790\uB294 \u300C\uC544\uC9C1 \uCC3E\uC740 \uC801 \uC5C6\uB2E4\u300D.",
44665
+ "properties": {
44666
+ "url": {
44667
+ "title": "Url",
44668
+ "type": "string"
44669
+ },
44670
+ "found_at": {
44671
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
44672
+ "title": "Found At",
44673
+ "type": "string"
44674
+ },
44675
+ "items": {
44676
+ "items": {
44677
+ "$ref": "#/$defs/HookCandidate"
44678
+ },
44679
+ "title": "Items",
44680
+ "type": "array"
44681
+ }
44682
+ },
44683
+ "required": [
44684
+ "url",
44685
+ "found_at"
44686
+ ],
44687
+ "title": "HookCandidates",
44688
+ "type": "object"
44689
+ },
44690
+ "JobError": {
44691
+ "description": '\uC7A1 \uC2E4\uD328\uC758 \uB300\uC678 \uC5BC\uAD74. \u2605\u2605 **\uB7F0\uD0C0\uC784\uC758 \uBAA8\uB4E0 \uC2E4\uD328 \uBD84\uAE30\uAC00 \uB9CC\uB4DC\uB294 \uBD09\uD22C\uB97C \uBC1B\uC544\uB0BC \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4** \u2014\n`to_view` \uAC00 `JobError(**rec.error)` \uB85C \uBCC0\uD658\uD558\uB294\uB370 \uC774 \uBAA8\uB378\uC740 `extra="forbid"` \uB77C, \uBD09\uD22C\uC5D0\uB9CC \uC788\uACE0\n\uC5EC\uAE30 \uC5C6\uB294 \uD0A4\uAC00 \uD558\uB098\uB77C\uB3C4 \uC788\uC73C\uBA74 **\uADF8 \uC7A1\uC758 \uC870\uD68C\uAC00 500** \uC774 \uB41C\uB2E4(2026-09-10 \uC2E4\uCE21: \uB2E4\uC12F \uACBD\uB85C \uC911 \uB137).\n\n\u26A0\uFE0F \uADF8 \uACB0\uD568\uC740 \uC870\uC6A9\uD558\uB2E4 \u2014 \uBD09\uD22C\uB97C *\uB9CC\uB4DC\uB294* \uACF3(`jobs/runtime.py` \uC758 except \uBD84\uAE30)\uACFC *\uC77D\uB294* \uACF3\uC774\n\uAC08\uB824 \uC788\uC5B4 \uC5B4\uB290 \uCABD \uD14C\uC2A4\uD2B8\uB3C4 \uC655\uBCF5\uC744 \uBCF4\uC9C0 \uC54A\uC558\uB2E4. \uADF8\uB798\uC11C `cause`(\uC7AC\uC2DC\uB3C4 \uC18C\uC9C4)\uC640 `data`(FatalError\xB7\nDemoCutError)\uAC00 \uACC4\uC57D \uBC16\uC5D0 \uC788\uB294 \uCC44\uB85C \uC624\uB798 \uC0B4\uC544\uB0A8\uC558\uACE0, **\uC2E4\uD328\uD55C \uC7A1\uC77C\uC218\uB85D \uC870\uD68C\uAC00 \uC548 \uB418\uB294** \uC0C1\uD0DC\uC600\uB2E4\n(\uB3C8\uC774 \uB098\uAC04 \uC790\uB9AC\uC758 \uC548\uB0B4\uB97C \uADF8 \uC870\uD68C\uB85C \uC804\uD558\uB294\uB370 \uB9D0\uC774\uB2E4). \uAC00\uB4DC\uB294 \uB124 \uBD84\uAE30\uB97C \uC2E4\uC81C\uB85C \uD0DC\uC6CC \uC655\uBCF5\uC2DC\uD0A8\uB2E4\n(`test_every_failure_envelope_survives_the_view`).',
44692
+ "properties": {
44693
+ "code": {
44694
+ "title": "Code",
44695
+ "type": "string"
44696
+ },
44697
+ "message": {
44698
+ "title": "Message",
44699
+ "type": "string"
44700
+ },
44701
+ "retryable": {
44702
+ "default": false,
44703
+ "title": "Retryable",
44704
+ "type": "boolean"
44705
+ },
44706
+ "refunded_krw": {
44707
+ "default": 0,
44708
+ "title": "Refunded Krw",
44709
+ "type": "integer"
44710
+ },
44711
+ "hint": {
44712
+ "anyOf": [
44713
+ {
44714
+ "type": "string"
44715
+ },
44716
+ {
44717
+ "type": "null"
44718
+ }
44719
+ ],
44720
+ "default": null,
44721
+ "title": "Hint"
44722
+ },
44723
+ "provider_job_id": {
44724
+ "anyOf": [
44725
+ {
44726
+ "type": "string"
44727
+ },
44728
+ {
44729
+ "type": "null"
44730
+ }
44731
+ ],
44732
+ "default": null,
44733
+ "title": "Provider Job Id"
44734
+ },
44735
+ "cause": {
44736
+ "anyOf": [
44737
+ {
44738
+ "type": "string"
44739
+ },
44740
+ {
44741
+ "type": "null"
44742
+ }
44743
+ ],
44744
+ "default": null,
44745
+ "title": "Cause"
44746
+ },
44747
+ "data": {
44748
+ "anyOf": [
44749
+ {
44750
+ "additionalProperties": true,
44751
+ "type": "object"
44752
+ },
44753
+ {
44754
+ "type": "null"
44755
+ }
44756
+ ],
44757
+ "default": null,
44758
+ "title": "Data"
44759
+ }
44760
+ },
44761
+ "required": [
44762
+ "code",
44763
+ "message"
44764
+ ],
44765
+ "title": "JobError",
44766
+ "type": "object"
44767
+ },
44768
+ "MotionGraphicSpec": {
44769
+ "properties": {
44770
+ "dialogue": {
44771
+ "items": {
44772
+ "$ref": "#/$defs/DialogueLine"
44773
+ },
44774
+ "title": "Dialogue",
44775
+ "type": "array"
44776
+ },
44777
+ "narration_asset_id": {
44778
+ "anyOf": [
44779
+ {
44780
+ "minLength": 1,
44781
+ "type": "string"
44782
+ },
44783
+ {
44784
+ "type": "null"
44785
+ }
44786
+ ],
44787
+ "default": null,
44788
+ "description": "BYO: \uCEF7 \uC804\uCCB4 \uB098\uB808\uC774\uC158 wav \uD55C \uAC1C(\uB300\uC0AC\uAC00 \uC788\uC5B4\uC57C \uD55C\uB2E4 \u2014 \uC790\uB9C9\xB7\uD0C0\uC774\uBC0D\uC758 \uADFC\uAC70). \uC904\uBCC4 audio_asset_id \uC640 \uB3D9\uC2DC \uC9C0\uC815 422",
44789
+ "title": "Narration Asset Id"
44790
+ },
44791
+ "subtitles": {
44792
+ "default": true,
44793
+ "description": "\uC644\uC131\uBCF8\uC5D0 \uC774 \uCEF7\uC758 \uC790\uB9C9\uC744 \uBC88\uC778\uD55C\uB2E4 \u2014 \uB044\uBA74 \uC790\uB9C9 \uD30C\uC77C\uC740 \uADF8\uB300\uB85C \uB9CC\uB4E4\uC5B4\uC9C0\uACE0(\uC815\uB82C \uAC12\uC740 \uCCAD\uAD6C\uB41C\uB2E4) \uC644\uC131\uBCF8\uC5D0\uB9CC \uC548 \uB098\uAC04\uB2E4. \uCEF7 \uC601\uC0C1\uC740 \uB2EC\uB77C\uC9C0\uC9C0 \uC54A\uC73C\uBBC0\uB85C \uC774 \uAC12\uC744 \uBC14\uAFD4\uB3C4 \uB2E4\uC2DC \uB9CC\uB4E4 \uD544\uC694\uAC00 \uC5C6\uB2E4",
44794
+ "title": "Subtitles",
44795
+ "type": "boolean",
44796
+ "x-diff": "ignore"
44797
+ },
44798
+ "host": {
44799
+ "anyOf": [
44800
+ {
44801
+ "type": "string"
44802
+ },
44803
+ {
44804
+ "type": "null"
44805
+ }
44806
+ ],
44807
+ "default": null,
44808
+ "description": "\uC9C4\uD589 \u2014 \uD5C8\uC6A9 \uC9D1\uD569\uC740 \uCE74\uD0C8\uB85C\uADF8(\uBC29\uC2DD\uBCC4). \uBAA8\uC158\uADF8\uB798\uD53D\uC740 \uD544\uC218",
44809
+ "title": "Host"
44810
+ },
44811
+ "voice_id": {
44812
+ "anyOf": [
44813
+ {
44814
+ "minLength": 1,
44815
+ "type": "string"
44816
+ },
44817
+ {
44818
+ "type": "null"
44819
+ }
44820
+ ],
44821
+ "default": null,
44822
+ "description": "host\u2208{voice,avatar} \uC774\uACE0 BYO \uC624\uB514\uC624\uAC00 \uC5C6\uC744 \uB54C \uD544\uC218",
44823
+ "title": "Voice Id"
44824
+ },
44825
+ "pip": {
44826
+ "anyOf": [
44827
+ {
44828
+ "$ref": "#/$defs/PipSpec"
44829
+ },
44830
+ {
44831
+ "type": "null"
44832
+ }
44833
+ ],
44834
+ "default": null,
44835
+ "description": "host=avatar \uC77C \uB54C \uD544\uC218"
44836
+ },
44837
+ "image_asset_id": {
44838
+ "anyOf": [
44839
+ {
44840
+ "minLength": 1,
44841
+ "type": "string"
44842
+ },
44843
+ {
44844
+ "type": "null"
44845
+ }
44846
+ ],
44847
+ "default": null,
44848
+ "description": "\uCEF7 \uC774\uBBF8\uC9C0\uB97C spec \uC5D0\uC11C \uC9C1\uC811 \uC9C0\uC815(\uC5D0\uC774\uC804\uD2B8 \uC6D0\uC0F7\uC6A9)",
44849
+ "title": "Image Asset Id"
44850
+ },
44851
+ "duration_s": {
44852
+ "anyOf": [
44853
+ {
44854
+ "exclusiveMinimum": 0,
44855
+ "maximum": 600,
44856
+ "type": "number"
44857
+ },
44858
+ {
44859
+ "type": "null"
44860
+ }
44861
+ ],
44862
+ "default": null,
44863
+ "title": "Duration S"
44864
+ },
44865
+ "mode": {
44866
+ "const": "motion_graphic",
44867
+ "default": "motion_graphic",
44868
+ "title": "Mode",
44869
+ "type": "string"
44870
+ },
44871
+ "motion_prompt": {
44872
+ "anyOf": [
44873
+ {
44874
+ "maxLength": 4e3,
44875
+ "type": "string"
44876
+ },
44877
+ {
44878
+ "type": "null"
44879
+ }
44880
+ ],
44881
+ "default": null,
44882
+ "title": "Motion Prompt"
44883
+ },
44884
+ "tsx": {
44885
+ "anyOf": [
44886
+ {
44887
+ "maxLength": 2e5,
44888
+ "type": "string"
44889
+ },
44890
+ {
44891
+ "type": "null"
44892
+ }
44893
+ ],
44894
+ "default": null,
44895
+ "description": "BYO Remotion \uCF54\uB4DC(UTF-8 \u2264 200KB) \u2014 codegen \uD589 0\uC6D0, \uAC8C\uC774\uD2B8\uB294 codegen \uACFC \uB3D9\uAE09",
44896
+ "title": "Tsx"
44897
+ },
44898
+ "layout_pattern": {
44899
+ "anyOf": [
44900
+ {
44901
+ "maxLength": 48,
44902
+ "type": "string"
44903
+ },
44904
+ {
44905
+ "type": "null"
44906
+ }
44907
+ ],
44908
+ "default": null,
44909
+ "title": "Layout Pattern"
44910
+ }
44911
+ },
44912
+ "title": "MotionGraphicSpec",
44913
+ "type": "object"
44914
+ },
44915
+ "PipSpec": {
44916
+ "properties": {
44917
+ "avatar_id": {
44918
+ "minLength": 1,
44919
+ "title": "Avatar Id",
44920
+ "type": "string"
44921
+ },
44922
+ "background_asset_id": {
44923
+ "description": "\uBC30\uACBD\uC740 \uC5B8\uC81C\uB098 \uC790\uC0B0(origin=background \uCE74\uD0C8\uB85C\uADF8 \uB610\uB294 \uC62C\uB9B0 \uC774\uBBF8\uC9C0)",
44924
+ "minLength": 1,
44925
+ "title": "Background Asset Id",
44926
+ "type": "string"
44927
+ },
44928
+ "position": {
44929
+ "default": "br",
44930
+ "enum": [
44931
+ "tl",
44932
+ "tr",
44933
+ "bl",
44934
+ "br"
44935
+ ],
44936
+ "title": "Position",
44937
+ "type": "string"
44938
+ },
44939
+ "size": {
44940
+ "default": "m",
44941
+ "enum": [
44942
+ "s",
44943
+ "m",
44944
+ "l"
44945
+ ],
44946
+ "title": "Size",
44947
+ "type": "string"
44948
+ }
44949
+ },
44950
+ "required": [
44951
+ "avatar_id",
44952
+ "background_asset_id"
44953
+ ],
44954
+ "title": "PipSpec",
44955
+ "type": "object"
44956
+ },
44957
+ "Quote": {
44958
+ "properties": {
44959
+ "rows": {
44960
+ "items": {
44961
+ "$ref": "#/$defs/QuoteRow"
44962
+ },
44963
+ "title": "Rows",
44964
+ "type": "array"
44965
+ },
44966
+ "total_krw": {
44967
+ "minimum": 0,
44968
+ "title": "Total Krw",
44969
+ "type": "integer"
44970
+ },
44971
+ "rate_version": {
44972
+ "description": "pricing_config.version \u2014 make \uAC00 \uAC19\uC740 \uAC12\uC744 \uC694\uAD6C\uD55C\uB2E4",
44973
+ "minimum": 1,
44974
+ "title": "Rate Version",
44975
+ "type": "integer"
44976
+ },
44977
+ "mock": {
44978
+ "default": false,
44979
+ "title": "Mock",
44980
+ "type": "boolean"
44981
+ },
44982
+ "provisional": {
44983
+ "default": false,
44984
+ "description": "\uD589 \uC911 \uD558\uB098\uB77C\uB3C4 \uC784\uC2DC \uB2E8\uAC00\uBA74 True",
44985
+ "title": "Provisional",
44986
+ "type": "boolean"
44987
+ }
44988
+ },
44989
+ "required": [
44990
+ "total_krw",
44991
+ "rate_version"
44992
+ ],
44993
+ "title": "Quote",
44994
+ "type": "object"
44995
+ },
44996
+ "QuoteRow": {
44997
+ "properties": {
44998
+ "key": {
44999
+ "description": "\uC7A1 \uC548\uC5D0\uC11C \uC720\uC77C\uD55C \uD589 \uD0A4 \u2014 tts:<line_id> \xB7 videogen:i2v \xB7 lipsync \xB7 render:\u2026",
45000
+ "title": "Key",
45001
+ "type": "string"
45002
+ },
45003
+ "ref_type": {
45004
+ "description": "\uC6D0\uAC00\uD45C \uD0A4(credits/pricing.BASE_PRICES)",
45005
+ "title": "Ref Type",
45006
+ "type": "string"
45007
+ },
45008
+ "units": {
45009
+ "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
45010
+ "title": "Units",
45011
+ "type": "string"
45012
+ },
45013
+ "unit_kind": {
45014
+ "title": "Unit Kind",
45015
+ "type": "string"
45016
+ },
45017
+ "display_name": {
45018
+ "title": "Display Name",
45019
+ "type": "string"
45020
+ },
45021
+ "krw": {
45022
+ "minimum": 0,
45023
+ "title": "Krw",
45024
+ "type": "integer"
45025
+ },
45026
+ "provisional": {
45027
+ "default": false,
45028
+ "title": "Provisional",
45029
+ "type": "boolean"
45030
+ }
45031
+ },
45032
+ "required": [
45033
+ "key",
45034
+ "ref_type",
45035
+ "units",
45036
+ "unit_kind",
45037
+ "display_name",
45038
+ "krw"
45039
+ ],
45040
+ "title": "QuoteRow",
45041
+ "type": "object"
45042
+ },
45043
+ "SubtitleTrackView": {
45044
+ "description": "\uBC84\uC804\uC758 \uC790\uB9C9 \uD2B8\uB799 \uD558\uB098 \u2014 \uB098\uB808\uC774\uC158 \uC6D0\uBB38(`download.subtitle`) **\uBC16**\uC758 \uC790\uB9C9.\n\n\uC720\uD29C\uBE0C \uD074\uB9BD\uC758 \uC6D0\uBCF8 \uB9D0\uC18C\uB9AC\uAC00 \uCCAB \uC18C\uBE44\uC790\uB2E4(\uC6D0\uC5B4 \uADF8\uB300\uB85C \uBC1B\uC544 \uC801\uB294\uB2E4 \u2014 \uC601\uC5B4 \uC601\uC0C1\uC774\uBA74 \uC601\uC5B4). \uBC88\uC5ED \uD2B8\uB799\uC774 \uAC19\uC740 \uBAA8\uC591\uC73C\uB85C\n\uB354\uD574\uC9C8 \uC790\uB9AC\uB2E4.",
45045
+ "properties": {
45046
+ "kind": {
45047
+ "description": "narration=\uC6B0\uB9AC\uAC00 \uB9CC\uB4E0 \uB300\uC0AC, source=\uC6D0\uBCF8 \uC601\uC0C1\uC758 \uB9D0\uC18C\uB9AC",
45048
+ "enum": [
45049
+ "narration",
45050
+ "source"
45051
+ ],
45052
+ "title": "Kind",
45053
+ "type": "string"
45054
+ },
45055
+ "lang": {
45056
+ "description": "ISO 639-1 \uB450 \uAE00\uC790. \uAC10\uC9C0\uD558\uC9C0 \uBABB\uD588\uC73C\uBA74 und",
45057
+ "title": "Lang",
45058
+ "type": "string"
45059
+ },
45060
+ "origin": {
45061
+ "enum": [
45062
+ "aligned",
45063
+ "transcribed",
45064
+ "translated"
45065
+ ],
45066
+ "title": "Origin",
45067
+ "type": "string"
45068
+ },
45069
+ "url": {
45070
+ "anyOf": [
45071
+ {
45072
+ "type": "string"
45073
+ },
45074
+ {
45075
+ "type": "null"
45076
+ }
45077
+ ],
45078
+ "default": null,
45079
+ "description": "SRT \uC11C\uBA85 URL. \uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
45080
+ "title": "Url"
45081
+ }
45082
+ },
45083
+ "required": [
45084
+ "kind",
45085
+ "lang",
45086
+ "origin"
45087
+ ],
45088
+ "title": "SubtitleTrackView",
45089
+ "type": "object"
45090
+ },
45091
+ "Timing": {
45092
+ "properties": {
45093
+ "dialogue": {
45094
+ "items": {
45095
+ "$ref": "#/$defs/DialogueTiming"
45096
+ },
45097
+ "title": "Dialogue",
45098
+ "type": "array"
45099
+ },
45100
+ "audible_ranges": {
45101
+ "items": {
45102
+ "maxItems": 2,
45103
+ "minItems": 2,
45104
+ "prefixItems": [
45105
+ {
45106
+ "type": "integer"
45107
+ },
45108
+ {
45109
+ "type": "integer"
45110
+ }
45111
+ ],
45112
+ "type": "array"
45113
+ },
45114
+ "title": "Audible Ranges",
45115
+ "type": "array"
45116
+ },
45117
+ "tts_reused_from": {
45118
+ "anyOf": [
45119
+ {
45120
+ "type": "integer"
45121
+ },
45122
+ {
45123
+ "type": "null"
45124
+ }
45125
+ ],
45126
+ "default": null,
45127
+ "title": "Tts Reused From"
45128
+ }
45129
+ },
45130
+ "title": "Timing",
45131
+ "type": "object"
45132
+ },
45133
+ "YoutubeAssetSource": {
45134
+ "properties": {
45135
+ "kind": {
45136
+ "const": "asset",
45137
+ "default": "asset",
45138
+ "title": "Kind",
45139
+ "type": "string"
45140
+ },
45141
+ "asset_id": {
45142
+ "description": "BYO: \uC62C\uB9B0 \uC6D0\uBCF8 \uC601\uC0C1 \u2014 \uB0B4\uB824\uBC1B\uAE30 \uD589 0\uC6D0",
45143
+ "minLength": 1,
45144
+ "title": "Asset Id",
45145
+ "type": "string"
45146
+ },
45147
+ "start_s": {
45148
+ "anyOf": [
45149
+ {
45150
+ "minimum": 0,
45151
+ "type": "number"
45152
+ },
45153
+ {
45154
+ "type": "null"
45155
+ }
45156
+ ],
45157
+ "default": null,
45158
+ "title": "Start S"
45159
+ },
45160
+ "end_s": {
45161
+ "anyOf": [
45162
+ {
45163
+ "exclusiveMinimum": 0,
45164
+ "type": "number"
45165
+ },
45166
+ {
45167
+ "type": "null"
45168
+ }
45169
+ ],
45170
+ "default": null,
45171
+ "title": "End S"
45172
+ }
45173
+ },
45174
+ "required": [
45175
+ "asset_id"
45176
+ ],
45177
+ "title": "YoutubeAssetSource",
45178
+ "type": "object"
45179
+ },
45180
+ "YoutubeClipSpec": {
45181
+ "properties": {
45182
+ "dialogue": {
45183
+ "items": {
45184
+ "$ref": "#/$defs/DialogueLine"
45185
+ },
45186
+ "title": "Dialogue",
45187
+ "type": "array"
45188
+ },
45189
+ "narration_asset_id": {
45190
+ "anyOf": [
45191
+ {
45192
+ "minLength": 1,
45193
+ "type": "string"
45194
+ },
45195
+ {
45196
+ "type": "null"
45197
+ }
45198
+ ],
45199
+ "default": null,
45200
+ "description": "BYO: \uCEF7 \uC804\uCCB4 \uB098\uB808\uC774\uC158 wav \uD55C \uAC1C(\uB300\uC0AC\uAC00 \uC788\uC5B4\uC57C \uD55C\uB2E4 \u2014 \uC790\uB9C9\xB7\uD0C0\uC774\uBC0D\uC758 \uADFC\uAC70). \uC904\uBCC4 audio_asset_id \uC640 \uB3D9\uC2DC \uC9C0\uC815 422",
45201
+ "title": "Narration Asset Id"
45202
+ },
45203
+ "subtitles": {
45204
+ "default": true,
45205
+ "description": "\uC644\uC131\uBCF8\uC5D0 \uC774 \uCEF7\uC758 \uC790\uB9C9\uC744 \uBC88\uC778\uD55C\uB2E4 \u2014 \uB044\uBA74 \uC790\uB9C9 \uD30C\uC77C\uC740 \uADF8\uB300\uB85C \uB9CC\uB4E4\uC5B4\uC9C0\uACE0(\uC815\uB82C \uAC12\uC740 \uCCAD\uAD6C\uB41C\uB2E4) \uC644\uC131\uBCF8\uC5D0\uB9CC \uC548 \uB098\uAC04\uB2E4. \uCEF7 \uC601\uC0C1\uC740 \uB2EC\uB77C\uC9C0\uC9C0 \uC54A\uC73C\uBBC0\uB85C \uC774 \uAC12\uC744 \uBC14\uAFD4\uB3C4 \uB2E4\uC2DC \uB9CC\uB4E4 \uD544\uC694\uAC00 \uC5C6\uB2E4",
45206
+ "title": "Subtitles",
45207
+ "type": "boolean",
45208
+ "x-diff": "ignore"
45209
+ },
45210
+ "host": {
45211
+ "anyOf": [
45212
+ {
45213
+ "type": "string"
45214
+ },
45215
+ {
45216
+ "type": "null"
45217
+ }
45218
+ ],
45219
+ "default": null,
45220
+ "description": "\uC9C4\uD589 \u2014 \uD5C8\uC6A9 \uC9D1\uD569\uC740 \uCE74\uD0C8\uB85C\uADF8(\uBC29\uC2DD\uBCC4). \uBAA8\uC158\uADF8\uB798\uD53D\uC740 \uD544\uC218",
45221
+ "title": "Host"
45222
+ },
45223
+ "voice_id": {
45224
+ "anyOf": [
45225
+ {
45226
+ "minLength": 1,
45227
+ "type": "string"
45228
+ },
45229
+ {
45230
+ "type": "null"
45231
+ }
45232
+ ],
45233
+ "default": null,
45234
+ "description": "host\u2208{voice,avatar} \uC774\uACE0 BYO \uC624\uB514\uC624\uAC00 \uC5C6\uC744 \uB54C \uD544\uC218",
45235
+ "title": "Voice Id"
45236
+ },
45237
+ "pip": {
45238
+ "anyOf": [
45239
+ {
45240
+ "$ref": "#/$defs/PipSpec"
45241
+ },
45242
+ {
45243
+ "type": "null"
45244
+ }
45245
+ ],
45246
+ "default": null,
45247
+ "description": "host=avatar \uC77C \uB54C \uD544\uC218"
45248
+ },
45249
+ "image_asset_id": {
45250
+ "anyOf": [
45251
+ {
45252
+ "minLength": 1,
45253
+ "type": "string"
45254
+ },
45255
+ {
45256
+ "type": "null"
45257
+ }
45258
+ ],
45259
+ "default": null,
45260
+ "description": "\uCEF7 \uC774\uBBF8\uC9C0\uB97C spec \uC5D0\uC11C \uC9C1\uC811 \uC9C0\uC815(\uC5D0\uC774\uC804\uD2B8 \uC6D0\uC0F7\uC6A9)",
45261
+ "title": "Image Asset Id"
45262
+ },
45263
+ "duration_s": {
45264
+ "anyOf": [
45265
+ {
45266
+ "exclusiveMinimum": 0,
45267
+ "maximum": 600,
45268
+ "type": "number"
45269
+ },
45270
+ {
45271
+ "type": "null"
45272
+ }
45273
+ ],
45274
+ "default": null,
45275
+ "title": "Duration S"
45276
+ },
45277
+ "mode": {
45278
+ "const": "youtube_clip",
45279
+ "default": "youtube_clip",
45280
+ "title": "Mode",
45281
+ "type": "string"
45282
+ },
45283
+ "source": {
45284
+ "discriminator": {
45285
+ "mapping": {
45286
+ "asset": "#/$defs/YoutubeAssetSource",
45287
+ "url": "#/$defs/YoutubeUrlSource"
45288
+ },
45289
+ "propertyName": "kind"
45290
+ },
45291
+ "oneOf": [
45292
+ {
45293
+ "$ref": "#/$defs/YoutubeUrlSource"
45294
+ },
45295
+ {
45296
+ "$ref": "#/$defs/YoutubeAssetSource"
45297
+ }
45298
+ ],
45299
+ "title": "Source"
45300
+ },
45301
+ "lower_source_audio": {
45302
+ "anyOf": [
45303
+ {
45304
+ "type": "boolean"
45305
+ },
45306
+ {
45307
+ "type": "null"
45308
+ }
45309
+ ],
45310
+ "default": null,
45311
+ "description": "\uC6D0\uBCF8 \uC601\uC0C1 \uC18C\uB9AC\uB97C \uD574\uC124 \uC544\uB798\uB85C \uB0AE\uCD9C\uC9C0(host=avatar \uC804\uC6A9). \uBE44\uC6B0\uBA74 \uB0AE\uCD98\uB2E4(\uAE30\uBCF8). false \uBA74 \uC6D0\uBCF8\uC744 \uADF8\uB300\uB85C \uB454\uB2E4 \u2014 \uC5B4\uB290 \uCABD\uC774\uB4E0 \uB450 \uC18C\uB9AC\uAC00 \uD568\uAED8 \uB098\uC628\uB2E4",
45312
+ "title": "Lower Source Audio"
42598
45313
  }
42599
45314
  },
42600
45315
  "required": [
42601
- "code",
42602
- "message"
45316
+ "source"
42603
45317
  ],
42604
- "title": "EstimateNote",
45318
+ "title": "YoutubeClipSpec",
42605
45319
  "type": "object"
42606
45320
  },
42607
- "QuoteRow": {
45321
+ "YoutubeUrlSource": {
42608
45322
  "properties": {
42609
- "key": {
42610
- "description": "\uC7A1 \uC548\uC5D0\uC11C \uC720\uC77C\uD55C \uD589 \uD0A4 \u2014 tts:<line_id> \xB7 videogen:i2v \xB7 lipsync \xB7 render:\u2026",
42611
- "title": "Key",
42612
- "type": "string"
42613
- },
42614
- "ref_type": {
42615
- "description": "\uC6D0\uAC00\uD45C \uD0A4(credits/pricing.BASE_PRICES)",
42616
- "title": "Ref Type",
42617
- "type": "string"
42618
- },
42619
- "units": {
42620
- "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
42621
- "title": "Units",
42622
- "type": "string"
42623
- },
42624
- "unit_kind": {
42625
- "title": "Unit Kind",
45323
+ "kind": {
45324
+ "const": "url",
45325
+ "default": "url",
45326
+ "title": "Kind",
42626
45327
  "type": "string"
42627
45328
  },
42628
- "display_name": {
42629
- "title": "Display Name",
45329
+ "url": {
45330
+ "description": "https://youtube.com|youtu.be \uACF5\uAC1C \uC8FC\uC18C\uB9CC",
45331
+ "minLength": 1,
45332
+ "title": "Url",
42630
45333
  "type": "string"
42631
45334
  },
42632
- "krw": {
45335
+ "start_s": {
42633
45336
  "minimum": 0,
42634
- "title": "Krw",
42635
- "type": "integer"
45337
+ "title": "Start S",
45338
+ "type": "number"
42636
45339
  },
42637
- "provisional": {
42638
- "default": false,
42639
- "title": "Provisional",
42640
- "type": "boolean"
45340
+ "end_s": {
45341
+ "exclusiveMinimum": 0,
45342
+ "title": "End S",
45343
+ "type": "number"
42641
45344
  }
42642
45345
  },
42643
45346
  "required": [
42644
- "key",
42645
- "ref_type",
42646
- "units",
42647
- "unit_kind",
42648
- "display_name",
42649
- "krw"
45347
+ "url",
45348
+ "start_s",
45349
+ "end_s"
42650
45350
  ],
42651
- "title": "QuoteRow",
45351
+ "title": "YoutubeUrlSource",
42652
45352
  "type": "object"
42653
45353
  }
42654
45354
  },
42655
45355
  "properties": {
42656
- "items": {
42657
- "items": {
42658
- "$ref": "#/$defs/EstimateItemResult"
42659
- },
42660
- "title": "Items",
42661
- "type": "array"
42662
- },
42663
- "notes": {
42664
- "items": {
42665
- "$ref": "#/$defs/EstimateNote"
42666
- },
42667
- "title": "Notes",
42668
- "type": "array"
42669
- },
42670
- "total_krw": {
42671
- "title": "Total Krw",
42672
- "type": "integer"
42673
- },
42674
- "rate_version": {
42675
- "title": "Rate Version",
42676
- "type": "integer"
42677
- },
42678
- "balance_krw": {
42679
- "title": "Balance Krw",
42680
- "type": "integer"
42681
- },
42682
- "balance_after_krw": {
42683
- "title": "Balance After Krw",
42684
- "type": "integer"
42685
- },
42686
- "can_afford": {
42687
- "title": "Can Afford",
42688
- "type": "boolean"
45356
+ "id": {
45357
+ "title": "Id",
45358
+ "type": "string"
42689
45359
  },
42690
- "mock": {
42691
- "default": false,
42692
- "title": "Mock",
42693
- "type": "boolean"
45360
+ "project_slug": {
45361
+ "title": "Project Slug",
45362
+ "type": "string"
42694
45363
  },
42695
- "provisional": {
42696
- "default": false,
42697
- "title": "Provisional",
42698
- "type": "boolean"
42699
- }
42700
- },
42701
- "required": [
42702
- "total_krw",
42703
- "rate_version",
42704
- "balance_krw",
42705
- "balance_after_krw",
42706
- "can_afford"
42707
- ],
42708
- "title": "EstimateResponse",
42709
- "type": "object"
42710
- },
42711
- "annotations": {
42712
- "readOnlyHint": false,
42713
- "destructiveHint": false,
42714
- "idempotentHint": false,
42715
- "openWorldHint": false
42716
- }
42717
- },
42718
- {
42719
- "name": "democut_make_hook_scan",
42720
- "description": "\uC6D0\uBCF8\uC5D0\uC11C \uD765\uBBF8 \uAD6C\uAC04 N\uAC1C\uB97C \uCC3E\uC544 **\uC21C\uC11C \uBC16** youtube_clip \uCEF7\uC73C\uB85C \uB9CC\uB4E0\uB2E4(\uCCAD\uAD6C, \uC7A1). \uAD6C\uAC04\uC740 5~30\uCD08\uC774\uACE0 \uC81C\uBAA9\uC740 \uACE0\uB978 \uC774\uC720\uB2E4. democut_estimate_hook_scan \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). \uCCAD\uAD6C\uC561\uC740 **\uC0C1\uD55C**\uC774\uB2E4 \u2014 \uC790\uB9C9\uC774 \uC788\uB294 \uC601\uC0C1\uC774\uBA74 \uC804\uC0AC \uD589\uC774 \uD658\uBD88\uB3FC \uC2E4\uC81C \uCCAD\uAD6C\uB294 \uADF8\uBCF4\uB2E4 \uC801\uB2E4. \uB05D\uB098\uBA74 \uCEF7\uC740 \uC21C\uC11C \uBC16\uC5D0 \uC788\uB2E4: democut_list_cuts \uB85C \uBCF4\uACE0 \uC4F8 \uAC83\uB9CC democut_reorder_cuts \uB85C \uC21C\uC11C\uC5D0 \uB123\uC5B4\uB77C. \uC751\uB2F5\uC740 202 \u2014 \uACB0\uACFC\uB294 democut_wait_jobs \uB85C \uBC1B\uB294\uB2E4. \uB2E4\uC74C \uD638\uCD9C: democut_wait_jobs, democut_list_cuts.",
42721
- "inputSchema": {
42722
- "type": "object",
42723
- "properties": {
42724
- "slug": {
42725
- "type": "string",
42726
- "description": "\uD504\uB85C\uC81D\uD2B8 \uC2AC\uB7EC\uADF8(list_projects)"
45364
+ "mode": {
45365
+ "enum": [
45366
+ "motion_graphic",
45367
+ "ai_video",
45368
+ "youtube_clip",
45369
+ "ai_image"
45370
+ ],
45371
+ "title": "Mode",
45372
+ "type": "string"
42727
45373
  },
42728
- "url": {
42729
- "description": "\uBD84\uC11D\uD560 \uC720\uD29C\uBE0C \uC8FC\uC18C(\uACF5\uAC1C \uC601\uC0C1)",
42730
- "minLength": 1,
42731
- "title": "Url",
45374
+ "title": {
45375
+ "default": "",
45376
+ "title": "Title",
42732
45377
  "type": "string"
42733
45378
  },
42734
- "count": {
42735
- "default": 3,
42736
- "description": "\uACE0\uB97C \uAD6C\uAC04 \uC218(\uAE30\uBCF8 3)",
42737
- "maximum": 10,
42738
- "minimum": 1,
42739
- "title": "Count",
42740
- "type": "integer"
45379
+ "position": {
45380
+ "anyOf": [
45381
+ {
45382
+ "type": "number"
45383
+ },
45384
+ {
45385
+ "type": "null"
45386
+ }
45387
+ ],
45388
+ "default": null,
45389
+ "description": "\uC5F0\uACB0 \uC21C\uC11C. None = \uCE94\uBC84\uC2A4\uC5D0\uC11C \uB5BC\uC5B4 \uB454 \uCEF7",
45390
+ "title": "Position"
42741
45391
  },
42742
- "confirmed_cost_krw": {
42743
- "minimum": 0,
42744
- "title": "Confirmed Cost Krw",
42745
- "type": "integer"
45392
+ "canvas": {
45393
+ "anyOf": [
45394
+ {
45395
+ "$ref": "#/$defs/CanvasPos"
45396
+ },
45397
+ {
45398
+ "type": "null"
45399
+ }
45400
+ ],
45401
+ "default": null
42746
45402
  },
42747
- "rate_version": {
42748
- "minimum": 1,
42749
- "title": "Rate Version",
42750
- "type": "integer"
42751
- }
42752
- },
42753
- "required": [
42754
- "slug",
42755
- "url",
42756
- "confirmed_cost_krw",
42757
- "rate_version"
42758
- ],
42759
- "additionalProperties": false
42760
- },
42761
- "outputSchema": {
42762
- "$defs": {
42763
- "Quote": {
42764
- "properties": {
42765
- "rows": {
42766
- "items": {
42767
- "$ref": "#/$defs/QuoteRow"
42768
- },
42769
- "title": "Rows",
42770
- "type": "array"
45403
+ "draft_spec": {
45404
+ "discriminator": {
45405
+ "mapping": {
45406
+ "ai_image": "#/$defs/AiImageSpec",
45407
+ "ai_video": "#/$defs/AiVideoSpec",
45408
+ "motion_graphic": "#/$defs/MotionGraphicSpec",
45409
+ "youtube_clip": "#/$defs/YoutubeClipSpec"
42771
45410
  },
42772
- "total_krw": {
42773
- "minimum": 0,
42774
- "title": "Total Krw",
42775
- "type": "integer"
45411
+ "propertyName": "mode"
45412
+ },
45413
+ "oneOf": [
45414
+ {
45415
+ "$ref": "#/$defs/MotionGraphicSpec"
42776
45416
  },
42777
- "rate_version": {
42778
- "description": "pricing_config.version \u2014 make \uAC00 \uAC19\uC740 \uAC12\uC744 \uC694\uAD6C\uD55C\uB2E4",
42779
- "minimum": 1,
42780
- "title": "Rate Version",
42781
- "type": "integer"
45417
+ {
45418
+ "$ref": "#/$defs/AiVideoSpec"
42782
45419
  },
42783
- "mock": {
42784
- "default": false,
42785
- "title": "Mock",
42786
- "type": "boolean"
45420
+ {
45421
+ "$ref": "#/$defs/YoutubeClipSpec"
42787
45422
  },
42788
- "provisional": {
42789
- "default": false,
42790
- "description": "\uD589 \uC911 \uD558\uB098\uB77C\uB3C4 \uC784\uC2DC \uB2E8\uAC00\uBA74 True",
42791
- "title": "Provisional",
42792
- "type": "boolean"
45423
+ {
45424
+ "$ref": "#/$defs/AiImageSpec"
42793
45425
  }
42794
- },
42795
- "required": [
42796
- "total_krw",
42797
- "rate_version"
42798
45426
  ],
42799
- "title": "Quote",
42800
- "type": "object"
45427
+ "title": "Draft Spec"
42801
45428
  },
42802
- "QuoteRow": {
42803
- "properties": {
42804
- "key": {
42805
- "description": "\uC7A1 \uC548\uC5D0\uC11C \uC720\uC77C\uD55C \uD589 \uD0A4 \u2014 tts:<line_id> \xB7 videogen:i2v \xB7 lipsync \xB7 render:\u2026",
42806
- "title": "Key",
42807
- "type": "string"
45429
+ "edit": {
45430
+ "$ref": "#/$defs/CutEdit"
45431
+ },
45432
+ "current_version": {
45433
+ "anyOf": [
45434
+ {
45435
+ "type": "integer"
42808
45436
  },
42809
- "ref_type": {
42810
- "description": "\uC6D0\uAC00\uD45C \uD0A4(credits/pricing.BASE_PRICES)",
42811
- "title": "Ref Type",
45437
+ {
45438
+ "type": "null"
45439
+ }
45440
+ ],
45441
+ "default": null,
45442
+ "description": "None = \uACC4\uD68D \uCEF7(R11)",
45443
+ "title": "Current Version"
45444
+ },
45445
+ "current_image_id": {
45446
+ "anyOf": [
45447
+ {
42812
45448
  "type": "string"
42813
45449
  },
42814
- "units": {
42815
- "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
42816
- "title": "Units",
42817
- "type": "string"
45450
+ {
45451
+ "type": "null"
45452
+ }
45453
+ ],
45454
+ "default": null,
45455
+ "title": "Current Image Id"
45456
+ },
45457
+ "images": {
45458
+ "items": {
45459
+ "$ref": "#/$defs/CutImageView"
45460
+ },
45461
+ "title": "Images",
45462
+ "type": "array"
45463
+ },
45464
+ "hook_candidates": {
45465
+ "anyOf": [
45466
+ {
45467
+ "$ref": "#/$defs/HookCandidates"
42818
45468
  },
42819
- "unit_kind": {
42820
- "title": "Unit Kind",
45469
+ {
45470
+ "type": "null"
45471
+ }
45472
+ ],
45473
+ "default": null
45474
+ },
45475
+ "versions": {
45476
+ "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
45477
+ "items": {
45478
+ "$ref": "#/$defs/CutVersionView"
45479
+ },
45480
+ "title": "Versions",
45481
+ "type": "array"
45482
+ },
45483
+ "state": {
45484
+ "enum": [
45485
+ "planned",
45486
+ "image_generating",
45487
+ "rendering",
45488
+ "ready",
45489
+ "dirty",
45490
+ "failed"
45491
+ ],
45492
+ "title": "State",
45493
+ "type": "string"
45494
+ },
45495
+ "dirty_fields": {
45496
+ "items": {
45497
+ "type": "string"
45498
+ },
45499
+ "title": "Dirty Fields",
45500
+ "type": "array"
45501
+ },
45502
+ "estimated_cost_krw": {
45503
+ "anyOf": [
45504
+ {
45505
+ "type": "integer"
45506
+ },
45507
+ {
45508
+ "type": "null"
45509
+ }
45510
+ ],
45511
+ "default": null,
45512
+ "title": "Estimated Cost Krw"
45513
+ },
45514
+ "rows": {
45515
+ "items": {
45516
+ "$ref": "#/$defs/QuoteRow"
45517
+ },
45518
+ "title": "Rows",
45519
+ "type": "array"
45520
+ },
45521
+ "blocked_reason": {
45522
+ "anyOf": [
45523
+ {
42821
45524
  "type": "string"
42822
45525
  },
42823
- "display_name": {
42824
- "title": "Display Name",
45526
+ {
45527
+ "type": "null"
45528
+ }
45529
+ ],
45530
+ "default": null,
45531
+ "title": "Blocked Reason"
45532
+ },
45533
+ "edit_adjusted": {
45534
+ "default": false,
45535
+ "title": "Edit Adjusted",
45536
+ "type": "boolean"
45537
+ },
45538
+ "active_job_id": {
45539
+ "anyOf": [
45540
+ {
42825
45541
  "type": "string"
42826
45542
  },
42827
- "krw": {
42828
- "minimum": 0,
42829
- "title": "Krw",
42830
- "type": "integer"
45543
+ {
45544
+ "type": "null"
45545
+ }
45546
+ ],
45547
+ "default": null,
45548
+ "title": "Active Job Id"
45549
+ },
45550
+ "last_job_id": {
45551
+ "anyOf": [
45552
+ {
45553
+ "type": "string"
42831
45554
  },
42832
- "provisional": {
42833
- "default": false,
42834
- "title": "Provisional",
42835
- "type": "boolean"
45555
+ {
45556
+ "type": "null"
42836
45557
  }
42837
- },
42838
- "required": [
42839
- "key",
42840
- "ref_type",
42841
- "units",
42842
- "unit_kind",
42843
- "display_name",
42844
- "krw"
42845
45558
  ],
42846
- "title": "QuoteRow",
42847
- "type": "object"
42848
- }
42849
- },
42850
- "properties": {
42851
- "job_id": {
42852
- "title": "Job Id",
42853
- "type": "string"
45559
+ "default": null,
45560
+ "description": "\uC774 \uCEF7\uC758 \uB9C8\uC9C0\uB9C9 \uC7A1(\uC9C4\uD589 \uC911\uC774\uBA74 active_job_id \uC640 \uAC19\uB2E4). wait_jobs \uC758 job_ids \uB85C \uC4F8 \uC218 \uC788\uB2E4",
45561
+ "title": "Last Job Id"
42854
45562
  },
42855
- "quote": {
45563
+ "last_error": {
42856
45564
  "anyOf": [
42857
45565
  {
42858
- "$ref": "#/$defs/Quote"
45566
+ "$ref": "#/$defs/JobError"
42859
45567
  },
42860
45568
  {
42861
45569
  "type": "null"
42862
45570
  }
42863
45571
  ],
42864
- "default": null
45572
+ "default": null,
45573
+ "description": "state=failed \uC77C \uB54C\uB9CC \u2014 \uB9C8\uC9C0\uB9C9 \uC7A1\uC758 \uC624\uB958(code\xB7message\xB7hint\xB7refunded_krw). \uC0B0\uCD9C\uBB3C\uC774 \uC5C6\uB294 \uC774\uC720"
42865
45574
  },
42866
45575
  "next_calls": {
42867
45576
  "items": {
@@ -42869,12 +45578,26 @@ var GENERATED_TOOLS = [
42869
45578
  },
42870
45579
  "title": "Next Calls",
42871
45580
  "type": "array"
45581
+ },
45582
+ "created_at": {
45583
+ "title": "Created At",
45584
+ "type": "string"
45585
+ },
45586
+ "updated_at": {
45587
+ "title": "Updated At",
45588
+ "type": "string"
42872
45589
  }
42873
45590
  },
42874
45591
  "required": [
42875
- "job_id"
45592
+ "id",
45593
+ "project_slug",
45594
+ "mode",
45595
+ "draft_spec",
45596
+ "state",
45597
+ "created_at",
45598
+ "updated_at"
42876
45599
  ],
42877
- "title": "JobAccepted",
45600
+ "title": "CutView",
42878
45601
  "type": "object"
42879
45602
  },
42880
45603
  "annotations": {
@@ -47086,6 +49809,74 @@ var GENERATED_TOOLS = [
47086
49809
  "title": "FromVersionImageRef",
47087
49810
  "type": "object"
47088
49811
  },
49812
+ "HookCandidate": {
49813
+ "description": "\uD6C4\uD0B9 \uAD6C\uAC04 \uD6C4\uBCF4 \uD558\uB098 \u2014 \uC0AC\uB78C\uC774 \uBAA9\uB85D\uC5D0\uC11C \uBCF4\uACE0 \uACE0\uB974\uB294 \uB2E8\uC704(\uC20F\uCE20 \uC7AC\uC124\uACC4 2026-09-22).\n\n\u2605\u2605 `title` \uACFC `reasoning` \uC740 **\uB2E4\uB978 \uAC83**\uC774\uB2E4(\uC61B `clip_extractor_service` \uC758 \uC5ED\uD560 \uBD84\uB2F4):\n `title` \uC740 **\uD6C4\uD06C \uCE74\uD53C**(\uACE0\uB974\uBA74 \uADF8\uB300\uB85C \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4), `reasoning` \uC740 **\uC65C \uACE8\uB790\uB294\uC9C0**\uB2E4.\n\u2605\u2605 `score` \uB294 **\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uAC15\uB3C4**\uB2E4 \u2014 \uC808\uB300 \uAE30\uC900\uC774 \uC5C6\uC5B4 \uB2E4\uB978 \uC601\uC0C1\uC758 \uC810\uC218\uC640 \uACAC\uC8FC\uBA74 \uC548 \uB41C\uB2E4.\n \uBAA9\uB85D\uC740 \uC774 \uAC12\uC758 \uB0B4\uB9BC\uCC28\uC21C\uC774\uACE0, \uADF8\uB798\uC11C **\uCCAB\uC9F8\uAC00 \uACE7 \uAC00\uC7A5 \uC88B\uC740 \uAC83**\uC774\uB2E4(\uC81C\uC548\uC774 \uC790\uB3D9\uC73C\uB85C \uACE0\uB974\uB294 \uAC83\uB3C4 \uADF8\uAC83).",
49814
+ "properties": {
49815
+ "start_s": {
49816
+ "minimum": 0,
49817
+ "title": "Start S",
49818
+ "type": "number"
49819
+ },
49820
+ "end_s": {
49821
+ "exclusiveMinimum": 0,
49822
+ "title": "End S",
49823
+ "type": "number"
49824
+ },
49825
+ "title": {
49826
+ "default": "",
49827
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
49828
+ "title": "Title",
49829
+ "type": "string"
49830
+ },
49831
+ "score": {
49832
+ "default": 0,
49833
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
49834
+ "maximum": 100,
49835
+ "minimum": 0,
49836
+ "title": "Score",
49837
+ "type": "integer"
49838
+ },
49839
+ "reasoning": {
49840
+ "default": "",
49841
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
49842
+ "title": "Reasoning",
49843
+ "type": "string"
49844
+ }
49845
+ },
49846
+ "required": [
49847
+ "start_s",
49848
+ "end_s"
49849
+ ],
49850
+ "title": "HookCandidate",
49851
+ "type": "object"
49852
+ },
49853
+ "HookCandidates": {
49854
+ "description": "\uD55C \uCEF7\uC758 \uD0D0\uC0C9 \uACB0\uACFC \u2014 \uD6C4\uBCF4 \uBAA9\uB85D + **\uADF8\uB54C\uC758 \uC8FC\uC18C**.\n\n\u2605\u2605 `url` \uC744 \uD568\uAED8 \uB2F4\uB294 \uC774\uC720: \uC8FC\uC18C\uB97C \uBC14\uAFD4\uB3C4 \uD6C4\uBCF4\uB294 \uC9C0\uC6B0\uC9C0 \uC54A\uC73C\uBBC0\uB85C(\uC0AC\uC6A9\uC790 \uACB0\uC815) \uD654\uBA74\uC774 \u300C\uC774\uAC74 \uB2E4\uB978\n \uC601\uC0C1\uC758 \uAD6C\uAC04\uC774\uB2E4\u300D \uB97C \uC54C \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4. \uC0C8 \uC8FC\uC18C\uB85C \uB2E4\uC2DC \uCC3E\uC73C\uBA74 \uD1B5\uC9F8\uB85C \uB36E\uC778\uB2E4.\n\u2605 `items` \uAC00 **\uBE48 \uBC30\uC5F4**\uC778 \uAC83\uACFC `hook_candidates` \uC790\uCCB4\uAC00 \uC5C6\uB294 \uAC83\uC740 \uB2E4\uB978 \uB73B\uC774\uB2E4 \u2014 \uC804\uC790\uB294\n \u300C\uCC3E\uC558\uB294\uB370 \uC4F8 \uB9CC\uD55C \uAC83\uC774 \uC5C6\uC5C8\uB2E4\u300D, \uD6C4\uC790\uB294 \u300C\uC544\uC9C1 \uCC3E\uC740 \uC801 \uC5C6\uB2E4\u300D.",
49855
+ "properties": {
49856
+ "url": {
49857
+ "title": "Url",
49858
+ "type": "string"
49859
+ },
49860
+ "found_at": {
49861
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
49862
+ "title": "Found At",
49863
+ "type": "string"
49864
+ },
49865
+ "items": {
49866
+ "items": {
49867
+ "$ref": "#/$defs/HookCandidate"
49868
+ },
49869
+ "title": "Items",
49870
+ "type": "array"
49871
+ }
49872
+ },
49873
+ "required": [
49874
+ "url",
49875
+ "found_at"
49876
+ ],
49877
+ "title": "HookCandidates",
49878
+ "type": "object"
49879
+ },
47089
49880
  "JobError": {
47090
49881
  "description": '\uC7A1 \uC2E4\uD328\uC758 \uB300\uC678 \uC5BC\uAD74. \u2605\u2605 **\uB7F0\uD0C0\uC784\uC758 \uBAA8\uB4E0 \uC2E4\uD328 \uBD84\uAE30\uAC00 \uB9CC\uB4DC\uB294 \uBD09\uD22C\uB97C \uBC1B\uC544\uB0BC \uC218 \uC788\uC5B4\uC57C \uD55C\uB2E4** \u2014\n`to_view` \uAC00 `JobError(**rec.error)` \uB85C \uBCC0\uD658\uD558\uB294\uB370 \uC774 \uBAA8\uB378\uC740 `extra="forbid"` \uB77C, \uBD09\uD22C\uC5D0\uB9CC \uC788\uACE0\n\uC5EC\uAE30 \uC5C6\uB294 \uD0A4\uAC00 \uD558\uB098\uB77C\uB3C4 \uC788\uC73C\uBA74 **\uADF8 \uC7A1\uC758 \uC870\uD68C\uAC00 500** \uC774 \uB41C\uB2E4(2026-09-10 \uC2E4\uCE21: \uB2E4\uC12F \uACBD\uB85C \uC911 \uB137).\n\n\u26A0\uFE0F \uADF8 \uACB0\uD568\uC740 \uC870\uC6A9\uD558\uB2E4 \u2014 \uBD09\uD22C\uB97C *\uB9CC\uB4DC\uB294* \uACF3(`jobs/runtime.py` \uC758 except \uBD84\uAE30)\uACFC *\uC77D\uB294* \uACF3\uC774\n\uAC08\uB824 \uC788\uC5B4 \uC5B4\uB290 \uCABD \uD14C\uC2A4\uD2B8\uB3C4 \uC655\uBCF5\uC744 \uBCF4\uC9C0 \uC54A\uC558\uB2E4. \uADF8\uB798\uC11C `cause`(\uC7AC\uC2DC\uB3C4 \uC18C\uC9C4)\uC640 `data`(FatalError\xB7\nDemoCutError)\uAC00 \uACC4\uC57D \uBC16\uC5D0 \uC788\uB294 \uCC44\uB85C \uC624\uB798 \uC0B4\uC544\uB0A8\uC558\uACE0, **\uC2E4\uD328\uD55C \uC7A1\uC77C\uC218\uB85D \uC870\uD68C\uAC00 \uC548 \uB418\uB294** \uC0C1\uD0DC\uC600\uB2E4\n(\uB3C8\uC774 \uB098\uAC04 \uC790\uB9AC\uC758 \uC548\uB0B4\uB97C \uADF8 \uC870\uD68C\uB85C \uC804\uD558\uB294\uB370 \uB9D0\uC774\uB2E4). \uAC00\uB4DC\uB294 \uB124 \uBD84\uAE30\uB97C \uC2E4\uC81C\uB85C \uD0DC\uC6CC \uC655\uBCF5\uC2DC\uD0A8\uB2E4\n(`test_every_failure_envelope_survives_the_view`).',
47091
49882
  "properties": {
@@ -47860,6 +50651,17 @@ var GENERATED_TOOLS = [
47860
50651
  "title": "Images",
47861
50652
  "type": "array"
47862
50653
  },
50654
+ "hook_candidates": {
50655
+ "anyOf": [
50656
+ {
50657
+ "$ref": "#/$defs/HookCandidates"
50658
+ },
50659
+ {
50660
+ "type": "null"
50661
+ }
50662
+ ],
50663
+ "default": null
50664
+ },
47863
50665
  "versions": {
47864
50666
  "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
47865
50667
  "items": {
@@ -48351,13 +51153,19 @@ var TOOL_META = {
48351
51153
  "cost": "quote",
48352
51154
  "group": "storyboard",
48353
51155
  "method": "POST",
48354
- "path": "/api/projects/{slug}/hook_scan/estimate"
51156
+ "path": "/api/projects/{slug}/cuts/{cut_id}/hook_scan/estimate"
48355
51157
  },
48356
51158
  "democut_make_hook_scan": {
48357
51159
  "cost": "charge",
48358
51160
  "group": "storyboard",
48359
51161
  "method": "POST",
48360
- "path": "/api/projects/{slug}/hook_scan"
51162
+ "path": "/api/projects/{slug}/cuts/{cut_id}/hook_scan"
51163
+ },
51164
+ "democut_pick_hook_candidate": {
51165
+ "cost": "none",
51166
+ "group": "storyboard",
51167
+ "method": "POST",
51168
+ "path": "/api/projects/{slug}/cuts/{cut_id}/hook_scan/pick"
48361
51169
  },
48362
51170
  "democut_estimate_export": {
48363
51171
  "cost": "quote",
@@ -50604,21 +53412,31 @@ function dismissProposal(a = {}, deps = {}) {
50604
53412
  };
50605
53413
  });
50606
53414
  }
53415
+ var cutPath = (slug, cutId, tail) => `/api/projects/${encodeURIComponent(slug)}/cuts/${encodeURIComponent(cutId)}${tail}`;
53416
+ function needCut(a) {
53417
+ const cutId = (a.cut_id ?? "").trim();
53418
+ if (!cutId) {
53419
+ return { isError: true, text: "cut_id \uAC00 \uD544\uC694\uD569\uB2C8\uB2E4 \u2014 democut_list_cuts \uB85C \uD655\uC778\uD558\uC138\uC694." };
53420
+ }
53421
+ return cutId;
53422
+ }
50607
53423
  function estimateHookScan(a = {}, deps = {}) {
50608
53424
  return guarded(READ_ONLY, async () => {
50609
53425
  const slug = needSlug(a);
50610
53426
  if (typeof slug !== "string") return slug;
53427
+ const cutId = needCut(a);
53428
+ if (typeof cutId !== "string") return cutId;
50611
53429
  const base = resolveBaseUrl(deps.baseUrl);
50612
53430
  const out4 = await apiRequest(
50613
53431
  base,
50614
- projectPath(slug, "/hook_scan/estimate"),
50615
- { method: "POST", body: { url: a.url, count: a.count ?? 3 } },
53432
+ cutPath(slug, cutId, "/hook_scan/estimate"),
53433
+ { method: "POST", body: { count: a.count ?? 5 } },
50616
53434
  deps
50617
53435
  );
50618
53436
  const rows = (out4.items ?? []).flatMap((item) => item.rows ?? []).map((r) => `${r.display_name || r.key} ${krw(r.krw)}`).join(", ") || "\uD589 \uC5C6\uC74C";
50619
53437
  const lines = [
50620
- `\uD6C4\uD0B9 \uAD6C\uAC04 \uBD84\uC11D \uACAC\uC801 (\uC694\uC728 v${out4.rate_version}) \u2014 \uBD80\uC791\uC6A9\uB3C4 \uACFC\uAE08\uB3C4 \uC5C6\uC2B5\uB2C8\uB2E4`,
50621
- ` \uAD6C\uAC04 ${a.count ?? 3}\uAC1C: \uCD5C\uB300 ${krw(out4.total_krw)} (${rows})`,
53438
+ `\uD6C4\uD0B9 \uAD6C\uAC04 \uD0D0\uC0C9 \uACAC\uC801 (\uC694\uC728 v${out4.rate_version}) \u2014 \uBD80\uC791\uC6A9\uB3C4 \uACFC\uAE08\uB3C4 \uC5C6\uC2B5\uB2C8\uB2E4`,
53439
+ ` \uD6C4\uBCF4 ${a.count ?? 5}\uAC1C: \uCD5C\uB300 ${krw(out4.total_krw)} (${rows})`,
50622
53440
  // ★ 「최대」 라고 말한다 — 자막이 있으면 전사 행이 환불돼 실제 청구는 이보다 적다(승인액이 상한이다).
50623
53441
  `\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)}`,
50624
53442
  "\uC601\uC0C1\uC5D0 \uC790\uB9C9\uC774 \uC788\uC73C\uBA74 \uC804\uC0AC \uD589\uC740 \uC815\uC0B0\uC5D0\uC11C \uC804\uC561 \uD658\uBD88\uB429\uB2C8\uB2E4 \u2014 \uC2E4\uC81C \uCCAD\uAD6C\uB294 \uC774\uBCF4\uB2E4 \uC801\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",
@@ -50633,15 +53451,16 @@ function makeHookScan(a = {}, deps = {}) {
50633
53451
  return guarded(SUBMITTING, async () => {
50634
53452
  const slug = needSlug(a);
50635
53453
  if (typeof slug !== "string") return slug;
53454
+ const cutId = needCut(a);
53455
+ if (typeof cutId !== "string") return cutId;
50636
53456
  const base = resolveBaseUrl(deps.baseUrl);
50637
53457
  const out4 = await apiRequest(
50638
53458
  base,
50639
- projectPath(slug, "/hook_scan"),
53459
+ cutPath(slug, cutId, "/hook_scan"),
50640
53460
  {
50641
53461
  method: "POST",
50642
53462
  body: {
50643
- url: a.url,
50644
- count: a.count ?? 3,
53463
+ count: a.count ?? 5,
50645
53464
  confirmed_cost_krw: a.confirmed_cost_krw,
50646
53465
  rate_version: a.rate_version
50647
53466
  }
@@ -50650,13 +53469,36 @@ function makeHookScan(a = {}, deps = {}) {
50650
53469
  );
50651
53470
  const lines = [
50652
53471
  `\uAD6C\uAC04\uC744 \uCC3E\uB294 \uC911\uC785\uB2C8\uB2E4 \u2014 ${out4.job_id} (\uCD5C\uB300 ${krw(out4.quote?.total_krw ?? 0)})`,
50653
- `\uC6D0\uBCF8\uC758 \uB9D0\uC18C\uB9AC\uB97C \uC77D\uC5B4 \uC20F\uD3FC\uC73C\uB85C \uC4F8 \uAD6C\uAC04 ${a.count ?? 3}\uAC1C\uB97C \uACE0\uB985\uB2C8\uB2E4(\uAC01 5~30\uCD08). \uC790\uB9C9\uC774 \uC788\uC73C\uBA74 \uC804\uC0AC \uD589\uC740 \uD658\uBD88\uB429\uB2C8\uB2E4.`,
50654
- "\uB05D\uB098\uBA74 \uAD6C\uAC04\uB9C8\uB2E4 \uCEF7\uC774 \uC0DD\uAE30\uB294\uB370 **\uC21C\uC11C \uBC16**\uC785\uB2C8\uB2E4 \u2014 democut_list_cuts \uB85C \uBCF4\uACE0 \uC4F8 \uAC83\uB9CC democut_reorder_cuts \uB85C \uC21C\uC11C\uC5D0 \uB123\uC73C\uC138\uC694.",
53472
+ `\uC6D0\uBCF8\uC758 \uB9D0\uC18C\uB9AC\uB97C \uC77D\uC5B4 \uC4F8 \uB9CC\uD55C \uAD6C\uAC04 ${a.count ?? 5}\uAC1C\uB97C \uACE0\uB985\uB2C8\uB2E4(\uAC01 5~30\uCD08). \uC790\uB9C9\uC774 \uC788\uC73C\uBA74 \uC804\uC0AC \uD589\uC740 \uD658\uBD88\uB429\uB2C8\uB2E4.`,
53473
+ "\uB05D\uB098\uBA74 **\uCEF7\uC774 \uC0DD\uAE30\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4** \u2014 democut_get_cut \uC758 hook_candidates \uAC00 \uC810\uC218\uC21C\uC73C\uB85C \uCC44\uC6CC\uC9C0\uACE0, democut_pick_hook_candidate \uB85C \uD558\uB098\uB97C \uACE8\uB77C\uC57C \uADF8 \uCEF7\uC758 \uAD6C\uAC04\uC774 \uB429\uB2C8\uB2E4.",
50655
53474
  "\uB2E4\uC74C \uD638\uCD9C: democut_wait_jobs"
50656
53475
  ];
50657
53476
  return { text: lines.join("\n"), structured: callableStructured(out4) };
50658
53477
  });
50659
53478
  }
53479
+ function pickHookCandidate(a = {}, deps = {}) {
53480
+ return guarded(READ_ONLY, async () => {
53481
+ const slug = needSlug(a);
53482
+ if (typeof slug !== "string") return slug;
53483
+ const cutId = needCut(a);
53484
+ if (typeof cutId !== "string") return cutId;
53485
+ const base = resolveBaseUrl(deps.baseUrl);
53486
+ const out4 = await apiRequest(
53487
+ base,
53488
+ cutPath(slug, cutId, "/hook_scan/pick"),
53489
+ { method: "POST", body: { index: a.index ?? 0 } },
53490
+ deps
53491
+ );
53492
+ const src = (out4.draft_spec ?? {}).source ?? {};
53493
+ const span = `${(src.start_s ?? 0).toFixed(1)}~${(src.end_s ?? 0).toFixed(1)}\uCD08`;
53494
+ const lines = [
53495
+ `${out4.id} \uC758 \uAD6C\uAC04\uC744 ${span} \uB85C \uC815\uD588\uC2B5\uB2C8\uB2E4 \u2014 \uC81C\uBAA9: ${out4.title || "(\uC5C6\uC74C)"}`,
53496
+ "\uD6C4\uBCF4 \uBAA9\uB85D\uC740 \uADF8\uB300\uB85C \uB0A8\uC544 \uC788\uC2B5\uB2C8\uB2E4 \u2014 \uB2E4\uB978 \uAC83\uC73C\uB85C \uBC14\uAFB8\uB824\uBA74 \uB2E4\uC2DC democut_pick_hook_candidate \uB97C \uBD80\uB974\uC138\uC694.",
53497
+ "\uC601\uC0C1\uC744 \uB9CC\uB4E4\uB824\uBA74 democut_estimate_cuts \u2192 democut_make_cuts \uC785\uB2C8\uB2E4." + ((out4.dirty_fields ?? []).length > 0 ? " \uC774\uBBF8 \uB9CC\uB4E0 \uC601\uC0C1\uC774 \uC788\uC5B4 **\uB2E4\uC2DC \uB9CC\uB4E4\uC5B4\uC57C** \uD569\uB2C8\uB2E4(\uAD6C\uAC04\uC774 \uBC14\uB00C\uC5C8\uC2B5\uB2C8\uB2E4)." : "")
53498
+ ];
53499
+ return { text: lines.join("\n"), structured: callableStructured(out4) };
53500
+ });
53501
+ }
50660
53502
  function estimateExport(a = {}, deps = {}) {
50661
53503
  return guarded(READ_ONLY, async () => {
50662
53504
  const slug = needSlug(a);
@@ -51048,6 +53890,8 @@ function dispatch(name, args, deps = {}) {
51048
53890
  return estimateHookScan(args, deps);
51049
53891
  case "democut_make_hook_scan":
51050
53892
  return makeHookScan(args, deps);
53893
+ case "democut_pick_hook_candidate":
53894
+ return pickHookCandidate(args, deps);
51051
53895
  case "democut_estimate_export":
51052
53896
  return estimateExport(args, deps);
51053
53897
  case "democut_make_export":