{
  "schema": "videonote.subtitle_normalize.v1",
  "input_cue_count": 445,
  "kept_cue_count": 445,
  "dropped_cue_count": 0,
  "duplicate_merged_count": 0,
  "overlap_repaired_count": 0,
  "rolling_prefix_removed_count": 0,
  "timing_uncertain_count": 0,
  "coverage_ratio": 0.860679,
  "gaps": [
    {
      "start": 3.466,
      "end": 3.6,
      "seconds": 0.134
    },
    {
      "start": 7.0,
      "end": 7.066,
      "seconds": 0.066
    },
    {
      "start": 10.133,
      "end": 10.4,
      "seconds": 0.267
    },
    {
      "start": 11.333,
      "end": 11.533,
      "seconds": 0.2
    },
    {
      "start": 12.7,
      "end": 12.766,
      "seconds": 0.066
    },
    {
      "start": 15.0,
      "end": 15.733,
      "seconds": 0.733
    },
    {
      "start": 18.9,
      "end": 19.066,
      "seconds": 0.166
    },
    {
      "start": 22.2,
      "end": 23.666,
      "seconds": 1.466
    },
    {
      "start": 26.466,
      "end": 26.533,
      "seconds": 0.067
    },
    {
      "start": 27.966,
      "end": 28.266,
      "seconds": 0.3
    },
    {
      "start": 32.4,
      "end": 32.933,
      "seconds": 0.533
    },
    {
      "start": 39.266,
      "end": 39.466,
      "seconds": 0.2
    },
    {
      "start": 42.066,
      "end": 42.366,
      "seconds": 0.3
    },
    {
      "start": 45.9,
      "end": 46.533,
      "seconds": 0.633
    },
    {
      "start": 49.133,
      "end": 49.266,
      "seconds": 0.133
    },
    {
      "start": 52.166,
      "end": 52.3,
      "seconds": 0.134
    },
    {
      "start": 53.566,
      "end": 53.766,
      "seconds": 0.2
    },
    {
      "start": 57.066,
      "end": 58.4,
      "seconds": 1.334
    },
    {
      "start": 61.966,
      "end": 62.0,
      "seconds": 0.034
    },
    {
      "start": 62.866,
      "end": 62.9,
      "seconds": 0.034
    },
    {
      "start": 64.733,
      "end": 64.8,
      "seconds": 0.067
    },
    {
      "start": 66.133,
      "end": 66.366,
      "seconds": 0.233
    },
    {
      "start": 70.766,
      "end": 70.8,
      "seconds": 0.034
    },
    {
      "start": 74.933,
      "end": 77.666,
      "seconds": 2.733
    },
    {
      "start": 81.066,
      "end": 82.066,
      "seconds": 1.0
    },
    {
      "start": 83.3,
      "end": 83.4,
      "seconds": 0.1
    },
    {
      "start": 85.066,
      "end": 85.133,
      "seconds": 0.067
    },
    {
      "start": 91.666,
      "end": 92.0,
      "seconds": 0.334
    },
    {
      "start": 95.066,
      "end": 95.1,
      "seconds": 0.034
    },
    {
      "start": 97.5,
      "end": 97.866,
      "seconds": 0.366
    },
    {
      "start": 100.8,
      "end": 101.0,
      "seconds": 0.2
    },
    {
      "start": 104.9,
      "end": 105.1,
      "seconds": 0.2
    },
    {
      "start": 108.4,
      "end": 108.866,
      "seconds": 0.466
    },
    {
      "start": 113.266,
      "end": 113.4,
      "seconds": 0.134
    },
    {
      "start": 115.266,
      "end": 115.5,
      "seconds": 0.234
    },
    {
      "start": 119.9,
      "end": 120.6,
      "seconds": 0.7
    },
    {
      "start": 124.266,
      "end": 124.3,
      "seconds": 0.034
    },
    {
      "start": 126.466,
      "end": 126.666,
      "seconds": 0.2
    },
    {
      "start": 128.1,
      "end": 128.7,
      "seconds": 0.6
    },
    {
      "start": 131.8,
      "end": 132.066,
      "seconds": 0.266
    },
    {
      "start": 134.333,
      "end": 134.5,
      "seconds": 0.167
    },
    {
      "start": 137.466,
      "end": 137.6,
      "seconds": 0.134
    },
    {
      "start": 139.766,
      "end": 140.166,
      "seconds": 0.4
    },
    {
      "start": 141.233,
      "end": 142.9,
      "seconds": 1.667
    },
    {
      "start": 146.166,
      "end": 146.3,
      "seconds": 0.134
    },
    {
      "start": 149.966,
      "end": 150.5,
      "seconds": 0.534
    },
    {
      "start": 153.666,
      "end": 153.733,
      "seconds": 0.067
    },
    {
      "start": 155.9,
      "end": 156.1,
      "seconds": 0.2
    },
    {
      "start": 158.4,
      "end": 158.966,
      "seconds": 0.566
    },
    {
      "start": 161.666,
      "end": 162.8,
      "seconds": 1.134
    },
    {
      "start": 165.666,
      "end": 165.933,
      "seconds": 0.267
    },
    {
      "start": 170.166,
      "end": 170.3,
      "seconds": 0.134
    },
    {
      "start": 173.2,
      "end": 173.6,
      "seconds": 0.4
    },
    {
      "start": 176.4,
      "end": 176.533,
      "seconds": 0.133
    },
    {
      "start": 178.266,
      "end": 178.333,
      "seconds": 0.067
    },
    {
      "start": 179.866,
      "end": 180.266,
      "seconds": 0.4
    },
    {
      "start": 183.666,
      "end": 184.133,
      "seconds": 0.467
    },
    {
      "start": 186.266,
      "end": 186.366,
      "seconds": 0.1
    },
    {
      "start": 188.366,
      "end": 188.9,
      "seconds": 0.534
    },
    {
      "start": 190.0,
      "end": 190.2,
      "seconds": 0.2
    },
    {
      "start": 191.533,
      "end": 191.666,
      "seconds": 0.133
    },
    {
      "start": 193.333,
      "end": 193.533,
      "seconds": 0.2
    },
    {
      "start": 194.9,
      "end": 195.133,
      "seconds": 0.233
    },
    {
      "start": 196.066,
      "end": 196.533,
      "seconds": 0.467
    },
    {
      "start": 197.666,
      "end": 198.133,
      "seconds": 0.467
    },
    {
      "start": 200.933,
      "end": 201.8,
      "seconds": 0.867
    },
    {
      "start": 206.133,
      "end": 210.366,
      "seconds": 4.233
    },
    {
      "start": 213.2,
      "end": 215.166,
      "seconds": 1.966
    },
    {
      "start": 219.133,
      "end": 219.7,
      "seconds": 0.567
    },
    {
      "start": 222.166,
      "end": 222.766,
      "seconds": 0.6
    },
    {
      "start": 225.533,
      "end": 225.9,
      "seconds": 0.367
    },
    {
      "start": 229.133,
      "end": 229.2,
      "seconds": 0.067
    },
    {
      "start": 231.133,
      "end": 232.1,
      "seconds": 0.967
    },
    {
      "start": 236.8,
      "end": 237.2,
      "seconds": 0.4
    },
    {
      "start": 240.333,
      "end": 240.733,
      "seconds": 0.4
    },
    {
      "start": 242.666,
      "end": 243.2,
      "seconds": 0.534
    },
    {
      "start": 248.0,
      "end": 248.866,
      "seconds": 0.866
    },
    {
      "start": 253.766,
      "end": 254.533,
      "seconds": 0.767
    },
    {
      "start": 256.166,
      "end": 256.566,
      "seconds": 0.4
    },
    {
      "start": 260.0,
      "end": 260.466,
      "seconds": 0.466
    },
    {
      "start": 262.166,
      "end": 262.333,
      "seconds": 0.167
    },
    {
      "start": 264.733,
      "end": 265.4,
      "seconds": 0.667
    },
    {
      "start": 267.766,
      "end": 268.2,
      "seconds": 0.434
    },
    {
      "start": 278.133,
      "end": 279.933,
      "seconds": 1.8
    },
    {
      "start": 285.266,
      "end": 285.366,
      "seconds": 0.1
    },
    {
      "start": 286.166,
      "end": 286.8,
      "seconds": 0.634
    },
    {
      "start": 289.5,
      "end": 289.866,
      "seconds": 0.366
    },
    {
      "start": 292.966,
      "end": 293.1,
      "seconds": 0.134
    },
    {
      "start": 295.5,
      "end": 295.533,
      "seconds": 0.033
    },
    {
      "start": 296.766,
      "end": 297.566,
      "seconds": 0.8
    },
    {
      "start": 299.6,
      "end": 299.7,
      "seconds": 0.1
    },
    {
      "start": 300.933,
      "end": 301.066,
      "seconds": 0.133
    },
    {
      "start": 304.766,
      "end": 305.0,
      "seconds": 0.234
    },
    {
      "start": 306.066,
      "end": 306.133,
      "seconds": 0.067
    },
    {
      "start": 308.9,
      "end": 308.966,
      "seconds": 0.066
    },
    {
      "start": 314.3,
      "end": 317.4,
      "seconds": 3.1
    },
    {
      "start": 320.333,
      "end": 320.466,
      "seconds": 0.133
    },
    {
      "start": 322.166,
      "end": 322.3,
      "seconds": 0.134
    },
    {
      "start": 324.566,
      "end": 325.4,
      "seconds": 0.834
    },
    {
      "start": 329.866,
      "end": 330.3,
      "seconds": 0.434
    },
    {
      "start": 332.533,
      "end": 332.566,
      "seconds": 0.033
    },
    {
      "start": 333.866,
      "end": 334.0,
      "seconds": 0.134
    },
    {
      "start": 335.333,
      "end": 335.6,
      "seconds": 0.267
    },
    {
      "start": 337.766,
      "end": 337.8,
      "seconds": 0.034
    },
    {
      "start": 339.6,
      "end": 342.166,
      "seconds": 2.566
    },
    {
      "start": 343.533,
      "end": 343.8,
      "seconds": 0.267
    },
    {
      "start": 344.733,
      "end": 345.0,
      "seconds": 0.267
    },
    {
      "start": 348.533,
      "end": 348.866,
      "seconds": 0.333
    },
    {
      "start": 351.9,
      "end": 352.0,
      "seconds": 0.1
    },
    {
      "start": 355.666,
      "end": 356.133,
      "seconds": 0.467
    },
    {
      "start": 360.366,
      "end": 360.933,
      "seconds": 0.567
    },
    {
      "start": 365.533,
      "end": 366.866,
      "seconds": 1.333
    },
    {
      "start": 370.733,
      "end": 370.866,
      "seconds": 0.133
    },
    {
      "start": 374.066,
      "end": 374.966,
      "seconds": 0.9
    },
    {
      "start": 378.966,
      "end": 379.0,
      "seconds": 0.034
    },
    {
      "start": 383.266,
      "end": 383.866,
      "seconds": 0.6
    },
    {
      "start": 386.166,
      "end": 386.7,
      "seconds": 0.534
    },
    {
      "start": 390.266,
      "end": 390.466,
      "seconds": 0.2
    },
    {
      "start": 393.6,
      "end": 393.866,
      "seconds": 0.266
    },
    {
      "start": 395.666,
      "end": 396.0,
      "seconds": 0.334
    },
    {
      "start": 398.766,
      "end": 398.9,
      "seconds": 0.134
    },
    {
      "start": 400.366,
      "end": 400.666,
      "seconds": 0.3
    },
    {
      "start": 401.766,
      "end": 402.533,
      "seconds": 0.767
    },
    {
      "start": 404.3,
      "end": 404.5,
      "seconds": 0.2
    },
    {
      "start": 406.966,
      "end": 407.066,
      "seconds": 0.1
    },
    {
      "start": 411.066,
      "end": 411.733,
      "seconds": 0.667
    },
    {
      "start": 415.533,
      "end": 416.533,
      "seconds": 1.0
    },
    {
      "start": 420.0,
      "end": 420.566,
      "seconds": 0.566
    },
    {
      "start": 421.933,
      "end": 421.966,
      "seconds": 0.033
    },
    {
      "start": 423.3,
      "end": 424.3,
      "seconds": 1.0
    },
    {
      "start": 426.7,
      "end": 427.066,
      "seconds": 0.366
    },
    {
      "start": 427.866,
      "end": 427.9,
      "seconds": 0.034
    },
    {
      "start": 431.0,
      "end": 431.066,
      "seconds": 0.066
    },
    {
      "start": 432.5,
      "end": 433.0,
      "seconds": 0.5
    },
    {
      "start": 437.7,
      "end": 438.066,
      "seconds": 0.366
    },
    {
      "start": 443.1,
      "end": 443.9,
      "seconds": 0.8
    },
    {
      "start": 445.266,
      "end": 445.6,
      "seconds": 0.334
    },
    {
      "start": 448.333,
      "end": 448.866,
      "seconds": 0.533
    },
    {
      "start": 450.533,
      "end": 450.6,
      "seconds": 0.067
    },
    {
      "start": 451.866,
      "end": 452.133,
      "seconds": 0.267
    },
    {
      "start": 454.866,
      "end": 455.066,
      "seconds": 0.2
    },
    {
      "start": 456.533,
      "end": 456.566,
      "seconds": 0.033
    },
    {
      "start": 458.766,
      "end": 459.166,
      "seconds": 0.4
    },
    {
      "start": 461.733,
      "end": 461.966,
      "seconds": 0.233
    },
    {
      "start": 463.133,
      "end": 463.3,
      "seconds": 0.167
    },
    {
      "start": 464.7,
      "end": 465.4,
      "seconds": 0.7
    },
    {
      "start": 468.366,
      "end": 468.9,
      "seconds": 0.534
    },
    {
      "start": 470.3,
      "end": 470.5,
      "seconds": 0.2
    },
    {
      "start": 475.333,
      "end": 475.5,
      "seconds": 0.167
    },
    {
      "start": 477.7,
      "end": 477.9,
      "seconds": 0.2
    },
    {
      "start": 479.733,
      "end": 479.766,
      "seconds": 0.033
    },
    {
      "start": 481.8,
      "end": 482.066,
      "seconds": 0.266
    },
    {
      "start": 483.8,
      "end": 484.0,
      "seconds": 0.2
    },
    {
      "start": 485.866,
      "end": 486.3,
      "seconds": 0.434
    },
    {
      "start": 488.4,
      "end": 488.5,
      "seconds": 0.1
    },
    {
      "start": 490.566,
      "end": 491.533,
      "seconds": 0.967
    },
    {
      "start": 498.166,
      "end": 500.4,
      "seconds": 2.234
    },
    {
      "start": 505.7,
      "end": 506.2,
      "seconds": 0.5
    },
    {
      "start": 507.6,
      "end": 507.733,
      "seconds": 0.133
    },
    {
      "start": 510.133,
      "end": 510.5,
      "seconds": 0.367
    },
    {
      "start": 513.733,
      "end": 513.8,
      "seconds": 0.067
    },
    {
      "start": 515.9,
      "end": 516.0,
      "seconds": 0.1
    },
    {
      "start": 517.933,
      "end": 518.4,
      "seconds": 0.467
    },
    {
      "start": 522.8,
      "end": 523.0,
      "seconds": 0.2
    },
    {
      "start": 524.3,
      "end": 526.866,
      "seconds": 2.566
    },
    {
      "start": 529.4,
      "end": 529.533,
      "seconds": 0.133
    },
    {
      "start": 531.533,
      "end": 531.8,
      "seconds": 0.267
    },
    {
      "start": 534.9,
      "end": 535.133,
      "seconds": 0.233
    },
    {
      "start": 536.3,
      "end": 536.7,
      "seconds": 0.4
    },
    {
      "start": 539.5,
      "end": 540.1,
      "seconds": 0.6
    },
    {
      "start": 541.5,
      "end": 541.533,
      "seconds": 0.033
    },
    {
      "start": 542.933,
      "end": 543.266,
      "seconds": 0.333
    },
    {
      "start": 544.666,
      "end": 545.066,
      "seconds": 0.4
    },
    {
      "start": 548.166,
      "end": 548.366,
      "seconds": 0.2
    },
    {
      "start": 550.866,
      "end": 550.933,
      "seconds": 0.067
    },
    {
      "start": 552.666,
      "end": 553.4,
      "seconds": 0.734
    },
    {
      "start": 556.1,
      "end": 556.133,
      "seconds": 0.033
    },
    {
      "start": 557.066,
      "end": 557.4,
      "seconds": 0.334
    },
    {
      "start": 559.966,
      "end": 561.333,
      "seconds": 1.367
    },
    {
      "start": 563.5,
      "end": 563.566,
      "seconds": 0.066
    },
    {
      "start": 566.966,
      "end": 567.2,
      "seconds": 0.234
    },
    {
      "start": 571.6,
      "end": 571.666,
      "seconds": 0.066
    },
    {
      "start": 575.6,
      "end": 576.3,
      "seconds": 0.7
    },
    {
      "start": 578.7,
      "end": 578.733,
      "seconds": 0.033
    },
    {
      "start": 580.7,
      "end": 580.966,
      "seconds": 0.266
    },
    {
      "start": 583.366,
      "end": 583.533,
      "seconds": 0.167
    },
    {
      "start": 586.666,
      "end": 586.7,
      "seconds": 0.034
    },
    {
      "start": 590.066,
      "end": 590.2,
      "seconds": 0.134
    },
    {
      "start": 591.3,
      "end": 591.766,
      "seconds": 0.466
    },
    {
      "start": 599.533,
      "end": 601.333,
      "seconds": 1.8
    },
    {
      "start": 603.5,
      "end": 603.7,
      "seconds": 0.2
    },
    {
      "start": 604.766,
      "end": 604.9,
      "seconds": 0.134
    },
    {
      "start": 606.5,
      "end": 606.8,
      "seconds": 0.3
    },
    {
      "start": 608.8,
      "end": 608.866,
      "seconds": 0.066
    },
    {
      "start": 610.9,
      "end": 610.966,
      "seconds": 0.066
    },
    {
      "start": 612.566,
      "end": 612.9,
      "seconds": 0.334
    },
    {
      "start": 618.266,
      "end": 618.666,
      "seconds": 0.4
    },
    {
      "start": 622.0,
      "end": 622.1,
      "seconds": 0.1
    },
    {
      "start": 623.966,
      "end": 624.133,
      "seconds": 0.167
    },
    {
      "start": 625.966,
      "end": 626.133,
      "seconds": 0.167
    },
    {
      "start": 627.7,
      "end": 629.466,
      "seconds": 1.766
    },
    {
      "start": 631.7,
      "end": 632.2,
      "seconds": 0.5
    },
    {
      "start": 635.266,
      "end": 635.366,
      "seconds": 0.1
    },
    {
      "start": 640.666,
      "end": 640.966,
      "seconds": 0.3
    },
    {
      "start": 643.2,
      "end": 643.666,
      "seconds": 0.466
    },
    {
      "start": 645.933,
      "end": 646.1,
      "seconds": 0.167
    },
    {
      "start": 650.766,
      "end": 650.8,
      "seconds": 0.034
    },
    {
      "start": 653.466,
      "end": 653.866,
      "seconds": 0.4
    },
    {
      "start": 655.933,
      "end": 655.966,
      "seconds": 0.033
    },
    {
      "start": 657.7,
      "end": 658.466,
      "seconds": 0.766
    },
    {
      "start": 660.266,
      "end": 660.4,
      "seconds": 0.134
    },
    {
      "start": 662.6,
      "end": 663.1,
      "seconds": 0.5
    },
    {
      "start": 665.266,
      "end": 666.666,
      "seconds": 1.4
    },
    {
      "start": 668.5,
      "end": 668.666,
      "seconds": 0.166
    },
    {
      "start": 670.766,
      "end": 670.966,
      "seconds": 0.2
    },
    {
      "start": 674.866,
      "end": 675.966,
      "seconds": 1.1
    },
    {
      "start": 679.0,
      "end": 679.066,
      "seconds": 0.066
    },
    {
      "start": 681.133,
      "end": 681.2,
      "seconds": 0.067
    },
    {
      "start": 683.666,
      "end": 684.466,
      "seconds": 0.8
    },
    {
      "start": 688.7,
      "end": 688.766,
      "seconds": 0.066
    },
    {
      "start": 692.466,
      "end": 693.5,
      "seconds": 1.034
    },
    {
      "start": 694.733,
      "end": 694.9,
      "seconds": 0.167
    },
    {
      "start": 696.166,
      "end": 696.733,
      "seconds": 0.567
    },
    {
      "start": 699.666,
      "end": 699.733,
      "seconds": 0.067
    },
    {
      "start": 703.866,
      "end": 703.9,
      "seconds": 0.034
    },
    {
      "start": 705.733,
      "end": 706.7,
      "seconds": 0.967
    },
    {
      "start": 709.9,
      "end": 710.6,
      "seconds": 0.7
    },
    {
      "start": 712.466,
      "end": 712.5,
      "seconds": 0.034
    },
    {
      "start": 713.566,
      "end": 713.9,
      "seconds": 0.334
    },
    {
      "start": 719.1,
      "end": 719.9,
      "seconds": 0.8
    },
    {
      "start": 722.5,
      "end": 722.733,
      "seconds": 0.233
    },
    {
      "start": 728.9,
      "end": 729.4,
      "seconds": 0.5
    },
    {
      "start": 730.6,
      "end": 731.1,
      "seconds": 0.5
    },
    {
      "start": 733.3,
      "end": 733.533,
      "seconds": 0.233
    },
    {
      "start": 736.333,
      "end": 736.766,
      "seconds": 0.433
    },
    {
      "start": 738.766,
      "end": 738.8,
      "seconds": 0.034
    },
    {
      "start": 746.133,
      "end": 746.666,
      "seconds": 0.533
    },
    {
      "start": 747.766,
      "end": 748.533,
      "seconds": 0.767
    },
    {
      "start": 755.966,
      "end": 756.066,
      "seconds": 0.1
    },
    {
      "start": 760.4,
      "end": 760.733,
      "seconds": 0.333
    },
    {
      "start": 763.066,
      "end": 763.5,
      "seconds": 0.434
    },
    {
      "start": 767.533,
      "end": 768.266,
      "seconds": 0.733
    },
    {
      "start": 769.2,
      "end": 769.866,
      "seconds": 0.666
    },
    {
      "start": 771.133,
      "end": 771.533,
      "seconds": 0.4
    },
    {
      "start": 773.733,
      "end": 773.766,
      "seconds": 0.033
    },
    {
      "start": 776.733,
      "end": 777.133,
      "seconds": 0.4
    },
    {
      "start": 781.3,
      "end": 781.466,
      "seconds": 0.166
    },
    {
      "start": 783.366,
      "end": 783.5,
      "seconds": 0.134
    },
    {
      "start": 786.766,
      "end": 787.166,
      "seconds": 0.4
    },
    {
      "start": 789.166,
      "end": 790.1,
      "seconds": 0.934
    },
    {
      "start": 791.966,
      "end": 792.866,
      "seconds": 0.9
    },
    {
      "start": 794.866,
      "end": 794.966,
      "seconds": 0.1
    },
    {
      "start": 797.4,
      "end": 797.7,
      "seconds": 0.3
    },
    {
      "start": 799.666,
      "end": 799.766,
      "seconds": 0.1
    },
    {
      "start": 801.766,
      "end": 802.333,
      "seconds": 0.567
    },
    {
      "start": 804.0,
      "end": 804.133,
      "seconds": 0.133
    },
    {
      "start": 808.966,
      "end": 809.5,
      "seconds": 0.534
    },
    {
      "start": 816.133,
      "end": 816.466,
      "seconds": 0.333
    },
    {
      "start": 818.466,
      "end": 818.566,
      "seconds": 0.1
    },
    {
      "start": 820.466,
      "end": 820.666,
      "seconds": 0.2
    },
    {
      "start": 822.6,
      "end": 822.7,
      "seconds": 0.1
    },
    {
      "start": 825.266,
      "end": 827.2,
      "seconds": 1.934
    },
    {
      "start": 829.966,
      "end": 830.133,
      "seconds": 0.167
    },
    {
      "start": 831.533,
      "end": 831.6,
      "seconds": 0.067
    },
    {
      "start": 836.9,
      "end": 838.766,
      "seconds": 1.866
    },
    {
      "start": 840.266,
      "end": 840.333,
      "seconds": 0.067
    },
    {
      "start": 842.1,
      "end": 842.266,
      "seconds": 0.166
    },
    {
      "start": 847.1,
      "end": 847.3,
      "seconds": 0.2
    },
    {
      "start": 849.5,
      "end": 850.2,
      "seconds": 0.7
    },
    {
      "start": 852.566,
      "end": 852.766,
      "seconds": 0.2
    },
    {
      "start": 854.1,
      "end": 854.7,
      "seconds": 0.6
    },
    {
      "start": 857.533,
      "end": 857.766,
      "seconds": 0.233
    },
    {
      "start": 859.466,
      "end": 861.133,
      "seconds": 1.667
    },
    {
      "start": 867.466,
      "end": 867.566,
      "seconds": 0.1
    },
    {
      "start": 871.1,
      "end": 871.3,
      "seconds": 0.2
    },
    {
      "start": 872.966,
      "end": 873.1,
      "seconds": 0.134
    },
    {
      "start": 878.933,
      "end": 879.0,
      "seconds": 0.067
    },
    {
      "start": 881.9,
      "end": 881.966,
      "seconds": 0.066
    },
    {
      "start": 884.266,
      "end": 884.3,
      "seconds": 0.034
    },
    {
      "start": 887.733,
      "end": 888.166,
      "seconds": 0.433
    },
    {
      "start": 890.766,
      "end": 891.0,
      "seconds": 0.234
    },
    {
      "start": 896.7,
      "end": 896.766,
      "seconds": 0.066
    },
    {
      "start": 899.166,
      "end": 899.5,
      "seconds": 0.334
    },
    {
      "start": 902.266,
      "end": 902.4,
      "seconds": 0.134
    },
    {
      "start": 906.533,
      "end": 906.8,
      "seconds": 0.267
    },
    {
      "start": 909.6,
      "end": 909.733,
      "seconds": 0.133
    },
    {
      "start": 911.666,
      "end": 912.133,
      "seconds": 0.467
    },
    {
      "start": 913.9,
      "end": 914.5,
      "seconds": 0.6
    },
    {
      "start": 916.866,
      "end": 916.9,
      "seconds": 0.034
    },
    {
      "start": 918.8,
      "end": 920.0,
      "seconds": 1.2
    },
    {
      "start": 924.366,
      "end": 924.866,
      "seconds": 0.5
    },
    {
      "start": 927.133,
      "end": 927.366,
      "seconds": 0.233
    },
    {
      "start": 931.9,
      "end": 932.066,
      "seconds": 0.166
    },
    {
      "start": 933.2,
      "end": 933.3,
      "seconds": 0.1
    },
    {
      "start": 936.733,
      "end": 936.9,
      "seconds": 0.167
    },
    {
      "start": 938.733,
      "end": 939.7,
      "seconds": 0.967
    },
    {
      "start": 941.766,
      "end": 942.0,
      "seconds": 0.234
    },
    {
      "start": 946.5,
      "end": 946.566,
      "seconds": 0.066
    },
    {
      "start": 948.2,
      "end": 948.266,
      "seconds": 0.066
    }
  ],
  "issues": [],
  "cues": [
    {
      "id": 0,
      "start": 1.8,
      "end": 3.466,
      "text": "大家好我是小木头",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 1,
      "start": 3.6,
      "end": 4.366,
      "text": "上一期视频",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 2,
      "start": 4.366,
      "end": 7.0,
      "text": "我们用 OpenAI 官方托管的沙箱环境",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 3,
      "start": 7.066,
      "end": 9.0,
      "text": "把 Agents API 跑通了",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 4,
      "start": 9.0,
      "end": 10.133,
      "text": "创建了 session",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 5,
      "start": 10.4,
      "end": 11.333,
      "text": "跑了命令",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 6,
      "start": 11.533,
      "end": 12.7,
      "text": "下载了 artifact",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 7,
      "start": 12.766,
      "end": 15.0,
      "text": "在任务执行中也加载了 Skill",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 8,
      "start": 15.733,
      "end": 17.466,
      "text": "官方托管的沙箱环境",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 9,
      "start": 17.466,
      "end": 18.9,
      "text": "只是执行环境的一种",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 10,
      "start": 19.066,
      "end": 20.533,
      "text": "Agents API 还支持另一种",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 11,
      "start": 20.533,
      "end": 22.2,
      "text": "环境类型叫 self_hosted",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 12,
      "start": 23.666,
      "end": 25.066,
      "text": "执行器可以跑在咱们",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 13,
      "start": 25.066,
      "end": 26.466,
      "text": "自己的基础设施里",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 14,
      "start": 26.533,
      "end": 27.966,
      "text": "OpenAI 只负责调度",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 15,
      "start": 28.266,
      "end": 30.166,
      "text": "这一期我分享一个刚刚",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 16,
      "start": 30.166,
      "end": 32.4,
      "text": "开源的小项目叫 apple-sandbox",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 17,
      "start": 32.933,
      "end": 35.2,
      "text": "它用 Apple 官方的 container 工具",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 18,
      "start": 35.2,
      "end": 37.366,
      "text": "在 Mac 上给每个 session 起一个",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 19,
      "start": 37.366,
      "end": 39.266,
      "text": "独立的轻量级的虚拟机",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 20,
      "start": 39.466,
      "end": 42.066,
      "text": "把 Agents API 的执行器跑在这里面",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 21,
      "start": 42.366,
      "end": 43.466,
      "text": "不需要云账号",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 22,
      "start": 43.466,
      "end": 44.733,
      "text": "不需要公网地址",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 23,
      "start": 44.733,
      "end": 45.9,
      "text": "也不需要 Docker",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 24,
      "start": 46.533,
      "end": 49.133,
      "text": "项目已经做过端到端的验证",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 25,
      "start": 49.266,
      "end": 52.166,
      "text": "在测试中能够看到真实的 session 的创建",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 26,
      "start": 52.3,
      "end": 53.566,
      "text": "真实的任务执行",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 27,
      "start": 53.766,
      "end": 55.333,
      "text": "结果文件也能够直接",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 28,
      "start": 55.333,
      "end": 57.066,
      "text": "落到咱们本机的磁盘上",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 29,
      "start": 58.4,
      "end": 60.5,
      "text": "今天的内容咱们分三块吧",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 30,
      "start": 60.5,
      "end": 61.966,
      "text": "先介绍这个项目是什么",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 31,
      "start": 62.0,
      "end": 62.866,
      "text": "架构是什么",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 32,
      "start": 62.9,
      "end": 64.733,
      "text": "然后重点说说它和 Agents",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 33,
      "start": 64.8,
      "end": 66.133,
      "text": "API 之间的连接方式",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 34,
      "start": 66.366,
      "end": 68.7,
      "text": "尤其是没有公网的地址的情况下",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 35,
      "start": 68.7,
      "end": 70.766,
      "text": "它是怎么和 OpenAI 协同工作的",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 36,
      "start": 70.8,
      "end": 72.966,
      "text": "最后用发布版本从安装到",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 37,
      "start": 72.966,
      "end": 74.933,
      "text": "跑任务完整的演示一遍",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 38,
      "start": 77.666,
      "end": 79.733,
      "text": "apple-sandbox 是一个用 Go 语言",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 39,
      "start": 79.733,
      "end": 81.066,
      "text": "编写的命令行工具",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 40,
      "start": 82.066,
      "end": 83.3,
      "text": "没有常驻进程",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 41,
      "start": 83.4,
      "end": 85.066,
      "text": "目前呢也没有守护程序",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 42,
      "start": 85.133,
      "end": 86.133,
      "text": "它只做一件事情",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 43,
      "start": 86.133,
      "end": 89.866,
      "text": "把 OpenAI 的 codex exec-server 这个执行器",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 44,
      "start": 89.866,
      "end": 91.666,
      "text": "跑进一个隔离的虚拟机里",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 45,
      "start": 92.0,
      "end": 95.066,
      "text": "底层用的是 Apple 去年开源的 container 项目",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 46,
      "start": 95.1,
      "end": 97.5,
      "text": "它和 Docker 最大的区别是隔离级别",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 47,
      "start": 97.866,
      "end": 100.8,
      "text": "Docker 上所有容器共享一个 Linux 内核",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 48,
      "start": 101.0,
      "end": 102.766,
      "text": "Apple container 是每个容器单独",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 49,
      "start": 102.766,
      "end": 104.9,
      "text": "起一个轻量级的 Linux 虚拟机",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 50,
      "start": 105.1,
      "end": 108.4,
      "text": "基于 macOS 自带的 Virtualization.framework",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 51,
      "start": 108.866,
      "end": 110.866,
      "text": "所以在 apple-sandbox 里面",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 52,
      "start": 110.866,
      "end": 113.266,
      "text": "一个 session 就是一个 OCI 容器",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 53,
      "start": 113.4,
      "end": 115.266,
      "text": "也就是一台独立的虚拟机",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 54,
      "start": 115.5,
      "end": 118.1,
      "text": "agent 在里面装软件跑脚本",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 55,
      "start": 118.1,
      "end": 119.9,
      "text": "都不会离开这台虚拟机",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 56,
      "start": 120.6,
      "end": 122.9,
      "text": "从下往上来看看整个结构",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 57,
      "start": 122.9,
      "end": 124.266,
      "text": "目前呢是 4 层",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 58,
      "start": 124.3,
      "end": 126.466,
      "text": "最底下是 Apple Silicon 的 Mac",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 59,
      "start": 126.666,
      "end": 128.1,
      "text": "装好 container 工具",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 60,
      "start": 128.7,
      "end": 130.6,
      "text": "执行 container system start 把",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 61,
      "start": 130.6,
      "end": 131.8,
      "text": "它的服务启动起来",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 62,
      "start": 132.066,
      "end": 134.333,
      "text": "往上一层是 Apple container 本身",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 63,
      "start": 134.5,
      "end": 137.466,
      "text": "负责从 OCI 镜像启动虚拟机",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 64,
      "start": 137.6,
      "end": 139.766,
      "text": "再往上是执行器的镜像",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 65,
      "start": 140.166,
      "end": 141.233,
      "text": "基于 node 22 的精简版",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 66,
      "start": 142.9,
      "end": 146.166,
      "text": "安装了 CA 证书和 codex 这个 npm 包",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 67,
      "start": 146.3,
      "end": 149.966,
      "text": "入口脚本里面执行了 codex exec-server",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 68,
      "start": 150.5,
      "end": 153.666,
      "text": "最上面才是 apple-sandbox 这个 CLI",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 69,
      "start": 153.733,
      "end": 155.9,
      "text": "它负责创建工作目录",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 70,
      "start": 156.1,
      "end": 157.2,
      "text": "注入环境变量",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 71,
      "start": 157.2,
      "end": 158.4,
      "text": "调用 container run",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 72,
      "start": 158.966,
      "end": 160.0,
      "text": "然后呢就退出",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 73,
      "start": 160.0,
      "end": 161.666,
      "text": "把虚拟机留在后台跑",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 74,
      "start": 162.8,
      "end": 165.666,
      "text": "有一个设计方面的细节需要单独聊聊",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 75,
      "start": 165.933,
      "end": 168.666,
      "text": "每个 session 在本机的 sandboxes",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 76,
      "start": 168.666,
      "end": 170.166,
      "text": "目录下有一个自己的子目录",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 77,
      "start": 170.3,
      "end": 173.2,
      "text": "直接挂载成虚拟机里的 /workspace",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 78,
      "start": 173.6,
      "end": 174.8,
      "text": "所以文件进出不需要",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 79,
      "start": 174.8,
      "end": 176.4,
      "text": "任何上传下载接口",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 80,
      "start": 176.533,
      "end": 178.266,
      "text": "往那个目录里放一个文件",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 81,
      "start": 178.333,
      "end": 179.866,
      "text": "虚拟机里马上就能看到",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 82,
      "start": 180.266,
      "end": 181.8,
      "text": "agent 写出来的结果",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 83,
      "start": 181.8,
      "end": 183.666,
      "text": "本机磁盘上也能马上读到",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 84,
      "start": 184.133,
      "end": 186.266,
      "text": "虚拟机是随时可以销毁的",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 85,
      "start": 186.366,
      "end": 188.366,
      "text": "磁盘上这个目录才是真正的状态",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 86,
      "start": 188.9,
      "end": 190.0,
      "text": "命令一共 8 个",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 87,
      "start": 190.2,
      "end": 191.533,
      "text": "doctor 检查环境",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 88,
      "start": 191.666,
      "end": 193.333,
      "text": "build 构建执行器镜像",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 89,
      "start": 193.533,
      "end": 194.9,
      "text": "run 启动一个 session",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 90,
      "start": 195.133,
      "end": 196.066,
      "text": "logs 看日志",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 91,
      "start": 196.533,
      "end": 197.666,
      "text": "ls 列出 session",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 92,
      "start": 198.133,
      "end": 200.933,
      "text": "stop 和 rm 分别是停止以及删除",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 93,
      "start": 201.8,
      "end": 204.666,
      "text": "可以用 prune 命令按时间批量",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 94,
      "start": 204.666,
      "end": 206.133,
      "text": "地清理已经停掉的 session",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 95,
      "start": 210.366,
      "end": 213.2,
      "text": "再来看看它在整个链路里的位置",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 96,
      "start": 215.166,
      "end": 215.733,
      "text": "第一步",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 97,
      "start": 215.733,
      "end": 219.133,
      "text": "你的应用用普通的 API key 来调用 Agents API",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 98,
      "start": 219.7,
      "end": 222.166,
      "text": "创建一个 self_hosted 类型的 session",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 99,
      "start": 222.766,
      "end": 224.333,
      "text": "返回里除了 session ID",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 100,
      "start": 224.333,
      "end": 225.533,
      "text": "还有两个关键字段",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 101,
      "start": 225.9,
      "end": 229.133,
      "text": "environment.id 和一个远端的地址 remote_url",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 102,
      "start": 229.2,
      "end": 231.133,
      "text": "这两个值是给执行器用的",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 103,
      "start": 232.1,
      "end": 234.9,
      "text": "第二步在你的 OpenAI 平台上单独",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 104,
      "start": 234.9,
      "end": 236.8,
      "text": "建一个受限的 API key",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 105,
      "start": 237.2,
      "end": 240.333,
      "text": "拿普通的 API key 去注册执行器",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 106,
      "start": 240.733,
      "end": 242.666,
      "text": "API 会直接返回 403",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 107,
      "start": 243.2,
      "end": 244.533,
      "text": "通常会看到这么一个错误",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 108,
      "start": 244.533,
      "end": 248.0,
      "text": "说缺少 api.agents.environments.connect 这个 scope",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 109,
      "start": 248.866,
      "end": 251.2,
      "text": "第三步是把这个受限的 API key",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 110,
      "start": 251.2,
      "end": 253.766,
      "text": "放进环境变量 OPENAI_EXECUTOR_API_KEY",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 111,
      "start": 254.533,
      "end": 256.166,
      "text": "执行 apple-sandbox run",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 112,
      "start": 256.566,
      "end": 260.0,
      "text": "传入 environment.id 和 remote_url",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 113,
      "start": 260.466,
      "end": 262.166,
      "text": "CLI 会创建工作目录",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 114,
      "start": 262.333,
      "end": 264.733,
      "text": "把这三个值作为环境变量注入",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 115,
      "start": 265.4,
      "end": 267.766,
      "text": "调用 container run 启动一台虚拟机",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 116,
      "start": 268.2,
      "end": 270.533,
      "text": "虚拟机里的入口脚本把受限",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 117,
      "start": 270.533,
      "end": 273.5,
      "text": "的 API key 转成 codex exec-server",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 118,
      "start": 273.5,
      "end": 276.2,
      "text": "自己要求的变量名 CODEX_API_KEY",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 119,
      "start": 276.2,
      "end": 278.133,
      "text": "然后呢启动 exec-server",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 120,
      "start": 279.933,
      "end": 282.7,
      "text": "第四步 exec-server 用这个 API key 主动向",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 121,
      "start": 282.7,
      "end": 285.266,
      "text": "remote_url 发起一个 WebSocket 连接",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 122,
      "start": 285.366,
      "end": 286.166,
      "text": "完成注册",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 123,
      "start": 286.8,
      "end": 289.5,
      "text": "OpenAI 那边把 session 标记成活跃",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 124,
      "start": 289.866,
      "end": 292.966,
      "text": "之后每一轮任务都是 OpenAI 那边发命令",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 125,
      "start": 293.1,
      "end": 295.5,
      "text": "虚拟机在 /workspace 里执行",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 126,
      "start": 295.533,
      "end": 296.766,
      "text": "结果呢再回传",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 127,
      "start": 297.566,
      "end": 299.6,
      "text": "你的应用通过 Agents API 提交任务",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 128,
      "start": 299.7,
      "end": 300.933,
      "text": "订阅事件流",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 129,
      "start": 301.066,
      "end": 304.766,
      "text": "看到的和 OpenAI 托管的 sandbox 完全一样",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 130,
      "start": 305.0,
      "end": 306.066,
      "text": "整个过程里",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 131,
      "start": 306.133,
      "end": 308.9,
      "text": "apple-sandbox 从头到尾没有和 OpenAI 通信",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 132,
      "start": 308.966,
      "end": 310.933,
      "text": "它只负责把三个参数变成",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 133,
      "start": 310.933,
      "end": 312.933,
      "text": "一台跑着执行器的虚拟机",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 134,
      "start": 312.933,
      "end": 314.3,
      "text": "然后呢就退出了",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 135,
      "start": 317.4,
      "end": 320.333,
      "text": "这段是这期里面我想再聊聊的一部分",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 136,
      "start": 320.466,
      "end": 322.166,
      "text": "首先看托管的 sandbox",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 137,
      "start": 322.3,
      "end": 323.2,
      "text": "什么都不用管",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 138,
      "start": 323.2,
      "end": 324.566,
      "text": "OpenAI 自己起环境",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 139,
      "start": 325.4,
      "end": 327.7,
      "text": "如果大家看过 Cloudflare 官方",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 140,
      "start": 327.7,
      "end": 329.866,
      "text": "给 Agents API 写的参考实现",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 141,
      "start": 330.3,
      "end": 332.533,
      "text": "它是云端部署的典型形态",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 142,
      "start": 332.566,
      "end": 333.866,
      "text": "你部署一个 worker",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 143,
      "start": 334.0,
      "end": 335.333,
      "text": "公网地址有了",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 144,
      "start": 335.6,
      "end": 337.766,
      "text": "OpenAI 通过带签名的 webhook",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 145,
      "start": 337.8,
      "end": 339.6,
      "text": "把 session 的事件推送",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 146,
      "start": 342.166,
      "end": 343.533,
      "text": "有任务要执行",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 147,
      "start": 343.8,
      "end": 344.733,
      "text": "状态空闲",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 148,
      "start": 345.0,
      "end": 346.1,
      "text": "执行失败等等",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 149,
      "start": 346.1,
      "end": 348.533,
      "text": "这些呢都是事件会推送过来的",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 150,
      "start": 348.866,
      "end": 351.9,
      "text": "而 worker 收到事件再去启动或唤醒容器",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 151,
      "start": 352.0,
      "end": 355.666,
      "text": "容器里的执行器向 OpenAI 建立 WebSocket 连接",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 152,
      "start": 356.133,
      "end": 357.766,
      "text": "也就是说在那套方案里面",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 153,
      "start": 357.766,
      "end": 360.366,
      "text": "webhook 和 WebSocket 各管一件事",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 154,
      "start": 360.933,
      "end": 363.366,
      "text": "WebSocket 是执行器和 OpenAI 之间",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 155,
      "start": 363.366,
      "end": 365.533,
      "text": "真正的交换命令和结果",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 156,
      "start": 366.866,
      "end": 368.8,
      "text": "永远都是从你这边主动出站",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 157,
      "start": 368.8,
      "end": 370.733,
      "text": "而 webhook 只解决一个问题",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 158,
      "start": 370.866,
      "end": 372.133,
      "text": "OpenAI 什么时候需要算力",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 159,
      "start": 372.133,
      "end": 374.066,
      "text": "怎么通知你把容器启动起来",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 160,
      "start": 374.966,
      "end": 377.8,
      "text": "而 apple-sandbox 跑在一台个人的 Mac 电脑上",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 161,
      "start": 377.8,
      "end": 378.966,
      "text": "没有公网地址",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 162,
      "start": 379.0,
      "end": 380.566,
      "text": "也就没法给 OpenAI 提供",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 163,
      "start": 380.566,
      "end": 382.266,
      "text": "一个接收 webhook 的地址",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 164,
      "start": 382.266,
      "end": 383.266,
      "text": "那怎么办呢",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 165,
      "start": 383.866,
      "end": 386.166,
      "text": "答案其实也在 OpenAI 自己文档里",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 166,
      "start": 386.7,
      "end": 387.966,
      "text": "self_hosted 环境",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 167,
      "start": 387.966,
      "end": 390.266,
      "text": "也就咱们这种自己运行的沙箱环境",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 168,
      "start": 390.466,
      "end": 391.933,
      "text": "有两种同样都可以",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 169,
      "start": 391.933,
      "end": 393.6,
      "text": "认为是正式的启动方式",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 170,
      "start": 393.866,
      "end": 395.666,
      "text": "一种叫 webhook-managed",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 171,
      "start": 396.0,
      "end": 398.766,
      "text": "就是刚才咱们谈到的像 Cloudflare 那种",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 172,
      "start": 398.9,
      "end": 400.366,
      "text": "OpenAI 决定什么时候要算力",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 173,
      "start": 400.666,
      "end": 401.766,
      "text": "推送事件给你",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 174,
      "start": 402.533,
      "end": 404.3,
      "text": "另一种呢叫 application-managed",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 175,
      "start": 404.5,
      "end": 406.966,
      "text": "你的应用创建 session 的那一刻",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 176,
      "start": 407.066,
      "end": 408.733,
      "text": "就已经拿到了环境的 ID",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 177,
      "start": 408.733,
      "end": 411.066,
      "text": "也就是 environment.id 和 remote_url",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 178,
      "start": 411.733,
      "end": 413.9,
      "text": "直接同步把算力呢启动起来",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 179,
      "start": 413.9,
      "end": 415.533,
      "text": "不需要等待 OpenAI 的通知",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 180,
      "start": 416.533,
      "end": 420.0,
      "text": "Cloudflare、Vercel、Modal 的集成文档都把这两种",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 181,
      "start": 420.566,
      "end": 421.933,
      "text": "并列成为选项",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 182,
      "start": 421.966,
      "end": 423.3,
      "text": "而不是主备关系",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 183,
      "start": 424.3,
      "end": 426.7,
      "text": "apple-sandbox 实现的正是 application-managed",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 184,
      "start": 427.066,
      "end": 427.866,
      "text": "创建 session",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 185,
      "start": 427.9,
      "end": 428.933,
      "text": "拿到两个参数",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 186,
      "start": 428.933,
      "end": 431.0,
      "text": "立即执行 apple-sandbox run",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 187,
      "start": 431.066,
      "end": 432.5,
      "text": "三步呢是在一起的",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 188,
      "start": 433.0,
      "end": 435.733,
      "text": "webhook 那条路解决的是规模化",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 189,
      "start": 435.733,
      "end": 437.7,
      "text": "场景下按需启动算力的问题",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 190,
      "start": 438.066,
      "end": 439.1,
      "text": "一个开发者呢",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 191,
      "start": 439.1,
      "end": 440.4,
      "text": "在自己的 Mac 上跑",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 192,
      "start": 440.4,
      "end": 443.1,
      "text": "其实呢并没有很具体的这方面的问题",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 193,
      "start": 443.9,
      "end": 445.266,
      "text": "真正的数据通道",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 194,
      "start": 445.6,
      "end": 446.6,
      "text": "两种方式是一样的",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 195,
      "start": 446.6,
      "end": 448.333,
      "text": "都是执行器主动出站",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 196,
      "start": 448.866,
      "end": 450.533,
      "text": "发起一个 WebSocket 连接",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 197,
      "start": 450.6,
      "end": 451.866,
      "text": "连接断了自己重连",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 198,
      "start": 452.133,
      "end": 454.866,
      "text": "OpenAI 从来不需要反向地连你的机器",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 199,
      "start": 455.066,
      "end": 456.533,
      "text": "所以少了公网地址",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 200,
      "start": 456.566,
      "end": 458.766,
      "text": "少的只是提前收通知这件事",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 201,
      "start": 459.166,
      "end": 461.733,
      "text": "那少了通知还剩一件事情要自己处理",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 202,
      "start": 461.966,
      "end": 463.133,
      "text": "session 什么时候结束",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 203,
      "start": 463.3,
      "end": 464.7,
      "text": "虚拟机什么时候该销毁",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 204,
      "start": 465.4,
      "end": 467.4,
      "text": "apple-sandbox 没有去轮询 OpenAI",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 205,
      "start": 467.4,
      "end": 468.366,
      "text": "也并不需要",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 206,
      "start": 468.9,
      "end": 470.3,
      "text": "exec-server 有个特性",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 207,
      "start": 470.5,
      "end": 472.266,
      "text": "连接临时断开它会重连",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 208,
      "start": 472.266,
      "end": 474.366,
      "text": "但 OpenAI 彻底关闭 session 之后",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 209,
      "start": 474.366,
      "end": 475.333,
      "text": "它就退出了",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 210,
      "start": 475.5,
      "end": 476.3,
      "text": "容器随之呢",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 211,
      "start": 476.3,
      "end": 477.7,
      "text": "就进入了 stopped 状态",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 212,
      "start": 477.9,
      "end": 479.733,
      "text": "所以 prune 命令只看一件事",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 213,
      "start": 479.766,
      "end": 481.0,
      "text": "哪些容器已经停了",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 214,
      "start": 481.0,
      "end": 481.8,
      "text": "停了多久",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 215,
      "start": 482.066,
      "end": 483.8,
      "text": "prune --older-than 1h",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 216,
      "start": 484.0,
      "end": 485.866,
      "text": "把停掉超过一小时的清理掉",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 217,
      "start": 486.3,
      "end": 488.4,
      "text": "手动跑或者挂一个 cron 都行",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 218,
      "start": 488.5,
      "end": 490.566,
      "text": "它永远呢不会碰正在运行的容器",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 219,
      "start": 491.533,
      "end": 494.133,
      "text": "当然了目前 apple-sandbox 还处于非常早期",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 220,
      "start": 494.133,
      "end": 495.5,
      "text": "在后续的开发中还会",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 221,
      "start": 495.5,
      "end": 496.966,
      "text": "逐渐完善这方面的功能",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 222,
      "start": 496.966,
      "end": 498.166,
      "text": "使它越来越健壮",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 223,
      "start": 500.4,
      "end": 502.4,
      "text": "把上面的机制串成状态图",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 224,
      "start": 502.4,
      "end": 504.266,
      "text": "一个 session 在沙箱里经历",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 225,
      "start": 504.266,
      "end": 505.7,
      "text": "的状态大致是这样的",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 226,
      "start": 506.2,
      "end": 507.6,
      "text": "执行 apple-sandbox run",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 227,
      "start": 507.733,
      "end": 508.766,
      "text": "容器被创建出来",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 228,
      "start": 508.766,
      "end": 510.133,
      "text": "这是 Created 状态",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 229,
      "start": 510.5,
      "end": 512.466,
      "text": "入口脚本启动 exec-server",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 230,
      "start": 512.466,
      "end": 513.733,
      "text": "向 OpenAI 注册",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 231,
      "start": 513.8,
      "end": 515.9,
      "text": "进入 Registering 状态",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 232,
      "start": 516.0,
      "end": 517.933,
      "text": "注册呢有两个分支",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 233,
      "start": 518.4,
      "end": 520.333,
      "text": "remote_url 或者 key 不对",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 234,
      "start": 520.333,
      "end": 521.766,
      "text": "exec-server 立即就拒绝",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 235,
      "start": 521.766,
      "end": 522.8,
      "text": "进入 Rejected",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 236,
      "start": 523.0,
      "end": 524.3,
      "text": "容器随即就停掉",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 237,
      "start": 526.866,
      "end": 527.466,
      "text": "错误信息呢",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 238,
      "start": 527.466,
      "end": 529.4,
      "text": "可以在 apple-sandbox logs 里看到",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 239,
      "start": 529.533,
      "end": 531.533,
      "text": "注册通过进入连接状态 Connected",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 240,
      "start": 531.8,
      "end": 533.533,
      "text": "之后 OpenAI 每下发一条",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 241,
      "start": 533.533,
      "end": 534.9,
      "text": "命令就进入 Executing",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 242,
      "start": 535.133,
      "end": 536.3,
      "text": "执行完回到 Connected",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 243,
      "start": 536.7,
      "end": 538.366,
      "text": "中间 WebSocket 掉线",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 244,
      "start": 538.366,
      "end": 539.5,
      "text": "进入 Reconnecting",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 245,
      "start": 540.1,
      "end": 541.5,
      "text": "exec-server 自己重连",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 246,
      "start": 541.533,
      "end": 542.933,
      "text": "apple-sandbox 并不参与",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 247,
      "start": 543.266,
      "end": 544.666,
      "text": "OpenAI 彻底关闭 session",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 248,
      "start": 545.066,
      "end": 546.4,
      "text": "exec-server 退出",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 249,
      "start": 546.4,
      "end": 548.166,
      "text": "容器呢就进入 stopped 状态",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 250,
      "start": 548.366,
      "end": 550.866,
      "text": "最后通过 rm 或者 prune 把它删掉",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 251,
      "start": 550.933,
      "end": 552.666,
      "text": "最终达到了 Removed 状态",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 252,
      "start": 553.4,
      "end": 554.666,
      "text": "从 CLI 的角度看",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 253,
      "start": 554.666,
      "end": 556.1,
      "text": "ls 只报两种状态",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 254,
      "start": 556.133,
      "end": 557.066,
      "text": "running 和 stopped",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 255,
      "start": 557.4,
      "end": 559.966,
      "text": "中间那些状态全都在虚拟机里面发生",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 256,
      "start": 561.333,
      "end": 563.5,
      "text": "下面我们用发布版本完整跑一遍",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 257,
      "start": 563.566,
      "end": 566.966,
      "text": "项目在 GitHub 上 sugarforever/apple-sandbox",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 258,
      "start": 567.2,
      "end": 568.566,
      "text": "在发布版本这里",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 259,
      "start": 568.566,
      "end": 571.6,
      "text": "releases 有一个 darwin_arm64 的压缩包",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 260,
      "start": 571.666,
      "end": 572.533,
      "text": "只有这个平台",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 261,
      "start": 572.533,
      "end": 573.733,
      "text": "因为 Apple container 呢",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 262,
      "start": 573.733,
      "end": 575.6,
      "text": "只能在 Apple Silicon 的 Mac 上跑",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 263,
      "start": 576.3,
      "end": 578.7,
      "text": "前置条件只有一个 brew install --cask container",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 264,
      "start": 578.733,
      "end": 580.7,
      "text": "装好 Apple 的 container 工具",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 265,
      "start": 580.966,
      "end": 583.366,
      "text": "然后按照 README 里的一条命令安装",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 266,
      "start": 583.533,
      "end": 586.666,
      "text": "从 GitHub Releases 拉取最新的压缩包",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 267,
      "start": 586.7,
      "end": 588.1,
      "text": "把二进制解压到用户",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 268,
      "start": 588.1,
      "end": 590.066,
      "text": "目录下的 .local/bin",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 269,
      "start": 590.2,
      "end": 591.3,
      "text": "并不需要 sudo",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 270,
      "start": 591.766,
      "end": 593.866,
      "text": "执行器镜像的 Dockerfile 和入口",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 271,
      "start": 593.866,
      "end": 595.6,
      "text": "脚本已经嵌在了二进制里",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 272,
      "start": 595.6,
      "end": 597.5,
      "text": "所以不需要克隆代码仓库",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 273,
      "start": 597.5,
      "end": 599.533,
      "text": "在任何一个空目录里都能操作",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 274,
      "start": 601.333,
      "end": 603.5,
      "text": "装好后先跑 apple-sandbox doctor",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 275,
      "start": 603.7,
      "end": 604.766,
      "text": "做 5 项检查",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 276,
      "start": 604.9,
      "end": 606.5,
      "text": "包含了像 Apple Silicon",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 277,
      "start": 606.8,
      "end": 608.8,
      "text": "Hypervisor 支持 container 命令",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 278,
      "start": 608.866,
      "end": 610.066,
      "text": "container 的服务状态",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 279,
      "start": 610.066,
      "end": 610.9,
      "text": "磁盘空间",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 280,
      "start": 610.966,
      "end": 612.566,
      "text": "全部 PASS 就可以了",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 281,
      "start": 612.9,
      "end": 614.566,
      "text": "如果服务状态检查失败",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 282,
      "start": 614.566,
      "end": 617.366,
      "text": "那么尝试运行 container system start 启动一下",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 283,
      "start": 617.366,
      "end": 618.266,
      "text": "再跑一次",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 284,
      "start": 618.666,
      "end": 622.0,
      "text": "然后 apple-sandbox build 来构建执行器的镜像",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 285,
      "start": 622.1,
      "end": 623.966,
      "text": "这一步要拉取 node 镜像",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 286,
      "start": 624.133,
      "end": 625.966,
      "text": "装 CA 证书装 codex",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 287,
      "start": 626.133,
      "end": 627.7,
      "text": "第一次呢会花一点时间",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 288,
      "start": 629.466,
      "end": 630.466,
      "text": "镜像准备好了",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 289,
      "start": 630.466,
      "end": 631.7,
      "text": "现在呢创建一个 session",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 290,
      "start": 632.2,
      "end": 635.266,
      "text": "向 /v1/agents/sessions 发一个 POST 请求",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 291,
      "start": 635.366,
      "end": 637.966,
      "text": "请求的头带上 agents=v1 这个",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 292,
      "start": 637.966,
      "end": 640.666,
      "text": "beta 标记以及 OpenAI 的 API key",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 293,
      "start": 640.966,
      "end": 643.2,
      "text": "请求体里面带上 agent 和 session",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 294,
      "start": 643.666,
      "end": 645.933,
      "text": "模型我选择了 gpt-6-astra",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 295,
      "start": 646.1,
      "end": 648.7,
      "text": "系统指令是让它在 /workspace 里工作",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 296,
      "start": 648.7,
      "end": 650.766,
      "text": "每一步跑了什么命令都展示出来",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 297,
      "start": 650.8,
      "end": 653.466,
      "text": "生成的文件在结束前自己检查一遍",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 298,
      "start": 653.866,
      "end": 655.933,
      "text": "environment 指定类型是 self_hosted",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 299,
      "start": 655.966,
      "end": 657.7,
      "text": "工作目录是 /workspace",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 300,
      "start": 658.466,
      "end": 660.266,
      "text": "API 响应应该是 201",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 301,
      "start": 660.4,
      "end": 661.466,
      "text": "来看看三个字段",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 302,
      "start": 661.466,
      "end": 662.6,
      "text": "一个呢是 ID",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 303,
      "start": 663.1,
      "end": 665.266,
      "text": "ID 是 sess 开头的一个 session ID",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 304,
      "start": 666.666,
      "end": 668.5,
      "text": "另外一个是 environment.id",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 305,
      "start": 668.666,
      "end": 670.766,
      "text": "还包含一个 remote_url",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 306,
      "start": 670.966,
      "end": 673.366,
      "text": "它是 api.openai.com 下面",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 307,
      "start": 673.366,
      "end": 674.866,
      "text": "一个 connect 路径的地址",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 308,
      "start": 675.966,
      "end": 678.0,
      "text": "这两个值原样地传给沙箱就行",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 309,
      "start": 678.0,
      "end": 679.0,
      "text": "并不需要改动",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 310,
      "start": 679.066,
      "end": 681.133,
      "text": "把响应存到 session.json",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 311,
      "start": 681.2,
      "end": 683.666,
      "text": "后面呢用三个变量咱们把它取出来",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 312,
      "start": 684.466,
      "end": 685.566,
      "text": "受限的 API key",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 313,
      "start": 685.566,
      "end": 687.066,
      "text": "我已经在 OpenAI 平台上",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 314,
      "start": 687.066,
      "end": 688.7,
      "text": "的 agents 部分创建好了",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 315,
      "start": 688.766,
      "end": 690.066,
      "text": "把它放在本机环境",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 316,
      "start": 690.066,
      "end": 692.466,
      "text": "变量 OPENAI_EXECUTOR_API_KEY 里面",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 317,
      "start": 693.5,
      "end": 694.733,
      "text": "现在启动沙箱",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 318,
      "start": 694.9,
      "end": 696.166,
      "text": "运行 apple-sandbox run",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 319,
      "start": 696.733,
      "end": 698.533,
      "text": "给它 session ID、environment.id",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 320,
      "start": 698.533,
      "end": 699.666,
      "text": "和 remote_url",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 321,
      "start": 699.733,
      "end": 701.8,
      "text": "命令马上返回 session 的名字",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 322,
      "start": 701.8,
      "end": 702.6,
      "text": "容器的 ID",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 323,
      "start": 702.6,
      "end": 703.866,
      "text": "本机的工作目录",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 324,
      "start": 703.9,
      "end": 705.733,
      "text": "还有查看日志的命令",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 325,
      "start": 706.7,
      "end": 707.766,
      "text": "apple-sandbox ls",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 326,
      "start": 707.766,
      "end": 709.9,
      "text": "状态呢应该能看到它是 running",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 327,
      "start": 710.6,
      "end": 712.466,
      "text": "apple-sandbox logs -f",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 328,
      "start": 712.5,
      "end": 713.566,
      "text": "可以跟一下日志",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 329,
      "start": 713.9,
      "end": 715.9,
      "text": "能够看到 exec-server 启动",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 330,
      "start": 715.9,
      "end": 717.366,
      "text": "向远程的 URL",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 331,
      "start": 717.366,
      "end": 719.1,
      "text": "也就是 remote_url 发起了注册",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 332,
      "start": 719.9,
      "end": 722.5,
      "text": "顺便验证一下它真的是一台虚拟机",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 333,
      "start": 722.733,
      "end": 724.3,
      "text": "container exec 进去",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 334,
      "start": 724.3,
      "end": 725.766,
      "text": "执行 uname -a",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 335,
      "start": 725.766,
      "end": 727.466,
      "text": "看到的是 Linux 内核",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 336,
      "start": 727.466,
      "end": 728.9,
      "text": "跑在了一台 Mac 上",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 337,
      "start": 729.4,
      "end": 730.6,
      "text": "给它一个任务吧",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 338,
      "start": 731.1,
      "end": 733.3,
      "text": "先在本机 sandboxes 目录下",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 339,
      "start": 733.533,
      "end": 736.333,
      "text": "这个 session 的子目录里放一个 CSV 文件",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 340,
      "start": 736.766,
      "end": 737.766,
      "text": "内容很简单",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 341,
      "start": 737.766,
      "end": 738.766,
      "text": "4 行数据",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 342,
      "start": 738.8,
      "end": 740.2,
      "text": "item 和 amount 两列",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 343,
      "start": 740.2,
      "end": 741.666,
      "text": "不需要任何上传接口",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 344,
      "start": 741.666,
      "end": 742.566,
      "text": "放进目录里",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 345,
      "start": 742.566,
      "end": 744.533,
      "text": "实际上就放进了虚拟机",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 346,
      "start": 744.533,
      "end": 746.133,
      "text": "里的 /workspace 目录",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 347,
      "start": 746.666,
      "end": 747.766,
      "text": "顺便说一句吧",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 348,
      "start": 748.533,
      "end": 751.333,
      "text": "OpenAI 托管的 sandbox 创建 session 的时候呢",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 349,
      "start": 751.333,
      "end": 753.166,
      "text": "可以用 environment.files 这个",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 350,
      "start": 753.166,
      "end": 755.966,
      "text": "字段内联地把文件带进去",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 351,
      "start": 756.066,
      "end": 758.333,
      "text": "同样的字段在 self_hosted 上",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 352,
      "start": 758.333,
      "end": 760.4,
      "text": "OpenAI 会返回 400",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 353,
      "start": 760.733,
      "end": 763.066,
      "text": "说 environment.files 是个未知参数",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 354,
      "start": 763.5,
      "end": 765.8,
      "text": "因此 self_hosted 类型的文件",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 355,
      "start": 765.8,
      "end": 767.533,
      "text": "进出只能靠你自己去挂载",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 356,
      "start": 768.266,
      "end": 769.2,
      "text": "API 并不支持",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 357,
      "start": 769.866,
      "end": 771.133,
      "text": "然后就提交任务吧",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 358,
      "start": 771.533,
      "end": 773.733,
      "text": "POST 到 session 的 events 接口",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 359,
      "start": 773.766,
      "end": 774.7,
      "text": "事件类型呢",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 360,
      "start": 774.7,
      "end": 776.733,
      "text": "是 agent.session.input.message",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 361,
      "start": 777.133,
      "end": 781.3,
      "text": "内容是用 Python 读 /workspace/amounts.csv",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 362,
      "start": 781.466,
      "end": 783.366,
      "text": "验证 amount 列是数字",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 363,
      "start": 783.5,
      "end": 784.733,
      "text": "算行数和总数",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 364,
      "start": 784.733,
      "end": 786.766,
      "text": "把结果按固定格式写到",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 365,
      "start": 787.166,
      "end": 789.166,
      "text": "/workspace/outputs/summary.json",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 366,
      "start": 790.1,
      "end": 791.966,
      "text": "写完读回来验证报告结果",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 367,
      "start": 792.866,
      "end": 794.866,
      "text": "应该能够看到返回是 202",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 368,
      "start": 794.966,
      "end": 797.4,
      "text": "session 状态从 idle 变成了 in_progress",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 369,
      "start": 797.7,
      "end": 798.366,
      "text": "这时候呢",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 370,
      "start": 798.366,
      "end": 799.666,
      "text": "可以看两个地方",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 371,
      "start": 799.766,
      "end": 801.766,
      "text": "一个是 apple-sandbox 的日志",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 372,
      "start": 802.333,
      "end": 804.0,
      "text": "通过 apple-sandbox logs 命令",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 373,
      "start": 804.133,
      "end": 805.766,
      "text": "能看到执行器收到命令",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 374,
      "start": 805.766,
      "end": 806.566,
      "text": "执行命令",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 375,
      "start": 806.566,
      "end": 808.966,
      "text": "另一边是 Agents API 的事件流",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 376,
      "start": 809.5,
      "end": 810.533,
      "text": "等它跑完",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 377,
      "start": 810.533,
      "end": 813.8,
      "text": "直接用 cat 命令查看本机的",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 378,
      "start": 813.8,
      "end": 816.133,
      "text": "sandboxes 目录下的 summary.json 文件",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 379,
      "start": 816.466,
      "end": 817.266,
      "text": "应该有 4 行",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 380,
      "start": 817.266,
      "end": 818.466,
      "text": "总和呢 75",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 381,
      "start": 818.566,
      "end": 820.466,
      "text": "verified 是标记为了 true",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 382,
      "start": 820.666,
      "end": 822.6,
      "text": "这是 Python 在虚拟机里执行",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 383,
      "start": 822.7,
      "end": 825.266,
      "text": "通过挂载写到本机磁盘上的文件",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 384,
      "start": 827.2,
      "end": 828.3,
      "text": "没有 artifact 下载",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 385,
      "start": 828.3,
      "end": 829.966,
      "text": "也没有轮询任何的接口",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 386,
      "start": 830.133,
      "end": 831.533,
      "text": "self_hosted 的产物",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 387,
      "start": 831.6,
      "end": 835.066,
      "text": "这些 artifact 不会发布到 OpenAI 的 Artifacts 接口",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 388,
      "start": 835.066,
      "end": 836.9,
      "text": "文件呢就会在你自己的目录里",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 389,
      "start": 838.766,
      "end": 840.266,
      "text": "跑完了三步清理",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 390,
      "start": 840.333,
      "end": 842.1,
      "text": "apple-sandbox stop 停掉容器",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 391,
      "start": 842.266,
      "end": 843.966,
      "text": "apple-sandbox rm 删掉容器",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 392,
      "start": 843.966,
      "end": 847.1,
      "text": "再用 DELETE 请求把 OpenAI 那边的 session 删掉",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 393,
      "start": 847.3,
      "end": 849.5,
      "text": "如果不想一个一个地记 session ID",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 394,
      "start": 850.2,
      "end": 851.766,
      "text": "apple-sandbox prune",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 395,
      "start": 851.766,
      "end": 852.566,
      "text": "--older",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 396,
      "start": 852.766,
      "end": 854.1,
      "text": "-than 1h",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 397,
      "start": 854.7,
      "end": 856.333,
      "text": "先加一个 --dry-run 的选项",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 398,
      "start": 856.333,
      "end": 857.533,
      "text": "看看会删哪些",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 399,
      "start": 857.766,
      "end": 859.466,
      "text": "再真正地去删掉它们",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 400,
      "start": 861.133,
      "end": 863.666,
      "text": "这里呢有几点值得注意的 README 呢",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 401,
      "start": 863.666,
      "end": 864.8,
      "text": "也已经写了",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 402,
      "start": 864.8,
      "end": 867.466,
      "text": "第一个出站网络没有做白名单",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 403,
      "start": 867.566,
      "end": 869.166,
      "text": "Apple container 的网络只有两种",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 404,
      "start": 869.166,
      "end": 871.1,
      "text": "完全内网或者完全开放",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 405,
      "start": 871.3,
      "end": 872.966,
      "text": "没有按域名放行的机制",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 406,
      "start": 873.1,
      "end": 875.666,
      "text": "因此现在执行器是全开放出站的",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 407,
      "start": 875.666,
      "end": 878.933,
      "text": "已经确认它需要访问 api.openai.com",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 408,
      "start": 879.0,
      "end": 880.966,
      "text": "注册之后还需不需要别的地址呢",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 409,
      "start": 880.966,
      "end": 881.9,
      "text": "还没有验证",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 410,
      "start": 881.966,
      "end": 884.266,
      "text": "所以不建议拿它跑不受信任的任务",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 411,
      "start": 884.3,
      "end": 886.8,
      "text": "等加了代理或者白名单那一层",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 412,
      "start": 886.8,
      "end": 887.733,
      "text": "咱们再说吧",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 413,
      "start": 888.166,
      "end": 889.466,
      "text": "第二点是只有 CLI",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 414,
      "start": 889.466,
      "end": 890.766,
      "text": "目前呢还没有 SDK",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 415,
      "start": 891.0,
      "end": 892.666,
      "text": "TypeScript 或者 Python 的封装",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 416,
      "start": 892.666,
      "end": 894.7,
      "text": "其实呢就是包一层子进程调用",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 417,
      "start": 894.7,
      "end": 896.7,
      "text": "后面呢可能我们也会继续地添加",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 418,
      "start": 896.766,
      "end": 897.8,
      "text": "感兴趣的朋友呢也",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 419,
      "start": 897.8,
      "end": 899.166,
      "text": "可以来自己封装一下",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 420,
      "start": 899.5,
      "end": 902.266,
      "text": "第三 prune 判断 session 结束靠的是推断",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 421,
      "start": 902.4,
      "end": 904.4,
      "text": "容器停了就代表 session 结束了",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 422,
      "start": 904.4,
      "end": 906.533,
      "text": "这条推断依赖于 exec-server",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 423,
      "start": 906.8,
      "end": 909.6,
      "text": "在 OpenAI 彻底关闭连接之后会自己退出",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 424,
      "start": 909.733,
      "end": 910.566,
      "text": "目前文档呢",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 425,
      "start": 910.566,
      "end": 911.666,
      "text": "是这么描述的",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 426,
      "start": 912.133,
      "end": 913.9,
      "text": "端到端测试当中也没有反例",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 427,
      "start": 914.5,
      "end": 916.866,
      "text": "但连接中到停止这一步的转换",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 428,
      "start": 916.9,
      "end": 918.8,
      "text": "还没有被单独地去观测过",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 429,
      "start": 920.0,
      "end": 922.133,
      "text": "这一期我们把 Agents API 的 self_hosted",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 430,
      "start": 922.133,
      "end": 924.366,
      "text": "环境接到一台 Mac 电脑上",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 431,
      "start": 924.866,
      "end": 927.133,
      "text": "Apple container 提供虚拟机级别的隔离",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 432,
      "start": 927.366,
      "end": 929.8,
      "text": "执行器主动出站连接 OpenAI",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 433,
      "start": 929.8,
      "end": 931.9,
      "text": "本机目录直接就当做工作区",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 434,
      "start": 932.066,
      "end": 933.2,
      "text": "没有公网地址",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 435,
      "start": 933.3,
      "end": 936.733,
      "text": "靠的是 application-managed 正式的启动方式",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 436,
      "start": 936.9,
      "end": 938.733,
      "text": "缺的只是提前收到通知",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 437,
      "start": 939.7,
      "end": 941.766,
      "text": "用 prune 命令我们做了补全",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 438,
      "start": 942.0,
      "end": 943.333,
      "text": "项目呢开源在 GitHub",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 439,
      "start": 943.333,
      "end": 944.3,
      "text": "欢迎大家试用",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 440,
      "start": 944.3,
      "end": 946.5,
      "text": "也欢迎提 issue 欢迎 PR",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 441,
      "start": 946.566,
      "end": 948.2,
      "text": "如果这期视频对你有帮助",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 442,
      "start": 948.266,
      "end": 948.9,
      "text": "欢迎关注",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 443,
      "start": 948.9,
      "end": 950.2,
      "text": "也欢迎一键三连吧",
      "source": "source_caption",
      "timing_uncertain": false
    },
    {
      "id": 444,
      "start": 950.2,
      "end": 951.7,
      "text": "那我们就下期再见",
      "source": "source_caption",
      "timing_uncertain": false
    }
  ]
}
