blade-code 0.10.65 → 0.10.66

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.
Files changed (107) hide show
  1. package/dist/blade.js +2 -2
  2. package/dist/{chunk-czb954vz.js → chunk-0j22w4wh.js} +1 -1
  3. package/dist/{chunk-tb4jmrkp.js → chunk-0qtrv97b.js} +1 -1
  4. package/dist/chunk-0scxrkcf.js +1 -0
  5. package/dist/{chunk-eg5mh9m9.js → chunk-0wxkymqv.js} +1 -1
  6. package/dist/{chunk-s16x4qkb.js → chunk-1c69c4rd.js} +1 -1
  7. package/dist/{chunk-ca5mm1gk.js → chunk-1z9wct9w.js} +1 -1
  8. package/dist/chunk-2eq5dyga.js +1 -0
  9. package/dist/{chunk-h127mgg2.js → chunk-2kkpn41a.js} +2 -2
  10. package/dist/{chunk-j6w1vf2q.js → chunk-2xk6m4fc.js} +12 -3
  11. package/dist/{chunk-ka2kn5bs.js → chunk-30kmydfj.js} +2 -2
  12. package/dist/{chunk-yrtmkb4a.js → chunk-4sztphe9.js} +1 -1
  13. package/dist/{chunk-5qaacj3x.js → chunk-50jthhfq.js} +1 -1
  14. package/dist/{chunk-ky32s7az.js → chunk-5147jh26.js} +1 -1
  15. package/dist/{chunk-aphcj8rz.js → chunk-5d2cdvdy.js} +1 -1
  16. package/dist/chunk-69j98a7j.js +166 -0
  17. package/dist/{chunk-ngmajm4h.js → chunk-6pyktfa4.js} +1 -1
  18. package/dist/chunk-89090tyx.js +1 -0
  19. package/dist/chunk-8c677xtx.js +1 -0
  20. package/dist/{chunk-zxwdtn6q.js → chunk-8nmwft1y.js} +9 -9
  21. package/dist/{chunk-1vt7e9e7.js → chunk-98n2rxmq.js} +2 -2
  22. package/dist/{chunk-57gp2px5.js → chunk-a2594p5r.js} +1 -1
  23. package/dist/{chunk-wzkr0p09.js → chunk-a3xnd8cg.js} +2 -2
  24. package/dist/{chunk-svczh6hn.js → chunk-abef6dq1.js} +2 -2
  25. package/dist/chunk-ax9ftraa.js +1 -0
  26. package/dist/{chunk-sbpb7pcc.js → chunk-b66veqye.js} +2 -2
  27. package/dist/{chunk-a1m7wr7r.js → chunk-bbcb9jzb.js} +1 -1
  28. package/dist/{chunk-5gjqdbxb.js → chunk-bjqjdw34.js} +2 -2
  29. package/dist/chunk-c8zcyvss.js +1 -0
  30. package/dist/{chunk-hbbpe5f0.js → chunk-cdy9efgm.js} +1 -1
  31. package/dist/chunk-dc64v4sa.js +1 -0
  32. package/dist/{chunk-s1xp6g8m.js → chunk-dktrankr.js} +1 -1
  33. package/dist/chunk-e7pssnr9.js +1 -0
  34. package/dist/chunk-eq99gcj8.js +1 -0
  35. package/dist/{chunk-y51v2jvh.js → chunk-f99n8812.js} +2 -2
  36. package/dist/{chunk-015t2dey.js → chunk-gezg1mpa.js} +1 -1
  37. package/dist/{chunk-1jm8njkw.js → chunk-h0ft81a3.js} +1 -1
  38. package/dist/{chunk-5ntrhs8k.js → chunk-ha50z8dp.js} +1 -1
  39. package/dist/{chunk-k4t45b64.js → chunk-hat9v5c5.js} +1 -1
  40. package/dist/{chunk-arzhhj0e.js → chunk-hcv17986.js} +1 -1
  41. package/dist/{chunk-zpwasxzh.js → chunk-j38jh128.js} +2 -2
  42. package/dist/chunk-jmjn6zcc.js +1 -0
  43. package/dist/{chunk-d39xaa7w.js → chunk-k0pa8874.js} +1 -1
  44. package/dist/{chunk-pfmmvpfh.js → chunk-k99r5c4v.js} +3 -3
  45. package/dist/chunk-kmarzy98.js +1 -0
  46. package/dist/{chunk-m6a1c1tg.js → chunk-kv0bkxhd.js} +1 -1
  47. package/dist/{chunk-2yxdneb9.js → chunk-m57w4p91.js} +1 -1
  48. package/dist/{chunk-4t89y8nj.js → chunk-nt55nz8d.js} +40 -40
  49. package/dist/chunk-p0b4mv7e.js +10 -0
  50. package/dist/{chunk-6tacv9rs.js → chunk-ppsvzgs5.js} +2 -2
  51. package/dist/{chunk-e11kmyt3.js → chunk-pzb5sqwd.js} +1 -1
  52. package/dist/{chunk-9yvw5xy3.js → chunk-q3mfescm.js} +2 -2
  53. package/dist/{chunk-98qmtexa.js → chunk-qdah5kkc.js} +243 -243
  54. package/dist/{chunk-rd7jwwse.js → chunk-rf01e14b.js} +1 -1
  55. package/dist/chunk-rhs1dv6w.js +1 -0
  56. package/dist/{chunk-53tb8vvv.js → chunk-s7jsadnc.js} +2 -2
  57. package/dist/{chunk-793067rd.js → chunk-t2gq918a.js} +2 -2
  58. package/dist/chunk-t89q7d03.js +22 -0
  59. package/dist/{chunk-gafk33py.js → chunk-t8xmh4w2.js} +1 -1
  60. package/dist/{chunk-9ebwtazz.js → chunk-te21eb71.js} +1 -1
  61. package/dist/{chunk-edd8n5r0.js → chunk-th4jjfgm.js} +1 -1
  62. package/dist/{chunk-7mdbwjxj.js → chunk-v0rsz1rt.js} +1 -1
  63. package/dist/{chunk-z228cmc5.js → chunk-w6p2hcfw.js} +1 -1
  64. package/dist/{chunk-ejsggxs4.js → chunk-xny9q252.js} +2 -2
  65. package/dist/chunk-xz6y0w4n.js +2 -0
  66. package/dist/{chunk-rabt8yyf.js → chunk-ybv6stfh.js} +2 -2
  67. package/dist/{chunk-5ha0vf37.js → chunk-yn51162x.js} +1 -1
  68. package/dist/{chunk-eharmsjt.js → chunk-ypqp368c.js} +2 -2
  69. package/dist/{chunk-r94jtbd2.js → chunk-yvg961q3.js} +1 -1
  70. package/dist/chunk-yy6h97k0.js +1 -0
  71. package/dist/{chunk-a49dy92d.js → chunk-zdxxqchm.js} +2 -2
  72. package/dist/chunk-zk42hrdh.js +1 -0
  73. package/dist/{chunk-bnp9asmd.js → chunk-zvz2cnt4.js} +1 -1
  74. package/dist/web/assets/{ChatView-Jfq-sqKG.js → ChatView-BVrhnE2j.js} +6 -6
  75. package/dist/web/assets/{CodeBlockHighlighter-C9DvlG-V.js → CodeBlockHighlighter-Dy7QpAmC.js} +1 -1
  76. package/dist/web/assets/{FilePreview-YPtQcXr3.js → FilePreview-BI3nkxz1.js} +2 -2
  77. package/dist/web/assets/KanbanBoard-D5dYOyPH.js +1 -0
  78. package/dist/web/assets/{MarkdownRenderer-CpUKw2Gk.js → MarkdownRenderer-Da1vB81L.js} +12 -12
  79. package/dist/web/assets/{SettingsModal-BfDHa4xn.js → SettingsModal-jcCFqLqS.js} +2 -2
  80. package/dist/web/assets/TaskSwitcher-CQ--jOLB.js +1 -0
  81. package/dist/web/assets/{TerminalPanel-CDq3_gCr.js → TerminalPanel-CWzjEXOb.js} +1 -1
  82. package/dist/web/assets/index-BOgOL4hG.js +11 -0
  83. package/dist/web/assets/index-DbWgTuT3.css +1 -0
  84. package/dist/web/assets/{vendor-icons-ICv1v-tf.js → vendor-icons-B63aW_OM.js} +82 -62
  85. package/dist/web/index.html +3 -3
  86. package/package.json +2 -2
  87. package/dist/chunk-0h74p1h8.js +0 -1
  88. package/dist/chunk-18nkg8hr.js +0 -1
  89. package/dist/chunk-197qz36b.js +0 -1
  90. package/dist/chunk-2vdq0fav.js +0 -1
  91. package/dist/chunk-4a75gwa1.js +0 -1
  92. package/dist/chunk-76ks3ygm.js +0 -10
  93. package/dist/chunk-8wvk5rgg.js +0 -1
  94. package/dist/chunk-98vestg4.js +0 -22
  95. package/dist/chunk-b7p7ywe6.js +0 -1
  96. package/dist/chunk-cxc2q3yy.js +0 -1
  97. package/dist/chunk-fv3aggr5.js +0 -1
  98. package/dist/chunk-fz60jh3y.js +0 -2
  99. package/dist/chunk-m19xed90.js +0 -1
  100. package/dist/chunk-mr5c4yzr.js +0 -1
  101. package/dist/chunk-pr8a6xfm.js +0 -1
  102. package/dist/chunk-pwehsv52.js +0 -159
  103. package/dist/chunk-w4eskwzj.js +0 -1
  104. package/dist/chunk-y8zk4r3y.js +0 -1
  105. package/dist/web/assets/TaskSwitcher-DacXxQcV.js +0 -1
  106. package/dist/web/assets/index-Dxdnbd79.css +0 -1
  107. package/dist/web/assets/index-t4mGaG1Z.js +0 -11
@@ -0,0 +1 @@
1
+ import{bd as a,cd as b,dd as c,ed as d,fd as e,gd as f,hd as g,id as h}from"./chunk-zdxxqchm.js";import"./chunk-98n2rxmq.js";import"./chunk-ppsvzgs5.js";import"./chunk-hcv17986.js";export{d as syncSession,e as syncAll,h as searchProjectionText,c as resetProjectionDbCache,f as removeSessionFromProjection,g as rebuildProjectionIndex,b as getProjectionDb,a as getIndexDbPath};
@@ -1,4 +1,4 @@
1
- import{j as X4,k as V4}from"./chunk-s1xp6g8m.js";import{l as tO}from"./chunk-r94jtbd2.js";import{s as QO,t as g1}from"./chunk-57gp2px5.js";import{u as a0}from"./chunk-s16x4qkb.js";import{A as a$,v as S1,w as l$,x as c$,y as i$,z as $O}from"./chunk-tb4jmrkp.js";import{$ as e1,C as w4,F as R1,G as VO,H as A$,I as iO,J as W$,K as E0,L as F$,M as f0,N as TO,Q as IO,R as SO,T as q1,U as k1,V as I1,W as o1,X as n1,Y as t1,Z as s1,_ as r1,aa as O4,ba as $4,ca as x4,fa as G4,ia as y4,na as M4}from"./chunk-98qmtexa.js";import{qa as Q1,wa as U0}from"./chunk-e11kmyt3.js";import{Ba as j4,Ca as j$,Da as P1,Ea as f1,Fa as T4,Ga as C4,Ha as T$,Ia as b4,Ja as t0,Ka as K4,La as W4,Ma as F4,Na as y1,Oa as m1,Pa as h1,Qa as u$,Ra as q$,ya as x$}from"./chunk-ky32s7az.js";import{$a as R,Ya as m0,Za as g,ab as E1,ob as K$,xb as o0}from"./chunk-pwehsv52.js";import{Gb as M1}from"./chunk-edd8n5r0.js";import{$b as aO,Ac as YO,Dc as X$,Ic as b1,Jc as V$,Kc as N$,Lc as E,Zb as A1,nc as qO,oc as D$,pc as kO,rc as j1,xc as T1,yc as C1}from"./chunk-zxwdtn6q.js";import{Jd as J0,Nd as G1,Ud as L0}from"./chunk-wzkr0p09.js";import{Vd as G$}from"./chunk-czb954vz.js";import{he as L1}from"./chunk-5ha0vf37.js";import{je as cO}from"./chunk-sbpb7pcc.js";import{Ae as AO,Ee as d4,He as T0,Ie as jO,Le as l4,se as D4,ve as a1,ze as MO}from"./chunk-j6w1vf2q.js";import{Te as X1,Ue as w1}from"./chunk-hbbpe5f0.js";import{Ye as O1,Ze as JO}from"./chunk-pfmmvpfh.js";import{$f as $1,Jf as D1,Mf as H1,Of as B1,eg as wO,pf as J1}from"./chunk-svczh6hn.js";import{hg as z$}from"./chunk-1jm8njkw.js";import{ig as P,kg as U,ng as F0}from"./chunk-7mdbwjxj.js";import{pg as oO}from"./chunk-fz60jh3y.js";import{ug as c}from"./chunk-d39xaa7w.js";import{Vg as a}from"./chunk-1vt7e9e7.js";import{$g as c0}from"./chunk-eharmsjt.js";import{bh as Y1,ch as U1,eh as z1,fh as _1}from"./chunk-gafk33py.js";import{hh as xO}from"./chunk-zpwasxzh.js";import{nh as E$}from"./chunk-793067rd.js";import{sh as pO,wh as n$}from"./chunk-6tacv9rs.js";import{zh as C$}from"./chunk-arzhhj0e.js";var a5={port:{type:"number",describe:"Port to listen on (0 for auto)",default:0},hostname:{type:"string",describe:"Hostname to listen on",default:"127.0.0.1"},cors:{type:"array",describe:"Additional domains to allow for CORS",default:[]}};function o5(O){return{port:O.port??0,hostname:O.hostname??"127.0.0.1",cors:O.cors??[]}}import{existsSync as k$,readFileSync as yO}from"node:fs";import{createServer as j5}from"node:http";import{networkInterfaces as T5}from"node:os";import{dirname as C5,extname as b5,join as u0}from"node:path";import{fileURLToPath as R5}from"node:url";import{brotliCompressSync as E5,gzipSync as q5,constants as k5}from"node:zlib";import{Hono as I5}from"hono";import{cors as S5}from"hono/cors";import{WebSocketServer as P5}from"ws";var OO=a("Service"),a4=30000,o4=new Set(["completed","failed","cancelled","interrupted"]);class J${dispatch;store;tickMs;timer;unsubscribeBus;ticking=!1;inFlight=new Set;constructor(O){this.dispatch=O.dispatch,this.store=O.store??u$.getInstance(),this.tickMs=O.tickMs??a4}start(){if(this.timer)return;OO.info("[TaskScheduler] Starting scheduler tick loop"),this.timer=setInterval(()=>{this.tick()},this.tickMs),this.timer.unref?.(),this.unsubscribeBus=R.subscribe((O)=>{if(O.type!=="task.status")return;let $=O.properties.taskStatus;if(typeof $!=="string"||!o4.has($))return;this.recordTerminalStatus(O.sessionId,$,typeof O.properties.taskStatusReason==="string"?O.properties.taskStatusReason:void 0)}),this.tick()}stop(){if(this.timer)clearInterval(this.timer),this.timer=void 0,this.unsubscribeBus?.(),this.unsubscribeBus=void 0,OO.info("[TaskScheduler] Stopped scheduler tick loop")}async tick(O=new Date){if(this.ticking)return;this.ticking=!0;try{let $=await this.store.list();for(let x of $)await this.evaluate(x,O)}catch($){OO.warn("[TaskScheduler] Tick failed:",$)}finally{this.ticking=!1}}async evaluate(O,$){if(!O.enabled)return;if(this.inFlight.has(O.id))return;if(O.expiresAt&&new Date(O.expiresAt).getTime()<=$.getTime()){await this.store.update(O.id,{enabled:!1,nextRunAt:null}),OO.info(`[TaskScheduler] Schedule ${O.id} expired; disabled`);return}if(!O.nextRunAt)return;if(!(new Date(O.nextRunAt).getTime()<=$.getTime()))return;await this.fire(O,$)}async fire(O,$=new Date,x={}){if(this.inFlight.has(O.id))throw Error(`Schedule ${O.id} is already dispatching`);this.inFlight.add(O.id);let J=$.toISOString();try{let Q=await this.dispatch({prompt:O.prompt,title:O.title??n4(O),sourceProjectPath:O.projectPath,isolation:O.dispatch.isolation??"worktree",permissionMode:O.dispatch.permissionMode??"default",modelId:O.dispatch.modelId,reasoningEffort:O.dispatch.reasoningEffort,serviceTier:O.dispatch.serviceTier,responseVerbosity:O.dispatch.responseVerbosity,communicationStyle:O.dispatch.communicationStyle}),z=O.trigger.kind==="once"?null:x.manual?O.nextRunAt?new Date(O.nextRunAt):null:x$(O.trigger,$,$);await this.store.update(O.id,{lastRunAt:J,lastRunSessionId:Q.session.sessionId,lastStatus:Q.status,lastError:void 0,runCount:O.runCount+1,nextRunAt:z?z.toISOString():null,enabled:O.trigger.kind==="once"?!1:O.enabled}),R.publish({sessionId:Q.session.sessionId,projectPath:O.projectPath},"schedule.fired",{scheduleId:O.id,firedAt:J,sessionId:Q.session.sessionId,runId:Q.runId,status:Q.status}),OO.info(`[TaskScheduler] Fired schedule ${O.id} -> session ${Q.session.sessionId} (${Q.status})`)}catch(Q){let z=Q instanceof Error?Q.message:String(Q);OO.warn(`[TaskScheduler] Schedule ${O.id} dispatch failed:`,Q);let Y=O.trigger.kind==="once"?null:x.manual?O.nextRunAt?new Date(O.nextRunAt):null:x$(O.trigger,$,$);await this.store.update(O.id,{lastRunAt:J,lastStatus:"error",lastError:z,nextRunAt:Y?Y.toISOString():null,enabled:O.trigger.kind==="once"?!1:O.enabled})}finally{this.inFlight.delete(O.id)}}async recordTerminalStatus(O,$,x){let Q=(await this.store.list()).find((z)=>z.lastRunSessionId===O);if(!Q)return;await this.store.update(Q.id,{lastStatus:$,...x?{lastError:x}:{lastError:void 0}})}}function n4(O){return`Scheduled: ${O.prompt.trim().replace(/\s+/g," ").slice(0,60)}`}class Z0 extends Error{code;statusCode;details;constructor(O,$,x=500,J){super($);this.code=O;this.statusCode=x;this.details=J;this.name="BladeServerError"}toObject(){return{error:{code:this.code,message:this.message,...this.details?{details:this.details}:{}}}}}class S extends Z0{constructor(O,$){super("NOT_FOUND",$?`${O} not found: ${$}`:`${O} not found`,404)}}class H extends Z0{constructor(O){super("BAD_REQUEST",O,400)}}class q extends Z0{constructor(O){super("CONFLICT",O,409)}}class k0 extends Z0{constructor(O,$){super("TOO_MANY_REQUESTS",O,429,$)}}class l0 extends Z0{constructor(O="Server is shutting down"){super("SERVICE_UNAVAILABLE",O,503)}}class B0 extends Z0{constructor(){super("AMBIGUOUS_SESSION","Multiple workspaces contain this session ID; projectPath is required",409)}}class r extends Z0{constructor(O="Internal server error"){super("INTERNAL_ERROR",O,500)}}var x3=U.Object({error:U.Object({code:U.String(),message:U.String(),details:U.Optional(U.Record(U.String(),U.Unknown()))})});import{Hono as t4}from"hono";var Q$=a("Service"),s4=U.Object({updates:U.Record(U.String(),U.Any()),options:U.Optional(U.Object({scope:U.Optional(F0(["local","project","global"])),immediate:U.Optional(U.Boolean())}))});function r4(O){return{currentModelId:O.currentModelId,permissionMode:O.permissionMode,language:O.language,codeTheme:O.codeTheme,uiTheme:O.uiTheme,autoSaveSessions:O.autoSaveSessions,notifyBuild:O.notifyBuild,notifyErrors:O.notifyErrors,notifySounds:O.notifySounds,privacyTelemetry:O.privacyTelemetry,privacyCrash:O.privacyCrash,communicationStyle:O.communicationStyle,maxConcurrentTasks:O.maxConcurrentTasks,maxQueuedTasks:O.maxQueuedTasks,maxQueuedTaskBytes:O.maxQueuedTaskBytes,maxResidentSessionRuntimes:O.maxResidentSessionRuntimes,sessionRuntimeIdleMs:O.sessionRuntimeIdleMs}}var p$=()=>{let O=new t4;return O.get("/",async($)=>{try{let x=J0();return $.json(x?r4(x):{})}catch(x){return Q$.error("[ConfigRoutes] Failed to get config:",x),$.json({})}}),O.put("/",async($)=>{try{let x=await $.req.json(),J=P(s4,x);if(!J.success)throw new H("Invalid config update format");let{updates:Q,options:z}=J.data;return await L0().updateConfig(Q,z),$.json({success:!0,updates:Q})}catch(x){throw Q$.error("[ConfigRoutes] Failed to update config:",x),x}}),O.get("/permissions",async($)=>{try{let x=J0();return $.json(x?.permissions||{})}catch(x){return Q$.error("[ConfigRoutes] Failed to get permissions:",x),$.json({})}}),O};import{Hono as e4}from"hono";import{streamSSE as O2}from"hono/streaming";function d$(O){let $="";if(O.id!==void 0)$+=`id: ${O.id}
1
+ import{j as X4,k as V4}from"./chunk-dktrankr.js";import{l as tO}from"./chunk-yvg961q3.js";import{s as QO,t as g1}from"./chunk-a2594p5r.js";import{u as a0}from"./chunk-1c69c4rd.js";import{A as a$,v as S1,w as l$,x as c$,y as i$,z as $O}from"./chunk-0qtrv97b.js";import{$ as e1,C as w4,F as R1,G as VO,H as A$,I as iO,J as W$,K as E0,L as F$,M as f0,N as TO,Q as IO,R as SO,T as q1,U as k1,V as I1,W as o1,X as n1,Y as t1,Z as s1,_ as r1,aa as O4,ba as $4,ca as x4,fa as G4,ia as y4,na as M4}from"./chunk-qdah5kkc.js";import{qa as Q1,wa as U0}from"./chunk-pzb5sqwd.js";import{Ba as j4,Ca as j$,Da as P1,Ea as f1,Fa as T4,Ga as C4,Ha as T$,Ia as b4,Ja as t0,Ka as K4,La as W4,Ma as F4,Na as y1,Oa as m1,Pa as h1,Qa as u$,Ra as q$,ya as x$}from"./chunk-5147jh26.js";import{ab as m0,bb as g,db as R,eb as E1,pb as K$,yb as o0}from"./chunk-69j98a7j.js";import{Hb as M1}from"./chunk-th4jjfgm.js";import{Ac as C1,Cc as YO,Fc as X$,Kc as b1,Lc as V$,Mc as N$,Nc as E,_b as A1,jc as aO,pc as qO,qc as D$,rc as kO,tc as j1,zc as T1}from"./chunk-8nmwft1y.js";import{Ld as J0,Pd as G1,Wd as L0}from"./chunk-a3xnd8cg.js";import{Xd as G$}from"./chunk-0j22w4wh.js";import{je as L1}from"./chunk-yn51162x.js";import{le as cO}from"./chunk-b66veqye.js";import{Be as MO,Ce as AO,Ge as d4,Je as T0,Ke as jO,Ne as l4,ue as D4,xe as a1}from"./chunk-2xk6m4fc.js";import{Ve as X1,We as w1}from"./chunk-cdy9efgm.js";import{$e as JO,_e as O1}from"./chunk-k99r5c4v.js";import{Lf as D1,Of as H1,Qf as B1,bg as $1,gg as wO,rf as J1}from"./chunk-abef6dq1.js";import{jg as z$}from"./chunk-h0ft81a3.js";import{kg as P,mg as U,pg as F0}from"./chunk-v0rsz1rt.js";import{rg as oO}from"./chunk-xz6y0w4n.js";import{wg as c}from"./chunk-k0pa8874.js";import{Xg as a}from"./chunk-98n2rxmq.js";import{bh as c0}from"./chunk-ypqp368c.js";import{dh as Y1,eh as U1,gh as z1,hh as _1}from"./chunk-t8xmh4w2.js";import{jh as xO}from"./chunk-j38jh128.js";import{ph as E$}from"./chunk-t2gq918a.js";import{uh as pO,yh as n$}from"./chunk-ppsvzgs5.js";import{Bh as C$}from"./chunk-hcv17986.js";var a5={port:{type:"number",describe:"Port to listen on (0 for auto)",default:0},hostname:{type:"string",describe:"Hostname to listen on",default:"127.0.0.1"},cors:{type:"array",describe:"Additional domains to allow for CORS",default:[]}};function o5(O){return{port:O.port??0,hostname:O.hostname??"127.0.0.1",cors:O.cors??[]}}import{existsSync as k$,readFileSync as yO}from"node:fs";import{createServer as j5}from"node:http";import{networkInterfaces as T5}from"node:os";import{dirname as C5,extname as b5,join as u0}from"node:path";import{fileURLToPath as R5}from"node:url";import{brotliCompressSync as E5,gzipSync as q5,constants as k5}from"node:zlib";import{Hono as I5}from"hono";import{cors as S5}from"hono/cors";import{WebSocketServer as P5}from"ws";var OO=a("Service"),a4=30000,o4=new Set(["completed","failed","cancelled","interrupted"]);class J${dispatch;store;tickMs;timer;unsubscribeBus;ticking=!1;inFlight=new Set;constructor(O){this.dispatch=O.dispatch,this.store=O.store??u$.getInstance(),this.tickMs=O.tickMs??a4}start(){if(this.timer)return;OO.info("[TaskScheduler] Starting scheduler tick loop"),this.timer=setInterval(()=>{this.tick()},this.tickMs),this.timer.unref?.(),this.unsubscribeBus=R.subscribe((O)=>{if(O.type!=="task.status")return;let $=O.properties.taskStatus;if(typeof $!=="string"||!o4.has($))return;this.recordTerminalStatus(O.sessionId,$,typeof O.properties.taskStatusReason==="string"?O.properties.taskStatusReason:void 0)}),this.tick()}stop(){if(this.timer)clearInterval(this.timer),this.timer=void 0,this.unsubscribeBus?.(),this.unsubscribeBus=void 0,OO.info("[TaskScheduler] Stopped scheduler tick loop")}async tick(O=new Date){if(this.ticking)return;this.ticking=!0;try{let $=await this.store.list();for(let x of $)await this.evaluate(x,O)}catch($){OO.warn("[TaskScheduler] Tick failed:",$)}finally{this.ticking=!1}}async evaluate(O,$){if(!O.enabled)return;if(this.inFlight.has(O.id))return;if(O.expiresAt&&new Date(O.expiresAt).getTime()<=$.getTime()){await this.store.update(O.id,{enabled:!1,nextRunAt:null}),OO.info(`[TaskScheduler] Schedule ${O.id} expired; disabled`);return}if(!O.nextRunAt)return;if(!(new Date(O.nextRunAt).getTime()<=$.getTime()))return;await this.fire(O,$)}async fire(O,$=new Date,x={}){if(this.inFlight.has(O.id))throw Error(`Schedule ${O.id} is already dispatching`);this.inFlight.add(O.id);let J=$.toISOString();try{let Q=await this.dispatch({prompt:O.prompt,title:O.title??n4(O),sourceProjectPath:O.projectPath,isolation:O.dispatch.isolation??"worktree",permissionMode:O.dispatch.permissionMode??"default",modelId:O.dispatch.modelId,reasoningEffort:O.dispatch.reasoningEffort,serviceTier:O.dispatch.serviceTier,responseVerbosity:O.dispatch.responseVerbosity,communicationStyle:O.dispatch.communicationStyle}),z=O.trigger.kind==="once"?null:x.manual?O.nextRunAt?new Date(O.nextRunAt):null:x$(O.trigger,$,$);await this.store.update(O.id,{lastRunAt:J,lastRunSessionId:Q.session.sessionId,lastStatus:Q.status,lastError:void 0,runCount:O.runCount+1,nextRunAt:z?z.toISOString():null,enabled:O.trigger.kind==="once"?!1:O.enabled}),R.publish({sessionId:Q.session.sessionId,projectPath:O.projectPath},"schedule.fired",{scheduleId:O.id,firedAt:J,sessionId:Q.session.sessionId,runId:Q.runId,status:Q.status}),OO.info(`[TaskScheduler] Fired schedule ${O.id} -> session ${Q.session.sessionId} (${Q.status})`)}catch(Q){let z=Q instanceof Error?Q.message:String(Q);OO.warn(`[TaskScheduler] Schedule ${O.id} dispatch failed:`,Q);let Y=O.trigger.kind==="once"?null:x.manual?O.nextRunAt?new Date(O.nextRunAt):null:x$(O.trigger,$,$);await this.store.update(O.id,{lastRunAt:J,lastStatus:"error",lastError:z,nextRunAt:Y?Y.toISOString():null,enabled:O.trigger.kind==="once"?!1:O.enabled})}finally{this.inFlight.delete(O.id)}}async recordTerminalStatus(O,$,x){let Q=(await this.store.list()).find((z)=>z.lastRunSessionId===O);if(!Q)return;await this.store.update(Q.id,{lastStatus:$,...x?{lastError:x}:{lastError:void 0}})}}function n4(O){return`Scheduled: ${O.prompt.trim().replace(/\s+/g," ").slice(0,60)}`}class Z0 extends Error{code;statusCode;details;constructor(O,$,x=500,J){super($);this.code=O;this.statusCode=x;this.details=J;this.name="BladeServerError"}toObject(){return{error:{code:this.code,message:this.message,...this.details?{details:this.details}:{}}}}}class S extends Z0{constructor(O,$){super("NOT_FOUND",$?`${O} not found: ${$}`:`${O} not found`,404)}}class H extends Z0{constructor(O){super("BAD_REQUEST",O,400)}}class q extends Z0{constructor(O){super("CONFLICT",O,409)}}class k0 extends Z0{constructor(O,$){super("TOO_MANY_REQUESTS",O,429,$)}}class l0 extends Z0{constructor(O="Server is shutting down"){super("SERVICE_UNAVAILABLE",O,503)}}class B0 extends Z0{constructor(){super("AMBIGUOUS_SESSION","Multiple workspaces contain this session ID; projectPath is required",409)}}class r extends Z0{constructor(O="Internal server error"){super("INTERNAL_ERROR",O,500)}}var x3=U.Object({error:U.Object({code:U.String(),message:U.String(),details:U.Optional(U.Record(U.String(),U.Unknown()))})});import{Hono as t4}from"hono";var Q$=a("Service"),s4=U.Object({updates:U.Record(U.String(),U.Any()),options:U.Optional(U.Object({scope:U.Optional(F0(["local","project","global"])),immediate:U.Optional(U.Boolean())}))});function r4(O){return{currentModelId:O.currentModelId,permissionMode:O.permissionMode,language:O.language,codeTheme:O.codeTheme,uiTheme:O.uiTheme,autoSaveSessions:O.autoSaveSessions,notifyBuild:O.notifyBuild,notifyErrors:O.notifyErrors,notifySounds:O.notifySounds,privacyTelemetry:O.privacyTelemetry,privacyCrash:O.privacyCrash,communicationStyle:O.communicationStyle,maxConcurrentTasks:O.maxConcurrentTasks,maxQueuedTasks:O.maxQueuedTasks,maxQueuedTaskBytes:O.maxQueuedTaskBytes,maxResidentSessionRuntimes:O.maxResidentSessionRuntimes,sessionRuntimeIdleMs:O.sessionRuntimeIdleMs}}var p$=()=>{let O=new t4;return O.get("/",async($)=>{try{let x=J0();return $.json(x?r4(x):{})}catch(x){return Q$.error("[ConfigRoutes] Failed to get config:",x),$.json({})}}),O.put("/",async($)=>{try{let x=await $.req.json(),J=P(s4,x);if(!J.success)throw new H("Invalid config update format");let{updates:Q,options:z}=J.data;return await L0().updateConfig(Q,z),$.json({success:!0,updates:Q})}catch(x){throw Q$.error("[ConfigRoutes] Failed to update config:",x),x}}),O.get("/permissions",async($)=>{try{let x=J0();return $.json(x?.permissions||{})}catch(x){return Q$.error("[ConfigRoutes] Failed to get permissions:",x),$.json({})}}),O};import{Hono as e4}from"hono";import{streamSSE as O2}from"hono/streaming";function d$(O){let $="";if(O.id!==void 0)$+=`id: ${O.id}
2
2
  `;if(O.event!==void 0)$+=`event: ${O.event}
3
3
  `;for(let x of O.data.split(/\r\n|\r|\n/))$+=`data: ${x}
4
4
  `;if(O.retry!==void 0)$+=`retry: ${O.retry}
@@ -1,2 +1,2 @@
1
1
  import{spawn as I}from"node:child_process";var X=500;function x(j){return new Promise((q)=>setTimeout(q,j))}function Z(j){return j&&typeof j==="object"&&"code"in j?String(j.code):void 0}function L(j){return j()||j()}function G(j,q=process.platform,y=process.kill.bind(process)){if(q==="win32"||!Number.isInteger(j)||j<=1||j===process.pid)return!1;try{return y(-j,0),!0}catch(z){let B=Z(z);if(B==="ESRCH")return!1;if(B==="EPERM")return!0;throw z}}function N(j,q){return new Promise((y)=>{let z=["/PID",String(j),"/T"];if(q)z.push("/F");let B=I("taskkill",z,{stdio:"ignore",windowsHide:!0}),K=!1,J=(H)=>{if(K)return;K=!0,y(H)};B.once("error",()=>J(!1)),B.once("close",(H)=>J(H===0))})}async function F(j,q={}){if(!Number.isInteger(j)||j<=1||j===process.pid)return{success:!1,alreadyExited:!1,forced:!1};let y=q.platform??process.platform,z=q.gracePeriodMs??X,B=q.killProcess??process.kill.bind(process),K=q.taskkill??N,J=q.wait??x,H=q.validatePidOwnership??(()=>!0);if(!L(H))return{success:!1,alreadyExited:!1,forced:!1};if(y==="win32"){let V=await K(j,!1);if(await J(z),!H())return{success:V,alreadyExited:!1,forced:!1};let Y=await K(j,!0);return{success:V||Y,alreadyExited:!V&&!Y,forced:Y}}let Q=(V,Y)=>{try{return B(V,Y)}catch(D){return Z(D)==="ESRCH"}},W=Q(-j,"SIGTERM")||Q(j,"SIGTERM");if(await J(z),!H())return{success:W,alreadyExited:!1,forced:!1};let $=Q(-j,"SIGKILL")||Q(j,"SIGKILL");return{success:W||$,alreadyExited:!1,forced:$}}async function R(j,q={}){if(!Number.isInteger(j)||j<=1||j===process.pid)return{success:!1,alreadyExited:!1,forced:!1};if((q.platform??process.platform)==="win32")return{success:!1,alreadyExited:!1,forced:!1};let z=q.gracePeriodMs??X,B=q.killProcess??process.kill.bind(process),K=q.wait??x,J=q.validatePidOwnership??(()=>!0);if(!J())return{success:!1,alreadyExited:!1,forced:!1};let H=($)=>{try{return B(-j,$),"sent"}catch(V){return Z(V)==="ESRCH"?"missing":"failed"}},Q=H("SIGTERM");if(Q==="missing")return{success:!0,alreadyExited:!0,forced:!1};if(Q==="failed")return{success:!1,alreadyExited:!1,forced:!1};if(await K(z),!J())return{success:!1,alreadyExited:!1,forced:!1};let W=H("SIGKILL");return{success:W!=="failed",alreadyExited:W==="missing",forced:W==="sent"}}class b{child;state="owned";terminationPromise;terminationResult;platform;gracePeriodMs;killProcess;taskkill;wait;constructor(j,q={}){this.child=j;if(this.platform=q.platform??process.platform,this.gracePeriodMs=q.gracePeriodMs??X,this.killProcess=q.killProcess??process.kill.bind(process),this.taskkill=q.taskkill??N,this.wait=q.wait??x,q.releaseOnExit!==!1){let y=()=>{if(this.state==="owned")this.state="released"};j.once("close",y),j.once("error",y)}}release(){if(this.state==="owned")this.state="released"}terminate(){if(this.terminationPromise)return this.terminationPromise;if(this.terminationResult)return Promise.resolve(this.terminationResult);if(this.state==="released")return this.terminationResult={success:!0,alreadyExited:!0,forced:!1},Promise.resolve(this.terminationResult);return this.state="terminating",this.terminationPromise=this.terminateOwnedTree().then((j)=>{return this.state="released",this.terminationResult=j,j}),this.terminationPromise}async terminateOwnedTree(){let j=this.child.pid;if(!j)return{success:!1,alreadyExited:!0,forced:!1};if(this.platform==="win32"){let z=await this.taskkill(j,!1);await this.wait(this.gracePeriodMs);let B=await this.taskkill(j,!0);if(!z&&!B)return{success:this.signalDirectChild("SIGKILL"),alreadyExited:!1,forced:!0};return{success:!0,alreadyExited:!1,forced:!0}}let q=this.signalPosixTree(j,"SIGTERM");await this.wait(this.gracePeriodMs);let y=this.signalPosixTree(j,"SIGKILL");return{success:q||y,alreadyExited:!1,forced:y}}signalPosixTree(j,q){if(j<=1||j===process.pid)return this.signalDirectChild(q);try{return this.killProcess(-j,q)}catch(y){if(Z(y)==="ESRCH")return!0;return this.signalDirectChild(q)}}signalDirectChild(j){try{return this.child.kill(j)}catch(q){return Z(q)==="ESRCH"}}}function v(j,q,y={},z={}){let B=I(j,q,{...y,detached:process.platform==="win32"?y.detached:!0,windowsHide:y.windowsHide??!0});return{child:B,processTree:new b(B,z)}}
2
- export{G as _e,F as $e,R as af,v as bf};
2
+ export{G as af,F as bf,R as cf,v as df};