@agentplugged/claw 0.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.
Files changed (149) hide show
  1. package/dist/cli.d.ts +11 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +111 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/config.d.ts +29 -0
  6. package/dist/config.d.ts.map +1 -0
  7. package/dist/config.js +94 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/index.d.ts +17 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +54 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/memory/capture.d.ts +13 -0
  14. package/dist/memory/capture.d.ts.map +1 -0
  15. package/dist/memory/capture.js +102 -0
  16. package/dist/memory/capture.js.map +1 -0
  17. package/dist/memory/db.d.ts +56 -0
  18. package/dist/memory/db.d.ts.map +1 -0
  19. package/dist/memory/db.js +206 -0
  20. package/dist/memory/db.js.map +1 -0
  21. package/dist/memory/index.d.ts +8 -0
  22. package/dist/memory/index.d.ts.map +1 -0
  23. package/dist/memory/index.js +42 -0
  24. package/dist/memory/index.js.map +1 -0
  25. package/dist/memory/llm-extract.d.ts +13 -0
  26. package/dist/memory/llm-extract.d.ts.map +1 -0
  27. package/dist/memory/llm-extract.js +135 -0
  28. package/dist/memory/llm-extract.js.map +1 -0
  29. package/dist/memory/recall.d.ts +16 -0
  30. package/dist/memory/recall.d.ts.map +1 -0
  31. package/dist/memory/recall.js +131 -0
  32. package/dist/memory/recall.js.map +1 -0
  33. package/dist/observability/collector.d.ts +40 -0
  34. package/dist/observability/collector.d.ts.map +1 -0
  35. package/dist/observability/collector.js +119 -0
  36. package/dist/observability/collector.js.map +1 -0
  37. package/dist/observability/db.d.ts +60 -0
  38. package/dist/observability/db.d.ts.map +1 -0
  39. package/dist/observability/db.js +189 -0
  40. package/dist/observability/db.js.map +1 -0
  41. package/dist/observability/index.d.ts +7 -0
  42. package/dist/observability/index.d.ts.map +1 -0
  43. package/dist/observability/index.js +35 -0
  44. package/dist/observability/index.js.map +1 -0
  45. package/dist/observability/queries.d.ts +54 -0
  46. package/dist/observability/queries.d.ts.map +1 -0
  47. package/dist/observability/queries.js +181 -0
  48. package/dist/observability/queries.js.map +1 -0
  49. package/dist/router/classifier.d.ts +8 -0
  50. package/dist/router/classifier.d.ts.map +1 -0
  51. package/dist/router/classifier.js +90 -0
  52. package/dist/router/classifier.js.map +1 -0
  53. package/dist/router/fallback.d.ts +18 -0
  54. package/dist/router/fallback.d.ts.map +1 -0
  55. package/dist/router/fallback.js +102 -0
  56. package/dist/router/fallback.js.map +1 -0
  57. package/dist/router/index.d.ts +5 -0
  58. package/dist/router/index.d.ts.map +1 -0
  59. package/dist/router/index.js +214 -0
  60. package/dist/router/index.js.map +1 -0
  61. package/dist/router/leak-detector.d.ts +33 -0
  62. package/dist/router/leak-detector.d.ts.map +1 -0
  63. package/dist/router/leak-detector.js +320 -0
  64. package/dist/router/leak-detector.js.map +1 -0
  65. package/dist/router/logger.d.ts +18 -0
  66. package/dist/router/logger.d.ts.map +1 -0
  67. package/dist/router/logger.js +130 -0
  68. package/dist/router/logger.js.map +1 -0
  69. package/dist/router/models.d.ts +5 -0
  70. package/dist/router/models.d.ts.map +1 -0
  71. package/dist/router/models.js +96 -0
  72. package/dist/router/models.js.map +1 -0
  73. package/dist/router/providers.d.ts +4 -0
  74. package/dist/router/providers.d.ts.map +1 -0
  75. package/dist/router/providers.js +323 -0
  76. package/dist/router/providers.js.map +1 -0
  77. package/dist/router/strategy.d.ts +29 -0
  78. package/dist/router/strategy.d.ts.map +1 -0
  79. package/dist/router/strategy.js +169 -0
  80. package/dist/router/strategy.js.map +1 -0
  81. package/dist/router/types.d.ts +63 -0
  82. package/dist/router/types.d.ts.map +1 -0
  83. package/dist/router/types.js +3 -0
  84. package/dist/router/types.js.map +1 -0
  85. package/dist/sidecar/auth.d.ts +7 -0
  86. package/dist/sidecar/auth.d.ts.map +1 -0
  87. package/dist/sidecar/auth.js +36 -0
  88. package/dist/sidecar/auth.js.map +1 -0
  89. package/dist/sidecar/index.d.ts +2 -0
  90. package/dist/sidecar/index.d.ts.map +1 -0
  91. package/dist/sidecar/index.js +336 -0
  92. package/dist/sidecar/index.js.map +1 -0
  93. package/dist/sidecar/routes/addons.d.ts +6 -0
  94. package/dist/sidecar/routes/addons.d.ts.map +1 -0
  95. package/dist/sidecar/routes/addons.js +332 -0
  96. package/dist/sidecar/routes/addons.js.map +1 -0
  97. package/dist/sidecar/routes/backup.d.ts +7 -0
  98. package/dist/sidecar/routes/backup.d.ts.map +1 -0
  99. package/dist/sidecar/routes/backup.js +204 -0
  100. package/dist/sidecar/routes/backup.js.map +1 -0
  101. package/dist/sidecar/routes/channels.d.ts +4 -0
  102. package/dist/sidecar/routes/channels.d.ts.map +1 -0
  103. package/dist/sidecar/routes/channels.js +120 -0
  104. package/dist/sidecar/routes/channels.js.map +1 -0
  105. package/dist/sidecar/routes/health.d.ts +5 -0
  106. package/dist/sidecar/routes/health.d.ts.map +1 -0
  107. package/dist/sidecar/routes/health.js +28 -0
  108. package/dist/sidecar/routes/health.js.map +1 -0
  109. package/dist/sidecar/routes/memory.d.ts +7 -0
  110. package/dist/sidecar/routes/memory.d.ts.map +1 -0
  111. package/dist/sidecar/routes/memory.js +234 -0
  112. package/dist/sidecar/routes/memory.js.map +1 -0
  113. package/dist/sidecar/routes/metrics.d.ts +5 -0
  114. package/dist/sidecar/routes/metrics.d.ts.map +1 -0
  115. package/dist/sidecar/routes/metrics.js +273 -0
  116. package/dist/sidecar/routes/metrics.js.map +1 -0
  117. package/dist/sidecar/routes/restart.d.ts +4 -0
  118. package/dist/sidecar/routes/restart.d.ts.map +1 -0
  119. package/dist/sidecar/routes/restart.js +81 -0
  120. package/dist/sidecar/routes/restart.js.map +1 -0
  121. package/dist/sidecar/routes/router-config.d.ts +5 -0
  122. package/dist/sidecar/routes/router-config.d.ts.map +1 -0
  123. package/dist/sidecar/routes/router-config.js +150 -0
  124. package/dist/sidecar/routes/router-config.js.map +1 -0
  125. package/dist/sidecar/routes/security.d.ts +8 -0
  126. package/dist/sidecar/routes/security.d.ts.map +1 -0
  127. package/dist/sidecar/routes/security.js +308 -0
  128. package/dist/sidecar/routes/security.js.map +1 -0
  129. package/dist/sidecar/routes/skills.d.ts +5 -0
  130. package/dist/sidecar/routes/skills.d.ts.map +1 -0
  131. package/dist/sidecar/routes/skills.js +146 -0
  132. package/dist/sidecar/routes/skills.js.map +1 -0
  133. package/dist/sidecar/routes/soul.d.ts +4 -0
  134. package/dist/sidecar/routes/soul.d.ts.map +1 -0
  135. package/dist/sidecar/routes/soul.js +115 -0
  136. package/dist/sidecar/routes/soul.js.map +1 -0
  137. package/dist/sidecar/routes/team.d.ts +4 -0
  138. package/dist/sidecar/routes/team.d.ts.map +1 -0
  139. package/dist/sidecar/routes/team.js +139 -0
  140. package/dist/sidecar/routes/team.js.map +1 -0
  141. package/dist/sidecar/routes/update.d.ts +4 -0
  142. package/dist/sidecar/routes/update.d.ts.map +1 -0
  143. package/dist/sidecar/routes/update.js +96 -0
  144. package/dist/sidecar/routes/update.js.map +1 -0
  145. package/dist/sidecar/utils.d.ts +9 -0
  146. package/dist/sidecar/utils.d.ts.map +1 -0
  147. package/dist/sidecar/utils.js +57 -0
  148. package/dist/sidecar/utils.js.map +1 -0
  149. package/package.json +45 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ export type LeakType = "api_key" | "env_var" | "password" | "token" | "email" | "credit_card" | "ssn" | "private_key" | "aws_key";
2
+ export interface LeakFinding {
3
+ /** Category of the detected leak */
4
+ type: LeakType;
5
+ /** Masked version of the matched text (first 4 chars + ***) */
6
+ match: string;
7
+ /** Character position in the original text where the match starts */
8
+ position: number;
9
+ }
10
+ export interface LeakDetectionResult {
11
+ /** True if at least one leak was detected */
12
+ leaked: boolean;
13
+ /** All individual findings */
14
+ findings: LeakFinding[];
15
+ }
16
+ /**
17
+ * Scan a text for potential data leaks.
18
+ *
19
+ * Returns all findings with masked match strings so the result itself
20
+ * does not become a leak vector (CWE-532).
21
+ */
22
+ export declare function detectLeaks(text: string): LeakDetectionResult;
23
+ /**
24
+ * Replace all detected leaks in the text with [REDACTED].
25
+ *
26
+ * This is the last line of defense before sending a response to the client.
27
+ * Use this after detectLeaks() confirms there are findings.
28
+ *
29
+ * OWASP ASVS V8.3.4: Verify that sensitive data is not sent to
30
+ * untrusted parties.
31
+ */
32
+ export declare function sanitizeResponse(text: string): string;
33
+ //# sourceMappingURL=leak-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leak-detector.d.ts","sourceRoot":"","sources":["../../src/router/leak-detector.ts"],"names":[],"mappings":"AAgBA,MAAM,MAAM,QAAQ,GAChB,SAAS,GACT,SAAS,GACT,UAAU,GACV,OAAO,GACP,OAAO,GACP,aAAa,GACb,KAAK,GACL,aAAa,GACb,SAAS,CAAC;AAEd,MAAM,WAAW,WAAW;IAC1B,oCAAoC;IACpC,IAAI,EAAE,QAAQ,CAAC;IACf,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,6CAA6C;IAC7C,MAAM,EAAE,OAAO,CAAC;IAChB,8BAA8B;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAgQD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAuC7D;AAMD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAwBrD"}
@@ -0,0 +1,320 @@
1
+ "use strict";
2
+ // ---------------------------------------------------------------------------
3
+ // Leak Detector — Scanne les reponses LLM pour detecter les fuites de donnees
4
+ // sensibles AVANT qu'elles ne soient renvoyees au client.
5
+ //
6
+ // References:
7
+ // - OWASP Top 10 2021 — A01:2021 Broken Access Control
8
+ // - OWASP Top 10 2021 — A02:2021 Cryptographic Failures
9
+ // - CWE-200: Exposure of Sensitive Information to an Unauthorized Actor
10
+ // - CWE-532: Insertion of Sensitive Information into Log File
11
+ // - OWASP ASVS v4.0.3 — V8: Data Protection
12
+ // ---------------------------------------------------------------------------
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.detectLeaks = detectLeaks;
15
+ exports.sanitizeResponse = sanitizeResponse;
16
+ // ---------------------------------------------------------------------------
17
+ // Helpers
18
+ // ---------------------------------------------------------------------------
19
+ /**
20
+ * Mask a matched string to avoid logging secrets in clear text.
21
+ * Shows at most the first 4 characters followed by "***".
22
+ *
23
+ * CWE-532: We never expose the full secret in logs or results.
24
+ */
25
+ function maskMatch(value) {
26
+ if (value.length <= 4) {
27
+ return value[0] + "***";
28
+ }
29
+ return value.slice(0, 4) + "***";
30
+ }
31
+ /**
32
+ * Luhn algorithm for credit card validation.
33
+ * Reduces false positives by verifying the checksum.
34
+ */
35
+ function luhnCheck(digits) {
36
+ const nums = digits.split("").map(Number);
37
+ let sum = 0;
38
+ let alternate = false;
39
+ for (let i = nums.length - 1; i >= 0; i--) {
40
+ let n = nums[i];
41
+ if (alternate) {
42
+ n *= 2;
43
+ if (n > 9) {
44
+ n -= 9;
45
+ }
46
+ }
47
+ sum += n;
48
+ alternate = !alternate;
49
+ }
50
+ return sum % 10 === 0;
51
+ }
52
+ /**
53
+ * All patterns are designed to minimize false positives:
54
+ * - API key patterns require a prefix + minimum length
55
+ * - Word boundaries (\b) prevent matching substrings (e.g. "skeleton" != "sk-eleton")
56
+ * - Credit cards require Luhn validation
57
+ * - Passwords require an assignment context (key=value)
58
+ */
59
+ const LEAK_PATTERNS = [
60
+ // -- Private keys (PEM format) --
61
+ // CWE-321: Use of Hard-coded Cryptographic Key
62
+ {
63
+ type: "private_key",
64
+ regex: /-----BEGIN\s+(?:RSA |EC |DSA |OPENSSH |PGP )?PRIVATE KEY-----[\s\S]*?-----END\s+(?:RSA |EC |DSA |OPENSSH |PGP )?PRIVATE KEY-----/g,
65
+ },
66
+ // -- AWS Access Keys --
67
+ // Always start with AKIA and are exactly 20 chars
68
+ {
69
+ type: "aws_key",
70
+ regex: /\bAKIA[0-9A-Z]{16}\b/g,
71
+ },
72
+ // -- API Keys with known prefixes --
73
+ // OpenAI: sk-... (min 20 chars after prefix to avoid "skeleton", "sk-ip", etc.)
74
+ {
75
+ type: "api_key",
76
+ regex: /\bsk-[A-Za-z0-9_-]{20,}\b/g,
77
+ },
78
+ // Anthropic: sk-ant-...
79
+ {
80
+ type: "api_key",
81
+ regex: /\bsk-ant-[A-Za-z0-9_-]{20,}\b/g,
82
+ },
83
+ // Generic key- prefix (min 20 chars)
84
+ {
85
+ type: "api_key",
86
+ regex: /\bkey-[A-Za-z0-9_-]{20,}\b/g,
87
+ },
88
+ // Google AI: AIzaSy...
89
+ {
90
+ type: "api_key",
91
+ regex: /\bAIzaSy[A-Za-z0-9_-]{30,}\b/g,
92
+ },
93
+ // GitHub personal access tokens
94
+ {
95
+ type: "api_key",
96
+ regex: /\bghp_[A-Za-z0-9]{36,}\b/g,
97
+ },
98
+ // GitHub fine-grained tokens
99
+ {
100
+ type: "api_key",
101
+ regex: /\bgithub_pat_[A-Za-z0-9_]{22,}\b/g,
102
+ },
103
+ // GitLab personal access tokens
104
+ {
105
+ type: "api_key",
106
+ regex: /\bglpat-[A-Za-z0-9_-]{20,}\b/g,
107
+ },
108
+ // Slack bot tokens
109
+ {
110
+ type: "api_key",
111
+ regex: /\bxoxb-[0-9]{10,}-[A-Za-z0-9-]+\b/g,
112
+ },
113
+ // Slack user tokens
114
+ {
115
+ type: "api_key",
116
+ regex: /\bxoxp-[0-9]{10,}-[A-Za-z0-9-]+\b/g,
117
+ },
118
+ // Stripe keys
119
+ {
120
+ type: "api_key",
121
+ regex: /\b[sr]k_(?:live|test)_[A-Za-z0-9]{20,}\b/g,
122
+ },
123
+ // Sendgrid
124
+ {
125
+ type: "api_key",
126
+ regex: /\bSG\.[A-Za-z0-9_-]{22,}\.[A-Za-z0-9_-]{22,}\b/g,
127
+ },
128
+ // Twilio
129
+ {
130
+ type: "api_key",
131
+ regex: /\bSK[0-9a-fA-F]{32}\b/g,
132
+ },
133
+ // -- JWT tokens --
134
+ // CWE-200: Must not leak session tokens
135
+ {
136
+ type: "token",
137
+ regex: /\beyJhbGciOi[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g,
138
+ },
139
+ // -- Environment variable references --
140
+ // process.env.SOMETHING
141
+ {
142
+ type: "env_var",
143
+ regex: /\bprocess\.env\.[A-Z_][A-Z0-9_]{2,}\b/g,
144
+ },
145
+ // os.environ["SOMETHING"] or os.environ.get("SOMETHING")
146
+ {
147
+ type: "env_var",
148
+ regex: /\bos\.environ(?:\[['"][A-Z_][A-Z0-9_]*['"]\]|\.get\(['"][A-Z_][A-Z0-9_]*['"]\))/g,
149
+ },
150
+ // Shell-style $ENV_VAR (min 3 chars in name, preceded by whitespace or line start)
151
+ {
152
+ type: "env_var",
153
+ regex: /(?:^|[\s=:])(\$[A-Z_][A-Z0-9_]{2,})\b/gm,
154
+ },
155
+ // -- Passwords / secrets in assignment context --
156
+ // Matches: password=xxx, secret=xxx, token=xxx, api_key=xxx, etc.
157
+ // Requires value to be at least 8 chars to avoid trivial matches
158
+ {
159
+ type: "password",
160
+ regex: /\b(?:password|passwd|pwd|secret|api_?key|api_?secret|auth_?token|access_?token|private_?key)\s*[:=]\s*['"]?([^\s'"]{8,})['"]?/gi,
161
+ },
162
+ // -- Email addresses --
163
+ // Detected in LLM output context — real emails that could be PII leaks
164
+ // CWE-359: Exposure of Private Personal Information
165
+ {
166
+ type: "email",
167
+ regex: /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/g,
168
+ validate: (match) => {
169
+ // Exclude obvious placeholder/example emails
170
+ const lowerMatch = match.toLowerCase();
171
+ const excludePatterns = [
172
+ "example.com",
173
+ "example.org",
174
+ "example.net",
175
+ "test.com",
176
+ "test.org",
177
+ "localhost",
178
+ "placeholder",
179
+ "user@",
180
+ "email@",
181
+ "your@",
182
+ "name@",
183
+ "noreply@",
184
+ "no-reply@",
185
+ "support@",
186
+ "info@",
187
+ "hello@",
188
+ "contact@",
189
+ ];
190
+ return !excludePatterns.some((p) => lowerMatch.includes(p) || lowerMatch.startsWith(p));
191
+ },
192
+ },
193
+ // -- Credit card numbers --
194
+ // 13-19 digits, possibly separated by spaces or dashes
195
+ // CWE-311: Missing Encryption of Sensitive Data
196
+ {
197
+ type: "credit_card",
198
+ regex: /\b(?:\d[ -]?){13,19}\b/g,
199
+ validate: (match) => {
200
+ const digits = match.replace(/[\s-]/g, "");
201
+ // Must be between 13 and 19 digits
202
+ if (digits.length < 13 || digits.length > 19)
203
+ return false;
204
+ // Must start with a valid card prefix
205
+ const validPrefixes = [
206
+ "4", // Visa
207
+ "5", // Mastercard
208
+ "34", // Amex
209
+ "37", // Amex
210
+ "6011", // Discover
211
+ "65", // Discover
212
+ "36", // Diners
213
+ "38", // Diners
214
+ "35", // JCB
215
+ ];
216
+ const startsValid = validPrefixes.some((p) => digits.startsWith(p));
217
+ if (!startsValid)
218
+ return false;
219
+ return luhnCheck(digits);
220
+ },
221
+ },
222
+ // -- US Social Security Numbers --
223
+ // CWE-359: Exposure of Private Personal Information
224
+ {
225
+ type: "ssn",
226
+ regex: /\b\d{3}-\d{2}-\d{4}\b/g,
227
+ validate: (match) => {
228
+ // Exclude known invalid SSN prefixes (000, 666, 900-999)
229
+ const area = parseInt(match.slice(0, 3), 10);
230
+ if (area === 0 || area === 666 || area >= 900)
231
+ return false;
232
+ // Group number cannot be 00
233
+ const group = parseInt(match.slice(4, 6), 10);
234
+ if (group === 0)
235
+ return false;
236
+ // Serial cannot be 0000
237
+ const serial = parseInt(match.slice(7, 11), 10);
238
+ if (serial === 0)
239
+ return false;
240
+ return true;
241
+ },
242
+ },
243
+ ];
244
+ // ---------------------------------------------------------------------------
245
+ // Core detection
246
+ // ---------------------------------------------------------------------------
247
+ /**
248
+ * Scan a text for potential data leaks.
249
+ *
250
+ * Returns all findings with masked match strings so the result itself
251
+ * does not become a leak vector (CWE-532).
252
+ */
253
+ function detectLeaks(text) {
254
+ const findings = [];
255
+ for (const pattern of LEAK_PATTERNS) {
256
+ // Reset lastIndex for global regexes
257
+ pattern.regex.lastIndex = 0;
258
+ let regexMatch;
259
+ while ((regexMatch = pattern.regex.exec(text)) !== null) {
260
+ // Use captured group if present (e.g., password value), otherwise full match
261
+ const matchedText = regexMatch[1] ?? regexMatch[0];
262
+ const position = regexMatch.index;
263
+ // Run optional validator to reduce false positives
264
+ if (pattern.validate && !pattern.validate(matchedText)) {
265
+ continue;
266
+ }
267
+ findings.push({
268
+ type: pattern.type,
269
+ match: maskMatch(matchedText),
270
+ position,
271
+ });
272
+ }
273
+ }
274
+ // Deduplicate findings at the same position (overlapping patterns)
275
+ const seen = new Set();
276
+ const deduped = findings.filter((f) => {
277
+ const key = `${f.type}:${f.position}`;
278
+ if (seen.has(key))
279
+ return false;
280
+ seen.add(key);
281
+ return true;
282
+ });
283
+ return {
284
+ leaked: deduped.length > 0,
285
+ findings: deduped,
286
+ };
287
+ }
288
+ // ---------------------------------------------------------------------------
289
+ // Sanitization
290
+ // ---------------------------------------------------------------------------
291
+ /**
292
+ * Replace all detected leaks in the text with [REDACTED].
293
+ *
294
+ * This is the last line of defense before sending a response to the client.
295
+ * Use this after detectLeaks() confirms there are findings.
296
+ *
297
+ * OWASP ASVS V8.3.4: Verify that sensitive data is not sent to
298
+ * untrusted parties.
299
+ */
300
+ function sanitizeResponse(text) {
301
+ let sanitized = text;
302
+ for (const pattern of LEAK_PATTERNS) {
303
+ // Reset lastIndex for global regexes
304
+ pattern.regex.lastIndex = 0;
305
+ sanitized = sanitized.replace(pattern.regex, (fullMatch, ...args) => {
306
+ // For patterns with capture groups, the captured group is the sensitive part
307
+ // but we replace the full match to preserve context
308
+ const capturedGroup = typeof args[0] === "string" ? args[0] : null;
309
+ if (pattern.validate) {
310
+ const toValidate = capturedGroup ?? fullMatch;
311
+ if (!pattern.validate(toValidate)) {
312
+ return fullMatch; // Not a real leak, leave untouched
313
+ }
314
+ }
315
+ return "[REDACTED]";
316
+ });
317
+ }
318
+ return sanitized;
319
+ }
320
+ //# sourceMappingURL=leak-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leak-detector.js","sourceRoot":"","sources":["../../src/router/leak-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import Database from "better-sqlite3";
2
+ import { RouterLogEntry } from "./types";
3
+ /**
4
+ * Opens (or creates) the SQLite database and ensures the schema exists.
5
+ * The DB file is stored at <dataDir>/router.db.
6
+ */
7
+ export declare function openDatabase(dataDir: string): Database.Database;
8
+ /**
9
+ * Inserts a log entry synchronously (SQLite writes are fast enough for this use case).
10
+ * Called after every proxied request.
11
+ */
12
+ export declare function logRouterRequest(db: Database.Database, entry: RouterLogEntry): void;
13
+ /**
14
+ * Calculates the cost in USD for a request given the model prices.
15
+ * inputPrice and outputPrice are expressed per 1M tokens.
16
+ */
17
+ export declare function calculateCost(inputTokens: number, outputTokens: number, inputPricePerM: number, outputPricePerM: number): number;
18
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/router/logger.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAyBzC;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAa/D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,cAAc,GACpB,IAAI,CAmCN;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,GACtB,MAAM,CAKR"}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.openDatabase = openDatabase;
40
+ exports.logRouterRequest = logRouterRequest;
41
+ exports.calculateCost = calculateCost;
42
+ const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ // Schema embedded as a constant so we can initialize the DB at runtime
46
+ // without reading from disk (the .sql file is for documentation/migrations).
47
+ const SCHEMA_SQL = `
48
+ CREATE TABLE IF NOT EXISTS router_logs (
49
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
50
+ timestamp TEXT NOT NULL,
51
+ model TEXT NOT NULL,
52
+ provider TEXT NOT NULL,
53
+ input_tokens INTEGER NOT NULL DEFAULT 0,
54
+ output_tokens INTEGER NOT NULL DEFAULT 0,
55
+ cost REAL NOT NULL DEFAULT 0,
56
+ latency_ms INTEGER NOT NULL DEFAULT 0,
57
+ complexity TEXT NOT NULL,
58
+ strategy TEXT NOT NULL,
59
+ fallback INTEGER NOT NULL DEFAULT 0,
60
+ success INTEGER NOT NULL DEFAULT 1,
61
+ error TEXT,
62
+ leak_detected INTEGER NOT NULL DEFAULT 0
63
+ );
64
+
65
+ CREATE INDEX IF NOT EXISTS idx_router_logs_timestamp ON router_logs(timestamp);
66
+ `;
67
+ /**
68
+ * Opens (or creates) the SQLite database and ensures the schema exists.
69
+ * The DB file is stored at <dataDir>/router.db.
70
+ */
71
+ function openDatabase(dataDir) {
72
+ if (!fs.existsSync(dataDir)) {
73
+ fs.mkdirSync(dataDir, { recursive: true });
74
+ }
75
+ const dbPath = path.join(dataDir, "router.db");
76
+ const db = new better_sqlite3_1.default(dbPath);
77
+ // Enable WAL for better concurrency (read while writing)
78
+ db.pragma("journal_mode = WAL");
79
+ db.exec(SCHEMA_SQL);
80
+ return db;
81
+ }
82
+ /**
83
+ * Inserts a log entry synchronously (SQLite writes are fast enough for this use case).
84
+ * Called after every proxied request.
85
+ */
86
+ function logRouterRequest(db, entry) {
87
+ try {
88
+ const stmt = db.prepare(`
89
+ INSERT INTO router_logs (
90
+ timestamp, model, provider,
91
+ input_tokens, output_tokens, cost,
92
+ latency_ms, complexity, strategy,
93
+ fallback, success, error, leak_detected
94
+ ) VALUES (
95
+ @timestamp, @model, @provider,
96
+ @inputTokens, @outputTokens, @cost,
97
+ @latencyMs, @complexity, @strategy,
98
+ @fallback, @success, @error, @leakDetected
99
+ )
100
+ `);
101
+ stmt.run({
102
+ timestamp: entry.timestamp,
103
+ model: entry.model,
104
+ provider: entry.provider,
105
+ inputTokens: entry.inputTokens,
106
+ outputTokens: entry.outputTokens,
107
+ cost: entry.cost,
108
+ latencyMs: entry.latencyMs,
109
+ complexity: entry.complexity,
110
+ strategy: entry.strategy,
111
+ fallback: entry.fallback ? 1 : 0,
112
+ success: entry.success ? 1 : 0,
113
+ error: entry.error ?? null,
114
+ leakDetected: entry.leakDetected ? 1 : 0,
115
+ });
116
+ }
117
+ catch (err) {
118
+ // Logging must never crash the proxy
119
+ console.error("[router/logger] Failed to write log entry:", err);
120
+ }
121
+ }
122
+ /**
123
+ * Calculates the cost in USD for a request given the model prices.
124
+ * inputPrice and outputPrice are expressed per 1M tokens.
125
+ */
126
+ function calculateCost(inputTokens, outputTokens, inputPricePerM, outputPricePerM) {
127
+ return ((inputTokens / 1_000_000) * inputPricePerM +
128
+ (outputTokens / 1_000_000) * outputPricePerM);
129
+ }
130
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/router/logger.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,oCAaC;AAMD,4CAsCC;AAMD,sCAUC;AAzGD,oEAAsC;AACtC,uCAAyB;AACzB,2CAA6B;AAG7B,uEAAuE;AACvE,6EAA6E;AAC7E,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;CAmBlB,CAAC;AAEF;;;GAGG;AACH,SAAgB,YAAY,CAAC,OAAe;IAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC/C,MAAM,EAAE,GAAG,IAAI,wBAAQ,CAAC,MAAM,CAAC,CAAC;IAEhC,yDAAyD;IACzD,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEpB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,SAAgB,gBAAgB,CAC9B,EAAqB,EACrB,KAAqB;IAErB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;KAYvB,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC;YACP,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI;YAC1B,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACzC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,qCAAqC;QACrC,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,GAAG,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,aAAa,CAC3B,WAAmB,EACnB,YAAoB,EACpB,cAAsB,EACtB,eAAuB;IAEvB,OAAO,CACL,CAAC,WAAW,GAAG,SAAS,CAAC,GAAG,cAAc;QAC1C,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG,eAAe,CAC7C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { ModelConfig } from "../config";
2
+ export declare const MODELS: ModelConfig[];
3
+ export declare const MODELS_BY_ID: Map<string, ModelConfig>;
4
+ export declare const MODELS_BY_PROVIDER: Map<string, ModelConfig[]>;
5
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/router/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,eAAO,MAAM,MAAM,EAAE,WAAW,EA4E/B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAEjD,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,CAmBxD,CAAC"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MODELS_BY_PROVIDER = exports.MODELS_BY_ID = exports.MODELS = void 0;
4
+ exports.MODELS = [
5
+ // Anthropic
6
+ {
7
+ id: "claude-haiku-4-5-20251001",
8
+ displayName: "Claude Haiku 4.5",
9
+ inputPrice: 0.80,
10
+ outputPrice: 4.00,
11
+ maxTokens: 8192,
12
+ tier: "economy",
13
+ },
14
+ {
15
+ id: "claude-sonnet-4-6",
16
+ displayName: "Claude Sonnet 4.6",
17
+ inputPrice: 3.00,
18
+ outputPrice: 15.00,
19
+ maxTokens: 8192,
20
+ tier: "standard",
21
+ },
22
+ {
23
+ id: "claude-opus-4-6",
24
+ displayName: "Claude Opus 4.6",
25
+ inputPrice: 15.00,
26
+ outputPrice: 75.00,
27
+ maxTokens: 8192,
28
+ tier: "premium",
29
+ },
30
+ // Google
31
+ {
32
+ id: "gemini-2.0-flash",
33
+ displayName: "Gemini 2.0 Flash",
34
+ inputPrice: 0.10,
35
+ outputPrice: 0.40,
36
+ maxTokens: 8192,
37
+ tier: "economy",
38
+ },
39
+ {
40
+ id: "gemini-2.0-pro",
41
+ displayName: "Gemini 2.0 Pro",
42
+ inputPrice: 1.25,
43
+ outputPrice: 5.00,
44
+ maxTokens: 8192,
45
+ tier: "standard",
46
+ },
47
+ {
48
+ id: "gemini-2.5-pro",
49
+ displayName: "Gemini 2.5 Pro",
50
+ inputPrice: 1.25,
51
+ outputPrice: 10.00,
52
+ maxTokens: 65536,
53
+ tier: "premium",
54
+ },
55
+ // OpenAI
56
+ {
57
+ id: "gpt-4o-mini",
58
+ displayName: "GPT-4o Mini",
59
+ inputPrice: 0.15,
60
+ outputPrice: 0.60,
61
+ maxTokens: 16384,
62
+ tier: "economy",
63
+ },
64
+ {
65
+ id: "gpt-4o",
66
+ displayName: "GPT-4o",
67
+ inputPrice: 2.50,
68
+ outputPrice: 10.00,
69
+ maxTokens: 16384,
70
+ tier: "standard",
71
+ },
72
+ {
73
+ id: "o3",
74
+ displayName: "o3",
75
+ inputPrice: 10.00,
76
+ outputPrice: 40.00,
77
+ maxTokens: 100000,
78
+ tier: "premium",
79
+ },
80
+ ];
81
+ exports.MODELS_BY_ID = new Map(exports.MODELS.map((m) => [m.id, m]));
82
+ exports.MODELS_BY_PROVIDER = new Map([
83
+ [
84
+ "anthropic",
85
+ exports.MODELS.filter((m) => m.id.startsWith("claude-")),
86
+ ],
87
+ [
88
+ "openai",
89
+ exports.MODELS.filter((m) => m.id.startsWith("gpt-") || m.id === "o3"),
90
+ ],
91
+ [
92
+ "google",
93
+ exports.MODELS.filter((m) => m.id.startsWith("gemini-")),
94
+ ],
95
+ ]);
96
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/router/models.ts"],"names":[],"mappings":";;;AAEa,QAAA,MAAM,GAAkB;IACnC,YAAY;IACZ;QACE,EAAE,EAAE,2BAA2B;QAC/B,WAAW,EAAE,kBAAkB;QAC/B,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,SAAS;KAChB;IACD;QACE,EAAE,EAAE,mBAAmB;QACvB,WAAW,EAAE,mBAAmB;QAChC,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,KAAK;QAClB,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,UAAU;KACjB;IACD;QACE,EAAE,EAAE,iBAAiB;QACrB,WAAW,EAAE,iBAAiB;QAC9B,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,KAAK;QAClB,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,SAAS;KAChB;IACD,SAAS;IACT;QACE,EAAE,EAAE,kBAAkB;QACtB,WAAW,EAAE,kBAAkB;QAC/B,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,SAAS;KAChB;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,WAAW,EAAE,gBAAgB;QAC7B,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,UAAU;KACjB;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,WAAW,EAAE,gBAAgB;QAC7B,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,KAAK;QAClB,SAAS,EAAE,KAAK;QAChB,IAAI,EAAE,SAAS;KAChB;IACD,SAAS;IACT;QACE,EAAE,EAAE,aAAa;QACjB,WAAW,EAAE,aAAa;QAC1B,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,KAAK;QAChB,IAAI,EAAE,SAAS;KAChB;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,WAAW,EAAE,QAAQ;QACrB,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,KAAK;QAClB,SAAS,EAAE,KAAK;QAChB,IAAI,EAAE,UAAU;KACjB;IACD;QACE,EAAE,EAAE,IAAI;QACR,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,KAAK;QAClB,SAAS,EAAE,MAAM;QACjB,IAAI,EAAE,SAAS;KAChB;CACF,CAAC;AAEW,QAAA,YAAY,GAA6B,IAAI,GAAG,CAC3D,cAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAC7B,CAAC;AAEW,QAAA,kBAAkB,GAA+B,IAAI,GAAG,CAAC;IACpE;QACE,WAAW;QACX,cAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAClB,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAC3B;KACF;IACD;QACE,QAAQ;QACR,cAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAClB,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CACzC;KACF;IACD;QACE,QAAQ;QACR,cAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAClB,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAC3B;KACF;CACF,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { ModelConfig, ProviderConfig } from "../config";
2
+ import { ChatCompletionRequest, ChatCompletionResponse } from "./types";
3
+ export declare function forwardToProvider(provider: ProviderConfig, model: ModelConfig, request: ChatCompletionRequest): Promise<ChatCompletionResponse>;
4
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/router/providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EAGvB,MAAM,SAAS,CAAC;AAqejB,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,sBAAsB,CAAC,CAajC"}