privateer-agent 0.15.4 → 0.15.6

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 (229) hide show
  1. package/README.md +11 -0
  2. package/bin/boot-bundle.d.mts +2 -0
  3. package/bin/boot-bundle.mjs +44 -0
  4. package/bin/fresh-supervisor.d.mts +5 -1
  5. package/bin/fresh-supervisor.mjs +47 -10
  6. package/bin/privateer-launch.mjs +27 -3
  7. package/bin/privateer-subagent.mjs +5 -2
  8. package/bin/privateer-verify.mjs +12 -0
  9. package/bin/session-recovery.d.mts +53 -0
  10. package/bin/session-recovery.mjs +240 -0
  11. package/bin/session-seal-preload.mjs +17 -0
  12. package/bin/session-seal.d.mts +25 -0
  13. package/bin/session-seal.mjs +242 -0
  14. package/dist-boot/boot.mjs +3 -0
  15. package/dist-boot/c-27JKSMWL.mjs +1460 -0
  16. package/dist-boot/c-2BMRFV24.mjs +269 -0
  17. package/dist-boot/c-2CTF6JA3.mjs +166 -0
  18. package/dist-boot/c-2G3BBHRJ.mjs +84 -0
  19. package/dist-boot/c-2IDLKXX6.mjs +250 -0
  20. package/dist-boot/c-2NJD5VYM.mjs +8 -0
  21. package/dist-boot/c-2S5EEQPW.mjs +1602 -0
  22. package/dist-boot/c-2WRDCUVI.mjs +25 -0
  23. package/dist-boot/c-2YN3M256.mjs +14 -0
  24. package/dist-boot/c-37GM3GMU.mjs +187 -0
  25. package/dist-boot/c-3STKRSVO.mjs +2480 -0
  26. package/dist-boot/c-3TPV6TQQ.mjs +2320 -0
  27. package/dist-boot/c-3UVHLQDJ.mjs +225 -0
  28. package/dist-boot/c-42PUUZYC.mjs +697 -0
  29. package/dist-boot/c-4D5UMWVW.mjs +683 -0
  30. package/dist-boot/c-4ETZRMTA.mjs +46 -0
  31. package/dist-boot/c-4QT25BD5.mjs +1482 -0
  32. package/dist-boot/c-4WVR32AP.mjs +2579 -0
  33. package/dist-boot/c-5EMM567G.mjs +152 -0
  34. package/dist-boot/c-5FA4CV63.mjs +145 -0
  35. package/dist-boot/c-5GV3X3RB.mjs +14 -0
  36. package/dist-boot/c-5JCEPRIY.mjs +52 -0
  37. package/dist-boot/c-5NDKIIWT.mjs +16 -0
  38. package/dist-boot/c-5QL3AR26.mjs +4665 -0
  39. package/dist-boot/c-5XY6MFKN.mjs +5142 -0
  40. package/dist-boot/c-65UZIZC7.mjs +2897 -0
  41. package/dist-boot/c-6FUXKHOK.mjs +1969 -0
  42. package/dist-boot/c-6JHWQE4V.mjs +18242 -0
  43. package/dist-boot/c-6LOBR4I6.mjs +5280 -0
  44. package/dist-boot/c-6QHOZXKQ.mjs +14394 -0
  45. package/dist-boot/c-6ZO2SADQ.mjs +178 -0
  46. package/dist-boot/c-6ZORVVZP.mjs +1449 -0
  47. package/dist-boot/c-76QH4UCP.mjs +2441 -0
  48. package/dist-boot/c-77GO5L5Y.mjs +20982 -0
  49. package/dist-boot/c-7M23XFTN.mjs +5052 -0
  50. package/dist-boot/c-7TC367E2.mjs +32 -0
  51. package/dist-boot/c-7UOG7POX.mjs +1524 -0
  52. package/dist-boot/c-7VHP3FLN.mjs +376 -0
  53. package/dist-boot/c-A73JHZP2.mjs +13207 -0
  54. package/dist-boot/c-ABXULAFL.mjs +71 -0
  55. package/dist-boot/c-ANDD2AQO.mjs +74 -0
  56. package/dist-boot/c-AOY77AZL.mjs +1430 -0
  57. package/dist-boot/c-AXEPZ22I.mjs +108 -0
  58. package/dist-boot/c-B2Y7VNHU.mjs +427 -0
  59. package/dist-boot/c-B7VJUH73.mjs +77 -0
  60. package/dist-boot/c-BFW6CDVL.mjs +24 -0
  61. package/dist-boot/c-BHNIF2AR.mjs +188 -0
  62. package/dist-boot/c-BKF2O6BL.mjs +23 -0
  63. package/dist-boot/c-BOZXFTZN.mjs +8 -0
  64. package/dist-boot/c-BRNYJWZL.mjs +28 -0
  65. package/dist-boot/c-C3N4Z2HO.mjs +93 -0
  66. package/dist-boot/c-C4IV7ZFG.mjs +717 -0
  67. package/dist-boot/c-C5NK6UYV.mjs +793 -0
  68. package/dist-boot/c-C67644MB.mjs +1659 -0
  69. package/dist-boot/c-C6S2YB53.mjs +620 -0
  70. package/dist-boot/c-CDBEJSBF.mjs +37 -0
  71. package/dist-boot/c-CG47HBKU.mjs +435 -0
  72. package/dist-boot/c-CKCTWCT5.mjs +51 -0
  73. package/dist-boot/c-CN77DCGF.mjs +60 -0
  74. package/dist-boot/c-CRBXNKFO.mjs +1795 -0
  75. package/dist-boot/c-CRIHASQ6.mjs +973 -0
  76. package/dist-boot/c-CU4NGAUO.mjs +3786 -0
  77. package/dist-boot/c-CWRFLGQU.mjs +1883 -0
  78. package/dist-boot/c-CYQB2USO.mjs +32 -0
  79. package/dist-boot/c-DEE67DJO.mjs +379 -0
  80. package/dist-boot/c-DIFDBYOP.mjs +1258 -0
  81. package/dist-boot/c-DOSGVXDZ.mjs +34879 -0
  82. package/dist-boot/c-DR7XQI32.mjs +381 -0
  83. package/dist-boot/c-DTGPSB46.mjs +14666 -0
  84. package/dist-boot/c-DTHDNA4P.mjs +320 -0
  85. package/dist-boot/c-E4Z3Y5B5.mjs +3864 -0
  86. package/dist-boot/c-E66Z2TI7.mjs +203 -0
  87. package/dist-boot/c-EBU6RLRV.mjs +1527 -0
  88. package/dist-boot/c-EBZZNGSF.mjs +432 -0
  89. package/dist-boot/c-EC3LJ2KF.mjs +1032 -0
  90. package/dist-boot/c-EQBKXWNX.mjs +15829 -0
  91. package/dist-boot/c-EUEPIW4S.mjs +574 -0
  92. package/dist-boot/c-EX4YVWAT.mjs +378 -0
  93. package/dist-boot/c-EYZGSAJU.mjs +98 -0
  94. package/dist-boot/c-F75VRKY4.mjs +172 -0
  95. package/dist-boot/c-FH4NXKHV.mjs +177 -0
  96. package/dist-boot/c-FHNUCTEM.mjs +140 -0
  97. package/dist-boot/c-FJ5T42DS.mjs +5349 -0
  98. package/dist-boot/c-FPCNRL7G.mjs +1728 -0
  99. package/dist-boot/c-G4DLN7Q4.mjs +8 -0
  100. package/dist-boot/c-G56GYQFZ.mjs +2507 -0
  101. package/dist-boot/c-GLIOERDQ.mjs +1200 -0
  102. package/dist-boot/c-GMJ5HUBM.mjs +14 -0
  103. package/dist-boot/c-H3HSGMAQ.mjs +461 -0
  104. package/dist-boot/c-HIKTO6P7.mjs +275 -0
  105. package/dist-boot/c-I2MCJ34O.mjs +464 -0
  106. package/dist-boot/c-I3C6LBW4.mjs +765 -0
  107. package/dist-boot/c-I54OKQHW.mjs +387 -0
  108. package/dist-boot/c-IFSP3R4D.mjs +80 -0
  109. package/dist-boot/c-IZK77VB7.mjs +171 -0
  110. package/dist-boot/c-J3Y25UGE.mjs +54 -0
  111. package/dist-boot/c-J5IESS7W.mjs +27750 -0
  112. package/dist-boot/c-JJWZBY7L.mjs +254 -0
  113. package/dist-boot/c-JKTFXTGF.mjs +463 -0
  114. package/dist-boot/c-JN57AXQ4.mjs +77 -0
  115. package/dist-boot/c-KFIO6LUW.mjs +1096 -0
  116. package/dist-boot/c-KIEMEFWW.mjs +478 -0
  117. package/dist-boot/c-KIVXWBYD.mjs +28 -0
  118. package/dist-boot/c-KP6CRIP4.mjs +580 -0
  119. package/dist-boot/c-L26VOJX4.mjs +11558 -0
  120. package/dist-boot/c-L5GHWG5G.mjs +5988 -0
  121. package/dist-boot/c-M7NSQAKK.mjs +353 -0
  122. package/dist-boot/c-MCEWOPBW.mjs +56 -0
  123. package/dist-boot/c-MGPIEG7I.mjs +20 -0
  124. package/dist-boot/c-NREXJV3M.mjs +393 -0
  125. package/dist-boot/c-O5PP6CTX.mjs +162 -0
  126. package/dist-boot/c-OBQDHSXM.mjs +1774 -0
  127. package/dist-boot/c-OLQHHDD4.mjs +21 -0
  128. package/dist-boot/c-OXW4JQQH.mjs +319 -0
  129. package/dist-boot/c-P3D7ZUWN.mjs +1288 -0
  130. package/dist-boot/c-P4PQZVV5.mjs +948 -0
  131. package/dist-boot/c-P63T3XL2.mjs +26373 -0
  132. package/dist-boot/c-P6N5DQGZ.mjs +194 -0
  133. package/dist-boot/c-P7MLKQFC.mjs +58 -0
  134. package/dist-boot/c-PB3PZJL5.mjs +1276 -0
  135. package/dist-boot/c-PTN4S6G2.mjs +1259 -0
  136. package/dist-boot/c-PYCE5J7U.mjs +1083 -0
  137. package/dist-boot/c-Q4HYCRLB.mjs +19410 -0
  138. package/dist-boot/c-QUXMETGG.mjs +68 -0
  139. package/dist-boot/c-RDMJZCOX.mjs +356 -0
  140. package/dist-boot/c-ROGJK76M.mjs +17 -0
  141. package/dist-boot/c-RQJJ26T4.mjs +708 -0
  142. package/dist-boot/c-RSKCUPJF.mjs +7559 -0
  143. package/dist-boot/c-RVJU4O6P.mjs +37 -0
  144. package/dist-boot/c-S2RVHR3M.mjs +165 -0
  145. package/dist-boot/c-SKMK3PEE.mjs +91120 -0
  146. package/dist-boot/c-TI7SM4EG.mjs +20 -0
  147. package/dist-boot/c-TILJ6GXD.mjs +1235 -0
  148. package/dist-boot/c-TT6BCUJD.mjs +114 -0
  149. package/dist-boot/c-U4ITOXAN.mjs +2107 -0
  150. package/dist-boot/c-UGERXVO2.mjs +7120 -0
  151. package/dist-boot/c-UPBH5AXY.mjs +1363 -0
  152. package/dist-boot/c-US2PUNZL.mjs +597 -0
  153. package/dist-boot/c-UU4WZPPE.mjs +20 -0
  154. package/dist-boot/c-UWVIYPQS.mjs +39 -0
  155. package/dist-boot/c-V4RHQBPQ.mjs +17683 -0
  156. package/dist-boot/c-V5MRVK47.mjs +351 -0
  157. package/dist-boot/c-V6CL266R.mjs +1755 -0
  158. package/dist-boot/c-VJTMFKYE.mjs +14975 -0
  159. package/dist-boot/c-VJTRUKIB.mjs +773 -0
  160. package/dist-boot/c-W4IFSHPW.mjs +43 -0
  161. package/dist-boot/c-WETGB2CF.mjs +113 -0
  162. package/dist-boot/c-WO3QSZUU.mjs +1337 -0
  163. package/dist-boot/c-WQLH73TY.mjs +242 -0
  164. package/dist-boot/c-XL735JW5.mjs +500 -0
  165. package/dist-boot/c-Y7HADL5B.mjs +1107 -0
  166. package/dist-boot/c-YGQHSVSK.mjs +41 -0
  167. package/dist-boot/c-YMP2AMEB.mjs +10350 -0
  168. package/dist-boot/c-YRDO2WEF.mjs +12012 -0
  169. package/dist-boot/c-YUSTRATJ.mjs +8 -0
  170. package/dist-boot/c-Z2262R22.mjs +2697 -0
  171. package/dist-boot/c-Z4ALQMJC.mjs +709 -0
  172. package/dist-boot/c-Z5ZUQVUY.mjs +62 -0
  173. package/dist-boot/c-ZDZUKXF7.mjs +874 -0
  174. package/dist-boot/c-ZJYLGIC3.mjs +32 -0
  175. package/dist-boot/c-ZNA5CDMI.mjs +77 -0
  176. package/dist-boot/c-ZSO6DI3M.mjs +204 -0
  177. package/dist-boot/c-ZWUVHKMK.mjs +100 -0
  178. package/dist-boot/c-ZY4MESEW.mjs +832 -0
  179. package/dist-boot/c-ZZ5REI4L.mjs +329 -0
  180. package/dist-boot/cli.mjs +51 -0
  181. package/dist-boot/ext-anthropic-attribution.mjs +207 -0
  182. package/dist-boot/ext-pi-background-tasks.mjs +7234 -0
  183. package/dist-boot/ext-pi-subagents.mjs +37 -0
  184. package/dist-boot/ext-privateer-account.mjs +4426 -0
  185. package/dist-boot/ext-privateer-brand.mjs +5274 -0
  186. package/dist-boot/ext-privateer-codemode.mjs +37 -0
  187. package/dist-boot/ext-privateer-computer.mjs +626 -0
  188. package/dist-boot/ext-privateer-connect.mjs +1862 -0
  189. package/dist-boot/ext-privateer-context.mjs +323 -0
  190. package/dist-boot/ext-privateer-desktop.mjs +92 -0
  191. package/dist-boot/ext-privateer-final-audit.mjs +48 -0
  192. package/dist-boot/ext-privateer-fresh.mjs +81 -0
  193. package/dist-boot/ext-privateer-gate.mjs +5959 -0
  194. package/dist-boot/ext-privateer-hints.mjs +236 -0
  195. package/dist-boot/ext-privateer-media.mjs +2626 -0
  196. package/dist-boot/ext-privateer-models.mjs +3397 -0
  197. package/dist-boot/ext-privateer-posture.mjs +3006 -0
  198. package/dist-boot/ext-privateer-privacy.mjs +4578 -0
  199. package/dist-boot/ext-privateer-recovery.mjs +287 -0
  200. package/dist-boot/ext-privateer-speak.mjs +4754 -0
  201. package/dist-boot/ext-privateer-terminals.mjs +725 -0
  202. package/dist-boot/ext-privateer-tools.mjs +528 -0
  203. package/dist-boot/ext-privateer-truncation.mjs +74 -0
  204. package/dist-boot/ext-privateer-update.mjs +210 -0
  205. package/dist-boot/ext-privateer-vision.mjs +148 -0
  206. package/dist-boot/ext-privateer-web.mjs +543 -0
  207. package/dist-boot/ext-rpiv-ask-user-question.mjs +710 -0
  208. package/dist-boot/manifest.json +9 -0
  209. package/extensions/privateer-brand.ts +3 -1
  210. package/extensions/privateer-context.ts +4 -2
  211. package/extensions/privateer-final-audit.ts +17 -0
  212. package/extensions/privateer-gate.ts +55 -9
  213. package/extensions/privateer-recovery.ts +175 -0
  214. package/extensions/privateer-web.ts +4 -4
  215. package/package.json +3 -1
  216. package/patches/@earendil-works+pi-coding-agent+1.3.0.patch +199 -2
  217. package/patches/pi-background-tasks+2.6.10.patch +91 -7
  218. package/src/cli/chat.ts +7 -1
  219. package/src/config/moatManifest.json +2 -0
  220. package/src/config/whatsNew.json +4 -4
  221. package/src/context.ts +33 -5
  222. package/src/engine/finalAudit.ts +38 -0
  223. package/src/engine/stallWatchdog.ts +8 -1
  224. package/src/providers/account.ts +34 -3
  225. package/src/remote/attentionPush.ts +40 -0
  226. package/src/remote/liveTaskSession.ts +7 -1
  227. package/src/remote/relayClient.ts +38 -4
  228. package/src/remote/remoteBridge.ts +17 -0
  229. package/src/remote/transcriptSnapshot.ts +104 -0
@@ -0,0 +1,275 @@
1
+ import{createRequire as __pvCR}from"node:module";import{fileURLToPath as __pvF}from"node:url";import{dirname as __pvD}from"node:path";const require=__pvCR(import.meta.url);const __pvUrl=(r)=>new URL(r,import.meta.url).href;const __pvFile=(r)=>__pvF(new URL(r,import.meta.url));
2
+ import {
3
+ import_websocket
4
+ } from "./c-CU4NGAUO.mjs";
5
+ import {
6
+ AzureOpenAI,
7
+ OpenAI,
8
+ OpenAIError,
9
+ __classPrivateFieldGet
10
+ } from "./c-L26VOJX4.mjs";
11
+ import {
12
+ __name
13
+ } from "./c-CN77DCGF.mjs";
14
+
15
+ // node_modules/tinfoil/node_modules/openai/lib/EventEmitter.mjs
16
+ var _EventEmitter_listeners;
17
+ var EventEmitter = class {
18
+ static {
19
+ __name(this, "EventEmitter");
20
+ }
21
+ constructor() {
22
+ _EventEmitter_listeners.set(this, {});
23
+ }
24
+ /**
25
+ * Adds the listener function to the end of the listeners array for the event.
26
+ * No checks are made to see if the listener has already been added. Multiple calls passing
27
+ * the same combination of event and listener will result in the listener being added, and
28
+ * called, multiple times.
29
+ * @returns this, so that calls can be chained
30
+ */
31
+ on(event, listener) {
32
+ const listeners = __classPrivateFieldGet(this, _EventEmitter_listeners, "f")[event] || (__classPrivateFieldGet(this, _EventEmitter_listeners, "f")[event] = []);
33
+ listeners.push({ listener });
34
+ return this;
35
+ }
36
+ /**
37
+ * Removes the specified listener from the listener array for the event.
38
+ * off() will remove, at most, one instance of a listener from the listener array. If any single
39
+ * listener has been added multiple times to the listener array for the specified event, then
40
+ * off() must be called multiple times to remove each instance.
41
+ * @returns this, so that calls can be chained
42
+ */
43
+ off(event, listener) {
44
+ const listeners = __classPrivateFieldGet(this, _EventEmitter_listeners, "f")[event];
45
+ if (!listeners)
46
+ return this;
47
+ const index = listeners.findIndex((l) => l.listener === listener);
48
+ if (index >= 0)
49
+ listeners.splice(index, 1);
50
+ return this;
51
+ }
52
+ /**
53
+ * Adds a one-time listener function for the event. The next time the event is triggered,
54
+ * this listener is removed and then invoked.
55
+ * @returns this, so that calls can be chained
56
+ */
57
+ once(event, listener) {
58
+ const listeners = __classPrivateFieldGet(this, _EventEmitter_listeners, "f")[event] || (__classPrivateFieldGet(this, _EventEmitter_listeners, "f")[event] = []);
59
+ listeners.push({ listener, once: true });
60
+ return this;
61
+ }
62
+ /**
63
+ * This is similar to `.once()`, but returns a Promise that resolves the next time
64
+ * the event is triggered, instead of calling a listener callback.
65
+ * @returns a Promise that resolves the next time given event is triggered,
66
+ * or rejects if an error is emitted. (If you request the 'error' event,
67
+ * returns a promise that resolves with the error).
68
+ *
69
+ * Example:
70
+ *
71
+ * const message = await stream.emitted('message') // rejects if the stream errors
72
+ */
73
+ emitted(event) {
74
+ return new Promise((resolve, reject) => {
75
+ const onError = /* @__PURE__ */ __name((error) => {
76
+ this.off(event, onEvent);
77
+ reject(error);
78
+ }, "onError");
79
+ const onEvent = /* @__PURE__ */ __name((value) => {
80
+ if (event !== "error")
81
+ this.off("error", onError);
82
+ resolve(value);
83
+ }, "onEvent");
84
+ if (event !== "error")
85
+ this.once("error", onError);
86
+ this.once(event, onEvent);
87
+ });
88
+ }
89
+ _emit(event, ...args) {
90
+ const listeners = __classPrivateFieldGet(this, _EventEmitter_listeners, "f")[event];
91
+ if (listeners) {
92
+ __classPrivateFieldGet(this, _EventEmitter_listeners, "f")[event] = listeners.filter((l) => !l.once);
93
+ listeners.forEach(({ listener }) => listener(...args));
94
+ }
95
+ }
96
+ _hasListener(event) {
97
+ const listeners = __classPrivateFieldGet(this, _EventEmitter_listeners, "f")[event];
98
+ return listeners && listeners.length > 0;
99
+ }
100
+ };
101
+ _EventEmitter_listeners = /* @__PURE__ */ new WeakMap();
102
+
103
+ // node_modules/tinfoil/node_modules/openai/realtime/internal-base.mjs
104
+ var OpenAIRealtimeError = class extends OpenAIError {
105
+ static {
106
+ __name(this, "OpenAIRealtimeError");
107
+ }
108
+ constructor(message, event) {
109
+ super(message);
110
+ this.error = event?.error;
111
+ this.event_id = event?.event_id;
112
+ }
113
+ };
114
+ var OpenAIRealtimeEmitter = class extends EventEmitter {
115
+ static {
116
+ __name(this, "OpenAIRealtimeEmitter");
117
+ }
118
+ _onError(event, message, cause) {
119
+ message = event?.error ? `${event.error.message} code=${event.error.code} param=${event.error.param} type=${event.error.type} event_id=${event.error.event_id}` : message ?? "unknown error";
120
+ if (!this._hasListener("error")) {
121
+ const error2 = new OpenAIRealtimeError(message + `
122
+
123
+ To resolve these unhandled rejection errors you should bind an \`error\` callback, e.g. \`rt.on('error', (error) => ...)\` `, event);
124
+ error2.cause = cause;
125
+ Promise.reject(error2);
126
+ return;
127
+ }
128
+ const error = new OpenAIRealtimeError(message, event);
129
+ error.cause = cause;
130
+ this._emit("error", error);
131
+ }
132
+ };
133
+ function isAzure(client) {
134
+ return client instanceof AzureOpenAI;
135
+ }
136
+ __name(isAzure, "isAzure");
137
+ function buildRealtimeURL(client, connection) {
138
+ const config = typeof connection === "string" ? { model: connection } : connection;
139
+ const baseURL = client.baseURL;
140
+ const azure = isAzure(client);
141
+ const hasModel = !!config.model;
142
+ const hasCallID = !!config.callID;
143
+ if (hasModel === hasCallID) {
144
+ throw new Error("Pass exactly one of `model` or `callID` when opening a Realtime WebSocket.");
145
+ }
146
+ let url;
147
+ if (azure && hasCallID) {
148
+ url = new URL(baseURL);
149
+ const basePath = url.pathname.replace(/\/+/g, "/").replace(/\/+$/, "");
150
+ const versionedPath = basePath.endsWith("/v1") ? basePath : `${basePath}/v1`;
151
+ url.pathname = `${versionedPath}/realtime`;
152
+ url.search = "";
153
+ url.hash = "";
154
+ } else {
155
+ const path = "/realtime";
156
+ url = new URL(baseURL + (baseURL.endsWith("/") ? path.slice(1) : path));
157
+ }
158
+ url.protocol = "wss";
159
+ if (azure) {
160
+ if (hasCallID) {
161
+ url.searchParams.set("call_id", config.callID);
162
+ } else {
163
+ url.searchParams.set("api-version", client.apiVersion);
164
+ url.searchParams.set("deployment", config.model);
165
+ }
166
+ } else {
167
+ if (hasCallID) {
168
+ url.searchParams.set("call_id", config.callID);
169
+ } else {
170
+ url.searchParams.set("model", config.model);
171
+ }
172
+ }
173
+ return url;
174
+ }
175
+ __name(buildRealtimeURL, "buildRealtimeURL");
176
+ function getAzureRealtimeConnection(client, connection) {
177
+ if (connection.callID !== void 0) {
178
+ if (connection.deploymentName !== void 0) {
179
+ throw new Error("Pass either `deploymentName` or `callID`, but not both.");
180
+ }
181
+ return { callID: connection.callID };
182
+ }
183
+ const model = connection.deploymentName ?? client.deploymentName;
184
+ if (!model) {
185
+ throw new Error("No deployment name provided");
186
+ }
187
+ return { model };
188
+ }
189
+ __name(getAzureRealtimeConnection, "getAzureRealtimeConnection");
190
+
191
+ // node_modules/tinfoil/node_modules/openai/realtime/ws.mjs
192
+ var OpenAIRealtimeWS = class _OpenAIRealtimeWS extends OpenAIRealtimeEmitter {
193
+ static {
194
+ __name(this, "OpenAIRealtimeWS");
195
+ }
196
+ constructor(props, client) {
197
+ super();
198
+ client ?? (client = new OpenAI());
199
+ const hasProvider = typeof client?._options?.apiKey === "function";
200
+ if (hasProvider && !props.__resolvedApiKey) {
201
+ throw new Error([
202
+ "Cannot open Realtime WebSocket with a function-based apiKey.",
203
+ "Use the .create() method so that the key is resolved before connecting."
204
+ ].join("\n"));
205
+ }
206
+ this.url = buildRealtimeURL(client, props);
207
+ this.socket = new import_websocket.default(this.url, {
208
+ ...props.options,
209
+ headers: {
210
+ ...props.options?.headers,
211
+ ...isAzure(client) && !props.__resolvedApiKey ? {} : { Authorization: `Bearer ${client.apiKey}` }
212
+ }
213
+ });
214
+ this.socket.on("message", (wsEvent) => {
215
+ const event = (() => {
216
+ try {
217
+ return JSON.parse(wsEvent.toString());
218
+ } catch (err) {
219
+ this._onError(null, "could not parse websocket event", err);
220
+ return null;
221
+ }
222
+ })();
223
+ if (event) {
224
+ this._emit("event", event);
225
+ if (event.type === "error") {
226
+ this._onError(event);
227
+ } else {
228
+ this._emit(event.type, event);
229
+ }
230
+ }
231
+ });
232
+ this.socket.on("error", (err) => {
233
+ this._onError(null, err.message, err);
234
+ });
235
+ }
236
+ static async create(client, props) {
237
+ return new _OpenAIRealtimeWS({ ...props, __resolvedApiKey: await client._callApiKey() }, client);
238
+ }
239
+ static async azure(client, props = {}) {
240
+ const connection = getAzureRealtimeConnection(client, props);
241
+ const isApiKeyProvider = await client._callApiKey();
242
+ const apiKey = client.apiKey;
243
+ if (!apiKey) {
244
+ throw new Error("Azure OpenAI Realtime requires an API key");
245
+ }
246
+ return new _OpenAIRealtimeWS({
247
+ ...connection,
248
+ options: {
249
+ ...props.options,
250
+ headers: {
251
+ ...props.options?.headers,
252
+ ...isApiKeyProvider ? {} : { "api-key": apiKey }
253
+ }
254
+ },
255
+ __resolvedApiKey: isApiKeyProvider
256
+ }, client);
257
+ }
258
+ send(event) {
259
+ try {
260
+ this.socket.send(JSON.stringify(event));
261
+ } catch (err) {
262
+ this._onError(null, "could not send data", err);
263
+ }
264
+ }
265
+ close(props) {
266
+ try {
267
+ this.socket.close(props?.code ?? 1e3, props?.reason ?? "OK");
268
+ } catch (err) {
269
+ this._onError(null, "could not close the connection", err);
270
+ }
271
+ }
272
+ };
273
+ export {
274
+ OpenAIRealtimeWS
275
+ };