dsh-edge 0.27.0 → 0.27.2

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.
@@ -164,7 +164,7 @@ Known schemas:
164
164
  - `)}`,new Error(ot)}let Ot=`${l}/$ref`,yt=Go(e,Ve,n,r,i,s,o,Ot,c);if(yt.valid||Oe.push({instanceLocation:o,keyword:"$ref",keywordLocation:Ot,error:"A subschema had errors."},...yt.errors),n==="4"||n==="7")return{valid:Oe.length===0,errors:Oe}}if(Array.isArray(g)){let et=g.length,Ve=!1;for(let Ot=0;Ot<et;Ot++)if(d===g[Ot]||g[Ot]==="integer"&&d==="number"&&e%1===0&&e===e){Ve=!0;break}Ve||Oe.push({instanceLocation:o,keyword:"type",keywordLocation:`${l}/type`,error:`Instance type "${d}" is invalid. Expected "${g.join('", "')}".`})}else g==="integer"?(d!=="number"||e%1||e!==e)&&Oe.push({instanceLocation:o,keyword:"type",keywordLocation:`${l}/type`,error:`Instance type "${d}" is invalid. Expected "${g}".`}):g!==void 0&&d!==g&&Oe.push({instanceLocation:o,keyword:"type",keywordLocation:`${l}/type`,error:`Instance type "${d}" is invalid. Expected "${g}".`});if(y!==void 0&&(d==="object"||d==="array"?UE(e,y)||Oe.push({instanceLocation:o,keyword:"const",keywordLocation:`${l}/const`,error:`Instance does not match ${JSON.stringify(y)}.`}):e!==y&&Oe.push({instanceLocation:o,keyword:"const",keywordLocation:`${l}/const`,error:`Instance does not match ${JSON.stringify(y)}.`})),v!==void 0&&(d==="object"||d==="array"?v.some(et=>UE(e,et))||Oe.push({instanceLocation:o,keyword:"enum",keywordLocation:`${l}/enum`,error:`Instance does not match any of ${JSON.stringify(v)}.`}):v.some(et=>e===et)||Oe.push({instanceLocation:o,keyword:"enum",keywordLocation:`${l}/enum`,error:`Instance does not match any of ${JSON.stringify(v)}.`})),b!==void 0){let et=`${l}/not`;Go(e,b,n,r,i,s,o,et).valid&&Oe.push({instanceLocation:o,keyword:"not",keywordLocation:et,error:'Instance matched "not" schema.'})}let kt=[];if(_!==void 0){let et=`${l}/anyOf`,Ve=Oe.length,Ot=!1;for(let yt=0;yt<_.length;yt++){let ot=_[yt],Ct=Object.create(c),Ue=Go(e,ot,n,r,i,f===!0?s:null,o,`${et}/${yt}`,Ct);Oe.push(...Ue.errors),Ot=Ot||Ue.valid,Ue.valid&&kt.push(Ct)}Ot?Oe.length=Ve:Oe.splice(Ve,0,{instanceLocation:o,keyword:"anyOf",keywordLocation:et,error:"Instance does not match any subschemas."})}if(k!==void 0){let et=`${l}/allOf`,Ve=Oe.length,Ot=!0;for(let yt=0;yt<k.length;yt++){let ot=k[yt],Ct=Object.create(c),Ue=Go(e,ot,n,r,i,f===!0?s:null,o,`${et}/${yt}`,Ct);Oe.push(...Ue.errors),Ot=Ot&&Ue.valid,Ue.valid&&kt.push(Ct)}Ot?Oe.length=Ve:Oe.splice(Ve,0,{instanceLocation:o,keyword:"allOf",keywordLocation:et,error:"Instance does not match every subschema."})}if(T!==void 0){let et=`${l}/oneOf`,Ve=Oe.length,Ot=T.filter((yt,ot)=>{let Ct=Object.create(c),Ue=Go(e,yt,n,r,i,f===!0?s:null,o,`${et}/${ot}`,Ct);return Oe.push(...Ue.errors),Ue.valid&&kt.push(Ct),Ue.valid}).length;Ot===1?Oe.length=Ve:Oe.splice(Ve,0,{instanceLocation:o,keyword:"oneOf",keywordLocation:et,error:`Instance does not match exactly one subschema (${Ot} matches).`})}if((d==="object"||d==="array")&&Object.assign(c,...kt),A!==void 0){let et=`${l}/if`;if(Go(e,A,n,r,i,s,o,et,c).valid){if(R!==void 0){let Ot=Go(e,R,n,r,i,s,o,`${l}/then`,c);Ot.valid||Oe.push({instanceLocation:o,keyword:"if",keywordLocation:et,error:'Instance does not match "then" schema.'},...Ot.errors)}}else if(M!==void 0){let Ot=Go(e,M,n,r,i,s,o,`${l}/else`,c);Ot.valid||Oe.push({instanceLocation:o,keyword:"if",keywordLocation:et,error:'Instance does not match "else" schema.'},...Ot.errors)}}if(d==="object"){if(x!==void 0)for(let yt of x)yt in e||Oe.push({instanceLocation:o,keyword:"required",keywordLocation:`${l}/required`,error:`Instance does not have required property "${yt}".`});let et=Object.keys(e);if(I!==void 0&&et.length<I&&Oe.push({instanceLocation:o,keyword:"minProperties",keywordLocation:`${l}/minProperties`,error:`Instance does not have at least ${I} properties.`}),z!==void 0&&et.length>z&&Oe.push({instanceLocation:o,keyword:"maxProperties",keywordLocation:`${l}/maxProperties`,error:`Instance does not have at least ${z} properties.`}),C!==void 0){let yt=`${l}/propertyNames`;for(let ot in e){let Ct=`${o}/${Ep(ot)}`,Ue=Go(ot,C,n,r,i,s,Ct,yt);Ue.valid||Oe.push({instanceLocation:o,keyword:"propertyNames",keywordLocation:yt,error:`Property name "${ot}" does not match schema.`},...Ue.errors)}}if(O!==void 0){let yt=`${l}/dependantRequired`;for(let ot in O)if(ot in e){let Ct=O[ot];for(let Ue of Ct)Ue in e||Oe.push({instanceLocation:o,keyword:"dependentRequired",keywordLocation:yt,error:`Instance has "${ot}" but does not have "${Ue}".`})}}if(L!==void 0)for(let yt in L){let ot=`${l}/dependentSchemas`;if(yt in e){let Ct=Go(e,L[yt],n,r,i,s,o,`${ot}/${Ep(yt)}`,c);Ct.valid||Oe.push({instanceLocation:o,keyword:"dependentSchemas",keywordLocation:ot,error:`Instance has "${yt}" but does not match dependant schema.`},...Ct.errors)}}if(F!==void 0){let yt=`${l}/dependencies`;for(let ot in F)if(ot in e){let Ct=F[ot];if(Array.isArray(Ct))for(let Ue of Ct)Ue in e||Oe.push({instanceLocation:o,keyword:"dependencies",keywordLocation:yt,error:`Instance has "${ot}" but does not have "${Ue}".`});else{let Ue=Go(e,Ct,n,r,i,s,o,`${yt}/${Ep(ot)}`);Ue.valid||Oe.push({instanceLocation:o,keyword:"dependencies",keywordLocation:yt,error:`Instance has "${ot}" but does not match dependant schema.`},...Ue.errors)}}}let Ve=Object.create(null),Ot=!1;if(U!==void 0){let yt=`${l}/properties`;for(let ot in U){if(!(ot in e))continue;let Ct=`${o}/${Ep(ot)}`,Ue=Go(e[ot],U[ot],n,r,i,s,Ct,`${yt}/${Ep(ot)}`);if(Ue.valid)c[ot]=Ve[ot]=!0;else if(Ot=i,Oe.push({instanceLocation:o,keyword:"properties",keywordLocation:yt,error:`Property "${ot}" does not match schema.`},...Ue.errors),Ot)break}}if(!Ot&&D!==void 0){let yt=`${l}/patternProperties`;for(let ot in D){let Ct=new RegExp(ot,"u"),Ue=D[ot];for(let Wt in e){if(!Ct.test(Wt))continue;let pn=`${o}/${Ep(Wt)}`,Tt=Go(e[Wt],Ue,n,r,i,s,pn,`${yt}/${Ep(ot)}`);Tt.valid?c[Wt]=Ve[Wt]=!0:(Ot=i,Oe.push({instanceLocation:o,keyword:"patternProperties",keywordLocation:yt,error:`Property "${Wt}" matches pattern "${ot}" but does not match associated schema.`},...Tt.errors))}}}if(!Ot&&G!==void 0){let yt=`${l}/additionalProperties`;for(let ot in e){if(Ve[ot])continue;let Ct=`${o}/${Ep(ot)}`,Ue=Go(e[ot],G,n,r,i,s,Ct,yt);Ue.valid?c[ot]=!0:(Ot=i,Oe.push({instanceLocation:o,keyword:"additionalProperties",keywordLocation:yt,error:`Property "${ot}" does not match additional properties schema.`},...Ue.errors))}}else if(!Ot&&ne!==void 0){let yt=`${l}/unevaluatedProperties`;for(let ot in e)if(!c[ot]){let Ct=`${o}/${Ep(ot)}`,Ue=Go(e[ot],ne,n,r,i,s,Ct,yt);Ue.valid?c[ot]=!0:Oe.push({instanceLocation:o,keyword:"unevaluatedProperties",keywordLocation:yt,error:`Property "${ot}" does not match unevaluated properties schema.`},...Ue.errors)}}}else if(d==="array"){de!==void 0&&e.length>de&&Oe.push({instanceLocation:o,keyword:"maxItems",keywordLocation:`${l}/maxItems`,error:`Array has too many items (${e.length} > ${de}).`}),xe!==void 0&&e.length<xe&&Oe.push({instanceLocation:o,keyword:"minItems",keywordLocation:`${l}/minItems`,error:`Array has too few items (${e.length} < ${xe}).`});let et=e.length,Ve=0,Ot=!1;if(W!==void 0){let yt=`${l}/prefixItems`,ot=Math.min(W.length,et);for(;Ve<ot;Ve++){let Ct=Go(e[Ve],W[Ve],n,r,i,s,`${o}/${Ve}`,`${yt}/${Ve}`);if(c[Ve]=!0,!Ct.valid&&(Ot=i,Oe.push({instanceLocation:o,keyword:"prefixItems",keywordLocation:yt,error:"Items did not match schema."},...Ct.errors),Ot))break}}if(Q!==void 0){let yt=`${l}/items`;if(Array.isArray(Q)){let ot=Math.min(Q.length,et);for(;Ve<ot;Ve++){let Ct=Go(e[Ve],Q[Ve],n,r,i,s,`${o}/${Ve}`,`${yt}/${Ve}`);if(c[Ve]=!0,!Ct.valid&&(Ot=i,Oe.push({instanceLocation:o,keyword:"items",keywordLocation:yt,error:"Items did not match schema."},...Ct.errors),Ot))break}}else for(;Ve<et;Ve++){let ot=Go(e[Ve],Q,n,r,i,s,`${o}/${Ve}`,yt);if(c[Ve]=!0,!ot.valid&&(Ot=i,Oe.push({instanceLocation:o,keyword:"items",keywordLocation:yt,error:"Items did not match schema."},...ot.errors),Ot))break}if(!Ot&&Y!==void 0){let ot=`${l}/additionalItems`;for(;Ve<et;Ve++){let Ct=Go(e[Ve],Y,n,r,i,s,`${o}/${Ve}`,ot);c[Ve]=!0,Ct.valid||(Ot=i,Oe.push({instanceLocation:o,keyword:"additionalItems",keywordLocation:ot,error:"Items did not match additional items schema."},...Ct.errors))}}}if(V!==void 0)if(et===0&&se===void 0)Oe.push({instanceLocation:o,keyword:"contains",keywordLocation:`${l}/contains`,error:"Array is empty. It must contain at least one item matching the schema."});else if(se!==void 0&&et<se)Oe.push({instanceLocation:o,keyword:"minContains",keywordLocation:`${l}/minContains`,error:`Array has less items (${et}) than minContains (${se}).`});else{let yt=`${l}/contains`,ot=Oe.length,Ct=0;for(let Ue=0;Ue<et;Ue++){let Wt=Go(e[Ue],V,n,r,i,s,`${o}/${Ue}`,yt);Wt.valid?(c[Ue]=!0,Ct++):Oe.push(...Wt.errors)}Ct>=(se||0)&&(Oe.length=ot),se===void 0&&Ae===void 0&&Ct===0?Oe.splice(ot,0,{instanceLocation:o,keyword:"contains",keywordLocation:yt,error:"Array does not contain item matching schema."}):se!==void 0&&Ct<se?Oe.push({instanceLocation:o,keyword:"minContains",keywordLocation:`${l}/minContains`,error:`Array must contain at least ${se} items matching schema. Only ${Ct} items were found.`}):Ae!==void 0&&Ct>Ae&&Oe.push({instanceLocation:o,keyword:"maxContains",keywordLocation:`${l}/maxContains`,error:`Array may contain at most ${Ae} items matching schema. ${Ct} items were found.`})}if(!Ot&&te!==void 0){let yt=`${l}/unevaluatedItems`;for(Ve;Ve<et;Ve++){if(c[Ve])continue;let ot=Go(e[Ve],te,n,r,i,s,`${o}/${Ve}`,yt);c[Ve]=!0,ot.valid||Oe.push({instanceLocation:o,keyword:"unevaluatedItems",keywordLocation:yt,error:"Items did not match unevaluated items schema."},...ot.errors)}}if(Ee)for(let yt=0;yt<et;yt++){let ot=e[yt],Ct=typeof ot=="object"&&ot!==null;for(let Ue=0;Ue<et;Ue++){if(yt===Ue)continue;let Wt=e[Ue];(ot===Wt||Ct&&(typeof Wt=="object"&&Wt!==null)&&UE(ot,Wt))&&(Oe.push({instanceLocation:o,keyword:"uniqueItems",keywordLocation:`${l}/uniqueItems`,error:`Duplicate items at indexes ${yt} and ${Ue}.`}),yt=Number.MAX_SAFE_INTEGER,Ue=Number.MAX_SAFE_INTEGER)}}}else if(d==="number"){if(n==="4"?(Ie!==void 0&&(ce===!0&&e<=Ie||e<Ie)&&Oe.push({instanceLocation:o,keyword:"minimum",keywordLocation:`${l}/minimum`,error:`${e} is less than ${ce?"or equal to ":""} ${Ie}.`}),pe!==void 0&&(Ye===!0&&e>=pe||e>pe)&&Oe.push({instanceLocation:o,keyword:"maximum",keywordLocation:`${l}/maximum`,error:`${e} is greater than ${Ye?"or equal to ":""} ${pe}.`})):(Ie!==void 0&&e<Ie&&Oe.push({instanceLocation:o,keyword:"minimum",keywordLocation:`${l}/minimum`,error:`${e} is less than ${Ie}.`}),pe!==void 0&&e>pe&&Oe.push({instanceLocation:o,keyword:"maximum",keywordLocation:`${l}/maximum`,error:`${e} is greater than ${pe}.`}),ce!==void 0&&e<=ce&&Oe.push({instanceLocation:o,keyword:"exclusiveMinimum",keywordLocation:`${l}/exclusiveMinimum`,error:`${e} is less than ${ce}.`}),Ye!==void 0&&e>=Ye&&Oe.push({instanceLocation:o,keyword:"exclusiveMaximum",keywordLocation:`${l}/exclusiveMaximum`,error:`${e} is greater than or equal to ${Ye}.`})),Ze!==void 0){let et=e%Ze;Math.abs(0-et)>=11920929e-14&&Math.abs(Ze-et)>=11920929e-14&&Oe.push({instanceLocation:o,keyword:"multipleOf",keywordLocation:`${l}/multipleOf`,error:`${e} is not a multiple of ${Ze}.`})}}else if(d==="string"){let et=mt===void 0&&je===void 0?0:aze(e);mt!==void 0&&et<mt&&Oe.push({instanceLocation:o,keyword:"minLength",keywordLocation:`${l}/minLength`,error:`String is too short (${et} < ${mt}).`}),je!==void 0&&et>je&&Oe.push({instanceLocation:o,keyword:"maxLength",keywordLocation:`${l}/maxLength`,error:`String is too long (${et} > ${je}).`}),Pe!==void 0&&!new RegExp(Pe,"u").test(e)&&Oe.push({instanceLocation:o,keyword:"pattern",keywordLocation:`${l}/pattern`,error:"String does not match pattern."}),N!==void 0&&Qhe[N]&&!Qhe[N](e)&&Oe.push({instanceLocation:o,keyword:"format",keywordLocation:`${l}/format`,error:`String does not match format "${N}".`})}return{valid:Oe.length===0,errors:Oe}}var Xhe=$(()=>{Khe();TU();Jhe();EU();Zhe();a(Go,"validate")});var AU,lze=$(()=>{TU();Xhe();AU=class{static{a(this,"Validator")}schema;draft;shortCircuit;lookup;constructor(t,n="2019-09",r=!0){this.schema=t,this.draft=n,this.shortCircuit=r,this.lookup=M1(t)}validate(t){return Go(t,this.schema,this.draft,this.lookup,this.shortCircuit)}addSchema(t,n){n&&(t={...t,$id:n}),M1(t,this.lookup)}}});var cze=$(()=>{Khe();TU();Jhe();EU();oze();Zhe();Xhe();lze()});var IU,uze=$(()=>{cze();IU=class{static{a(this,"CfWorkerJsonSchemaValidator")}constructor(t){this.shortcircuit=t?.shortcircuit??!0,this.draft=t?.draft??"2020-12"}getValidator(t){let n=new AU(t,this.draft,this.shortcircuit);return r=>{let i=n.validate(r);return i.valid?{valid:!0,data:r,errorMessage:void 0}:{valid:!1,data:void 0,errorMessage:i.errors.map(s=>`${s.instanceLocation}: ${s.error}`).join("; ")}}}}});var La,RU=$(()=>{"use strict";La={probeTimeoutMs:3e4,callTimeoutMs:6e4,maxToolsPerServer:128,maxCatalogPages:10,maxCatalogBytes:131072,maxDescriptionLength:512,maxErrorMessageChars:300,maxPublicNameLength:64,maxInstructionsLength:1024,metaToolThreshold:20}});import{createHash as vYt}from"node:crypto";function bYt(e){let t=e.replace(/[.*+?^${}()|[\]\\]/gu,n=>n==="*"?"\0":`\\${n}`);return new RegExp(`^${t.replaceAll("\0",".*")}$`)}function dze(e,t,n){let r=t??"read_only";return r==="allow_all"?"allow":r==="approve_all"?"ask":n===!0?"allow":n===!1?"ask":xYt.some(i=>bYt(i).test(e))?"allow":"ask"}function Fg(e){return e.replace(/Bearer\s+[^\s"']+/giu,"Bearer ***").replace(/(https?:\/\/[^\s"'?]+)\?[^\s"']*/giu,"$1?***").replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/gu,"").slice(0,La.maxErrorMessageChars)}function pze(e,t){let n=`mcp__${e}__${t}`,r=n.replace(/[^A-Za-z0-9_-]/gu,"_");if(r===n&&r.length<=La.maxPublicNameLength)return r;let i=wYt(e,t),s=La.maxPublicNameLength-i.length-1;return`${r.slice(0,s)}_${i}`}function wYt(e,t){return vYt("sha256").update(`${e}\0${t}`).digest("hex").slice(0,12)}function hze(e){if(!(e==null||typeof e!="object"))try{let t=JSON.parse(JSON.stringify(e));return jb(t),t}catch{return}}function _Yt(e){return kYt.has(e)}function fze(e){return e.type!=="image"||e.data===void 0||e.mimeType===void 0||!_Yt(e.mimeType)||!SYt.test(e.data)?void 0:{data:Uint8Array.from(atob(e.data),n=>n.charCodeAt(0)),mediaType:e.mimeType}}function mze(e){return e.some(t=>t.type==="image"&&t.data!==void 0)}function r8(e){if(e.isError)return[{type:"text",text:e.content.filter(i=>i.type==="text"&&typeof i.text=="string").map(i=>i.text).join(`
165
165
  `)||"MCP tool returned an error."}];let t=[],n=[];for(let r of e.content)if(r.type==="text"&&typeof r.text=="string")n.push(r.text);else if(r.type==="resource_link"&&r.uri!==void 0)n.push(`Resource: ${r.name??"unnamed"} (${r.uri})`);else if(r.type==="image"&&r.data!==void 0)n.push(`![image](data:${r.mimeType??"image/png"};base64,${r.data})`);else if(r.type==="image")n.push(`[image: ${r.mimeType??"unknown type"}]`);else if(r.type==="audio")n.push("[audio result unsupported on Cloudflare Workers]");else if(r.type==="resource"&&r.resource?.text!==void 0){let i=r.resource.uri??"embedded resource";n.push(`--- ${i} ---
166
166
  ${r.resource.text}`)}else r.type==="resource"?n.push("[embedded resource: binary content not displayed]"):n.push(`[unsupported MCP content type: ${r.type}]`);return n.length>0&&t.push({type:"text",text:n.join(`
167
- `)}),t.length>0?t:[{type:"text",text:"(empty MCP result)"}]}var xYt,kYt,SYt,CU=$(()=>{"use strict";Ro();RU();xYt=["get_*","list_*","read_*","search_*","find_*","fetch_*","describe_*"];a(bYt,"globToRegExp");a(dze,"evaluateMcpToolPolicy");a(Fg,"scrubMcpErrorMessage");a(pze,"publicToolName");a(wYt,"hashSuffix");a(hze,"supportedOutputSchema");kYt=new Set(["image/png","image/jpeg"]),SYt=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/u;a(_Yt,"isImageMediaType");a(fze,"decodeImageBlock");a(mze,"containsImage");a(r8,"mapMcpResultToContentBlocks")});var Yhe,gze=$(()=>{Yhe={name:"dsh-edge",version:"0.27.0",description:"Your DeepSeek Harness, anywhere \u2014 deploy a persistent personal coding agent to Cloudflare Workers in one command",author:"pawaca",license:"MIT",type:"module",bin:{"dsh-edge":"scripts/cli.mjs"},files:["dist","worker","scripts/*.d.mts","scripts/*.mjs","wrangler.jsonc","README.md","README.zh.md","LICENSE","THIRD_PARTY_NOTICES.md"],repository:{type:"git",url:"git+https://github.com/pawaca/dsh-edge.git",directory:"apps/dsh-edge"},homepage:"https://github.com/pawaca/dsh-edge#readme",bugs:{url:"https://github.com/pawaca/dsh-edge/issues"},keywords:["deepseek","deepseek-harness","ai-agents","byok","cloudflare-workers","durable-objects","self-hosted"],engines:{node:">=22.14.0"},publishConfig:{access:"public"},dshEdge:{upstreamVersion:"0.2.1-rc.2"},scripts:{"bundle:direct":"pnpm run web:build && pnpm --dir standalone run build:worker:direct && node standalone/scripts/promote.mjs direct","bundle:isolated":"pnpm run web:build && pnpm --dir standalone run build:worker:isolated && node standalone/scripts/promote.mjs isolated","bundle:workers":"pnpm --dir standalone run build && pnpm --dir standalone run verify && node standalone/scripts/promote.mjs all",dev:"pnpm run bundle:direct && node scripts/dev.mjs direct","dev:isolated":"pnpm run bundle:isolated && node scripts/dev.mjs isolated","dev:container":"pnpm run bundle:isolated && node scripts/dev.mjs container","dsh-edge":"node scripts/cli.mjs","example:install":"node examples/install-keyless.mjs","install:cloudflare":"pnpm run bundle:workers && node scripts/cli.mjs install","legal:write":"node scripts/legal-files.mjs write","check:startup":"node scripts/check-startup.mjs","pack:verify":"node scripts/verify-packed.mjs",prepack:"node scripts/legal-files.mjs verify && pnpm run bundle:workers","web:build":"pnpm --dir standalone run build:web && node standalone/scripts/promote.mjs web",test:"vitest run --root ../.. --project edge-runtime","test:integration":"pnpm run bundle:workers && node tests/run-session-integration.mjs","test:container":"pnpm run bundle:isolated && node tests/container.integration.mjs","test:snapshot":"vitest run --root ../.. --config apps/dsh-edge/vitest.snapshot.config.ts",typecheck:"tsc --noEmit"},dependencies:{"@clack/prompts":"1.7.0","compare-versions":"6.1.1",execa:"^10.0.1","jsonc-parser":"^3.3.1",wrangler:"4.129.0",yaml:"2.9.0"},devDependencies:{"@cfworker/json-schema":"^4.1.1","@cloudflare/computer":"0.3.1","@cloudflare/workers-types":"5.20260904.1","@deepseek-ai/cordis":"4.0.5","@deepseek-ai/cosmokit":"1.8.6","@deepseek-ai/dsh-agent":"0.2.1-rc.2","@deepseek-ai/dsh-agent-instructions":"0.2.1-rc.2","@deepseek-ai/dsh-agent-loop":"0.2.1-rc.2","@deepseek-ai/dsh-anonymous-user-id":"0.2.1-rc.2","@deepseek-ai/dsh-api-gateway":"0.2.1-rc.2","@deepseek-ai/dsh-api-job-controller":"0.2.1-rc.2","@deepseek-ai/dsh-api-remote-access":"0.2.1-rc.2","@deepseek-ai/dsh-api-remotes":"0.2.1-rc.2","@deepseek-ai/dsh-api-session-controller":"0.2.1-rc.2","@deepseek-ai/dsh-api-settings-controller":"0.2.1-rc.2","@deepseek-ai/dsh-api-workspace-controller":"0.2.1-rc.2","@deepseek-ai/dsh-api-workspace-files":"0.2.1-rc.2","@deepseek-ai/dsh-attachment":"0.2.1-rc.2","@deepseek-ai/dsh-brand":"0.2.1-rc.2","@deepseek-ai/dsh-client-connection":"0.2.1-rc.2","@deepseek-ai/dsh-client-locale":"0.2.1-rc.2","@deepseek-ai/dsh-client-store":"0.2.1-rc.2","@deepseek-ai/dsh-client-ui-chat":"0.2.1-rc.2","@deepseek-ai/dsh-client-ui-conversation":"0.2.1-rc.2","@deepseek-ai/dsh-client-ui-settings":"0.2.1-rc.2","@deepseek-ai/dsh-client-ui-settings-general":"0.2.1-rc.2","@deepseek-ai/dsh-client-ui-theme":"0.2.1-rc.2","@deepseek-ai/dsh-command-compact":"0.2.1-rc.2","@deepseek-ai/dsh-command-feedback":"0.2.1-rc.2","@deepseek-ai/dsh-command-goal":"0.2.1-rc.2","@deepseek-ai/dsh-commands":"0.2.1-rc.2","@deepseek-ai/dsh-compaction":"0.2.1-rc.2","@deepseek-ai/dsh-compaction-basic":"0.2.1-rc.2","@deepseek-ai/dsh-compaction-image-offload":"0.2.1-rc.2","@deepseek-ai/dsh-compaction-tool-result-pruner":"0.2.1-rc.2","@deepseek-ai/dsh-credentials":"0.2.1-rc.2","@deepseek-ai/dsh-file-reference":"0.2.1-rc.2","@deepseek-ai/dsh-fs":"0.2.1-rc.2","@deepseek-ai/dsh-fs-observation-policy":"0.2.1-rc.2","@deepseek-ai/dsh-goal":"0.2.1-rc.2","@deepseek-ai/dsh-goal-round-driver":"0.2.1-rc.2","@deepseek-ai/dsh-home-paths":"0.2.1-rc.2","@deepseek-ai/dsh-host-directory-picker":"0.2.1-rc.2","@deepseek-ai/dsh-host-plugin-inventory":"0.2.1-rc.2","@deepseek-ai/dsh-jobs":"0.2.1-rc.2","@deepseek-ai/dsh-jobs-local":"0.2.1-rc.2","@deepseek-ai/dsh-launch-environment":"0.2.1-rc.2","@deepseek-ai/dsh-llm":"0.2.1-rc.2","@deepseek-ai/dsh-llm-deepseek":"0.2.1-rc.2","@deepseek-ai/dsh-llm-deepseek-api-key":"0.2.1-rc.2","@deepseek-ai/dsh-llm-pi-ai":"0.2.1-rc.2","@deepseek-ai/dsh-llm-retry":"0.2.1-rc.2","@deepseek-ai/dsh-message-feedback":"0.2.1-rc.2","@deepseek-ai/dsh-output-retention":"0.2.1-rc.2","@deepseek-ai/dsh-plan-mode":"0.2.1-rc.2","@deepseek-ai/dsh-ptc-runtime":"0.2.1-rc.2","@deepseek-ai/dsh-repeat-tool-reminder":"0.2.1-rc.2","@deepseek-ai/dsh-sandbox":"0.2.1-rc.2","@deepseek-ai/dsh-schedule":"0.2.1-rc.2","@deepseek-ai/dsh-scope":"0.2.1-rc.2","@deepseek-ai/dsh-session":"0.2.1-rc.2","@deepseek-ai/dsh-session-checkpoint-policy":"0.2.1-rc.2","@deepseek-ai/dsh-session-log-export":"0.2.1-rc.2","@deepseek-ai/dsh-session-format":"0.2.1-rc.2","@deepseek-ai/dsh-session-format-catalog":"0.2.1-rc.2","@deepseek-ai/dsh-session-format-v0-to-v1":"0.2.1-rc.2","@deepseek-ai/dsh-session-format-v1-to-v2":"0.2.1-rc.2","@deepseek-ai/dsh-session-format-v2-to-v3":"0.2.1-rc.2","@deepseek-ai/dsh-session-format-v3-to-v4":"0.2.1-rc.2","@deepseek-ai/dsh-session-persistence":"0.2.1-rc.2","@deepseek-ai/dsh-session-projection":"0.2.1-rc.2","@deepseek-ai/dsh-session-projection-cache":"0.2.1-rc.2","@deepseek-ai/dsh-session-stats":"0.2.1-rc.2","@deepseek-ai/dsh-session-turn-outline":"0.2.1-rc.2","@deepseek-ai/dsh-session-query":"0.2.1-rc.2","@deepseek-ai/dsh-session-reference":"0.2.1-rc.2","@deepseek-ai/dsh-session-title":"0.2.1-rc.2","@deepseek-ai/dsh-session-title-first-prompt-llm":"0.2.1-rc.2","@deepseek-ai/dsh-shell-env":"0.2.1-rc.2","@deepseek-ai/dsh-session-title-llm":"0.2.1-rc.2","@deepseek-ai/dsh-settings":"0.2.1-rc.2","@deepseek-ai/dsh-skill":"0.2.1-rc.2","@deepseek-ai/dsh-spill":"0.2.1-rc.2","@deepseek-ai/dsh-spill-policy":"0.2.1-rc.2","@deepseek-ai/dsh-storage":"0.2.1-rc.2","@deepseek-ai/dsh-storage-domain":"0.2.1-rc.2","@deepseek-ai/dsh-subagent":"0.2.1-rc.2","@deepseek-ai/dsh-subagent-fork-in-process":"0.2.1-rc.2","@deepseek-ai/dsh-subagent-spawn-in-process":"0.2.1-rc.2","@deepseek-ai/dsh-system-prompt":"0.2.1-rc.2","@deepseek-ai/dsh-time-context":"0.2.1-rc.2","@deepseek-ai/dsh-timeout":"0.2.1-rc.2","@deepseek-ai/dsh-token-meter":"0.2.1-rc.2","@deepseek-ai/dsh-tool-ask-user":"0.2.1-rc.2","@deepseek-ai/dsh-tool-call-timeout-policy":"0.2.1-rc.2","@deepseek-ai/dsh-tool-fs":"0.2.1-rc.2","@deepseek-ai/dsh-tool-fs-search":"0.2.1-rc.2","@deepseek-ai/dsh-tool-goal":"0.2.1-rc.2","@deepseek-ai/dsh-tool-jobs":"0.2.1-rc.2","@deepseek-ai/dsh-tool-schedule":"0.2.1-rc.2","@deepseek-ai/dsh-tool-skill":"0.2.1-rc.2","@deepseek-ai/dsh-tool-subagent":"0.2.1-rc.2","@deepseek-ai/dsh-tool-subagent-control":"0.2.1-rc.2","@deepseek-ai/dsh-tool-present":"0.2.1-rc.2","@deepseek-ai/dsh-tool-todo":"0.2.1-rc.2","@deepseek-ai/dsh-tool-web":"0.2.1-rc.2","@deepseek-ai/dsh-tool-workflow":"0.2.1-rc.2","@deepseek-ai/dsh-tool-working-directory":"0.2.1-rc.2","@deepseek-ai/dsh-tools":"0.2.1-rc.2","@deepseek-ai/dsh-typert-protocol":"0.2.1-rc.2","@deepseek-ai/dsh-typert-registry":"0.2.1-rc.2","@deepseek-ai/dsh-user-approval":"0.2.1-rc.2","@deepseek-ai/dsh-user-questions":"0.2.1-rc.2","@deepseek-ai/dsh-util-values":"0.2.1-rc.2","@deepseek-ai/dsh-web":"0.2.1-rc.2","@deepseek-ai/dsh-web-deepseek-api":"0.2.1-rc.2","@deepseek-ai/dsh-web-fetch-http":"0.2.1-rc.2","@deepseek-ai/dsh-web-search-deepseek":"0.2.1-rc.2","@deepseek-ai/dsh-workflow":"0.2.1-rc.2","@deepseek-ai/dsh-working-directory":"0.2.1-rc.2","@deepseek-ai/dsh-workspace":"0.2.1-rc.2","@deepseek-ai/schemastery":"3.18.5","@mixmark-io/domino":"2.2.0","@modelcontextprotocol/sdk":"1.30.0",acorn:"8.18.0","fast-png":"8.0.0",fflate:"0.8.3","jpeg-js":"0.4.4","just-bash":"3.4.2",minimatch:"10.2.6",playwright:"^1.49.0",re2js:"1.3.3",sucrase:"3.35.1",typescript:"^6.0.3",vitest:"^4.1.8",ws:"^8.21.0"}}});var Uw,yze,vze,i8=$(()=>{"use strict";gze();Uw=Yhe.version,yze=Yhe.dshEdge.upstreamVersion,vze=`npx dsh-edge@${Uw.includes("-")?"next":"latest"} upgrade`});function RYt(e){let t=/^::ffff:(\d+\.\d+\.\d+\.\d+)$/iu.exec(e);if(t!==null)return t[1];let n=/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/iu.exec(e);if(n!==null){let r=parseInt(n[1],16),i=parseInt(n[2],16);return`${String(r>>8)}.${String(r&255)}.${String(i>>8)}.${String(i&255)}`}}function CYt(e){return/^\d+\.\d+\.\d+\.\d+$/u.test(e)||e.includes(":")}function N1(e){let t=new URL(e);if(t.protocol!=="http:"&&t.protocol!=="https:")throw new Error("MCP server URL must use http: or https: protocol.");let n=t.hostname.toLowerCase(),r=n.endsWith(".")?n.slice(0,-1):n,i=r.startsWith("[")&&r.endsWith("]")?r.slice(1,-1):r;if(!(i==="localhost"||i==="127.0.0.1"||i==="::1")){for(let s of TYt)if(i.endsWith(s))throw new Error(`MCP server hostname "${i}" is blocked.`);if(CYt(i)){let s=RYt(i),o=s??i;for(let l of AYt)if(l.test(o))throw new Error(`MCP server address "${i}" is a private IP and is blocked.`);if(s===void 0){for(let l of IYt)if(l.test(i))throw new Error(`MCP server address "${i}" is a private IP and is blocked.`)}}}}function PYt(e){return e?.type==="bearer"&&e.token!==void 0?{Authorization:`Bearer ${e.token}`}:{}}async function xze(e,t,n){N1(e);let r=new _U(new URL(e),{requestInit:{headers:PYt(t),signal:n},fetch:Ww}),i=new kU({name:"dsh-edge",version:Uw},{capabilities:{},jsonSchemaValidator:OYt});return await i.connect(r),{client:i,close:a(async()=>{await i.close().catch(()=>{})},"close")}}async function bze(e,t,n){let r=AbortSignal.timeout(La.probeTimeoutMs),i;try{i=await xze(t,n,r)}catch(l){throw new Error(Fg(l instanceof Error?l.message:String(l)))}let{client:s,close:o}=i;try{let l=[],c=new Set,u=new Set,d;for(let f=0;f<La.maxCatalogPages;f++){let g=await s.listTools(d===void 0?void 0:{cursor:d},{signal:r});for(let y of g.tools){if(l.length>=La.maxToolsPerServer)break;let v=pze(e,y.name);if(c.has(v))throw new Error(`Server listed tool "${y.name}" more than once`);c.add(v);let x=y.annotations?.readOnlyHint,b=hze(y.outputSchema);l.push({name:y.name,publicName:v,description:y.description??"",inputSchema:y.inputSchema??{type:"object"},...b!==void 0?{outputSchema:b}:{},...x!==void 0?{annotations:{readOnlyHint:x}}:{}})}if(l.length>=La.maxToolsPerServer||(d=g.nextCursor??void 0,d===void 0))break;if(u.has(d))throw new Error("Server repeated a tools/list continuation cursor");u.add(d)}let p=s.getServerVersion?.(),h=s.getInstructions?.();return{tools:l,serverInfo:p?{name:p.name,version:p.version}:void 0,instructions:typeof h=="string"&&h.length>0?h.slice(0,La.maxInstructionsLength):void 0}}finally{await o()}}async function PU(e,t,n,r,i,s){let o=s??La.callTimeoutMs,l=i?AbortSignal.any([i,AbortSignal.timeout(o)]):AbortSignal.timeout(o),c;try{c=await xze(e,r,l)}catch(u){throw new Error(Fg(u instanceof Error?u.message:String(u)))}try{let u=await c.client.callTool({name:t,arguments:n},void 0,{signal:l});return{content:u.content??[],structuredContent:u.structuredContent,isError:u.isError===!0}}catch(u){throw new Error(Fg(u instanceof Error?u.message:String(u)))}finally{await c.close()}}var TYt,AYt,IYt,OYt,Ww,s8=$(()=>{"use strict";SBe();nze();uze();CU();RU();i8();TYt=[".internal",".local",".localhost"],AYt=[/^127\./u,/^10\./u,/^172\.(1[6-9]|2\d|3[01])\./u,/^192\.168\./u,/^0\./u,/^169\.254\./u],IYt=[/^::1$/u,/^fc/iu,/^fd/iu,/^fe[89ab][0-9a-f]:/iu];a(RYt,"extractMappedIPv4");a(CYt,"isIpAddress");a(N1,"assertSafeUrl");a(PYt,"buildHeaders");OYt=new IU,Ww=a(async(e,t)=>{let n=await globalThis.fetch(e,{...t,redirect:"manual"});if(n.status>=300&&n.status<400)throw new Error(`MCP server returned HTTP ${String(n.status)} redirect; redirects are blocked for security.`);return n},"noRedirectFetch");a(xze,"connectClient");a(bze,"probe");a(PU,"callTool")});var MU={};Ft(MU,{buildAuthorizationUrl:()=>WYt,discoverEndpoints:()=>FYt,exchangeCode:()=>qYt,isTokenExpired:()=>zYt,refreshToken:()=>BYt,registerClient:()=>UYt});function _ze(e){let t=new Uint8Array(e);return crypto.getRandomValues(t),Array.from(t,n=>n.toString(16).padStart(2,"0")).join("").slice(0,e)}async function jYt(e){let t=new TextEncoder().encode(e),n=await crypto.subtle.digest("SHA-256",t);return btoa(String.fromCharCode(...new Uint8Array(n))).replace(/\+/gu,"-").replace(/\//gu,"_").replace(/=/gu,"")}async function FYt(e){let t=AbortSignal.timeout(OU),n=new URL(e),r=n.pathname==="/"?"/.well-known/oauth-protected-resource":`/.well-known/oauth-protected-resource${n.pathname}`,i=new URL(r,n.origin);N1(i.href);let s=await Ww(i.href,{signal:t});if(!s.ok)throw new Error(`PRM discovery failed: HTTP ${s.status}`);let l=(await s.json()).authorization_servers?.[0];if(typeof l!="string")throw new Error("No authorization server in PRM");let c=new URL(l),u=c.pathname==="/"?"/.well-known/oauth-authorization-server":`/.well-known/oauth-authorization-server${c.pathname}`,d=new URL(u,c.origin);N1(d.href);let p=await Ww(d.href,{signal:t});if(!p.ok)throw new Error(`AS metadata failed: HTTP ${p.status}`);let h=await p.json();if(typeof h.authorization_endpoint!="string"||typeof h.token_endpoint!="string")throw new Error("Missing required endpoints in AS metadata");return{authorization:h.authorization_endpoint,token:h.token_endpoint,registration:h.registration_endpoint}}async function UYt(e,t,n){let r=AbortSignal.timeout(OU);N1(e);let i=await Ww(e,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({client_name:n,redirect_uris:[t],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}),signal:r});if(!i.ok)throw new Error(`DCR failed: HTTP ${i.status}`);let s=await i.json();if(typeof s.client_id!="string")throw new Error("DCR response missing client_id");return{clientId:s.client_id,clientSecret:s.client_secret}}async function WYt(e,t,n,r,i){let s=_ze(32),o=_ze(64),l=await jYt(o),c=new URL(e.authorization);for(let[u,d]of Object.entries({response_type:"code",client_id:t.clientId,redirect_uri:n,state:s,code_challenge:l,code_challenge_method:"S256",resource:i}))c.searchParams.set(u,d);return{authorizationUrl:c.href,pendingFlow:{state:s,codeVerifier:o,redirectUri:n,serverName:r,serverUrl:i,stagedClient:t,createdAt:Date.now()}}}async function qYt(e,t,n,r,i,s){let o=AbortSignal.timeout(OU),l=new URLSearchParams({grant_type:"authorization_code",code:n,redirect_uri:i,client_id:t.clientId,code_verifier:r});s!==void 0&&l.set("resource",s),t.clientSecret!==void 0&&l.set("client_secret",t.clientSecret),N1(e);let c=await Ww(e,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:l.toString(),signal:o});if(!c.ok)throw new Error(`Token exchange failed: HTTP ${c.status}`);return Eze(await c.json())}async function BYt(e,t,n,r){let i=AbortSignal.timeout(OU),s=new URLSearchParams({grant_type:"refresh_token",refresh_token:n,client_id:t.clientId});r!==void 0&&s.set("resource",r),t.clientSecret!==void 0&&s.set("client_secret",t.clientSecret),N1(e);let o=await Ww(e,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:s.toString(),signal:i});if(!o.ok)throw new Error(`Token refresh failed: HTTP ${o.status}`);return Eze(await o.json())}function Eze(e){let t=e;if(typeof t.access_token!="string")throw new Error("Missing access_token");let n=typeof t.expires_in=="number"?t.expires_in:void 0;return{accessToken:t.access_token,refreshToken:typeof t.refresh_token=="string"?t.refresh_token:void 0,expiresAt:n!==void 0?Date.now()+n*1e3:void 0,tokenType:typeof t.token_type=="string"?t.token_type:"Bearer",scope:typeof t.scope=="string"?t.scope:void 0}}function zYt(e){return e.expiresAt===void 0?!1:Date.now()>e.expiresAt-12e4}var OU,NU=$(()=>{"use strict";s8();OU=1e4;a(_ze,"randomString");a(jYt,"sha256Base64Url");a(FYt,"discoverEndpoints");a(UYt,"registerClient");a(WYt,"buildAuthorizationUrl");a(qYt,"exchangeCode");a(BYt,"refreshToken");a(Eze,"parseTokenResponse");a(zYt,"isTokenExpired")});var yr,Mze,WE=$(()=>{lr();Dr();yr=class extends Ri{static{a(this,"FsError")}code;constructor(e,t,n){super(e,t,n),this.code=t}},Mze=class extends Mt{static{a(this,"FileSystem")}constructor(e){super(e,"fs")}watch(e,t,n){return n.throwIfAborted(),Promise.reject(new yr("Filesystem watching is not supported by this provider.","FS_IO_ERROR"))}get sandboxMode(){}processPathFromHostPath(e){}}});function u8(e){return HU.test(e)}function GU(e){return e.invocation.modelInvocable}function BE(e){return e.invocation.userInvocable}function vfe(e){let t=Itn(e);return[`<skill_content name="${Rtn(e.name)}">`,"<skill_resources>",...t,"</skill_resources>","","<skill_instructions>",e.content,"</skill_instructions>","</skill_content>"].join(`
167
+ `)}),t.length>0?t:[{type:"text",text:"(empty MCP result)"}]}var xYt,kYt,SYt,CU=$(()=>{"use strict";Ro();RU();xYt=["get_*","list_*","read_*","search_*","find_*","fetch_*","describe_*"];a(bYt,"globToRegExp");a(dze,"evaluateMcpToolPolicy");a(Fg,"scrubMcpErrorMessage");a(pze,"publicToolName");a(wYt,"hashSuffix");a(hze,"supportedOutputSchema");kYt=new Set(["image/png","image/jpeg"]),SYt=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/u;a(_Yt,"isImageMediaType");a(fze,"decodeImageBlock");a(mze,"containsImage");a(r8,"mapMcpResultToContentBlocks")});var Yhe,gze=$(()=>{Yhe={name:"dsh-edge",version:"0.27.2",description:"Your DeepSeek Harness, anywhere \u2014 deploy a persistent personal coding agent to Cloudflare Workers in one command",author:"pawaca",license:"MIT",type:"module",bin:{"dsh-edge":"scripts/cli.mjs"},files:["dist","worker","scripts/*.d.mts","scripts/*.mjs","wrangler.jsonc","README.md","README.zh.md","LICENSE","THIRD_PARTY_NOTICES.md"],repository:{type:"git",url:"git+https://github.com/pawaca/dsh-edge.git",directory:"apps/dsh-edge"},homepage:"https://github.com/pawaca/dsh-edge#readme",bugs:{url:"https://github.com/pawaca/dsh-edge/issues"},keywords:["deepseek","deepseek-harness","ai-agents","byok","cloudflare-workers","durable-objects","self-hosted"],engines:{node:">=22.14.0"},publishConfig:{access:"public"},dshEdge:{upstreamVersion:"0.2.1-rc.2"},scripts:{"bundle:direct":"pnpm run web:build && pnpm --dir standalone run build:worker:direct && node standalone/scripts/promote.mjs direct","bundle:isolated":"pnpm run web:build && pnpm --dir standalone run build:worker:isolated && node standalone/scripts/promote.mjs isolated","bundle:workers":"pnpm --dir standalone run build && pnpm --dir standalone run verify && node standalone/scripts/promote.mjs all",dev:"pnpm run bundle:direct && node scripts/dev.mjs direct","dev:isolated":"pnpm run bundle:isolated && node scripts/dev.mjs isolated","dev:container":"pnpm run bundle:isolated && node scripts/dev.mjs container","dsh-edge":"node scripts/cli.mjs","example:install":"node examples/install-keyless.mjs","install:cloudflare":"pnpm run bundle:workers && node scripts/cli.mjs install","legal:write":"node scripts/legal-files.mjs write","check:startup":"node scripts/check-startup.mjs","pack:verify":"node scripts/verify-packed.mjs",prepack:"node scripts/legal-files.mjs verify && pnpm run bundle:workers","web:build":"pnpm --dir standalone run build:web && node standalone/scripts/promote.mjs web",test:"vitest run --root ../.. --project edge-runtime","test:integration":"pnpm run bundle:workers && node tests/run-session-integration.mjs","test:container":"pnpm run bundle:isolated && node tests/container.integration.mjs","test:snapshot":"vitest run --root ../.. --config apps/dsh-edge/vitest.snapshot.config.ts",typecheck:"tsc --noEmit"},dependencies:{"@clack/prompts":"1.7.0","compare-versions":"6.1.1",execa:"^10.0.1","jsonc-parser":"^3.3.1",wrangler:"4.129.0",yaml:"2.9.0"},devDependencies:{"@cfworker/json-schema":"^4.1.1","@cloudflare/computer":"0.3.1","@cloudflare/workers-types":"5.20260904.1","@deepseek-ai/cordis":"4.0.5","@deepseek-ai/cosmokit":"1.8.6","@deepseek-ai/dsh-agent":"0.2.1-rc.2","@deepseek-ai/dsh-agent-instructions":"0.2.1-rc.2","@deepseek-ai/dsh-agent-loop":"0.2.1-rc.2","@deepseek-ai/dsh-anonymous-user-id":"0.2.1-rc.2","@deepseek-ai/dsh-api-gateway":"0.2.1-rc.2","@deepseek-ai/dsh-api-job-controller":"0.2.1-rc.2","@deepseek-ai/dsh-api-remote-access":"0.2.1-rc.2","@deepseek-ai/dsh-api-remotes":"0.2.1-rc.2","@deepseek-ai/dsh-api-session-controller":"0.2.1-rc.2","@deepseek-ai/dsh-api-settings-controller":"0.2.1-rc.2","@deepseek-ai/dsh-api-workspace-controller":"0.2.1-rc.2","@deepseek-ai/dsh-api-workspace-files":"0.2.1-rc.2","@deepseek-ai/dsh-attachment":"0.2.1-rc.2","@deepseek-ai/dsh-brand":"0.2.1-rc.2","@deepseek-ai/dsh-client-connection":"0.2.1-rc.2","@deepseek-ai/dsh-client-locale":"0.2.1-rc.2","@deepseek-ai/dsh-client-store":"0.2.1-rc.2","@deepseek-ai/dsh-client-ui-chat":"0.2.1-rc.2","@deepseek-ai/dsh-client-ui-conversation":"0.2.1-rc.2","@deepseek-ai/dsh-client-ui-settings":"0.2.1-rc.2","@deepseek-ai/dsh-client-ui-settings-general":"0.2.1-rc.2","@deepseek-ai/dsh-client-ui-theme":"0.2.1-rc.2","@deepseek-ai/dsh-command-compact":"0.2.1-rc.2","@deepseek-ai/dsh-command-feedback":"0.2.1-rc.2","@deepseek-ai/dsh-command-goal":"0.2.1-rc.2","@deepseek-ai/dsh-commands":"0.2.1-rc.2","@deepseek-ai/dsh-compaction":"0.2.1-rc.2","@deepseek-ai/dsh-compaction-basic":"0.2.1-rc.2","@deepseek-ai/dsh-compaction-image-offload":"0.2.1-rc.2","@deepseek-ai/dsh-compaction-tool-result-pruner":"0.2.1-rc.2","@deepseek-ai/dsh-credentials":"0.2.1-rc.2","@deepseek-ai/dsh-file-reference":"0.2.1-rc.2","@deepseek-ai/dsh-fs":"0.2.1-rc.2","@deepseek-ai/dsh-fs-observation-policy":"0.2.1-rc.2","@deepseek-ai/dsh-goal":"0.2.1-rc.2","@deepseek-ai/dsh-goal-round-driver":"0.2.1-rc.2","@deepseek-ai/dsh-home-paths":"0.2.1-rc.2","@deepseek-ai/dsh-host-directory-picker":"0.2.1-rc.2","@deepseek-ai/dsh-host-plugin-inventory":"0.2.1-rc.2","@deepseek-ai/dsh-jobs":"0.2.1-rc.2","@deepseek-ai/dsh-jobs-local":"0.2.1-rc.2","@deepseek-ai/dsh-launch-environment":"0.2.1-rc.2","@deepseek-ai/dsh-llm":"0.2.1-rc.2","@deepseek-ai/dsh-llm-deepseek":"0.2.1-rc.2","@deepseek-ai/dsh-llm-deepseek-api-key":"0.2.1-rc.2","@deepseek-ai/dsh-llm-pi-ai":"0.2.1-rc.2","@deepseek-ai/dsh-llm-retry":"0.2.1-rc.2","@deepseek-ai/dsh-message-feedback":"0.2.1-rc.2","@deepseek-ai/dsh-output-retention":"0.2.1-rc.2","@deepseek-ai/dsh-plan-mode":"0.2.1-rc.2","@deepseek-ai/dsh-ptc-runtime":"0.2.1-rc.2","@deepseek-ai/dsh-repeat-tool-reminder":"0.2.1-rc.2","@deepseek-ai/dsh-sandbox":"0.2.1-rc.2","@deepseek-ai/dsh-schedule":"0.2.1-rc.2","@deepseek-ai/dsh-scope":"0.2.1-rc.2","@deepseek-ai/dsh-session":"0.2.1-rc.2","@deepseek-ai/dsh-session-checkpoint-policy":"0.2.1-rc.2","@deepseek-ai/dsh-session-log-export":"0.2.1-rc.2","@deepseek-ai/dsh-session-format":"0.2.1-rc.2","@deepseek-ai/dsh-session-format-catalog":"0.2.1-rc.2","@deepseek-ai/dsh-session-format-v0-to-v1":"0.2.1-rc.2","@deepseek-ai/dsh-session-format-v1-to-v2":"0.2.1-rc.2","@deepseek-ai/dsh-session-format-v2-to-v3":"0.2.1-rc.2","@deepseek-ai/dsh-session-format-v3-to-v4":"0.2.1-rc.2","@deepseek-ai/dsh-session-persistence":"0.2.1-rc.2","@deepseek-ai/dsh-session-projection":"0.2.1-rc.2","@deepseek-ai/dsh-session-projection-cache":"0.2.1-rc.2","@deepseek-ai/dsh-session-stats":"0.2.1-rc.2","@deepseek-ai/dsh-session-turn-outline":"0.2.1-rc.2","@deepseek-ai/dsh-session-query":"0.2.1-rc.2","@deepseek-ai/dsh-session-reference":"0.2.1-rc.2","@deepseek-ai/dsh-session-title":"0.2.1-rc.2","@deepseek-ai/dsh-session-title-first-prompt-llm":"0.2.1-rc.2","@deepseek-ai/dsh-shell-env":"0.2.1-rc.2","@deepseek-ai/dsh-session-title-llm":"0.2.1-rc.2","@deepseek-ai/dsh-settings":"0.2.1-rc.2","@deepseek-ai/dsh-skill":"0.2.1-rc.2","@deepseek-ai/dsh-spill":"0.2.1-rc.2","@deepseek-ai/dsh-spill-policy":"0.2.1-rc.2","@deepseek-ai/dsh-storage":"0.2.1-rc.2","@deepseek-ai/dsh-storage-domain":"0.2.1-rc.2","@deepseek-ai/dsh-subagent":"0.2.1-rc.2","@deepseek-ai/dsh-subagent-fork-in-process":"0.2.1-rc.2","@deepseek-ai/dsh-subagent-spawn-in-process":"0.2.1-rc.2","@deepseek-ai/dsh-system-prompt":"0.2.1-rc.2","@deepseek-ai/dsh-time-context":"0.2.1-rc.2","@deepseek-ai/dsh-timeout":"0.2.1-rc.2","@deepseek-ai/dsh-token-meter":"0.2.1-rc.2","@deepseek-ai/dsh-tool-ask-user":"0.2.1-rc.2","@deepseek-ai/dsh-tool-call-timeout-policy":"0.2.1-rc.2","@deepseek-ai/dsh-tool-fs":"0.2.1-rc.2","@deepseek-ai/dsh-tool-fs-search":"0.2.1-rc.2","@deepseek-ai/dsh-tool-goal":"0.2.1-rc.2","@deepseek-ai/dsh-tool-jobs":"0.2.1-rc.2","@deepseek-ai/dsh-tool-schedule":"0.2.1-rc.2","@deepseek-ai/dsh-tool-skill":"0.2.1-rc.2","@deepseek-ai/dsh-tool-subagent":"0.2.1-rc.2","@deepseek-ai/dsh-tool-subagent-control":"0.2.1-rc.2","@deepseek-ai/dsh-tool-present":"0.2.1-rc.2","@deepseek-ai/dsh-tool-todo":"0.2.1-rc.2","@deepseek-ai/dsh-tool-web":"0.2.1-rc.2","@deepseek-ai/dsh-tool-workflow":"0.2.1-rc.2","@deepseek-ai/dsh-tool-working-directory":"0.2.1-rc.2","@deepseek-ai/dsh-tools":"0.2.1-rc.2","@deepseek-ai/dsh-typert-protocol":"0.2.1-rc.2","@deepseek-ai/dsh-typert-registry":"0.2.1-rc.2","@deepseek-ai/dsh-user-approval":"0.2.1-rc.2","@deepseek-ai/dsh-user-questions":"0.2.1-rc.2","@deepseek-ai/dsh-util-values":"0.2.1-rc.2","@deepseek-ai/dsh-web":"0.2.1-rc.2","@deepseek-ai/dsh-web-deepseek-api":"0.2.1-rc.2","@deepseek-ai/dsh-web-fetch-http":"0.2.1-rc.2","@deepseek-ai/dsh-web-search-deepseek":"0.2.1-rc.2","@deepseek-ai/dsh-workflow":"0.2.1-rc.2","@deepseek-ai/dsh-working-directory":"0.2.1-rc.2","@deepseek-ai/dsh-workspace":"0.2.1-rc.2","@deepseek-ai/schemastery":"3.18.5","@mixmark-io/domino":"2.2.0","@modelcontextprotocol/sdk":"1.30.0",acorn:"8.18.0","fast-png":"8.0.0",fflate:"0.8.3","jpeg-js":"0.4.4","just-bash":"3.4.2",minimatch:"10.2.6",playwright:"^1.49.0",re2js:"1.3.3",sucrase:"3.35.1",typescript:"^6.0.3",vitest:"^4.1.8",ws:"^8.21.0"}}});var Uw,yze,vze,i8=$(()=>{"use strict";gze();Uw=Yhe.version,yze=Yhe.dshEdge.upstreamVersion,vze=`npx dsh-edge@${Uw.includes("-")?"next":"latest"} upgrade`});function RYt(e){let t=/^::ffff:(\d+\.\d+\.\d+\.\d+)$/iu.exec(e);if(t!==null)return t[1];let n=/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/iu.exec(e);if(n!==null){let r=parseInt(n[1],16),i=parseInt(n[2],16);return`${String(r>>8)}.${String(r&255)}.${String(i>>8)}.${String(i&255)}`}}function CYt(e){return/^\d+\.\d+\.\d+\.\d+$/u.test(e)||e.includes(":")}function N1(e){let t=new URL(e);if(t.protocol!=="http:"&&t.protocol!=="https:")throw new Error("MCP server URL must use http: or https: protocol.");let n=t.hostname.toLowerCase(),r=n.endsWith(".")?n.slice(0,-1):n,i=r.startsWith("[")&&r.endsWith("]")?r.slice(1,-1):r;if(!(i==="localhost"||i==="127.0.0.1"||i==="::1")){for(let s of TYt)if(i.endsWith(s))throw new Error(`MCP server hostname "${i}" is blocked.`);if(CYt(i)){let s=RYt(i),o=s??i;for(let l of AYt)if(l.test(o))throw new Error(`MCP server address "${i}" is a private IP and is blocked.`);if(s===void 0){for(let l of IYt)if(l.test(i))throw new Error(`MCP server address "${i}" is a private IP and is blocked.`)}}}}function PYt(e){return e?.type==="bearer"&&e.token!==void 0?{Authorization:`Bearer ${e.token}`}:{}}async function xze(e,t,n){N1(e);let r=new _U(new URL(e),{requestInit:{headers:PYt(t),signal:n},fetch:Ww}),i=new kU({name:"dsh-edge",version:Uw},{capabilities:{},jsonSchemaValidator:OYt});return await i.connect(r),{client:i,close:a(async()=>{await i.close().catch(()=>{})},"close")}}async function bze(e,t,n){let r=AbortSignal.timeout(La.probeTimeoutMs),i;try{i=await xze(t,n,r)}catch(l){throw new Error(Fg(l instanceof Error?l.message:String(l)))}let{client:s,close:o}=i;try{let l=[],c=new Set,u=new Set,d;for(let f=0;f<La.maxCatalogPages;f++){let g=await s.listTools(d===void 0?void 0:{cursor:d},{signal:r});for(let y of g.tools){if(l.length>=La.maxToolsPerServer)break;let v=pze(e,y.name);if(c.has(v))throw new Error(`Server listed tool "${y.name}" more than once`);c.add(v);let x=y.annotations?.readOnlyHint,b=hze(y.outputSchema);l.push({name:y.name,publicName:v,description:y.description??"",inputSchema:y.inputSchema??{type:"object"},...b!==void 0?{outputSchema:b}:{},...x!==void 0?{annotations:{readOnlyHint:x}}:{}})}if(l.length>=La.maxToolsPerServer||(d=g.nextCursor??void 0,d===void 0))break;if(u.has(d))throw new Error("Server repeated a tools/list continuation cursor");u.add(d)}let p=s.getServerVersion?.(),h=s.getInstructions?.();return{tools:l,serverInfo:p?{name:p.name,version:p.version}:void 0,instructions:typeof h=="string"&&h.length>0?h.slice(0,La.maxInstructionsLength):void 0}}finally{await o()}}async function PU(e,t,n,r,i,s){let o=s??La.callTimeoutMs,l=i?AbortSignal.any([i,AbortSignal.timeout(o)]):AbortSignal.timeout(o),c;try{c=await xze(e,r,l)}catch(u){throw new Error(Fg(u instanceof Error?u.message:String(u)))}try{let u=await c.client.callTool({name:t,arguments:n},void 0,{signal:l});return{content:u.content??[],structuredContent:u.structuredContent,isError:u.isError===!0}}catch(u){throw new Error(Fg(u instanceof Error?u.message:String(u)))}finally{await c.close()}}var TYt,AYt,IYt,OYt,Ww,s8=$(()=>{"use strict";SBe();nze();uze();CU();RU();i8();TYt=[".internal",".local",".localhost"],AYt=[/^127\./u,/^10\./u,/^172\.(1[6-9]|2\d|3[01])\./u,/^192\.168\./u,/^0\./u,/^169\.254\./u],IYt=[/^::1$/u,/^fc/iu,/^fd/iu,/^fe[89ab][0-9a-f]:/iu];a(RYt,"extractMappedIPv4");a(CYt,"isIpAddress");a(N1,"assertSafeUrl");a(PYt,"buildHeaders");OYt=new IU,Ww=a(async(e,t)=>{let n=await globalThis.fetch(e,{...t,redirect:"manual"});if(n.status>=300&&n.status<400)throw new Error(`MCP server returned HTTP ${String(n.status)} redirect; redirects are blocked for security.`);return n},"noRedirectFetch");a(xze,"connectClient");a(bze,"probe");a(PU,"callTool")});var MU={};Ft(MU,{buildAuthorizationUrl:()=>WYt,discoverEndpoints:()=>FYt,exchangeCode:()=>qYt,isTokenExpired:()=>zYt,refreshToken:()=>BYt,registerClient:()=>UYt});function _ze(e){let t=new Uint8Array(e);return crypto.getRandomValues(t),Array.from(t,n=>n.toString(16).padStart(2,"0")).join("").slice(0,e)}async function jYt(e){let t=new TextEncoder().encode(e),n=await crypto.subtle.digest("SHA-256",t);return btoa(String.fromCharCode(...new Uint8Array(n))).replace(/\+/gu,"-").replace(/\//gu,"_").replace(/=/gu,"")}async function FYt(e){let t=AbortSignal.timeout(OU),n=new URL(e),r=n.pathname==="/"?"/.well-known/oauth-protected-resource":`/.well-known/oauth-protected-resource${n.pathname}`,i=new URL(r,n.origin);N1(i.href);let s=await Ww(i.href,{signal:t});if(!s.ok)throw new Error(`PRM discovery failed: HTTP ${s.status}`);let l=(await s.json()).authorization_servers?.[0];if(typeof l!="string")throw new Error("No authorization server in PRM");let c=new URL(l),u=c.pathname==="/"?"/.well-known/oauth-authorization-server":`/.well-known/oauth-authorization-server${c.pathname}`,d=new URL(u,c.origin);N1(d.href);let p=await Ww(d.href,{signal:t});if(!p.ok)throw new Error(`AS metadata failed: HTTP ${p.status}`);let h=await p.json();if(typeof h.authorization_endpoint!="string"||typeof h.token_endpoint!="string")throw new Error("Missing required endpoints in AS metadata");return{authorization:h.authorization_endpoint,token:h.token_endpoint,registration:h.registration_endpoint}}async function UYt(e,t,n){let r=AbortSignal.timeout(OU);N1(e);let i=await Ww(e,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({client_name:n,redirect_uris:[t],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}),signal:r});if(!i.ok)throw new Error(`DCR failed: HTTP ${i.status}`);let s=await i.json();if(typeof s.client_id!="string")throw new Error("DCR response missing client_id");return{clientId:s.client_id,clientSecret:s.client_secret}}async function WYt(e,t,n,r,i){let s=_ze(32),o=_ze(64),l=await jYt(o),c=new URL(e.authorization);for(let[u,d]of Object.entries({response_type:"code",client_id:t.clientId,redirect_uri:n,state:s,code_challenge:l,code_challenge_method:"S256",resource:i}))c.searchParams.set(u,d);return{authorizationUrl:c.href,pendingFlow:{state:s,codeVerifier:o,redirectUri:n,serverName:r,serverUrl:i,stagedClient:t,createdAt:Date.now()}}}async function qYt(e,t,n,r,i,s){let o=AbortSignal.timeout(OU),l=new URLSearchParams({grant_type:"authorization_code",code:n,redirect_uri:i,client_id:t.clientId,code_verifier:r});s!==void 0&&l.set("resource",s),t.clientSecret!==void 0&&l.set("client_secret",t.clientSecret),N1(e);let c=await Ww(e,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:l.toString(),signal:o});if(!c.ok)throw new Error(`Token exchange failed: HTTP ${c.status}`);return Eze(await c.json())}async function BYt(e,t,n,r){let i=AbortSignal.timeout(OU),s=new URLSearchParams({grant_type:"refresh_token",refresh_token:n,client_id:t.clientId});r!==void 0&&s.set("resource",r),t.clientSecret!==void 0&&s.set("client_secret",t.clientSecret),N1(e);let o=await Ww(e,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:s.toString(),signal:i});if(!o.ok)throw new Error(`Token refresh failed: HTTP ${o.status}`);return Eze(await o.json())}function Eze(e){let t=e;if(typeof t.access_token!="string")throw new Error("Missing access_token");let n=typeof t.expires_in=="number"?t.expires_in:void 0;return{accessToken:t.access_token,refreshToken:typeof t.refresh_token=="string"?t.refresh_token:void 0,expiresAt:n!==void 0?Date.now()+n*1e3:void 0,tokenType:typeof t.token_type=="string"?t.token_type:"Bearer",scope:typeof t.scope=="string"?t.scope:void 0}}function zYt(e){return e.expiresAt===void 0?!1:Date.now()>e.expiresAt-12e4}var OU,NU=$(()=>{"use strict";s8();OU=1e4;a(_ze,"randomString");a(jYt,"sha256Base64Url");a(FYt,"discoverEndpoints");a(UYt,"registerClient");a(WYt,"buildAuthorizationUrl");a(qYt,"exchangeCode");a(BYt,"refreshToken");a(Eze,"parseTokenResponse");a(zYt,"isTokenExpired")});var yr,Mze,WE=$(()=>{lr();Dr();yr=class extends Ri{static{a(this,"FsError")}code;constructor(e,t,n){super(e,t,n),this.code=t}},Mze=class extends Mt{static{a(this,"FileSystem")}constructor(e){super(e,"fs")}watch(e,t,n){return n.throwIfAborted(),Promise.reject(new yr("Filesystem watching is not supported by this provider.","FS_IO_ERROR"))}get sandboxMode(){}processPathFromHostPath(e){}}});function u8(e){return HU.test(e)}function GU(e){return e.invocation.modelInvocable}function BE(e){return e.invocation.userInvocable}function vfe(e){let t=Itn(e);return[`<skill_content name="${Rtn(e.name)}">`,"<skill_resources>",...t,"</skill_resources>","","<skill_instructions>",e.content,"</skill_instructions>","</skill_content>"].join(`
168
168
  `)}function Itn(e){let t=e.resourceBase;if(t===void 0)return[`Resources for this skill are managed by provider "${qE(e.provider)}".`,"Load referenced resources only as needed."];switch(t.kind){case"directory":return[`Base directory for this skill: ${qE(t.path)}`,"Resolve relative paths mentioned by this skill against the base directory before using them. Load referenced resources only as needed."];case"url":return[`Base URL for this skill: ${qE(t.url)}`,"Resolve relative URLs mentioned by this skill against the base URL before using them. Load referenced resources only as needed."];case"opaque":return[`Resources for this skill: ${qE(t.description)}`,"Load referenced resources only as needed."];default:return Nr(t,"SkillResourceBase.kind")}}function Rtn(e){return e.replaceAll("&","&amp;").replaceAll('"',"&quot;").replaceAll("<","&lt;")}function qE(e){return e.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;")}function Ptn(e,t){if(Array.isArray(e))return{candidates:e,complete:!0};if(e===null||typeof e!="object")throw tHe(t);let n=e;if(!Array.isArray(n.candidates)||typeof n.complete!="boolean")throw tHe(t);return n}function tHe(e){return new TypeError(`skill provider "${e}" list() must return an array or { candidates, complete } observation`)}function Mtn(e){return{name:e.name,description:e.description,...e.whenToUse!==void 0?{whenToUse:e.whenToUse}:{},invocation:e.invocation,source:e.source,provider:e.provider,...e.resourceBase!==void 0?{resourceBase:e.resourceBase}:{},rank:Atn,locator:e,...e.path!==void 0?{path:e.path}:{},...e.metadata!==void 0?{metadata:e.metadata}:{}}}function Ntn(e,t){if(typeof e.name!="string")throw new TypeError(`skill provider "${t}" returned a non-string skill name`);if(!HU.test(e.name))throw new Error(`skill provider "${t}" returned invalid skill name "${e.name}"`);if(typeof e.description!="string")throw new TypeError(`skill provider "${t}" returned skill "${e.name}" with a non-string description`);if(e.description.length===0)throw new Error(`skill provider "${t}" returned skill "${e.name}" without a description`);if(xfe(e.invocation,`skill provider "${t}" returned skill "${e.name}"`),e.whenToUse!==void 0&&typeof e.whenToUse!="string")throw new TypeError(`skill provider "${t}" returned skill "${e.name}" with a non-string whenToUse`);if(typeof e.source!="string")throw new TypeError(`skill provider "${t}" returned skill "${e.name}" with a non-string source`);if(typeof e.rank!="number"||!Number.isFinite(e.rank))throw new Error(`skill provider "${t}" returned skill "${e.name}" with an invalid rank`);if(typeof e.provider!="string")throw new TypeError(`skill provider "${t}" returned skill "${e.name}" with a non-string provider`);if(e.provider!==t)throw new Error(`skill provider "${t}" returned skill "${e.name}" for provider "${e.provider}"`);if(e.path!==void 0&&typeof e.path!="string")throw new TypeError(`skill provider "${t}" returned skill "${e.name}" with a non-string path`)}function Dtn(e){if(!HU.test(e.name))throw new Error(`invalid skill name "${e.name}"`);if(e.description.length===0)throw new Error(`skill "${e.name}" requires a description`);xfe(e.invocation,`runtime skill "${e.name}"`)}function $tn(e){let t=e.name,n=e.description,r=e.whenToUse,i=e.invocation,s=e.source,o=e.provider,l=e.content,c=e.path;if(typeof t!="string")throw new TypeError("loaded skill name must be a string");if(!HU.test(t))throw new Error(`loaded skill has invalid name "${t}"`);if(typeof n!="string")throw new TypeError(`loaded skill "${t}" description must be a string`);if(n.length===0)throw new Error(`loaded skill "${t}" requires a description`);if(xfe(i,`loaded skill "${t}"`),r!==void 0&&typeof r!="string")throw new TypeError(`loaded skill "${t}" whenToUse must be a string`);if(typeof s!="string")throw new TypeError(`loaded skill "${t}" source must be a string`);if(typeof o!="string")throw new TypeError(`loaded skill "${t}" provider must be a string`);if(typeof l!="string")throw new TypeError(`loaded skill "${t}" content must be a string`);if(c!==void 0&&typeof c!="string")throw new TypeError(`loaded skill "${t}" path must be a string`)}function Ltn(e){let{name:t,description:n,whenToUse:r,invocation:i,source:s,provider:o,resourceBase:l}=e;return{name:t,...e.path===void 0?{}:{path:e.path},description:n,...r!==void 0?{whenToUse:r}:{},invocation:i,source:s,provider:o,...l!==void 0?{resourceBase:l}:{}}}function xfe(e,t){if(e===void 0)return;if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError(`${t} with a non-object invocation policy`);let n=e;if(typeof n.modelInvocable!="boolean")throw new TypeError(`${t} with a non-boolean invocation.modelInvocable`);if(typeof n.userInvocable!="boolean")throw new TypeError(`${t} with a non-boolean invocation.userInvocable`)}function jtn(e,t){return sHe(e.name,t.name)}function sHe(e,t){return e<t?-1:e>t?1:0}function Ftn(e,t){return e.candidate.rank-t.candidate.rank||e.providerOrder-t.providerOrder||e.localOrder-t.localOrder}function Utn(e,t,n=1){if(!Number.isInteger(t)||t<n)throw new Error(`skill: ${e} must be an integer greater than or equal to ${n}`)}function nHe(e,t){return t===void 0?e:(c8(t),new Promise((n,r)=>{let i=a(()=>{t.removeEventListener("abort",s)},"cleanup"),s=a(()=>{i(),r(zU(t.reason))},"onAbort");t.addEventListener("abort",s,{once:!0}),e.then(o=>{i(),n(o)},o=>{i(),r(zU(o))})}))}function c8(e){if(e?.aborted===!0)throw zU(e.reason)}function zU(e){try{if(e instanceof Error)return e}catch{}return new Error(BU(e))}function BU(e){try{return String(e)}catch{return"[unrenderable thrown value]"}}var HU,eHe,Ttn,qU,Atn,rHe,Ctn,iHe,Otn,Bw=$(()=>{lr();os();qc();En();HU=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,eHe=128,Ttn=2,qU="runtime",Atn=250,rHe=600;a(u8,"isSkillName");a(GU,"isModelInvocable");a(BE,"isUserInvocable");a(vfe,"renderSkillContent");a(Itn,"renderResourceHint");a(Rtn,"escapeAttr");a(qE,"escapeText");Ctn=class{static{a(this,"SkillLayer")}providers;runtime=new Map;constructor(e){this.providers=new ug(t=>new Error(e===void 0?`a skill provider named "${t}" is already registered`:`a skill provider named "${t}" is already registered in this scope`))}isEmpty(){return this.providers.isEmpty()&&this.runtime.size===0}},iHe=class extends Mt{static{a(this,"SkillRegistry")}static Config=j.object({collectCacheMaxEntries:j.number().default(eHe)});collectCacheMaxEntries;layers=new dg(e=>new Ctn(e),()=>{this.invalidateCache()});collectCache=new Map;revision=0;nextProviderOrder=0;scopeIds=new WeakMap;nextScopeId=1;constructor(e,t={}){super(e,"skills"),this.collectCacheMaxEntries=t.collectCacheMaxEntries??eHe,Utn("collectCacheMaxEntries",this.collectCacheMaxEntries)}registerProvider(e){let t=new AbortController,n,r,i={signal:t.signal,invalidate:a(()=>{let s=n;s!==void 0&&s.layer.providers.get(s.name)?.provider===r&&this.invalidateCache()},"invalidate")};try{r=e(i);let s=r.name;if(s===qU)throw new Error(`"${qU}" is reserved for runtime skill registrations`);let o=this.nextProviderOrder;return this.nextProviderOrder+=1,this.layers.effect(this.ctx,l=>{let c=l.providers.insert(s,{provider:r,order:o});return n={layer:l,name:s},()=>{n=void 0,c(),t.abort(new Error(`skill provider "${s}" disposed`))}},{label:"skills.registerProvider()"})}catch(s){throw t.abort(s),s}}register(e){Dtn(e);let t=lc(this.ctx),n=t===void 0?this.layers.global:this.layers.peek(t);if(n!==void 0&&n.runtime.has(e.name))return this.ctx.logger.warn(`runtime skill "${e.name}" ignored because it is already registered`),()=>{};let r={...e,invocation:e.invocation??{modelInvocable:!0,userInvocable:!0},provider:e.provider??qU};return this.layers.effect(this.ctx,i=>(i.runtime.set(r.name,r),()=>{i.runtime.delete(r.name)}),{label:"skills.register()"})}async list(e={}){return(await this.snapshot(e)).skills}async snapshot(e={}){let t=await this.collect(e);return{skills:[...t.entries.values()].map(n=>Ltn(n.candidate)).sort(jtn),complete:t.cacheable}}async get(e,t={}){if(!u8(e))return;let n=await this.collect(t);c8(t.signal);let r=n.entries.get(e);if(r===void 0)return;let i=await nHe(r.provider.get(r.candidate,t),t.signal);if(i!==void 0){if($tn(i),i.name!==r.candidate.name){this.invalidateEntry(r);return}return i}}async collect(e){c8(e.signal);let t=1;for(;;){let n=this.revision,r=this.collectCacheKey(e.cwd,OI(e.scope),n),i=this.collectCache.get(r);if(i!==void 0)return{entries:i,cacheable:!0};let s=await this.collectFresh(e);if(c8(e.signal),n!==this.revision){if(t<Ttn){t+=1;continue}return{entries:s.entries,cacheable:!1}}if(s.cacheable&&(this.collectCache.set(r,s.entries),this.collectCache.size>this.collectCacheMaxEntries)){let o=this.collectCache.keys().next();this.collectCache.delete(o.value)}return s}}async collectFresh(e){let t=[this.layers.global,...this.layers.chainLayers(e.scope)],n=new Map,r=!0;for(let i of t){let s=await this.collectLayer(i,e);s.cacheable||(r=!1);for(let o of s.entries)n.set(o.candidate.name,o)}return{entries:n,cacheable:r}}async collectLayer(e,t){let n=await this.listLayerCandidates(e,t);n.entries.sort(Ftn);let r=new Set,i=[];for(let s of n.entries){let o=s.candidate;if(r.has(o.name)){this.ctx.logger.warn(`skill "${o.name}" from ${o.source} ignored because a higher-priority skill already exists`);continue}r.add(o.name),i.push(s)}return{entries:i,cacheable:n.cacheable}}async listLayerCandidates(e,t){c8(t.signal);let n=[],r=!0,i=0;for(let s of[...e.runtime.values()].sort((o,l)=>sHe(o.name,l.name)))n.push({candidate:Mtn(s),provider:Otn,providerOrder:-1,localOrder:i,layer:e}),i+=1;for(let{provider:s,order:o}of[...e.providers.values()]){let l=0,c;try{c=await nHe(s.list(t),t.signal)}catch(d){if(t.signal?.aborted===!0)throw zU(t.signal.reason);r=!1,this.ctx.logger.warn(`skill provider "${s.name}" skipped: ${BU(d)}`)}if(c===void 0)continue;let u=Ptn(c,s.name);u.complete||(r=!1);for(let d of u.candidates)Ntn(d,s.name),n.push({candidate:d,provider:s,providerOrder:o,localOrder:l,layer:e}),l+=1}return{entries:n,cacheable:r}}invalidateCache(){this.revision+=1,this.collectCache.clear(),this.notifyChange()}invalidateEntry(e){e.layer.providers.get(e.provider.name)?.provider===e.provider&&this.invalidateCache()}scopeId(e){let t=this.scopeIds.get(e);return t===void 0&&(t=this.nextScopeId,this.nextScopeId+=1,this.scopeIds.set(e,t)),t}collectCacheKey(e,t,n){return JSON.stringify({cwd:e,scopes:t.map(r=>this.scopeId(r)),revision:n})}notifyChange(){for(let e of this.ctx.events.dispatch("emit",["skills/change"]))try{let t=e();Promise.resolve(t).catch(n=>{this.ctx.logger.warn(`skills/change listener rejected: ${BU(n)}`)})}catch(t){this.ctx.logger.warn(`skills/change listener threw: ${BU(t)}`)}}};a(Ptn,"normalizeProviderObservation");a(tHe,"invalidProviderObservation");Otn={name:qU,list(){return Promise.resolve([])},get(e){return Promise.resolve(e.locator)}};a(Mtn,"runtimeCandidate");a(Ntn,"validateCandidate");a(Dtn,"validateRuntimeSkill");a($tn,"validateDefinition");a(Ltn,"toSummary");a(xfe,"validateInvocation");a(jtn,"compareSkillSummary");a(sHe,"compareCodePoints");a(Ftn,"compareIndexedCandidates");a(Utn,"assertPositiveInteger");a(nHe,"waitWithAbort");a(c8,"throwIfAborted");a(zU,"toError");a(BU,"errorMessage")});var Sh,ZE=$(()=>{Sh=class{static{a(this,"Deque")}buffer=new Array(16);head=0;count=0;get size(){return this.count}pushBack(e){this.ensureCapacity();let t=this.head+this.count;this.buffer[t<this.buffer.length?t:t-this.buffer.length]=e,this.count+=1}pushFront(e){this.ensureCapacity(),this.head=this.head===0?this.buffer.length-1:this.head-1,this.buffer[this.head]=e,this.count+=1}popFront(){if(this.count===0)return;let e=this.buffer[this.head];return this.buffer[this.head]=void 0,this.head+=1,this.head===this.buffer.length&&(this.head=0),this.count-=1,this.compact(),e}clear(){this.buffer=new Array(16),this.head=0,this.count=0}ensureCapacity(){this.count<this.buffer.length||this.resize(this.buffer.length*2)}compact(){if(this.count===0){this.head=0;return}this.buffer.length>16&&this.count<=this.buffer.length/4&&this.resize(Math.max(16,this.buffer.length/2))}resize(e){let t=new Array(e),n=this.head;for(let r=0;r<this.count;r+=1)t[r]=this.buffer[n],n+=1,n===this.buffer.length&&(n=0);this.buffer=t,this.head=0}}});var F1,xVe,Ame=$(()=>{lr();F1=class extends Error{static{a(this,"DirectoryPickerError")}code;path;constructor(e,t,n){super(n),this.code=e,this.path=t,this.name="DirectoryPickerError"}},xVe=class extends Mt{static{a(this,"DirectoryPicker")}constructor(e){super(e,"directoryPicker")}}});var rz,Mge,fa,am=$(()=>{rz=class{static{a(this,"FifoQueue")}incoming=[];outgoing=[];get length(){return this.incoming.length+this.outgoing.length}enqueue(t){this.incoming.push(t)}dequeue(){if(this.outgoing.length===0)for(;this.incoming.length>0;)this.outgoing.push(this.incoming.pop());return this.outgoing.pop()}},Mge=class{static{a(this,"EventStream")}queue=new rz;waiting=new rz;done=!1;finalResultPromise;resolveFinalResult;isComplete;extractResult;constructor(t,n){this.isComplete=t,this.extractResult=n,this.finalResultPromise=new Promise(r=>{this.resolveFinalResult=r})}push(t){if(this.done)return;this.isComplete(t)&&(this.done=!0,this.resolveFinalResult(this.extractResult(t)));let n=this.waiting.dequeue();n?n({value:t,done:!1}):this.queue.enqueue(t)}end(t){for(this.done=!0,t!==void 0&&this.resolveFinalResult(t);this.waiting.length>0;)this.waiting.dequeue()({value:void 0,done:!0})}async*[Symbol.asyncIterator](){for(;;)if(this.queue.length>0)yield this.queue.dequeue();else{if(this.done)return;{let t=await new Promise(n=>this.waiting.enqueue(n));if(t.done)return;yield t.value}}}result(){return this.finalResultPromise}},fa=class extends Mge{static{a(this,"AssistantMessageEventStream")}#e=Date.now();#n=performance.now();constructor(){super(t=>t.type==="done"||t.type==="error",t=>{if(t.type==="done")return t.message;if(t.type==="error")return t.error;throw new Error("Unexpected event type for final result")})}push(t){t.type==="done"?this.#r(t.message):t.type==="error"&&this.#r(t.error),super.push(t)}end(t){t!==void 0&&this.#r(t),super.end(t)}#r(t){this.done||t.durationMs!==void 0||t.timestamp<this.#e||(t.durationMs=Math.max(0,Math.round(performance.now()-this.#n)))}}});function Lun(e,t,n){return{role:"assistant",content:[],api:e.api,provider:e.provider,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:"error",errorMessage:t instanceof Error?t.message:String(t),timestamp:n}}function jun(e){return typeof e.result=="function"}async function Fun(e,t){for await(let n of t)e.push(n);e.end(jun(t)?await t.result():void 0)}function Eh(e,t){let n=Date.now(),r=new fa;return t().then(i=>Fun(r,i)).catch(i=>{let s=Lun(e,i,n);r.push({type:"error",reason:"error",error:s}),r.end(s)}),r}function el(e,t){let n={stream:a((r,i,s)=>Eh(r,async()=>(await e()).stream(r,i,s)),"stream"),streamSimple:a((r,i,s)=>Eh(r,async()=>(await e()).streamSimple(r,i,s)),"streamSimple")};return t?.fetchDeferred&&(n.fetchDeferred=(r,i,s)=>Eh(r,async()=>{let o=await e();if(!o.fetchDeferred)throw new Error("API does not support deferred responses");return o.fetchDeferred(r,i,s)})),t?.cancelDeferred&&(n.cancelDeferred=async(r,i,s)=>{let o=await e();if(!o.cancelDeferred)throw new Error("API cannot cancel deferred responses");await o.cancelDeferred(r,i,s)}),n}var Cp=$(()=>{am();a(Lun,"createSetupErrorMessage");a(jun,"hasResult");a(Fun,"forwardStream");a(Eh,"lazyStream");a(el,"lazyApi")});function Wun(){return globalThis.process?.env}function UJe(){return{async env(e){let t=Wun()?.[e];return typeof t=="string"&&t.trim().length>0?t:void 0},async fileExists(e){try{let t=await FJe("node:fs/promises"),n=e;return n.startsWith("~")&&(n=(await FJe("node:os")).homedir()+n.slice(1)),await t.access(n),!0}catch{return!1}}}}var Uun,FJe,WJe=$(()=>{Uun=function(e,t){return typeof e=="string"&&/^\.\.?\//.test(e)?e.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i,function(n,r,i,s,o){return r?t?".jsx":".js":i&&(!s||!o)?n:i+s+"."+o.toLowerCase()+"js"}):e},FJe=a(e=>import(Uun(e)),"importNodeModule");a(Wun,"getProcessEnv");a(UJe,"defaultProviderAuthContext")});function qJe(e){if(e.reason!==void 0)return e.reason;let t=new Error("The operation was aborted");return t.name="AbortError",t}function Th(e){return e??new AbortController().signal}function Ah(e,t){return t.aborted?(e.catch(()=>{}),Promise.reject(qJe(t))):new Promise((n,r)=>{let i=!1,s=a(()=>t.removeEventListener("abort",o),"cleanup"),o=a(()=>{i||(i=!0,s(),r(qJe(t)))},"onAbort");t.addEventListener("abort",o,{once:!0}),e.then(l=>{i||(i=!0,s(),n(l))},l=>{i||(i=!0,s(),r(l))}),t.aborted&&o()})}var iz=$(()=>{a(qJe,"abortReason");a(Th,"operationSignal");a(Ah,"raceWithAbortSignal")});var sz,BJe=$(()=>{iz();sz=class{static{a(this,"InMemoryCredentialStore")}credentials=new Map;chains=new Map;enqueue(t,n,r){let i=Th(r?.signal),s=this.chains.get(t)??Promise.resolve(),o=(async()=>(await s.catch(()=>{}),i.throwIfAborted(),n()))(),l=o.catch(()=>{});return this.chains.set(t,l),l.then(()=>{this.chains.get(t)===l&&this.chains.delete(t)}),Ah(o,i)}async read(t,n){return n?.signal?.throwIfAborted(),this.credentials.get(t)}async list(t){return t?.signal?.throwIfAborted(),[...this.credentials].map(([n,r])=>({providerId:n,type:r.type}))}modify(t,n,r){return this.enqueue(t,async()=>{let i=this.credentials.get(t),s=await n(i);return r?.signal?.throwIfAborted(),s!==void 0&&this.credentials.set(t,s),s??i},r)}delete(t,n){return this.enqueue(t,async()=>{this.credentials.delete(t)},n)}}});function vv(e){return e instanceof Error?e.message||e.name:typeof e=="string"?e:String(e)}function qun(e){if(!(e instanceof Error))return{name:"ThrownValue",message:vv(e)};let t=e.code;return{name:e.name||void 0,message:e.message||e.name,stack:e.stack,code:typeof t=="string"||typeof t=="number"?t:void 0}}function oz(e,t,n){return{type:e,timestamp:Date.now(),error:qun(t),details:n}}function xv(e,t){e.diagnostics=[...e.diagnostics??[],t]}var Q8=$(()=>{a(vv,"formatThrownValue");a(qun,"extractDiagnosticError");a(oz,"createAssistantMessageDiagnostic");a(xv,"appendAssistantMessageDiagnostic")});function Bun(e,t){if(t==null)return e;let n=vv(t).trim();return!n||e.includes(n)?e:`${e}: ${n}`}var Qi,az=$(()=>{Q8();Qi=class extends Error{static{a(this,"ModelsError")}code;constructor(t,n,r){super(Bun(n,r?.cause),r),this.name="ModelsError",this.code=t}};a(Bun,"withCauseDetail")});function Dge(e,t,n,r){let i=Th(r?.signal);return Ah(zun(e,t,n,r,i),i)}async function zun(e,t,n,r,i){i.throwIfAborted();let s=r?.env?Hun(n,r.env):n;if(r?.apiKey!==void 0&&e.auth.apiKey)return Nge(s,e.auth.apiKey,e.id,{type:"api_key",key:r.apiKey,env:r.env},i);let o=await Qun(t,e.id,i);if(o){if(o.type==="oauth"&&e.auth.oauth)return Kun(t,e.id,e.auth.oauth,o,i,r?.minOAuthValidityMs);if(o.type==="api_key"&&e.auth.apiKey){let l=r?.env?{...o,env:{...o.env,...r.env}}:o;return Nge(s,e.auth.apiKey,e.id,l,i)}return}return e.auth.apiKey?Nge(s,e.auth.apiKey,e.id,void 0,i):void 0}function Hun(e,t){return{env:a(async n=>t[n]||await e.env(n),"env"),fileExists:a(n=>e.fileExists(n),"fileExists")}}async function $ge(e,t,n,r,i){let s,o=new AbortController,l=a(()=>o.abort(i.reason),"cancelLockWait");i.addEventListener("abort",l,{once:!0}),i.aborted&&l();try{s=await e.modify(t,async c=>{if(i.removeEventListener("abort",l),i.throwIfAborted(),c?.type==="oauth"&&r(c))try{return await n.refresh(c,AbortSignal.timeout(Vun))}catch(u){throw new Qi("oauth",`OAuth refresh failed for ${t}`,{cause:u})}},{signal:o.signal})}catch(c){throw c instanceof Qi?c:(i.throwIfAborted(),new Qi("auth",`Credential store modify failed for ${t}`,{cause:c}))}finally{i.removeEventListener("abort",l)}return s?.type==="oauth"?s:void 0}async function Kun(e,t,n,r,i,s){let o=Math.max(Gun,s??0),l=a(u=>Date.now()+o>=u.expires,"expiresSoon"),c=r;if(l(c)){let u=await $ge(e,t,n,l,i);if(!u)return;if(c=u,s!==void 0&&l(c))throw new Qi("oauth",`OAuth refresh returned a token that expires too soon for ${t}`)}try{return{auth:await n.toAuth(c),source:"OAuth"}}catch(u){throw new Qi("oauth",`OAuth auth derivation failed for ${t}`,{cause:u})}}async function Nge(e,t,n,r,i){try{return await t.resolve({ctx:e,credential:r,signal:i})}catch(s){throw new Qi("auth",`API key auth failed for provider ${n}`,{cause:s})}}async function Qun(e,t,n){try{return await e.read(t,{signal:n})}catch(r){throw new Qi("auth",`Credential store read failed for ${t}`,{cause:r})}}var Gun,Vun,zJe=$(()=>{iz();az();az();a(Dge,"resolveProviderAuth");a(zun,"resolveProviderAuthWithSignal");a(Hun,"overlayEnvAuthContext");Gun=300*1e3,Vun=15e3;a($ge,"refreshStoredOAuthCredential");a(Kun,"resolveStoredOAuth");a(Nge,"resolveApiKey");a(Qun,"readCredential")});var lz,HJe=$(()=>{lz=class{static{a(this,"InMemoryModelsStore")}entries=new Map;async read(t,n){n?.signal?.throwIfAborted();let r=this.entries.get(t);return r?structuredClone(r):void 0}async write(t,n,r){r?.signal?.throwIfAborted(),this.entries.set(t,structuredClone(n))}async delete(t,n){n?.signal?.throwIfAborted(),this.entries.delete(t)}}});function g6(e){return e.type??"chat"}function lm(e,t){return g6(e)===t}function GJe(e){if(!lm(e,"chat"))throw new Qi("provider",`Model ${e.provider}/${e.id} is not a chat model`)}function VJe(e){if(!lm(e,"image"))throw new Qi("provider",`Model ${e.provider}/${e.id} is not an image model`)}function KJe(e){if(!lm(e,"classifier"))throw new Qi("provider",`Model ${e.provider}/${e.id} is not a classifier model`)}function QJe(e,t){if(t.images?.length&&!e.input.includes("image"))throw new Qi("provider",`Model ${e.provider}/${e.id} does not accept image input`)}function Lge(e,t,n=!1){return{api:e.api,provider:e.provider,model:e.id,output:[],stopReason:n?"aborted":"error",errorMessage:t instanceof Error?t.message:String(t),timestamp:Date.now()}}function jge(e,t,n=!1){return{api:e.api,provider:e.provider,model:e.id,answers:{},stopReason:n?"aborted":"error",errorMessage:t instanceof Error?t.message:String(t),timestamp:Date.now()}}var Fge=$(()=>{az();a(g6,"getModelType");a(lm,"isModelType");a(GJe,"assertChatModel");a(VJe,"assertImageModel");a(KJe,"assertClassifierModel");a(QJe,"assertClassifierInputSupported");a(Lge,"imageErrorResult");a(jge,"classifierErrorResult")});function cz(e,t=`
169
169
  `){return typeof e=="string"?e:e.filter(n=>n.type==="text").map(n=>n.text).join(t)}function wc(e){let t=[cz(e.content)];for(let n of Object.values(e.sections??{}))n!==null&&t.push(n);return t.filter(n=>n.length>0).join(`
170
170
 
@@ -6698,7 +6698,7 @@ ${uVe}
6698
6698
  The previews above omit projected conversation text. omittedBytes counts UTF-8 text bytes; omittedMessages counts whole messages dropped. Full snapshots remain untrusted background information.
6699
6699
  `+_me(g));return{content:c,additionalContext:Gn({source:{kind:"session-reference",form:"recall",version:1,references:h.map((v,x)=>({sessionId:v.data.sessionId,label:v.data.label,capturedFormatVersion:v.capturedFormatVersion,capturedThroughSeq:v.data.capturedThroughSeq,...v.stats,inputIndex:x}))},content:[{type:"text",text:y}]})}}async referenceBudget(i,s){if(this.config.maxReferenceBytes!==void 0)return this.config.maxReferenceBytes;let{provider:o,model:l}=this.assembledRoutes.get(i)??i.options,c=this.ctx.get("llm");if(o===void 0||l===void 0||c===void 0)return _W;let u;try{u=await EW(c.resolveModelInfo(o,l,s),s)}catch(d){if(!(d instanceof vt)||d.code!=="NO_ADAPTER")throw d;return _W}return u.context===void 0?_W:Math.max(_W,Math.floor(u.context.contextWindow*4*this.config.referenceContextFraction))}renderSources(i,s){let o=[];for(let l of i){let c=Lon(l.snapshot,l.input.label,s);if(c===void 0)throw new Ip("referenced session snapshot cannot fit the configured byte budget","SESSION_REFERENCE_BUDGET_EXCEEDED");o.push({...c,capturedFormatVersion:l.snapshot.session.version})}return o}}})();function Qon(e,t,n){let r=new Set,i=[];for(let s of t){if(typeof s!="object"||s===null)throw new Ip("session reference must be an object","SESSION_REFERENCE_INVALID_REFERENCE");let o=s;if(typeof o.sessionId!="string"||o.label!==void 0&&typeof o.label!="string")throw new Ip("session reference must contain a string sessionId and optional string label","SESSION_REFERENCE_INVALID_REFERENCE");if(o.sessionId===e)throw new Ip(`session ${JSON.stringify(e)} cannot reference itself`,"SESSION_REFERENCE_SELF_REFERENCE");r.has(o.sessionId)||(r.add(o.sessionId),i.push({sessionId:o.sessionId,label:o.label??o.sessionId}))}if(i.length>n)throw new Ip(`a message may reference at most ${n} sessions`,"SESSION_REFERENCE_TOO_MANY");return i}a(Qon,"normalizeReferences");function Jon(e){return`${Von}${_me(e)}${Kon}`}a(Jon,"renderPrompt");function Zon(e){let t=e?.values.title;return t??void 0}a(Zon,"titleOf");function cVe(e,t){return e!==void 0&&t!==void 0&&e===t?0:e===void 0?1:2}a(cVe,"candidateRank");function _8(e){if(e?.aborted===!0)throw Eme(e)}a(_8,"assertNotCancelled");function EW(e,t){return t===void 0?e:new Promise((n,r)=>{let i=a(()=>{r(Eme(t))},"onAbort");t.addEventListener("abort",i,{once:!0}),e.then(s=>{t.removeEventListener("abort",i),n(s)},s=>{t.removeEventListener("abort",i),r(s instanceof Error?s:new Error(String(s)))}),t.aborted&&i()})}a(EW,"settleWithCancellation");function Eme(e){return new Ip("session reference preparation was cancelled","SESSION_REFERENCE_CANCELLED",{cause:e.reason})}a(Eme,"cancelled");WE();import{AsyncLocalStorage as Xon}from"node:async_hooks";function Tme(e,t){return t.startsWith("/")?hVe(t):hVe(`${e}/${t}`)}a(Tme,"resolvePath");function hVe(e){let t=[];for(let n of e.split("/"))if(!(n===""||n===".")){if(n===".."){t.pop();continue}t.push(n)}return`/${t.join("/")}`}a(hVe,"normalizePath");function uv(e){return e.replace(/\r\n/g,`
6700
6700
  `).replace(/\r/g,`
6701
- `)}a(uv,"normalizeLineEndings");function Qw(e,t){return`${String(e)}:${String(t)}`}a(Qw,"versionOf");async function fVe(e,t){let{mtime:n}=await e.stat(t);for(;Date.now()<=n;)await new Promise(r=>setTimeout(r,1))}a(fVe,"waitPastModification");function mVe(e){return e.isFile?"file":e.isDirectory?"directory":"other"}a(mVe,"entryType");function Yon(e){return e.isSymbolicLink?"symlink":e.isFile?"file":e.isDirectory?"directory":"other"}a(Yon,"pathType");var TW=class e extends Mze{static{a(this,"EdgeFileSystem")}static storage=new Xon;locks=new Map;constructor(t){super(t)}bind(t,n){return()=>{}}runInScope(t,n,r){return e.storage.run({vfs:t,cwd:n},r)}searchScope(){return this.requireBinding()}requireBinding(){let t=e.storage.getStore();if(t===void 0)throw new yr("File operations are only available during an active turn.","FS_IO_ERROR");return t}get sandboxMode(){}async resolve(t,n){if(n?.signal?.aborted)throw new yr("resolve aborted","FS_ABORTED");if(t.trim().length===0)throw new yr("file_path must be a non-empty string","FS_NOT_FOUND");let r=this.requireBinding(),i=Tme(n?.cwd??r.cwd,t);return{targetKey:i,displayPath:i}}processPath(t){return String(t.targetKey)}fileUrl(t){return`file://${this.processPath(t)}`}async watch(t,n,r){if(r.aborted)throw new yr("watch aborted","FS_ABORTED");let i=this.processPath(t),s=this.ctx.on("fs/observed",o=>{let l=this.processPath(o);(l===i||(l.slice(0,l.lastIndexOf("/"))||"/")===i)&&n()});return async()=>{s()}}contains(t,n){let r=this.processPath(t),i=this.processPath(n);return i===r||i.startsWith(`${r}/`)}async stat(t,n){if(n?.aborted)throw new yr("stat aborted","FS_ABORTED");let r=this.requireBinding(),i=r.vfs;try{let s=await i.stat(this.processPath(t));return{version:Qw(s.mtime,s.size),type:mVe(s),size:s.size}}catch(s){if(s instanceof Error&&"code"in s&&s.code==="ENOENT")return this.processPath(t)===Tme(r.cwd,".")?{version:Qw(0,0),type:"directory",size:0}:void 0;throw new yr(`cannot stat "${t.displayPath}":${s instanceof Error?s.message:String(s)}`,"FS_IO_ERROR",{cause:s})}}async lstat(t,n,r){if(r?.aborted)throw new yr("lstat aborted","FS_ABORTED");if(t.trim().length===0)throw new yr("file_path must be a non-empty string","FS_NOT_FOUND");let i=this.requireBinding(),s=Tme(n?.cwd??i.cwd,t),o=i.vfs;try{let l=await o.lstat(s);return{version:Qw(l.mtime,l.size),type:Yon(l),size:l.size}}catch(l){if(l instanceof Error&&"code"in l&&l.code==="ENOENT")return;throw new yr(`cannot lstat "${t}": ${l instanceof Error?l.message:String(l)}`,"FS_IO_ERROR",{cause:l})}}async readText(t,n){if(n?.aborted)throw new yr("readText aborted","FS_ABORTED");let r=this.requireBinding().vfs,i=this.processPath(t);try{let s=await r.readFile(i,"utf8"),o=await r.stat(i),l=Qw(o.mtime,o.size);return this.ctx.emit("fs/observed",t,{kind:"present",version:l},void 0),uv(s)}catch(s){throw new yr(`cannot read "${t.displayPath}": ${s instanceof Error?s.message:String(s)}`,"FS_IO_ERROR",{cause:s})}}async openReadStream(t,n){let r=a(s=>{throw s instanceof yr||n?.aborted&&s===n.reason||s instanceof Error&&s.name==="AbortError"?s:new yr(`cannot read "${t.displayPath}": ${s instanceof Error?s.message:String(s)}`,"FS_IO_ERROR",{cause:s})},"classify"),i;try{i=(await this.requireBinding().vfs.readFile(this.processPath(t))).getReader()}catch(s){return r(s)}return{async read(){n?.throwIfAborted();try{return await i.read()}catch(s){return r(s)}},async close(s){try{await i.cancel()}catch(o){s||r(o)}finally{i.releaseLock()}}}}async streamText(t,n){n?.throwIfAborted();let r=await this.openReadStream(t,n);return(async function*(){let i=new TextDecoder("utf-8",{fatal:!0}),s="",o=!1;try{for(;;){n?.throwIfAborted();let{done:c,value:u}=await r.read();if(c)break;let d=s+i.decode(u,{stream:!0});if(d.includes("\0"))throw new yr("File is not text.","FS_NOT_TEXT");s=d.endsWith("\r")?"\r":"",yield uv(s===""?d:d.slice(0,-1))}let l=s+i.decode();l!==""&&(yield uv(l))}catch(l){throw o=!0,n?.aborted&&l===n.reason?l:l instanceof TypeError?new yr("File is not valid UTF-8 text.","FS_NOT_TEXT",{cause:l}):l}finally{await r.close(o)}})()}async readByteRange(t,n,r){r?.throwIfAborted();let i=await this.openReadStream(t,r),s=[],o=0,l=0,c=!1;try{for(;l<n.length;){r?.throwIfAborted();let{done:p,value:h}=await i.read();if(p)break;let f=Math.min(h.byteLength,Math.max(0,n.offset-o));o+=h.byteLength;let g=h.subarray(f,Math.min(h.byteLength,f+n.length-l));g.byteLength>0&&(s.push(g.slice()),l+=g.byteLength)}let u=new Uint8Array(l),d=0;for(let p of s)u.set(p,d),d+=p.byteLength;return u}catch(u){throw c=!0,u}finally{await i.close(c)}}async readBytes(t,n,r){if(n?.aborted)throw new yr("readBytes aborted","FS_ABORTED");let i=this.requireBinding().vfs,s=this.processPath(t);try{let l=(await i.readFile(s)).getReader(),c=[],u=0;for(;;){let{done:h,value:f}=await l.read();if(h)break;if(u+=f.byteLength,u>r)throw await l.cancel(),new yr(`"${t.displayPath}" exceeds the ${String(r)}-byte read limit`,"FS_TOO_LARGE");c.push(f)}let d=new Uint8Array(u),p=0;for(let h of c)d.set(h,p),p+=h.byteLength;return d}catch(o){throw o instanceof yr?o:new yr(`cannot read "${t.displayPath}": ${o instanceof Error?o.message:String(o)}`,"FS_IO_ERROR",{cause:o})}}async listDir(t,n){if(n?.aborted)throw new yr("listDir aborted","FS_ABORTED");let r=this.requireBinding().vfs,i=this.processPath(t);try{return(await r.readdir(i)).map(o=>({name:o.name,type:mVe(o),target:{targetKey:`${i}/${o.name}`,displayPath:`${i}/${o.name}`},version:Qw(o.mtime,o.size),size:o.size}))}catch(s){throw new yr(`cannot list "${t.displayPath}": ${s instanceof Error?s.message:String(s)}`,"FS_NOT_DIRECTORY",{cause:s})}}writeText(t,n,r,i){return this.withLock(t.targetKey,()=>this.writeTextLocked(t,n,r,i))}async writeTextLocked(t,n,r,i){if(i?.aborted)throw new yr("writeText aborted","FS_ABORTED");let s=this.requireBinding().vfs,o=this.processPath(t),l=await this.stat(t);if(l!==void 0&&l.type!=="file")throw new yr(`cannot write "${t.displayPath}": not a regular file`,"FS_NOT_REGULAR_FILE");if(r?.kind==="replaceIfVersion"){if(l===void 0)throw new yr(`cannot write "${t.displayPath}": file no longer exists`,"FS_STALE_VERSION");if(l.version!==r.version)throw new yr(`cannot write "${t.displayPath}": file changed since it was read`,"FS_STALE_VERSION")}else if(r?.kind==="createIfAbsent"&&l!==void 0)throw new yr(`cannot overwrite existing "${t.displayPath}" without reading it first`,"FS_NOT_OBSERVED");let c=null;if(l!==void 0)try{c=uv(await s.readFile(o,"utf8"))}catch{}let u=o.substring(0,o.lastIndexOf("/"))||"/";try{await s.mkdir(u,{recursive:!0})}catch{}l!==void 0&&await fVe(s,o),await s.writeFile(o,n);let p=(await this.stat(t))?.version??Qw(Date.now(),n.length);return this.ctx.emit("fs/observed",t,{kind:"present",version:p},void 0),{operation:l!==void 0?"update":"create",version:p,before:c,after:uv(n)}}editText(t,n,r,i){return this.withLock(t.targetKey,()=>this.editTextLocked(t,n,r,i))}async editTextLocked(t,n,r,i){if(i?.aborted)throw new yr("editText aborted","FS_ABORTED");let s=this.requireBinding().vfs,o=this.processPath(t),l=await this.stat(t);if(l===void 0)throw new yr(`cannot edit "${t.displayPath}": file not found`,"FS_STALE_VERSION");if(l.type!=="file")throw new yr(`cannot edit "${t.displayPath}": not a regular file`,"FS_NOT_REGULAR_FILE");if(r!==void 0&&l.version!==r.version)throw new yr(`cannot edit "${t.displayPath}": file changed since it was read`,"FS_STALE_VERSION");let c=uv(await s.readFile(o,"utf8")),u=uv(n.oldString);if(u.length===0)throw new yr("old_string must be a non-empty string","FS_EDIT_NOT_FOUND");let d=c.split(u).length-1;if(d===0)throw new yr(`old_string was not found in "${t.displayPath}"`,"FS_EDIT_NOT_FOUND");if(!n.replaceAll&&d>1)throw new yr(`old_string matched ${String(d)} times in "${t.displayPath}"; provide a more specific old_string or set replace_all to true`,"FS_AMBIGUOUS_EDIT");let p=uv(n.newString),h=c.split(u).join(p);await fVe(s,o),await s.writeFile(o,h);let g=(await this.stat(t))?.version??Qw(Date.now(),h.length);return this.ctx.emit("fs/observed",t,{kind:"present",version:g},void 0),{version:g,before:c,after:h}}async withLock(t,n){let r=(this.locks.get(t)??Promise.resolve()).then(n,n),i=r.then(()=>{},()=>{});this.locks.set(t,i);try{return await r}finally{this.locks.get(t)===i&&this.locks.delete(t)}}};lr();var gVe='Tokens prefixed with @ are paths the user explicitly referenced. Relative paths resolve from the workspace root; absolute paths identify files or directories on the host. A trailing slash marks a directory: list it when its contents matter. Anything else is a file: use the read tool when its contents are needed, and do not claim to have inspected it before reading. @"..." quotes a path containing spaces.',yVe=class extends Mt{static{a(this,"FileReferenceService")}constructor(e){super(e,"fileReferences")}};var ean=20,tan="/workspace",AW=class extends yVe{static{a(this,"EdgeFileReferenceService")}withFiles;maxResults;constructor(t,n){if(super(t),this.withFiles=r=>n.withFiles(r),this.maxResults=n.maxResults??ean,!Number.isSafeInteger(this.maxResults)||this.maxResults<=0)throw new Error("dsh-edge: file reference maxResults must be a positive safe integer");t.inject(["systemPrompt"],r=>{r.systemPrompt.section({name:"context:file-reference",order:r.systemPrompt.getSectionOrder("FILE_REFERENCE"),text:gVe})})}async list(t,n,r){r.throwIfAborted();let i=this.ctx.get("workingDirectory")?.get(t.session)??t.session.header.cwd??tan,s=nan(n);if(s===void 0)return[];let o=ran(i,s.directory);if(o===void 0)return[];let l;try{l=await this.withFiles(c=>c.readdir(o))}catch{return r.throwIfAborted(),[]}return r.throwIfAborted(),ian(l,s,this.maxResults)}};function nan(e){let t=e.replaceAll("\\","/");for(let r of t){let i=r.codePointAt(0)??0;if(i<32||i===127||r==='"')return}let n=t.lastIndexOf("/");return n<0?{directory:"",fragment:t}:{directory:t.slice(0,n+1),fragment:t.slice(n+1)}}a(nan,"splitQuery");function ran(e,t){let n=[];for(let i of t.split("/"))if(!(i===""||i===".")){if(i===".."){if(n.length===0)return;n.pop();continue}n.push(i)}let r=e.endsWith("/")?e.slice(0,-1):e;return n.length===0?r===""?"/":r:`${r}/${n.join("/")}`}a(ran,"resolveWithin");function ian(e,t,n){let r=t.fragment.toLowerCase(),i=[];for(let s of e){if(s.name.startsWith(".")&&!t.fragment.startsWith("."))continue;let o=s.isDirectory?"directory":s.isFile?"file":void 0;if(o===void 0)continue;let l=san(s.name.toLowerCase(),r,o);l!==void 0&&i.push({candidate:{path:`${t.directory}${s.name}`,kind:o},score:l})}return i.sort((s,o)=>o.score-s.score||vVe(s.candidate.kind)-vVe(o.candidate.kind)||oan(s.candidate.path,o.candidate.path)),i.slice(0,n).map(s=>s.candidate)}a(ian,"rankCandidates");function san(e,t,n){let r=n==="directory"?25:0;if(t==="")return r;if(e===t)return 1e3+r;if(e.startsWith(t))return 900+r;if(e.includes(t))return 700+r}a(san,"scoreName");function vVe(e){return e==="directory"?0:1}a(vVe,"kindRank");function oan(e,t){return e<t?-1:e>t?1:0}a(oan,"compareText");Ame();var aan="/workspace",lan=1e3,IW=class extends xVe{static{a(this,"EdgeDirectoryPicker")}withFiles;root;maxEntries;browseCapability={kind:"browse",list:a((t,n)=>this.list(t,n),"list"),createDirectory:a((t,n)=>this.createDirectory(t,n),"createDirectory")};constructor(t,n){if(super(t),this.withFiles=r=>n.withFiles(r),this.root=uan(n.root??aan),this.maxEntries=n.maxEntries??lan,!Number.isSafeInteger(this.maxEntries)||this.maxEntries<=0)throw new Error("dsh-edge: directory picker maxEntries must be a positive safe integer")}capability(){return this.browseCapability}async list(t,n){n?.throwIfAborted();let r=t===void 0?this.root:Ime(this.root,t);if(r===void 0)throw new F1("directory-unreadable",t??this.root,`cannot list "${t??""}": not an absolute path under ${this.root}`);let i;try{i=await this.withFiles(c=>c.readdir(r))}catch(c){if(n?.throwIfAborted(),r===this.root&&bVe(c))i=[];else throw new F1("directory-unreadable",r,`cannot list ${r}: ${wVe(c)}`)}n?.throwIfAborted();let s=i.filter(c=>c.isDirectory).map(c=>c.name).sort((c,u)=>c.localeCompare(u)),o=s.length>this.maxEntries,l=s.slice(0,this.maxEntries).map(c=>({name:c,path:`${r==="/"?"":r}/${c}`,hidden:c.startsWith(".")}));return{path:r,home:this.root,crumbs:can(this.root,r),entries:l,truncated:o}}async createDirectory(t,n){let r=Ime(this.root,t);if(r===void 0)throw new F1("directory-create-failed",t,`cannot create under "${t}": not an absolute path under ${this.root}`);if(!dan(n))throw new F1("directory-create-failed",`${r==="/"?"":r}/${n}`,`"${n}" is not a single path segment`);let i=`${r==="/"?"":r}/${n}`,s=!1;try{if(s=await this.withFiles(async o=>{try{return await o.stat(i),!0}catch(l){if(bVe(l))return!1;throw l}}),!s)return await this.withFiles(async o=>{r===this.root&&await o.mkdir(this.root,{recursive:!0}),await o.mkdir(i)}),i}catch(o){throw new F1("directory-create-failed",i,`cannot create ${i}: ${wVe(o)}`)}throw new F1("directory-exists",i,`${i} already exists`)}};function Ime(e,t){if(!t.startsWith("/")||kVe(t))return;let n=[];for(let i of t.split("/"))if(!(i===""||i===".")){if(i===".."){if(n.length===0)return;n.pop();continue}n.push(i)}let r=n.length===0?"/":`/${n.join("/")}`;if(!(r!==e&&!r.startsWith(e==="/"?"/":`${e}/`)))return r}a(Ime,"resolveWithinRoot");function can(e,t){let n=[{name:e,path:e,hidden:!1}];if(t===e)return n;let r=t.slice(e==="/"?1:e.length+1),i=e==="/"?"":e;for(let s of r.split("/"))i=`${i}/${s}`,n.push({name:s,path:i,hidden:!1});return n}a(can,"directoryCrumbs");function uan(e){let t=Ime("/",e);if(t===void 0)throw new Error("dsh-edge: directory picker root must be an absolute path");return t}a(uan,"normalizeRoot");function dan(e){return e.trim()!==""&&e!=="."&&e!==".."&&!/[/\\]/u.test(e)&&!kVe(e)}a(dan,"isSingleSegment");function kVe(e){for(let t of e){let n=t.codePointAt(0)??0;if(n<32||n===127)return!0}return!1}a(kVe,"hasControlCharacter");function bVe(e){return e instanceof Error&&"code"in e&&e.code==="ENOENT"}a(bVe,"isNotFound");function wVe(e){return e instanceof Error?e.message:String(e)}a(wVe,"messageOf");lr();var SVe=[{id:"@deepseek-ai/dsh-typert-registry",inject:[],immediately:!0},{id:"@deepseek-ai/dsh-api-gateway",inject:["@deepseek-ai/dsh-typert-registry","@deepseek-ai/dsh-client-connection"],immediately:!0},{id:"@deepseek-ai/dsh-api-remote-access",inject:["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-client-ui-renderer"],external:["@deepseek-ai/dsh-api-gateway/client"]},{id:"@deepseek-ai/dsh-client-ui-open-in-app",inject:["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-shortcuts","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-sidebar-documentpreview"]},{id:"@deepseek-ai/dsh-api-session-controller",inject:["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-client-file-upload"],external:["@deepseek-ai/dsh-api-gateway/client"]},{id:"@deepseek-ai/dsh-api-job-controller",inject:["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-client-connection"],external:["@deepseek-ai/dsh-api-gateway/client"]},{id:"@deepseek-ai/dsh-api-workspace-files",inject:["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-client-resources"]},{id:"@deepseek-ai/dsh-api-workspace-controller",inject:["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-client-connection"],external:["@deepseek-ai/dsh-api-gateway/client"]},{id:"@deepseek-ai/dsh-client-modules",inject:[],immediately:!0},{id:"@deepseek-ai/dsh-client-connection",inject:[],immediately:!0},{id:"@deepseek-ai/dsh-client-file-upload",inject:["@deepseek-ai/dsh-api-remotes"],immediately:!0},{id:"@deepseek-ai/dsh-api-remotes",inject:["@deepseek-ai/dsh-api-gateway"],immediately:!0},{id:"@deepseek-ai/dsh-client-ui-theme",inject:["@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-shortcuts","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-api-remotes"],immediately:!0},{id:"@deepseek-ai/dsh-client-locale",inject:["@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-api-remotes"],immediately:!0},{id:"@deepseek-ai/dsh-client-shortcuts",inject:["@deepseek-ai/dsh-client-locale"]},{id:"@deepseek-ai/dsh-client-ui-shortcuts",inject:["@deepseek-ai/dsh-client-shortcuts","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-settings"]},{id:"@deepseek-ai/dsh-client-ui-layout",inject:["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-theme","@deepseek-ai/dsh-client-shortcuts"]},{id:"@deepseek-ai/dsh-client-ui-renderer",immediately:!0},{id:"@deepseek-ai/dsh-client-ui-session",inject:["@deepseek-ai/dsh-api-remote-access","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-ui-renderer"]},{id:"@deepseek-ai/dsh-client-resources",inject:["@deepseek-ai/dsh-client-ui-renderer"]},{id:"@deepseek-ai/dsh-client-ui-sidebar",inject:["@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-workspace","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-shortcuts"]},{id:"@deepseek-ai/dsh-client-ui-sidebar-right",inject:["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-resources","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-shortcuts"]},{id:"@deepseek-ai/dsh-client-ui-sidebar-documentpreview",inject:["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-api-workspace-files","@deepseek-ai/dsh-client-resources","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings"]},{id:"@deepseek-ai/dsh-client-ui-sidebar-browser",inject:["@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-session"]},{id:"@deepseek-ai/dsh-client-ui-sidebar-files",inject:["@deepseek-ai/dsh-api-workspace-files","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-shortcuts"]},{id:"@deepseek-ai/dsh-client-ui-settings",inject:["@deepseek-ai/dsh-api-remotes"]},{id:"@deepseek-ai/dsh-client-ui-settings-general",inject:["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-ui-sidebar","@deepseek-ai/dsh-client-shortcuts","@deepseek-ai/dsh-client-modules","@deepseek-ai/dsh-client-ui-layout"]},{id:"@deepseek-ai/dsh-client-ui-settings-models",inject:["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-api-remotes"]},{id:"@deepseek-ai/dsh-client-ui-settings-plugin-inventory",inject:["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-agent-preset","@deepseek-ai/dsh-client-modules"]},{id:"@deepseek-ai/dsh-client-ui-conversation",inject:["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-file-upload","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-workspace"]},{id:"@deepseek-ai/dsh-client-ui-approval",inject:["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session"]},{id:"@deepseek-ai/dsh-client-ui-chat",inject:["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-input-trigger","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-workspace"]},{id:"@deepseek-ai/dsh-client-ui-brand-official",inject:["@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-sidebar"]},{id:"@deepseek-ai/dsh-client-ui-attachment",inject:["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-trajectory","@deepseek-ai/dsh-client-ui-tool"]},{id:"@deepseek-ai/dsh-client-ui-tool",inject:["@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation"]},{id:"@deepseek-ai/dsh-client-ui-deliverables",inject:["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-tool","@deepseek-ai/dsh-client-ui-settings"]},{id:"@deepseek-ai/dsh-client-ui-workspace",inject:["@deepseek-ai/dsh-api-remote-access","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-shortcuts","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-sidebar"]},{id:"@deepseek-ai/dsh-client-ui-workflow-run",inject:["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-workspace"]},{id:"@deepseek-ai/dsh-client-ui-input-trigger",inject:["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer"]},{id:"@deepseek-ai/dsh-client-ui-commands",inject:["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-input-trigger","@deepseek-ai/dsh-client-ui-conversation"]},{id:"@deepseek-ai/dsh-client-ui-skill",inject:["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-tool","@deepseek-ai/dsh-client-ui-input-trigger","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-ui-sidebar-right"]},{id:"@deepseek-ai/dsh-client-ui-subagent",inject:["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-resources","@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-input-trigger","@deepseek-ai/dsh-client-ui-workspace"]},{id:"@deepseek-ai/dsh-client-ui-reference",inject:["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-input-trigger","@deepseek-ai/dsh-client-ui-sidebar-right"]},{id:"@deepseek-ai/dsh-client-ui-secret-mask",inject:["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer"]},{id:"@deepseek-ai/dsh-client-ui-jobs",inject:["@deepseek-ai/dsh-api-job-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-primitives"]},{id:"@deepseek-ai/dsh-client-ui-schedule",inject:["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-sidebar","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-tool","@deepseek-ai/dsh-client-ui-workspace","@deepseek-ai/dsh-client-ui-primitives"]},{id:"@deepseek-ai/dsh-client-ui-goal",inject:["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session"]},{id:"@deepseek-ai/dsh-client-ui-message-feedback",inject:["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-commands"]},{id:"@deepseek-ai/dsh-client-ui-model-selection",inject:["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-commands","@deepseek-ai/dsh-api-remotes"]},{id:"@deepseek-ai/dsh-client-ui-deepseek-model-label-1017",inject:["@deepseek-ai/dsh-client-ui-model-selection","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-locale"]},{id:"@deepseek-ai/dsh-client-ui-agent-preset",inject:["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-workspace","@deepseek-ai/dsh-api-remotes"]},{id:"@deepseek-ai/dsh-client-ui-settings-plugins",inject:["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings"]},{id:"@deepseek-ai/dsh-client-ui-settings-agent-loop",inject:["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings","dsh-edge-client-ui"]},{id:"@deepseek-ai/dsh-client-ui-settings-subagent",inject:["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings","dsh-edge-client-ui","@deepseek-ai/dsh-api-remotes"]},{id:"@deepseek-ai/dsh-client-ui-settings-web-search",inject:["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings","dsh-edge-client-ui","@deepseek-ai/dsh-api-remotes"]},{id:"@deepseek-ai/dsh-client-ui-plan",inject:["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-user-questions","@deepseek-ai/dsh-client-resources","@deepseek-ai/dsh-api-session-controller"]},{id:"@deepseek-ai/dsh-client-ui-user-questions",inject:["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-chat"]},{id:"@deepseek-ai/dsh-client-ui-trajectory",inject:["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session"]},{id:"@deepseek-ai/dsh-client-ui-directory-picker-browse",inject:["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-workspace","@deepseek-ai/dsh-client-locale"]},{id:"dsh-edge-client-ui",inject:["@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings-plugins"]}];var _Ve={tree:{ctx:{baseUrl:void 0}}},han="host:",fan="web:",man=2,RW=class extends Mt{static{a(this,"EdgeLoader")}constructor(t){super(t,"loader")}*entries(){let t=new Map;for(let[,n]of this.ctx.registry.entries()){let r=n.name;if(r===void 0||r==="")continue;let i=(t.get(r)??0)+1;t.set(r,i);let s=gan(n);yield{id:`${han}${r}${i===1?"":`#${String(i)}`}`,options:{name:r},disabled:!1,parent:_Ve,...s===void 0?{}:{fiber:s}}}for(let n of SVe)yield{id:`${fan}${n.id}`,options:{name:n.id},disabled:!1,parent:_Ve,fiber:{state:man}}}};function gan(e){for(let t of e.fibers)return t}a(gan,"rootFiber");var Dme={};Ft(Dme,{apply:()=>ban,deleteSkill:()=>Mme,inject:()=>xan,listSkillNames:()=>Nme,name:()=>van,putSkill:()=>Ome});Bw();var CW="dsh-edge:skill-meta:",yan="dsh-edge:skill-body:",Rme="edge",van="edge-skill-provider",xan=["skills"];function ban(e,t){let{storage:n}=t;e.effect(()=>e.skills.registerProvider(r=>({name:Rme,async list(i){let s=await n.list({prefix:CW}),o=[];for(let[,l]of s)typeof l!="object"||l===null||o.push(wan(l));return o},async get(i,s){let o=await n.get(Cme(i.name));if(o===void 0)return;let l=await n.get(Pme(i.name));return{name:o.name,description:o.description,content:l??"",invocation:{modelInvocable:o.modelInvocable??!0,userInvocable:o.userInvocable??!0},source:"custom",provider:Rme,...o.whenToUse!==void 0?{whenToUse:o.whenToUse}:{},...o.metadata!==void 0?{metadata:o.metadata}:{}}}})))}a(ban,"apply");function wan(e){return{name:e.name,description:e.description,invocation:{modelInvocable:e.modelInvocable??!0,userInvocable:e.userInvocable??!0},source:"custom",provider:Rme,rank:rHe,locator:e.name,...e.whenToUse!==void 0?{whenToUse:e.whenToUse}:{},...e.metadata!==void 0?{metadata:e.metadata}:{}}}a(wan,"toCandidate");function Cme(e){return`${CW}${e}`}a(Cme,"metaKey");function Pme(e){return`${yan}${e}`}a(Pme,"contentKey");async function Ome(e,t){let{content:n,...r}=t;await e.put({[Cme(t.name)]:r,[Pme(t.name)]:n})}a(Ome,"putSkill");async function Mme(e,t){return await e.delete([Cme(t),Pme(t)])>0}a(Mme,"deleteSkill");async function Nme(e){let t=await e.list({prefix:CW}),n=[];for(let[r]of t)n.push(r.slice(CW.length));return n}a(Nme,"listSkillNames");var fge={};Ft(fge,{MAX_ENTRIES_PER_ROOT:()=>u6,MAX_FINGERPRINTS:()=>yKe,MAX_PROJECT_ROOT_DEPTH:()=>vKe,MAX_SKILL_FILE_BYTES:()=>H8,apply:()=>nln,inject:()=>tln,name:()=>eln,parseFrontmatter:()=>SKe,parseInvocationPolicy:()=>_Ke});Bw();var PW=Symbol.for("yaml.alias"),OW=Symbol.for("yaml.document"),Qf=Symbol.for("yaml.map"),$me=Symbol.for("yaml.pair"),Rp=Symbol.for("yaml.scalar"),U1=Symbol.for("yaml.seq"),Vu=Symbol.for("yaml.node.type"),Jf=a(e=>!!e&&typeof e=="object"&&e[Vu]===PW,"isAlias"),Hg=a(e=>!!e&&typeof e=="object"&&e[Vu]===OW,"isDocument"),Zf=a(e=>!!e&&typeof e=="object"&&e[Vu]===Qf,"isMap"),ji=a(e=>!!e&&typeof e=="object"&&e[Vu]===$me,"isPair"),ai=a(e=>!!e&&typeof e=="object"&&e[Vu]===Rp,"isScalar"),Xf=a(e=>!!e&&typeof e=="object"&&e[Vu]===U1,"isSeq");function ws(e){if(e&&typeof e=="object")switch(e[Vu]){case Qf:case U1:return!0}return!1}a(ws,"isCollection");function Ki(e){if(e&&typeof e=="object")switch(e[Vu]){case PW:case Qf:case Rp:case U1:return!0}return!1}a(Ki,"isNode");var MW=a(e=>(ai(e)||ws(e))&&!!e.anchor,"hasAnchor");var Nd=Symbol("break visit"),EVe=Symbol("skip children"),Gg=Symbol("remove node");function Vg(e,t){let n=TVe(t);Hg(e)?YE(null,e.contents,n,Object.freeze([e]))===Gg&&(e.contents=null):YE(null,e,n,Object.freeze([]))}a(Vg,"visit");Vg.BREAK=Nd;Vg.SKIP=EVe;Vg.REMOVE=Gg;function YE(e,t,n,r){let i=AVe(e,t,n,r);if(Ki(i)||ji(i))return IVe(e,r,i),YE(e,i,n,r);if(typeof i!="symbol"){if(ws(t)){r=Object.freeze(r.concat(t));for(let s=0;s<t.items.length;++s){let o=YE(s,t.items[s],n,r);if(typeof o=="number")s=o-1;else{if(o===Nd)return Nd;o===Gg&&(t.items.splice(s,1),s-=1)}}}else if(ji(t)){r=Object.freeze(r.concat(t));let s=YE("key",t.key,n,r);if(s===Nd)return Nd;s===Gg&&(t.key=null);let o=YE("value",t.value,n,r);if(o===Nd)return Nd;o===Gg&&(t.value=null)}}return i}a(YE,"visit_");async function NW(e,t){let n=TVe(t);Hg(e)?await e6(null,e.contents,n,Object.freeze([e]))===Gg&&(e.contents=null):await e6(null,e,n,Object.freeze([]))}a(NW,"visitAsync");NW.BREAK=Nd;NW.SKIP=EVe;NW.REMOVE=Gg;async function e6(e,t,n,r){let i=await AVe(e,t,n,r);if(Ki(i)||ji(i))return IVe(e,r,i),e6(e,i,n,r);if(typeof i!="symbol"){if(ws(t)){r=Object.freeze(r.concat(t));for(let s=0;s<t.items.length;++s){let o=await e6(s,t.items[s],n,r);if(typeof o=="number")s=o-1;else{if(o===Nd)return Nd;o===Gg&&(t.items.splice(s,1),s-=1)}}}else if(ji(t)){r=Object.freeze(r.concat(t));let s=await e6("key",t.key,n,r);if(s===Nd)return Nd;s===Gg&&(t.key=null);let o=await e6("value",t.value,n,r);if(o===Nd)return Nd;o===Gg&&(t.value=null)}}return i}a(e6,"visitAsync_");function TVe(e){return typeof e=="object"&&(e.Collection||e.Node||e.Value)?Object.assign({Alias:e.Node,Map:e.Node,Scalar:e.Node,Seq:e.Node},e.Value&&{Map:e.Value,Scalar:e.Value,Seq:e.Value},e.Collection&&{Map:e.Collection,Seq:e.Collection},e):e}a(TVe,"initVisitor");function AVe(e,t,n,r){if(typeof n=="function")return n(e,t,r);if(Zf(t))return n.Map?.(e,t,r);if(Xf(t))return n.Seq?.(e,t,r);if(ji(t))return n.Pair?.(e,t,r);if(ai(t))return n.Scalar?.(e,t,r);if(Jf(t))return n.Alias?.(e,t,r)}a(AVe,"callVisitor");function IVe(e,t,n){let r=t[t.length-1];if(ws(r))r.items[e]=n;else if(ji(r))e==="key"?r.key=n:r.value=n;else if(Hg(r))r.contents=n;else{let i=Jf(r)?"alias":"scalar";throw new Error(`Cannot replace node with ${i} parent`)}}a(IVe,"replaceNode");var kan={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},San=a(e=>e.replace(/[!,[\]{}]/g,t=>kan[t]),"escapeTagName"),Kg=class e{static{a(this,"Directives")}constructor(t,n){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},e.defaultYaml,t),this.tags=Object.assign({},e.defaultTags,n)}clone(){let t=new e(this.yaml,this.tags);return t.docStart=this.docStart,t}atDocument(){let t=new e(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:e.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},e.defaultTags);break}return t}add(t,n){this.atNextDocument&&(this.yaml={explicit:e.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},e.defaultTags),this.atNextDocument=!1);let r=t.trim().split(/[ \t]+/),i=r.shift();switch(i){case"%TAG":{if(r.length!==2&&(n(0,"%TAG directive should contain exactly two parts"),r.length<2))return!1;let[s,o]=r;return this.tags[s]=o,!0}case"%YAML":{if(this.yaml.explicit=!0,r.length!==1)return n(0,"%YAML directive should contain exactly one part"),!1;let[s]=r;if(s==="1.1"||s==="1.2")return this.yaml.version=s,!0;{let o=/^\d+\.\d+$/.test(s);return n(6,`Unsupported YAML version ${s}`,o),!1}}default:return n(0,`Unknown directive ${i}`,!0),!1}}tagName(t,n){if(t==="!")return"!";if(t[0]!=="!")return n(`Not a valid tag: ${t}`),null;if(t[1]==="<"){let o=t.slice(2,-1);return o==="!"||o==="!!"?(n(`Verbatim tags aren't resolved, so ${t} is invalid.`),null):(t[t.length-1]!==">"&&n("Verbatim tags must end with a >"),o)}let[,r,i]=t.match(/^(.*!)([^!]*)$/s);i||n(`The ${t} tag has no suffix`);let s=this.tags[r];if(s)try{return s+decodeURIComponent(i)}catch(o){return n(String(o)),null}return r==="!"?t:(n(`Could not resolve tag: ${t}`),null)}tagString(t){for(let[n,r]of Object.entries(this.tags))if(t.startsWith(r))return n+San(t.substring(r.length));return t[0]==="!"?t:`!<${t}>`}toString(t){let n=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],r=Object.entries(this.tags),i;if(t&&r.length>0&&Ki(t.contents)){let s={};Vg(t.contents,(o,l)=>{Ki(l)&&l.tag&&(s[l.tag]=!0)}),i=Object.keys(s)}else i=[];for(let[s,o]of r)s==="!!"&&o==="tag:yaml.org,2002:"||(!t||i.some(l=>l.startsWith(o)))&&n.push(`%TAG ${s} ${o}`);return n.join(`
6701
+ `)}a(uv,"normalizeLineEndings");function Qw(e,t){return`${String(e)}:${String(t)}`}a(Qw,"versionOf");async function fVe(e,t){let{mtime:n}=await e.stat(t);for(;Date.now()<=n;)await new Promise(r=>setTimeout(r,1))}a(fVe,"waitPastModification");function mVe(e){return e.isFile?"file":e.isDirectory?"directory":"other"}a(mVe,"entryType");function Yon(e){return e.isSymbolicLink?"symlink":e.isFile?"file":e.isDirectory?"directory":"other"}a(Yon,"pathType");var TW=class e extends Mze{static{a(this,"EdgeFileSystem")}static storage=new Xon;locks=new Map;constructor(t){super(t)}bind(t,n){return()=>{}}runInScope(t,n,r){return e.storage.run({vfs:t,cwd:n},r)}searchScope(){return this.requireBinding()}requireBinding(){let t=e.storage.getStore();if(t===void 0)throw new yr("File operations are only available during an active turn.","FS_IO_ERROR");return t}get sandboxMode(){}async resolve(t,n){if(n?.signal?.aborted)throw new yr("resolve aborted","FS_ABORTED");if(t.trim().length===0)throw new yr("file_path must be a non-empty string","FS_NOT_FOUND");let r=this.requireBinding(),i=Tme(n?.cwd??r.cwd,t);return{targetKey:i,displayPath:i}}processPath(t){return String(t.targetKey)}fileUrl(t){return`file://${this.processPath(t)}`}async watch(t,n,r){if(r.aborted)throw new yr("watch aborted","FS_ABORTED");let i=this.processPath(t),s=this.ctx.on("fs/observed",o=>{let l=this.processPath(o);(l===i||(l.slice(0,l.lastIndexOf("/"))||"/")===i)&&n()});return async()=>{s()}}contains(t,n){let r=this.processPath(t),i=this.processPath(n);return i===r||i.startsWith(`${r}/`)}async stat(t,n){if(n?.aborted)throw new yr("stat aborted","FS_ABORTED");let r=this.requireBinding(),i=r.vfs;try{let s=await i.stat(this.processPath(t));return{version:Qw(s.mtime,s.size),type:mVe(s),size:s.size}}catch(s){if(s instanceof Error&&"code"in s&&s.code==="ENOENT")return this.processPath(t)===Tme(r.cwd,".")?{version:Qw(0,0),type:"directory",size:0}:void 0;throw new yr(`cannot stat "${t.displayPath}":${s instanceof Error?s.message:String(s)}`,"FS_IO_ERROR",{cause:s})}}async lstat(t,n,r){if(r?.aborted)throw new yr("lstat aborted","FS_ABORTED");if(t.trim().length===0)throw new yr("file_path must be a non-empty string","FS_NOT_FOUND");let i=this.requireBinding(),s=Tme(n?.cwd??i.cwd,t),o=i.vfs;try{let l=await o.lstat(s);return{version:Qw(l.mtime,l.size),type:Yon(l),size:l.size}}catch(l){if(l instanceof Error&&"code"in l&&l.code==="ENOENT")return;throw new yr(`cannot lstat "${t}": ${l instanceof Error?l.message:String(l)}`,"FS_IO_ERROR",{cause:l})}}async readText(t,n){if(n?.aborted)throw new yr("readText aborted","FS_ABORTED");let r=this.requireBinding().vfs,i=this.processPath(t);try{let s=await r.readFile(i,"utf8"),o=await r.stat(i),l=Qw(o.mtime,o.size);return this.ctx.emit("fs/observed",t,{kind:"present",version:l},void 0),uv(s)}catch(s){throw new yr(`cannot read "${t.displayPath}": ${s instanceof Error?s.message:String(s)}`,"FS_IO_ERROR",{cause:s})}}async openReadStream(t,n){let r=a(s=>{throw s instanceof yr||n?.aborted&&s===n.reason||s instanceof Error&&s.name==="AbortError"?s:new yr(`cannot read "${t.displayPath}": ${s instanceof Error?s.message:String(s)}`,"FS_IO_ERROR",{cause:s})},"classify"),i;try{i=(await this.requireBinding().vfs.readFile(this.processPath(t))).getReader()}catch(s){return r(s)}return{async read(){n?.throwIfAborted();try{return await i.read()}catch(s){return r(s)}},async close(s){try{await i.cancel()}catch(o){s||r(o)}finally{i.releaseLock()}}}}async streamText(t,n){n?.throwIfAborted();let r=await this.openReadStream(t,n);return(async function*(){let i=new TextDecoder("utf-8",{fatal:!0}),s="",o=!1;try{for(;;){n?.throwIfAborted();let{done:c,value:u}=await r.read();if(c)break;let d=s+i.decode(u,{stream:!0});if(d.includes("\0"))throw new yr("File is not text.","FS_NOT_TEXT");s=d.endsWith("\r")?"\r":"",yield uv(s===""?d:d.slice(0,-1))}let l=s+i.decode();l!==""&&(yield uv(l))}catch(l){throw o=!0,n?.aborted&&l===n.reason?l:l instanceof TypeError?new yr("File is not valid UTF-8 text.","FS_NOT_TEXT",{cause:l}):l}finally{await r.close(o)}})()}async readByteRange(t,n,r){r?.throwIfAborted();let i=await this.openReadStream(t,r),s=[],o=0,l=0,c=!1;try{for(;l<n.length;){r?.throwIfAborted();let{done:p,value:h}=await i.read();if(p)break;let f=Math.min(h.byteLength,Math.max(0,n.offset-o));o+=h.byteLength;let g=h.subarray(f,Math.min(h.byteLength,f+n.length-l));g.byteLength>0&&(s.push(g.slice()),l+=g.byteLength)}let u=new Uint8Array(l),d=0;for(let p of s)u.set(p,d),d+=p.byteLength;return u}catch(u){throw c=!0,u}finally{await i.close(c)}}async readBytes(t,n,r){if(n?.aborted)throw new yr("readBytes aborted","FS_ABORTED");let i=this.requireBinding().vfs,s=this.processPath(t);try{let l=(await i.readFile(s)).getReader(),c=[],u=0;for(;;){let{done:h,value:f}=await l.read();if(h)break;if(u+=f.byteLength,u>r)throw await l.cancel(),new yr(`"${t.displayPath}" exceeds the ${String(r)}-byte read limit`,"FS_TOO_LARGE");c.push(f)}let d=new Uint8Array(u),p=0;for(let h of c)d.set(h,p),p+=h.byteLength;return d}catch(o){throw o instanceof yr?o:new yr(`cannot read "${t.displayPath}": ${o instanceof Error?o.message:String(o)}`,"FS_IO_ERROR",{cause:o})}}async listDir(t,n){if(n?.aborted)throw new yr("listDir aborted","FS_ABORTED");let r=this.requireBinding().vfs,i=this.processPath(t);try{return(await r.readdir(i)).map(o=>({name:o.name,type:mVe(o),target:{targetKey:`${i}/${o.name}`,displayPath:`${i}/${o.name}`},version:Qw(o.mtime,o.size),size:o.size}))}catch(s){throw new yr(`cannot list "${t.displayPath}": ${s instanceof Error?s.message:String(s)}`,"FS_NOT_DIRECTORY",{cause:s})}}writeText(t,n,r,i){return this.withLock(t.targetKey,()=>this.writeTextLocked(t,n,r,i))}async writeTextLocked(t,n,r,i){if(i?.aborted)throw new yr("writeText aborted","FS_ABORTED");let s=this.requireBinding().vfs,o=this.processPath(t),l=await this.stat(t);if(l!==void 0&&l.type!=="file")throw new yr(`cannot write "${t.displayPath}": not a regular file`,"FS_NOT_REGULAR_FILE");if(r?.kind==="replaceIfVersion"){if(l===void 0)throw new yr(`cannot write "${t.displayPath}": file no longer exists`,"FS_STALE_VERSION");if(l.version!==r.version)throw new yr(`cannot write "${t.displayPath}": file changed since it was read`,"FS_STALE_VERSION")}else if(r?.kind==="createIfAbsent"&&l!==void 0)throw new yr(`cannot overwrite existing "${t.displayPath}" without reading it first`,"FS_NOT_OBSERVED");let c=null;if(l!==void 0)try{c=uv(await s.readFile(o,"utf8"))}catch{}let u=o.substring(0,o.lastIndexOf("/"))||"/";try{await s.mkdir(u,{recursive:!0})}catch{}l!==void 0&&await fVe(s,o),await s.writeFile(o,n);let p=(await this.stat(t))?.version??Qw(Date.now(),n.length);return this.ctx.emit("fs/observed",t,{kind:"present",version:p},void 0),{operation:l!==void 0?"update":"create",version:p,before:c,after:uv(n)}}editText(t,n,r,i){return this.withLock(t.targetKey,()=>this.editTextLocked(t,n,r,i))}async editTextLocked(t,n,r,i){if(i?.aborted)throw new yr("editText aborted","FS_ABORTED");let s=this.requireBinding().vfs,o=this.processPath(t),l=await this.stat(t);if(l===void 0)throw new yr(`cannot edit "${t.displayPath}": file not found`,"FS_STALE_VERSION");if(l.type!=="file")throw new yr(`cannot edit "${t.displayPath}": not a regular file`,"FS_NOT_REGULAR_FILE");if(r!==void 0&&l.version!==r.version)throw new yr(`cannot edit "${t.displayPath}": file changed since it was read`,"FS_STALE_VERSION");let c=uv(await s.readFile(o,"utf8")),u=uv(n.oldString);if(u.length===0)throw new yr("old_string must be a non-empty string","FS_EDIT_NOT_FOUND");let d=c.split(u).length-1;if(d===0)throw new yr(`old_string was not found in "${t.displayPath}"`,"FS_EDIT_NOT_FOUND");if(!n.replaceAll&&d>1)throw new yr(`old_string matched ${String(d)} times in "${t.displayPath}"; provide a more specific old_string or set replace_all to true`,"FS_AMBIGUOUS_EDIT");let p=uv(n.newString),h=c.split(u).join(p);await fVe(s,o),await s.writeFile(o,h);let g=(await this.stat(t))?.version??Qw(Date.now(),h.length);return this.ctx.emit("fs/observed",t,{kind:"present",version:g},void 0),{version:g,before:c,after:h}}async withLock(t,n){let r=(this.locks.get(t)??Promise.resolve()).then(n,n),i=r.then(()=>{},()=>{});this.locks.set(t,i);try{return await r}finally{this.locks.get(t)===i&&this.locks.delete(t)}}};lr();var gVe='Tokens prefixed with @ are paths the user explicitly referenced. Relative paths resolve from the workspace root; absolute paths identify files or directories on the host. A trailing slash marks a directory: list it when its contents matter. Anything else is a file: use the read tool when its contents are needed, and do not claim to have inspected it before reading. @"..." quotes a path containing spaces.',yVe=class extends Mt{static{a(this,"FileReferenceService")}constructor(e){super(e,"fileReferences")}};var ean=20,tan="/workspace",AW=class extends yVe{static{a(this,"EdgeFileReferenceService")}withFiles;maxResults;constructor(t,n){if(super(t),this.withFiles=r=>n.withFiles(r),this.maxResults=n.maxResults??ean,!Number.isSafeInteger(this.maxResults)||this.maxResults<=0)throw new Error("dsh-edge: file reference maxResults must be a positive safe integer");t.inject(["systemPrompt"],r=>{r.systemPrompt.section({name:"context:file-reference",order:r.systemPrompt.getSectionOrder("FILE_REFERENCE"),text:gVe})})}async list(t,n,r){r.throwIfAborted();let i=this.ctx.get("workingDirectory")?.get(t.session)??t.session.header.cwd??tan,s=nan(n);if(s===void 0)return[];let o=ran(i,s.directory);if(o===void 0)return[];let l;try{l=await this.withFiles(c=>c.readdir(o))}catch{return r.throwIfAborted(),[]}return r.throwIfAborted(),ian(l,s,this.maxResults)}};function nan(e){let t=e.replaceAll("\\","/");for(let r of t){let i=r.codePointAt(0)??0;if(i<32||i===127||r==='"')return}let n=t.lastIndexOf("/");return n<0?{directory:"",fragment:t}:{directory:t.slice(0,n+1),fragment:t.slice(n+1)}}a(nan,"splitQuery");function ran(e,t){let n=[];for(let i of t.split("/"))if(!(i===""||i===".")){if(i===".."){if(n.length===0)return;n.pop();continue}n.push(i)}let r=e.endsWith("/")?e.slice(0,-1):e;return n.length===0?r===""?"/":r:`${r}/${n.join("/")}`}a(ran,"resolveWithin");function ian(e,t,n){let r=t.fragment.toLowerCase(),i=[];for(let s of e){if(s.name.startsWith(".")&&!t.fragment.startsWith("."))continue;let o=s.isDirectory?"directory":s.isFile?"file":void 0;if(o===void 0)continue;let l=san(s.name.toLowerCase(),r,o);l!==void 0&&i.push({candidate:{path:`${t.directory}${s.name}`,kind:o},score:l})}return i.sort((s,o)=>o.score-s.score||vVe(s.candidate.kind)-vVe(o.candidate.kind)||oan(s.candidate.path,o.candidate.path)),i.slice(0,n).map(s=>s.candidate)}a(ian,"rankCandidates");function san(e,t,n){let r=n==="directory"?25:0;if(t==="")return r;if(e===t)return 1e3+r;if(e.startsWith(t))return 900+r;if(e.includes(t))return 700+r}a(san,"scoreName");function vVe(e){return e==="directory"?0:1}a(vVe,"kindRank");function oan(e,t){return e<t?-1:e>t?1:0}a(oan,"compareText");Ame();var aan="/workspace",lan=1e3,IW=class extends xVe{static{a(this,"EdgeDirectoryPicker")}withFiles;root;maxEntries;browseCapability={kind:"browse",list:a((t,n)=>this.list(t,n),"list"),createDirectory:a((t,n)=>this.createDirectory(t,n),"createDirectory")};constructor(t,n){if(super(t),this.withFiles=r=>n.withFiles(r),this.root=uan(n.root??aan),this.maxEntries=n.maxEntries??lan,!Number.isSafeInteger(this.maxEntries)||this.maxEntries<=0)throw new Error("dsh-edge: directory picker maxEntries must be a positive safe integer")}capability(){return this.browseCapability}async list(t,n){n?.throwIfAborted();let r=t===void 0?this.root:Ime(this.root,t);if(r===void 0)throw new F1("directory-unreadable",t??this.root,`cannot list "${t??""}": not an absolute path under ${this.root}`);let i;try{i=await this.withFiles(c=>c.readdir(r))}catch(c){if(n?.throwIfAborted(),r===this.root&&bVe(c))i=[];else throw new F1("directory-unreadable",r,`cannot list ${r}: ${wVe(c)}`)}n?.throwIfAborted();let s=i.filter(c=>c.isDirectory).map(c=>c.name).sort((c,u)=>c.localeCompare(u)),o=s.length>this.maxEntries,l=s.slice(0,this.maxEntries).map(c=>({name:c,path:`${r==="/"?"":r}/${c}`,hidden:c.startsWith(".")}));return{path:r,home:this.root,crumbs:can(this.root,r),entries:l,truncated:o}}async createDirectory(t,n){let r=Ime(this.root,t);if(r===void 0)throw new F1("directory-create-failed",t,`cannot create under "${t}": not an absolute path under ${this.root}`);if(!dan(n))throw new F1("directory-create-failed",`${r==="/"?"":r}/${n}`,`"${n}" is not a single path segment`);let i=`${r==="/"?"":r}/${n}`,s=!1;try{if(s=await this.withFiles(async o=>{try{return await o.stat(i),!0}catch(l){if(bVe(l))return!1;throw l}}),!s)return await this.withFiles(async o=>{r===this.root&&await o.mkdir(this.root,{recursive:!0}),await o.mkdir(i)}),i}catch(o){throw new F1("directory-create-failed",i,`cannot create ${i}: ${wVe(o)}`)}throw new F1("directory-exists",i,`${i} already exists`)}};function Ime(e,t){if(!t.startsWith("/")||kVe(t))return;let n=[];for(let i of t.split("/"))if(!(i===""||i===".")){if(i===".."){if(n.length===0)return;n.pop();continue}n.push(i)}let r=n.length===0?"/":`/${n.join("/")}`;if(!(r!==e&&!r.startsWith(e==="/"?"/":`${e}/`)))return r}a(Ime,"resolveWithinRoot");function can(e,t){let n=[{name:e,path:e,hidden:!1}];if(t===e)return n;let r=t.slice(e==="/"?1:e.length+1),i=e==="/"?"":e;for(let s of r.split("/"))i=`${i}/${s}`,n.push({name:s,path:i,hidden:!1});return n}a(can,"directoryCrumbs");function uan(e){let t=Ime("/",e);if(t===void 0)throw new Error("dsh-edge: directory picker root must be an absolute path");return t}a(uan,"normalizeRoot");function dan(e){return e.trim()!==""&&e!=="."&&e!==".."&&!/[/\\]/u.test(e)&&!kVe(e)}a(dan,"isSingleSegment");function kVe(e){for(let t of e){let n=t.codePointAt(0)??0;if(n<32||n===127)return!0}return!1}a(kVe,"hasControlCharacter");function bVe(e){return e instanceof Error&&"code"in e&&e.code==="ENOENT"}a(bVe,"isNotFound");function wVe(e){return e instanceof Error?e.message:String(e)}a(wVe,"messageOf");lr();var SVe=[{id:"@deepseek-ai/dsh-typert-registry",inject:[],immediately:!0},{id:"@deepseek-ai/dsh-api-gateway",inject:["@deepseek-ai/dsh-typert-registry","@deepseek-ai/dsh-client-connection"],immediately:!0},{id:"@deepseek-ai/dsh-api-remote-access",inject:["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-client-ui-renderer"],external:["@deepseek-ai/dsh-api-gateway/client"]},{id:"@deepseek-ai/dsh-session-log-export",inject:["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-commands","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session"]},{id:"@deepseek-ai/dsh-client-ui-open-in-app",inject:["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-shortcuts","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-sidebar-documentpreview"]},{id:"@deepseek-ai/dsh-api-session-controller",inject:["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-client-file-upload"],external:["@deepseek-ai/dsh-api-gateway/client"]},{id:"@deepseek-ai/dsh-api-job-controller",inject:["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-client-connection"],external:["@deepseek-ai/dsh-api-gateway/client"]},{id:"@deepseek-ai/dsh-api-workspace-files",inject:["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-client-resources"]},{id:"@deepseek-ai/dsh-api-workspace-controller",inject:["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-client-connection"],external:["@deepseek-ai/dsh-api-gateway/client"]},{id:"@deepseek-ai/dsh-client-modules",inject:[],immediately:!0},{id:"@deepseek-ai/dsh-client-connection",inject:[],immediately:!0},{id:"@deepseek-ai/dsh-client-file-upload",inject:["@deepseek-ai/dsh-api-remotes"],immediately:!0},{id:"@deepseek-ai/dsh-api-remotes",inject:["@deepseek-ai/dsh-api-gateway"],immediately:!0},{id:"@deepseek-ai/dsh-client-ui-theme",inject:["@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-shortcuts","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-api-remotes"],immediately:!0},{id:"@deepseek-ai/dsh-client-locale",inject:["@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-api-remotes"],immediately:!0},{id:"@deepseek-ai/dsh-client-shortcuts",inject:["@deepseek-ai/dsh-client-locale"]},{id:"@deepseek-ai/dsh-client-ui-shortcuts",inject:["@deepseek-ai/dsh-client-shortcuts","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-settings"]},{id:"@deepseek-ai/dsh-client-ui-layout",inject:["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-theme","@deepseek-ai/dsh-client-shortcuts"]},{id:"@deepseek-ai/dsh-client-ui-renderer",immediately:!0},{id:"@deepseek-ai/dsh-client-ui-session",inject:["@deepseek-ai/dsh-api-remote-access","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-ui-renderer"]},{id:"@deepseek-ai/dsh-client-resources",inject:["@deepseek-ai/dsh-client-ui-renderer"]},{id:"@deepseek-ai/dsh-client-ui-sidebar",inject:["@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-workspace","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-shortcuts"]},{id:"@deepseek-ai/dsh-client-ui-sidebar-right",inject:["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-resources","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-shortcuts"]},{id:"@deepseek-ai/dsh-client-ui-sidebar-documentpreview",inject:["@deepseek-ai/dsh-api-gateway","@deepseek-ai/dsh-api-workspace-files","@deepseek-ai/dsh-client-resources","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings"]},{id:"@deepseek-ai/dsh-client-ui-sidebar-browser",inject:["@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-session"]},{id:"@deepseek-ai/dsh-client-ui-sidebar-files",inject:["@deepseek-ai/dsh-api-workspace-files","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-shortcuts"]},{id:"@deepseek-ai/dsh-client-ui-settings",inject:["@deepseek-ai/dsh-api-remotes"]},{id:"@deepseek-ai/dsh-client-ui-settings-general",inject:["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-ui-sidebar","@deepseek-ai/dsh-client-shortcuts","@deepseek-ai/dsh-client-modules","@deepseek-ai/dsh-client-ui-layout"]},{id:"@deepseek-ai/dsh-client-ui-settings-models",inject:["@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-api-remotes"]},{id:"@deepseek-ai/dsh-client-ui-settings-plugin-inventory",inject:["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-agent-preset","@deepseek-ai/dsh-client-modules"]},{id:"@deepseek-ai/dsh-client-ui-conversation",inject:["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-file-upload","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-workspace"]},{id:"@deepseek-ai/dsh-client-ui-approval",inject:["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session"]},{id:"@deepseek-ai/dsh-client-ui-chat",inject:["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-input-trigger","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-workspace"]},{id:"@deepseek-ai/dsh-client-ui-brand-official",inject:["@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-sidebar"]},{id:"@deepseek-ai/dsh-client-ui-attachment",inject:["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-trajectory","@deepseek-ai/dsh-client-ui-tool"]},{id:"@deepseek-ai/dsh-client-ui-tool",inject:["@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation"]},{id:"@deepseek-ai/dsh-client-ui-deliverables",inject:["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-tool","@deepseek-ai/dsh-client-ui-settings"]},{id:"@deepseek-ai/dsh-client-ui-workspace",inject:["@deepseek-ai/dsh-api-remote-access","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-shortcuts","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-sidebar"]},{id:"@deepseek-ai/dsh-client-ui-workflow-run",inject:["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-workspace"]},{id:"@deepseek-ai/dsh-client-ui-input-trigger",inject:["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer"]},{id:"@deepseek-ai/dsh-client-ui-commands",inject:["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-input-trigger","@deepseek-ai/dsh-client-ui-conversation"]},{id:"@deepseek-ai/dsh-client-ui-skill",inject:["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-tool","@deepseek-ai/dsh-client-ui-input-trigger","@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-ui-sidebar-right"]},{id:"@deepseek-ai/dsh-client-ui-subagent",inject:["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-resources","@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-primitives","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-input-trigger","@deepseek-ai/dsh-client-ui-workspace"]},{id:"@deepseek-ai/dsh-client-ui-reference",inject:["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-input-trigger","@deepseek-ai/dsh-client-ui-sidebar-right"]},{id:"@deepseek-ai/dsh-client-ui-secret-mask",inject:["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer"]},{id:"@deepseek-ai/dsh-client-ui-jobs",inject:["@deepseek-ai/dsh-api-job-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-primitives"]},{id:"@deepseek-ai/dsh-client-ui-schedule",inject:["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-layout","@deepseek-ai/dsh-client-ui-sidebar","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-tool","@deepseek-ai/dsh-client-ui-workspace","@deepseek-ai/dsh-client-ui-primitives"]},{id:"@deepseek-ai/dsh-client-ui-goal",inject:["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session"]},{id:"@deepseek-ai/dsh-client-ui-message-feedback",inject:["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-commands"]},{id:"@deepseek-ai/dsh-client-ui-model-selection",inject:["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-commands","@deepseek-ai/dsh-api-remotes"]},{id:"@deepseek-ai/dsh-client-ui-deepseek-model-label-1017",inject:["@deepseek-ai/dsh-client-ui-model-selection","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-locale"]},{id:"@deepseek-ai/dsh-client-ui-agent-preset",inject:["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-workspace","@deepseek-ai/dsh-api-remotes"]},{id:"@deepseek-ai/dsh-client-ui-settings-plugins",inject:["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings"]},{id:"@deepseek-ai/dsh-client-ui-settings-agent-loop",inject:["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings","dsh-edge-client-ui"]},{id:"@deepseek-ai/dsh-client-ui-settings-subagent",inject:["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings","dsh-edge-client-ui","@deepseek-ai/dsh-api-remotes"]},{id:"@deepseek-ai/dsh-client-ui-settings-web-search",inject:["@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings","dsh-edge-client-ui","@deepseek-ai/dsh-api-remotes"]},{id:"@deepseek-ai/dsh-client-ui-plan",inject:["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-sidebar-right","@deepseek-ai/dsh-client-ui-chat","@deepseek-ai/dsh-client-ui-user-questions","@deepseek-ai/dsh-client-resources","@deepseek-ai/dsh-api-session-controller"]},{id:"@deepseek-ai/dsh-client-ui-user-questions",inject:["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session","@deepseek-ai/dsh-client-ui-chat"]},{id:"@deepseek-ai/dsh-client-ui-trajectory",inject:["@deepseek-ai/dsh-api-session-controller","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-conversation","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-session"]},{id:"@deepseek-ai/dsh-client-ui-directory-picker-browse",inject:["@deepseek-ai/dsh-api-remotes","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-workspace","@deepseek-ai/dsh-client-locale"]},{id:"dsh-edge-client-ui",inject:["@deepseek-ai/dsh-api-workspace-controller","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-settings-plugins"]}];var _Ve={tree:{ctx:{baseUrl:void 0}}},han="host:",fan="web:",man=2,RW=class extends Mt{static{a(this,"EdgeLoader")}constructor(t){super(t,"loader")}*entries(){let t=new Map;for(let[,n]of this.ctx.registry.entries()){let r=n.name;if(r===void 0||r==="")continue;let i=(t.get(r)??0)+1;t.set(r,i);let s=gan(n);yield{id:`${han}${r}${i===1?"":`#${String(i)}`}`,options:{name:r},disabled:!1,parent:_Ve,...s===void 0?{}:{fiber:s}}}for(let n of SVe)yield{id:`${fan}${n.id}`,options:{name:n.id},disabled:!1,parent:_Ve,fiber:{state:man}}}};function gan(e){for(let t of e.fibers)return t}a(gan,"rootFiber");var Dme={};Ft(Dme,{apply:()=>ban,deleteSkill:()=>Mme,inject:()=>xan,listSkillNames:()=>Nme,name:()=>van,putSkill:()=>Ome});Bw();var CW="dsh-edge:skill-meta:",yan="dsh-edge:skill-body:",Rme="edge",van="edge-skill-provider",xan=["skills"];function ban(e,t){let{storage:n}=t;e.effect(()=>e.skills.registerProvider(r=>({name:Rme,async list(i){let s=await n.list({prefix:CW}),o=[];for(let[,l]of s)typeof l!="object"||l===null||o.push(wan(l));return o},async get(i,s){let o=await n.get(Cme(i.name));if(o===void 0)return;let l=await n.get(Pme(i.name));return{name:o.name,description:o.description,content:l??"",invocation:{modelInvocable:o.modelInvocable??!0,userInvocable:o.userInvocable??!0},source:"custom",provider:Rme,...o.whenToUse!==void 0?{whenToUse:o.whenToUse}:{},...o.metadata!==void 0?{metadata:o.metadata}:{}}}})))}a(ban,"apply");function wan(e){return{name:e.name,description:e.description,invocation:{modelInvocable:e.modelInvocable??!0,userInvocable:e.userInvocable??!0},source:"custom",provider:Rme,rank:rHe,locator:e.name,...e.whenToUse!==void 0?{whenToUse:e.whenToUse}:{},...e.metadata!==void 0?{metadata:e.metadata}:{}}}a(wan,"toCandidate");function Cme(e){return`${CW}${e}`}a(Cme,"metaKey");function Pme(e){return`${yan}${e}`}a(Pme,"contentKey");async function Ome(e,t){let{content:n,...r}=t;await e.put({[Cme(t.name)]:r,[Pme(t.name)]:n})}a(Ome,"putSkill");async function Mme(e,t){return await e.delete([Cme(t),Pme(t)])>0}a(Mme,"deleteSkill");async function Nme(e){let t=await e.list({prefix:CW}),n=[];for(let[r]of t)n.push(r.slice(CW.length));return n}a(Nme,"listSkillNames");var fge={};Ft(fge,{MAX_ENTRIES_PER_ROOT:()=>u6,MAX_FINGERPRINTS:()=>yKe,MAX_PROJECT_ROOT_DEPTH:()=>vKe,MAX_SKILL_FILE_BYTES:()=>H8,apply:()=>nln,inject:()=>tln,name:()=>eln,parseFrontmatter:()=>SKe,parseInvocationPolicy:()=>_Ke});Bw();var PW=Symbol.for("yaml.alias"),OW=Symbol.for("yaml.document"),Qf=Symbol.for("yaml.map"),$me=Symbol.for("yaml.pair"),Rp=Symbol.for("yaml.scalar"),U1=Symbol.for("yaml.seq"),Vu=Symbol.for("yaml.node.type"),Jf=a(e=>!!e&&typeof e=="object"&&e[Vu]===PW,"isAlias"),Hg=a(e=>!!e&&typeof e=="object"&&e[Vu]===OW,"isDocument"),Zf=a(e=>!!e&&typeof e=="object"&&e[Vu]===Qf,"isMap"),ji=a(e=>!!e&&typeof e=="object"&&e[Vu]===$me,"isPair"),ai=a(e=>!!e&&typeof e=="object"&&e[Vu]===Rp,"isScalar"),Xf=a(e=>!!e&&typeof e=="object"&&e[Vu]===U1,"isSeq");function ws(e){if(e&&typeof e=="object")switch(e[Vu]){case Qf:case U1:return!0}return!1}a(ws,"isCollection");function Ki(e){if(e&&typeof e=="object")switch(e[Vu]){case PW:case Qf:case Rp:case U1:return!0}return!1}a(Ki,"isNode");var MW=a(e=>(ai(e)||ws(e))&&!!e.anchor,"hasAnchor");var Nd=Symbol("break visit"),EVe=Symbol("skip children"),Gg=Symbol("remove node");function Vg(e,t){let n=TVe(t);Hg(e)?YE(null,e.contents,n,Object.freeze([e]))===Gg&&(e.contents=null):YE(null,e,n,Object.freeze([]))}a(Vg,"visit");Vg.BREAK=Nd;Vg.SKIP=EVe;Vg.REMOVE=Gg;function YE(e,t,n,r){let i=AVe(e,t,n,r);if(Ki(i)||ji(i))return IVe(e,r,i),YE(e,i,n,r);if(typeof i!="symbol"){if(ws(t)){r=Object.freeze(r.concat(t));for(let s=0;s<t.items.length;++s){let o=YE(s,t.items[s],n,r);if(typeof o=="number")s=o-1;else{if(o===Nd)return Nd;o===Gg&&(t.items.splice(s,1),s-=1)}}}else if(ji(t)){r=Object.freeze(r.concat(t));let s=YE("key",t.key,n,r);if(s===Nd)return Nd;s===Gg&&(t.key=null);let o=YE("value",t.value,n,r);if(o===Nd)return Nd;o===Gg&&(t.value=null)}}return i}a(YE,"visit_");async function NW(e,t){let n=TVe(t);Hg(e)?await e6(null,e.contents,n,Object.freeze([e]))===Gg&&(e.contents=null):await e6(null,e,n,Object.freeze([]))}a(NW,"visitAsync");NW.BREAK=Nd;NW.SKIP=EVe;NW.REMOVE=Gg;async function e6(e,t,n,r){let i=await AVe(e,t,n,r);if(Ki(i)||ji(i))return IVe(e,r,i),e6(e,i,n,r);if(typeof i!="symbol"){if(ws(t)){r=Object.freeze(r.concat(t));for(let s=0;s<t.items.length;++s){let o=await e6(s,t.items[s],n,r);if(typeof o=="number")s=o-1;else{if(o===Nd)return Nd;o===Gg&&(t.items.splice(s,1),s-=1)}}}else if(ji(t)){r=Object.freeze(r.concat(t));let s=await e6("key",t.key,n,r);if(s===Nd)return Nd;s===Gg&&(t.key=null);let o=await e6("value",t.value,n,r);if(o===Nd)return Nd;o===Gg&&(t.value=null)}}return i}a(e6,"visitAsync_");function TVe(e){return typeof e=="object"&&(e.Collection||e.Node||e.Value)?Object.assign({Alias:e.Node,Map:e.Node,Scalar:e.Node,Seq:e.Node},e.Value&&{Map:e.Value,Scalar:e.Value,Seq:e.Value},e.Collection&&{Map:e.Collection,Seq:e.Collection},e):e}a(TVe,"initVisitor");function AVe(e,t,n,r){if(typeof n=="function")return n(e,t,r);if(Zf(t))return n.Map?.(e,t,r);if(Xf(t))return n.Seq?.(e,t,r);if(ji(t))return n.Pair?.(e,t,r);if(ai(t))return n.Scalar?.(e,t,r);if(Jf(t))return n.Alias?.(e,t,r)}a(AVe,"callVisitor");function IVe(e,t,n){let r=t[t.length-1];if(ws(r))r.items[e]=n;else if(ji(r))e==="key"?r.key=n:r.value=n;else if(Hg(r))r.contents=n;else{let i=Jf(r)?"alias":"scalar";throw new Error(`Cannot replace node with ${i} parent`)}}a(IVe,"replaceNode");var kan={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},San=a(e=>e.replace(/[!,[\]{}]/g,t=>kan[t]),"escapeTagName"),Kg=class e{static{a(this,"Directives")}constructor(t,n){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},e.defaultYaml,t),this.tags=Object.assign({},e.defaultTags,n)}clone(){let t=new e(this.yaml,this.tags);return t.docStart=this.docStart,t}atDocument(){let t=new e(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:e.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},e.defaultTags);break}return t}add(t,n){this.atNextDocument&&(this.yaml={explicit:e.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},e.defaultTags),this.atNextDocument=!1);let r=t.trim().split(/[ \t]+/),i=r.shift();switch(i){case"%TAG":{if(r.length!==2&&(n(0,"%TAG directive should contain exactly two parts"),r.length<2))return!1;let[s,o]=r;return this.tags[s]=o,!0}case"%YAML":{if(this.yaml.explicit=!0,r.length!==1)return n(0,"%YAML directive should contain exactly one part"),!1;let[s]=r;if(s==="1.1"||s==="1.2")return this.yaml.version=s,!0;{let o=/^\d+\.\d+$/.test(s);return n(6,`Unsupported YAML version ${s}`,o),!1}}default:return n(0,`Unknown directive ${i}`,!0),!1}}tagName(t,n){if(t==="!")return"!";if(t[0]!=="!")return n(`Not a valid tag: ${t}`),null;if(t[1]==="<"){let o=t.slice(2,-1);return o==="!"||o==="!!"?(n(`Verbatim tags aren't resolved, so ${t} is invalid.`),null):(t[t.length-1]!==">"&&n("Verbatim tags must end with a >"),o)}let[,r,i]=t.match(/^(.*!)([^!]*)$/s);i||n(`The ${t} tag has no suffix`);let s=this.tags[r];if(s)try{return s+decodeURIComponent(i)}catch(o){return n(String(o)),null}return r==="!"?t:(n(`Could not resolve tag: ${t}`),null)}tagString(t){for(let[n,r]of Object.entries(this.tags))if(t.startsWith(r))return n+San(t.substring(r.length));return t[0]==="!"?t:`!<${t}>`}toString(t){let n=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],r=Object.entries(this.tags),i;if(t&&r.length>0&&Ki(t.contents)){let s={};Vg(t.contents,(o,l)=>{Ki(l)&&l.tag&&(s[l.tag]=!0)}),i=Object.keys(s)}else i=[];for(let[s,o]of r)s==="!!"&&o==="tag:yaml.org,2002:"||(!t||i.some(l=>l.startsWith(o)))&&n.push(`%TAG ${s} ${o}`);return n.join(`
6702
6702
  `)}};Kg.defaultYaml={explicit:!1,version:"1.2"};Kg.defaultTags={"!!":"tag:yaml.org,2002:"};function DW(e){if(/[\x00-\x19\s,[\]{}]/.test(e)){let n=`Anchor must not contain whitespace or control characters: ${JSON.stringify(e)}`;throw new Error(n)}return!0}a(DW,"anchorIsValid");function Lme(e){let t=new Set;return Vg(e,{Value(n,r){r.anchor&&t.add(r.anchor)}}),t}a(Lme,"anchorNames");function jme(e,t){for(let n=1;;++n){let r=`${e}${n}`;if(!t.has(r))return r}}a(jme,"findNewAnchor");function RVe(e,t){let n=[],r=new Map,i=null;return{onAnchor:a(s=>{n.push(s),i??(i=Lme(e));let o=jme(t,i);return i.add(o),o},"onAnchor"),setAnchors:a(()=>{for(let s of n){let o=r.get(s);if(typeof o=="object"&&o.anchor&&(ai(o.node)||ws(o.node)))o.node.anchor=o.anchor;else{let l=new Error("Failed to resolve repeated object (this should not happen)");throw l.source=s,l}}},"setAnchors"),sourceObjects:r}}a(RVe,"createNodeAnchors");function dv(e,t,n,r){if(r&&typeof r=="object")if(Array.isArray(r))for(let i=0,s=r.length;i<s;++i){let o=r[i],l=dv(e,r,String(i),o);l===void 0?delete r[i]:l!==o&&(r[i]=l)}else if(r instanceof Map)for(let i of Array.from(r.keys())){let s=r.get(i),o=dv(e,r,i,s);o===void 0?r.delete(i):o!==s&&r.set(i,o)}else if(r instanceof Set)for(let i of Array.from(r)){let s=dv(e,r,i,i);s===void 0?r.delete(i):s!==i&&(r.delete(i),r.add(s))}else for(let[i,s]of Object.entries(r)){let o=dv(e,r,i,s);o===void 0?delete r[i]:o!==s&&(r[i]=o)}return e.call(t,n,r)}a(dv,"applyReviver");function Sl(e,t,n){if(Array.isArray(e))return e.map((r,i)=>Sl(r,String(i),n));if(e&&typeof e.toJSON=="function"){if(!n||!MW(e))return e.toJSON(t,n);let r={aliasCount:0,count:1,res:void 0};n.anchors.set(e,r),n.onCreate=s=>{r.res=s,delete n.onCreate};let i=e.toJSON(t,n);return n.onCreate&&n.onCreate(i),i}return typeof e=="bigint"&&!n?.keep?Number(e):e}a(Sl,"toJS");var pv=class{static{a(this,"NodeBase")}constructor(t){Object.defineProperty(this,Vu,{value:t})}clone(){let t=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(t.range=this.range.slice()),t}toJS(t,{mapAsMap:n,maxAliasCount:r,onAnchor:i,reviver:s}={}){if(!Hg(t))throw new TypeError("A document argument is required");let o={anchors:new Map,doc:t,keep:!0,mapAsMap:n===!0,mapKeyWarned:!1,maxAliasCount:typeof r=="number"?r:100},l=Sl(this,"",o);if(typeof i=="function")for(let{count:c,res:u}of o.anchors.values())i(u,c);return typeof s=="function"?dv(s,{"":l},"",l):l}};var W1=class extends pv{static{a(this,"Alias")}constructor(t){super(PW),this.source=t,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(t,n){if(n?.maxAliasCount===0)throw new ReferenceError("Alias resolution is disabled");let r;n?.aliasResolveCache?r=n.aliasResolveCache:(r=[],Vg(t,{Node:a((s,o)=>{(Jf(o)||MW(o))&&r.push(o)},"Node")}),n&&(n.aliasResolveCache=r));let i;for(let s of r){if(s===this)break;s.anchor===this.source&&(i=s)}return i}toJSON(t,n){if(!n)return{source:this.source};let{anchors:r,doc:i,maxAliasCount:s}=n,o=this.resolve(i,n);if(!o){let c=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new ReferenceError(c)}let l=r.get(o);if(l||(Sl(o,null,n),l=r.get(o)),l?.res===void 0){let c="This should not happen: Alias anchor was not resolved?";throw new ReferenceError(c)}if(s>=0&&(l.count+=1,l.aliasCount===0&&(l.aliasCount=$W(i,o,r)),l.count*l.aliasCount>s)){let c="Excessive alias count indicates a resource exhaustion attack";throw new ReferenceError(c)}return l.res}toString(t,n,r){let i=`*${this.source}`;if(t){if(DW(this.source),t.options.verifyAliasOrder&&!t.anchors.has(this.source)){let s=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new Error(s)}if(t.implicitKey)return`${i} `}return i}};function $W(e,t,n){if(Jf(t)){let r=t.resolve(e),i=n&&r&&n.get(r);return i?i.count*i.aliasCount:0}else if(ws(t)){let r=0;for(let i of t.items){let s=$W(e,i,n);s>r&&(r=s)}return r}else if(ji(t)){let r=$W(e,t.key,n),i=$W(e,t.value,n);return Math.max(r,i)}return 1}a($W,"getAliasCount");var LW=a(e=>!e||typeof e!="function"&&typeof e!="object","isScalarValue"),Fn=class extends pv{static{a(this,"Scalar")}constructor(t){super(Rp),this.value=t}toJSON(t,n){return n?.keep?this.value:Sl(this.value,t,n)}toString(){return String(this.value)}};Fn.BLOCK_FOLDED="BLOCK_FOLDED";Fn.BLOCK_LITERAL="BLOCK_LITERAL";Fn.PLAIN="PLAIN";Fn.QUOTE_DOUBLE="QUOTE_DOUBLE";Fn.QUOTE_SINGLE="QUOTE_SINGLE";var _an="tag:yaml.org,2002:";function Ean(e,t,n){if(t){let r=n.filter(s=>s.tag===t),i=r.find(s=>!s.format)??r[0];if(!i)throw new Error(`Tag ${t} not found`);return i}return n.find(r=>r.identify?.(e)&&!r.format)}a(Ean,"findTagObject");function q1(e,t,n){if(Hg(e)&&(e=e.contents),Ki(e))return e;if(ji(e)){let p=n.schema[Qf].createNode?.(n.schema,null,n);return p.items.push(e),p}(e instanceof String||e instanceof Number||e instanceof Boolean||typeof BigInt<"u"&&e instanceof BigInt)&&(e=e.valueOf());let{aliasDuplicateObjects:r,onAnchor:i,onTagObj:s,schema:o,sourceObjects:l}=n,c;if(r&&e&&typeof e=="object"){if(c=l.get(e),c)return c.anchor??(c.anchor=i(e)),new W1(c.anchor);c={anchor:null,node:null},l.set(e,c)}t?.startsWith("!!")&&(t=_an+t.slice(2));let u=Ean(e,t,o.tags);if(!u){if(e&&typeof e.toJSON=="function"&&(e=e.toJSON()),!e||typeof e!="object"){let p=new Fn(e);return c&&(c.node=p),p}u=e instanceof Map?o[Qf]:Symbol.iterator in Object(e)?o[U1]:o[Qf]}s&&(s(u),delete n.onTagObj);let d=u?.createNode?u.createNode(n.schema,e,n):typeof u?.nodeClass?.from=="function"?u.nodeClass.from(n.schema,e,n):new Fn(e);return t?d.tag=t:u.default||(d.tag=u.tag),c&&(c.node=d),d}a(q1,"createNode");function E8(e,t,n){let r=n;for(let i=t.length-1;i>=0;--i){let s=t[i];if(typeof s=="number"&&Number.isInteger(s)&&s>=0){let o=[];o[s]=r,r=o}else r=new Map([[s,r]])}return q1(r,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:a(()=>{throw new Error("This should not happen, please report a bug.")},"onAnchor"),schema:e,sourceObjects:new Map})}a(E8,"collectionFromPath");var n6=a(e=>e==null||typeof e=="object"&&!!e[Symbol.iterator]().next().done,"isEmptyPath"),t6=class extends pv{static{a(this,"Collection")}constructor(t,n){super(t),Object.defineProperty(this,"schema",{value:n,configurable:!0,enumerable:!1,writable:!0})}clone(t){let n=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return t&&(n.schema=t),n.items=n.items.map(r=>Ki(r)||ji(r)?r.clone(t):r),this.range&&(n.range=this.range.slice()),n}addIn(t,n){if(n6(t))this.add(n);else{let[r,...i]=t,s=this.get(r,!0);if(ws(s))s.addIn(i,n);else if(s===void 0&&this.schema)this.set(r,E8(this.schema,i,n));else throw new Error(`Expected YAML collection at ${r}. Remaining path: ${i}`)}}deleteIn(t){let[n,...r]=t;if(r.length===0)return this.delete(n);let i=this.get(n,!0);if(ws(i))return i.deleteIn(r);throw new Error(`Expected YAML collection at ${n}. Remaining path: ${r}`)}getIn(t,n){let[r,...i]=t,s=this.get(r,!0);return i.length===0?!n&&ai(s)?s.value:s:ws(s)?s.getIn(i,n):void 0}hasAllNullValues(t){return this.items.every(n=>{if(!ji(n))return!1;let r=n.value;return r==null||t&&ai(r)&&r.value==null&&!r.commentBefore&&!r.comment&&!r.tag})}hasIn(t){let[n,...r]=t;if(r.length===0)return this.has(n);let i=this.get(n,!0);return ws(i)?i.hasIn(r):!1}setIn(t,n){let[r,...i]=t;if(i.length===0)this.set(r,n);else{let s=this.get(r,!0);if(ws(s))s.setIn(i,n);else if(s===void 0&&this.schema)this.set(r,E8(this.schema,i,n));else throw new Error(`Expected YAML collection at ${r}. Remaining path: ${i}`)}}};var CVe=a(e=>e.replace(/^(?!$)(?: $)?/gm,"#"),"stringifyComment");function _h(e,t){return/^\n+$/.test(e)?e.substring(1):t?e.replace(/^(?! *$)/gm,t):e}a(_h,"indentComment");var Qg=a((e,t,n)=>e.endsWith(`
6703
6703
  `)?_h(n,t):n.includes(`
6704
6704
  `)?`
@@ -7227,7 +7227,7 @@ The web request used endpoint ${JSON.stringify(e)}. Search endpoint configuratio
7227
7227
  .error { padding: .75rem; border-radius: .5rem; background: #461d2b; color: #ffd6df; }
7228
7228
  .hint { margin: 1.5rem 0 0; font-size: .875rem; }
7229
7229
  code { padding: .1rem .3rem; border-radius: .3rem; background: #0c1222; color: #edf2ff; }
7230
- `}a(Akt,"pageStyles");i8();var WAe="enabled",qAe=Object.freeze({id:"direct",capabilities:Object.freeze(["bash"]),plan:"free",shell:"just-bash-direct",probe:a(e=>e.LOADER===void 0?"available":"needs-binding","probe")}),hN=Object.freeze({id:"dynamic-worker",capabilities:Object.freeze(["bash","coding"]),plan:"paid",shell:"just-bash-isolated",probe:a(e=>e.LOADER===void 0?"needs-binding":"available","probe")}),BAe=Object.freeze({id:"container",capabilities:Object.freeze(["container"]),plan:"paid",shell:"linux-container",probe:a(e=>e.DSH_EDGE_CONTAINER_RUNTIME===WAe?"available":"needs-binding","probe")}),Gsr=Object.freeze([BAe,hN,qAe]);function zAe(e,t=Gsr){return t.filter(n=>n.probe(e)==="available")}a(zAe,"availableEdgeRuntimeProviders");function HAe(e){let t=a(r=>e.find(i=>i.capabilities.includes(r)),"first"),n=t("bash");if(n===void 0)throw new Error("No available runtime provider serves the bash layer.");return{bash:n.id,container:t("container")?.id??null}}a(HAe,"resolveEdgeRuntimeSelection");function pX(e){let t=zAe(e),{bash:n,container:r}=HAe(t);return t.find(i=>i.id===(r??n)).shell}a(pX,"resolveEdgeRuntimeShell");function Vsr(){return"dsh-edge@0.27.0/isolated"}a(Vsr,"resolveEdgeDeploymentId");function iS(e){return{baseURL:lke(e.DEEPSEEK_BASE_URL),maxTokens:dke(e.DEEPSEEK_MAX_OUTPUT_TOKENS),model:wk(e.DEEPSEEK_MODEL),reasoningEffort:cke(e.DEEPSEEK_REASONING_EFFORT),searchBaseURL:_M(e.DEEPSEEK_SEARCH_BASE_URL),streamIdleTimeoutMs:uke(e.DEEPSEEK_STREAM_IDLE_TIMEOUT_MS),commandTimeoutPolicy:sb(e.DSH_EDGE_DEFAULT_COMMAND_TIMEOUT_MS,e.DSH_EDGE_MAX_COMMAND_TIMEOUT_MS)}}a(iS,"resolveEdgeDeploymentConfig");function Ksr(e){return typeof e.DEEPSEEK_API_KEY=="string"&&e.DEEPSEEK_API_KEY.trim().length>0}a(Ksr,"edgeDeploymentApiKeyConfigured");function Qsr(e){let t=lke(e),n=new URL(t);return n.search.length===0&&n.hash.length===0?t:(n.search="",n.hash="",n.href)}a(Qsr,"projectedEdgeBaseURL");function GAe(e,t){return{shell:pX(e),storage:"durable-object-sqlite-vfs",attachmentStorage:t??(e.DSH_EDGE_ATTACHMENTS===void 0?"temporary-do":"private-r2"),deploymentId:Vsr(),apiKeyConfigured:Ksr(e),baseURL:Qsr(e.DEEPSEEK_BASE_URL),maxTokens:dke(e.DEEPSEEK_MAX_OUTPUT_TOKENS),model:wk(e.DEEPSEEK_MODEL),reasoningEffort:cke(e.DEEPSEEK_REASONING_EFFORT),searchBaseURL:_M(e.DEEPSEEK_SEARCH_BASE_URL),streamIdleTimeoutMs:uke(e.DEEPSEEK_STREAM_IDLE_TIMEOUT_MS),commandTimeoutPolicy:sb(e.DSH_EDGE_DEFAULT_COMMAND_TIMEOUT_MS,e.DSH_EDGE_MAX_COMMAND_TIMEOUT_MS)}}a(GAe,"resolveEdgeDeploymentProfile");function hX(e){iS(e);let t=GAe(e);return{ok:!0,service:"dsh-edge",storage:t.storage,attachmentStorage:t.attachmentStorage,shell:t.shell,agent:"upstream-react-loop-agent",access:"single-owner-cookie",deploymentId:t.deploymentId,...e.CF_VERSION_METADATA===void 0?{}:{workerVersionId:e.CF_VERSION_METADATA.id},version:Uw,upstreamVersion:yze,status:"ready"}}a(hX,"resolveEdgeDeploymentHealth");import{AsyncLocalStorage as ygr}from"node:async_hooks";import{RpcTarget as Jsr}from"cloudflare:workers";function Zsr(e){let{intervalMs:t,ping:n,onFailure:r}=e,i=!1,s=setInterval(()=>{i||n().catch(o=>{i||(i=!0,clearInterval(s),r(o instanceof Error?o:new Error(String(o))))})},t);return()=>{i||(i=!0,clearInterval(s))}}a(Zsr,"startHeartbeat");async function Xsr(e,t){let n=AbortSignal.timeout(t.timeoutMs),r=await e.fetchPort(t.port,`http://container${t.path}`,{method:"HEAD",signal:n});if(r.body?.cancel(),!r.ok)throw new Error(`computerd health returned ${r.status}`)}a(Xsr,"probeComputerdHealth");var Ysr="computer.internal",eor="/health",VAe="/api",tor=8080,nor=3e4,ror=2e4,ior=1,sor=2e3,oor=250,aor=2e3;function lor(e,t){if(t===void 0||e===null)return!1;let n=e.indexOf(" ");if(n===-1||e.slice(0,n).toLowerCase()!=="bearer")return!1;let r=e.slice(n+1).trim();if(r.length!==t.length)return!1;let i=0;for(let s=0;s<t.length;s+=1)i|=r.charCodeAt(s)^t.charCodeAt(s);return i===0}a(lor,"bearerMatches");var mX=class{static{a(this,"CloudflareContainerBackend")}type="cloudflare-container";id;#e;#n;#r;#t;#i;#s;#a;#u;constructor(e){this.id=e.id??"container-shell",this.#n=e.egress??{mode:"none"},this.#r=this.#n.mode==="http-gateway"?crypto.randomUUID():void 0,this.#e={container:e.container,workspace:e.workspace,containerEnv:e.containerEnv,egressHost:e.egressHost??Ysr,containerPort:e.containerPort??tor,connectTimeoutMs:e.connectTimeoutMs??nor,heartbeatIntervalMs:e.heartbeatIntervalMs??ror,restartAttempts:e.restartAttempts??ior,healthProbeTimeoutMs:e.healthProbeTimeoutMs??sor,healthRetryInitialDelayMs:e.healthRetryInitialDelayMs??oor,healthRetryMaxDelayMs:e.healthRetryMaxDelayMs??aor}}async connect(){if(this.#u)return this.#u;let e=Date.now()+this.#e.connectTimeoutMs,t=await(await this.#e.container()).getWorkspaceContainer(),n=await t.exitInfo().catch(()=>null),r={PORT:String(this.#e.containerPort),MOUNT_POINT:"/workspace",...this.#e.containerEnv},i,s;try{({runtimeId:i,clientSecret:s}=await t.start({env:r,enableInternet:this.#n.mode==="direct"}))}catch(p){throw new ku(this.#h("start",{attempt:1,maxAttempts:this.#e.restartAttempts+1,restarts:0,lastError:p,priorExit:n}),{cause:p})}try{await t.interceptOutboundHttp(this.#e.egressHost,this.#e.workspace),this.#n.mode==="http-gateway"&&this.#r!==void 0&&await t.interceptAllOutboundHttp(this.#e.workspace,this.#r)}catch(p){throw new ku(this.#h("egress",{attempt:1,maxAttempts:this.#e.restartAttempts+1,restarts:0,lastError:p,priorExit:n}),{cause:p})}this.#t=s,this.#l(),i=await this.#p(t,r,e,n,i),await this.#c(t,e),await this.#m(t,e,s);let o=await this.#d(e),l=XY(o),c,u=new Promise(p=>{let h=!1,f=a(()=>{h||(h=!0,c?.(),p(),this.#u=void 0)},"onClose");o.addEventListener("close",f,{once:!0}),o.addEventListener("error",f,{once:!0}),l.onRpcBroken(f)});this.#e.heartbeatIntervalMs>0&&(c=Zsr({intervalMs:this.#e.heartbeatIntervalMs,ping:a(()=>l.sync.watermarks(),"ping"),onFailure:a(()=>{try{o.close()}catch{}},"onFailure")}));let d={rpc:l,runtimeId:i,closed:u,close:a(async()=>{c?.();try{l[Symbol.dispose]?.()}catch{}try{o.close()}catch{}this.#u=void 0},"close")};return this.#u=d,d}async handleFetch(e){if(this.#n.mode==="http-gateway"&&this.#r!==void 0&&e.headers.get("x-workspace-egress-token")===this.#r){let i=new Headers(e.headers),s=i.get(tI),o;try{o=new URL(s??"")}catch{return new Response("invalid egress URL",{status:400})}if(o.protocol!=="http:"&&o.protocol!=="https:")return new Response("invalid egress URL",{status:400});i.delete(oD),i.delete(tI);let l=new Request(e,{headers:i});return this.#n.gateway.fetch(new Request(o,l))}if(new URL(e.url).pathname!==VAe)return new Response("not found",{status:404});if(e.headers.get("upgrade")!=="websocket")return new Response(`${VAe} requires a websocket upgrade`,{status:400});if(!lor(e.headers.get("authorization"),this.#t))return new Response("unauthorized",{status:401,headers:{"www-authenticate":"Bearer"}});let t=new WebSocketPair,[n,r]=[t[0],t[1]];if(r.accept(),this.#s)this.#s(r);else return r.close(1011,"no pending connect"),new Response("no pending connect",{status:409});return new Response(null,{status:101,webSocket:n})}#l(){this.#i=new Promise((e,t)=>{this.#s=e,this.#a=t}),this.#i.catch(()=>{})}#o(){this.#i=void 0,this.#s=void 0,this.#a=void 0}async#p(e,t,n,r,i){let s=this.#e.restartAttempts+1,o=Math.max(0,n-Date.now()),l=Math.max(250,Math.floor(o/s)),c=0,u=0,d,p=i;for(;c<s;){c++;let h=Math.min(n,Date.now()+l);if(await this.#f(e,h).then(()=>!0,f=>(d=f,!1)))return p;if(c<s)try{({runtimeId:p}=await e.restart({env:t,enableInternet:this.#n.mode==="direct"})),u++}catch(f){throw this.#a?.(f),this.#o(),new ku(this.#h("restart",{attempt:c,maxAttempts:s,restarts:u,lastError:f}),{cause:f})}}throw this.#a?.(new Error("computerd never became healthy")),this.#o(),new ku(this.#h("health",{attempt:c,maxAttempts:s,restarts:u,lastError:d,priorExit:r}),d instanceof Error?{cause:d}:void 0)}async#f(e,t){let n=this.#e.healthRetryInitialDelayMs,r;for(;Date.now()<t;)try{await Xsr(e,{port:this.#e.containerPort,path:"/health",timeoutMs:Math.min(this.#e.healthProbeTimeoutMs,Math.max(50,t-Date.now()))});return}catch(i){r=i;let s=t-Date.now();if(s<=0)break;await cor(Math.min(n,s)),n=Math.min(n*2,this.#e.healthRetryMaxDelayMs)}throw r??new Error("computerd health probe timed out")}#h(e,t){let n=t.priorExit?` priorExit=${JSON.stringify(t.priorExit.reason)}`:"";return`CloudflareContainerBackend(${this.id}): connect failed at stage=${e} port=${this.#e.containerPort} attempt=${t.attempt}/${t.maxAttempts} restarts=${t.restarts} timeoutMs=${this.#e.connectTimeoutMs}${n} lastError=${Ikt(t.lastError)}`}async#c(e,t){let n;try{let r=await e.fetchPort(this.#e.containerPort,"http://container/api",{signal:AbortSignal.timeout(Math.min(this.#e.healthProbeTimeoutMs,Math.max(50,t-Date.now())))});n=r.status,await r.text().catch(()=>"")}catch{return}if(n!==401)throw this.#a?.(new Error("container is not enforcing RPC_CLIENT_SECRET")),this.#o(),new ku(`CloudflareContainerBackend(${this.id}) [stage=auth]: container served an unauthenticated request to /api with ${n}, so this workspace would run without authorization. A container or image predating RPC_CLIENT_SECRET has to be recycled.`)}async#m(e,t,n){let r=Math.max(0,t-Date.now()),i;try{i=await e.fetchPort(this.#e.containerPort,"http://container/connect",{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${n}`},body:JSON.stringify({base:`http://${this.#e.egressHost}`,health:eor,api:VAe,healthTimeoutMs:r})})}catch(s){throw this.#a?.(s),this.#o(),new ku(`CloudflareContainerBackend(${this.id}) [stage=connect]: POST /connect failed: ${Ikt(s)}`,{cause:s})}if(!i.ok){let s=await i.text().catch(()=>""),o=new Error(`/connect ${i.status}`);throw this.#a?.(o),this.#o(),new ku(`CloudflareContainerBackend(${this.id}) [stage=connect]: POST /connect returned ${i.status}: ${s}`,{cause:o})}}async#d(e){let t=this.#i;if(!t)throw new Error("CloudflareContainerBackend: upgrade promise missing");let n=Math.max(0,e-Date.now()),r;try{return await Promise.race([t,new Promise((i,s)=>{r=setTimeout(()=>s(new ku(`CloudflareContainerBackend(${this.id}) [stage=ws]: /api upgrade did not arrive within ${this.#e.connectTimeoutMs}ms`)),n)})])}finally{r&&clearTimeout(r),this.#o()}}};function cor(e){return new Promise(t=>setTimeout(t,e))}a(cor,"sleep");function Ikt(e){return e instanceof Error?e.message:String(e)}a(Ikt,"describeError");var Rkt="computer:container-client-secret",uor=16;function dor(){let e=crypto.getRandomValues(new Uint8Array(uor));return Array.from(e,t=>t.toString(16).padStart(2,"0")).join("")}a(dor,"generate");var por=class{static{a(this,"ContainerClientSecret")}storage;constructor(e){this.storage=e}async ensure(){let e=await this.storage.get(Rkt);if(typeof e=="string"&&e.length>0)return e;let t=dor();return await this.storage.put(Rkt,t),t}},Ckt="computer:container-launch-record";async function Pkt(e){return{enableInternet:e.enableInternet,envDigest:await mor(e.env)}}a(Pkt,"launchRecordFor");function hor(e,t){return e.enableInternet===t.enableInternet&&e.envDigest===t.envDigest}a(hor,"sameLaunch");async function mor(e){let t=Object.keys(e).sort().map(r=>`${r.length}:${r}=${e[r]?.length??0}:${e[r]??""}`).join(";"),n=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(t));return Array.from(new Uint8Array(n),r=>r.toString(16).padStart(2,"0")).join("")}a(mor,"digestEnv");var gor=class{static{a(this,"CurrentContainerLaunchRecord")}storage;constructor(e){this.storage=e}async get(){return await this.storage.get(Ckt)??null}async set(e){await this.storage.put(Ckt,e)}},Okt=new WeakMap;function JAe(e){let t=Okt.get(e);return t===void 0&&(t={exit:null,currentGeneration:0,expectedExitGeneration:null,currentMonitorSettled:null},Okt.set(e,t)),t}a(JAe,"getContainerLifecycle");function fX(e){return JAe(e).exit}a(fX,"containerExitInfo");function Mkt(e){return e===void 0?"exited normally":e instanceof Error?e.message:String(e)}a(Mkt,"formatExitReason");function Nkt(e,t,n){let r=JAe(e);r.currentGeneration+=1;let i=r.currentGeneration;r.exit=null,r.currentMonitorSettled=t.monitor().then(()=>Dkt(r,i,void 0,n),s=>Dkt(r,i,s,n))}a(Nkt,"installContainerMonitor");async function KAe(e,t){let n=JAe(e);n.expectedExitGeneration=n.currentGeneration;let r=n.currentMonitorSettled;await t.destroy(),r&&await r}a(KAe,"destroyContainerExpectingExit");async function Dkt(e,t,n,r){if(t!==e.currentGeneration)return;let i=e.expectedExitGeneration===t;i&&(e.expectedExitGeneration=null);let s=Mkt(n),o=Date.now();e.exit={reason:s,exitedAt:o},i?console.info({message:"workspace.container.exited",reason:s,exitedAt:o,expected:!0}):console.warn({message:"workspace.container.exited",reason:s,exitedAt:o,expected:!1});try{await r?.()}catch(l){console.error({message:"workspace.container.exit_cleanup_failed",reason:Mkt(l),exitedAt:Date.now()})}}a(Dkt,"recordExit");var QAe="computer:container-runtime-identity",yor=class{static{a(this,"CurrentContainerRuntimeIdentity")}storage;constructor(e){this.storage=e}async get(){return await this.storage.get(QAe)??null}async markStarted(){let e={id:crypto.randomUUID()};return await this.storage.put(QAe,e),e}async clear(e){(await this.get())?.id===e.id&&await this.storage.delete(QAe)}},vor=class extends Jsr{static{a(this,"WorkspaceContainerAPI")}#e;#n;#r;#t;#i;constructor(e){if(super(),!e.container)throw new Error("WorkspaceContainerAPI: DO is not container-enabled (check wrangler.jsonc)");this.#e=e.container,this.#n=e,this.#r=new yor(e.storage),this.#t=new por(e.storage),this.#i=new gor(e.storage)}async start(e){let t=fX(this.#n),n=await this.#t.ensure(),r=await Pkt(e);if(t!==null){try{await KAe(this.#n,this.#e)}catch{}return this.#s(e,n,r,"launched")}if(!this.#e.running)return this.#s(e,n,r,"launched");let i=await this.#i.get();if(i===null||!hor(i,r)){console.warn({message:i===null?"container was started outside WorkspaceContainerAPI; relaunching so the requested environment applies":"running container was launched with a different spec; relaunching",component:"workspace-container",requested:r,actual:i});try{await KAe(this.#n,this.#e)}catch{}return this.#s(e,n,r,"relaunched")}let s=await this.#r.get()??await this.#r.markStarted();return Nkt(this.#n,this.#e,()=>this.#r.clear(s)),{runtimeId:s.id,clientSecret:n,outcome:"adopted"}}async restart(e){try{await KAe(this.#n,this.#e)}catch{}let t=await this.#t.ensure();return this.#s(e,t,await Pkt(e),"launched")}async setInactivityTimeout(e){await this.#e.setInactivityTimeout(e)}async#s(e,t,n,r){let i=await this.#r.markStarted();try{this.#e.start({enableInternet:e.enableInternet,env:{...e.env,RPC_CLIENT_SECRET:t}})}catch(s){throw await this.#r.clear(i),s}return await this.#i.set(n),Nkt(this.#n,this.#e,()=>this.#r.clear(i)),{runtimeId:i.id,clientSecret:t,outcome:r}}async status(){return{running:this.#e.running,exit:fX(this.#n)}}async exitInfo(){return fX(this.#n)}async interceptAllOutboundHttp(e,t){let n=this.#n.exports.WorkspaceProxy({props:{...e,egressToken:t}});await Promise.all([this.#e.interceptAllOutboundHttp(n),this.#e.interceptOutboundHttps("*",n)])}async interceptOutboundHttp(e,t){let n=this.#n.exports;await this.#e.interceptOutboundHttp(e,n.WorkspaceProxy({props:t}))}fetchPort(e,t,n){let r=fX(this.#n);if(r!==null)throw new ku(`container exited: ${r.reason}`);return this.#e.getTcpPort(e).fetch(t,n)}port(e){return this.#e.getTcpPort(e)}};function $kt(e){class t extends e{static{a(this,"WithWorkspaceContainer")}getWorkspaceContainer(){return new vor(this.ctx)}}return t}a($kt,"withWorkspaceContainer");var xor={session:"sessions",skill:"skills",agentPreset:"agentPresets",subagent:"subagents",goal:"goals",event:"events",download:"downloads"};function jkt(e,t){let n=t.indexOf("."),r=t.indexOf("/"),i=n>=0?n:r;if(i<0)return;let s=t.slice(0,i),o=t.slice(i+1),l=xor[s]??s,c=e[l];if(c===void 0)return;let u=c[o];return typeof u=="function"?u:void 0}a(jkt,"resolve");function bor(e,t){return Response.json({type:"server-response",rpcId:e,result:{ok:!1,error:t}})}a(bor,"errorResponse");async function ZAe(e,t,n,r,i){let s=jkt(e,t);if(s!==void 0)return await s({rpcId:n,payload:r},i)}a(ZAe,"callEdgeApi");async function Fkt(e,t){let r=new URL(t.url).pathname;if(t.method!=="POST"||!r.startsWith("/api/"))return new Response("not found",{status:404});if(r==="/api/respond")return Response.json({accepted:!1,reason:"not-pending"});let i=r.slice(5);if(jkt(e,i)===void 0)return new Response("not found",{status:404});let s;try{s=await t.json()}catch{return new Response("body is not JSON",{status:400})}let o=typeof s.rpcId=="string"?s.rpcId:"invalid-request",l=s.payload??{};try{let c=await ZAe(e,i,o,l,t.signal);return c===void 0?new Response("not found",{status:404}):Response.json({type:"server-response",rpcId:c.rpcId,result:c.result})}catch(c){return bor(o,{code:"internal",message:String(c),details:{}})}}a(Fkt,"dispatchEdgeApi");Dr();lo();B2();import{DurableObject as vgr}from"cloudflare:workers";var gX=class{constructor(t,n=Date.now,r=2){this.sleepAfterMs=t;this.now=n;this.maxConcurrent=r}sleepAfterMs;now;maxConcurrent;static{a(this,"ContainerActivity")}inFlight=0;lastActivity;stopping;waiters=[];async admit(t){let n=this.now();for(;this.stopping!==void 0||this.inFlight>=this.maxConcurrent;){if(t?.throwIfAborted(),this.stopping!==void 0){await wor(this.stopping,t);continue}await new Promise((r,i)=>{let s=a(()=>{t?.removeEventListener("abort",o),r()},"wake"),o=a(()=>{let l=this.waiters.indexOf(s);l!==-1&&this.waiters.splice(l,1),i(t.reason)},"abort");this.waiters.push(s),t?.addEventListener("abort",o,{once:!0})})}return t?.aborted===!0&&(this.waiters.shift()?.(),t.throwIfAborted()),{release:this.begin(),queuedMs:this.now()-n}}begin(){this.inFlight+=1,this.lastActivity=this.now();let t=!1;return()=>{t||(t=!0,this.inFlight-=1,this.lastActivity=this.now(),this.waiters.shift()?.())}}async stopIfIdle(t){return this.idle()?await this.stop(t):"busy"}async stopNow(t){return this.inFlight===0?await this.stop(t):"busy"}snapshot(){return{runningCommands:this.inFlight,lastActivityAt:this.lastActivity??null}}async stop(t){if(this.stopping!==void 0)return"busy";let n="stopped",r=t().catch(i=>{n="failed",this.lastActivity=this.now(),console.error("dsh-edge container stop failed.",i)});this.stopping=r;try{await r}finally{this.stopping=void 0}return n}deadline(){return this.inFlight>0?this.now()+this.sleepAfterMs():this.lastActivity===void 0?this.now():this.lastActivity+this.sleepAfterMs()}idle(){return this.inFlight===0&&(this.lastActivity===void 0||this.now()>=this.lastActivity+this.sleepAfterMs())}};function wor(e,t){return t===void 0?e:new Promise((n,r)=>{let i=a(()=>r(t.reason),"abort");t.addEventListener("abort",i,{once:!0}),e.then(n,r).finally(()=>t.removeEventListener("abort",i))})}a(wor,"untilAborted");import{WorkerEntrypoint as Gzi}from"cloudflare:workers";var wS=Ml(Ukt(),1);import{gunzipSync as Glr}from"node:zlib";var fN=class{static{a(this,"Diff")}diff(t,n,r={}){let i;typeof r=="function"?(i=r,r={}):"callback"in r&&(i=r.callback);let s=this.castInput(t,r),o=this.castInput(n,r),l=this.removeEmpty(this.tokenize(s,r)),c=this.removeEmpty(this.tokenize(o,r));return this.diffWithOptionsObj(l,c,r,i)}diffWithOptionsObj(t,n,r,i){var s;let o=a(b=>{if(b=this.postProcess(b,r),i){setTimeout(function(){i(b)},0);return}else return b},"done"),l=n.length,c=t.length,u=1,d=l+c;r.maxEditLength!=null&&(d=Math.min(d,r.maxEditLength));let p=(s=r.timeout)!==null&&s!==void 0?s:1/0,h=Date.now()+p,f=[{oldPos:-1,lastComponent:void 0}],g=this.extractCommon(f[0],n,t,0,r);if(f[0].oldPos+1>=c&&g+1>=l)return o(this.buildValues(f[0].lastComponent,n,t));let y=-1/0,v=1/0,x=a(()=>{for(let b=Math.max(y,-u);b<=Math.min(v,u);b+=2){let _,k=f[b-1],T=f[b+1];k&&(f[b-1]=void 0);let A=!1;if(T){let M=T.oldPos-b;A=T&&0<=M&&M<l}let R=k&&k.oldPos+1<c;if(!A&&!R){f[b]=void 0;continue}if(!R||A&&k.oldPos<T.oldPos?_=this.addToPath(T,!0,!1,0,r):_=this.addToPath(k,!1,!0,1,r),g=this.extractCommon(_,n,t,b,r),_.oldPos+1>=c&&g+1>=l)return o(this.buildValues(_.lastComponent,n,t))||!0;f[b]=_,_.oldPos+1>=c&&(v=Math.min(v,b-1)),g+1>=l&&(y=Math.max(y,b+1))}u++},"execEditLength");if(i)a(function b(){setTimeout(function(){if(u>d||Date.now()>h)return i(void 0);x()||b()},0)},"exec")();else for(;u<=d&&Date.now()<=h;){let b=x();if(b)return b}}addToPath(t,n,r,i,s){let o=t.lastComponent;return o&&!s.oneChangePerToken&&o.added===n&&o.removed===r?{oldPos:t.oldPos+i,lastComponent:{count:o.count+1,added:n,removed:r,previousComponent:o.previousComponent}}:{oldPos:t.oldPos+i,lastComponent:{count:1,added:n,removed:r,previousComponent:o}}}extractCommon(t,n,r,i,s){let o=n.length,l=r.length,c=t.oldPos,u=c-i,d=0;for(;u+1<o&&c+1<l&&this.equals(r[c+1],n[u+1],s);)u++,c++,d++,s.oneChangePerToken&&(t.lastComponent={count:1,previousComponent:t.lastComponent,added:!1,removed:!1});return d&&!s.oneChangePerToken&&(t.lastComponent={count:d,previousComponent:t.lastComponent,added:!1,removed:!1}),t.oldPos=c,u}equals(t,n,r){return r.comparator?r.comparator(t,n):t===n||!!r.ignoreCase&&t.toLowerCase()===n.toLowerCase()}removeEmpty(t){let n=[];for(let r=0;r<t.length;r++)t[r]&&n.push(t[r]);return n}castInput(t,n){return t}tokenize(t,n){return Array.from(t)}join(t){return t.join("")}postProcess(t,n){return t}get useLongestToken(){return!1}buildValues(t,n,r){let i=[],s;for(;t;)i.push(t),s=t.previousComponent,delete t.previousComponent,t=s;i.reverse();let o=i.length,l=0,c=0,u=0;for(;l<o;l++){let d=i[l];if(d.removed)d.value=this.join(r.slice(u,u+d.count)),u+=d.count;else{if(!d.added&&this.useLongestToken){let p=n.slice(c,c+d.count);p=p.map(function(h,f){let g=r[u+f];return g.length>h.length?g:h}),d.value=this.join(p)}else d.value=this.join(n.slice(c,c+d.count));c+=d.count,d.added||(u+=d.count)}}return i}};var XAe=class extends fN{static{a(this,"LineDiff")}constructor(){super(...arguments),this.tokenize=Sor}equals(t,n,r){return r.ignoreWhitespace?((!r.newlineIsToken||!t.includes(`
7230
+ `}a(Akt,"pageStyles");i8();var WAe="enabled",qAe=Object.freeze({id:"direct",capabilities:Object.freeze(["bash"]),plan:"free",shell:"just-bash-direct",probe:a(e=>e.LOADER===void 0?"available":"needs-binding","probe")}),hN=Object.freeze({id:"dynamic-worker",capabilities:Object.freeze(["bash","coding"]),plan:"paid",shell:"just-bash-isolated",probe:a(e=>e.LOADER===void 0?"needs-binding":"available","probe")}),BAe=Object.freeze({id:"container",capabilities:Object.freeze(["container"]),plan:"paid",shell:"linux-container",probe:a(e=>e.DSH_EDGE_CONTAINER_RUNTIME===WAe?"available":"needs-binding","probe")}),Gsr=Object.freeze([BAe,hN,qAe]);function zAe(e,t=Gsr){return t.filter(n=>n.probe(e)==="available")}a(zAe,"availableEdgeRuntimeProviders");function HAe(e){let t=a(r=>e.find(i=>i.capabilities.includes(r)),"first"),n=t("bash");if(n===void 0)throw new Error("No available runtime provider serves the bash layer.");return{bash:n.id,container:t("container")?.id??null}}a(HAe,"resolveEdgeRuntimeSelection");function pX(e){let t=zAe(e),{bash:n,container:r}=HAe(t);return t.find(i=>i.id===(r??n)).shell}a(pX,"resolveEdgeRuntimeShell");function Vsr(){return"dsh-edge@0.27.2/isolated"}a(Vsr,"resolveEdgeDeploymentId");function iS(e){return{baseURL:lke(e.DEEPSEEK_BASE_URL),maxTokens:dke(e.DEEPSEEK_MAX_OUTPUT_TOKENS),model:wk(e.DEEPSEEK_MODEL),reasoningEffort:cke(e.DEEPSEEK_REASONING_EFFORT),searchBaseURL:_M(e.DEEPSEEK_SEARCH_BASE_URL),streamIdleTimeoutMs:uke(e.DEEPSEEK_STREAM_IDLE_TIMEOUT_MS),commandTimeoutPolicy:sb(e.DSH_EDGE_DEFAULT_COMMAND_TIMEOUT_MS,e.DSH_EDGE_MAX_COMMAND_TIMEOUT_MS)}}a(iS,"resolveEdgeDeploymentConfig");function Ksr(e){return typeof e.DEEPSEEK_API_KEY=="string"&&e.DEEPSEEK_API_KEY.trim().length>0}a(Ksr,"edgeDeploymentApiKeyConfigured");function Qsr(e){let t=lke(e),n=new URL(t);return n.search.length===0&&n.hash.length===0?t:(n.search="",n.hash="",n.href)}a(Qsr,"projectedEdgeBaseURL");function GAe(e,t){return{shell:pX(e),storage:"durable-object-sqlite-vfs",attachmentStorage:t??(e.DSH_EDGE_ATTACHMENTS===void 0?"temporary-do":"private-r2"),deploymentId:Vsr(),apiKeyConfigured:Ksr(e),baseURL:Qsr(e.DEEPSEEK_BASE_URL),maxTokens:dke(e.DEEPSEEK_MAX_OUTPUT_TOKENS),model:wk(e.DEEPSEEK_MODEL),reasoningEffort:cke(e.DEEPSEEK_REASONING_EFFORT),searchBaseURL:_M(e.DEEPSEEK_SEARCH_BASE_URL),streamIdleTimeoutMs:uke(e.DEEPSEEK_STREAM_IDLE_TIMEOUT_MS),commandTimeoutPolicy:sb(e.DSH_EDGE_DEFAULT_COMMAND_TIMEOUT_MS,e.DSH_EDGE_MAX_COMMAND_TIMEOUT_MS)}}a(GAe,"resolveEdgeDeploymentProfile");function hX(e){iS(e);let t=GAe(e);return{ok:!0,service:"dsh-edge",storage:t.storage,attachmentStorage:t.attachmentStorage,shell:t.shell,agent:"upstream-react-loop-agent",access:"single-owner-cookie",deploymentId:t.deploymentId,...e.CF_VERSION_METADATA===void 0?{}:{workerVersionId:e.CF_VERSION_METADATA.id},version:Uw,upstreamVersion:yze,status:"ready"}}a(hX,"resolveEdgeDeploymentHealth");import{AsyncLocalStorage as ygr}from"node:async_hooks";import{RpcTarget as Jsr}from"cloudflare:workers";function Zsr(e){let{intervalMs:t,ping:n,onFailure:r}=e,i=!1,s=setInterval(()=>{i||n().catch(o=>{i||(i=!0,clearInterval(s),r(o instanceof Error?o:new Error(String(o))))})},t);return()=>{i||(i=!0,clearInterval(s))}}a(Zsr,"startHeartbeat");async function Xsr(e,t){let n=AbortSignal.timeout(t.timeoutMs),r=await e.fetchPort(t.port,`http://container${t.path}`,{method:"HEAD",signal:n});if(r.body?.cancel(),!r.ok)throw new Error(`computerd health returned ${r.status}`)}a(Xsr,"probeComputerdHealth");var Ysr="computer.internal",eor="/health",VAe="/api",tor=8080,nor=3e4,ror=2e4,ior=1,sor=2e3,oor=250,aor=2e3;function lor(e,t){if(t===void 0||e===null)return!1;let n=e.indexOf(" ");if(n===-1||e.slice(0,n).toLowerCase()!=="bearer")return!1;let r=e.slice(n+1).trim();if(r.length!==t.length)return!1;let i=0;for(let s=0;s<t.length;s+=1)i|=r.charCodeAt(s)^t.charCodeAt(s);return i===0}a(lor,"bearerMatches");var mX=class{static{a(this,"CloudflareContainerBackend")}type="cloudflare-container";id;#e;#n;#r;#t;#i;#s;#a;#u;constructor(e){this.id=e.id??"container-shell",this.#n=e.egress??{mode:"none"},this.#r=this.#n.mode==="http-gateway"?crypto.randomUUID():void 0,this.#e={container:e.container,workspace:e.workspace,containerEnv:e.containerEnv,egressHost:e.egressHost??Ysr,containerPort:e.containerPort??tor,connectTimeoutMs:e.connectTimeoutMs??nor,heartbeatIntervalMs:e.heartbeatIntervalMs??ror,restartAttempts:e.restartAttempts??ior,healthProbeTimeoutMs:e.healthProbeTimeoutMs??sor,healthRetryInitialDelayMs:e.healthRetryInitialDelayMs??oor,healthRetryMaxDelayMs:e.healthRetryMaxDelayMs??aor}}async connect(){if(this.#u)return this.#u;let e=Date.now()+this.#e.connectTimeoutMs,t=await(await this.#e.container()).getWorkspaceContainer(),n=await t.exitInfo().catch(()=>null),r={PORT:String(this.#e.containerPort),MOUNT_POINT:"/workspace",...this.#e.containerEnv},i,s;try{({runtimeId:i,clientSecret:s}=await t.start({env:r,enableInternet:this.#n.mode==="direct"}))}catch(p){throw new ku(this.#h("start",{attempt:1,maxAttempts:this.#e.restartAttempts+1,restarts:0,lastError:p,priorExit:n}),{cause:p})}try{await t.interceptOutboundHttp(this.#e.egressHost,this.#e.workspace),this.#n.mode==="http-gateway"&&this.#r!==void 0&&await t.interceptAllOutboundHttp(this.#e.workspace,this.#r)}catch(p){throw new ku(this.#h("egress",{attempt:1,maxAttempts:this.#e.restartAttempts+1,restarts:0,lastError:p,priorExit:n}),{cause:p})}this.#t=s,this.#l(),i=await this.#p(t,r,e,n,i),await this.#c(t,e),await this.#m(t,e,s);let o=await this.#d(e),l=XY(o),c,u=new Promise(p=>{let h=!1,f=a(()=>{h||(h=!0,c?.(),p(),this.#u=void 0)},"onClose");o.addEventListener("close",f,{once:!0}),o.addEventListener("error",f,{once:!0}),l.onRpcBroken(f)});this.#e.heartbeatIntervalMs>0&&(c=Zsr({intervalMs:this.#e.heartbeatIntervalMs,ping:a(()=>l.sync.watermarks(),"ping"),onFailure:a(()=>{try{o.close()}catch{}},"onFailure")}));let d={rpc:l,runtimeId:i,closed:u,close:a(async()=>{c?.();try{l[Symbol.dispose]?.()}catch{}try{o.close()}catch{}this.#u=void 0},"close")};return this.#u=d,d}async handleFetch(e){if(this.#n.mode==="http-gateway"&&this.#r!==void 0&&e.headers.get("x-workspace-egress-token")===this.#r){let i=new Headers(e.headers),s=i.get(tI),o;try{o=new URL(s??"")}catch{return new Response("invalid egress URL",{status:400})}if(o.protocol!=="http:"&&o.protocol!=="https:")return new Response("invalid egress URL",{status:400});i.delete(oD),i.delete(tI);let l=new Request(e,{headers:i});return this.#n.gateway.fetch(new Request(o,l))}if(new URL(e.url).pathname!==VAe)return new Response("not found",{status:404});if(e.headers.get("upgrade")!=="websocket")return new Response(`${VAe} requires a websocket upgrade`,{status:400});if(!lor(e.headers.get("authorization"),this.#t))return new Response("unauthorized",{status:401,headers:{"www-authenticate":"Bearer"}});let t=new WebSocketPair,[n,r]=[t[0],t[1]];if(r.accept(),this.#s)this.#s(r);else return r.close(1011,"no pending connect"),new Response("no pending connect",{status:409});return new Response(null,{status:101,webSocket:n})}#l(){this.#i=new Promise((e,t)=>{this.#s=e,this.#a=t}),this.#i.catch(()=>{})}#o(){this.#i=void 0,this.#s=void 0,this.#a=void 0}async#p(e,t,n,r,i){let s=this.#e.restartAttempts+1,o=Math.max(0,n-Date.now()),l=Math.max(250,Math.floor(o/s)),c=0,u=0,d,p=i;for(;c<s;){c++;let h=Math.min(n,Date.now()+l);if(await this.#f(e,h).then(()=>!0,f=>(d=f,!1)))return p;if(c<s)try{({runtimeId:p}=await e.restart({env:t,enableInternet:this.#n.mode==="direct"})),u++}catch(f){throw this.#a?.(f),this.#o(),new ku(this.#h("restart",{attempt:c,maxAttempts:s,restarts:u,lastError:f}),{cause:f})}}throw this.#a?.(new Error("computerd never became healthy")),this.#o(),new ku(this.#h("health",{attempt:c,maxAttempts:s,restarts:u,lastError:d,priorExit:r}),d instanceof Error?{cause:d}:void 0)}async#f(e,t){let n=this.#e.healthRetryInitialDelayMs,r;for(;Date.now()<t;)try{await Xsr(e,{port:this.#e.containerPort,path:"/health",timeoutMs:Math.min(this.#e.healthProbeTimeoutMs,Math.max(50,t-Date.now()))});return}catch(i){r=i;let s=t-Date.now();if(s<=0)break;await cor(Math.min(n,s)),n=Math.min(n*2,this.#e.healthRetryMaxDelayMs)}throw r??new Error("computerd health probe timed out")}#h(e,t){let n=t.priorExit?` priorExit=${JSON.stringify(t.priorExit.reason)}`:"";return`CloudflareContainerBackend(${this.id}): connect failed at stage=${e} port=${this.#e.containerPort} attempt=${t.attempt}/${t.maxAttempts} restarts=${t.restarts} timeoutMs=${this.#e.connectTimeoutMs}${n} lastError=${Ikt(t.lastError)}`}async#c(e,t){let n;try{let r=await e.fetchPort(this.#e.containerPort,"http://container/api",{signal:AbortSignal.timeout(Math.min(this.#e.healthProbeTimeoutMs,Math.max(50,t-Date.now())))});n=r.status,await r.text().catch(()=>"")}catch{return}if(n!==401)throw this.#a?.(new Error("container is not enforcing RPC_CLIENT_SECRET")),this.#o(),new ku(`CloudflareContainerBackend(${this.id}) [stage=auth]: container served an unauthenticated request to /api with ${n}, so this workspace would run without authorization. A container or image predating RPC_CLIENT_SECRET has to be recycled.`)}async#m(e,t,n){let r=Math.max(0,t-Date.now()),i;try{i=await e.fetchPort(this.#e.containerPort,"http://container/connect",{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${n}`},body:JSON.stringify({base:`http://${this.#e.egressHost}`,health:eor,api:VAe,healthTimeoutMs:r})})}catch(s){throw this.#a?.(s),this.#o(),new ku(`CloudflareContainerBackend(${this.id}) [stage=connect]: POST /connect failed: ${Ikt(s)}`,{cause:s})}if(!i.ok){let s=await i.text().catch(()=>""),o=new Error(`/connect ${i.status}`);throw this.#a?.(o),this.#o(),new ku(`CloudflareContainerBackend(${this.id}) [stage=connect]: POST /connect returned ${i.status}: ${s}`,{cause:o})}}async#d(e){let t=this.#i;if(!t)throw new Error("CloudflareContainerBackend: upgrade promise missing");let n=Math.max(0,e-Date.now()),r;try{return await Promise.race([t,new Promise((i,s)=>{r=setTimeout(()=>s(new ku(`CloudflareContainerBackend(${this.id}) [stage=ws]: /api upgrade did not arrive within ${this.#e.connectTimeoutMs}ms`)),n)})])}finally{r&&clearTimeout(r),this.#o()}}};function cor(e){return new Promise(t=>setTimeout(t,e))}a(cor,"sleep");function Ikt(e){return e instanceof Error?e.message:String(e)}a(Ikt,"describeError");var Rkt="computer:container-client-secret",uor=16;function dor(){let e=crypto.getRandomValues(new Uint8Array(uor));return Array.from(e,t=>t.toString(16).padStart(2,"0")).join("")}a(dor,"generate");var por=class{static{a(this,"ContainerClientSecret")}storage;constructor(e){this.storage=e}async ensure(){let e=await this.storage.get(Rkt);if(typeof e=="string"&&e.length>0)return e;let t=dor();return await this.storage.put(Rkt,t),t}},Ckt="computer:container-launch-record";async function Pkt(e){return{enableInternet:e.enableInternet,envDigest:await mor(e.env)}}a(Pkt,"launchRecordFor");function hor(e,t){return e.enableInternet===t.enableInternet&&e.envDigest===t.envDigest}a(hor,"sameLaunch");async function mor(e){let t=Object.keys(e).sort().map(r=>`${r.length}:${r}=${e[r]?.length??0}:${e[r]??""}`).join(";"),n=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(t));return Array.from(new Uint8Array(n),r=>r.toString(16).padStart(2,"0")).join("")}a(mor,"digestEnv");var gor=class{static{a(this,"CurrentContainerLaunchRecord")}storage;constructor(e){this.storage=e}async get(){return await this.storage.get(Ckt)??null}async set(e){await this.storage.put(Ckt,e)}},Okt=new WeakMap;function JAe(e){let t=Okt.get(e);return t===void 0&&(t={exit:null,currentGeneration:0,expectedExitGeneration:null,currentMonitorSettled:null},Okt.set(e,t)),t}a(JAe,"getContainerLifecycle");function fX(e){return JAe(e).exit}a(fX,"containerExitInfo");function Mkt(e){return e===void 0?"exited normally":e instanceof Error?e.message:String(e)}a(Mkt,"formatExitReason");function Nkt(e,t,n){let r=JAe(e);r.currentGeneration+=1;let i=r.currentGeneration;r.exit=null,r.currentMonitorSettled=t.monitor().then(()=>Dkt(r,i,void 0,n),s=>Dkt(r,i,s,n))}a(Nkt,"installContainerMonitor");async function KAe(e,t){let n=JAe(e);n.expectedExitGeneration=n.currentGeneration;let r=n.currentMonitorSettled;await t.destroy(),r&&await r}a(KAe,"destroyContainerExpectingExit");async function Dkt(e,t,n,r){if(t!==e.currentGeneration)return;let i=e.expectedExitGeneration===t;i&&(e.expectedExitGeneration=null);let s=Mkt(n),o=Date.now();e.exit={reason:s,exitedAt:o},i?console.info({message:"workspace.container.exited",reason:s,exitedAt:o,expected:!0}):console.warn({message:"workspace.container.exited",reason:s,exitedAt:o,expected:!1});try{await r?.()}catch(l){console.error({message:"workspace.container.exit_cleanup_failed",reason:Mkt(l),exitedAt:Date.now()})}}a(Dkt,"recordExit");var QAe="computer:container-runtime-identity",yor=class{static{a(this,"CurrentContainerRuntimeIdentity")}storage;constructor(e){this.storage=e}async get(){return await this.storage.get(QAe)??null}async markStarted(){let e={id:crypto.randomUUID()};return await this.storage.put(QAe,e),e}async clear(e){(await this.get())?.id===e.id&&await this.storage.delete(QAe)}},vor=class extends Jsr{static{a(this,"WorkspaceContainerAPI")}#e;#n;#r;#t;#i;constructor(e){if(super(),!e.container)throw new Error("WorkspaceContainerAPI: DO is not container-enabled (check wrangler.jsonc)");this.#e=e.container,this.#n=e,this.#r=new yor(e.storage),this.#t=new por(e.storage),this.#i=new gor(e.storage)}async start(e){let t=fX(this.#n),n=await this.#t.ensure(),r=await Pkt(e);if(t!==null){try{await KAe(this.#n,this.#e)}catch{}return this.#s(e,n,r,"launched")}if(!this.#e.running)return this.#s(e,n,r,"launched");let i=await this.#i.get();if(i===null||!hor(i,r)){console.warn({message:i===null?"container was started outside WorkspaceContainerAPI; relaunching so the requested environment applies":"running container was launched with a different spec; relaunching",component:"workspace-container",requested:r,actual:i});try{await KAe(this.#n,this.#e)}catch{}return this.#s(e,n,r,"relaunched")}let s=await this.#r.get()??await this.#r.markStarted();return Nkt(this.#n,this.#e,()=>this.#r.clear(s)),{runtimeId:s.id,clientSecret:n,outcome:"adopted"}}async restart(e){try{await KAe(this.#n,this.#e)}catch{}let t=await this.#t.ensure();return this.#s(e,t,await Pkt(e),"launched")}async setInactivityTimeout(e){await this.#e.setInactivityTimeout(e)}async#s(e,t,n,r){let i=await this.#r.markStarted();try{this.#e.start({enableInternet:e.enableInternet,env:{...e.env,RPC_CLIENT_SECRET:t}})}catch(s){throw await this.#r.clear(i),s}return await this.#i.set(n),Nkt(this.#n,this.#e,()=>this.#r.clear(i)),{runtimeId:i.id,clientSecret:t,outcome:r}}async status(){return{running:this.#e.running,exit:fX(this.#n)}}async exitInfo(){return fX(this.#n)}async interceptAllOutboundHttp(e,t){let n=this.#n.exports.WorkspaceProxy({props:{...e,egressToken:t}});await Promise.all([this.#e.interceptAllOutboundHttp(n),this.#e.interceptOutboundHttps("*",n)])}async interceptOutboundHttp(e,t){let n=this.#n.exports;await this.#e.interceptOutboundHttp(e,n.WorkspaceProxy({props:t}))}fetchPort(e,t,n){let r=fX(this.#n);if(r!==null)throw new ku(`container exited: ${r.reason}`);return this.#e.getTcpPort(e).fetch(t,n)}port(e){return this.#e.getTcpPort(e)}};function $kt(e){class t extends e{static{a(this,"WithWorkspaceContainer")}getWorkspaceContainer(){return new vor(this.ctx)}}return t}a($kt,"withWorkspaceContainer");var xor={session:"sessions",skill:"skills",agentPreset:"agentPresets",subagent:"subagents",goal:"goals",event:"events",download:"downloads"};function jkt(e,t){let n=t.indexOf("."),r=t.indexOf("/"),i=n>=0?n:r;if(i<0)return;let s=t.slice(0,i),o=t.slice(i+1),l=xor[s]??s,c=e[l];if(c===void 0)return;let u=c[o];return typeof u=="function"?u:void 0}a(jkt,"resolve");function bor(e,t){return Response.json({type:"server-response",rpcId:e,result:{ok:!1,error:t}})}a(bor,"errorResponse");async function ZAe(e,t,n,r,i){let s=jkt(e,t);if(s!==void 0)return await s({rpcId:n,payload:r},i)}a(ZAe,"callEdgeApi");async function Fkt(e,t){let r=new URL(t.url).pathname;if(t.method!=="POST"||!r.startsWith("/api/"))return new Response("not found",{status:404});if(r==="/api/respond")return Response.json({accepted:!1,reason:"not-pending"});let i=r.slice(5);if(jkt(e,i)===void 0)return new Response("not found",{status:404});let s;try{s=await t.json()}catch{return new Response("body is not JSON",{status:400})}let o=typeof s.rpcId=="string"?s.rpcId:"invalid-request",l=s.payload??{};try{let c=await ZAe(e,i,o,l,t.signal);return c===void 0?new Response("not found",{status:404}):Response.json({type:"server-response",rpcId:c.rpcId,result:c.result})}catch(c){return bor(o,{code:"internal",message:String(c),details:{}})}}a(Fkt,"dispatchEdgeApi");Dr();lo();B2();import{DurableObject as vgr}from"cloudflare:workers";var gX=class{constructor(t,n=Date.now,r=2){this.sleepAfterMs=t;this.now=n;this.maxConcurrent=r}sleepAfterMs;now;maxConcurrent;static{a(this,"ContainerActivity")}inFlight=0;lastActivity;stopping;waiters=[];async admit(t){let n=this.now();for(;this.stopping!==void 0||this.inFlight>=this.maxConcurrent;){if(t?.throwIfAborted(),this.stopping!==void 0){await wor(this.stopping,t);continue}await new Promise((r,i)=>{let s=a(()=>{t?.removeEventListener("abort",o),r()},"wake"),o=a(()=>{let l=this.waiters.indexOf(s);l!==-1&&this.waiters.splice(l,1),i(t.reason)},"abort");this.waiters.push(s),t?.addEventListener("abort",o,{once:!0})})}return t?.aborted===!0&&(this.waiters.shift()?.(),t.throwIfAborted()),{release:this.begin(),queuedMs:this.now()-n}}begin(){this.inFlight+=1,this.lastActivity=this.now();let t=!1;return()=>{t||(t=!0,this.inFlight-=1,this.lastActivity=this.now(),this.waiters.shift()?.())}}async stopIfIdle(t){return this.idle()?await this.stop(t):"busy"}async stopNow(t){return this.inFlight===0?await this.stop(t):"busy"}snapshot(){return{runningCommands:this.inFlight,lastActivityAt:this.lastActivity??null}}async stop(t){if(this.stopping!==void 0)return"busy";let n="stopped",r=t().catch(i=>{n="failed",this.lastActivity=this.now(),console.error("dsh-edge container stop failed.",i)});this.stopping=r;try{await r}finally{this.stopping=void 0}return n}deadline(){return this.inFlight>0?this.now()+this.sleepAfterMs():this.lastActivity===void 0?this.now():this.lastActivity+this.sleepAfterMs()}idle(){return this.inFlight===0&&(this.lastActivity===void 0||this.now()>=this.lastActivity+this.sleepAfterMs())}};function wor(e,t){return t===void 0?e:new Promise((n,r)=>{let i=a(()=>r(t.reason),"abort");t.addEventListener("abort",i,{once:!0}),e.then(n,r).finally(()=>t.removeEventListener("abort",i))})}a(wor,"untilAborted");import{WorkerEntrypoint as Gzi}from"cloudflare:workers";var wS=Ml(Ukt(),1);import{gunzipSync as Glr}from"node:zlib";var fN=class{static{a(this,"Diff")}diff(t,n,r={}){let i;typeof r=="function"?(i=r,r={}):"callback"in r&&(i=r.callback);let s=this.castInput(t,r),o=this.castInput(n,r),l=this.removeEmpty(this.tokenize(s,r)),c=this.removeEmpty(this.tokenize(o,r));return this.diffWithOptionsObj(l,c,r,i)}diffWithOptionsObj(t,n,r,i){var s;let o=a(b=>{if(b=this.postProcess(b,r),i){setTimeout(function(){i(b)},0);return}else return b},"done"),l=n.length,c=t.length,u=1,d=l+c;r.maxEditLength!=null&&(d=Math.min(d,r.maxEditLength));let p=(s=r.timeout)!==null&&s!==void 0?s:1/0,h=Date.now()+p,f=[{oldPos:-1,lastComponent:void 0}],g=this.extractCommon(f[0],n,t,0,r);if(f[0].oldPos+1>=c&&g+1>=l)return o(this.buildValues(f[0].lastComponent,n,t));let y=-1/0,v=1/0,x=a(()=>{for(let b=Math.max(y,-u);b<=Math.min(v,u);b+=2){let _,k=f[b-1],T=f[b+1];k&&(f[b-1]=void 0);let A=!1;if(T){let M=T.oldPos-b;A=T&&0<=M&&M<l}let R=k&&k.oldPos+1<c;if(!A&&!R){f[b]=void 0;continue}if(!R||A&&k.oldPos<T.oldPos?_=this.addToPath(T,!0,!1,0,r):_=this.addToPath(k,!1,!0,1,r),g=this.extractCommon(_,n,t,b,r),_.oldPos+1>=c&&g+1>=l)return o(this.buildValues(_.lastComponent,n,t))||!0;f[b]=_,_.oldPos+1>=c&&(v=Math.min(v,b-1)),g+1>=l&&(y=Math.max(y,b+1))}u++},"execEditLength");if(i)a(function b(){setTimeout(function(){if(u>d||Date.now()>h)return i(void 0);x()||b()},0)},"exec")();else for(;u<=d&&Date.now()<=h;){let b=x();if(b)return b}}addToPath(t,n,r,i,s){let o=t.lastComponent;return o&&!s.oneChangePerToken&&o.added===n&&o.removed===r?{oldPos:t.oldPos+i,lastComponent:{count:o.count+1,added:n,removed:r,previousComponent:o.previousComponent}}:{oldPos:t.oldPos+i,lastComponent:{count:1,added:n,removed:r,previousComponent:o}}}extractCommon(t,n,r,i,s){let o=n.length,l=r.length,c=t.oldPos,u=c-i,d=0;for(;u+1<o&&c+1<l&&this.equals(r[c+1],n[u+1],s);)u++,c++,d++,s.oneChangePerToken&&(t.lastComponent={count:1,previousComponent:t.lastComponent,added:!1,removed:!1});return d&&!s.oneChangePerToken&&(t.lastComponent={count:d,previousComponent:t.lastComponent,added:!1,removed:!1}),t.oldPos=c,u}equals(t,n,r){return r.comparator?r.comparator(t,n):t===n||!!r.ignoreCase&&t.toLowerCase()===n.toLowerCase()}removeEmpty(t){let n=[];for(let r=0;r<t.length;r++)t[r]&&n.push(t[r]);return n}castInput(t,n){return t}tokenize(t,n){return Array.from(t)}join(t){return t.join("")}postProcess(t,n){return t}get useLongestToken(){return!1}buildValues(t,n,r){let i=[],s;for(;t;)i.push(t),s=t.previousComponent,delete t.previousComponent,t=s;i.reverse();let o=i.length,l=0,c=0,u=0;for(;l<o;l++){let d=i[l];if(d.removed)d.value=this.join(r.slice(u,u+d.count)),u+=d.count;else{if(!d.added&&this.useLongestToken){let p=n.slice(c,c+d.count);p=p.map(function(h,f){let g=r[u+f];return g.length>h.length?g:h}),d.value=this.join(p)}else d.value=this.join(n.slice(c,c+d.count));c+=d.count,d.added||(u+=d.count)}}return i}};var XAe=class extends fN{static{a(this,"LineDiff")}constructor(){super(...arguments),this.tokenize=Sor}equals(t,n,r){return r.ignoreWhitespace?((!r.newlineIsToken||!t.includes(`
7231
7231
  `))&&(t=t.trim()),(!r.newlineIsToken||!n.includes(`
7232
7232
  `))&&(n=n.trim())):r.ignoreNewlineAtEof&&!r.newlineIsToken&&(t.endsWith(`
7233
7233
  `)&&(t=t.slice(0,-1)),n.endsWith(`