@posthog/agent 2.1.45 → 2.1.48

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/agent.js CHANGED
@@ -276,7 +276,7 @@ import { v7 as uuidv7 } from "uuid";
276
276
  // package.json
277
277
  var package_default = {
278
278
  name: "@posthog/agent",
279
- version: "2.1.45",
279
+ version: "2.1.48",
280
280
  repository: "https://github.com/PostHog/twig",
281
281
  description: "TypeScript agent framework wrapping Claude Agent SDK with Git-based task execution for PostHog",
282
282
  exports: {
@@ -2385,12 +2385,12 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
2385
2385
  backgroundTerminals = {};
2386
2386
  clientCapabilities;
2387
2387
  logWriter;
2388
- processCallbacks;
2388
+ options;
2389
2389
  lastSentConfigOptions;
2390
- constructor(client, logWriter, processCallbacks) {
2390
+ constructor(client, logWriter, options) {
2391
2391
  super(client);
2392
2392
  this.logWriter = logWriter;
2393
- this.processCallbacks = processCallbacks;
2393
+ this.options = options;
2394
2394
  this.toolUseCache = {};
2395
2395
  this.logger = new Logger({ debug: true, prefix: "[ClaudeAcpAgent]" });
2396
2396
  }
@@ -2437,7 +2437,6 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
2437
2437
  const sessionId = uuidv7();
2438
2438
  const permissionMode = meta?.permissionMode && TWIG_EXECUTION_MODES.includes(meta.permissionMode) ? meta.permissionMode : "default";
2439
2439
  const mcpServers = parseMcpServers(params);
2440
- const mcpMetadataPromise = fetchMcpToolMetadata(mcpServers, this.logger);
2441
2440
  const options = buildSessionOptions({
2442
2441
  cwd: params.cwd,
2443
2442
  mcpServers,
@@ -2449,8 +2448,8 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
2449
2448
  sessionId,
2450
2449
  isResume: false,
2451
2450
  onModeChange: this.createOnModeChange(sessionId),
2452
- onProcessSpawned: this.processCallbacks?.onProcessSpawned,
2453
- onProcessExited: this.processCallbacks?.onProcessExited
2451
+ onProcessSpawned: this.options?.onProcessSpawned,
2452
+ onProcessExited: this.options?.onProcessExited
2454
2453
  });
2455
2454
  const input = new Pushable();
2456
2455
  const q = query({ prompt: input, options });
@@ -2471,17 +2470,14 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
2471
2470
  adapter: "claude"
2472
2471
  });
2473
2472
  }
2474
- const [modelOptions, slashCommands] = await Promise.all([
2475
- this.getModelConfigOptions(),
2476
- getAvailableSlashCommands(q),
2477
- mcpMetadataPromise
2478
- ]);
2473
+ const modelOptions = await this.getModelConfigOptions();
2474
+ this.deferBackgroundFetches(q, sessionId, mcpServers);
2479
2475
  session.modelId = modelOptions.currentModelId;
2480
2476
  await this.trySetModel(q, modelOptions.currentModelId);
2481
- this.sendAvailableCommandsUpdate(sessionId, slashCommands);
2477
+ const configOptions = await this.buildConfigOptions(modelOptions);
2482
2478
  return {
2483
2479
  sessionId,
2484
- configOptions: await this.buildConfigOptions(modelOptions)
2480
+ configOptions
2485
2481
  };
2486
2482
  }
2487
2483
  async loadSession(params) {
@@ -2497,7 +2493,6 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
2497
2493
  return {};
2498
2494
  }
2499
2495
  const mcpServers = parseMcpServers(params);
2500
- const mcpMetadataPromise = fetchMcpToolMetadata(mcpServers, this.logger);
2501
2496
  const permissionMode = meta?.permissionMode && TWIG_EXECUTION_MODES.includes(meta.permissionMode) ? meta.permissionMode : "default";
2502
2497
  const { query: q, session } = await this.initializeQuery({
2503
2498
  cwd: params.cwd,
@@ -2511,14 +2506,9 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
2511
2506
  });
2512
2507
  session.taskRunId = meta?.taskRunId;
2513
2508
  this.registerPersistence(sessionId, meta);
2514
- const [slashCommands] = await Promise.all([
2515
- getAvailableSlashCommands(q),
2516
- mcpMetadataPromise
2517
- ]);
2518
- this.sendAvailableCommandsUpdate(sessionId, slashCommands);
2519
- return {
2520
- configOptions: await this.buildConfigOptions()
2521
- };
2509
+ this.deferBackgroundFetches(q, sessionId, mcpServers);
2510
+ const configOptions = await this.buildConfigOptions();
2511
+ return { configOptions };
2522
2512
  }
2523
2513
  async prompt(params) {
2524
2514
  this.session.cancelled = false;
@@ -2590,8 +2580,8 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
2590
2580
  isResume: config.isResume,
2591
2581
  additionalDirectories: config.additionalDirectories,
2592
2582
  onModeChange: this.createOnModeChange(config.sessionId),
2593
- onProcessSpawned: this.processCallbacks?.onProcessSpawned,
2594
- onProcessExited: this.processCallbacks?.onProcessExited
2583
+ onProcessSpawned: this.options?.onProcessSpawned,
2584
+ onProcessExited: this.options?.onProcessExited
2595
2585
  });
2596
2586
  const q = query({ prompt: input, options });
2597
2587
  const abortController = options.abortController;
@@ -2701,6 +2691,20 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
2701
2691
  await q.setModel(fallback);
2702
2692
  }
2703
2693
  }
2694
+ /**
2695
+ * Fire-and-forget: fetch slash commands and MCP tool metadata in parallel.
2696
+ * Both populate caches used later — neither is needed to return configOptions.
2697
+ */
2698
+ deferBackgroundFetches(q, sessionId, mcpServers) {
2699
+ Promise.all([
2700
+ getAvailableSlashCommands(q),
2701
+ fetchMcpToolMetadata(mcpServers, this.logger)
2702
+ ]).then(([slashCommands]) => {
2703
+ this.sendAvailableCommandsUpdate(sessionId, slashCommands);
2704
+ }).catch((err) => {
2705
+ this.logger.warn("Failed to fetch deferred session data", { err });
2706
+ });
2707
+ }
2704
2708
  registerPersistence(sessionId, meta) {
2705
2709
  const persistence = meta?.persistence;
2706
2710
  if (persistence && this.logWriter) {