@relayplane/proxy 1.8.10 → 1.8.12

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.
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/config.js CHANGED
@@ -65,10 +65,27 @@ const path = __importStar(require("path"));
65
65
  const os = __importStar(require("os"));
66
66
  const crypto = __importStar(require("crypto"));
67
67
  const CONFIG_VERSION = 1;
68
- const CONFIG_DIR = path.join(os.homedir(), '.relayplane');
69
- const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
70
- const CONFIG_BACKUP = path.join(CONFIG_DIR, 'config.json.bak');
71
- const CONFIG_TMP = path.join(CONFIG_DIR, 'config.json.tmp');
68
+ /**
69
+ * Resolve the base RelayPlane config directory.
70
+ * Supports RELAYPLANE_HOME_OVERRIDE env var for dev/test isolation
71
+ * (e.g. RELAYPLANE_HOME_OVERRIDE=/root → uses /root/.relayplane/).
72
+ * Also supports RELAYPLANE_CONFIG_PATH for a fully custom config file path.
73
+ */
74
+ function resolveConfigDir() {
75
+ const homeOverride = process.env['RELAYPLANE_HOME_OVERRIDE'];
76
+ const base = homeOverride ?? os.homedir();
77
+ return path.join(base, '.relayplane');
78
+ }
79
+ function resolveConfigFilePath() {
80
+ const customPath = process.env['RELAYPLANE_CONFIG_PATH'];
81
+ if (customPath && customPath.trim())
82
+ return customPath;
83
+ return path.join(resolveConfigDir(), 'config.json');
84
+ }
85
+ const CONFIG_DIR = resolveConfigDir();
86
+ const CONFIG_FILE = resolveConfigFilePath();
87
+ const CONFIG_BACKUP = CONFIG_FILE + '.bak';
88
+ const CONFIG_TMP = CONFIG_FILE + '.tmp';
72
89
  const CREDENTIALS_FILE = path.join(CONFIG_DIR, 'credentials.json');
73
90
  /**
74
91
  * Generate an anonymous device ID
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Pre-flight cost estimation for RelayPlane proxy.
3
+ *
4
+ * POST /v1/estimate — Pro-tier feature.
5
+ *
6
+ * Accepts `{ model, messages, max_tokens }` (same shape as chat completions)
7
+ * and returns a cost estimate without forwarding to any provider.
8
+ *
9
+ * @packageDocumentation
10
+ */
11
+ import { MODEL_PRICING } from './telemetry.js';
12
+ export interface EstimateRequest {
13
+ model: string;
14
+ messages: Array<{
15
+ role: string;
16
+ content: string | unknown[];
17
+ }>;
18
+ max_tokens?: number;
19
+ }
20
+ export interface EstimateResponse {
21
+ model: string;
22
+ estimated_cost_usd: number;
23
+ input_tokens: number;
24
+ estimated_output_tokens: number;
25
+ provider: string;
26
+ note: 'estimate only';
27
+ }
28
+ export interface UpgradeRequiredError {
29
+ error: 'upgrade_required';
30
+ message: string;
31
+ url: string;
32
+ }
33
+ export interface InvalidRequestError {
34
+ error: 'invalid_request';
35
+ message: string;
36
+ }
37
+ /**
38
+ * Count tokens in a string using the standard 4-chars-per-token heuristic.
39
+ * This is equivalent to tiktoken for the purposes of cost estimation.
40
+ */
41
+ export declare function countTextTokens(text: string): number;
42
+ /**
43
+ * Count total input tokens across all messages.
44
+ */
45
+ export declare function countMessagesTokens(messages: Array<{
46
+ role: string;
47
+ content: string | unknown[];
48
+ }>): number;
49
+ /**
50
+ * Infer provider from model name.
51
+ */
52
+ export declare function inferProvider(model: string): string;
53
+ /**
54
+ * Returns true if the current local credentials indicate a Pro (or higher) plan.
55
+ * Also respects the RELAYPLANE_PRO_ESTIMATE env variable for testing / CI overrides.
56
+ * The env override is intentionally disabled in production to prevent bypassing the gate.
57
+ */
58
+ export declare function isProTier(): boolean;
59
+ /**
60
+ * Estimate cost for a chat request without forwarding to the provider.
61
+ */
62
+ export declare function estimateChatRequest(req: EstimateRequest): EstimateResponse;
63
+ /**
64
+ * The full estimate endpoint handler (called from standalone-proxy.ts).
65
+ * Returns `{ status, body }` so the proxy can write headers + body.
66
+ */
67
+ export declare function handleEstimateRequest(rawBody: string): {
68
+ status: number;
69
+ body: EstimateResponse | UpgradeRequiredError | InvalidRequestError;
70
+ };
71
+ /**
72
+ * Export the pricing table so tests and external callers can inspect it.
73
+ */
74
+ export { MODEL_PRICING };
75
+ export interface EstimateRateLimitEntry {
76
+ windowStart: number;
77
+ count: number;
78
+ }
79
+ export interface EstimateRateLimitResult {
80
+ /** Whether the request is allowed within the current window. */
81
+ allowed: boolean;
82
+ /** Current request count in the window (after incrementing on success). */
83
+ count: number;
84
+ }
85
+ /**
86
+ * Check and update the per-IP rate limit for /v1/estimate.
87
+ *
88
+ * Uses `remoteAddress` (socket-level) as the key — never x-forwarded-for.
89
+ * Mutates rateMap in place. Returns { allowed: false } when limit is exceeded.
90
+ */
91
+ export declare function checkEstimateRateLimit(rateMap: Map<string, EstimateRateLimitEntry>, ip: string, now: number, windowMs?: number, maxRequests?: number): EstimateRateLimitResult;
92
+ /**
93
+ * Purge entries from rateMap whose window has expired.
94
+ * Call this periodically (e.g. every 5 minutes) to bound memory usage.
95
+ */
96
+ export declare function purgeExpiredRateLimitEntries(rateMap: Map<string, EstimateRateLimitEntry>, now: number, windowMs?: number): void;
97
+ //# sourceMappingURL=estimate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"estimate.d.ts","sourceRoot":"","sources":["../src/estimate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAAgB,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAM7D,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,CAAA;KAAE,CAAC,CAAC;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB,EAAE,MAAM,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,iBAAiB,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAUD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,CAAA;CAAE,CAAC,GAC7D,MAAM,CAsBR;AAeD;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKnD;AAiBD;;;;GAIG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAkBnC;AAQD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,eAAe,GAAG,gBAAgB,CAoB1E;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,GACd;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,gBAAgB,GAAG,oBAAoB,GAAG,mBAAmB,CAAA;CAAE,CAqDzF;AAED;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,CAAC;AAMzB,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC,gEAAgE;IAChE,OAAO,EAAE,OAAO,CAAC;IACjB,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,EAC5C,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,MAAM,EACX,QAAQ,SAAS,EACjB,WAAW,SAAK,GACf,uBAAuB,CAYzB;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,EAC5C,GAAG,EAAE,MAAM,EACX,QAAQ,SAAS,GAChB,IAAI,CAMN"}
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ /**
3
+ * Pre-flight cost estimation for RelayPlane proxy.
4
+ *
5
+ * POST /v1/estimate — Pro-tier feature.
6
+ *
7
+ * Accepts `{ model, messages, max_tokens }` (same shape as chat completions)
8
+ * and returns a cost estimate without forwarding to any provider.
9
+ *
10
+ * @packageDocumentation
11
+ */
12
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ var desc = Object.getOwnPropertyDescriptor(m, k);
15
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
+ desc = { enumerable: true, get: function() { return m[k]; } };
17
+ }
18
+ Object.defineProperty(o, k2, desc);
19
+ }) : (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ o[k2] = m[k];
22
+ }));
23
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
25
+ }) : function(o, v) {
26
+ o["default"] = v;
27
+ });
28
+ var __importStar = (this && this.__importStar) || (function () {
29
+ var ownKeys = function(o) {
30
+ ownKeys = Object.getOwnPropertyNames || function (o) {
31
+ var ar = [];
32
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
33
+ return ar;
34
+ };
35
+ return ownKeys(o);
36
+ };
37
+ return function (mod) {
38
+ if (mod && mod.__esModule) return mod;
39
+ var result = {};
40
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
41
+ __setModuleDefault(result, mod);
42
+ return result;
43
+ };
44
+ })();
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.MODEL_PRICING = void 0;
47
+ exports.countTextTokens = countTextTokens;
48
+ exports.countMessagesTokens = countMessagesTokens;
49
+ exports.inferProvider = inferProvider;
50
+ exports.isProTier = isProTier;
51
+ exports.estimateChatRequest = estimateChatRequest;
52
+ exports.handleEstimateRequest = handleEstimateRequest;
53
+ exports.checkEstimateRateLimit = checkEstimateRateLimit;
54
+ exports.purgeExpiredRateLimitEntries = purgeExpiredRateLimitEntries;
55
+ const fs = __importStar(require("node:fs"));
56
+ const path = __importStar(require("node:path"));
57
+ const os = __importStar(require("node:os"));
58
+ const telemetry_js_1 = require("./telemetry.js");
59
+ Object.defineProperty(exports, "MODEL_PRICING", { enumerable: true, get: function () { return telemetry_js_1.MODEL_PRICING; } });
60
+ // ---------------------------------------------------------------------------
61
+ // Token counting (no external deps — ~4 chars per token heuristic + role overhead)
62
+ // ---------------------------------------------------------------------------
63
+ const CHARS_PER_TOKEN = 4;
64
+ // Anthropic/OpenAI: ~4 tokens overhead per message (role + structural markup)
65
+ const TOKENS_PER_MESSAGE_OVERHEAD = 4;
66
+ /**
67
+ * Count tokens in a string using the standard 4-chars-per-token heuristic.
68
+ * This is equivalent to tiktoken for the purposes of cost estimation.
69
+ */
70
+ function countTextTokens(text) {
71
+ return Math.ceil(text.length / CHARS_PER_TOKEN);
72
+ }
73
+ /**
74
+ * Count total input tokens across all messages.
75
+ */
76
+ function countMessagesTokens(messages) {
77
+ let total = 0;
78
+ for (const msg of messages) {
79
+ total += TOKENS_PER_MESSAGE_OVERHEAD;
80
+ const content = msg.content;
81
+ if (typeof content === 'string') {
82
+ total += countTextTokens(content);
83
+ }
84
+ else if (Array.isArray(content)) {
85
+ // OpenAI content blocks: [{type:'text', text:'...'}, ...]
86
+ for (const block of content) {
87
+ if (block !== null &&
88
+ typeof block === 'object' &&
89
+ 'text' in block &&
90
+ typeof block.text === 'string') {
91
+ total += countTextTokens(block.text);
92
+ }
93
+ }
94
+ }
95
+ }
96
+ return total;
97
+ }
98
+ // ---------------------------------------------------------------------------
99
+ // Provider inference from model name
100
+ // ---------------------------------------------------------------------------
101
+ const MODEL_PROVIDER_PATTERNS = [
102
+ { pattern: /^claude/i, provider: 'anthropic' },
103
+ { pattern: /^gpt-|^o[0-9]|^text-/i, provider: 'openai' },
104
+ { pattern: /^gemini/i, provider: 'google' },
105
+ { pattern: /^grok/i, provider: 'xai' },
106
+ { pattern: /^deepseek/i, provider: 'deepseek' },
107
+ { pattern: /^llama|^mixtral|^mistral/i, provider: 'openrouter' },
108
+ ];
109
+ /**
110
+ * Infer provider from model name.
111
+ */
112
+ function inferProvider(model) {
113
+ for (const { pattern, provider } of MODEL_PROVIDER_PATTERNS) {
114
+ if (pattern.test(model))
115
+ return provider;
116
+ }
117
+ return 'unknown';
118
+ }
119
+ // ---------------------------------------------------------------------------
120
+ // Pro tier check
121
+ // ---------------------------------------------------------------------------
122
+ const CONFIG_DIR = path.join(os.homedir(), '.relayplane');
123
+ const CREDENTIALS_PATH = path.join(CONFIG_DIR, 'credentials.json');
124
+ const PRO_PLANS = new Set(['pro', 'max', 'enterprise']);
125
+ /**
126
+ * Returns true if the current local credentials indicate a Pro (or higher) plan.
127
+ * Also respects the RELAYPLANE_PRO_ESTIMATE env variable for testing / CI overrides.
128
+ * The env override is intentionally disabled in production to prevent bypassing the gate.
129
+ */
130
+ function isProTier() {
131
+ // Allow env-based override in non-production environments only (tests, CI, dev)
132
+ if (process.env.NODE_ENV !== 'production') {
133
+ const envOverride = process.env.RELAYPLANE_PRO_ESTIMATE;
134
+ if (envOverride === 'true' || envOverride === '1')
135
+ return true;
136
+ if (envOverride === 'false' || envOverride === '0')
137
+ return false;
138
+ }
139
+ try {
140
+ if (fs.existsSync(CREDENTIALS_PATH)) {
141
+ const creds = JSON.parse(fs.readFileSync(CREDENTIALS_PATH, 'utf-8'));
142
+ if (creds.plan && PRO_PLANS.has(creds.plan.toLowerCase()))
143
+ return true;
144
+ }
145
+ }
146
+ catch {
147
+ // If we can't read credentials, treat as free tier
148
+ }
149
+ return false;
150
+ }
151
+ // ---------------------------------------------------------------------------
152
+ // Core estimation logic
153
+ // ---------------------------------------------------------------------------
154
+ const DEFAULT_OUTPUT_MULTIPLIER = 1.5;
155
+ /**
156
+ * Estimate cost for a chat request without forwarding to the provider.
157
+ */
158
+ function estimateChatRequest(req) {
159
+ const inputTokens = countMessagesTokens(req.messages);
160
+ const estimatedOutputTokens = req.max_tokens != null
161
+ ? req.max_tokens
162
+ : Math.ceil(inputTokens * DEFAULT_OUTPUT_MULTIPLIER);
163
+ const estimatedCostUsd = (0, telemetry_js_1.estimateCost)(req.model, inputTokens, estimatedOutputTokens);
164
+ const provider = inferProvider(req.model);
165
+ return {
166
+ model: req.model,
167
+ estimated_cost_usd: estimatedCostUsd,
168
+ input_tokens: inputTokens,
169
+ estimated_output_tokens: estimatedOutputTokens,
170
+ provider,
171
+ note: 'estimate only',
172
+ };
173
+ }
174
+ /**
175
+ * The full estimate endpoint handler (called from standalone-proxy.ts).
176
+ * Returns `{ status, body }` so the proxy can write headers + body.
177
+ */
178
+ function handleEstimateRequest(rawBody) {
179
+ // --- Pro tier gate ---
180
+ if (!isProTier()) {
181
+ return {
182
+ status: 402,
183
+ body: {
184
+ error: 'upgrade_required',
185
+ message: 'Upgrade to Pro for pre-flight cost estimation',
186
+ url: 'https://relayplane.com/pricing',
187
+ },
188
+ };
189
+ }
190
+ // --- Parse request ---
191
+ let req;
192
+ try {
193
+ req = JSON.parse(rawBody);
194
+ }
195
+ catch {
196
+ return {
197
+ status: 400,
198
+ body: {
199
+ error: 'invalid_request',
200
+ message: 'Invalid JSON body',
201
+ },
202
+ };
203
+ }
204
+ if (!req.model || !Array.isArray(req.messages)) {
205
+ return {
206
+ status: 400,
207
+ body: {
208
+ error: 'invalid_request',
209
+ message: 'model and messages are required',
210
+ },
211
+ };
212
+ }
213
+ // --- Validate max_tokens bounds ---
214
+ if (req.max_tokens != null &&
215
+ (req.max_tokens <= 0 || req.max_tokens > 200_000 || !Number.isFinite(req.max_tokens))) {
216
+ return {
217
+ status: 400,
218
+ body: {
219
+ error: 'invalid_request',
220
+ message: 'max_tokens must be 1–200000',
221
+ },
222
+ };
223
+ }
224
+ const estimate = estimateChatRequest(req);
225
+ return { status: 200, body: estimate };
226
+ }
227
+ /**
228
+ * Check and update the per-IP rate limit for /v1/estimate.
229
+ *
230
+ * Uses `remoteAddress` (socket-level) as the key — never x-forwarded-for.
231
+ * Mutates rateMap in place. Returns { allowed: false } when limit is exceeded.
232
+ */
233
+ function checkEstimateRateLimit(rateMap, ip, now, windowMs = 60_000, maxRequests = 60) {
234
+ const entry = rateMap.get(ip);
235
+ if (entry && now - entry.windowStart < windowMs) {
236
+ if (entry.count >= maxRequests) {
237
+ return { allowed: false, count: entry.count };
238
+ }
239
+ entry.count++;
240
+ return { allowed: true, count: entry.count };
241
+ }
242
+ // New window — create or reset entry
243
+ rateMap.set(ip, { windowStart: now, count: 1 });
244
+ return { allowed: true, count: 1 };
245
+ }
246
+ /**
247
+ * Purge entries from rateMap whose window has expired.
248
+ * Call this periodically (e.g. every 5 minutes) to bound memory usage.
249
+ */
250
+ function purgeExpiredRateLimitEntries(rateMap, now, windowMs = 60_000) {
251
+ for (const [ip, entry] of rateMap) {
252
+ if (now - entry.windowStart > windowMs) {
253
+ rateMap.delete(ip);
254
+ }
255
+ }
256
+ }
257
+ //# sourceMappingURL=estimate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"estimate.js","sourceRoot":"","sources":["../src/estimate.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -39,6 +39,8 @@ export { proxyStatsCollector } from './standalone-proxy.js';
39
39
  export { checkOllamaHealth, checkOllamaHealthCached, clearOllamaHealthCache, shouldRouteToOllama, resolveOllamaModel, forwardToOllama, forwardToOllamaStream, convertMessagesToOllama, buildOllamaRequest, convertOllamaResponse, convertOllamaStreamChunk, mapCloudModelToOllama, OLLAMA_DEFAULTS, CLOUD_TO_OLLAMA_MODEL_MAP, } from './ollama.js';
40
40
  export type { OllamaProviderConfig, OllamaHealthResult, } from './ollama.js';
41
41
  export type { Provider, TaskType } from '@relayplane/core';
42
+ export { RecoveryEngine, RecoveryPatternStore, FailureObserver, PatternApplicator, } from './recovery.js';
43
+ export type { RecoveryConfig, RecoveryPattern, RecoveryPatternType, RecoveryResult, RecoveryEvent, FailureContext, RequestOverrides, } from './recovery.js';
42
44
  export { ProxyServer, createProxyServer, createSandboxedProxyServer } from './server.js';
43
45
  export type { ProxyServerConfig } from './server.js';
44
46
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGzD,OAAO,EACL,UAAU,EACV,UAAU,EACV,YAAY,EACZ,UAAU,EACV,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,SAAS,EACT,YAAY,EACZ,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,WAAW,IAAI,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGnE,OAAO,EACL,eAAe,EACf,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,cAAc,EACd,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAGrB,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG3D,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzF,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGzD,OAAO,EACL,UAAU,EACV,UAAU,EACV,YAAY,EACZ,UAAU,EACV,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,SAAS,EACT,YAAY,EACZ,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,WAAW,IAAI,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGnE,OAAO,EACL,eAAe,EACf,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,cAAc,EACd,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAGrB,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG3D,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,cAAc,EACd,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzF,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -20,7 +20,7 @@
20
20
  */
21
21
  Object.defineProperty(exports, "__esModule", { value: true });
22
22
  exports.mapCloudModelToOllama = exports.convertOllamaStreamChunk = exports.convertOllamaResponse = exports.buildOllamaRequest = exports.convertMessagesToOllama = exports.forwardToOllamaStream = exports.forwardToOllama = exports.resolveOllamaModel = exports.shouldRouteToOllama = exports.clearOllamaHealthCache = exports.checkOllamaHealthCached = exports.checkOllamaHealth = exports.proxyStatsCollector = exports.defaultLogger = exports.resolveConfig = exports.StatusReporter = exports.StatsCollector = exports.probeHealth = exports.handleHealthRequest = exports.ProcessManager = exports.RelayPlaneMiddleware = exports.CircuitBreaker = exports.printTelemetryDisclosure = exports.getTelemetryPath = exports.clearTelemetry = exports.getTelemetryStats = exports.getLocalTelemetry = exports.clearAuditBuffer = exports.getAuditBuffer = exports.isOfflineMode = exports.setOfflineMode = exports.isAuditMode = exports.setAuditMode = exports.estimateCost = exports.inferTaskType = exports.recordTelemetry = exports.getConfigPath = exports.getConfigDir = exports.getApiKey = exports.setApiKey = exports.getDeviceId = exports.disableTelemetry = exports.enableTelemetry = exports.isTelemetryEnabled = exports.markFirstRunComplete = exports.isFirstRun = exports.updateConfig = exports.saveConfig = exports.loadConfig = exports.startProxy = void 0;
23
- exports.createSandboxedProxyServer = exports.createProxyServer = exports.ProxyServer = exports.CLOUD_TO_OLLAMA_MODEL_MAP = exports.OLLAMA_DEFAULTS = void 0;
23
+ exports.createSandboxedProxyServer = exports.createProxyServer = exports.ProxyServer = exports.PatternApplicator = exports.FailureObserver = exports.RecoveryPatternStore = exports.RecoveryEngine = exports.CLOUD_TO_OLLAMA_MODEL_MAP = exports.OLLAMA_DEFAULTS = void 0;
24
24
  // Standalone proxy (requires only @relayplane/core)
25
25
  var standalone_proxy_js_1 = require("./standalone-proxy.js");
26
26
  Object.defineProperty(exports, "startProxy", { enumerable: true, get: function () { return standalone_proxy_js_1.startProxy; } });
@@ -92,6 +92,12 @@ Object.defineProperty(exports, "convertOllamaStreamChunk", { enumerable: true, g
92
92
  Object.defineProperty(exports, "mapCloudModelToOllama", { enumerable: true, get: function () { return ollama_js_1.mapCloudModelToOllama; } });
93
93
  Object.defineProperty(exports, "OLLAMA_DEFAULTS", { enumerable: true, get: function () { return ollama_js_1.OLLAMA_DEFAULTS; } });
94
94
  Object.defineProperty(exports, "CLOUD_TO_OLLAMA_MODEL_MAP", { enumerable: true, get: function () { return ollama_js_1.CLOUD_TO_OLLAMA_MODEL_MAP; } });
95
+ // Adaptive Provider Recovery (Phase 1)
96
+ var recovery_js_1 = require("./recovery.js");
97
+ Object.defineProperty(exports, "RecoveryEngine", { enumerable: true, get: function () { return recovery_js_1.RecoveryEngine; } });
98
+ Object.defineProperty(exports, "RecoveryPatternStore", { enumerable: true, get: function () { return recovery_js_1.RecoveryPatternStore; } });
99
+ Object.defineProperty(exports, "FailureObserver", { enumerable: true, get: function () { return recovery_js_1.FailureObserver; } });
100
+ Object.defineProperty(exports, "PatternApplicator", { enumerable: true, get: function () { return recovery_js_1.PatternApplicator; } });
95
101
  // Advanced proxy server (requires @relayplane/ledger, @relayplane/auth-gate, etc.)
96
102
  var server_js_1 = require("./server.js");
97
103
  Object.defineProperty(exports, "ProxyServer", { enumerable: true, get: function () { return server_js_1.ProxyServer; } });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;;;AAEH,oDAAoD;AACpD,6DAAmD;AAA1C,iHAAA,UAAU,OAAA;AAGnB,gBAAgB;AAChB,yCAcqB;AAbnB,uGAAA,UAAU,OAAA;AACV,uGAAA,UAAU,OAAA;AACV,yGAAA,YAAY,OAAA;AACZ,uGAAA,UAAU,OAAA;AACV,iHAAA,oBAAoB,OAAA;AACpB,+GAAA,kBAAkB,OAAA;AAClB,4GAAA,eAAe,OAAA;AACf,6GAAA,gBAAgB,OAAA;AAChB,wGAAA,WAAW,OAAA;AACX,sGAAA,SAAS,OAAA;AACT,sGAAA,SAAS,OAAA;AACT,yGAAA,YAAY,OAAA;AACZ,0GAAA,aAAa,OAAA;AAIf,YAAY;AACZ,+CAewB;AAdtB,+GAAA,eAAe,OAAA;AACf,6GAAA,aAAa,OAAA;AACb,4GAAA,YAAY,OAAA;AACZ,4GAAA,YAAY,OAAA;AACZ,2GAAA,WAAW,OAAA;AACX,8GAAA,cAAc,OAAA;AACd,6GAAA,aAAa,OAAA;AACb,8GAAA,cAAc,OAAA;AACd,gHAAA,gBAAgB,OAAA;AAChB,iHAAA,iBAAiB,OAAA;AACjB,iHAAA,iBAAiB,OAAA;AACjB,8GAAA,cAAc,OAAA;AACd,gHAAA,gBAAgB,OAAA;AAChB,wHAAA,wBAAwB,OAAA;AAI1B,iCAAiC;AACjC,2DAAoE;AAA3D,oHAAA,cAAc,OAAA;AACvB,iDAAuD;AAA9C,qHAAA,oBAAoB,OAAA;AAE7B,2DAAsD;AAA7C,oHAAA,cAAc,OAAA;AACvB,yCAA+D;AAAtD,gHAAA,mBAAmB,OAAA;AAAE,wGAAA,WAAW,OAAA;AACzC,uCAA4C;AAAnC,0GAAA,cAAc,OAAA;AACvB,yCAA6C;AAApC,2GAAA,cAAc,OAAA;AAEvB,qDAAkD;AAAzC,gHAAA,aAAa,OAAA;AAEtB,yCAA4C;AAAnC,0GAAA,aAAa,OAAA;AAGtB,gDAAgD;AAChD,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA;AAE5B,8BAA8B;AAC9B,yCAeqB;AAdnB,8GAAA,iBAAiB,OAAA;AACjB,oHAAA,uBAAuB,OAAA;AACvB,mHAAA,sBAAsB,OAAA;AACtB,gHAAA,mBAAmB,OAAA;AACnB,+GAAA,kBAAkB,OAAA;AAClB,4GAAA,eAAe,OAAA;AACf,kHAAA,qBAAqB,OAAA;AACrB,oHAAA,uBAAuB,OAAA;AACvB,+GAAA,kBAAkB,OAAA;AAClB,kHAAA,qBAAqB,OAAA;AACrB,qHAAA,wBAAwB,OAAA;AACxB,kHAAA,qBAAqB,OAAA;AACrB,4GAAA,eAAe,OAAA;AACf,sHAAA,yBAAyB,OAAA;AAU3B,mFAAmF;AACnF,yCAAyF;AAAhF,wGAAA,WAAW,OAAA;AAAE,8GAAA,iBAAiB,OAAA;AAAE,uHAAA,0BAA0B,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;;;AAEH,oDAAoD;AACpD,6DAAmD;AAA1C,iHAAA,UAAU,OAAA;AAGnB,gBAAgB;AAChB,yCAcqB;AAbnB,uGAAA,UAAU,OAAA;AACV,uGAAA,UAAU,OAAA;AACV,yGAAA,YAAY,OAAA;AACZ,uGAAA,UAAU,OAAA;AACV,iHAAA,oBAAoB,OAAA;AACpB,+GAAA,kBAAkB,OAAA;AAClB,4GAAA,eAAe,OAAA;AACf,6GAAA,gBAAgB,OAAA;AAChB,wGAAA,WAAW,OAAA;AACX,sGAAA,SAAS,OAAA;AACT,sGAAA,SAAS,OAAA;AACT,yGAAA,YAAY,OAAA;AACZ,0GAAA,aAAa,OAAA;AAIf,YAAY;AACZ,+CAewB;AAdtB,+GAAA,eAAe,OAAA;AACf,6GAAA,aAAa,OAAA;AACb,4GAAA,YAAY,OAAA;AACZ,4GAAA,YAAY,OAAA;AACZ,2GAAA,WAAW,OAAA;AACX,8GAAA,cAAc,OAAA;AACd,6GAAA,aAAa,OAAA;AACb,8GAAA,cAAc,OAAA;AACd,gHAAA,gBAAgB,OAAA;AAChB,iHAAA,iBAAiB,OAAA;AACjB,iHAAA,iBAAiB,OAAA;AACjB,8GAAA,cAAc,OAAA;AACd,gHAAA,gBAAgB,OAAA;AAChB,wHAAA,wBAAwB,OAAA;AAI1B,iCAAiC;AACjC,2DAAoE;AAA3D,oHAAA,cAAc,OAAA;AACvB,iDAAuD;AAA9C,qHAAA,oBAAoB,OAAA;AAE7B,2DAAsD;AAA7C,oHAAA,cAAc,OAAA;AACvB,yCAA+D;AAAtD,gHAAA,mBAAmB,OAAA;AAAE,wGAAA,WAAW,OAAA;AACzC,uCAA4C;AAAnC,0GAAA,cAAc,OAAA;AACvB,yCAA6C;AAApC,2GAAA,cAAc,OAAA;AAEvB,qDAAkD;AAAzC,gHAAA,aAAa,OAAA;AAEtB,yCAA4C;AAAnC,0GAAA,aAAa,OAAA;AAGtB,gDAAgD;AAChD,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA;AAE5B,8BAA8B;AAC9B,yCAeqB;AAdnB,8GAAA,iBAAiB,OAAA;AACjB,oHAAA,uBAAuB,OAAA;AACvB,mHAAA,sBAAsB,OAAA;AACtB,gHAAA,mBAAmB,OAAA;AACnB,+GAAA,kBAAkB,OAAA;AAClB,4GAAA,eAAe,OAAA;AACf,kHAAA,qBAAqB,OAAA;AACrB,oHAAA,uBAAuB,OAAA;AACvB,+GAAA,kBAAkB,OAAA;AAClB,kHAAA,qBAAqB,OAAA;AACrB,qHAAA,wBAAwB,OAAA;AACxB,kHAAA,qBAAqB,OAAA;AACrB,4GAAA,eAAe,OAAA;AACf,sHAAA,yBAAyB,OAAA;AAU3B,uCAAuC;AACvC,6CAKuB;AAJrB,6GAAA,cAAc,OAAA;AACd,mHAAA,oBAAoB,OAAA;AACpB,8GAAA,eAAe,OAAA;AACf,gHAAA,iBAAiB,OAAA;AAYnB,mFAAmF;AACnF,yCAAyF;AAAhF,wGAAA,WAAW,OAAA;AAAE,8GAAA,iBAAiB,OAAA;AAAE,uHAAA,0BAA0B,OAAA"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Osmosis Phase 1 — KnowledgeAtom capture
3
+ *
4
+ * Stores per-request atoms in ~/.relayplane/osmosis.db (SQLite via better-sqlite3).
5
+ * Falls back to ~/.relayplane/osmosis.jsonl if SQLite is unavailable.
6
+ *
7
+ * All writes are fire-and-forget; errors are silently swallowed.
8
+ */
9
+ export interface SuccessAtom {
10
+ type: 'success';
11
+ model: string;
12
+ taskType: string;
13
+ latencyMs: number;
14
+ inputTokens: number;
15
+ outputTokens: number;
16
+ timestamp: number;
17
+ }
18
+ export interface FailureAtom {
19
+ type: 'failure';
20
+ errorType: string;
21
+ model: string;
22
+ fallbackTaken: boolean;
23
+ timestamp: number;
24
+ }
25
+ export type KnowledgeAtom = SuccessAtom | FailureAtom;
26
+ /**
27
+ * Capture a KnowledgeAtom (fire-and-forget).
28
+ * Never throws. Writes to SQLite; falls back to JSONL.
29
+ */
30
+ export declare function captureAtom(atom: KnowledgeAtom): void;
31
+ /** Exposed for testing — reset singleton state. */
32
+ export declare function _resetStore(): void;
33
+ //# sourceMappingURL=osmosis-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"osmosis-store.d.ts","sourceRoot":"","sources":["../src/osmosis-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,WAAW,CAAC;AA+EtD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAqCrD;AAED,mDAAmD;AACnD,wBAAgB,WAAW,IAAI,IAAI,CAOlC"}