offrouter-core 0.5.0 → 0.6.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/dist/audit.d.ts +51 -2
- package/dist/audit.d.ts.map +1 -1
- package/dist/audit.js +60 -3
- package/dist/audit.js.map +1 -1
- package/dist/config.d.ts +26 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +160 -1
- package/dist/config.js.map +1 -1
- package/dist/delegation.d.ts +40 -0
- package/dist/delegation.d.ts.map +1 -1
- package/dist/delegation.js +169 -8
- package/dist/delegation.js.map +1 -1
- package/dist/index.d.ts +27 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -7
- package/dist/index.js.map +1 -1
- package/dist/llm-judge.d.ts +41 -0
- package/dist/llm-judge.d.ts.map +1 -0
- package/dist/llm-judge.js +159 -0
- package/dist/llm-judge.js.map +1 -0
- package/dist/policy.d.ts +77 -0
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +81 -0
- package/dist/policy.js.map +1 -1
- package/dist/provider-health.d.ts +129 -0
- package/dist/provider-health.d.ts.map +1 -0
- package/dist/provider-health.js +423 -0
- package/dist/provider-health.js.map +1 -0
- package/dist/providers/catalog-data.d.ts +7 -0
- package/dist/providers/catalog-data.d.ts.map +1 -1
- package/dist/providers/catalog-data.js +140 -53
- package/dist/providers/catalog-data.js.map +1 -1
- package/dist/providers/catalog.d.ts +3 -3
- package/dist/providers/catalog.d.ts.map +1 -1
- package/dist/providers/catalog.js +1 -0
- package/dist/providers/catalog.js.map +1 -1
- package/dist/proxy/anthropic-mapper.d.ts +585 -0
- package/dist/proxy/anthropic-mapper.d.ts.map +1 -0
- package/dist/proxy/anthropic-mapper.js +539 -0
- package/dist/proxy/anthropic-mapper.js.map +1 -0
- package/dist/proxy/anthropic-server.d.ts +24 -0
- package/dist/proxy/anthropic-server.d.ts.map +1 -0
- package/dist/proxy/anthropic-server.js +606 -0
- package/dist/proxy/anthropic-server.js.map +1 -0
- package/dist/proxy/classify.d.ts +17 -0
- package/dist/proxy/classify.d.ts.map +1 -0
- package/dist/proxy/classify.js +65 -0
- package/dist/proxy/classify.js.map +1 -0
- package/dist/proxy/responses-mapper.d.ts +15 -0
- package/dist/proxy/responses-mapper.d.ts.map +1 -1
- package/dist/proxy/responses-mapper.js +9 -2
- package/dist/proxy/responses-mapper.js.map +1 -1
- package/dist/proxy/responses-server.d.ts.map +1 -1
- package/dist/proxy/responses-server.js +14 -1
- package/dist/proxy/responses-server.js.map +1 -1
- package/dist/router.d.ts +36 -2
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +158 -23
- package/dist/router.js.map +1 -1
- package/dist/schemas.d.ts +115 -34
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +35 -0
- package/dist/schemas.js.map +1 -1
- package/dist/secret-scan.d.ts +40 -0
- package/dist/secret-scan.d.ts.map +1 -0
- package/dist/secret-scan.js +125 -0
- package/dist/secret-scan.js.map +1 -0
- package/dist/secrets.d.ts +77 -6
- package/dist/secrets.d.ts.map +1 -1
- package/dist/secrets.js +356 -32
- package/dist/secrets.js.map +1 -1
- package/dist/spend.d.ts +122 -0
- package/dist/spend.d.ts.map +1 -0
- package/dist/spend.js +279 -0
- package/dist/spend.js.map +1 -0
- package/dist/task-classifier.d.ts +45 -0
- package/dist/task-classifier.d.ts.map +1 -0
- package/dist/task-classifier.js +153 -0
- package/dist/task-classifier.js.map +1 -0
- package/dist/types.d.ts +46 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/usage-file.d.ts +2 -6
- package/dist/usage-file.d.ts.map +1 -1
- package/dist/usage-file.js +64 -6
- package/dist/usage-file.js.map +1 -1
- package/dist/usage.d.ts +64 -10
- package/dist/usage.d.ts.map +1 -1
- package/dist/usage.js +79 -5
- package/dist/usage.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE1D,YAAY,EACV,SAAS,EACT,QAAQ,EACR,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,UAAU,EACV,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,SAAS,EACT,aAAa,EACb,kBAAkB,EAClB,QAAQ,EACR,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,eAAe,EACf,cAAc,EACd,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,uBAAuB,EACvB,oBAAoB,EACpB,eAAe,EACf,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,wBAAwB,EACxB,cAAc,EACd,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,cAAc,EACd,6BAA6B,EAC7B,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -3,19 +3,24 @@
|
|
|
3
3
|
* Policy and router live here; provider adapters land in later milestones.
|
|
4
4
|
*/
|
|
5
5
|
export { ROUTE_PROTOCOL_VERSION } from "./protocol.js";
|
|
6
|
-
export { AuthScopeSchema, AuthTierSchema, FallbackChainEntrySchema, FallbackReasonSchema, HarnessKindSchema, HarnessRefSchema, PolicyDecisionSchema, PolicyDenialCodeSchema, PolicyDenialSchema, PolicyDenialTargetSchema, ProviderCandidateSchema, ProviderHealthSchema, RiskLevelSchema, RouteConstraintsSchema, RouteDecisionSchema, RouteRequestSchema, RouteTaskSchema, SelectedRouteSchema, SubscriptionStatusSchema, TaskKindSchema, WorkspaceRefSchema, } from "./schemas.js";
|
|
7
|
-
export {
|
|
6
|
+
export { AuthScopeSchema, AuthTierSchema, ClassifierNameSchema, FallbackChainEntrySchema, FallbackReasonSchema, HarnessKindSchema, HarnessRefSchema, LogicalModelFamilySchema, PolicyDecisionSchema, PolicyDenialCodeSchema, PolicyDenialSchema, PolicyDenialTargetSchema, ProviderCandidateSchema, ProviderHealthSchema, RiskLevelSchema, RouteClassificationSchema, RouteConstraintsSchema, RouteDecisionSchema, RouteRequestSchema, RouteTaskSchema, SelectedRouteSchema, SubscriptionStatusSchema, TaskKindSchema, WorkspaceRefSchema, } from "./schemas.js";
|
|
7
|
+
export { LONG_PROMPT_CHARS, MULTI_CODE_FENCE_THRESHOLD, MULTI_STEP_HIT_THRESHOLD, SHORT_PROMPT_CHARS, classifyTask, } from "./task-classifier.js";
|
|
8
|
+
export { LLM_JUDGE_TIMEOUT_MS, judgeTask, scrubJudgePreview, selectJudgeCandidate, } from "./llm-judge.js";
|
|
9
|
+
export { evaluatePolicy, isHealthySubscriptionCapacity, meetsCapabilities, resolveSpendCapUsd, } from "./policy.js";
|
|
8
10
|
export { routeRequest } from "./router.js";
|
|
11
|
+
export { FAILURE_DECAY_MS, FAILURE_PENALTY, FileProviderHealthTracker, InMemoryProviderHealthTracker, LATENCY_EWMA_ALPHA, LATENCY_TIEBREAK_MS, LATENCY_TIEBREAK_WEIGHT, MAX_SUCCESS_BONUS_COUNT, NEUTRAL_HEALTH_SCORE, SUCCESS_BONUS, SUCCESS_DECAY_MS, parseHealthDocument, scoreHealthRecord, } from "./provider-health.js";
|
|
12
|
+
export { buildCurrentSpendByProviderUsd, buildSpendRollup, estimateTokensCostUsd, estimateSplitTokensCostUsd, pricingHintForModel, SPEND_ACCOUNTING_WINDOW, } from "./spend.js";
|
|
9
13
|
export { DelegationPolicyError, DelegationRuntime } from "./delegation.js";
|
|
10
|
-
export { ConfigError, defaultConfig, loadConfig, resolveOffRouterHome, } from "./config.js";
|
|
11
|
-
export { FileSecretStore, KeychainSecretStore, KeychainUnavailableError, REDACTED, redact, } from "./secrets.js";
|
|
12
|
-
export {
|
|
13
|
-
export {
|
|
14
|
+
export { ConfigError, defaultConfig, loadConfig, resolveOffRouterHome, SUBSCRIPTION_PROVIDER_IDS, } from "./config.js";
|
|
15
|
+
export { FileSecretStore, KeychainSecretStore, KeychainUnavailableError, REDACTED, SECRET_PATTERNS, redact, } from "./secrets.js";
|
|
16
|
+
export { DEFAULT_OUTBOUND_SECRET_SCAN, OutboundSecretBlockedError, collectOutboundText, enforceOutboundSecretScan, scanForSecrets, } from "./secret-scan.js";
|
|
17
|
+
export { DEFAULT_PREVIEW_MAX_CHARS, InMemoryAuditStore, clampPreview, } from "./audit.js";
|
|
18
|
+
export { DEFAULT_NEAR_LIMIT_THRESHOLD, InMemoryStateStore, InMemoryUsageStore, applyRecordUsageInput, buildLastUsedAccountByFamily, } from "./usage.js";
|
|
14
19
|
export { FileUsageStore, } from "./usage-file.js";
|
|
15
20
|
// Provider discovery + adapters
|
|
16
21
|
export { PROVIDER_ADAPTER_METHODS, ProviderError, capabilityToCandidate, isProviderError, mapHttpToProviderError, } from "./providers/adapter.js";
|
|
17
22
|
export { MULTI_TIER_FAMILIES, STATIC_CATALOG, catalogToCandidates, familyAuthTiers, loadBuiltinCatalog, loadStaticCatalog, } from "./providers/catalog.js";
|
|
18
|
-
export { BUILTIN_PROVIDERS, BUILTIN_PROVIDER_IDS, getBuiltinProvider, selectBuiltinProviders, } from "./providers/catalog-data.js";
|
|
23
|
+
export { BUILTIN_PROVIDERS, BUILTIN_PROVIDER_IDS, builtinCatalogConfigFromProviders, getBuiltinProvider, selectBuiltinProviders, } from "./providers/catalog-data.js";
|
|
19
24
|
export { FakeProviderAdapter, createFakeProvider } from "./providers/fake.js";
|
|
20
25
|
export { OLLAMA_DUMMY_BEARER, OpenAiCompatibleAdapter, createOpenAiCompatibleAdapter, } from "./providers/openai-compatible.js";
|
|
21
26
|
export { AnthropicAdapter, createAnthropicAdapter, } from "./providers/anthropic.js";
|
|
@@ -24,4 +29,7 @@ export { Redacted, defaultCallbackPort, deleteOAuthTokens, exchangeCodeForTokens
|
|
|
24
29
|
// OpenAI Responses-compatible local proxy
|
|
25
30
|
export { CHAT_COMPLETIONS_DONE, ChatCompletionsRequestSchema, ChatCompletionsSseBuilder, RESPONSES_PROMPT_PREVIEW_CHARS, ResponsesRequestSchema, ResponsesSseBuilder, InvalidProxyRequestError, buildDelegationRequest, buildRouteRequest, createResponsesProxyContext, extractPromptFromChatCompletions, extractPromptFromResponsesInput, openAiErrorPayload, policyDecisionToHttpStatus, promptDigest, promptPreview, providerErrorCodeToHttpStatus, responsesSseData, } from "./proxy/responses-mapper.js";
|
|
26
31
|
export { startResponsesProxy } from "./proxy/responses-server.js";
|
|
32
|
+
// Anthropic Messages-compatible local proxy
|
|
33
|
+
export { ANTHROPIC_MODEL_FAMILY_MAP, ANTHROPIC_PROMPT_PREVIEW_CHARS, AnthropicCountTokensRequestSchema, AnthropicMessagesRequestSchema, AnthropicSseBuilder, InvalidAnthropicProxyRequestError, anthropicErrorPayload, anthropicErrorTypeForStatus, anthropicSseEvent, anthropicStreamErrorEvent, buildAnthropicDelegationRequest, buildAnthropicRouteRequest, createAnthropicProxyContext, estimateAnthropicRequestTokens, estimateAnthropicTokens, extractAnthropicMessagesInput, isRetryableProviderFailure, mapAnthropicModelToFamily, selectCandidatesForAnthropicModel, toProviderMessages, } from "./proxy/anthropic-mapper.js";
|
|
34
|
+
export { startAnthropicProxy } from "./proxy/anthropic-server.js";
|
|
27
35
|
//# 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;;;GAGG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type ClassifyTaskInput, type TaskClassification } from "./task-classifier.js";
|
|
2
|
+
import type { ProviderInvokeMessage } from "./providers/adapter.js";
|
|
3
|
+
import type { ClassifierName, ProviderCandidate } from "./types.js";
|
|
4
|
+
/** Hard timeout for the LLM judge call in milliseconds. */
|
|
5
|
+
export declare const LLM_JUDGE_TIMEOUT_MS = 2000;
|
|
6
|
+
export interface JudgeResult {
|
|
7
|
+
classification: TaskClassification;
|
|
8
|
+
classifier: ClassifierName;
|
|
9
|
+
}
|
|
10
|
+
export interface JudgeTaskDeps {
|
|
11
|
+
/** Candidates available to the router; the judge picks the cheapest allowed fast-coder. */
|
|
12
|
+
candidates: ProviderCandidate[];
|
|
13
|
+
/**
|
|
14
|
+
* Adapter-shaped invoke: call the selected candidate with the given messages.
|
|
15
|
+
* Returns the raw response text (expected to be parseable JSON).
|
|
16
|
+
*/
|
|
17
|
+
invoke: (candidate: ProviderCandidate, messages: ProviderInvokeMessage[], signal?: AbortSignal) => Promise<string>;
|
|
18
|
+
/**
|
|
19
|
+
* When true, api-key fast-coder candidates may be selected. The approval gate
|
|
20
|
+
* is considered satisfied only when config does not require approval or the
|
|
21
|
+
* caller has explicitly approved API spend. Default false.
|
|
22
|
+
*/
|
|
23
|
+
allowApiKey?: boolean;
|
|
24
|
+
/** Override the default hard timeout (for tests). */
|
|
25
|
+
timeoutMs?: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Pick the cheapest allowed fast-coder candidate for the judge call.
|
|
29
|
+
* Preference order: local > subscription > api-key (only when allowApiKey).
|
|
30
|
+
* Within a tier, lower estimated cost wins; missing cost is treated as expensive.
|
|
31
|
+
* Dead candidates are never selected.
|
|
32
|
+
*/
|
|
33
|
+
export declare function selectJudgeCandidate(candidates: ProviderCandidate[], allowApiKey: boolean): ProviderCandidate | undefined;
|
|
34
|
+
/** Clamp and secret-scrub a prompt preview for the judge prompt. */
|
|
35
|
+
export declare function scrubJudgePreview(preview: string | undefined): string;
|
|
36
|
+
/**
|
|
37
|
+
* Classify a task using the LLM judge, with silent fallback to the heuristic
|
|
38
|
+
* classifier on timeout, invoke error, invalid JSON, or no eligible candidate.
|
|
39
|
+
*/
|
|
40
|
+
export declare function judgeTask(input: ClassifyTaskInput, deps: JudgeTaskDeps): Promise<JudgeResult>;
|
|
41
|
+
//# sourceMappingURL=llm-judge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-judge.d.ts","sourceRoot":"","sources":["../src/llm-judge.ts"],"names":[],"mappings":"AAcA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpE,2DAA2D;AAC3D,eAAO,MAAM,oBAAoB,OAAQ,CAAC;AAU1C,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,kBAAkB,CAAC;IACnC,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,2FAA2F;IAC3F,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC;;;OAGG;IACH,MAAM,EAAE,CACN,SAAS,EAAE,iBAAiB,EAC5B,QAAQ,EAAE,qBAAqB,EAAE,EACjC,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,iBAAiB,EAAE,EAC/B,WAAW,EAAE,OAAO,GACnB,iBAAiB,GAAG,SAAS,CAuB/B;AAED,oEAAoE;AACpE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAIrE;AAsDD;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,KAAK,EAAE,iBAAiB,EACxB,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,WAAW,CAAC,CA6CtB"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM judge classifier — routing *signal*, never authority.
|
|
3
|
+
*
|
|
4
|
+
* When policy selects "llm", classification is delegated to the cheapest
|
|
5
|
+
* allowed fast-coder candidate. The prompt contains only a secret-scrubbed,
|
|
6
|
+
* length-clamped preview plus fixed instructions demanding strict JSON.
|
|
7
|
+
*
|
|
8
|
+
* Any failure (timeout, invoke error, invalid JSON, no eligible candidate)
|
|
9
|
+
* silently falls back to the deterministic heuristic classifier. The output
|
|
10
|
+
* shape matches TaskClassification so policy still decides the route.
|
|
11
|
+
*/
|
|
12
|
+
import { z } from "zod";
|
|
13
|
+
import { clampPreview, DEFAULT_PREVIEW_MAX_CHARS } from "./audit.js";
|
|
14
|
+
import { redact } from "./secrets.js";
|
|
15
|
+
import { classifyTask, } from "./task-classifier.js";
|
|
16
|
+
/** Hard timeout for the LLM judge call in milliseconds. */
|
|
17
|
+
export const LLM_JUDGE_TIMEOUT_MS = 2_000;
|
|
18
|
+
const JUDGE_RESPONSE_SCHEMA = z
|
|
19
|
+
.object({
|
|
20
|
+
family: z.enum(["fast-coder", "frontier-coder"]),
|
|
21
|
+
confidence: z.enum(["low", "medium", "high"]),
|
|
22
|
+
signals: z.array(z.string().min(1)),
|
|
23
|
+
})
|
|
24
|
+
.strict();
|
|
25
|
+
/**
|
|
26
|
+
* Pick the cheapest allowed fast-coder candidate for the judge call.
|
|
27
|
+
* Preference order: local > subscription > api-key (only when allowApiKey).
|
|
28
|
+
* Within a tier, lower estimated cost wins; missing cost is treated as expensive.
|
|
29
|
+
* Dead candidates are never selected.
|
|
30
|
+
*/
|
|
31
|
+
export function selectJudgeCandidate(candidates, allowApiKey) {
|
|
32
|
+
const scored = candidates
|
|
33
|
+
.filter((c) => c.family === "fast-coder" && c.health !== "dead")
|
|
34
|
+
.map((c) => {
|
|
35
|
+
let tierRank;
|
|
36
|
+
if (c.authTier === "local")
|
|
37
|
+
tierRank = 300;
|
|
38
|
+
else if (c.authTier === "subscription")
|
|
39
|
+
tierRank = 200;
|
|
40
|
+
else if (allowApiKey)
|
|
41
|
+
tierRank = 100;
|
|
42
|
+
else
|
|
43
|
+
tierRank = -1;
|
|
44
|
+
const cost = typeof c.estimatedCostUsd === "number" && Number.isFinite(c.estimatedCostUsd)
|
|
45
|
+
? c.estimatedCostUsd
|
|
46
|
+
: Number.POSITIVE_INFINITY;
|
|
47
|
+
return { candidate: c, tierRank, cost };
|
|
48
|
+
})
|
|
49
|
+
.filter((s) => s.tierRank >= 0);
|
|
50
|
+
scored.sort((a, b) => {
|
|
51
|
+
if (a.tierRank !== b.tierRank)
|
|
52
|
+
return b.tierRank - a.tierRank;
|
|
53
|
+
return a.cost - b.cost;
|
|
54
|
+
});
|
|
55
|
+
return scored[0]?.candidate;
|
|
56
|
+
}
|
|
57
|
+
/** Clamp and secret-scrub a prompt preview for the judge prompt. */
|
|
58
|
+
export function scrubJudgePreview(preview) {
|
|
59
|
+
const raw = preview ?? "";
|
|
60
|
+
const clamped = clampPreview(raw, DEFAULT_PREVIEW_MAX_CHARS);
|
|
61
|
+
return redact(clamped);
|
|
62
|
+
}
|
|
63
|
+
function buildJudgePrompt(preview) {
|
|
64
|
+
return [
|
|
65
|
+
"You are a routing classifier. Given the short user prompt preview below, classify the task family.",
|
|
66
|
+
"",
|
|
67
|
+
"Reply with a single JSON object and no markdown, no code fences, and no extra commentary:",
|
|
68
|
+
'{"family":"fast-coder"|"frontier-coder","confidence":"low"|"medium"|"high","signals":["string",...]}',
|
|
69
|
+
"",
|
|
70
|
+
"- fast-coder: short, mechanical, single-step tasks (rename, format, typo fix, bump, list, extract single helper).",
|
|
71
|
+
"- frontier-coder: long, complex, multi-step, architectural, investigative, or ambiguous tasks.",
|
|
72
|
+
"- confidence: low when uncertain, medium when moderately clear, high when very clear.",
|
|
73
|
+
"- signals: 1-5 short stable reason strings (no user prompt text, no spaces).",
|
|
74
|
+
"",
|
|
75
|
+
"Prompt preview:",
|
|
76
|
+
preview,
|
|
77
|
+
].join("\n");
|
|
78
|
+
}
|
|
79
|
+
function isValidSignal(rawPreview, signal) {
|
|
80
|
+
if (typeof signal !== "string" || signal.length === 0)
|
|
81
|
+
return false;
|
|
82
|
+
// Heuristic signals are stable ids without spaces; reject anything that looks
|
|
83
|
+
// like it leaked prompt text or is unreasonably long.
|
|
84
|
+
if (signal.includes(" "))
|
|
85
|
+
return false;
|
|
86
|
+
if (signal.includes("\n"))
|
|
87
|
+
return false;
|
|
88
|
+
if (rawPreview.length > 0 && signal.includes(rawPreview))
|
|
89
|
+
return false;
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
function parseJudgeResponse(raw, rawPreview) {
|
|
93
|
+
const trimmed = raw.trim();
|
|
94
|
+
// Strip optional markdown fences if the model ignored instructions.
|
|
95
|
+
const fenced = trimmed
|
|
96
|
+
.replace(/^```json\s*/i, "")
|
|
97
|
+
.replace(/^```\s*/i, "")
|
|
98
|
+
.replace(/```\s*$/i, "");
|
|
99
|
+
const parsed = JSON.parse(fenced);
|
|
100
|
+
const validated = JUDGE_RESPONSE_SCHEMA.parse(parsed);
|
|
101
|
+
// Reject the whole response if any signal looks like it leaked prompt text or
|
|
102
|
+
// ignored the no-spaces rule. Do not silently drop individual bad signals.
|
|
103
|
+
if (!validated.signals.every((s) => isValidSignal(rawPreview, s))) {
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
if (validated.signals.length === 0)
|
|
107
|
+
return undefined;
|
|
108
|
+
return {
|
|
109
|
+
recommendedFamily: validated.family,
|
|
110
|
+
confidence: validated.confidence,
|
|
111
|
+
signals: validated.signals,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Classify a task using the LLM judge, with silent fallback to the heuristic
|
|
116
|
+
* classifier on timeout, invoke error, invalid JSON, or no eligible candidate.
|
|
117
|
+
*/
|
|
118
|
+
export async function judgeTask(input, deps) {
|
|
119
|
+
const heuristic = classifyTask(input);
|
|
120
|
+
const chosen = selectJudgeCandidate(deps.candidates, deps.allowApiKey ?? false);
|
|
121
|
+
if (!chosen) {
|
|
122
|
+
return { classification: heuristic, classifier: "llm-fallback-heuristic" };
|
|
123
|
+
}
|
|
124
|
+
const rawPreview = input.promptPreview ?? "";
|
|
125
|
+
const preview = scrubJudgePreview(rawPreview);
|
|
126
|
+
const messages = [
|
|
127
|
+
{ role: "user", content: buildJudgePrompt(preview) },
|
|
128
|
+
];
|
|
129
|
+
const timeoutMs = deps.timeoutMs ?? LLM_JUDGE_TIMEOUT_MS;
|
|
130
|
+
const controller = new AbortController();
|
|
131
|
+
let settled = false;
|
|
132
|
+
try {
|
|
133
|
+
const raw = await Promise.race([
|
|
134
|
+
deps.invoke(chosen, messages, controller.signal).finally(() => {
|
|
135
|
+
settled = true;
|
|
136
|
+
}),
|
|
137
|
+
new Promise((_, reject) => {
|
|
138
|
+
setTimeout(() => {
|
|
139
|
+
controller.abort(new Error("llm-judge-timeout"));
|
|
140
|
+
if (!settled) {
|
|
141
|
+
reject(new Error("llm-judge-timeout"));
|
|
142
|
+
}
|
|
143
|
+
}, timeoutMs);
|
|
144
|
+
}),
|
|
145
|
+
]);
|
|
146
|
+
const classification = parseJudgeResponse(raw, rawPreview);
|
|
147
|
+
if (!classification) {
|
|
148
|
+
return { classification: heuristic, classifier: "llm-fallback-heuristic" };
|
|
149
|
+
}
|
|
150
|
+
return { classification, classifier: "llm" };
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
return { classification: heuristic, classifier: "llm-fallback-heuristic" };
|
|
154
|
+
}
|
|
155
|
+
finally {
|
|
156
|
+
controller.abort();
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=llm-judge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-judge.js","sourceRoot":"","sources":["../src/llm-judge.ts"],"names":[],"mappings":"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"}
|
package/dist/policy.d.ts
CHANGED
|
@@ -3,6 +3,14 @@
|
|
|
3
3
|
* Hard filters first; subscription-first rules gate API-key candidates.
|
|
4
4
|
*/
|
|
5
5
|
import type { PolicyDecision, ProviderCandidate, RouteRequest } from "./types.js";
|
|
6
|
+
import type { OutboundSecretScanMode } from "./secret-scan.js";
|
|
7
|
+
/**
|
|
8
|
+
* Consent mode for switching subscription accounts within a provider family.
|
|
9
|
+
* "auto" (default) routes any policy-allowed account; "ask" requires an
|
|
10
|
+
* explicit per-evaluation acknowledgment when the candidate's account differs
|
|
11
|
+
* from the family's most recently used account.
|
|
12
|
+
*/
|
|
13
|
+
export type SubscriptionSwitchMode = "auto" | "ask";
|
|
6
14
|
export interface PolicyConfig {
|
|
7
15
|
/** Profiles explicitly allowed to route through OffRouter. */
|
|
8
16
|
allowlistedProfiles: string[];
|
|
@@ -20,7 +28,76 @@ export interface PolicyConfig {
|
|
|
20
28
|
deniedProviders?: string[];
|
|
21
29
|
/** Fraction of subscription quota remaining at/under which an account is "near-limit". Default 0.2. */
|
|
22
30
|
nearLimitThreshold?: number;
|
|
31
|
+
/**
|
|
32
|
+
* Scan outbound prompt/message text for credential shapes before provider
|
|
33
|
+
* dispatch. "warn" (default) proceeds and audits; "block" fails fast;
|
|
34
|
+
* "off" skips the scan. Blocking is opt-in so existing users are not broken.
|
|
35
|
+
*/
|
|
36
|
+
outboundSecretScan?: OutboundSecretScanMode;
|
|
37
|
+
/**
|
|
38
|
+
* Global hard cap on estimated paid API-key spend in USD for the current
|
|
39
|
+
* accounting window. Absent = no cap. Never blocks subscription/local tiers.
|
|
40
|
+
*/
|
|
41
|
+
spendCapUsd?: number;
|
|
42
|
+
/** Per-provider spend cap overrides (keyed by providerId); beat spendCapUsd. */
|
|
43
|
+
providerSpendCapsUsd?: Record<string, number>;
|
|
44
|
+
/**
|
|
45
|
+
* Per-provider allow-lists keyed by providerId. When present, only model ids
|
|
46
|
+
* matching an entry are allowed; applies to all tiers.
|
|
47
|
+
*/
|
|
48
|
+
providerAllowedModels?: Record<string, string[]>;
|
|
49
|
+
/**
|
|
50
|
+
* Per-provider deny-lists keyed by providerId. Matching model ids are always
|
|
51
|
+
* blocked; deny beats allow. Applies to all tiers.
|
|
52
|
+
*/
|
|
53
|
+
providerDeniedModels?: Record<string, string[]>;
|
|
54
|
+
/**
|
|
55
|
+
* Current estimated paid spend per provider (USD) for the accounting
|
|
56
|
+
* window, supplied by the caller from the usage store. Providers absent
|
|
57
|
+
* from the map are treated as zero spend.
|
|
58
|
+
*/
|
|
59
|
+
currentSpendByProviderUsd?: Record<string, number>;
|
|
60
|
+
/**
|
|
61
|
+
* When true, API-key candidates require explicit per-evaluation approval
|
|
62
|
+
* before routing. Set in config via `require_api_spend_approval`.
|
|
63
|
+
*/
|
|
64
|
+
requireApiSpendApproval?: boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Per-evaluation approval flag supplied by the caller. Required when
|
|
67
|
+
* requireApiSpendApproval is true; has no effect otherwise.
|
|
68
|
+
*/
|
|
69
|
+
apiSpendApproved?: boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Classifier used to produce the routing signal. "heuristic" (default) keeps
|
|
72
|
+
* the deterministic local classifier; "llm" delegates to the cheapest allowed
|
|
73
|
+
* fast-coder candidate with silent fallback to the heuristic on any failure.
|
|
74
|
+
*/
|
|
75
|
+
classifier?: "heuristic" | "llm";
|
|
76
|
+
/**
|
|
77
|
+
* Subscription account switch consent mode, set in config via
|
|
78
|
+
* `subscription_switch`. "auto" (default) keeps current behavior; "ask"
|
|
79
|
+
* denies subscription-tier candidates whose account differs from the
|
|
80
|
+
* provider family's last-used account unless switchApproved is set.
|
|
81
|
+
*/
|
|
82
|
+
subscriptionSwitch?: SubscriptionSwitchMode;
|
|
83
|
+
/**
|
|
84
|
+
* Per-evaluation acknowledgment that a subscription account switch is
|
|
85
|
+
* allowed. Required when subscriptionSwitch is "ask" and the candidate's
|
|
86
|
+
* account differs from the family's last-used account; no effect otherwise.
|
|
87
|
+
*/
|
|
88
|
+
switchApproved?: boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Most recently used account per provider family (keyed by providerId),
|
|
91
|
+
* supplied by the caller from the usage store. Families absent from the map
|
|
92
|
+
* are treated as first use and never trigger the switch gate.
|
|
93
|
+
*/
|
|
94
|
+
lastUsedAccountByFamily?: Record<string, string>;
|
|
23
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* Resolve the applicable spend cap for a provider: the per-provider override
|
|
98
|
+
* beats the global cap; undefined means no cap applies.
|
|
99
|
+
*/
|
|
100
|
+
export declare function resolveSpendCapUsd(config: Pick<PolicyConfig, "spendCapUsd" | "providerSpendCapsUsd">, providerId: string): number | undefined;
|
|
24
101
|
/**
|
|
25
102
|
* Whether a candidate meets hard capability requirements from the task.
|
|
26
103
|
*/
|
package/dist/policy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EACV,cAAc,EAEd,iBAAiB,EACjB,YAAY,EAEb,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EACV,cAAc,EAEd,iBAAiB,EACjB,YAAY,EAEb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,KAAK,CAAC;AAEpD,MAAM,WAAW,YAAY;IAC3B,8DAA8D;IAC9D,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC;;;OAGG;IACH,mCAAmC,CAAC,EAAE,OAAO,CAAC;IAC9C,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,uGAAuG;IACvG,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,sBAAsB,CAAC;IAC5C;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACjD;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAChD;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnD;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,UAAU,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;IACjC;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,sBAAsB,CAAC;IAC5C;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,aAAa,GAAG,sBAAsB,CAAC,EAClE,UAAU,EAAE,MAAM,GACjB,MAAM,GAAG,SAAS,CAEpB;AAgED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,YAAY,GACpB,OAAO,CAcT;AA4BD;;;;;;;;;;GAUG;AACH,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,iBAAiB,EAC5B,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,YAAY,GACnB,OAAO,CAqCT;AA+KD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE,iBAAiB,EAAE,EAC/B,MAAM,EAAE,YAAY,GACnB,cAAc,CAsIhB"}
|
package/dist/policy.js
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the applicable spend cap for a provider: the per-provider override
|
|
3
|
+
* beats the global cap; undefined means no cap applies.
|
|
4
|
+
*/
|
|
5
|
+
export function resolveSpendCapUsd(config, providerId) {
|
|
6
|
+
return config.providerSpendCapsUsd?.[providerId] ?? config.spendCapUsd;
|
|
7
|
+
}
|
|
1
8
|
const HEALTHY_SUBSCRIPTION_STATUSES = new Set([
|
|
2
9
|
"active",
|
|
3
10
|
]);
|
|
@@ -5,6 +12,25 @@ const UNAVAILABLE_SUBSCRIPTION_STATUSES = new Set(["exhausted", "rate-limited",
|
|
|
5
12
|
function candidateId(c) {
|
|
6
13
|
return `${c.providerId}:${c.modelId}`;
|
|
7
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Match a model id against a single pattern: exact match OR a single
|
|
17
|
+
* trailing `*` prefix glob (e.g. "gpt-5.6-*"). No full glob engine.
|
|
18
|
+
*/
|
|
19
|
+
function modelMatchesPattern(modelId, pattern) {
|
|
20
|
+
if (pattern.endsWith("*")) {
|
|
21
|
+
return modelId.startsWith(pattern.slice(0, -1));
|
|
22
|
+
}
|
|
23
|
+
return modelId === pattern;
|
|
24
|
+
}
|
|
25
|
+
function isModelAllowedByProvider(modelId, allowedModels, deniedModels) {
|
|
26
|
+
if (deniedModels?.some((pattern) => modelMatchesPattern(modelId, pattern))) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
if (allowedModels === undefined || allowedModels.length === 0) {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
return allowedModels.some((pattern) => modelMatchesPattern(modelId, pattern));
|
|
33
|
+
}
|
|
8
34
|
function matchesGlob(pattern, value) {
|
|
9
35
|
// Escape regex special chars except *, then turn * into .*
|
|
10
36
|
const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, "\\$&");
|
|
@@ -151,6 +177,15 @@ function hardFilterDenial(candidate, request, config) {
|
|
|
151
177
|
message: `Provider ${candidate.providerId} is denied by policy.`,
|
|
152
178
|
};
|
|
153
179
|
}
|
|
180
|
+
// Per-provider model allow/deny lists apply to all tiers.
|
|
181
|
+
if (!isModelAllowedByProvider(candidate.modelId, config.providerAllowedModels?.[candidate.providerId], config.providerDeniedModels?.[candidate.providerId])) {
|
|
182
|
+
return {
|
|
183
|
+
code: "model_not_allowed",
|
|
184
|
+
target: "candidate",
|
|
185
|
+
id,
|
|
186
|
+
message: `Candidate ${id} model ${candidate.modelId} is not allowed for provider ${candidate.providerId}.`,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
154
189
|
if (request.constraints.localOnly && candidate.authTier !== "local") {
|
|
155
190
|
return {
|
|
156
191
|
code: "local_only_required",
|
|
@@ -291,7 +326,53 @@ export function evaluatePolicy(request, candidates, config) {
|
|
|
291
326
|
const usableSubscription = hasUsableSubscriptionForTask(hardPassed, request, config);
|
|
292
327
|
const allowed = [];
|
|
293
328
|
for (const c of hardPassed) {
|
|
329
|
+
if (c.authTier === "subscription") {
|
|
330
|
+
// Subscription switch consent: in "ask" mode, a subscription candidate
|
|
331
|
+
// whose account differs from the provider family's most recently used
|
|
332
|
+
// account must be explicitly acknowledged per evaluation. First use of
|
|
333
|
+
// a family (no last-used record) never asks, and local/API-key tiers
|
|
334
|
+
// are never blocked by this gate.
|
|
335
|
+
if (config.subscriptionSwitch === "ask" &&
|
|
336
|
+
!config.switchApproved &&
|
|
337
|
+
c.accountId !== undefined) {
|
|
338
|
+
const lastUsed = config.lastUsedAccountByFamily?.[c.providerId];
|
|
339
|
+
if (lastUsed !== undefined && lastUsed !== c.accountId) {
|
|
340
|
+
denials.push({
|
|
341
|
+
code: "subscription_switch_requires_ack",
|
|
342
|
+
target: "candidate",
|
|
343
|
+
id: candidateId(c),
|
|
344
|
+
message: `Subscription candidate ${candidateId(c)} uses account ${c.accountId}, which differs from the most recently used account ${lastUsed} for provider ${c.providerId}. Pass --approve-switch (CLI) or approve_switch (MCP) to acknowledge the switch, or set [policy] subscription_switch = "auto".`,
|
|
345
|
+
});
|
|
346
|
+
continue;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}
|
|
294
350
|
if (c.authTier === "api-key") {
|
|
351
|
+
// Spend approval gate: when enabled, every API-key candidate must be
|
|
352
|
+
// explicitly approved per evaluation. Subscription and local tiers are
|
|
353
|
+
// never blocked by this gate.
|
|
354
|
+
if (config.requireApiSpendApproval && !config.apiSpendApproved) {
|
|
355
|
+
denials.push({
|
|
356
|
+
code: "api_spend_approval_required",
|
|
357
|
+
target: "candidate",
|
|
358
|
+
id: candidateId(c),
|
|
359
|
+
message: `API-key candidate ${candidateId(c)} blocked: API spend requires explicit approval. Pass --approve-api-spend (CLI) or approve_api_spend (MCP) to allow this candidate.`,
|
|
360
|
+
});
|
|
361
|
+
continue;
|
|
362
|
+
}
|
|
363
|
+
// Hard spend caps govern paid API spend only: subscription and local
|
|
364
|
+
// tiers are never blocked by them (subscription-first invariant).
|
|
365
|
+
const spendCapUsd = resolveSpendCapUsd(config, c.providerId);
|
|
366
|
+
const currentSpendUsd = config.currentSpendByProviderUsd?.[c.providerId] ?? 0;
|
|
367
|
+
if (spendCapUsd !== undefined && currentSpendUsd >= spendCapUsd) {
|
|
368
|
+
denials.push({
|
|
369
|
+
code: "spend_cap_exceeded",
|
|
370
|
+
target: "candidate",
|
|
371
|
+
id: candidateId(c),
|
|
372
|
+
message: `API-key candidate ${candidateId(c)} blocked: estimated paid spend ${currentSpendUsd} USD for provider ${c.providerId} meets or exceeds the configured spend cap ${spendCapUsd} USD for the current accounting window.`,
|
|
373
|
+
});
|
|
374
|
+
continue;
|
|
375
|
+
}
|
|
295
376
|
if (subscriptionFirst && usableSubscription) {
|
|
296
377
|
denials.push({
|
|
297
378
|
code: "api_key_blocked_by_subscription_first_policy",
|
package/dist/policy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
|