blade-code 0.10.15 → 0.10.17
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/blade.js +2 -2
- package/dist/{chunk-gav4hxcv.js → chunk-1n60pgsq.js} +2 -2
- package/dist/{chunk-n72www7h.js → chunk-2675vkx5.js} +3 -3
- package/dist/{chunk-dpt56hah.js → chunk-2c3zavy2.js} +1 -1
- package/dist/chunk-2x0marf0.js +1 -0
- package/dist/{chunk-afxpp33r.js → chunk-3d4cgnpw.js} +1 -1
- package/dist/chunk-3qhqbj09.js +2 -0
- package/dist/chunk-4svjvyyd.js +1 -0
- package/dist/{chunk-8j01ssaf.js → chunk-5chec8rs.js} +1 -1
- package/dist/{chunk-4dq9y7zn.js → chunk-6207mbmr.js} +2 -2
- package/dist/{chunk-7x5cqfy7.js → chunk-677ywzhs.js} +2 -2
- package/dist/chunk-69ma931b.js +100 -0
- package/dist/{chunk-nfqsnkbt.js → chunk-6aw8vpf8.js} +39 -39
- package/dist/{chunk-g11hq0e5.js → chunk-6g5k5de1.js} +1 -1
- package/dist/{chunk-vmq248m7.js → chunk-6pa6c2n0.js} +1 -1
- package/dist/{chunk-heqs3xan.js → chunk-6sb7cg95.js} +1 -1
- package/dist/chunk-6yjn2wj7.js +200 -0
- package/dist/chunk-774jxdm3.js +22 -0
- package/dist/chunk-87vsgqvy.js +1 -0
- package/dist/chunk-88639hse.js +1 -0
- package/dist/{chunk-4hawehmd.js → chunk-8rzwyknk.js} +15 -13
- package/dist/{chunk-agdamn30.js → chunk-8vd6q2wt.js} +2 -2
- package/dist/{chunk-kvx3sb3z.js → chunk-96h588rd.js} +1 -1
- package/dist/chunk-a0hk9xrj.js +10 -0
- package/dist/chunk-ab3a9gdc.js +1 -0
- package/dist/chunk-amdw5728.js +1 -0
- package/dist/chunk-bcxbrbvd.js +1 -0
- package/dist/{chunk-jjy8sg10.js → chunk-bjzykvs1.js} +2 -2
- package/dist/{chunk-0z7rg4f3.js → chunk-bpnyda6p.js} +2 -2
- package/dist/{chunk-zn7c21zj.js → chunk-bqgd4db7.js} +2 -2
- package/dist/{chunk-m4f213hk.js → chunk-c18qckn4.js} +2 -2
- package/dist/{chunk-eav8jpk1.js → chunk-cd087ckq.js} +2 -2
- package/dist/{chunk-732n8xj6.js → chunk-d9k98jy2.js} +1 -1
- package/dist/{chunk-74shfpve.js → chunk-entmz5b1.js} +1 -1
- package/dist/{chunk-z8c5rhdh.js → chunk-fa6313dv.js} +1 -1
- package/dist/chunk-fm8vpym2.js +1 -0
- package/dist/chunk-fneamw65.js +4 -0
- package/dist/{chunk-xx1d9kfd.js → chunk-fvj1mzgs.js} +1 -1
- package/dist/{chunk-ee7an1kq.js → chunk-gjw014rv.js} +1 -1
- package/dist/chunk-hm3yme2m.js +1 -0
- package/dist/chunk-hxcd65h1.js +1 -0
- package/dist/{chunk-s5666ta0.js → chunk-jpwfq49n.js} +2 -2
- package/dist/{chunk-ktf3bpmw.js → chunk-k3nkcaap.js} +2 -2
- package/dist/{chunk-2mzcxq6c.js → chunk-kbpc97n3.js} +2 -2
- package/dist/chunk-kjet3e74.js +6 -0
- package/dist/chunk-ncj12cv0.js +1 -0
- package/dist/{chunk-x1qw695m.js → chunk-nqj9c68w.js} +4 -4
- package/dist/{chunk-5s123nbs.js → chunk-prgh321y.js} +1 -1
- package/dist/{chunk-7wjy6kgt.js → chunk-q3c07kb4.js} +1 -1
- package/dist/{chunk-afkhzdfc.js → chunk-qkrssft1.js} +1 -1
- package/dist/{chunk-p4zt7ts9.js → chunk-qt114yth.js} +1 -1
- package/dist/{chunk-9tnaads5.js → chunk-r1jxbx1h.js} +1 -1
- package/dist/{chunk-7bq9p4ab.js → chunk-rgy886ad.js} +2 -2
- package/dist/{chunk-zmg66vp7.js → chunk-rn04c7hs.js} +2 -2
- package/dist/{chunk-mtk2tf9n.js → chunk-t3b689pm.js} +1 -1
- package/dist/{chunk-a170cgzr.js → chunk-w320ev24.js} +1 -1
- package/dist/{chunk-5wecprcp.js → chunk-w9zgpqjd.js} +2 -2
- package/dist/{chunk-632rgzcf.js → chunk-wt7gy9bm.js} +2 -2
- package/dist/{chunk-ng8a4btc.js → chunk-wvh6entt.js} +3 -3
- package/dist/chunk-wygpe92c.js +1 -0
- package/dist/{chunk-k47f7zqm.js → chunk-wzvy13p2.js} +1 -1
- package/dist/chunk-xet98pc1.js +5 -0
- package/dist/{chunk-3aqdjrtm.js → chunk-y2g5a5bp.js} +1 -1
- package/dist/chunk-y72p0x68.js +1 -0
- package/dist/{chunk-dsj62dcg.js → chunk-yqfqj7mh.js} +1 -1
- package/dist/{chunk-363pgv1e.js → chunk-yvf4nmds.js} +2 -2
- package/dist/{chunk-ybvdac8k.js → chunk-yz2bsntj.js} +1 -1
- package/dist/chunk-z9mpf0t7.js +1 -0
- package/dist/{chunk-r76wc1cn.js → chunk-zdkc4kj1.js} +1 -1
- package/dist/{chunk-4zs5r4n4.js → chunk-zt5wq0qj.js} +1 -1
- package/dist/web/assets/{ChatView-rHWZ9qCy.js → ChatView-YFotW0KS.js} +3 -3
- package/dist/web/assets/{CodeBlockHighlighter-KpN8jpS4.js → CodeBlockHighlighter-DYuOTwXS.js} +1 -1
- package/dist/web/assets/{FilePreview-BbEcYewq.js → FilePreview-CWOBOnzz.js} +1 -1
- package/dist/web/assets/{MarkdownRenderer-Cpqkv5Ml.js → MarkdownRenderer-YiYvkN2w.js} +3 -3
- package/dist/web/assets/{SettingsModal-D6NZP8vM.js → SettingsModal-BT-oFKGN.js} +1 -1
- package/dist/web/assets/{TaskSwitcher-cT1qKR6s.js → TaskSwitcher-D5Gd6FN9.js} +1 -1
- package/dist/web/assets/{TerminalPanel-0MehdzKr.js → TerminalPanel-C1hLHq_K.js} +1 -1
- package/dist/web/assets/{index-BYd4kNGp.js → index-DuYx6fkN.js} +4 -4
- package/dist/web/assets/{session-events-BH7O5JJl.js → session-events-K_9Lexp8.js} +1 -1
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/dist/chunk-09k2b1tw.js +0 -10
- package/dist/chunk-1amhvwmj.js +0 -22
- package/dist/chunk-1c9rkm57.js +0 -1
- package/dist/chunk-25abj6rx.js +0 -1
- package/dist/chunk-2cqsqrxx.js +0 -4
- package/dist/chunk-3m8pschr.js +0 -1
- package/dist/chunk-5psydp1v.js +0 -1
- package/dist/chunk-5tpjb8yn.js +0 -1
- package/dist/chunk-67vf8r5v.js +0 -6
- package/dist/chunk-6y9w5296.js +0 -1
- package/dist/chunk-csn0epd2.js +0 -100
- package/dist/chunk-d7976m5f.js +0 -5
- package/dist/chunk-f4z3gkbs.js +0 -2
- package/dist/chunk-fvrmjhz5.js +0 -1
- package/dist/chunk-h6w3ggx9.js +0 -1
- package/dist/chunk-hxp5qs1x.js +0 -1
- package/dist/chunk-mc29y7tj.js +0 -200
- package/dist/chunk-qpd1jmm4.js +0 -1
- package/dist/chunk-t6cmqsdj.js +0 -1
- package/dist/chunk-wz3z8908.js +0 -1
- package/dist/chunk-z5zcwwfm.js +0 -1
- package/dist/chunk-zn2cec1d.js +0 -1
package/dist/blade.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{
|
|
2
|
+
import{Cc as W}from"./chunk-rn04c7hs.js";import{Fc as F,Gc as M}from"./chunk-k3nkcaap.js";import"./chunk-bqgd4db7.js";import"./chunk-6pa6c2n0.js";import"./chunk-yz2bsntj.js";import"./chunk-wvh6entt.js";import"./chunk-q3c07kb4.js";import{he as T}from"./chunk-6207mbmr.js";import"./chunk-rgy886ad.js";import"./chunk-y2g5a5bp.js";import"./chunk-96h588rd.js";import"./chunk-3qhqbj09.js";import{lf as N,mf as B}from"./chunk-prgh321y.js";import"./chunk-jpwfq49n.js";import"./chunk-yqfqj7mh.js";import"./chunk-677ywzhs.js";import"./chunk-1n60pgsq.js";import"./chunk-qkrssft1.js";import"./chunk-yvf4nmds.js";import{Qf as J}from"./chunk-6g5k5de1.js";import v from"node:path";var E=process.argv.slice(2),I=u(E),p=I!==null;if(I!==null)T.setGlobalDebug(I);function u(Q){for(let Y=0;Y<Q.length;Y+=1){let U=Q[Y];if(U==="--debug"||U==="-d"){let X=Q[Y+1];return X&&!X.startsWith("-")?X:!0}if(U.startsWith("--debug="))return U.slice(8)||!0}return null}function c(Q){return Q.length===1&&(Q[0]==="--version"||Q[0]==="-V")}function q(Q,...Y){return Q.some((U)=>Y.some((X)=>U===X||U.startsWith(`${X}=`)))}function m(Q,...Y){let U=[];for(let X=0;X<Q.length;X+=1){let G=Q[X],z=Y.find(($)=>G.startsWith(`${$}=`));if(z){let $=G.slice(z.length+1);if($)U.push($);continue}if(Y.includes(G)){let $=Q[X+1];if($&&!$.startsWith("-"))U.push($),X+=1}}return U}async function t(){if(c(E)){let{getVersion:K}=await import("./chunk-fm8vpym2.js");console.log(K());return}let Q=process.cwd(),Y=F(Q);M(Y),N(B());let U=m(E,"--plugin-dir","--pluginDir");if(U.length>0){let{configureInvocationPluginDirs:K}=await import("./chunk-ncj12cv0.js");K(U.map((Z)=>v.resolve(Q,Z)))}if(q(E,"--trust-workspace","--trustWorkspace")){let{WorkspaceTrustService:K}=await import("./chunk-4svjvyyd.js");await K.getInstance().trust(B())}if(process.getuid&&process.getuid()===0){let K=!!process.env.SUDO_USER,Z=!!process.env.BLADE_ALLOW_ROOT;if(K&&!Z)console.error(""),console.error("Error: 请不要使用 sudo 运行 blade"),console.error(""),console.error("原因:"),console.error(" 使用 sudo 会创建属于 root 的配置文件,"),console.error(" 导致普通用户无法访问。"),console.error(""),console.error("正确用法:"),console.error(" blade # 直接运行,不要加 sudo"),console.error(""),console.error("如果遇到权限错误,请运行:"),console.error(" sudo chown -R $USER:$USER ~/.blade/"),console.error(""),console.error("如果你确实需要以 root 运行(容器/CI),设置环境变量:"),console.error(" BLADE_ALLOW_ROOT=1 blade"),console.error(""),process.exit(1)}if(q(E,"--headless")){let{handleHeadlessMode:K}=await import("./chunk-kjet3e74.js");if(await K())return}if(W(),q(E,"--print","-p")){let{handlePrintMode:K}=await import("./chunk-bjzykvs1.js");if(await K())return}if(E.includes("--acp")){let{runAcpIntegration:K}=await import("./chunk-774jxdm3.js");await K();return}let[{default:X},{hideBin:G},{cliConfig:z,globalOptions:$},{loadConfiguration:_,validateOutput:D,validatePermissions:R},{doctorCommands:S},{installCommands:k},{mcpCommands:O},{projectsCommands:y},{scheduleCommands:b},{serveCommand:V},{updateCommands:P},{webCommand:x}]=await Promise.all([import("yargs"),import("yargs/helpers"),import("./chunk-wygpe92c.js"),import("./chunk-amdw5728.js"),import("./chunk-cd087ckq.js"),import("./chunk-entmz5b1.js"),import("./chunk-w320ev24.js"),import("./chunk-t3b689pm.js"),import("./chunk-zt5wq0qj.js"),import("./chunk-2x0marf0.js"),import("./chunk-fvj1mzgs.js"),import("./chunk-a0hk9xrj.js")]),A=X(G(process.argv)).scriptName(z.scriptName).usage(z.usage).version(z.version).locale(z.locale).showHelpOnFail(z.showHelpOnFail).demandCommand(0,"").recommendCommands().strict(z.strict).parserConfiguration({"populate--":!0}).options($).middleware([_,R,D]).command(O).command(y).command(b).command(S).command(P).command(k).command(x).command(V).completion("completion",!1).help("help","Show help").alias("help","h").alias("version","V").fail((K,Z,L)=>{if(Z){if(console.error("An error occurred:"),console.error(Z.message),p&&Z.stack)console.error(`
|
|
3
3
|
Stack trace:`),console.error(Z.stack);else console.error(`
|
|
4
4
|
Run with --debug to show the stack trace.`);process.exit(1)}if(K)console.error("Error: Invalid arguments:"),console.error(K),console.error(`
|
|
5
|
-
Hint: Did you mean:`),L.showHelp(),process.exit(1)}).command("$0",!1,()=>{},async(K)=>{let Z=K._.slice(1),L=Z.length>0?Z.join(" "):void 0,h=import("./chunk-
|
|
5
|
+
Hint: Did you mean:`),L.showHelp(),process.exit(1)}).command("$0",!1,()=>{},async(K)=>{let Z=K._.slice(1),L=Z.length>0?Z.join(" "):void 0,h=import("./chunk-87vsgqvy.js").then(({checkVersionOnStartup:C})=>C()),[{render:w},{createElement:f},{AppWrapper:j}]=await Promise.all([import("ink"),import("react"),import("./chunk-6aw8vpf8.js")]),H={...K,initialMessage:L,debug:K.debug,print:Boolean(K.print),versionCheckPromise:h};delete H._,delete H.$0,delete H.message,w(f(j,H),{patchConsole:!0,exitOnCtrlC:!1,alternateBuffer:!1})});try{await A.parse()}catch(K){console.error("Error: Parse error:",K),process.exit(1)}}if(J.main==J.module)t().catch(console.error);export{t as main};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Ff as y}from"./chunk-qkrssft1.js";import{Of as b}from"./chunk-yvf4nmds.js";import{createHash as N}from"node:crypto";import{constants as v,promises as d}from"node:fs";import W from"node:os";import a from"node:path";import{Mutex as A}from"async-mutex";import O from"write-file-atomic";var w=1,x=65536,T=1048576,m=100;function p(e){return e!==null&&typeof e==="object"&&!Array.isArray(e)}function k(e,t=2048){return e.length<=t?e:`${e.slice(0,t-1)}…`}function S(e){if(typeof e!=="string"||!e.trim())return;try{let t=new URL(e);return k(`${t.origin}${t.pathname}`)}catch{return k(e)}}function D(e){return Array.isArray(e)?e.filter((t)=>typeof t==="string"):[]}function R(e){if(!p(e))return[];return Object.entries(e).slice(0,m).map(([t,s])=>{let r=p(s)?s:{},i=typeof r.type==="string"?r.type:"unknown",n=typeof r.command==="string"?r.command:void 0,o=D(r.args),c=i==="stdio"?k([n,...o].filter(Boolean).join(" ")):S(r.url);return{kind:"mcp",name:`${t} (${i})`,...c?{target:c}:{}}})}function F(e){if(!p(e))return[];return Object.entries(e).slice(0,m).map(([t,s])=>{let r=p(s)?s:{},i=typeof r.command==="string"?k(r.command):void 0,n=p(r.extensionToLanguage)?Object.keys(r.extensionToLanguage).slice(0,12).join(", "):"unknown extensions";return{kind:"lsp",name:`${t} (${n})`,...i?{target:i}:{}}})}function j(e){if(!Array.isArray(e))return[];return e.slice(0,m).flatMap((t)=>{if(!p(t))return[];let s=typeof t.id==="string"?t.id:"unnamed",r=typeof t.provider==="string"?t.provider:"unknown",i=typeof t.model==="string"?t.model:"unknown",n=p(t.overrides)?t.overrides:{},o=S(n.baseUrl);return[{kind:"model",name:`${s}: ${r}/${i}`,...o?{target:o}:{}}]})}function $(e){if(!p(e))return[];return Object.entries(e).slice(0,m).map(([t,s])=>{let r=p(s)?s:{},i=typeof r.wireApi==="string"?r.wireApi:"unknown",n=S(r.baseUrl);return{kind:"model",name:`${t} (${i})`,...n?{target:n}:{}}})}function P(e){if(!p(e))return[];let t=[];for(let s of["allow","ask","deny"])for(let r of D(e[s]).slice(0,m))t.push({kind:"permission",name:`${s}: ${k(r,512)}`});return t}function C(e){let t=[...R(e.mcpServers),...F(e.lspServers),...j(e.models),...$(e.modelProviders),...P(e.permissions)];if(p(e.env))for(let s of Object.keys(e.env).slice(0,m))t.push({kind:"environment",name:s});if(typeof e.permissionMode==="string")t.push({kind:"permission",name:`permissionMode: ${e.permissionMode}`});return t}function I(e){return e!=="hooks"&&e!=="disableAllHooks"}function M(e){return N("sha256").update(e).digest("hex")}function L(e,t){let s=a.relative(e,t);return s===""||!s.startsWith(`..${a.sep}`)&&s!==".."&&!a.isAbsolute(s)}class h{storeDir;static instance=null;mutex=new A;statusCache=new Map;constructor(e=a.join(b(),"workspace-trust")){this.storeDir=e}static getInstance(){if(!h.instance)h.instance=new h;return h.instance}static resetInstance(){h.instance=null}async getStatus(e){let t=await y(e),s;try{s=await this.discoverSensitiveSources(t.projectPath)}catch(u){let g={...t,state:"error",trusted:!1,sensitiveSources:0,sources:[],decision:"undecided",error:u instanceof Error?u.message:"Workspace trust review failed"};return this.cacheStatus(e,g),g}if(s.length===0){let u={...t,state:"not_required",trusted:!0,sensitiveSources:0,sources:s,decision:"undecided"};return this.cacheStatus(e,u),u}let r;try{r=await this.readDecisions()}catch(u){let g={...t,state:"error",trusted:!1,sensitiveSources:s.length,sources:s,decision:"undecided",error:u instanceof Error?u.message:"Workspace trust store is unavailable"};return this.cacheStatus(e,g),g}let i=r.filter((u)=>L(u.path,t.trustRoot)),n=Math.max(-1,...i.map((u)=>u.path.split(a.sep).length)),o=i.filter((u)=>u.path.split(a.sep).length===n),c=o.length>0&&o.every((u)=>u.trusted),f=o[0],l=f?.path===t.trustRoot,E={...t,state:c?"trusted":"untrusted",trusted:c,sensitiveSources:s.length,sources:s,decision:f?l?f.trusted?"trusted":"untrusted":"inherited":"undecided",...f?.decidedAt?{decidedAt:f.decidedAt}:{},...!l&&f?.path?{inheritedFrom:f.path}:{}};return this.cacheStatus(e,E),E}cacheStatus(e,t){this.statusCache.set(a.resolve(e),t),this.statusCache.set(t.projectPath,t)}getCachedStatus(e){return this.statusCache.get(a.resolve(e))}isTrustedCached(e){return this.getCachedStatus(e)?.state==="trusted"}async trust(e){return this.recordDecision(e,!0)}async revoke(e){return this.recordDecision(e,!1)}async recordDecision(e,t){return this.mutex.runExclusive(async()=>{let s=await y(e);await this.assertSafeTrustRoot(s);let r={version:w,path:s.trustRoot,trusted:t,decidedAt:new Date().toISOString()};return await this.writeDecision(r),this.statusCache.clear(),this.getStatus(e)})}async assertSafeTrustRoot(e){let t=a.parse(e.trustRoot).root,s=await d.realpath(W.homedir()).catch(()=>a.resolve(W.homedir()));if(!a.isAbsolute(e.trustRoot)||e.trustRoot===t||e.trustRoot===s)throw Error("Refusing to trust the filesystem root or user home directory")}async discoverSensitiveSources(e){let t=[],s=await this.reviewPackageScripts(e);if(s)t.push(s);for(let[r,i]of[[".blade/config.json","config"],[".blade/settings.json","settings"],[".blade/settings.local.json","settings"]]){let n=await this.reviewConfigFile(e,r,i);if(n)t.push(n)}for(let r of[".blade/plugins",".claude/plugins"]){let i=await this.reviewResourceDirectory(e,r,"plugins","plugin");if(i)t.push(i)}for(let r of[".blade/commands",".claude/commands"]){let i=await this.reviewResourceDirectory(e,r,"commands","command");if(i)t.push(i)}for(let[r,i,n]of[[".blade/skills","skills","skill"],[".claude/skills","skills","skill"],[".blade/agents","agents","agent"],[".claude/agents","agents","agent"]]){let o=await this.reviewResourceDirectory(e,r,i,n);if(o)t.push(o)}for(let r of["CLAUDE.md","AGENTS.md","BLADE.md"]){let i=await this.reviewInstructionFile(e,r);if(i)t.push(i)}return t}async reviewPackageScripts(e){let t=a.join(e,"package.json"),s;try{s=await d.stat(t)}catch(o){if(o.code==="ENOENT")return;throw o}if(!s.isFile())return;if(s.size>T)throw Error("package.json exceeds the 1 MiB workspace review limit");let r;try{r=JSON.parse(await d.readFile(t,"utf8"))}catch{return{path:"package.json",kind:"package",keys:[],effects:[],warning:"Invalid package.json; project scripts will remain blocked"}}if(!p(r)||!p(r.scripts))return;let i=r.scripts,n=Object.keys(i).filter((o)=>typeof i[o]==="string").sort().slice(0,m);if(n.length===0)return;return{path:"package.json",kind:"package",keys:n,effects:n.map((o)=>({kind:"command",name:`package script: ${o}`}))}}async reviewInstructionFile(e,t){try{if(!(await d.stat(a.join(e,t))).isFile())return}catch(s){if(s.code==="ENOENT")return;throw s}return{path:t,kind:"instructions",keys:[t],effects:[{kind:"instruction",name:t}]}}async reviewConfigFile(e,t,s){let r=a.join(e,t),i;try{i=await d.stat(r)}catch(l){if(l.code==="ENOENT")return;throw l}if(!i.isFile())return;if(i.size>T)throw Error(`${t} exceeds the 1 MiB workspace review limit`);let n;try{n=JSON.parse(await d.readFile(r,"utf8"))}catch{return{path:t,kind:s,keys:[],effects:[],warning:"Invalid JSON; the file will remain blocked"}}if(!p(n))return{path:t,kind:s,keys:[],effects:[],warning:"Configuration root is not an object"};let o=Object.keys(n).filter(I).sort();if(o.length===0)return;let c=C(n),f=new Set(["mcpServers","lspServers","models","modelProviders","permissions","env","permissionMode"]);for(let l of o)if(!f.has(l))c.push({kind:"configuration",name:l});return{path:t,kind:s,keys:o,effects:c}}async reviewResourceDirectory(e,t,s,r){let i=a.join(e,t),n;try{n=await d.readdir(i,{withFileTypes:!0})}catch(c){if(c.code==="ENOENT")return;throw c}let o=n.filter((c)=>s==="plugins"||s==="skills"?c.isDirectory()||c.isSymbolicLink():c.isFile()||c.isDirectory()||c.isSymbolicLink()).slice(0,m);if(o.length===0)return;return{path:t,kind:s,keys:o.map((c)=>c.name),effects:o.map((c)=>({kind:r,name:c.name}))}}async readDecisions(){let e;try{e=await d.lstat(this.storeDir)}catch(r){if(r.code==="ENOENT")return[];throw r}if(!e.isDirectory()||e.isSymbolicLink())throw Error("Workspace trust store must be a regular directory");if(process.getuid&&e.uid!==process.getuid())throw Error("Workspace trust store must be owned by the current user");if((e.mode&511)!==448)throw Error("Workspace trust store permissions must be 0700");let t=await d.readdir(this.storeDir,{withFileTypes:!0}),s=[];for(let r of t){if(!r.name.endsWith(".json"))continue;if(!r.isFile())throw Error("Workspace trust store entries must be regular files");s.push(await this.readDecision(a.join(this.storeDir,r.name)))}return s}async readDecision(e){let t;try{t=await d.open(e,v.O_RDONLY|v.O_NOFOLLOW)}catch{throw Error("Workspace trust decision must be a regular file")}try{let s=await t.stat();if(!s.isFile()||s.size>x)throw Error("Workspace trust decision is invalid");if(process.getuid&&s.uid!==process.getuid())throw Error("Workspace trust decisions must be owned by the current user");if((s.mode&511)!==384)throw Error("Workspace trust decision permissions must be 0600");let r=JSON.parse(await t.readFile("utf8"));if(!p(r)||r.version!==w||typeof r.path!=="string"||!a.isAbsolute(r.path)||typeof r.trusted!=="boolean"||typeof r.decidedAt!=="string"||!Number.isFinite(Date.parse(r.decidedAt))||Object.keys(r).some((i)=>i!=="version"&&i!=="path"&&i!=="trusted"&&i!=="decidedAt"))throw Error("Workspace trust decision schema is invalid");return{version:w,path:r.path,trusted:r.trusted,decidedAt:r.decidedAt}}finally{await t.close()}}async writeDecision(e){await this.ensureStoreDirectoryForWrite();let t=a.join(this.storeDir,`${M(e.path)}.json`);try{let s=await d.lstat(t);if(!s.isFile()||s.isSymbolicLink())throw Error("Workspace trust decision must be a regular file");if(process.getuid&&s.uid!==process.getuid())throw Error("Workspace trust decisions must be owned by the current user");if((s.mode&511)!==384)throw Error("Workspace trust decision permissions must be 0600")}catch(s){if(s.code!=="ENOENT")throw s}await O(t,`${JSON.stringify(e,null,2)}
|
|
2
2
|
`,{mode:384}),await d.chmod(t,384)}async ensureStoreDirectoryForWrite(){try{let e=await d.lstat(this.storeDir);if(!e.isDirectory()||e.isSymbolicLink())throw Error("Workspace trust store must be a regular directory");if(process.getuid&&e.uid!==process.getuid())throw Error("Workspace trust store must be owned by the current user");if((e.mode&511)!==448)throw Error("Workspace trust store permissions must be 0700")}catch(e){if(e.code!=="ENOENT")throw e;await d.mkdir(this.storeDir,{recursive:!0,mode:448}),await d.chmod(this.storeDir,448)}}}
|
|
3
|
-
export{h as
|
|
3
|
+
export{h as Ef};
|