@musnows/scriverse 0.8.5 → 0.8.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +1 -0
  2. package/dist/ai-model-pricing.js +295 -0
  3. package/dist/ai-model-pricing.js.map +1 -0
  4. package/dist/ai-protocol.js +335 -15
  5. package/dist/ai-protocol.js.map +1 -1
  6. package/dist/ai-retry.js +1 -1
  7. package/dist/ai-retry.js.map +1 -1
  8. package/dist/ai.js +1073 -138
  9. package/dist/ai.js.map +1 -1
  10. package/dist/app.js +220 -24
  11. package/dist/app.js.map +1 -1
  12. package/dist/attachment-download.js +26 -0
  13. package/dist/attachment-download.js.map +1 -0
  14. package/dist/attachment-storage.js +8 -6
  15. package/dist/attachment-storage.js.map +1 -1
  16. package/dist/cli-contract.js +6 -4
  17. package/dist/cli-contract.js.map +1 -1
  18. package/dist/database.js +306 -3
  19. package/dist/database.js.map +1 -1
  20. package/dist/public/ai-image-attachments.d.ts +21 -0
  21. package/dist/public/ai-image-attachments.js +42 -0
  22. package/dist/public/ai-usage.d.ts +1 -0
  23. package/dist/public/ai-usage.js +11 -0
  24. package/dist/public/app.js +875 -102
  25. package/dist/public/display-labels.d.ts +2 -1
  26. package/dist/public/display-labels.js +6 -6
  27. package/dist/public/index.html +42 -7
  28. package/dist/public/model-config.d.ts +3 -1
  29. package/dist/public/model-config.js +9 -2
  30. package/dist/public/styles.css +111 -6
  31. package/dist/s3-backup.js +21 -0
  32. package/dist/s3-backup.js.map +1 -1
  33. package/dist/security.js +2 -1
  34. package/dist/security.js.map +1 -1
  35. package/dist/server-runtime.js +6 -0
  36. package/dist/server-runtime.js.map +1 -1
  37. package/dist/store.js +550 -44
  38. package/dist/store.js.map +1 -1
  39. package/dist/upload-limits.js +10 -4
  40. package/dist/upload-limits.js.map +1 -1
  41. package/dist/user-auth.js +3 -0
  42. package/dist/user-auth.js.map +1 -1
  43. package/dist/utils.js +1 -1
  44. package/dist/utils.js.map +1 -1
  45. package/dist/version.js +1 -1
  46. package/dist/writing-progress-time.js +15 -0
  47. package/dist/writing-progress-time.js.map +1 -1
  48. package/package.json +1 -1
@@ -0,0 +1,26 @@
1
+ function sanitizeFileNamePart(value, fallback) {
2
+ const normalized = String(value ?? "")
3
+ .normalize("NFKC")
4
+ .replace(/[\u0000-\u001f\u007f]/gu, " ")
5
+ .replace(/[<>:"/\\|?*]/gu, "-")
6
+ .replace(/\s+/gu, " ")
7
+ .replace(/^[.\s-]+|[.\s-]+$/gu, "");
8
+ return Array.from(normalized || fallback).slice(0, 120).join("");
9
+ }
10
+ function encodeRfc5987(value) {
11
+ return encodeURIComponent(value).replace(/['()*]/gu, (character) => (`%${character.codePointAt(0).toString(16).toUpperCase()}`));
12
+ }
13
+ export function attachmentDownloadFileName(contextName, originalName) {
14
+ const context = sanitizeFileNamePart(contextName ?? "", "项目图片");
15
+ const original = sanitizeFileNamePart(originalName, "图片");
16
+ return `scriverse-${context}-${original}`;
17
+ }
18
+ export function inlineContentDisposition(fileName) {
19
+ const fallback = fileName
20
+ .normalize("NFKD")
21
+ .replace(/[^\x20-\x7e]/gu, "_")
22
+ .replace(/["\\;]/gu, "_")
23
+ .slice(0, 180) || "image";
24
+ return `inline; filename="${fallback}"; filename*=UTF-8''${encodeRfc5987(fileName)}`;
25
+ }
26
+ //# sourceMappingURL=attachment-download.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-download.js","sourceRoot":"","sources":["../src/attachment-download.ts"],"names":[],"mappings":"AAAA,SAAS,oBAAoB,CAAC,KAAa,EAAE,QAAgB;IAC3D,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;SACnC,SAAS,CAAC,MAAM,CAAC;SACjB,OAAO,CAAC,yBAAyB,EAAE,GAAG,CAAC;SACvC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;SAC9B,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;IACtC,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAClE,IAAI,SAAS,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAC3D,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,WAA0B,EAAE,YAAoB;IACzF,MAAM,OAAO,GAAG,oBAAoB,CAAC,WAAW,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,oBAAoB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAC1D,OAAO,aAAa,OAAO,IAAI,QAAQ,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,QAAgB;IACvD,MAAM,QAAQ,GAAG,QAAQ;SACtB,SAAS,CAAC,MAAM,CAAC;SACjB,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;SAC9B,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,OAAO,CAAC;IAC5B,OAAO,qBAAqB,QAAQ,uBAAuB,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;AACvF,CAAC"}
@@ -97,11 +97,12 @@ export class AttachmentStorage {
97
97
  async remove(storageKey) {
98
98
  await rm(this.resolvedStoragePath(storageKey), { force: true });
99
99
  }
100
- async ingest(sourcePath) {
100
+ async ingest(sourcePath, options = {}) {
101
101
  await this.prepare();
102
102
  const originalStats = await stat(sourcePath);
103
- if (originalStats.size > this.maximumUploadBytes) {
104
- throw new AppError(413, "ATTACHMENT_TOO_LARGE", `图片附件不能超过 ${formatUploadLimit(this.maximumUploadBytes)}`);
103
+ const maximumUploadBytes = options.maximumUploadBytes ?? this.maximumUploadBytes;
104
+ if (originalStats.size > maximumUploadBytes) {
105
+ throw new AppError(413, "ATTACHMENT_TOO_LARGE", `图片附件不能超过 ${formatUploadLimit(maximumUploadBytes)}`);
105
106
  }
106
107
  const originalSha256 = await sha256File(sourcePath);
107
108
  const isGif = await hasGifSignature(sourcePath);
@@ -113,8 +114,9 @@ export class AttachmentStorage {
113
114
  throw new AppError(415, "INVALID_ATTACHMENT_IMAGE", "附件不是有效的图片文件");
114
115
  }
115
116
  const format = String(metadata.format ?? "");
116
- if (!allowedFormats.has(format))
117
- throw new AppError(415, "UNSUPPORTED_ATTACHMENT", "附件仅支持 PNG、JPEG、WebP 和 GIF 图片");
117
+ if (!(options.allowedFormats ?? allowedFormats).has(format)) {
118
+ throw new AppError(415, "UNSUPPORTED_ATTACHMENT", options.unsupportedMessage ?? "附件仅支持 PNG、JPEG、WebP 和 GIF 图片");
119
+ }
118
120
  const width = Number(metadata.width ?? 0);
119
121
  const pageHeight = Number(metadata.pageHeight ?? metadata.height ?? 0);
120
122
  const pageCount = Math.max(1, Number(metadata.pages ?? 1));
@@ -136,7 +138,7 @@ export class AttachmentStorage {
136
138
  const candidatePath = join(this.temporaryDirectory, `${originalSha256}-${Date.now()}.webp`);
137
139
  let selectedPath = sourcePath;
138
140
  let storedMimeType = originalMimeType;
139
- if (format !== "webp" && !isGif) {
141
+ if (!options.preserveFormat && format !== "webp" && !isGif) {
140
142
  try {
141
143
  await sharp(sourcePath, { animated: true, limitInputPixels: maximumPixels, sequentialRead: true })
142
144
  .webp({ lossless: true, effort: 6 })
@@ -1 +1 @@
1
- {"version":3,"file":"attachment-storage.js","sourceRoot":"","sources":["../src/attachment-storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attachment-storage.js","sourceRoot":"","sources":["../src/attachment-storage.ts"],"names":[],"mappings":"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"}
@@ -52,9 +52,10 @@ export const cliResourceDefinitions = {
52
52
  title: "分卷标题,最多 200 字",
53
53
  kind: "main | prequel | extra | epilogue | appendix",
54
54
  description: "分卷说明,最多 5000 字",
55
- keywords: "字符串数组,最多 100 项"
55
+ keywords: "字符串数组,最多 100 项",
56
+ storyOrder: "故事顺序,非负整数;与目录排序 sortOrder 独立"
56
57
  },
57
- example: { title: "第一卷 星港", kind: "main", description: "主角离开故乡的开端", keywords: ["启程", "星港"] }
58
+ example: { title: "第一卷 星港", kind: "main", description: "主角离开故乡的开端", keywords: ["启程", "星港"], storyOrder: 0 }
58
59
  },
59
60
  update: {
60
61
  properties: {
@@ -62,9 +63,10 @@ export const cliResourceDefinitions = {
62
63
  kind: "分卷类型",
63
64
  description: "新说明",
64
65
  keywords: "完整替换关键词数组",
65
- sortOrder: "非负整数排序值"
66
+ sortOrder: "非负整数目录排序值",
67
+ storyOrder: "故事顺序,非负整数;与目录排序 sortOrder 独立"
66
68
  },
67
- example: { description: "补充星港政治冲突", keywords: ["启程", "星港", "议会"] }
69
+ example: { description: "补充星港政治冲突", keywords: ["启程", "星港", "议会"], storyOrder: 1 }
68
70
  },
69
71
  notes: ["分卷修改会生成版本历史;更新或删除时可提供 expectedVersionNo,版本不匹配会拒绝写入。"]
70
72
  },
@@ -1 +1 @@
1
- {"version":3,"file":"cli-contract.js","sourceRoot":"","sources":["../src/cli-contract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-contract.js","sourceRoot":"","sources":["../src/cli-contract.ts"],"names":[],"mappings":"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"}
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 秒。
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。
9
9
  export const ENTITY_VERSION_BASELINE_MIGRATION_VERSION = 82;
10
- export const DATABASE_SCHEMA_VERSION = 101;
10
+ export const DATABASE_SCHEMA_VERSION = 110;
11
11
  export const SQLITE_IOERR_SHMSIZE = 4874;
12
12
  export function isSqliteDiskIoError(error) {
13
13
  if (!(error instanceof Error))
@@ -212,6 +212,7 @@ export class Database {
212
212
  description TEXT NOT NULL DEFAULT '',
213
213
  keywords_json TEXT NOT NULL DEFAULT '[]',
214
214
  sort_order INTEGER NOT NULL,
215
+ story_order INTEGER NOT NULL DEFAULT 0,
215
216
  version_no INTEGER NOT NULL DEFAULT 1,
216
217
  deleted_at TEXT,
217
218
  created_at TEXT NOT NULL,
@@ -456,8 +457,11 @@ export class Database {
456
457
  connection_status TEXT NOT NULL DEFAULT 'unchecked',
457
458
  concurrency_limit INTEGER NOT NULL DEFAULT 10 CHECK(concurrency_limit BETWEEN 1 AND 100),
458
459
  rpm_limit INTEGER NOT NULL DEFAULT 10 CHECK(rpm_limit BETWEEN 1 AND 10000),
460
+ daily_token_quota INTEGER CHECK(daily_token_quota IS NULL OR daily_token_quota >= 1),
461
+ monthly_token_quota INTEGER CHECK(monthly_token_quota IS NULL OR monthly_token_quota >= 1),
459
462
  max_tokens INTEGER NOT NULL DEFAULT 32000 CHECK(max_tokens BETWEEN 1 AND 32768),
460
463
  max_tokens_parameter TEXT NOT NULL DEFAULT 'max_tokens' CHECK(max_tokens_parameter IN ('max_tokens', 'max_completion_tokens')),
464
+ thinking_type TEXT NOT NULL DEFAULT 'enabled' CHECK(thinking_type IN ('enabled', 'adaptive')),
461
465
  default_model_id TEXT,
462
466
  note TEXT NOT NULL DEFAULT '',
463
467
  last_error TEXT,
@@ -532,7 +536,8 @@ export class Database {
532
536
  CREATE TABLE IF NOT EXISTS work_ai_settings (
533
537
  work_id TEXT PRIMARY KEY REFERENCES works(id) ON DELETE CASCADE,
534
538
  system_prompt TEXT NOT NULL DEFAULT '',
535
- daily_token_quota INTEGER CHECK(daily_token_quota IS NULL OR daily_token_quota >= 10000),
539
+ daily_token_quota INTEGER CHECK(daily_token_quota IS NULL OR daily_token_quota >= 1),
540
+ monthly_token_quota INTEGER CHECK(monthly_token_quota IS NULL OR monthly_token_quota >= 1),
536
541
  auto_run_enabled INTEGER NOT NULL DEFAULT 0,
537
542
  auto_run_concurrency INTEGER NOT NULL DEFAULT 2,
538
543
  auto_run_batch_limit INTEGER NOT NULL DEFAULT 20,
@@ -569,6 +574,7 @@ export class Database {
569
574
  input_tokens INTEGER NOT NULL DEFAULT 0 CHECK(input_tokens >= 0),
570
575
  output_tokens INTEGER NOT NULL DEFAULT 0 CHECK(output_tokens >= 0),
571
576
  cached_input_tokens INTEGER NOT NULL DEFAULT 0 CHECK(cached_input_tokens >= 0),
577
+ cache_write_input_tokens INTEGER NOT NULL DEFAULT 0 CHECK(cache_write_input_tokens >= 0),
572
578
  cache_eligible_input_tokens INTEGER NOT NULL DEFAULT 0 CHECK(cache_eligible_input_tokens >= 0),
573
579
  cache_usage_available INTEGER NOT NULL DEFAULT 0 CHECK(cache_usage_available IN (0, 1)),
574
580
  token_usage_source TEXT NOT NULL DEFAULT 'estimated' CHECK(token_usage_source IN ('reported', 'estimated', 'mixed')),
@@ -3768,6 +3774,303 @@ export class Database {
3768
3774
  if (foreignKeys.length > 0)
3769
3775
  throw new Error(`数据库外键检查失败:发现 ${foreignKeys.length} 条异常记录`);
3770
3776
  }
3777
+ const characterAvatarsTablePresent = this.all("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'character_avatars'").length > 0;
3778
+ if (!applied.has(102) || !characterAvatarsTablePresent) {
3779
+ this.transaction(() => {
3780
+ this.run(`CREATE TABLE IF NOT EXISTS character_avatars (
3781
+ character_id TEXT PRIMARY KEY REFERENCES characters(id) ON DELETE CASCADE,
3782
+ mime_type TEXT NOT NULL CHECK(mime_type IN ('image/jpeg', 'image/png', 'image/webp', 'image/gif')),
3783
+ byte_length INTEGER NOT NULL CHECK(byte_length > 0 AND byte_length <= 2097152),
3784
+ sha256 TEXT NOT NULL CHECK(length(sha256) = 64),
3785
+ storage_key TEXT NOT NULL UNIQUE,
3786
+ width INTEGER NOT NULL CHECK(width > 0),
3787
+ height INTEGER NOT NULL CHECK(height > 0),
3788
+ updated_at TEXT NOT NULL
3789
+ )`);
3790
+ this.run("CREATE INDEX IF NOT EXISTS idx_character_avatars_storage_key ON character_avatars(storage_key)");
3791
+ this.run("INSERT OR IGNORE INTO schema_migrations (version, applied_at) VALUES (102, ?)", new Date().toISOString());
3792
+ });
3793
+ const integrity = this.all("PRAGMA integrity_check");
3794
+ if (integrity.some((row) => row.integrity_check !== "ok")) {
3795
+ throw new Error(`数据库完整性检查失败:${integrity.map((row) => row.integrity_check).join(";")}`);
3796
+ }
3797
+ const foreignKeys = this.all("PRAGMA foreign_key_check");
3798
+ if (foreignKeys.length > 0)
3799
+ throw new Error(`数据库外键检查失败:发现 ${foreignKeys.length} 条异常记录`);
3800
+ }
3801
+ const aiConversationUserIndexPresent = this.all("SELECT 1 FROM sqlite_master WHERE type = 'index' AND name = 'idx_ai_conversations_work_creator'").length > 0;
3802
+ if (!applied.has(103) || !aiConversationUserIndexPresent) {
3803
+ this.transaction(() => {
3804
+ this.run(`UPDATE ai_conversations
3805
+ SET created_by_user_id = (
3806
+ SELECT work.owner_user_id FROM works work WHERE work.id = ai_conversations.work_id
3807
+ )
3808
+ WHERE created_by_user_id IS NULL
3809
+ AND EXISTS (
3810
+ SELECT 1 FROM works work
3811
+ WHERE work.id = ai_conversations.work_id AND work.owner_user_id IS NOT NULL
3812
+ )`);
3813
+ this.run(`CREATE INDEX IF NOT EXISTS idx_ai_conversations_work_creator
3814
+ ON ai_conversations(work_id, created_by_user_id, is_favorite, updated_at DESC, created_at DESC)`);
3815
+ this.run("INSERT OR IGNORE INTO schema_migrations (version, applied_at) VALUES (103, ?)", new Date().toISOString());
3816
+ });
3817
+ const integrity = this.all("PRAGMA integrity_check");
3818
+ if (integrity.some((row) => row.integrity_check !== "ok")) {
3819
+ throw new Error(`数据库完整性检查失败:${integrity.map((row) => row.integrity_check).join(";")}`);
3820
+ }
3821
+ const foreignKeys = this.all("PRAGMA foreign_key_check");
3822
+ if (foreignKeys.length > 0)
3823
+ throw new Error(`数据库外键检查失败:发现 ${foreignKeys.length} 条异常记录`);
3824
+ }
3825
+ if (!applied.has(104)) {
3826
+ this.raw.exec("PRAGMA foreign_keys = OFF");
3827
+ try {
3828
+ this.transaction(() => {
3829
+ this.run(`CREATE TABLE providers_v104 (
3830
+ id TEXT PRIMARY KEY,
3831
+ work_id TEXT NOT NULL REFERENCES works(id) ON DELETE CASCADE,
3832
+ name TEXT NOT NULL,
3833
+ base_url TEXT NOT NULL,
3834
+ protocol TEXT NOT NULL DEFAULT 'openai-chat-completions' CHECK(protocol IN ('openai-chat-completions', 'openai-responses', 'anthropic-messages', 'google-vertex')),
3835
+ encrypted_key TEXT NOT NULL,
3836
+ key_iv TEXT NOT NULL,
3837
+ key_tag TEXT NOT NULL,
3838
+ key_hint TEXT NOT NULL,
3839
+ status TEXT NOT NULL DEFAULT 'disabled',
3840
+ connection_status TEXT NOT NULL DEFAULT 'unchecked',
3841
+ concurrency_limit INTEGER NOT NULL DEFAULT 10 CHECK(concurrency_limit BETWEEN 1 AND 100),
3842
+ rpm_limit INTEGER NOT NULL DEFAULT 10 CHECK(rpm_limit BETWEEN 1 AND 10000),
3843
+ max_tokens INTEGER NOT NULL DEFAULT 32000 CHECK(max_tokens BETWEEN 1 AND 32768),
3844
+ max_tokens_parameter TEXT NOT NULL DEFAULT 'max_tokens' CHECK(max_tokens_parameter IN ('max_tokens', 'max_completion_tokens')),
3845
+ default_model_id TEXT,
3846
+ note TEXT NOT NULL DEFAULT '',
3847
+ last_error TEXT,
3848
+ last_success_at TEXT,
3849
+ created_at TEXT NOT NULL,
3850
+ updated_at TEXT NOT NULL
3851
+ )`);
3852
+ this.run(`INSERT INTO providers_v104 (
3853
+ id, work_id, name, base_url, protocol, encrypted_key, key_iv, key_tag, key_hint, status,
3854
+ connection_status, concurrency_limit, rpm_limit, max_tokens, max_tokens_parameter, default_model_id, note,
3855
+ last_error, last_success_at, created_at, updated_at
3856
+ )
3857
+ SELECT
3858
+ id, work_id, name, base_url, protocol, encrypted_key, key_iv, key_tag, key_hint, status,
3859
+ connection_status, concurrency_limit, rpm_limit, max_tokens, max_tokens_parameter, default_model_id, note,
3860
+ last_error, last_success_at, created_at, updated_at
3861
+ FROM providers`);
3862
+ this.run("DROP TABLE providers");
3863
+ this.run("ALTER TABLE providers_v104 RENAME TO providers");
3864
+ this.run(`CREATE TRIGGER IF NOT EXISTS ai_connectivity_test_states_provider_delete
3865
+ AFTER DELETE ON providers BEGIN
3866
+ DELETE FROM ai_connectivity_test_states WHERE object_type = 'provider' AND object_id = OLD.id;
3867
+ END`);
3868
+ this.run("INSERT INTO schema_migrations (version, applied_at) VALUES (104, ?)", new Date().toISOString());
3869
+ });
3870
+ }
3871
+ finally {
3872
+ this.raw.exec("PRAGMA foreign_keys = ON");
3873
+ }
3874
+ const integrity = this.all("PRAGMA integrity_check");
3875
+ if (integrity.some((row) => row.integrity_check !== "ok")) {
3876
+ throw new Error(`数据库完整性检查失败:${integrity.map((row) => row.integrity_check).join(";")}`);
3877
+ }
3878
+ const foreignKeys = this.all("PRAGMA foreign_key_check");
3879
+ if (foreignKeys.length > 0)
3880
+ throw new Error(`数据库外键检查失败:发现 ${foreignKeys.length} 条异常记录`);
3881
+ }
3882
+ const volumeStoryOrderIndexPresent = this.all("SELECT 1 FROM sqlite_master WHERE type = 'index' AND name = 'idx_volumes_story_order'").length > 0;
3883
+ if (!applied.has(105) || !volumeStoryOrderIndexPresent) {
3884
+ this.transaction(() => {
3885
+ const columns = new Set(this.all("PRAGMA table_info(volumes)").map((row) => String(row.name)));
3886
+ if (!columns.has("story_order")) {
3887
+ this.run("ALTER TABLE volumes ADD COLUMN story_order INTEGER NOT NULL DEFAULT 0");
3888
+ this.run("UPDATE volumes SET story_order = sort_order");
3889
+ }
3890
+ this.run("CREATE INDEX IF NOT EXISTS idx_volumes_story_order ON volumes(work_id, story_order)");
3891
+ this.run("INSERT OR IGNORE INTO schema_migrations (version, applied_at) VALUES (105, ?)", new Date().toISOString());
3892
+ });
3893
+ const integrity = this.all("PRAGMA integrity_check");
3894
+ if (integrity.some((row) => row.integrity_check !== "ok")) {
3895
+ throw new Error(`数据库完整性检查失败:${integrity.map((row) => row.integrity_check).join(";")}`);
3896
+ }
3897
+ const foreignKeys = this.all("PRAGMA foreign_key_check");
3898
+ if (foreignKeys.length > 0)
3899
+ throw new Error(`数据库外键检查失败:发现 ${foreignKeys.length} 条异常记录`);
3900
+ }
3901
+ const providerThinkingTypePresent = this.all("PRAGMA table_info(providers)").some((row) => String(row.name) === "thinking_type");
3902
+ if (!applied.has(106) || !providerThinkingTypePresent) {
3903
+ this.transaction(() => {
3904
+ const columns = new Set(this.all("PRAGMA table_info(providers)").map((row) => String(row.name)));
3905
+ if (!columns.has("thinking_type")) {
3906
+ this.run("ALTER TABLE providers ADD COLUMN thinking_type TEXT NOT NULL DEFAULT 'enabled' CHECK(thinking_type IN ('enabled', 'adaptive'))");
3907
+ }
3908
+ this.run("INSERT OR IGNORE INTO schema_migrations (version, applied_at) VALUES (106, ?)", new Date().toISOString());
3909
+ });
3910
+ const integrity = this.all("PRAGMA integrity_check");
3911
+ if (integrity.some((row) => row.integrity_check !== "ok")) {
3912
+ throw new Error(`数据库完整性检查失败:${integrity.map((row) => row.integrity_check).join(";")}`);
3913
+ }
3914
+ const foreignKeys = this.all("PRAGMA foreign_key_check");
3915
+ if (foreignKeys.length > 0)
3916
+ throw new Error(`数据库外键检查失败:发现 ${foreignKeys.length} 条异常记录`);
3917
+ }
3918
+ const cacheWriteInputTokensPresent = this.all("PRAGMA table_info(ai_calls)").some((row) => String(row.name) === "cache_write_input_tokens");
3919
+ if (!applied.has(107) || !cacheWriteInputTokensPresent) {
3920
+ this.transaction(() => {
3921
+ const columns = new Set(this.all("PRAGMA table_info(ai_calls)").map((row) => String(row.name)));
3922
+ if (!columns.has("cache_write_input_tokens")) {
3923
+ this.run("ALTER TABLE ai_calls ADD COLUMN cache_write_input_tokens INTEGER NOT NULL DEFAULT 0 CHECK(cache_write_input_tokens >= 0)");
3924
+ }
3925
+ this.run("INSERT OR IGNORE INTO schema_migrations (version, applied_at) VALUES (107, ?)", new Date().toISOString());
3926
+ });
3927
+ const integrity = this.all("PRAGMA integrity_check");
3928
+ if (integrity.some((row) => row.integrity_check !== "ok")) {
3929
+ throw new Error(`数据库完整性检查失败:${integrity.map((row) => row.integrity_check).join(";")}`);
3930
+ }
3931
+ const foreignKeys = this.all("PRAGMA foreign_key_check");
3932
+ if (foreignKeys.length > 0)
3933
+ throw new Error(`数据库外键检查失败:发现 ${foreignKeys.length} 条异常记录`);
3934
+ }
3935
+ if (!applied.has(108)) {
3936
+ this.transaction(() => {
3937
+ const columns = new Set(this.all("PRAGMA table_info(work_ai_settings)").map((row) => String(row.name)));
3938
+ if (!columns.has("monthly_token_quota")) {
3939
+ this.run("ALTER TABLE work_ai_settings ADD COLUMN monthly_token_quota INTEGER CHECK(monthly_token_quota IS NULL OR monthly_token_quota >= 10000)");
3940
+ }
3941
+ this.run("INSERT OR IGNORE INTO schema_migrations (version, applied_at) VALUES (108, ?)", new Date().toISOString());
3942
+ });
3943
+ const integrity = this.all("PRAGMA integrity_check");
3944
+ if (integrity.some((row) => row.integrity_check !== "ok")) {
3945
+ throw new Error(`数据库完整性检查失败:${integrity.map((row) => row.integrity_check).join(";")}`);
3946
+ }
3947
+ const foreignKeys = this.all("PRAGMA foreign_key_check");
3948
+ if (foreignKeys.length > 0)
3949
+ throw new Error(`数据库外键检查失败:发现 ${foreignKeys.length} 条异常记录`);
3950
+ }
3951
+ if (!applied.has(109)) {
3952
+ this.transaction(() => {
3953
+ const columns = new Set(this.all("PRAGMA table_info(providers)").map((row) => String(row.name)));
3954
+ if (!columns.has("daily_token_quota")) {
3955
+ this.run("ALTER TABLE providers ADD COLUMN daily_token_quota INTEGER CHECK(daily_token_quota IS NULL OR daily_token_quota >= 10000)");
3956
+ }
3957
+ if (!columns.has("monthly_token_quota")) {
3958
+ this.run("ALTER TABLE providers ADD COLUMN monthly_token_quota INTEGER CHECK(monthly_token_quota IS NULL OR monthly_token_quota >= 10000)");
3959
+ }
3960
+ this.run("INSERT OR IGNORE INTO schema_migrations (version, applied_at) VALUES (109, ?)", new Date().toISOString());
3961
+ });
3962
+ const integrity = this.all("PRAGMA integrity_check");
3963
+ if (integrity.some((row) => row.integrity_check !== "ok")) {
3964
+ throw new Error(`数据库完整性检查失败:${integrity.map((row) => row.integrity_check).join(";")}`);
3965
+ }
3966
+ const foreignKeys = this.all("PRAGMA foreign_key_check");
3967
+ if (foreignKeys.length > 0)
3968
+ throw new Error(`数据库外键检查失败:发现 ${foreignKeys.length} 条异常记录`);
3969
+ }
3970
+ if (!applied.has(110)) {
3971
+ this.raw.exec("PRAGMA foreign_keys = OFF");
3972
+ try {
3973
+ this.transaction(() => {
3974
+ this.run(`CREATE TABLE work_ai_settings_v110 (
3975
+ work_id TEXT PRIMARY KEY REFERENCES works(id) ON DELETE CASCADE,
3976
+ system_prompt TEXT NOT NULL DEFAULT '',
3977
+ daily_token_quota INTEGER CHECK(daily_token_quota IS NULL OR daily_token_quota >= 1),
3978
+ auto_run_enabled INTEGER NOT NULL DEFAULT 0,
3979
+ auto_run_concurrency INTEGER NOT NULL DEFAULT 2,
3980
+ auto_run_batch_limit INTEGER NOT NULL DEFAULT 20,
3981
+ auto_run_daily_task_limit INTEGER NOT NULL DEFAULT 0 CHECK(auto_run_daily_task_limit BETWEEN 0 AND 10000),
3982
+ auto_run_failure_threshold INTEGER NOT NULL DEFAULT 3 CHECK(auto_run_failure_threshold BETWEEN 1 AND 10),
3983
+ auto_run_paused INTEGER NOT NULL DEFAULT 0 CHECK(auto_run_paused IN (0, 1)),
3984
+ auto_run_pause_reason TEXT NOT NULL DEFAULT '',
3985
+ auto_run_resume_at TEXT,
3986
+ auto_run_consecutive_failures INTEGER NOT NULL DEFAULT 0,
3987
+ book_summary_context_percent INTEGER NOT NULL DEFAULT 50 CHECK(book_summary_context_percent BETWEEN 1 AND 90),
3988
+ context_compact_threshold INTEGER NOT NULL DEFAULT 85 CHECK(context_compact_threshold BETWEEN 50 AND 90),
3989
+ agent_tool_call_limit INTEGER NOT NULL DEFAULT 12 CHECK(agent_tool_call_limit BETWEEN 5 AND 1000),
3990
+ agent_tool_call_global_multiplier INTEGER NOT NULL DEFAULT 3 CHECK(agent_tool_call_global_multiplier BETWEEN 1 AND 6),
3991
+ agent_tools_json TEXT NOT NULL DEFAULT '["story_index","read_chapters","search_story_entities","grep","read_character_sections","search_drafts","image"]',
3992
+ title_generation_model_id TEXT REFERENCES models(id) ON DELETE SET NULL,
3993
+ image_tool_model_id TEXT REFERENCES models(id) ON DELETE SET NULL,
3994
+ always_include_setting_info INTEGER NOT NULL DEFAULT 0 CHECK(always_include_setting_info IN (0, 1)),
3995
+ updated_at TEXT NOT NULL,
3996
+ auto_run_stability_delay_minutes INTEGER NOT NULL DEFAULT 2 CHECK(auto_run_stability_delay_minutes BETWEEN 1 AND 120),
3997
+ monthly_token_quota INTEGER CHECK(monthly_token_quota IS NULL OR monthly_token_quota >= 1)
3998
+ )`);
3999
+ this.run(`INSERT INTO work_ai_settings_v110 (
4000
+ work_id, system_prompt, daily_token_quota, auto_run_enabled, auto_run_concurrency, auto_run_batch_limit,
4001
+ auto_run_daily_task_limit, auto_run_failure_threshold, auto_run_paused, auto_run_pause_reason,
4002
+ auto_run_resume_at, auto_run_consecutive_failures, book_summary_context_percent,
4003
+ context_compact_threshold, agent_tool_call_limit, agent_tool_call_global_multiplier,
4004
+ agent_tools_json, title_generation_model_id, image_tool_model_id, always_include_setting_info,
4005
+ updated_at, auto_run_stability_delay_minutes, monthly_token_quota
4006
+ )
4007
+ SELECT
4008
+ work_id, system_prompt, daily_token_quota, auto_run_enabled, auto_run_concurrency, auto_run_batch_limit,
4009
+ auto_run_daily_task_limit, auto_run_failure_threshold, auto_run_paused, auto_run_pause_reason,
4010
+ auto_run_resume_at, auto_run_consecutive_failures, book_summary_context_percent,
4011
+ context_compact_threshold, agent_tool_call_limit, agent_tool_call_global_multiplier,
4012
+ agent_tools_json, title_generation_model_id, image_tool_model_id, always_include_setting_info,
4013
+ updated_at, auto_run_stability_delay_minutes, monthly_token_quota
4014
+ FROM work_ai_settings`);
4015
+ this.run("DROP TABLE work_ai_settings");
4016
+ this.run("ALTER TABLE work_ai_settings_v110 RENAME TO work_ai_settings");
4017
+ this.run("CREATE INDEX IF NOT EXISTS idx_work_ai_settings_work ON work_ai_settings(work_id)");
4018
+ this.run(`CREATE TABLE providers_v110 (
4019
+ id TEXT PRIMARY KEY,
4020
+ work_id TEXT NOT NULL REFERENCES works(id) ON DELETE CASCADE,
4021
+ name TEXT NOT NULL,
4022
+ base_url TEXT NOT NULL,
4023
+ protocol TEXT NOT NULL DEFAULT 'openai-chat-completions' CHECK(protocol IN ('openai-chat-completions', 'openai-responses', 'anthropic-messages', 'google-vertex')),
4024
+ encrypted_key TEXT NOT NULL,
4025
+ key_iv TEXT NOT NULL,
4026
+ key_tag TEXT NOT NULL,
4027
+ key_hint TEXT NOT NULL,
4028
+ status TEXT NOT NULL DEFAULT 'disabled',
4029
+ connection_status TEXT NOT NULL DEFAULT 'unchecked',
4030
+ concurrency_limit INTEGER NOT NULL DEFAULT 10 CHECK(concurrency_limit BETWEEN 1 AND 100),
4031
+ rpm_limit INTEGER NOT NULL DEFAULT 10 CHECK(rpm_limit BETWEEN 1 AND 10000),
4032
+ daily_token_quota INTEGER CHECK(daily_token_quota IS NULL OR daily_token_quota >= 1),
4033
+ monthly_token_quota INTEGER CHECK(monthly_token_quota IS NULL OR monthly_token_quota >= 1),
4034
+ max_tokens INTEGER NOT NULL DEFAULT 32000 CHECK(max_tokens BETWEEN 1 AND 32768),
4035
+ max_tokens_parameter TEXT NOT NULL DEFAULT 'max_tokens' CHECK(max_tokens_parameter IN ('max_tokens', 'max_completion_tokens')),
4036
+ thinking_type TEXT NOT NULL DEFAULT 'enabled' CHECK(thinking_type IN ('enabled', 'adaptive')),
4037
+ default_model_id TEXT,
4038
+ note TEXT NOT NULL DEFAULT '',
4039
+ last_error TEXT,
4040
+ last_success_at TEXT,
4041
+ created_at TEXT NOT NULL,
4042
+ updated_at TEXT NOT NULL
4043
+ )`);
4044
+ this.run(`INSERT INTO providers_v110 (
4045
+ id, work_id, name, base_url, protocol, encrypted_key, key_iv, key_tag, key_hint, status,
4046
+ connection_status, concurrency_limit, rpm_limit, daily_token_quota, monthly_token_quota,
4047
+ max_tokens, max_tokens_parameter, thinking_type, default_model_id, note, last_error, last_success_at, created_at, updated_at
4048
+ )
4049
+ SELECT
4050
+ id, work_id, name, base_url, protocol, encrypted_key, key_iv, key_tag, key_hint, status,
4051
+ connection_status, concurrency_limit, rpm_limit, daily_token_quota, monthly_token_quota,
4052
+ max_tokens, max_tokens_parameter, thinking_type, default_model_id, note, last_error, last_success_at, created_at, updated_at
4053
+ FROM providers`);
4054
+ this.run("DROP TABLE providers");
4055
+ this.run("ALTER TABLE providers_v110 RENAME TO providers");
4056
+ this.run(`CREATE TRIGGER IF NOT EXISTS ai_connectivity_test_states_provider_delete
4057
+ AFTER DELETE ON providers BEGIN
4058
+ DELETE FROM ai_connectivity_test_states WHERE object_type = 'provider' AND object_id = OLD.id;
4059
+ END`);
4060
+ this.run("INSERT OR IGNORE INTO schema_migrations (version, applied_at) VALUES (110, ?)", new Date().toISOString());
4061
+ });
4062
+ }
4063
+ finally {
4064
+ this.raw.exec("PRAGMA foreign_keys = ON");
4065
+ }
4066
+ const integrity = this.all("PRAGMA integrity_check");
4067
+ if (integrity.some((row) => row.integrity_check !== "ok")) {
4068
+ throw new Error(`数据库完整性检查失败:${integrity.map((row) => row.integrity_check).join(";")}`);
4069
+ }
4070
+ const foreignKeys = this.all("PRAGMA foreign_key_check");
4071
+ if (foreignKeys.length > 0)
4072
+ throw new Error(`数据库外键检查失败:发现 ${foreignKeys.length} 条异常记录`);
4073
+ }
3771
4074
  }
3772
4075
  normalizeCharacterName(value) {
3773
4076
  return value.normalize("NFKC").trim().replace(/\s+/gu, " ").toLocaleLowerCase("zh-CN");