@standardagents/builder 0.13.0-next.c55f029 → 0.13.1
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/built-in-routes.js +2858 -1905
- package/dist/built-in-routes.js.map +1 -1
- package/dist/client/index.js +17 -17
- package/dist/{index-T0gR5l-G.d.ts → index-D8PIt3cR.d.ts} +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +71 -28
- package/dist/index.js.map +1 -1
- package/dist/plugin.d.ts +1 -1
- package/dist/plugin.js +70 -28
- package/dist/plugin.js.map +1 -1
- package/dist/test.d.ts +1 -1
- package/package.json +4 -4
package/dist/plugin.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ interface AgentPluginOptions {
|
|
|
11
11
|
effectsDir?: string;
|
|
12
12
|
/**
|
|
13
13
|
* Additional provider packages to expose in the UI.
|
|
14
|
-
* First-party providers (@standardagents/openai, @standardagents/openrouter) are always included.
|
|
14
|
+
* First-party providers (@standardagents/cerebras, @standardagents/openai, @standardagents/openrouter) are always included.
|
|
15
15
|
* @example ['my-custom-provider', '@company/custom-openai']
|
|
16
16
|
*/
|
|
17
17
|
providers?: string[];
|
package/dist/plugin.js
CHANGED
|
@@ -1382,14 +1382,65 @@ function formatSessionBinding(binding) {
|
|
|
1382
1382
|
return `{ ${parts.join(", ")} }`;
|
|
1383
1383
|
}
|
|
1384
1384
|
|
|
1385
|
+
// src/providers/catalog.ts
|
|
1386
|
+
var FIRST_PARTY_PROVIDERS = [
|
|
1387
|
+
{
|
|
1388
|
+
name: "cerebras",
|
|
1389
|
+
package: "@standardagents/cerebras",
|
|
1390
|
+
label: "Cerebras",
|
|
1391
|
+
envKey: "CEREBRAS_API_KEY"
|
|
1392
|
+
},
|
|
1393
|
+
{
|
|
1394
|
+
name: "openai",
|
|
1395
|
+
package: "@standardagents/openai",
|
|
1396
|
+
label: "OpenAI",
|
|
1397
|
+
envKey: "OPENAI_API_KEY"
|
|
1398
|
+
},
|
|
1399
|
+
{
|
|
1400
|
+
name: "openrouter",
|
|
1401
|
+
package: "@standardagents/openrouter",
|
|
1402
|
+
label: "OpenRouter",
|
|
1403
|
+
envKey: "OPENROUTER_API_KEY"
|
|
1404
|
+
}
|
|
1405
|
+
];
|
|
1406
|
+
function humanizeProviderName(name) {
|
|
1407
|
+
return name.split(/[-_]/g).filter(Boolean).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join(" ");
|
|
1408
|
+
}
|
|
1409
|
+
function packageToCustomProvider(pkg) {
|
|
1410
|
+
const name = pkg.split("/").pop() || pkg;
|
|
1411
|
+
return {
|
|
1412
|
+
name,
|
|
1413
|
+
package: pkg,
|
|
1414
|
+
label: humanizeProviderName(name),
|
|
1415
|
+
envKey: `${name.toUpperCase().replace(/-/g, "_")}_API_KEY`,
|
|
1416
|
+
isCustom: true
|
|
1417
|
+
};
|
|
1418
|
+
}
|
|
1419
|
+
function buildInstalledProviderCatalog(customProviderPackages = []) {
|
|
1420
|
+
const providers = [...FIRST_PARTY_PROVIDERS];
|
|
1421
|
+
const seen = new Set(providers.map((provider) => provider.name));
|
|
1422
|
+
for (const pkg of customProviderPackages) {
|
|
1423
|
+
const provider = packageToCustomProvider(pkg);
|
|
1424
|
+
if (seen.has(provider.name)) continue;
|
|
1425
|
+
providers.push(provider);
|
|
1426
|
+
seen.add(provider.name);
|
|
1427
|
+
}
|
|
1428
|
+
return providers;
|
|
1429
|
+
}
|
|
1430
|
+
function buildProviderPackageMap(customProviderPackages = []) {
|
|
1431
|
+
return Object.fromEntries(
|
|
1432
|
+
buildInstalledProviderCatalog(customProviderPackages).map((provider) => [
|
|
1433
|
+
provider.name,
|
|
1434
|
+
{
|
|
1435
|
+
name: provider.name,
|
|
1436
|
+
package: provider.package
|
|
1437
|
+
}
|
|
1438
|
+
])
|
|
1439
|
+
);
|
|
1440
|
+
}
|
|
1441
|
+
|
|
1385
1442
|
// src/sdk/persistence/index.ts
|
|
1386
|
-
var
|
|
1387
|
-
openai: { name: "openai", package: "@standardagents/openai" },
|
|
1388
|
-
openrouter: { name: "openrouter", package: "@standardagents/openrouter" },
|
|
1389
|
-
anthropic: { name: "anthropic", package: "@standardagents/anthropic" },
|
|
1390
|
-
google: { name: "google", package: "@standardagents/google" },
|
|
1391
|
-
test: { name: "test", package: "@standardagents/builder/test" }
|
|
1392
|
-
};
|
|
1443
|
+
var defaultProviderPackageMap = buildProviderPackageMap();
|
|
1393
1444
|
function nameToFilename(name) {
|
|
1394
1445
|
return name.replace(/[/\\]/g, "__").replace(/[:*?"<>|.]/g, "_").replace(/-/g, "_");
|
|
1395
1446
|
}
|
|
@@ -1401,7 +1452,7 @@ function modelExists(modelsDir, name) {
|
|
|
1401
1452
|
const filePath = getModelFilePath(modelsDir, name);
|
|
1402
1453
|
return fs4__default.existsSync(filePath);
|
|
1403
1454
|
}
|
|
1404
|
-
async function saveModel(modelsDir, data, overwrite = false) {
|
|
1455
|
+
async function saveModel(modelsDir, data, overwrite = false, providerPackageMap = defaultProviderPackageMap) {
|
|
1405
1456
|
try {
|
|
1406
1457
|
if (!fs4__default.existsSync(modelsDir)) {
|
|
1407
1458
|
fs4__default.mkdirSync(modelsDir, { recursive: true });
|
|
@@ -1413,11 +1464,11 @@ async function saveModel(modelsDir, data, overwrite = false) {
|
|
|
1413
1464
|
error: `Model file already exists: ${filePath}. Use update to modify existing models.`
|
|
1414
1465
|
};
|
|
1415
1466
|
}
|
|
1416
|
-
const providerInfo =
|
|
1467
|
+
const providerInfo = providerPackageMap[data.provider];
|
|
1417
1468
|
if (!providerInfo) {
|
|
1418
1469
|
return {
|
|
1419
1470
|
success: false,
|
|
1420
|
-
error: `Unknown provider '${data.provider}'. Must be one of: ${Object.keys(
|
|
1471
|
+
error: `Unknown provider '${data.provider}'. Must be one of: ${Object.keys(providerPackageMap).join(", ")}`
|
|
1421
1472
|
};
|
|
1422
1473
|
}
|
|
1423
1474
|
const content = generateModelFile(data, {
|
|
@@ -1480,7 +1531,7 @@ function transformModelData(data) {
|
|
|
1480
1531
|
}
|
|
1481
1532
|
return transformed;
|
|
1482
1533
|
}
|
|
1483
|
-
function
|
|
1534
|
+
function validateModelDataWithProviders(data, providerPackageMap) {
|
|
1484
1535
|
const errors = {};
|
|
1485
1536
|
if (!data.name || typeof data.name !== "string") {
|
|
1486
1537
|
errors["name"] = "Model name is required";
|
|
@@ -1488,7 +1539,7 @@ function validateModelData(data) {
|
|
|
1488
1539
|
if (!data.provider || typeof data.provider !== "string") {
|
|
1489
1540
|
errors["provider"] = "Provider is required";
|
|
1490
1541
|
} else {
|
|
1491
|
-
const validProviders = Object.keys(
|
|
1542
|
+
const validProviders = Object.keys(providerPackageMap);
|
|
1492
1543
|
if (!validProviders.includes(data.provider)) {
|
|
1493
1544
|
errors["provider"] = `Invalid provider '${data.provider}'. Must be one of: ${validProviders.join(", ")}`;
|
|
1494
1545
|
}
|
|
@@ -5274,6 +5325,8 @@ function agentbuilder(options = {}) {
|
|
|
5274
5325
|
const agentsDir = options.agentsDir ? path8__default.resolve(process.cwd(), options.agentsDir) : path8__default.resolve(process.cwd(), "agents/agents");
|
|
5275
5326
|
const effectsDir = options.effectsDir ? path8__default.resolve(process.cwd(), options.effectsDir) : path8__default.resolve(process.cwd(), "agents/effects");
|
|
5276
5327
|
const outputDir = path8__default.resolve(process.cwd(), ".agents");
|
|
5328
|
+
const installedProviders = buildInstalledProviderCatalog(options.providers || []);
|
|
5329
|
+
const installedProviderPackageMap = buildProviderPackageMap(options.providers || []);
|
|
5277
5330
|
const typeGenConfig = {
|
|
5278
5331
|
modelsDir,
|
|
5279
5332
|
promptsDir,
|
|
@@ -6245,18 +6298,7 @@ export const effectNames = ${JSON.stringify(effects.filter((e) => !e.error).map(
|
|
|
6245
6298
|
`;
|
|
6246
6299
|
}
|
|
6247
6300
|
if (id === RESOLVED_VIRTUAL_PROVIDERS_ID) {
|
|
6248
|
-
const
|
|
6249
|
-
{ name: "openai", package: "@standardagents/openai", label: "OpenAI", envKey: "OPENAI_API_KEY" },
|
|
6250
|
-
{ name: "openrouter", package: "@standardagents/openrouter", label: "OpenRouter", envKey: "OPENROUTER_API_KEY" }
|
|
6251
|
-
];
|
|
6252
|
-
const customProviders = (options.providers || []).map((pkg) => ({
|
|
6253
|
-
name: pkg.split("/").pop() || pkg,
|
|
6254
|
-
package: pkg,
|
|
6255
|
-
label: pkg.split("/").pop() || pkg,
|
|
6256
|
-
envKey: `${(pkg.split("/").pop() || pkg).toUpperCase().replace(/-/g, "_")}_API_KEY`,
|
|
6257
|
-
isCustom: true
|
|
6258
|
-
}));
|
|
6259
|
-
const allProviders = [...firstPartyProviders, ...customProviders];
|
|
6301
|
+
const allProviders = installedProviders;
|
|
6260
6302
|
return `// Virtual providers module - lists available LLM provider packages
|
|
6261
6303
|
export const providers = ${JSON.stringify(allProviders, null, 2)};
|
|
6262
6304
|
|
|
@@ -6695,7 +6737,7 @@ export class DurableAgentBuilder extends _BaseDurableAgentBuilder {
|
|
|
6695
6737
|
try {
|
|
6696
6738
|
const rawBody = await parseRequestBody(req);
|
|
6697
6739
|
const body = transformModelData(rawBody);
|
|
6698
|
-
const fieldErrors =
|
|
6740
|
+
const fieldErrors = validateModelDataWithProviders(body, installedProviderPackageMap);
|
|
6699
6741
|
if (fieldErrors) {
|
|
6700
6742
|
res.statusCode = 400;
|
|
6701
6743
|
res.setHeader("Content-Type", "application/json");
|
|
@@ -6708,7 +6750,7 @@ export class DurableAgentBuilder extends _BaseDurableAgentBuilder {
|
|
|
6708
6750
|
res.end(JSON.stringify({ error: `Model '${body.name}' already exists. Use PUT to update.` }));
|
|
6709
6751
|
return;
|
|
6710
6752
|
}
|
|
6711
|
-
const result = await saveModel(modelsDir, body, false);
|
|
6753
|
+
const result = await saveModel(modelsDir, body, false, installedProviderPackageMap);
|
|
6712
6754
|
if (result.success) {
|
|
6713
6755
|
await reloadModelsModule(server);
|
|
6714
6756
|
await reloadRouterModule(server);
|
|
@@ -6740,7 +6782,7 @@ export class DurableAgentBuilder extends _BaseDurableAgentBuilder {
|
|
|
6740
6782
|
const body = transformModelData(rawBody);
|
|
6741
6783
|
const newName = body.name;
|
|
6742
6784
|
const isNameChange = newName && newName !== urlModelName;
|
|
6743
|
-
const fieldErrors =
|
|
6785
|
+
const fieldErrors = validateModelDataWithProviders(body, installedProviderPackageMap);
|
|
6744
6786
|
if (fieldErrors) {
|
|
6745
6787
|
res.statusCode = 400;
|
|
6746
6788
|
res.setHeader("Content-Type", "application/json");
|
|
@@ -6758,7 +6800,7 @@ export class DurableAgentBuilder extends _BaseDurableAgentBuilder {
|
|
|
6758
6800
|
}
|
|
6759
6801
|
updatedPrompts = await updateModelReferencesInPrompts(promptsDir, urlModelName, newName);
|
|
6760
6802
|
}
|
|
6761
|
-
const result = await saveModel(modelsDir, body, true);
|
|
6803
|
+
const result = await saveModel(modelsDir, body, true, installedProviderPackageMap);
|
|
6762
6804
|
if (result.success) {
|
|
6763
6805
|
await reloadModelsModule(server);
|
|
6764
6806
|
if (updatedPrompts.length > 0) {
|