@rkat/sdk 0.6.4 → 0.6.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/dist/realtime.js DELETED
@@ -1,166 +0,0 @@
1
- import { MeerkatError } from "./generated/errors.js";
2
- import { AsyncQueue } from "./streaming.js";
3
- import WebSocket from "ws";
4
- export class RealtimeConnection {
5
- socket;
6
- frames = new AsyncQueue();
7
- constructor(socket) {
8
- this.socket = socket;
9
- this.socket.on("message", (data) => {
10
- const payload = typeof data === "string"
11
- ? data
12
- : (Buffer.isBuffer(data) ? data.toString("utf8") : String(data));
13
- this.frames.put(JSON.parse(payload));
14
- });
15
- this.socket.on("close", () => {
16
- this.frames.put(null);
17
- });
18
- }
19
- static async open(openInfo, options) {
20
- const role = options?.role ?? "primary";
21
- const turningMode = options?.turningMode ?? "provider_managed";
22
- const socket = await new Promise((resolve, reject) => {
23
- const ws = new WebSocket(openInfo.ws_url);
24
- ws.once("open", () => resolve(ws));
25
- ws.once("error", (error) => reject(error));
26
- });
27
- const connection = new RealtimeConnection(socket);
28
- await connection.sendFrame({
29
- type: "channel.open",
30
- protocol_version: openInfo.default_protocol_version,
31
- open_token: openInfo.open_token,
32
- role,
33
- turning_mode: turningMode,
34
- });
35
- const opened = await connection.nextFrame();
36
- if (opened === null) {
37
- throw new MeerkatError("REALTIME_OPEN_FAILED", "realtime websocket closed before channel.open completed");
38
- }
39
- const openedRecord = opened;
40
- if (openedRecord.type === "channel.error") {
41
- throw new MeerkatError("REALTIME_OPEN_FAILED", String(openedRecord.message ?? "realtime websocket rejected channel.open"));
42
- }
43
- if (openedRecord.type !== "channel.opened") {
44
- throw new MeerkatError("INVALID_RESPONSE", `Expected channel.opened after channel.open, got ${String(openedRecord.type)}`);
45
- }
46
- return connection;
47
- }
48
- async sendFrame(frame) {
49
- await new Promise((resolve, reject) => {
50
- this.socket.send(JSON.stringify(frame), (error) => {
51
- if (error) {
52
- reject(error);
53
- return;
54
- }
55
- resolve();
56
- });
57
- });
58
- }
59
- async sendInput(chunk) {
60
- await this.sendFrame({
61
- type: "channel.input",
62
- chunk,
63
- });
64
- }
65
- async commitTurn() {
66
- await this.sendFrame({ type: "channel.commit_turn" });
67
- }
68
- async interrupt() {
69
- await this.sendFrame({ type: "channel.interrupt" });
70
- }
71
- async close() {
72
- await this.sendFrame({ type: "channel.close" });
73
- }
74
- async nextFrame() {
75
- return this.frames.get();
76
- }
77
- }
78
- export class RealtimeChannel {
79
- client;
80
- // The wire target that crosses the RPC boundary. Carries identity
81
- // directly for `mob_member` channels (W3-H); the server resolves the
82
- // current bridge session on every tick from the MobMachine's
83
- // canonical member-session map, so the SDK never pins a session id.
84
- target;
85
- role;
86
- turningMode;
87
- reconnectPolicy;
88
- constructor(client, target, options) {
89
- this.client = client;
90
- this.target = target;
91
- this.role = options?.role ?? "primary";
92
- this.turningMode = options?.turningMode ?? "provider_managed";
93
- this.reconnectPolicy = options?.reconnectPolicy;
94
- }
95
- static session(client, sessionId, options) {
96
- return new RealtimeChannel(client, { type: "session_target", session_id: sessionId }, options);
97
- }
98
- static mobMember(client, mobId, agentIdentity, options) {
99
- // W3-H: identity is a first-class wire fact. The channel target is
100
- // `mob_member { mob_id, agent_identity }`; the server resolves the
101
- // current bridge session from the MobMachine's canonical member-session
102
- // map on every tick, so respawn rotates the bridge session without
103
- // any SDK round-trip or session-id pin.
104
- return new RealtimeChannel(client, { type: "mob_member", mob_id: mobId, agent_identity: agentIdentity }, options);
105
- }
106
- wireReconnectPolicy() {
107
- if (!this.reconnectPolicy) {
108
- return undefined;
109
- }
110
- return { ...this.reconnectPolicy };
111
- }
112
- openRequest() {
113
- return {
114
- target: { ...this.target },
115
- role: this.role,
116
- turning_mode: this.turningMode,
117
- reconnect_policy: this.wireReconnectPolicy(),
118
- };
119
- }
120
- async openInfo() {
121
- return this.client.realtimeOpenInfo(this.openRequest());
122
- }
123
- async status() {
124
- return this.client.realtimeStatus({ target: { ...this.target } });
125
- }
126
- async capabilities() {
127
- return this.client.realtimeCapabilities({ target: { ...this.target } });
128
- }
129
- async connectWithOpenInfo(openInfo) {
130
- if (JSON.stringify(openInfo.target) !== JSON.stringify(this.target)) {
131
- throw new MeerkatError("INVALID_RESPONSE", "realtime/open_info returned a target that does not match the requested channel target");
132
- }
133
- return RealtimeConnection.open(openInfo, {
134
- role: this.role,
135
- turningMode: this.turningMode,
136
- });
137
- }
138
- async connect(options) {
139
- const conn = await this.connectWithOpenInfo(await this.openInfo());
140
- const wait = options?.waitForAttachment ?? true;
141
- if (wait) {
142
- const timeoutMs = options?.attachmentTimeoutMs ?? 30_000;
143
- const deadline = Date.now() + timeoutMs;
144
- let attached = false;
145
- while (Date.now() < deadline) {
146
- try {
147
- const st = await this.status();
148
- if (st.status.state === "ready") {
149
- attached = true;
150
- break;
151
- }
152
- }
153
- catch {
154
- // status may fail transiently during attachment
155
- }
156
- await new Promise((r) => setTimeout(r, 250));
157
- }
158
- if (!attached) {
159
- conn.close();
160
- throw new MeerkatError("REALTIME_ATTACHMENT_TIMEOUT", `realtime transport did not reach ready state within ${timeoutMs}ms`);
161
- }
162
- }
163
- return conn;
164
- }
165
- }
166
- //# sourceMappingURL=realtime.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"realtime.js","sourceRoot":"","sources":["../src/realtime.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,SAA2B,MAAM,IAAI,CAAC;AAqB7C,MAAM,OAAO,kBAAkB;IACZ,MAAM,CAAY;IAClB,MAAM,GAAG,IAAI,UAAU,EAA8B,CAAC;IAEvE,YAAY,MAAiB;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAa,EAAE,EAAE;YAC1C,MAAM,OAAO,GACX,OAAO,IAAI,KAAK,QAAQ;gBACtB,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YACrE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAwB,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC3B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAI,CACf,QAA0B,EAC1B,OAA8D;QAE9D,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,SAAS,CAAC;QACxC,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,kBAAkB,CAAC;QAC/D,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAY,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9D,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC1C,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;YACnC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,UAAU,CAAC,SAAS,CAAC;YACzB,IAAI,EAAE,cAAc;YACpB,gBAAgB,EAAE,QAAQ,CAAC,wBAAwB;YACnD,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,IAAI;YACJ,YAAY,EAAE,WAAW;SACH,CAAC,CAAC;QAE1B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,CAAC;QAC5C,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,MAAM,IAAI,YAAY,CACpB,sBAAsB,EACtB,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QACD,MAAM,YAAY,GAAG,MAA4C,CAAC;QAClE,IAAI,YAAY,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YAC1C,MAAM,IAAI,YAAY,CACpB,sBAAsB,EACtB,MAAM,CAAC,YAAY,CAAC,OAAO,IAAI,0CAA0C,CAAC,CAC3E,CAAC;QACJ,CAAC;QACD,IAAI,YAAY,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YAC3C,MAAM,IAAI,YAAY,CACpB,kBAAkB,EAClB,mDAAmD,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAC/E,CAAC;QACJ,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAA0B;QACxC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAa,EAAE,EAAE;gBACxD,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,CAAC,KAAK,CAAC,CAAC;oBACd,OAAO;gBACT,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAyB;QACvC,MAAM,IAAI,CAAC,SAAS,CAAC;YACnB,IAAI,EAAE,eAAe;YACrB,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAyB,CAAC,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAyB,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,eAAe,EAAyB,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,SAAS;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,eAAe;IACjB,MAAM,CAAgB;IAC/B,kEAAkE;IAClE,qEAAqE;IACrE,6DAA6D;IAC7D,oEAAoE;IAC3D,MAAM,CAAwB;IAC9B,IAAI,CAAyB;IAC7B,WAAW,CAAyC;IACpD,eAAe,CAA2B;IAEnD,YACE,MAAqB,EACrB,MAA6B,EAC7B,OAAgC;QAEhC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,SAAS,CAAC;QACvC,IAAI,CAAC,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,kBAAkB,CAAC;QAC9D,IAAI,CAAC,eAAe,GAAG,OAAO,EAAE,eAAe,CAAC;IAClD,CAAC;IAED,MAAM,CAAC,OAAO,CACZ,MAAqB,EACrB,SAAiB,EACjB,OAAgC;QAEhC,OAAO,IAAI,eAAe,CACxB,MAAM,EACN,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,SAAS,EAAE,EACjD,OAAO,CACR,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,SAAS,CACd,MAAqB,EACrB,KAAa,EACb,aAAqB,EACrB,OAAgC;QAEhC,mEAAmE;QACnE,mEAAmE;QACnE,wEAAwE;QACxE,mEAAmE;QACnE,wCAAwC;QACxC,OAAO,IAAI,eAAe,CACxB,MAAM,EACN,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,EACpE,OAAO,CACR,CAAC;IACJ,CAAC;IAEO,mBAAmB;QACzB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;IACrC,CAAC;IAED,WAAW;QACT,OAAO;YACL,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;YAC1B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,YAAY,EAAE,IAAI,CAAC,WAAW;YAC9B,gBAAgB,EAAE,IAAI,CAAC,mBAAmB,EAAE;SAC7C,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,QAA0B;QAClD,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACpE,MAAM,IAAI,YAAY,CACpB,kBAAkB,EAClB,uFAAuF,CACxF,CAAC;QACJ,CAAC;QACD,OAAO,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE;YACvC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAGb;QACC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,OAAO,EAAE,iBAAiB,IAAI,IAAI,CAAC;QAChD,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,SAAS,GAAG,OAAO,EAAE,mBAAmB,IAAI,MAAM,CAAC;YACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACxC,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;gBAC7B,IAAI,CAAC;oBACH,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;oBAC/B,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;wBAChC,QAAQ,GAAG,IAAI,CAAC;wBAChB,MAAM;oBACR,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,gDAAgD;gBAClD,CAAC;gBACD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC/C,CAAC;YACD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,MAAM,IAAI,YAAY,CACpB,6BAA6B,EAC7B,uDAAuD,SAAS,IAAI,CACrE,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}