ghagga-core 3.0.0 → 3.2.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 (79) hide show
  1. package/dist/agents/audit.js +1 -1
  2. package/dist/agents/audit.js.map +1 -1
  3. package/dist/agents/diagnostic.d.ts.map +1 -1
  4. package/dist/agents/diagnostic.js +1 -1
  5. package/dist/agents/diagnostic.js.map +1 -1
  6. package/dist/agents/fan-out-lenses.js +1 -1
  7. package/dist/agents/fan-out-lenses.js.map +1 -1
  8. package/dist/agents/prompts.js +1 -1
  9. package/dist/agents/prompts.js.map +1 -1
  10. package/dist/agents/simple.d.ts.map +1 -1
  11. package/dist/agents/simple.js +1 -1
  12. package/dist/agents/simple.js.map +1 -1
  13. package/dist/embed.d.ts +140 -0
  14. package/dist/embed.d.ts.map +1 -1
  15. package/dist/embed.js +288 -0
  16. package/dist/embed.js.map +1 -1
  17. package/dist/index.d.ts +6 -2
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +3 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/memory/backfill.d.ts +58 -0
  22. package/dist/memory/backfill.d.ts.map +1 -0
  23. package/dist/memory/backfill.js +85 -0
  24. package/dist/memory/backfill.js.map +1 -0
  25. package/dist/memory/sqlite.d.ts +78 -12
  26. package/dist/memory/sqlite.d.ts.map +1 -1
  27. package/dist/memory/sqlite.js +265 -85
  28. package/dist/memory/sqlite.js.map +1 -1
  29. package/dist/pipeline/gather-context.d.ts.map +1 -1
  30. package/dist/pipeline/gather-context.js +4 -2
  31. package/dist/pipeline/gather-context.js.map +1 -1
  32. package/dist/pipeline/gather-safe.d.ts +24 -4
  33. package/dist/pipeline/gather-safe.d.ts.map +1 -1
  34. package/dist/pipeline/gather-safe.js +42 -6
  35. package/dist/pipeline/gather-safe.js.map +1 -1
  36. package/dist/pipeline/prepare.d.ts.map +1 -1
  37. package/dist/pipeline/prepare.js +26 -0
  38. package/dist/pipeline/prepare.js.map +1 -1
  39. package/dist/pipeline/providers.d.ts.map +1 -1
  40. package/dist/pipeline/providers.js +1 -0
  41. package/dist/pipeline/providers.js.map +1 -1
  42. package/dist/pipeline/state.d.ts +3 -1
  43. package/dist/pipeline/state.d.ts.map +1 -1
  44. package/dist/providers/cli-bridge.d.ts +5 -0
  45. package/dist/providers/cli-bridge.d.ts.map +1 -1
  46. package/dist/providers/cli-bridge.js +65 -5
  47. package/dist/providers/cli-bridge.js.map +1 -1
  48. package/dist/providers/gateway-discovery.d.ts +60 -0
  49. package/dist/providers/gateway-discovery.d.ts.map +1 -0
  50. package/dist/providers/gateway-discovery.js +118 -0
  51. package/dist/providers/gateway-discovery.js.map +1 -0
  52. package/dist/providers/gateway.d.ts +95 -0
  53. package/dist/providers/gateway.d.ts.map +1 -1
  54. package/dist/providers/gateway.js +391 -9
  55. package/dist/providers/gateway.js.map +1 -1
  56. package/dist/providers/generate-fn.d.ts +1 -0
  57. package/dist/providers/generate-fn.d.ts.map +1 -1
  58. package/dist/providers/generate-fn.js.map +1 -1
  59. package/dist/tools/cpd.js +2 -2
  60. package/dist/tools/cpd.js.map +1 -1
  61. package/dist/tools/execution.d.ts +3 -1
  62. package/dist/tools/execution.d.ts.map +1 -1
  63. package/dist/tools/execution.js +10 -2
  64. package/dist/tools/execution.js.map +1 -1
  65. package/dist/tools/gitleaks-config.toml +23 -0
  66. package/dist/tools/runner.d.ts.map +1 -1
  67. package/dist/tools/runner.js +2 -1
  68. package/dist/tools/runner.js.map +1 -1
  69. package/dist/tools/semgrep.js +2 -2
  70. package/dist/tools/semgrep.js.map +1 -1
  71. package/dist/types.d.ts +47 -2
  72. package/dist/types.d.ts.map +1 -1
  73. package/dist/types.js.map +1 -1
  74. package/dist/utils/concurrency.d.ts.map +1 -1
  75. package/dist/utils/concurrency.js +37 -1
  76. package/dist/utils/concurrency.js.map +1 -1
  77. package/dist/utils/llm-timeout.d.ts +1 -1
  78. package/dist/utils/llm-timeout.d.ts.map +1 -1
  79. package/package.json +9 -9
@@ -9,9 +9,394 @@
9
9
  * Request: { prompt, system, provider?, model?, project? }
10
10
  * Response: { text, provider, model, tokensUsed }
11
11
  *
12
+ * When `provider` is set, the bridge short-circuits its model-based routing
13
+ * and selects that provider directly (the model is passed through verbatim).
14
+ *
12
15
  * This provider bypasses the AI SDK entirely — the gateway handles model
13
16
  * selection, provider routing, and token management internally.
17
+ *
18
+ * ─── SSRF / DNS-rebinding defense (SEC-001) ─────────────────────────────────
19
+ *
20
+ * The gateway URL is user-supplied (dashboard provider chain). A naive
21
+ * `fetch(url)` re-resolves the hostname at connection time, so an attacker who
22
+ * controls the hostname's DNS can pass a persist-time/validation-time check
23
+ * (resolving to a public IP) and then rebind the record to loopback, cloud
24
+ * metadata (169.254.169.254), or an RFC-1918 host before the actual request.
25
+ *
26
+ * `pinnedFetch` (below) closes that TOCTOU: it resolves the hostname EXACTLY
27
+ * ONCE, validates EVERY A/AAAA answer against the forbidden ranges, rejects
28
+ * mixed public/private answer sets, picks one approved IP, and PINS the socket
29
+ * to that IP via a custom `lookup` fed to Node's built-in http/https client —
30
+ * while preserving the original Host header and TLS SNI (servername). Both the
31
+ * generation path (this file) AND the discovery path (gateway-discovery.ts)
32
+ * route through the SAME `pinnedFetch`, so they share one pinning policy.
33
+ *
34
+ * Node's http/https client never auto-follows redirects, so a 3xx surfaces as a
35
+ * non-ok response (the old `redirect: 'manual'` posture) and can never chase a
36
+ * Location header to an unvalidated address.
37
+ *
38
+ * Self-hosted escape hatch: `GHAGGA_ALLOW_PRIVATE_GATEWAY=true` skips the
39
+ * IP-range checks (for gateways that legitimately live on a private network) —
40
+ * the connection is STILL pinned to the resolved address, and the protocol /
41
+ * userinfo checks are always enforced.
42
+ */
43
+ import { lookup as dnsLookup } from 'node:dns/promises';
44
+ import { request as httpRequest } from 'node:http';
45
+ import { request as httpsRequest } from 'node:https';
46
+ import { isIP } from 'node:net';
47
+ // ─── SSRF IP-range validation (self-contained) ──────────────────
48
+ //
49
+ // core cannot import the server's safe-url module (wrong dependency
50
+ // direction), so the forbidden-range logic lives here as the single source of
51
+ // truth for the pinned client. It mirrors apps/server/src/lib/safe-url.ts.
52
+ /** Parse a dotted-quad IPv4 string into 4 octets, or null if malformed. */
53
+ function parseIPv4(ip) {
54
+ const parts = ip.split('.');
55
+ if (parts.length !== 4)
56
+ return null;
57
+ const octets = parts.map((p) => Number(p));
58
+ if (octets.some((o) => !Number.isInteger(o) || o < 0 || o > 255))
59
+ return null;
60
+ return octets;
61
+ }
62
+ /** Reason an IPv4 address is in a forbidden range, or null if acceptable. */
63
+ function forbiddenIPv4Reason(ip) {
64
+ const octets = parseIPv4(ip);
65
+ if (!octets)
66
+ return 'malformed IPv4 address';
67
+ const [a, b] = octets;
68
+ if (a === 0)
69
+ return 'unspecified address (0.0.0.0/8)';
70
+ if (a === 127)
71
+ return 'loopback address (127.0.0.0/8)';
72
+ if (a === 10)
73
+ return 'private address (10.0.0.0/8)';
74
+ if (a === 172 && b >= 16 && b <= 31)
75
+ return 'private address (172.16.0.0/12)';
76
+ if (a === 192 && b === 168)
77
+ return 'private address (192.168.0.0/16)';
78
+ if (a === 169 && b === 254)
79
+ return 'link-local/metadata address (169.254.0.0/16)';
80
+ // 100.64.0.0/10 — CGNAT (RFC 6598); a real SSRF entry on EKS/GCP internal ranges.
81
+ if (a === 100 && b >= 64 && b <= 127)
82
+ return 'CGNAT address (100.64.0.0/10)';
83
+ // 192.0.0.0/24 — IETF protocol assignments (includes 192.0.0.192).
84
+ if (a === 192 && b === 0 && octets[2] === 0)
85
+ return 'IETF protocol assignment (192.0.0.0/24)';
86
+ // 224.0.0.0/4 — multicast.
87
+ if (a >= 224 && a <= 239)
88
+ return 'multicast address (224.0.0.0/4)';
89
+ // 240.0.0.0/4 — reserved (future use).
90
+ if (a >= 240)
91
+ return 'reserved address (240.0.0.0/4)';
92
+ return null;
93
+ }
94
+ /**
95
+ * Expand an IPv6 string into 8 hextets. Handles `::` compression and a trailing
96
+ * embedded dotted IPv4 (e.g. ::ffff:127.0.0.1). Returns null if malformed.
97
+ */
98
+ function expandIPv6(ip) {
99
+ let addr = ip.toLowerCase();
100
+ const zoneIdx = addr.indexOf('%');
101
+ if (zoneIdx !== -1)
102
+ addr = addr.slice(0, zoneIdx);
103
+ const lastColon = addr.lastIndexOf(':');
104
+ const tail = addr.slice(lastColon + 1);
105
+ if (tail.includes('.')) {
106
+ const v4 = parseIPv4(tail);
107
+ if (!v4)
108
+ return null;
109
+ const [a, b, c, d] = v4;
110
+ const hi = ((a << 8) | b).toString(16);
111
+ const lo = ((c << 8) | d).toString(16);
112
+ addr = `${addr.slice(0, lastColon)}:${hi}:${lo}`;
113
+ }
114
+ const doubleColonParts = addr.split('::');
115
+ if (doubleColonParts.length > 2)
116
+ return null;
117
+ const toHextets = (s) => {
118
+ if (s === '')
119
+ return [];
120
+ const groups = s.split(':');
121
+ const nums = [];
122
+ for (const g of groups) {
123
+ if (!/^[0-9a-f]{1,4}$/.test(g))
124
+ return null;
125
+ nums.push(parseInt(g, 16));
126
+ }
127
+ return nums;
128
+ };
129
+ if (doubleColonParts.length === 2) {
130
+ const [headPart, tailPart] = doubleColonParts;
131
+ const head = toHextets(headPart);
132
+ const tailHex = toHextets(tailPart);
133
+ if (!head || !tailHex)
134
+ return null;
135
+ const fill = 8 - head.length - tailHex.length;
136
+ if (fill < 1)
137
+ return null;
138
+ return [...head, ...new Array(fill).fill(0), ...tailHex];
139
+ }
140
+ const full = toHextets(addr);
141
+ if (full?.length !== 8)
142
+ return null;
143
+ return full;
144
+ }
145
+ /** Reason an IPv6 address is in a forbidden range, or null if acceptable. */
146
+ function forbiddenIPv6Reason(ip) {
147
+ const hextets = expandIPv6(ip);
148
+ if (!hextets)
149
+ return 'malformed IPv6 address';
150
+ const allZeroExceptLast = hextets.slice(0, 7).every((h) => h === 0);
151
+ if (allZeroExceptLast && hextets[7] === 0)
152
+ return 'unspecified address (::)';
153
+ if (allZeroExceptLast && hextets[7] === 1)
154
+ return 'loopback address (::1)';
155
+ const isV4Mapped = hextets.slice(0, 5).every((h) => h === 0) && hextets[5] === 0xffff;
156
+ if (isV4Mapped) {
157
+ const [h6, h7] = [hextets[6], hextets[7]];
158
+ const v4 = `${h6 >> 8}.${h6 & 0xff}.${h7 >> 8}.${h7 & 0xff}`;
159
+ const reason = forbiddenIPv4Reason(v4);
160
+ return reason ? `IPv4-mapped ${reason}` : null;
161
+ }
162
+ const h0 = hextets[0];
163
+ if ((h0 & 0xffc0) === 0xfe80)
164
+ return 'link-local address (fe80::/10)';
165
+ if ((h0 & 0xfe00) === 0xfc00)
166
+ return 'private address (fc00::/7)';
167
+ return null;
168
+ }
169
+ /** Reason an IP literal (v4 or v6) is forbidden, or null if acceptable. */
170
+ function forbiddenIpReason(ip) {
171
+ const version = isIP(ip);
172
+ if (version === 4)
173
+ return forbiddenIPv4Reason(ip);
174
+ if (version === 6)
175
+ return forbiddenIPv6Reason(ip);
176
+ return 'not an IP address';
177
+ }
178
+ function privateGatewayAllowed() {
179
+ return process.env.GHAGGA_ALLOW_PRIVATE_GATEWAY === 'true';
180
+ }
181
+ const defaultResolveAll = (hostname) => dnsLookup(hostname, { all: true });
182
+ /**
183
+ * Bounded wait for the DNS resolution phase. `dns/promises.lookup` accepts no
184
+ * AbortSignal natively, so we race the resolver promise against BOTH the
185
+ * caller's `signal` (its deadline) and a dedicated DNS timeout. A hanging
186
+ * resolver therefore rejects promptly instead of stalling a queue worker past
187
+ * the caller's budget (SEC-001 follow-up). The underlying lookup is not
188
+ * cancelled — it is simply abandoned — but the operation no longer blocks.
189
+ */
190
+ const DNS_RESOLUTION_TIMEOUT_MS = 10_000;
191
+ function resolveWithDeadline(work, signal, timeoutMs) {
192
+ return new Promise((resolve, reject) => {
193
+ if (signal?.aborted) {
194
+ reject(new Error('gateway host DNS resolution aborted'));
195
+ return;
196
+ }
197
+ let settled = false;
198
+ const cleanup = () => {
199
+ clearTimeout(timer);
200
+ signal?.removeEventListener('abort', onAbort);
201
+ };
202
+ const onAbort = () => {
203
+ if (settled)
204
+ return;
205
+ settled = true;
206
+ cleanup();
207
+ reject(new Error('gateway host DNS resolution aborted'));
208
+ };
209
+ const timer = setTimeout(() => {
210
+ if (settled)
211
+ return;
212
+ settled = true;
213
+ cleanup();
214
+ reject(new Error('gateway host DNS resolution timed out'));
215
+ }, timeoutMs);
216
+ signal?.addEventListener('abort', onAbort, { once: true });
217
+ work.then((addresses) => {
218
+ if (settled)
219
+ return;
220
+ settled = true;
221
+ cleanup();
222
+ resolve(addresses);
223
+ }, (err) => {
224
+ if (settled)
225
+ return;
226
+ settled = true;
227
+ cleanup();
228
+ reject(err);
229
+ });
230
+ });
231
+ }
232
+ /**
233
+ * Resolve a user-supplied gateway URL to exactly ONE approved, pinned IP.
234
+ *
235
+ * SECURITY: never echoes the hostname/address in thrown messages — the URL IS
236
+ * the SSRF target. Callers log the category only.
237
+ *
238
+ * @throws {Error} with a generic reason if the URL is unusable or forbidden.
239
+ */
240
+ export async function resolveAndPinHost(rawUrl, resolveAll = defaultResolveAll, opts) {
241
+ let url;
242
+ try {
243
+ url = new URL(rawUrl);
244
+ }
245
+ catch {
246
+ throw new Error('gateway URL is not parseable');
247
+ }
248
+ // Protocol allowlist — ALWAYS enforced (no escape hatch).
249
+ if (url.protocol !== 'http:' && url.protocol !== 'https:') {
250
+ throw new Error(`gateway URL protocol not allowed: ${url.protocol}`);
251
+ }
252
+ // Userinfo (user:pass@host) — ALWAYS rejected (no escape hatch).
253
+ if (url.username !== '' || url.password !== '') {
254
+ throw new Error('gateway URL must not contain userinfo');
255
+ }
256
+ // URL.hostname wraps IPv6 literals in brackets — strip them for isIP().
257
+ const hostname = url.hostname.replace(/^\[|\]$/g, '');
258
+ const isHttps = url.protocol === 'https:';
259
+ const port = url.port ? parseInt(url.port, 10) : isHttps ? 443 : 80;
260
+ if (!Number.isInteger(port) || port < 1 || port > 65535) {
261
+ throw new Error('gateway URL has an invalid port');
262
+ }
263
+ const allowPrivate = privateGatewayAllowed();
264
+ // IP literal — validate directly and pin to it.
265
+ const literalVersion = isIP(hostname);
266
+ if (literalVersion !== 0) {
267
+ if (!allowPrivate) {
268
+ const reason = forbiddenIpReason(hostname);
269
+ if (reason)
270
+ throw new Error(`gateway URL host is a ${reason}`);
271
+ }
272
+ return { url, hostname, ip: hostname, family: literalVersion, port };
273
+ }
274
+ // Hostname — resolve ONCE and validate EVERY answer. The resolution phase is
275
+ // bounded by the caller's signal AND a DNS timeout so a hanging resolver can
276
+ // never blow past the caller's budget (SEC-001 follow-up).
277
+ let addresses;
278
+ try {
279
+ addresses = await resolveWithDeadline(resolveAll(hostname), opts?.signal, opts?.dnsTimeoutMs ?? DNS_RESOLUTION_TIMEOUT_MS);
280
+ }
281
+ catch (err) {
282
+ // Preserve explicit deadline/abort reasons; collapse everything else to a
283
+ // generic message (never echo the hostname — it IS the SSRF target).
284
+ if (err instanceof Error &&
285
+ (err.message.includes('timed out') || err.message.includes('aborted'))) {
286
+ throw err;
287
+ }
288
+ throw new Error('gateway host DNS resolution failed');
289
+ }
290
+ if (addresses.length === 0) {
291
+ throw new Error('gateway host DNS resolution returned no addresses');
292
+ }
293
+ if (!allowPrivate) {
294
+ // A SINGLE forbidden record fails the whole URL. This rejects a mixed
295
+ // public/private answer set (the classic rebind payload that returns both
296
+ // a public and an internal address).
297
+ for (const { address } of addresses) {
298
+ const reason = forbiddenIpReason(address);
299
+ if (reason)
300
+ throw new Error(`gateway host resolves to a ${reason}`);
301
+ }
302
+ }
303
+ // Every answer is approved — pin to the first one.
304
+ const [chosen] = addresses;
305
+ if (!chosen)
306
+ throw new Error('gateway host resolved to no addresses');
307
+ const family = isIP(chosen.address) || 4;
308
+ return { url, hostname, ip: chosen.address, family, port };
309
+ }
310
+ /**
311
+ * Perform an HTTP(S) request to a user-supplied gateway URL with the connection
312
+ * PINNED to a validated, non-forbidden IP (SEC-001). See the module header.
313
+ *
314
+ * Both the generation and discovery paths call this, so they share one policy.
315
+ *
316
+ * ERROR SHAPE: on failure this rejects with a PLAIN `Error` (e.g. 'request
317
+ * aborted', 'request timed out', 'gateway host DNS resolution timed out'), NOT a
318
+ * fetch-shaped `TypeError`/`AbortError`. Callers must not branch on error type
319
+ * (`err.name === 'AbortError'`); inspect the message or treat any rejection as a
320
+ * failed request.
14
321
  */
322
+ export async function pinnedFetch(rawUrl, init) {
323
+ const pin = await resolveAndPinHost(rawUrl, init.resolveAll ?? defaultResolveAll, {
324
+ signal: init.signal,
325
+ });
326
+ const isHttps = pin.url.protocol === 'https:';
327
+ const requestFn = isHttps ? httpsRequest : httpRequest;
328
+ // Header parity with a normal client: sensible defaults that any explicitly
329
+ // provided header overrides. Accept-Encoding is pinned to `identity` on
330
+ // purpose — this client reads the body raw and does NOT decompress, so we must
331
+ // not advertise gzip/deflate or a compressing gateway would hand back bytes we
332
+ // cannot parse.
333
+ const headers = {
334
+ Accept: '*/*',
335
+ 'Accept-Encoding': 'identity',
336
+ 'User-Agent': 'ghagga-gateway-client',
337
+ ...init.headers,
338
+ };
339
+ // Send the body with a known Content-Length (single shot) instead of letting
340
+ // Node fall back to Transfer-Encoding: chunked — strict gateways / WAFs that
341
+ // require Content-Length would otherwise reject the POST.
342
+ if (init.body !== undefined) {
343
+ headers['Content-Length'] = String(Buffer.byteLength(init.body));
344
+ }
345
+ // Pin the socket to the pre-validated IP. Node calls this instead of its own
346
+ // DNS resolver, so no second resolution (and no rebind) can occur.
347
+ const pinnedLookup = (_hostname, options, callback) => {
348
+ const cb = (typeof options === 'function' ? options : callback);
349
+ const opts = (typeof options === 'function' ? {} : options);
350
+ if (opts?.all) {
351
+ cb(null, [{ address: pin.ip, family: pin.family }]);
352
+ }
353
+ else {
354
+ cb(null, pin.ip, pin.family);
355
+ }
356
+ };
357
+ const requestOptions = {
358
+ method: init.method,
359
+ // host = hostname → Host header + SNI stay the ORIGINAL host, not the IP.
360
+ host: pin.hostname,
361
+ port: pin.port,
362
+ path: `${pin.url.pathname}${pin.url.search}`,
363
+ headers,
364
+ // biome-ignore lint/suspicious/noExplicitAny: net LookupFunction typing is loose across http/https.
365
+ lookup: pinnedLookup,
366
+ // Preserve TLS SNI explicitly (https only; ignored for http).
367
+ servername: isHttps ? pin.hostname : undefined,
368
+ };
369
+ return new Promise((resolve, reject) => {
370
+ if (init.signal?.aborted) {
371
+ reject(new Error('request aborted'));
372
+ return;
373
+ }
374
+ const req = requestFn(requestOptions, (res) => {
375
+ const chunks = [];
376
+ res.on('data', (chunk) => chunks.push(chunk));
377
+ res.on('end', () => {
378
+ const bodyText = Buffer.concat(chunks).toString('utf8');
379
+ const status = res.statusCode ?? 0;
380
+ resolve({
381
+ ok: status >= 200 && status < 300,
382
+ status,
383
+ text: async () => bodyText,
384
+ json: async () => JSON.parse(bodyText),
385
+ });
386
+ });
387
+ res.on('error', reject);
388
+ });
389
+ req.on('error', reject);
390
+ if (init.signal) {
391
+ const onAbort = () => req.destroy(new Error('request timed out'));
392
+ init.signal.addEventListener('abort', onAbort, { once: true });
393
+ req.on('close', () => init.signal?.removeEventListener('abort', onAbort));
394
+ }
395
+ // Single-shot send: with Content-Length set above this avoids chunked
396
+ // encoding. `req.end(undefined)` is a no-op body when there is nothing to send.
397
+ req.end(init.body);
398
+ });
399
+ }
15
400
  // ─── Public API ─────────────────────────────────────────────────
16
401
  /**
17
402
  * Generate text via the LLM Gateway.
@@ -22,14 +407,17 @@
22
407
  * @returns Gateway response with generated text and metadata
23
408
  */
24
409
  export async function generateViaGateway(prompt, systemPrompt, options) {
25
- const { gatewayUrl, gatewayToken, model, project } = options ?? {};
410
+ const { gatewayUrl, gatewayToken, provider, model, project } = options ?? {};
26
411
  if (!gatewayUrl) {
27
412
  throw new Error('Gateway URL not configured — set it in the dashboard provider chain settings');
28
413
  }
29
414
  if (!gatewayToken) {
30
415
  throw new Error('Gateway token not configured — set the API key in the dashboard provider chain settings');
31
416
  }
32
- const response = await fetch(`${gatewayUrl}/v1/generate`, {
417
+ // SSRF: pinnedFetch resolves once, validates every answer, and pins the socket
418
+ // to a non-forbidden IP (see module header). Node's client never follows a
419
+ // 3xx, so a redirect surfaces below as a failed generation.
420
+ const response = await pinnedFetch(`${gatewayUrl}/v1/generate`, {
33
421
  method: 'POST',
34
422
  headers: {
35
423
  'Content-Type': 'application/json',
@@ -38,17 +426,11 @@ export async function generateViaGateway(prompt, systemPrompt, options) {
38
426
  body: JSON.stringify({
39
427
  prompt,
40
428
  system: systemPrompt,
429
+ provider,
41
430
  model,
42
431
  project,
43
432
  }),
44
433
  signal: AbortSignal.timeout(180_000), // 3 min timeout (matches CLI bridge)
45
- // SSRF defense: never follow redirects. The gateway URL was validated by
46
- // the server worker (safe-url) against the ORIGINAL host only; a 3xx
47
- // Location could redirect this server-side fetch to an unvalidated
48
- // private/loopback/metadata address. With redirect:'manual' a 3xx becomes
49
- // a non-ok response and is handled below as a failed generation, exactly
50
- // like any other gateway error.
51
- redirect: 'manual',
52
434
  });
53
435
  // Non-2xx (including a refused 3xx redirect) is a failed generation.
54
436
  if (!response.ok) {
@@ -1 +1 @@
1
- {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/providers/gateway.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAsBH,mEAAmE;AAEnE;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAc,EACd,YAAqB,EACrB,OAAwB;IAExB,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IAEnE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;IAClG,CAAC;IACD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,yFAAyF,CAC1F,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,cAAc,EAAE;QACxD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,YAAY,EAAE;SACxC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,MAAM;YACN,MAAM,EAAE,YAAY;YACpB,KAAK;YACL,OAAO;SACR,CAAC;QACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,qCAAqC;QAC3E,yEAAyE;QACzE,qEAAqE;QACrE,mEAAmE;QACnE,0EAA0E;QAC1E,yEAAyE;QACzE,gCAAgC;QAChC,QAAQ,EAAE,QAAQ;KACnB,CAAC,CAAC;IAEH,qEAAqE;IACrE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,kBAAkB,QAAQ,CAAC,MAAM,MAAM,KAAK,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAA8B,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../src/providers/gateway.ts"],"names":[],"mappings":"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"}
@@ -43,6 +43,7 @@ export declare function createCLIBridgeGenerateFn(options: {
43
43
  export declare function createGatewayGenerateFn(options: {
44
44
  gatewayUrl: string;
45
45
  gatewayToken: string;
46
+ provider?: string;
46
47
  model?: string;
47
48
  project?: string;
48
49
  }): GenerateTextFn;
@@ -1 +1 @@
1
- {"version":3,"file":"generate-fn.d.ts","sourceRoot":"","sources":["../../src/providers/generate-fn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,kDAAkD;AAClD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,mFAAmF;AACnF,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;AAIzF;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC,GAAG,cAAc,CAUjB;AAID;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,cAAc,CAUjB;AAGD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"generate-fn.d.ts","sourceRoot":"","sources":["../../src/providers/generate-fn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,kDAAkD;AAClD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,mFAAmF;AACnF,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;AAIzF;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC,GAAG,cAAc,CAUjB;AAID;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,cAAc,CAUjB;AAGD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"generate-fn.js","sourceRoot":"","sources":["../../src/providers/generate-fn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAelD,mEAAmE;AAEnE;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAIzC;IACC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE,CAAC,EAAE,4BAA4B;YAC3C,QAAQ,EAAE,YAAY;YACtB,KAAK,EAAE,MAAM,CAAC,GAAG;SAClB,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,mEAAmE;AAEnE;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAKvC;IACC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACjE,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,CAAC;YAClC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,mEAAmE;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"generate-fn.js","sourceRoot":"","sources":["../../src/providers/generate-fn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAelD,mEAAmE;AAEnE;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAIzC;IACC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE,CAAC,EAAE,4BAA4B;YAC3C,QAAQ,EAAE,YAAY;YACtB,KAAK,EAAE,MAAM,CAAC,GAAG;SAClB,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,mEAAmE;AAEnE;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAMvC;IACC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACjE,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,CAAC;YAClC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,mEAAmE;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC"}
package/dist/tools/cpd.js CHANGED
@@ -74,7 +74,7 @@ async function findCpdBinary() {
74
74
  for (const cmd of pmdPaths) {
75
75
  try {
76
76
  await execFileAsync(cmd, ['cpd', '--help'], { timeout: 5_000 });
77
- console.log(`[ghagga:cpd] Found pmd at: ${cmd}`);
77
+ console.error(`[ghagga:cpd] Found pmd at: ${cmd}`);
78
78
  return { cmd, args: ['cpd'] };
79
79
  }
80
80
  catch {
@@ -99,7 +99,7 @@ export async function runCpd(scanPath, options = {}) {
99
99
  executionTimeMs: Date.now() - start,
100
100
  };
101
101
  }
102
- console.log(`[ghagga:cpd] Binary found: ${binary.cmd} ${binary.args.join(' ')}`);
102
+ console.error(`[ghagga:cpd] Binary found: ${binary.cmd} ${binary.args.join(' ')}`);
103
103
  try {
104
104
  const args = [
105
105
  ...binary.args,
@@ -1 +1 @@
1
- {"version":3,"file":"cpd.js","sourceRoot":"","sources":["../../src/tools/cpd.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cpd.js","sourceRoot":"","sources":["../../src/tools/cpd.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,9 @@ import type { ExecutionContext } from './types.js';
8
8
  /**
9
9
  * Create a Node.js-based ExecutionContext.
10
10
  *
11
- * @param logger - Optional logger; defaults to console
11
+ * @param logger - Optional logger; defaults to a stderr-routing logger so that
12
+ * tool progress/diagnostics never corrupt machine output (SARIF/JSON) emitted
13
+ * on stdout by CLI consumers. (BL-SARIF-STDOUT)
12
14
  */
13
15
  export declare function createNodeExecutionContext(logger?: {
14
16
  info: (...args: unknown[]) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/tools/execution.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAe,gBAAgB,EAAiB,MAAM,YAAY,CAAC;AAE/E;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,CAAC,EAAE;IAClD,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACrC,GAAG,gBAAgB,CAwFnB"}
1
+ {"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/tools/execution.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAe,gBAAgB,EAAiB,MAAM,YAAY,CAAC;AAE/E;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,CAAC,EAAE;IAClD,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACrC,GAAG,gBAAgB,CA8FnB"}
@@ -8,10 +8,18 @@ import { execFile } from 'node:child_process';
8
8
  /**
9
9
  * Create a Node.js-based ExecutionContext.
10
10
  *
11
- * @param logger - Optional logger; defaults to console
11
+ * @param logger - Optional logger; defaults to a stderr-routing logger so that
12
+ * tool progress/diagnostics never corrupt machine output (SARIF/JSON) emitted
13
+ * on stdout by CLI consumers. (BL-SARIF-STDOUT)
12
14
  */
13
15
  export function createNodeExecutionContext(logger) {
14
- const log = logger ?? console;
16
+ // Default logger routes ALL diagnostic levels to stderr. `console.info`/`console.log`
17
+ // write to stdout, which would interleave with and corrupt machine output.
18
+ const log = logger ?? {
19
+ info: (...args) => console.error(...args),
20
+ warn: (...args) => console.error(...args),
21
+ error: (...args) => console.error(...args),
22
+ };
15
23
  return {
16
24
  async exec(command, args, opts) {
17
25
  return new Promise((resolve, reject) => {
@@ -1 +1 @@
1
- {"version":3,"file":"execution.js","sourceRoot":"","sources":["../../src/tools/execution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"execution.js","sourceRoot":"","sources":["../../src/tools/execution.ts"],"names":[],"mappings":"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"}
@@ -32,4 +32,27 @@ paths = [
32
32
  '''.*/tests?/.*''',
33
33
  '''.*/fixtures?/.*''',
34
34
  '''.*/testdata/.*''',
35
+ # Generated GitHub Action bundle (ncc output). Committed so the Action can run
36
+ # without a build step, but it inlines third-party deps that ship fake/example
37
+ # credentials (e.g. JSDoc samples, the public Azure devstorage emulator key).
38
+ # Not human-authored source — never a place a real secret should originate.
39
+ '''apps/action/dist/.*''',
40
+ ]
41
+
42
+ # Specific placeholder/example secret values that appear in documentation and CI.
43
+ # These are NOT real credentials: they are deterministic dummies or truncated
44
+ # samples used to illustrate env-var setup. Matched against the secret value so
45
+ # a genuine secret in the same file would still be flagged.
46
+ regexes = [
47
+ # Deterministic all-hex dummy ENCRYPTION_KEY used in CI test env + setup docs
48
+ # (.github/workflows/ci.yml, CONTRIBUTING.md).
49
+ '''0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef''',
50
+ # a1b2c3... placeholder secrets in docs/self-hosted.md examples — both the
51
+ # full repeated ENCRYPTION_KEY/STATE_SECRET form and the truncated
52
+ # "a1b2c3d4e5f6..." webhook-secret sample.
53
+ '''(?:a1b2c3d4e5f6)+(?:\.\.\.)?''',
54
+ # Truncated/ellipsis example secrets in docs (e.g. "LS0tLS1...", "Ov23li...",
55
+ # "MIIEpAIBAAKCAQEA...") and Spanish placeholder text in deploy guides.
56
+ '''(?:LS0tLS1CRUdJTi|Ov23li|MIIEpAIBAAKCAQEA)\.\.\.''',
57
+ '''los_64_caracteres_hex_aqui''',
35
58
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/tools/runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAiB,cAAc,EAAE,oBAAoB,EAAc,MAAM,aAAa,CAAC;AAUnG;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,IAAI,CACZ,cAAc,EACd,eAAe,GAAG,aAAa,GAAG,WAAW,GAAG,aAAa,GAAG,cAAc,GAAG,eAAe,CACjG,GACA,OAAO,CAAC,oBAAoB,CAAC,CAE/B;AA8CD;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAqChF"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/tools/runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAiB,cAAc,EAAE,oBAAoB,EAAc,MAAM,aAAa,CAAC;AAUnG;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,IAAI,CACZ,cAAc,EACd,eAAe,GAAG,aAAa,GAAG,WAAW,GAAG,aAAa,GAAG,cAAc,GAAG,eAAe,CACjG,GACA,OAAO,CAAC,oBAAoB,CAAC,CAE/B;AA+CD;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CAqChF"}
@@ -33,7 +33,8 @@ export async function runStaticAnalysis(files, scanPath, settings) {
33
33
  * @internal
34
34
  */
35
35
  async function runStaticAnalysisWithRegistry(scanPath, fileList, settings) {
36
- console.log('[ghagga:tools] Running static analysis with registry-driven orchestrator');
36
+ // Diagnostic/progress → stderr; stdout is reserved for machine output (SARIF/JSON).
37
+ console.error('[ghagga:tools] Running static analysis with registry-driven orchestrator');
37
38
  // Ensure plugins are registered
38
39
  initializeDefaultTools();
39
40
  // Resolve which tools should run
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/tools/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/tools/runner.ts"],"names":[],"mappings":"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"}