@sentropic/llm-mesh 0.13.2 → 0.14.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 (92) hide show
  1. package/README.md +75 -10
  2. package/dist/account-transports.d.ts +14 -1
  3. package/dist/account-transports.d.ts.map +1 -1
  4. package/dist/account-transports.js +37 -3
  5. package/dist/account-transports.js.map +1 -1
  6. package/dist/codex.d.ts +43 -0
  7. package/dist/codex.d.ts.map +1 -0
  8. package/dist/codex.js +62 -0
  9. package/dist/codex.js.map +1 -0
  10. package/dist/enrollment/cloud-code.d.ts +1 -0
  11. package/dist/enrollment/cloud-code.d.ts.map +1 -1
  12. package/dist/enrollment/cloud-code.js +1 -0
  13. package/dist/enrollment/cloud-code.js.map +1 -1
  14. package/dist/enrollment/codex.d.ts +1 -0
  15. package/dist/enrollment/codex.d.ts.map +1 -1
  16. package/dist/enrollment/codex.js +1 -0
  17. package/dist/enrollment/codex.js.map +1 -1
  18. package/dist/enrollment/contracts.d.ts +1 -0
  19. package/dist/enrollment/contracts.d.ts.map +1 -1
  20. package/dist/equivalence-council.d.ts +61 -0
  21. package/dist/equivalence-council.d.ts.map +1 -0
  22. package/dist/equivalence-council.js +119 -0
  23. package/dist/equivalence-council.js.map +1 -0
  24. package/dist/generated-model-council.d.ts +10 -0
  25. package/dist/generated-model-council.d.ts.map +1 -0
  26. package/dist/generated-model-council.js +32 -0
  27. package/dist/generated-model-council.js.map +1 -0
  28. package/dist/generation.d.ts +3 -0
  29. package/dist/generation.d.ts.map +1 -1
  30. package/dist/index.d.ts +9 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +9 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/messages.d.ts +8 -1
  35. package/dist/messages.d.ts.map +1 -1
  36. package/dist/route-attempt.d.ts +18 -0
  37. package/dist/route-attempt.d.ts.map +1 -0
  38. package/dist/route-attempt.js +70 -0
  39. package/dist/route-attempt.js.map +1 -0
  40. package/dist/route-health.d.ts +14 -0
  41. package/dist/route-health.d.ts.map +1 -0
  42. package/dist/route-health.js +69 -0
  43. package/dist/route-health.js.map +1 -0
  44. package/dist/route-planner-state.d.ts +37 -0
  45. package/dist/route-planner-state.d.ts.map +1 -0
  46. package/dist/route-planner-state.js +27 -0
  47. package/dist/route-planner-state.js.map +1 -0
  48. package/dist/route-planner.d.ts +48 -0
  49. package/dist/route-planner.d.ts.map +1 -0
  50. package/dist/route-planner.js +327 -0
  51. package/dist/route-planner.js.map +1 -0
  52. package/dist/route-selection.d.ts +17 -0
  53. package/dist/route-selection.d.ts.map +1 -0
  54. package/dist/route-selection.js +127 -0
  55. package/dist/route-selection.js.map +1 -0
  56. package/dist/routing-contracts.d.ts +130 -0
  57. package/dist/routing-contracts.d.ts.map +1 -0
  58. package/dist/routing-contracts.js +2 -0
  59. package/dist/routing-contracts.js.map +1 -0
  60. package/dist/routing-policy.d.ts +68 -0
  61. package/dist/routing-policy.d.ts.map +1 -0
  62. package/dist/routing-policy.js +93 -0
  63. package/dist/routing-policy.js.map +1 -0
  64. package/dist/routing-targets.d.ts +25 -0
  65. package/dist/routing-targets.d.ts.map +1 -0
  66. package/dist/routing-targets.js +48 -0
  67. package/dist/routing-targets.js.map +1 -0
  68. package/dist/service/facade.d.ts +31 -0
  69. package/dist/service/facade.d.ts.map +1 -1
  70. package/dist/service/facade.js +8 -1
  71. package/dist/service/facade.js.map +1 -1
  72. package/dist/service/local-account-transport-service.d.ts +12 -2
  73. package/dist/service/local-account-transport-service.d.ts.map +1 -1
  74. package/dist/service/local-account-transport-service.js +189 -9
  75. package/dist/service/local-account-transport-service.js.map +1 -1
  76. package/dist/transport/cloud-code-runtime-client.d.ts +22 -0
  77. package/dist/transport/cloud-code-runtime-client.d.ts.map +1 -0
  78. package/dist/transport/cloud-code-runtime-client.js +306 -0
  79. package/dist/transport/cloud-code-runtime-client.js.map +1 -0
  80. package/dist/transport/cloud-code-transport.d.ts +3 -0
  81. package/dist/transport/cloud-code-transport.d.ts.map +1 -1
  82. package/dist/transport/cloud-code-transport.js +32 -4
  83. package/dist/transport/cloud-code-transport.js.map +1 -1
  84. package/dist/transport/codex-runtime-client.d.ts +17 -0
  85. package/dist/transport/codex-runtime-client.d.ts.map +1 -0
  86. package/dist/transport/codex-runtime-client.js +121 -0
  87. package/dist/transport/codex-runtime-client.js.map +1 -0
  88. package/dist/transport/codex-runtime-wire.d.ts +5 -0
  89. package/dist/transport/codex-runtime-wire.d.ts.map +1 -0
  90. package/dist/transport/codex-runtime-wire.js +144 -0
  91. package/dist/transport/codex-runtime-wire.js.map +1 -0
  92. package/package.json +1 -1
@@ -0,0 +1,61 @@
1
+ import type { ModelProfile } from './catalog.js';
2
+ export type CapabilityName = keyof ModelProfile['capabilities'] | `input:${ModelProfile['capabilities']['modalities']['input'][number]}` | `output:${ModelProfile['capabilities']['modalities']['output'][number]}`;
3
+ export type CapabilityRequirement = CapabilityName | {
4
+ readonly capability: CapabilityName;
5
+ readonly required: true;
6
+ } | {
7
+ readonly capability: CapabilityName;
8
+ readonly minimum: number;
9
+ };
10
+ export interface BenchmarkEvidence {
11
+ readonly suite: string;
12
+ readonly artifact: string;
13
+ readonly measuredAt: string;
14
+ readonly dimensions: Readonly<Record<string, number | string>>;
15
+ }
16
+ export interface ModelEquivalenceMember {
17
+ readonly providerId: string;
18
+ readonly modelId: string;
19
+ readonly rank: number;
20
+ readonly effort?: string;
21
+ readonly requiredCapabilities: readonly CapabilityRequirement[];
22
+ readonly transportPreferences?: readonly string[];
23
+ }
24
+ export interface ModelEquivalenceGroup {
25
+ readonly id: string;
26
+ readonly intent: 'coding' | 'general' | 'reasoning' | 'fast';
27
+ readonly members: readonly ModelEquivalenceMember[];
28
+ readonly evidence: readonly BenchmarkEvidence[];
29
+ readonly expiresAt: string;
30
+ }
31
+ export interface ModelAlias {
32
+ readonly alias: string;
33
+ readonly providerId: string;
34
+ readonly modelId: string;
35
+ readonly transportProviderId: string;
36
+ readonly effort?: string;
37
+ }
38
+ export interface EquivalenceExclusion {
39
+ readonly providerId: string;
40
+ readonly modelId: string;
41
+ readonly reason: string;
42
+ readonly reviewer: string;
43
+ readonly expiresAt: string;
44
+ readonly provenance: string;
45
+ }
46
+ export interface ModelEquivalenceCouncil {
47
+ readonly revision: string;
48
+ readonly expiresAt: string;
49
+ readonly aliases: readonly ModelAlias[];
50
+ readonly groups: readonly ModelEquivalenceGroup[];
51
+ readonly exclusions: readonly EquivalenceExclusion[];
52
+ }
53
+ export declare class EquivalenceCouncilError extends Error {
54
+ readonly issues: readonly string[];
55
+ constructor(issues: readonly string[]);
56
+ }
57
+ export declare const capabilityRequirementEquals: (left: CapabilityRequirement, right: CapabilityRequirement) => boolean;
58
+ export declare const modelSupportsCapability: (profile: ModelProfile | undefined, requirement: CapabilityRequirement) => boolean;
59
+ export declare const DEFAULT_MODEL_EQUIVALENCE_COUNCIL: ModelEquivalenceCouncil;
60
+ export declare const validateEquivalenceCouncil: (council: ModelEquivalenceCouncil, profiles: readonly ModelProfile[], now?: Date) => void;
61
+ //# sourceMappingURL=equivalence-council.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equivalence-council.d.ts","sourceRoot":"","sources":["../src/equivalence-council.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAIjD,MAAM,MAAM,cAAc,GACtB,MAAM,YAAY,CAAC,cAAc,CAAC,GAClC,SAAS,YAAY,CAAC,cAAc,CAAC,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,GACtE,UAAU,YAAY,CAAC,cAAc,CAAC,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;AAE7E,MAAM,MAAM,qBAAqB,GAC7B,cAAc,GACd;IAAE,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAA;CAAE,GAChE;IAAE,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;CAChE;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,oBAAoB,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAChE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnD;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,CAAC;IAC7D,QAAQ,CAAC,OAAO,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACpD,QAAQ,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAChD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,SAAS,oBAAoB,EAAE,CAAC;CACtD;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IACpC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE;gBAAzB,MAAM,EAAE,SAAS,MAAM,EAAE;CAI/C;AAYD,eAAO,MAAM,2BAA2B,SAChC,qBAAqB,SACpB,qBAAqB,KAC3B,OAKF,CAAC;AAEF,eAAO,MAAM,uBAAuB,YACzB,YAAY,GAAG,SAAS,eACpB,qBAAqB,KACjC,OA0BF,CAAC;AAUF,eAAO,MAAM,iCAAiC,EAAE,uBAgB/C,CAAC;AAEF,eAAO,MAAM,0BAA0B,YAC5B,uBAAuB,YACtB,SAAS,YAAY,EAAE,QAC5B,IAAI,KACR,IA4CF,CAAC"}
@@ -0,0 +1,119 @@
1
+ import { GENERATED_MODEL_COUNCIL_SOURCE } from './generated-model-council.js';
2
+ import { LAUNCH_ALIAS_TARGET_MAPPINGS } from './routing-targets.js';
3
+ export class EquivalenceCouncilError extends Error {
4
+ issues;
5
+ constructor(issues) {
6
+ super(issues.join('; '));
7
+ this.issues = issues;
8
+ this.name = 'EquivalenceCouncilError';
9
+ }
10
+ }
11
+ const normalizedCapabilityRequirement = (requirement) => typeof requirement === 'string'
12
+ ? { capability: requirement }
13
+ : {
14
+ capability: requirement.capability,
15
+ ...('minimum' in requirement ? { minimum: requirement.minimum } : {}),
16
+ };
17
+ export const capabilityRequirementEquals = (left, right) => {
18
+ const normalizedLeft = normalizedCapabilityRequirement(left);
19
+ const normalizedRight = normalizedCapabilityRequirement(right);
20
+ return normalizedLeft.capability === normalizedRight.capability
21
+ && normalizedLeft.minimum === normalizedRight.minimum;
22
+ };
23
+ export const modelSupportsCapability = (profile, requirement) => {
24
+ if (!profile)
25
+ return false;
26
+ const normalized = normalizedCapabilityRequirement(requirement);
27
+ if (normalized.capability.startsWith('input:')) {
28
+ return profile.capabilities.modalities.input.includes(normalized.capability.slice(6));
29
+ }
30
+ if (normalized.capability.startsWith('output:')) {
31
+ return profile.capabilities.modalities.output.includes(normalized.capability.slice(7));
32
+ }
33
+ const capability = profile.capabilities[normalized.capability];
34
+ if (typeof capability === 'number') {
35
+ return normalized.minimum === undefined
36
+ ? capability > 0
37
+ : capability >= normalized.minimum;
38
+ }
39
+ if (normalized.minimum !== undefined)
40
+ return false;
41
+ if (capability && typeof capability === 'object' && 'support' in capability) {
42
+ return capability.support !== 'unsupported';
43
+ }
44
+ return capability !== undefined;
45
+ };
46
+ const aliases = Object.entries(LAUNCH_ALIAS_TARGET_MAPPINGS).map(([alias, target]) => ({
47
+ alias,
48
+ providerId: target.providerId,
49
+ modelId: target.model,
50
+ transportProviderId: target.transportProviderId,
51
+ ...(target.effort ? { effort: target.effort } : {}),
52
+ }));
53
+ export const DEFAULT_MODEL_EQUIVALENCE_COUNCIL = {
54
+ revision: GENERATED_MODEL_COUNCIL_SOURCE.revision,
55
+ expiresAt: GENERATED_MODEL_COUNCIL_SOURCE.expiresAt,
56
+ aliases,
57
+ groups: [],
58
+ exclusions: GENERATED_MODEL_COUNCIL_SOURCE.excludedModelKeys.map((key) => {
59
+ const separator = key.indexOf(':');
60
+ return {
61
+ providerId: key.slice(0, separator),
62
+ modelId: key.slice(separator + 1),
63
+ reason: GENERATED_MODEL_COUNCIL_SOURCE.reason,
64
+ reviewer: GENERATED_MODEL_COUNCIL_SOURCE.reviewer,
65
+ expiresAt: GENERATED_MODEL_COUNCIL_SOURCE.expiresAt,
66
+ provenance: `${GENERATED_MODEL_COUNCIL_SOURCE.provenance}#${GENERATED_MODEL_COUNCIL_SOURCE.digest}`,
67
+ };
68
+ }),
69
+ };
70
+ export const validateEquivalenceCouncil = (council, profiles, now = new Date()) => {
71
+ const issues = [];
72
+ if (!Number.isFinite(Date.parse(council.expiresAt))) {
73
+ issues.push('council expiresAt must be a valid timestamp');
74
+ }
75
+ else if (Date.parse(council.expiresAt) <= now.getTime()) {
76
+ issues.push(`expired council ${council.revision}`);
77
+ }
78
+ const profilesByKey = new Map(profiles.map((profile) => [`${profile.providerId}:${profile.modelId}`, profile]));
79
+ const classified = new Map();
80
+ const add = (providerId, modelId) => {
81
+ const key = `${providerId}:${modelId}`;
82
+ classified.set(key, (classified.get(key) ?? 0) + 1);
83
+ };
84
+ council.groups.forEach((group) => {
85
+ if (group.evidence.length === 0)
86
+ issues.push(`group has no evidence: ${group.id}`);
87
+ if (Date.parse(group.expiresAt) <= now.getTime())
88
+ issues.push(`expired group ${group.id}`);
89
+ group.members.forEach((member) => {
90
+ add(member.providerId, member.modelId);
91
+ const key = `${member.providerId}:${member.modelId}`;
92
+ const profile = profilesByKey.get(key);
93
+ if (!profile)
94
+ issues.push(`unknown council model: ${key}`);
95
+ for (const requirement of member.requiredCapabilities) {
96
+ if (!modelSupportsCapability(profile, requirement)) {
97
+ issues.push(`missing capability ${requirement}: ${key}`);
98
+ }
99
+ }
100
+ });
101
+ });
102
+ council.exclusions.forEach((exclusion) => {
103
+ add(exclusion.providerId, exclusion.modelId);
104
+ if (Date.parse(exclusion.expiresAt) <= now.getTime()) {
105
+ issues.push(`expired exclusion ${exclusion.providerId}:${exclusion.modelId}`);
106
+ }
107
+ if (!profilesByKey.has(`${exclusion.providerId}:${exclusion.modelId}`)) {
108
+ issues.push(`unknown excluded model: ${exclusion.providerId}:${exclusion.modelId}`);
109
+ }
110
+ });
111
+ for (const profile of profiles) {
112
+ const key = `${profile.providerId}:${profile.modelId}`;
113
+ if (classified.get(key) !== 1)
114
+ issues.push(`model must be classified exactly once: ${key}`);
115
+ }
116
+ if (issues.length > 0)
117
+ throw new EquivalenceCouncilError(issues);
118
+ };
119
+ //# sourceMappingURL=equivalence-council.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equivalence-council.js","sourceRoot":"","sources":["../src/equivalence-council.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare const GENERATED_MODEL_COUNCIL_SOURCE: {
2
+ readonly revision: "2026-08-08.1";
3
+ readonly digest: "sha256:9e826c40cceab9350fbb3445d4a31c5715baa6236f6242e5645977a5af4922fc";
4
+ readonly expiresAt: "2027-02-08T00:00:00.000Z";
5
+ readonly reason: "No pinned benchmark evidence authorizes automatic substitution.";
6
+ readonly reviewer: "BR-73 model council";
7
+ readonly provenance: "spec/SPEC_EVOL_LLM_MESH_GATEWAY_ROUTING.md";
8
+ readonly excludedModelKeys: readonly ["anthropic:claude-fable-5", "anthropic:claude-opus-4-8", "anthropic:claude-opus-5", "anthropic:claude-sonnet-5", "cohere:command-a-03-2025", "cohere:command-a-reasoning-08-2025", "gcp:anthropic/claude-opus-4-6@gcp", "gcp:anthropic/claude-sonnet-4-6@gcp", "gcp:google/gemini-3.1-flash-lite@gcp", "gcp:google/gemini-3.5-flash@gcp", "gemini:gemini-3.1-flash-lite", "gemini:gemini-3.5-flash", "mistral:magistral-medium-2509", "mistral:mistral-small-2603", "openai:gpt-4.1-nano", "openai:gpt-5.4-nano", "openai:gpt-5.5", "openai:gpt-5.6-luna", "openai:gpt-5.6-sol", "openai:gpt-5.6-terra"];
9
+ };
10
+ //# sourceMappingURL=generated-model-council.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-model-council.d.ts","sourceRoot":"","sources":["../src/generated-model-council.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,8BAA8B;;;;;;;;CA6BjC,CAAC"}
@@ -0,0 +1,32 @@
1
+ // Generated by make refresh-llm-model-equivalences. Do not edit.
2
+ export const GENERATED_MODEL_COUNCIL_SOURCE = {
3
+ revision: "2026-08-08.1",
4
+ digest: "sha256:9e826c40cceab9350fbb3445d4a31c5715baa6236f6242e5645977a5af4922fc",
5
+ expiresAt: "2027-02-08T00:00:00.000Z",
6
+ reason: "No pinned benchmark evidence authorizes automatic substitution.",
7
+ reviewer: "BR-73 model council",
8
+ provenance: "spec/SPEC_EVOL_LLM_MESH_GATEWAY_ROUTING.md",
9
+ excludedModelKeys: [
10
+ "anthropic:claude-fable-5",
11
+ "anthropic:claude-opus-4-8",
12
+ "anthropic:claude-opus-5",
13
+ "anthropic:claude-sonnet-5",
14
+ "cohere:command-a-03-2025",
15
+ "cohere:command-a-reasoning-08-2025",
16
+ "gcp:anthropic/claude-opus-4-6@gcp",
17
+ "gcp:anthropic/claude-sonnet-4-6@gcp",
18
+ "gcp:google/gemini-3.1-flash-lite@gcp",
19
+ "gcp:google/gemini-3.5-flash@gcp",
20
+ "gemini:gemini-3.1-flash-lite",
21
+ "gemini:gemini-3.5-flash",
22
+ "mistral:magistral-medium-2509",
23
+ "mistral:mistral-small-2603",
24
+ "openai:gpt-4.1-nano",
25
+ "openai:gpt-5.4-nano",
26
+ "openai:gpt-5.5",
27
+ "openai:gpt-5.6-luna",
28
+ "openai:gpt-5.6-sol",
29
+ "openai:gpt-5.6-terra",
30
+ ],
31
+ };
32
+ //# sourceMappingURL=generated-model-council.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-model-council.js","sourceRoot":"","sources":["../src/generated-model-council.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,yEAAyE;IACjF,SAAS,EAAE,0BAA0B;IACrC,MAAM,EAAE,iEAAiE;IACzE,QAAQ,EAAE,qBAAqB;IAC/B,UAAU,EAAE,4CAA4C;IACxD,iBAAiB,EAAE;QACjB,0BAA0B;QAC1B,2BAA2B;QAC3B,yBAAyB;QACzB,2BAA2B;QAC3B,0BAA0B;QAC1B,oCAAoC;QACpC,mCAAmC;QACnC,qCAAqC;QACrC,sCAAsC;QACtC,iCAAiC;QACjC,8BAA8B;QAC9B,yBAAyB;QACzB,+BAA+B;QAC/B,4BAA4B;QAC5B,qBAAqB;QACrB,qBAAqB;QACrB,gBAAgB;QAChB,qBAAqB;QACrB,oBAAoB;QACpB,sBAAsB;KACvB;CACO,CAAC"}
@@ -24,6 +24,8 @@ export type ReasoningEffort = 'none' | 'low' | 'medium' | 'high' | 'xhigh' | 'ma
24
24
  export interface ReasoningOptions {
25
25
  effort?: ReasoningEffort;
26
26
  summary?: 'auto' | 'concise' | 'detailed';
27
+ enabled?: boolean;
28
+ budgetTokens?: number;
27
29
  }
28
30
  export interface LlmMeshRequestMetadata {
29
31
  correlationId?: string;
@@ -41,6 +43,7 @@ export interface GenerateRequest {
41
43
  auth?: AuthInput | AuthResolver;
42
44
  tools?: readonly ToolDefinition[];
43
45
  toolChoice?: ToolChoice;
46
+ parallelToolCalls?: boolean;
44
47
  responseFormat?: ResponseFormat;
45
48
  reasoning?: ReasoningOptions;
46
49
  maxOutputTokens?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"generation.d.ts","sourceRoot":"","sources":["../src/generation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generation.d.ts","sourceRoot":"","sources":["../src/generation.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -4,11 +4,20 @@ export * from './auth.js';
4
4
  export * from './capabilities.js';
5
5
  export * from './catalog.js';
6
6
  export * from './errors.js';
7
+ export * from './equivalence-council.js';
7
8
  export * from './generation.js';
8
9
  export * from './messages.js';
9
10
  export * from './mesh.js';
10
11
  export * from './providers.js';
11
12
  export * from './registry.js';
13
+ export * from './routing-targets.js';
14
+ export * from './routing-policy.js';
15
+ export * from './routing-contracts.js';
16
+ export * from './route-planner.js';
17
+ export * from './codex.js';
18
+ export * from './transport/codex-runtime-client.js';
19
+ export * from './transport/codex-runtime-wire.js';
20
+ export * from './transport/cloud-code-runtime-client.js';
12
21
  export * from './streaming.js';
13
22
  export * from './tools.js';
14
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,qCAAqC,CAAC;AACpD,cAAc,mCAAmC,CAAC;AAClD,cAAc,0CAA0C,CAAC;AACzD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -4,11 +4,20 @@ export * from './auth.js';
4
4
  export * from './capabilities.js';
5
5
  export * from './catalog.js';
6
6
  export * from './errors.js';
7
+ export * from './equivalence-council.js';
7
8
  export * from './generation.js';
8
9
  export * from './messages.js';
9
10
  export * from './mesh.js';
10
11
  export * from './providers.js';
11
12
  export * from './registry.js';
13
+ export * from './routing-targets.js';
14
+ export * from './routing-policy.js';
15
+ export * from './routing-contracts.js';
16
+ export * from './route-planner.js';
17
+ export * from './codex.js';
18
+ export * from './transport/codex-runtime-client.js';
19
+ export * from './transport/codex-runtime-wire.js';
20
+ export * from './transport/cloud-code-runtime-client.js';
12
21
  export * from './streaming.js';
13
22
  export * from './tools.js';
14
23
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,qCAAqC,CAAC;AACpD,cAAc,mCAAmC,CAAC;AAClD,cAAc,0CAA0C,CAAC;AACzD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC"}
@@ -17,7 +17,14 @@ export interface FileContentPart {
17
17
  url?: string;
18
18
  filename?: string;
19
19
  }
20
- export type MessageContent = string | readonly (TextContentPart | ImageContentPart | FileContentPart)[];
20
+ /** Provider-originated reasoning history that may carry a replay signature. */
21
+ export interface ReasoningContentPart {
22
+ type: 'reasoning';
23
+ text: string;
24
+ signature?: string;
25
+ redacted?: boolean;
26
+ }
27
+ export type MessageContent = string | readonly (TextContentPart | ImageContentPart | FileContentPart | ReasoningContentPart)[];
21
28
  export interface BaseMessage {
22
29
  role: MessageRole;
23
30
  content: MessageContent;
@@ -1 +1 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;AAEjF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,CAAC,eAAe,GAAG,gBAAgB,GAAG,eAAe,CAAC,EAAE,CAAC;AAExG,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,MAAM,cAAc,GACtB,CAAC,WAAW,GAAG;IAAE,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAA;CAAE,CAAC,GACzD,gBAAgB,GAChB,WAAW,CAAC"}
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;AAEjF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,+EAA+E;AAC/E,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,CAC7C,eAAe,GAAG,gBAAgB,GAAG,eAAe,GAAG,oBAAoB,CAC5E,EAAE,CAAC;AAEJ,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,MAAM,cAAc,GACtB,CAAC,WAAW,GAAG;IAAE,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAA;CAAE,CAAC,GACzD,gBAAgB,GAChB,WAAW,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { RankedRouteCandidate } from './route-selection.js';
2
+ import type { StoredPlan } from './route-planner-state.js';
3
+ import type { AccountDirectoryPort, Clock, PreparedRouteAttempt, RouteFailureClassification, VerifiedRoutingSubject } from './routing-contracts.js';
4
+ export declare const prepareStoredRouteAttempt: (input: {
5
+ readonly stored: StoredPlan | undefined;
6
+ readonly subject: VerifiedRoutingSubject;
7
+ readonly planRef: string;
8
+ readonly candidateRef: string;
9
+ readonly requestId: string;
10
+ readonly attemptIndex: number;
11
+ readonly directory: AccountDirectoryPort;
12
+ readonly clock: Clock;
13
+ readonly onOutcome: (stored: StoredPlan, candidate: RankedRouteCandidate, classification: RouteFailureClassification) => void;
14
+ readonly onCommitted: (stored: StoredPlan, candidate: RankedRouteCandidate) => void;
15
+ readonly onSuccess: (stored: StoredPlan, candidate: RankedRouteCandidate) => void;
16
+ readonly onCancelled: (stored: StoredPlan, candidate: RankedRouteCandidate) => void;
17
+ }) => Promise<PreparedRouteAttempt>;
18
+ //# sourceMappingURL=route-attempt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-attempt.d.ts","sourceRoot":"","sources":["../src/route-attempt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,OAAO,KAAK,EACV,oBAAoB,EACpB,KAAK,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,sBAAsB,EACvB,MAAM,wBAAwB,CAAC;AAEhC,eAAO,MAAM,yBAAyB,UAAiB;IACrD,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,CAClB,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,oBAAoB,EAC/B,cAAc,EAAE,0BAA0B,KACvC,IAAI,CAAC;IACV,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACpF,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAClF,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,oBAAoB,KAAK,IAAI,CAAC;CACrF,KAAG,QAAQ,oBAAoB,CAiE/B,CAAC"}
@@ -0,0 +1,70 @@
1
+ import { RoutePlanError, subjectRef } from './route-planner-state.js';
2
+ export const prepareStoredRouteAttempt = async (input) => {
3
+ const { stored } = input;
4
+ if (!stored || stored.plan.planRef !== input.planRef) {
5
+ throw new RoutePlanError('Unknown route plan', 'invalid-plan');
6
+ }
7
+ if (stored.subjectRef !== subjectRef(input.subject)) {
8
+ throw new RoutePlanError('Route plan belongs to another owner', 'invalid-plan');
9
+ }
10
+ if (Date.parse(stored.plan.expiresAt) <= input.clock.now().getTime()) {
11
+ throw new RoutePlanError('Route plan expired', 'expired-plan');
12
+ }
13
+ const candidate = stored.candidates[input.attemptIndex];
14
+ if (!candidate || candidate.candidateRef !== input.candidateRef) {
15
+ throw new RoutePlanError('Candidate does not match attempt index', 'invalid-plan');
16
+ }
17
+ const claim = [input.candidateRef, input.requestId, input.attemptIndex].join('\u001f');
18
+ if (stored.claimedAttempts.has(claim)) {
19
+ throw new RoutePlanError('Route attempt was already prepared', 'invalid-plan');
20
+ }
21
+ stored.claimedAttempts.add(claim);
22
+ const current = (await input.directory.listEligible(input.subject)).find((account) => account.accountRef === candidate.account.accountRef);
23
+ if (!current || current.revision !== candidate.account.revision || current.readiness !== 'ready') {
24
+ throw new RoutePlanError('Candidate account changed after planning', 'stale-candidate');
25
+ }
26
+ const attempt = await input.directory.prepareAttempt({
27
+ subject: input.subject,
28
+ ...(stored.affinityRef ? { affinityRef: stored.affinityRef } : {}),
29
+ accountRef: current.accountRef,
30
+ target: candidate.target,
31
+ requestId: input.requestId,
32
+ attemptIndex: input.attemptIndex,
33
+ });
34
+ let committed = false;
35
+ let terminal = false;
36
+ return {
37
+ attemptRef: attempt.attemptRef,
38
+ generate: (request) => attempt.generate(request),
39
+ stream: (request) => attempt.stream(request),
40
+ recordOutcome: async (classification, usage) => {
41
+ if (terminal)
42
+ return;
43
+ terminal = true;
44
+ input.onOutcome(stored, candidate, classification);
45
+ await attempt.recordOutcome(classification, usage);
46
+ },
47
+ markCommitted: async () => {
48
+ if (committed)
49
+ return;
50
+ committed = true;
51
+ input.onCommitted(stored, candidate);
52
+ await attempt.markCommitted();
53
+ },
54
+ complete: async (usage) => {
55
+ if (terminal)
56
+ return;
57
+ terminal = true;
58
+ input.onSuccess(stored, candidate);
59
+ await attempt.complete(usage);
60
+ },
61
+ releaseCancelled: async () => {
62
+ if (terminal)
63
+ return;
64
+ terminal = true;
65
+ input.onCancelled(stored, candidate);
66
+ await attempt.releaseCancelled();
67
+ },
68
+ };
69
+ };
70
+ //# sourceMappingURL=route-attempt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-attempt.js","sourceRoot":"","sources":["../src/route-attempt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { RankedRouteCandidate } from './route-selection.js';
2
+ import type { Clock, RouteFailureClassification } from './routing-contracts.js';
3
+ import type { RoutePolicy } from './routing-policy.js';
4
+ export declare class InMemoryRouteHealth {
5
+ private readonly clock;
6
+ private readonly maximumEntries;
7
+ private readonly entries;
8
+ constructor(clock: Clock, maximumEntries?: number);
9
+ record(candidate: RankedRouteCandidate, classification: RouteFailureClassification, policy: RoutePolicy): void;
10
+ isSuppressed(candidate: RankedRouteCandidate): boolean;
11
+ clear(candidate: RankedRouteCandidate): void;
12
+ private evict;
13
+ }
14
+ //# sourceMappingURL=route-health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-health.d.ts","sourceRoot":"","sources":["../src/route-health.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAoCvD,qBAAa,mBAAmB;IAI5B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAJjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;gBAGvC,KAAK,EAAE,KAAK,EACZ,cAAc,SAAQ;IAGzC,MAAM,CACJ,SAAS,EAAE,oBAAoB,EAC/B,cAAc,EAAE,0BAA0B,EAC1C,MAAM,EAAE,WAAW,GAClB,IAAI;IAaP,YAAY,CAAC,SAAS,EAAE,oBAAoB,GAAG,OAAO;IAStD,KAAK,CAAC,SAAS,EAAE,oBAAoB,GAAG,IAAI;IAI5C,OAAO,CAAC,KAAK;CAWd"}
@@ -0,0 +1,69 @@
1
+ const availabilityReasons = new Set([
2
+ 'network-unavailable',
3
+ 'provider-5xx',
4
+ 'rate-limited',
5
+ ]);
6
+ const keyFor = (candidate, scope) => {
7
+ switch (scope) {
8
+ case 'account': return `account:${candidate.account.accountRef}`;
9
+ case 'transport': return `transport:${candidate.target.transportProviderId}`;
10
+ case 'provider-model': return `provider-model:${candidate.target.providerId}:${candidate.target.modelId}`;
11
+ default: return [
12
+ 'route', candidate.target.providerId, candidate.target.modelId,
13
+ candidate.target.transportProviderId, candidate.account.accountRef,
14
+ ].join(':');
15
+ }
16
+ };
17
+ const applicableKeys = (candidate) => [
18
+ keyFor(candidate, 'route'),
19
+ keyFor(candidate, 'account'),
20
+ keyFor(candidate, 'transport'),
21
+ keyFor(candidate, 'provider-model'),
22
+ ];
23
+ export class InMemoryRouteHealth {
24
+ clock;
25
+ maximumEntries;
26
+ entries = new Map();
27
+ constructor(clock, maximumEntries = 1_000) {
28
+ this.clock = clock;
29
+ this.maximumEntries = maximumEntries;
30
+ }
31
+ record(candidate, classification, policy) {
32
+ if (!classification.retryable || !availabilityReasons.has(classification.reason))
33
+ return;
34
+ const requestedTtl = classification.retryAfterMs ?? policy.negativeCacheTtlMs;
35
+ const ttl = Math.min(Math.max(requestedTtl, 1_000), 3_600_000);
36
+ const key = keyFor(candidate, classification.healthScope);
37
+ this.entries.set(key, {
38
+ key,
39
+ reason: classification.reason,
40
+ expiresAt: this.clock.now().getTime() + ttl,
41
+ });
42
+ this.evict();
43
+ }
44
+ isSuppressed(candidate) {
45
+ this.evict();
46
+ const now = this.clock.now().getTime();
47
+ return applicableKeys(candidate).some((key) => {
48
+ const entry = this.entries.get(key);
49
+ return Boolean(entry && entry.expiresAt > now);
50
+ });
51
+ }
52
+ clear(candidate) {
53
+ applicableKeys(candidate).forEach((key) => this.entries.delete(key));
54
+ }
55
+ evict() {
56
+ const now = this.clock.now().getTime();
57
+ for (const [key, entry] of this.entries) {
58
+ if (entry.expiresAt <= now)
59
+ this.entries.delete(key);
60
+ }
61
+ while (this.entries.size > this.maximumEntries) {
62
+ const oldest = [...this.entries.values()].sort((a, b) => a.expiresAt - b.expiresAt)[0];
63
+ if (!oldest)
64
+ break;
65
+ this.entries.delete(oldest.key);
66
+ }
67
+ }
68
+ }
69
+ //# sourceMappingURL=route-health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-health.js","sourceRoot":"","sources":["../src/route-health.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { RankedRouteCandidate } from './route-selection.js';
2
+ import type { AffinityDescription, IdFactory, RouteAvailabilityDiagnostic, RoutePlan, VerifiedRoutingSubject } from './routing-contracts.js';
3
+ import type { RoutePolicy } from './routing-policy.js';
4
+ export interface StoredCandidate extends RankedRouteCandidate {
5
+ readonly candidateRef: string;
6
+ }
7
+ export interface StoredPlan {
8
+ readonly plan: RoutePlan;
9
+ readonly subjectRef: string;
10
+ readonly affinityRef?: string;
11
+ readonly affinityRevision?: number;
12
+ readonly policyProfileName?: string;
13
+ readonly policyProfileRevision?: string;
14
+ readonly hadAffinity: boolean;
15
+ readonly candidates: readonly StoredCandidate[];
16
+ readonly policy: RoutePolicy;
17
+ readonly claimedAttempts: Set<string>;
18
+ readonly roundRobinKey?: string;
19
+ }
20
+ export interface StoredAffinity extends AffinityDescription {
21
+ readonly accountRef: string;
22
+ readonly workspaceId?: string;
23
+ }
24
+ export declare class RoutePlanError extends Error {
25
+ readonly code: 'no-route' | 'invalid-plan' | 'expired-plan' | 'stale-candidate' | 'conflict';
26
+ readonly diagnostic?: RouteAvailabilityDiagnostic | undefined;
27
+ constructor(message: string, code: 'no-route' | 'invalid-plan' | 'expired-plan' | 'stale-candidate' | 'conflict', diagnostic?: RouteAvailabilityDiagnostic | undefined);
28
+ }
29
+ export declare const subjectRef: (subject: VerifiedRoutingSubject) => string;
30
+ export declare const routingOwnerRef: (subject: VerifiedRoutingSubject) => string;
31
+ export declare const affinityRef: (subject: VerifiedRoutingSubject, affinityKey: string, workspaceId?: string) => string;
32
+ export declare const mergeRoutePolicy: (base: RoutePolicy, override?: Partial<RoutePolicy>) => RoutePolicy;
33
+ export declare class SequentialIdFactory implements IdFactory {
34
+ private sequence;
35
+ next(prefix: 'plan' | 'candidate' | 'attempt'): string;
36
+ }
37
+ //# sourceMappingURL=route-planner-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-planner-state.d.ts","sourceRoot":"","sources":["../src/route-planner-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EACV,mBAAmB,EACnB,SAAS,EACT,2BAA2B,EAC3B,SAAS,EACT,sBAAsB,EACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,WAAW,eAAgB,SAAQ,oBAAoB;IAC3D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,SAAS,eAAe,EAAE,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,cAAe,SAAQ,mBAAmB;IACzD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,qBAAa,cAAe,SAAQ,KAAK;IAGrC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,GAAG,cAAc,GAAG,iBAAiB,GAAG,UAAU;IAC5F,QAAQ,CAAC,UAAU,CAAC;gBAFpB,OAAO,EAAE,MAAM,EACN,IAAI,EAAE,UAAU,GAAG,cAAc,GAAG,cAAc,GAAG,iBAAiB,GAAG,UAAU,EACnF,UAAU,CAAC,yCAA6B;CAKpD;AAED,eAAO,MAAM,UAAU,YAAa,sBAAsB,KAAG,MACJ,CAAC;AAE1D,eAAO,MAAM,eAAe,YAAa,sBAAsB,KAAG,MAC3C,CAAC;AAExB,eAAO,MAAM,WAAW,YACb,sBAAsB,eAClB,MAAM,gBACL,MAAM,KACnB,MAAmF,CAAC;AAEvF,eAAO,MAAM,gBAAgB,SACrB,WAAW,aACN,QAAQ,WAAW,CAAC,KAC9B,WAKD,CAAC;AAEH,qBAAa,mBAAoB,YAAW,SAAS;IACnD,OAAO,CAAC,QAAQ,CAAK;IAErB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM;CAIvD"}