infobroker 2026.9.11 → 2026.9.16
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 +33 -14
- package/dist/audit-log.js +9 -1
- package/dist/audit-log.js.map +1 -1
- package/dist/chain.js +6 -1
- package/dist/chain.js.map +1 -1
- package/dist/cite.js +3 -2
- package/dist/cite.js.map +1 -1
- package/dist/config-migrations.d.ts +39 -0
- package/dist/config-migrations.js +112 -0
- package/dist/config-migrations.js.map +1 -0
- package/dist/config.d.ts +14 -0
- package/dist/config.js +86 -10
- package/dist/config.js.map +1 -1
- package/dist/content-policy.js +12 -2
- package/dist/content-policy.js.map +1 -1
- package/dist/corroborate.d.ts +3 -0
- package/dist/corroborate.js +86 -9
- package/dist/corroborate.js.map +1 -1
- package/dist/dedup.d.ts +3 -0
- package/dist/dedup.js +54 -0
- package/dist/dedup.js.map +1 -0
- package/dist/embed.d.ts +26 -0
- package/dist/embed.js +410 -0
- package/dist/embed.js.map +1 -0
- package/dist/expand.js +32 -3
- package/dist/expand.js.map +1 -1
- package/dist/index.js +190 -37
- package/dist/index.js.map +1 -1
- package/dist/kb.d.ts +4 -0
- package/dist/kb.js +154 -103
- package/dist/kb.js.map +1 -1
- package/dist/key-pool.d.ts +16 -0
- package/dist/key-pool.js +211 -0
- package/dist/key-pool.js.map +1 -0
- package/dist/lib/atomic-write.d.ts +7 -0
- package/dist/lib/atomic-write.js +64 -0
- package/dist/lib/atomic-write.js.map +1 -0
- package/dist/lib/sanitize-error.js +11 -3
- package/dist/lib/sanitize-error.js.map +1 -1
- package/dist/lib/url-guard.js +65 -7
- package/dist/lib/url-guard.js.map +1 -1
- package/dist/providers/brave.js +6 -10
- package/dist/providers/brave.js.map +1 -1
- package/dist/providers/exa.js +6 -10
- package/dist/providers/exa.js.map +1 -1
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.js +6 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/tavily.js +6 -10
- package/dist/providers/tavily.js.map +1 -1
- package/dist/providers/yep.js +6 -10
- package/dist/providers/yep.js.map +1 -1
- package/dist/rerank.d.ts +4 -1
- package/dist/rerank.js +30 -67
- package/dist/rerank.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -284,8 +284,11 @@ base. `manage_kb` checks the cache before hitting external providers — only
|
|
|
284
284
|
falling back to the network when the cached results aren't fresh enough
|
|
285
285
|
or relevant enough. Its actions ingest new text or a URL by hand, report
|
|
286
286
|
what's cached, and remove content. Content is age-scored, expired on a
|
|
287
|
-
freshness schedule, and deduplicated by source.
|
|
288
|
-
|
|
287
|
+
freshness schedule, and deduplicated by source. Retrieval runs on your
|
|
288
|
+
machine with a configurable in-process embedding model — your content is
|
|
289
|
+
never sent to a third party to be embedded. Beyond
|
|
290
|
+
the cache, `manage_kb` archives the reports you generate: ingest with
|
|
291
|
+
`source_type: "report"`
|
|
289
292
|
(and default to the knowledge base) and revisit them with `manage_kb` list and
|
|
290
293
|
`manage_kb` get, or write them to a local directory instead. Each archived report
|
|
291
294
|
records its source's last-updated date, so you can compare it against the
|
|
@@ -401,6 +404,12 @@ export INFOBROKER_SEARXNG_URL="http://localhost:8080"
|
|
|
401
404
|
|
|
402
405
|
Then set `"enabled": true` in `config.json` for the provider.
|
|
403
406
|
|
|
407
|
+
Keyed providers also accept an ordered credential pool via
|
|
408
|
+
`INFOBROKER_<NAME>_API_KEYS` (comma-separated). Infobroker rotates to the
|
|
409
|
+
next key when one is rejected or rate-limited, and reports per-key
|
|
410
|
+
availability through `inspect_providers` without ever surfacing key
|
|
411
|
+
material.
|
|
412
|
+
|
|
404
413
|
SearXNG is the only shipped self-hosted provider, and it is optional
|
|
405
414
|
through and through. Nothing in the server requires it, and nothing is
|
|
406
415
|
bundled or installed on its behalf — SearXNG runs as a container you
|
|
@@ -412,12 +421,12 @@ SearXNG instance sees your queries.
|
|
|
412
421
|
|
|
413
422
|
## Configuration
|
|
414
423
|
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
424
|
+
Four environment variables tune a deployment. `INFOBROKER_CONFIG` points
|
|
425
|
+
at a different config file (default `./config.json`),
|
|
426
|
+
`INFOBROKER_CONFIG_LOCAL` at a user config layer (default
|
|
427
|
+
`config.local.json`), `INFOBROKER_<NAME>_API_KEY` supplies a keyed
|
|
428
|
+
provider's credential, and `INFOBROKER_<NAME>_URL` points at a self-hosted
|
|
429
|
+
provider.
|
|
421
430
|
|
|
422
431
|
`config.json` ships with the repository and holds the defaults: which
|
|
423
432
|
providers are enabled, their priority in fallback chains, rate limits,
|
|
@@ -431,10 +440,20 @@ This file is git-ignored, so pulling updates from the repository never
|
|
|
431
440
|
overwrites your settings. Values in the user layer take precedence over
|
|
432
441
|
the shipped defaults; anything left out falls back to `config.json`.
|
|
433
442
|
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
443
|
+
`config.json` carries a schema stamp (`config_version`). If your user layer
|
|
444
|
+
was written for an older schema, or holds a key the current schema no longer
|
|
445
|
+
recognizes, the server reports the drift at startup and in every
|
|
446
|
+
`reload_config` response without changing your file. Apply the registered
|
|
447
|
+
migrations on demand by calling `reload_config` with `migrate` true: the
|
|
448
|
+
server first copies your layer to a timestamped `*.bak-*` file, then updates
|
|
449
|
+
it atomically, leaving anything it does not recognize untouched.
|
|
450
|
+
|
|
451
|
+
The knowledge base ships empty. Retrieval runs on a configurable in-process
|
|
452
|
+
embedding model selected by `kb.embedding_model`. By default the store
|
|
453
|
+
writes to a user-scoped path (`~/.local/share/infobroker/knowledge-base`)
|
|
454
|
+
outside the repository, so the content you research and cache stays on your
|
|
455
|
+
machine and is never committed. Each deployed instance accumulates its own
|
|
456
|
+
store.
|
|
438
457
|
|
|
439
458
|
### Knowledge base encryption
|
|
440
459
|
|
|
@@ -616,7 +635,7 @@ contradiction, and gaps. The bundled skills close the loop from raw
|
|
|
616
635
|
research to finished writing. One server. Every source. Research that
|
|
617
636
|
delivers.
|
|
618
637
|
|
|
619
|
-
Last updated: 2026-09-
|
|
638
|
+
Last updated: 2026-09-16.
|
|
620
639
|
|
|
621
640
|
## Contribute
|
|
622
641
|
|
|
@@ -646,7 +665,7 @@ terms and API keys.
|
|
|
646
665
|
## Spec
|
|
647
666
|
|
|
648
667
|
The server is built from a single source specification, `infobroker.md`
|
|
649
|
-
(v2026.09.
|
|
668
|
+
(v2026.09.16), which defines every requirement and the gates that verify it.
|
|
650
669
|
Each requirement traces to an implementation file, and `npm run check`
|
|
651
670
|
reconciles the code, the spec, and this README so what is documented is what
|
|
652
671
|
the server actually delivers.
|
package/dist/audit-log.js
CHANGED
|
@@ -14,6 +14,14 @@ function auditPath() {
|
|
|
14
14
|
}
|
|
15
15
|
return `${homedir()}/.local/share/infobroker/audit.log`;
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* REQ-098: one audit entry is one line. Strip CR/LF and other control
|
|
19
|
+
* characters from the detail so untrusted text (for example a refused URL)
|
|
20
|
+
* cannot inject additional, forged entries into the append-only trail.
|
|
21
|
+
*/
|
|
22
|
+
function sanitizeDetail(detail) {
|
|
23
|
+
return detail.replace(/[\u0000-\u001f\u007f-\u009f\u2028\u2029]+/g, " ");
|
|
24
|
+
}
|
|
17
25
|
/**
|
|
18
26
|
* Record one audit entry: an ISO timestamp, an event kind, and a short
|
|
19
27
|
* detail string. Never pass secrets or full retrieved content here — the
|
|
@@ -35,7 +43,7 @@ export function audit(event, detail) {
|
|
|
35
43
|
// best effort — a non-owner-readable audit file is not a blocker
|
|
36
44
|
}
|
|
37
45
|
}
|
|
38
|
-
appendFileSync(path, `${new Date().toISOString()} ${event} ${detail}\n`);
|
|
46
|
+
appendFileSync(path, `${new Date().toISOString()} ${event} ${sanitizeDetail(detail)}\n`);
|
|
39
47
|
}
|
|
40
48
|
catch {
|
|
41
49
|
// REQ-098: audit failure must not break the triggering operation.
|
package/dist/audit-log.js.map
CHANGED
|
@@ -1 +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;
|
|
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;;;;GAIG;AACH,SAAS,cAAc,CAAC,MAAc;IACpC,OAAO,MAAM,CAAC,OAAO,CAAC,4CAA4C,EAAE,GAAG,CAAC,CAAC;AAC3E,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,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3F,CAAC;IAAC,MAAM,CAAC;QACP,kEAAkE;IACpE,CAAC;AACH,CAAC"}
|
package/dist/chain.js
CHANGED
|
@@ -6,7 +6,12 @@ import { getDispatchChain, getConfig } from "./config.js";
|
|
|
6
6
|
// `content_type` is a server-side post-filter (never honored by a provider).
|
|
7
7
|
export const SUPPORTED_OPTIONS = {
|
|
8
8
|
duckduckgo: { time_range: true, safe_search: true, region: true },
|
|
9
|
-
|
|
9
|
+
// Brave maps `time_range` to `freshness`; it does not read `region`, so a
|
|
10
|
+
// caller-supplied region is reported as ignored rather than silently dropped.
|
|
11
|
+
brave: { time_range: true },
|
|
12
|
+
// Yep reads `region` (location) and `time_range` (start_published_date); it
|
|
13
|
+
// applies `safe_search` only for the `strict` value, so `off` stays ignored.
|
|
14
|
+
yep: { time_range: true, region: true },
|
|
10
15
|
};
|
|
11
16
|
export function ignoredParams(provider, opts) {
|
|
12
17
|
const supported = SUPPORTED_OPTIONS[provider] ?? {};
|
package/dist/chain.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chain.js","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE1D,wEAAwE;AACxE,0EAA0E;AAC1E,oEAAoE;AACpE,6EAA6E;AAC7E,MAAM,CAAC,MAAM,iBAAiB,GAG1B;IACF,UAAU,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IACjE,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;
|
|
1
|
+
{"version":3,"file":"chain.js","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"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"}
|
package/dist/cite.js
CHANGED
|
@@ -52,13 +52,14 @@ async function searchSemanticScholar(query, limit) {
|
|
|
52
52
|
return (data.data || []).map((item) => {
|
|
53
53
|
const year = item.year ? String(item.year) : undefined;
|
|
54
54
|
const authors = (item.authors || []).map((a) => a.name);
|
|
55
|
+
const url = item.url || `https://api.semanticscholar.org/paper/${item.title}`;
|
|
55
56
|
return {
|
|
56
57
|
title: item.title,
|
|
57
|
-
url
|
|
58
|
+
url,
|
|
58
59
|
year,
|
|
59
60
|
authors,
|
|
60
61
|
venue: item.venue,
|
|
61
|
-
bibtex: citationFor(item.title, authors, year, item.venue,
|
|
62
|
+
bibtex: citationFor(item.title, authors, year, item.venue, url),
|
|
62
63
|
};
|
|
63
64
|
});
|
|
64
65
|
}
|
package/dist/cite.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cite.js","sourceRoot":"","sources":["../src/cite.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cite.js","sourceRoot":"","sources":["../src/cite.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export declare const CURRENT_CONFIG_VERSION = 1;
|
|
2
|
+
export interface RenameMigration {
|
|
3
|
+
from: string;
|
|
4
|
+
to: string;
|
|
5
|
+
}
|
|
6
|
+
export interface DeprecatedKey {
|
|
7
|
+
path: string;
|
|
8
|
+
replacement: string;
|
|
9
|
+
}
|
|
10
|
+
export declare const RENAME_MIGRATIONS: readonly RenameMigration[];
|
|
11
|
+
export declare const DEPRECATED_KEYS: readonly DeprecatedKey[];
|
|
12
|
+
export interface ConfigDrift {
|
|
13
|
+
declaredVersion: number | null;
|
|
14
|
+
currentVersion: number;
|
|
15
|
+
outdatedVersion: boolean;
|
|
16
|
+
renames: RenameMigration[];
|
|
17
|
+
deprecated: DeprecatedKey[];
|
|
18
|
+
unrecognized: string[];
|
|
19
|
+
hasDrift: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Read-only drift assessment. `shippedTopLevel` is the set of top-level keys in
|
|
23
|
+
* the shipped default config; a user-layer top-level key outside that set (and
|
|
24
|
+
* not `config_version`) is reported as unrecognized. Nested unrecognized keys
|
|
25
|
+
* are intentionally not reported — provider slugs, dispatch task types, and
|
|
26
|
+
* policy categories are legitimately user-defined.
|
|
27
|
+
*/
|
|
28
|
+
export declare function detectConfigDrift(userLayer: Record<string, unknown>, shippedTopLevel: readonly string[], migrations?: readonly RenameMigration[]): ConfigDrift;
|
|
29
|
+
/**
|
|
30
|
+
* Apply the registered key relocations and stamp the current schema version.
|
|
31
|
+
* Returns a new layer (the input is not mutated) plus a human-readable list of
|
|
32
|
+
* applied changes. When a target key already holds a user value, the user's
|
|
33
|
+
* value wins and the legacy duplicate is dropped, so the migration is
|
|
34
|
+
* idempotent. Unrecognized keys are copied through untouched.
|
|
35
|
+
*/
|
|
36
|
+
export declare function applyConfigMigrations(userLayer: Record<string, unknown>, drift: ConfigDrift): {
|
|
37
|
+
layer: Record<string, unknown>;
|
|
38
|
+
changes: string[];
|
|
39
|
+
};
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
// @implements REQ-105
|
|
2
|
+
// User-configuration-layer migration (REQ-105). Detects entries in the user
|
|
3
|
+
// layer that no longer match the shipped schema and relocates registered legacy
|
|
4
|
+
// keys, without ever discarding entries the current schema does not recognize.
|
|
5
|
+
// Detection is read-only; application is explicit and driven by the caller. The
|
|
6
|
+
// user layer is versioned with `config_version`; an absent version is treated as
|
|
7
|
+
// "unversioned" rather than zero, so a user who never sets it is not nagged
|
|
8
|
+
// about a migration it does not need.
|
|
9
|
+
export const CURRENT_CONFIG_VERSION = 1;
|
|
10
|
+
// Registered key relocations applied to the user layer. Empty until a release
|
|
11
|
+
// renames a shipped config key; the engine's transform path is exercised by
|
|
12
|
+
// tests with injected entries, and the deprecation surface below is live.
|
|
13
|
+
export const RENAME_MIGRATIONS = [];
|
|
14
|
+
// Legacy user-layer keys that are superseded but cannot be transformed without
|
|
15
|
+
// changing behavior (the replacement shape carries information the old key
|
|
16
|
+
// lacks). These are reported for manual migration, never rewritten.
|
|
17
|
+
export const DEPRECATED_KEYS = [
|
|
18
|
+
{ path: "kb.expiry", replacement: "kb.freshness tiers (per-tier decay and expiry)" },
|
|
19
|
+
];
|
|
20
|
+
function isPlainObject(v) {
|
|
21
|
+
return typeof v === "object" && v !== null && !Array.isArray(v);
|
|
22
|
+
}
|
|
23
|
+
function getPath(obj, path) {
|
|
24
|
+
let cur = obj;
|
|
25
|
+
for (const part of path.split(".")) {
|
|
26
|
+
if (!isPlainObject(cur))
|
|
27
|
+
return undefined;
|
|
28
|
+
cur = cur[part];
|
|
29
|
+
}
|
|
30
|
+
return cur;
|
|
31
|
+
}
|
|
32
|
+
function setPath(obj, path, value) {
|
|
33
|
+
const parts = path.split(".");
|
|
34
|
+
let cur = obj;
|
|
35
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
36
|
+
const part = parts[i];
|
|
37
|
+
if (!isPlainObject(cur[part]))
|
|
38
|
+
cur[part] = {};
|
|
39
|
+
cur = cur[part];
|
|
40
|
+
}
|
|
41
|
+
cur[parts[parts.length - 1]] = value;
|
|
42
|
+
}
|
|
43
|
+
function deletePath(obj, path) {
|
|
44
|
+
const parts = path.split(".");
|
|
45
|
+
let cur = obj;
|
|
46
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
47
|
+
const part = parts[i];
|
|
48
|
+
if (!isPlainObject(cur[part]))
|
|
49
|
+
return;
|
|
50
|
+
cur = cur[part];
|
|
51
|
+
}
|
|
52
|
+
delete cur[parts[parts.length - 1]];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Read-only drift assessment. `shippedTopLevel` is the set of top-level keys in
|
|
56
|
+
* the shipped default config; a user-layer top-level key outside that set (and
|
|
57
|
+
* not `config_version`) is reported as unrecognized. Nested unrecognized keys
|
|
58
|
+
* are intentionally not reported — provider slugs, dispatch task types, and
|
|
59
|
+
* policy categories are legitimately user-defined.
|
|
60
|
+
*/
|
|
61
|
+
export function detectConfigDrift(userLayer, shippedTopLevel, migrations = RENAME_MIGRATIONS) {
|
|
62
|
+
const declared = typeof userLayer["config_version"] === "number" ? userLayer["config_version"] : null;
|
|
63
|
+
const renames = migrations.filter((m) => getPath(userLayer, m.from) !== undefined);
|
|
64
|
+
const deprecated = DEPRECATED_KEYS.filter((d) => getPath(userLayer, d.path) !== undefined);
|
|
65
|
+
const known = new Set(shippedTopLevel);
|
|
66
|
+
known.add("config_version");
|
|
67
|
+
const unrecognized = Object.keys(userLayer).filter((k) => !known.has(k));
|
|
68
|
+
const outdatedVersion = declared !== null && declared < CURRENT_CONFIG_VERSION;
|
|
69
|
+
const hasDrift = renames.length > 0 || deprecated.length > 0 || unrecognized.length > 0 || outdatedVersion;
|
|
70
|
+
return {
|
|
71
|
+
declaredVersion: declared,
|
|
72
|
+
currentVersion: CURRENT_CONFIG_VERSION,
|
|
73
|
+
outdatedVersion,
|
|
74
|
+
renames,
|
|
75
|
+
deprecated,
|
|
76
|
+
unrecognized,
|
|
77
|
+
hasDrift,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Apply the registered key relocations and stamp the current schema version.
|
|
82
|
+
* Returns a new layer (the input is not mutated) plus a human-readable list of
|
|
83
|
+
* applied changes. When a target key already holds a user value, the user's
|
|
84
|
+
* value wins and the legacy duplicate is dropped, so the migration is
|
|
85
|
+
* idempotent. Unrecognized keys are copied through untouched.
|
|
86
|
+
*/
|
|
87
|
+
export function applyConfigMigrations(userLayer, drift) {
|
|
88
|
+
const layer = JSON.parse(JSON.stringify(userLayer));
|
|
89
|
+
const changes = [];
|
|
90
|
+
for (const rename of drift.renames) {
|
|
91
|
+
const value = getPath(layer, rename.from);
|
|
92
|
+
if (value === undefined)
|
|
93
|
+
continue;
|
|
94
|
+
if (getPath(layer, rename.to) === undefined) {
|
|
95
|
+
setPath(layer, rename.to, value);
|
|
96
|
+
changes.push(`moved "${rename.from}" → "${rename.to}"`);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
changes.push(`dropped legacy "${rename.from}" (user value at "${rename.to}" takes precedence)`);
|
|
100
|
+
}
|
|
101
|
+
deletePath(layer, rename.from);
|
|
102
|
+
}
|
|
103
|
+
// Stamp the current schema version when the layer is unversioned or written
|
|
104
|
+
// for an older schema. A clean layer already at the current version yields no
|
|
105
|
+
// changes, so an explicit migrate call is a no-op for it.
|
|
106
|
+
if (drift.declaredVersion !== CURRENT_CONFIG_VERSION) {
|
|
107
|
+
layer["config_version"] = CURRENT_CONFIG_VERSION;
|
|
108
|
+
changes.push(`stamped config_version=${CURRENT_CONFIG_VERSION}`);
|
|
109
|
+
}
|
|
110
|
+
return { layer, changes };
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=config-migrations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-migrations.js","sourceRoot":"","sources":["../src/config-migrations.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
import type { Config, ProviderConfig } from "./types.js";
|
|
2
|
+
import { type ConfigDrift } from "./config-migrations.js";
|
|
2
3
|
export declare function getConfigPath(): string;
|
|
3
4
|
export declare function getUserConfigPath(): string | undefined;
|
|
5
|
+
/** REQ-105: read-only drift assessment for the current user configuration layer. */
|
|
6
|
+
export declare function getUserConfigDrift(): ConfigDrift | null;
|
|
7
|
+
/**
|
|
8
|
+
* REQ-105: opt-in migration of the user configuration layer. Backs up the
|
|
9
|
+
* existing file, applies registered migrations and the current schema stamp,
|
|
10
|
+
* and commits atomically. Returns the applied changes and the backup path, or
|
|
11
|
+
* null when there is no user layer or nothing to change.
|
|
12
|
+
*/
|
|
13
|
+
export declare function migrateUserConfigLayer(): {
|
|
14
|
+
changes: string[];
|
|
15
|
+
backup: string | null;
|
|
16
|
+
path: string;
|
|
17
|
+
} | null;
|
|
4
18
|
export declare function loadConfig(): Config;
|
|
5
19
|
export declare function reloadConfig(): Config;
|
|
6
20
|
export declare function getConfig(): Config;
|
package/dist/config.js
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
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
|
|
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 REQ-105
|
|
2
2
|
import { readFileSync, existsSync } from "node:fs";
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
|
+
import { detectConfigDrift, applyConfigMigrations, CURRENT_CONFIG_VERSION, } from "./config-migrations.js";
|
|
5
|
+
import { atomicWriteFile, backupFile } from "./lib/atomic-write.js";
|
|
4
6
|
let configPath;
|
|
5
7
|
let cachedConfig = null;
|
|
8
|
+
// The parsed user configuration layer and the shipped top-level key set, kept
|
|
9
|
+
// so REQ-105 drift detection can run without re-reading the files.
|
|
10
|
+
let userConfigLayer = null;
|
|
11
|
+
let shippedTopLevel = [];
|
|
6
12
|
export function getConfigPath() {
|
|
7
13
|
if (!configPath) {
|
|
8
14
|
configPath = process.env["INFOBROKER_CONFIG"] || "./config.json";
|
|
@@ -56,11 +62,64 @@ function readJson(path) {
|
|
|
56
62
|
}
|
|
57
63
|
function loadConfigFromDisk() {
|
|
58
64
|
const base = readJson(getConfigPath());
|
|
65
|
+
shippedTopLevel = Object.keys(base);
|
|
59
66
|
const userPath = getUserConfigPath();
|
|
60
|
-
const
|
|
61
|
-
|
|
67
|
+
const rawUser = userPath && existsSync(userPath) ? readJson(userPath) : null;
|
|
68
|
+
userConfigLayer = isPlainObject(rawUser) ? rawUser : null;
|
|
69
|
+
const merged = userConfigLayer
|
|
70
|
+
? mergeLayer(base, userConfigLayer)
|
|
62
71
|
: base;
|
|
63
|
-
|
|
72
|
+
const result = applyDefaults(merged);
|
|
73
|
+
warnOnConfigDrift();
|
|
74
|
+
return result;
|
|
75
|
+
}
|
|
76
|
+
// REQ-105: report user-layer drift without modifying user state. Non-blocking —
|
|
77
|
+
// the server operates on the merged config regardless.
|
|
78
|
+
function warnOnConfigDrift() {
|
|
79
|
+
if (!userConfigLayer)
|
|
80
|
+
return;
|
|
81
|
+
const drift = detectConfigDrift(userConfigLayer, shippedTopLevel);
|
|
82
|
+
if (!drift.hasDrift)
|
|
83
|
+
return;
|
|
84
|
+
const notes = [];
|
|
85
|
+
if (drift.outdatedVersion) {
|
|
86
|
+
notes.push(`written for schema v${drift.declaredVersion}, current is v${drift.currentVersion}`);
|
|
87
|
+
}
|
|
88
|
+
for (const r of drift.renames)
|
|
89
|
+
notes.push(`legacy key "${r.from}" → "${r.to}"`);
|
|
90
|
+
for (const d of drift.deprecated)
|
|
91
|
+
notes.push(`deprecated "${d.path}" — use ${d.replacement}`);
|
|
92
|
+
for (const u of drift.unrecognized)
|
|
93
|
+
notes.push(`unrecognized key "${u}"`);
|
|
94
|
+
console.warn(`[infobroker] user config drift detected (${notes.join("; ")}). No user state was changed. ` +
|
|
95
|
+
`Run reload_config with migrate=true to back up and apply registered migrations.`);
|
|
96
|
+
}
|
|
97
|
+
/** REQ-105: read-only drift assessment for the current user configuration layer. */
|
|
98
|
+
export function getUserConfigDrift() {
|
|
99
|
+
if (!userConfigLayer)
|
|
100
|
+
return null;
|
|
101
|
+
return detectConfigDrift(userConfigLayer, shippedTopLevel);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* REQ-105: opt-in migration of the user configuration layer. Backs up the
|
|
105
|
+
* existing file, applies registered migrations and the current schema stamp,
|
|
106
|
+
* and commits atomically. Returns the applied changes and the backup path, or
|
|
107
|
+
* null when there is no user layer or nothing to change.
|
|
108
|
+
*/
|
|
109
|
+
export function migrateUserConfigLayer() {
|
|
110
|
+
const userPath = getUserConfigPath();
|
|
111
|
+
if (!userPath || !existsSync(userPath))
|
|
112
|
+
return null;
|
|
113
|
+
if (!userConfigLayer)
|
|
114
|
+
return null;
|
|
115
|
+
const drift = detectConfigDrift(userConfigLayer, shippedTopLevel);
|
|
116
|
+
const { layer, changes } = applyConfigMigrations(userConfigLayer, drift);
|
|
117
|
+
if (changes.length === 0)
|
|
118
|
+
return null;
|
|
119
|
+
const backup = backupFile(userPath);
|
|
120
|
+
atomicWriteFile(userPath, Buffer.from(`${JSON.stringify(layer, null, 2)}\n`, "utf-8"));
|
|
121
|
+
userConfigLayer = layer;
|
|
122
|
+
return { changes, backup, path: userPath };
|
|
64
123
|
}
|
|
65
124
|
function applyDefaults(config) {
|
|
66
125
|
const defaults = config.defaults;
|
|
@@ -78,6 +137,15 @@ function applyDefaults(config) {
|
|
|
78
137
|
}
|
|
79
138
|
function validateConfig(config) {
|
|
80
139
|
const errors = [];
|
|
140
|
+
if (config.config_version !== undefined) {
|
|
141
|
+
if (!Number.isInteger(config.config_version) || config.config_version < 1) {
|
|
142
|
+
errors.push("config_version must be a positive integer");
|
|
143
|
+
}
|
|
144
|
+
else if (config.config_version > CURRENT_CONFIG_VERSION) {
|
|
145
|
+
errors.push(`config_version ${config.config_version} is newer than this server supports (${CURRENT_CONFIG_VERSION}); ` +
|
|
146
|
+
`update the server or remove the field from the user configuration layer`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
81
149
|
for (const [slug, provider] of Object.entries(config.providers)) {
|
|
82
150
|
if (!provider.tier || !["builtin", "free_http", "keyed_http", "self_hosted_http", "generic_http"].includes(provider.tier)) {
|
|
83
151
|
errors.push(`Provider "${slug}": missing or invalid "tier"`);
|
|
@@ -91,10 +159,15 @@ function validateConfig(config) {
|
|
|
91
159
|
if (typeof provider.priority !== "number") {
|
|
92
160
|
errors.push(`Provider "${slug}": missing or invalid "priority"`);
|
|
93
161
|
}
|
|
94
|
-
if (provider.rate_limit) {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
162
|
+
if (provider.rate_limit !== undefined) {
|
|
163
|
+
if (typeof provider.rate_limit !== "object" || provider.rate_limit === null || Array.isArray(provider.rate_limit)) {
|
|
164
|
+
errors.push(`Provider "${slug}": rate_limit must be an object`);
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
for (const [key, value] of Object.entries(provider.rate_limit)) {
|
|
168
|
+
if (typeof value !== "number" || !Number.isFinite(value) || value < 0) {
|
|
169
|
+
errors.push(`Provider "${slug}": rate_limit.${key} must be a non-negative finite number`);
|
|
170
|
+
}
|
|
98
171
|
}
|
|
99
172
|
}
|
|
100
173
|
}
|
|
@@ -376,8 +449,11 @@ export function getDispatchChain(taskType) {
|
|
|
376
449
|
const provider = config.providers[slug];
|
|
377
450
|
if (!provider || !provider.enabled)
|
|
378
451
|
return false;
|
|
379
|
-
if (provider.tier === "keyed_http" && provider.auth_env
|
|
380
|
-
|
|
452
|
+
if (provider.tier === "keyed_http" && provider.auth_env) {
|
|
453
|
+
const many = provider.auth_env.replace(/_API_KEY$/, "_API_KEYS");
|
|
454
|
+
if (!process.env[provider.auth_env] && !process.env[many])
|
|
455
|
+
return false;
|
|
456
|
+
}
|
|
381
457
|
if (provider.tier === "self_hosted_http" && provider.url_env && !process.env[provider.url_env])
|
|
382
458
|
return false;
|
|
383
459
|
return true;
|
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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"}
|
package/dist/content-policy.js
CHANGED
|
@@ -45,18 +45,28 @@ function mergedPatterns() {
|
|
|
45
45
|
}
|
|
46
46
|
return out;
|
|
47
47
|
}
|
|
48
|
+
// REQ-097: normalize before matching so trivial obfuscation — extra or
|
|
49
|
+
// missing whitespace, newlines, and zero-width characters — cannot evade the
|
|
50
|
+
// built-in assessment.
|
|
51
|
+
function normalizeForMatch(text) {
|
|
52
|
+
return text
|
|
53
|
+
.normalize("NFC")
|
|
54
|
+
.replace(/[\u200b-\u200d\ufeff]/g, " ")
|
|
55
|
+
.replace(/\s+/g, " ")
|
|
56
|
+
.toLowerCase();
|
|
57
|
+
}
|
|
48
58
|
function builtinAssess(text) {
|
|
49
59
|
const cfg = getConfig();
|
|
50
60
|
// With the default threshold of 0.2, a single matching pattern in the
|
|
51
61
|
// largest category (5 patterns) already flags the content.
|
|
52
62
|
const threshold = cfg.content_policy?.threshold ?? 0.2;
|
|
53
|
-
const lower = text
|
|
63
|
+
const lower = normalizeForMatch(text);
|
|
54
64
|
for (const [category, patterns] of Object.entries(mergedPatterns())) {
|
|
55
65
|
if (patterns.length === 0)
|
|
56
66
|
continue;
|
|
57
67
|
let hits = 0;
|
|
58
68
|
for (const pattern of patterns) {
|
|
59
|
-
if (pattern && lower.includes(pattern
|
|
69
|
+
if (pattern && lower.includes(normalizeForMatch(pattern)))
|
|
60
70
|
hits++;
|
|
61
71
|
}
|
|
62
72
|
if (hits / patterns.length >= threshold) {
|