@musnows/scriverse 0.8.6 → 0.8.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/database.js CHANGED
@@ -5,9 +5,9 @@ import { documentParagraphLineRanges } from "./hybrid-search.js";
5
5
  import { logger, sanitizeError } from "./logger.js";
6
6
  import { documentShortSearchTerms, normalizeDocumentSearchText, splitDocumentParagraphs } from "./utils.js";
7
7
  export const PLATFORM_AI_WORK_ID = "__scriverse_platform_ai__";
8
- // 版本 81 用于列表查询索引;版本 82 由 Store 写入实体版本基线标记;版本 83 创建协作状态表;版本 84 创建备份加密表;版本 85 持久化协作变更动作;版本 86 扩展直接图片上传格式;版本 87 增加作品与分卷回收站;版本 88 持久化 AI 对话分支幂等键;版本 89 持久化 AI 对话流请求锁与幂等状态;版本 90 持久化 AI 连通性测试冷却状态;版本 91 建立章节段落行号索引;版本 92 增加 AI 对话收藏状态;版本 93 优化伏笔计划回收章节查询;版本 94 增加模型思考强度;版本 95 增加供应商最大输出参数选择;版本 96 扩展模型思考强度档位;版本 97 增加人物性别字段;版本 98 增加正文稳定等待配置;版本 99 持久化关系扮演中的用户角色;版本 100 增加平台 AI 流事件空闲超时配置;版本 101 将平台 AI 流事件空闲超时上限提升至 600 秒;版本 102 创建角色头像元数据表;版本 103 回填历史 AI 对话归属并建立用户列表索引;版本 104 扩大供应商协议约束以支持 OpenAI Responses;版本 105 增加独立分卷剧情顺序;版本 106 增加供应商思考类型配置;版本 107 增加 AI Cache Write 输入 Token 统计;版本 108 增加作品 AI 每月 Token 额度;版本 109 增加供应商日、月 Token 额度;版本 110 将日、月 Token 额度下限调整为大于 0。
8
+ // 版本 81 用于列表查询索引;版本 82 由 Store 写入实体版本基线标记;版本 83 创建协作状态表;版本 84 创建备份加密表;版本 85 持久化协作变更动作;版本 86 扩展直接图片上传格式;版本 87 增加作品与分卷回收站;版本 88 持久化 AI 对话分支幂等键;版本 89 持久化 AI 对话流请求锁与幂等状态;版本 90 持久化 AI 连通性测试冷却状态;版本 91 建立章节段落行号索引;版本 92 增加 AI 对话收藏状态;版本 93 优化伏笔计划回收章节查询;版本 94 增加模型思考强度;版本 95 增加供应商最大输出参数选择;版本 96 扩展模型思考强度档位;版本 97 增加人物性别字段;版本 98 增加正文稳定等待配置;版本 99 持久化关系扮演中的用户角色;版本 100 增加平台 AI 流事件空闲超时配置;版本 101 将平台 AI 流事件空闲超时上限提升至 600 秒;版本 102 创建角色头像元数据表;版本 103 回填历史 AI 对话归属并建立用户列表索引;版本 104 扩大供应商协议约束以支持 OpenAI Responses;版本 105 增加独立分卷剧情顺序;版本 106 增加供应商思考类型配置;版本 107 增加 AI Cache Write 输入 Token 统计;版本 108 增加作品 AI 每月 Token 额度;版本 109 增加供应商日、月 Token 额度;版本 110 将日、月 Token 额度下限调整为大于 0;版本 111 扩展模型思考强度为 auto
9
9
  export const ENTITY_VERSION_BASELINE_MIGRATION_VERSION = 82;
10
- export const DATABASE_SCHEMA_VERSION = 110;
10
+ export const DATABASE_SCHEMA_VERSION = 111;
11
11
  export const SQLITE_IOERR_SHMSIZE = 4874;
12
12
  export function isSqliteDiskIoError(error) {
13
13
  if (!(error instanceof Error))
@@ -481,7 +481,7 @@ export class Database {
481
481
  output_note TEXT NOT NULL DEFAULT '',
482
482
  preset_json TEXT NOT NULL DEFAULT '{}',
483
483
  thinking_enabled INTEGER NOT NULL DEFAULT 1,
484
- thinking_effort TEXT NOT NULL DEFAULT 'default' CHECK(thinking_effort IN ('default', 'low', 'medium', 'high', 'xhigh', 'max')),
484
+ thinking_effort TEXT NOT NULL DEFAULT 'default' CHECK(thinking_effort IN ('default', 'auto', 'low', 'medium', 'high', 'xhigh', 'max')),
485
485
  multimodal_enabled INTEGER NOT NULL DEFAULT 0 CHECK(multimodal_enabled IN (0, 1)),
486
486
  enabled INTEGER NOT NULL DEFAULT 1,
487
487
  note TEXT NOT NULL DEFAULT '',
@@ -4071,6 +4071,62 @@ export class Database {
4071
4071
  if (foreignKeys.length > 0)
4072
4072
  throw new Error(`数据库外键检查失败:发现 ${foreignKeys.length} 条异常记录`);
4073
4073
  }
4074
+ if (!applied.has(111)) {
4075
+ const modelsSql = String(this.get("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = 'models'")?.sql ?? "");
4076
+ if (!modelsSql.includes("'auto'")) {
4077
+ this.raw.exec("PRAGMA foreign_keys = OFF");
4078
+ try {
4079
+ this.transaction(() => {
4080
+ this.run(`CREATE TABLE models_v111 (
4081
+ id TEXT PRIMARY KEY,
4082
+ provider_id TEXT NOT NULL REFERENCES providers(id) ON DELETE CASCADE,
4083
+ display_name TEXT NOT NULL,
4084
+ model_id TEXT NOT NULL,
4085
+ purposes_json TEXT NOT NULL DEFAULT '[]',
4086
+ context_note TEXT NOT NULL DEFAULT '',
4087
+ context_window INTEGER NOT NULL DEFAULT 128000 CHECK(context_window BETWEEN 1024 AND 2000000),
4088
+ output_note TEXT NOT NULL DEFAULT '',
4089
+ preset_json TEXT NOT NULL DEFAULT '{}',
4090
+ thinking_enabled INTEGER NOT NULL DEFAULT 1,
4091
+ thinking_effort TEXT NOT NULL DEFAULT 'default' CHECK(thinking_effort IN ('default', 'auto', 'low', 'medium', 'high', 'xhigh', 'max')),
4092
+ multimodal_enabled INTEGER NOT NULL DEFAULT 0 CHECK(multimodal_enabled IN (0, 1)),
4093
+ enabled INTEGER NOT NULL DEFAULT 1,
4094
+ note TEXT NOT NULL DEFAULT '',
4095
+ created_at TEXT NOT NULL,
4096
+ updated_at TEXT NOT NULL,
4097
+ UNIQUE(provider_id, model_id)
4098
+ )`);
4099
+ this.run(`INSERT INTO models_v111 (
4100
+ id, provider_id, display_name, model_id, purposes_json, context_note, context_window, output_note,
4101
+ preset_json, thinking_enabled, thinking_effort, multimodal_enabled, enabled, note, created_at, updated_at
4102
+ )
4103
+ SELECT
4104
+ id, provider_id, display_name, model_id, purposes_json, context_note, context_window, output_note,
4105
+ preset_json, thinking_enabled, thinking_effort, multimodal_enabled, enabled, note, created_at, updated_at
4106
+ FROM models`);
4107
+ this.run("DROP TABLE models");
4108
+ this.run("ALTER TABLE models_v111 RENAME TO models");
4109
+ this.run(`CREATE TRIGGER IF NOT EXISTS ai_connectivity_test_states_model_delete
4110
+ AFTER DELETE ON models BEGIN
4111
+ DELETE FROM ai_connectivity_test_states WHERE object_type = 'model' AND object_id = OLD.id;
4112
+ END`);
4113
+ });
4114
+ }
4115
+ finally {
4116
+ this.raw.exec("PRAGMA foreign_keys = ON");
4117
+ }
4118
+ }
4119
+ this.transaction(() => {
4120
+ this.run("INSERT OR IGNORE INTO schema_migrations (version, applied_at) VALUES (111, ?)", new Date().toISOString());
4121
+ });
4122
+ const integrity = this.all("PRAGMA integrity_check");
4123
+ if (integrity.some((row) => row.integrity_check !== "ok")) {
4124
+ throw new Error(`数据库完整性检查失败:${integrity.map((row) => row.integrity_check).join(";")}`);
4125
+ }
4126
+ const foreignKeys = this.all("PRAGMA foreign_key_check");
4127
+ if (foreignKeys.length > 0)
4128
+ throw new Error(`数据库外键检查失败:发现 ${foreignKeys.length} 条异常记录`);
4129
+ }
4074
4130
  }
4075
4131
  normalizeCharacterName(value) {
4076
4132
  return value.normalize("NFKC").trim().replace(/\s+/gu, " ").toLocaleLowerCase("zh-CN");