CREATE TABLE `novel_generation_plans` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `project_id` BIGINT NOT NULL, `novel_source_id` BIGINT NULL, `user_id` BIGINT NOT NULL, `novel_scale` VARCHAR(30) NOT NULL DEFAULT 'medium', `target_words` INT NULL, `target_chapters` INT NULL, `genre` VARCHAR(100) NULL, `style_code` VARCHAR(100) NULL, `brief_json` JSON NULL, `ip_bible_json` JSON NULL, `volume_plan_json` JSON NULL, `pipeline_config_json` JSON NULL, `quality_threshold_json` JSON NULL, `automation_level` VARCHAR(20) NOT NULL DEFAULT 'L1', `status` VARCHAR(50) NOT NULL DEFAULT 'draft', `current_chapter_no` INT NOT NULL DEFAULT 0, `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), PRIMARY KEY (`id`), KEY `npg_project_status_idx` (`project_id`, `status`), KEY `npg_source_idx` (`novel_source_id`), KEY `npg_user_status_idx` (`user_id`, `status`), KEY `npg_scale_level_idx` (`novel_scale`, `automation_level`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE TABLE `novel_chapter_versions` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `project_id` BIGINT NOT NULL, `novel_source_id` BIGINT NULL, `novel_chapter_id` BIGINT NULL, `chapter_no` INT NOT NULL, `version_no` INT NOT NULL, `version_type` VARCHAR(50) NOT NULL, `title` VARCHAR(255) NULL, `content_text` LONGTEXT NULL, `content_json` JSON NULL, `source_agent` VARCHAR(100) NULL, `provider_code` VARCHAR(100) NULL, `model_name` VARCHAR(100) NULL, `quality_score` DECIMAL(5, 2) NULL, `status` VARCHAR(50) NOT NULL DEFAULT 'draft', `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (`id`), UNIQUE KEY `ncv_source_chapter_version_type_key` (`novel_source_id`, `chapter_no`, `version_no`, `version_type`), KEY `ncv_project_chapter_idx` (`project_id`, `chapter_no`), KEY `ncv_chapter_idx` (`novel_chapter_id`), KEY `ncv_agent_idx` (`source_agent`), KEY `ncv_status_idx` (`status`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE TABLE `novel_context_memories` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `project_id` BIGINT NOT NULL, `novel_source_id` BIGINT NULL, `chapter_no` INT NULL, `memory_type` VARCHAR(80) NOT NULL, `memory_text` LONGTEXT NULL, `memory_json` JSON NULL, `importance_level` INT NOT NULL DEFAULT 0, `status` VARCHAR(50) NOT NULL DEFAULT 'active', `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (`id`), KEY `ncm_project_type_idx` (`project_id`, `memory_type`), KEY `ncm_source_chapter_idx` (`novel_source_id`, `chapter_no`), KEY `ncm_type_status_idx` (`memory_type`, `status`), KEY `ncm_importance_idx` (`importance_level`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE TABLE `novel_quality_reports` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `project_id` BIGINT NOT NULL, `novel_source_id` BIGINT NULL, `novel_chapter_id` BIGINT NULL, `chapter_no` INT NULL, `report_type` VARCHAR(50) NOT NULL, `total_score` DECIMAL(5, 2) NULL, `score_json` JSON NULL, `problems_json` JSON NULL, `suggestions_json` JSON NULL, `pass_status` BOOLEAN NOT NULL DEFAULT false, `rewrite_required` BOOLEAN NOT NULL DEFAULT false, `source_agent` VARCHAR(100) NULL, `provider_code` VARCHAR(100) NULL, `model_name` VARCHAR(100) NULL, `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (`id`), KEY `nqr_project_chapter_idx` (`project_id`, `chapter_no`), KEY `nqr_source_chapter_idx` (`novel_source_id`, `chapter_no`), KEY `nqr_chapter_idx` (`novel_chapter_id`), KEY `nqr_pass_idx` (`pass_status`), KEY `nqr_agent_idx` (`source_agent`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE TABLE `novel_version_snapshots` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `project_id` BIGINT NOT NULL, `novel_source_id` BIGINT NOT NULL, `version_no` INT NOT NULL, `title` VARCHAR(255) NULL, `snapshot_scope` VARCHAR(50) NOT NULL, `chapter_start` INT NULL, `chapter_end` INT NULL, `source_hash` VARCHAR(128) NULL, `snapshot_text` LONGTEXT NULL, `snapshot_json` JSON NULL, `created_for` VARCHAR(50) NULL, `created_by_user_id` BIGINT NULL, `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (`id`), UNIQUE KEY `nvs_source_version_key` (`novel_source_id`, `version_no`), KEY `nvs_project_idx` (`project_id`), KEY `nvs_for_idx` (`created_for`), KEY `nvs_range_idx` (`chapter_start`, `chapter_end`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE TABLE `novel_derivative_jobs` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `project_id` BIGINT NOT NULL, `novel_source_id` BIGINT NOT NULL, `snapshot_id` BIGINT NULL, `user_id` BIGINT NOT NULL, `derivative_type` VARCHAR(50) NOT NULL, `target_project_id` BIGINT NULL, `target_ref_id` BIGINT NULL, `chapter_start` INT NULL, `chapter_end` INT NULL, `config_json` JSON NULL, `status` VARCHAR(50) NOT NULL DEFAULT 'pending', `progress_json` JSON NULL, `error_message` TEXT NULL, `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), PRIMARY KEY (`id`), KEY `ndj_project_type_idx` (`project_id`, `derivative_type`), KEY `ndj_source_status_idx` (`novel_source_id`, `status`), KEY `ndj_snapshot_idx` (`snapshot_id`), KEY `ndj_user_status_idx` (`user_id`, `status`), KEY `ndj_target_project_idx` (`target_project_id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE TABLE `agent_prompts` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `agent_name` VARCHAR(100) NOT NULL, `version` INT NOT NULL DEFAULT 1, `provider_type` VARCHAR(80) NOT NULL DEFAULT 'NovelProvider', `default_provider_code` VARCHAR(100) NULL, `system_prompt` LONGTEXT NOT NULL, `user_prompt_template` LONGTEXT NOT NULL, `output_schema_json` JSON NULL, `temperature` DECIMAL(4, 2) NULL, `max_output_tokens` INT NULL, `is_active` BOOLEAN NOT NULL DEFAULT true, `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (`id`), UNIQUE KEY `ap_name_version_key` (`agent_name`, `version`), KEY `ap_name_active_idx` (`agent_name`, `is_active`), KEY `ap_provider_type_idx` (`provider_type`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE TABLE `agent_runs` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `project_id` BIGINT NULL, `novel_source_id` BIGINT NULL, `chapter_no` INT NULL, `agent_name` VARCHAR(100) NOT NULL, `prompt_version` INT NULL, `provider_code` VARCHAR(100) NULL, `model_name` VARCHAR(100) NULL, `provider_log_id` BIGINT NULL, `input_json` JSON NULL, `output_json` JSON NULL, `output_text` LONGTEXT NULL, `status` VARCHAR(50) NOT NULL DEFAULT 'running', `quality_score` DECIMAL(5, 2) NULL, `error_code` VARCHAR(100) NULL, `error_message` TEXT NULL, `started_at` DATETIME(3) NULL, `finished_at` DATETIME(3) NULL, `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (`id`), KEY `ar_project_agent_idx` (`project_id`, `agent_name`), KEY `ar_source_chapter_idx` (`novel_source_id`, `chapter_no`), KEY `ar_status_created_idx` (`status`, `created_at`), KEY `ar_provider_log_idx` (`provider_log_id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;