@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.
@@ -1183,7 +1183,7 @@ import { v7 as uuidv7 } from "uuid";
1183
1183
  // package.json
1184
1184
  var package_default = {
1185
1185
  name: "@posthog/agent",
1186
- version: "2.1.45",
1186
+ version: "2.1.48",
1187
1187
  repository: "https://github.com/PostHog/twig",
1188
1188
  description: "TypeScript agent framework wrapping Claude Agent SDK with Git-based task execution for PostHog",
1189
1189
  exports: {
@@ -3256,12 +3256,12 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
3256
3256
  backgroundTerminals = {};
3257
3257
  clientCapabilities;
3258
3258
  logWriter;
3259
- processCallbacks;
3259
+ options;
3260
3260
  lastSentConfigOptions;
3261
- constructor(client, logWriter, processCallbacks) {
3261
+ constructor(client, logWriter, options) {
3262
3262
  super(client);
3263
3263
  this.logWriter = logWriter;
3264
- this.processCallbacks = processCallbacks;
3264
+ this.options = options;
3265
3265
  this.toolUseCache = {};
3266
3266
  this.logger = new Logger({ debug: true, prefix: "[ClaudeAcpAgent]" });
3267
3267
  }
@@ -3308,7 +3308,6 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
3308
3308
  const sessionId = uuidv7();
3309
3309
  const permissionMode = meta?.permissionMode && TWIG_EXECUTION_MODES.includes(meta.permissionMode) ? meta.permissionMode : "default";
3310
3310
  const mcpServers = parseMcpServers(params);
3311
- const mcpMetadataPromise = fetchMcpToolMetadata(mcpServers, this.logger);
3312
3311
  const options = buildSessionOptions({
3313
3312
  cwd: params.cwd,
3314
3313
  mcpServers,
@@ -3320,8 +3319,8 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
3320
3319
  sessionId,
3321
3320
  isResume: false,
3322
3321
  onModeChange: this.createOnModeChange(sessionId),
3323
- onProcessSpawned: this.processCallbacks?.onProcessSpawned,
3324
- onProcessExited: this.processCallbacks?.onProcessExited
3322
+ onProcessSpawned: this.options?.onProcessSpawned,
3323
+ onProcessExited: this.options?.onProcessExited
3325
3324
  });
3326
3325
  const input = new Pushable();
3327
3326
  const q = query({ prompt: input, options });
@@ -3342,17 +3341,14 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
3342
3341
  adapter: "claude"
3343
3342
  });
3344
3343
  }
3345
- const [modelOptions, slashCommands] = await Promise.all([
3346
- this.getModelConfigOptions(),
3347
- getAvailableSlashCommands(q),
3348
- mcpMetadataPromise
3349
- ]);
3344
+ const modelOptions = await this.getModelConfigOptions();
3345
+ this.deferBackgroundFetches(q, sessionId, mcpServers);
3350
3346
  session.modelId = modelOptions.currentModelId;
3351
3347
  await this.trySetModel(q, modelOptions.currentModelId);
3352
- this.sendAvailableCommandsUpdate(sessionId, slashCommands);
3348
+ const configOptions = await this.buildConfigOptions(modelOptions);
3353
3349
  return {
3354
3350
  sessionId,
3355
- configOptions: await this.buildConfigOptions(modelOptions)
3351
+ configOptions
3356
3352
  };
3357
3353
  }
3358
3354
  async loadSession(params) {
@@ -3368,7 +3364,6 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
3368
3364
  return {};
3369
3365
  }
3370
3366
  const mcpServers = parseMcpServers(params);
3371
- const mcpMetadataPromise = fetchMcpToolMetadata(mcpServers, this.logger);
3372
3367
  const permissionMode = meta?.permissionMode && TWIG_EXECUTION_MODES.includes(meta.permissionMode) ? meta.permissionMode : "default";
3373
3368
  const { query: q, session } = await this.initializeQuery({
3374
3369
  cwd: params.cwd,
@@ -3382,14 +3377,9 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
3382
3377
  });
3383
3378
  session.taskRunId = meta?.taskRunId;
3384
3379
  this.registerPersistence(sessionId, meta);
3385
- const [slashCommands] = await Promise.all([
3386
- getAvailableSlashCommands(q),
3387
- mcpMetadataPromise
3388
- ]);
3389
- this.sendAvailableCommandsUpdate(sessionId, slashCommands);
3390
- return {
3391
- configOptions: await this.buildConfigOptions()
3392
- };
3380
+ this.deferBackgroundFetches(q, sessionId, mcpServers);
3381
+ const configOptions = await this.buildConfigOptions();
3382
+ return { configOptions };
3393
3383
  }
3394
3384
  async prompt(params) {
3395
3385
  this.session.cancelled = false;
@@ -3461,8 +3451,8 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
3461
3451
  isResume: config.isResume,
3462
3452
  additionalDirectories: config.additionalDirectories,
3463
3453
  onModeChange: this.createOnModeChange(config.sessionId),
3464
- onProcessSpawned: this.processCallbacks?.onProcessSpawned,
3465
- onProcessExited: this.processCallbacks?.onProcessExited
3454
+ onProcessSpawned: this.options?.onProcessSpawned,
3455
+ onProcessExited: this.options?.onProcessExited
3466
3456
  });
3467
3457
  const q = query({ prompt: input, options });
3468
3458
  const abortController = options.abortController;
@@ -3572,6 +3562,20 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
3572
3562
  await q.setModel(fallback);
3573
3563
  }
3574
3564
  }
3565
+ /**
3566
+ * Fire-and-forget: fetch slash commands and MCP tool metadata in parallel.
3567
+ * Both populate caches used later — neither is needed to return configOptions.
3568
+ */
3569
+ deferBackgroundFetches(q, sessionId, mcpServers) {
3570
+ Promise.all([
3571
+ getAvailableSlashCommands(q),
3572
+ fetchMcpToolMetadata(mcpServers, this.logger)
3573
+ ]).then(([slashCommands]) => {
3574
+ this.sendAvailableCommandsUpdate(sessionId, slashCommands);
3575
+ }).catch((err) => {
3576
+ this.logger.warn("Failed to fetch deferred session data", { err });
3577
+ });
3578
+ }
3575
3579
  registerPersistence(sessionId, meta) {
3576
3580
  const persistence = meta?.persistence;
3577
3581
  if (persistence && this.logWriter) {