[{"data":1,"prerenderedAt":974},["ShallowReactive",2],{"doc-\u002Fdocs\u002Fguides\u002Fhooks":3,"doc-surround-\u002Fdocs\u002Fguides\u002Fhooks":868,"doc-nav-zh":876},{"id":4,"title":5,"body":6,"description":858,"extension":859,"meta":860,"navigation":861,"order":862,"path":863,"section":864,"seo":865,"stem":866,"__hash__":867},"docs_zh\u002Fdocs\u002F02.guides\u002F21.hooks.md","Hook 自动化与拦截",{"type":7,"value":8,"toc":850},"minimark",[9,13,33,38,45,56,231,237,279,289,292,323,338,342,349,352,380,423,430,447,451,535,545,549,561,618,645,685,689,697,742,757,761,835,846],[10,11,5],"h1",{"id":12},"hook-自动化与拦截",[14,15,16,17,21,22,27,28,32],"p",{},"Hook 在内核执行流程的指定时点运行检查或通知。配置文件位于项目的 ",[18,19,20],"code",{},".lxz\u002Fhooks\u002F*.json","，也可通过 IDE 设置中的自动化／Hook 页面管理。Hook 与 ",[23,24,26],"a",{"href":25},"\u002Fdocs\u002Fguides\u002Fmcp","MCP"," 工具和 ",[23,29,31],{"href":30},"\u002Fdocs\u002Fguides\u002Fa2a","A2A"," 任务接口有不同职责。",[34,35,37],"h2",{"id":36},"_1-创建第一个-command-hook","1. 创建第一个 Command Hook",[14,39,40,41,44],{},"前置条件：本机有 Node.js，",[18,42,43],{},"node"," 位于内核进程的 PATH 中；当前项目是你信任的目录。项目 Hook 能以当前用户身份启动进程，应先检查脚本内容。",[14,46,47,48,51,52,55],{},"在项目创建 ",[18,49,50],{},".lxz\u002Fhooks\u002Fcheck-tool.json","，完整内容如下。除了默认可省略的 ",[18,53,54],{},"handler","，其他字段均需要提供。",[57,58,63],"pre",{"className":59,"code":60,"language":61,"meta":62,"style":62},"language-json shiki shiki-themes tokyo-night","{\n  \"name\": \"check-tool\",\n  \"event\": \"BeforeToolCall\",\n  \"command\": \"node\",\n  \"args\": [\".lxz\u002Fscripts\u002Fcheck-tool.cjs\"],\n  \"enabled\": true,\n  \"timeout_secs\": 5,\n  \"handler\": \"Command\"\n}\n","json","",[18,64,65,74,103,124,144,171,189,206,225],{"__ignoreMap":62},[66,67,70],"span",{"class":68,"line":69},"line",1,[66,71,73],{"class":72},"sgJMe","{\n",[66,75,77,81,85,88,91,94,98,100],{"class":68,"line":76},2,[66,78,80],{"class":79},"sAklC","  \"",[66,82,84],{"class":83},"s3R4Z","name",[66,86,87],{"class":79},"\"",[66,89,90],{"class":79},":",[66,92,93],{"class":79}," \"",[66,95,97],{"class":96},"sPY7s","check-tool",[66,99,87],{"class":79},[66,101,102],{"class":79},",\n",[66,104,106,108,111,113,115,117,120,122],{"class":68,"line":105},3,[66,107,80],{"class":79},[66,109,110],{"class":83},"event",[66,112,87],{"class":79},[66,114,90],{"class":79},[66,116,93],{"class":79},[66,118,119],{"class":96},"BeforeToolCall",[66,121,87],{"class":79},[66,123,102],{"class":79},[66,125,127,129,132,134,136,138,140,142],{"class":68,"line":126},4,[66,128,80],{"class":79},[66,130,131],{"class":83},"command",[66,133,87],{"class":79},[66,135,90],{"class":79},[66,137,93],{"class":79},[66,139,43],{"class":96},[66,141,87],{"class":79},[66,143,102],{"class":79},[66,145,147,149,152,154,156,159,161,164,166,169],{"class":68,"line":146},5,[66,148,80],{"class":79},[66,150,151],{"class":83},"args",[66,153,87],{"class":79},[66,155,90],{"class":79},[66,157,158],{"class":72}," [",[66,160,87],{"class":79},[66,162,163],{"class":96},".lxz\u002Fscripts\u002Fcheck-tool.cjs",[66,165,87],{"class":79},[66,167,168],{"class":72},"]",[66,170,102],{"class":79},[66,172,174,176,179,181,183,187],{"class":68,"line":173},6,[66,175,80],{"class":79},[66,177,178],{"class":83},"enabled",[66,180,87],{"class":79},[66,182,90],{"class":79},[66,184,186],{"class":185},"sOJ5S"," true",[66,188,102],{"class":79},[66,190,192,194,197,199,201,204],{"class":68,"line":191},7,[66,193,80],{"class":79},[66,195,196],{"class":83},"timeout_secs",[66,198,87],{"class":79},[66,200,90],{"class":79},[66,202,203],{"class":185}," 5",[66,205,102],{"class":79},[66,207,209,211,213,215,217,219,222],{"class":68,"line":208},8,[66,210,80],{"class":79},[66,212,54],{"class":83},[66,214,87],{"class":79},[66,216,90],{"class":79},[66,218,93],{"class":79},[66,220,221],{"class":96},"Command",[66,223,224],{"class":79},"\"\n",[66,226,228],{"class":68,"line":227},9,[66,229,230],{"class":72},"}\n",[14,232,233,234,236],{},"创建 ",[18,235,163],{},"：",[57,238,242],{"className":239,"code":240,"language":241,"meta":62,"style":62},"language-javascript shiki shiki-themes tokyo-night","\u002F\u002F 输入来自环境变量；stdin 已关闭，不要等待用户输入。\nconst raw = process.env.LXZ_HOOK_DATA || ''\n\u002F\u002F 演示规则：匹配到此标记时拦截。实际规则应解析对应工具的数据。\nconst blocked = raw.includes('LXZ_DEMO_BLOCK')\nprocess.stdout.write(JSON.stringify(blocked\n  ? { action: 'block', reason: '演示规则阻止了本次工具调用' }\n  : { action: 'continue' }))\n","javascript",[18,243,244,249,254,259,264,269,274],{"__ignoreMap":62},[66,245,246],{"class":68,"line":69},[66,247,248],{},"\u002F\u002F 输入来自环境变量；stdin 已关闭，不要等待用户输入。\n",[66,250,251],{"class":68,"line":76},[66,252,253],{},"const raw = process.env.LXZ_HOOK_DATA || ''\n",[66,255,256],{"class":68,"line":105},[66,257,258],{},"\u002F\u002F 演示规则：匹配到此标记时拦截。实际规则应解析对应工具的数据。\n",[66,260,261],{"class":68,"line":126},[66,262,263],{},"const blocked = raw.includes('LXZ_DEMO_BLOCK')\n",[66,265,266],{"class":68,"line":146},[66,267,268],{},"process.stdout.write(JSON.stringify(blocked\n",[66,270,271],{"class":68,"line":173},[66,272,273],{},"  ? { action: 'block', reason: '演示规则阻止了本次工具调用' }\n",[66,275,276],{"class":68,"line":191},[66,277,278],{},"  : { action: 'continue' }))\n",[14,280,281,282,284,285,288],{},"Command 的工作目录为项目根目录，",[18,283,151],{}," 是独立参数数组，不会自动通过 shell 展开。Windows 上运行 ",[18,286,287],{},".ps1"," 或内置命令时应显式指定对应解释器。脚本诊断写到 stderr，stdout 只返回一个决策 JSON。",[14,290,291],{},"可在项目目录先独立检查脚本：",[57,293,297],{"className":294,"code":295,"language":296,"meta":62,"style":62},"language-powershell shiki shiki-themes tokyo-night","$env:LXZ_HOOK_DATA = '{\"demo\":\"ok\"}'\nnode .lxz\u002Fscripts\u002Fcheck-tool.cjs\n$env:LXZ_HOOK_DATA = '{\"demo\":\"LXZ_DEMO_BLOCK\"}'\nnode .lxz\u002Fscripts\u002Fcheck-tool.cjs\nRemove-Item Env:LXZ_HOOK_DATA\n","powershell",[18,298,299,304,309,314,318],{"__ignoreMap":62},[66,300,301],{"class":68,"line":69},[66,302,303],{},"$env:LXZ_HOOK_DATA = '{\"demo\":\"ok\"}'\n",[66,305,306],{"class":68,"line":76},[66,307,308],{},"node .lxz\u002Fscripts\u002Fcheck-tool.cjs\n",[66,310,311],{"class":68,"line":105},[66,312,313],{},"$env:LXZ_HOOK_DATA = '{\"demo\":\"LXZ_DEMO_BLOCK\"}'\n",[66,315,316],{"class":68,"line":126},[66,317,308],{},[66,319,320],{"class":68,"line":146},[66,321,322],{},"Remove-Item Env:LXZ_HOOK_DATA\n",[14,324,325,326,329,330,333,334,337],{},"预期分别为 ",[18,327,328],{},"{\"action\":\"continue\"}"," 和含非空 ",[18,331,332],{},"reason"," 的 ",[18,335,336],{},"block","。独立运行验证脚本输入输出，实际挂接还需在 IDE 发起一次工具调用。",[34,339,341],{"id":340},"_2-输入决策与失败","2. 输入、决策与失败",[14,343,344,345,348],{},"Command 的项目上下文由工作目录体现；调用点还可以显式提供环境变量。",[18,346,347],{},"LXZ_HOOK_DATA"," 是当前调用点传入的原始字符串，不保证所有事件都有相同 JSON 字段，也不保证包含生命周期标识。按事件校验数据，不把它直接拼接进命令或当成可信指令。",[14,350,351],{},"异步 Command／Prompt／Mcp 决策只接受严格 JSON：",[57,353,355],{"className":59,"code":354,"language":61,"meta":62,"style":62},"{\"action\":\"continue\"}\n",[18,356,357],{"__ignoreMap":62},[66,358,359,362,364,367,369,371,373,376,378],{"class":68,"line":69},[66,360,361],{"class":72},"{",[66,363,87],{"class":79},[66,365,366],{"class":83},"action",[66,368,87],{"class":79},[66,370,90],{"class":79},[66,372,87],{"class":79},[66,374,375],{"class":96},"continue",[66,377,87],{"class":79},[66,379,230],{"class":72},[57,381,383],{"className":59,"code":382,"language":61,"meta":62,"style":62},"{\"action\":\"block\",\"reason\":\"请先完成必要检查\"}\n",[18,384,385],{"__ignoreMap":62},[66,386,387,389,391,393,395,397,399,401,403,406,408,410,412,414,416,419,421],{"class":68,"line":69},[66,388,361],{"class":72},[66,390,87],{"class":79},[66,392,366],{"class":83},[66,394,87],{"class":79},[66,396,90],{"class":79},[66,398,87],{"class":79},[66,400,336],{"class":96},[66,402,87],{"class":79},[66,404,405],{"class":79},",",[66,407,87],{"class":79},[66,409,332],{"class":83},[66,411,87],{"class":79},[66,413,90],{"class":79},[66,415,87],{"class":79},[66,417,418],{"class":96},"请先完成必要检查",[66,420,87],{"class":79},[66,422,230],{"class":72},[14,424,425,426,429],{},"不附带 Markdown、额外字段或普通文本，",[18,427,428],{},"block.reason"," 必须非空。运行时 Command 非零退出、超时、输出超限或非法决策会产生失败并拦截。stdout、stderr 各限制 1 MiB；超时至少按 1 秒处理，取消或超时会终止子进程树。需要长时间交互的命令不适合作为 Hook。",[14,431,432,434,435,438,439,442,443,446],{},[18,433,119],{}," 可以阻止随后操作；",[18,436,437],{},"AfterToolCall"," 运行时原操作已经发生，后置拦截不能撤销其副作用。旧同步 ",[18,440,441],{},"fire"," 接口中的 ",[18,444,445],{},"BLOCK:"," 文本约定不适用于这里的 IDE 异步运行时。",[34,448,450],{"id":449},"_3-当前接入的事件","3. 当前接入的事件",[452,453,454,467],"table",{},[455,456,457],"thead",{},[458,459,460,464],"tr",{},[461,462,463],"th",{},"调用链",[461,465,466],{},"已接入事件",[468,469,470,483,497],"tbody",{},[458,471,472,476],{},[473,474,475],"td",{},"工具执行",[473,477,478,480,481],{},[18,479,119],{},"、",[18,482,437],{},[458,484,485,488],{},[473,486,487],{},"Agent／RUSH",[473,489,490,480,493,496],{},[18,491,492],{},"BeforeAgentRun",[18,494,495],{},"AfterAgentRun","；开始事件也存在 fallback 路径",[458,498,499,502],{},[473,500,501],{},"RUSH 五阶段",[473,503,504,507,508,480,511,507,514,480,517,507,520,480,523,507,526,480,529,507,532],{},[18,505,506],{},"BeforeGuide","／",[18,509,510],{},"AfterGuide",[18,512,513],{},"BeforePlan",[18,515,516],{},"AfterPlan",[18,518,519],{},"BeforeCode",[18,521,522],{},"AfterCode",[18,524,525],{},"BeforeVerify",[18,527,528],{},"AfterVerify",[18,530,531],{},"BeforeLearn",[18,533,534],{},"AfterLearn",[14,536,537,538,480,541,544],{},"配置类型还包含文件写入、命令执行、提交、会话、错误等事件名称，但枚举存在不代表每个操作都已触发它。不要依赖 ",[18,539,540],{},"BeforeFileWrite",[18,542,543],{},"BeforeCommit"," 等名称实现当前版本的强制安全策略；先在实际运行链观察事件。",[34,546,548],{"id":547},"_4-其他处理器","4. 其他处理器",[14,550,551,552,554,555,557,558,560],{},"保留完整外层字段，将 ",[18,553,54],{}," 替换为下列对应对象。非命令处理器的 ",[18,556,131],{}," 可填空字符串，",[18,559,151],{}," 填空数组。",[452,562,563,578],{},[455,564,565],{},[458,566,567,570,575],{},[461,568,569],{},"处理器",[461,571,572,574],{},[18,573,54],{}," 示例",[461,576,577],{},"运行条件",[468,579,580,593,605],{},[458,581,582,585,590],{},[473,583,584],{},"HTTP",[473,586,587],{},[18,588,589],{},"{\"Http\":{\"url\":\"http:\u002F\u002F127.0.0.1:8787\u002Fhook\",\"timeout_secs\":3}}",[473,591,592],{},"HTTP 服务可访问",[458,594,595,597,602],{},[473,596,26],{},[473,598,599],{},[18,600,601],{},"{\"Mcp\":{\"server\":\"checks\",\"tool\":\"validate\",\"arguments\":\"{}\"}}",[473,603,604],{},"对应 MCP 服务和工具已配置，运行时 executor 可用，遵守工具批准",[458,606,607,610,615],{},[473,608,609],{},"Prompt",[473,611,612],{},[18,613,614],{},"{\"Prompt\":{\"prompt\":\"检查本次调用并仅返回决策 JSON\"}}",[473,616,617],{},"模型和运行时 executor 可用",[14,619,620,623,624,628,629,632,633,636,637,640,641,644],{},[18,621,622],{},"Mcp.arguments"," 是 JSON ",[625,626,627],"strong",{},"字符串","，不是对象。处理器名称区分大小写且使用外部标签，例如 ",[18,630,631],{},"Http"," 而非 ",[18,634,635],{},"type: http","。类型定义还包含 ",[18,638,639],{},"Agent","，但当前配置加载和 IDE 保存路径拒绝启用 Agent Hook；不要将它当作可用功能。",[18,642,643],{},"PluginCommand"," 由插件加载与指纹批准流程生成，不应手工伪造批准字段。",[14,646,647,648,480,650,480,653,480,655,480,658,480,661,480,664,480,667,670,671,673,674,676,677,680,681,684],{},"HTTP 使用 POST，载荷字段为 ",[18,649,110],{},[18,651,652],{},"tool_name",[18,654,151],{},[18,656,657],{},"session_id",[18,659,660],{},"run_id",[18,662,663],{},"event_id",[18,665,666],{},"sequence",[18,668,669],{},"occurred_at","；缺失字段可为 null，",[18,672,151],{}," 仍是字符串。服务正常返回 2xx 和 ",[18,675,328],{}," 或 ",[18,678,679],{},"{\"action\":\"block\",\"reason\":\"原因\"}","。HTTP 路径在网络错误、超时、非 2xx、无效响应或未知动作时记录警告并继续，即 ",[625,682,683],{},"fail-open","，不能作为强制安全边界；它的响应解析也不同于严格 Command 决策。",[34,686,688],{"id":687},"_5-保存开关与重新加载","5. 保存、开关与重新加载",[14,690,691,692,696],{},"使用实际监听地址和本地 Bearer token；获取方式见 ",[23,693,695],{"href":694},"\u002Fdocs\u002Freference\u002Fkernel-api","内核 API","。不要把 token 写进配置文件或日志。",[57,698,700],{"className":294,"code":699,"language":296,"meta":62,"style":62},"# $kernelBase、$kernelToken 使用当前内核实际值。\n$hookHeaders = @{ Authorization = \"Bearer $kernelToken\" }\n$projectRoot = (Get-Location).Path\n$rootQuery = [uri]::EscapeDataString($projectRoot)\nInvoke-RestMethod \"$kernelBase\u002Fapi\u002Fhooks\u002Flist?project_root=$rootQuery\" -Headers $hookHeaders\n$toggle = @{ name = 'check-tool'; enabled = $true; project_root = $projectRoot } | ConvertTo-Json\nInvoke-RestMethod \"$kernelBase\u002Fapi\u002Fhooks\u002Ftoggle\" -Method Post -Headers $hookHeaders -ContentType 'application\u002Fjson' -Body $toggle\nInvoke-RestMethod \"$kernelBase\u002Fapi\u002Fhooks\u002Freload?project_root=$rootQuery\" -Method Post -Headers $hookHeaders\n",[18,701,702,707,712,717,722,727,732,737],{"__ignoreMap":62},[66,703,704],{"class":68,"line":69},[66,705,706],{},"# $kernelBase、$kernelToken 使用当前内核实际值。\n",[66,708,709],{"class":68,"line":76},[66,710,711],{},"$hookHeaders = @{ Authorization = \"Bearer $kernelToken\" }\n",[66,713,714],{"class":68,"line":105},[66,715,716],{},"$projectRoot = (Get-Location).Path\n",[66,718,719],{"class":68,"line":126},[66,720,721],{},"$rootQuery = [uri]::EscapeDataString($projectRoot)\n",[66,723,724],{"class":68,"line":146},[66,725,726],{},"Invoke-RestMethod \"$kernelBase\u002Fapi\u002Fhooks\u002Flist?project_root=$rootQuery\" -Headers $hookHeaders\n",[66,728,729],{"class":68,"line":173},[66,730,731],{},"$toggle = @{ name = 'check-tool'; enabled = $true; project_root = $projectRoot } | ConvertTo-Json\n",[66,733,734],{"class":68,"line":191},[66,735,736],{},"Invoke-RestMethod \"$kernelBase\u002Fapi\u002Fhooks\u002Ftoggle\" -Method Post -Headers $hookHeaders -ContentType 'application\u002Fjson' -Body $toggle\n",[66,738,739],{"class":68,"line":208},[66,740,741],{},"Invoke-RestMethod \"$kernelBase\u002Fapi\u002Fhooks\u002Freload?project_root=$rootQuery\" -Method Post -Headers $hookHeaders\n",[14,743,744,745,748,749,752,753,756],{},"保存接口为 POST ",[18,746,747],{},"\u002Fapi\u002Fhooks\u002Fsave","，请求为 ",[18,750,751],{},"{ \"hook\": \u003C完整配置对象>, \"file\": \"check-tool.json\", \"project_root\": \"项目绝对路径\" }","。开关和保存会写入项目文件。reload 返回加载结果，不能保证替换已经在运行的引擎实例；改动后启动新任务验证。部分错误通过响应中的 ",[18,754,755],{},"success: false"," 表达，不能仅检查 HTTP 200。",[34,758,760],{"id":759},"_6-排错","6. 排错",[452,762,763,773],{},[455,764,765],{},[458,766,767,770],{},[461,768,769],{},"现象",[461,771,772],{},"检查",[468,774,775,787,795,803,811,819,827],{},[458,776,777,780],{},[473,778,779],{},"Hook 没运行",[473,781,782,783,786],{},"实际项目根目录、",[18,784,785],{},".lxz\u002Fhooks","、enabled、事件是否接入、新任务是否读取配置",[458,788,789,792],{},[473,790,791],{},"配置失败并拦截",[473,793,794],{},"JSON 必填字段、handler 标签、Agent 限制；修复文件后重新加载",[458,796,797,800],{},[473,798,799],{},"进程无法启动",[473,801,802],{},"内核 PATH、Node 安装、相对脚本路径、解释器及文件权限",[458,804,805,808],{},[473,806,807],{},"一直超时",[473,809,810],{},"是否误读 stdin、等待交互、网络请求缺少超时",[458,812,813,816],{},[473,814,815],{},"非法决策",[473,817,818],{},"stdout 是否有日志、是否输出严格 JSON、reason 是否非空",[458,820,821,824],{},[473,822,823],{},"HTTP 故障仍继续",[473,825,826],{},"当前 HTTP 是 fail-open；检查服务日志和 hook 警告",[458,828,829,832],{},[473,830,831],{},"后置 Hook 拦截后文件仍改变",[473,833,834],{},"后置时原操作已完成，使用已接入的前置事件做检查",[14,836,837,840,841,840,844],{},[23,838,839],{"href":30},"A2A 指南"," · ",[23,842,843],{"href":25},"MCP 配置",[23,845,695],{"href":694},[847,848,849],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sgJMe, html code.shiki .sgJMe{--shiki-default:#9ABDF5}html pre.shiki code .sAklC, html code.shiki .sAklC{--shiki-default:#89DDFF}html pre.shiki code .s3R4Z, html code.shiki .s3R4Z{--shiki-default:#7AA2F7}html pre.shiki code .sPY7s, html code.shiki .sPY7s{--shiki-default:#9ECE6A}html pre.shiki code .sOJ5S, html code.shiki .sOJ5S{--shiki-default:#FF9E64}",{"title":62,"searchDepth":76,"depth":76,"links":851},[852,853,854,855,856,857],{"id":36,"depth":76,"text":37},{"id":340,"depth":76,"text":341},{"id":449,"depth":76,"text":450},{"id":547,"depth":76,"text":548},{"id":687,"depth":76,"text":688},{"id":759,"depth":76,"text":760},"配置项目 Hook、读取事件输入、返回执行决策并排查失败","md",{},true,21,"\u002Fdocs\u002Fguides\u002Fhooks","功能指南",{"title":5,"description":858},"docs\u002F02.guides\u002F21.hooks","ki3xLnN7su7lZjWn5ra9dPD1nUgNxBQGHLMA0K45OMM",[869,872],{"title":870,"path":30,"stem":871,"children":-1},"A2A 连接与任务协作","docs\u002F02.guides\u002F20.a2a",{"title":873,"path":874,"stem":875,"children":-1},"支持的模型","\u002Fdocs\u002Fmodels-billing\u002Fmodels","docs\u002F03.models-billing\u002F12.models",[877],{"title":878,"path":879,"stem":880,"children":881,"page":903},"Docs","\u002Fdocs","docs",[882,904,937,951],{"title":883,"path":884,"stem":885,"children":886,"page":903},"快速上手","\u002Fdocs\u002Fgetting-started","docs\u002F01.getting-started",[887,891,895,899],{"title":888,"path":889,"stem":890},"安装与下载","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F01.getting-started\u002F01.installation",{"title":892,"path":893,"stem":894},"注册与登录","\u002Fdocs\u002Fgetting-started\u002Fregister-login","docs\u002F01.getting-started\u002F02.register-login",{"title":896,"path":897,"stem":898},"首次配置","\u002Fdocs\u002Fgetting-started\u002Ffirst-setup","docs\u002F01.getting-started\u002F03.first-setup",{"title":900,"path":901,"stem":902},"从 VS Code \u002F Cursor 手动迁移","\u002Fdocs\u002Fgetting-started\u002Fmigrate-from-vscode","docs\u002F01.getting-started\u002F04.migrate-from-vscode",false,{"title":864,"path":905,"stem":906,"children":907,"page":903},"\u002Fdocs\u002Fguides","docs\u002F02.guides",[908,912,916,920,924,927,931,935,936],{"title":909,"path":910,"stem":911},"AI 对话与内联编辑","\u002Fdocs\u002Fguides\u002Fai-chat","docs\u002F02.guides\u002F05.ai-chat",{"title":913,"path":914,"stem":915},"RUSH 深度任务","\u002Fdocs\u002Fguides\u002Frush","docs\u002F02.guides\u002F06.rush",{"title":917,"path":918,"stem":919},"FIM 智能补全","\u002Fdocs\u002Fguides\u002Ffim-completion","docs\u002F02.guides\u002F07.fim-completion",{"title":921,"path":922,"stem":923},"语义代码图谱","\u002Fdocs\u002Fguides\u002Fcode-graph","docs\u002F02.guides\u002F08.code-graph",{"title":925,"path":25,"stem":926},"MCP 工具与配置","docs\u002F02.guides\u002F09.mcp",{"title":928,"path":929,"stem":930},"调试","\u002Fdocs\u002Fguides\u002Fdebugging","docs\u002F02.guides\u002F10.debugging",{"title":932,"path":933,"stem":934},"终端与沙箱","\u002Fdocs\u002Fguides\u002Fterminal","docs\u002F02.guides\u002F11.terminal",{"title":870,"path":30,"stem":871},{"title":5,"path":863,"stem":866},{"title":938,"path":939,"stem":940,"children":941,"page":903},"模型与计费","\u002Fdocs\u002Fmodels-billing","docs\u002F03.models-billing",[942,943,947],{"title":873,"path":874,"stem":875},{"title":944,"path":945,"stem":946},"套餐与配额","\u002Fdocs\u002Fmodels-billing\u002Fplans-quota","docs\u002F03.models-billing\u002F13.plans-quota",{"title":948,"path":949,"stem":950},"自带 API Key（BYOK）","\u002Fdocs\u002Fmodels-billing\u002Fbyok","docs\u002F03.models-billing\u002F14.byok",{"title":952,"path":953,"stem":954,"children":955,"page":903},"参考与 FAQ","\u002Fdocs\u002Freference","docs\u002F04.reference",[956,960,964,966,970],{"title":957,"path":958,"stem":959},"快捷键","\u002Fdocs\u002Freference\u002Fshortcuts","docs\u002F04.reference\u002F15.shortcuts",{"title":961,"path":962,"stem":963},"配置与数据目录","\u002Fdocs\u002Freference\u002Fconfiguration","docs\u002F04.reference\u002F16.configuration",{"title":695,"path":694,"stem":965},"docs\u002F04.reference\u002F17.kernel-api",{"title":967,"path":968,"stem":969},"常见问题","\u002Fdocs\u002Freference\u002Ffaq","docs\u002F04.reference\u002F18.faq",{"title":971,"path":972,"stem":973},"云端 REST API","\u002Fdocs\u002Freference\u002Fcloud-api","docs\u002F04.reference\u002F19.cloud-api",1793596426247]