@musnows/scriverse 0.6.1 → 0.6.3
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/README.en.md +3 -2
- package/README.md +3 -2
- package/dist/ai-tool-results.js +71 -0
- package/dist/ai-tool-results.js.map +1 -1
- package/dist/ai.js +267 -54
- package/dist/ai.js.map +1 -1
- package/dist/app.js +256 -57
- package/dist/app.js.map +1 -1
- package/dist/attachment-storage.js +9 -1
- package/dist/attachment-storage.js.map +1 -1
- package/dist/cli-contract.js +4 -0
- package/dist/cli-contract.js.map +1 -1
- package/dist/cli-core.js +23 -7
- package/dist/cli-core.js.map +1 -1
- package/dist/credential-vault.js +7 -5
- package/dist/credential-vault.js.map +1 -1
- package/dist/database.js +243 -2
- package/dist/database.js.map +1 -1
- package/dist/docx-export.js +89 -0
- package/dist/docx-export.js.map +1 -0
- package/dist/domain.js +9 -0
- package/dist/domain.js.map +1 -1
- package/dist/image-captcha.js +8 -5
- package/dist/image-captcha.js.map +1 -1
- package/dist/public/ai-context-meter.js +4 -0
- package/dist/public/ai-message-time.js +3 -9
- package/dist/public/ai-tool-call.js +4 -0
- package/dist/public/app.js +765 -111
- package/dist/public/index.html +49 -17
- package/dist/public/markdown.js +1 -2
- package/dist/public/page-route.js +2 -2
- package/dist/public/styles.css +87 -29
- package/dist/public/system-status.d.ts +12 -0
- package/dist/public/system-status.js +16 -0
- package/dist/public/theme-init.js +2 -2
- package/dist/security.js +143 -16
- package/dist/security.js.map +1 -1
- package/dist/server-runtime.js +56 -1
- package/dist/server-runtime.js.map +1 -1
- package/dist/store.js +289 -39
- package/dist/store.js.map +1 -1
- package/dist/user-auth.js +56 -88
- package/dist/user-auth.js.map +1 -1
- package/dist/version.js +1 -1
- package/dist/writing-progress-time.js +15 -0
- package/dist/writing-progress-time.js.map +1 -1
- package/package.json +2 -1
package/README.en.md
CHANGED
|
@@ -105,12 +105,13 @@ Run `scriverse --help` for all local server, default server, authentication, wor
|
|
|
105
105
|
| `HOST` | `127.0.0.1` | Listen address; use `0.0.0.0` for a server deployment |
|
|
106
106
|
| `DATA_DIR` | `<project>/.data` | Default data directory |
|
|
107
107
|
| `DATABASE_PATH` | `<DATA_DIR>/novel.db` | SQLite database path |
|
|
108
|
-
| `AI_NOVEL_MASTER_KEY` | Generated and stored at `<DATA_DIR>/master.key` | Master key used to encrypt AI provider credentials |
|
|
108
|
+
| `AI_NOVEL_MASTER_KEY` | Generated and stored at `<DATA_DIR>/master.key` | Master key used to encrypt AI provider credentials; at least 32 characters when configured manually |
|
|
109
109
|
| `APP_AUTH_USERNAME` | Empty | Optional deployment gateway username; the in-app user system is always enabled |
|
|
110
110
|
| `APP_AUTH_PASSWORD` | Empty | Optional deployment gateway password, at least 12 characters; must be transported over HTTPS |
|
|
111
111
|
| `APP_TRUST_PROXY` | `false` | Set to the trusted proxy hop count (usually `1`) or `true` behind a trusted reverse proxy |
|
|
112
112
|
| `APP_ALLOW_PRIVATE_AI_ENDPOINTS` | `true` in development, `false` in production | Allow AI providers on loopback/private networks; link-local and cloud metadata addresses are always blocked |
|
|
113
113
|
| `APP_ALLOW_REGISTRATION` | `false` | Registration is enabled only when explicitly set to `true`; unset and all other values stay closed, including first-admin setup |
|
|
114
|
+
| `APP_SETUP_TOKEN` | Empty | Required when registration is enabled and must contain at least 32 characters; only the first administrator must enter it |
|
|
114
115
|
|
|
115
116
|
Custom configuration example:
|
|
116
117
|
|
|
@@ -128,7 +129,7 @@ APP_AUTH_PASSWORD='replace-with-a-long-random-password' \
|
|
|
128
129
|
npm start
|
|
129
130
|
```
|
|
130
131
|
|
|
131
|
-
Production deployments must use HTTPS at a trusted reverse proxy. For first-time setup, set `APP_ALLOW_REGISTRATION=true
|
|
132
|
+
Production deployments must use HTTPS at a trusted reverse proxy. For first-time setup, set `APP_ALLOW_REGISTRATION=true` and configure `APP_SETUP_TOKEN` with at least 32 random characters. The first registered user must enter that token and becomes the system administrator. Afterwards, remove both variables or disable registration and restart the service. Later ordinary registrations do not require the setup token. Optional HTTP Basic Auth is only an additional deployment gateway, and its credentials are merely Base64 encoded. `/api/health` remains public for health checks, while business APIs require an in-app login.
|
|
132
133
|
|
|
133
134
|
## AI Provider Setup
|
|
134
135
|
|
package/README.md
CHANGED
|
@@ -111,12 +111,13 @@ CLI 会按服务器保存登录凭据。所有连接服务的数据命令都可
|
|
|
111
111
|
| `HOST` | `127.0.0.1` | 监听地址;服务器部署时可设为 `0.0.0.0` |
|
|
112
112
|
| `DATA_DIR` | `<项目目录>/.data` | 默认数据目录 |
|
|
113
113
|
| `DATABASE_PATH` | `<DATA_DIR>/novel.db` | SQLite 数据库路径 |
|
|
114
|
-
| `AI_NOVEL_MASTER_KEY` | 自动生成并保存在 `<DATA_DIR>/master.key` | 加密 AI
|
|
114
|
+
| `AI_NOVEL_MASTER_KEY` | 自动生成并保存在 `<DATA_DIR>/master.key` | 加密 AI 供应商密钥的主密钥;手动配置时至少 32 个字符 |
|
|
115
115
|
| `APP_AUTH_USERNAME` | 空 | 可选的部署网关账号;应用内用户系统始终启用 |
|
|
116
116
|
| `APP_AUTH_PASSWORD` | 空 | 可选的部署网关密码,至少 12 个字符;必须通过 HTTPS 传输 |
|
|
117
117
|
| `APP_TRUST_PROXY` | `false` | 位于可信反向代理后时设为代理跳数(通常为 `1`)或 `true` |
|
|
118
118
|
| `APP_ALLOW_PRIVATE_AI_ENDPOINTS` | 开发环境 `true`,生产环境 `false` | 是否允许 AI 供应商连接本机或内网地址;链路本地与云元数据地址始终禁止 |
|
|
119
119
|
| `APP_ALLOW_REGISTRATION` | `false` | 仅明确设为 `true` 时开放注册;未设置或其他值均关闭,首次初始化创建管理员也必须显式开启 |
|
|
120
|
+
| `APP_SETUP_TOKEN` | 空 | 开放注册时必填且至少 32 个字符;仅首位管理员注册需要在页面输入 |
|
|
120
121
|
|
|
121
122
|
自定义示例:
|
|
122
123
|
|
|
@@ -134,7 +135,7 @@ APP_AUTH_PASSWORD='请替换为足够长的随机密码' \
|
|
|
134
135
|
npm start
|
|
135
136
|
```
|
|
136
137
|
|
|
137
|
-
生产环境必须在可信反向代理后启用 HTTPS。首次初始化时,将 `APP_ALLOW_REGISTRATION` 设为 `true
|
|
138
|
+
生产环境必须在可信反向代理后启用 HTTPS。首次初始化时,将 `APP_ALLOW_REGISTRATION` 设为 `true`,并为 `APP_SETUP_TOKEN` 配置至少 32 个字符的随机值;创建的第一个用户会自动成为系统管理员,且必须在页面输入该令牌。完成后应删除这两个环境变量或关闭注册并重启服务。后续添加普通用户只需临时开放注册,不再要求初始化令牌。可选的 HTTP Basic Auth 仅作为额外部署网关,其凭据只是 Base64 编码,未使用 HTTPS 时不能防止链路窃听。`/api/health` 保持免认证以供探活,业务 API 需要应用内登录。
|
|
138
139
|
|
|
139
140
|
## AI 供应商配置
|
|
140
141
|
|
package/dist/ai-tool-results.js
CHANGED
|
@@ -1,4 +1,75 @@
|
|
|
1
1
|
export const AGENT_TOOL_RESULT_MAX_CHARS = 10_000;
|
|
2
|
+
export const MIN_AGENT_TOOL_CALL_LIMIT = 5;
|
|
3
|
+
export const MAX_AGENT_TOOL_CALL_LIMIT = 48;
|
|
4
|
+
export const AGENT_TOOL_CALL_SOFT_WARNING_FLOOR = 3;
|
|
5
|
+
export const DEFAULT_AGENT_TOOL_CALL_GLOBAL_MULTIPLIER = 3;
|
|
6
|
+
export const MIN_AGENT_TOOL_CALL_GLOBAL_MULTIPLIER = 1;
|
|
7
|
+
export const MAX_AGENT_TOOL_CALL_GLOBAL_MULTIPLIER = 6;
|
|
8
|
+
export function agentToolCallSoftWarningThreshold(limit) {
|
|
9
|
+
if (!Number.isFinite(limit) || limit <= 0)
|
|
10
|
+
return AGENT_TOOL_CALL_SOFT_WARNING_FLOOR;
|
|
11
|
+
return Math.max(AGENT_TOOL_CALL_SOFT_WARNING_FLOOR, Math.floor(limit * 0.2) + 1);
|
|
12
|
+
}
|
|
13
|
+
export function agentToolCallQuotaUsedAfterCompact(limit) {
|
|
14
|
+
if (!Number.isFinite(limit) || limit <= 0)
|
|
15
|
+
return 0;
|
|
16
|
+
return Math.floor(limit * 0.2);
|
|
17
|
+
}
|
|
18
|
+
export function clampAgentToolCallGlobalMultiplier(value) {
|
|
19
|
+
const numeric = Math.round(Number(value));
|
|
20
|
+
if (!Number.isFinite(numeric))
|
|
21
|
+
return DEFAULT_AGENT_TOOL_CALL_GLOBAL_MULTIPLIER;
|
|
22
|
+
return Math.min(MAX_AGENT_TOOL_CALL_GLOBAL_MULTIPLIER, Math.max(MIN_AGENT_TOOL_CALL_GLOBAL_MULTIPLIER, numeric));
|
|
23
|
+
}
|
|
24
|
+
/** 单次响应周期内的全局工具调用上限;计数器只增不减,不受 compact 影响。 */
|
|
25
|
+
export function agentToolCallGlobalLimit(limit, multiplier) {
|
|
26
|
+
const safeLimit = Math.max(1, Math.floor(Number(limit) || 0));
|
|
27
|
+
const safeMultiplier = clampAgentToolCallGlobalMultiplier(multiplier);
|
|
28
|
+
return safeLimit * safeMultiplier;
|
|
29
|
+
}
|
|
30
|
+
export function shouldRejectGlobalToolCalls(globalUsed, requestedCount, globalLimit) {
|
|
31
|
+
if (!Number.isFinite(globalUsed) || !Number.isFinite(requestedCount) || !Number.isFinite(globalLimit))
|
|
32
|
+
return true;
|
|
33
|
+
if (requestedCount <= 0)
|
|
34
|
+
return false;
|
|
35
|
+
return globalUsed + requestedCount > globalLimit;
|
|
36
|
+
}
|
|
37
|
+
export function buildAgentToolCallQuotaNotice(remaining, limit) {
|
|
38
|
+
if (!Number.isFinite(remaining) || remaining <= 0)
|
|
39
|
+
return null;
|
|
40
|
+
if (remaining === 1) {
|
|
41
|
+
return "[critical] 重要提示:现在没有可用的工具调用次数了。请立即根据已有工具结果直接总结作答,不得再请求任何工具。若继续发起工具调用,系统将拒绝并报错。";
|
|
42
|
+
}
|
|
43
|
+
if (remaining <= agentToolCallSoftWarningThreshold(limit)) {
|
|
44
|
+
return `[warning] 提醒:本轮工具调用配额即将用尽,当前剩余 ${remaining} 次。请尽快收敛并准备最终答案,避免继续大规模检索。`;
|
|
45
|
+
}
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
/** 估算把 toolCallQuotaNotice 并入工具结果后,额外占用的字符数(用于 compact 体积预估)。 */
|
|
49
|
+
export function agentToolCallQuotaNoticeBudgetChars(remaining, limit) {
|
|
50
|
+
const notice = buildAgentToolCallQuotaNotice(remaining, limit);
|
|
51
|
+
if (!notice)
|
|
52
|
+
return 0;
|
|
53
|
+
return Math.max(0, serializedToolResultChars({ toolCallQuotaNotice: notice }) - 2);
|
|
54
|
+
}
|
|
55
|
+
export function withAgentToolCallQuotaNotice(result, remaining, limit) {
|
|
56
|
+
const notice = buildAgentToolCallQuotaNotice(remaining, limit);
|
|
57
|
+
if (!notice)
|
|
58
|
+
return result;
|
|
59
|
+
return { ...result, toolCallQuotaNotice: notice };
|
|
60
|
+
}
|
|
61
|
+
export function shouldRejectAgentToolCalls(executedCount, requestedCount, limit) {
|
|
62
|
+
if (!Number.isFinite(executedCount) || !Number.isFinite(requestedCount) || !Number.isFinite(limit))
|
|
63
|
+
return true;
|
|
64
|
+
if (requestedCount <= 0)
|
|
65
|
+
return false;
|
|
66
|
+
if (executedCount + requestedCount > limit)
|
|
67
|
+
return true;
|
|
68
|
+
// 最后一档配额保留给硬拒绝:在倒数第一次配额注入 critical 后,再请求工具即失败。
|
|
69
|
+
if (executedCount >= limit - 1)
|
|
70
|
+
return true;
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
2
73
|
const TOOL_RESULT_RECORD_MAX_CHARS = 6_000;
|
|
3
74
|
const TOOL_RESULT_IDENTITY_FIELDS = new Set([
|
|
4
75
|
"id",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-tool-results.js","sourceRoot":"","sources":["../src/ai-tool-results.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-tool-results.js","sourceRoot":"","sources":["../src/ai-tool-results.ts"],"names":[],"mappings":"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"}
|