@sentropic/llm-mesh 0.28.0 → 0.29.0

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 (164) hide show
  1. package/README.md +110 -0
  2. package/dist/capabilities.d.ts +3 -0
  3. package/dist/capabilities.d.ts.map +1 -1
  4. package/dist/capabilities.js.map +1 -1
  5. package/dist/catalog.d.ts +134 -1
  6. package/dist/catalog.d.ts.map +1 -1
  7. package/dist/catalog.js +15 -0
  8. package/dist/catalog.js.map +1 -1
  9. package/dist/decision/adapter-result.d.ts +6 -0
  10. package/dist/decision/adapter-result.d.ts.map +1 -0
  11. package/dist/decision/adapter-result.js +160 -0
  12. package/dist/decision/adapter-result.js.map +1 -0
  13. package/dist/decision/adapter.d.ts +58 -0
  14. package/dist/decision/adapter.d.ts.map +1 -0
  15. package/dist/decision/adapter.js +70 -0
  16. package/dist/decision/adapter.js.map +1 -0
  17. package/dist/decision/admission.d.ts +23 -0
  18. package/dist/decision/admission.d.ts.map +1 -0
  19. package/dist/decision/admission.js +115 -0
  20. package/dist/decision/admission.js.map +1 -0
  21. package/dist/decision/budget.d.ts +60 -0
  22. package/dist/decision/budget.d.ts.map +1 -0
  23. package/dist/decision/budget.js +2 -0
  24. package/dist/decision/budget.js.map +1 -0
  25. package/dist/decision/client.d.ts +23 -0
  26. package/dist/decision/client.d.ts.map +1 -0
  27. package/dist/decision/client.js +836 -0
  28. package/dist/decision/client.js.map +1 -0
  29. package/dist/decision/criterion.d.ts +5 -0
  30. package/dist/decision/criterion.d.ts.map +1 -0
  31. package/dist/decision/criterion.js +54 -0
  32. package/dist/decision/criterion.js.map +1 -0
  33. package/dist/decision/deadline.d.ts +8 -0
  34. package/dist/decision/deadline.d.ts.map +1 -0
  35. package/dist/decision/deadline.js +56 -0
  36. package/dist/decision/deadline.js.map +1 -0
  37. package/dist/decision/descriptor-validation.d.ts +5 -0
  38. package/dist/decision/descriptor-validation.d.ts.map +1 -0
  39. package/dist/decision/descriptor-validation.js +99 -0
  40. package/dist/decision/descriptor-validation.js.map +1 -0
  41. package/dist/decision/descriptor.d.ts +81 -0
  42. package/dist/decision/descriptor.d.ts.map +1 -0
  43. package/dist/decision/descriptor.js +36 -0
  44. package/dist/decision/descriptor.js.map +1 -0
  45. package/dist/decision/dispatch.d.ts +11 -0
  46. package/dist/decision/dispatch.d.ts.map +1 -0
  47. package/dist/decision/dispatch.js +59 -0
  48. package/dist/decision/dispatch.js.map +1 -0
  49. package/dist/decision/errors.d.ts +43 -0
  50. package/dist/decision/errors.d.ts.map +1 -0
  51. package/dist/decision/errors.js +47 -0
  52. package/dist/decision/errors.js.map +1 -0
  53. package/dist/decision/execution.d.ts +31 -0
  54. package/dist/decision/execution.d.ts.map +1 -0
  55. package/dist/decision/execution.js +79 -0
  56. package/dist/decision/execution.js.map +1 -0
  57. package/dist/decision/host-options.d.ts +26 -0
  58. package/dist/decision/host-options.d.ts.map +1 -0
  59. package/dist/decision/host-options.js +2 -0
  60. package/dist/decision/host-options.js.map +1 -0
  61. package/dist/decision/host.d.ts +19 -0
  62. package/dist/decision/host.d.ts.map +1 -0
  63. package/dist/decision/host.js +9 -0
  64. package/dist/decision/host.js.map +1 -0
  65. package/dist/decision/index.d.ts +12 -0
  66. package/dist/decision/index.d.ts.map +1 -0
  67. package/dist/decision/index.js +3 -0
  68. package/dist/decision/index.js.map +1 -0
  69. package/dist/decision/jev-codec.d.ts +30 -0
  70. package/dist/decision/jev-codec.d.ts.map +1 -0
  71. package/dist/decision/jev-codec.js +51 -0
  72. package/dist/decision/jev-codec.js.map +1 -0
  73. package/dist/decision/jev-response.d.ts +7 -0
  74. package/dist/decision/jev-response.d.ts.map +1 -0
  75. package/dist/decision/jev-response.js +46 -0
  76. package/dist/decision/jev-response.js.map +1 -0
  77. package/dist/decision/jev-verdict.d.ts +14 -0
  78. package/dist/decision/jev-verdict.d.ts.map +1 -0
  79. package/dist/decision/jev-verdict.js +76 -0
  80. package/dist/decision/jev-verdict.js.map +1 -0
  81. package/dist/decision/openai-adapter.d.ts +46 -0
  82. package/dist/decision/openai-adapter.d.ts.map +1 -0
  83. package/dist/decision/openai-adapter.js +66 -0
  84. package/dist/decision/openai-adapter.js.map +1 -0
  85. package/dist/decision/openai-codec.d.ts +7 -0
  86. package/dist/decision/openai-codec.d.ts.map +1 -0
  87. package/dist/decision/openai-codec.js +60 -0
  88. package/dist/decision/openai-codec.js.map +1 -0
  89. package/dist/decision/openai-descriptor.d.ts +7 -0
  90. package/dist/decision/openai-descriptor.d.ts.map +1 -0
  91. package/dist/decision/openai-descriptor.js +31 -0
  92. package/dist/decision/openai-descriptor.js.map +1 -0
  93. package/dist/decision/openai-request.d.ts +15 -0
  94. package/dist/decision/openai-request.d.ts.map +1 -0
  95. package/dist/decision/openai-request.js +33 -0
  96. package/dist/decision/openai-request.js.map +1 -0
  97. package/dist/decision/openai-verdict.d.ts +9 -0
  98. package/dist/decision/openai-verdict.d.ts.map +1 -0
  99. package/dist/decision/openai-verdict.js +76 -0
  100. package/dist/decision/openai-verdict.js.map +1 -0
  101. package/dist/decision/policy.d.ts +11 -0
  102. package/dist/decision/policy.d.ts.map +1 -0
  103. package/dist/decision/policy.js +34 -0
  104. package/dist/decision/policy.js.map +1 -0
  105. package/dist/decision/pricing.d.ts +40 -0
  106. package/dist/decision/pricing.d.ts.map +1 -0
  107. package/dist/decision/pricing.js +65 -0
  108. package/dist/decision/pricing.js.map +1 -0
  109. package/dist/decision/raw.d.ts +7 -0
  110. package/dist/decision/raw.d.ts.map +1 -0
  111. package/dist/decision/raw.js +53 -0
  112. package/dist/decision/raw.js.map +1 -0
  113. package/dist/decision/receipt.d.ts +120 -0
  114. package/dist/decision/receipt.d.ts.map +1 -0
  115. package/dist/decision/receipt.js +58 -0
  116. package/dist/decision/receipt.js.map +1 -0
  117. package/dist/decision/request-policy.d.ts +3 -0
  118. package/dist/decision/request-policy.d.ts.map +1 -0
  119. package/dist/decision/request-policy.js +19 -0
  120. package/dist/decision/request-policy.js.map +1 -0
  121. package/dist/decision/request.d.ts +85 -0
  122. package/dist/decision/request.d.ts.map +1 -0
  123. package/dist/decision/request.js +49 -0
  124. package/dist/decision/request.js.map +1 -0
  125. package/dist/decision/service.d.ts +39 -0
  126. package/dist/decision/service.d.ts.map +1 -0
  127. package/dist/decision/service.js +139 -0
  128. package/dist/decision/service.js.map +1 -0
  129. package/dist/decision/structured.d.ts +125 -0
  130. package/dist/decision/structured.d.ts.map +1 -0
  131. package/dist/decision/structured.js +250 -0
  132. package/dist/decision/structured.js.map +1 -0
  133. package/dist/decision/validate-result.d.ts +8 -0
  134. package/dist/decision/validate-result.d.ts.map +1 -0
  135. package/dist/decision/validate-result.js +91 -0
  136. package/dist/decision/validate-result.js.map +1 -0
  137. package/dist/decision/validation-context.d.ts +55 -0
  138. package/dist/decision/validation-context.d.ts.map +1 -0
  139. package/dist/decision/validation-context.js +134 -0
  140. package/dist/decision/validation-context.js.map +1 -0
  141. package/dist/decision/validation.d.ts +19 -0
  142. package/dist/decision/validation.d.ts.map +1 -0
  143. package/dist/decision/validation.js +86 -0
  144. package/dist/decision/validation.js.map +1 -0
  145. package/dist/decision/verdict.d.ts +81 -0
  146. package/dist/decision/verdict.d.ts.map +1 -0
  147. package/dist/decision/verdict.js +140 -0
  148. package/dist/decision/verdict.js.map +1 -0
  149. package/dist/providers.d.ts +4 -3
  150. package/dist/providers.d.ts.map +1 -1
  151. package/dist/providers.js +2 -1
  152. package/dist/providers.js.map +1 -1
  153. package/dist/registry.d.ts +6 -0
  154. package/dist/registry.d.ts.map +1 -1
  155. package/dist/registry.js.map +1 -1
  156. package/dist/transport/jev.d.ts +23 -0
  157. package/dist/transport/jev.d.ts.map +1 -0
  158. package/dist/transport/jev.js +107 -0
  159. package/dist/transport/jev.js.map +1 -0
  160. package/dist/transport/openai-decisions.d.ts +23 -0
  161. package/dist/transport/openai-decisions.d.ts.map +1 -0
  162. package/dist/transport/openai-decisions.js +107 -0
  163. package/dist/transport/openai-decisions.js.map +1 -0
  164. package/package.json +13 -1
@@ -0,0 +1,140 @@
1
+ import { isDecisionRule, scoreDirections } from './criterion.js';
2
+ import { has, hasOnlyKeys, isRecord, isText, snapshotBoundedJson } from './validation.js';
3
+ /** Preserve native values and direction; normalization is relative position, not accuracy. */
4
+ export function parseDecisionScore(candidate) {
5
+ const snapshot = snapshotBoundedJson(candidate);
6
+ if (!snapshot.ok)
7
+ return null;
8
+ const value = snapshot.value;
9
+ if (!isRecord(value) || !hasOnlyKeys(value, ['value', 'scale', 'meaning', 'normalized'])
10
+ || typeof value.value !== 'number' || !Number.isFinite(value.value) || !isRecord(value.scale)
11
+ || !['rubric-grade', 'probability-true', 'support', 'provider-defined'].some((v) => v === value.meaning))
12
+ return null;
13
+ const scale = value.scale;
14
+ let position;
15
+ if (scale.kind === 'unknown') {
16
+ if (!hasOnlyKeys(scale, ['kind', 'reason']) || scale.reason !== 'unknown (source-gap)' || has(value, 'normalized'))
17
+ return null;
18
+ }
19
+ else if (scale.kind === 'bounded') {
20
+ if (!hasOnlyKeys(scale, ['kind', 'min', 'max', 'direction'])
21
+ || typeof scale.min !== 'number' || typeof scale.max !== 'number'
22
+ || !Number.isFinite(scale.min) || !Number.isFinite(scale.max) || scale.max < scale.min
23
+ || value.value < scale.min || value.value > scale.max
24
+ || !scoreDirections.some((direction) => direction === scale.direction))
25
+ return null;
26
+ const span = scale.max - scale.min;
27
+ if (span > 0 && Number.isFinite(span))
28
+ position = (value.value - scale.min) / span;
29
+ }
30
+ else
31
+ return null;
32
+ if (has(value, 'normalized') && (!isRecord(value.normalized)
33
+ || !hasOnlyKeys(value.normalized, ['value', 'transform']) || position === undefined
34
+ || value.normalized.transform !== 'linear-min-max' || typeof value.normalized.value !== 'number'
35
+ || !Number.isFinite(value.normalized.value) || value.normalized.value !== position))
36
+ return null;
37
+ return { value: value.value, scale: { ...scale }, meaning: value.meaning,
38
+ ...(position === undefined ? {} : { normalized: { value: position, transform: 'linear-min-max' } }) };
39
+ }
40
+ /** A descriptor supplies the documented meaning; this never derives confidence from score. */
41
+ export function parseDecisionConfidence(candidate) {
42
+ const snapshot = snapshotBoundedJson(candidate);
43
+ if (!snapshot.ok)
44
+ return null;
45
+ const value = snapshot.value;
46
+ if (!isRecord(value)
47
+ || !hasOnlyKeys(value, ['value', 'min', 'max', 'meaning', 'meaningRef', 'origin'])
48
+ || typeof value.value !== 'number' || typeof value.min !== 'number' || typeof value.max !== 'number'
49
+ || !Number.isFinite(value.value) || !Number.isFinite(value.min) || !Number.isFinite(value.max)
50
+ || value.max < value.min || value.value < value.min || value.value > value.max
51
+ || (value.meaning !== 'provider-confidence' && value.meaning !== 'decision-confidence')
52
+ || !isText(value.meaningRef) || value.origin !== 'provider')
53
+ return null;
54
+ return { value: value.value, min: value.min, max: value.max, meaning: value.meaning,
55
+ meaningRef: value.meaningRef, origin: 'provider' };
56
+ }
57
+ /** Map an exact, descriptor-owned native key set, preserving order and probabilities. */
58
+ export function mapDecisionDistribution(candidate, declared) {
59
+ const snapshot = snapshotBoundedJson(candidate);
60
+ const outcomeSnapshot = snapshotBoundedJson(declared);
61
+ if (!snapshot.ok || !outcomeSnapshot.ok || !Array.isArray(outcomeSnapshot.value))
62
+ return null;
63
+ const probabilities = snapshot.value;
64
+ const outcomes = outcomeSnapshot.value;
65
+ if (!isRecord(probabilities) || !outcomes.length || Object.keys(probabilities).length !== outcomes.length)
66
+ return null;
67
+ let sum = 0;
68
+ const outcomeIds = new Set();
69
+ const nativeIds = new Set();
70
+ const entries = [];
71
+ for (const item of outcomes) {
72
+ if (!isRecord(item) || !hasOnlyKeys(item, ['outcome', 'nativeOutcome']))
73
+ return null;
74
+ const { outcome, nativeOutcome } = item;
75
+ if (!isText(outcome) || !isText(nativeOutcome) || outcomeIds.has(outcome) || nativeIds.has(nativeOutcome))
76
+ return null;
77
+ const probability = probabilities[nativeOutcome];
78
+ if (!has(probabilities, nativeOutcome)
79
+ || typeof probability !== 'number' || !Number.isFinite(probability)
80
+ || probability < 0 || probability > 1)
81
+ return null;
82
+ sum += probability;
83
+ outcomeIds.add(outcome);
84
+ nativeIds.add(nativeOutcome);
85
+ entries.push({ outcome, nativeOutcome, probability });
86
+ }
87
+ if (Math.abs(sum - 1) > 1e-4)
88
+ return null;
89
+ return entries;
90
+ }
91
+ export function deriveDecision(input) {
92
+ const { rule, score, label, providerDecision } = input;
93
+ if (rule !== undefined && !isDecisionRule(rule))
94
+ return { ok: false, code: 'REQUEST_INVALID' };
95
+ if (providerDecision !== null) {
96
+ if (typeof providerDecision !== 'boolean')
97
+ return { ok: false, code: 'VERDICT_INVALID' };
98
+ if (rule && rule.kind !== 'provider')
99
+ return { ok: false, code: 'CAPABILITY_UNSUPPORTED' };
100
+ return { ok: true, decision: { pass: providerDecision, origin: 'provider' } };
101
+ }
102
+ if (!rule)
103
+ return { ok: true, decision: null };
104
+ if (rule.kind === 'provider')
105
+ return { ok: false, code: 'CAPABILITY_UNSUPPORTED' };
106
+ if (rule.kind === 'threshold') {
107
+ if (score === null)
108
+ return { ok: false, code: 'CAPABILITY_UNSUPPORTED' };
109
+ const checked = parseDecisionScore(score);
110
+ if (checked === null)
111
+ return { ok: false, code: 'VERDICT_INVALID' };
112
+ if (checked.scale.kind === 'unknown')
113
+ return { ok: false, code: 'CAPABILITY_UNSUPPORTED' };
114
+ if (rule.value < checked.scale.min || rule.value > checked.scale.max)
115
+ return { ok: false, code: 'REQUEST_INVALID' };
116
+ return { ok: true, decision: { pass: rule.op === 'gte' ? checked.value >= rule.value : checked.value <= rule.value,
117
+ origin: 'threshold', rule: { ...rule } } };
118
+ }
119
+ const declared = input.declaredLabels ?? [];
120
+ if (label === null || !declared.length)
121
+ return { ok: false, code: 'CAPABILITY_UNSUPPORTED' };
122
+ if (!declared.includes(label))
123
+ return { ok: false, code: 'VERDICT_INVALID' };
124
+ if (!rule.passing.every((v) => declared.includes(v)))
125
+ return { ok: false, code: 'REQUEST_INVALID' };
126
+ return { ok: true, decision: { pass: rule.passing.includes(label), origin: 'labels',
127
+ rule: { kind: 'labels', passing: [...rule.passing] } } };
128
+ }
129
+ /** Primary values must be meaningful; false and zero are valid evidence. */
130
+ export function hasDecisionVerdictValue(value) {
131
+ if (value.score !== null && parseDecisionScore(value.score) === null)
132
+ return false;
133
+ if (value.decision !== null && (!isRecord(value.decision) || typeof value.decision.pass !== 'boolean'
134
+ || !['provider', 'threshold', 'labels'].includes(value.decision.origin)))
135
+ return false;
136
+ if (value.label !== null && (!isRecord(value.label) || !isText(value.label.value) || value.label.origin !== 'provider'))
137
+ return false;
138
+ return value.score !== null || value.decision !== null || value.label !== null;
139
+ }
140
+ //# sourceMappingURL=verdict.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verdict.js","sourceRoot":"","sources":["../../src/decision/verdict.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- export declare const providerIds: readonly ["openai", "gemini", "anthropic", "mistral", "cohere", "gcp", "local", "muse"];
1
+ export declare const providerIds: readonly ["openai", "gemini", "anthropic", "mistral", "cohere", "gcp", "local", "muse", "typesafe"];
2
2
  export type ProviderId = (typeof providerIds)[number];
3
3
  export type ProviderStatus = 'ready' | 'planned';
4
- export type ProviderFamily = 'openai' | 'google' | 'anthropic' | 'mistral' | 'cohere' | 'meta';
4
+ export type ProviderFamily = 'openai' | 'google' | 'anthropic' | 'mistral' | 'cohere' | 'meta' | 'typesafe';
5
5
  export type ReasoningTier = 'none' | 'light' | 'standard' | 'advanced';
6
6
  export type ModelTaskHint = 'chat' | 'structured' | 'summary' | 'doc';
7
7
  export declare const knownModelIds: readonly ["gpt-5.6-sol", "gpt-6-sol", "gpt-6.1-sol", "gpt-6-astra", "gpt-5.6-terra", "gpt-5.6-luna", "gpt-6-luna", "gpt-5.5", "gpt-5.4-nano", "gpt-4.1-nano", "gemini-3.7-flash", "gemini-3.8-flash", "gemini-4-argon", "gemini-3.5-flash", "gemini-3.1-flash-lite", "claude-sonnet-5", "claude-opus-5", "claude-opus-4-8", "claude-fable-5", "claude-fable-5-1", "mistral-small-2603", "magistral-medium-2509", "mistral-large-4", "mistral-medium-3.5", "zai-glm-5-3", "command-a-03-2025", "command-a-reasoning-08-2025", "google/gemini-3.5-flash@gcp", "google/gemini-3.1-flash-lite@gcp", "anthropic/claude-sonnet-4-6@gcp", "anthropic/claude-opus-4-6@gcp", "laneformer-2b-it", "muse-spark-1.3", "muse-spark-1.3-contributor", "muse-wonder-1.0", "muse-wonder-full-1.0"];
@@ -17,6 +17,7 @@ export declare const knownModelIdsByProvider: {
17
17
  readonly gcp: readonly ["google/gemini-3.5-flash@gcp", "google/gemini-3.1-flash-lite@gcp", "anthropic/claude-sonnet-4-6@gcp", "anthropic/claude-opus-4-6@gcp"];
18
18
  readonly local: readonly ["laneformer-2b-it"];
19
19
  readonly muse: readonly ["muse-spark-1.3", "muse-spark-1.3-contributor", "muse-wonder-1.0", "muse-wonder-full-1.0"];
20
+ readonly typesafe: readonly [];
20
21
  };
21
22
  export interface ModelReference {
22
23
  providerId: ProviderId;
@@ -25,6 +26,6 @@ export interface ModelReference {
25
26
  export declare const toQualifiedModelId: (model: ModelReference) => QualifiedModelId;
26
27
  export declare const antigravityModelFleet: readonly ["claude-sonnet-4-6", "claude-opus-4-6-thinking", "gemini-3-pro-high", "gemini-3-pro-low", "gpt-oss-120b-medium"];
27
28
  export type AntigravityFleetModelId = (typeof antigravityModelFleet)[number];
28
- export declare const isProviderId: (value: string) => value is "openai" | "gemini" | "anthropic" | "mistral" | "cohere" | "gcp" | "local" | "muse";
29
+ export declare const isProviderId: (value: string) => value is "openai" | "gemini" | "anthropic" | "mistral" | "cohere" | "gcp" | "local" | "muse" | "typesafe";
29
30
  export declare const isKnownModelId: (value: string) => value is "gpt-5.6-sol" | "gpt-6-sol" | "gpt-6.1-sol" | "gpt-6-astra" | "gpt-5.6-terra" | "gpt-5.6-luna" | "gpt-6-luna" | "gpt-5.5" | "gpt-5.4-nano" | "gpt-4.1-nano" | "gemini-3.7-flash" | "gemini-3.8-flash" | "gemini-4-argon" | "gemini-3.5-flash" | "gemini-3.1-flash-lite" | "claude-sonnet-5" | "claude-opus-5" | "claude-opus-4-8" | "claude-fable-5" | "claude-fable-5-1" | "mistral-small-2603" | "magistral-medium-2509" | "mistral-large-4" | "mistral-medium-3.5" | "zai-glm-5-3" | "command-a-03-2025" | "command-a-reasoning-08-2025" | "google/gemini-3.5-flash@gcp" | "google/gemini-3.1-flash-lite@gcp" | "anthropic/claude-sonnet-4-6@gcp" | "anthropic/claude-opus-4-6@gcp" | "laneformer-2b-it" | "muse-spark-1.3" | "muse-spark-1.3-contributor" | "muse-wonder-1.0" | "muse-wonder-full-1.0";
30
31
  //# sourceMappingURL=providers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,yFAA0F,CAAC;AAEnH,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,CAAC;AAEjD,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE/F,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC;AAEvE,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,YAAY,GAAG,SAAS,GAAG,KAAK,CAAC;AAEtE,eAAO,MAAM,aAAa,ovBAiEhB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAEnD,MAAM,MAAM,gBAAgB,GAAG,GAAG,UAAU,IAAI,MAAM,EAAE,CAAC;AAEzD,eAAO,MAAM,uBAAuB;;;;;;;;;CAoB4B,CAAC;AAEjE,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,kBAAkB,UAAW,cAAc,KAAG,gBAE1D,CAAC;AAUF,eAAO,MAAM,qBAAqB,4HAMxB,CAAC;AAEX,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7E,eAAO,MAAM,YAAY,UAAW,MAAM,iGAEzC,CAAC;AAEF,eAAO,MAAM,cAAc,UAAW,MAAM,wxBAE3C,CAAC"}
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,qGAAsG,CAAC;AAE/H,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,CAAC;AAEjD,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAE5G,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC;AAEvE,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,YAAY,GAAG,SAAS,GAAG,KAAK,CAAC;AAEtE,eAAO,MAAM,aAAa,ovBAiEhB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAEnD,MAAM,MAAM,gBAAgB,GAAG,GAAG,UAAU,IAAI,MAAM,EAAE,CAAC;AAEzD,eAAO,MAAM,uBAAuB;;;;;;;;;;CAqB4B,CAAC;AAEjE,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,kBAAkB,UAAW,cAAc,KAAG,gBAE1D,CAAC;AAUF,eAAO,MAAM,qBAAqB,4HAMxB,CAAC;AAEX,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7E,eAAO,MAAM,YAAY,UAAW,MAAM,8GAEzC,CAAC;AAEF,eAAO,MAAM,cAAc,UAAW,MAAM,wxBAE3C,CAAC"}
package/dist/providers.js CHANGED
@@ -1,4 +1,4 @@
1
- export const providerIds = ['openai', 'gemini', 'anthropic', 'mistral', 'cohere', 'gcp', 'local', 'muse'];
1
+ export const providerIds = ['openai', 'gemini', 'anthropic', 'mistral', 'cohere', 'gcp', 'local', 'muse', 'typesafe'];
2
2
  export const knownModelIds = [
3
3
  'gpt-5.6-sol',
4
4
  'gpt-6-sol',
@@ -85,6 +85,7 @@ export const knownModelIdsByProvider = {
85
85
  gcp: ['google/gemini-3.5-flash@gcp', 'google/gemini-3.1-flash-lite@gcp', 'anthropic/claude-sonnet-4-6@gcp', 'anthropic/claude-opus-4-6@gcp'],
86
86
  local: ['laneformer-2b-it'],
87
87
  muse: ['muse-spark-1.3', 'muse-spark-1.3-contributor', 'muse-wonder-1.0', 'muse-wonder-full-1.0'],
88
+ typesafe: [],
88
89
  };
89
90
  export const toQualifiedModelId = (model) => {
90
91
  return `${model.providerId}:${model.modelId}`;
@@ -1 +1 @@
1
- {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,8 @@ import type { GenerateRequest, GenerateResponse, StreamRequest, StreamResult } f
3
3
  import type { ModelProfile, ProviderDescriptor } from './catalog.js';
4
4
  import type { ProviderId } from './providers.js';
5
5
  import type { NormalizedProviderError } from './errors.js';
6
+ import type { EvaluatorRef, DecisionRequest } from './decision/request.js';
7
+ import type { DecisionAdapterResult } from './decision/adapter.js';
6
8
  export interface CredentialValidationResult {
7
9
  ok: boolean;
8
10
  message?: string;
@@ -14,6 +16,10 @@ export interface ProviderRuntimeContext {
14
16
  export interface ProviderAdapter {
15
17
  readonly provider: ProviderDescriptor;
16
18
  listModels(): readonly ModelProfile[];
19
+ listEvaluators?(): readonly EvaluatorRef[];
20
+ decision?(request: DecisionRequest, context?: ProviderRuntimeContext & {
21
+ signal?: AbortSignal;
22
+ }): Promise<DecisionAdapterResult>;
17
23
  generate(request: GenerateRequest, context?: ProviderRuntimeContext): Promise<GenerateResponse>;
18
24
  stream(request: StreamRequest, context?: ProviderRuntimeContext): Promise<StreamResult>;
19
25
  validateAuth(source?: AuthInput): CredentialValidationResult;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACtG,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAE3D,MAAM,WAAW,0BAA0B;IACzC,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,UAAU,IAAI,SAAS,YAAY,EAAE,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAChG,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACxF,YAAY,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,0BAA0B,CAAC;IAC7D,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,uBAAuB,CAAC;CACzD;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,IAAI,SAAS,kBAAkB,EAAE,CAAC;IAC/C,UAAU,IAAI,SAAS,YAAY,EAAE,CAAC;IACtC,WAAW,CAAC,UAAU,EAAE,UAAU,GAAG,eAAe,GAAG,IAAI,CAAC;IAC5D,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,eAAe,CAAC;CAC1D;AAED,qBAAa,sBAAuB,YAAW,gBAAgB;IAC7D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2C;gBAEzD,QAAQ,EAAE,SAAS,eAAe,EAAE;IAIhD,aAAa,IAAI,SAAS,kBAAkB,EAAE;IAI9C,UAAU,IAAI,SAAS,YAAY,EAAE;IAIrC,WAAW,CAAC,UAAU,EAAE,UAAU,GAAG,eAAe,GAAG,IAAI;IAI3D,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,eAAe;CAOzD;AAED,eAAO,MAAM,sBAAsB,aACvB,SAAS,eAAe,EAAE,KACnC,gBAEF,CAAC"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACtG,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE,MAAM,WAAW,0BAA0B;IACzC,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,UAAU,IAAI,SAAS,YAAY,EAAE,CAAC;IACtC,cAAc,CAAC,IAAI,SAAS,YAAY,EAAE,CAAC;IAC3C,QAAQ,CAAC,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACjI,QAAQ,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAChG,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACxF,YAAY,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,0BAA0B,CAAC;IAC7D,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,uBAAuB,CAAC;CACzD;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,IAAI,SAAS,kBAAkB,EAAE,CAAC;IAC/C,UAAU,IAAI,SAAS,YAAY,EAAE,CAAC;IACtC,WAAW,CAAC,UAAU,EAAE,UAAU,GAAG,eAAe,GAAG,IAAI,CAAC;IAC5D,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,eAAe,CAAC;CAC1D;AAED,qBAAa,sBAAuB,YAAW,gBAAgB;IAC7D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2C;gBAEzD,QAAQ,EAAE,SAAS,eAAe,EAAE;IAIhD,aAAa,IAAI,SAAS,kBAAkB,EAAE;IAI9C,UAAU,IAAI,SAAS,YAAY,EAAE;IAIrC,WAAW,CAAC,UAAU,EAAE,UAAU,GAAG,eAAe,GAAG,IAAI;IAI3D,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,eAAe;CAOzD;AAED,eAAO,MAAM,sBAAsB,aACvB,SAAS,eAAe,EAAE,KACnC,gBAEF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAgCA,MAAM,OAAO,sBAAsB;IAChB,SAAS,CAA2C;IAErE,YAAY,QAAoC;QAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9F,CAAC;IAED,aAAa;QACX,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzE,CAAC;IAED,UAAU;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,WAAW,CAAC,UAAsB;QAChC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;IAChD,CAAC;IAED,eAAe,CAAC,UAAsB;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,QAAoC,EAClB,EAAE;IACpB,OAAO,IAAI,sBAAsB,CAAC,QAAQ,CAAC,CAAC;AAC9C,CAAC,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAoCA,MAAM,OAAO,sBAAsB;IAChB,SAAS,CAA2C;IAErE,YAAY,QAAoC;QAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9F,CAAC;IAED,aAAa;QACX,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzE,CAAC;IAED,UAAU;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,WAAW,CAAC,UAAsB;QAChC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;IAChD,CAAC;IAED,eAAe,CAAC,UAAsB;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,QAAoC,EAClB,EAAE;IACpB,OAAO,IAAI,sBAAsB,CAAC,QAAQ,CAAC,CAAC;AAC9C,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { DecisionError } from '../decision/errors.js';
2
+ export declare const JEV_ENDPOINT = "https://api.typesafe.ai/v1/systemone";
3
+ export type JevTransportResult = {
4
+ ok: true;
5
+ body: unknown;
6
+ providerRequestId?: string;
7
+ } | {
8
+ ok: false;
9
+ error: DecisionError;
10
+ };
11
+ export interface JevTransport {
12
+ send(bodyJson: string, token: string, options?: {
13
+ signal?: AbortSignal;
14
+ timeoutMs?: number;
15
+ }): Promise<JevTransportResult>;
16
+ }
17
+ export interface JevTransportOptions {
18
+ fetch: typeof globalThis.fetch;
19
+ maxResponseBytes?: number;
20
+ }
21
+ /** Trusted, explicitly injected fetch must have retries disabled. Construction performs no I/O. */
22
+ export declare function createJevTransport(options: JevTransportOptions): JevTransport;
23
+ //# sourceMappingURL=jev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jev.d.ts","sourceRoot":"","sources":["../../src/transport/jev.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAI3D,eAAO,MAAM,YAAY,yCAAyC,CAAC;AACnE,MAAM,MAAM,kBAAkB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAE,GACpF;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,CAAC;AACxC,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC5H;AACD,MAAM,WAAW,mBAAmB;IAAG,KAAK,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE;AAElG,mGAAmG;AACnG,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CA8E7E"}
@@ -0,0 +1,107 @@
1
+ import { createDecisionError } from '../decision/errors.js';
2
+ import { sanitizeJevId } from '../decision/jev-response.js';
3
+ import { DECISION_MAX_JSON_BYTES, snapshotBoundedJson } from '../decision/validation.js';
4
+ export const JEV_ENDPOINT = 'https://api.typesafe.ai/v1/systemone';
5
+ /** Trusted, explicitly injected fetch must have retries disabled. Construction performs no I/O. */
6
+ export function createJevTransport(options) {
7
+ const cap = options.maxResponseBytes ?? DECISION_MAX_JSON_BYTES;
8
+ if (!Number.isSafeInteger(cap) || cap < 1 || cap > DECISION_MAX_JSON_BYTES)
9
+ throw new Error('Invalid JEV response bound.');
10
+ return { async send(bodyJson, token, call = {}) {
11
+ if (!token.trim() || token !== token.trim() || /[\r\n]/.test(token))
12
+ return { ok: false, error: createDecisionError('CREDENTIAL_MISSING', 'preflight') };
13
+ if (call.signal?.aborted)
14
+ return { ok: false, error: createDecisionError('CANCELLED', 'dispatch') };
15
+ const timeoutMs = call.timeoutMs ?? 10_000;
16
+ if (!Number.isSafeInteger(timeoutMs) || timeoutMs < 1 || timeoutMs > 60_000) {
17
+ return { ok: false, error: createDecisionError('REQUEST_INVALID', 'preflight') };
18
+ }
19
+ const controller = new AbortController();
20
+ let timedOut = false;
21
+ let reader;
22
+ let onAbort;
23
+ const aborted = new Promise((resolve) => {
24
+ onAbort = () => {
25
+ void reader?.cancel().catch(() => { });
26
+ resolve({ ok: false, error: createDecisionError(timedOut ? 'TIMEOUT' : 'CANCELLED', 'dispatch') });
27
+ };
28
+ controller.signal.addEventListener('abort', onAbort, { once: true });
29
+ });
30
+ const cancel = () => controller.abort();
31
+ call.signal?.addEventListener('abort', cancel, { once: true });
32
+ const timer = setTimeout(() => { timedOut = true; controller.abort(); }, timeoutMs);
33
+ const run = async () => {
34
+ try {
35
+ const response = await options.fetch(JEV_ENDPOINT, { method: 'POST', redirect: 'manual',
36
+ headers: { authorization: `Bearer ${token}`, 'content-type': 'application/json', accept: 'application/json' },
37
+ body: bodyJson, signal: controller.signal });
38
+ if (controller.signal.aborted) {
39
+ void response.body?.cancel().catch(() => { });
40
+ return await aborted;
41
+ }
42
+ if (response.redirected || (response.status >= 300 && response.status < 400)) {
43
+ return { ok: false, error: createDecisionError('PROVIDER_REJECTED', 'dispatch') };
44
+ }
45
+ if (response.status !== 200) {
46
+ const code = response.status === 401 ? 'AUTHENTICATION_FAILED' : response.status === 422 ? 'PROVIDER_REJECTED'
47
+ : response.status === 429 ? 'RATE_LIMITED' : response.status === 529 ? 'PROVIDER_OVERLOADED'
48
+ : response.status >= 500 ? 'PROVIDER_UNAVAILABLE' : 'PROVIDER_REJECTED';
49
+ return { ok: false, error: createDecisionError(code, 'dispatch') };
50
+ }
51
+ if (!/^application\/json(?:\s*;|$)/i.test(response.headers.get('content-type') ?? '')) {
52
+ return { ok: false, error: createDecisionError('VERDICT_INVALID', 'parse') };
53
+ }
54
+ const declared = response.headers.get('content-length');
55
+ if (declared !== null && (!/^\d+$/.test(declared) || Number(declared) > cap)) {
56
+ return { ok: false, error: createDecisionError('RESPONSE_TOO_LARGE', 'parse') };
57
+ }
58
+ reader = response.body?.getReader();
59
+ if (!reader)
60
+ return { ok: false, error: createDecisionError('VERDICT_INVALID', 'parse') };
61
+ const buffer = new Uint8Array(cap);
62
+ let size = 0;
63
+ try {
64
+ for (;;) {
65
+ const chunk = await reader.read();
66
+ if (chunk.done)
67
+ break;
68
+ if (size + chunk.value.byteLength > cap) {
69
+ void reader.cancel().catch(() => { });
70
+ return { ok: false, error: createDecisionError('RESPONSE_TOO_LARGE', 'parse') };
71
+ }
72
+ buffer.set(chunk.value, size);
73
+ size += chunk.value.byteLength;
74
+ }
75
+ }
76
+ finally {
77
+ reader.releaseLock();
78
+ reader = undefined;
79
+ }
80
+ let parsed;
81
+ try {
82
+ parsed = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(buffer.subarray(0, size)));
83
+ }
84
+ catch {
85
+ return { ok: false, error: createDecisionError('VERDICT_INVALID', 'parse') };
86
+ }
87
+ const snapshot = snapshotBoundedJson(parsed, cap);
88
+ if (!snapshot.ok)
89
+ return { ok: false, error: createDecisionError('VERDICT_INVALID', 'parse') };
90
+ const id = sanitizeJevId(response.headers.get('x-typesafe-request-id'));
91
+ return { ok: true, body: snapshot.value, ...(id && !id.includes(token) ? { providerRequestId: id } : {}) };
92
+ }
93
+ catch {
94
+ return { ok: false, error: createDecisionError(timedOut ? 'TIMEOUT' : controller.signal.aborted ? 'CANCELLED' : 'TRANSPORT_FAILED', 'dispatch') };
95
+ }
96
+ };
97
+ try {
98
+ return await Promise.race([run(), aborted]);
99
+ }
100
+ finally {
101
+ clearTimeout(timer);
102
+ call.signal?.removeEventListener('abort', cancel);
103
+ controller.signal.removeEventListener('abort', onAbort);
104
+ }
105
+ } };
106
+ }
107
+ //# sourceMappingURL=jev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jev.js","sourceRoot":"","sources":["../../src/transport/jev.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { DecisionError } from '../decision/errors.js';
2
+ export declare const OPENAI_DECISIONS_ENDPOINT = "https://api.openai.com/v1/decisions";
3
+ export type OpenAiDecisionsTransportResult = {
4
+ ok: true;
5
+ body: unknown;
6
+ providerRequestId?: string;
7
+ } | {
8
+ ok: false;
9
+ error: DecisionError;
10
+ };
11
+ export interface OpenAiDecisionsTransport {
12
+ send(bodyJson: string, token: string, options?: {
13
+ signal?: AbortSignal;
14
+ timeoutMs?: number;
15
+ }): Promise<OpenAiDecisionsTransportResult>;
16
+ }
17
+ export interface OpenAiDecisionsTransportOptions {
18
+ fetch: typeof globalThis.fetch;
19
+ maxResponseBytes?: number;
20
+ }
21
+ /** Trusted, explicitly injected fetch must have retries disabled. Construction performs no I/O. */
22
+ export declare function createOpenAiDecisionsTransport(options: OpenAiDecisionsTransportOptions): OpenAiDecisionsTransport;
23
+ //# sourceMappingURL=openai-decisions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-decisions.d.ts","sourceRoot":"","sources":["../../src/transport/openai-decisions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAI3D,eAAO,MAAM,yBAAyB,wCAAwC,CAAC;AAC/E,MAAM,MAAM,8BAA8B,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAE,GAChG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,CAAC;AACxC,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAAC;CACxI;AACD,MAAM,WAAW,+BAA+B;IAAG,KAAK,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE;AAE9G,mGAAmG;AACnG,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,+BAA+B,GAAG,wBAAwB,CA8EjH"}
@@ -0,0 +1,107 @@
1
+ import { createDecisionError } from '../decision/errors.js';
2
+ import { sanitizeJevId as sanitizeOpenAiDecisionsId } from '../decision/jev-response.js';
3
+ import { DECISION_MAX_JSON_BYTES, snapshotBoundedJson } from '../decision/validation.js';
4
+ export const OPENAI_DECISIONS_ENDPOINT = 'https://api.openai.com/v1/decisions';
5
+ /** Trusted, explicitly injected fetch must have retries disabled. Construction performs no I/O. */
6
+ export function createOpenAiDecisionsTransport(options) {
7
+ const cap = options.maxResponseBytes ?? DECISION_MAX_JSON_BYTES;
8
+ if (!Number.isSafeInteger(cap) || cap < 1 || cap > DECISION_MAX_JSON_BYTES)
9
+ throw new Error('Invalid OPENAI_DECISIONS response bound.');
10
+ return { async send(bodyJson, token, call = {}) {
11
+ if (!token.trim() || token !== token.trim() || /[\r\n]/.test(token))
12
+ return { ok: false, error: createDecisionError('CREDENTIAL_MISSING', 'preflight') };
13
+ if (call.signal?.aborted)
14
+ return { ok: false, error: createDecisionError('CANCELLED', 'dispatch') };
15
+ const timeoutMs = call.timeoutMs ?? 10_000;
16
+ if (!Number.isSafeInteger(timeoutMs) || timeoutMs < 1 || timeoutMs > 60_000) {
17
+ return { ok: false, error: createDecisionError('REQUEST_INVALID', 'preflight') };
18
+ }
19
+ const controller = new AbortController();
20
+ let timedOut = false;
21
+ let reader;
22
+ let onAbort;
23
+ const aborted = new Promise((resolve) => {
24
+ onAbort = () => {
25
+ void reader?.cancel().catch(() => { });
26
+ resolve({ ok: false, error: createDecisionError(timedOut ? 'TIMEOUT' : 'CANCELLED', 'dispatch') });
27
+ };
28
+ controller.signal.addEventListener('abort', onAbort, { once: true });
29
+ });
30
+ const cancel = () => controller.abort();
31
+ call.signal?.addEventListener('abort', cancel, { once: true });
32
+ const timer = setTimeout(() => { timedOut = true; controller.abort(); }, timeoutMs);
33
+ const run = async () => {
34
+ try {
35
+ const response = await options.fetch(OPENAI_DECISIONS_ENDPOINT, { method: 'POST', redirect: 'manual',
36
+ headers: { authorization: `Bearer ${token}`, 'content-type': 'application/json', accept: 'application/json' },
37
+ body: bodyJson, signal: controller.signal });
38
+ if (controller.signal.aborted) {
39
+ void response.body?.cancel().catch(() => { });
40
+ return await aborted;
41
+ }
42
+ if (response.redirected || (response.status >= 300 && response.status < 400)) {
43
+ return { ok: false, error: createDecisionError('PROVIDER_REJECTED', 'dispatch') };
44
+ }
45
+ if (response.status !== 200) {
46
+ const code = response.status === 401 ? 'AUTHENTICATION_FAILED' : response.status === 422 ? 'PROVIDER_REJECTED'
47
+ : response.status === 429 ? 'RATE_LIMITED' : response.status === 529 ? 'PROVIDER_OVERLOADED'
48
+ : response.status >= 500 ? 'PROVIDER_UNAVAILABLE' : 'PROVIDER_REJECTED';
49
+ return { ok: false, error: createDecisionError(code, 'dispatch') };
50
+ }
51
+ if (!/^application\/json(?:\s*;|$)/i.test(response.headers.get('content-type') ?? '')) {
52
+ return { ok: false, error: createDecisionError('VERDICT_INVALID', 'parse') };
53
+ }
54
+ const declared = response.headers.get('content-length');
55
+ if (declared !== null && (!/^\d+$/.test(declared) || Number(declared) > cap)) {
56
+ return { ok: false, error: createDecisionError('RESPONSE_TOO_LARGE', 'parse') };
57
+ }
58
+ reader = response.body?.getReader();
59
+ if (!reader)
60
+ return { ok: false, error: createDecisionError('VERDICT_INVALID', 'parse') };
61
+ const buffer = new Uint8Array(cap);
62
+ let size = 0;
63
+ try {
64
+ for (;;) {
65
+ const chunk = await reader.read();
66
+ if (chunk.done)
67
+ break;
68
+ if (size + chunk.value.byteLength > cap) {
69
+ void reader.cancel().catch(() => { });
70
+ return { ok: false, error: createDecisionError('RESPONSE_TOO_LARGE', 'parse') };
71
+ }
72
+ buffer.set(chunk.value, size);
73
+ size += chunk.value.byteLength;
74
+ }
75
+ }
76
+ finally {
77
+ reader.releaseLock();
78
+ reader = undefined;
79
+ }
80
+ let parsed;
81
+ try {
82
+ parsed = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(buffer.subarray(0, size)));
83
+ }
84
+ catch {
85
+ return { ok: false, error: createDecisionError('VERDICT_INVALID', 'parse') };
86
+ }
87
+ const snapshot = snapshotBoundedJson(parsed, cap);
88
+ if (!snapshot.ok)
89
+ return { ok: false, error: createDecisionError('VERDICT_INVALID', 'parse') };
90
+ const id = sanitizeOpenAiDecisionsId(response.headers.get('x-request-id'));
91
+ return { ok: true, body: snapshot.value, ...(id && !id.includes(token) ? { providerRequestId: id } : {}) };
92
+ }
93
+ catch {
94
+ return { ok: false, error: createDecisionError(timedOut ? 'TIMEOUT' : controller.signal.aborted ? 'CANCELLED' : 'TRANSPORT_FAILED', 'dispatch') };
95
+ }
96
+ };
97
+ try {
98
+ return await Promise.race([run(), aborted]);
99
+ }
100
+ finally {
101
+ clearTimeout(timer);
102
+ call.signal?.removeEventListener('abort', cancel);
103
+ controller.signal.removeEventListener('abort', onAbort);
104
+ }
105
+ } };
106
+ }
107
+ //# sourceMappingURL=openai-decisions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-decisions.js","sourceRoot":"","sources":["../../src/transport/openai-decisions.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentropic/llm-mesh",
3
- "version": "0.28.0",
3
+ "version": "0.29.0",
4
4
  "description": "Provider-agnostic LLM access runtime SDK for Sentropic.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -32,6 +32,18 @@
32
32
  "types": "./dist/node/index.d.ts",
33
33
  "import": "./dist/node/index.js"
34
34
  },
35
+ "./decision": {
36
+ "types": "./dist/decision/index.d.ts",
37
+ "import": "./dist/decision/index.js"
38
+ },
39
+ "./decision/host": {
40
+ "types": "./dist/decision/host.d.ts",
41
+ "import": "./dist/decision/host.js"
42
+ },
43
+ "./transport/jev": {
44
+ "types": "./dist/transport/jev.d.ts",
45
+ "import": "./dist/transport/jev.js"
46
+ },
35
47
  "./transport/cloud-code": {
36
48
  "types": "./dist/transport/cloud-code-transport.d.ts",
37
49
  "import": "./dist/transport/cloud-code-transport.js"