gemi 0.191.0 → 0.192.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/dist/ai/Agent.d.ts +16 -1
  2. package/dist/ai/Agent.d.ts.map +1 -1
  3. package/dist/ai/AgentController.d.ts +143 -3
  4. package/dist/ai/AgentController.d.ts.map +1 -1
  5. package/dist/ai/client/index.d.ts +1 -1
  6. package/dist/ai/client/index.d.ts.map +1 -1
  7. package/dist/ai/client/index.js +59 -1
  8. package/dist/ai/client/index.js.map +1 -1
  9. package/dist/ai/index.d.ts +3 -3
  10. package/dist/ai/index.d.ts.map +1 -1
  11. package/dist/ai/index.js +91 -68
  12. package/dist/ai/index.js.map +5 -5
  13. package/dist/ai/jobs/AgentJob.d.ts +32 -0
  14. package/dist/ai/jobs/AgentJob.d.ts.map +1 -1
  15. package/dist/ai/jobs/index.d.ts +1 -1
  16. package/dist/ai/jobs/index.d.ts.map +1 -1
  17. package/dist/ai/store/DatabaseAgentStore.d.ts +66 -3
  18. package/dist/ai/store/DatabaseAgentStore.d.ts.map +1 -1
  19. package/dist/ai/store/MemoryAgentStore.d.ts +12 -0
  20. package/dist/ai/store/MemoryAgentStore.d.ts.map +1 -1
  21. package/dist/ai/types.d.ts +18 -0
  22. package/dist/ai/types.d.ts.map +1 -1
  23. package/dist/ai/useChat.d.ts +15 -0
  24. package/dist/ai/useChat.d.ts.map +1 -1
  25. package/dist/app/index.js +1 -1
  26. package/dist/bun/plugin.js +1 -1
  27. package/dist/bun/preload.js +1 -1
  28. package/dist/{chunk-6z3wv71t.js → chunk-0m1a636t.js} +2 -2
  29. package/dist/{chunk-6z3wv71t.js.map → chunk-0m1a636t.js.map} +1 -1
  30. package/dist/{chunk-00g20rfa.js → chunk-0mb77yd2.js} +2 -2
  31. package/dist/{chunk-00g20rfa.js.map → chunk-0mb77yd2.js.map} +1 -1
  32. package/dist/{chunk-qz6grt61.js → chunk-0p76bhy2.js} +2 -2
  33. package/dist/{chunk-qz6grt61.js.map → chunk-0p76bhy2.js.map} +1 -1
  34. package/dist/{chunk-zwj4w4zt.js → chunk-17mdszc3.js} +2 -2
  35. package/dist/{chunk-zwj4w4zt.js.map → chunk-17mdszc3.js.map} +1 -1
  36. package/dist/{chunk-yt5n62nj.js → chunk-199nvtrj.js} +2 -2
  37. package/dist/{chunk-yt5n62nj.js.map → chunk-199nvtrj.js.map} +1 -1
  38. package/dist/{chunk-w2z4jc4v.js → chunk-1mpwzjxa.js} +3 -3
  39. package/dist/{chunk-w2z4jc4v.js.map → chunk-1mpwzjxa.js.map} +1 -1
  40. package/dist/{chunk-dsgjdk94.js → chunk-24jgzc8y.js} +2 -2
  41. package/dist/{chunk-dsgjdk94.js.map → chunk-24jgzc8y.js.map} +1 -1
  42. package/dist/{chunk-fgk1e5xe.js → chunk-4s7st9y4.js} +3 -3
  43. package/dist/{chunk-fgk1e5xe.js.map → chunk-4s7st9y4.js.map} +1 -1
  44. package/dist/{chunk-epb0qfce.js → chunk-5zx4e2wa.js} +3 -3
  45. package/dist/{chunk-epb0qfce.js.map → chunk-5zx4e2wa.js.map} +1 -1
  46. package/dist/{chunk-s5z8qcdv.js → chunk-67ex6nem.js} +3 -3
  47. package/dist/{chunk-s5z8qcdv.js.map → chunk-67ex6nem.js.map} +1 -1
  48. package/dist/{chunk-790dx3s7.js → chunk-67zz58cw.js} +2 -2
  49. package/dist/{chunk-790dx3s7.js.map → chunk-67zz58cw.js.map} +1 -1
  50. package/dist/{chunk-kcg2znz2.js → chunk-6frbegay.js} +2 -2
  51. package/dist/{chunk-kcg2znz2.js.map → chunk-6frbegay.js.map} +1 -1
  52. package/dist/{chunk-0gvw46j0.js → chunk-6n44t4hn.js} +2 -2
  53. package/dist/{chunk-0gvw46j0.js.map → chunk-6n44t4hn.js.map} +1 -1
  54. package/dist/{chunk-baknm4tn.js → chunk-6rmz0mkm.js} +2 -2
  55. package/dist/{chunk-baknm4tn.js.map → chunk-6rmz0mkm.js.map} +1 -1
  56. package/dist/{chunk-k9f7gww2.js → chunk-6wsmdf51.js} +2 -2
  57. package/dist/{chunk-k9f7gww2.js.map → chunk-6wsmdf51.js.map} +1 -1
  58. package/dist/{chunk-xc2m8qa1.js → chunk-7k43y71n.js} +2 -2
  59. package/dist/{chunk-xc2m8qa1.js.map → chunk-7k43y71n.js.map} +1 -1
  60. package/dist/{chunk-er7xemh2.js → chunk-7ynahcy6.js} +2 -2
  61. package/dist/{chunk-er7xemh2.js.map → chunk-7ynahcy6.js.map} +1 -1
  62. package/dist/{chunk-7des5zys.js → chunk-7zpjdwfq.js} +3 -3
  63. package/dist/{chunk-7des5zys.js.map → chunk-7zpjdwfq.js.map} +1 -1
  64. package/dist/{chunk-yn2av14e.js → chunk-8em2ebj1.js} +2 -2
  65. package/dist/{chunk-yn2av14e.js.map → chunk-8em2ebj1.js.map} +1 -1
  66. package/dist/{chunk-nc37phkt.js → chunk-8pfy75y6.js} +3 -3
  67. package/dist/{chunk-nc37phkt.js.map → chunk-8pfy75y6.js.map} +1 -1
  68. package/dist/{chunk-8f8bp75w.js → chunk-8zeky0fj.js} +5 -5
  69. package/dist/{chunk-8f8bp75w.js.map → chunk-8zeky0fj.js.map} +3 -3
  70. package/dist/{chunk-khzss89b.js → chunk-9dfrsj4m.js} +2 -2
  71. package/dist/{chunk-khzss89b.js.map → chunk-9dfrsj4m.js.map} +1 -1
  72. package/dist/{chunk-fcj0e64h.js → chunk-9hmm8acy.js} +1 -1
  73. package/dist/{chunk-rp2h86ph.js → chunk-9m04tdzh.js} +1 -1
  74. package/dist/{chunk-ca76mcea.js → chunk-bd14zwmj.js} +25 -21
  75. package/dist/{chunk-ca76mcea.js.map → chunk-bd14zwmj.js.map} +4 -4
  76. package/dist/{chunk-g52hvs5q.js → chunk-bhfwp3gz.js} +2 -2
  77. package/dist/{chunk-g52hvs5q.js.map → chunk-bhfwp3gz.js.map} +1 -1
  78. package/dist/{chunk-2adfcfdw.js → chunk-bm7z4vj9.js} +2 -2
  79. package/dist/{chunk-2adfcfdw.js.map → chunk-bm7z4vj9.js.map} +1 -1
  80. package/dist/{chunk-e9nmsgnd.js → chunk-c36sbvnz.js} +2 -2
  81. package/dist/{chunk-e9nmsgnd.js.map → chunk-c36sbvnz.js.map} +1 -1
  82. package/dist/{chunk-x1ng1dnx.js → chunk-ccx7rt7y.js} +2 -2
  83. package/dist/{chunk-x1ng1dnx.js.map → chunk-ccx7rt7y.js.map} +1 -1
  84. package/dist/{chunk-xqzrd7st.js → chunk-ce73s4kh.js} +2 -2
  85. package/dist/{chunk-xqzrd7st.js.map → chunk-ce73s4kh.js.map} +1 -1
  86. package/dist/{chunk-3z55zyfe.js → chunk-cx3n8qyr.js} +2 -2
  87. package/dist/{chunk-3z55zyfe.js.map → chunk-cx3n8qyr.js.map} +1 -1
  88. package/dist/{chunk-xwa8vtg5.js → chunk-d0khszc9.js} +2 -2
  89. package/dist/{chunk-xwa8vtg5.js.map → chunk-d0khszc9.js.map} +1 -1
  90. package/dist/{chunk-frvca65w.js → chunk-efgemgbe.js} +2 -2
  91. package/dist/{chunk-frvca65w.js.map → chunk-efgemgbe.js.map} +1 -1
  92. package/dist/{chunk-6tsyk2mr.js → chunk-ejc0mbe3.js} +2 -2
  93. package/dist/{chunk-6tsyk2mr.js.map → chunk-ejc0mbe3.js.map} +1 -1
  94. package/dist/{chunk-hv6nbbty.js → chunk-etzd00a8.js} +2 -2
  95. package/dist/{chunk-hv6nbbty.js.map → chunk-etzd00a8.js.map} +1 -1
  96. package/dist/{chunk-6a3t825g.js → chunk-f02anz24.js} +2 -2
  97. package/dist/{chunk-6a3t825g.js.map → chunk-f02anz24.js.map} +1 -1
  98. package/dist/{chunk-qy678j5z.js → chunk-fbxnxze2.js} +1 -1
  99. package/dist/{chunk-j16ekp16.js → chunk-freerpzc.js} +1 -1
  100. package/dist/{chunk-h8knqrc5.js → chunk-fryj3asn.js} +2 -2
  101. package/dist/{chunk-h8knqrc5.js.map → chunk-fryj3asn.js.map} +1 -1
  102. package/dist/{chunk-vzzt4kpk.js → chunk-h688s2ba.js} +2 -2
  103. package/dist/{chunk-vzzt4kpk.js.map → chunk-h688s2ba.js.map} +1 -1
  104. package/dist/{chunk-bc1k2206.js → chunk-hwq0kk1d.js} +1 -1
  105. package/dist/{chunk-mvs6brkk.js → chunk-j34ektzj.js} +2 -2
  106. package/dist/{chunk-mvs6brkk.js.map → chunk-j34ektzj.js.map} +1 -1
  107. package/dist/{chunk-ds684s0w.js → chunk-jbee3n3p.js} +2 -2
  108. package/dist/{chunk-ds684s0w.js.map → chunk-jbee3n3p.js.map} +1 -1
  109. package/dist/{chunk-80kpxp4m.js → chunk-k1c0xd8r.js} +2 -2
  110. package/dist/{chunk-80kpxp4m.js.map → chunk-k1c0xd8r.js.map} +1 -1
  111. package/dist/{chunk-tmz3gf96.js → chunk-k8gn0q91.js} +1 -1
  112. package/dist/{chunk-8p7a2ctj.js → chunk-m3180wkp.js} +2 -2
  113. package/dist/{chunk-8p7a2ctj.js.map → chunk-m3180wkp.js.map} +1 -1
  114. package/dist/{chunk-s1wj0ff8.js → chunk-m37vvh99.js} +2 -2
  115. package/dist/{chunk-s1wj0ff8.js.map → chunk-m37vvh99.js.map} +1 -1
  116. package/dist/{chunk-mmzf9c2e.js → chunk-m4r8btey.js} +2 -2
  117. package/dist/{chunk-mmzf9c2e.js.map → chunk-m4r8btey.js.map} +1 -1
  118. package/dist/{chunk-8mgz2na4.js → chunk-mdrsec0r.js} +2 -2
  119. package/dist/{chunk-8mgz2na4.js.map → chunk-mdrsec0r.js.map} +1 -1
  120. package/dist/{chunk-j2twdj8b.js → chunk-mx9zcq7w.js} +2 -2
  121. package/dist/{chunk-j2twdj8b.js.map → chunk-mx9zcq7w.js.map} +1 -1
  122. package/dist/{chunk-t6ng9yxp.js → chunk-p00rd4ja.js} +2 -2
  123. package/dist/{chunk-t6ng9yxp.js.map → chunk-p00rd4ja.js.map} +1 -1
  124. package/dist/{chunk-rf4a3tnm.js → chunk-qfb6r3cq.js} +3 -3
  125. package/dist/{chunk-rf4a3tnm.js.map → chunk-qfb6r3cq.js.map} +1 -1
  126. package/dist/{chunk-fq006ypv.js → chunk-qg60pgve.js} +2 -2
  127. package/dist/{chunk-fq006ypv.js.map → chunk-qg60pgve.js.map} +1 -1
  128. package/dist/{chunk-6rdr7ne2.js → chunk-qnc840pb.js} +2 -2
  129. package/dist/{chunk-6rdr7ne2.js.map → chunk-qnc840pb.js.map} +1 -1
  130. package/dist/{chunk-mqvyhqa6.js → chunk-r7vnxqck.js} +2 -2
  131. package/dist/{chunk-mqvyhqa6.js.map → chunk-r7vnxqck.js.map} +1 -1
  132. package/dist/{chunk-bwmyd47e.js → chunk-rf9c6e49.js} +2 -2
  133. package/dist/{chunk-bwmyd47e.js.map → chunk-rf9c6e49.js.map} +1 -1
  134. package/dist/{chunk-1987f978.js → chunk-ryfty6mj.js} +3 -3
  135. package/dist/{chunk-1987f978.js.map → chunk-ryfty6mj.js.map} +1 -1
  136. package/dist/{chunk-6bhscseq.js → chunk-sqev442x.js} +4 -4
  137. package/dist/{chunk-6bhscseq.js.map → chunk-sqev442x.js.map} +1 -1
  138. package/dist/{chunk-npd1501w.js → chunk-t86nc1jd.js} +2 -2
  139. package/dist/{chunk-npd1501w.js.map → chunk-t86nc1jd.js.map} +1 -1
  140. package/dist/{chunk-qp1nzdjc.js → chunk-thq8tc9x.js} +3 -3
  141. package/dist/{chunk-qp1nzdjc.js.map → chunk-thq8tc9x.js.map} +1 -1
  142. package/dist/{chunk-cbw4676x.js → chunk-tngf3h1g.js} +2 -2
  143. package/dist/{chunk-cbw4676x.js.map → chunk-tngf3h1g.js.map} +1 -1
  144. package/dist/{chunk-n415vvxw.js → chunk-tt5qk0xt.js} +2 -2
  145. package/dist/{chunk-n415vvxw.js.map → chunk-tt5qk0xt.js.map} +1 -1
  146. package/dist/{chunk-b35mk5rd.js → chunk-tvsjq0my.js} +2 -2
  147. package/dist/{chunk-b35mk5rd.js.map → chunk-tvsjq0my.js.map} +1 -1
  148. package/dist/{chunk-2k948anx.js → chunk-vr48swd0.js} +2 -2
  149. package/dist/{chunk-2k948anx.js.map → chunk-vr48swd0.js.map} +1 -1
  150. package/dist/{chunk-sz0avnch.js → chunk-wa1xmvgr.js} +2 -2
  151. package/dist/{chunk-sz0avnch.js.map → chunk-wa1xmvgr.js.map} +1 -1
  152. package/dist/chunk-waq4kj7n.js +5 -0
  153. package/dist/{chunk-qv3y19h5.js.map → chunk-waq4kj7n.js.map} +1 -1
  154. package/dist/{chunk-8b897pc1.js → chunk-xsx69765.js} +2 -2
  155. package/dist/{chunk-8b897pc1.js.map → chunk-xsx69765.js.map} +1 -1
  156. package/dist/{chunk-eqnrk0p8.js → chunk-xwz5fmwy.js} +2 -2
  157. package/dist/{chunk-eqnrk0p8.js.map → chunk-xwz5fmwy.js.map} +1 -1
  158. package/dist/{chunk-ct2kqpv5.js → chunk-xzz6ps4z.js} +2 -2
  159. package/dist/{chunk-ct2kqpv5.js.map → chunk-xzz6ps4z.js.map} +1 -1
  160. package/dist/{chunk-s91xa67z.js → chunk-y67rmd3y.js} +2 -2
  161. package/dist/{chunk-s91xa67z.js.map → chunk-y67rmd3y.js.map} +1 -1
  162. package/dist/{chunk-1e7pnsx2.js → chunk-z1aeh05w.js} +3 -3
  163. package/dist/{chunk-1e7pnsx2.js.map → chunk-z1aeh05w.js.map} +1 -1
  164. package/dist/{chunk-070cacy8.js → chunk-z7mbhc68.js} +2 -2
  165. package/dist/{chunk-070cacy8.js.map → chunk-z7mbhc68.js.map} +1 -1
  166. package/dist/{chunk-pjjwbs2f.js → chunk-z8dxdqzm.js} +2 -2
  167. package/dist/{chunk-pjjwbs2f.js.map → chunk-z8dxdqzm.js.map} +1 -1
  168. package/dist/{chunk-9q5g3a9t.js → chunk-z9pq557m.js} +2 -2
  169. package/dist/{chunk-9q5g3a9t.js.map → chunk-z9pq557m.js.map} +1 -1
  170. package/dist/{chunk-dhwxcedm.js → chunk-zcrhagx5.js} +2 -2
  171. package/dist/{chunk-dhwxcedm.js.map → chunk-zcrhagx5.js.map} +1 -1
  172. package/dist/config/index.js +1 -1
  173. package/dist/console/run.js +2 -2
  174. package/dist/console/run.js.map +1 -1
  175. package/dist/container/index.js +2 -2
  176. package/dist/container/index.js.map +1 -1
  177. package/dist/database/index.js +2 -2
  178. package/dist/database/index.js.map +1 -1
  179. package/dist/email/index.js +2 -2
  180. package/dist/email/index.js.map +1 -1
  181. package/dist/facades/index.js +1 -1
  182. package/dist/foundation/index.js +2 -2
  183. package/dist/foundation/index.js.map +1 -1
  184. package/dist/http/ApiRouter.d.ts +1 -0
  185. package/dist/http/ApiRouter.d.ts.map +1 -1
  186. package/dist/http/index.js +2 -2
  187. package/dist/http/index.js.map +1 -1
  188. package/dist/i18n/dictionaryRuntime.js +2 -2
  189. package/dist/i18n/dictionaryRuntime.js.map +1 -1
  190. package/dist/i18n/index.js +2 -2
  191. package/dist/i18n/index.js.map +1 -1
  192. package/dist/kernel/index.js +2 -2
  193. package/dist/kernel/index.js.map +1 -1
  194. package/dist/orm/index.js +2 -2
  195. package/dist/orm/index.js.map +1 -1
  196. package/dist/probe/index.js +2 -2
  197. package/dist/probe/index.js.map +1 -1
  198. package/dist/server/index.js +2 -2
  199. package/dist/server/index.js.map +1 -1
  200. package/dist/services/index.js +2 -2
  201. package/dist/services/index.js.map +1 -1
  202. package/dist/services/queue/work.js +2 -2
  203. package/dist/services/queue/work.js.map +1 -1
  204. package/dist/stats/route-table.js +1 -1
  205. package/dist/support/index.js +2 -2
  206. package/dist/support/index.js.map +1 -1
  207. package/dist/vitest/index.js +1 -1
  208. package/package.json +1 -1
  209. package/dist/chunk-qv3y19h5.js +0 -5
  210. /package/dist/{chunk-fcj0e64h.js.map → chunk-9hmm8acy.js.map} +0 -0
  211. /package/dist/{chunk-rp2h86ph.js.map → chunk-9m04tdzh.js.map} +0 -0
  212. /package/dist/{chunk-qy678j5z.js.map → chunk-fbxnxze2.js.map} +0 -0
  213. /package/dist/{chunk-j16ekp16.js.map → chunk-freerpzc.js.map} +0 -0
  214. /package/dist/{chunk-bc1k2206.js.map → chunk-hwq0kk1d.js.map} +0 -0
  215. /package/dist/{chunk-tmz3gf96.js.map → chunk-k8gn0q91.js.map} +0 -0
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{W as P,Y as c,Z as f,_ as l}from"./chunk-6rdr7ne2.js";import{na as u,oa as m}from"./chunk-bc1k2206.js";import"./chunk-bwg7genv.js";import"./chunk-mvd4mc8p.js";import"./chunk-7txst143.js";import"./chunk-s1wj0ff8.js";import"./chunk-s0z61m9j.js";import"./chunk-mmzf9c2e.js";import{cj as S}from"./chunk-8b897pc1.js";import{ul as T}from"./chunk-0gvw46j0.js";import{Kl as y}from"./chunk-s91xa67z.js";import"./chunk-80kpxp4m.js";import{join as YJ}from"path";import{createServer as AJ}from"vite";import{join as R,sep as o}from"path";import{existsSync as a,statSync as s}from"fs";import{IncomingMessage as t,ServerResponse as r}from"http";import{Socket as e}from"net";function i(J){return J.replace(/\x1b\[[0-9;]*m/g,"").replace(/\[[0-9;]*m/g,"").replace(/\n\s*\n/g,`
2
+ import{W as P,Y as c,Z as f,_ as l}from"./chunk-qnc840pb.js";import{na as u,oa as m}from"./chunk-hwq0kk1d.js";import"./chunk-bwg7genv.js";import"./chunk-mvd4mc8p.js";import"./chunk-7txst143.js";import"./chunk-m37vvh99.js";import"./chunk-s0z61m9j.js";import"./chunk-m4r8btey.js";import{dj as S}from"./chunk-xsx69765.js";import{vl as T}from"./chunk-6n44t4hn.js";import{Ll as y}from"./chunk-y67rmd3y.js";import"./chunk-k1c0xd8r.js";import{join as YJ}from"path";import{createServer as AJ}from"vite";import{join as R,sep as o}from"path";import{existsSync as a,statSync as s}from"fs";import{IncomingMessage as t,ServerResponse as r}from"http";import{Socket as e}from"net";function i(J){return J.replace(/\x1b\[[0-9;]*m/g,"").replace(/\[[0-9;]*m/g,"").replace(/\n\s*\n/g,`
3
3
  `).split(`
4
4
  `).map((W)=>W.trim()).filter((W)=>W.length>0).join(`
5
5
  `).trim()}function N(J){return`
@@ -55,4 +55,4 @@ window.$RefreshSig$ = () => (type) => type;
55
55
  window.__vite_plugin_react_preamble_installed__ = true;
56
56
  `;function zJ(J){let{pathname:W}=new URL(J.url),Z=($)=>new Response($,{headers:{"Content-Type":"application/javascript"}});if(W===k)return Z(ZJ);if(W.startsWith("/render-error.js"))return Z("window.render_error = true");if(W.startsWith("/refresh.js"))return Z($J);return null}function GJ(J,W){let Z=J.config?.publicDir;if(!Z||W==="/assets"||W.startsWith("/assets/"))return!1;let $;try{$=decodeURIComponent(W)}catch{return!1}if($.split("/").some((Q)=>Q.startsWith(".")))return!1;let z=R(Z,$);if(!z.startsWith(Z+o))return!1;try{return s(z).isFile()}catch{return!1}}function E(J,W,Z){let $=R(process.cwd(),"app");return async(z)=>{let{pathname:Q}=new URL(z.url),L=(G)=>{if(console.error(G),Z.ssrFixStacktrace?.(G),x(G),y(Q))return new Response(JSON.stringify({error:S("server_error",G?.message??String(G),500)}),{status:500,headers:{"Content-Type":"application/json"}});return globalThis.__gemiErrorPageServed=!0,new Response(N(I(G)),{status:500,headers:{"Content-Type":"text/html"}})},X=async(G)=>{let O=zJ(G);if(O)return O;try{let Y=J.fetch.bind(J),A=(GJ(Z,Q)&&!(await J.staticFiles(G)).publicFiles?null:await JJ(Z,G))??await Y(G);if(A instanceof Response)return A;let V={},_={},C={},d=(U,j)=>`"${U}": () => import("${j}")`,D=[],n=J.getRequiredViews.call(J);for(let U of["404",...J.getFlatComponentTree.call(J)]){if(Bun.env.NODE_ENV==="test")break;let j=`${process.env.APP_DIR}`,b=n[U];if(b&&!a(`${j}/views/${U}.tsx`))throw f(U,b);let B=await M(Z).import(`${j}/views/${U}.tsx`);V[U]=B.default,_[U]=B?.OpenGraph,C[U]=B,D.push(d(U,`/app/views/${U}.tsx`))}let p=`{${D.join(",")}}`;return await A({getStyles:async(U,j)=>await P($,Z,U,j?.layout),resolveIsland:(U)=>({src:`/${U}${T}`,preload:[]}),buildId:"dev",bootstrapModules:[k],viewImportMap:V,viewModules:C,ogMap:_,loaders:p,cssManifest:{}})}catch(Y){return L(Y)}};return await W(z,(G)=>J.withGlobalMiddleware(G,X,L))}}function QJ(J){try{return Bun.listen({hostname:"0.0.0.0",port:J,socket:{data(){}}}).stop(!0),!0}catch(W){return W?.code!=="EADDRINUSE"}}function g(J,W=QJ){let Z=24678+(J-5173);if(Z>65471)Z=24678;for(let $=Z;$<Z+64;$++)if(W($))return $;throw Error(`Could not find a free port for Vite's HMR websocket: tried ${Z}-${Z+64-1}. Set one explicitly in gemi.config.ts as \`vite: { server: { ws: { port } } }\`.`)}import{createServer as XJ}from"http";var KJ=new Set(["vite-hmr","vite-ping"]);async function q(J){let W=XJ((Z,$)=>{$.writeHead(426,{"Content-Type":"text/plain"}),$.end("Upgrade Required")});return await new Promise((Z,$)=>{W.once("error",$),W.listen(J,"127.0.0.1",()=>{W.off("error",$),Z()})}),W}function w(J){if(!J||typeof J!=="object")return null;let Z=J.server?.address?.();if(Z&&typeof Z==="object"&&"port"in Z)return Number(Z.port)||null;return null}function h(J){if(J.headers.get("upgrade")?.toLowerCase()!=="websocket")return!1;return KJ.has(J.headers.get("sec-websocket-protocol")??"")}var LJ=(J)=>typeof J==="string"?J:new Uint8Array(J);async function v(J,W,Z){let $=new URL(J.url),z=J.headers.get("sec-websocket-protocol")??"vite-hmr",Q={host:J.headers.get("host")??$.host},L=J.headers.get("origin");if(L)Q.origin=L;let X=new WebSocket(`ws://127.0.0.1:${Z}${$.pathname}${$.search}`,{protocols:[z],headers:Q});X.binaryType="arraybuffer";let G={upstream:X,early:[]};if(X.onmessage=(K)=>{let A=LJ(K.data);if(G.browser)G.browser.send(A);else G.early.push(A)},X.onclose=(K)=>{G.browser?.close(UJ(K.code),K.reason)},X.onerror=()=>{},!await new Promise((K)=>{X.addEventListener("open",()=>K(!0),{once:!0}),X.addEventListener("close",()=>K(!1),{once:!0})}))return new Response("Vite refused the HMR websocket",{status:403});if(!W.upgrade(J,{headers:{"Sec-WebSocket-Protocol":z},data:G}))return X.close(),new Response("WebSocket upgrade failed",{status:400});return}function UJ(J){if(J===1000||J>=1001&&J<=1003||J>=1007&&J<=1014)return J;if(J>=3000&&J<=4999)return J;return 1000}var F={open(J){let W=J.data;for(let Z of W.early)J.send(Z);if(W.early=[],W.browser=J,W.upstream.readyState!==WebSocket.OPEN)J.close(1000)},message(J,W){if(J.data.upstream.readyState===WebSocket.OPEN)J.data.upstream.send(W)},close(J){let{upstream:W}=J.data;if(W.readyState<=WebSocket.OPEN)W.close()}};function OJ(J,W){let Z=W.websocket,$=(z)=>z.data?.gemiSocket===!0;return{...W.socketOptions(),maxPayloadLength:16777216,closeOnBackpressureLimit:!1,open:(z)=>$(z)?Z.open?.(z):J.open?.(z),message:(z,Q)=>$(z)?Z.message(z,Q):J.message(z,Q),close:(z,Q,L)=>$(z)?Z.close?.(z,Q,L):J.close?.(z,Q,L)}}var H=process.cwd(),jJ=YJ(H,"app");if(!globalThis.__gemiErrorHooked)globalThis.__gemiErrorHooked=!0,process.on("unhandledRejection",(J)=>{console.error(J),x(J)}),process.on("uncaughtException",(J)=>{console.error(J),x(J)});async function vJ(J,W){let Z=Number(process.env.PORT)||5173,$=l(),z=Boolean(globalThis.__gemiVite),Q=J.devAllowedHosts.call(J);if(Q===!0&&!z)console.warn("gemi dev: `route.domains.devHosts` is `true`, so the dev server answers any Host. A web page you visit can then read the app's source through DNS rebinding. List the hosts you need instead.");let L=globalThis.__gemiVite??=await AJ({configFile:!1,plugins:[m()],server:{middlewareMode:!0,port:Z,ws:{server:await q(g(Z))},allowedHosts:Q,watch:{ignored:(K)=>{let A=K.split(/[/\\]/).pop()??"";return A===".env"||A.startsWith(".env.")}}},appType:"custom",resolve:{dedupe:["react","react-dom"]},optimizeDeps:{include:["react","react-dom","react-dom/client"]},ssr:{external:[...u]}});process.env.ROOT_DIR=H,process.env.APP_DIR=jJ;let X=E(J,W,L),G=w(L.config?.server?.ws),O=J.sockets(),Y=Bun.serve({port:Z,idleTimeout:$,fetch:(K,A)=>{if(G!==null&&h(K))return v(K,A,G);if(J.applyTrustedClientIp(K),O?.matches(K))return O.upgrade(K,A);return X(K)},websocket:O?OJ(F,O):F});if(await O?.start(Y),z)M(L).clearCache();if(z)if(globalThis.__gemiErrorActive&&globalThis.__gemiErrorPageServed)globalThis.__gemiErrorActive=!1,globalThis.__gemiErrorPageServed=!1,L.ws.send({type:"full-reload"});else globalThis.__gemiErrorActive=!1,L.ws.send({type:"custom",event:"http-reload"});else c({port:Y.port,rootDir:H});return Y}export{I as viteErrorPayload,vJ as httpDev};
57
57
 
58
- //# debugId=8094A50B562070BD64756E2164756E21
58
+ //# debugId=753FD0D130422AF164756E2164756E21
@@ -9,6 +9,6 @@
9
9
  "import { createServer, type Server as NodeServer } from \"node:http\";\n\nimport type { Server, ServerWebSocket, WebSocketHandler } from \"bun\";\n\n// Vite's HMR websocket, carried on the dev server's own port.\n//\n// In middleware mode Vite has no HTTP server of its own, so by default it\n// stands up a second one for the websocket, on a second port (see\n// `hmrPort.ts`), and tells the browser to connect to `<page host>:<that port>`.\n// A reverse proxy or tunnel (ngrok, a container port mapping, a phone on the\n// LAN through https) only carries the port the page came from, so HMR could\n// not connect there, and the client logged connection failures forever.\n//\n// Vite can attach its websocket to a server it is handed (`server.ws.server`)\n// instead, and then tells the browser to connect to the page's own origin. That\n// server has to be a Node `http.Server`; the dev server is `Bun.serve`. So:\n//\n// - the Node server Vite is handed listens on loopback only, on the port\n// `resolveHmrPort` picked, and answers nothing but websocket upgrades;\n// - `Bun.serve` accepts the browser's upgrade on the page's origin and relays\n// frames both ways to that loopback server.\n//\n// The relay forwards the browser's `Host` and `Origin` and the request's query\n// (the `token`), so Vite still runs its own host and token checks against what\n// the browser actually sent.\n\n/** The subprotocols Vite's client opens its sockets with. */\nconst VITE_PROTOCOLS = new Set([\"vite-hmr\", \"vite-ping\"]);\n\n/**\n * Start the loopback Node server Vite attaches its HMR websocket to.\n * Everything but an upgrade gets `426 Upgrade Required`, as Vite's own\n * websocket server answers.\n */\nexport async function listenHmrServer(port: number): Promise<NodeServer> {\n const server = createServer((_req, res) => {\n res.writeHead(426, { \"Content-Type\": \"text/plain\" });\n res.end(\"Upgrade Required\");\n });\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(port, \"127.0.0.1\", () => {\n server.off(\"error\", reject);\n resolve();\n });\n });\n return server;\n}\n\n/**\n * The loopback port to relay to, read from the config Vite actually resolved,\n * so an app that set its own `server.ws` in `gemi.config.ts` is relayed to\n * where Vite really is, or not relayed at all. `null` when Vite was not given\n * a server (its websocket is then on a port of its own, and the client goes\n * there directly) or when HMR is off.\n */\nexport function hmrRelayPort(wsConfig: unknown): number | null {\n if (!wsConfig || typeof wsConfig !== \"object\") return null;\n const server = (wsConfig as { server?: { address?: () => unknown } }).server;\n const address = server?.address?.();\n if (address && typeof address === \"object\" && \"port\" in address) {\n return Number((address as { port: number }).port) || null;\n }\n return null;\n}\n\n/** Whether a request is the Vite client opening its HMR (or ping) socket. */\nexport function isHmrUpgrade(req: Request): boolean {\n if (req.headers.get(\"upgrade\")?.toLowerCase() !== \"websocket\") return false;\n return VITE_PROTOCOLS.has(req.headers.get(\"sec-websocket-protocol\") ?? \"\");\n}\n\nexport type HmrRelayData = {\n /** The socket to Vite, already open when the browser's is accepted. */\n upstream: WebSocket;\n /** Frames Vite sent before the browser's socket opened (its `connected`). */\n early: (string | Uint8Array)[];\n browser?: ServerWebSocket<HmrRelayData>;\n};\n\ntype Frame = string | Uint8Array;\n\nconst frameOf = (data: unknown): Frame =>\n typeof data === \"string\" ? data : new Uint8Array(data as ArrayBuffer);\n\n/**\n * Open the socket to Vite first, and accept the browser's upgrade only once\n * Vite has accepted it. Returns `undefined` once Bun has taken the request\n * over, or a refusal.\n *\n * The order matters. Vite refuses a socket whose host is not in\n * `allowedHosts`, or a cross-origin one without its token. Had the browser's\n * socket been accepted first and closed when Vite refused, the client would\n * read that as \"server connection lost\", ping (which Vite always answers),\n * and reload the page, forever. Refused before it opens, the client logs one\n * \"failed to connect to websocket\" and the page keeps working.\n */\nexport async function upgradeHmr(\n req: Request,\n server: Server<HmrRelayData>,\n port: number,\n): Promise<Response | undefined> {\n const url = new URL(req.url);\n const protocol = req.headers.get(\"sec-websocket-protocol\") ?? \"vite-hmr\";\n // `Host` is what Vite's `allowedHosts` check reads; the URL's host is the\n // same value `Bun.serve` derived it from.\n const headers: Record<string, string> = {\n host: req.headers.get(\"host\") ?? url.host,\n };\n const origin = req.headers.get(\"origin\");\n if (origin) headers.origin = origin;\n\n const upstream = new WebSocket(\n `ws://127.0.0.1:${port}${url.pathname}${url.search}`,\n {\n protocols: [protocol],\n headers,\n } as any,\n );\n upstream.binaryType = \"arraybuffer\";\n const data: HmrRelayData = { upstream, early: [] };\n\n upstream.onmessage = (event) => {\n const frame = frameOf(event.data);\n if (data.browser) data.browser.send(frame);\n else data.early.push(frame);\n };\n upstream.onclose = (event) => {\n data.browser?.close(sendableCloseCode(event.code), event.reason);\n };\n upstream.onerror = () => {\n // A `close` follows; it ends the browser's socket if there is one.\n };\n\n const opened = await new Promise<boolean>((resolve) => {\n upstream.addEventListener(\"open\", () => resolve(true), { once: true });\n upstream.addEventListener(\"close\", () => resolve(false), { once: true });\n });\n if (!opened) {\n return new Response(\"Vite refused the HMR websocket\", { status: 403 });\n }\n\n const upgraded = server.upgrade(req, {\n // The browser fails a connection whose response does not echo the\n // subprotocol it asked for.\n headers: { \"Sec-WebSocket-Protocol\": protocol },\n data,\n });\n if (!upgraded) {\n upstream.close();\n return new Response(\"WebSocket upgrade failed\", { status: 400 });\n }\n return undefined;\n}\n\n// A close code that may be sent in a close frame. 1005, 1006 and 1015 are\n// reported locally and never sent.\nfunction sendableCloseCode(code: number): number {\n if (\n code === 1000 ||\n (code >= 1001 && code <= 1003) ||\n (code >= 1007 && code <= 1014)\n ) {\n return code;\n }\n if (code >= 3000 && code <= 4999) return code;\n return 1000;\n}\n\n/** `Bun.serve`'s `websocket` option: relays frames to and from Vite. */\nexport const hmrRelayHandler: WebSocketHandler<HmrRelayData> = {\n open(ws: ServerWebSocket<HmrRelayData>) {\n const data = ws.data;\n for (const frame of data.early) ws.send(frame);\n data.early = [];\n data.browser = ws;\n // Vite may have hung up while the upgrade was in flight.\n if (data.upstream.readyState !== WebSocket.OPEN) ws.close(1000);\n },\n message(ws: ServerWebSocket<HmrRelayData>, message) {\n if (ws.data.upstream.readyState === WebSocket.OPEN) {\n ws.data.upstream.send(message);\n }\n },\n close(ws: ServerWebSocket<HmrRelayData>) {\n const { upstream } = ws.data;\n if (upstream.readyState <= WebSocket.OPEN) upstream.close();\n },\n};\n"
10
10
  ],
11
11
  "mappings": "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",
12
- "debugId": "8094A50B562070BD64756E2164756E21",
12
+ "debugId": "753FD0D130422AF164756E2164756E21",
13
13
  "names": []
14
14
  }
@@ -1,6 +1,6 @@
1
1
  // @bun
2
- import{Ca as f}from"./chunk-s0z61m9j.js";import{createElement as v}from"react";function q(i,t){let e=Object.keys(t).sort((s,r)=>r.length-s.length).map((s)=>s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")),p=new RegExp(e.join("|"),"g");return i.replace(p,(s)=>t[s])}async function X(i,t,e=[],p){let s=[...e.map((n)=>`${i}/views/${n}.tsx`),p?`${i}/views/${p}.tsx`:`${i}/views/RootLayout.tsx`],r=new Set;for(let n of s){let u=t.moduleGraph.getModulesByFile(n);if(u)for(let d of u)r.add(d)}let b=[],l=[],g={};for(let n of r)if(n)for(let u of n.importedModules){if(u.file.includes("module.css"))g[u.file]=u.ssrTransformResult.map.sourcesContent.join("");if(u.file.includes(".css"))l.push(u.file)}for(let n of l){let u=await t.transformRequest(n+"?direct"),d=n.includes("module.css"),j="";if(d)j=q(g[n],u.default);b.push({isDev:!0,id:n,content:d?j:u.code})}return b.map((n,u)=>{return v("style",{key:u,type:"text/css","data-vite-dev-id":n.id,dangerouslySetInnerHTML:{__html:n.content}})})}async function Y(i=[]){return i.map((t,e)=>{return v("style",{key:e,id:t?.id,type:"text/css",dangerouslySetInnerHTML:{__html:t.content}})})}import{existsSync as k}from"fs";import{basename as z}from"path";import{networkInterfaces as $}from"os";var a={name:"gemi",version:"0.191.0",private:!1,license:"MIT",author:"Enes Tufekci <enes@gemijs.dev>",repository:{type:"git",url:"git+https://github.com/nstfkc/gemi.git",directory:"packages/gemi"},bin:{gemi:"./dist/bin/gemi.js","gemi-orm-generator":"./dist/bin/orm-generator.js"},files:["dist/**/*","ide/typescript-plugin/package.json","skills/**/*"],module:!0,exports:{"./http":"./http/index.ts","./client":"./client/index.ts","./ai":"./ai/index.ts","./ai/client":"./ai/client/index.ts","./ai/voice":"./ai/voice/index.ts","./testing":"./testing/index.ts","./app":"./app/index.ts","./facades":"./facades/index.ts","./email":"./email/index.ts","./vite":"./dist/vite/index.mjs","./kernel":"./kernel/index.ts","./services":"./services/index.ts","./i18n":"./i18n/index.ts","./dictionary":"./i18n/dictionaryRuntime.ts","./server":"./server/index.ts","./config":"./config/index.ts","./container":"./container/index.ts","./foundation":"./foundation/index.ts","./database":"./database/index.ts","./orm":"./orm/index.ts","./support":"./support/index.ts","./probe":"./probe/index.ts","./console/run":"./console/run.ts","./queue/work":"./services/queue/work.ts","./stats/route-table":"./stats/route-table.ts","./ide/typescript-plugin":"./ide/typescript-plugin/index.ts","./bun/preload":"./bun/preload.ts","./bun/plugin":"./bun/plugin.ts","./vitest":"./vitest/index.ts"},scripts:{lint:"oxlint",typecheck:"tsc --noEmit -p tsconfig.json && tsc --noEmit -p tsconfig.browser.json && tsc --noEmit -p ide/typescript-plugin/tsconfig.json",build:"NODE_ENV=production bun run build:core && bun run build:bin && bun run build:types && bun run build:client && bun run build:plugin && bun run build:ts-plugin && bun run build:client-types && bun run build:augmentation","build:core":"bun ./scripts/build.ts","build:bin":"bun build --outdir=./dist/bin --target=bun --external=vite --external=react-dom --external=react/jsx-runtime --external=bun --external=sharp --external=@azure/storage-blob --external=typescript --sourcemap ./bin/gemi.ts ./bin/orm-generator.ts && bun ./scripts/prepare-bin.ts","build:client":"rm -rf dist/client dist/testing dist/ai/client dist/ai/voice dist/chunks && vite build -c vite.client.config.mts","build:plugin":"vite build -c vite.plugin.config.mts","build:ts-plugin":"bun ./scripts/build-ts-plugin.ts","build:types":"tsc -p tsconfig.build.json","build:client-types":"tsc -p tsconfig.browser.json",test:"bun --bun x vitest","test:types":"vitest run --typecheck.only","test:live":"bun --bun x vitest run ai/live","test:packaging":"bun --bun x vitest run --config vitest.packaging.config.ts","build:publish":"bun scripts/build-publish.ts",prepublishOnly:"echo 'Do not publish from this directory \u2014 its exports point at TS source. Run: bun run build:publish, then publish from .publish/' && exit 1","build:augmentation":"bun ./scripts/wire-augmentation.ts"},dependencies:{"@aws-sdk/client-s3":"^3.629.0","@aws-sdk/s3-request-presigner":"^3.629.0","ast-types":"^0.14.2",commander:"^12.1.0",history:"^5.3.0","jsx-email":"2.0.0-rc2.1","magic-string":"^0.30.17",open:"^10.1.0","react-error-boundary":"^6.0.0",recast:"^0.23.9",resend:"^6.12.3",satori:"^0.12.2","temporal-polyfill":"^0.2.5","twitter-api-v2":"^1.20.2","urlpattern-polyfill":"^10.0.0",uuid:"^9.0.1"},devDependencies:{"@babel/parser":"^7.25.4","@prisma/generator-helper":"^6.5.0","@repo/typescript-config":"*","@testing-library/react":"^16.3.2","@types/bun":"^1.3.14","@types/eslint":"^8.56.5","@types/node":"^20.11.24","@types/react":"^19.0.2","@types/react-dom":"^19.0.2",eslint:"^8.57.0","happy-dom":"^21.0.4",jsdom:"^30.0.1",oxlint:"^1.39.0",postgres:"^3.4.5",react:"19.2.3","react-dom":"19.2.3",typescript:"^5.7.3",vitest:"^4.0.0"},peerDependencies:{"@azure/storage-blob":"^12.28.0",react:">=19","react-dom":">=19",sharp:"^0.34.2",typescript:">=5",vite:"^8.0.0",postgres:"^3.4.0"},peerDependenciesMeta:{"@azure/storage-blob":{optional:!0},typescript:{optional:!0},postgres:{optional:!0}}};var h=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557\u2588\u2588\u2557","\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2551","\u2588\u2588\u2551 \u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2554\u2588\u2588\u2588\u2588\u2554\u2588\u2588\u2551\u2588\u2588\u2551","\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2551\u255A\u2588\u2588\u2554\u255D\u2588\u2588\u2551\u2588\u2588\u2551","\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u255A\u2550\u255D \u2588\u2588\u2551\u2588\u2588\u2551"," \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D"],m=Boolean(process.stdout.isTTY)&&!process.env.NO_COLOR,c=(i,t)=>m?`\x1B[${i}m${t}\x1B[0m`:t,E=(i)=>c("1",i),x=(i)=>c("2",i),o=(i)=>c("36",i),G=(i)=>c("32",i),J=(i)=>c("35",i);function N(){return a.version??"?"}function O(i){for(let t of Object.values($()))for(let e of t??[])if((e.family==="IPv4"||e.family===4)&&!e.internal)return`http://${e.address}:${i}`;return null}function Q(i){return f(i).filter((t)=>k(t)).map((t)=>z(t))}function F(i){let{port:t,rootDir:e}=i,p=`http://localhost:${t}`,s=O(t),r=Q(e),b=(g,n)=>` ${G("\u279C")} ${E(g.padEnd(9))}${n}`,l=["",...h.map((g)=>J(g)),"",` ${x("gemi")} ${o(`v${N()}`)}`,"",b("Local:",o(p)),b("Network:",s?o(s):x("unavailable")),b("Env:",r.length?r.join(", "):x("none")),""];console.log(l.join(`
2
+ import{Ca as f}from"./chunk-s0z61m9j.js";import{createElement as v}from"react";function q(i,t){let e=Object.keys(t).sort((s,r)=>r.length-s.length).map((s)=>s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")),p=new RegExp(e.join("|"),"g");return i.replace(p,(s)=>t[s])}async function X(i,t,e=[],p){let s=[...e.map((n)=>`${i}/views/${n}.tsx`),p?`${i}/views/${p}.tsx`:`${i}/views/RootLayout.tsx`],r=new Set;for(let n of s){let u=t.moduleGraph.getModulesByFile(n);if(u)for(let d of u)r.add(d)}let b=[],l=[],g={};for(let n of r)if(n)for(let u of n.importedModules){if(u.file.includes("module.css"))g[u.file]=u.ssrTransformResult.map.sourcesContent.join("");if(u.file.includes(".css"))l.push(u.file)}for(let n of l){let u=await t.transformRequest(n+"?direct"),d=n.includes("module.css"),j="";if(d)j=q(g[n],u.default);b.push({isDev:!0,id:n,content:d?j:u.code})}return b.map((n,u)=>{return v("style",{key:u,type:"text/css","data-vite-dev-id":n.id,dangerouslySetInnerHTML:{__html:n.content}})})}async function Y(i=[]){return i.map((t,e)=>{return v("style",{key:e,id:t?.id,type:"text/css",dangerouslySetInnerHTML:{__html:t.content}})})}import{existsSync as k}from"fs";import{basename as z}from"path";import{networkInterfaces as $}from"os";var a={name:"gemi",version:"0.192.0",private:!1,license:"MIT",author:"Enes Tufekci <enes@gemijs.dev>",repository:{type:"git",url:"git+https://github.com/nstfkc/gemi.git",directory:"packages/gemi"},bin:{gemi:"./dist/bin/gemi.js","gemi-orm-generator":"./dist/bin/orm-generator.js"},files:["dist/**/*","ide/typescript-plugin/package.json","skills/**/*"],module:!0,exports:{"./http":"./http/index.ts","./client":"./client/index.ts","./ai":"./ai/index.ts","./ai/client":"./ai/client/index.ts","./ai/voice":"./ai/voice/index.ts","./testing":"./testing/index.ts","./app":"./app/index.ts","./facades":"./facades/index.ts","./email":"./email/index.ts","./vite":"./dist/vite/index.mjs","./kernel":"./kernel/index.ts","./services":"./services/index.ts","./i18n":"./i18n/index.ts","./dictionary":"./i18n/dictionaryRuntime.ts","./server":"./server/index.ts","./config":"./config/index.ts","./container":"./container/index.ts","./foundation":"./foundation/index.ts","./database":"./database/index.ts","./orm":"./orm/index.ts","./support":"./support/index.ts","./probe":"./probe/index.ts","./console/run":"./console/run.ts","./queue/work":"./services/queue/work.ts","./stats/route-table":"./stats/route-table.ts","./ide/typescript-plugin":"./ide/typescript-plugin/index.ts","./bun/preload":"./bun/preload.ts","./bun/plugin":"./bun/plugin.ts","./vitest":"./vitest/index.ts"},scripts:{lint:"oxlint",typecheck:"tsc --noEmit -p tsconfig.json && tsc --noEmit -p tsconfig.browser.json && tsc --noEmit -p ide/typescript-plugin/tsconfig.json",build:"NODE_ENV=production bun run build:core && bun run build:bin && bun run build:types && bun run build:client && bun run build:plugin && bun run build:ts-plugin && bun run build:client-types && bun run build:augmentation","build:core":"bun ./scripts/build.ts","build:bin":"bun build --outdir=./dist/bin --target=bun --external=vite --external=react-dom --external=react/jsx-runtime --external=bun --external=sharp --external=@azure/storage-blob --external=typescript --sourcemap ./bin/gemi.ts ./bin/orm-generator.ts && bun ./scripts/prepare-bin.ts","build:client":"rm -rf dist/client dist/testing dist/ai/client dist/ai/voice dist/chunks && vite build -c vite.client.config.mts","build:plugin":"vite build -c vite.plugin.config.mts","build:ts-plugin":"bun ./scripts/build-ts-plugin.ts","build:types":"tsc -p tsconfig.build.json","build:client-types":"tsc -p tsconfig.browser.json",test:"bun --bun x vitest","test:types":"vitest run --typecheck.only","test:live":"bun --bun x vitest run ai/live","test:packaging":"bun --bun x vitest run --config vitest.packaging.config.ts","build:publish":"bun scripts/build-publish.ts",prepublishOnly:"echo 'Do not publish from this directory \u2014 its exports point at TS source. Run: bun run build:publish, then publish from .publish/' && exit 1","build:augmentation":"bun ./scripts/wire-augmentation.ts"},dependencies:{"@aws-sdk/client-s3":"^3.629.0","@aws-sdk/s3-request-presigner":"^3.629.0","ast-types":"^0.14.2",commander:"^12.1.0",history:"^5.3.0","jsx-email":"2.0.0-rc2.1","magic-string":"^0.30.17",open:"^10.1.0","react-error-boundary":"^6.0.0",recast:"^0.23.9",resend:"^6.12.3",satori:"^0.12.2","temporal-polyfill":"^0.2.5","twitter-api-v2":"^1.20.2","urlpattern-polyfill":"^10.0.0",uuid:"^9.0.1"},devDependencies:{"@babel/parser":"^7.25.4","@prisma/generator-helper":"^6.5.0","@repo/typescript-config":"*","@testing-library/react":"^16.3.2","@types/bun":"^1.3.14","@types/eslint":"^8.56.5","@types/node":"^20.11.24","@types/react":"^19.0.2","@types/react-dom":"^19.0.2",eslint:"^8.57.0","happy-dom":"^21.0.4",jsdom:"^30.0.1",oxlint:"^1.39.0",postgres:"^3.4.5",react:"19.2.3","react-dom":"19.2.3",typescript:"^5.7.3",vitest:"^4.0.0"},peerDependencies:{"@azure/storage-blob":"^12.28.0",react:">=19","react-dom":">=19",sharp:"^0.34.2",typescript:">=5",vite:"^8.0.0",postgres:"^3.4.0"},peerDependenciesMeta:{"@azure/storage-blob":{optional:!0},typescript:{optional:!0},postgres:{optional:!0}}};var h=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557\u2588\u2588\u2557","\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2551","\u2588\u2588\u2551 \u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2554\u2588\u2588\u2588\u2588\u2554\u2588\u2588\u2551\u2588\u2588\u2551","\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2551\u255A\u2588\u2588\u2554\u255D\u2588\u2588\u2551\u2588\u2588\u2551","\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u255A\u2550\u255D \u2588\u2588\u2551\u2588\u2588\u2551"," \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D"],m=Boolean(process.stdout.isTTY)&&!process.env.NO_COLOR,c=(i,t)=>m?`\x1B[${i}m${t}\x1B[0m`:t,E=(i)=>c("1",i),x=(i)=>c("2",i),o=(i)=>c("36",i),G=(i)=>c("32",i),J=(i)=>c("35",i);function N(){return a.version??"?"}function O(i){for(let t of Object.values($()))for(let e of t??[])if((e.family==="IPv4"||e.family===4)&&!e.internal)return`http://${e.address}:${i}`;return null}function Q(i){return f(i).filter((t)=>k(t)).map((t)=>z(t))}function F(i){let{port:t,rootDir:e}=i,p=`http://localhost:${t}`,s=O(t),r=Q(e),b=(g,n)=>` ${G("\u279C")} ${E(g.padEnd(9))}${n}`,l=["",...h.map((g)=>J(g)),"",` ${x("gemi")} ${o(`v${N()}`)}`,"",b("Local:",o(p)),b("Network:",s?o(s):x("unavailable")),b("Env:",r.length?r.join(", "):x("none")),""];console.log(l.join(`
3
3
  `))}function V(i,t){return Error(`app/views/${i}.tsx is missing. gemi's auth routes render it because ${t} is on. Add the view, or turn that setting off in app/config/auth.ts.`)}function U(i=process.env.SERVER_IDLE_TIMEOUT){if(i===void 0||i.trim()==="")return 10;let t=Number(i.trim());if(!Number.isInteger(t)||t<0||t>255)throw Error(`SERVER_IDLE_TIMEOUT must be a whole number of seconds from 0 to 255 (0 disables the timeout), got ${JSON.stringify(i)}.`);return t}
4
4
  export{X as W,Y as X,F as Y,V as Z,U as _};
5
5
 
6
- //# debugId=AD001A6915E7B83564756E2164756E21
6
+ //# debugId=DDCD3BFD73E274A664756E2164756E21
@@ -8,6 +8,6 @@
8
8
  "/**\n * Bun's default, and what both servers use when `SERVER_IDLE_TIMEOUT` is unset.\n */\nexport const DEFAULT_SERVER_IDLE_TIMEOUT = 10;\n\n/**\n * The `idleTimeout` (seconds) both `gemi dev` and `gemi start` pass to\n * `Bun.serve`, from `SERVER_IDLE_TIMEOUT` (#787).\n *\n * One reader for both servers, so a long-poll that works under `gemi start`\n * also works under `gemi dev`. Before this, only `httpProd` read the variable\n * and the dev server always ran at Bun's 10 seconds.\n *\n * It is the time a connection may stay silent, a response that has not started\n * included, before Bun closes it; `0` disables it. It does not apply to an\n * upgraded websocket (the HMR relay included), which has its own\n * `websocket.idleTimeout`.\n *\n * Unset or blank means the default. Anything that is not a whole number from 0\n * to 255 (Bun's own limits) fails the boot with the variable's name, instead\n * of Bun's \"expects idleTimeout to be an integer\", which does not say where the\n * value came from.\n */\nexport function serverIdleTimeout(raw: string | undefined = process.env.SERVER_IDLE_TIMEOUT): number {\n if (raw === undefined || raw.trim() === \"\") return DEFAULT_SERVER_IDLE_TIMEOUT;\n\n const seconds = Number(raw.trim());\n if (!Number.isInteger(seconds) || seconds < 0 || seconds > 255) {\n throw new Error(\n `SERVER_IDLE_TIMEOUT must be a whole number of seconds from 0 to 255 ` +\n `(0 disables the timeout), got ${JSON.stringify(raw)}.`,\n );\n }\n return seconds;\n}\n"
9
9
  ],
10
10
  "mappings": "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",
11
- "debugId": "AD001A6915E7B83564756E2164756E21",
11
+ "debugId": "DDCD3BFD73E274A664756E2164756E21",
12
12
  "names": []
13
13
  }
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{Nl as t,Ql as A}from"./chunk-80kpxp4m.js";var o=t((b)=>{var i=(r)=>typeof ArrayBuffer==="function"&&r instanceof ArrayBuffer||Object.prototype.toString.call(r)==="[object ArrayBuffer]";b.isArrayBuffer=i});var y=t((g)=>{var m=o(),f=A("buffer"),B=(r,e=0,u=r.byteLength-e)=>{if(!m.isArrayBuffer(r))throw TypeError(`The "input" argument must be ArrayBuffer. Received type ${typeof r} (${r})`);return f.Buffer.from(r,e,u)},a=(r,e)=>{if(typeof r!=="string")throw TypeError(`The "input" argument must be of type string. Received type ${typeof r} (${r})`);return e?f.Buffer.from(r,e):f.Buffer.from(r)};g.fromArrayBuffer=B;g.fromString=a});var x=t((w)=>{var n=y(),s=(r)=>{let e=n.fromString(r,"utf8");return new Uint8Array(e.buffer,e.byteOffset,e.byteLength/Uint8Array.BYTES_PER_ELEMENT)},h=(r)=>{if(typeof r==="string")return s(r);if(ArrayBuffer.isView(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength/Uint8Array.BYTES_PER_ELEMENT);return new Uint8Array(r)},p=(r)=>{if(typeof r==="string")return r;if(typeof r!=="object"||typeof r.byteOffset!=="number"||typeof r.byteLength!=="number")throw Error("@smithy/util-utf8: toUtf8 encoder function only accepts string | Uint8Array.");return n.fromArrayBuffer(r.buffer,r.byteOffset,r.byteLength).toString("utf8")};w.fromUtf8=s;w.toUint8Array=h;w.toUtf8=p});
2
+ import{Ol as t,Rl as A}from"./chunk-k1c0xd8r.js";var o=t((b)=>{var i=(r)=>typeof ArrayBuffer==="function"&&r instanceof ArrayBuffer||Object.prototype.toString.call(r)==="[object ArrayBuffer]";b.isArrayBuffer=i});var y=t((g)=>{var m=o(),f=A("buffer"),B=(r,e=0,u=r.byteLength-e)=>{if(!m.isArrayBuffer(r))throw TypeError(`The "input" argument must be ArrayBuffer. Received type ${typeof r} (${r})`);return f.Buffer.from(r,e,u)},a=(r,e)=>{if(typeof r!=="string")throw TypeError(`The "input" argument must be of type string. Received type ${typeof r} (${r})`);return e?f.Buffer.from(r,e):f.Buffer.from(r)};g.fromArrayBuffer=B;g.fromString=a});var x=t((w)=>{var n=y(),s=(r)=>{let e=n.fromString(r,"utf8");return new Uint8Array(e.buffer,e.byteOffset,e.byteLength/Uint8Array.BYTES_PER_ELEMENT)},h=(r)=>{if(typeof r==="string")return s(r);if(ArrayBuffer.isView(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength/Uint8Array.BYTES_PER_ELEMENT);return new Uint8Array(r)},p=(r)=>{if(typeof r==="string")return r;if(typeof r!=="object"||typeof r.byteOffset!=="number"||typeof r.byteLength!=="number")throw Error("@smithy/util-utf8: toUtf8 encoder function only accepts string | Uint8Array.");return n.fromArrayBuffer(r.buffer,r.byteOffset,r.byteLength).toString("utf8")};w.fromUtf8=s;w.toUint8Array=h;w.toUtf8=p});
3
3
  export{o as $,y as aa,x as ba};
4
4
 
5
- //# debugId=0A78C8AF65F172B664756E2164756E21
5
+ //# debugId=D67AF6614F16252364756E2164756E21
@@ -7,6 +7,6 @@
7
7
  "'use strict';\n\nvar utilBufferFrom = require('@smithy/util-buffer-from');\n\nconst fromUtf8 = (input) => {\n const buf = utilBufferFrom.fromString(input, \"utf8\");\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength / Uint8Array.BYTES_PER_ELEMENT);\n};\n\nconst toUint8Array = (data) => {\n if (typeof data === \"string\") {\n return fromUtf8(data);\n }\n if (ArrayBuffer.isView(data)) {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);\n }\n return new Uint8Array(data);\n};\n\nconst toUtf8 = (input) => {\n if (typeof input === \"string\") {\n return input;\n }\n if (typeof input !== \"object\" || typeof input.byteOffset !== \"number\" || typeof input.byteLength !== \"number\") {\n throw new Error(\"@smithy/util-utf8: toUtf8 encoder function only accepts string | Uint8Array.\");\n }\n return utilBufferFrom.fromArrayBuffer(input.buffer, input.byteOffset, input.byteLength).toString(\"utf8\");\n};\n\nexports.fromUtf8 = fromUtf8;\nexports.toUint8Array = toUint8Array;\nexports.toUtf8 = toUtf8;\n"
8
8
  ],
9
9
  "mappings": ";+DAEA,IAAM,EAAgB,CAAC,IAAS,OAAO,cAAgB,YAAc,aAAe,aAChF,OAAO,UAAU,SAAS,KAAK,CAAG,IAAM,uBAEpC,gBAAgB,kBCHxB,IAAI,MACA,cAEE,EAAkB,CAAC,EAAO,EAAS,EAAG,EAAS,EAAM,WAAa,IAAW,CAC/E,GAAI,CAAC,EAAc,cAAc,CAAK,EAClC,MAAU,UAAU,2DAA2D,OAAO,MAAU,IAAQ,EAE5G,OAAO,EAAO,OAAO,KAAK,EAAO,EAAQ,CAAM,GAE7C,EAAa,CAAC,EAAO,IAAa,CACpC,GAAI,OAAO,IAAU,SACjB,MAAU,UAAU,8DAA8D,OAAO,MAAU,IAAQ,EAE/G,OAAO,EAAW,EAAO,OAAO,KAAK,EAAO,CAAQ,EAAI,EAAO,OAAO,KAAK,CAAK,GAG5E,kBAAkB,EAClB,aAAa,kBCjBrB,IAAI,MAEE,EAAW,CAAC,IAAU,CACxB,IAAM,EAAM,EAAe,WAAW,EAAO,MAAM,EACnD,OAAO,IAAI,WAAW,EAAI,OAAQ,EAAI,WAAY,EAAI,WAAa,WAAW,iBAAiB,GAG7F,EAAe,CAAC,IAAS,CAC3B,GAAI,OAAO,IAAS,SAChB,OAAO,EAAS,CAAI,EAExB,GAAI,YAAY,OAAO,CAAI,EACvB,OAAO,IAAI,WAAW,EAAK,OAAQ,EAAK,WAAY,EAAK,WAAa,WAAW,iBAAiB,EAEtG,OAAO,IAAI,WAAW,CAAI,GAGxB,EAAS,CAAC,IAAU,CACtB,GAAI,OAAO,IAAU,SACjB,OAAO,EAEX,GAAI,OAAO,IAAU,UAAY,OAAO,EAAM,aAAe,UAAY,OAAO,EAAM,aAAe,SACjG,MAAU,MAAM,8EAA8E,EAElG,OAAO,EAAe,gBAAgB,EAAM,OAAQ,EAAM,WAAY,EAAM,UAAU,EAAE,SAAS,MAAM,GAGnG,WAAW,EACX,eAAe,EACf,SAAS",
10
- "debugId": "0A78C8AF65F172B664756E2164756E21",
10
+ "debugId": "D67AF6614F16252364756E2164756E21",
11
11
  "names": []
12
12
  }
@@ -1,5 +1,5 @@
1
1
  // @bun
2
2
  function p(j){return Object.freeze({name:j})}class N extends Error{key;constructor(j){super(`Request state "${j.name}" is not set. Check that whatever sets it (a middleware, \`context()\`) ran for this request.`);this.key=j;this.name="MissingRequestStateError"}}class P{#j=new Map;get(j){return this.#j.get(j)}require(j){if(!this.#j.has(j))throw new N(j);return this.#j.get(j)}set(j,J){return this.#j.set(j,J),J}has(j){return this.#j.has(j)}delete(j){return this.#j.delete(j)}static carry(j,J){for(let[Q,V]of j.#j)if(!J.#j.has(Q))J.#j.set(Q,V)}}function z(){for(let j of["HOST_NAME","APP_URL"]){let J=process.env[j]?.trim().replace(/\/+$/,"");if(J)return J}return}function d(j){let J=z(),Q=J===void 0?"fallback":J===process.env.HOST_NAME?.trim().replace(/\/+$/,"")?"HOST_NAME":"APP_URL",V=J??j?.trim().replace(/\/+$/,"");if(!V)throw Error("The app's public origin is not configured: set HOST_NAME (or APP_URL), e.g. HOST_NAME=https://example.com.");let Z=URL.canParse(V)?new URL(V).protocol:null;if(Z!=="http:"&&Z!=="https:")throw Error(`The app's public origin from ${Q} (${JSON.stringify(V)}) is not an absolute http(s) URL, e.g. https://example.com.`);return V}import{AsyncLocalStorage as v}from"async_hooks";var R=new Set(["woff2","woff","truetype","opentype","collection","embedded-opentype","svg"]),q={woff2:"woff2",woff:"woff",ttf:"truetype",otf:"opentype",ttc:"collection",eot:"embedded-opentype",svg:"svg"};var y=new Set(["auto","block","swap","fallback","optional"]),w=/^[a-zA-Z0-9.%+\- ]+$/,k=/^[uU]\+[0-9a-fA-F?]{1,6}(-[0-9a-fA-F]{1,6})?(\s*,\s*[uU]\+[0-9a-fA-F?]{1,6}(-[0-9a-fA-F]{1,6})?)*$/;function G(j){throw TypeError(`Meta.fonts: ${j}`)}function h(j){let J=(j.split(/[?#]/)[0]??"").split("/").pop()??"",Q=J.lastIndexOf(".");return Q===-1?null:q[J.slice(Q+1).toLowerCase()]??null}function U(j,J){if(J===void 0||J===null)return null;let Q=String(J).trim();if(!Q||!w.test(Q))G(`${j} ${JSON.stringify(J)} is not a valid font-${j} value`);return Q}function T(j){if(!Array.isArray(j))G("expected an array of fonts");return j.map((J)=>{if(typeof J?.family!=="string"||!J.family.trim())G("every font needs a family");let Q=typeof J.src==="string"?[{url:J.src}]:J.src;if(!Array.isArray(Q)||Q.length===0)G(`font "${J.family}" needs a src`);let V=Q.map(($)=>{if(typeof $?.url!=="string"||!$.url.trim())G(`font "${J.family}" has a source without a url`);if($.format!==void 0&&!R.has($.format))G(`font "${J.family}" has an unknown format ${JSON.stringify($.format)}`);return{url:$.url.trim(),format:$.format??h($.url)}}),Z=J.display??"swap";if(!y.has(Z))G(`display ${JSON.stringify(Z)} is not a valid font-display value`);let X=J.unicodeRange?.trim()||null;if(X&&!k.test(X))G(`unicodeRange ${JSON.stringify(J.unicodeRange)} is not a valid unicode-range`);return{family:J.family.trim(),src:V,weight:U("weight",J.weight),style:U("style",J.style),stretch:U("stretch",J.stretch),display:Z,unicodeRange:X,preload:J.preload===!0}})}class Y{content={title:"Gemi App",description:null,openGraph:null,htmlAttributes:null,canonical:null,alternates:null,fonts:null,robots:null,translate:null,tags:null};touched=!1;setFields=new Set;render(){return{title:this.content.title,description:this.content.description,openGraph:this.content.openGraph,htmlAttributes:this.content.htmlAttributes,canonical:this.content.canonical,alternates:this.content.alternates,fonts:this.content.fonts,robots:this.content.robots,translate:this.content.translate,tags:this.content.tags}}htmlAttributes(j){this.touched=!0;let J=Object.fromEntries(Object.entries(j).filter(([,Q])=>Q!==void 0));this.content.htmlAttributes={...this.content.htmlAttributes,...J}}canonical(j){this.touched=!0,this.content.canonical=j}robots(j){this.touched=!0,this.content.robots=j}translate(j=!0){this.touched=!0,this.translateSet=!0,this.content.translate=j}translateSet=!1;applyTranslateDefault(j){if(!this.translateSet)this.content.translate=j}alternates(j){this.touched=!0,this.content.alternates=j}tags(j){let J=j.map((Q)=>{let V=Q.name!==void 0?"name":"property",Z=Q.name??Q.property;if(typeof Z!=="string"||Z===""||Q.name!==void 0&&Q.property!==void 0)throw TypeError("Meta.tags: each tag needs either a `name` or a `property`.");if(typeof Q.content!=="string")throw TypeError(`Meta.tags: the tag ${Z} has no string \`content\`.`);return{[V]:Z,content:Q.content}});this.touched=!0,this.content.tags=[...this.content.tags??[],...J]}fonts(j){let J=T(j);this.touched=!0,this.content.fonts=[...this.content.fonts??[],...J]}title(j){this.touched=!0,this.setFields.add("title"),this.content.title=j}description(j){this.touched=!0,this.setFields.add("description"),this.content.description=j}get hasAllDefaultFields(){return this.setFields.size===3}applyDefaults(j){if(!this.setFields.has("title")&&j.title!==void 0)this.content.title=j.title;if(!this.setFields.has("description")&&j.description!==void 0)this.content.description=j.description;if(!this.setFields.has("openGraph")&&j.openGraph){let{title:J,description:Q,type:V,...Z}=j.openGraph;this.content.openGraph=this.normalizeOpenGraph({...Z,title:J??this.content.title,description:Q??this.content.description??void 0,type:V??"website"})}}openGraph(j){this.touched=!0,this.setFields.add("openGraph"),this.content.openGraph=this.normalizeOpenGraph(j)}normalizeOpenGraph({title:j,description:J,type:Q,url:V,image:Z,imageAlt:X,imageWidth:$,imageHeight:H,siteName:E,twitterTitle:x,twitterDescription:A,twitterImage:W=Z,twitterImageAlt:O=X,twitterImageWidth:C=$,twitterImageHeight:S=H,twitterCard:I=W?"summary_large_image":"summary"}){let D=(B)=>B&&!B.startsWith("http")?`${z()}${B}`:B;return Object.fromEntries(Object.entries({title:j,description:J,type:Q,url:V,image:D(Z),imageAlt:X,imageWidth:$,imageHeight:H,siteName:E,twitterTitle:x,twitterDescription:A,twitterImage:D(W),twitterImageAlt:O,twitterImageWidth:C,twitterImageHeight:S,twitterCard:I}).filter(([B,F])=>F!==void 0&&F!==null))}}function M(j,J,Q={}){return[`${j}=${J}`,Q.maxAge?`Max-Age=${Q.maxAge}`:"",Q.httpOnly?"HttpOnly":"",Q.secure?"Secure":"",Q.sameSite?`SameSite=${Q.sameSite}`:"SameSite=Strict",Q.path?`Path=${Q.path}`:"Path=/",Q.domain?`Domain=${Q.domain}`:"",Q.expires?`Expires=${Q.expires.toUTCString()}`:"",Q.partitioned?"Partitioned":""].filter((V)=>V!=="").join("; ")}var K=new v;class _{req;cookies=new Set;headers=new Headers;serverQueries=null;user=null;csrfHmac=null;locale=null;metadata=new Y;rangeRequest=null;sessionId=null;featureEvaluations=null;featureContext=null;featureBuckets=null;pendingWork=new Set;ended=!1;constructor(j){this.req=j}waitUntil(j){if(this.ended)return;let J=Promise.resolve(j).then(()=>{},()=>{});this.pendingWork.add(J),J.then(()=>this.pendingWork.delete(J))}hasPendingWork(){return this.pendingWork.size>0}async whenIdle(){while(this.pendingWork.size>0)await Promise.all(Array.from(this.pendingWork))}setLocale(j){this.locale=j}renderMeta(){return this.metadata.render()}setCSRFHmac(j){this.csrfHmac=j}setCookie(j,J,Q={}){this.cookies.add(M(j,J,Q))}deleteCookie(j,J={}){this.cookies.add(M(j,"",{...J,maxAge:-1}))}setHeaders(j,J){this.headers.set(j,J)}setUser(j){this.user=j}setRequest(j){this.req=j}destroy(){this.ended=!0,delete this.cookies,delete this.headers,this.serverQueries=null,this.sessionId=null,this.featureEvaluations=null,this.featureContext=null,this.featureBuckets=null,delete this.user}}var b="session_id";function m(){let j=L.getStore();if(!j)return null;if(j.sessionId)return j.sessionId;let J=j.req?.cookies?.get(b);if(J)j.sessionId=J;return j.sessionId}function s(){let j=L.getStore();if(!j)return null;let J=m();if(J)return J;let Q=Bun.randomUUIDv7();return j.sessionId=Q,j.setCookie(b,Q,{httpOnly:!0,secure:Bun.env.NODE_ENV==="production",sameSite:"Lax",expires:new Date(Date.now()+31536000000)}),Q}class L{static getStore(){return K.getStore()}static setRequest(j){K.getStore().req=j}static run(j,J,Q){let V=new _(j);if(Q){if(V.user=Q.user,Q.state&&j.state)P.carry(Q.state,j.state)}return K.run(V,J)}static runWith(j,J){return K.run(j,J)}static exit(j){return K.exit(j)}}
3
- export{z as dj,d as ej,p as fj,N as gj,P as hj,m as ij,s as jj,L as kj};
3
+ export{z as ej,d as fj,p as gj,N as hj,P as ij,m as jj,s as kj,L as lj};
4
4
 
5
- //# debugId=F7B202E49D9F8CAB64756E2164756E21
5
+ //# debugId=2942467733596BB964756E2164756E21
@@ -9,6 +9,6 @@
9
9
  "import { type MetaFont, type NormalizedFont, normalizeFonts } from \"../client/fonts\";\nimport { configuredAppOrigin } from \"../utils/appOrigin\";\n\nexport type { MetaFont };\n\nexport type OpenGraphParams = {\n title: string;\n description?: string;\n type: string;\n url: string;\n /** Rendered as `og:image` only when set. A path is prefixed with the app origin. */\n image?: string;\n imageAlt?: string;\n imageWidth?: number;\n imageHeight?: number;\n /** `og:site_name`, rendered only when set. */\n siteName?: string;\n /** `twitter:title`, rendered only when set (it does not follow `title`). */\n twitterTitle?: string;\n /** `twitter:description`, rendered only when set (it does not follow `description`). */\n twitterDescription?: string;\n twitterImage?: string;\n /** Defaults to `imageAlt`; `null` leaves `twitter:image:alt` out. */\n twitterImageAlt?: string | null;\n /** Defaults to `imageWidth`; `null` leaves `twitter:image:width` out. */\n twitterImageWidth?: number | null;\n /** Defaults to `imageHeight`; `null` leaves `twitter:image:height` out. */\n twitterImageHeight?: number | null;\n /**\n * The `twitter:card` type. Defaults to `\"summary_large_image\"` when the page\n * has an image (`twitterImage ?? image`), `\"summary\"` otherwise.\n */\n twitterCard?: \"summary\" | \"summary_large_image\";\n};\n/**\n * The app-wide default title and metadata (`route.view.meta`, #1042): used for\n * each field that no handler (or `onNotFound`) set. See `ViewRouteConfig.meta`.\n */\nexport type DefaultViewMeta = {\n title?: string;\n description?: string;\n /**\n * Every field is optional: `title` and `description` default to the page's\n * own, `type` to `\"website\"`. `url` is left out of the page unless given.\n */\n openGraph?: Partial<OpenGraphParams>;\n};\n\n/**\n * Attributes for the document's `<html>` element, handed to the root (or a\n * static view's) layout as its `htmlAttributes` prop.\n */\nexport type HtmlAttributes = {\n /** The document's language, e.g. `\"tr\"`. Defaults to the request's locale. */\n lang?: string;\n /** Text direction. Defaults to the one `lang` is written in. */\n dir?: \"ltr\" | \"rtl\" | \"auto\";\n};\n\n/** One `<link rel=\"alternate\" hreflang>`: the same page in another language. */\nexport type AlternateLink = {\n /** A BCP 47 tag, or `\"x-default\"` for the page to use when none matches. */\n hrefLang: string;\n href: string;\n};\n\n/**\n * A `<link rel=\"alternate\" type>` without `hreflang`: the same page in another\n * format, e.g. `{ type: \"text/markdown\", href: \"/docs/intro.md\" }`.\n */\nexport type TypedAlternateLink = {\n /** The linked document's media type. */\n type: string;\n href: string;\n};\n\n/** What `Meta.alternates` takes: a language alternate, or one in another format. */\nexport type MetaAlternate = AlternateLink | TypedAlternateLink;\n\n/**\n * One `<meta>` that `Meta.tags` adds: `name` (e.g. a site-verification token,\n * `{ name: \"google-site-verification\", content }`) or `property`.\n */\nexport type MetaTag =\n | { name: string; property?: never; content: string }\n | { property: string; name?: never; content: string };\n\nexport class Metadata {\n content: any = {\n title: \"Gemi App\",\n description: null,\n openGraph: null,\n htmlAttributes: null,\n canonical: null,\n alternates: null,\n fonts: null,\n robots: null,\n translate: null,\n tags: null,\n };\n\n /**\n * Whether a handler set anything, as opposed to `content` still being the\n * defaults. A partially rendered response that touched no metadata sends\n * none, so the client keeps what the skipped segments put there.\n */\n touched = false;\n\n /** The fields a handler set, which the app's default (`route.view.meta`) leaves alone. */\n private setFields = new Set<keyof DefaultViewMeta>();\n\n render() {\n return {\n title: this.content.title,\n description: this.content.description,\n openGraph: this.content.openGraph,\n htmlAttributes: this.content.htmlAttributes,\n canonical: this.content.canonical,\n alternates: this.content.alternates,\n fonts: this.content.fonts,\n robots: this.content.robots,\n translate: this.content.translate,\n tags: this.content.tags,\n };\n }\n\n /** Merged into what earlier calls set; `undefined` leaves an attribute alone. */\n htmlAttributes(attributes: HtmlAttributes) {\n this.touched = true;\n const defined = Object.fromEntries(\n Object.entries(attributes).filter(([, value]) => value !== undefined),\n );\n this.content.htmlAttributes = { ...this.content.htmlAttributes, ...defined };\n }\n\n canonical(url: string) {\n this.touched = true;\n this.content.canonical = url;\n }\n\n /** `<meta name=\"robots\">`'s content, e.g. `\"noindex, nofollow\"`; the last call wins. */\n robots(content: string) {\n this.touched = true;\n this.content.robots = content;\n }\n\n /**\n * Whether browsers and Google Search may translate the page (#1087). `true`\n * leaves `<meta name=\"google\" content=\"notranslate\">` out; `false` (or no\n * call) keeps it. The last call wins.\n */\n translate(allow = true) {\n this.touched = true;\n this.translateSet = true;\n this.content.translate = allow;\n }\n\n /** Whether a handler called `translate`, which the views' default (`route.view.translate`) leaves alone. */\n private translateSet = false;\n\n /**\n * The views' default (`route.view.translate`, #1087), for a response whose\n * handlers didn't call `translate`. Not a handler call, so `touched` stays\n * as it was.\n */\n applyTranslateDefault(allow: boolean) {\n if (!this.translateSet) {\n this.content.translate = allow;\n }\n }\n\n alternates(links: MetaAlternate[]) {\n this.touched = true;\n this.content.alternates = links;\n }\n\n /** Added to what earlier calls set, so a layout and its page can both add tags. */\n tags(tags: MetaTag[]) {\n const normalized = tags.map((tag) => {\n const key = tag.name !== undefined ? \"name\" : \"property\";\n const value = tag.name ?? tag.property;\n if (typeof value !== \"string\" || value === \"\" || (tag.name !== undefined && tag.property !== undefined)) {\n throw new TypeError(\"Meta.tags: each tag needs either a `name` or a `property`.\");\n }\n if (typeof tag.content !== \"string\") {\n throw new TypeError(`Meta.tags: the tag ${value} has no string \\`content\\`.`);\n }\n return { [key]: value, content: tag.content } as MetaTag;\n });\n this.touched = true;\n this.content.tags = [...(this.content.tags ?? []), ...normalized];\n }\n\n /** Added to what earlier calls declared, so a layout and its page can both declare fonts. */\n fonts(fonts: MetaFont[]) {\n const normalized: NormalizedFont[] = normalizeFonts(fonts);\n this.touched = true;\n this.content.fonts = [...(this.content.fonts ?? []), ...normalized];\n }\n\n title(title: string) {\n this.touched = true;\n this.setFields.add(\"title\");\n this.content.title = title;\n }\n\n description(description: string) {\n this.touched = true;\n this.setFields.add(\"description\");\n this.content.description = description;\n }\n\n /** Whether every field the app's default could fill was set by a handler. */\n get hasAllDefaultFields() {\n return this.setFields.size === 3;\n }\n\n /**\n * Fills each of `title`, `description` and `openGraph` that no handler set\n * from the app's default (`route.view.meta`, #1042). Field by field: a\n * handler's `Meta.title` keeps its title and still gets the default\n * description. Not a handler call, so `touched` stays as it was.\n *\n * The default's Open Graph fields fall back to the page's title and\n * description and to `type: \"website\"`; `url` is only rendered when given.\n */\n applyDefaults(defaults: DefaultViewMeta) {\n if (!this.setFields.has(\"title\") && defaults.title !== undefined) {\n this.content.title = defaults.title;\n }\n if (!this.setFields.has(\"description\") && defaults.description !== undefined) {\n this.content.description = defaults.description;\n }\n if (!this.setFields.has(\"openGraph\") && defaults.openGraph) {\n const { title, description, type, ...rest } = defaults.openGraph;\n this.content.openGraph = this.normalizeOpenGraph({\n ...rest,\n title: title ?? this.content.title,\n description: description ?? this.content.description ?? undefined,\n type: type ?? \"website\",\n });\n }\n }\n\n openGraph(params: OpenGraphParams) {\n this.touched = true;\n this.setFields.add(\"openGraph\");\n this.content.openGraph = this.normalizeOpenGraph(params);\n }\n\n private normalizeOpenGraph({\n title,\n description,\n type,\n url,\n image,\n imageAlt,\n imageWidth,\n imageHeight,\n siteName,\n twitterTitle,\n twitterDescription,\n twitterImage = image,\n twitterImageAlt = imageAlt,\n twitterImageWidth = imageWidth,\n twitterImageHeight = imageHeight,\n twitterCard = twitterImage ? \"summary_large_image\" : \"summary\",\n }: Omit<OpenGraphParams, \"url\"> & { url?: string }) {\n const absolute = (src: string | undefined) =>\n src && !src.startsWith(\"http\") ? `${configuredAppOrigin()}${src}` : src;\n return Object.fromEntries(\n Object.entries({\n title,\n description,\n type,\n url,\n image: absolute(image),\n imageAlt,\n imageWidth,\n imageHeight,\n siteName,\n twitterTitle,\n twitterDescription,\n twitterImage: absolute(twitterImage),\n twitterImageAlt,\n twitterImageWidth,\n twitterImageHeight,\n twitterCard,\n })\n // `null` (a twitter image field turned off) is left out like `undefined`.\n .filter(([_, value]) => value !== undefined && value !== null),\n );\n }\n}\n"
10
10
  ],
11
11
  "mappings": "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",
12
- "debugId": "F7B202E49D9F8CAB64756E2164756E21",
12
+ "debugId": "2942467733596BB964756E2164756E21",
13
13
  "names": []
14
14
  }
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{aj as F,bj as _1,cj as O1}from"./chunk-8b897pc1.js";import{hj as g1,kj as b}from"./chunk-bwmyd47e.js";import{ll as R0}from"./chunk-x1ng1dnx.js";import{pl as C1}from"./chunk-nc37phkt.js";import{Il as H1}from"./chunk-h8knqrc5.js";import{Ql as aQ}from"./chunk-80kpxp4m.js";class s1{static kind="controller";constructor(){}}class c0 extends s1{}function w1(Q){let Z=new Map;if(!Q)return Z;for(let $ of Q.split(";")){let X=$.indexOf("=");if(X===-1)continue;let G=$.slice(0,X).trim();if(!G)continue;Z.set(G,$.slice(X+1).trim())}return Z}function MZ(Q){return w1(Q.headers.get("cookie"))}function u(Q){if(!/^\d+$/.test(Q))return null;let Z=Number(Q);return Number.isSafeInteger(Z)?Z:null}function a1(Q){if(!Q)return null;let Z=Q.trim();if(!/^bytes=/i.test(Z))return null;let X=Z.slice(6).split(",").map((V)=>V.trim()).filter((V)=>V!=="");if(X.length!==1)return null;let G=X[0],Y=G.indexOf("-");if(Y===-1)return null;let K=G.slice(0,Y),J=G.slice(Y+1);if(K===""){let V=u(J);if(V===null)return null;return{kind:"suffix",suffixLength:V}}let H=u(K);if(H===null)return null;if(J==="")return{kind:"offset",start:H,end:null};let W=u(J);if(W===null||W<H)return null;return{kind:"offset",start:H,end:W}}function r1(Q,Z){if(!Number.isFinite(Z)||Z<=0)return null;let $,X;if(Q.kind==="suffix"){if(Q.suffixLength<=0)return null;$=Math.max(0,Z-Q.suffixLength),X=Z-1}else{if(Q.start>=Z)return null;if($=Q.start,X=Q.end===null?Z-1:Math.min(Q.end,Z-1),X<$)return null}return{start:$,end:X,length:X-$+1}}function jZ(Q){if(Q.kind==="suffix")return`bytes=-${Q.suffixLength}`;return Q.end===null?`bytes=${Q.start}-`:`bytes=${Q.start}-${Q.end}`}function LZ(Q){if(!Q)return null;let Z=/^bytes\s+(\d+)-(\d+)\/(\d+)$/i.exec(Q.trim());if(!Z)return null;let $=u(Z[1]),X=u(Z[2]),G=u(Z[3]);if($===null||X===null||G===null||X<$)return null;return{start:$,end:X,total:G}}function CZ(Q,Z,$){return`bytes ${Q}-${Z}/${$}`}function e1(Q){return`bytes */${Q}`}class a extends F{errors={};constructor(Q){super("Validation error");this.name="ValidationError",this.errors=Q,this.payload={api:{status:400,data:{error:{kind:"validation_error",messages:Q,status:400}},headers:{"Content-Type":"application/json"}},view:{status:400}}}}function p0(Q){let[Z,$]=Q.match(/\d+|\D+/g)??[];if(!Z||!$)return 0;let X=Number.parseInt(Z);switch($){case"B":return X;case"KB":return X*1024;case"MB":return X*1024*1024;case"GB":return X*1024*1024*1024;case"TB":return X*1024*1024*1024*1024;default:return 0}}function u0(Q){switch(Q){case"image":return"image";case"png":return"image/png";case"jpg":return"image/jpeg";case"jpeg":return"image/jpeg";case"ttf":return"font/ttf";case"excel":return"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";case"csv":return"text/csv";case"word":return"application/vnd.openxmlformats-officedocument.wordprocessingml.document";case"pdf":return"application/pdf";case"json":return"application/json";default:return Q}}function Q0(Q){if(typeof Q==="string"||Array.isArray(Q))return Q.length;return}function S1(Q){return typeof Q==="number"&&!Number.isNaN(Q)}var d0=["required","string","boolean","number","email","password","min","max","gte","lte","file","fileType","fileSize","array","object","in"];class k extends Error{name="InvalidValidationRuleError"}function P1(Q,Z){let $=Z===void 0||Z.trim()===""?Number.NaN:Number(Z);if(Number.isNaN($))throw new k(`Validation rule "${Q}:${Z??""}" needs a number, e.g. "${Q}:3"`);return $}function Z0(Q){let Z=Q.indexOf(":"),$=Z===-1?Q:Q.slice(0,Z),X=Z===-1?void 0:Q.slice(Z+1);switch($){case"required":return(G)=>{if(G instanceof Blob)return G.size>0;if(G===null||G===void 0)return!1;if(typeof G==="string"||Array.isArray(G))return G.length>0;return!0};case"string":return(G)=>typeof G==="string";case"boolean":return(G)=>typeof G==="boolean";case"number":return(G)=>S1(G);case"password":return(G)=>{return typeof G==="string"&&/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).{8,}$/.test(G)};case"min":{let G=P1($,X);return(Y)=>{let K=Q0(Y);return K!==void 0&&K>=G}}case"max":{let G=P1($,X);return(Y)=>{let K=Q0(Y);return K!==void 0&&K<=G}}case"gte":{let G=P1($,X);return(Y)=>S1(Y)&&Y>=G}case"lte":{let G=P1($,X);return(Y)=>S1(Y)&&Y<=G}case"email":return(G)=>{return typeof G==="string"&&/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(G)};case"file":return(G)=>{return G instanceof Blob};case"fileType":{if(!X)throw new k('Validation rule "fileType" needs a type, e.g. "fileType:png" or "fileType:image"');let G=u0(X);return(Y)=>Y instanceof Blob&&Y.type.startsWith(G)}case"fileSize":{let G=p0(X??"");if(G===0&&!/^0+(B|KB|MB|GB|TB)$/.test(X??""))throw new k(`Validation rule "fileSize:${X??""}" needs a whole size in B, KB, MB, GB or TB, e.g. "fileSize:5MB"`);return(Y)=>Y instanceof Blob&&Y.size<=G}case"array":return(G)=>Array.isArray(G);case"object":return(G)=>typeof G==="object"&&G!==null&&!Array.isArray(G)&&!(G instanceof Blob);case"in":{let G=(X??"").split(",").filter((Y)=>Y!=="");if(G.length===0)throw new k('Validation rule "in" needs a comma-separated list, e.g. "in:draft,published"');return(Y)=>typeof Y==="string"&&G.includes(Y)}default:throw new k(`Unknown validation rule "${Q}". Known rules: ${d0.join(", ")}`)}}function d(Q){if(!Q.definition)throw Error(`gemi/ai: the recursive schema "${Q.name}" was used before its definition returned; \`self\` can be nested into the schema, but not parsed or emitted inside the callback`);return Q.definition}var L1=new WeakMap;function G0(Q){return typeof Q==="object"&&Q!==null&&L1.has(Q)}function U1(Q){let Z=L1.get(Q);if(!Z)throw Error("gemi/ai: expected a schema built with `s`, got a foreign object");return Z}function n0(Q){let Z={defs:{},cells:new Map},$=Q;if(Q.node.kind==="ref"){let G=d(Q.node.cell);$={...G,...Q.description?{description:Q.description}:{},optional:Q.optional,nullable:Q.nullable||G.nullable}}let X=e($,Z);return Object.keys(Z.defs).length>0?{...X,$defs:Z.defs}:X}function e(Q,Z){let $=(Q.optional||Q.nullable)&&Q.node.kind!=="json",X=o0(i0(Q.node,Z),$),G=[Q.description,l0(Q.node)].filter(Boolean).join(" ");if(G&&X.$ref!==void 0)X={anyOf:[X]};return G?{description:G,...X}:X}function l0(Q){let Z=[];if(Q.kind==="string"||Q.kind==="enum"){let $=Q.checks;if($?.format)Z.push(`Format: ${$.format.name}.`);if($?.minLength!==void 0)Z.push(`At least ${$.minLength} characters.`);if($?.maxLength!==void 0)Z.push(`At most ${$.maxLength} characters.`)}else if(Q.kind==="number"){let $=Q.checks;if($?.minimum!==void 0)Z.push(`Minimum ${$.minimum}.`);if($?.exclusiveMinimum!==void 0)Z.push(`Greater than ${$.exclusiveMinimum}.`);if($?.maximum!==void 0)Z.push(`Maximum ${$.maximum}.`);if($?.exclusiveMaximum!==void 0)Z.push(`Less than ${$.exclusiveMaximum}.`)}else if(Q.kind==="array"){let $=Q.checks;if($?.minItems!==void 0)Z.push(`At least ${$.minItems} items.`);if($?.maxItems!==void 0)Z.push(`At most ${$.maxItems} items.`)}return Z.join(" ")}function i0(Q,Z){switch(Q.kind){case"string":return{type:"string"};case"number":return{type:Q.checks?.integer?"integer":"number"};case"boolean":return{type:"boolean"};case"literal":return{type:typeof Q.value,const:Q.value};case"enum":return{type:"string",enum:Q.values};case"array":return{type:"array",items:e(Q.item,Z)};case"object":return{type:"object",properties:Object.fromEntries(Object.entries(Q.shape).map(([$,X])=>[$,e(X,Z)])),required:Object.keys(Q.shape),additionalProperties:!1};case"union":return{anyOf:Q.members.map(($)=>e($,Z))};case"json":return{};case"ref":{let{cell:$}=Q,X=Z.cells.get($.name);if(X&&X!==$)throw Error(`gemi/ai: two different recursive schemas are named "${$.name}" in one schema; give each s.recursive(...) its own name`);if(!X)Z.cells.set($.name,$),Z.defs[$.name]={},Z.defs[$.name]=e(d($),Z);return{$ref:`#/$defs/${$.name}`}}}}function o0(Q,Z){if(!Z)return Q;if(Q.anyOf)return{...Q,anyOf:[...Q.anyOf,{type:"null"}]};if(Q.enum||Q.const!==void 0)return{anyOf:[Q,{type:"null"}]};if(typeof Q.type==="string")return{...Q,type:[Q.type,"null"]};return{anyOf:[Q,{type:"null"}]}}function t0(Q){if(Q===null)return"null";if(Array.isArray(Q))return"array";return typeof Q}function s0(Q,Z){if(typeof Z==="number"&&!Number.isFinite(Z))return String(Z);if(Q.kind==="literal"||Q.kind==="enum"){if(typeof Z==="string"||typeof Z==="number"||typeof Z==="boolean")return JSON.stringify(Z)}return t0(Z)}function Y0(Q){let Z=Q.node,$=(()=>{switch(Z.kind){case"number":return Z.checks?.integer?"integer":"number";case"string":case"boolean":return Z.kind;case"literal":return JSON.stringify(Z.value);case"enum":return`one of ${Z.values.map((X)=>JSON.stringify(X)).join(" | ")}`;case"array":return"array";case"object":return"object";case"union":return"one of the variants";case"json":return"a JSON value";case"ref":return Y0({...d(Z.cell),optional:!1,nullable:!1})}})();return Q.optional||Q.nullable?`${$} or null`:$}function a0(Q){let Z="";for(let $ of Q)Z+=typeof $==="number"?`[${$}]`:Z?`.${$}`:$;return Z}function r0(Q){let Z=a0(Q);return Z?`${Z}: `:""}function E1(Q){return`${r0(Q.path)}${Q.message}`}function M1(Q,Z){if(Z===null||Z===void 0)return Q.optional||Q.nullable?1:0;let $=Q.node;switch($.kind){case"string":return typeof Z==="string"?1:0;case"number":return typeof Z==="number"?1:0;case"boolean":return typeof Z==="boolean"?1:0;case"literal":return Z===$.value?10:0;case"enum":return typeof Z==="string"&&$.values.includes(Z)?10:0;case"array":return Array.isArray(Z)?1:0;case"object":{if(typeof Z!=="object"||Array.isArray(Z))return 0;let X=Z,G=1;for(let[Y,K]of Object.entries($.shape))G+=M1(K,X[Y]);return G}case"union":return $.members.reduce((X,G)=>Math.max(X,M1(G,Z)),0);case"json":return 1;case"ref":return K0($.cell,Z,()=>1,()=>M1(d($.cell),Z))}}function K0(Q,Z,$,X){if(typeof Z!=="object"||Z===null)return X();if(Q.active.has(Z))return $();Q.active.add(Z);try{return X()}finally{Q.active.delete(Z)}}function h(Q,Z,$,X){if(Q.optional&&(Z===null||Z===void 0))return{drop:!0,value:void 0};if(Q.nullable&&Z===null)return{drop:!1,value:null};return{drop:!1,value:e0(Q,Z,$,X)}}function e0(Q,Z,$,X){let G=Q.node,Y=()=>{let K=Z===void 0?"required":G.kind==="literal"?"const":G.kind==="enum"&&typeof Z==="string"?"enum":"type",J=K==="const"?{allowedValue:G.value}:K==="enum"?{allowedValues:G.values}:{};X.push({path:$,code:K,message:`expected ${Y0(Q)}, got ${s0(G,Z)}`,params:J});return};switch(G.kind){case"string":if(typeof Z!=="string")return Y();return $0(G.checks,Z,$,X),Z;case"number":if(typeof Z!=="number"||!Number.isFinite(Z))return Y();if(G.checks?.integer&&!Number.isInteger(Z))return Y();return ZQ(G.checks,Z,$,X),Z;case"boolean":return typeof Z==="boolean"?Z:Y();case"literal":return Z===G.value?Z:Y();case"enum":if(typeof Z!=="string"||!G.values.includes(Z))return Y();return $0(G.checks,Z,$,X),Z;case"array":{if(!Array.isArray(Z))return Y();let K=Z.map((W,V)=>{let B=h(G.item,W,[...$,V],X);return B.drop?void 0:B.value}),{minItems:J,maxItems:H}=G.checks??{};if(J!==void 0&&Z.length<J)X.push({path:$,code:"minItems",message:`expected at least ${J} items, got ${Z.length}`,params:{limit:J}});if(H!==void 0&&Z.length>H)X.push({path:$,code:"maxItems",message:`expected at most ${H} items, got ${Z.length}`,params:{limit:H}});return K}case"object":{if(typeof Z!=="object"||Z===null||Array.isArray(Z))return Y();let K=Z,J={};for(let[H,W]of Object.entries(G.shape)){let V=h(W,K[H],[...$,H],X);if(!V.drop)J[H]=V.value}if(G.unknownKeys)for(let H of Object.keys(K)){if(Object.hasOwn(G.shape,H)||K[H]===void 0)continue;if(G.unknownKeys==="error"){X.push({path:[...$,H],code:"additionalProperties",message:"unknown key",params:{additionalProperty:H}});continue}$1(K[H],[...$,H],X,new Set),Object.defineProperty(J,H,{value:K[H],enumerable:!0,writable:!0,configurable:!0})}return J}case"union":{let K;for(let J of G.members){let H=[],W=h(J,Z,$,H);if(H.length===0)return W.drop?void 0:W.value;let V=M1(J,Z);if(!K||V>K.score)K={issues:H,score:V}}X.push({path:$,code:"anyOf",message:`no matching variant; closest: ${K.issues.map(E1).join("; ")}`,params:{closest:K.issues}});return}case"json":if(Z===void 0)return Y();return $1(Z,$,X,new Set),Z;case"ref":return K0(G.cell,Z,()=>{X.push({path:$,code:"type",message:"expected a finite tree, got a circular reference",params:{}});return},()=>h(d(G.cell),Z,$,X).value)}}function QQ(Q){let Z=0;for(let $ of Q)Z++;return Z}function $0(Q,Z,$,X){if(!Q)return;let{minLength:G,maxLength:Y,format:K}=Q;if(G!==void 0||Y!==void 0){let J=QQ(Z);if(G!==void 0&&J<G)X.push({path:$,code:"minLength",message:`expected at least ${G} characters, got ${J}`,params:{limit:G}});if(Y!==void 0&&J>Y)X.push({path:$,code:"maxLength",message:`expected at most ${Y} characters, got ${J}`,params:{limit:Y}})}if(K){let J=!1;try{J=K.test(Z)===!0}catch{}if(!J)X.push({path:$,code:"format",message:`expected a string in format "${K.name}"`,params:{format:K.name}})}}function ZQ(Q,Z,$,X){if(!Q)return;let G=(Y,K,J,H)=>{if(K===void 0||J(K))return;X.push({path:$,code:Y,message:`expected ${H} ${K}, got ${Z}`,params:{limit:K}})};G("minimum",Q.minimum,(Y)=>Z>=Y,"at least"),G("exclusiveMinimum",Q.exclusiveMinimum,(Y)=>Z>Y,"more than"),G("maximum",Q.maximum,(Y)=>Z<=Y,"at most"),G("exclusiveMaximum",Q.exclusiveMaximum,(Y)=>Z<Y,"less than")}function $1(Q,Z,$,X,G=!0){let Y=(J)=>{$.push({path:Z,code:"type",message:`expected a JSON value, got ${J}`,params:{}})};switch(typeof Q){case"undefined":case"string":case"boolean":return;case"number":if(!Number.isFinite(Q))Y(String(Q));return;case"bigint":return Y("a bigint");case"function":return Y("a function");case"symbol":return Y("a symbol")}if(Q===null)return;let K=Q;if(X.has(K))return Y("a circular reference");X.add(K);try{let J=G?K.toJSON:void 0;if(typeof J==="function"){let H;try{H=J.call(K)}catch{return Y("a toJSON that threw")}if(H===void 0)return Y("a toJSON that returns undefined");return $1(H,Z,$,X,!1)}if(Array.isArray(Q))Q.forEach((H,W)=>$1(H,[...Z,W],$,X));else for(let[H,W]of Object.entries(K))$1(W,[...Z,H],$,X)}finally{X.delete(K)}}function S(Q){return R1(Q)}function R1(Q){let Z={toJSONSchema:()=>n0(Q),parse($){let X=[],G=h(Q,$,[],X);if(X.length>0)throw Error(X.map(E1).join("; "));return G.drop?void 0:G.value},safeParse($){let X=[],G=h(Q,$,[],X);if(X.length>0)return{ok:!1,errors:X.map(E1)};return{ok:!0,value:G.drop?void 0:G.value}},validate($){let X=[],G=h(Q,$,[],X);if(X.length>0)return{ok:!1,issues:X};return{ok:!0,value:G.drop?void 0:G.value}},describe:($)=>R1({...Q,description:$}),optional:()=>R1({...Q,optional:!0}),nullable:()=>R1({...Q,nullable:!0,optional:!1})};return L1.set(Z,Q),Z}function x(Q){return{node:Q,optional:!1,nullable:!1}}var X0=["strip","error","passthrough"];class H0 extends Error{problems;constructor(Q){super(`gemi/ai: s.fromJSONSchema cannot model this schema:
2
+ import{bj as F,cj as _1,dj as O1}from"./chunk-xsx69765.js";import{ij as g1,lj as b}from"./chunk-rf9c6e49.js";import{ml as R0}from"./chunk-ccx7rt7y.js";import{ql as C1}from"./chunk-8pfy75y6.js";import{Jl as H1}from"./chunk-fryj3asn.js";import{Rl as aQ}from"./chunk-k1c0xd8r.js";class s1{static kind="controller";constructor(){}}class c0 extends s1{}function w1(Q){let Z=new Map;if(!Q)return Z;for(let $ of Q.split(";")){let X=$.indexOf("=");if(X===-1)continue;let G=$.slice(0,X).trim();if(!G)continue;Z.set(G,$.slice(X+1).trim())}return Z}function MZ(Q){return w1(Q.headers.get("cookie"))}function u(Q){if(!/^\d+$/.test(Q))return null;let Z=Number(Q);return Number.isSafeInteger(Z)?Z:null}function a1(Q){if(!Q)return null;let Z=Q.trim();if(!/^bytes=/i.test(Z))return null;let X=Z.slice(6).split(",").map((V)=>V.trim()).filter((V)=>V!=="");if(X.length!==1)return null;let G=X[0],Y=G.indexOf("-");if(Y===-1)return null;let K=G.slice(0,Y),J=G.slice(Y+1);if(K===""){let V=u(J);if(V===null)return null;return{kind:"suffix",suffixLength:V}}let H=u(K);if(H===null)return null;if(J==="")return{kind:"offset",start:H,end:null};let W=u(J);if(W===null||W<H)return null;return{kind:"offset",start:H,end:W}}function r1(Q,Z){if(!Number.isFinite(Z)||Z<=0)return null;let $,X;if(Q.kind==="suffix"){if(Q.suffixLength<=0)return null;$=Math.max(0,Z-Q.suffixLength),X=Z-1}else{if(Q.start>=Z)return null;if($=Q.start,X=Q.end===null?Z-1:Math.min(Q.end,Z-1),X<$)return null}return{start:$,end:X,length:X-$+1}}function jZ(Q){if(Q.kind==="suffix")return`bytes=-${Q.suffixLength}`;return Q.end===null?`bytes=${Q.start}-`:`bytes=${Q.start}-${Q.end}`}function LZ(Q){if(!Q)return null;let Z=/^bytes\s+(\d+)-(\d+)\/(\d+)$/i.exec(Q.trim());if(!Z)return null;let $=u(Z[1]),X=u(Z[2]),G=u(Z[3]);if($===null||X===null||G===null||X<$)return null;return{start:$,end:X,total:G}}function CZ(Q,Z,$){return`bytes ${Q}-${Z}/${$}`}function e1(Q){return`bytes */${Q}`}class a extends F{errors={};constructor(Q){super("Validation error");this.name="ValidationError",this.errors=Q,this.payload={api:{status:400,data:{error:{kind:"validation_error",messages:Q,status:400}},headers:{"Content-Type":"application/json"}},view:{status:400}}}}function p0(Q){let[Z,$]=Q.match(/\d+|\D+/g)??[];if(!Z||!$)return 0;let X=Number.parseInt(Z);switch($){case"B":return X;case"KB":return X*1024;case"MB":return X*1024*1024;case"GB":return X*1024*1024*1024;case"TB":return X*1024*1024*1024*1024;default:return 0}}function u0(Q){switch(Q){case"image":return"image";case"png":return"image/png";case"jpg":return"image/jpeg";case"jpeg":return"image/jpeg";case"ttf":return"font/ttf";case"excel":return"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";case"csv":return"text/csv";case"word":return"application/vnd.openxmlformats-officedocument.wordprocessingml.document";case"pdf":return"application/pdf";case"json":return"application/json";default:return Q}}function Q0(Q){if(typeof Q==="string"||Array.isArray(Q))return Q.length;return}function S1(Q){return typeof Q==="number"&&!Number.isNaN(Q)}var d0=["required","string","boolean","number","email","password","min","max","gte","lte","file","fileType","fileSize","array","object","in"];class k extends Error{name="InvalidValidationRuleError"}function P1(Q,Z){let $=Z===void 0||Z.trim()===""?Number.NaN:Number(Z);if(Number.isNaN($))throw new k(`Validation rule "${Q}:${Z??""}" needs a number, e.g. "${Q}:3"`);return $}function Z0(Q){let Z=Q.indexOf(":"),$=Z===-1?Q:Q.slice(0,Z),X=Z===-1?void 0:Q.slice(Z+1);switch($){case"required":return(G)=>{if(G instanceof Blob)return G.size>0;if(G===null||G===void 0)return!1;if(typeof G==="string"||Array.isArray(G))return G.length>0;return!0};case"string":return(G)=>typeof G==="string";case"boolean":return(G)=>typeof G==="boolean";case"number":return(G)=>S1(G);case"password":return(G)=>{return typeof G==="string"&&/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).{8,}$/.test(G)};case"min":{let G=P1($,X);return(Y)=>{let K=Q0(Y);return K!==void 0&&K>=G}}case"max":{let G=P1($,X);return(Y)=>{let K=Q0(Y);return K!==void 0&&K<=G}}case"gte":{let G=P1($,X);return(Y)=>S1(Y)&&Y>=G}case"lte":{let G=P1($,X);return(Y)=>S1(Y)&&Y<=G}case"email":return(G)=>{return typeof G==="string"&&/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(G)};case"file":return(G)=>{return G instanceof Blob};case"fileType":{if(!X)throw new k('Validation rule "fileType" needs a type, e.g. "fileType:png" or "fileType:image"');let G=u0(X);return(Y)=>Y instanceof Blob&&Y.type.startsWith(G)}case"fileSize":{let G=p0(X??"");if(G===0&&!/^0+(B|KB|MB|GB|TB)$/.test(X??""))throw new k(`Validation rule "fileSize:${X??""}" needs a whole size in B, KB, MB, GB or TB, e.g. "fileSize:5MB"`);return(Y)=>Y instanceof Blob&&Y.size<=G}case"array":return(G)=>Array.isArray(G);case"object":return(G)=>typeof G==="object"&&G!==null&&!Array.isArray(G)&&!(G instanceof Blob);case"in":{let G=(X??"").split(",").filter((Y)=>Y!=="");if(G.length===0)throw new k('Validation rule "in" needs a comma-separated list, e.g. "in:draft,published"');return(Y)=>typeof Y==="string"&&G.includes(Y)}default:throw new k(`Unknown validation rule "${Q}". Known rules: ${d0.join(", ")}`)}}function d(Q){if(!Q.definition)throw Error(`gemi/ai: the recursive schema "${Q.name}" was used before its definition returned; \`self\` can be nested into the schema, but not parsed or emitted inside the callback`);return Q.definition}var L1=new WeakMap;function G0(Q){return typeof Q==="object"&&Q!==null&&L1.has(Q)}function U1(Q){let Z=L1.get(Q);if(!Z)throw Error("gemi/ai: expected a schema built with `s`, got a foreign object");return Z}function n0(Q){let Z={defs:{},cells:new Map},$=Q;if(Q.node.kind==="ref"){let G=d(Q.node.cell);$={...G,...Q.description?{description:Q.description}:{},optional:Q.optional,nullable:Q.nullable||G.nullable}}let X=e($,Z);return Object.keys(Z.defs).length>0?{...X,$defs:Z.defs}:X}function e(Q,Z){let $=(Q.optional||Q.nullable)&&Q.node.kind!=="json",X=o0(i0(Q.node,Z),$),G=[Q.description,l0(Q.node)].filter(Boolean).join(" ");if(G&&X.$ref!==void 0)X={anyOf:[X]};return G?{description:G,...X}:X}function l0(Q){let Z=[];if(Q.kind==="string"||Q.kind==="enum"){let $=Q.checks;if($?.format)Z.push(`Format: ${$.format.name}.`);if($?.minLength!==void 0)Z.push(`At least ${$.minLength} characters.`);if($?.maxLength!==void 0)Z.push(`At most ${$.maxLength} characters.`)}else if(Q.kind==="number"){let $=Q.checks;if($?.minimum!==void 0)Z.push(`Minimum ${$.minimum}.`);if($?.exclusiveMinimum!==void 0)Z.push(`Greater than ${$.exclusiveMinimum}.`);if($?.maximum!==void 0)Z.push(`Maximum ${$.maximum}.`);if($?.exclusiveMaximum!==void 0)Z.push(`Less than ${$.exclusiveMaximum}.`)}else if(Q.kind==="array"){let $=Q.checks;if($?.minItems!==void 0)Z.push(`At least ${$.minItems} items.`);if($?.maxItems!==void 0)Z.push(`At most ${$.maxItems} items.`)}return Z.join(" ")}function i0(Q,Z){switch(Q.kind){case"string":return{type:"string"};case"number":return{type:Q.checks?.integer?"integer":"number"};case"boolean":return{type:"boolean"};case"literal":return{type:typeof Q.value,const:Q.value};case"enum":return{type:"string",enum:Q.values};case"array":return{type:"array",items:e(Q.item,Z)};case"object":return{type:"object",properties:Object.fromEntries(Object.entries(Q.shape).map(([$,X])=>[$,e(X,Z)])),required:Object.keys(Q.shape),additionalProperties:!1};case"union":return{anyOf:Q.members.map(($)=>e($,Z))};case"json":return{};case"ref":{let{cell:$}=Q,X=Z.cells.get($.name);if(X&&X!==$)throw Error(`gemi/ai: two different recursive schemas are named "${$.name}" in one schema; give each s.recursive(...) its own name`);if(!X)Z.cells.set($.name,$),Z.defs[$.name]={},Z.defs[$.name]=e(d($),Z);return{$ref:`#/$defs/${$.name}`}}}}function o0(Q,Z){if(!Z)return Q;if(Q.anyOf)return{...Q,anyOf:[...Q.anyOf,{type:"null"}]};if(Q.enum||Q.const!==void 0)return{anyOf:[Q,{type:"null"}]};if(typeof Q.type==="string")return{...Q,type:[Q.type,"null"]};return{anyOf:[Q,{type:"null"}]}}function t0(Q){if(Q===null)return"null";if(Array.isArray(Q))return"array";return typeof Q}function s0(Q,Z){if(typeof Z==="number"&&!Number.isFinite(Z))return String(Z);if(Q.kind==="literal"||Q.kind==="enum"){if(typeof Z==="string"||typeof Z==="number"||typeof Z==="boolean")return JSON.stringify(Z)}return t0(Z)}function Y0(Q){let Z=Q.node,$=(()=>{switch(Z.kind){case"number":return Z.checks?.integer?"integer":"number";case"string":case"boolean":return Z.kind;case"literal":return JSON.stringify(Z.value);case"enum":return`one of ${Z.values.map((X)=>JSON.stringify(X)).join(" | ")}`;case"array":return"array";case"object":return"object";case"union":return"one of the variants";case"json":return"a JSON value";case"ref":return Y0({...d(Z.cell),optional:!1,nullable:!1})}})();return Q.optional||Q.nullable?`${$} or null`:$}function a0(Q){let Z="";for(let $ of Q)Z+=typeof $==="number"?`[${$}]`:Z?`.${$}`:$;return Z}function r0(Q){let Z=a0(Q);return Z?`${Z}: `:""}function E1(Q){return`${r0(Q.path)}${Q.message}`}function M1(Q,Z){if(Z===null||Z===void 0)return Q.optional||Q.nullable?1:0;let $=Q.node;switch($.kind){case"string":return typeof Z==="string"?1:0;case"number":return typeof Z==="number"?1:0;case"boolean":return typeof Z==="boolean"?1:0;case"literal":return Z===$.value?10:0;case"enum":return typeof Z==="string"&&$.values.includes(Z)?10:0;case"array":return Array.isArray(Z)?1:0;case"object":{if(typeof Z!=="object"||Array.isArray(Z))return 0;let X=Z,G=1;for(let[Y,K]of Object.entries($.shape))G+=M1(K,X[Y]);return G}case"union":return $.members.reduce((X,G)=>Math.max(X,M1(G,Z)),0);case"json":return 1;case"ref":return K0($.cell,Z,()=>1,()=>M1(d($.cell),Z))}}function K0(Q,Z,$,X){if(typeof Z!=="object"||Z===null)return X();if(Q.active.has(Z))return $();Q.active.add(Z);try{return X()}finally{Q.active.delete(Z)}}function h(Q,Z,$,X){if(Q.optional&&(Z===null||Z===void 0))return{drop:!0,value:void 0};if(Q.nullable&&Z===null)return{drop:!1,value:null};return{drop:!1,value:e0(Q,Z,$,X)}}function e0(Q,Z,$,X){let G=Q.node,Y=()=>{let K=Z===void 0?"required":G.kind==="literal"?"const":G.kind==="enum"&&typeof Z==="string"?"enum":"type",J=K==="const"?{allowedValue:G.value}:K==="enum"?{allowedValues:G.values}:{};X.push({path:$,code:K,message:`expected ${Y0(Q)}, got ${s0(G,Z)}`,params:J});return};switch(G.kind){case"string":if(typeof Z!=="string")return Y();return $0(G.checks,Z,$,X),Z;case"number":if(typeof Z!=="number"||!Number.isFinite(Z))return Y();if(G.checks?.integer&&!Number.isInteger(Z))return Y();return ZQ(G.checks,Z,$,X),Z;case"boolean":return typeof Z==="boolean"?Z:Y();case"literal":return Z===G.value?Z:Y();case"enum":if(typeof Z!=="string"||!G.values.includes(Z))return Y();return $0(G.checks,Z,$,X),Z;case"array":{if(!Array.isArray(Z))return Y();let K=Z.map((W,V)=>{let B=h(G.item,W,[...$,V],X);return B.drop?void 0:B.value}),{minItems:J,maxItems:H}=G.checks??{};if(J!==void 0&&Z.length<J)X.push({path:$,code:"minItems",message:`expected at least ${J} items, got ${Z.length}`,params:{limit:J}});if(H!==void 0&&Z.length>H)X.push({path:$,code:"maxItems",message:`expected at most ${H} items, got ${Z.length}`,params:{limit:H}});return K}case"object":{if(typeof Z!=="object"||Z===null||Array.isArray(Z))return Y();let K=Z,J={};for(let[H,W]of Object.entries(G.shape)){let V=h(W,K[H],[...$,H],X);if(!V.drop)J[H]=V.value}if(G.unknownKeys)for(let H of Object.keys(K)){if(Object.hasOwn(G.shape,H)||K[H]===void 0)continue;if(G.unknownKeys==="error"){X.push({path:[...$,H],code:"additionalProperties",message:"unknown key",params:{additionalProperty:H}});continue}$1(K[H],[...$,H],X,new Set),Object.defineProperty(J,H,{value:K[H],enumerable:!0,writable:!0,configurable:!0})}return J}case"union":{let K;for(let J of G.members){let H=[],W=h(J,Z,$,H);if(H.length===0)return W.drop?void 0:W.value;let V=M1(J,Z);if(!K||V>K.score)K={issues:H,score:V}}X.push({path:$,code:"anyOf",message:`no matching variant; closest: ${K.issues.map(E1).join("; ")}`,params:{closest:K.issues}});return}case"json":if(Z===void 0)return Y();return $1(Z,$,X,new Set),Z;case"ref":return K0(G.cell,Z,()=>{X.push({path:$,code:"type",message:"expected a finite tree, got a circular reference",params:{}});return},()=>h(d(G.cell),Z,$,X).value)}}function QQ(Q){let Z=0;for(let $ of Q)Z++;return Z}function $0(Q,Z,$,X){if(!Q)return;let{minLength:G,maxLength:Y,format:K}=Q;if(G!==void 0||Y!==void 0){let J=QQ(Z);if(G!==void 0&&J<G)X.push({path:$,code:"minLength",message:`expected at least ${G} characters, got ${J}`,params:{limit:G}});if(Y!==void 0&&J>Y)X.push({path:$,code:"maxLength",message:`expected at most ${Y} characters, got ${J}`,params:{limit:Y}})}if(K){let J=!1;try{J=K.test(Z)===!0}catch{}if(!J)X.push({path:$,code:"format",message:`expected a string in format "${K.name}"`,params:{format:K.name}})}}function ZQ(Q,Z,$,X){if(!Q)return;let G=(Y,K,J,H)=>{if(K===void 0||J(K))return;X.push({path:$,code:Y,message:`expected ${H} ${K}, got ${Z}`,params:{limit:K}})};G("minimum",Q.minimum,(Y)=>Z>=Y,"at least"),G("exclusiveMinimum",Q.exclusiveMinimum,(Y)=>Z>Y,"more than"),G("maximum",Q.maximum,(Y)=>Z<=Y,"at most"),G("exclusiveMaximum",Q.exclusiveMaximum,(Y)=>Z<Y,"less than")}function $1(Q,Z,$,X,G=!0){let Y=(J)=>{$.push({path:Z,code:"type",message:`expected a JSON value, got ${J}`,params:{}})};switch(typeof Q){case"undefined":case"string":case"boolean":return;case"number":if(!Number.isFinite(Q))Y(String(Q));return;case"bigint":return Y("a bigint");case"function":return Y("a function");case"symbol":return Y("a symbol")}if(Q===null)return;let K=Q;if(X.has(K))return Y("a circular reference");X.add(K);try{let J=G?K.toJSON:void 0;if(typeof J==="function"){let H;try{H=J.call(K)}catch{return Y("a toJSON that threw")}if(H===void 0)return Y("a toJSON that returns undefined");return $1(H,Z,$,X,!1)}if(Array.isArray(Q))Q.forEach((H,W)=>$1(H,[...Z,W],$,X));else for(let[H,W]of Object.entries(K))$1(W,[...Z,H],$,X)}finally{X.delete(K)}}function S(Q){return R1(Q)}function R1(Q){let Z={toJSONSchema:()=>n0(Q),parse($){let X=[],G=h(Q,$,[],X);if(X.length>0)throw Error(X.map(E1).join("; "));return G.drop?void 0:G.value},safeParse($){let X=[],G=h(Q,$,[],X);if(X.length>0)return{ok:!1,errors:X.map(E1)};return{ok:!0,value:G.drop?void 0:G.value}},validate($){let X=[],G=h(Q,$,[],X);if(X.length>0)return{ok:!1,issues:X};return{ok:!0,value:G.drop?void 0:G.value}},describe:($)=>R1({...Q,description:$}),optional:()=>R1({...Q,optional:!0}),nullable:()=>R1({...Q,nullable:!0,optional:!1})};return L1.set(Z,Q),Z}function x(Q){return{node:Q,optional:!1,nullable:!1}}var X0=["strip","error","passthrough"];class H0 extends Error{problems;constructor(Q){super(`gemi/ai: s.fromJSONSchema cannot model this schema:
3
3
  ${Q.map((Z)=>`- ${Z}`).join(`
4
4
  `)}`);this.name="JSONSchemaError",this.problems=Q}}var $Q=new Set(["title","$schema","$id","$comment","examples","default","deprecated","readOnly","writeOnly"]),r={string:["minLength","maxLength","format"],number:["minimum","maximum","exclusiveMinimum","exclusiveMaximum"],integer:["minimum","maximum","exclusiveMinimum","exclusiveMaximum"],boolean:[],object:["properties","required","additionalProperties"],array:["items","minItems","maxItems"]};function D1(Q){return typeof Q==="object"&&Q!==null&&!Array.isArray(Q)}function j1(Q,Z,$,X){let G=(z,U=$)=>{X.push(U?`${U}: ${z}`:z);return},Y=(z)=>$?`${$}.${z}`:z;if(!D1(Q))return G("expected a schema object");let K=new Set(Z.ignoreKeywords??[]),J=(z)=>$Q.has(z)||z.startsWith("x-")||K.has(z),H=!1,W=Q.type;if(Array.isArray(W)){let z=W.filter((U)=>U!=="null");if(z.length!==1)return G(`type ${JSON.stringify(W)} is not supported; only one type, optionally with "null". Use anyOf for alternatives`,Y("type"));H=z.length<W.length,W=z[0]}if(W!==void 0&&(typeof W!=="string"||!(W in r)))return G(`type ${JSON.stringify(W)} is not supported; expected one of ${Object.keys(r).join(", ")}`,Y("type"));let V=new Set(["type","description","enum","const","anyOf",...W?r[W]:[]]),B=!1;for(let z of Object.keys(Q)){if(V.has(z)||J(z))continue;B=!0;let U=Object.entries(r).find(([,P])=>P.includes(z));G(U&&U[0]!==W?`"${z}" applies to type ${U[0]}, and this schema is ${W?`type ${W}`:"untyped"}`:`"${z}" is not supported by s.fromJSONSchema`,Y(z))}if(B)return;if(Q.description!==void 0&&typeof Q.description!=="string")return G("expected a string",Y("description"));let L=Q.description,D=(z)=>({node:z,optional:!1,nullable:H,...L?{description:L}:{}});if(Q.anyOf!==void 0){if(W!==void 0||Q.enum!==void 0||Q.const!==void 0)return G("anyOf cannot be combined with type, enum or const here",Y("anyOf"));if(!Array.isArray(Q.anyOf)||Q.anyOf.length===0)return G("expected a non-empty array",Y("anyOf"));let z=[],U=!1;if(Q.anyOf.forEach((P,R)=>{if(D1(P)&&P.type==="null"&&Object.keys(P).length===1){H=!0;return}let A=j1(P,Z,Y(`anyOf[${R}]`),X);if(A)z.push(A);else U=!0}),U)return;if(z.length===0)return G("anyOf has only null in it",Y("anyOf"));if(z.length===1){let P=z[0];return{...P,nullable:P.nullable||H,...L?{description:L}:{}}}return D({kind:"union",members:z})}if(Q.const!==void 0){let z=Q.const;if(typeof z!=="string"&&typeof z!=="number"&&typeof z!=="boolean")return G("only a string, number or boolean const is supported",Y("const"));if(W!==void 0&&typeof z!==(W==="integer"?"number":W))return G(`const ${JSON.stringify(z)} is not of type ${W}`,Y("const"));return D({kind:"literal",value:z})}let M;if(W==="string"){if(M=XQ(Q,Z,Y,X),M===null)return}if(Q.enum!==void 0){if(!Array.isArray(Q.enum)||Q.enum.length===0)return G("expected a non-empty array",Y("enum"));let z=Q.enum.filter((R)=>R!==null);if(z.length<Q.enum.length)H=!0;let U=z.find((R)=>!(typeof R==="string"||typeof R==="number"||typeof R==="boolean")||W!==void 0&&typeof R!==(W==="integer"?"number":W));if(U!==void 0||z.length===0)return G(W?`every value must be of type ${W}${z.length===0?", and there must be one":`; ${JSON.stringify(U)} is not`}`:"only strings, numbers and booleans are supported",Y("enum"));if(z.every((R)=>typeof R==="string"))return D({kind:"enum",values:[...new Set(z)],...M?{checks:M}:{}});let P=[...new Set(z)];if(P.length===1)return D({kind:"literal",value:P[0]});return D({kind:"union",members:P.map((R)=>x({kind:"literal",value:R}))})}switch(W){case void 0:return G("a schema needs a type, an enum, a const or an anyOf");case"string":return D({kind:"string",...M?{checks:M}:{}});case"number":case"integer":{let z=W==="integer"?{integer:!0}:{},U=!1;for(let P of r.number){let R=Q[P];if(R===void 0)continue;if(typeof R!=="number"||!Number.isFinite(R)){G("expected a number",Y(P)),U=!0;continue}z[P]=R}if(U)return;return D({kind:"number",...Object.keys(z).length>0?{checks:z}:{}})}case"boolean":return D({kind:"boolean"});case"array":{if(!D1(Q.items))return G('an array needs "items" to be one schema (tuples are not supported)',Y("items"));let z={},U=!1;for(let R of["minItems","maxItems"]){let A=Q[R];if(A===void 0)continue;if(typeof A!=="number"||!Number.isInteger(A)||A<0){G("expected a non-negative integer",Y(R)),U=!0;continue}z[R]=A}let P=j1(Q.items,Z,Y("items"),X);if(!P||U)return;return D({kind:"array",item:P,...Object.keys(z).length>0?{checks:z}:{}})}case"object":{let z=Q.properties??{};if(!D1(z))return G("expected an object",Y("properties"));if(Q.additionalProperties!==void 0&&Q.additionalProperties!==!1)return G("only false is supported; a record with arbitrary keys has no strict-mode form (use s.json())",Y("additionalProperties"));let U=Q.required??[];if(!Array.isArray(U)||!U.every((q)=>typeof q==="string"))return G("expected an array of property names",Y("required"));let P=U.filter((q)=>!Object.hasOwn(z,q));if(P.length>0)return G(`lists properties the schema doesn't have: ${P.join(", ")}`,Y("required"));let R={},A=!1;for(let[q,O]of Object.entries(z)){let C=j1(O,Z,Y(`properties.${q}`),X);if(!C){A=!0;continue}R[q]=U.includes(q)?C:{...C,optional:!0}}if(A)return;let I=Z.unknownKeys;return D({kind:"object",shape:R,...I==="error"||I==="passthrough"?{unknownKeys:I}:{}})}}return}function XQ(Q,Z,$,X){let G={},Y=!1;for(let K of["minLength","maxLength"]){let J=Q[K];if(J===void 0)continue;if(typeof J!=="number"||!Number.isInteger(J)||J<0){X.push(`${$(K)}: expected a non-negative integer`),Y=!0;continue}G[K]=J}if(Q.format!==void 0){let K=Q.format,J=typeof K==="string"?Z.formats?.[K]:void 0;if(typeof K!=="string")X.push(`${$("format")}: expected a string`),Y=!0;else if(!J||!Object.hasOwn(Z.formats,K))X.push(`${$("format")}: unknown format ${JSON.stringify(K)}; pass a check for it in the formats option`),Y=!0;else G.format={name:K,test:GQ(J)}}if(Y)return null;return Object.keys(G).length>0?G:void 0}function GQ(Q){if(Q===!0)return()=>!0;if(Q instanceof RegExp)return(Z)=>{return Q.lastIndex=0,Q.test(Z)};return Q}var qZ={string:()=>S(x({kind:"string"})),number:()=>S(x({kind:"number"})),boolean:()=>S(x({kind:"boolean"})),literal:(Q)=>S(x({kind:"literal",value:Q})),enum:(Q)=>S(x({kind:"enum",values:Q})),object:(Q)=>S(x({kind:"object",shape:Object.fromEntries(Object.entries(Q).map(([Z,$])=>[Z,U1($)]))})),array:(Q)=>S(x({kind:"array",item:U1(Q)})),union:(Q)=>S(x({kind:"union",members:Q.map(U1)})),json:()=>S(x({kind:"json"})),recursive:KQ,fromJSONSchema:(Q,Z={})=>{let $=[];if(Z.unknownKeys!==void 0&&!X0.includes(Z.unknownKeys))throw Error(`gemi/ai: s.fromJSONSchema's unknownKeys option must be one of ${X0.map((G)=>JSON.stringify(G)).join(", ")}, got ${JSON.stringify(Z.unknownKeys)}`);let X=j1(Q,Z,"",$);if(!X||$.length>0)throw new H0($.length>0?$:["unreadable schema"]);return S(X)}};function NZ(Q){let Z=L1.get(Q);if(Z)return Z1(Z.node);return Q1(Q.toJSONSchema())}function Q1(Q){if(!(Q.$ref!==void 0||Q.type!==void 0||Q.enum!==void 0||Q.const!==void 0||Q.anyOf!==void 0||Q.properties!==void 0||Q.items!==void 0))return!1;for(let $ of Object.values(Q.properties??{}))if(!Q1($))return!1;if(Q.items&&!Q1(Q.items))return!1;for(let $ of Q.anyOf??[])if(!Q1($))return!1;for(let $ of Object.values(Q.$defs??{}))if(!Q1($))return!1;return!0}function Z1(Q,Z=new Set){switch(Q.kind){case"string":case"number":case"boolean":case"literal":case"enum":return!0;case"object":return Object.values(Q.shape).every(($)=>Z1($.node,Z));case"array":return Z1(Q.item.node,Z);case"union":return Q.members.every(($)=>Z1($.node,Z));case"json":return!1;case"ref":if(Z.has(Q.cell))return!0;return Z.add(Q.cell),Z1(d(Q.cell).node,Z)}}function x1(Q,Z,$=new Set){let X=Q.node;if(X.kind==="union")return X.members.some((G)=>x1(G,Z,$));if(X.kind!=="ref")return!1;if(X.cell===Z)return!0;if($.has(X.cell)||!X.cell.definition)return!1;return $.add(X.cell),x1(X.cell.definition,Z,$)}var YQ=/^[A-Za-z_][A-Za-z0-9_-]{0,63}$/;function KQ(Q,Z){if(typeof Q!=="string"||!YQ.test(Q))throw Error(`gemi/ai: s.recursive needs a name of letters, digits, "_" and "-" (starting with a letter or "_", at most 64), got ${JSON.stringify(Q)}`);let $={name:Q,active:new Set},X=()=>x({kind:"ref",cell:$}),G=U1(Z(S(X())));if(G.optional)throw Error(`gemi/ai: the recursive schema "${Q}" is optional() as a whole; mark the places that use it optional instead`);if(x1(G,$))throw Error(`gemi/ai: the recursive schema "${Q}" refers to itself outside any object or array, so it describes no finite value; nest \`self\` in an s.object(...) field or an s.array(...)`);return $.definition=G,S(X())}function J0(Q){if(typeof Q!=="string")return null;let[Z]=Q.split(";",1),$=Z.trim().toLowerCase();return $===""?null:$}function W0(Q){if(Q===null)return!1;if(Q==="application/json")return!0;let Z=Q.indexOf("/");return Z>0&&Q.endsWith("+json")&&Q.length>Z+1+5}var X1=new WeakMap;function wZ(Q,Z,$,X){X1.set(Q,{clientAddress:Z,...$?{grant:Object.freeze({...$,scopes:Object.freeze([...$.scopes])})}:{},...X?{progress:X}:{}})}function z0(Q){return X1.get(Q)?.progress}function V0(Q){return X1.get(Q)?.grant}function B0(Q){return X1.has(Q)}function SZ(Q){return X1.get(Q)?.clientAddress}var P0=new WeakMap;function xZ(Q,Z){P0.set(Q,Z)}function D0(Q){return P0.get(Q)??null}var k1=new WeakMap;function kZ(Q,Z){let $=k1.get(Q)??[];if(!$.includes(Z))k1.set(Q,[...$,Z])}function gZ(Q){return k1.get(Q)??[]}class n{data;constructor(Q){this.data=Q}get(Q){return this.data[Q]}has(Q){return this.data[Q]!==void 0}toJSON(){return this.data}}function U0(Q){return typeof Q==="object"&&Q!==null&&!(Q instanceof Blob)}function HQ(Q,Z){if(!Z.includes(".")||Object.hasOwn(Q,Z))return[{path:[Z],value:Q[Z]}];let $=[{path:[],value:Q}];for(let X of Z.split(".")){let G=[];for(let{path:Y,value:K}of $){if(X==="*"){if(Array.isArray(K))K.forEach((J,H)=>G.push({path:[...Y,H],value:J}));else if(U0(K))for(let[J,H]of Object.entries(K))G.push({path:[...Y,J],value:H});continue}if(Array.isArray(K)&&/^\d+$/.test(X)){G.push({path:[...Y,Number(X)],value:K[Number(X)]});continue}G.push({path:[...Y,X],value:U0(K)&&Object.hasOwn(K,X)?K[X]:void 0})}$=G}return $}function M0(Q){return Q.join(".")}class JQ{kind;rawRequest;headers;cookies;search;schema={};routePath;params;domain;state;constructor(Q,Z,$,X){if(!Q){let H=b.getStore().req;this.params=H.params,this.rawRequest=H.rawRequest,this.kind=H.kind,this.routePath=H.routePath,this.domain=H.domain??null,this.state=H.state??new g1}else this.params=Z,this.rawRequest=Q,this.routePath=X,this.kind=$??"api",this.domain=D0(Q),this.state=new g1;this.headers=this.rawRequest.headers;let G=w1(this.rawRequest.headers.get("Cookie")),Y=new URL(this.rawRequest.url),K=new Map;for(let[H,W]of Y.searchParams)if(K.has(H)){let V=K.get(H);if(Array.isArray(V))V.push(W),K.set(H,V);else K.set(H,[V,W])}else K.set(H,W);let J=Object.fromEntries(K.entries());this.search=new n(J),this.cookies=G}locale(){let Q=b.getStore();if(Q.locale)return Q.locale;let Z=C1(R0);return Z.isLocaleAware?Z.detectLocale(Q.req):Q.locale}ctx(){return b.getStore()}isModelOriginated(){return B0(this.rawRequest)}mcpGrant(){return V0(this.rawRequest)??null}reportProgress(Q){let Z=z0(this.rawRequest);if(!Z)return!1;return Z(Q),!0}get signal(){return this.rawRequest.signal}range(){return a1(this.rawRequest.headers.get("Range"))}refine(Q){return{}}async parseBody(){let Q=J0(this.rawRequest.headers.get("Content-Type"));if(W0(Q))return new n(await this.parseJsonBody());if(Q==="application/x-www-form-urlencoded"||Q==="multipart/form-data"){let Z;try{Z=await this.rawRequest.formData()}catch(X){if(X instanceof F)throw X;throw new F("The request body could not be read as a form.")}let $=new Map;for(let[X,G]of Z.entries())if($.has(X)){let Y=$.get(X);if(Array.isArray(Y))Y.push(G);else $.set(X,[Y,G])}else $.set(X,G);return new n(Object.fromEntries($.entries()))}return new n({})}async parseJsonBody(){if(!this.rawRequest.body)return{};let Q;try{Q=await this.rawRequest.text()}catch($){if($ instanceof F)throw $;throw new F("The request body could not be read.")}if(Q.trim()==="")return{};let Z;try{Z=JSON.parse(Q)}catch{throw new F("The request body is not valid JSON.")}if(Z===null||typeof Z!=="object")throw new F("The request body must be a JSON object.");return Z}validateInput(Q){if(G0(this.schema))return this.validateWithSchema(Q);let Z=Q.toJSON()??{},$={},X=Object.entries(this.schema).map(([G,Y])=>({key:G,rules:Object.entries(Y).map(([K,J])=>({rule:K,message:J,check:typeof J==="function"?null:this.ruleFor(G,K)}))}));for(let{key:G,rules:Y}of X)for(let{path:K,value:J}of HQ(Z,G)){let H=this.checkField(J,Y);if(H.length>0){let W=$[M0(K)]??=[];for(let V of H)if(!W.includes(V))W.push(V)}}if(this.addRefinements($,Z),Object.keys($).length>0)throw new a($);return Q}checkField(Q,Z){let $=Z.some(({rule:Y})=>Y==="required"),X=Q===void 0||Q===null||Q==="",G=[];for(let{rule:Y,message:K,check:J}of Z){let H=K,W=!1;if(typeof K==="function")H=K(Q),W=typeof H>"u";else W=J(Q);if(W)continue;if(X&&!$)continue;if(Y==="required")return[String(H)];if(!G.includes(String(H)))G.push(String(H))}return G}validateWithSchema(Q){let Z=this.schema.validate(Q.toJSON()),$={};if("issues"in Z)for(let G of Z.issues){let Y=M0(G.path),K=$[Y]??=[];if(!K.includes(G.message))K.push(G.message)}let X="value"in Z?new n(Z.value):Q;if(this.addRefinements($,X.toJSON()),Object.keys($).length>0)throw new a($);return X}addRefinements(Q,Z){for(let[$,X]of Object.entries(this.refine(Z)??{})){let G=Q[$]??[];Q[$]=G.includes(X)?G:[...G,X]}}ruleFor(Q,Z){try{return Z0(Z)}catch($){if($ instanceof k)throw new k(`${this.constructor.name}.schema.${Q}: ${$.message}`);throw $}}async input(){return this.validateInput(await this.parseBody())}async safeInput(){let Q=await this.parseBody();try{return{isValid:!0,errors:{},input:this.validateInput(Q)}}catch(Z){if(!(Z instanceof a))throw Z;return{isValid:!1,errors:Z.errors,input:Q}}}}var j0="x-gemi-sign-in";class WQ extends F{error;constructor(Q="Not authorized"){super(Q);this.name="AuthorizationError",this.error=Q,this.payload={api:{status:401,data:{error:O1("authorization",this.error,401)}},view:{}}}}class y1 extends F{static apiStatus=403;error;constructor(Q="Insufficient permissions"){super(Q);this.name="InsufficientPermissionsError",this.error=Q,this.payload={api:{status:y1.apiStatus,data:{error:O1("permission",this.error,y1.apiStatus)}},view:{status:403}}}}class b1 extends F{total;constructor(Q){super("Range not satisfiable");this.total=Q;this.name="RangeNotSatisfiableError",this.payload={api:{status:416,data:{error:_1("range_not_satisfiable","Range not satisfiable",416)},headers:{"Content-Range":e1(Q),"Accept-Ranges":"bytes","Cache-Control":"no-store"}},view:{}}}}class zQ extends F{constructor(Q="Not found"){super(Q);this.name="NotFoundError",this.payload={api:{status:404,data:{error:_1("not_found",Q,404)},headers:{"Cache-Control":"no-store"}},view:{status:404}}}}class m extends F{fileName;constructor(Q){super("File not found");this.fileName=Q;this.name="FileNotFoundError",this.payload={api:{status:404,data:{error:_1("not_found","Not found",404)},headers:{"Cache-Control":"no-store"}},view:{status:404}}}}class VQ extends F{constructor(Q={}){super("Authentication error");this.name="AuthenticationError";let Z=Q.redirectTo??"/auth/sign-in";this.payload={api:{status:401,data:{error:O1("authentication","Authentication error",401)},headers:{[j0]:Z}},viewData:{status:200,data:{},headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate"},directive:{kind:"Redirect",path:Z}},view:{status:302,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:Z}}}}}class G1{static getFacadeAccessor(){throw Error(`Facade [${this.name}] does not implement getFacadeAccessor().`)}static getFacadeRoot(){return C1(this.getFacadeAccessor())}}import{Buffer as BQ}from"buffer";function A1(Q){if(typeof Q!=="string"||/^[\s/.]*$/.test(Q))throw Error(`Refusing to delete by prefix ${JSON.stringify(Q)}: it would match the whole store`)}class Y1{async putStream({body:Q,...Z},$={}){$.signal?.throwIfAborted();let X=[],G=Q.getReader();try{for(;;){$.signal?.throwIfAborted();let{done:Y,value:K}=await G.read();if(Y)break;X.push(K)}}catch(Y){throw await G.cancel(Y).catch(()=>{}),Y}return this.put({...Z,body:BQ.concat(X)},$)}async*objects(Q,Z={}){throw Error(`${this.constructor.name} does not implement objects(). Override it to list objects in this backend.`)}async deletePrefix(Q,Z={}){A1(Q);let $=[];for await(let X of this.objects(Q,Z))$.push(X.name);for(let X of $)Z.signal?.throwIfAborted(),await this.delete({name:X,bucket:Z.bucket});return $.length}async delete(Q){throw Error(`${this.constructor.name} does not implement delete(). Override it to remove objects from this backend.`)}async read(Q){let Z=typeof Q==="string"?{name:Q}:Q,$=await this.fetch({name:Z.name,bucket:Z.bucket});if(!$.ok)throw new m(Z.name);let X=$.headers.get("Content-Type")??"application/octet-stream",G=$.headers.get("ETag")??void 0,Y=$.headers.get("Last-Modified"),K=Y?new Date(Y):void 0;if(Z.range){let W=await $.blob();return{body:W,start:0,end:W.size-1,total:W.size,partial:!1,type:X,etag:G,lastModified:K,name:Z.name}}let J=Number($.headers.get("Content-Length")),H=Number.isFinite(J)?J:0;return{body:$.body,start:0,end:H-1,total:H,partial:!1,type:X,etag:G,lastModified:K,name:Z.name}}async size(Q){let Z=typeof Q==="string"?Q:Q.name,$=typeof Q==="string"?void 0:Q.bucket,X=await this.fetch({name:Z,bucket:$});if(!X.ok)throw new m(Z);let G=Number(X.headers.get("Content-Length"));if(Number.isFinite(G))return await X.body?.cancel(),G;return(await X.blob()).size}}function L0(Q,Z){if(!Z)return Q;let $=Q.getReader(),X=!1,G,Y=()=>{if(X=!0,G)Z.removeEventListener("abort",G)};return new ReadableStream({start(K){if(G=()=>{if(X)return;Y(),K.error(Z.reason),$.cancel(Z.reason).catch(()=>{})},Z.aborted)G();else Z.addEventListener("abort",G,{once:!0})},async pull(K){let J;try{J=await $.read()}catch(H){if(X)return;Y(),K.error(H);return}if(X)return;if(J.done){Y(),K.close();return}K.enqueue(J.value)},cancel(K){return Y(),$.cancel(K)}},{highWaterMark:0})}import{mkdir as PQ,open as DQ,readdir as f1,rename as UQ,rmdir as MQ,stat as RQ,unlink as C0}from"fs/promises";import{dirname as jQ,isAbsolute as v1,relative as K1,resolve as l,sep as f}from"path";class h1 extends Y1{configured;constructor(Q){super();this.configured=Q}get folderPath(){return this.configured??`${H1()}/storage`}async put(Q,{signal:Z}={}){Z?.throwIfAborted();let $,X;if(Q instanceof Blob)$=Q,X=`${Bun.randomUUIDv7()}.${Q.type.split("/")[1].split(";")[0]}`;else $=Q.body,X=Q.name;let G=$ instanceof Buffer?$:$ instanceof Blob||$ instanceof File?Buffer.from(await $.arrayBuffer()):"",Y=`${this.folderPath}/${X}`;return Z?.throwIfAborted(),await Bun.write(Y,G),X}async putStream({name:Q,body:Z},{signal:$}={}){let X=Z.getReader(),G=null;try{if($?.throwIfAborted(),!Q)throw Error("Object name has to be specified");let Y=l(this.folderPath),K=l(Y,Q),J=K1(Y,K);if(!J||J===".."||J.startsWith(`..${f}`)||v1(J))throw Error(`Refusing to write "${Q}": it is outside the storage folder`);await PQ(jQ(K),{recursive:!0}),G=`${K}.${Bun.randomUUIDv7()}.partial`;let H=await DQ(G,"wx");try{for(;;){$?.throwIfAborted();let{done:W,value:V}=await X.read();if(W)break;for(let B=0;B<V.byteLength;){let{bytesWritten:L}=await H.write(V,B);B+=L}}}finally{await H.close()}return $?.throwIfAborted(),await UQ(G,K),Q}catch(Y){if(await X.cancel(Y).catch(()=>{}),G)await C0(G).catch(()=>{});throw Y}}async fetch(Q,{signal:Z}={}){Z?.throwIfAborted();let $=process.env.BUCKET_NAME,X;if(typeof Q==="string")X=Q;else $=Q.bucket??$,X=Q.name;if(!X)throw Error("Object name has to be specified");let G=`${this.folderPath}/${X}`,Y=Bun.file(G),K=L0(Bun.file(G).stream(),Z),J=new Date(Y.lastModified).toUTCString();return new Response(K,{headers:{"Content-Type":Y.type,"Content-Length":String(Y.size),"Cache-Control":"private, max-age=12000, must-revalidate","Last-Modified":J}})}async read(Q){let Z=typeof Q==="string"?{name:Q}:Q,{name:$,range:X=null}=Z;if(!$)throw Error("Object name has to be specified");let G=Bun.file(`${this.folderPath}/${$}`);if(!await G.exists())throw new m($);let Y=G.size,K=X?r1(X,Y):null;if(X&&!K)throw new b1(Y);let J=K?.start??0,H=K?K.end:Y-1;return{body:K?G.slice(J,H+1):G,start:J,end:H,total:Y,partial:Boolean(K),type:G.type||"application/octet-stream",lastModified:new Date(G.lastModified),name:$}}async size(Q){let Z=typeof Q==="string"?Q:Q.name,$=Bun.file(`${this.folderPath}/${Z}`);if(!await $.exists())throw new m(Z);return $.size}async delete(Q){let Z=typeof Q==="string"?Q:Q.name;if(!Z)throw Error("Object name has to be specified");let $=l(this.folderPath),X=l($,Z),G=K1($,X);if(!G||G===".."||G.startsWith(`..${f}`)||v1(G))throw Error(`Refusing to delete "${Z}": it is outside the storage folder`);try{await C0(X)}catch(Y){if(Y?.code==="ENOENT")return;throw Y}}resolvePrefix(Q){let Z=l(this.folderPath),$=Q.lastIndexOf("/"),X=$===-1?"":Q.slice(0,$),G=$===-1?Q:Q.slice($+1),Y=l(Z,X),K=K1(Z,Y);if(K===".."||K.startsWith(`..${f}`)||v1(K))throw Error(`Refusing to list "${Q}": it is outside the storage folder`);let J=K.split(f).join("/");return{root:Z,dir:Y,match:J?`${J}/${G}`:G}}async*objects(Q,{signal:Z}={}){Z?.throwIfAborted();let{root:$,dir:X,match:G}=this.resolvePrefix(Q),Y=[],K=async(J)=>{let H;try{H=await f1(J,{withFileTypes:!0})}catch(W){if(W?.code==="ENOENT"||W?.code==="ENOTDIR")return;throw W}for(let W of H){let V=`${J}${f}${W.name}`,B=K1($,V).split(f).join("/");if(W.isDirectory()){if(`${B}/`.startsWith(G)||G.startsWith(`${B}/`))await K(V)}else if(W.isFile()&&B.startsWith(G))Y.push(B)}};await K(X),Y.sort();for(let J of Y){Z?.throwIfAborted();let H;try{H=await RQ(`${$}/${J}`)}catch(W){if(W?.code==="ENOENT")continue;throw W}yield{name:J,size:H.size,lastModified:H.mtime}}}async deletePrefix(Q,Z={}){A1(Q);let{root:$,match:X}=this.resolvePrefix(Q);A1(X);let G=await super.deletePrefix(Q,Z);if(G>0)await this.pruneEmptyDirs($,X);return G}async pruneEmptyDirs(Q,Z){let $=[],X=async(G)=>{let Y;try{Y=await f1(G,{withFileTypes:!0})}catch{return}for(let K of Y){if(!K.isDirectory())continue;let J=`${G}${f}${K.name}`,H=K1(Q,J).split(f).join("/");if(`${H}/`.startsWith(Z)||Z.startsWith(`${H}/`)){if(await X(J),`${H}/`.startsWith(Z))$.push(J)}}};await X(Q);for(let G of $)try{await MQ(G)}catch{}}async list(){return await f1(this.folderPath)}}var v=30000;function M8(Q){return Q}function _0(){return{driver:new h1,fetchTimeoutMs:v,fetchIdleTimeoutMs:v}}class m1{static token="filesystem";driver;fetchTimeoutMs;fetchIdleTimeoutMs;constructor(Q={}){this.driver=Q.driver??_0().driver,this.fetchTimeoutMs=Q.fetchTimeoutMs??v,this.fetchIdleTimeoutMs=Q.fetchIdleTimeoutMs??v}}class O0 extends Error{driver;limit;timeoutMs;object;code="storage-fetch-timeout";constructor(Q,Z,$,X){super(Z==="fetchTimeoutMs"?`${Q}: no response for "${X}" within ${$}ms (fetchTimeoutMs)`:`${Q}: the body of "${X}" sent nothing for ${$}ms (fetchIdleTimeoutMs)`);this.driver=Q;this.limit=Z;this.timeoutMs=$;this.object=X;this.name="StorageFetchTimeoutError"}}async function A0(Q,Z,$,X){let{fetchTimeoutMs:G,fetchIdleTimeoutMs:Y}=X;if($.signal||!G&&!Y)return Q.fetch(Z,$);let K=new AbortController,J=Q.constructor?.name||"FileStorageDriver",H=typeof Z==="string"?Z:Z.name,W=(L,D)=>{let M=new O0(J,L,D,H);return K.abort(M),M},V=Promise.resolve(Q.fetch(Z,{...$,signal:K.signal})),B;if(G){let L,D=new Promise((M,z)=>{L=setTimeout(()=>z(W("fetchTimeoutMs",G)),G)});try{B=await Promise.race([V,D])}catch(M){if(K.signal.aborted)throw V.then((z)=>z.body?.cancel(K.signal.reason).catch(()=>{}),()=>{}),K.signal.reason;throw M}finally{clearTimeout(L)}}else B=await V;if(!Y||!B.body)return B;return new Response(LQ(B.body,Y,()=>W("fetchIdleTimeoutMs",Y)),{status:B.status,statusText:B.statusText,headers:B.headers})}function LQ(Q,Z,$){let X=Q.getReader();return new ReadableStream({async pull(G){let Y,K,J=new Promise((H,W)=>{Y=setTimeout(()=>{K=$(),W(K)},Z)});try{let H=await Promise.race([X.read(),J]);if(H.done)G.close();else G.enqueue(H.value)}catch(H){let W=K??H;G.error(W),X.cancel(W).catch(()=>{})}finally{clearTimeout(Y)}},cancel(G){return X.cancel(G)}},{highWaterMark:0})}class T extends Error{code="safe-fetch";url;constructor(Q,Z,$){super(Q,$);this.name=new.target.name,this.url=Z}}class c extends T{reason;code="invalid-url";constructor(Q,Z,$){super($,Q);this.reason=Z}}class I1 extends T{host;reason;code="blocked-host";constructor(Q,Z,$){super($==="denied"?`Requests to ${Z} are not allowed.`:`${Z} is not on the list of hosts this request may reach.`,Q);this.host=Z;this.reason=$}}class i extends T{host;address;range;code="blocked-address";constructor(Q,Z,$,X){super(Z===$?`${$} is not a public address (${X}).`:`${Z} resolves to ${$}, which is not a public address (${X}).`,Q);this.host=Z;this.address=$;this.range=X}}class q1 extends T{host;code="dns";constructor(Q,Z,$){super(`Couldn't resolve ${Z}.`,Q,{cause:$});this.host=Z}}class N1 extends T{phase;ms;code="timeout";constructor(Q,Z,$){super(Z==="connect"?`Couldn't connect within ${$} ms.`:`The request didn't finish within ${$} ms.`,Q);this.phase=Z;this.ms=$}}class F1 extends T{limit;code="too-large";constructor(Q,Z){super(`The response is larger than ${Z} bytes.`,Q);this.limit=Z}}class J1 extends T{contentType;allowed;code="content-type";constructor(Q,Z,$){super(`The response is ${Z??"of no content type"}, not ${$.join(" or ")}.`,Q);this.contentType=Z;this.allowed=$}}class c1 extends T{limit;code="too-many-redirects";constructor(Q,Z){super(`More than ${Z} redirects.`,Q);this.limit=Z}}class o extends T{code="network";constructor(Q,Z){super(`The request failed: ${Z instanceof Error?Z.message:String(Z)}`,Q,{cause:Z})}}class p1 extends T{status;code="http-status";constructor(Q,Z){super(`The server answered ${Z}.`,Q);this.status=Z}}function CQ(Q){if(Q==="")return null;let Z=Q.split(".");if(Z.length>1&&Z[Z.length-1]==="")Z.pop();if(Z.length===0||Z.length>4)return null;let $=[];for(let Y of Z){let K=_Q(Y);if(K===null)return null;$.push(K)}let X=$.pop();for(let Y of $)if(Y>255)return null;if(X>=256**(4-$.length))return null;let G=X;return $.forEach((Y,K)=>{G+=Y*256**(3-K)}),new Uint8Array([Math.floor(G/16777216)&255,Math.floor(G/65536)&255,Math.floor(G/256)&255,G&255])}function _Q(Q){if(Q==="")return null;let Z=Q,$=10;if(/^0x/i.test(Z)){if(Z=Z.slice(2),$=16,Z==="")return 0}else if(Z.length>1&&Z.startsWith("0"))Z=Z.slice(1),$=8;if(!($===16?/^[0-9a-f]+$/i:$===8?/^[0-7]+$/:/^[0-9]+$/).test(Z))return null;let G=parseInt(Z,$);return Number.isSafeInteger(G)?G:null}function I0(Q){let Z=Q;if(Z.startsWith("[")&&Z.endsWith("]"))Z=Z.slice(1,-1);let $=Z.indexOf("%");if($!==-1)Z=Z.slice(0,$);if(!Z.includes(":"))return null;let X=Z.split("::");if(X.length>2)return null;let G=(W,V)=>{if(W==="")return[];let B=[],L=W.split(":");for(let D=0;D<L.length;D++){let M=L[D];if(V&&D===L.length-1&&M.includes(".")){if(!/^\d{1,3}(\.\d{1,3}){3}$/.test(M))return null;let z=M.split(".").map(Number);if(z.some((U)=>U>255))return null;B.push(z[0]<<8|z[1],z[2]<<8|z[3]);continue}if(!/^[0-9a-f]{1,4}$/i.test(M))return null;B.push(parseInt(M,16))}return B},Y=G(X[0],X.length===1),K=X.length===2?G(X[1],!0):[];if(!Y||!K)return null;let J;if(X.length===2){let W=8-Y.length-K.length;if(W<1)return null;J=[...Y,...Array.from({length:W},()=>0),...K]}else J=Y;if(J.length!==8)return null;let H=new Uint8Array(16);return J.forEach((W,V)=>{H[V*2]=W>>8,H[V*2+1]=W&255}),H}function W1(Q){let Z=I0(Q);if(Z)return{family:6,bytes:Z};let $=CQ(Q);if($)return{family:4,bytes:$};return null}function p(Q){if(Q.family===6&&OQ(Q.bytes))return{family:4,bytes:Q.bytes.slice(12)};return Q}function OQ(Q){for(let Z=0;Z<10;Z++)if(Q[Z]!==0)return!1;return Q[10]===255&&Q[11]===255}function z1(Q){if(Q.family===4)return Array.from(Q.bytes).join(".");let Z=[];for(let $=0;$<16;$+=2)Z.push((Q.bytes[$]<<8|Q.bytes[$+1]).toString(16));return Z.join(":")}function t(Q){let Z=Q.lastIndexOf("/"),$=Z===-1?Q:Q.slice(0,Z),X=/^[0-9.]+$/.test($)?AQ($):I0($);if(!X)return null;let G=p(X.length===4?{family:4,bytes:X}:{family:6,bytes:X}),Y=G.family===4?32:128,K=Y;if(Z!==-1){let J=Q.slice(Z+1);if(!/^\d{1,3}$/.test(J))return null;if(K=Number(J),X.length===16&&G.family===4)K-=96;if(K<0||K>Y)return null}return{family:G.family,bytes:G.bytes,prefix:K}}function AQ(Q){return/^\d{1,3}(\.\d{1,3}){3}$/.test(Q)&&Q.split(".").every((Z)=>Number(Z)<=255)?new Uint8Array(Q.split(".").map(Number)):null}function g(Q,Z){let $=p(Q);if($.family!==Z.family)return!1;let X=Z.prefix;for(let G=0;X>0;G++){let Y=Math.min(8,X),K=255<<8-Y&255;if(($.bytes[G]&K)!==(Z.bytes[G]&K))return!1;X-=Y}return!0}var _=(Q,Z)=>({cidr:t(Q),kind:Z,text:Q}),IQ=[_("0.0.0.0/8","unspecified"),_("10.0.0.0/8","private"),_("100.64.0.0/10","shared"),_("127.0.0.0/8","loopback"),_("169.254.169.254/32","metadata"),_("169.254.0.0/16","link-local"),_("168.63.129.16/32","metadata"),_("172.16.0.0/12","private"),_("192.0.0.0/24","reserved"),_("192.0.2.0/24","documentation"),_("192.88.99.0/24","reserved"),_("192.168.0.0/16","private"),_("198.18.0.0/15","benchmarking"),_("198.51.100.0/24","documentation"),_("203.0.113.0/24","documentation"),_("224.0.0.0/4","multicast"),_("255.255.255.255/32","broadcast"),_("240.0.0.0/4","reserved")],qQ=[_("::/128","unspecified"),_("::1/128","loopback"),_("64:ff9b:1::/48","private"),_("::/8","reserved"),_("100::/64","reserved"),_("2001:db8::/32","documentation"),_("2001::/23","reserved"),_("3fff::/20","documentation"),_("fd00:ec2::254/128","metadata"),_("fc00::/7","unique-local"),_("fe80::/10","link-local"),_("fec0::/10","private"),_("ff00::/8","multicast")],NQ=t("64:ff9b::/96"),FQ=t("2002::/16"),TQ=t("2000::/3");function T1(Q){let Z=typeof Q==="string"?W1(Q):Q;if(!Z)return{kind:"reserved",range:"not an IP address"};let $=p(Z);if($.family===4){let G=IQ.find((Y)=>g($,Y.cidr));return G?{kind:G.kind,range:G.text}:null}if(g($,NQ))return T1({family:4,bytes:$.bytes.slice(12)});if(g($,FQ))return T1({family:4,bytes:$.bytes.slice(2,6)});let X=qQ.find((G)=>g($,G.cidr));if(X)return{kind:X.kind,range:X.text};return g($,TQ)?null:{kind:"reserved",range:"outside 2000::/3"}}function q0(Q,Z){let $=p(Q),X=p(Z);return $.family===X.family&&$.bytes.every((G,Y)=>G===X.bytes[Y])}import{lookup as wQ}from"dns/promises";import*as SQ from"http";import*as EQ from"https";import*as s from"zlib";class u1 extends Response{#Q;#Z;address;constructor(Q,Z,$){super(Q,Z);this.#Q=$.url,this.#Z=$.redirected,this.address=$.address}get url(){return this.#Q}get redirected(){return this.#Z}}var V1={timeout:30000,connectTimeout:1e4,maxSize:10485760,maxRedirects:5,ports:[80,443]},xQ=new Set([301,302,303,307,308]),kQ=new Set([101,103,204,205,304]),gQ=["host","connection","content-length","transfer-encoding","keep-alive","upgrade"],yQ=["authorization","cookie","proxy-authorization"];async function T0(Q,Z={}){let $=bQ(Z),X=Z.signal;X?.throwIfAborted();let G=new AbortController,Y=G.signal,K=String(Q),J=(B)=>{if(!Y.aborted)G.abort(B)},H=setTimeout(()=>J(new N1(K,"total",$.timeout)),$.timeout),W=()=>J(X.reason);X?.addEventListener("abort",W,{once:!0});let V=()=>{clearTimeout(H),X?.removeEventListener("abort",W)};try{let B=F0(K,$),L=(Z.method??"GET").toUpperCase(),D=new Headers(Z.headers);for(let z of gQ)D.delete(z);if(!D.has("accept"))D.set("accept","*/*");if(!D.has("user-agent"))D.set("user-agent","gemi");if(!D.has("accept-encoding"))D.set("accept-encoding","gzip, deflate, br");let M=await mQ(L,Z.body,D);for(let z=0;;z++){K=B.href;let{request:U,response:P,address:R}=await cQ(B,L,D,M,$,Y),A=P.statusCode??0,I=P.headers.location;if(xQ.has(A)&&I&&Z.redirect!=="manual"){if(U.destroy(),z>=$.maxRedirects)throw new c1(B.href,$.maxRedirects);let q;try{q=new URL(I,B)}catch{throw new c(I,"malformed",`The redirect to "${I}" is not a URL.`)}if(A===303?L!=="HEAD":(A===301||A===302)&&L==="POST"){L="GET",M=null;let O=[];D.forEach((C,j)=>{if(j.startsWith("content-"))O.push(j)});for(let C of O)D.delete(C)}if(q.origin!==B.origin)for(let O of yQ)D.delete(O);B=F0(q.href,$);continue}return pQ({url:B,hop:z,method:L,request:U,response:P,address:R,policy:$,signal:Y,release:V})}}catch(B){throw V(),Y.aborted?Y.reason:B}}function bQ(Q){let Z=(X,G)=>{let Y={hosts:[],ranges:[]};for(let K of X){let J=K.includes("/")||K.includes(":")||/^[\d.]+$/.test(K),H=J?t(K):null;if(H)Y.ranges.push(H);else if(!J&&/^(\*\.)?[a-z0-9-]+(\.[a-z0-9-]+)*\.?$/i.test(K))Y.hosts.push(w0(K));else throw TypeError(`safeFetch: "${K}" in ${G} is not a host name or an IP range.`)}return Y},$=Q.allowPrivate;return{timeout:Q.timeout??V1.timeout,connectTimeout:Q.connectTimeout??V1.connectTimeout,maxSize:Q.maxSize??V1.maxSize,maxRedirects:Q.maxRedirects??V1.maxRedirects,ports:Q.ports??V1.ports,allow:Q.allow&&Q.allow.length>0?Z(Q.allow,"allow"):null,deny:Z(Q.deny??[],"deny"),allowPrivate:$===!0?!0:Z($||[],"allowPrivate").ranges,contentTypes:Q.contentTypes?.length?Q.contentTypes:null,resolve:Q.resolve??fQ}}async function fQ(Q){return(await wQ(Q,{all:!0,verbatim:!0})).map(($)=>$.address)}function w0(Q){return Q.toLowerCase().replace(/\.$/,"")}function N0(Q,Z){return Z.some(($)=>$.startsWith("*.")?Q.endsWith($.slice(1)):Q===$)}function F0(Q,Z){let $;try{$=new URL(Q)}catch{throw new c(Q,"malformed",`"${Q}" is not a URL.`)}if($.protocol!=="http:"&&$.protocol!=="https:")throw new c($.href,"scheme",`Only http and https URLs can be fetched, not ${$.protocol.slice(0,-1)}.`);if($.username||$.password)throw new c($.href,"credentials","The URL has a username or password in it.");let X=S0($);if(Z.ports!=="any"&&!Z.ports.includes(X))throw new c($.href,"port",`Port ${X} is not allowed.`);return $}function S0(Q){return Q.port?Number(Q.port):Q.protocol==="https:"?443:80}async function vQ(Q,Z,$){let X=w0(Q.hostname.replace(/^\[(.*)\]$/,"$1")),G=W1(X),Y=G!==null&&(X.includes(":")||/^\d+\.\d+\.\d+\.\d+$/.test(X));if(!Y&&N0(X,Z.deny.hosts))throw new I1(Q.href,X,"denied");let K=!Y&&Z.allow!==null&&N0(X,Z.allow.hosts);if(Z.allow&&!K&&Z.allow.ranges.length===0)throw new I1(Q.href,X,"not-allowed");let J;if(Y)J=[G];else{let H;try{H=await hQ(Z.resolve(X),$)}catch(W){if($.aborted)throw $.reason;throw new q1(Q.href,X,W)}if(J=H.map((W)=>W1(W)).filter((W)=>W!==null),J.length===0)throw new q1(Q.href,X)}for(let H of J){let W=z1(H);if(Z.deny.ranges.some((B)=>g(H,B)))throw new i(Q.href,X,W,"denied");if(Z.allow&&!K&&!Z.allow.ranges.some((B)=>g(H,B)))throw new i(Q.href,X,W,"not-allowed");let V=T1(H);if(V&&Z.allowPrivate!==!0&&!Z.allowPrivate.some((B)=>g(H,B)))throw new i(Q.href,X,W,V.kind)}return{host:X,addresses:J,isLiteral:Y}}function hQ(Q,Z){if(Z.aborted)return Promise.reject(Z.reason);return new Promise(($,X)=>{let G=()=>X(Z.reason);Z.addEventListener("abort",G,{once:!0}),Q.then((Y)=>{Z.removeEventListener("abort",G),$(Y)},(Y)=>{Z.removeEventListener("abort",G),X(Y)})})}async function mQ(Q,Z,$){if(Z===void 0||Z===null)return null;if(Q==="GET"||Q==="HEAD")throw TypeError(`safeFetch: a ${Q} request can't have a body.`);let X=new Request("http://body.invalid/",{method:"POST",body:Z}),G=X.headers.get("content-type");if(G&&!$.has("content-type"))$.set("content-type",G);return new Uint8Array(await X.arrayBuffer())}async function cQ(Q,Z,$,X,G,Y){let K=new AbortController,J=setTimeout(()=>K.abort(new N1(Q.href,"connect",G.connectTimeout)),G.connectTimeout),H=AbortSignal.any([Y,K.signal]);try{let{host:W,addresses:V,isLiteral:B}=await vQ(Q,G,H),L=Q.protocol==="https:",D={};if($.forEach((M,z)=>{D[z]=M}),X)D["content-length"]=String(X.byteLength);return await new Promise((M,z)=>{let U={method:Z,host:W,port:S0(Q),path:`${Q.pathname}${Q.search}`,headers:D,agent:!1,lookup:(O,C,j)=>{let w=C?.family,N=V.filter((B1)=>!w||B1.family===w);if(N.length===0)j(Object.assign(Error(`No IPv${w} address for ${W}`),{code:"ENOTFOUND"}));else if(C?.all)j(null,N.map((B1)=>({address:z1(B1),family:B1.family})));else j(null,z1(N[0]),N[0].family)}};if(L&&!B)U.servername=W;let P=(L?EQ:SQ).request(U),R=null,A=(O)=>{H.removeEventListener("abort",I),P.destroy(),z(O)},I=()=>A(H.aborted?H.reason:Y.reason);H.addEventListener("abort",I,{once:!0});let q=(O)=>{let C=O?.remoteAddress;if(!C||R!==null)return!0;let j=W1(C);if(!j||!V.some((w)=>q0(w,j)))return A(new i(Q.href,W,C,"not-allowed")),!1;return R=z1(p(j)),!0};P.once("socket",(O)=>{let C=()=>{if(q(O)&&!L)clearTimeout(J)};if(O.connecting)O.once("connect",C);else C();if(L)O.once("secureConnect",()=>clearTimeout(J))}),P.once("response",(O)=>{if(clearTimeout(J),O.on("error",()=>{}),!q(O.socket))return;H.removeEventListener("abort",I),M({request:P,response:O,address:R})}),P.on("error",(O)=>{if(H.aborted)return A(H.reason);A(O instanceof T?O:new o(Q.href,O))}),P.end(X??void 0)})}finally{clearTimeout(J)}}function pQ({url:Q,hop:Z,method:$,request:X,response:G,address:Y,policy:K,signal:J,release:H}){let W=G.statusCode??0;if(W<200||W>599)throw X.destroy(),new o(Q.href,Error(`Unexpected status ${W}`));let V=new Headers,B=G.rawHeaders;for(let C=0;C<B.length;C+=2)V.append(B[C],B[C+1]);if(K.contentTypes){let C=V.get("content-type")?.split(";")[0].trim().toLowerCase()??null;if(!C||!K.contentTypes.some((j)=>uQ(C,j)))throw X.destroy(),new J1(Q.href,C,K.contentTypes)}let L={url:Q.href,redirected:Z>0,address:Y},D={status:W,statusText:G.statusMessage??"",headers:V};if($==="HEAD"||kQ.has(W))return X.destroy(),H(),new u1(null,D,L);let M=V.get("content-encoding")?.trim().toLowerCase(),z=M==="gzip"||M==="x-gzip"?s.createGunzip():M==="deflate"?s.createInflate():M==="br"?s.createBrotliDecompress():null,U=Number(V.get("content-length"));if(!z&&Number.isFinite(U)&&U>K.maxSize)throw X.destroy(),new F1(Q.href,K.maxSize);if(z)V.delete("content-encoding"),V.delete("content-length");let P=z?G.pipe(z):G,R=0,A=!1,I=()=>{},q=()=>{A=!0,J.removeEventListener("abort",I),H()},O=new ReadableStream({start(C){let j=(N)=>{if(A)return;if(q(),N===void 0)C.close();else X.destroy(),z?.destroy(),C.error(N)};if(I=()=>j(J.reason),J.addEventListener("abort",I,{once:!0}),J.aborted)return I();P.on("data",(N)=>{if(A)return;if(R+=N.byteLength,R>K.maxSize)return j(new F1(Q.href,K.maxSize));if(C.enqueue(new Uint8Array(N)),(C.desiredSize??1)<=0)P.pause()}),P.once("end",()=>j());let w=(N)=>j(N instanceof T?N:new o(Q.href,N));if(P.on("error",w),z)G.on("error",w);G.once("aborted",()=>j(new o(Q.href,Error("The response was cut off."))))},pull(){P.resume()},cancel(){if(A)return;q(),X.destroy(),z?.destroy()}});return new u1(O,D,L)}function uQ(Q,Z){let $=Z.toLowerCase();return $.endsWith("/*")?Q.startsWith($.slice(0,-1)):Q===$}function x0(Q){return lQ(Q)??oQ(Q)??tQ(Q)}var d1=4096,dQ={"image/png":"png","image/jpeg":"jpg","image/gif":"gif","image/webp":"webp","image/avif":"avif","image/heic":"heic","image/heif":"heif","image/bmp":"bmp","image/tiff":"tiff","image/x-icon":"ico","image/svg+xml":"svg","audio/mpeg":"mp3","audio/aac":"aac","audio/mp4":"m4a","audio/ogg":"ogg","audio/flac":"flac","audio/wav":"wav","video/mp4":"mp4","video/quicktime":"mov","video/webm":"webm","video/x-matroska":"mkv","video/x-msvideo":"avi","font/woff":"woff","font/woff2":"woff2","font/ttf":"ttf","font/otf":"otf","application/pdf":"pdf","application/zip":"zip","application/gzip":"gz","application/xml":"xml","text/html":"html","text/plain":"txt","application/octet-stream":"bin"};function k0(Q){return dQ[Q]??"bin"}function E(Q,Z,$=0){if(Q.length<$+Z.length)return!1;return Z.every((X,G)=>Q[$+G]===X)}function y(Q,Z,$){return String.fromCharCode(...Q.subarray(Z,$))}var nQ={avif:"image/avif",avis:"image/avif",heic:"image/heic",heix:"image/heic",hevc:"image/heic",hevx:"image/heic",heim:"image/heic",heis:"image/heic",mif1:"image/heif",msf1:"image/heif","qt ":"video/quicktime","M4A ":"audio/mp4","M4B ":"audio/mp4"};function lQ(Q){if(E(Q,[137,80,78,71,13,10,26,10]))return"image/png";if(E(Q,[255,216,255]))return"image/jpeg";if(Q.length>=6&&(y(Q,0,6)==="GIF87a"||y(Q,0,6)==="GIF89a"))return"image/gif";if(Q.length>=12&&y(Q,0,4)==="RIFF"){let Z=y(Q,8,12);if(Z==="WEBP")return"image/webp";if(Z==="WAVE")return"audio/wav";if(Z==="AVI ")return"video/x-msvideo"}if(Q.length>=12&&y(Q,4,8)==="ftyp"){let Z=y(Q,8,12);return nQ[Z]??"video/mp4"}if(E(Q,[73,73,42,0])||E(Q,[77,77,0,42]))return"image/tiff";if(E(Q,[66,77])&&E(Q,[0,0,0,0],6))return"image/bmp";if(E(Q,[0,0,1,0])&&Q.length>=6&&Q[4]>0)return"image/x-icon";if(E(Q,[37,80,68,70,45]))return"application/pdf";if(E(Q,[80,75,3,4]))return"application/zip";if(E(Q,[31,139]))return"application/gzip";if(E(Q,[26,69,223,163]))return y(Q,0,Math.min(Q.length,64)).includes("webm")?"video/webm":"video/x-matroska";if(Q.length>=4){let Z=y(Q,0,4);if(Z==="OggS")return"audio/ogg";if(Z==="fLaC")return"audio/flac";if(Z==="wOFF")return"font/woff";if(Z==="wOF2")return"font/woff2";if(Z==="OTTO")return"font/otf"}if(E(Q,[0,1,0,0,0]))return"font/ttf";if(Q.length>=3&&y(Q,0,3)==="ID3")return"audio/mpeg";if(Q.length>=2&&Q[0]===255){if((Q[1]&246)===240)return"audio/aac";if((Q[1]&224)===224&&(Q[1]&6)!==0)return"audio/mpeg"}return null}var iQ=["!doctype html","html","head","script","iframe","h1","div","font","table","a","style","title","b","body","br","p","!--"];function oQ(Q){let Z=new TextDecoder("utf-8",{fatal:!1}).decode(Q);if(Z.charCodeAt(0)===65279)Z=Z.slice(1);if(Z=Z.trimStart(),!Z.startsWith("<"))return null;let $=Z.toLowerCase(),X=$;for(;;){X=X.trimStart();let G=/^(<\?[\s\S]*?\?>|<!--[\s\S]*?-->|<!doctype[^>]*>)/.exec(X);if(!G)break;X=X.slice(G[0].length)}if(/^<svg[\s>/]/.test(X))return"image/svg+xml";for(let G of iQ){if(!$.startsWith(`<${G}`))continue;if(/^[\s>]/.test($.charAt(G.length+1)))return"text/html"}if(/^<(html|head|body)[\s>]/.test(X))return"text/html";if($.startsWith("<?xml"))return"application/xml";return null}function tQ(Q){if(Q.length===0)return"application/octet-stream";for(let Z of Q)if(Z<32&&Z!==9&&Z!==10&&Z!==12&&Z!==13&&Z!==27)return"application/octet-stream";try{return new TextDecoder("utf-8",{fatal:!0}).decode(Q,{stream:!0}),"text/plain"}catch{return"application/octet-stream"}}var sQ=new Set(["text/html","application/xhtml+xml","image/svg+xml","text/xml","application/xml","text/xsl","application/xslt+xml"]);function E0(Q){let Z=Q.split(";")[0].trim().toLowerCase();return sQ.has(Z)||Z.endsWith("+xml")}function g0(Q,Z){let $=Q.split(";")[0].trim().toLowerCase();return Z.some((X)=>{let G=X.split(";")[0].trim().toLowerCase();if(G==="*/*"||G==="*")return!E0($);if(G.endsWith("/*"))return $.startsWith(G.slice(0,-1))&&!E0($);return $===G})}import{Buffer as eQ}from"buffer";async function y0(Q){try{return(await import("sharp")).default}catch(Z){throw Error(`${Q} requires the 'sharp' package. Install it with \`bun add sharp\`.`,{cause:Z})}}async function b0(Q,Z,$={}){let{name:X,directory:G,bucket:Y,maxSize:K,timeout:J,contentTypes:H,signal:W}=$;if(X!==void 0&&G!==void 0)throw TypeError("Storage.putFromUrl(): pass `name` or `directory`, not both.");if(X!==void 0&&!X)throw TypeError("Storage.putFromUrl(): `name` is empty.");let V=await T0(Z,{...$.fetch,method:"GET",redirect:"follow",contentTypes:void 0,signal:W,timeout:J,maxSize:K});if(!V.ok)throw await V.body?.cancel().catch(()=>{}),new p1(V.url,V.status);let B=(V.body??new Response(new Uint8Array).body).getReader(),L=async(j)=>{throw await B.cancel(j).catch(()=>{}),j},D=[],M=0,z=!1;while(M<d1){let{done:j,value:w}=await B.read();if(j){z=!0;break}D.push(w),M+=w.byteLength}let U=rQ(D,M),P=x0(U.subarray(0,Math.min(M,d1))),R=H?.length?H:["*/*"];if(!g0(P,R))await L(new J1(V.url,P,R));let A=X??[(G??"").replace(/\/+$/,""),`${Bun.randomUUIDv7()}.${k0(P)}`].filter(Boolean).join("/"),I=M,q=new ReadableStream({start(j){if(M>0)j.enqueue(U);if(z)j.close()},async pull(j){let{done:w,value:N}=await B.read();if(w){j.close();return}I+=N.byteLength,j.enqueue(N)},cancel(j){return B.cancel(j)}}),O={name:A,bucket:Y,body:q,contentType:P},C;try{C=Q.putStream?await Q.putStream(O,{signal:W}):await Y1.prototype.putStream.call(Q,O,{signal:W})}catch(j){throw await L(j),j}return{name:C,contentType:P,size:I,url:V.url}}function rQ(Q,Z){if(Q.length===1)return Q[0];let $=new Uint8Array(Z),X=0;for(let G of Q)$.set(G,X),X+=G.byteLength;return $}class QZ extends G1{static getFacadeAccessor(){return m1}static async put(Q,Z={}){return this.getFacadeRoot().driver.put(Q,Z)}static async putFromUrl(Q,Z={}){return b0(this.getFacadeRoot().driver,Q,Z)}static async metadata(Q){let Z=eQ.from(await Q.arrayBuffer()),$=await y0("Storage.metadata()");try{return await $(Z).metadata()}catch{return{}}}static async fetch(Q,Z={}){Z.signal?.throwIfAborted();let $=this.getFacadeRoot();return A0($.driver,Q,Z,{fetchTimeoutMs:$.fetchTimeoutMs??v,fetchIdleTimeoutMs:$.fetchIdleTimeoutMs??v})}static async read(Q,Z={}){let $=typeof Q==="string"?{name:Q}:{...Q},X="range"in Z?Z.range??null:$.range!==void 0?$.range:b.getStore()?.rangeRequest??null;return this.getFacadeRoot().driver.read({...$,range:X})}static list(Q){return this.getFacadeRoot().driver.list(Q)}static objects(Q,Z={}){return this.getFacadeRoot().driver.objects(Q,Z)}static async deletePrefix(Q,Z={}){return this.getFacadeRoot().driver.deletePrefix(Q,Z)}static async delete(Q){return this.getFacadeRoot().driver.delete(Q)}}import{mkdir as l1,readdir as GZ,access as YZ}from"fs/promises";var n1=["debug","info","notice","warning","error","critical","alert","emergency"],ZZ=n1.indexOf("warning");function v0(Q){if(!Q)return-1;if(Q===!0)return 0;let Z=n1.indexOf(Q);return Z===-1?0:Z}function $Z(){let Q=new WeakSet;return function(Z,$){if(typeof $==="bigint")return $.toString();if($ instanceof Error){let X={name:$.name,message:$.message,stack:$.stack};for(let G of Object.keys($))X[G]=$[G];if($.cause!==void 0)X.cause=$.cause;return X}if($!==null&&typeof $==="object"){if(Q.has($))return"[Circular]";Q.add($)}return $}}function f0(Q){try{return JSON.stringify(Q,$Z())}catch{return'"[Unserializable]"'}}function XZ(Q,Z){if(Z==="json")return f0({...Q.metadata,timestamp:Q.timestamp,level:Q.level,message:Q.message});let $=Object.keys(Q.metadata).length>0;return`${Q.timestamp} ${Q.level.toUpperCase()} ${Q.message}${$?` ${f0(Q.metadata)}`:""}`}function h0(Q,Z){let $=n1.indexOf(Q.level);if(Z.threshold===-1||$<Z.threshold)return;try{let X=XZ(Q,Z.format)+`
5
5
  `;if($>=ZZ)process.stderr.write(X);else process.stdout.write(X)}catch{}}async function i1(Q){try{return await YZ(Q),!0}catch{return!1}}class o1{config;static token="log";writer;isReady=!1;flushTimeout;fileSize=0;writerSize=0;isCreatingFile=!1;bootPromise=null;currentLogFilePath;get logsDirPath(){return`${H1()}/storage/logs`}consoleThreshold;constructor(Q){this.config=Q;this.consoleThreshold=v0(Q.console)}boot(){if(!this.bootPromise)this.bootPromise=this.createStorage().catch((Q)=>{console.error("Log storage unavailable, file logging disabled",Q)}).then(()=>{this.isReady=!0});return this.bootPromise}async createStorage(){let Q=`${H1()}/storage`;if(!await i1(Q))await l1(Q);if(!await i1(this.logsDirPath))await l1(this.logsDirPath);await this.newLogFile()}async newLogFile(){if(!await i1(this.logsDirPath))await l1(this.logsDirPath);if(this.isCreatingFile=!0,this.currentLogFilePath){this.writer.flush(),this.writer.end(),this.writer=null;let $=new File([await Bun.file(this.currentLogFilePath).arrayBuffer()],this.currentLogFilePath.split("/").pop(),{type:"text/plain"});this.config.onLogFileClosed($),this.fileSize=0,this.writerSize=0}let Z=(await GZ(this.logsDirPath)).sort().reverse()[0];if(Z){let $=Bun.file(`${this.logsDirPath}/${Z}`);if($.size<this.config.maxFileSize)this.currentLogFilePath=`${this.logsDirPath}/${Z}`,this.writer=$.writer(),this.writer.write(await $.text()),this.writer.write(`
@@ -10,6 +10,6 @@ data: ${JSON.stringify(Q.event)}
10
10
  `}var WZ=5000,zZ=`: keepalive
11
11
 
12
12
  `;function VZ(Q,Z=WZ){let $=null,X=!1,G=()=>{if(X)return;if($!==null)clearTimeout($);$=setTimeout(()=>{if($=null,X)return;try{Q.enqueue(t1.encode(zZ))}catch{Y();return}G()},Z)},Y=()=>{if(X=!0,$!==null)clearTimeout($);$=null};return G(),{touch:G,stop:Y}}function BZ(){return{"Content-Type":"text/event-stream","Cache-Control":"no-store, no-transform",Connection:"keep-alive","X-Accel-Buffering":"no"}}function e8(Q,Z=200){let $=Q[Symbol.asyncIterator](),X=-1,G,Y=new ReadableStream({start(K){G=VZ(K)},async pull(K){try{let J=await $.next();if(J.done){G.stop(),K.close();return}X=J.value.seq,K.enqueue(t1.encode(m0(J.value))),G.touch()}catch(J){let H={type:"error",error:DZ(J)};G.stop(),K.enqueue(t1.encode(m0({seq:X+1,event:H}))),K.close()}},cancel(K){G.stop(),$.return?.(K)}});return new Response(Y,{status:Z,headers:BZ()})}var PZ=new Set(["frame_cursor_evicted","live_run_not_found"]);function DZ(Q){let Z=Q&&typeof Q==="object"?Q.code:void 0;if(Q instanceof Error&&typeof Z==="string"&&PZ.has(Z))return{code:"unknown",message:Q.message,retryable:!1};return console.error("[gemi/ai] agent stream failed",Q),{code:"unknown",message:"The run's stream failed.",retryable:!1}}
13
- export{s1 as Oh,c0 as Ph,MZ as Qh,J0 as Rh,wZ as Sh,V0 as Th,SZ as Uh,a1 as Vh,r1 as Wh,jZ as Xh,LZ as Yh,CZ as Zh,e1 as _h,xZ as $h,D0 as ai,kZ as bi,gZ as ci,a as di,k as ei,G0 as fi,H0 as gi,qZ as hi,NZ as ii,JQ as ji,j0 as ki,WQ as li,y1 as mi,b1 as ni,zQ as oi,m as pi,VQ as qi,G1 as ri,y0 as si,A1 as ti,Y1 as ui,L0 as vi,h1 as wi,M8 as xi,_0 as yi,m1 as zi,O0 as Ai,T as Bi,c as Ci,I1 as Di,i as Ei,q1 as Fi,N1 as Gi,F1 as Hi,J1 as Ii,c1 as Ji,o as Ki,p1 as Li,W1 as Mi,T1 as Ni,u1 as Oi,T0 as Pi,x0 as Qi,E0 as Ri,QZ as Si,o1 as Ti,KZ as Ui,HZ as Vi,zZ as Wi,VZ as Xi,BZ as Yi,e8 as Zi};
13
+ export{s1 as Oh,c0 as Ph,MZ as Qh,J0 as Rh,wZ as Sh,V0 as Th,SZ as Uh,a1 as Vh,r1 as Wh,jZ as Xh,LZ as Yh,CZ as Zh,e1 as _h,xZ as $h,D0 as ai,kZ as bi,gZ as ci,a as di,k as ei,G0 as fi,H0 as gi,qZ as hi,NZ as ii,JQ as ji,j0 as ki,WQ as li,y1 as mi,b1 as ni,zQ as oi,m as pi,VQ as qi,G1 as ri,y0 as si,A1 as ti,Y1 as ui,L0 as vi,h1 as wi,M8 as xi,_0 as yi,m1 as zi,O0 as Ai,T as Bi,c as Ci,I1 as Di,i as Ei,q1 as Fi,N1 as Gi,F1 as Hi,J1 as Ii,c1 as Ji,o as Ki,p1 as Li,W1 as Mi,T1 as Ni,u1 as Oi,T0 as Pi,x0 as Qi,E0 as Ri,QZ as Si,o1 as Ti,KZ as Ui,HZ as Vi,m0 as Wi,zZ as Xi,VZ as Yi,BZ as Zi,e8 as _i};
14
14
 
15
- //# debugId=3929BA62E98D6FE364756E2164756E21
15
+ //# debugId=261FAFDD5A7D8BFC64756E2164756E21