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.
- package/README.md +11 -0
- package/bin/boot-bundle.d.mts +2 -0
- package/bin/boot-bundle.mjs +44 -0
- package/bin/fresh-supervisor.d.mts +5 -1
- package/bin/fresh-supervisor.mjs +47 -10
- package/bin/privateer-launch.mjs +27 -3
- package/bin/privateer-subagent.mjs +5 -2
- package/bin/privateer-verify.mjs +12 -0
- package/bin/session-recovery.d.mts +53 -0
- package/bin/session-recovery.mjs +240 -0
- package/bin/session-seal-preload.mjs +17 -0
- package/bin/session-seal.d.mts +25 -0
- package/bin/session-seal.mjs +242 -0
- package/dist-boot/boot.mjs +3 -0
- package/dist-boot/c-27JKSMWL.mjs +1460 -0
- package/dist-boot/c-2BMRFV24.mjs +269 -0
- package/dist-boot/c-2CTF6JA3.mjs +166 -0
- package/dist-boot/c-2G3BBHRJ.mjs +84 -0
- package/dist-boot/c-2IDLKXX6.mjs +250 -0
- package/dist-boot/c-2NJD5VYM.mjs +8 -0
- package/dist-boot/c-2S5EEQPW.mjs +1602 -0
- package/dist-boot/c-2WRDCUVI.mjs +25 -0
- package/dist-boot/c-2YN3M256.mjs +14 -0
- package/dist-boot/c-37GM3GMU.mjs +187 -0
- package/dist-boot/c-3STKRSVO.mjs +2480 -0
- package/dist-boot/c-3TPV6TQQ.mjs +2320 -0
- package/dist-boot/c-3UVHLQDJ.mjs +225 -0
- package/dist-boot/c-42PUUZYC.mjs +697 -0
- package/dist-boot/c-4D5UMWVW.mjs +683 -0
- package/dist-boot/c-4ETZRMTA.mjs +46 -0
- package/dist-boot/c-4QT25BD5.mjs +1482 -0
- package/dist-boot/c-4WVR32AP.mjs +2579 -0
- package/dist-boot/c-5EMM567G.mjs +152 -0
- package/dist-boot/c-5FA4CV63.mjs +145 -0
- package/dist-boot/c-5GV3X3RB.mjs +14 -0
- package/dist-boot/c-5JCEPRIY.mjs +52 -0
- package/dist-boot/c-5NDKIIWT.mjs +16 -0
- package/dist-boot/c-5QL3AR26.mjs +4665 -0
- package/dist-boot/c-5XY6MFKN.mjs +5142 -0
- package/dist-boot/c-65UZIZC7.mjs +2897 -0
- package/dist-boot/c-6FUXKHOK.mjs +1969 -0
- package/dist-boot/c-6JHWQE4V.mjs +18242 -0
- package/dist-boot/c-6LOBR4I6.mjs +5280 -0
- package/dist-boot/c-6QHOZXKQ.mjs +14394 -0
- package/dist-boot/c-6ZO2SADQ.mjs +178 -0
- package/dist-boot/c-6ZORVVZP.mjs +1449 -0
- package/dist-boot/c-76QH4UCP.mjs +2441 -0
- package/dist-boot/c-77GO5L5Y.mjs +20982 -0
- package/dist-boot/c-7M23XFTN.mjs +5052 -0
- package/dist-boot/c-7TC367E2.mjs +32 -0
- package/dist-boot/c-7UOG7POX.mjs +1524 -0
- package/dist-boot/c-7VHP3FLN.mjs +376 -0
- package/dist-boot/c-A73JHZP2.mjs +13207 -0
- package/dist-boot/c-ABXULAFL.mjs +71 -0
- package/dist-boot/c-ANDD2AQO.mjs +74 -0
- package/dist-boot/c-AOY77AZL.mjs +1430 -0
- package/dist-boot/c-AXEPZ22I.mjs +108 -0
- package/dist-boot/c-B2Y7VNHU.mjs +427 -0
- package/dist-boot/c-B7VJUH73.mjs +77 -0
- package/dist-boot/c-BFW6CDVL.mjs +24 -0
- package/dist-boot/c-BHNIF2AR.mjs +188 -0
- package/dist-boot/c-BKF2O6BL.mjs +23 -0
- package/dist-boot/c-BOZXFTZN.mjs +8 -0
- package/dist-boot/c-BRNYJWZL.mjs +28 -0
- package/dist-boot/c-C3N4Z2HO.mjs +93 -0
- package/dist-boot/c-C4IV7ZFG.mjs +717 -0
- package/dist-boot/c-C5NK6UYV.mjs +793 -0
- package/dist-boot/c-C67644MB.mjs +1659 -0
- package/dist-boot/c-C6S2YB53.mjs +620 -0
- package/dist-boot/c-CDBEJSBF.mjs +37 -0
- package/dist-boot/c-CG47HBKU.mjs +435 -0
- package/dist-boot/c-CKCTWCT5.mjs +51 -0
- package/dist-boot/c-CN77DCGF.mjs +60 -0
- package/dist-boot/c-CRBXNKFO.mjs +1795 -0
- package/dist-boot/c-CRIHASQ6.mjs +973 -0
- package/dist-boot/c-CU4NGAUO.mjs +3786 -0
- package/dist-boot/c-CWRFLGQU.mjs +1883 -0
- package/dist-boot/c-CYQB2USO.mjs +32 -0
- package/dist-boot/c-DEE67DJO.mjs +379 -0
- package/dist-boot/c-DIFDBYOP.mjs +1258 -0
- package/dist-boot/c-DOSGVXDZ.mjs +34879 -0
- package/dist-boot/c-DR7XQI32.mjs +381 -0
- package/dist-boot/c-DTGPSB46.mjs +14666 -0
- package/dist-boot/c-DTHDNA4P.mjs +320 -0
- package/dist-boot/c-E4Z3Y5B5.mjs +3864 -0
- package/dist-boot/c-E66Z2TI7.mjs +203 -0
- package/dist-boot/c-EBU6RLRV.mjs +1527 -0
- package/dist-boot/c-EBZZNGSF.mjs +432 -0
- package/dist-boot/c-EC3LJ2KF.mjs +1032 -0
- package/dist-boot/c-EQBKXWNX.mjs +15829 -0
- package/dist-boot/c-EUEPIW4S.mjs +574 -0
- package/dist-boot/c-EX4YVWAT.mjs +378 -0
- package/dist-boot/c-EYZGSAJU.mjs +98 -0
- package/dist-boot/c-F75VRKY4.mjs +172 -0
- package/dist-boot/c-FH4NXKHV.mjs +177 -0
- package/dist-boot/c-FHNUCTEM.mjs +140 -0
- package/dist-boot/c-FJ5T42DS.mjs +5349 -0
- package/dist-boot/c-FPCNRL7G.mjs +1728 -0
- package/dist-boot/c-G4DLN7Q4.mjs +8 -0
- package/dist-boot/c-G56GYQFZ.mjs +2507 -0
- package/dist-boot/c-GLIOERDQ.mjs +1200 -0
- package/dist-boot/c-GMJ5HUBM.mjs +14 -0
- package/dist-boot/c-H3HSGMAQ.mjs +461 -0
- package/dist-boot/c-HIKTO6P7.mjs +275 -0
- package/dist-boot/c-I2MCJ34O.mjs +464 -0
- package/dist-boot/c-I3C6LBW4.mjs +765 -0
- package/dist-boot/c-I54OKQHW.mjs +387 -0
- package/dist-boot/c-IFSP3R4D.mjs +80 -0
- package/dist-boot/c-IZK77VB7.mjs +171 -0
- package/dist-boot/c-J3Y25UGE.mjs +54 -0
- package/dist-boot/c-J5IESS7W.mjs +27750 -0
- package/dist-boot/c-JJWZBY7L.mjs +254 -0
- package/dist-boot/c-JKTFXTGF.mjs +463 -0
- package/dist-boot/c-JN57AXQ4.mjs +77 -0
- package/dist-boot/c-KFIO6LUW.mjs +1096 -0
- package/dist-boot/c-KIEMEFWW.mjs +478 -0
- package/dist-boot/c-KIVXWBYD.mjs +28 -0
- package/dist-boot/c-KP6CRIP4.mjs +580 -0
- package/dist-boot/c-L26VOJX4.mjs +11558 -0
- package/dist-boot/c-L5GHWG5G.mjs +5988 -0
- package/dist-boot/c-M7NSQAKK.mjs +353 -0
- package/dist-boot/c-MCEWOPBW.mjs +56 -0
- package/dist-boot/c-MGPIEG7I.mjs +20 -0
- package/dist-boot/c-NREXJV3M.mjs +393 -0
- package/dist-boot/c-O5PP6CTX.mjs +162 -0
- package/dist-boot/c-OBQDHSXM.mjs +1774 -0
- package/dist-boot/c-OLQHHDD4.mjs +21 -0
- package/dist-boot/c-OXW4JQQH.mjs +319 -0
- package/dist-boot/c-P3D7ZUWN.mjs +1288 -0
- package/dist-boot/c-P4PQZVV5.mjs +948 -0
- package/dist-boot/c-P63T3XL2.mjs +26373 -0
- package/dist-boot/c-P6N5DQGZ.mjs +194 -0
- package/dist-boot/c-P7MLKQFC.mjs +58 -0
- package/dist-boot/c-PB3PZJL5.mjs +1276 -0
- package/dist-boot/c-PTN4S6G2.mjs +1259 -0
- package/dist-boot/c-PYCE5J7U.mjs +1083 -0
- package/dist-boot/c-Q4HYCRLB.mjs +19410 -0
- package/dist-boot/c-QUXMETGG.mjs +68 -0
- package/dist-boot/c-RDMJZCOX.mjs +356 -0
- package/dist-boot/c-ROGJK76M.mjs +17 -0
- package/dist-boot/c-RQJJ26T4.mjs +708 -0
- package/dist-boot/c-RSKCUPJF.mjs +7559 -0
- package/dist-boot/c-RVJU4O6P.mjs +37 -0
- package/dist-boot/c-S2RVHR3M.mjs +165 -0
- package/dist-boot/c-SKMK3PEE.mjs +91120 -0
- package/dist-boot/c-TI7SM4EG.mjs +20 -0
- package/dist-boot/c-TILJ6GXD.mjs +1235 -0
- package/dist-boot/c-TT6BCUJD.mjs +114 -0
- package/dist-boot/c-U4ITOXAN.mjs +2107 -0
- package/dist-boot/c-UGERXVO2.mjs +7120 -0
- package/dist-boot/c-UPBH5AXY.mjs +1363 -0
- package/dist-boot/c-US2PUNZL.mjs +597 -0
- package/dist-boot/c-UU4WZPPE.mjs +20 -0
- package/dist-boot/c-UWVIYPQS.mjs +39 -0
- package/dist-boot/c-V4RHQBPQ.mjs +17683 -0
- package/dist-boot/c-V5MRVK47.mjs +351 -0
- package/dist-boot/c-V6CL266R.mjs +1755 -0
- package/dist-boot/c-VJTMFKYE.mjs +14975 -0
- package/dist-boot/c-VJTRUKIB.mjs +773 -0
- package/dist-boot/c-W4IFSHPW.mjs +43 -0
- package/dist-boot/c-WETGB2CF.mjs +113 -0
- package/dist-boot/c-WO3QSZUU.mjs +1337 -0
- package/dist-boot/c-WQLH73TY.mjs +242 -0
- package/dist-boot/c-XL735JW5.mjs +500 -0
- package/dist-boot/c-Y7HADL5B.mjs +1107 -0
- package/dist-boot/c-YGQHSVSK.mjs +41 -0
- package/dist-boot/c-YMP2AMEB.mjs +10350 -0
- package/dist-boot/c-YRDO2WEF.mjs +12012 -0
- package/dist-boot/c-YUSTRATJ.mjs +8 -0
- package/dist-boot/c-Z2262R22.mjs +2697 -0
- package/dist-boot/c-Z4ALQMJC.mjs +709 -0
- package/dist-boot/c-Z5ZUQVUY.mjs +62 -0
- package/dist-boot/c-ZDZUKXF7.mjs +874 -0
- package/dist-boot/c-ZJYLGIC3.mjs +32 -0
- package/dist-boot/c-ZNA5CDMI.mjs +77 -0
- package/dist-boot/c-ZSO6DI3M.mjs +204 -0
- package/dist-boot/c-ZWUVHKMK.mjs +100 -0
- package/dist-boot/c-ZY4MESEW.mjs +832 -0
- package/dist-boot/c-ZZ5REI4L.mjs +329 -0
- package/dist-boot/cli.mjs +51 -0
- package/dist-boot/ext-anthropic-attribution.mjs +207 -0
- package/dist-boot/ext-pi-background-tasks.mjs +7234 -0
- package/dist-boot/ext-pi-subagents.mjs +37 -0
- package/dist-boot/ext-privateer-account.mjs +4426 -0
- package/dist-boot/ext-privateer-brand.mjs +5274 -0
- package/dist-boot/ext-privateer-codemode.mjs +37 -0
- package/dist-boot/ext-privateer-computer.mjs +626 -0
- package/dist-boot/ext-privateer-connect.mjs +1862 -0
- package/dist-boot/ext-privateer-context.mjs +323 -0
- package/dist-boot/ext-privateer-desktop.mjs +92 -0
- package/dist-boot/ext-privateer-final-audit.mjs +48 -0
- package/dist-boot/ext-privateer-fresh.mjs +81 -0
- package/dist-boot/ext-privateer-gate.mjs +5959 -0
- package/dist-boot/ext-privateer-hints.mjs +236 -0
- package/dist-boot/ext-privateer-media.mjs +2626 -0
- package/dist-boot/ext-privateer-models.mjs +3397 -0
- package/dist-boot/ext-privateer-posture.mjs +3006 -0
- package/dist-boot/ext-privateer-privacy.mjs +4578 -0
- package/dist-boot/ext-privateer-recovery.mjs +287 -0
- package/dist-boot/ext-privateer-speak.mjs +4754 -0
- package/dist-boot/ext-privateer-terminals.mjs +725 -0
- package/dist-boot/ext-privateer-tools.mjs +528 -0
- package/dist-boot/ext-privateer-truncation.mjs +74 -0
- package/dist-boot/ext-privateer-update.mjs +210 -0
- package/dist-boot/ext-privateer-vision.mjs +148 -0
- package/dist-boot/ext-privateer-web.mjs +543 -0
- package/dist-boot/ext-rpiv-ask-user-question.mjs +710 -0
- package/dist-boot/manifest.json +9 -0
- package/extensions/privateer-brand.ts +3 -1
- package/extensions/privateer-context.ts +4 -2
- package/extensions/privateer-final-audit.ts +17 -0
- package/extensions/privateer-gate.ts +55 -9
- package/extensions/privateer-recovery.ts +175 -0
- package/extensions/privateer-web.ts +4 -4
- package/package.json +3 -1
- package/patches/@earendil-works+pi-coding-agent+1.3.0.patch +199 -2
- package/patches/pi-background-tasks+2.6.10.patch +91 -7
- package/src/cli/chat.ts +7 -1
- package/src/config/moatManifest.json +2 -0
- package/src/config/whatsNew.json +4 -4
- package/src/context.ts +33 -5
- package/src/engine/finalAudit.ts +38 -0
- package/src/engine/stallWatchdog.ts +8 -1
- package/src/providers/account.ts +34 -3
- package/src/remote/attentionPush.ts +40 -0
- package/src/remote/liveTaskSession.ts +7 -1
- package/src/remote/relayClient.ts +38 -4
- package/src/remote/remoteBridge.ts +17 -0
- 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
|
+
};
|