codex-grok-mcp 0.2.0-beta.1

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 (56) hide show
  1. package/CONTRIBUTING.md +67 -0
  2. package/LICENSE +21 -0
  3. package/README.md +255 -0
  4. package/SECURITY.md +109 -0
  5. package/dist/bridge-companion.d.ts +61 -0
  6. package/dist/bridge-companion.js +436 -0
  7. package/dist/bridge-companion.js.map +1 -0
  8. package/dist/bridge-pairing.d.ts +30 -0
  9. package/dist/bridge-pairing.js +364 -0
  10. package/dist/bridge-pairing.js.map +1 -0
  11. package/dist/bridge-protocol.d.ts +187 -0
  12. package/dist/bridge-protocol.js +360 -0
  13. package/dist/bridge-protocol.js.map +1 -0
  14. package/dist/bridge-replay.d.ts +10 -0
  15. package/dist/bridge-replay.js +107 -0
  16. package/dist/bridge-replay.js.map +1 -0
  17. package/dist/bridge-runtime.d.ts +11 -0
  18. package/dist/bridge-runtime.js +259 -0
  19. package/dist/bridge-runtime.js.map +1 -0
  20. package/dist/direct-gateway-transport.d.ts +7 -0
  21. package/dist/direct-gateway-transport.js +241 -0
  22. package/dist/direct-gateway-transport.js.map +1 -0
  23. package/dist/grok-bot-client.d.ts +93 -0
  24. package/dist/grok-bot-client.js +475 -0
  25. package/dist/grok-bot-client.js.map +1 -0
  26. package/dist/grok-bot-gateway.d.ts +204 -0
  27. package/dist/grok-bot-gateway.js +741 -0
  28. package/dist/grok-bot-gateway.js.map +1 -0
  29. package/dist/grok-cli.d.ts +31 -0
  30. package/dist/grok-cli.js +338 -0
  31. package/dist/grok-cli.js.map +1 -0
  32. package/dist/index.d.ts +8 -0
  33. package/dist/index.js +228 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/relay-transport.d.ts +9 -0
  36. package/dist/relay-transport.js +278 -0
  37. package/dist/relay-transport.js.map +1 -0
  38. package/dist/schema.d.ts +16 -0
  39. package/dist/schema.js +22 -0
  40. package/dist/schema.js.map +1 -0
  41. package/dist/version.d.ts +4 -0
  42. package/dist/version.js +10 -0
  43. package/dist/version.js.map +1 -0
  44. package/package.json +71 -0
  45. package/plugins/codex-grok-mcp/assets/icon.png +0 -0
  46. package/relay/.dev.vars.example +2 -0
  47. package/relay/README.md +26 -0
  48. package/relay/package-lock.json +3291 -0
  49. package/relay/package.json +17 -0
  50. package/relay/src/index.ts +182 -0
  51. package/relay/test/relay.test.ts +127 -0
  52. package/relay/test/tsconfig.json +13 -0
  53. package/relay/tsconfig.json +15 -0
  54. package/relay/vitest.config.ts +15 -0
  55. package/relay/worker-configuration.d.ts +15362 -0
  56. package/relay/wrangler.jsonc +33 -0
@@ -0,0 +1,364 @@
1
+ import { createCipheriv, createDecipheriv, createHmac, randomBytes } from "node:crypto";
2
+ import { constants as fsConstants } from "node:fs";
3
+ import { chmod, link, lstat, mkdir, open, rename, unlink, } from "node:fs/promises";
4
+ import { homedir } from "node:os";
5
+ import { dirname, isAbsolute, join } from "node:path";
6
+ const PAIR_CODE_PREFIX = "CGM2_";
7
+ const PAIR_CODE_VERSION = 2;
8
+ const FRAME_VERSION = 1;
9
+ const NONCE_BYTES = 12;
10
+ const AUTH_TAG_BYTES = 16;
11
+ const MAX_CONFIG_BYTES = 8 * 1024;
12
+ export const MAX_PLAINTEXT_BYTES = 96 * 1024;
13
+ export const MAX_FRAME_BYTES = 128 * 1024;
14
+ export class BridgePairingError extends Error {
15
+ code;
16
+ constructor(code) {
17
+ super(code);
18
+ this.name = "BridgePairingError";
19
+ this.code = code;
20
+ }
21
+ }
22
+ function fail(code) {
23
+ throw new BridgePairingError(code);
24
+ }
25
+ function hasUnsafeControlCharacters(value) {
26
+ return /[\u0000-\u001f\u007f]/.test(value);
27
+ }
28
+ function isLoopback(hostname) {
29
+ const normalized = hostname.toLowerCase().replace(/^\[|\]$/g, "");
30
+ if (normalized === "localhost" || normalized === "::1")
31
+ return true;
32
+ const match = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(normalized);
33
+ if (match === null)
34
+ return false;
35
+ const octets = match.slice(1).map(Number);
36
+ return octets.every((octet) => octet <= 255) && octets[0] === 127;
37
+ }
38
+ export function validateRelayUrl(value) {
39
+ if (value.length === 0 || hasUnsafeControlCharacters(value))
40
+ fail("invalid_relay_url");
41
+ let url;
42
+ try {
43
+ url = new URL(value);
44
+ }
45
+ catch {
46
+ fail("invalid_relay_url");
47
+ }
48
+ if ((url.protocol !== "wss:" && url.protocol !== "ws:") ||
49
+ (url.protocol === "ws:" && !isLoopback(url.hostname)) ||
50
+ url.username !== "" ||
51
+ url.password !== "" ||
52
+ url.search !== "" ||
53
+ url.hash !== "" ||
54
+ url.hostname === "") {
55
+ fail("invalid_relay_url");
56
+ }
57
+ return url.toString();
58
+ }
59
+ function decodeBase64UrlExact(value, bytes, errorCode) {
60
+ if (!/^[A-Za-z0-9_-]+$/.test(value))
61
+ fail(errorCode);
62
+ let decoded;
63
+ try {
64
+ decoded = Buffer.from(value, "base64url");
65
+ }
66
+ catch {
67
+ fail(errorCode);
68
+ }
69
+ if (decoded.length !== bytes || decoded.toString("base64url") !== value)
70
+ fail(errorCode);
71
+ return decoded;
72
+ }
73
+ function isRecord(value) {
74
+ return typeof value === "object" && value !== null && !Array.isArray(value);
75
+ }
76
+ function hasExactKeys(value, keys) {
77
+ const actual = Object.keys(value).sort();
78
+ const expected = [...keys].sort();
79
+ return actual.length === expected.length && actual.every((key, index) => key === expected[index]);
80
+ }
81
+ function normalizeConfig(value, errorCode = "invalid_pairing_config") {
82
+ if (!isRecord(value) ||
83
+ !hasExactKeys(value, ["version", "relayUrl", "relayToken", "channel", "key"])) {
84
+ fail(errorCode);
85
+ }
86
+ if (value.version !== PAIR_CODE_VERSION ||
87
+ typeof value.relayUrl !== "string" ||
88
+ typeof value.relayToken !== "string" ||
89
+ typeof value.channel !== "string" ||
90
+ typeof value.key !== "string") {
91
+ fail(errorCode);
92
+ }
93
+ let relayUrl;
94
+ try {
95
+ relayUrl = validateRelayUrl(value.relayUrl);
96
+ decodeBase64UrlExact(value.relayToken, 32, errorCode);
97
+ decodeBase64UrlExact(value.channel, 16, errorCode);
98
+ decodeBase64UrlExact(value.key, 32, errorCode);
99
+ }
100
+ catch {
101
+ fail(errorCode);
102
+ }
103
+ return {
104
+ version: PAIR_CODE_VERSION,
105
+ relayUrl,
106
+ relayToken: value.relayToken,
107
+ channel: value.channel,
108
+ key: value.key,
109
+ };
110
+ }
111
+ export function generateRelayAccessToken() {
112
+ return randomBytes(32).toString("base64url");
113
+ }
114
+ export function deriveRelayChannelToken(masterToken, channel) {
115
+ const master = decodeBase64UrlExact(masterToken, 32, "invalid_relay_token");
116
+ decodeBase64UrlExact(channel, 16, "invalid_pairing_config");
117
+ return createHmac("sha256", master)
118
+ .update(`codex-grok-mcp-relay:v1\0${channel}`, "utf8")
119
+ .digest("base64url");
120
+ }
121
+ export function generatePairCode(relayUrl, relayMasterToken = generateRelayAccessToken()) {
122
+ const channel = randomBytes(16).toString("base64url");
123
+ const payload = {
124
+ v: PAIR_CODE_VERSION,
125
+ relay: validateRelayUrl(relayUrl),
126
+ token: deriveRelayChannelToken(relayMasterToken, channel),
127
+ channel,
128
+ key: randomBytes(32).toString("base64url"),
129
+ };
130
+ return `${PAIR_CODE_PREFIX}${Buffer.from(JSON.stringify(payload), "utf8").toString("base64url")}`;
131
+ }
132
+ export function parsePairCode(pairCode) {
133
+ try {
134
+ if (pairCode.length <= PAIR_CODE_PREFIX.length ||
135
+ pairCode.length > 4_096 ||
136
+ hasUnsafeControlCharacters(pairCode) ||
137
+ !pairCode.startsWith(PAIR_CODE_PREFIX) ||
138
+ !/^[A-Za-z0-9_-]+$/.test(pairCode)) {
139
+ fail("invalid_pair_code");
140
+ }
141
+ const encoded = pairCode.slice(PAIR_CODE_PREFIX.length);
142
+ const decoded = Buffer.from(encoded, "base64url");
143
+ if (decoded.toString("base64url") !== encoded)
144
+ fail("invalid_pair_code");
145
+ const payload = JSON.parse(decoded.toString("utf8"));
146
+ if (!isRecord(payload) ||
147
+ !hasExactKeys(payload, ["v", "relay", "token", "channel", "key"])) {
148
+ fail("invalid_pair_code");
149
+ }
150
+ if (payload.v !== PAIR_CODE_VERSION ||
151
+ typeof payload.relay !== "string" ||
152
+ typeof payload.token !== "string" ||
153
+ typeof payload.channel !== "string" ||
154
+ typeof payload.key !== "string") {
155
+ fail("invalid_pair_code");
156
+ }
157
+ return normalizeConfig({
158
+ version: payload.v,
159
+ relayUrl: payload.relay,
160
+ relayToken: payload.token,
161
+ channel: payload.channel,
162
+ key: payload.key,
163
+ }, "invalid_pair_code");
164
+ }
165
+ catch {
166
+ fail("invalid_pair_code");
167
+ }
168
+ }
169
+ function validateRole(role) {
170
+ if (role !== "codex" && role !== "bridge")
171
+ fail("invalid_bridge_role");
172
+ }
173
+ function aad(channel, role) {
174
+ return Buffer.from(`codex-grok-mcp:v2\0${channel}\0${role}`, "utf8");
175
+ }
176
+ export function encryptFrame(configValue, senderRole, plaintextValue) {
177
+ const config = normalizeConfig(configValue);
178
+ validateRole(senderRole);
179
+ const plaintext = typeof plaintextValue === "string"
180
+ ? Buffer.from(plaintextValue, "utf8")
181
+ : Buffer.from(plaintextValue);
182
+ if (plaintext.length > MAX_PLAINTEXT_BYTES)
183
+ fail("plaintext_too_large");
184
+ const nonce = randomBytes(NONCE_BYTES);
185
+ const key = decodeBase64UrlExact(config.key, 32, "invalid_pairing_config");
186
+ const cipher = createCipheriv("aes-256-gcm", key, nonce, {
187
+ authTagLength: AUTH_TAG_BYTES,
188
+ });
189
+ cipher.setAAD(aad(config.channel, senderRole));
190
+ const encrypted = Buffer.concat([cipher.update(plaintext), cipher.final()]);
191
+ const frame = Buffer.concat([
192
+ Buffer.from([FRAME_VERSION]),
193
+ nonce,
194
+ encrypted,
195
+ cipher.getAuthTag(),
196
+ ]).toString("base64url");
197
+ if (frame.length > MAX_FRAME_BYTES)
198
+ fail("frame_too_large");
199
+ return frame;
200
+ }
201
+ export function decryptFrame(configValue, senderRole, frameValue) {
202
+ const config = normalizeConfig(configValue);
203
+ validateRole(senderRole);
204
+ if (frameValue.length === 0 ||
205
+ frameValue.length > MAX_FRAME_BYTES ||
206
+ hasUnsafeControlCharacters(frameValue) ||
207
+ !/^[A-Za-z0-9_-]+$/.test(frameValue)) {
208
+ fail("invalid_frame");
209
+ }
210
+ let frame;
211
+ try {
212
+ frame = Buffer.from(frameValue, "base64url");
213
+ }
214
+ catch {
215
+ fail("invalid_frame");
216
+ }
217
+ if (frame.toString("base64url") !== frameValue ||
218
+ frame.length < 1 + NONCE_BYTES + AUTH_TAG_BYTES ||
219
+ frame[0] !== FRAME_VERSION) {
220
+ fail("invalid_frame");
221
+ }
222
+ const nonceStart = 1;
223
+ const ciphertextStart = nonceStart + NONCE_BYTES;
224
+ const tagStart = frame.length - AUTH_TAG_BYTES;
225
+ const nonce = frame.subarray(nonceStart, ciphertextStart);
226
+ const ciphertext = frame.subarray(ciphertextStart, tagStart);
227
+ if (ciphertext.length > MAX_PLAINTEXT_BYTES)
228
+ fail("invalid_frame");
229
+ try {
230
+ const key = decodeBase64UrlExact(config.key, 32, "invalid_pairing_config");
231
+ const decipher = createDecipheriv("aes-256-gcm", key, nonce, {
232
+ authTagLength: AUTH_TAG_BYTES,
233
+ });
234
+ decipher.setAAD(aad(config.channel, senderRole));
235
+ decipher.setAuthTag(frame.subarray(tagStart));
236
+ return Buffer.concat([decipher.update(ciphertext), decipher.final()]);
237
+ }
238
+ catch (error) {
239
+ if (error instanceof BridgePairingError)
240
+ throw error;
241
+ fail("frame_auth_failed");
242
+ }
243
+ }
244
+ export function defaultBridgeConfigPath(environment = process.env, homeDirectory = homedir()) {
245
+ const configuredRoot = environment.XDG_CONFIG_HOME;
246
+ const root = configuredRoot !== undefined && configuredRoot !== "" && isAbsolute(configuredRoot)
247
+ ? configuredRoot
248
+ : join(homeDirectory, ".config");
249
+ return join(root, "codex-grok-mcp", "bridge.json");
250
+ }
251
+ async function ensurePrivateParent(path) {
252
+ const parent = dirname(path);
253
+ try {
254
+ await mkdir(parent, { recursive: true, mode: 0o700 });
255
+ const details = await lstat(parent);
256
+ if (details.isSymbolicLink() || !details.isDirectory() || (details.mode & 0o777) !== 0o700) {
257
+ fail("insecure_config_directory");
258
+ }
259
+ }
260
+ catch (error) {
261
+ if (error instanceof BridgePairingError)
262
+ throw error;
263
+ fail("config_save_failed");
264
+ }
265
+ }
266
+ function encodeConfig(config) {
267
+ return `${JSON.stringify(config)}\n`;
268
+ }
269
+ export async function savePairingConfig(configValue, path = defaultBridgeConfigPath(), options = {}) {
270
+ const config = normalizeConfig(configValue);
271
+ await ensurePrivateParent(path);
272
+ const temporaryPath = join(dirname(path), `.bridge-${process.pid}-${randomBytes(8).toString("hex")}.tmp`);
273
+ try {
274
+ const handle = await open(temporaryPath, fsConstants.O_CREAT | fsConstants.O_EXCL | fsConstants.O_WRONLY, 0o600);
275
+ try {
276
+ await handle.writeFile(encodeConfig(config), "utf8");
277
+ await handle.sync();
278
+ }
279
+ finally {
280
+ await handle.close();
281
+ }
282
+ await chmod(temporaryPath, 0o600);
283
+ if (options.overwrite === true) {
284
+ await rename(temporaryPath, path);
285
+ }
286
+ else {
287
+ try {
288
+ await link(temporaryPath, path);
289
+ }
290
+ catch (error) {
291
+ if (isNodeError(error) && error.code === "EEXIST")
292
+ fail("config_exists");
293
+ throw error;
294
+ }
295
+ await unlink(temporaryPath);
296
+ }
297
+ }
298
+ catch (error) {
299
+ await unlink(temporaryPath).catch(() => undefined);
300
+ if (error instanceof BridgePairingError)
301
+ throw error;
302
+ fail("config_save_failed");
303
+ }
304
+ }
305
+ function isNodeError(error) {
306
+ return error instanceof Error && "code" in error;
307
+ }
308
+ export async function loadPairingConfig(path = defaultBridgeConfigPath()) {
309
+ try {
310
+ const pathDetails = await lstat(path);
311
+ if (pathDetails.isSymbolicLink())
312
+ fail("invalid_config_file");
313
+ const noFollow = typeof fsConstants.O_NOFOLLOW === "number" ? fsConstants.O_NOFOLLOW : 0;
314
+ const handle = await open(path, fsConstants.O_RDONLY | noFollow);
315
+ let contents;
316
+ try {
317
+ const details = await handle.stat();
318
+ if (!details.isFile() || (details.mode & 0o777) !== 0o600 || details.size > MAX_CONFIG_BYTES) {
319
+ fail("invalid_config_file");
320
+ }
321
+ contents = await handle.readFile({ encoding: "utf8" });
322
+ }
323
+ finally {
324
+ await handle.close();
325
+ }
326
+ if (Buffer.byteLength(contents, "utf8") > MAX_CONFIG_BYTES || hasUnsafeControlCharacters(contents.trimEnd())) {
327
+ fail("invalid_config_file");
328
+ }
329
+ return normalizeConfig(JSON.parse(contents), "invalid_config_file");
330
+ }
331
+ catch (error) {
332
+ if (error instanceof BridgePairingError)
333
+ throw error;
334
+ fail("config_load_failed");
335
+ }
336
+ }
337
+ export async function loadOptionalPairingConfig(path = defaultBridgeConfigPath()) {
338
+ try {
339
+ await lstat(path);
340
+ }
341
+ catch (error) {
342
+ if (isNodeError(error) && error.code === "ENOENT")
343
+ return undefined;
344
+ fail("config_load_failed");
345
+ }
346
+ return loadPairingConfig(path);
347
+ }
348
+ export async function removePairingConfig(path = defaultBridgeConfigPath()) {
349
+ try {
350
+ const details = await lstat(path);
351
+ if (!details.isFile() && !details.isSymbolicLink())
352
+ fail("invalid_config_file");
353
+ await unlink(path);
354
+ return true;
355
+ }
356
+ catch (error) {
357
+ if (isNodeError(error) && error.code === "ENOENT")
358
+ return false;
359
+ if (error instanceof BridgePairingError)
360
+ throw error;
361
+ fail("config_remove_failed");
362
+ }
363
+ }
364
+ //# sourceMappingURL=bridge-pairing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-pairing.js","sourceRoot":"","sources":["../src/bridge-pairing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,187 @@
1
+ import { z } from "zod";
2
+ export declare const MAX_READ_BOT_MESSAGES = 50;
3
+ export declare const MAX_READ_SNAPSHOT_BYTES: number;
4
+ export declare const bridgeBotSchema: z.ZodObject<{
5
+ id: z.ZodString;
6
+ name: z.ZodString;
7
+ is_running: z.ZodNullable<z.ZodBoolean>;
8
+ }, z.core.$strict>;
9
+ export declare const bridgeReadMessageSchema: z.ZodObject<{
10
+ speaker: z.ZodEnum<{
11
+ bot: "bot";
12
+ peer: "peer";
13
+ user: "user";
14
+ }>;
15
+ text: z.ZodString;
16
+ timestamp_ms: z.ZodNullable<z.ZodNumber>;
17
+ }, z.core.$strict>;
18
+ export declare const bridgeReadSnapshotSchema: z.ZodObject<{
19
+ bot_id: z.ZodString;
20
+ is_running: z.ZodNullable<z.ZodBoolean>;
21
+ is_composing: z.ZodNullable<z.ZodBoolean>;
22
+ awaiting_user: z.ZodNullable<z.ZodBoolean>;
23
+ async_task_count: z.ZodNullable<z.ZodNumber>;
24
+ running_subagent_count: z.ZodNullable<z.ZodNumber>;
25
+ messages: z.ZodArray<z.ZodObject<{
26
+ speaker: z.ZodEnum<{
27
+ bot: "bot";
28
+ peer: "peer";
29
+ user: "user";
30
+ }>;
31
+ text: z.ZodString;
32
+ timestamp_ms: z.ZodNullable<z.ZodNumber>;
33
+ }, z.core.$strict>>;
34
+ next_before_sequence: z.ZodNullable<z.ZodNumber>;
35
+ truncated: z.ZodBoolean;
36
+ }, z.core.$strict>;
37
+ export type BridgeReadMessage = z.infer<typeof bridgeReadMessageSchema>;
38
+ export type BridgeReadSnapshot = z.infer<typeof bridgeReadSnapshotSchema>;
39
+ export declare const bridgeStatusResultSchema: z.ZodObject<{
40
+ companion_version: z.ZodString;
41
+ supported_protocol_versions: z.ZodArray<z.ZodNumber>;
42
+ capabilities: z.ZodArray<z.ZodString>;
43
+ gateway_healthy: z.ZodBoolean;
44
+ gateway_busy: z.ZodBoolean;
45
+ non_group_bot_count: z.ZodNumber;
46
+ }, z.core.$strict>;
47
+ export type BridgeStatusResult = z.infer<typeof bridgeStatusResultSchema>;
48
+ export declare function createBridgeReadSnapshot(input: {
49
+ bot_id: string;
50
+ is_running: boolean | null;
51
+ is_composing: boolean | null;
52
+ awaiting_user: boolean | null;
53
+ async_task_count: number | null;
54
+ running_subagent_count: number | null;
55
+ entries: unknown[];
56
+ next_before_sequence: number | null;
57
+ }): BridgeReadSnapshot;
58
+ export declare const bridgeRequestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
59
+ v: z.ZodLiteral<3>;
60
+ id: z.ZodString;
61
+ issued_at_ms: z.ZodNumber;
62
+ op: z.ZodLiteral<"status">;
63
+ args: z.ZodObject<{}, z.core.$strict>;
64
+ }, z.core.$strict>, z.ZodObject<{
65
+ v: z.ZodLiteral<1>;
66
+ id: z.ZodString;
67
+ issued_at_ms: z.ZodNumber;
68
+ op: z.ZodLiteral<"list_bots">;
69
+ args: z.ZodObject<{}, z.core.$strict>;
70
+ }, z.core.$strict>, z.ZodObject<{
71
+ v: z.ZodLiteral<2>;
72
+ id: z.ZodString;
73
+ issued_at_ms: z.ZodNumber;
74
+ op: z.ZodLiteral<"read_bot">;
75
+ args: z.ZodObject<{
76
+ bot_id: z.ZodString;
77
+ limit: z.ZodNumber;
78
+ before_sequence: z.ZodOptional<z.ZodNumber>;
79
+ }, z.core.$strict>;
80
+ }, z.core.$strict>, z.ZodObject<{
81
+ v: z.ZodLiteral<1>;
82
+ id: z.ZodString;
83
+ issued_at_ms: z.ZodNumber;
84
+ op: z.ZodLiteral<"send_message">;
85
+ args: z.ZodObject<{
86
+ bot_id: z.ZodString;
87
+ message: z.ZodString;
88
+ }, z.core.$strict>;
89
+ }, z.core.$strict>], "op">;
90
+ export declare const bridgeErrorCodeSchema: z.ZodEnum<{
91
+ AUTH_FAILED: "AUTH_FAILED";
92
+ BOT_NOT_FOUND: "BOT_NOT_FOUND";
93
+ CANCELLED: "CANCELLED";
94
+ CONFIG_INVALID: "CONFIG_INVALID";
95
+ GATEWAY_REJECTED: "GATEWAY_REJECTED";
96
+ INVALID_RESPONSE: "INVALID_RESPONSE";
97
+ OUTPUT_LIMIT: "OUTPUT_LIMIT";
98
+ RATE_LIMITED: "RATE_LIMITED";
99
+ ROSTER_CHANGED: "ROSTER_CHANGED";
100
+ TIMEOUT: "TIMEOUT";
101
+ UNAVAILABLE: "UNAVAILABLE";
102
+ UPGRADE_REQUIRED: "UPGRADE_REQUIRED";
103
+ }>;
104
+ export declare const bridgeResponseSchema: z.ZodUnion<readonly [z.ZodObject<{
105
+ v: z.ZodLiteral<3>;
106
+ id: z.ZodString;
107
+ op: z.ZodLiteral<"status">;
108
+ ok: z.ZodLiteral<true>;
109
+ result: z.ZodObject<{
110
+ companion_version: z.ZodString;
111
+ supported_protocol_versions: z.ZodArray<z.ZodNumber>;
112
+ capabilities: z.ZodArray<z.ZodString>;
113
+ gateway_healthy: z.ZodBoolean;
114
+ gateway_busy: z.ZodBoolean;
115
+ non_group_bot_count: z.ZodNumber;
116
+ }, z.core.$strict>;
117
+ }, z.core.$strict>, z.ZodObject<{
118
+ v: z.ZodLiteral<1>;
119
+ id: z.ZodString;
120
+ op: z.ZodLiteral<"list_bots">;
121
+ ok: z.ZodLiteral<true>;
122
+ result: z.ZodObject<{
123
+ bots: z.ZodArray<z.ZodObject<{
124
+ id: z.ZodString;
125
+ name: z.ZodString;
126
+ is_running: z.ZodNullable<z.ZodBoolean>;
127
+ }, z.core.$strict>>;
128
+ }, z.core.$strict>;
129
+ }, z.core.$strict>, z.ZodObject<{
130
+ v: z.ZodLiteral<2>;
131
+ id: z.ZodString;
132
+ op: z.ZodLiteral<"read_bot">;
133
+ ok: z.ZodLiteral<true>;
134
+ result: z.ZodObject<{
135
+ bot_id: z.ZodString;
136
+ is_running: z.ZodNullable<z.ZodBoolean>;
137
+ is_composing: z.ZodNullable<z.ZodBoolean>;
138
+ awaiting_user: z.ZodNullable<z.ZodBoolean>;
139
+ async_task_count: z.ZodNullable<z.ZodNumber>;
140
+ running_subagent_count: z.ZodNullable<z.ZodNumber>;
141
+ messages: z.ZodArray<z.ZodObject<{
142
+ speaker: z.ZodEnum<{
143
+ bot: "bot";
144
+ peer: "peer";
145
+ user: "user";
146
+ }>;
147
+ text: z.ZodString;
148
+ timestamp_ms: z.ZodNullable<z.ZodNumber>;
149
+ }, z.core.$strict>>;
150
+ next_before_sequence: z.ZodNullable<z.ZodNumber>;
151
+ truncated: z.ZodBoolean;
152
+ }, z.core.$strict>;
153
+ }, z.core.$strict>, z.ZodObject<{
154
+ v: z.ZodLiteral<1>;
155
+ id: z.ZodString;
156
+ op: z.ZodLiteral<"send_message">;
157
+ ok: z.ZodLiteral<true>;
158
+ result: z.ZodObject<{
159
+ accepted: z.ZodLiteral<true>;
160
+ request_id: z.ZodString;
161
+ }, z.core.$strict>;
162
+ }, z.core.$strict>, z.ZodObject<{
163
+ v: z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodLiteral<2>, z.ZodLiteral<3>]>;
164
+ id: z.ZodString;
165
+ ok: z.ZodLiteral<false>;
166
+ error: z.ZodObject<{
167
+ code: z.ZodEnum<{
168
+ AUTH_FAILED: "AUTH_FAILED";
169
+ BOT_NOT_FOUND: "BOT_NOT_FOUND";
170
+ CANCELLED: "CANCELLED";
171
+ CONFIG_INVALID: "CONFIG_INVALID";
172
+ GATEWAY_REJECTED: "GATEWAY_REJECTED";
173
+ INVALID_RESPONSE: "INVALID_RESPONSE";
174
+ OUTPUT_LIMIT: "OUTPUT_LIMIT";
175
+ RATE_LIMITED: "RATE_LIMITED";
176
+ ROSTER_CHANGED: "ROSTER_CHANGED";
177
+ TIMEOUT: "TIMEOUT";
178
+ UNAVAILABLE: "UNAVAILABLE";
179
+ UPGRADE_REQUIRED: "UPGRADE_REQUIRED";
180
+ }>;
181
+ delivery_may_have_occurred: z.ZodBoolean;
182
+ request_id: z.ZodOptional<z.ZodString>;
183
+ }, z.core.$strict>;
184
+ }, z.core.$strict>]>;
185
+ export type BridgeRequest = z.infer<typeof bridgeRequestSchema>;
186
+ export type BridgeResponse = z.infer<typeof bridgeResponseSchema>;
187
+ export type BridgeErrorCode = z.infer<typeof bridgeErrorCodeSchema>;