@posthog/agent 2.3.281 → 2.3.285
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 +95 -19
- package/dist/agent.js.map +1 -1
- package/dist/claude-cli/cli.js +15103 -11549
- package/dist/claude-cli/vendor/audio-capture/arm64-darwin/audio-capture.node +0 -0
- package/dist/claude-cli/vendor/audio-capture/arm64-linux/audio-capture.node +0 -0
- package/dist/claude-cli/vendor/audio-capture/arm64-win32/audio-capture.node +0 -0
- package/dist/claude-cli/vendor/audio-capture/x64-darwin/audio-capture.node +0 -0
- package/dist/claude-cli/vendor/audio-capture/x64-linux/audio-capture.node +0 -0
- package/dist/claude-cli/vendor/audio-capture/x64-win32/audio-capture.node +0 -0
- package/dist/claude-cli/vendor/ripgrep/arm64-darwin/rg +0 -0
- package/dist/claude-cli/vendor/ripgrep/arm64-linux/rg +0 -0
- package/dist/claude-cli/vendor/ripgrep/arm64-win32/rg.exe +0 -0
- package/dist/claude-cli/vendor/ripgrep/x64-darwin/rg +0 -0
- package/dist/claude-cli/vendor/ripgrep/x64-linux/rg +0 -0
- package/dist/claude-cli/vendor/ripgrep/x64-win32/rg.exe +0 -0
- package/dist/posthog-api.js +2 -2
- package/dist/posthog-api.js.map +1 -1
- package/dist/server/agent-server.d.ts +1 -0
- package/dist/server/agent-server.js +104 -22
- package/dist/server/agent-server.js.map +1 -1
- package/dist/server/bin.cjs +104 -22
- package/dist/server/bin.cjs.map +1 -1
- package/package.json +2 -2
- package/src/adapters/codex/codex-agent.test.ts +117 -0
- package/src/adapters/codex/codex-agent.ts +90 -17
- package/src/adapters/codex/codex-client.ts +18 -4
- package/src/adapters/codex/session-state.ts +5 -5
- package/src/server/agent-server.ts +24 -11
- package/src/test/mocks/claude-sdk.ts +4 -0
- package/dist/claude-cli/vendor/tree-sitter-bash/arm64-darwin/tree-sitter-bash.node +0 -0
- package/dist/claude-cli/vendor/tree-sitter-bash/arm64-linux/tree-sitter-bash.node +0 -0
- package/dist/claude-cli/vendor/tree-sitter-bash/arm64-win32/tree-sitter-bash.node +0 -0
- package/dist/claude-cli/vendor/tree-sitter-bash/x64-darwin/tree-sitter-bash.node +0 -0
- package/dist/claude-cli/vendor/tree-sitter-bash/x64-linux/tree-sitter-bash.node +0 -0
- package/dist/claude-cli/vendor/tree-sitter-bash/x64-win32/tree-sitter-bash.node +0 -0
package/dist/server/bin.cjs
CHANGED
|
@@ -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.
|
|
5808
|
+
version: "2.3.285",
|
|
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: {
|
|
@@ -5906,7 +5906,7 @@ var package_default = {
|
|
|
5906
5906
|
dependencies: {
|
|
5907
5907
|
"@agentclientprotocol/sdk": "0.16.1",
|
|
5908
5908
|
ajv: "^8.17.1",
|
|
5909
|
-
"@anthropic-ai/claude-agent-sdk": "0.2.
|
|
5909
|
+
"@anthropic-ai/claude-agent-sdk": "0.2.112",
|
|
5910
5910
|
"@anthropic-ai/sdk": "^0.78.0",
|
|
5911
5911
|
"@hono/node-server": "^1.19.9",
|
|
5912
5912
|
"@opentelemetry/api-logs": "^0.208.0",
|
|
@@ -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 ?? "
|
|
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 ?? "
|
|
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
|
|
10209
|
-
if (mode &&
|
|
10229
|
+
function toCodexPermissionMode(mode) {
|
|
10230
|
+
if (mode && (isCodexNativeMode(mode) || isCodeExecutionMode(mode))) {
|
|
10210
10231
|
return mode;
|
|
10211
10232
|
}
|
|
10212
|
-
return "
|
|
10233
|
+
return "auto";
|
|
10213
10234
|
}
|
|
10214
10235
|
var CODEX_NATIVE_MODE = {
|
|
10215
|
-
default: "
|
|
10216
|
-
acceptEdits: "
|
|
10217
|
-
plan: "
|
|
10218
|
-
bypassPermissions: "
|
|
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 ?? "
|
|
10320
|
+
modeId: response.modes?.currentModeId ?? "auto",
|
|
10284
10321
|
modelId: response.models?.currentModelId,
|
|
10285
|
-
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
10401
|
-
const nativeMode =
|
|
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
|
-
|
|
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
|
|
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,
|