@zooique/memora 4.0.0 → 5.1.0
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/CHANGELOG.md +235 -1743
- package/README.en.md +43 -36
- package/README.md +308 -303
- package/dist/agent/agent.d.ts +46 -82
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +153 -220
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/assembler.d.ts +3 -16
- package/dist/agent/assembler.d.ts.map +1 -1
- package/dist/agent/assembler.js +76 -47
- package/dist/agent/assembler.js.map +1 -1
- package/dist/agent/backgroundTasks.d.ts +8 -1
- package/dist/agent/backgroundTasks.d.ts.map +1 -1
- package/dist/agent/backgroundTasks.js +8 -1
- package/dist/agent/backgroundTasks.js.map +1 -1
- package/dist/agent/budget.d.ts +23 -5
- package/dist/agent/budget.d.ts.map +1 -1
- package/dist/agent/budget.js +8 -2
- package/dist/agent/budget.js.map +1 -1
- package/dist/agent/builtinToolHandlers.d.ts +50 -10
- package/dist/agent/builtinToolHandlers.d.ts.map +1 -1
- package/dist/agent/builtinToolHandlers.js +67 -20
- package/dist/agent/builtinToolHandlers.js.map +1 -1
- package/dist/agent/builtinTools.d.ts +16 -0
- package/dist/agent/builtinTools.d.ts.map +1 -1
- package/dist/agent/builtinTools.js +15 -4
- package/dist/agent/builtinTools.js.map +1 -1
- package/dist/agent/constants.d.ts +0 -6
- package/dist/agent/constants.d.ts.map +1 -1
- package/dist/agent/constants.js +7 -8
- package/dist/agent/constants.js.map +1 -1
- package/dist/agent/contextManager.d.ts +8 -0
- package/dist/agent/contextManager.d.ts.map +1 -1
- package/dist/agent/contextManager.js +45 -3
- package/dist/agent/contextManager.js.map +1 -1
- package/dist/agent/contextPreparer.d.ts +1 -1
- package/dist/agent/contextPreparer.d.ts.map +1 -1
- package/dist/agent/contextPreparer.js +15 -10
- package/dist/agent/contextPreparer.js.map +1 -1
- package/dist/agent/guardRail.d.ts +25 -10
- package/dist/agent/guardRail.d.ts.map +1 -1
- package/dist/agent/guardRail.js +154 -46
- package/dist/agent/guardRail.js.map +1 -1
- package/dist/agent/loop.d.ts +46 -13
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +145 -32
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/managers/archiveCoordinator.d.ts +15 -3
- package/dist/agent/managers/archiveCoordinator.d.ts.map +1 -1
- package/dist/agent/managers/archiveCoordinator.js +13 -7
- package/dist/agent/managers/archiveCoordinator.js.map +1 -1
- package/dist/agent/managers/chatLockManager.d.ts +3 -9
- package/dist/agent/managers/chatLockManager.d.ts.map +1 -1
- package/dist/agent/managers/chatLockManager.js +7 -25
- package/dist/agent/managers/chatLockManager.js.map +1 -1
- package/dist/agent/managers/llmCaller.d.ts.map +1 -1
- package/dist/agent/managers/llmCaller.js +27 -1
- package/dist/agent/managers/llmCaller.js.map +1 -1
- package/dist/agent/managers/memoryInspector.d.ts +12 -7
- package/dist/agent/managers/memoryInspector.d.ts.map +1 -1
- package/dist/agent/managers/memoryInspector.js +32 -19
- package/dist/agent/managers/memoryInspector.js.map +1 -1
- package/dist/agent/managers/roundSummaryGenerator.d.ts +3 -1
- package/dist/agent/managers/roundSummaryGenerator.d.ts.map +1 -1
- package/dist/agent/managers/roundSummaryGenerator.js +14 -4
- package/dist/agent/managers/roundSummaryGenerator.js.map +1 -1
- package/dist/agent/managers/sessionArchiver.d.ts +20 -6
- package/dist/agent/managers/sessionArchiver.d.ts.map +1 -1
- package/dist/agent/managers/sessionArchiver.js +19 -5
- package/dist/agent/managers/sessionArchiver.js.map +1 -1
- package/dist/agent/managers/sessionManager.d.ts +21 -88
- package/dist/agent/managers/sessionManager.d.ts.map +1 -1
- package/dist/agent/managers/sessionManager.js +77 -278
- package/dist/agent/managers/sessionManager.js.map +1 -1
- package/dist/agent/seed/orchestrator.d.ts.map +1 -1
- package/dist/agent/seed/orchestrator.js +3 -3
- package/dist/agent/seed/orchestrator.js.map +1 -1
- package/dist/agent/seed/prepare.d.ts.map +1 -1
- package/dist/agent/seed/prepare.js +9 -4
- package/dist/agent/seed/prepare.js.map +1 -1
- package/dist/agent/seed/types.d.ts +11 -4
- package/dist/agent/seed/types.d.ts.map +1 -1
- package/dist/agent/seed/types.js +2 -2
- package/dist/agent/toolExecutor.d.ts +69 -18
- package/dist/agent/toolExecutor.d.ts.map +1 -1
- package/dist/agent/toolExecutor.js +188 -28
- package/dist/agent/toolExecutor.js.map +1 -1
- package/dist/agent/toolResultCache.js +1 -1
- package/dist/agent/toolRunner.d.ts +4 -2
- package/dist/agent/toolRunner.d.ts.map +1 -1
- package/dist/agent/toolRunner.js +7 -4
- package/dist/agent/toolRunner.js.map +1 -1
- package/dist/agent/types.d.ts +8 -25
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/index.d.ts +9 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -32
- package/dist/index.js.map +1 -1
- package/dist/logging/logger.d.ts +4 -1
- package/dist/logging/logger.d.ts.map +1 -1
- package/dist/logging/logger.js +5 -2
- package/dist/logging/logger.js.map +1 -1
- package/dist/memory/gcService.d.ts.map +1 -1
- package/dist/memory/gcService.js +3 -5
- package/dist/memory/gcService.js.map +1 -1
- package/dist/memory/inMemorySessionStore.d.ts +2 -2
- package/dist/memory/inMemorySessionStore.js +2 -2
- package/dist/memory/inMemoryStorage.d.ts +4 -3
- package/dist/memory/inMemoryStorage.d.ts.map +1 -1
- package/dist/memory/inMemoryStorage.js +2 -2
- package/dist/memory/inMemoryStorage.js.map +1 -1
- package/dist/memory/nodeSqliteStorage.d.ts +17 -0
- package/dist/memory/nodeSqliteStorage.d.ts.map +1 -0
- package/dist/memory/nodeSqliteStorage.js +393 -0
- package/dist/memory/nodeSqliteStorage.js.map +1 -0
- package/dist/memory/projectManager.d.ts +10 -20
- package/dist/memory/projectManager.d.ts.map +1 -1
- package/dist/memory/projectManager.js +27 -41
- package/dist/memory/projectManager.js.map +1 -1
- package/dist/memory/roundStore.d.ts +76 -1
- package/dist/memory/roundStore.d.ts.map +1 -1
- package/dist/memory/roundStore.js.map +1 -1
- package/dist/memory/roundSummaryLookup.d.ts +26 -0
- package/dist/memory/roundSummaryLookup.d.ts.map +1 -0
- package/dist/memory/roundSummaryLookup.js +19 -0
- package/dist/memory/roundSummaryLookup.js.map +1 -0
- package/dist/memory/sessionStore.d.ts +19 -2
- package/dist/memory/sessionStore.d.ts.map +1 -1
- package/dist/memory/sessionStore.js.map +1 -1
- package/dist/memory/sourceValidation.d.ts +2 -13
- package/dist/memory/sourceValidation.d.ts.map +1 -1
- package/dist/memory/sourceValidation.js +5 -16
- package/dist/memory/sourceValidation.js.map +1 -1
- package/dist/memory/storageInterface.d.ts +26 -16
- package/dist/memory/storageInterface.d.ts.map +1 -1
- package/dist/memory/supersedeResolve.d.ts +39 -0
- package/dist/memory/supersedeResolve.d.ts.map +1 -0
- package/dist/memory/supersedeResolve.js +16 -0
- package/dist/memory/supersedeResolve.js.map +1 -0
- package/dist/memory/types.d.ts +3 -2
- package/dist/memory/types.d.ts.map +1 -1
- package/dist/memory/types.js +2 -1
- package/dist/memory/types.js.map +1 -1
- package/dist/role-pack/rolePackManager.d.ts +33 -24
- package/dist/role-pack/rolePackManager.d.ts.map +1 -1
- package/dist/role-pack/rolePackManager.js +48 -42
- package/dist/role-pack/rolePackManager.js.map +1 -1
- package/dist/role-pack/strategyKeys.d.ts +8 -0
- package/dist/role-pack/strategyKeys.d.ts.map +1 -1
- package/dist/role-pack/strategyKeys.js +10 -0
- package/dist/role-pack/strategyKeys.js.map +1 -1
- package/dist/role-pack/strategyResolver.d.ts +6 -1
- package/dist/role-pack/strategyResolver.d.ts.map +1 -1
- package/dist/role-pack/strategyResolver.js +20 -2
- package/dist/role-pack/strategyResolver.js.map +1 -1
- package/dist/role-pack/types.d.ts +5 -1
- package/dist/role-pack/types.d.ts.map +1 -1
- package/dist/security/confirmEntries.d.ts +21 -6
- package/dist/security/confirmEntries.d.ts.map +1 -1
- package/dist/security/confirmEntries.js +21 -6
- package/dist/security/confirmEntries.js.map +1 -1
- package/dist/security/pathGuard.d.ts +44 -10
- package/dist/security/pathGuard.d.ts.map +1 -1
- package/dist/security/pathGuard.js +70 -10
- package/dist/security/pathGuard.js.map +1 -1
- package/dist/utils/backgroundTask.d.ts +56 -34
- package/dist/utils/backgroundTask.d.ts.map +1 -1
- package/dist/utils/backgroundTask.js +130 -99
- package/dist/utils/backgroundTask.js.map +1 -1
- package/dist/utils/errors.d.ts +3 -2
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +3 -2
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/eventEmitter.d.ts +20 -22
- package/dist/utils/eventEmitter.d.ts.map +1 -1
- package/dist/utils/eventEmitter.js +0 -3
- package/dist/utils/eventEmitter.js.map +1 -1
- package/dist/utils/time.d.ts +3 -3
- package/dist/utils/time.d.ts.map +1 -1
- package/dist/utils/time.js +3 -3
- package/dist/utils/time.js.map +1 -1
- package/dist/utils/toError.d.ts +1 -1
- package/dist/utils/toError.js +1 -1
- package/dist/web-fetch/loginWall.d.ts +39 -0
- package/dist/web-fetch/loginWall.d.ts.map +1 -0
- package/dist/web-fetch/loginWall.js +78 -0
- package/dist/web-fetch/loginWall.js.map +1 -0
- package/dist/web-fetch/types.d.ts +8 -0
- package/dist/web-fetch/types.d.ts.map +1 -1
- package/dist/web-fetch/webFetchProvider.d.ts.map +1 -1
- package/dist/web-fetch/webFetchProvider.js +3 -1
- package/dist/web-fetch/webFetchProvider.js.map +1 -1
- package/dist/web-search/fetchWebSearchProvider.js +28 -23
- package/dist/web-search/fetchWebSearchProvider.js.map +1 -1
- package/docs/architecture/role-pack-authoring-guide.md +7 -1
- package/docs/architecture/role-pack-spec.md +11 -6
- package/docs/memora-api-reference.md +1354 -1276
- package/docs/memora-/345/215/207/347/272/247/346/214/207/345/215/227-4.x-/345/210/260-5.0.0.md +385 -0
- package/docs/memora-/346/216/245/345/205/245/346/214/207/345/215/227.md +89 -49
- package/docs/role-pack-/345/274/200/346/224/276/351/224/256/346/214/207/345/215/227.md +148 -148
- package/package.json +13 -4
- package/role-packs/README.md +41 -40
- package/role-packs/memora/345/212/251/346/211/213/rules.md +5 -4
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/manifest.json +1 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/persona.md +46 -46
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/rules.md +17 -16
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/emotion-wave.md +46 -46
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/foreshadow.md +29 -29
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/outline-expand.md +73 -48
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/project-init/scripts/init-novel-project.mjs +445 -441
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/story-bible.md +62 -62
- package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/manifest.json +1 -0
- package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/rules.md +2 -1
- package/dist/agent/managers/dedupManager.d.ts +0 -85
- package/dist/agent/managers/dedupManager.d.ts.map +0 -1
- package/dist/agent/managers/dedupManager.js +0 -248
- package/dist/agent/managers/dedupManager.js.map +0 -1
- package/dist/agent/managers/goalConsistencyChecker.d.ts +0 -42
- package/dist/agent/managers/goalConsistencyChecker.d.ts.map +0 -1
- package/dist/agent/managers/goalConsistencyChecker.js +0 -178
- package/dist/agent/managers/goalConsistencyChecker.js.map +0 -1
- package/dist/agent/managers/llmJudgeHelper.d.ts +0 -21
- package/dist/agent/managers/llmJudgeHelper.d.ts.map +0 -1
- package/dist/agent/managers/llmJudgeHelper.js +0 -32
- package/dist/agent/managers/llmJudgeHelper.js.map +0 -1
- package/dist/agent/managers/memoryAdvisor.d.ts +0 -105
- package/dist/agent/managers/memoryAdvisor.d.ts.map +0 -1
- package/dist/agent/managers/memoryAdvisor.js +0 -322
- package/dist/agent/managers/memoryAdvisor.js.map +0 -1
- package/dist/agent/managers/memoryGovernance.d.ts +0 -24
- package/dist/agent/managers/memoryGovernance.d.ts.map +0 -1
- package/dist/agent/managers/memoryGovernance.js +0 -46
- package/dist/agent/managers/memoryGovernance.js.map +0 -1
- package/dist/memory/governance.d.ts +0 -17
- package/dist/memory/governance.d.ts.map +0 -1
- package/dist/memory/governance.js +0 -17
- package/dist/memory/governance.js.map +0 -1
- package/dist/memory/projectRegistry.d.ts +0 -47
- package/dist/memory/projectRegistry.d.ts.map +0 -1
- package/dist/memory/projectRegistry.js +0 -151
- package/dist/memory/projectRegistry.js.map +0 -1
- package/dist/utils/recallDefaults.d.ts +0 -16
- package/dist/utils/recallDefaults.d.ts.map +0 -1
- package/dist/utils/recallDefaults.js +0 -16
- package/dist/utils/recallDefaults.js.map +0 -1
|
@@ -53,7 +53,7 @@ export class ContextPreparer {
|
|
|
53
53
|
const { deps } = this;
|
|
54
54
|
// ── 上下文预算:动态预算装配(role-pack-spec §C) ──
|
|
55
55
|
// 容量来源:windowTokens = deps.config.maxContextTokens —— 单一数字,已由宿主在构造内核 Agent 前
|
|
56
|
-
// 经内核 resolveContextWindow(window) 解析(per-LLM
|
|
56
|
+
// 经内核 resolveContextWindow(window) 解析(per-LLM 窗口为唯一真理源,缺失回退 = AGENT_CONSTANTS.DEFAULT_MAX_CONTEXT_TOKENS)后注入;内核预算路径只消费单一数字,不认 provider/用户双层来源。
|
|
57
57
|
// 固定开销取 system prompt;顶级锚点 = 本轮用户输入(独立划块,永不压缩);完整对话层从最近往回塞到 ~90% 止
|
|
58
58
|
const loop = deps.loop;
|
|
59
59
|
const loopMessages = loop.getMessages();
|
|
@@ -96,15 +96,17 @@ export class ContextPreparer {
|
|
|
96
96
|
loop.injectSystemMessage(recentPrompt);
|
|
97
97
|
logger.debug({ turns: recentHistory.length / 2 }, '最近对话已注入');
|
|
98
98
|
}
|
|
99
|
-
// ──
|
|
99
|
+
// ── 上下文占用快照(预算可视化):记录各层实际用量,供输入区指示器展示 ──
|
|
100
100
|
// 单一真理源 = 本 prepare 已算出的实际值;宿主/webview 只渲染、不重算。
|
|
101
|
-
// rolePackBase
|
|
102
|
-
//
|
|
103
|
-
//
|
|
104
|
-
//
|
|
105
|
-
//
|
|
106
|
-
//
|
|
107
|
-
//
|
|
101
|
+
// rolePackBase = fixedOverheadTokens(system prompt:persona+rules+技能L1+工具schema)
|
|
102
|
+
// dynamicSystem = messages[0] 之外的 system 消息 token(最近对话块/情报区/任务表/提示等
|
|
103
|
+
// 运行时注入)——计入占用,否则 free 系统性偏大、指示器偏乐观(P1-1)
|
|
104
|
+
// dialogue = 问答闭环完整对话 token(全量 user+assistant,与装配模式无关——容量诚实
|
|
105
|
+
// 统计问答闭环总和;loop 侧 refreshOccupancyFromMessages 以
|
|
106
|
+
// 同一估算器重算覆盖,prepare 与实时刷新同源同数据,无口径漂移)
|
|
107
|
+
// inputAnchor = 顶级锚点(本轮用户输入,budget.anchorTokens)
|
|
108
|
+
// outputReserve = 窗口 × 输出预留比例(留给模型回答的容量,非已用)
|
|
109
|
+
// free = 总容量 − 各段,≥ 0 收敛(窗口过小/输入过大时各段归零)
|
|
108
110
|
// 注:记忆不占用上下文,占用模型无记忆维度。
|
|
109
111
|
const dialogueTokens = loop.estimateTokens(loop.getConversationMessages());
|
|
110
112
|
// 条数语义:以「用户输入」为计数标准——一个问答闭环(user 消息)计 1 条,
|
|
@@ -112,13 +114,16 @@ export class ContextPreparer {
|
|
|
112
114
|
// 关键:dialogueCount 与 dialogueTokens 统一取 loop.messages 全量(user 计数 + 全量 token),
|
|
113
115
|
// 与装配模式无关——否则 hybrid 模式下 getRecentHistoryWithinBudget 按预算截取「最近 N 轮」
|
|
114
116
|
// 会把最新轮挤掉最旧轮、轮数守恒,导致「发一条消息后完整对话数不涨」(用户实测 bug),
|
|
115
|
-
// 且进窗口径与 loop 侧实时刷新(
|
|
117
|
+
// 且进窗口径与 loop 侧实时刷新(refreshOccupancyFromMessages 按全量重算)产生语义漂移。
|
|
116
118
|
// 统一全量后 prepare 与刷新共用同一估算器、同一数据源(SSOT),杜绝口径分叉。
|
|
117
119
|
const dialogueCount = loop.getConversationMessages().filter((m) => m.role === 'user').length;
|
|
120
|
+
// 动态注入占用(messages[0] 之外的 system 消息)——单一真理源 = loop.getDynamicSystemTokens()
|
|
121
|
+
const dynamicSystemTokens = loop.getDynamicSystemTokens();
|
|
118
122
|
// 占用组装复用 estimateOccupancy(SSOT 单点:free 收敛 + 拼满 + 输出预留,宿主历史会话重算共用)
|
|
119
123
|
deps.loop.recordOccupancy(estimateOccupancy({
|
|
120
124
|
totalTokens: deps.config.maxContextTokens,
|
|
121
125
|
rolePackBaseTokens: fixedOverheadTokens,
|
|
126
|
+
dynamicSystemTokens,
|
|
122
127
|
dialogueTokens,
|
|
123
128
|
dialogueCount,
|
|
124
129
|
inputAnchorTokens: budget.anchorTokens,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contextPreparer.js","sourceRoot":"","sources":["../../src/agent/contextPreparer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAG7F,OAAO,EAAE,YAAY,EAAuB,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AA6B7C;;;;;GAKG;AACH,MAAM,OAAO,eAAe;IAC1B,2BAA2B;IACV,IAAI,CAAsB;IAE3C,YAAY,IAAyB;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED;;;;;;;;OAQG;IACH,mBAAmB,CAAC,MAAc;QAChC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC;IAC7C,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,eAAe,CAAC,KAAa;QACjC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QAEtB,wCAAwC;QACxC,6EAA6E;QAC7E
|
|
1
|
+
{"version":3,"file":"contextPreparer.js","sourceRoot":"","sources":["../../src/agent/contextPreparer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 守卫抽象(GuardRail)—— loop 运行时前置拦截型护栏的统一真理源
|
|
3
3
|
*
|
|
4
|
-
* 背景:联网搜索上限 / 提问上限 /
|
|
4
|
+
* 背景:联网搜索上限 / 提问上限 / 写侧无进展止损 / 读取失败硬闸 / 重复读取拦截
|
|
5
5
|
* 这 5 种前置拦截型护栏统一走注册式 guard,避免以「内联 if + 独立计数字段 + 各自文案 +
|
|
6
6
|
* 各自阈值」散落在主循环里、每加一种护栏就改一遍主循环。
|
|
7
7
|
*
|
|
@@ -23,16 +23,17 @@
|
|
|
23
23
|
*
|
|
24
24
|
* 收敛现状:本模块已按注册序对 5 闸做**真拦截判定**(evaluateBlocked 由 loop 调用,命中回填拒绝文案),
|
|
25
25
|
* loop 只保留最小职责(组 GuardContext + 调 evaluateBlocked 判定 + 调 notifyExec 写侧喂数、
|
|
26
|
-
* reset 归零内部计数状态)。「## 行为护栏」节由 buildPromptSection
|
|
26
|
+
* reset 归零内部计数状态)。「## 行为护栏」节由 buildPromptSection 产出,内核默认装配**不注入**
|
|
27
|
+
* (见 loop.buildSystemPrompt 的注入边界注),宿主当前也访问不到——保留为可选能力,勿据本句推断已上屏。
|
|
27
28
|
*/
|
|
28
|
-
import {
|
|
29
|
+
import { type CacheEntry, type DedupSubject, type ToolResultCache } from '../agent/toolResultCache.js';
|
|
29
30
|
import type { BlockedReason } from '../agent/managers/toolCallHelpers.js';
|
|
30
31
|
/** 护栏类型 id(收敛集合,新增护栏在此扩联合) */
|
|
31
32
|
export type GuardRailId = 'search_limit' | 'ask_limit' | 'write_loop' | 'read_failed' | 'read_dedup';
|
|
32
33
|
/** 命中提示词 id(与 GuardRailPromptId 一一对应,文案收敛到 GUARD_RAIL_PROMPTS) */
|
|
33
|
-
export type GuardRailPromptId = 'search_limit' | 'ask_limit' | 'write_loop_stop' | 'read_failed_limit' | 'already_read' | 'already_read_escalated';
|
|
34
|
-
/** 护栏运行态计数(loop 注入,仅承载 search_limit / ask_limit 两枚;write_loop
|
|
35
|
-
*
|
|
34
|
+
export type GuardRailPromptId = 'search_limit' | 'ask_limit' | 'write_loop_stop' | 'write_fail_stop' | 'read_failed_limit' | 'already_read' | 'already_read_escalated';
|
|
35
|
+
/** 护栏运行态计数(loop 注入,仅承载 search_limit / ask_limit 两枚;write_loop 的写侧计数 /
|
|
36
|
+
* read_failed 失败计数内聚进各自 guard 实例闭包,经 onExec 自持更新) */
|
|
36
37
|
export interface GuardCounters {
|
|
37
38
|
/** 本闭环内 web_search 调用次数(含被拒绝的)—— search_limit 用 */
|
|
38
39
|
searchCallCount: number;
|
|
@@ -50,21 +51,25 @@ export interface GuardExecContext {
|
|
|
50
51
|
}
|
|
51
52
|
/** 护栏阈值(运行时由调用方注入 GuardContext;真源分配见下) */
|
|
52
53
|
export interface GuardThresholds {
|
|
53
|
-
/**
|
|
54
|
+
/** 整文件覆盖连写止损阈值(原 WRITE_LOOP_THRESHOLD = 5):第 N 次**整文件覆盖**硬拦。
|
|
55
|
+
* 增量写(replace / insert / append)不计入——每次改的是不同片段,属正常修订而非自环。 */
|
|
54
56
|
writeLoop: number;
|
|
57
|
+
/** 同路径连续**失败写**止损阈值(无进展信号:原样重试不会成功)—— 静态真源 GUARD_THRESHOLDS */
|
|
58
|
+
writeFail: number;
|
|
55
59
|
/** 同主体连续失败硬闸阈值(原默认 3)—— 静态真源 GUARD_THRESHOLDS */
|
|
56
60
|
readFailed: number;
|
|
57
61
|
/** 单次用户输入提问上限(life:'perInput')—— 动态真源 role-pack strategy.askLimit(不塞静态默认) */
|
|
58
62
|
askLimit: number;
|
|
59
|
-
/** 单闭环联网搜索硬上限 —— 动态真源
|
|
63
|
+
/** 单闭环联网搜索硬上限 —— 动态真源 role-pack strategy.webSearchLimit(缺省值定义在 DEFAULT_BEHAVIOR_STRATEGY.global.webSearchLimit,不塞静态默认) */
|
|
60
64
|
maxWebSearch: number;
|
|
61
65
|
}
|
|
62
66
|
/** 静态阈值真源(SSOT):只承载「纯静态、无动态覆盖」的阈值。
|
|
63
|
-
* writeLoop / readFailed 以此为唯一真源;askLimit / maxWebSearch 属动态注入
|
|
67
|
+
* writeLoop / writeFail / readFailed 以此为唯一真源;askLimit / maxWebSearch 属动态注入
|
|
64
68
|
* (角色包 strategy / LOOP_CONSTANTS,历史曾把 20/8 塞进静态默认作死值、与运行时覆盖矛盾,经审查清除)。
|
|
65
69
|
* 调用方构造 GuardContext.thresholds 时须以本表为基底补齐两枚动态键。 */
|
|
66
70
|
export declare const GUARD_THRESHOLDS: {
|
|
67
71
|
readonly writeLoop: 5;
|
|
72
|
+
readonly writeFail: 3;
|
|
68
73
|
readonly readFailed: 3;
|
|
69
74
|
};
|
|
70
75
|
/** read_dedup 撞墙升级阈值:同主体累计被本护栏硬拦达此值后,后续命中升级为强禁令文案
|
|
@@ -94,6 +99,9 @@ export interface GuardRailDef {
|
|
|
94
99
|
matches: (c: GuardContext) => boolean;
|
|
95
100
|
/** 前置拦截判定:true = 需拦截 */
|
|
96
101
|
shouldBlock: (c: GuardContext) => boolean;
|
|
102
|
+
/** 放行后钩子(可选):由 loop 在「判定放行、确定要派发」处调 `notifyAllow`。
|
|
103
|
+
* 用途 = **在派发时预登记意图**,让同批并发调用的判定看得到「已在途」。 */
|
|
104
|
+
onAllow?: (c: GuardContext) => void;
|
|
97
105
|
/** true = 真拦截(回填拒绝文案)/ false = 软提示 */
|
|
98
106
|
blocked: boolean;
|
|
99
107
|
/** 命中文案 key(引用 GUARD_RAIL_PROMPTS,勿内联文案);函数形态 = 按 GuardContext 运行态选择
|
|
@@ -161,8 +169,15 @@ export declare class GuardRail {
|
|
|
161
169
|
* (撞墙升级等「只认自己拦的」闭包计数以此喂数;未注册 onBlocked 的护栏为 no-op)。 */
|
|
162
170
|
notifyBlocked(guardId: GuardRailId, toolName: string, argsJson: string): void;
|
|
163
171
|
/** 写侧喂数钩子分发:结果处理阶段由 loop 对每个 toolCall 调此方法。
|
|
164
|
-
*
|
|
172
|
+
* **全量分发**给所有 guard,各 guard 在 onExec 内按 toolName 自过滤——不借 `matches` 路由:
|
|
173
|
+
* 一个字段两职责会让「读成功复位写侧失败计数」这类跨工具观测被挡掉,护栏文案承诺的出口随之失效
|
|
174
|
+
* (真机实证:write_loop 原先只收到 write_file,其「先 read_file 再写」出口从未生效)。 */
|
|
165
175
|
notifyExec(c: GuardExecContext): void;
|
|
176
|
+
/** 放行后钩子分发:判定放行、确定派发时由 loop 调一次(与 notifyExec 同构全量分发)。
|
|
177
|
+
* 为什么需要:同批工具调用**先集中判定、再统一执行**,判定阶段看不到任何执行结果;
|
|
178
|
+
* 只靠执行后回喂的计数会让「一条回复内连发 N 次同一文件的整文件覆盖」整批绕过护栏
|
|
179
|
+
* (真机 round-1792919558093 实证:6 次 overwrite 全部放行)。 */
|
|
180
|
+
notifyAllow(c: GuardContext): void;
|
|
166
181
|
/** 归零指定生命周期 guard 的内部计数状态(life 轮边界由 loop 调 resetTurnState 统一触发) */
|
|
167
182
|
reset(life: 'perInput' | 'perTurn'): void;
|
|
168
183
|
/** 生成「## 行为护栏」通用声明节(注入 buildSystemPrompt;只放通用约束,不暴露逐轮计数) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guardRail.d.ts","sourceRoot":"","sources":["../../src/agent/guardRail.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"guardRail.d.ts","sourceRoot":"","sources":["../../src/agent/guardRail.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/guardRail.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 守卫抽象(GuardRail)—— loop 运行时前置拦截型护栏的统一真理源
|
|
3
3
|
*
|
|
4
|
-
* 背景:联网搜索上限 / 提问上限 /
|
|
4
|
+
* 背景:联网搜索上限 / 提问上限 / 写侧无进展止损 / 读取失败硬闸 / 重复读取拦截
|
|
5
5
|
* 这 5 种前置拦截型护栏统一走注册式 guard,避免以「内联 if + 独立计数字段 + 各自文案 +
|
|
6
6
|
* 各自阈值」散落在主循环里、每加一种护栏就改一遍主循环。
|
|
7
7
|
*
|
|
@@ -23,15 +23,20 @@
|
|
|
23
23
|
*
|
|
24
24
|
* 收敛现状:本模块已按注册序对 5 闸做**真拦截判定**(evaluateBlocked 由 loop 调用,命中回填拒绝文案),
|
|
25
25
|
* loop 只保留最小职责(组 GuardContext + 调 evaluateBlocked 判定 + 调 notifyExec 写侧喂数、
|
|
26
|
-
* reset 归零内部计数状态)。「## 行为护栏」节由 buildPromptSection
|
|
26
|
+
* reset 归零内部计数状态)。「## 行为护栏」节由 buildPromptSection 产出,内核默认装配**不注入**
|
|
27
|
+
* (见 loop.buildSystemPrompt 的注入边界注),宿主当前也访问不到——保留为可选能力,勿据本句推断已上屏。
|
|
27
28
|
*/
|
|
28
|
-
import { DEDUP_SUBJECT_EXTRACTORS, formatDedupSubject, failureSubjectKey, normalizePathKey,
|
|
29
|
+
import { DEDUP_SUBJECT_EXTRACTORS, formatDedupSubject, failureSubjectKey, normalizePathKey, } from '../agent/toolResultCache.js';
|
|
30
|
+
// write_file 缺省模式的唯一真源(写工具侧定义;本模块只读不复制——两处各写 'overwrite'
|
|
31
|
+
// 字面量会让 handler 默认值改动后本判据静默漂移,且没有任何测试会红)
|
|
32
|
+
import { DEFAULT_WRITE_FILE_MODE } from '../agent/builtinTools.js';
|
|
29
33
|
/** 静态阈值真源(SSOT):只承载「纯静态、无动态覆盖」的阈值。
|
|
30
|
-
* writeLoop / readFailed 以此为唯一真源;askLimit / maxWebSearch 属动态注入
|
|
34
|
+
* writeLoop / writeFail / readFailed 以此为唯一真源;askLimit / maxWebSearch 属动态注入
|
|
31
35
|
* (角色包 strategy / LOOP_CONSTANTS,历史曾把 20/8 塞进静态默认作死值、与运行时覆盖矛盾,经审查清除)。
|
|
32
36
|
* 调用方构造 GuardContext.thresholds 时须以本表为基底补齐两枚动态键。 */
|
|
33
37
|
export const GUARD_THRESHOLDS = {
|
|
34
38
|
writeLoop: 5,
|
|
39
|
+
writeFail: 3,
|
|
35
40
|
readFailed: 3,
|
|
36
41
|
};
|
|
37
42
|
/** read_dedup 撞墙升级阈值:同主体累计被本护栏硬拦达此值后,后续命中升级为强禁令文案
|
|
@@ -73,18 +78,38 @@ export function extractSubject(toolName, argsJson) {
|
|
|
73
78
|
const extractor = DEDUP_SUBJECT_EXTRACTORS[toolName];
|
|
74
79
|
return extractor ? extractor(argsJson) : undefined;
|
|
75
80
|
}
|
|
76
|
-
/**
|
|
77
|
-
function
|
|
81
|
+
/** 解析参数里的目标路径并归一(非 JSON / 空路径 → null)—— read_file / write_file 共用同一口径 */
|
|
82
|
+
function parsePathArg(argsJson) {
|
|
78
83
|
try {
|
|
79
84
|
const a = JSON.parse(argsJson);
|
|
80
85
|
if (typeof a?.path === 'string' && a.path.trim())
|
|
81
86
|
return normalizePathKey(a.path);
|
|
82
87
|
}
|
|
83
88
|
catch {
|
|
84
|
-
/* 参数非 JSON →
|
|
89
|
+
/* 参数非 JSON → 不参与计数 */
|
|
85
90
|
}
|
|
86
91
|
return null;
|
|
87
92
|
}
|
|
93
|
+
/** 解析 write_file 的「目标路径 + 写入模式」(缺省模式取 handler 同源真源) */
|
|
94
|
+
function parseWrite(argsJson) {
|
|
95
|
+
const path = parsePathArg(argsJson);
|
|
96
|
+
if (!path)
|
|
97
|
+
return null;
|
|
98
|
+
let mode = DEFAULT_WRITE_FILE_MODE;
|
|
99
|
+
try {
|
|
100
|
+
const a = JSON.parse(argsJson);
|
|
101
|
+
if (typeof a?.mode === 'string' && a.mode.trim())
|
|
102
|
+
mode = a.mode.trim().toLowerCase();
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
/* 模式取默认 */
|
|
106
|
+
}
|
|
107
|
+
return { path, mode };
|
|
108
|
+
}
|
|
109
|
+
/** 是否整文件覆盖写(只有它参与连写计数;replace/insert/append 属增量修订) */
|
|
110
|
+
function isWholeFileWrite(mode) {
|
|
111
|
+
return mode === DEFAULT_WRITE_FILE_MODE;
|
|
112
|
+
}
|
|
88
113
|
// ---------------------------------------------------------------------------
|
|
89
114
|
// 衔接提示词统一真理源(SSOT):命中文案收敛于此,格式统一 `[TAG] 已…/请…`
|
|
90
115
|
// 运行时命中时 renderPrompt(promptId, promptArgs) 即时渲染;systemPrompt 只放通用声明、不放命中文案。
|
|
@@ -95,10 +120,13 @@ export const GUARD_RAIL_PROMPTS = {
|
|
|
95
120
|
`请停止调用 web_search,直接基于现有搜索结果作答。`,
|
|
96
121
|
// 占位:{limit}=提问上限
|
|
97
122
|
ask_limit: `[ASK_LIMIT] 本问答闭环已提问 {limit} 次(上限),请基于现有信息继续,不要再调用 ask_user。`,
|
|
98
|
-
// 占位:{n}
|
|
99
|
-
write_loop_stop: `[WRITE_LOOP_STOP] 你已连续 {n}
|
|
100
|
-
|
|
101
|
-
|
|
123
|
+
// 占位:{n}=整文件覆盖连写次数;{subject}=被反复整文件覆盖的文件路径
|
|
124
|
+
write_loop_stop: `[WRITE_LOOP_STOP] 你已连续 {n} 次整文件覆盖 {subject}(本轮整文件重写已封顶)。` +
|
|
125
|
+
`请改用增量写入继续:mode=replace(old_string 取原文唯一片段)、mode=insert(指定行)、mode=append;` +
|
|
126
|
+
`确需整文件重建时结束本轮再来,不要在本轮反复覆盖同一文件。`,
|
|
127
|
+
// 占位:{n}=连续失败次数;{limit}=失败阈值;{subject}=写入目标
|
|
128
|
+
write_fail_stop: `[WRITE_FAIL_STOP] 同一文件 {subject} 已连续 {n} 次写入失败(阈值 {limit}),原样重试不会成功。` +
|
|
129
|
+
`请先 read_file 读取该文件最新内容(读成功后本计数即刻清零),再按原文精确改写。`,
|
|
102
130
|
// 占位:{n}=连续失败次数;{limit}=失败阈值
|
|
103
131
|
read_failed_limit: `[READ_FAILED_LIMIT] 该目标已连续失败 {n} 次(阈值 {limit}),` +
|
|
104
132
|
`可能不存在。请先用 list_dir 确认路径,或改用其它目标。`,
|
|
@@ -128,7 +156,7 @@ export function renderPrompt(promptId, args = {}) {
|
|
|
128
156
|
const GUIDELINES = {
|
|
129
157
|
read_dedup: '重复读取同一文件/搜索同一主体将被拦截并提示;如需文件其它部分请用 offset/limit 指定行区间。',
|
|
130
158
|
read_failed: '同一目标连续读取失败达阈值会被硬拦;请先 list_dir 确认路径或改用其它目标。',
|
|
131
|
-
write_loop: '
|
|
159
|
+
write_loop: '同一文件被反复整文件覆盖会触发写作死循环保护;多处修订请用 replace/insert/append 增量写入,不要反复整文件重写。',
|
|
132
160
|
ask_limit: '每个问答闭环仅允许有限次提问;基于现有信息继续,不要反复追问。',
|
|
133
161
|
search_limit: '联网搜索达上限后视为信息已足;直接基于已有结果作答。',
|
|
134
162
|
};
|
|
@@ -180,22 +208,20 @@ export class GuardRail {
|
|
|
180
208
|
this.registry.find((d) => d.id === guardId)?.onBlocked?.(toolName, argsJson);
|
|
181
209
|
}
|
|
182
210
|
/** 写侧喂数钩子分发:结果处理阶段由 loop 对每个 toolCall 调此方法。
|
|
183
|
-
*
|
|
211
|
+
* **全量分发**给所有 guard,各 guard 在 onExec 内按 toolName 自过滤——不借 `matches` 路由:
|
|
212
|
+
* 一个字段两职责会让「读成功复位写侧失败计数」这类跨工具观测被挡掉,护栏文案承诺的出口随之失效
|
|
213
|
+
* (真机实证:write_loop 原先只收到 write_file,其「先 read_file 再写」出口从未生效)。 */
|
|
184
214
|
notifyExec(c) {
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
for (const g of this.registry) {
|
|
196
|
-
if (g.matches(matchCtx))
|
|
197
|
-
g.onExec?.(c);
|
|
198
|
-
}
|
|
215
|
+
for (const g of this.registry)
|
|
216
|
+
g.onExec?.(c);
|
|
217
|
+
}
|
|
218
|
+
/** 放行后钩子分发:判定放行、确定派发时由 loop 调一次(与 notifyExec 同构全量分发)。
|
|
219
|
+
* 为什么需要:同批工具调用**先集中判定、再统一执行**,判定阶段看不到任何执行结果;
|
|
220
|
+
* 只靠执行后回喂的计数会让「一条回复内连发 N 次同一文件的整文件覆盖」整批绕过护栏
|
|
221
|
+
* (真机 round-1792919558093 实证:6 次 overwrite 全部放行)。 */
|
|
222
|
+
notifyAllow(c) {
|
|
223
|
+
for (const g of this.registry)
|
|
224
|
+
g.onAllow?.(c);
|
|
199
225
|
}
|
|
200
226
|
/** 归零指定生命周期 guard 的内部计数状态(life 轮边界由 loop 调 resetTurnState 统一触发) */
|
|
201
227
|
reset(life) {
|
|
@@ -220,7 +246,19 @@ export class GuardRail {
|
|
|
220
246
|
export function createDefaultGuards() {
|
|
221
247
|
// write_loop / read_failed 的计数状态各归本函数闭包(createDefaultGuards 每实例一份,
|
|
222
248
|
// loop 每个实例都 new 一个守卫容器 → 状态每实例独立,安全),经 onExec 喂数、reset 归零。
|
|
249
|
+
// write 只承载**整文件覆盖**连写链:增量写(replace/insert/append)不参与计数。
|
|
223
250
|
let write = { lastWritePath: null, samePathWriteStreak: 0 };
|
|
251
|
+
// 放行时已预登记的 toolCallId:同批调用的判定全部先于执行,只靠执行后回喂计数会让
|
|
252
|
+
// 「一条回复内连发 N 次整文件覆盖」整批绕过(真机 round-1792919558093:6 次 overwrite 全放行)。
|
|
253
|
+
const reservedWrites = new Set();
|
|
254
|
+
// 撤销一次预登记(该调用被拦下未执行):把这条预留从连写链退回,避免虚抬
|
|
255
|
+
const revertReserved = () => {
|
|
256
|
+
write.samePathWriteStreak = Math.max(0, write.samePathWriteStreak - 1);
|
|
257
|
+
if (write.samePathWriteStreak === 0)
|
|
258
|
+
write.lastWritePath = null;
|
|
259
|
+
};
|
|
260
|
+
// 同路径连续失败写计数(键 = 规范化路径):无进展信号;成功写 / 成功读即清该键
|
|
261
|
+
const writeFailByPath = new Map();
|
|
224
262
|
const readFailBySubject = new Map();
|
|
225
263
|
// read_dedup 撞墙升级计数(键 = failureSubjectKey 口径:工具+主体,不含 read_file 区间——
|
|
226
264
|
// 同文件换区间重试仍是同一条叙事级重读链)。喂数点 = onBlocked(拦截归属回喂),
|
|
@@ -232,8 +270,10 @@ export function createDefaultGuards() {
|
|
|
232
270
|
return 0;
|
|
233
271
|
return dedupBlockBySubject.get(failureSubjectKey(toolName, subject)) ?? 0;
|
|
234
272
|
};
|
|
235
|
-
//
|
|
273
|
+
// 期望整文件连写递增后值(读闭包 write,不做状态迁移;迁移交给 onExec)
|
|
236
274
|
const nextWriteStreak = (p) => write.lastWritePath === p ? write.samePathWriteStreak + 1 : 1;
|
|
275
|
+
// 同路径失败写计数(无记录 = 0)
|
|
276
|
+
const writeFailCountOf = (p) => writeFailByPath.get(p) ?? 0;
|
|
237
277
|
// read_failed 的 subject-key 提取(无 subject → null)
|
|
238
278
|
const readFailKey = (toolName, argsJson) => {
|
|
239
279
|
const subject = extractSubject(toolName, argsJson);
|
|
@@ -243,7 +283,7 @@ export function createDefaultGuards() {
|
|
|
243
283
|
.register({
|
|
244
284
|
id: 'search_limit',
|
|
245
285
|
matches: (c) => c.toolName === 'web_search',
|
|
246
|
-
// 现有 loop 语义:`searchCallCount >
|
|
286
|
+
// 现有 loop 语义:`searchCallCount > maxWebSearch`(超上限才拦;阈值 = strategy.webSearchLimit)
|
|
247
287
|
shouldBlock: (c) => c.counters.searchCallCount > c.thresholds.maxWebSearch,
|
|
248
288
|
blocked: true,
|
|
249
289
|
promptId: 'search_limit',
|
|
@@ -263,34 +303,102 @@ export function createDefaultGuards() {
|
|
|
263
303
|
.register({
|
|
264
304
|
id: 'write_loop',
|
|
265
305
|
matches: (c) => c.toolName === 'write_file',
|
|
266
|
-
//
|
|
267
|
-
//
|
|
306
|
+
// 判据 = **无进展**,不是「写了几次」:
|
|
307
|
+
// ① 同路径连续失败写达阈值(原样重试不会成功)→ 拦;
|
|
308
|
+
// ② 整文件覆盖连写达阈值 → 拦;增量写(replace/insert/append)每次改不同片段,永不计数。
|
|
309
|
+
// 计数读闭包、只读推断期望值;状态迁移交给 onExec。
|
|
268
310
|
shouldBlock: (c) => {
|
|
269
|
-
const
|
|
270
|
-
if (!
|
|
311
|
+
const w = parseWrite(c.argsJson);
|
|
312
|
+
if (!w)
|
|
313
|
+
return false;
|
|
314
|
+
if (writeFailCountOf(w.path) >= c.thresholds.writeFail)
|
|
315
|
+
return true;
|
|
316
|
+
if (!isWholeFileWrite(w.mode))
|
|
271
317
|
return false;
|
|
272
|
-
return nextWriteStreak(
|
|
318
|
+
return nextWriteStreak(w.path) >= c.thresholds.writeLoop;
|
|
273
319
|
},
|
|
274
320
|
blocked: true,
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
const
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
321
|
+
// 文案按运行态分支:失败连击 → 先读再写;整文件连写 → 改增量写
|
|
322
|
+
promptId: (c) => {
|
|
323
|
+
const w = parseWrite(c.argsJson);
|
|
324
|
+
return w && writeFailCountOf(w.path) >= c.thresholds.writeFail
|
|
325
|
+
? 'write_fail_stop'
|
|
326
|
+
: 'write_loop_stop';
|
|
327
|
+
},
|
|
328
|
+
promptArgs: (c, chosen) => {
|
|
329
|
+
const w = parseWrite(c.argsJson);
|
|
330
|
+
const subject = w?.path ?? '';
|
|
331
|
+
if (chosen === 'write_fail_stop') {
|
|
332
|
+
return {
|
|
333
|
+
n: subject ? writeFailCountOf(subject) : 0,
|
|
334
|
+
limit: c.thresholds.writeFail,
|
|
335
|
+
subject,
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
return {
|
|
339
|
+
n: subject
|
|
340
|
+
? Math.max(nextWriteStreak(subject), c.thresholds.writeLoop)
|
|
341
|
+
: c.thresholds.writeLoop,
|
|
342
|
+
subject,
|
|
343
|
+
};
|
|
344
|
+
},
|
|
345
|
+
onAllow: (c) => {
|
|
346
|
+
// 只预登记**整文件覆盖**:增量写不参与连写链,且批量逐处修订正是要放行的形态
|
|
347
|
+
if (c.toolName !== 'write_file')
|
|
348
|
+
return;
|
|
349
|
+
const w = parseWrite(c.argsJson);
|
|
350
|
+
if (!w || !isWholeFileWrite(w.mode))
|
|
351
|
+
return;
|
|
352
|
+
reservedWrites.add(c.toolCallId);
|
|
353
|
+
write.samePathWriteStreak = nextWriteStreak(w.path);
|
|
354
|
+
write.lastWritePath = w.path;
|
|
281
355
|
},
|
|
282
356
|
onExec: (c) => {
|
|
283
|
-
//
|
|
284
|
-
if (c.
|
|
357
|
+
// 读成功 = 已确认真实文件状态 → 清该路径的连续失败计数(兑现 write_fail_stop 的出口承诺)
|
|
358
|
+
if (c.toolName === 'read_file') {
|
|
359
|
+
if (c.outcome === 'ok') {
|
|
360
|
+
const p = parsePathArg(c.argsJson);
|
|
361
|
+
if (p)
|
|
362
|
+
writeFailByPath.delete(p);
|
|
363
|
+
}
|
|
285
364
|
return;
|
|
286
|
-
const p = parseWritePath(c.argsJson);
|
|
287
|
-
if (p) {
|
|
288
|
-
write.samePathWriteStreak = nextWriteStreak(p);
|
|
289
|
-
write.lastWritePath = p;
|
|
290
365
|
}
|
|
366
|
+
if (c.toolName !== 'write_file')
|
|
367
|
+
return;
|
|
368
|
+
// blocked = 未真正执行:撤销放行时的预登记(不撤销会冤杀后续正常写),且不累计失败
|
|
369
|
+
if (c.outcome === 'blocked') {
|
|
370
|
+
if (reservedWrites.delete(c.toolCallId))
|
|
371
|
+
revertReserved();
|
|
372
|
+
return;
|
|
373
|
+
}
|
|
374
|
+
const w = parseWrite(c.argsJson);
|
|
375
|
+
if (!w)
|
|
376
|
+
return;
|
|
377
|
+
if (c.outcome === 'failed') {
|
|
378
|
+
// 失败写 = 无进展:只累失败计数,不推进整文件连写链。
|
|
379
|
+
// 若该次写已在派发时预登记(onAllow),须先撤销预留——否则「没写成功」被静默算作
|
|
380
|
+
// 一次覆盖进展,与本护栏「无进展才拦」的判据相反(blocked 分支同款处理)。
|
|
381
|
+
if (reservedWrites.delete(c.toolCallId))
|
|
382
|
+
revertReserved();
|
|
383
|
+
writeFailByPath.set(w.path, writeFailCountOf(w.path) + 1);
|
|
384
|
+
return;
|
|
385
|
+
}
|
|
386
|
+
// 成功写:清失败计数;整文件覆盖推进连写链,增量写打断连写链(两类写不混算)
|
|
387
|
+
writeFailByPath.delete(w.path);
|
|
388
|
+
if (!isWholeFileWrite(w.mode)) {
|
|
389
|
+
write = { lastWritePath: null, samePathWriteStreak: 0 };
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
392
|
+
// 放行时已预登记过 ⇒ 本次连写已计入,勿重复递增(同一次写只算一次)
|
|
393
|
+
if (reservedWrites.delete(c.toolCallId))
|
|
394
|
+
return;
|
|
395
|
+
write.samePathWriteStreak = nextWriteStreak(w.path);
|
|
396
|
+
write.lastWritePath = w.path;
|
|
291
397
|
},
|
|
292
398
|
reset: () => {
|
|
293
399
|
write = { lastWritePath: null, samePathWriteStreak: 0 };
|
|
400
|
+
writeFailByPath.clear();
|
|
401
|
+
reservedWrites.clear();
|
|
294
402
|
},
|
|
295
403
|
life: 'perTurn',
|
|
296
404
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guardRail.js","sourceRoot":"","sources":["../../src/agent/guardRail.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"guardRail.js","sourceRoot":"","sources":["../../src/agent/guardRail.ts"],"names":[],"mappings":"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"}
|