democut 1.0.23 → 1.0.25

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 +3403 -489
  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.25";
6920
6920
 
6921
6921
  // src/device-flow.ts
6922
6922
  var DeviceFlowError = class extends Error {
@@ -7787,6 +7787,16 @@ var GENERATED_TOOLS = [
7787
7787
  "title": "Position",
7788
7788
  "type": "string"
7789
7789
  },
7790
+ "align": {
7791
+ "default": "center",
7792
+ "enum": [
7793
+ "left",
7794
+ "center",
7795
+ "right"
7796
+ ],
7797
+ "title": "Align",
7798
+ "type": "string"
7799
+ },
7790
7800
  "offset_pct": {
7791
7801
  "anyOf": [
7792
7802
  {
@@ -8080,6 +8090,16 @@ var GENERATED_TOOLS = [
8080
8090
  "title": "Position",
8081
8091
  "type": "string"
8082
8092
  },
8093
+ "align": {
8094
+ "default": "center",
8095
+ "enum": [
8096
+ "left",
8097
+ "center",
8098
+ "right"
8099
+ ],
8100
+ "title": "Align",
8101
+ "type": "string"
8102
+ },
8083
8103
  "offset_pct": {
8084
8104
  "anyOf": [
8085
8105
  {
@@ -8489,260 +8509,280 @@ var GENERATED_TOOLS = [
8489
8509
  "title": "Position",
8490
8510
  "type": "string"
8491
8511
  },
8492
- "offset_pct": {
8493
- "anyOf": [
8494
- {
8495
- "maximum": 40,
8496
- "minimum": 0,
8497
- "type": "number"
8498
- },
8499
- {
8500
- "type": "null"
8501
- }
8502
- ],
8503
- "default": null,
8504
- "title": "Offset Pct"
8505
- },
8506
- "size": {
8507
- "default": "medium",
8508
- "enum": [
8509
- "small",
8510
- "medium",
8511
- "large",
8512
- "xlarge"
8513
- ],
8514
- "title": "Size",
8515
- "type": "string"
8516
- },
8517
- "color": {
8518
- "default": "#FFFFFF",
8519
- "pattern": "^#[0-9A-Fa-f]{6}$",
8520
- "title": "Color",
8521
- "type": "string"
8522
- },
8523
- "outline": {
8524
- "default": "thin",
8525
- "enum": [
8526
- "none",
8527
- "thin",
8528
- "thick"
8529
- ],
8530
- "title": "Outline",
8531
- "type": "string"
8532
- },
8533
- "outline_color": {
8534
- "default": "#000000",
8535
- "pattern": "^#[0-9A-Fa-f]{6}$",
8536
- "title": "Outline Color",
8537
- "type": "string"
8538
- },
8539
- "bold": {
8540
- "default": false,
8541
- "title": "Bold",
8542
- "type": "boolean"
8543
- },
8544
- "box": {
8545
- "default": false,
8546
- "title": "Box",
8547
- "type": "boolean"
8548
- },
8549
- "box_color": {
8550
- "default": "#000000",
8551
- "pattern": "^#[0-9A-Fa-f]{6}$",
8552
- "title": "Box Color",
8553
- "type": "string"
8554
- },
8555
- "box_opacity": {
8556
- "default": 60,
8557
- "maximum": 100,
8558
- "minimum": 0,
8559
- "title": "Box Opacity",
8560
- "type": "integer"
8561
- }
8562
- },
8563
- "title": "SubtitleStyle",
8564
- "type": "object"
8565
- }
8566
- }
8567
- },
8568
- "outputSchema": {
8569
- "$defs": {
8570
- "Brand": {
8571
- "description": "\uBE0C\uB79C\uB4DC\uD0B7 \u2014 \uC6CC\uD06C\uC2A4\uD398\uC774\uC2A4 \uAE30\uBCF8\uAC12(`BrandKitView.brand`)\uC774\uC790 \uD504\uB85C\uC81D\uD2B8 \uB36E\uC5B4\uC4F0\uAE30(`ProjectDefaults.brand`)\uC758 \uBAA8\uC591.\n\n\u2605 \uB450 \uC790\uB9AC\uAC00 **\uAC19\uC740 \uBAA8\uB378**\uC774\uB2E4 \u2014 \uD569\uCE60 \uB54C(\uD504\uB85C\uC81D\uD2B8\uC758 None \uC774 \uC544\uB2CC \uD544\uB4DC\uAC00 \uC6CC\uD06C\uC2A4\uD398\uC774\uC2A4 \uAC12\uC744 \uB36E\uB294\uB2E4) \uD544\uB4DC \uC9D1\uD569\uC774\n\uAC08\uB9AC\uBA74 \uD55C\uCABD\uC5D0\uB9CC \uC788\uB294 \uAC12\uC774 \uC870\uC6A9\uD788 \uC0AC\uB77C\uC9C4\uB2E4. \uC804\uBD80 \uC120\uD0DD\uC774\uB77C \uBE44\uC5B4 \uC788\uB294 \uBE0C\uB79C\uB4DC\uD0B7\uC740 \u300C\uAE30\uBCF8 \uB514\uC790\uC778 \uC2DC\uC2A4\uD15C\u300D \uC774\uB2E4.",
8572
- "properties": {
8573
- "name": {
8574
- "anyOf": [
8575
- {
8576
- "maxLength": 60,
8577
- "type": "string"
8578
- },
8579
- {
8580
- "type": "null"
8581
- }
8582
- ],
8583
- "default": null,
8584
- "title": "Name"
8585
- },
8586
- "accent_hex": {
8587
- "anyOf": [
8588
- {
8589
- "pattern": "^#[0-9A-Fa-f]{6}$",
8590
- "type": "string"
8591
- },
8592
- {
8593
- "type": "null"
8594
- }
8595
- ],
8596
- "default": null,
8597
- "title": "Accent Hex"
8598
- },
8599
- "secondary_hex": {
8600
- "anyOf": [
8601
- {
8602
- "pattern": "^#[0-9A-Fa-f]{6}$",
8603
- "type": "string"
8604
- },
8605
- {
8606
- "type": "null"
8607
- }
8608
- ],
8609
- "default": null,
8610
- "title": "Secondary Hex"
8611
- },
8612
- "tone": {
8613
- "anyOf": [
8614
- {
8615
- "enum": [
8616
- "light",
8617
- "dark"
8618
- ],
8619
- "type": "string"
8620
- },
8621
- {
8622
- "type": "null"
8623
- }
8624
- ],
8625
- "default": null,
8626
- "title": "Tone"
8627
- },
8628
- "heading_font": {
8629
- "anyOf": [
8630
- {
8631
- "type": "string"
8632
- },
8633
- {
8634
- "type": "null"
8635
- }
8636
- ],
8637
- "default": null,
8638
- "title": "Heading Font"
8639
- },
8640
- "body_font": {
8641
- "anyOf": [
8642
- {
8643
- "type": "string"
8644
- },
8645
- {
8646
- "type": "null"
8647
- }
8648
- ],
8649
- "default": null,
8650
- "title": "Body Font"
8651
- },
8652
- "logo_asset_id": {
8653
- "anyOf": [
8654
- {
8655
- "type": "string"
8656
- },
8657
- {
8658
- "type": "null"
8659
- }
8660
- ],
8661
- "default": null,
8662
- "title": "Logo Asset Id"
8663
- }
8664
- },
8665
- "title": "Brand",
8666
- "type": "object"
8667
- },
8668
- "ProjectDefaults": {
8669
- "properties": {
8670
- "voice_id": {
8671
- "anyOf": [
8672
- {
8673
- "type": "string"
8674
- },
8675
- {
8676
- "type": "null"
8677
- }
8678
- ],
8679
- "default": null,
8680
- "title": "Voice Id"
8681
- },
8682
- "character_id": {
8683
- "anyOf": [
8684
- {
8685
- "type": "string"
8686
- },
8687
- {
8688
- "type": "null"
8689
- }
8690
- ],
8691
- "default": null,
8692
- "title": "Character Id"
8693
- },
8694
- "subtitles": {
8695
- "default": true,
8696
- "title": "Subtitles",
8697
- "type": "boolean"
8698
- },
8699
- "brand": {
8700
- "$ref": "#/$defs/Brand"
8701
- },
8702
- "subtitle_style": {
8703
- "anyOf": [
8704
- {
8705
- "$ref": "#/$defs/SubtitleStyle"
8706
- },
8707
- {
8708
- "type": "null"
8709
- }
8710
- ],
8711
- "default": null
8712
- },
8713
- "framing": {
8714
- "anyOf": [
8715
- {
8716
- "enum": [
8717
- "letterbox",
8718
- "blur",
8719
- "crop"
8720
- ],
8721
- "type": "string"
8722
- },
8723
- {
8724
- "type": "null"
8725
- }
8726
- ],
8727
- "default": null,
8728
- "description": "\uBE44\uC728\uC774 \uB2E4\uB978 \uCEF7\uC744 \uC644\uC131\uBCF8 \uD504\uB808\uC784\uC5D0 \uB9DE\uCD94\uB294 \uBC29\uBC95 \u2014 letterbox(\uAC80\uC740 \uB760, \uAE30\uBCF8) \xB7 blur(\uD750\uB9B0 \uBC30\uACBD\uC73C\uB85C \uCC44\uC6C0) \xB7 crop(\uAC00\uC6B4\uB370\uB97C \uC798\uB77C \uAF49 \uCC44\uC6C0). \uBE44\uC728\uC774 \uAC19\uC740 \uCEF7\uC740 \uBB34\uC5C7\uC744 \uACE8\uB77C\uB3C4 \uADF8\uB300\uB85C\uB2E4. \u2605 \uC544\uBC14\uD0C0 PIP \uAC00 \uAD6C\uC6CC\uC9C4 \uCEF7\uC740 crop \uC774\uC5B4\uB3C4 blur \uB85C \uB9DE\uCD98\uB2E4(\uC790\uB974\uBA74 \uBAA8\uC11C\uB9AC\uC758 \uC544\uBC14\uD0C0\uAC00 \uC798\uB824 \uB098\uAC04\uB2E4). \uB2E4\uC74C\uC5D0 \uB9CC\uB4DC\uB294 \uC644\uC131\uBCF8\uBD80\uD130 \uC801\uC6A9\uB41C\uB2E4(0\uC6D0, \uCEF7\uC744 \uB2E4\uC2DC \uB9CC\uB4E4\uC9C0 \uC54A\uB294\uB2E4).",
8729
- "title": "Framing"
8730
- }
8731
- },
8732
- "title": "ProjectDefaults",
8733
- "type": "object"
8734
- },
8735
- "SubtitleStyle": {
8736
- "description": "\uC644\uC131\uBCF8\uC5D0 \uBC88\uC778\uD558\uB294 \uC790\uB9C9\uC758 \uBAA8\uC591 \u2014 \uD504\uB85C\uC81D\uD2B8\uB9C8\uB2E4 \uD558\uB098(`ProjectDefaults.subtitle_style`).\n\n\u2605\u2605 **\uAE30\uBCF8\uAC12\uC774 \uACE7 \uC9C0\uAE08\uC758 \uBAA8\uC591**\uC774\uB2E4(\uD558\uB2E8\xB7\uBCF4\uD1B5 \uD06C\uAE30\xB7\uD770 \uAE00\uC790\xB7\uC587\uC740 \uAC80\uC740 \uC678\uACFD\uC120\xB7\uBC15\uC2A4 \uC5C6\uC74C) \u2014 \uC2A4\uD0C0\uC77C\uC744 \uACE0\uB974\uC9C0 \uC54A\uC740\n \uD504\uB85C\uC81D\uD2B8\uC640 \uAE30\uBCF8\uAC12\uB9CC \uAC00\uC9C4 \uC2A4\uD0C0\uC77C\uC740 **\uAC19\uC740 \uC601\uC0C1**\uC744 \uB0B8\uB2E4. \uAC12\uC744 \uBC14\uAFB8\uBA74 **\uC644\uC131\uBCF8\uB9CC \uB2E4\uC2DC \uB9CC\uB4E4\uBA74 \uB41C\uB2E4**(\uCEF7\uC740 \uADF8\uB300\uB85C \u2014 \uCEF7\n \uC601\uC0C1\uC5D0\uB294 \uC790\uB9C9\uC774 \uAD6C\uC6CC\uC9C0\uC9C0 \uC54A\uB294\uB2E4). \uADF8\uB798\uC11C \uC774 \uBAA8\uB378\uC740 \uCEF7 spec \uC774 \uC544\uB2C8\uB77C \uD504\uB85C\uC81D\uD2B8\uC5D0 \uC788\uB2E4.\n\u2605 \uD3F0\uD2B8\uB294 \uACE0\uB974\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uBC88\uC778(libass)\uC740 \uC11C\uBC84\uC5D0 \uC124\uCE58\uB41C \uD3F0\uD2B8(Noto Sans CJK KR)\uB9CC \uC4F8 \uC218 \uC788\uB2E4. \uBE0C\uB79C\uB4DC \uD3F0\uD2B8\uB294 \uBAA8\uC158\uADF8\uB798\uD53D \uC804\uC6A9.\n\u2605 \uD55C \uCEF7\uC5D0 \uC790\uB9C9\uC774 \uB458(\uC544\uBC14\uD0C0 \uD574\uC124 + \uC6D0\uBCF8 \uB9D0\uC18C\uB9AC)\uC774\uBA74 \uB458\uC9F8 \uC904\uC740 \uC774 \uC2A4\uD0C0\uC77C\uC5D0\uC11C **\uD55C \uB2E8\uACC4 \uC791\uACE0 \uBC18\uD22C\uBA85\uD558\uAC8C** \uC8FC \uC790\uB9C9 \uC606\n (\uD558\uB2E8\uC774\uBA74 \uC704, \uC0C1\uB2E8\uC774\uBA74 \uC544\uB798)\uC5D0 \uBD99\uB294\uB2E4.",
8737
- "properties": {
8738
- "position": {
8739
- "default": "bottom",
8512
+ "align": {
8513
+ "default": "center",
8740
8514
  "enum": [
8741
- "bottom",
8742
- "middle",
8743
- "top"
8515
+ "left",
8516
+ "center",
8517
+ "right"
8744
8518
  ],
8745
- "title": "Position",
8519
+ "title": "Align",
8520
+ "type": "string"
8521
+ },
8522
+ "offset_pct": {
8523
+ "anyOf": [
8524
+ {
8525
+ "maximum": 40,
8526
+ "minimum": 0,
8527
+ "type": "number"
8528
+ },
8529
+ {
8530
+ "type": "null"
8531
+ }
8532
+ ],
8533
+ "default": null,
8534
+ "title": "Offset Pct"
8535
+ },
8536
+ "size": {
8537
+ "default": "medium",
8538
+ "enum": [
8539
+ "small",
8540
+ "medium",
8541
+ "large",
8542
+ "xlarge"
8543
+ ],
8544
+ "title": "Size",
8545
+ "type": "string"
8546
+ },
8547
+ "color": {
8548
+ "default": "#FFFFFF",
8549
+ "pattern": "^#[0-9A-Fa-f]{6}$",
8550
+ "title": "Color",
8551
+ "type": "string"
8552
+ },
8553
+ "outline": {
8554
+ "default": "thin",
8555
+ "enum": [
8556
+ "none",
8557
+ "thin",
8558
+ "thick"
8559
+ ],
8560
+ "title": "Outline",
8561
+ "type": "string"
8562
+ },
8563
+ "outline_color": {
8564
+ "default": "#000000",
8565
+ "pattern": "^#[0-9A-Fa-f]{6}$",
8566
+ "title": "Outline Color",
8567
+ "type": "string"
8568
+ },
8569
+ "bold": {
8570
+ "default": false,
8571
+ "title": "Bold",
8572
+ "type": "boolean"
8573
+ },
8574
+ "box": {
8575
+ "default": false,
8576
+ "title": "Box",
8577
+ "type": "boolean"
8578
+ },
8579
+ "box_color": {
8580
+ "default": "#000000",
8581
+ "pattern": "^#[0-9A-Fa-f]{6}$",
8582
+ "title": "Box Color",
8583
+ "type": "string"
8584
+ },
8585
+ "box_opacity": {
8586
+ "default": 60,
8587
+ "maximum": 100,
8588
+ "minimum": 0,
8589
+ "title": "Box Opacity",
8590
+ "type": "integer"
8591
+ }
8592
+ },
8593
+ "title": "SubtitleStyle",
8594
+ "type": "object"
8595
+ }
8596
+ }
8597
+ },
8598
+ "outputSchema": {
8599
+ "$defs": {
8600
+ "Brand": {
8601
+ "description": "\uBE0C\uB79C\uB4DC\uD0B7 \u2014 \uC6CC\uD06C\uC2A4\uD398\uC774\uC2A4 \uAE30\uBCF8\uAC12(`BrandKitView.brand`)\uC774\uC790 \uD504\uB85C\uC81D\uD2B8 \uB36E\uC5B4\uC4F0\uAE30(`ProjectDefaults.brand`)\uC758 \uBAA8\uC591.\n\n\u2605 \uB450 \uC790\uB9AC\uAC00 **\uAC19\uC740 \uBAA8\uB378**\uC774\uB2E4 \u2014 \uD569\uCE60 \uB54C(\uD504\uB85C\uC81D\uD2B8\uC758 None \uC774 \uC544\uB2CC \uD544\uB4DC\uAC00 \uC6CC\uD06C\uC2A4\uD398\uC774\uC2A4 \uAC12\uC744 \uB36E\uB294\uB2E4) \uD544\uB4DC \uC9D1\uD569\uC774\n\uAC08\uB9AC\uBA74 \uD55C\uCABD\uC5D0\uB9CC \uC788\uB294 \uAC12\uC774 \uC870\uC6A9\uD788 \uC0AC\uB77C\uC9C4\uB2E4. \uC804\uBD80 \uC120\uD0DD\uC774\uB77C \uBE44\uC5B4 \uC788\uB294 \uBE0C\uB79C\uB4DC\uD0B7\uC740 \u300C\uAE30\uBCF8 \uB514\uC790\uC778 \uC2DC\uC2A4\uD15C\u300D \uC774\uB2E4.",
8602
+ "properties": {
8603
+ "name": {
8604
+ "anyOf": [
8605
+ {
8606
+ "maxLength": 60,
8607
+ "type": "string"
8608
+ },
8609
+ {
8610
+ "type": "null"
8611
+ }
8612
+ ],
8613
+ "default": null,
8614
+ "title": "Name"
8615
+ },
8616
+ "accent_hex": {
8617
+ "anyOf": [
8618
+ {
8619
+ "pattern": "^#[0-9A-Fa-f]{6}$",
8620
+ "type": "string"
8621
+ },
8622
+ {
8623
+ "type": "null"
8624
+ }
8625
+ ],
8626
+ "default": null,
8627
+ "title": "Accent Hex"
8628
+ },
8629
+ "secondary_hex": {
8630
+ "anyOf": [
8631
+ {
8632
+ "pattern": "^#[0-9A-Fa-f]{6}$",
8633
+ "type": "string"
8634
+ },
8635
+ {
8636
+ "type": "null"
8637
+ }
8638
+ ],
8639
+ "default": null,
8640
+ "title": "Secondary Hex"
8641
+ },
8642
+ "tone": {
8643
+ "anyOf": [
8644
+ {
8645
+ "enum": [
8646
+ "light",
8647
+ "dark"
8648
+ ],
8649
+ "type": "string"
8650
+ },
8651
+ {
8652
+ "type": "null"
8653
+ }
8654
+ ],
8655
+ "default": null,
8656
+ "title": "Tone"
8657
+ },
8658
+ "heading_font": {
8659
+ "anyOf": [
8660
+ {
8661
+ "type": "string"
8662
+ },
8663
+ {
8664
+ "type": "null"
8665
+ }
8666
+ ],
8667
+ "default": null,
8668
+ "title": "Heading Font"
8669
+ },
8670
+ "body_font": {
8671
+ "anyOf": [
8672
+ {
8673
+ "type": "string"
8674
+ },
8675
+ {
8676
+ "type": "null"
8677
+ }
8678
+ ],
8679
+ "default": null,
8680
+ "title": "Body Font"
8681
+ },
8682
+ "logo_asset_id": {
8683
+ "anyOf": [
8684
+ {
8685
+ "type": "string"
8686
+ },
8687
+ {
8688
+ "type": "null"
8689
+ }
8690
+ ],
8691
+ "default": null,
8692
+ "title": "Logo Asset Id"
8693
+ }
8694
+ },
8695
+ "title": "Brand",
8696
+ "type": "object"
8697
+ },
8698
+ "ProjectDefaults": {
8699
+ "properties": {
8700
+ "voice_id": {
8701
+ "anyOf": [
8702
+ {
8703
+ "type": "string"
8704
+ },
8705
+ {
8706
+ "type": "null"
8707
+ }
8708
+ ],
8709
+ "default": null,
8710
+ "title": "Voice Id"
8711
+ },
8712
+ "character_id": {
8713
+ "anyOf": [
8714
+ {
8715
+ "type": "string"
8716
+ },
8717
+ {
8718
+ "type": "null"
8719
+ }
8720
+ ],
8721
+ "default": null,
8722
+ "title": "Character Id"
8723
+ },
8724
+ "subtitles": {
8725
+ "default": true,
8726
+ "title": "Subtitles",
8727
+ "type": "boolean"
8728
+ },
8729
+ "brand": {
8730
+ "$ref": "#/$defs/Brand"
8731
+ },
8732
+ "subtitle_style": {
8733
+ "anyOf": [
8734
+ {
8735
+ "$ref": "#/$defs/SubtitleStyle"
8736
+ },
8737
+ {
8738
+ "type": "null"
8739
+ }
8740
+ ],
8741
+ "default": null
8742
+ },
8743
+ "framing": {
8744
+ "anyOf": [
8745
+ {
8746
+ "enum": [
8747
+ "letterbox",
8748
+ "blur",
8749
+ "crop"
8750
+ ],
8751
+ "type": "string"
8752
+ },
8753
+ {
8754
+ "type": "null"
8755
+ }
8756
+ ],
8757
+ "default": null,
8758
+ "description": "\uBE44\uC728\uC774 \uB2E4\uB978 \uCEF7\uC744 \uC644\uC131\uBCF8 \uD504\uB808\uC784\uC5D0 \uB9DE\uCD94\uB294 \uBC29\uBC95 \u2014 letterbox(\uAC80\uC740 \uB760, \uAE30\uBCF8) \xB7 blur(\uD750\uB9B0 \uBC30\uACBD\uC73C\uB85C \uCC44\uC6C0) \xB7 crop(\uAC00\uC6B4\uB370\uB97C \uC798\uB77C \uAF49 \uCC44\uC6C0). \uBE44\uC728\uC774 \uAC19\uC740 \uCEF7\uC740 \uBB34\uC5C7\uC744 \uACE8\uB77C\uB3C4 \uADF8\uB300\uB85C\uB2E4. \u2605 \uC544\uBC14\uD0C0 PIP \uAC00 \uAD6C\uC6CC\uC9C4 \uCEF7\uC740 crop \uC774\uC5B4\uB3C4 blur \uB85C \uB9DE\uCD98\uB2E4(\uC790\uB974\uBA74 \uBAA8\uC11C\uB9AC\uC758 \uC544\uBC14\uD0C0\uAC00 \uC798\uB824 \uB098\uAC04\uB2E4). \uB2E4\uC74C\uC5D0 \uB9CC\uB4DC\uB294 \uC644\uC131\uBCF8\uBD80\uD130 \uC801\uC6A9\uB41C\uB2E4(0\uC6D0, \uCEF7\uC744 \uB2E4\uC2DC \uB9CC\uB4E4\uC9C0 \uC54A\uB294\uB2E4).",
8759
+ "title": "Framing"
8760
+ }
8761
+ },
8762
+ "title": "ProjectDefaults",
8763
+ "type": "object"
8764
+ },
8765
+ "SubtitleStyle": {
8766
+ "description": "\uC644\uC131\uBCF8\uC5D0 \uBC88\uC778\uD558\uB294 \uC790\uB9C9\uC758 \uBAA8\uC591 \u2014 \uD504\uB85C\uC81D\uD2B8\uB9C8\uB2E4 \uD558\uB098(`ProjectDefaults.subtitle_style`).\n\n\u2605\u2605 **\uAE30\uBCF8\uAC12\uC774 \uACE7 \uC9C0\uAE08\uC758 \uBAA8\uC591**\uC774\uB2E4(\uD558\uB2E8\xB7\uBCF4\uD1B5 \uD06C\uAE30\xB7\uD770 \uAE00\uC790\xB7\uC587\uC740 \uAC80\uC740 \uC678\uACFD\uC120\xB7\uBC15\uC2A4 \uC5C6\uC74C) \u2014 \uC2A4\uD0C0\uC77C\uC744 \uACE0\uB974\uC9C0 \uC54A\uC740\n \uD504\uB85C\uC81D\uD2B8\uC640 \uAE30\uBCF8\uAC12\uB9CC \uAC00\uC9C4 \uC2A4\uD0C0\uC77C\uC740 **\uAC19\uC740 \uC601\uC0C1**\uC744 \uB0B8\uB2E4. \uAC12\uC744 \uBC14\uAFB8\uBA74 **\uC644\uC131\uBCF8\uB9CC \uB2E4\uC2DC \uB9CC\uB4E4\uBA74 \uB41C\uB2E4**(\uCEF7\uC740 \uADF8\uB300\uB85C \u2014 \uCEF7\n \uC601\uC0C1\uC5D0\uB294 \uC790\uB9C9\uC774 \uAD6C\uC6CC\uC9C0\uC9C0 \uC54A\uB294\uB2E4). \uADF8\uB798\uC11C \uC774 \uBAA8\uB378\uC740 \uCEF7 spec \uC774 \uC544\uB2C8\uB77C \uD504\uB85C\uC81D\uD2B8\uC5D0 \uC788\uB2E4.\n\u2605 \uD3F0\uD2B8\uB294 \uACE0\uB974\uC9C0 \uC54A\uB294\uB2E4 \u2014 \uBC88\uC778(libass)\uC740 \uC11C\uBC84\uC5D0 \uC124\uCE58\uB41C \uD3F0\uD2B8(Noto Sans CJK KR)\uB9CC \uC4F8 \uC218 \uC788\uB2E4. \uBE0C\uB79C\uB4DC \uD3F0\uD2B8\uB294 \uBAA8\uC158\uADF8\uB798\uD53D \uC804\uC6A9.\n\u2605 \uD55C \uCEF7\uC5D0 \uC790\uB9C9\uC774 \uB458(\uC544\uBC14\uD0C0 \uD574\uC124 + \uC6D0\uBCF8 \uB9D0\uC18C\uB9AC)\uC774\uBA74 \uB458\uC9F8 \uC904\uC740 \uC774 \uC2A4\uD0C0\uC77C\uC5D0\uC11C **\uD55C \uB2E8\uACC4 \uC791\uACE0 \uBC18\uD22C\uBA85\uD558\uAC8C** \uC8FC \uC790\uB9C9 \uC606\n (\uD558\uB2E8\uC774\uBA74 \uC704, \uC0C1\uB2E8\uC774\uBA74 \uC544\uB798)\uC5D0 \uBD99\uB294\uB2E4.",
8767
+ "properties": {
8768
+ "position": {
8769
+ "default": "bottom",
8770
+ "enum": [
8771
+ "bottom",
8772
+ "middle",
8773
+ "top"
8774
+ ],
8775
+ "title": "Position",
8776
+ "type": "string"
8777
+ },
8778
+ "align": {
8779
+ "default": "center",
8780
+ "enum": [
8781
+ "left",
8782
+ "center",
8783
+ "right"
8784
+ ],
8785
+ "title": "Align",
8746
8786
  "type": "string"
8747
8787
  },
8748
8788
  "offset_pct": {
@@ -9196,6 +9236,16 @@ var GENERATED_TOOLS = [
9196
9236
  "title": "Position",
9197
9237
  "type": "string"
9198
9238
  },
9239
+ "align": {
9240
+ "default": "center",
9241
+ "enum": [
9242
+ "left",
9243
+ "center",
9244
+ "right"
9245
+ ],
9246
+ "title": "Align",
9247
+ "type": "string"
9248
+ },
9199
9249
  "offset_pct": {
9200
9250
  "anyOf": [
9201
9251
  {
@@ -9452,6 +9502,16 @@ var GENERATED_TOOLS = [
9452
9502
  "title": "Position",
9453
9503
  "type": "string"
9454
9504
  },
9505
+ "align": {
9506
+ "default": "center",
9507
+ "enum": [
9508
+ "left",
9509
+ "center",
9510
+ "right"
9511
+ ],
9512
+ "title": "Align",
9513
+ "type": "string"
9514
+ },
9455
9515
  "offset_pct": {
9456
9516
  "anyOf": [
9457
9517
  {
@@ -10281,6 +10341,16 @@ var GENERATED_TOOLS = [
10281
10341
  "title": "Position",
10282
10342
  "type": "string"
10283
10343
  },
10344
+ "align": {
10345
+ "default": "center",
10346
+ "enum": [
10347
+ "left",
10348
+ "center",
10349
+ "right"
10350
+ ],
10351
+ "title": "Align",
10352
+ "type": "string"
10353
+ },
10284
10354
  "offset_pct": {
10285
10355
  "anyOf": [
10286
10356
  {
@@ -14348,6 +14418,74 @@ var GENERATED_TOOLS = [
14348
14418
  "title": "FromVersionImageRef",
14349
14419
  "type": "object"
14350
14420
  },
14421
+ "HookCandidate": {
14422
+ "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).",
14423
+ "properties": {
14424
+ "start_s": {
14425
+ "minimum": 0,
14426
+ "title": "Start S",
14427
+ "type": "number"
14428
+ },
14429
+ "end_s": {
14430
+ "exclusiveMinimum": 0,
14431
+ "title": "End S",
14432
+ "type": "number"
14433
+ },
14434
+ "title": {
14435
+ "default": "",
14436
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
14437
+ "title": "Title",
14438
+ "type": "string"
14439
+ },
14440
+ "score": {
14441
+ "default": 0,
14442
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
14443
+ "maximum": 100,
14444
+ "minimum": 0,
14445
+ "title": "Score",
14446
+ "type": "integer"
14447
+ },
14448
+ "reasoning": {
14449
+ "default": "",
14450
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
14451
+ "title": "Reasoning",
14452
+ "type": "string"
14453
+ }
14454
+ },
14455
+ "required": [
14456
+ "start_s",
14457
+ "end_s"
14458
+ ],
14459
+ "title": "HookCandidate",
14460
+ "type": "object"
14461
+ },
14462
+ "HookCandidates": {
14463
+ "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.",
14464
+ "properties": {
14465
+ "url": {
14466
+ "title": "Url",
14467
+ "type": "string"
14468
+ },
14469
+ "found_at": {
14470
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
14471
+ "title": "Found At",
14472
+ "type": "string"
14473
+ },
14474
+ "items": {
14475
+ "items": {
14476
+ "$ref": "#/$defs/HookCandidate"
14477
+ },
14478
+ "title": "Items",
14479
+ "type": "array"
14480
+ }
14481
+ },
14482
+ "required": [
14483
+ "url",
14484
+ "found_at"
14485
+ ],
14486
+ "title": "HookCandidates",
14487
+ "type": "object"
14488
+ },
14351
14489
  "JobError": {
14352
14490
  "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
14491
  "properties": {
@@ -15122,6 +15260,17 @@ var GENERATED_TOOLS = [
15122
15260
  "title": "Images",
15123
15261
  "type": "array"
15124
15262
  },
15263
+ "hook_candidates": {
15264
+ "anyOf": [
15265
+ {
15266
+ "$ref": "#/$defs/HookCandidates"
15267
+ },
15268
+ {
15269
+ "type": "null"
15270
+ }
15271
+ ],
15272
+ "default": null
15273
+ },
15125
15274
  "versions": {
15126
15275
  "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
15127
15276
  "items": {
@@ -16525,6 +16674,74 @@ var GENERATED_TOOLS = [
16525
16674
  "title": "FromVersionImageRef",
16526
16675
  "type": "object"
16527
16676
  },
16677
+ "HookCandidate": {
16678
+ "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).",
16679
+ "properties": {
16680
+ "start_s": {
16681
+ "minimum": 0,
16682
+ "title": "Start S",
16683
+ "type": "number"
16684
+ },
16685
+ "end_s": {
16686
+ "exclusiveMinimum": 0,
16687
+ "title": "End S",
16688
+ "type": "number"
16689
+ },
16690
+ "title": {
16691
+ "default": "",
16692
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
16693
+ "title": "Title",
16694
+ "type": "string"
16695
+ },
16696
+ "score": {
16697
+ "default": 0,
16698
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
16699
+ "maximum": 100,
16700
+ "minimum": 0,
16701
+ "title": "Score",
16702
+ "type": "integer"
16703
+ },
16704
+ "reasoning": {
16705
+ "default": "",
16706
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
16707
+ "title": "Reasoning",
16708
+ "type": "string"
16709
+ }
16710
+ },
16711
+ "required": [
16712
+ "start_s",
16713
+ "end_s"
16714
+ ],
16715
+ "title": "HookCandidate",
16716
+ "type": "object"
16717
+ },
16718
+ "HookCandidates": {
16719
+ "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.",
16720
+ "properties": {
16721
+ "url": {
16722
+ "title": "Url",
16723
+ "type": "string"
16724
+ },
16725
+ "found_at": {
16726
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
16727
+ "title": "Found At",
16728
+ "type": "string"
16729
+ },
16730
+ "items": {
16731
+ "items": {
16732
+ "$ref": "#/$defs/HookCandidate"
16733
+ },
16734
+ "title": "Items",
16735
+ "type": "array"
16736
+ }
16737
+ },
16738
+ "required": [
16739
+ "url",
16740
+ "found_at"
16741
+ ],
16742
+ "title": "HookCandidates",
16743
+ "type": "object"
16744
+ },
16528
16745
  "JobError": {
16529
16746
  "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
16747
  "properties": {
@@ -17299,6 +17516,17 @@ var GENERATED_TOOLS = [
17299
17516
  "title": "Images",
17300
17517
  "type": "array"
17301
17518
  },
17519
+ "hook_candidates": {
17520
+ "anyOf": [
17521
+ {
17522
+ "$ref": "#/$defs/HookCandidates"
17523
+ },
17524
+ {
17525
+ "type": "null"
17526
+ }
17527
+ ],
17528
+ "default": null
17529
+ },
17302
17530
  "versions": {
17303
17531
  "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
17304
17532
  "items": {
@@ -18231,6 +18459,74 @@ var GENERATED_TOOLS = [
18231
18459
  "title": "FromVersionImageRef",
18232
18460
  "type": "object"
18233
18461
  },
18462
+ "HookCandidate": {
18463
+ "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).",
18464
+ "properties": {
18465
+ "start_s": {
18466
+ "minimum": 0,
18467
+ "title": "Start S",
18468
+ "type": "number"
18469
+ },
18470
+ "end_s": {
18471
+ "exclusiveMinimum": 0,
18472
+ "title": "End S",
18473
+ "type": "number"
18474
+ },
18475
+ "title": {
18476
+ "default": "",
18477
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
18478
+ "title": "Title",
18479
+ "type": "string"
18480
+ },
18481
+ "score": {
18482
+ "default": 0,
18483
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
18484
+ "maximum": 100,
18485
+ "minimum": 0,
18486
+ "title": "Score",
18487
+ "type": "integer"
18488
+ },
18489
+ "reasoning": {
18490
+ "default": "",
18491
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
18492
+ "title": "Reasoning",
18493
+ "type": "string"
18494
+ }
18495
+ },
18496
+ "required": [
18497
+ "start_s",
18498
+ "end_s"
18499
+ ],
18500
+ "title": "HookCandidate",
18501
+ "type": "object"
18502
+ },
18503
+ "HookCandidates": {
18504
+ "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.",
18505
+ "properties": {
18506
+ "url": {
18507
+ "title": "Url",
18508
+ "type": "string"
18509
+ },
18510
+ "found_at": {
18511
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
18512
+ "title": "Found At",
18513
+ "type": "string"
18514
+ },
18515
+ "items": {
18516
+ "items": {
18517
+ "$ref": "#/$defs/HookCandidate"
18518
+ },
18519
+ "title": "Items",
18520
+ "type": "array"
18521
+ }
18522
+ },
18523
+ "required": [
18524
+ "url",
18525
+ "found_at"
18526
+ ],
18527
+ "title": "HookCandidates",
18528
+ "type": "object"
18529
+ },
18234
18530
  "JobError": {
18235
18531
  "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
18532
  "properties": {
@@ -19005,6 +19301,17 @@ var GENERATED_TOOLS = [
19005
19301
  "title": "Images",
19006
19302
  "type": "array"
19007
19303
  },
19304
+ "hook_candidates": {
19305
+ "anyOf": [
19306
+ {
19307
+ "$ref": "#/$defs/HookCandidates"
19308
+ },
19309
+ {
19310
+ "type": "null"
19311
+ }
19312
+ ],
19313
+ "default": null
19314
+ },
19008
19315
  "versions": {
19009
19316
  "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
19010
19317
  "items": {
@@ -23069,6 +23376,17 @@ var GENERATED_TOOLS = [
23069
23376
  "title": "Images",
23070
23377
  "type": "array"
23071
23378
  },
23379
+ "hook_candidates": {
23380
+ "anyOf": [
23381
+ {
23382
+ "$ref": "#/$defs/HookCandidates"
23383
+ },
23384
+ {
23385
+ "type": "null"
23386
+ }
23387
+ ],
23388
+ "default": null
23389
+ },
23072
23390
  "versions": {
23073
23391
  "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
23074
23392
  "items": {
@@ -23415,6 +23733,74 @@ var GENERATED_TOOLS = [
23415
23733
  "title": "FromVersionImageRef",
23416
23734
  "type": "object"
23417
23735
  },
23736
+ "HookCandidate": {
23737
+ "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).",
23738
+ "properties": {
23739
+ "start_s": {
23740
+ "minimum": 0,
23741
+ "title": "Start S",
23742
+ "type": "number"
23743
+ },
23744
+ "end_s": {
23745
+ "exclusiveMinimum": 0,
23746
+ "title": "End S",
23747
+ "type": "number"
23748
+ },
23749
+ "title": {
23750
+ "default": "",
23751
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
23752
+ "title": "Title",
23753
+ "type": "string"
23754
+ },
23755
+ "score": {
23756
+ "default": 0,
23757
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
23758
+ "maximum": 100,
23759
+ "minimum": 0,
23760
+ "title": "Score",
23761
+ "type": "integer"
23762
+ },
23763
+ "reasoning": {
23764
+ "default": "",
23765
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
23766
+ "title": "Reasoning",
23767
+ "type": "string"
23768
+ }
23769
+ },
23770
+ "required": [
23771
+ "start_s",
23772
+ "end_s"
23773
+ ],
23774
+ "title": "HookCandidate",
23775
+ "type": "object"
23776
+ },
23777
+ "HookCandidates": {
23778
+ "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.",
23779
+ "properties": {
23780
+ "url": {
23781
+ "title": "Url",
23782
+ "type": "string"
23783
+ },
23784
+ "found_at": {
23785
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
23786
+ "title": "Found At",
23787
+ "type": "string"
23788
+ },
23789
+ "items": {
23790
+ "items": {
23791
+ "$ref": "#/$defs/HookCandidate"
23792
+ },
23793
+ "title": "Items",
23794
+ "type": "array"
23795
+ }
23796
+ },
23797
+ "required": [
23798
+ "url",
23799
+ "found_at"
23800
+ ],
23801
+ "title": "HookCandidates",
23802
+ "type": "object"
23803
+ },
23418
23804
  "JobError": {
23419
23805
  "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
23806
  "properties": {
@@ -25067,6 +25453,17 @@ var GENERATED_TOOLS = [
25067
25453
  "title": "Images",
25068
25454
  "type": "array"
25069
25455
  },
25456
+ "hook_candidates": {
25457
+ "anyOf": [
25458
+ {
25459
+ "$ref": "#/$defs/HookCandidates"
25460
+ },
25461
+ {
25462
+ "type": "null"
25463
+ }
25464
+ ],
25465
+ "default": null
25466
+ },
25070
25467
  "versions": {
25071
25468
  "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
25072
25469
  "items": {
@@ -25399,6 +25796,74 @@ var GENERATED_TOOLS = [
25399
25796
  "title": "FromVersionImageRef",
25400
25797
  "type": "object"
25401
25798
  },
25799
+ "HookCandidate": {
25800
+ "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).",
25801
+ "properties": {
25802
+ "start_s": {
25803
+ "minimum": 0,
25804
+ "title": "Start S",
25805
+ "type": "number"
25806
+ },
25807
+ "end_s": {
25808
+ "exclusiveMinimum": 0,
25809
+ "title": "End S",
25810
+ "type": "number"
25811
+ },
25812
+ "title": {
25813
+ "default": "",
25814
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
25815
+ "title": "Title",
25816
+ "type": "string"
25817
+ },
25818
+ "score": {
25819
+ "default": 0,
25820
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
25821
+ "maximum": 100,
25822
+ "minimum": 0,
25823
+ "title": "Score",
25824
+ "type": "integer"
25825
+ },
25826
+ "reasoning": {
25827
+ "default": "",
25828
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
25829
+ "title": "Reasoning",
25830
+ "type": "string"
25831
+ }
25832
+ },
25833
+ "required": [
25834
+ "start_s",
25835
+ "end_s"
25836
+ ],
25837
+ "title": "HookCandidate",
25838
+ "type": "object"
25839
+ },
25840
+ "HookCandidates": {
25841
+ "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.",
25842
+ "properties": {
25843
+ "url": {
25844
+ "title": "Url",
25845
+ "type": "string"
25846
+ },
25847
+ "found_at": {
25848
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
25849
+ "title": "Found At",
25850
+ "type": "string"
25851
+ },
25852
+ "items": {
25853
+ "items": {
25854
+ "$ref": "#/$defs/HookCandidate"
25855
+ },
25856
+ "title": "Items",
25857
+ "type": "array"
25858
+ }
25859
+ },
25860
+ "required": [
25861
+ "url",
25862
+ "found_at"
25863
+ ],
25864
+ "title": "HookCandidates",
25865
+ "type": "object"
25866
+ },
25402
25867
  "JobError": {
25403
25868
  "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
25869
  "properties": {
@@ -27768,6 +28233,74 @@ var GENERATED_TOOLS = [
27768
28233
  "title": "FromVersionImageRef",
27769
28234
  "type": "object"
27770
28235
  },
28236
+ "HookCandidate": {
28237
+ "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).",
28238
+ "properties": {
28239
+ "start_s": {
28240
+ "minimum": 0,
28241
+ "title": "Start S",
28242
+ "type": "number"
28243
+ },
28244
+ "end_s": {
28245
+ "exclusiveMinimum": 0,
28246
+ "title": "End S",
28247
+ "type": "number"
28248
+ },
28249
+ "title": {
28250
+ "default": "",
28251
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
28252
+ "title": "Title",
28253
+ "type": "string"
28254
+ },
28255
+ "score": {
28256
+ "default": 0,
28257
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
28258
+ "maximum": 100,
28259
+ "minimum": 0,
28260
+ "title": "Score",
28261
+ "type": "integer"
28262
+ },
28263
+ "reasoning": {
28264
+ "default": "",
28265
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
28266
+ "title": "Reasoning",
28267
+ "type": "string"
28268
+ }
28269
+ },
28270
+ "required": [
28271
+ "start_s",
28272
+ "end_s"
28273
+ ],
28274
+ "title": "HookCandidate",
28275
+ "type": "object"
28276
+ },
28277
+ "HookCandidates": {
28278
+ "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.",
28279
+ "properties": {
28280
+ "url": {
28281
+ "title": "Url",
28282
+ "type": "string"
28283
+ },
28284
+ "found_at": {
28285
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
28286
+ "title": "Found At",
28287
+ "type": "string"
28288
+ },
28289
+ "items": {
28290
+ "items": {
28291
+ "$ref": "#/$defs/HookCandidate"
28292
+ },
28293
+ "title": "Items",
28294
+ "type": "array"
28295
+ }
28296
+ },
28297
+ "required": [
28298
+ "url",
28299
+ "found_at"
28300
+ ],
28301
+ "title": "HookCandidates",
28302
+ "type": "object"
28303
+ },
27771
28304
  "JobError": {
27772
28305
  "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
28306
  "properties": {
@@ -28542,6 +29075,17 @@ var GENERATED_TOOLS = [
28542
29075
  "title": "Images",
28543
29076
  "type": "array"
28544
29077
  },
29078
+ "hook_candidates": {
29079
+ "anyOf": [
29080
+ {
29081
+ "$ref": "#/$defs/HookCandidates"
29082
+ },
29083
+ {
29084
+ "type": "null"
29085
+ }
29086
+ ],
29087
+ "default": null
29088
+ },
28545
29089
  "versions": {
28546
29090
  "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
28547
29091
  "items": {
@@ -29461,6 +30005,74 @@ var GENERATED_TOOLS = [
29461
30005
  "title": "FromVersionImageRef",
29462
30006
  "type": "object"
29463
30007
  },
30008
+ "HookCandidate": {
30009
+ "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).",
30010
+ "properties": {
30011
+ "start_s": {
30012
+ "minimum": 0,
30013
+ "title": "Start S",
30014
+ "type": "number"
30015
+ },
30016
+ "end_s": {
30017
+ "exclusiveMinimum": 0,
30018
+ "title": "End S",
30019
+ "type": "number"
30020
+ },
30021
+ "title": {
30022
+ "default": "",
30023
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
30024
+ "title": "Title",
30025
+ "type": "string"
30026
+ },
30027
+ "score": {
30028
+ "default": 0,
30029
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
30030
+ "maximum": 100,
30031
+ "minimum": 0,
30032
+ "title": "Score",
30033
+ "type": "integer"
30034
+ },
30035
+ "reasoning": {
30036
+ "default": "",
30037
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
30038
+ "title": "Reasoning",
30039
+ "type": "string"
30040
+ }
30041
+ },
30042
+ "required": [
30043
+ "start_s",
30044
+ "end_s"
30045
+ ],
30046
+ "title": "HookCandidate",
30047
+ "type": "object"
30048
+ },
30049
+ "HookCandidates": {
30050
+ "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.",
30051
+ "properties": {
30052
+ "url": {
30053
+ "title": "Url",
30054
+ "type": "string"
30055
+ },
30056
+ "found_at": {
30057
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
30058
+ "title": "Found At",
30059
+ "type": "string"
30060
+ },
30061
+ "items": {
30062
+ "items": {
30063
+ "$ref": "#/$defs/HookCandidate"
30064
+ },
30065
+ "title": "Items",
30066
+ "type": "array"
30067
+ }
30068
+ },
30069
+ "required": [
30070
+ "url",
30071
+ "found_at"
30072
+ ],
30073
+ "title": "HookCandidates",
30074
+ "type": "object"
30075
+ },
29464
30076
  "JobError": {
29465
30077
  "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
30078
  "properties": {
@@ -30235,6 +30847,17 @@ var GENERATED_TOOLS = [
30235
30847
  "title": "Images",
30236
30848
  "type": "array"
30237
30849
  },
30850
+ "hook_candidates": {
30851
+ "anyOf": [
30852
+ {
30853
+ "$ref": "#/$defs/HookCandidates"
30854
+ },
30855
+ {
30856
+ "type": "null"
30857
+ }
30858
+ ],
30859
+ "default": null
30860
+ },
30238
30861
  "versions": {
30239
30862
  "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
30240
30863
  "items": {
@@ -32066,6 +32689,74 @@ var GENERATED_TOOLS = [
32066
32689
  "title": "FromVersionImageRef",
32067
32690
  "type": "object"
32068
32691
  },
32692
+ "HookCandidate": {
32693
+ "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).",
32694
+ "properties": {
32695
+ "start_s": {
32696
+ "minimum": 0,
32697
+ "title": "Start S",
32698
+ "type": "number"
32699
+ },
32700
+ "end_s": {
32701
+ "exclusiveMinimum": 0,
32702
+ "title": "End S",
32703
+ "type": "number"
32704
+ },
32705
+ "title": {
32706
+ "default": "",
32707
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
32708
+ "title": "Title",
32709
+ "type": "string"
32710
+ },
32711
+ "score": {
32712
+ "default": 0,
32713
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
32714
+ "maximum": 100,
32715
+ "minimum": 0,
32716
+ "title": "Score",
32717
+ "type": "integer"
32718
+ },
32719
+ "reasoning": {
32720
+ "default": "",
32721
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
32722
+ "title": "Reasoning",
32723
+ "type": "string"
32724
+ }
32725
+ },
32726
+ "required": [
32727
+ "start_s",
32728
+ "end_s"
32729
+ ],
32730
+ "title": "HookCandidate",
32731
+ "type": "object"
32732
+ },
32733
+ "HookCandidates": {
32734
+ "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.",
32735
+ "properties": {
32736
+ "url": {
32737
+ "title": "Url",
32738
+ "type": "string"
32739
+ },
32740
+ "found_at": {
32741
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
32742
+ "title": "Found At",
32743
+ "type": "string"
32744
+ },
32745
+ "items": {
32746
+ "items": {
32747
+ "$ref": "#/$defs/HookCandidate"
32748
+ },
32749
+ "title": "Items",
32750
+ "type": "array"
32751
+ }
32752
+ },
32753
+ "required": [
32754
+ "url",
32755
+ "found_at"
32756
+ ],
32757
+ "title": "HookCandidates",
32758
+ "type": "object"
32759
+ },
32069
32760
  "JobError": {
32070
32761
  "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
32762
  "properties": {
@@ -32840,6 +33531,17 @@ var GENERATED_TOOLS = [
32840
33531
  "title": "Images",
32841
33532
  "type": "array"
32842
33533
  },
33534
+ "hook_candidates": {
33535
+ "anyOf": [
33536
+ {
33537
+ "$ref": "#/$defs/HookCandidates"
33538
+ },
33539
+ {
33540
+ "type": "null"
33541
+ }
33542
+ ],
33543
+ "default": null
33544
+ },
32843
33545
  "versions": {
32844
33546
  "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
32845
33547
  "items": {
@@ -33803,6 +34505,74 @@ var GENERATED_TOOLS = [
33803
34505
  "title": "FromVersionImageRef",
33804
34506
  "type": "object"
33805
34507
  },
34508
+ "HookCandidate": {
34509
+ "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).",
34510
+ "properties": {
34511
+ "start_s": {
34512
+ "minimum": 0,
34513
+ "title": "Start S",
34514
+ "type": "number"
34515
+ },
34516
+ "end_s": {
34517
+ "exclusiveMinimum": 0,
34518
+ "title": "End S",
34519
+ "type": "number"
34520
+ },
34521
+ "title": {
34522
+ "default": "",
34523
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
34524
+ "title": "Title",
34525
+ "type": "string"
34526
+ },
34527
+ "score": {
34528
+ "default": 0,
34529
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
34530
+ "maximum": 100,
34531
+ "minimum": 0,
34532
+ "title": "Score",
34533
+ "type": "integer"
34534
+ },
34535
+ "reasoning": {
34536
+ "default": "",
34537
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
34538
+ "title": "Reasoning",
34539
+ "type": "string"
34540
+ }
34541
+ },
34542
+ "required": [
34543
+ "start_s",
34544
+ "end_s"
34545
+ ],
34546
+ "title": "HookCandidate",
34547
+ "type": "object"
34548
+ },
34549
+ "HookCandidates": {
34550
+ "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.",
34551
+ "properties": {
34552
+ "url": {
34553
+ "title": "Url",
34554
+ "type": "string"
34555
+ },
34556
+ "found_at": {
34557
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
34558
+ "title": "Found At",
34559
+ "type": "string"
34560
+ },
34561
+ "items": {
34562
+ "items": {
34563
+ "$ref": "#/$defs/HookCandidate"
34564
+ },
34565
+ "title": "Items",
34566
+ "type": "array"
34567
+ }
34568
+ },
34569
+ "required": [
34570
+ "url",
34571
+ "found_at"
34572
+ ],
34573
+ "title": "HookCandidates",
34574
+ "type": "object"
34575
+ },
33806
34576
  "JobError": {
33807
34577
  "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
34578
  "properties": {
@@ -34577,6 +35347,17 @@ var GENERATED_TOOLS = [
34577
35347
  "title": "Images",
34578
35348
  "type": "array"
34579
35349
  },
35350
+ "hook_candidates": {
35351
+ "anyOf": [
35352
+ {
35353
+ "$ref": "#/$defs/HookCandidates"
35354
+ },
35355
+ {
35356
+ "type": "null"
35357
+ }
35358
+ ],
35359
+ "default": null
35360
+ },
34580
35361
  "versions": {
34581
35362
  "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
34582
35363
  "items": {
@@ -35502,6 +36283,74 @@ var GENERATED_TOOLS = [
35502
36283
  "title": "FromVersionImageRef",
35503
36284
  "type": "object"
35504
36285
  },
36286
+ "HookCandidate": {
36287
+ "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).",
36288
+ "properties": {
36289
+ "start_s": {
36290
+ "minimum": 0,
36291
+ "title": "Start S",
36292
+ "type": "number"
36293
+ },
36294
+ "end_s": {
36295
+ "exclusiveMinimum": 0,
36296
+ "title": "End S",
36297
+ "type": "number"
36298
+ },
36299
+ "title": {
36300
+ "default": "",
36301
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
36302
+ "title": "Title",
36303
+ "type": "string"
36304
+ },
36305
+ "score": {
36306
+ "default": 0,
36307
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
36308
+ "maximum": 100,
36309
+ "minimum": 0,
36310
+ "title": "Score",
36311
+ "type": "integer"
36312
+ },
36313
+ "reasoning": {
36314
+ "default": "",
36315
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
36316
+ "title": "Reasoning",
36317
+ "type": "string"
36318
+ }
36319
+ },
36320
+ "required": [
36321
+ "start_s",
36322
+ "end_s"
36323
+ ],
36324
+ "title": "HookCandidate",
36325
+ "type": "object"
36326
+ },
36327
+ "HookCandidates": {
36328
+ "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.",
36329
+ "properties": {
36330
+ "url": {
36331
+ "title": "Url",
36332
+ "type": "string"
36333
+ },
36334
+ "found_at": {
36335
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
36336
+ "title": "Found At",
36337
+ "type": "string"
36338
+ },
36339
+ "items": {
36340
+ "items": {
36341
+ "$ref": "#/$defs/HookCandidate"
36342
+ },
36343
+ "title": "Items",
36344
+ "type": "array"
36345
+ }
36346
+ },
36347
+ "required": [
36348
+ "url",
36349
+ "found_at"
36350
+ ],
36351
+ "title": "HookCandidates",
36352
+ "type": "object"
36353
+ },
35505
36354
  "JobError": {
35506
36355
  "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
36356
  "properties": {
@@ -36276,6 +37125,17 @@ var GENERATED_TOOLS = [
36276
37125
  "title": "Images",
36277
37126
  "type": "array"
36278
37127
  },
37128
+ "hook_candidates": {
37129
+ "anyOf": [
37130
+ {
37131
+ "$ref": "#/$defs/HookCandidates"
37132
+ },
37133
+ {
37134
+ "type": "null"
37135
+ }
37136
+ ],
37137
+ "default": null
37138
+ },
36279
37139
  "versions": {
36280
37140
  "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
36281
37141
  "items": {
@@ -37170,6 +38030,17 @@ var GENERATED_TOOLS = [
37170
38030
  "title": "Images",
37171
38031
  "type": "array"
37172
38032
  },
38033
+ "hook_candidates": {
38034
+ "anyOf": [
38035
+ {
38036
+ "$ref": "#/$defs/HookCandidates"
38037
+ },
38038
+ {
38039
+ "type": "null"
38040
+ }
38041
+ ],
38042
+ "default": null
38043
+ },
37173
38044
  "versions": {
37174
38045
  "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
37175
38046
  "items": {
@@ -37516,6 +38387,74 @@ var GENERATED_TOOLS = [
37516
38387
  "title": "FromVersionImageRef",
37517
38388
  "type": "object"
37518
38389
  },
38390
+ "HookCandidate": {
38391
+ "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).",
38392
+ "properties": {
38393
+ "start_s": {
38394
+ "minimum": 0,
38395
+ "title": "Start S",
38396
+ "type": "number"
38397
+ },
38398
+ "end_s": {
38399
+ "exclusiveMinimum": 0,
38400
+ "title": "End S",
38401
+ "type": "number"
38402
+ },
38403
+ "title": {
38404
+ "default": "",
38405
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
38406
+ "title": "Title",
38407
+ "type": "string"
38408
+ },
38409
+ "score": {
38410
+ "default": 0,
38411
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
38412
+ "maximum": 100,
38413
+ "minimum": 0,
38414
+ "title": "Score",
38415
+ "type": "integer"
38416
+ },
38417
+ "reasoning": {
38418
+ "default": "",
38419
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
38420
+ "title": "Reasoning",
38421
+ "type": "string"
38422
+ }
38423
+ },
38424
+ "required": [
38425
+ "start_s",
38426
+ "end_s"
38427
+ ],
38428
+ "title": "HookCandidate",
38429
+ "type": "object"
38430
+ },
38431
+ "HookCandidates": {
38432
+ "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.",
38433
+ "properties": {
38434
+ "url": {
38435
+ "title": "Url",
38436
+ "type": "string"
38437
+ },
38438
+ "found_at": {
38439
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
38440
+ "title": "Found At",
38441
+ "type": "string"
38442
+ },
38443
+ "items": {
38444
+ "items": {
38445
+ "$ref": "#/$defs/HookCandidate"
38446
+ },
38447
+ "title": "Items",
38448
+ "type": "array"
38449
+ }
38450
+ },
38451
+ "required": [
38452
+ "url",
38453
+ "found_at"
38454
+ ],
38455
+ "title": "HookCandidates",
38456
+ "type": "object"
38457
+ },
37519
38458
  "JobError": {
37520
38459
  "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
38460
  "properties": {
@@ -40741,6 +41680,17 @@ var GENERATED_TOOLS = [
40741
41680
  "title": "Images",
40742
41681
  "type": "array"
40743
41682
  },
41683
+ "hook_candidates": {
41684
+ "anyOf": [
41685
+ {
41686
+ "$ref": "#/$defs/HookCandidates"
41687
+ },
41688
+ {
41689
+ "type": "null"
41690
+ }
41691
+ ],
41692
+ "default": null
41693
+ },
40744
41694
  "versions": {
40745
41695
  "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
40746
41696
  "items": {
@@ -41087,6 +42037,74 @@ var GENERATED_TOOLS = [
41087
42037
  "title": "FromVersionImageRef",
41088
42038
  "type": "object"
41089
42039
  },
42040
+ "HookCandidate": {
42041
+ "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).",
42042
+ "properties": {
42043
+ "start_s": {
42044
+ "minimum": 0,
42045
+ "title": "Start S",
42046
+ "type": "number"
42047
+ },
42048
+ "end_s": {
42049
+ "exclusiveMinimum": 0,
42050
+ "title": "End S",
42051
+ "type": "number"
42052
+ },
42053
+ "title": {
42054
+ "default": "",
42055
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
42056
+ "title": "Title",
42057
+ "type": "string"
42058
+ },
42059
+ "score": {
42060
+ "default": 0,
42061
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
42062
+ "maximum": 100,
42063
+ "minimum": 0,
42064
+ "title": "Score",
42065
+ "type": "integer"
42066
+ },
42067
+ "reasoning": {
42068
+ "default": "",
42069
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
42070
+ "title": "Reasoning",
42071
+ "type": "string"
42072
+ }
42073
+ },
42074
+ "required": [
42075
+ "start_s",
42076
+ "end_s"
42077
+ ],
42078
+ "title": "HookCandidate",
42079
+ "type": "object"
42080
+ },
42081
+ "HookCandidates": {
42082
+ "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.",
42083
+ "properties": {
42084
+ "url": {
42085
+ "title": "Url",
42086
+ "type": "string"
42087
+ },
42088
+ "found_at": {
42089
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
42090
+ "title": "Found At",
42091
+ "type": "string"
42092
+ },
42093
+ "items": {
42094
+ "items": {
42095
+ "$ref": "#/$defs/HookCandidate"
42096
+ },
42097
+ "title": "Items",
42098
+ "type": "array"
42099
+ }
42100
+ },
42101
+ "required": [
42102
+ "url",
42103
+ "found_at"
42104
+ ],
42105
+ "title": "HookCandidates",
42106
+ "type": "object"
42107
+ },
41090
42108
  "JobError": {
41091
42109
  "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
42110
  "properties": {
@@ -42490,7 +43508,7 @@ var GENERATED_TOOLS = [
42490
43508
  },
42491
43509
  {
42492
43510
  "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.",
43511
+ "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
43512
  "inputSchema": {
42495
43513
  "type": "object",
42496
43514
  "properties": {
@@ -42498,15 +43516,13 @@ var GENERATED_TOOLS = [
42498
43516
  "type": "string",
42499
43517
  "description": "\uD504\uB85C\uC81D\uD2B8 \uC2AC\uB7EC\uADF8(list_projects)"
42500
43518
  },
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"
43519
+ "cut_id": {
43520
+ "type": "string",
43521
+ "description": "\uCEF7 id(cut_\u2026)"
42506
43522
  },
42507
43523
  "count": {
42508
- "default": 3,
42509
- "description": "\uACE0\uB97C \uAD6C\uAC04 \uC218(\uAE30\uBCF8 3)",
43524
+ "default": 5,
43525
+ "description": "\uCC3E\uC744 \uD6C4\uBCF4 \uC218(\uAE30\uBCF8 5)",
42510
43526
  "maximum": 10,
42511
43527
  "minimum": 1,
42512
43528
  "title": "Count",
@@ -42515,7 +43531,7 @@ var GENERATED_TOOLS = [
42515
43531
  },
42516
43532
  "required": [
42517
43533
  "slug",
42518
- "url"
43534
+ "cut_id"
42519
43535
  ],
42520
43536
  "additionalProperties": false
42521
43537
  },
@@ -42594,274 +43610,2037 @@ var GENERATED_TOOLS = [
42594
43610
  }
42595
43611
  ],
42596
43612
  "default": null,
42597
- "title": "Cut Id"
43613
+ "title": "Cut Id"
43614
+ }
43615
+ },
43616
+ "required": [
43617
+ "code",
43618
+ "message"
43619
+ ],
43620
+ "title": "EstimateNote",
43621
+ "type": "object"
43622
+ },
43623
+ "QuoteRow": {
43624
+ "properties": {
43625
+ "key": {
43626
+ "description": "\uC7A1 \uC548\uC5D0\uC11C \uC720\uC77C\uD55C \uD589 \uD0A4 \u2014 tts:<line_id> \xB7 videogen:i2v \xB7 lipsync \xB7 render:\u2026",
43627
+ "title": "Key",
43628
+ "type": "string"
43629
+ },
43630
+ "ref_type": {
43631
+ "description": "\uC6D0\uAC00\uD45C \uD0A4(credits/pricing.BASE_PRICES)",
43632
+ "title": "Ref Type",
43633
+ "type": "string"
43634
+ },
43635
+ "units": {
43636
+ "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
43637
+ "title": "Units",
43638
+ "type": "string"
43639
+ },
43640
+ "unit_kind": {
43641
+ "title": "Unit Kind",
43642
+ "type": "string"
43643
+ },
43644
+ "display_name": {
43645
+ "title": "Display Name",
43646
+ "type": "string"
43647
+ },
43648
+ "krw": {
43649
+ "minimum": 0,
43650
+ "title": "Krw",
43651
+ "type": "integer"
43652
+ },
43653
+ "provisional": {
43654
+ "default": false,
43655
+ "title": "Provisional",
43656
+ "type": "boolean"
43657
+ }
43658
+ },
43659
+ "required": [
43660
+ "key",
43661
+ "ref_type",
43662
+ "units",
43663
+ "unit_kind",
43664
+ "display_name",
43665
+ "krw"
43666
+ ],
43667
+ "title": "QuoteRow",
43668
+ "type": "object"
43669
+ }
43670
+ },
43671
+ "properties": {
43672
+ "items": {
43673
+ "items": {
43674
+ "$ref": "#/$defs/EstimateItemResult"
43675
+ },
43676
+ "title": "Items",
43677
+ "type": "array"
43678
+ },
43679
+ "notes": {
43680
+ "items": {
43681
+ "$ref": "#/$defs/EstimateNote"
43682
+ },
43683
+ "title": "Notes",
43684
+ "type": "array"
43685
+ },
43686
+ "total_krw": {
43687
+ "title": "Total Krw",
43688
+ "type": "integer"
43689
+ },
43690
+ "rate_version": {
43691
+ "title": "Rate Version",
43692
+ "type": "integer"
43693
+ },
43694
+ "balance_krw": {
43695
+ "title": "Balance Krw",
43696
+ "type": "integer"
43697
+ },
43698
+ "balance_after_krw": {
43699
+ "title": "Balance After Krw",
43700
+ "type": "integer"
43701
+ },
43702
+ "can_afford": {
43703
+ "title": "Can Afford",
43704
+ "type": "boolean"
43705
+ },
43706
+ "mock": {
43707
+ "default": false,
43708
+ "title": "Mock",
43709
+ "type": "boolean"
43710
+ },
43711
+ "provisional": {
43712
+ "default": false,
43713
+ "title": "Provisional",
43714
+ "type": "boolean"
43715
+ }
43716
+ },
43717
+ "required": [
43718
+ "total_krw",
43719
+ "rate_version",
43720
+ "balance_krw",
43721
+ "balance_after_krw",
43722
+ "can_afford"
43723
+ ],
43724
+ "title": "EstimateResponse",
43725
+ "type": "object"
43726
+ },
43727
+ "annotations": {
43728
+ "readOnlyHint": false,
43729
+ "destructiveHint": false,
43730
+ "idempotentHint": false,
43731
+ "openWorldHint": false
43732
+ }
43733
+ },
43734
+ {
43735
+ "name": "democut_make_hook_scan",
43736
+ "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.",
43737
+ "inputSchema": {
43738
+ "type": "object",
43739
+ "properties": {
43740
+ "slug": {
43741
+ "type": "string",
43742
+ "description": "\uD504\uB85C\uC81D\uD2B8 \uC2AC\uB7EC\uADF8(list_projects)"
43743
+ },
43744
+ "cut_id": {
43745
+ "type": "string",
43746
+ "description": "\uCEF7 id(cut_\u2026)"
43747
+ },
43748
+ "count": {
43749
+ "default": 5,
43750
+ "description": "\uCC3E\uC744 \uD6C4\uBCF4 \uC218(\uAE30\uBCF8 5)",
43751
+ "maximum": 10,
43752
+ "minimum": 1,
43753
+ "title": "Count",
43754
+ "type": "integer"
43755
+ },
43756
+ "confirmed_cost_krw": {
43757
+ "minimum": 0,
43758
+ "title": "Confirmed Cost Krw",
43759
+ "type": "integer"
43760
+ },
43761
+ "rate_version": {
43762
+ "minimum": 1,
43763
+ "title": "Rate Version",
43764
+ "type": "integer"
43765
+ }
43766
+ },
43767
+ "required": [
43768
+ "slug",
43769
+ "cut_id",
43770
+ "confirmed_cost_krw",
43771
+ "rate_version"
43772
+ ],
43773
+ "additionalProperties": false
43774
+ },
43775
+ "outputSchema": {
43776
+ "$defs": {
43777
+ "Quote": {
43778
+ "properties": {
43779
+ "rows": {
43780
+ "items": {
43781
+ "$ref": "#/$defs/QuoteRow"
43782
+ },
43783
+ "title": "Rows",
43784
+ "type": "array"
43785
+ },
43786
+ "total_krw": {
43787
+ "minimum": 0,
43788
+ "title": "Total Krw",
43789
+ "type": "integer"
43790
+ },
43791
+ "rate_version": {
43792
+ "description": "pricing_config.version \u2014 make \uAC00 \uAC19\uC740 \uAC12\uC744 \uC694\uAD6C\uD55C\uB2E4",
43793
+ "minimum": 1,
43794
+ "title": "Rate Version",
43795
+ "type": "integer"
43796
+ },
43797
+ "mock": {
43798
+ "default": false,
43799
+ "title": "Mock",
43800
+ "type": "boolean"
43801
+ },
43802
+ "provisional": {
43803
+ "default": false,
43804
+ "description": "\uD589 \uC911 \uD558\uB098\uB77C\uB3C4 \uC784\uC2DC \uB2E8\uAC00\uBA74 True",
43805
+ "title": "Provisional",
43806
+ "type": "boolean"
43807
+ }
43808
+ },
43809
+ "required": [
43810
+ "total_krw",
43811
+ "rate_version"
43812
+ ],
43813
+ "title": "Quote",
43814
+ "type": "object"
43815
+ },
43816
+ "QuoteRow": {
43817
+ "properties": {
43818
+ "key": {
43819
+ "description": "\uC7A1 \uC548\uC5D0\uC11C \uC720\uC77C\uD55C \uD589 \uD0A4 \u2014 tts:<line_id> \xB7 videogen:i2v \xB7 lipsync \xB7 render:\u2026",
43820
+ "title": "Key",
43821
+ "type": "string"
43822
+ },
43823
+ "ref_type": {
43824
+ "description": "\uC6D0\uAC00\uD45C \uD0A4(credits/pricing.BASE_PRICES)",
43825
+ "title": "Ref Type",
43826
+ "type": "string"
43827
+ },
43828
+ "units": {
43829
+ "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
43830
+ "title": "Units",
43831
+ "type": "string"
43832
+ },
43833
+ "unit_kind": {
43834
+ "title": "Unit Kind",
43835
+ "type": "string"
43836
+ },
43837
+ "display_name": {
43838
+ "title": "Display Name",
43839
+ "type": "string"
43840
+ },
43841
+ "krw": {
43842
+ "minimum": 0,
43843
+ "title": "Krw",
43844
+ "type": "integer"
43845
+ },
43846
+ "provisional": {
43847
+ "default": false,
43848
+ "title": "Provisional",
43849
+ "type": "boolean"
43850
+ }
43851
+ },
43852
+ "required": [
43853
+ "key",
43854
+ "ref_type",
43855
+ "units",
43856
+ "unit_kind",
43857
+ "display_name",
43858
+ "krw"
43859
+ ],
43860
+ "title": "QuoteRow",
43861
+ "type": "object"
43862
+ }
43863
+ },
43864
+ "properties": {
43865
+ "job_id": {
43866
+ "title": "Job Id",
43867
+ "type": "string"
43868
+ },
43869
+ "quote": {
43870
+ "anyOf": [
43871
+ {
43872
+ "$ref": "#/$defs/Quote"
43873
+ },
43874
+ {
43875
+ "type": "null"
43876
+ }
43877
+ ],
43878
+ "default": null
43879
+ },
43880
+ "next_calls": {
43881
+ "items": {
43882
+ "type": "string"
43883
+ },
43884
+ "title": "Next Calls",
43885
+ "type": "array"
43886
+ }
43887
+ },
43888
+ "required": [
43889
+ "job_id"
43890
+ ],
43891
+ "title": "JobAccepted",
43892
+ "type": "object"
43893
+ },
43894
+ "annotations": {
43895
+ "readOnlyHint": false,
43896
+ "destructiveHint": false,
43897
+ "idempotentHint": false,
43898
+ "openWorldHint": false
43899
+ }
43900
+ },
43901
+ {
43902
+ "name": "democut_pick_hook_candidate",
43903
+ "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).",
43904
+ "inputSchema": {
43905
+ "type": "object",
43906
+ "properties": {
43907
+ "slug": {
43908
+ "type": "string",
43909
+ "description": "\uD504\uB85C\uC81D\uD2B8 \uC2AC\uB7EC\uADF8(list_projects)"
43910
+ },
43911
+ "cut_id": {
43912
+ "type": "string",
43913
+ "description": "\uCEF7 id(cut_\u2026)"
43914
+ },
43915
+ "index": {
43916
+ "description": "hook_candidates.items \uC758 \uC790\uB9AC(0 = \uAC00\uC7A5 \uC88B\uC740 \uAC83)",
43917
+ "minimum": 0,
43918
+ "title": "Index",
43919
+ "type": "integer"
43920
+ }
43921
+ },
43922
+ "required": [
43923
+ "slug",
43924
+ "cut_id",
43925
+ "index"
43926
+ ],
43927
+ "additionalProperties": false
43928
+ },
43929
+ "outputSchema": {
43930
+ "$defs": {
43931
+ "AiImageSpec": {
43932
+ "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).',
43933
+ "properties": {
43934
+ "mode": {
43935
+ "const": "ai_image",
43936
+ "default": "ai_image",
43937
+ "title": "Mode",
43938
+ "type": "string"
43939
+ },
43940
+ "image_prompt": {
43941
+ "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",
43942
+ "maxLength": 4e3,
43943
+ "minLength": 1,
43944
+ "title": "Image Prompt",
43945
+ "type": "string"
43946
+ },
43947
+ "image_asset_id": {
43948
+ "anyOf": [
43949
+ {
43950
+ "minLength": 1,
43951
+ "type": "string"
43952
+ },
43953
+ {
43954
+ "type": "null"
43955
+ }
43956
+ ],
43957
+ "default": null,
43958
+ "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",
43959
+ "title": "Image Asset Id"
43960
+ },
43961
+ "reference_asset_ids": {
43962
+ "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)",
43963
+ "items": {
43964
+ "type": "string"
43965
+ },
43966
+ "maxItems": 3,
43967
+ "title": "Reference Asset Ids",
43968
+ "type": "array",
43969
+ "x-hash": "ignore"
43970
+ },
43971
+ "reference_avatar_id": {
43972
+ "anyOf": [
43973
+ {
43974
+ "minLength": 1,
43975
+ "type": "string"
43976
+ },
43977
+ {
43978
+ "type": "null"
43979
+ }
43980
+ ],
43981
+ "default": null,
43982
+ "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)",
43983
+ "title": "Reference Avatar Id",
43984
+ "x-hash": "ignore"
43985
+ }
43986
+ },
43987
+ "required": [
43988
+ "image_prompt"
43989
+ ],
43990
+ "title": "AiImageSpec",
43991
+ "type": "object"
43992
+ },
43993
+ "AiVideoSpec": {
43994
+ "properties": {
43995
+ "dialogue": {
43996
+ "items": {
43997
+ "$ref": "#/$defs/DialogueLine"
43998
+ },
43999
+ "title": "Dialogue",
44000
+ "type": "array"
44001
+ },
44002
+ "narration_asset_id": {
44003
+ "anyOf": [
44004
+ {
44005
+ "minLength": 1,
44006
+ "type": "string"
44007
+ },
44008
+ {
44009
+ "type": "null"
44010
+ }
44011
+ ],
44012
+ "default": null,
44013
+ "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",
44014
+ "title": "Narration Asset Id"
44015
+ },
44016
+ "subtitles": {
44017
+ "default": true,
44018
+ "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",
44019
+ "title": "Subtitles",
44020
+ "type": "boolean",
44021
+ "x-diff": "ignore"
44022
+ },
44023
+ "host": {
44024
+ "anyOf": [
44025
+ {
44026
+ "type": "string"
44027
+ },
44028
+ {
44029
+ "type": "null"
44030
+ }
44031
+ ],
44032
+ "default": null,
44033
+ "description": "\uC9C4\uD589 \u2014 \uD5C8\uC6A9 \uC9D1\uD569\uC740 \uCE74\uD0C8\uB85C\uADF8(\uBC29\uC2DD\uBCC4). \uBAA8\uC158\uADF8\uB798\uD53D\uC740 \uD544\uC218",
44034
+ "title": "Host"
44035
+ },
44036
+ "voice_id": {
44037
+ "anyOf": [
44038
+ {
44039
+ "minLength": 1,
44040
+ "type": "string"
44041
+ },
44042
+ {
44043
+ "type": "null"
44044
+ }
44045
+ ],
44046
+ "default": null,
44047
+ "description": "host\u2208{voice,avatar} \uC774\uACE0 BYO \uC624\uB514\uC624\uAC00 \uC5C6\uC744 \uB54C \uD544\uC218",
44048
+ "title": "Voice Id"
44049
+ },
44050
+ "pip": {
44051
+ "anyOf": [
44052
+ {
44053
+ "$ref": "#/$defs/PipSpec"
44054
+ },
44055
+ {
44056
+ "type": "null"
44057
+ }
44058
+ ],
44059
+ "default": null,
44060
+ "description": "host=avatar \uC77C \uB54C \uD544\uC218"
44061
+ },
44062
+ "image_asset_id": {
44063
+ "anyOf": [
44064
+ {
44065
+ "minLength": 1,
44066
+ "type": "string"
44067
+ },
44068
+ {
44069
+ "type": "null"
44070
+ }
44071
+ ],
44072
+ "default": null,
44073
+ "description": "\uCEF7 \uC774\uBBF8\uC9C0\uB97C spec \uC5D0\uC11C \uC9C1\uC811 \uC9C0\uC815(\uC5D0\uC774\uC804\uD2B8 \uC6D0\uC0F7\uC6A9)",
44074
+ "title": "Image Asset Id"
44075
+ },
44076
+ "duration_s": {
44077
+ "default": 5,
44078
+ "maximum": 15,
44079
+ "minimum": 4,
44080
+ "title": "Duration S",
44081
+ "type": "number"
44082
+ },
44083
+ "mode": {
44084
+ "const": "ai_video",
44085
+ "default": "ai_video",
44086
+ "title": "Mode",
44087
+ "type": "string"
44088
+ },
44089
+ "image_prompt": {
44090
+ "maxLength": 4e3,
44091
+ "minLength": 1,
44092
+ "title": "Image Prompt",
44093
+ "type": "string"
44094
+ },
44095
+ "reference_asset_ids": {
44096
+ "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)",
44097
+ "items": {
44098
+ "type": "string"
44099
+ },
44100
+ "maxItems": 3,
44101
+ "title": "Reference Asset Ids",
44102
+ "type": "array",
44103
+ "x-hash": "ignore"
44104
+ },
44105
+ "reference_avatar_id": {
44106
+ "anyOf": [
44107
+ {
44108
+ "minLength": 1,
44109
+ "type": "string"
44110
+ },
44111
+ {
44112
+ "type": "null"
44113
+ }
44114
+ ],
44115
+ "default": null,
44116
+ "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)",
44117
+ "title": "Reference Avatar Id",
44118
+ "x-hash": "ignore"
44119
+ },
44120
+ "provider": {
44121
+ "anyOf": [
44122
+ {
44123
+ "maxLength": 32,
44124
+ "minLength": 1,
44125
+ "type": "string"
44126
+ },
44127
+ {
44128
+ "type": "null"
44129
+ }
44130
+ ],
44131
+ "default": null,
44132
+ "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",
44133
+ "title": "Provider"
44134
+ },
44135
+ "seed": {
44136
+ "anyOf": [
44137
+ {
44138
+ "minimum": 0,
44139
+ "type": "integer"
44140
+ },
44141
+ {
44142
+ "type": "null"
44143
+ }
44144
+ ],
44145
+ "default": null,
44146
+ "title": "Seed"
44147
+ },
44148
+ "image": {
44149
+ "anyOf": [
44150
+ {
44151
+ "discriminator": {
44152
+ "mapping": {
44153
+ "asset": "#/$defs/AssetImageRef",
44154
+ "from_cut": "#/$defs/FromCutImageRef",
44155
+ "from_version": "#/$defs/FromVersionImageRef"
44156
+ },
44157
+ "propertyName": "kind"
44158
+ },
44159
+ "oneOf": [
44160
+ {
44161
+ "$ref": "#/$defs/AssetImageRef"
44162
+ },
44163
+ {
44164
+ "$ref": "#/$defs/FromCutImageRef"
44165
+ },
44166
+ {
44167
+ "$ref": "#/$defs/FromVersionImageRef"
44168
+ }
44169
+ ]
44170
+ },
44171
+ {
44172
+ "type": "null"
44173
+ }
44174
+ ],
44175
+ "default": null,
44176
+ "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",
44177
+ "title": "Image"
44178
+ },
44179
+ "end_image": {
44180
+ "anyOf": [
44181
+ {
44182
+ "discriminator": {
44183
+ "mapping": {
44184
+ "asset": "#/$defs/AssetImageRef",
44185
+ "from_cut": "#/$defs/FromCutImageRef",
44186
+ "from_version": "#/$defs/FromVersionImageRef"
44187
+ },
44188
+ "propertyName": "kind"
44189
+ },
44190
+ "oneOf": [
44191
+ {
44192
+ "$ref": "#/$defs/AssetImageRef"
44193
+ },
44194
+ {
44195
+ "$ref": "#/$defs/FromCutImageRef"
44196
+ },
44197
+ {
44198
+ "$ref": "#/$defs/FromVersionImageRef"
44199
+ }
44200
+ ]
44201
+ },
44202
+ {
44203
+ "type": "null"
44204
+ }
44205
+ ],
44206
+ "default": null,
44207
+ "title": "End Image"
44208
+ }
44209
+ },
44210
+ "required": [
44211
+ "image_prompt"
44212
+ ],
44213
+ "title": "AiVideoSpec",
44214
+ "type": "object"
44215
+ },
44216
+ "AssetImageRef": {
44217
+ "properties": {
44218
+ "kind": {
44219
+ "const": "asset",
44220
+ "default": "asset",
44221
+ "title": "Kind",
44222
+ "type": "string"
44223
+ },
44224
+ "asset_id": {
44225
+ "minLength": 1,
44226
+ "title": "Asset Id",
44227
+ "type": "string"
44228
+ }
44229
+ },
44230
+ "required": [
44231
+ "asset_id"
44232
+ ],
44233
+ "title": "AssetImageRef",
44234
+ "type": "object"
44235
+ },
44236
+ "CanvasPos": {
44237
+ "properties": {
44238
+ "x": {
44239
+ "default": 0,
44240
+ "title": "X",
44241
+ "type": "number"
44242
+ },
44243
+ "y": {
44244
+ "default": 0,
44245
+ "title": "Y",
44246
+ "type": "number"
44247
+ }
44248
+ },
44249
+ "title": "CanvasPos",
44250
+ "type": "object"
44251
+ },
44252
+ "CutEdit": {
44253
+ "properties": {
44254
+ "trim_in_ms": {
44255
+ "default": 0,
44256
+ "minimum": 0,
44257
+ "title": "Trim In Ms",
44258
+ "type": "integer"
44259
+ },
44260
+ "trim_out_ms": {
44261
+ "anyOf": [
44262
+ {
44263
+ "minimum": 1,
44264
+ "type": "integer"
44265
+ },
44266
+ {
44267
+ "type": "null"
44268
+ }
44269
+ ],
44270
+ "default": null,
44271
+ "title": "Trim Out Ms"
44272
+ },
44273
+ "silence_removal": {
44274
+ "default": false,
44275
+ "title": "Silence Removal",
44276
+ "type": "boolean"
44277
+ },
44278
+ "silence_threshold_ms": {
44279
+ "default": 800,
44280
+ "maximum": 5e3,
44281
+ "minimum": 100,
44282
+ "title": "Silence Threshold Ms",
44283
+ "type": "integer"
44284
+ }
44285
+ },
44286
+ "title": "CutEdit",
44287
+ "type": "object"
44288
+ },
44289
+ "CutImageView": {
44290
+ "properties": {
44291
+ "id": {
44292
+ "title": "Id",
44293
+ "type": "string"
44294
+ },
44295
+ "seq": {
44296
+ "title": "Seq",
44297
+ "type": "integer"
44298
+ },
44299
+ "asset_id": {
44300
+ "title": "Asset Id",
44301
+ "type": "string"
44302
+ },
44303
+ "source": {
44304
+ "enum": [
44305
+ "upload",
44306
+ "image_gen",
44307
+ "from_video"
44308
+ ],
44309
+ "title": "Source",
44310
+ "type": "string"
44311
+ },
44312
+ "from_version": {
44313
+ "anyOf": [
44314
+ {
44315
+ "type": "integer"
44316
+ },
44317
+ {
44318
+ "type": "null"
44319
+ }
44320
+ ],
44321
+ "default": null,
44322
+ "title": "From Version"
44323
+ },
44324
+ "url": {
44325
+ "anyOf": [
44326
+ {
44327
+ "type": "string"
44328
+ },
44329
+ {
44330
+ "type": "null"
44331
+ }
44332
+ ],
44333
+ "default": null,
44334
+ "description": "\uC11C\uBA85 URL",
44335
+ "title": "Url"
44336
+ },
44337
+ "model": {
44338
+ "anyOf": [
44339
+ {
44340
+ "type": "string"
44341
+ },
44342
+ {
44343
+ "type": "null"
44344
+ }
44345
+ ],
44346
+ "default": null,
44347
+ "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",
44348
+ "title": "Model"
44349
+ },
44350
+ "quality": {
44351
+ "anyOf": [
44352
+ {
44353
+ "type": "string"
44354
+ },
44355
+ {
44356
+ "type": "null"
44357
+ }
44358
+ ],
44359
+ "default": null,
44360
+ "description": "\uC0DD\uC131 \uD488\uC9C8(low|medium|high). model \uACFC \uAC19\uC740 \uC870\uAC74\uC5D0\uC11C\uB9CC",
44361
+ "title": "Quality"
44362
+ }
44363
+ },
44364
+ "required": [
44365
+ "id",
44366
+ "seq",
44367
+ "asset_id",
44368
+ "source"
44369
+ ],
44370
+ "title": "CutImageView",
44371
+ "type": "object"
44372
+ },
44373
+ "CutVersionView": {
44374
+ "properties": {
44375
+ "version": {
44376
+ "minimum": 1,
44377
+ "title": "Version",
44378
+ "type": "integer"
44379
+ },
44380
+ "origin": {
44381
+ "enum": [
44382
+ "render",
44383
+ "import"
44384
+ ],
44385
+ "title": "Origin",
44386
+ "type": "string"
44387
+ },
44388
+ "spec": {
44389
+ "additionalProperties": true,
44390
+ "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).",
44391
+ "title": "Spec",
44392
+ "type": "object"
44393
+ },
44394
+ "based_on": {
44395
+ "anyOf": [
44396
+ {
44397
+ "type": "integer"
44398
+ },
44399
+ {
44400
+ "type": "null"
44401
+ }
44402
+ ],
44403
+ "default": null,
44404
+ "title": "Based On"
44405
+ },
44406
+ "note": {
44407
+ "anyOf": [
44408
+ {
44409
+ "type": "string"
44410
+ },
44411
+ {
44412
+ "type": "null"
44413
+ }
44414
+ ],
44415
+ "default": null,
44416
+ "title": "Note"
44417
+ },
44418
+ "job_id": {
44419
+ "title": "Job Id",
44420
+ "type": "string"
44421
+ },
44422
+ "duration_ms": {
44423
+ "minimum": 0,
44424
+ "title": "Duration Ms",
44425
+ "type": "integer"
44426
+ },
44427
+ "width": {
44428
+ "title": "Width",
44429
+ "type": "integer"
44430
+ },
44431
+ "height": {
44432
+ "title": "Height",
44433
+ "type": "integer"
44434
+ },
44435
+ "fps": {
44436
+ "title": "Fps",
44437
+ "type": "number"
44438
+ },
44439
+ "timing": {
44440
+ "$ref": "#/$defs/Timing"
44441
+ },
44442
+ "quote": {
44443
+ "$ref": "#/$defs/Quote"
44444
+ },
44445
+ "mock": {
44446
+ "default": false,
44447
+ "title": "Mock",
44448
+ "type": "boolean"
44449
+ },
44450
+ "created_by": {
44451
+ "title": "Created By",
44452
+ "type": "string"
44453
+ },
44454
+ "created_at": {
44455
+ "title": "Created At",
44456
+ "type": "string"
44457
+ },
44458
+ "download": {
44459
+ "$ref": "#/$defs/DownloadUrls"
44460
+ },
44461
+ "subtitle_tracks": {
44462
+ "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",
44463
+ "items": {
44464
+ "$ref": "#/$defs/SubtitleTrackView"
44465
+ },
44466
+ "title": "Subtitle Tracks",
44467
+ "type": "array"
44468
+ }
44469
+ },
44470
+ "required": [
44471
+ "version",
44472
+ "origin",
44473
+ "spec",
44474
+ "job_id",
44475
+ "duration_ms",
44476
+ "width",
44477
+ "height",
44478
+ "fps",
44479
+ "timing",
44480
+ "quote",
44481
+ "created_by",
44482
+ "created_at",
44483
+ "download"
44484
+ ],
44485
+ "title": "CutVersionView",
44486
+ "type": "object"
44487
+ },
44488
+ "DialogueLine": {
44489
+ "properties": {
44490
+ "id": {
44491
+ "description": "\uC904 id ln_<6> \u2014 \uC81C\uC548 diff \uC758 \uB300\uC870 \uD0A4",
44492
+ "pattern": "^ln_[a-z0-9]{6}$",
44493
+ "title": "Id",
44494
+ "type": "string",
44495
+ "x-diff": "ignore"
44496
+ },
44497
+ "text": {
44498
+ "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)",
44499
+ "maxLength": 2e3,
44500
+ "minLength": 1,
44501
+ "title": "Text",
44502
+ "type": "string"
44503
+ },
44504
+ "subtitle_text": {
44505
+ "anyOf": [
44506
+ {
44507
+ "maxLength": 2e3,
44508
+ "type": "string"
44509
+ },
44510
+ {
44511
+ "type": "null"
44512
+ }
44513
+ ],
44514
+ "default": null,
44515
+ "description": "\uC790\uB9C9 \uD45C\uAE30(\uC6D0\uBB38 \uD45C\uAE30). \uC5C6\uC73C\uBA74 text",
44516
+ "title": "Subtitle Text"
44517
+ },
44518
+ "audio_asset_id": {
44519
+ "anyOf": [
44520
+ {
44521
+ "minLength": 1,
44522
+ "type": "string"
44523
+ },
44524
+ {
44525
+ "type": "null"
44526
+ }
44527
+ ],
44528
+ "default": null,
44529
+ "description": "BYO: \uC774 \uC904\uC758 \uB098\uB808\uC774\uC158 \uC624\uB514\uC624 \uC790\uC0B0 \u2014 TTS \uD589 0\uC6D0, \uC815\uB82C \uD589\uB9CC",
44530
+ "title": "Audio Asset Id"
44531
+ }
44532
+ },
44533
+ "required": [
44534
+ "id",
44535
+ "text"
44536
+ ],
44537
+ "title": "DialogueLine",
44538
+ "type": "object"
44539
+ },
44540
+ "DialogueTiming": {
44541
+ "properties": {
44542
+ "id": {
44543
+ "title": "Id",
44544
+ "type": "string"
44545
+ },
44546
+ "start_ms": {
44547
+ "minimum": 0,
44548
+ "title": "Start Ms",
44549
+ "type": "integer"
44550
+ },
44551
+ "end_ms": {
44552
+ "minimum": 0,
44553
+ "title": "End Ms",
44554
+ "type": "integer"
44555
+ }
44556
+ },
44557
+ "required": [
44558
+ "id",
44559
+ "start_ms",
44560
+ "end_ms"
44561
+ ],
44562
+ "title": "DialogueTiming",
44563
+ "type": "object"
44564
+ },
44565
+ "DownloadUrls": {
44566
+ "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.",
44567
+ "properties": {
44568
+ "video": {
44569
+ "anyOf": [
44570
+ {
44571
+ "type": "string"
44572
+ },
44573
+ {
44574
+ "type": "null"
44575
+ }
44576
+ ],
44577
+ "default": null,
44578
+ "title": "Video"
44579
+ },
44580
+ "audio": {
44581
+ "anyOf": [
44582
+ {
44583
+ "type": "string"
44584
+ },
44585
+ {
44586
+ "type": "null"
44587
+ }
44588
+ ],
44589
+ "default": null,
44590
+ "title": "Audio"
44591
+ },
44592
+ "subtitle": {
44593
+ "anyOf": [
44594
+ {
44595
+ "type": "string"
44596
+ },
44597
+ {
44598
+ "type": "null"
44599
+ }
44600
+ ],
44601
+ "default": null,
44602
+ "title": "Subtitle"
44603
+ },
44604
+ "still": {
44605
+ "anyOf": [
44606
+ {
44607
+ "type": "string"
44608
+ },
44609
+ {
44610
+ "type": "null"
44611
+ }
44612
+ ],
44613
+ "default": null,
44614
+ "title": "Still"
44615
+ },
44616
+ "timing": {
44617
+ "anyOf": [
44618
+ {
44619
+ "type": "string"
44620
+ },
44621
+ {
44622
+ "type": "null"
44623
+ }
44624
+ ],
44625
+ "default": null,
44626
+ "title": "Timing"
44627
+ }
44628
+ },
44629
+ "title": "DownloadUrls",
44630
+ "type": "object"
44631
+ },
44632
+ "FromCutImageRef": {
44633
+ "properties": {
44634
+ "kind": {
44635
+ "const": "from_cut",
44636
+ "default": "from_cut",
44637
+ "title": "Kind",
44638
+ "type": "string"
44639
+ },
44640
+ "from_cut": {
44641
+ "description": "\uB2E4\uB978 \uCEF7\uC758 \uB300\uD45C \uBC84\uC804 \uD504\uB808\uC784(\uC5F0\uC18D\uC131 \uB3C4\uC6B0\uBBF8)",
44642
+ "minLength": 1,
44643
+ "title": "From Cut",
44644
+ "type": "string"
44645
+ },
44646
+ "frame": {
44647
+ "default": "last",
44648
+ "enum": [
44649
+ "first",
44650
+ "last"
44651
+ ],
44652
+ "title": "Frame",
44653
+ "type": "string"
44654
+ }
44655
+ },
44656
+ "required": [
44657
+ "from_cut"
44658
+ ],
44659
+ "title": "FromCutImageRef",
44660
+ "type": "object"
44661
+ },
44662
+ "FromVersionImageRef": {
44663
+ "properties": {
44664
+ "kind": {
44665
+ "const": "from_version",
44666
+ "default": "from_version",
44667
+ "title": "Kind",
44668
+ "type": "string"
44669
+ },
44670
+ "from_version": {
44671
+ "description": "\uC774 \uCEF7\uC758 \uD2B9\uC815 \uBC84\uC804 \uD504\uB808\uC784",
44672
+ "minimum": 1,
44673
+ "title": "From Version",
44674
+ "type": "integer"
44675
+ },
44676
+ "frame": {
44677
+ "default": "last",
44678
+ "enum": [
44679
+ "first",
44680
+ "last"
44681
+ ],
44682
+ "title": "Frame",
44683
+ "type": "string"
44684
+ }
44685
+ },
44686
+ "required": [
44687
+ "from_version"
44688
+ ],
44689
+ "title": "FromVersionImageRef",
44690
+ "type": "object"
44691
+ },
44692
+ "HookCandidate": {
44693
+ "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).",
44694
+ "properties": {
44695
+ "start_s": {
44696
+ "minimum": 0,
44697
+ "title": "Start S",
44698
+ "type": "number"
44699
+ },
44700
+ "end_s": {
44701
+ "exclusiveMinimum": 0,
44702
+ "title": "End S",
44703
+ "type": "number"
44704
+ },
44705
+ "title": {
44706
+ "default": "",
44707
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
44708
+ "title": "Title",
44709
+ "type": "string"
44710
+ },
44711
+ "score": {
44712
+ "default": 0,
44713
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
44714
+ "maximum": 100,
44715
+ "minimum": 0,
44716
+ "title": "Score",
44717
+ "type": "integer"
44718
+ },
44719
+ "reasoning": {
44720
+ "default": "",
44721
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
44722
+ "title": "Reasoning",
44723
+ "type": "string"
44724
+ }
44725
+ },
44726
+ "required": [
44727
+ "start_s",
44728
+ "end_s"
44729
+ ],
44730
+ "title": "HookCandidate",
44731
+ "type": "object"
44732
+ },
44733
+ "HookCandidates": {
44734
+ "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.",
44735
+ "properties": {
44736
+ "url": {
44737
+ "title": "Url",
44738
+ "type": "string"
44739
+ },
44740
+ "found_at": {
44741
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
44742
+ "title": "Found At",
44743
+ "type": "string"
44744
+ },
44745
+ "items": {
44746
+ "items": {
44747
+ "$ref": "#/$defs/HookCandidate"
44748
+ },
44749
+ "title": "Items",
44750
+ "type": "array"
44751
+ }
44752
+ },
44753
+ "required": [
44754
+ "url",
44755
+ "found_at"
44756
+ ],
44757
+ "title": "HookCandidates",
44758
+ "type": "object"
44759
+ },
44760
+ "JobError": {
44761
+ "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`).',
44762
+ "properties": {
44763
+ "code": {
44764
+ "title": "Code",
44765
+ "type": "string"
44766
+ },
44767
+ "message": {
44768
+ "title": "Message",
44769
+ "type": "string"
44770
+ },
44771
+ "retryable": {
44772
+ "default": false,
44773
+ "title": "Retryable",
44774
+ "type": "boolean"
44775
+ },
44776
+ "refunded_krw": {
44777
+ "default": 0,
44778
+ "title": "Refunded Krw",
44779
+ "type": "integer"
44780
+ },
44781
+ "hint": {
44782
+ "anyOf": [
44783
+ {
44784
+ "type": "string"
44785
+ },
44786
+ {
44787
+ "type": "null"
44788
+ }
44789
+ ],
44790
+ "default": null,
44791
+ "title": "Hint"
44792
+ },
44793
+ "provider_job_id": {
44794
+ "anyOf": [
44795
+ {
44796
+ "type": "string"
44797
+ },
44798
+ {
44799
+ "type": "null"
44800
+ }
44801
+ ],
44802
+ "default": null,
44803
+ "title": "Provider Job Id"
44804
+ },
44805
+ "cause": {
44806
+ "anyOf": [
44807
+ {
44808
+ "type": "string"
44809
+ },
44810
+ {
44811
+ "type": "null"
44812
+ }
44813
+ ],
44814
+ "default": null,
44815
+ "title": "Cause"
44816
+ },
44817
+ "data": {
44818
+ "anyOf": [
44819
+ {
44820
+ "additionalProperties": true,
44821
+ "type": "object"
44822
+ },
44823
+ {
44824
+ "type": "null"
44825
+ }
44826
+ ],
44827
+ "default": null,
44828
+ "title": "Data"
44829
+ }
44830
+ },
44831
+ "required": [
44832
+ "code",
44833
+ "message"
44834
+ ],
44835
+ "title": "JobError",
44836
+ "type": "object"
44837
+ },
44838
+ "MotionGraphicSpec": {
44839
+ "properties": {
44840
+ "dialogue": {
44841
+ "items": {
44842
+ "$ref": "#/$defs/DialogueLine"
44843
+ },
44844
+ "title": "Dialogue",
44845
+ "type": "array"
44846
+ },
44847
+ "narration_asset_id": {
44848
+ "anyOf": [
44849
+ {
44850
+ "minLength": 1,
44851
+ "type": "string"
44852
+ },
44853
+ {
44854
+ "type": "null"
44855
+ }
44856
+ ],
44857
+ "default": null,
44858
+ "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",
44859
+ "title": "Narration Asset Id"
44860
+ },
44861
+ "subtitles": {
44862
+ "default": true,
44863
+ "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",
44864
+ "title": "Subtitles",
44865
+ "type": "boolean",
44866
+ "x-diff": "ignore"
44867
+ },
44868
+ "host": {
44869
+ "anyOf": [
44870
+ {
44871
+ "type": "string"
44872
+ },
44873
+ {
44874
+ "type": "null"
44875
+ }
44876
+ ],
44877
+ "default": null,
44878
+ "description": "\uC9C4\uD589 \u2014 \uD5C8\uC6A9 \uC9D1\uD569\uC740 \uCE74\uD0C8\uB85C\uADF8(\uBC29\uC2DD\uBCC4). \uBAA8\uC158\uADF8\uB798\uD53D\uC740 \uD544\uC218",
44879
+ "title": "Host"
44880
+ },
44881
+ "voice_id": {
44882
+ "anyOf": [
44883
+ {
44884
+ "minLength": 1,
44885
+ "type": "string"
44886
+ },
44887
+ {
44888
+ "type": "null"
44889
+ }
44890
+ ],
44891
+ "default": null,
44892
+ "description": "host\u2208{voice,avatar} \uC774\uACE0 BYO \uC624\uB514\uC624\uAC00 \uC5C6\uC744 \uB54C \uD544\uC218",
44893
+ "title": "Voice Id"
44894
+ },
44895
+ "pip": {
44896
+ "anyOf": [
44897
+ {
44898
+ "$ref": "#/$defs/PipSpec"
44899
+ },
44900
+ {
44901
+ "type": "null"
44902
+ }
44903
+ ],
44904
+ "default": null,
44905
+ "description": "host=avatar \uC77C \uB54C \uD544\uC218"
44906
+ },
44907
+ "image_asset_id": {
44908
+ "anyOf": [
44909
+ {
44910
+ "minLength": 1,
44911
+ "type": "string"
44912
+ },
44913
+ {
44914
+ "type": "null"
44915
+ }
44916
+ ],
44917
+ "default": null,
44918
+ "description": "\uCEF7 \uC774\uBBF8\uC9C0\uB97C spec \uC5D0\uC11C \uC9C1\uC811 \uC9C0\uC815(\uC5D0\uC774\uC804\uD2B8 \uC6D0\uC0F7\uC6A9)",
44919
+ "title": "Image Asset Id"
44920
+ },
44921
+ "duration_s": {
44922
+ "anyOf": [
44923
+ {
44924
+ "exclusiveMinimum": 0,
44925
+ "maximum": 600,
44926
+ "type": "number"
44927
+ },
44928
+ {
44929
+ "type": "null"
44930
+ }
44931
+ ],
44932
+ "default": null,
44933
+ "title": "Duration S"
44934
+ },
44935
+ "mode": {
44936
+ "const": "motion_graphic",
44937
+ "default": "motion_graphic",
44938
+ "title": "Mode",
44939
+ "type": "string"
44940
+ },
44941
+ "motion_prompt": {
44942
+ "anyOf": [
44943
+ {
44944
+ "maxLength": 4e3,
44945
+ "type": "string"
44946
+ },
44947
+ {
44948
+ "type": "null"
44949
+ }
44950
+ ],
44951
+ "default": null,
44952
+ "title": "Motion Prompt"
44953
+ },
44954
+ "tsx": {
44955
+ "anyOf": [
44956
+ {
44957
+ "maxLength": 2e5,
44958
+ "type": "string"
44959
+ },
44960
+ {
44961
+ "type": "null"
44962
+ }
44963
+ ],
44964
+ "default": null,
44965
+ "description": "BYO Remotion \uCF54\uB4DC(UTF-8 \u2264 200KB) \u2014 codegen \uD589 0\uC6D0, \uAC8C\uC774\uD2B8\uB294 codegen \uACFC \uB3D9\uAE09",
44966
+ "title": "Tsx"
44967
+ },
44968
+ "layout_pattern": {
44969
+ "anyOf": [
44970
+ {
44971
+ "maxLength": 48,
44972
+ "type": "string"
44973
+ },
44974
+ {
44975
+ "type": "null"
44976
+ }
44977
+ ],
44978
+ "default": null,
44979
+ "title": "Layout Pattern"
44980
+ }
44981
+ },
44982
+ "title": "MotionGraphicSpec",
44983
+ "type": "object"
44984
+ },
44985
+ "PipSpec": {
44986
+ "properties": {
44987
+ "avatar_id": {
44988
+ "minLength": 1,
44989
+ "title": "Avatar Id",
44990
+ "type": "string"
44991
+ },
44992
+ "background_asset_id": {
44993
+ "description": "\uBC30\uACBD\uC740 \uC5B8\uC81C\uB098 \uC790\uC0B0(origin=background \uCE74\uD0C8\uB85C\uADF8 \uB610\uB294 \uC62C\uB9B0 \uC774\uBBF8\uC9C0)",
44994
+ "minLength": 1,
44995
+ "title": "Background Asset Id",
44996
+ "type": "string"
44997
+ },
44998
+ "position": {
44999
+ "default": "br",
45000
+ "enum": [
45001
+ "tl",
45002
+ "tr",
45003
+ "bl",
45004
+ "br"
45005
+ ],
45006
+ "title": "Position",
45007
+ "type": "string"
45008
+ },
45009
+ "size": {
45010
+ "default": "m",
45011
+ "enum": [
45012
+ "s",
45013
+ "m",
45014
+ "l"
45015
+ ],
45016
+ "title": "Size",
45017
+ "type": "string"
45018
+ }
45019
+ },
45020
+ "required": [
45021
+ "avatar_id",
45022
+ "background_asset_id"
45023
+ ],
45024
+ "title": "PipSpec",
45025
+ "type": "object"
45026
+ },
45027
+ "Quote": {
45028
+ "properties": {
45029
+ "rows": {
45030
+ "items": {
45031
+ "$ref": "#/$defs/QuoteRow"
45032
+ },
45033
+ "title": "Rows",
45034
+ "type": "array"
45035
+ },
45036
+ "total_krw": {
45037
+ "minimum": 0,
45038
+ "title": "Total Krw",
45039
+ "type": "integer"
45040
+ },
45041
+ "rate_version": {
45042
+ "description": "pricing_config.version \u2014 make \uAC00 \uAC19\uC740 \uAC12\uC744 \uC694\uAD6C\uD55C\uB2E4",
45043
+ "minimum": 1,
45044
+ "title": "Rate Version",
45045
+ "type": "integer"
45046
+ },
45047
+ "mock": {
45048
+ "default": false,
45049
+ "title": "Mock",
45050
+ "type": "boolean"
45051
+ },
45052
+ "provisional": {
45053
+ "default": false,
45054
+ "description": "\uD589 \uC911 \uD558\uB098\uB77C\uB3C4 \uC784\uC2DC \uB2E8\uAC00\uBA74 True",
45055
+ "title": "Provisional",
45056
+ "type": "boolean"
45057
+ }
45058
+ },
45059
+ "required": [
45060
+ "total_krw",
45061
+ "rate_version"
45062
+ ],
45063
+ "title": "Quote",
45064
+ "type": "object"
45065
+ },
45066
+ "QuoteRow": {
45067
+ "properties": {
45068
+ "key": {
45069
+ "description": "\uC7A1 \uC548\uC5D0\uC11C \uC720\uC77C\uD55C \uD589 \uD0A4 \u2014 tts:<line_id> \xB7 videogen:i2v \xB7 lipsync \xB7 render:\u2026",
45070
+ "title": "Key",
45071
+ "type": "string"
45072
+ },
45073
+ "ref_type": {
45074
+ "description": "\uC6D0\uAC00\uD45C \uD0A4(credits/pricing.BASE_PRICES)",
45075
+ "title": "Ref Type",
45076
+ "type": "string"
45077
+ },
45078
+ "units": {
45079
+ "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
45080
+ "title": "Units",
45081
+ "type": "string"
45082
+ },
45083
+ "unit_kind": {
45084
+ "title": "Unit Kind",
45085
+ "type": "string"
45086
+ },
45087
+ "display_name": {
45088
+ "title": "Display Name",
45089
+ "type": "string"
45090
+ },
45091
+ "krw": {
45092
+ "minimum": 0,
45093
+ "title": "Krw",
45094
+ "type": "integer"
45095
+ },
45096
+ "provisional": {
45097
+ "default": false,
45098
+ "title": "Provisional",
45099
+ "type": "boolean"
45100
+ }
45101
+ },
45102
+ "required": [
45103
+ "key",
45104
+ "ref_type",
45105
+ "units",
45106
+ "unit_kind",
45107
+ "display_name",
45108
+ "krw"
45109
+ ],
45110
+ "title": "QuoteRow",
45111
+ "type": "object"
45112
+ },
45113
+ "SubtitleTrackView": {
45114
+ "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.",
45115
+ "properties": {
45116
+ "kind": {
45117
+ "description": "narration=\uC6B0\uB9AC\uAC00 \uB9CC\uB4E0 \uB300\uC0AC, source=\uC6D0\uBCF8 \uC601\uC0C1\uC758 \uB9D0\uC18C\uB9AC",
45118
+ "enum": [
45119
+ "narration",
45120
+ "source"
45121
+ ],
45122
+ "title": "Kind",
45123
+ "type": "string"
45124
+ },
45125
+ "lang": {
45126
+ "description": "ISO 639-1 \uB450 \uAE00\uC790. \uAC10\uC9C0\uD558\uC9C0 \uBABB\uD588\uC73C\uBA74 und",
45127
+ "title": "Lang",
45128
+ "type": "string"
45129
+ },
45130
+ "origin": {
45131
+ "enum": [
45132
+ "aligned",
45133
+ "transcribed",
45134
+ "translated"
45135
+ ],
45136
+ "title": "Origin",
45137
+ "type": "string"
45138
+ },
45139
+ "url": {
45140
+ "anyOf": [
45141
+ {
45142
+ "type": "string"
45143
+ },
45144
+ {
45145
+ "type": "null"
45146
+ }
45147
+ ],
45148
+ "default": null,
45149
+ "description": "SRT \uC11C\uBA85 URL. \uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
45150
+ "title": "Url"
45151
+ }
45152
+ },
45153
+ "required": [
45154
+ "kind",
45155
+ "lang",
45156
+ "origin"
45157
+ ],
45158
+ "title": "SubtitleTrackView",
45159
+ "type": "object"
45160
+ },
45161
+ "Timing": {
45162
+ "properties": {
45163
+ "dialogue": {
45164
+ "items": {
45165
+ "$ref": "#/$defs/DialogueTiming"
45166
+ },
45167
+ "title": "Dialogue",
45168
+ "type": "array"
45169
+ },
45170
+ "audible_ranges": {
45171
+ "items": {
45172
+ "maxItems": 2,
45173
+ "minItems": 2,
45174
+ "prefixItems": [
45175
+ {
45176
+ "type": "integer"
45177
+ },
45178
+ {
45179
+ "type": "integer"
45180
+ }
45181
+ ],
45182
+ "type": "array"
45183
+ },
45184
+ "title": "Audible Ranges",
45185
+ "type": "array"
45186
+ },
45187
+ "tts_reused_from": {
45188
+ "anyOf": [
45189
+ {
45190
+ "type": "integer"
45191
+ },
45192
+ {
45193
+ "type": "null"
45194
+ }
45195
+ ],
45196
+ "default": null,
45197
+ "title": "Tts Reused From"
45198
+ }
45199
+ },
45200
+ "title": "Timing",
45201
+ "type": "object"
45202
+ },
45203
+ "YoutubeAssetSource": {
45204
+ "properties": {
45205
+ "kind": {
45206
+ "const": "asset",
45207
+ "default": "asset",
45208
+ "title": "Kind",
45209
+ "type": "string"
45210
+ },
45211
+ "asset_id": {
45212
+ "description": "BYO: \uC62C\uB9B0 \uC6D0\uBCF8 \uC601\uC0C1 \u2014 \uB0B4\uB824\uBC1B\uAE30 \uD589 0\uC6D0",
45213
+ "minLength": 1,
45214
+ "title": "Asset Id",
45215
+ "type": "string"
45216
+ },
45217
+ "start_s": {
45218
+ "anyOf": [
45219
+ {
45220
+ "minimum": 0,
45221
+ "type": "number"
45222
+ },
45223
+ {
45224
+ "type": "null"
45225
+ }
45226
+ ],
45227
+ "default": null,
45228
+ "title": "Start S"
45229
+ },
45230
+ "end_s": {
45231
+ "anyOf": [
45232
+ {
45233
+ "exclusiveMinimum": 0,
45234
+ "type": "number"
45235
+ },
45236
+ {
45237
+ "type": "null"
45238
+ }
45239
+ ],
45240
+ "default": null,
45241
+ "title": "End S"
45242
+ }
45243
+ },
45244
+ "required": [
45245
+ "asset_id"
45246
+ ],
45247
+ "title": "YoutubeAssetSource",
45248
+ "type": "object"
45249
+ },
45250
+ "YoutubeClipSpec": {
45251
+ "properties": {
45252
+ "dialogue": {
45253
+ "items": {
45254
+ "$ref": "#/$defs/DialogueLine"
45255
+ },
45256
+ "title": "Dialogue",
45257
+ "type": "array"
45258
+ },
45259
+ "narration_asset_id": {
45260
+ "anyOf": [
45261
+ {
45262
+ "minLength": 1,
45263
+ "type": "string"
45264
+ },
45265
+ {
45266
+ "type": "null"
45267
+ }
45268
+ ],
45269
+ "default": null,
45270
+ "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",
45271
+ "title": "Narration Asset Id"
45272
+ },
45273
+ "subtitles": {
45274
+ "default": true,
45275
+ "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",
45276
+ "title": "Subtitles",
45277
+ "type": "boolean",
45278
+ "x-diff": "ignore"
45279
+ },
45280
+ "host": {
45281
+ "anyOf": [
45282
+ {
45283
+ "type": "string"
45284
+ },
45285
+ {
45286
+ "type": "null"
45287
+ }
45288
+ ],
45289
+ "default": null,
45290
+ "description": "\uC9C4\uD589 \u2014 \uD5C8\uC6A9 \uC9D1\uD569\uC740 \uCE74\uD0C8\uB85C\uADF8(\uBC29\uC2DD\uBCC4). \uBAA8\uC158\uADF8\uB798\uD53D\uC740 \uD544\uC218",
45291
+ "title": "Host"
45292
+ },
45293
+ "voice_id": {
45294
+ "anyOf": [
45295
+ {
45296
+ "minLength": 1,
45297
+ "type": "string"
45298
+ },
45299
+ {
45300
+ "type": "null"
45301
+ }
45302
+ ],
45303
+ "default": null,
45304
+ "description": "host\u2208{voice,avatar} \uC774\uACE0 BYO \uC624\uB514\uC624\uAC00 \uC5C6\uC744 \uB54C \uD544\uC218",
45305
+ "title": "Voice Id"
45306
+ },
45307
+ "pip": {
45308
+ "anyOf": [
45309
+ {
45310
+ "$ref": "#/$defs/PipSpec"
45311
+ },
45312
+ {
45313
+ "type": "null"
45314
+ }
45315
+ ],
45316
+ "default": null,
45317
+ "description": "host=avatar \uC77C \uB54C \uD544\uC218"
45318
+ },
45319
+ "image_asset_id": {
45320
+ "anyOf": [
45321
+ {
45322
+ "minLength": 1,
45323
+ "type": "string"
45324
+ },
45325
+ {
45326
+ "type": "null"
45327
+ }
45328
+ ],
45329
+ "default": null,
45330
+ "description": "\uCEF7 \uC774\uBBF8\uC9C0\uB97C spec \uC5D0\uC11C \uC9C1\uC811 \uC9C0\uC815(\uC5D0\uC774\uC804\uD2B8 \uC6D0\uC0F7\uC6A9)",
45331
+ "title": "Image Asset Id"
45332
+ },
45333
+ "duration_s": {
45334
+ "anyOf": [
45335
+ {
45336
+ "exclusiveMinimum": 0,
45337
+ "maximum": 600,
45338
+ "type": "number"
45339
+ },
45340
+ {
45341
+ "type": "null"
45342
+ }
45343
+ ],
45344
+ "default": null,
45345
+ "title": "Duration S"
45346
+ },
45347
+ "mode": {
45348
+ "const": "youtube_clip",
45349
+ "default": "youtube_clip",
45350
+ "title": "Mode",
45351
+ "type": "string"
45352
+ },
45353
+ "source": {
45354
+ "discriminator": {
45355
+ "mapping": {
45356
+ "asset": "#/$defs/YoutubeAssetSource",
45357
+ "url": "#/$defs/YoutubeUrlSource"
45358
+ },
45359
+ "propertyName": "kind"
45360
+ },
45361
+ "oneOf": [
45362
+ {
45363
+ "$ref": "#/$defs/YoutubeUrlSource"
45364
+ },
45365
+ {
45366
+ "$ref": "#/$defs/YoutubeAssetSource"
45367
+ }
45368
+ ],
45369
+ "title": "Source"
45370
+ },
45371
+ "lower_source_audio": {
45372
+ "anyOf": [
45373
+ {
45374
+ "type": "boolean"
45375
+ },
45376
+ {
45377
+ "type": "null"
45378
+ }
45379
+ ],
45380
+ "default": null,
45381
+ "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",
45382
+ "title": "Lower Source Audio"
42598
45383
  }
42599
45384
  },
42600
45385
  "required": [
42601
- "code",
42602
- "message"
45386
+ "source"
42603
45387
  ],
42604
- "title": "EstimateNote",
45388
+ "title": "YoutubeClipSpec",
42605
45389
  "type": "object"
42606
45390
  },
42607
- "QuoteRow": {
45391
+ "YoutubeUrlSource": {
42608
45392
  "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",
45393
+ "kind": {
45394
+ "const": "url",
45395
+ "default": "url",
45396
+ "title": "Kind",
42626
45397
  "type": "string"
42627
45398
  },
42628
- "display_name": {
42629
- "title": "Display Name",
45399
+ "url": {
45400
+ "description": "https://youtube.com|youtu.be \uACF5\uAC1C \uC8FC\uC18C\uB9CC",
45401
+ "minLength": 1,
45402
+ "title": "Url",
42630
45403
  "type": "string"
42631
45404
  },
42632
- "krw": {
45405
+ "start_s": {
42633
45406
  "minimum": 0,
42634
- "title": "Krw",
42635
- "type": "integer"
45407
+ "title": "Start S",
45408
+ "type": "number"
42636
45409
  },
42637
- "provisional": {
42638
- "default": false,
42639
- "title": "Provisional",
42640
- "type": "boolean"
45410
+ "end_s": {
45411
+ "exclusiveMinimum": 0,
45412
+ "title": "End S",
45413
+ "type": "number"
42641
45414
  }
42642
45415
  },
42643
45416
  "required": [
42644
- "key",
42645
- "ref_type",
42646
- "units",
42647
- "unit_kind",
42648
- "display_name",
42649
- "krw"
45417
+ "url",
45418
+ "start_s",
45419
+ "end_s"
42650
45420
  ],
42651
- "title": "QuoteRow",
45421
+ "title": "YoutubeUrlSource",
42652
45422
  "type": "object"
42653
45423
  }
42654
45424
  },
42655
45425
  "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"
45426
+ "id": {
45427
+ "title": "Id",
45428
+ "type": "string"
42689
45429
  },
42690
- "mock": {
42691
- "default": false,
42692
- "title": "Mock",
42693
- "type": "boolean"
45430
+ "project_slug": {
45431
+ "title": "Project Slug",
45432
+ "type": "string"
42694
45433
  },
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)"
45434
+ "mode": {
45435
+ "enum": [
45436
+ "motion_graphic",
45437
+ "ai_video",
45438
+ "youtube_clip",
45439
+ "ai_image"
45440
+ ],
45441
+ "title": "Mode",
45442
+ "type": "string"
42727
45443
  },
42728
- "url": {
42729
- "description": "\uBD84\uC11D\uD560 \uC720\uD29C\uBE0C \uC8FC\uC18C(\uACF5\uAC1C \uC601\uC0C1)",
42730
- "minLength": 1,
42731
- "title": "Url",
45444
+ "title": {
45445
+ "default": "",
45446
+ "title": "Title",
42732
45447
  "type": "string"
42733
45448
  },
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"
45449
+ "position": {
45450
+ "anyOf": [
45451
+ {
45452
+ "type": "number"
45453
+ },
45454
+ {
45455
+ "type": "null"
45456
+ }
45457
+ ],
45458
+ "default": null,
45459
+ "description": "\uC5F0\uACB0 \uC21C\uC11C. None = \uCE94\uBC84\uC2A4\uC5D0\uC11C \uB5BC\uC5B4 \uB454 \uCEF7",
45460
+ "title": "Position"
42741
45461
  },
42742
- "confirmed_cost_krw": {
42743
- "minimum": 0,
42744
- "title": "Confirmed Cost Krw",
42745
- "type": "integer"
45462
+ "canvas": {
45463
+ "anyOf": [
45464
+ {
45465
+ "$ref": "#/$defs/CanvasPos"
45466
+ },
45467
+ {
45468
+ "type": "null"
45469
+ }
45470
+ ],
45471
+ "default": null
42746
45472
  },
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"
45473
+ "draft_spec": {
45474
+ "discriminator": {
45475
+ "mapping": {
45476
+ "ai_image": "#/$defs/AiImageSpec",
45477
+ "ai_video": "#/$defs/AiVideoSpec",
45478
+ "motion_graphic": "#/$defs/MotionGraphicSpec",
45479
+ "youtube_clip": "#/$defs/YoutubeClipSpec"
42771
45480
  },
42772
- "total_krw": {
42773
- "minimum": 0,
42774
- "title": "Total Krw",
42775
- "type": "integer"
45481
+ "propertyName": "mode"
45482
+ },
45483
+ "oneOf": [
45484
+ {
45485
+ "$ref": "#/$defs/MotionGraphicSpec"
42776
45486
  },
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"
45487
+ {
45488
+ "$ref": "#/$defs/AiVideoSpec"
42782
45489
  },
42783
- "mock": {
42784
- "default": false,
42785
- "title": "Mock",
42786
- "type": "boolean"
45490
+ {
45491
+ "$ref": "#/$defs/YoutubeClipSpec"
42787
45492
  },
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"
45493
+ {
45494
+ "$ref": "#/$defs/AiImageSpec"
42793
45495
  }
42794
- },
42795
- "required": [
42796
- "total_krw",
42797
- "rate_version"
42798
45496
  ],
42799
- "title": "Quote",
42800
- "type": "object"
45497
+ "title": "Draft Spec"
42801
45498
  },
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"
45499
+ "edit": {
45500
+ "$ref": "#/$defs/CutEdit"
45501
+ },
45502
+ "current_version": {
45503
+ "anyOf": [
45504
+ {
45505
+ "type": "integer"
42808
45506
  },
42809
- "ref_type": {
42810
- "description": "\uC6D0\uAC00\uD45C \uD0A4(credits/pricing.BASE_PRICES)",
42811
- "title": "Ref Type",
45507
+ {
45508
+ "type": "null"
45509
+ }
45510
+ ],
45511
+ "default": null,
45512
+ "description": "None = \uACC4\uD68D \uCEF7(R11)",
45513
+ "title": "Current Version"
45514
+ },
45515
+ "current_image_id": {
45516
+ "anyOf": [
45517
+ {
42812
45518
  "type": "string"
42813
45519
  },
42814
- "units": {
42815
- "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
42816
- "title": "Units",
42817
- "type": "string"
45520
+ {
45521
+ "type": "null"
45522
+ }
45523
+ ],
45524
+ "default": null,
45525
+ "title": "Current Image Id"
45526
+ },
45527
+ "images": {
45528
+ "items": {
45529
+ "$ref": "#/$defs/CutImageView"
45530
+ },
45531
+ "title": "Images",
45532
+ "type": "array"
45533
+ },
45534
+ "hook_candidates": {
45535
+ "anyOf": [
45536
+ {
45537
+ "$ref": "#/$defs/HookCandidates"
42818
45538
  },
42819
- "unit_kind": {
42820
- "title": "Unit Kind",
45539
+ {
45540
+ "type": "null"
45541
+ }
45542
+ ],
45543
+ "default": null
45544
+ },
45545
+ "versions": {
45546
+ "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
45547
+ "items": {
45548
+ "$ref": "#/$defs/CutVersionView"
45549
+ },
45550
+ "title": "Versions",
45551
+ "type": "array"
45552
+ },
45553
+ "state": {
45554
+ "enum": [
45555
+ "planned",
45556
+ "image_generating",
45557
+ "rendering",
45558
+ "ready",
45559
+ "dirty",
45560
+ "failed"
45561
+ ],
45562
+ "title": "State",
45563
+ "type": "string"
45564
+ },
45565
+ "dirty_fields": {
45566
+ "items": {
45567
+ "type": "string"
45568
+ },
45569
+ "title": "Dirty Fields",
45570
+ "type": "array"
45571
+ },
45572
+ "estimated_cost_krw": {
45573
+ "anyOf": [
45574
+ {
45575
+ "type": "integer"
45576
+ },
45577
+ {
45578
+ "type": "null"
45579
+ }
45580
+ ],
45581
+ "default": null,
45582
+ "title": "Estimated Cost Krw"
45583
+ },
45584
+ "rows": {
45585
+ "items": {
45586
+ "$ref": "#/$defs/QuoteRow"
45587
+ },
45588
+ "title": "Rows",
45589
+ "type": "array"
45590
+ },
45591
+ "blocked_reason": {
45592
+ "anyOf": [
45593
+ {
42821
45594
  "type": "string"
42822
45595
  },
42823
- "display_name": {
42824
- "title": "Display Name",
45596
+ {
45597
+ "type": "null"
45598
+ }
45599
+ ],
45600
+ "default": null,
45601
+ "title": "Blocked Reason"
45602
+ },
45603
+ "edit_adjusted": {
45604
+ "default": false,
45605
+ "title": "Edit Adjusted",
45606
+ "type": "boolean"
45607
+ },
45608
+ "active_job_id": {
45609
+ "anyOf": [
45610
+ {
42825
45611
  "type": "string"
42826
45612
  },
42827
- "krw": {
42828
- "minimum": 0,
42829
- "title": "Krw",
42830
- "type": "integer"
45613
+ {
45614
+ "type": "null"
45615
+ }
45616
+ ],
45617
+ "default": null,
45618
+ "title": "Active Job Id"
45619
+ },
45620
+ "last_job_id": {
45621
+ "anyOf": [
45622
+ {
45623
+ "type": "string"
42831
45624
  },
42832
- "provisional": {
42833
- "default": false,
42834
- "title": "Provisional",
42835
- "type": "boolean"
45625
+ {
45626
+ "type": "null"
42836
45627
  }
42837
- },
42838
- "required": [
42839
- "key",
42840
- "ref_type",
42841
- "units",
42842
- "unit_kind",
42843
- "display_name",
42844
- "krw"
42845
45628
  ],
42846
- "title": "QuoteRow",
42847
- "type": "object"
42848
- }
42849
- },
42850
- "properties": {
42851
- "job_id": {
42852
- "title": "Job Id",
42853
- "type": "string"
45629
+ "default": null,
45630
+ "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",
45631
+ "title": "Last Job Id"
42854
45632
  },
42855
- "quote": {
45633
+ "last_error": {
42856
45634
  "anyOf": [
42857
45635
  {
42858
- "$ref": "#/$defs/Quote"
45636
+ "$ref": "#/$defs/JobError"
42859
45637
  },
42860
45638
  {
42861
45639
  "type": "null"
42862
45640
  }
42863
45641
  ],
42864
- "default": null
45642
+ "default": null,
45643
+ "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
45644
  },
42866
45645
  "next_calls": {
42867
45646
  "items": {
@@ -42869,12 +45648,26 @@ var GENERATED_TOOLS = [
42869
45648
  },
42870
45649
  "title": "Next Calls",
42871
45650
  "type": "array"
45651
+ },
45652
+ "created_at": {
45653
+ "title": "Created At",
45654
+ "type": "string"
45655
+ },
45656
+ "updated_at": {
45657
+ "title": "Updated At",
45658
+ "type": "string"
42872
45659
  }
42873
45660
  },
42874
45661
  "required": [
42875
- "job_id"
45662
+ "id",
45663
+ "project_slug",
45664
+ "mode",
45665
+ "draft_spec",
45666
+ "state",
45667
+ "created_at",
45668
+ "updated_at"
42876
45669
  ],
42877
- "title": "JobAccepted",
45670
+ "title": "CutView",
42878
45671
  "type": "object"
42879
45672
  },
42880
45673
  "annotations": {
@@ -47086,6 +49879,74 @@ var GENERATED_TOOLS = [
47086
49879
  "title": "FromVersionImageRef",
47087
49880
  "type": "object"
47088
49881
  },
49882
+ "HookCandidate": {
49883
+ "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).",
49884
+ "properties": {
49885
+ "start_s": {
49886
+ "minimum": 0,
49887
+ "title": "Start S",
49888
+ "type": "number"
49889
+ },
49890
+ "end_s": {
49891
+ "exclusiveMinimum": 0,
49892
+ "title": "End S",
49893
+ "type": "number"
49894
+ },
49895
+ "title": {
49896
+ "default": "",
49897
+ "description": "\uD6C4\uD06C \uCE74\uD53C \u2014 \uACE0\uB974\uBA74 \uCEF7 \uC81C\uBAA9\uC774 \uB41C\uB2E4",
49898
+ "title": "Title",
49899
+ "type": "string"
49900
+ },
49901
+ "score": {
49902
+ "default": 0,
49903
+ "description": "\uC774 \uD0D0\uC0C9 \uC548\uC5D0\uC11C\uC758 \uC0C1\uB300 \uD6C4\uD0B9 \uAC15\uB3C4",
49904
+ "maximum": 100,
49905
+ "minimum": 0,
49906
+ "title": "Score",
49907
+ "type": "integer"
49908
+ },
49909
+ "reasoning": {
49910
+ "default": "",
49911
+ "description": "\uC65C \uC774 \uAD6C\uAC04\uC778\uC9C0 \uD55C \uC904",
49912
+ "title": "Reasoning",
49913
+ "type": "string"
49914
+ }
49915
+ },
49916
+ "required": [
49917
+ "start_s",
49918
+ "end_s"
49919
+ ],
49920
+ "title": "HookCandidate",
49921
+ "type": "object"
49922
+ },
49923
+ "HookCandidates": {
49924
+ "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.",
49925
+ "properties": {
49926
+ "url": {
49927
+ "title": "Url",
49928
+ "type": "string"
49929
+ },
49930
+ "found_at": {
49931
+ "description": "ISO 8601 \u2014 \uC5B8\uC81C \uCC3E\uC558\uB294\uAC00",
49932
+ "title": "Found At",
49933
+ "type": "string"
49934
+ },
49935
+ "items": {
49936
+ "items": {
49937
+ "$ref": "#/$defs/HookCandidate"
49938
+ },
49939
+ "title": "Items",
49940
+ "type": "array"
49941
+ }
49942
+ },
49943
+ "required": [
49944
+ "url",
49945
+ "found_at"
49946
+ ],
49947
+ "title": "HookCandidates",
49948
+ "type": "object"
49949
+ },
47089
49950
  "JobError": {
47090
49951
  "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
49952
  "properties": {
@@ -47860,6 +50721,17 @@ var GENERATED_TOOLS = [
47860
50721
  "title": "Images",
47861
50722
  "type": "array"
47862
50723
  },
50724
+ "hook_candidates": {
50725
+ "anyOf": [
50726
+ {
50727
+ "$ref": "#/$defs/HookCandidates"
50728
+ },
50729
+ {
50730
+ "type": "null"
50731
+ }
50732
+ ],
50733
+ "default": null
50734
+ },
47863
50735
  "versions": {
47864
50736
  "description": "\uC0C1\uC138 \uC870\uD68C\uC5D0\uC11C\uB9CC \uCC44\uC6B4\uB2E4",
47865
50737
  "items": {
@@ -48351,13 +51223,19 @@ var TOOL_META = {
48351
51223
  "cost": "quote",
48352
51224
  "group": "storyboard",
48353
51225
  "method": "POST",
48354
- "path": "/api/projects/{slug}/hook_scan/estimate"
51226
+ "path": "/api/projects/{slug}/cuts/{cut_id}/hook_scan/estimate"
48355
51227
  },
48356
51228
  "democut_make_hook_scan": {
48357
51229
  "cost": "charge",
48358
51230
  "group": "storyboard",
48359
51231
  "method": "POST",
48360
- "path": "/api/projects/{slug}/hook_scan"
51232
+ "path": "/api/projects/{slug}/cuts/{cut_id}/hook_scan"
51233
+ },
51234
+ "democut_pick_hook_candidate": {
51235
+ "cost": "none",
51236
+ "group": "storyboard",
51237
+ "method": "POST",
51238
+ "path": "/api/projects/{slug}/cuts/{cut_id}/hook_scan/pick"
48361
51239
  },
48362
51240
  "democut_estimate_export": {
48363
51241
  "cost": "quote",
@@ -50604,21 +53482,31 @@ function dismissProposal(a = {}, deps = {}) {
50604
53482
  };
50605
53483
  });
50606
53484
  }
53485
+ var cutPath = (slug, cutId, tail) => `/api/projects/${encodeURIComponent(slug)}/cuts/${encodeURIComponent(cutId)}${tail}`;
53486
+ function needCut(a) {
53487
+ const cutId = (a.cut_id ?? "").trim();
53488
+ if (!cutId) {
53489
+ return { isError: true, text: "cut_id \uAC00 \uD544\uC694\uD569\uB2C8\uB2E4 \u2014 democut_list_cuts \uB85C \uD655\uC778\uD558\uC138\uC694." };
53490
+ }
53491
+ return cutId;
53492
+ }
50607
53493
  function estimateHookScan(a = {}, deps = {}) {
50608
53494
  return guarded(READ_ONLY, async () => {
50609
53495
  const slug = needSlug(a);
50610
53496
  if (typeof slug !== "string") return slug;
53497
+ const cutId = needCut(a);
53498
+ if (typeof cutId !== "string") return cutId;
50611
53499
  const base = resolveBaseUrl(deps.baseUrl);
50612
53500
  const out4 = await apiRequest(
50613
53501
  base,
50614
- projectPath(slug, "/hook_scan/estimate"),
50615
- { method: "POST", body: { url: a.url, count: a.count ?? 3 } },
53502
+ cutPath(slug, cutId, "/hook_scan/estimate"),
53503
+ { method: "POST", body: { count: a.count ?? 5 } },
50616
53504
  deps
50617
53505
  );
50618
53506
  const rows = (out4.items ?? []).flatMap((item) => item.rows ?? []).map((r) => `${r.display_name || r.key} ${krw(r.krw)}`).join(", ") || "\uD589 \uC5C6\uC74C";
50619
53507
  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})`,
53508
+ `\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`,
53509
+ ` \uD6C4\uBCF4 ${a.count ?? 5}\uAC1C: \uCD5C\uB300 ${krw(out4.total_krw)} (${rows})`,
50622
53510
  // ★ 「최대」 라고 말한다 — 자막이 있으면 전사 행이 환불돼 실제 청구는 이보다 적다(승인액이 상한이다).
50623
53511
  `\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
53512
  "\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 +53521,16 @@ function makeHookScan(a = {}, deps = {}) {
50633
53521
  return guarded(SUBMITTING, async () => {
50634
53522
  const slug = needSlug(a);
50635
53523
  if (typeof slug !== "string") return slug;
53524
+ const cutId = needCut(a);
53525
+ if (typeof cutId !== "string") return cutId;
50636
53526
  const base = resolveBaseUrl(deps.baseUrl);
50637
53527
  const out4 = await apiRequest(
50638
53528
  base,
50639
- projectPath(slug, "/hook_scan"),
53529
+ cutPath(slug, cutId, "/hook_scan"),
50640
53530
  {
50641
53531
  method: "POST",
50642
53532
  body: {
50643
- url: a.url,
50644
- count: a.count ?? 3,
53533
+ count: a.count ?? 5,
50645
53534
  confirmed_cost_krw: a.confirmed_cost_krw,
50646
53535
  rate_version: a.rate_version
50647
53536
  }
@@ -50650,13 +53539,36 @@ function makeHookScan(a = {}, deps = {}) {
50650
53539
  );
50651
53540
  const lines = [
50652
53541
  `\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.",
53542
+ `\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.`,
53543
+ "\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
53544
  "\uB2E4\uC74C \uD638\uCD9C: democut_wait_jobs"
50656
53545
  ];
50657
53546
  return { text: lines.join("\n"), structured: callableStructured(out4) };
50658
53547
  });
50659
53548
  }
53549
+ function pickHookCandidate(a = {}, deps = {}) {
53550
+ return guarded(READ_ONLY, async () => {
53551
+ const slug = needSlug(a);
53552
+ if (typeof slug !== "string") return slug;
53553
+ const cutId = needCut(a);
53554
+ if (typeof cutId !== "string") return cutId;
53555
+ const base = resolveBaseUrl(deps.baseUrl);
53556
+ const out4 = await apiRequest(
53557
+ base,
53558
+ cutPath(slug, cutId, "/hook_scan/pick"),
53559
+ { method: "POST", body: { index: a.index ?? 0 } },
53560
+ deps
53561
+ );
53562
+ const src = (out4.draft_spec ?? {}).source ?? {};
53563
+ const span = `${(src.start_s ?? 0).toFixed(1)}~${(src.end_s ?? 0).toFixed(1)}\uCD08`;
53564
+ const lines = [
53565
+ `${out4.id} \uC758 \uAD6C\uAC04\uC744 ${span} \uB85C \uC815\uD588\uC2B5\uB2C8\uB2E4 \u2014 \uC81C\uBAA9: ${out4.title || "(\uC5C6\uC74C)"}`,
53566
+ "\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.",
53567
+ "\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)." : "")
53568
+ ];
53569
+ return { text: lines.join("\n"), structured: callableStructured(out4) };
53570
+ });
53571
+ }
50660
53572
  function estimateExport(a = {}, deps = {}) {
50661
53573
  return guarded(READ_ONLY, async () => {
50662
53574
  const slug = needSlug(a);
@@ -51048,6 +53960,8 @@ function dispatch(name, args, deps = {}) {
51048
53960
  return estimateHookScan(args, deps);
51049
53961
  case "democut_make_hook_scan":
51050
53962
  return makeHookScan(args, deps);
53963
+ case "democut_pick_hook_candidate":
53964
+ return pickHookCandidate(args, deps);
51051
53965
  case "democut_estimate_export":
51052
53966
  return estimateExport(args, deps);
51053
53967
  case "democut_make_export":