infobroker 2026.9.3 → 2026.9.6
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/README.md +79 -25
- package/dist/audit-log.d.ts +7 -0
- package/dist/audit-log.js +44 -0
- package/dist/audit-log.js.map +1 -0
- package/dist/config.js +53 -1
- package/dist/config.js.map +1 -1
- package/dist/content-policy.d.ts +13 -0
- package/dist/content-policy.js +129 -0
- package/dist/content-policy.js.map +1 -0
- package/dist/cooldown.d.ts +0 -1
- package/dist/cooldown.js +0 -3
- package/dist/cooldown.js.map +1 -1
- package/dist/corroborate.js +56 -28
- package/dist/corroborate.js.map +1 -1
- package/dist/deep-search.d.ts +2 -0
- package/dist/deep-search.js +1 -1
- package/dist/deep-search.js.map +1 -1
- package/dist/extract.d.ts +11 -0
- package/dist/extract.js +79 -0
- package/dist/extract.js.map +1 -0
- package/dist/index.js +266 -31
- package/dist/index.js.map +1 -1
- package/dist/kb.d.ts +5 -0
- package/dist/kb.js +58 -11
- package/dist/kb.js.map +1 -1
- package/dist/lib/bot-challenge.d.ts +1 -0
- package/dist/lib/bot-challenge.js +63 -0
- package/dist/lib/bot-challenge.js.map +1 -0
- package/dist/lib/feature-taxonomy.d.ts +12 -0
- package/dist/lib/feature-taxonomy.js +89 -0
- package/dist/lib/feature-taxonomy.js.map +1 -0
- package/dist/lib/sanitize-error.d.ts +1 -0
- package/dist/lib/sanitize-error.js +8 -0
- package/dist/lib/sanitize-error.js.map +1 -0
- package/dist/lib/url-guard.d.ts +15 -1
- package/dist/lib/url-guard.js +42 -6
- package/dist/lib/url-guard.js.map +1 -1
- package/dist/providers/europe_pmc.d.ts +2 -0
- package/dist/providers/europe_pmc.js +52 -0
- package/dist/providers/europe_pmc.js.map +1 -0
- package/dist/providers/gdelt.d.ts +2 -0
- package/dist/providers/gdelt.js +49 -0
- package/dist/providers/gdelt.js.map +1 -0
- package/dist/providers/hacker_news.d.ts +2 -0
- package/dist/providers/hacker_news.js +43 -0
- package/dist/providers/hacker_news.js.map +1 -0
- package/dist/providers/index.js +12 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/openalex.d.ts +2 -0
- package/dist/providers/openalex.js +42 -0
- package/dist/providers/openalex.js.map +1 -0
- package/dist/providers/sec_edgar.d.ts +2 -0
- package/dist/providers/sec_edgar.js +51 -0
- package/dist/providers/sec_edgar.js.map +1 -0
- package/dist/providers/world_bank.d.ts +2 -0
- package/dist/providers/world_bank.js +44 -0
- package/dist/providers/world_bank.js.map +1 -0
- package/dist/quota.js +69 -7
- package/dist/quota.js.map +1 -1
- package/dist/truncate.js +3 -3
- package/dist/truncate.js.map +1 -1
- package/dist/types.d.ts +17 -0
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ README DESIGN:
|
|
|
17
17
|
Infobroker.
|
|
18
18
|
|
|
19
19
|
Demo: Natural-language prompts in blockquotes ("Search for..."), never
|
|
20
|
-
full tool names (`
|
|
20
|
+
full tool names (`infobroker_search_web`). Show the reader how to
|
|
21
21
|
express what they want — the AI maps intent to tools. Every demo
|
|
22
22
|
prompt SHALL be a valid natural-language command the reader could
|
|
23
23
|
actually run; broken prompts are a README defect.
|
|
@@ -116,7 +116,7 @@ README DESIGN:
|
|
|
116
116
|
|
|
117
117
|
Infobroker is a multi-provider MCP server that unifies web search,
|
|
118
118
|
structured knowledge, academic, archive, and content-extraction APIs
|
|
119
|
-
behind a single tool surface.
|
|
119
|
+
behind a single tool surface. Twenty-one zero-config providers ship in the
|
|
120
120
|
box — search the web, look up facts, fetch articles — with nothing to
|
|
121
121
|
configure. Five more providers unlock with API keys or self-hosting. A built-in corroboration engine cross-references independent
|
|
122
122
|
sources to separate established facts from contested claims. Bundled
|
|
@@ -193,7 +193,7 @@ Requirements: Node.js 20+.
|
|
|
193
193
|
|
|
194
194
|
## MCP Server
|
|
195
195
|
|
|
196
|
-
Your research backend. Seven tools, twenty providers, one
|
|
196
|
+
Your research backend. Seven tools, twenty-six providers, one
|
|
197
197
|
corroboration engine. The complete feature inventory is documented in the
|
|
198
198
|
[feature taxonomy](infobroker.md#d-appendix-feature-taxonomy) in the
|
|
199
199
|
spec.
|
|
@@ -204,7 +204,7 @@ spec.
|
|
|
204
204
|
> "Find scholarly papers on hyperspace travel theories."
|
|
205
205
|
> "Search the latest astromech specs and show me the passages that answer: does the R2 unit pre-date the Clone Wars?"
|
|
206
206
|
|
|
207
|
-
`
|
|
207
|
+
`search_web` sends one query to every provider that can answer it. Search
|
|
208
208
|
across DuckDuckGo, Wikipedia, academic databases, news, code repositories —
|
|
209
209
|
or describe your task and the server picks the best source. Pass an array of
|
|
210
210
|
queries to batch several searches in one call. Ask for a deep read and it
|
|
@@ -245,7 +245,7 @@ to paste into a reference list.
|
|
|
245
245
|
> "Which source should I use to research the Death Star's weakness?"
|
|
246
246
|
> "Show me all available sources and their quota status."
|
|
247
247
|
|
|
248
|
-
The server knows its own capabilities. `
|
|
248
|
+
The server knows its own capabilities. `search_web` auto-selects the
|
|
249
249
|
best backend for your task, weighing capability, quota, and latency —
|
|
250
250
|
or routes by your intent when you ask for privacy, speed, or free-only
|
|
251
251
|
sources. `inspect_providers` surfaces every configured source and drills into a
|
|
@@ -258,18 +258,20 @@ gives you operational visibility into every backend.
|
|
|
258
258
|
> "Find the consensus on who fired first — Han or Greedo."
|
|
259
259
|
|
|
260
260
|
`verify_claims` runs a multi-pass truth-finding loop: broad
|
|
261
|
-
search across
|
|
262
|
-
encyclopedias, and scholarly indexes
|
|
261
|
+
search across your highest-authority providers — search engines,
|
|
262
|
+
encyclopedias, and scholarly indexes — then claim extraction,
|
|
263
263
|
cross-source reconciliation, and targeted follow-up for gaps, dispatched
|
|
264
|
-
in parallel
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
264
|
+
in parallel and stopping early once the truth is pinned down. Claims
|
|
265
|
+
corroborated across independent sources score high confidence, weighted
|
|
266
|
+
by each source's authority; every source is bound to the claim it
|
|
267
|
+
supports. Contradictions are surfaced with all perspectives. Gaps
|
|
268
|
+
trigger refined queries that broaden to the rest of your providers. It
|
|
269
|
+
also remembers: prior findings in your knowledge base participate as
|
|
270
|
+
corroborating sources before it queries the network. You get a
|
|
271
|
+
structured report — confirmed, contested, and unverified findings — with
|
|
272
|
+
source provenance, per-source claims, and confidence scores. Every other
|
|
273
|
+
search tool returns a list of links; Infobroker finds the truth and
|
|
274
|
+
tells you how sure it is.
|
|
273
275
|
|
|
274
276
|
### Knowledge Base
|
|
275
277
|
|
|
@@ -312,7 +314,7 @@ Infobroker produces finished work.
|
|
|
312
314
|
Quota counters persist to disk and survive restarts. Rate limits are
|
|
313
315
|
enforced per-provider, not globally. Configuration is hot-reloadable
|
|
314
316
|
via `reload_config` — change providers, adjust chains, or tweak
|
|
315
|
-
thresholds without dropping connections. `
|
|
317
|
+
thresholds without dropping connections. `search_web` doubles as
|
|
316
318
|
DuckDuckGo query autocomplete. `inspect_providers` reports the server's build
|
|
317
319
|
health and request stats. You always know what your search server is
|
|
318
320
|
doing and how much capacity remains.
|
|
@@ -356,7 +358,7 @@ documented answers.
|
|
|
356
358
|
|
|
357
359
|
## Providers
|
|
358
360
|
|
|
359
|
-
Twenty providers.
|
|
361
|
+
Twenty-six providers. Twenty-one work with zero configuration.
|
|
360
362
|
|
|
361
363
|
| Provider | Tier | Type | Key Required |
|
|
362
364
|
|----------|------|------|-------------|
|
|
@@ -372,6 +374,12 @@ Twenty providers. Fifteen work with zero configuration.
|
|
|
372
374
|
| Stack Exchange | Free HTTP | Code Q&A | Optional |
|
|
373
375
|
| GitHub | Free HTTP | Code search | Optional |
|
|
374
376
|
| CORE | Free HTTP | Open access | Optional |
|
|
377
|
+
| OpenAlex | Free HTTP | Academic | No |
|
|
378
|
+
| Europe PMC | Free HTTP | Academic | No |
|
|
379
|
+
| Hacker News | Free HTTP | News | No |
|
|
380
|
+
| GDELT | Free HTTP | News | No |
|
|
381
|
+
| SEC EDGAR | Free HTTP | Financial filings | No |
|
|
382
|
+
| World Bank | Free HTTP | Economic data | No |
|
|
375
383
|
| Marginalia | Built-in | Small web | No |
|
|
376
384
|
| Mojeek | Built-in | Independent index | No |
|
|
377
385
|
| Wiby | Built-in | Small web | No |
|
|
@@ -473,16 +481,58 @@ move to a new key without losing content. After re-keying, point
|
|
|
473
481
|
confirm the new key opens the store.
|
|
474
482
|
|
|
475
483
|
```
|
|
476
|
-
infobroker_manage_kb action=encryption operation=generate_key key_file=~/.
|
|
477
|
-
infobroker_manage_kb action=encryption operation=backup key_file=~/.
|
|
484
|
+
infobroker_manage_kb action=encryption operation=generate_key key_file=~/.local/share/infobroker/keys/kb.key
|
|
485
|
+
infobroker_manage_kb action=encryption operation=backup key_file=~/.local/share/infobroker/keys/kb.key.bak
|
|
478
486
|
infobroker_reload_config
|
|
479
487
|
```
|
|
480
488
|
|
|
489
|
+
Tool-surface key operations (`generate_key`, `backup`, `rekey`'s target)
|
|
490
|
+
are confined to the keys directory: `kb.keys_dir` when configured, else the
|
|
491
|
+
`keys` sibling of the knowledge base storage path
|
|
492
|
+
(`~/.local/share/infobroker/keys` by default). A path outside that
|
|
493
|
+
directory is refused. The `kb.encryption.key_file` *configuration* value is
|
|
494
|
+
operator-owned and not subject to the confinement.
|
|
495
|
+
|
|
481
496
|
Add the `kb.encryption` block to `config.local.json` before reloading to
|
|
482
497
|
enable, or remove it before reloading to disable. When the store is locked,
|
|
483
498
|
`status`, `verify`, and `rekey` remain reachable so you can recover without
|
|
484
499
|
first unlocking.
|
|
485
500
|
|
|
501
|
+
### Content policy
|
|
502
|
+
|
|
503
|
+
Infobroker reads the open web and caches what it retrieves, so retrieved
|
|
504
|
+
content is assessed against a configurable policy before it is stored (and,
|
|
505
|
+
in the strictest mode, before it is returned). The policy flags content
|
|
506
|
+
that matches heuristic categories — prompt-injection instructions,
|
|
507
|
+
credential phishing, malware/exploit material, and adult content — and can
|
|
508
|
+
consult an external assessment service when one is configured. It is on by
|
|
509
|
+
default in `flag` mode: flagged content is still returned to you for
|
|
510
|
+
legitimate research, but it is never written to the knowledge base, and
|
|
511
|
+
every flag is recorded in the audit trail.
|
|
512
|
+
|
|
513
|
+
```json
|
|
514
|
+
{
|
|
515
|
+
"content_policy": {
|
|
516
|
+
"mode": "flag",
|
|
517
|
+
"threshold": 0.2,
|
|
518
|
+
"patterns": { "prompt_injection": ["ignore previous instructions"] }
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
Modes: `off` disables assessment; `flag` (default) returns but never stores
|
|
524
|
+
flagged content; `block` refuses flagged content to the caller. `threshold`
|
|
525
|
+
tunes sensitivity (0–1, default 0.2 — a single match flags). `patterns`
|
|
526
|
+
extend or override the built-in categories per category name. `external_url_env`
|
|
527
|
+
names an environment variable holding the URL of an external assessor, and
|
|
528
|
+
`external_api_key_env` optionally names one holding its bearer key; when the
|
|
529
|
+
external service is unreachable the built-in assessment applies.
|
|
530
|
+
|
|
531
|
+
Security-relevant events — refused network targets, policy flags, config
|
|
532
|
+
reloads, encryption transitions, key operations, and quota exhaustion — are
|
|
533
|
+
appended to an owner-only audit log at `output.audit_log_path` (default
|
|
534
|
+
`~/.local/share/infobroker/audit.log`).
|
|
535
|
+
|
|
486
536
|
### Bring your own endpoint
|
|
487
537
|
|
|
488
538
|
Any HTTP search endpoint can become an Infobroker provider without
|
|
@@ -529,13 +579,17 @@ Two optional keys tune per-provider behavior in `config.json`:
|
|
|
529
579
|
|
|
530
580
|
### Hedged fallback
|
|
531
581
|
|
|
532
|
-
`
|
|
582
|
+
`search_web` and `fetch_page` fall back with a hedge instead of waiting
|
|
533
583
|
out a slow provider's full timeout: the primary (first-choice) provider
|
|
534
584
|
runs alone for a latency-derived window, then the remaining providers
|
|
535
585
|
race and the first result wins. The common path uses one provider call;
|
|
536
586
|
the hedge fires only when the primary is slow or failing. `fetch_page`
|
|
537
587
|
additionally prefers the primary renderer in a short grace window so a
|
|
538
588
|
marginally slow `jina` is not displaced by a lower-quality `native_fetch`.
|
|
589
|
+
A renderer whose content is an anti-bot challenge page (a CAPTCHA or
|
|
590
|
+
verification interstitial rather than the target page) is treated as a
|
|
591
|
+
failed render, so `fetch_page` falls through to the next renderer instead
|
|
592
|
+
of serving the challenge as content.
|
|
539
593
|
Tune the window with `output.hedge_enabled`, `hedge_min_delay_ms`,
|
|
540
594
|
`hedge_max_delay_ms`, and `hedge_grace_ms`; set `hedge_enabled` to
|
|
541
595
|
`false` for the sequential chain. A provider that returns a rate-limit
|
|
@@ -547,9 +601,9 @@ chain exhausts, the server retries the `general_web` chain before failing.
|
|
|
547
601
|
|
|
548
602
|
| Tool name | What you're used to | How Infobroker differs |
|
|
549
603
|
|-----------|--------------------|-----------------------|
|
|
550
|
-
| Built-in `websearch` / `webfetch` | One search engine, one fetch mode, no configuration, no visibility into what backend is used |
|
|
604
|
+
| Built-in `websearch` / `webfetch` | One search engine, one fetch mode, no configuration, no visibility into what backend is used | Twenty-one zero-config providers with a unified tool surface. Choose the right source for each task. Fall back automatically on failure. See every provider's status and quota. |
|
|
551
605
|
| Raw API calls | Manual HTTP requests, per-provider auth, per-provider response parsing, no fallback, no quota tracking | One interface for every provider. API keys configured once. Results normalized to a common shape. Rate limits and quota tracked automatically. |
|
|
552
|
-
| Dedicated search APIs | Pay-per-query, vendor lock-in, opaque routing | Free-first design. DuckDuckGo, Wikipedia, and
|
|
606
|
+
| Dedicated search APIs | Pay-per-query, vendor lock-in, opaque routing | Free-first design. DuckDuckGo, Wikipedia, and nineteen other providers work with zero configuration. Upgrade paths for Brave, Exa, Tavily, and Yep. Self-hosted SearXNG for full privacy. |
|
|
553
607
|
| Other search MCP servers | Single-provider focus, no fallback, no corroboration, no writing pipeline | Multi-provider with automatic fallback. Corroboration engine cross-references independent sources. Bundled writing skills transform research into finished documents. |
|
|
554
608
|
| AI with built-in search | The model picks the search engine, serves stale cache, no reproducibility | You control the provider chain. Queries are reproducible. Fallback behavior is visible. The corroboration engine verifies facts across independent sources. |
|
|
555
609
|
|
|
@@ -561,7 +615,7 @@ contradiction, and gaps. The bundled skills close the loop from raw
|
|
|
561
615
|
research to finished writing. One server. Every source. Research that
|
|
562
616
|
delivers.
|
|
563
617
|
|
|
564
|
-
Last updated: 2026-09-
|
|
618
|
+
Last updated: 2026-09-06.
|
|
565
619
|
|
|
566
620
|
## Contribute
|
|
567
621
|
|
|
@@ -591,7 +645,7 @@ terms and API keys.
|
|
|
591
645
|
## Spec
|
|
592
646
|
|
|
593
647
|
The server is built from a single source specification, `infobroker.md`
|
|
594
|
-
(v2026.09.
|
|
648
|
+
(v2026.09.06), which defines every requirement and the gates that verify it.
|
|
595
649
|
Each requirement traces to an implementation file, and `npm run check`
|
|
596
650
|
reconciles the code, the spec, and this README so what is documented is what
|
|
597
651
|
the server actually delivers.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record one audit entry: an ISO timestamp, an event kind, and a short
|
|
3
|
+
* detail string. Never pass secrets or full retrieved content here — the
|
|
4
|
+
* detail field is meant for URLs, slugs, and counts. Failures are swallowed
|
|
5
|
+
* so the triggering operation proceeds per REQ-098.
|
|
6
|
+
*/
|
|
7
|
+
export declare function audit(event: string, detail: string): void;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// @implements REQ-098
|
|
2
|
+
// Persistent audit trail for security-relevant events (REQ-098): refused
|
|
3
|
+
// network targets, content-policy flags, config reloads, KB encryption
|
|
4
|
+
// transitions, key-material operations, and quota exhaustion. Owner-only,
|
|
5
|
+
// append-only, and never a dependency of the triggering operation.
|
|
6
|
+
import { appendFileSync, chmodSync, existsSync, mkdirSync } from "node:fs";
|
|
7
|
+
import { dirname } from "node:path";
|
|
8
|
+
import { homedir } from "node:os";
|
|
9
|
+
import { getConfig } from "./config.js";
|
|
10
|
+
function auditPath() {
|
|
11
|
+
const configured = getConfig().output?.audit_log_path;
|
|
12
|
+
if (configured) {
|
|
13
|
+
return configured.startsWith("~/") ? `${homedir()}${configured.slice(1)}` : configured;
|
|
14
|
+
}
|
|
15
|
+
return `${homedir()}/.local/share/infobroker/audit.log`;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Record one audit entry: an ISO timestamp, an event kind, and a short
|
|
19
|
+
* detail string. Never pass secrets or full retrieved content here — the
|
|
20
|
+
* detail field is meant for URLs, slugs, and counts. Failures are swallowed
|
|
21
|
+
* so the triggering operation proceeds per REQ-098.
|
|
22
|
+
*/
|
|
23
|
+
export function audit(event, detail) {
|
|
24
|
+
try {
|
|
25
|
+
const path = auditPath();
|
|
26
|
+
const dir = dirname(path);
|
|
27
|
+
if (!existsSync(dir))
|
|
28
|
+
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
29
|
+
if (!existsSync(path)) {
|
|
30
|
+
appendFileSync(path, "", { mode: 0o600 });
|
|
31
|
+
try {
|
|
32
|
+
chmodSync(path, 0o600);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// best effort — a non-owner-readable audit file is not a blocker
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
appendFileSync(path, `${new Date().toISOString()} ${event} ${detail}\n`);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// REQ-098: audit failure must not break the triggering operation.
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=audit-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-log.js","sourceRoot":"","sources":["../src/audit-log.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,yEAAyE;AACzE,uEAAuE;AACvE,0EAA0E;AAC1E,mEAAmE;AACnE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,SAAS,SAAS;IAChB,MAAM,UAAU,GAAG,SAAS,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC;IACtD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;IACzF,CAAC;IACD,OAAO,GAAG,OAAO,EAAE,oCAAoC,CAAC;AAC1D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,KAAK,CAAC,KAAa,EAAE,MAAc;IACjD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,cAAc,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1C,IAAI,CAAC;gBACH,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACzB,CAAC;YAAC,MAAM,CAAC;gBACP,iEAAiE;YACnE,CAAC;QACH,CAAC;QACD,cAAc,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,KAAK,IAAI,MAAM,IAAI,CAAC,CAAC;IAC3E,CAAC;IAAC,MAAM,CAAC;QACP,kEAAkE;IACpE,CAAC;AACH,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// @implements REQ-010 REQ-011 REQ-
|
|
1
|
+
// @implements REQ-010 REQ-011 REQ-013 REQ-014 REQ-015 REQ-026a REQ-037 REQ-040 REQ-042 REQ-043 REQ-067 REQ-074 REQ-084
|
|
2
2
|
import { readFileSync, existsSync } from "node:fs";
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
4
|
let configPath;
|
|
@@ -155,6 +155,11 @@ function validateConfig(config) {
|
|
|
155
155
|
if (config.corroboration?.kb_recall !== undefined && typeof config.corroboration.kb_recall !== "boolean") {
|
|
156
156
|
errors.push("corroboration.kb_recall must be a boolean");
|
|
157
157
|
}
|
|
158
|
+
if (config.corroboration?.first_pass_max_providers !== undefined &&
|
|
159
|
+
(typeof config.corroboration.first_pass_max_providers !== "number" ||
|
|
160
|
+
config.corroboration.first_pass_max_providers < 1)) {
|
|
161
|
+
errors.push("corroboration.first_pass_max_providers must be a positive number");
|
|
162
|
+
}
|
|
158
163
|
if (typeof config.output.fallback_depth !== "number" || config.output.fallback_depth < 1) {
|
|
159
164
|
errors.push("output.fallback_depth must be a positive number");
|
|
160
165
|
}
|
|
@@ -179,6 +184,36 @@ function validateConfig(config) {
|
|
|
179
184
|
if (config.output.rate_limit_cooldown_ms !== undefined && (typeof config.output.rate_limit_cooldown_ms !== "number" || config.output.rate_limit_cooldown_ms < 0)) {
|
|
180
185
|
errors.push("output.rate_limit_cooldown_ms must be a non-negative number");
|
|
181
186
|
}
|
|
187
|
+
if (config.output.audit_log_path !== undefined && typeof config.output.audit_log_path !== "string") {
|
|
188
|
+
errors.push("output.audit_log_path must be a string");
|
|
189
|
+
}
|
|
190
|
+
if (config.content_policy) {
|
|
191
|
+
const cp = config.content_policy;
|
|
192
|
+
if (!["off", "flag", "block"].includes(cp.mode)) {
|
|
193
|
+
errors.push("content_policy.mode must be one of: off, flag, block");
|
|
194
|
+
}
|
|
195
|
+
if (cp.threshold !== undefined && (typeof cp.threshold !== "number" || cp.threshold < 0 || cp.threshold > 1)) {
|
|
196
|
+
errors.push("content_policy.threshold must be a number between 0 and 1");
|
|
197
|
+
}
|
|
198
|
+
if (cp.external_url_env !== undefined && typeof cp.external_url_env !== "string") {
|
|
199
|
+
errors.push("content_policy.external_url_env must be a string");
|
|
200
|
+
}
|
|
201
|
+
if (cp.external_api_key_env !== undefined && typeof cp.external_api_key_env !== "string") {
|
|
202
|
+
errors.push("content_policy.external_api_key_env must be a string");
|
|
203
|
+
}
|
|
204
|
+
if (cp.patterns !== undefined) {
|
|
205
|
+
if (typeof cp.patterns !== "object" || cp.patterns === null || Array.isArray(cp.patterns)) {
|
|
206
|
+
errors.push("content_policy.patterns must be an object");
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
for (const [cat, pats] of Object.entries(cp.patterns)) {
|
|
210
|
+
if (!Array.isArray(pats) || pats.some((p) => typeof p !== "string")) {
|
|
211
|
+
errors.push(`content_policy.patterns.${cat} must be an array of strings`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
182
217
|
if (config.fetch) {
|
|
183
218
|
if (config.fetch.passage_size !== undefined && (typeof config.fetch.passage_size !== "number" || config.fetch.passage_size < 1)) {
|
|
184
219
|
errors.push("fetch.passage_size must be a positive number");
|
|
@@ -189,12 +224,26 @@ function validateConfig(config) {
|
|
|
189
224
|
if (config.fetch.detect_date !== undefined && typeof config.fetch.detect_date !== "boolean") {
|
|
190
225
|
errors.push("fetch.detect_date must be a boolean");
|
|
191
226
|
}
|
|
227
|
+
if (config.fetch.crawl_max_pages !== undefined && (typeof config.fetch.crawl_max_pages !== "number" || config.fetch.crawl_max_pages < 1)) {
|
|
228
|
+
errors.push("fetch.crawl_max_pages must be a positive number");
|
|
229
|
+
}
|
|
230
|
+
if (config.fetch.crawl_max_depth !== undefined && (typeof config.fetch.crawl_max_depth !== "number" || config.fetch.crawl_max_depth < 0)) {
|
|
231
|
+
errors.push("fetch.crawl_max_depth must be a non-negative number");
|
|
232
|
+
}
|
|
192
233
|
}
|
|
193
234
|
if (config.expand) {
|
|
194
235
|
if (config.expand.max_expansions !== undefined && (typeof config.expand.max_expansions !== "number" || config.expand.max_expansions < 1)) {
|
|
195
236
|
errors.push("expand.max_expansions must be a positive number");
|
|
196
237
|
}
|
|
197
238
|
}
|
|
239
|
+
if (config.research) {
|
|
240
|
+
if (config.research.max_variants !== undefined && (typeof config.research.max_variants !== "number" || config.research.max_variants < 1)) {
|
|
241
|
+
errors.push("research.max_variants must be a positive number");
|
|
242
|
+
}
|
|
243
|
+
if (config.research.max_pages_per_variant !== undefined && (typeof config.research.max_pages_per_variant !== "number" || config.research.max_pages_per_variant < 1)) {
|
|
244
|
+
errors.push("research.max_pages_per_variant must be a positive number");
|
|
245
|
+
}
|
|
246
|
+
}
|
|
198
247
|
if (config.deep) {
|
|
199
248
|
if (config.deep.max_pages !== undefined && (typeof config.deep.max_pages !== "number" || config.deep.max_pages < 1)) {
|
|
200
249
|
errors.push("deep.max_pages must be a positive number");
|
|
@@ -271,6 +320,9 @@ function validateConfig(config) {
|
|
|
271
320
|
if (kb.kb_first_confidence_threshold !== undefined && typeof kb.kb_first_confidence_threshold !== "number") {
|
|
272
321
|
errors.push("kb.kb_first_confidence_threshold must be a number");
|
|
273
322
|
}
|
|
323
|
+
if (kb.keys_dir !== undefined && (typeof kb.keys_dir !== "string" || kb.keys_dir.length === 0)) {
|
|
324
|
+
errors.push("kb.keys_dir must be a non-empty string when present");
|
|
325
|
+
}
|
|
274
326
|
if (kb.encryption !== undefined) {
|
|
275
327
|
if (typeof kb.encryption !== "object" || kb.encryption === null || Array.isArray(kb.encryption)) {
|
|
276
328
|
errors.push("kb.encryption must be an object");
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type PolicyMode = "off" | "flag" | "block";
|
|
2
|
+
export interface PolicyResult {
|
|
3
|
+
flagged: boolean;
|
|
4
|
+
reason: string | null;
|
|
5
|
+
source: "builtin" | "external" | "disabled";
|
|
6
|
+
}
|
|
7
|
+
export type PolicyDisposition = "store" | "skip" | "refuse";
|
|
8
|
+
export declare function policyMode(): PolicyMode;
|
|
9
|
+
export declare function checkContent(text: string, url: string): Promise<PolicyResult>;
|
|
10
|
+
/** Map a policy verdict to the disposition for the current mode. */
|
|
11
|
+
export declare function disposition(flagged: boolean): PolicyDisposition;
|
|
12
|
+
/** Policy metadata for a response envelope, omitted entirely when clean. */
|
|
13
|
+
export declare function policyMeta(flags: number, mode: PolicyMode): Record<string, unknown> | undefined;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
// @implements REQ-097 REQ-098
|
|
2
|
+
// Content policy (REQ-097): configurable assessment of retrieved external
|
|
3
|
+
// content before knowledge-base storage. Three modes: off (assessment
|
|
4
|
+
// disabled), flag (flagged content returned to the caller but never stored),
|
|
5
|
+
// and block (flagged content refused to the caller). The built-in assessment
|
|
6
|
+
// is a zero-dependency pattern matcher; an external assessment service is
|
|
7
|
+
// consulted when configured and falls back to the built-in when unreachable.
|
|
8
|
+
// Assessment outcomes are recorded in the audit trail (REQ-098).
|
|
9
|
+
import { getConfig } from "./config.js";
|
|
10
|
+
import { audit } from "./audit-log.js";
|
|
11
|
+
import { infobrokerFetch } from "./http.js";
|
|
12
|
+
const DEFAULT_PATTERNS = {
|
|
13
|
+
prompt_injection: [
|
|
14
|
+
"ignore previous instructions",
|
|
15
|
+
"ignore all previous instructions",
|
|
16
|
+
"disregard prior instructions",
|
|
17
|
+
"you are now",
|
|
18
|
+
"system prompt is",
|
|
19
|
+
],
|
|
20
|
+
credential_phishing: [
|
|
21
|
+
"verify your account",
|
|
22
|
+
"confirm your password",
|
|
23
|
+
"update your billing",
|
|
24
|
+
"login credentials",
|
|
25
|
+
],
|
|
26
|
+
malware_exploit: [
|
|
27
|
+
"reverse shell",
|
|
28
|
+
"exploit code",
|
|
29
|
+
"payload delivery",
|
|
30
|
+
"malware download",
|
|
31
|
+
],
|
|
32
|
+
adult_content: ["sexually explicit", "adult content"],
|
|
33
|
+
};
|
|
34
|
+
export function policyMode() {
|
|
35
|
+
const cfg = getConfig();
|
|
36
|
+
return cfg.content_policy?.mode ?? "off";
|
|
37
|
+
}
|
|
38
|
+
function mergedPatterns() {
|
|
39
|
+
const cfg = getConfig();
|
|
40
|
+
const configured = cfg.content_policy?.patterns ?? {};
|
|
41
|
+
const categories = new Set([...Object.keys(DEFAULT_PATTERNS), ...Object.keys(configured)]);
|
|
42
|
+
const out = {};
|
|
43
|
+
for (const cat of categories) {
|
|
44
|
+
out[cat] = [...(configured[cat] ?? []), ...(DEFAULT_PATTERNS[cat] ?? [])];
|
|
45
|
+
}
|
|
46
|
+
return out;
|
|
47
|
+
}
|
|
48
|
+
function builtinAssess(text) {
|
|
49
|
+
const cfg = getConfig();
|
|
50
|
+
// With the default threshold of 0.2, a single matching pattern in the
|
|
51
|
+
// largest category (5 patterns) already flags the content.
|
|
52
|
+
const threshold = cfg.content_policy?.threshold ?? 0.2;
|
|
53
|
+
const lower = text.toLowerCase();
|
|
54
|
+
for (const [category, patterns] of Object.entries(mergedPatterns())) {
|
|
55
|
+
if (patterns.length === 0)
|
|
56
|
+
continue;
|
|
57
|
+
let hits = 0;
|
|
58
|
+
for (const pattern of patterns) {
|
|
59
|
+
if (pattern && lower.includes(pattern.toLowerCase()))
|
|
60
|
+
hits++;
|
|
61
|
+
}
|
|
62
|
+
if (hits / patterns.length >= threshold) {
|
|
63
|
+
return { flagged: true, reason: category };
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return { flagged: false, reason: null };
|
|
67
|
+
}
|
|
68
|
+
async function externalAssess(text, url) {
|
|
69
|
+
const cfg = getConfig();
|
|
70
|
+
const policy = cfg.content_policy;
|
|
71
|
+
if (!policy?.external_url_env)
|
|
72
|
+
return null;
|
|
73
|
+
const endpoint = process.env[policy.external_url_env];
|
|
74
|
+
if (!endpoint)
|
|
75
|
+
return null;
|
|
76
|
+
const apiKey = policy.external_api_key_env ? process.env[policy.external_api_key_env] : undefined;
|
|
77
|
+
try {
|
|
78
|
+
const headers = { "Content-Type": "application/json" };
|
|
79
|
+
if (apiKey)
|
|
80
|
+
headers["Authorization"] = `Bearer ${apiKey}`;
|
|
81
|
+
const resp = await infobrokerFetch(endpoint, {
|
|
82
|
+
method: "POST",
|
|
83
|
+
headers,
|
|
84
|
+
body: JSON.stringify({ text: text.slice(0, 20000), url }),
|
|
85
|
+
timeoutMs: 8000,
|
|
86
|
+
});
|
|
87
|
+
if (!resp.ok)
|
|
88
|
+
return null;
|
|
89
|
+
const data = (await resp.json());
|
|
90
|
+
if (typeof data.flagged !== "boolean")
|
|
91
|
+
return null;
|
|
92
|
+
const reason = typeof data.reason === "string" && data.reason.length > 0 ? data.reason : "external_policy";
|
|
93
|
+
return { flagged: data.flagged, reason };
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
export async function checkContent(text, url) {
|
|
100
|
+
const mode = policyMode();
|
|
101
|
+
if (mode === "off")
|
|
102
|
+
return { flagged: false, reason: null, source: "disabled" };
|
|
103
|
+
const external = await externalAssess(text, url);
|
|
104
|
+
if (external) {
|
|
105
|
+
if (external.flagged)
|
|
106
|
+
audit("content_policy_flag", `${url} (${external.reason})`);
|
|
107
|
+
return { ...external, source: "external" };
|
|
108
|
+
}
|
|
109
|
+
const builtin = builtinAssess(text);
|
|
110
|
+
if (builtin.flagged)
|
|
111
|
+
audit("content_policy_flag", `${url} (${builtin.reason})`);
|
|
112
|
+
return { ...builtin, source: "builtin" };
|
|
113
|
+
}
|
|
114
|
+
/** Map a policy verdict to the disposition for the current mode. */
|
|
115
|
+
export function disposition(flagged) {
|
|
116
|
+
const mode = policyMode();
|
|
117
|
+
if (!flagged || mode === "off")
|
|
118
|
+
return "store";
|
|
119
|
+
if (mode === "block")
|
|
120
|
+
return "refuse";
|
|
121
|
+
return "skip";
|
|
122
|
+
}
|
|
123
|
+
/** Policy metadata for a response envelope, omitted entirely when clean. */
|
|
124
|
+
export function policyMeta(flags, mode) {
|
|
125
|
+
if (flags === 0)
|
|
126
|
+
return undefined;
|
|
127
|
+
return { content_policy: { flagged: flags, mode } };
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=content-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-policy.js","sourceRoot":"","sources":["../src/content-policy.ts"],"names":[],"mappings":"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"}
|
package/dist/cooldown.d.ts
CHANGED
|
@@ -2,5 +2,4 @@ export declare function cooldownDurationMs(duration: number | undefined): number
|
|
|
2
2
|
export declare function markCooldown(slug: string, durationMs: number): void;
|
|
3
3
|
export declare function inCooldown(slug: string): boolean;
|
|
4
4
|
export declare function cooldownRemainingMs(slug: string): number;
|
|
5
|
-
export declare function clearCooldown(slug: string): void;
|
|
6
5
|
export declare function shouldCooldown(e: unknown): boolean;
|
package/dist/cooldown.js
CHANGED
|
@@ -30,9 +30,6 @@ export function cooldownRemainingMs(slug) {
|
|
|
30
30
|
return 0;
|
|
31
31
|
return Math.max(0, until - Date.now());
|
|
32
32
|
}
|
|
33
|
-
export function clearCooldown(slug) {
|
|
34
|
-
cooldowns.delete(slug);
|
|
35
|
-
}
|
|
36
33
|
// A failure that should put the provider in cooldown: a rate-limit response
|
|
37
34
|
// (HTTP 429) or a provider-declared bot challenge. Transient 503s are left to
|
|
38
35
|
// the retry policy and do not cool the provider down.
|
package/dist/cooldown.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cooldown.js","sourceRoot":"","sources":["../src/cooldown.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,8EAA8E;AAC9E,2EAA2E;AAC3E,4EAA4E;AAC5E,0EAA0E;AAC1E,yCAAyC;AACzC,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE5C,MAAM,UAAU,kBAAkB,CAAC,QAA4B;IAC7D,OAAO,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,UAAkB;IAC3D,IAAI,UAAU,IAAI,CAAC;QAAE,OAAO;IAC5B,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,KAAK,EAAE,CAAC;QACxB,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"cooldown.js","sourceRoot":"","sources":["../src/cooldown.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,8EAA8E;AAC9E,2EAA2E;AAC3E,4EAA4E;AAC5E,0EAA0E;AAC1E,yCAAyC;AACzC,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE5C,MAAM,UAAU,kBAAkB,CAAC,QAA4B;IAC7D,OAAO,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,UAAkB;IAC3D,IAAI,UAAU,IAAI,CAAC;QAAE,OAAO;IAC5B,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,KAAK,EAAE,CAAC;QACxB,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,4EAA4E;AAC5E,8EAA8E;AAC9E,sDAAsD;AACtD,MAAM,UAAU,cAAc,CAAC,CAAU;IACvC,OAAO,CAAC,YAAY,iBAAiB,IAAI,CAAC,CAAC,YAAY,cAAc,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC;AAC7F,CAAC"}
|