@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,130 @@
1
+ import type { CapabilityRequirement } from './equivalence-council.js';
2
+ import type { GenerateRequest, GenerateResponse, StreamRequest, StreamResult } from './generation.js';
3
+ import type { RoutePolicy, RouteSelector } from './routing-policy.js';
4
+ export interface VerifiedRoutingSubject {
5
+ readonly principalRef: string;
6
+ readonly ownerScopeRef: string;
7
+ readonly grants?: readonly string[];
8
+ }
9
+ export interface EligibleAccountDescriptor {
10
+ readonly accountRef: string;
11
+ readonly diagnosticAccountRef: string;
12
+ readonly targetProviderId: string;
13
+ readonly transportProviderId: string;
14
+ readonly supportedModelIds: readonly string[];
15
+ readonly enrollmentCompletedAt: string;
16
+ readonly readiness: 'ready' | 'cooldown' | 'reauth-required' | 'disabled';
17
+ readonly revision: string;
18
+ }
19
+ export interface RouteAvailabilityDiagnostic {
20
+ readonly code: 'reenrollment-required' | 'reauth-required';
21
+ readonly transportProviderId: string;
22
+ readonly message: string;
23
+ }
24
+ export interface PlannedRouteTarget {
25
+ readonly requestedModel: string;
26
+ readonly providerId: string;
27
+ readonly modelId: string;
28
+ readonly transportProviderId: string;
29
+ readonly effort?: string;
30
+ readonly reason: 'exact' | 'alias' | 'equivalent' | 'sticky' | 'promoted';
31
+ }
32
+ export interface RoutePlanInput {
33
+ readonly requestedModel: string;
34
+ readonly intent?: 'coding' | 'general' | 'reasoning' | 'fast';
35
+ readonly requiredCapabilities?: readonly CapabilityRequirement[];
36
+ readonly affinityKey?: string;
37
+ readonly workspaceId?: string;
38
+ readonly policyProfile?: string;
39
+ readonly policyOverride?: Partial<RoutePolicy>;
40
+ readonly explicit?: RouteSelector;
41
+ }
42
+ export interface RouteDiagnostic {
43
+ readonly candidateRef: string;
44
+ readonly diagnosticAccountRef: string;
45
+ readonly requestedModel: string;
46
+ readonly actualProviderId: string;
47
+ readonly actualModelId: string;
48
+ readonly actualTransportProviderId: string;
49
+ readonly reason: PlannedRouteTarget['reason'];
50
+ readonly cacheContinuityRisk: boolean;
51
+ readonly suppressed?: boolean;
52
+ }
53
+ export interface RoutePlan {
54
+ readonly planRef: string;
55
+ readonly expiresAt: string;
56
+ readonly candidateRefs: readonly string[];
57
+ readonly policy: RoutePolicy;
58
+ readonly councilRevision: string;
59
+ readonly diagnostics: readonly RouteDiagnostic[];
60
+ }
61
+ export interface RouteModelInventoryEntry {
62
+ readonly modelId: string;
63
+ readonly providerId: string;
64
+ }
65
+ export type RouteOutcomeReason = 'success' | 'network-unavailable' | 'provider-5xx' | 'rate-limited' | 'auth-failed' | 'reauth-required' | 'unsupported-model' | 'invalid-request' | 'cancelled';
66
+ export interface RouteFailureClassification {
67
+ readonly reason: RouteOutcomeReason;
68
+ readonly retryable: boolean;
69
+ readonly retryAfterMs?: number;
70
+ readonly healthScope: 'route' | 'account' | 'transport' | 'provider-model';
71
+ }
72
+ export interface RouteAttemptUsage {
73
+ readonly inputTokens: number;
74
+ readonly outputTokens: number;
75
+ readonly estimated: boolean;
76
+ }
77
+ export interface PreparedRouteAttempt {
78
+ readonly attemptRef: string;
79
+ generate(request: GenerateRequest): Promise<GenerateResponse>;
80
+ stream(request: StreamRequest): Promise<StreamResult>;
81
+ recordOutcome(classification: RouteFailureClassification, usage?: RouteAttemptUsage): Promise<void>;
82
+ markCommitted(): Promise<void>;
83
+ complete(usage?: RouteAttemptUsage): Promise<void>;
84
+ releaseCancelled(): Promise<void>;
85
+ }
86
+ export interface AccountDirectoryPort {
87
+ listEligible(subject: VerifiedRoutingSubject): Promise<readonly EligibleAccountDescriptor[]>;
88
+ listDiagnostics?(subject: VerifiedRoutingSubject): Promise<readonly RouteAvailabilityDiagnostic[]>;
89
+ prepareAttempt(input: {
90
+ readonly subject: VerifiedRoutingSubject;
91
+ /** Mesh-internal affinity reference; never exposed in a route plan. */
92
+ readonly affinityRef?: string;
93
+ readonly accountRef: string;
94
+ readonly target: PlannedRouteTarget;
95
+ readonly requestId: string;
96
+ readonly attemptIndex: number;
97
+ }): Promise<PreparedRouteAttempt>;
98
+ }
99
+ export interface Clock {
100
+ now(): Date;
101
+ }
102
+ export interface IdFactory {
103
+ next(prefix: 'plan' | 'candidate' | 'attempt'): string;
104
+ }
105
+ export interface AffinityDescription {
106
+ readonly affinityRef: string;
107
+ readonly revision: number;
108
+ readonly diagnosticAccountRef: string;
109
+ readonly target: PlannedRouteTarget;
110
+ readonly promoted: boolean;
111
+ }
112
+ export interface AffinityMutationEvent {
113
+ readonly operation: 'promote' | 'reset' | 'rebind';
114
+ readonly subjectRef: string;
115
+ readonly affinityRef: string;
116
+ readonly previousRevision: number;
117
+ readonly nextRevision?: number;
118
+ readonly cacheContinuityRisk: boolean;
119
+ }
120
+ export interface RoutePlanner {
121
+ /** Owner-scoped executable inventory for provider-compatible model listing. */
122
+ listModels?(subject: VerifiedRoutingSubject): Promise<readonly RouteModelInventoryEntry[]>;
123
+ plan(subject: VerifiedRoutingSubject, input: RoutePlanInput): Promise<RoutePlan>;
124
+ prepareAttempt(subject: VerifiedRoutingSubject, planRef: string, candidateRef: string, requestId: string, attemptIndex: number): Promise<PreparedRouteAttempt>;
125
+ describeAffinity(subject: VerifiedRoutingSubject, affinityKey: string, workspaceId?: string): AffinityDescription | null;
126
+ promoteAffinity(subject: VerifiedRoutingSubject, planRef: string, candidateRef: string, expectedRevision?: number): AffinityDescription;
127
+ rebindAffinity(subject: VerifiedRoutingSubject, planRef: string, candidateRef: string, expectedRevision?: number): AffinityDescription;
128
+ resetAffinity(subject: VerifiedRoutingSubject, affinityKey: string, expectedRevision?: number, workspaceId?: string): boolean;
129
+ }
130
+ //# sourceMappingURL=routing-contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routing-contracts.d.ts","sourceRoot":"","sources":["../src/routing-contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=routing-contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routing-contracts.js","sourceRoot":"","sources":["../src/routing-contracts.ts"],"names":[],"mappings":""}
@@ -0,0 +1,68 @@
1
+ import { type CapabilityRequirement } from './equivalence-council.js';
2
+ import type { RoutePlanInput } from './routing-contracts.js';
3
+ export interface RouteSelector {
4
+ readonly providerId?: string;
5
+ readonly modelId?: string;
6
+ readonly alias?: string;
7
+ readonly transportProviderId?: string;
8
+ readonly diagnosticAccountRef?: string;
9
+ }
10
+ export type RouteStrategy = {
11
+ readonly kind: 'last-enrolled';
12
+ } | {
13
+ readonly kind: 'ordered';
14
+ readonly preferences: readonly RouteSelector[];
15
+ } | {
16
+ readonly kind: 'round-robin';
17
+ readonly scope: 'new-affinity';
18
+ };
19
+ export interface RouteRule {
20
+ readonly match: {
21
+ readonly requestedModel?: string;
22
+ readonly alias?: string;
23
+ readonly intent?: 'coding' | 'general' | 'reasoning' | 'fast';
24
+ readonly capabilities?: readonly CapabilityRequirement[];
25
+ };
26
+ readonly strategy?: RouteStrategy;
27
+ readonly preferences?: readonly RouteSelector[];
28
+ readonly fallback?: {
29
+ readonly fallbackMode?: RoutePolicy['fallbackMode'];
30
+ readonly allowEquivalentModels?: boolean;
31
+ readonly rotateEquivalentAccounts?: boolean;
32
+ };
33
+ }
34
+ export interface RoutePolicy {
35
+ readonly strategy: RouteStrategy;
36
+ readonly rules: readonly RouteRule[];
37
+ readonly fallbackMode: 'retest-preferred' | 'one-way';
38
+ readonly negativeCacheTtlMs: number;
39
+ readonly maxAttempts: number;
40
+ readonly preferSameTransport: boolean;
41
+ readonly stickyAccount: boolean;
42
+ readonly rotateEquivalentAccounts: boolean;
43
+ readonly allowEquivalentModels: boolean;
44
+ }
45
+ export interface RoutePolicyProfile {
46
+ readonly name: string;
47
+ readonly revision: string;
48
+ readonly policy: RoutePolicy;
49
+ }
50
+ export declare const DEFAULT_ROUTE_POLICY: RoutePolicy;
51
+ export declare class RoutePolicyError extends Error {
52
+ readonly issues: readonly string[];
53
+ constructor(issues: readonly string[]);
54
+ }
55
+ export declare const validateRoutePolicy: (policy: RoutePolicy) => void;
56
+ export declare const describeRoutePolicy: (policy: RoutePolicy) => string;
57
+ export declare const resolveRoutePolicy: (policy: RoutePolicy, input: RoutePlanInput) => RoutePolicy;
58
+ export declare const resolveRouteStrategy: (policy: RoutePolicy, input: RoutePlanInput) => RouteStrategy;
59
+ export declare class InMemoryRoutePolicyProfiles {
60
+ private readonly profiles;
61
+ private activeName?;
62
+ constructor(profiles?: readonly RoutePolicyProfile[]);
63
+ set(profile: RoutePolicyProfile): void;
64
+ list(): readonly RoutePolicyProfile[];
65
+ activate(name: string, expectedRevision?: string): RoutePolicyProfile;
66
+ active(): RoutePolicyProfile | undefined;
67
+ }
68
+ //# sourceMappingURL=routing-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routing-policy.d.ts","sourceRoot":"","sources":["../src/routing-policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ import { capabilityRequirementEquals, } from './equivalence-council.js';
2
+ export const DEFAULT_ROUTE_POLICY = {
3
+ strategy: { kind: 'last-enrolled' },
4
+ rules: [],
5
+ fallbackMode: 'retest-preferred',
6
+ negativeCacheTtlMs: 300_000,
7
+ maxAttempts: 3,
8
+ preferSameTransport: true,
9
+ stickyAccount: true,
10
+ rotateEquivalentAccounts: false,
11
+ allowEquivalentModels: true,
12
+ };
13
+ export class RoutePolicyError extends Error {
14
+ issues;
15
+ constructor(issues) {
16
+ super(issues.join('; '));
17
+ this.issues = issues;
18
+ this.name = 'RoutePolicyError';
19
+ }
20
+ }
21
+ const validateStrategy = (strategy, path, issues) => {
22
+ if (strategy.kind === 'ordered' && strategy.preferences.length === 0) {
23
+ issues.push(`${path}.preferences must not be empty`);
24
+ }
25
+ if (strategy.kind === 'round-robin' && strategy.scope !== 'new-affinity') {
26
+ issues.push(`${path}.scope must be new-affinity`);
27
+ }
28
+ };
29
+ export const validateRoutePolicy = (policy) => {
30
+ const issues = [];
31
+ if (policy.negativeCacheTtlMs < 1_000 || policy.negativeCacheTtlMs > 3_600_000) {
32
+ issues.push('negativeCacheTtlMs must be between 1000 and 3600000');
33
+ }
34
+ if (!Number.isInteger(policy.maxAttempts) || policy.maxAttempts < 1 || policy.maxAttempts > 8) {
35
+ issues.push('maxAttempts must be an integer between 1 and 8');
36
+ }
37
+ validateStrategy(policy.strategy, 'strategy', issues);
38
+ policy.rules.forEach((rule, index) => {
39
+ if (Object.keys(rule.match).length === 0)
40
+ issues.push(`rules[${index}].match must not be empty`);
41
+ if (rule.strategy)
42
+ validateStrategy(rule.strategy, `rules[${index}].strategy`, issues);
43
+ });
44
+ if (issues.length > 0)
45
+ throw new RoutePolicyError(issues);
46
+ };
47
+ export const describeRoutePolicy = (policy) => JSON.stringify(policy);
48
+ export const resolveRoutePolicy = (policy, input) => {
49
+ const rule = policy.rules.find((candidate) => (!candidate.match.requestedModel || candidate.match.requestedModel === input.requestedModel)
50
+ && (!candidate.match.alias || candidate.match.alias === input.requestedModel)
51
+ && (!candidate.match.intent || candidate.match.intent === input.intent)
52
+ && (!candidate.match.capabilities || candidate.match.capabilities.every((capability) => input.requiredCapabilities?.some((required) => capabilityRequirementEquals(required, capability)))));
53
+ return rule?.fallback ? { ...policy, ...rule.fallback } : policy;
54
+ };
55
+ export const resolveRouteStrategy = (policy, input) => {
56
+ const rule = policy.rules.find((candidate) => (!candidate.match.requestedModel || candidate.match.requestedModel === input.requestedModel)
57
+ && (!candidate.match.alias || candidate.match.alias === input.requestedModel)
58
+ && (!candidate.match.intent || candidate.match.intent === input.intent)
59
+ && (!candidate.match.capabilities || candidate.match.capabilities.every((capability) => input.requiredCapabilities?.some((required) => capabilityRequirementEquals(required, capability)))));
60
+ if (rule?.strategy)
61
+ return rule.strategy;
62
+ if (rule?.preferences)
63
+ return { kind: 'ordered', preferences: rule.preferences };
64
+ return policy.strategy;
65
+ };
66
+ export class InMemoryRoutePolicyProfiles {
67
+ profiles = new Map();
68
+ activeName;
69
+ constructor(profiles = []) {
70
+ profiles.forEach((profile) => this.set(profile));
71
+ }
72
+ set(profile) {
73
+ validateRoutePolicy(profile.policy);
74
+ this.profiles.set(profile.name, profile);
75
+ }
76
+ list() {
77
+ return [...this.profiles.values()].sort((a, b) => a.name.localeCompare(b.name));
78
+ }
79
+ activate(name, expectedRevision) {
80
+ const profile = this.profiles.get(name);
81
+ if (!profile)
82
+ throw new RoutePolicyError([`unknown profile: ${name}`]);
83
+ if (expectedRevision && profile.revision !== expectedRevision) {
84
+ throw new RoutePolicyError([`profile revision changed: ${name}`]);
85
+ }
86
+ this.activeName = name;
87
+ return profile;
88
+ }
89
+ active() {
90
+ return this.activeName ? this.profiles.get(this.activeName) : undefined;
91
+ }
92
+ }
93
+ //# sourceMappingURL=routing-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routing-policy.js","sourceRoot":"","sources":["../src/routing-policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export interface TargetMapping {
2
+ readonly providerId: string;
3
+ readonly transportProviderId: string;
4
+ readonly model: string;
5
+ readonly effort?: string;
6
+ }
7
+ export interface LaunchAliasDefinition extends TargetMapping {
8
+ readonly alias: string;
9
+ }
10
+ export interface TargetRouteDescription extends TargetMapping {
11
+ readonly requestedId: string;
12
+ readonly kind: 'faithful' | 'alias';
13
+ }
14
+ export type ModelTargetResolver = (model: string) => TargetMapping | undefined;
15
+ export declare const defineLaunchAliases: (definitions: readonly LaunchAliasDefinition[]) => Readonly<Record<string, TargetMapping>>;
16
+ export declare const DEFAULT_TARGET_MAPPINGS: Readonly<Record<string, TargetMapping>>;
17
+ export declare const LAUNCH_ALIAS_TARGET_MAPPINGS: Readonly<Record<string, TargetMapping>>;
18
+ export declare const CANONICAL_TARGET_MAPPINGS: Readonly<Record<string, TargetMapping>>;
19
+ export declare const createStaticTargetResolver: (options: {
20
+ readonly mappings: Readonly<Record<string, TargetMapping>>;
21
+ }) => ModelTargetResolver;
22
+ export declare const createCanonicalTargetResolver: () => ModelTargetResolver;
23
+ export declare const describeTargetRoutes: (mappings: Readonly<Record<string, TargetMapping>>) => readonly TargetRouteDescription[];
24
+ export declare const describeCanonicalTargetRoutes: () => readonly TargetRouteDescription[];
25
+ //# sourceMappingURL=routing-targets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routing-targets.d.ts","sourceRoot":"","sources":["../src/routing-targets.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAC1D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,sBAAuB,SAAQ,aAAa;IAC3D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC;CACrC;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,aAAa,GAAG,SAAS,CAAC;AAE/E,eAAO,MAAM,mBAAmB,gBACjB,SAAS,qBAAqB,EAAE,KAC5C,SAAS,OAAO,MAAM,EAAE,aAAa,CAAC,CAExC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAsB3E,CAAC;AAEF,eAAO,MAAM,4BAA4B,yCAQvC,CAAC;AAEH,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAG7E,CAAC;AAEF,eAAO,MAAM,0BAA0B,YAAa;IAClD,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;CAC5D,KAAG,mBAAyD,CAAC;AAE9D,eAAO,MAAM,6BAA6B,QAAO,mBACoB,CAAC;AAEtE,eAAO,MAAM,oBAAoB,aACrB,SAAS,OAAO,MAAM,EAAE,aAAa,CAAC,CAAC,KAChD,SAAS,sBAAsB,EAMyC,CAAC;AAE5E,eAAO,MAAM,6BAA6B,QAAO,SAAS,sBAAsB,EAC/B,CAAC"}
@@ -0,0 +1,48 @@
1
+ export const defineLaunchAliases = (definitions) => Object.fromEntries(definitions.map(({ alias, ...target }) => [alias, target]));
2
+ export const DEFAULT_TARGET_MAPPINGS = {
3
+ 'claude-sonnet-5': {
4
+ providerId: 'anthropic', transportProviderId: 'claude-code', model: 'claude-sonnet-5',
5
+ },
6
+ 'claude-opus-5': {
7
+ providerId: 'anthropic', transportProviderId: 'claude-code', model: 'claude-opus-5',
8
+ },
9
+ 'claude-opus-4-8': {
10
+ providerId: 'anthropic', transportProviderId: 'claude-code', model: 'claude-opus-4-8',
11
+ },
12
+ 'claude-fable-5': {
13
+ providerId: 'anthropic', transportProviderId: 'claude-code', model: 'claude-fable-5',
14
+ },
15
+ 'gpt-5.6-luna': {
16
+ providerId: 'openai', transportProviderId: 'codex', model: 'gpt-5.6-luna',
17
+ },
18
+ 'gpt-5.6-sol': {
19
+ providerId: 'openai', transportProviderId: 'codex', model: 'gpt-5.6-sol',
20
+ },
21
+ 'gpt-5.6-terra': {
22
+ providerId: 'openai', transportProviderId: 'codex', model: 'gpt-5.6-terra',
23
+ },
24
+ };
25
+ export const LAUNCH_ALIAS_TARGET_MAPPINGS = defineLaunchAliases([
26
+ { alias: 'claude-opus-5-high', providerId: 'openai', transportProviderId: 'codex', model: 'gpt-5.6-terra', effort: 'high' },
27
+ { alias: 'claude-opus-5-xhigh', providerId: 'openai', transportProviderId: 'codex', model: 'gpt-5.6-terra', effort: 'xhigh' },
28
+ { alias: 'claude-opus-4-8-xhigh', providerId: 'openai', transportProviderId: 'codex', model: 'gpt-5.6-terra', effort: 'xhigh' },
29
+ { alias: 'claude-fable-5-high', providerId: 'openai', transportProviderId: 'codex', model: 'gpt-5.6-sol', effort: 'high' },
30
+ { alias: 'claude-fable-5-xhigh', providerId: 'openai', transportProviderId: 'codex', model: 'gpt-5.6-sol', effort: 'xhigh' },
31
+ { alias: 'claude-fable-5-max', providerId: 'openai', transportProviderId: 'codex', model: 'gpt-5.6-sol', effort: 'max' },
32
+ { alias: 'claude-sonnet-5-xhigh', providerId: 'openai', transportProviderId: 'codex', model: 'gpt-5.6-luna', effort: 'xhigh' },
33
+ ]);
34
+ export const CANONICAL_TARGET_MAPPINGS = {
35
+ ...DEFAULT_TARGET_MAPPINGS,
36
+ ...LAUNCH_ALIAS_TARGET_MAPPINGS,
37
+ };
38
+ export const createStaticTargetResolver = (options) => (model) => options.mappings[model];
39
+ export const createCanonicalTargetResolver = () => createStaticTargetResolver({ mappings: CANONICAL_TARGET_MAPPINGS });
40
+ export const describeTargetRoutes = (mappings) => Object.entries(mappings)
41
+ .map(([requestedId, target]) => ({
42
+ requestedId,
43
+ ...target,
44
+ kind: requestedId === target.model ? 'faithful' : 'alias',
45
+ }))
46
+ .sort((left, right) => left.requestedId.localeCompare(right.requestedId));
47
+ export const describeCanonicalTargetRoutes = () => describeTargetRoutes(CANONICAL_TARGET_MAPPINGS);
48
+ //# sourceMappingURL=routing-targets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routing-targets.js","sourceRoot":"","sources":["../src/routing-targets.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,49 @@
1
1
  import type { AccountTransportAcquireInput, AccountTransportAcquisition } from '../account-transports.js';
2
2
  import type { AccountTransportProviderId } from '../auth.js';
3
3
  import type { EnrollmentSession, StartEnrollmentInput } from '../enrollment/contracts.js';
4
+ import type { LlmMesh } from '../mesh.js';
5
+ import { type InMemoryRoutePlannerOptions } from '../route-planner.js';
6
+ import type { RoutePlanner } from '../routing-contracts.js';
4
7
  export interface ProviderRequest {
5
8
  modelId: string;
6
9
  contents: unknown[];
7
10
  generationConfig?: unknown;
11
+ systemInstruction?: unknown;
12
+ tools?: unknown[];
13
+ toolConfig?: unknown;
14
+ diagnostics?: readonly {
15
+ code: string;
16
+ message: string;
17
+ metadata?: Record<string, unknown>;
18
+ }[];
8
19
  }
9
20
  export type ProviderEvent = {
10
21
  kind: 'content';
11
22
  delta: string;
23
+ } | {
24
+ kind: 'reasoning';
25
+ delta: string;
26
+ } | {
27
+ kind: 'tool-call';
28
+ id: string;
29
+ name: string;
30
+ arguments: unknown;
31
+ metadata?: Record<string, unknown>;
32
+ } | {
33
+ kind: 'diagnostic';
34
+ code: string;
35
+ message: string;
36
+ metadata?: Record<string, unknown>;
12
37
  } | {
13
38
  kind: 'done';
14
39
  usage: unknown;
40
+ finishReason?: string;
15
41
  } | {
16
42
  kind: 'error';
17
43
  code: string;
18
44
  message: string;
45
+ statusCode?: number;
46
+ retryAfterMs?: number;
19
47
  };
20
48
  export interface ProviderAdapter {
21
49
  execute(acquisition: AccountTransportAcquisition, request: ProviderRequest, signal: AbortSignal): AsyncIterable<ProviderEvent>;
@@ -32,6 +60,8 @@ export interface FacadeOptions {
32
60
  configResolver: ConfigResolver;
33
61
  keyring?: KeyringAdapter;
34
62
  mode: 'cli' | 'portal';
63
+ /** Explicit owner used only to bind pre-ownerScope local keyring records. */
64
+ legacyAccountOwnerScopeRef?: string;
35
65
  }
36
66
  export interface LlmMeshFacade {
37
67
  enroll(providerId: AccountTransportProviderId, input: StartEnrollmentInput): Promise<EnrollmentSession>;
@@ -47,6 +77,7 @@ export interface LlmMeshFacade {
47
77
  acquire(input: AccountTransportAcquireInput): Promise<AccountTransportAcquisition>;
48
78
  release(acquisition: AccountTransportAcquisition): Promise<void>;
49
79
  getAdapter(providerId: AccountTransportProviderId): ProviderAdapter;
80
+ createRoutePlanner(runtime: Pick<LlmMesh, 'generate' | 'stream'>, options?: Omit<InMemoryRoutePlannerOptions, 'directory'>): RoutePlanner;
50
81
  }
51
82
  export declare function createLlmMeshFacade(options: FacadeOptions): LlmMeshFacade;
52
83
  //# sourceMappingURL=facade.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"facade.d.ts","sourceRoot":"","sources":["../../src/service/facade.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,4BAA4B,EAC5B,2BAA2B,EAC5B,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EAEV,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,4BAA4B,CAAC;AASpC,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,OAAO,CACL,WAAW,EAAE,2BAA2B,EACxC,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,WAAW,GAClB,aAAa,CAAC,aAAa,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAE5B,MAAM,CACJ,UAAU,EAAE,0BAA0B,EACtC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC9B,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrF,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvF,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAG5C,OAAO,CAAC,KAAK,EAAE,4BAA4B,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;IACnF,OAAO,CAAC,WAAW,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAGjE,UAAU,CAAC,UAAU,EAAE,0BAA0B,GAAG,eAAe,CAAC;CACrE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CAiDzE"}
1
+ {"version":3,"file":"facade.d.ts","sourceRoot":"","sources":["../../src/service/facade.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ import { EncryptedFileKeyring } from '../node/keyring/encrypted-file-keyring.js'
5
5
  import { InMemoryKeyring } from '../node/keyring/in-memory-keyring.js';
6
6
  import { CloudCodeProviderAdapter } from '../transport/cloud-code-transport.js';
7
7
  import { LocalAccountTransportService } from './local-account-transport-service.js';
8
+ import { InMemoryRoutePlanner, } from '../route-planner.js';
8
9
  export function createLlmMeshFacade(options) {
9
10
  if (!options) {
10
11
  throw new Error('LlmMeshFacade: options is required');
@@ -22,7 +23,7 @@ export function createLlmMeshFacade(options) {
22
23
  ['codex', new CodexEnrollmentProvider({ configResolver: options.configResolver })],
23
24
  ['claude-code', new ClaudeCodeEnrollmentProvider()],
24
25
  ]);
25
- const service = new LocalAccountTransportService(keyring, providers, options.configResolver);
26
+ const service = new LocalAccountTransportService(keyring, providers, options.configResolver, options.legacyAccountOwnerScopeRef);
26
27
  return {
27
28
  async enroll(providerId, input) {
28
29
  return service.enroll(providerId, input);
@@ -48,6 +49,12 @@ export function createLlmMeshFacade(options) {
48
49
  }
49
50
  throw new Error(`Adapter for ${providerId} not available locally`);
50
51
  },
52
+ createRoutePlanner(runtime, routeOptions = {}) {
53
+ return new InMemoryRoutePlanner({
54
+ ...routeOptions,
55
+ directory: service.createRouteDirectory(runtime),
56
+ });
57
+ },
51
58
  };
52
59
  }
53
60
  //# sourceMappingURL=facade.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"facade.js","sourceRoot":"","sources":["../../src/service/facade.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AAuDpF,MAAM,UAAU,mBAAmB,CAAC,OAAsB;IACxD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,OAAO,GACX,OAAO,CAAC,OAAO;QACf,CAAC,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;IAChF,MAAM,SAAS,GAAG,IAAI,GAAG,CAA6B;QACpD;YACE,YAAY;YACZ,IAAI,2BAA2B,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;SAC5E;QACD,CAAC,OAAO,EAAE,IAAI,uBAAuB,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QAClF,CAAC,aAAa,EAAE,IAAI,4BAA4B,EAAE,CAAC;KACpD,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAI,4BAA4B,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAE7F,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK;YAC5B,OAAO,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;QACD,KAAK,CAAC,eAAe,CAAC,YAAY;YAChC,OAAO,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QAC/C,CAAC;QACD,KAAK,CAAC,iBAAiB,CAAC,YAAY;YAClC,OAAO,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QACjD,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,YAAY;YACvB,OAAO,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACtC,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,KAAK;YACjB,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,WAAW;YACvB,OAAO,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACtC,CAAC;QACD,UAAU,CAAC,UAAU;YACnB,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;gBAChC,OAAO,IAAI,wBAAwB,EAAE,CAAC;YACxC,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,eAAe,UAAU,wBAAwB,CAAC,CAAC;QACrE,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"facade.js","sourceRoot":"","sources":["../../src/service/facade.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AAEpF,OAAO,EACL,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAkF7B,MAAM,UAAU,mBAAmB,CAAC,OAAsB;IACxD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,OAAO,GACX,OAAO,CAAC,OAAO;QACf,CAAC,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;IAChF,MAAM,SAAS,GAAG,IAAI,GAAG,CAA6B;QACpD;YACE,YAAY;YACZ,IAAI,2BAA2B,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;SAC5E;QACD,CAAC,OAAO,EAAE,IAAI,uBAAuB,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QAClF,CAAC,aAAa,EAAE,IAAI,4BAA4B,EAAE,CAAC;KACpD,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAI,4BAA4B,CAC9C,OAAO,EACP,SAAS,EACT,OAAO,CAAC,cAAc,EACtB,OAAO,CAAC,0BAA0B,CACnC,CAAC;IAEF,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK;YAC5B,OAAO,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;QACD,KAAK,CAAC,eAAe,CAAC,YAAY;YAChC,OAAO,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QAC/C,CAAC;QACD,KAAK,CAAC,iBAAiB,CAAC,YAAY;YAClC,OAAO,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QACjD,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,YAAY;YACvB,OAAO,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACtC,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,KAAK;YACjB,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,WAAW;YACvB,OAAO,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACtC,CAAC;QACD,UAAU,CAAC,UAAU;YACnB,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;gBAChC,OAAO,IAAI,wBAAwB,EAAE,CAAC;YACxC,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,eAAe,UAAU,wBAAwB,CAAC,CAAC;QACrE,CAAC;QACD,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,EAAE;YAC3C,OAAO,IAAI,oBAAoB,CAAC;gBAC9B,GAAG,YAAY;gBACf,SAAS,EAAE,OAAO,CAAC,oBAAoB,CAAC,OAAO,CAAC;aACjD,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,16 +1,20 @@
1
1
  import { type AccountTransportAccount, type AccountTransportAcquireInput, type AccountTransportAcquisition } from '../account-transports.js';
2
2
  import type { EnrollmentProvider, EnrollmentSession, StartEnrollmentInput } from '../enrollment/contracts.js';
3
3
  import type { ConfigResolver, KeyringAdapter } from './facade.js';
4
+ import type { LlmMesh } from '../mesh.js';
5
+ import type { AccountDirectoryPort } from '../routing-contracts.js';
4
6
  export declare class LocalAccountTransportService {
5
7
  private readonly keyring;
6
8
  private readonly providers;
7
9
  private readonly configResolver;
10
+ private readonly legacyAccountOwnerScopeRef?;
8
11
  private static readonly accountIndexKey;
9
12
  private readonly coordinator;
10
13
  private readonly accountsMap;
11
14
  private readonly credentialVersions;
12
15
  private readonly refreshInFlight;
13
- constructor(keyring: KeyringAdapter, providers: Map<string, EnrollmentProvider>, configResolver: ConfigResolver);
16
+ private routeAttemptSequence;
17
+ constructor(keyring: KeyringAdapter, providers: Map<string, EnrollmentProvider>, configResolver: ConfigResolver, legacyAccountOwnerScopeRef?: string | undefined);
14
18
  enroll(providerId: string, input: StartEnrollmentInput): Promise<EnrollmentSession>;
15
19
  waitForCallback(enrollmentId: string): Promise<{
16
20
  accountId: string;
@@ -23,10 +27,16 @@ export declare class LocalAccountTransportService {
23
27
  cancel(enrollmentId: string): Promise<void>;
24
28
  registerAccount(account: AccountTransportAccount, configVersion?: string): void;
25
29
  acquire(input: AccountTransportAcquireInput): Promise<AccountTransportAcquisition>;
26
- release(_acquisition: AccountTransportAcquisition): Promise<void>;
30
+ release(acquisition: AccountTransportAcquisition): Promise<void>;
31
+ createRouteDirectory(runtime: Pick<LlmMesh, 'generate' | 'stream'>): AccountDirectoryPort;
32
+ private listRouteDiagnostics;
33
+ private listRouteAccounts;
34
+ private routeAttempt;
35
+ private diagnosticAccountRef;
27
36
  private completeEnrollment;
28
37
  private refreshToken;
29
38
  private persistCredential;
39
+ private persistAccountState;
30
40
  private parseAccountIndex;
31
41
  private restorePersistedAccounts;
32
42
  private markReauthRequired;
@@ -1 +1 @@
1
- {"version":3,"file":"local-account-transport-service.d.ts","sourceRoot":"","sources":["../../src/service/local-account-transport-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EACjC,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAIV,kBAAkB,EAClB,iBAAiB,EAGjB,oBAAoB,EACrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAWlE,qBAAa,4BAA4B;IAQrC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc;IATjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAuC;IAC9E,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8C;IAC1E,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA6B;IAChE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkD;gBAG/D,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAC1C,cAAc,EAAE,cAAc;IAM3C,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAQnF,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IA0CpF,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IA2CtF,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASjD,eAAe,CAAC,OAAO,EAAE,uBAAuB,EAAE,aAAa,SAAW,GAAG,IAAI;IAO3E,OAAO,CAAC,KAAK,EAAE,4BAA4B,GAAG,OAAO,CAAC,2BAA2B,CAAC;IA4ElF,OAAO,CAAC,YAAY,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC;YAMzD,kBAAkB;YAIlB,YAAY;YA0BZ,iBAAiB;IA4B/B,OAAO,CAAC,iBAAiB;YAYX,wBAAwB;YA0BxB,kBAAkB;CAMjC"}
1
+ {"version":3,"file":"local-account-transport-service.d.ts","sourceRoot":"","sources":["../../src/service/local-account-transport-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EACjC,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAIV,kBAAkB,EAClB,iBAAiB,EAGjB,oBAAoB,EACrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,KAAK,EACV,oBAAoB,EAErB,MAAM,yBAAyB,CAAC;AA2BjC,qBAAa,4BAA4B;IASrC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAX9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAuC;IAC9E,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8C;IAC1E,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA6B;IAChE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkD;IAClF,OAAO,CAAC,oBAAoB,CAAK;gBAGd,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAC1C,cAAc,EAAE,cAAc,EAC9B,0BAA0B,CAAC,oBAAQ;IAMhD,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAQnF,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IA4CpF,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IA6CtF,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASjD,eAAe,CAAC,OAAO,EAAE,uBAAuB,EAAE,aAAa,SAAW,GAAG,IAAI;IAO3E,OAAO,CAAC,KAAK,EAAE,4BAA4B,GAAG,OAAO,CAAC,2BAA2B,CAAC;IA4ElF,OAAO,CAAC,WAAW,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtE,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,QAAQ,CAAC,GAAG,oBAAoB;YAsB3E,oBAAoB;YA0BpB,iBAAiB;IA8B/B,OAAO,CAAC,YAAY;IAgDpB,OAAO,CAAC,oBAAoB;YAOd,kBAAkB;YAIlB,YAAY;YA0BZ,iBAAiB;YA4BjB,mBAAmB;IAwBjC,OAAO,CAAC,iBAAiB;YAYX,wBAAwB;YA6CxB,kBAAkB;CAOjC"}