veryfront 0.1.804 → 0.1.806
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/hosted/veryfront-cloud-agent-service.d.ts +1 -1
- package/esm/src/agent/hosted/veryfront-cloud-agent-service.d.ts.map +1 -1
- package/esm/src/agent/hosted/veryfront-cloud-agent-service.js +2 -1
- package/esm/src/agent/project/agent-runtime.d.ts.map +1 -1
- package/esm/src/agent/project/agent-runtime.js +19 -0
- package/esm/src/agent/service/mcp-server-config.js +1 -1
- package/esm/src/server/handlers/request/agent-stream.handler.d.ts.map +1 -1
- package/esm/src/server/handlers/request/agent-stream.handler.js +78 -1
- 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/esm/deno.js
CHANGED
|
@@ -4,7 +4,7 @@ import { type RunAgentServiceMainOptions } from "../service/bootstrap.js";
|
|
|
4
4
|
import { type HostedChatRuntimeCreationResult } from "./chat-runtime-contract.js";
|
|
5
5
|
import type { HostedConversationRootRunContext } from "../conversation/root-run-lifecycle.js";
|
|
6
6
|
import { type AgentRuntimeMessage } from "../runtime/message-adapter.js";
|
|
7
|
-
import type
|
|
7
|
+
import { type AgentServiceMcpServerConfig } from "../service/mcp-server-config.js";
|
|
8
8
|
import type { AgentVeryfrontMcpServerConfig } from "../types.js";
|
|
9
9
|
import { type ProjectAgentRuntimeAgentSource } from "../project/agent-runtime.js";
|
|
10
10
|
import { type CreateNodeAgentServiceRuntimeInfrastructureOptions } from "../service/node-runtime-infrastructure.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"veryfront-cloud-agent-service.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/hosted/veryfront-cloud-agent-service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AAiB9E,OAAO,EAGL,KAAK,WAAW,EAIjB,MAAM,qBAAqB,CAAC;AAiB7B,OAAO,EAGL,KAAK,0BAA0B,EAChC,MAAM,yBAAyB,CAAC;AAOjC,OAAO,EAAE,KAAK,+BAA+B,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AAC9F,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAmBzE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"veryfront-cloud-agent-service.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/hosted/veryfront-cloud-agent-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,7 @@ import { createDefaultHostedChatRuntime, } from "./default-chat-runtime.js";
|
|
|
26
26
|
import { createVeryfrontCloudContextSummaryGenerator } from "./context-summary-generator.js";
|
|
27
27
|
import { createDefaultHostedInvokeAgentTool } from "./default-invoke-agent-tool.js";
|
|
28
28
|
import { createDefaultHostedProjectSteeringRefresh, fetchDefaultHostedProjectSteering, } from "./default-project-steering-refresh.js";
|
|
29
|
+
import { defaultAgentServiceMcpServers, } from "../service/mcp-server-config.js";
|
|
29
30
|
import { createRuntimeAgentDefinitionFromAgent, describeProjectAgentRuntimeAgentIdCandidates, discoverProjectAgentRuntime, doesProjectAgentRuntimeAgentMatchSource, getProjectAgentRuntimeAgentIdCandidates, resolveSingleProjectAgentRuntimeAgentId, } from "../project/agent-runtime.js";
|
|
30
31
|
import { buildVeryfrontCloudRuntimeInstructions } from "./cloud-runtime-system-messages.js";
|
|
31
32
|
import { createNodeAgentServiceRuntimeInfrastructure, } from "../service/node-runtime-infrastructure.js";
|
|
@@ -144,7 +145,7 @@ function resolveDefaultProcessTarget() {
|
|
|
144
145
|
return process;
|
|
145
146
|
}
|
|
146
147
|
function resolveMcpServers(options) {
|
|
147
|
-
return options.mcpServers ??
|
|
148
|
+
return options.mcpServers ?? defaultAgentServiceMcpServers();
|
|
148
149
|
}
|
|
149
150
|
async function loadDefaultCreateBashTool() {
|
|
150
151
|
const provider = tryResolve(SandboxShellToolsProviderName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-runtime.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/project/agent-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAQhE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAItE,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AAKrF,OAAO,KAAK,EAAE,KAAK,EAAe,MAAM,aAAa,CAAC;AAEtD,kEAAkE;AAClE,MAAM,MAAM,8BAA8B,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;AAE1E,yEAAyE;AACzE,MAAM,MAAM,oCAAoC,GAAG;IACjD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF,wDAAwD;AACxD,MAAM,MAAM,gCAAgC,GAAG;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,cAAc,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-runtime.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/project/agent-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAQhE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAItE,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AAKrF,OAAO,KAAK,EAAE,KAAK,EAAe,MAAM,aAAa,CAAC;AAEtD,kEAAkE;AAClE,MAAM,MAAM,8BAA8B,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;AAE1E,yEAAyE;AACzE,MAAM,MAAM,oCAAoC,GAAG;IACjD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF,wDAAwD;AACxD,MAAM,MAAM,gCAAgC,GAAG;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,cAAc,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAuBF,8CAA8C;AAC9C,wBAAgB,kCAAkC,IAAI,IAAI,CAMzD;AAED,6CAA6C;AAC7C,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,gCAAgC,GACtC,OAAO,CAAC,eAAe,CAAC,CAW1B;AAED,4DAA4D;AAC5D,wBAAgB,uCAAuC,CACrD,YAAY,EAAE,KAAK,EACnB,MAAM,EAAE,8BAA8B,GACrC,OAAO,CAOT;AAED,kDAAkD;AAClD,wBAAsB,qCAAqC,CACzD,YAAY,EAAE,KAAK,GAClB,OAAO,CAAC,8BAA8B,CAAC,CAuBzC;AAED,wDAAwD;AACxD,wBAAgB,uCAAuC,CACrD,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,GAAG,IAAI,GAAG,SAAS,GAClE,oCAAoC,CAgBtC;AAED,iEAAiE;AACjE,wBAAgB,4CAA4C,CAC1D,KAAK,EAAE,oCAAoC,GAC1C,MAAM,CAKR;AAED,sDAAsD;AACtD,wBAAgB,uCAAuC,CAAC,KAAK,EAAE;IAC7D,UAAU,EAAE,oCAAoC,CAAC;IACjD,MAAM,EAAE,8BAA8B,CAAC;CACxC,GAAG,MAAM,GAAG,IAAI,CAiBhB"}
|
|
@@ -7,6 +7,19 @@ import { getRuntimeAgentMarkdownDefinition, isRuntimeAgentMarkdownAgent, } from
|
|
|
7
7
|
function resolveAgentSystem(system) {
|
|
8
8
|
return typeof system === "function" ? system() : system;
|
|
9
9
|
}
|
|
10
|
+
function resolveAgentToolNames(tools) {
|
|
11
|
+
if (tools === true) {
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
if (!tools) {
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
const names = Object.entries(tools)
|
|
18
|
+
.filter(([, value]) => value === true)
|
|
19
|
+
.map(([name]) => name)
|
|
20
|
+
.sort();
|
|
21
|
+
return names.length > 0 ? names : undefined;
|
|
22
|
+
}
|
|
10
23
|
/** Clear project agent runtime registries. */
|
|
11
24
|
export function clearProjectAgentRuntimeRegistries() {
|
|
12
25
|
clearTrackedAgents();
|
|
@@ -40,6 +53,7 @@ export async function createRuntimeAgentDefinitionFromAgent(runtimeAgent) {
|
|
|
40
53
|
if (markdownDefinition) {
|
|
41
54
|
return markdownDefinition;
|
|
42
55
|
}
|
|
56
|
+
const toolNames = resolveAgentToolNames(runtimeAgent.config.tools);
|
|
43
57
|
return {
|
|
44
58
|
id: runtimeAgent.id,
|
|
45
59
|
name: runtimeAgent.config.name ?? runtimeAgent.id,
|
|
@@ -50,6 +64,11 @@ export async function createRuntimeAgentDefinitionFromAgent(runtimeAgent) {
|
|
|
50
64
|
? {}
|
|
51
65
|
: { temperature: runtimeAgent.config.temperature }),
|
|
52
66
|
maxSteps: runtimeAgent.config.maxSteps,
|
|
67
|
+
...(runtimeAgent.config.providerTools
|
|
68
|
+
? { providerTools: runtimeAgent.config.providerTools }
|
|
69
|
+
: {}),
|
|
70
|
+
...(runtimeAgent.config.skills === undefined ? {} : { skills: runtimeAgent.config.skills }),
|
|
71
|
+
...(toolNames === undefined ? {} : { tools: toolNames }),
|
|
53
72
|
};
|
|
54
73
|
}
|
|
55
74
|
/** Return project agent runtime agent ID candidates. */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { buildStudioMcpHeaders } from "../project/live-studio-mcp-tools.js";
|
|
2
2
|
import { clientAllowsStudioMcp } from "../runtime/client-profile.js";
|
|
3
3
|
export function defaultAgentServiceMcpServers() {
|
|
4
|
-
return [{ kind: "veryfront-api" }];
|
|
4
|
+
return [{ kind: "veryfront-api" }, { kind: "veryfront-studio" }];
|
|
5
5
|
}
|
|
6
6
|
function createGenericRemoteMcpConfig(server) {
|
|
7
7
|
const config = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-stream.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/agent-stream.handler.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-stream.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/request/agent-stream.handler.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,wCAAwC,CAAC;AAOhD,OAAO,EACL,4BAA4B,EAE7B,MAAM,2CAA2C,CAAC;AAwBnD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AAYnG,MAAM,WAAW,sBACf,SAAQ,yBAAyB,EAAE,+BAA+B;IAClE,4BAA4B,CAAC,EAAE,OAAO,4BAA4B,CAAC;CACpE;AAgZD,qBAAa,kBAAmB,SAAQ,WAAW;IASrC,OAAO,CAAC,QAAQ,CAAC,IAAI;IARjC,QAAQ,EAAE,eAAe,CAMvB;gBAE2B,IAAI,GAAE,sBAAoC;IAIvE,OAAO,CAAC,sBAAsB;IAwBxB,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CAoLxE"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { createRemoteMCPToolSource, toolRegistry, } from "../../../tool/index.js";
|
|
2
2
|
import { defaultChannelInvokeDeps } from "../../../channels/invoke.js";
|
|
3
3
|
import { createRuntimeAgentStreamResponse, } from "../../../internal-agents/run-stream.js";
|
|
4
|
+
import { buildStudioMcpHeaders } from "../../../agent/project/live-studio-mcp-tools.js";
|
|
5
|
+
import { clientAllowsStudioMcp, resolveRuntimeClientProfile, } from "../../../agent/runtime/client-profile.js";
|
|
4
6
|
import { resolveRuntimeOwnerInvokeUrl, RUNTIME_OWNER_INVOKE_URL_HEADER, } from "../../../internal-agents/runtime-owner.js";
|
|
5
7
|
import { ControlPlaneRequestError, verifyControlPlaneRequest, } from "../../../internal-agents/control-plane-auth.js";
|
|
6
8
|
import { INTERNAL_AGENT_STREAM_MAX_BODY_BYTES, InternalAgentRequestBodyTooLargeError, readInternalAgentRequestBody, } from "../../../internal-agents/request-body.js";
|
|
@@ -22,6 +24,15 @@ const defaultDeps = {
|
|
|
22
24
|
const logger = serverLogger.component("agent-stream-handler");
|
|
23
25
|
const RUN_STREAM_PATH_REGEX = /^\/api\/control-plane\/runs\/([^/]+)\/stream$/;
|
|
24
26
|
const VERYFRONT_PLATFORM_REMOTE_TOOL_SOURCE_ID = "veryfront-platform-mcp";
|
|
27
|
+
const VERYFRONT_STUDIO_REMOTE_TOOL_SOURCE_ID = "veryfront-studio-mcp";
|
|
28
|
+
const STUDIO_RUNTIME_REMOTE_TOOL_NAMES = new Set([
|
|
29
|
+
"studio_suggestions",
|
|
30
|
+
"studio_todo_write",
|
|
31
|
+
"studio_panel_control",
|
|
32
|
+
"studio_open_project",
|
|
33
|
+
"studio_display_media",
|
|
34
|
+
"studio_capture_screenshot",
|
|
35
|
+
]);
|
|
25
36
|
const LOCAL_RUNTIME_BOOLEAN_TOOL_NAMES = new Set(["bash"]);
|
|
26
37
|
// Per-environment env var cache shared across all agent stream requests (60s TTL)
|
|
27
38
|
const _agentEnvVarCache = new EnvironmentVariableCache((environmentId, token, projectSlug) => {
|
|
@@ -75,6 +86,28 @@ function mergeAllowedRemoteTools(current, requestedToolNames) {
|
|
|
75
86
|
}
|
|
76
87
|
return [...allowed].sort();
|
|
77
88
|
}
|
|
89
|
+
function isRecord(value) {
|
|
90
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
91
|
+
}
|
|
92
|
+
function getForwardedAllowedRemoteToolNames(forwardedProps) {
|
|
93
|
+
const runtimeOverrides = isRecord(forwardedProps?.runtimeOverrides)
|
|
94
|
+
? forwardedProps.runtimeOverrides
|
|
95
|
+
: null;
|
|
96
|
+
const allowedTools = runtimeOverrides?.allowedTools;
|
|
97
|
+
return Array.isArray(allowedTools) &&
|
|
98
|
+
allowedTools.every((toolName) => typeof toolName === "string")
|
|
99
|
+
? allowedTools
|
|
100
|
+
: [];
|
|
101
|
+
}
|
|
102
|
+
function getRequestedStudioToolNames(input) {
|
|
103
|
+
const requestedToolNames = new Set([
|
|
104
|
+
...getForwardedAllowedRemoteToolNames(input.forwardedProps),
|
|
105
|
+
...(input.availableToolNames ?? []),
|
|
106
|
+
]);
|
|
107
|
+
return [...requestedToolNames]
|
|
108
|
+
.filter((toolName) => STUDIO_RUNTIME_REMOTE_TOOL_NAMES.has(toolName))
|
|
109
|
+
.sort();
|
|
110
|
+
}
|
|
78
111
|
function getVeryfrontApiMcpPolicy(agent) {
|
|
79
112
|
const requestedToolNames = new Set();
|
|
80
113
|
const deniedToolNames = new Set();
|
|
@@ -101,6 +134,10 @@ function hasVeryfrontPlatformRemoteToolSource(remoteTools) {
|
|
|
101
134
|
return remoteTools?.some((source) => source.id === VERYFRONT_PLATFORM_REMOTE_TOOL_SOURCE_ID) ??
|
|
102
135
|
false;
|
|
103
136
|
}
|
|
137
|
+
function hasVeryfrontStudioRemoteToolSource(remoteTools) {
|
|
138
|
+
return remoteTools?.some((source) => source.id === VERYFRONT_STUDIO_REMOTE_TOOL_SOURCE_ID) ??
|
|
139
|
+
false;
|
|
140
|
+
}
|
|
104
141
|
function createStaticRemoteToolSource(source, toolDefinitions) {
|
|
105
142
|
return {
|
|
106
143
|
id: source.id,
|
|
@@ -161,6 +198,38 @@ async function withVeryfrontPlatformRemoteTools(input) {
|
|
|
161
198
|
config: runtimeConfig,
|
|
162
199
|
};
|
|
163
200
|
}
|
|
201
|
+
function withVeryfrontStudioRemoteTools(input) {
|
|
202
|
+
const studioMcpUrl = getHostEnv("VERYFRONT_STUDIO_MCP_URL")?.trim();
|
|
203
|
+
const clientProfile = resolveRuntimeClientProfile(input.forwardedProps);
|
|
204
|
+
const requestedStudioToolNames = getRequestedStudioToolNames({
|
|
205
|
+
forwardedProps: input.forwardedProps,
|
|
206
|
+
availableToolNames: input.availableToolNames,
|
|
207
|
+
});
|
|
208
|
+
if (!input.token ||
|
|
209
|
+
!studioMcpUrl ||
|
|
210
|
+
!clientAllowsStudioMcp(clientProfile) ||
|
|
211
|
+
requestedStudioToolNames.length === 0) {
|
|
212
|
+
return input.agent;
|
|
213
|
+
}
|
|
214
|
+
const runtimeRemoteToolConfig = input.agent.config;
|
|
215
|
+
const remoteTools = runtimeRemoteToolConfig.__vfRemoteToolSources ?? [];
|
|
216
|
+
const studioRemoteToolSources = hasVeryfrontStudioRemoteToolSource(remoteTools) ? [] : [
|
|
217
|
+
createRemoteMCPToolSource({
|
|
218
|
+
id: VERYFRONT_STUDIO_REMOTE_TOOL_SOURCE_ID,
|
|
219
|
+
endpoint: studioMcpUrl,
|
|
220
|
+
headers: () => buildStudioMcpHeaders(input.token ?? "", input.projectId ?? null, input.conversationId),
|
|
221
|
+
}),
|
|
222
|
+
];
|
|
223
|
+
const runtimeConfig = {
|
|
224
|
+
...input.agent.config,
|
|
225
|
+
__vfAllowedRemoteTools: mergeAllowedRemoteTools(runtimeRemoteToolConfig.__vfAllowedRemoteTools, requestedStudioToolNames),
|
|
226
|
+
__vfRemoteToolSources: [...remoteTools, ...studioRemoteToolSources],
|
|
227
|
+
};
|
|
228
|
+
return {
|
|
229
|
+
...input.agent,
|
|
230
|
+
config: runtimeConfig,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
164
233
|
function buildAgentStreamEnv(input) {
|
|
165
234
|
const apiUrl = getHostEnv("VERYFRONT_API_URL") ?? "https://api.veryfront.com";
|
|
166
235
|
return {
|
|
@@ -302,12 +371,20 @@ export class AgentStreamHandler extends BaseHandler {
|
|
|
302
371
|
const runtimeInput = toRuntimeRunAgentInput(payload);
|
|
303
372
|
const apiAuthToken = payload.credentials?.authToken || ctx.proxyToken ||
|
|
304
373
|
getHostEnv("VERYFRONT_API_TOKEN") || "";
|
|
305
|
-
const
|
|
374
|
+
const platformRuntimeAgent = await withVeryfrontPlatformRemoteTools({
|
|
306
375
|
agent: agent,
|
|
307
376
|
token: apiAuthToken || null,
|
|
308
377
|
projectId: ctx.projectId ?? null,
|
|
309
378
|
availableToolNames: runtimeInput.tools.map((tool) => tool.name),
|
|
310
379
|
});
|
|
380
|
+
const runtimeAgent = withVeryfrontStudioRemoteTools({
|
|
381
|
+
agent: platformRuntimeAgent,
|
|
382
|
+
token: apiAuthToken || null,
|
|
383
|
+
projectId: ctx.projectId ?? null,
|
|
384
|
+
forwardedProps: runtimeInput.forwardedProps,
|
|
385
|
+
availableToolNames: runtimeInput.tools.map((tool) => tool.name),
|
|
386
|
+
conversationId: runtimeInput.threadId,
|
|
387
|
+
});
|
|
311
388
|
// Load project env vars so source-defined MCP tool headers resolve
|
|
312
389
|
// via _getProjectEnv(). Control-plane requests don't go through the proxy and
|
|
313
390
|
// therefore don't carry x-environment-id, so we discover the production env ID
|