@omnicross/contracts 0.1.10 → 0.2.1

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/dist/index.cjs CHANGED
@@ -34,8 +34,11 @@ __export(index_exports, {
34
34
  DEFAULT_VOUCHER_CONFIG: () => DEFAULT_VOUCHER_CONFIG,
35
35
  EFFORT_RATIO: () => EFFORT_RATIO,
36
36
  EXTENDED_CONTEXT_CAPABLE_MODELS: () => EXTENDED_CONTEXT_CAPABLE_MODELS,
37
+ IMAGE_CAPABILITY_UNAVAILABLE_REASONS: () => IMAGE_CAPABILITY_UNAVAILABLE_REASONS,
38
+ IMAGE_GENERATION_ERROR_CODES: () => IMAGE_GENERATION_ERROR_CODES,
37
39
  KNOWN_MODELS: () => KNOWN_MODELS,
38
40
  LEGACY_THINKING_TOKEN_LIMITS: () => LEGACY_THINKING_TOKEN_LIMITS,
41
+ LEGACY_UNKNOWN_PROVIDER_ID: () => LEGACY_UNKNOWN_PROVIDER_ID,
39
42
  LLM_PROVIDER_PRESETS: () => LLM_PROVIDER_PRESETS,
40
43
  MAX_CONCURRENCY_DEFAULTS: () => MAX_CONCURRENCY_DEFAULTS,
41
44
  MODEL_ALIASES: () => MODEL_ALIASES,
@@ -43,6 +46,7 @@ __export(index_exports, {
43
46
  PROVIDER_SEARCH_CONFIGS: () => PROVIDER_SEARCH_CONFIGS,
44
47
  REASONING_MODEL_PATTERNS: () => REASONING_MODEL_PATTERNS,
45
48
  SUBSCRIPTION_MODEL_CATALOG: () => SUBSCRIPTION_MODEL_CATALOG,
49
+ SearchProviderError: () => SearchProviderError,
46
50
  THINKING_TOKEN_MAP: () => THINKING_TOKEN_MAP,
47
51
  WEBHOOK_DESTINATION_TYPES: () => WEBHOOK_DESTINATION_TYPES,
48
52
  WEBHOOK_EVENT_KINDS: () => WEBHOOK_EVENT_KINDS,
@@ -54,6 +58,7 @@ __export(index_exports, {
54
58
  canDisableThinking: () => canDisableThinking,
55
59
  findLegacyTokenLimit: () => findLegacyTokenLimit,
56
60
  findTokenLimit: () => findTokenLimit,
61
+ fromLegacyWebSearchResponse: () => fromLegacyWebSearchResponse,
57
62
  getAllProviderPresets: () => getAllProviderPresets,
58
63
  getClaudeMaxTokens: () => getClaudeMaxTokens,
59
64
  getCodingPlanBaseUrl: () => getCodingPlanBaseUrl,
@@ -64,16 +69,23 @@ __export(index_exports, {
64
69
  healthHttpStatus: () => healthHttpStatus,
65
70
  isApiProvider: () => isApiProvider,
66
71
  isExtendedContextCapable: () => isExtendedContextCapable,
72
+ isKnownSearchProviderId: () => isKnownSearchProviderId,
67
73
  isLocalProvider: () => isLocalProvider,
68
74
  isReasoningModel: () => isReasoningModel,
75
+ isSearchProviderError: () => isSearchProviderError,
69
76
  legacyCliBackendToSubscriptionProvider: () => legacyCliBackendToSubscriptionProvider,
77
+ legacyErrorStringToSearchErrorCode: () => legacyErrorStringToSearchErrorCode,
78
+ legacyProviderIdToSearchProviderId: () => legacyProviderIdToSearchProviderId,
70
79
  lookupCanonicalCapabilities: () => lookupCanonicalCapabilities,
71
80
  normalizeModelId: () => normalizeModelId,
72
81
  resolveFollowProviderModel: () => resolveFollowProviderModel,
73
82
  resolveModelCapabilities: () => resolveModelCapabilities,
74
83
  resolveProviderEndpoint: () => resolveProviderEndpoint,
84
+ searchErrorToLegacyWebSearchResponse: () => searchErrorToLegacyWebSearchResponse,
75
85
  subscriptionProviderHasCatalog: () => subscriptionProviderHasCatalog,
76
- subscriptionTargetForSession: () => subscriptionTargetForSession
86
+ subscriptionTargetForSession: () => subscriptionTargetForSession,
87
+ toLegacyWebSearchResponse: () => toLegacyWebSearchResponse,
88
+ toSearchErrorShape: () => toSearchErrorShape
77
89
  });
78
90
  module.exports = __toCommonJS(index_exports);
79
91
 
@@ -372,6 +384,40 @@ function healthHttpStatus(status) {
372
384
  return status === "ok" ? 200 : 503;
373
385
  }
374
386
 
387
+ // src/image-generation-types.ts
388
+ var IMAGE_GENERATION_ERROR_CODES = [
389
+ "invalid_image_request",
390
+ "unsupported_model",
391
+ "unsupported_capability",
392
+ "invalid_api_key",
393
+ "upstream_auth_required",
394
+ "image_reference_not_found",
395
+ "image_reference_expired",
396
+ "image_too_large",
397
+ "unsupported_image_type",
398
+ "moderation_blocked",
399
+ "upstream_rate_limited",
400
+ "subscription_usage_limit_reached",
401
+ "image_queue_full",
402
+ "image_queue_timeout",
403
+ "request_cancelled",
404
+ "upstream_protocol_changed",
405
+ "image_generation_failed",
406
+ "image_generation_timeout"
407
+ ];
408
+ var IMAGE_CAPABILITY_UNAVAILABLE_REASONS = [
409
+ "missing_evidence",
410
+ "stale_evidence",
411
+ "contradictory_evidence",
412
+ "adapter_unavailable",
413
+ "account_unverified",
414
+ "protocol_unverified",
415
+ "no_common_models",
416
+ "no_common_output_formats",
417
+ "no_common_quality_levels",
418
+ "no_common_moderation_modes"
419
+ ];
420
+
375
421
  // src/mcp-types.ts
376
422
  var DEFAULT_MCP_SESSION_CONFIG = {
377
423
  mode: "auto",
@@ -2546,6 +2592,168 @@ function getProviderSearchConfig(presetId) {
2546
2592
  return PROVIDER_SEARCH_CONFIGS[presetId];
2547
2593
  }
2548
2594
 
2595
+ // src/search-compat.ts
2596
+ var LEGACY_UNKNOWN_PROVIDER_ID = "legacy:unknown";
2597
+ var DEFAULT_LEGACY_ERROR_CODE = "upstream_unavailable";
2598
+ function legacyProviderIdToSearchProviderId(id) {
2599
+ return id;
2600
+ }
2601
+ var LEGACY_ERROR_RULES = [
2602
+ // Runtime facts first.
2603
+ { pattern: /abort|cancell?ed|cancell?ing/i, code: "cancelled" },
2604
+ { pattern: /timed ?out|timeout/i, code: "timeout" },
2605
+ // WebSearchService.search()
2606
+ { pattern: /not configured/i, code: "config_missing" },
2607
+ { pattern: /is disabled/i, code: "policy_denied" },
2608
+ { pattern: /not implemented/i, code: "upstream_unavailable" },
2609
+ // HttpOnlyWebSearchService / WebSearchOrchestrator transport availability
2610
+ { pattern: /unavailable in this host/i, code: "upstream_unavailable" },
2611
+ { pattern: /HTTP search transport is unavailable/i, code: "upstream_unavailable" },
2612
+ // Exhausted-candidate summaries (both fallback implementations)
2613
+ { pattern: /No eligible web search provider returned usable results/i, code: "upstream_unavailable" },
2614
+ { pattern: /No keyless HTTP search provider returned usable results/i, code: "upstream_unavailable" },
2615
+ // Anti-bot / anti-decoy refusals — the page came back, it just cannot be trusted.
2616
+ { pattern: /bot-challenge/i, code: "upstream_unavailable" },
2617
+ {
2618
+ pattern: /returned an untrusted search result page|refusing to return possible bot-decoy content/i,
2619
+ code: "upstream_unavailable"
2620
+ },
2621
+ { pattern: /JavaScript-only search shell without result entries/i, code: "upstream_unavailable" },
2622
+ // Response the provider did return, but which could not be turned into results.
2623
+ { pattern: /response contained no result entries/i, code: "parse_failed" },
2624
+ { pattern: /returned an invalid response/i, code: "parse_failed" },
2625
+ { pattern: /returned an invalid result list/i, code: "parse_failed" },
2626
+ { pattern: /returned only duplicate results/i, code: "parse_failed" },
2627
+ { pattern: /returned no usable direct results/i, code: "parse_failed" },
2628
+ { pattern: /returned no results/i, code: "parse_failed" }
2629
+ ];
2630
+ function legacyErrorStringToSearchErrorCode(message) {
2631
+ for (const rule of LEGACY_ERROR_RULES) {
2632
+ if (rule.pattern.test(message)) return rule.code;
2633
+ }
2634
+ return DEFAULT_LEGACY_ERROR_CODE;
2635
+ }
2636
+ function providerIdFromLegacyErrorString(message) {
2637
+ const match = /^Provider\s+(?!is\b|returned\b|request\b)(\S+)\s+(?:is|not)\b/i.exec(message);
2638
+ return match?.[1];
2639
+ }
2640
+ function toSearchResult(result) {
2641
+ return { title: result.title, url: result.url, content: result.content };
2642
+ }
2643
+ function fromLegacyWebSearchResponse(resp) {
2644
+ if (resp.success) {
2645
+ return {
2646
+ ok: true,
2647
+ response: {
2648
+ query: resp.query,
2649
+ providerId: resp.provider ?? LEGACY_UNKNOWN_PROVIDER_ID,
2650
+ results: resp.results.map(toSearchResult)
2651
+ }
2652
+ };
2653
+ }
2654
+ const message = resp.error ?? "Unknown error";
2655
+ const error = {
2656
+ code: legacyErrorStringToSearchErrorCode(message),
2657
+ message
2658
+ };
2659
+ const providerId = resp.provider ?? providerIdFromLegacyErrorString(message);
2660
+ if (providerId !== void 0) error.providerId = providerId;
2661
+ return { ok: false, error };
2662
+ }
2663
+ function toLegacyWebSearchResponse(response) {
2664
+ return {
2665
+ success: true,
2666
+ query: response.query,
2667
+ results: response.results.map((result) => ({
2668
+ title: result.title,
2669
+ content: result.content,
2670
+ url: result.url
2671
+ })),
2672
+ provider: response.providerId
2673
+ };
2674
+ }
2675
+ function searchErrorToLegacyWebSearchResponse(query, error) {
2676
+ const response = {
2677
+ success: false,
2678
+ query,
2679
+ results: [],
2680
+ error: error.message.trim().length > 0 ? error.message : error.code
2681
+ };
2682
+ if (error.providerId !== void 0) {
2683
+ response.provider = error.providerId;
2684
+ }
2685
+ return response;
2686
+ }
2687
+
2688
+ // src/search-types.ts
2689
+ var KNOWN_SEARCH_PROVIDER_IDS = /* @__PURE__ */ new Set([
2690
+ "http-bing",
2691
+ "http-duckduckgo",
2692
+ "tavily",
2693
+ "jina",
2694
+ "searxng",
2695
+ "zhipu",
2696
+ "z.ai"
2697
+ ]);
2698
+ function isKnownSearchProviderId(id) {
2699
+ return KNOWN_SEARCH_PROVIDER_IDS.has(id);
2700
+ }
2701
+ var SEARCH_ERROR_CODES = /* @__PURE__ */ new Set([
2702
+ "config_missing",
2703
+ "auth_failed",
2704
+ "rate_limited",
2705
+ "timeout",
2706
+ "upstream_unavailable",
2707
+ "parse_failed",
2708
+ "cancelled",
2709
+ "policy_denied"
2710
+ ]);
2711
+ var DEFAULT_SEARCH_ERROR_CODE = "upstream_unavailable";
2712
+ var SearchProviderError = class _SearchProviderError extends Error {
2713
+ /** Stable taxonomy code. */
2714
+ code;
2715
+ /** The provider that failed, when known. */
2716
+ providerId;
2717
+ /** Whether retrying the same provider could plausibly succeed. */
2718
+ retryable;
2719
+ /** Pre-sanitized string-valued context. */
2720
+ details;
2721
+ constructor(code, message, init = {}) {
2722
+ super(message, init.cause === void 0 ? void 0 : { cause: init.cause });
2723
+ this.name = "SearchProviderError";
2724
+ this.code = code;
2725
+ this.providerId = init.providerId;
2726
+ this.retryable = init.retryable;
2727
+ this.details = init.details;
2728
+ Object.setPrototypeOf(this, _SearchProviderError.prototype);
2729
+ }
2730
+ /** This error as its serializable {@link SearchErrorShape}. */
2731
+ toShape() {
2732
+ return toSearchErrorShape(this);
2733
+ }
2734
+ };
2735
+ function isSearchProviderError(value) {
2736
+ if (value instanceof SearchProviderError) return true;
2737
+ if (!(value instanceof Error)) return false;
2738
+ const code = value.code;
2739
+ return typeof code === "string" && SEARCH_ERROR_CODES.has(code);
2740
+ }
2741
+ function toSearchErrorShape(value) {
2742
+ if (isSearchProviderError(value)) {
2743
+ const shape = { code: value.code, message: value.message };
2744
+ if (value.providerId !== void 0) shape.providerId = value.providerId;
2745
+ if (value.retryable !== void 0) shape.retryable = value.retryable;
2746
+ if (value.details !== void 0) shape.details = value.details;
2747
+ return shape;
2748
+ }
2749
+ return { code: DEFAULT_SEARCH_ERROR_CODE, message: describeUnknownError(value) };
2750
+ }
2751
+ function describeUnknownError(value) {
2752
+ if (typeof value === "string") return value;
2753
+ if (value instanceof Error && value.message) return value.message;
2754
+ return "Unknown error";
2755
+ }
2756
+
2549
2757
  // src/subscription-model-catalog.ts
2550
2758
  var SUBSCRIPTION_MODEL_CATALOG = {
2551
2759
  claude: ["claude-haiku-4-5", "claude-sonnet-5", "claude-opus-5", "claude-fable-5"],
@@ -2812,8 +3020,11 @@ function isLocalProvider(id) {
2812
3020
  DEFAULT_VOUCHER_CONFIG,
2813
3021
  EFFORT_RATIO,
2814
3022
  EXTENDED_CONTEXT_CAPABLE_MODELS,
3023
+ IMAGE_CAPABILITY_UNAVAILABLE_REASONS,
3024
+ IMAGE_GENERATION_ERROR_CODES,
2815
3025
  KNOWN_MODELS,
2816
3026
  LEGACY_THINKING_TOKEN_LIMITS,
3027
+ LEGACY_UNKNOWN_PROVIDER_ID,
2817
3028
  LLM_PROVIDER_PRESETS,
2818
3029
  MAX_CONCURRENCY_DEFAULTS,
2819
3030
  MODEL_ALIASES,
@@ -2821,6 +3032,7 @@ function isLocalProvider(id) {
2821
3032
  PROVIDER_SEARCH_CONFIGS,
2822
3033
  REASONING_MODEL_PATTERNS,
2823
3034
  SUBSCRIPTION_MODEL_CATALOG,
3035
+ SearchProviderError,
2824
3036
  THINKING_TOKEN_MAP,
2825
3037
  WEBHOOK_DESTINATION_TYPES,
2826
3038
  WEBHOOK_EVENT_KINDS,
@@ -2832,6 +3044,7 @@ function isLocalProvider(id) {
2832
3044
  canDisableThinking,
2833
3045
  findLegacyTokenLimit,
2834
3046
  findTokenLimit,
3047
+ fromLegacyWebSearchResponse,
2835
3048
  getAllProviderPresets,
2836
3049
  getClaudeMaxTokens,
2837
3050
  getCodingPlanBaseUrl,
@@ -2842,14 +3055,21 @@ function isLocalProvider(id) {
2842
3055
  healthHttpStatus,
2843
3056
  isApiProvider,
2844
3057
  isExtendedContextCapable,
3058
+ isKnownSearchProviderId,
2845
3059
  isLocalProvider,
2846
3060
  isReasoningModel,
3061
+ isSearchProviderError,
2847
3062
  legacyCliBackendToSubscriptionProvider,
3063
+ legacyErrorStringToSearchErrorCode,
3064
+ legacyProviderIdToSearchProviderId,
2848
3065
  lookupCanonicalCapabilities,
2849
3066
  normalizeModelId,
2850
3067
  resolveFollowProviderModel,
2851
3068
  resolveModelCapabilities,
2852
3069
  resolveProviderEndpoint,
3070
+ searchErrorToLegacyWebSearchResponse,
2853
3071
  subscriptionProviderHasCatalog,
2854
- subscriptionTargetForSession
3072
+ subscriptionTargetForSession,
3073
+ toLegacyWebSearchResponse,
3074
+ toSearchErrorShape
2855
3075
  });
package/dist/index.d.cts CHANGED
@@ -9,11 +9,14 @@ export { R as ReasoningConfig, T as ThinkLevel, a as ThinkingContent } from './t
9
9
  export { ResolvedEndpoint, resolveProviderEndpoint } from './endpoint-resolver.cjs';
10
10
  export { EXTENDED_CONTEXT_CAPABLE_MODELS, isExtendedContextCapable } from './extended-context.cjs';
11
11
  export { HealthReport, HealthStatus, LogFormat, LogLevel, LoggingConfig, healthHttpStatus } from './health-logging-types.cjs';
12
+ export { IMAGE_CAPABILITY_UNAVAILABLE_REASONS, IMAGE_GENERATION_ERROR_CODES, ImageAction, ImageArtifactId, ImageArtifactMetadata, ImageBackground, ImageCapabilities, ImageCapabilityEvidenceLayer, ImageCapabilityLayerKind, ImageCapabilityUnavailableReason, ImageCapabilityValues, ImageGenerationErrorCode, ImageGenerationPublicError, ImageInputAsset, ImageModeration, ImageModerationDetails, ImageModerationStage, ImageOutputCompressionCapability, ImageOutputFormat, ImageProviderAcceptedEvent, ImageProviderCompletedEvent, ImageProviderEvent, ImageProviderFailedEvent, ImageProviderOutput, ImageProviderPartialImageEvent, ImageQuality, ImageReferenceId, ImageReferenceMetadata, ImageRequestOptions, ImageRetrySafety, ImageSize, ImageUsage, NormalizedImageEditRequest, NormalizedImageGenerateRequest, NormalizedImageRequest, SensitiveOpaqueImageReference } from './image-generation-types.cjs';
12
13
  export { A as API_MODE_IDS, a as AgentDefaultModels, b as ApiFormat, c as ApiKeyEntry, d as ApiMode, e as ApiModeId, C as ChatApiFormat, f as CodingPlanConfig, g as CompletionSettings, G as GlobalModelParameters, L as LLMProvider, M as ModelConfig, h as ModelGroup, i as ModelParameter, j as ModelRef, O as OpenRouterDataCollection, k as OpenRouterMaxPrice, l as OpenRouterProviderRouting, m as OpenRouterProviderSort, n as OpenRouterQuantization, P as PresetProviderTemplate, o as ProviderApiType, p as ProviderModelMapping, q as ProviderSearchConfig, r as ProviderTemplate, S as SearchCapability, T as TransformerConfig, s as TransformerEntry } from './llm-config-DeWNx1ig.cjs';
13
14
  export { DEFAULT_MCP_SESSION_CONFIG, MCPCallToolResponse, MCPTool, MCPToolResponseContent, McpActionResult, McpDiscoverResult, McpMode, McpServerConfig, McpServerInput, McpServerJsonInput, McpServerList, McpServerRecord, McpServerRemoveInput, McpServerScope, McpServerTransport, McpSessionConfig, McpTestResult, McpToolInfo } from './mcp-types.cjs';
14
15
  export { MessageBlock, MessageBlockBase, MessageBlockType, TextBlock, ThinkingBlock, ToolResultBlock, ToolUseBlock } from './message-blocks.cjs';
15
16
  export { DEFAULT_LITELLM_PRICING_URL, DEFAULT_OPENROUTER_PRICING_URL, PricingConflict, PricingConflictDecision, PricingEntry, PricingEntryInput, PricingFetchResult, PricingResolution, PricingSource, PricingSourceRefreshResult } from './pricing-types.cjs';
16
17
  export { CATALOG_VERSION, CODING_PLAN_URL_PRESETS, DEFAULT_SEED_PRESET_IDS, LLM_PROVIDER_PRESETS, MAX_CONCURRENCY_DEFAULTS, PROVIDER_MODEL_MAPPINGS, PROVIDER_SEARCH_CONFIGS, getAllProviderPresets, getCodingPlanBaseUrl, getPresetById, getPresetRevision, getProviderSearchConfig, resolveFollowProviderModel } from './provider-presets/index.cjs';
18
+ export { LEGACY_UNKNOWN_PROVIDER_ID, fromLegacyWebSearchResponse, legacyErrorStringToSearchErrorCode, legacyProviderIdToSearchProviderId, searchErrorToLegacyWebSearchResponse, toLegacyWebSearchResponse } from './search-compat.cjs';
19
+ export { KnownSearchProviderId, OrchestratedSearchResponse, SearchAttempt, SearchAttemptEvent, SearchAttemptOutcome, SearchCompleteEvent, SearchContributionContext, SearchErrorCode, SearchErrorShape, SearchOptions, SearchPolicy, SearchProvider, SearchProviderCapabilities, SearchProviderContribution, SearchProviderDescriptor, SearchProviderDiagnostic, SearchProviderError, SearchProviderErrorInit, SearchProviderHealthStatus, SearchProviderId, SearchProviderSource, SearchRequest, SearchResponse, SearchResult, SearchRuntimeEvent, SearchRuntimeEventBase, SearchTimeRange, SearchTransportKind, SearchUrlReadResult, isKnownSearchProviderId, isSearchProviderError, toSearchErrorShape } from './search-types.cjs';
17
20
  export { SUBSCRIPTION_MODEL_CATALOG, subscriptionProviderHasCatalog } from './subscription-model-catalog.cjs';
18
21
  export { CANNOT_DISABLE_THINKING_PATTERNS, DEFAULT_MAX_TOKENS, EFFORT_RATIO, LEGACY_THINKING_TOKEN_LIMITS, REASONING_MODEL_PATTERNS, THINKING_TOKEN_MAP, buildAnthropicThinking, buildGeminiThinkingConfig, buildQwenThinkingConfig, calculateThinkingBudget, canDisableThinking, findLegacyTokenLimit, findTokenLimit, getClaudeMaxTokens, getOpenAIReasoningEffort, isReasoningModel } from './thinking-config.cjs';
19
22
  export { ApiKeyUsageRow, MessageUsageRow, ModelUsageRow, SessionCacheStats, UsageCacheKeySource, UsageDateRange, UsageEventInput, UsageEventRecord, UsageQueryParams, UsageTimeBucket, UsageTimeSeriesBucket, UsageTotals } from './usage-stats-types.cjs';
package/dist/index.d.ts CHANGED
@@ -9,11 +9,14 @@ export { R as ReasoningConfig, T as ThinkLevel, a as ThinkingContent } from './t
9
9
  export { ResolvedEndpoint, resolveProviderEndpoint } from './endpoint-resolver.js';
10
10
  export { EXTENDED_CONTEXT_CAPABLE_MODELS, isExtendedContextCapable } from './extended-context.js';
11
11
  export { HealthReport, HealthStatus, LogFormat, LogLevel, LoggingConfig, healthHttpStatus } from './health-logging-types.js';
12
+ export { IMAGE_CAPABILITY_UNAVAILABLE_REASONS, IMAGE_GENERATION_ERROR_CODES, ImageAction, ImageArtifactId, ImageArtifactMetadata, ImageBackground, ImageCapabilities, ImageCapabilityEvidenceLayer, ImageCapabilityLayerKind, ImageCapabilityUnavailableReason, ImageCapabilityValues, ImageGenerationErrorCode, ImageGenerationPublicError, ImageInputAsset, ImageModeration, ImageModerationDetails, ImageModerationStage, ImageOutputCompressionCapability, ImageOutputFormat, ImageProviderAcceptedEvent, ImageProviderCompletedEvent, ImageProviderEvent, ImageProviderFailedEvent, ImageProviderOutput, ImageProviderPartialImageEvent, ImageQuality, ImageReferenceId, ImageReferenceMetadata, ImageRequestOptions, ImageRetrySafety, ImageSize, ImageUsage, NormalizedImageEditRequest, NormalizedImageGenerateRequest, NormalizedImageRequest, SensitiveOpaqueImageReference } from './image-generation-types.js';
12
13
  export { A as API_MODE_IDS, a as AgentDefaultModels, b as ApiFormat, c as ApiKeyEntry, d as ApiMode, e as ApiModeId, C as ChatApiFormat, f as CodingPlanConfig, g as CompletionSettings, G as GlobalModelParameters, L as LLMProvider, M as ModelConfig, h as ModelGroup, i as ModelParameter, j as ModelRef, O as OpenRouterDataCollection, k as OpenRouterMaxPrice, l as OpenRouterProviderRouting, m as OpenRouterProviderSort, n as OpenRouterQuantization, P as PresetProviderTemplate, o as ProviderApiType, p as ProviderModelMapping, q as ProviderSearchConfig, r as ProviderTemplate, S as SearchCapability, T as TransformerConfig, s as TransformerEntry } from './llm-config-CKOaFFdy.js';
13
14
  export { DEFAULT_MCP_SESSION_CONFIG, MCPCallToolResponse, MCPTool, MCPToolResponseContent, McpActionResult, McpDiscoverResult, McpMode, McpServerConfig, McpServerInput, McpServerJsonInput, McpServerList, McpServerRecord, McpServerRemoveInput, McpServerScope, McpServerTransport, McpSessionConfig, McpTestResult, McpToolInfo } from './mcp-types.js';
14
15
  export { MessageBlock, MessageBlockBase, MessageBlockType, TextBlock, ThinkingBlock, ToolResultBlock, ToolUseBlock } from './message-blocks.js';
15
16
  export { DEFAULT_LITELLM_PRICING_URL, DEFAULT_OPENROUTER_PRICING_URL, PricingConflict, PricingConflictDecision, PricingEntry, PricingEntryInput, PricingFetchResult, PricingResolution, PricingSource, PricingSourceRefreshResult } from './pricing-types.js';
16
17
  export { CATALOG_VERSION, CODING_PLAN_URL_PRESETS, DEFAULT_SEED_PRESET_IDS, LLM_PROVIDER_PRESETS, MAX_CONCURRENCY_DEFAULTS, PROVIDER_MODEL_MAPPINGS, PROVIDER_SEARCH_CONFIGS, getAllProviderPresets, getCodingPlanBaseUrl, getPresetById, getPresetRevision, getProviderSearchConfig, resolveFollowProviderModel } from './provider-presets/index.js';
18
+ export { LEGACY_UNKNOWN_PROVIDER_ID, fromLegacyWebSearchResponse, legacyErrorStringToSearchErrorCode, legacyProviderIdToSearchProviderId, searchErrorToLegacyWebSearchResponse, toLegacyWebSearchResponse } from './search-compat.js';
19
+ export { KnownSearchProviderId, OrchestratedSearchResponse, SearchAttempt, SearchAttemptEvent, SearchAttemptOutcome, SearchCompleteEvent, SearchContributionContext, SearchErrorCode, SearchErrorShape, SearchOptions, SearchPolicy, SearchProvider, SearchProviderCapabilities, SearchProviderContribution, SearchProviderDescriptor, SearchProviderDiagnostic, SearchProviderError, SearchProviderErrorInit, SearchProviderHealthStatus, SearchProviderId, SearchProviderSource, SearchRequest, SearchResponse, SearchResult, SearchRuntimeEvent, SearchRuntimeEventBase, SearchTimeRange, SearchTransportKind, SearchUrlReadResult, isKnownSearchProviderId, isSearchProviderError, toSearchErrorShape } from './search-types.js';
17
20
  export { SUBSCRIPTION_MODEL_CATALOG, subscriptionProviderHasCatalog } from './subscription-model-catalog.js';
18
21
  export { CANNOT_DISABLE_THINKING_PATTERNS, DEFAULT_MAX_TOKENS, EFFORT_RATIO, LEGACY_THINKING_TOKEN_LIMITS, REASONING_MODEL_PATTERNS, THINKING_TOKEN_MAP, buildAnthropicThinking, buildGeminiThinkingConfig, buildQwenThinkingConfig, calculateThinkingBudget, canDisableThinking, findLegacyTokenLimit, findTokenLimit, getClaudeMaxTokens, getOpenAIReasoningEffort, isReasoningModel } from './thinking-config.js';
19
22
  export { ApiKeyUsageRow, MessageUsageRow, ModelUsageRow, SessionCacheStats, UsageCacheKeySource, UsageDateRange, UsageEventInput, UsageEventRecord, UsageQueryParams, UsageTimeBucket, UsageTimeSeriesBucket, UsageTotals } from './usage-stats-types.js';
package/dist/index.js CHANGED
@@ -293,6 +293,40 @@ function healthHttpStatus(status) {
293
293
  return status === "ok" ? 200 : 503;
294
294
  }
295
295
 
296
+ // src/image-generation-types.ts
297
+ var IMAGE_GENERATION_ERROR_CODES = [
298
+ "invalid_image_request",
299
+ "unsupported_model",
300
+ "unsupported_capability",
301
+ "invalid_api_key",
302
+ "upstream_auth_required",
303
+ "image_reference_not_found",
304
+ "image_reference_expired",
305
+ "image_too_large",
306
+ "unsupported_image_type",
307
+ "moderation_blocked",
308
+ "upstream_rate_limited",
309
+ "subscription_usage_limit_reached",
310
+ "image_queue_full",
311
+ "image_queue_timeout",
312
+ "request_cancelled",
313
+ "upstream_protocol_changed",
314
+ "image_generation_failed",
315
+ "image_generation_timeout"
316
+ ];
317
+ var IMAGE_CAPABILITY_UNAVAILABLE_REASONS = [
318
+ "missing_evidence",
319
+ "stale_evidence",
320
+ "contradictory_evidence",
321
+ "adapter_unavailable",
322
+ "account_unverified",
323
+ "protocol_unverified",
324
+ "no_common_models",
325
+ "no_common_output_formats",
326
+ "no_common_quality_levels",
327
+ "no_common_moderation_modes"
328
+ ];
329
+
296
330
  // src/mcp-types.ts
297
331
  var DEFAULT_MCP_SESSION_CONFIG = {
298
332
  mode: "auto",
@@ -2467,6 +2501,168 @@ function getProviderSearchConfig(presetId) {
2467
2501
  return PROVIDER_SEARCH_CONFIGS[presetId];
2468
2502
  }
2469
2503
 
2504
+ // src/search-compat.ts
2505
+ var LEGACY_UNKNOWN_PROVIDER_ID = "legacy:unknown";
2506
+ var DEFAULT_LEGACY_ERROR_CODE = "upstream_unavailable";
2507
+ function legacyProviderIdToSearchProviderId(id) {
2508
+ return id;
2509
+ }
2510
+ var LEGACY_ERROR_RULES = [
2511
+ // Runtime facts first.
2512
+ { pattern: /abort|cancell?ed|cancell?ing/i, code: "cancelled" },
2513
+ { pattern: /timed ?out|timeout/i, code: "timeout" },
2514
+ // WebSearchService.search()
2515
+ { pattern: /not configured/i, code: "config_missing" },
2516
+ { pattern: /is disabled/i, code: "policy_denied" },
2517
+ { pattern: /not implemented/i, code: "upstream_unavailable" },
2518
+ // HttpOnlyWebSearchService / WebSearchOrchestrator transport availability
2519
+ { pattern: /unavailable in this host/i, code: "upstream_unavailable" },
2520
+ { pattern: /HTTP search transport is unavailable/i, code: "upstream_unavailable" },
2521
+ // Exhausted-candidate summaries (both fallback implementations)
2522
+ { pattern: /No eligible web search provider returned usable results/i, code: "upstream_unavailable" },
2523
+ { pattern: /No keyless HTTP search provider returned usable results/i, code: "upstream_unavailable" },
2524
+ // Anti-bot / anti-decoy refusals — the page came back, it just cannot be trusted.
2525
+ { pattern: /bot-challenge/i, code: "upstream_unavailable" },
2526
+ {
2527
+ pattern: /returned an untrusted search result page|refusing to return possible bot-decoy content/i,
2528
+ code: "upstream_unavailable"
2529
+ },
2530
+ { pattern: /JavaScript-only search shell without result entries/i, code: "upstream_unavailable" },
2531
+ // Response the provider did return, but which could not be turned into results.
2532
+ { pattern: /response contained no result entries/i, code: "parse_failed" },
2533
+ { pattern: /returned an invalid response/i, code: "parse_failed" },
2534
+ { pattern: /returned an invalid result list/i, code: "parse_failed" },
2535
+ { pattern: /returned only duplicate results/i, code: "parse_failed" },
2536
+ { pattern: /returned no usable direct results/i, code: "parse_failed" },
2537
+ { pattern: /returned no results/i, code: "parse_failed" }
2538
+ ];
2539
+ function legacyErrorStringToSearchErrorCode(message) {
2540
+ for (const rule of LEGACY_ERROR_RULES) {
2541
+ if (rule.pattern.test(message)) return rule.code;
2542
+ }
2543
+ return DEFAULT_LEGACY_ERROR_CODE;
2544
+ }
2545
+ function providerIdFromLegacyErrorString(message) {
2546
+ const match = /^Provider\s+(?!is\b|returned\b|request\b)(\S+)\s+(?:is|not)\b/i.exec(message);
2547
+ return match?.[1];
2548
+ }
2549
+ function toSearchResult(result) {
2550
+ return { title: result.title, url: result.url, content: result.content };
2551
+ }
2552
+ function fromLegacyWebSearchResponse(resp) {
2553
+ if (resp.success) {
2554
+ return {
2555
+ ok: true,
2556
+ response: {
2557
+ query: resp.query,
2558
+ providerId: resp.provider ?? LEGACY_UNKNOWN_PROVIDER_ID,
2559
+ results: resp.results.map(toSearchResult)
2560
+ }
2561
+ };
2562
+ }
2563
+ const message = resp.error ?? "Unknown error";
2564
+ const error = {
2565
+ code: legacyErrorStringToSearchErrorCode(message),
2566
+ message
2567
+ };
2568
+ const providerId = resp.provider ?? providerIdFromLegacyErrorString(message);
2569
+ if (providerId !== void 0) error.providerId = providerId;
2570
+ return { ok: false, error };
2571
+ }
2572
+ function toLegacyWebSearchResponse(response) {
2573
+ return {
2574
+ success: true,
2575
+ query: response.query,
2576
+ results: response.results.map((result) => ({
2577
+ title: result.title,
2578
+ content: result.content,
2579
+ url: result.url
2580
+ })),
2581
+ provider: response.providerId
2582
+ };
2583
+ }
2584
+ function searchErrorToLegacyWebSearchResponse(query, error) {
2585
+ const response = {
2586
+ success: false,
2587
+ query,
2588
+ results: [],
2589
+ error: error.message.trim().length > 0 ? error.message : error.code
2590
+ };
2591
+ if (error.providerId !== void 0) {
2592
+ response.provider = error.providerId;
2593
+ }
2594
+ return response;
2595
+ }
2596
+
2597
+ // src/search-types.ts
2598
+ var KNOWN_SEARCH_PROVIDER_IDS = /* @__PURE__ */ new Set([
2599
+ "http-bing",
2600
+ "http-duckduckgo",
2601
+ "tavily",
2602
+ "jina",
2603
+ "searxng",
2604
+ "zhipu",
2605
+ "z.ai"
2606
+ ]);
2607
+ function isKnownSearchProviderId(id) {
2608
+ return KNOWN_SEARCH_PROVIDER_IDS.has(id);
2609
+ }
2610
+ var SEARCH_ERROR_CODES = /* @__PURE__ */ new Set([
2611
+ "config_missing",
2612
+ "auth_failed",
2613
+ "rate_limited",
2614
+ "timeout",
2615
+ "upstream_unavailable",
2616
+ "parse_failed",
2617
+ "cancelled",
2618
+ "policy_denied"
2619
+ ]);
2620
+ var DEFAULT_SEARCH_ERROR_CODE = "upstream_unavailable";
2621
+ var SearchProviderError = class _SearchProviderError extends Error {
2622
+ /** Stable taxonomy code. */
2623
+ code;
2624
+ /** The provider that failed, when known. */
2625
+ providerId;
2626
+ /** Whether retrying the same provider could plausibly succeed. */
2627
+ retryable;
2628
+ /** Pre-sanitized string-valued context. */
2629
+ details;
2630
+ constructor(code, message, init = {}) {
2631
+ super(message, init.cause === void 0 ? void 0 : { cause: init.cause });
2632
+ this.name = "SearchProviderError";
2633
+ this.code = code;
2634
+ this.providerId = init.providerId;
2635
+ this.retryable = init.retryable;
2636
+ this.details = init.details;
2637
+ Object.setPrototypeOf(this, _SearchProviderError.prototype);
2638
+ }
2639
+ /** This error as its serializable {@link SearchErrorShape}. */
2640
+ toShape() {
2641
+ return toSearchErrorShape(this);
2642
+ }
2643
+ };
2644
+ function isSearchProviderError(value) {
2645
+ if (value instanceof SearchProviderError) return true;
2646
+ if (!(value instanceof Error)) return false;
2647
+ const code = value.code;
2648
+ return typeof code === "string" && SEARCH_ERROR_CODES.has(code);
2649
+ }
2650
+ function toSearchErrorShape(value) {
2651
+ if (isSearchProviderError(value)) {
2652
+ const shape = { code: value.code, message: value.message };
2653
+ if (value.providerId !== void 0) shape.providerId = value.providerId;
2654
+ if (value.retryable !== void 0) shape.retryable = value.retryable;
2655
+ if (value.details !== void 0) shape.details = value.details;
2656
+ return shape;
2657
+ }
2658
+ return { code: DEFAULT_SEARCH_ERROR_CODE, message: describeUnknownError(value) };
2659
+ }
2660
+ function describeUnknownError(value) {
2661
+ if (typeof value === "string") return value;
2662
+ if (value instanceof Error && value.message) return value.message;
2663
+ return "Unknown error";
2664
+ }
2665
+
2470
2666
  // src/subscription-model-catalog.ts
2471
2667
  var SUBSCRIPTION_MODEL_CATALOG = {
2472
2668
  claude: ["claude-haiku-4-5", "claude-sonnet-5", "claude-opus-5", "claude-fable-5"],
@@ -2732,8 +2928,11 @@ export {
2732
2928
  DEFAULT_VOUCHER_CONFIG,
2733
2929
  EFFORT_RATIO,
2734
2930
  EXTENDED_CONTEXT_CAPABLE_MODELS,
2931
+ IMAGE_CAPABILITY_UNAVAILABLE_REASONS,
2932
+ IMAGE_GENERATION_ERROR_CODES,
2735
2933
  KNOWN_MODELS,
2736
2934
  LEGACY_THINKING_TOKEN_LIMITS,
2935
+ LEGACY_UNKNOWN_PROVIDER_ID,
2737
2936
  LLM_PROVIDER_PRESETS,
2738
2937
  MAX_CONCURRENCY_DEFAULTS,
2739
2938
  MODEL_ALIASES,
@@ -2741,6 +2940,7 @@ export {
2741
2940
  PROVIDER_SEARCH_CONFIGS,
2742
2941
  REASONING_MODEL_PATTERNS,
2743
2942
  SUBSCRIPTION_MODEL_CATALOG,
2943
+ SearchProviderError,
2744
2944
  THINKING_TOKEN_MAP,
2745
2945
  WEBHOOK_DESTINATION_TYPES,
2746
2946
  WEBHOOK_EVENT_KINDS,
@@ -2752,6 +2952,7 @@ export {
2752
2952
  canDisableThinking,
2753
2953
  findLegacyTokenLimit,
2754
2954
  findTokenLimit,
2955
+ fromLegacyWebSearchResponse,
2755
2956
  getAllProviderPresets,
2756
2957
  getClaudeMaxTokens,
2757
2958
  getCodingPlanBaseUrl,
@@ -2762,14 +2963,21 @@ export {
2762
2963
  healthHttpStatus,
2763
2964
  isApiProvider,
2764
2965
  isExtendedContextCapable,
2966
+ isKnownSearchProviderId,
2765
2967
  isLocalProvider,
2766
2968
  isReasoningModel,
2969
+ isSearchProviderError,
2767
2970
  legacyCliBackendToSubscriptionProvider,
2971
+ legacyErrorStringToSearchErrorCode,
2972
+ legacyProviderIdToSearchProviderId,
2768
2973
  lookupCanonicalCapabilities,
2769
2974
  normalizeModelId,
2770
2975
  resolveFollowProviderModel,
2771
2976
  resolveModelCapabilities,
2772
2977
  resolveProviderEndpoint,
2978
+ searchErrorToLegacyWebSearchResponse,
2773
2979
  subscriptionProviderHasCatalog,
2774
- subscriptionTargetForSession
2980
+ subscriptionTargetForSession,
2981
+ toLegacyWebSearchResponse,
2982
+ toSearchErrorShape
2775
2983
  };