@posthog/agent 2.1.16 → 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 +57 -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 +57 -47
- package/dist/index.js.map +1 -1
- package/dist/server/agent-server.js +57 -47
- package/dist/server/agent-server.js.map +1 -1
- package/dist/server/bin.cjs +57 -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 +22 -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", {
|
|
@@ -3184,7 +3174,19 @@ function buildSpawnWrapper(sessionId, onProcessSpawned, onProcessExited) {
|
|
|
3184
3174
|
};
|
|
3185
3175
|
};
|
|
3186
3176
|
}
|
|
3177
|
+
function ensureLocalSettings(cwd) {
|
|
3178
|
+
const claudeDir = path2.join(cwd, ".claude");
|
|
3179
|
+
const localSettingsPath = path2.join(claudeDir, "settings.local.json");
|
|
3180
|
+
try {
|
|
3181
|
+
if (!fs.existsSync(localSettingsPath)) {
|
|
3182
|
+
fs.mkdirSync(claudeDir, { recursive: true });
|
|
3183
|
+
fs.writeFileSync(localSettingsPath, "{}\n", { flag: "wx" });
|
|
3184
|
+
}
|
|
3185
|
+
} catch {
|
|
3186
|
+
}
|
|
3187
|
+
}
|
|
3187
3188
|
function buildSessionOptions(params) {
|
|
3189
|
+
ensureLocalSettings(params.cwd);
|
|
3188
3190
|
const options = {
|
|
3189
3191
|
...params.userProvidedOptions,
|
|
3190
3192
|
systemPrompt: params.systemPrompt ?? buildSystemPrompt(),
|
|
@@ -3207,7 +3209,7 @@ function buildSessionOptions(params) {
|
|
|
3207
3209
|
),
|
|
3208
3210
|
...params.onProcessSpawned && {
|
|
3209
3211
|
spawnClaudeCodeProcess: buildSpawnWrapper(
|
|
3210
|
-
params.sessionId
|
|
3212
|
+
params.sessionId,
|
|
3211
3213
|
params.onProcessSpawned,
|
|
3212
3214
|
params.onProcessExited
|
|
3213
3215
|
)
|
|
@@ -3216,8 +3218,11 @@ function buildSessionOptions(params) {
|
|
|
3216
3218
|
if (process.env.CLAUDE_CODE_EXECUTABLE) {
|
|
3217
3219
|
options.pathToClaudeCodeExecutable = process.env.CLAUDE_CODE_EXECUTABLE;
|
|
3218
3220
|
}
|
|
3219
|
-
if (params.
|
|
3221
|
+
if (params.isResume) {
|
|
3220
3222
|
options.resume = params.sessionId;
|
|
3223
|
+
options.forkSession = false;
|
|
3224
|
+
} else {
|
|
3225
|
+
options.sessionId = params.sessionId;
|
|
3221
3226
|
}
|
|
3222
3227
|
if (params.additionalDirectories) {
|
|
3223
3228
|
options.additionalDirectories = params.additionalDirectories;
|
|
@@ -3294,7 +3299,7 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3294
3299
|
async newSession(params) {
|
|
3295
3300
|
this.checkAuthStatus();
|
|
3296
3301
|
const meta = params._meta;
|
|
3297
|
-
const
|
|
3302
|
+
const sessionId = uuidv7();
|
|
3298
3303
|
const permissionMode = meta?.permissionMode && TWIG_EXECUTION_MODES.includes(meta.permissionMode) ? meta.permissionMode : "default";
|
|
3299
3304
|
const mcpServers = parseMcpServers(params);
|
|
3300
3305
|
await fetchMcpToolMetadata(mcpServers, this.logger);
|
|
@@ -3302,18 +3307,20 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3302
3307
|
cwd: params.cwd,
|
|
3303
3308
|
mcpServers,
|
|
3304
3309
|
permissionMode,
|
|
3305
|
-
canUseTool: this.createCanUseTool(
|
|
3310
|
+
canUseTool: this.createCanUseTool(sessionId),
|
|
3306
3311
|
logger: this.logger,
|
|
3307
3312
|
systemPrompt: buildSystemPrompt(meta?.systemPrompt),
|
|
3308
3313
|
userProvidedOptions: meta?.claudeCode?.options,
|
|
3309
|
-
|
|
3314
|
+
sessionId,
|
|
3315
|
+
isResume: false,
|
|
3316
|
+
onModeChange: this.createOnModeChange(sessionId),
|
|
3310
3317
|
onProcessSpawned: this.processCallbacks?.onProcessSpawned,
|
|
3311
3318
|
onProcessExited: this.processCallbacks?.onProcessExited
|
|
3312
3319
|
});
|
|
3313
3320
|
const input = new Pushable();
|
|
3314
3321
|
const q = query({ prompt: input, options });
|
|
3315
3322
|
const session = this.createSession(
|
|
3316
|
-
|
|
3323
|
+
sessionId,
|
|
3317
3324
|
q,
|
|
3318
3325
|
input,
|
|
3319
3326
|
permissionMode,
|
|
@@ -3321,19 +3328,23 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3321
3328
|
options.abortController
|
|
3322
3329
|
);
|
|
3323
3330
|
session.taskRunId = meta?.taskRunId;
|
|
3324
|
-
this.registerPersistence(
|
|
3325
|
-
|
|
3326
|
-
|
|
3327
|
-
|
|
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
|
+
}
|
|
3328
3339
|
const modelOptions = await this.getModelConfigOptions();
|
|
3329
3340
|
session.modelId = modelOptions.currentModelId;
|
|
3330
3341
|
await this.trySetModel(q, modelOptions.currentModelId);
|
|
3331
3342
|
this.sendAvailableCommandsUpdate(
|
|
3332
|
-
|
|
3343
|
+
sessionId,
|
|
3333
3344
|
await getAvailableSlashCommands(q)
|
|
3334
3345
|
);
|
|
3335
3346
|
return {
|
|
3336
|
-
sessionId
|
|
3347
|
+
sessionId,
|
|
3337
3348
|
configOptions: await this.buildConfigOptions(modelOptions)
|
|
3338
3349
|
};
|
|
3339
3350
|
}
|
|
@@ -3341,34 +3352,31 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3341
3352
|
return this.resumeSession(params);
|
|
3342
3353
|
}
|
|
3343
3354
|
async resumeSession(params) {
|
|
3344
|
-
const
|
|
3345
|
-
|
|
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) {
|
|
3346
3361
|
return {};
|
|
3347
3362
|
}
|
|
3348
|
-
const meta = params._meta;
|
|
3349
3363
|
const mcpServers = parseMcpServers(params);
|
|
3350
3364
|
await fetchMcpToolMetadata(mcpServers, this.logger);
|
|
3351
3365
|
const permissionMode = meta?.permissionMode && TWIG_EXECUTION_MODES.includes(meta.permissionMode) ? meta.permissionMode : "default";
|
|
3352
3366
|
const { query: q, session } = await this.initializeQuery({
|
|
3353
|
-
internalSessionId,
|
|
3354
3367
|
cwd: params.cwd,
|
|
3355
3368
|
permissionMode,
|
|
3356
3369
|
mcpServers,
|
|
3357
3370
|
systemPrompt: buildSystemPrompt(meta?.systemPrompt),
|
|
3358
3371
|
userProvidedOptions: meta?.claudeCode?.options,
|
|
3359
|
-
sessionId
|
|
3372
|
+
sessionId,
|
|
3373
|
+
isResume: true,
|
|
3360
3374
|
additionalDirectories: meta?.claudeCode?.options?.additionalDirectories
|
|
3361
3375
|
});
|
|
3362
3376
|
session.taskRunId = meta?.taskRunId;
|
|
3363
|
-
|
|
3364
|
-
session.sessionId = meta.sessionId;
|
|
3365
|
-
}
|
|
3366
|
-
this.registerPersistence(
|
|
3367
|
-
internalSessionId,
|
|
3368
|
-
meta
|
|
3369
|
-
);
|
|
3377
|
+
this.registerPersistence(sessionId, meta);
|
|
3370
3378
|
this.sendAvailableCommandsUpdate(
|
|
3371
|
-
|
|
3379
|
+
sessionId,
|
|
3372
3380
|
await getAvailableSlashCommands(q)
|
|
3373
3381
|
);
|
|
3374
3382
|
return {
|
|
@@ -3437,20 +3445,21 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3437
3445
|
cwd: config.cwd,
|
|
3438
3446
|
mcpServers: config.mcpServers,
|
|
3439
3447
|
permissionMode: config.permissionMode,
|
|
3440
|
-
canUseTool: this.createCanUseTool(config.
|
|
3448
|
+
canUseTool: this.createCanUseTool(config.sessionId),
|
|
3441
3449
|
logger: this.logger,
|
|
3442
3450
|
systemPrompt: config.systemPrompt,
|
|
3443
3451
|
userProvidedOptions: config.userProvidedOptions,
|
|
3444
3452
|
sessionId: config.sessionId,
|
|
3453
|
+
isResume: config.isResume,
|
|
3445
3454
|
additionalDirectories: config.additionalDirectories,
|
|
3446
|
-
onModeChange: this.createOnModeChange(config.
|
|
3455
|
+
onModeChange: this.createOnModeChange(config.sessionId),
|
|
3447
3456
|
onProcessSpawned: this.processCallbacks?.onProcessSpawned,
|
|
3448
3457
|
onProcessExited: this.processCallbacks?.onProcessExited
|
|
3449
3458
|
});
|
|
3450
3459
|
const q = query({ prompt: input, options });
|
|
3451
3460
|
const abortController = options.abortController;
|
|
3452
3461
|
const session = this.createSession(
|
|
3453
|
-
config.
|
|
3462
|
+
config.sessionId,
|
|
3454
3463
|
q,
|
|
3455
3464
|
input,
|
|
3456
3465
|
config.permissionMode,
|
|
@@ -3643,6 +3652,7 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3643
3652
|
}
|
|
3644
3653
|
case "tool_progress":
|
|
3645
3654
|
case "auth_status":
|
|
3655
|
+
case "tool_use_summary":
|
|
3646
3656
|
return null;
|
|
3647
3657
|
default:
|
|
3648
3658
|
unreachable(message, this.logger);
|