veryfront 0.1.282 → 0.1.284
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/esm/deno.d.ts +0 -8
- package/esm/deno.js +8 -11
- package/esm/src/agent/agent-service.d.ts +28 -6
- package/esm/src/agent/agent-service.d.ts.map +1 -1
- package/esm/src/agent/agent-service.js +23 -1
- package/esm/src/agent/index.d.ts +1 -1
- package/esm/src/agent/index.d.ts.map +1 -1
- package/esm/src/agent/runtime/index.d.ts.map +1 -1
- package/esm/src/agent/runtime/index.js +23 -0
- package/esm/src/agent/runtime/tool-helpers.d.ts +1 -0
- package/esm/src/agent/runtime/tool-helpers.d.ts.map +1 -1
- package/esm/src/agent/runtime/tool-helpers.js +21 -0
- package/esm/src/embedding/resolve.d.ts.map +1 -1
- package/esm/src/embedding/resolve.js +15 -2
- package/esm/src/embedding/veryfront-cloud/provider.d.ts.map +1 -1
- package/esm/src/embedding/veryfront-cloud/provider.js +2 -7
- package/esm/src/extensions/contracts.js +3 -1
- package/esm/src/extensions/interfaces/ai-provider.d.ts +50 -0
- package/esm/src/extensions/interfaces/ai-provider.d.ts.map +1 -0
- package/esm/src/extensions/interfaces/ai-provider.js +13 -0
- package/esm/src/extensions/interfaces/code-parser.d.ts +11 -0
- package/esm/src/extensions/interfaces/code-parser.d.ts.map +1 -1
- package/esm/src/extensions/interfaces/css-processor.d.ts +41 -22
- package/esm/src/extensions/interfaces/css-processor.d.ts.map +1 -1
- package/esm/src/extensions/interfaces/css-processor.js +10 -1
- package/esm/src/extensions/interfaces/index.d.ts +5 -4
- package/esm/src/extensions/interfaces/index.d.ts.map +1 -1
- package/esm/src/extensions/interfaces/index.js +1 -0
- package/esm/src/extensions/interfaces/schema-validator.d.ts +84 -5
- package/esm/src/extensions/interfaces/schema-validator.d.ts.map +1 -1
- package/esm/src/extensions/interfaces/schema-validator.js +5 -0
- package/esm/src/extensions/loader.d.ts +7 -0
- package/esm/src/extensions/loader.d.ts.map +1 -1
- package/esm/src/extensions/loader.js +12 -0
- package/esm/src/extensions/orchestrate.d.ts +2 -0
- package/esm/src/extensions/orchestrate.d.ts.map +1 -1
- package/esm/src/extensions/orchestrate.js +3 -0
- package/esm/src/extensions/recommendations.d.ts.map +1 -1
- package/esm/src/extensions/recommendations.js +4 -1
- package/esm/src/extensions/registries/ai-provider-registry.d.ts +11 -0
- package/esm/src/extensions/registries/ai-provider-registry.d.ts.map +1 -0
- package/esm/src/extensions/registries/ai-provider-registry.js +40 -0
- package/esm/src/html/styles-builder/plugin-loader.d.ts.map +1 -1
- package/esm/src/html/styles-builder/plugin-loader.js +4 -16
- package/esm/src/html/styles-builder/tailwind-compiler-cache.d.ts +8 -2
- package/esm/src/html/styles-builder/tailwind-compiler-cache.d.ts.map +1 -1
- package/esm/src/html/styles-builder/tailwind-compiler-cache.js +20 -3
- package/esm/src/internal-agents/run-stream.d.ts.map +1 -1
- package/esm/src/internal-agents/run-stream.js +22 -0
- package/esm/src/provider/model-registry.d.ts.map +1 -1
- package/esm/src/provider/model-registry.js +33 -6
- package/esm/src/provider/runtime-loader/provider-embedding-responses.d.ts +1 -0
- package/esm/src/provider/runtime-loader/provider-embedding-responses.d.ts.map +1 -1
- package/esm/src/provider/runtime-loader/provider-embedding-responses.js +1 -1
- package/esm/src/provider/runtime-loader/provider-http.d.ts +9 -0
- package/esm/src/provider/runtime-loader/provider-http.d.ts.map +1 -1
- package/esm/src/provider/runtime-loader/provider-http.js +2 -2
- package/esm/src/provider/runtime-loader.d.ts +120 -9
- package/esm/src/provider/runtime-loader.d.ts.map +1 -1
- package/esm/src/provider/runtime-loader.js +13 -943
- package/esm/src/provider/veryfront-cloud/provider.d.ts.map +1 -1
- package/esm/src/provider/veryfront-cloud/provider.js +30 -15
- package/esm/src/schemas/define.d.ts +31 -0
- package/esm/src/schemas/define.d.ts.map +1 -0
- package/esm/src/schemas/define.js +42 -0
- package/esm/src/schemas/index.d.ts +7 -2
- package/esm/src/schemas/index.d.ts.map +1 -1
- package/esm/src/schemas/index.js +10 -2
- package/esm/src/schemas/zod-adapter.d.ts +25 -0
- package/esm/src/schemas/zod-adapter.d.ts.map +1 -0
- package/esm/src/schemas/zod-adapter.js +120 -0
- package/esm/src/server/bootstrap.d.ts.map +1 -1
- package/esm/src/server/bootstrap.js +5 -0
- package/esm/src/transforms/plugins/babel-node-positions.d.ts +6 -7
- package/esm/src/transforms/plugins/babel-node-positions.d.ts.map +1 -1
- package/esm/src/transforms/plugins/babel-node-positions.js +10 -123
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +1 -6
- package/src/deno.js +8 -11
- package/src/src/agent/agent-service.ts +91 -7
- package/src/src/agent/index.ts +4 -0
- package/src/src/agent/runtime/index.ts +32 -1
- package/src/src/agent/runtime/tool-helpers.ts +32 -0
- package/src/src/embedding/resolve.ts +18 -7
- package/src/src/embedding/veryfront-cloud/provider.ts +4 -10
- package/src/src/extensions/contracts.ts +3 -3
- package/src/src/extensions/interfaces/ai-provider.ts +54 -0
- package/src/src/extensions/interfaces/code-parser.ts +12 -0
- package/src/src/extensions/interfaces/css-processor.ts +43 -22
- package/src/src/extensions/interfaces/index.ts +15 -11
- package/src/src/extensions/interfaces/schema-validator.ts +112 -5
- package/src/src/extensions/loader.ts +14 -0
- package/src/src/extensions/orchestrate.ts +5 -0
- package/src/src/extensions/recommendations.ts +4 -1
- package/src/src/extensions/registries/ai-provider-registry.ts +53 -0
- package/src/src/html/styles-builder/plugin-loader.ts +4 -16
- package/src/src/html/styles-builder/tailwind-compiler-cache.ts +27 -6
- package/src/src/internal-agents/run-stream.ts +34 -0
- package/src/src/provider/model-registry.ts +34 -15
- package/src/src/provider/runtime-loader/provider-embedding-responses.ts +1 -1
- package/src/src/provider/runtime-loader/provider-http.ts +2 -2
- package/src/src/provider/runtime-loader.ts +41 -1189
- package/src/src/provider/veryfront-cloud/provider.ts +35 -19
- package/src/src/schemas/define.ts +48 -0
- package/src/src/schemas/index.ts +13 -2
- package/src/src/schemas/zod-adapter.ts +180 -0
- package/src/src/server/bootstrap.ts +5 -0
- package/src/src/transforms/plugins/babel-node-positions.ts +11 -173
- package/src/src/utils/version-constant.ts +1 -1
- package/esm/src/extensions/interfaces/ai-model-provider.d.ts +0 -94
- package/esm/src/extensions/interfaces/ai-model-provider.d.ts.map +0 -1
- package/esm/src/extensions/interfaces/ai-model-provider.js +0 -8
- package/src/src/extensions/interfaces/ai-model-provider.ts +0 -100
|
@@ -26,21 +26,70 @@ export interface AgentServiceServerConfig {
|
|
|
26
26
|
cors?: boolean;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
export interface AgentContract<
|
|
29
|
+
export type AgentRegistry = Record<string, Agent>;
|
|
30
|
+
|
|
31
|
+
export interface AgentServiceContractBase<
|
|
33
32
|
TStartInput = void,
|
|
34
33
|
TRun = unknown,
|
|
35
34
|
TEvent = unknown,
|
|
36
35
|
TTerminalState = unknown,
|
|
37
36
|
> {
|
|
38
37
|
serviceName: string;
|
|
39
|
-
agent: Agent;
|
|
40
38
|
server?: AgentServiceServerConfig;
|
|
41
39
|
durableRunSink?: DurableRunSink<TStartInput, TRun, TEvent, TTerminalState>;
|
|
42
40
|
}
|
|
43
41
|
|
|
42
|
+
/**
|
|
43
|
+
* Multi-agent hosted-service contract. Framework services route to
|
|
44
|
+
* `defaultAgentId` unless the host chooses another registered agent.
|
|
45
|
+
*/
|
|
46
|
+
export interface AgentServiceRegistryContract<
|
|
47
|
+
TStartInput = void,
|
|
48
|
+
TRun = unknown,
|
|
49
|
+
TEvent = unknown,
|
|
50
|
+
TTerminalState = unknown,
|
|
51
|
+
> extends AgentServiceContractBase<TStartInput, TRun, TEvent, TTerminalState> {
|
|
52
|
+
agents: AgentRegistry;
|
|
53
|
+
defaultAgentId: string;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Single-agent convenience accepted by `defineAgentService()`. Implementations
|
|
58
|
+
* must normalize this shape into the same registry path used by multi-agent
|
|
59
|
+
* services so framework users are not boxed into one-agent-per-process.
|
|
60
|
+
*/
|
|
61
|
+
export interface AgentServiceSingleAgentContract<
|
|
62
|
+
TStartInput = void,
|
|
63
|
+
TRun = unknown,
|
|
64
|
+
TEvent = unknown,
|
|
65
|
+
TTerminalState = unknown,
|
|
66
|
+
> extends AgentServiceContractBase<TStartInput, TRun, TEvent, TTerminalState> {
|
|
67
|
+
agent: Agent;
|
|
68
|
+
defaultAgentId?: string;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Phase-0 contract draft for the future framework-owned hosted agent service.
|
|
73
|
+
*/
|
|
74
|
+
export type AgentContract<
|
|
75
|
+
TStartInput = void,
|
|
76
|
+
TRun = unknown,
|
|
77
|
+
TEvent = unknown,
|
|
78
|
+
TTerminalState = unknown,
|
|
79
|
+
> =
|
|
80
|
+
| AgentServiceRegistryContract<TStartInput, TRun, TEvent, TTerminalState>
|
|
81
|
+
| AgentServiceSingleAgentContract<TStartInput, TRun, TEvent, TTerminalState>;
|
|
82
|
+
|
|
83
|
+
export interface NormalizedAgentServiceContract<
|
|
84
|
+
TStartInput = void,
|
|
85
|
+
TRun = unknown,
|
|
86
|
+
TEvent = unknown,
|
|
87
|
+
TTerminalState = unknown,
|
|
88
|
+
> extends AgentServiceContractBase<TStartInput, TRun, TEvent, TTerminalState> {
|
|
89
|
+
agents: AgentRegistry;
|
|
90
|
+
defaultAgentId: string;
|
|
91
|
+
}
|
|
92
|
+
|
|
44
93
|
/**
|
|
45
94
|
* Type-preserving service definition reserved ahead of the runtime
|
|
46
95
|
* implementation landing in a later migration phase.
|
|
@@ -51,12 +100,47 @@ export interface AgentServiceDefinition<
|
|
|
51
100
|
TEvent = unknown,
|
|
52
101
|
TTerminalState = unknown,
|
|
53
102
|
> {
|
|
54
|
-
contract:
|
|
103
|
+
contract: NormalizedAgentServiceContract<TStartInput, TRun, TEvent, TTerminalState>;
|
|
55
104
|
}
|
|
56
105
|
|
|
57
106
|
const DEFINE_AGENT_SERVICE_STUB_ERROR =
|
|
58
107
|
"defineAgentService() is a Phase 0 stub. The framework contract is reserved, but the hosted runtime implementation has not landed yet.";
|
|
59
108
|
|
|
109
|
+
function getSingleAgentDefaultId(contract: {
|
|
110
|
+
agent: Agent;
|
|
111
|
+
defaultAgentId?: string;
|
|
112
|
+
}): string {
|
|
113
|
+
return contract.defaultAgentId ?? contract.agent.id ?? "default";
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function normalizeAgentServiceContract<
|
|
117
|
+
TStartInput = void,
|
|
118
|
+
TRun = unknown,
|
|
119
|
+
TEvent = unknown,
|
|
120
|
+
TTerminalState = unknown,
|
|
121
|
+
>(
|
|
122
|
+
contract: AgentContract<TStartInput, TRun, TEvent, TTerminalState>,
|
|
123
|
+
): NormalizedAgentServiceContract<TStartInput, TRun, TEvent, TTerminalState> {
|
|
124
|
+
if ("agents" in contract) {
|
|
125
|
+
return {
|
|
126
|
+
serviceName: contract.serviceName,
|
|
127
|
+
agents: contract.agents,
|
|
128
|
+
defaultAgentId: contract.defaultAgentId,
|
|
129
|
+
server: contract.server,
|
|
130
|
+
durableRunSink: contract.durableRunSink,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const defaultAgentId = getSingleAgentDefaultId(contract);
|
|
135
|
+
return {
|
|
136
|
+
serviceName: contract.serviceName,
|
|
137
|
+
agents: { [defaultAgentId]: contract.agent },
|
|
138
|
+
defaultAgentId,
|
|
139
|
+
server: contract.server,
|
|
140
|
+
durableRunSink: contract.durableRunSink,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
|
|
60
144
|
/**
|
|
61
145
|
* Reserve the public hosted agent-service signature before the runtime
|
|
62
146
|
* implementation lands.
|
|
@@ -69,6 +153,6 @@ export function defineAgentService<
|
|
|
69
153
|
>(
|
|
70
154
|
contract: AgentContract<TStartInput, TRun, TEvent, TTerminalState>,
|
|
71
155
|
): AgentServiceDefinition<TStartInput, TRun, TEvent, TTerminalState> {
|
|
72
|
-
void contract;
|
|
156
|
+
void normalizeAgentServiceContract(contract);
|
|
73
157
|
throw new Error(DEFINE_AGENT_SERVICE_STUB_ERROR);
|
|
74
158
|
}
|
package/src/src/agent/index.ts
CHANGED
|
@@ -143,10 +143,14 @@ export {
|
|
|
143
143
|
export { agent } from "./factory.js";
|
|
144
144
|
export {
|
|
145
145
|
type AgentContract,
|
|
146
|
+
type AgentRegistry,
|
|
146
147
|
type AgentServiceDefinition,
|
|
148
|
+
type AgentServiceRegistryContract,
|
|
147
149
|
type AgentServiceServerConfig,
|
|
150
|
+
type AgentServiceSingleAgentContract,
|
|
148
151
|
defineAgentService,
|
|
149
152
|
type DurableRunSink,
|
|
153
|
+
type NormalizedAgentServiceContract,
|
|
150
154
|
} from "./agent-service.js";
|
|
151
155
|
export {
|
|
152
156
|
type AgUiRuntimeHandlerConfig,
|
|
@@ -47,7 +47,7 @@ import { repairToolCall } from "./repair-tool-call.js";
|
|
|
47
47
|
import { MiddlewareChain } from "../middleware/chain.js";
|
|
48
48
|
import { AGENT_DEFAULTS } from "../defaults.js";
|
|
49
49
|
import { tryGetCacheKeyContext } from "../../cache/cache-key-builder.js";
|
|
50
|
-
import type { ToolExecutionContext } from "../../tool/index.js";
|
|
50
|
+
import type { ToolDefinition, ToolExecutionContext } from "../../tool/index.js";
|
|
51
51
|
import { isLocalModelRuntime } from "../../provider/runtime-inspection.js";
|
|
52
52
|
import { generateText, streamText } from "../../runtime/runtime-bridge.js";
|
|
53
53
|
|
|
@@ -110,6 +110,9 @@ const LOAD_SKILL_TOOL_ID = "load-skill";
|
|
|
110
110
|
|
|
111
111
|
type RuntimeToolFilterConfig = AgentConfig & {
|
|
112
112
|
__vfAllowedRemoteTools?: string[];
|
|
113
|
+
__vfForwardedIntegrationToolDefs?: Array<
|
|
114
|
+
{ name: string; description: string; parameters: Record<string, unknown> }
|
|
115
|
+
>;
|
|
113
116
|
};
|
|
114
117
|
|
|
115
118
|
function isAbortError(error: unknown, abortSignal?: AbortSignal): boolean {
|
|
@@ -418,6 +421,30 @@ function getRuntimeAllowedRemoteTools(config: AgentConfig): string[] | undefined
|
|
|
418
421
|
return raw.every((toolName) => typeof toolName === "string") ? raw : [];
|
|
419
422
|
}
|
|
420
423
|
|
|
424
|
+
function getRuntimeForwardedIntegrationToolDefs(
|
|
425
|
+
config: AgentConfig,
|
|
426
|
+
): ToolDefinition[] | undefined {
|
|
427
|
+
const configWithFilters = config as RuntimeToolFilterConfig;
|
|
428
|
+
const raw = configWithFilters.__vfForwardedIntegrationToolDefs;
|
|
429
|
+
if (!Array.isArray(raw) || raw.length === 0) return undefined;
|
|
430
|
+
return raw
|
|
431
|
+
.filter(
|
|
432
|
+
(def): def is { name: string; description: string; parameters: Record<string, unknown> } =>
|
|
433
|
+
typeof def === "object" &&
|
|
434
|
+
def !== null &&
|
|
435
|
+
typeof def.name === "string" &&
|
|
436
|
+
typeof def.description === "string",
|
|
437
|
+
)
|
|
438
|
+
.map((def) => ({
|
|
439
|
+
name: def.name,
|
|
440
|
+
description: def.description,
|
|
441
|
+
parameters: typeof def.parameters === "object" && def.parameters !== null &&
|
|
442
|
+
!Array.isArray(def.parameters)
|
|
443
|
+
? def.parameters
|
|
444
|
+
: { type: "object", properties: {} },
|
|
445
|
+
}));
|
|
446
|
+
}
|
|
447
|
+
|
|
421
448
|
type ResolvedModelTransport = {
|
|
422
449
|
requestedModel: string;
|
|
423
450
|
resolvedModelString: string;
|
|
@@ -722,6 +749,7 @@ export class AgentRuntime {
|
|
|
722
749
|
// Request-scoped skill policy (not class-level mutable state)
|
|
723
750
|
let activeSkillPolicy: string[] | undefined;
|
|
724
751
|
const allowedRemoteToolNames = getRuntimeAllowedRemoteTools(this.config);
|
|
752
|
+
const forwardedRemoteToolDefinitions = getRuntimeForwardedIntegrationToolDefs(this.config);
|
|
725
753
|
let currentSystemPrompt = systemPrompt;
|
|
726
754
|
let currentRuntimeContext = runtimeContext;
|
|
727
755
|
|
|
@@ -743,6 +771,7 @@ export class AgentRuntime {
|
|
|
743
771
|
let tools = isLocal ? [] : await getAvailableTools(this.config.tools, {
|
|
744
772
|
includeSkillTools: Boolean(this.config.skills),
|
|
745
773
|
allowedRemoteToolNames,
|
|
774
|
+
forwardedRemoteToolDefinitions,
|
|
746
775
|
remoteToolSources: this.config.remoteTools,
|
|
747
776
|
remoteToolContext: toolContext,
|
|
748
777
|
});
|
|
@@ -1004,6 +1033,7 @@ export class AgentRuntime {
|
|
|
1004
1033
|
let finalFinishReason: string | undefined;
|
|
1005
1034
|
let latestAssistantText = "";
|
|
1006
1035
|
const allowedRemoteToolNames = getRuntimeAllowedRemoteTools(this.config);
|
|
1036
|
+
const forwardedRemoteToolDefinitions = getRuntimeForwardedIntegrationToolDefs(this.config);
|
|
1007
1037
|
let currentSystemPrompt = systemPrompt;
|
|
1008
1038
|
let currentRuntimeContext = runtimeContext;
|
|
1009
1039
|
|
|
@@ -1026,6 +1056,7 @@ export class AgentRuntime {
|
|
|
1026
1056
|
let tools = isLocalStreaming ? [] : await getAvailableTools(this.config.tools, {
|
|
1027
1057
|
includeSkillTools: Boolean(this.config.skills),
|
|
1028
1058
|
allowedRemoteToolNames,
|
|
1059
|
+
forwardedRemoteToolDefinitions,
|
|
1029
1060
|
remoteToolSources: this.config.remoteTools,
|
|
1030
1061
|
remoteToolContext: toolContext,
|
|
1031
1062
|
});
|
|
@@ -297,6 +297,27 @@ function addToolDefinition(
|
|
|
297
297
|
tools.push(def);
|
|
298
298
|
}
|
|
299
299
|
|
|
300
|
+
/**
|
|
301
|
+
* Merge forwarded integration tool definitions into the remote defs array.
|
|
302
|
+
* Forwarded definitions are provided by the API when the runtime cannot
|
|
303
|
+
* fetch them directly (e.g., the runtime token lacks user auth).
|
|
304
|
+
* Only appends definitions not already present in the array.
|
|
305
|
+
*/
|
|
306
|
+
function appendForwardedToolDefinitions(
|
|
307
|
+
remoteDefs: ToolDefinition[],
|
|
308
|
+
forwarded: ToolDefinition[] | undefined,
|
|
309
|
+
allowedNames: string[] | undefined,
|
|
310
|
+
): void {
|
|
311
|
+
if (!forwarded?.length) return;
|
|
312
|
+
const existing = new Set(remoteDefs.map((def) => def.name));
|
|
313
|
+
for (const def of forwarded) {
|
|
314
|
+
if (existing.has(def.name)) continue;
|
|
315
|
+
if (allowedNames && !allowedNames.includes(def.name)) continue;
|
|
316
|
+
remoteDefs.push(def);
|
|
317
|
+
existing.add(def.name);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
300
321
|
/**
|
|
301
322
|
* Get available tools based on agent configuration.
|
|
302
323
|
* When tools === true, loads all tools from registry.
|
|
@@ -311,6 +332,7 @@ export async function getAvailableTools(
|
|
|
311
332
|
includeSkillTools?: boolean;
|
|
312
333
|
includeIntegrationTools?: boolean;
|
|
313
334
|
allowedRemoteToolNames?: string[];
|
|
335
|
+
forwardedRemoteToolDefinitions?: ToolDefinition[];
|
|
314
336
|
remoteToolSources?: RemoteToolSource[];
|
|
315
337
|
remoteToolContext?: ToolExecutionContext;
|
|
316
338
|
},
|
|
@@ -333,6 +355,11 @@ export async function getAvailableTools(
|
|
|
333
355
|
|
|
334
356
|
// Append remote integration tools (per-request, project-scoped)
|
|
335
357
|
const remoteDefs = await getRemoteToolDefinitions(options);
|
|
358
|
+
appendForwardedToolDefinitions(
|
|
359
|
+
remoteDefs,
|
|
360
|
+
options?.forwardedRemoteToolDefinitions,
|
|
361
|
+
options?.allowedRemoteToolNames,
|
|
362
|
+
);
|
|
336
363
|
for (const def of remoteDefs) {
|
|
337
364
|
logToolDefinition(def.name, def);
|
|
338
365
|
}
|
|
@@ -343,6 +370,11 @@ export async function getAvailableTools(
|
|
|
343
370
|
|
|
344
371
|
const tools: ToolDefinition[] = [];
|
|
345
372
|
const remoteDefs = await getRemoteToolDefinitions(options);
|
|
373
|
+
appendForwardedToolDefinitions(
|
|
374
|
+
remoteDefs,
|
|
375
|
+
options?.forwardedRemoteToolDefinitions,
|
|
376
|
+
options?.allowedRemoteToolNames,
|
|
377
|
+
);
|
|
346
378
|
const remoteToolNames = new Set(remoteDefs.map((def) => def.name));
|
|
347
379
|
const explicitlyRequestedRemoteToolNames = new Set<string>();
|
|
348
380
|
const unresolvedConfiguredToolNames: string[] = [];
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { createError, toError } from "../errors/veryfront-error.js";
|
|
2
2
|
import { getGoogleGenAIEnvConfig, getOpenAIEnvConfig } from "../config/env.js";
|
|
3
3
|
import { createLocalEmbeddingModel } from "../provider/local/embedding-runtime-adapter.js";
|
|
4
|
-
import {
|
|
5
|
-
createGoogleEmbeddingRuntime,
|
|
6
|
-
createOpenAIEmbeddingRuntime,
|
|
7
|
-
} from "../provider/runtime-loader.js";
|
|
4
|
+
import { createGoogleEmbeddingRuntime } from "../provider/runtime-loader.js";
|
|
8
5
|
import type { EmbeddingRuntime } from "../provider/types.js";
|
|
6
|
+
import { tryResolve } from "../extensions/contracts.js";
|
|
7
|
+
import type { AIProviderRegistry } from "../extensions/interfaces/index.js";
|
|
8
|
+
import { AIProviderRegistryName } from "../extensions/interfaces/index.js";
|
|
9
9
|
import { createVeryfrontCloudEmbeddingModel } from "./veryfront-cloud/provider.js";
|
|
10
10
|
|
|
11
11
|
type EmbeddingProviderFactory = (modelId: string) => EmbeddingRuntime;
|
|
@@ -44,9 +44,20 @@ function autoInitializeFromEnv(): void {
|
|
|
44
44
|
}),
|
|
45
45
|
);
|
|
46
46
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
const registry = tryResolve<AIProviderRegistry>(AIProviderRegistryName);
|
|
48
|
+
const provider = registry?.get("openai");
|
|
49
|
+
if (provider?.createEmbedding) {
|
|
50
|
+
return provider.createEmbedding(id, {
|
|
51
|
+
credential: config.apiKey,
|
|
52
|
+
baseURL: config.baseURL,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
throw toError(
|
|
56
|
+
createError({
|
|
57
|
+
type: "config",
|
|
58
|
+
message:
|
|
59
|
+
"OpenAI provider not installed. Add @veryfront/ext-openai to use openai/* embedding models.",
|
|
60
|
+
}),
|
|
50
61
|
);
|
|
51
62
|
});
|
|
52
63
|
}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import { createError, toError } from "../../errors/veryfront-error.js";
|
|
2
|
-
import {
|
|
3
|
-
createGoogleEmbeddingRuntime,
|
|
4
|
-
createOpenAIEmbeddingRuntime,
|
|
5
|
-
} from "../../provider/runtime-loader.js";
|
|
2
|
+
import { createGoogleEmbeddingRuntime } from "../../provider/runtime-loader.js";
|
|
6
3
|
import type { EmbeddingRuntime } from "../../provider/types.js";
|
|
7
4
|
import {
|
|
8
5
|
createVeryfrontCloudFetch,
|
|
@@ -19,12 +16,9 @@ export function createVeryfrontCloudEmbeddingModel(modelId: string): EmbeddingRu
|
|
|
19
16
|
|
|
20
17
|
switch (provider) {
|
|
21
18
|
case "openai":
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
name: "veryfront-cloud",
|
|
26
|
-
fetch,
|
|
27
|
-
}, upstreamModelId);
|
|
19
|
+
throw new Error(
|
|
20
|
+
"OpenAI provider not installed. Add @veryfront/ext-openai to use openai embedding models via veryfront-cloud.",
|
|
21
|
+
);
|
|
28
22
|
|
|
29
23
|
case "google":
|
|
30
24
|
return createGoogleEmbeddingRuntime({
|
|
@@ -14,9 +14,9 @@ export function resolve<T>(name: string): T {
|
|
|
14
14
|
if (impl === undefined) {
|
|
15
15
|
const recommendation = getRecommendation(name);
|
|
16
16
|
throw MISSING_EXTENSION_ERROR.create({
|
|
17
|
-
message:
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
message: recommendation
|
|
18
|
+
? `Missing extension for contract "${name}". Install it with: deno add ${recommendation}`
|
|
19
|
+
: `Missing extension for contract "${name}"`,
|
|
20
20
|
detail: recommendation ? `Install it with: deno add ${recommendation}` : undefined,
|
|
21
21
|
});
|
|
22
22
|
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contract interface for LLM provider extensions.
|
|
3
|
+
*
|
|
4
|
+
* A single `AIProviderRegistry` impl lives in the contract registry under
|
|
5
|
+
* {@link AIProviderRegistryName}. Each provider extension resolves the
|
|
6
|
+
* registry in its `setup()` and calls `registry.register(provider)`.
|
|
7
|
+
* Core consumers (model-registry, veryfront-cloud) resolve the registry
|
|
8
|
+
* and dispatch on provider id parsed from `"provider/model"` strings.
|
|
9
|
+
*
|
|
10
|
+
* @module extensions/interfaces/ai-provider
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import type { EmbeddingRuntime, ModelRuntime } from "../../provider/types.js";
|
|
14
|
+
|
|
15
|
+
/** Config passed to any provider's create* method. */
|
|
16
|
+
export interface AIProviderConfig {
|
|
17
|
+
/** API credential — maps to OpenAI `apiKey`, Anthropic `authToken`, Google `apiKey` internally. */
|
|
18
|
+
credential: string;
|
|
19
|
+
/** Override the provider's base URL (e.g. Azure OpenAI, self-hosted gateway). */
|
|
20
|
+
baseURL?: string;
|
|
21
|
+
/** Override fetch (veryfront-cloud uses this to inject project auth headers). */
|
|
22
|
+
fetch?: typeof fetch;
|
|
23
|
+
/** Display name shown in errors + telemetry. Defaults to provider id. */
|
|
24
|
+
name?: string;
|
|
25
|
+
/** Provider-specific extras. */
|
|
26
|
+
[key: string]: unknown;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* An LLM provider implementation. Extensions register one of these with the
|
|
31
|
+
* {@link AIProviderRegistry} during setup(). `createModel` is required;
|
|
32
|
+
* `createEmbedding` and `createResponses` are optional and absent on
|
|
33
|
+
* providers that don't support them.
|
|
34
|
+
*/
|
|
35
|
+
export interface AIProvider {
|
|
36
|
+
/** Stable id used in model strings: "openai" / "anthropic" / "google". */
|
|
37
|
+
readonly id: string;
|
|
38
|
+
createModel(modelId: string, config: AIProviderConfig): ModelRuntime;
|
|
39
|
+
createEmbedding?(modelId: string, config: AIProviderConfig): EmbeddingRuntime;
|
|
40
|
+
createResponses?(modelId: string, config: AIProviderConfig): ModelRuntime;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** Registry contract. Single impl created at bootstrap. */
|
|
44
|
+
export interface AIProviderRegistry {
|
|
45
|
+
register(provider: AIProvider): void;
|
|
46
|
+
unregister(id: string): void;
|
|
47
|
+
get(id: string): AIProvider | undefined;
|
|
48
|
+
require(id: string): AIProvider;
|
|
49
|
+
list(): AIProvider[];
|
|
50
|
+
has(id: string): boolean;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** Contract name used for `resolve()` / `provide()`. */
|
|
54
|
+
export const AIProviderRegistryName = "AIProviderRegistry" as const;
|
|
@@ -74,6 +74,12 @@ export interface GenerateResult {
|
|
|
74
74
|
* Implementations parse source code into ASTs, traverse/transform
|
|
75
75
|
* nodes, and generate code back from modified trees.
|
|
76
76
|
*/
|
|
77
|
+
/** Options for {@link CodeParser.injectJsxNodePositions}. */
|
|
78
|
+
export interface InjectJsxNodePositionsOptions {
|
|
79
|
+
/** Source file path — emitted into `data-node-file` attributes. */
|
|
80
|
+
filePath: string;
|
|
81
|
+
}
|
|
82
|
+
|
|
77
83
|
export interface CodeParser {
|
|
78
84
|
/** Parse source code into an abstract syntax tree. */
|
|
79
85
|
parse(options: ParseOptions): Promise<ASTNode>;
|
|
@@ -81,4 +87,10 @@ export interface CodeParser {
|
|
|
81
87
|
traverse(ast: ASTNode, visitor: TraverseVisitor): void;
|
|
82
88
|
/** Generate source code from an AST. */
|
|
83
89
|
generate(ast: ASTNode, options?: GenerateOptions): Promise<GenerateResult>;
|
|
90
|
+
/**
|
|
91
|
+
* Inject `data-node-*` attributes into every JSX element in the source,
|
|
92
|
+
* enabling Studio Navigator to map rendered elements back to their
|
|
93
|
+
* source positions. Parsing failures return the input unchanged.
|
|
94
|
+
*/
|
|
95
|
+
injectJsxNodePositions(source: string, options: InjectJsxNodePositionsOptions): string;
|
|
84
96
|
}
|
|
@@ -1,40 +1,61 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Contract interface for CSS processing engines
|
|
2
|
+
* Contract interface for CSS processing engines (Tailwind-style compile
|
|
3
|
+
* pipelines).
|
|
3
4
|
*
|
|
4
5
|
* Default implementation: `@veryfront/ext-tailwind`
|
|
5
6
|
*
|
|
7
|
+
* The contract mirrors the Tailwind v4 `compile()` surface: a stateful
|
|
8
|
+
* compiler is constructed once per stylesheet and emits CSS output for the
|
|
9
|
+
* set of class-name candidates discovered at render time. Core scans the
|
|
10
|
+
* rendered HTML for candidates and calls `CSSCompiler.build(candidates)`
|
|
11
|
+
* on each request; the compiler accumulates state across calls, so per-
|
|
12
|
+
* project isolation is the caller's responsibility (see
|
|
13
|
+
* `tailwind-compiler-cache.ts`).
|
|
14
|
+
*
|
|
6
15
|
* @module extensions/interfaces/css-processor
|
|
7
16
|
*/
|
|
8
17
|
|
|
9
|
-
/**
|
|
10
|
-
export interface
|
|
11
|
-
/** Raw CSS or utility-class input. */
|
|
18
|
+
/** A loaded stylesheet body with the base path used to resolve relative imports. */
|
|
19
|
+
export interface CSSStylesheetSource {
|
|
12
20
|
content: string;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
21
|
+
base: string;
|
|
22
|
+
path: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** A loaded module (Tailwind plugin). `module` is the plugin's default export. */
|
|
26
|
+
export interface CSSModuleSource {
|
|
27
|
+
module: unknown;
|
|
28
|
+
base: string;
|
|
29
|
+
path: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** Options passed to {@link CSSProcessor.compile}. */
|
|
33
|
+
export interface CSSCompileOptions {
|
|
34
|
+
/** Base path used to resolve relative `@import` specifiers. */
|
|
35
|
+
base: string;
|
|
36
|
+
/** Resolver invoked when the compiler encounters an `@import` it doesn't recognize. */
|
|
37
|
+
loadStylesheet(id: string): Promise<CSSStylesheetSource>;
|
|
38
|
+
/** Resolver invoked for `@plugin` directives. */
|
|
39
|
+
loadModule(id: string): Promise<CSSModuleSource>;
|
|
19
40
|
}
|
|
20
41
|
|
|
21
|
-
/**
|
|
22
|
-
export interface
|
|
23
|
-
/**
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
42
|
+
/** Stateful compiler returned by {@link CSSProcessor.compile}. */
|
|
43
|
+
export interface CSSCompiler {
|
|
44
|
+
/**
|
|
45
|
+
* Emit CSS for the supplied list of class-name candidates. Stateful — the
|
|
46
|
+
* compiler accumulates candidates across calls for the lifetime of the
|
|
47
|
+
* underlying compile session.
|
|
48
|
+
*/
|
|
49
|
+
build(candidates: string[]): string;
|
|
27
50
|
}
|
|
28
51
|
|
|
29
52
|
/**
|
|
30
53
|
* CSSProcessor contract interface.
|
|
31
54
|
*
|
|
32
|
-
* Implementations
|
|
33
|
-
*
|
|
55
|
+
* Implementations wire a utility-class compiler (Tailwind, UnoCSS, etc.) so
|
|
56
|
+
* core's styles-builder can emit per-request CSS without importing the
|
|
57
|
+
* underlying engine directly.
|
|
34
58
|
*/
|
|
35
59
|
export interface CSSProcessor {
|
|
36
|
-
|
|
37
|
-
process(options: CSSProcessOptions): Promise<CSSProcessResult>;
|
|
38
|
-
/** Merge class names using the processor's conflict-resolution strategy. */
|
|
39
|
-
mergeClasses?(...classes: string[]): string;
|
|
60
|
+
compile(stylesheet: string, options: CSSCompileOptions): Promise<CSSCompiler>;
|
|
40
61
|
}
|
|
@@ -27,7 +27,13 @@ export type { CacheStore } from "./cache-store.js";
|
|
|
27
27
|
export type { TokenCacheEntry, TokenCacheStats, TokenCacheStore } from "./token-cache-store.js";
|
|
28
28
|
|
|
29
29
|
// CSS processor
|
|
30
|
-
export type {
|
|
30
|
+
export type {
|
|
31
|
+
CSSCompileOptions,
|
|
32
|
+
CSSCompiler,
|
|
33
|
+
CSSModuleSource,
|
|
34
|
+
CSSProcessor,
|
|
35
|
+
CSSStylesheetSource,
|
|
36
|
+
} from "./css-processor.js";
|
|
31
37
|
|
|
32
38
|
// Content transformer
|
|
33
39
|
export type {
|
|
@@ -51,16 +57,9 @@ export type {
|
|
|
51
57
|
// Tracing exporter
|
|
52
58
|
export type { SpanData, TracerProvider, TracingExporter } from "./tracing-exporter.js";
|
|
53
59
|
|
|
54
|
-
// AI
|
|
55
|
-
export type {
|
|
56
|
-
|
|
57
|
-
ChatMessage,
|
|
58
|
-
CompletionOptions,
|
|
59
|
-
CompletionResult,
|
|
60
|
-
ContentPart,
|
|
61
|
-
StreamChunk,
|
|
62
|
-
ToolDefinition,
|
|
63
|
-
} from "./ai-model-provider.js";
|
|
60
|
+
// AI provider (registry + per-provider contract)
|
|
61
|
+
export type { AIProvider, AIProviderConfig, AIProviderRegistry } from "./ai-provider.js";
|
|
62
|
+
export { AIProviderRegistryName } from "./ai-provider.js";
|
|
64
63
|
|
|
65
64
|
// Embedding provider
|
|
66
65
|
export type { EmbeddingOptions, EmbeddingProvider, EmbeddingResult } from "./embedding-provider.js";
|
|
@@ -71,6 +70,7 @@ export type {
|
|
|
71
70
|
CodeParser,
|
|
72
71
|
GenerateOptions,
|
|
73
72
|
GenerateResult,
|
|
73
|
+
InjectJsxNodePositionsOptions,
|
|
74
74
|
NodePath,
|
|
75
75
|
ParseOptions,
|
|
76
76
|
TraverseVisitor,
|
|
@@ -78,8 +78,12 @@ export type {
|
|
|
78
78
|
|
|
79
79
|
// Schema validator
|
|
80
80
|
export type {
|
|
81
|
+
InferSchema,
|
|
82
|
+
InferShape,
|
|
81
83
|
Schema,
|
|
84
|
+
SchemaFactory,
|
|
82
85
|
SchemaValidator,
|
|
86
|
+
SchemaValidatorCoerce,
|
|
83
87
|
ValidationFailure,
|
|
84
88
|
ValidationIssue,
|
|
85
89
|
ValidationResult,
|