veryfront 0.1.159 → 0.1.161
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.js +1 -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 +2 -12
- package/esm/src/agent/runtime/index.d.ts.map +1 -1
- package/esm/src/agent/runtime/index.js +62 -25
- package/esm/src/agent/types.d.ts +37 -0
- package/esm/src/agent/types.d.ts.map +1 -1
- package/esm/src/mcp/http-transport.d.ts +33 -0
- package/esm/src/mcp/http-transport.d.ts.map +1 -0
- package/esm/src/mcp/http-transport.js +97 -0
- package/esm/src/mcp/server.d.ts.map +1 -1
- package/esm/src/mcp/server.js +14 -107
- package/esm/src/platform/adapters/fs/veryfront/stat-operations.d.ts.map +1 -1
- package/esm/src/platform/adapters/fs/veryfront/stat-operations.js +13 -45
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +1 -1
- package/src/deno.js +1 -1
- package/src/src/agent/index.ts +6 -0
- package/src/src/agent/runtime/index.ts +118 -11
- package/src/src/agent/types.ts +47 -0
- package/src/src/mcp/http-transport.ts +163 -0
- package/src/src/mcp/server.ts +15 -123
- package/src/src/platform/adapters/fs/veryfront/stat-operations.ts +19 -49
- package/src/src/utils/version-constant.ts +1 -1
package/esm/deno.js
CHANGED
package/esm/src/agent/index.d.ts
CHANGED
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
* ```
|
|
80
80
|
*/
|
|
81
81
|
import "../../_dnt.polyfills.js";
|
|
82
|
-
export type { Agent, AgentConfig, AgentContext, AgentMiddleware, AgentResponse, AgentStatus, AgentStreamResult, AgentSuggestion, AgentSuggestions, EdgeConfig, MemoryConfig, Message as AgentMessage, MessagePart, ModelProvider, ModelString, ResolvedAgentConfig, StreamToolCall, ToolCall, ToolCallPart, ToolCallPartWithArgs, ToolCallPartWithInput, ToolResultPart, } from "./types.js";
|
|
82
|
+
export type { Agent, AgentConfig, AgentContext, AgentMiddleware, AgentResponse, AgentStatus, AgentStreamResult, AgentSuggestion, AgentSuggestions, EdgeConfig, MemoryConfig, Message as AgentMessage, MessagePart, ModelProvider, ModelString, ModelTransportRequest, ModelTransportResolver, ResolvedAgentConfig, ResolvedModelTransport, ResolvedRuntimeState, RuntimeStateRequest, RuntimeStateResolver, StreamToolCall, ToolCall, ToolCallPart, ToolCallPartWithArgs, ToolCallPartWithInput, ToolResultPart, } from "./types.js";
|
|
83
83
|
export { getTextFromParts, getToolArguments, hasArgs, hasInput } from "./types.js";
|
|
84
84
|
export { BufferMemory, ConversationMemory, createMemory, createRedisMemory, type Memory, type MemoryPersistence, type MemoryStats, type RedisClient, RedisMemory, type RedisMemoryConfig, SummaryMemory, } from "./memory/index.js";
|
|
85
85
|
export { agentAsTool, createWorkflow, getAgent, getAgentsAsTools, getAllAgentIds, registerAgent, type WorkflowConfig, type WorkflowResult, type WorkflowStep, } from "./composition/index.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/agent/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+EG;AACH,OAAO,yBAAyB,CAAC;AAGjC,YAAY,EACV,KAAK,EACL,WAAW,EACX,YAAY,EACZ,eAAe,EACf,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,OAAO,IAAI,YAAY,EACvB,WAAW,EACX,aAAa,EACb,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEnF,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EACjB,KAAK,MAAM,EACX,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,WAAW,EACX,KAAK,iBAAiB,EACtB,aAAa,GACd,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,WAAW,EACX,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EACL,KAAK,sBAAsB,EAC3B,4BAA4B,EAC5B,KAAK,uBAAuB,EAC5B,6BAA6B,EAC7B,KAAK,kBAAkB,EACvB,wBAAwB,EACxB,KAAK,kBAAkB,EACvB,wBAAwB,GACzB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,qBAAqB,EACrB,KAAK,gBAAgB,EACrB,sBAAsB,EACtB,KAAK,wBAAwB,EAC7B,8BAA8B,EAC9B,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,uBAAuB,EACvB,KAAK,gBAAgB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,4BAA4B,EAC5B,iBAAiB,EACjB,KAAK,wBAAwB,GAC9B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,8BAA8B,EACnC,KAAK,6BAA6B,EAClC,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,KAAK,8BAA8B,EACnC,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/src/agent/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+EG;AACH,OAAO,yBAAyB,CAAC;AAGjC,YAAY,EACV,KAAK,EACL,WAAW,EACX,YAAY,EACZ,eAAe,EACf,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,OAAO,IAAI,YAAY,EACvB,WAAW,EACX,aAAa,EACb,WAAW,EACX,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEnF,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EACjB,KAAK,MAAM,EACX,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,WAAW,EACX,KAAK,iBAAiB,EACtB,aAAa,GACd,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,WAAW,EACX,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EACL,KAAK,sBAAsB,EAC3B,4BAA4B,EAC5B,KAAK,uBAAuB,EAC5B,6BAA6B,EAC7B,KAAK,kBAAkB,EACvB,wBAAwB,EACxB,KAAK,kBAAkB,EACvB,wBAAwB,GACzB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,qBAAqB,EACrB,KAAK,gBAAgB,EACrB,sBAAsB,EACtB,KAAK,wBAAwB,EAC7B,8BAA8B,EAC9B,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,uBAAuB,EACvB,KAAK,gBAAgB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,4BAA4B,EAC5B,iBAAiB,EACjB,KAAK,wBAAwB,GAC9B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,8BAA8B,EACnC,KAAK,6BAA6B,EAClC,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,KAAK,8BAA8B,EACnC,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC"}
|
|
@@ -1,15 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agent Runtime - Core execution engine
|
|
3
|
-
*
|
|
4
|
-
* Handles agent execution with:
|
|
5
|
-
* - Multi-step reasoning (agent loop)
|
|
6
|
-
* - Tool calling and execution
|
|
7
|
-
* - Streaming responses
|
|
8
|
-
* - Memory management
|
|
9
|
-
* - Middleware execution
|
|
10
|
-
*
|
|
11
|
-
* @module ai/agent/runtime
|
|
12
|
-
*/
|
|
13
1
|
import { type AgentConfig, type AgentResponse, type Message, type ToolCall, type ToolResultPart } from "../types.js";
|
|
14
2
|
import { type Memory } from "../memory/index.js";
|
|
15
3
|
import { type ChatStreamState, type StreamingToolResult } from "./chat-stream-handler.js";
|
|
@@ -50,6 +38,8 @@ export declare class AgentRuntime {
|
|
|
50
38
|
private memory;
|
|
51
39
|
private status;
|
|
52
40
|
constructor(id: string, config: AgentConfig);
|
|
41
|
+
private resolveModelTransport;
|
|
42
|
+
private resolveRuntimeState;
|
|
53
43
|
/**
|
|
54
44
|
* Generate a response (non-streaming)
|
|
55
45
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agent Runtime - Core execution engine
|
|
3
|
-
*
|
|
4
|
-
* Handles agent execution with:
|
|
5
|
-
* - Multi-step reasoning (agent loop)
|
|
6
|
-
* - Tool calling and execution
|
|
7
|
-
* - Streaming responses
|
|
8
|
-
* - Memory management
|
|
9
|
-
* - Middleware execution
|
|
10
|
-
*
|
|
11
|
-
* @module ai/agent/runtime
|
|
12
|
-
*/
|
|
13
1
|
import { getTextFromParts, } from "../types.js";
|
|
14
2
|
import { ensureModelReady, resolveModel } from "../../provider/index.js";
|
|
15
3
|
import { generateId } from "../../utils/id.js";
|
|
@@ -163,12 +151,45 @@ export class AgentRuntime {
|
|
|
163
151
|
{ type: "conversation", maxTokens: AGENT_DEFAULTS.memoryMaxTokens };
|
|
164
152
|
this.memory = createMemory(memoryConfig);
|
|
165
153
|
}
|
|
154
|
+
async resolveModelTransport(context, modelOverride, mode) {
|
|
155
|
+
const requestedModel = resolveConfiguredAgentModel(modelOverride || this.config.model);
|
|
156
|
+
const resolvedModelString = resolveRuntimeModel(modelOverride || this.config.model);
|
|
157
|
+
const transport = await this.config.resolveModelTransport?.({
|
|
158
|
+
agentId: this.id,
|
|
159
|
+
requestedModel,
|
|
160
|
+
resolvedModel: resolvedModelString,
|
|
161
|
+
context,
|
|
162
|
+
mode,
|
|
163
|
+
});
|
|
164
|
+
return {
|
|
165
|
+
requestedModel,
|
|
166
|
+
resolvedModelString,
|
|
167
|
+
languageModel: transport?.model ?? resolveModel(resolvedModelString),
|
|
168
|
+
headers: transport?.headers,
|
|
169
|
+
providerOptions: transport?.providerOptions,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
async resolveRuntimeState(messages, context, mode, step, systemPrompt) {
|
|
173
|
+
const refreshed = await this.config.resolveRuntimeState?.({
|
|
174
|
+
agentId: this.id,
|
|
175
|
+
mode,
|
|
176
|
+
step,
|
|
177
|
+
system: systemPrompt,
|
|
178
|
+
messages: [...messages],
|
|
179
|
+
context,
|
|
180
|
+
});
|
|
181
|
+
return {
|
|
182
|
+
systemPrompt: refreshed?.system ?? systemPrompt,
|
|
183
|
+
context: refreshed?.context ?? context,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
166
186
|
/**
|
|
167
187
|
* Generate a response (non-streaming)
|
|
168
188
|
*/
|
|
169
189
|
async generate(input, context, modelOverride, maxOutputTokensOverride) {
|
|
170
|
-
const
|
|
171
|
-
const
|
|
190
|
+
const transport = await this.resolveModelTransport(context, modelOverride, "generate");
|
|
191
|
+
const requestedModel = transport.requestedModel;
|
|
192
|
+
const resolvedModelString = transport.resolvedModelString;
|
|
172
193
|
if (resolvedModelString !== requestedModel) {
|
|
173
194
|
logger.info(`⚡ Using runtime model "${resolvedModelString}" instead of "${requestedModel}".`);
|
|
174
195
|
}
|
|
@@ -193,8 +214,7 @@ export class AgentRuntime {
|
|
|
193
214
|
return chain.execute(agentContext, () => this.executeAgentLoop(systemPrompt, messages, {
|
|
194
215
|
agentId: this.id,
|
|
195
216
|
projectId: tryGetCacheKeyContext()?.projectId,
|
|
196
|
-
|
|
197
|
-
}, resolvedModelString, maxOutputTokensOverride));
|
|
217
|
+
}, context, resolvedModelString, transport.languageModel, transport.headers, transport.providerOptions, maxOutputTokensOverride));
|
|
198
218
|
});
|
|
199
219
|
}
|
|
200
220
|
/**
|
|
@@ -202,8 +222,9 @@ export class AgentRuntime {
|
|
|
202
222
|
* Returns a ReadableStream in the veryfront stream event format.
|
|
203
223
|
*/
|
|
204
224
|
async stream(messages, context, callbacks, modelOverride, maxOutputTokensOverride, abortSignal) {
|
|
205
|
-
const
|
|
206
|
-
const
|
|
225
|
+
const transport = await this.resolveModelTransport(context, modelOverride, "stream");
|
|
226
|
+
const requestedModel = transport.requestedModel;
|
|
227
|
+
const resolvedModelString = transport.resolvedModelString;
|
|
207
228
|
if (resolvedModelString !== requestedModel) {
|
|
208
229
|
logger.info(`⚡ Using runtime model "${resolvedModelString}" instead of "${requestedModel}".`);
|
|
209
230
|
}
|
|
@@ -236,7 +257,7 @@ export class AgentRuntime {
|
|
|
236
257
|
// Resolve model BEFORE creating the ReadableStream — if this throws
|
|
237
258
|
// (e.g., no_ai_available), the error propagates to the caller who can
|
|
238
259
|
// return a proper error response (503) instead of a 200 with an error event.
|
|
239
|
-
const languageModel =
|
|
260
|
+
const languageModel = transport.languageModel;
|
|
240
261
|
// Determine inference mode from the resolved model object (not the string),
|
|
241
262
|
// because resolveModel may internally fall back from cloud to local.
|
|
242
263
|
const isLocal = isLocalModelRuntime(languageModel);
|
|
@@ -267,7 +288,7 @@ export class AgentRuntime {
|
|
|
267
288
|
},
|
|
268
289
|
});
|
|
269
290
|
sendSSE(controller, encoder, { type: "text-start", id: textPartId });
|
|
270
|
-
const response = await this.executeAgentLoopStreaming(systemPrompt, memoryMessages, controller, encoder, callbacks, textPartId, toolContext, resolvedModelString, languageModel, maxOutputTokensOverride, streamAbortSignal);
|
|
291
|
+
const response = await this.executeAgentLoopStreaming(systemPrompt, memoryMessages, controller, encoder, callbacks, textPartId, toolContext, context, resolvedModelString, languageModel, transport.headers, transport.providerOptions, maxOutputTokensOverride, streamAbortSignal);
|
|
271
292
|
throwIfAborted(streamAbortSignal);
|
|
272
293
|
callbacks?.onFinish?.(response);
|
|
273
294
|
throwIfAborted(streamAbortSignal);
|
|
@@ -300,12 +321,12 @@ export class AgentRuntime {
|
|
|
300
321
|
/**
|
|
301
322
|
* Execute agent loop (with tool calling)
|
|
302
323
|
*/
|
|
303
|
-
async executeAgentLoop(systemPrompt, messages,
|
|
324
|
+
async executeAgentLoop(systemPrompt, messages, toolContextBase, runtimeContext, modelString, resolvedModel, headers, providerOptions, maxOutputTokensOverride) {
|
|
304
325
|
return withSpan("agent.execution_loop", async (loopSpan) => {
|
|
305
326
|
const { maxAgentSteps } = getPlatformCapabilities();
|
|
306
327
|
const maxSteps = this.computeMaxSteps(maxAgentSteps);
|
|
307
328
|
const effectiveModel = resolveRuntimeModel(modelString || this.config.model);
|
|
308
|
-
const languageModel = resolveModel(effectiveModel);
|
|
329
|
+
const languageModel = resolvedModel ?? resolveModel(effectiveModel);
|
|
309
330
|
const toolCalls = [];
|
|
310
331
|
const currentMessages = [...messages];
|
|
311
332
|
const totalUsage = { promptTokens: 0, completionTokens: 0, totalTokens: 0 };
|
|
@@ -320,9 +341,15 @@ export class AgentRuntime {
|
|
|
320
341
|
// Request-scoped skill policy (not class-level mutable state)
|
|
321
342
|
let activeSkillPolicy;
|
|
322
343
|
const allowedRemoteToolNames = getRuntimeAllowedRemoteTools(this.config);
|
|
344
|
+
let currentSystemPrompt = systemPrompt;
|
|
345
|
+
let currentRuntimeContext = runtimeContext;
|
|
323
346
|
for (let step = 0; step < maxSteps; step++) {
|
|
324
347
|
this.status = "thinking";
|
|
325
348
|
addSpanEvent(loopSpan, "step_start", { step });
|
|
349
|
+
const runtimeState = await this.resolveRuntimeState(currentMessages, currentRuntimeContext, "generate", step, currentSystemPrompt);
|
|
350
|
+
currentSystemPrompt = runtimeState.systemPrompt;
|
|
351
|
+
currentRuntimeContext = runtimeState.context;
|
|
352
|
+
const toolContext = { ...toolContextBase, ...currentRuntimeContext };
|
|
326
353
|
let tools = isLocal ? [] : await getAvailableTools(this.config.tools, {
|
|
327
354
|
includeSkillTools: Boolean(this.config.skills),
|
|
328
355
|
allowedRemoteToolNames,
|
|
@@ -340,7 +367,7 @@ export class AgentRuntime {
|
|
|
340
367
|
});
|
|
341
368
|
return generateText({
|
|
342
369
|
model: languageModel,
|
|
343
|
-
system:
|
|
370
|
+
system: currentSystemPrompt,
|
|
344
371
|
messages: convertToModelMessages(currentMessages),
|
|
345
372
|
tools: convertToolsToRuntimeTools(tools, {
|
|
346
373
|
model: effectiveModel,
|
|
@@ -349,6 +376,8 @@ export class AgentRuntime {
|
|
|
349
376
|
experimental_repairToolCall: repairToolCall,
|
|
350
377
|
maxOutputTokens: this.resolveMaxOutputTokens(maxOutputTokensOverride),
|
|
351
378
|
temperature: DEFAULT_TEMPERATURE,
|
|
379
|
+
...(headers ? { headers } : {}),
|
|
380
|
+
...(providerOptions ? { providerOptions } : {}),
|
|
352
381
|
});
|
|
353
382
|
});
|
|
354
383
|
// Accumulate usage
|
|
@@ -534,7 +563,7 @@ export class AgentRuntime {
|
|
|
534
563
|
* Emits veryfront stream events (message-start/message-finish + step-start/step-end)
|
|
535
564
|
* while consuming model-runtime `streamText()` parts internally.
|
|
536
565
|
*/
|
|
537
|
-
async executeAgentLoopStreaming(systemPrompt, messages, controller, encoder, callbacks, textPartId,
|
|
566
|
+
async executeAgentLoopStreaming(systemPrompt, messages, controller, encoder, callbacks, textPartId, toolContextBase, runtimeContext, modelString, resolvedModel, headers, providerOptions, maxOutputTokensOverride, abortSignal) {
|
|
538
567
|
const { maxAgentSteps } = getPlatformCapabilities();
|
|
539
568
|
const maxSteps = this.computeMaxSteps(maxAgentSteps);
|
|
540
569
|
const effectiveModel = resolveRuntimeModel(modelString || this.config.model);
|
|
@@ -555,10 +584,16 @@ export class AgentRuntime {
|
|
|
555
584
|
let finalFinishReason;
|
|
556
585
|
let latestAssistantText = "";
|
|
557
586
|
const allowedRemoteToolNames = getRuntimeAllowedRemoteTools(this.config);
|
|
587
|
+
let currentSystemPrompt = systemPrompt;
|
|
588
|
+
let currentRuntimeContext = runtimeContext;
|
|
558
589
|
for (let step = 0; step < maxSteps; step++) {
|
|
559
590
|
throwIfAborted(abortSignal);
|
|
560
591
|
sendSSE(controller, encoder, { type: "step-start" });
|
|
561
592
|
const currentStepToolResults = new Map();
|
|
593
|
+
const runtimeState = await this.resolveRuntimeState(currentMessages, currentRuntimeContext, "stream", step, currentSystemPrompt);
|
|
594
|
+
currentSystemPrompt = runtimeState.systemPrompt;
|
|
595
|
+
currentRuntimeContext = runtimeState.context;
|
|
596
|
+
const toolContext = { ...toolContextBase, ...currentRuntimeContext };
|
|
562
597
|
let tools = isLocalStreaming ? [] : await getAvailableTools(this.config.tools, {
|
|
563
598
|
includeSkillTools: Boolean(this.config.skills),
|
|
564
599
|
allowedRemoteToolNames,
|
|
@@ -571,7 +606,7 @@ export class AgentRuntime {
|
|
|
571
606
|
}
|
|
572
607
|
const result = streamText({
|
|
573
608
|
model: languageModel,
|
|
574
|
-
system:
|
|
609
|
+
system: currentSystemPrompt,
|
|
575
610
|
messages: convertToModelMessages(currentMessages),
|
|
576
611
|
tools: convertToolsToRuntimeTools(tools, {
|
|
577
612
|
model: effectiveModel,
|
|
@@ -580,6 +615,8 @@ export class AgentRuntime {
|
|
|
580
615
|
experimental_repairToolCall: repairToolCall,
|
|
581
616
|
maxOutputTokens: this.resolveMaxOutputTokens(maxOutputTokensOverride),
|
|
582
617
|
temperature: DEFAULT_TEMPERATURE,
|
|
618
|
+
...(headers ? { headers } : {}),
|
|
619
|
+
...(providerOptions ? { providerOptions } : {}),
|
|
583
620
|
abortSignal,
|
|
584
621
|
});
|
|
585
622
|
const state = createStreamState();
|
package/esm/src/agent/types.d.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Agent type definitions
|
|
3
3
|
**************************/
|
|
4
4
|
import * as dntShim from "../../_dnt.shims.js";
|
|
5
|
+
import type { ModelRuntime } from "../provider/types.js";
|
|
5
6
|
import type { RemoteToolSource, Tool } from "../tool/index.js";
|
|
6
7
|
import type { Memory } from "./memory/memory-interface.js";
|
|
7
8
|
export type { AgentContext, AgentResponse, AgentStatus, EdgeConfig, MemoryConfig, Message, MessagePart, ModelProvider, StreamToolCall, ToolCall, ToolCallPart, ToolCallPartWithArgs, ToolCallPartWithInput, ToolResultPart, } from "./schemas/index.js";
|
|
@@ -54,6 +55,16 @@ export interface AgentConfig {
|
|
|
54
55
|
};
|
|
55
56
|
/** Restrict runtime model overrides to these "provider/model" strings. */
|
|
56
57
|
allowedModels?: ModelString[];
|
|
58
|
+
/**
|
|
59
|
+
* Optional request-aware hook for overriding the resolved model runtime and
|
|
60
|
+
* provider transport options on a per-call basis.
|
|
61
|
+
*/
|
|
62
|
+
resolveModelTransport?: ModelTransportResolver;
|
|
63
|
+
/**
|
|
64
|
+
* Optional step-boundary hook for refreshing the runtime system prompt and
|
|
65
|
+
* host-owned context during a long-lived run.
|
|
66
|
+
*/
|
|
67
|
+
resolveRuntimeState?: RuntimeStateResolver;
|
|
57
68
|
/**
|
|
58
69
|
* Enable skills for this agent.
|
|
59
70
|
* - true: include all discovered skills from skills/ directory
|
|
@@ -71,6 +82,32 @@ export interface AgentConfig {
|
|
|
71
82
|
export type ResolvedAgentConfig = AgentConfig & {
|
|
72
83
|
model: ModelString;
|
|
73
84
|
};
|
|
85
|
+
export interface ModelTransportRequest {
|
|
86
|
+
agentId: string;
|
|
87
|
+
requestedModel: ModelString;
|
|
88
|
+
resolvedModel: ModelString;
|
|
89
|
+
context?: Record<string, unknown>;
|
|
90
|
+
mode: "generate" | "stream";
|
|
91
|
+
}
|
|
92
|
+
export interface ResolvedModelTransport {
|
|
93
|
+
model?: ModelRuntime;
|
|
94
|
+
headers?: dntShim.HeadersInit;
|
|
95
|
+
providerOptions?: Record<string, unknown>;
|
|
96
|
+
}
|
|
97
|
+
export type ModelTransportResolver = (request: ModelTransportRequest) => ResolvedModelTransport | Promise<ResolvedModelTransport>;
|
|
98
|
+
export interface RuntimeStateRequest {
|
|
99
|
+
agentId: string;
|
|
100
|
+
mode: "generate" | "stream";
|
|
101
|
+
step: number;
|
|
102
|
+
system: string;
|
|
103
|
+
messages: Message[];
|
|
104
|
+
context?: Record<string, unknown>;
|
|
105
|
+
}
|
|
106
|
+
export interface ResolvedRuntimeState {
|
|
107
|
+
system?: string;
|
|
108
|
+
context?: Record<string, unknown>;
|
|
109
|
+
}
|
|
110
|
+
export type RuntimeStateResolver = (request: RuntimeStateRequest) => ResolvedRuntimeState | undefined | Promise<ResolvedRuntimeState | undefined>;
|
|
74
111
|
import type { AgentContext, AgentResponse } from "./schemas/index.js";
|
|
75
112
|
export type AgentMiddleware = (context: AgentContext, next: () => Promise<AgentResponse>) => Promise<AgentResponse>;
|
|
76
113
|
export declare function getTextFromParts(parts: MessagePart[]): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/src/agent/types.ts"],"names":[],"mappings":"AAAA;;4BAE4B;AAC5B,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAG/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAG3D,YAAY,EACV,YAAY,EACZ,aAAa,EACb,WAAW,EACX,UAAU,EACV,YAAY,EACZ,OAAO,EACP,WAAW,EACX,aAAa,EACb,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAG5B,OAAO,KAAK,EACV,OAAO,EACP,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,oBAAoB,CAAC;AAE5B;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAGjC,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEnE,MAAM,MAAM,eAAe,GACvB;IACA,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB,GACC;IACA,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEJ,MAAM,WAAW,gBAAgB;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,eAAe,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC;IAC9C,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAC/B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,UAAU,CAAC,EAAE;QACX,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,0EAA0E;IAC1E,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;IAC9B;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,IAAI,GAAG,MAAM,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,KAAK,CAAC;CAClB;AAED,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/src/agent/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as dntShim from "../../_dnt.shims.js";
|
|
2
|
+
import type { ToolExecutionContext } from "../tool/index.js";
|
|
3
|
+
import { SessionManager } from "./session.js";
|
|
4
|
+
type JSONRPCParams = Record<string, unknown> | unknown[];
|
|
5
|
+
interface JSONRPCRequest {
|
|
6
|
+
jsonrpc: "2.0";
|
|
7
|
+
id?: string | number;
|
|
8
|
+
method: string;
|
|
9
|
+
params?: JSONRPCParams;
|
|
10
|
+
}
|
|
11
|
+
interface JSONRPCResponse {
|
|
12
|
+
jsonrpc: "2.0";
|
|
13
|
+
id?: string | number;
|
|
14
|
+
result?: unknown;
|
|
15
|
+
error?: {
|
|
16
|
+
code: number;
|
|
17
|
+
message: string;
|
|
18
|
+
data?: unknown;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export interface MCPHTTPTransportDependencies {
|
|
22
|
+
authEnabled: boolean;
|
|
23
|
+
getCORSHeaders: (requestOrigin?: string | null) => Record<string, string>;
|
|
24
|
+
validateAuth: (request: dntShim.Request) => Promise<boolean>;
|
|
25
|
+
handleRequest: (request: JSONRPCRequest, context?: ToolExecutionContext) => Promise<JSONRPCResponse>;
|
|
26
|
+
extractRequestContext: (request: dntShim.Request) => ToolExecutionContext | undefined;
|
|
27
|
+
isOriginAllowed: (requestOrigin?: string | null) => boolean;
|
|
28
|
+
sessionCapabilities: Map<string, Record<string, unknown>>;
|
|
29
|
+
sessionManager: SessionManager;
|
|
30
|
+
}
|
|
31
|
+
export declare function createMCPHTTPHandler(dependencies: MCPHTTPTransportDependencies): (request: dntShim.Request) => Promise<dntShim.Response>;
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=http-transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-transport.d.ts","sourceRoot":"","sources":["../../../src/src/mcp/http-transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAG7D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAK9C,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,EAAE,CAAC;AAEzD,UAAU,cAAc;IACtB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,4BAA4B;IAC3C,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1E,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7D,aAAa,EAAE,CACb,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE,oBAAoB,KAC3B,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9B,qBAAqB,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,oBAAoB,GAAG,SAAS,CAAC;IACtF,eAAe,EAAE,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC;IAC5D,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,cAAc,EAAE,cAAc,CAAC;CAChC;AAmBD,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,4BAA4B,GACzC,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAoGzD"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import * as dntShim from "../../_dnt.shims.js";
|
|
2
|
+
import { VeryfrontError } from "../security/input-validation/errors.js";
|
|
3
|
+
import { validateContentType } from "../security/input-validation/limits.js";
|
|
4
|
+
const MAX_REQUEST_BODY_SIZE = 1_048_576; // 1 MB
|
|
5
|
+
const JSON_CONTENT_TYPE = "application/json";
|
|
6
|
+
function createJSONResponse(body, init) {
|
|
7
|
+
const headers = new dntShim.Headers(init?.headers);
|
|
8
|
+
headers.set("Content-Type", JSON_CONTENT_TYPE);
|
|
9
|
+
return new dntShim.Response(JSON.stringify(body), { ...init, headers });
|
|
10
|
+
}
|
|
11
|
+
function createJSONRPCErrorResponse(status, code, message) {
|
|
12
|
+
return createJSONResponse({
|
|
13
|
+
jsonrpc: "2.0",
|
|
14
|
+
id: null,
|
|
15
|
+
error: { code, message },
|
|
16
|
+
}, { status });
|
|
17
|
+
}
|
|
18
|
+
export function createMCPHTTPHandler(dependencies) {
|
|
19
|
+
const { authEnabled, getCORSHeaders, validateAuth, handleRequest, extractRequestContext, isOriginAllowed, sessionCapabilities, sessionManager, } = dependencies;
|
|
20
|
+
return async (request) => {
|
|
21
|
+
const requestOrigin = request.headers.get("Origin");
|
|
22
|
+
if (request.method === "OPTIONS") {
|
|
23
|
+
return new dntShim.Response(null, { status: 204, headers: getCORSHeaders(requestOrigin) });
|
|
24
|
+
}
|
|
25
|
+
if (!isOriginAllowed(requestOrigin)) {
|
|
26
|
+
return createJSONRPCErrorResponse(403, -32600, "Forbidden: Origin not allowed");
|
|
27
|
+
}
|
|
28
|
+
if (authEnabled) {
|
|
29
|
+
const authorized = await validateAuth(request);
|
|
30
|
+
if (!authorized)
|
|
31
|
+
return new dntShim.Response("Unauthorized", { status: 401 });
|
|
32
|
+
}
|
|
33
|
+
if (request.method === "DELETE") {
|
|
34
|
+
const sessionId = request.headers.get("MCP-Session-Id");
|
|
35
|
+
if (sessionId) {
|
|
36
|
+
sessionManager.terminate(sessionId);
|
|
37
|
+
sessionCapabilities.delete(sessionId);
|
|
38
|
+
}
|
|
39
|
+
return new dntShim.Response(null, { status: 200, headers: getCORSHeaders(requestOrigin) });
|
|
40
|
+
}
|
|
41
|
+
if (request.method !== "POST") {
|
|
42
|
+
return new dntShim.Response("Method Not Allowed", { status: 405 });
|
|
43
|
+
}
|
|
44
|
+
const contentLength = request.headers.get("content-length");
|
|
45
|
+
if (contentLength && Number(contentLength) > MAX_REQUEST_BODY_SIZE) {
|
|
46
|
+
return createJSONRPCErrorResponse(413, -32600, "Request body too large");
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
validateContentType(request, JSON_CONTENT_TYPE);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
const message = error instanceof VeryfrontError ? error.message : "Invalid Content-Type";
|
|
53
|
+
return createJSONRPCErrorResponse(400, -32700, message);
|
|
54
|
+
}
|
|
55
|
+
let rpcRequest;
|
|
56
|
+
try {
|
|
57
|
+
const bodyText = await request.text();
|
|
58
|
+
if (bodyText.length > MAX_REQUEST_BODY_SIZE) {
|
|
59
|
+
return createJSONRPCErrorResponse(413, -32600, "Request body too large");
|
|
60
|
+
}
|
|
61
|
+
rpcRequest = JSON.parse(bodyText);
|
|
62
|
+
}
|
|
63
|
+
catch (_) {
|
|
64
|
+
return createJSONRPCErrorResponse(400, -32700, "Parse error");
|
|
65
|
+
}
|
|
66
|
+
const responseHeaders = {
|
|
67
|
+
...getCORSHeaders(requestOrigin),
|
|
68
|
+
};
|
|
69
|
+
if (rpcRequest.method === "initialize") {
|
|
70
|
+
const context = extractRequestContext(request);
|
|
71
|
+
const rpcResponse = await handleRequest(rpcRequest, context);
|
|
72
|
+
const clientCaps = (rpcRequest.params?.capabilities ??
|
|
73
|
+
{});
|
|
74
|
+
const sessionId = sessionManager.create();
|
|
75
|
+
sessionCapabilities.set(sessionId, clientCaps);
|
|
76
|
+
responseHeaders["MCP-Session-Id"] = sessionId;
|
|
77
|
+
return createJSONResponse(rpcResponse, { headers: responseHeaders });
|
|
78
|
+
}
|
|
79
|
+
if (sessionManager.size > 0) {
|
|
80
|
+
const sessionId = request.headers.get("MCP-Session-Id");
|
|
81
|
+
if (!sessionId) {
|
|
82
|
+
return createJSONRPCErrorResponse(400, -32600, "Missing MCP-Session-Id header");
|
|
83
|
+
}
|
|
84
|
+
if (!sessionManager.isValid(sessionId)) {
|
|
85
|
+
return createJSONRPCErrorResponse(404, -32600, "Session not found or expired");
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (rpcRequest.id === undefined) {
|
|
89
|
+
const context = extractRequestContext(request);
|
|
90
|
+
await handleRequest(rpcRequest, context);
|
|
91
|
+
return new dntShim.Response(null, { status: 202, headers: responseHeaders });
|
|
92
|
+
}
|
|
93
|
+
const context = extractRequestContext(request);
|
|
94
|
+
const rpcResponse = await handleRequest(rpcRequest, context);
|
|
95
|
+
return createJSONResponse(rpcResponse, { headers: responseHeaders });
|
|
96
|
+
};
|
|
97
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAG/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAI7D,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/src/mcp/server.ts"],"names":[],"mappings":"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"}
|