grok-bot-cli 0.6.0 → 0.8.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "grok-bot-cli",
3
- "version": "0.6.0",
3
+ "version": "0.8.0",
4
4
  "description": "CLI and Agent Bundle plugin for Grok Bot agents and groups: create, update, message, inspect threads, and automate cleanup",
5
5
  "type": "module",
6
6
  "engines": {
@@ -42,12 +42,12 @@
42
42
  "agent-bundle"
43
43
  ],
44
44
  "devDependencies": {
45
- "@agent-bundle/runtime": "https://pkg.pr.new/ScriptedAlchemy/agent-bundle/@agent-bundle/runtime@8e55ab832d",
45
+ "@agent-bundle/runtime": "https://pkg.pr.new/ScriptedAlchemy/agent-bundle/@agent-bundle/runtime@57a9196caf2590ece001799eaeed92613352bc21",
46
46
  "@changesets/cli": "3.0.3",
47
47
  "@rstest/core": "0.11.12",
48
48
  "@types/node": "^24.0.0",
49
49
  "@types/react": "^19.2.18",
50
- "agent-bundle": "https://pkg.pr.new/ScriptedAlchemy/agent-bundle/agent-bundle@8e55ab832d",
50
+ "agent-bundle": "https://pkg.pr.new/ScriptedAlchemy/agent-bundle/agent-bundle@57a9196caf2590ece001799eaeed92613352bc21",
51
51
  "react": "19.3.0",
52
52
  "react-dom": "19.3.0",
53
53
  "typescript": "7.0.2",
package/dist/plugin.json CHANGED
@@ -1 +1 @@
1
- {"$schema":"https://agent-plugins.org/schemas/1.0.0/plugin.schema.json","author":{"name":"Zack Jackson","url":"https://github.com/ScriptedAlchemy"},"description":"Message Grok Bot from Codex, Claude Code, and Cursor, with managed automatic replies and explicit Codex conversation links.","homepage":"https://github.com/ScriptedAlchemy/grok-bot-cli#readme","keywords":["grok","grok-bot","grokbot","gbot","cursor","ai-agents","automation","terminal","cli","agent-bundle"],"license":"MIT","name":"gbot","repository":"https://github.com/ScriptedAlchemy/grok-bot-cli","version":"0.6.0"}
1
+ {"$schema":"https://agent-plugins.org/schemas/1.0.0/plugin.schema.json","author":{"name":"Zack Jackson","url":"https://github.com/ScriptedAlchemy"},"description":"Message Grok Bot from Codex, Claude Code, and Cursor, with managed automatic replies and explicit Codex conversation links.","homepage":"https://github.com/ScriptedAlchemy/grok-bot-cli#readme","keywords":["grok","grok-bot","grokbot","gbot","cursor","ai-agents","automation","terminal","cli","agent-bundle"],"license":"MIT","name":"gbot","repository":"https://github.com/ScriptedAlchemy/grok-bot-cli","version":"0.8.0"}
@@ -56217,10 +56217,10 @@ function listDesktopProcesses(timeoutMs = DESKTOP_PROCESS_LIST_TIMEOUT_MS) {
56217
56217
  const lines = Array.isArray(listProcesses) ? listProcesses : String(listProcesses ?? "").split(/\r?\n/);
56218
56218
  for (const line of lines){
56219
56219
  if (!/app-server/.test(line)) continue;
56220
- // Desktop's bundled binary, Mac or Windows-style separators with optional .exe.
56220
+ // Desktop's bundled binary only (Mac/Windows separators, optional .exe).
56221
+ // Do NOT match probe shells whose cmdline merely mentions ChatGPT.app +
56222
+ // app-server + codex-app-tools — that false-positives MATCH2 / Scout noise.
56221
56223
  if (/ChatGPT\.app[\\/].*Resources[\\/]codex(\.exe)?(["'\s]|$)/.test(line)) return "private-stdio";
56222
- // Same app-server line owned by ChatGPT.app carrying the app-tools override.
56223
- if (/ChatGPT\.app/.test(line) && /(codex_app|mcp_servers\.codex_app|codex-app-tools)/.test(line)) return "private-stdio";
56224
56224
  }
56225
56225
  return "unknown";
56226
56226
  }
@@ -57906,10 +57906,12 @@ function socketStateOf(path) {
57906
57906
  },
57907
57907
  "./src/core/gateway.js"(__unused_rspack___webpack_module__, __webpack_exports__, __webpack_require__) {
57908
57908
  /* import */ var node_crypto__rspack_import_0 = __webpack_require__("node:crypto");
57909
- /* import */ var _headers_js__rspack_import_4 = __webpack_require__("./src/core/headers.js");
57909
+ /* import */ var _headers_js__rspack_import_5 = __webpack_require__("./src/core/headers.js");
57910
57910
  /* import */ var _app_session_js__rspack_import_1 = __webpack_require__("./src/core/app-session.js");
57911
57911
  /* import */ var _store_js__rspack_import_2 = __webpack_require__("./src/core/store.js");
57912
57912
  /* import */ var _url_policy_js__rspack_import_3 = __webpack_require__("./src/core/url-policy.js");
57913
+ /* import */ var _grok_approvals_js__rspack_import_4 = __webpack_require__("./src/core/grok-approvals.js");
57914
+
57913
57915
 
57914
57916
 
57915
57917
 
@@ -57959,7 +57961,7 @@ function gatewayOverride() {
57959
57961
  kind: "gateway"
57960
57962
  }),
57961
57963
  gatewayToken: token,
57962
- gatewayHeaders: (0,_headers_js__rspack_import_4/* .headersFromEnv */.gx)()
57964
+ gatewayHeaders: (0,_headers_js__rspack_import_5/* .headersFromEnv */.gx)()
57963
57965
  };
57964
57966
  }
57965
57967
  return null;
@@ -57980,7 +57982,7 @@ function sessionFromApp() {
57980
57982
  kind: "gateway"
57981
57983
  }),
57982
57984
  gatewayToken: loaded.gatewayToken,
57983
- gatewayHeaders: (0,_headers_js__rspack_import_4/* .mergeGatewayHeaders */.bQ)((0,_headers_js__rspack_import_4/* .normalizeHeaderMap */.dk)(loaded.headers), (0,_headers_js__rspack_import_4/* .headersFromEnv */.gx)())
57985
+ gatewayHeaders: (0,_headers_js__rspack_import_5/* .mergeGatewayHeaders */.bQ)((0,_headers_js__rspack_import_5/* .normalizeHeaderMap */.dk)(loaded.headers), (0,_headers_js__rspack_import_5/* .headersFromEnv */.gx)())
57984
57986
  };
57985
57987
  }
57986
57988
  function hasGatewayAuth() {
@@ -58040,7 +58042,7 @@ async function ensureSandbox(accessToken, { signal } = {}) {
58040
58042
  method: "POST",
58041
58043
  redirect: "error",
58042
58044
  signal: gatewayDeadline(signal),
58043
- headers: (0,_headers_js__rspack_import_4/* .ensureSandboxHeaders */._6)(accessToken),
58045
+ headers: (0,_headers_js__rspack_import_5/* .ensureSandboxHeaders */._6)(accessToken),
58044
58046
  body: "{}"
58045
58047
  });
58046
58048
  body = await readJson(res);
@@ -58066,7 +58068,7 @@ async function ensureSandbox(accessToken, { signal } = {}) {
58066
58068
  kind: "gateway"
58067
58069
  }),
58068
58070
  gatewayToken: String(gatewayToken),
58069
- gatewayHeaders: (0,_headers_js__rspack_import_4/* .mergeGatewayHeaders */.bQ)((0,_headers_js__rspack_import_4/* .headersFromEnsureSandbox */.Ew)(body), (0,_headers_js__rspack_import_4/* .headersFromEnv */.gx)())
58071
+ gatewayHeaders: (0,_headers_js__rspack_import_5/* .mergeGatewayHeaders */.bQ)((0,_headers_js__rspack_import_5/* .headersFromEnsureSandbox */.Ew)(body), (0,_headers_js__rspack_import_5/* .headersFromEnv */.gx)())
58070
58072
  };
58071
58073
  }
58072
58074
  async function connectGateway({ signal } = {}) {
@@ -58096,7 +58098,7 @@ async function gatewayCall(session, method, body = {}, { signal } = {}) {
58096
58098
  method: "POST",
58097
58099
  redirect: "error",
58098
58100
  signal: gatewayDeadline(prompt ? undefined : signal),
58099
- headers: (0,_headers_js__rspack_import_4/* .requestHeaders */.A1)(session),
58101
+ headers: (0,_headers_js__rspack_import_5/* .requestHeaders */.A1)(session),
58100
58102
  body: JSON.stringify(body)
58101
58103
  };
58102
58104
  assertGatewayActive(signal); // Final synchronous boundary before transmission.
@@ -58363,6 +58365,43 @@ async function getThread(session, ref, rootId) {
58363
58365
  thread: data
58364
58366
  };
58365
58367
  }
58368
+ async function listGrokApprovals(session, ref) {
58369
+ const { target, transcript } = await getTranscriptTail(session, ref, 200);
58370
+ if (!Array.isArray(transcript?.entries) || transcript.entries.length > 200) throw new GatewayError("Invalid approval transcript coverage");
58371
+ return {
58372
+ target: {
58373
+ id: target.id,
58374
+ name: target.name
58375
+ },
58376
+ approvals: transcript.entries.map(grokApproval).filter(Boolean),
58377
+ coverage: "Latest 200 transcript entries only; older requests require the owning Grok UI."
58378
+ };
58379
+ }
58380
+ async function respondGrokApproval(session, ref, input) {
58381
+ const { entryId, requestId, decision } = grokApprovalResponseSchema.parse({
58382
+ ...input,
58383
+ target: ref
58384
+ });
58385
+ const { target, approvals } = await listGrokApprovals(session, ref);
58386
+ const matches = approvals.filter((card)=>card.entryId === entryId && card.requestId === requestId);
58387
+ if (matches.length !== 1) throw new GatewayError("Stale, foreign or unsupported Grok approval; refresh pending requests or use the owning Grok UI");
58388
+ const approval = matches[0];
58389
+ if (decision === "accept" && approval.truncated) throw new GatewayError("Approval details are truncated; acceptance requires the owning Grok UI");
58390
+ const local = approval.type === "local-tool-permission";
58391
+ await gatewayCall(session, local ? "resolveLocalToolPermission" : "resolveAutoReviewApproval", {
58392
+ agentId: target.id,
58393
+ entryId,
58394
+ requestId,
58395
+ resolution: local ? decision === "accept" ? "allow-once" : "deny" : decision === "accept" ? "approved" : "denied"
58396
+ });
58397
+ return {
58398
+ target,
58399
+ entryId,
58400
+ requestId,
58401
+ decision,
58402
+ delivery: "accepted"
58403
+ };
58404
+ }
58366
58405
 
58367
58406
  __webpack_require__.d(__webpack_exports__, {
58368
58407
  LV: () => (sendPrompt),
@@ -58372,6 +58411,66 @@ __webpack_require__.d(__webpack_exports__, {
58372
58411
  });
58373
58412
 
58374
58413
 
58414
+ },
58415
+ "./src/core/grok-approvals.js"(__unused_rspack___webpack_module__, __webpack_exports__, __webpack_require__) {
58416
+ /* import */ var zod__rspack_import_1 = __webpack_require__("./node_modules/zod/v4/classic/schemas.js");
58417
+ /* import */ var _url_policy_js__rspack_import_0 = __webpack_require__("./src/core/url-policy.js");
58418
+
58419
+
58420
+ const id = zod__rspack_import_1/* .string */.YjP().min(1).max(1024);
58421
+ const grokApprovalResponseSchema = zod__rspack_import_1/* .strictObject */.rej({
58422
+ target: id,
58423
+ entryId: id,
58424
+ requestId: id,
58425
+ decision: zod__rspack_import_1/* ["enum"] */.k5n([
58426
+ "accept",
58427
+ "decline"
58428
+ ])
58429
+ });
58430
+ function grokApproval(entry) {
58431
+ if (entry?.kind !== "send-message") return null;
58432
+ const type = entry.message?.type;
58433
+ const card = type === "auto-review-approval" ? entry.message.approval : type === "local-tool-permission" ? entry.message.ask : null;
58434
+ if (card?.status !== "pending" || !id.safeParse(card.requestId).success || !id.safeParse(entry.id).success) return null;
58435
+ const details = {};
58436
+ let truncated = false;
58437
+ for (const key of [
58438
+ "reason",
58439
+ "command",
58440
+ "summary",
58441
+ "action",
58442
+ "description",
58443
+ "target",
58444
+ "machineId",
58445
+ "surface",
58446
+ "workingDirectory"
58447
+ ]){
58448
+ if (typeof card[key] !== "string") continue;
58449
+ const text = (0,_url_policy_js__rspack_import_0/* .redactSecrets */.fp)(card[key]);
58450
+ truncated ||= text.length > 2048;
58451
+ details[key] = text.slice(0, 2048);
58452
+ }
58453
+ return {
58454
+ entryId: entry.id,
58455
+ requestId: card.requestId,
58456
+ type,
58457
+ ...details,
58458
+ truncated
58459
+ };
58460
+ }
58461
+ function grokApprovalNotice(entry, target) {
58462
+ const approval = grokApproval(entry);
58463
+ return approval ? `Grok approval pending. Requires an explicit user decision; never approve automatically.\n${JSON.stringify({
58464
+ botTarget: target,
58465
+ ...approval
58466
+ })}\nUse gbot_grok_respond with target=${JSON.stringify(target)}, entryId, requestId and decision accept (once) or decline.${approval.truncated ? " Details are truncated; acceptance requires the owning Grok UI." : ""} A chat reply is not authorization.` : null;
58467
+ }
58468
+
58469
+ __webpack_require__.d(__webpack_exports__, {
58470
+ xE: () => (grokApprovalNotice)
58471
+ });
58472
+
58473
+
58375
58474
  },
58376
58475
  "./src/core/headers.js"(__unused_rspack___webpack_module__, __webpack_exports__, __webpack_require__) {
58377
58476
  function normalizeHeaderMap(obj) {
@@ -59172,8 +59271,10 @@ __webpack_require__.d(__webpack_exports__, {
59172
59271
 
59173
59272
  },
59174
59273
  "./src/core/relay/intake.js"(__unused_rspack___webpack_module__, __webpack_exports__, __webpack_require__) {
59175
- /* import */ var _transcript_js__rspack_import_1 = __webpack_require__("./src/core/transcript.js");
59274
+ /* import */ var _transcript_js__rspack_import_2 = __webpack_require__("./src/core/transcript.js");
59176
59275
  /* import */ var _records_js__rspack_import_0 = __webpack_require__("./src/core/relay/records.js");
59276
+ /* import */ var _grok_approvals_js__rspack_import_1 = __webpack_require__("./src/core/grok-approvals.js");
59277
+
59177
59278
 
59178
59279
 
59179
59280
  /** Correlate the whole page before atomically recording intake and advancing its checkpoint. */ function createIntake({ state, gateway, clock, newRecord, stoppedBindings }) {
@@ -59185,7 +59286,7 @@ __webpack_require__.d(__webpack_exports__, {
59185
59286
  const page = (0,_records_js__rspack_import_0/* .pageEntries */.ci)(await gateway.tail(targetId));
59186
59287
  await change("targets", {
59187
59288
  id: targetId,
59188
- cursor: page.length ? (0,_transcript_js__rspack_import_1/* .sourceEntryId */.p2)(page.at(-1)) : null,
59289
+ cursor: page.length ? (0,_transcript_js__rspack_import_2/* .sourceEntryId */.p2)(page.at(-1)) : null,
59189
59290
  baseline: true,
59190
59291
  state: "running",
59191
59292
  reason: null,
@@ -59214,8 +59315,8 @@ __webpack_require__.d(__webpack_exports__, {
59214
59315
  });
59215
59316
  return;
59216
59317
  }
59217
- const current = page.length ? (0,_transcript_js__rspack_import_1/* .sourceEntryId */.p2)(page.at(-1)) : null;
59218
- const index = target.cursor === null ? -1 : page.findIndex((e)=>(0,_transcript_js__rspack_import_1/* .sourceEntryId */.p2)(e) === target.cursor);
59318
+ const current = page.length ? (0,_transcript_js__rspack_import_2/* .sourceEntryId */.p2)(page.at(-1)) : null;
59319
+ const index = target.cursor === null ? -1 : page.findIndex((e)=>(0,_transcript_js__rspack_import_2/* .sourceEntryId */.p2)(e) === target.cursor);
59219
59320
  if (target.cursor !== null && index === -1 || target.cursor === null && page.length === 200) {
59220
59321
  await change("targets", {
59221
59322
  ...target,
@@ -59225,6 +59326,15 @@ __webpack_require__.d(__webpack_exports__, {
59225
59326
  });
59226
59327
  return;
59227
59328
  }
59329
+ const incoming = page.slice(index + 1);
59330
+ if (incoming.some((entry)=>entry.kind === "send-message" && (typeof entry.requestId !== "string" || !entry.requestId))) {
59331
+ await change("targets", {
59332
+ ...target,
59333
+ state: "paused",
59334
+ reason: "invalid-coverage"
59335
+ });
59336
+ return;
59337
+ }
59228
59338
  const local = {
59229
59339
  ...state.read().records
59230
59340
  }, changes = [];
@@ -59254,7 +59364,7 @@ __webpack_require__.d(__webpack_exports__, {
59254
59364
  ...r,
59255
59365
  submission: "accepted",
59256
59366
  requestId: entry.requestId,
59257
- messageId: (0,_transcript_js__rspack_import_1/* .sourceEntryId */.p2)(entry),
59367
+ messageId: (0,_transcript_js__rspack_import_2/* .sourceEntryId */.p2)(entry),
59258
59368
  reason: null
59259
59369
  };
59260
59370
  local[r.id] = next;
@@ -59272,9 +59382,13 @@ __webpack_require__.d(__webpack_exports__, {
59272
59382
  "unknown",
59273
59383
  "accepted"
59274
59384
  ].includes(r.submission) && !r.requestId);
59275
- const incoming = page.slice(index + 1);
59276
59385
  for (const entry of incoming){
59277
59386
  if (entry.kind !== "send-message" || own.has(entry.requestId)) continue;
59387
+ const approvalNotice = (0,_grok_approvals_js__rspack_import_1/* .grokApprovalNotice */.xE)(entry, targetId);
59388
+ if ([
59389
+ "auto-review-approval",
59390
+ "local-tool-permission"
59391
+ ].includes(entry.message?.type) && !approvalNotice) continue;
59278
59392
  const parent = requests.get(entry.requestId);
59279
59393
  // Without nonce coverage, unsolicited classification could echo a return or misroute a reply.
59280
59394
  if (!parent && unresolved) {
@@ -59302,14 +59416,14 @@ __webpack_require__.d(__webpack_exports__, {
59302
59416
  ]);
59303
59417
  return;
59304
59418
  }
59305
- const sourceId = (0,_transcript_js__rspack_import_1/* .sourceEntryId */.p2)(entry), id = "inbound:" + (0,_records_js__rspack_import_0/* .hash */.tW)([
59419
+ const sourceId = (0,_transcript_js__rspack_import_2/* .sourceEntryId */.p2)(entry), id = "inbound:" + (0,_records_js__rspack_import_0/* .hash */.tW)([
59306
59420
  targetId,
59307
59421
  sourceId
59308
59422
  ]);
59309
59423
  if (local[id]) continue;
59310
59424
  let body;
59311
59425
  try {
59312
- body = (0,_records_js__rspack_import_0/* .messageText */.Lo)((0,_transcript_js__rspack_import_1/* .entryText */.u0)(entry));
59426
+ body = (0,_records_js__rspack_import_0/* .messageText */.Lo)(approvalNotice ?? (0,_transcript_js__rspack_import_2/* .entryText */.u0)(entry));
59313
59427
  } catch {
59314
59428
  await change("targets", {
59315
59429
  ...target,
@@ -59318,7 +59432,7 @@ __webpack_require__.d(__webpack_exports__, {
59318
59432
  });
59319
59433
  return;
59320
59434
  }
59321
- const text = `[Grok sender ${targetId}; message ${sourceId}]\n${parent ? "Reply to a tracked request. Your next final answer is not returned automatically." : "Linked conversation. Your corresponding final answer returns automatically to Grok."}\n\n${body}`;
59435
+ const text = `[Grok sender ${targetId}; message ${sourceId}]\n${approvalNotice ? "Approval notice. Your next final answer is not returned automatically." : parent ? "Reply to a tracked request. Your next final answer is not returned automatically." : "Linked conversation. Your corresponding final answer returns automatically to Grok."}\n\n${body}`;
59322
59436
  if (Buffer.byteLength(text) > (/* inlined export .MAX_TEXT */65536)) {
59323
59437
  await change("targets", {
59324
59438
  ...target,
@@ -59332,7 +59446,7 @@ __webpack_require__.d(__webpack_exports__, {
59332
59446
  sourceId
59333
59447
  ],
59334
59448
  parentId: parent?.id,
59335
- returnToGrok: !parent,
59449
+ returnToGrok: !parent && !approvalNotice,
59336
59450
  correlationId: parent?.correlationId,
59337
59451
  hop: parent ? parent.hop + 1 : 0,
59338
59452
  maxHops: parent?.maxHops
@@ -59649,7 +59763,10 @@ function relayProfile(env = process.env) {
59649
59763
  "GROK_BOT_ALLOW_LOCAL_GATEWAY",
59650
59764
  "GROK_BOT_ALLOW_ANY_GATEWAY",
59651
59765
  "GROK_BOT_TEST",
59652
- "NODE_ENV"
59766
+ "NODE_ENV",
59767
+ // Secret Service credentials depend on the caller's desktop session.
59768
+ "DBUS_SESSION_BUS_ADDRESS",
59769
+ "DISPLAY"
59653
59770
  ];
59654
59771
  return digest(JSON.stringify([
59655
59772
  (0,node_path__rspack_import_2.resolve)((0,_codex_bridge_js__rspack_import_3/* .codexSocketPath */.ql)(env)),
@@ -59719,7 +59836,6 @@ function pageEntries(payload) {
59719
59836
  _state_js__rspack_import_2/* .relayId.parse */.pT.parse(id);
59720
59837
  if (ids.has(id) || typeof e.kind !== "string" || !e.kind) throw new Error("Invalid transcript coverage");
59721
59838
  ids.add(id);
59722
- if (e.kind === "send-message" && (typeof e.requestId !== "string" || !e.requestId)) throw new Error("Message coverage lacks requestId");
59723
59839
  }
59724
59840
  return page;
59725
59841
  }
@@ -60834,7 +60950,7 @@ __webpack_require__.d(__webpack_exports__, {
60834
60950
 
60835
60951
  },
60836
60952
  "./package.json"(module) {
60837
- module.exports = {"rE":"0.6.0"}
60953
+ module.exports = {"rE":"0.8.0"}
60838
60954
 
60839
60955
  },
60840
60956
 
@@ -44,6 +44,16 @@ change session permissions, or respond to an unsupported interaction; use its ow
44
44
 
45
45
  Bot replies are `send-message` entries; yours are `message` with `role: user`.
46
46
 
47
+ Grok-origin approvals are separate from Codex interactions. `gbot_grok_approvals`
48
+ (CLI: `gbot approvals list TARGET`) lists pending auto-review and local-tool cards in
49
+ the latest 200 entries. Linked/tracked routes forward new pending cards as notices;
50
+ their chat answers never authorize an action. After an explicit user decision, use
51
+ `gbot_grok_respond` (CLI: `gbot approvals respond --target TARGET --entry-id ID
52
+ --request-id ID --decision accept|decline`). Copy the exact IDs from the current
53
+ card. Accept grants once; persistent grants are unavailable. Responses recheck the
54
+ card before sending; delivery success does not prove execution. Older cards,
55
+ cookie/payment approvals and other unsupported requests require the owning Grok UI.
56
+
47
57
  List targets with `gbot bots list` / `gbot groups list` when the name is ambiguous.
48
58
 
49
59
  ## CLI automation
@@ -99,3 +109,11 @@ Managed Codex return routes reject `expectedTurnId` and legacy `replyTo`/`envelo
99
109
  options before submission; use plain `codex_send` for a caller-selected turn guard.
100
110
  An explicit Grok target supplied with `bindingId` must resolve to the binding's
101
111
  recipient. A mismatch fails instead of selecting one destination silently.
112
+
113
+ ## Host tool inventory
114
+
115
+ Codex MCP clients receive Grok messaging and approval tools; truthfully identified
116
+ Grok Bot clients receive Codex messaging and approval tools. Bridge start/status/stop
117
+ remain shared. Cursor and unknown clients retain both sets. Filtering uses negotiated
118
+ client-name prefixes and does not provide authorization. A Grok runtime identifying
119
+ itself as Cursor needs its native MCP identity corrected before this filter applies.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "grok-bot-cli",
3
- "version": "0.6.0",
3
+ "version": "0.8.0",
4
4
  "description": "CLI and Agent Bundle plugin for Grok Bot agents and groups: create, update, message, inspect threads, and automate cleanup",
5
5
  "type": "module",
6
6
  "bin": {
@@ -54,12 +54,12 @@
54
54
  "LICENSE"
55
55
  ],
56
56
  "devDependencies": {
57
- "@agent-bundle/runtime": "https://pkg.pr.new/ScriptedAlchemy/agent-bundle/@agent-bundle/runtime@8e55ab832d",
57
+ "@agent-bundle/runtime": "https://pkg.pr.new/ScriptedAlchemy/agent-bundle/@agent-bundle/runtime@57a9196caf2590ece001799eaeed92613352bc21",
58
58
  "@changesets/cli": "3.0.3",
59
59
  "@rstest/core": "0.11.12",
60
60
  "@types/node": "^24.0.0",
61
61
  "@types/react": "^19.2.18",
62
- "agent-bundle": "https://pkg.pr.new/ScriptedAlchemy/agent-bundle/agent-bundle@8e55ab832d",
62
+ "agent-bundle": "https://pkg.pr.new/ScriptedAlchemy/agent-bundle/agent-bundle@57a9196caf2590ece001799eaeed92613352bc21",
63
63
  "react": "19.3.0",
64
64
  "react-dom": "19.3.0",
65
65
  "typescript": "7.0.2",