gemi 0.176.0 → 0.177.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/AgentController.d.ts +6 -4
  2. package/dist/ai/AgentController.d.ts.map +1 -1
  3. package/dist/ai/client/index.d.ts +3 -2
  4. package/dist/ai/client/index.d.ts.map +1 -1
  5. package/dist/ai/client/index.js +108 -21
  6. package/dist/ai/client/index.js.map +1 -1
  7. package/dist/ai/index.d.ts +2 -1
  8. package/dist/ai/index.d.ts.map +1 -1
  9. package/dist/ai/index.js +3 -3
  10. package/dist/ai/index.js.map +4 -4
  11. package/dist/ai/store/MemoryAgentStore.d.ts.map +1 -1
  12. package/dist/ai/types.d.ts +18 -0
  13. package/dist/ai/types.d.ts.map +1 -1
  14. package/dist/ai/useChat.d.ts +27 -2
  15. package/dist/ai/useChat.d.ts.map +1 -1
  16. package/dist/app/index.js +1 -1
  17. package/dist/bun/plugin.js +1 -1
  18. package/dist/bun/preload.js +1 -1
  19. package/dist/{chunk-xe126csw.js → chunk-0mye000w.js} +2 -2
  20. package/dist/{chunk-dqj22m1r.js.map → chunk-0mye000w.js.map} +1 -1
  21. package/dist/{chunk-q1s9y4ce.js → chunk-10ap3vpj.js} +2 -2
  22. package/dist/{chunk-q1s9y4ce.js.map → chunk-10ap3vpj.js.map} +1 -1
  23. package/dist/{chunk-r22svpab.js → chunk-11aqfdr7.js} +3 -3
  24. package/dist/{chunk-r22svpab.js.map → chunk-11aqfdr7.js.map} +1 -1
  25. package/dist/{chunk-nfj6k1a6.js → chunk-2cw1et3n.js} +2 -2
  26. package/dist/{chunk-nfj6k1a6.js.map → chunk-2cw1et3n.js.map} +1 -1
  27. package/dist/{chunk-rjsd8f8q.js → chunk-344f6c5q.js} +2 -2
  28. package/dist/{chunk-rjsd8f8q.js.map → chunk-344f6c5q.js.map} +1 -1
  29. package/dist/{chunk-cx05t002.js → chunk-3szc00gq.js} +2 -2
  30. package/dist/{chunk-cx05t002.js.map → chunk-3szc00gq.js.map} +1 -1
  31. package/dist/chunk-50hrefzf.js +10 -0
  32. package/dist/{chunk-xnkx1kz8.js.map → chunk-50hrefzf.js.map} +3 -3
  33. package/dist/{chunk-ewf24h4z.js → chunk-574s5sgz.js} +2 -2
  34. package/dist/{chunk-ewf24h4z.js.map → chunk-574s5sgz.js.map} +1 -1
  35. package/dist/{chunk-xtj7cgsx.js → chunk-5yjseh8g.js} +2 -2
  36. package/dist/{chunk-xtj7cgsx.js.map → chunk-5yjseh8g.js.map} +1 -1
  37. package/dist/{chunk-6016sfy5.js → chunk-5zfwvabd.js} +2 -2
  38. package/dist/{chunk-6016sfy5.js.map → chunk-5zfwvabd.js.map} +1 -1
  39. package/dist/{chunk-dqj22m1r.js → chunk-64m4fmf0.js} +2 -2
  40. package/dist/{chunk-xe126csw.js.map → chunk-64m4fmf0.js.map} +1 -1
  41. package/dist/{chunk-k9ndr16q.js → chunk-7e1fgzcv.js} +2 -2
  42. package/dist/{chunk-k9ndr16q.js.map → chunk-7e1fgzcv.js.map} +1 -1
  43. package/dist/{chunk-9r4rvyfr.js → chunk-8bnmvhrv.js} +2 -2
  44. package/dist/{chunk-9r4rvyfr.js.map → chunk-8bnmvhrv.js.map} +1 -1
  45. package/dist/{chunk-f4wkm07x.js → chunk-8tyxtp36.js} +2 -2
  46. package/dist/{chunk-f4wkm07x.js.map → chunk-8tyxtp36.js.map} +1 -1
  47. package/dist/{chunk-0v46hne6.js → chunk-8ym912fj.js} +3 -3
  48. package/dist/{chunk-0v46hne6.js.map → chunk-8ym912fj.js.map} +1 -1
  49. package/dist/{chunk-4dnr1vg7.js → chunk-96gnm8zb.js} +2 -2
  50. package/dist/{chunk-4dnr1vg7.js.map → chunk-96gnm8zb.js.map} +1 -1
  51. package/dist/{chunk-vzz91xsm.js → chunk-9nks1y2h.js} +2 -2
  52. package/dist/{chunk-vzz91xsm.js.map → chunk-9nks1y2h.js.map} +1 -1
  53. package/dist/{chunk-9bcsfce4.js → chunk-a2br22hp.js} +2 -2
  54. package/dist/{chunk-9bcsfce4.js.map → chunk-a2br22hp.js.map} +1 -1
  55. package/dist/{chunk-7gc1jp2z.js → chunk-a2r94jbz.js} +2 -2
  56. package/dist/{chunk-7gc1jp2z.js.map → chunk-a2r94jbz.js.map} +1 -1
  57. package/dist/{chunk-h3jb2g2g.js → chunk-a4s0kf20.js} +2 -2
  58. package/dist/{chunk-h3jb2g2g.js.map → chunk-a4s0kf20.js.map} +1 -1
  59. package/dist/{chunk-tzne38pa.js → chunk-aat9zhrj.js} +3 -3
  60. package/dist/{chunk-tzne38pa.js.map → chunk-aat9zhrj.js.map} +1 -1
  61. package/dist/{chunk-r5wtc9fw.js → chunk-ay60f8dy.js} +1 -1
  62. package/dist/{chunk-df0nx9d6.js → chunk-bcdst4fd.js} +2 -2
  63. package/dist/{chunk-df0nx9d6.js.map → chunk-bcdst4fd.js.map} +1 -1
  64. package/dist/{chunk-6srzhv88.js → chunk-bhaae60h.js} +3 -3
  65. package/dist/{chunk-6srzhv88.js.map → chunk-bhaae60h.js.map} +1 -1
  66. package/dist/{chunk-zdpxwpc3.js → chunk-bmzznzhz.js} +3 -3
  67. package/dist/{chunk-zdpxwpc3.js.map → chunk-bmzznzhz.js.map} +1 -1
  68. package/dist/{chunk-8tzmat5s.js → chunk-brcn3h9b.js} +3 -3
  69. package/dist/{chunk-8tzmat5s.js.map → chunk-brcn3h9b.js.map} +1 -1
  70. package/dist/{chunk-d7a79eqm.js → chunk-c6ms23fk.js} +2 -2
  71. package/dist/{chunk-d7a79eqm.js.map → chunk-c6ms23fk.js.map} +1 -1
  72. package/dist/{chunk-05k9gmr9.js → chunk-cmjmy3gt.js} +1 -1
  73. package/dist/{chunk-ksgeqtcv.js → chunk-cnnmb8p3.js} +2 -2
  74. package/dist/{chunk-ksgeqtcv.js.map → chunk-cnnmb8p3.js.map} +1 -1
  75. package/dist/{chunk-fqw81xgw.js → chunk-eq252sbg.js} +2 -2
  76. package/dist/{chunk-fqw81xgw.js.map → chunk-eq252sbg.js.map} +1 -1
  77. package/dist/{chunk-1hhwqx50.js → chunk-ezrf5vv9.js} +2 -2
  78. package/dist/{chunk-1hhwqx50.js.map → chunk-ezrf5vv9.js.map} +1 -1
  79. package/dist/{chunk-39sawkhs.js → chunk-f76hstxx.js} +2 -2
  80. package/dist/{chunk-39sawkhs.js.map → chunk-f76hstxx.js.map} +1 -1
  81. package/dist/{chunk-kxgxeead.js → chunk-fbbqy4af.js} +2 -2
  82. package/dist/{chunk-kxgxeead.js.map → chunk-fbbqy4af.js.map} +1 -1
  83. package/dist/{chunk-9zcsshgb.js → chunk-gr4vynwd.js} +2 -2
  84. package/dist/{chunk-9zcsshgb.js.map → chunk-gr4vynwd.js.map} +1 -1
  85. package/dist/{chunk-sgarq1q9.js → chunk-gr625kyj.js} +2 -2
  86. package/dist/{chunk-sgarq1q9.js.map → chunk-gr625kyj.js.map} +1 -1
  87. package/dist/{chunk-bsnp7h5w.js → chunk-h2yyyzsv.js} +3 -3
  88. package/dist/{chunk-bsnp7h5w.js.map → chunk-h2yyyzsv.js.map} +1 -1
  89. package/dist/{chunk-tbf76adx.js → chunk-h3xpvksc.js} +2 -2
  90. package/dist/{chunk-tbf76adx.js.map → chunk-h3xpvksc.js.map} +1 -1
  91. package/dist/{chunk-gnnay997.js → chunk-h968axww.js} +2 -2
  92. package/dist/{chunk-gnnay997.js.map → chunk-h968axww.js.map} +1 -1
  93. package/dist/{chunk-w65gftzm.js → chunk-hkjfyhv4.js} +2 -2
  94. package/dist/{chunk-w65gftzm.js.map → chunk-hkjfyhv4.js.map} +1 -1
  95. package/dist/{chunk-pbc3w7mq.js → chunk-hrj2d0w4.js} +2 -2
  96. package/dist/{chunk-pbc3w7mq.js.map → chunk-hrj2d0w4.js.map} +1 -1
  97. package/dist/{chunk-kknybxbv.js → chunk-hthdwnfr.js} +2 -2
  98. package/dist/{chunk-kknybxbv.js.map → chunk-hthdwnfr.js.map} +1 -1
  99. package/dist/{chunk-c9q856yk.js → chunk-j6sbfa2q.js} +2 -2
  100. package/dist/{chunk-c9q856yk.js.map → chunk-j6sbfa2q.js.map} +1 -1
  101. package/dist/{chunk-bs8mrewm.js → chunk-jj4w6ce5.js} +2 -2
  102. package/dist/{chunk-bs8mrewm.js.map → chunk-jj4w6ce5.js.map} +1 -1
  103. package/dist/{chunk-2p7zph5z.js → chunk-kx3etqsr.js} +2 -2
  104. package/dist/{chunk-2p7zph5z.js.map → chunk-kx3etqsr.js.map} +1 -1
  105. package/dist/{chunk-b1grj1t0.js → chunk-mg9m53kk.js} +2 -2
  106. package/dist/{chunk-b1grj1t0.js.map → chunk-mg9m53kk.js.map} +1 -1
  107. package/dist/{chunk-6vmc8eak.js → chunk-mkb9nt5n.js} +2 -2
  108. package/dist/{chunk-6vmc8eak.js.map → chunk-mkb9nt5n.js.map} +1 -1
  109. package/dist/{chunk-w8hre8gz.js → chunk-n8egkp1k.js} +2 -2
  110. package/dist/{chunk-w8hre8gz.js.map → chunk-n8egkp1k.js.map} +1 -1
  111. package/dist/{chunk-erwawm84.js → chunk-nbmzs80j.js} +2 -2
  112. package/dist/{chunk-erwawm84.js.map → chunk-nbmzs80j.js.map} +1 -1
  113. package/dist/{chunk-d084zwp9.js → chunk-nfx1p5z2.js} +3 -3
  114. package/dist/{chunk-d084zwp9.js.map → chunk-nfx1p5z2.js.map} +1 -1
  115. package/dist/{chunk-hr9twa8v.js → chunk-nwdtdq2k.js} +3 -3
  116. package/dist/{chunk-hr9twa8v.js.map → chunk-nwdtdq2k.js.map} +1 -1
  117. package/dist/{chunk-mbshptjq.js → chunk-p779zv1n.js} +2 -2
  118. package/dist/{chunk-mbshptjq.js.map → chunk-p779zv1n.js.map} +1 -1
  119. package/dist/chunk-pb2bap50.js +117 -0
  120. package/dist/{chunk-k036qfj0.js.map → chunk-pb2bap50.js.map} +5 -5
  121. package/dist/{chunk-4hhvaa7a.js → chunk-pha2mqjr.js} +2 -2
  122. package/dist/{chunk-4hhvaa7a.js.map → chunk-pha2mqjr.js.map} +1 -1
  123. package/dist/{chunk-qfqn7rz8.js → chunk-pv3152gj.js} +1 -1
  124. package/dist/{chunk-f1my4jah.js → chunk-q21p7bq9.js} +1 -1
  125. package/dist/{chunk-srvsz7vm.js → chunk-q21wxx5y.js} +1 -1
  126. package/dist/{chunk-g3m7t5zc.js → chunk-q5j1bwny.js} +1 -1
  127. package/dist/{chunk-m250ejpg.js → chunk-r4ewwmcr.js} +2 -2
  128. package/dist/{chunk-m250ejpg.js.map → chunk-r4ewwmcr.js.map} +1 -1
  129. package/dist/{chunk-3esnjxv9.js → chunk-rhqcv3te.js} +2 -2
  130. package/dist/{chunk-3esnjxv9.js.map → chunk-rhqcv3te.js.map} +1 -1
  131. package/dist/{chunk-6rh3brnr.js → chunk-sq2ccgxy.js} +3 -3
  132. package/dist/{chunk-6rh3brnr.js.map → chunk-sq2ccgxy.js.map} +1 -1
  133. package/dist/chunk-sz8w3kwt.js +5 -0
  134. package/dist/{chunk-2mvz2pjr.js.map → chunk-sz8w3kwt.js.map} +1 -1
  135. package/dist/{chunk-7mp369vg.js → chunk-tdbm67bb.js} +2 -2
  136. package/dist/{chunk-7mp369vg.js.map → chunk-tdbm67bb.js.map} +1 -1
  137. package/dist/{chunk-sjg5g92s.js → chunk-tpx30rbj.js} +2 -2
  138. package/dist/{chunk-sjg5g92s.js.map → chunk-tpx30rbj.js.map} +1 -1
  139. package/dist/{chunk-m0nvysa5.js → chunk-v9g2np6k.js} +3 -3
  140. package/dist/{chunk-m0nvysa5.js.map → chunk-v9g2np6k.js.map} +1 -1
  141. package/dist/{chunk-ywcfezjq.js → chunk-w1y6x2rm.js} +2 -2
  142. package/dist/{chunk-ywcfezjq.js.map → chunk-w1y6x2rm.js.map} +1 -1
  143. package/dist/{chunk-vpmbynke.js → chunk-x9h1hchj.js} +2 -2
  144. package/dist/{chunk-vpmbynke.js.map → chunk-x9h1hchj.js.map} +1 -1
  145. package/dist/{chunk-699j2epd.js → chunk-xvaan2fe.js} +4 -4
  146. package/dist/{chunk-699j2epd.js.map → chunk-xvaan2fe.js.map} +1 -1
  147. package/dist/{chunk-97aeny79.js → chunk-y13dsype.js} +3 -3
  148. package/dist/{chunk-97aeny79.js.map → chunk-y13dsype.js.map} +1 -1
  149. package/dist/{chunk-5d653hk1.js → chunk-y5c9xqme.js} +2 -2
  150. package/dist/{chunk-5d653hk1.js.map → chunk-y5c9xqme.js.map} +1 -1
  151. package/dist/{chunk-jhn1h70n.js → chunk-ygdmm1h4.js} +2 -2
  152. package/dist/{chunk-jhn1h70n.js.map → chunk-ygdmm1h4.js.map} +1 -1
  153. package/dist/{chunk-h041bq3j.js → chunk-yhdwr77h.js} +2 -2
  154. package/dist/{chunk-h041bq3j.js.map → chunk-yhdwr77h.js.map} +1 -1
  155. package/dist/{chunk-5yvy70d7.js → chunk-yszn7ses.js} +2 -2
  156. package/dist/{chunk-5yvy70d7.js.map → chunk-yszn7ses.js.map} +1 -1
  157. package/dist/{chunk-r1n2fkfz.js → chunk-z0q126b1.js} +2 -2
  158. package/dist/{chunk-r1n2fkfz.js.map → chunk-z0q126b1.js.map} +1 -1
  159. package/dist/{chunk-ykd2ayw8.js → chunk-zczvbygf.js} +2 -2
  160. package/dist/{chunk-ykd2ayw8.js.map → chunk-zczvbygf.js.map} +1 -1
  161. package/dist/{chunk-jv48eg0a.js → chunk-zn6j65pg.js} +2 -2
  162. package/dist/{chunk-jv48eg0a.js.map → chunk-zn6j65pg.js.map} +1 -1
  163. package/dist/config/index.js +1 -1
  164. package/dist/console/run.js +2 -2
  165. package/dist/console/run.js.map +1 -1
  166. package/dist/container/index.js +2 -2
  167. package/dist/container/index.js.map +1 -1
  168. package/dist/database/index.js +2 -2
  169. package/dist/database/index.js.map +1 -1
  170. package/dist/email/index.js +2 -2
  171. package/dist/email/index.js.map +1 -1
  172. package/dist/facades/index.js +2 -2
  173. package/dist/facades/index.js.map +1 -1
  174. package/dist/foundation/index.js +2 -2
  175. package/dist/foundation/index.js.map +1 -1
  176. package/dist/http/ApiRouter.d.ts +1 -1
  177. package/dist/http/ApiRouter.d.ts.map +1 -1
  178. package/dist/http/index.js +2 -2
  179. package/dist/http/index.js.map +1 -1
  180. package/dist/i18n/dictionaryRuntime.js +2 -2
  181. package/dist/i18n/dictionaryRuntime.js.map +1 -1
  182. package/dist/i18n/index.js +2 -2
  183. package/dist/i18n/index.js.map +1 -1
  184. package/dist/kernel/index.js +2 -2
  185. package/dist/kernel/index.js.map +1 -1
  186. package/dist/orm/index.js +2 -2
  187. package/dist/orm/index.js.map +1 -1
  188. package/dist/probe/index.js +2 -2
  189. package/dist/probe/index.js.map +1 -1
  190. package/dist/server/index.js +2 -2
  191. package/dist/server/index.js.map +1 -1
  192. package/dist/services/index.js +2 -2
  193. package/dist/services/index.js.map +1 -1
  194. package/dist/services/queue/work.js +2 -2
  195. package/dist/services/queue/work.js.map +1 -1
  196. package/dist/services/router/ViewRouteDispatcher.d.ts.map +1 -1
  197. package/dist/services/router/globalMiddleware.d.ts.map +1 -1
  198. package/dist/services/router/staticCache.d.ts +1 -0
  199. package/dist/services/router/staticCache.d.ts.map +1 -1
  200. package/dist/stats/route-table.js +1 -1
  201. package/dist/support/index.js +2 -2
  202. package/dist/support/index.js.map +1 -1
  203. package/dist/utils/jsonify.d.ts +81 -0
  204. package/dist/utils/jsonify.d.ts.map +1 -0
  205. package/dist/vitest/index.js +1 -1
  206. package/package.json +1 -1
  207. package/dist/chunk-2mvz2pjr.js +0 -5
  208. package/dist/chunk-k036qfj0.js +0 -117
  209. package/dist/chunk-xnkx1kz8.js +0 -10
  210. /package/dist/{chunk-r5wtc9fw.js.map → chunk-ay60f8dy.js.map} +0 -0
  211. /package/dist/{chunk-05k9gmr9.js.map → chunk-cmjmy3gt.js.map} +0 -0
  212. /package/dist/{chunk-qfqn7rz8.js.map → chunk-pv3152gj.js.map} +0 -0
  213. /package/dist/{chunk-f1my4jah.js.map → chunk-q21p7bq9.js.map} +0 -0
  214. /package/dist/{chunk-srvsz7vm.js.map → chunk-q21wxx5y.js.map} +0 -0
  215. /package/dist/{chunk-g3m7t5zc.js.map → chunk-q5j1bwny.js.map} +0 -0
@@ -28,7 +28,8 @@ export { supportsStrict } from "./Schema";
28
28
  export type { AnySchema, FromJSONSchemaOptions, Infer, JSONSchemaFormat, JsonValue, JSONSchema, OptionalSchema, Schema, SchemaIssue, SchemaIssueCode, } from "./Schema";
29
29
  export { Prompt } from "./Prompt";
30
30
  export type { PromptOptions, PromptValues } from "./Prompt";
31
- export type { AgentContentPart, AgentError, AgentJobRef, AgentErrorCode, AgentMessage, AgentStreamEvent, AgentStreamFrame, ClientToolResult, ClientTurn, FilePart, FinishReason, NestedRun, OutputPart, PendingToolCall, ReasoningPart, TextPart, ToolCallPart, ToolApprovalRecord, ToolResultPart, ToolSearchRecord, ToolShape, ToolShapes, } from "./types";
31
+ export type { AgentContentPart, AgentError, AgentJobRef, AgentErrorCode, AgentMessage, AgentStreamEvent, AgentStreamFrame, ClientToolResult, ClientTurn, FilePart, FinishReason, NestedRun, OutputPart, PendingToolCall, ReasoningPart, TextPart, ToolCallPart, ToolApprovalRecord, ToolResultPart, ToolSearchRecord, JsonToolShapes, ToolShape, ToolShapes, } from "./types";
32
+ export type { Jsonify } from "../utils/jsonify";
32
33
  export { Agent, AgentTool, PendingEscalation, AgentRunError, DEFAULT_MAX_RUN_DURATION_MS, Skill, SKILLS_NAMESPACE, ToolNamespace, } from "./Agent";
33
34
  export type { AgentContext, AgentContextKit, ContextOf, ContextOfTools, RunAgentArgs, AgentResultOptions, AgentRun, AgentRunFailure, AgentRunResult, AgentStreamParams, AgentToolShapes, AnyAgent, AnyAgentTool, CreateAgentParams, NestedRunResult, OutputOf, PrepareStep, PrepareStepContext, PrepareStepResult, ReasoningEffort, RunAgentParams, SkillDefinition, ToolContext, ToolDefinition, ToolEntry, ToolExecute, ToolInputSchema, ToolSchemaContext, ToolApproval, ToolApprovalContext, ToolEndsRun, ToolEndsRunContext, ToolToModel, ToolShapesOf, ToolTurn, } from "./Agent";
34
35
  export { AgentJob, AgentJobDeadlineSweep, AgentJobs, DatabaseAgentJobStore, DEFAULT_JOB_DEADLINE_MS, DEFAULT_JOBS_CONTEXT_MAX, JobHandle, JobsRequireThreadError, MemoryAgentJobStore, } from "./jobs";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ai/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../ai/index.ts"],"names":[],"mappings":"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"}
package/dist/ai/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{$b as $8,$c as J6,Ac as t9,Bc as r9,Cc as C8,Ec as _8,Fc as T8,Gc as A8,Hc as R8,Ic as E8,Jc as j8,Kc as k8,Lc as x8,Mc as q8,Nc as I8,Oc as w8,Pc as b8,Rc as w,Sc as $9,Tc as s,Uc as T,Vc as Z8,Wc as s0,Xc as a0,Yb as J8,Yc as t0,Zb as NQ,Zc as r0,_b as UQ,_c as e0,ad as $6,bd as Q6,cc as xJ,cd as Z6,dc as S,dd as W6,ec as A,ed as K6,fd as DJ,gc as t8,gd as X6,hc as d8,hd as AQ,ic as KJ,id as Y6,jc as o0,jd as RQ,kc as g,kd as G6,lc as Q8,ld as EJ,mc as LQ,md as B$,nc as OQ,nd as V6,oc as CQ,od as H6,pc as m,pd as EQ,qc as _Q,qd as z6,rc as oJ,rd as D6,sc as MQ,sd as B6,tc as SQ,td as z$,uc as sJ,vc as U8,wc as L8,yc as O8,zc as v}from"../chunk-pbc3w7mq.js";import{Ld as D8}from"../chunk-9aj6eavs.js";import"../chunk-tbf76adx.js";import{$h as d0,Hh as zQ,Ii as FQ,Kh as BQ,Li as p$,Pi as PQ,_h as _9,ai as i0,bi as n0,ci as q}from"../chunk-r22svpab.js";import{Qi as DQ,Si as iJ,Ti as nJ}from"../chunk-4dnr1vg7.js";import{aj as h}from"../chunk-4hhvaa7a.js";import"../chunk-rjsd8f8q.js";import"../chunk-d7a79eqm.js";import"../chunk-ksgeqtcv.js";import{dk as n,ek as o,sk as SJ}from"../chunk-6rh3brnr.js";import"../chunk-vpmbynke.js";import"../chunk-9zcsshgb.js";import{fl as c9}from"../chunk-bsnp7h5w.js";import"../chunk-xtj7cgsx.js";import"../chunk-ykd2ayw8.js";import{yl as eJ}from"../chunk-7gc1jp2z.js";import"../chunk-xe126csw.js";import{existsSync as wQ,readdirSync as P6,readFileSync as V8}from"fs";import{isAbsolute as bQ,join as UJ,relative as fQ,sep as vQ}from"path";var H8="prompts.json",yQ=/\{\{>\s*([\w./-]+)\s*\}\}/g,X8=/\{\{(\w+)\}\}/g,hQ=/^[\w-]+(\/[\w-]+)*$/,Y8={dir:"app/agents",shared:"prompts"},OJ={},tJ=new Map,LJ;function gQ(){if(LJ===void 0){let J=UJ(eJ(),"dist","server",H8);LJ=wQ(J)?JSON.parse(V8(J,"utf8")):null}return LJ??null}function uQ(J){return J.replace(/\r?\n$/,"")}function G8(){return OJ.cache??Bun.env.NODE_ENV==="production"}function cQ(J){if(!hQ.test(J))throw Error(`"${J}" is not a prompt name. Use letters, digits, "-" and "_", with "/" between folders.`);let $=OJ.dir??Y8.dir,Q=bQ($)?$:UJ(process.cwd(),$),Z=J.includes("/")?`${J}.md`:UJ(OJ.shared??Y8.shared,`${J}.md`);return UJ(Q,Z)}function mQ(J){let $=cQ(J),Q=G8()?tJ.get($):void 0;if(Q!==void 0)return Q;let Z=Bun.env.NODE_ENV==="production";if(Z){let K=gQ()?.[fQ(eJ(),$).split(vQ).join("/")];if(K!==void 0)return K}let W;try{W=uQ(V8($,"utf8"))}catch(K){if(K.code==="ENOENT"){let X=Z?` or in dist/server/${H8}`:"";throw Error(`The prompt "${J}" does not exist (looked for ${$}${X}).`)}throw K}if(G8())tJ.set($,W);return W}function rJ(J,$){if($.includes(J))throw Error(`The prompt "${J}" includes itself: ${[...$,J].join(" > ")}.`);return mQ(J).replace(yQ,(Q,Z)=>rJ(Z,[...$,J]))}class z8{static configure(J){OJ={...J},tJ.clear(),LJ=void 0}static render(J,$={}){return rJ(J,[]).replace(X8,(Q,Z)=>{if(!Object.hasOwn($,Z))throw Error(`The prompt "${J}" has no value for {{${Z}}}.`);return String($[Z])})}static placeholders(J){let $=[...rJ(J,[]).matchAll(X8)].map((Q)=>Q[1]);return[...new Set($)]}}class J$ extends D8{name="AgentJobDeadlineSweep";cron="* * * * *";async callback(){while(await v.sweep({limit:100})===100);}}var CJ=20;function F8(J,$){if($<=0||J.length===0)return null;let Q=(K,X)=>X.createdAt-K.createdAt||(K.id<X.id?1:-1);return["<jobs>","Background jobs that tools started in this conversation, running ones first. A running job's result replaces its tool result when it finishes. Do not start the same work again while a job for it is running.",...[...J.filter((K)=>K.state==="running").sort(Q),...J.filter((K)=>K.state!=="running").sort(Q)].slice(0,$).map((K)=>{let X=[`- ${K.id} (${K.toolName})`];if(K.state==="running")X.push(`running since ${$$(K.createdAt)}`);else if(K.state==="ok")X.push(`finished at ${$$(K.settledAt??K.updatedAt)}`);else{let G=K.error?`${K.error.code}: ${B8(K.error.message,200)}`:"failed";X.push(`failed at ${$$(K.settledAt??K.updatedAt)} (${G})`)}if(K.summary!==void 0)X.push(`summary: ${B8(JSON.stringify(K.summary),300)}`);if(K.orphaned)X.push("its tool call was lost when the turn that started it was cut short");return X.join("; ")}),"</jobs>"].join(`
2
+ import{$b as $8,$c as J6,Ac as t9,Bc as r9,Cc as C8,Ec as _8,Fc as T8,Gc as A8,Hc as R8,Ic as E8,Jc as j8,Kc as k8,Lc as x8,Mc as q8,Nc as I8,Oc as w8,Pc as b8,Rc as w,Sc as $9,Tc as s,Uc as T,Vc as Z8,Wc as s0,Xc as a0,Yb as J8,Yc as t0,Zb as NQ,Zc as r0,_b as UQ,_c as e0,ad as $6,bd as Q6,cc as xJ,cd as Z6,dc as S,dd as W6,ec as A,ed as K6,fd as DJ,gc as t8,gd as X6,hc as d8,hd as AQ,ic as KJ,id as Y6,jc as o0,jd as RQ,kc as g,kd as G6,lc as Q8,ld as EJ,mc as LQ,md as B$,nc as OQ,nd as V6,oc as CQ,od as H6,pc as m,pd as EQ,qc as _Q,qd as z6,rc as oJ,rd as D6,sc as MQ,sd as B6,tc as SQ,td as z$,uc as sJ,vc as U8,wc as L8,yc as O8,zc as v}from"../chunk-hrj2d0w4.js";import{Ld as D8}from"../chunk-9aj6eavs.js";import"../chunk-h3xpvksc.js";import{$h as _9,Ih as zQ,Ji as FQ,Lh as BQ,Mi as p$,Qi as PQ,ai as d0,bi as i0,ci as n0,di as q}from"../chunk-11aqfdr7.js";import{Ri as DQ,Ti as iJ,Ui as nJ}from"../chunk-96gnm8zb.js";import{bj as h}from"../chunk-pha2mqjr.js";import"../chunk-344f6c5q.js";import"../chunk-c6ms23fk.js";import"../chunk-cnnmb8p3.js";import{ek as n,fk as o,tk as SJ}from"../chunk-sq2ccgxy.js";import"../chunk-x9h1hchj.js";import"../chunk-gr4vynwd.js";import{gl as c9}from"../chunk-h2yyyzsv.js";import"../chunk-5yjseh8g.js";import"../chunk-zczvbygf.js";import{zl as eJ}from"../chunk-a2r94jbz.js";import"../chunk-0mye000w.js";import{existsSync as wQ,readdirSync as P6,readFileSync as V8}from"fs";import{isAbsolute as bQ,join as UJ,relative as fQ,sep as vQ}from"path";var H8="prompts.json",yQ=/\{\{>\s*([\w./-]+)\s*\}\}/g,X8=/\{\{(\w+)\}\}/g,hQ=/^[\w-]+(\/[\w-]+)*$/,Y8={dir:"app/agents",shared:"prompts"},OJ={},tJ=new Map,LJ;function gQ(){if(LJ===void 0){let J=UJ(eJ(),"dist","server",H8);LJ=wQ(J)?JSON.parse(V8(J,"utf8")):null}return LJ??null}function uQ(J){return J.replace(/\r?\n$/,"")}function G8(){return OJ.cache??Bun.env.NODE_ENV==="production"}function cQ(J){if(!hQ.test(J))throw Error(`"${J}" is not a prompt name. Use letters, digits, "-" and "_", with "/" between folders.`);let $=OJ.dir??Y8.dir,Q=bQ($)?$:UJ(process.cwd(),$),Z=J.includes("/")?`${J}.md`:UJ(OJ.shared??Y8.shared,`${J}.md`);return UJ(Q,Z)}function mQ(J){let $=cQ(J),Q=G8()?tJ.get($):void 0;if(Q!==void 0)return Q;let Z=Bun.env.NODE_ENV==="production";if(Z){let K=gQ()?.[fQ(eJ(),$).split(vQ).join("/")];if(K!==void 0)return K}let W;try{W=uQ(V8($,"utf8"))}catch(K){if(K.code==="ENOENT"){let X=Z?` or in dist/server/${H8}`:"";throw Error(`The prompt "${J}" does not exist (looked for ${$}${X}).`)}throw K}if(G8())tJ.set($,W);return W}function rJ(J,$){if($.includes(J))throw Error(`The prompt "${J}" includes itself: ${[...$,J].join(" > ")}.`);return mQ(J).replace(yQ,(Q,Z)=>rJ(Z,[...$,J]))}class z8{static configure(J){OJ={...J},tJ.clear(),LJ=void 0}static render(J,$={}){return rJ(J,[]).replace(X8,(Q,Z)=>{if(!Object.hasOwn($,Z))throw Error(`The prompt "${J}" has no value for {{${Z}}}.`);return String($[Z])})}static placeholders(J){let $=[...rJ(J,[]).matchAll(X8)].map((Q)=>Q[1]);return[...new Set($)]}}class J$ extends D8{name="AgentJobDeadlineSweep";cron="* * * * *";async callback(){while(await v.sweep({limit:100})===100);}}var CJ=20;function F8(J,$){if($<=0||J.length===0)return null;let Q=(K,X)=>X.createdAt-K.createdAt||(K.id<X.id?1:-1);return["<jobs>","Background jobs that tools started in this conversation, running ones first. A running job's result replaces its tool result when it finishes. Do not start the same work again while a job for it is running.",...[...J.filter((K)=>K.state==="running").sort(Q),...J.filter((K)=>K.state!=="running").sort(Q)].slice(0,$).map((K)=>{let X=[`- ${K.id} (${K.toolName})`];if(K.state==="running")X.push(`running since ${$$(K.createdAt)}`);else if(K.state==="ok")X.push(`finished at ${$$(K.settledAt??K.updatedAt)}`);else{let G=K.error?`${K.error.code}: ${B8(K.error.message,200)}`:"failed";X.push(`failed at ${$$(K.settledAt??K.updatedAt)} (${G})`)}if(K.summary!==void 0)X.push(`summary: ${B8(JSON.stringify(K.summary),300)}`);if(K.orphaned)X.push("its tool call was lost when the turn that started it was cut short");return X.join("; ")}),"</jobs>"].join(`
3
3
  `)}function $$(J){return new Date(J).toISOString().replace(/\.\d{3}Z$/,"Z")}function B8(J,$){return J.length<=$?J:`${J.slice(0,$-1)}\u2026`}class Z${table;sql;dialect;connection;constructor(J,$={}){let Q=$.table??"gemi_agent_jobs";if(!/^[A-Za-z_][A-Za-z0-9_]*$/.test(Q))throw Error(`The agent jobs table name "${Q}" is not a plain identifier. Use letters, digits and underscores.`);this.table=Q,this.sql=J.sql,this.dialect=J.dialect,this.connection=J.name}async createTable(){for(let J of pQ(this.dialect,this.table))await this.sql.unsafe(J)}async transaction(J){if(this.connection===void 0||this.joinable())return J();return SJ(this.sql,()=>J(),{connection:this.connection})}async create(J){let $=this.q(),Q=this.clock($);await $`
4
4
  INSERT INTO ${this.name($)}
5
5
  (id, thread_id, run_id, tool_call_id, tool_name, owner, job, summary, state,
@@ -237,8 +237,8 @@ local held = redis.call('GET', KEYS[1])
237
237
  if not held then return ARGV[1] end
238
238
  return held`,Z0=`
239
239
  if redis.call('GET', KEYS[1]) == ARGV[1] then return redis.call('DEL', KEYS[1]) end
240
- return 0`;class d${injectedClient;prefix;constructor(J={}){this.injectedClient=J.client,this.prefix=J.prefix??"gemi:ai:receipt"}async claim(J,$){let Q=await this.client.send("EVAL",[Q0,"1",this.key(J),g9,u9($)]);if(Q==="claimed")return{status:"claimed"};let Z=String(Q??"");if(Z.startsWith(m$))return{status:"replay",result:JSON.parse(Z.slice(m$.length))};return{status:"blocked"}}async complete(J,$,Q){await this.client.send("SET",[this.key(J),m$+JSON.stringify($),"PX",u9(Q)])}async release(J){await this.client.send("EVAL",[Z0,"1",this.key(J),g9])}key(J){return`${this.prefix}:${J}`}get client(){if(this.injectedClient)return this.injectedClient;let J=c9(),$=J.bound(p$)?J.make(p$).client:void 0;if(!$)throw Error("RedisReceiptStore could not reach the Redis client. Register RedisServiceProvider on your application, or pass a client: new RedisReceiptStore({ client }).");return $}}function u9(J){return String(Math.max(1,Math.ceil(J-Date.now())))}var W0=86400000,K0=60000;class uJ{ttlMs;clientOwnedIds;threads=new Map;lastSweep=0;constructor(J={}){this.ttlMs=J.ttlMs??W0,this.clientOwnedIds=J.clientOwnedIds??!1}async createThread(J){let $=crypto.randomUUID();return this.threads.set($,{messages:[],touchedAt:Date.now()}),this.sweep(),{threadId:$}}async loadThread(J){this.sweep();let $=this.threads.get(J);if(!$)return this.clientOwnedIds?[]:null;return $.touchedAt=Date.now(),$.messages.slice()}async appendMessages(J,$){this.sweep();let Q=this.threads.get(J);if(!Q){if(!this.clientOwnedIds)throw Error(`Thread ${J} does not exist here, or has expired.`);Q={messages:[],touchedAt:Date.now()},this.threads.set(J,Q)}for(let Z of $){let W=Q.messages.findIndex((K)=>K.id===Z.id);if(W===-1)Q.messages.push(Z);else Q.messages[W]=Z}Q.touchedAt=Date.now()}async removeMessages(J,$){this.sweep();let Q=this.threads.get(J);if(!Q)return;let Z=new Set($);Q.messages=Q.messages.filter((W)=>!Z.has(W.id)),Q.touchedAt=Date.now()}async loadSummaries(J){return this.threads.get(J)?.summaries?.slice()??[]}async saveSummary(J,$){let Q=this.threads.get(J);if(!Q)return;Q.summaries=DJ(Q.summaries??[],$)}delete(J){this.threads.delete(J)}get size(){return this.threads.size}sweep(J=Date.now()){if(J-this.lastSweep<K0)return;this.lastSweep=J;for(let[$,Q]of this.threads)if(J-Q.touchedAt>this.ttlMs)this.threads.delete($)}}var i$=new uJ;function d9(J={}){return{messages:J.messages?[...J.messages]:[],pending:J.pending?[...J.pending]:[],error:null,threadId:J.threadId,seq:J.seq??-1,cursorRunId:J.cursorRunId,runMessageIds:[],loadedTools:[]}}function i9(J,$,Q=new Date().toISOString()){if(!($.event.type==="run-start"&&$.event.runId!==J.cursorRunId)&&$.seq<=J.seq)return J;return{...n9(J,$.event,Q),seq:$.seq}}function n9(J,$,Q){switch($.type){case"run-start":return{...J,messages:X0(J.messages,$.runId),runId:$.runId,cursorRunId:$.runId,threadId:$.threadId??J.threadId,runMessageIds:[],loadedTools:[],finishReason:void 0,usage:void 0};case"message-start":return l(J,$.messageId,Q,(Z)=>({...Z,role:$.role}));case"text-delta":if(p9(J,$.messageId))return J;return l(J,$.messageId,Q,(Z)=>({...Z,content:z0(Z.content,$.delta)}));case"reasoning-delta":if(p9(J,$.messageId))return J;return l(J,$.messageId,Q,(Z)=>({...Z,content:D0(Z.content,$.delta,$.id)}));case"output-delta":return l(J,$.messageId,Q,(Z)=>({...Z,content:l9(Z.content,{type:"output",value:$.snapshot,partial:!0},(W)=>W.type==="output")}));case"tool-call":return l(J,$.messageId,Q,(Z)=>{let W=Z.content.findIndex((D)=>D.type==="tool-call"&&D.toolCallId===$.part.toolCallId),K=W===-1?void 0:Z.content[W],X=$.part.progress??K?.progress,G=$.part.nested??K?.nested,V=$.part.attachments??K?.attachments,Y={...$.part,...X?{progress:X}:{},...G?{nested:G}:{},...V?{attachments:V}:{}},H=Z.content.slice();if(W===-1)H.push(Y);else H[W]=Y;return{...Z,content:H}});case"tool-search":{let Z=$.loaded.filter((W)=>!J.loadedTools.includes(W));if(Z.length===0)return J;return{...J,loadedTools:[...J.loadedTools,...Z]}}case"tool-progress":return m9(J,$.toolCallId,(Z)=>({...Z,progress:[...Z.progress??[],$.data]}));case"nested-event":{let Z=$;return m9(J,$.toolCallId,(W)=>{let K=W.nested??[],X=K.findIndex((H)=>H.runId===Z.runId),G=K[X]??{runId:Z.runId,agent:Z.agent,messages:[]},V=V0(G,Z,Q),Y=X===-1?[...K,V]:K.map((H,D)=>D===X?V:H);return{...W,nested:Y}})}case"tool-result":{let Z=l(J,$.messageId,Q,(W)=>({...W,content:l9(W.content,$.part,(K)=>K.type==="tool-result"&&K.toolCallId===$.part.toolCallId)}));return{...Z,pending:Z.pending.filter((W)=>W.toolCallId!==$.part.toolCallId)}}case"message":{let Z=J.messages.findIndex((X)=>X.id===$.message.id),W=J.messages.slice();if(Z===-1)W.push($.message);else W[Z]=$.message;let K=J.runMessageIds.includes($.message.id)?J.runMessageIds:[...J.runMessageIds,$.message.id];return{...J,messages:W,runMessageIds:K}}case"message-id":{let Z=J.messages.findIndex((G)=>G.id===$.localId);if(Z===-1){if(!$.message||J.messages.some((G)=>G.id===$.messageId))return J;return{...J,messages:[...J.messages,$.message]}}let W=J.messages[Z],K={localId:W.localId??W.id,...W.metadata?{metadata:W.metadata}:{}},X=J.messages.some((G)=>G.id===$.messageId)?J.messages.filter((G,V)=>V!==Z).map((G)=>G.id===$.messageId?{...G,...K}:G):J.messages.map((G,V)=>V===Z?{...G,...K,id:$.messageId}:G);return{...J,messages:X}}case"awaiting-input":return{...J,runId:$.runId,pending:[...$.pending]};case"message-end":return l(J,$.messageId,Q,(Z)=>({...Z,finishReason:$.finishReason,...$.outputTruncated?{outputTruncated:!0}:{},...$.usage?{usage:$.usage}:{},content:$.outputTruncated||$.finishReason==="length"?Z.content.filter((W)=>!(W.type==="output"&&W.partial)):Z.content.map((W)=>W.type==="output"&&W.partial?{...W,partial:!1}:W)}));case"usage":return{...J,usage:$.usage};case"error":return{...J,error:$.error,pending:[]};case"run-end":return{...J,runId:void 0,finishReason:$.finishReason,messages:o9(J,$.finishReason)};default:return J}}function X0(J,$){if(!J.some((Q)=>Q.runId===$&&Q.finishReason===void 0))return J;return J.map((Q)=>{if(Q.runId!==$||Q.finishReason!==void 0)return Q;let{runId:Z,...W}=Q;return{...W,content:[]}})}function o9(J,$){return J.messages.map((Q)=>Q.role==="assistant"&&J.runMessageIds.includes(Q.id)?Y0(Q,$):Q)}function Y0(J,$){let Q=J.content.map((W)=>W.type==="tool-call"&&W.nested?.some((K)=>K.finishReason===void 0)?{...W,nested:W.nested.map((K)=>K.finishReason===void 0?G0(K,$):K)}:W);if(J.finishReason===void 0)return{...J,finishReason:$,content:Q};return Q.some((W,K)=>W!==J.content[K])?{...J,content:Q}:J}function G0(J,$){let Q={messages:J.messages,pending:[],error:null,seq:-1,runMessageIds:J.messages.map((Z)=>Z.id),loadedTools:[]};return{...J,finishReason:$,messages:o9(Q,$)}}function m9(J,$,Q){for(let Z=J.messages.length-1;Z>=0;Z--){let W=J.messages[Z],K=W.content.findIndex((Y)=>Y.type==="tool-call"&&Y.toolCallId===$);if(K===-1)continue;if(W.finishReason!==void 0&&!H0(J,W,$))return J;let X=W.content.slice();X[K]=Q(X[K]);let G=J.messages.slice();G[Z]={...W,content:X};let V=J.runMessageIds.includes(W.id)?J.runMessageIds:[...J.runMessageIds,W.id];return{...J,runMessageIds:V,messages:G}}return J}function V0(J,$,Q){let Z={messages:J.messages,pending:[],error:null,seq:-1,runMessageIds:J.messages.map((K)=>K.id),loadedTools:[],finishReason:J.finishReason},W=n9(Z,$.event,Q);return{...J,...$.label!==void 0?{label:$.label}:{},messages:W.messages,...W.finishReason!==void 0?{finishReason:W.finishReason}:{},...W.usage!==void 0?{usage:W.usage}:{}}}function H0(J,$,Q){if($.finishReason!=="awaiting-input")return!1;return!J.messages.some((Z)=>Z.content.some((W)=>W.type==="tool-result"&&W.toolCallId===Q))}function p9(J,$){let Q=J.messages.find((Z)=>Z.id===$);return Q!==void 0&&Q.finishReason!==void 0}function l(J,$,Q,Z){let W=J.messages.findIndex((G)=>G.id===$),K=J.runMessageIds.includes($)?J.runMessageIds:[...J.runMessageIds,$];if(W===-1){let G={id:$,role:"assistant",content:[],createdAt:Q};return{...J,runMessageIds:K,messages:[...J.messages,Z(G)]}}let X=J.messages.slice();return X[W]=Z(X[W]),{...J,runMessageIds:K,messages:X}}function z0(J,$){let Q=J[J.length-1];if(Q&&Q.type==="text")return[...J.slice(0,-1),{type:"text",text:Q.text+$}];return[...J,{type:"text",text:$}]}function D0(J,$,Q){let Z=J[J.length-1];if(Z&&Z.type==="reasoning"&&Z.id===Q)return[...J.slice(0,-1),{...Z,text:(Z.text??"")+$}];return[...J,Q?{type:"reasoning",id:Q,text:$}:{type:"reasoning",text:$}]}function l9(J,$,Q){let Z=J.findIndex(Q);if(Z===-1)return[...J,$];let W=J.slice();return W[Z]=$,W}class o${store;threadId;report;chain=Promise.resolve();done=new Set;closed=!1;state;runId;constructor(J,$,Q,Z){this.store=J;this.threadId=$;this.report=Z;this.state=d9({messages:Q})}finish(J){if(this.closed)return;this.done.add(J.id),this.write(()=>[n$(J)])}frame(J){if(this.closed)return;let $=J.event;if($.type==="run-start")this.runId=$.runId;switch(this.state=i9(this.state,J),$.type){case"message":this.write(()=>[n$($.message)]);return;case"tool-call":if($.part.partial)return;this.checkpoint($.messageId);return;case"message-start":case"tool-result":this.checkpoint($.messageId);return;default:return}}close(J=[]){this.closed=!0;for(let $ of J)this.done.add($.id)}settled(){return this.chain}checkpoint(J){if(this.done.has(J))return;let $=this.state.messages.find((Z)=>Z.id===J);if(!$)return;let Q=this.runId;this.write(()=>{let Z=n$($);if(Z.finishReason===void 0&&Q)Z.runId=Q;return[Z]})}write(J){let $;try{$=J()}catch(Q){this.report(Q);return}this.chain=this.chain.then(()=>this.store.appendMessages(this.threadId,$)).catch((Q)=>this.report(Q))}}function n$(J){return structuredClone(J)}async function s9(J,$){let Q=[],Z=null,W=J.slice();for(let K=0;K<W.length;K++){let X=W[K];if(X.role!=="assistant"||X.finishReason!==void 0)continue;if(X.runId&&await $(X.runId))continue;Z??=new Set(J.flatMap((Y)=>Y.content.flatMap((H)=>H.type==="tool-result"?[H.toolCallId]:[])));let G=X.content.map((Y)=>Y.type==="tool-call"?a9(Y):Y);for(let Y of X.content){if(Y.type!=="tool-call"||Z.has(Y.toolCallId))continue;let H={type:"tool-result",toolCallId:Y.toolCallId,name:Y.name,status:"denied",cause:"interrupted"};G.push(H)}let V={...X,content:G,finishReason:"interrupted"};W[K]=V,Q.push(V)}return{messages:W,settled:Q}}function a9(J){let{partial:$,...Q}=J;if(!Q.nested?.some((Z)=>Z.finishReason===void 0))return Q;return{...Q,nested:Q.nested.map(B0)}}function B0(J){if(J.finishReason!==void 0)return J;return{...J,finishReason:"interrupted",messages:J.messages.map(($)=>$.role==="assistant"&&$.finishReason===void 0?{...$,finishReason:"interrupted",content:$.content.map((Q)=>Q.type==="tool-call"?a9(Q):Q)}:$)}}var F0=50,P0=["running","ok","error"];async function e9(J,$){let{store:Q,threadId:Z}=$,W=Math.max(F0,$.scan??0),K=await Q.listForThread(Z,{limit:W}),X,G=async(B)=>{if(B.state!=="running")return B;if(X??=await t9(Q),B.deadlineAt>X)return B;return await r9(Q,B),await Q.get(B.id)??B};for(let B=0;B<K.length;B++)K[B]=await G(K[B]);let V=new Map(K.map((B)=>[B.id,B])),Y=J.slice(),H=[],D=new Set;for(let B=0;B<Y.length;B++){let U=Y[B],N=null;for(let F=0;F<U.content.length;F++){let P=U.content[F];if(P.type==="tool-call")D.add(P.toolCallId);if(P.type!=="tool-result"||P.status!=="running")continue;let L=P.job?.id,O=L?V.get(L):void 0;if(L&&O===void 0){let j=await Q.get(L);if(O=j?await G(j):void 0,O)V.set(L,O)}if(O?.state==="running")continue;N??=U.content.slice(),N[F]=N0(P,O,$.outputSchemaFor,$.modelOutputFor)}if(N){let F={...U,content:N};Y[B]=F,H.push(F)}}let z=[];for(let B of K){if(B.orphaned||D.has(B.toolCallId))continue;if(await $.isRunLive(B.runId))continue;z.push(B)}return{messages:Y,settled:H,orphans:z,jobs:K}}async function JQ(J,$,Q){for(let Z of $)try{await J.transition(Z.id,P0,{orphaned:!0})}catch(W){Q(W)}}function N0(J,$,Q,Z){let W={type:"tool-result",toolCallId:J.toolCallId,name:J.name},K=(V,Y)=>{let H=Z?.(String(J.name),V);return{...W,status:"ok",job:Y,output:V,...H!==void 0?{modelOutput:H}:{}}};if(!$)return{...W,status:"error",job:J.job,error:{code:"tool_error",message:`The background job for "${String(J.name)}" can no longer be found, so its result was lost. It may have run in part or in full: check its effects before repeating it.`,toolCallId:J.toolCallId,retryable:!0}};let X={id:$.id,...$.summary!==void 0?{summary:$.summary}:{},...$.usage?{usage:$.usage}:{}};if($.state==="error")return{...W,status:"error",job:X,error:$.error??{code:"tool_error",message:`The background job for "${String(J.name)}" failed.`,toolCallId:J.toolCallId,retryable:!0}};let G=Q?.(String(J.name));if(G){let V=G.safeParse($.output);if(V.ok===!1)return{...W,status:"error",job:X,error:{code:"invalid_tool_result",message:`The background job for "${String(J.name)}" finished with an output that does not match the tool's output schema: ${V.errors.join(", ")}`,toolCallId:J.toolCallId,retryable:!0}};return K(V.value,X)}return K($.output,X)}class aJ extends Error{status;code;kind;constructor(J,$){super(J);this.name="AgentTurnError",this.status=$.status,this.code=$.code,this.kind=$.kind}static async from(J){let $={};try{let Z=await J.json();if(Z?.error&&typeof Z.error==="object")$=Z.error}catch{}let Q=(Z)=>typeof $[Z]==="string"?$[Z]:void 0;return new aJ(Q("message")??`The agent turn was refused with status ${J.status}.`,{status:J.status,code:Q("code"),kind:Q("kind")})}}function U0(J){for(let $=J.length-1;$>=0;$--){let Q=J[$];if(Q.role!=="assistant")continue;return Q.content.map((Z)=>Z.type==="text"?Z.text:"").join("")}return""}var L0=zQ,cJ=new Map,$Q=new WeakMap,FJ=new WeakMap,QQ="http://gemi.internal/__gemi/agent-turn",mJ=new Map,O0=4194304,C0=1000,_0=5,pJ=65536,lJ=()=>{};class TQ{byKey=new Map;take(J,$,Q){let Z=this.byKey.get(J);if(!Z?.has($)&&(Z?.size??0)>=Q)return null;if(!Z)Z=new Map,this.byKey.set(J,Z);Z.set($,(Z.get($)??0)+1);let W=!1;return()=>{if(W)return;W=!0;let K=this.byKey.get(J),X=(K?.get($)??1)-1;if(!K)return;if(X>0)K.set($,X);else if(K.delete($),K.size===0)this.byKey.delete(J)}}}var ZQ=new WeakMap;function M0(J){let $=ZQ.get(J);if(!$)$=new TQ,ZQ.set(J,$);return $}function S0(J){return J}class W8 extends L0{static kind="agent-controller";hooks;store=i$;liveRuns=u$;voice;voiceStore=h$;attachments=sJ;attachmentStorage=FQ;fileOwners=c$;nonces=$8;receipts;requireKnownFiles=!1;hookHoldMs=30000;instructions(J,$){return this.hooks?.instructions?.(J,$)}reasoning(J,$){return this.hooks?.reasoning?.(J,$)}skills(J,$){return this.hooks?.skills?.(J,$)}context(J,$){let Q=this.hooks?.context;if(Q)return Q(J,$);return{}}memoryScopes(J,$){let Q=this.hooks?.memoryScopes;if(Q)return Q(J,$);return{}}memoryMaxTokens=void 0;requireThread=!1;maxBodyBytes=O0;maxHistoryMessages=C0;contextWindow=void 0;prepareStep(J,$){return this.hooks?.prepareStep?.(J,$)}maxConcurrentRuns=_0;runLimitKey(J,$){let Q=this.hooks?.runLimitKey;if(Q)return Q(J,$);return $.owner}authorizeRequest(J,$){let Q=this.hooks?.authorizeRequest;if(Q)return Q(J,$);return this.resource?.authorize(J,$)}resource;runOwner(J){let $=this.hooks?.runOwner;if($)return $(J);let Q=J.ctx?.()?.user,Z=Q?.id??Q?.publicId;if(Z!==void 0&&Z!==null&&String(Z)!=="")return`user:${String(Z)}`;return null}static async startTurn(J){let{threadId:$}=J;if(typeof $!=="string"||$==="")throw TypeError("AgentController.startTurn needs a `threadId`: a server turn is stored on a thread. Create one with the store's `createThread`.");let Q={...J.turn,...J.text!==void 0?{text:J.text}:{}},Z={...J.body,threadId:$,turn:Q},W=new q(new Request(QQ,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(Z)}),{},"api",new URL(QQ).pathname),K=new this;FJ.set(W,null);let X=await h.run(W,()=>K.stream(W),{user:J.user??null}),G=FJ.get(W);if(!G)throw await aJ.from(X);FJ.delete(W),X.body?.cancel().catch(lJ);let{run:V,hooks:Y}=G,H=[],D=(async()=>{for await(let B of V)if(B.type==="awaiting-input")H=B.pending})().catch(lJ),z;return{runId:V.runId,threadId:$,run:V,stop:(B)=>V.stop(B),result:()=>z??=(async()=>{let B=await V.result();await Promise.all([Y,D]);let U=B.messages;return{...B,threadId:$,text:U0(U),pending:B.finishReason==="awaiting-input"?H:[]}})()}}async stream(J=new q){let $=await PJ(J,this.maxBodyBytes);if($.error)return JJ($);let Q=$.body,Z=typeof Q.threadId==="string"?Q.threadId:void 0,W=q0(Q);if(W.error)return JJ({body:{},error:W.error});let K=W.turn,X=Z!==void 0&&Q.regenerate===!0,G=typeof Q.clientRunId==="string"?Q.clientRunId:void 0,V=dJ(Q);if(this.requireThread&&!Z)return M(400,{code:"thread_required",message:"This agent takes a turn only on a thread: send a threadId."});if(X&&!this.store.removeMessages)return M(501,{code:"regenerate_unsupported",message:"This agent's store cannot remove messages, so a thread's answer cannot be regenerated. Implement `removeMessages` on the AgentStore."});if(!Z&&Array.isArray(Q.messages)&&Q.messages.length>this.maxHistoryMessages)return e$(413,"history_too_long",`The conversation has ${Q.messages.length} messages; this agent takes at most ${this.maxHistoryMessages}.`);let Y=await this.runOwner(J),H=G?{cancelled:!1,owner:Y}:null;if(H)mJ.set(G,H);let D=null,z=[],B=async()=>{try{return await U()}finally{if(Z&&z.length>0&&D===null)await this.store.appendMessages(Z,z).catch((N)=>this.reportHookFailure(N))}},U=async()=>{let N,F=null;if(Z){let E=await this.store.loadThread(Z);if(!E)return M(404,{code:"thread_not_found",message:`Thread ${Z} does not exist here, or has expired.`});let i=await this.settleThread(Z,E,{write:!0});if(N=i.messages,F=this.jobsBlock(i.jobs),X){let $J=f0(N);if(!$J)return M(409,{code:"nothing_to_regenerate",message:`Thread ${Z} has no user turn to answer again.`});z=N.slice($J.index),await this.store.removeMessages(Z,z.map((IQ)=>IQ.id)),N=N.slice(0,$J.index),K=K?.localId?{...$J.turn,localId:K.localId}:$J.turn}}else N=Array.isArray(Q.messages)?Q.messages:[],p0(this.nonces);let P=[await this.instructions(J,{body:V})||void 0,F??void 0].filter(Boolean).join(`
240
+ return 0`;class d${injectedClient;prefix;constructor(J={}){this.injectedClient=J.client,this.prefix=J.prefix??"gemi:ai:receipt"}async claim(J,$){let Q=await this.client.send("EVAL",[Q0,"1",this.key(J),g9,u9($)]);if(Q==="claimed")return{status:"claimed"};let Z=String(Q??"");if(Z.startsWith(m$))return{status:"replay",result:JSON.parse(Z.slice(m$.length))};return{status:"blocked"}}async complete(J,$,Q){await this.client.send("SET",[this.key(J),m$+JSON.stringify($),"PX",u9(Q)])}async release(J){await this.client.send("EVAL",[Z0,"1",this.key(J),g9])}key(J){return`${this.prefix}:${J}`}get client(){if(this.injectedClient)return this.injectedClient;let J=c9(),$=J.bound(p$)?J.make(p$).client:void 0;if(!$)throw Error("RedisReceiptStore could not reach the Redis client. Register RedisServiceProvider on your application, or pass a client: new RedisReceiptStore({ client }).");return $}}function u9(J){return String(Math.max(1,Math.ceil(J-Date.now())))}var W0=86400000,K0=60000;class uJ{ttlMs;clientOwnedIds;threads=new Map;lastSweep=0;constructor(J={}){this.ttlMs=J.ttlMs??W0,this.clientOwnedIds=J.clientOwnedIds??!1}async createThread(J){let $=crypto.randomUUID();return this.threads.set($,{messages:[],touchedAt:Date.now()}),this.sweep(),{threadId:$}}async loadThread(J){this.sweep();let $=this.threads.get(J);if(!$)return this.clientOwnedIds?[]:null;return $.touchedAt=Date.now(),$.messages.slice()}async appendMessages(J,$){this.sweep();let Q=this.threads.get(J);if(!Q){if(!this.clientOwnedIds)throw Error(`Thread ${J} does not exist here, or has expired.`);Q={messages:[],touchedAt:Date.now()},this.threads.set(J,Q)}for(let Z of $){let W=JSON.parse(JSON.stringify(Z)),K=Q.messages.findIndex((X)=>X.id===W.id);if(K===-1)Q.messages.push(W);else Q.messages[K]=W}Q.touchedAt=Date.now()}async removeMessages(J,$){this.sweep();let Q=this.threads.get(J);if(!Q)return;let Z=new Set($);Q.messages=Q.messages.filter((W)=>!Z.has(W.id)),Q.touchedAt=Date.now()}async loadSummaries(J){return this.threads.get(J)?.summaries?.slice()??[]}async saveSummary(J,$){let Q=this.threads.get(J);if(!Q)return;Q.summaries=DJ(Q.summaries??[],$)}delete(J){this.threads.delete(J)}get size(){return this.threads.size}sweep(J=Date.now()){if(J-this.lastSweep<K0)return;this.lastSweep=J;for(let[$,Q]of this.threads)if(J-Q.touchedAt>this.ttlMs)this.threads.delete($)}}var i$=new uJ;function d9(J={}){return{messages:J.messages?[...J.messages]:[],pending:J.pending?[...J.pending]:[],error:null,threadId:J.threadId,seq:J.seq??-1,cursorRunId:J.cursorRunId,runMessageIds:[],loadedTools:[]}}function i9(J,$,Q=new Date().toISOString()){if(!($.event.type==="run-start"&&$.event.runId!==J.cursorRunId)&&$.seq<=J.seq)return J;return{...n9(J,$.event,Q),seq:$.seq}}function n9(J,$,Q){switch($.type){case"run-start":return{...J,messages:X0(J.messages,$.runId),runId:$.runId,cursorRunId:$.runId,threadId:$.threadId??J.threadId,runMessageIds:[],loadedTools:[],finishReason:void 0,usage:void 0};case"message-start":return l(J,$.messageId,Q,(Z)=>({...Z,role:$.role}));case"text-delta":if(p9(J,$.messageId))return J;return l(J,$.messageId,Q,(Z)=>({...Z,content:z0(Z.content,$.delta)}));case"reasoning-delta":if(p9(J,$.messageId))return J;return l(J,$.messageId,Q,(Z)=>({...Z,content:D0(Z.content,$.delta,$.id)}));case"output-delta":return l(J,$.messageId,Q,(Z)=>({...Z,content:l9(Z.content,{type:"output",value:$.snapshot,partial:!0},(W)=>W.type==="output")}));case"tool-call":return l(J,$.messageId,Q,(Z)=>{let W=Z.content.findIndex((D)=>D.type==="tool-call"&&D.toolCallId===$.part.toolCallId),K=W===-1?void 0:Z.content[W],X=$.part.progress??K?.progress,G=$.part.nested??K?.nested,V=$.part.attachments??K?.attachments,Y={...$.part,...X?{progress:X}:{},...G?{nested:G}:{},...V?{attachments:V}:{}},H=Z.content.slice();if(W===-1)H.push(Y);else H[W]=Y;return{...Z,content:H}});case"tool-search":{let Z=$.loaded.filter((W)=>!J.loadedTools.includes(W));if(Z.length===0)return J;return{...J,loadedTools:[...J.loadedTools,...Z]}}case"tool-progress":return m9(J,$.toolCallId,(Z)=>({...Z,progress:[...Z.progress??[],$.data]}));case"nested-event":{let Z=$;return m9(J,$.toolCallId,(W)=>{let K=W.nested??[],X=K.findIndex((H)=>H.runId===Z.runId),G=K[X]??{runId:Z.runId,agent:Z.agent,messages:[]},V=V0(G,Z,Q),Y=X===-1?[...K,V]:K.map((H,D)=>D===X?V:H);return{...W,nested:Y}})}case"tool-result":{let Z=l(J,$.messageId,Q,(W)=>({...W,content:l9(W.content,$.part,(K)=>K.type==="tool-result"&&K.toolCallId===$.part.toolCallId)}));return{...Z,pending:Z.pending.filter((W)=>W.toolCallId!==$.part.toolCallId)}}case"message":{let Z=J.messages.findIndex((X)=>X.id===$.message.id),W=J.messages.slice();if(Z===-1)W.push($.message);else W[Z]=$.message;let K=J.runMessageIds.includes($.message.id)?J.runMessageIds:[...J.runMessageIds,$.message.id];return{...J,messages:W,runMessageIds:K}}case"message-id":{let Z=J.messages.findIndex((G)=>G.id===$.localId);if(Z===-1){if(!$.message||J.messages.some((G)=>G.id===$.messageId))return J;return{...J,messages:[...J.messages,$.message]}}let W=J.messages[Z],K={localId:W.localId??W.id,...W.metadata?{metadata:W.metadata}:{}},X=J.messages.some((G)=>G.id===$.messageId)?J.messages.filter((G,V)=>V!==Z).map((G)=>G.id===$.messageId?{...G,...K}:G):J.messages.map((G,V)=>V===Z?{...G,...K,id:$.messageId}:G);return{...J,messages:X}}case"awaiting-input":return{...J,runId:$.runId,pending:[...$.pending]};case"message-end":return l(J,$.messageId,Q,(Z)=>({...Z,finishReason:$.finishReason,...$.outputTruncated?{outputTruncated:!0}:{},...$.usage?{usage:$.usage}:{},content:$.outputTruncated||$.finishReason==="length"?Z.content.filter((W)=>!(W.type==="output"&&W.partial)):Z.content.map((W)=>W.type==="output"&&W.partial?{...W,partial:!1}:W)}));case"usage":return{...J,usage:$.usage};case"error":return{...J,error:$.error,pending:[]};case"run-end":return{...J,runId:void 0,finishReason:$.finishReason,messages:o9(J,$.finishReason)};default:return J}}function X0(J,$){if(!J.some((Q)=>Q.runId===$&&Q.finishReason===void 0))return J;return J.map((Q)=>{if(Q.runId!==$||Q.finishReason!==void 0)return Q;let{runId:Z,...W}=Q;return{...W,content:[]}})}function o9(J,$){return J.messages.map((Q)=>Q.role==="assistant"&&J.runMessageIds.includes(Q.id)?Y0(Q,$):Q)}function Y0(J,$){let Q=J.content.map((W)=>W.type==="tool-call"&&W.nested?.some((K)=>K.finishReason===void 0)?{...W,nested:W.nested.map((K)=>K.finishReason===void 0?G0(K,$):K)}:W);if(J.finishReason===void 0)return{...J,finishReason:$,content:Q};return Q.some((W,K)=>W!==J.content[K])?{...J,content:Q}:J}function G0(J,$){let Q={messages:J.messages,pending:[],error:null,seq:-1,runMessageIds:J.messages.map((Z)=>Z.id),loadedTools:[]};return{...J,finishReason:$,messages:o9(Q,$)}}function m9(J,$,Q){for(let Z=J.messages.length-1;Z>=0;Z--){let W=J.messages[Z],K=W.content.findIndex((Y)=>Y.type==="tool-call"&&Y.toolCallId===$);if(K===-1)continue;if(W.finishReason!==void 0&&!H0(J,W,$))return J;let X=W.content.slice();X[K]=Q(X[K]);let G=J.messages.slice();G[Z]={...W,content:X};let V=J.runMessageIds.includes(W.id)?J.runMessageIds:[...J.runMessageIds,W.id];return{...J,runMessageIds:V,messages:G}}return J}function V0(J,$,Q){let Z={messages:J.messages,pending:[],error:null,seq:-1,runMessageIds:J.messages.map((K)=>K.id),loadedTools:[],finishReason:J.finishReason},W=n9(Z,$.event,Q);return{...J,...$.label!==void 0?{label:$.label}:{},messages:W.messages,...W.finishReason!==void 0?{finishReason:W.finishReason}:{},...W.usage!==void 0?{usage:W.usage}:{}}}function H0(J,$,Q){if($.finishReason!=="awaiting-input")return!1;return!J.messages.some((Z)=>Z.content.some((W)=>W.type==="tool-result"&&W.toolCallId===Q))}function p9(J,$){let Q=J.messages.find((Z)=>Z.id===$);return Q!==void 0&&Q.finishReason!==void 0}function l(J,$,Q,Z){let W=J.messages.findIndex((G)=>G.id===$),K=J.runMessageIds.includes($)?J.runMessageIds:[...J.runMessageIds,$];if(W===-1){let G={id:$,role:"assistant",content:[],createdAt:Q};return{...J,runMessageIds:K,messages:[...J.messages,Z(G)]}}let X=J.messages.slice();return X[W]=Z(X[W]),{...J,runMessageIds:K,messages:X}}function z0(J,$){let Q=J[J.length-1];if(Q&&Q.type==="text")return[...J.slice(0,-1),{type:"text",text:Q.text+$}];return[...J,{type:"text",text:$}]}function D0(J,$,Q){let Z=J[J.length-1];if(Z&&Z.type==="reasoning"&&Z.id===Q)return[...J.slice(0,-1),{...Z,text:(Z.text??"")+$}];return[...J,Q?{type:"reasoning",id:Q,text:$}:{type:"reasoning",text:$}]}function l9(J,$,Q){let Z=J.findIndex(Q);if(Z===-1)return[...J,$];let W=J.slice();return W[Z]=$,W}class o${store;threadId;report;chain=Promise.resolve();done=new Set;closed=!1;state;runId;constructor(J,$,Q,Z){this.store=J;this.threadId=$;this.report=Z;this.state=d9({messages:Q})}finish(J){if(this.closed)return;this.done.add(J.id),this.write(()=>[n$(J)])}frame(J){if(this.closed)return;let $=J.event;if($.type==="run-start")this.runId=$.runId;switch(this.state=i9(this.state,J),$.type){case"message":this.write(()=>[n$($.message)]);return;case"tool-call":if($.part.partial)return;this.checkpoint($.messageId);return;case"message-start":case"tool-result":this.checkpoint($.messageId);return;default:return}}close(J=[]){this.closed=!0;for(let $ of J)this.done.add($.id)}settled(){return this.chain}checkpoint(J){if(this.done.has(J))return;let $=this.state.messages.find((Z)=>Z.id===J);if(!$)return;let Q=this.runId;this.write(()=>{let Z=n$($);if(Z.finishReason===void 0&&Q)Z.runId=Q;return[Z]})}write(J){let $;try{$=J()}catch(Q){this.report(Q);return}this.chain=this.chain.then(()=>this.store.appendMessages(this.threadId,$)).catch((Q)=>this.report(Q))}}function n$(J){return structuredClone(J)}async function s9(J,$){let Q=[],Z=null,W=J.slice();for(let K=0;K<W.length;K++){let X=W[K];if(X.role!=="assistant"||X.finishReason!==void 0)continue;if(X.runId&&await $(X.runId))continue;Z??=new Set(J.flatMap((Y)=>Y.content.flatMap((H)=>H.type==="tool-result"?[H.toolCallId]:[])));let G=X.content.map((Y)=>Y.type==="tool-call"?a9(Y):Y);for(let Y of X.content){if(Y.type!=="tool-call"||Z.has(Y.toolCallId))continue;let H={type:"tool-result",toolCallId:Y.toolCallId,name:Y.name,status:"denied",cause:"interrupted"};G.push(H)}let V={...X,content:G,finishReason:"interrupted"};W[K]=V,Q.push(V)}return{messages:W,settled:Q}}function a9(J){let{partial:$,...Q}=J;if(!Q.nested?.some((Z)=>Z.finishReason===void 0))return Q;return{...Q,nested:Q.nested.map(B0)}}function B0(J){if(J.finishReason!==void 0)return J;return{...J,finishReason:"interrupted",messages:J.messages.map(($)=>$.role==="assistant"&&$.finishReason===void 0?{...$,finishReason:"interrupted",content:$.content.map((Q)=>Q.type==="tool-call"?a9(Q):Q)}:$)}}var F0=50,P0=["running","ok","error"];async function e9(J,$){let{store:Q,threadId:Z}=$,W=Math.max(F0,$.scan??0),K=await Q.listForThread(Z,{limit:W}),X,G=async(B)=>{if(B.state!=="running")return B;if(X??=await t9(Q),B.deadlineAt>X)return B;return await r9(Q,B),await Q.get(B.id)??B};for(let B=0;B<K.length;B++)K[B]=await G(K[B]);let V=new Map(K.map((B)=>[B.id,B])),Y=J.slice(),H=[],D=new Set;for(let B=0;B<Y.length;B++){let U=Y[B],N=null;for(let F=0;F<U.content.length;F++){let P=U.content[F];if(P.type==="tool-call")D.add(P.toolCallId);if(P.type!=="tool-result"||P.status!=="running")continue;let L=P.job?.id,O=L?V.get(L):void 0;if(L&&O===void 0){let j=await Q.get(L);if(O=j?await G(j):void 0,O)V.set(L,O)}if(O?.state==="running")continue;N??=U.content.slice(),N[F]=N0(P,O,$.outputSchemaFor,$.modelOutputFor)}if(N){let F={...U,content:N};Y[B]=F,H.push(F)}}let z=[];for(let B of K){if(B.orphaned||D.has(B.toolCallId))continue;if(await $.isRunLive(B.runId))continue;z.push(B)}return{messages:Y,settled:H,orphans:z,jobs:K}}async function JQ(J,$,Q){for(let Z of $)try{await J.transition(Z.id,P0,{orphaned:!0})}catch(W){Q(W)}}function N0(J,$,Q,Z){let W={type:"tool-result",toolCallId:J.toolCallId,name:J.name},K=(V,Y)=>{let H=Z?.(String(J.name),V);return{...W,status:"ok",job:Y,output:V,...H!==void 0?{modelOutput:H}:{}}};if(!$)return{...W,status:"error",job:J.job,error:{code:"tool_error",message:`The background job for "${String(J.name)}" can no longer be found, so its result was lost. It may have run in part or in full: check its effects before repeating it.`,toolCallId:J.toolCallId,retryable:!0}};let X={id:$.id,...$.summary!==void 0?{summary:$.summary}:{},...$.usage?{usage:$.usage}:{}};if($.state==="error")return{...W,status:"error",job:X,error:$.error??{code:"tool_error",message:`The background job for "${String(J.name)}" failed.`,toolCallId:J.toolCallId,retryable:!0}};let G=Q?.(String(J.name));if(G){let V=G.safeParse($.output);if(V.ok===!1)return{...W,status:"error",job:X,error:{code:"invalid_tool_result",message:`The background job for "${String(J.name)}" finished with an output that does not match the tool's output schema: ${V.errors.join(", ")}`,toolCallId:J.toolCallId,retryable:!0}};return K(V.value,X)}return K($.output,X)}class aJ extends Error{status;code;kind;constructor(J,$){super(J);this.name="AgentTurnError",this.status=$.status,this.code=$.code,this.kind=$.kind}static async from(J){let $={};try{let Z=await J.json();if(Z?.error&&typeof Z.error==="object")$=Z.error}catch{}let Q=(Z)=>typeof $[Z]==="string"?$[Z]:void 0;return new aJ(Q("message")??`The agent turn was refused with status ${J.status}.`,{status:J.status,code:Q("code"),kind:Q("kind")})}}function U0(J){for(let $=J.length-1;$>=0;$--){let Q=J[$];if(Q.role!=="assistant")continue;return Q.content.map((Z)=>Z.type==="text"?Z.text:"").join("")}return""}var L0=zQ,cJ=new Map,$Q=new WeakMap,FJ=new WeakMap,QQ="http://gemi.internal/__gemi/agent-turn",mJ=new Map,O0=4194304,C0=1000,_0=5,pJ=65536,lJ=()=>{};class TQ{byKey=new Map;take(J,$,Q){let Z=this.byKey.get(J);if(!Z?.has($)&&(Z?.size??0)>=Q)return null;if(!Z)Z=new Map,this.byKey.set(J,Z);Z.set($,(Z.get($)??0)+1);let W=!1;return()=>{if(W)return;W=!0;let K=this.byKey.get(J),X=(K?.get($)??1)-1;if(!K)return;if(X>0)K.set($,X);else if(K.delete($),K.size===0)this.byKey.delete(J)}}}var ZQ=new WeakMap;function M0(J){let $=ZQ.get(J);if(!$)$=new TQ,ZQ.set(J,$);return $}function S0(J){return J}class W8 extends L0{static kind="agent-controller";hooks;store=i$;liveRuns=u$;voice;voiceStore=h$;attachments=sJ;attachmentStorage=FQ;fileOwners=c$;nonces=$8;receipts;requireKnownFiles=!1;hookHoldMs=30000;instructions(J,$){return this.hooks?.instructions?.(J,$)}reasoning(J,$){return this.hooks?.reasoning?.(J,$)}skills(J,$){return this.hooks?.skills?.(J,$)}context(J,$){let Q=this.hooks?.context;if(Q)return Q(J,$);return{}}memoryScopes(J,$){let Q=this.hooks?.memoryScopes;if(Q)return Q(J,$);return{}}memoryMaxTokens=void 0;requireThread=!1;maxBodyBytes=O0;maxHistoryMessages=C0;contextWindow=void 0;prepareStep(J,$){return this.hooks?.prepareStep?.(J,$)}maxConcurrentRuns=_0;runLimitKey(J,$){let Q=this.hooks?.runLimitKey;if(Q)return Q(J,$);return $.owner}authorizeRequest(J,$){let Q=this.hooks?.authorizeRequest;if(Q)return Q(J,$);return this.resource?.authorize(J,$)}resource;runOwner(J){let $=this.hooks?.runOwner;if($)return $(J);let Q=J.ctx?.()?.user,Z=Q?.id??Q?.publicId;if(Z!==void 0&&Z!==null&&String(Z)!=="")return`user:${String(Z)}`;return null}static async startTurn(J){let{threadId:$}=J;if(typeof $!=="string"||$==="")throw TypeError("AgentController.startTurn needs a `threadId`: a server turn is stored on a thread. Create one with the store's `createThread`.");let Q={...J.turn,...J.text!==void 0?{text:J.text}:{}},Z={...J.body,threadId:$,turn:Q},W=new q(new Request(QQ,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(Z)}),{},"api",new URL(QQ).pathname),K=new this;FJ.set(W,null);let X=await h.run(W,()=>K.stream(W),{user:J.user??null}),G=FJ.get(W);if(!G)throw await aJ.from(X);FJ.delete(W),X.body?.cancel().catch(lJ);let{run:V,hooks:Y}=G,H=[],D=(async()=>{for await(let B of V)if(B.type==="awaiting-input")H=B.pending})().catch(lJ),z;return{runId:V.runId,threadId:$,run:V,stop:(B)=>V.stop(B),result:()=>z??=(async()=>{let B=await V.result();await Promise.all([Y,D]);let U=B.messages;return{...B,threadId:$,text:U0(U),pending:B.finishReason==="awaiting-input"?H:[]}})()}}async stream(J=new q){let $=await PJ(J,this.maxBodyBytes);if($.error)return JJ($);let Q=$.body,Z=typeof Q.threadId==="string"?Q.threadId:void 0,W=q0(Q);if(W.error)return JJ({body:{},error:W.error});let K=W.turn,X=Z!==void 0&&Q.regenerate===!0,G=typeof Q.clientRunId==="string"?Q.clientRunId:void 0,V=dJ(Q);if(this.requireThread&&!Z)return M(400,{code:"thread_required",message:"This agent takes a turn only on a thread: send a threadId."});if(X&&!this.store.removeMessages)return M(501,{code:"regenerate_unsupported",message:"This agent's store cannot remove messages, so a thread's answer cannot be regenerated. Implement `removeMessages` on the AgentStore."});if(!Z&&Array.isArray(Q.messages)&&Q.messages.length>this.maxHistoryMessages)return e$(413,"history_too_long",`The conversation has ${Q.messages.length} messages; this agent takes at most ${this.maxHistoryMessages}.`);let Y=await this.runOwner(J),H=G?{cancelled:!1,owner:Y}:null;if(H)mJ.set(G,H);let D=null,z=[],B=async()=>{try{return await U()}finally{if(Z&&z.length>0&&D===null)await this.store.appendMessages(Z,z).catch((N)=>this.reportHookFailure(N))}},U=async()=>{let N,F=null;if(Z){let E=await this.store.loadThread(Z);if(!E)return M(404,{code:"thread_not_found",message:`Thread ${Z} does not exist here, or has expired.`});let i=await this.settleThread(Z,E,{write:!0});if(N=i.messages,F=this.jobsBlock(i.jobs),X){let $J=f0(N);if(!$J)return M(409,{code:"nothing_to_regenerate",message:`Thread ${Z} has no user turn to answer again.`});z=N.slice($J.index),await this.store.removeMessages(Z,z.map((IQ)=>IQ.id)),N=N.slice(0,$J.index),K=K?.localId?{...$J.turn,localId:K.localId}:$J.turn}}else N=Array.isArray(Q.messages)?Q.messages:[],p0(this.nonces);let P=[await this.instructions(J,{body:V})||void 0,F??void 0].filter(Boolean).join(`
241
241
 
242
242
  `)||void 0,L=await this.context(J,{body:V}),O=await this.reasoning(J,{body:V})||void 0,j=await this.skills(J,{body:V})||void 0,k=await this.attachmentsFor(J,Z,{body:V}),I=this.agent.memory?await this.memoryScopes(J,{body:V}):void 0;if(H?.cancelled)return GQ();let x=Z?new o$(this.store,Z,N,(E)=>this.reportHookFailure(E)):null,d=`run_${crypto.randomUUID()}`,_={req:J,runId:d,threadId:Z},R={id:null,notified:Promise.resolve()},C=this.agent.stream({runId:d,messages:N,turn:K,threadId:Z,...x?{onMessage:(E)=>x.finish(E)}:{},onTurn:(E)=>{if(R.id!==null)return;R.id=E.id;let i=x?x.settled():Promise.resolve();R.notified=i.then(()=>this.safely(()=>this.onMessage(E,_)))},instructions:P,...O?{reasoning:O}:{},...j&&j.length>0?{skills:j}:{},context:L,attachments:k,body:V,redactError:(E,i)=>this.redactError(E,i,_),nonces:this.nonces,receipts:this.receipts,subject:Y,...I?{memory:{scopes:I,...this.memoryMaxTokens!==void 0?{maxTokens:this.memoryMaxTokens}:{}}}:{},...Z?{jobs:{owner:Y}}:{},...this.contextWindow!==void 0?{contextWindow:this.contextWindow}:{},...Z&&AQ(this.store)?{summaryStore:this.store}:{},...this.prepareStep!==W8.prototype.prepareStep||this.hooks?.prepareStep?{prepareStep:(E)=>this.prepareStep(E,_)}:{}}),xQ=this.liveRuns.register(C,{threadId:Z,owner:Y,clientRunId:G,onEvent:(E)=>this.dispatchEvent(E,_),onInternalError:(E)=>this.reportHookFailure(E),maxRunDurationMs:this.agent.maxRunDurationMs});if(D=C,x)this.follow(C,x);let{stored:qQ,hooks:K8}=this.persistRun(C,_,xQ,x,R);if($Q.set(C,qQ),FJ.has(J))FJ.set(J,{run:C,hooks:K8});return J.ctx?.()?.waitUntil(K8),C.toResponse()};try{await this.authorizeRequest(J,{route:"stream",threadId:Z,body:V});let N=await this.foreignFile([...K?.files??[],...Z?[]:y0(Q.messages)],Y);if(N)return N;if(H?.cancelled)return GQ();let F=await this.runLimitKey(J,{owner:Y,threadId:Z}),P=F===null?lJ:M0(this.liveRuns).take(F,Z?`thread:${Z}`:`run:${crypto.randomUUID()}`,this.maxConcurrentRuns);if(!P)return e$(429,"too_many_runs",`You already have ${this.maxConcurrentRuns} conversations answering. Wait for one to finish, or stop it, and send again.`);try{return Z?await this.withThread(Z,Y,B):await B()}finally{let L=D;if(L)L.result().then(P,P);else P()}}finally{if(H&&mJ.get(G)===H)mJ.delete(G)}}async withThread(J,$,Q){let Z=cJ.get(J)??Promise.resolve(),W,K=new Promise((G)=>{W=G}),X=Z.then(()=>K);cJ.set(J,X),await Z;try{let G=await this.liveRuns.find({threadId:J});if(G&&this.liveRuns.isRunning(G.runId)&&!this.liveRuns.mayAccess(G.runId,$))return NJ();let V=G?this.liveRuns.get(G.runId):null;if(V)V.stop({reason:"superseded by a later turn on this thread"}),await $Q.get(V);return await Q()}finally{if(W(),cJ.get(J)===X)cJ.delete(J)}}async attach(J=new q){let $=await PJ(J,pJ);if($.error)return JJ($);let Q=$.body,Z=typeof Q.threadId==="string"?Q.threadId:b0(J,"threadId");if(!Z)return M(400,{code:"invalid_request",message:"attach needs a threadId: it is the handle that survives a refresh."});await this.authorizeRequest(J,{route:"attach",threadId:Z});let W=await this.liveRuns.find({threadId:Z});if(W&&!this.liveRuns.mayAccess(W.runId,await this.runOwner(J)))return NJ();if(!W)return M(404,{code:"no_live_run",message:`No run in progress for thread ${Z} in this process.`});let K=typeof Q.runId==="string"?Q.runId:void 0,X=K&&K!==W.runId?void 0:w0(J,Q);try{return PQ(this.liveRuns.replay(W.runId,X))}catch(G){if(G instanceof e)return M(410,{code:G.code,message:G.message,oldestSeq:G.oldest});if(G instanceof BJ)return M(404,{code:G.code,message:G.message});throw G}}async stop(J=new q){let $=await PJ(J,pJ);if($.error)return JJ($);let Q=$.body;await this.authorizeRequest(J,{route:"stop",threadId:typeof Q.threadId==="string"?Q.threadId:void 0});let Z=await this.runOwner(J),W=typeof Q.runId==="string"?Q.runId:void 0;if(!W&&typeof Q.clientRunId==="string"){if(W=this.liveRuns.findByClientRunId(Q.clientRunId)??void 0,!W){let X=mJ.get(Q.clientRunId);if(X){if(X.owner!==null&&X.owner!==Z)return NJ();return X.cancelled=!0,{stopped:!0}}}}if(!W&&typeof Q.threadId==="string")W=(await this.liveRuns.find({threadId:Q.threadId}))?.runId;let K=W?this.liveRuns.get(W):null;if(!K)return{stopped:!1};if(!this.liveRuns.mayAccess(K.runId,Z))return NJ();return K.stop({reason:typeof Q.reason==="string"?Q.reason:void 0}),{stopped:!0}}attachmentScope(J,$,Q){let Z=this.hooks?.attachmentScope;if(Z)return Z(J,$,Q);let W=J.ctx()?.user,K=W?.id??W?.publicId;if(K!==void 0&&K!==null&&String(K)!=="")return{key:`user:${String(K)}`};if($)return{key:`thread:${$}`};return null}attachmentLimits(J){let $=this.hooks?.attachmentLimits;if($)return $(J);return null}checkUpload(J,$,Q){return this.hooks?.checkUpload?.(J,$,Q)}attachmentDestination(J,$,Q){let Z=this.hooks?.attachmentDestination;if(Z)return Z(J,$,Q);return"both"}async attachmentsFor(J,$,Q={body:{}}){let Z=await this.attachmentScope(J,$,Q);if(!Z)return null;return new oJ(this.attachments,this.attachmentStorage,Z)}async voiceStart(J=new q){let $=this.voice;if(!$)return s$();let Q=await PJ(J,pJ);if(Q.error)return JJ(Q);let{sdp:Z,threadId:W,pushToTalk:K}=Q.body;if(typeof Z!=="string"||!Z.trimStart().startsWith("v="))return M(400,{code:"invalid_request",message:"`sdp` must be the browser's SDP offer."});let X=dJ(Q.body,h0),G=typeof W==="string"&&W!==""?W:void 0;await this.authorizeRequest(J,{route:"stream",threadId:G,body:X});let V=J.ctx?.()?.user??null,Y=await $.start({req:J,body:X,threadId:G,user:V,pushToTalk:K===!0}),H=Date.now(),D,z=async(L)=>{if(L!==void 0)console.error("[gemi/ai] a voice session could not start.",L);if(D)await $.realtime.hangup(D).catch((O)=>{console.error("[gemi/ai] a voice call that failed to start could not be hung up.",O)});try{await Y.onEnd?.({sessionId:"",...D?{callId:D}:{},threadId:Y.threadId??G??"",reason:"start_failed",startedAt:H,endedAt:Date.now(),durationMs:0,seconds:0,usage:S(),transcription:{usage:S(),seconds:0},transcript:[],requests:[],toolCalls:[],errors:[]})}catch(O){console.error("[gemi/ai] a voice session's onEnd threw.",O)}},B=Y.threadId??G;if(!B)return await z(void 0),M(400,{code:"invalid_request",message:"A voice session needs a thread: send `threadId`, or answer one from `voice.start`."});try{if(B!==G)await this.authorizeRequest(J,{route:"stream",threadId:B,body:X})}catch(L){throw await z(void 0),L}let U=crypto.randomUUID(),N=Y.tools??[];try{if(Y.mcp)N=[...N,...await v$(Y.mcp,{user:V,sessionId:U})]}catch(L){return await z(L),M(500,{code:"voice_unavailable",message:"Voice isn't available right now."})}let F={...Y.session,tools:[...HJ($.delegate),...Y.session?.tools??[],...N.map((L)=>L.tool)],...K===!0?{turnDetection:null}:{}},P;try{P=await $.realtime.createCall({sdp:Z,session:F,safetyIdentifier:Y.safetyIdentifier})}catch(L){await z(L);let O=L instanceof f&&L.code==="rate_limited";return M(O?429:502,{code:"voice_unavailable",message:"Voice isn't available right now."})}D=P.callId;try{await this.voiceStore.create({id:U,callId:P.callId,threadId:B,owner:await this.runOwner(J),body:X,startedAt:H});let{threadId:L,session:O,safetyIdentifier:j,mcp:k,tools:I,...x}=Y;return{sessionId:p.start({...x,tools:N,controller:this.constructor,threadId:B,user:V,body:X,call:{realtime:$.realtime,callId:P.callId},sessionId:U,store:this.voiceStore,liveRuns:this.liveRuns,delegate:$.delegate,session:F}).sessionId,sdp:P.sdpAnswer,threadId:B,delegate:$.delegate?.name??zJ,endsAt:H+(Y.limits?.maxDurationMs??900000)}}catch(L){return await z(L),M(500,{code:"voice_unavailable",message:"Voice isn't available right now."})}}async voiceUpdate(J=new q){if(!this.voice)return s$();let $=await this.voiceSession(J);if($ instanceof Response)return $;let Q=await PJ(J,pJ);if(Q.error)return JJ(Q);let Z=dJ(Q.body,[]);if(await this.authorizeRequest(J,{route:"stream",threadId:$.threadId,body:Z}),$.endedAt!==void 0)return M(409,{code:"voice_ended",message:"This voice session has ended."});return await this.voiceStore.update($.id,{body:Z}),p.get($.id)?.setBody(Z),{updated:!0}}async voiceEnd(J=new q){let $=this.voice;if(!$)return s$();let Q=await this.voiceSession(J);if(Q instanceof Response)return Q;if(await this.authorizeRequest(J,{route:"stream",threadId:Q.threadId,body:Q.body}),Q.endedAt!==void 0)return{ended:!1};let Z=p.get(Q.id);if(Z)await Z.end("hangup");else await $.realtime.hangup(Q.callId),await this.voiceStore.update(Q.id,{endedAt:Date.now(),endReason:"hangup"});return{ended:!0}}async voiceSession(J){let $=J.params?.sessionId,Q=typeof $==="string"&&$?await this.voiceStore.get($):null;if(!Q)return M(404,{code:"voice_not_found",message:"No such voice session."});if(Q.owner!==null&&Q.owner!==await this.runOwner(J))return NJ();return Q}async upload(J=new q){let $=await J.rawRequest.formData(),Q=$.get("file");if(!(Q instanceof Blob))throw Error("upload expects a multipart body with a `file` field.");let Z=Q instanceof File&&Q.name?Q.name:"upload",W=Q.type||"application/octet-stream",K=R0($.get("body")),X=$.get("threadId");await this.authorizeRequest(J,{route:"upload",threadId:typeof X==="string"&&X.length>0?X:void 0,body:K});let G=T0(await this.attachmentLimits(J),Q,Z,W);if(G)throw new r$(G.code,G.message);let V=typeof X==="string"&&X.length>0&&await this.store.loadThread(X)!==null?X:void 0,Y=await this.runOwner(J),H=(k)=>this.fileOwners.record(k,{owner:Y,name:Z,mimeType:W,size:Q.size,createdAt:new Date().toISOString()}),D={body:K,threadId:V},z=await this.checkUpload({name:Z,size:Q.size,mimeType:W},J,D);if(z)throw new r$(z.code||"upload_refused",z.message);let B=await this.attachmentDestination(Q,J,D),U=g0(B,$.get("destination")),N=await this.attachmentScope(J,V,{body:K}),F=U!=="provider"&&!N;if(F){if(U==="storage")throw Error('This upload was routed to storage, but `attachmentScope()` returned null for the request, so there is no subject to file the attachment under. Guard the route (`this.agent(Chat).middleware({ upload: "auth" })`), send a `threadId` with the upload, or override `attachmentScope()`.');u0()}if(U==="provider"||!N){let k=await WQ(this.agent.provider,Q);await H(k);let I={fileId:k,name:Z,mimeType:W,size:Q.size,destination:"provider"};if(F)I.downgraded="no_scope";return I}let P=_Q(),L=await this.attachmentStorage.put({name:MQ(P,Z),body:Q,contentType:W}),O=U==="both"?await WQ(this.agent.provider,Q):void 0;if(O)await H(O);let j={id:P,scopeKey:N.key,fileId:O,objectName:L,name:Z,mimeType:W,size:Q.size,createdAt:new Date().toISOString(),destination:U};return await this.attachments.put(N,j),{fileId:O,attachmentId:P,name:Z,mimeType:W,size:Q.size,destination:U}}async foreignFile(J,$){let Q=new Set(J.map((Z)=>Z.fileId).filter((Z)=>typeof Z==="string"));for(let Z of Q){let W=await this.fileOwners.get(Z);if(W?W.owner!==null&&W.owner!==$:this.requireKnownFiles)return v0()}return null}onMessage(J,$){return this.hooks?.onMessage?.(J,$)}onToolCall(J,$){return this.hooks?.onToolCall?.(J,$)}onToolResult(J,$,Q){return this.hooks?.onToolResult?.(J,$,Q)}onAwaitingInput(J,$){return this.hooks?.onAwaitingInput?.(J,$)}redactError(J,$,Q){let Z=this.hooks?.redactError;if(Z)return Z(J,$,Q);return Q8(J,$)}onError(J,$){return this.hooks?.onError?.(J,$)}onStreamComplete(J,$){return this.hooks?.onStreamComplete?.(J,$)}reportHookFailure(J){let $=this.hooks?.reportHookFailure;if($)try{return $(J)}catch(Q){console.error("[gemi/ai] reportHookFailure hook failed",Q)}console.error("[gemi/ai] agent controller hook failed",J)}async dispatchEvent(J,$){switch(J.type){case"tool-call":if(!J.part.partial&&!J.resent)await this.onToolCall({toolCallId:J.part.toolCallId,name:String(J.part.name),input:J.part.input},$);return;case"tool-result":{let Q=J.part;await this.onToolResult(Q,$,{toolCallId:Q.toolCallId,name:String(Q.name),input:EQ(Q)});return}case"awaiting-input":await this.onAwaitingInput(J.pending,$);return;case"error":await this.onError(LQ(J.error),$);return;default:return}}async readThread(J){let $=await this.store.loadThread(J);if(!$)return null;let{messages:Q}=await this.settleThread(J,$,{write:!1});return Q}isRunLive(J,$){return this.liveRuns.get(J)!==null}async settleThread(J,$,{write:Q}){let Z=(V)=>this.isRunLive(V,J),W=await s9($,Z),K=W.messages,X=[],G=new Map(W.settled.map((V)=>[V.id,V]));if(l0(K)||Q)try{let V=await e9(K,{threadId:J,store:v.store,isRunLive:Z,outputSchemaFor:(Y)=>this.toolNamed(Y)?.outputSchema,modelOutputFor:(Y,H)=>RQ(this.toolNamed(Y),H,(D)=>this.reportHookFailure(D)),scan:this.jobsBlockMax()});K=V.messages,X=V.jobs;for(let Y of V.settled)G.set(Y.id,Y);if(Q&&V.orphans.length>0){await JQ(v.store,V.orphans,(H)=>this.reportHookFailure(H));let Y=new Set(V.orphans.map((H)=>H.id));X=X.map((H)=>Y.has(H.id)?{...H,orphaned:!0}:H)}}catch(V){this.reportHookFailure(V)}if(Q&&G.size>0)try{await this.store.appendMessages(J,[...G.values()])}catch(V){this.reportHookFailure(V)}return{messages:K,jobs:X}}jobsBlockMax(){let J=this.agent.jobs?.contextBlock;if(J===!1)return 0;return J?.max??CJ}jobsBlock(J){return F8(J,this.jobsBlockMax())}toolNamed(J){let $=(Q)=>{for(let Z of Q){let W=Z;if(Array.isArray(W.tools)){let K=$(W.tools);if(K)return K}else if(W.name===J)return W}return};return $(this.agent.tools??[])}follow(J,$){(async()=>{try{for await(let Q of J.frames())$.frame(Q)}catch(Q){this.reportHookFailure(Q)}})()}persistRun(J,$,Q,Z=null,W={id:null,notified:Promise.resolve()}){let K=Promise.resolve(),X=(async()=>{let V;try{V=await J.result()}catch(H){Z?.close(),await Z?.settled(),K=W.notified.then(()=>this.safely(()=>this.onError({code:"unknown",message:H instanceof Error?H.message:String(H),retryable:!1},$)));return}let Y=V.messages;if(Z?.close(Y),await Z?.settled(),$.threadId&&Y.length>0)try{await this.store.appendMessages($.threadId,Y)}catch(H){this.reportHookFailure(H)}K=this.notifyRun(V,Y,$,W)})(),G=X.then(()=>m0(Promise.all([K,Q]).then(()=>{}),this.hookHoldMs));return{stored:X,hooks:G}}async notifyRun(J,$,Q,Z){await Z.notified;for(let W of $){if(W.id===Z.id)continue;await this.safely(()=>this.onMessage(W,Q))}await this.safely(()=>this.onStreamComplete(J,Q))}async safely(J){try{await J()}catch($){this.reportHookFailure($)}}}var a$=["turn","clientRunId","threadId","messages","regenerate"],A0=["text","files","toolResults"];function dJ(J,$=kQ(J)?a$:[...a$,...A0]){let Q={};for(let[Z,W]of Object.entries(J)){if($.includes(Z))continue;Object.defineProperty(Q,Z,{value:W,writable:!0,enumerable:!0,configurable:!0})}return Q}function R0(J){if(J===null)return{};let $;if(typeof J==="string")try{$=JSON.parse(J)}catch{throw new t$("The upload's `body` field is not valid JSON.")}if($===null||typeof $!=="object"||Array.isArray($))throw new t$("The upload's `body` field must be a JSON object.");return dJ($,a$)}class t$ extends iJ{constructor(J){super(J);this.name="InvalidUploadError",this.payload={api:{status:400,data:{error:{code:"invalid_request",message:J}}},view:{}}}}async function WQ(J,$){try{return await J.upload($)}catch(Q){if(Q instanceof w&&E0.has(Q.status))throw new jQ(T(Q).message);throw Q}}var E0=new Set([400,413,415,422]);class r$ extends iJ{constructor(J,$){super($);this.name="LimitedUploadError",this.payload={api:{status:422,data:{error:{code:J,message:$}}},view:{}}}}function T0(J,$,Q,Z){if(!J)return null;let{maxBytes:W,accept:K}=J;if(typeof W==="number"&&$.size>W)return{code:"file_too_large",message:`${JSON.stringify(Q)} is ${KQ($.size)}; the limit is ${KQ(W)}.`};if(K&&K.length>0&&!K.some((X)=>j0(X,Q,Z)))return{code:"unsupported_file_type",message:`${JSON.stringify(Q)} is not a type this chat accepts. Accepted: ${K.join(", ")}.`};return null}function j0(J,$,Q){let Z=J.trim().toLowerCase();if(!Z)return!1;if(Z.startsWith("."))return $.toLowerCase().endsWith(Z);let W=Q.toLowerCase().split(";")[0].trim();if(Z.endsWith("/*"))return W.startsWith(Z.slice(0,-1));return W===Z}function KQ(J){if(J<1024)return`${J} B`;let $=["KB","MB","GB"],Q=J/1024,Z=0;while(Q>=1024&&Z<$.length-1)Q/=1024,Z++;return`${Math.round(Q*10)/10} ${$[Z]}`}class jQ extends iJ{constructor(J){super(J);this.name="RejectedUploadError";let $=/(unsupported|invalid) (extension|file type|format|mime)|supported (extensions|formats?)/i.test(J)?"unsupported_file_type":"file_rejected";this.payload={api:{status:422,data:{error:{code:$,message:J}}},view:{}}}}async function PJ(J,$){let Q=J?.rawRequest;if(!Q||Q.method==="GET"||Q.method==="HEAD"||!Q.body)return{body:{}};if(!k0(Q.headers.get("Content-Type")))return{body:{},status:415,code:"unsupported_media_type",error:"The request body must be sent as application/json."};let Z=Number(Q.headers.get("Content-Length"));if(Number.isFinite(Z)&&Z>$)return XQ($);let W;try{let X=await x0(Q,$);if(X===null)return XQ($);W=X}catch{return{body:{},error:"The request body could not be read."}}if(!W.trim())return{body:{}};let K;try{K=JSON.parse(W)}catch{return{body:{},error:"The request body is not valid JSON."}}if(K===null||typeof K!=="object"||Array.isArray(K))return{body:{},error:"The request body must be a JSON object."};return{body:K}}function k0(J){return BQ(J)==="application/json"}async function x0(J,$){if(!Number.isFinite($)||!J.body)return await J.text();let Q=J.body.getReader(),Z=[],W=0;for(;;){let{done:G,value:V}=await Q.read();if(G)break;if(W+=V.byteLength,W>$)return await Q.cancel().catch(lJ),null;Z.push(V)}let K=new Uint8Array(W),X=0;for(let G of Z)K.set(G,X),X+=G.byteLength;return new TextDecoder().decode(K)}function XQ(J){return{body:{},status:413,code:"body_too_large",error:`The request body is larger than this agent accepts (${J} bytes).`}}function e$(J,$,Q){return M(J,{...nJ(DQ(J),Q,J),code:$})}function JJ(J){if(J.status===413)return e$(413,J.code??"body_too_large",J.error??"");return M(J.status??400,{code:J.code??"invalid_request",message:J.error})}function kQ(J){return Boolean(J.turn)&&typeof J.turn==="object"}function q0(J){let $=kQ(J)?J.turn:J,Q={};if(typeof $.text==="string")Q.text=$.text;if(Array.isArray($.files)){let Z=I0($.files);if(typeof Z==="string")return{error:Z};Q.files=Z}if(Array.isArray($.toolResults))Q.toolResults=$.toolResults;if(Object.keys(Q).length===0)return{};if($===J.turn&&$.localId!==void 0&&$.localId!==null&&$.localId!==""){let{localId:Z}=$;if(typeof Z!=="string")return{error:"turn.localId must be a string."};if(Z.length>YQ)return{error:`turn.localId is longer than ${YQ} characters.`};Q.localId=Z}return{turn:Q}}var YQ=200;function I0(J){let $=[];for(let[Q,Z]of J.entries()){let W=`turn.files[${Q}]`;if(!Z||typeof Z!=="object"||Array.isArray(Z))return`${W} must be an object.`;let K={};for(let H of["fileId","attachmentId","name","mimeType"]){let D=Z[H];if(D===void 0||D===null||D==="")continue;if(typeof D!=="string")return`${W}.${H} must be a string.`;K[H]=D}let{fileId:X,attachmentId:G,name:V,mimeType:Y}=K;if(X?.startsWith(m))return`${W}.fileId holds a gemi attachment id (${X}). \`fileId\` is the provider's id from the upload response; put this one in \`attachmentId\`.`;if(G!==void 0&&!G.startsWith(m))return`${W}.attachmentId is not a gemi attachment id: it must start with "${m}".`;if(!X&&!G)return`${W} has neither a \`fileId\` nor an \`attachmentId\`. Send the ids the upload response answered.`;$.push({...X?{fileId:X}:{},...G?{attachmentId:G}:{},...V!==void 0?{name:V}:{},...Y!==void 0?{mimeType:Y}:{}})}return $}function w0(J,$){if(typeof $.from==="number"&&Number.isFinite($.from))return Math.max(0,Math.floor($.from));if(typeof $.cursor==="number"&&Number.isFinite($.cursor)){let Z=Math.floor($.cursor);if(Z>=0)return Z+1;return}let Q=J?.rawRequest?.headers?.get("Last-Event-ID");if(Q){let Z=Number.parseInt(Q,10);if(Number.isFinite(Z))return Math.max(0,Z+1)}return}function b0(J,$){let Q=J?.search?.get($);return typeof Q==="string"?Q:void 0}function f0(J){let $=Z8(J);for(let Q=J.length-1;Q>=0;Q--){let Z=J[Q];if(Z.role!=="user"||$.has(Z.id))continue;let W="",K=[];for(let X of Z.content){if(X.type==="text")W+=X.text;if(X.type==="file")K.push({...X.fileId?{fileId:X.fileId}:{},...X.attachmentId?{attachmentId:X.attachmentId}:{},...X.name?{name:X.name}:{},...X.mimeType?{mimeType:X.mimeType}:{}})}if(!W&&K.length===0)continue;return{index:Q,turn:{...W?{text:W}:{},...K.length>0?{files:K}:{}}}}return null}function GQ(){return M(409,{code:"stopped",message:"The turn was stopped before it started."})}function NJ(){return M(403,nJ("permission","This run belongs to someone else.",403))}function v0(){return M(403,nJ("permission","A file in this turn was uploaded by someone else.",403))}function y0(J){if(!Array.isArray(J))return[];let $=[];for(let Q of J){let Z=Q?.content;if(!Array.isArray(Z))continue;for(let W of Z)if(W&&typeof W==="object"&&typeof W.fileId==="string")$.push({fileId:W.fileId})}return $}var h0=["sdp","threadId","pushToTalk"];function s$(){return M(404,{code:"voice_not_enabled",message:"This agent has no voice: set `voice` on its controller."})}function M(J,$){return new Response(JSON.stringify({error:$}),{status:J,headers:{"Content-Type":"application/json"}})}function g0(J,$){if(typeof $!=="string"||$.length===0)return J;if($!=="both"&&$!=="provider"&&$!=="storage")throw Error(`Unknown attachment destination "${$}". Expected "both", "provider" or "storage".`);if($===J||J==="both"&&$==="storage")return $;if(J==="both"&&$==="provider")throw Error('This upload asked for the "provider" destination under a "both" policy. A client may ask for "storage", which keeps a file away from the model provider, but it may not ask the server to stop keeping its own copy while the vendor still gets the file \u2014 that is the app\'s retention decision. Change `attachmentDestination()` if this file should not be kept.');throw Error(`This upload asked for the "${$}" destination, but the server's policy for it is "${J}", and a client hint may only ask for "storage" under a "both" policy. Change \`attachmentDestination()\` if the file really should go there.`)}var VQ=!1;function u0(){if(VQ)return;VQ=!0,console.warn("[gemi/ai] An upload had no attachment scope, so its bytes were sent to the model provider only and no attachment id was minted \u2014 a tool cannot forward this file. Guard the route with auth, send a `threadId` with the upload, or override `attachmentScope()`.")}var c0=2147483647;function m0(J,$){let Q=J.then(()=>{},()=>{});if(!($<=c0))return Q;let Z,W=new Promise((K)=>{Z=setTimeout(K,$)});return Promise.race([Q,W]).finally(()=>clearTimeout(Z))}var HQ=!1;function p0(J){if(HQ||Bun.env.NODE_ENV!=="production")return;if(!(J instanceof J8))return;HQ=!0,console.warn("[gemi/ai] A stateless agent chat is spending approval nonces in process memory. With more than one instance a replayed approval is accepted once per instance. Set `nonces = new RedisNonceStore()` (or your own NonceStore) on the AgentController.")}function l0(J){return J.some(($)=>$.content.some((Q)=>Q.type==="tool-result"&&Q.status==="running"))}export{J6 as windowMessages,HJ as voiceTools,s0 as turnStarts,qJ as toRealtimeUsage,eQ as toAgentTools,n0 as supportsStrict,a0 as splitTurns,Y6 as settleSummaries,i0 as s,Q8 as redactError,t0 as messageSize,KJ as measureUsage,v$ as mcpVoiceTools,u$ as liveRuns,DJ as keepSummary,A9 as isCallNotFound,Z8 as injectedMessageIds,z$ as generate,nZ as evalChain,S0 as defineAgentHooks,h$ as defaultVoiceStore,X6 as defaultSummaryStore,$8 as defaultNonceStore,c$ as defaultFileOwners,sJ as defaultAttachmentStore,i$ as defaultAgentStore,yJ as VoiceHangup,p as VoiceBridge,o0 as Usage,B$ as ToolNamespace,g as ToolError,V6 as Skill,oJ as ScopedAttachments,H6 as SKILLS_NAMESPACE,d$ as RedisReceiptStore,NQ as RedisNonceStore,IJ as RealtimeSideband,f as RealtimeRequestError,GJ as RealtimeClient,z8 as Prompt,UQ as PrismaNonceStore,G6 as PendingEscalation,I$ as OpenAIProvider,L$ as OpenAIImageProvider,y$ as MemoryVoiceSessionStore,K6 as MemorySummaryStore,l$ as MemoryReceiptStore,J8 as MemoryNonceStore,hJ as MemoryLiveRuns,gJ as MemoryFileOwners,fJ as MemoryCircuitStore,SQ as MemoryAttachmentStore,uJ as MemoryAgentStore,U8 as MemoryAgentJobStore,b8 as MEMORY_NAMESPACE,BJ as LiveRunNotFoundError,O8 as JobsRequireThreadError,L8 as JobHandle,d0 as JSONSchemaError,CQ as InvalidAttachmentScopeError,j8 as InMemoryAgentMemoryStore,jJ as ImageRequestError,kJ as ImageProvider,F$ as ImageModel,e as FrameCursorEvictedError,VJ as FallbackProvider,I8 as FakeAgentMemoryStore,RJ as Eval,h9 as DatabaseAgentStore,K$ as DatabaseAgentMemoryStore,Z$ as DatabaseAgentJobStore,M9 as DEFAULT_TRANSCRIPTION_MODEL,T8 as DEFAULT_MEMORY_MAX_TOKENS,w8 as DEFAULT_MEMORY_LIMITS,$6 as DEFAULT_MAX_SUMMARY_TOKENS,z6 as DEFAULT_MAX_RUN_DURATION_MS,C8 as DEFAULT_JOB_DEADLINE_MS,CJ as DEFAULT_JOBS_CONTEXT_MAX,zJ as DEFAULT_DELEGATE_NAME,r0 as DEFAULT_CONTEXT_WINDOW_STEP,e0 as DEFAULT_CONTEXT_WINDOW_NOTE,Q6 as DEFAULT_COMPACT_TRIGGER_TOKENS,Z6 as DEFAULT_COMPACT_INSTRUCTIONS,W6 as COMPACT_SUMMARY_HEADER,w$ as AzureOpenAIProvider,O$ as AzureOpenAIImageProvider,OQ as AttachmentNotFoundError,aJ as AgentTurnError,EJ as AgentTool,D6 as AgentRunError,r as AgentProvider,k8 as AgentMemoryRefusedError,x8 as AgentMemoryConflictError,q8 as AgentMemories,v as AgentJobs,J$ as AgentJobDeadlineSweep,_8 as AgentJob,W8 as AgentController,B6 as Agent};
243
243
 
244
- //# debugId=88BD210E6C099F4564756E2164756E21
244
+ //# debugId=63993B80FFDF827064756E2164756E21