@codex-ultra/cxu 0.2.32 → 0.2.33
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/dist/cli.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/server-bundle/index.js +8 -4
package/package.json
CHANGED
package/server-bundle/index.js
CHANGED
|
@@ -270,7 +270,7 @@ command = "node"
|
|
|
270
270
|
args = [${JSON.stringify(e)}]
|
|
271
271
|
enabled = true
|
|
272
272
|
`;m=m?`${m.trimEnd()}
|
|
273
|
-
${o}`:o,await vi(b,m,"utf8"),n.push(`grok:${b}`)}}}catch{}try{let a=le(c,".config","opencode"),b=le(a,"opencode.json");if(Ke(a)){let m={};if(Ke(b))try{m=JSON.parse(await gi(b,"utf8")),(!m||typeof m!="object"||Array.isArray(m))&&(m={})}catch{m={}}let o=ZP(m,e);await vi(b,JSON.stringify(o,null,2),"utf8"),n.push(`opencode:${b}`)}}catch{}}return{scriptPath:e,installed:Ke(e),clientsConfigured:n}}var nl="sa-vm",oC="<!-- generated-by-codex-ultra:sa-vm -->",ZC="BUN_TS_CHEATSHEET.md",LR="jev",rC="<!-- generated-by-codex-ultra:jev -->";function iC(I,l){let e=I?.jevChoose!==void 0||I?.jevChecklist!==void 0||I?.jevEvaluate!==void 0||I?.jevThinking!==void 0||I?.jevRedteam!==void 0||I?.jevRank!==void 0||I?.jevScope!==void 0||I?.jevConsistency!==void 0||I?.jevDone!==void 0||I?.jevDiagnose!==void 0||I?.jevEdgeCases!==void 0||I?.jevBlastRadius!==void 0,n=l===!0;return{showJevChoose:e?I?.jevChoose===!0:n,showJevChecklist:e?I?.jevChecklist===!0:n,showJevEvaluate:I?.jevEvaluate===!0,showJevThinking:e?I?.jevThinking===!0:n,showJevRedteam:e?I?.jevRedteam===!0:n,showJevRank:e?I?.jevRank===!0:n,showJevScope:e?I?.jevScope===!0:n,showJevConsistency:e?I?.jevConsistency===!0:n,showJevDone:e?I?.jevDone===!0:n,showJevDiagnose:e?I?.jevDiagnose===!0:n,showJevEdgeCases:e?I?.jevEdgeCases===!0:n,showJevBlastRadius:e?I?.jevBlastRadius===!0:n}}function iP(I,l){let e=iC(I,l),n=[];return e.showJevChoose&&n.push("jev_choose"),e.showJevChecklist&&n.push("jev_checklist"),e.showJevEvaluate&&n.push("jev_evaluate"),e.showJevThinking&&n.push("jev_thinking"),e.showJevRedteam&&n.push("jev_redteam"),e.showJevRank&&n.push("jev_rank"),e.showJevScope&&n.push("jev_scope"),e.showJevConsistency&&n.push("jev_consistency"),e.showJevDone&&n.push("jev_done"),e.showJevDiagnose&&n.push("jev_diagnose"),e.showJevEdgeCases&&n.push("jev_edge_cases"),e.showJevBlastRadius&&n.push("jev_blast_radius"),n}function bC(I,l,e){if(l?.trim()){let n=l.trim().replace(/[^A-Za-z0-9._-]/g,"_");return tl(I,".codex-ultra","thread-skills",n,nl,"SKILL.md")}return e==="claude"?tl(I,".claude","skills",nl,"SKILL.md"):e==="codex"?tl(I,".codex","skills",nl,"SKILL.md"):e==="agy"?tl(I,".gemini","skills",nl,"SKILL.md"):e==="grok"?tl(I,".grok","skills",nl,"SKILL.md"):e==="opencode"?tl(I,".opencode","skills",nl,"SKILL.md"):e==="pi"?tl(I,".pi","skills",nl,"SKILL.md"):tl(I,".agents","skills",nl,"SKILL.md")}function WP(I,l){if(l?.trim()){let t=l.trim();return aC(t)?Ei(t):Ei(I,t)}let e=tl(jc(),"sala");if(Lb(tl(e,"dist","index.html")))return e;let n=process.env.CODEX_UI_SA_VM_SALA_DIR?.trim()||tl(process.cwd(),"desktop-resources","sa-vm","sala");return aC(n)?Ei(n):Ei(I,n)}function uP(I={}){let l=I.policy,e=l?.tools,n=l?.execution,t=xn(e),G=I.enabled!==!1,c=(I.enabled===!1||I.enabled!==!0&&!e?.replaceExec)&&t,d=c||G?"\u5DF2\u5F00\u542F":"\u672A\u5F00\u542F",a=l!==void 0,b=a?e?.replaceRead===!0||e?.readFiles===!0:!0,m=a?e?.replaceWrite===!0||e?.editFiles===!0:!0,o=a?e?.replaceApplyPatch===!0||e?.applyPatch===!0:!0,W=n?.javascript===!0,s=n?.python===!0,Z=a?e?.clearToolHistory===!0:!1,r=a?e?.findReferences===!0:!1,u=a?e?.renameSymbol===!0:!1,N=a?e?.fileOutline===!0:!1,h=a?e?.moveWithImports===!0:!1,Y=a?e?.findDefinition===!0:!1,R=a?e?.extractToFile===!0:!1,V=a?e?.addImport===!0:!1,F=a?e?.getDiagnostics===!0:!1,H=a?e?.organizeImports===!0:!1,g=a?e?.analyzeScope===!0:!1,E=a?e?.codeGraph!==!1:!0,y=a?!!(l?.http?.allow&&l.http.allow.length>0):!1,v=[];o&&v.push("apply_patch"),m&&v.push("edit_file","write_file","delete_file","safe_delete","move_file","copy_file"),b&&v.push("read_file","read_lines","read_many","read_file_tail","count_lines","file_info"),v.push("find_files","list_dir","grep_search","grep_search_async"),v.push("git_status","git_diff"),r&&v.push("find_references","find_implementations"),N&&v.push("file_outline","workspace_outline","repo_map"),E&&v.push("code_graph","relation_graph","symbol_graph"),u&&v.push("rename_symbol"),h&&v.push("move_file_with_imports"),Y&&v.push("find_definition"),R&&v.push("extract_to_file"),V&&v.push("add_import"),F&&v.push("get_diagnostics","workspace_diagnostics","verify_loop"),H&&v.push("organize_imports"),g&&v.push("analyze_scope"),W&&v.push("run_js"),s&&v.push("run_py"),y&&v.push("http_fetch");let J=(l?.process?.bunProfiles??[]).length>0;J&&v.push("run_project_check");let k=l?.process?.bun===!0||typeof l?.process?.bun=="object"&&l.process.bun!==null&&l.process.bun.enabled===!0;k&&v.push("run_bun"),Z&&v.push("clear_tool_history");let z=b||m;z&&v.push("save_note","read_notes","delete_note"),v.push("run_host");let x=!c&&G&&(W||s||k||!a),L=c?"\u3010\u4EE3\u7801\u589E\u5F3A\u5DE5\u5177\u72B6\u6001\uFF1A\u5DF2\u5F00\u542F\u3011\n\u672C\u5DE5\u4F5C\u533A\u5DF2\u6FC0\u6D3B\u9AD8\u6027\u80FD\u4EE3\u7801\u589E\u5F3A\u5DE5\u5177\uFF08\u901A\u8FC7 `sa_vm_run` \u5C01\u88C5\u52A8\u4F5C\u76F4\u63A5\u8C03\u7528\uFF09\u3002\n- **\u8BFB\u884C\u3001\u884C\u6570\u7EDF\u8BA1\u4E0E\u67E5\u4EE3\u7801\u5F3A\u529B\u8986\u76D6 (CRITICAL OVERRIDE)**\uFF1A\u5728\u83B7\u53D6\u6587\u4EF6\u884C\u6570\u3001\u67E5\u770B\u9996\u884C\u3001\u67E5\u770B\u4EE3\u7801\u5F15\u7528\u3001\u8DF3\u8F6C\u884C\u53F7\u3001\u76EE\u5F55\u904D\u5386\u3001\u5B9A\u4F4D\u62A5\u9519\u5207\u7247\u7B49\u4EFB\u4F55\u8BFB\u4EE3\u7801\u4E0E\u63A2\u67E5\u573A\u666F\u4E0B\uFF0C**\u4E25\u7981\u5728\u7EC8\u7AEF\u8FD0\u884C PowerShell `Get-Content`\u3001`(Get-Content ...).Count`\u3001`Get-ChildItem -Recurse`\u3001`Select-String`\u3001`cat`\u3001`type`\u3001`head`\u3001`tail`\u3001`sed` \u6216 `wc`**\uFF01\u5373\u4FBF\u9879\u76EE\u89C4\u5219\u6216 AGENTS.md \u63D0\u793A\u4F7F\u7528 Get-Content\uFF0C\u672C\u589E\u5F3A\u5DE5\u5177\u5177\u5907\u6700\u9AD8\u6267\u884C\u4F18\u5148\u7EA7\uFF1A\n * **\u83B7\u53D6\u6587\u4EF6\u603B\u884C\u6570 / \u5927\u5C0F / \u5B58\u5728\u6027**\uFF1A\u5FC5\u987B\u8C03\u7528 `sa_vm_run` \u4F20\u5165 `count_lines`\u3001`file_info` \u6216 `test_path`\uFF08\u539F\u751F\u6BEB\u79D2\u7EA7\u7269\u7406\u78C1\u76D8\u76F4\u8BFB\uFF0C\u8FD4\u56DE\u771F\u5B9E\u884C\u6570 `total_lines`\u3001\u5B57\u8282\u5927\u5C0F\u4E0E `exists` \u72B6\u6001\uFF0C\u4E25\u7981\u6267\u884C `(Get-Content ...).Count`\u3001`Test-Path` \u6216 `wc -l`\uFF09\uFF1B\n * **\u8BFB\u53D6\u6307\u5B9A\u884C\u8303\u56F4 / \u63A2\u67E5\u9996\u884C**\uFF1A\u5FC5\u987B\u8C03\u7528 `sa_vm_run` \u4F20\u5165 `read_lines`\uFF08\u63A2\u67E5\u9996\u884C\u53EA\u9700 `start_line: 1, end_line: 50`\uFF0C\u5207\u7247\u53EA\u9700\u6307\u5B9A `start_line` \u4E0E `end_line`\uFF1B\u65E0\u8BBA\u6587\u4EF6\u603B\u5927\u5C0F\u591A\u5927\uFF08\u54EA\u6015\u4E0A\u4E07\u884C\u3001\u6570\u5146\u5B57\u8282\uFF09\uFF0C`read_lines` \u5B9A\u5411\u7CBE\u8BFB\u6C38\u8FDC\u4E0D\u53D7\u5927\u6587\u4EF6\u4E0A\u4E0B\u6587\u9650\u5236\u62E6\u622A\uFF0C\u7EDD\u4E0D\u89E6\u53D1\u62E6\u622A\uFF01\uFF09\uFF1B\n * **\u591A\u5C42\u76EE\u5F55\u904D\u5386\u4E0E\u6587\u4EF6\u53D1\u73B0**\uFF1A\u5FC5\u987B\u8C03\u7528 `sa_vm_run` \u4F20\u5165 `list_dir`\uFF08\u539F\u751F\u652F\u6301 `depth: 2` \u6216\u66F4\u591A\u5C42\u7EA7\uFF0C\u5E26 `max_entries` \u63A7\u5236\uFF0C\u6BEB\u79D2\u7EA7\u8FD4\u56DE\u76EE\u5F55\u6811\uFF0C\u4E25\u7981\u8FD0\u884C `Get-ChildItem -Recurse`\uFF09\uFF1B\n * **\u5355\u6587\u4EF6\u6216\u591A\u6587\u4EF6\u6587\u672C\u641C\u7D22**\uFF1A\u5FC5\u987B\u8C03\u7528 `sa_vm_run` \u4F20\u5165 `grep_search`\uFF08\u4E0D\u4EC5\u652F\u6301\u5168\u76EE\u5F55\u641C\u7D22\uFF0C\u8FD8\u652F\u6301\u76F4\u63A5\u4F20\u5165\u5355\u4E2A\u5177\u4F53\u6587\u4EF6 `path: \"foo.ts\", query: \"pattern\"`\uFF0C\u4E25\u7981\u8FD0\u884C `Get-Content ... | Select-String`\uFF09\uFF1B\n * **\u5B89\u5168\u9605\u8BFB\u6574\u6587\u4EF6**\uFF1A\u5FC5\u987B\u8C03\u7528 `sa_vm_run` \u4F20\u5165 `read_file`\uFF08\u81EA\u5E26 max_tokens \u9884\u7B97\u4E0E\u9632\u7206\u6D41\u622A\u65AD\uFF09\u3002\n- **\u7269\u7406\u78C1\u76D8\u76F4\u8BFB\u4E0E\u96F6\u7F13\u5B58\u4FDD\u8BC1 (ZERO CACHE)**\uFF1A`sa_vm_run` \u5DE5\u5177\uFF08`find_files`\u3001`list_dir`\u3001`file_info`\u3001`test_path`\u3001`read_file`\u3001`grep_search`\uFF09\u76F4\u63A5\u901A\u8FC7\u8FDB\u7A0B\u5185 Node.js \u539F\u751F\u5E95\u5C42\u7CFB\u7EDF\u8C03\u7528\u8BBF\u95EE\u7269\u7406\u78C1\u76D8\uFF0C**\u7EDD\u5BF9\u96F6\u7F13\u5B58\u3001\u65E0\u7D22\u5F15\u5EF6\u8FDF\u3001\u65E0\u9648\u65E7\u5143\u6570\u636E**\u3002\u82E5 `find_files` \u627E\u5230\u4E86\u6587\u4EF6\uFF0C\u8BE5\u6587\u4EF6 100% \u5B58\u5728\u4E8E\u8BE5\u7269\u7406\u8DEF\u5F84\uFF01\u5F53\u7EC8\u7AEF\u547D\u4EE4\u62A5\u9519\u627E\u4E0D\u5230\u6587\u4EF6\u65F6\uFF0C\u539F\u56E0 100% \u662F\u7EC8\u7AEF\u624B\u52A8 `cd` \u8F93\u9519\u4E86\u8DEF\u5F84\uFF0C\u7EDD\u975E\u7F13\u5B58\u3001\u9690\u85CF\u6587\u4EF6\u6216 NTFS Junction\uFF01\n- **\u7981\u6B62\u7EC8\u7AEF\u624B\u52A8 cd (NO MANUAL CD)**\uFF1A\u6240\u6709\u7EC8\u7AEF\u547D\u4EE4\u4E0E `sa_vm_run` \u5DE5\u5177\u5747\u76F4\u63A5\u5728\u5DE5\u4F5C\u533A\u6839\u76EE\u5F55\u6267\u884C\u3002\u4E25\u7981\u5728\u7EC8\u7AEF\u8FD0\u884C `cd <path>`\uFF0C\u624B\u52A8\u5207\u6362\u76EE\u5F55\u6781\u6613\u9057\u6F0F\u5C42\u7EA7\u5BFC\u81F4\u8DEF\u5F84\u6F02\u79FB\u4E0E\u8BEF\u5224\u3002\u59CB\u7EC8\u76F8\u5BF9\u4E8E\u5DE5\u4F5C\u533A\u6839\u76EE\u5F55\u6267\u884C\u547D\u4EE4\u3002\n- **\u4E25\u7981\u7EC8\u7AEF\u7F16\u5199 for-in / foreach \u590D\u6742\u5FAA\u73AF (NO BATCH FOR-IN LOOPS)**\uFF1A\u4E25\u7981\u5728\u7EC8\u7AEF\uFF08PowerShell \u6216 cmd\uFF09\u4E2D\u7F16\u5199 `for ... in`\u3001`for /f`\u3001`for /r`\u3001`foreach`\u3001\u7BA1\u9053 ForEach-Object` \u5FAA\u73AF\u6765\u904D\u5386\u6587\u4EF6\u3001\u641C\u7D22\u6A21\u5F0F\u3001\u7EDF\u8BA1\u884C\u6570\u6216\u6279\u91CF\u66FF\u6362\u6587\u672C\uFF01\u7EC8\u7AEF\u5FAA\u73AF\u6781\u6613\u5F15\u53D1\u4E25\u91CD\u95EE\u9898\uFF1A\n * Windows cmd/PowerShell \u590D\u6742\u7684\u5F15\u53F7\u8F6C\u4E49\u4E0E\u5D4C\u5957\u7834\u574F\uFF1B\n * \u7F16\u7801\u707E\u96BE\uFF1APowerShell `-replace` \u4E0E\u91CD\u5B9A\u5411\u5199\u5165\u9ED8\u8BA4\u662F ANSI \u6216\u5E26 BOM \u7684 UTF-16\uFF0C\u4F1A\u5F7B\u5E95\u7834\u574F\u6E90\u7801 UTF-8 \u7F16\u7801\uFF01\n * \u7EC8\u7AEF\u8F93\u51FA\u6EA2\u51FA\u4E0E\u4E0A\u4E0B\u6587\u5931\u63A7\u3002\n \u5BF9\u7B49\u66FF\u4EE3\u65B9\u6848\uFF1A\n * \u591A\u6587\u4EF6/\u5168\u76EE\u5F55\u5185\u5BB9\u641C\u7D22\uFF1A\u8C03\u7528 `sa_vm_run` \u7684 `grep_search`\uFF08\u6307\u5B9A `pattern: \"*.ext\"` \u6216 `dir`\uFF09\u6216 `grep_search_async`\uFF08\u652F\u6301\u6279\u91CF query \u6570\u7EC4\uFF09\uFF1B\n * \u6279\u91CF\u6587\u4EF6\u884C\u6570/\u5927\u5C0F\u63A2\u67E5\uFF1A\u8C03\u7528 `sa_vm_run` \u7684 `list_dir({ depth: 2 })` \u6216\u5BF9\u76EE\u6807\u6587\u4EF6\u8C03\u7528 `count_lines`\uFF1B\n * \u6279\u91CF\u6587\u4EF6\u5199\u5165\u6216\u66FF\u6362\uFF1A\u8C03\u7528 `sa_vm_run` \u7684 `parallel: [ { action: \"edit_file\", ... } ]`\uFF08\u4E00\u6B21\u6700\u591A 32 \u4E2A\u539F\u5B50\u4EFB\u52A1\u5E76\u81EA\u52A8\u5907\u4EFD\uFF09\u6216 `rename_symbol` / `apply_patch`\uFF1B\n * \u6279\u91CF\u6D4B\u8BD5\uFF1A\u5148\u7528 `find_files` \u627E\u51FA\u7528\u4F8B\u6E05\u5355\uFF0C\u518D\u9488\u5BF9\u6027\u6267\u884C\u6D4B\u8BD5\u547D\u4EE4\uFF0C\u4E25\u7981\u4F7F\u7528 shell \u5FAA\u73AF\u76F2\u8DD1\u3002\n- **\u67E5\u5E2E\u52A9/\u8DD1\u6784\u5EFA\u53EA\u8BB8 run_host(+tail_lines)\uFF0C\u7981 cmd /c\u30012>&1\u3001Select/tail/findstr\u3001> file\u3001cd**\uFF1A\u6267\u884C\u5916\u90E8\u4E8C\u8FDB\u5236\uFF08bun\u3001node\u3001python\u3001zig \u6216\u5DE5\u4F5C\u533A\u7A0B\u5E8F\uFF09\u5FC5\u987B\u8C03\u7528 `run_host` \u7ED3\u6784\u5316\u53C2\u6570\u8C03\u7528\uFF0C\u4E25\u7981\u5305\u88C5 `cmd /c`\u3001\u91CD\u5B9A\u5411 `> file` \u6216\u4F7F\u7528\u7BA1\u9053\u3002`--help` \u4E0E\u7248\u672C\u67E5\u8BE2\u81EA\u52A8\u4EAB\u6709\u670D\u52A1\u7AEF\u5185\u5B58\u7F13\u5B58\uFF080ms \u54CD\u5E94\u3001\u4E0D\u5360\u8FDB\u7A0B\u69FD\uFF09\u3002\n- **\u65E0\u4F9D\u8D56 run_host \u5FC5\u987B\u5E76\u884C (INDEPENDENT RUN_HOST MUST BE PARALLEL)**\uFF1A\u591A\u4E2A\u65E0\u76F8\u4E92\u4F9D\u8D56\u7684 `run_host` \u547D\u4EE4\u3001\u6216 `run_host` \u4E0E\u53EA\u8BFB\u63A2\u67E5\u5DE5\u5177\uFF08`grep_search`, `list_dir`, `read_lines`, `get_diagnostics`\uFF09\uFF0C\u5FC5\u987B\u4F7F\u7528 `parallel` \u6279\u91CF\u5E76\u53D1\u4E0B\u53D1\uFF1B\u540C\u6279\u5185\u4E25\u7981\u8BFB\u53D6\u672C\u6279\u6784\u5EFA\u8F93\u51FA\u4EA7\u7269\uFF08\u6709\u4F9D\u8D56\u5FC5\u987B\u62C6\u5206\u4E3A\u4E32\u884C\u4E24\u6279\uFF0C\u540C\u6279\u8BFB\u5199\u51B2\u7A81\u76F4\u63A5\u6253\u56DE\uFF09\u3002\n- **\u540C\u4E49\u591A\u67E5\u5FC5\u987B\u8D70 grep_search_async \u4E00\u6B21\u6279\u91CF\uFF0C\u7981\u9010\u6587\u4EF6\u9010\u8BCD\u653E\u5BBD\u91CD\u67E5 (BATCH SYNONYM SEARCH)**\uFF1A\u5F53\u9700\u8981\u8DE8\u6587\u4EF6\u68C0\u7D22\u4E00\u7EC4\u76F8\u5173\u7B26\u53F7\u6216\u540C\u4E49\u8BCD\uFF08\u4F8B\u5982 `planAsyncLinearAwaitContinuation`\u3001`AsyncLinearAwaitPlan`\u3001`genFuncDeclNamedImpl` \u7B49\uFF09\u65F6\uFF0C**\u4E25\u7981\u5728\u7EC8\u7AEF\u4E2D\u9010\u4E2A\u6587\u4EF6\u8C03\u7528 `Select-String` \u6216\u53CD\u590D\u5FAE\u8C03 pattern \u7528 `rg` \u8BD5\u63A2**\uFF01\u5FC5\u987B\u76F4\u63A5\u8C03\u7528\u4E00\u6B21 `sa_vm_run({ action: 'grep_search_async', dir: 'src', pattern: '*.zig', queries: ['query1', 'query2', 'query3'], max_matches: 30 })`\uFF0C\u5E95\u5C42\u5E76\u53D1\u6267\u884C\u5E76\u5728\u6BEB\u79D2\u7EA7\u5B8C\u6210\u805A\u5408\uFF0C\u4E00\u6B21\u6536\u655B\u3002\n- **\u7B26\u53F7\u5B9A\u4F4D\u4E25\u7981\u76F2\u641C\u653E\u5BBD\u98DF\u8C31 (SYMBOL RESOLUTION OVER BLIND GREP)**\uFF1A\u4E25\u7981\u51ED\u65E7\u8BB0\u5FC6\u6216 handoff \u4E2D\u7684\u9648\u65E7/\u5E7B\u89C9\u7B26\u53F7\u5168\u76D8\u76F2\u76EE grep\uFF1B\u4E00\u65E6\u9996\u9009\u7B26\u53F7\u641C\u7D22\u4E3A\u7A7A\uFF0C**\u4E25\u7981\u81EA\u52A8\u653E\u5BBD\u4E3A\u901A\u7528\u8BCD**\uFF08\u5982\u5C06 `LinearAwait` \u653E\u5BBD\u4E3A `linear|MAX_AWAITS` \u4F1A\u5BFC\u81F4\u5168\u91CF\u8BEF\u62A5\u5783\u573E\u6CDB\u6EE5\uFF09\uFF01\n * **\u6B63\u786E\u98DF\u8C31\u4E09\u6B65\u66F2**\uFF1A\n 1. \u7ED3\u6784\u5927\u7EB2\u5B9A\u771F\u540D\uFF1A`sa_vm_run({ action: 'file_outline', path: 'target.zig' })` \u67E5\u770B\u771F\u5B9E\u7ED3\u6784\u5927\u7EB2\uFF0C\u83B7\u53D6\u51C6\u786E\u7684\u5F53\u524D\u7B26\u53F7\u771F\u540D\uFF1B\n 2. \u5B9A\u4E49\u4E0E\u5F15\u7528\u76F4\u8FBE\uFF1A`sa_vm_run({ action: 'find_definition', symbol: 'real_symbol' })` \u6216 `find_references({ symbol: 'real_symbol' })` \u7CBE\u786E\u5B9A\u4F4D\u5B9A\u4E49\u4E0E\u5F15\u7528\u884C\u53F7\uFF1B\n 3. \u5B9A\u5411\u5207\u7247\u7CBE\u8BFB\uFF1A`sa_vm_run({ action: 'read_lines', path: 'target.zig', start_line: X-40, end_line: X+40 })` \u56F4\u7ED5\u547D\u4E2D\u70B9\u7CBE\u8BFB\u524D\u540E 80 \u884C\u4E0A\u4E0B\u6587\uFF01\n * \u82E5\u7B2C\u4E00\u8F6E\u7B26\u53F7\u5B9A\u4F4D\u4E3A\u7A7A\uFF0C**\u7ACB\u5373\u505C\u6B62\u76F2\u641C**\uFF0C\u76F4\u63A5\u901A\u8FC7 `file_outline` \u786E\u8BA4\u7B26\u53F7\u540D\uFF0C\u7EDD\u4E0D\u5728\u7EC8\u7AEF\u53CD\u590D\u653E\u5BBD\u6B63\u5219\u7206\u7834\uFF01\n- **\u7EC8\u7AEF\u5B8C\u5168\u81EA\u7531\u4E0E\u8FDB\u7A0B\u6267\u884C\u4FDD\u969C**\uFF1A\u7CFB\u7EDF\u539F\u751F\u7EC8\u7AEF\uFF08PowerShell, bash, git, npm, bun, cargo, zig \u7B49\uFF09\u4FDD\u6301\u5B8C\u5168\u5F00\u653E\u3002\u7F16\u8BD1\u6784\u5EFA\u3001\u5355\u5143\u6D4B\u8BD5\u3001\u8FD0\u884C\u4E8C\u8FDB\u5236\u7A0B\u5E8F\u662F\u5408\u6CD5\u7684\u7EC8\u7AEF\u547D\u4EE4\uFF0C\u76F4\u63A5\u88F8\u8DD1\u4E8C\u8FDB\u5236\uFF08\u5982 `bun test ...`\u3001`zig build`\uFF09\uFF0C**\u4E25\u7981\u4F7F\u7528 `2>$null` / `>nul` \u6291\u5236\u9519\u8BEF\u6216\u4F7F\u7528 `| Select-Object -First/-Last` \u7BA1\u9053\u622A\u65AD\u5305\u88C5**\uFF01\u5982\u9700\u67E5\u9605\u6D4B\u8BD5\u65E5\u5FD7\u3001\u957F\u8F93\u51FA\u6216\u751F\u6210\u7684\u6587\u4EF6\u4EA7\u7269\uFF0C\u4F7F\u7528 `sa_vm_run({ action: 'read_file_tail' })` \u6216 `read_lines` \u67E5\u770B\u3002\n- **\u4EA7\u7269\u751F\u6210\u540E\u7684\u5FC5\u9009\u8F6C\u6362 (Workflow Transition)**\uFF1A\u4E00\u65E6\u5728\u7EC8\u7AEF\u6267\u884C\u547D\u4EE4\u751F\u6210\u4E86\u7F16\u8BD1/\u6D4B\u8BD5/\u53CD\u6C47\u7F16\u4EA7\u7269\u6587\u4EF6\uFF08\u5982 `.out`, `.log`, `.js`, `.disasm` \u7B49\uFF09\uFF0C**\u4E0B\u4E00\u6B65\u67E5\u770B\u6216\u68C0\u7D22\u8BE5\u6587\u4EF6\u65F6\uFF0C\u5FC5\u987B\u7ACB\u5373\u8C03\u7528 `sa_vm_run` \u5DE5\u5177**\uFF08`read_lines`, `read_file_tail`, `grep_search`\uFF09\uFF0C\u5207\u52FF\u5728\u7EC8\u7AEF\u987A\u624B\u8FD0\u884C `Get-Content` \u6216 `cat`\uFF01\n- **\u5E38\u7528\u547D\u4EE4\u6781\u901F\u6620\u5C04**\uFF1A\n * `bun --help` -> `sa_vm_run({ action: 'run_host', exe: 'bun', args: ['--help'] })`\n * `bun --help | Select -First 30` -> `sa_vm_run({ action: 'run_host', exe: 'bun', args: ['--help'], head_lines: 30 })`\n * `zig build test 2>&1 | Select -Last 50` -> `sa_vm_run({ action: 'run_host', exe: 'zig', args: ['build', 'test'], tail_lines: 50 })`\n * `bun run file.ts > out.log` -> `sa_vm_run({ action: 'run_host', exe: 'bun', args: ['run', 'file.ts'], cwd: 'dir' })`\n * `zig version` -> `sa_vm_run({ action: 'run_host', exe: 'zig', args: ['version'] })`\n * `bun test --filter pat | findstr FAIL` -> `sa_vm_run({ action: 'run_host', exe: 'bun', args: ['test', '--filter', 'pat'], filter: 'FAIL' })`\n * `Test-Path file.ext` -> `sa_vm_run({ action: 'test_path', path: 'file.ext' })`\n * `... | Where-Object Name -Match 'xyz'` -> `sa_vm_run({ action: 'find_files', pattern: '*xyz*' })`\n * `... | Where Length -gt 1MB` -> `sa_vm_run({ action: 'list_dir', dir: '...', type: 'file' })` \u540E\u6309 `size` \u5224\u65AD\n * `where bun / which zig` -> \u76F4\u63A5 `sa_vm_run({ action: 'run_host', exe: 'bun', args: ['--help'] })`\uFF0C\u7981\u5148\u5B9A\u4F4D\u518D\u62FC\u8DEF\u5F84\u6267\u884C\n * `git status / \u5DE5\u4F5C\u533A\u662F\u5426\u5E72\u51C0` -> `sa_vm_run({ action: 'git_status' })`\uFF08\u53EA\u8BFB\u539F\u751F git \u4F18\u5148\uFF1B`run_host git` \u4EC5\u5728\u6C99\u7BB1\u62E6\u622A\u5F00\u542F\u65F6\u7981\u9AD8\u5371 `reset --hard/clean/revert`\uFF0C\u4E25\u7981 `python -c`/`bun -e` \u900F\u4F20\u3001\u4E34\u65F6\u811A\u672C\u3001\u76F4\u8BFB `.git/*`\uFF09\n * `git diff / \u6539\u4E86\u4EC0\u4E48` -> `sa_vm_run({ action: 'git_diff' })`\uFF08`staged:true` \u770B\u6682\u5B58\u533A\uFF0C`stat_only:true` \u53EA\u770B\u7EDF\u8BA1\uFF0C`path` \u9650\u5B9A\u5355\u6587\u4EF6\uFF09\n * `find . -name \"future.ts\" -not -path \"*/node_modules/*\"` -> `sa_vm_run({ action: 'find_files', dir: '.', pattern: 'future.ts' })`\n * `find ... | head -20 / tail -30` -> \u4F7F\u7528 `read_lines` / `read_file_tail`\uFF0C\u6216 `run_host({ head_lines: 20, tail_lines: 30 })`\uFF0C\u7981\u6B62 shell \u622A\u65AD\n * `for %f in (*.ext) do findstr 'pat' %f` -> `sa_vm_run({ action: 'grep_search', pattern: '*.ext', query: 'pat' })`\n * `foreach ($f in (ls tests)) { Select-String ... }` -> `sa_vm_run({ action: 'grep_search', dir: 'tests', query: 'pat' })`\n * `Get-ChildItem -Recurse -Depth 2 | Select -First 30` -> `sa_vm_run({ action: 'list_dir', dir: '...', depth: 2, max_entries: 30 })`\n * `(Get-Content file).Count` -> `sa_vm_run({ action: 'count_lines', path: 'file' })`\n * `Get-Content file | Select-Object -Skip X -First Y` -> `sa_vm_run({ action: 'read_lines', path: 'file', start_line: X+1, end_line: X+Y })`\n * `Get-Content file | Select-Object -Last 100` -> `sa_vm_run({ action: 'read_file_tail', path: 'file', lines: 100 })`\n * `Get-Content file | Select-String -Pattern \"regex\"` -> `sa_vm_run({ action: 'grep_search', path: 'file', query: 'regex', is_regex: true })`\n * `cd dir; Get-Content file | Select-String -Pattern \"regex\"` -> `sa_vm_run({ action: 'grep_search', path: 'dir/file', query: 'regex', is_regex: true })`\n * `Get-Content file | Select-String \"xxx\"` -> `sa_vm_run({ action: 'grep_search', path: 'file', query: 'xxx' })`\n * `cd dir && ... / cd dir; ...` -> \u57FA\u4E8E\u5DE5\u4F5C\u533A\u6839\u76EE\u5F55\u76F4\u63A5\u6267\u884C\u5355\u547D\u4EE4\uFF0C\u6216\u5728 `sa_vm_run` \u4E2D\u6307\u5B9A `dir` / `path`\n * `Get-Process zig* / ps` -> \u4E25\u7981\u7EC8\u7AEF\u8FDB\u7A0B\u8F6E\u8BE2\uFF0C\u901A\u8FC7\u5185\u90E8\u8BCA\u65AD\u63A5\u53E3\u6216 `run_project_check` \u63A2\u6D4B\n * `Get-Date / date` -> \u7EAF\u566A\u97F3\u547D\u4EE4\uFF0C\u4E25\u7981\u5728\u7EC8\u7AEF\u8C03\u7528\n * `rg -n \"pat\" / grep -rn \"pat\"` -> `sa_vm_run({ action: 'grep_search', query: 'pat' })`\n * `Get-ChildItem tests / ls / dir` -> `sa_vm_run({ action: 'list_dir', dir: 'tests' })`\n * `Get-Content file / cat / type` -> `sa_vm_run({ action: 'read_lines', path: 'file', start_line: 1, end_line: 100 })`\n * `vm-read(file)` -> `sa_vm_run({ action: 'read_lines', path: 'file' })`\n * `tsc --noEmit / \u5168\u5C40\u626B\u7EA2\u7EBF` -> `sa_vm_run({ action: 'workspace_diagnostics', dir: 'src', detail: false })`\n * `\u67E5\u63A5\u53E3\u5B9E\u73B0 / implements / extends` -> `sa_vm_run({ action: 'find_implementations', symbol: 'InterfaceName', dir: 'src' })`\n * `\u5B89\u5168\u5220\u9664\u6587\u4EF6 / \u5220\u524D\u67E5\u5F15\u7528` -> `sa_vm_run({ action: 'safe_delete', path: 'src/old.ts' })`\n- **\u5FC5\u987B\u4F18\u5148\u4F7F\u7528\u5C01\u88C5\u5DE5\u5177**\uFF1A\u8BFB\u53D6\u5927\u6587\u4EF6\u3001\u6309\u884C\u5207\u7247\u3001\u7EDF\u8BA1\u884C\u6570\u3001\u53CD\u5411\u8BFB\u65E5\u5FD7\u3001\u8DE8\u6587\u4EF6\u9AD8\u901F\u68C0\u7D22\uFF08grep / async grep\uFF09\u3001\u8BED\u6CD5\u8BCA\u65AD\u3001\u7B26\u53F7\u5927\u7EB2\u3001\u5B9A\u4E49\u76F4\u8FBE\u4E0E\u7CBE\u786E\u8865\u4E01\u4FEE\u6539\u7B49\u64CD\u4F5C\uFF0C**\u5FC5\u987B\u4F18\u5148\u8C03\u7528 `sa_vm_run` \u5BF9\u5E94\u5C01\u88C5\u52A8\u4F5C**\uFF0C\u539F\u751F\u6BEB\u79D2\u7EA7\u8FD4\u56DE\u5E76\u81EA\u5E26 Token \u9884\u7B97\u4E0E\u4E0A\u4E0B\u6587\u9632\u6EA2\u51FA\u4FDD\u62A4\uFF01\n- **\u907F\u514D\u4F7F\u7528\u4F4E\u6548\u7EC8\u7AEF\u547D\u4EE4**\uFF1A\u4E25\u7981\u5728\u7EC8\u7AEF\u4E2D\u8FD0\u884C\u4F4E\u6548\u6162\u901F\u547D\u4EE4\uFF08\u5982 cat, type, grep, findstr, ls, dir, sed, awk \u7B49\uFF09\u9605\u8BFB\u5927\u6587\u4EF6\u6216\u8FDB\u884C\u5168\u9879\u76EE\u4EE3\u7801\u641C\u7D22\uFF1B":G?x?`\u3010\u5B89\u5168\u5B88\u62A4\u72B6\u6001\uFF1A${d}\u3011
|
|
273
|
+
${o}`:o,await vi(b,m,"utf8"),n.push(`grok:${b}`)}}}catch{}try{let a=le(c,".config","opencode"),b=le(a,"opencode.json");if(Ke(a)){let m={};if(Ke(b))try{m=JSON.parse(await gi(b,"utf8")),(!m||typeof m!="object"||Array.isArray(m))&&(m={})}catch{m={}}let o=ZP(m,e);await vi(b,JSON.stringify(o,null,2),"utf8"),n.push(`opencode:${b}`)}}catch{}}return{scriptPath:e,installed:Ke(e),clientsConfigured:n}}var nl="sa-vm",oC="<!-- generated-by-codex-ultra:sa-vm -->",ZC="BUN_TS_CHEATSHEET.md",LR="jev",rC="<!-- generated-by-codex-ultra:jev -->";function iC(I,l){let e=I?.jevChoose!==void 0||I?.jevChecklist!==void 0||I?.jevEvaluate!==void 0||I?.jevThinking!==void 0||I?.jevRedteam!==void 0||I?.jevRank!==void 0||I?.jevScope!==void 0||I?.jevConsistency!==void 0||I?.jevDone!==void 0||I?.jevDiagnose!==void 0||I?.jevEdgeCases!==void 0||I?.jevBlastRadius!==void 0,n=l===!0;return{showJevChoose:e?I?.jevChoose===!0:n,showJevChecklist:e?I?.jevChecklist===!0:n,showJevEvaluate:I?.jevEvaluate===!0,showJevThinking:e?I?.jevThinking===!0:n,showJevRedteam:e?I?.jevRedteam===!0:n,showJevRank:e?I?.jevRank===!0:n,showJevScope:e?I?.jevScope===!0:n,showJevConsistency:e?I?.jevConsistency===!0:n,showJevDone:e?I?.jevDone===!0:n,showJevDiagnose:e?I?.jevDiagnose===!0:n,showJevEdgeCases:e?I?.jevEdgeCases===!0:n,showJevBlastRadius:e?I?.jevBlastRadius===!0:n}}function iP(I,l){let e=iC(I,l),n=[];return e.showJevChoose&&n.push("jev_choose"),e.showJevChecklist&&n.push("jev_checklist"),e.showJevEvaluate&&n.push("jev_evaluate"),e.showJevThinking&&n.push("jev_thinking"),e.showJevRedteam&&n.push("jev_redteam"),e.showJevRank&&n.push("jev_rank"),e.showJevScope&&n.push("jev_scope"),e.showJevConsistency&&n.push("jev_consistency"),e.showJevDone&&n.push("jev_done"),e.showJevDiagnose&&n.push("jev_diagnose"),e.showJevEdgeCases&&n.push("jev_edge_cases"),e.showJevBlastRadius&&n.push("jev_blast_radius"),n}function bC(I,l,e){if(l?.trim()){let n=l.trim().replace(/[^A-Za-z0-9._-]/g,"_");return tl(I,".codex-ultra","thread-skills",n,nl,"SKILL.md")}return e==="claude"?tl(I,".claude","skills",nl,"SKILL.md"):e==="codex"?tl(I,".codex","skills",nl,"SKILL.md"):e==="agy"?tl(I,".gemini","skills",nl,"SKILL.md"):e==="grok"?tl(I,".grok","skills",nl,"SKILL.md"):e==="opencode"?tl(I,".opencode","skills",nl,"SKILL.md"):e==="pi"?tl(I,".pi","skills",nl,"SKILL.md"):tl(I,".agents","skills",nl,"SKILL.md")}function WP(I,l){if(l?.trim()){let t=l.trim();return aC(t)?Ei(t):Ei(I,t)}let e=tl(jc(),"sala");if(Lb(tl(e,"dist","index.html")))return e;let n=process.env.CODEX_UI_SA_VM_SALA_DIR?.trim()||tl(process.cwd(),"desktop-resources","sa-vm","sala");return aC(n)?Ei(n):Ei(I,n)}function uP(I={}){let l=I.policy,e=l?.tools,n=l?.execution,t=xn(e),G=I.enabled!==!1,c=(I.enabled===!1||I.enabled!==!0&&!e?.replaceExec)&&t,d=c||G?"\u5DF2\u5F00\u542F":"\u672A\u5F00\u542F",a=l!==void 0,b=a?e?.replaceRead===!0||e?.readFiles===!0:!0,m=a?e?.replaceWrite===!0||e?.editFiles===!0:!0,o=a?e?.replaceApplyPatch===!0||e?.applyPatch===!0:!0,W=n?.javascript===!0,s=n?.python===!0,Z=a?e?.clearToolHistory===!0:!1,r=a?e?.findReferences===!0:!1,u=a?e?.renameSymbol===!0:!1,N=a?e?.fileOutline===!0:!1,h=a?e?.moveWithImports===!0:!1,Y=a?e?.findDefinition===!0:!1,R=a?e?.extractToFile===!0:!1,V=a?e?.addImport===!0:!1,F=a?e?.getDiagnostics===!0:!1,H=a?e?.organizeImports===!0:!1,g=a?e?.analyzeScope===!0:!1,E=a?e?.codeGraph!==!1:!0,y=a?!!(l?.http?.allow&&l.http.allow.length>0):!1,v=[];o&&v.push("apply_patch"),m&&v.push("edit_file","write_file","delete_file","safe_delete","move_file","copy_file"),b&&v.push("read_file","read_lines","read_many","read_file_tail","count_lines","file_info"),v.push("find_files","list_dir","grep_search","grep_search_async"),v.push("git_status","git_diff"),r&&v.push("find_references","find_implementations"),N&&v.push("file_outline","workspace_outline","repo_map"),E&&v.push("code_graph","relation_graph","symbol_graph"),u&&v.push("rename_symbol"),h&&v.push("move_file_with_imports"),Y&&v.push("find_definition"),R&&v.push("extract_to_file"),V&&v.push("add_import"),F&&v.push("get_diagnostics","workspace_diagnostics","verify_loop","verify_changed"),H&&v.push("organize_imports"),g&&v.push("analyze_scope"),W&&v.push("run_js"),s&&v.push("run_py"),y&&v.push("http_fetch");let J=(l?.process?.bunProfiles??[]).length>0;J&&v.push("run_project_check");let k=l?.process?.bun===!0||typeof l?.process?.bun=="object"&&l.process.bun!==null&&l.process.bun.enabled===!0;k&&v.push("run_bun"),Z&&v.push("clear_tool_history");let z=b||m;z&&v.push("save_note","read_notes","delete_note"),v.push("run_host");let x=!c&&G&&(W||s||k||!a),L=c?"\u3010\u4EE3\u7801\u589E\u5F3A\u5DE5\u5177\u72B6\u6001\uFF1A\u5DF2\u5F00\u542F\u3011\n\u672C\u5DE5\u4F5C\u533A\u5DF2\u6FC0\u6D3B\u9AD8\u6027\u80FD\u4EE3\u7801\u589E\u5F3A\u5DE5\u5177\uFF08\u901A\u8FC7 `sa_vm_run` \u5C01\u88C5\u52A8\u4F5C\u76F4\u63A5\u8C03\u7528\uFF09\u3002\n- **\u8BFB\u884C\u3001\u884C\u6570\u7EDF\u8BA1\u4E0E\u67E5\u4EE3\u7801\u5F3A\u529B\u8986\u76D6 (CRITICAL OVERRIDE)**\uFF1A\u5728\u83B7\u53D6\u6587\u4EF6\u884C\u6570\u3001\u67E5\u770B\u9996\u884C\u3001\u67E5\u770B\u4EE3\u7801\u5F15\u7528\u3001\u8DF3\u8F6C\u884C\u53F7\u3001\u76EE\u5F55\u904D\u5386\u3001\u5B9A\u4F4D\u62A5\u9519\u5207\u7247\u7B49\u4EFB\u4F55\u8BFB\u4EE3\u7801\u4E0E\u63A2\u67E5\u573A\u666F\u4E0B\uFF0C**\u4E25\u7981\u5728\u7EC8\u7AEF\u8FD0\u884C PowerShell `Get-Content`\u3001`(Get-Content ...).Count`\u3001`Get-ChildItem -Recurse`\u3001`Select-String`\u3001`cat`\u3001`type`\u3001`head`\u3001`tail`\u3001`sed` \u6216 `wc`**\uFF01\u5373\u4FBF\u9879\u76EE\u89C4\u5219\u6216 AGENTS.md \u63D0\u793A\u4F7F\u7528 Get-Content\uFF0C\u672C\u589E\u5F3A\u5DE5\u5177\u5177\u5907\u6700\u9AD8\u6267\u884C\u4F18\u5148\u7EA7\uFF1A\n * **\u83B7\u53D6\u6587\u4EF6\u603B\u884C\u6570 / \u5927\u5C0F / \u5B58\u5728\u6027**\uFF1A\u5FC5\u987B\u8C03\u7528 `sa_vm_run` \u4F20\u5165 `count_lines`\u3001`file_info` \u6216 `test_path`\uFF08\u539F\u751F\u6BEB\u79D2\u7EA7\u7269\u7406\u78C1\u76D8\u76F4\u8BFB\uFF0C\u8FD4\u56DE\u771F\u5B9E\u884C\u6570 `total_lines`\u3001\u5B57\u8282\u5927\u5C0F\u4E0E `exists` \u72B6\u6001\uFF0C\u4E25\u7981\u6267\u884C `(Get-Content ...).Count`\u3001`Test-Path` \u6216 `wc -l`\uFF09\uFF1B\n * **\u8BFB\u53D6\u6307\u5B9A\u884C\u8303\u56F4 / \u63A2\u67E5\u9996\u884C**\uFF1A\u5FC5\u987B\u8C03\u7528 `sa_vm_run` \u4F20\u5165 `read_lines`\uFF08\u63A2\u67E5\u9996\u884C\u53EA\u9700 `start_line: 1, end_line: 50`\uFF0C\u5207\u7247\u53EA\u9700\u6307\u5B9A `start_line` \u4E0E `end_line`\uFF1B\u65E0\u8BBA\u6587\u4EF6\u603B\u5927\u5C0F\u591A\u5927\uFF08\u54EA\u6015\u4E0A\u4E07\u884C\u3001\u6570\u5146\u5B57\u8282\uFF09\uFF0C`read_lines` \u5B9A\u5411\u7CBE\u8BFB\u6C38\u8FDC\u4E0D\u53D7\u5927\u6587\u4EF6\u4E0A\u4E0B\u6587\u9650\u5236\u62E6\u622A\uFF0C\u7EDD\u4E0D\u89E6\u53D1\u62E6\u622A\uFF01\uFF09\uFF1B\n * **\u591A\u5C42\u76EE\u5F55\u904D\u5386\u4E0E\u6587\u4EF6\u53D1\u73B0**\uFF1A\u5FC5\u987B\u8C03\u7528 `sa_vm_run` \u4F20\u5165 `list_dir`\uFF08\u539F\u751F\u652F\u6301 `depth: 2` \u6216\u66F4\u591A\u5C42\u7EA7\uFF0C\u5E26 `max_entries` \u63A7\u5236\uFF0C\u6BEB\u79D2\u7EA7\u8FD4\u56DE\u76EE\u5F55\u6811\uFF0C\u4E25\u7981\u8FD0\u884C `Get-ChildItem -Recurse`\uFF09\uFF1B\n * **\u5355\u6587\u4EF6\u6216\u591A\u6587\u4EF6\u6587\u672C\u641C\u7D22**\uFF1A\u5FC5\u987B\u8C03\u7528 `sa_vm_run` \u4F20\u5165 `grep_search`\uFF08\u4E0D\u4EC5\u652F\u6301\u5168\u76EE\u5F55\u641C\u7D22\uFF0C\u8FD8\u652F\u6301\u76F4\u63A5\u4F20\u5165\u5355\u4E2A\u5177\u4F53\u6587\u4EF6 `path: \"foo.ts\", query: \"pattern\"`\uFF0C\u4E25\u7981\u8FD0\u884C `Get-Content ... | Select-String`\uFF09\uFF1B\n * **\u5B89\u5168\u9605\u8BFB\u6574\u6587\u4EF6**\uFF1A\u5FC5\u987B\u8C03\u7528 `sa_vm_run` \u4F20\u5165 `read_file`\uFF08\u81EA\u5E26 max_tokens \u9884\u7B97\u4E0E\u9632\u7206\u6D41\u622A\u65AD\uFF09\u3002\n- **\u7269\u7406\u78C1\u76D8\u76F4\u8BFB\u4E0E\u96F6\u7F13\u5B58\u4FDD\u8BC1 (ZERO CACHE)**\uFF1A`sa_vm_run` \u5DE5\u5177\uFF08`find_files`\u3001`list_dir`\u3001`file_info`\u3001`test_path`\u3001`read_file`\u3001`grep_search`\uFF09\u76F4\u63A5\u901A\u8FC7\u8FDB\u7A0B\u5185 Node.js \u539F\u751F\u5E95\u5C42\u7CFB\u7EDF\u8C03\u7528\u8BBF\u95EE\u7269\u7406\u78C1\u76D8\uFF0C**\u7EDD\u5BF9\u96F6\u7F13\u5B58\u3001\u65E0\u7D22\u5F15\u5EF6\u8FDF\u3001\u65E0\u9648\u65E7\u5143\u6570\u636E**\u3002\u82E5 `find_files` \u627E\u5230\u4E86\u6587\u4EF6\uFF0C\u8BE5\u6587\u4EF6 100% \u5B58\u5728\u4E8E\u8BE5\u7269\u7406\u8DEF\u5F84\uFF01\u5F53\u7EC8\u7AEF\u547D\u4EE4\u62A5\u9519\u627E\u4E0D\u5230\u6587\u4EF6\u65F6\uFF0C\u539F\u56E0 100% \u662F\u7EC8\u7AEF\u624B\u52A8 `cd` \u8F93\u9519\u4E86\u8DEF\u5F84\uFF0C\u7EDD\u975E\u7F13\u5B58\u3001\u9690\u85CF\u6587\u4EF6\u6216 NTFS Junction\uFF01\n- **\u7981\u6B62\u7EC8\u7AEF\u624B\u52A8 cd (NO MANUAL CD)**\uFF1A\u6240\u6709\u7EC8\u7AEF\u547D\u4EE4\u4E0E `sa_vm_run` \u5DE5\u5177\u5747\u76F4\u63A5\u5728\u5DE5\u4F5C\u533A\u6839\u76EE\u5F55\u6267\u884C\u3002\u4E25\u7981\u5728\u7EC8\u7AEF\u8FD0\u884C `cd <path>`\uFF0C\u624B\u52A8\u5207\u6362\u76EE\u5F55\u6781\u6613\u9057\u6F0F\u5C42\u7EA7\u5BFC\u81F4\u8DEF\u5F84\u6F02\u79FB\u4E0E\u8BEF\u5224\u3002\u59CB\u7EC8\u76F8\u5BF9\u4E8E\u5DE5\u4F5C\u533A\u6839\u76EE\u5F55\u6267\u884C\u547D\u4EE4\u3002\n- **\u4E25\u7981\u7EC8\u7AEF\u7F16\u5199 for-in / foreach \u590D\u6742\u5FAA\u73AF (NO BATCH FOR-IN LOOPS)**\uFF1A\u4E25\u7981\u5728\u7EC8\u7AEF\uFF08PowerShell \u6216 cmd\uFF09\u4E2D\u7F16\u5199 `for ... in`\u3001`for /f`\u3001`for /r`\u3001`foreach`\u3001\u7BA1\u9053 ForEach-Object` \u5FAA\u73AF\u6765\u904D\u5386\u6587\u4EF6\u3001\u641C\u7D22\u6A21\u5F0F\u3001\u7EDF\u8BA1\u884C\u6570\u6216\u6279\u91CF\u66FF\u6362\u6587\u672C\uFF01\u7EC8\u7AEF\u5FAA\u73AF\u6781\u6613\u5F15\u53D1\u4E25\u91CD\u95EE\u9898\uFF1A\n * Windows cmd/PowerShell \u590D\u6742\u7684\u5F15\u53F7\u8F6C\u4E49\u4E0E\u5D4C\u5957\u7834\u574F\uFF1B\n * \u7F16\u7801\u707E\u96BE\uFF1APowerShell `-replace` \u4E0E\u91CD\u5B9A\u5411\u5199\u5165\u9ED8\u8BA4\u662F ANSI \u6216\u5E26 BOM \u7684 UTF-16\uFF0C\u4F1A\u5F7B\u5E95\u7834\u574F\u6E90\u7801 UTF-8 \u7F16\u7801\uFF01\n * \u7EC8\u7AEF\u8F93\u51FA\u6EA2\u51FA\u4E0E\u4E0A\u4E0B\u6587\u5931\u63A7\u3002\n \u5BF9\u7B49\u66FF\u4EE3\u65B9\u6848\uFF1A\n * \u591A\u6587\u4EF6/\u5168\u76EE\u5F55\u5185\u5BB9\u641C\u7D22\uFF1A\u8C03\u7528 `sa_vm_run` \u7684 `grep_search`\uFF08\u6307\u5B9A `pattern: \"*.ext\"` \u6216 `dir`\uFF09\u6216 `grep_search_async`\uFF08\u652F\u6301\u6279\u91CF query \u6570\u7EC4\uFF09\uFF1B\n * \u6279\u91CF\u6587\u4EF6\u884C\u6570/\u5927\u5C0F\u63A2\u67E5\uFF1A\u8C03\u7528 `sa_vm_run` \u7684 `list_dir({ depth: 2 })` \u6216\u5BF9\u76EE\u6807\u6587\u4EF6\u8C03\u7528 `count_lines`\uFF1B\n * \u6279\u91CF\u6587\u4EF6\u5199\u5165\u6216\u66FF\u6362\uFF1A\u8C03\u7528 `sa_vm_run` \u7684 `parallel: [ { action: \"edit_file\", ... } ]`\uFF08\u4E00\u6B21\u6700\u591A 32 \u4E2A\u539F\u5B50\u4EFB\u52A1\u5E76\u81EA\u52A8\u5907\u4EFD\uFF09\u6216 `rename_symbol` / `apply_patch`\uFF1B\n * \u6279\u91CF\u6D4B\u8BD5\uFF1A\u5148\u7528 `find_files` \u627E\u51FA\u7528\u4F8B\u6E05\u5355\uFF0C\u518D\u9488\u5BF9\u6027\u6267\u884C\u6D4B\u8BD5\u547D\u4EE4\uFF0C\u4E25\u7981\u4F7F\u7528 shell \u5FAA\u73AF\u76F2\u8DD1\u3002\n- **\u67E5\u5E2E\u52A9/\u8DD1\u6784\u5EFA\u53EA\u8BB8 run_host(+tail_lines)\uFF0C\u7981 cmd /c\u30012>&1\u3001Select/tail/findstr\u3001> file\u3001cd**\uFF1A\u6267\u884C\u5916\u90E8\u4E8C\u8FDB\u5236\uFF08bun\u3001node\u3001python\u3001zig \u6216\u5DE5\u4F5C\u533A\u7A0B\u5E8F\uFF09\u5FC5\u987B\u8C03\u7528 `run_host` \u7ED3\u6784\u5316\u53C2\u6570\u8C03\u7528\uFF0C\u4E25\u7981\u5305\u88C5 `cmd /c`\u3001\u91CD\u5B9A\u5411 `> file` \u6216\u4F7F\u7528\u7BA1\u9053\u3002`--help` \u4E0E\u7248\u672C\u67E5\u8BE2\u81EA\u52A8\u4EAB\u6709\u670D\u52A1\u7AEF\u5185\u5B58\u7F13\u5B58\uFF080ms \u54CD\u5E94\u3001\u4E0D\u5360\u8FDB\u7A0B\u69FD\uFF09\u3002\n- **\u65E0\u4F9D\u8D56 run_host \u5FC5\u987B\u5E76\u884C (INDEPENDENT RUN_HOST MUST BE PARALLEL)**\uFF1A\u591A\u4E2A\u65E0\u76F8\u4E92\u4F9D\u8D56\u7684 `run_host` \u547D\u4EE4\u3001\u6216 `run_host` \u4E0E\u53EA\u8BFB\u63A2\u67E5\u5DE5\u5177\uFF08`grep_search`, `list_dir`, `read_lines`, `get_diagnostics`\uFF09\uFF0C\u5FC5\u987B\u4F7F\u7528 `parallel` \u6279\u91CF\u5E76\u53D1\u4E0B\u53D1\uFF1B\u540C\u6279\u5185\u4E25\u7981\u8BFB\u53D6\u672C\u6279\u6784\u5EFA\u8F93\u51FA\u4EA7\u7269\uFF08\u6709\u4F9D\u8D56\u5FC5\u987B\u62C6\u5206\u4E3A\u4E32\u884C\u4E24\u6279\uFF0C\u540C\u6279\u8BFB\u5199\u51B2\u7A81\u76F4\u63A5\u6253\u56DE\uFF09\u3002\n- **\u540C\u4E49\u591A\u67E5\u5FC5\u987B\u8D70 grep_search_async \u4E00\u6B21\u6279\u91CF\uFF0C\u7981\u9010\u6587\u4EF6\u9010\u8BCD\u653E\u5BBD\u91CD\u67E5 (BATCH SYNONYM SEARCH)**\uFF1A\u5F53\u9700\u8981\u8DE8\u6587\u4EF6\u68C0\u7D22\u4E00\u7EC4\u76F8\u5173\u7B26\u53F7\u6216\u540C\u4E49\u8BCD\uFF08\u4F8B\u5982 `planAsyncLinearAwaitContinuation`\u3001`AsyncLinearAwaitPlan`\u3001`genFuncDeclNamedImpl` \u7B49\uFF09\u65F6\uFF0C**\u4E25\u7981\u5728\u7EC8\u7AEF\u4E2D\u9010\u4E2A\u6587\u4EF6\u8C03\u7528 `Select-String` \u6216\u53CD\u590D\u5FAE\u8C03 pattern \u7528 `rg` \u8BD5\u63A2**\uFF01\u5FC5\u987B\u76F4\u63A5\u8C03\u7528\u4E00\u6B21 `sa_vm_run({ action: 'grep_search_async', dir: 'src', pattern: '*.zig', queries: ['query1', 'query2', 'query3'], max_matches: 30 })`\uFF0C\u5E95\u5C42\u5E76\u53D1\u6267\u884C\u5E76\u5728\u6BEB\u79D2\u7EA7\u5B8C\u6210\u805A\u5408\uFF0C\u4E00\u6B21\u6536\u655B\u3002\n- **\u7B26\u53F7\u5B9A\u4F4D\u4E25\u7981\u76F2\u641C\u653E\u5BBD\u98DF\u8C31 (SYMBOL RESOLUTION OVER BLIND GREP)**\uFF1A\u4E25\u7981\u51ED\u65E7\u8BB0\u5FC6\u6216 handoff \u4E2D\u7684\u9648\u65E7/\u5E7B\u89C9\u7B26\u53F7\u5168\u76D8\u76F2\u76EE grep\uFF1B\u4E00\u65E6\u9996\u9009\u7B26\u53F7\u641C\u7D22\u4E3A\u7A7A\uFF0C**\u4E25\u7981\u81EA\u52A8\u653E\u5BBD\u4E3A\u901A\u7528\u8BCD**\uFF08\u5982\u5C06 `LinearAwait` \u653E\u5BBD\u4E3A `linear|MAX_AWAITS` \u4F1A\u5BFC\u81F4\u5168\u91CF\u8BEF\u62A5\u5783\u573E\u6CDB\u6EE5\uFF09\uFF01\n * **\u6B63\u786E\u98DF\u8C31\u4E09\u6B65\u66F2**\uFF1A\n 1. \u7ED3\u6784\u5927\u7EB2\u5B9A\u771F\u540D\uFF1A`sa_vm_run({ action: 'file_outline', path: 'target.zig' })` \u67E5\u770B\u771F\u5B9E\u7ED3\u6784\u5927\u7EB2\uFF0C\u83B7\u53D6\u51C6\u786E\u7684\u5F53\u524D\u7B26\u53F7\u771F\u540D\uFF1B\n 2. \u5B9A\u4E49\u4E0E\u5F15\u7528\u76F4\u8FBE\uFF1A`sa_vm_run({ action: 'find_definition', symbol: 'real_symbol' })` \u6216 `find_references({ symbol: 'real_symbol' })` \u7CBE\u786E\u5B9A\u4F4D\u5B9A\u4E49\u4E0E\u5F15\u7528\u884C\u53F7\uFF1B\n 3. \u5B9A\u5411\u5207\u7247\u7CBE\u8BFB\uFF1A`sa_vm_run({ action: 'read_lines', path: 'target.zig', start_line: X-40, end_line: X+40 })` \u56F4\u7ED5\u547D\u4E2D\u70B9\u7CBE\u8BFB\u524D\u540E 80 \u884C\u4E0A\u4E0B\u6587\uFF01\n * \u82E5\u7B2C\u4E00\u8F6E\u7B26\u53F7\u5B9A\u4F4D\u4E3A\u7A7A\uFF0C**\u7ACB\u5373\u505C\u6B62\u76F2\u641C**\uFF0C\u76F4\u63A5\u901A\u8FC7 `file_outline` \u786E\u8BA4\u7B26\u53F7\u540D\uFF0C\u7EDD\u4E0D\u5728\u7EC8\u7AEF\u53CD\u590D\u653E\u5BBD\u6B63\u5219\u7206\u7834\uFF01\n- **\u7EC8\u7AEF\u5B8C\u5168\u81EA\u7531\u4E0E\u8FDB\u7A0B\u6267\u884C\u4FDD\u969C**\uFF1A\u7CFB\u7EDF\u539F\u751F\u7EC8\u7AEF\uFF08PowerShell, bash, git, npm, bun, cargo, zig \u7B49\uFF09\u4FDD\u6301\u5B8C\u5168\u5F00\u653E\u3002\u7F16\u8BD1\u6784\u5EFA\u3001\u5355\u5143\u6D4B\u8BD5\u3001\u8FD0\u884C\u4E8C\u8FDB\u5236\u7A0B\u5E8F\u662F\u5408\u6CD5\u7684\u7EC8\u7AEF\u547D\u4EE4\uFF0C\u76F4\u63A5\u88F8\u8DD1\u4E8C\u8FDB\u5236\uFF08\u5982 `bun test ...`\u3001`zig build`\uFF09\uFF0C**\u4E25\u7981\u4F7F\u7528 `2>$null` / `>nul` \u6291\u5236\u9519\u8BEF\u6216\u4F7F\u7528 `| Select-Object -First/-Last` \u7BA1\u9053\u622A\u65AD\u5305\u88C5**\uFF01\u5982\u9700\u67E5\u9605\u6D4B\u8BD5\u65E5\u5FD7\u3001\u957F\u8F93\u51FA\u6216\u751F\u6210\u7684\u6587\u4EF6\u4EA7\u7269\uFF0C\u4F7F\u7528 `sa_vm_run({ action: 'read_file_tail' })` \u6216 `read_lines` \u67E5\u770B\u3002\n- **\u4EA7\u7269\u751F\u6210\u540E\u7684\u5FC5\u9009\u8F6C\u6362 (Workflow Transition)**\uFF1A\u4E00\u65E6\u5728\u7EC8\u7AEF\u6267\u884C\u547D\u4EE4\u751F\u6210\u4E86\u7F16\u8BD1/\u6D4B\u8BD5/\u53CD\u6C47\u7F16\u4EA7\u7269\u6587\u4EF6\uFF08\u5982 `.out`, `.log`, `.js`, `.disasm` \u7B49\uFF09\uFF0C**\u4E0B\u4E00\u6B65\u67E5\u770B\u6216\u68C0\u7D22\u8BE5\u6587\u4EF6\u65F6\uFF0C\u5FC5\u987B\u7ACB\u5373\u8C03\u7528 `sa_vm_run` \u5DE5\u5177**\uFF08`read_lines`, `read_file_tail`, `grep_search`\uFF09\uFF0C\u5207\u52FF\u5728\u7EC8\u7AEF\u987A\u624B\u8FD0\u884C `Get-Content` \u6216 `cat`\uFF01\n- **\u5E38\u7528\u547D\u4EE4\u6781\u901F\u6620\u5C04**\uFF1A\n * `bun --help` -> `sa_vm_run({ action: 'run_host', exe: 'bun', args: ['--help'] })`\n * `bun --help | Select -First 30` -> `sa_vm_run({ action: 'run_host', exe: 'bun', args: ['--help'], head_lines: 30 })`\n * `zig build test 2>&1 | Select -Last 50` -> `sa_vm_run({ action: 'run_host', exe: 'zig', args: ['build', 'test'], tail_lines: 50 })`\n * `bun run file.ts > out.log` -> `sa_vm_run({ action: 'run_host', exe: 'bun', args: ['run', 'file.ts'], cwd: 'dir' })`\n * `zig version` -> `sa_vm_run({ action: 'run_host', exe: 'zig', args: ['version'] })`\n * `bun test --filter pat | findstr FAIL` -> `sa_vm_run({ action: 'run_host', exe: 'bun', args: ['test', '--filter', 'pat'], filter: 'FAIL' })`\n * `Test-Path file.ext` -> `sa_vm_run({ action: 'test_path', path: 'file.ext' })`\n * `... | Where-Object Name -Match 'xyz'` -> `sa_vm_run({ action: 'find_files', pattern: '*xyz*' })`\n * `... | Where Length -gt 1MB` -> `sa_vm_run({ action: 'list_dir', dir: '...', type: 'file' })` \u540E\u6309 `size` \u5224\u65AD\n * `where bun / which zig` -> \u76F4\u63A5 `sa_vm_run({ action: 'run_host', exe: 'bun', args: ['--help'] })`\uFF0C\u7981\u5148\u5B9A\u4F4D\u518D\u62FC\u8DEF\u5F84\u6267\u884C\n * `git status / \u5DE5\u4F5C\u533A\u662F\u5426\u5E72\u51C0` -> `sa_vm_run({ action: 'git_status' })`\uFF08\u53EA\u8BFB\u539F\u751F git \u4F18\u5148\uFF1B`run_host git` \u4EC5\u5728\u6C99\u7BB1\u62E6\u622A\u5F00\u542F\u65F6\u7981\u9AD8\u5371 `reset --hard/clean/revert`\uFF0C\u4E25\u7981 `python -c`/`bun -e` \u900F\u4F20\u3001\u4E34\u65F6\u811A\u672C\u3001\u76F4\u8BFB `.git/*`\uFF09\n * `git diff / \u6539\u4E86\u4EC0\u4E48` -> `sa_vm_run({ action: 'git_diff' })`\uFF08`staged:true` \u770B\u6682\u5B58\u533A\uFF0C`stat_only:true` \u53EA\u770B\u7EDF\u8BA1\uFF0C`path` \u9650\u5B9A\u5355\u6587\u4EF6\uFF09\n * `find . -name \"future.ts\" -not -path \"*/node_modules/*\"` -> `sa_vm_run({ action: 'find_files', dir: '.', pattern: 'future.ts' })`\n * `find ... | head -20 / tail -30` -> \u4F7F\u7528 `read_lines` / `read_file_tail`\uFF0C\u6216 `run_host({ head_lines: 20, tail_lines: 30 })`\uFF0C\u7981\u6B62 shell \u622A\u65AD\n * `for %f in (*.ext) do findstr 'pat' %f` -> `sa_vm_run({ action: 'grep_search', pattern: '*.ext', query: 'pat' })`\n * `foreach ($f in (ls tests)) { Select-String ... }` -> `sa_vm_run({ action: 'grep_search', dir: 'tests', query: 'pat' })`\n * `Get-ChildItem -Recurse -Depth 2 | Select -First 30` -> `sa_vm_run({ action: 'list_dir', dir: '...', depth: 2, max_entries: 30 })`\n * `(Get-Content file).Count` -> `sa_vm_run({ action: 'count_lines', path: 'file' })`\n * `Get-Content file | Select-Object -Skip X -First Y` -> `sa_vm_run({ action: 'read_lines', path: 'file', start_line: X+1, end_line: X+Y })`\n * `Get-Content file | Select-Object -Last 100` -> `sa_vm_run({ action: 'read_file_tail', path: 'file', lines: 100 })`\n * `Get-Content file | Select-String -Pattern \"regex\"` -> `sa_vm_run({ action: 'grep_search', path: 'file', query: 'regex', is_regex: true })`\n * `cd dir; Get-Content file | Select-String -Pattern \"regex\"` -> `sa_vm_run({ action: 'grep_search', path: 'dir/file', query: 'regex', is_regex: true })`\n * `Get-Content file | Select-String \"xxx\"` -> `sa_vm_run({ action: 'grep_search', path: 'file', query: 'xxx' })`\n * `cd dir && ... / cd dir; ...` -> \u57FA\u4E8E\u5DE5\u4F5C\u533A\u6839\u76EE\u5F55\u76F4\u63A5\u6267\u884C\u5355\u547D\u4EE4\uFF0C\u6216\u5728 `sa_vm_run` \u4E2D\u6307\u5B9A `dir` / `path`\n * `Get-Process zig* / ps` -> \u4E25\u7981\u7EC8\u7AEF\u8FDB\u7A0B\u8F6E\u8BE2\uFF0C\u901A\u8FC7\u5185\u90E8\u8BCA\u65AD\u63A5\u53E3\u6216 `run_project_check` \u63A2\u6D4B\n * `Get-Date / date` -> \u7EAF\u566A\u97F3\u547D\u4EE4\uFF0C\u4E25\u7981\u5728\u7EC8\u7AEF\u8C03\u7528\n * `rg -n \"pat\" / grep -rn \"pat\"` -> `sa_vm_run({ action: 'grep_search', query: 'pat' })`\n * `Get-ChildItem tests / ls / dir` -> `sa_vm_run({ action: 'list_dir', dir: 'tests' })`\n * `Get-Content file / cat / type` -> `sa_vm_run({ action: 'read_lines', path: 'file', start_line: 1, end_line: 100 })`\n * `vm-read(file)` -> `sa_vm_run({ action: 'read_lines', path: 'file' })`\n * `tsc --noEmit / \u5168\u5C40\u626B\u7EA2\u7EBF` -> `sa_vm_run({ action: 'workspace_diagnostics', dir: 'src', detail: false })`\n * `\u67E5\u63A5\u53E3\u5B9E\u73B0 / implements / extends` -> `sa_vm_run({ action: 'find_implementations', symbol: 'InterfaceName', dir: 'src' })`\n * `\u5B89\u5168\u5220\u9664\u6587\u4EF6 / \u5220\u524D\u67E5\u5F15\u7528` -> `sa_vm_run({ action: 'safe_delete', path: 'src/old.ts' })`\n- **\u5FC5\u987B\u4F18\u5148\u4F7F\u7528\u5C01\u88C5\u5DE5\u5177**\uFF1A\u8BFB\u53D6\u5927\u6587\u4EF6\u3001\u6309\u884C\u5207\u7247\u3001\u7EDF\u8BA1\u884C\u6570\u3001\u53CD\u5411\u8BFB\u65E5\u5FD7\u3001\u8DE8\u6587\u4EF6\u9AD8\u901F\u68C0\u7D22\uFF08grep / async grep\uFF09\u3001\u8BED\u6CD5\u8BCA\u65AD\u3001\u7B26\u53F7\u5927\u7EB2\u3001\u5B9A\u4E49\u76F4\u8FBE\u4E0E\u7CBE\u786E\u8865\u4E01\u4FEE\u6539\u7B49\u64CD\u4F5C\uFF0C**\u5FC5\u987B\u4F18\u5148\u8C03\u7528 `sa_vm_run` \u5BF9\u5E94\u5C01\u88C5\u52A8\u4F5C**\uFF0C\u539F\u751F\u6BEB\u79D2\u7EA7\u8FD4\u56DE\u5E76\u81EA\u5E26 Token \u9884\u7B97\u4E0E\u4E0A\u4E0B\u6587\u9632\u6EA2\u51FA\u4FDD\u62A4\uFF01\n- **\u907F\u514D\u4F7F\u7528\u4F4E\u6548\u7EC8\u7AEF\u547D\u4EE4**\uFF1A\u4E25\u7981\u5728\u7EC8\u7AEF\u4E2D\u8FD0\u884C\u4F4E\u6548\u6162\u901F\u547D\u4EE4\uFF08\u5982 cat, type, grep, findstr, ls, dir, sed, awk \u7B49\uFF09\u9605\u8BFB\u5927\u6587\u4EF6\u6216\u8FDB\u884C\u5168\u9879\u76EE\u4EE3\u7801\u641C\u7D22\uFF1B":G?x?`\u3010\u5B89\u5168\u5B88\u62A4\u72B6\u6001\uFF1A${d}\u3011
|
|
274
274
|
\u672C\u5DE5\u4F5C\u533A\u5DF2\u5F00\u542F\u5B89\u5168\u7B56\u7565\u4E0E\u53CC\u8F68\u5DE5\u5177\u652F\u6301\u3002
|
|
275
275
|
- **\u5355\u6587\u4EF6\u5355\u6B65\u64CD\u4F5C\u4E25\u7981\u624B\u5199\u811A\u672C\u4EE3\u7801**\uFF1A\u5927\u6A21\u578B\u5FC5\u987B\u76F4\u63A5\u8C03\u7528 \`sa_vm_run\` \u4F20\u5165\u5F53\u524D\u5DF2\u542F\u7528\u7684\u5C01\u88C5\u52A8\u4F5C\u53C2\u6570\uFF08\`action\`\uFF09\uFF0C\u5E95\u5C42\u5C06\u4EE5\u539F\u751F\u6781\u901F\u6BEB\u79D2\u7EA7\u6267\u884C\uFF1B
|
|
276
276
|
- **\u8DE8\u6587\u4EF6\u590D\u6742\u4EFB\u52A1**\uFF1A\u9075\u5FAA\u53CC\u8F68\u5236\u8DEF\u7531\u51B3\u7B56\u6811\uFF0C\u4EC5\u5728\u6279\u91CF\u3001\u8DE8\u6587\u4EF6\u6216\u5E26\u5FAA\u73AF\u5206\u652F\u8BA1\u7B97\u65F6\u65B9\u53EF\u7F16\u5199\u53D7\u9650 TS \u4EE3\u7801\uFF08\u7ECF run_js \u7531 bun \u6267\u884C\uFF0C\u4E25\u7981\u7ED5\u8FC7\u6C99\u7BB1\u76F4\u8C03\u5BBF\u4E3B\u8FDB\u7A0B\uFF01\uFF09\uFF1B
|
|
@@ -691,8 +691,12 @@ ${o}`:o,await vi(b,m,"utf8"),n.push(`grok:${b}`)}}}catch{}try{let a=le(c,".confi
|
|
|
691
691
|
- \`dir\` (\u53EF\u9009): \u626B\u63CF\u8D77\u59CB\u76EE\u5F55\uFF0C\u9ED8\u8BA4 \`.\`\uFF1B
|
|
692
692
|
- \`max_files\` (\u53EF\u9009): \u6700\u5927\u626B\u63CF\u6587\u4EF6\u6570\uFF0C\u9ED8\u8BA4 200\uFF08\u6700\u9AD8 500\uFF09\uFF1B
|
|
693
693
|
- \`max_tokens\` (\u53EF\u9009): \u603B Token \u9884\u7B97\u4E0A\u9650\uFF0C\u9ED8\u8BA4 8000\uFF0C\u8D85\u9650\u81EA\u52A8\u5B89\u5168\u622A\u65AD\uFF1B
|
|
694
|
-
- \`include_used_by\` (\u53EF\u9009): \u662F\u5426\u5305\u542B\u7B26\u53F7\u7684\u8F7B\u91CF\u7EA7\u88AB\u5F15\u7528\u5173\u7CFB\u5206\u6790\uFF08\u9ED8\u8BA4 false\uFF0C\u5F00\u542F\u65F6\u7CBE\u51C6\u63D0\u53D6\u88AB\u54EA\u4E9B\u6587\u4EF6\u4F7F\u7528\uFF09\u3002`)),E&&WI.push(`### ${RI++}. \
|
|
695
|
-
\u57FA\u4E8E Tree-sitter WASM \u8BED\
|
|
694
|
+
- \`include_used_by\` (\u53EF\u9009): \u662F\u5426\u5305\u542B\u7B26\u53F7\u7684\u8F7B\u91CF\u7EA7\u88AB\u5F15\u7528\u5173\u7CFB\u5206\u6790\uFF08\u9ED8\u8BA4 false\uFF0C\u5F00\u542F\u65F6\u7CBE\u51C6\u63D0\u53D6\u88AB\u54EA\u4E9B\u6587\u4EF6\u4F7F\u7528\uFF09\u3002`)),E&&WI.push(`### ${RI++}. \u67B6\u6784\u62D3\u6251\u4E0E\u8C03\u7528\u94FE\u4E00\u6B21\u6027\u63D0\u53D6 (code_graph)
|
|
695
|
+
\u57FA\u4E8E Tree-sitter WASM \u8BED\u4E49\u5206\u6790\uFF0C\u6309\u9700\u5728\u5185\u5B58\u4E2D\u6BEB\u79D2\u7EA7\u63D0\u53D6\u7C7B\u7EE7\u627F (extends)\u3001\u63A5\u53E3\u5B9E\u73B0 (implements)\u3001\u6210\u5458\u6240\u6709\u6743 (owns)\u3001\u6A21\u5757\u5F15\u7528 (imports)\u3001\u51FD\u6570/\u65B9\u6CD5\u8C03\u7528\u6D41 (calls) \u62D3\u6251\u3002\u9996\u8981\u4EF7\u503C\u662F\u66FF\u4EE3\u591A\u6B21\u5FAA\u73AF grep_search + read_file \u62FC\u51D1\u5173\u7CFB\uFF1A\u4E00\u6B21\u8C03\u7528\u5373\u5F97\u5168\u5C40\u9AA8\u67B6\u3002DOT/py_stub/networkx \u53EA\u662F\u7D27\u51D1\u6587\u672C\u8F7D\u4F53\uFF0C\u9ED8\u8BA4 dot \u6700\u7701 Token\u3002\u5DE5\u5177\u522B\u540D\u652F\u6301 \`relation_graph\` \u4E0E \`symbol_graph\`\u3002
|
|
696
|
+
|
|
697
|
+
#### IRON RULE\uFF08\u89E6\u53D1\u94C1\u5F8B\uFF09\uFF1A
|
|
698
|
+
- \u5F53\u9700\u8981\u7406\u6E05\u7C7B\u7EE7\u627F\u6811\u3001\u591A\u6A21\u5757 import \u7F51\u7EDC\u6216\u8DE8\u51FD\u6570\u8C03\u7528\u94FE\u8DEF\u65F6\uFF0C\u5FC5\u987B\u4F18\u5148\u8C03\u7528 code_graph \u4E00\u6B65\u83B7\u53D6\u62D3\u6251\uFF0C\u4E25\u7981\u8FDE\u7EED\u6267\u884C\u591A\u6B21 grep_search \u6216\u5FAA\u73AF read_file \u9010\u4E2A\u6587\u4EF6\u62FC\u51D1\u8C03\u7528\u5173\u7CFB\u3002
|
|
699
|
+
- file_outline \u770B\u5355\u6587\u4EF6\u7ED3\u6784\u3001find_references \u770B\u5355\u7B26\u53F7\u5F15\u7528\uFF1B\u53EA\u6709 code_graph \u80FD\u4E00\u6B21\u7ED9\u51FA\u591A\u8DF3\u4E0A\u4E0B\u6E38\u62D3\u6251\u3002
|
|
696
700
|
|
|
697
701
|
#### 1. \u4F7F\u7528\u573A\u666F\uFF1A
|
|
698
702
|
- \u7406\u89E3\u7C7B\u7EE7\u627F\u4F53\u7CFB\uFF08\u5982\u67E5\u770B\u5B50\u7C7B\u6709\u54EA\u4E9B\u7236\u7C7B\u3001\u5B9E\u73B0\u4E86\u54EA\u4E9B\u63A5\u53E3\u3001\u5305\u542B\u54EA\u4E9B\u590D\u5408\u6210\u5458\uFF09\uFF1B
|
|
@@ -710,7 +714,7 @@ ${o}`:o,await vi(b,m,"utf8"),n.push(`grok:${b}`)}}}catch{}try{let a=le(c,".confi
|
|
|
710
714
|
"format": "dot"
|
|
711
715
|
}
|
|
712
716
|
\`\`\`
|
|
713
|
-
- \`target\` (\u5FC5\u586B): \
|
|
717
|
+
- \`target\` (\u5FC5\u586B): \u8981\u5206\u6790\u7684\u7B26\u53F7\u6216\u6A21\u5757\u2014\u2014\u7C7B\u540D/\u51FD\u6570\u540D/\u7B26\u53F7\u540D\uFF08\u5982 \`CustomEngine\`\u3001\`processOrder\`\uFF09\u6216\u6A21\u5757\u76F8\u5BF9\u8DEF\u5F84\uFF08\u5982 \`src/index.ts\`\uFF09\u3002\u60F3\u67E5\u201C\u8C01\u7EE7\u627F/\u8C03\u7528\u5B83\u201D\u76F4\u63A5\u4F20\u7B26\u53F7\u540D\uFF0C\u4E0D\u8981\u8BEF\u4F20\u6210\u5199\u5165\u76EE\u7684\u5730\u8DEF\u5F84\uFF1B\u540C\u65F6\u517C\u5BB9 \`symbol\`/\`path\` \u522B\u540D\u3002
|
|
714
718
|
- \`mode\` (\u53EF\u9009):
|
|
715
719
|
- \`symbol_hierarchy\`\uFF08\u9ED8\u8BA4\uFF09\uFF1A\u7C7B\u7EE7\u627F/\u63A5\u53E3\u5B9E\u73B0/\u6210\u5458\u6240\u6709\u6743\u62D3\u6251\uFF1B
|
|
716
720
|
- \`module_dependency\`\uFF08\u522B\u540D \`module_deps\`\uFF09\uFF1A\u6A21\u5757 import \u5F15\u7528\u7F51\u7EDC\uFF1B
|