同步 enhance/bridge/smoke/retire 模块、vendor 3.3.34、增强面板与 PRD 文档, Hub 接入 hub-routes-prd,含安装/经验/模块说明与 co-integration 运维脚本。 Co-authored-by: Cursor <cursoragent@cursor.com>
18 lines
50 KiB
JavaScript
18 lines
50 KiB
JavaScript
#!/usr/bin/env node
|
|
import{execFileSync as K}from"node:child_process";import Se from"node:crypto";import a from"node:fs";import{createRequire as ge}from"node:module";import _ from"node:os";import i from"node:path";import Et from"node:readline";import{fileURLToPath as Ee,pathToFileURL as bt}from"node:url";const X="/*CO_NO_QUOTA_MCP_V1_START*/",be="/*CO_NO_QUOTA_MCP_V1_END*/",z="/*CO_COMPOSER_BRIDGE_START*/",$e="/*CO_COMPOSER_BRIDGE_END*/",$t="/*CO_NO_QUOTA_EXTHOST_V1_START*/",_e="/*CO_NO_QUOTA_EXTHOST_V1_END*/",Z="/*CO_SWITCH_START*/",Ce="/*CO_SWITCH_END*/",ee="/*CO_NAMETAB_HOOK_START*/",Te="/*CO_NAMETAB_HOOK_END*/",te="/*CO_AGENT_SORT_PERF_V1_START*/",ke="/*CO_AGENT_SORT_PERF_V1_END*/",ne="/*CO_AGENT_SORT_PERF_SVC_V1_START*/",Re="/*CO_AGENT_SORT_PERF_SVC_V1_END*/",re="/*CO_ACTIVATE_AND_SEND_V1_START*/",Ae="/*CO_ACTIVATE_AND_SEND_V1_END*/",oe="/*CO_CONCURRENT_SEND_V1_START*/",Oe="/*CO_CONCURRENT_SEND_V1_END*/",se="/*CO_FIRST_RUN_OVERLAY_V1_START*/",xe="/*CO_FIRST_RUN_OVERLAY_V1_END*/",ce="/*CO_PRIVACY_GUARD_V1_START*/",je="/*CO_PRIVACY_GUARD_V1_END*/",ie="/*CO_UPDATE_BLOCK_START*/",we="/*CO_UPDATE_BLOCK_END*/",ae="/*CO_UPDATE_BLOCK_V21_START*/",Ne="/*CO_UPDATE_BLOCK_V21_END*/",Ie="/*CO_ENDLESS_RETRIES_V1*/",_t="https://api2.cursor.sh/updates",Ct="vs/workbench/workbench.desktop.main.js",Tt="vs/workbench/api/node/extensionHostProcess.js",le=new Date().toISOString().replace(/[:.]/g,"-"),P=`.bak-${le}`,kt=["kc.disableCursorUpdate","kc.corePatchBundle","kc.agentSortPerfPatch","kc.seamlessPatch","kc.nameTabHook","kc.noQuotaMcp","kc.extendStallTimeout","kc.mcpSelfHealing","kc.agentRetries","kc.endlessRetries","kc.extensionProtect","kc.stripeOverride","kc.disableTelemetry","kc.cursorCleanAuto","kc.bgKeepalive","kc.loopReminderHook","kc.noQuotaTogglePort","kc.noQuotaMcp.lastMode","kc.noQuotaMcp.lastEnabled","kc.noQuotaMcp.lastExtVersion","kc.noQuotaMcp.reloadStamps"],Rt=["co-obfuscation-map","kc.noQuotaMcp.reloadReasonTs"],ue=[...kt,...Rt],At=["update.mode","update.showReleaseNotes","telemetry.telemetryLevel","telemetry.enableTelemetry","telemetry.enableCrashReporter"],w=Object.freeze({"workbench.experiments.dynamicConfigOverrides":Object.freeze(["nal_stall_detector_timeout_config"]),"workbench.experiments.featureFlagOverrides":Object.freeze(["enable_self_healing_mcp_ext_host_restart","enableAgentRetries"])}),fe=["co-chat-skill-market-catalog","co-chat-skill-market-md-cache","coMcp.aclSetupComplete","coMcp.aclGrantedPath","kc.firstRunAutoConfig.v1"],N=["kc.nq.installCred.v1","kc.nq.installCred.byId.v1"],L="kc.nq.installCred.byId.v1.",de=["co-license-key","co-license-next-check","co-license-last-licensed","co-license-expires-at","co-license-activated-at","co-license-key-type","co-license-permissions","co-license-max-seen-server-ms","co-license-mono-anchor-local-ms","co-license-install-token"],G=["co-chat-custom-roles","co-chat-custom-roles-schema"];function Ot(){const e=process.env.CO_QUEUE_ROOT;return typeof e=="string"&&e.trim().length>0?i.resolve(e.trim()):i.join(_.homedir(),".cursor","co-mcp-messages")}function xt(){return[Ot(),i.join(_.homedir(),".cursor","role-skills.json")].map(e=>i.resolve(e))}function V(e){let t;try{t=i.resolve(e)}catch{return!1}for(const r of xt())if(t===r||t.startsWith(r+i.sep))return!0;return!1}const pe="co-pending-revoke.json",he="co.noQuota.reloadPending.",ve="co-install-marker.json",De=["kc.co-chat-panel","co-chat.co-chat-panel"],Vn=/^(co-recovered|co-chat|kc|kc-recovered)\.(co-chat-panel|kc-chat-panel)-(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?)$/,jt=process.platform==="darwin"?["Cursor","Code"]:["Cursor","Code","Code - Insiders"],Le="mcp-server.cjs",Pe="chat-panel",Fe=i.dirname(Ee(import.meta.url)),me=i.join(Fe,"..","resources","sqljs"),B=i.join(me,"sql-wasm.js"),Me=15e8,wt=i.join(Fe,"..","resources","sqlite3");function Ke(){const e=process.platform==="win32",t=e?"win32-x64":process.platform==="darwin"?process.arch==="arm64"?"darwin-arm64":"darwin-x64":null;if(t){const r=i.join(wt,t,e?"sqlite3.exe":"sqlite3");if(a.existsSync(r))return r}return e?"sqlite3.exe":"sqlite3"}const k=process.argv.slice(2),U=k.includes("--reinstall-clean"),f={dryRun:k.includes("--dry-run"),yes:k.includes("--yes")||k.includes("-y"),reinstallClean:U,keepStorage:k.includes("--keep-storage")||U,removeExt:k.includes("--full")||U,verbose:k.includes("--verbose"),noKill:k.includes("--no-kill"),quitCursor:k.includes("--quit-cursor"),keepSettings:k.includes("--keep-settings"),withCredentials:k.includes("--with-credentials")||U,cursorDir:Ve("--cursor-dir"),userData:Ve("--user-data")};function Ve(e){const t=k.indexOf(e);return t>=0&&t+1<k.length?k[t+1]:null}const y={reset:"\x1B[0m",bold:"\x1B[1m",dim:"\x1B[2m",green:"\x1B[32m",yellow:"\x1B[33m",red:"\x1B[31m",cyan:"\x1B[36m"},I=e=>console.log(e),m=e=>console.log(` ${y.green}\u2713${y.reset} ${e}`),$=e=>console.log(` ${y.yellow}!${y.reset} ${e}`),j=e=>console.log(` ${y.red}\u2717${y.reset} ${e}`),T=e=>console.log(`
|
|
${y.bold}${y.cyan}${e}${y.reset}`),u=e=>{f.verbose&&console.log(` ${y.dim}\xB7 ${e}${y.reset}`)};function Nt(e,t,r){const n=e.indexOf(t);if(n===-1)return{content:e,mutated:!1};const o=e.indexOf(r,n+t.length);if(o===-1)return{content:e,mutated:!1};const s=e.slice(0,n).replace(/\n+$/,""),c=e.slice(o+r.length).replace(/^\n+/,"");return c.length===0?{content:`${s}
|
|
`,mutated:!0}:{content:`${s}
|
|
${c}`,mutated:!0}}function It(e){let t=!1;const r=[X,be,z,$e,Z,Ce,te,ke,ne,Re,re,Ae,oe,Oe,se,xe,ce,je,ie,we,ae,Ne];for(const n of r)e.includes(n)&&(e=e.split(n).join(""),t=!0);return{content:e,mutated:t}}function vt(e,t,r){const n=e.indexOf(t),o=e.indexOf(r);if(n===-1||o===-1||o<=n)return{content:e,mutated:!1};let s=n;const c=o+r.length,l=s>0?e[s-1]:"",d=c<e.length?e[c]:"";return l===","&&/^[})\];,]/.test(d||"\0")&&(s-=1),{content:e.slice(0,s)+e.slice(c),mutated:!0}}function Dt(e,t,r){let n=e.indexOf(t);const o=e.indexOf(r);if(n===-1||o===-1||o<=n)return{content:e,mutated:!1};let s=o+r.length;const c=n>0?e[n-1]:"",l=s<e.length?e[s]:"";return c===","&&l===","?s+=1:c===","&&l!==","&&(n-=1),{content:e.slice(0,n)+e.slice(s),mutated:!0}}function Lt(e){const t=e.match(/(this\._provider(?:\.set\([A-Za-z_$][\w$]*\)|=[A-Za-z_$][\w$]*),)\s*$/);return t?t[1]:null}function Pt(e){const t=e.match(/this\._provider(?:\.set\(([A-Za-z_$][\w$]*)\)|=([A-Za-z_$][\w$]*)),/);return t&&(t[1]||t[2])||null}function Ft(e){const t=e.indexOf(ee);if(t===-1)return{content:e,mutated:!1,present:!1,failClosed:!1};const r=e.indexOf(Te,t);if(r===-1)return{content:e,mutated:!1,present:!0,failClosed:!0};const n=e.slice(t+ee.length,r),o=Lt(n),s=o?Pt(o):null;if(!o||!s)return{content:e,mutated:!1,present:!0,failClosed:!0};const c=e.slice(0,t),l=e.slice(r+Te.length);return{content:`${c}registerConnectTransportProvider(${s}){${o}${l}`,mutated:!0,present:!0,failClosed:!1}}const Mt=[X,z,Z,ee,te,ne,re,oe,se,ce,ie,ae];function Be(e){return Mt.some(t=>e.includes(t))||e.includes(Ie)}function Kt(e){let t=e,r=!1;const n=[["bridge",z,$e],["agentL2",ne,Re],["main",X,be],["main",te,ke],["main",Z,Ce],["main",re,Ae],["main",oe,Oe],["main",se,xe],["main",ce,je],["main",ae,Ne],["main",ie,we]];for(const[d,h,g]of n)for(;;){const p=d==="bridge"?vt(t,h,g):d==="agentL2"?Dt(t,h,g):Nt(t,h,g);if(!p.mutated)break;t=p.content,r=!0}const o=Ft(t);o.mutated&&(t=o.content,r=!0);const s=`if(${Ie}!0||`;t.includes(s)&&(t=t.split(s).join("if("),r=!0);const c=It(t);c.mutated&&(t=c.content,r=!0);const l=Be(t);return{content:t,mutated:r,residual:l}}function Ue(e){const t=e.indexOf($t),r=e.indexOf(_e);if(t===-1||r===-1||r<=t)return{content:e,mutated:!1};const n=e.slice(0,t).replace(/\n+$/,""),o=e.slice(r+_e.length).replace(/^\n+/,"");return{content:n+o,mutated:!0}}function He(e){return Se.createHash("sha256").update(e).digest("base64").replace(/=+$/,"")}function Vt(){const e=process.env;return process.platform==="win32"?[i.join(e.ProgramFiles??"C:\\Program Files","cursor"),i.join(e.LOCALAPPDATA??"","Programs","Cursor"),i.join(e.LOCALAPPDATA??"","cursor")]:process.platform==="darwin"?["/Applications/Cursor.app/Contents/Resources/app"]:["/usr/share/cursor","/opt/cursor",i.join(_.homedir(),".local/share/cursor")]}const Bt=i.join("out","vs","workbench","workbench.desktop.main.js");function qe(){if(f.userData)return f.userData;const e=_.homedir();return process.platform==="win32"?i.join(process.env.APPDATA??i.join(e,"AppData","Roaming"),"Cursor"):process.platform==="darwin"?i.join(e,"Library","Application Support","Cursor"):i.join(e,".config","Cursor")}function Ge(){return i.join(_.homedir(),".cursor","extensions")}function Je(){return i.join(_.homedir(),".co-chat")}function Ut(){return i.join(_.homedir(),".crte","state.bin")}function Ht(){return i.join(_.homedir(),".co-device-id")}function We(){const e=Je();return Array.from(new Set([Ut(),Ht(),i.join(e,"prefill-license.json"),i.join(e,"installer-signature.json"),i.join(e,"license-backup.json"),i.join(e,"last-input.json"),i.join(e,"license-state.bin"),i.join(e,"last-cleanup.json"),i.join(_.homedir(),".co-cursor-seamless.json")]))}function qt(){const e=[];f.cursorDir&&e.push(f.cursorDir),e.push(...Vt());const t=[],r=new Set;for(const n of e)for(const o of[i.join(n,"resources","app"),n]){const s=i.join(o,Bt),c=i.join(o,["product","json"].join("."));if(a.existsSync(s)&&a.existsSync(c)){const l=i.resolve(o);if(r.has(l))continue;r.add(l);const d=i.join(o,"out","vs","workbench","api","node","extensionHostProcess.js");t.push({installDir:n,root:o,workbench:s,exthost:d,productJson:c})}}return t}function Ye(){const e=[];f.userData&&e.push(f.userData);const t=_.homedir();for(const r of jt)if(process.platform==="win32"){const n=process.env.APPDATA??i.join(t,"AppData","Roaming");e.push(i.join(n,r))}else if(process.platform==="darwin")e.push(i.join(t,"Library","Application Support",r));else{const n=process.env.XDG_CONFIG_HOME??i.join(t,".config");e.push(i.join(n,r))}return Array.from(new Set(e))}function F(){return Ye().map(e=>i.join(e,"User","globalStorage"))}function Qe(){return F().map(e=>i.join(e,"state.vscdb"))}function Xe(){const e=[];for(const t of F())for(const r of De)e.push(i.join(t,r,"storage.json")),e.push(i.join(t,r.toLowerCase(),"storage.json"));return Array.from(new Set(e))}function ze(){return Ye().map(e=>i.join(e,"User","settings.json"))}function Ze(){return/^[ \t]*"coChatPanel\.[A-Za-z0-9_.]+"[ \t]*:[ \t]*(?:"(?:[^"\\]|\\.)*"|true|false|null|-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?)[ \t]*,?[ \t]*\r?\n?/gm}function Gt(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function et(){const e=At.map(Gt).join("|");return new RegExp(`^[ \\t]*"(?:${e})"[ \\t]*:[ \\t]*(?:"(?:[^"\\\\]|\\\\.)*"|true|false|null|-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)[ \\t]*,?[ \\t]*\\r?\\n?`,"gm")}function Jt(e,t){if(e[t]!=="{")return-1;let r=0,n=!1,o=!1;for(let s=t;s<e.length;s+=1){const c=e[s];if(n){o?o=!1:c==="\\"?o=!0:c==='"'&&(n=!1);continue}if(c==='"')n=!0;else if(c==="{")r+=1;else if(c==="}"&&(r-=1,r===0))return s}return-1}function H(e,t){let r=0;if(!e||typeof e!="object"||Array.isArray(e))return{removed:0,emptied:!1};for(const n of t)Object.prototype.hasOwnProperty.call(e,n)&&(delete e[n],r+=1);return{removed:r,emptied:Object.keys(e).length===0}}function tt(e){let t=0;if(!e||typeof e!="object")return 0;for(const[r,n]of Object.entries(w)){const o=e[r];if(!(!o||typeof o!="object"||Array.isArray(o)))for(const s of n)Object.prototype.hasOwnProperty.call(o,s)&&(t+=1)}return t}function Wt(e){let t=0;if(!e||typeof e!="object")return 0;for(const[r,n]of Object.entries(w)){const o=H(e[r],n);t+=o.removed,o.removed>0&&o.emptied&&delete e[r]}return t}function nt(e){let t=e,r=0;for(const[n,o]of Object.entries(w)){const s=`"${n}"`,c=t.indexOf(s);if(c===-1)continue;let l=c+s.length;for(;l<t.length&&(t[l]===" "||t[l]===" ");)l+=1;if(t[l]!==":")continue;for(l+=1;l<t.length&&/\s/.test(t[l]);)l+=1;if(t[l]!=="{")continue;const d=l,h=Jt(t,d);if(h===-1)continue;let g;try{g=JSON.parse(t.slice(d,h+1))}catch{continue}const p=H(g,o);p.removed!==0&&(r+=p.removed,t=t.slice(0,d)+JSON.stringify(g)+t.slice(h+1))}return{text:t,removed:r}}const M={tool:"reset-cursor-env",ts:le,startedAtMs:Date.now(),mode:U?"reinstall-clean":"default",dryRun:f.dryRun,actions:[]};function A(e){try{return a.statSync(e).isFile()?Se.createHash("sha256").update(a.readFileSync(e)).digest("hex"):null}catch{return null}}function S(e,t,r={}){M.actions.push({action:e,path:t,...r})}function Yt(){if(f.dryRun)return u(`[dry-run] \u8DF3\u8FC7 manifest \u843D\u76D8\uFF08\u5171 ${M.actions.length} \u6761\u8BA1\u5212\u52A8\u4F5C\uFF09`),null;if(M.actions.length===0)return null;try{const e=i.join(Je(),"restore-runs"),t=i.join(e,le);a.mkdirSync(t,{recursive:!0});for(const n of[e,t])try{a.chmodSync(n,448)}catch{}const r=i.join(t,"manifest.json");M.finishedAtMs=Date.now(),a.writeFileSync(r,JSON.stringify(M,null,2),"utf-8");try{a.chmodSync(r,384)}catch{}return r}catch(e){return u(`manifest \u843D\u76D8\u5931\u8D25\uFF1A${e.message}`),null}}function rt(e){return/^co-mcp-no-quota(-.*)?\.json$/i.test(e)||/^kc-mcp-no-quota(-.*)?\.json$/i.test(e)||/^co-iife-hb-\d+\.json$/.test(e)||/^kc-iife-hb-\d+\.json$/.test(e)||/^co-iife-authok-\d+\.json$/.test(e)||/^kc-iife-authok-\d+\.json$/.test(e)||e==="co-switch-secret.json"||e==="co-pending-revoke.json"||/^co-mcp-uninstall-.*\.log$/.test(e)}function Qt(e){const t=/-(\d+)\.json$/.exec(typeof e=="string"?e:"");if(!t)return null;const r=Number(t[1]);return Number.isInteger(r)&&r>0?r:null}function Xt(e){const t=typeof e=="string"?Number(e):typeof e=="number"?e:NaN;return Number.isInteger(t)&&t>0?t:null}function ot(e,t,r){const n=[],o=[];for(const s of e||[]){const c=t(s);c!=null&&r.has(c)?o.push(s):n.push(s)}return{blocking:n,liveForeign:o}}function st(e,t){const r=Qt(t);if(r!==null)return r;try{const n=JSON.parse(a.readFileSync(i.join(e,t),"utf-8"));return Xt(n&&n.instanceId)}catch{return null}}function ct(){const e=new Set;try{for(const t of J())t&&typeof t.cmd=="string"&&t.pid!==process.pid&&dt(t.cmd)&&e.add(t.pid)}catch{}return e}function zt(){const e=_.homedir(),t=new Set([i.join(e,".cursor-homes")]),r=i.dirname(e);i.basename(r)===".cursor-homes"&&t.add(r);const n=i.resolve(e),o=new Set,s=[];for(const c of t){let l=[];try{l=a.readdirSync(c,{withFileTypes:!0})}catch{continue}for(const d of l){if(!d.isDirectory())continue;const h=i.join(c,d.name),g=i.resolve(h);g===n||o.has(g)||(o.add(g),s.push(h))}}return s}function Zt(e){const t=[];try{const r=i.join(e,".cursor","extensions");for(const n of a.readdirSync(r))/co-chat|kc-chat|chat-panel/i.test(n)&&t.push(`\u6269\u5C55 ${i.join(r,n)}`)}catch{}for(const r of[i.join(e,".crte","state.bin"),i.join(e,".co-device-id"),i.join(e,".co-chat","prefill-license.json"),i.join(e,".co-chat","installer-signature.json")])a.existsSync(r)&&t.push(r);return t}function v(e){const t=e+P,r=A(e);return f.dryRun?(u(`[dry-run] \u5907\u4EFD ${i.dirname(e)}`),S("backup",e,{backup:t,sha256Before:r,planned:!0}),t):(a.copyFileSync(e,t),S("backup",e,{backup:t,sha256Before:r}),t)}function ye(e,t){if(f.dryRun){u(`[dry-run] \u5199\u56DE ${i.dirname(e)}`),S("edit",e,{planned:!0});return}a.writeFileSync(e,t,"utf-8"),S("edit",e,{sha256After:A(e)})}function it(e){if(V(e))throw new Error(`\u53D7\u4FDD\u62A4\u8DEF\u5F84\uFF0C\u62D2\u7EDD\u6539\u540D\uFF08\u804A\u5929/Agent \u6570\u636E\uFF09\uFF1A${e}`);const t=e+P;return f.dryRun?(u(`[dry-run] \u6539\u540D ${e}`),S("rename-dir",e,{backup:t,planned:!0}),t):(a.renameSync(e,t),S("rename-dir",e,{backup:t}),t)}function at(e,t){const r=[],n=e&&typeof e=="object"?e.checksums:null;if(!n||typeof n!="object")return r;for(const[o,s]of Object.entries(t))n[o]!==void 0&&n[o]!==s&&r.push(o);return r}function en(e,t,r){const n={...e};let o=!1;const s=n.updateUrl;if(s===""||s===null||typeof s>"u"){const l=t&&typeof t=="object"?t.updateUrl:void 0;n.updateUrl=typeof l=="string"&&l.length>0?l:_t,o=!0}const c=at(n,r);if(c.length>0&&n.checksums&&typeof n.checksums=="object"){n.checksums={...n.checksums};for(const l of c)n.checksums[l]=r[l]}return{product:n,updateUrlFixed:o,mismatches:c}}function lt(e){const t={};try{t[Ct]=He(a.readFileSync(e.workbench))}catch{}try{a.existsSync(e.exthost)&&(t[Tt]=He(a.readFileSync(e.exthost)))}catch{}return t}function tn(e){T("\u6B65\u9AA4 1 \xB7 \u4FEE\u590D Cursor \u5E94\u7528\u6587\u4EF6");let t=!1,r=!1;try{const n=a.readFileSync(e.workbench,"utf-8"),{content:o,mutated:s,residual:c}=Kt(n);s?(v(e.workbench),ye(e.workbench,o),t=!0,u(`\u5DF2\u4FEE\u590D\u5E94\u7528\u6587\u4EF6\uFF1A${e.workbench}`)):u("\u5E94\u7528\u6587\u4EF6\u65E0\u9700\u4FEE\u590D"),c&&$(`\u5E94\u7528\u6587\u4EF6\u4ECD\u6709\u6CE8\u5165\u6B8B\u7559\u672A\u80FD\u5B89\u5168\u6E05\u9664\uFF08nameTab fail-closed\uFF1F\u9700 vault \u8FD8\u539F/\u91CD\u88C5 Cursor\uFF09\uFF1A${e.workbench}`)}catch(n){j(`Cursor \u5E94\u7528\u6587\u4EF6\u4FEE\u590D\u5931\u8D25\uFF1A${n.message}`)}try{if(a.existsSync(e.exthost)){const n=a.readFileSync(e.exthost,"utf-8"),{content:o,mutated:s}=Ue(n);s&&(v(e.exthost),ye(e.exthost,o),r=!0,u(`\u5DF2\u4FEE\u590D\u6269\u5C55\u5BBF\u4E3B\u7EC4\u4EF6\uFF1A${e.exthost}`))}}catch(n){j(`\u6269\u5C55\u5BBF\u4E3B\u6587\u4EF6\u4FEE\u590D\u5931\u8D25\uFF1A${n.message}`)}try{const n=e.productJson+".backup",o=lt(e),s=JSON.parse(a.readFileSync(e.productJson,"utf-8"));let c=null;if(a.existsSync(n))try{c=JSON.parse(a.readFileSync(n,"utf-8"))}catch{c=null}const{product:l,updateUrlFixed:d,mismatches:h}=en(s,c,o);h.length>0||d?(v(e.productJson),ye(e.productJson,JSON.stringify(l,null," ")),u(`\u5DF2\u5916\u79D1\u8FD8\u539F Cursor product.json\uFF08${h.length} \u9879 checksum \u91CD\u7B97${d?" + updateUrl \u8FD8\u539F":""}\uFF1Bcommit/version \u7B49\u4FDD\u6301\u5F53\u524D\u4E0D\u56DE\u9000\uFF09`)):u("product.json \u5B8C\u6574\u6027\u6821\u9A8C\u5DF2\u4E0E\u5B9E\u9645\u6587\u4EF6\u4E00\u81F4\uFF0C\u65E0\u9700\u4FEE\u590D")}catch(n){j(`Cursor \u914D\u7F6E\u5B8C\u6574\u6027\u4FEE\u590D\u5931\u8D25\uFF1A${n.message}`)}return m(t||r?"\u5DF2\u4FEE\u590D Cursor \u5E94\u7528\u6587\u4EF6":"Cursor \u5E94\u7528\u6587\u4EF6\u65E0\u9700\u4FEE\u590D"),t||r}function nn(){T("\u6B65\u9AA4 2 \xB7 \u6E05\u7406\u4E34\u65F6\u6587\u4EF6");const e=_.tmpdir();let t=[];try{t=a.readdirSync(e)}catch{t=[]}const r=t.filter(rt),{blocking:n,liveForeign:o}=ot(r,c=>st(e,c),ct());o.length>0&&$(`\u8DF3\u8FC7 ${o.length} \u4E2A\u8FD0\u884C\u4E2D\u5176\u5B83 Cursor \u5B9E\u4F8B\u7684 live \u72B6\u6001\u6587\u4EF6\uFF08\u975E\u76EE\u6807\u5B9E\u4F8B\u3001\u4E0D\u5F71\u54CD\u672C\u6B21\u5B89\u88C5\uFF0C\u4E0D\u5220\uFF09\uFF1A${o.join(", ")}`);let s=0;for(const c of n){const l=i.join(e,c);if(V(l)){$(`\u8DF3\u8FC7\u53D7\u4FDD\u62A4\u8DEF\u5F84\uFF08\u804A\u5929/Agent \u6570\u636E\uFF0C\u7EDD\u4E0D\u5220\uFF09\uFF1A${l}`);continue}if(f.dryRun){u(`[dry-run] \u5220\u9664 ${l}`),S("delete",l,{sha256Before:A(l),planned:!0}),s+=1;continue}try{const d=A(l);a.rmSync(l,{force:!0}),S("delete",l,{sha256Before:d}),u(`\u5DF2\u5220\u9664 ${l}`),s+=1}catch(d){u(`\u5220\u9664\u5931\u8D25 ${l}: ${d.message}`)}}m(s>0?"\u5DF2\u6E05\u7406\u4E34\u65F6\u6587\u4EF6":"\u65E0\u6B8B\u7559\u4E34\u65F6\u6587\u4EF6")}function rn(){if(T("\u6B65\u9AA4 3 \xB7 \u6E05\u7406 co-chat \u672C\u5730\u6388\u6743\u6001"),!f.withCredentials){$("\u672A\u542F\u7528\u51ED\u636E\u6E05\u7406\uFF08--reinstall-clean \u6216 --with-credentials \u624D\u6267\u884C\uFF09\u3002");return}let e=0;for(const t of We())if(a.existsSync(t)){if(V(t)){$(`\u8DF3\u8FC7\u53D7\u4FDD\u62A4\u8DEF\u5F84\uFF08\u804A\u5929/Agent \u6570\u636E\uFF0C\u7EDD\u4E0D\u5220\uFF09\uFF1A${t}`);continue}if(f.dryRun){u(`[dry-run] \u5907\u4EFD\u5E76\u79FB\u9664 ${t}`),S("rename",t,{backup:t+P,sha256Before:A(t),planned:!0}),e+=1;continue}try{const r=t+P,n=A(t);a.renameSync(t,r);try{a.chmodSync(r,384)}catch{}S("rename",t,{backup:r,sha256Before:n}),u(`\u5DF2\u5907\u4EFD\u5E76\u79FB\u9664 ${t}`),e+=1}catch(r){u(`\u672C\u5730\u6388\u6743\u6001\u6E05\u7406\u5931\u8D25 ${t}: ${r.message}`)}}m(e>0?"\u5DF2\u6E05\u7406 co-chat \u672C\u5730\u6388\u6743\u6001":"\u65E0 co-chat \u672C\u5730\u6388\u6743\u6001\u6B8B\u7559")}function on(e){T("\u6B65\u9AA4 8 \xB7 \u91CD\u7F6E\u672C\u5730\u7F13\u5B58\u6570\u636E"),u("\u8D26\u53F7\u767B\u5F55\u4E0D\u5728\u6B64\u8303\u56F4\uFF08\u5728\u7CFB\u7EDF\u94A5\u5319\u4E32/\u6570\u636E\u5E93\uFF09\uFF0C\u4E0D\u53D7\u5F71\u54CD\uFF1B\u4EC5\u672C\u5730\u7F13\u5B58/\u7A97\u53E3\u5E03\u5C40\u4F1A\u7531 Cursor \u81EA\u52A8\u91CD\u5EFA\u3002");const t=["Local Storage","IndexedDB","Cache","Code Cache","GPUCache","Service Worker"];let r=!1;for(const n of t){const o=i.join(e,n);if(a.existsSync(o))try{it(o),u(`\u5DF2\u5907\u4EFD\u5E76\u91CD\u7F6E\uFF1A${n}`),r=!0}catch(s){u(`${n} \u91CD\u7F6E\u5931\u8D25\uFF08\u53EF\u80FD Cursor \u4ECD\u5728\u8FD0\u884C\uFF09\uFF1A${s.message}`)}}m(r?"\u5DF2\u91CD\u7F6E\u672C\u5730\u7F13\u5B58\u6570\u636E":"\u672C\u5730\u7F13\u5B58\u65E0\u9700\u91CD\u7F6E")}function sn(e){T("\u6B65\u9AA4 9 \xB7 \u79FB\u9664\u65E7\u7248\u6269\u5C55");let t=[];try{t=a.readdirSync(e)}catch{u(`\u6269\u5C55\u76EE\u5F55\u4E0D\u5B58\u5728\uFF1A${e}`),m("\u65E0\u65E7\u7248\u6269\u5C55\u53EF\u79FB\u9664");return}const r=t.filter(o=>/co-chat|kc-chat|chat-panel/i.test(o)&&!o.includes(".bak-"));if(r.length===0){ut(e),m("\u65E0\u65E7\u7248\u6269\u5C55\u53EF\u79FB\u9664");return}let n=0;for(const o of r){const s=i.join(e,o);if(V(s)){$(`\u8DF3\u8FC7\u53D7\u4FDD\u62A4\u8DEF\u5F84\uFF08\u804A\u5929/Agent \u6570\u636E\uFF0C\u7EDD\u4E0D\u5220\uFF09\uFF1A${s}`);continue}if(f.dryRun){u(`[dry-run] \u79FB\u9664 ${s}`),S("rename-dir",s,{backup:s+P,planned:!0}),n+=1;continue}try{const c=s+P;a.renameSync(s,c),S("rename-dir",s,{backup:c}),u(`\u5DF2\u79FB\u9664 ${s}`),n+=1}catch(c){u(`\u79FB\u9664\u5931\u8D25 ${s}: ${c.message}`)}}ut(e),m(n>0?"\u5DF2\u79FB\u9664\u65E7\u7248\u6269\u5C55":"\u65E0\u65E7\u7248\u6269\u5C55\u53EF\u79FB\u9664")}function ut(e){const t=i.join(e,"extensions.json");let r;try{r=JSON.parse(a.readFileSync(t,"utf-8"))}catch{return}if(!Array.isArray(r))return;const n=r.filter(o=>{const s=o&&o.location?o.location:null,c=o&&o.relativeLocation||s&&i.basename(String(s.fsPath||s.path||""))||"";return c?a.existsSync(i.join(e,c)):!0});if(n.length!==r.length){if(f.dryRun){u(`[dry-run] \u5254\u9664 extensions.json \u9648\u65E7\u6761\u76EE ${r.length}\u2192${n.length}`),S("edit",t,{planned:!0});return}v(t),a.writeFileSync(t,JSON.stringify(n),"utf-8"),S("edit",t,{sha256After:A(t)}),u(`extensions.json \u5DF2\u5254\u9664 ${r.length-n.length} \u6761\u6307\u5411\u7F3A\u5931\u76EE\u5F55\u7684\u9648\u65E7\u6761\u76EE`)}}function J(){try{return process.platform==="win32"?K("powershell",["-NoProfile","-NonInteractive","-Command",'Get-CimInstance Win32_Process | ForEach-Object { "$($_.ProcessId)|$($_.CommandLine)" }'],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:2e4}).split(/\r?\n/).map(r=>{const n=r.indexOf("|");if(n<=0)return null;const o=Number(r.slice(0,n).trim());return Number.isFinite(o)?{pid:o,cmd:r.slice(n+1)}:null}).filter(Boolean):K("ps",["-axo","pid=,command="],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:2e4}).split(`
|
|
`).map(t=>{const r=t.match(/^\s*(\d+)\s+(.*)$/);return r?{pid:Number(r[1]),cmd:r[2]}:null}).filter(Boolean)}catch(e){return u(`\u8FDB\u7A0B\u679A\u4E3E\u5931\u8D25\uFF08\u8DF3\u8FC7\u7ED3\u675F\u8FDB\u7A0B\uFF09\uFF1A${e.message}`),[]}}function ft(){const e=new Set([Ge()]);return f.userData&&e.add(f.userData),f.cursorDir&&e.add(f.cursorDir),[...e].filter(t=>typeof t=="string"&&t.length>0)}function cn(){if(T("\u6B65\u9AA4 0 \xB7 \u7ED3\u675F\u6B8B\u7559\u540E\u53F0\u8FDB\u7A0B"),f.noKill){$("\u5DF2\u6309 --no-kill \u8DF3\u8FC7\u7ED3\u675F\u8FDB\u7A0B\u3002");return}const e=process.pid,t=ft(),r=J().filter(o=>o.pid!==e&&o.cmd.includes(Le)&&o.cmd.includes(Pe)&&t.some(s=>o.cmd.includes(s)));if(r.length===0){m("\u65E0\u6B8B\u7559\u540E\u53F0\u8FDB\u7A0B");return}let n=0;for(const o of r){if(f.dryRun){u(`[dry-run] \u7ED3\u675F\u8FDB\u7A0B pid=${o.pid}`),n+=1;continue}try{process.kill(o.pid,"SIGTERM"),n+=1,u(`\u5DF2\u7ED3\u675F pid=${o.pid}`)}catch(s){u(`\u7ED3\u675F\u5931\u8D25 pid=${o.pid}: ${s.message}`)}}if(!f.dryRun)for(const o of r)try{process.kill(o.pid,0),process.kill(o.pid,"SIGKILL")}catch{}m(n>0?"\u5DF2\u7ED3\u675F\u6B8B\u7559\u540E\u53F0\u8FDB\u7A0B":"\u65E0\u6B8B\u7559\u540E\u53F0\u8FDB\u7A0B")}function dt(e){return typeof e!="string"?!1:/cursor\.exe/i.test(e)||/\/Cursor[^/]*\.app\/Contents\//.test(e)||/(^|\s)[^\s]*\/cursor(\s|$)/i.test(e)||/(^|\s)cursor(\s|$)/i.test(e)}function an(e,t,r){const n=(t||[]).filter(Boolean).map(o=>{try{return i.resolve(o)}catch{return o}});return n.length===0?[]:(e||[]).filter(o=>o&&typeof o.cmd=="string"&&o.pid!==r&&dt(o.cmd)&&n.some(s=>o.cmd.includes(s)))}function pt(){const e=new Set([qe()]);return f.userData&&e.add(f.userData),[...e]}function ht(){return an(J(),pt(),process.pid)}function ln(e){for(const t of e)try{process.kill(t.pid,"SIGTERM"),u(`\u5DF2\u8BF7\u6C42\u9000\u51FA Cursor pid=${t.pid}`)}catch(r){u(`\u9000\u51FA Cursor \u5931\u8D25 pid=${t.pid}: ${r.message}`)}for(let t=0;t<12;t+=1){if(e.filter(n=>{try{return process.kill(n.pid,0),!0}catch{return!1}}).length===0)return;try{K(process.platform==="win32"?"timeout":"sleep",process.platform==="win32"?["/t","1","/nobreak"]:["0.5"],{stdio:"ignore",timeout:5e3})}catch{break}}for(const t of e)try{process.kill(t.pid,0),process.kill(t.pid,"SIGKILL")}catch{}}function un(){if(f.dryRun)return!0;let e=ht();return e.length===0?!0:(T("\u6B65\u9AA4 0a \xB7 \u68C0\u6D4B Cursor \u8FD0\u884C\u72B6\u6001"),f.quitCursor?($(`\u68C0\u6D4B\u5230\u76EE\u6807 Cursor \u5728\u8FD0\u884C\uFF08${e.length} \u8FDB\u7A0B\uFF09\uFF0C\u6309 --quit-cursor \u4F18\u96C5\u9000\u51FA\u540E\u7EE7\u7EED\u2026`),ln(e),e=ht(),e.length===0?(m("\u76EE\u6807 Cursor \u5DF2\u9000\u51FA\uFF0C\u7EE7\u7EED\u6E05\u7406\u3002"),!0):(j(`\u4ECD\u6709 ${e.length} \u4E2A\u76EE\u6807 Cursor \u8FDB\u7A0B\u672A\u9000\u51FA\uFF0C\u5DF2\u4E2D\u6B62\uFF08\u8BF7\u624B\u52A8\u5B8C\u5168\u9000\u51FA\u540E\u91CD\u8BD5\uFF09\u3002`),process.exitCode=1,!1)):(j("\u68C0\u6D4B\u5230\u76EE\u6807 Cursor \u6B63\u5728\u8FD0\u884C\u2014\u2014\u8FD0\u884C\u4E2D\u6E05\u7406\u4F1A\u4E0E\u5176\u62A2\u5199 workbench/product.json \u2192 \u5B8C\u6574\u6027\u635F\u574F/\u5D29\u6E83\u3002"),j(`\u8FD0\u884C\u4E2D\u8FDB\u7A0B PID\uFF1A${e.map(t=>t.pid).join(", ")}`),j("\u8BF7\u6309\u4EE5\u4E0B\u4EFB\u4E00\u65B9\u5F0F\u5904\u7406\u540E\u91CD\u8BD5\uFF1A"),j(" 1) \u5B8C\u5168\u9000\u51FA Cursor\uFF08\u6CE8\u610F\uFF1A\u70B9 X \u540E\u53EF\u80FD\u4ECD\u6B8B\u7559\u540E\u53F0\u8FDB\u7A0B\uFF09\uFF1B"),j(" 2) \u82E5\u5DF2\u9000\u51FA\u4ECD\u62A5\u6B64\u9519=\u6B8B\u7559\u8FDB\u7A0B\uFF1A\u7528 \u4EFB\u52A1\u7BA1\u7406\u5668(Windows) / \u6D3B\u52A8\u76D1\u89C6\u5668(macOS) / kill(Linux) \u7ED3\u675F\u6240\u6709 Cursor \u8FDB\u7A0B\uFF1B"),j(" 3) Windows \u5B89\u88C5\u811A\u672C\u573A\u666F\uFF1A\u4EE5\u3010\u7BA1\u7406\u5458\u8EAB\u4EFD\u3011\u91CD\u5F00 PowerShell \u91CD\u65B0\u8FD0\u884C\u5B89\u88C5\uFF08\u7BA1\u7406\u5458 Cursor \u666E\u901A\u6743\u9650\u6740\u4E0D\u6389\uFF09\uFF1B"),j(" 4) \u6216\u663E\u5F0F\u52A0 --quit-cursor \u8BA9\u672C\u5DE5\u5177\u66FF\u4F60\u4F18\u96C5\u9000\u51FA\uFF08SIGTERM\u2192SIGKILL \u515C\u5E95\uFF09\u540E\u518D\u6E05\u3002"),u(`\u76EE\u6807 userData scope\uFF1A${pt().join(" , ")}`),process.exitCode=1,!1))}function q(e){return Object.keys(e).filter(t=>!G.includes(t)&&(ue.includes(t)||t.startsWith(he)||f.reinstallClean&&fe.includes(t)||f.withCredentials&&de.includes(t)||f.withCredentials&&(N.includes(t)||t.startsWith(L))))}function mt(){const e=[...ue];f.reinstallClean&&e.push(...fe),f.withCredentials&&e.push(...N,...de);const t=[`${he}%`];f.withCredentials&&t.push(`${L}%`);const r=e.map(()=>"?").join(", "),n=t.map(()=>"key LIKE ?").join(" OR "),o=G.map(()=>"?").join(", "),s=`(key IN (${r}) OR ${n}) AND key NOT IN (${o})`,c=[...e,...t,...G];return{whereSql:s,bind:c}}function yt(e){const t=Object.keys(w);if(t.length===0)return[];const r=t.map(()=>"?").join(", "),n=[],o=e.prepare(`SELECT key, value FROM ItemTable WHERE key IN (${r})`);o.bind(t);try{for(;o.step();){const s=o.get(),c=String(s[0]??""),l=w[c];if(!l)continue;let d;try{d=JSON.parse(typeof s[1]=="string"?s[1]:String(s[1]??""))}catch{continue}const h=H(d,l);h.removed!==0&&n.push({key:c,newValue:h.emptied?null:JSON.stringify(d)})}}finally{o.free()}return n}function fn(e,t){for(const r of t)r.newValue===null?e.run("DELETE FROM ItemTable WHERE key = ?",[r.key]):e.run("UPDATE ItemTable SET value = ? WHERE key = ?",[r.newValue,r.key])}function dn(){const e=F().map(t=>i.join(t,pe));return e.push(i.join(_.tmpdir(),pe)),Array.from(new Set(e))}function W(e){const t=Array.from(new Set((e||[]).filter(r=>/^[0-9a-f]{16}$/i.test(r))));if(t.length===0)return 0;if(f.dryRun)return u(`[dry-run] pending-revoke \u5165\u961F ${t.length} \u4E2A installId`),t.length;for(const r of dn())try{let n=[];if(a.existsSync(r))try{const s=JSON.parse(a.readFileSync(r,"utf-8"));Array.isArray(s)&&(n=s.filter(c=>typeof c=="string"))}catch{}const o=Array.from(new Set([...n,...t]));return a.mkdirSync(i.dirname(r),{recursive:!0}),a.writeFileSync(r,JSON.stringify(o),"utf-8"),u(`pending-revoke \u5165\u961F ${t.length} \u2192 ${r}\uFF08\u5171 ${o.length}\uFF09`),t.length}catch(n){u(`pending-revoke \u5199 ${r} \u5931\u8D25\uFF1A${n.message}`)}return 0}function Y(e){const t=[],r=n=>{if(!(!n||typeof n!="object")){typeof n.installId=="string"&&/^[0-9a-f]{16}$/i.test(n.installId)&&t.push(n.installId.toLowerCase());for(const o of Object.values(n))o&&typeof o=="object"&&r(o)}};try{r(typeof e=="string"?JSON.parse(e):e)}catch{}return t}function pn(){let e=0;for(const t of Xe())if(a.existsSync(t))try{const r=a.readFileSync(t,"utf-8");if(!r.trim())continue;const n=JSON.parse(r);if(typeof n!="object"||n===null)continue;const o=q(n),s=tt(n);if(o.length===0&&s===0)continue;if(f.dryRun){u(`[dry-run] storage.json \u5220\u9664 ${o.length} \u4E2A key + ${s} \u4E2A override \u5B50\u952E\uFF1A${i.dirname(t)}`),e+=1;continue}v(t);for(const l of o)delete n[l];const c=Wt(n);a.writeFileSync(t,JSON.stringify(n),"utf-8"),S("edit",t,{keysDeleted:o.length,overrideSubkeysDeleted:c,sha256After:A(t)}),u(`storage.json \u5DF2\u5220\u9664 ${o.length} \u4E2A key + ${c} \u4E2A override \u5B50\u952E\uFF1A${t}`),e+=1}catch(r){u(`storage.json \u5904\u7406\u5931\u8D25 ${t}: ${r.message}`)}return e}function St(e){const t=[],r=[];let n;try{n=e.prepare("SELECT key, value FROM ItemTable WHERE key LIKE '%chat-panel'")}catch{return{plan:t,credInstallIds:r}}try{for(;n.step();){const o=n.get(),s=String(o[0]??"");let c;try{c=JSON.parse(typeof o[1]=="string"?o[1]:String(o[1]??""))}catch{continue}if(!c||typeof c!="object"||Array.isArray(c))continue;const l=q(c);if(l.length===0)continue;for(const h of l)(h===N[0]||h===N[1]||h.startsWith(L))&&r.push(...Y(c[h])),delete c[h];const d=Object.keys(c).length===0?null:JSON.stringify(c);t.push({rowKey:s,newValue:d,delCount:l.length})}}finally{n.free()}return{plan:t,credInstallIds:r}}function hn(e,t){for(const r of t)r.newValue===null?e.run("DELETE FROM ItemTable WHERE key = ?",[r.rowKey]):e.run("UPDATE ItemTable SET value = ? WHERE key = ?",[r.newValue,r.rowKey])}function R(e){return`'${String(e).replace(/'/g,"''")}'`}function gt(){const e=[...ue];f.reinstallClean&&e.push(...fe),f.withCredentials&&e.push(...N,...de);const t=[`${he}%`];f.withCredentials&&t.push(`${L}%`);const r=e.map(R).join(", "),n=t.map(s=>`key LIKE ${R(s)}`).join(" OR "),o=G.map(R).join(", ");return`(key IN (${r})${n?` OR ${n}`:""}) AND key NOT IN (${o})`}function D(e,t,r){const o=(K(e,["-json","-readonly",t,r],{encoding:"utf-8",maxBuffer:268435456})||"").trim();return o?JSON.parse(o):[]}function mn(e,t,r){K(e,[t],{input:r,encoding:"utf-8",maxBuffer:64*1024*1024})}function Q(e){try{const t=typeof e=="string"?e:e==null?"":String(e);return t?JSON.parse(t):null}catch{return null}}function yn(e,t,r){const n=Array.from(new Set((r||[]).filter(Boolean)));if(n.length===0)return null;const o=new Date().toISOString().replace(/[:.]/g,"-"),s=`${t}.co-rows-${o}.json`;try{const c=n.map(R).join(", "),l=D(e,t,`SELECT key, value FROM ItemTable WHERE key IN (${c})`);return a.writeFileSync(s,JSON.stringify({source:t,savedAt:o,rows:l}),"utf-8"),S("backup",t,{backup:s,rows:l.length,logical:!0}),u(`state.vscdb(>2GB) \u903B\u8F91\u884C\u5907\u4EFD ${l.length} \u884C \u2192 ${s}`),s}catch(c){return u(`state.vscdb(>2GB) \u903B\u8F91\u884C\u5907\u4EFD\u5931\u8D25\uFF08best-effort\uFF0C\u7EE7\u7EED surgical \u6E05\u7406\uFF09\uFF1A${c.message}`),null}}function Sn(e){const t=Ke(),r=gt();if(f.withCredentials)try{const p=N.map(R).join(", "),E=D(t,e,`SELECT value FROM ItemTable WHERE key IN (${p}) OR key LIKE ${R(`${L}%`)}`),b=[];for(const C of E)b.push(...Y(C.value));b.length>0&&W(b)}catch(p){u(`installCred installId \u63D0\u53D6\u5931\u8D25\uFF08big/sqlite3\uFF0C\u8DF3\u8FC7 pending-revoke\uFF09\uFF1A${p.message}`)}let n=[];try{n=D(t,e,`SELECT key FROM ItemTable WHERE ${r}`).map(E=>String(E.key??""))}catch(p){u(`state.vscdb(big) \u9876\u5C42 key \u67E5\u8BE2\u5931\u8D25 ${e}: ${p.message}`)}const o=[],s=Object.keys(w);if(s.length>0)try{const p=D(t,e,`SELECT key, value FROM ItemTable WHERE key IN (${s.map(R).join(", ")})`);for(const E of p){const b=w[E.key];if(!b)continue;const C=Q(E.value);if(C===null)continue;const O=H(C,b);O.removed!==0&&o.push({key:E.key,newValue:O.emptied?null:JSON.stringify(C)})}}catch(p){u(`state.vscdb(big) experiments override \u67E5\u8BE2\u5931\u8D25 ${e}: ${p.message}`)}const c=[],l=[];try{const p=D(t,e,"SELECT key, value FROM ItemTable WHERE key LIKE '%chat-panel'");for(const E of p){const b=Q(E.value);if(!b||typeof b!="object"||Array.isArray(b))continue;const C=q(b);if(C.length===0)continue;for(const x of C)(x===N[0]||x===N[1]||x.startsWith(L))&&l.push(...Y(b[x])),delete b[x];const O=Object.keys(b).length===0?null:JSON.stringify(b);c.push({rowKey:String(E.key??""),newValue:O,delCount:C.length})}}catch(p){u(`state.vscdb(big) Memento blob \u67E5\u8BE2\u5931\u8D25 ${e}: ${p.message}`)}f.withCredentials&&l.length>0&&W(l);const d=c.reduce((p,E)=>p+E.delCount,0);if(n.length===0&&o.length===0&&c.length===0)return 0;if(f.dryRun)return u(`[dry-run] state.vscdb(>2GB\u2192sqlite3 CLI) \u5220\u9664 ${n.length} \u9876\u5C42 key + ${o.length} override \u884C + ${d} Memento \u5D4C\u5957\u5B50\u952E\uFF08${c.length} blob \u884C\uFF09\uFF1A${i.dirname(e)}`),1;let h=`PRAGMA busy_timeout=8000;
|
|
BEGIN IMMEDIATE;
|
|
`;n.length>0&&(h+=`DELETE FROM ItemTable WHERE ${r};
|
|
`);for(const p of o)h+=p.newValue===null?`DELETE FROM ItemTable WHERE key = ${R(p.key)};
|
|
`:`UPDATE ItemTable SET value = ${R(p.newValue)} WHERE key = ${R(p.key)};
|
|
`;for(const p of c)h+=p.newValue===null?`DELETE FROM ItemTable WHERE key = ${R(p.rowKey)};
|
|
`:`UPDATE ItemTable SET value = ${R(p.newValue)} WHERE key = ${R(p.rowKey)};
|
|
`;h+=`COMMIT;
|
|
`;const g=[...n,...o.map(p=>p.key),...c.map(p=>p.rowKey)];yn(t,e,g);try{mn(t,e,h)}catch(p){return u(`state.vscdb(big) sqlite3 \u5199\u5165\u5931\u8D25 ${e}: ${p.message}`),0}return S("edit",e,{keysDeleted:n.length,overrideRowsChanged:o.length,mementoBlobSubkeysDeleted:d,via:"sqlite3-cli",sha256After:A(e)}),u(`state.vscdb(>2GB\u2192sqlite3 CLI) \u5DF2\u5220\u9664 ${n.length} \u9876\u5C42 key + ${o.length} override \u884C + ${d} Memento \u5D4C\u5957\u5B50\u952E\uFF1A${e}`),1}function gn(e){const t=Ke(),r=[],n=gt();try{const o=D(t,e,`SELECT COUNT(*) AS n FROM ItemTable WHERE ${n}`),s=o.length>0?Number(o[0].n??0):0;s>0&&r.push(`state.vscdb \u6B8B\u7559 ${s} \u4E2A key\uFF1A${e}`)}catch{}try{const o=Object.keys(w);if(o.length>0){const s=D(t,e,`SELECT key, value FROM ItemTable WHERE key IN (${o.map(R).join(", ")})`);let c=0;for(const l of s){const d=w[l.key];if(!d)continue;const h=Q(l.value);h!==null&&H(h,d).removed>0&&(c+=1)}c>0&&r.push(`state.vscdb \u6B8B\u7559 ${c} \u4E2A experiments override \u884C\uFF1A${e}`)}}catch{}try{const o=D(t,e,"SELECT key, value FROM ItemTable WHERE key LIKE '%chat-panel'");let s=0,c=0;for(const l of o){const d=Q(l.value);if(!d||typeof d!="object"||Array.isArray(d))continue;const h=q(d);h.length>0&&(s+=h.length,c+=1)}s>0&&r.push(`state.vscdb Memento blob \u6B8B\u7559 ${s} \u4E2A\u5D4C\u5957\u8865\u4E01\u5B50\u952E\uFF08${c} blob \u884C\uFF09\uFF1A${e}`)}catch{}return r}async function En(){const e=Qe().filter(s=>a.existsSync(s));if(e.length===0)return 0;let t=null;if(a.existsSync(B))try{const c=ge(import.meta.url)(B);typeof c=="function"?t=await c({locateFile:l=>i.join(me,l)}):u("sql.js \u5165\u53E3\u975E\u51FD\u6570\uFF08\u5927\u5E93\u4ECD\u53EF\u8D70 sqlite3 CLI\uFF09")}catch(s){u(`sql.js \u521D\u59CB\u5316\u5931\u8D25\uFF08\u5927\u5E93\u4ECD\u53EF\u8D70 sqlite3 CLI\uFF09\uFF1A${s.message}`)}else u(`\u672A\u627E\u5230\u5185\u7F6E sql.js\uFF08\u5927\u5E93\u5C06\u5C1D\u8BD5\u81EA\u5E26 sqlite3 CLI\uFF09\uFF1A${B}`);const{whereSql:r,bind:n}=mt();let o=0;for(const s of e)try{let c=0;try{c=a.statSync(s).size}catch{c=0}if(c>Me){o+=Sn(s);continue}if(!t){$("\u672A\u627E\u5230\u53EF\u7528 sql.js\uFF0C\u8DF3\u8FC7\u8BE5 state.vscdb \u6E05\u7406\uFF08\u8BF7\u7528\u968F\u63D2\u4EF6\u5206\u53D1\u7684\u811A\u672C\u526F\u672C\u8FD0\u884C\uFF09\u3002");continue}const l=a.readFileSync(s),d=new t.Database(new Uint8Array(l));try{if(f.withCredentials)try{const O=[],x=d.prepare("SELECT value FROM ItemTable WHERE key IN (?, ?) OR key LIKE ?");x.bind([...N,`${L}%`]);try{for(;x.step();)O.push(...Y(x.get()[0]))}finally{x.free()}O.length>0&&W(O)}catch(O){u(`installCred installId \u63D0\u53D6\u5931\u8D25\uFF08\u8DF3\u8FC7 pending-revoke\uFF09\uFF1A${O.message}`)}const h=[],g=d.prepare(`SELECT key FROM ItemTable WHERE ${r}`);g.bind(n);try{for(;g.step();)h.push(String(g.get()[0]??""))}finally{g.free()}const p=yt(d),{plan:E,credInstallIds:b}=St(d);f.withCredentials&&b.length>0&&W(b);const C=E.reduce((O,x)=>O+x.delCount,0);if(h.length===0&&p.length===0&&E.length===0)continue;if(f.dryRun){u(`[dry-run] state.vscdb \u5220\u9664 ${h.length} \u9876\u5C42 key + ${p.length} override \u884C + ${C} Memento \u5D4C\u5957\u5B50\u952E\uFF08${E.length} blob \u884C\uFF09\uFF1A${i.dirname(s)}`),o+=1;continue}h.length>0&&d.run(`DELETE FROM ItemTable WHERE ${r}`,n),fn(d,p),hn(d,E),v(s),a.writeFileSync(s,Buffer.from(d.export())),S("edit",s,{keysDeleted:h.length,overrideRowsChanged:p.length,mementoBlobSubkeysDeleted:C,sha256After:A(s)}),u(`state.vscdb \u5DF2\u5220\u9664 ${h.length} \u9876\u5C42 key + ${p.length} override \u884C + ${C} Memento \u5D4C\u5957\u5B50\u952E\uFF1A${s}`),o+=1}finally{d.close()}}catch(c){u(`state.vscdb \u5904\u7406\u5931\u8D25 ${s}: ${c.message}`)}return o}async function bn(){T("\u6B65\u9AA4 4 \xB7 \u6E05\u7406\u63D2\u4EF6\u6301\u4E45\u5316\u72B6\u6001");let e=0;try{e+=pn()}catch(t){u(`storage.json \u6E05\u7406\u629B\u9519\uFF1A${t.message}`)}try{e+=await En()}catch(t){u(`state.vscdb \u6E05\u7406\u629B\u9519\uFF1A${t.message}`)}m(e>0?"\u5DF2\u6E05\u7406\u63D2\u4EF6\u6301\u4E45\u5316\u72B6\u6001":"\u65E0\u6301\u4E45\u5316\u72B6\u6001\u9700\u6E05\u7406")}function $n(){T("\u6B65\u9AA4 5 \xB7 \u5220\u9664\u5B89\u88C5\u6807\u8BB0");let e=0;for(const t of F()){let r=[];try{r=a.readdirSync(t)}catch{continue}for(const n of r){const o=i.join(t,n,ve);if(a.existsSync(o)){if(V(o)){$(`\u8DF3\u8FC7\u53D7\u4FDD\u62A4\u8DEF\u5F84\uFF08\u804A\u5929/Agent \u6570\u636E\uFF0C\u7EDD\u4E0D\u5220\uFF09\uFF1A${o}`);continue}if(f.dryRun){u(`[dry-run] \u5220\u9664\u6807\u8BB0 ${o}`),S("delete",o,{sha256Before:A(o),planned:!0}),e+=1;continue}try{v(o),a.rmSync(o,{force:!0}),S("delete",o,{}),u(`\u5DF2\u5220\u9664\u6807\u8BB0 ${o}`),e+=1}catch(s){u(`\u6807\u8BB0\u5220\u9664\u5931\u8D25 ${o}: ${s.message}`)}}}}if(f.removeExt)for(const t of F())for(const r of De){const n=i.join(t,r);if(a.existsSync(n))try{it(n),u(`\u5DF2\u79FB\u9664\u6269\u5C55\u72B6\u6001\u76EE\u5F55 ${n}`),e+=1}catch(o){u(`\u6269\u5C55\u72B6\u6001\u76EE\u5F55\u79FB\u9664\u5931\u8D25 ${n}: ${o.message}`)}}m(e>0?"\u5DF2\u5220\u9664\u5B89\u88C5\u6807\u8BB0":"\u65E0\u5B89\u88C5\u6807\u8BB0\u6B8B\u7559")}function _n(){T("\u6B65\u9AA4 6 \xB7 \u6E05\u7406 MCP \u6CE8\u518C");const e=i.join(_.homedir(),".cursor","mcp.json");if(!a.existsSync(e)){m("\u65E0 MCP \u6CE8\u518C\u6B8B\u7559");return}try{const t=JSON.parse(a.readFileSync(e,"utf-8"));if(!t||typeof t!="object"||!t.mcpServers||!("co-mcp"in t.mcpServers)){m("\u65E0 MCP \u6CE8\u518C\u6B8B\u7559");return}if(f.dryRun){u("[dry-run] \u5220\u9664 mcp.json \u7684 co-mcp \u6CE8\u518C"),m("\u5DF2\u6E05\u7406 MCP \u6CE8\u518C");return}v(e),delete t.mcpServers["co-mcp"],a.writeFileSync(e,JSON.stringify(t,null,2),"utf-8"),S("edit",e,{sha256After:A(e)}),u("\u5DF2\u5220\u9664 mcp.json \u7684 co-mcp \u6CE8\u518C"),m("\u5DF2\u6E05\u7406 MCP \u6CE8\u518C")}catch(t){u(`mcp.json \u6E05\u7406\u5931\u8D25\uFF1A${t.message}`),m("MCP \u6CE8\u518C\u6E05\u7406\u8DF3\u8FC7")}}function Cn(){if(T("\u6B65\u9AA4 7 \xB7 \u6E05\u7406\u63D2\u4EF6\u7528\u6237\u8BBE\u7F6E"),f.keepSettings){$("\u5DF2\u6309 --keep-settings \u8DF3\u8FC7\u7528\u6237\u8BBE\u7F6E\u6E05\u7406\u3002");return}let e=0;for(const t of ze())if(a.existsSync(t))try{const r=a.readFileSync(t,"utf-8");let n=r.replace(Ze(),"").replace(et(),"");if(n=nt(n).text,n===r)continue;if(f.dryRun){u(`[dry-run] settings.json \u79FB\u9664 coChatPanel.* / \u539F\u751F\u8865\u4E01\u9879\uFF1A${t}`),e+=1;continue}v(t),a.writeFileSync(t,n,"utf-8"),S("edit",t,{sha256After:A(t)}),u(`settings.json \u5DF2\u79FB\u9664 coChatPanel.* / \u539F\u751F\u8865\u4E01\u9879\uFF1A${t}`),e+=1}catch(r){u(`settings.json \u5904\u7406\u5931\u8D25 ${t}: ${r.message}`)}m(e>0?"\u5DF2\u6E05\u7406\u63D2\u4EF6\u7528\u6237\u8BBE\u7F6E":"\u65E0\u63D2\u4EF6\u7528\u6237\u8BBE\u7F6E\u6B8B\u7559")}function Tn(){T("\u6B65\u9AA4 10 \xB7 \u8DE8 home \u626B\u63CF\uFF08\u591A\u8D26\u53F7 / \u591A\u5B9E\u4F8B\uFF09");const e=zt();if(e.length===0){m("\u65E0\u5144\u5F1F home\uFF08~/.cursor-homes/*\uFF09");return}let t=0;for(const r of e){const n=Zt(r);if(n.length===0){u(`\u5144\u5F1F home \u5E72\u51C0\uFF1A${r}`);continue}t+=1,$(`\u5144\u5F1F home \u4ECD\u6709 co-chat \u6B8B\u7559\uFF1A${r}\uFF08${n.length} \u9879\uFF09`);for(const o of n)u(` \xB7 ${o}`)}t>0?$(`\u5171 ${t} \u4E2A\u5144\u5F1F home \u6709\u6B8B\u7559\uFF1A\u8FD9\u4E9B\u8D26\u53F7/\u5B9E\u4F8B\u542F\u52A8\u65F6\u53EF\u80FD\u91CD\u65B0 patch \u5171\u4EAB Cursor\u3002\u8BF7\u5728\u5BF9\u5E94\u8D26\u53F7\u4E0B\u7528\u540C\u4E00\u5361\u5BC6\u91CD\u88C5 / \u8FD0\u884C\u672C\u5DE5\u5177\u6E05\u7406\u3002`):m("\u5144\u5F1F home \u5747\u65E0 co-chat \u6B8B\u7559")}function kn(e){try{const t=JSON.parse(a.readFileSync(e,"utf-8"));if(!t||typeof t!="object"||Array.isArray(t))return!1;const r=t.updateUrl;return r===""||r===null||typeof r>"u"}catch{return!1}}function Rn(e,t){const r=[];for(const n of e){try{Be(a.readFileSync(n.workbench,"utf-8"))&&r.push(`workbench \u6CE8\u5165\u672A\u6E05\uFF1A${n.workbench}`)}catch{}try{a.existsSync(n.exthost)&&Ue(a.readFileSync(n.exthost,"utf-8")).mutated&&r.push(`extHost \u6CE8\u5165\u672A\u6E05\uFF1A${n.exthost}`)}catch{}try{a.existsSync(n.productJson)&&kn(n.productJson)&&r.push(`product.json updateUrl \u672A\u8FD8\u539F\uFF1A${n.productJson}`)}catch{}}try{const n=_.tmpdir(),o=a.readdirSync(n).filter(c=>rt(c)&&c!==pe),{blocking:s}=ot(o,c=>st(n,c),ct());s.length>0&&r.push(`tmp \u6B8B\u7559 ${s.length} \u9879`)}catch{}for(const n of Xe())if(a.existsSync(n))try{const o=JSON.parse(a.readFileSync(n,"utf-8"));o&&typeof o=="object"&&(q(o).length>0&&r.push(`storage.json \u6B8B\u7559 key\uFF1A${n}`),tt(o)>0&&r.push(`storage.json \u6B8B\u7559 experiments override \u5B50\u952E\uFF1A${n}`))}catch{}try{const n=i.join(_.homedir(),".cursor","mcp.json");if(a.existsSync(n)){const o=JSON.parse(a.readFileSync(n,"utf-8"));o?.mcpServers&&"co-mcp"in o.mcpServers&&r.push("mcp.json \u4ECD\u6709 co-mcp \u6CE8\u518C")}}catch{}if(f.removeExt)try{const n=a.readdirSync(t).filter(o=>/co-chat|kc-chat|chat-panel/i.test(o)&&!o.includes(".bak-"));n.length>0&&r.push(`\u6269\u5C55\u76EE\u5F55\u6B8B\u7559 ${n.length} \u9879`)}catch{}for(const n of F()){let o=[];try{o=a.readdirSync(n)}catch{continue}for(const s of o)a.existsSync(i.join(n,s,ve))&&r.push(`\u5B89\u88C5\u6807\u8BB0\u6B8B\u7559\uFF1A${i.join(n,s)}`)}if(!f.noKill){const n=process.pid,o=ft(),s=J().filter(c=>c.pid!==n&&c.cmd.includes(Le)&&c.cmd.includes(Pe)&&o.some(l=>c.cmd.includes(l)));s.length>0&&r.push(`\u5B64\u513F mcp-server \u4ECD\u5B58\u6D3B ${s.length} \u4E2A`)}if(f.withCredentials)for(const n of We())a.existsSync(n)&&r.push(`co-chat \u51ED\u636E\u6B8B\u7559\uFF1A${n}`);if(!f.keepSettings){for(const n of ze())if(a.existsSync(n))try{const o=a.readFileSync(n,"utf-8");Ze().test(o)&&r.push(`settings.json coChatPanel.* \u6B8B\u7559\uFF1A${n}`),et().test(o)&&r.push(`settings.json \u539F\u751F\u8865\u4E01\u6807\u91CF\u6B8B\u7559\uFF08update.*/telemetry.*\uFF09\uFF1A${n}`),nt(o).removed>0&&r.push(`settings.json experiments override \u5B50\u952E\u6B8B\u7559\uFF1A${n}`)}catch{}}for(const n of e)try{const o=JSON.parse(a.readFileSync(n.productJson,"utf-8")),s=at(o,lt(n));s.length>0&&r.push(`product.json \u5B8C\u6574\u6027 checksum \u4E0D\u4E00\u81F4(${s.join(",")})\uFF1A${n.productJson}`)}catch{}return r}async function An(){const e=Qe().filter(s=>a.existsSync(s));if(e.length===0)return[];let t=null;if(a.existsSync(B))try{const c=ge(import.meta.url)(B);typeof c=="function"&&(t=await c({locateFile:l=>i.join(me,l)}))}catch{t=null}const{whereSql:r,bind:n}=mt(),o=[];for(const s of e)try{let c=0;try{c=a.statSync(s).size}catch{c=0}if(c>Me){o.push(...gn(s));continue}if(!t)continue;const l=new t.Database(new Uint8Array(a.readFileSync(s)));try{let d=0;const h=l.prepare(`SELECT COUNT(*) FROM ItemTable WHERE ${r}`);h.bind(n);try{h.step()&&(d=Number(h.get()[0]??0))}finally{h.free()}d>0&&o.push(`state.vscdb \u6B8B\u7559 ${d} \u4E2A key\uFF1A${s}`);const g=yt(l);g.length>0&&o.push(`state.vscdb \u6B8B\u7559 ${g.length} \u4E2A experiments override \u884C\uFF1A${s}`);const{plan:p}=St(l),E=p.reduce((b,C)=>b+C.delCount,0);E>0&&o.push(`state.vscdb Memento blob \u6B8B\u7559 ${E} \u4E2A\u5D4C\u5957\u8865\u4E01\u5B50\u952E\uFF08${p.length} blob \u884C\uFF09\uFF1A${s}`)}finally{l.close()}}catch{}return o}async function On(e,t){T("\u6B65\u9AA4 11 \xB7 \u5220\u540E\u81EA\u6821\uFF08\u4EC5\u8BCA\u65AD\uFF0C\u4E0D\u963B\u65AD\u5B89\u88C5\uFF09");const r=[...Rn(e,t),...await An()];if(r.length===0)m("\u5220\u540E\u81EA\u6821\u901A\u8FC7\uFF1A\u4E3B home \u65E0 co-chat \u6B8B\u7559");else{m("\u5220\u540E\u81EA\u6821\u5B8C\u6210");for(const n of r)u(n)}return r}async function xn(e){if(f.yes||f.dryRun)return!0;const t=Et.createInterface({input:process.stdin,output:process.stdout});return new Promise(r=>{t.question(`${y.yellow}${e} [y/N] ${y.reset}`,n=>{t.close(),r(/^y(es)?$/i.test(n.trim()))})})}async function jn(){I(`${y.bold}\u256D\u2500 co-chat \xB7 \u73AF\u5883\u590D\u539F\u5DE5\u5177\uFF08\u72EC\u7ACB\u5378\u8F7D\uFF0C\u4E0D\u4F9D\u8D56 Cursor \u5378\u8F7D\u673A\u5236\uFF09\u2500\u256E${y.reset}`),I(`${y.bold}\u2502 \u8BF7\u5148\u5B8C\u5168\u9000\u51FA Cursor \u518D\u8FD0\u884C\uFF1B\u6240\u6709\u6539\u52A8\u4F1A\u81EA\u52A8\u5907\u4EFD\u3001\u53EF\u8FD8\u539F\u3002 \u2502${y.reset}`),I(`${y.bold}\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256F${y.reset}`),f.dryRun&&$("\u9884\u89C8\u6A21\u5F0F\uFF1A\u53EA\u663E\u793A\u5C06\u6267\u884C\u7684\u64CD\u4F5C\uFF0C\u4E0D\u6539\u52A8\u4EFB\u4F55\u6587\u4EF6\u3002"),f.reinstallClean&&I(`${y.cyan}\u91CD\u88C5\u6E05\u7406\u6A21\u5F0F\uFF08--reinstall-clean\uFF09\uFF1A\u6E05 co-chat \u672C\u5730\u6001\u5168\u96C6\uFF0C\u4FDD\u7559\u7528\u6237\u5185\u5BB9\u8D44\u4EA7\u3002${y.reset}`);const e=qt(),t=qe(),r=Ge();if(T("\u68C0\u67E5\u73AF\u5883"),e.length===0)$("\u672A\u627E\u5230 Cursor \u5E94\u7528\u5B89\u88C5\uFF08\u5C06\u4ECD\u6E05\u7406\u7528\u6237\u6570\u636E/\u72B6\u6001/\u6807\u8BB0\u6B8B\u7559\uFF09\u3002\u5982\u9700\u4FEE\u590D\u5E94\u7528\u6587\u4EF6\u8BF7\u52A0 --cursor-dir\u3002");else{m(`\u5DF2\u5B9A\u4F4D ${e.length} \u4E2A Cursor \u5B89\u88C5`);for(const s of e)u(`Cursor: ${s.workbench}`)}if(u(`\u7528\u6237\u6570\u636E: ${a.existsSync(t)?t:t+" (\u4E0D\u5B58\u5728)"}`),I(`
|
|
\u5C06\u6267\u884C\uFF1A${f.noKill?"":"\u7ED3\u675F\u6B8B\u7559\u8FDB\u7A0B \xB7 "}\u4FEE\u590D\u5E94\u7528\u6587\u4EF6 \xB7 \u6E05\u7406\u4E34\u65F6\u6587\u4EF6${f.withCredentials?" \xB7 \u6E05\u7406 co-chat \u672C\u5730\u6388\u6743\u6001":""} \xB7 \u6E05\u7406\u6301\u4E45\u5316\u72B6\u6001/\u6807\u8BB0/MCP \u6CE8\u518C${f.keepSettings?"":" \xB7 \u6E05\u7406\u7528\u6237\u8BBE\u7F6E"}${f.keepStorage?"":" \xB7 \u91CD\u7F6E\u672C\u5730\u7F13\u5B58"}${f.removeExt?" \xB7 \u79FB\u9664\u65E7\u7248\u6269\u5C55":""}`),!await xn(`
|
|
\u786E\u8BA4 Cursor \u5DF2\u5B8C\u5168\u9000\u51FA\uFF0C\u5E76\u6267\u884C\u4EE5\u4E0A\u590D\u539F\uFF1F`)){$("\u5DF2\u53D6\u6D88\u3002");return}if(!un())return;cn();for(const s of e)tn(s);nn(),rn(),await bn(),$n(),_n(),Cn(),f.keepStorage||(a.existsSync(t)?on(t):$(`\u6B65\u9AA4\u8DF3\u8FC7\uFF1A\u7528\u6237\u6570\u636E\u76EE\u5F55\u4E0D\u5B58\u5728 ${t}`)),f.removeExt&&sn(r),Tn();let n={ran:!1,passed:!0,residues:[]};if(f.reinstallClean&&!f.dryRun){const s=await On(e,r);n={ran:!0,passed:s.length===0,residues:s}}M.selfCheck=n;const o=Yt();T("\u5B8C\u6210"),f.dryRun?m("\u9884\u89C8\u7ED3\u675F\uFF1A\u53BB\u6389 --dry-run \u5373\u771F\u6B63\u6267\u884C\u3002"):(o&&m(`\u64CD\u4F5C\u6E05\u5355\u5DF2\u8BB0\u5F55\uFF1A${o}`),m("\u73AF\u5883\u590D\u539F\u5B8C\u6210\u3002"),I(`
|
|
${y.bold}\u4E0B\u4E00\u6B65\uFF1A${y.reset}`),I(" 1) \u91CD\u65B0\u6253\u5F00 Cursor\u3002"),I(" 2) \u5B89\u88C5\uFF08\u6216\u91CD\u88C5\uFF09\u6700\u65B0\u7248 co-chat\u3002"),I(" 3) \u82E5\u4ECD\u6709\u5F02\u5E38\uFF0C\u8BF7\u91CD\u8BD5\u672C\u5DE5\u5177\uFF0C\u6216\u8054\u7CFB\u5BA2\u670D\u534F\u52A9\u3002"))}function wn(){try{const e=a.realpathSync(Ee(import.meta.url)),t=process.argv[1]?a.realpathSync(process.argv[1]):"";return e===t}catch{return import.meta.url===bt(process.argv[1]??"").href}}const Nn=wn();Nn&&jn().catch(e=>{j(`\u672A\u9884\u671F\u9519\u8BEF\uFF1A${e.stack||e.message}`),process.exitCode=1});export{Ae as ACTIVATE_AND_SEND_END,re as ACTIVATE_AND_SEND_START,ke as AGENT_SORT_L1_END,te as AGENT_SORT_L1_START,Re as AGENT_SORT_L2_END,ne as AGENT_SORT_L2_START,ue as ALL_PATCH_GLOBALSTATE_KEYS,$e as BRIDGE_END,z as BRIDGE_START,Oe as CONCURRENT_SEND_END,oe as CONCURRENT_SEND_START,fe as CO_APP_STATE_KEYS,_t as CURSOR_DEFAULT_UPDATE_URL,Ie as ENDLESS_RETRIES_MARKER,Tt as EXTHOST_CHECKSUM_KEY,_e as EXTHOST_END,$t as EXTHOST_START,xe as FIRST_RUN_OVERLAY_END,se as FIRST_RUN_OVERLAY_START,be as MAIN_END,X as MAIN_START,Te as NAMETAB_END,ee as NAMETAB_START,Rt as NO_QUOTA_EXTRA_GLOBALSTATE_KEYS,w as PATCH_EXPERIMENTS_OVERRIDE_KEYS,At as PATCH_NATIVE_SCALAR_SETTINGS_KEYS,je as PRIVACY_GUARD_END,ce as PRIVACY_GUARD_START,Ce as SEAMLESS_END,Z as SEAMLESS_START,we as UPDATE_BLOCK_V1_END,ie as UPDATE_BLOCK_V1_START,Ne as UPDATE_BLOCK_V21_END,ae as UPDATE_BLOCK_V21_START,Ct as WORKBENCH_CHECKSUM_KEY,Mt as WORKBENCH_PATCH_START_MARKERS,en as buildSurgicalProductRestore,tt as countPatchExperimentOverridesInObject,Dt as cutAgentSortL2Segment,vt as cutBridgeSegment,Nt as cutMainSegment,an as filterRunningCursorProcs,dt as isCursorProcCmd,Jt as matchBalancedBrace,ot as partitionTmpResidueNames,at as productChecksumMismatches,He as sha256Base64,Ue as stripExtHostPatch,Ft as stripNameTabHookSegment,It as stripOrphanWorkbenchMarkers,H as stripOverrideDict,Wt as stripPatchExperimentOverridesFromObject,nt as stripPatchExperimentOverridesFromText,Kt as stripWorkbenchPatches,Xt as tmpResidueOwnerPidFromInstanceId,Qt as tmpResidueOwnerPidFromName,Be as workbenchHasAnyPatchMarker};
|