@posthog/agent 2.1.17 → 2.1.22
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 +45 -47
- package/dist/agent.js.map +1 -1
- package/dist/claude-cli/cli.js +5349 -3347
- package/dist/claude-cli/vendor/ripgrep/arm64-win32/rg.exe +0 -0
- package/dist/claude-cli/vendor/ripgrep/arm64-win32/ripgrep.node +0 -0
- package/dist/index.js +45 -47
- package/dist/index.js.map +1 -1
- package/dist/server/agent-server.js +45 -47
- package/dist/server/agent-server.js.map +1 -1
- package/dist/server/bin.cjs +45 -47
- package/dist/server/bin.cjs.map +1 -1
- package/package.json +6 -6
- package/src/adapters/claude/claude-agent.ts +35 -28
- package/src/adapters/claude/conversion/sdk-to-acp.ts +1 -11
- package/src/adapters/claude/session/options.ts +7 -3
- package/src/adapters/claude/types.ts +0 -1
- package/src/test/mocks/claude-sdk.ts +7 -0
|
@@ -1183,7 +1183,7 @@ import { v7 as uuidv7 } from "uuid";
|
|
|
1183
1183
|
// package.json
|
|
1184
1184
|
var package_default = {
|
|
1185
1185
|
name: "@posthog/agent",
|
|
1186
|
-
version: "2.1.
|
|
1186
|
+
version: "2.1.22",
|
|
1187
1187
|
repository: "https://github.com/PostHog/twig",
|
|
1188
1188
|
description: "TypeScript agent framework wrapping Claude Agent SDK with Git-based task execution for PostHog",
|
|
1189
1189
|
exports: {
|
|
@@ -1255,11 +1255,11 @@ var package_default = {
|
|
|
1255
1255
|
},
|
|
1256
1256
|
devDependencies: {
|
|
1257
1257
|
"@changesets/cli": "^2.27.8",
|
|
1258
|
+
"@posthog/shared": "workspace:*",
|
|
1259
|
+
"@twig/git": "workspace:*",
|
|
1258
1260
|
"@types/bun": "latest",
|
|
1259
1261
|
"@types/tar": "^6.1.13",
|
|
1260
1262
|
minimatch: "^10.0.3",
|
|
1261
|
-
"@posthog/shared": "workspace:*",
|
|
1262
|
-
"@twig/git": "workspace:*",
|
|
1263
1263
|
msw: "^2.12.7",
|
|
1264
1264
|
tsup: "^8.5.1",
|
|
1265
1265
|
tsx: "^4.20.6",
|
|
@@ -1267,16 +1267,16 @@ var package_default = {
|
|
|
1267
1267
|
vitest: "^2.1.8"
|
|
1268
1268
|
},
|
|
1269
1269
|
dependencies: {
|
|
1270
|
+
"@agentclientprotocol/sdk": "^0.14.0",
|
|
1271
|
+
"@anthropic-ai/claude-agent-sdk": "0.2.42",
|
|
1272
|
+
"@anthropic-ai/sdk": "^0.71.0",
|
|
1273
|
+
"@hono/node-server": "^1.19.9",
|
|
1274
|
+
"@modelcontextprotocol/sdk": "^1.25.3",
|
|
1270
1275
|
"@opentelemetry/api-logs": "^0.208.0",
|
|
1271
1276
|
"@opentelemetry/exporter-logs-otlp-http": "^0.208.0",
|
|
1272
1277
|
"@opentelemetry/resources": "^2.0.0",
|
|
1273
1278
|
"@opentelemetry/sdk-logs": "^0.208.0",
|
|
1274
1279
|
"@opentelemetry/semantic-conventions": "^1.28.0",
|
|
1275
|
-
"@agentclientprotocol/sdk": "^0.14.0",
|
|
1276
|
-
"@anthropic-ai/claude-agent-sdk": "0.2.12",
|
|
1277
|
-
"@anthropic-ai/sdk": "^0.71.0",
|
|
1278
|
-
"@hono/node-server": "^1.19.9",
|
|
1279
|
-
"@modelcontextprotocol/sdk": "^1.25.3",
|
|
1280
1280
|
"@types/jsonwebtoken": "^9.0.10",
|
|
1281
1281
|
commander: "^14.0.2",
|
|
1282
1282
|
diff: "^8.0.2",
|
|
@@ -2242,19 +2242,9 @@ function streamEventToAcpNotifications(message, sessionId, toolUseCache, fileCon
|
|
|
2242
2242
|
}
|
|
2243
2243
|
}
|
|
2244
2244
|
async function handleSystemMessage(message, context) {
|
|
2245
|
-
const {
|
|
2245
|
+
const { sessionId, client, logger } = context;
|
|
2246
2246
|
switch (message.subtype) {
|
|
2247
2247
|
case "init":
|
|
2248
|
-
if (message.session_id && session && !session.sessionId) {
|
|
2249
|
-
session.sessionId = message.session_id;
|
|
2250
|
-
if (session.taskRunId) {
|
|
2251
|
-
await client.extNotification("_posthog/sdk_session", {
|
|
2252
|
-
taskRunId: session.taskRunId,
|
|
2253
|
-
sessionId: message.session_id,
|
|
2254
|
-
adapter: "claude"
|
|
2255
|
-
});
|
|
2256
|
-
}
|
|
2257
|
-
}
|
|
2258
2248
|
break;
|
|
2259
2249
|
case "compact_boundary":
|
|
2260
2250
|
await client.extNotification("_posthog/compact_boundary", {
|
|
@@ -3219,7 +3209,7 @@ function buildSessionOptions(params) {
|
|
|
3219
3209
|
),
|
|
3220
3210
|
...params.onProcessSpawned && {
|
|
3221
3211
|
spawnClaudeCodeProcess: buildSpawnWrapper(
|
|
3222
|
-
params.sessionId
|
|
3212
|
+
params.sessionId,
|
|
3223
3213
|
params.onProcessSpawned,
|
|
3224
3214
|
params.onProcessExited
|
|
3225
3215
|
)
|
|
@@ -3228,8 +3218,11 @@ function buildSessionOptions(params) {
|
|
|
3228
3218
|
if (process.env.CLAUDE_CODE_EXECUTABLE) {
|
|
3229
3219
|
options.pathToClaudeCodeExecutable = process.env.CLAUDE_CODE_EXECUTABLE;
|
|
3230
3220
|
}
|
|
3231
|
-
if (params.
|
|
3221
|
+
if (params.isResume) {
|
|
3232
3222
|
options.resume = params.sessionId;
|
|
3223
|
+
options.forkSession = false;
|
|
3224
|
+
} else {
|
|
3225
|
+
options.sessionId = params.sessionId;
|
|
3233
3226
|
}
|
|
3234
3227
|
if (params.additionalDirectories) {
|
|
3235
3228
|
options.additionalDirectories = params.additionalDirectories;
|
|
@@ -3306,7 +3299,7 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3306
3299
|
async newSession(params) {
|
|
3307
3300
|
this.checkAuthStatus();
|
|
3308
3301
|
const meta = params._meta;
|
|
3309
|
-
const
|
|
3302
|
+
const sessionId = uuidv7();
|
|
3310
3303
|
const permissionMode = meta?.permissionMode && TWIG_EXECUTION_MODES.includes(meta.permissionMode) ? meta.permissionMode : "default";
|
|
3311
3304
|
const mcpServers = parseMcpServers(params);
|
|
3312
3305
|
await fetchMcpToolMetadata(mcpServers, this.logger);
|
|
@@ -3314,18 +3307,20 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3314
3307
|
cwd: params.cwd,
|
|
3315
3308
|
mcpServers,
|
|
3316
3309
|
permissionMode,
|
|
3317
|
-
canUseTool: this.createCanUseTool(
|
|
3310
|
+
canUseTool: this.createCanUseTool(sessionId),
|
|
3318
3311
|
logger: this.logger,
|
|
3319
3312
|
systemPrompt: buildSystemPrompt(meta?.systemPrompt),
|
|
3320
3313
|
userProvidedOptions: meta?.claudeCode?.options,
|
|
3321
|
-
|
|
3314
|
+
sessionId,
|
|
3315
|
+
isResume: false,
|
|
3316
|
+
onModeChange: this.createOnModeChange(sessionId),
|
|
3322
3317
|
onProcessSpawned: this.processCallbacks?.onProcessSpawned,
|
|
3323
3318
|
onProcessExited: this.processCallbacks?.onProcessExited
|
|
3324
3319
|
});
|
|
3325
3320
|
const input = new Pushable();
|
|
3326
3321
|
const q = query({ prompt: input, options });
|
|
3327
3322
|
const session = this.createSession(
|
|
3328
|
-
|
|
3323
|
+
sessionId,
|
|
3329
3324
|
q,
|
|
3330
3325
|
input,
|
|
3331
3326
|
permissionMode,
|
|
@@ -3333,19 +3328,23 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3333
3328
|
options.abortController
|
|
3334
3329
|
);
|
|
3335
3330
|
session.taskRunId = meta?.taskRunId;
|
|
3336
|
-
this.registerPersistence(
|
|
3337
|
-
|
|
3338
|
-
|
|
3339
|
-
|
|
3331
|
+
this.registerPersistence(sessionId, meta);
|
|
3332
|
+
if (meta?.taskRunId) {
|
|
3333
|
+
await this.client.extNotification("_posthog/sdk_session", {
|
|
3334
|
+
taskRunId: meta.taskRunId,
|
|
3335
|
+
sessionId,
|
|
3336
|
+
adapter: "claude"
|
|
3337
|
+
});
|
|
3338
|
+
}
|
|
3340
3339
|
const modelOptions = await this.getModelConfigOptions();
|
|
3341
3340
|
session.modelId = modelOptions.currentModelId;
|
|
3342
3341
|
await this.trySetModel(q, modelOptions.currentModelId);
|
|
3343
3342
|
this.sendAvailableCommandsUpdate(
|
|
3344
|
-
|
|
3343
|
+
sessionId,
|
|
3345
3344
|
await getAvailableSlashCommands(q)
|
|
3346
3345
|
);
|
|
3347
3346
|
return {
|
|
3348
|
-
sessionId
|
|
3347
|
+
sessionId,
|
|
3349
3348
|
configOptions: await this.buildConfigOptions(modelOptions)
|
|
3350
3349
|
};
|
|
3351
3350
|
}
|
|
@@ -3353,34 +3352,31 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3353
3352
|
return this.resumeSession(params);
|
|
3354
3353
|
}
|
|
3355
3354
|
async resumeSession(params) {
|
|
3356
|
-
const
|
|
3357
|
-
|
|
3355
|
+
const meta = params._meta;
|
|
3356
|
+
const sessionId = meta?.sessionId;
|
|
3357
|
+
if (!sessionId) {
|
|
3358
|
+
throw new Error("Cannot resume session without sessionId");
|
|
3359
|
+
}
|
|
3360
|
+
if (this.sessionId === sessionId) {
|
|
3358
3361
|
return {};
|
|
3359
3362
|
}
|
|
3360
|
-
const meta = params._meta;
|
|
3361
3363
|
const mcpServers = parseMcpServers(params);
|
|
3362
3364
|
await fetchMcpToolMetadata(mcpServers, this.logger);
|
|
3363
3365
|
const permissionMode = meta?.permissionMode && TWIG_EXECUTION_MODES.includes(meta.permissionMode) ? meta.permissionMode : "default";
|
|
3364
3366
|
const { query: q, session } = await this.initializeQuery({
|
|
3365
|
-
internalSessionId,
|
|
3366
3367
|
cwd: params.cwd,
|
|
3367
3368
|
permissionMode,
|
|
3368
3369
|
mcpServers,
|
|
3369
3370
|
systemPrompt: buildSystemPrompt(meta?.systemPrompt),
|
|
3370
3371
|
userProvidedOptions: meta?.claudeCode?.options,
|
|
3371
|
-
sessionId
|
|
3372
|
+
sessionId,
|
|
3373
|
+
isResume: true,
|
|
3372
3374
|
additionalDirectories: meta?.claudeCode?.options?.additionalDirectories
|
|
3373
3375
|
});
|
|
3374
3376
|
session.taskRunId = meta?.taskRunId;
|
|
3375
|
-
|
|
3376
|
-
session.sessionId = meta.sessionId;
|
|
3377
|
-
}
|
|
3378
|
-
this.registerPersistence(
|
|
3379
|
-
internalSessionId,
|
|
3380
|
-
meta
|
|
3381
|
-
);
|
|
3377
|
+
this.registerPersistence(sessionId, meta);
|
|
3382
3378
|
this.sendAvailableCommandsUpdate(
|
|
3383
|
-
|
|
3379
|
+
sessionId,
|
|
3384
3380
|
await getAvailableSlashCommands(q)
|
|
3385
3381
|
);
|
|
3386
3382
|
return {
|
|
@@ -3449,20 +3445,21 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3449
3445
|
cwd: config.cwd,
|
|
3450
3446
|
mcpServers: config.mcpServers,
|
|
3451
3447
|
permissionMode: config.permissionMode,
|
|
3452
|
-
canUseTool: this.createCanUseTool(config.
|
|
3448
|
+
canUseTool: this.createCanUseTool(config.sessionId),
|
|
3453
3449
|
logger: this.logger,
|
|
3454
3450
|
systemPrompt: config.systemPrompt,
|
|
3455
3451
|
userProvidedOptions: config.userProvidedOptions,
|
|
3456
3452
|
sessionId: config.sessionId,
|
|
3453
|
+
isResume: config.isResume,
|
|
3457
3454
|
additionalDirectories: config.additionalDirectories,
|
|
3458
|
-
onModeChange: this.createOnModeChange(config.
|
|
3455
|
+
onModeChange: this.createOnModeChange(config.sessionId),
|
|
3459
3456
|
onProcessSpawned: this.processCallbacks?.onProcessSpawned,
|
|
3460
3457
|
onProcessExited: this.processCallbacks?.onProcessExited
|
|
3461
3458
|
});
|
|
3462
3459
|
const q = query({ prompt: input, options });
|
|
3463
3460
|
const abortController = options.abortController;
|
|
3464
3461
|
const session = this.createSession(
|
|
3465
|
-
config.
|
|
3462
|
+
config.sessionId,
|
|
3466
3463
|
q,
|
|
3467
3464
|
input,
|
|
3468
3465
|
config.permissionMode,
|
|
@@ -3655,6 +3652,7 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3655
3652
|
}
|
|
3656
3653
|
case "tool_progress":
|
|
3657
3654
|
case "auth_status":
|
|
3655
|
+
case "tool_use_summary":
|
|
3658
3656
|
return null;
|
|
3659
3657
|
default:
|
|
3660
3658
|
unreachable(message, this.logger);
|