@posthog/agent 2.1.17 → 2.1.22

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.17",
279
+ version: "2.1.22",
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: {
@@ -348,11 +348,11 @@ var package_default = {
348
348
  },
349
349
  devDependencies: {
350
350
  "@changesets/cli": "^2.27.8",
351
+ "@posthog/shared": "workspace:*",
352
+ "@twig/git": "workspace:*",
351
353
  "@types/bun": "latest",
352
354
  "@types/tar": "^6.1.13",
353
355
  minimatch: "^10.0.3",
354
- "@posthog/shared": "workspace:*",
355
- "@twig/git": "workspace:*",
356
356
  msw: "^2.12.7",
357
357
  tsup: "^8.5.1",
358
358
  tsx: "^4.20.6",
@@ -360,16 +360,16 @@ var package_default = {
360
360
  vitest: "^2.1.8"
361
361
  },
362
362
  dependencies: {
363
+ "@agentclientprotocol/sdk": "^0.14.0",
364
+ "@anthropic-ai/claude-agent-sdk": "0.2.42",
365
+ "@anthropic-ai/sdk": "^0.71.0",
366
+ "@hono/node-server": "^1.19.9",
367
+ "@modelcontextprotocol/sdk": "^1.25.3",
363
368
  "@opentelemetry/api-logs": "^0.208.0",
364
369
  "@opentelemetry/exporter-logs-otlp-http": "^0.208.0",
365
370
  "@opentelemetry/resources": "^2.0.0",
366
371
  "@opentelemetry/sdk-logs": "^0.208.0",
367
372
  "@opentelemetry/semantic-conventions": "^1.28.0",
368
- "@agentclientprotocol/sdk": "^0.14.0",
369
- "@anthropic-ai/claude-agent-sdk": "0.2.12",
370
- "@anthropic-ai/sdk": "^0.71.0",
371
- "@hono/node-server": "^1.19.9",
372
- "@modelcontextprotocol/sdk": "^1.25.3",
373
373
  "@types/jsonwebtoken": "^9.0.10",
374
374
  commander: "^14.0.2",
375
375
  diff: "^8.0.2",
@@ -1362,19 +1362,9 @@ function streamEventToAcpNotifications(message, sessionId, toolUseCache, fileCon
1362
1362
  }
1363
1363
  }
1364
1364
  async function handleSystemMessage(message, context) {
1365
- const { session, sessionId, client, logger } = context;
1365
+ const { sessionId, client, logger } = context;
1366
1366
  switch (message.subtype) {
1367
1367
  case "init":
1368
- if (message.session_id && session && !session.sessionId) {
1369
- session.sessionId = message.session_id;
1370
- if (session.taskRunId) {
1371
- await client.extNotification("_posthog/sdk_session", {
1372
- taskRunId: session.taskRunId,
1373
- sessionId: message.session_id,
1374
- adapter: "claude"
1375
- });
1376
- }
1377
- }
1378
1368
  break;
1379
1369
  case "compact_boundary":
1380
1370
  await client.extNotification("_posthog/compact_boundary", {
@@ -2339,7 +2329,7 @@ function buildSessionOptions(params) {
2339
2329
  ),
2340
2330
  ...params.onProcessSpawned && {
2341
2331
  spawnClaudeCodeProcess: buildSpawnWrapper(
2342
- params.sessionId ?? "unknown",
2332
+ params.sessionId,
2343
2333
  params.onProcessSpawned,
2344
2334
  params.onProcessExited
2345
2335
  )
@@ -2348,8 +2338,11 @@ function buildSessionOptions(params) {
2348
2338
  if (process.env.CLAUDE_CODE_EXECUTABLE) {
2349
2339
  options.pathToClaudeCodeExecutable = process.env.CLAUDE_CODE_EXECUTABLE;
2350
2340
  }
2351
- if (params.sessionId) {
2341
+ if (params.isResume) {
2352
2342
  options.resume = params.sessionId;
2343
+ options.forkSession = false;
2344
+ } else {
2345
+ options.sessionId = params.sessionId;
2353
2346
  }
2354
2347
  if (params.additionalDirectories) {
2355
2348
  options.additionalDirectories = params.additionalDirectories;
@@ -2426,7 +2419,7 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
2426
2419
  async newSession(params) {
2427
2420
  this.checkAuthStatus();
2428
2421
  const meta = params._meta;
2429
- const internalSessionId = uuidv7();
2422
+ const sessionId = uuidv7();
2430
2423
  const permissionMode = meta?.permissionMode && TWIG_EXECUTION_MODES.includes(meta.permissionMode) ? meta.permissionMode : "default";
2431
2424
  const mcpServers = parseMcpServers(params);
2432
2425
  await fetchMcpToolMetadata(mcpServers, this.logger);
@@ -2434,18 +2427,20 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
2434
2427
  cwd: params.cwd,
2435
2428
  mcpServers,
2436
2429
  permissionMode,
2437
- canUseTool: this.createCanUseTool(internalSessionId),
2430
+ canUseTool: this.createCanUseTool(sessionId),
2438
2431
  logger: this.logger,
2439
2432
  systemPrompt: buildSystemPrompt(meta?.systemPrompt),
2440
2433
  userProvidedOptions: meta?.claudeCode?.options,
2441
- onModeChange: this.createOnModeChange(internalSessionId),
2434
+ sessionId,
2435
+ isResume: false,
2436
+ onModeChange: this.createOnModeChange(sessionId),
2442
2437
  onProcessSpawned: this.processCallbacks?.onProcessSpawned,
2443
2438
  onProcessExited: this.processCallbacks?.onProcessExited
2444
2439
  });
2445
2440
  const input = new Pushable();
2446
2441
  const q = query({ prompt: input, options });
2447
2442
  const session = this.createSession(
2448
- internalSessionId,
2443
+ sessionId,
2449
2444
  q,
2450
2445
  input,
2451
2446
  permissionMode,
@@ -2453,19 +2448,23 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
2453
2448
  options.abortController
2454
2449
  );
2455
2450
  session.taskRunId = meta?.taskRunId;
2456
- this.registerPersistence(
2457
- internalSessionId,
2458
- meta
2459
- );
2451
+ this.registerPersistence(sessionId, meta);
2452
+ if (meta?.taskRunId) {
2453
+ await this.client.extNotification("_posthog/sdk_session", {
2454
+ taskRunId: meta.taskRunId,
2455
+ sessionId,
2456
+ adapter: "claude"
2457
+ });
2458
+ }
2460
2459
  const modelOptions = await this.getModelConfigOptions();
2461
2460
  session.modelId = modelOptions.currentModelId;
2462
2461
  await this.trySetModel(q, modelOptions.currentModelId);
2463
2462
  this.sendAvailableCommandsUpdate(
2464
- internalSessionId,
2463
+ sessionId,
2465
2464
  await getAvailableSlashCommands(q)
2466
2465
  );
2467
2466
  return {
2468
- sessionId: internalSessionId,
2467
+ sessionId,
2469
2468
  configOptions: await this.buildConfigOptions(modelOptions)
2470
2469
  };
2471
2470
  }
@@ -2473,34 +2472,31 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
2473
2472
  return this.resumeSession(params);
2474
2473
  }
2475
2474
  async resumeSession(params) {
2476
- const { sessionId: internalSessionId } = params;
2477
- if (this.sessionId === internalSessionId) {
2475
+ const meta = params._meta;
2476
+ const sessionId = meta?.sessionId;
2477
+ if (!sessionId) {
2478
+ throw new Error("Cannot resume session without sessionId");
2479
+ }
2480
+ if (this.sessionId === sessionId) {
2478
2481
  return {};
2479
2482
  }
2480
- const meta = params._meta;
2481
2483
  const mcpServers = parseMcpServers(params);
2482
2484
  await fetchMcpToolMetadata(mcpServers, this.logger);
2483
2485
  const permissionMode = meta?.permissionMode && TWIG_EXECUTION_MODES.includes(meta.permissionMode) ? meta.permissionMode : "default";
2484
2486
  const { query: q, session } = await this.initializeQuery({
2485
- internalSessionId,
2486
2487
  cwd: params.cwd,
2487
2488
  permissionMode,
2488
2489
  mcpServers,
2489
2490
  systemPrompt: buildSystemPrompt(meta?.systemPrompt),
2490
2491
  userProvidedOptions: meta?.claudeCode?.options,
2491
- sessionId: meta?.sessionId,
2492
+ sessionId,
2493
+ isResume: true,
2492
2494
  additionalDirectories: meta?.claudeCode?.options?.additionalDirectories
2493
2495
  });
2494
2496
  session.taskRunId = meta?.taskRunId;
2495
- if (meta?.sessionId) {
2496
- session.sessionId = meta.sessionId;
2497
- }
2498
- this.registerPersistence(
2499
- internalSessionId,
2500
- meta
2501
- );
2497
+ this.registerPersistence(sessionId, meta);
2502
2498
  this.sendAvailableCommandsUpdate(
2503
- internalSessionId,
2499
+ sessionId,
2504
2500
  await getAvailableSlashCommands(q)
2505
2501
  );
2506
2502
  return {
@@ -2569,20 +2565,21 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
2569
2565
  cwd: config.cwd,
2570
2566
  mcpServers: config.mcpServers,
2571
2567
  permissionMode: config.permissionMode,
2572
- canUseTool: this.createCanUseTool(config.internalSessionId),
2568
+ canUseTool: this.createCanUseTool(config.sessionId),
2573
2569
  logger: this.logger,
2574
2570
  systemPrompt: config.systemPrompt,
2575
2571
  userProvidedOptions: config.userProvidedOptions,
2576
2572
  sessionId: config.sessionId,
2573
+ isResume: config.isResume,
2577
2574
  additionalDirectories: config.additionalDirectories,
2578
- onModeChange: this.createOnModeChange(config.internalSessionId),
2575
+ onModeChange: this.createOnModeChange(config.sessionId),
2579
2576
  onProcessSpawned: this.processCallbacks?.onProcessSpawned,
2580
2577
  onProcessExited: this.processCallbacks?.onProcessExited
2581
2578
  });
2582
2579
  const q = query({ prompt: input, options });
2583
2580
  const abortController = options.abortController;
2584
2581
  const session = this.createSession(
2585
- config.internalSessionId,
2582
+ config.sessionId,
2586
2583
  q,
2587
2584
  input,
2588
2585
  config.permissionMode,
@@ -2775,6 +2772,7 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
2775
2772
  }
2776
2773
  case "tool_progress":
2777
2774
  case "auth_status":
2775
+ case "tool_use_summary":
2778
2776
  return null;
2779
2777
  default:
2780
2778
  unreachable(message, this.logger);