typebulb 0.59.5 → 0.59.7
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/SKILL.md +2 -2
- package/dist/agents/claude/client.js +22 -22
- package/dist/agents/codex/client.js +21 -21
- package/dist/agents/pi/client.js +22 -22
- package/dist/index.js +2 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -305,10 +305,10 @@ ${t.comment}`:t.comment}this.doc.range[2]=t.offset;break}default:this.errors.pus
|
|
|
305
305
|
`||i==="&&"||i==="||")&&(e.push(n.slice(t,r)),(i==="&&"||i==="||")&&r++,t=r+1)}return e.push(n.slice(t)),e.map(r=>r.trim()).filter(Boolean)}function QA(n){return(n.match(/'[^']*'|"[^"]*"|\S+/g)??[]).map(e=>/^(['"])(.*)\1$/.exec(e)?.[2]??e)}function ZA(n){let e=[],t=/tools\.([A-Za-z_$][\w$]*)\s*\(/g;for(let r=t.exec(n);r;r=t.exec(n)){let s=r.index+r[0].length-1,i=Cg(n,s);if(i<0)break;e.push({fn:r[1],arg:_g(n.slice(s+1,i).trim(),n)}),t.lastIndex=i+1}return e}function _g(n,e){let t=n[0];if(t==='"'||t==="'"||t==="`")return vo(n,0)===n.length-1?Rg(n.slice(1,-1)):n;if(t==="{"){for(let r of[n,tT(n)])try{let s=JSON.parse(r);if(ms(s))return s}catch{}return n}if(/^[A-Za-z_$][\w$]*$/.test(n)){let r=new RegExp(`\\b(?:const|let|var)\\s+${n.replace(/\$/g,"\\$")}\\s*=\\s*`).exec(e);if(r){let s=r.index+r[0].length,i=e[s],o=i==='"'||i==="'"||i==="`"?vo(e,s):i==="{"?Cg(e,s):-1;if(o>s)return _g(e.slice(s,o+1),"")}}return n}function Cg(n,e){let t=0;for(let r=e;r<n.length;r++){let s=n[r];if(s==='"'||s==="'"||s==="`"){if(r=vo(n,r),r<0)return-1}else if(s==="("||s==="["||s==="{")t++;else if((s===")"||s==="]"||s==="}")&&--t===0)return r}return-1}function vo(n,e){let t=n[e];for(let r=e+1;r<n.length;r++)if(n[r]==="\\")r++;else if(n[r]===t)return r;return-1}function Rg(n){return n.replace(/\\(?:u\{([0-9a-fA-F]+)\}|u([0-9a-fA-F]{4})|x([0-9a-fA-F]{2})|([\s\S]))/g,(e,t,r,s,i)=>t||r||s?String.fromCodePoint(parseInt(t||r||s,16)):eT[i]??i)}function tT(n){let e=/[A-Za-z_$][\w$]*(?=\s*:)/y,t=/,(?=\s*[}\]])/y,r="",s="";for(let i=0;i<n.length;i++){let o=n[i];if(o==='"'||o==="'"||o==="`"){let l=vo(n,i);if(l<0)return n;r+=JSON.stringify(Rg(n.slice(i+1,l))),i=l,s=o;continue}e.lastIndex=i;let a=s==="{"||s===","?e.exec(n):null;if(a){r+=`"${a[0]}"`,i+=a[0].length-1,s='"';continue}t.lastIndex=i,!t.test(n)&&(r+=o,/\s/.test(o)||(s=o))}return r}function Eg(n){let e=[],t=[],r=!1;for(let s of n.split(/\r?\n/)){let i=/^\*\*\* (Update|Add|Delete) File: (.+)$/.exec(s);if(i){let o=i[2].trim();e.push(o),t.push(`--- ${i[1]==="Add"?"/dev/null":`a/${o}`}`,`+++ ${i[1]==="Delete"?"/dev/null":`b/${o}`}`),r=!0;continue}if(!/^\*\*\* (Begin|End) Patch$/.test(s)){if(s.startsWith("*** Move to:")){t.push(s);continue}r&&!s.startsWith("@@")&&t.push("@@"),r=!1,t.push(s)}}return r&&t.push("@@"),{files:e,diff:t.join(`
|
|
306
306
|
`)}}function nT(n,e){let t=/^Script (completed|failed|running with cell ID (\d+))\nWall time [^\n]*\nOutput:\n([\s\S]*)$/.exec(n);if(!t)return{content:n,isError:!1,digest:Ie(n)};let r=t[3].replace(/^\n+/,"").replace(/^Script error:\n/,""),s=t[1]==="failed",i=rT(r);return i&&(r=i.output,i.exit_code&&(s=!0)),t[2]?{content:r,isError:s,digest:`running (cell ${t[2]})`}:e?.kind==="read"&&!s?{content:r,isError:s,digest:ve(sT(r),"line")}:e?.kind==="patch"&&!s?{content:e.digest,isError:s,digest:e.digest}:{content:r,isError:s,digest:Ie(r)}}function rT(n){if(n.startsWith("{"))try{let e=JSON.parse(n);if(ms(e)&&typeof e.output=="string")return{output:e.output,exit_code:typeof e.exit_code=="number"?e.exit_code:void 0}}catch{}}function iT(n){if(typeof n=="string"&&n)try{let e=JSON.parse(n);if(e&&typeof e=="object"&&!Array.isArray(e))return e}catch{}return{arguments:n??""}}function Ig(n,e){let t;try{t=Tg(n,"r")}catch{return}try{let r=Buffer.alloc(e),s=Pg(t,r,0,e,0);return{text:r.subarray(0,s).toString("utf8"),bytes:s}}finally{Og(t)}}function aT(n,e){let t;try{t=Tg(n,"r")}catch{return}try{let r=Math.max(0,NA(t).size-e),s=Buffer.alloc(e),i=Pg(t,s,0,e,r);return{text:s.subarray(0,i).toString("utf8"),partial:r>0}}finally{Og(t)}}function cT(n){for(let e of lT){let t=aT(n,e);if(t===void 0)return;let r=t.text.split(`
|
|
307
307
|
`);t.partial&&r.shift();for(let s=r.length-1;s>=0;s--)if(r[s].trim())try{let i=Date.parse(JSON.parse(r[s]).timestamp??"");if(!Number.isNaN(i))return i}catch{}if(!t.partial)break}}function uT(n){let t=Ig(n,65536);if(t===void 0)return;let r=t.text.indexOf(`
|
|
308
|
-
`);if(r<0)return t.bytes>=65536?{cwd:"",subagent:!1}:void 0;try{let s=JSON.parse(t.text.slice(0,r)),i=s?.type==="session_meta"?s.payload:void 0;return typeof i?.cwd!="string"?{cwd:"",subagent:!1}:{cwd:i.cwd,subagent:typeof i.source=="object"&&!!i.source?.subagent}}catch{return{cwd:"",subagent:!1}}}var DA,ms,uu,qA,KA,HA,YA,VA,eT,sT,Ag,oT,Hn,lT,du=v(()=>{"use strict";fs();yo();DA=["<permissions instructions>","<apps_instructions>","<plugins_instructions>","<skills_instructions>","<recommended_plugins>","<environment_context>","<
|
|
308
|
+
`);if(r<0)return t.bytes>=65536?{cwd:"",subagent:!1}:void 0;try{let s=JSON.parse(t.text.slice(0,r)),i=s?.type==="session_meta"?s.payload:void 0;return typeof i?.cwd!="string"?{cwd:"",subagent:!1}:{cwd:i.cwd,subagent:typeof i.source=="object"&&!!i.source?.subagent}}catch{return{cwd:"",subagent:!1}}}var DA,ms,uu,qA,KA,HA,YA,VA,eT,sT,Ag,oT,Hn,lT,du=v(()=>{"use strict";fs();yo();DA=["<permissions instructions>","<apps_instructions>","<plugins_instructions>","<skills_instructions>","<recommended_plugins>","<environment_context>","<node_repl_review_evidence>","# AGENTS.md instructions for "];ms=n=>!!n&&typeof n=="object"&&!Array.isArray(n),uu=n=>n==="shell_command"||n==="exec_command",qA=new Set(["max_output_tokens","yield_time_ms","timeout_ms"]);KA=/^(Get-Content|gc|cat|type|nl|bat|sed|head|tail)$/i,HA=/^-(Path|LiteralPath)$/i,YA=/^-(Encoding|TotalCount|Head|Tail|ReadCount|Delimiter)$/i,VA=/^(sed -n|head|tail|Select-Object|select)(\s|$)/i;eT={n:`
|
|
309
309
|
`,t:" ",r:"\r",b:"\b",f:"\f",v:"\v",0:"\0"};sT=n=>n?n.replace(/\r?\n$/,"").split(`
|
|
310
310
|
`).length:0;Ag=n=>{let e=BA(n);return process.platform==="win32"?e.toLowerCase():e},oT=12e4,Hn=class extends It{constructor(t=cu(kg(),".codex","sessions")){super();this.root=t}displayName="Codex Mirror";#e=0;#i;#t=new Map;#n=new Map;#f=new Map;#r=new Map;detectsSelf(){return!!process.env.CODEX_THREAD_ID}detectsInstalled(){return LA(cu(kg(),".codex"))}sessionsDir(t){return this.root}listSessionFiles(t){let r=Ag(t),s=[];for(let i of this.#o()){let o=0,a=0;try{let f=Sg(i);if(!f.isFile())continue;o=f.size,a=f.mtimeMs}catch{continue}let l=this.#t.get(i);if(l===void 0){if(l=uT(i),l===void 0)continue;this.#t.set(i,l)}if(l.subagent||Ag(l.cwd)!==r)continue;let c=MA(i,".jsonl");this.#f.set(c,i),s.push({sessionId:c,file:i,mtime:this.#c(i,o,a)})}return s}#c(t,r,s){let i=this.#n.get(t);if(i&&i.size===r&&i.mtime===s)return i.ms;let o=Math.max(s,cT(t)??0);return this.#n.set(t,{size:r,mtime:s,ms:o}),o}#o(){let t=[],r=s=>{try{return $A(s).map(i=>cu(s,i))}catch{return[]}};for(let s of r(this.root))for(let i of r(s))for(let o of r(i))for(let a of r(o))a.endsWith(".jsonl")&&t.push(a);return t}parseEntry(t){let r;try{r=JSON.parse(t)}catch{return null}return!r||typeof r.type!="string"?null:r}idOf(t){return t.ord===void 0&&(t.ord=String(this.#e++),t.parent=this.#i,this.#i=t.ord),t.ord}parentOf(t){return t.parent}timestampOf(t){return t.timestamp}isSidechain(t){return!1}isLeafType(t){return!0}isRecoveryNoise(t){return!1}apply(t,r){let s=[],i=t.payload;if(!i)return{events:s};let o=()=>{let a=Date.parse(t.timestamp??"");return!isNaN(a)&&a>=r};if(t.type==="response_item"){if(i.type==="message"){if(i.role==="user"){let a=Kn(i.content,!0).trim();a&&s.push({type:"user",text:a})}else if(i.role==="assistant"){let a=Kn(i.content,!1);a&&s.push({type:"assistant",text:a,thinking:"",tools:[],live:o()})}return{events:s}}if(i.type==="reasoning"){let a=Kn(i.summary,!1);return a&&s.push({type:"assistant",text:"",thinking:a,tools:[],live:o()}),{events:s}}if(i.type==="custom_tool_call"||i.type==="function_call"){let a=i.call_id??"",{pending:l,...c}=i.type==="custom_tool_call"?UA(i.name??"",i.input):{name:i.name??"",input:iT(i.arguments)};return l&&this.#r.set(a,l),s.push({type:"assistant",text:"",thinking:"",tools:[{id:a,...c}],live:o()}),{events:s}}if(i.type==="custom_tool_call_output"||i.type==="function_call_output"){let a=i.call_id??"",l=this.#r.get(a);return this.#r.delete(a),s.push({type:"tool_result",id:a,...nT(FA(i.output),l)}),{events:s}}return{events:s}}if(t.type==="event_msg"){if(i.type==="token_count"){let a=i.info?.last_token_usage;if(!a)return{events:s};let l={in:Math.max(0,(a.input_tokens??0)-(a.cached_input_tokens??0)),out:a.output_tokens??0,cached:a.cached_input_tokens??0,cacheCreate:a.cache_write_input_tokens??0};return{events:s,usage:l}}return{events:s}}return t.type==="turn_context"?{events:s,model:i.model}:{events:s}}chainWorking(t){let r=!1;for(let s of t){if(s.type!=="event_msg")continue;let i=s.payload?.type;i==="task_started"?r=!0:(i==="task_complete"||i==="turn_aborted")&&(r=!1)}return r}sessionAlive(t){let r=this.#f.get(t);if(!r)return;let s;try{let i=Sg(r);s=this.#c(r,i.size,i.mtimeMs)}catch{return}return Date.now()-s<oT}readPreview(t){for(let r of(Ig(t,256*1024)?.text??"").split(`
|
|
311
|
-
`))if(!(!r.includes('"user_message"')&&!r.includes('"UserMessage"')))try{let s=JSON.parse(r);if(s?.type!=="event_msg")continue;let i=s.payload,a=((i?.type==="user_message"?i.message:i?.type==="item_completed"&&i.item?.type==="UserMessage"?Kn(i.item.content,!0):void 0)??"").replace(/\s+/g," ").trim();if(a)return a.slice(0,200)}catch{}return""}searchText(t){if(t?.type!=="response_item"||t.payload?.type!=="message")return"";let r=t.payload.role;return r!=="user"&&r!=="assistant"?"":Kn(t.payload.content,r==="user").replace(/\s+/g," ").trim()}};lT=[64*1024,1024*1024]});import{realpathSync as dT}from"fs";import{createHash as fT}from"crypto";import{join as So,resolve as pT}from"path";import{homedir as hT}from"os";function $t(){let n=process.env.TYPEBULB_SERVERS_DIR;return n?So(n,".."):So(hT(),".typebulb")}function lt(){Ng||(Ng=!0,console.error(`${$t()} not writable \u2014 continuing stateless: ports won't stick, caches stay cold, and typebulb logs/wait/send/stop may not see this run`))}function ct(){return process.env.TYPEBULB_SERVERS_DIR||So($t(),"servers")}function $g(n){let e=re(n),t=e.slice(e.lastIndexOf("/")+1).replace(/\.bulb\.md$/,"");return So($t(),"canvas",`${t}-${gs(n)}.png`)}function gs(n){return fT("sha1").update(re(n)).digest("hex").slice(0,8)}function re(n){let e=pT(n),t=e;try{t=dT.native(e)}catch{}return(process.platform==="win32"?t.toLowerCase():t).replace(/\\/g,"/")}function Lg(n,e){let t=re(n),r=re(e);return t.startsWith(r.endsWith("/")?r:r+"/")?!t.includes("/node_modules/"):!1}var Ng,tt=v(()=>{"use strict";Ng=!1});import*as Dg from"net";import{mkdir as mT,readFile as gT,writeFile as jg}from"fs/promises";import{existsSync as yT}from"fs";import{join as Fg}from"path";function Jg(){return Fg($t(),"blocks")}function fu(n){return Fg(Jg(),`${n}.json`)}function xo(n){return new Promise(e=>{let t=Dg.createServer();t.once("error",()=>e(!1)),t.listen(n,"127.0.0.1",()=>t.close(()=>e(!0)))})}async function ST(n){for(let e=n;e<65535;e++)if(await xo(e))return e;throw new Error(`No free port found above ${n}`)}async function pu(n){let{listBulbServers:e}=await Promise.resolve().then(()=>(Ne(),Wg)),t=(await e()).find(s=>s.port===n),r=t?` (pid ${t.pid}, ${t.agent?`agent:${t.agent}`:t.file})`:"";console.error(`port ${n} in use${r}`),process.exit(1)}async function Eo(n){try{let e=JSON.parse(await gT(fu(n),"utf8"));return e&&typeof e.cwd=="string"?{cwd:e.cwd,slots:e.slots??{},mirrors:e.mirrors??{}}:void 0}catch{return}}async function Ao(n,e){try{return await jg(fu(n),JSON.stringify(e,null,2)),!0}catch{return lt(),!1}}async function kT(n){let e=re(n);try{await mT(Jg(),{recursive:!0})}catch{return}let t=[];for(let o=0;o<qg;o++)t.push(Ug+o*sn);let r=await Promise.all(t.map(async o=>({base:o,block:await Eo(o)})));for(let{base:o,block:a}of r)if(a?.cwd===e)return o;let s={cwd:e,slots:{},mirrors:{}};for(let{base:o,block:a}of r){if(!a)try{return await jg(fu(o),JSON.stringify(s,null,2),{flag:"wx"}),o}catch(l){if((await Eo(o))?.cwd===e)return o;l.code!=="EEXIST"&<();continue}if(!yT(a.cwd))return await Ao(o,s)?o:void 0}let i=r.filter(o=>!!o.block).sort((o,a)=>Mg(o.block)-Mg(a.block))[0];if(i)return await Ao(i.base,s)?i.base:void 0}function Mg(n){return Object.values(n.slots).reduce((e,t)=>Math.max(e,t.usedAt??0),0)}async function xT(n,e){let t=await Eo(n)??{cwd:"",slots:{},mirrors:{}};if(e.kind==="mirror"){let i=t.mirrors[e.agent];if(i!==void 0)return i;let o=Bg(t),a=o.has(0)?wT:0;for(;a>ko&&o.has(a);)a--;return t.mirrors[e.agent]=a,await Ao(n,t),a}let r=re(e.file),s=t.slots[r]?.offset;if(s===void 0){let i=Bg(t);for(s=ko;s<sn&&i.has(s);)s++;if(s>=sn){let o=Object.entries(t.slots).sort((a,l)=>(a[1].usedAt??0)-(l[1].usedAt??0))[0];s=o?o[1].offset:ko,o&&delete t.slots[o[0]]}}return t.slots[r]={offset:s,usedAt:Date.now()},await Ao(n,t),s}function Bg(n){return new Set([...Object.values(n.mirrors),...Object.values(n.slots).map(e=>e.offset)])}async function Yn(n,e){let t=await kT(e);return t===void 0?void 0:t+await xT(t,n)}async function on(n){let e=re(n);for(let t=0;t<qg;t++){let r=await Eo(Ug+t*sn);if(r?.cwd===e)return s=>r.slots[re(s)]?.usedAt??0}return()=>0}async function To(n){if(n.explicit!==void 0)return await xo(n.explicit)||await pu(n.explicit),n.target.kind==="bulb"&&await Yn(n.target,n.cwd),{port:n.explicit};let e=await Yn(n.target,n.cwd);if(e!==void 0){let r=e-e%sn,s=Date.now()+vT;do{if(await xo(e))return{port:e};await new Promise(i=>setTimeout(i,150))}while(Date.now()<s);for(let i=ko;i<sn;i++){let o=r+i;if(o!==e&&await xo(o))return{port:o,note:`(slot ${e} was busy)`}}}return{port:await ST(bT),note:e===void 0?"(no port block available)":"(this project's block was full)"}}var Ug,sn,qg,bT,ko,wT,vT,an=v(()=>{"use strict";tt();Ug=20100,sn=100,qg=19,bT=23e3,ko=1,wT=sn-1,vT=3e3});var $e,Po=v(()=>{"use strict";$e="0.59.
|
|
311
|
+
`))if(!(!r.includes('"user_message"')&&!r.includes('"UserMessage"')))try{let s=JSON.parse(r);if(s?.type!=="event_msg")continue;let i=s.payload,a=((i?.type==="user_message"?i.message:i?.type==="item_completed"&&i.item?.type==="UserMessage"?Kn(i.item.content,!0):void 0)??"").replace(/\s+/g," ").trim();if(a)return a.slice(0,200)}catch{}return""}searchText(t){if(t?.type!=="response_item"||t.payload?.type!=="message")return"";let r=t.payload.role;return r!=="user"&&r!=="assistant"?"":Kn(t.payload.content,r==="user").replace(/\s+/g," ").trim()}};lT=[64*1024,1024*1024]});import{realpathSync as dT}from"fs";import{createHash as fT}from"crypto";import{join as So,resolve as pT}from"path";import{homedir as hT}from"os";function $t(){let n=process.env.TYPEBULB_SERVERS_DIR;return n?So(n,".."):So(hT(),".typebulb")}function lt(){Ng||(Ng=!0,console.error(`${$t()} not writable \u2014 continuing stateless: ports won't stick, caches stay cold, and typebulb logs/wait/send/stop may not see this run`))}function ct(){return process.env.TYPEBULB_SERVERS_DIR||So($t(),"servers")}function $g(n){let e=re(n),t=e.slice(e.lastIndexOf("/")+1).replace(/\.bulb\.md$/,"");return So($t(),"canvas",`${t}-${gs(n)}.png`)}function gs(n){return fT("sha1").update(re(n)).digest("hex").slice(0,8)}function re(n){let e=pT(n),t=e;try{t=dT.native(e)}catch{}return(process.platform==="win32"?t.toLowerCase():t).replace(/\\/g,"/")}function Lg(n,e){let t=re(n),r=re(e);return t.startsWith(r.endsWith("/")?r:r+"/")?!t.includes("/node_modules/"):!1}var Ng,tt=v(()=>{"use strict";Ng=!1});import*as Dg from"net";import{mkdir as mT,readFile as gT,writeFile as jg}from"fs/promises";import{existsSync as yT}from"fs";import{join as Fg}from"path";function Jg(){return Fg($t(),"blocks")}function fu(n){return Fg(Jg(),`${n}.json`)}function xo(n){return new Promise(e=>{let t=Dg.createServer();t.once("error",()=>e(!1)),t.listen(n,"127.0.0.1",()=>t.close(()=>e(!0)))})}async function ST(n){for(let e=n;e<65535;e++)if(await xo(e))return e;throw new Error(`No free port found above ${n}`)}async function pu(n){let{listBulbServers:e}=await Promise.resolve().then(()=>(Ne(),Wg)),t=(await e()).find(s=>s.port===n),r=t?` (pid ${t.pid}, ${t.agent?`agent:${t.agent}`:t.file})`:"";console.error(`port ${n} in use${r}`),process.exit(1)}async function Eo(n){try{let e=JSON.parse(await gT(fu(n),"utf8"));return e&&typeof e.cwd=="string"?{cwd:e.cwd,slots:e.slots??{},mirrors:e.mirrors??{}}:void 0}catch{return}}async function Ao(n,e){try{return await jg(fu(n),JSON.stringify(e,null,2)),!0}catch{return lt(),!1}}async function kT(n){let e=re(n);try{await mT(Jg(),{recursive:!0})}catch{return}let t=[];for(let o=0;o<qg;o++)t.push(Ug+o*sn);let r=await Promise.all(t.map(async o=>({base:o,block:await Eo(o)})));for(let{base:o,block:a}of r)if(a?.cwd===e)return o;let s={cwd:e,slots:{},mirrors:{}};for(let{base:o,block:a}of r){if(!a)try{return await jg(fu(o),JSON.stringify(s,null,2),{flag:"wx"}),o}catch(l){if((await Eo(o))?.cwd===e)return o;l.code!=="EEXIST"&<();continue}if(!yT(a.cwd))return await Ao(o,s)?o:void 0}let i=r.filter(o=>!!o.block).sort((o,a)=>Mg(o.block)-Mg(a.block))[0];if(i)return await Ao(i.base,s)?i.base:void 0}function Mg(n){return Object.values(n.slots).reduce((e,t)=>Math.max(e,t.usedAt??0),0)}async function xT(n,e){let t=await Eo(n)??{cwd:"",slots:{},mirrors:{}};if(e.kind==="mirror"){let i=t.mirrors[e.agent];if(i!==void 0)return i;let o=Bg(t),a=o.has(0)?wT:0;for(;a>ko&&o.has(a);)a--;return t.mirrors[e.agent]=a,await Ao(n,t),a}let r=re(e.file),s=t.slots[r]?.offset;if(s===void 0){let i=Bg(t);for(s=ko;s<sn&&i.has(s);)s++;if(s>=sn){let o=Object.entries(t.slots).sort((a,l)=>(a[1].usedAt??0)-(l[1].usedAt??0))[0];s=o?o[1].offset:ko,o&&delete t.slots[o[0]]}}return t.slots[r]={offset:s,usedAt:Date.now()},await Ao(n,t),s}function Bg(n){return new Set([...Object.values(n.mirrors),...Object.values(n.slots).map(e=>e.offset)])}async function Yn(n,e){let t=await kT(e);return t===void 0?void 0:t+await xT(t,n)}async function on(n){let e=re(n);for(let t=0;t<qg;t++){let r=await Eo(Ug+t*sn);if(r?.cwd===e)return s=>r.slots[re(s)]?.usedAt??0}return()=>0}async function To(n){if(n.explicit!==void 0)return await xo(n.explicit)||await pu(n.explicit),n.target.kind==="bulb"&&await Yn(n.target,n.cwd),{port:n.explicit};let e=await Yn(n.target,n.cwd);if(e!==void 0){let r=e-e%sn,s=Date.now()+vT;do{if(await xo(e))return{port:e};await new Promise(i=>setTimeout(i,150))}while(Date.now()<s);for(let i=ko;i<sn;i++){let o=r+i;if(o!==e&&await xo(o))return{port:o,note:`(slot ${e} was busy)`}}}return{port:await ST(bT),note:e===void 0?"(no port block available)":"(this project's block was full)"}}var Ug,sn,qg,bT,ko,wT,vT,an=v(()=>{"use strict";tt();Ug=20100,sn=100,qg=19,bT=23e3,ko=1,wT=sn-1,vT=3e3});var $e,Po=v(()=>{"use strict";$e="0.59.7"});var Wg={};li(Wg,{agentViewerCommand:()=>ey,bulbServerCommand:()=>Zg,clearServerLog:()=>bu,findProjectViewer:()=>Co,isAlive:()=>Vn,isMirror:()=>me,isProjectBulb:()=>xu,isProjectMirror:()=>Xn,launchAgentViewer:()=>Tu,launchBulbServer:()=>ws,listBulbServers:()=>X,probePageCount:()=>Au,readServerLog:()=>He,readWaitCursor:()=>_o,recordDenial:()=>ku,registerServer:()=>Su,relayOpen:()=>Eu,runMarker:()=>wu,serverLogPath:()=>Gn,serversForBulb:()=>cn,sliceRunLog:()=>vu,startServerLog:()=>bs,stopBulbServer:()=>zn,stopServer:()=>Lt,stopServersForBulb:()=>Ro,typebulbBinPath:()=>Qn,unregisterServer:()=>ln,writeWaitCursor:()=>ys});import{spawn as Kg}from"child_process";import{readdir as ET,readFile as Vg,writeFile as zg,unlink as hu,mkdir as AT}from"fs/promises";import{mkdirSync as Gg,writeFileSync as Oo,appendFileSync as TT,readFileSync as mu}from"fs";import*as Te from"path";import{fileURLToPath as PT}from"url";function gu(n){return Te.join(ct(),`${n}.json`)}function Gn(n){return Te.join(ct(),`${n}.log`)}function yu(n){return Te.join(ct(),`${n}.wait.json`)}function Xg(n){try{let e=JSON.parse(mu(yu(n),"utf8"));return e.cursors&&typeof e.cursors=="object"?e.cursors:{}}catch{return{}}}function _o(n,e=""){let t=Xg(n)[e];return typeof t=="number"&&Number.isFinite(t)&&t>=0?t:void 0}function ys(n,e,t=""){try{Gg(ct(),{recursive:!0});let r=Xg(n);r[t]=e,Oo(yu(n),JSON.stringify({cursors:r}))}catch{}}function bs(n){let e=Gn(n);try{Gg(ct(),{recursive:!0}),Oo(e,"")}catch{return()=>{}}let t=process.stdout.write.bind(process.stdout),r=process.stderr.write.bind(process.stderr),s=0,i=!1,o=a=>{if(!i)try{let l=typeof a=="string"?Buffer.from(a,"utf8"):Buffer.from(a);if(TT(e,l),s+=l.length,s>2*Hg){let c=mu(e),f=c.subarray(Math.max(0,c.length-Hg));Oo(e,f),s=f.length}}catch{i=!0}};return process.stdout.write=((a,...l)=>(o(a),t(a,...l))),process.stderr.write=((a,...l)=>(o(a),r(a,...l))),()=>{process.stdout.write=t,process.stderr.write=r}}function bu(n){try{Oo(Gn(n),"")}catch{}}function He(n,e=0){try{let t=mu(Gn(n)),r=e>=0&&e<=t.length?e:0;return{text:t.subarray(r).toString("utf8"),offset:t.length}}catch{return{text:"",offset:0}}}function wu(n){return`\u2500\u2500 run ${n} \u2500\u2500 ${new Date().toTimeString().slice(0,8)}`}function _T(n){let e=OT.exec(n);return e?Number(e[1]):void 0}function vu(n,e){let t=n.split(`
|
|
312
312
|
`),r=[];if(t.forEach((o,a)=>{let l=_T(o);l!==void 0&&r.push({id:l,idx:a})}),!r.length)return e==="latest"?n:"";let s=e==="latest"?r[r.length-1]:r.find(o=>o.id===e);if(!s)return"";let i=r.find(o=>o.idx>s.idx);return t.slice(s.idx,i?i.idx:t.length).join(`
|
|
313
313
|
`)}function Vn(n){try{return process.kill(n,0),!0}catch(e){return e.code==="EPERM"}}async function Su(n){try{await AT(ct(),{recursive:!0}),await zg(gu(n.pid),JSON.stringify({version:$e,...n}))}catch{lt()}}async function ku(n,e){let t=gu(n);try{let r=JSON.parse(await Vg(t,"utf8"));if(r.denied===e)return;r.denied=e,await zg(t,JSON.stringify(r))}catch{}}async function ln(n){await hu(gu(n)).catch(()=>{}),await hu(Gn(n)).catch(()=>{}),await hu(yu(n)).catch(()=>{})}function me(n){return n.agent!=null}function Xn(n,e){return me(n)&&n.cwd!=null&&re(n.cwd)===re(e)}function xu(n,e){return!me(n)&&Lg(n.file,e)}async function X(n){let e;try{e=await ET(ct())}catch{return[]}let t=[];return await Promise.all(e.map(async s=>{if(!/^\d+\.json$/.test(s))return;let i=parseInt(s,10),o;try{o=JSON.parse(await Vg(Te.join(ct(),s),"utf8"))}catch{await ln(i);return}o&&typeof o.pid=="number"&&Vn(o.pid)?t.push(o):await ln(i)})),(n?t.filter(s=>xu(s,n)):t).sort((s,i)=>s.startedAt-i.startedAt)}async function Co(n,e){return(await X()).find(t=>Xn(t,n)&&(e?t.agent===e:!0))}async function Eu(n,e){let t=new URL(n).port,r=(await X()).filter(a=>String(a.port)!==t),s=r.filter(a=>Xn(a,e)),i=r.filter(a=>xu(a,e)),o=0;for(let a of[...s,...i])try{let l=await fetch(`${a.url}/__open`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:n}),signal:AbortSignal.timeout(2e3)});if(!l.ok)continue;let{opened:c,pages:f}=await l.json();if(c)return{where:"editor",via:a.agent?"the agent mirror":`${Te.basename(a.file)}'s page`};me(a)&&(o+=f??0)}catch{}return o>0?{where:"external"}:void 0}async function zn(n){try{process.kill(n,"SIGTERM")}catch{}await ln(n)}async function Au(n){try{let e=await fetch(`${n.url}/__pages`,{signal:AbortSignal.timeout(CT)});if(!e.ok)return;let{pages:t}=await e.json();return typeof t=="number"?t:void 0}catch{return}}async function Lt(n,e=me(n)?"keep":"close"){try{let t=await fetch(`${n.url}/__stop`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({pages:e}),signal:AbortSignal.timeout(Yg)});if(!t.ok)throw new Error(`/__stop ${t.status}`);let{closed:r=0,stuck:s=0}=await t.json(),i=Date.now()+Yg;for(;Vn(n.pid)&&Date.now()<i;)await Qg(100);return Vn(n.pid)?(await zn(n.pid),"killed"):(await ln(n.pid),{closed:r,stuck:s})}catch{return await zn(n.pid),"killed"}}function cn(n,e){let t=re(e);return n.filter(r=>!me(r)&&r.pid!==process.pid&&re(r.file)===t)}async function Ro(n,e){let t=cn(await X(),n);for(let r of t)await Lt(r,e!==void 0&&r.port===e?"keep":"close");return t}function RT(n,e,t){(process.platform==="win32"?Kg("cmd",["/c","start","","/b",n,...e],{cwd:t,stdio:"ignore",windowsHide:!0}):Kg(n,e,{cwd:t,detached:!0,stdio:"ignore"})).unref()}function Qn(){return Te.join(Te.dirname(PT(import.meta.url)),"index.js")}function Zg(n,e={}){return{command:process.execPath,args:[Qn(),...e.trust?["--trust"]:[],...e.mode?["--mode",e.mode]:[],n,...e.open===!1?["--no-open"]:[]]}}function ey(n){return{command:process.execPath,args:[Qn(),`agent:${n}`,"--no-open"]}}async function ty(n,e,t,r){let s=await n();if(s)return s;RT(e.command,e.args,t);let i=Date.now()+2e4;for(;Date.now()<i;){await Qg(150);let o=await n();if(o)return o}throw new Error(`Launched ${r} but it did not register within 20s.`)}async function ws(n,e={}){let t=e.cwd??process.cwd(),r=Te.resolve(t,n),s=await Yn({kind:"bulb",file:r},t),[i]=await Ro(r,s),o={...e,mode:e.mode??i?.mode};return ty(async()=>cn(await X(),r)[0],Zg(n,o),t,Te.basename(n))}async function Tu(n,e=process.cwd()){return ty(()=>Co(e,n),ey(n),e,`the ${n} mirror`)}var Hg,OT,Yg,CT,Qg,Ne=v(()=>{"use strict";tt();an();Po();Hg=1e6;OT=/^── run (\d+) ── /;Yg=6e3,CT=500;Qg=n=>new Promise(e=>setTimeout(e,n))});function Zn(n){return{...Wf(n),server:n.files.get("server.ts")??""}}function Io(n){return!!n.server&&!n.code}var vs=v(()=>{"use strict";ee();ee()});function No(n){let e=/^---[^\n]*\n([\s\S]*?)\n---/.exec(n),t=e?/^\s*name:\s*(.+?)\s*$/m.exec(e[1]):null;return t?t[1].replace(/^["']|["']$/g,""):void 0}function Pu(n){return qn(No(n)??"bulb")||"bulb"}var Ou=v(()=>{"use strict";ee()});import{readdirSync as IT,readFileSync as NT,statSync as $T}from"fs";import{join as ny,basename as LT}from"path";function sy(n,e,t){if(e>8)return t;let r;try{r=IT(n,{withFileTypes:!0})}catch{return t}for(let s of r)if(s.isDirectory()){if(s.name.startsWith(".")||s.name==="node_modules")continue;sy(ny(n,s.name),e+1,t)}else s.isFile()&&s.name.endsWith(".bulb.md")&&t.push(ny(n,s.name));return t}function MT(n,e){let t,r=!1;try{let s=NT(n,"utf8");t=No(s.slice(0,1024));let i=Je(s);r=!!i&&Io(Zn(i))}catch{}return{mtime:e,name:t??LT(n).replace(/\.bulb\.md$/,""),serverOnly:r}}function $o(n){let e=new Map,t=sy(n,0,[]).map(r=>{let s=0;try{s=$T(r).mtimeMs}catch{}let i=s?ry.get(r):void 0,o=i?.mtime===s?i:MT(r,s);return s&&e.set(r,o),{path:r,...o}});return ry=e,t}var ry,iy=v(()=>{"use strict";ee();vs();Ou();ry=new Map});function er(n){if(n.server.trim())return"server-side code (server.ts)";let e=n.code;if(/\btb\s*\.\s*fs\b/.test(e)||e.includes("/__fs"))return"the filesystem";if(/\btb\s*\.\s*ai\b/.test(e)||e.includes("/__ai")||n.infer.trim()||/\btb\s*\.\s*infer\b/.test(e))return"AI (your API keys)";if(/\btb\s*\.\s*server\s*\.\s*\w/.test(e)||e.includes("/__api"))return"server-side code (server.ts)"}var Lo=v(()=>{"use strict"});import{readFile as BT}from"fs/promises";async function _u(n){try{let e=Je(await BT(n,"utf-8"));return e?er(Zn(e)):void 0}catch{return}}var oy=v(()=>{"use strict";vs();Lo()});function Cu(n){let e=n.split(""),t=(i,o)=>{for(let a=i;a<o&&a<e.length;a++)e[a]!==`
|
|
314
314
|
`&&(e[a]=" ")},r=0,s="";for(;r<n.length;){let i=n[r],o=n[r+1];if(i==="/"&&o==="/"){let a=r;for(;a<n.length&&n[a]!==`
|