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,436 @@
1
+ #!/usr/bin/env node
2
+ import { createHash } from "node:crypto";
3
+ import { realpathSync } from "node:fs";
4
+ import { fileURLToPath } from "node:url";
5
+ import { LocalGatewayError, LocalGrokBotClient, } from "./grok-bot-client.js";
6
+ import WebSocket from "ws";
7
+ import { bridgeRequestSchema, bridgeResponseSchema, createBridgeReadSnapshot, } from "./bridge-protocol.js";
8
+ import { decryptFrame, defaultBridgeConfigPath, encryptFrame, loadPairingConfig, parsePairCode, removePairingConfig, savePairingConfig, } from "./bridge-pairing.js";
9
+ import { PersistentReplayGuard } from "./bridge-replay.js";
10
+ import { BridgeRuntimeError, CompanionLease } from "./bridge-runtime.js";
11
+ import { BRIDGE_CAPABILITIES, BRIDGE_PROTOCOL_VERSIONS, BRIDGE_STATUS_PROTOCOL_VERSION, CODEX_GROK_VERSION, } from "./version.js";
12
+ const PROBE_TIMEOUT_MS = 5_000;
13
+ const BRIDGE_GATEWAY_TIMEOUT_MS = 10_000;
14
+ const MAX_RELAY_FRAME_BYTES = 128 * 1024;
15
+ const REQUEST_FRESHNESS_MS = 60_000;
16
+ const REPLAY_RETENTION_MS = REQUEST_FRESHNESS_MS * 2;
17
+ const MAX_RECENT_REQUESTS = 1_024;
18
+ const RECONNECT_DELAYS_MS = [1_000, 2_000, 4_000, 8_000, 15_000];
19
+ export function createBridgeProbeClient() {
20
+ return new LocalGrokBotClient({ timeoutMs: BRIDGE_GATEWAY_TIMEOUT_MS });
21
+ }
22
+ export async function probeBridge(client) {
23
+ const discovery = client.discovery();
24
+ const [health, agents] = await Promise.all([client.health(), client.listAgents()]);
25
+ const ids = agents
26
+ .filter((agent) => !agent.isGroup)
27
+ .map((agent) => agent.id)
28
+ .sort();
29
+ return {
30
+ gateway: {
31
+ port: discovery.port,
32
+ pid: discovery.pid,
33
+ hasToken: discovery.hasToken,
34
+ },
35
+ health: {
36
+ ok: health.ok,
37
+ busy: health.isBusy,
38
+ },
39
+ bot_count: ids.length,
40
+ roster_fingerprint: `sha256:${createHash("sha256").update(JSON.stringify(ids)).digest("hex")}`,
41
+ };
42
+ }
43
+ function bridgeSocketUrl(config) {
44
+ const url = new URL(config.relayUrl);
45
+ url.pathname = `${url.pathname.replace(/\/+$/, "")}/${config.channel}`;
46
+ url.searchParams.set("role", "bridge");
47
+ return url.toString();
48
+ }
49
+ function textFrame(data, isBinary) {
50
+ const buffer = Array.isArray(data)
51
+ ? Buffer.concat(data)
52
+ : Buffer.isBuffer(data)
53
+ ? data
54
+ : Buffer.from(new Uint8Array(data));
55
+ if (isBinary || buffer.byteLength > MAX_RELAY_FRAME_BYTES)
56
+ throw new Error("invalid_frame");
57
+ return buffer.toString("utf8");
58
+ }
59
+ function responseError(request, code, deliveryMayHaveOccurred, requestId) {
60
+ return {
61
+ v: request.v,
62
+ id: request.id,
63
+ ok: false,
64
+ error: {
65
+ code,
66
+ delivery_may_have_occurred: deliveryMayHaveOccurred,
67
+ ...(requestId === undefined ? {} : { request_id: requestId }),
68
+ },
69
+ };
70
+ }
71
+ function sdkFailure(request, caught, sendStarted) {
72
+ if (!(caught instanceof LocalGatewayError)) {
73
+ return responseError(request, "UNAVAILABLE", sendStarted);
74
+ }
75
+ const code = caught.code;
76
+ return responseError(request, code, sendStarted, caught.requestId);
77
+ }
78
+ export async function handleBridgeRequest(client, request) {
79
+ try {
80
+ return await (client.withGatewaySnapshot === undefined
81
+ ? handleBridgeRequestWithGateway(client, request)
82
+ : client.withGatewaySnapshot(() => handleBridgeRequestWithGateway(client, request)));
83
+ }
84
+ catch (caught) {
85
+ return sdkFailure(request, caught, false);
86
+ }
87
+ }
88
+ async function handleBridgeRequestWithGateway(client, request) {
89
+ if (request.op === "status") {
90
+ const [health, agents] = await Promise.all([client.health(), client.listAgents()]);
91
+ return bridgeResponseSchema.parse({
92
+ v: BRIDGE_STATUS_PROTOCOL_VERSION,
93
+ id: request.id,
94
+ op: request.op,
95
+ ok: true,
96
+ result: {
97
+ companion_version: CODEX_GROK_VERSION,
98
+ supported_protocol_versions: [...BRIDGE_PROTOCOL_VERSIONS],
99
+ capabilities: [...BRIDGE_CAPABILITIES],
100
+ gateway_healthy: health.ok,
101
+ gateway_busy: health.isBusy,
102
+ non_group_bot_count: agents.filter((agent) => !agent.isGroup).length,
103
+ },
104
+ });
105
+ }
106
+ const agents = await client.listAgents();
107
+ const bots = agents
108
+ .filter((agent) => !agent.isGroup)
109
+ .map((agent) => ({ id: agent.id, name: agent.name, is_running: agent.isRunning ?? null }));
110
+ if (request.op === "list_bots") {
111
+ return bridgeResponseSchema.parse({
112
+ v: 1,
113
+ id: request.id,
114
+ op: request.op,
115
+ ok: true,
116
+ result: { bots },
117
+ });
118
+ }
119
+ const bot = bots.find((candidate) => candidate.id === request.args.bot_id);
120
+ if (bot === undefined)
121
+ return responseError(request, "BOT_NOT_FOUND", false);
122
+ if (request.op === "read_bot") {
123
+ const agent = agents.find((candidate) => candidate.id === bot.id);
124
+ if (agent === undefined)
125
+ return responseError(request, "BOT_NOT_FOUND", false);
126
+ const [tail, tasks, subagents] = await Promise.all([
127
+ client.getAgentTranscriptTail({
128
+ id: bot.id,
129
+ limit: request.args.limit,
130
+ ...(request.args.before_sequence === undefined
131
+ ? {}
132
+ : { beforeSeq: request.args.before_sequence }),
133
+ }),
134
+ client.getAsyncTasks({ id: bot.id }),
135
+ client.getSubagents({ id: bot.id }),
136
+ ]);
137
+ if (tail.entries.length > request.args.limit) {
138
+ return responseError(request, "INVALID_RESPONSE", false);
139
+ }
140
+ const result = createBridgeReadSnapshot({
141
+ bot_id: bot.id,
142
+ is_running: bot.is_running,
143
+ is_composing: agent.isComposingMessage ?? null,
144
+ awaiting_user: agent.awaitingUserResponse === undefined
145
+ ? null
146
+ : agent.awaitingUserResponse !== null && agent.awaitingUserResponse !== false,
147
+ async_task_count: tasks.length,
148
+ running_subagent_count: subagents.filter(({ status }) => status === "running").length,
149
+ entries: tail.entries,
150
+ next_before_sequence: tail.nextBeforeSeq ?? null,
151
+ });
152
+ return bridgeResponseSchema.parse({
153
+ v: 2,
154
+ id: request.id,
155
+ op: request.op,
156
+ ok: true,
157
+ result,
158
+ });
159
+ }
160
+ let sendStarted = false;
161
+ try {
162
+ sendStarted = true;
163
+ const receipt = await client.sendPrompt({
164
+ agentId: bot.id,
165
+ prompt: request.args.message,
166
+ clientNonce: request.id,
167
+ });
168
+ if (receipt.accepted !== true)
169
+ return responseError(request, "INVALID_RESPONSE", true);
170
+ return {
171
+ v: 1,
172
+ id: request.id,
173
+ op: request.op,
174
+ ok: true,
175
+ result: { accepted: true, request_id: request.id },
176
+ };
177
+ }
178
+ catch (caught) {
179
+ return sdkFailure(request, caught, sendStarted);
180
+ }
181
+ }
182
+ async function connectOnce(config, client, state, signal) {
183
+ if (signal?.aborted)
184
+ return;
185
+ await new Promise((resolve) => {
186
+ const socket = new WebSocket(bridgeSocketUrl(config), {
187
+ followRedirects: false,
188
+ handshakeTimeout: 15_000,
189
+ headers: { authorization: `Bearer ${config.relayToken}` },
190
+ maxPayload: MAX_RELAY_FRAME_BYTES,
191
+ perMessageDeflate: false,
192
+ });
193
+ let settled = false;
194
+ const finish = () => {
195
+ if (settled)
196
+ return;
197
+ settled = true;
198
+ signal?.removeEventListener("abort", onAbort);
199
+ socket.removeAllListeners();
200
+ socket.terminate();
201
+ resolve();
202
+ };
203
+ const onAbort = () => finish();
204
+ signal?.addEventListener("abort", onAbort, { once: true });
205
+ socket.on("message", (data, isBinary) => {
206
+ void (async () => {
207
+ let request;
208
+ try {
209
+ const plaintext = decryptFrame(config, "codex", textFrame(data, isBinary));
210
+ request = bridgeRequestSchema.parse(JSON.parse(plaintext.toString("utf8")));
211
+ }
212
+ catch {
213
+ socket.close(4400, "invalid frame");
214
+ return;
215
+ }
216
+ const now = Date.now();
217
+ for (const [id, record] of state.recentRequests) {
218
+ if (now - record.seenAt > REPLAY_RETENTION_MS)
219
+ state.recentRequests.delete(id);
220
+ }
221
+ const previous = state.recentRequests.get(request.id);
222
+ const stale = Math.abs(now - request.issued_at_ms) > REQUEST_FRESHNESS_MS;
223
+ if (stale ||
224
+ previous !== undefined ||
225
+ state.recentRequests.size >= MAX_RECENT_REQUESTS) {
226
+ if (socket.readyState === WebSocket.OPEN) {
227
+ try {
228
+ socket.send(encryptFrame(config, "bridge", JSON.stringify(previous?.response ??
229
+ responseError(request, "INVALID_RESPONSE", request.op === "send_message" &&
230
+ (stale ||
231
+ previous !== undefined ||
232
+ state.recentRequests.size >= MAX_RECENT_REQUESTS)))), { binary: false, compress: false });
233
+ }
234
+ catch {
235
+ finish();
236
+ }
237
+ }
238
+ return;
239
+ }
240
+ const record = { seenAt: now };
241
+ state.recentRequests.set(request.id, record);
242
+ let response;
243
+ if (request.op === "send_message") {
244
+ try {
245
+ if ((await state.replayGuard.claim(request.id, now)) === "replay") {
246
+ response = responseError(request, "INVALID_RESPONSE", true);
247
+ }
248
+ }
249
+ catch {
250
+ response = responseError(request, "CONFIG_INVALID", false);
251
+ }
252
+ }
253
+ response ??= state.busy
254
+ ? responseError(request, "UNAVAILABLE", false)
255
+ : await (async () => {
256
+ state.busy = true;
257
+ try {
258
+ return await handleBridgeRequest(client, request);
259
+ }
260
+ finally {
261
+ state.busy = false;
262
+ }
263
+ })();
264
+ record.response = response;
265
+ if (socket.readyState !== WebSocket.OPEN)
266
+ return;
267
+ try {
268
+ socket.send(encryptFrame(config, "bridge", JSON.stringify(response)), {
269
+ binary: false,
270
+ compress: false,
271
+ });
272
+ }
273
+ catch {
274
+ finish();
275
+ }
276
+ })();
277
+ });
278
+ socket.once("close", finish);
279
+ socket.once("error", finish);
280
+ });
281
+ }
282
+ function waitForReconnect(milliseconds, signal) {
283
+ if (signal?.aborted)
284
+ return Promise.resolve();
285
+ return new Promise((resolve) => {
286
+ const done = () => {
287
+ signal?.removeEventListener("abort", onAbort);
288
+ resolve();
289
+ };
290
+ const timer = setTimeout(done, milliseconds);
291
+ const onAbort = () => {
292
+ clearTimeout(timer);
293
+ done();
294
+ };
295
+ signal?.addEventListener("abort", onAbort, { once: true });
296
+ });
297
+ }
298
+ export async function runBridge(config, client = createBridgeProbeClient(), signal, replayRoot) {
299
+ let attempt = 0;
300
+ const state = {
301
+ busy: false,
302
+ recentRequests: new Map(),
303
+ replayGuard: await PersistentReplayGuard.open(config.channel, REPLAY_RETENTION_MS, replayRoot),
304
+ };
305
+ while (!signal?.aborted) {
306
+ await connectOnce(config, client, state, signal);
307
+ if (signal?.aborted)
308
+ break;
309
+ const delay = RECONNECT_DELAYS_MS[Math.min(attempt, RECONNECT_DELAYS_MS.length - 1)];
310
+ await waitForReconnect(delay ?? 15_000, signal);
311
+ attempt += 1;
312
+ }
313
+ }
314
+ async function readPairCode() {
315
+ const input = process.stdin;
316
+ const output = process.stderr;
317
+ if (input.isTTY !== true || output.isTTY !== true || typeof input.setRawMode !== "function") {
318
+ throw new Error("interactive_terminal_required");
319
+ }
320
+ output.write("Pairing code: ");
321
+ const wasPaused = input.isPaused();
322
+ const wasRaw = input.isRaw === true;
323
+ input.setRawMode(true);
324
+ input.resume();
325
+ return await new Promise((resolve, reject) => {
326
+ let value = "";
327
+ let settled = false;
328
+ const finish = (caught) => {
329
+ if (settled)
330
+ return;
331
+ settled = true;
332
+ input.removeListener("data", onData);
333
+ input.setRawMode(wasRaw);
334
+ if (wasPaused)
335
+ input.pause();
336
+ output.write("\n");
337
+ if (caught === undefined)
338
+ resolve(value);
339
+ else
340
+ reject(caught);
341
+ };
342
+ const onData = (chunk) => {
343
+ const text = chunk
344
+ .toString()
345
+ .replaceAll("\u001b[200~", "")
346
+ .replaceAll("\u001b[201~", "");
347
+ for (const character of text) {
348
+ if (character === "\r" || character === "\n") {
349
+ finish();
350
+ return;
351
+ }
352
+ if (character === "\u0003" || character === "\u0004") {
353
+ finish(new Error("pairing_cancelled"));
354
+ return;
355
+ }
356
+ if (character === "\b" || character === "\u007f") {
357
+ value = value.slice(0, -1);
358
+ continue;
359
+ }
360
+ if (/^[A-Za-z0-9_-]$/.test(character)) {
361
+ if (value.length >= 4_096) {
362
+ finish(new Error("pairing_code_too_long"));
363
+ return;
364
+ }
365
+ value += character;
366
+ }
367
+ }
368
+ };
369
+ input.on("data", onData);
370
+ });
371
+ }
372
+ async function runUntilSignal(config, client) {
373
+ const controller = new AbortController();
374
+ const stop = () => controller.abort();
375
+ process.once("SIGINT", stop);
376
+ process.once("SIGTERM", stop);
377
+ try {
378
+ await runBridge(config, client, controller.signal);
379
+ }
380
+ finally {
381
+ process.removeListener("SIGINT", stop);
382
+ process.removeListener("SIGTERM", stop);
383
+ }
384
+ }
385
+ export async function runBridgeCompanion(argv, dependencies = {}) {
386
+ const stdout = dependencies.stdout ?? process.stdout;
387
+ const stderr = dependencies.stderr ?? process.stderr;
388
+ const command = argv[0];
389
+ const force = argv.length === 2 && argv[1] === "--force";
390
+ const validArgs = argv.length === 1 || (command === "connect" && force);
391
+ if (!validArgs || !["probe", "connect", "run", "unpair"].includes(command ?? "")) {
392
+ stderr.write(`${JSON.stringify({ error: "unsupported_command" })}\n`);
393
+ return 2;
394
+ }
395
+ try {
396
+ const createClient = dependencies.createClient ?? createBridgeProbeClient;
397
+ if (command === "probe") {
398
+ const result = await probeBridge(createClient());
399
+ stdout.write(`${JSON.stringify(result)}\n`);
400
+ return 0;
401
+ }
402
+ const configPath = dependencies.configPath ?? defaultBridgeConfigPath();
403
+ const lease = await CompanionLease.acquire(configPath);
404
+ try {
405
+ if (command === "unpair") {
406
+ const removed = await removePairingConfig(configPath);
407
+ stdout.write(`${JSON.stringify({ unpaired: removed })}\n`);
408
+ return 0;
409
+ }
410
+ const config = command === "connect"
411
+ ? parsePairCode(await (dependencies.readPairCode ?? readPairCode)())
412
+ : await loadPairingConfig(configPath);
413
+ if (command === "connect") {
414
+ await savePairingConfig(config, configPath, { overwrite: force });
415
+ stdout.write(`${JSON.stringify({ paired: true, mode: "foreground" })}\n`);
416
+ }
417
+ await (dependencies.runBridge ?? runUntilSignal)(config, createClient());
418
+ return 0;
419
+ }
420
+ finally {
421
+ await lease.release();
422
+ }
423
+ }
424
+ catch (caught) {
425
+ const error = caught instanceof BridgeRuntimeError
426
+ ? caught.code
427
+ : `${command ?? "bridge"}_failed`;
428
+ stderr.write(`${JSON.stringify({ error })}\n`);
429
+ return 1;
430
+ }
431
+ }
432
+ const invokedPath = process.argv[1];
433
+ if (invokedPath !== undefined && realpathSync(invokedPath) === fileURLToPath(import.meta.url)) {
434
+ process.exitCode = await runBridgeCompanion(process.argv.slice(2));
435
+ }
436
+ //# sourceMappingURL=bridge-companion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-companion.js","sourceRoot":"","sources":["../src/bridge-companion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export declare const MAX_PLAINTEXT_BYTES: number;
2
+ export declare const MAX_FRAME_BYTES: number;
3
+ export type BridgeRole = "codex" | "bridge";
4
+ export type PairingConfig = {
5
+ version: 2;
6
+ relayUrl: string;
7
+ relayToken: string;
8
+ channel: string;
9
+ key: string;
10
+ };
11
+ type SaveOptions = {
12
+ overwrite?: boolean;
13
+ };
14
+ export declare class BridgePairingError extends Error {
15
+ readonly code: string;
16
+ constructor(code: string);
17
+ }
18
+ export declare function validateRelayUrl(value: string): string;
19
+ export declare function generateRelayAccessToken(): string;
20
+ export declare function deriveRelayChannelToken(masterToken: string, channel: string): string;
21
+ export declare function generatePairCode(relayUrl: string, relayMasterToken?: string): string;
22
+ export declare function parsePairCode(pairCode: string): PairingConfig;
23
+ export declare function encryptFrame(configValue: PairingConfig, senderRole: BridgeRole, plaintextValue: string | Uint8Array): string;
24
+ export declare function decryptFrame(configValue: PairingConfig, senderRole: BridgeRole, frameValue: string): Buffer;
25
+ export declare function defaultBridgeConfigPath(environment?: NodeJS.ProcessEnv, homeDirectory?: string): string;
26
+ export declare function savePairingConfig(configValue: PairingConfig, path?: string, options?: SaveOptions): Promise<void>;
27
+ export declare function loadPairingConfig(path?: string): Promise<PairingConfig>;
28
+ export declare function loadOptionalPairingConfig(path?: string): Promise<PairingConfig | undefined>;
29
+ export declare function removePairingConfig(path?: string): Promise<boolean>;
30
+ export {};