+
    i                        ^ RI Ht ^ RIt^ RIHt ^ RIHt ]! ]4      P                  4       P                  ^,          t
]
R,          R,          R,          tRtR	 R
 ltR R ltRR R lltRR R lltR R ltR# )    )annotationsN)Path)Anydatadbzyoutube_automation.dba
  
PRAGMA journal_mode=WAL;
CREATE TABLE IF NOT EXISTS projects (
  project_id TEXT PRIMARY KEY,
  title TEXT,
  topic TEXT,
  script_version TEXT,
  created_at INTEGER NOT NULL,
  updated_at INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS scenes (
  scene_id TEXT PRIMARY KEY,
  project_id TEXT NOT NULL,
  ordering INTEGER NOT NULL,
  narration TEXT,
  visual_prompt TEXT,
  target_duration INTEGER,
  continuity_group TEXT,
  scene_type TEXT NOT NULL,
  extend_flag INTEGER NOT NULL DEFAULT 0,
  status TEXT NOT NULL DEFAULT 'pending',
  created_at INTEGER NOT NULL,
  updated_at INTEGER NOT NULL,
  FOREIGN KEY(project_id) REFERENCES projects(project_id)
);
CREATE TABLE IF NOT EXISTS tasks (
  task_id_internal TEXT PRIMARY KEY,
  scene_id TEXT,
  endpoint_type TEXT NOT NULL,
  endpoint_path TEXT,
  model_name TEXT,
  kling_task_id TEXT,
  request_id TEXT,
  external_task_id TEXT,
  task_status TEXT NOT NULL,
  task_status_msg TEXT,
  request_payload_json TEXT NOT NULL,
  response_json TEXT,
  callback_payload_json TEXT,
  callback_received_at INTEGER,
  final_unit_deduction TEXT,
  parent_video_id TEXT,
  parent_video_url TEXT,
  parent_video_duration TEXT,
  retry_count INTEGER NOT NULL DEFAULT 0,
  retry_reason TEXT,
  error_category TEXT,
  raw_error TEXT,
  submitted_at INTEGER,
  finished_at INTEGER,
  callback_auth_mode TEXT,
  created_at INTEGER NOT NULL,
  updated_at INTEGER NOT NULL,
  FOREIGN KEY(scene_id) REFERENCES scenes(scene_id)
);
CREATE UNIQUE INDEX IF NOT EXISTS idx_tasks_kling_task_id ON tasks(kling_task_id);
CREATE INDEX IF NOT EXISTS idx_tasks_scene_id ON tasks(scene_id);
CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(task_status);
CREATE TABLE IF NOT EXISTS assets (
  asset_id TEXT PRIMARY KEY,
  scene_id TEXT,
  source_task_id TEXT,
  asset_type TEXT NOT NULL,
  original_url TEXT,
  watermark_url TEXT,
  local_path TEXT,
  downloaded_at INTEGER,
  duration TEXT,
  metadata_json TEXT,
  created_at INTEGER NOT NULL,
  updated_at INTEGER NOT NULL,
  FOREIGN KEY(scene_id) REFERENCES scenes(scene_id),
  FOREIGN KEY(source_task_id) REFERENCES tasks(task_id_internal)
);
CREATE INDEX IF NOT EXISTS idx_assets_scene_id ON assets(scene_id);
CREATE UNIQUE INDEX IF NOT EXISTS idx_assets_source_url_unique ON assets(source_task_id, asset_type, original_url);
CREATE TABLE IF NOT EXISTS task_events (
  event_id INTEGER PRIMARY KEY AUTOINCREMENT,
  task_id_internal TEXT,
  event_type TEXT NOT NULL,
  payload_json TEXT,
  dedupe_key TEXT,
  created_at INTEGER NOT NULL,
  FOREIGN KEY(task_id_internal) REFERENCES tasks(task_id_internal)
);CREATE UNIQUE INDEX IF NOT EXISTS idx_task_events_dedupe ON task_events(task_id_internal, event_type, dedupe_key);
c                   V ^8  d   QhRR/# )   returnzsqlite3.Connection )formats   "@/Users/moon/.openclaw/workspace/youtube-automation/scripts/db.py__annotate__r   b   s      #     c                     \         P                  ! \        4      p \         P                  V n        V P                  R 4       V # )zPRAGMA foreign_keys=ON;)sqlite3connectDB_PATHRowrow_factoryexecuteconns    r   r   r   b   s.    ??7#D{{DLL*+Kr   c                   V ^8  d   QhRR/# r	   r
   Noner   )r   s   "r   r   r   i   s       r   c                     \        4       p  V P                  \        4       V P                  4        V P	                  4        R #   T P	                  4        i ; iN)r   executescriptSCHEMAcommitcloser   s    r   init_dbr"   i   s8    9D6"



s   %A Ac                    V ^8  d   QhRRRR/# )r	   querystrparamstuple[Any, ...]r   )r   s   "r   r   r   r   s      S / r   c                    \        4       p VP                  W4      P                  4       pV'       d   \        V4      MR  VP	                  4        #   TP	                  4        i ; ir   )r   r   fetchonedictr!   )r$   r&   r   rows   &&  r   	fetch_oner,   r   sF    9Dll5)224tCyT)



s   3A A#c               $    V ^8  d   QhRRRRRR/# )r	   r$   r%   r&   r'   r
   r   r   )r   s   "r   r   r   {   s!      3   r   c                    \        4       p VP                  W4       VP                  4        VP                  4        R #   TP                  4        i ; ir   )r   r   r    r!   )r$   r&   r   s   && r   r   r   {   s6    9DU#



s	   !? Ac                   V ^8  d   QhRR/# r   r   )r   s   "r   r   r      s      $ r   c                     R FJ  p \        \        \        4      V ,           4      pVP                  4       '       g   K:  VP	                  4        KL  	  \        4        R# ) N)r1   z-walz-shm)r   r%   r   existsunlinkr"   )suffixps     r   reset_dbr6      s:    &W&'88::HHJ ' Ir   )r   )
__future__r   r   pathlibr   typingr   __file__resolveparentsROOTr   r   r   r"   r,   r   r6   r   r   r   <module>r>      sd    "   H~''*
-$
!8
8U
pr   