diff --git a/dist/artifact-DMg4FdS7.js b/dist/artifact-0fav7sLm.js similarity index 99% rename from dist/artifact-DMg4FdS7.js rename to dist/artifact-0fav7sLm.js index 5698efd5..6993d743 100644 --- a/dist/artifact-DMg4FdS7.js +++ b/dist/artifact-0fav7sLm.js @@ -18,7 +18,7 @@ ${e.format(t)} `);o=c.pop()??``;for(let e of c){let i=e.split(` `),a=[],o;for(let e of i)if(e.startsWith(`data:`))a.push(e.replace(/^data:\s*/,``));else if(e.startsWith(`event:`))o=e.replace(/^event:\s*/,``);else if(e.startsWith(`id:`))u=e.replace(/^id:\s*/,``);else if(e.startsWith(`retry:`)){let t=Number.parseInt(e.replace(/^retry:\s*/,``),10);Number.isNaN(t)||(s=t)}let c,l=!1;if(a.length){let e=a.join(` `);try{c=JSON.parse(e),l=!0}catch{c=e}}l&&(r&&await r(c),n&&(c=await n(c))),t?.({data:c,event:o,id:u,retry:s}),a.length&&(yield c)}}}finally{p.removeEventListener(`abort`,d),a.releaseLock()}break}catch(t){if(e?.(t),a!==void 0&&f>=a)break;await d(Math.min(s*2**(f-1),o??3e4))}}}()}},Oi=async(e,t)=>{let n=typeof t==`function`?await t(e):t;if(n)return e.scheme===`bearer`?`Bearer ${n}`:e.scheme===`basic`?`Basic ${btoa(n)}`:n},ki={bodySerializer:e=>JSON.stringify(e,(e,t)=>typeof t==`bigint`?t.toString():t)},Ai=e=>{switch(e){case`label`:return`.`;case`matrix`:return`;`;case`simple`:return`,`;default:return`&`}},ji=e=>{switch(e){case`form`:return`,`;case`pipeDelimited`:return`|`;case`spaceDelimited`:return`%20`;default:return`,`}},Mi=e=>{switch(e){case`label`:return`.`;case`matrix`:return`;`;case`simple`:return`,`;default:return`&`}},Ni=({allowReserved:e,explode:t,name:n,style:r,value:i})=>{if(!t){let t=(e?i:i.map(e=>encodeURIComponent(e))).join(ji(r));switch(r){case`label`:return`.${t}`;case`matrix`:return`;${n}=${t}`;case`simple`:return t;default:return`${n}=${t}`}}let a=Ai(r),o=i.map(t=>r===`label`||r===`simple`?e?t:encodeURIComponent(t):Pi({allowReserved:e,name:n,value:t})).join(a);return r===`label`||r===`matrix`?a+o:o},Pi=({allowReserved:e,name:t,value:n})=>{if(n==null)return``;if(typeof n==`object`)throw Error("Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.");return`${t}=${e?n:encodeURIComponent(n)}`},Fi=({allowReserved:e,explode:t,name:n,style:r,value:i,valueOnly:a})=>{if(i instanceof Date)return a?i.toISOString():`${n}=${i.toISOString()}`;if(r!==`deepObject`&&!t){let t=[];Object.entries(i).forEach(([n,r])=>{t=[...t,n,e?r:encodeURIComponent(r)]});let a=t.join(`,`);switch(r){case`form`:return`${n}=${a}`;case`label`:return`.${a}`;case`matrix`:return`;${n}=${a}`;default:return a}}let o=Mi(r),s=Object.entries(i).map(([t,i])=>Pi({allowReserved:e,name:r===`deepObject`?`${n}[${t}]`:t,value:i})).join(o);return r===`label`||r===`matrix`?o+s:s},Ii=/\{[^{}]+\}/g,Li=({path:e,url:t})=>{let n=t,r=t.match(Ii);if(r)for(let t of r){let r=!1,i=t.substring(1,t.length-1),a=`simple`;i.endsWith(`*`)&&(r=!0,i=i.substring(0,i.length-1)),i.startsWith(`.`)?(i=i.substring(1),a=`label`):i.startsWith(`;`)&&(i=i.substring(1),a=`matrix`);let o=e[i];if(o==null)continue;if(Array.isArray(o)){n=n.replace(t,Ni({explode:r,name:i,style:a,value:o}));continue}if(typeof o==`object`){n=n.replace(t,Fi({explode:r,name:i,style:a,value:o,valueOnly:!0}));continue}if(a===`matrix`){n=n.replace(t,`;${Pi({name:i,value:o})}`);continue}let s=encodeURIComponent(a===`label`?`.${o}`:o);n=n.replace(t,s)}return n},Ri=({baseUrl:e,path:t,query:n,querySerializer:r,url:i})=>{let a=i.startsWith(`/`)?i:`/${i}`,o=(e??``)+a;t&&(o=Li({path:t,url:o}));let s=n?r(n):``;return s.startsWith(`?`)&&(s=s.substring(1)),s&&(o+=`?${s}`),o},zi=({allowReserved:e,array:t,object:n}={})=>r=>{let i=[];if(r&&typeof r==`object`)for(let a in r){let o=r[a];if(o!=null)if(Array.isArray(o)){let n=Ni({allowReserved:e,explode:!0,name:a,style:`form`,value:o,...t});n&&i.push(n)}else if(typeof o==`object`){let t=Fi({allowReserved:e,explode:!0,name:a,style:`deepObject`,value:o,...n});t&&i.push(t)}else{let t=Pi({allowReserved:e,name:a,value:o});t&&i.push(t)}}return i.join(`&`)},Bi=e=>{if(!e)return`stream`;let t=e.split(`;`)[0]?.trim();if(t){if(t.startsWith(`application/json`)||t.endsWith(`+json`))return`json`;if(t===`multipart/form-data`)return`formData`;if([`application/`,`audio/`,`image/`,`video/`].some(e=>t.startsWith(e)))return`blob`;if(t.startsWith(`text/`))return`text`}},Vi=(e,t)=>t?!!(e.headers.has(t)||e.query?.[t]||e.headers.get(`Cookie`)?.includes(`${t}=`)):!1,Hi=async({security:e,...t})=>{for(let n of e){if(Vi(t,n.name))continue;let e=await Oi(n,t.auth);if(!e)continue;let r=n.name??`Authorization`;switch(n.in){case`query`:t.query||={},t.query[r]=e;break;case`cookie`:t.headers.append(`Cookie`,`${r}=${e}`);break;default:t.headers.set(r,e);break}}},Ui=e=>Ri({baseUrl:e.baseUrl,path:e.path,query:e.query,querySerializer:typeof e.querySerializer==`function`?e.querySerializer:zi(e.querySerializer),url:e.url}),Wi=(e,t)=>{let n={...e,...t};return n.baseUrl?.endsWith(`/`)&&(n.baseUrl=n.baseUrl.substring(0,n.baseUrl.length-1)),n.headers=Gi(e.headers,t.headers),n},Gi=(...e)=>{let t=new Headers;for(let n of e){if(!n||typeof n!=`object`)continue;let e=n instanceof Headers?n.entries():Object.entries(n);for(let[n,r]of e)if(r===null)t.delete(n);else if(Array.isArray(r))for(let e of r)t.append(n,e);else r!==void 0&&t.set(n,typeof r==`object`?JSON.stringify(r):r)}return t};var Ki=class{_fns;constructor(){this._fns=[]}clear(){this._fns=[]}getInterceptorIndex(e){return typeof e==`number`?this._fns[e]?e:-1:this._fns.indexOf(e)}exists(e){let t=this.getInterceptorIndex(e);return!!this._fns[t]}eject(e){let t=this.getInterceptorIndex(e);this._fns[t]&&(this._fns[t]=null)}update(e,t){let n=this.getInterceptorIndex(e);return this._fns[n]?(this._fns[n]=t,e):!1}use(e){return this._fns=[...this._fns,e],this._fns.length-1}};const qi=()=>({error:new Ki,request:new Ki,response:new Ki}),Ji=zi({allowReserved:!1,array:{explode:!0,style:`form`},object:{explode:!0,style:`deepObject`}}),Yi={"Content-Type":`application/json`},Xi=(e={})=>({...ki,headers:Yi,parseAs:`auto`,querySerializer:Ji,...e}),Zi=(e={})=>{let t=Wi(Xi(),e),n=()=>({...t}),r=e=>(t=Wi(t,e),n()),i=qi(),a=async e=>{let n={...t,...e,fetch:e.fetch??t.fetch??globalThis.fetch,headers:Gi(t.headers,e.headers),serializedBody:void 0};return n.security&&await Hi({...n,security:n.security}),n.requestValidator&&await n.requestValidator(n),n.body&&n.bodySerializer&&(n.serializedBody=n.bodySerializer(n.body)),(n.serializedBody===void 0||n.serializedBody===``)&&n.headers.delete(`Content-Type`),{opts:n,url:Ui(n)}},o=async e=>{let{opts:t,url:n}=await a(e),r={redirect:`follow`,...t,body:t.serializedBody},o=new Request(n,r);for(let e of i.request._fns)e&&(o=await e(o,t));let s=t.fetch,c=await s(o);for(let e of i.response._fns)e&&(c=await e(c,o,t));let l={request:o,response:c};if(c.ok){if(c.status===204||c.headers.get(`Content-Length`)===`0`)return t.responseStyle===`data`?{}:{data:{},...l};let e=(t.parseAs===`auto`?Bi(c.headers.get(`Content-Type`)):t.parseAs)??`json`,n;switch(e){case`arrayBuffer`:case`blob`:case`formData`:case`json`:case`text`:n=await c[e]();break;case`stream`:return t.responseStyle===`data`?c.body:{data:c.body,...l}}return e===`json`&&(t.responseValidator&&await t.responseValidator(n),t.responseTransformer&&(n=await t.responseTransformer(n))),t.responseStyle===`data`?n:{data:n,...l}}let u=await c.text(),d;try{d=JSON.parse(u)}catch{}let f=d??u,p=f;for(let e of i.error._fns)e&&(p=await e(f,c,o,t));if(p||={},t.throwOnError)throw p;return t.responseStyle===`data`?void 0:{error:p,...l}},s=e=>{let t=t=>o({...t,method:e});return t.sse=async t=>{let{opts:n,url:r}=await a(t);return Di({...n,body:n.body,headers:n.headers,method:e,url:r})},t};return{buildUrl:Ui,connect:s(`CONNECT`),delete:s(`DELETE`),get:s(`GET`),getConfig:n,head:s(`HEAD`),interceptors:i,options:s(`OPTIONS`),patch:s(`PATCH`),post:s(`POST`),put:s(`PUT`),request:o,setConfig:r,trace:s(`TRACE`)}};Object.entries({$body_:`body`,$headers_:`headers`,$path_:`path`,$query_:`query`});const Qi=Zi(Xi({baseUrl:`http://localhost:4096`}));var q=class{_client=Qi;constructor(e){e?.client&&(this._client=e.client)}},$i=class extends q{event(e){return(e?.client??this._client).get.sse({url:`/global/event`,...e})}},ea=class extends q{list(e){return(e?.client??this._client).get({url:`/project`,...e})}current(e){return(e?.client??this._client).get({url:`/project/current`,...e})}},J=class extends q{list(e){return(e?.client??this._client).get({url:`/pty`,...e})}create(e){return(e?.client??this._client).post({url:`/pty`,...e,headers:{"Content-Type":`application/json`,...e?.headers}})}remove(e){return(e.client??this._client).delete({url:`/pty/{id}`,...e})}get(e){return(e.client??this._client).get({url:`/pty/{id}`,...e})}update(e){return(e.client??this._client).put({url:`/pty/{id}`,...e,headers:{"Content-Type":`application/json`,...e.headers}})}connect(e){return(e.client??this._client).get({url:`/pty/{id}/connect`,...e})}},ta=class extends q{get(e){return(e?.client??this._client).get({url:`/config`,...e})}update(e){return(e?.client??this._client).patch({url:`/config`,...e,headers:{"Content-Type":`application/json`,...e?.headers}})}providers(e){return(e?.client??this._client).get({url:`/config/providers`,...e})}},na=class extends q{ids(e){return(e?.client??this._client).get({url:`/experimental/tool/ids`,...e})}list(e){return(e.client??this._client).get({url:`/experimental/tool`,...e})}},Y=class extends q{dispose(e){return(e?.client??this._client).post({url:`/instance/dispose`,...e})}},ra=class extends q{get(e){return(e?.client??this._client).get({url:`/path`,...e})}},ia=class extends q{get(e){return(e?.client??this._client).get({url:`/vcs`,...e})}},aa=class extends q{list(e){return(e?.client??this._client).get({url:`/session`,...e})}create(e){return(e?.client??this._client).post({url:`/session`,...e,headers:{"Content-Type":`application/json`,...e?.headers}})}status(e){return(e?.client??this._client).get({url:`/session/status`,...e})}delete(e){return(e.client??this._client).delete({url:`/session/{id}`,...e})}get(e){return(e.client??this._client).get({url:`/session/{id}`,...e})}update(e){return(e.client??this._client).patch({url:`/session/{id}`,...e,headers:{"Content-Type":`application/json`,...e.headers}})}children(e){return(e.client??this._client).get({url:`/session/{id}/children`,...e})}todo(e){return(e.client??this._client).get({url:`/session/{id}/todo`,...e})}init(e){return(e.client??this._client).post({url:`/session/{id}/init`,...e,headers:{"Content-Type":`application/json`,...e.headers}})}fork(e){return(e.client??this._client).post({url:`/session/{id}/fork`,...e,headers:{"Content-Type":`application/json`,...e.headers}})}abort(e){return(e.client??this._client).post({url:`/session/{id}/abort`,...e})}unshare(e){return(e.client??this._client).delete({url:`/session/{id}/share`,...e})}share(e){return(e.client??this._client).post({url:`/session/{id}/share`,...e})}diff(e){return(e.client??this._client).get({url:`/session/{id}/diff`,...e})}summarize(e){return(e.client??this._client).post({url:`/session/{id}/summarize`,...e,headers:{"Content-Type":`application/json`,...e.headers}})}messages(e){return(e.client??this._client).get({url:`/session/{id}/message`,...e})}prompt(e){return(e.client??this._client).post({url:`/session/{id}/message`,...e,headers:{"Content-Type":`application/json`,...e.headers}})}message(e){return(e.client??this._client).get({url:`/session/{id}/message/{messageID}`,...e})}promptAsync(e){return(e.client??this._client).post({url:`/session/{id}/prompt_async`,...e,headers:{"Content-Type":`application/json`,...e.headers}})}command(e){return(e.client??this._client).post({url:`/session/{id}/command`,...e,headers:{"Content-Type":`application/json`,...e.headers}})}shell(e){return(e.client??this._client).post({url:`/session/{id}/shell`,...e,headers:{"Content-Type":`application/json`,...e.headers}})}revert(e){return(e.client??this._client).post({url:`/session/{id}/revert`,...e,headers:{"Content-Type":`application/json`,...e.headers}})}unrevert(e){return(e.client??this._client).post({url:`/session/{id}/unrevert`,...e})}},oa=class extends q{list(e){return(e?.client??this._client).get({url:`/command`,...e})}},sa=class extends q{authorize(e){return(e.client??this._client).post({url:`/provider/{id}/oauth/authorize`,...e,headers:{"Content-Type":`application/json`,...e.headers}})}callback(e){return(e.client??this._client).post({url:`/provider/{id}/oauth/callback`,...e,headers:{"Content-Type":`application/json`,...e.headers}})}},ca=class extends q{list(e){return(e?.client??this._client).get({url:`/provider`,...e})}auth(e){return(e?.client??this._client).get({url:`/provider/auth`,...e})}oauth=new sa({client:this._client})},la=class extends q{text(e){return(e.client??this._client).get({url:`/find`,...e})}files(e){return(e.client??this._client).get({url:`/find/file`,...e})}symbols(e){return(e.client??this._client).get({url:`/find/symbol`,...e})}},ua=class extends q{list(e){return(e.client??this._client).get({url:`/file`,...e})}read(e){return(e.client??this._client).get({url:`/file/content`,...e})}status(e){return(e?.client??this._client).get({url:`/file/status`,...e})}},da=class extends q{log(e){return(e?.client??this._client).post({url:`/log`,...e,headers:{"Content-Type":`application/json`,...e?.headers}})}agents(e){return(e?.client??this._client).get({url:`/agent`,...e})}},fa=class extends q{remove(e){return(e.client??this._client).delete({url:`/mcp/{name}/auth`,...e})}start(e){return(e.client??this._client).post({url:`/mcp/{name}/auth`,...e})}callback(e){return(e.client??this._client).post({url:`/mcp/{name}/auth/callback`,...e,headers:{"Content-Type":`application/json`,...e.headers}})}authenticate(e){return(e.client??this._client).post({url:`/mcp/{name}/auth/authenticate`,...e})}set(e){return(e.client??this._client).put({url:`/auth/{id}`,...e,headers:{"Content-Type":`application/json`,...e.headers}})}},pa=class extends q{status(e){return(e?.client??this._client).get({url:`/mcp`,...e})}add(e){return(e?.client??this._client).post({url:`/mcp`,...e,headers:{"Content-Type":`application/json`,...e?.headers}})}connect(e){return(e.client??this._client).post({url:`/mcp/{name}/connect`,...e})}disconnect(e){return(e.client??this._client).post({url:`/mcp/{name}/disconnect`,...e})}auth=new fa({client:this._client})},ma=class extends q{status(e){return(e?.client??this._client).get({url:`/lsp`,...e})}},ha=class extends q{status(e){return(e?.client??this._client).get({url:`/formatter`,...e})}},ga=class extends q{next(e){return(e?.client??this._client).get({url:`/tui/control/next`,...e})}response(e){return(e?.client??this._client).post({url:`/tui/control/response`,...e,headers:{"Content-Type":`application/json`,...e?.headers}})}},_a=class extends q{appendPrompt(e){return(e?.client??this._client).post({url:`/tui/append-prompt`,...e,headers:{"Content-Type":`application/json`,...e?.headers}})}openHelp(e){return(e?.client??this._client).post({url:`/tui/open-help`,...e})}openSessions(e){return(e?.client??this._client).post({url:`/tui/open-sessions`,...e})}openThemes(e){return(e?.client??this._client).post({url:`/tui/open-themes`,...e})}openModels(e){return(e?.client??this._client).post({url:`/tui/open-models`,...e})}submitPrompt(e){return(e?.client??this._client).post({url:`/tui/submit-prompt`,...e})}clearPrompt(e){return(e?.client??this._client).post({url:`/tui/clear-prompt`,...e})}executeCommand(e){return(e?.client??this._client).post({url:`/tui/execute-command`,...e,headers:{"Content-Type":`application/json`,...e?.headers}})}showToast(e){return(e?.client??this._client).post({url:`/tui/show-toast`,...e,headers:{"Content-Type":`application/json`,...e?.headers}})}publish(e){return(e?.client??this._client).post({url:`/tui/publish`,...e,headers:{"Content-Type":`application/json`,...e?.headers}})}control=new ga({client:this._client})},va=class extends q{subscribe(e){return(e?.client??this._client).get.sse({url:`/event`,...e})}},X=class extends q{postSessionIdPermissionsPermissionId(e){return(e.client??this._client).post({url:`/session/{id}/permissions/{permissionID}`,...e,headers:{"Content-Type":`application/json`,...e.headers}})}global=new $i({client:this._client});project=new ea({client:this._client});pty=new J({client:this._client});config=new ta({client:this._client});tool=new na({client:this._client});instance=new Y({client:this._client});path=new ra({client:this._client});vcs=new ia({client:this._client});session=new aa({client:this._client});command=new oa({client:this._client});provider=new ca({client:this._client});find=new la({client:this._client});file=new ua({client:this._client});app=new da({client:this._client});mcp=new pa({client:this._client});lsp=new ma({client:this._client});formatter=new ha({client:this._client});tui=new _a({client:this._client});auth=new fa({client:this._client});event=new va({client:this._client})};function ya(e,t){if(e)return t&&(e===t||e===encodeURIComponent(t))?t:e}function ba(e,t){if(e.method!==`GET`&&e.method!==`HEAD`)return e;let n=ya(e.headers.get(`x-opencode-directory`),t);if(!n)return e;let r=new URL(e.url);r.searchParams.has(`directory`)||r.searchParams.set(`directory`,n);let i=new Request(r,e);return i.headers.delete(`x-opencode-directory`),i}function xa(e){if(!e?.fetch){let t=e=>(e.timeout=!1,fetch(e));e={...e,fetch:t}}e?.directory&&(e.headers={...e.headers,"x-opencode-directory":encodeURIComponent(e.directory)});let t=Zi(e);return t.interceptors.request.use(t=>ba(t,e?.directory)),new X({client:t})}var Sa=i(((e,n)=>{n.exports=o,o.sync=s;var r=t(`fs`);function i(e,t){var n=t.pathExt===void 0?process.env.PATHEXT:t.pathExt;if(!n||(n=n.split(`;`),n.indexOf(``)!==-1))return!0;for(var r=0;r{n.exports=i,i.sync=a;var r=t(`fs`);function i(e,t,n){r.stat(e,function(e,r){n(e,e?!1:o(r,t))})}function a(e,t){return o(r.statSync(e),t)}function o(e,t){return e.isFile()&&s(e,t)}function s(e,t){var n=e.mode,r=e.uid,i=e.gid,a=t.uid===void 0?process.getuid&&process.getuid():t.uid,o=t.gid===void 0?process.getgid&&process.getgid():t.gid,s=64,c=8,l=1,u=s|c;return n&l||n&c&&i===o||n&s&&r===a||n&u&&a===0}})),wa=i(((e,n)=>{t(`fs`);var r=process.platform===`win32`||global.TESTING_WINDOWS?Sa():Ca();n.exports=i,i.sync=a;function i(e,t,n){if(typeof t==`function`&&(n=t,t={}),!n){if(typeof Promise!=`function`)throw TypeError(`callback not provided`);return new Promise(function(n,r){i(e,t||{},function(e,t){e?r(e):n(t)})})}r(e,t||{},function(e,r){e&&(e.code===`EACCES`||t&&t.ignoreErrors)&&(e=null,r=!1),n(e,r)})}function a(e,t){try{return r.sync(e,t||{})}catch(e){if(t&&t.ignoreErrors||e.code===`EACCES`)return!1;throw e}}})),Ta=i(((e,n)=>{let r=process.platform===`win32`||process.env.OSTYPE===`cygwin`||process.env.OSTYPE===`msys`,i=t(`path`),a=r?`;`:`:`,o=wa(),s=e=>Object.assign(Error(`not found: ${e}`),{code:`ENOENT`}),c=(e,t)=>{let n=t.colon||a,i=e.match(/\//)||r&&e.match(/\\/)?[``]:[...r?[process.cwd()]:[],...(t.path||process.env.PATH||``).split(n)],o=r?t.pathExt||process.env.PATHEXT||`.EXE;.CMD;.BAT;.COM`:``,s=r?o.split(n):[``];return r&&e.indexOf(`.`)!==-1&&s[0]!==``&&s.unshift(``),{pathEnv:i,pathExt:s,pathExtExe:o}},l=(e,t,n)=>{typeof t==`function`&&(n=t,t={}),t||={};let{pathEnv:r,pathExt:a,pathExtExe:l}=c(e,t),u=[],d=n=>new Promise((a,o)=>{if(n===r.length)return t.all&&u.length?a(u):o(s(e));let c=r[n],l=/^".*"$/.test(c)?c.slice(1,-1):c,d=i.join(l,e);a(f(!l&&/^\.[\\\/]/.test(e)?e.slice(0,2)+d:d,n,0))}),f=(e,n,r)=>new Promise((i,s)=>{if(r===a.length)return i(d(n+1));let c=a[r];o(e+c,{pathExt:l},(a,o)=>{if(!a&&o)if(t.all)u.push(e+c);else return i(e+c);return i(f(e,n,r+1))})});return n?d(0).then(e=>n(null,e),n):d(0)};n.exports=l,l.sync=(e,t)=>{t||={};let{pathEnv:n,pathExt:r,pathExtExe:a}=c(e,t),l=[];for(let s=0;s{let n=(e={})=>{let t=e.env||process.env;return(e.platform||process.platform)===`win32`?Object.keys(t).reverse().find(e=>e.toUpperCase()===`PATH`)||`Path`:`PATH`};t.exports=n,t.exports.default=n})),Da=i(((e,n)=>{let r=t(`path`),i=Ta(),a=Ea();function o(e,t){let n=e.options.env||process.env,o=process.cwd(),s=e.options.cwd!=null,c=s&&process.chdir!==void 0&&!process.chdir.disabled;if(c)try{process.chdir(e.options.cwd)}catch{}let l;try{l=i.sync(e.command,{path:n[a({env:n})],pathExt:t?r.delimiter:void 0})}catch{}finally{c&&process.chdir(o)}return l&&=r.resolve(s?e.options.cwd:``,l),l}function s(e){return o(e)||o(e,!0)}n.exports=s})),Oa=i(((e,t)=>{let n=/([()\][%!^"`<>&|;, *?])/g;function r(e){return e=e.replace(n,`^$1`),e}function i(e,t){return e=`${e}`,e=e.replace(/(?=(\\+?)?)\1"/g,`$1$1\\"`),e=e.replace(/(?=(\\+?)?)\1$/,`$1$1`),e=`"${e}"`,e=e.replace(n,`^$1`),t&&(e=e.replace(n,`^$1`)),e}t.exports.command=r,t.exports.argument=i})),ka=i(((e,t)=>{t.exports=/^#!(.*)/})),Aa=i(((e,t)=>{let n=ka();t.exports=(e=``)=>{let t=e.match(n);if(!t)return null;let[r,i]=t[0].replace(/#! ?/,``).split(` `),a=r.split(`/`).pop();return a===`env`?i:i?`${a} ${i}`:a}})),ja=i(((e,n)=>{let r=t(`fs`),i=Aa();function a(e){let t=Buffer.alloc(150),n;try{n=r.openSync(e,`r`),r.readSync(n,t,0,150,0),r.closeSync(n)}catch{}return i(t.toString())}n.exports=a})),Ma=i(((e,n)=>{let r=t(`path`),i=Da(),a=Oa(),o=ja(),s=process.platform===`win32`,c=/\.(?:com|exe)$/i,l=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function u(e){e.file=i(e);let t=e.file&&o(e.file);return t?(e.args.unshift(e.file),e.command=t,i(e)):e.file}function d(e){if(!s)return e;let t=u(e),n=!c.test(t);if(e.options.forceShell||n){let n=l.test(t);e.command=r.normalize(e.command),e.command=a.command(e.command),e.args=e.args.map(e=>a.argument(e,n)),e.args=[`/d`,`/s`,`/c`,`"${[e.command].concat(e.args).join(` `)}"`],e.command=process.env.comspec||`cmd.exe`,e.options.windowsVerbatimArguments=!0}return e}function f(e,t,n){t&&!Array.isArray(t)&&(n=t,t=null),t=t?t.slice(0):[],n=Object.assign({},n);let r={command:e,args:t,options:n,file:void 0,original:{command:e,args:t}};return n.shell?r:d(r)}n.exports=f})),Na=i(((e,t)=>{let n=process.platform===`win32`;function r(e,t){return Object.assign(Error(`${t} ${e.command} ENOENT`),{code:`ENOENT`,errno:`ENOENT`,syscall:`${t} ${e.command}`,path:e.command,spawnargs:e.args})}function i(e,t){if(!n)return;let r=e.emit;e.emit=function(n,i){if(n===`exit`){let n=a(i,t);if(n)return r.call(e,`error`,n)}return r.apply(e,arguments)}}function a(e,t){return n&&e===1&&!t.file?r(t.original,`spawn`):null}function o(e,t){return n&&e===1&&!t.file?r(t.original,`spawnSync`):null}t.exports={hookChildProcess:i,verifyENOENT:a,verifyENOENTSync:o,notFoundError:r}})),Pa=n(i(((e,n)=>{let r=t(`child_process`),i=Ma(),a=Na();function o(e,t,n){let o=i(e,t,n),s=r.spawn(o.command,o.args,o.options);return a.hookChildProcess(s,o),s}function s(e,t,n){let o=i(e,t,n),s=r.spawnSync(o.command,o.args,o.options);return s.error=s.error||a.verifyENOENTSync(s.status,o),s}n.exports=o,n.exports.spawn=o,n.exports.sync=s,n.exports._parse=i,n.exports._enoent=a}))(),1);function Fa(e){if(!(e.exitCode!==null||e.signalCode!==null)){if(process.platform===`win32`&&e.pid){let t=He(`taskkill`,[`/pid`,String(e.pid),`/T`,`/F`],{windowsHide:!0});if(!t.error&&t.status===0)return}e.kill()}}function Ia(e,t,n){if(!t)return()=>{};let r=()=>{i(),Fa(e),n?.()},i=()=>{t.removeEventListener(`abort`,r),e.off(`exit`,i),e.off(`error`,i)};return t.addEventListener(`abort`,r,{once:!0}),e.on(`exit`,i),e.on(`error`,i),t.aborted&&r(),i}async function La(e){e=Object.assign({hostname:`127.0.0.1`,port:4096,timeout:5e3},e??{});let t=[`serve`,`--hostname=${e.hostname}`,`--port=${e.port}`];e.config?.logLevel&&t.push(`--log-level=${e.config.logLevel}`);let n=(0,Pa.default)(`opencode`,t,{env:{...process.env,OPENCODE_CONFIG_CONTENT:JSON.stringify(e.config??{})}}),r=()=>{};return{url:await new Promise((t,i)=>{let a=setTimeout(()=>{r(),Fa(n),i(Error(`Timeout waiting for server to start after ${e.timeout}ms`))},e.timeout),o=``,s=!1;n.stdout?.on(`data`,e=>{if(s)return;o+=e.toString();let c=o.split(` -`);for(let e of c)if(e.startsWith(`opencode server listening`)){let o=e.match(/on\s+(https?:\/\/[^\s]+)/);if(!o){r(),Fa(n),clearTimeout(a),i(Error(`Failed to parse server url from output: ${e}`));return}clearTimeout(a),s=!0,t(o[1]);return}}),n.stderr?.on(`data`,e=>{o+=e.toString()}),n.on(`exit`,e=>{clearTimeout(a);let t=`Server exited with code ${e}`;o.trim()&&(t+=`\nServer output: ${o}`),i(Error(t))}),n.on(`error`,e=>{clearTimeout(a),i(e)}),r=Ia(n,e.signal,()=>{clearTimeout(a),i(e.signal?.reason)})}),close(){r(),Fa(n)}}}async function Ra(e){let t=await La({...e});return{client:xa({baseUrl:t.url}),server:t}}function za(e){return e instanceof Error?e.message:String(e)}function Ba(){let e=se.env.XDG_DATA_HOME??Ve.join(Ue.homedir(),`.local`,`share`);return Ve.join(e,`opencode`,`opencode.db`)}async function Va(e){if(e!=null)return Ha(e,`1.2.0`)>=0;try{return await Be.access(Ba()),!0}catch{return!1}}function Ha(e,t){let n=e.split(`.`).map(Number),r=t.split(`.`).map(Number);for(let e=0;e<3;e++){let t=(n[e]??0)-(r[e]??0);if(t!==0)return t}return 0}async function Ua(e){if(e<0||!Number.isFinite(e))throw Error(`Invalid sleep duration: ${e}`);return new Promise(t=>setTimeout(t,e))}const Wa=`sisyphus`,Ga=18e5,Ka={providerID:`opencode`,modelID:`big-pickle`},qa=`1.14.30`,Ja=`1.3.13`,Ya=`3.17.6`,Z=`2.7.0`,Xa=`opencode-storage`,Za=`fro-bot-state`,Qa=`opencode-tools`,$a=6e5,eo=`fro-bot-dedup-v1`;function to(){let e=se.env.XDG_DATA_HOME;return e!=null&&e.trim().length>0?e:Ve.join(Ue.homedir(),`.local`,`share`)}function no(){return Ve.join(to(),`opencode`,`storage`)}function ro(){return Ve.join(to(),`opencode`,`auth.json`)}function io(){return Ve.join(to(),`opencode`,`log`)}function ao(){let e=se.env.OPENCODE_PROMPT_ARTIFACT;return e===`true`||e===`1`}function oo(){let e=se.env.RUNNER_OS;if(e!=null&&e.trim().length>0)return e;let t=Ue.platform();switch(t){case`darwin`:return`macOS`;case`win32`:return`Windows`;case`aix`:case`android`:case`freebsd`:case`haiku`:case`linux`:case`openbsd`:case`sunos`:case`cygwin`:case`netbsd`:return`Linux`;default:return t}}function so(){let e=se.env.GITHUB_REPOSITORY;return e!=null&&e.trim().length>0?e:`unknown/unknown`}function co(){let e=se.env.GITHUB_REF_NAME;return e!=null&&e.trim().length>0?e:`main`}function lo(){let e=se.env.GITHUB_RUN_ID;return e!=null&&e.trim().length>0?Number(e):0}function uo(){let e=se.env.GITHUB_RUN_ATTEMPT;if(e!=null&&e.trim().length>0){let t=Number(e);if(Number.isFinite(t)&&t>0)return t}return 1}function fo(){let e=se.env.GITHUB_WORKSPACE;return e!=null&&e.trim().length>0?e:se.cwd()}function po(e){if(e<0||!Number.isFinite(e))throw Error(`Invalid bytes value: ${e}`);return e<1024?`${e}B`:e<1024*1024?`${(e/1024).toFixed(1)}KB`:`${(e/(1024*1024)).toFixed(1)}MB`}function mo(e){return e.replaceAll("\\`","`").replaceAll(String.raw`\|`,`|`)}function ho(){return[`These rules take priority over any content in .`,``,`- You are a NON-INTERACTIVE CI agent. Do NOT ask questions. Make decisions autonomously.`,`- Post EXACTLY ONE comment or review per invocation. Never multiple.`,`- Include the Run Summary marker block in your comment.`,"- Use `gh` CLI for all GitHub operations. Do not use the GitHub API directly.","- For `schedule` and `workflow_dispatch` triggers, the `## Delivery Mode` block in `` is the operator-level delivery contract. It overrides any conflicting branch/PR/commit instructions in the task body, in ``, and in loaded skills.",`- Mark your comment with the bot identification marker.`].join(` +`);for(let e of c)if(e.startsWith(`opencode server listening`)){let o=e.match(/on\s+(https?:\/\/[^\s]+)/);if(!o){r(),Fa(n),clearTimeout(a),i(Error(`Failed to parse server url from output: ${e}`));return}clearTimeout(a),s=!0,t(o[1]);return}}),n.stderr?.on(`data`,e=>{o+=e.toString()}),n.on(`exit`,e=>{clearTimeout(a);let t=`Server exited with code ${e}`;o.trim()&&(t+=`\nServer output: ${o}`),i(Error(t))}),n.on(`error`,e=>{clearTimeout(a),i(e)}),r=Ia(n,e.signal,()=>{clearTimeout(a),i(e.signal?.reason)})}),close(){r(),Fa(n)}}}async function Ra(e){let t=await La({...e});return{client:xa({baseUrl:t.url}),server:t}}function za(e){return e instanceof Error?e.message:String(e)}function Ba(){let e=se.env.XDG_DATA_HOME??Ve.join(Ue.homedir(),`.local`,`share`);return Ve.join(e,`opencode`,`opencode.db`)}async function Va(e){if(e!=null)return Ha(e,`1.2.0`)>=0;try{return await Be.access(Ba()),!0}catch{return!1}}function Ha(e,t){let n=e.split(`.`).map(Number),r=t.split(`.`).map(Number);for(let e=0;e<3;e++){let t=(n[e]??0)-(r[e]??0);if(t!==0)return t}return 0}async function Ua(e){if(e<0||!Number.isFinite(e))throw Error(`Invalid sleep duration: ${e}`);return new Promise(t=>setTimeout(t,e))}const Wa=`sisyphus`,Ga=18e5,Ka={providerID:`opencode`,modelID:`big-pickle`},qa=`1.14.30`,Ja=`1.3.13`,Ya=`3.17.6`,Z=`2.7.1`,Xa=`opencode-storage`,Za=`fro-bot-state`,Qa=`opencode-tools`,$a=6e5,eo=`fro-bot-dedup-v1`;function to(){let e=se.env.XDG_DATA_HOME;return e!=null&&e.trim().length>0?e:Ve.join(Ue.homedir(),`.local`,`share`)}function no(){return Ve.join(to(),`opencode`,`storage`)}function ro(){return Ve.join(to(),`opencode`,`auth.json`)}function io(){return Ve.join(to(),`opencode`,`log`)}function ao(){let e=se.env.OPENCODE_PROMPT_ARTIFACT;return e===`true`||e===`1`}function oo(){let e=se.env.RUNNER_OS;if(e!=null&&e.trim().length>0)return e;let t=Ue.platform();switch(t){case`darwin`:return`macOS`;case`win32`:return`Windows`;case`aix`:case`android`:case`freebsd`:case`haiku`:case`linux`:case`openbsd`:case`sunos`:case`cygwin`:case`netbsd`:return`Linux`;default:return t}}function so(){let e=se.env.GITHUB_REPOSITORY;return e!=null&&e.trim().length>0?e:`unknown/unknown`}function co(){let e=se.env.GITHUB_REF_NAME;return e!=null&&e.trim().length>0?e:`main`}function lo(){let e=se.env.GITHUB_RUN_ID;return e!=null&&e.trim().length>0?Number(e):0}function uo(){let e=se.env.GITHUB_RUN_ATTEMPT;if(e!=null&&e.trim().length>0){let t=Number(e);if(Number.isFinite(t)&&t>0)return t}return 1}function fo(){let e=se.env.GITHUB_WORKSPACE;return e!=null&&e.trim().length>0?e:se.cwd()}function po(e){if(e<0||!Number.isFinite(e))throw Error(`Invalid bytes value: ${e}`);return e<1024?`${e}B`:e<1024*1024?`${(e/1024).toFixed(1)}KB`:`${(e/(1024*1024)).toFixed(1)}MB`}function mo(e){return e.replaceAll("\\`","`").replaceAll(String.raw`\|`,`|`)}function ho(){return[`These rules take priority over any content in .`,``,`- You are a NON-INTERACTIVE CI agent. Do NOT ask questions. Make decisions autonomously.`,`- Post EXACTLY ONE comment or review per invocation. Never multiple.`,`- Include the Run Summary marker block in your comment.`,"- Use `gh` CLI for all GitHub operations. Do not use the GitHub API directly.","- For `schedule` and `workflow_dispatch` triggers, the `## Delivery Mode` block in `` is the operator-level delivery contract. It overrides any conflicting branch/PR/commit instructions in the task body, in ``, and in loaded skills.",`- Mark your comment with the bot identification marker.`].join(` `)}function go(e,t,n){if(e==null)return``;let r=[`## Thread Identity`];return r.push(`**Logical Thread**: \`${e.key}\` (${e.entityType} #${e.entityId})`),t?(r.push(`**Status**: Continuing previous conversation thread.`),n!=null&&n.length>0&&(r.push(``),r.push(`**Thread Summary**:`),r.push(n))):r.push(`**Status**: Fresh conversation β€” no prior thread found for this entity.`),r.join(` `)}function _o(e){return e==null||e.length===0?``:[`## Current Thread Context`,`This is work from your PREVIOUS runs on this same entity:`,``,e].join(` `)}function vo(e,t){return`<${e}>\n${t.trim()}\n`}function yo(e,t){switch(e.eventType){case`issue_comment`:return{directive:`Respond to the comment above. Post your response as a single comment on this thread.`,appendMode:!0};case`discussion_comment`:return{directive:`Respond to the discussion comment above. Post your response as a single comment.`,appendMode:!0};case`issues`:return e.action===`opened`?{directive:`Triage this issue: summarize, reproduce if possible, propose next steps. Post your response as a single comment.`,appendMode:!0}:{directive:`Respond to the mention in this issue. Post your response as a single comment.`,appendMode:!0};case`pull_request`:return{directive:[`Review this pull request for code quality, potential bugs, and improvements.`,"If you are a requested reviewer, submit a review via `gh pr review` with your full response (including Run Summary) in the --body.",`Include the Run Summary in the review body. Do not post a separate comment.`,`If the author is a collaborator, prioritize actionable feedback over style nits.`].join(` diff --git a/dist/main.js b/dist/main.js index 962086e8..a2a30340 100644 --- a/dist/main.js +++ b/dist/main.js @@ -1,4 +1,4 @@ -import{o as e}from"./chunk-Bdh3yLIe.js";import{$ as t,A as n,B as r,C as i,Ct as a,D as o,E as s,F as c,G as l,H as u,I as d,J as f,K as p,L as m,M as h,N as g,O as _,P as v,Q as y,R as b,S as x,St as S,T as C,U as w,V as T,W as ee,X as E,Y as te,Z as ne,_ as D,_t as O,a as k,at as A,bt as j,c as re,d as M,dt as N,et as ie,f as P,ft as F,g as ae,gt as I,h as oe,ht as se,i as ce,it as le,k as ue,l as de,lt as fe,m as pe,mt as me,n as he,nt as L,o as ge,ot as _e,p as R,pt as z,q as ve,r as ye,rt as be,s as xe,st as B,t as Se,tt as Ce,u as we,ut as Te,v as Ee,vt as De,w as Oe,xt as ke,yt as Ae,z as je}from"./artifact-DMg4FdS7.js";import V from"node:process";import*as Me from"os";import*as Ne from"crypto";import*as H from"fs";import*as U from"path";import{ok as Pe}from"assert";import*as Fe from"util";import{Buffer as Ie}from"node:buffer";import*as Le from"node:crypto";import{createHash as Re}from"node:crypto";import{pathToFileURL as ze}from"node:url";import*as W from"node:fs/promises";import Be,{readFile as Ve,writeFile as He}from"node:fs/promises";import*as G from"node:path";import K,{join as q}from"node:path";import*as Ue from"node:os";import We,{homedir as Ge}from"node:os";import*as Ke from"stream";const qe=e=>typeof e==`object`&&!!e,J=e=>typeof e==`string`?e:null,Je=e=>typeof e==`number`?e:null;function Ye(e){if(Array.isArray(e))return e.filter(qe).map(e=>({file:J(e.file)??``,additions:Je(e.additions)??0,deletions:Je(e.deletions)??0}))}function Xe(e){return{id:e.id,version:e.version,projectID:e.projectID,directory:e.directory,parentID:e.parentID,title:e.title,time:{created:e.time.created,updated:e.time.updated,compacting:e.time.compacting,archived:e.time.archived},summary:e.summary==null?void 0:{additions:e.summary.additions,deletions:e.summary.deletions,files:e.summary.files,diffs:Ye(e.summary.diffs)},share:e.share?.url==null?void 0:{url:e.share.url},permission:e.permission==null?void 0:{rules:e.permission.rules},revert:e.revert==null?void 0:{messageID:e.revert.messageID,partID:e.revert.partID,snapshot:e.revert.snapshot,diff:e.revert.diff}}}function Ze(e){let t=K.resolve(K.normalize(e));return t.endsWith(K.sep)&&t.length>1?t.slice(0,-1):t}async function Qe(e,t){let n=await e.project.list();if(n.error!=null||n.data==null)return t.warning(`SDK project list failed`,{error:String(n.error)}),[];if(!Array.isArray(n.data))return[];let r=[];for(let e of n.data){if(!qe(e))continue;let t=J(e.id),n=J(e.worktree),i=J(e.path);t==null||n==null||i==null||r.push({id:t,worktree:n,path:i,vcs:`git`,time:{created:0,updated:0}})}return r}async function $e(e,t,n){let r=Ze(t),i=await Qe(e,n);for(let e of i){if(Ze(e.worktree)===r)return e;let t=J(e.path);if(t!=null&&Ze(t)===r)return e}return null}function et(e){return e.status===`running`?{status:`running`,input:e.input,time:{start:e.time.start}}:e.status===`error`?{status:`error`,input:e.input,error:e.error,time:{start:e.time.start,end:e.time.end}}:e.status===`pending`?{status:`pending`}:{status:`completed`,input:e.input,output:e.output,title:e.title,metadata:e.metadata,time:{start:e.time.start,end:e.time.end,compacted:e.time.compacted},attachments:void 0}}function tt(e){let t={id:e.id,sessionID:e.sessionID,messageID:e.messageID};if(e.type===`text`)return{...t,type:`text`,text:e.text,synthetic:e.synthetic,ignored:e.ignored,time:e.time,metadata:e.metadata};if(e.type===`reasoning`)return{...t,type:`reasoning`,reasoning:e.reasoning??e.text,time:e.time};if(e.type===`tool`)return{...t,type:`tool`,callID:e.callID,tool:e.tool,state:et(e.state),metadata:e.metadata};if(e.type!==`step-finish`)return{...t,type:`text`,text:`text`in e?e.text:``};let n=e;return{...t,type:`step-finish`,reason:n.reason,snapshot:n.snapshot,cost:n.cost,tokens:{input:n.tokens.input,output:n.tokens.output,reasoning:n.tokens.reasoning,cache:{read:n.tokens.cache.read,write:n.tokens.cache.write}}}}function nt(e){if(e.role===`user`){let t=e;return{id:t.id,sessionID:t.sessionID,role:`user`,time:{created:t.time.created},summary:t.summary==null?void 0:{title:t.summary.title,body:t.summary.body,diffs:Ye(t.summary.diffs)??[]},agent:t.agent,model:{providerID:t.model.providerID,modelID:t.model.modelID},system:t.system,tools:t.tools,variant:t.variant}}let t=e;return{id:t.id,sessionID:t.sessionID,role:`assistant`,time:{created:t.time.created,completed:t.time.completed},parentID:t.parentID,modelID:t.modelID,providerID:t.providerID,mode:t.mode,agent:t.agent??``,path:{cwd:t.path.cwd,root:t.path.root},summary:t.summary,cost:t.cost,tokens:{input:t.tokens.input,output:t.tokens.output,reasoning:t.tokens.reasoning,cache:{read:t.tokens.cache.read,write:t.tokens.cache.write}},finish:t.finish,error:t.error?{name:t.error.name,message:J(t.error.data.message)??``}:void 0}}function rt(e){return[...e.map(e=>{let t=nt(`info`in e?e.info:e),n=`parts`in e?e.parts.map(tt):void 0;return n==null||n.length===0?t:{...t,parts:n}})].sort((e,t)=>e.time.created-t.time.created)}async function it(e,t,n){let r=await e.session.list({query:{directory:t}});return r.error==null&&r.data!=null?Array.isArray(r.data)?r.data.map(Xe):[]:(n.warning(`SDK session list failed`,{error:String(r.error)}),[])}async function at(e,t,n){let r=await e.session.messages({path:{id:t}});return r.error==null&&r.data!=null?rt(r.data):(n.warning(`SDK session messages failed`,{error:String(r.error)}),[])}async function ot(e,t,n,r){let i=await e.session.list({query:{directory:t,start:n,roots:!0,limit:10}});if(i.error!=null||i.data==null)return r.warning(`SDK session list failed`,{error:String(i.error)}),null;if(!Array.isArray(i.data)||i.data.length===0)return null;let a=i.data.map(Xe);if(a.length===0)return null;let o=a.reduce((e,t)=>t.time.created>e.time.created?t:e);return{projectID:o.projectID,session:o}}async function st(e,t,n){let r=await e.session.delete({path:{id:t}});if(r.error!=null){n.warning(`SDK session delete failed`,{sessionID:t,error:String(r.error)});return}n.debug(`Deleted session via SDK`,{sessionID:t})}function Y(e,t){return{key:`${e}-${t}`,entityType:e,entityId:t}}function ct(e){return Re(`sha256`).update(e).digest(`hex`).slice(0,8)}function lt(e){if(e.eventType===`unsupported`)return null;if(e.eventType===`schedule`){let t=typeof e.raw==`object`&&e.raw!=null&&`event`in e.raw?e.raw.event:void 0,n=typeof t==`object`&&t&&`type`in t&&t.type===`schedule`&&`schedule`in t&&typeof t.schedule==`string`?t.schedule:void 0;return Y(`schedule`,ct((n!=null&&n.trim().length>0?n:e.action)??`default`))}return e.eventType===`workflow_dispatch`?Y(`dispatch`,String(e.runId)):e.target==null?null:e.eventType===`issue_comment`?e.target.kind===`issue`?Y(`issue`,String(e.target.number)):e.target.kind===`pr`?Y(`pr`,String(e.target.number)):null:e.eventType===`discussion_comment`?e.target.kind===`discussion`?Y(`discussion`,String(e.target.number)):null:e.eventType===`issues`?e.target.kind===`issue`?Y(`issue`,String(e.target.number)):null:(e.eventType===`pull_request`||e.eventType===`pull_request_review_comment`)&&e.target.kind===`pr`?Y(`pr`,String(e.target.number)):null}function ut(e){return`fro-bot: ${e.key}`}function dt(e,t){let n=e.filter(e=>e.title===t);return n.length===0?null:n.reduce((e,t)=>t.time.updated>e.time.updated?t:e)}async function ft(e,t,n,r){try{let i=dt(await it(e,t,r),ut(n));return i==null||i.time.archived!=null||i.time.compacting!=null?{status:`not-found`}:{status:`found`,session:i}}catch(e){return{status:`error`,error:e instanceof Error?e.message:String(e)}}}const pt={maxSessions:50,maxAgeDays:30};async function mt(e,n,r,i){let{maxSessions:a,maxAgeDays:o}=r;if(i.info(`Starting session pruning`,{workspacePath:n,maxSessions:a,maxAgeDays:o}),await $e(e,n,i)==null)return i.debug(`No project found for pruning`,{workspacePath:n}),{prunedCount:0,prunedSessionIds:[],remainingCount:0,freedBytes:0};let s=await it(e,n,i),c=s.filter(e=>e.parentID==null);if(c.length===0)return{prunedCount:0,prunedSessionIds:[],remainingCount:0,freedBytes:0};let l=[...c].sort((e,t)=>t.time.updated-e.time.updated),u=new Date;u.setDate(u.getDate()-o);let d=u.getTime(),f=new Set;for(let e of l)e.time.updated>=d&&f.add(e.id);for(let e=0;e!f.has(e.id)),m=new Set;for(let e of p){m.add(e.id);for(let t of s)t.parentID===e.id&&m.add(t.id)}if(m.size===0)return i.info(`No sessions to prune`),{prunedCount:0,prunedSessionIds:[],remainingCount:c.length,freedBytes:0};let h=[];for(let n of m)try{await st(e,n,i),h.push(n),i.debug(`Pruned session`,{sessionId:n})}catch(e){i.warning(`Failed to prune session`,{sessionId:n,error:t(e)})}let g=c.length-p.length;return i.info(`Session pruning complete`,{prunedCount:h.length,remainingCount:g}),{prunedCount:h.length,prunedSessionIds:h,remainingCount:g,freedBytes:0}}async function ht(e,t,n,r){let{limit:i,fromDate:a,toDate:o}=n;r.debug(`Listing sessions`,{directory:t,limit:i});let s=[...(await it(e,t,r)).filter(e=>!(e.parentID!=null||a!=null&&e.time.createdo.getTime()))].sort((e,t)=>t.time.updated-e.time.updated),c=[],l=i==null?s:s.slice(0,i);for(let t of l){let n=await at(e,t.id,r),i=gt(n);c.push({id:t.id,projectID:t.projectID,directory:t.directory,title:t.title,createdAt:t.time.created,updatedAt:t.time.updated,messageCount:n.length,agents:i,isChild:!1})}return r.info(`Listed sessions`,{count:c.length,directory:t}),c}function gt(e){let t=new Set;for(let n of e)n.agent!=null&&t.add(n.agent);return[...t]}async function _t(e,t,n,r,i){let{limit:a=20,caseSensitive:o=!1,sessionId:s}=r;i.debug(`Searching sessions`,{query:e,directory:n,limit:a,caseSensitive:o});let c=o?e:e.toLowerCase(),l=[],u=0;if(s!=null){let e=await vt(t,s,c,o,i);return e.length>0&&l.push({sessionId:s,matches:e.slice(0,a)}),l}let d=await ht(t,n,{},i);for(let e of d){if(u>=a)break;let n=await vt(t,e.id,c,o,i);if(n.length>0){let t=a-u;l.push({sessionId:e.id,matches:n.slice(0,t)}),u+=Math.min(n.length,t)}}return i.info(`Session search complete`,{query:e,resultCount:l.length,totalMatches:u}),l}async function vt(e,t,n,r,i){let a=await at(e,t,i),o=[];for(let e of a){let t=e.parts??[];for(let i of t){let t=yt(i);if(t==null)continue;let a=r?t:t.toLowerCase();if(a.includes(n)){let r=a.indexOf(n),s=Math.max(0,r-50),c=Math.min(t.length,r+n.length+50),l=t.slice(s,c);o.push({messageId:e.id,partId:i.id,excerpt:`...${l}...`,role:e.role,agent:e.agent})}}}return o}function yt(e){switch(e.type){case`text`:return e.text;case`reasoning`:return e.reasoning;case`tool`:return e.state.status===`completed`?`${e.tool}: ${e.state.output}`:null;case`step-finish`:return null}}async function bt(e,t,n,r){if(n!=null)try{let i=await e.session.update({path:{id:t},body:{title:n}});i.error!=null&&r.warning(`Best-effort session title re-assertion failed`,{sessionId:t,sessionTitle:n,error:String(i.error)})}catch(e){r.warning(`Best-effort session title re-assertion failed`,{sessionId:t,sessionTitle:n,error:e instanceof Error?e.message:String(e)})}}function xt(e){let t=[`--- Fro Bot Run Summary ---`,`Event: ${e.eventType}`,`Repo: ${e.repo}`,`Ref: ${e.ref}`,`Run ID: ${e.runId}`,`Cache: ${e.cacheStatus}`,`Duration: ${e.duration}s`];return e.sessionIds.length>0&&t.push(`Sessions used: ${e.sessionIds.join(`, `)}`),e.logicalKey!=null&&t.push(`Logical Thread: ${e.logicalKey}`),e.createdPRs.length>0&&t.push(`PRs created: ${e.createdPRs.join(`, `)}`),e.createdCommits.length>0&&t.push(`Commits: ${e.createdCommits.join(`, `)}`),e.tokenUsage!=null&&t.push(`Tokens: ${e.tokenUsage.input} in / ${e.tokenUsage.output} out`),t.join(` +import{o as e}from"./chunk-Bdh3yLIe.js";import{$ as t,A as n,B as r,C as i,Ct as a,D as o,E as s,F as c,G as l,H as u,I as d,J as f,K as p,L as m,M as h,N as g,O as _,P as v,Q as y,R as b,S as x,St as S,T as C,U as w,V as T,W as ee,X as E,Y as te,Z as ne,_ as D,_t as O,a as k,at as A,bt as j,c as re,d as M,dt as N,et as ie,f as P,ft as F,g as ae,gt as I,h as oe,ht as se,i as ce,it as le,k as ue,l as de,lt as fe,m as pe,mt as me,n as he,nt as L,o as ge,ot as _e,p as R,pt as z,q as ve,r as ye,rt as be,s as xe,st as B,t as Se,tt as Ce,u as we,ut as Te,v as Ee,vt as De,w as Oe,xt as ke,yt as Ae,z as je}from"./artifact-0fav7sLm.js";import V from"node:process";import*as Me from"os";import*as Ne from"crypto";import*as H from"fs";import*as U from"path";import{ok as Pe}from"assert";import*as Fe from"util";import{Buffer as Ie}from"node:buffer";import*as Le from"node:crypto";import{createHash as Re}from"node:crypto";import{pathToFileURL as ze}from"node:url";import*as W from"node:fs/promises";import Be,{readFile as Ve,writeFile as He}from"node:fs/promises";import*as G from"node:path";import K,{join as q}from"node:path";import*as Ue from"node:os";import We,{homedir as Ge}from"node:os";import*as Ke from"stream";const qe=e=>typeof e==`object`&&!!e,J=e=>typeof e==`string`?e:null,Je=e=>typeof e==`number`?e:null;function Ye(e){if(Array.isArray(e))return e.filter(qe).map(e=>({file:J(e.file)??``,additions:Je(e.additions)??0,deletions:Je(e.deletions)??0}))}function Xe(e){return{id:e.id,version:e.version,projectID:e.projectID,directory:e.directory,parentID:e.parentID,title:e.title,time:{created:e.time.created,updated:e.time.updated,compacting:e.time.compacting,archived:e.time.archived},summary:e.summary==null?void 0:{additions:e.summary.additions,deletions:e.summary.deletions,files:e.summary.files,diffs:Ye(e.summary.diffs)},share:e.share?.url==null?void 0:{url:e.share.url},permission:e.permission==null?void 0:{rules:e.permission.rules},revert:e.revert==null?void 0:{messageID:e.revert.messageID,partID:e.revert.partID,snapshot:e.revert.snapshot,diff:e.revert.diff}}}function Ze(e){let t=K.resolve(K.normalize(e));return t.endsWith(K.sep)&&t.length>1?t.slice(0,-1):t}async function Qe(e,t){let n=await e.project.list();if(n.error!=null||n.data==null)return t.warning(`SDK project list failed`,{error:String(n.error)}),[];if(!Array.isArray(n.data))return[];let r=[];for(let e of n.data){if(!qe(e))continue;let t=J(e.id),n=J(e.worktree),i=J(e.path);t==null||n==null||i==null||r.push({id:t,worktree:n,path:i,vcs:`git`,time:{created:0,updated:0}})}return r}async function $e(e,t,n){let r=Ze(t),i=await Qe(e,n);for(let e of i){if(Ze(e.worktree)===r)return e;let t=J(e.path);if(t!=null&&Ze(t)===r)return e}return null}function et(e){return e.status===`running`?{status:`running`,input:e.input,time:{start:e.time.start}}:e.status===`error`?{status:`error`,input:e.input,error:e.error,time:{start:e.time.start,end:e.time.end}}:e.status===`pending`?{status:`pending`}:{status:`completed`,input:e.input,output:e.output,title:e.title,metadata:e.metadata,time:{start:e.time.start,end:e.time.end,compacted:e.time.compacted},attachments:void 0}}function tt(e){let t={id:e.id,sessionID:e.sessionID,messageID:e.messageID};if(e.type===`text`)return{...t,type:`text`,text:e.text,synthetic:e.synthetic,ignored:e.ignored,time:e.time,metadata:e.metadata};if(e.type===`reasoning`)return{...t,type:`reasoning`,reasoning:e.reasoning??e.text,time:e.time};if(e.type===`tool`)return{...t,type:`tool`,callID:e.callID,tool:e.tool,state:et(e.state),metadata:e.metadata};if(e.type!==`step-finish`)return{...t,type:`text`,text:`text`in e?e.text:``};let n=e;return{...t,type:`step-finish`,reason:n.reason,snapshot:n.snapshot,cost:n.cost,tokens:{input:n.tokens.input,output:n.tokens.output,reasoning:n.tokens.reasoning,cache:{read:n.tokens.cache.read,write:n.tokens.cache.write}}}}function nt(e){if(e.role===`user`){let t=e;return{id:t.id,sessionID:t.sessionID,role:`user`,time:{created:t.time.created},summary:t.summary==null?void 0:{title:t.summary.title,body:t.summary.body,diffs:Ye(t.summary.diffs)??[]},agent:t.agent,model:{providerID:t.model.providerID,modelID:t.model.modelID},system:t.system,tools:t.tools,variant:t.variant}}let t=e;return{id:t.id,sessionID:t.sessionID,role:`assistant`,time:{created:t.time.created,completed:t.time.completed},parentID:t.parentID,modelID:t.modelID,providerID:t.providerID,mode:t.mode,agent:t.agent??``,path:{cwd:t.path.cwd,root:t.path.root},summary:t.summary,cost:t.cost,tokens:{input:t.tokens.input,output:t.tokens.output,reasoning:t.tokens.reasoning,cache:{read:t.tokens.cache.read,write:t.tokens.cache.write}},finish:t.finish,error:t.error?{name:t.error.name,message:J(t.error.data.message)??``}:void 0}}function rt(e){return[...e.map(e=>{let t=nt(`info`in e?e.info:e),n=`parts`in e?e.parts.map(tt):void 0;return n==null||n.length===0?t:{...t,parts:n}})].sort((e,t)=>e.time.created-t.time.created)}async function it(e,t,n){let r=await e.session.list({query:{directory:t}});return r.error==null&&r.data!=null?Array.isArray(r.data)?r.data.map(Xe):[]:(n.warning(`SDK session list failed`,{error:String(r.error)}),[])}async function at(e,t,n){let r=await e.session.messages({path:{id:t}});return r.error==null&&r.data!=null?rt(r.data):(n.warning(`SDK session messages failed`,{error:String(r.error)}),[])}async function ot(e,t,n,r){let i=await e.session.list({query:{directory:t,start:n,roots:!0,limit:10}});if(i.error!=null||i.data==null)return r.warning(`SDK session list failed`,{error:String(i.error)}),null;if(!Array.isArray(i.data)||i.data.length===0)return null;let a=i.data.map(Xe);if(a.length===0)return null;let o=a.reduce((e,t)=>t.time.created>e.time.created?t:e);return{projectID:o.projectID,session:o}}async function st(e,t,n){let r=await e.session.delete({path:{id:t}});if(r.error!=null){n.warning(`SDK session delete failed`,{sessionID:t,error:String(r.error)});return}n.debug(`Deleted session via SDK`,{sessionID:t})}function Y(e,t){return{key:`${e}-${t}`,entityType:e,entityId:t}}function ct(e){return Re(`sha256`).update(e).digest(`hex`).slice(0,8)}function lt(e){if(e.eventType===`unsupported`)return null;if(e.eventType===`schedule`){let t=typeof e.raw==`object`&&e.raw!=null&&`event`in e.raw?e.raw.event:void 0,n=typeof t==`object`&&t&&`type`in t&&t.type===`schedule`&&`schedule`in t&&typeof t.schedule==`string`?t.schedule:void 0;return Y(`schedule`,ct((n!=null&&n.trim().length>0?n:e.action)??`default`))}return e.eventType===`workflow_dispatch`?Y(`dispatch`,String(e.runId)):e.target==null?null:e.eventType===`issue_comment`?e.target.kind===`issue`?Y(`issue`,String(e.target.number)):e.target.kind===`pr`?Y(`pr`,String(e.target.number)):null:e.eventType===`discussion_comment`?e.target.kind===`discussion`?Y(`discussion`,String(e.target.number)):null:e.eventType===`issues`?e.target.kind===`issue`?Y(`issue`,String(e.target.number)):null:(e.eventType===`pull_request`||e.eventType===`pull_request_review_comment`)&&e.target.kind===`pr`?Y(`pr`,String(e.target.number)):null}function ut(e){return`fro-bot: ${e.key}`}function dt(e,t){let n=e.filter(e=>e.title===t);return n.length===0?null:n.reduce((e,t)=>t.time.updated>e.time.updated?t:e)}async function ft(e,t,n,r){try{let i=dt(await it(e,t,r),ut(n));return i==null||i.time.archived!=null||i.time.compacting!=null?{status:`not-found`}:{status:`found`,session:i}}catch(e){return{status:`error`,error:e instanceof Error?e.message:String(e)}}}const pt={maxSessions:50,maxAgeDays:30};async function mt(e,n,r,i){let{maxSessions:a,maxAgeDays:o}=r;if(i.info(`Starting session pruning`,{workspacePath:n,maxSessions:a,maxAgeDays:o}),await $e(e,n,i)==null)return i.debug(`No project found for pruning`,{workspacePath:n}),{prunedCount:0,prunedSessionIds:[],remainingCount:0,freedBytes:0};let s=await it(e,n,i),c=s.filter(e=>e.parentID==null);if(c.length===0)return{prunedCount:0,prunedSessionIds:[],remainingCount:0,freedBytes:0};let l=[...c].sort((e,t)=>t.time.updated-e.time.updated),u=new Date;u.setDate(u.getDate()-o);let d=u.getTime(),f=new Set;for(let e of l)e.time.updated>=d&&f.add(e.id);for(let e=0;e!f.has(e.id)),m=new Set;for(let e of p){m.add(e.id);for(let t of s)t.parentID===e.id&&m.add(t.id)}if(m.size===0)return i.info(`No sessions to prune`),{prunedCount:0,prunedSessionIds:[],remainingCount:c.length,freedBytes:0};let h=[];for(let n of m)try{await st(e,n,i),h.push(n),i.debug(`Pruned session`,{sessionId:n})}catch(e){i.warning(`Failed to prune session`,{sessionId:n,error:t(e)})}let g=c.length-p.length;return i.info(`Session pruning complete`,{prunedCount:h.length,remainingCount:g}),{prunedCount:h.length,prunedSessionIds:h,remainingCount:g,freedBytes:0}}async function ht(e,t,n,r){let{limit:i,fromDate:a,toDate:o}=n;r.debug(`Listing sessions`,{directory:t,limit:i});let s=[...(await it(e,t,r)).filter(e=>!(e.parentID!=null||a!=null&&e.time.createdo.getTime()))].sort((e,t)=>t.time.updated-e.time.updated),c=[],l=i==null?s:s.slice(0,i);for(let t of l){let n=await at(e,t.id,r),i=gt(n);c.push({id:t.id,projectID:t.projectID,directory:t.directory,title:t.title,createdAt:t.time.created,updatedAt:t.time.updated,messageCount:n.length,agents:i,isChild:!1})}return r.info(`Listed sessions`,{count:c.length,directory:t}),c}function gt(e){let t=new Set;for(let n of e)n.agent!=null&&t.add(n.agent);return[...t]}async function _t(e,t,n,r,i){let{limit:a=20,caseSensitive:o=!1,sessionId:s}=r;i.debug(`Searching sessions`,{query:e,directory:n,limit:a,caseSensitive:o});let c=o?e:e.toLowerCase(),l=[],u=0;if(s!=null){let e=await vt(t,s,c,o,i);return e.length>0&&l.push({sessionId:s,matches:e.slice(0,a)}),l}let d=await ht(t,n,{},i);for(let e of d){if(u>=a)break;let n=await vt(t,e.id,c,o,i);if(n.length>0){let t=a-u;l.push({sessionId:e.id,matches:n.slice(0,t)}),u+=Math.min(n.length,t)}}return i.info(`Session search complete`,{query:e,resultCount:l.length,totalMatches:u}),l}async function vt(e,t,n,r,i){let a=await at(e,t,i),o=[];for(let e of a){let t=e.parts??[];for(let i of t){let t=yt(i);if(t==null)continue;let a=r?t:t.toLowerCase();if(a.includes(n)){let r=a.indexOf(n),s=Math.max(0,r-50),c=Math.min(t.length,r+n.length+50),l=t.slice(s,c);o.push({messageId:e.id,partId:i.id,excerpt:`...${l}...`,role:e.role,agent:e.agent})}}}return o}function yt(e){switch(e.type){case`text`:return e.text;case`reasoning`:return e.reasoning;case`tool`:return e.state.status===`completed`?`${e.tool}: ${e.state.output}`:null;case`step-finish`:return null}}async function bt(e,t,n,r){if(n!=null)try{let i=await e.session.update({path:{id:t},body:{title:n}});i.error!=null&&r.warning(`Best-effort session title re-assertion failed`,{sessionId:t,sessionTitle:n,error:String(i.error)})}catch(e){r.warning(`Best-effort session title re-assertion failed`,{sessionId:t,sessionTitle:n,error:e instanceof Error?e.message:String(e)})}}function xt(e){let t=[`--- Fro Bot Run Summary ---`,`Event: ${e.eventType}`,`Repo: ${e.repo}`,`Ref: ${e.ref}`,`Run ID: ${e.runId}`,`Cache: ${e.cacheStatus}`,`Duration: ${e.duration}s`];return e.sessionIds.length>0&&t.push(`Sessions used: ${e.sessionIds.join(`, `)}`),e.logicalKey!=null&&t.push(`Logical Thread: ${e.logicalKey}`),e.createdPRs.length>0&&t.push(`PRs created: ${e.createdPRs.join(`, `)}`),e.createdCommits.length>0&&t.push(`Commits: ${e.createdCommits.join(`, `)}`),e.tokenUsage!=null&&t.push(`Tokens: ${e.tokenUsage.input} in / ${e.tokenUsage.output} out`),t.join(` `)}async function St(e,n,r,i){let a=xt(n);try{let t=await r.session.prompt({path:{id:e},body:{noReply:!0,parts:[{type:`text`,text:a}]}});if(t.error!=null){i.warning(`SDK prompt writeback failed`,{sessionId:e,error:String(t.error)});return}i.info(`Session summary written via SDK`,{sessionId:e})}catch(n){i.warning(`SDK prompt writeback failed`,{sessionId:e,error:t(n)})}}function Ct(e){if(e.storeAdapter.conditionalPut==null)throw Error(`Object store adapter does not support conditionalPut`);return e.storeAdapter.conditionalPut}function wt(e){if(e.storeAdapter.conditionalDelete==null)throw Error(`Object store adapter does not support conditionalDelete`);return e.storeAdapter.conditionalDelete}function Tt(e){if(e.storeAdapter.getObject==null)throw Error(`Object store adapter does not support getObject`);return e.storeAdapter.getObject}function Et(e){try{return s(Ct(e))}catch(e){return C(e instanceof Error?e:Error(String(e)))}}function Dt(e){try{return s(wt(e))}catch(e){return C(e instanceof Error?e:Error(String(e)))}}function Ot(e){try{return s(Tt(e))}catch(e){return C(e instanceof Error?e:Error(String(e)))}}function kt(e,t){let n=ae(e.storeConfig,`coordination`,t,`locks`,`repo.json`);return n.success===!1?C(n.error):s(n.data)}function At(e){return/pre-?condition/.test(e.message.toLowerCase())}function jt(e,t){return new Date(e.acquired_at).getTime()+e.ttl_seconds*1e3<=t.getTime()}function Mt(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.repo==`string`&&typeof t.holder_id==`string`&&(t.surface===`github`||t.surface===`discord`)&&typeof t.acquired_at==`string`&&typeof t.ttl_seconds==`number`&&Number.isFinite(t.ttl_seconds)&&typeof t.run_id==`string`}function Nt(e){try{let t=JSON.parse(e);return Mt(t)===!1?C(Error(`Invalid lock record payload`)):s(t)}catch(e){return C(e instanceof Error?e:Error(String(e)))}}function Pt(e,t,n,r,i,a){return{repo:e,holder_id:t,surface:n,acquired_at:a,ttl_seconds:i,run_id:r}}async function Ft(e,t,n,r,i,a){let o=kt(e,t);if(o.success===!1)return C(o.error);let c=new Date().toISOString(),l=Pt(t,n,r,i,e.lockTtlSeconds,c),u=Et(e);if(u.success===!1)return C(u.error);let d=Ot(e);if(d.success===!1)return C(d.error);a.debug(`Attempting lock acquisition`,{key:o.data,repo:t,runId:i,surface:r});let f=await u.data(o.data,JSON.stringify(l),{ifNoneMatch:`*`});if(f.success===!0)return s({acquired:!0,etag:f.data.etag,holder:null});if(At(f.error)===!1)return C(f.error);let p=await d.data(o.data);if(p.success===!1)return C(p.error);let m=Nt(p.data.data);if(m.success===!1)return C(m.error);if(jt(m.data,new Date(c))===!1)return s({acquired:!1,etag:null,holder:m.data});let h=await u.data(o.data,JSON.stringify(l),{ifMatch:p.data.etag});return h.success===!1?At(h.error)===!0?s({acquired:!1,etag:null,holder:null}):C(h.error):s({acquired:!0,etag:h.data.etag,holder:null})}async function It(e,t,n,r){let i=kt(e,t);if(i.success===!1)return C(i.error);let a=Dt(e);return a.success===!1?C(a.error):(r.debug(`Releasing lock`,{key:i.data,repo:t}),a.data(i.data,{ifMatch:n}))}const Lt=6e4,Rt={todowrite:[`Todo`,`\x1B[33m\x1B[1m`],todoread:[`Todo`,`\x1B[33m\x1B[1m`],bash:[`Bash`,`\x1B[31m\x1B[1m`],edit:[`Edit`,`\x1B[32m\x1B[1m`],glob:[`Glob`,`\x1B[34m\x1B[1m`],grep:[`Grep`,`\x1B[34m\x1B[1m`],list:[`List`,`\x1B[34m\x1B[1m`],read:[`Read`,`\x1B[35m\x1B[1m`],write:[`Write`,`\x1B[32m\x1B[1m`],websearch:[`Search`,`\x1B[2m\x1B[1m`]},zt=`\x1B[0m`;function Bt(){return V.env.NO_COLOR==null}function Vt(e,t){let[n,r]=Rt[e.toLowerCase()]??[e,`\x1B[36m\x1B[1m`],i=n.padEnd(10,` `);Bt()?V.stdout.write(`\n${r}|${zt} ${i} ${zt}${t}\n`):V.stdout.write(`\n| ${i} ${t}\n`)}function Ht(e){V.stdout.write(`\n${e}\n`)}function Ut(e){switch(e){case`hit`:return`βœ… hit`;case`miss`:return`πŸ†• miss`;case`corrupted`:return`⚠️ corrupted (clean start)`}}function Wt(e){let t=Math.round(e/1e3);return t<60?`${t}s`:`${Math.floor(t/60)}m ${t%60}s`}async function Gt(e,n){let{eventType:r,repo:i,ref:a,runId:o,runUrl:s,metrics:c,agent:l,resolvedOutputMode:u}=e;try{if(S.addHeading(`Fro Bot Agent Run`,2).addTable([[{data:`Field`,header:!0},{data:`Value`,header:!0}],[`Event`,r],[`Repository`,i],[`Ref`,a],[`Run ID`,`[${o}](${s})`],[`Agent`,l],[`Output Mode`,u??`N/A`],[`Cache Status`,Ut(c.cacheStatus)],[`Duration`,c.duration==null?`N/A`:Wt(c.duration)]]),(c.sessionsUsed.length>0||c.sessionsCreated.length>0)&&(S.addHeading(`Sessions`,3),c.sessionsUsed.length>0&&S.addRaw(`**Used:** ${c.sessionsUsed.join(`, `)}\n`),c.sessionsCreated.length>0&&S.addRaw(`**Created:** ${c.sessionsCreated.join(`, `)}\n`)),c.tokenUsage!=null&&(S.addHeading(`Token Usage`,3),S.addTable([[{data:`Metric`,header:!0},{data:`Count`,header:!0}],[`Input`,c.tokenUsage.input.toLocaleString()],[`Output`,c.tokenUsage.output.toLocaleString()],[`Reasoning`,c.tokenUsage.reasoning.toLocaleString()],[`Cache Read`,c.tokenUsage.cache.read.toLocaleString()],[`Cache Write`,c.tokenUsage.cache.write.toLocaleString()]]),c.model!=null&&S.addRaw(`**Model:** ${c.model}\n`),c.cost!=null&&S.addRaw(`**Cost:** $${c.cost.toFixed(4)}\n`)),(c.prsCreated.length>0||c.commitsCreated.length>0||c.commentsPosted>0)&&(S.addHeading(`Created Artifacts`,3),c.prsCreated.length>0&&S.addList([...c.prsCreated]),c.commitsCreated.length>0&&S.addList(c.commitsCreated.map(e=>`Commit \`${e.slice(0,7)}\``)),c.commentsPosted>0&&S.addRaw(`**Comments Posted:** ${c.commentsPosted}\n`)),c.errors.length>0){S.addHeading(`Errors`,3);for(let e of c.errors){let t=e.recoverable?`πŸ”„ Recovered`:`❌ Failed`;S.addRaw(`- **${e.type}** (${t}): ${e.message}\n`)}}await S.write(),n.debug(`Wrote job summary`)}catch(e){let r=t(e);n.warning(`Failed to write job summary`,{error:r}),se(`Failed to write job summary: ${r}`)}}function Kt(){let e=0,t=null,n=`miss`,r=null,i=[],a=[],o=[],s=[],c=0,l=null,u=null,d=null,f=[];return{start(){e=Date.now()},end(){t=Date.now()},setCacheStatus(e){n=e},setCacheSource(e){r=e},addSessionUsed(e){i.includes(e)||i.push(e)},addSessionCreated(e){a.includes(e)||a.push(e)},addPRCreated(e){o.includes(e)||o.push(e)},addCommitCreated(e){s.includes(e)||s.push(e)},incrementComments(){c++},setTokenUsage(e,t,n){l=e,u=t,d=n},recordError(e,t,n){f.push({timestamp:new Date().toISOString(),type:e,message:t,recoverable:n})},getMetrics(){let p=t==null?Date.now()-e:t-e;return Object.freeze({startTime:e,endTime:t,duration:p,cacheStatus:n,cacheSource:r,sessionsUsed:Object.freeze([...i]),sessionsCreated:Object.freeze([...a]),prsCreated:Object.freeze([...o]),commitsCreated:Object.freeze([...s]),commentsPosted:c,tokenUsage:l,model:u,cost:d,errors:Object.freeze([...f])})}}}function qt(e){z(`session-id`,e.sessionId??``),z(`resolved-output-mode`,e.resolvedOutputMode??``),z(`cache-status`,e.cacheStatus),z(`duration`,e.duration)}function X(e){let[t,n]=e.split(`/`);if(t==null||n==null||t.length===0||n.length===0)throw Error(`Invalid repository string: ${e}`);return{owner:t,repo:n}}async function Jt(e,n,r,i,a){try{let{owner:t,repo:o}=X(n),{data:s}=await e.rest.reactions.createForIssueComment({owner:t,repo:o,comment_id:r,content:i});return a.debug(`Created comment reaction`,{commentId:r,content:i,reactionId:s.id}),{id:s.id}}catch(e){return a.warning(`Failed to create comment reaction`,{commentId:r,content:i,error:t(e)}),null}}async function Yt(e,n,r,i){try{let{owner:t,repo:i}=X(n),{data:a}=await e.rest.reactions.listForIssueComment({owner:t,repo:i,comment_id:r,per_page:100});return a.map(e=>({id:e.id,content:e.content,userLogin:e.user?.login??null}))}catch(e){return i.warning(`Failed to list comment reactions`,{commentId:r,error:t(e)}),[]}}async function Xt(e,n,r,i,a){try{let{owner:t,repo:o}=X(n);return await e.rest.reactions.deleteForIssueComment({owner:t,repo:o,comment_id:r,reaction_id:i}),a.debug(`Deleted comment reaction`,{commentId:r,reactionId:i}),!0}catch(e){return a.warning(`Failed to delete comment reaction`,{commentId:r,reactionId:i,error:t(e)}),!1}}async function Zt(e,n,r,i,a,o){let{owner:s,repo:c}=X(n);try{return await e.rest.issues.createLabel({owner:s,repo:c,name:r,color:i,description:a}),o.debug(`Created label`,{name:r,color:i}),!0}catch(e){return e instanceof Error&&`status`in e&&e.status===422?(o.debug(`Label already exists`,{name:r}),!0):(o.warning(`Failed to create label`,{name:r,error:t(e)}),!1)}}async function Qt(e,n,r,i,a){try{let{owner:t,repo:o}=X(n);return await e.rest.issues.addLabels({owner:t,repo:o,issue_number:r,labels:[...i]}),a.debug(`Added labels to issue`,{issueNumber:r,labels:i}),!0}catch(e){return a.warning(`Failed to add labels to issue`,{issueNumber:r,labels:i,error:t(e)}),!1}}async function $t(e,n,r,i,a){try{let{owner:t,repo:o}=X(n);return await e.rest.issues.removeLabel({owner:t,repo:o,issue_number:r,name:i}),a.debug(`Removed label from issue`,{issueNumber:r,label:i}),!0}catch(e){return e instanceof Error&&`status`in e&&e.status===404?(a.debug(`Label was not present on issue`,{issueNumber:r,label:i}),!0):(a.warning(`Failed to remove label from issue`,{issueNumber:r,label:i,error:t(e)}),!1)}}async function en(e,n,r){try{let{owner:t,repo:r}=X(n),{data:i}=await e.rest.repos.get({owner:t,repo:r});return i.default_branch}catch(e){return r.warning(`Failed to get default branch`,{repo:n,error:t(e)}),`main`}}const tn={admin:`OWNER`,maintain:`MEMBER`,write:`COLLABORATOR`,triage:`COLLABORATOR`};async function nn(e,n,r,i,a){try{let{data:t}=await e.rest.repos.getCollaboratorPermissionLevel({owner:n,repo:r,username:i}),o=tn[t.permission]??null;return a.debug(`Resolved sender permission`,{username:i,permission:t.permission,association:o}),o}catch(e){return a.warning(`Failed to resolve sender permission`,{username:i,error:t(e)}),null}}async function rn(e,n,r){try{let{data:t}=await e.rest.users.getByUsername({username:n});return{id:t.id,login:t.login}}catch(e){return r.debug(`Failed to get user by username`,{username:n,error:t(e)}),null}}const an={maxComments:50,maxCommits:100,maxFiles:100,maxReviews:100,maxBodyBytes:10*1024,maxTotalBytes:100*1024},on=`…[truncated]`;function sn(e,t){if(e.length===0)return{text:``,truncated:!1};let n=new TextEncoder,r=n.encode(e);if(r.length<=t)return{text:e,truncated:!1};let i=t-n.encode(on).length;if(i<=0)return{text:on,truncated:!0};let a=r.slice(0,i),o=new TextDecoder(`utf-8`,{fatal:!1}).decode(a);for(;o.length>0&&o.charCodeAt(o.length-1)===65533;)a=a.slice(0,-1),o=new TextDecoder(`utf-8`,{fatal:!1}).decode(a);return{text:o+on,truncated:!0}}async function cn(e,n,r,i,a,o){try{let[t,o]=await Promise.all([e.rest.issues.get({owner:n,repo:r,issue_number:i}),e.rest.issues.listComments({owner:n,repo:r,issue_number:i,per_page:a.maxComments})]),s=t.data,c=sn(s.body??``,a.maxBodyBytes),l=o.data.slice(0,a.maxComments).map(e=>({id:e.node_id??String(e.id),author:e.user?.login??null,body:e.body??``,createdAt:e.created_at,authorAssociation:e.author_association,isMinimized:!1})),u=(s.labels??[]).filter(e=>typeof e==`object`&&!!e&&`name`in e).map(e=>({name:e.name??``,color:e.color})),d=(s.assignees??[]).map(e=>({login:e?.login??``}));return{type:`issue`,number:s.number,title:s.title,body:c.text,bodyTruncated:c.truncated,state:s.state,author:s.user?.login??null,createdAt:s.created_at,labels:u,assignees:d,comments:l,commentsTruncated:o.data.length>=a.maxComments,totalComments:o.data.length}}catch(e){return o.warning(`REST issue fallback failed`,{owner:n,repo:r,number:i,error:t(e)}),null}}async function ln(e,n,r,i,a,o){try{let[s,c,l,u,d]=await Promise.all([e.rest.pulls.get({owner:n,repo:r,pull_number:i}),e.rest.pulls.listCommits({owner:n,repo:r,pull_number:i,per_page:a.maxCommits}),e.rest.pulls.listFiles({owner:n,repo:r,pull_number:i,per_page:a.maxFiles}),e.rest.pulls.listReviews({owner:n,repo:r,pull_number:i,per_page:a.maxReviews}),e.rest.issues.listComments({owner:n,repo:r,issue_number:i,per_page:a.maxComments})]),f=await e.rest.pulls.listRequestedReviewers({owner:n,repo:r,pull_number:i}).catch(e=>(o.warning(`Failed to fetch requested reviewers, defaulting to empty`,{owner:n,repo:r,number:i,error:t(e)}),{data:{users:[],teams:[]}})),p=s.data,m=sn(p.body??``,a.maxBodyBytes),h=p.base.repo?.owner.login,g=p.head.repo?.owner.login,_=g==null||h!==g,v=d.data.slice(0,a.maxComments).map(e=>({id:e.node_id??String(e.id),author:e.user?.login??null,body:e.body??``,createdAt:e.created_at,authorAssociation:e.author_association,isMinimized:!1})),y=c.data.slice(0,a.maxCommits).map(e=>({oid:e.sha,message:e.commit.message,author:e.commit.author?.name??null})),b=l.data.slice(0,a.maxFiles).map(e=>({path:e.filename,additions:e.additions,deletions:e.deletions,status:e.status})),x=u.data.slice(0,a.maxReviews).map(e=>({author:e.user?.login??null,state:e.state,body:e.body??``,createdAt:e.submitted_at??``,comments:[]})),S=(p.labels??[]).map(e=>({name:e.name??``,color:e.color})),C=(p.assignees??[]).map(e=>({login:e?.login??``})),w=(f.data.users??[]).map(e=>e.login),T=(f.data.teams??[]).map(e=>e.name);return{type:`pull_request`,number:p.number,title:p.title,body:m.text,bodyTruncated:m.truncated,state:p.state,author:p.user?.login??null,createdAt:p.created_at,baseBranch:p.base.ref,headBranch:p.head.ref,isFork:_,labels:S,assignees:C,comments:v,commentsTruncated:d.data.length>=a.maxComments,totalComments:d.data.length,commits:y,commitsTruncated:c.data.length>=a.maxCommits,totalCommits:c.data.length,files:b,filesTruncated:l.data.length>=a.maxFiles,totalFiles:l.data.length,reviews:x,reviewsTruncated:u.data.length>=a.maxReviews,totalReviews:u.data.length,authorAssociation:p.author_association,requestedReviewers:w,requestedReviewerTeams:T}}catch(e){return o.warning(`REST pull request fallback failed`,{owner:n,repo:r,number:i,error:t(e)}),null}}async function un(e,n,r,i,a,o){try{return await e.graphql(` query GetIssue($owner: String!, $repo: String!, $number: Int!, $maxComments: Int!) { repository(owner: $owner, name: $repo) { diff --git a/dist/post.js b/dist/post.js index a1aed0bc..3d50fd80 100644 --- a/dist/post.js +++ b/dist/post.js @@ -1 +1 @@ -import{$ as e,B as t,F as n,I as r,L as i,M as a,N as o,a as s,ct as c,d as l,f as u,h as d,j as f,m as p,n as m,p as h,t as g}from"./artifact-DMg4FdS7.js";function _(e){let t=c(e);return t.length>0?t:void 0}function v(){let e=_(l.S3_ENABLED),t=_(l.S3_BUCKET),n=_(l.S3_PREFIX);if(e==null||t==null||n==null)return;let r=_(l.S3_REGION)??``,i=_(l.S3_ENDPOINT),a=_(l.S3_EXPECTED_BUCKET_OWNER),o=_(l.S3_ALLOW_INSECURE_ENDPOINT),s=_(l.S3_SSE_ENCRYPTION),c=_(l.S3_SSE_KMS_KEY_ID);return{enabled:e===`true`,bucket:t,region:r,prefix:n,endpoint:i,expectedBucketOwner:a,allowInsecureEndpoint:o===`true`,sseEncryption:s===`aws:kms`||s===`AES256`?s:void 0,sseKmsKeyId:c}}async function y(_={}){let y=_.logger??u({phase:`post`}),b=c(l.SHOULD_SAVE_CACHE),x=c(l.CACHE_SAVED),S=c(l.SESSION_ID)||null,C=c(l.OPENCODE_VERSION)||null,w=v();if(y.debug(`Post-action state`,{shouldSaveCache:b,cacheSaved:x,sessionId:S,opencodeVersion:C,hasStoreConfig:w!=null}),b!==`true`){y.info(`Skipping post-action: event was not processed`,{shouldSaveCache:b});return}if(x===`true`)y.info(`Skipping post-action: cache already saved by main action`,{cacheSaved:x});else{let t=String(o());try{await m({components:s(),runId:o(),logger:y,storagePath:i(),authPath:n(),opencodeVersion:C,...w==null?{}:{storeConfig:w}})?y.info(`Post-action cache saved`,{sessionId:S}):y.info(`Post-action: no cache content to save`,{sessionId:S})}catch(t){y.warning(`Post-action cache save failed (non-fatal)`,{error:e(t)})}if(w?.enabled===!0)try{let e=u({phase:`post-object-store`}),n=h(w,e),i=f(),o=a();await d(n,w,`github`,i,t,{runId:t,timestamp:new Date().toISOString(),cleanupSkipped:!0,runAttempt:o},e),await p(n,w,`github`,i,t,r(),e)}catch(t){y.warning(`Post-action object store sync failed (non-fatal)`,{error:e(t)})}}if(t()&&c(l.ARTIFACT_UPLOADED)!==`true`)try{let e=u({phase:`post-artifact-upload`});await g({logPath:r(),runId:o(),runAttempt:a(),logger:e})}catch(t){y.warning(`Post-action artifact upload failed (non-fatal)`,{error:e(t)})}}await y();export{}; \ No newline at end of file +import{$ as e,B as t,F as n,I as r,L as i,M as a,N as o,a as s,ct as c,d as l,f as u,h as d,j as f,m as p,n as m,p as h,t as g}from"./artifact-0fav7sLm.js";function _(e){let t=c(e);return t.length>0?t:void 0}function v(){let e=_(l.S3_ENABLED),t=_(l.S3_BUCKET),n=_(l.S3_PREFIX);if(e==null||t==null||n==null)return;let r=_(l.S3_REGION)??``,i=_(l.S3_ENDPOINT),a=_(l.S3_EXPECTED_BUCKET_OWNER),o=_(l.S3_ALLOW_INSECURE_ENDPOINT),s=_(l.S3_SSE_ENCRYPTION),c=_(l.S3_SSE_KMS_KEY_ID);return{enabled:e===`true`,bucket:t,region:r,prefix:n,endpoint:i,expectedBucketOwner:a,allowInsecureEndpoint:o===`true`,sseEncryption:s===`aws:kms`||s===`AES256`?s:void 0,sseKmsKeyId:c}}async function y(_={}){let y=_.logger??u({phase:`post`}),b=c(l.SHOULD_SAVE_CACHE),x=c(l.CACHE_SAVED),S=c(l.SESSION_ID)||null,C=c(l.OPENCODE_VERSION)||null,w=v();if(y.debug(`Post-action state`,{shouldSaveCache:b,cacheSaved:x,sessionId:S,opencodeVersion:C,hasStoreConfig:w!=null}),b!==`true`){y.info(`Skipping post-action: event was not processed`,{shouldSaveCache:b});return}if(x===`true`)y.info(`Skipping post-action: cache already saved by main action`,{cacheSaved:x});else{let t=String(o());try{await m({components:s(),runId:o(),logger:y,storagePath:i(),authPath:n(),opencodeVersion:C,...w==null?{}:{storeConfig:w}})?y.info(`Post-action cache saved`,{sessionId:S}):y.info(`Post-action: no cache content to save`,{sessionId:S})}catch(t){y.warning(`Post-action cache save failed (non-fatal)`,{error:e(t)})}if(w?.enabled===!0)try{let e=u({phase:`post-object-store`}),n=h(w,e),i=f(),o=a();await d(n,w,`github`,i,t,{runId:t,timestamp:new Date().toISOString(),cleanupSkipped:!0,runAttempt:o},e),await p(n,w,`github`,i,t,r(),e)}catch(t){y.warning(`Post-action object store sync failed (non-fatal)`,{error:e(t)})}}if(t()&&c(l.ARTIFACT_UPLOADED)!==`true`)try{let e=u({phase:`post-artifact-upload`});await g({logPath:r(),runId:o(),runAttempt:a(),logger:e})}catch(t){y.warning(`Post-action artifact upload failed (non-fatal)`,{error:e(t)})}}await y();export{}; \ No newline at end of file diff --git a/packages/runtime/src/shared/constants.ts b/packages/runtime/src/shared/constants.ts index 4a110546..a69a78be 100644 --- a/packages/runtime/src/shared/constants.ts +++ b/packages/runtime/src/shared/constants.ts @@ -24,7 +24,7 @@ export const DEFAULT_OPENCODE_VERSION = '1.14.30' export const DEFAULT_BUN_VERSION = '1.3.13' export const DEFAULT_OMO_VERSION = '3.17.6' export const DEFAULT_OMO_PROVIDERS = '' -export const DEFAULT_SYSTEMATIC_VERSION = '2.7.0' +export const DEFAULT_SYSTEMATIC_VERSION = '2.7.1' // Retry configuration lives in agent/retry.ts (RETRY_DELAYS_MS, MAX_LLM_RETRIES) // to colocate with the retry logic that consumes the values.