@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.
@@ -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.17",
1186
+ version: "2.1.22",
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: {
@@ -1255,11 +1255,11 @@ var package_default = {
1255
1255
  },
1256
1256
  devDependencies: {
1257
1257
  "@changesets/cli": "^2.27.8",
1258
+ "@posthog/shared": "workspace:*",
1259
+ "@twig/git": "workspace:*",
1258
1260
  "@types/bun": "latest",
1259
1261
  "@types/tar": "^6.1.13",
1260
1262
  minimatch: "^10.0.3",
1261
- "@posthog/shared": "workspace:*",
1262
- "@twig/git": "workspace:*",
1263
1263
  msw: "^2.12.7",
1264
1264
  tsup: "^8.5.1",
1265
1265
  tsx: "^4.20.6",
@@ -1267,16 +1267,16 @@ var package_default = {
1267
1267
  vitest: "^2.1.8"
1268
1268
  },
1269
1269
  dependencies: {
1270
+ "@agentclientprotocol/sdk": "^0.14.0",
1271
+ "@anthropic-ai/claude-agent-sdk": "0.2.42",
1272
+ "@anthropic-ai/sdk": "^0.71.0",
1273
+ "@hono/node-server": "^1.19.9",
1274
+ "@modelcontextprotocol/sdk": "^1.25.3",
1270
1275
  "@opentelemetry/api-logs": "^0.208.0",
1271
1276
  "@opentelemetry/exporter-logs-otlp-http": "^0.208.0",
1272
1277
  "@opentelemetry/resources": "^2.0.0",
1273
1278
  "@opentelemetry/sdk-logs": "^0.208.0",
1274
1279
  "@opentelemetry/semantic-conventions": "^1.28.0",
1275
- "@agentclientprotocol/sdk": "^0.14.0",
1276
- "@anthropic-ai/claude-agent-sdk": "0.2.12",
1277
- "@anthropic-ai/sdk": "^0.71.0",
1278
- "@hono/node-server": "^1.19.9",
1279
- "@modelcontextprotocol/sdk": "^1.25.3",
1280
1280
  "@types/jsonwebtoken": "^9.0.10",
1281
1281
  commander: "^14.0.2",
1282
1282
  diff: "^8.0.2",
@@ -2242,19 +2242,9 @@ function streamEventToAcpNotifications(message, sessionId, toolUseCache, fileCon
2242
2242
  }
2243
2243
  }
2244
2244
  async function handleSystemMessage(message, context) {
2245
- const { session, sessionId, client, logger } = context;
2245
+ const { sessionId, client, logger } = context;
2246
2246
  switch (message.subtype) {
2247
2247
  case "init":
2248
- if (message.session_id && session && !session.sessionId) {
2249
- session.sessionId = message.session_id;
2250
- if (session.taskRunId) {
2251
- await client.extNotification("_posthog/sdk_session", {
2252
- taskRunId: session.taskRunId,
2253
- sessionId: message.session_id,
2254
- adapter: "claude"
2255
- });
2256
- }
2257
- }
2258
2248
  break;
2259
2249
  case "compact_boundary":
2260
2250
  await client.extNotification("_posthog/compact_boundary", {
@@ -3219,7 +3209,7 @@ function buildSessionOptions(params) {
3219
3209
  ),
3220
3210
  ...params.onProcessSpawned && {
3221
3211
  spawnClaudeCodeProcess: buildSpawnWrapper(
3222
- params.sessionId ?? "unknown",
3212
+ params.sessionId,
3223
3213
  params.onProcessSpawned,
3224
3214
  params.onProcessExited
3225
3215
  )
@@ -3228,8 +3218,11 @@ function buildSessionOptions(params) {
3228
3218
  if (process.env.CLAUDE_CODE_EXECUTABLE) {
3229
3219
  options.pathToClaudeCodeExecutable = process.env.CLAUDE_CODE_EXECUTABLE;
3230
3220
  }
3231
- if (params.sessionId) {
3221
+ if (params.isResume) {
3232
3222
  options.resume = params.sessionId;
3223
+ options.forkSession = false;
3224
+ } else {
3225
+ options.sessionId = params.sessionId;
3233
3226
  }
3234
3227
  if (params.additionalDirectories) {
3235
3228
  options.additionalDirectories = params.additionalDirectories;
@@ -3306,7 +3299,7 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
3306
3299
  async newSession(params) {
3307
3300
  this.checkAuthStatus();
3308
3301
  const meta = params._meta;
3309
- const internalSessionId = uuidv7();
3302
+ const sessionId = uuidv7();
3310
3303
  const permissionMode = meta?.permissionMode && TWIG_EXECUTION_MODES.includes(meta.permissionMode) ? meta.permissionMode : "default";
3311
3304
  const mcpServers = parseMcpServers(params);
3312
3305
  await fetchMcpToolMetadata(mcpServers, this.logger);
@@ -3314,18 +3307,20 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
3314
3307
  cwd: params.cwd,
3315
3308
  mcpServers,
3316
3309
  permissionMode,
3317
- canUseTool: this.createCanUseTool(internalSessionId),
3310
+ canUseTool: this.createCanUseTool(sessionId),
3318
3311
  logger: this.logger,
3319
3312
  systemPrompt: buildSystemPrompt(meta?.systemPrompt),
3320
3313
  userProvidedOptions: meta?.claudeCode?.options,
3321
- onModeChange: this.createOnModeChange(internalSessionId),
3314
+ sessionId,
3315
+ isResume: false,
3316
+ onModeChange: this.createOnModeChange(sessionId),
3322
3317
  onProcessSpawned: this.processCallbacks?.onProcessSpawned,
3323
3318
  onProcessExited: this.processCallbacks?.onProcessExited
3324
3319
  });
3325
3320
  const input = new Pushable();
3326
3321
  const q = query({ prompt: input, options });
3327
3322
  const session = this.createSession(
3328
- internalSessionId,
3323
+ sessionId,
3329
3324
  q,
3330
3325
  input,
3331
3326
  permissionMode,
@@ -3333,19 +3328,23 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
3333
3328
  options.abortController
3334
3329
  );
3335
3330
  session.taskRunId = meta?.taskRunId;
3336
- this.registerPersistence(
3337
- internalSessionId,
3338
- meta
3339
- );
3331
+ this.registerPersistence(sessionId, meta);
3332
+ if (meta?.taskRunId) {
3333
+ await this.client.extNotification("_posthog/sdk_session", {
3334
+ taskRunId: meta.taskRunId,
3335
+ sessionId,
3336
+ adapter: "claude"
3337
+ });
3338
+ }
3340
3339
  const modelOptions = await this.getModelConfigOptions();
3341
3340
  session.modelId = modelOptions.currentModelId;
3342
3341
  await this.trySetModel(q, modelOptions.currentModelId);
3343
3342
  this.sendAvailableCommandsUpdate(
3344
- internalSessionId,
3343
+ sessionId,
3345
3344
  await getAvailableSlashCommands(q)
3346
3345
  );
3347
3346
  return {
3348
- sessionId: internalSessionId,
3347
+ sessionId,
3349
3348
  configOptions: await this.buildConfigOptions(modelOptions)
3350
3349
  };
3351
3350
  }
@@ -3353,34 +3352,31 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
3353
3352
  return this.resumeSession(params);
3354
3353
  }
3355
3354
  async resumeSession(params) {
3356
- const { sessionId: internalSessionId } = params;
3357
- if (this.sessionId === internalSessionId) {
3355
+ const meta = params._meta;
3356
+ const sessionId = meta?.sessionId;
3357
+ if (!sessionId) {
3358
+ throw new Error("Cannot resume session without sessionId");
3359
+ }
3360
+ if (this.sessionId === sessionId) {
3358
3361
  return {};
3359
3362
  }
3360
- const meta = params._meta;
3361
3363
  const mcpServers = parseMcpServers(params);
3362
3364
  await fetchMcpToolMetadata(mcpServers, this.logger);
3363
3365
  const permissionMode = meta?.permissionMode && TWIG_EXECUTION_MODES.includes(meta.permissionMode) ? meta.permissionMode : "default";
3364
3366
  const { query: q, session } = await this.initializeQuery({
3365
- internalSessionId,
3366
3367
  cwd: params.cwd,
3367
3368
  permissionMode,
3368
3369
  mcpServers,
3369
3370
  systemPrompt: buildSystemPrompt(meta?.systemPrompt),
3370
3371
  userProvidedOptions: meta?.claudeCode?.options,
3371
- sessionId: meta?.sessionId,
3372
+ sessionId,
3373
+ isResume: true,
3372
3374
  additionalDirectories: meta?.claudeCode?.options?.additionalDirectories
3373
3375
  });
3374
3376
  session.taskRunId = meta?.taskRunId;
3375
- if (meta?.sessionId) {
3376
- session.sessionId = meta.sessionId;
3377
- }
3378
- this.registerPersistence(
3379
- internalSessionId,
3380
- meta
3381
- );
3377
+ this.registerPersistence(sessionId, meta);
3382
3378
  this.sendAvailableCommandsUpdate(
3383
- internalSessionId,
3379
+ sessionId,
3384
3380
  await getAvailableSlashCommands(q)
3385
3381
  );
3386
3382
  return {
@@ -3449,20 +3445,21 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
3449
3445
  cwd: config.cwd,
3450
3446
  mcpServers: config.mcpServers,
3451
3447
  permissionMode: config.permissionMode,
3452
- canUseTool: this.createCanUseTool(config.internalSessionId),
3448
+ canUseTool: this.createCanUseTool(config.sessionId),
3453
3449
  logger: this.logger,
3454
3450
  systemPrompt: config.systemPrompt,
3455
3451
  userProvidedOptions: config.userProvidedOptions,
3456
3452
  sessionId: config.sessionId,
3453
+ isResume: config.isResume,
3457
3454
  additionalDirectories: config.additionalDirectories,
3458
- onModeChange: this.createOnModeChange(config.internalSessionId),
3455
+ onModeChange: this.createOnModeChange(config.sessionId),
3459
3456
  onProcessSpawned: this.processCallbacks?.onProcessSpawned,
3460
3457
  onProcessExited: this.processCallbacks?.onProcessExited
3461
3458
  });
3462
3459
  const q = query({ prompt: input, options });
3463
3460
  const abortController = options.abortController;
3464
3461
  const session = this.createSession(
3465
- config.internalSessionId,
3462
+ config.sessionId,
3466
3463
  q,
3467
3464
  input,
3468
3465
  config.permissionMode,
@@ -3655,6 +3652,7 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
3655
3652
  }
3656
3653
  case "tool_progress":
3657
3654
  case "auth_status":
3655
+ case "tool_use_summary":
3658
3656
  return null;
3659
3657
  default:
3660
3658
  unreachable(message, this.logger);