@posthog/agent 2.3.172 → 2.3.173

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.
@@ -904,7 +904,7 @@ var import_hono = require("hono");
904
904
  // package.json
905
905
  var package_default = {
906
906
  name: "@posthog/agent",
907
- version: "2.3.172",
907
+ version: "2.3.173",
908
908
  repository: "https://github.com/PostHog/code",
909
909
  description: "TypeScript agent framework wrapping Claude Agent SDK with Git-based task execution for PostHog",
910
910
  exports: {
@@ -1062,7 +1062,9 @@ var POSTHOG_NOTIFICATIONS = {
1062
1062
  /** Task-level notification (progress, milestones) */
1063
1063
  TASK_NOTIFICATION: "_posthog/task_notification",
1064
1064
  /** Marks a boundary for log compaction */
1065
- COMPACT_BOUNDARY: "_posthog/compact_boundary"
1065
+ COMPACT_BOUNDARY: "_posthog/compact_boundary",
1066
+ /** Token usage update for a session turn */
1067
+ USAGE_UPDATE: "_posthog/usage_update"
1066
1068
  };
1067
1069
 
1068
1070
  // src/adapters/acp-connection.ts
@@ -3006,7 +3008,6 @@ var CODE_EXECUTION_MODES = [
3006
3008
  function getAvailableModes() {
3007
3009
  return IS_ROOT ? availableModes.filter((m) => m.id !== "bypassPermissions") : availableModes;
3008
3010
  }
3009
- var CODEX_NATIVE_MODES = ["auto", "read-only", "full-access"];
3010
3011
  var codexModes = [
3011
3012
  {
3012
3013
  id: "read-only",
@@ -4392,16 +4393,19 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
4392
4393
  }
4393
4394
  });
4394
4395
  }
4395
- await this.client.extNotification("_posthog/usage_update", {
4396
- sessionId: params.sessionId,
4397
- used: {
4398
- inputTokens: message.usage.input_tokens,
4399
- outputTokens: message.usage.output_tokens,
4400
- cachedReadTokens: message.usage.cache_read_input_tokens,
4401
- cachedWriteTokens: message.usage.cache_creation_input_tokens
4402
- },
4403
- cost: message.total_cost_usd
4404
- });
4396
+ await this.client.extNotification(
4397
+ POSTHOG_NOTIFICATIONS.USAGE_UPDATE,
4398
+ {
4399
+ sessionId: params.sessionId,
4400
+ used: {
4401
+ inputTokens: message.usage.input_tokens,
4402
+ outputTokens: message.usage.output_tokens,
4403
+ cachedReadTokens: message.usage.cache_read_input_tokens,
4404
+ cachedWriteTokens: message.usage.cache_creation_input_tokens
4405
+ },
4406
+ cost: message.total_cost_usd
4407
+ }
4408
+ );
4405
4409
  const usage = {
4406
4410
  inputTokens: this.session.accumulatedUsage.inputTokens,
4407
4411
  outputTokens: this.session.accumulatedUsage.outputTokens,
@@ -5026,9 +5030,10 @@ var import_sdk3 = require("@agentclientprotocol/sdk");
5026
5030
 
5027
5031
  // src/adapters/codex/codex-client.ts
5028
5032
  var AUTO_APPROVED_KINDS = {
5029
- auto: /* @__PURE__ */ new Set(["read", "search", "fetch", "think"]),
5030
- "read-only": /* @__PURE__ */ new Set(["read", "search", "fetch", "think"]),
5031
- "full-access": /* @__PURE__ */ new Set([
5033
+ default: /* @__PURE__ */ new Set(["read", "search", "fetch", "think"]),
5034
+ acceptEdits: /* @__PURE__ */ new Set(["read", "edit", "search", "fetch", "think"]),
5035
+ plan: /* @__PURE__ */ new Set(["read", "search", "fetch", "think"]),
5036
+ bypassPermissions: /* @__PURE__ */ new Set([
5032
5037
  "read",
5033
5038
  "edit",
5034
5039
  "delete",
@@ -5042,7 +5047,7 @@ var AUTO_APPROVED_KINDS = {
5042
5047
  ])
5043
5048
  };
5044
5049
  function shouldAutoApprove(mode, kind) {
5045
- if (mode === "full-access") return true;
5050
+ if (mode === "bypassPermissions") return true;
5046
5051
  if (!kind) return false;
5047
5052
  return AUTO_APPROVED_KINDS[mode]?.has(kind) ?? false;
5048
5053
  }
@@ -5149,7 +5154,7 @@ function createSessionState(sessionId, cwd, opts) {
5149
5154
  return {
5150
5155
  sessionId,
5151
5156
  cwd,
5152
- modeId: opts?.modeId ?? "auto",
5157
+ modeId: opts?.modeId ?? "default",
5153
5158
  modelId: opts?.modelId,
5154
5159
  configOptions: [],
5155
5160
  accumulatedUsage: {
@@ -5158,8 +5163,7 @@ function createSessionState(sessionId, cwd, opts) {
5158
5163
  cachedReadTokens: 0,
5159
5164
  cachedWriteTokens: 0
5160
5165
  },
5161
- permissionMode: opts?.permissionMode ?? "auto",
5162
- cancelled: false,
5166
+ permissionMode: opts?.permissionMode ?? "default",
5163
5167
  taskRunId: opts?.taskRunId,
5164
5168
  taskId: opts?.taskId
5165
5169
  };
@@ -5273,7 +5277,7 @@ function buildConfigArgs(options) {
5273
5277
  args.push("-c", `model="${options.model}"`);
5274
5278
  }
5275
5279
  if (options.instructions) {
5276
- const escaped = options.instructions.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
5280
+ const escaped = options.instructions.replace(/\\/g, "\\\\").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/"/g, '\\"');
5277
5281
  args.push("-c", `instructions="${escaped}"`);
5278
5282
  }
5279
5283
  return args;
@@ -5353,12 +5357,18 @@ function spawnCodexProcess(options) {
5353
5357
  }
5354
5358
 
5355
5359
  // src/adapters/codex/codex-agent.ts
5356
- function toPermissionMode(mode) {
5357
- if (mode && CODEX_NATIVE_MODES.includes(mode)) {
5360
+ function toCodeExecutionMode(mode) {
5361
+ if (mode && CODE_EXECUTION_MODES.includes(mode)) {
5358
5362
  return mode;
5359
5363
  }
5360
- return "auto";
5364
+ return "default";
5361
5365
  }
5366
+ var CODEX_NATIVE_MODE = {
5367
+ default: "default",
5368
+ acceptEdits: "default",
5369
+ plan: "plan",
5370
+ bypassPermissions: "default"
5371
+ };
5362
5372
  var CodexAcpAgent = class extends BaseAcpAgent {
5363
5373
  adapterName = "codex";
5364
5374
  codexProcess;
@@ -5384,25 +5394,9 @@ var CodexAcpAgent = class extends BaseAcpAgent {
5384
5394
  notificationHistory: [],
5385
5395
  cancelled: false
5386
5396
  };
5397
+ this.sessionState = createSessionState("", cwd);
5387
5398
  this.codexConnection = new import_sdk3.ClientSideConnection(
5388
- (_agent) => createCodexClient(
5389
- this.client,
5390
- this.logger,
5391
- this.sessionState ?? {
5392
- sessionId: "",
5393
- cwd: "",
5394
- modeId: "auto",
5395
- configOptions: [],
5396
- accumulatedUsage: {
5397
- inputTokens: 0,
5398
- outputTokens: 0,
5399
- cachedReadTokens: 0,
5400
- cachedWriteTokens: 0
5401
- },
5402
- permissionMode: "auto",
5403
- cancelled: false
5404
- }
5405
- ),
5399
+ (_agent) => createCodexClient(this.client, this.logger, this.sessionState),
5406
5400
  codexStream
5407
5401
  );
5408
5402
  }
@@ -5439,7 +5433,7 @@ var CodexAcpAgent = class extends BaseAcpAgent {
5439
5433
  taskId: meta?.taskId ?? meta?.persistence?.taskId,
5440
5434
  modeId: response.modes?.currentModeId ?? "default",
5441
5435
  modelId: response.models?.currentModelId,
5442
- permissionMode: toPermissionMode(meta?.permissionMode)
5436
+ permissionMode: toCodeExecutionMode(meta?.permissionMode)
5443
5437
  });
5444
5438
  this.sessionId = response.sessionId;
5445
5439
  this.sessionState.configOptions = response.configOptions ?? [];
@@ -5458,7 +5452,10 @@ var CodexAcpAgent = class extends BaseAcpAgent {
5458
5452
  }
5459
5453
  async loadSession(params) {
5460
5454
  const response = await this.codexConnection.loadSession(params);
5461
- this.sessionState = createSessionState(params.sessionId, params.cwd);
5455
+ const meta = params._meta;
5456
+ this.sessionState = createSessionState(params.sessionId, params.cwd, {
5457
+ permissionMode: toCodeExecutionMode(meta?.permissionMode)
5458
+ });
5462
5459
  this.sessionId = params.sessionId;
5463
5460
  this.sessionState.configOptions = response.configOptions ?? [];
5464
5461
  return response;
@@ -5469,10 +5466,14 @@ var CodexAcpAgent = class extends BaseAcpAgent {
5469
5466
  cwd: params.cwd,
5470
5467
  mcpServers: params.mcpServers ?? []
5471
5468
  });
5472
- this.sessionState = createSessionState(params.sessionId, params.cwd);
5469
+ const meta = params._meta;
5470
+ this.sessionState = createSessionState(params.sessionId, params.cwd, {
5471
+ taskRunId: meta?.taskRunId,
5472
+ taskId: meta?.taskId ?? meta?.persistence?.taskId,
5473
+ permissionMode: toCodeExecutionMode(meta?.permissionMode)
5474
+ });
5473
5475
  this.sessionId = params.sessionId;
5474
5476
  this.sessionState.configOptions = loadResponse.configOptions ?? [];
5475
- const meta = params._meta;
5476
5477
  if (meta?.taskRunId) {
5477
5478
  await this.client.extNotification(POSTHOG_NOTIFICATIONS.SDK_SESSION, {
5478
5479
  taskRunId: meta.taskRunId,
@@ -5492,7 +5493,12 @@ var CodexAcpAgent = class extends BaseAcpAgent {
5492
5493
  mcpServers: params.mcpServers ?? [],
5493
5494
  _meta: params._meta
5494
5495
  });
5495
- this.sessionState = createSessionState(newResponse.sessionId, params.cwd);
5496
+ const meta = params._meta;
5497
+ this.sessionState = createSessionState(newResponse.sessionId, params.cwd, {
5498
+ taskRunId: meta?.taskRunId,
5499
+ taskId: meta?.taskId ?? meta?.persistence?.taskId,
5500
+ permissionMode: toCodeExecutionMode(meta?.permissionMode)
5501
+ });
5496
5502
  this.sessionId = newResponse.sessionId;
5497
5503
  this.sessionState.configOptions = newResponse.configOptions ?? [];
5498
5504
  return newResponse;
@@ -5501,22 +5507,14 @@ var CodexAcpAgent = class extends BaseAcpAgent {
5501
5507
  return this.codexConnection.listSessions(params);
5502
5508
  }
5503
5509
  async unstable_listSessions(params) {
5504
- return this.codexConnection.listSessions(params);
5510
+ return this.listSessions(params);
5505
5511
  }
5506
5512
  async prompt(params) {
5507
- if (this.sessionState) {
5508
- this.sessionState.cancelled = false;
5509
- this.sessionState.interruptReason = void 0;
5510
- resetUsage(this.sessionState);
5511
- }
5513
+ this.session.cancelled = false;
5514
+ this.session.interruptReason = void 0;
5515
+ resetUsage(this.sessionState);
5512
5516
  const response = await this.codexConnection.prompt(params);
5513
- if (this.sessionState && response.usage) {
5514
- this.sessionState.accumulatedUsage.inputTokens += response.usage.inputTokens ?? 0;
5515
- this.sessionState.accumulatedUsage.outputTokens += response.usage.outputTokens ?? 0;
5516
- this.sessionState.accumulatedUsage.cachedReadTokens += response.usage.cachedReadTokens ?? 0;
5517
- this.sessionState.accumulatedUsage.cachedWriteTokens += response.usage.cachedWriteTokens ?? 0;
5518
- }
5519
- if (this.sessionState?.taskRunId) {
5517
+ if (this.sessionState.taskRunId) {
5520
5518
  const { accumulatedUsage } = this.sessionState;
5521
5519
  await this.client.extNotification(POSTHOG_NOTIFICATIONS.TURN_COMPLETE, {
5522
5520
  sessionId: params.sessionId,
@@ -5530,7 +5528,7 @@ var CodexAcpAgent = class extends BaseAcpAgent {
5530
5528
  }
5531
5529
  });
5532
5530
  if (response.usage) {
5533
- await this.client.extNotification("_posthog/usage_update", {
5531
+ await this.client.extNotification(POSTHOG_NOTIFICATIONS.USAGE_UPDATE, {
5534
5532
  sessionId: params.sessionId,
5535
5533
  used: {
5536
5534
  inputTokens: response.usage.inputTokens ?? 0,
@@ -5545,38 +5543,24 @@ var CodexAcpAgent = class extends BaseAcpAgent {
5545
5543
  return response;
5546
5544
  }
5547
5545
  async interrupt() {
5548
- if (this.sessionState) {
5549
- this.sessionState.cancelled = true;
5550
- }
5551
5546
  await this.codexConnection.cancel({
5552
5547
  sessionId: this.sessionId
5553
5548
  });
5554
5549
  }
5555
- async cancel(params) {
5556
- if (this.sessionState) {
5557
- this.sessionState.cancelled = true;
5558
- const meta = params._meta;
5559
- if (meta?.interruptReason) {
5560
- this.sessionState.interruptReason = meta.interruptReason;
5561
- }
5562
- }
5563
- await this.codexConnection.cancel(params);
5564
- }
5565
5550
  async setSessionMode(params) {
5566
- const permissionMode = toPermissionMode(params.modeId);
5551
+ const requestedMode = toCodeExecutionMode(params.modeId);
5552
+ const nativeMode = CODEX_NATIVE_MODE[requestedMode];
5567
5553
  const response = await this.codexConnection.setSessionMode({
5568
5554
  ...params,
5569
- modeId: permissionMode
5555
+ modeId: nativeMode
5570
5556
  });
5571
- if (this.sessionState) {
5572
- this.sessionState.modeId = permissionMode;
5573
- this.sessionState.permissionMode = permissionMode;
5574
- }
5557
+ this.sessionState.modeId = nativeMode;
5558
+ this.sessionState.permissionMode = requestedMode;
5575
5559
  return response ?? {};
5576
5560
  }
5577
5561
  async setSessionConfigOption(params) {
5578
5562
  const response = await this.codexConnection.setSessionConfigOption(params);
5579
- if (this.sessionState && response.configOptions) {
5563
+ if (response.configOptions) {
5580
5564
  this.sessionState.configOptions = response.configOptions;
5581
5565
  }
5582
5566
  return response;
@@ -5585,6 +5569,7 @@ var CodexAcpAgent = class extends BaseAcpAgent {
5585
5569
  }
5586
5570
  async closeSession() {
5587
5571
  this.logger.info("Closing Codex session", { sessionId: this.sessionId });
5572
+ this.session.abortController.abort();
5588
5573
  this.session.settingsManager.dispose();
5589
5574
  try {
5590
5575
  this.codexProcess.kill();