@sentropic/llm-mesh 0.24.1 → 0.26.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.
- package/README.md +192 -0
- package/dist/catalog.d.ts +92 -0
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +47 -0
- package/dist/catalog.js.map +1 -1
- package/dist/enrollment/claude-code.d.ts +27 -5
- package/dist/enrollment/claude-code.d.ts.map +1 -1
- package/dist/enrollment/claude-code.js +224 -10
- package/dist/enrollment/claude-code.js.map +1 -1
- package/dist/enrollment/codex.d.ts +7 -0
- package/dist/enrollment/codex.d.ts.map +1 -1
- package/dist/enrollment/codex.js +74 -19
- package/dist/enrollment/codex.js.map +1 -1
- package/dist/enrollment/index.d.ts +1 -1
- package/dist/enrollment/index.d.ts.map +1 -1
- package/dist/enrollment/pkce.js +1 -1
- package/dist/errors.d.ts +19 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +51 -4
- package/dist/errors.js.map +1 -1
- package/dist/execution-features.d.ts +34 -0
- package/dist/execution-features.d.ts.map +1 -0
- package/dist/execution-features.js +84 -0
- package/dist/execution-features.js.map +1 -0
- package/dist/generated-model-council.d.ts +2 -2
- package/dist/generated-model-council.d.ts.map +1 -1
- package/dist/generated-model-council.js +5 -1
- package/dist/generated-model-council.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/native-messages.d.ts +130 -0
- package/dist/native-messages.d.ts.map +1 -0
- package/dist/native-messages.js +66 -0
- package/dist/native-messages.js.map +1 -0
- package/dist/providers.d.ts +5 -5
- package/dist/providers.d.ts.map +1 -1
- package/dist/providers.js +12 -5
- package/dist/providers.js.map +1 -1
- package/dist/responses-wire.d.ts +76 -0
- package/dist/responses-wire.d.ts.map +1 -0
- package/dist/responses-wire.js +35 -0
- package/dist/responses-wire.js.map +1 -0
- package/dist/route-attempt.d.ts +4 -0
- package/dist/route-attempt.d.ts.map +1 -1
- package/dist/route-attempt.js +8 -1
- package/dist/route-attempt.js.map +1 -1
- package/dist/route-health.d.ts +11 -0
- package/dist/route-health.d.ts.map +1 -1
- package/dist/route-health.js +32 -0
- package/dist/route-health.js.map +1 -1
- package/dist/route-planner-state.d.ts +33 -2
- package/dist/route-planner-state.d.ts.map +1 -1
- package/dist/route-planner-state.js +20 -1
- package/dist/route-planner-state.js.map +1 -1
- package/dist/route-planner.d.ts +21 -1
- package/dist/route-planner.d.ts.map +1 -1
- package/dist/route-planner.js +112 -33
- package/dist/route-planner.js.map +1 -1
- package/dist/route-quote.d.ts +16 -2
- package/dist/route-quote.d.ts.map +1 -1
- package/dist/route-quote.js +31 -5
- package/dist/route-quote.js.map +1 -1
- package/dist/route-selection.d.ts +13 -0
- package/dist/route-selection.d.ts.map +1 -1
- package/dist/route-selection.js +30 -5
- package/dist/route-selection.js.map +1 -1
- package/dist/routing-contracts.d.ts +42 -3
- package/dist/routing-contracts.d.ts.map +1 -1
- package/dist/routing-targets.d.ts +26 -0
- package/dist/routing-targets.d.ts.map +1 -1
- package/dist/routing-targets.js +96 -23
- package/dist/routing-targets.js.map +1 -1
- package/dist/service/facade.d.ts +3 -0
- package/dist/service/facade.d.ts.map +1 -1
- package/dist/service/facade.js +7 -1
- package/dist/service/facade.js.map +1 -1
- package/dist/service/local-account-transport-service.d.ts +18 -0
- package/dist/service/local-account-transport-service.d.ts.map +1 -1
- package/dist/service/local-account-transport-service.js +284 -46
- package/dist/service/local-account-transport-service.js.map +1 -1
- package/dist/transport/claude-code-runtime-client.d.ts +88 -0
- package/dist/transport/claude-code-runtime-client.d.ts.map +1 -0
- package/dist/transport/claude-code-runtime-client.js +305 -0
- package/dist/transport/claude-code-runtime-client.js.map +1 -0
- package/dist/transport/codex-runtime-client.d.ts.map +1 -1
- package/dist/transport/codex-runtime-client.js +24 -4
- package/dist/transport/codex-runtime-client.js.map +1 -1
- package/dist/transport/codex-runtime-wire.d.ts.map +1 -1
- package/dist/transport/codex-runtime-wire.js +131 -27
- package/dist/transport/codex-runtime-wire.js.map +1 -1
- package/dist/transport/mistral-runtime-client.d.ts.map +1 -1
- package/dist/transport/mistral-runtime-client.js +191 -9
- package/dist/transport/mistral-runtime-client.js.map +1 -1
- package/dist/transport/muse-runtime-client.d.ts.map +1 -1
- package/dist/transport/muse-runtime-client.js +221 -10
- package/dist/transport/muse-runtime-client.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed allowlisted native Responses carrier (spec §16.3). Holds validated
|
|
3
|
+
* Responses input/output semantics that have no canonical message
|
|
4
|
+
* equivalent, in `providerOptions` / event metadata / `providerMetadata`,
|
|
5
|
+
* for native input order, item identity, completed reasoning artifacts and
|
|
6
|
+
* terminal output snapshots.
|
|
7
|
+
*
|
|
8
|
+
* Constructed from validated fields only — never copies caller routing or
|
|
9
|
+
* auth controls. Only the matching native adapter consumes it; public
|
|
10
|
+
* responses filter it again (credentials, raw provider errors and internal
|
|
11
|
+
* headers never enter it). No Hono or caller-auth dependency.
|
|
12
|
+
*/
|
|
13
|
+
/** Validated custom/freeform tool, carried opaquely for native execution. */
|
|
14
|
+
export interface ResponsesCustomTool {
|
|
15
|
+
readonly type: 'custom';
|
|
16
|
+
/** Bare tool name as declared (namespace carried separately). */
|
|
17
|
+
readonly name: string;
|
|
18
|
+
readonly description?: string;
|
|
19
|
+
/** Codex freeform format (string marker or grammar object, carried opaquely). */
|
|
20
|
+
readonly format?: string | Record<string, unknown>;
|
|
21
|
+
/** Declaring namespace, when nested (Codex `additional_tools`). */
|
|
22
|
+
readonly namespace?: string;
|
|
23
|
+
readonly providerMetadata?: Record<string, unknown>;
|
|
24
|
+
}
|
|
25
|
+
/** Function tool identity preserved through namespace flattening. */
|
|
26
|
+
export interface ResponsesFunctionToolRef {
|
|
27
|
+
readonly qualifiedName: string;
|
|
28
|
+
readonly bareName: string;
|
|
29
|
+
readonly namespace?: string;
|
|
30
|
+
}
|
|
31
|
+
/** Completed reasoning history item, preserved for native replay. */
|
|
32
|
+
export interface ResponsesReasoningArtifact {
|
|
33
|
+
readonly itemId?: string;
|
|
34
|
+
readonly summary?: string;
|
|
35
|
+
/** Opaque encrypted content — never fabricated, never exposed as text. */
|
|
36
|
+
readonly encryptedContent?: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Allowlisted native request carrier. Custom tools, reasoning context and
|
|
40
|
+
* verbosity are consumable only by a native Responses adapter (Codex);
|
|
41
|
+
* translated adapters refuse the round trip when these are present via
|
|
42
|
+
* execution-feature eligibility.
|
|
43
|
+
*/
|
|
44
|
+
export interface ResponsesNativeRequestCarrier {
|
|
45
|
+
readonly customTools: readonly ResponsesCustomTool[];
|
|
46
|
+
readonly functionToolRefs: readonly ResponsesFunctionToolRef[];
|
|
47
|
+
readonly reasoningArtifacts: readonly ResponsesReasoningArtifact[];
|
|
48
|
+
/** Codex server-side retention hint; native-only, never routed upon. */
|
|
49
|
+
readonly reasoningContext?: string;
|
|
50
|
+
/** Requested verbosity level; native-only unless an equivalent is proven. */
|
|
51
|
+
readonly verbosity?: string;
|
|
52
|
+
/** Opaque client cache hint; forwarded only to declaring adapters. */
|
|
53
|
+
readonly promptCacheKey?: string;
|
|
54
|
+
readonly safetyIdentifier?: string;
|
|
55
|
+
/** Validated harmless telemetry (object of scalars, bounded). */
|
|
56
|
+
readonly clientMetadata?: Record<string, unknown>;
|
|
57
|
+
/** Validated request metadata echo (bounded, never routing). */
|
|
58
|
+
readonly requestMetadata?: Record<string, unknown>;
|
|
59
|
+
/** Native input item ids in order (identity/order preservation). */
|
|
60
|
+
readonly itemIds: readonly string[];
|
|
61
|
+
}
|
|
62
|
+
export declare const RESPONSES_CARRIER_OPTION_KEY: "responses";
|
|
63
|
+
/**
|
|
64
|
+
* Read the validated Responses carrier off a canonical request's
|
|
65
|
+
* `providerOptions`. Undefined on non-Responses wires; translated adapters
|
|
66
|
+
* other than the Responses path never consult it.
|
|
67
|
+
*/
|
|
68
|
+
export declare const responsesCarrierOf: (providerOptions: Record<string, unknown> | undefined) => ResponsesNativeRequestCarrier | undefined;
|
|
69
|
+
/**
|
|
70
|
+
* Requalify returned tool-call names through the ingress refs (spec §16.3):
|
|
71
|
+
* providers echo the bare canonical name the translated/native adapter sent,
|
|
72
|
+
* but the client declared (and awaits) the qualified `namespace.name`.
|
|
73
|
+
* Unknown names pass through untouched — never dropped, never renamed.
|
|
74
|
+
*/
|
|
75
|
+
export declare const requalifyResponseToolName: (bareName: string, carrier: ResponsesNativeRequestCarrier | undefined) => string;
|
|
76
|
+
//# sourceMappingURL=responses-wire.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responses-wire.d.ts","sourceRoot":"","sources":["../src/responses-wire.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,6EAA6E;AAC7E,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,iFAAiF;IACjF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnD,mEAAmE;IACnE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrD;AAED,qEAAqE;AACrE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,qEAAqE;AACrE,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,0EAA0E;IAC1E,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED;;;;;GAKG;AACH,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,WAAW,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACrD,QAAQ,CAAC,gBAAgB,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAC/D,QAAQ,CAAC,kBAAkB,EAAE,SAAS,0BAA0B,EAAE,CAAC;IACnE,wEAAwE;IACxE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,sEAAsE;IACtE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,iEAAiE;IACjE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,gEAAgE;IAChE,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnD,oEAAoE;IACpE,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED,eAAO,MAAM,4BAA4B,aAAuB,CAAC;AAEjE;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,oBACZ,OAAO,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,KACnD,6BAA6B,GAAG,SAIlC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,aAC1B,MAAM,WACP,6BAA6B,GAAG,SAAS,KACjD,MAIF,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed allowlisted native Responses carrier (spec §16.3). Holds validated
|
|
3
|
+
* Responses input/output semantics that have no canonical message
|
|
4
|
+
* equivalent, in `providerOptions` / event metadata / `providerMetadata`,
|
|
5
|
+
* for native input order, item identity, completed reasoning artifacts and
|
|
6
|
+
* terminal output snapshots.
|
|
7
|
+
*
|
|
8
|
+
* Constructed from validated fields only — never copies caller routing or
|
|
9
|
+
* auth controls. Only the matching native adapter consumes it; public
|
|
10
|
+
* responses filter it again (credentials, raw provider errors and internal
|
|
11
|
+
* headers never enter it). No Hono or caller-auth dependency.
|
|
12
|
+
*/
|
|
13
|
+
export const RESPONSES_CARRIER_OPTION_KEY = 'responses';
|
|
14
|
+
/**
|
|
15
|
+
* Read the validated Responses carrier off a canonical request's
|
|
16
|
+
* `providerOptions`. Undefined on non-Responses wires; translated adapters
|
|
17
|
+
* other than the Responses path never consult it.
|
|
18
|
+
*/
|
|
19
|
+
export const responsesCarrierOf = (providerOptions) => {
|
|
20
|
+
const carrier = providerOptions?.[RESPONSES_CARRIER_OPTION_KEY];
|
|
21
|
+
return carrier && typeof carrier === 'object' ? carrier : undefined;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Requalify returned tool-call names through the ingress refs (spec §16.3):
|
|
25
|
+
* providers echo the bare canonical name the translated/native adapter sent,
|
|
26
|
+
* but the client declared (and awaits) the qualified `namespace.name`.
|
|
27
|
+
* Unknown names pass through untouched — never dropped, never renamed.
|
|
28
|
+
*/
|
|
29
|
+
export const requalifyResponseToolName = (bareName, carrier) => {
|
|
30
|
+
if (!carrier)
|
|
31
|
+
return bareName;
|
|
32
|
+
const ref = carrier.functionToolRefs.find((entry) => entry.bareName === bareName);
|
|
33
|
+
return ref?.qualifiedName ?? bareName;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=responses-wire.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responses-wire.js","sourceRoot":"","sources":["../src/responses-wire.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAuDH,MAAM,CAAC,MAAM,4BAA4B,GAAG,WAAoB,CAAC;AAEjE;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,eAAoD,EACT,EAAE;IAC7C,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC,4BAA4B,CACjB,CAAC;IAC9C,OAAO,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AACtE,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,QAAgB,EAChB,OAAkD,EAC1C,EAAE;IACV,IAAI,CAAC,OAAO;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IAClF,OAAO,GAAG,EAAE,aAAa,IAAI,QAAQ,CAAC;AACxC,CAAC,CAAC"}
|
package/dist/route-attempt.d.ts
CHANGED
|
@@ -10,6 +10,10 @@ export declare const prepareStoredRouteAttempt: (input: {
|
|
|
10
10
|
readonly attemptIndex: number;
|
|
11
11
|
readonly directory: AccountDirectoryPort;
|
|
12
12
|
readonly clock: Clock;
|
|
13
|
+
readonly isNativeTarget?: (target: {
|
|
14
|
+
readonly providerId: string;
|
|
15
|
+
readonly modelId: string;
|
|
16
|
+
}) => boolean;
|
|
13
17
|
readonly onOutcome: (stored: StoredPlan, candidate: RankedRouteCandidate, classification: RouteFailureClassification) => void;
|
|
14
18
|
readonly onCommitted: (stored: StoredPlan, candidate: RankedRouteCandidate) => void;
|
|
15
19
|
readonly onSuccess: (stored: StoredPlan, candidate: RankedRouteCandidate) => void;
|
|
@@ -1 +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;
|
|
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;AAG3D,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,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC;IACzG,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,CA2E/B,CAAC"}
|
package/dist/route-attempt.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { RoutePlanError, subjectRef } from './route-planner-state.js';
|
|
2
|
+
import { isPreparedNativeMessages } from './native-messages.js';
|
|
2
3
|
export const prepareStoredRouteAttempt = async (input) => {
|
|
3
4
|
const { stored } = input;
|
|
4
5
|
if (!stored || stored.plan.planRef !== input.planRef) {
|
|
@@ -31,17 +32,23 @@ export const prepareStoredRouteAttempt = async (input) => {
|
|
|
31
32
|
requestId: input.requestId,
|
|
32
33
|
attemptIndex: input.attemptIndex,
|
|
33
34
|
});
|
|
35
|
+
const nativeMessages = (current.nativeMessages?.contractVersion === 1
|
|
36
|
+
&& current.nativeMessages.protocol === 'anthropic-messages'
|
|
37
|
+
&& input.isNativeTarget?.(candidate.target) === true
|
|
38
|
+
&& isPreparedNativeMessages(attempt.nativeMessages)
|
|
39
|
+
&& attempt.nativeMessages.modelId === candidate.target.modelId) ? attempt.nativeMessages : undefined;
|
|
34
40
|
let committed = false;
|
|
35
41
|
let terminal = false;
|
|
36
42
|
return {
|
|
37
43
|
attemptRef: attempt.attemptRef,
|
|
44
|
+
...(nativeMessages ? { nativeMessages } : {}),
|
|
38
45
|
generate: (request) => attempt.generate(request),
|
|
39
46
|
stream: (request) => attempt.stream(request),
|
|
40
47
|
recordOutcome: async (classification, usage) => {
|
|
41
48
|
if (terminal)
|
|
42
49
|
return;
|
|
43
50
|
terminal = true;
|
|
44
|
-
input.onOutcome(stored, candidate, classification);
|
|
51
|
+
input.onOutcome(stored, candidate, committed ? { ...classification, committed: true } : classification);
|
|
45
52
|
await attempt.recordOutcome(classification, usage);
|
|
46
53
|
},
|
|
47
54
|
markCommitted: async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-attempt.js","sourceRoot":"","sources":["../src/route-attempt.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"route-attempt.js","sourceRoot":"","sources":["../src/route-attempt.ts"],"names":[],"mappings":"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"}
|
package/dist/route-health.d.ts
CHANGED
|
@@ -8,6 +8,17 @@ export declare class InMemoryRouteHealth {
|
|
|
8
8
|
constructor(clock: Clock, maximumEntries?: number);
|
|
9
9
|
record(candidate: RankedRouteCandidate, classification: RouteFailureClassification, policy: RoutePolicy): void;
|
|
10
10
|
isSuppressed(candidate: RankedRouteCandidate): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* True when the candidate is suppressed only by locally uncommitted
|
|
13
|
+
* failures (no upstream output observed before failing): as an
|
|
14
|
+
* availability policy a lone suppressed route may degrade instead of
|
|
15
|
+
* starving. This records local observation only — it cannot prove the
|
|
16
|
+
* provider did not execute the request. Provider rate limits are exempt:
|
|
17
|
+
* they carry a provider-asked Retry-After window, and redispatching a
|
|
18
|
+
* lone seat inside that window is a retry storm, not an availability
|
|
19
|
+
* gap — the suppression stands through its own TTL.
|
|
20
|
+
*/
|
|
21
|
+
suppressedDegradable(candidate: RankedRouteCandidate): boolean;
|
|
11
22
|
clear(candidate: RankedRouteCandidate): void;
|
|
12
23
|
private evict;
|
|
13
24
|
}
|
|
@@ -1 +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;
|
|
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;AAqCvD,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;IAuBP,YAAY,CAAC,SAAS,EAAE,oBAAoB,GAAG,OAAO;IAStD;;;;;;;;;OASG;IACH,oBAAoB,CAAC,SAAS,EAAE,oBAAoB,GAAG,OAAO;IAY9D,KAAK,CAAC,SAAS,EAAE,oBAAoB,GAAG,IAAI;IAI5C,OAAO,CAAC,KAAK;CAWd"}
|
package/dist/route-health.js
CHANGED
|
@@ -34,9 +34,19 @@ export class InMemoryRouteHealth {
|
|
|
34
34
|
const requestedTtl = classification.retryAfterMs ?? policy.negativeCacheTtlMs;
|
|
35
35
|
const ttl = Math.min(Math.max(requestedTtl, 1_000), 3_600_000);
|
|
36
36
|
const key = keyFor(candidate, classification.healthScope);
|
|
37
|
+
const now = this.clock.now().getTime();
|
|
38
|
+
const existing = this.entries.get(key);
|
|
39
|
+
if (existing && existing.expiresAt > now && existing.committed
|
|
40
|
+
&& !(classification.committed ?? false)) {
|
|
41
|
+
// A later uncommitted outcome must not erase an unexpired committed
|
|
42
|
+
// suppression on the same key: the committed entry stands through its
|
|
43
|
+
// own remaining TTL.
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
37
46
|
this.entries.set(key, {
|
|
38
47
|
key,
|
|
39
48
|
reason: classification.reason,
|
|
49
|
+
committed: classification.committed ?? false,
|
|
40
50
|
expiresAt: this.clock.now().getTime() + ttl,
|
|
41
51
|
});
|
|
42
52
|
this.evict();
|
|
@@ -49,6 +59,28 @@ export class InMemoryRouteHealth {
|
|
|
49
59
|
return Boolean(entry && entry.expiresAt > now);
|
|
50
60
|
});
|
|
51
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* True when the candidate is suppressed only by locally uncommitted
|
|
64
|
+
* failures (no upstream output observed before failing): as an
|
|
65
|
+
* availability policy a lone suppressed route may degrade instead of
|
|
66
|
+
* starving. This records local observation only — it cannot prove the
|
|
67
|
+
* provider did not execute the request. Provider rate limits are exempt:
|
|
68
|
+
* they carry a provider-asked Retry-After window, and redispatching a
|
|
69
|
+
* lone seat inside that window is a retry storm, not an availability
|
|
70
|
+
* gap — the suppression stands through its own TTL.
|
|
71
|
+
*/
|
|
72
|
+
suppressedDegradable(candidate) {
|
|
73
|
+
this.evict();
|
|
74
|
+
const now = this.clock.now().getTime();
|
|
75
|
+
const suppressing = [];
|
|
76
|
+
for (const key of applicableKeys(candidate)) {
|
|
77
|
+
const entry = this.entries.get(key);
|
|
78
|
+
if (entry && entry.expiresAt > now)
|
|
79
|
+
suppressing.push(entry);
|
|
80
|
+
}
|
|
81
|
+
return suppressing.length > 0
|
|
82
|
+
&& suppressing.every((entry) => !entry.committed && entry.reason !== 'rate-limited');
|
|
83
|
+
}
|
|
52
84
|
clear(candidate) {
|
|
53
85
|
applicableKeys(candidate).forEach((key) => this.entries.delete(key));
|
|
54
86
|
}
|
package/dist/route-health.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-health.js","sourceRoot":"","sources":["../src/route-health.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"route-health.js","sourceRoot":"","sources":["../src/route-health.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ExecutionFeature } from './execution-features.js';
|
|
1
2
|
import type { RankedRouteCandidate } from './route-selection.js';
|
|
2
3
|
import type { AffinityDescription, IdFactory, RouteAvailabilityDiagnostic, RoutePlan, VerifiedRoutingSubject } from './routing-contracts.js';
|
|
3
4
|
import type { RoutePolicy } from './routing-policy.js';
|
|
@@ -22,9 +23,39 @@ export interface StoredAffinity extends AffinityDescription {
|
|
|
22
23
|
readonly workspaceId?: string;
|
|
23
24
|
}
|
|
24
25
|
export declare class RoutePlanError extends Error {
|
|
25
|
-
readonly code: 'no-route' | 'unknown-model' | 'capabilities-unmet' | 'invalid-plan' | 'expired-plan' | 'stale-candidate' | 'conflict' | 'quote-mismatch';
|
|
26
|
+
readonly code: 'no-route' | 'unknown-model' | 'capabilities-unmet' | 'invalid-plan' | 'expired-plan' | 'stale-candidate' | 'conflict' | 'quote-mismatch' | 'native-unavailable';
|
|
26
27
|
readonly diagnostic?: RouteAvailabilityDiagnostic | undefined;
|
|
27
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Every transport-matching availability entry (Lot 7): by caller
|
|
30
|
+
* convention `diagnostic` stays the first match for back-compat (not a
|
|
31
|
+
* constructor invariant — both arguments are independently optional);
|
|
32
|
+
* this carries the full per-transport list. Transport diagnostics
|
|
33
|
+
* reflect the matching entries, not necessarily every candidate or
|
|
34
|
+
* every failure cause.
|
|
35
|
+
*/
|
|
36
|
+
readonly diagnostics?: readonly RouteAvailabilityDiagnostic[] | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Requested execution features no resolved target supports (spec §16.7
|
|
39
|
+
* cause for `capabilities-unmet`; absent for older constructions and
|
|
40
|
+
* non-execution refusals). The gateway names the first mapped one.
|
|
41
|
+
*/
|
|
42
|
+
readonly unmetExecutionFeatures?: readonly ExecutionFeature[] | undefined;
|
|
43
|
+
constructor(message: string, code: 'no-route' | 'unknown-model' | 'capabilities-unmet' | 'invalid-plan' | 'expired-plan' | 'stale-candidate' | 'conflict' | 'quote-mismatch' | 'native-unavailable', diagnostic?: RouteAvailabilityDiagnostic | undefined,
|
|
44
|
+
/**
|
|
45
|
+
* Every transport-matching availability entry (Lot 7): by caller
|
|
46
|
+
* convention `diagnostic` stays the first match for back-compat (not a
|
|
47
|
+
* constructor invariant — both arguments are independently optional);
|
|
48
|
+
* this carries the full per-transport list. Transport diagnostics
|
|
49
|
+
* reflect the matching entries, not necessarily every candidate or
|
|
50
|
+
* every failure cause.
|
|
51
|
+
*/
|
|
52
|
+
diagnostics?: readonly RouteAvailabilityDiagnostic[] | undefined,
|
|
53
|
+
/**
|
|
54
|
+
* Requested execution features no resolved target supports (spec §16.7
|
|
55
|
+
* cause for `capabilities-unmet`; absent for older constructions and
|
|
56
|
+
* non-execution refusals). The gateway names the first mapped one.
|
|
57
|
+
*/
|
|
58
|
+
unmetExecutionFeatures?: readonly ExecutionFeature[] | undefined);
|
|
28
59
|
}
|
|
29
60
|
export declare const subjectRef: (subject: VerifiedRoutingSubject) => string;
|
|
30
61
|
export declare const routingOwnerRef: (subject: VerifiedRoutingSubject) => string;
|
|
@@ -1 +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,eAAe,GAAG,oBAAoB,GAAG,cAAc,GAAG,cAAc,GAAG,iBAAiB,GAAG,UAAU,GACjI,gBAAgB;
|
|
1
|
+
{"version":3,"file":"route-planner-state.d.ts","sourceRoot":"","sources":["../src/route-planner-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,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,eAAe,GAAG,oBAAoB,GAAG,cAAc,GAAG,cAAc,GAAG,iBAAiB,GAAG,UAAU,GACjI,gBAAgB,GAAG,oBAAoB;IAC3C,QAAQ,CAAC,UAAU,CAAC;IACpB;;;;;;;OAOG;IACH,QAAQ,CAAC,WAAW,CAAC;IACrB;;;;OAIG;IACH,QAAQ,CAAC,sBAAsB,CAAC;gBAlBhC,OAAO,EAAE,MAAM,EACN,IAAI,EAAE,UAAU,GAAG,eAAe,GAAG,oBAAoB,GAAG,cAAc,GAAG,cAAc,GAAG,iBAAiB,GAAG,UAAU,GACjI,gBAAgB,GAAG,oBAAoB,EAClC,UAAU,CAAC,yCAA6B;IACjD;;;;;;;OAOG;IACM,WAAW,CAAC,oDAAwC;IAC7D;;;;OAIG;IACM,sBAAsB,CAAC,yCAA6B;CAKhE;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"}
|
|
@@ -1,10 +1,29 @@
|
|
|
1
1
|
export class RoutePlanError extends Error {
|
|
2
2
|
code;
|
|
3
3
|
diagnostic;
|
|
4
|
-
|
|
4
|
+
diagnostics;
|
|
5
|
+
unmetExecutionFeatures;
|
|
6
|
+
constructor(message, code, diagnostic,
|
|
7
|
+
/**
|
|
8
|
+
* Every transport-matching availability entry (Lot 7): by caller
|
|
9
|
+
* convention `diagnostic` stays the first match for back-compat (not a
|
|
10
|
+
* constructor invariant — both arguments are independently optional);
|
|
11
|
+
* this carries the full per-transport list. Transport diagnostics
|
|
12
|
+
* reflect the matching entries, not necessarily every candidate or
|
|
13
|
+
* every failure cause.
|
|
14
|
+
*/
|
|
15
|
+
diagnostics,
|
|
16
|
+
/**
|
|
17
|
+
* Requested execution features no resolved target supports (spec §16.7
|
|
18
|
+
* cause for `capabilities-unmet`; absent for older constructions and
|
|
19
|
+
* non-execution refusals). The gateway names the first mapped one.
|
|
20
|
+
*/
|
|
21
|
+
unmetExecutionFeatures) {
|
|
5
22
|
super(message);
|
|
6
23
|
this.code = code;
|
|
7
24
|
this.diagnostic = diagnostic;
|
|
25
|
+
this.diagnostics = diagnostics;
|
|
26
|
+
this.unmetExecutionFeatures = unmetExecutionFeatures;
|
|
8
27
|
this.name = 'RoutePlanError';
|
|
9
28
|
}
|
|
10
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-planner-state.js","sourceRoot":"","sources":["../src/route-planner-state.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"route-planner-state.js","sourceRoot":"","sources":["../src/route-planner-state.ts"],"names":[],"mappings":"AAkCA,MAAM,OAAO,cAAe,SAAQ,KAAK;IAG5B;IAEA;IASA;IAMA;IAnBX,YACE,OAAe,EACN,IACkC,EAClC,UAAwC;IACjD;;;;;;;OAOG;IACM,WAAoD;IAC7D;;;;OAIG;IACM,sBAAoD;QAE7D,KAAK,CAAC,OAAO,CAAC,CAAC;QAnBN,SAAI,GAAJ,IAAI,CAC8B;QAClC,eAAU,GAAV,UAAU,CAA8B;QASxC,gBAAW,GAAX,WAAW,CAAyC;QAMpD,2BAAsB,GAAtB,sBAAsB,CAA8B;QAG7D,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAA+B,EAAU,EAAE,CACpE,GAAG,OAAO,CAAC,YAAY,SAAS,OAAO,CAAC,aAAa,EAAE,CAAC;AAE1D,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAA+B,EAAU,EAAE,CACzE,OAAO,CAAC,aAAa,CAAC;AAExB,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,OAA+B,EAC/B,WAAmB,EACnB,WAAoB,EACZ,EAAE,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,WAAW,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAEvF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,IAAiB,EACjB,QAA+B,EAClB,EAAE,CAAC,CAAC;IACjB,GAAG,IAAI;IACP,GAAG,QAAQ;IACX,QAAQ,EAAE,QAAQ,EAAE,QAAQ,IAAI,IAAI,CAAC,QAAQ;IAC7C,KAAK,EAAE,QAAQ,EAAE,KAAK,IAAI,IAAI,CAAC,KAAK;CACrC,CAAC,CAAC;AAEH,MAAM,OAAO,mBAAmB;IACtB,QAAQ,GAAG,CAAC,CAAC;IAErB,IAAI,CAAC,MAAwC;QAC3C,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACnB,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;IACnD,CAAC;CACF"}
|
package/dist/route-planner.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { type ModelEquivalenceCouncil } from './equivalence-council.js';
|
|
2
|
-
import type { AccountDirectoryPort, AffinityDescription, Clock, IdFactory, PreparedRouteAttempt, AffinityMutationEvent, RoutePlan, RoutePlanInput, RoutePlanner, VerifiedRoutingSubject, RouteModelInventoryEntry, RouteQuote, RouteQuoteInput } from './routing-contracts.js';
|
|
2
|
+
import type { AccountDirectoryPort, AffinityDescription, Clock, IdFactory, PreparedRouteAttempt, AffinityMutationEvent, RouteAvailabilityDiagnostic, RoutePlan, RoutePlanInput, RoutePlanner, VerifiedRoutingSubject, RouteModelInventoryEntry, RouteQuote, RouteQuoteInput } from './routing-contracts.js';
|
|
3
3
|
import { InMemoryRoutePolicyProfiles } from './routing-policy.js';
|
|
4
4
|
export interface InMemoryRoutePlannerOptions {
|
|
5
5
|
readonly directory: AccountDirectoryPort;
|
|
6
6
|
readonly council?: ModelEquivalenceCouncil;
|
|
7
7
|
readonly profiles?: InMemoryRoutePolicyProfiles;
|
|
8
|
+
readonly nativeMessagesModelIds?: readonly string[];
|
|
8
9
|
readonly clock?: Clock;
|
|
9
10
|
readonly idFactory?: IdFactory;
|
|
10
11
|
readonly planTtlMs?: number;
|
|
@@ -23,16 +24,35 @@ export declare class InMemoryRoutePlanner implements RoutePlanner {
|
|
|
23
24
|
private readonly council;
|
|
24
25
|
private readonly profiles;
|
|
25
26
|
private readonly health;
|
|
27
|
+
private readonly nativeMessagesModelIds;
|
|
26
28
|
private readonly planTtlMs;
|
|
27
29
|
private readonly maximumPlanEntries;
|
|
28
30
|
private readonly maximumAffinityEntries;
|
|
29
31
|
private readonly maximumRoundRobinEntries;
|
|
30
32
|
constructor(options: InMemoryRoutePlannerOptions);
|
|
31
33
|
listModels(subject: VerifiedRoutingSubject): Promise<readonly RouteModelInventoryEntry[]>;
|
|
34
|
+
/**
|
|
35
|
+
* Read-only per-transport availability for a requested model (Lot 7).
|
|
36
|
+
* Same transport resolution as the plan no-route branch, without planning
|
|
37
|
+
* side effects — the budget admission path uses it to explain empty quotes.
|
|
38
|
+
*/
|
|
39
|
+
describeAvailability(subject: VerifiedRoutingSubject, input: Pick<RoutePlanInput, 'requestedModel' | 'targetCandidatesOverride' | 'explicit'>): Promise<readonly RouteAvailabilityDiagnostic[]>;
|
|
40
|
+
private matchingAvailabilityDiagnostics;
|
|
32
41
|
plan(subject: VerifiedRoutingSubject, input: RoutePlanInput): Promise<RoutePlan>;
|
|
33
42
|
quote(input: RouteQuoteInput): RouteQuote;
|
|
34
43
|
private assertQuoteMatches;
|
|
35
44
|
private keepQuoted;
|
|
45
|
+
/**
|
|
46
|
+
* Health-filter candidates. Suppression-based failover stands, except for a
|
|
47
|
+
* lone quoted candidate suppressed only by locally uncommitted failures
|
|
48
|
+
* (no upstream output observed before failing): as an availability policy
|
|
49
|
+
* it degrades instead of starving the only route. This records local
|
|
50
|
+
* observation only — the provider may still have accepted the request
|
|
51
|
+
* before the connection failed. Committed failures stay strict, as does
|
|
52
|
+
* multi-route suppression, and provider rate limits keep their
|
|
53
|
+
* Retry-After window even on a lone route.
|
|
54
|
+
*/
|
|
55
|
+
private visibleCandidates;
|
|
36
56
|
prepareAttempt(subject: VerifiedRoutingSubject, planRef: string, candidateRef: string, requestId: string, attemptIndex: number): Promise<PreparedRouteAttempt>;
|
|
37
57
|
describeAffinity(subject: VerifiedRoutingSubject, key: string, workspaceId?: string): AffinityDescription | null;
|
|
38
58
|
promoteAffinity(subject: VerifiedRoutingSubject, planRef: string, candidateRef: string, expectedRevision?: number): AffinityDescription;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-planner.d.ts","sourceRoot":"","sources":["../src/route-planner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,KAAK,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"route-planner.d.ts","sourceRoot":"","sources":["../src/route-planner.ts"],"names":[],"mappings":"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"}
|