dsh-edge 0.28.0-alpha.1 → 0.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
package/worker/direct/index.js
CHANGED
|
@@ -164,7 +164,7 @@ Known schemas:
|
|
|
164
164
|
- `)}`,new Error(at)}let Nt=`${c}/$ref`,vt=ha(e,Ke,n,r,i,s,o,Nt,l);if(vt.valid||Me.push({instanceLocation:o,keyword:"$ref",keywordLocation:Nt,error:"A subschema had errors."},...vt.errors),n==="4"||n==="7")return{valid:Me.length===0,errors:Me}}if(Array.isArray(f)){let tt=f.length,Ke=!1;for(let Nt=0;Nt<tt;Nt++)if(d===f[Nt]||f[Nt]==="integer"&&d==="number"&&e%1===0&&e===e){Ke=!0;break}Ke||Me.push({instanceLocation:o,keyword:"type",keywordLocation:`${c}/type`,error:`Instance type "${d}" is invalid. Expected "${f.join('", "')}".`})}else f==="integer"?(d!=="number"||e%1||e!==e)&&Me.push({instanceLocation:o,keyword:"type",keywordLocation:`${c}/type`,error:`Instance type "${d}" is invalid. Expected "${f}".`}):f!==void 0&&d!==f&&Me.push({instanceLocation:o,keyword:"type",keywordLocation:`${c}/type`,error:`Instance type "${d}" is invalid. Expected "${f}".`});if(g!==void 0&&(d==="object"||d==="array"?EI(e,g)||Me.push({instanceLocation:o,keyword:"const",keywordLocation:`${c}/const`,error:`Instance does not match ${JSON.stringify(g)}.`}):e!==g&&Me.push({instanceLocation:o,keyword:"const",keywordLocation:`${c}/const`,error:`Instance does not match ${JSON.stringify(g)}.`})),v!==void 0&&(d==="object"||d==="array"?v.some(tt=>EI(e,tt))||Me.push({instanceLocation:o,keyword:"enum",keywordLocation:`${c}/enum`,error:`Instance does not match any of ${JSON.stringify(v)}.`}):v.some(tt=>e===tt)||Me.push({instanceLocation:o,keyword:"enum",keywordLocation:`${c}/enum`,error:`Instance does not match any of ${JSON.stringify(v)}.`})),b!==void 0){let tt=`${c}/not`;ha(e,b,n,r,i,s,o,tt).valid&&Me.push({instanceLocation:o,keyword:"not",keywordLocation:tt,error:'Instance matched "not" schema.'})}let _t=[];if(w!==void 0){let tt=`${c}/anyOf`,Ke=Me.length,Nt=!1;for(let vt=0;vt<w.length;vt++){let at=w[vt],Ot=Object.create(l),qe=ha(e,at,n,r,i,m===!0?s:null,o,`${tt}/${vt}`,Ot);Me.push(...qe.errors),Nt=Nt||qe.valid,qe.valid&&_t.push(Ot)}Nt?Me.length=Ke:Me.splice(Ke,0,{instanceLocation:o,keyword:"anyOf",keywordLocation:tt,error:"Instance does not match any subschemas."})}if(k!==void 0){let tt=`${c}/allOf`,Ke=Me.length,Nt=!0;for(let vt=0;vt<k.length;vt++){let at=k[vt],Ot=Object.create(l),qe=ha(e,at,n,r,i,m===!0?s:null,o,`${tt}/${vt}`,Ot);Me.push(...qe.errors),Nt=Nt&&qe.valid,qe.valid&&_t.push(Ot)}Nt?Me.length=Ke:Me.splice(Ke,0,{instanceLocation:o,keyword:"allOf",keywordLocation:tt,error:"Instance does not match every subschema."})}if(E!==void 0){let tt=`${c}/oneOf`,Ke=Me.length,Nt=E.filter((vt,at)=>{let Ot=Object.create(l),qe=ha(e,vt,n,r,i,m===!0?s:null,o,`${tt}/${at}`,Ot);return Me.push(...qe.errors),qe.valid&&_t.push(Ot),qe.valid}).length;Nt===1?Me.length=Ke:Me.splice(Ke,0,{instanceLocation:o,keyword:"oneOf",keywordLocation:tt,error:`Instance does not match exactly one subschema (${Nt} matches).`})}if((d==="object"||d==="array")&&Object.assign(l,..._t),A!==void 0){let tt=`${c}/if`;if(ha(e,A,n,r,i,s,o,tt,l).valid){if(I!==void 0){let Nt=ha(e,I,n,r,i,s,o,`${c}/then`,l);Nt.valid||Me.push({instanceLocation:o,keyword:"if",keywordLocation:tt,error:'Instance does not match "then" schema.'},...Nt.errors)}}else if(O!==void 0){let Nt=ha(e,O,n,r,i,s,o,`${c}/else`,l);Nt.valid||Me.push({instanceLocation:o,keyword:"if",keywordLocation:tt,error:'Instance does not match "else" schema.'},...Nt.errors)}}if(d==="object"){if(x!==void 0)for(let vt of x)vt in e||Me.push({instanceLocation:o,keyword:"required",keywordLocation:`${c}/required`,error:`Instance does not have required property "${vt}".`});let tt=Object.keys(e);if(R!==void 0&&tt.length<R&&Me.push({instanceLocation:o,keyword:"minProperties",keywordLocation:`${c}/minProperties`,error:`Instance does not have at least ${R} properties.`}),B!==void 0&&tt.length>B&&Me.push({instanceLocation:o,keyword:"maxProperties",keywordLocation:`${c}/maxProperties`,error:`Instance does not have at least ${B} properties.`}),C!==void 0){let vt=`${c}/propertyNames`;for(let at in e){let Ot=`${o}/${fh(at)}`,qe=ha(at,C,n,r,i,s,Ot,vt);qe.valid||Me.push({instanceLocation:o,keyword:"propertyNames",keywordLocation:vt,error:`Property name "${at}" does not match schema.`},...qe.errors)}}if(N!==void 0){let vt=`${c}/dependantRequired`;for(let at in N)if(at in e){let Ot=N[at];for(let qe of Ot)qe in e||Me.push({instanceLocation:o,keyword:"dependentRequired",keywordLocation:vt,error:`Instance has "${at}" but does not have "${qe}".`})}}if(F!==void 0)for(let vt in F){let at=`${c}/dependentSchemas`;if(vt in e){let Ot=ha(e,F[vt],n,r,i,s,o,`${at}/${fh(vt)}`,l);Ot.valid||Me.push({instanceLocation:o,keyword:"dependentSchemas",keywordLocation:at,error:`Instance has "${vt}" but does not match dependant schema.`},...Ot.errors)}}if(L!==void 0){let vt=`${c}/dependencies`;for(let at in L)if(at in e){let Ot=L[at];if(Array.isArray(Ot))for(let qe of Ot)qe in e||Me.push({instanceLocation:o,keyword:"dependencies",keywordLocation:vt,error:`Instance has "${at}" but does not have "${qe}".`});else{let qe=ha(e,Ot,n,r,i,s,o,`${vt}/${fh(at)}`);qe.valid||Me.push({instanceLocation:o,keyword:"dependencies",keywordLocation:vt,error:`Instance has "${at}" but does not match dependant schema.`},...qe.errors)}}}let Ke=Object.create(null),Nt=!1;if($!==void 0){let vt=`${c}/properties`;for(let at in $){if(!(at in e))continue;let Ot=`${o}/${fh(at)}`,qe=ha(e[at],$[at],n,r,i,s,Ot,`${vt}/${fh(at)}`);if(qe.valid)l[at]=Ke[at]=!0;else if(Nt=i,Me.push({instanceLocation:o,keyword:"properties",keywordLocation:vt,error:`Property "${at}" does not match schema.`},...qe.errors),Nt)break}}if(!Nt&&D!==void 0){let vt=`${c}/patternProperties`;for(let at in D){let Ot=new RegExp(at,"u"),qe=D[at];for(let Bt in e){if(!Ot.test(Bt))continue;let gn=`${o}/${fh(Bt)}`,It=ha(e[Bt],qe,n,r,i,s,gn,`${vt}/${fh(at)}`);It.valid?l[Bt]=Ke[Bt]=!0:(Nt=i,Me.push({instanceLocation:o,keyword:"patternProperties",keywordLocation:vt,error:`Property "${Bt}" matches pattern "${at}" but does not match associated schema.`},...It.errors))}}}if(!Nt&&W!==void 0){let vt=`${c}/additionalProperties`;for(let at in e){if(Ke[at])continue;let Ot=`${o}/${fh(at)}`,qe=ha(e[at],W,n,r,i,s,Ot,vt);qe.valid?l[at]=!0:(Nt=i,Me.push({instanceLocation:o,keyword:"additionalProperties",keywordLocation:vt,error:`Property "${at}" does not match additional properties schema.`},...qe.errors))}}else if(!Nt&&ee!==void 0){let vt=`${c}/unevaluatedProperties`;for(let at in e)if(!l[at]){let Ot=`${o}/${fh(at)}`,qe=ha(e[at],ee,n,r,i,s,Ot,vt);qe.valid?l[at]=!0:Me.push({instanceLocation:o,keyword:"unevaluatedProperties",keywordLocation:vt,error:`Property "${at}" does not match unevaluated properties schema.`},...qe.errors)}}}else if(d==="array"){de!==void 0&&e.length>de&&Me.push({instanceLocation:o,keyword:"maxItems",keywordLocation:`${c}/maxItems`,error:`Array has too many items (${e.length} > ${de}).`}),ye!==void 0&&e.length<ye&&Me.push({instanceLocation:o,keyword:"minItems",keywordLocation:`${c}/minItems`,error:`Array has too few items (${e.length} < ${ye}).`});let tt=e.length,Ke=0,Nt=!1;if(U!==void 0){let vt=`${c}/prefixItems`,at=Math.min(U.length,tt);for(;Ke<at;Ke++){let Ot=ha(e[Ke],U[Ke],n,r,i,s,`${o}/${Ke}`,`${vt}/${Ke}`);if(l[Ke]=!0,!Ot.valid&&(Nt=i,Me.push({instanceLocation:o,keyword:"prefixItems",keywordLocation:vt,error:"Items did not match schema."},...Ot.errors),Nt))break}}if(K!==void 0){let vt=`${c}/items`;if(Array.isArray(K)){let at=Math.min(K.length,tt);for(;Ke<at;Ke++){let Ot=ha(e[Ke],K[Ke],n,r,i,s,`${o}/${Ke}`,`${vt}/${Ke}`);if(l[Ke]=!0,!Ot.valid&&(Nt=i,Me.push({instanceLocation:o,keyword:"items",keywordLocation:vt,error:"Items did not match schema."},...Ot.errors),Nt))break}}else for(;Ke<tt;Ke++){let at=ha(e[Ke],K,n,r,i,s,`${o}/${Ke}`,vt);if(l[Ke]=!0,!at.valid&&(Nt=i,Me.push({instanceLocation:o,keyword:"items",keywordLocation:vt,error:"Items did not match schema."},...at.errors),Nt))break}if(!Nt&&Z!==void 0){let at=`${c}/additionalItems`;for(;Ke<tt;Ke++){let Ot=ha(e[Ke],Z,n,r,i,s,`${o}/${Ke}`,at);l[Ke]=!0,Ot.valid||(Nt=i,Me.push({instanceLocation:o,keyword:"additionalItems",keywordLocation:at,error:"Items did not match additional items schema."},...Ot.errors))}}}if(V!==void 0)if(tt===0&&oe===void 0)Me.push({instanceLocation:o,keyword:"contains",keywordLocation:`${c}/contains`,error:"Array is empty. It must contain at least one item matching the schema."});else if(oe!==void 0&&tt<oe)Me.push({instanceLocation:o,keyword:"minContains",keywordLocation:`${c}/minContains`,error:`Array has less items (${tt}) than minContains (${oe}).`});else{let vt=`${c}/contains`,at=Me.length,Ot=0;for(let qe=0;qe<tt;qe++){let Bt=ha(e[qe],V,n,r,i,s,`${o}/${qe}`,vt);Bt.valid?(l[qe]=!0,Ot++):Me.push(...Bt.errors)}Ot>=(oe||0)&&(Me.length=at),oe===void 0&&we===void 0&&Ot===0?Me.splice(at,0,{instanceLocation:o,keyword:"contains",keywordLocation:vt,error:"Array does not contain item matching schema."}):oe!==void 0&&Ot<oe?Me.push({instanceLocation:o,keyword:"minContains",keywordLocation:`${c}/minContains`,error:`Array must contain at least ${oe} items matching schema. Only ${Ot} items were found.`}):we!==void 0&&Ot>we&&Me.push({instanceLocation:o,keyword:"maxContains",keywordLocation:`${c}/maxContains`,error:`Array may contain at most ${we} items matching schema. ${Ot} items were found.`})}if(!Nt&&ne!==void 0){let vt=`${c}/unevaluatedItems`;for(Ke;Ke<tt;Ke++){if(l[Ke])continue;let at=ha(e[Ke],ne,n,r,i,s,`${o}/${Ke}`,vt);l[Ke]=!0,at.valid||Me.push({instanceLocation:o,keyword:"unevaluatedItems",keywordLocation:vt,error:"Items did not match unevaluated items schema."},...at.errors)}}if(Ae)for(let vt=0;vt<tt;vt++){let at=e[vt],Ot=typeof at=="object"&&at!==null;for(let qe=0;qe<tt;qe++){if(vt===qe)continue;let Bt=e[qe];(at===Bt||Ot&&(typeof Bt=="object"&&Bt!==null)&&EI(at,Bt))&&(Me.push({instanceLocation:o,keyword:"uniqueItems",keywordLocation:`${c}/uniqueItems`,error:`Duplicate items at indexes ${vt} and ${qe}.`}),vt=Number.MAX_SAFE_INTEGER,qe=Number.MAX_SAFE_INTEGER)}}}else if(d==="number"){if(n==="4"?(Re!==void 0&&(pe===!0&&e<=Re||e<Re)&&Me.push({instanceLocation:o,keyword:"minimum",keywordLocation:`${c}/minimum`,error:`${e} is less than ${pe?"or equal to ":""} ${Re}.`}),me!==void 0&&(et===!0&&e>=me||e>me)&&Me.push({instanceLocation:o,keyword:"maximum",keywordLocation:`${c}/maximum`,error:`${e} is greater than ${et?"or equal to ":""} ${me}.`})):(Re!==void 0&&e<Re&&Me.push({instanceLocation:o,keyword:"minimum",keywordLocation:`${c}/minimum`,error:`${e} is less than ${Re}.`}),me!==void 0&&e>me&&Me.push({instanceLocation:o,keyword:"maximum",keywordLocation:`${c}/maximum`,error:`${e} is greater than ${me}.`}),pe!==void 0&&e<=pe&&Me.push({instanceLocation:o,keyword:"exclusiveMinimum",keywordLocation:`${c}/exclusiveMinimum`,error:`${e} is less than ${pe}.`}),et!==void 0&&e>=et&&Me.push({instanceLocation:o,keyword:"exclusiveMaximum",keywordLocation:`${c}/exclusiveMaximum`,error:`${e} is greater than or equal to ${et}.`})),Xe!==void 0){let tt=e%Xe;Math.abs(0-tt)>=11920929e-14&&Math.abs(Xe-tt)>=11920929e-14&&Me.push({instanceLocation:o,keyword:"multipleOf",keywordLocation:`${c}/multipleOf`,error:`${e} is not a multiple of ${Xe}.`})}}else if(d==="string"){let tt=gt===void 0&&Ue===void 0?0:vQe(e);gt!==void 0&&tt<gt&&Me.push({instanceLocation:o,keyword:"minLength",keywordLocation:`${c}/minLength`,error:`String is too short (${tt} < ${gt}).`}),Ue!==void 0&&tt>Ue&&Me.push({instanceLocation:o,keyword:"maxLength",keywordLocation:`${c}/maxLength`,error:`String is too long (${tt} > ${Ue}).`}),Oe!==void 0&&!new RegExp(Oe,"u").test(e)&&Me.push({instanceLocation:o,keyword:"pattern",keywordLocation:`${c}/pattern`,error:"String does not match pattern."}),M!==void 0&&k0e[M]&&!k0e[M](e)&&Me.push({instanceLocation:o,keyword:"format",keywordLocation:`${c}/format`,error:`String does not match format "${M}".`})}return{valid:Me.length===0,errors:Me}}var E0e=j(()=>{w0e();tB();S0e();eB();_0e();a(ha,"validate")});var nB,xQe=j(()=>{tB();E0e();nB=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=W1(t)}validate(t){return ha(t,this.schema,this.draft,this.lookup,this.shortCircuit)}addSchema(t,n){n&&(t={...t,$id:n}),W1(t,this.lookup)}}});var bQe=j(()=>{w0e();tB();S0e();eB();yQe();_0e();E0e();xQe()});var rB,wQe=j(()=>{bQe();rB=class{static{a(this,"CfWorkerJsonSchemaValidator")}constructor(t){this.shortcircuit=t?.shortcircuit??!0,this.draft=t?.draft??"2020-12"}getValidator(t){let n=new nB(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 cc,iB=j(()=>{"use strict";cc={probeTimeoutMs:3e4,callTimeoutMs:6e4,maxToolsPerServer:128,maxCatalogPages:10,maxCatalogBytes:131072,maxDescriptionLength:512,maxErrorMessageChars:300,maxPublicNameLength:64,maxInstructionsLength:1024,metaToolThreshold:20}});import{createHash as bln}from"node:crypto";function kln(e){let t=e.replace(/[.*+?^${}()|[\]\\]/gu,n=>n==="*"?"\0":`\\${n}`);return new RegExp(`^${t.replaceAll("\0",".*")}$`)}function kQe(e,t,n){let r=t??"read_only";return r==="allow_all"?"allow":r==="approve_all"?"ask":n===!0?"allow":n===!1?"ask":wln.some(i=>kln(i).test(e))?"allow":"ask"}function q0(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,cc.maxErrorMessageChars)}function SQe(e,t){let n=`mcp__${e}__${t}`,r=n.replace(/[^A-Za-z0-9_-]/gu,"_");if(r===n&&r.length<=cc.maxPublicNameLength)return r;let i=Sln(e,t),s=cc.maxPublicNameLength-i.length-1;return`${r.slice(0,s)}_${i}`}function Sln(e,t){return bln("sha256").update(`${e}\0${t}`).digest("hex").slice(0,12)}function _Qe(e){if(!(e==null||typeof e!="object"))try{let t=JSON.parse(JSON.stringify(e));return u2(t),t}catch{return}}function Tln(e){return _ln.has(e)}function EQe(e){return e.type!=="image"||e.data===void 0||e.mimeType===void 0||!Tln(e.mimeType)||!Eln.test(e.data)?void 0:{data:Uint8Array.from(atob(e.data),n=>n.charCodeAt(0)),mediaType:e.mimeType}}function TQe(e){return e.some(t=>t.type==="image"&&t.data!==void 0)}function hO(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(``);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 wln,_ln,Eln,sB=j(()=>{"use strict";Qo();iB();wln=["get_*","list_*","read_*","search_*","find_*","fetch_*","describe_*"];a(kln,"globToRegExp");a(kQe,"evaluateMcpToolPolicy");a(q0,"scrubMcpErrorMessage");a(SQe,"publicToolName");a(Sln,"hashSuffix");a(_Qe,"supportedOutputSchema");_ln=new Set(["image/png","image/jpeg"]),Eln=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/u;a(Tln,"isImageMediaType");a(EQe,"decodeImageBlock");a(TQe,"containsImage");a(hO,"mapMcpResultToContentBlocks")});var T0e,AQe=j(()=>{T0e={name:"dsh-edge",version:"0.28.0-alpha.1",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-file-upload":"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 pS,IQe,RQe,mO=j(()=>{"use strict";AQe();pS=T0e.version,IQe=T0e.dshEdge.upstreamVersion,RQe=`npx dsh-edge@${pS.includes("-")?"next":"latest"} upgrade`});function Pln(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 Oln(e){return/^\d+\.\d+\.\d+\.\d+$/u.test(e)||e.includes(":")}function B1(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 Iln)if(i.endsWith(s))throw new Error(`MCP server hostname "${i}" is blocked.`);if(Oln(i)){let s=Pln(i),o=s??i;for(let c of Rln)if(c.test(o))throw new Error(`MCP server address "${i}" is a private IP and is blocked.`);if(s===void 0){for(let c of Cln)if(c.test(i))throw new Error(`MCP server address "${i}" is a private IP and is blocked.`)}}}}function Mln(e){return e?.type==="bearer"&&e.token!==void 0?{Authorization:`Bearer ${e.token}`}:{}}async function CQe(e,t,n){B1(e);let r=new ZW(new URL(e),{requestInit:{headers:Mln(t),signal:n},fetch:hS}),i=new YW({name:"dsh-edge",version:pS},{capabilities:{},jsonSchemaValidator:Nln});return await i.connect(r),{client:i,close:a(async()=>{await i.close().catch(()=>{})},"close")}}async function PQe(e,t,n){let r=AbortSignal.timeout(cc.probeTimeoutMs),i;try{i=await CQe(t,n,r)}catch(c){throw new Error(q0(c instanceof Error?c.message:String(c)))}let{client:s,close:o}=i;try{let c=[],l=new Set,u=new Set,d;for(let m=0;m<cc.maxCatalogPages;m++){let f=await s.listTools(d===void 0?void 0:{cursor:d},{signal:r});for(let g of f.tools){if(c.length>=cc.maxToolsPerServer)break;let v=SQe(e,g.name);if(l.has(v))throw new Error(`Server listed tool "${g.name}" more than once`);l.add(v);let x=g.annotations?.readOnlyHint,b=_Qe(g.outputSchema);c.push({name:g.name,publicName:v,description:g.description??"",inputSchema:g.inputSchema??{type:"object"},...b!==void 0?{outputSchema:b}:{},...x!==void 0?{annotations:{readOnlyHint:x}}:{}})}if(c.length>=cc.maxToolsPerServer||(d=f.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:c,serverInfo:p?{name:p.name,version:p.version}:void 0,instructions:typeof h=="string"&&h.length>0?h.slice(0,cc.maxInstructionsLength):void 0}}finally{await o()}}async function oB(e,t,n,r,i,s){let o=s??cc.callTimeoutMs,c=i?AbortSignal.any([i,AbortSignal.timeout(o)]):AbortSignal.timeout(o),l;try{l=await CQe(e,r,c)}catch(u){throw new Error(q0(u instanceof Error?u.message:String(u)))}try{let u=await l.client.callTool({name:t,arguments:n},void 0,{signal:c});return{content:u.content??[],structuredContent:u.structuredContent,isError:u.isError===!0}}catch(u){throw new Error(q0(u instanceof Error?u.message:String(u)))}finally{await l.close()}}var Iln,Rln,Cln,Nln,hS,fO=j(()=>{"use strict";NKe();hQe();wQe();sB();iB();mO();Iln=[".internal",".local",".localhost"],Rln=[/^127\./u,/^10\./u,/^172\.(1[6-9]|2\d|3[01])\./u,/^192\.168\./u,/^0\./u,/^169\.254\./u],Cln=[/^::1$/u,/^fc/iu,/^fd/iu,/^fe[89ab][0-9a-f]:/iu];a(Pln,"extractMappedIPv4");a(Oln,"isIpAddress");a(B1,"assertSafeUrl");a(Mln,"buildHeaders");Nln=new rB,hS=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(CQe,"connectClient");a(PQe,"probe");a(oB,"callTool")});var cB={};Ft(cB,{buildAuthorizationUrl:()=>Bln,discoverEndpoints:()=>qln,exchangeCode:()=>zln,isTokenExpired:()=>Gln,refreshToken:()=>Hln,registerClient:()=>Wln});function LQe(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 jln(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 qln(e){let t=AbortSignal.timeout(aB),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);B1(i.href);let s=await hS(i.href,{signal:t});if(!s.ok)throw new Error(`PRM discovery failed: HTTP ${s.status}`);let c=(await s.json()).authorization_servers?.[0];if(typeof c!="string")throw new Error("No authorization server in PRM");let l=new URL(c),u=l.pathname==="/"?"/.well-known/oauth-authorization-server":`/.well-known/oauth-authorization-server${l.pathname}`,d=new URL(u,l.origin);B1(d.href);let p=await hS(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 Wln(e,t,n){let r=AbortSignal.timeout(aB);B1(e);let i=await hS(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 Bln(e,t,n,r,i){let s=LQe(32),o=LQe(64),c=await jln(o),l=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:c,code_challenge_method:"S256",resource:i}))l.searchParams.set(u,d);return{authorizationUrl:l.href,pendingFlow:{state:s,codeVerifier:o,redirectUri:n,serverName:r,serverUrl:i,stagedClient:t,createdAt:Date.now()}}}async function zln(e,t,n,r,i,s){let o=AbortSignal.timeout(aB),c=new URLSearchParams({grant_type:"authorization_code",code:n,redirect_uri:i,client_id:t.clientId,code_verifier:r});s!==void 0&&c.set("resource",s),t.clientSecret!==void 0&&c.set("client_secret",t.clientSecret),B1(e);let l=await hS(e,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:c.toString(),signal:o});if(!l.ok)throw new Error(`Token exchange failed: HTTP ${l.status}`);return DQe(await l.json())}async function Hln(e,t,n,r){let i=AbortSignal.timeout(aB),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),B1(e);let o=await hS(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 DQe(await o.json())}function DQe(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 Gln(e){return e.expiresAt===void 0?!1:Date.now()>e.expiresAt-12e4}var aB,lB=j(()=>{"use strict";fO();aB=1e4;a(LQe,"randomString");a(jln,"sha256Base64Url");a(qln,"discoverEndpoints");a(Wln,"registerClient");a(Bln,"buildAuthorizationUrl");a(zln,"exchangeCode");a(Hln,"refreshToken");a(DQe,"parseTokenResponse");a(Gln,"isTokenExpired")});var ur,zQe,TI=j(()=>{yr();jr();ur=class extends Di{static{a(this,"FsError")}code;constructor(e,t,n){super(e,t,n),this.code=t}},zQe=class extends $t{static{a(this,"FileSystem")}constructor(e){super(e,"fs")}watch(e,t,n){return n.throwIfAborted(),Promise.reject(new ur("Filesystem watching is not supported by this provider.","FS_IO_ERROR"))}get sandboxMode(){}processPathFromHostPath(e){}}});function bO(e){return bB.test(e)}function wB(e){return e.invocation.modelInvocable}function II(e){return e.invocation.userInvocable}function G0e(e){let t=Rdn(e);return[`<skill_content name="${Cdn(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 wln,_ln,Eln,sB=j(()=>{"use strict";Qo();iB();wln=["get_*","list_*","read_*","search_*","find_*","fetch_*","describe_*"];a(kln,"globToRegExp");a(kQe,"evaluateMcpToolPolicy");a(q0,"scrubMcpErrorMessage");a(SQe,"publicToolName");a(Sln,"hashSuffix");a(_Qe,"supportedOutputSchema");_ln=new Set(["image/png","image/jpeg"]),Eln=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/u;a(Tln,"isImageMediaType");a(EQe,"decodeImageBlock");a(TQe,"containsImage");a(hO,"mapMcpResultToContentBlocks")});var T0e,AQe=j(()=>{T0e={name:"dsh-edge",version:"0.28.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-file-upload":"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 pS,IQe,RQe,mO=j(()=>{"use strict";AQe();pS=T0e.version,IQe=T0e.dshEdge.upstreamVersion,RQe=`npx dsh-edge@${pS.includes("-")?"next":"latest"} upgrade`});function Pln(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 Oln(e){return/^\d+\.\d+\.\d+\.\d+$/u.test(e)||e.includes(":")}function B1(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 Iln)if(i.endsWith(s))throw new Error(`MCP server hostname "${i}" is blocked.`);if(Oln(i)){let s=Pln(i),o=s??i;for(let c of Rln)if(c.test(o))throw new Error(`MCP server address "${i}" is a private IP and is blocked.`);if(s===void 0){for(let c of Cln)if(c.test(i))throw new Error(`MCP server address "${i}" is a private IP and is blocked.`)}}}}function Mln(e){return e?.type==="bearer"&&e.token!==void 0?{Authorization:`Bearer ${e.token}`}:{}}async function CQe(e,t,n){B1(e);let r=new ZW(new URL(e),{requestInit:{headers:Mln(t),signal:n},fetch:hS}),i=new YW({name:"dsh-edge",version:pS},{capabilities:{},jsonSchemaValidator:Nln});return await i.connect(r),{client:i,close:a(async()=>{await i.close().catch(()=>{})},"close")}}async function PQe(e,t,n){let r=AbortSignal.timeout(cc.probeTimeoutMs),i;try{i=await CQe(t,n,r)}catch(c){throw new Error(q0(c instanceof Error?c.message:String(c)))}let{client:s,close:o}=i;try{let c=[],l=new Set,u=new Set,d;for(let m=0;m<cc.maxCatalogPages;m++){let f=await s.listTools(d===void 0?void 0:{cursor:d},{signal:r});for(let g of f.tools){if(c.length>=cc.maxToolsPerServer)break;let v=SQe(e,g.name);if(l.has(v))throw new Error(`Server listed tool "${g.name}" more than once`);l.add(v);let x=g.annotations?.readOnlyHint,b=_Qe(g.outputSchema);c.push({name:g.name,publicName:v,description:g.description??"",inputSchema:g.inputSchema??{type:"object"},...b!==void 0?{outputSchema:b}:{},...x!==void 0?{annotations:{readOnlyHint:x}}:{}})}if(c.length>=cc.maxToolsPerServer||(d=f.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:c,serverInfo:p?{name:p.name,version:p.version}:void 0,instructions:typeof h=="string"&&h.length>0?h.slice(0,cc.maxInstructionsLength):void 0}}finally{await o()}}async function oB(e,t,n,r,i,s){let o=s??cc.callTimeoutMs,c=i?AbortSignal.any([i,AbortSignal.timeout(o)]):AbortSignal.timeout(o),l;try{l=await CQe(e,r,c)}catch(u){throw new Error(q0(u instanceof Error?u.message:String(u)))}try{let u=await l.client.callTool({name:t,arguments:n},void 0,{signal:c});return{content:u.content??[],structuredContent:u.structuredContent,isError:u.isError===!0}}catch(u){throw new Error(q0(u instanceof Error?u.message:String(u)))}finally{await l.close()}}var Iln,Rln,Cln,Nln,hS,fO=j(()=>{"use strict";NKe();hQe();wQe();sB();iB();mO();Iln=[".internal",".local",".localhost"],Rln=[/^127\./u,/^10\./u,/^172\.(1[6-9]|2\d|3[01])\./u,/^192\.168\./u,/^0\./u,/^169\.254\./u],Cln=[/^::1$/u,/^fc/iu,/^fd/iu,/^fe[89ab][0-9a-f]:/iu];a(Pln,"extractMappedIPv4");a(Oln,"isIpAddress");a(B1,"assertSafeUrl");a(Mln,"buildHeaders");Nln=new rB,hS=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(CQe,"connectClient");a(PQe,"probe");a(oB,"callTool")});var cB={};Ft(cB,{buildAuthorizationUrl:()=>Bln,discoverEndpoints:()=>qln,exchangeCode:()=>zln,isTokenExpired:()=>Gln,refreshToken:()=>Hln,registerClient:()=>Wln});function LQe(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 jln(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 qln(e){let t=AbortSignal.timeout(aB),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);B1(i.href);let s=await hS(i.href,{signal:t});if(!s.ok)throw new Error(`PRM discovery failed: HTTP ${s.status}`);let c=(await s.json()).authorization_servers?.[0];if(typeof c!="string")throw new Error("No authorization server in PRM");let l=new URL(c),u=l.pathname==="/"?"/.well-known/oauth-authorization-server":`/.well-known/oauth-authorization-server${l.pathname}`,d=new URL(u,l.origin);B1(d.href);let p=await hS(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 Wln(e,t,n){let r=AbortSignal.timeout(aB);B1(e);let i=await hS(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 Bln(e,t,n,r,i){let s=LQe(32),o=LQe(64),c=await jln(o),l=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:c,code_challenge_method:"S256",resource:i}))l.searchParams.set(u,d);return{authorizationUrl:l.href,pendingFlow:{state:s,codeVerifier:o,redirectUri:n,serverName:r,serverUrl:i,stagedClient:t,createdAt:Date.now()}}}async function zln(e,t,n,r,i,s){let o=AbortSignal.timeout(aB),c=new URLSearchParams({grant_type:"authorization_code",code:n,redirect_uri:i,client_id:t.clientId,code_verifier:r});s!==void 0&&c.set("resource",s),t.clientSecret!==void 0&&c.set("client_secret",t.clientSecret),B1(e);let l=await hS(e,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:c.toString(),signal:o});if(!l.ok)throw new Error(`Token exchange failed: HTTP ${l.status}`);return DQe(await l.json())}async function Hln(e,t,n,r){let i=AbortSignal.timeout(aB),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),B1(e);let o=await hS(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 DQe(await o.json())}function DQe(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 Gln(e){return e.expiresAt===void 0?!1:Date.now()>e.expiresAt-12e4}var aB,lB=j(()=>{"use strict";fO();aB=1e4;a(LQe,"randomString");a(jln,"sha256Base64Url");a(qln,"discoverEndpoints");a(Wln,"registerClient");a(Bln,"buildAuthorizationUrl");a(zln,"exchangeCode");a(Hln,"refreshToken");a(DQe,"parseTokenResponse");a(Gln,"isTokenExpired")});var ur,zQe,TI=j(()=>{yr();jr();ur=class extends Di{static{a(this,"FsError")}code;constructor(e,t,n){super(e,t,n),this.code=t}},zQe=class extends $t{static{a(this,"FileSystem")}constructor(e){super(e,"fs")}watch(e,t,n){return n.throwIfAborted(),Promise.reject(new ur("Filesystem watching is not supported by this provider.","FS_IO_ERROR"))}get sandboxMode(){}processPathFromHostPath(e){}}});function bO(e){return bB.test(e)}function wB(e){return e.invocation.modelInvocable}function II(e){return e.invocation.userInvocable}function G0e(e){let t=Rdn(e);return[`<skill_content name="${Cdn(e.name)}">`,"<skill_resources>",...t,"</skill_resources>","","<skill_instructions>",e.content,"</skill_instructions>","</skill_content>"].join(`
|
|
168
168
|
`)}function Rdn(e){let t=e.resourceBase;if(t===void 0)return[`Resources for this skill are managed by provider "${AI(e.provider)}".`,"Load referenced resources only as needed."];switch(t.kind){case"directory":return[`Base directory for this skill: ${AI(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: ${AI(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: ${AI(t.description)}`,"Load referenced resources only as needed."];default:return Ur(t,"SkillResourceBase.kind")}}function Cdn(e){return e.replaceAll("&","&").replaceAll('"',""").replaceAll("<","<")}function AI(e){return e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">")}function Odn(e,t){if(Array.isArray(e))return{candidates:e,complete:!0};if(e===null||typeof e!="object")throw pJe(t);let n=e;if(!Array.isArray(n.candidates)||typeof n.complete!="boolean")throw pJe(t);return n}function pJe(e){return new TypeError(`skill provider "${e}" list() must return an array or { candidates, complete } observation`)}function Ndn(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:Idn,locator:e,...e.path!==void 0?{path:e.path}:{},...e.metadata!==void 0?{metadata:e.metadata}:{}}}function Ldn(e,t){if(typeof e.name!="string")throw new TypeError(`skill provider "${t}" returned a non-string skill name`);if(!bB.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(V0e(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 Ddn(e){if(!bB.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`);V0e(e.invocation,`runtime skill "${e.name}"`)}function $dn(e){let t=e.name,n=e.description,r=e.whenToUse,i=e.invocation,s=e.source,o=e.provider,c=e.content,l=e.path;if(typeof t!="string")throw new TypeError("loaded skill name must be a string");if(!bB.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(V0e(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 c!="string")throw new TypeError(`loaded skill "${t}" content must be a string`);if(l!==void 0&&typeof l!="string")throw new TypeError(`loaded skill "${t}" path must be a string`)}function Fdn(e){let{name:t,description:n,whenToUse:r,invocation:i,source:s,provider:o,resourceBase:c}=e;return{name:t,...e.path===void 0?{}:{path:e.path},description:n,...r!==void 0?{whenToUse:r}:{},invocation:i,source:s,provider:o,...c!==void 0?{resourceBase:c}:{}}}function V0e(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 Udn(e,t){return gJe(e.name,t.name)}function gJe(e,t){return e<t?-1:e>t?1:0}function jdn(e,t){return e.candidate.rank-t.candidate.rank||e.providerOrder-t.providerOrder||e.localOrder-t.localOrder}function qdn(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 hJe(e,t){return t===void 0?e:(xO(t),new Promise((n,r)=>{let i=a(()=>{t.removeEventListener("abort",s)},"cleanup"),s=a(()=>{i(),r(xB(t.reason))},"onAbort");t.addEventListener("abort",s,{once:!0}),e.then(o=>{i(),n(o)},o=>{i(),r(xB(o))})}))}function xO(e){if(e?.aborted===!0)throw xB(e.reason)}function xB(e){try{if(e instanceof Error)return e}catch{}return new Error(vB(e))}function vB(e){try{return String(e)}catch{return"[unrenderable thrown value]"}}var bB,dJe,Adn,yB,Idn,mJe,Pdn,fJe,Mdn,fS=j(()=>{yr();ys();Su();Rn();bB=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,dJe=128,Adn=2,yB="runtime",Idn=250,mJe=600;a(bO,"isSkillName");a(wB,"isModelInvocable");a(II,"isUserInvocable");a(G0e,"renderSkillContent");a(Rdn,"renderResourceHint");a(Cdn,"escapeAttr");a(AI,"escapeText");Pdn=class{static{a(this,"SkillLayer")}providers;runtime=new Map;constructor(e){this.providers=new h0(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}},fJe=class extends $t{static{a(this,"SkillRegistry")}static Config=q.object({collectCacheMaxEntries:q.number().default(dJe)});collectCacheMaxEntries;layers=new m0(e=>new Pdn(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??dJe,qdn("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===yB)throw new Error(`"${yB}" is reserved for runtime skill registrations`);let o=this.nextProviderOrder;return this.nextProviderOrder+=1,this.layers.effect(this.ctx,c=>{let l=c.providers.insert(s,{provider:r,order:o});return n={layer:c,name:s},()=>{n=void 0,l(),t.abort(new Error(`skill provider "${s}" disposed`))}},{label:"skills.registerProvider()"})}catch(s){throw t.abort(s),s}}register(e){Ddn(e);let t=Wl(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??yB};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=>Fdn(n.candidate)).sort(Udn),complete:t.cacheable}}async get(e,t={}){if(!bO(e))return;let n=await this.collect(t);xO(t.signal);let r=n.entries.get(e);if(r===void 0)return;let i=await hJe(r.provider.get(r.candidate,t),t.signal);if(i!==void 0){if($dn(i),i.name!==r.candidate.name){this.invalidateEntry(r);return}return i}}async collect(e){xO(e.signal);let t=1;for(;;){let n=this.revision,r=this.collectCacheKey(e.cwd,W3(e.scope),n),i=this.collectCache.get(r);if(i!==void 0)return{entries:i,cacheable:!0};let s=await this.collectFresh(e);if(xO(e.signal),n!==this.revision){if(t<Adn){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(jdn);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){xO(t.signal);let n=[],r=!0,i=0;for(let s of[...e.runtime.values()].sort((o,c)=>gJe(o.name,c.name)))n.push({candidate:Ndn(s),provider:Mdn,providerOrder:-1,localOrder:i,layer:e}),i+=1;for(let{provider:s,order:o}of[...e.providers.values()]){let c=0,l;try{l=await hJe(s.list(t),t.signal)}catch(d){if(t.signal?.aborted===!0)throw xB(t.signal.reason);r=!1,this.ctx.logger.warn(`skill provider "${s.name}" skipped: ${vB(d)}`)}if(l===void 0)continue;let u=Odn(l,s.name);u.complete||(r=!1);for(let d of u.candidates)Ldn(d,s.name),n.push({candidate:d,provider:s,providerOrder:o,localOrder:c,layer:e}),c+=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: ${vB(n)}`)})}catch(t){this.ctx.logger.warn(`skills/change listener threw: ${vB(t)}`)}}};a(Odn,"normalizeProviderObservation");a(pJe,"invalidProviderObservation");Mdn={name:yB,list(){return Promise.resolve([])},get(e){return Promise.resolve(e.locator)}};a(Ndn,"runtimeCandidate");a(Ldn,"validateCandidate");a(Ddn,"validateRuntimeSkill");a($dn,"validateDefinition");a(Fdn,"toSummary");a(V0e,"validateInvocation");a(Udn,"compareSkillSummary");a(gJe,"compareCodePoints");a(jdn,"compareIndexedCandidates");a(qdn,"assertPositiveInteger");a(hJe,"waitWithAbort");a(xO,"throwIfAborted");a(xB,"toError");a(vB,"errorMessage")});var ym,DI=j(()=>{ym=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 K1,WXe,e1e=j(()=>{yr();K1=class extends Error{static{a(this,"DirectoryPickerError")}code;path;constructor(e,t,n){super(n),this.code=e,this.path=t,this.name="DirectoryPickerError"}},WXe=class extends $t{static{a(this,"DirectoryPicker")}constructor(e){super(e,"directoryPicker")}}});var $G,sve,Fa,og=j(()=>{$G=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()}},sve=class{static{a(this,"EventStream")}queue=new $G;waiting=new $G;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 sve{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 Yvn(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 Xvn(e){return typeof e.result=="function"}async function Zvn(e,t){for await(let n of t)e.push(n);e.end(Xvn(t)?await t.result():void 0)}function xm(e,t){let n=Date.now(),r=new Fa;return t().then(i=>Zvn(r,i)).catch(i=>{let s=Yvn(e,i,n);r.push({type:"error",reason:"error",error:s}),r.end(s)}),r}function Rc(e,t){let n={stream:a((r,i,s)=>xm(r,async()=>(await e()).stream(r,i,s)),"stream"),streamSimple:a((r,i,s)=>xm(r,async()=>(await e()).streamSimple(r,i,s)),"streamSimple")};return t?.fetchDeferred&&(n.fetchDeferred=(r,i,s)=>xm(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 bh=j(()=>{og();a(Yvn,"createSetupErrorMessage");a(Xvn,"hasResult");a(Zvn,"forwardStream");a(xm,"lazyStream");a(Rc,"lazyApi")});function txn(){return globalThis.process?.env}function unt(){return{async env(e){let t=txn()?.[e];return typeof t=="string"&&t.trim().length>0?t:void 0},async fileExists(e){try{let t=await lnt("node:fs/promises"),n=e;return n.startsWith("~")&&(n=(await lnt("node:os")).homedir()+n.slice(1)),await t.access(n),!0}catch{return!1}}}}var exn,lnt,dnt=j(()=>{exn=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},lnt=a(e=>import(exn(e)),"importNodeModule");a(txn,"getProcessEnv");a(unt,"defaultProviderAuthContext")});function pnt(e){if(e.reason!==void 0)return e.reason;let t=new Error("The operation was aborted");return t.name="AbortError",t}function bm(e){return e??new AbortController().signal}function wm(e,t){return t.aborted?(e.catch(()=>{}),Promise.reject(pnt(t))):new Promise((n,r)=>{let i=!1,s=a(()=>t.removeEventListener("abort",o),"cleanup"),o=a(()=>{i||(i=!0,s(),r(pnt(t)))},"onAbort");t.addEventListener("abort",o,{once:!0}),e.then(c=>{i||(i=!0,s(),n(c))},c=>{i||(i=!0,s(),r(c))}),t.aborted&&o()})}var FG=j(()=>{a(pnt,"abortReason");a(bm,"operationSignal");a(wm,"raceWithAbortSignal")});var UG,hnt=j(()=>{FG();UG=class{static{a(this,"InMemoryCredentialStore")}credentials=new Map;chains=new Map;enqueue(t,n,r){let i=bm(r?.signal),s=this.chains.get(t)??Promise.resolve(),o=(async()=>(await s.catch(()=>{}),i.throwIfAborted(),n()))(),c=o.catch(()=>{});return this.chains.set(t,c),c.then(()=>{this.chains.get(t)===c&&this.chains.delete(t)}),wm(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 Fb(e){return e instanceof Error?e.message||e.name:typeof e=="string"?e:String(e)}function nxn(e){if(!(e instanceof Error))return{name:"ThrownValue",message:Fb(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 jG(e,t,n){return{type:e,timestamp:Date.now(),error:nxn(t),details:n}}function Ub(e,t){e.diagnostics=[...e.diagnostics??[],t]}var sM=j(()=>{a(Fb,"formatThrownValue");a(nxn,"extractDiagnosticError");a(jG,"createAssistantMessageDiagnostic");a(Ub,"appendAssistantMessageDiagnostic")});function rxn(e,t){if(t==null)return e;let n=Fb(t).trim();return!n||e.includes(n)?e:`${e}: ${n}`}var rs,qG=j(()=>{sM();rs=class extends Error{static{a(this,"ModelsError")}code;constructor(t,n,r){super(rxn(n,r?.cause),r),this.name="ModelsError",this.code=t}};a(rxn,"withCauseDetail")});function ave(e,t,n,r){let i=bm(r?.signal);return wm(ixn(e,t,n,r,i),i)}async function ixn(e,t,n,r,i){i.throwIfAborted();let s=r?.env?sxn(n,r.env):n;if(r?.apiKey!==void 0&&e.auth.apiKey)return ove(s,e.auth.apiKey,e.id,{type:"api_key",key:r.apiKey,env:r.env},i);let o=await lxn(t,e.id,i);if(o){if(o.type==="oauth"&&e.auth.oauth)return cxn(t,e.id,e.auth.oauth,o,i,r?.minOAuthValidityMs);if(o.type==="api_key"&&e.auth.apiKey){let c=r?.env?{...o,env:{...o.env,...r.env}}:o;return ove(s,e.auth.apiKey,e.id,c,i)}return}return e.auth.apiKey?ove(s,e.auth.apiKey,e.id,void 0,i):void 0}function sxn(e,t){return{env:a(async n=>t[n]||await e.env(n),"env"),fileExists:a(n=>e.fileExists(n),"fileExists")}}async function cve(e,t,n,r,i){let s,o=new AbortController,c=a(()=>o.abort(i.reason),"cancelLockWait");i.addEventListener("abort",c,{once:!0}),i.aborted&&c();try{s=await e.modify(t,async l=>{if(i.removeEventListener("abort",c),i.throwIfAborted(),l?.type==="oauth"&&r(l))try{return await n.refresh(l,AbortSignal.timeout(axn))}catch(u){throw new rs("oauth",`OAuth refresh failed for ${t}`,{cause:u})}},{signal:o.signal})}catch(l){throw l instanceof rs?l:(i.throwIfAborted(),new rs("auth",`Credential store modify failed for ${t}`,{cause:l}))}finally{i.removeEventListener("abort",c)}return s?.type==="oauth"?s:void 0}async function cxn(e,t,n,r,i,s){let o=Math.max(oxn,s??0),c=a(u=>Date.now()+o>=u.expires,"expiresSoon"),l=r;if(c(l)){let u=await cve(e,t,n,c,i);if(!u)return;if(l=u,s!==void 0&&c(l))throw new rs("oauth",`OAuth refresh returned a token that expires too soon for ${t}`)}try{return{auth:await n.toAuth(l),source:"OAuth"}}catch(u){throw new rs("oauth",`OAuth auth derivation failed for ${t}`,{cause:u})}}async function ove(e,t,n,r,i){try{return await t.resolve({ctx:e,credential:r,signal:i})}catch(s){throw new rs("auth",`API key auth failed for provider ${n}`,{cause:s})}}async function lxn(e,t,n){try{return await e.read(t,{signal:n})}catch(r){throw new rs("auth",`Credential store read failed for ${t}`,{cause:r})}}var oxn,axn,mnt=j(()=>{FG();qG();qG();a(ave,"resolveProviderAuth");a(ixn,"resolveProviderAuthWithSignal");a(sxn,"overlayEnvAuthContext");oxn=300*1e3,axn=15e3;a(cve,"refreshStoredOAuthCredential");a(cxn,"resolveStoredOAuth");a(ove,"resolveApiKey");a(lxn,"readCredential")});var WG,fnt=j(()=>{WG=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 nR(e){return e.type??"chat"}function ag(e,t){return nR(e)===t}function gnt(e){if(!ag(e,"chat"))throw new rs("provider",`Model ${e.provider}/${e.id} is not a chat model`)}function ynt(e){if(!ag(e,"image"))throw new rs("provider",`Model ${e.provider}/${e.id} is not an image model`)}function vnt(e){if(!ag(e,"classifier"))throw new rs("provider",`Model ${e.provider}/${e.id} is not a classifier model`)}function xnt(e,t){if(t.images?.length&&!e.input.includes("image"))throw new rs("provider",`Model ${e.provider}/${e.id} does not accept image input`)}function lve(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 uve(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 dve=j(()=>{qG();a(nR,"getModelType");a(ag,"isModelType");a(gnt,"assertChatModel");a(ynt,"assertImageModel");a(vnt,"assertClassifierModel");a(xnt,"assertClassifierInputSupported");a(lve,"imageErrorResult");a(uve,"classifierErrorResult")});function BG(e,t=`
|
|
169
169
|
`){return typeof e=="string"?e:e.filter(n=>n.type==="text").map(n=>n.text).join(t)}function tu(e){let t=[BG(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
|
|
|
@@ -8404,7 +8404,7 @@ The web request used endpoint ${JSON.stringify(e)}. Search endpoint configuratio
|
|
|
8404
8404
|
.error { padding: .75rem; border-radius: .5rem; background: #461d2b; color: #ffd6df; }
|
|
8405
8405
|
.hint { margin: 1.5rem 0 0; font-size: .875rem; }
|
|
8406
8406
|
code { padding: .1rem .3rem; border-radius: .3rem; background: #0c1222; color: #edf2ff; }
|
|
8407
|
-
`}a(tRt,"pageStyles");mO();var h3e="enabled",m3e=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")}),SD=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")}),f3e=Object.freeze({id:"container",capabilities:Object.freeze(["container"]),plan:"paid",shell:"linux-container",probe:a(e=>e.DSH_EDGE_CONTAINER_RUNTIME===h3e?"available":"needs-binding","probe")}),Zgr=Object.freeze([f3e,SD,m3e]);function g3e(e,t=Zgr){return t.filter(n=>n.probe(e)==="available")}a(g3e,"availableEdgeRuntimeProviders");function y3e(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(y3e,"resolveEdgeRuntimeSelection");function Qee(e){let t=g3e(e),{bash:n,container:r}=y3e(t);return t.find(i=>i.id===(r??n)).shell}a(Qee,"resolveEdgeRuntimeShell");function e0r(){return"dsh-edge@0.28.0-alpha.1/direct"}a(e0r,"resolveEdgeDeploymentId");function CE(e){return{baseURL:NTe(e.DEEPSEEK_BASE_URL),maxTokens:$Te(e.DEEPSEEK_MAX_OUTPUT_TOKENS),model:V_(e.DEEPSEEK_MODEL),reasoningEffort:LTe(e.DEEPSEEK_REASONING_EFFORT),searchBaseURL:NL(e.DEEPSEEK_SEARCH_BASE_URL),streamIdleTimeoutMs:DTe(e.DEEPSEEK_STREAM_IDLE_TIMEOUT_MS),commandTimeoutPolicy:Ek(e.DSH_EDGE_DEFAULT_COMMAND_TIMEOUT_MS,e.DSH_EDGE_MAX_COMMAND_TIMEOUT_MS)}}a(CE,"resolveEdgeDeploymentConfig");function t0r(e){return typeof e.DEEPSEEK_API_KEY=="string"&&e.DEEPSEEK_API_KEY.trim().length>0}a(t0r,"edgeDeploymentApiKeyConfigured");function n0r(e){let t=NTe(e),n=new URL(t);return n.search.length===0&&n.hash.length===0?t:(n.search="",n.hash="",n.href)}a(n0r,"projectedEdgeBaseURL");function v3e(e,t){return{shell:Qee(e),storage:"durable-object-sqlite-vfs",attachmentStorage:t??(e.DSH_EDGE_ATTACHMENTS===void 0?"temporary-do":"private-r2"),deploymentId:e0r(),apiKeyConfigured:t0r(e),baseURL:n0r(e.DEEPSEEK_BASE_URL),maxTokens:$Te(e.DEEPSEEK_MAX_OUTPUT_TOKENS),model:V_(e.DEEPSEEK_MODEL),reasoningEffort:LTe(e.DEEPSEEK_REASONING_EFFORT),searchBaseURL:NL(e.DEEPSEEK_SEARCH_BASE_URL),streamIdleTimeoutMs:DTe(e.DEEPSEEK_STREAM_IDLE_TIMEOUT_MS),commandTimeoutPolicy:Ek(e.DSH_EDGE_DEFAULT_COMMAND_TIMEOUT_MS,e.DSH_EDGE_MAX_COMMAND_TIMEOUT_MS)}}a(v3e,"resolveEdgeDeploymentProfile");function Jee(e){CE(e);let t=v3e(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:pS,upstreamVersion:IQe,status:"ready"}}a(Jee,"resolveEdgeDeploymentHealth");import{AsyncLocalStorage as pCr}from"node:async_hooks";import{RpcTarget as r0r}from"cloudflare:workers";function i0r(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(i0r,"startHeartbeat");async function s0r(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(s0r,"probeComputerdHealth");var o0r="computer.internal",a0r="/health",x3e="/api",c0r=8080,l0r=3e4,u0r=2e4,d0r=1,p0r=2e3,h0r=250,m0r=2e3;function f0r(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(f0r,"bearerMatches");var Xee=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??o0r,containerPort:e.containerPort??c0r,connectTimeoutMs:e.connectTimeoutMs??l0r,heartbeatIntervalMs:e.heartbeatIntervalMs??u0r,restartAttempts:e.restartAttempts??d0r,healthProbeTimeoutMs:e.healthProbeTimeoutMs??p0r,healthRetryInitialDelayMs:e.healthRetryInitialDelayMs??h0r,healthRetryMaxDelayMs:e.healthRetryMaxDelayMs??m0r}}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 sd(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 sd(this.#h("egress",{attempt:1,maxAttempts:this.#e.restartAttempts+1,restarts:0,lastError:p,priorExit:n}),{cause:p})}this.#t=s,this.#c(),i=await this.#p(t,r,e,n,i),await this.#l(t,e),await this.#f(t,e,s);let o=await this.#d(e),c=Ere(o),l,u=new Promise(p=>{let h=!1,m=a(()=>{h||(h=!0,l?.(),p(),this.#u=void 0)},"onClose");o.addEventListener("close",m,{once:!0}),o.addEventListener("error",m,{once:!0}),c.onRpcBroken(m)});this.#e.heartbeatIntervalMs>0&&(l=i0r({intervalMs:this.#e.heartbeatIntervalMs,ping:a(()=>c.sync.watermarks(),"ping"),onFailure:a(()=>{try{o.close()}catch{}},"onFailure")}));let d={rpc:c,runtimeId:i,closed:u,close:a(async()=>{l?.();try{c[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(p3),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(L$),i.delete(p3);let c=new Request(e,{headers:i});return this.#n.gateway.fetch(new Request(o,c))}if(new URL(e.url).pathname!==x3e)return new Response("not found",{status:404});if(e.headers.get("upgrade")!=="websocket")return new Response(`${x3e} requires a websocket upgrade`,{status:400});if(!f0r(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})}#c(){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()),c=Math.max(250,Math.floor(o/s)),l=0,u=0,d,p=i;for(;l<s;){l++;let h=Math.min(n,Date.now()+c);if(await this.#m(e,h).then(()=>!0,m=>(d=m,!1)))return p;if(l<s)try{({runtimeId:p}=await e.restart({env:t,enableInternet:this.#n.mode==="direct"})),u++}catch(m){throw this.#a?.(m),this.#o(),new sd(this.#h("restart",{attempt:l,maxAttempts:s,restarts:u,lastError:m}),{cause:m})}}throw this.#a?.(new Error("computerd never became healthy")),this.#o(),new sd(this.#h("health",{attempt:l,maxAttempts:s,restarts:u,lastError:d,priorExit:r}),d instanceof Error?{cause:d}:void 0)}async#m(e,t){let n=this.#e.healthRetryInitialDelayMs,r;for(;Date.now()<t;)try{await s0r(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 g0r(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=${nRt(t.lastError)}`}async#l(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 sd(`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#f(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:a0r,api:x3e,healthTimeoutMs:r})})}catch(s){throw this.#a?.(s),this.#o(),new sd(`CloudflareContainerBackend(${this.id}) [stage=connect]: POST /connect failed: ${nRt(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 sd(`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 sd(`CloudflareContainerBackend(${this.id}) [stage=ws]: /api upgrade did not arrive within ${this.#e.connectTimeoutMs}ms`)),n)})])}finally{r&&clearTimeout(r),this.#o()}}};function g0r(e){return new Promise(t=>setTimeout(t,e))}a(g0r,"sleep");function nRt(e){return e instanceof Error?e.message:String(e)}a(nRt,"describeError");var rRt="computer:container-client-secret",y0r=16;function v0r(){let e=crypto.getRandomValues(new Uint8Array(y0r));return Array.from(e,t=>t.toString(16).padStart(2,"0")).join("")}a(v0r,"generate");var x0r=class{static{a(this,"ContainerClientSecret")}storage;constructor(e){this.storage=e}async ensure(){let e=await this.storage.get(rRt);if(typeof e=="string"&&e.length>0)return e;let t=v0r();return await this.storage.put(rRt,t),t}},iRt="computer:container-launch-record";async function sRt(e){return{enableInternet:e.enableInternet,envDigest:await w0r(e.env)}}a(sRt,"launchRecordFor");function b0r(e,t){return e.enableInternet===t.enableInternet&&e.envDigest===t.envDigest}a(b0r,"sameLaunch");async function w0r(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(w0r,"digestEnv");var k0r=class{static{a(this,"CurrentContainerLaunchRecord")}storage;constructor(e){this.storage=e}async get(){return await this.storage.get(iRt)??null}async set(e){await this.storage.put(iRt,e)}},oRt=new WeakMap;function k3e(e){let t=oRt.get(e);return t===void 0&&(t={exit:null,currentGeneration:0,expectedExitGeneration:null,currentMonitorSettled:null},oRt.set(e,t)),t}a(k3e,"getContainerLifecycle");function Yee(e){return k3e(e).exit}a(Yee,"containerExitInfo");function aRt(e){return e===void 0?"exited normally":e instanceof Error?e.message:String(e)}a(aRt,"formatExitReason");function cRt(e,t,n){let r=k3e(e);r.currentGeneration+=1;let i=r.currentGeneration;r.exit=null,r.currentMonitorSettled=t.monitor().then(()=>lRt(r,i,void 0,n),s=>lRt(r,i,s,n))}a(cRt,"installContainerMonitor");async function b3e(e,t){let n=k3e(e);n.expectedExitGeneration=n.currentGeneration;let r=n.currentMonitorSettled;await t.destroy(),r&&await r}a(b3e,"destroyContainerExpectingExit");async function lRt(e,t,n,r){if(t!==e.currentGeneration)return;let i=e.expectedExitGeneration===t;i&&(e.expectedExitGeneration=null);let s=aRt(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(c){console.error({message:"workspace.container.exit_cleanup_failed",reason:aRt(c),exitedAt:Date.now()})}}a(lRt,"recordExit");var w3e="computer:container-runtime-identity",S0r=class{static{a(this,"CurrentContainerRuntimeIdentity")}storage;constructor(e){this.storage=e}async get(){return await this.storage.get(w3e)??null}async markStarted(){let e={id:crypto.randomUUID()};return await this.storage.put(w3e,e),e}async clear(e){(await this.get())?.id===e.id&&await this.storage.delete(w3e)}},_0r=class extends r0r{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 S0r(e.storage),this.#t=new x0r(e.storage),this.#i=new k0r(e.storage)}async start(e){let t=Yee(this.#n),n=await this.#t.ensure(),r=await sRt(e);if(t!==null){try{await b3e(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||!b0r(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 b3e(this.#n,this.#e)}catch{}return this.#s(e,n,r,"relaunched")}let s=await this.#r.get()??await this.#r.markStarted();return cRt(this.#n,this.#e,()=>this.#r.clear(s)),{runtimeId:s.id,clientSecret:n,outcome:"adopted"}}async restart(e){try{await b3e(this.#n,this.#e)}catch{}let t=await this.#t.ensure();return this.#s(e,t,await sRt(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),cRt(this.#n,this.#e,()=>this.#r.clear(i)),{runtimeId:i.id,clientSecret:t,outcome:r}}async status(){return{running:this.#e.running,exit:Yee(this.#n)}}async exitInfo(){return Yee(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=Yee(this.#n);if(r!==null)throw new sd(`container exited: ${r.reason}`);return this.#e.getTcpPort(e).fetch(t,n)}port(e){return this.#e.getTcpPort(e)}};function uRt(e){class t extends e{static{a(this,"WithWorkspaceContainer")}getWorkspaceContainer(){return new _0r(this.ctx)}}return t}a(uRt,"withWorkspaceContainer");var E0r={session:"sessions",skill:"skills",agentPreset:"agentPresets",subagent:"subagents",goal:"goals",event:"events",download:"downloads"};function pRt(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),c=E0r[s]??s,l=e[c];if(l===void 0)return;let u=l[o];return typeof u=="function"?u:void 0}a(pRt,"resolve");function T0r(e,t){return Response.json({type:"server-response",rpcId:e,result:{ok:!1,error:t}})}a(T0r,"errorResponse");async function S3e(e,t,n,r,i){let s=pRt(e,t);if(s!==void 0)return await s({rpcId:n,payload:r},i)}a(S3e,"callEdgeApi");async function hRt(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(pRt(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",c=s.payload??{};try{let l=await S3e(e,i,o,c,t.signal);return l===void 0?new Response("not found",{status:404}):Response.json({type:"server-response",rpcId:l.rpcId,result:l.result})}catch(l){return T0r(o,{code:"gateway/internal",message:String(l),details:{}})}}a(hRt,"dispatchEdgeApi");jr();Eo();cb();import{DurableObject as hCr}from"cloudflare:workers";var Zee=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 A0r(this.stopping,t);continue}await new Promise((r,i)=>{let s=a(()=>{t?.removeEventListener("abort",o),r()},"wake"),o=a(()=>{let c=this.waiters.indexOf(s);c!==-1&&this.waiters.splice(c,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 A0r(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(A0r,"untilAborted");import{WorkerEntrypoint as Has}from"cloudflare:workers";var aT=ul(mRt(),1);import{gunzipSync as O1r}from"node:zlib";var _D=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),c=this.removeEmpty(this.tokenize(s,r)),l=this.removeEmpty(this.tokenize(o,r));return this.diffWithOptionsObj(c,l,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"),c=n.length,l=t.length,u=1,d=c+l;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,m=[{oldPos:-1,lastComponent:void 0}],f=this.extractCommon(m[0],n,t,0,r);if(m[0].oldPos+1>=l&&f+1>=c)return o(this.buildValues(m[0].lastComponent,n,t));let g=-1/0,v=1/0,x=a(()=>{for(let b=Math.max(g,-u);b<=Math.min(v,u);b+=2){let w,k=m[b-1],E=m[b+1];k&&(m[b-1]=void 0);let A=!1;if(E){let O=E.oldPos-b;A=E&&0<=O&&O<c}let I=k&&k.oldPos+1<l;if(!A&&!I){m[b]=void 0;continue}if(!I||A&&k.oldPos<E.oldPos?w=this.addToPath(E,!0,!1,0,r):w=this.addToPath(k,!1,!0,1,r),f=this.extractCommon(w,n,t,b,r),w.oldPos+1>=l&&f+1>=c)return o(this.buildValues(w.lastComponent,n,t))||!0;m[b]=w,w.oldPos+1>=l&&(v=Math.min(v,b-1)),f+1>=c&&(g=Math.max(g,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,c=r.length,l=t.oldPos,u=l-i,d=0;for(;u+1<o&&l+1<c&&this.equals(r[l+1],n[u+1],s);)u++,l++,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=l,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,c=0,l=0,u=0;for(;c<o;c++){let d=i[c];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(l,l+d.count);p=p.map(function(h,m){let f=r[u+m];return f.length>h.length?f:h}),d.value=this.join(p)}else d.value=this.join(n.slice(l,l+d.count));l+=d.count,d.added||(u+=d.count)}}return i}};var _3e=class extends _D{static{a(this,"LineDiff")}constructor(){super(...arguments),this.tokenize=R0r}equals(t,n,r){return r.ignoreWhitespace?((!r.newlineIsToken||!t.includes(`
|
|
8407
|
+
`}a(tRt,"pageStyles");mO();var h3e="enabled",m3e=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")}),SD=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")}),f3e=Object.freeze({id:"container",capabilities:Object.freeze(["container"]),plan:"paid",shell:"linux-container",probe:a(e=>e.DSH_EDGE_CONTAINER_RUNTIME===h3e?"available":"needs-binding","probe")}),Zgr=Object.freeze([f3e,SD,m3e]);function g3e(e,t=Zgr){return t.filter(n=>n.probe(e)==="available")}a(g3e,"availableEdgeRuntimeProviders");function y3e(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(y3e,"resolveEdgeRuntimeSelection");function Qee(e){let t=g3e(e),{bash:n,container:r}=y3e(t);return t.find(i=>i.id===(r??n)).shell}a(Qee,"resolveEdgeRuntimeShell");function e0r(){return"dsh-edge@0.28.0/direct"}a(e0r,"resolveEdgeDeploymentId");function CE(e){return{baseURL:NTe(e.DEEPSEEK_BASE_URL),maxTokens:$Te(e.DEEPSEEK_MAX_OUTPUT_TOKENS),model:V_(e.DEEPSEEK_MODEL),reasoningEffort:LTe(e.DEEPSEEK_REASONING_EFFORT),searchBaseURL:NL(e.DEEPSEEK_SEARCH_BASE_URL),streamIdleTimeoutMs:DTe(e.DEEPSEEK_STREAM_IDLE_TIMEOUT_MS),commandTimeoutPolicy:Ek(e.DSH_EDGE_DEFAULT_COMMAND_TIMEOUT_MS,e.DSH_EDGE_MAX_COMMAND_TIMEOUT_MS)}}a(CE,"resolveEdgeDeploymentConfig");function t0r(e){return typeof e.DEEPSEEK_API_KEY=="string"&&e.DEEPSEEK_API_KEY.trim().length>0}a(t0r,"edgeDeploymentApiKeyConfigured");function n0r(e){let t=NTe(e),n=new URL(t);return n.search.length===0&&n.hash.length===0?t:(n.search="",n.hash="",n.href)}a(n0r,"projectedEdgeBaseURL");function v3e(e,t){return{shell:Qee(e),storage:"durable-object-sqlite-vfs",attachmentStorage:t??(e.DSH_EDGE_ATTACHMENTS===void 0?"temporary-do":"private-r2"),deploymentId:e0r(),apiKeyConfigured:t0r(e),baseURL:n0r(e.DEEPSEEK_BASE_URL),maxTokens:$Te(e.DEEPSEEK_MAX_OUTPUT_TOKENS),model:V_(e.DEEPSEEK_MODEL),reasoningEffort:LTe(e.DEEPSEEK_REASONING_EFFORT),searchBaseURL:NL(e.DEEPSEEK_SEARCH_BASE_URL),streamIdleTimeoutMs:DTe(e.DEEPSEEK_STREAM_IDLE_TIMEOUT_MS),commandTimeoutPolicy:Ek(e.DSH_EDGE_DEFAULT_COMMAND_TIMEOUT_MS,e.DSH_EDGE_MAX_COMMAND_TIMEOUT_MS)}}a(v3e,"resolveEdgeDeploymentProfile");function Jee(e){CE(e);let t=v3e(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:pS,upstreamVersion:IQe,status:"ready"}}a(Jee,"resolveEdgeDeploymentHealth");import{AsyncLocalStorage as pCr}from"node:async_hooks";import{RpcTarget as r0r}from"cloudflare:workers";function i0r(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(i0r,"startHeartbeat");async function s0r(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(s0r,"probeComputerdHealth");var o0r="computer.internal",a0r="/health",x3e="/api",c0r=8080,l0r=3e4,u0r=2e4,d0r=1,p0r=2e3,h0r=250,m0r=2e3;function f0r(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(f0r,"bearerMatches");var Xee=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??o0r,containerPort:e.containerPort??c0r,connectTimeoutMs:e.connectTimeoutMs??l0r,heartbeatIntervalMs:e.heartbeatIntervalMs??u0r,restartAttempts:e.restartAttempts??d0r,healthProbeTimeoutMs:e.healthProbeTimeoutMs??p0r,healthRetryInitialDelayMs:e.healthRetryInitialDelayMs??h0r,healthRetryMaxDelayMs:e.healthRetryMaxDelayMs??m0r}}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 sd(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 sd(this.#h("egress",{attempt:1,maxAttempts:this.#e.restartAttempts+1,restarts:0,lastError:p,priorExit:n}),{cause:p})}this.#t=s,this.#c(),i=await this.#p(t,r,e,n,i),await this.#l(t,e),await this.#f(t,e,s);let o=await this.#d(e),c=Ere(o),l,u=new Promise(p=>{let h=!1,m=a(()=>{h||(h=!0,l?.(),p(),this.#u=void 0)},"onClose");o.addEventListener("close",m,{once:!0}),o.addEventListener("error",m,{once:!0}),c.onRpcBroken(m)});this.#e.heartbeatIntervalMs>0&&(l=i0r({intervalMs:this.#e.heartbeatIntervalMs,ping:a(()=>c.sync.watermarks(),"ping"),onFailure:a(()=>{try{o.close()}catch{}},"onFailure")}));let d={rpc:c,runtimeId:i,closed:u,close:a(async()=>{l?.();try{c[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(p3),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(L$),i.delete(p3);let c=new Request(e,{headers:i});return this.#n.gateway.fetch(new Request(o,c))}if(new URL(e.url).pathname!==x3e)return new Response("not found",{status:404});if(e.headers.get("upgrade")!=="websocket")return new Response(`${x3e} requires a websocket upgrade`,{status:400});if(!f0r(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})}#c(){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()),c=Math.max(250,Math.floor(o/s)),l=0,u=0,d,p=i;for(;l<s;){l++;let h=Math.min(n,Date.now()+c);if(await this.#m(e,h).then(()=>!0,m=>(d=m,!1)))return p;if(l<s)try{({runtimeId:p}=await e.restart({env:t,enableInternet:this.#n.mode==="direct"})),u++}catch(m){throw this.#a?.(m),this.#o(),new sd(this.#h("restart",{attempt:l,maxAttempts:s,restarts:u,lastError:m}),{cause:m})}}throw this.#a?.(new Error("computerd never became healthy")),this.#o(),new sd(this.#h("health",{attempt:l,maxAttempts:s,restarts:u,lastError:d,priorExit:r}),d instanceof Error?{cause:d}:void 0)}async#m(e,t){let n=this.#e.healthRetryInitialDelayMs,r;for(;Date.now()<t;)try{await s0r(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 g0r(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=${nRt(t.lastError)}`}async#l(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 sd(`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#f(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:a0r,api:x3e,healthTimeoutMs:r})})}catch(s){throw this.#a?.(s),this.#o(),new sd(`CloudflareContainerBackend(${this.id}) [stage=connect]: POST /connect failed: ${nRt(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 sd(`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 sd(`CloudflareContainerBackend(${this.id}) [stage=ws]: /api upgrade did not arrive within ${this.#e.connectTimeoutMs}ms`)),n)})])}finally{r&&clearTimeout(r),this.#o()}}};function g0r(e){return new Promise(t=>setTimeout(t,e))}a(g0r,"sleep");function nRt(e){return e instanceof Error?e.message:String(e)}a(nRt,"describeError");var rRt="computer:container-client-secret",y0r=16;function v0r(){let e=crypto.getRandomValues(new Uint8Array(y0r));return Array.from(e,t=>t.toString(16).padStart(2,"0")).join("")}a(v0r,"generate");var x0r=class{static{a(this,"ContainerClientSecret")}storage;constructor(e){this.storage=e}async ensure(){let e=await this.storage.get(rRt);if(typeof e=="string"&&e.length>0)return e;let t=v0r();return await this.storage.put(rRt,t),t}},iRt="computer:container-launch-record";async function sRt(e){return{enableInternet:e.enableInternet,envDigest:await w0r(e.env)}}a(sRt,"launchRecordFor");function b0r(e,t){return e.enableInternet===t.enableInternet&&e.envDigest===t.envDigest}a(b0r,"sameLaunch");async function w0r(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(w0r,"digestEnv");var k0r=class{static{a(this,"CurrentContainerLaunchRecord")}storage;constructor(e){this.storage=e}async get(){return await this.storage.get(iRt)??null}async set(e){await this.storage.put(iRt,e)}},oRt=new WeakMap;function k3e(e){let t=oRt.get(e);return t===void 0&&(t={exit:null,currentGeneration:0,expectedExitGeneration:null,currentMonitorSettled:null},oRt.set(e,t)),t}a(k3e,"getContainerLifecycle");function Yee(e){return k3e(e).exit}a(Yee,"containerExitInfo");function aRt(e){return e===void 0?"exited normally":e instanceof Error?e.message:String(e)}a(aRt,"formatExitReason");function cRt(e,t,n){let r=k3e(e);r.currentGeneration+=1;let i=r.currentGeneration;r.exit=null,r.currentMonitorSettled=t.monitor().then(()=>lRt(r,i,void 0,n),s=>lRt(r,i,s,n))}a(cRt,"installContainerMonitor");async function b3e(e,t){let n=k3e(e);n.expectedExitGeneration=n.currentGeneration;let r=n.currentMonitorSettled;await t.destroy(),r&&await r}a(b3e,"destroyContainerExpectingExit");async function lRt(e,t,n,r){if(t!==e.currentGeneration)return;let i=e.expectedExitGeneration===t;i&&(e.expectedExitGeneration=null);let s=aRt(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(c){console.error({message:"workspace.container.exit_cleanup_failed",reason:aRt(c),exitedAt:Date.now()})}}a(lRt,"recordExit");var w3e="computer:container-runtime-identity",S0r=class{static{a(this,"CurrentContainerRuntimeIdentity")}storage;constructor(e){this.storage=e}async get(){return await this.storage.get(w3e)??null}async markStarted(){let e={id:crypto.randomUUID()};return await this.storage.put(w3e,e),e}async clear(e){(await this.get())?.id===e.id&&await this.storage.delete(w3e)}},_0r=class extends r0r{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 S0r(e.storage),this.#t=new x0r(e.storage),this.#i=new k0r(e.storage)}async start(e){let t=Yee(this.#n),n=await this.#t.ensure(),r=await sRt(e);if(t!==null){try{await b3e(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||!b0r(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 b3e(this.#n,this.#e)}catch{}return this.#s(e,n,r,"relaunched")}let s=await this.#r.get()??await this.#r.markStarted();return cRt(this.#n,this.#e,()=>this.#r.clear(s)),{runtimeId:s.id,clientSecret:n,outcome:"adopted"}}async restart(e){try{await b3e(this.#n,this.#e)}catch{}let t=await this.#t.ensure();return this.#s(e,t,await sRt(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),cRt(this.#n,this.#e,()=>this.#r.clear(i)),{runtimeId:i.id,clientSecret:t,outcome:r}}async status(){return{running:this.#e.running,exit:Yee(this.#n)}}async exitInfo(){return Yee(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=Yee(this.#n);if(r!==null)throw new sd(`container exited: ${r.reason}`);return this.#e.getTcpPort(e).fetch(t,n)}port(e){return this.#e.getTcpPort(e)}};function uRt(e){class t extends e{static{a(this,"WithWorkspaceContainer")}getWorkspaceContainer(){return new _0r(this.ctx)}}return t}a(uRt,"withWorkspaceContainer");var E0r={session:"sessions",skill:"skills",agentPreset:"agentPresets",subagent:"subagents",goal:"goals",event:"events",download:"downloads"};function pRt(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),c=E0r[s]??s,l=e[c];if(l===void 0)return;let u=l[o];return typeof u=="function"?u:void 0}a(pRt,"resolve");function T0r(e,t){return Response.json({type:"server-response",rpcId:e,result:{ok:!1,error:t}})}a(T0r,"errorResponse");async function S3e(e,t,n,r,i){let s=pRt(e,t);if(s!==void 0)return await s({rpcId:n,payload:r},i)}a(S3e,"callEdgeApi");async function hRt(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(pRt(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",c=s.payload??{};try{let l=await S3e(e,i,o,c,t.signal);return l===void 0?new Response("not found",{status:404}):Response.json({type:"server-response",rpcId:l.rpcId,result:l.result})}catch(l){return T0r(o,{code:"gateway/internal",message:String(l),details:{}})}}a(hRt,"dispatchEdgeApi");jr();Eo();cb();import{DurableObject as hCr}from"cloudflare:workers";var Zee=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 A0r(this.stopping,t);continue}await new Promise((r,i)=>{let s=a(()=>{t?.removeEventListener("abort",o),r()},"wake"),o=a(()=>{let c=this.waiters.indexOf(s);c!==-1&&this.waiters.splice(c,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 A0r(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(A0r,"untilAborted");import{WorkerEntrypoint as Has}from"cloudflare:workers";var aT=ul(mRt());import{gunzipSync as O1r}from"node:zlib";var _D=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),c=this.removeEmpty(this.tokenize(s,r)),l=this.removeEmpty(this.tokenize(o,r));return this.diffWithOptionsObj(c,l,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"),c=n.length,l=t.length,u=1,d=c+l;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,m=[{oldPos:-1,lastComponent:void 0}],f=this.extractCommon(m[0],n,t,0,r);if(m[0].oldPos+1>=l&&f+1>=c)return o(this.buildValues(m[0].lastComponent,n,t));let g=-1/0,v=1/0,x=a(()=>{for(let b=Math.max(g,-u);b<=Math.min(v,u);b+=2){let w,k=m[b-1],E=m[b+1];k&&(m[b-1]=void 0);let A=!1;if(E){let O=E.oldPos-b;A=E&&0<=O&&O<c}let I=k&&k.oldPos+1<l;if(!A&&!I){m[b]=void 0;continue}if(!I||A&&k.oldPos<E.oldPos?w=this.addToPath(E,!0,!1,0,r):w=this.addToPath(k,!1,!0,1,r),f=this.extractCommon(w,n,t,b,r),w.oldPos+1>=l&&f+1>=c)return o(this.buildValues(w.lastComponent,n,t))||!0;m[b]=w,w.oldPos+1>=l&&(v=Math.min(v,b-1)),f+1>=c&&(g=Math.max(g,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,c=r.length,l=t.oldPos,u=l-i,d=0;for(;u+1<o&&l+1<c&&this.equals(r[l+1],n[u+1],s);)u++,l++,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=l,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,c=0,l=0,u=0;for(;c<o;c++){let d=i[c];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(l,l+d.count);p=p.map(function(h,m){let f=r[u+m];return f.length>h.length?f:h}),d.value=this.join(p)}else d.value=this.join(n.slice(l,l+d.count));l+=d.count,d.added||(u+=d.count)}}return i}};var _3e=class extends _D{static{a(this,"LineDiff")}constructor(){super(...arguments),this.tokenize=R0r}equals(t,n,r){return r.ignoreWhitespace?((!r.newlineIsToken||!t.includes(`
|
|
8408
8408
|
`))&&(t=t.trim()),(!r.newlineIsToken||!n.includes(`
|
|
8409
8409
|
`))&&(n=n.trim())):r.ignoreNewlineAtEof&&!r.newlineIsToken&&(t.endsWith(`
|
|
8410
8410
|
`)&&(t=t.slice(0,-1)),n.endsWith(`
|
package/worker/isolated/index.js
CHANGED
|
@@ -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"?WE(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=>WE(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,m===!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,m===!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,m===!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.`}),G!==void 0&&et.length>G&&Oe.push({instanceLocation:o,keyword:"maxProperties",keywordLocation:`${l}/maxProperties`,error:`Instance does not have at least ${G} properties.`}),P!==void 0){let yt=`${l}/propertyNames`;for(let ot in e){let Ct=`${o}/${Ip(ot)}`,Ue=Go(ot,P,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(U!==void 0)for(let yt in U){let ot=`${l}/dependentSchemas`;if(yt in e){let Ct=Go(e,U[yt],n,r,i,s,o,`${ot}/${Ip(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(D!==void 0){let yt=`${l}/dependencies`;for(let ot in D)if(ot in e){let Ct=D[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}/${Ip(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(F!==void 0){let yt=`${l}/properties`;for(let ot in F){if(!(ot in e))continue;let Ct=`${o}/${Ip(ot)}`,Ue=Go(e[ot],F[ot],n,r,i,s,Ct,`${yt}/${Ip(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&&$!==void 0){let yt=`${l}/patternProperties`;for(let ot in $){let Ct=new RegExp(ot,"u"),Ue=$[ot];for(let Wt in e){if(!Ct.test(Wt))continue;let pn=`${o}/${Ip(Wt)}`,Tt=Go(e[Wt],Ue,n,r,i,s,pn,`${yt}/${Ip(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&&H!==void 0){let yt=`${l}/additionalProperties`;for(let ot in e){if(Ve[ot])continue;let Ct=`${o}/${Ip(ot)}`,Ue=Go(e[ot],H,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}/${Ip(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"){ce!==void 0&&e.length>ce&&Oe.push({instanceLocation:o,keyword:"maxItems",keywordLocation:`${l}/maxItems`,error:`Array has too many items (${e.length} > ${ce}).`}),ve!==void 0&&e.length<ve&&Oe.push({instanceLocation:o,keyword:"minItems",keywordLocation:`${l}/minItems`,error:`Array has too few items (${e.length} < ${ve}).`});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&&X!==void 0){let ot=`${l}/additionalItems`;for(;Ve<et;Ve++){let Ct=Go(e[Ve],X,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&&ie===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(ie!==void 0&&et<ie)Oe.push({instanceLocation:o,keyword:"minContains",keywordLocation:`${l}/minContains`,error:`Array has less items (${et}) than minContains (${ie}).`});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>=(ie||0)&&(Oe.length=ot),ie===void 0&&ke===void 0&&Ct===0?Oe.splice(ot,0,{instanceLocation:o,keyword:"contains",keywordLocation:yt,error:"Array does not contain item matching schema."}):ie!==void 0&&Ct<ie?Oe.push({instanceLocation:o,keyword:"minContains",keywordLocation:`${l}/minContains`,error:`Array must contain at least ${ie} items matching schema. Only ${Ct} items were found.`}):ke!==void 0&&Ct>ke&&Oe.push({instanceLocation:o,keyword:"maxContains",keywordLocation:`${l}/maxContains`,error:`Array may contain at most ${ke} items matching schema. ${Ct} items were found.`})}if(!Ot&&ee!==void 0){let yt=`${l}/unevaluatedItems`;for(Ve;Ve<et;Ve++){if(c[Ve])continue;let ot=Go(e[Ve],ee,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(Te)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)&&WE(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&&(ue===!0&&e<=Ie||e<Ie)&&Oe.push({instanceLocation:o,keyword:"minimum",keywordLocation:`${l}/minimum`,error:`${e} is less than ${ue?"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}.`}),ue!==void 0&&e<=ue&&Oe.push({instanceLocation:o,keyword:"exclusiveMinimum",keywordLocation:`${l}/exclusiveMinimum`,error:`${e} is less than ${ue}.`}),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=ft===void 0&&je===void 0?0:fze(e);ft!==void 0&&et<ft&&Oe.push({instanceLocation:o,keyword:"minLength",keywordLocation:`${l}/minLength`,error:`String is too short (${et} < ${ft}).`}),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&&rme[N]&&!rme[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 ome=L(()=>{nme();AU();ime();TU();sme();a(Go,"validate")});var IU,gze=L(()=>{AU();ome();IU=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 yze=L(()=>{nme();AU();ime();TU();mze();sme();ome();gze()});var RU,vze=L(()=>{yze();RU=class{static{a(this,"CfWorkerJsonSchemaValidator")}constructor(t){this.shortcircuit=t?.shortcircuit??!0,this.draft=t?.draft??"2020-12"}getValidator(t){let n=new IU(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,CU=L(()=>{"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 QYt(e){let t=e.replace(/[.*+?^${}()|[\]\\]/gu,n=>n==="*"?"\0":`\\${n}`);return new RegExp(`^${t.replaceAll("\0",".*")}$`)}function xze(e,t,n){let r=t??"read_only";return r==="allow_all"?"allow":r==="approve_all"?"ask":n===!0?"allow":n===!1?"ask":KYt.some(i=>QYt(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 bze(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=JYt(e,t),s=La.maxPublicNameLength-i.length-1;return`${r.slice(0,s)}_${i}`}function JYt(e,t){return VYt("sha256").update(`${e}\0${t}`).digest("hex").slice(0,12)}function wze(e){if(!(e==null||typeof e!="object"))try{let t=JSON.parse(JSON.stringify(e));return Ub(t),t}catch{return}}function YYt(e){return ZYt.has(e)}function kze(e){return e.type!=="image"||e.data===void 0||e.mimeType===void 0||!YYt(e.mimeType)||!XYt.test(e.data)?void 0:{data:Uint8Array.from(atob(e.data),n=>n.charCodeAt(0)),mediaType:e.mimeType}}function Sze(e){return e.some(t=>t.type==="image"&&t.data!==void 0)}function i8(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(``);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 KYt,ZYt,XYt,PU=L(()=>{"use strict";Ro();CU();KYt=["get_*","list_*","read_*","search_*","find_*","fetch_*","describe_*"];a(QYt,"globToRegExp");a(xze,"evaluateMcpToolPolicy");a(Fg,"scrubMcpErrorMessage");a(bze,"publicToolName");a(JYt,"hashSuffix");a(wze,"supportedOutputSchema");ZYt=new Set(["image/png","image/jpeg"]),XYt=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/u;a(YYt,"isImageMediaType");a(kze,"decodeImageBlock");a(Sze,"containsImage");a(i8,"mapMcpResultToContentBlocks")});var ame,_ze=L(()=>{ame={name:"dsh-edge",version:"0.28.0-alpha.1",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-file-upload":"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 qw,Eze,Tze,s8=L(()=>{"use strict";_ze();qw=ame.version,Eze=ame.dshEdge.upstreamVersion,Tze=`npx dsh-edge@${qw.includes("-")?"next":"latest"} upgrade`});function ien(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 sen(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 ten)if(i.endsWith(s))throw new Error(`MCP server hostname "${i}" is blocked.`);if(sen(i)){let s=ien(i),o=s??i;for(let l of nen)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 ren)if(l.test(i))throw new Error(`MCP server address "${i}" is a private IP and is blocked.`)}}}}function oen(e){return e?.type==="bearer"&&e.token!==void 0?{Authorization:`Bearer ${e.token}`}:{}}async function Aze(e,t,n){N1(e);let r=new EU(new URL(e),{requestInit:{headers:oen(t),signal:n},fetch:Bw}),i=new SU({name:"dsh-edge",version:qw},{capabilities:{},jsonSchemaValidator:aen});return await i.connect(r),{client:i,close:a(async()=>{await i.close().catch(()=>{})},"close")}}async function Ize(e,t,n){let r=AbortSignal.timeout(La.probeTimeoutMs),i;try{i=await Aze(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 m=0;m<La.maxCatalogPages;m++){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=bze(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=wze(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 OU(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 Aze(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 ten,nen,ren,aen,Bw,o8=L(()=>{"use strict";PBe();uze();vze();PU();CU();s8();ten=[".internal",".local",".localhost"],nen=[/^127\./u,/^10\./u,/^172\.(1[6-9]|2\d|3[01])\./u,/^192\.168\./u,/^0\./u,/^169\.254\./u],ren=[/^::1$/u,/^fc/iu,/^fd/iu,/^fe[89ab][0-9a-f]:/iu];a(ien,"extractMappedIPv4");a(sen,"isIpAddress");a(N1,"assertSafeUrl");a(oen,"buildHeaders");aen=new RU,Bw=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(Aze,"connectClient");a(Ize,"probe");a(OU,"callTool")});var NU={};$t(NU,{buildAuthorizationUrl:()=>gen,discoverEndpoints:()=>men,exchangeCode:()=>yen,isTokenExpired:()=>xen,refreshToken:()=>ven,registerClient:()=>fen});function Oze(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 hen(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 men(e){let t=AbortSignal.timeout(MU),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 Bw(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 Bw(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 fen(e,t,n){let r=AbortSignal.timeout(MU);N1(e);let i=await Bw(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 gen(e,t,n,r,i){let s=Oze(32),o=Oze(64),l=await hen(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 yen(e,t,n,r,i,s){let o=AbortSignal.timeout(MU),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 Bw(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 Mze(await c.json())}async function ven(e,t,n,r){let i=AbortSignal.timeout(MU),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 Bw(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 Mze(await o.json())}function Mze(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 xen(e){return e.expiresAt===void 0?!1:Date.now()>e.expiresAt-12e4}var MU,DU=L(()=>{"use strict";o8();MU=1e4;a(Oze,"randomString");a(hen,"sha256Base64Url");a(men,"discoverEndpoints");a(fen,"registerClient");a(gen,"buildAuthorizationUrl");a(yen,"exchangeCode");a(ven,"refreshToken");a(Mze,"parseTokenResponse");a(xen,"isTokenExpired")});var ar,Wze,qE=L(()=>{mr();$r();ar=class extends Ci{static{a(this,"FsError")}code;constructor(e,t,n){super(e,t,n),this.code=t}},Wze=class extends Dt{static{a(this,"FileSystem")}constructor(e){super(e,"fs")}watch(e,t,n){return n.throwIfAborted(),Promise.reject(new ar("Filesystem watching is not supported by this provider.","FS_IO_ERROR"))}get sandboxMode(){}processPathFromHostPath(e){}}});function d8(e){return GU.test(e)}function VU(e){return e.invocation.modelInvocable}function zE(e){return e.invocation.userInvocable}function Ame(e){let t=nnn(e);return[`<skill_content name="${rnn(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 KYt,ZYt,XYt,PU=L(()=>{"use strict";Ro();CU();KYt=["get_*","list_*","read_*","search_*","find_*","fetch_*","describe_*"];a(QYt,"globToRegExp");a(xze,"evaluateMcpToolPolicy");a(Fg,"scrubMcpErrorMessage");a(bze,"publicToolName");a(JYt,"hashSuffix");a(wze,"supportedOutputSchema");ZYt=new Set(["image/png","image/jpeg"]),XYt=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/u;a(YYt,"isImageMediaType");a(kze,"decodeImageBlock");a(Sze,"containsImage");a(i8,"mapMcpResultToContentBlocks")});var ame,_ze=L(()=>{ame={name:"dsh-edge",version:"0.28.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-file-upload":"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 qw,Eze,Tze,s8=L(()=>{"use strict";_ze();qw=ame.version,Eze=ame.dshEdge.upstreamVersion,Tze=`npx dsh-edge@${qw.includes("-")?"next":"latest"} upgrade`});function ien(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 sen(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 ten)if(i.endsWith(s))throw new Error(`MCP server hostname "${i}" is blocked.`);if(sen(i)){let s=ien(i),o=s??i;for(let l of nen)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 ren)if(l.test(i))throw new Error(`MCP server address "${i}" is a private IP and is blocked.`)}}}}function oen(e){return e?.type==="bearer"&&e.token!==void 0?{Authorization:`Bearer ${e.token}`}:{}}async function Aze(e,t,n){N1(e);let r=new EU(new URL(e),{requestInit:{headers:oen(t),signal:n},fetch:Bw}),i=new SU({name:"dsh-edge",version:qw},{capabilities:{},jsonSchemaValidator:aen});return await i.connect(r),{client:i,close:a(async()=>{await i.close().catch(()=>{})},"close")}}async function Ize(e,t,n){let r=AbortSignal.timeout(La.probeTimeoutMs),i;try{i=await Aze(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 m=0;m<La.maxCatalogPages;m++){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=bze(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=wze(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 OU(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 Aze(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 ten,nen,ren,aen,Bw,o8=L(()=>{"use strict";PBe();uze();vze();PU();CU();s8();ten=[".internal",".local",".localhost"],nen=[/^127\./u,/^10\./u,/^172\.(1[6-9]|2\d|3[01])\./u,/^192\.168\./u,/^0\./u,/^169\.254\./u],ren=[/^::1$/u,/^fc/iu,/^fd/iu,/^fe[89ab][0-9a-f]:/iu];a(ien,"extractMappedIPv4");a(sen,"isIpAddress");a(N1,"assertSafeUrl");a(oen,"buildHeaders");aen=new RU,Bw=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(Aze,"connectClient");a(Ize,"probe");a(OU,"callTool")});var NU={};$t(NU,{buildAuthorizationUrl:()=>gen,discoverEndpoints:()=>men,exchangeCode:()=>yen,isTokenExpired:()=>xen,refreshToken:()=>ven,registerClient:()=>fen});function Oze(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 hen(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 men(e){let t=AbortSignal.timeout(MU),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 Bw(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 Bw(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 fen(e,t,n){let r=AbortSignal.timeout(MU);N1(e);let i=await Bw(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 gen(e,t,n,r,i){let s=Oze(32),o=Oze(64),l=await hen(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 yen(e,t,n,r,i,s){let o=AbortSignal.timeout(MU),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 Bw(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 Mze(await c.json())}async function ven(e,t,n,r){let i=AbortSignal.timeout(MU),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 Bw(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 Mze(await o.json())}function Mze(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 xen(e){return e.expiresAt===void 0?!1:Date.now()>e.expiresAt-12e4}var MU,DU=L(()=>{"use strict";o8();MU=1e4;a(Oze,"randomString");a(hen,"sha256Base64Url");a(men,"discoverEndpoints");a(fen,"registerClient");a(gen,"buildAuthorizationUrl");a(yen,"exchangeCode");a(ven,"refreshToken");a(Mze,"parseTokenResponse");a(xen,"isTokenExpired")});var ar,Wze,qE=L(()=>{mr();$r();ar=class extends Ci{static{a(this,"FsError")}code;constructor(e,t,n){super(e,t,n),this.code=t}},Wze=class extends Dt{static{a(this,"FileSystem")}constructor(e){super(e,"fs")}watch(e,t,n){return n.throwIfAborted(),Promise.reject(new ar("Filesystem watching is not supported by this provider.","FS_IO_ERROR"))}get sandboxMode(){}processPathFromHostPath(e){}}});function d8(e){return GU.test(e)}function VU(e){return e.invocation.modelInvocable}function zE(e){return e.invocation.userInvocable}function Ame(e){let t=nnn(e);return[`<skill_content name="${rnn(e.name)}">`,"<skill_resources>",...t,"</skill_resources>","","<skill_instructions>",e.content,"</skill_instructions>","</skill_content>"].join(`
|
|
168
168
|
`)}function nnn(e){let t=e.resourceBase;if(t===void 0)return[`Resources for this skill are managed by provider "${BE(e.provider)}".`,"Load referenced resources only as needed."];switch(t.kind){case"directory":return[`Base directory for this skill: ${BE(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: ${BE(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: ${BE(t.description)}`,"Load referenced resources only as needed."];default:return Dr(t,"SkillResourceBase.kind")}}function rnn(e){return e.replaceAll("&","&").replaceAll('"',""").replaceAll("<","<")}function BE(e){return e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">")}function snn(e,t){if(Array.isArray(e))return{candidates:e,complete:!0};if(e===null||typeof e!="object")throw cHe(t);let n=e;if(!Array.isArray(n.candidates)||typeof n.complete!="boolean")throw cHe(t);return n}function cHe(e){return new TypeError(`skill provider "${e}" list() must return an array or { candidates, complete } observation`)}function ann(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:tnn,locator:e,...e.path!==void 0?{path:e.path}:{},...e.metadata!==void 0?{metadata:e.metadata}:{}}}function lnn(e,t){if(typeof e.name!="string")throw new TypeError(`skill provider "${t}" returned a non-string skill name`);if(!GU.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(Ime(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 cnn(e){if(!GU.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`);Ime(e.invocation,`runtime skill "${e.name}"`)}function unn(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(!GU.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(Ime(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 dnn(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 Ime(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 pnn(e,t){return hHe(e.name,t.name)}function hHe(e,t){return e<t?-1:e>t?1:0}function hnn(e,t){return e.candidate.rank-t.candidate.rank||e.providerOrder-t.providerOrder||e.localOrder-t.localOrder}function mnn(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 uHe(e,t){return t===void 0?e:(u8(t),new Promise((n,r)=>{let i=a(()=>{t.removeEventListener("abort",s)},"cleanup"),s=a(()=>{i(),r(HU(t.reason))},"onAbort");t.addEventListener("abort",s,{once:!0}),e.then(o=>{i(),n(o)},o=>{i(),r(HU(o))})}))}function u8(e){if(e?.aborted===!0)throw HU(e.reason)}function HU(e){try{if(e instanceof Error)return e}catch{}return new Error(zU(e))}function zU(e){try{return String(e)}catch{return"[unrenderable thrown value]"}}var GU,lHe,enn,BU,tnn,dHe,inn,pHe,onn,Hw=L(()=>{mr();ls();zc();En();GU=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,lHe=128,enn=2,BU="runtime",tnn=250,dHe=600;a(d8,"isSkillName");a(VU,"isModelInvocable");a(zE,"isUserInvocable");a(Ame,"renderSkillContent");a(nnn,"renderResourceHint");a(rnn,"escapeAttr");a(BE,"escapeText");inn=class{static{a(this,"SkillLayer")}providers;runtime=new Map;constructor(e){this.providers=new dg(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}},pHe=class extends Dt{static{a(this,"SkillRegistry")}static Config=j.object({collectCacheMaxEntries:j.number().default(lHe)});collectCacheMaxEntries;layers=new pg(e=>new inn(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??lHe,mnn("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===BU)throw new Error(`"${BU}" 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){cnn(e);let t=uc(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??BU};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=>dnn(n.candidate)).sort(pnn),complete:t.cacheable}}async get(e,t={}){if(!d8(e))return;let n=await this.collect(t);u8(t.signal);let r=n.entries.get(e);if(r===void 0)return;let i=await uHe(r.provider.get(r.candidate,t),t.signal);if(i!==void 0){if(unn(i),i.name!==r.candidate.name){this.invalidateEntry(r);return}return i}}async collect(e){u8(e.signal);let t=1;for(;;){let n=this.revision,r=this.collectCacheKey(e.cwd,MI(e.scope),n),i=this.collectCache.get(r);if(i!==void 0)return{entries:i,cacheable:!0};let s=await this.collectFresh(e);if(u8(e.signal),n!==this.revision){if(t<enn){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(hnn);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){u8(t.signal);let n=[],r=!0,i=0;for(let s of[...e.runtime.values()].sort((o,l)=>hHe(o.name,l.name)))n.push({candidate:ann(s),provider:onn,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 uHe(s.list(t),t.signal)}catch(d){if(t.signal?.aborted===!0)throw HU(t.signal.reason);r=!1,this.ctx.logger.warn(`skill provider "${s.name}" skipped: ${zU(d)}`)}if(c===void 0)continue;let u=snn(c,s.name);u.complete||(r=!1);for(let d of u.candidates)lnn(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: ${zU(n)}`)})}catch(t){this.ctx.logger.warn(`skills/change listener threw: ${zU(t)}`)}}};a(snn,"normalizeProviderObservation");a(cHe,"invalidProviderObservation");onn={name:BU,list(){return Promise.resolve([])},get(e){return Promise.resolve(e.locator)}};a(ann,"runtimeCandidate");a(lnn,"validateCandidate");a(cnn,"validateRuntimeSkill");a(unn,"validateDefinition");a(dnn,"toSummary");a(Ime,"validateInvocation");a(pnn,"compareSkillSummary");a(hHe,"compareCodePoints");a(hnn,"compareIndexedCandidates");a(mnn,"assertPositiveInteger");a(uHe,"waitWithAbort");a(u8,"throwIfAborted");a(HU,"toError");a(zU,"errorMessage")});var Th,XE=L(()=>{Th=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,FVe,Dfe=L(()=>{mr();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"}},FVe=class extends Dt{static{a(this,"DirectoryPicker")}constructor(e){super(e,"directoryPicker")}}});var lz,Wge,ma,cf=L(()=>{lz=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()}},Wge=class{static{a(this,"EventStream")}queue=new lz;waiting=new lz;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}},ma=class extends Wge{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 _dn(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 Edn(e){return typeof e.result=="function"}async function Tdn(e,t){for await(let n of t)e.push(n);e.end(Edn(t)?await t.result():void 0)}function Ih(e,t){let n=Date.now(),r=new ma;return t().then(i=>Tdn(r,i)).catch(i=>{let s=_dn(e,i,n);r.push({type:"error",reason:"error",error:s}),r.end(s)}),r}function tl(e,t){let n={stream:a((r,i,s)=>Ih(r,async()=>(await e()).stream(r,i,s)),"stream"),streamSimple:a((r,i,s)=>Ih(r,async()=>(await e()).streamSimple(r,i,s)),"streamSimple")};return t?.fetchDeferred&&(n.fetchDeferred=(r,i,s)=>Ih(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 Mp=L(()=>{cf();a(_dn,"createSetupErrorMessage");a(Edn,"hasResult");a(Tdn,"forwardStream");a(Ih,"lazyStream");a(tl,"lazyApi")});function Idn(){return globalThis.process?.env}function oZe(){return{async env(e){let t=Idn()?.[e];return typeof t=="string"&&t.trim().length>0?t:void 0},async fileExists(e){try{let t=await sZe("node:fs/promises"),n=e;return n.startsWith("~")&&(n=(await sZe("node:os")).homedir()+n.slice(1)),await t.access(n),!0}catch{return!1}}}}var Adn,sZe,aZe=L(()=>{Adn=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},sZe=a(e=>import(Adn(e)),"importNodeModule");a(Idn,"getProcessEnv");a(oZe,"defaultProviderAuthContext")});function lZe(e){if(e.reason!==void 0)return e.reason;let t=new Error("The operation was aborted");return t.name="AbortError",t}function Rh(e){return e??new AbortController().signal}function Ch(e,t){return t.aborted?(e.catch(()=>{}),Promise.reject(lZe(t))):new Promise((n,r)=>{let i=!1,s=a(()=>t.removeEventListener("abort",o),"cleanup"),o=a(()=>{i||(i=!0,s(),r(lZe(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 cz=L(()=>{a(lZe,"abortReason");a(Rh,"operationSignal");a(Ch,"raceWithAbortSignal")});var uz,cZe=L(()=>{cz();uz=class{static{a(this,"InMemoryCredentialStore")}credentials=new Map;chains=new Map;enqueue(t,n,r){let i=Rh(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)}),Ch(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 x2(e){return e instanceof Error?e.message||e.name:typeof e=="string"?e:String(e)}function Rdn(e){if(!(e instanceof Error))return{name:"ThrownValue",message:x2(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 dz(e,t,n){return{type:e,timestamp:Date.now(),error:Rdn(t),details:n}}function b2(e,t){e.diagnostics=[...e.diagnostics??[],t]}var J8=L(()=>{a(x2,"formatThrownValue");a(Rdn,"extractDiagnosticError");a(dz,"createAssistantMessageDiagnostic");a(b2,"appendAssistantMessageDiagnostic")});function Cdn(e,t){if(t==null)return e;let n=x2(t).trim();return!n||e.includes(n)?e:`${e}: ${n}`}var Qi,pz=L(()=>{J8();Qi=class extends Error{static{a(this,"ModelsError")}code;constructor(t,n,r){super(Cdn(n,r?.cause),r),this.name="ModelsError",this.code=t}};a(Cdn,"withCauseDetail")});function Bge(e,t,n,r){let i=Rh(r?.signal);return Ch(Pdn(e,t,n,r,i),i)}async function Pdn(e,t,n,r,i){i.throwIfAborted();let s=r?.env?Odn(n,r.env):n;if(r?.apiKey!==void 0&&e.auth.apiKey)return qge(s,e.auth.apiKey,e.id,{type:"api_key",key:r.apiKey,env:r.env},i);let o=await $dn(t,e.id,i);if(o){if(o.type==="oauth"&&e.auth.oauth)return Ddn(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 qge(s,e.auth.apiKey,e.id,l,i)}return}return e.auth.apiKey?qge(s,e.auth.apiKey,e.id,void 0,i):void 0}function Odn(e,t){return{env:a(async n=>t[n]||await e.env(n),"env"),fileExists:a(n=>e.fileExists(n),"fileExists")}}async function zge(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(Ndn))}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 Ddn(e,t,n,r,i,s){let o=Math.max(Mdn,s??0),l=a(u=>Date.now()+o>=u.expires,"expiresSoon"),c=r;if(l(c)){let u=await zge(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 qge(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 $dn(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 Mdn,Ndn,uZe=L(()=>{cz();pz();pz();a(Bge,"resolveProviderAuth");a(Pdn,"resolveProviderAuthWithSignal");a(Odn,"overlayEnvAuthContext");Mdn=300*1e3,Ndn=15e3;a(zge,"refreshStoredOAuthCredential");a(Ddn,"resolveStoredOAuth");a(qge,"resolveApiKey");a($dn,"readCredential")});var hz,dZe=L(()=>{hz=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 v6(e){return e.type??"chat"}function uf(e,t){return v6(e)===t}function pZe(e){if(!uf(e,"chat"))throw new Qi("provider",`Model ${e.provider}/${e.id} is not a chat model`)}function hZe(e){if(!uf(e,"image"))throw new Qi("provider",`Model ${e.provider}/${e.id} is not an image model`)}function mZe(e){if(!uf(e,"classifier"))throw new Qi("provider",`Model ${e.provider}/${e.id} is not a classifier model`)}function fZe(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 Hge(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 Gge(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 Vge=L(()=>{pz();a(v6,"getModelType");a(uf,"isModelType");a(pZe,"assertChatModel");a(hZe,"assertImageModel");a(mZe,"assertClassifierModel");a(fZe,"assertClassifierInputSupported");a(Hge,"imageErrorResult");a(Gge,"classifierErrorResult")});function mz(e,t=`
|
|
169
169
|
`){return typeof e=="string"?e:e.filter(n=>n.type==="text").map(n=>n.text).join(t)}function Sc(e){let t=[mz(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
|
|
|
@@ -8404,7 +8404,7 @@ The web request used endpoint ${JSON.stringify(e)}. Search endpoint configuratio
|
|
|
8404
8404
|
.error { padding: .75rem; border-radius: .5rem; background: #461d2b; color: #ffd6df; }
|
|
8405
8405
|
.hint { margin: 1.5rem 0 0; font-size: .875rem; }
|
|
8406
8406
|
code { padding: .1rem .3rem; border-radius: .3rem; background: #0c1222; color: #edf2ff; }
|
|
8407
|
-
`}a(Ykt,"pageStyles");s8();var QAe="enabled",JAe=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")}),mN=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")}),ZAe=Object.freeze({id:"container",capabilities:Object.freeze(["container"]),plan:"paid",shell:"linux-container",probe:a(e=>e.DSH_EDGE_CONTAINER_RUNTIME===QAe?"available":"needs-binding","probe")}),Tar=Object.freeze([ZAe,mN,JAe]);function XAe(e,t=Tar){return t.filter(n=>n.probe(e)==="available")}a(XAe,"availableEdgeRuntimeProviders");function YAe(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(YAe,"resolveEdgeRuntimeSelection");function bX(e){let t=XAe(e),{bash:n,container:r}=YAe(t);return t.find(i=>i.id===(r??n)).shell}a(bX,"resolveEdgeRuntimeShell");function Aar(){return"dsh-edge@0.28.0-alpha.1/isolated"}a(Aar,"resolveEdgeDeploymentId");function sS(e){return{baseURL:gke(e.DEEPSEEK_BASE_URL),maxTokens:xke(e.DEEPSEEK_MAX_OUTPUT_TOKENS),model:kk(e.DEEPSEEK_MODEL),reasoningEffort:yke(e.DEEPSEEK_REASONING_EFFORT),searchBaseURL:EM(e.DEEPSEEK_SEARCH_BASE_URL),streamIdleTimeoutMs:vke(e.DEEPSEEK_STREAM_IDLE_TIMEOUT_MS),commandTimeoutPolicy:ob(e.DSH_EDGE_DEFAULT_COMMAND_TIMEOUT_MS,e.DSH_EDGE_MAX_COMMAND_TIMEOUT_MS)}}a(sS,"resolveEdgeDeploymentConfig");function Iar(e){return typeof e.DEEPSEEK_API_KEY=="string"&&e.DEEPSEEK_API_KEY.trim().length>0}a(Iar,"edgeDeploymentApiKeyConfigured");function Rar(e){let t=gke(e),n=new URL(t);return n.search.length===0&&n.hash.length===0?t:(n.search="",n.hash="",n.href)}a(Rar,"projectedEdgeBaseURL");function e5e(e,t){return{shell:bX(e),storage:"durable-object-sqlite-vfs",attachmentStorage:t??(e.DSH_EDGE_ATTACHMENTS===void 0?"temporary-do":"private-r2"),deploymentId:Aar(),apiKeyConfigured:Iar(e),baseURL:Rar(e.DEEPSEEK_BASE_URL),maxTokens:xke(e.DEEPSEEK_MAX_OUTPUT_TOKENS),model:kk(e.DEEPSEEK_MODEL),reasoningEffort:yke(e.DEEPSEEK_REASONING_EFFORT),searchBaseURL:EM(e.DEEPSEEK_SEARCH_BASE_URL),streamIdleTimeoutMs:vke(e.DEEPSEEK_STREAM_IDLE_TIMEOUT_MS),commandTimeoutPolicy:ob(e.DSH_EDGE_DEFAULT_COMMAND_TIMEOUT_MS,e.DSH_EDGE_MAX_COMMAND_TIMEOUT_MS)}}a(e5e,"resolveEdgeDeploymentProfile");function wX(e){sS(e);let t=e5e(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:qw,upstreamVersion:Eze,status:"ready"}}a(wX,"resolveEdgeDeploymentHealth");import{AsyncLocalStorage as Q0r}from"node:async_hooks";import{RpcTarget as Car}from"cloudflare:workers";function Par(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(Par,"startHeartbeat");async function Oar(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(Oar,"probeComputerdHealth");var Mar="computer.internal",Nar="/health",t5e="/api",Dar=8080,$ar=3e4,Lar=2e4,jar=1,Far=2e3,Uar=250,War=2e3;function qar(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(qar,"bearerMatches");var SX=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??Mar,containerPort:e.containerPort??Dar,connectTimeoutMs:e.connectTimeoutMs??$ar,heartbeatIntervalMs:e.heartbeatIntervalMs??Lar,restartAttempts:e.restartAttempts??jar,healthProbeTimeoutMs:e.healthProbeTimeoutMs??Far,healthRetryInitialDelayMs:e.healthRetryInitialDelayMs??Uar,healthRetryMaxDelayMs:e.healthRetryMaxDelayMs??War}}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 Eu(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 Eu(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.#f(t,e,s);let o=await this.#d(e),l=oee(o),c,u=new Promise(p=>{let h=!1,m=a(()=>{h||(h=!0,c?.(),p(),this.#u=void 0)},"onClose");o.addEventListener("close",m,{once:!0}),o.addEventListener("error",m,{once:!0}),l.onRpcBroken(m)});this.#e.heartbeatIntervalMs>0&&(c=Par({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(rI),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(aD),i.delete(rI);let l=new Request(e,{headers:i});return this.#n.gateway.fetch(new Request(o,l))}if(new URL(e.url).pathname!==t5e)return new Response("not found",{status:404});if(e.headers.get("upgrade")!=="websocket")return new Response(`${t5e} requires a websocket upgrade`,{status:400});if(!qar(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.#m(e,h).then(()=>!0,m=>(d=m,!1)))return p;if(c<s)try{({runtimeId:p}=await e.restart({env:t,enableInternet:this.#n.mode==="direct"})),u++}catch(m){throw this.#a?.(m),this.#o(),new Eu(this.#h("restart",{attempt:c,maxAttempts:s,restarts:u,lastError:m}),{cause:m})}}throw this.#a?.(new Error("computerd never became healthy")),this.#o(),new Eu(this.#h("health",{attempt:c,maxAttempts:s,restarts:u,lastError:d,priorExit:r}),d instanceof Error?{cause:d}:void 0)}async#m(e,t){let n=this.#e.healthRetryInitialDelayMs,r;for(;Date.now()<t;)try{await Oar(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 Bar(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=${eSt(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 Eu(`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#f(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:Nar,api:t5e,healthTimeoutMs:r})})}catch(s){throw this.#a?.(s),this.#o(),new Eu(`CloudflareContainerBackend(${this.id}) [stage=connect]: POST /connect failed: ${eSt(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 Eu(`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 Eu(`CloudflareContainerBackend(${this.id}) [stage=ws]: /api upgrade did not arrive within ${this.#e.connectTimeoutMs}ms`)),n)})])}finally{r&&clearTimeout(r),this.#o()}}};function Bar(e){return new Promise(t=>setTimeout(t,e))}a(Bar,"sleep");function eSt(e){return e instanceof Error?e.message:String(e)}a(eSt,"describeError");var tSt="computer:container-client-secret",zar=16;function Har(){let e=crypto.getRandomValues(new Uint8Array(zar));return Array.from(e,t=>t.toString(16).padStart(2,"0")).join("")}a(Har,"generate");var Gar=class{static{a(this,"ContainerClientSecret")}storage;constructor(e){this.storage=e}async ensure(){let e=await this.storage.get(tSt);if(typeof e=="string"&&e.length>0)return e;let t=Har();return await this.storage.put(tSt,t),t}},nSt="computer:container-launch-record";async function rSt(e){return{enableInternet:e.enableInternet,envDigest:await Kar(e.env)}}a(rSt,"launchRecordFor");function Var(e,t){return e.enableInternet===t.enableInternet&&e.envDigest===t.envDigest}a(Var,"sameLaunch");async function Kar(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(Kar,"digestEnv");var Qar=class{static{a(this,"CurrentContainerLaunchRecord")}storage;constructor(e){this.storage=e}async get(){return await this.storage.get(nSt)??null}async set(e){await this.storage.put(nSt,e)}},iSt=new WeakMap;function i5e(e){let t=iSt.get(e);return t===void 0&&(t={exit:null,currentGeneration:0,expectedExitGeneration:null,currentMonitorSettled:null},iSt.set(e,t)),t}a(i5e,"getContainerLifecycle");function kX(e){return i5e(e).exit}a(kX,"containerExitInfo");function sSt(e){return e===void 0?"exited normally":e instanceof Error?e.message:String(e)}a(sSt,"formatExitReason");function oSt(e,t,n){let r=i5e(e);r.currentGeneration+=1;let i=r.currentGeneration;r.exit=null,r.currentMonitorSettled=t.monitor().then(()=>aSt(r,i,void 0,n),s=>aSt(r,i,s,n))}a(oSt,"installContainerMonitor");async function n5e(e,t){let n=i5e(e);n.expectedExitGeneration=n.currentGeneration;let r=n.currentMonitorSettled;await t.destroy(),r&&await r}a(n5e,"destroyContainerExpectingExit");async function aSt(e,t,n,r){if(t!==e.currentGeneration)return;let i=e.expectedExitGeneration===t;i&&(e.expectedExitGeneration=null);let s=sSt(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:sSt(l),exitedAt:Date.now()})}}a(aSt,"recordExit");var r5e="computer:container-runtime-identity",Jar=class{static{a(this,"CurrentContainerRuntimeIdentity")}storage;constructor(e){this.storage=e}async get(){return await this.storage.get(r5e)??null}async markStarted(){let e={id:crypto.randomUUID()};return await this.storage.put(r5e,e),e}async clear(e){(await this.get())?.id===e.id&&await this.storage.delete(r5e)}},Zar=class extends Car{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 Jar(e.storage),this.#t=new Gar(e.storage),this.#i=new Qar(e.storage)}async start(e){let t=kX(this.#n),n=await this.#t.ensure(),r=await rSt(e);if(t!==null){try{await n5e(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||!Var(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 n5e(this.#n,this.#e)}catch{}return this.#s(e,n,r,"relaunched")}let s=await this.#r.get()??await this.#r.markStarted();return oSt(this.#n,this.#e,()=>this.#r.clear(s)),{runtimeId:s.id,clientSecret:n,outcome:"adopted"}}async restart(e){try{await n5e(this.#n,this.#e)}catch{}let t=await this.#t.ensure();return this.#s(e,t,await rSt(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),oSt(this.#n,this.#e,()=>this.#r.clear(i)),{runtimeId:i.id,clientSecret:t,outcome:r}}async status(){return{running:this.#e.running,exit:kX(this.#n)}}async exitInfo(){return kX(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=kX(this.#n);if(r!==null)throw new Eu(`container exited: ${r.reason}`);return this.#e.getTcpPort(e).fetch(t,n)}port(e){return this.#e.getTcpPort(e)}};function lSt(e){class t extends e{static{a(this,"WithWorkspaceContainer")}getWorkspaceContainer(){return new Zar(this.ctx)}}return t}a(lSt,"withWorkspaceContainer");var Xar={session:"sessions",skill:"skills",agentPreset:"agentPresets",subagent:"subagents",goal:"goals",event:"events",download:"downloads"};function uSt(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=Xar[s]??s,c=e[l];if(c===void 0)return;let u=c[o];return typeof u=="function"?u:void 0}a(uSt,"resolve");function Yar(e,t){return Response.json({type:"server-response",rpcId:e,result:{ok:!1,error:t}})}a(Yar,"errorResponse");async function s5e(e,t,n,r,i){let s=uSt(e,t);if(s!==void 0)return await s({rpcId:n,payload:r},i)}a(s5e,"callEdgeApi");async function dSt(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(uSt(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 s5e(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 Yar(o,{code:"gateway/internal",message:String(c),details:{}})}}a(dSt,"dispatchEdgeApi");$r();lo();Bv();import{DurableObject as J0r}from"cloudflare:workers";var _X=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 elr(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 elr(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(elr,"untilAborted");import{WorkerEntrypoint as GGi}from"cloudflare:workers";var kS=Nl(pSt(),1);import{gunzipSync as _ur}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,m=[{oldPos:-1,lastComponent:void 0}],g=this.extractCommon(m[0],n,t,0,r);if(m[0].oldPos+1>=c&&g+1>=l)return o(this.buildValues(m[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=m[b-1],T=m[b+1];k&&(m[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){m[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;m[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,m){let g=r[u+m];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 o5e=class extends fN{static{a(this,"LineDiff")}constructor(){super(...arguments),this.tokenize=nlr}equals(t,n,r){return r.ignoreWhitespace?((!r.newlineIsToken||!t.includes(`
|
|
8407
|
+
`}a(Ykt,"pageStyles");s8();var QAe="enabled",JAe=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")}),mN=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")}),ZAe=Object.freeze({id:"container",capabilities:Object.freeze(["container"]),plan:"paid",shell:"linux-container",probe:a(e=>e.DSH_EDGE_CONTAINER_RUNTIME===QAe?"available":"needs-binding","probe")}),Tar=Object.freeze([ZAe,mN,JAe]);function XAe(e,t=Tar){return t.filter(n=>n.probe(e)==="available")}a(XAe,"availableEdgeRuntimeProviders");function YAe(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(YAe,"resolveEdgeRuntimeSelection");function bX(e){let t=XAe(e),{bash:n,container:r}=YAe(t);return t.find(i=>i.id===(r??n)).shell}a(bX,"resolveEdgeRuntimeShell");function Aar(){return"dsh-edge@0.28.0/isolated"}a(Aar,"resolveEdgeDeploymentId");function sS(e){return{baseURL:gke(e.DEEPSEEK_BASE_URL),maxTokens:xke(e.DEEPSEEK_MAX_OUTPUT_TOKENS),model:kk(e.DEEPSEEK_MODEL),reasoningEffort:yke(e.DEEPSEEK_REASONING_EFFORT),searchBaseURL:EM(e.DEEPSEEK_SEARCH_BASE_URL),streamIdleTimeoutMs:vke(e.DEEPSEEK_STREAM_IDLE_TIMEOUT_MS),commandTimeoutPolicy:ob(e.DSH_EDGE_DEFAULT_COMMAND_TIMEOUT_MS,e.DSH_EDGE_MAX_COMMAND_TIMEOUT_MS)}}a(sS,"resolveEdgeDeploymentConfig");function Iar(e){return typeof e.DEEPSEEK_API_KEY=="string"&&e.DEEPSEEK_API_KEY.trim().length>0}a(Iar,"edgeDeploymentApiKeyConfigured");function Rar(e){let t=gke(e),n=new URL(t);return n.search.length===0&&n.hash.length===0?t:(n.search="",n.hash="",n.href)}a(Rar,"projectedEdgeBaseURL");function e5e(e,t){return{shell:bX(e),storage:"durable-object-sqlite-vfs",attachmentStorage:t??(e.DSH_EDGE_ATTACHMENTS===void 0?"temporary-do":"private-r2"),deploymentId:Aar(),apiKeyConfigured:Iar(e),baseURL:Rar(e.DEEPSEEK_BASE_URL),maxTokens:xke(e.DEEPSEEK_MAX_OUTPUT_TOKENS),model:kk(e.DEEPSEEK_MODEL),reasoningEffort:yke(e.DEEPSEEK_REASONING_EFFORT),searchBaseURL:EM(e.DEEPSEEK_SEARCH_BASE_URL),streamIdleTimeoutMs:vke(e.DEEPSEEK_STREAM_IDLE_TIMEOUT_MS),commandTimeoutPolicy:ob(e.DSH_EDGE_DEFAULT_COMMAND_TIMEOUT_MS,e.DSH_EDGE_MAX_COMMAND_TIMEOUT_MS)}}a(e5e,"resolveEdgeDeploymentProfile");function wX(e){sS(e);let t=e5e(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:qw,upstreamVersion:Eze,status:"ready"}}a(wX,"resolveEdgeDeploymentHealth");import{AsyncLocalStorage as Q0r}from"node:async_hooks";import{RpcTarget as Car}from"cloudflare:workers";function Par(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(Par,"startHeartbeat");async function Oar(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(Oar,"probeComputerdHealth");var Mar="computer.internal",Nar="/health",t5e="/api",Dar=8080,$ar=3e4,Lar=2e4,jar=1,Far=2e3,Uar=250,War=2e3;function qar(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(qar,"bearerMatches");var SX=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??Mar,containerPort:e.containerPort??Dar,connectTimeoutMs:e.connectTimeoutMs??$ar,heartbeatIntervalMs:e.heartbeatIntervalMs??Lar,restartAttempts:e.restartAttempts??jar,healthProbeTimeoutMs:e.healthProbeTimeoutMs??Far,healthRetryInitialDelayMs:e.healthRetryInitialDelayMs??Uar,healthRetryMaxDelayMs:e.healthRetryMaxDelayMs??War}}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 Eu(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 Eu(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.#f(t,e,s);let o=await this.#d(e),l=oee(o),c,u=new Promise(p=>{let h=!1,m=a(()=>{h||(h=!0,c?.(),p(),this.#u=void 0)},"onClose");o.addEventListener("close",m,{once:!0}),o.addEventListener("error",m,{once:!0}),l.onRpcBroken(m)});this.#e.heartbeatIntervalMs>0&&(c=Par({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(rI),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(aD),i.delete(rI);let l=new Request(e,{headers:i});return this.#n.gateway.fetch(new Request(o,l))}if(new URL(e.url).pathname!==t5e)return new Response("not found",{status:404});if(e.headers.get("upgrade")!=="websocket")return new Response(`${t5e} requires a websocket upgrade`,{status:400});if(!qar(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.#m(e,h).then(()=>!0,m=>(d=m,!1)))return p;if(c<s)try{({runtimeId:p}=await e.restart({env:t,enableInternet:this.#n.mode==="direct"})),u++}catch(m){throw this.#a?.(m),this.#o(),new Eu(this.#h("restart",{attempt:c,maxAttempts:s,restarts:u,lastError:m}),{cause:m})}}throw this.#a?.(new Error("computerd never became healthy")),this.#o(),new Eu(this.#h("health",{attempt:c,maxAttempts:s,restarts:u,lastError:d,priorExit:r}),d instanceof Error?{cause:d}:void 0)}async#m(e,t){let n=this.#e.healthRetryInitialDelayMs,r;for(;Date.now()<t;)try{await Oar(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 Bar(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=${eSt(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 Eu(`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#f(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:Nar,api:t5e,healthTimeoutMs:r})})}catch(s){throw this.#a?.(s),this.#o(),new Eu(`CloudflareContainerBackend(${this.id}) [stage=connect]: POST /connect failed: ${eSt(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 Eu(`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 Eu(`CloudflareContainerBackend(${this.id}) [stage=ws]: /api upgrade did not arrive within ${this.#e.connectTimeoutMs}ms`)),n)})])}finally{r&&clearTimeout(r),this.#o()}}};function Bar(e){return new Promise(t=>setTimeout(t,e))}a(Bar,"sleep");function eSt(e){return e instanceof Error?e.message:String(e)}a(eSt,"describeError");var tSt="computer:container-client-secret",zar=16;function Har(){let e=crypto.getRandomValues(new Uint8Array(zar));return Array.from(e,t=>t.toString(16).padStart(2,"0")).join("")}a(Har,"generate");var Gar=class{static{a(this,"ContainerClientSecret")}storage;constructor(e){this.storage=e}async ensure(){let e=await this.storage.get(tSt);if(typeof e=="string"&&e.length>0)return e;let t=Har();return await this.storage.put(tSt,t),t}},nSt="computer:container-launch-record";async function rSt(e){return{enableInternet:e.enableInternet,envDigest:await Kar(e.env)}}a(rSt,"launchRecordFor");function Var(e,t){return e.enableInternet===t.enableInternet&&e.envDigest===t.envDigest}a(Var,"sameLaunch");async function Kar(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(Kar,"digestEnv");var Qar=class{static{a(this,"CurrentContainerLaunchRecord")}storage;constructor(e){this.storage=e}async get(){return await this.storage.get(nSt)??null}async set(e){await this.storage.put(nSt,e)}},iSt=new WeakMap;function i5e(e){let t=iSt.get(e);return t===void 0&&(t={exit:null,currentGeneration:0,expectedExitGeneration:null,currentMonitorSettled:null},iSt.set(e,t)),t}a(i5e,"getContainerLifecycle");function kX(e){return i5e(e).exit}a(kX,"containerExitInfo");function sSt(e){return e===void 0?"exited normally":e instanceof Error?e.message:String(e)}a(sSt,"formatExitReason");function oSt(e,t,n){let r=i5e(e);r.currentGeneration+=1;let i=r.currentGeneration;r.exit=null,r.currentMonitorSettled=t.monitor().then(()=>aSt(r,i,void 0,n),s=>aSt(r,i,s,n))}a(oSt,"installContainerMonitor");async function n5e(e,t){let n=i5e(e);n.expectedExitGeneration=n.currentGeneration;let r=n.currentMonitorSettled;await t.destroy(),r&&await r}a(n5e,"destroyContainerExpectingExit");async function aSt(e,t,n,r){if(t!==e.currentGeneration)return;let i=e.expectedExitGeneration===t;i&&(e.expectedExitGeneration=null);let s=sSt(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:sSt(l),exitedAt:Date.now()})}}a(aSt,"recordExit");var r5e="computer:container-runtime-identity",Jar=class{static{a(this,"CurrentContainerRuntimeIdentity")}storage;constructor(e){this.storage=e}async get(){return await this.storage.get(r5e)??null}async markStarted(){let e={id:crypto.randomUUID()};return await this.storage.put(r5e,e),e}async clear(e){(await this.get())?.id===e.id&&await this.storage.delete(r5e)}},Zar=class extends Car{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 Jar(e.storage),this.#t=new Gar(e.storage),this.#i=new Qar(e.storage)}async start(e){let t=kX(this.#n),n=await this.#t.ensure(),r=await rSt(e);if(t!==null){try{await n5e(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||!Var(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 n5e(this.#n,this.#e)}catch{}return this.#s(e,n,r,"relaunched")}let s=await this.#r.get()??await this.#r.markStarted();return oSt(this.#n,this.#e,()=>this.#r.clear(s)),{runtimeId:s.id,clientSecret:n,outcome:"adopted"}}async restart(e){try{await n5e(this.#n,this.#e)}catch{}let t=await this.#t.ensure();return this.#s(e,t,await rSt(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),oSt(this.#n,this.#e,()=>this.#r.clear(i)),{runtimeId:i.id,clientSecret:t,outcome:r}}async status(){return{running:this.#e.running,exit:kX(this.#n)}}async exitInfo(){return kX(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=kX(this.#n);if(r!==null)throw new Eu(`container exited: ${r.reason}`);return this.#e.getTcpPort(e).fetch(t,n)}port(e){return this.#e.getTcpPort(e)}};function lSt(e){class t extends e{static{a(this,"WithWorkspaceContainer")}getWorkspaceContainer(){return new Zar(this.ctx)}}return t}a(lSt,"withWorkspaceContainer");var Xar={session:"sessions",skill:"skills",agentPreset:"agentPresets",subagent:"subagents",goal:"goals",event:"events",download:"downloads"};function uSt(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=Xar[s]??s,c=e[l];if(c===void 0)return;let u=c[o];return typeof u=="function"?u:void 0}a(uSt,"resolve");function Yar(e,t){return Response.json({type:"server-response",rpcId:e,result:{ok:!1,error:t}})}a(Yar,"errorResponse");async function s5e(e,t,n,r,i){let s=uSt(e,t);if(s!==void 0)return await s({rpcId:n,payload:r},i)}a(s5e,"callEdgeApi");async function dSt(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(uSt(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 s5e(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 Yar(o,{code:"gateway/internal",message:String(c),details:{}})}}a(dSt,"dispatchEdgeApi");$r();lo();Bv();import{DurableObject as J0r}from"cloudflare:workers";var _X=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 elr(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 elr(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(elr,"untilAborted");import{WorkerEntrypoint as GGi}from"cloudflare:workers";var kS=Nl(pSt(),1);import{gunzipSync as _ur}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,m=[{oldPos:-1,lastComponent:void 0}],g=this.extractCommon(m[0],n,t,0,r);if(m[0].oldPos+1>=c&&g+1>=l)return o(this.buildValues(m[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=m[b-1],T=m[b+1];k&&(m[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){m[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;m[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,m){let g=r[u+m];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 o5e=class extends fN{static{a(this,"LineDiff")}constructor(){super(...arguments),this.tokenize=nlr}equals(t,n,r){return r.ignoreWhitespace?((!r.newlineIsToken||!t.includes(`
|
|
8408
8408
|
`))&&(t=t.trim()),(!r.newlineIsToken||!n.includes(`
|
|
8409
8409
|
`))&&(n=n.trim())):r.ignoreNewlineAtEof&&!r.newlineIsToken&&(t.endsWith(`
|
|
8410
8410
|
`)&&(t=t.slice(0,-1)),n.endsWith(`
|