@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
|
@@ -793,6 +793,7 @@ interface LogData {
|
|
|
793
793
|
* User's Env interface should extend this or include these bindings.
|
|
794
794
|
*/
|
|
795
795
|
interface Env extends ThreadEnv {
|
|
796
|
+
CEREBRAS_API_KEY?: string;
|
|
796
797
|
OPENAI_API_KEY?: string;
|
|
797
798
|
ANTHROPIC_API_KEY?: string;
|
|
798
799
|
OPENROUTER_API_KEY?: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { AgentPluginOptions, agentbuilder } from './plugin.js';
|
|
2
|
-
import { T as ThreadEnv, a as ThreadMetadata, F as FileRecord, b as FlowState, M as Message, c as FileStats, G as GrepResult, A as AttachmentRef, d as MessageContent, E as Env, e as ThreadInstance } from './index-
|
|
3
|
-
export { k as Agent, j as BuilderThreadEndpointHandler, B as Controller, h as ControllerContext, n as FlowResult, q as ImageContentPart, I as ImageMetadata, L as LLMResponse, r as MultimodalContent, R as RequestContext, S as StorageBackend, o as TelemetryEvent, p as TextContentPart, i as ThreadEndpointContext, l as ToolCall, m as ToolResult, g as createThreadEndpointHandler, f as defineController } from './index-
|
|
2
|
+
import { T as ThreadEnv, a as ThreadMetadata, F as FileRecord, b as FlowState, M as Message, c as FileStats, G as GrepResult, A as AttachmentRef, d as MessageContent, E as Env, e as ThreadInstance } from './index-D8PIt3cR.js';
|
|
3
|
+
export { k as Agent, j as BuilderThreadEndpointHandler, B as Controller, h as ControllerContext, n as FlowResult, q as ImageContentPart, I as ImageMetadata, L as LLMResponse, r as MultimodalContent, R as RequestContext, S as StorageBackend, o as TelemetryEvent, p as TextContentPart, i as ThreadEndpointContext, l as ToolCall, m as ToolResult, g as createThreadEndpointHandler, f as defineController } from './index-D8PIt3cR.js';
|
|
4
4
|
import { SubagentRegistryEntry, QueueMessageInput, ModelDefinition as ModelDefinition$1, ToolArgs, PromptTextPart, PromptEnvPart, VariableDefinition, SubpromptConfig as SubpromptConfig$1, PromptToolConfig as PromptToolConfig$1, SubagentToolConfig as SubagentToolConfig$1, ReasoningConfig, SideConfig as SideConfig$1, LLMProviderInterface, ContentPart, TextPart, ImagePart, FilePart, NamespaceContext, DefinitionLoader } from '@standardagents/spec';
|
|
5
5
|
export { AgentType, DefinitionLoader, GlobalNamespaceContext, HookSignatures, ImageContent, ModelCapabilities, ModelProvider, NamespaceContext, PackageSignature, PackedExports, PackedMeta, PackedMetadata, PackedNamespaceContext, PromptInput, PromptTextPart, ProviderAssistantMessage, ProviderError, ProviderErrorCode, ProviderFactory, ProviderFactoryConfig, ProviderFinishReason, ProviderGeneratedImage, ProviderMessage, ProviderMessageContent, ModelCapabilities as ProviderModelCapabilities, ProviderReasoningDetail, ProviderRequest, ProviderResponse, ProviderStreamChunk, ProviderSystemMessage, ProviderTool, ProviderToolCallPart, ProviderToolMessage, ProviderToolResultContent, ProviderUsage, ProviderUserMessage, ReasoningConfig, StructuredPrompt, TextContent, Tool, ToolArgs, ToolArgsNode, ToolArgsRawShape, ToolContent, belongsToPackage, defineAgent, defineHook, defineModel, definePrompt, defineTool, isPacked, isVisibleInNamespace, mapReasoningLevel } from '@standardagents/spec';
|
|
6
6
|
import { DurableObject } from 'cloudflare:workers';
|
package/dist/index.js
CHANGED
|
@@ -662,6 +662,7 @@ var init_ProviderRegistry = __esm({
|
|
|
662
662
|
*/
|
|
663
663
|
getApiKeyForProvider(providerName, env) {
|
|
664
664
|
const apiKeyEnvVarMap = {
|
|
665
|
+
cerebras: "CEREBRAS_API_KEY",
|
|
665
666
|
openai: "OPENAI_API_KEY",
|
|
666
667
|
openrouter: "OPENROUTER_API_KEY",
|
|
667
668
|
anthropic: "ANTHROPIC_API_KEY",
|
|
@@ -12289,14 +12290,65 @@ function formatSessionBinding(binding) {
|
|
|
12289
12290
|
return `{ ${parts.join(", ")} }`;
|
|
12290
12291
|
}
|
|
12291
12292
|
|
|
12293
|
+
// src/providers/catalog.ts
|
|
12294
|
+
var FIRST_PARTY_PROVIDERS = [
|
|
12295
|
+
{
|
|
12296
|
+
name: "cerebras",
|
|
12297
|
+
package: "@standardagents/cerebras",
|
|
12298
|
+
label: "Cerebras",
|
|
12299
|
+
envKey: "CEREBRAS_API_KEY"
|
|
12300
|
+
},
|
|
12301
|
+
{
|
|
12302
|
+
name: "openai",
|
|
12303
|
+
package: "@standardagents/openai",
|
|
12304
|
+
label: "OpenAI",
|
|
12305
|
+
envKey: "OPENAI_API_KEY"
|
|
12306
|
+
},
|
|
12307
|
+
{
|
|
12308
|
+
name: "openrouter",
|
|
12309
|
+
package: "@standardagents/openrouter",
|
|
12310
|
+
label: "OpenRouter",
|
|
12311
|
+
envKey: "OPENROUTER_API_KEY"
|
|
12312
|
+
}
|
|
12313
|
+
];
|
|
12314
|
+
function humanizeProviderName(name) {
|
|
12315
|
+
return name.split(/[-_]/g).filter(Boolean).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join(" ");
|
|
12316
|
+
}
|
|
12317
|
+
function packageToCustomProvider(pkg) {
|
|
12318
|
+
const name = pkg.split("/").pop() || pkg;
|
|
12319
|
+
return {
|
|
12320
|
+
name,
|
|
12321
|
+
package: pkg,
|
|
12322
|
+
label: humanizeProviderName(name),
|
|
12323
|
+
envKey: `${name.toUpperCase().replace(/-/g, "_")}_API_KEY`,
|
|
12324
|
+
isCustom: true
|
|
12325
|
+
};
|
|
12326
|
+
}
|
|
12327
|
+
function buildInstalledProviderCatalog(customProviderPackages = []) {
|
|
12328
|
+
const providers = [...FIRST_PARTY_PROVIDERS];
|
|
12329
|
+
const seen = new Set(providers.map((provider) => provider.name));
|
|
12330
|
+
for (const pkg of customProviderPackages) {
|
|
12331
|
+
const provider = packageToCustomProvider(pkg);
|
|
12332
|
+
if (seen.has(provider.name)) continue;
|
|
12333
|
+
providers.push(provider);
|
|
12334
|
+
seen.add(provider.name);
|
|
12335
|
+
}
|
|
12336
|
+
return providers;
|
|
12337
|
+
}
|
|
12338
|
+
function buildProviderPackageMap(customProviderPackages = []) {
|
|
12339
|
+
return Object.fromEntries(
|
|
12340
|
+
buildInstalledProviderCatalog(customProviderPackages).map((provider) => [
|
|
12341
|
+
provider.name,
|
|
12342
|
+
{
|
|
12343
|
+
name: provider.name,
|
|
12344
|
+
package: provider.package
|
|
12345
|
+
}
|
|
12346
|
+
])
|
|
12347
|
+
);
|
|
12348
|
+
}
|
|
12349
|
+
|
|
12292
12350
|
// src/sdk/persistence/index.ts
|
|
12293
|
-
var
|
|
12294
|
-
openai: { name: "openai", package: "@standardagents/openai" },
|
|
12295
|
-
openrouter: { name: "openrouter", package: "@standardagents/openrouter" },
|
|
12296
|
-
anthropic: { name: "anthropic", package: "@standardagents/anthropic" },
|
|
12297
|
-
google: { name: "google", package: "@standardagents/google" },
|
|
12298
|
-
test: { name: "test", package: "@standardagents/builder/test" }
|
|
12299
|
-
};
|
|
12351
|
+
var defaultProviderPackageMap = buildProviderPackageMap();
|
|
12300
12352
|
function nameToFilename(name) {
|
|
12301
12353
|
return name.replace(/[/\\]/g, "__").replace(/[:*?"<>|.]/g, "_").replace(/-/g, "_");
|
|
12302
12354
|
}
|
|
@@ -12308,7 +12360,7 @@ function modelExists(modelsDir, name) {
|
|
|
12308
12360
|
const filePath = getModelFilePath(modelsDir, name);
|
|
12309
12361
|
return fs4__default.existsSync(filePath);
|
|
12310
12362
|
}
|
|
12311
|
-
async function saveModel(modelsDir, data, overwrite = false) {
|
|
12363
|
+
async function saveModel(modelsDir, data, overwrite = false, providerPackageMap = defaultProviderPackageMap) {
|
|
12312
12364
|
try {
|
|
12313
12365
|
if (!fs4__default.existsSync(modelsDir)) {
|
|
12314
12366
|
fs4__default.mkdirSync(modelsDir, { recursive: true });
|
|
@@ -12320,11 +12372,11 @@ async function saveModel(modelsDir, data, overwrite = false) {
|
|
|
12320
12372
|
error: `Model file already exists: ${filePath}. Use update to modify existing models.`
|
|
12321
12373
|
};
|
|
12322
12374
|
}
|
|
12323
|
-
const providerInfo =
|
|
12375
|
+
const providerInfo = providerPackageMap[data.provider];
|
|
12324
12376
|
if (!providerInfo) {
|
|
12325
12377
|
return {
|
|
12326
12378
|
success: false,
|
|
12327
|
-
error: `Unknown provider '${data.provider}'. Must be one of: ${Object.keys(
|
|
12379
|
+
error: `Unknown provider '${data.provider}'. Must be one of: ${Object.keys(providerPackageMap).join(", ")}`
|
|
12328
12380
|
};
|
|
12329
12381
|
}
|
|
12330
12382
|
const content = generateModelFile(data, {
|
|
@@ -12387,7 +12439,7 @@ function transformModelData(data) {
|
|
|
12387
12439
|
}
|
|
12388
12440
|
return transformed;
|
|
12389
12441
|
}
|
|
12390
|
-
function
|
|
12442
|
+
function validateModelDataWithProviders(data, providerPackageMap) {
|
|
12391
12443
|
const errors = {};
|
|
12392
12444
|
if (!data.name || typeof data.name !== "string") {
|
|
12393
12445
|
errors["name"] = "Model name is required";
|
|
@@ -12395,7 +12447,7 @@ function validateModelData(data) {
|
|
|
12395
12447
|
if (!data.provider || typeof data.provider !== "string") {
|
|
12396
12448
|
errors["provider"] = "Provider is required";
|
|
12397
12449
|
} else {
|
|
12398
|
-
const validProviders = Object.keys(
|
|
12450
|
+
const validProviders = Object.keys(providerPackageMap);
|
|
12399
12451
|
if (!validProviders.includes(data.provider)) {
|
|
12400
12452
|
errors["provider"] = `Invalid provider '${data.provider}'. Must be one of: ${validProviders.join(", ")}`;
|
|
12401
12453
|
}
|
|
@@ -16185,6 +16237,8 @@ function agentbuilder(options = {}) {
|
|
|
16185
16237
|
const agentsDir = options.agentsDir ? path8__default.resolve(process.cwd(), options.agentsDir) : path8__default.resolve(process.cwd(), "agents/agents");
|
|
16186
16238
|
const effectsDir = options.effectsDir ? path8__default.resolve(process.cwd(), options.effectsDir) : path8__default.resolve(process.cwd(), "agents/effects");
|
|
16187
16239
|
const outputDir = path8__default.resolve(process.cwd(), ".agents");
|
|
16240
|
+
const installedProviders = buildInstalledProviderCatalog(options.providers || []);
|
|
16241
|
+
const installedProviderPackageMap = buildProviderPackageMap(options.providers || []);
|
|
16188
16242
|
const typeGenConfig = {
|
|
16189
16243
|
modelsDir,
|
|
16190
16244
|
promptsDir,
|
|
@@ -17156,18 +17210,7 @@ export const effectNames = ${JSON.stringify(effects.filter((e) => !e.error).map(
|
|
|
17156
17210
|
`;
|
|
17157
17211
|
}
|
|
17158
17212
|
if (id === RESOLVED_VIRTUAL_PROVIDERS_ID) {
|
|
17159
|
-
const
|
|
17160
|
-
{ name: "openai", package: "@standardagents/openai", label: "OpenAI", envKey: "OPENAI_API_KEY" },
|
|
17161
|
-
{ name: "openrouter", package: "@standardagents/openrouter", label: "OpenRouter", envKey: "OPENROUTER_API_KEY" }
|
|
17162
|
-
];
|
|
17163
|
-
const customProviders = (options.providers || []).map((pkg) => ({
|
|
17164
|
-
name: pkg.split("/").pop() || pkg,
|
|
17165
|
-
package: pkg,
|
|
17166
|
-
label: pkg.split("/").pop() || pkg,
|
|
17167
|
-
envKey: `${(pkg.split("/").pop() || pkg).toUpperCase().replace(/-/g, "_")}_API_KEY`,
|
|
17168
|
-
isCustom: true
|
|
17169
|
-
}));
|
|
17170
|
-
const allProviders = [...firstPartyProviders, ...customProviders];
|
|
17213
|
+
const allProviders = installedProviders;
|
|
17171
17214
|
return `// Virtual providers module - lists available LLM provider packages
|
|
17172
17215
|
export const providers = ${JSON.stringify(allProviders, null, 2)};
|
|
17173
17216
|
|
|
@@ -17606,7 +17649,7 @@ export class DurableAgentBuilder extends _BaseDurableAgentBuilder {
|
|
|
17606
17649
|
try {
|
|
17607
17650
|
const rawBody = await parseRequestBody(req);
|
|
17608
17651
|
const body = transformModelData(rawBody);
|
|
17609
|
-
const fieldErrors =
|
|
17652
|
+
const fieldErrors = validateModelDataWithProviders(body, installedProviderPackageMap);
|
|
17610
17653
|
if (fieldErrors) {
|
|
17611
17654
|
res.statusCode = 400;
|
|
17612
17655
|
res.setHeader("Content-Type", "application/json");
|
|
@@ -17619,7 +17662,7 @@ export class DurableAgentBuilder extends _BaseDurableAgentBuilder {
|
|
|
17619
17662
|
res.end(JSON.stringify({ error: `Model '${body.name}' already exists. Use PUT to update.` }));
|
|
17620
17663
|
return;
|
|
17621
17664
|
}
|
|
17622
|
-
const result = await saveModel(modelsDir, body, false);
|
|
17665
|
+
const result = await saveModel(modelsDir, body, false, installedProviderPackageMap);
|
|
17623
17666
|
if (result.success) {
|
|
17624
17667
|
await reloadModelsModule(server);
|
|
17625
17668
|
await reloadRouterModule(server);
|
|
@@ -17651,7 +17694,7 @@ export class DurableAgentBuilder extends _BaseDurableAgentBuilder {
|
|
|
17651
17694
|
const body = transformModelData(rawBody);
|
|
17652
17695
|
const newName = body.name;
|
|
17653
17696
|
const isNameChange = newName && newName !== urlModelName;
|
|
17654
|
-
const fieldErrors =
|
|
17697
|
+
const fieldErrors = validateModelDataWithProviders(body, installedProviderPackageMap);
|
|
17655
17698
|
if (fieldErrors) {
|
|
17656
17699
|
res.statusCode = 400;
|
|
17657
17700
|
res.setHeader("Content-Type", "application/json");
|
|
@@ -17669,7 +17712,7 @@ export class DurableAgentBuilder extends _BaseDurableAgentBuilder {
|
|
|
17669
17712
|
}
|
|
17670
17713
|
updatedPrompts = await updateModelReferencesInPrompts(promptsDir, urlModelName, newName);
|
|
17671
17714
|
}
|
|
17672
|
-
const result = await saveModel(modelsDir, body, true);
|
|
17715
|
+
const result = await saveModel(modelsDir, body, true, installedProviderPackageMap);
|
|
17673
17716
|
if (result.success) {
|
|
17674
17717
|
await reloadModelsModule(server);
|
|
17675
17718
|
if (updatedPrompts.length > 0) {
|