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.
Files changed (28) hide show
  1. package/esm/deno.js +1 -1
  2. package/esm/extensions/ext-llm-openai/src/openai-chat-request-builder.d.ts +2 -7
  3. package/esm/extensions/ext-llm-openai/src/openai-chat-request-builder.d.ts.map +1 -1
  4. package/esm/extensions/ext-llm-openai/src/openai-chat-request-builder.js +10 -25
  5. package/esm/extensions/ext-llm-openai/src/openai-reasoning-models.d.ts +17 -0
  6. package/esm/extensions/ext-llm-openai/src/openai-reasoning-models.d.ts.map +1 -0
  7. package/esm/extensions/ext-llm-openai/src/openai-reasoning-models.js +70 -0
  8. package/esm/extensions/ext-llm-openai/src/openai-responses-request-builder.d.ts.map +1 -1
  9. package/esm/extensions/ext-llm-openai/src/openai-responses-request-builder.js +20 -27
  10. package/esm/src/agent/hosted/chat-request-parser.d.ts +3 -0
  11. package/esm/src/agent/hosted/chat-request-parser.d.ts.map +1 -1
  12. package/esm/src/agent/hosted/chat-request-parser.js +8 -0
  13. package/esm/src/agent/hosted/veryfront-cloud-agent-service.d.ts.map +1 -1
  14. package/esm/src/agent/hosted/veryfront-cloud-agent-service.js +3 -1
  15. package/esm/src/agent/runtime/agent-invocation-contract.d.ts +37 -0
  16. package/esm/src/agent/runtime/agent-invocation-contract.d.ts.map +1 -1
  17. package/esm/src/agent/runtime/agent-invocation-contract.js +12 -0
  18. package/esm/src/internal-agents/schema.d.ts +36 -0
  19. package/esm/src/internal-agents/schema.d.ts.map +1 -1
  20. package/esm/src/internal-agents/schema.js +12 -1
  21. package/esm/src/proxy/tracing.d.ts +36 -4
  22. package/esm/src/proxy/tracing.d.ts.map +1 -1
  23. package/esm/src/proxy/tracing.js +113 -31
  24. package/esm/src/server/handlers/request/agent-stream.handler.d.ts.map +1 -1
  25. package/esm/src/server/handlers/request/agent-stream.handler.js +8 -1
  26. package/esm/src/utils/version-constant.d.ts +1 -1
  27. package/esm/src/utils/version-constant.js +1 -1
  28. package/package.json +2 -2
package/esm/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.986",
3
+ "version": "0.1.988",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "minimumDependencyAge": {
@@ -1,10 +1,5 @@
1
1
  import type { OpenAICompatibleChatRequest, RuntimePromptMessage } from "../../../src/provider/shared/index.js";
2
- type ProviderReasoningEffort = "low" | "medium" | "high" | "max";
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?: ProviderReasoningOption;
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":"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"}
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
- function isOpenAIReasoningModel(modelId) {
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 isReasoningModel = isOpenAIReasoningModel(modelId);
28
- const reasoningEffort = resolveOpenAIReasoningEffort(options.reasoning);
29
- const reasoningEnabled = isReasoningModel || reasoningEffort !== undefined;
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 (o1 / o3 / o4) and models with fixed sampling params
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
- : `Dropped because OpenAI reasoning models reject ${openaiName}. Reasoning was active for this request.`,
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
- ...(reasoningEffort !== undefined ? { reasoning_effort: reasoningEffort } : {}),
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;AAI1C,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;AAmKF,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,CAiFxB"}
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
- function isOpenAIReasoningModel(modelId) {
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 isReasoningModel = isOpenAIReasoningModel(modelId);
146
- const reasoningEffort = resolveOpenAIReasoningEffort(options.reasoning);
147
- const reasoningEnabled = isReasoningModel || reasoningEffort !== undefined;
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 (reasoningEnabled) {
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: `Dropped because OpenAI reasoning models reject ${openaiName}. Reasoning was active for this request.`,
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
- ...(!reasoningEnabled && options.temperature !== undefined
170
+ ...(!dropSamplingParams && options.temperature !== undefined
185
171
  ? { temperature: options.temperature }
186
172
  : {}),
187
- ...(!reasoningEnabled && options.topP !== undefined ? { top_p: options.topP } : {}),
173
+ ...(!dropSamplingParams && options.topP !== undefined ? { top_p: options.topP } : {}),
188
174
  ...(responsesTools ? { tools: responsesTools } : {}),
189
175
  ...(options.toolChoice !== undefined ? { tool_choice: options.toolChoice } : {}),
190
- ...(reasoningEffort !== undefined
191
- ? { reasoning: { effort: reasoningEffort, summary: "auto" } }
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;AAG3B,6DAA6D;AAC7D,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,kDAAkD;AAClD,MAAM,MAAM,4BAA4B,GAAG;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,uDAAuD;AACvD,MAAM,MAAM,6BAA6B,GACrC;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,GACjB;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,4BAA4B,CAAA;CAAE,CAAC;AAE5D,8CAA8C;AAC9C,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,gBAAgB,EAAE,kBAAkB,CAAC;IACrC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,4BAA4B,EAAE,MAAM,GAAG,SAAS,CAAC;IACjD,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,qBAAqB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,eAAe,EAAE,OAAO,GAAG,SAAS,CAAC;IACrC,cAAc,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IACpD,gBAAgB,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACnD,cAAc,EAAE,wBAAwB,GAAG,SAAS,CAAC;IACrD,wCAAwC,EAAE,OAAO,CAAC;CACnD,CAAC;AAEF,qDAAqD;AACrD,MAAM,MAAM,6BAA6B,GAAG;IAC1C,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,0BAA0B,GAAG,QAAQ,CAAC,CAAC;IACnF,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE;QAC5B,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,KAAK,OAAO,CAAC,6BAA6B,CAAC,CAAC;CAC9C,CAAC;AA8CF,oDAAoD;AACpD,wBAAsB,4BAA4B,CAAC,KAAK,EAAE;IACxD,WAAW,EAAE,iBAAiB,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,6BAA6B,CAAC,qBAAqB,CAAC,CAAC;CAC5E,GAAG,OAAO,CAAC,uBAAuB,GAAG,QAAQ,CAAC,CA2C9C;AAED,0DAA0D;AAC1D,wBAAsB,iCAAiC,CACrD,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,uBAAuB,GAAG,QAAQ,CAAC,CAoB7C;AAED,uFAAuF;AACvF,wBAAsB,0DAA0D,CAC9E,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,uBAAuB,GAAG,QAAQ,CAAC,CA+B7C"}
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 agentConfig = await resolveAgentConfig(context, req.agentId ?? getDefaultAgentId(context));
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":"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"}
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;AAE5C,OAAO,EAIL,kCAAkC,EAClC,KAAK,yBAAyB,EAC/B,MAAM,+CAA+C,CAAC;AAiBvD,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsB3D,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
+ {"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
- * Uses the core api-shim for in-process tracing; when ext-observability-opentelemetry
5
- * is loaded, the shim delegates to the real SDK provider.
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
- export declare function initializeOTLPWithApis(): Promise<void>;
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;;;;;;;;GAQG;AAEH,OAAO,EACL,KAAK,OAAO,EAKZ,KAAK,IAAI,EAKV,MAAM,sCAAsC,CAAC;AAmC9C,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CA+B5D;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAElD;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"}
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"}
@@ -1,56 +1,119 @@
1
1
  /****
2
2
  * OpenTelemetry OTLP tracing for proxy.
3
3
  *
4
- * Uses the core api-shim for in-process tracing; when ext-observability-opentelemetry
5
- * is loaded, the shim delegates to the real SDK provider.
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
- function parseHeaders(headerString) {
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: getHostTelemetryEnv("OTEL_EXPORTER_OTLP_ENDPOINT") || "",
32
- headers: parseHeaders(getHostTelemetryEnv("OTEL_EXPORTER_OTLP_HEADERS")),
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
- export async function initializeOTLPWithApis() {
36
- if (initialized)
37
- return;
38
- const config = getConfig();
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
- initialized = true;
41
- return;
39
+ return { ok: false, reason: 'Tracing disabled: OTEL_TRACES_ENABLED is not "true"' };
42
40
  }
43
41
  if (!config.endpoint) {
44
- proxyLogger.warn("[otel] No endpoint configured");
45
- initialized = true;
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
- // The shim's provider is wired by ext-observability-opentelemetry via bootstrap.ts.
50
- // We simply get a tracer from the shim — it delegates to the real SDK
51
- // when the extension is active, otherwise returns the no-op tracer.
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;AAOhD,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;CAoLxE"}
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: agent,
456
+ agent: runtimeBaseAgent,
450
457
  token: apiAuthToken || null,
451
458
  projectId: ctx.projectId ?? null,
452
459
  availableToolNames: runtimeInput.tools.map((tool) => tool.name),
@@ -1,3 +1,3 @@
1
1
  /** Shared version value. */
2
- export declare const VERSION = "0.1.986";
2
+ export declare const VERSION = "0.1.988";
3
3
  //# sourceMappingURL=version-constant.d.ts.map
@@ -1,4 +1,4 @@
1
1
  // Keep in sync with deno.json version.
2
2
  // scripts/release.ts updates this constant during releases.
3
3
  /** Shared version value. */
4
- export const VERSION = "0.1.986";
4
+ export const VERSION = "0.1.988";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veryfront",
3
- "version": "0.1.986",
3
+ "version": "0.1.988",
4
4
  "description": "The simplest way to build AI-powered apps",
5
5
  "keywords": [
6
6
  "react",
@@ -349,4 +349,4 @@
349
349
  "NOTICE",
350
350
  "README.md"
351
351
  ]
352
- }
352
+ }