@standardagents/builder 0.11.0-next.56def20 → 0.11.0-next.5d2e71b
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 +6913 -22753
- package/dist/built-in-routes.js.map +1 -1
- package/dist/client/assets/img/meta.svg +19 -0
- package/dist/client/assets/img/moonshotai.svg +4 -0
- package/dist/client/assets/img/zai.svg +219 -0
- package/dist/client/assets/index.css +1 -1
- package/dist/client/index.js +23 -26
- package/dist/client/vendor.js +1 -1
- package/dist/client/vue.js +1 -1
- package/dist/index.d.ts +26 -224
- package/dist/index.js +1215 -3085
- package/dist/index.js.map +1 -1
- package/dist/plugin.d.ts +0 -6
- package/dist/plugin.js +56 -229
- package/dist/plugin.js.map +1 -1
- package/package.json +4 -4
package/dist/plugin.d.ts
CHANGED
|
@@ -9,12 +9,6 @@ interface AgentPluginOptions {
|
|
|
9
9
|
promptsDir?: string;
|
|
10
10
|
agentsDir?: string;
|
|
11
11
|
effectsDir?: string;
|
|
12
|
-
/**
|
|
13
|
-
* Additional provider packages to expose in the UI.
|
|
14
|
-
* First-party providers (@standardagents/openai, @standardagents/openrouter) are always included.
|
|
15
|
-
* @example ['my-custom-provider', '@company/custom-openai']
|
|
16
|
-
*/
|
|
17
|
-
providers?: string[];
|
|
18
12
|
}
|
|
19
13
|
declare function agentbuilder(options?: AgentPluginOptions): Plugin;
|
|
20
14
|
|
package/dist/plugin.js
CHANGED
|
@@ -397,9 +397,6 @@ declare module 'virtual:@standardagents/builder' {
|
|
|
397
397
|
listThreads(params?: {
|
|
398
398
|
agent_name?: string;
|
|
399
399
|
user_id?: string;
|
|
400
|
-
search?: string;
|
|
401
|
-
startDate?: number;
|
|
402
|
-
endDate?: number;
|
|
403
400
|
limit?: number;
|
|
404
401
|
offset?: number;
|
|
405
402
|
}): Promise<{ threads: ThreadRegistryEntry[]; total: number }>;
|
|
@@ -581,91 +578,14 @@ function needsRegeneration(config) {
|
|
|
581
578
|
return false;
|
|
582
579
|
}
|
|
583
580
|
|
|
584
|
-
// src/utils/model-parser.ts
|
|
585
|
-
function getName(content) {
|
|
586
|
-
return content.match(/name:\s*['"]([^'"]+)['"]/)?.[1];
|
|
587
|
-
}
|
|
588
|
-
function getProvider(content) {
|
|
589
|
-
const stringMatch = content.match(/provider:\s*['"]([^'"]+)['"]/)?.[1];
|
|
590
|
-
if (stringMatch) return stringMatch;
|
|
591
|
-
const refMatch = content.match(/provider:\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*[,\n}]/)?.[1];
|
|
592
|
-
return refMatch || void 0;
|
|
593
|
-
}
|
|
594
|
-
function getModel(content) {
|
|
595
|
-
return content.match(/model:\s*['"]([^'"]+)['"]/)?.[1];
|
|
596
|
-
}
|
|
597
|
-
function getInputPrice(content) {
|
|
598
|
-
const match = content.match(/inputPrice:\s*([\d.]+)/);
|
|
599
|
-
return match ? parseFloat(match[1]) : void 0;
|
|
600
|
-
}
|
|
601
|
-
function getOutputPrice(content) {
|
|
602
|
-
const match = content.match(/outputPrice:\s*([\d.]+)/);
|
|
603
|
-
return match ? parseFloat(match[1]) : void 0;
|
|
604
|
-
}
|
|
605
|
-
function getCachedPrice(content) {
|
|
606
|
-
const match = content.match(/cachedPrice:\s*([\d.]+)/);
|
|
607
|
-
return match ? parseFloat(match[1]) : void 0;
|
|
608
|
-
}
|
|
609
|
-
function getIncludedProviders(content) {
|
|
610
|
-
const match = content.match(/includedProviders:\s*\[([^\]]*)\]/);
|
|
611
|
-
if (!match) return void 0;
|
|
612
|
-
const items = match[1].match(/['"]([^'"]+)['"]/g);
|
|
613
|
-
return items ? items.map((s) => s.replace(/['"]/g, "")) : [];
|
|
614
|
-
}
|
|
615
|
-
function getFallbacks(content) {
|
|
616
|
-
const match = content.match(/fallbacks:\s*\[([^\]]*)\]/);
|
|
617
|
-
if (!match) return [];
|
|
618
|
-
const items = match[1].match(/['"]([^'"]+)['"]/g);
|
|
619
|
-
return items ? items.map((s) => s.replace(/['"]/g, "")) : [];
|
|
620
|
-
}
|
|
621
|
-
function getProviderTools(content) {
|
|
622
|
-
const match = content.match(/providerTools:\s*\[([^\]]*)\]/);
|
|
623
|
-
if (!match) return [];
|
|
624
|
-
const items = match[1].match(/['"]([^'"]+)['"]/g);
|
|
625
|
-
return items ? items.map((s) => s.replace(/['"]/g, "")) : [];
|
|
626
|
-
}
|
|
627
|
-
function getCapabilities(content) {
|
|
628
|
-
const match = content.match(/capabilities:\s*\{([^}]*)\}/s);
|
|
629
|
-
if (!match) return void 0;
|
|
630
|
-
const inner = match[1];
|
|
631
|
-
const caps = {};
|
|
632
|
-
const boolMatches = inner.matchAll(/(\w+):\s*(true|false)/g);
|
|
633
|
-
for (const m of boolMatches) {
|
|
634
|
-
caps[m[1]] = m[2] === "true";
|
|
635
|
-
}
|
|
636
|
-
const numMatches = inner.matchAll(/(\w+):\s*(\d+)/g);
|
|
637
|
-
for (const m of numMatches) {
|
|
638
|
-
caps[m[1]] = parseInt(m[2], 10);
|
|
639
|
-
}
|
|
640
|
-
return Object.keys(caps).length > 0 ? caps : void 0;
|
|
641
|
-
}
|
|
642
|
-
function parseModelFile(content) {
|
|
643
|
-
const name = getName(content);
|
|
644
|
-
if (!name) return null;
|
|
645
|
-
return {
|
|
646
|
-
name,
|
|
647
|
-
provider: getProvider(content),
|
|
648
|
-
model: getModel(content),
|
|
649
|
-
inputPrice: getInputPrice(content),
|
|
650
|
-
outputPrice: getOutputPrice(content),
|
|
651
|
-
cachedPrice: getCachedPrice(content),
|
|
652
|
-
includedProviders: getIncludedProviders(content),
|
|
653
|
-
fallbacks: getFallbacks(content),
|
|
654
|
-
providerTools: getProviderTools(content),
|
|
655
|
-
capabilities: getCapabilities(content)
|
|
656
|
-
};
|
|
657
|
-
}
|
|
658
|
-
|
|
659
581
|
// src/sdk/generators/generateModelFile.ts
|
|
660
|
-
function generateModelFile(data
|
|
661
|
-
const { providerName, providerPackage } = options;
|
|
582
|
+
function generateModelFile(data) {
|
|
662
583
|
const lines = [
|
|
663
584
|
`import { defineModel } from '@standardagents/builder';`,
|
|
664
|
-
`import { ${providerName} } from '${providerPackage}';`,
|
|
665
585
|
"",
|
|
666
586
|
`export default defineModel({`,
|
|
667
587
|
` name: '${escapeString(data.name)}',`,
|
|
668
|
-
` provider: ${
|
|
588
|
+
` provider: '${escapeString(data.provider)}',`,
|
|
669
589
|
` model: '${escapeString(data.model)}',`
|
|
670
590
|
];
|
|
671
591
|
if (data.includedProviders && data.includedProviders.length > 0) {
|
|
@@ -674,9 +594,6 @@ function generateModelFile(data, options) {
|
|
|
674
594
|
if (data.fallbacks && data.fallbacks.length > 0) {
|
|
675
595
|
lines.push(` fallbacks: ${JSON.stringify(data.fallbacks)},`);
|
|
676
596
|
}
|
|
677
|
-
if (data.providerTools && data.providerTools.length > 0) {
|
|
678
|
-
lines.push(` providerTools: ${JSON.stringify(data.providerTools)},`);
|
|
679
|
-
}
|
|
680
597
|
if (data.inputPrice !== void 0) {
|
|
681
598
|
lines.push(` inputPrice: ${data.inputPrice},`);
|
|
682
599
|
}
|
|
@@ -686,36 +603,6 @@ function generateModelFile(data, options) {
|
|
|
686
603
|
if (data.cachedPrice !== void 0) {
|
|
687
604
|
lines.push(` cachedPrice: ${data.cachedPrice},`);
|
|
688
605
|
}
|
|
689
|
-
if (data.capabilities && Object.keys(data.capabilities).length > 0) {
|
|
690
|
-
const caps = data.capabilities;
|
|
691
|
-
const capLines = [];
|
|
692
|
-
if (caps.supportsImages !== void 0) {
|
|
693
|
-
capLines.push(` supportsImages: ${caps.supportsImages},`);
|
|
694
|
-
}
|
|
695
|
-
if (caps.supportsToolCalls !== void 0) {
|
|
696
|
-
capLines.push(` supportsToolCalls: ${caps.supportsToolCalls},`);
|
|
697
|
-
}
|
|
698
|
-
if (caps.supportsStreaming !== void 0) {
|
|
699
|
-
capLines.push(` supportsStreaming: ${caps.supportsStreaming},`);
|
|
700
|
-
}
|
|
701
|
-
if (caps.supportsJsonMode !== void 0) {
|
|
702
|
-
capLines.push(` supportsJsonMode: ${caps.supportsJsonMode},`);
|
|
703
|
-
}
|
|
704
|
-
if (caps.maxContextTokens !== void 0) {
|
|
705
|
-
capLines.push(` maxContextTokens: ${caps.maxContextTokens},`);
|
|
706
|
-
}
|
|
707
|
-
if (caps.maxOutputTokens !== void 0) {
|
|
708
|
-
capLines.push(` maxOutputTokens: ${caps.maxOutputTokens},`);
|
|
709
|
-
}
|
|
710
|
-
if (caps.reasoningLevels !== void 0) {
|
|
711
|
-
capLines.push(` reasoningLevels: ${JSON.stringify(caps.reasoningLevels)},`);
|
|
712
|
-
}
|
|
713
|
-
if (capLines.length > 0) {
|
|
714
|
-
lines.push(` capabilities: {`);
|
|
715
|
-
lines.push(...capLines);
|
|
716
|
-
lines.push(` },`);
|
|
717
|
-
}
|
|
718
|
-
}
|
|
719
606
|
lines.push(`});`);
|
|
720
607
|
lines.push("");
|
|
721
608
|
return lines.join("\n");
|
|
@@ -970,12 +857,6 @@ function formatToolConfig(config) {
|
|
|
970
857
|
if (config.init_user_message_property !== void 0 && config.init_user_message_property !== null) {
|
|
971
858
|
parts.push(`initUserMessageProperty: '${escapeString2(config.init_user_message_property)}'`);
|
|
972
859
|
}
|
|
973
|
-
if (config.init_attachments_property !== void 0 && config.init_attachments_property !== null) {
|
|
974
|
-
parts.push(`initAttachmentsProperty: '${escapeString2(config.init_attachments_property)}'`);
|
|
975
|
-
}
|
|
976
|
-
if (config.tenvs && Object.keys(config.tenvs).length > 0) {
|
|
977
|
-
parts.push(`tenvs: ${JSON.stringify(config.tenvs)}`);
|
|
978
|
-
}
|
|
979
860
|
return `{ ${parts.join(", ")} }`;
|
|
980
861
|
}
|
|
981
862
|
function formatReasoningConfig(reasoning) {
|
|
@@ -1108,9 +989,6 @@ function generateAgentFile(data) {
|
|
|
1108
989
|
if (data.toolDescription) {
|
|
1109
990
|
lines.push(` toolDescription: '${escapeString3(data.toolDescription)}',`);
|
|
1110
991
|
}
|
|
1111
|
-
if (data.tenvs && Object.keys(data.tenvs).length > 0) {
|
|
1112
|
-
lines.push(` tenvs: ${JSON.stringify(data.tenvs)},`);
|
|
1113
|
-
}
|
|
1114
992
|
lines.push(`});`);
|
|
1115
993
|
lines.push("");
|
|
1116
994
|
return lines.join("\n");
|
|
@@ -1147,15 +1025,8 @@ function escapeString3(str) {
|
|
|
1147
1025
|
}
|
|
1148
1026
|
|
|
1149
1027
|
// src/sdk/persistence/index.ts
|
|
1150
|
-
var PROVIDER_PACKAGE_MAP = {
|
|
1151
|
-
openai: { name: "openai", package: "@standardagents/openai" },
|
|
1152
|
-
openrouter: { name: "openrouter", package: "@standardagents/openrouter" },
|
|
1153
|
-
anthropic: { name: "anthropic", package: "@standardagents/anthropic" },
|
|
1154
|
-
google: { name: "google", package: "@standardagents/google" },
|
|
1155
|
-
test: { name: "test", package: "@standardagents/builder/test" }
|
|
1156
|
-
};
|
|
1157
1028
|
function nameToFilename(name) {
|
|
1158
|
-
return name.replace(/[/\\]/g, "__").replace(/[:*?"
|
|
1029
|
+
return name.replace(/[/\\]/g, "__").replace(/[:*?"<>|]/g, "_").replace(/-/g, "_");
|
|
1159
1030
|
}
|
|
1160
1031
|
function getModelFilePath(modelsDir, name) {
|
|
1161
1032
|
const filename = nameToFilename(name);
|
|
@@ -1177,17 +1048,7 @@ async function saveModel(modelsDir, data, overwrite = false) {
|
|
|
1177
1048
|
error: `Model file already exists: ${filePath}. Use update to modify existing models.`
|
|
1178
1049
|
};
|
|
1179
1050
|
}
|
|
1180
|
-
const
|
|
1181
|
-
if (!providerInfo) {
|
|
1182
|
-
return {
|
|
1183
|
-
success: false,
|
|
1184
|
-
error: `Unknown provider '${data.provider}'. Must be one of: ${Object.keys(PROVIDER_PACKAGE_MAP).join(", ")}`
|
|
1185
|
-
};
|
|
1186
|
-
}
|
|
1187
|
-
const content = generateModelFile(data, {
|
|
1188
|
-
providerName: providerInfo.name,
|
|
1189
|
-
providerPackage: providerInfo.package
|
|
1190
|
-
});
|
|
1051
|
+
const content = generateModelFile(data);
|
|
1191
1052
|
await fs2.promises.writeFile(filePath, content, "utf-8");
|
|
1192
1053
|
return {
|
|
1193
1054
|
success: true,
|
|
@@ -1251,7 +1112,7 @@ function validateModelData(data) {
|
|
|
1251
1112
|
if (!data.provider || typeof data.provider !== "string") {
|
|
1252
1113
|
return "Model provider is required and must be a string";
|
|
1253
1114
|
}
|
|
1254
|
-
const validProviders =
|
|
1115
|
+
const validProviders = ["openai", "openrouter", "anthropic", "google", "test"];
|
|
1255
1116
|
if (!validProviders.includes(data.provider)) {
|
|
1256
1117
|
return `Invalid provider '${data.provider}'. Must be one of: ${validProviders.join(", ")}`;
|
|
1257
1118
|
}
|
|
@@ -1775,8 +1636,6 @@ var VIRTUAL_AGENTS_ID = "virtual:@standardagents-agents";
|
|
|
1775
1636
|
var RESOLVED_VIRTUAL_AGENTS_ID = "\0" + VIRTUAL_AGENTS_ID;
|
|
1776
1637
|
var VIRTUAL_EFFECTS_ID = "virtual:@standardagents-effects";
|
|
1777
1638
|
var RESOLVED_VIRTUAL_EFFECTS_ID = "\0" + VIRTUAL_EFFECTS_ID;
|
|
1778
|
-
var VIRTUAL_PROVIDERS_ID = "virtual:@standardagents-providers";
|
|
1779
|
-
var RESOLVED_VIRTUAL_PROVIDERS_ID = "\0" + VIRTUAL_PROVIDERS_ID;
|
|
1780
1639
|
var VIRTUAL_BUILDER_ID = "virtual:@standardagents/builder";
|
|
1781
1640
|
var RESOLVED_VIRTUAL_BUILDER_ID = "\0" + VIRTUAL_BUILDER_ID;
|
|
1782
1641
|
function scanApiDirectory(dir, baseRoute = "") {
|
|
@@ -2253,9 +2112,6 @@ function agentbuilder(options = {}) {
|
|
|
2253
2112
|
];
|
|
2254
2113
|
const depsToInclude = [
|
|
2255
2114
|
"zod",
|
|
2256
|
-
"zod/v3",
|
|
2257
|
-
"zod/v4",
|
|
2258
|
-
"zod/v4/core",
|
|
2259
2115
|
"openai"
|
|
2260
2116
|
];
|
|
2261
2117
|
config.optimizeDeps = config.optimizeDeps || {};
|
|
@@ -2296,9 +2152,6 @@ function agentbuilder(options = {}) {
|
|
|
2296
2152
|
if (id === VIRTUAL_EFFECTS_ID) {
|
|
2297
2153
|
return RESOLVED_VIRTUAL_EFFECTS_ID;
|
|
2298
2154
|
}
|
|
2299
|
-
if (id === VIRTUAL_PROVIDERS_ID) {
|
|
2300
|
-
return RESOLVED_VIRTUAL_PROVIDERS_ID;
|
|
2301
|
-
}
|
|
2302
2155
|
if (id === VIRTUAL_BUILDER_ID) {
|
|
2303
2156
|
return RESOLVED_VIRTUAL_BUILDER_ID;
|
|
2304
2157
|
}
|
|
@@ -2374,11 +2227,6 @@ function isPublicRoute(routePath) {
|
|
|
2374
2227
|
return true;
|
|
2375
2228
|
}
|
|
2376
2229
|
|
|
2377
|
-
// Provider icon routes are public (used by <img src>)
|
|
2378
|
-
if (routePath.startsWith('/api/providers/') && routePath.includes('/icon')) {
|
|
2379
|
-
return true;
|
|
2380
|
-
}
|
|
2381
|
-
|
|
2382
2230
|
return false;
|
|
2383
2231
|
}
|
|
2384
2232
|
|
|
@@ -2398,32 +2246,6 @@ function corsHeaders(contentType) {
|
|
|
2398
2246
|
};
|
|
2399
2247
|
}
|
|
2400
2248
|
|
|
2401
|
-
// Helper to add CORS headers to any Response without touching the body
|
|
2402
|
-
function addCorsHeaders(response) {
|
|
2403
|
-
// Skip WebSocket upgrade responses - they can't be wrapped
|
|
2404
|
-
if (response.status === 101) {
|
|
2405
|
-
return response;
|
|
2406
|
-
}
|
|
2407
|
-
|
|
2408
|
-
// Skip if already has CORS headers
|
|
2409
|
-
if (response.headers.has("Access-Control-Allow-Origin")) {
|
|
2410
|
-
return response;
|
|
2411
|
-
}
|
|
2412
|
-
|
|
2413
|
-
// Create new headers with CORS added
|
|
2414
|
-
const newHeaders = new Headers(response.headers);
|
|
2415
|
-
for (const [key, value] of Object.entries(CORS_HEADERS)) {
|
|
2416
|
-
newHeaders.set(key, value);
|
|
2417
|
-
}
|
|
2418
|
-
|
|
2419
|
-
// Return new Response with same body stream (not cloned, just transferred)
|
|
2420
|
-
return new Response(response.body, {
|
|
2421
|
-
status: response.status,
|
|
2422
|
-
statusText: response.statusText,
|
|
2423
|
-
headers: newHeaders,
|
|
2424
|
-
});
|
|
2425
|
-
}
|
|
2426
|
-
|
|
2427
2249
|
export async function router(request, env) {
|
|
2428
2250
|
const url = new URL(request.url);
|
|
2429
2251
|
const pathname = url.pathname;
|
|
@@ -2475,7 +2297,7 @@ ${threadRouteCode}
|
|
|
2475
2297
|
|
|
2476
2298
|
// If requireAuth returns a Response, it's an error (401)
|
|
2477
2299
|
if (authResult instanceof Response) {
|
|
2478
|
-
return
|
|
2300
|
+
return authResult;
|
|
2479
2301
|
}
|
|
2480
2302
|
|
|
2481
2303
|
authContext = authResult;
|
|
@@ -2494,7 +2316,11 @@ ${threadRouteCode}
|
|
|
2494
2316
|
const result = await controller(context);
|
|
2495
2317
|
|
|
2496
2318
|
if (result instanceof Response) {
|
|
2497
|
-
|
|
2319
|
+
// Return Response objects as-is - CORS headers can't be safely added
|
|
2320
|
+
// to Response objects in the workerd environment without issues.
|
|
2321
|
+
// Controllers that return streaming/binary responses should add
|
|
2322
|
+
// CORS headers themselves if needed.
|
|
2323
|
+
return result;
|
|
2498
2324
|
}
|
|
2499
2325
|
if (typeof result === "string") {
|
|
2500
2326
|
return new Response(result, {
|
|
@@ -2699,30 +2525,6 @@ ${effectsCode}
|
|
|
2699
2525
|
};
|
|
2700
2526
|
|
|
2701
2527
|
export const effectNames = ${JSON.stringify(effects.filter((e) => !e.error).map((e) => e.name))};
|
|
2702
|
-
`;
|
|
2703
|
-
}
|
|
2704
|
-
if (id === RESOLVED_VIRTUAL_PROVIDERS_ID) {
|
|
2705
|
-
const firstPartyProviders = [
|
|
2706
|
-
{ name: "openai", package: "@standardagents/openai", label: "OpenAI", envKey: "OPENAI_API_KEY" },
|
|
2707
|
-
{ name: "openrouter", package: "@standardagents/openrouter", label: "OpenRouter", envKey: "OPENROUTER_API_KEY" }
|
|
2708
|
-
];
|
|
2709
|
-
const customProviders = (options.providers || []).map((pkg) => ({
|
|
2710
|
-
name: pkg.split("/").pop() || pkg,
|
|
2711
|
-
package: pkg,
|
|
2712
|
-
label: pkg.split("/").pop() || pkg,
|
|
2713
|
-
envKey: `${(pkg.split("/").pop() || pkg).toUpperCase().replace(/-/g, "_")}_API_KEY`,
|
|
2714
|
-
isCustom: true
|
|
2715
|
-
}));
|
|
2716
|
-
const allProviders = [...firstPartyProviders, ...customProviders];
|
|
2717
|
-
return `// Virtual providers module - lists available LLM provider packages
|
|
2718
|
-
export const providers = ${JSON.stringify(allProviders, null, 2)};
|
|
2719
|
-
|
|
2720
|
-
export const providerNames = ${JSON.stringify(allProviders.map((p) => p.name))};
|
|
2721
|
-
|
|
2722
|
-
// Provider factories - dynamic imports for code splitting
|
|
2723
|
-
export const providerFactories = {
|
|
2724
|
-
${allProviders.map((p) => ` "${p.name}": async () => (await import("${p.package}")).${p.name},`).join("\n")}
|
|
2725
|
-
};
|
|
2726
2528
|
`;
|
|
2727
2529
|
}
|
|
2728
2530
|
if (id === RESOLVED_VIRTUAL_BUILDER_ID) {
|
|
@@ -2976,26 +2778,51 @@ export class DurableAgentBuilder extends _BaseDurableAgentBuilder {
|
|
|
2976
2778
|
try {
|
|
2977
2779
|
const filePath = path3.join(modelsDir, file);
|
|
2978
2780
|
const content = fs4.readFileSync(filePath, "utf-8");
|
|
2979
|
-
const
|
|
2980
|
-
|
|
2981
|
-
const
|
|
2781
|
+
const getName = (c) => c.match(/name:\s*['"]([^'"]+)['"]/)?.[1];
|
|
2782
|
+
const getProvider = (c) => c.match(/provider:\s*['"]([^'"]+)['"]/)?.[1];
|
|
2783
|
+
const getModel = (c) => c.match(/model:\s*['"]([^'"]+)['"]/)?.[1];
|
|
2784
|
+
const getInputPrice = (c) => {
|
|
2785
|
+
const match = c.match(/inputPrice:\s*([\d.]+)/);
|
|
2786
|
+
return match ? parseFloat(match[1]) : void 0;
|
|
2787
|
+
};
|
|
2788
|
+
const getOutputPrice = (c) => {
|
|
2789
|
+
const match = c.match(/outputPrice:\s*([\d.]+)/);
|
|
2790
|
+
return match ? parseFloat(match[1]) : void 0;
|
|
2791
|
+
};
|
|
2792
|
+
const getCachedPrice = (c) => {
|
|
2793
|
+
const match = c.match(/cachedPrice:\s*([\d.]+)/);
|
|
2794
|
+
return match ? parseFloat(match[1]) : void 0;
|
|
2795
|
+
};
|
|
2796
|
+
const getIncludedProviders = (c) => {
|
|
2797
|
+
const match = c.match(/includedProviders:\s*\[([^\]]*)\]/);
|
|
2798
|
+
if (!match) return void 0;
|
|
2799
|
+
const items = match[1].match(/['"]([^'"]+)['"]/g);
|
|
2800
|
+
return items ? items.map((s) => s.replace(/['"]/g, "")) : [];
|
|
2801
|
+
};
|
|
2802
|
+
const getFallbacks = (c) => {
|
|
2803
|
+
const match = c.match(/fallbacks:\s*\[([^\]]*)\]/);
|
|
2804
|
+
if (!match) return [];
|
|
2805
|
+
const items = match[1].match(/['"]([^'"]+)['"]/g);
|
|
2806
|
+
return items ? items.map((s) => s.replace(/['"]/g, "")) : [];
|
|
2807
|
+
};
|
|
2808
|
+
const name = getName(content);
|
|
2809
|
+
if (!name) return null;
|
|
2810
|
+
const fallbacks = getFallbacks(content);
|
|
2811
|
+
const fallbackObjects = fallbacks.map((fallbackName, index) => ({
|
|
2982
2812
|
id: fallbackName,
|
|
2983
2813
|
name: fallbackName,
|
|
2984
2814
|
order: index
|
|
2985
2815
|
}));
|
|
2986
2816
|
return {
|
|
2987
|
-
id:
|
|
2988
|
-
name
|
|
2989
|
-
provider:
|
|
2990
|
-
|
|
2991
|
-
|
|
2992
|
-
|
|
2993
|
-
|
|
2994
|
-
|
|
2995
|
-
included_providers: parsed.includedProviders,
|
|
2817
|
+
id: name,
|
|
2818
|
+
name,
|
|
2819
|
+
provider: getProvider(content),
|
|
2820
|
+
model: getModel(content),
|
|
2821
|
+
input_price: getInputPrice(content),
|
|
2822
|
+
output_price: getOutputPrice(content),
|
|
2823
|
+
cached_price: getCachedPrice(content),
|
|
2824
|
+
included_providers: getIncludedProviders(content),
|
|
2996
2825
|
fallbacks: fallbackObjects,
|
|
2997
|
-
providerTools: parsed.providerTools,
|
|
2998
|
-
capabilities: parsed.capabilities,
|
|
2999
2826
|
created_at: Math.floor(Date.now() / 1e3)
|
|
3000
2827
|
};
|
|
3001
2828
|
} catch (error) {
|
|
@@ -3161,9 +2988,9 @@ export class DurableAgentBuilder extends _BaseDurableAgentBuilder {
|
|
|
3161
2988
|
try {
|
|
3162
2989
|
const filePath = path3.join(promptsDir, file);
|
|
3163
2990
|
const content = fs4.readFileSync(filePath, "utf-8");
|
|
3164
|
-
const
|
|
2991
|
+
const getName = (c) => c.match(/name:\s*['"]([^'"]+)['"]/)?.[1];
|
|
3165
2992
|
const getToolDescription = (c) => c.match(/toolDescription:\s*['"]([^'"]+)['"]/)?.[1];
|
|
3166
|
-
const
|
|
2993
|
+
const getModel = (c) => c.match(/model:\s*['"]([^'"]+)['"]/)?.[1];
|
|
3167
2994
|
const getIncludeChat = (c) => c.match(/includeChat:\s*(true|false)/)?.[1] === "true";
|
|
3168
2995
|
const getIncludePastTools = (c) => c.match(/includePastTools:\s*(true|false)/)?.[1] === "true";
|
|
3169
2996
|
const getParallelToolCalls = (c) => c.match(/parallelToolCalls:\s*(true|false)/)?.[1] === "true";
|
|
@@ -3183,9 +3010,9 @@ export class DurableAgentBuilder extends _BaseDurableAgentBuilder {
|
|
|
3183
3010
|
if (arrayMatch) return arrayMatch[1];
|
|
3184
3011
|
return "";
|
|
3185
3012
|
};
|
|
3186
|
-
const name =
|
|
3013
|
+
const name = getName(content);
|
|
3187
3014
|
if (!name) return null;
|
|
3188
|
-
const modelId =
|
|
3015
|
+
const modelId = getModel(content);
|
|
3189
3016
|
const modelDef = modelId ? modelMap[modelId] : null;
|
|
3190
3017
|
return {
|
|
3191
3018
|
id: name,
|
|
@@ -3356,7 +3183,7 @@ export class DurableAgentBuilder extends _BaseDurableAgentBuilder {
|
|
|
3356
3183
|
try {
|
|
3357
3184
|
const filePath = path3.join(agentsDir, file);
|
|
3358
3185
|
const content = fs4.readFileSync(filePath, "utf-8");
|
|
3359
|
-
const
|
|
3186
|
+
const getName = (c) => c.match(/name:\s*['"]([^'"]+)['"]/)?.[1];
|
|
3360
3187
|
const getTitle = (c) => c.match(/title:\s*['"]([^'"]+)['"]/)?.[1];
|
|
3361
3188
|
const getType = (c) => c.match(/type:\s*['"]([^'"]+)['"]/)?.[1];
|
|
3362
3189
|
const getDefaultPrompt = (c) => c.match(/defaultPrompt:\s*['"]([^'"]+)['"]/)?.[1];
|
|
@@ -3374,7 +3201,7 @@ export class DurableAgentBuilder extends _BaseDurableAgentBuilder {
|
|
|
3374
3201
|
const promptMatch = sideMatch[1].match(/prompt:\s*['"]([^'"]+)['"]/);
|
|
3375
3202
|
return promptMatch ? promptMatch[1] : null;
|
|
3376
3203
|
};
|
|
3377
|
-
const name =
|
|
3204
|
+
const name = getName(content);
|
|
3378
3205
|
if (!name) return null;
|
|
3379
3206
|
return {
|
|
3380
3207
|
id: name,
|