@jsonstudio/llms 0.6.1172 → 0.6.1354

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 (160) hide show
  1. package/dist/conversion/codecs/gemini-openai-codec.d.ts +3 -1
  2. package/dist/conversion/codecs/gemini-openai-codec.js +10 -4
  3. package/dist/conversion/compat/actions/gemini-web-search.d.ts +1 -1
  4. package/dist/conversion/compat/actions/gemini-web-search.js +5 -2
  5. package/dist/conversion/compat/actions/iflow-tool-text-fallback.d.ts +12 -0
  6. package/dist/conversion/compat/actions/iflow-tool-text-fallback.js +199 -0
  7. package/dist/conversion/compat/actions/iflow-web-search.d.ts +1 -1
  8. package/dist/conversion/compat/actions/iflow-web-search.js +5 -2
  9. package/dist/conversion/hub/operation-table/semantic-mappers/anthropic-mapper.js +47 -56
  10. package/dist/conversion/hub/operation-table/semantic-mappers/chat-mapper.js +1 -13
  11. package/dist/conversion/hub/operation-table/semantic-mappers/gemini-mapper.js +523 -50
  12. package/dist/conversion/hub/operation-table/semantic-mappers/responses-mapper.js +18 -38
  13. package/dist/conversion/hub/pipeline/compat/compat-pipeline-executor.js +6 -0
  14. package/dist/conversion/hub/pipeline/compat/compat-types.d.ts +3 -0
  15. package/dist/conversion/hub/pipeline/hub-pipeline/adapter-context.d.ts +10 -0
  16. package/dist/conversion/hub/pipeline/hub-pipeline/adapter-context.js +134 -0
  17. package/dist/conversion/hub/pipeline/hub-pipeline/anthropic-alias-map.d.ts +6 -0
  18. package/dist/conversion/hub/pipeline/hub-pipeline/anthropic-alias-map.js +79 -0
  19. package/dist/conversion/hub/pipeline/hub-pipeline/apply-patch-tool-mode.d.ts +3 -0
  20. package/dist/conversion/hub/pipeline/hub-pipeline/apply-patch-tool-mode.js +46 -0
  21. package/dist/conversion/hub/pipeline/hub-pipeline/execute-chat-process-entry.d.ts +8 -0
  22. package/dist/conversion/hub/pipeline/hub-pipeline/execute-chat-process-entry.js +366 -0
  23. package/dist/conversion/hub/pipeline/hub-pipeline/execute-request-stage.d.ts +9 -0
  24. package/dist/conversion/hub/pipeline/hub-pipeline/execute-request-stage.js +384 -0
  25. package/dist/conversion/hub/pipeline/hub-pipeline/node-results.d.ts +3 -0
  26. package/dist/conversion/hub/pipeline/hub-pipeline/node-results.js +14 -0
  27. package/dist/conversion/hub/pipeline/hub-pipeline/payload-normalize.d.ts +2 -0
  28. package/dist/conversion/hub/pipeline/hub-pipeline/payload-normalize.js +144 -0
  29. package/dist/conversion/hub/pipeline/hub-pipeline/policy.d.ts +4 -0
  30. package/dist/conversion/hub/pipeline/hub-pipeline/policy.js +32 -0
  31. package/dist/conversion/hub/pipeline/hub-pipeline/protocol.d.ts +8 -0
  32. package/dist/conversion/hub/pipeline/hub-pipeline/protocol.js +63 -0
  33. package/dist/conversion/hub/pipeline/hub-pipeline/resolve-protocol-hooks.d.ts +2 -0
  34. package/dist/conversion/hub/pipeline/hub-pipeline/resolve-protocol-hooks.js +43 -0
  35. package/dist/conversion/hub/pipeline/hub-pipeline/semantic-gate.d.ts +1 -0
  36. package/dist/conversion/hub/pipeline/hub-pipeline/semantic-gate.js +29 -0
  37. package/dist/conversion/hub/pipeline/hub-pipeline/servertool-runtime-config.d.ts +2 -0
  38. package/dist/conversion/hub/pipeline/hub-pipeline/servertool-runtime-config.js +16 -0
  39. package/dist/conversion/hub/pipeline/hub-pipeline/types.d.ts +116 -0
  40. package/dist/conversion/hub/pipeline/hub-pipeline/types.js +1 -0
  41. package/dist/conversion/hub/pipeline/hub-pipeline.d.ts +3 -95
  42. package/dist/conversion/hub/pipeline/hub-pipeline.js +19 -1281
  43. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage1_format_parse/index.js +1 -1
  44. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/index.d.ts +7 -0
  45. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage2_semantic_map/index.js +65 -1
  46. package/dist/conversion/hub/pipeline/stages/req_inbound/req_inbound_stage3_context_capture/index.js +25 -22
  47. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage1_semantic_map/index.js +1 -1
  48. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage2_format_build/index.d.ts +1 -1
  49. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage2_format_build/index.js +2 -2
  50. package/dist/conversion/hub/pipeline/stages/req_outbound/req_outbound_stage3_compat/index.js +2 -2
  51. package/dist/conversion/hub/pipeline/stages/req_process/req_process_stage1_tool_governance/index.js +1 -1
  52. package/dist/conversion/hub/pipeline/stages/req_process/req_process_stage2_route_select/index.js +1 -1
  53. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage1_sse_decode/index.js +11 -11
  54. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage2_format_parse/index.js +1 -1
  55. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage3_semantic_map/index.d.ts +1 -0
  56. package/dist/conversion/hub/pipeline/stages/resp_inbound/resp_inbound_stage3_semantic_map/index.js +4 -2
  57. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/index.d.ts +1 -0
  58. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage1_client_remap/index.js +17 -9
  59. package/dist/conversion/hub/pipeline/stages/resp_outbound/resp_outbound_stage2_sse_stream/index.js +2 -2
  60. package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage1_tool_governance/index.js +40 -2
  61. package/dist/conversion/hub/pipeline/stages/resp_process/resp_process_stage2_finalize/index.js +1 -1
  62. package/dist/conversion/hub/pipeline/target-utils.js +9 -5
  63. package/dist/conversion/hub/process/chat-process.js +256 -16
  64. package/dist/conversion/hub/response/provider-response.d.ts +8 -0
  65. package/dist/conversion/hub/response/provider-response.js +85 -27
  66. package/dist/conversion/hub/response/response-mappers.d.ts +10 -3
  67. package/dist/conversion/hub/response/response-mappers.js +30 -6
  68. package/dist/conversion/hub/response/response-runtime.js +4 -38
  69. package/dist/conversion/hub/snapshot-recorder.js +5 -1
  70. package/dist/conversion/hub/standardized-bridge.js +23 -15
  71. package/dist/conversion/pipeline/codecs/v2/anthropic-openai-pipeline.js +36 -5
  72. package/dist/conversion/responses/responses-openai-bridge.js +20 -4
  73. package/dist/conversion/shared/gemini-tool-utils.d.ts +8 -1
  74. package/dist/conversion/shared/gemini-tool-utils.js +580 -108
  75. package/dist/conversion/shared/jsonish.js +1 -1
  76. package/dist/conversion/shared/mcp-injection.js +67 -33
  77. package/dist/conversion/shared/openai-finalizer.js +2 -1
  78. package/dist/conversion/shared/openai-message-normalize.js +76 -21
  79. package/dist/conversion/shared/responses-output-builder.js +6 -0
  80. package/dist/conversion/shared/runtime-metadata.d.ts +7 -0
  81. package/dist/conversion/shared/runtime-metadata.js +23 -0
  82. package/dist/conversion/shared/text-markup-normalizer.d.ts +2 -0
  83. package/dist/conversion/shared/text-markup-normalizer.js +284 -4
  84. package/dist/conversion/shared/tool-canonicalizer.js +2 -1
  85. package/dist/conversion/shared/tool-governor.js +3 -3
  86. package/dist/filters/engine.js +5 -5
  87. package/dist/filters/special/request-tool-list-filter.js +194 -60
  88. package/dist/filters/special/request-tools-normalize.js +1 -1
  89. package/dist/filters/special/response-tool-text-canonicalize.d.ts +4 -7
  90. package/dist/filters/special/response-tool-text-canonicalize.js +7 -35
  91. package/dist/filters/special/tool-filter-hooks.js +58 -62
  92. package/dist/guidance/index.js +5 -1
  93. package/dist/http/sse-response.js +6 -6
  94. package/dist/router/virtual-router/bootstrap.js +48 -4
  95. package/dist/router/virtual-router/engine-health.d.ts +1 -1
  96. package/dist/router/virtual-router/engine-health.js +11 -110
  97. package/dist/router/virtual-router/engine-selection/alias-selection.d.ts +15 -0
  98. package/dist/router/virtual-router/engine-selection/alias-selection.js +156 -0
  99. package/dist/router/virtual-router/engine-selection/context-weight-multipliers.d.ts +11 -0
  100. package/dist/router/virtual-router/engine-selection/context-weight-multipliers.js +23 -0
  101. package/dist/router/virtual-router/engine-selection/direct-provider-model.d.ts +9 -0
  102. package/dist/router/virtual-router/engine-selection/direct-provider-model.js +49 -0
  103. package/dist/router/virtual-router/engine-selection/instruction-target.d.ts +6 -0
  104. package/dist/router/virtual-router/engine-selection/instruction-target.js +54 -0
  105. package/dist/router/virtual-router/engine-selection/key-parsing.d.ts +8 -0
  106. package/dist/router/virtual-router/engine-selection/key-parsing.js +64 -0
  107. package/dist/router/virtual-router/engine-selection/route-utils.d.ts +12 -0
  108. package/dist/router/virtual-router/engine-selection/route-utils.js +150 -0
  109. package/dist/router/virtual-router/engine-selection/routing-state-filter.d.ts +4 -0
  110. package/dist/router/virtual-router/engine-selection/routing-state-filter.js +50 -0
  111. package/dist/router/virtual-router/engine-selection/selection-deps.d.ts +39 -0
  112. package/dist/router/virtual-router/engine-selection/selection-deps.js +1 -0
  113. package/dist/router/virtual-router/engine-selection/sticky-pool.d.ts +11 -0
  114. package/dist/router/virtual-router/engine-selection/sticky-pool.js +109 -0
  115. package/dist/router/virtual-router/engine-selection/tier-priority.d.ts +12 -0
  116. package/dist/router/virtual-router/engine-selection/tier-priority.js +55 -0
  117. package/dist/router/virtual-router/engine-selection/tier-selection-select.d.ts +22 -0
  118. package/dist/router/virtual-router/engine-selection/tier-selection-select.js +400 -0
  119. package/dist/router/virtual-router/engine-selection/tier-selection.d.ts +3 -0
  120. package/dist/router/virtual-router/engine-selection/tier-selection.js +225 -0
  121. package/dist/router/virtual-router/engine-selection.d.ts +4 -30
  122. package/dist/router/virtual-router/engine-selection.js +10 -962
  123. package/dist/router/virtual-router/engine.d.ts +1 -0
  124. package/dist/router/virtual-router/engine.js +55 -10
  125. package/dist/router/virtual-router/routing-instructions.js +6 -1
  126. package/dist/router/virtual-router/stop-message-state-sync.d.ts +5 -0
  127. package/dist/router/virtual-router/stop-message-state-sync.js +6 -14
  128. package/dist/router/virtual-router/types.d.ts +25 -1
  129. package/dist/servertool/clock/config.d.ts +8 -0
  130. package/dist/servertool/clock/config.js +22 -0
  131. package/dist/servertool/clock/log.d.ts +3 -0
  132. package/dist/servertool/clock/log.js +13 -0
  133. package/dist/servertool/clock/task-store.d.ts +1 -1
  134. package/dist/servertool/clock/task-store.js +1 -1
  135. package/dist/servertool/clock/tasks.js +1 -1
  136. package/dist/servertool/engine.js +146 -21
  137. package/dist/servertool/handlers/clock-auto.js +11 -6
  138. package/dist/servertool/handlers/clock.js +36 -10
  139. package/dist/servertool/handlers/followup-request-builder.js +8 -2
  140. package/dist/servertool/handlers/gemini-empty-reply-continue.js +15 -9
  141. package/dist/servertool/handlers/iflow-model-error-retry.js +6 -4
  142. package/dist/servertool/handlers/recursive-detection-guard.js +4 -2
  143. package/dist/servertool/handlers/stop-message-auto.js +100 -10
  144. package/dist/servertool/handlers/vision.js +4 -1
  145. package/dist/servertool/handlers/web-search.js +3 -1
  146. package/dist/servertool/pending-session.d.ts +19 -0
  147. package/dist/servertool/pending-session.js +97 -0
  148. package/dist/servertool/reenter-backend.js +5 -3
  149. package/dist/servertool/server-side-tools.js +235 -6
  150. package/dist/servertool/types.d.ts +13 -0
  151. package/dist/sse/json-to-sse/event-generators/responses.js +1 -1
  152. package/dist/sse/shared/chat-serializer.js +2 -2
  153. package/dist/sse/shared/constants.js +1 -1
  154. package/dist/sse/sse-to-json/anthropic-sse-to-json-converter.d.ts +7 -1
  155. package/dist/sse/sse-to-json/builders/response-builder.js +16 -0
  156. package/dist/sse/sse-to-json/responses-sse-to-json-converter.d.ts +1 -1
  157. package/dist/tools/apply-patch/execution-capturer.js +1 -1
  158. package/dist/tools/exec-command/normalize.js +4 -0
  159. package/dist/tools/exec-command/regression-capturer.js +1 -1
  160. package/package.json +10 -5
@@ -0,0 +1,43 @@
1
+ import { ResponsesFormatAdapter } from '../../format-adapters/responses-format-adapter.js';
2
+ import { ResponsesSemanticMapper } from '../../semantic-mappers/responses-mapper.js';
3
+ import { AnthropicFormatAdapter } from '../../format-adapters/anthropic-format-adapter.js';
4
+ import { AnthropicSemanticMapper } from '../../semantic-mappers/anthropic-mapper.js';
5
+ import { GeminiFormatAdapter } from '../../format-adapters/gemini-format-adapter.js';
6
+ import { GeminiSemanticMapper } from '../../semantic-mappers/gemini-mapper.js';
7
+ import { ChatFormatAdapter } from '../../format-adapters/chat-format-adapter.js';
8
+ import { ChatSemanticMapper } from '../../semantic-mappers/chat-mapper.js';
9
+ import { runChatContextCapture, captureResponsesContextSnapshot } from '../stages/req_inbound/req_inbound_stage3_context_capture/index.js';
10
+ import { createResponsesContextCapture, createNoopContextCapture } from '../stages/req_inbound/req_inbound_stage3_context_capture/context-factories.js';
11
+ export function resolveProtocolHooks(protocol) {
12
+ switch (protocol) {
13
+ case 'openai-chat':
14
+ return {
15
+ createFormatAdapter: () => new ChatFormatAdapter(),
16
+ createSemanticMapper: () => new ChatSemanticMapper(),
17
+ captureContext: (options) => runChatContextCapture(options),
18
+ contextMetadataKey: 'chatContext'
19
+ };
20
+ case 'openai-responses':
21
+ return {
22
+ createFormatAdapter: () => new ResponsesFormatAdapter(),
23
+ createSemanticMapper: () => new ResponsesSemanticMapper(),
24
+ captureContext: createResponsesContextCapture(captureResponsesContextSnapshot),
25
+ contextMetadataKey: 'responsesContext'
26
+ };
27
+ case 'anthropic-messages':
28
+ return {
29
+ createFormatAdapter: () => new AnthropicFormatAdapter(),
30
+ createSemanticMapper: () => new AnthropicSemanticMapper(),
31
+ captureContext: (options) => runChatContextCapture(options),
32
+ contextMetadataKey: 'anthropicContext'
33
+ };
34
+ case 'gemini-chat':
35
+ return {
36
+ createFormatAdapter: () => new GeminiFormatAdapter(),
37
+ createSemanticMapper: () => new GeminiSemanticMapper(),
38
+ captureContext: createNoopContextCapture('gemini-chat')
39
+ };
40
+ default:
41
+ return undefined;
42
+ }
43
+ }
@@ -0,0 +1 @@
1
+ export declare function assertNoMappableSemanticsInMetadata(metadata: Record<string, unknown> | undefined, scope: string): void;
@@ -0,0 +1,29 @@
1
+ export function assertNoMappableSemanticsInMetadata(metadata, scope) {
2
+ if (!metadata || typeof metadata !== 'object') {
3
+ return;
4
+ }
5
+ const banned = [
6
+ 'responsesResume',
7
+ 'responses_resume',
8
+ 'clientToolsRaw',
9
+ 'client_tools_raw',
10
+ 'anthropicToolNameMap',
11
+ 'anthropic_tool_name_map',
12
+ // Responses semantics must be stored in chat.semantics.responses.context, not metadata.
13
+ 'responsesContext',
14
+ 'responses_context',
15
+ 'responseFormat',
16
+ 'response_format',
17
+ // OpenAI Chat legacy semantics must be stored in chat.semantics (system/tools/providerExtras), not metadata.
18
+ 'systemInstructions',
19
+ 'system_instructions',
20
+ 'toolsFieldPresent',
21
+ 'tools_field_present',
22
+ 'extraFields',
23
+ 'extra_fields'
24
+ ];
25
+ const present = banned.filter((k) => Object.prototype.hasOwnProperty.call(metadata, k));
26
+ if (present.length) {
27
+ throw new Error(`[HubPipeline][semantic_gate] Mappable semantics must not be stored in metadata (${scope}): ${present.join(', ')}`);
28
+ }
29
+ }
@@ -0,0 +1,2 @@
1
+ import type { HubPipelineConfig } from './types.js';
2
+ export declare function injectServerToolRuntimeConfig(config: HubPipelineConfig, metadata: Record<string, unknown>): void;
@@ -0,0 +1,16 @@
1
+ import { ensureRuntimeMetadata } from '../../../shared/runtime-metadata.js';
2
+ export function injectServerToolRuntimeConfig(config, metadata) {
3
+ const rtBase = ensureRuntimeMetadata(metadata);
4
+ const webSearchConfig = config.virtualRouter?.webSearch;
5
+ if (webSearchConfig) {
6
+ rtBase.webSearch = webSearchConfig;
7
+ }
8
+ const execCommandGuard = config.virtualRouter?.execCommandGuard;
9
+ if (execCommandGuard) {
10
+ rtBase.execCommandGuard = execCommandGuard;
11
+ }
12
+ const clockConfig = config.virtualRouter?.clock;
13
+ if (clockConfig) {
14
+ rtBase.clock = clockConfig;
15
+ }
16
+ }
@@ -0,0 +1,116 @@
1
+ import type { Readable } from 'node:stream';
2
+ import type { StandardizedRequest, ProcessedRequest } from '../../types/standardized.js';
3
+ import type { JsonObject } from '../../types/json.js';
4
+ import type { AdapterContext } from '../../types/chat-envelope.js';
5
+ import type { StageRecorder, FormatAdapter, SemanticMapper } from '../../format-adapters/index.js';
6
+ import type { VirtualRouterConfig, RouterMetadataInput, RoutingDecision, RoutingDiagnostics, TargetMetadata, VirtualRouterHealthStore, ProviderQuotaView } from '../../../../router/virtual-router/types.js';
7
+ import type { HubPolicyConfig, HubPolicyMode } from '../../policy/policy-engine.js';
8
+ import type { HubToolSurfaceConfig } from '../../tool-surface/tool-surface-engine.js';
9
+ import type { HubProcessNodeResult } from '../../process/chat-process.js';
10
+ export type ApplyPatchToolMode = 'schema' | 'freeform';
11
+ export interface HubPipelineConfig {
12
+ virtualRouter: VirtualRouterConfig;
13
+ /**
14
+ * Optional: hub-level policy controls (observe-only in V1 Phase 0).
15
+ * Must remain config-driven and default to off.
16
+ */
17
+ policy?: HubPolicyConfig;
18
+ /**
19
+ * Optional: tool surface rollout controls.
20
+ * - shadow: compute & record diffs, do not modify outbound payload
21
+ * - enforce: rewrite outbound payload to match canonical tool surface
22
+ */
23
+ toolSurface?: HubToolSurfaceConfig;
24
+ /**
25
+ * 可选:供 VirtualRouterEngine 使用的健康状态持久化存储。
26
+ * 当提供时,VirtualRouterEngine 将在初始化时恢复上一次快照,并在 cooldown/熔断变化时调用 persistSnapshot。
27
+ */
28
+ healthStore?: VirtualRouterHealthStore;
29
+ /**
30
+ * 可选:路由状态存储,用于持久化 sticky routing / stopMessage 等指令状态。
31
+ */
32
+ routingStateStore?: {
33
+ loadSync(key: string): unknown;
34
+ saveAsync(key: string, state: unknown): void;
35
+ };
36
+ /**
37
+ * 可选:配额视图。若提供,VirtualRouterEngine 将在路由过程中参考
38
+ * provider 的 quota 状态(inPool/priorityTier/cooldownUntil/blacklistUntil)
39
+ * 过滤目标并按优先级分层调度。
40
+ */
41
+ quotaView?: ProviderQuotaView;
42
+ }
43
+ export interface HubPipelineRequestMetadata extends Record<string, unknown> {
44
+ entryEndpoint?: string;
45
+ providerProtocol?: string;
46
+ processMode?: 'chat' | 'passthrough';
47
+ stage?: 'inbound' | 'outbound';
48
+ direction?: 'request' | 'response';
49
+ stream?: boolean;
50
+ routeHint?: string;
51
+ }
52
+ export interface HubPipelineRequest {
53
+ id?: string;
54
+ endpoint: string;
55
+ payload: Record<string, unknown> | {
56
+ readable?: Readable;
57
+ } | Readable;
58
+ metadata?: HubPipelineRequestMetadata;
59
+ }
60
+ type HubPipelineNodeMetadata = HubProcessNodeResult['metadata'] | Record<string, unknown>;
61
+ export interface HubPipelineNodeResult {
62
+ id: string;
63
+ success: boolean;
64
+ metadata: HubPipelineNodeMetadata;
65
+ error?: JsonObject;
66
+ }
67
+ export interface HubPipelineResult {
68
+ requestId: string;
69
+ providerPayload?: Record<string, unknown>;
70
+ standardizedRequest?: StandardizedRequest;
71
+ processedRequest?: ProcessedRequest;
72
+ routingDecision?: RoutingDecision;
73
+ routingDiagnostics?: RoutingDiagnostics;
74
+ target?: TargetMetadata;
75
+ metadata: Record<string, unknown>;
76
+ nodeResults: HubPipelineNodeResult[];
77
+ }
78
+ export type ProviderProtocol = 'openai-chat' | 'openai-responses' | 'anthropic-messages' | 'gemini-chat';
79
+ export type HubShadowCompareRequestConfig = {
80
+ baselineMode: HubPolicyMode;
81
+ };
82
+ export interface NormalizedRequest {
83
+ id: string;
84
+ endpoint: string;
85
+ entryEndpoint: string;
86
+ providerProtocol: ProviderProtocol;
87
+ payload: Record<string, unknown>;
88
+ metadata: Record<string, unknown>;
89
+ policyOverride?: HubPolicyConfig;
90
+ shadowCompare?: HubShadowCompareRequestConfig;
91
+ disableSnapshots?: boolean;
92
+ processMode: 'chat' | 'passthrough';
93
+ direction: 'request' | 'response';
94
+ stage: 'inbound' | 'outbound';
95
+ stream: boolean;
96
+ routeHint?: string;
97
+ hubEntryMode?: 'chat_process';
98
+ }
99
+ export interface RequestContextCaptureOptions {
100
+ rawRequest: JsonObject;
101
+ adapterContext: AdapterContext;
102
+ stageRecorder?: StageRecorder;
103
+ }
104
+ export interface RequestStageHooks<TContext = Record<string, unknown>> {
105
+ createFormatAdapter: () => FormatAdapter;
106
+ createSemanticMapper: () => SemanticMapper;
107
+ captureContext: (options: RequestContextCaptureOptions) => Promise<TContext | undefined> | TContext | undefined;
108
+ contextMetadataKey?: string;
109
+ }
110
+ export interface PayloadNormalizationContext {
111
+ requestId: string;
112
+ entryEndpoint: string;
113
+ providerProtocol: ProviderProtocol;
114
+ metadata: Record<string, unknown>;
115
+ }
116
+ export type { VirtualRouterConfig, RouterMetadataInput, RoutingDecision, RoutingDiagnostics, TargetMetadata, VirtualRouterHealthStore, ProviderQuotaView };
@@ -0,0 +1 @@
1
+ export {};
@@ -1,77 +1,6 @@
1
- import { Readable } from 'node:stream';
2
- import type { StandardizedRequest, ProcessedRequest } from '../types/standardized.js';
3
- import type { JsonObject } from '../types/json.js';
4
- import type { VirtualRouterConfig, RoutingDecision, RoutingDiagnostics, TargetMetadata, VirtualRouterHealthStore, ProviderQuotaView } from '../../../router/virtual-router/types.js';
5
- import { type HubProcessNodeResult } from '../process/chat-process.js';
6
- import { type HubPolicyConfig } from '../policy/policy-engine.js';
7
- import { type HubToolSurfaceConfig } from '../tool-surface/tool-surface-engine.js';
8
- export interface HubPipelineConfig {
9
- virtualRouter: VirtualRouterConfig;
10
- /**
11
- * Optional: hub-level policy controls (observe-only in V1 Phase 0).
12
- * Must remain config-driven and default to off.
13
- */
14
- policy?: HubPolicyConfig;
15
- /**
16
- * Optional: tool surface rollout controls.
17
- * - shadow: compute & record diffs, do not modify outbound payload
18
- * - enforce: rewrite outbound payload to match canonical tool surface
19
- */
20
- toolSurface?: HubToolSurfaceConfig;
21
- /**
22
- * 可选:供 VirtualRouterEngine 使用的健康状态持久化存储。
23
- * 当提供时,VirtualRouterEngine 将在初始化时恢复上一次快照,并在 cooldown/熔断变化时调用 persistSnapshot。
24
- */
25
- healthStore?: VirtualRouterHealthStore;
26
- /**
27
- * 可选:路由状态存储,用于持久化 sticky routing / stopMessage 等指令状态。
28
- */
29
- routingStateStore?: {
30
- loadSync(key: string): unknown;
31
- saveAsync(key: string, state: unknown): void;
32
- };
33
- /**
34
- * 可选:配额视图。若提供,VirtualRouterEngine 将在路由过程中参考
35
- * provider 的 quota 状态(inPool/priorityTier/cooldownUntil/blacklistUntil)
36
- * 过滤目标并按优先级分层调度。
37
- */
38
- quotaView?: ProviderQuotaView;
39
- }
40
- export interface HubPipelineRequestMetadata extends Record<string, unknown> {
41
- entryEndpoint?: string;
42
- providerProtocol?: string;
43
- processMode?: 'chat' | 'passthrough';
44
- stage?: 'inbound' | 'outbound';
45
- direction?: 'request' | 'response';
46
- stream?: boolean;
47
- routeHint?: string;
48
- }
49
- export interface HubPipelineRequest {
50
- id?: string;
51
- endpoint: string;
52
- payload: Record<string, unknown> | {
53
- readable?: Readable;
54
- } | Readable;
55
- metadata?: HubPipelineRequestMetadata;
56
- }
57
- type HubPipelineNodeMetadata = HubProcessNodeResult['metadata'] | Record<string, unknown>;
58
- export interface HubPipelineNodeResult {
59
- id: string;
60
- success: boolean;
61
- metadata: HubPipelineNodeMetadata;
62
- error?: JsonObject;
63
- }
64
- export interface HubPipelineResult {
65
- requestId: string;
66
- providerPayload?: Record<string, unknown>;
67
- standardizedRequest?: StandardizedRequest;
68
- processedRequest?: ProcessedRequest;
69
- routingDecision?: RoutingDecision;
70
- routingDiagnostics?: RoutingDiagnostics;
71
- target?: TargetMetadata;
72
- metadata: Record<string, unknown>;
73
- nodeResults: HubPipelineNodeResult[];
74
- }
1
+ import type { VirtualRouterConfig } from '../../../router/virtual-router/types.js';
2
+ import type { HubPipelineConfig, HubPipelineRequest, HubPipelineResult } from './hub-pipeline/types.js';
3
+ export type { HubPipelineConfig, HubPipelineNodeResult, HubPipelineRequest, HubPipelineRequestMetadata, HubPipelineResult, ProviderProtocol } from './hub-pipeline/types.js';
75
4
  export declare class HubPipeline {
76
5
  private readonly routerEngine;
77
6
  private config;
@@ -84,26 +13,5 @@ export declare class HubPipeline {
84
13
  }): void;
85
14
  updateVirtualRouterConfig(nextConfig: VirtualRouterConfig): void;
86
15
  dispose(): void;
87
- private executeRequestStagePipeline;
88
- private resolveClientProtocol;
89
- private coerceStandardizedRequestFromPayload;
90
- private executeChatProcessEntryPipeline;
91
16
  execute(request: HubPipelineRequest): Promise<HubPipelineResult>;
92
- private captureAnthropicAliasMap;
93
- private shouldCaptureAnthropicAlias;
94
- private resolveAliasMapFromSources;
95
- private resolveProtocolHooks;
96
- private buildAdapterContext;
97
- private maybeCreateStageRecorder;
98
- private asJsonObject;
99
- private normalizeRequest;
100
- private convertProcessNodeResult;
101
- private materializePayload;
102
- private unwrapReadable;
103
- private convertSsePayload;
104
- private resolveSseProtocol;
105
- private extractModelHint;
106
- private resolveOutboundStreamIntent;
107
- private applyOutboundStreamPreference;
108
17
  }
109
- export {};