@musnows/scriverse 1.0.3 → 1.0.5

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.
@@ -260,10 +260,13 @@ export class OfflineSyncService {
260
260
  replayed: false
261
261
  };
262
262
  }
263
+ // Store 的嵌套事务复用当前事务;独立保存点保证拒绝结果不会提交部分写入。
264
+ this.database.raw.exec("SAVEPOINT offline_sync_mutation");
263
265
  try {
264
266
  const updated = mutation.entityType === "chapter"
265
267
  ? this.store.saveChapter(mutation.entityId, mutation.localSnapshot, "desktop-sync", mutation.mutationId, mutation.changeNote, mutation.baseVersionNo)
266
268
  : this.store.updateSetting(mutation.entityId, mutation.localSnapshot, "desktop-sync", mutation.mutationId, mutation.changeNote, mutation.baseVersionNo);
269
+ this.database.raw.exec("RELEASE SAVEPOINT offline_sync_mutation");
267
270
  return {
268
271
  mutationId: mutation.mutationId,
269
272
  entityType: mutation.entityType,
@@ -280,6 +283,8 @@ export class OfflineSyncService {
280
283
  };
281
284
  }
282
285
  catch (error) {
286
+ this.database.raw.exec("ROLLBACK TO SAVEPOINT offline_sync_mutation");
287
+ this.database.raw.exec("RELEASE SAVEPOINT offline_sync_mutation");
283
288
  if (!(error instanceof AppError))
284
289
  throw error;
285
290
  const latest = this.currentMutationEntityState(mutation.entityType, mutation.entityId);
@@ -1 +1 @@
1
- {"version":3,"file":"offline-sync.js","sourceRoot":"","sources":["../src/offline-sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"offline-sync.js","sourceRoot":"","sources":["../src/offline-sync.ts"],"names":[],"mappings":"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"}
@@ -51,6 +51,17 @@ export function aiQuestionStatusLabel(status) {
51
51
  return QUESTION_STATUS_LABELS[String(status)] ?? String(status);
52
52
  }
53
53
 
54
+ /** 待回答或尚未加载完成时不允许静默关闭提问窗口。 */
55
+ export function aiQuestionDialogCanClose(question) {
56
+ return ["answered", "rejected", "expired"].includes(String(question?.status ?? ""));
57
+ }
58
+
59
+ /** 优先读取结构化错误码,并兼容修复前只保存了错误正文的历史消息。 */
60
+ export function aiFailureCode(text, metadata = {}) {
61
+ if (typeof metadata?.errorCode === "string" && metadata.errorCode) return metadata.errorCode;
62
+ return String(text ?? "").match(/(?:^|\n)错误码:([^\n]+)(?:\n|$)/u)?.[1]?.trim() ?? "";
63
+ }
64
+
54
65
  /** 状态徽章色调:CSS 里按 data-tone 展示统一配色。 */
55
66
  export function statusTone(status) {
56
67
  switch (String(status)) {
@@ -114,19 +125,63 @@ export function parseInteractiveToolPayload(toolCall) {
114
125
  error
115
126
  };
116
127
  }
117
- const options = Array.isArray(toolCall?.arguments?.options) ? toolCall.arguments.options : [];
128
+ const rawArguments = toolCall?.arguments;
129
+ let suppliedArguments = rawArguments;
130
+ if (typeof rawArguments === "string") {
131
+ try { suppliedArguments = JSON.parse(rawArguments); } catch { suppliedArguments = null; }
132
+ }
133
+ const argumentQuestions = Array.isArray(suppliedArguments?.questions)
134
+ ? suppliedArguments.questions
135
+ : suppliedArguments?.question
136
+ ? [{ question: suppliedArguments.question, options: suppliedArguments.options }]
137
+ : [];
138
+ const resultQuestion = ok && result?.question && typeof result.question === "object" && !Array.isArray(result.question)
139
+ ? result.question
140
+ : null;
141
+ const question = resultQuestion && (!Array.isArray(resultQuestion.questions) || resultQuestion.questions.length === 0) && argumentQuestions.length > 0
142
+ ? { ...resultQuestion, questions: argumentQuestions }
143
+ : resultQuestion;
118
144
  return {
119
145
  kind: "question",
120
146
  ok,
121
147
  name,
122
148
  calledAt: toolCall?.calledAt ?? "",
123
- question: ok ? result.question ?? null : null,
124
- argumentOptions: options.map((option) => String(option)),
149
+ question,
150
+ argumentQuestions,
125
151
  message: typeof result?.message === "string" ? result.message : "",
126
152
  error
127
153
  };
128
154
  }
129
155
 
156
+ /** 兼容历史单题、批量题目、字符串选项与完整 API 选项对象。 */
157
+ export function normalizeAiQuestionItems(question) {
158
+ const items = Array.isArray(question?.questions) && question.questions.length > 0
159
+ ? question.questions
160
+ : [{
161
+ question: question?.question ?? "",
162
+ options: question?.options ?? [],
163
+ selectedOption: question?.selectedOption ?? null,
164
+ customAnswer: question?.customAnswer ?? "",
165
+ answerText: question?.answerText ?? "",
166
+ isCustomAnswer: question?.isCustomAnswer === true
167
+ }];
168
+ return items.map((item, index) => ({
169
+ ...item,
170
+ index,
171
+ question: String(item?.question ?? ""),
172
+ options: (Array.isArray(item?.options) ? item.options : []).map((option, optionIndex) => (
173
+ option && typeof option === "object" && !Array.isArray(option)
174
+ ? {
175
+ ...option,
176
+ index: Number.isInteger(option.index) ? Number(option.index) : optionIndex,
177
+ label: String(option.label ?? ""),
178
+ recommended: option.recommended === true || (option.recommended === undefined && optionIndex === 0)
179
+ }
180
+ : { index: optionIndex, label: String(option ?? ""), recommended: optionIndex === 0 }
181
+ ))
182
+ }));
183
+ }
184
+
130
185
  /**
131
186
  * 会话内的最新审批详情缓存:确认/撤销之后写回,避免卡片在重渲染时回退到提交时刻的快照。
132
187
  */
@@ -294,9 +349,7 @@ function buildQuestionCard(model, actions) {
294
349
  card.append(body);
295
350
  }
296
351
 
297
- const options = question?.options?.length
298
- ? question.options.map((option) => option.label)
299
- : model.argumentOptions;
352
+ const options = normalizeAiQuestionItems(question).flatMap((item) => item.options.map((option) => option.label));
300
353
  if (options.length > 0) {
301
354
  const list = document.createElement("ol");
302
355
  list.className = "ai-question-option-preview";
@@ -41,15 +41,18 @@ import { isPhoneClient } from "/phone-client.js?v=20260819-phone-client-v1";
41
41
  import { formatAiToolCallResult } from "/ai-tool-call.js?v=20260801-ai-tool-result-chars-v1";
42
42
  import {
43
43
  AI_WRITE_TOOLS_META,
44
+ aiFailureCode,
45
+ aiQuestionDialogCanClose,
44
46
  cacheAiQuestionView,
45
47
  cacheAiWritePlanDetail,
46
48
  createInteractiveToolCard,
49
+ normalizeAiQuestionItems,
47
50
  parseInteractiveToolPayload,
48
51
  renderApprovalCenterRows,
49
52
  renderWritePlanDetailMarkup,
50
53
  isInteractiveToolPending,
51
54
  aiFormatDateTime
52
- } from "/ai-interactive.js?v=20260903-question-batch-v7";
55
+ } from "/ai-interactive.js?v=20260906-question-recovery-v1";
53
56
  import { copyAiRawMarkdown } from "/ai-message-actions.js?v=20260713-copy-raw-markdown";
54
57
  import { bindPlainTextPaste } from "/plain-text-paste.js?v=20260815-plain-text-paste-v1";
55
58
  import { clipboardImageFiles } from "/character-markdown.js?v=20260820-ai-chat-image-attachments-v1";
@@ -125,6 +128,7 @@ import { collectS3BackupRunTransitions, s3BackupEncryptionKeyFile, s3BackupEncry
125
128
  import { createPresenceClientId, stagePresenceClientIdForRelogin } from "/presence-client-id.js?v=20260810-presence-relogin-v1";
126
129
  import { normalizeUploadProgress, uploadProgressText } from "/upload-progress.js?v=20260812-upload-progress-v1";
127
130
  import { resolveToastRegionHost } from "/toast-layer.js?v=20260822-toast-modal-host-v1";
131
+ import { createToastStack } from "/toast-stack.js?v=20260909-toast-stack-v2";
128
132
  import { buildGlobalReplaceRefreshPlan, resolveGlobalReplaceChapterCount } from "/global-replace-refresh.js?v=20260812-global-replace-tree-v2";
129
133
  import {
130
134
  clampCropRect,
@@ -2898,6 +2902,41 @@ function aiRetryStreamRequestBody(body, retry) {
2898
2902
  : body;
2899
2903
  }
2900
2904
 
2905
+ async function discardPendingAiQuestion(message, button) {
2906
+ const feed = message.closest(".ai-feed");
2907
+ const tab = aiChatTabManager.get(feed?.dataset.aiTabId);
2908
+ if (!tab?.conversationId || !tab.workId || String(tab.workId) !== String(state.work?.id ?? "")) {
2909
+ throw new Error("无法确定待回答问题所属的当前对话");
2910
+ }
2911
+ const label = button.querySelector("span");
2912
+ button.disabled = true;
2913
+ if (label) label.textContent = "正在作废提问";
2914
+ try {
2915
+ const expectedQuestionId = String(message.dataset.pendingQuestionId ?? "");
2916
+ const parameters = new URLSearchParams({ conversationId: tab.conversationId, status: "pending", limit: "1" });
2917
+ const payload = await api(`/api/works/${encodeURIComponent(tab.workId)}/ai/questions?${parameters}`);
2918
+ const questions = Array.isArray(payload) ? payload : (Array.isArray(payload?.questions) ? payload.questions : []);
2919
+ const questionId = String(questions.find((question) => String(question?.id ?? "") === expectedQuestionId)?.id ?? questions[0]?.id ?? "");
2920
+ if (!questionId) {
2921
+ if (label) label.textContent = "提问已处理";
2922
+ button.setAttribute("aria-label", "待回答提问已处理");
2923
+ toast("当前对话已经没有待回答问题,可以重新发送消息");
2924
+ return;
2925
+ }
2926
+ await respondAiUserQuestion(questionId, { action: "reject" });
2927
+ for (const action of tab.feed.querySelectorAll(".ai-question-discard-button")) {
2928
+ action.disabled = true;
2929
+ action.setAttribute("aria-label", "待回答提问已作废");
2930
+ const actionLabel = action.querySelector("span");
2931
+ if (actionLabel) actionLabel.textContent = "提问已作废";
2932
+ }
2933
+ } catch (error) {
2934
+ button.disabled = false;
2935
+ if (label) label.textContent = "作废提问并继续";
2936
+ throw error;
2937
+ }
2938
+ }
2939
+
2901
2940
  function renderMessageCardActions(message) {
2902
2941
  let actions = message.querySelector(".message-card-actions");
2903
2942
  if (!actions) {
@@ -2927,18 +2966,30 @@ function renderMessageCardActions(message) {
2927
2966
  actions.append(copy);
2928
2967
  }
2929
2968
  if (message.dataset.status === "failed" && message.classList.contains("assistant-message")) {
2930
- const retry = document.createElement("button");
2931
- retry.type = "button";
2932
- retry.className = "message-retry-button";
2933
- retry.setAttribute("aria-label", "重试");
2934
- retry.innerHTML = '<svg class="message-action-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M20 11a8 8 0 0 0-14.7-4L4 9"/><path d="M4 4v5h5"/><path d="M4 13a8 8 0 0 0 14.7 4L20 15"/><path d="M20 20v-5h-5"/></svg><span>重试</span>';
2935
- retry.addEventListener("click", () => {
2936
- retry.disabled = true;
2937
- void retryAiMessage(message).finally(() => {
2938
- if (retry.isConnected) retry.disabled = false;
2969
+ if (message.dataset.errorCode === "AI_QUESTION_PENDING") {
2970
+ const discard = document.createElement("button");
2971
+ discard.type = "button";
2972
+ discard.className = "message-retry-button ai-question-discard-button";
2973
+ discard.setAttribute("aria-label", "作废待回答提问并让 AI 继续");
2974
+ discard.innerHTML = '<svg class="message-action-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M5 5l14 14M19 5 5 19"/><path d="M15 12h6M18 9l3 3-3 3"/></svg><span>作废提问并继续</span>';
2975
+ discard.addEventListener("click", () => {
2976
+ void discardPendingAiQuestion(message, discard).catch((error) => toast(`作废提问失败:${error.message}`, "error"));
2939
2977
  });
2940
- });
2941
- actions.append(retry);
2978
+ actions.append(discard);
2979
+ } else {
2980
+ const retry = document.createElement("button");
2981
+ retry.type = "button";
2982
+ retry.className = "message-retry-button";
2983
+ retry.setAttribute("aria-label", "重试");
2984
+ retry.innerHTML = '<svg class="message-action-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M20 11a8 8 0 0 0-14.7-4L4 9"/><path d="M4 4v5h5"/><path d="M4 13a8 8 0 0 0 14.7 4L20 15"/><path d="M20 20v-5h-5"/></svg><span>重试</span>';
2985
+ retry.addEventListener("click", () => {
2986
+ retry.disabled = true;
2987
+ void retryAiMessage(message).finally(() => {
2988
+ if (retry.isConnected) retry.disabled = false;
2989
+ });
2990
+ });
2991
+ actions.append(retry);
2992
+ }
2942
2993
  } else if (message.dataset.messageId && message.classList.contains("assistant-message")) {
2943
2994
  const fork = document.createElement("button");
2944
2995
  fork.type = "button";
@@ -3262,14 +3313,14 @@ function handleInteractiveToolCallEvent(toolCall) {
3262
3313
  return;
3263
3314
  }
3264
3315
  if (name !== "ask_user_question" || toolCall.status === "failed") return;
3265
- const question = toolCall.result?.question;
3316
+ const question = parseInteractiveToolPayload(toolCall)?.question;
3266
3317
  if (!question?.id) return;
3267
3318
  cacheAiQuestionView(question);
3268
3319
  const questionId = String(question.id);
3269
3320
  if (autoOpenedQuestionIds.has(questionId)) return;
3270
3321
  autoOpenedQuestionIds.add(questionId);
3271
3322
  // 直接弹出回答框等待作者选择;不会预填任何答案。
3272
- openAiUserQuestionDialog(questionId).catch(() => undefined);
3323
+ openAiUserQuestionDialog(questionId, question).catch(() => undefined);
3273
3324
  }
3274
3325
 
3275
3326
  function questionsEndpoint(path) {
@@ -3392,22 +3443,7 @@ async function fetchAiUserQuestion(questionId) {
3392
3443
  }
3393
3444
 
3394
3445
  function aiQuestionItems(question) {
3395
- const items = Array.isArray(question?.questions) && question.questions.length > 0
3396
- ? question.questions
3397
- : [{
3398
- question: question?.question ?? "",
3399
- options: question?.options ?? [],
3400
- selectedOption: question?.selectedOption ?? null,
3401
- customAnswer: question?.customAnswer ?? "",
3402
- answerText: question?.answerText ?? "",
3403
- isCustomAnswer: question?.isCustomAnswer === true
3404
- }];
3405
- return items.map((item, index) => ({
3406
- ...item,
3407
- index,
3408
- question: String(item?.question ?? ""),
3409
- options: Array.isArray(item?.options) ? item.options : []
3410
- }));
3446
+ return normalizeAiQuestionItems(question);
3411
3447
  }
3412
3448
 
3413
3449
  function resetAiQuestionDialogState(question) {
@@ -3448,6 +3484,14 @@ function syncAiQuestionAnswerCount() {
3448
3484
  $("#ai-question-answer-count").textContent = `已填写 ${input.value.length} / ${maximum}`;
3449
3485
  }
3450
3486
 
3487
+ function syncAiQuestionDismissState() {
3488
+ const closeButton = $("#ai-question-close");
3489
+ const canClose = aiQuestionDialogCanClose(currentAiQuestionDialogView);
3490
+ closeButton.disabled = !canClose;
3491
+ closeButton.classList.toggle("hidden", !canClose);
3492
+ $("#ai-question-dialog").dataset.dismissLocked = String(!canClose);
3493
+ }
3494
+
3451
3495
  function renderAiUserQuestionOptions(question) {
3452
3496
  const host = $("#ai-question-options");
3453
3497
  const customInput = $("#ai-question-custom-answer");
@@ -3502,6 +3546,7 @@ function renderAiUserQuestionOptions(question) {
3502
3546
  // 提交按钮由选择状态驱动:待回答且已选择(或输入)时才可提交。
3503
3547
  if (isPending) syncAiQuestionSubmitState();
3504
3548
  else $("#ai-question-submit").disabled = true;
3549
+ syncAiQuestionDismissState();
3505
3550
  $("#ai-question-submit").textContent = items.length > 1 ? "提交全部回答" : "提交回答";
3506
3551
  $("#ai-question-skip").disabled = !isPending;
3507
3552
  $("#ai-question-expiry").textContent = isPending
@@ -3517,17 +3562,25 @@ async function refreshAiQuestionDialog() {
3517
3562
  return question;
3518
3563
  }
3519
3564
 
3520
- async function openAiUserQuestionDialog(questionId) {
3565
+ async function openAiUserQuestionDialog(questionId, initialQuestion = null) {
3521
3566
  aiQuestionDialogQuestionId = String(questionId);
3522
3567
  const dialog = $("#ai-question-dialog");
3523
3568
  if (!dialog.open) dialog.showModal();
3524
- $("#ai-question-text").textContent = "";
3525
- $("#ai-question-options").replaceChildren();
3526
- $("#ai-question-custom-answer").value = "";
3527
- $("#ai-question-navigation").classList.add("hidden");
3528
- $("#ai-question-progress").textContent = "正在加载问题";
3529
- syncAiQuestionAnswerCount();
3530
- $("#ai-question-expiry").textContent = "正在加载问题……";
3569
+ if (initialQuestion?.id && String(initialQuestion.id) === aiQuestionDialogQuestionId) {
3570
+ currentAiQuestionDialogView = initialQuestion;
3571
+ resetAiQuestionDialogState(initialQuestion);
3572
+ renderAiUserQuestionOptions(initialQuestion);
3573
+ } else {
3574
+ currentAiQuestionDialogView = null;
3575
+ $("#ai-question-text").textContent = "";
3576
+ $("#ai-question-options").replaceChildren();
3577
+ $("#ai-question-custom-answer").value = "";
3578
+ $("#ai-question-navigation").classList.add("hidden");
3579
+ $("#ai-question-progress").textContent = "正在加载问题";
3580
+ syncAiQuestionAnswerCount();
3581
+ $("#ai-question-expiry").textContent = "正在加载问题……";
3582
+ syncAiQuestionDismissState();
3583
+ }
3531
3584
  try {
3532
3585
  return await refreshAiQuestionDialog();
3533
3586
  } catch (error) {
@@ -5908,6 +5961,15 @@ function formatAiFailureMessage(error) {
5908
5961
  return lines.join("\n");
5909
5962
  }
5910
5963
 
5964
+ function aiFailureMessageMetadata(error) {
5965
+ const details = error?.details && typeof error.details === "object" && !Array.isArray(error.details) ? error.details : {};
5966
+ return {
5967
+ ...(typeof error?.code === "string" ? { errorCode: error.code.slice(0, 100) } : {}),
5968
+ ...(Number.isInteger(error?.status) ? { errorStatus: error.status } : {}),
5969
+ ...(typeof details.questionId === "string" ? { pendingQuestionId: details.questionId } : {})
5970
+ };
5971
+ }
5972
+
5911
5973
  function isAgentToolCallLimitFailure(text) {
5912
5974
  return /more than \d+ tool calls in one response cycle\./u.test(String(text ?? ""));
5913
5975
  }
@@ -6207,6 +6269,7 @@ async function refreshAuthCaptcha(target = "login") {
6207
6269
 
6208
6270
  function clearAuthenticationOverlays() {
6209
6271
  const toastRegion = $("#toast-region");
6272
+ notificationToastStack?.clear();
6210
6273
  toastRegion.replaceChildren();
6211
6274
  document.querySelectorAll("[popover]").forEach((popover) => {
6212
6275
  if (typeof popover.hidePopover === "function" && popover.matches(":popover-open")) popover.hidePopover();
@@ -6365,7 +6428,10 @@ function raiseToastRegion() {
6365
6428
  region.showPopover();
6366
6429
  }
6367
6430
 
6431
+ let notificationToastStack = null;
6432
+
6368
6433
  function dismissToastElement(element) {
6434
+ if (notificationToastStack?.dismiss(element)) return;
6369
6435
  element.remove();
6370
6436
  const region = $("#toast-region");
6371
6437
  if (!region.childElementCount && typeof region.hidePopover === "function" && region.matches(":popover-open")) {
@@ -6382,8 +6448,7 @@ function dismissDeleteToasts() {
6382
6448
  }
6383
6449
 
6384
6450
  function deleteToast(message) {
6385
- toast(message);
6386
- $("#toast-region").lastElementChild?.classList.add("delete-toast");
6451
+ toast(message, "info", "delete-toast");
6387
6452
  }
6388
6453
 
6389
6454
  function dismissChapterInsightToast() {
@@ -6406,10 +6471,17 @@ function toast(message, type = "info", extraClass = "") {
6406
6471
  const messageContent = document.createElement("span");
6407
6472
  messageContent.textContent = message;
6408
6473
  element.append(messageContent);
6409
- element.addEventListener("click", () => dismissToastElement(element), { once: true });
6410
- region.append(element);
6474
+ if (element.classList.contains("delete-toast")) {
6475
+ element.addEventListener("click", () => dismissToastElement(element), { once: true });
6476
+ region.append(element);
6477
+ setTimeout(() => dismissToastElement(element), 3600);
6478
+ } else {
6479
+ notificationToastStack ??= createToastStack(region, {
6480
+ onEmpty: () => dismissToastElement(notificationToastStack.element)
6481
+ });
6482
+ notificationToastStack.add(element);
6483
+ }
6411
6484
  raiseToastRegion();
6412
- setTimeout(() => dismissToastElement(element), 3600);
6413
6485
  }
6414
6486
 
6415
6487
  async function runEntityEditorSave({ busyTarget, button, prepare, save }) {
@@ -15393,6 +15465,20 @@ function syncSettingEditorDirty(markdown = null) {
15393
15465
  entityEditorDirty = settingEditorDirtyTracker.isDirty(settingEditorSnapshot(currentMarkdown));
15394
15466
  }
15395
15467
 
15468
+ function setSettingEditorCategory(category) {
15469
+ const select = $("#setting-editor-category");
15470
+ select.querySelectorAll("option[data-custom-category]").forEach((option) => option.remove());
15471
+ const value = category ?? "世界规则";
15472
+ if (![...select.options].some((option) => option.value === value)) {
15473
+ const option = document.createElement("option");
15474
+ option.value = value;
15475
+ option.textContent = value;
15476
+ option.dataset.customCategory = "true";
15477
+ select.append(option);
15478
+ }
15479
+ select.value = value;
15480
+ }
15481
+
15396
15482
  async function openSettingEditor(item = null, { readOnly = false } = {}) {
15397
15483
  if (!(await loadVditorResources())) return;
15398
15484
  entityEditorReadOnly = readOnly;
@@ -15400,7 +15486,7 @@ async function openSettingEditor(item = null, { readOnly = false } = {}) {
15400
15486
  settingEditorVditor = null;
15401
15487
  settingEditorItem = item;
15402
15488
  $("#setting-editor-name").value = item?.title ?? "";
15403
- $("#setting-editor-category").value = item?.category ?? "世界规则";
15489
+ setSettingEditorCategory(item?.category);
15404
15490
  $("#setting-editor-locked").checked = Boolean(item?.locked);
15405
15491
  $("#setting-editor-body").value = item?.content ?? "";
15406
15492
  const viewOnly = readOnly || !canEditModule("settings");
@@ -15489,7 +15575,7 @@ async function openSettingEditor(item = null, { readOnly = false } = {}) {
15489
15575
  currentItem,
15490
15576
  body: {
15491
15577
  title,
15492
- category: String(form.get("category") ?? "世界规则"),
15578
+ category: String(form.get("category") ?? currentItem?.category ?? "世界规则"),
15493
15579
  content,
15494
15580
  locked,
15495
15581
  status: locked ? "confirmed" : (currentItem?.status ?? "draft"),
@@ -18290,6 +18376,7 @@ async function sendAiWithOptions({ ignoreContextWarning = false, retry = null }
18290
18376
  return;
18291
18377
  }
18292
18378
  const failureMessage = formatAiFailureMessage(error);
18379
+ const failureMetadata = aiFailureMessageMetadata(error);
18293
18380
  let persistedFailureMessage = null;
18294
18381
  try {
18295
18382
  persistedFailureMessage = await persistAiConversationMessage(
@@ -18297,13 +18384,13 @@ async function sendAiWithOptions({ ignoreContextWarning = false, retry = null }
18297
18384
  "assistant",
18298
18385
  failureMessage,
18299
18386
  [],
18300
- {},
18387
+ failureMetadata,
18301
18388
  { requestId: aiAssistantRequestId(request) }
18302
18389
  );
18303
18390
  updateAiConversationSummaryFromMessage(persistedFailureMessage);
18304
18391
  } catch { /* 主请求错误已显示,历史记录保存失败不覆盖原始错误 */ }
18305
18392
  if (aiRequestTargetsCurrentState(request)) {
18306
- appendMessage("assistant", failureMessage, [], persistedFailureMessage?.createdAt, {}, persistedFailureMessage?.id, { tab });
18393
+ appendMessage("assistant", failureMessage, [], persistedFailureMessage?.createdAt, failureMetadata, persistedFailureMessage?.id, { tab });
18307
18394
  }
18308
18395
  } finally {
18309
18396
  aiRequestManager.finish(requestHolder.snapshot);
@@ -18686,6 +18773,9 @@ function appendMessage(role, text, citations = [], createdAt = null, metadata =
18686
18773
  const isInterrupted = role === "assistant" && metadata?.interrupted === true;
18687
18774
  const interruptionCode = typeof metadata?.interruptionCode === "string" ? metadata.interruptionCode : "AI_STREAM_FAILED";
18688
18775
  message.className = `${role === "user" ? "user-message" : "assistant-message"}${isFailure || isInterrupted ? " is-error" : ""}`;
18776
+ const errorCode = isFailure ? aiFailureCode(text, metadata) : "";
18777
+ if (errorCode) message.dataset.errorCode = errorCode;
18778
+ if (isFailure && typeof metadata?.pendingQuestionId === "string") message.dataset.pendingQuestionId = metadata.pendingQuestionId;
18689
18779
  const parsedUserTurn = role === "user" ? parseRoleplayUserTurn(text) : null;
18690
18780
  const messageBody = isFailure
18691
18781
  ? `<p class="ai-error-text">${esc(text)}</p>${aiToolCallSettingsLinkMarkup(text)}`
@@ -18723,11 +18813,20 @@ function appendMessage(role, text, citations = [], createdAt = null, metadata =
18723
18813
  scene.append(sceneLabel, sceneBody);
18724
18814
  message.querySelector(".message-body")?.prepend(scene);
18725
18815
  }
18816
+ const chapterReferences = state.work?.volumes.flatMap((volume) => volume.chapters.map((chapter) => ({
18817
+ id: chapter.id,
18818
+ name: `${volume.title} / ${chapter.title}`
18819
+ }))) ?? [];
18820
+ const settingReferences = state.settings.map((setting) => ({ id: setting.id, name: setting.title }));
18821
+ const contextSettingReferences = [{ id: "include-setting-info", name: "注入上下文设定" }];
18726
18822
  const mentionGroups = role === "user"
18727
18823
  ? [
18728
18824
  ["角色", metadata?.mentionCharacterIds, state.characters],
18729
18825
  ["种族", metadata?.mentionRaceIds, state.races],
18730
- ["组织", metadata?.mentionOrganizationIds, state.organizations]
18826
+ ["组织", metadata?.mentionOrganizationIds, state.organizations],
18827
+ ["设定", metadata?.mentionSettingIds, settingReferences],
18828
+ ["章节", metadata?.mentionChapterIds, chapterReferences],
18829
+ ["能力", metadata?.mentionContextSettingIds, contextSettingReferences]
18731
18830
  ]
18732
18831
  .flatMap(([kind, ids, items]) => userMessageMentionNames(ids, items).map((name) => ({ kind, name })))
18733
18832
  : [];
@@ -18832,15 +18931,30 @@ function continuationGuardMarkup(guard) {
18832
18931
  }
18833
18932
 
18834
18933
  async function applyAcceptedWritingSuggestion(message, suggestion) {
18934
+ if (state.work?.id === suggestion.workId && state.chapter?.id === suggestion.chapterId
18935
+ && (state.dirty || chapterSaveInFlight || chapterSaveGuardInFlight)) {
18936
+ throw new Error("当前章节有未保存修改或正在保存,请先完成保存,再重新生成正文建议");
18937
+ }
18835
18938
  const result = await api(`/api/suggestions/${encodeURIComponent(suggestion.id)}/accept`, { method: "POST", body: {} });
18836
- state.chapter = result.chapter;
18837
- resetChapterDraftLineIds(state.chapter);
18838
- lastSavedChapterSnapshot = { chapterId: state.chapter.id, title: state.chapter.title, content: state.chapter.content };
18839
- $("#chapter-content").value = state.chapter.content;
18840
- scheduleChapterLineNumbers();
18841
- updateChapterStats();
18842
- state.work = await api(`/api/works/${state.work.id}`);
18843
- renderTree();
18939
+ const workId = result.chapter.workId;
18940
+ if (state.work?.id === workId && state.chapter?.id === result.chapter.id
18941
+ && !state.dirty && !chapterSaveInFlight && !chapterSaveGuardInFlight) {
18942
+ cancelChapterAutoSave();
18943
+ state.chapter = result.chapter;
18944
+ resetChapterDraftLineIds(state.chapter);
18945
+ lastSavedChapterSnapshot = { chapterId: state.chapter.id, title: state.chapter.title, content: state.chapter.content };
18946
+ $("#chapter-title").value = state.chapter.title;
18947
+ $("#chapter-content").value = state.chapter.content;
18948
+ scheduleChapterLineNumbers();
18949
+ updateChapterStats();
18950
+ }
18951
+ if (state.work?.id === workId) {
18952
+ const work = await api(`/api/works/${workId}`);
18953
+ if (state.work?.id === workId) {
18954
+ state.work = work;
18955
+ renderTree();
18956
+ }
18957
+ }
18844
18958
  message.querySelector("[data-writing-suggestion-actions]").innerHTML = "<span>已采纳并生成新版本</span>";
18845
18959
  toast("AI 建议已采纳,正文已生成新版本");
18846
18960
  }
@@ -21317,7 +21431,15 @@ $("#ai-write-plan-undo").addEventListener("click", () => {
21317
21431
  if (!aiWritePlanDialogPlanId) return;
21318
21432
  undoAiWritePlan(aiWritePlanDialogPlanId);
21319
21433
  });
21320
- $("#ai-question-close").addEventListener("click", () => $("#ai-question-dialog").close());
21434
+ $("#ai-question-close").addEventListener("click", () => {
21435
+ if (!aiQuestionDialogCanClose(currentAiQuestionDialogView)) return;
21436
+ $("#ai-question-dialog").close();
21437
+ });
21438
+ $("#ai-question-dialog").addEventListener("cancel", (event) => {
21439
+ if (aiQuestionDialogCanClose(currentAiQuestionDialogView)) return;
21440
+ event.preventDefault();
21441
+ toast("请先提交全部回答,或选择“暂不回答”让 AI 继续", "warning");
21442
+ });
21321
21443
 
21322
21444
  function syncAiQuestionSubmitState() {
21323
21445
  const submit = $("#ai-question-submit");