@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/agent.js
CHANGED
|
@@ -276,7 +276,7 @@ import { v7 as uuidv7 } from "uuid";
|
|
|
276
276
|
// package.json
|
|
277
277
|
var package_default = {
|
|
278
278
|
name: "@posthog/agent",
|
|
279
|
-
version: "2.1.
|
|
279
|
+
version: "2.1.22",
|
|
280
280
|
repository: "https://github.com/PostHog/twig",
|
|
281
281
|
description: "TypeScript agent framework wrapping Claude Agent SDK with Git-based task execution for PostHog",
|
|
282
282
|
exports: {
|
|
@@ -348,11 +348,11 @@ var package_default = {
|
|
|
348
348
|
},
|
|
349
349
|
devDependencies: {
|
|
350
350
|
"@changesets/cli": "^2.27.8",
|
|
351
|
+
"@posthog/shared": "workspace:*",
|
|
352
|
+
"@twig/git": "workspace:*",
|
|
351
353
|
"@types/bun": "latest",
|
|
352
354
|
"@types/tar": "^6.1.13",
|
|
353
355
|
minimatch: "^10.0.3",
|
|
354
|
-
"@posthog/shared": "workspace:*",
|
|
355
|
-
"@twig/git": "workspace:*",
|
|
356
356
|
msw: "^2.12.7",
|
|
357
357
|
tsup: "^8.5.1",
|
|
358
358
|
tsx: "^4.20.6",
|
|
@@ -360,16 +360,16 @@ var package_default = {
|
|
|
360
360
|
vitest: "^2.1.8"
|
|
361
361
|
},
|
|
362
362
|
dependencies: {
|
|
363
|
+
"@agentclientprotocol/sdk": "^0.14.0",
|
|
364
|
+
"@anthropic-ai/claude-agent-sdk": "0.2.42",
|
|
365
|
+
"@anthropic-ai/sdk": "^0.71.0",
|
|
366
|
+
"@hono/node-server": "^1.19.9",
|
|
367
|
+
"@modelcontextprotocol/sdk": "^1.25.3",
|
|
363
368
|
"@opentelemetry/api-logs": "^0.208.0",
|
|
364
369
|
"@opentelemetry/exporter-logs-otlp-http": "^0.208.0",
|
|
365
370
|
"@opentelemetry/resources": "^2.0.0",
|
|
366
371
|
"@opentelemetry/sdk-logs": "^0.208.0",
|
|
367
372
|
"@opentelemetry/semantic-conventions": "^1.28.0",
|
|
368
|
-
"@agentclientprotocol/sdk": "^0.14.0",
|
|
369
|
-
"@anthropic-ai/claude-agent-sdk": "0.2.12",
|
|
370
|
-
"@anthropic-ai/sdk": "^0.71.0",
|
|
371
|
-
"@hono/node-server": "^1.19.9",
|
|
372
|
-
"@modelcontextprotocol/sdk": "^1.25.3",
|
|
373
373
|
"@types/jsonwebtoken": "^9.0.10",
|
|
374
374
|
commander: "^14.0.2",
|
|
375
375
|
diff: "^8.0.2",
|
|
@@ -1362,19 +1362,9 @@ function streamEventToAcpNotifications(message, sessionId, toolUseCache, fileCon
|
|
|
1362
1362
|
}
|
|
1363
1363
|
}
|
|
1364
1364
|
async function handleSystemMessage(message, context) {
|
|
1365
|
-
const {
|
|
1365
|
+
const { sessionId, client, logger } = context;
|
|
1366
1366
|
switch (message.subtype) {
|
|
1367
1367
|
case "init":
|
|
1368
|
-
if (message.session_id && session && !session.sessionId) {
|
|
1369
|
-
session.sessionId = message.session_id;
|
|
1370
|
-
if (session.taskRunId) {
|
|
1371
|
-
await client.extNotification("_posthog/sdk_session", {
|
|
1372
|
-
taskRunId: session.taskRunId,
|
|
1373
|
-
sessionId: message.session_id,
|
|
1374
|
-
adapter: "claude"
|
|
1375
|
-
});
|
|
1376
|
-
}
|
|
1377
|
-
}
|
|
1378
1368
|
break;
|
|
1379
1369
|
case "compact_boundary":
|
|
1380
1370
|
await client.extNotification("_posthog/compact_boundary", {
|
|
@@ -2339,7 +2329,7 @@ function buildSessionOptions(params) {
|
|
|
2339
2329
|
),
|
|
2340
2330
|
...params.onProcessSpawned && {
|
|
2341
2331
|
spawnClaudeCodeProcess: buildSpawnWrapper(
|
|
2342
|
-
params.sessionId
|
|
2332
|
+
params.sessionId,
|
|
2343
2333
|
params.onProcessSpawned,
|
|
2344
2334
|
params.onProcessExited
|
|
2345
2335
|
)
|
|
@@ -2348,8 +2338,11 @@ function buildSessionOptions(params) {
|
|
|
2348
2338
|
if (process.env.CLAUDE_CODE_EXECUTABLE) {
|
|
2349
2339
|
options.pathToClaudeCodeExecutable = process.env.CLAUDE_CODE_EXECUTABLE;
|
|
2350
2340
|
}
|
|
2351
|
-
if (params.
|
|
2341
|
+
if (params.isResume) {
|
|
2352
2342
|
options.resume = params.sessionId;
|
|
2343
|
+
options.forkSession = false;
|
|
2344
|
+
} else {
|
|
2345
|
+
options.sessionId = params.sessionId;
|
|
2353
2346
|
}
|
|
2354
2347
|
if (params.additionalDirectories) {
|
|
2355
2348
|
options.additionalDirectories = params.additionalDirectories;
|
|
@@ -2426,7 +2419,7 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
2426
2419
|
async newSession(params) {
|
|
2427
2420
|
this.checkAuthStatus();
|
|
2428
2421
|
const meta = params._meta;
|
|
2429
|
-
const
|
|
2422
|
+
const sessionId = uuidv7();
|
|
2430
2423
|
const permissionMode = meta?.permissionMode && TWIG_EXECUTION_MODES.includes(meta.permissionMode) ? meta.permissionMode : "default";
|
|
2431
2424
|
const mcpServers = parseMcpServers(params);
|
|
2432
2425
|
await fetchMcpToolMetadata(mcpServers, this.logger);
|
|
@@ -2434,18 +2427,20 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
2434
2427
|
cwd: params.cwd,
|
|
2435
2428
|
mcpServers,
|
|
2436
2429
|
permissionMode,
|
|
2437
|
-
canUseTool: this.createCanUseTool(
|
|
2430
|
+
canUseTool: this.createCanUseTool(sessionId),
|
|
2438
2431
|
logger: this.logger,
|
|
2439
2432
|
systemPrompt: buildSystemPrompt(meta?.systemPrompt),
|
|
2440
2433
|
userProvidedOptions: meta?.claudeCode?.options,
|
|
2441
|
-
|
|
2434
|
+
sessionId,
|
|
2435
|
+
isResume: false,
|
|
2436
|
+
onModeChange: this.createOnModeChange(sessionId),
|
|
2442
2437
|
onProcessSpawned: this.processCallbacks?.onProcessSpawned,
|
|
2443
2438
|
onProcessExited: this.processCallbacks?.onProcessExited
|
|
2444
2439
|
});
|
|
2445
2440
|
const input = new Pushable();
|
|
2446
2441
|
const q = query({ prompt: input, options });
|
|
2447
2442
|
const session = this.createSession(
|
|
2448
|
-
|
|
2443
|
+
sessionId,
|
|
2449
2444
|
q,
|
|
2450
2445
|
input,
|
|
2451
2446
|
permissionMode,
|
|
@@ -2453,19 +2448,23 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
2453
2448
|
options.abortController
|
|
2454
2449
|
);
|
|
2455
2450
|
session.taskRunId = meta?.taskRunId;
|
|
2456
|
-
this.registerPersistence(
|
|
2457
|
-
|
|
2458
|
-
|
|
2459
|
-
|
|
2451
|
+
this.registerPersistence(sessionId, meta);
|
|
2452
|
+
if (meta?.taskRunId) {
|
|
2453
|
+
await this.client.extNotification("_posthog/sdk_session", {
|
|
2454
|
+
taskRunId: meta.taskRunId,
|
|
2455
|
+
sessionId,
|
|
2456
|
+
adapter: "claude"
|
|
2457
|
+
});
|
|
2458
|
+
}
|
|
2460
2459
|
const modelOptions = await this.getModelConfigOptions();
|
|
2461
2460
|
session.modelId = modelOptions.currentModelId;
|
|
2462
2461
|
await this.trySetModel(q, modelOptions.currentModelId);
|
|
2463
2462
|
this.sendAvailableCommandsUpdate(
|
|
2464
|
-
|
|
2463
|
+
sessionId,
|
|
2465
2464
|
await getAvailableSlashCommands(q)
|
|
2466
2465
|
);
|
|
2467
2466
|
return {
|
|
2468
|
-
sessionId
|
|
2467
|
+
sessionId,
|
|
2469
2468
|
configOptions: await this.buildConfigOptions(modelOptions)
|
|
2470
2469
|
};
|
|
2471
2470
|
}
|
|
@@ -2473,34 +2472,31 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
2473
2472
|
return this.resumeSession(params);
|
|
2474
2473
|
}
|
|
2475
2474
|
async resumeSession(params) {
|
|
2476
|
-
const
|
|
2477
|
-
|
|
2475
|
+
const meta = params._meta;
|
|
2476
|
+
const sessionId = meta?.sessionId;
|
|
2477
|
+
if (!sessionId) {
|
|
2478
|
+
throw new Error("Cannot resume session without sessionId");
|
|
2479
|
+
}
|
|
2480
|
+
if (this.sessionId === sessionId) {
|
|
2478
2481
|
return {};
|
|
2479
2482
|
}
|
|
2480
|
-
const meta = params._meta;
|
|
2481
2483
|
const mcpServers = parseMcpServers(params);
|
|
2482
2484
|
await fetchMcpToolMetadata(mcpServers, this.logger);
|
|
2483
2485
|
const permissionMode = meta?.permissionMode && TWIG_EXECUTION_MODES.includes(meta.permissionMode) ? meta.permissionMode : "default";
|
|
2484
2486
|
const { query: q, session } = await this.initializeQuery({
|
|
2485
|
-
internalSessionId,
|
|
2486
2487
|
cwd: params.cwd,
|
|
2487
2488
|
permissionMode,
|
|
2488
2489
|
mcpServers,
|
|
2489
2490
|
systemPrompt: buildSystemPrompt(meta?.systemPrompt),
|
|
2490
2491
|
userProvidedOptions: meta?.claudeCode?.options,
|
|
2491
|
-
sessionId
|
|
2492
|
+
sessionId,
|
|
2493
|
+
isResume: true,
|
|
2492
2494
|
additionalDirectories: meta?.claudeCode?.options?.additionalDirectories
|
|
2493
2495
|
});
|
|
2494
2496
|
session.taskRunId = meta?.taskRunId;
|
|
2495
|
-
|
|
2496
|
-
session.sessionId = meta.sessionId;
|
|
2497
|
-
}
|
|
2498
|
-
this.registerPersistence(
|
|
2499
|
-
internalSessionId,
|
|
2500
|
-
meta
|
|
2501
|
-
);
|
|
2497
|
+
this.registerPersistence(sessionId, meta);
|
|
2502
2498
|
this.sendAvailableCommandsUpdate(
|
|
2503
|
-
|
|
2499
|
+
sessionId,
|
|
2504
2500
|
await getAvailableSlashCommands(q)
|
|
2505
2501
|
);
|
|
2506
2502
|
return {
|
|
@@ -2569,20 +2565,21 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
2569
2565
|
cwd: config.cwd,
|
|
2570
2566
|
mcpServers: config.mcpServers,
|
|
2571
2567
|
permissionMode: config.permissionMode,
|
|
2572
|
-
canUseTool: this.createCanUseTool(config.
|
|
2568
|
+
canUseTool: this.createCanUseTool(config.sessionId),
|
|
2573
2569
|
logger: this.logger,
|
|
2574
2570
|
systemPrompt: config.systemPrompt,
|
|
2575
2571
|
userProvidedOptions: config.userProvidedOptions,
|
|
2576
2572
|
sessionId: config.sessionId,
|
|
2573
|
+
isResume: config.isResume,
|
|
2577
2574
|
additionalDirectories: config.additionalDirectories,
|
|
2578
|
-
onModeChange: this.createOnModeChange(config.
|
|
2575
|
+
onModeChange: this.createOnModeChange(config.sessionId),
|
|
2579
2576
|
onProcessSpawned: this.processCallbacks?.onProcessSpawned,
|
|
2580
2577
|
onProcessExited: this.processCallbacks?.onProcessExited
|
|
2581
2578
|
});
|
|
2582
2579
|
const q = query({ prompt: input, options });
|
|
2583
2580
|
const abortController = options.abortController;
|
|
2584
2581
|
const session = this.createSession(
|
|
2585
|
-
config.
|
|
2582
|
+
config.sessionId,
|
|
2586
2583
|
q,
|
|
2587
2584
|
input,
|
|
2588
2585
|
config.permissionMode,
|
|
@@ -2775,6 +2772,7 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
2775
2772
|
}
|
|
2776
2773
|
case "tool_progress":
|
|
2777
2774
|
case "auth_status":
|
|
2775
|
+
case "tool_use_summary":
|
|
2778
2776
|
return null;
|
|
2779
2777
|
default:
|
|
2780
2778
|
unreachable(message, this.logger);
|