@relayplane/proxy 0.2.0 → 1.1.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/index.js DELETED
@@ -1,74 +0,0 @@
1
- "use strict";
2
- /**
3
- * @relayplane/proxy
4
- *
5
- * RelayPlane Agent Ops Proxy Server
6
- *
7
- * Intelligent AI model routing with integrated observability via
8
- * the Learning Ledger and auth enforcement via Auth Gate.
9
- *
10
- * @example
11
- * ```typescript
12
- * import { createProxyServer } from '@relayplane/proxy';
13
- *
14
- * const server = createProxyServer({
15
- * port: 3001,
16
- * providers: {
17
- * anthropic: { apiKey: process.env.ANTHROPIC_API_KEY! },
18
- * openai: { apiKey: process.env.OPENAI_API_KEY! },
19
- * },
20
- * });
21
- *
22
- * await server.start();
23
- * ```
24
- *
25
- * @packageDocumentation
26
- */
27
- Object.defineProperty(exports, "__esModule", { value: true });
28
- 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 = exports.startKeepAlive = exports.aggregateStreamingResponse = exports.streamProviderResponse = exports.createSSEWriter = exports.SSEWriter = exports.createProxyServer = exports.ProxyServer = void 0;
29
- // New Agent Ops proxy server (Phase 1)
30
- var server_js_1 = require("./server.js");
31
- Object.defineProperty(exports, "ProxyServer", { enumerable: true, get: function () { return server_js_1.ProxyServer; } });
32
- Object.defineProperty(exports, "createProxyServer", { enumerable: true, get: function () { return server_js_1.createProxyServer; } });
33
- // Streaming support (Phase 8)
34
- var streaming_js_1 = require("./streaming.js");
35
- Object.defineProperty(exports, "SSEWriter", { enumerable: true, get: function () { return streaming_js_1.SSEWriter; } });
36
- Object.defineProperty(exports, "createSSEWriter", { enumerable: true, get: function () { return streaming_js_1.createSSEWriter; } });
37
- Object.defineProperty(exports, "streamProviderResponse", { enumerable: true, get: function () { return streaming_js_1.streamProviderResponse; } });
38
- Object.defineProperty(exports, "aggregateStreamingResponse", { enumerable: true, get: function () { return streaming_js_1.aggregateStreamingResponse; } });
39
- Object.defineProperty(exports, "startKeepAlive", { enumerable: true, get: function () { return streaming_js_1.startKeepAlive; } });
40
- // Legacy proxy functionality from openclaw
41
- var openclaw_1 = require("@relayplane/openclaw");
42
- Object.defineProperty(exports, "startProxy", { enumerable: true, get: function () { return openclaw_1.startProxy; } });
43
- // Configuration
44
- var config_js_1 = require("./config.js");
45
- Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return config_js_1.loadConfig; } });
46
- Object.defineProperty(exports, "saveConfig", { enumerable: true, get: function () { return config_js_1.saveConfig; } });
47
- Object.defineProperty(exports, "updateConfig", { enumerable: true, get: function () { return config_js_1.updateConfig; } });
48
- Object.defineProperty(exports, "isFirstRun", { enumerable: true, get: function () { return config_js_1.isFirstRun; } });
49
- Object.defineProperty(exports, "markFirstRunComplete", { enumerable: true, get: function () { return config_js_1.markFirstRunComplete; } });
50
- Object.defineProperty(exports, "isTelemetryEnabled", { enumerable: true, get: function () { return config_js_1.isTelemetryEnabled; } });
51
- Object.defineProperty(exports, "enableTelemetry", { enumerable: true, get: function () { return config_js_1.enableTelemetry; } });
52
- Object.defineProperty(exports, "disableTelemetry", { enumerable: true, get: function () { return config_js_1.disableTelemetry; } });
53
- Object.defineProperty(exports, "getDeviceId", { enumerable: true, get: function () { return config_js_1.getDeviceId; } });
54
- Object.defineProperty(exports, "setApiKey", { enumerable: true, get: function () { return config_js_1.setApiKey; } });
55
- Object.defineProperty(exports, "getApiKey", { enumerable: true, get: function () { return config_js_1.getApiKey; } });
56
- Object.defineProperty(exports, "getConfigDir", { enumerable: true, get: function () { return config_js_1.getConfigDir; } });
57
- Object.defineProperty(exports, "getConfigPath", { enumerable: true, get: function () { return config_js_1.getConfigPath; } });
58
- // Telemetry
59
- var telemetry_js_1 = require("./telemetry.js");
60
- Object.defineProperty(exports, "recordTelemetry", { enumerable: true, get: function () { return telemetry_js_1.recordTelemetry; } });
61
- Object.defineProperty(exports, "inferTaskType", { enumerable: true, get: function () { return telemetry_js_1.inferTaskType; } });
62
- Object.defineProperty(exports, "estimateCost", { enumerable: true, get: function () { return telemetry_js_1.estimateCost; } });
63
- Object.defineProperty(exports, "setAuditMode", { enumerable: true, get: function () { return telemetry_js_1.setAuditMode; } });
64
- Object.defineProperty(exports, "isAuditMode", { enumerable: true, get: function () { return telemetry_js_1.isAuditMode; } });
65
- Object.defineProperty(exports, "setOfflineMode", { enumerable: true, get: function () { return telemetry_js_1.setOfflineMode; } });
66
- Object.defineProperty(exports, "isOfflineMode", { enumerable: true, get: function () { return telemetry_js_1.isOfflineMode; } });
67
- Object.defineProperty(exports, "getAuditBuffer", { enumerable: true, get: function () { return telemetry_js_1.getAuditBuffer; } });
68
- Object.defineProperty(exports, "clearAuditBuffer", { enumerable: true, get: function () { return telemetry_js_1.clearAuditBuffer; } });
69
- Object.defineProperty(exports, "getLocalTelemetry", { enumerable: true, get: function () { return telemetry_js_1.getLocalTelemetry; } });
70
- Object.defineProperty(exports, "getTelemetryStats", { enumerable: true, get: function () { return telemetry_js_1.getTelemetryStats; } });
71
- Object.defineProperty(exports, "clearTelemetry", { enumerable: true, get: function () { return telemetry_js_1.clearTelemetry; } });
72
- Object.defineProperty(exports, "getTelemetryPath", { enumerable: true, get: function () { return telemetry_js_1.getTelemetryPath; } });
73
- Object.defineProperty(exports, "printTelemetryDisclosure", { enumerable: true, get: function () { return telemetry_js_1.printTelemetryDisclosure; } });
74
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;;;AAEH,uCAAuC;AACvC,yCAA6D;AAApD,wGAAA,WAAW,OAAA;AAAE,8GAAA,iBAAiB,OAAA;AAGvC,8BAA8B;AAC9B,+CAMwB;AALtB,yGAAA,SAAS,OAAA;AACT,+GAAA,eAAe,OAAA;AACf,sHAAA,sBAAsB,OAAA;AACtB,0HAAA,0BAA0B,OAAA;AAC1B,8GAAA,cAAc,OAAA;AAIhB,2CAA2C;AAC3C,iDAAoE;AAA3D,sGAAA,UAAU,OAAA;AAEnB,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"}
@@ -1,80 +0,0 @@
1
- /**
2
- * Streaming Support for RelayPlane Proxy
3
- *
4
- * Provides SSE (Server-Sent Events) streaming for LLM responses
5
- * and real-time updates.
6
- *
7
- * @packageDocumentation
8
- */
9
- import type { ServerResponse } from 'node:http';
10
- /**
11
- * SSE message structure
12
- */
13
- export interface SSEMessage {
14
- event?: string;
15
- data: unknown;
16
- id?: string;
17
- retry?: number;
18
- }
19
- /**
20
- * Stream writer for SSE responses
21
- */
22
- export declare class SSEWriter {
23
- private response;
24
- private closed;
25
- constructor(response: ServerResponse);
26
- /**
27
- * Write an SSE message
28
- */
29
- write(message: SSEMessage): boolean;
30
- /**
31
- * Write a data-only message (convenience method)
32
- */
33
- writeData(data: unknown): boolean;
34
- /**
35
- * Send a comment (keep-alive)
36
- */
37
- comment(text: string): boolean;
38
- /**
39
- * Close the stream
40
- */
41
- close(): void;
42
- /**
43
- * Check if stream is still open
44
- */
45
- isOpen(): boolean;
46
- }
47
- /**
48
- * Create an SSE writer
49
- */
50
- export declare function createSSEWriter(response: ServerResponse): SSEWriter;
51
- /**
52
- * Stream a provider response to SSE
53
- */
54
- export declare function streamProviderResponse(providerUrl: string, request: unknown, headers: Record<string, string>, writer: SSEWriter, callbacks?: {
55
- onChunk?: (chunk: unknown) => void;
56
- onComplete?: (fullResponse: unknown) => void;
57
- onError?: (error: Error) => void;
58
- }): Promise<{
59
- success: boolean;
60
- chunks: unknown[];
61
- ttftMs?: number;
62
- }>;
63
- /**
64
- * Aggregate streaming chunks into a complete response
65
- */
66
- export declare function aggregateStreamingResponse(chunks: unknown[]): {
67
- content: string;
68
- usage?: {
69
- prompt_tokens: number;
70
- completion_tokens: number;
71
- total_tokens: number;
72
- };
73
- model?: string;
74
- finish_reason?: string;
75
- };
76
- /**
77
- * Keep-alive ping for long-running streams
78
- */
79
- export declare function startKeepAlive(writer: SSEWriter, intervalMs?: number): () => void;
80
- //# sourceMappingURL=streaming.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["../src/streaming.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,MAAM,CAAS;gBAEX,QAAQ,EAAE,cAAc;IAiBpC;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO;IAsCnC;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;IAIjC;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAW9B;;OAEG;IACH,KAAK,IAAI,IAAI;IAQb;;OAEG;IACH,MAAM,IAAI,OAAO;CAGlB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,SAAS,CAEnE;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,MAAM,EAAE,SAAS,EACjB,SAAS,CAAC,EAAE;IACV,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC,GACA,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,OAAO,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAyGnE;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IACnF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAmDA;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,EACjB,UAAU,SAAQ,GACjB,MAAM,IAAI,CAUZ"}
package/dist/streaming.js DELETED
@@ -1,271 +0,0 @@
1
- "use strict";
2
- /**
3
- * Streaming Support for RelayPlane Proxy
4
- *
5
- * Provides SSE (Server-Sent Events) streaming for LLM responses
6
- * and real-time updates.
7
- *
8
- * @packageDocumentation
9
- */
10
- Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.SSEWriter = void 0;
12
- exports.createSSEWriter = createSSEWriter;
13
- exports.streamProviderResponse = streamProviderResponse;
14
- exports.aggregateStreamingResponse = aggregateStreamingResponse;
15
- exports.startKeepAlive = startKeepAlive;
16
- /**
17
- * Stream writer for SSE responses
18
- */
19
- class SSEWriter {
20
- response;
21
- closed = false;
22
- constructor(response) {
23
- this.response = response;
24
- // Set SSE headers
25
- response.writeHead(200, {
26
- 'Content-Type': 'text/event-stream',
27
- 'Cache-Control': 'no-cache',
28
- 'Connection': 'keep-alive',
29
- 'Access-Control-Allow-Origin': '*',
30
- });
31
- // Handle client disconnect
32
- response.on('close', () => {
33
- this.closed = true;
34
- });
35
- }
36
- /**
37
- * Write an SSE message
38
- */
39
- write(message) {
40
- if (this.closed)
41
- return false;
42
- const lines = [];
43
- if (message.event) {
44
- lines.push(`event: ${message.event}`);
45
- }
46
- if (message.id) {
47
- lines.push(`id: ${message.id}`);
48
- }
49
- if (message.retry !== undefined) {
50
- lines.push(`retry: ${message.retry}`);
51
- }
52
- // Data can be multi-line, each line needs data: prefix
53
- const dataStr = typeof message.data === 'string'
54
- ? message.data
55
- : JSON.stringify(message.data);
56
- for (const line of dataStr.split('\n')) {
57
- lines.push(`data: ${line}`);
58
- }
59
- lines.push(''); // Empty line to end message
60
- lines.push('');
61
- try {
62
- this.response.write(lines.join('\n'));
63
- return true;
64
- }
65
- catch {
66
- this.closed = true;
67
- return false;
68
- }
69
- }
70
- /**
71
- * Write a data-only message (convenience method)
72
- */
73
- writeData(data) {
74
- return this.write({ data });
75
- }
76
- /**
77
- * Send a comment (keep-alive)
78
- */
79
- comment(text) {
80
- if (this.closed)
81
- return false;
82
- try {
83
- this.response.write(`: ${text}\n\n`);
84
- return true;
85
- }
86
- catch {
87
- this.closed = true;
88
- return false;
89
- }
90
- }
91
- /**
92
- * Close the stream
93
- */
94
- close() {
95
- if (!this.closed) {
96
- this.write({ data: '[DONE]' });
97
- this.response.end();
98
- this.closed = true;
99
- }
100
- }
101
- /**
102
- * Check if stream is still open
103
- */
104
- isOpen() {
105
- return !this.closed;
106
- }
107
- }
108
- exports.SSEWriter = SSEWriter;
109
- /**
110
- * Create an SSE writer
111
- */
112
- function createSSEWriter(response) {
113
- return new SSEWriter(response);
114
- }
115
- /**
116
- * Stream a provider response to SSE
117
- */
118
- async function streamProviderResponse(providerUrl, request, headers, writer, callbacks) {
119
- const chunks = [];
120
- let ttftMs;
121
- const startTime = Date.now();
122
- try {
123
- const response = await fetch(providerUrl, {
124
- method: 'POST',
125
- headers: {
126
- ...headers,
127
- 'Accept': 'text/event-stream',
128
- },
129
- body: JSON.stringify(request),
130
- });
131
- if (!response.ok) {
132
- const error = new Error(`Provider returned ${response.status}`);
133
- callbacks?.onError?.(error);
134
- writer.write({
135
- event: 'error',
136
- data: { error: { message: error.message, status: response.status } },
137
- });
138
- writer.close();
139
- return { success: false, chunks };
140
- }
141
- if (!response.body) {
142
- const error = new Error('No response body');
143
- callbacks?.onError?.(error);
144
- writer.close();
145
- return { success: false, chunks };
146
- }
147
- const reader = response.body.getReader();
148
- const decoder = new TextDecoder();
149
- let buffer = '';
150
- while (true) {
151
- const { done, value } = await reader.read();
152
- if (done)
153
- break;
154
- if (ttftMs === undefined) {
155
- ttftMs = Date.now() - startTime;
156
- }
157
- buffer += decoder.decode(value, { stream: true });
158
- // Parse SSE events from buffer
159
- const lines = buffer.split('\n');
160
- buffer = lines.pop() ?? ''; // Keep incomplete line in buffer
161
- for (const line of lines) {
162
- if (line.startsWith('data: ')) {
163
- const data = line.slice(6);
164
- if (data === '[DONE]') {
165
- continue;
166
- }
167
- try {
168
- const parsed = JSON.parse(data);
169
- chunks.push(parsed);
170
- callbacks?.onChunk?.(parsed);
171
- // Forward to client
172
- if (!writer.write({ data: parsed })) {
173
- // Client disconnected
174
- return { success: false, chunks, ttftMs };
175
- }
176
- }
177
- catch {
178
- // Invalid JSON, skip
179
- }
180
- }
181
- }
182
- }
183
- // Process any remaining buffer
184
- if (buffer.startsWith('data: ')) {
185
- const data = buffer.slice(6);
186
- if (data && data !== '[DONE]') {
187
- try {
188
- const parsed = JSON.parse(data);
189
- chunks.push(parsed);
190
- callbacks?.onChunk?.(parsed);
191
- writer.write({ data: parsed });
192
- }
193
- catch {
194
- // Invalid JSON
195
- }
196
- }
197
- }
198
- callbacks?.onComplete?.(chunks);
199
- writer.close();
200
- return { success: true, chunks, ttftMs };
201
- }
202
- catch (error) {
203
- callbacks?.onError?.(error instanceof Error ? error : new Error(String(error)));
204
- writer.write({
205
- event: 'error',
206
- data: { error: { message: error instanceof Error ? error.message : 'Stream error' } },
207
- });
208
- writer.close();
209
- return { success: false, chunks, ttftMs };
210
- }
211
- }
212
- /**
213
- * Aggregate streaming chunks into a complete response
214
- */
215
- function aggregateStreamingResponse(chunks) {
216
- let content = '';
217
- let usage;
218
- let model;
219
- let finish_reason;
220
- for (const chunk of chunks) {
221
- if (typeof chunk !== 'object' || chunk === null)
222
- continue;
223
- const c = chunk;
224
- // Extract model
225
- if (c.model && typeof c.model === 'string') {
226
- model = c.model;
227
- }
228
- // Extract content from choices
229
- if (Array.isArray(c.choices) && c.choices.length > 0) {
230
- const choice = c.choices[0];
231
- // Delta content (streaming)
232
- if (choice.delta && typeof choice.delta === 'object') {
233
- const delta = choice.delta;
234
- if (typeof delta.content === 'string') {
235
- content += delta.content;
236
- }
237
- }
238
- // Finish reason
239
- if (choice.finish_reason && typeof choice.finish_reason === 'string') {
240
- finish_reason = choice.finish_reason;
241
- }
242
- }
243
- // Extract usage (usually in last chunk)
244
- if (c.usage && typeof c.usage === 'object') {
245
- const u = c.usage;
246
- if (typeof u.prompt_tokens === 'number' &&
247
- typeof u.completion_tokens === 'number') {
248
- usage = {
249
- prompt_tokens: u.prompt_tokens,
250
- completion_tokens: u.completion_tokens,
251
- total_tokens: u.total_tokens ?? u.prompt_tokens + u.completion_tokens,
252
- };
253
- }
254
- }
255
- }
256
- return { content, usage, model, finish_reason };
257
- }
258
- /**
259
- * Keep-alive ping for long-running streams
260
- */
261
- function startKeepAlive(writer, intervalMs = 15000) {
262
- const timer = setInterval(() => {
263
- if (!writer.isOpen()) {
264
- clearInterval(timer);
265
- return;
266
- }
267
- writer.comment('ping');
268
- }, intervalMs);
269
- return () => clearInterval(timer);
270
- }
271
- //# sourceMappingURL=streaming.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"streaming.js","sourceRoot":"","sources":["../src/streaming.ts"],"names":[],"mappings":"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"}
@@ -1,111 +0,0 @@
1
- /**
2
- * RelayPlane Proxy Telemetry
3
- *
4
- * Anonymized telemetry collection for improving model routing.
5
- *
6
- * What we collect (exact schema):
7
- * - device_id: anonymous random ID
8
- * - task_type: inferred from token patterns, NOT prompt content
9
- * - model: which model was used
10
- * - tokens_in/out: token counts
11
- * - latency_ms: response time
12
- * - success: whether request succeeded
13
- * - cost_usd: estimated cost
14
- *
15
- * What we NEVER collect:
16
- * - Prompts or responses
17
- * - File paths or contents
18
- * - Anything that could identify you or your project
19
- *
20
- * @packageDocumentation
21
- */
22
- /**
23
- * Telemetry event schema (matches PITCH-v2.md)
24
- */
25
- export interface TelemetryEvent {
26
- /** Anonymous device ID */
27
- device_id: string;
28
- /** Inferred task type (from token patterns, NOT prompt content) */
29
- task_type: string;
30
- /** Model used */
31
- model: string;
32
- /** Input tokens */
33
- tokens_in: number;
34
- /** Output tokens */
35
- tokens_out: number;
36
- /** Request latency in milliseconds */
37
- latency_ms: number;
38
- /** Whether request succeeded */
39
- success: boolean;
40
- /** Estimated cost in USD */
41
- cost_usd: number;
42
- /** Timestamp */
43
- timestamp: string;
44
- }
45
- /**
46
- * Task type inference based on token patterns
47
- * This infers task type from request characteristics, NOT from prompt content
48
- */
49
- export declare function inferTaskType(inputTokens: number, outputTokens: number, model: string, hasTools?: boolean): string;
50
- export declare function estimateCost(model: string, inputTokens: number, outputTokens: number): number;
51
- /**
52
- * Set audit mode - shows telemetry payload before sending
53
- */
54
- export declare function setAuditMode(enabled: boolean): void;
55
- /**
56
- * Check if audit mode is enabled
57
- */
58
- export declare function isAuditMode(): boolean;
59
- /**
60
- * Set offline mode - disables all network calls except LLM
61
- */
62
- export declare function setOfflineMode(enabled: boolean): void;
63
- /**
64
- * Check if offline mode is enabled
65
- */
66
- export declare function isOfflineMode(): boolean;
67
- /**
68
- * Get pending audit events
69
- */
70
- export declare function getAuditBuffer(): TelemetryEvent[];
71
- /**
72
- * Clear audit buffer
73
- */
74
- export declare function clearAuditBuffer(): void;
75
- /**
76
- * Record a telemetry event
77
- */
78
- export declare function recordTelemetry(event: Omit<TelemetryEvent, 'device_id' | 'timestamp'>): void;
79
- /**
80
- * Get local telemetry data
81
- */
82
- export declare function getLocalTelemetry(): TelemetryEvent[];
83
- /**
84
- * Get telemetry stats summary
85
- */
86
- export declare function getTelemetryStats(): {
87
- totalEvents: number;
88
- totalCost: number;
89
- byModel: Record<string, {
90
- count: number;
91
- cost: number;
92
- }>;
93
- byTaskType: Record<string, {
94
- count: number;
95
- cost: number;
96
- }>;
97
- successRate: number;
98
- };
99
- /**
100
- * Clear all local telemetry data
101
- */
102
- export declare function clearTelemetry(): void;
103
- /**
104
- * Get telemetry file path
105
- */
106
- export declare function getTelemetryPath(): string;
107
- /**
108
- * Print telemetry disclosure message
109
- */
110
- export declare function printTelemetryDisclosure(): void;
111
- //# sourceMappingURL=telemetry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAMH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAElB,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;IAElB,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IAEd,mBAAmB;IACnB,SAAS,EAAE,MAAM,CAAC;IAElB,oBAAoB;IACpB,UAAU,EAAE,MAAM,CAAC;IAEnB,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;IAEnB,gCAAgC;IAChC,OAAO,EAAE,OAAO,CAAC;IAEjB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAEjB,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAYD;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,QAAQ,GAAE,OAAe,GACxB,MAAM,CAiCR;AA4BD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAK7F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEnD;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAErD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,cAAc,EAAE,CAEjD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,WAAW,GAAG,WAAW,CAAC,GAAG,IAAI,CAmC5F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,EAAE,CAcpD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5D,WAAW,EAAE,MAAM,CAAC;CACrB,CAgCA;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAQrC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CA8B/C"}