veryfront 0.1.986 → 0.1.988
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/extensions/ext-llm-openai/src/openai-chat-request-builder.d.ts +2 -7
- package/esm/extensions/ext-llm-openai/src/openai-chat-request-builder.d.ts.map +1 -1
- package/esm/extensions/ext-llm-openai/src/openai-chat-request-builder.js +10 -25
- package/esm/extensions/ext-llm-openai/src/openai-reasoning-models.d.ts +17 -0
- package/esm/extensions/ext-llm-openai/src/openai-reasoning-models.d.ts.map +1 -0
- package/esm/extensions/ext-llm-openai/src/openai-reasoning-models.js +70 -0
- package/esm/extensions/ext-llm-openai/src/openai-responses-request-builder.d.ts.map +1 -1
- package/esm/extensions/ext-llm-openai/src/openai-responses-request-builder.js +20 -27
- package/esm/src/agent/hosted/chat-request-parser.d.ts +3 -0
- package/esm/src/agent/hosted/chat-request-parser.d.ts.map +1 -1
- package/esm/src/agent/hosted/chat-request-parser.js +8 -0
- package/esm/src/agent/hosted/veryfront-cloud-agent-service.d.ts.map +1 -1
- package/esm/src/agent/hosted/veryfront-cloud-agent-service.js +3 -1
- package/esm/src/agent/runtime/agent-invocation-contract.d.ts +37 -0
- package/esm/src/agent/runtime/agent-invocation-contract.d.ts.map +1 -1
- package/esm/src/agent/runtime/agent-invocation-contract.js +12 -0
- package/esm/src/internal-agents/schema.d.ts +36 -0
- package/esm/src/internal-agents/schema.d.ts.map +1 -1
- package/esm/src/internal-agents/schema.js +12 -1
- package/esm/src/proxy/tracing.d.ts +36 -4
- package/esm/src/proxy/tracing.d.ts.map +1 -1
- package/esm/src/proxy/tracing.js +113 -31
- package/esm/src/server/handlers/request/agent-stream.handler.d.ts.map +1 -1
- package/esm/src/server/handlers/request/agent-stream.handler.js +8 -1
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +2 -2
package/esm/deno.js
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import type { OpenAICompatibleChatRequest, RuntimePromptMessage } from "../../../src/provider/shared/index.js";
|
|
2
|
-
|
|
3
|
-
type ProviderReasoningOption = {
|
|
4
|
-
enabled?: boolean;
|
|
5
|
-
effort?: ProviderReasoningEffort;
|
|
6
|
-
budgetTokens?: number;
|
|
7
|
-
};
|
|
2
|
+
import { type OpenAIProviderReasoningOption } from "./openai-reasoning-models.js";
|
|
8
3
|
export type RuntimeToolDefinition = {
|
|
9
4
|
type: "function";
|
|
10
5
|
name: string;
|
|
@@ -32,7 +27,7 @@ export type OpenAICompatibleLanguageOptions = {
|
|
|
32
27
|
providerOptions?: Record<string, unknown>;
|
|
33
28
|
includeRawChunks?: boolean;
|
|
34
29
|
abortSignal?: AbortSignal;
|
|
35
|
-
reasoning?:
|
|
30
|
+
reasoning?: OpenAIProviderReasoningOption;
|
|
36
31
|
userId?: string;
|
|
37
32
|
serviceTier?: "auto" | "default" | "flex" | "scale";
|
|
38
33
|
parallelToolCalls?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-chat-request-builder.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-openai/src/openai-chat-request-builder.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"openai-chat-request-builder.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-openai/src/openai-chat-request-builder.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC/G,OAAO,EACL,KAAK,6BAA6B,EAGnC,MAAM,8BAA8B,CAAC;AAEtC,MAAM,MAAM,qBAAqB,GAC7B;IACA,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;CACtB,GACC;IACA,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B,CAAC;AAEJ,MAAM,MAAM,+BAA+B,GAAG;IAC5C,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAChC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,SAAS,CAAC,EAAE,6BAA6B,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IACpD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EACX;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAChB;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAChB;QACA,IAAI,EAAE,aAAa,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,OAAO,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;CACL,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,IAAI,CAAC,OAAO,EAAE;QACZ,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC;QACtC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI,CAAC;IACT,KAAK,IAAI,KAAK,CAAC;QACb,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC;QACtC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ,CAAC;AAUF,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,+BAA+B,EACxC,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,gBAAgB,GACzB,2BAA2B,CA4G7B"}
|
|
@@ -1,34 +1,17 @@
|
|
|
1
1
|
import { readProviderOptions, toOpenAICompatibleMessages, toOpenAICompatibleTools, unwrapToolInputSchema, } from "../../../src/provider/shared/index.js";
|
|
2
|
-
|
|
3
|
-
return /^o[134](-|$)/.test(modelId);
|
|
4
|
-
}
|
|
2
|
+
import { rejectsOpenAISamplingParams, resolveOpenAIReasoningConfig, } from "./openai-reasoning-models.js";
|
|
5
3
|
function isNativeOpenAIModel(modelId) {
|
|
6
4
|
return /^(gpt-|o[134](-|$)|chatgpt-)/.test(modelId);
|
|
7
5
|
}
|
|
8
6
|
function isFixedSamplingModel(modelId) {
|
|
9
7
|
return /^kimi-k2\.5/.test(modelId);
|
|
10
8
|
}
|
|
11
|
-
function resolveOpenAIReasoningEffort(option) {
|
|
12
|
-
if (!option || option.enabled !== true) {
|
|
13
|
-
return undefined;
|
|
14
|
-
}
|
|
15
|
-
switch (option.effort) {
|
|
16
|
-
case "low":
|
|
17
|
-
return "low";
|
|
18
|
-
case "high":
|
|
19
|
-
case "max":
|
|
20
|
-
return "high";
|
|
21
|
-
case "medium":
|
|
22
|
-
default:
|
|
23
|
-
return "medium";
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
9
|
export function buildOpenAIChatRequest(modelId, providerName, options, stream, warnings) {
|
|
27
|
-
const
|
|
28
|
-
const
|
|
29
|
-
const
|
|
10
|
+
const reasoning = resolveOpenAIReasoningConfig(modelId, providerName, options.reasoning);
|
|
11
|
+
const reasoningEnabled = reasoning !== undefined;
|
|
12
|
+
const samplingRejected = rejectsOpenAISamplingParams(modelId);
|
|
30
13
|
const fixedSampling = isFixedSamplingModel(modelId);
|
|
31
|
-
const dropSamplingParams = reasoningEnabled || fixedSampling;
|
|
14
|
+
const dropSamplingParams = reasoningEnabled || samplingRejected || fixedSampling;
|
|
32
15
|
// OpenAI Chat Completions has no top_k surface.
|
|
33
16
|
if (options.topK !== undefined) {
|
|
34
17
|
warnings.push({
|
|
@@ -38,7 +21,7 @@ export function buildOpenAIChatRequest(modelId, providerName, options, stream, w
|
|
|
38
21
|
details: "OpenAI Chat Completions does not expose top_k; the value was dropped.",
|
|
39
22
|
});
|
|
40
23
|
}
|
|
41
|
-
// Reasoning models
|
|
24
|
+
// Reasoning models and models with fixed sampling params
|
|
42
25
|
// reject sampling params outright. Emit warnings.
|
|
43
26
|
if (dropSamplingParams) {
|
|
44
27
|
const dropped = [
|
|
@@ -55,7 +38,9 @@ export function buildOpenAIChatRequest(modelId, providerName, options, stream, w
|
|
|
55
38
|
setting: key,
|
|
56
39
|
details: fixedSampling
|
|
57
40
|
? `Dropped because this model uses fixed sampling parameters.`
|
|
58
|
-
:
|
|
41
|
+
: samplingRejected
|
|
42
|
+
? `Dropped because this model rejects ${openaiName}.`
|
|
43
|
+
: `Dropped because reasoning was active for this request and OpenAI rejects ${openaiName} with reasoning.`,
|
|
59
44
|
});
|
|
60
45
|
}
|
|
61
46
|
}
|
|
@@ -87,7 +72,7 @@ export function buildOpenAIChatRequest(modelId, providerName, options, stream, w
|
|
|
87
72
|
...(!dropSamplingParams && options.frequencyPenalty !== undefined
|
|
88
73
|
? { frequency_penalty: options.frequencyPenalty }
|
|
89
74
|
: {}),
|
|
90
|
-
...(
|
|
75
|
+
...(reasoning !== undefined ? { reasoning_effort: reasoning.effort } : {}),
|
|
91
76
|
...(typeof options.userId === "string" && options.userId.length > 0
|
|
92
77
|
? { user: options.userId }
|
|
93
78
|
: {}),
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type OpenAIReasoningEffort = "low" | "medium" | "high";
|
|
2
|
+
export type OpenAIProviderReasoningEffort = OpenAIReasoningEffort | "max";
|
|
3
|
+
export type OpenAIProviderReasoningOption = {
|
|
4
|
+
enabled?: boolean;
|
|
5
|
+
effort?: OpenAIProviderReasoningEffort;
|
|
6
|
+
budgetTokens?: number;
|
|
7
|
+
};
|
|
8
|
+
export type ResolvedOpenAIReasoning = {
|
|
9
|
+
effort: OpenAIReasoningEffort;
|
|
10
|
+
source: "default" | "explicit";
|
|
11
|
+
};
|
|
12
|
+
export declare function getDefaultOpenAIReasoningEffort(modelId: string, providerName?: string): OpenAIReasoningEffort | undefined;
|
|
13
|
+
export declare function resolveOpenAIReasoningConfig(modelId: string, providerName: string, option: OpenAIProviderReasoningOption | undefined): ResolvedOpenAIReasoning | undefined;
|
|
14
|
+
export declare function shouldRequestOpenAIReasoningSummary(providerName: string, reasoning: ResolvedOpenAIReasoning): boolean;
|
|
15
|
+
export declare function isOpenAIReasoningModel(modelId: string, providerName?: string): boolean;
|
|
16
|
+
export declare function rejectsOpenAISamplingParams(modelId: string): boolean;
|
|
17
|
+
//# sourceMappingURL=openai-reasoning-models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-reasoning-models.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-openai/src/openai-reasoning-models.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE9D,MAAM,MAAM,6BAA6B,GAAG,qBAAqB,GAAG,KAAK,CAAC;AAE1E,MAAM,MAAM,6BAA6B,GAAG;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,6BAA6B,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,MAAM,EAAE,SAAS,GAAG,UAAU,CAAC;CAChC,CAAC;AA6BF,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,MAAM,EACf,YAAY,SAAW,GACtB,qBAAqB,GAAG,SAAS,CA0BnC;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,6BAA6B,GAAG,SAAS,GAChD,uBAAuB,GAAG,SAAS,CAoBrC;AAED,wBAAgB,mCAAmC,CACjD,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,uBAAuB,GACjC,OAAO,CAET;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,SAAW,GAAG,OAAO,CAExF;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAIpE"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
const DEFAULT_REASONING_EFFORT = "medium";
|
|
2
|
+
function supportsDefaultReasoningParams(providerName) {
|
|
3
|
+
return providerName === "openai" || providerName === "veryfront-cloud";
|
|
4
|
+
}
|
|
5
|
+
function isGpt5ChatSnapshot(modelId) {
|
|
6
|
+
return /^gpt-5-chat($|-)/.test(modelId);
|
|
7
|
+
}
|
|
8
|
+
function isGpt51(modelId) {
|
|
9
|
+
return /^gpt-5\.1($|-)/.test(modelId);
|
|
10
|
+
}
|
|
11
|
+
function isReasoningCapableGpt5(modelId) {
|
|
12
|
+
if (isGpt5ChatSnapshot(modelId) || isGpt51(modelId)) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
if (/^gpt-5(-|$)/.test(modelId)) {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
const gpt5Version = /^gpt-5\.(\d+)(-|$)/.exec(modelId)?.[1];
|
|
19
|
+
return gpt5Version !== undefined && Number.parseInt(gpt5Version, 10) >= 2;
|
|
20
|
+
}
|
|
21
|
+
export function getDefaultOpenAIReasoningEffort(modelId, providerName = "openai") {
|
|
22
|
+
const normalized = modelId.toLowerCase();
|
|
23
|
+
const normalizedProvider = providerName.toLowerCase();
|
|
24
|
+
if (!supportsDefaultReasoningParams(normalizedProvider)) {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
if (isGpt5ChatSnapshot(normalized)) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
// GPT-5.1 defaults upstream reasoning to none unless callers opt in explicitly.
|
|
31
|
+
if (isGpt51(normalized)) {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
if (/^o1($|-\d)/.test(normalized) || /^o[34](-|$)/.test(normalized)) {
|
|
35
|
+
return DEFAULT_REASONING_EFFORT;
|
|
36
|
+
}
|
|
37
|
+
if (isReasoningCapableGpt5(normalized)) {
|
|
38
|
+
return DEFAULT_REASONING_EFFORT;
|
|
39
|
+
}
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
export function resolveOpenAIReasoningConfig(modelId, providerName, option) {
|
|
43
|
+
if (!option) {
|
|
44
|
+
const effort = getDefaultOpenAIReasoningEffort(modelId, providerName);
|
|
45
|
+
return effort === undefined ? undefined : { effort, source: "default" };
|
|
46
|
+
}
|
|
47
|
+
if (option.enabled !== true) {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
switch (option.effort) {
|
|
51
|
+
case "low":
|
|
52
|
+
return { effort: "low", source: "explicit" };
|
|
53
|
+
case "high":
|
|
54
|
+
case "max":
|
|
55
|
+
return { effort: "high", source: "explicit" };
|
|
56
|
+
case "medium":
|
|
57
|
+
default:
|
|
58
|
+
return { effort: "medium", source: "explicit" };
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export function shouldRequestOpenAIReasoningSummary(providerName, reasoning) {
|
|
62
|
+
return reasoning.source === "explicit" || providerName.toLowerCase() === "veryfront-cloud";
|
|
63
|
+
}
|
|
64
|
+
export function isOpenAIReasoningModel(modelId, providerName = "openai") {
|
|
65
|
+
return getDefaultOpenAIReasoningEffort(modelId, providerName) !== undefined;
|
|
66
|
+
}
|
|
67
|
+
export function rejectsOpenAISamplingParams(modelId) {
|
|
68
|
+
const normalized = modelId.toLowerCase();
|
|
69
|
+
return /^o[134]($|-)/.test(normalized) || isReasoningCapableGpt5(normalized);
|
|
70
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-responses-request-builder.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-openai/src/openai-responses-request-builder.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,+BAA+B,EAEhC,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"openai-responses-request-builder.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-llm-openai/src/openai-responses-request-builder.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,+BAA+B,EAEhC,MAAM,kCAAkC,CAAC;AAO1C,MAAM,MAAM,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE/D,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,wBAAwB,EAAE,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACvC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,IAAI,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAC3C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,IAAI,CAAC,OAAO,EAAE;QACZ,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC;QACtC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI,CAAC;IACT,KAAK,IAAI,KAAK,CAAC;QACb,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC;QACtC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ,CAAC;AA6IF,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,+BAA+B,EACxC,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,gBAAgB,GACzB,sBAAsB,CA0FxB"}
|
|
@@ -1,22 +1,5 @@
|
|
|
1
1
|
import { readProviderOptions, stringifyJsonValue, unwrapToolInputSchema, } from "../../../src/provider/shared/index.js";
|
|
2
|
-
|
|
3
|
-
return /^o[134](-|$)/.test(modelId);
|
|
4
|
-
}
|
|
5
|
-
function resolveOpenAIReasoningEffort(option) {
|
|
6
|
-
if (!option || option.enabled !== true) {
|
|
7
|
-
return undefined;
|
|
8
|
-
}
|
|
9
|
-
switch (option.effort) {
|
|
10
|
-
case "low":
|
|
11
|
-
return "low";
|
|
12
|
-
case "high":
|
|
13
|
-
case "max":
|
|
14
|
-
return "high";
|
|
15
|
-
case "medium":
|
|
16
|
-
default:
|
|
17
|
-
return "medium";
|
|
18
|
-
}
|
|
19
|
-
}
|
|
2
|
+
import { rejectsOpenAISamplingParams, resolveOpenAIReasoningConfig, shouldRequestOpenAIReasoningSummary, } from "./openai-reasoning-models.js";
|
|
20
3
|
function toSnakeCaseRecord(record) {
|
|
21
4
|
return Object.fromEntries(Object.entries(record).map(([key, value]) => [
|
|
22
5
|
key.replace(/[A-Z]/g, (match) => `_${match.toLowerCase()}`),
|
|
@@ -142,9 +125,10 @@ function toOpenAIResponsesTools(tools) {
|
|
|
142
125
|
return normalized.length > 0 ? normalized : undefined;
|
|
143
126
|
}
|
|
144
127
|
export function buildOpenAIResponsesRequest(modelId, providerName, options, stream, warnings) {
|
|
145
|
-
const
|
|
146
|
-
const
|
|
147
|
-
const
|
|
128
|
+
const reasoning = resolveOpenAIReasoningConfig(modelId, providerName, options.reasoning);
|
|
129
|
+
const reasoningEnabled = reasoning !== undefined;
|
|
130
|
+
const samplingRejected = rejectsOpenAISamplingParams(modelId);
|
|
131
|
+
const dropSamplingParams = reasoningEnabled || samplingRejected;
|
|
148
132
|
if (options.topK !== undefined) {
|
|
149
133
|
warnings.push({
|
|
150
134
|
type: "unsupported-setting",
|
|
@@ -153,7 +137,7 @@ export function buildOpenAIResponsesRequest(modelId, providerName, options, stre
|
|
|
153
137
|
details: "OpenAI Responses API does not expose top_k; the value was dropped.",
|
|
154
138
|
});
|
|
155
139
|
}
|
|
156
|
-
if (
|
|
140
|
+
if (dropSamplingParams) {
|
|
157
141
|
const dropped = [
|
|
158
142
|
["temperature", "temperature"],
|
|
159
143
|
["topP", "top_p"],
|
|
@@ -166,7 +150,9 @@ export function buildOpenAIResponsesRequest(modelId, providerName, options, stre
|
|
|
166
150
|
type: "unsupported-setting",
|
|
167
151
|
provider: "openai",
|
|
168
152
|
setting: key,
|
|
169
|
-
details:
|
|
153
|
+
details: samplingRejected
|
|
154
|
+
? `Dropped because this model rejects ${openaiName}.`
|
|
155
|
+
: `Dropped because reasoning was active for this request and OpenAI rejects ${openaiName} with reasoning.`,
|
|
170
156
|
});
|
|
171
157
|
}
|
|
172
158
|
}
|
|
@@ -181,14 +167,21 @@ export function buildOpenAIResponsesRequest(modelId, providerName, options, stre
|
|
|
181
167
|
...(options.maxOutputTokens !== undefined
|
|
182
168
|
? { max_output_tokens: options.maxOutputTokens }
|
|
183
169
|
: {}),
|
|
184
|
-
...(!
|
|
170
|
+
...(!dropSamplingParams && options.temperature !== undefined
|
|
185
171
|
? { temperature: options.temperature }
|
|
186
172
|
: {}),
|
|
187
|
-
...(!
|
|
173
|
+
...(!dropSamplingParams && options.topP !== undefined ? { top_p: options.topP } : {}),
|
|
188
174
|
...(responsesTools ? { tools: responsesTools } : {}),
|
|
189
175
|
...(options.toolChoice !== undefined ? { tool_choice: options.toolChoice } : {}),
|
|
190
|
-
...(
|
|
191
|
-
? {
|
|
176
|
+
...(reasoning !== undefined
|
|
177
|
+
? {
|
|
178
|
+
reasoning: {
|
|
179
|
+
effort: reasoning.effort,
|
|
180
|
+
...(shouldRequestOpenAIReasoningSummary(providerName, reasoning)
|
|
181
|
+
? { summary: "auto" }
|
|
182
|
+
: {}),
|
|
183
|
+
},
|
|
184
|
+
}
|
|
192
185
|
: {}),
|
|
193
186
|
...(typeof options.userId === "string" && options.userId.length > 0
|
|
194
187
|
? { user: options.userId }
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ChatRequestContext, ChatRuntimeOverrides, ChatUiMessage, DurableRootRunDescriptor } from "../../chat/types.js";
|
|
2
2
|
import { type HostedChatRequest } from "./chat-request.js";
|
|
3
|
+
import type { RuntimeAgentMarkdownDefinition } from "../runtime/agent-definition.js";
|
|
3
4
|
/** Public API contract for hosted chat request principal. */
|
|
4
5
|
export type HostedChatRequestPrincipal = {
|
|
5
6
|
userId: string;
|
|
@@ -38,6 +39,7 @@ export type ParsedHostedChatRequest = {
|
|
|
38
39
|
runtimeOverrides: ChatRuntimeOverrides | undefined;
|
|
39
40
|
durableRootRun: DurableRootRunDescriptor | undefined;
|
|
40
41
|
persistLatestUserMessageBeforeDurableRun: boolean;
|
|
42
|
+
agentConfig?: RuntimeAgentMarkdownDefinition;
|
|
41
43
|
};
|
|
42
44
|
/** Options accepted by parse hosted chat request. */
|
|
43
45
|
export type ParseHostedChatRequestOptions = {
|
|
@@ -51,6 +53,7 @@ export type ParseHostedChatRequestOptions = {
|
|
|
51
53
|
export declare function buildParsedHostedChatRequest(input: {
|
|
52
54
|
chatRequest: HostedChatRequest;
|
|
53
55
|
agentId?: string;
|
|
56
|
+
agentConfig?: RuntimeAgentMarkdownDefinition;
|
|
54
57
|
authToken: string;
|
|
55
58
|
userId: string;
|
|
56
59
|
verifyProjectAccess?: ParseHostedChatRequestOptions["verifyProjectAccess"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-request-parser.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/hosted/chat-request-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,wBAAwB,EACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-request-parser.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/hosted/chat-request-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,12 @@ export async function buildParsedHostedChatRequest(input) {
|
|
|
31
31
|
const projectId = chatContext.projectId;
|
|
32
32
|
const projectSlug = chatContext.projectSlug;
|
|
33
33
|
const conversationId = chatContext.conversationId;
|
|
34
|
+
if (input.agentConfig && input.agentId && input.agentConfig.id !== input.agentId) {
|
|
35
|
+
return createValidationErrorResponse({
|
|
36
|
+
messagePrefix: "Invalid runtime agent invocation",
|
|
37
|
+
validationMessage: "agentConfig.id must match the requested agent id",
|
|
38
|
+
});
|
|
39
|
+
}
|
|
34
40
|
const accessError = await verifyHostedChatProjectAccess({
|
|
35
41
|
projectId,
|
|
36
42
|
authToken: input.authToken,
|
|
@@ -58,6 +64,7 @@ export async function buildParsedHostedChatRequest(input) {
|
|
|
58
64
|
runtimeOverrides,
|
|
59
65
|
durableRootRun,
|
|
60
66
|
persistLatestUserMessageBeforeDurableRun: false,
|
|
67
|
+
...(input.agentConfig ? { agentConfig: input.agentConfig } : {}),
|
|
61
68
|
};
|
|
62
69
|
}
|
|
63
70
|
/** Request payload for parse hosted chat request from. */
|
|
@@ -105,6 +112,7 @@ export async function parseRuntimeAgentRunInvocationHostedChatRequestFromRequest
|
|
|
105
112
|
userId: invocation.data.run.requestedByUserId,
|
|
106
113
|
chatRequest: chatRequest.data,
|
|
107
114
|
agentId: invocation.data.run.agentId,
|
|
115
|
+
agentConfig: invocation.data.agentConfig,
|
|
108
116
|
verifyProjectAccess: options.verifyProjectAccess,
|
|
109
117
|
});
|
|
110
118
|
}
|
|
@@ -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":"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
|
|
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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"}
|
|
@@ -518,7 +518,9 @@ async function prepareChatExecution(context, req) {
|
|
|
518
518
|
const { userId, authToken, projectId, conversationId, upstreamParentConversationId, upstreamParentRunId, spawnedFromToolCallId, } = req;
|
|
519
519
|
const config = context.infrastructure.getConfig();
|
|
520
520
|
setPrepareChatExecutionStartAttributes(context, { projectId, userId });
|
|
521
|
-
const
|
|
521
|
+
const requestedAgentId = req.agentId ?? getDefaultAgentId(context);
|
|
522
|
+
// veryfront-api is the trusted caller for request-scoped project-agent config.
|
|
523
|
+
const agentConfig = req.agentConfig ?? await resolveAgentConfig(context, requestedAgentId);
|
|
522
524
|
const abortController = new AbortController();
|
|
523
525
|
const { effectiveMessages, rootRunContext, runtime: { agent, runtimeKind, modelId, cleanup }, finalMessages, } = await prepareVeryfrontCloudHostedChatExecution({
|
|
524
526
|
request: req,
|
|
@@ -262,6 +262,24 @@ export declare const getRuntimeAgentRunInvocationSchema: () => import("../../int
|
|
|
262
262
|
type: import("../../internal-agents/schema.js").Schema<"release">;
|
|
263
263
|
releaseId: import("../../internal-agents/schema.js").Schema<string>;
|
|
264
264
|
}> | undefined>;
|
|
265
|
+
agentConfig: import("../../internal-agents/schema.js").Schema<import("../../extensions/schema/schema-validator.js").InferShape<{
|
|
266
|
+
id: import("../../internal-agents/schema.js").Schema<string>;
|
|
267
|
+
name: import("../../internal-agents/schema.js").Schema<string>;
|
|
268
|
+
description: import("../../internal-agents/schema.js").Schema<string>;
|
|
269
|
+
avatarUrl: import("../../internal-agents/schema.js").Schema<string | undefined>;
|
|
270
|
+
instructions: import("../../internal-agents/schema.js").Schema<string>;
|
|
271
|
+
thinking: import("../../internal-agents/schema.js").Schema<import("../../extensions/schema/schema-validator.js").InferShape<{
|
|
272
|
+
enabled: import("../../internal-agents/schema.js").Schema<boolean>;
|
|
273
|
+
budgetTokens: import("../../internal-agents/schema.js").Schema<number | undefined>;
|
|
274
|
+
}> | undefined>;
|
|
275
|
+
model: import("../../internal-agents/schema.js").Schema<string | undefined>;
|
|
276
|
+
temperature: import("../../internal-agents/schema.js").Schema<number | undefined>;
|
|
277
|
+
maxSteps: import("../../internal-agents/schema.js").Schema<number | undefined>;
|
|
278
|
+
providerTools: import("../../internal-agents/schema.js").Schema<string[] | undefined>;
|
|
279
|
+
skills: import("../../internal-agents/schema.js").Schema<true | string[] | undefined>;
|
|
280
|
+
tools: import("../../internal-agents/schema.js").Schema<true | string[] | undefined>;
|
|
281
|
+
delegates: import("../../internal-agents/schema.js").Schema<string[] | undefined>;
|
|
282
|
+
}> | undefined>;
|
|
265
283
|
credentials: import("../../internal-agents/schema.js").Schema<import("../../extensions/schema/schema-validator.js").InferShape<{
|
|
266
284
|
authToken: import("../../internal-agents/schema.js").Schema<string>;
|
|
267
285
|
}> | undefined>;
|
|
@@ -331,6 +349,24 @@ export declare const RuntimeAgentRunInvocationSchema: import("../../internal-age
|
|
|
331
349
|
type: import("../../internal-agents/schema.js").Schema<"release">;
|
|
332
350
|
releaseId: import("../../internal-agents/schema.js").Schema<string>;
|
|
333
351
|
}> | undefined>;
|
|
352
|
+
agentConfig: import("../../internal-agents/schema.js").Schema<import("../../extensions/schema/schema-validator.js").InferShape<{
|
|
353
|
+
id: import("../../internal-agents/schema.js").Schema<string>;
|
|
354
|
+
name: import("../../internal-agents/schema.js").Schema<string>;
|
|
355
|
+
description: import("../../internal-agents/schema.js").Schema<string>;
|
|
356
|
+
avatarUrl: import("../../internal-agents/schema.js").Schema<string | undefined>;
|
|
357
|
+
instructions: import("../../internal-agents/schema.js").Schema<string>;
|
|
358
|
+
thinking: import("../../internal-agents/schema.js").Schema<import("../../extensions/schema/schema-validator.js").InferShape<{
|
|
359
|
+
enabled: import("../../internal-agents/schema.js").Schema<boolean>;
|
|
360
|
+
budgetTokens: import("../../internal-agents/schema.js").Schema<number | undefined>;
|
|
361
|
+
}> | undefined>;
|
|
362
|
+
model: import("../../internal-agents/schema.js").Schema<string | undefined>;
|
|
363
|
+
temperature: import("../../internal-agents/schema.js").Schema<number | undefined>;
|
|
364
|
+
maxSteps: import("../../internal-agents/schema.js").Schema<number | undefined>;
|
|
365
|
+
providerTools: import("../../internal-agents/schema.js").Schema<string[] | undefined>;
|
|
366
|
+
skills: import("../../internal-agents/schema.js").Schema<true | string[] | undefined>;
|
|
367
|
+
tools: import("../../internal-agents/schema.js").Schema<true | string[] | undefined>;
|
|
368
|
+
delegates: import("../../internal-agents/schema.js").Schema<string[] | undefined>;
|
|
369
|
+
}> | undefined>;
|
|
334
370
|
credentials: import("../../internal-agents/schema.js").Schema<import("../../extensions/schema/schema-validator.js").InferShape<{
|
|
335
371
|
authToken: import("../../internal-agents/schema.js").Schema<string>;
|
|
336
372
|
}> | undefined>;
|
|
@@ -363,6 +399,7 @@ export type RuntimeAgentControlPlaneStreamRequest = {
|
|
|
363
399
|
context: RuntimeAgentRunInvocation["context"];
|
|
364
400
|
credentials?: RuntimeAgentRunInvocation["credentials"];
|
|
365
401
|
agentSource?: RuntimeAgentRunInvocation["agentSource"];
|
|
402
|
+
agentConfig?: RuntimeAgentRunInvocation["agentConfig"];
|
|
366
403
|
forwardedProps?: RuntimeAgentRunInvocation["forwardedProps"];
|
|
367
404
|
};
|
|
368
405
|
/** Builds runtime agent control plane stream request from invocation. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-invocation-contract.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/agent-invocation-contract.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-invocation-contract.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/agent-invocation-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { defineSchema, lazySchema } from "../../schemas/index.js";
|
|
2
2
|
import { ensureBuiltinSchemaValidator } from "../../extensions/builtin-extensions.js";
|
|
3
3
|
import { parseAgUiJsonRequestOrError } from "../ag-ui/request-shared.js";
|
|
4
|
+
import { getRuntimeAgentMarkdownDefinitionSchema } from "./agent-definition.js";
|
|
4
5
|
ensureBuiltinSchemaValidator();
|
|
5
6
|
const MAX_TOOL_PARAMETERS_BYTES = 16_384;
|
|
6
7
|
const MAX_CONTEXT_ITEM_BYTES = 16_384;
|
|
7
8
|
const MAX_CONTEXT_TOTAL_BYTES = 65_536;
|
|
9
|
+
const MAX_AGENT_CONFIG_BYTES = 65_536;
|
|
8
10
|
const MAX_FORWARDED_PROPS_BYTES = 196_608;
|
|
9
11
|
const MAX_CREDENTIAL_BYTES = 16_384;
|
|
10
12
|
const encoder = new TextEncoder();
|
|
@@ -218,8 +220,17 @@ export const getRuntimeAgentRunInvocationSchema = defineSchema((v) => v.object({
|
|
|
218
220
|
tools: v.array(getRuntimeAgentToolSchema()).max(50).default([]),
|
|
219
221
|
context: v.array(getRuntimeAgentContextItemSchema()).max(10).default([]).refine((value) => isWithinJsonSizeLimit(value, MAX_CONTEXT_TOTAL_BYTES), { message: "context must be less than 64 KB total" }),
|
|
220
222
|
agentSource: getRuntimeAgentSourceContextSchema().optional(),
|
|
223
|
+
agentConfig: getRuntimeAgentMarkdownDefinitionSchema().optional().refine((value) => value === undefined || isWithinJsonSizeLimit(value, MAX_AGENT_CONFIG_BYTES), { message: "agentConfig must be less than 64 KB" }),
|
|
221
224
|
credentials: getRuntimeAgentCredentialsSchema().optional(),
|
|
222
225
|
forwardedProps: v.record(v.string(), v.unknown()).optional().refine((value) => value === undefined || isWithinJsonSizeLimit(value, MAX_FORWARDED_PROPS_BYTES), { message: "forwardedProps must be less than 192 KB" }),
|
|
226
|
+
}).superRefine((input, ctx) => {
|
|
227
|
+
if (input.agentConfig && input.agentConfig.id !== input.run.agentId) {
|
|
228
|
+
ctx.addIssue({
|
|
229
|
+
code: "custom",
|
|
230
|
+
message: "agentConfig.id must match run.agentId",
|
|
231
|
+
path: ["agentConfig", "id"],
|
|
232
|
+
});
|
|
233
|
+
}
|
|
223
234
|
}));
|
|
224
235
|
/** Schema for runtime agent run invocation.
|
|
225
236
|
* @deprecated Use getRuntimeAgentRunInvocationSchema()
|
|
@@ -237,6 +248,7 @@ export function buildRuntimeAgentControlPlaneStreamRequestFromInvocation(input)
|
|
|
237
248
|
context: input.context,
|
|
238
249
|
...(input.credentials ? { credentials: input.credentials } : {}),
|
|
239
250
|
...(input.agentSource ? { agentSource: input.agentSource } : {}),
|
|
251
|
+
...(input.agentConfig ? { agentConfig: input.agentConfig } : {}),
|
|
240
252
|
...(input.forwardedProps ? { forwardedProps: input.forwardedProps } : {}),
|
|
241
253
|
};
|
|
242
254
|
}
|
|
@@ -251,6 +251,24 @@ export declare const getInternalAgentControlPlaneStreamRequestSchema: () => Sche
|
|
|
251
251
|
type: Schema<"release">;
|
|
252
252
|
releaseId: Schema<string>;
|
|
253
253
|
}> | undefined>;
|
|
254
|
+
agentConfig: Schema<import("../extensions/schema/schema-validator.js").InferShape<{
|
|
255
|
+
id: Schema<string>;
|
|
256
|
+
name: Schema<string>;
|
|
257
|
+
description: Schema<string>;
|
|
258
|
+
avatarUrl: Schema<string | undefined>;
|
|
259
|
+
instructions: Schema<string>;
|
|
260
|
+
thinking: Schema<import("../extensions/schema/schema-validator.js").InferShape<{
|
|
261
|
+
enabled: Schema<boolean>;
|
|
262
|
+
budgetTokens: Schema<number | undefined>;
|
|
263
|
+
}> | undefined>;
|
|
264
|
+
model: Schema<string | undefined>;
|
|
265
|
+
temperature: Schema<number | undefined>;
|
|
266
|
+
maxSteps: Schema<number | undefined>;
|
|
267
|
+
providerTools: Schema<string[] | undefined>;
|
|
268
|
+
skills: Schema<true | string[] | undefined>;
|
|
269
|
+
tools: Schema<true | string[] | undefined>;
|
|
270
|
+
delegates: Schema<string[] | undefined>;
|
|
271
|
+
}> | undefined>;
|
|
254
272
|
credentials: Schema<import("../extensions/schema/schema-validator.js").InferShape<{
|
|
255
273
|
authToken: Schema<string>;
|
|
256
274
|
}> | undefined>;
|
|
@@ -345,6 +363,24 @@ export declare const getInternalAgentStreamRequestSchema: () => Schema<import(".
|
|
|
345
363
|
type: Schema<"release">;
|
|
346
364
|
releaseId: Schema<string>;
|
|
347
365
|
}> | undefined>;
|
|
366
|
+
agentConfig: Schema<import("../extensions/schema/schema-validator.js").InferShape<{
|
|
367
|
+
id: Schema<string>;
|
|
368
|
+
name: Schema<string>;
|
|
369
|
+
description: Schema<string>;
|
|
370
|
+
avatarUrl: Schema<string | undefined>;
|
|
371
|
+
instructions: Schema<string>;
|
|
372
|
+
thinking: Schema<import("../extensions/schema/schema-validator.js").InferShape<{
|
|
373
|
+
enabled: Schema<boolean>;
|
|
374
|
+
budgetTokens: Schema<number | undefined>;
|
|
375
|
+
}> | undefined>;
|
|
376
|
+
model: Schema<string | undefined>;
|
|
377
|
+
temperature: Schema<number | undefined>;
|
|
378
|
+
maxSteps: Schema<number | undefined>;
|
|
379
|
+
providerTools: Schema<string[] | undefined>;
|
|
380
|
+
skills: Schema<true | string[] | undefined>;
|
|
381
|
+
tools: Schema<true | string[] | undefined>;
|
|
382
|
+
delegates: Schema<string[] | undefined>;
|
|
383
|
+
}> | undefined>;
|
|
348
384
|
credentials: Schema<import("../extensions/schema/schema-validator.js").InferShape<{
|
|
349
385
|
authToken: Schema<string>;
|
|
350
386
|
}> | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/src/internal-agents/schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EACL,KAAK,sBAAsB,EAE3B,KAAK,kBAAkB,EAQxB,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/src/internal-agents/schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EACL,KAAK,sBAAsB,EAE3B,KAAK,kBAAkB,EAQxB,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EAIL,kCAAkC,EAClC,KAAK,yBAAyB,EAC/B,MAAM,+CAA+C,CAAC;AAkBvD,eAAO,MAAM,cAAc,sBAA4B,CAAC;AAExD,eAAO,MAAM,gBAAgB,sBAE5B,CAAC;AAEF,eAAO,MAAM,4BAA4B;;;;;;GAAmC,CAAC;AAC7E,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;GAAkC,CAAC;AAC3E,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAA8B,CAAC;AACnE,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;GAA8B,CAAC;AACnE,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAA8B,CAAC;AAEzE,eAAO,MAAM,0CAA0C;;;;;;;;GAQtD,CAAC;AAEF,eAAO,MAAM,+CAA+C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkC3D,CAAC;AAEF,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAU9C,CAAC;AAqNH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,mCAAmC,CAAC,CAAC,GACzE,kBAAkB,CAWpB;AAED,eAAO,MAAM,qBAAqB;;;;;GAYjC,CAAC;AAEF,OAAO,EAAE,kCAAkC,EAAE,CAAC;AAC9C,YAAY,EAAE,yBAAyB,EAAE,CAAC;AAC1C,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,4BAA4B,CAAC,CAAC,CAAC;AAC/F,MAAM,MAAM,kBAAkB,GAAG,sBAAsB,CAAC;AACxD,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AACtD,MAAM,MAAM,0BAA0B,GAAG,WAAW,CAClD,UAAU,CAAC,OAAO,mCAAmC,CAAC,CACvD,CAAC;AACF,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC;AAGjF,YAAY,EAAE,MAAM,EAAE,CAAC"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { defineSchema } from "../schemas/index.js";
|
|
2
2
|
import { getAgUiRuntimeContextItemSchema, getAgUiRuntimeContextSchema, getAgUiRuntimeInjectedToolSchema, getAgUiRuntimeMessageSchema, getAgUiRuntimeRequestSchema, getAgUiRuntimeRunIdSchema, } from "../agent/runtime/ag-ui-contract.js";
|
|
3
3
|
import { stripLeadingEmptyObjectPlaceholder } from "../agent/streaming/data-stream.js";
|
|
4
|
+
import { getRuntimeAgentMarkdownDefinitionSchema } from "../agent/runtime/agent-definition.js";
|
|
4
5
|
import { buildRuntimeAgentControlPlaneStreamRequestFromInvocation, getRuntimeAgentCredentialsSchema, getRuntimeAgentRunInvocationSchema, getRuntimeAgentSourceContextSchema, } from "../agent/runtime/agent-invocation-contract.js";
|
|
5
6
|
const AGENT_ID_PATTERN = /^[a-zA-Z0-9_-]+$/;
|
|
7
|
+
const MAX_AGENT_CONFIG_BYTES = 65_536;
|
|
6
8
|
const MAX_FORWARDED_PROPS_BYTES = 196_608;
|
|
7
9
|
const MAX_TOOL_RESULT_BYTES = 65_536;
|
|
8
10
|
const MAX_RUNTIME_MESSAGES = 100;
|
|
@@ -39,9 +41,18 @@ export const getInternalAgentControlPlaneStreamRequestSchema = defineSchema((v)
|
|
|
39
41
|
tools: v.array(getRuntimeInjectedToolSchema()).max(50).default([]),
|
|
40
42
|
context: v.array(getRuntimeContextSchema()).max(10).default([]).refine((value) => isWithinJsonSizeLimit(value, 65_536), { message: "context must be less than 64 KB total" }),
|
|
41
43
|
agentSource: getRuntimeAgentSourceContextSchema().optional(),
|
|
44
|
+
agentConfig: getRuntimeAgentMarkdownDefinitionSchema().optional().refine((value) => value === undefined || isWithinJsonSizeLimit(value, MAX_AGENT_CONFIG_BYTES), { message: "agentConfig must be less than 64 KB" }),
|
|
42
45
|
credentials: getRuntimeAgentCredentialsSchema().optional(),
|
|
43
46
|
forwardedProps: v.record(v.string(), v.unknown()).optional().refine((value) => value === undefined || isWithinJsonSizeLimit(value, MAX_FORWARDED_PROPS_BYTES), { message: "forwardedProps must be less than 192 KB" }),
|
|
44
|
-
}).strict())
|
|
47
|
+
}).strict().superRefine((input, ctx) => {
|
|
48
|
+
if (input.agentConfig && input.agentConfig.id !== input.agentId) {
|
|
49
|
+
ctx.addIssue({
|
|
50
|
+
code: "custom",
|
|
51
|
+
message: "agentConfig.id must match agentId",
|
|
52
|
+
path: ["agentConfig", "id"],
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}));
|
|
45
56
|
export const getInternalAgentStreamRequestSchema = defineSchema((v) => {
|
|
46
57
|
const controlPlaneStreamRequestSchema = getInternalAgentControlPlaneStreamRequestSchema();
|
|
47
58
|
return v.union([
|
|
@@ -1,15 +1,47 @@
|
|
|
1
1
|
/****
|
|
2
2
|
* OpenTelemetry OTLP tracing for proxy.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* The standalone proxy (split mode) does not run the server bootstrap, so it
|
|
5
|
+
* wires the OTLP SDK itself: it loads ext-observability-opentelemetry, starts
|
|
6
|
+
* its `OtlpTracingExporter`, and registers the SDK provider with the core
|
|
7
|
+
* api-shim BEFORE caching a tracer. Without this wiring the shim only ever
|
|
8
|
+
* hands out no-op tracers and nothing is exported (issue #2723).
|
|
6
9
|
*
|
|
7
10
|
* Env: OTEL_TRACES_ENABLED, OTEL_SERVICE_NAME, OTEL_EXPORTER_OTLP_ENDPOINT,
|
|
8
|
-
* OTEL_EXPORTER_OTLP_HEADERS
|
|
11
|
+
* OTEL_EXPORTER_OTLP_TRACES_ENDPOINT, OTEL_EXPORTER_OTLP_HEADERS
|
|
12
|
+
* (endpoint/headers are consumed by the extension itself.)
|
|
9
13
|
*/
|
|
10
14
|
import { type Context, type Span } from "../observability/tracing/api-shim.js";
|
|
11
|
-
|
|
15
|
+
import type { TracingExporter } from "../extensions/observability/tracing-exporter.js";
|
|
16
|
+
export type OtlpGateResult = {
|
|
17
|
+
ok: true;
|
|
18
|
+
} | {
|
|
19
|
+
ok: false;
|
|
20
|
+
reason: string;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Decide whether OTLP tracing should be initialized for this process.
|
|
24
|
+
* Pure so the decision (and its logged reason) is unit-testable.
|
|
25
|
+
*/
|
|
26
|
+
export declare function resolveOtlpGate(config: {
|
|
27
|
+
enabled: boolean;
|
|
28
|
+
endpoint: string;
|
|
29
|
+
}): OtlpGateResult;
|
|
30
|
+
/**
|
|
31
|
+
* Initialize OTLP tracing for the standalone proxy.
|
|
32
|
+
*
|
|
33
|
+
* Loads ext-observability-opentelemetry, starts its exporter, wires the SDK
|
|
34
|
+
* provider (plus metrics API and active-span accessor) into the core shim,
|
|
35
|
+
* and only then caches a tracer. Logs `[otel] Initialized` only when a real
|
|
36
|
+
* provider is wired; otherwise logs why tracing is disabled. Never throws.
|
|
37
|
+
*
|
|
38
|
+
* @param loadExporter Test seam; production callers use the default loader.
|
|
39
|
+
*/
|
|
40
|
+
export declare function initializeOTLPWithApis(loadExporter?: () => Promise<TracingExporter | null>): Promise<void>;
|
|
41
|
+
/** Flush pending spans and release the exporter. Safe to call when disabled. */
|
|
12
42
|
export declare function shutdownOTLP(): Promise<void>;
|
|
43
|
+
/** Reset module state between tests. Mirrors api-shim's `_resetShimForTests`. */
|
|
44
|
+
export declare function _resetOTLPForTests(): void;
|
|
13
45
|
export declare function extractContext(headers: Headers): Context | undefined;
|
|
14
46
|
export declare function injectContext(headers: Headers): void;
|
|
15
47
|
export declare function startServerSpan(method: string, path: string, parentContext?: Context): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing.d.ts","sourceRoot":"","sources":["../../../src/src/proxy/tracing.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tracing.d.ts","sourceRoot":"","sources":["../../../src/src/proxy/tracing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,KAAK,OAAO,EAQZ,KAAK,IAAI,EAKV,MAAM,sCAAsC,CAAC;AAE9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iDAAiD,CAAC;AA+BvF,MAAM,MAAM,cAAc,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1E;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC7C,cAAc,CAYhB;AA2CD;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAC1C,YAAY,GAAE,MAAM,OAAO,CAAC,eAAe,GAAG,IAAI,CAAuB,GACxE,OAAO,CAAC,IAAI,CAAC,CA6Cf;AAED,gFAAgF;AAChF,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAelD;AAED,iFAAiF;AACjF,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAQpE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAOpD;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,aAAa,CAAC,EAAE,OAAO,GACtB;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAMzC;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAiBvF;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAErF;AAOD,wBAAgB,eAAe,IAAI;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAIvE;AAED;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;CAKjB,CAAC;AAEX;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GACrD,OAAO,CAAC,CAAC,CAAC,CA0BZ"}
|
package/esm/src/proxy/tracing.js
CHANGED
|
@@ -1,56 +1,119 @@
|
|
|
1
1
|
/****
|
|
2
2
|
* OpenTelemetry OTLP tracing for proxy.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* The standalone proxy (split mode) does not run the server bootstrap, so it
|
|
5
|
+
* wires the OTLP SDK itself: it loads ext-observability-opentelemetry, starts
|
|
6
|
+
* its `OtlpTracingExporter`, and registers the SDK provider with the core
|
|
7
|
+
* api-shim BEFORE caching a tracer. Without this wiring the shim only ever
|
|
8
|
+
* hands out no-op tracers and nothing is exported (issue #2723).
|
|
6
9
|
*
|
|
7
10
|
* Env: OTEL_TRACES_ENABLED, OTEL_SERVICE_NAME, OTEL_EXPORTER_OTLP_ENDPOINT,
|
|
8
|
-
* OTEL_EXPORTER_OTLP_HEADERS
|
|
11
|
+
* OTEL_EXPORTER_OTLP_TRACES_ENDPOINT, OTEL_EXPORTER_OTLP_HEADERS
|
|
12
|
+
* (endpoint/headers are consumed by the extension itself.)
|
|
9
13
|
*/
|
|
10
|
-
import { context as shimContext, defaultTextMapGetter, defaultTextMapSetter, propagation as shimPropagation, SpanKind, SpanStatusCode, trace as shimTrace, } from "../observability/tracing/api-shim.js";
|
|
14
|
+
import { context as shimContext, defaultTextMapGetter, defaultTextMapSetter, propagation as shimPropagation, setGlobalActiveSpanAccessor, setGlobalMetricsAPI, setGlobalTracerProvider, SpanKind, SpanStatusCode, trace as shimTrace, } from "../observability/tracing/api-shim.js";
|
|
11
15
|
import { getHostTelemetryEnv } from "../observability/tracing/telemetry-env.js";
|
|
16
|
+
import { importFirstPartyExtensionModule, isMissingFirstPartyExtensionModule, } from "../extensions/first-party-import.js";
|
|
12
17
|
import { proxyLogger } from "./logger.js";
|
|
18
|
+
const TRACING_EXTENSION_SOURCE_DIRECTORY = "ext-observability-opentelemetry";
|
|
19
|
+
const TRACING_EXTENSION_PACKAGE = "@veryfront/ext-observability-opentelemetry";
|
|
13
20
|
let initialized = false;
|
|
14
21
|
let tracer = null;
|
|
15
|
-
|
|
16
|
-
if (!headerString)
|
|
17
|
-
return {};
|
|
18
|
-
const headers = {};
|
|
19
|
-
for (const part of headerString.split(",")) {
|
|
20
|
-
const [key, ...valueParts] = part.split("=");
|
|
21
|
-
if (!key || valueParts.length === 0)
|
|
22
|
-
continue;
|
|
23
|
-
headers[key.trim()] = valueParts.join("=").trim();
|
|
24
|
-
}
|
|
25
|
-
return headers;
|
|
26
|
-
}
|
|
22
|
+
let exporter = null;
|
|
27
23
|
function getConfig() {
|
|
28
24
|
return {
|
|
29
25
|
enabled: getHostTelemetryEnv("OTEL_TRACES_ENABLED") === "true",
|
|
30
26
|
serviceName: getHostTelemetryEnv("OTEL_SERVICE_NAME") || "veryfront-proxy",
|
|
31
|
-
endpoint
|
|
32
|
-
|
|
27
|
+
// The extension prefers the traces-specific endpoint; mirror that here so
|
|
28
|
+
// the gate agrees with what the exporter will actually use.
|
|
29
|
+
endpoint: getHostTelemetryEnv("OTEL_EXPORTER_OTLP_TRACES_ENDPOINT") ||
|
|
30
|
+
getHostTelemetryEnv("OTEL_EXPORTER_OTLP_ENDPOINT") || "",
|
|
33
31
|
};
|
|
34
32
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
/**
|
|
34
|
+
* Decide whether OTLP tracing should be initialized for this process.
|
|
35
|
+
* Pure so the decision (and its logged reason) is unit-testable.
|
|
36
|
+
*/
|
|
37
|
+
export function resolveOtlpGate(config) {
|
|
39
38
|
if (!config.enabled) {
|
|
40
|
-
|
|
41
|
-
return;
|
|
39
|
+
return { ok: false, reason: 'Tracing disabled: OTEL_TRACES_ENABLED is not "true"' };
|
|
42
40
|
}
|
|
43
41
|
if (!config.endpoint) {
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
return {
|
|
43
|
+
ok: false,
|
|
44
|
+
reason: "Tracing disabled: no OTLP endpoint (set OTEL_EXPORTER_OTLP_ENDPOINT or OTEL_EXPORTER_OTLP_TRACES_ENDPOINT)",
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
return { ok: true };
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Load the OTLP tracing exporter from ext-observability-opentelemetry.
|
|
51
|
+
*
|
|
52
|
+
* Resolves the workspace source in repo/binary runs and the npm package in
|
|
53
|
+
* Node installs. Returns `null` (after logging why) when the extension is not
|
|
54
|
+
* installed or fails to load — telemetry must never crash the proxy.
|
|
55
|
+
*/
|
|
56
|
+
async function loadTracingExporter() {
|
|
57
|
+
try {
|
|
58
|
+
const mod = await importFirstPartyExtensionModule(TRACING_EXTENSION_SOURCE_DIRECTORY, TRACING_EXTENSION_PACKAGE);
|
|
59
|
+
if (typeof mod.OtlpTracingExporter !== "function") {
|
|
60
|
+
proxyLogger.warn(`[otel] Tracing disabled: ${TRACING_EXTENSION_PACKAGE} has no OtlpTracingExporter export`);
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
return new mod.OtlpTracingExporter();
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
if (isMissingFirstPartyExtensionModule(error, [
|
|
67
|
+
`extensions/${TRACING_EXTENSION_SOURCE_DIRECTORY}/src/index`,
|
|
68
|
+
TRACING_EXTENSION_PACKAGE,
|
|
69
|
+
])) {
|
|
70
|
+
proxyLogger.warn(`[otel] Tracing disabled: ${TRACING_EXTENSION_PACKAGE} is not installed; install it alongside veryfront to export traces`);
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
proxyLogger.error("[otel] Failed to load tracing extension", error);
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Initialize OTLP tracing for the standalone proxy.
|
|
79
|
+
*
|
|
80
|
+
* Loads ext-observability-opentelemetry, starts its exporter, wires the SDK
|
|
81
|
+
* provider (plus metrics API and active-span accessor) into the core shim,
|
|
82
|
+
* and only then caches a tracer. Logs `[otel] Initialized` only when a real
|
|
83
|
+
* provider is wired; otherwise logs why tracing is disabled. Never throws.
|
|
84
|
+
*
|
|
85
|
+
* @param loadExporter Test seam; production callers use the default loader.
|
|
86
|
+
*/
|
|
87
|
+
export async function initializeOTLPWithApis(loadExporter = loadTracingExporter) {
|
|
88
|
+
if (initialized)
|
|
89
|
+
return;
|
|
90
|
+
initialized = true;
|
|
91
|
+
const config = getConfig();
|
|
92
|
+
const gate = resolveOtlpGate(config);
|
|
93
|
+
if (!gate.ok) {
|
|
94
|
+
proxyLogger.info(`[otel] ${gate.reason}`);
|
|
46
95
|
return;
|
|
47
96
|
}
|
|
48
97
|
try {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
98
|
+
const exporterImpl = await loadExporter();
|
|
99
|
+
if (!exporterImpl)
|
|
100
|
+
return; // loader already logged the reason
|
|
101
|
+
// The exporter reads OTEL_* env itself (endpoint, headers, signal gates)
|
|
102
|
+
// and creates the SDK tracer provider with a batch OTLP span processor.
|
|
103
|
+
await exporterImpl.start({});
|
|
104
|
+
exporter = exporterImpl;
|
|
105
|
+
// Wire the shim globals before getTracer() — the tracer is cached below,
|
|
106
|
+
// so wiring afterwards would freeze the no-op tracer forever.
|
|
107
|
+
setGlobalTracerProvider(exporterImpl.getProvider());
|
|
108
|
+
const metricsApi = exporterImpl.getMetricsAPI();
|
|
109
|
+
if (metricsApi) {
|
|
110
|
+
setGlobalMetricsAPI(metricsApi);
|
|
111
|
+
}
|
|
112
|
+
const traceApi = exporterImpl.getTraceAPI?.();
|
|
113
|
+
if (traceApi) {
|
|
114
|
+
setGlobalActiveSpanAccessor(traceApi);
|
|
115
|
+
}
|
|
52
116
|
tracer = shimTrace.getTracer(config.serviceName);
|
|
53
|
-
initialized = true;
|
|
54
117
|
proxyLogger.info("[otel] Initialized", {
|
|
55
118
|
serviceName: config.serviceName,
|
|
56
119
|
endpoint: config.endpoint,
|
|
@@ -58,12 +121,31 @@ export async function initializeOTLPWithApis() {
|
|
|
58
121
|
}
|
|
59
122
|
catch (error) {
|
|
60
123
|
proxyLogger.error("[otel] Init failed", error);
|
|
61
|
-
initialized = true;
|
|
62
124
|
}
|
|
63
125
|
}
|
|
126
|
+
/** Flush pending spans and release the exporter. Safe to call when disabled. */
|
|
64
127
|
export async function shutdownOTLP() {
|
|
128
|
+
const active = exporter;
|
|
129
|
+
exporter = null;
|
|
130
|
+
tracer = null;
|
|
131
|
+
if (active) {
|
|
132
|
+
try {
|
|
133
|
+
await active.shutdown();
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
proxyLogger.warn("[otel] Exporter shutdown failed", {
|
|
137
|
+
error: error instanceof Error ? error.message : String(error),
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
65
141
|
proxyLogger.info("[otel] Shutdown complete");
|
|
66
142
|
}
|
|
143
|
+
/** Reset module state between tests. Mirrors api-shim's `_resetShimForTests`. */
|
|
144
|
+
export function _resetOTLPForTests() {
|
|
145
|
+
initialized = false;
|
|
146
|
+
tracer = null;
|
|
147
|
+
exporter = null;
|
|
148
|
+
}
|
|
67
149
|
export function extractContext(headers) {
|
|
68
150
|
const carrier = {};
|
|
69
151
|
headers.forEach((v, k) => {
|
|
@@ -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;AAQhD,OAAO,EACL,4BAA4B,EAE7B,MAAM,2CAA2C,CAAC;AAyBnD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AAanG,MAAM,WAAW,sBACf,SAAQ,yBAAyB,EAAE,+BAA+B;IAClE,4BAA4B,CAAC,EAAE,OAAO,4BAA4B,CAAC;CACpE;AAkfD,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;CA0LxE"}
|
|
@@ -1,6 +1,7 @@
|
|
|
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 { createRuntimeAgentFromMarkdownDefinition } from "../../../agent/runtime/agent-markdown-adapter.js";
|
|
4
5
|
import { buildStudioMcpHeaders } from "../../../agent/project/live-studio-mcp-tools.js";
|
|
5
6
|
import { clientAllowsStudioMcp, resolveRuntimeClientProfile, } from "../../../agent/runtime/client-profile.js";
|
|
6
7
|
import { resolveRuntimeOwnerInvokeUrl, RUNTIME_OWNER_INVOKE_URL_HEADER, } from "../../../internal-agents/runtime-owner.js";
|
|
@@ -429,6 +430,7 @@ export class AgentStreamHandler extends BaseHandler {
|
|
|
429
430
|
messageCount: payload.messages.length,
|
|
430
431
|
toolCount: payload.tools.length,
|
|
431
432
|
hasAgentSource: Boolean(payload.agentSource),
|
|
433
|
+
hasAgentConfig: Boolean(payload.agentConfig),
|
|
432
434
|
});
|
|
433
435
|
return await this.withAgentSourceContext(ctx, payload.agentSource, async () => {
|
|
434
436
|
await this.deps.ensureProjectDiscovery(ctx);
|
|
@@ -442,11 +444,16 @@ export class AgentStreamHandler extends BaseHandler {
|
|
|
442
444
|
});
|
|
443
445
|
return this.respond(builder.json({ error: "Agent not found" }, 404));
|
|
444
446
|
}
|
|
447
|
+
// veryfront-api is the trusted control-plane caller; it resolves
|
|
448
|
+
// authorization before attaching request-scoped project-agent config.
|
|
449
|
+
const runtimeBaseAgent = payload.agentConfig
|
|
450
|
+
? createRuntimeAgentFromMarkdownDefinition(payload.agentConfig)
|
|
451
|
+
: agent;
|
|
445
452
|
const runtimeInput = sanitizeRuntimeRunAgentInput(toRuntimeRunAgentInput(payload));
|
|
446
453
|
const apiAuthToken = payload.credentials?.authToken || ctx.proxyToken ||
|
|
447
454
|
getHostEnv("VERYFRONT_API_TOKEN") || "";
|
|
448
455
|
const platformRuntimeAgent = await withVeryfrontPlatformRemoteTools({
|
|
449
|
-
agent:
|
|
456
|
+
agent: runtimeBaseAgent,
|
|
450
457
|
token: apiAuthToken || null,
|
|
451
458
|
projectId: ctx.projectId ?? null,
|
|
452
459
|
availableToolNames: runtimeInput.tools.map((tool) => tool.name),
|
package/package.json
CHANGED