@musnows/scriverse 0.5.8 → 0.5.9
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/ai.js +350 -67
- package/dist/ai.js.map +1 -1
- package/dist/app.js +46 -35
- package/dist/app.js.map +1 -1
- package/dist/cli-core.js +161 -20
- package/dist/cli-core.js.map +1 -1
- package/dist/database.js +72 -0
- package/dist/database.js.map +1 -1
- package/dist/hybrid-search.js +106 -0
- package/dist/hybrid-search.js.map +1 -0
- package/dist/public/app.js +215 -54
- package/dist/public/display-labels.js +13 -1
- package/dist/public/global-search.d.ts +6 -5
- package/dist/public/global-search.js +44 -3
- package/dist/public/index.html +20 -7
- package/dist/public/race-hierarchy.js +0 -35
- package/dist/public/styles.css +24 -5
- package/dist/relationship-search.js +21 -2
- package/dist/relationship-search.js.map +1 -1
- package/dist/store.js +137 -5
- package/dist/store.js.map +1 -1
- package/dist/user-auth.js +27 -1
- package/dist/user-auth.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -2,22 +2,63 @@ const entityTargets = Object.freeze({
|
|
|
2
2
|
setting: Object.freeze({ module: "settings", entity: "setting", resource: "settings" }),
|
|
3
3
|
character: Object.freeze({ module: "characters", entity: "character", resource: "characters" }),
|
|
4
4
|
race: Object.freeze({ module: "races", entity: "race", resource: "races" }),
|
|
5
|
-
organization: Object.freeze({ module: "organizations", entity: "organization", resource: "organizations" })
|
|
5
|
+
organization: Object.freeze({ module: "organizations", entity: "organization", resource: "organizations" }),
|
|
6
|
+
"timeline-track": Object.freeze({ module: "timeline", entity: "timeline-track", resource: "timeline-tracks" }),
|
|
7
|
+
"timeline-event": Object.freeze({ module: "timeline", entity: "timeline-event", resource: "timeline" }),
|
|
8
|
+
relationship: Object.freeze({ module: "relationships", entity: "relationship", resource: "relationships" }),
|
|
9
|
+
"chapter-outline": Object.freeze({ module: "outlines", entity: "chapter-outline", resource: "chapters", suffix: "outline" }),
|
|
10
|
+
foreshadow: Object.freeze({ module: "outlines", entity: "foreshadow", resource: "foreshadows" }),
|
|
11
|
+
review: Object.freeze({ module: "reviews", entity: "review", resource: "reviews" })
|
|
6
12
|
});
|
|
7
13
|
|
|
14
|
+
function positiveLine(value) {
|
|
15
|
+
const line = Number(value);
|
|
16
|
+
return Number.isInteger(line) && line > 0 ? line : null;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function splitGlobalSearchHighlight(value, query) {
|
|
20
|
+
const text = String(value ?? "");
|
|
21
|
+
const needle = String(query ?? "").trim();
|
|
22
|
+
if (!text || !needle) return text ? [{ text, match: false }] : [];
|
|
23
|
+
const lowerText = text.toLocaleLowerCase("zh-CN");
|
|
24
|
+
const lowerNeedle = needle.toLocaleLowerCase("zh-CN");
|
|
25
|
+
const segments = [];
|
|
26
|
+
let cursor = 0;
|
|
27
|
+
while (cursor < text.length) {
|
|
28
|
+
const index = lowerText.indexOf(lowerNeedle, cursor);
|
|
29
|
+
if (index < 0) break;
|
|
30
|
+
if (index > cursor) segments.push({ text: text.slice(cursor, index), match: false });
|
|
31
|
+
segments.push({ text: text.slice(index, index + needle.length), match: true });
|
|
32
|
+
cursor = index + needle.length;
|
|
33
|
+
}
|
|
34
|
+
if (cursor < text.length) segments.push({ text: text.slice(cursor), match: false });
|
|
35
|
+
return segments.length ? segments : [{ text, match: false }];
|
|
36
|
+
}
|
|
37
|
+
|
|
8
38
|
export function resolveGlobalSearchTarget(result = {}) {
|
|
9
39
|
const type = String(result.type ?? "").trim();
|
|
10
40
|
const id = String(result.id ?? "").trim();
|
|
11
41
|
if (!id) return null;
|
|
12
|
-
if (type === "chapter")
|
|
42
|
+
if (type === "chapter") {
|
|
43
|
+
const startLine = positiveLine(result.startLine);
|
|
44
|
+
const endLine = positiveLine(result.endLine);
|
|
45
|
+
return {
|
|
46
|
+
kind: "chapter",
|
|
47
|
+
type,
|
|
48
|
+
id,
|
|
49
|
+
module: "editor",
|
|
50
|
+
...(startLine ? { startLine, endLine: endLine && endLine >= startLine ? endLine : startLine } : {})
|
|
51
|
+
};
|
|
52
|
+
}
|
|
13
53
|
const target = entityTargets[type];
|
|
14
54
|
if (!target) return null;
|
|
55
|
+
const encodedId = encodeURIComponent(id);
|
|
15
56
|
return {
|
|
16
57
|
kind: "entity",
|
|
17
58
|
type,
|
|
18
59
|
id,
|
|
19
60
|
module: target.module,
|
|
20
61
|
entity: target.entity,
|
|
21
|
-
apiPath: `/api/${target.resource}/${
|
|
62
|
+
apiPath: `/api/${target.resource}/${encodedId}${target.suffix ? `/${target.suffix}` : ""}`
|
|
22
63
|
};
|
|
23
64
|
}
|
package/dist/public/index.html
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<link rel="icon" href="/icon.svg?v=20260712" type="image/svg+xml">
|
|
11
11
|
<link rel="manifest" href="/site.webmanifest">
|
|
12
12
|
<link rel="stylesheet" href="/vendor/vditor/dist/index.css?v=3.11.2">
|
|
13
|
-
<link rel="stylesheet" href="/styles.css?v=
|
|
13
|
+
<link rel="stylesheet" href="/styles.css?v=20260729-continuous-analysis-queue-merge-v1">
|
|
14
14
|
</head>
|
|
15
15
|
<body class="auth-pending">
|
|
16
16
|
<section id="auth-view" class="auth-view hidden" aria-labelledby="auth-title">
|
|
@@ -557,7 +557,21 @@
|
|
|
557
557
|
</div>
|
|
558
558
|
<div class="access-dialog-body">
|
|
559
559
|
<form id="search-form" class="search-form">
|
|
560
|
-
<label>关键词<input id="search-query" name="query" type="search" maxlength="
|
|
560
|
+
<label>关键词<input id="search-query" name="query" type="search" maxlength="500" placeholder="搜索正文、设定、人物、时间线、关系、大纲或伏笔" required></label>
|
|
561
|
+
<label>资料类型<select id="search-type" name="type">
|
|
562
|
+
<option value="">全部资料</option>
|
|
563
|
+
<option value="chapter">章节</option>
|
|
564
|
+
<option value="setting">设定</option>
|
|
565
|
+
<option value="character">角色</option>
|
|
566
|
+
<option value="race">种族</option>
|
|
567
|
+
<option value="organization">组织</option>
|
|
568
|
+
<option value="timeline-track">独立时间轴</option>
|
|
569
|
+
<option value="timeline-event">时间线事件</option>
|
|
570
|
+
<option value="relationship">人物关系</option>
|
|
571
|
+
<option value="chapter-outline">章节大纲</option>
|
|
572
|
+
<option value="foreshadow">伏笔</option>
|
|
573
|
+
<option value="review">审核项</option>
|
|
574
|
+
</select></label>
|
|
561
575
|
<button class="primary-button" type="submit">搜索</button>
|
|
562
576
|
</form>
|
|
563
577
|
<div id="search-results" class="search-results" aria-live="polite">
|
|
@@ -696,12 +710,11 @@
|
|
|
696
710
|
<label>Toast 提示位置<select id="toast-position" name="toastPosition" aria-label="Toast 提示位置"><option value="bottom-right">右下角(默认)</option><option value="top-right">右上角</option></select></label>
|
|
697
711
|
<small>该设置对所有用户生效,保存后的提示会立即显示在新位置。</small>
|
|
698
712
|
<fieldset class="pagination-settings-fieldset">
|
|
699
|
-
<legend
|
|
700
|
-
<small
|
|
713
|
+
<legend>可分页模块单页数量</legend>
|
|
714
|
+
<small>以下模块独立设置,允许 10–100 条;默认均为 30 条。种族层级始终完整展示。</small>
|
|
701
715
|
<div class="pagination-settings-grid">
|
|
702
716
|
<label>设定库<input id="page-size-settings" name="pageSizeSettings" type="number" min="10" max="100" step="1" required aria-label="设定库单页数量"></label>
|
|
703
717
|
<label>角色列表<input id="page-size-characters" name="pageSizeCharacters" type="number" min="10" max="100" step="1" required aria-label="角色列表单页数量"></label>
|
|
704
|
-
<label>种族列表<input id="page-size-races" name="pageSizeRaces" type="number" min="10" max="100" step="1" required aria-label="种族列表单页数量"></label>
|
|
705
718
|
<label>组织列表<input id="page-size-organizations" name="pageSizeOrganizations" type="number" min="10" max="100" step="1" required aria-label="组织列表单页数量"></label>
|
|
706
719
|
<label>时间线事件<input id="page-size-timeline" name="pageSizeTimeline" type="number" min="10" max="100" step="1" required aria-label="时间线事件单页数量"></label>
|
|
707
720
|
<label>大纲与伏笔<input id="page-size-outlines" name="pageSizeOutlines" type="number" min="10" max="100" step="1" required aria-label="大纲与伏笔单页数量"></label>
|
|
@@ -739,7 +752,7 @@
|
|
|
739
752
|
<button id="api-key-reset-button" class="primary-button" type="button">生成 API Key</button>
|
|
740
753
|
<div id="api-key-result" class="api-key-result hidden">
|
|
741
754
|
<label>请立即保存<input id="api-key-value" readonly spellcheck="false"></label>
|
|
742
|
-
<button id="api-key-copy-button" type="button">复制</button>
|
|
755
|
+
<button id="api-key-copy-button" class="ghost-button" type="button"><svg class="message-action-icon" viewBox="0 0 24 24" aria-hidden="true"><rect x="8" y="8" width="12" height="12" rx="2"/><path d="M16 8V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h2"/></svg>复制</button>
|
|
743
756
|
</div>
|
|
744
757
|
</div>
|
|
745
758
|
</section>
|
|
@@ -863,6 +876,6 @@
|
|
|
863
876
|
<div id="auth-loading" class="auth-loading" role="status" aria-label="正在载入工作台"></div>
|
|
864
877
|
<script id="vditorIconScript" src="/vendor/vditor/dist/js/icons/ant.js?v=3.11.2"></script>
|
|
865
878
|
<script src="/vendor/vditor/dist/index.min.js?v=3.11.2"></script>
|
|
866
|
-
<script type="module" src="/app.js?v=
|
|
879
|
+
<script type="module" src="/app.js?v=20260729-continuous-analysis-queue-merge-v1"></script>
|
|
867
880
|
</body>
|
|
868
881
|
</html>
|
|
@@ -83,38 +83,3 @@ export function buildRaceForest(races) {
|
|
|
83
83
|
};
|
|
84
84
|
return sort(roots);
|
|
85
85
|
}
|
|
86
|
-
|
|
87
|
-
export function paginateRaceForest(races, page, limit) {
|
|
88
|
-
const safeLimit = Math.max(1, Math.floor(Number(limit) || 1));
|
|
89
|
-
const forest = buildRaceForest(races);
|
|
90
|
-
const pages = [];
|
|
91
|
-
let currentItems = [];
|
|
92
|
-
let currentItemCount = 0;
|
|
93
|
-
const subtreeSize = (node) => 1 + node.children.reduce((total, child) => total + subtreeSize(child), 0);
|
|
94
|
-
|
|
95
|
-
for (const root of forest) {
|
|
96
|
-
const rootItemCount = subtreeSize(root);
|
|
97
|
-
if (currentItems.length && currentItemCount + rootItemCount > safeLimit) {
|
|
98
|
-
pages.push({ items: currentItems, itemCount: currentItemCount });
|
|
99
|
-
currentItems = [];
|
|
100
|
-
currentItemCount = 0;
|
|
101
|
-
}
|
|
102
|
-
currentItems.push(root);
|
|
103
|
-
currentItemCount += rootItemCount;
|
|
104
|
-
}
|
|
105
|
-
if (currentItems.length || !pages.length) pages.push({ items: currentItems, itemCount: currentItemCount });
|
|
106
|
-
|
|
107
|
-
const pageCount = pages.length;
|
|
108
|
-
const safePage = Math.min(Math.max(1, Number(page) || 1), pageCount);
|
|
109
|
-
const selectedPage = pages[safePage - 1];
|
|
110
|
-
return {
|
|
111
|
-
items: selectedPage.items,
|
|
112
|
-
itemCount: selectedPage.itemCount,
|
|
113
|
-
page: safePage,
|
|
114
|
-
limit: safeLimit,
|
|
115
|
-
total: races.length,
|
|
116
|
-
pageCount,
|
|
117
|
-
hasMore: safePage < pageCount,
|
|
118
|
-
nextPage: safePage < pageCount ? safePage + 1 : null
|
|
119
|
-
};
|
|
120
|
-
}
|
package/dist/public/styles.css
CHANGED
|
@@ -818,9 +818,9 @@ body.work-viewer-mode [data-item-list-remove],
|
|
|
818
818
|
body.work-viewer-mode [data-structured-list-add],
|
|
819
819
|
body.work-viewer-mode [data-structured-list-remove],
|
|
820
820
|
body.work-viewer-mode .character-editor-actions { display: none !important; }
|
|
821
|
-
.search-form { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: end; gap: 10px; margin: 0; }
|
|
821
|
+
.search-form { display: grid; grid-template-columns: minmax(0, 1fr) minmax(150px, .36fr) auto; align-items: end; gap: 10px; margin: 0; }
|
|
822
822
|
.search-form label { display: grid; gap: 6px; color: var(--muted); font-size: 11px; }
|
|
823
|
-
.search-form input {
|
|
823
|
+
.search-form input, .search-form select {
|
|
824
824
|
width: 100%;
|
|
825
825
|
min-height: 38px;
|
|
826
826
|
padding: 9px 10px;
|
|
@@ -832,6 +832,7 @@ body.work-viewer-mode .character-editor-actions { display: none !important; }
|
|
|
832
832
|
}
|
|
833
833
|
.search-form .primary-button { min-height: 38px; white-space: nowrap; }
|
|
834
834
|
.search-results { display: grid; gap: 8px; max-height: min(52vh, 480px); overflow: auto; }
|
|
835
|
+
.search-results-summary { margin: 0; padding: 2px 2px 5px; color: var(--muted); font-size: 10px; }
|
|
835
836
|
.search-results-empty, .search-results-status {
|
|
836
837
|
margin: 0;
|
|
837
838
|
padding: 28px 12px;
|
|
@@ -882,6 +883,17 @@ body.work-viewer-mode .character-editor-actions { display: none !important; }
|
|
|
882
883
|
-webkit-line-clamp: 2;
|
|
883
884
|
-webkit-box-orient: vertical;
|
|
884
885
|
}
|
|
886
|
+
.search-result mark { border-radius: 2px; padding: 0 1px; background: color-mix(in srgb, var(--accent) 20%, transparent); color: var(--ink); }
|
|
887
|
+
.search-result-details { display: flex; min-width: 0; flex-wrap: wrap; align-items: center; gap: 5px; color: var(--muted); }
|
|
888
|
+
.search-result-details small { overflow: hidden; margin-right: auto; font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }
|
|
889
|
+
.search-result-chip { padding: 2px 6px; border: 1px solid var(--line); border-radius: 999px; background: var(--surface); font-size: 9px; line-height: 1.3; }
|
|
890
|
+
.search-result-chip-exact { border-color: color-mix(in srgb, var(--accent) 35%, var(--line)); color: var(--accent-dark); }
|
|
891
|
+
.search-result-chip-phonetic { border-color: color-mix(in srgb, var(--green) 35%, var(--line)); color: var(--green); }
|
|
892
|
+
.search-result-preview { display: grid; gap: 0; margin: 0; }
|
|
893
|
+
.search-result-preview > div { display: grid; grid-template-columns: minmax(90px, .28fr) minmax(0, 1fr); gap: 14px; padding: 11px 2px; border-bottom: 1px solid var(--line); }
|
|
894
|
+
.search-result-preview > div:last-child { border-bottom: 0; }
|
|
895
|
+
.search-result-preview dt { color: var(--muted); font-size: 10px; }
|
|
896
|
+
.search-result-preview dd { margin: 0; color: var(--ink); font-size: 12px; line-height: 1.6; white-space: pre-wrap; }
|
|
885
897
|
.work-access-field { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 14px; border: 1px solid var(--line); border-radius: 5px; background: var(--surface-soft); }
|
|
886
898
|
.work-access-field > div { display: grid; gap: 6px; min-width: 0; }
|
|
887
899
|
.work-access-field strong { color: var(--ink); font-size: 12px; }
|
|
@@ -982,7 +994,7 @@ body.work-viewer-mode .character-editor-actions { display: none !important; }
|
|
|
982
994
|
.api-key-result.hidden { display: none; }
|
|
983
995
|
.api-key-result label { display: grid; gap: 6px; color: var(--muted); font-size: 11px; }
|
|
984
996
|
.api-key-result input { width: 100%; min-height: 38px; padding: 9px 10px; background: var(--surface); font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 11px; }
|
|
985
|
-
.api-key-result button { min-height: 38px; }
|
|
997
|
+
.api-key-result button { display: inline-flex; align-items: center; gap: 6px; min-height: 38px; }
|
|
986
998
|
.book-access-badge { display: inline-flex; width: fit-content; margin-top: 7px; padding: 2px 7px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); color: var(--accent-dark); font-size: 9px; }
|
|
987
999
|
.book-shelf { display: grid; grid-template-columns: repeat(auto-fill, minmax(205px, 1fr)); gap: clamp(22px, 3vw, 38px); width: 100%; min-width: 0; max-width: 1400px; margin: 0 auto; }
|
|
988
1000
|
.book-card { position: relative; min-width: 0; border: 0; background: transparent; text-align: left; }
|
|
@@ -1357,7 +1369,11 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1357
1369
|
align-self: center;
|
|
1358
1370
|
margin: 0;
|
|
1359
1371
|
}
|
|
1372
|
+
.task-auto-run-help { grid-column: 1; margin: -4px 0 0; color: var(--muted); font-size: 9px; line-height: 1.45; }
|
|
1360
1373
|
.task-auto-run-meta { grid-column: 1; margin: 0; color: var(--muted); font-size: 10px; }
|
|
1374
|
+
.task-auto-run-alert { display: grid; grid-column: 1; gap: 3px; margin: 0; padding: 9px 10px; border: 1px solid color-mix(in srgb, var(--accent) 30%, var(--line)); border-radius: 4px; background: color-mix(in srgb, var(--accent) 8%, var(--surface)); font-size: 10px; line-height: 1.45; }
|
|
1375
|
+
.task-auto-run-alert strong { color: var(--ink); }
|
|
1376
|
+
.task-auto-run-alert span, .task-auto-run-alert small { color: var(--muted); }
|
|
1361
1377
|
.task-auto-run-progress {
|
|
1362
1378
|
display: grid;
|
|
1363
1379
|
grid-column: 2;
|
|
@@ -1373,6 +1389,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1373
1389
|
.task-auto-run-progress-ring-value { stroke: var(--accent); stroke-linecap: round; transition: stroke-dasharray .25s ease; }
|
|
1374
1390
|
.task-auto-run-progress-ring.is-running svg { animation: task-auto-run-active 1.8s ease-in-out infinite; }
|
|
1375
1391
|
.task-auto-run-progress-ring.is-running .task-auto-run-progress-ring-value { stroke: var(--task-running); }
|
|
1392
|
+
.task-auto-run-progress-ring.is-paused .task-auto-run-progress-ring-value { stroke: var(--accent); }
|
|
1376
1393
|
.task-auto-run-progress-ring-label { position: absolute; inset: 22px; display: grid; align-content: center; justify-items: center; gap: 3px; text-align: center; }
|
|
1377
1394
|
.task-auto-run-progress-ring-label strong { color: var(--ink); font-family: var(--font-latin), monospace; font-size: 22px; font-weight: 600; line-height: 1; }
|
|
1378
1395
|
.task-auto-run-progress-ring-label span { color: var(--muted); font-size: 9px; line-height: 1.35; }
|
|
@@ -1386,6 +1403,8 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1386
1403
|
.task-auto-run-progress-bar.is-running { animation: task-auto-run-active 1.8s ease-in-out infinite; }
|
|
1387
1404
|
.task-auto-run-progress-bar.is-running::-webkit-progress-value { background: var(--task-running); }
|
|
1388
1405
|
.task-auto-run-progress-bar.is-running::-moz-progress-bar { background: var(--task-running); }
|
|
1406
|
+
.task-auto-run-progress-bar.is-paused::-webkit-progress-value { background: var(--accent); }
|
|
1407
|
+
.task-auto-run-progress-bar.is-paused::-moz-progress-bar { background: var(--accent); }
|
|
1389
1408
|
.task-status-cell { width: 116px; white-space: nowrap; }
|
|
1390
1409
|
.task-status-badge {
|
|
1391
1410
|
--task-status-color: var(--muted);
|
|
@@ -1901,7 +1920,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1901
1920
|
.galaxy-node.is-dragging { cursor: grabbing; z-index: 6; }
|
|
1902
1921
|
.galaxy-close { position: fixed; z-index: 8; top: 22px; right: 25px; width: 42px; height: 42px; border: 1px solid rgba(255,255,255,.22); border-radius: 50%; background: rgba(5,7,13,.62); color: #fff; font-size: 25px; }
|
|
1903
1922
|
.galaxy-stats { position: fixed; z-index: 7; left: 22px; bottom: 20px; color: rgba(235,245,255,.82); font-size: 11px; }
|
|
1904
|
-
.galaxy-controls { position: fixed; z-index: 7; right: 23px; top: 50%; display: grid; width:
|
|
1923
|
+
.galaxy-controls { position: fixed; z-index: 7; right: 23px; top: 50%; display: grid; width: 104px; gap: 7px; transform: translateY(-50%); padding: 10px; border: 1px solid rgba(255,255,255,.12); border-radius: 8px; background: rgba(5,7,13,.66); backdrop-filter: blur(12px); }
|
|
1905
1924
|
.galaxy-controls button { border: 1px solid rgba(255,255,255,.14); border-radius: 5px; padding: 7px; background: rgba(255,255,255,.05); color: #dcecff; font-size: 9px; }
|
|
1906
1925
|
.galaxy-legend { position: fixed; z-index: 7; right: 22px; bottom: 18px; display: grid; grid-template-columns: 1fr 1fr; gap: 7px 12px; margin: 0; padding: 11px; list-style: none; border: 1px solid rgba(255,255,255,.12); border-radius: 7px; background: rgba(5,7,13,.66); color: rgba(235,245,255,.8); font-size: 9px; }.galaxy-legend li { display: flex; align-items: center; gap: 5px; }
|
|
1907
1926
|
.galaxy-detail { position: fixed; z-index: 7; left: 22px; top: 22px; width: min(300px, 30vw); max-height: 55vh; overflow: auto; padding: 15px; border: 1px solid rgba(255,255,255,.14); border-radius: 8px; background: rgba(5,7,13,.74); backdrop-filter: blur(14px); }.galaxy-detail strong, .galaxy-detail small { display: block; }.galaxy-detail strong { font-size: 18px; }.galaxy-detail small, .galaxy-detail p { color: rgba(220,235,250,.65); font-size: 9px; }.galaxy-detail ul { display: grid; gap: 7px; padding: 0; list-style: none; font-size: 9px; }.galaxy-detail li { display: flex; align-items: center; gap: 6px; }
|
|
@@ -2706,7 +2725,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
2706
2725
|
.top-actions .ghost-button:not(.settings-button) { display: none; }
|
|
2707
2726
|
.book-shelf { grid-template-columns: repeat(3, minmax(180px, 1fr)); }
|
|
2708
2727
|
.task-auto-run-panel { grid-template-columns: minmax(0, 1fr); column-gap: 0; }
|
|
2709
|
-
.task-auto-run-copy, .task-auto-run-controls, .task-auto-run-meta { grid-column: 1; }
|
|
2728
|
+
.task-auto-run-copy, .task-auto-run-controls, .task-auto-run-help, .task-auto-run-meta, .task-auto-run-alert { grid-column: 1; }
|
|
2710
2729
|
.task-auto-run-progress { grid-column: 1; grid-row: auto; justify-self: stretch; width: 100%; }
|
|
2711
2730
|
.task-auto-run-progress-ring { display: none; }
|
|
2712
2731
|
.task-auto-run-progress-bar-layout { display: grid; gap: 6px; width: 100%; }
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { pinyin } from "pinyin-pro";
|
|
2
|
-
export const RELATIONSHIP_SEARCH_POLICY_VERSION =
|
|
2
|
+
export const RELATIONSHIP_SEARCH_POLICY_VERSION = 3;
|
|
3
3
|
export function normalizeRelationshipSearchText(value) {
|
|
4
4
|
return value.normalize("NFKC").toLocaleLowerCase("zh-CN");
|
|
5
5
|
}
|
|
@@ -28,11 +28,30 @@ export function relationshipPinyinSyllables(value) {
|
|
|
28
28
|
export function relationshipPinyinTokens(value) {
|
|
29
29
|
return relationshipPinyinSyllables(value).map(safePinyinToken);
|
|
30
30
|
}
|
|
31
|
+
export function relationshipPinyinSearchTokens(value) {
|
|
32
|
+
const normalized = normalizeRelationshipSearchText(value).trim();
|
|
33
|
+
if (/\p{Script=Han}/u.test(normalized))
|
|
34
|
+
return relationshipPinyinTokens(normalized);
|
|
35
|
+
const compact = normalized.replace(/[\p{White_Space}·・\-—']/gu, "");
|
|
36
|
+
return compact ? [safePinyinToken(compact)] : [];
|
|
37
|
+
}
|
|
38
|
+
export function relationshipPinyinJoinedTokens(value, maximumSyllables = 6) {
|
|
39
|
+
const tokens = new Set();
|
|
40
|
+
for (const match of value.matchAll(/[\p{Script=Han}]{2,}/gu)) {
|
|
41
|
+
const syllables = relationshipPinyinSyllables(match[0]);
|
|
42
|
+
for (let start = 0; start < syllables.length; start += 1) {
|
|
43
|
+
for (let length = 2; length <= maximumSyllables && start + length <= syllables.length; length += 1) {
|
|
44
|
+
tokens.add(safePinyinToken(syllables.slice(start, start + length).join("")));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return [...tokens];
|
|
49
|
+
}
|
|
31
50
|
export function relationshipCharacterTokenText(value) {
|
|
32
51
|
return relationshipCharacterTokens(value).join(" ");
|
|
33
52
|
}
|
|
34
53
|
export function relationshipPinyinTokenText(value) {
|
|
35
|
-
return relationshipPinyinTokens(value).join(" ");
|
|
54
|
+
return [...relationshipPinyinTokens(value), ...relationshipPinyinJoinedTokens(value)].join(" ");
|
|
36
55
|
}
|
|
37
56
|
export function ftsPhrase(tokens) {
|
|
38
57
|
return `"${tokens.join(" ").replaceAll('"', '""')}"`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relationship-search.js","sourceRoot":"","sources":["../src/relationship-search.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"relationship-search.js","sourceRoot":"","sources":["../src/relationship-search.ts"],"names":[],"mappings":"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"}
|
package/dist/store.js
CHANGED
|
@@ -660,6 +660,12 @@ export class Store {
|
|
|
660
660
|
autoRunEnabled: Number(row?.auto_run_enabled ?? 0) === 1,
|
|
661
661
|
autoRunConcurrency: Math.min(8, Math.max(1, Number(row?.auto_run_concurrency ?? 2) || 2)),
|
|
662
662
|
autoRunBatchLimit: Math.min(200, Math.max(1, Number(row?.auto_run_batch_limit ?? 20) || 20)),
|
|
663
|
+
autoRunDailyTaskLimit: Math.min(10_000, Math.max(0, Number(row?.auto_run_daily_task_limit ?? 0) || 0)),
|
|
664
|
+
autoRunFailureThreshold: Math.min(10, Math.max(1, Number(row?.auto_run_failure_threshold ?? 3) || 3)),
|
|
665
|
+
autoRunPaused: Number(row?.auto_run_paused ?? 0) === 1,
|
|
666
|
+
autoRunPauseReason: String(row?.auto_run_pause_reason ?? ""),
|
|
667
|
+
autoRunResumeAt: row?.auto_run_resume_at === null || row?.auto_run_resume_at === undefined ? null : String(row.auto_run_resume_at),
|
|
668
|
+
autoRunConsecutiveFailures: Math.max(0, Number(row?.auto_run_consecutive_failures ?? 0) || 0),
|
|
663
669
|
bookSummaryContextPercent: Math.min(90, Math.max(1, Number(row?.book_summary_context_percent ?? 50) || 50)),
|
|
664
670
|
contextCompactThreshold: Math.min(90, Math.max(50, Number(row?.context_compact_threshold ?? 85) || 85)),
|
|
665
671
|
agentTools: json(String(row?.agent_tools_json ?? '["story_index","read_chapters","search_story_entities","grep","read_character_sections"]'), ["story_index", "read_chapters", "search_story_entities", "grep", "read_character_sections"])
|
|
@@ -676,32 +682,92 @@ export class Store {
|
|
|
676
682
|
const nextEnabled = input.autoRunEnabled ?? Boolean(current.autoRunEnabled);
|
|
677
683
|
const nextConcurrency = input.autoRunConcurrency ?? Number(current.autoRunConcurrency);
|
|
678
684
|
const nextBatchLimit = input.autoRunBatchLimit ?? Number(current.autoRunBatchLimit);
|
|
685
|
+
const nextDailyTaskLimit = input.autoRunDailyTaskLimit ?? Number(current.autoRunDailyTaskLimit);
|
|
686
|
+
const nextFailureThreshold = input.autoRunFailureThreshold ?? Number(current.autoRunFailureThreshold);
|
|
679
687
|
const nextBookSummaryContextPercent = input.bookSummaryContextPercent ?? Number(current.bookSummaryContextPercent);
|
|
680
688
|
const nextContextCompactThreshold = input.contextCompactThreshold ?? Number(current.contextCompactThreshold);
|
|
681
689
|
const nextAgentTools = input.agentTools ?? current.agentTools;
|
|
682
690
|
this.db.run(`INSERT INTO work_ai_settings (
|
|
683
|
-
work_id, system_prompt, auto_run_enabled, auto_run_concurrency, auto_run_batch_limit,
|
|
684
|
-
|
|
691
|
+
work_id, system_prompt, auto_run_enabled, auto_run_concurrency, auto_run_batch_limit,
|
|
692
|
+
auto_run_daily_task_limit, auto_run_failure_threshold, auto_run_paused, auto_run_pause_reason,
|
|
693
|
+
auto_run_resume_at, auto_run_consecutive_failures, book_summary_context_percent,
|
|
694
|
+
context_compact_threshold, agent_tools_json, updated_at
|
|
695
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
685
696
|
ON CONFLICT(work_id) DO UPDATE SET
|
|
686
697
|
system_prompt = excluded.system_prompt,
|
|
687
698
|
auto_run_enabled = excluded.auto_run_enabled,
|
|
688
699
|
auto_run_concurrency = excluded.auto_run_concurrency,
|
|
689
700
|
auto_run_batch_limit = excluded.auto_run_batch_limit,
|
|
701
|
+
auto_run_daily_task_limit = excluded.auto_run_daily_task_limit,
|
|
702
|
+
auto_run_failure_threshold = excluded.auto_run_failure_threshold,
|
|
703
|
+
auto_run_paused = excluded.auto_run_paused,
|
|
704
|
+
auto_run_pause_reason = excluded.auto_run_pause_reason,
|
|
705
|
+
auto_run_resume_at = excluded.auto_run_resume_at,
|
|
706
|
+
auto_run_consecutive_failures = excluded.auto_run_consecutive_failures,
|
|
690
707
|
book_summary_context_percent = excluded.book_summary_context_percent,
|
|
691
708
|
context_compact_threshold = excluded.context_compact_threshold,
|
|
692
709
|
agent_tools_json = excluded.agent_tools_json,
|
|
693
|
-
updated_at = excluded.updated_at`, workId, nextPrompt, nextEnabled ? 1 : 0, Math.min(8, Math.max(1, nextConcurrency)), Math.min(200, Math.max(1, nextBatchLimit)), Math.min(90, Math.max(1, nextBookSummaryContextPercent)), Math.min(90, Math.max(50, nextContextCompactThreshold)), JSON.stringify(nextAgentTools), timestamp);
|
|
710
|
+
updated_at = excluded.updated_at`, workId, nextPrompt, nextEnabled ? 1 : 0, Math.min(8, Math.max(1, nextConcurrency)), Math.min(200, Math.max(1, nextBatchLimit)), Math.min(10_000, Math.max(0, nextDailyTaskLimit)), Math.min(10, Math.max(1, nextFailureThreshold)), current.autoRunPaused ? 1 : 0, String(current.autoRunPauseReason ?? ""), current.autoRunResumeAt === null ? null : String(current.autoRunResumeAt), Math.max(0, Number(current.autoRunConsecutiveFailures) || 0), Math.min(90, Math.max(1, nextBookSummaryContextPercent)), Math.min(90, Math.max(50, nextContextCompactThreshold)), JSON.stringify(nextAgentTools), timestamp);
|
|
694
711
|
this.audit(workId, "work.ai-settings.updated", "work-ai-settings", workId, {
|
|
695
712
|
systemPromptChanged: input.systemPrompt !== undefined,
|
|
696
713
|
autoRunEnabled: nextEnabled,
|
|
697
714
|
autoRunConcurrency: Math.min(8, Math.max(1, nextConcurrency)),
|
|
698
715
|
autoRunBatchLimit: Math.min(200, Math.max(1, nextBatchLimit)),
|
|
716
|
+
autoRunDailyTaskLimit: Math.min(10_000, Math.max(0, nextDailyTaskLimit)),
|
|
717
|
+
autoRunFailureThreshold: Math.min(10, Math.max(1, nextFailureThreshold)),
|
|
699
718
|
bookSummaryContextPercent: Math.min(90, Math.max(1, nextBookSummaryContextPercent)),
|
|
700
719
|
contextCompactThreshold: Math.min(90, Math.max(50, nextContextCompactThreshold)),
|
|
701
720
|
agentTools: nextAgentTools
|
|
702
721
|
});
|
|
703
722
|
return this.getWorkAiSettings(workId);
|
|
704
723
|
}
|
|
724
|
+
clearAutoRunPause(workId) {
|
|
725
|
+
this.getWork(workId);
|
|
726
|
+
const current = this.getWorkAiSettings(workId);
|
|
727
|
+
this.db.run(`UPDATE work_ai_settings
|
|
728
|
+
SET auto_run_paused = 0, auto_run_pause_reason = '', auto_run_resume_at = NULL,
|
|
729
|
+
auto_run_consecutive_failures = 0, updated_at = ?
|
|
730
|
+
WHERE work_id = ?`, now(), workId);
|
|
731
|
+
if (current.autoRunPaused) {
|
|
732
|
+
this.audit(workId, "task.auto-run.resumed", "work-ai-settings", workId, {
|
|
733
|
+
previousReason: current.autoRunPauseReason
|
|
734
|
+
});
|
|
735
|
+
}
|
|
736
|
+
return this.getWorkAiSettings(workId);
|
|
737
|
+
}
|
|
738
|
+
pauseAutoRun(workId, reason, resumeAt = null) {
|
|
739
|
+
this.getWork(workId);
|
|
740
|
+
this.db.run(`UPDATE work_ai_settings
|
|
741
|
+
SET auto_run_paused = 1, auto_run_pause_reason = ?, auto_run_resume_at = ?, updated_at = ?
|
|
742
|
+
WHERE work_id = ?`, reason.slice(0, 500), resumeAt, now(), workId);
|
|
743
|
+
this.audit(workId, "task.auto-run.paused", "work-ai-settings", workId, { reason, resumeAt });
|
|
744
|
+
return this.getWorkAiSettings(workId);
|
|
745
|
+
}
|
|
746
|
+
recordAutoRunSuccess(workId) {
|
|
747
|
+
this.getWork(workId);
|
|
748
|
+
this.db.run("UPDATE work_ai_settings SET auto_run_consecutive_failures = 0, updated_at = ? WHERE work_id = ?", now(), workId);
|
|
749
|
+
return this.getWorkAiSettings(workId);
|
|
750
|
+
}
|
|
751
|
+
recordAutoRunFailure(workId, message, pauseImmediately = false) {
|
|
752
|
+
return this.db.transaction(() => {
|
|
753
|
+
const current = this.getWorkAiSettings(workId);
|
|
754
|
+
const consecutiveFailures = Number(current.autoRunConsecutiveFailures) + 1;
|
|
755
|
+
const shouldPause = pauseImmediately || consecutiveFailures >= Number(current.autoRunFailureThreshold);
|
|
756
|
+
this.db.run(`UPDATE work_ai_settings
|
|
757
|
+
SET auto_run_consecutive_failures = ?, auto_run_paused = ?,
|
|
758
|
+
auto_run_pause_reason = CASE WHEN ? = 1 THEN ? ELSE auto_run_pause_reason END,
|
|
759
|
+
auto_run_resume_at = CASE WHEN ? = 1 THEN NULL ELSE auto_run_resume_at END,
|
|
760
|
+
updated_at = ? WHERE work_id = ?`, consecutiveFailures, shouldPause ? 1 : 0, shouldPause ? 1 : 0, `连续任务失败,自动执行已暂停:${message}`.slice(0, 500), shouldPause ? 1 : 0, now(), workId);
|
|
761
|
+
if (shouldPause) {
|
|
762
|
+
this.audit(workId, "task.auto-run.paused", "work-ai-settings", workId, {
|
|
763
|
+
reason: "consecutive-failures",
|
|
764
|
+
consecutiveFailures,
|
|
765
|
+
message
|
|
766
|
+
});
|
|
767
|
+
}
|
|
768
|
+
return this.getWorkAiSettings(workId);
|
|
769
|
+
});
|
|
770
|
+
}
|
|
705
771
|
updateWork(workId, input, expectedVersionNo, source = "manual", sourceRef = null, changeNote = "") {
|
|
706
772
|
this.db.transaction(() => {
|
|
707
773
|
const current = this.getWork(workId);
|
|
@@ -2208,6 +2274,19 @@ export class Store {
|
|
|
2208
2274
|
this.getWork(workId);
|
|
2209
2275
|
return this.db.all("SELECT * FROM races WHERE work_id = ? ORDER BY name", workId).map((row) => this.mapRace(row, includeMarkdown));
|
|
2210
2276
|
}
|
|
2277
|
+
listRacesByHierarchyScope(workId, scope, includeMarkdown = true) {
|
|
2278
|
+
this.getWork(workId);
|
|
2279
|
+
const hierarchyCondition = scope === "roots" ? "IS NULL" : "IS NOT NULL";
|
|
2280
|
+
return this.db.all(`SELECT race.*,
|
|
2281
|
+
(SELECT COUNT(*) FROM races child WHERE child.parent_race_id = race.id) AS child_count
|
|
2282
|
+
FROM races race
|
|
2283
|
+
WHERE race.work_id = ? AND race.parent_race_id ${hierarchyCondition}
|
|
2284
|
+
ORDER BY race.name`, workId).map((row) => this.mapRace(row, includeMarkdown));
|
|
2285
|
+
}
|
|
2286
|
+
countRaces(workId) {
|
|
2287
|
+
this.getWork(workId);
|
|
2288
|
+
return numberValue(this.db.get("SELECT COUNT(*) AS count FROM races WHERE work_id = ?", workId) ?? {}, "count");
|
|
2289
|
+
}
|
|
2211
2290
|
listRacesPage(workId, pagination, includeMarkdown = true) {
|
|
2212
2291
|
this.getWork(workId);
|
|
2213
2292
|
const page = paginationSql(pagination);
|
|
@@ -2339,6 +2418,7 @@ export class Store {
|
|
|
2339
2418
|
parentRaceId: optionalString(row, "parent_race_id"),
|
|
2340
2419
|
name: requiredString(row, "name"),
|
|
2341
2420
|
description: requiredString(row, "description"),
|
|
2421
|
+
...(row.child_count === undefined ? {} : { childCount: numberValue(row, "child_count") }),
|
|
2342
2422
|
...(includeMarkdown
|
|
2343
2423
|
? { settings, settingsMarkdown: settingsMarkdownFromList(settings), settingsSections }
|
|
2344
2424
|
: { settings: [], settingsCount: settingsSections.length }),
|
|
@@ -4129,7 +4209,8 @@ export class Store {
|
|
|
4129
4209
|
FROM analysis_tasks WHERE work_id = ?`, workId) ?? {};
|
|
4130
4210
|
const total = numberValue(statsRow, "total");
|
|
4131
4211
|
const page = paginationSql(pagination);
|
|
4132
|
-
const rows = this.db.all(`SELECT task.id, task.model_id, task.task_type, task.scope_json, task.status, task.progress,
|
|
4212
|
+
const rows = this.db.all(`SELECT task.id, task.model_id, task.task_type, task.scope_json, task.status, task.progress,
|
|
4213
|
+
task.attempt_count, task.next_attempt_at, task.last_attempt_at, task.created_at, task.updated_at,
|
|
4133
4214
|
model.display_name AS model_display_name, model.model_id AS model_api_id
|
|
4134
4215
|
FROM analysis_tasks task
|
|
4135
4216
|
LEFT JOIN models model ON model.id = task.model_id
|
|
@@ -4165,11 +4246,56 @@ export class Store {
|
|
|
4165
4246
|
const row = this.db.get("SELECT COUNT(*) AS value FROM analysis_tasks WHERE work_id = ? AND status = 'running'", workId);
|
|
4166
4247
|
return numberValue(row ?? {}, "value");
|
|
4167
4248
|
}
|
|
4249
|
+
listAutoRunWorkIds() {
|
|
4250
|
+
return this.db.all("SELECT work_id FROM work_ai_settings WHERE auto_run_enabled = 1 ORDER BY work_id").map((row) => requiredString(row, "work_id"));
|
|
4251
|
+
}
|
|
4252
|
+
claimPendingTask(taskId, runningLimit) {
|
|
4253
|
+
return this.db.transaction(() => {
|
|
4254
|
+
const current = this.getTask(taskId);
|
|
4255
|
+
if (current.status !== "pending")
|
|
4256
|
+
return null;
|
|
4257
|
+
if (current.nextAttemptAt && String(current.nextAttemptAt) > now())
|
|
4258
|
+
return null;
|
|
4259
|
+
if (runningLimit !== undefined && this.countRunningTasks(String(current.workId)) >= runningLimit)
|
|
4260
|
+
return null;
|
|
4261
|
+
const timestamp = now();
|
|
4262
|
+
const claimed = this.db.run(`UPDATE analysis_tasks
|
|
4263
|
+
SET status = 'running', progress = 5, attempt_count = attempt_count + 1,
|
|
4264
|
+
next_attempt_at = NULL, last_attempt_at = ?, updated_at = ?
|
|
4265
|
+
WHERE id = ? AND status = 'pending' AND (next_attempt_at IS NULL OR next_attempt_at <= ?)`, timestamp, timestamp, taskId, timestamp);
|
|
4266
|
+
return claimed.changes === 1 ? this.getTask(taskId) : null;
|
|
4267
|
+
});
|
|
4268
|
+
}
|
|
4168
4269
|
listOldestPendingTaskIds(workId, limit) {
|
|
4169
4270
|
if (limit <= 0)
|
|
4170
4271
|
return [];
|
|
4171
4272
|
return this.db.all(`SELECT id FROM analysis_tasks WHERE work_id = ? AND status = 'pending'
|
|
4172
|
-
|
|
4273
|
+
AND (next_attempt_at IS NULL OR next_attempt_at <= ?)
|
|
4274
|
+
ORDER BY created_at ASC, id ASC LIMIT ?`, workId, now(), limit).map((row) => requiredString(row, "id"));
|
|
4275
|
+
}
|
|
4276
|
+
nextPendingTaskAttemptAt(workId) {
|
|
4277
|
+
const row = this.db.get(`SELECT MIN(next_attempt_at) AS value FROM analysis_tasks
|
|
4278
|
+
WHERE work_id = ? AND status = 'pending' AND next_attempt_at IS NOT NULL`, workId);
|
|
4279
|
+
return row?.value === null || row?.value === undefined ? null : String(row.value);
|
|
4280
|
+
}
|
|
4281
|
+
countAutoRunAttemptsToday(workId) {
|
|
4282
|
+
const row = this.db.get(`SELECT COUNT(*) AS value FROM analysis_tasks
|
|
4283
|
+
WHERE work_id = ? AND last_attempt_at >= strftime('%Y-%m-%dT00:00:00.000Z', 'now')`, workId);
|
|
4284
|
+
return numberValue(row ?? {}, "value");
|
|
4285
|
+
}
|
|
4286
|
+
rescheduleTask(taskId, failure, nextAttemptAt) {
|
|
4287
|
+
const current = this.getTask(taskId);
|
|
4288
|
+
if (current.status !== "running")
|
|
4289
|
+
return current;
|
|
4290
|
+
const failures = Array.isArray(current.failures) ? [...current.failures, failure].slice(-10) : [failure];
|
|
4291
|
+
this.db.run(`UPDATE analysis_tasks
|
|
4292
|
+
SET status = 'pending', progress = 0, failure_json = ?, next_attempt_at = ?, updated_at = ?
|
|
4293
|
+
WHERE id = ? AND status = 'running'`, JSON.stringify(failures), nextAttemptAt, now(), taskId);
|
|
4294
|
+
this.audit(String(current.workId), "task.retry-scheduled", "analysis-task", taskId, {
|
|
4295
|
+
attemptCount: current.attemptCount,
|
|
4296
|
+
nextAttemptAt
|
|
4297
|
+
});
|
|
4298
|
+
return this.getTask(taskId);
|
|
4173
4299
|
}
|
|
4174
4300
|
countPendingTasks(workId) {
|
|
4175
4301
|
const row = this.db.get("SELECT COUNT(*) AS value FROM analysis_tasks WHERE work_id = ? AND status = 'pending'", workId);
|
|
@@ -5059,6 +5185,9 @@ export class Store {
|
|
|
5059
5185
|
result: taskResult,
|
|
5060
5186
|
failures: json(requiredString(row, "failure_json"), []),
|
|
5061
5187
|
sourceVersions: json(requiredString(row, "source_versions_json"), {}),
|
|
5188
|
+
attemptCount: numberValue(row, "attempt_count"),
|
|
5189
|
+
nextAttemptAt: row.next_attempt_at === null || row.next_attempt_at === undefined ? null : String(row.next_attempt_at),
|
|
5190
|
+
lastAttemptAt: row.last_attempt_at === null || row.last_attempt_at === undefined ? null : String(row.last_attempt_at),
|
|
5062
5191
|
createdAt: requiredString(row, "created_at"),
|
|
5063
5192
|
updatedAt: requiredString(row, "updated_at")
|
|
5064
5193
|
};
|
|
@@ -5073,6 +5202,9 @@ export class Store {
|
|
|
5073
5202
|
scopeSummaryWithoutCharacterNames: this.taskScopeSummaryFromMaps(scope, chapterSummaries, volumeTitles, new Map(), false),
|
|
5074
5203
|
status: requiredString(row, "status"),
|
|
5075
5204
|
progress: numberValue(row, "progress"),
|
|
5205
|
+
attemptCount: numberValue(row, "attempt_count"),
|
|
5206
|
+
nextAttemptAt: row.next_attempt_at === null || row.next_attempt_at === undefined ? null : String(row.next_attempt_at),
|
|
5207
|
+
lastAttemptAt: row.last_attempt_at === null || row.last_attempt_at === undefined ? null : String(row.last_attempt_at),
|
|
5076
5208
|
createdAt: requiredString(row, "created_at"),
|
|
5077
5209
|
updatedAt: requiredString(row, "updated_at")
|
|
5078
5210
|
};
|