@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.
- package/dist/agent.js +101 -116
- package/dist/agent.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 +66 -81
- package/dist/server/agent-server.js.map +1 -1
- package/dist/server/bin.cjs +66 -81
- package/dist/server/bin.cjs.map +1 -1
- package/package.json +1 -1
- package/src/acp-extensions.ts +3 -0
- package/src/adapters/claude/claude-agent.ts +13 -9
- package/src/adapters/codex/codex-agent.ts +51 -74
- package/src/adapters/codex/codex-client.ts +8 -7
- package/src/adapters/codex/session-state.ts +5 -8
- package/src/adapters/codex/spawn.ts +2 -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.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(
|
|
4396
|
-
|
|
4397
|
-
|
|
4398
|
-
|
|
4399
|
-
|
|
4400
|
-
|
|
4401
|
-
|
|
4402
|
-
|
|
4403
|
-
|
|
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
|
-
|
|
5030
|
-
|
|
5031
|
-
|
|
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 === "
|
|
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 ?? "
|
|
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 ?? "
|
|
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
|
|
5357
|
-
if (mode &&
|
|
5360
|
+
function toCodeExecutionMode(mode) {
|
|
5361
|
+
if (mode && CODE_EXECUTION_MODES.includes(mode)) {
|
|
5358
5362
|
return mode;
|
|
5359
5363
|
}
|
|
5360
|
-
return "
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
5510
|
+
return this.listSessions(params);
|
|
5505
5511
|
}
|
|
5506
5512
|
async prompt(params) {
|
|
5507
|
-
|
|
5508
|
-
|
|
5509
|
-
|
|
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
|
|
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(
|
|
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
|
|
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:
|
|
5555
|
+
modeId: nativeMode
|
|
5570
5556
|
});
|
|
5571
|
-
|
|
5572
|
-
|
|
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 (
|
|
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();
|