@posthog/agent 2.3.281 → 2.3.282

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.
@@ -5805,7 +5805,7 @@ var import_hono = require("hono");
5805
5805
  // package.json
5806
5806
  var package_default = {
5807
5807
  name: "@posthog/agent",
5808
- version: "2.3.281",
5808
+ version: "2.3.282",
5809
5809
  repository: "https://github.com/PostHog/code",
5810
5810
  description: "TypeScript agent framework wrapping Claude Agent SDK with Git-based task execution for PostHog",
5811
5811
  exports: {
@@ -7926,9 +7926,16 @@ var CODE_EXECUTION_MODES = [
7926
7926
  // "dontAsk",
7927
7927
  "bypassPermissions"
7928
7928
  ];
7929
+ function isCodeExecutionMode(mode) {
7930
+ return CODE_EXECUTION_MODES.includes(mode);
7931
+ }
7929
7932
  function getAvailableModes() {
7930
7933
  return IS_ROOT ? availableModes.filter((m) => m.id !== "bypassPermissions") : availableModes;
7931
7934
  }
7935
+ var CODEX_NATIVE_MODES = ["auto", "read-only", "full-access"];
7936
+ function isCodexNativeMode(mode) {
7937
+ return CODEX_NATIVE_MODES.includes(mode);
7938
+ }
7932
7939
  var codexModes = [
7933
7940
  {
7934
7941
  id: "read-only",
@@ -9891,10 +9898,24 @@ var AUTO_APPROVED_KINDS = {
9891
9898
  "fetch",
9892
9899
  "switch_mode",
9893
9900
  "other"
9901
+ ]),
9902
+ auto: /* @__PURE__ */ new Set(["read", "search", "fetch", "think"]),
9903
+ "read-only": /* @__PURE__ */ new Set(["read", "search", "fetch", "think"]),
9904
+ "full-access": /* @__PURE__ */ new Set([
9905
+ "read",
9906
+ "edit",
9907
+ "delete",
9908
+ "move",
9909
+ "search",
9910
+ "execute",
9911
+ "think",
9912
+ "fetch",
9913
+ "switch_mode",
9914
+ "other"
9894
9915
  ])
9895
9916
  };
9896
9917
  function shouldAutoApprove(mode, kind) {
9897
- if (mode === "bypassPermissions") return true;
9918
+ if (mode === "bypassPermissions" || mode === "full-access") return true;
9898
9919
  if (!kind) return false;
9899
9920
  return AUTO_APPROVED_KINDS[mode]?.has(kind) ?? false;
9900
9921
  }
@@ -10001,7 +10022,7 @@ function createSessionState(sessionId, cwd, opts) {
10001
10022
  return {
10002
10023
  sessionId,
10003
10024
  cwd,
10004
- modeId: opts?.modeId ?? "default",
10025
+ modeId: opts?.modeId ?? "auto",
10005
10026
  modelId: opts?.modelId,
10006
10027
  configOptions: [],
10007
10028
  accumulatedUsage: {
@@ -10010,7 +10031,7 @@ function createSessionState(sessionId, cwd, opts) {
10010
10031
  cachedReadTokens: 0,
10011
10032
  cachedWriteTokens: 0
10012
10033
  },
10013
- permissionMode: opts?.permissionMode ?? "default",
10034
+ permissionMode: opts?.permissionMode ?? "auto",
10014
10035
  taskRunId: opts?.taskRunId,
10015
10036
  taskId: opts?.taskId
10016
10037
  };
@@ -10205,18 +10226,33 @@ function spawnCodexProcess(options) {
10205
10226
  }
10206
10227
 
10207
10228
  // src/adapters/codex/codex-agent.ts
10208
- function toCodeExecutionMode(mode) {
10209
- if (mode && CODE_EXECUTION_MODES.includes(mode)) {
10229
+ function toCodexPermissionMode(mode) {
10230
+ if (mode && (isCodexNativeMode(mode) || isCodeExecutionMode(mode))) {
10210
10231
  return mode;
10211
10232
  }
10212
- return "default";
10233
+ return "auto";
10213
10234
  }
10214
10235
  var CODEX_NATIVE_MODE = {
10215
- default: "default",
10216
- acceptEdits: "default",
10217
- plan: "plan",
10218
- bypassPermissions: "default"
10236
+ default: "auto",
10237
+ acceptEdits: "auto",
10238
+ plan: "read-only",
10239
+ bypassPermissions: "full-access"
10219
10240
  };
10241
+ function toCodexNativeMode(mode) {
10242
+ if (mode && isCodexNativeMode(mode)) {
10243
+ return mode;
10244
+ }
10245
+ if (mode && isCodeExecutionMode(mode)) {
10246
+ return CODEX_NATIVE_MODE[mode];
10247
+ }
10248
+ return "auto";
10249
+ }
10250
+ function getCurrentPermissionMode(currentModeId, fallbackMode) {
10251
+ if (currentModeId && isCodexNativeMode(currentModeId)) {
10252
+ return currentModeId;
10253
+ }
10254
+ return toCodexPermissionMode(fallbackMode);
10255
+ }
10220
10256
  var CodexAcpAgent = class extends BaseAcpAgent {
10221
10257
  adapterName = "codex";
10222
10258
  codexProcess;
@@ -10276,16 +10312,22 @@ var CodexAcpAgent = class extends BaseAcpAgent {
10276
10312
  }
10277
10313
  async newSession(params) {
10278
10314
  const meta = params._meta;
10315
+ const requestedPermissionMode = toCodexPermissionMode(meta?.permissionMode);
10279
10316
  const response = await this.codexConnection.newSession(params);
10280
10317
  this.sessionState = createSessionState(response.sessionId, params.cwd, {
10281
10318
  taskRunId: meta?.taskRunId,
10282
10319
  taskId: meta?.taskId ?? meta?.persistence?.taskId,
10283
- modeId: response.modes?.currentModeId ?? "default",
10320
+ modeId: response.modes?.currentModeId ?? "auto",
10284
10321
  modelId: response.models?.currentModelId,
10285
- permissionMode: toCodeExecutionMode(meta?.permissionMode)
10322
+ permissionMode: requestedPermissionMode
10286
10323
  });
10287
10324
  this.sessionId = response.sessionId;
10288
10325
  this.sessionState.configOptions = response.configOptions ?? [];
10326
+ await this.applyInitialPermissionMode(
10327
+ response.sessionId,
10328
+ meta?.permissionMode,
10329
+ response.modes?.currentModeId
10330
+ );
10289
10331
  if (meta?.taskRunId) {
10290
10332
  await this.client.extNotification(POSTHOG_NOTIFICATIONS.SDK_SESSION, {
10291
10333
  taskRunId: meta.taskRunId,
@@ -10302,8 +10344,13 @@ var CodexAcpAgent = class extends BaseAcpAgent {
10302
10344
  async loadSession(params) {
10303
10345
  const response = await this.codexConnection.loadSession(params);
10304
10346
  const meta = params._meta;
10347
+ const currentPermissionMode = getCurrentPermissionMode(
10348
+ response.modes?.currentModeId,
10349
+ meta?.permissionMode
10350
+ );
10305
10351
  this.sessionState = createSessionState(params.sessionId, params.cwd, {
10306
- permissionMode: toCodeExecutionMode(meta?.permissionMode)
10352
+ modeId: response.modes?.currentModeId ?? "auto",
10353
+ permissionMode: currentPermissionMode
10307
10354
  });
10308
10355
  this.sessionId = params.sessionId;
10309
10356
  this.sessionState.configOptions = response.configOptions ?? [];
@@ -10316,10 +10363,15 @@ var CodexAcpAgent = class extends BaseAcpAgent {
10316
10363
  mcpServers: params.mcpServers ?? []
10317
10364
  });
10318
10365
  const meta = params._meta;
10366
+ const currentPermissionMode = getCurrentPermissionMode(
10367
+ loadResponse.modes?.currentModeId,
10368
+ meta?.permissionMode
10369
+ );
10319
10370
  this.sessionState = createSessionState(params.sessionId, params.cwd, {
10320
10371
  taskRunId: meta?.taskRunId,
10321
10372
  taskId: meta?.taskId ?? meta?.persistence?.taskId,
10322
- permissionMode: toCodeExecutionMode(meta?.permissionMode)
10373
+ modeId: loadResponse.modes?.currentModeId ?? "auto",
10374
+ permissionMode: currentPermissionMode
10323
10375
  });
10324
10376
  this.sessionId = params.sessionId;
10325
10377
  this.sessionState.configOptions = loadResponse.configOptions ?? [];
@@ -10343,15 +10395,39 @@ var CodexAcpAgent = class extends BaseAcpAgent {
10343
10395
  _meta: params._meta
10344
10396
  });
10345
10397
  const meta = params._meta;
10398
+ const requestedPermissionMode = toCodexPermissionMode(meta?.permissionMode);
10346
10399
  this.sessionState = createSessionState(newResponse.sessionId, params.cwd, {
10347
10400
  taskRunId: meta?.taskRunId,
10348
10401
  taskId: meta?.taskId ?? meta?.persistence?.taskId,
10349
- permissionMode: toCodeExecutionMode(meta?.permissionMode)
10402
+ modeId: newResponse.modes?.currentModeId ?? "auto",
10403
+ permissionMode: requestedPermissionMode
10350
10404
  });
10351
10405
  this.sessionId = newResponse.sessionId;
10352
10406
  this.sessionState.configOptions = newResponse.configOptions ?? [];
10407
+ await this.applyInitialPermissionMode(
10408
+ newResponse.sessionId,
10409
+ meta?.permissionMode,
10410
+ newResponse.modes?.currentModeId
10411
+ );
10353
10412
  return newResponse;
10354
10413
  }
10414
+ async applyInitialPermissionMode(sessionId, permissionMode, currentModeId) {
10415
+ if (!permissionMode) {
10416
+ return;
10417
+ }
10418
+ const nativeMode = toCodexNativeMode(permissionMode);
10419
+ if (nativeMode === currentModeId) {
10420
+ this.sessionState.modeId = nativeMode;
10421
+ this.sessionState.permissionMode = toCodexPermissionMode(permissionMode);
10422
+ return;
10423
+ }
10424
+ await this.codexConnection.setSessionMode({
10425
+ sessionId,
10426
+ modeId: nativeMode
10427
+ });
10428
+ this.sessionState.modeId = nativeMode;
10429
+ this.sessionState.permissionMode = toCodexPermissionMode(permissionMode);
10430
+ }
10355
10431
  async listSessions(params) {
10356
10432
  return this.codexConnection.listSessions(params);
10357
10433
  }
@@ -10397,8 +10473,8 @@ var CodexAcpAgent = class extends BaseAcpAgent {
10397
10473
  });
10398
10474
  }
10399
10475
  async setSessionMode(params) {
10400
- const requestedMode = toCodeExecutionMode(params.modeId);
10401
- const nativeMode = CODEX_NATIVE_MODE[requestedMode];
10476
+ const requestedMode = toCodexPermissionMode(params.modeId);
10477
+ const nativeMode = toCodexNativeMode(params.modeId);
10402
10478
  const response = await this.codexConnection.setSessionMode({
10403
10479
  ...params,
10404
10480
  modeId: nativeMode
@@ -12445,7 +12521,13 @@ var AgentServer = class _AgentServer {
12445
12521
  return payload.mode ?? this.config.mode;
12446
12522
  }
12447
12523
  getSessionPermissionMode() {
12448
- return this.session?.permissionMode ?? "default";
12524
+ if (this.session?.permissionMode) {
12525
+ return this.session.permissionMode;
12526
+ }
12527
+ return this.getRuntimeAdapter() === "codex" ? "auto" : "default";
12528
+ }
12529
+ shouldRelayPermissionToClient(mode) {
12530
+ return mode === "default" || mode === "auto";
12449
12531
  }
12450
12532
  createApp() {
12451
12533
  const app = new import_hono.Hono();
@@ -12900,7 +12982,7 @@ var AgentServer = class _AgentServer {
12900
12982
  clientCapabilities: {}
12901
12983
  });
12902
12984
  const runState = preTaskRun?.state;
12903
- const initialPermissionMode = typeof runState?.initial_permission_mode === "string" ? runState.initial_permission_mode : "bypassPermissions";
12985
+ const initialPermissionMode = typeof runState?.initial_permission_mode === "string" ? runState.initial_permission_mode : runtimeAdapter === "codex" ? "auto" : "bypassPermissions";
12904
12986
  const sessionResponse = await clientConnection.newSession({
12905
12987
  cwd: this.config.repositoryPath ?? "/tmp/workspace",
12906
12988
  mcpServers: this.config.mcpServers ?? [],
@@ -13469,7 +13551,7 @@ ${attributionInstructions}
13469
13551
  {
13470
13552
  const isQuestion = codeToolKind === "question";
13471
13553
  const sessionPermissionMode = this.getSessionPermissionMode();
13472
- const needsRelay = isQuestion || isPlanApproval || sessionPermissionMode === "default";
13554
+ const needsRelay = isQuestion || isPlanApproval || this.shouldRelayPermissionToClient(sessionPermissionMode);
13473
13555
  if (needsRelay && this.session?.hasDesktopConnected) {
13474
13556
  this.logger.info("Relaying permission to connected client", {
13475
13557
  kind: params.toolCall?.kind,