@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
|
Binary file
|
|
Binary file
|
package/dist/index.js
CHANGED
|
@@ -1174,7 +1174,7 @@ import { v7 as uuidv7 } from "uuid";
|
|
|
1174
1174
|
// package.json
|
|
1175
1175
|
var package_default = {
|
|
1176
1176
|
name: "@posthog/agent",
|
|
1177
|
-
version: "2.1.
|
|
1177
|
+
version: "2.1.22",
|
|
1178
1178
|
repository: "https://github.com/PostHog/twig",
|
|
1179
1179
|
description: "TypeScript agent framework wrapping Claude Agent SDK with Git-based task execution for PostHog",
|
|
1180
1180
|
exports: {
|
|
@@ -1246,11 +1246,11 @@ var package_default = {
|
|
|
1246
1246
|
},
|
|
1247
1247
|
devDependencies: {
|
|
1248
1248
|
"@changesets/cli": "^2.27.8",
|
|
1249
|
+
"@posthog/shared": "workspace:*",
|
|
1250
|
+
"@twig/git": "workspace:*",
|
|
1249
1251
|
"@types/bun": "latest",
|
|
1250
1252
|
"@types/tar": "^6.1.13",
|
|
1251
1253
|
minimatch: "^10.0.3",
|
|
1252
|
-
"@posthog/shared": "workspace:*",
|
|
1253
|
-
"@twig/git": "workspace:*",
|
|
1254
1254
|
msw: "^2.12.7",
|
|
1255
1255
|
tsup: "^8.5.1",
|
|
1256
1256
|
tsx: "^4.20.6",
|
|
@@ -1258,16 +1258,16 @@ var package_default = {
|
|
|
1258
1258
|
vitest: "^2.1.8"
|
|
1259
1259
|
},
|
|
1260
1260
|
dependencies: {
|
|
1261
|
+
"@agentclientprotocol/sdk": "^0.14.0",
|
|
1262
|
+
"@anthropic-ai/claude-agent-sdk": "0.2.42",
|
|
1263
|
+
"@anthropic-ai/sdk": "^0.71.0",
|
|
1264
|
+
"@hono/node-server": "^1.19.9",
|
|
1265
|
+
"@modelcontextprotocol/sdk": "^1.25.3",
|
|
1261
1266
|
"@opentelemetry/api-logs": "^0.208.0",
|
|
1262
1267
|
"@opentelemetry/exporter-logs-otlp-http": "^0.208.0",
|
|
1263
1268
|
"@opentelemetry/resources": "^2.0.0",
|
|
1264
1269
|
"@opentelemetry/sdk-logs": "^0.208.0",
|
|
1265
1270
|
"@opentelemetry/semantic-conventions": "^1.28.0",
|
|
1266
|
-
"@agentclientprotocol/sdk": "^0.14.0",
|
|
1267
|
-
"@anthropic-ai/claude-agent-sdk": "0.2.12",
|
|
1268
|
-
"@anthropic-ai/sdk": "^0.71.0",
|
|
1269
|
-
"@hono/node-server": "^1.19.9",
|
|
1270
|
-
"@modelcontextprotocol/sdk": "^1.25.3",
|
|
1271
1271
|
"@types/jsonwebtoken": "^9.0.10",
|
|
1272
1272
|
commander: "^14.0.2",
|
|
1273
1273
|
diff: "^8.0.2",
|
|
@@ -2268,19 +2268,9 @@ function streamEventToAcpNotifications(message, sessionId, toolUseCache, fileCon
|
|
|
2268
2268
|
}
|
|
2269
2269
|
}
|
|
2270
2270
|
async function handleSystemMessage(message, context) {
|
|
2271
|
-
const {
|
|
2271
|
+
const { sessionId, client, logger } = context;
|
|
2272
2272
|
switch (message.subtype) {
|
|
2273
2273
|
case "init":
|
|
2274
|
-
if (message.session_id && session && !session.sessionId) {
|
|
2275
|
-
session.sessionId = message.session_id;
|
|
2276
|
-
if (session.taskRunId) {
|
|
2277
|
-
await client.extNotification("_posthog/sdk_session", {
|
|
2278
|
-
taskRunId: session.taskRunId,
|
|
2279
|
-
sessionId: message.session_id,
|
|
2280
|
-
adapter: "claude"
|
|
2281
|
-
});
|
|
2282
|
-
}
|
|
2283
|
-
}
|
|
2284
2274
|
break;
|
|
2285
2275
|
case "compact_boundary":
|
|
2286
2276
|
await client.extNotification("_posthog/compact_boundary", {
|
|
@@ -3245,7 +3235,7 @@ function buildSessionOptions(params) {
|
|
|
3245
3235
|
),
|
|
3246
3236
|
...params.onProcessSpawned && {
|
|
3247
3237
|
spawnClaudeCodeProcess: buildSpawnWrapper(
|
|
3248
|
-
params.sessionId
|
|
3238
|
+
params.sessionId,
|
|
3249
3239
|
params.onProcessSpawned,
|
|
3250
3240
|
params.onProcessExited
|
|
3251
3241
|
)
|
|
@@ -3254,8 +3244,11 @@ function buildSessionOptions(params) {
|
|
|
3254
3244
|
if (process.env.CLAUDE_CODE_EXECUTABLE) {
|
|
3255
3245
|
options.pathToClaudeCodeExecutable = process.env.CLAUDE_CODE_EXECUTABLE;
|
|
3256
3246
|
}
|
|
3257
|
-
if (params.
|
|
3247
|
+
if (params.isResume) {
|
|
3258
3248
|
options.resume = params.sessionId;
|
|
3249
|
+
options.forkSession = false;
|
|
3250
|
+
} else {
|
|
3251
|
+
options.sessionId = params.sessionId;
|
|
3259
3252
|
}
|
|
3260
3253
|
if (params.additionalDirectories) {
|
|
3261
3254
|
options.additionalDirectories = params.additionalDirectories;
|
|
@@ -3332,7 +3325,7 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3332
3325
|
async newSession(params) {
|
|
3333
3326
|
this.checkAuthStatus();
|
|
3334
3327
|
const meta = params._meta;
|
|
3335
|
-
const
|
|
3328
|
+
const sessionId = uuidv7();
|
|
3336
3329
|
const permissionMode = meta?.permissionMode && TWIG_EXECUTION_MODES.includes(meta.permissionMode) ? meta.permissionMode : "default";
|
|
3337
3330
|
const mcpServers = parseMcpServers(params);
|
|
3338
3331
|
await fetchMcpToolMetadata(mcpServers, this.logger);
|
|
@@ -3340,18 +3333,20 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3340
3333
|
cwd: params.cwd,
|
|
3341
3334
|
mcpServers,
|
|
3342
3335
|
permissionMode,
|
|
3343
|
-
canUseTool: this.createCanUseTool(
|
|
3336
|
+
canUseTool: this.createCanUseTool(sessionId),
|
|
3344
3337
|
logger: this.logger,
|
|
3345
3338
|
systemPrompt: buildSystemPrompt(meta?.systemPrompt),
|
|
3346
3339
|
userProvidedOptions: meta?.claudeCode?.options,
|
|
3347
|
-
|
|
3340
|
+
sessionId,
|
|
3341
|
+
isResume: false,
|
|
3342
|
+
onModeChange: this.createOnModeChange(sessionId),
|
|
3348
3343
|
onProcessSpawned: this.processCallbacks?.onProcessSpawned,
|
|
3349
3344
|
onProcessExited: this.processCallbacks?.onProcessExited
|
|
3350
3345
|
});
|
|
3351
3346
|
const input = new Pushable();
|
|
3352
3347
|
const q = query({ prompt: input, options });
|
|
3353
3348
|
const session = this.createSession(
|
|
3354
|
-
|
|
3349
|
+
sessionId,
|
|
3355
3350
|
q,
|
|
3356
3351
|
input,
|
|
3357
3352
|
permissionMode,
|
|
@@ -3359,19 +3354,23 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3359
3354
|
options.abortController
|
|
3360
3355
|
);
|
|
3361
3356
|
session.taskRunId = meta?.taskRunId;
|
|
3362
|
-
this.registerPersistence(
|
|
3363
|
-
|
|
3364
|
-
|
|
3365
|
-
|
|
3357
|
+
this.registerPersistence(sessionId, meta);
|
|
3358
|
+
if (meta?.taskRunId) {
|
|
3359
|
+
await this.client.extNotification("_posthog/sdk_session", {
|
|
3360
|
+
taskRunId: meta.taskRunId,
|
|
3361
|
+
sessionId,
|
|
3362
|
+
adapter: "claude"
|
|
3363
|
+
});
|
|
3364
|
+
}
|
|
3366
3365
|
const modelOptions = await this.getModelConfigOptions();
|
|
3367
3366
|
session.modelId = modelOptions.currentModelId;
|
|
3368
3367
|
await this.trySetModel(q, modelOptions.currentModelId);
|
|
3369
3368
|
this.sendAvailableCommandsUpdate(
|
|
3370
|
-
|
|
3369
|
+
sessionId,
|
|
3371
3370
|
await getAvailableSlashCommands(q)
|
|
3372
3371
|
);
|
|
3373
3372
|
return {
|
|
3374
|
-
sessionId
|
|
3373
|
+
sessionId,
|
|
3375
3374
|
configOptions: await this.buildConfigOptions(modelOptions)
|
|
3376
3375
|
};
|
|
3377
3376
|
}
|
|
@@ -3379,34 +3378,31 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3379
3378
|
return this.resumeSession(params);
|
|
3380
3379
|
}
|
|
3381
3380
|
async resumeSession(params) {
|
|
3382
|
-
const
|
|
3383
|
-
|
|
3381
|
+
const meta = params._meta;
|
|
3382
|
+
const sessionId = meta?.sessionId;
|
|
3383
|
+
if (!sessionId) {
|
|
3384
|
+
throw new Error("Cannot resume session without sessionId");
|
|
3385
|
+
}
|
|
3386
|
+
if (this.sessionId === sessionId) {
|
|
3384
3387
|
return {};
|
|
3385
3388
|
}
|
|
3386
|
-
const meta = params._meta;
|
|
3387
3389
|
const mcpServers = parseMcpServers(params);
|
|
3388
3390
|
await fetchMcpToolMetadata(mcpServers, this.logger);
|
|
3389
3391
|
const permissionMode = meta?.permissionMode && TWIG_EXECUTION_MODES.includes(meta.permissionMode) ? meta.permissionMode : "default";
|
|
3390
3392
|
const { query: q, session } = await this.initializeQuery({
|
|
3391
|
-
internalSessionId,
|
|
3392
3393
|
cwd: params.cwd,
|
|
3393
3394
|
permissionMode,
|
|
3394
3395
|
mcpServers,
|
|
3395
3396
|
systemPrompt: buildSystemPrompt(meta?.systemPrompt),
|
|
3396
3397
|
userProvidedOptions: meta?.claudeCode?.options,
|
|
3397
|
-
sessionId
|
|
3398
|
+
sessionId,
|
|
3399
|
+
isResume: true,
|
|
3398
3400
|
additionalDirectories: meta?.claudeCode?.options?.additionalDirectories
|
|
3399
3401
|
});
|
|
3400
3402
|
session.taskRunId = meta?.taskRunId;
|
|
3401
|
-
|
|
3402
|
-
session.sessionId = meta.sessionId;
|
|
3403
|
-
}
|
|
3404
|
-
this.registerPersistence(
|
|
3405
|
-
internalSessionId,
|
|
3406
|
-
meta
|
|
3407
|
-
);
|
|
3403
|
+
this.registerPersistence(sessionId, meta);
|
|
3408
3404
|
this.sendAvailableCommandsUpdate(
|
|
3409
|
-
|
|
3405
|
+
sessionId,
|
|
3410
3406
|
await getAvailableSlashCommands(q)
|
|
3411
3407
|
);
|
|
3412
3408
|
return {
|
|
@@ -3475,20 +3471,21 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3475
3471
|
cwd: config.cwd,
|
|
3476
3472
|
mcpServers: config.mcpServers,
|
|
3477
3473
|
permissionMode: config.permissionMode,
|
|
3478
|
-
canUseTool: this.createCanUseTool(config.
|
|
3474
|
+
canUseTool: this.createCanUseTool(config.sessionId),
|
|
3479
3475
|
logger: this.logger,
|
|
3480
3476
|
systemPrompt: config.systemPrompt,
|
|
3481
3477
|
userProvidedOptions: config.userProvidedOptions,
|
|
3482
3478
|
sessionId: config.sessionId,
|
|
3479
|
+
isResume: config.isResume,
|
|
3483
3480
|
additionalDirectories: config.additionalDirectories,
|
|
3484
|
-
onModeChange: this.createOnModeChange(config.
|
|
3481
|
+
onModeChange: this.createOnModeChange(config.sessionId),
|
|
3485
3482
|
onProcessSpawned: this.processCallbacks?.onProcessSpawned,
|
|
3486
3483
|
onProcessExited: this.processCallbacks?.onProcessExited
|
|
3487
3484
|
});
|
|
3488
3485
|
const q = query({ prompt: input, options });
|
|
3489
3486
|
const abortController = options.abortController;
|
|
3490
3487
|
const session = this.createSession(
|
|
3491
|
-
config.
|
|
3488
|
+
config.sessionId,
|
|
3492
3489
|
q,
|
|
3493
3490
|
input,
|
|
3494
3491
|
config.permissionMode,
|
|
@@ -3681,6 +3678,7 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3681
3678
|
}
|
|
3682
3679
|
case "tool_progress":
|
|
3683
3680
|
case "auth_status":
|
|
3681
|
+
case "tool_use_summary":
|
|
3684
3682
|
return null;
|
|
3685
3683
|
default:
|
|
3686
3684
|
unreachable(message, this.logger);
|