@musnows/scriverse 0.3.7 → 0.3.8
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 +59 -0
- package/dist/ai.js.map +1 -1
- package/dist/app.js +136 -35
- package/dist/app.js.map +1 -1
- package/dist/http-logging.js +2 -2
- package/dist/http-logging.js.map +1 -1
- package/dist/logger.js +2 -2
- package/dist/logger.js.map +1 -1
- package/dist/pagination.js +42 -0
- package/dist/pagination.js.map +1 -0
- package/dist/public/app.js +226 -76
- package/dist/public/index.html +37 -8
- package/dist/public/markdown.js +35 -1
- package/dist/public/page-route.js +12 -0
- package/dist/public/styles.css +64 -22
- package/dist/security.js +41 -4
- package/dist/security.js.map +1 -1
- package/dist/store.js +303 -0
- package/dist/store.js.map +1 -1
- package/dist/user-auth.js +30 -0
- package/dist/user-auth.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -1
package/dist/public/index.html
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<script src="/theme-init.js?v=20260720-route-skeleton"></script>
|
|
10
10
|
<link rel="icon" href="/icon.svg?v=20260712" type="image/svg+xml">
|
|
11
11
|
<link rel="manifest" href="/site.webmanifest">
|
|
12
|
-
<link rel="stylesheet" href="/styles.css?v=
|
|
12
|
+
<link rel="stylesheet" href="/styles.css?v=20260722-entity-editor-page">
|
|
13
13
|
</head>
|
|
14
14
|
<body class="auth-pending">
|
|
15
15
|
<section id="auth-view" class="auth-view hidden" aria-labelledby="auth-title">
|
|
@@ -316,16 +316,41 @@
|
|
|
316
316
|
</form>
|
|
317
317
|
</dialog>
|
|
318
318
|
|
|
319
|
-
<
|
|
320
|
-
<form id="
|
|
319
|
+
<section id="entity-editor-view" class="entity-editor-view hidden" aria-label="全屏资料编辑">
|
|
320
|
+
<form id="setting-editor-form" class="entity-editor-page hidden" aria-labelledby="setting-editor-title">
|
|
321
|
+
<header class="entity-editor-header">
|
|
322
|
+
<button id="setting-editor-back" class="entity-editor-back" type="button">返回设定库</button>
|
|
323
|
+
<div class="entity-editor-heading">
|
|
324
|
+
<span id="setting-editor-eyebrow" class="eyebrow">作者事实</span>
|
|
325
|
+
<h1 id="setting-editor-title">新建设定</h1>
|
|
326
|
+
</div>
|
|
327
|
+
<button id="setting-editor-submit" class="primary-button" type="submit">保存设定</button>
|
|
328
|
+
</header>
|
|
329
|
+
<div class="setting-editor-workspace">
|
|
330
|
+
<aside class="setting-editor-sidebar" aria-label="设定元数据">
|
|
331
|
+
<label>标题<input id="setting-editor-name" name="title" maxlength="200" required></label>
|
|
332
|
+
<label>分类<select id="setting-editor-category" name="category">
|
|
333
|
+
<option value="世界规则">世界规则</option><option value="历史与年代">历史与年代</option><option value="地点与地图">地点与地图</option><option value="组织与阵营">组织与阵营</option><option value="物种与族群">物种与族群</option><option value="科技与物品">科技与物品</option><option value="术语与称谓">术语与称谓</option><option value="创作约束">创作约束</option>
|
|
334
|
+
</select></label>
|
|
335
|
+
<label class="setting-editor-lock"><input id="setting-editor-locked" name="locked" type="checkbox"><span><b>锁定为 AI 硬约束</b><small>锁定后,AI 续写与校对不能擅自覆盖这条设定。</small></span></label>
|
|
336
|
+
<label id="setting-change-note-field">版本说明<input id="setting-change-note" name="changeNote" maxlength="500" placeholder="可选,例如:补充纪元历法限制"></label>
|
|
337
|
+
</aside>
|
|
338
|
+
<main class="setting-editor-content">
|
|
339
|
+
<label for="setting-editor-body"><span>设定正文</span><small>适合维护长篇世界观、规则、历史、地点与创作约束。</small></label>
|
|
340
|
+
<textarea id="setting-editor-body" name="content" maxlength="200000" spellcheck="true" placeholder="在这里完整记录设定内容" required></textarea>
|
|
341
|
+
</main>
|
|
342
|
+
</div>
|
|
343
|
+
</form>
|
|
344
|
+
|
|
345
|
+
<form id="character-editor-form" class="entity-editor-page hidden" aria-labelledby="character-editor-title">
|
|
321
346
|
<header class="character-editor-header">
|
|
347
|
+
<button id="character-editor-close" class="entity-editor-back" type="button">返回角色列表</button>
|
|
322
348
|
<div>
|
|
323
349
|
<span id="character-editor-eyebrow" class="eyebrow">人物主档案</span>
|
|
324
|
-
<div class="character-editor-title-row"><
|
|
350
|
+
<div class="character-editor-title-row"><h1 id="character-editor-title">新建角色</h1><span id="character-editor-version" class="character-version-badge">新档案</span></div>
|
|
325
351
|
</div>
|
|
326
352
|
<div class="character-editor-header-actions">
|
|
327
353
|
<button id="character-history-button" class="ghost-button" type="button" aria-controls="character-history-panel" aria-expanded="false">版本历史</button>
|
|
328
|
-
<button id="character-editor-close" class="dialog-close" aria-label="关闭人物编辑器" type="button">×</button>
|
|
329
354
|
</div>
|
|
330
355
|
</header>
|
|
331
356
|
<div class="character-editor-workspace">
|
|
@@ -344,10 +369,14 @@
|
|
|
344
369
|
</div>
|
|
345
370
|
<footer class="character-editor-actions">
|
|
346
371
|
<label>版本说明<input id="character-change-note" name="changeNote" maxlength="500" placeholder="可选,例如:补充红莲形态与能力限制"></label>
|
|
347
|
-
<div><button id="character-editor-cancel" class="ghost-button" type="button"
|
|
372
|
+
<div><button id="character-editor-cancel" class="ghost-button" type="button">返回列表</button><button id="character-editor-submit" class="primary-button" type="submit">保存新版本</button></div>
|
|
348
373
|
</footer>
|
|
349
374
|
</form>
|
|
350
|
-
|
|
375
|
+
|
|
376
|
+
<section id="character-section-editor-view" class="entity-editor-page hidden" aria-labelledby="character-section-editor-title">
|
|
377
|
+
<div id="character-section-editor-host" class="character-section-editor-host"></div>
|
|
378
|
+
</section>
|
|
379
|
+
</section>
|
|
351
380
|
|
|
352
381
|
<dialog id="search-dialog" class="dialog wide-dialog" aria-labelledby="search-dialog-title">
|
|
353
382
|
<div class="dialog-header">
|
|
@@ -546,6 +575,6 @@
|
|
|
546
575
|
</dialog>
|
|
547
576
|
|
|
548
577
|
<div id="auth-loading" class="auth-loading" role="status" aria-label="正在载入工作台"></div>
|
|
549
|
-
<script type="module" src="/app.js?v=
|
|
578
|
+
<script type="module" src="/app.js?v=20260722-pagination-entity-editor-page"></script>
|
|
550
579
|
</body>
|
|
551
580
|
</html>
|
package/dist/public/markdown.js
CHANGED
|
@@ -22,6 +22,40 @@ function safeImageTarget(value) {
|
|
|
22
22
|
return null;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
function replaceInlineCodeSpans(value, preserve) {
|
|
26
|
+
const source = String(value ?? "");
|
|
27
|
+
let output = "";
|
|
28
|
+
let cursor = 0;
|
|
29
|
+
while (cursor < source.length) {
|
|
30
|
+
const openingStart = source.indexOf("`", cursor);
|
|
31
|
+
if (openingStart < 0) {
|
|
32
|
+
output += source.slice(cursor);
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
let openingEnd = openingStart + 1;
|
|
36
|
+
while (source[openingEnd] === "`") openingEnd += 1;
|
|
37
|
+
const delimiter = source.slice(openingStart, openingEnd);
|
|
38
|
+
let closingStart = source.indexOf(delimiter, openingEnd);
|
|
39
|
+
while (closingStart >= 0) {
|
|
40
|
+
const touchesBacktickBefore = closingStart > 0 && source[closingStart - 1] === "`";
|
|
41
|
+
const touchesBacktickAfter = source[closingStart + delimiter.length] === "`";
|
|
42
|
+
if (!touchesBacktickBefore && !touchesBacktickAfter) break;
|
|
43
|
+
closingStart = source.indexOf(delimiter, closingStart + 1);
|
|
44
|
+
}
|
|
45
|
+
output += source.slice(cursor, openingStart);
|
|
46
|
+
if (closingStart < 0) {
|
|
47
|
+
output += delimiter;
|
|
48
|
+
cursor = openingEnd;
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
let code = source.slice(openingEnd, closingStart).replace(/\s+/gu, " ");
|
|
52
|
+
if (/^ .* $/u.test(code) && code.trim()) code = code.slice(1, -1);
|
|
53
|
+
output += preserve(`<code>${escapeHtml(code)}</code>`);
|
|
54
|
+
cursor = closingStart + delimiter.length;
|
|
55
|
+
}
|
|
56
|
+
return output;
|
|
57
|
+
}
|
|
58
|
+
|
|
25
59
|
function renderInlineMarkdown(value) {
|
|
26
60
|
const tokens = [];
|
|
27
61
|
const preserve = (html) => {
|
|
@@ -30,7 +64,7 @@ function renderInlineMarkdown(value) {
|
|
|
30
64
|
return marker;
|
|
31
65
|
};
|
|
32
66
|
let source = String(value ?? "");
|
|
33
|
-
source = source
|
|
67
|
+
source = replaceInlineCodeSpans(source, preserve);
|
|
34
68
|
source = source.replace(/!\[([^\]\n]*)\]\(([^)\s]+)\)/gu, (_match, label, src) => {
|
|
35
69
|
const target = safeImageTarget(src);
|
|
36
70
|
if (!target) return `[图片:${label || src}]`;
|
|
@@ -13,6 +13,7 @@ export const RESTORABLE_MODULES = Object.freeze([
|
|
|
13
13
|
|
|
14
14
|
const moduleSet = new Set(RESTORABLE_MODULES);
|
|
15
15
|
const returnViewSet = new Set(["shelf", "editor", "module", "welcome"]);
|
|
16
|
+
const entityEditorSet = new Set(["setting", "character"]);
|
|
16
17
|
|
|
17
18
|
function value(params, key) {
|
|
18
19
|
return String(params.get(key) ?? "").trim();
|
|
@@ -41,6 +42,11 @@ export function serializePageRoute(route = {}) {
|
|
|
41
42
|
params.set("view", "module");
|
|
42
43
|
params.set("work", workId);
|
|
43
44
|
params.set("module", route.module);
|
|
45
|
+
} else if (view === "entity-editor" && workId && entityEditorSet.has(route.entity)) {
|
|
46
|
+
params.set("view", "entity-editor");
|
|
47
|
+
params.set("work", workId);
|
|
48
|
+
params.set("entity", route.entity);
|
|
49
|
+
if (route.entityId) params.set("id", String(route.entityId));
|
|
44
50
|
} else if (view === "welcome" && workId) {
|
|
45
51
|
params.set("view", "welcome");
|
|
46
52
|
params.set("work", workId);
|
|
@@ -70,6 +76,12 @@ export function parsePageRoute(hash = "") {
|
|
|
70
76
|
const module = value(params, "module");
|
|
71
77
|
return moduleSet.has(module) ? { view, workId, module } : { view: "shelf" };
|
|
72
78
|
}
|
|
79
|
+
if (view === "entity-editor" && workId) {
|
|
80
|
+
const entity = value(params, "entity");
|
|
81
|
+
if (!entityEditorSet.has(entity)) return { view: "shelf" };
|
|
82
|
+
const entityId = value(params, "id");
|
|
83
|
+
return { view, workId, entity, entityId: entityId || null };
|
|
84
|
+
}
|
|
73
85
|
if (view === "welcome" && workId) return { view, workId };
|
|
74
86
|
if (view === "settings" || view === "platform-ai") {
|
|
75
87
|
const route = { view, workId: workId || null };
|
package/dist/public/styles.css
CHANGED
|
@@ -1198,7 +1198,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1198
1198
|
.message-body li.markdown-depth-1 { margin-left: 14px; }.message-body li.markdown-depth-2 { margin-left: 28px; }.message-body li.markdown-depth-3 { margin-left: 42px; }
|
|
1199
1199
|
.message-body blockquote { margin: 9px 0; padding: 6px 9px; border-left: 3px solid currentColor; background: rgba(255,255,255,.35); opacity: .82; }
|
|
1200
1200
|
.message-body pre { max-width: 100%; overflow-x: auto; margin: 9px 0; padding: 9px 10px; border-radius: 4px; background: #292724; color: #f6f1e7; font: 10px/1.55 var(--font-latin), monospace; white-space: pre; }
|
|
1201
|
-
.message-body code { padding: 1px 4px; border-radius: 3px; background:
|
|
1201
|
+
.message-body code { padding: 1px 4px; border: 1px solid color-mix(in srgb, currentColor 14%, transparent); border-radius: 3px; background: color-mix(in srgb, currentColor 10%, transparent); font-family: var(--font-latin), monospace; font-size: .9em; }.message-body pre code { padding: 0; border: 0; background: transparent; color: inherit; }
|
|
1202
1202
|
.message-body .markdown-table-scroll { max-width: 100%; overflow-x: auto; margin: 9px 0; border: 1px solid var(--line); border-radius: 4px; overscroll-behavior-inline: contain; scrollbar-color: var(--muted) var(--surface-soft); scrollbar-gutter: stable; scrollbar-width: thin; }
|
|
1203
1203
|
.message-body .markdown-table-scroll::-webkit-scrollbar { height: 8px; }.message-body .markdown-table-scroll::-webkit-scrollbar-track { background: var(--surface-soft); }.message-body .markdown-table-scroll::-webkit-scrollbar-thumb { border-radius: 4px; background: var(--muted); }
|
|
1204
1204
|
.message-body .markdown-table-scroll:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
@@ -1384,19 +1384,42 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1384
1384
|
.checkbox-field input { width: auto; }
|
|
1385
1385
|
.dialog-actions { display: flex; justify-content: flex-end; gap: 8px; padding: 14px 24px 20px; }
|
|
1386
1386
|
.dialog-actions .reset-button { margin-right: auto; }
|
|
1387
|
-
.
|
|
1388
|
-
.
|
|
1389
|
-
.
|
|
1390
|
-
.
|
|
1391
|
-
|
|
1387
|
+
.entity-editor-open { overflow: hidden; }
|
|
1388
|
+
.entity-editor-view { position: fixed; z-index: 700; inset: 0; overflow: hidden; background: var(--panel); color: var(--ink); }
|
|
1389
|
+
.entity-editor-view.hidden, .entity-editor-page.hidden { display: none; }
|
|
1390
|
+
.entity-editor-page { width: 100%; height: 100%; min-height: 0; }
|
|
1391
|
+
#character-editor-form { display: grid; grid-template-rows: auto minmax(0, 1fr) auto; }
|
|
1392
|
+
.entity-editor-header, .character-editor-header { display: grid; grid-template-columns: minmax(160px, 1fr) minmax(0, 2fr) minmax(160px, 1fr); align-items: center; gap: 24px; min-height: 78px; padding: 14px clamp(18px, 3vw, 44px); border-bottom: 1px solid var(--line); background: var(--panel); }
|
|
1393
|
+
.entity-editor-heading { min-width: 0; text-align: center; }
|
|
1394
|
+
.entity-editor-heading h1 { overflow: hidden; margin: 2px 0 0; font-size: 24px; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
|
|
1395
|
+
.entity-editor-header > .primary-button { justify-self: end; min-width: 112px; }
|
|
1396
|
+
.entity-editor-back { justify-self: start; min-height: 36px; padding: 8px 12px; border: 1px solid var(--line); border-radius: 4px; background: transparent; color: var(--muted); font-size: 11px; }
|
|
1397
|
+
.entity-editor-back::before { content: "←"; margin-right: 7px; }
|
|
1398
|
+
.entity-editor-back:hover { border-color: var(--accent); color: var(--accent-dark); }
|
|
1399
|
+
.setting-editor-workspace { display: grid; grid-template-columns: minmax(260px, 330px) minmax(0, 1fr); height: calc(100% - 78px); min-height: 0; }
|
|
1400
|
+
.setting-editor-sidebar { display: grid; align-content: start; gap: 22px; padding: 34px clamp(22px, 3vw, 42px); overflow-y: auto; border-right: 1px solid var(--line); background: var(--surface-soft); }
|
|
1401
|
+
.setting-editor-sidebar > label { display: grid; gap: 8px; color: var(--muted); font-size: 11px; }
|
|
1402
|
+
.setting-editor-sidebar input, .setting-editor-sidebar select { width: 100%; padding: 10px 11px; border: 1px solid var(--line); border-radius: 4px; background: var(--surface); color: var(--ink); font-size: 13px; }
|
|
1403
|
+
.setting-editor-lock { grid-template-columns: auto minmax(0, 1fr); align-items: start; padding: 14px; border: 1px solid var(--line); border-radius: 5px; background: var(--surface); }
|
|
1404
|
+
.setting-editor-lock input { width: auto; margin-top: 3px; }
|
|
1405
|
+
.setting-editor-lock span { display: grid; gap: 4px; }
|
|
1406
|
+
.setting-editor-lock b { color: var(--ink); font-size: 11px; }
|
|
1407
|
+
.setting-editor-lock small { line-height: 1.55; }
|
|
1408
|
+
.setting-editor-content { display: grid; grid-template-rows: auto minmax(0, 1fr); gap: 14px; min-height: 0; padding: 34px clamp(28px, 6vw, 96px) 46px; }
|
|
1409
|
+
.setting-editor-content > label { display: flex; align-items: baseline; justify-content: space-between; gap: 24px; color: var(--ink); font-size: 14px; }
|
|
1410
|
+
.setting-editor-content > label small { color: var(--muted); font-size: 10px; }
|
|
1411
|
+
.setting-editor-content textarea { width: 100%; height: 100%; min-height: 0; padding: 26px 30px; resize: none; border: 1px solid var(--line); border-radius: 6px; background: var(--surface); color: var(--ink); font-size: 15px; line-height: 1.8; }
|
|
1412
|
+
.character-editor-header > div:nth-child(2) { min-width: 0; text-align: center; }
|
|
1413
|
+
.character-editor-header h1, .character-editor-header h3 { margin: 0; }
|
|
1392
1414
|
.character-editor-title-row { display: flex; align-items: center; gap: 10px; margin-top: 3px; }
|
|
1393
|
-
.character-editor-title-row
|
|
1415
|
+
.character-editor-title-row { justify-content: center; }
|
|
1416
|
+
.character-editor-title-row h1 { overflow: hidden; font-size: 24px; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
|
|
1394
1417
|
.character-version-badge { display: inline-flex; align-items: center; min-height: 22px; padding: 2px 8px; border: 1px solid var(--line); border-radius: 12px; background: var(--paper-deep); color: var(--accent-dark); font: 10px/1 var(--font-latin), monospace; }
|
|
1395
|
-
.character-editor-header-actions { display: flex; align-items: center; gap: 8px; }
|
|
1418
|
+
.character-editor-header-actions { display: flex; align-items: center; justify-content: flex-end; gap: 8px; }
|
|
1396
1419
|
.character-editor-header-actions .ghost-button { min-height: 34px; }
|
|
1397
1420
|
.character-editor-header-actions .ghost-button:disabled { cursor: not-allowed; opacity: .46; }
|
|
1398
|
-
.character-editor-workspace { display: grid; grid-template-columns:
|
|
1399
|
-
.character-editor-workspace.history-open { grid-template-columns:
|
|
1421
|
+
.character-editor-workspace { display: grid; grid-template-columns: 220px minmax(0, 1fr); min-height: 0; }
|
|
1422
|
+
.character-editor-workspace.history-open { grid-template-columns: 210px minmax(0, 1fr) minmax(320px, 25vw); }
|
|
1400
1423
|
.character-editor-nav { display: flex; min-width: 0; flex-direction: column; gap: 5px; padding: 18px 12px; border-right: 1px solid var(--line); background: var(--surface-soft); }
|
|
1401
1424
|
.character-editor-nav button { display: grid; gap: 3px; width: 100%; padding: 11px 12px; border: 0; border-radius: 5px; background: transparent; color: var(--muted); text-align: left; font-size: 12px; }
|
|
1402
1425
|
.character-editor-nav button small { overflow: hidden; color: var(--muted); font-size: 9px; font-weight: 400; text-overflow: ellipsis; white-space: nowrap; }
|
|
@@ -1451,21 +1474,28 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1451
1474
|
.character-markdown-document h1, .character-markdown-document h2, .character-markdown-document h3, .character-markdown-document h4, .character-markdown-document h5, .character-markdown-document h6 { color: var(--ink); }
|
|
1452
1475
|
.character-markdown-document blockquote { background: var(--paper-deep); }
|
|
1453
1476
|
.character-markdown-empty, .character-markdown-status { margin: 0; padding: 18px; border: 1px dashed var(--line); border-radius: 5px; color: var(--muted); font-size: 10px; text-align: center; }
|
|
1454
|
-
|
|
1455
|
-
.character-
|
|
1477
|
+
#character-section-editor-view { background: var(--panel); }
|
|
1478
|
+
.character-section-editor-host, .character-section-editor-shell { width: 100%; height: 100%; min-height: 0; }
|
|
1479
|
+
.character-section-editor-shell { display: grid; grid-template-rows: auto minmax(0, 1fr); }
|
|
1480
|
+
.character-section-editor-header { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 20px; min-height: 78px; padding: 14px clamp(18px, 3vw, 44px); border-bottom: 1px solid var(--line); background: var(--panel); }
|
|
1481
|
+
.character-section-editor-header > div { grid-column: 1; grid-row: 1; justify-self: center; text-align: center; }
|
|
1482
|
+
.character-section-editor-header .entity-editor-back { grid-column: 1; grid-row: 1; z-index: 1; }
|
|
1483
|
+
.character-section-editor-header h2 { margin: 3px 0 0; font-size: 22px; font-weight: 600; }
|
|
1484
|
+
.character-markdown-editor { display: grid; grid-template-rows: auto auto minmax(0, 1fr) auto; gap: 12px; min-height: 0; padding: 16px 22px 18px; overflow: hidden; background: var(--surface-soft); }
|
|
1485
|
+
.character-markdown-editor-meta { display: grid; grid-template-columns: minmax(140px, .55fr) minmax(220px, 1fr) minmax(280px, 1.45fr); gap: 12px; }
|
|
1456
1486
|
.character-markdown-editor label { display: grid; gap: 6px; color: var(--muted); font-size: 10px; }
|
|
1457
1487
|
.character-markdown-editor input, .character-markdown-editor select, .character-markdown-editor textarea { width: 100%; padding: 9px 10px; border: 1px solid var(--line); border-radius: 4px; background: var(--surface); color: var(--ink); font-size: 12px; }
|
|
1458
|
-
.character-markdown-summary-field {
|
|
1459
|
-
.character-markdown-summary-field textarea { min-height: 72px; }
|
|
1488
|
+
.character-markdown-summary-field textarea { min-height: 42px; height: 42px; resize: vertical; }
|
|
1460
1489
|
.character-markdown-toolbar { display: flex; align-items: center; gap: 10px; }
|
|
1461
1490
|
.character-markdown-toolbar .ghost-button { display: inline-flex; width: auto; padding: 7px 10px; border: 1px solid var(--line); border-radius: 4px; color: var(--ink); cursor: pointer; }
|
|
1462
|
-
.character-markdown-compose { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 12px; min-height:
|
|
1463
|
-
.character-markdown-compose > label, .character-markdown-compose > div { min-width: 0; }
|
|
1464
|
-
.character-markdown-compose
|
|
1491
|
+
.character-markdown-compose { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 12px; min-height: 0; }
|
|
1492
|
+
.character-markdown-compose > label, .character-markdown-compose > div { min-width: 0; min-height: 0; }
|
|
1493
|
+
.character-markdown-compose > label { grid-template-rows: auto minmax(0, 1fr); }
|
|
1494
|
+
.character-markdown-compose textarea { height: 100%; min-height: 0; resize: none; font-family: var(--font-latin), var(--font-cjk), monospace; line-height: 1.65; tab-size: 2; }
|
|
1465
1495
|
.character-markdown-compose > div { display: grid; grid-template-rows: auto minmax(0, 1fr); overflow: hidden; border: 1px solid var(--line); border-radius: 4px; background: var(--surface); }
|
|
1466
1496
|
.character-markdown-preview-label { padding: 8px 10px; border-bottom: 1px solid var(--line); color: var(--muted); font-size: 10px; }
|
|
1467
|
-
.character-markdown-compose .character-markdown-document {
|
|
1468
|
-
.character-markdown-
|
|
1497
|
+
.character-markdown-compose .character-markdown-document { overflow-y: auto; padding: 14px 16px; }
|
|
1498
|
+
.character-markdown-editor-footer { display: grid; grid-template-columns: minmax(0, 620px) auto; align-items: end; justify-content: space-between; gap: 18px; }
|
|
1469
1499
|
.character-markdown-editor-actions { display: flex; justify-content: flex-end; gap: 8px; }
|
|
1470
1500
|
.character-markdown-version-list { display: grid; gap: 7px; padding: 10px 16px 16px; border-top: 1px solid var(--line); background: var(--surface-soft); }
|
|
1471
1501
|
.character-markdown-version-list article { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 5px 12px; padding: 9px 10px; border: 1px solid var(--line); border-radius: 4px; background: var(--surface); }
|
|
@@ -1549,7 +1579,14 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1549
1579
|
.top-actions .ghost-button:not(.settings-button) { display: none; }
|
|
1550
1580
|
.book-shelf { grid-template-columns: repeat(3, minmax(180px, 1fr)); }
|
|
1551
1581
|
.settings-hub-grid { grid-template-columns: 1fr; }
|
|
1552
|
-
.character-editor-
|
|
1582
|
+
.entity-editor-header, .character-editor-header { grid-template-columns: auto minmax(0, 1fr) auto; gap: 10px; padding-inline: 12px; }
|
|
1583
|
+
.entity-editor-heading h1, .character-editor-title-row h1 { font-size: 18px; }
|
|
1584
|
+
.entity-editor-back { overflow: hidden; width: 40px; min-width: 40px; padding-inline: 11px; white-space: nowrap; }
|
|
1585
|
+
.entity-editor-back::before { margin-right: 18px; }
|
|
1586
|
+
.setting-editor-workspace { grid-template-columns: minmax(0, 1fr); grid-template-rows: auto minmax(0, 1fr); overflow-y: auto; }
|
|
1587
|
+
.setting-editor-sidebar { grid-template-columns: repeat(2, minmax(0, 1fr)); padding: 18px; overflow: visible; border-right: 0; border-bottom: 1px solid var(--line); }
|
|
1588
|
+
.setting-editor-content { min-height: 70dvh; padding: 20px 18px; }
|
|
1589
|
+
.setting-editor-content > label { align-items: flex-start; flex-direction: column; gap: 4px; }
|
|
1553
1590
|
.character-editor-workspace, .character-editor-workspace.history-open { grid-template-columns: minmax(0, 1fr); grid-template-rows: auto minmax(0, 1fr); }
|
|
1554
1591
|
.character-editor-nav { flex-direction: row; overflow-x: auto; padding: 8px 10px; border-right: 0; border-bottom: 1px solid var(--line); }
|
|
1555
1592
|
.character-editor-nav button { flex: 0 0 130px; }
|
|
@@ -1558,15 +1595,20 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1558
1595
|
.character-editor-section-fields > label, .character-editor-section-fields > .form-field, .character-editor-field-help { grid-column: 1; }
|
|
1559
1596
|
.character-editor-section > header { align-items: flex-start; flex-direction: column; gap: 7px; }
|
|
1560
1597
|
.character-editor-section > header p { text-align: left; }
|
|
1561
|
-
.character-markdown-
|
|
1598
|
+
.character-markdown-editor { overflow-y: auto; }
|
|
1599
|
+
.character-markdown-compose { grid-template-columns: minmax(0, 1fr); min-height: auto; }
|
|
1600
|
+
.character-markdown-compose textarea { min-height: 42dvh; resize: vertical; }
|
|
1601
|
+
.character-markdown-compose > div { min-height: 42dvh; }
|
|
1562
1602
|
.character-markdown-editor-meta { grid-template-columns: minmax(0, 1fr); }
|
|
1563
|
-
.character-markdown-summary-field {
|
|
1603
|
+
.character-markdown-summary-field textarea { min-height: 72px; height: auto; }
|
|
1604
|
+
.character-markdown-editor-footer { grid-template-columns: minmax(0, 1fr); gap: 10px; }
|
|
1564
1605
|
.character-editor-actions { grid-template-columns: minmax(0, 1fr); gap: 10px; }
|
|
1565
1606
|
.character-editor-actions > div { justify-content: flex-end; }
|
|
1566
1607
|
.character-editor-workspace.history-open .character-history-panel { width: min(360px, 86vw); }
|
|
1567
1608
|
}
|
|
1568
1609
|
|
|
1569
1610
|
@media (max-width: 640px) {
|
|
1611
|
+
.setting-editor-sidebar { grid-template-columns: minmax(0, 1fr); }
|
|
1570
1612
|
.ai-history-dialog-body { min-height: min(360px, 62vh); padding: 12px 14px 18px; }
|
|
1571
1613
|
.account-settings-body { padding: 16px; }
|
|
1572
1614
|
.account-settings-section { padding: 15px; }
|
package/dist/security.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createHash, timingSafeEqual } from "node:crypto";
|
|
2
2
|
import { isIP } from "node:net";
|
|
3
3
|
import { lookup } from "node:dns/promises";
|
|
4
|
+
import { Agent } from "undici";
|
|
4
5
|
import { AppError } from "./errors.js";
|
|
5
6
|
import { logger } from "./logger.js";
|
|
6
7
|
const digest = (value) => createHash("sha256").update(value).digest();
|
|
@@ -168,14 +169,41 @@ function unsafeIpKind(address) {
|
|
|
168
169
|
return unsafeIpKind(normalized.slice(7));
|
|
169
170
|
return null;
|
|
170
171
|
}
|
|
172
|
+
const pinnedAiAddresses = new Map();
|
|
173
|
+
const maximumPinnedAiHosts = 1_000;
|
|
174
|
+
const pinnedAiAgent = new Agent({
|
|
175
|
+
connect: {
|
|
176
|
+
lookup: (hostname, _options, callback) => {
|
|
177
|
+
const addresses = pinnedAiAddresses.get(hostname.toLocaleLowerCase());
|
|
178
|
+
if (!addresses?.length) {
|
|
179
|
+
callback(new Error("AI endpoint was not resolved by the SSRF validator"), []);
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
callback(null, addresses);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
function rememberPinnedAiAddresses(hostname, addresses) {
|
|
187
|
+
const key = hostname.toLocaleLowerCase();
|
|
188
|
+
if (!pinnedAiAddresses.has(key) && pinnedAiAddresses.size >= maximumPinnedAiHosts) {
|
|
189
|
+
const oldest = pinnedAiAddresses.keys().next().value;
|
|
190
|
+
if (oldest)
|
|
191
|
+
pinnedAiAddresses.delete(oldest);
|
|
192
|
+
}
|
|
193
|
+
pinnedAiAddresses.delete(key);
|
|
194
|
+
pinnedAiAddresses.set(key, addresses);
|
|
195
|
+
}
|
|
171
196
|
export async function assertSafeAiEndpoint(value, allowPrivateNetwork = false) {
|
|
172
197
|
const endpoint = new URL(value);
|
|
173
198
|
if (!['http:', 'https:'].includes(endpoint.protocol) || endpoint.username || endpoint.password) {
|
|
174
199
|
throw new AppError(400, "UNSAFE_PROVIDER_ENDPOINT", "AI 供应商地址必须是无内嵌凭据的 HTTP 或 HTTPS 地址");
|
|
175
200
|
}
|
|
176
201
|
const addresses = isIP(endpoint.hostname)
|
|
177
|
-
? [{ address: endpoint.hostname }]
|
|
178
|
-
: await lookup(endpoint.hostname, { all: true, verbatim: true }).catch(() => [])
|
|
202
|
+
? [{ address: endpoint.hostname, family: isIP(endpoint.hostname) }]
|
|
203
|
+
: (await lookup(endpoint.hostname, { all: true, verbatim: true }).catch(() => [])).map(({ address, family }) => ({
|
|
204
|
+
address,
|
|
205
|
+
family: family
|
|
206
|
+
}));
|
|
179
207
|
if (!addresses.length)
|
|
180
208
|
throw new AppError(400, "UNSAFE_PROVIDER_ENDPOINT", "AI 供应商域名无法解析");
|
|
181
209
|
for (const { address } of addresses) {
|
|
@@ -185,6 +213,7 @@ export async function assertSafeAiEndpoint(value, allowPrivateNetwork = false) {
|
|
|
185
213
|
throw new AppError(400, "UNSAFE_PROVIDER_ENDPOINT", "AI 供应商地址指向受保护的本机、内网或链路本地网络");
|
|
186
214
|
}
|
|
187
215
|
}
|
|
216
|
+
return addresses;
|
|
188
217
|
}
|
|
189
218
|
const redirectStatuses = new Set([301, 302, 303, 307, 308]);
|
|
190
219
|
/**
|
|
@@ -196,8 +225,16 @@ export async function fetchSafeAiEndpoint(fetchImpl, url, init, validateOutbound
|
|
|
196
225
|
const baseHeaders = new Headers(init.headers);
|
|
197
226
|
for (let hop = 0; hop <= maxRedirects; hop += 1) {
|
|
198
227
|
logger.debug("ai.outbound_request.validating", { hostname: new URL(currentUrl).hostname, hop });
|
|
199
|
-
await validateOutboundUrl?.(currentUrl);
|
|
200
|
-
const
|
|
228
|
+
const validatedAddresses = await validateOutboundUrl?.(currentUrl);
|
|
229
|
+
const requestInit = {
|
|
230
|
+
...init,
|
|
231
|
+
headers: baseHeaders,
|
|
232
|
+
redirect: "manual",
|
|
233
|
+
...(Array.isArray(validatedAddresses) && validatedAddresses.length
|
|
234
|
+
? (rememberPinnedAiAddresses(new URL(currentUrl).hostname, validatedAddresses), { dispatcher: pinnedAiAgent })
|
|
235
|
+
: {})
|
|
236
|
+
};
|
|
237
|
+
const response = await fetchImpl(currentUrl, requestInit);
|
|
201
238
|
logger.debug("ai.outbound_request.response", { hostname: new URL(currentUrl).hostname, hop, status: response.status });
|
|
202
239
|
if (!redirectStatuses.has(response.status))
|
|
203
240
|
return response;
|
package/dist/security.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.js","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"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"}
|