@agentclientprotocol/codex-acp 2.1.2-preview.1 → 2.1.2-preview.2

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 (2) hide show
  1. package/dist/index.js +62 -30
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -32448,6 +32448,12 @@ function sanitizeMcpServerName(name) {
32448
32448
  // src/tool-calls/reporters/McpStartupReporter.ts
32449
32449
  import { randomUUID as randomUUID2 } from "node:crypto";
32450
32450
  var McpStartupReporter = class {
32451
+ static skipped(serverNames) {
32452
+ return serverNames.map((server) => failure2(
32453
+ server,
32454
+ `[codex-acp] MCP server \`${server}\` was not started, because the Codex config already defines an MCP server with this name. Codex uses its own entry, or no server if that entry is disabled.`
32455
+ ));
32456
+ }
32451
32457
  static failures(event) {
32452
32458
  return [
32453
32459
  ...event.failed.map((server) => failure2(
@@ -32497,7 +32503,7 @@ var McpSessionStartup = class {
32497
32503
  * The promise rejects when the startup fails before `awaitTimeoutMs`. Then the session has no pending startup.
32498
32504
  */
32499
32505
  begin(sessionId, mcpServers, afterVersion, options) {
32500
- const pendingStartup = this.createPendingSession(sessionId, mcpServers, afterVersion);
32506
+ const pendingStartup = this.createPendingSession(sessionId, mcpServers, afterVersion, options.skippedServers ?? []);
32501
32507
  if (options.publish) {
32502
32508
  this.pendingSessions.set(sessionId, pendingStartup);
32503
32509
  }
@@ -32536,8 +32542,8 @@ var McpSessionStartup = class {
32536
32542
  publishAsync(sessionId) {
32537
32543
  void this.doPublish(sessionId);
32538
32544
  }
32539
- createPendingSession(sessionId, mcpServers, afterVersion) {
32540
- const requestedServers = new Set(getRequestedMcpServerNames(mcpServers));
32545
+ createPendingSession(sessionId, mcpServers, afterVersion, skippedServers) {
32546
+ const requestedServers = new Set(getRequestedMcpServerNames(mcpServers).filter((server) => !skippedServers.includes(server)));
32541
32547
  const abort = new AbortController();
32542
32548
  const startup = this.runWithProcessCheck(() => this.codexAcpClient().awaitMcpServerStartup(
32543
32549
  Array.from(requestedServers),
@@ -32546,7 +32552,7 @@ var McpSessionStartup = class {
32546
32552
  ));
32547
32553
  void startup.catch(() => {
32548
32554
  });
32549
- return { requestedServers, startup, abort };
32555
+ return { requestedServers, skippedServers, startup, abort };
32550
32556
  }
32551
32557
  async doPublish(sessionId) {
32552
32558
  const pendingStartup = this.pendingSessions.get(sessionId);
@@ -32558,7 +32564,7 @@ var McpSessionStartup = class {
32558
32564
  if (!this.isSessionOpen(sessionId) || this.pendingSessions.get(sessionId) !== pendingStartup) {
32559
32565
  return;
32560
32566
  }
32561
- await this.publish(sessionId, mcpStartup, pendingStartup.abort.signal, pendingStartup.requestedServers);
32567
+ await this.publish(sessionId, mcpStartup, pendingStartup);
32562
32568
  } catch (err) {
32563
32569
  if (!pendingStartup.abort.signal.aborted) {
32564
32570
  logger.error(`Failed to publish MCP startup status for session ${sessionId}`, err);
@@ -32567,7 +32573,8 @@ var McpSessionStartup = class {
32567
32573
  this.forget(sessionId, pendingStartup);
32568
32574
  }
32569
32575
  }
32570
- async publish(sessionId, mcpStartup, signal, requestedServers) {
32576
+ async publish(sessionId, mcpStartup, pendingStartup) {
32577
+ const { requestedServers, skippedServers, abort: { signal } } = pendingStartup;
32571
32578
  const filteredStartup = {
32572
32579
  ready: mcpStartup.ready.filter((server) => requestedServers.has(server)),
32573
32580
  failed: mcpStartup.failed.filter((server) => requestedServers.has(server.server)),
@@ -32587,11 +32594,14 @@ var McpSessionStartup = class {
32587
32594
  return;
32588
32595
  }
32589
32596
  const renderer = new AcpToolCallRenderer(this.capabilities());
32590
- for (const facts4 of McpStartupReporter.failures({
32591
- ...filteredStartup,
32592
- ready: readyAfterOauth,
32593
- failed: failuresAfterOauth
32594
- })) {
32597
+ for (const facts4 of [
32598
+ ...McpStartupReporter.skipped(skippedServers),
32599
+ ...McpStartupReporter.failures({
32600
+ ...filteredStartup,
32601
+ ready: readyAfterOauth,
32602
+ failed: failuresAfterOauth
32603
+ })
32604
+ ]) {
32595
32605
  await this.connection.notify(methods.client.session.update, {
32596
32606
  sessionId,
32597
32607
  update: renderer.render(facts4)
@@ -33523,7 +33533,7 @@ var package_default = {
33523
33533
  publishConfig: {
33524
33534
  access: "public"
33525
33535
  },
33526
- version: "2.1.2-preview.1",
33536
+ version: "2.1.2-preview.2",
33527
33537
  description: "",
33528
33538
  main: "dist/index.js",
33529
33539
  bin: {
@@ -33797,13 +33807,14 @@ import { createHash } from "node:crypto";
33797
33807
  async function forkSession(request, additionalDirectories, dependencies) {
33798
33808
  await dependencies.refreshSkills(request.cwd, additionalDirectories);
33799
33809
  const lastTurnId = await resolveForkTurnId(request, dependencies.codexClient);
33810
+ const sessionConfig = await dependencies.createSessionConfig(
33811
+ request.cwd,
33812
+ additionalDirectories,
33813
+ request.mcpServers ?? []
33814
+ );
33800
33815
  const response = await dependencies.codexClient.threadFork({
33801
33816
  excludeTurns: true,
33802
- config: await dependencies.createSessionConfig(
33803
- request.cwd,
33804
- additionalDirectories,
33805
- request.mcpServers ?? []
33806
- ),
33817
+ config: sessionConfig.config,
33807
33818
  cwd: request.cwd,
33808
33819
  ...lastTurnId !== void 0 && { lastTurnId },
33809
33820
  modelProvider: await dependencies.getResumeModelProvider(),
@@ -33818,7 +33829,8 @@ async function forkSession(request, additionalDirectories, dependencies) {
33818
33829
  collaborationMode: dependencies.getCollaborationMode(response.thread.id),
33819
33830
  modelProvider: response.modelProvider,
33820
33831
  currentServiceTier: response.serviceTier ?? null,
33821
- additionalDirectories
33832
+ additionalDirectories,
33833
+ skippedMcpServers: sessionConfig.skippedMcpServers
33822
33834
  };
33823
33835
  }
33824
33836
  async function resolveForkTurnId(request, codexClient) {
@@ -34324,9 +34336,10 @@ var CodexAcpClient = class {
34324
34336
  async resumeSession(request, onSubscribed) {
34325
34337
  const additionalDirectories = readAdditionalDirectories(request.cwd, request.additionalDirectories, request._meta);
34326
34338
  await this.refreshSkills(request.cwd, additionalDirectories);
34339
+ const sessionConfig = await this.createSessionConfig(request.cwd, additionalDirectories, request.mcpServers ?? []);
34327
34340
  const response = await this.resumeThread({
34328
34341
  excludeTurns: true,
34329
- config: await this.createSessionConfig(request.cwd, additionalDirectories, request.mcpServers ?? []),
34342
+ config: sessionConfig.config,
34330
34343
  cwd: request.cwd,
34331
34344
  modelProvider: await this.getResumeModelProvider(),
34332
34345
  threadId: request.sessionId
@@ -34342,7 +34355,8 @@ var CodexAcpClient = class {
34342
34355
  collaborationMode: response.collaborationMode ?? this.getCollaborationMode(response.thread.id),
34343
34356
  modelProvider: response.modelProvider,
34344
34357
  currentServiceTier: response.serviceTier ?? null,
34345
- additionalDirectories
34358
+ additionalDirectories,
34359
+ skippedMcpServers: sessionConfig.skippedMcpServers
34346
34360
  };
34347
34361
  }
34348
34362
  async forkSession(request) {
@@ -34360,9 +34374,10 @@ var CodexAcpClient = class {
34360
34374
  async loadSession(request, onSubscribed) {
34361
34375
  const additionalDirectories = readAdditionalDirectories(request.cwd, request.additionalDirectories, request._meta);
34362
34376
  await this.refreshSkills(request.cwd, additionalDirectories);
34377
+ const sessionConfig = await this.createSessionConfig(request.cwd, additionalDirectories, request.mcpServers ?? []);
34363
34378
  const response = await this.resumeThread({
34364
34379
  excludeTurns: true,
34365
- config: await this.createSessionConfig(request.cwd, additionalDirectories, request.mcpServers ?? []),
34380
+ config: sessionConfig.config,
34366
34381
  cwd: request.cwd,
34367
34382
  modelProvider: await this.getResumeModelProvider(),
34368
34383
  threadId: request.sessionId
@@ -34391,7 +34406,8 @@ var CodexAcpClient = class {
34391
34406
  currentServiceTier: response.serviceTier ?? null,
34392
34407
  thread,
34393
34408
  history,
34394
- additionalDirectories
34409
+ additionalDirectories,
34410
+ skippedMcpServers: sessionConfig.skippedMcpServers
34395
34411
  };
34396
34412
  }
34397
34413
  /**
@@ -34422,8 +34438,9 @@ var CodexAcpClient = class {
34422
34438
  async newSession(request) {
34423
34439
  const additionalDirectories = readAdditionalDirectories(request.cwd, request.additionalDirectories, request._meta);
34424
34440
  await this.refreshSkills(request.cwd, additionalDirectories);
34441
+ const sessionConfig = await this.createSessionConfig(request.cwd, additionalDirectories, request.mcpServers);
34425
34442
  const response = await this.codexClient.threadStart({
34426
- config: await this.createSessionConfig(request.cwd, additionalDirectories, request.mcpServers),
34443
+ config: sessionConfig.config,
34427
34444
  modelProvider: this.getModelProvider(),
34428
34445
  cwd: request.cwd
34429
34446
  });
@@ -34439,7 +34456,8 @@ var CodexAcpClient = class {
34439
34456
  collaborationMode: this.getCollaborationMode(response.thread.id),
34440
34457
  modelProvider: response.modelProvider,
34441
34458
  currentServiceTier: response.serviceTier ?? null,
34442
- additionalDirectories
34459
+ additionalDirectories,
34460
+ skippedMcpServers: sessionConfig.skippedMcpServers
34443
34461
  };
34444
34462
  }
34445
34463
  async closeSession(sessionId) {
@@ -34543,7 +34561,7 @@ var CodexAcpClient = class {
34543
34561
  };
34544
34562
  const configWithWorkspaceRoots = mergeSandboxWorkspaceWriteRoots(mergedConfig, additionalDirectories);
34545
34563
  if (mcpServers.length === 0) {
34546
- return configWithWorkspaceRoots;
34564
+ return { config: configWithWorkspaceRoots, skippedMcpServers: [] };
34547
34565
  }
34548
34566
  const requestedServers = mcpServers.map((mcp) => ({
34549
34567
  name: sanitizeMcpServerName(mcp.name),
@@ -34554,12 +34572,22 @@ var CodexAcpClient = class {
34554
34572
  const existingNames = await this.getConfigMcpServerNames(projectPath);
34555
34573
  serversToConfigure = requestedServers.filter((mcp) => !existingNames.has(mcp.name));
34556
34574
  }
34575
+ const skippedMcpServers = requestedServers.filter((mcp) => !serversToConfigure.includes(mcp)).map((mcp) => mcp.name);
34576
+ if (skippedMcpServers.length > 0) {
34577
+ logger.log("Skipping requested MCP servers that the Codex config already defines", {
34578
+ projectPath,
34579
+ skippedMcpServers
34580
+ });
34581
+ }
34557
34582
  if (serversToConfigure.length === 0) {
34558
- return configWithWorkspaceRoots;
34583
+ return { config: configWithWorkspaceRoots, skippedMcpServers };
34559
34584
  }
34560
34585
  return {
34561
- ...configWithWorkspaceRoots,
34562
- "mcp_servers": Object.fromEntries(serversToConfigure.map((mcp) => [mcp.name, this.createMcpSeverConfig(mcp.server)]))
34586
+ config: {
34587
+ ...configWithWorkspaceRoots,
34588
+ "mcp_servers": Object.fromEntries(serversToConfigure.map((mcp) => [mcp.name, this.createMcpSeverConfig(mcp.server)]))
34589
+ },
34590
+ skippedMcpServers
34563
34591
  };
34564
34592
  }
34565
34593
  async getConfigMcpServerNames(projectPath) {
@@ -38644,7 +38672,8 @@ Check ${configPath} and project .codex directories, especially their config.toml
38644
38672
  if (requestedMcpServers.length > 0 && mcpServerStartupVersion !== null) {
38645
38673
  const startupWait = this.mcpSessionStartup.begin(sessionId, requestedMcpServers, mcpServerStartupVersion, {
38646
38674
  publish: canPublishSessionUpdates,
38647
- awaitTimeoutMs: parseMcpStartupAwaitTimeoutMs(request._meta)
38675
+ awaitTimeoutMs: parseMcpStartupAwaitTimeoutMs(request._meta),
38676
+ skippedServers: sessionMetadata.skippedMcpServers
38648
38677
  });
38649
38678
  if (startupWait !== null) {
38650
38679
  try {
@@ -39842,7 +39871,10 @@ Check ${configPath} and project .codex directories, especially their config.toml
39842
39871
  }
39843
39872
  subscribed = false;
39844
39873
  if (requestedMcpServers.length > 0 && mcpServerStartupVersion !== null) {
39845
- this.mcpSessionStartup.begin(sessionId, requestedMcpServers, mcpServerStartupVersion, { publish: true });
39874
+ this.mcpSessionStartup.begin(sessionId, requestedMcpServers, mcpServerStartupVersion, {
39875
+ publish: true,
39876
+ skippedServers: sessionMetadata.skippedMcpServers
39877
+ });
39846
39878
  }
39847
39879
  await this.publishAvailableCommands(sessionState, requestedSessionGeneration);
39848
39880
  await this.publishCurrentGoalBestEffort(sessionState, requestedSessionGeneration, true);
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "2.1.2-preview.1",
6
+ "version": "2.1.2-preview.2",
7
7
  "description": "",
8
8
  "main": "dist/index.js",
9
9
  "bin": {