预设兼容:按真实抓包对齐装配与包装层,补上声明式工具与预设正则。

- 装配只认 prompt_order.enabled;squash_system_messages 只合并相邻 system(新增 system 档,连接符按酒馆用单换行)
- 包装层:new_chat_prompt、示例对话(new_example_chat_prompt + <START> 切段 + name)、角色卡三块与 personality_format/scenario_format、{{user}}/{{char}} 取值、任务契约并进预设条目
- 工具协议:按 ToolBindings / 伪工具协议数据声明真 tools(presetToolPolicy=preset),工具描述用到的条目不再重复作为消息发出
- 正则:promptOnly 作用于对话历史(含 depth 过滤)、写入时脚本改写回复;{{//}} 注释按配平扫描
- tools/st-request-diff:真假上游抓包对比工具、三份预设的机制结论与实测报告
This commit is contained in:
2026-10-23 00:13:08 +08:00
parent ed09e5c831
commit 9dc927282f
94 changed files with 11558 additions and 413 deletions
+52
View File
@@ -0,0 +1,52 @@
/**
* 直聊的滚轮分配:指针在哪张卡片上,就先滚那张卡片的正文;
* 卡片到顶 / 到底后,这一格滚轮剩下的距离交给外面的大滚动条。
* 只算数,不碰 DOM,方便单测。
*/
function clamp(value, min, max) {
return Math.min(max, Math.max(min, value));
}
/**
* @param {object} input
* @param {number} [input.cardScrollTop] 卡片正文当前滚动位置
* @param {number} [input.cardScrollMax] 卡片正文最多还能滚多少(0 = 不可滚)
* @param {number} [input.deltaY] 这一格滚轮的距离,向下为正
* @param {number} [input.streamScrollTop] 大滚动条当前位置
* @param {number} [input.streamScrollMax] 大滚动条最多还能滚多少
* @returns {{ cardDelta: number, streamDelta: number, rest: number }}
* `cardDelta` / `streamDelta` 是各自实际该滚的距离,`rest` 是两边都到头后没用掉的距离。
*/
export function planWheelScroll({
cardScrollTop = 0,
cardScrollMax = 0,
deltaY = 0,
streamScrollTop = 0,
streamScrollMax = 0,
} = {}) {
const plan = { cardDelta: 0, streamDelta: 0, rest: 0 };
let rest = Number(deltaY) || 0;
if (!rest) return plan;
if (cardScrollMax > 0) {
const next = clamp(cardScrollTop + rest, 0, cardScrollMax);
const applied = next - cardScrollTop;
if (applied) {
plan.cardDelta = applied;
rest -= applied;
}
}
if (rest && streamScrollMax > 0) {
const next = clamp(streamScrollTop + rest, 0, streamScrollMax);
const applied = next - streamScrollTop;
if (applied) {
plan.streamDelta = applied;
rest -= applied;
}
}
plan.rest = rest;
return plan;
}