@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/gateway-models.js
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
// src/gateway-models.ts
|
|
2
2
|
var DEFAULT_GATEWAY_MODEL = "claude-opus-4-6";
|
|
3
3
|
var BLOCKED_MODELS = /* @__PURE__ */ new Set(["gpt-5-mini", "openai/gpt-5-mini"]);
|
|
4
|
+
var CACHE_TTL = 10 * 60 * 1e3;
|
|
5
|
+
var gatewayModelsCache = null;
|
|
4
6
|
async function fetchGatewayModels(options) {
|
|
5
7
|
const gatewayUrl = options?.gatewayUrl ?? process.env.ANTHROPIC_BASE_URL;
|
|
6
8
|
if (!gatewayUrl) {
|
|
7
9
|
return [];
|
|
8
10
|
}
|
|
11
|
+
if (gatewayModelsCache && gatewayModelsCache.url === gatewayUrl && Date.now() < gatewayModelsCache.expiry) {
|
|
12
|
+
return gatewayModelsCache.models;
|
|
13
|
+
}
|
|
9
14
|
const modelsUrl = `${gatewayUrl}/v1/models`;
|
|
10
15
|
try {
|
|
11
16
|
const response = await fetch(modelsUrl);
|
|
@@ -13,8 +18,13 @@ async function fetchGatewayModels(options) {
|
|
|
13
18
|
return [];
|
|
14
19
|
}
|
|
15
20
|
const data = await response.json();
|
|
16
|
-
const models = data.data ?? [];
|
|
17
|
-
|
|
21
|
+
const models = (data.data ?? []).filter((m) => !BLOCKED_MODELS.has(m.id));
|
|
22
|
+
gatewayModelsCache = {
|
|
23
|
+
models,
|
|
24
|
+
expiry: Date.now() + CACHE_TTL,
|
|
25
|
+
url: gatewayUrl
|
|
26
|
+
};
|
|
27
|
+
return models;
|
|
18
28
|
} catch {
|
|
19
29
|
return [];
|
|
20
30
|
}
|
|
@@ -29,11 +39,15 @@ async function fetchArrayModelIds(options) {
|
|
|
29
39
|
const models = await fetchArrayModels(options);
|
|
30
40
|
return models.map((model) => model.id);
|
|
31
41
|
}
|
|
42
|
+
var arrayModelsCache = null;
|
|
32
43
|
async function fetchArrayModels(options) {
|
|
33
44
|
const gatewayUrl = options?.gatewayUrl ?? process.env.ANTHROPIC_BASE_URL;
|
|
34
45
|
if (!gatewayUrl) {
|
|
35
46
|
return [];
|
|
36
47
|
}
|
|
48
|
+
if (arrayModelsCache && arrayModelsCache.url === gatewayUrl && Date.now() < arrayModelsCache.expiry) {
|
|
49
|
+
return arrayModelsCache.models;
|
|
50
|
+
}
|
|
37
51
|
try {
|
|
38
52
|
const base = new URL(gatewayUrl);
|
|
39
53
|
base.pathname = "/array/v1/models";
|
|
@@ -51,6 +65,11 @@ async function fetchArrayModels(options) {
|
|
|
51
65
|
if (!id) continue;
|
|
52
66
|
results.push({ id, owned_by: model?.owned_by });
|
|
53
67
|
}
|
|
68
|
+
arrayModelsCache = {
|
|
69
|
+
models: results,
|
|
70
|
+
expiry: Date.now() + CACHE_TTL,
|
|
71
|
+
url: gatewayUrl
|
|
72
|
+
};
|
|
54
73
|
return results;
|
|
55
74
|
} catch {
|
|
56
75
|
return [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/gateway-models.ts"],"sourcesContent":["export interface GatewayModel {\n id: string;\n owned_by: string;\n context_window: number;\n supports_streaming: boolean;\n supports_vision: boolean;\n}\n\ninterface GatewayModelsResponse {\n object: \"list\";\n data: GatewayModel[];\n}\n\nexport interface FetchGatewayModelsOptions {\n gatewayUrl: string;\n}\n\nexport const DEFAULT_GATEWAY_MODEL = \"claude-opus-4-6\";\n\nexport const BLOCKED_MODELS = new Set([\"gpt-5-mini\", \"openai/gpt-5-mini\"]);\n\ntype ArrayModelsResponse =\n | {\n data?: Array<{ id?: string; owned_by?: string }>;\n models?: Array<{ id?: string; owned_by?: string }>;\n }\n | Array<{ id?: string; owned_by?: string }>;\n\nexport async function fetchGatewayModels(\n options?: FetchGatewayModelsOptions,\n): Promise<GatewayModel[]> {\n const gatewayUrl = options?.gatewayUrl ?? process.env.ANTHROPIC_BASE_URL;\n if (!gatewayUrl) {\n return [];\n }\n\n const modelsUrl = `${gatewayUrl}/v1/models`;\n\n try {\n const response = await fetch(modelsUrl);\n\n if (!response.ok) {\n return [];\n }\n\n const data = (await response.json()) as GatewayModelsResponse;\n const models = data.data ?? []
|
|
1
|
+
{"version":3,"sources":["../src/gateway-models.ts"],"sourcesContent":["export interface GatewayModel {\n id: string;\n owned_by: string;\n context_window: number;\n supports_streaming: boolean;\n supports_vision: boolean;\n}\n\ninterface GatewayModelsResponse {\n object: \"list\";\n data: GatewayModel[];\n}\n\nexport interface FetchGatewayModelsOptions {\n gatewayUrl: string;\n}\n\nexport const DEFAULT_GATEWAY_MODEL = \"claude-opus-4-6\";\n\nexport const BLOCKED_MODELS = new Set([\"gpt-5-mini\", \"openai/gpt-5-mini\"]);\n\ntype ArrayModelsResponse =\n | {\n data?: Array<{ id?: string; owned_by?: string }>;\n models?: Array<{ id?: string; owned_by?: string }>;\n }\n | Array<{ id?: string; owned_by?: string }>;\n\nconst CACHE_TTL = 10 * 60 * 1000; // 10 minutes\n\nlet gatewayModelsCache: {\n models: GatewayModel[];\n expiry: number;\n url: string;\n} | null = null;\n\nexport async function fetchGatewayModels(\n options?: FetchGatewayModelsOptions,\n): Promise<GatewayModel[]> {\n const gatewayUrl = options?.gatewayUrl ?? process.env.ANTHROPIC_BASE_URL;\n if (!gatewayUrl) {\n return [];\n }\n\n if (\n gatewayModelsCache &&\n gatewayModelsCache.url === gatewayUrl &&\n Date.now() < gatewayModelsCache.expiry\n ) {\n return gatewayModelsCache.models;\n }\n\n const modelsUrl = `${gatewayUrl}/v1/models`;\n\n try {\n const response = await fetch(modelsUrl);\n\n if (!response.ok) {\n return [];\n }\n\n const data = (await response.json()) as GatewayModelsResponse;\n const models = (data.data ?? []).filter((m) => !BLOCKED_MODELS.has(m.id));\n gatewayModelsCache = {\n models,\n expiry: Date.now() + CACHE_TTL,\n url: gatewayUrl,\n };\n return models;\n } catch {\n return [];\n }\n}\n\nexport function isAnthropicModel(model: GatewayModel): boolean {\n if (model.owned_by) {\n return model.owned_by === \"anthropic\";\n }\n return model.id.startsWith(\"claude-\") || model.id.startsWith(\"anthropic/\");\n}\n\nexport async function fetchArrayModelIds(\n options?: FetchGatewayModelsOptions,\n): Promise<string[]> {\n const models = await fetchArrayModels(options);\n return models.map((model) => model.id);\n}\n\nexport interface ArrayModelInfo {\n id: string;\n owned_by?: string;\n}\n\nlet arrayModelsCache: {\n models: ArrayModelInfo[];\n expiry: number;\n url: string;\n} | null = null;\n\nexport async function fetchArrayModels(\n options?: FetchGatewayModelsOptions,\n): Promise<ArrayModelInfo[]> {\n const gatewayUrl = options?.gatewayUrl ?? process.env.ANTHROPIC_BASE_URL;\n if (!gatewayUrl) {\n return [];\n }\n\n if (\n arrayModelsCache &&\n arrayModelsCache.url === gatewayUrl &&\n Date.now() < arrayModelsCache.expiry\n ) {\n return arrayModelsCache.models;\n }\n\n try {\n const base = new URL(gatewayUrl);\n base.pathname = \"/array/v1/models\";\n base.search = \"\";\n base.hash = \"\";\n const response = await fetch(base.toString());\n if (!response.ok) {\n return [];\n }\n const data = (await response.json()) as ArrayModelsResponse;\n const models = Array.isArray(data)\n ? data\n : (data.data ?? data.models ?? []);\n const results: ArrayModelInfo[] = [];\n for (const model of models) {\n const id = model?.id ? String(model.id) : \"\";\n if (!id) continue;\n results.push({ id, owned_by: model?.owned_by });\n }\n arrayModelsCache = {\n models: results,\n expiry: Date.now() + CACHE_TTL,\n url: gatewayUrl,\n };\n return results;\n } catch {\n return [];\n }\n}\n\nconst PROVIDER_NAMES: Record<string, string> = {\n anthropic: \"Anthropic\",\n openai: \"OpenAI\",\n \"google-vertex\": \"Gemini\",\n};\n\nexport function getProviderName(ownedBy: string): string {\n return PROVIDER_NAMES[ownedBy] ?? ownedBy;\n}\n\nconst PROVIDER_PREFIXES = [\"anthropic/\", \"openai/\", \"google-vertex/\"];\n\nexport function formatGatewayModelName(model: GatewayModel): string {\n let cleanId = model.id;\n for (const prefix of PROVIDER_PREFIXES) {\n if (cleanId.startsWith(prefix)) {\n cleanId = cleanId.slice(prefix.length);\n break;\n }\n }\n\n cleanId = cleanId.replace(/(\\d)-(\\d)/g, \"$1.$2\");\n\n const words = cleanId.split(/[-_]/).map((word) => {\n if (word.match(/^[0-9.]+$/)) return word;\n return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();\n });\n\n return words.join(\" \");\n}\n"],"mappings":"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","names":[]}
|
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.45",
|
|
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: {
|
|
@@ -1305,11 +1305,16 @@ function unreachable(value, logger) {
|
|
|
1305
1305
|
// src/gateway-models.ts
|
|
1306
1306
|
var DEFAULT_GATEWAY_MODEL = "claude-opus-4-6";
|
|
1307
1307
|
var BLOCKED_MODELS = /* @__PURE__ */ new Set(["gpt-5-mini", "openai/gpt-5-mini"]);
|
|
1308
|
+
var CACHE_TTL = 10 * 60 * 1e3;
|
|
1309
|
+
var gatewayModelsCache = null;
|
|
1308
1310
|
async function fetchGatewayModels(options) {
|
|
1309
1311
|
const gatewayUrl = options?.gatewayUrl ?? process.env.ANTHROPIC_BASE_URL;
|
|
1310
1312
|
if (!gatewayUrl) {
|
|
1311
1313
|
return [];
|
|
1312
1314
|
}
|
|
1315
|
+
if (gatewayModelsCache && gatewayModelsCache.url === gatewayUrl && Date.now() < gatewayModelsCache.expiry) {
|
|
1316
|
+
return gatewayModelsCache.models;
|
|
1317
|
+
}
|
|
1313
1318
|
const modelsUrl = `${gatewayUrl}/v1/models`;
|
|
1314
1319
|
try {
|
|
1315
1320
|
const response = await fetch(modelsUrl);
|
|
@@ -1317,8 +1322,13 @@ async function fetchGatewayModels(options) {
|
|
|
1317
1322
|
return [];
|
|
1318
1323
|
}
|
|
1319
1324
|
const data = await response.json();
|
|
1320
|
-
const models = data.data ?? [];
|
|
1321
|
-
|
|
1325
|
+
const models = (data.data ?? []).filter((m) => !BLOCKED_MODELS.has(m.id));
|
|
1326
|
+
gatewayModelsCache = {
|
|
1327
|
+
models,
|
|
1328
|
+
expiry: Date.now() + CACHE_TTL,
|
|
1329
|
+
url: gatewayUrl
|
|
1330
|
+
};
|
|
1331
|
+
return models;
|
|
1322
1332
|
} catch {
|
|
1323
1333
|
return [];
|
|
1324
1334
|
}
|
|
@@ -1329,11 +1339,15 @@ function isAnthropicModel(model) {
|
|
|
1329
1339
|
}
|
|
1330
1340
|
return model.id.startsWith("claude-") || model.id.startsWith("anthropic/");
|
|
1331
1341
|
}
|
|
1342
|
+
var arrayModelsCache = null;
|
|
1332
1343
|
async function fetchArrayModels(options) {
|
|
1333
1344
|
const gatewayUrl = options?.gatewayUrl ?? process.env.ANTHROPIC_BASE_URL;
|
|
1334
1345
|
if (!gatewayUrl) {
|
|
1335
1346
|
return [];
|
|
1336
1347
|
}
|
|
1348
|
+
if (arrayModelsCache && arrayModelsCache.url === gatewayUrl && Date.now() < arrayModelsCache.expiry) {
|
|
1349
|
+
return arrayModelsCache.models;
|
|
1350
|
+
}
|
|
1337
1351
|
try {
|
|
1338
1352
|
const base = new URL(gatewayUrl);
|
|
1339
1353
|
base.pathname = "/array/v1/models";
|
|
@@ -1351,6 +1365,11 @@ async function fetchArrayModels(options) {
|
|
|
1351
1365
|
if (!id) continue;
|
|
1352
1366
|
results.push({ id, owned_by: model?.owned_by });
|
|
1353
1367
|
}
|
|
1368
|
+
arrayModelsCache = {
|
|
1369
|
+
models: results,
|
|
1370
|
+
expiry: Date.now() + CACHE_TTL,
|
|
1371
|
+
url: gatewayUrl
|
|
1372
|
+
};
|
|
1354
1373
|
return results;
|
|
1355
1374
|
} catch {
|
|
1356
1375
|
return [];
|
|
@@ -3261,12 +3280,8 @@ function clearStatsigCache() {
|
|
|
3261
3280
|
process.env.CLAUDE_CONFIG_DIR || path2.join(os2.homedir(), ".claude"),
|
|
3262
3281
|
"statsig"
|
|
3263
3282
|
);
|
|
3264
|
-
|
|
3265
|
-
|
|
3266
|
-
fs.rmSync(statsigPath, { recursive: true, force: true });
|
|
3267
|
-
}
|
|
3268
|
-
} catch {
|
|
3269
|
-
}
|
|
3283
|
+
fs.rm(statsigPath, { recursive: true, force: true }, () => {
|
|
3284
|
+
});
|
|
3270
3285
|
}
|
|
3271
3286
|
|
|
3272
3287
|
// src/adapters/claude/claude-agent.ts
|
|
@@ -3328,7 +3343,7 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3328
3343
|
const sessionId = uuidv7();
|
|
3329
3344
|
const permissionMode = meta?.permissionMode && TWIG_EXECUTION_MODES.includes(meta.permissionMode) ? meta.permissionMode : "default";
|
|
3330
3345
|
const mcpServers = parseMcpServers(params);
|
|
3331
|
-
|
|
3346
|
+
const mcpMetadataPromise = fetchMcpToolMetadata(mcpServers, this.logger);
|
|
3332
3347
|
const options = buildSessionOptions({
|
|
3333
3348
|
cwd: params.cwd,
|
|
3334
3349
|
mcpServers,
|
|
@@ -3362,13 +3377,14 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3362
3377
|
adapter: "claude"
|
|
3363
3378
|
});
|
|
3364
3379
|
}
|
|
3365
|
-
const modelOptions = await
|
|
3380
|
+
const [modelOptions, slashCommands] = await Promise.all([
|
|
3381
|
+
this.getModelConfigOptions(),
|
|
3382
|
+
getAvailableSlashCommands(q),
|
|
3383
|
+
mcpMetadataPromise
|
|
3384
|
+
]);
|
|
3366
3385
|
session.modelId = modelOptions.currentModelId;
|
|
3367
3386
|
await this.trySetModel(q, modelOptions.currentModelId);
|
|
3368
|
-
this.sendAvailableCommandsUpdate(
|
|
3369
|
-
sessionId,
|
|
3370
|
-
await getAvailableSlashCommands(q)
|
|
3371
|
-
);
|
|
3387
|
+
this.sendAvailableCommandsUpdate(sessionId, slashCommands);
|
|
3372
3388
|
return {
|
|
3373
3389
|
sessionId,
|
|
3374
3390
|
configOptions: await this.buildConfigOptions(modelOptions)
|
|
@@ -3387,7 +3403,7 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3387
3403
|
return {};
|
|
3388
3404
|
}
|
|
3389
3405
|
const mcpServers = parseMcpServers(params);
|
|
3390
|
-
|
|
3406
|
+
const mcpMetadataPromise = fetchMcpToolMetadata(mcpServers, this.logger);
|
|
3391
3407
|
const permissionMode = meta?.permissionMode && TWIG_EXECUTION_MODES.includes(meta.permissionMode) ? meta.permissionMode : "default";
|
|
3392
3408
|
const { query: q, session } = await this.initializeQuery({
|
|
3393
3409
|
cwd: params.cwd,
|
|
@@ -3401,10 +3417,11 @@ var ClaudeAcpAgent = class extends BaseAcpAgent {
|
|
|
3401
3417
|
});
|
|
3402
3418
|
session.taskRunId = meta?.taskRunId;
|
|
3403
3419
|
this.registerPersistence(sessionId, meta);
|
|
3404
|
-
|
|
3405
|
-
|
|
3406
|
-
|
|
3407
|
-
);
|
|
3420
|
+
const [slashCommands] = await Promise.all([
|
|
3421
|
+
getAvailableSlashCommands(q),
|
|
3422
|
+
mcpMetadataPromise
|
|
3423
|
+
]);
|
|
3424
|
+
this.sendAvailableCommandsUpdate(sessionId, slashCommands);
|
|
3408
3425
|
return {
|
|
3409
3426
|
configOptions: await this.buildConfigOptions()
|
|
3410
3427
|
};
|
|
@@ -9570,7 +9587,7 @@ async function isCommitOnRemote(baseDir, commit, options) {
|
|
|
9570
9587
|
}
|
|
9571
9588
|
|
|
9572
9589
|
// src/sagas/apply-snapshot-saga.ts
|
|
9573
|
-
import { mkdir as mkdir3, rm as
|
|
9590
|
+
import { mkdir as mkdir3, rm as rm3, writeFile as writeFile3 } from "fs/promises";
|
|
9574
9591
|
import { join as join5 } from "path";
|
|
9575
9592
|
|
|
9576
9593
|
// ../git/dist/sagas/tree.js
|
|
@@ -9884,7 +9901,7 @@ var ApplySnapshotSaga = class extends Saga {
|
|
|
9884
9901
|
},
|
|
9885
9902
|
rollback: async () => {
|
|
9886
9903
|
if (this.archivePath) {
|
|
9887
|
-
await
|
|
9904
|
+
await rm3(this.archivePath, { force: true }).catch(() => {
|
|
9888
9905
|
});
|
|
9889
9906
|
}
|
|
9890
9907
|
}
|
|
@@ -9900,7 +9917,7 @@ var ApplySnapshotSaga = class extends Saga {
|
|
|
9900
9917
|
if (!applyResult.success) {
|
|
9901
9918
|
throw new Error(`Failed to apply tree: ${applyResult.error}`);
|
|
9902
9919
|
}
|
|
9903
|
-
await
|
|
9920
|
+
await rm3(this.archivePath, { force: true }).catch(() => {
|
|
9904
9921
|
});
|
|
9905
9922
|
this.log.info("Tree snapshot applied", {
|
|
9906
9923
|
treeHash: snapshot.treeHash,
|
|
@@ -9913,7 +9930,7 @@ var ApplySnapshotSaga = class extends Saga {
|
|
|
9913
9930
|
|
|
9914
9931
|
// src/sagas/capture-tree-saga.ts
|
|
9915
9932
|
import { existsSync as existsSync5 } from "fs";
|
|
9916
|
-
import { readFile as readFile3, rm as
|
|
9933
|
+
import { readFile as readFile3, rm as rm4 } from "fs/promises";
|
|
9917
9934
|
import { join as join6 } from "path";
|
|
9918
9935
|
var CaptureTreeSaga2 = class extends Saga {
|
|
9919
9936
|
async execute(input) {
|
|
@@ -9962,7 +9979,7 @@ var CaptureTreeSaga2 = class extends Saga {
|
|
|
9962
9979
|
runId
|
|
9963
9980
|
);
|
|
9964
9981
|
} finally {
|
|
9965
|
-
await
|
|
9982
|
+
await rm4(createdArchivePath, { force: true }).catch(() => {
|
|
9966
9983
|
});
|
|
9967
9984
|
}
|
|
9968
9985
|
}
|
|
@@ -10006,7 +10023,7 @@ var CaptureTreeSaga2 = class extends Saga {
|
|
|
10006
10023
|
return void 0;
|
|
10007
10024
|
},
|
|
10008
10025
|
rollback: async () => {
|
|
10009
|
-
await
|
|
10026
|
+
await rm4(archivePath, { force: true }).catch(() => {
|
|
10010
10027
|
});
|
|
10011
10028
|
}
|
|
10012
10029
|
});
|