@posthog/agent 2.1.35 → 2.1.45
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 +37 -20
- package/dist/agent.js.map +1 -1
- package/dist/gateway-models.js +21 -2
- package/dist/gateway-models.js.map +1 -1
- package/dist/index.js +43 -26
- package/dist/index.js.map +1 -1
- package/dist/server/agent-server.js +34 -26
- package/dist/server/agent-server.js.map +1 -1
- package/dist/server/bin.cjs +28 -20
- package/dist/server/bin.cjs.map +1 -1
- package/package.json +3 -3
- package/src/adapters/claude/claude-agent.ts +23 -11
- package/src/adapters/claude/session/options.ts +3 -7
- package/src/gateway-models.ts +42 -2
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.45",
|
|
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: {
|
|
@@ -407,11 +407,16 @@ function unreachable(value, logger) {
|
|
|
407
407
|
// src/gateway-models.ts
|
|
408
408
|
var DEFAULT_GATEWAY_MODEL = "claude-opus-4-6";
|
|
409
409
|
var BLOCKED_MODELS = /* @__PURE__ */ new Set(["gpt-5-mini", "openai/gpt-5-mini"]);
|
|
410
|
+
var CACHE_TTL = 10 * 60 * 1e3;
|
|
411
|
+
var gatewayModelsCache = null;
|
|
410
412
|
async function fetchGatewayModels(options) {
|
|
411
413
|
const gatewayUrl = options?.gatewayUrl ?? process.env.ANTHROPIC_BASE_URL;
|
|
412
414
|
if (!gatewayUrl) {
|
|
413
415
|
return [];
|
|
414
416
|
}
|
|
417
|
+
if (gatewayModelsCache && gatewayModelsCache.url === gatewayUrl && Date.now() < gatewayModelsCache.expiry) {
|
|
418
|
+
return gatewayModelsCache.models;
|
|
419
|
+
}
|
|
415
420
|
const modelsUrl = `${gatewayUrl}/v1/models`;
|
|
416
421
|
try {
|
|
417
422
|
const response = await fetch(modelsUrl);
|
|
@@ -419,8 +424,13 @@ async function fetchGatewayModels(options) {
|
|
|
419
424
|
return [];
|
|
420
425
|
}
|
|
421
426
|
const data = await response.json();
|
|
422
|
-
const models = data.data ?? [];
|
|
423
|
-
|
|
427
|
+
const models = (data.data ?? []).filter((m) => !BLOCKED_MODELS.has(m.id));
|
|
428
|
+
gatewayModelsCache = {
|
|
429
|
+
models,
|
|
430
|
+
expiry: Date.now() + CACHE_TTL,
|
|
431
|
+
url: gatewayUrl
|
|
432
|
+
};
|
|
433
|
+
return models;
|
|
424
434
|
} catch {
|
|
425
435
|
return [];
|
|
426
436
|
}
|
|
@@ -431,11 +441,15 @@ function isAnthropicModel(model) {
|
|
|
431
441
|
}
|
|
432
442
|
return model.id.startsWith("claude-") || model.id.startsWith("anthropic/");
|
|
433
443
|
}
|
|
444
|
+
var arrayModelsCache = null;
|
|
434
445
|
async function fetchArrayModels(options) {
|
|
435
446
|
const gatewayUrl = options?.gatewayUrl ?? process.env.ANTHROPIC_BASE_URL;
|
|
436
447
|
if (!gatewayUrl) {
|
|
437
448
|
return [];
|
|
438
449
|
}
|
|
450
|
+
if (arrayModelsCache && arrayModelsCache.url === gatewayUrl && Date.now() < arrayModelsCache.expiry) {
|
|
451
|
+
return arrayModelsCache.models;
|
|
452
|
+
}
|
|
439
453
|
try {
|
|
440
454
|
const base = new URL(gatewayUrl);
|
|
441
455
|
base.pathname = "/array/v1/models";
|
|
@@ -453,6 +467,11 @@ async function fetchArrayModels(options) {
|
|
|
453
467
|
if (!id) continue;
|
|
454
468
|
results.push({ id, owned_by: model?.owned_by });
|
|
455
469
|
}
|
|
470
|
+
arrayModelsCache = {
|
|
471
|
+
models: results,
|
|
472
|
+
expiry: Date.now() + CACHE_TTL,
|
|
473
|
+
url: gatewayUrl
|
|
474
|
+
};
|
|
456
475
|
return results;
|
|
457
476
|
} catch {
|
|
458
477
|
return [];
|
|
@@ -2355,12 +2374,8 @@ function clearStatsigCache() {
|
|
|
2355
2374
|
process.env.CLAUDE_CONFIG_DIR || path2.join(os2.homedir(), ".claude"),
|
|
2356
2375
|
"statsig"
|
|
2357
2376
|
);
|
|
2358
|
-
|
|
2359
|
-
|
|
2360
|
-
fs.rmSync(statsigPath, { recursive: true, force: true });
|
|
2361
|
-
}
|
|
2362
|
-
} catch {
|
|
2363
|
-
}
|
|
2377
|
+
fs.rm(statsigPath, { recursive: true, force: true }, () => {
|
|
2378
|
+
});
|
|
2364
2379
|
}
|
|
2365
2380
|
|
|
2366
2381
|
// src/adapters/claude/claude-agent.ts
|
|
@@ -2422,7 +2437,7 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
2422
2437
|
const sessionId = uuidv7();
|
|
2423
2438
|
const permissionMode = meta?.permissionMode && TWIG_EXECUTION_MODES.includes(meta.permissionMode) ? meta.permissionMode : "default";
|
|
2424
2439
|
const mcpServers = parseMcpServers(params);
|
|
2425
|
-
|
|
2440
|
+
const mcpMetadataPromise = fetchMcpToolMetadata(mcpServers, this.logger);
|
|
2426
2441
|
const options = buildSessionOptions({
|
|
2427
2442
|
cwd: params.cwd,
|
|
2428
2443
|
mcpServers,
|
|
@@ -2456,13 +2471,14 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
2456
2471
|
adapter: "claude"
|
|
2457
2472
|
});
|
|
2458
2473
|
}
|
|
2459
|
-
const modelOptions = await
|
|
2474
|
+
const [modelOptions, slashCommands] = await Promise.all([
|
|
2475
|
+
this.getModelConfigOptions(),
|
|
2476
|
+
getAvailableSlashCommands(q),
|
|
2477
|
+
mcpMetadataPromise
|
|
2478
|
+
]);
|
|
2460
2479
|
session.modelId = modelOptions.currentModelId;
|
|
2461
2480
|
await this.trySetModel(q, modelOptions.currentModelId);
|
|
2462
|
-
this.sendAvailableCommandsUpdate(
|
|
2463
|
-
sessionId,
|
|
2464
|
-
await getAvailableSlashCommands(q)
|
|
2465
|
-
);
|
|
2481
|
+
this.sendAvailableCommandsUpdate(sessionId, slashCommands);
|
|
2466
2482
|
return {
|
|
2467
2483
|
sessionId,
|
|
2468
2484
|
configOptions: await this.buildConfigOptions(modelOptions)
|
|
@@ -2481,7 +2497,7 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
2481
2497
|
return {};
|
|
2482
2498
|
}
|
|
2483
2499
|
const mcpServers = parseMcpServers(params);
|
|
2484
|
-
|
|
2500
|
+
const mcpMetadataPromise = fetchMcpToolMetadata(mcpServers, this.logger);
|
|
2485
2501
|
const permissionMode = meta?.permissionMode && TWIG_EXECUTION_MODES.includes(meta.permissionMode) ? meta.permissionMode : "default";
|
|
2486
2502
|
const { query: q, session } = await this.initializeQuery({
|
|
2487
2503
|
cwd: params.cwd,
|
|
@@ -2495,10 +2511,11 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
2495
2511
|
});
|
|
2496
2512
|
session.taskRunId = meta?.taskRunId;
|
|
2497
2513
|
this.registerPersistence(sessionId, meta);
|
|
2498
|
-
|
|
2499
|
-
|
|
2500
|
-
|
|
2501
|
-
);
|
|
2514
|
+
const [slashCommands] = await Promise.all([
|
|
2515
|
+
getAvailableSlashCommands(q),
|
|
2516
|
+
mcpMetadataPromise
|
|
2517
|
+
]);
|
|
2518
|
+
this.sendAvailableCommandsUpdate(sessionId, slashCommands);
|
|
2502
2519
|
return {
|
|
2503
2520
|
configOptions: await this.buildConfigOptions()
|
|
2504
2521
|
};
|