veryfront 0.1.848 → 0.1.849
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/chat-runtime-tool-assembly.d.ts +2 -0
- package/esm/src/agent/hosted/chat-runtime-tool-assembly.d.ts.map +1 -1
- package/esm/src/agent/hosted/chat-runtime-tool-assembly.js +11 -1
- package/esm/src/agent/hosted/runtime-state-resolver.d.ts +1 -0
- package/esm/src/agent/hosted/runtime-state-resolver.d.ts.map +1 -1
- package/esm/src/agent/hosted/runtime-state-resolver.js +4 -0
- package/esm/src/agent/runtime/agent-runtime-step.d.ts.map +1 -1
- package/esm/src/agent/runtime/agent-runtime-step.js +2 -0
- package/esm/src/agent/runtime/chat-stream-handler.d.ts +5 -0
- package/esm/src/agent/runtime/chat-stream-handler.d.ts.map +1 -1
- package/esm/src/agent/runtime/chat-stream-handler.js +39 -0
- package/esm/src/agent/runtime/index.d.ts.map +1 -1
- package/esm/src/agent/runtime/index.js +82 -2
- package/esm/src/agent/runtime/skill-policy-enforcement.d.ts +4 -0
- package/esm/src/agent/runtime/skill-policy-enforcement.d.ts.map +1 -1
- package/esm/src/agent/runtime/skill-policy-enforcement.js +34 -2
- package/esm/src/agent/runtime/tool-result-continuation.d.ts +1 -1
- package/esm/src/agent/runtime/tool-result-continuation.d.ts.map +1 -1
- package/esm/src/agent/runtime/tool-result-continuation.js +1 -1
- package/esm/src/rendering/renderer.d.ts +2 -0
- package/esm/src/rendering/renderer.d.ts.map +1 -1
- package/esm/src/rendering/renderer.js +38 -6
- 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
|
@@ -5,6 +5,7 @@ import { type AgentServiceMcpServerConfig } from "../service/mcp-server-config.j
|
|
|
5
5
|
import { type HostedProjectRemoteToolSourceMutationHandler, type HostedProjectRemoteToolSourcePrepareToolInput, type HostedProjectRemoteToolSourceProjectSwitchHandler, type HostedProjectRemoteToolSourceRetryPolicy } from "./project-remote-tool-source.js";
|
|
6
6
|
import { type RuntimeClientProfile } from "../runtime/client-profile.js";
|
|
7
7
|
import { type HostedRuntimeAllowedToolNames } from "./runtime-essential-tools.js";
|
|
8
|
+
import type { HostedSubmittedFormInputResult } from "./chat-runtime-contract.js";
|
|
8
9
|
/** Context for hosted chat runtime tool assembly. */
|
|
9
10
|
export type HostedChatRuntimeToolAssemblyContext = DefaultResearchArtifactContext & {
|
|
10
11
|
authToken: string;
|
|
@@ -15,6 +16,7 @@ export type HostedChatRuntimeToolAssemblyContext = DefaultResearchArtifactContex
|
|
|
15
16
|
availableToolNames?: string[];
|
|
16
17
|
availableSkillIds?: readonly string[];
|
|
17
18
|
userId?: string | null;
|
|
19
|
+
submittedFormInputResult?: HostedSubmittedFormInputResult;
|
|
18
20
|
};
|
|
19
21
|
/** Public API contract for hosted chat runtime allowed tool names. */
|
|
20
22
|
export type HostedChatRuntimeAllowedToolNames = HostedRuntimeAllowedToolNames;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-runtime-tool-assembly.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/hosted/chat-runtime-tool-assembly.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,uBAAuB,EAE5B,KAAK,8BAA8B,EACnC,KAAK,yBAAyB,EAC9B,KAAK,gBAAgB,EACrB,KAAK,OAAO,EAEZ,KAAK,qBAAqB,EAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,8BAA8B,EAGpC,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AACnF,OAAO,EAEL,KAAK,4CAA4C,EACjD,KAAK,6CAA6C,EAClD,KAAK,iDAAiD,EACtD,KAAK,wCAAwC,EAC9C,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAIzE,OAAO,EACL,KAAK,6BAA6B,EAGnC,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-runtime-tool-assembly.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/hosted/chat-runtime-tool-assembly.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,16 @@ function activeProjectId(taskContext) {
|
|
|
11
11
|
function activeBranchId(taskContext) {
|
|
12
12
|
return taskContext.branchId ?? null;
|
|
13
13
|
}
|
|
14
|
+
function hasSubmittedFormInputResult(taskContext) {
|
|
15
|
+
return taskContext.submittedFormInputResult !== undefined;
|
|
16
|
+
}
|
|
17
|
+
function filterPostFormInputLocalTools(tools, taskContext) {
|
|
18
|
+
if (!hasSubmittedFormInputResult(taskContext)) {
|
|
19
|
+
return tools;
|
|
20
|
+
}
|
|
21
|
+
const blockedToolNames = new Set(["form_input", "load_skill", "invoke_agent"]);
|
|
22
|
+
return Object.fromEntries(Object.entries(tools).filter(([toolName]) => !blockedToolNames.has(toolName)));
|
|
23
|
+
}
|
|
14
24
|
/** Filter hosted chat runtime local tools. */
|
|
15
25
|
export function filterHostedChatRuntimeLocalTools(input) {
|
|
16
26
|
const allowedToolNames = normalizeHostedRuntimeAllowedToolNames(input.allowedToolNames);
|
|
@@ -25,7 +35,7 @@ export async function prepareHostedChatRuntimeToolAssembly(input) {
|
|
|
25
35
|
availableSkillIds: input.taskContext.availableSkillIds,
|
|
26
36
|
});
|
|
27
37
|
const sortedLocalTools = filterHostedChatRuntimeLocalTools({
|
|
28
|
-
tools: input.localTools,
|
|
38
|
+
tools: filterPostFormInputLocalTools(input.localTools, input.taskContext),
|
|
29
39
|
allowedToolNames,
|
|
30
40
|
});
|
|
31
41
|
const localHostTools = input.traceLocalTools
|
|
@@ -6,6 +6,7 @@ export type HostedRuntimeStateResolverContext = DefaultResearchArtifactContext &
|
|
|
6
6
|
steeringRevision?: number;
|
|
7
7
|
slashCommandArtifactPathSeen?: boolean;
|
|
8
8
|
userId?: string | null;
|
|
9
|
+
submittedFormInputResult?: unknown;
|
|
9
10
|
};
|
|
10
11
|
/** Input payload for hosted runtime state resolver. */
|
|
11
12
|
export type HostedRuntimeStateResolverInput = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-state-resolver.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/hosted/runtime-state-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,8BAA8B,EAGpC,MAAM,mDAAmD,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime-state-resolver.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/hosted/runtime-state-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,8BAA8B,EAGpC,MAAM,mDAAmD,CAAC;AAW3D,iDAAiD;AACjD,MAAM,MAAM,iCAAiC,GAAG,8BAA8B,GAAG;IAC/E,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC,CAAC;AAEF,uDAAuD;AACvD,MAAM,MAAM,+BAA+B,GAAG;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,0DAA0D;AAC1D,MAAM,MAAM,gCAAgC,GAAG;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,uDAAuD;AACvD,MAAM,MAAM,+BAA+B,CAAC,QAAQ,SAAS,iCAAiC,IAAI;IAChG,WAAW,EAAE,QAAQ,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,6DAA6D;AAC7D,MAAM,MAAM,0BAA0B,CAAC,QAAQ,SAAS,iCAAiC,IAAI,CAC3F,KAAK,EAAE,+BAA+B,CAAC,QAAQ,CAAC,KAC7C,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;AAE9B,gEAAgE;AAChE,MAAM,MAAM,uCAAuC,CACjD,QAAQ,SAAS,iCAAiC,IAChD;IACF,WAAW,EAAE,QAAQ,CAAC;IACtB,aAAa,CAAC,EAAE,0BAA0B,CAAC,QAAQ,CAAC,CAAC;CACtD,CAAC;AAcF,4CAA4C;AAC5C,wBAAgB,gCAAgC,CAC9C,QAAQ,SAAS,iCAAiC,EAElD,OAAO,EAAE,uCAAuC,CAAC,QAAQ,CAAC,GACzD,CAAC,KAAK,EAAE,+BAA+B,KAAK,OAAO,CAAC,gCAAgC,CAAC,CAsEvF"}
|
|
@@ -2,6 +2,7 @@ import { extractLatestUserText, updateDefaultResearchArtifacts, } from "../artif
|
|
|
2
2
|
import { addFirstTurnStarterIntentRootOwnershipReminder, addSlashCommandArtifactReminder, evaluateStarterIntentTurnPolicy, FIRST_TURN_STARTER_INTENT_ROOT_OWNERSHIP_CONTEXT_KEY, } from "../conversation/delegation-policy.js";
|
|
3
3
|
import { evaluateSlashCommandArtifactPolicy } from "../artifacts/slash-command-artifact-policy.js";
|
|
4
4
|
import { flattenSystemInstructions } from "../runtime/tool-inventory.js";
|
|
5
|
+
import { SUBMITTED_FORM_INPUT_CONTEXT_KEY } from "../runtime/skill-policy-enforcement.js";
|
|
5
6
|
function activeProjectId(context) {
|
|
6
7
|
return context.projectId ?? null;
|
|
7
8
|
}
|
|
@@ -25,6 +26,9 @@ export function createHostedRuntimeStateResolver(options) {
|
|
|
25
26
|
currentBranchId !== lastAppliedBranchId;
|
|
26
27
|
let nextSystem = system;
|
|
27
28
|
const nextContextRecord = { ...(context ?? {}) };
|
|
29
|
+
if (options.taskContext.submittedFormInputResult) {
|
|
30
|
+
nextContextRecord[SUBMITTED_FORM_INPUT_CONTEXT_KEY] = true;
|
|
31
|
+
}
|
|
28
32
|
if (steeringChanged && options.refreshSystem) {
|
|
29
33
|
nextSystem = await options.refreshSystem({
|
|
30
34
|
taskContext: options.taskContext,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-runtime-step.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/agent-runtime-step.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-runtime-step.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/agent-runtime-step.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAClG,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEzD,MAAM,MAAM,qBAAqB,GAAG,CAClC,WAAW,EAAE,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,SAAS,EAC/D,OAAO,CAAC,EAAE;IACR,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC,8BAA8B,CAAC,EAAE,cAAc,EAAE,CAAC;IAClD,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACvC,iBAAiB,CAAC,EAAE,oBAAoB,CAAC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,KACE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;AAE/B,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,MAAM,wBAAwB,GAAG,CACrC,QAAQ,EAAE,OAAO,EAAE,EACnB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACnD,IAAI,EAAE,oBAAoB,EAC1B,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,KACjB,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAEpC,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACxC,sBAAsB,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC7C,MAAM,EAAE,WAAW,CAAC;IACpB,8BAA8B,EAAE,cAAc,EAAE,GAAG,SAAS,CAAC;IAC7D,iBAAiB,EAAE,qBAAqB,CAAC;IACzC,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,IAAI,EAAE,oBAAoB,CAAC;IAC3B,iBAAiB,EAAE,gBAAgB,EAAE,GAAG,SAAS,CAAC;IAClD,mBAAmB,EAAE,wBAAwB,CAAC;IAC9C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,oBAAoB,GAAG,SAAS,CAAC;CACnD;AAED,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACpD,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,oBAAoB,CAAC;IAClC,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,0EAA0E;AAC1E,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,4BAA4B,GAClC,OAAO,CAAC,wBAAwB,CAAC,CA8BnC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { filterToolsForSkill } from "../../skill/allowed-tools.js";
|
|
2
|
+
import { filterToolsAfterSubmittedFormInput } from "./skill-policy-enforcement.js";
|
|
2
3
|
/** Resolve per-step runtime state and the tools visible for that step. */
|
|
3
4
|
export async function prepareAgentRuntimeStep(input) {
|
|
4
5
|
const runtimeState = await input.resolveRuntimeState(input.messages, input.runtimeContext, input.mode, input.step, input.systemPrompt);
|
|
@@ -14,6 +15,7 @@ export async function prepareAgentRuntimeStep(input) {
|
|
|
14
15
|
if (input.activeSkillPolicy) {
|
|
15
16
|
tools = filterToolsForSkill(tools, input.activeSkillPolicy);
|
|
16
17
|
}
|
|
18
|
+
tools = filterToolsAfterSubmittedFormInput(tools, input.messages, runtimeState.context);
|
|
17
19
|
return {
|
|
18
20
|
runtimeContext: runtimeState.context,
|
|
19
21
|
systemPrompt: runtimeState.systemPrompt,
|
|
@@ -30,6 +30,10 @@ export interface ChatStreamState {
|
|
|
30
30
|
finishReason: string | null;
|
|
31
31
|
toolCalls: Map<string, StreamingToolCall>;
|
|
32
32
|
toolResults: StreamingToolResult[];
|
|
33
|
+
suppressedToolCalls: {
|
|
34
|
+
id: string;
|
|
35
|
+
name: string;
|
|
36
|
+
}[];
|
|
33
37
|
usage: {
|
|
34
38
|
promptTokens: number;
|
|
35
39
|
completionTokens: number;
|
|
@@ -52,6 +56,7 @@ export interface ChatStreamCallbacks {
|
|
|
52
56
|
reasoningTokens?: number;
|
|
53
57
|
}) => void;
|
|
54
58
|
providerExecutedToolNames?: readonly string[];
|
|
59
|
+
availableToolNames?: readonly string[];
|
|
55
60
|
localToolInputIdleTimeoutMs?: number;
|
|
56
61
|
streamIdleTimeoutMs?: number;
|
|
57
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-stream-handler.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/chat-stream-handler.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAqB,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AA0BtF,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,sBAAsB,EAAE,CAAC;IACzC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC1C,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;QACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,wBAAwB,CAAC,EAAE,MAAM,CAAC;QAClC,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAChB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,wBAAwB,CAAC,EAAE,MAAM,CAAC;QAClC,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,KAAK,IAAI,CAAC;IACX,yBAAyB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAuBD,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAevE;AAmKD,wBAAgB,iBAAiB,IAAI,eAAe,
|
|
1
|
+
{"version":3,"file":"chat-stream-handler.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/chat-stream-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -180,6 +180,7 @@ export function createStreamState() {
|
|
|
180
180
|
finishReason: null,
|
|
181
181
|
toolCalls: new Map(),
|
|
182
182
|
toolResults: [],
|
|
183
|
+
suppressedToolCalls: [],
|
|
183
184
|
usage: { promptTokens: 0, completionTokens: 0, totalTokens: 0 },
|
|
184
185
|
};
|
|
185
186
|
}
|
|
@@ -202,6 +203,18 @@ export function processStream(result, state, controller, encoder, textPartId, ca
|
|
|
202
203
|
let shouldStopForCommittedLocalToolCall = false;
|
|
203
204
|
let hasActiveLocalToolInput = false;
|
|
204
205
|
const providerExecutedToolNames = new Set(callbacks?.providerExecutedToolNames ?? []);
|
|
206
|
+
const availableToolNames = callbacks?.availableToolNames
|
|
207
|
+
? new Set(callbacks.availableToolNames)
|
|
208
|
+
: null;
|
|
209
|
+
const suppressedToolCallIds = new Set();
|
|
210
|
+
const isUnavailableTool = (toolName) => availableToolNames !== null && !availableToolNames.has(toolName);
|
|
211
|
+
const suppressToolCall = (toolCallId, toolName) => {
|
|
212
|
+
if (!toolCallId || suppressedToolCallIds.has(toolCallId)) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
suppressedToolCallIds.add(toolCallId);
|
|
216
|
+
state.suppressedToolCalls.push({ id: toolCallId, name: toolName });
|
|
217
|
+
};
|
|
205
218
|
const resolveProviderExecuted = (toolName, providerExecuted) => providerExecuted ?? (providerExecutedToolNames.has(toolName) ? true : undefined);
|
|
206
219
|
const normalizeReasoningId = (part) => typeof part.id === "string" && part.id.length > 0 ? part.id : "reasoning";
|
|
207
220
|
const openTextSegment = () => {
|
|
@@ -467,6 +480,11 @@ export function processStream(result, state, controller, encoder, textPartId, ca
|
|
|
467
480
|
closeReasoningSegment();
|
|
468
481
|
shouldStopForCommittedLocalToolCall = false;
|
|
469
482
|
const toolId = typedPart.id;
|
|
483
|
+
if (isUnavailableTool(typedPart.toolName)) {
|
|
484
|
+
suppressToolCall(toolId, typedPart.toolName);
|
|
485
|
+
hasActiveLocalToolInput = false;
|
|
486
|
+
break;
|
|
487
|
+
}
|
|
470
488
|
const providerExecuted = resolveProviderExecuted(typedPart.toolName, typedPart.providerExecuted);
|
|
471
489
|
hasActiveLocalToolInput = providerExecuted !== true;
|
|
472
490
|
state.toolCalls.set(toolId, {
|
|
@@ -484,6 +502,8 @@ export function processStream(result, state, controller, encoder, textPartId, ca
|
|
|
484
502
|
case "tool-input-delta": {
|
|
485
503
|
closeReasoningSegment();
|
|
486
504
|
const toolId = typedPart.id;
|
|
505
|
+
if (suppressedToolCallIds.has(toolId))
|
|
506
|
+
break;
|
|
487
507
|
const tc = state.toolCalls.get(toolId);
|
|
488
508
|
if (!tc)
|
|
489
509
|
break;
|
|
@@ -496,6 +516,10 @@ export function processStream(result, state, controller, encoder, textPartId, ca
|
|
|
496
516
|
closeTextSegment();
|
|
497
517
|
closeReasoningSegment();
|
|
498
518
|
const toolId = typedPart.id;
|
|
519
|
+
if (suppressedToolCallIds.has(toolId)) {
|
|
520
|
+
hasActiveLocalToolInput = false;
|
|
521
|
+
break;
|
|
522
|
+
}
|
|
499
523
|
const tc = state.toolCalls.get(toolId);
|
|
500
524
|
if (!tc)
|
|
501
525
|
break;
|
|
@@ -526,6 +550,11 @@ export function processStream(result, state, controller, encoder, textPartId, ca
|
|
|
526
550
|
if (!toolId) {
|
|
527
551
|
break;
|
|
528
552
|
}
|
|
553
|
+
if (isUnavailableTool(typedPart.toolName)) {
|
|
554
|
+
suppressToolCall(toolId, typedPart.toolName);
|
|
555
|
+
hasActiveLocalToolInput = false;
|
|
556
|
+
break;
|
|
557
|
+
}
|
|
529
558
|
const providerExecuted = resolveProviderExecuted(typedPart.toolName, typedPart.providerExecuted);
|
|
530
559
|
hasActiveLocalToolInput = false;
|
|
531
560
|
const inputStr = normalizeToolInputString(typedPart.input);
|
|
@@ -562,6 +591,11 @@ export function processStream(result, state, controller, encoder, textPartId, ca
|
|
|
562
591
|
closeReasoningSegment();
|
|
563
592
|
// tool-call fires when the full tool call is available
|
|
564
593
|
const toolId = typedPart.toolCallId;
|
|
594
|
+
if (isUnavailableTool(typedPart.toolName)) {
|
|
595
|
+
suppressToolCall(toolId, typedPart.toolName);
|
|
596
|
+
hasActiveLocalToolInput = false;
|
|
597
|
+
break;
|
|
598
|
+
}
|
|
565
599
|
const providerExecuted = resolveProviderExecuted(typedPart.toolName, typedPart.providerExecuted);
|
|
566
600
|
hasActiveLocalToolInput = false;
|
|
567
601
|
const inputStr = normalizeToolInputString(typedPart.input);
|
|
@@ -601,6 +635,11 @@ export function processStream(result, state, controller, encoder, textPartId, ca
|
|
|
601
635
|
case "tool-result": {
|
|
602
636
|
closeTextSegment();
|
|
603
637
|
closeReasoningSegment();
|
|
638
|
+
if (suppressedToolCallIds.has(typedPart.toolCallId) ||
|
|
639
|
+
isUnavailableTool(typedPart.toolName)) {
|
|
640
|
+
suppressToolCall(typedPart.toolCallId, typedPart.toolName);
|
|
641
|
+
break;
|
|
642
|
+
}
|
|
604
643
|
const providerExecuted = resolveProviderExecuted(typedPart.toolName, typedPart.providerExecuted);
|
|
605
644
|
ensureToolLifecycle({
|
|
606
645
|
toolCallId: typedPart.toolCallId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,KAAK,WAAW,EAEhB,KAAK,aAAa,EAGlB,KAAK,OAAO,EAGZ,KAAK,QAAQ,EAGd,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAqB,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,7 +27,7 @@ import { tryGetCacheKeyContext } from "../../cache/cache-key-builder.js";
|
|
|
27
27
|
import { isLocalModelRuntime } from "../../provider/runtime-inspection.js";
|
|
28
28
|
import { generateText, streamText } from "../../runtime/runtime-bridge.js";
|
|
29
29
|
import { captureStreamedToolCallInput, collectFinalStreamToolResults, collectGeneratedToolResults, createToolErrorMessage, createToolResultMessage, getProviderExecutedToolNames, getToolResultError, isRecoverablePlaceholderToolCall, isStreamedToolCallIncomplete, materializeStreamedToolCall, shouldContinueAfterStreamStep, } from "./tool-result-continuation.js";
|
|
30
|
-
import { enforceSkillPolicy, extractSkillId, extractSkillPolicy, hasSubmittedFormInputResult, hydrateActiveSkillStateFromMessages, LOAD_SKILL_TOOL_ID, removeFormInputAfterSubmission, } from "./skill-policy-enforcement.js";
|
|
30
|
+
import { enforceSkillPolicy, extractSkillId, extractSkillPolicy, FORM_INPUT_TOOL_ID, hasSubmittedFormInputResult, hydrateActiveSkillStateFromMessages, LOAD_SKILL_TOOL_ID, removeFormInputAfterSubmission, SUBMITTED_FORM_INPUT_CONTEXT_KEY, } from "./skill-policy-enforcement.js";
|
|
31
31
|
import { getRuntimeAllowedRemoteTools, getRuntimeForwardedIntegrationToolDefs, getRuntimeProviderTools, } from "./runtime-tool-config.js";
|
|
32
32
|
import { prepareAgentRuntimeStep } from "./agent-runtime-step.js";
|
|
33
33
|
import { buildStreamedAssistantMessage } from "./streamed-assistant-message.js";
|
|
@@ -51,6 +51,33 @@ import { supportsTemperatureParameter } from "./model-capabilities.js";
|
|
|
51
51
|
import { applySkillDelegationOverridesToToolInput, extractSkillDelegationOverrides, } from "./skill-delegation-overrides.js";
|
|
52
52
|
import { resolveAgentModelTransport } from "./model-transport.js";
|
|
53
53
|
const logger = serverLogger.component("agent");
|
|
54
|
+
function parseToolResultJson(result) {
|
|
55
|
+
try {
|
|
56
|
+
return JSON.parse(result);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function containsSubmittedFormInputExecutionResult(result, depth = 0) {
|
|
63
|
+
const normalized = typeof result === "string" ? parseToolResultJson(result) : result;
|
|
64
|
+
if (!normalized || typeof normalized !== "object" || depth > 3) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
if (normalized.submitted === true) {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
return Object.values(normalized).some((value) => containsSubmittedFormInputExecutionResult(value, depth + 1));
|
|
71
|
+
}
|
|
72
|
+
function isSubmittedFormInputExecutionResult(toolName, result) {
|
|
73
|
+
return toolName === FORM_INPUT_TOOL_ID && containsSubmittedFormInputExecutionResult(result);
|
|
74
|
+
}
|
|
75
|
+
function markSubmittedFormInputRuntimeContext(runtimeContext) {
|
|
76
|
+
return {
|
|
77
|
+
...(runtimeContext ?? {}),
|
|
78
|
+
[SUBMITTED_FORM_INPUT_CONTEXT_KEY]: true,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
54
81
|
function isAbortError(error, abortSignal) {
|
|
55
82
|
if (abortSignal?.aborted && error === abortSignal.reason) {
|
|
56
83
|
return true;
|
|
@@ -547,6 +574,7 @@ export class AgentRuntime {
|
|
|
547
574
|
const remoteToolSources = getRuntimeRemoteToolSources(this.config);
|
|
548
575
|
let currentSystemPrompt = systemPrompt;
|
|
549
576
|
let currentRuntimeContext = runtimeContext;
|
|
577
|
+
let toolsDisabledForFinalResponse = false;
|
|
550
578
|
for (let step = 0; step < maxSteps; step++) {
|
|
551
579
|
throwIfAborted(abortSignal);
|
|
552
580
|
sendSSE(controller, encoder, { type: "step-start" });
|
|
@@ -571,11 +599,12 @@ export class AgentRuntime {
|
|
|
571
599
|
currentSystemPrompt = preparedStep.systemPrompt;
|
|
572
600
|
currentRuntimeContext = preparedStep.runtimeContext;
|
|
573
601
|
const toolContext = preparedStep.toolContext;
|
|
574
|
-
const tools = preparedStep.tools;
|
|
602
|
+
const tools = toolsDisabledForFinalResponse ? [] : preparedStep.tools;
|
|
575
603
|
const runtimeTools = convertToolsToRuntimeTools(tools, {
|
|
576
604
|
model: effectiveModel,
|
|
577
605
|
providerTools,
|
|
578
606
|
});
|
|
607
|
+
const runtimeToolNames = Object.keys(runtimeTools ?? {});
|
|
579
608
|
const temperature = this.resolveTemperature(temperatureModelString ?? effectiveModel);
|
|
580
609
|
const result = streamText({
|
|
581
610
|
model: languageModel,
|
|
@@ -594,6 +623,7 @@ export class AgentRuntime {
|
|
|
594
623
|
onChunk: callbacks?.onChunk,
|
|
595
624
|
onUsage: (usage) => accumulateUsage(totalUsage, usage),
|
|
596
625
|
providerExecutedToolNames: getProviderExecutedToolNames(runtimeTools),
|
|
626
|
+
availableToolNames: runtimeToolNames,
|
|
597
627
|
}, abortSignal);
|
|
598
628
|
throwIfAborted(abortSignal);
|
|
599
629
|
finalFinishReason = state.finishReason ?? finalFinishReason;
|
|
@@ -643,6 +673,20 @@ export class AgentRuntime {
|
|
|
643
673
|
latestAssistantText = getTextFromParts(assistantMessage.parts);
|
|
644
674
|
currentMessages.push(assistantMessage);
|
|
645
675
|
await this.memory.add(assistantMessage);
|
|
676
|
+
if (state.suppressedToolCalls.length > 0) {
|
|
677
|
+
const unavailableNames = [
|
|
678
|
+
...new Set(state.suppressedToolCalls.map((toolCall) => toolCall.name)),
|
|
679
|
+
];
|
|
680
|
+
currentMessages.push({
|
|
681
|
+
id: `runtime_note_${Date.now()}_${step}`,
|
|
682
|
+
role: "system",
|
|
683
|
+
parts: [{
|
|
684
|
+
type: "text",
|
|
685
|
+
text: `Runtime recovery: ignored unavailable tool call(s): ${unavailableNames.join(", ")}. Continue using only currently available tools: ${runtimeToolNames.join(", ")}.`,
|
|
686
|
+
}],
|
|
687
|
+
timestamp: Date.now(),
|
|
688
|
+
});
|
|
689
|
+
}
|
|
646
690
|
const finalToolResults = collectFinalStreamToolResults(state);
|
|
647
691
|
const persistToolResult = async (toolResult) => {
|
|
648
692
|
if (currentStepToolResults.has(toolResult.toolCallId)) {
|
|
@@ -711,6 +755,21 @@ export class AgentRuntime {
|
|
|
711
755
|
? undefined
|
|
712
756
|
: stringifyToolError(matchingResult.error);
|
|
713
757
|
toolCalls.push(toolCall);
|
|
758
|
+
if (matchingResult.error === undefined) {
|
|
759
|
+
if (tc.name === LOAD_SKILL_TOOL_ID) {
|
|
760
|
+
activeSkillId = extractSkillId(matchingResult.output);
|
|
761
|
+
activeSkillPolicy = extractSkillPolicy(matchingResult.output);
|
|
762
|
+
activeSkillDelegationOverrides = extractSkillDelegationOverrides(matchingResult.output);
|
|
763
|
+
mustLoadSkillFirst = false;
|
|
764
|
+
}
|
|
765
|
+
activeSkillPolicy = removeFormInputAfterSubmission(tc.name, matchingResult.output, activeSkillId, activeSkillPolicy);
|
|
766
|
+
if (isSubmittedFormInputExecutionResult(tc.name, matchingResult.output)) {
|
|
767
|
+
currentRuntimeContext = markSubmittedFormInputRuntimeContext(currentRuntimeContext);
|
|
768
|
+
}
|
|
769
|
+
if (tc.name === "create_agent") {
|
|
770
|
+
toolsDisabledForFinalResponse = true;
|
|
771
|
+
}
|
|
772
|
+
}
|
|
714
773
|
continue;
|
|
715
774
|
}
|
|
716
775
|
if (persistedResult) {
|
|
@@ -719,6 +778,21 @@ export class AgentRuntime {
|
|
|
719
778
|
toolCall.result = persistedResult.result;
|
|
720
779
|
toolCall.error = persistedError;
|
|
721
780
|
toolCalls.push(toolCall);
|
|
781
|
+
if (persistedError === undefined) {
|
|
782
|
+
if (tc.name === LOAD_SKILL_TOOL_ID) {
|
|
783
|
+
activeSkillId = extractSkillId(persistedResult.result);
|
|
784
|
+
activeSkillPolicy = extractSkillPolicy(persistedResult.result);
|
|
785
|
+
activeSkillDelegationOverrides = extractSkillDelegationOverrides(persistedResult.result);
|
|
786
|
+
mustLoadSkillFirst = false;
|
|
787
|
+
}
|
|
788
|
+
activeSkillPolicy = removeFormInputAfterSubmission(tc.name, persistedResult.result, activeSkillId, activeSkillPolicy);
|
|
789
|
+
if (isSubmittedFormInputExecutionResult(tc.name, persistedResult.result)) {
|
|
790
|
+
currentRuntimeContext = markSubmittedFormInputRuntimeContext(currentRuntimeContext);
|
|
791
|
+
}
|
|
792
|
+
if (tc.name === "create_agent") {
|
|
793
|
+
toolsDisabledForFinalResponse = true;
|
|
794
|
+
}
|
|
795
|
+
}
|
|
722
796
|
continue;
|
|
723
797
|
}
|
|
724
798
|
if (tc.providerExecuted === true) {
|
|
@@ -782,6 +856,12 @@ export class AgentRuntime {
|
|
|
782
856
|
mustLoadSkillFirst = false;
|
|
783
857
|
}
|
|
784
858
|
activeSkillPolicy = removeFormInputAfterSubmission(tc.name, result, activeSkillId, activeSkillPolicy);
|
|
859
|
+
if (isSubmittedFormInputExecutionResult(tc.name, result)) {
|
|
860
|
+
currentRuntimeContext = markSubmittedFormInputRuntimeContext(currentRuntimeContext);
|
|
861
|
+
}
|
|
862
|
+
if (tc.name === "create_agent") {
|
|
863
|
+
toolsDisabledForFinalResponse = true;
|
|
864
|
+
}
|
|
785
865
|
const dynamic = isDynamicTool(tc.name);
|
|
786
866
|
sendSSE(controller, encoder, {
|
|
787
867
|
type: "tool-output-available",
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { Message } from "../types.js";
|
|
2
|
+
import type { ToolDefinition } from "../../tool/index.js";
|
|
2
3
|
import { type SkillDelegationOverrides } from "./skill-delegation-overrides.js";
|
|
3
4
|
export declare const LOAD_SKILL_TOOL_ID = "load_skill";
|
|
4
5
|
export declare const FORM_INPUT_TOOL_ID = "form_input";
|
|
6
|
+
export declare const INVOKE_AGENT_TOOL_ID = "invoke_agent";
|
|
7
|
+
export declare const SUBMITTED_FORM_INPUT_CONTEXT_KEY = "hasSubmittedFormInputResult";
|
|
5
8
|
export declare function hydrateActiveSkillStateFromMessages(messages: readonly Message[]): {
|
|
6
9
|
activeSkillId: string | undefined;
|
|
7
10
|
activeSkillPolicy: string[] | undefined;
|
|
@@ -10,6 +13,7 @@ export declare function hydrateActiveSkillStateFromMessages(messages: readonly M
|
|
|
10
13
|
export declare function extractSkillId(result: unknown): string | undefined;
|
|
11
14
|
export declare function extractSkillPolicy(result: unknown): string[] | undefined;
|
|
12
15
|
export declare function hasSubmittedFormInputResult(messages: readonly Message[]): boolean;
|
|
16
|
+
export declare function filterToolsAfterSubmittedFormInput(tools: readonly ToolDefinition[], messages: readonly Message[], runtimeContext?: Record<string, unknown>): ToolDefinition[];
|
|
13
17
|
export declare function removeFormInputAfterSubmission(toolName: string, result: unknown, activeSkillId: string | undefined, activeSkillPolicy: string[] | undefined): string[] | undefined;
|
|
14
18
|
export declare function narrowPolicyAfterSubmittedForm(activeSkillId: string | undefined, activeSkillPolicy: string[] | undefined): string[] | undefined;
|
|
15
19
|
export type SkillPolicyResult = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-policy-enforcement.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/skill-policy-enforcement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"skill-policy-enforcement.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/skill-policy-enforcement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAO1D,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,iCAAiC,CAAC;AAIzC,eAAO,MAAM,kBAAkB,eAAe,CAAC;AAC/C,eAAO,MAAM,kBAAkB,eAAe,CAAC;AAC/C,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AACnD,eAAO,MAAM,gCAAgC,gCAAgC,CAAC;AAa9E,wBAAgB,mCAAmC,CACjD,QAAQ,EAAE,SAAS,OAAO,EAAE,GAC3B;IACD,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,iBAAiB,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACxC,8BAA8B,EAAE,wBAAwB,GAAG,SAAS,CAAC;CACtE,CAeA;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAIlE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,GAAG,SAAS,CAyBxE;AA2BD,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,CAQjF;AAED,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,SAAS,cAAc,EAAE,EAChC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvC,cAAc,EAAE,CAQlB;AAED,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,EACf,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,iBAAiB,EAAE,MAAM,EAAE,GAAG,SAAS,GACtC,MAAM,EAAE,GAAG,SAAS,CAStB;AAED,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,iBAAiB,EAAE,MAAM,EAAE,GAAG,SAAS,GACtC,MAAM,EAAE,GAAG,SAAS,CAoCtB;AAED,MAAM,MAAM,iBAAiB,GACzB;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,GACjB;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,4BAA4B,CAAC,EAAE,OAAO,CAAC;CACxC,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,EAAE,GAAG,SAAS,EACvC,kBAAkB,EAAE,OAAO,EAC3B,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CAsBnB"}
|
|
@@ -5,6 +5,13 @@ import { extractSkillDelegationOverrides, } from "./skill-delegation-overrides.j
|
|
|
5
5
|
const logger = serverLogger.component("agent");
|
|
6
6
|
export const LOAD_SKILL_TOOL_ID = "load_skill";
|
|
7
7
|
export const FORM_INPUT_TOOL_ID = "form_input";
|
|
8
|
+
export const INVOKE_AGENT_TOOL_ID = "invoke_agent";
|
|
9
|
+
export const SUBMITTED_FORM_INPUT_CONTEXT_KEY = "hasSubmittedFormInputResult";
|
|
10
|
+
const POST_SUBMITTED_FORM_INPUT_BLOCKED_TOOL_IDS = new Set([
|
|
11
|
+
FORM_INPUT_TOOL_ID,
|
|
12
|
+
LOAD_SKILL_TOOL_ID,
|
|
13
|
+
INVOKE_AGENT_TOOL_ID,
|
|
14
|
+
]);
|
|
8
15
|
function getSkillActivationRequiredError(toolName) {
|
|
9
16
|
return `Tool "${toolName}" cannot run before load_skill succeeds in the same step. ` +
|
|
10
17
|
`Call "${LOAD_SKILL_TOOL_ID}" first to establish the active skill context.`;
|
|
@@ -50,15 +57,40 @@ export function extractSkillPolicy(result) {
|
|
|
50
57
|
return [];
|
|
51
58
|
}
|
|
52
59
|
}
|
|
60
|
+
function parseToolResultJson(result) {
|
|
61
|
+
try {
|
|
62
|
+
return JSON.parse(result);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function containsSubmittedFormInputResult(result, depth = 0) {
|
|
69
|
+
const normalized = typeof result === "string" ? parseToolResultJson(result) : result;
|
|
70
|
+
if (!normalized || typeof normalized !== "object" || depth > 3) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
if (normalized.submitted === true) {
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
return Object.values(normalized).some((value) => containsSubmittedFormInputResult(value, depth + 1));
|
|
77
|
+
}
|
|
53
78
|
function isSubmittedFormInputResult(result) {
|
|
54
|
-
return
|
|
55
|
-
result.submitted === true;
|
|
79
|
+
return containsSubmittedFormInputResult(result);
|
|
56
80
|
}
|
|
57
81
|
export function hasSubmittedFormInputResult(messages) {
|
|
58
82
|
return messages.some((message) => message.parts.some((part) => isToolResultPart(part) &&
|
|
59
83
|
part.toolName === FORM_INPUT_TOOL_ID &&
|
|
60
84
|
isSubmittedFormInputResult(part.result)));
|
|
61
85
|
}
|
|
86
|
+
export function filterToolsAfterSubmittedFormInput(tools, messages, runtimeContext) {
|
|
87
|
+
const hasSubmittedFormInput = hasSubmittedFormInputResult(messages) ||
|
|
88
|
+
runtimeContext?.[SUBMITTED_FORM_INPUT_CONTEXT_KEY] === true;
|
|
89
|
+
if (!hasSubmittedFormInput) {
|
|
90
|
+
return [...tools];
|
|
91
|
+
}
|
|
92
|
+
return tools.filter((tool) => !POST_SUBMITTED_FORM_INPUT_BLOCKED_TOOL_IDS.has(tool.name));
|
|
93
|
+
}
|
|
62
94
|
export function removeFormInputAfterSubmission(toolName, result, activeSkillId, activeSkillPolicy) {
|
|
63
95
|
if (toolName !== FORM_INPUT_TOOL_ID || !isSubmittedFormInputResult(result) ||
|
|
64
96
|
activeSkillPolicy === undefined) {
|
|
@@ -8,7 +8,7 @@ export declare function getProviderExecutedToolNames(runtimeTools: RuntimeToolSe
|
|
|
8
8
|
export declare function collectFinalStreamToolResults(state: Pick<ChatStreamState, "toolResults">): Map<string, StreamingToolResult>;
|
|
9
9
|
export declare function collectPersistedToolResults(messages: Message[]): Map<string, ToolResultPart>;
|
|
10
10
|
export declare function collectGeneratedToolResults(toolResults: RuntimeGenerateToolResult[] | undefined): Map<string, RuntimeGenerateToolResult>;
|
|
11
|
-
export declare function shouldContinueAfterStreamStep(state: Pick<ChatStreamState, "accumulatedText" | "finishReason" | "toolCalls" | "toolResults">): boolean;
|
|
11
|
+
export declare function shouldContinueAfterStreamStep(state: Pick<ChatStreamState, "accumulatedText" | "finishReason" | "toolCalls" | "toolResults"> & Partial<Pick<ChatStreamState, "suppressedToolCalls">>): boolean;
|
|
12
12
|
export declare function captureStreamedToolCallInput(toolCall: Pick<StreamingToolCall, "arguments">): {
|
|
13
13
|
args: Record<string, unknown>;
|
|
14
14
|
inputText?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-result-continuation.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/tool-result-continuation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAElF,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,KAAK,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAMtE;AAED,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,EACf,gBAAgB,UAAQ,GACvB,OAAO,CAeT;AAED,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,OAAO,CAcT;AAED,wBAAgB,4BAA4B,CAAC,YAAY,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,EAAE,CAiB/F;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,GAC1C,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAYlC;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,OAAO,EAAE,GAClB,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAkB7B;AAED,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,yBAAyB,EAAE,GAAG,SAAS,GACnD,GAAG,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAQxC;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,
|
|
1
|
+
{"version":3,"file":"tool-result-continuation.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/tool-result-continuation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAElF,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,KAAK,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAMtE;AAED,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,EACf,gBAAgB,UAAQ,GACvB,OAAO,CAeT;AAED,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,OAAO,CAcT;AAED,wBAAgB,4BAA4B,CAAC,YAAY,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,EAAE,CAiB/F;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,GAC1C,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAYlC;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,OAAO,EAAE,GAClB,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAkB7B;AAED,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,yBAAyB,EAAE,GAAG,SAAS,GACnD,GAAG,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAQxC;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EACD,IAAI,CAAC,eAAe,EAAE,iBAAiB,GAAG,cAAc,GAAG,WAAW,GAAG,aAAa,CAAC,GACvF,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC,GACxD,OAAO,CAqET;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC,GAC7C;IACD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAOA;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,GAClD,OAAO,CAET;AAED,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,gBAAgB,GAAG,WAAW,CAAC,GAChE,OAAO,CAMT;AAED,MAAM,MAAM,+BAA+B,GACvC;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GACzD;IACA,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,GACC;IACA,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;CAC1C,CAAC;AAEJ,wBAAgB,2BAA2B,CACzC,EAAE,EAAE,iBAAiB,GACpB,+BAA+B,CAoCjC;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,IAAI,cAAc,CAE1E"}
|
|
@@ -86,7 +86,7 @@ export function collectGeneratedToolResults(toolResults) {
|
|
|
86
86
|
}
|
|
87
87
|
export function shouldContinueAfterStreamStep(state) {
|
|
88
88
|
if (!state.toolCalls.size) {
|
|
89
|
-
return
|
|
89
|
+
return state.finishReason === "tool-calls" && Boolean(state.suppressedToolCalls?.length);
|
|
90
90
|
}
|
|
91
91
|
const streamedToolCalls = Array.from(state.toolCalls.values());
|
|
92
92
|
const hasIncompleteToolCall = streamedToolCalls.some(isStreamedToolCallIncomplete);
|
|
@@ -72,6 +72,8 @@ export declare class Renderer {
|
|
|
72
72
|
private doRenderPage;
|
|
73
73
|
resolvePageData(slug: string, ctx: RenderContext, options?: RenderOptions): Promise<PageDataResponse>;
|
|
74
74
|
getAllPages(ctx: RenderContext): Promise<string[]>;
|
|
75
|
+
pageExists(slug: string, ctx: RenderContext): Promise<boolean>;
|
|
76
|
+
private filterResolvablePrewarmSlugs;
|
|
75
77
|
clearCache(ctx: RenderContext, slug?: string): Promise<void>;
|
|
76
78
|
clearCacheForProject(projectId: string): Promise<void>;
|
|
77
79
|
destroy(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/src/rendering/renderer.ts"],"names":[],"mappings":"AA8CA,OAAO,EACL,mBAAmB,EACnB,+BAA+B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,aAAa,EACnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAKL,KAAK,qBAAqB,EAC3B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,iCAAiC,CAAC;AAgBzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AA4CxD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,oBAAoB;IACpB,KAAK,CAAC,EAAE,wBAAwB,CAAC;CAClC;
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/src/rendering/renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -94,9 +94,7 @@ function prewarmSlugDepth(slug) {
|
|
|
94
94
|
return 0;
|
|
95
95
|
return comparable.split("/").filter(Boolean).length;
|
|
96
96
|
}
|
|
97
|
-
function selectPrewarmSlugs(currentSlug, pages
|
|
98
|
-
if (maxRoutes <= 0)
|
|
99
|
-
return [];
|
|
97
|
+
function selectPrewarmSlugs(currentSlug, pages) {
|
|
100
98
|
const currentComparable = normalizeComparableSlug(currentSlug);
|
|
101
99
|
const seen = new Set();
|
|
102
100
|
const candidates = [];
|
|
@@ -107,11 +105,11 @@ function selectPrewarmSlugs(currentSlug, pages, maxRoutes) {
|
|
|
107
105
|
if (comparable === currentComparable || seen.has(comparable))
|
|
108
106
|
continue;
|
|
109
107
|
seen.add(comparable);
|
|
110
|
-
candidates.push({
|
|
108
|
+
candidates.push({ comparable });
|
|
111
109
|
}
|
|
112
110
|
candidates.sort((a, b) => prewarmSlugDepth(a.comparable) - prewarmSlugDepth(b.comparable) ||
|
|
113
111
|
a.comparable.localeCompare(b.comparable));
|
|
114
|
-
return candidates.
|
|
112
|
+
return candidates.map(({ comparable }) => comparable);
|
|
115
113
|
}
|
|
116
114
|
/**
|
|
117
115
|
* Renderer - Shared renderer for all projects
|
|
@@ -360,8 +358,11 @@ export class Renderer {
|
|
|
360
358
|
};
|
|
361
359
|
}
|
|
362
360
|
async runProductionRenderPrewarm(currentSlug, ctx, options) {
|
|
361
|
+
if (RENDER_PREWARM_MAX_ROUTES <= 0)
|
|
362
|
+
return;
|
|
363
363
|
const pages = await this.getAllPages(ctx);
|
|
364
|
-
const
|
|
364
|
+
const candidateSlugs = selectPrewarmSlugs(currentSlug, pages);
|
|
365
|
+
const slugs = await this.filterResolvablePrewarmSlugs(ctx, candidateSlugs, RENDER_PREWARM_MAX_ROUTES);
|
|
365
366
|
if (slugs.length === 0)
|
|
366
367
|
return;
|
|
367
368
|
logger.debug("Production render prewarm started", {
|
|
@@ -498,6 +499,37 @@ export class Renderer {
|
|
|
498
499
|
}
|
|
499
500
|
return createPageResolver(ctx).getAllPages();
|
|
500
501
|
}
|
|
502
|
+
async pageExists(slug, ctx) {
|
|
503
|
+
if (!this.initialized) {
|
|
504
|
+
throw INITIALIZATION_ERROR.create({
|
|
505
|
+
detail: "Renderer not initialized. Call initialize() first.",
|
|
506
|
+
});
|
|
507
|
+
}
|
|
508
|
+
return createPageResolver(ctx).pageExists(slug);
|
|
509
|
+
}
|
|
510
|
+
async filterResolvablePrewarmSlugs(ctx, slugs, maxRoutes) {
|
|
511
|
+
if (maxRoutes <= 0)
|
|
512
|
+
return [];
|
|
513
|
+
const resolvable = [];
|
|
514
|
+
for (const slug of slugs) {
|
|
515
|
+
try {
|
|
516
|
+
if (await this.pageExists(slug, ctx)) {
|
|
517
|
+
resolvable.push(slug);
|
|
518
|
+
if (resolvable.length >= maxRoutes)
|
|
519
|
+
break;
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
catch (error) {
|
|
523
|
+
logger.warn("Production render prewarm route validation failed", {
|
|
524
|
+
slug,
|
|
525
|
+
projectId: ctx.projectId,
|
|
526
|
+
releaseId: ctx.releaseId,
|
|
527
|
+
error: error instanceof Error ? error.message : String(error),
|
|
528
|
+
});
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
return resolvable;
|
|
532
|
+
}
|
|
501
533
|
async clearCache(ctx, slug) {
|
|
502
534
|
if (slug) {
|
|
503
535
|
await this.cache.clearSlug(slug, ctx);
|