@posthog/agent 2.3.169 → 2.3.172
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/adapters/claude/permissions/permission-options.js +19 -0
- package/dist/adapters/claude/permissions/permission-options.js.map +1 -1
- package/dist/adapters/claude/tools.js +19 -0
- package/dist/adapters/claude/tools.js.map +1 -1
- package/dist/agent.js +129 -19
- package/dist/agent.js.map +1 -1
- package/dist/execution-mode.d.ts +7 -2
- package/dist/execution-mode.js +25 -0
- package/dist/execution-mode.js.map +1 -1
- package/dist/posthog-api.js +1 -1
- package/dist/posthog-api.js.map +1 -1
- package/dist/server/agent-server.js +127 -18
- package/dist/server/agent-server.js.map +1 -1
- package/dist/server/bin.cjs +127 -18
- package/dist/server/bin.cjs.map +1 -1
- package/dist/types.d.ts +1 -0
- package/package.json +1 -1
- package/src/adapters/codex/codex-agent.ts +64 -12
- package/src/adapters/codex/codex-client.ts +66 -6
- package/src/adapters/codex/session-state.ts +5 -1
- package/src/adapters/codex/spawn.ts +8 -0
- package/src/agent.ts +1 -0
- package/src/execution-mode.ts +37 -1
- package/src/types.ts +1 -0
package/dist/server/bin.cjs
CHANGED
|
@@ -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.
|
|
907
|
+
version: "2.3.172",
|
|
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: {
|
|
@@ -3006,6 +3006,26 @@ var CODE_EXECUTION_MODES = [
|
|
|
3006
3006
|
function getAvailableModes() {
|
|
3007
3007
|
return IS_ROOT ? availableModes.filter((m) => m.id !== "bypassPermissions") : availableModes;
|
|
3008
3008
|
}
|
|
3009
|
+
var CODEX_NATIVE_MODES = ["auto", "read-only", "full-access"];
|
|
3010
|
+
var codexModes = [
|
|
3011
|
+
{
|
|
3012
|
+
id: "read-only",
|
|
3013
|
+
name: "Read Only",
|
|
3014
|
+
description: "Read-only access, no file modifications"
|
|
3015
|
+
},
|
|
3016
|
+
{
|
|
3017
|
+
id: "auto",
|
|
3018
|
+
name: "Auto",
|
|
3019
|
+
description: "Standard behavior, prompts for dangerous operations"
|
|
3020
|
+
}
|
|
3021
|
+
];
|
|
3022
|
+
if (ALLOW_BYPASS) {
|
|
3023
|
+
codexModes.push({
|
|
3024
|
+
id: "full-access",
|
|
3025
|
+
name: "Full Access",
|
|
3026
|
+
description: "Auto-accept all permission requests"
|
|
3027
|
+
});
|
|
3028
|
+
}
|
|
3009
3029
|
|
|
3010
3030
|
// src/adapters/claude/tools.ts
|
|
3011
3031
|
var READ_TOOLS = /* @__PURE__ */ new Set(["Read", "NotebookRead"]);
|
|
@@ -5005,13 +5025,48 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
5005
5025
|
var import_sdk3 = require("@agentclientprotocol/sdk");
|
|
5006
5026
|
|
|
5007
5027
|
// src/adapters/codex/codex-client.ts
|
|
5028
|
+
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([
|
|
5032
|
+
"read",
|
|
5033
|
+
"edit",
|
|
5034
|
+
"delete",
|
|
5035
|
+
"move",
|
|
5036
|
+
"search",
|
|
5037
|
+
"execute",
|
|
5038
|
+
"think",
|
|
5039
|
+
"fetch",
|
|
5040
|
+
"switch_mode",
|
|
5041
|
+
"other"
|
|
5042
|
+
])
|
|
5043
|
+
};
|
|
5044
|
+
function shouldAutoApprove(mode, kind) {
|
|
5045
|
+
if (mode === "full-access") return true;
|
|
5046
|
+
if (!kind) return false;
|
|
5047
|
+
return AUTO_APPROVED_KINDS[mode]?.has(kind) ?? false;
|
|
5048
|
+
}
|
|
5008
5049
|
function createCodexClient(upstreamClient, logger, sessionState, callbacks) {
|
|
5009
5050
|
const terminalHandles = /* @__PURE__ */ new Map();
|
|
5010
5051
|
return {
|
|
5011
5052
|
async requestPermission(params) {
|
|
5012
|
-
|
|
5013
|
-
|
|
5014
|
-
|
|
5053
|
+
const kind = params.toolCall?.kind;
|
|
5054
|
+
if (shouldAutoApprove(sessionState.permissionMode, kind)) {
|
|
5055
|
+
logger.debug("Auto-approving permission", {
|
|
5056
|
+
mode: sessionState.permissionMode,
|
|
5057
|
+
kind,
|
|
5058
|
+
toolCallId: params.toolCall?.toolCallId
|
|
5059
|
+
});
|
|
5060
|
+
const allowOption = params.options?.find(
|
|
5061
|
+
(o) => o.kind === "allow_once" || o.kind === "allow_always"
|
|
5062
|
+
);
|
|
5063
|
+
return {
|
|
5064
|
+
outcome: {
|
|
5065
|
+
outcome: "selected",
|
|
5066
|
+
optionId: allowOption?.optionId ?? "allow"
|
|
5067
|
+
}
|
|
5068
|
+
};
|
|
5069
|
+
}
|
|
5015
5070
|
return upstreamClient.requestPermission(params);
|
|
5016
5071
|
},
|
|
5017
5072
|
async sessionUpdate(params) {
|
|
@@ -5021,6 +5076,22 @@ function createCodexClient(upstreamClient, logger, sessionState, callbacks) {
|
|
|
5021
5076
|
const size = update.size;
|
|
5022
5077
|
if (used !== void 0) sessionState.contextUsed = used;
|
|
5023
5078
|
if (size !== void 0) sessionState.contextSize = size;
|
|
5079
|
+
const inputTokens = update.inputTokens;
|
|
5080
|
+
const outputTokens = update.outputTokens;
|
|
5081
|
+
if (inputTokens !== void 0) {
|
|
5082
|
+
sessionState.accumulatedUsage.inputTokens += inputTokens;
|
|
5083
|
+
}
|
|
5084
|
+
if (outputTokens !== void 0) {
|
|
5085
|
+
sessionState.accumulatedUsage.outputTokens += outputTokens;
|
|
5086
|
+
}
|
|
5087
|
+
const cachedRead = update.cachedReadTokens;
|
|
5088
|
+
const cachedWrite = update.cachedWriteTokens;
|
|
5089
|
+
if (cachedRead !== void 0) {
|
|
5090
|
+
sessionState.accumulatedUsage.cachedReadTokens += cachedRead;
|
|
5091
|
+
}
|
|
5092
|
+
if (cachedWrite !== void 0) {
|
|
5093
|
+
sessionState.accumulatedUsage.cachedWriteTokens += cachedWrite;
|
|
5094
|
+
}
|
|
5024
5095
|
callbacks?.onUsageUpdate?.(update);
|
|
5025
5096
|
}
|
|
5026
5097
|
await upstreamClient.sessionUpdate(params);
|
|
@@ -5078,7 +5149,7 @@ function createSessionState(sessionId, cwd, opts) {
|
|
|
5078
5149
|
return {
|
|
5079
5150
|
sessionId,
|
|
5080
5151
|
cwd,
|
|
5081
|
-
modeId: opts?.modeId ?? "
|
|
5152
|
+
modeId: opts?.modeId ?? "auto",
|
|
5082
5153
|
modelId: opts?.modelId,
|
|
5083
5154
|
configOptions: [],
|
|
5084
5155
|
accumulatedUsage: {
|
|
@@ -5087,6 +5158,7 @@ function createSessionState(sessionId, cwd, opts) {
|
|
|
5087
5158
|
cachedReadTokens: 0,
|
|
5088
5159
|
cachedWriteTokens: 0
|
|
5089
5160
|
},
|
|
5161
|
+
permissionMode: opts?.permissionMode ?? "auto",
|
|
5090
5162
|
cancelled: false,
|
|
5091
5163
|
taskRunId: opts?.taskRunId,
|
|
5092
5164
|
taskId: opts?.taskId
|
|
@@ -5200,6 +5272,10 @@ function buildConfigArgs(options) {
|
|
|
5200
5272
|
if (options.model) {
|
|
5201
5273
|
args.push("-c", `model="${options.model}"`);
|
|
5202
5274
|
}
|
|
5275
|
+
if (options.instructions) {
|
|
5276
|
+
const escaped = options.instructions.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
|
|
5277
|
+
args.push("-c", `instructions="${escaped}"`);
|
|
5278
|
+
}
|
|
5203
5279
|
return args;
|
|
5204
5280
|
}
|
|
5205
5281
|
function findCodexBinary(options) {
|
|
@@ -5277,6 +5353,12 @@ function spawnCodexProcess(options) {
|
|
|
5277
5353
|
}
|
|
5278
5354
|
|
|
5279
5355
|
// src/adapters/codex/codex-agent.ts
|
|
5356
|
+
function toPermissionMode(mode) {
|
|
5357
|
+
if (mode && CODEX_NATIVE_MODES.includes(mode)) {
|
|
5358
|
+
return mode;
|
|
5359
|
+
}
|
|
5360
|
+
return "auto";
|
|
5361
|
+
}
|
|
5280
5362
|
var CodexAcpAgent = class extends BaseAcpAgent {
|
|
5281
5363
|
adapterName = "codex";
|
|
5282
5364
|
codexProcess;
|
|
@@ -5309,7 +5391,7 @@ var CodexAcpAgent = class extends BaseAcpAgent {
|
|
|
5309
5391
|
this.sessionState ?? {
|
|
5310
5392
|
sessionId: "",
|
|
5311
5393
|
cwd: "",
|
|
5312
|
-
modeId: "
|
|
5394
|
+
modeId: "auto",
|
|
5313
5395
|
configOptions: [],
|
|
5314
5396
|
accumulatedUsage: {
|
|
5315
5397
|
inputTokens: 0,
|
|
@@ -5317,6 +5399,7 @@ var CodexAcpAgent = class extends BaseAcpAgent {
|
|
|
5317
5399
|
cachedReadTokens: 0,
|
|
5318
5400
|
cachedWriteTokens: 0
|
|
5319
5401
|
},
|
|
5402
|
+
permissionMode: "auto",
|
|
5320
5403
|
cancelled: false
|
|
5321
5404
|
}
|
|
5322
5405
|
),
|
|
@@ -5355,7 +5438,8 @@ var CodexAcpAgent = class extends BaseAcpAgent {
|
|
|
5355
5438
|
taskRunId: meta?.taskRunId,
|
|
5356
5439
|
taskId: meta?.taskId ?? meta?.persistence?.taskId,
|
|
5357
5440
|
modeId: response.modes?.currentModeId ?? "default",
|
|
5358
|
-
modelId: response.models?.currentModelId
|
|
5441
|
+
modelId: response.models?.currentModelId,
|
|
5442
|
+
permissionMode: toPermissionMode(meta?.permissionMode)
|
|
5359
5443
|
});
|
|
5360
5444
|
this.sessionId = response.sessionId;
|
|
5361
5445
|
this.sessionState.configOptions = response.configOptions ?? [];
|
|
@@ -5426,17 +5510,37 @@ var CodexAcpAgent = class extends BaseAcpAgent {
|
|
|
5426
5510
|
resetUsage(this.sessionState);
|
|
5427
5511
|
}
|
|
5428
5512
|
const response = await this.codexConnection.prompt(params);
|
|
5429
|
-
if (this.sessionState
|
|
5430
|
-
|
|
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) {
|
|
5520
|
+
const { accumulatedUsage } = this.sessionState;
|
|
5521
|
+
await this.client.extNotification(POSTHOG_NOTIFICATIONS.TURN_COMPLETE, {
|
|
5431
5522
|
sessionId: params.sessionId,
|
|
5432
|
-
|
|
5433
|
-
|
|
5434
|
-
|
|
5435
|
-
|
|
5436
|
-
|
|
5437
|
-
|
|
5438
|
-
|
|
5523
|
+
stopReason: response.stopReason ?? "end_turn",
|
|
5524
|
+
usage: {
|
|
5525
|
+
inputTokens: accumulatedUsage.inputTokens,
|
|
5526
|
+
outputTokens: accumulatedUsage.outputTokens,
|
|
5527
|
+
cachedReadTokens: accumulatedUsage.cachedReadTokens,
|
|
5528
|
+
cachedWriteTokens: accumulatedUsage.cachedWriteTokens,
|
|
5529
|
+
totalTokens: accumulatedUsage.inputTokens + accumulatedUsage.outputTokens + accumulatedUsage.cachedReadTokens + accumulatedUsage.cachedWriteTokens
|
|
5530
|
+
}
|
|
5439
5531
|
});
|
|
5532
|
+
if (response.usage) {
|
|
5533
|
+
await this.client.extNotification("_posthog/usage_update", {
|
|
5534
|
+
sessionId: params.sessionId,
|
|
5535
|
+
used: {
|
|
5536
|
+
inputTokens: response.usage.inputTokens ?? 0,
|
|
5537
|
+
outputTokens: response.usage.outputTokens ?? 0,
|
|
5538
|
+
cachedReadTokens: response.usage.cachedReadTokens ?? 0,
|
|
5539
|
+
cachedWriteTokens: response.usage.cachedWriteTokens ?? 0
|
|
5540
|
+
},
|
|
5541
|
+
cost: null
|
|
5542
|
+
});
|
|
5543
|
+
}
|
|
5440
5544
|
}
|
|
5441
5545
|
return response;
|
|
5442
5546
|
}
|
|
@@ -5459,9 +5563,14 @@ var CodexAcpAgent = class extends BaseAcpAgent {
|
|
|
5459
5563
|
await this.codexConnection.cancel(params);
|
|
5460
5564
|
}
|
|
5461
5565
|
async setSessionMode(params) {
|
|
5462
|
-
const
|
|
5566
|
+
const permissionMode = toPermissionMode(params.modeId);
|
|
5567
|
+
const response = await this.codexConnection.setSessionMode({
|
|
5568
|
+
...params,
|
|
5569
|
+
modeId: permissionMode
|
|
5570
|
+
});
|
|
5463
5571
|
if (this.sessionState) {
|
|
5464
|
-
this.sessionState.modeId =
|
|
5572
|
+
this.sessionState.modeId = permissionMode;
|
|
5573
|
+
this.sessionState.permissionMode = permissionMode;
|
|
5465
5574
|
}
|
|
5466
5575
|
return response ?? {};
|
|
5467
5576
|
}
|