export const AI_LIMITS = { dependencyFileBytes: 256 * 1024, dependencyTotalBytes: 1024 * 1024, invokeInputValueBytes: 64 * 1024, invokeInputTotalBytes: 256 * 1024, chatMessages: 80, chatMessageBytes: 32 * 1024, knowledgeDepth: 5, knowledgeFiles: 500, knowledgeReadBytes: 32 * 1024, knowledgeSearchHits: 50, knowledgeKeywordMin: 2, knowledgeKeywordMax: 64, knowledgeSnippetCharacters: 200, /** 单次工具调用回给模型的结果上限;超帽回错误信封而非截断,避免脏 JSON 进上下文。 */ toolResultBytes: 64 * 1024, /** 一次对话暴露给模型的工具总数上限——工具越多函数调用准确率越低。 */ assistantTools: 24, /** 每次对话随请求上报的「当前页面控件清单」上限;超帽截断,页面再大也不该撑爆上下文。 */ chatPageControlsBytes: 4 * 1024, /** 页面可见文字节选的字符上限:够模型看懂"这个输入框要什么格式"即可,不是搬整页。 */ chatPageTextCharacters: 1200, /** 随请求回流的页面操作结果条数上限(只带最近几条,老的没参考价值)。 */ chatPageOperations: 6, /** 单条页面操作结果的字符上限。 */ chatPageOperationCharacters: 200, } as const; export function utf8ByteLength(value: string): number { return new TextEncoder().encode(value).byteLength; }