@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
package/dist/server/bin.cjs
CHANGED
|
@@ -1175,7 +1175,7 @@ var import_uuid = require("uuid");
|
|
|
1175
1175
|
// package.json
|
|
1176
1176
|
var package_default = {
|
|
1177
1177
|
name: "@posthog/agent",
|
|
1178
|
-
version: "2.1.
|
|
1178
|
+
version: "2.1.22",
|
|
1179
1179
|
repository: "https://github.com/PostHog/twig",
|
|
1180
1180
|
description: "TypeScript agent framework wrapping Claude Agent SDK with Git-based task execution for PostHog",
|
|
1181
1181
|
exports: {
|
|
@@ -1247,11 +1247,11 @@ var package_default = {
|
|
|
1247
1247
|
},
|
|
1248
1248
|
devDependencies: {
|
|
1249
1249
|
"@changesets/cli": "^2.27.8",
|
|
1250
|
+
"@posthog/shared": "workspace:*",
|
|
1251
|
+
"@twig/git": "workspace:*",
|
|
1250
1252
|
"@types/bun": "latest",
|
|
1251
1253
|
"@types/tar": "^6.1.13",
|
|
1252
1254
|
minimatch: "^10.0.3",
|
|
1253
|
-
"@posthog/shared": "workspace:*",
|
|
1254
|
-
"@twig/git": "workspace:*",
|
|
1255
1255
|
msw: "^2.12.7",
|
|
1256
1256
|
tsup: "^8.5.1",
|
|
1257
1257
|
tsx: "^4.20.6",
|
|
@@ -1259,16 +1259,16 @@ var package_default = {
|
|
|
1259
1259
|
vitest: "^2.1.8"
|
|
1260
1260
|
},
|
|
1261
1261
|
dependencies: {
|
|
1262
|
+
"@agentclientprotocol/sdk": "^0.14.0",
|
|
1263
|
+
"@anthropic-ai/claude-agent-sdk": "0.2.42",
|
|
1264
|
+
"@anthropic-ai/sdk": "^0.71.0",
|
|
1265
|
+
"@hono/node-server": "^1.19.9",
|
|
1266
|
+
"@modelcontextprotocol/sdk": "^1.25.3",
|
|
1262
1267
|
"@opentelemetry/api-logs": "^0.208.0",
|
|
1263
1268
|
"@opentelemetry/exporter-logs-otlp-http": "^0.208.0",
|
|
1264
1269
|
"@opentelemetry/resources": "^2.0.0",
|
|
1265
1270
|
"@opentelemetry/sdk-logs": "^0.208.0",
|
|
1266
1271
|
"@opentelemetry/semantic-conventions": "^1.28.0",
|
|
1267
|
-
"@agentclientprotocol/sdk": "^0.14.0",
|
|
1268
|
-
"@anthropic-ai/claude-agent-sdk": "0.2.12",
|
|
1269
|
-
"@anthropic-ai/sdk": "^0.71.0",
|
|
1270
|
-
"@hono/node-server": "^1.19.9",
|
|
1271
|
-
"@modelcontextprotocol/sdk": "^1.25.3",
|
|
1272
1272
|
"@types/jsonwebtoken": "^9.0.10",
|
|
1273
1273
|
commander: "^14.0.2",
|
|
1274
1274
|
diff: "^8.0.2",
|
|
@@ -2234,19 +2234,9 @@ function streamEventToAcpNotifications(message, sessionId, toolUseCache, fileCon
|
|
|
2234
2234
|
}
|
|
2235
2235
|
}
|
|
2236
2236
|
async function handleSystemMessage(message, context) {
|
|
2237
|
-
const {
|
|
2237
|
+
const { sessionId, client, logger } = context;
|
|
2238
2238
|
switch (message.subtype) {
|
|
2239
2239
|
case "init":
|
|
2240
|
-
if (message.session_id && session && !session.sessionId) {
|
|
2241
|
-
session.sessionId = message.session_id;
|
|
2242
|
-
if (session.taskRunId) {
|
|
2243
|
-
await client.extNotification("_posthog/sdk_session", {
|
|
2244
|
-
taskRunId: session.taskRunId,
|
|
2245
|
-
sessionId: message.session_id,
|
|
2246
|
-
adapter: "claude"
|
|
2247
|
-
});
|
|
2248
|
-
}
|
|
2249
|
-
}
|
|
2250
2240
|
break;
|
|
2251
2241
|
case "compact_boundary":
|
|
2252
2242
|
await client.extNotification("_posthog/compact_boundary", {
|
|
@@ -3211,7 +3201,7 @@ function buildSessionOptions(params) {
|
|
|
3211
3201
|
),
|
|
3212
3202
|
...params.onProcessSpawned && {
|
|
3213
3203
|
spawnClaudeCodeProcess: buildSpawnWrapper(
|
|
3214
|
-
params.sessionId
|
|
3204
|
+
params.sessionId,
|
|
3215
3205
|
params.onProcessSpawned,
|
|
3216
3206
|
params.onProcessExited
|
|
3217
3207
|
)
|
|
@@ -3220,8 +3210,11 @@ function buildSessionOptions(params) {
|
|
|
3220
3210
|
if (process.env.CLAUDE_CODE_EXECUTABLE) {
|
|
3221
3211
|
options.pathToClaudeCodeExecutable = process.env.CLAUDE_CODE_EXECUTABLE;
|
|
3222
3212
|
}
|
|
3223
|
-
if (params.
|
|
3213
|
+
if (params.isResume) {
|
|
3224
3214
|
options.resume = params.sessionId;
|
|
3215
|
+
options.forkSession = false;
|
|
3216
|
+
} else {
|
|
3217
|
+
options.sessionId = params.sessionId;
|
|
3225
3218
|
}
|
|
3226
3219
|
if (params.additionalDirectories) {
|
|
3227
3220
|
options.additionalDirectories = params.additionalDirectories;
|
|
@@ -3298,7 +3291,7 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3298
3291
|
async newSession(params) {
|
|
3299
3292
|
this.checkAuthStatus();
|
|
3300
3293
|
const meta = params._meta;
|
|
3301
|
-
const
|
|
3294
|
+
const sessionId = (0, import_uuid.v7)();
|
|
3302
3295
|
const permissionMode = meta?.permissionMode && TWIG_EXECUTION_MODES.includes(meta.permissionMode) ? meta.permissionMode : "default";
|
|
3303
3296
|
const mcpServers = parseMcpServers(params);
|
|
3304
3297
|
await fetchMcpToolMetadata(mcpServers, this.logger);
|
|
@@ -3306,18 +3299,20 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3306
3299
|
cwd: params.cwd,
|
|
3307
3300
|
mcpServers,
|
|
3308
3301
|
permissionMode,
|
|
3309
|
-
canUseTool: this.createCanUseTool(
|
|
3302
|
+
canUseTool: this.createCanUseTool(sessionId),
|
|
3310
3303
|
logger: this.logger,
|
|
3311
3304
|
systemPrompt: buildSystemPrompt(meta?.systemPrompt),
|
|
3312
3305
|
userProvidedOptions: meta?.claudeCode?.options,
|
|
3313
|
-
|
|
3306
|
+
sessionId,
|
|
3307
|
+
isResume: false,
|
|
3308
|
+
onModeChange: this.createOnModeChange(sessionId),
|
|
3314
3309
|
onProcessSpawned: this.processCallbacks?.onProcessSpawned,
|
|
3315
3310
|
onProcessExited: this.processCallbacks?.onProcessExited
|
|
3316
3311
|
});
|
|
3317
3312
|
const input = new Pushable();
|
|
3318
3313
|
const q = (0, import_claude_agent_sdk.query)({ prompt: input, options });
|
|
3319
3314
|
const session = this.createSession(
|
|
3320
|
-
|
|
3315
|
+
sessionId,
|
|
3321
3316
|
q,
|
|
3322
3317
|
input,
|
|
3323
3318
|
permissionMode,
|
|
@@ -3325,19 +3320,23 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3325
3320
|
options.abortController
|
|
3326
3321
|
);
|
|
3327
3322
|
session.taskRunId = meta?.taskRunId;
|
|
3328
|
-
this.registerPersistence(
|
|
3329
|
-
|
|
3330
|
-
|
|
3331
|
-
|
|
3323
|
+
this.registerPersistence(sessionId, meta);
|
|
3324
|
+
if (meta?.taskRunId) {
|
|
3325
|
+
await this.client.extNotification("_posthog/sdk_session", {
|
|
3326
|
+
taskRunId: meta.taskRunId,
|
|
3327
|
+
sessionId,
|
|
3328
|
+
adapter: "claude"
|
|
3329
|
+
});
|
|
3330
|
+
}
|
|
3332
3331
|
const modelOptions = await this.getModelConfigOptions();
|
|
3333
3332
|
session.modelId = modelOptions.currentModelId;
|
|
3334
3333
|
await this.trySetModel(q, modelOptions.currentModelId);
|
|
3335
3334
|
this.sendAvailableCommandsUpdate(
|
|
3336
|
-
|
|
3335
|
+
sessionId,
|
|
3337
3336
|
await getAvailableSlashCommands(q)
|
|
3338
3337
|
);
|
|
3339
3338
|
return {
|
|
3340
|
-
sessionId
|
|
3339
|
+
sessionId,
|
|
3341
3340
|
configOptions: await this.buildConfigOptions(modelOptions)
|
|
3342
3341
|
};
|
|
3343
3342
|
}
|
|
@@ -3345,34 +3344,31 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3345
3344
|
return this.resumeSession(params);
|
|
3346
3345
|
}
|
|
3347
3346
|
async resumeSession(params) {
|
|
3348
|
-
const
|
|
3349
|
-
|
|
3347
|
+
const meta = params._meta;
|
|
3348
|
+
const sessionId = meta?.sessionId;
|
|
3349
|
+
if (!sessionId) {
|
|
3350
|
+
throw new Error("Cannot resume session without sessionId");
|
|
3351
|
+
}
|
|
3352
|
+
if (this.sessionId === sessionId) {
|
|
3350
3353
|
return {};
|
|
3351
3354
|
}
|
|
3352
|
-
const meta = params._meta;
|
|
3353
3355
|
const mcpServers = parseMcpServers(params);
|
|
3354
3356
|
await fetchMcpToolMetadata(mcpServers, this.logger);
|
|
3355
3357
|
const permissionMode = meta?.permissionMode && TWIG_EXECUTION_MODES.includes(meta.permissionMode) ? meta.permissionMode : "default";
|
|
3356
3358
|
const { query: q, session } = await this.initializeQuery({
|
|
3357
|
-
internalSessionId,
|
|
3358
3359
|
cwd: params.cwd,
|
|
3359
3360
|
permissionMode,
|
|
3360
3361
|
mcpServers,
|
|
3361
3362
|
systemPrompt: buildSystemPrompt(meta?.systemPrompt),
|
|
3362
3363
|
userProvidedOptions: meta?.claudeCode?.options,
|
|
3363
|
-
sessionId
|
|
3364
|
+
sessionId,
|
|
3365
|
+
isResume: true,
|
|
3364
3366
|
additionalDirectories: meta?.claudeCode?.options?.additionalDirectories
|
|
3365
3367
|
});
|
|
3366
3368
|
session.taskRunId = meta?.taskRunId;
|
|
3367
|
-
|
|
3368
|
-
session.sessionId = meta.sessionId;
|
|
3369
|
-
}
|
|
3370
|
-
this.registerPersistence(
|
|
3371
|
-
internalSessionId,
|
|
3372
|
-
meta
|
|
3373
|
-
);
|
|
3369
|
+
this.registerPersistence(sessionId, meta);
|
|
3374
3370
|
this.sendAvailableCommandsUpdate(
|
|
3375
|
-
|
|
3371
|
+
sessionId,
|
|
3376
3372
|
await getAvailableSlashCommands(q)
|
|
3377
3373
|
);
|
|
3378
3374
|
return {
|
|
@@ -3441,20 +3437,21 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3441
3437
|
cwd: config.cwd,
|
|
3442
3438
|
mcpServers: config.mcpServers,
|
|
3443
3439
|
permissionMode: config.permissionMode,
|
|
3444
|
-
canUseTool: this.createCanUseTool(config.
|
|
3440
|
+
canUseTool: this.createCanUseTool(config.sessionId),
|
|
3445
3441
|
logger: this.logger,
|
|
3446
3442
|
systemPrompt: config.systemPrompt,
|
|
3447
3443
|
userProvidedOptions: config.userProvidedOptions,
|
|
3448
3444
|
sessionId: config.sessionId,
|
|
3445
|
+
isResume: config.isResume,
|
|
3449
3446
|
additionalDirectories: config.additionalDirectories,
|
|
3450
|
-
onModeChange: this.createOnModeChange(config.
|
|
3447
|
+
onModeChange: this.createOnModeChange(config.sessionId),
|
|
3451
3448
|
onProcessSpawned: this.processCallbacks?.onProcessSpawned,
|
|
3452
3449
|
onProcessExited: this.processCallbacks?.onProcessExited
|
|
3453
3450
|
});
|
|
3454
3451
|
const q = (0, import_claude_agent_sdk.query)({ prompt: input, options });
|
|
3455
3452
|
const abortController = options.abortController;
|
|
3456
3453
|
const session = this.createSession(
|
|
3457
|
-
config.
|
|
3454
|
+
config.sessionId,
|
|
3458
3455
|
q,
|
|
3459
3456
|
input,
|
|
3460
3457
|
config.permissionMode,
|
|
@@ -3647,6 +3644,7 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3647
3644
|
}
|
|
3648
3645
|
case "tool_progress":
|
|
3649
3646
|
case "auth_status":
|
|
3647
|
+
case "tool_use_summary":
|
|
3650
3648
|
return null;
|
|
3651
3649
|
default:
|
|
3652
3650
|
unreachable(message, this.logger);
|