@lacneu/openclaw-knowledge 3.2.6 → 3.2.8
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/CHANGELOG.md +83 -0
- package/README.md +108 -0
- package/dist/config.js +87 -4
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +31 -2
- package/dist/index.js +144 -14
- package/dist/index.js.map +1 -1
- package/dist/lightrag.d.ts +18 -2
- package/dist/lightrag.js +38 -1
- package/dist/lightrag.js.map +1 -1
- package/dist/provenance.d.ts +16 -2
- package/dist/provenance.js +37 -4
- package/dist/provenance.js.map +1 -1
- package/dist/tracing/events.d.ts +19 -0
- package/dist/tracing/events.js.map +1 -1
- package/dist/types.d.ts +111 -2
- package/openclaw.plugin.json +61 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,89 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [3.2.8] - 2026-06-20
|
|
11
|
+
|
|
12
|
+
### Added — LightRAG source references surfaced in provenance (provenance/v1)
|
|
13
|
+
|
|
14
|
+
LightRAG (≥ 1.4.5) returns a structured `references` array — the source
|
|
15
|
+
documents it attributed the assembled context to — alongside the `response`
|
|
16
|
+
context blob. The plugin previously discarded it. It is now captured and, when
|
|
17
|
+
`provenanceReport` is `"metadata"` or `"full"`, surfaced as **metadata-only
|
|
18
|
+
source-attribution items** (`file_name` = the source `file_path`) on the
|
|
19
|
+
gateway agent-event bus. Per the provenance contract, document items are keyed
|
|
20
|
+
by `file_name`; LightRAG's per-query `reference_id` ordinal is intentionally
|
|
21
|
+
not surfaced. A chat
|
|
22
|
+
frontend (openclaw-webchat) can now show the user **which source documents fed
|
|
23
|
+
a LightRAG-grounded answer** — closing the gap that previously left LightRAG
|
|
24
|
+
provenance as one opaque context blob (pgvector already carried per-hit
|
|
25
|
+
`file_name`/`collection`/`score`).
|
|
26
|
+
|
|
27
|
+
Privacy invariant preserved: a reference's `content` field (the RETRIEVED
|
|
28
|
+
text) is **never** copied to an item's `text`. The injected blob is truncated
|
|
29
|
+
to `lightragMaxChars` and a reference may have been truncated out entirely, so
|
|
30
|
+
mapping `content → text` would re-introduce the exact "report what was
|
|
31
|
+
retrieved, not injected" leak fixed for pgvector in 3.2.3. The ONLY item
|
|
32
|
+
carrying injected text remains the single `lightrag-context` blob item (gated
|
|
33
|
+
on `full`). The same invariant is applied to the reference list itself: when
|
|
34
|
+
the context is truncated to `lightragMaxChars`, references are filtered to
|
|
35
|
+
those whose `file_path` still appears in the injected text (LightRAG embeds
|
|
36
|
+
source markers inline), so a `metadata`/`full` report never attributes the
|
|
37
|
+
answer to a document whose content was cut before reaching the LLM. With no
|
|
38
|
+
truncation, every reference is kept. The filter is best-effort and fails
|
|
39
|
+
toward UNDER-attribution (dropping a reference it cannot confirm) rather than
|
|
40
|
+
over-attribution. The empty-context guard still wins: no injected text → no report,
|
|
41
|
+
even when references are present. References are deduplicated by `file_path`
|
|
42
|
+
(first-seen order, LightRAG returns them ranked) and the total item count is
|
|
43
|
+
capped at `PROVENANCE_MAX_ITEMS` with the context blob item always retained.
|
|
44
|
+
|
|
45
|
+
A `referenceCount` field is added to the `lightrag` tracing event (`0` on
|
|
46
|
+
servers that don't emit references or in TEST mode).
|
|
47
|
+
|
|
48
|
+
This requires no config change — references surface automatically wherever
|
|
49
|
+
`provenanceReport` is already enabled. Source attribution inherits the exact
|
|
50
|
+
same per-instance LightRAG workspace scoping as the context itself (the plugin
|
|
51
|
+
queries `lightrag-olivier` vs `lightrag-jerome`), so it introduces **no new
|
|
52
|
+
isolation surface**.
|
|
53
|
+
|
|
54
|
+
#### Internal-API change
|
|
55
|
+
|
|
56
|
+
`queryLightRAG` now returns `{ context: string; references: LightRAGReference[] }`
|
|
57
|
+
instead of `string`. The data comes from a single `/query` response, so no
|
|
58
|
+
extra round-trip is added. `truncateLightRAG` / `formatLightRAGResults` are
|
|
59
|
+
unchanged. New exported types: `LightRAGReference`, `LightRAGQueryResult`; new
|
|
60
|
+
exported helper `parseLightRAGReferences`.
|
|
61
|
+
|
|
62
|
+
## [3.2.7] - 2026-06-18
|
|
63
|
+
|
|
64
|
+
### Added — TEST mode (mocked sources, opt-in)
|
|
65
|
+
|
|
66
|
+
New `testMode` config block lets the plugin run in an **isolated test
|
|
67
|
+
environment with no live LightRAG server and no PostgreSQL/pgvector
|
|
68
|
+
backend**. When `testMode.enabled` is `true`, BOTH sources return canned
|
|
69
|
+
data instead of querying anything:
|
|
70
|
+
|
|
71
|
+
- **LightRAG** → `testMode.lightragMockResponse` (a realistic synthetic
|
|
72
|
+
knowledge-graph context by default; the `{{query}}` token is substituted
|
|
73
|
+
with the user's query at runtime so you can confirm it reaches the source).
|
|
74
|
+
- **pgvector** → `testMode.pgvectorMockResults` (a small realistic
|
|
75
|
+
synthetic hit set by default; each entry is normalized to a full result
|
|
76
|
+
row and sorted by descending score).
|
|
77
|
+
|
|
78
|
+
The mocked context is **genuinely injected** into the agent's system prompt
|
|
79
|
+
via the unchanged `before_prompt_build` → `appendSystemContext` path, so the
|
|
80
|
+
plugin's real impact on the agent's answers is observable downstream — e.g.
|
|
81
|
+
the agent's LLM call (traced via LiteLLM → Langfuse) reflects the injected
|
|
82
|
+
context. The plugin makes **zero** outbound calls in test mode (no Gemini
|
|
83
|
+
embedding, no LightRAG query) and **no pg pool is created**.
|
|
84
|
+
|
|
85
|
+
Safety: off by default; a loud `⚠️ TEST MODE ACTIVE` warning is logged at
|
|
86
|
+
registration; the ready line and the `lightrag`/`pgvector` tracing events are
|
|
87
|
+
flagged so synthetic traffic is distinguishable (`mock:true`, only present in
|
|
88
|
+
test mode — production event lines are byte-for-byte unchanged). A source
|
|
89
|
+
counts as "enabled" under the mock even without its URL/credentials, but an
|
|
90
|
+
explicit `pgvectorEnabled`/`lightragEnabled: false` still wins, so a single
|
|
91
|
+
source can be mocked in isolation. **Never enable `testMode` in production.**
|
|
92
|
+
|
|
10
93
|
### Added — provenance reporting (provenance/v1, opt-in)
|
|
11
94
|
|
|
12
95
|
New `provenanceReport` config (`"off"` default | `"metadata"` | `"full"`).
|
package/README.md
CHANGED
|
@@ -191,6 +191,10 @@ openclaw gateway restart
|
|
|
191
191
|
| `jina.pgvectorReranker.enabled` | boolean | `false` | Cross-encoder re-ordering of pgvector results |
|
|
192
192
|
| `jina.pgvectorReranker.model` | string | `"jina-reranker-v2-base-multilingual"` | Reranker model |
|
|
193
193
|
| `jina.pgvectorReranker.topN` | number | `5` | Max results returned after rerank |
|
|
194
|
+
| **TEST mode (optional, v3.2.7+)** | | | |
|
|
195
|
+
| `testMode.enabled` | boolean | `false` | Mock BOTH sources — no LightRAG/Postgres connection. **Never enable in production.** |
|
|
196
|
+
| `testMode.lightragMockResponse` | string | synthetic context | Canned LightRAG context; `{{query}}` is substituted at runtime |
|
|
197
|
+
| `testMode.pgvectorMockResults` | object[] | synthetic hits | Canned pgvector hits (`file_name`, `text`, `score`, `collection`) |
|
|
194
198
|
|
|
195
199
|
### LightRAG query modes
|
|
196
200
|
|
|
@@ -201,6 +205,88 @@ openclaw gateway restart
|
|
|
201
205
|
| `global` | Community summaries | Broad, overview questions |
|
|
202
206
|
| `hybrid` | Combines local + global | **Recommended for most cases** |
|
|
203
207
|
|
|
208
|
+
### TEST mode — run without LightRAG or Postgres (v3.2.7+)
|
|
209
|
+
|
|
210
|
+
TEST mode lets you deploy the plugin into an **isolated test environment**
|
|
211
|
+
that has **no live LightRAG server and no PostgreSQL/pgvector backend**, while
|
|
212
|
+
still observing the plugin's real impact on the agent's answers. Both sources
|
|
213
|
+
return canned data, but that data is **genuinely injected** into the agent's
|
|
214
|
+
system prompt through the normal `before_prompt_build` → `appendSystemContext`
|
|
215
|
+
path — so the agent reasons over it exactly as it would over real retrieval,
|
|
216
|
+
and any downstream LLM trace (e.g. the agent's call routed through LiteLLM to
|
|
217
|
+
Langfuse) reflects the injected context.
|
|
218
|
+
|
|
219
|
+
The plugin makes **zero outbound calls** in test mode: no Gemini embedding,
|
|
220
|
+
no LightRAG query, and **no pg pool is created**.
|
|
221
|
+
|
|
222
|
+
```json
|
|
223
|
+
{
|
|
224
|
+
"plugins": {
|
|
225
|
+
"entries": {
|
|
226
|
+
"openclaw-knowledge": {
|
|
227
|
+
"enabled": true,
|
|
228
|
+
"config": {
|
|
229
|
+
"collections": ["knowledge_test"],
|
|
230
|
+
"testMode": {
|
|
231
|
+
"enabled": true,
|
|
232
|
+
"lightragMockResponse": "Knowledge-graph context for \"{{query}}\": Projet Hélios, reference HX-2026-0042, owned by équipe Plateforme.",
|
|
233
|
+
"pgvectorMockResults": [
|
|
234
|
+
{ "file_name": "guide-helios.md", "text": "Hélios rollout: prep, switch, validation. Ref HX-2026-0042.", "score": 0.87 },
|
|
235
|
+
{ "file_name": "faq-helios.md", "text": "Hélios is piloted by équipe Plateforme since 2026-02-14.", "score": 0.72 }
|
|
236
|
+
]
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
Notes:
|
|
246
|
+
|
|
247
|
+
- **No credentials needed.** Under the mock, each source counts as "enabled"
|
|
248
|
+
even without `geminiApiKey` / `lightragUrl`. To mock a **single** source,
|
|
249
|
+
set the other's explicit toggle off (`"pgvectorEnabled": false` or
|
|
250
|
+
`"lightragEnabled": false`) — the explicit disable always wins.
|
|
251
|
+
- **Defaults are realistic.** Omit `lightragMockResponse` /
|
|
252
|
+
`pgvectorMockResults` and the plugin injects a synthetic "Projet Hélios"
|
|
253
|
+
knowledge set (with a citable `HX-2026-0042` reference) so you can confirm
|
|
254
|
+
injection worked straight from the agent's reply.
|
|
255
|
+
- **`{{query}}`** in `lightragMockResponse` is replaced with the user's query
|
|
256
|
+
at runtime, proving the query travels through the source.
|
|
257
|
+
- **Mock fidelity divergences** (intentional — the mock path has no DB/Jina):
|
|
258
|
+
- Mock pgvector results **always inject regardless of `scoreThreshold`**
|
|
259
|
+
(the real path filters `score >= scoreThreshold`).
|
|
260
|
+
- The **Jina reranker is bypassed** in test mode (it needs a live endpoint);
|
|
261
|
+
ordering is controlled entirely by the mock `score` values.
|
|
262
|
+
- **Router still applies.** The adaptive router (if enabled) runs normally. In
|
|
263
|
+
the default `heuristic` mode it works fully offline; in `jina-classifier`
|
|
264
|
+
mode it would call Jina and fail open to "retrieve" if Jina is unreachable.
|
|
265
|
+
For a fully offline test env, keep the router off or in `heuristic` mode.
|
|
266
|
+
- **Safety.** A loud `⚠️ TEST MODE ACTIVE` warning is logged at registration,
|
|
267
|
+
the ready line marks each source `[MOCK]`, and the `lightrag`/`pgvector`
|
|
268
|
+
tracing events carry `mock:true`. **Never enable `testMode` in production** —
|
|
269
|
+
it feeds the agent canned facts it will treat as real.
|
|
270
|
+
|
|
271
|
+
#### Verifying the impact (Langfuse)
|
|
272
|
+
|
|
273
|
+
The mock context is genuinely injected, so it reaches the agent's LLM call.
|
|
274
|
+
Whether it shows up in **Langfuse** depends on how your test agent is wired:
|
|
275
|
+
Langfuse traces calls that go **through LiteLLM** (and the LightRAG server).
|
|
276
|
+
A typical production OpenClaw agent routes its chat/reasoning calls **straight
|
|
277
|
+
to the model provider** (e.g. `openai-codex`), which Langfuse does **not**
|
|
278
|
+
trace — so for Langfuse visibility, the test agent must route its LLM calls
|
|
279
|
+
through LiteLLM. The plugin injects correctly either way; this only affects
|
|
280
|
+
observability.
|
|
281
|
+
|
|
282
|
+
End-to-end check that the plugin really influences answers:
|
|
283
|
+
|
|
284
|
+
1. Deploy with `testMode.enabled: true`.
|
|
285
|
+
2. Ask the agent a question answerable **only** from the mock, e.g.
|
|
286
|
+
*"What is the Hélios reference id?"*
|
|
287
|
+
3. Confirm the agent answers `HX-2026-0042` (the default mock's citable fact).
|
|
288
|
+
If it does, the injection path works end-to-end.
|
|
289
|
+
|
|
204
290
|
---
|
|
205
291
|
|
|
206
292
|
## Jina integration (v3.2.0+)
|
|
@@ -281,6 +367,7 @@ a structured event line:
|
|
|
281
367
|
```
|
|
282
368
|
[knowledge.event] {"type":"router","route":"PGVECTOR_ONLY","reason":"heuristic_keyword","score":null,"queryLength":42,"trigger":"user"}
|
|
283
369
|
[knowledge.event] {"type":"pgvector","collections":["knowledge_default"],"rawCount":5,"rerankedCount":5,"topScore":0.78,"durationMs":124}
|
|
370
|
+
[knowledge.event] {"type":"lightrag","mode":"hybrid","contextChars":3820,"truncatedChars":3820,"durationMs":210,"sparse":false,"referenceCount":3}
|
|
284
371
|
[knowledge.event] {"type":"cooldown","scope":"router","consecutiveErrors":3}
|
|
285
372
|
```
|
|
286
373
|
|
|
@@ -311,6 +398,27 @@ asked the same question twice") must instrument at the SDK layer with
|
|
|
311
398
|
a keyed HMAC and a deployment-side secret; the plugin will not do it
|
|
312
399
|
for them.
|
|
313
400
|
|
|
401
|
+
### Source attribution (provenance, v3.2.8+)
|
|
402
|
+
|
|
403
|
+
Separately from the tracing events above (which go to logs and **never**
|
|
404
|
+
carry content), when `provenanceReport` is `"metadata"` or `"full"` the
|
|
405
|
+
plugin emits a **provenance report** on the gateway agent-event bus
|
|
406
|
+
(stream `openclaw-knowledge.provenance`), scoped to the chat's own ACL —
|
|
407
|
+
so a chat frontend can show the user *which sources fed this reply*:
|
|
408
|
+
|
|
409
|
+
- **pgvector** items carry `file_name`, `collection`, `score` (and the exact
|
|
410
|
+
injected excerpt at `"full"`).
|
|
411
|
+
- **LightRAG** items now carry the **source `file_path`** of each document the
|
|
412
|
+
graph attributed the context to (from LightRAG's `references`, server
|
|
413
|
+
≥ 1.4.5), plus the single injected-context excerpt at `"full"`. This is the
|
|
414
|
+
hook for letting users deep-dive the exact sources behind a LightRAG-grounded
|
|
415
|
+
answer — the agent can then fetch the verbatim document via a skill.
|
|
416
|
+
|
|
417
|
+
A reference's retrieved `content` is deliberately never exposed as injected
|
|
418
|
+
text (only the truncated, actually-injected blob is), and reports are gated
|
|
419
|
+
behind `provenanceReport` — both off by default. Source attribution inherits
|
|
420
|
+
the same per-instance LightRAG workspace isolation as the context itself.
|
|
421
|
+
|
|
314
422
|
### Cooldown isolation
|
|
315
423
|
|
|
316
424
|
The pre-existing 3-errors → 5-min cooldown is now split into three
|
package/dist/config.js
CHANGED
|
@@ -53,6 +53,43 @@ const DEFAULT_RERANKER_TOP_N = 5;
|
|
|
53
53
|
// once the query is added) while preserving the top-precision band.
|
|
54
54
|
const DEFAULT_RERANKER_CANDIDATE_POOL_MAX = 20;
|
|
55
55
|
const DEFAULT_RERANKER_MAX_CHARS_PER_DOC = 2000;
|
|
56
|
+
// 3.2.7 — TEST mode defaults. The canned LightRAG context is deliberately
|
|
57
|
+
// > 200 chars so it is not flagged `sparse`, and embeds a distinctive,
|
|
58
|
+
// citable fact (`HX-2026-0042`) so an operator can confirm — from the
|
|
59
|
+
// agent's answer alone — that the injected context actually reached the
|
|
60
|
+
// LLM. `{{query}}` is substituted per-turn (see renderMockResponse) to make
|
|
61
|
+
// it obvious the query travels through the source.
|
|
62
|
+
const DEFAULT_LIGHTRAG_MOCK_RESPONSE = [
|
|
63
|
+
"[Mock LightRAG context — TEST MODE]",
|
|
64
|
+
'Knowledge-graph context assembled for the query "{{query}}":',
|
|
65
|
+
"",
|
|
66
|
+
"Entity: Projet Hélios — pilot knowledge-base integration project.",
|
|
67
|
+
'Relation: Projet Hélios → owned_by → "équipe Plateforme".',
|
|
68
|
+
'Relation: Projet Hélios → status → "active since 2026-02-14".',
|
|
69
|
+
'Entity: Document "guide-deploiement-helios.md" — describes the rollout plan.',
|
|
70
|
+
"Fact: The Hélios reference identifier is HX-2026-0042.",
|
|
71
|
+
"",
|
|
72
|
+
"This is synthetic data injected by the plugin's TEST mode to validate",
|
|
73
|
+
"context injection without a live LightRAG server.",
|
|
74
|
+
].join("\n");
|
|
75
|
+
// Mirrors the shape pgvector would return for the same synthetic project,
|
|
76
|
+
// so the injected `Document Search Results` block looks production-realistic.
|
|
77
|
+
const DEFAULT_PGVECTOR_MOCK_RESULTS = [
|
|
78
|
+
{
|
|
79
|
+
file_name: "guide-deploiement-helios.md",
|
|
80
|
+
score: 0.87,
|
|
81
|
+
text: "Le déploiement du Projet Hélios suit trois phases : préparation, " +
|
|
82
|
+
"bascule, validation. Identifiant de référence : HX-2026-0042.",
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
file_name: "faq-helios.md",
|
|
86
|
+
score: 0.72,
|
|
87
|
+
text: "Q : Qui pilote le Projet Hélios ? R : l'équipe Plateforme, active " +
|
|
88
|
+
"depuis le 2026-02-14.",
|
|
89
|
+
},
|
|
90
|
+
];
|
|
91
|
+
const DEFAULT_MOCK_SCORE = 0.8;
|
|
92
|
+
const DEFAULT_MOCK_COLLECTION = "knowledge_test";
|
|
56
93
|
/**
|
|
57
94
|
* Apply defaults and env substitution to the raw plugin config. A source is
|
|
58
95
|
* enabled when its credentials are present, unless the user explicitly toggles
|
|
@@ -72,20 +109,28 @@ export function resolveConfig(cfg = {}) {
|
|
|
72
109
|
const reranker = (jina.pgvectorReranker ?? {});
|
|
73
110
|
const jinaApiKey = resolveEnv(jina.apiKey ?? "");
|
|
74
111
|
const routerClassifierId = resolveEnv(router.classifierId ?? "");
|
|
112
|
+
const collections = cfg.collections ?? DEFAULT_COLLECTIONS;
|
|
113
|
+
// TEST mode — mocked sources for infra-less environments. When active, a
|
|
114
|
+
// source is "enabled" even without its credentials/URL so the hook still
|
|
115
|
+
// registers; the explicit `pgvectorEnabled`/`lightragEnabled: false`
|
|
116
|
+
// toggles still win (first conjunct) so an operator can mock a single
|
|
117
|
+
// source in isolation.
|
|
118
|
+
const test = (cfg.testMode ?? {});
|
|
119
|
+
const testModeEnabled = test.enabled === true;
|
|
75
120
|
return {
|
|
76
121
|
enabled: cfg.enabled !== false,
|
|
77
122
|
geminiApiKey,
|
|
78
123
|
postgresUrl,
|
|
79
|
-
collections
|
|
124
|
+
collections,
|
|
80
125
|
topK: cfg.topK ?? DEFAULT_TOP_K,
|
|
81
126
|
scoreThreshold: cfg.scoreThreshold ?? DEFAULT_SCORE_THRESHOLD,
|
|
82
127
|
maxInjectChars: cfg.maxInjectChars ?? DEFAULT_MAX_INJECT_CHARS,
|
|
83
|
-
pgvectorEnabled: cfg.pgvectorEnabled !== false && Boolean(geminiApiKey),
|
|
128
|
+
pgvectorEnabled: cfg.pgvectorEnabled !== false && (Boolean(geminiApiKey) || testModeEnabled),
|
|
84
129
|
lightragUrl,
|
|
85
130
|
lightragApiKey,
|
|
86
131
|
lightragQueryMode: cfg.lightragQueryMode ?? DEFAULT_LIGHTRAG_MODE,
|
|
87
132
|
lightragMaxChars: cfg.lightragMaxChars ?? DEFAULT_LIGHTRAG_MAX_CHARS,
|
|
88
|
-
lightragEnabled: cfg.lightragEnabled !== false && Boolean(lightragUrl),
|
|
133
|
+
lightragEnabled: cfg.lightragEnabled !== false && (Boolean(lightragUrl) || testModeEnabled),
|
|
89
134
|
// Jina shared key (used by router and/or reranker)
|
|
90
135
|
jinaApiKey,
|
|
91
136
|
// 3.2.4 — soft RPM budget. 0 disables the monitor entirely.
|
|
@@ -110,12 +155,50 @@ export function resolveConfig(cfg = {}) {
|
|
|
110
155
|
// the corresponding cap (legacy v3.2.3 behavior).
|
|
111
156
|
pgvectorRerankerCandidatePoolMax: clampNonNegInt(reranker.candidatePoolMax ?? DEFAULT_RERANKER_CANDIDATE_POOL_MAX),
|
|
112
157
|
pgvectorRerankerMaxCharsPerDoc: clampNonNegInt(reranker.maxCharsPerDoc ?? DEFAULT_RERANKER_MAX_CHARS_PER_DOC),
|
|
113
|
-
// 3.
|
|
158
|
+
// 3.2.7 — provenance reporting toward chat frontends. Off-list values
|
|
114
159
|
// (typos, future levels) normalize to "off": a misconfiguration must
|
|
115
160
|
// never silently leak content.
|
|
116
161
|
provenanceReport: resolveProvenanceLevel(cfg.provenanceReport),
|
|
162
|
+
// 3.2.7 — TEST mode. Mocks resolve unconditionally (cheap) so the
|
|
163
|
+
// handler can read them without re-deriving defaults; they are only
|
|
164
|
+
// consumed when `testModeEnabled` is true.
|
|
165
|
+
testModeEnabled,
|
|
166
|
+
lightragMockResponse: typeof test.lightragMockResponse === "string"
|
|
167
|
+
? test.lightragMockResponse
|
|
168
|
+
: DEFAULT_LIGHTRAG_MOCK_RESPONSE,
|
|
169
|
+
pgvectorMockResults: toPgvectorMockResults(test.pgvectorMockResults ?? DEFAULT_PGVECTOR_MOCK_RESULTS, collections[0] ?? DEFAULT_MOCK_COLLECTION),
|
|
117
170
|
};
|
|
118
171
|
}
|
|
172
|
+
/**
|
|
173
|
+
* Normalize the operator's ergonomic mock shape into full
|
|
174
|
+
* {@link PgvectorResult} rows: missing fields become `null`, a missing
|
|
175
|
+
* collection falls back to `defaultCollection`, a missing/invalid score
|
|
176
|
+
* clamps to `[0, 1]` (default `0.8`). The list is sorted by descending
|
|
177
|
+
* score so it mirrors the cosine-ranked order the real pgvector path
|
|
178
|
+
* produces in `runPgvectorSource`.
|
|
179
|
+
*/
|
|
180
|
+
function toPgvectorMockResults(mocks, defaultCollection) {
|
|
181
|
+
if (!Array.isArray(mocks))
|
|
182
|
+
return [];
|
|
183
|
+
return mocks
|
|
184
|
+
.map((m) => ({
|
|
185
|
+
collection: typeof m.collection === "string" && m.collection.length > 0
|
|
186
|
+
? m.collection
|
|
187
|
+
: defaultCollection,
|
|
188
|
+
score: clamp01(typeof m.score === "number" ? m.score : DEFAULT_MOCK_SCORE),
|
|
189
|
+
file_name: m.file_name ?? null,
|
|
190
|
+
mime_type: null,
|
|
191
|
+
text: m.text ?? null,
|
|
192
|
+
file_id: null,
|
|
193
|
+
source: null,
|
|
194
|
+
owner: null,
|
|
195
|
+
chunk_index: null,
|
|
196
|
+
total_chunks: null,
|
|
197
|
+
timestamp_start: null,
|
|
198
|
+
timestamp_end: null,
|
|
199
|
+
}))
|
|
200
|
+
.sort((a, b) => b.score - a.score);
|
|
201
|
+
}
|
|
119
202
|
/** Clamp a value to a non-negative integer. Bad input collapses to `0`. */
|
|
120
203
|
function clampNonNegInt(value) {
|
|
121
204
|
if (!Number.isFinite(value))
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,EAAE;AACF,2EAA2E;AAC3E,6DAA6D;AAE7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,13 +2,13 @@ import type { OpenClawPluginDefinition } from "openclaw/plugin-sdk/plugin-entry"
|
|
|
2
2
|
import type { OpenClawPluginApi, PluginLogger } from "openclaw/plugin-sdk/plugin-entry";
|
|
3
3
|
import { type EmitAgentEventFn } from "./provenance.js";
|
|
4
4
|
import type { Route } from "./router/types.js";
|
|
5
|
-
import type { BeforePromptBuildEvent, BeforePromptBuildResult, PgPoolLike, PluginHookAgentContext, PromptMessage, ResolvedKnowledgeConfig } from "./types.js";
|
|
5
|
+
import type { BeforePromptBuildEvent, BeforePromptBuildResult, LightRAGReference, PgPoolLike, PluginHookAgentContext, PromptMessage, ResolvedKnowledgeConfig } from "./types.js";
|
|
6
6
|
export { resolveEnv, resolveConfig } from "./config.js";
|
|
7
7
|
export { embedQuery } from "./embeddings.js";
|
|
8
8
|
export { searchCollection, formatPgvectorResults, rerankPgvectorResults, } from "./pgvector.js";
|
|
9
9
|
export { queryLightRAG, truncateLightRAG, formatLightRAGResults } from "./lightrag.js";
|
|
10
10
|
export { decideRoute } from "./router/index.js";
|
|
11
|
-
export type { BeforePromptBuildEvent, BeforePromptBuildResult, JinaPluginConfig, KnowledgePluginConfig, LightRAGQueryMode, PgPoolLike, PgvectorResult, PgvectorRerankerPluginConfig, PgvectorRow, PluginHookAgentContext, PromptContentPart, PromptMessage, ResolvedKnowledgeConfig, RouterPluginConfig, } from "./types.js";
|
|
11
|
+
export type { BeforePromptBuildEvent, BeforePromptBuildResult, JinaPluginConfig, KnowledgePluginConfig, LightRAGQueryMode, LightRAGQueryResult, LightRAGReference, PgPoolLike, PgvectorMockResult, PgvectorResult, PgvectorRerankerPluginConfig, PgvectorRow, PluginHookAgentContext, PromptContentPart, PromptMessage, ResolvedKnowledgeConfig, RouterPluginConfig, TestModePluginConfig, } from "./types.js";
|
|
12
12
|
interface HookHandlerDeps {
|
|
13
13
|
config: ResolvedKnowledgeConfig;
|
|
14
14
|
pool: PgPoolLike | null;
|
|
@@ -81,6 +81,35 @@ export declare function extractUserQuery(event: BeforePromptBuildEvent): string;
|
|
|
81
81
|
* @internal exported for unit testing and backward compatibility
|
|
82
82
|
*/
|
|
83
83
|
export declare function extractQueryFromMessages(messages: PromptMessage[] | undefined): string;
|
|
84
|
+
/**
|
|
85
|
+
* Substitute the `{{query}}` token (whitespace-tolerant) in a mock template.
|
|
86
|
+
*
|
|
87
|
+
* The replacement is passed as a CALLBACK, not a string, so the query is
|
|
88
|
+
* inserted VERBATIM. A string replacement argument would interpret `$&`,
|
|
89
|
+
* `` $` ``, `$'`, `$$` and `$1`-style sequences — common in code/shell
|
|
90
|
+
* questions — and corrupt the very query this feature is meant to reflect.
|
|
91
|
+
*/
|
|
92
|
+
export declare function renderMockResponse(template: string, query: string): string;
|
|
93
|
+
/**
|
|
94
|
+
* Restrict LightRAG source references to those that actually survived
|
|
95
|
+
* injection, mirroring the pgvector "emit what was injected, not what was
|
|
96
|
+
* retrieved" invariant for the graph path.
|
|
97
|
+
*
|
|
98
|
+
* LightRAG's assembled context embeds source markers (file names /
|
|
99
|
+
* `[Source: …]`) inline. When the context is truncated to `lightragMaxChars`,
|
|
100
|
+
* keeping the FULL reference list would attribute the answer to documents
|
|
101
|
+
* whose content was cut before reaching the LLM. So on truncation we keep
|
|
102
|
+
* only references whose `file_path` still appears in the injected text. When
|
|
103
|
+
* NO truncation occurred (`injectedText` covers the whole context) every
|
|
104
|
+
* reference was injected and all are kept regardless of marker format.
|
|
105
|
+
*
|
|
106
|
+
* Best-effort by construction: if a LightRAG build does not embed file paths
|
|
107
|
+
* in the context, truncation drops references it cannot confirm — UNDER-
|
|
108
|
+
* attributing (safe) rather than over-attributing.
|
|
109
|
+
*
|
|
110
|
+
* @internal exported for unit testing
|
|
111
|
+
*/
|
|
112
|
+
export declare function referencesInInjectedContext(references: LightRAGReference[], injectedText: string, originalLength: number): LightRAGReference[];
|
|
84
113
|
export declare function registerKnowledgePlugin(api: OpenClawPluginApi): void;
|
|
85
114
|
declare const knowledgePluginEntry: OpenClawPluginDefinition;
|
|
86
115
|
export default knowledgePluginEntry;
|
package/dist/index.js
CHANGED
|
@@ -118,13 +118,23 @@ export function createBeforePromptBuildHandler(deps) {
|
|
|
118
118
|
// -----------------------------------------------------------------
|
|
119
119
|
try {
|
|
120
120
|
const tasks = [];
|
|
121
|
-
if (shouldUsePgvector(effectiveRoute) &&
|
|
122
|
-
config.
|
|
123
|
-
|
|
124
|
-
|
|
121
|
+
if (shouldUsePgvector(effectiveRoute) && config.pgvectorEnabled) {
|
|
122
|
+
if (config.testModeEnabled) {
|
|
123
|
+
// TEST mode: canned hits, no embedding call, no pg pool.
|
|
124
|
+
tasks.push(runPgvectorMock(config));
|
|
125
|
+
}
|
|
126
|
+
else if (pool) {
|
|
127
|
+
tasks.push(runPgvectorSource(pool, query, config, cooldowns.pgvector_reranker, logger, rpmMonitor));
|
|
128
|
+
}
|
|
125
129
|
}
|
|
126
130
|
if (shouldUseLightRAG(effectiveRoute) && config.lightragEnabled) {
|
|
127
|
-
|
|
131
|
+
if (config.testModeEnabled) {
|
|
132
|
+
// TEST mode: canned context, no LightRAG server call.
|
|
133
|
+
tasks.push(runLightRAGMock(query, config));
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
tasks.push(runLightRAGSource(query, config));
|
|
137
|
+
}
|
|
128
138
|
}
|
|
129
139
|
if (tasks.length === 0)
|
|
130
140
|
return undefined;
|
|
@@ -578,8 +588,106 @@ async function runPgvectorSource(pool, query, config, rerankerCooldown, logger,
|
|
|
578
588
|
}
|
|
579
589
|
async function runLightRAGSource(query, config) {
|
|
580
590
|
const startedAt = Date.now();
|
|
581
|
-
const context = await queryLightRAG(config.lightragUrl, config.lightragApiKey, query, config.lightragQueryMode);
|
|
582
|
-
return {
|
|
591
|
+
const { context, references } = await queryLightRAG(config.lightragUrl, config.lightragApiKey, query, config.lightragQueryMode);
|
|
592
|
+
return {
|
|
593
|
+
source: "lightrag",
|
|
594
|
+
data: context,
|
|
595
|
+
references,
|
|
596
|
+
durationMs: Date.now() - startedAt,
|
|
597
|
+
};
|
|
598
|
+
}
|
|
599
|
+
// ---------------------------------------------------------------------------
|
|
600
|
+
// TEST mode — mocked sources (no network, no DB).
|
|
601
|
+
//
|
|
602
|
+
// These mirror the real `run*Source` functions EXACTLY: same return shape,
|
|
603
|
+
// same downstream path (renderSection → events → provenance →
|
|
604
|
+
// appendSystemContext). The only difference is the data origin. This is the
|
|
605
|
+
// whole point: the agent receives genuinely-injected context, so a downstream
|
|
606
|
+
// LLM trace (e.g. LiteLLM → Langfuse) reflects the real impact, while the
|
|
607
|
+
// plugin makes ZERO calls to a LightRAG server or PostgreSQL.
|
|
608
|
+
// ---------------------------------------------------------------------------
|
|
609
|
+
/**
|
|
610
|
+
* Substitute the `{{query}}` token (whitespace-tolerant) in a mock template.
|
|
611
|
+
*
|
|
612
|
+
* The replacement is passed as a CALLBACK, not a string, so the query is
|
|
613
|
+
* inserted VERBATIM. A string replacement argument would interpret `$&`,
|
|
614
|
+
* `` $` ``, `$'`, `$$` and `$1`-style sequences — common in code/shell
|
|
615
|
+
* questions — and corrupt the very query this feature is meant to reflect.
|
|
616
|
+
*/
|
|
617
|
+
export function renderMockResponse(template, query) {
|
|
618
|
+
return template.replace(/\{\{\s*query\s*\}\}/g, () => query);
|
|
619
|
+
}
|
|
620
|
+
async function runLightRAGMock(query, config) {
|
|
621
|
+
const startedAt = Date.now();
|
|
622
|
+
const data = renderMockResponse(config.lightragMockResponse, query);
|
|
623
|
+
return {
|
|
624
|
+
source: "lightrag",
|
|
625
|
+
data,
|
|
626
|
+
// No synthetic source references in test mode — provenance only emits
|
|
627
|
+
// through a live gateway anyway. The blob still injects normally.
|
|
628
|
+
references: [],
|
|
629
|
+
durationMs: Date.now() - startedAt,
|
|
630
|
+
mock: true,
|
|
631
|
+
};
|
|
632
|
+
}
|
|
633
|
+
/**
|
|
634
|
+
* Restrict LightRAG source references to those that actually survived
|
|
635
|
+
* injection, mirroring the pgvector "emit what was injected, not what was
|
|
636
|
+
* retrieved" invariant for the graph path.
|
|
637
|
+
*
|
|
638
|
+
* LightRAG's assembled context embeds source markers (file names /
|
|
639
|
+
* `[Source: …]`) inline. When the context is truncated to `lightragMaxChars`,
|
|
640
|
+
* keeping the FULL reference list would attribute the answer to documents
|
|
641
|
+
* whose content was cut before reaching the LLM. So on truncation we keep
|
|
642
|
+
* only references whose `file_path` still appears in the injected text. When
|
|
643
|
+
* NO truncation occurred (`injectedText` covers the whole context) every
|
|
644
|
+
* reference was injected and all are kept regardless of marker format.
|
|
645
|
+
*
|
|
646
|
+
* Best-effort by construction: if a LightRAG build does not embed file paths
|
|
647
|
+
* in the context, truncation drops references it cannot confirm — UNDER-
|
|
648
|
+
* attributing (safe) rather than over-attributing.
|
|
649
|
+
*
|
|
650
|
+
* @internal exported for unit testing
|
|
651
|
+
*/
|
|
652
|
+
export function referencesInInjectedContext(references, injectedText, originalLength) {
|
|
653
|
+
// `injectedText` is the post-truncation body; when it covers the whole
|
|
654
|
+
// (trimmed) context there was no truncation, so everything was injected.
|
|
655
|
+
if (injectedText.length >= originalLength)
|
|
656
|
+
return references;
|
|
657
|
+
return references.filter((ref) => referenceMarkerPresent(ref.file_path, injectedText));
|
|
658
|
+
}
|
|
659
|
+
// Characters that can appear inside a file path/name. A reference is only
|
|
660
|
+
// considered "present" when its path is bounded by something OUTSIDE this set
|
|
661
|
+
// (or a string edge) on both sides — so a bare-substring match like
|
|
662
|
+
// `plan.md` inside `old-plan.md` (or `a/plan.md`) does NOT over-attribute.
|
|
663
|
+
const PATH_CHARS = "A-Za-z0-9._/-";
|
|
664
|
+
/**
|
|
665
|
+
* True when `filePath` appears in `injectedText` as a whole token — i.e.
|
|
666
|
+
* delimited by a non-path character (or string edge) on each side. Linear
|
|
667
|
+
* time (literal needle + single-char boundary classes, no nested
|
|
668
|
+
* quantifiers), so no ReDoS exposure.
|
|
669
|
+
*/
|
|
670
|
+
function referenceMarkerPresent(filePath, injectedText) {
|
|
671
|
+
if (filePath.length === 0)
|
|
672
|
+
return false;
|
|
673
|
+
const escaped = filePath.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
674
|
+
const re = new RegExp(`(?:^|[^${PATH_CHARS}])${escaped}(?:[^${PATH_CHARS}]|$)`);
|
|
675
|
+
return re.test(injectedText);
|
|
676
|
+
}
|
|
677
|
+
async function runPgvectorMock(config) {
|
|
678
|
+
const startedAt = Date.now();
|
|
679
|
+
// `pgvectorMockResults` is already normalized and score-sorted by
|
|
680
|
+
// resolveConfig, so it needs no embedding pass and no pool.
|
|
681
|
+
const data = config.pgvectorMockResults;
|
|
682
|
+
return {
|
|
683
|
+
source: "pgvector",
|
|
684
|
+
data,
|
|
685
|
+
rawCount: data.length,
|
|
686
|
+
reranked: false,
|
|
687
|
+
durationMs: Date.now() - startedAt,
|
|
688
|
+
errored: false,
|
|
689
|
+
mock: true,
|
|
690
|
+
};
|
|
583
691
|
}
|
|
584
692
|
function renderSection(result, config, logger) {
|
|
585
693
|
if (result.source === "pgvector") {
|
|
@@ -609,6 +717,8 @@ function renderSection(result, config, logger) {
|
|
|
609
717
|
topScore: result.data[0]?.score ?? null,
|
|
610
718
|
durationMs: result.durationMs,
|
|
611
719
|
errored: result.errored,
|
|
720
|
+
// Only present in TEST mode — production event lines are unchanged.
|
|
721
|
+
...(result.mock ? { mock: true } : {}),
|
|
612
722
|
});
|
|
613
723
|
if (!formatted) {
|
|
614
724
|
logger.info(`openclaw-knowledge: pgvector — no result above threshold (rawCount=${result.rawCount})`);
|
|
@@ -642,6 +752,11 @@ function renderSection(result, config, logger) {
|
|
|
642
752
|
truncatedChars: truncatedLen,
|
|
643
753
|
durationMs: result.durationMs,
|
|
644
754
|
sparse: truncatedLen < LIGHTRAG_SPARSE_THRESHOLD_CHARS,
|
|
755
|
+
// Number of source references LightRAG attributed the context to.
|
|
756
|
+
// 0 on older servers (no `references` field) or in TEST mode.
|
|
757
|
+
referenceCount: result.references.length,
|
|
758
|
+
// Only present in TEST mode — production event lines are unchanged.
|
|
759
|
+
...(result.mock ? { mock: true } : {}),
|
|
645
760
|
});
|
|
646
761
|
if (!formatted) {
|
|
647
762
|
logger.info(`openclaw-knowledge: LightRAG — empty response (${originalLen} chars)`);
|
|
@@ -656,7 +771,11 @@ function renderSection(result, config, logger) {
|
|
|
656
771
|
// The `formatted.truncated` body is still used for the `full`-level
|
|
657
772
|
// excerpt because the header is structural noise (no semantic
|
|
658
773
|
// content worth surfacing to the chat frontend).
|
|
659
|
-
provenance: buildLightRAGProvenance(formatted.truncated, config.lightragQueryMode, config.provenanceReport, text.length
|
|
774
|
+
provenance: buildLightRAGProvenance(formatted.truncated, config.lightragQueryMode, config.provenanceReport, text.length,
|
|
775
|
+
// Only references whose content actually survived truncation — keeps
|
|
776
|
+
// provenance attribution to "what was injected", not what was
|
|
777
|
+
// retrieved (mirrors the pgvector slice-to-injectedCount rule).
|
|
778
|
+
referencesInInjectedContext(result.references, formatted.truncated, formatted.originalLength)),
|
|
660
779
|
};
|
|
661
780
|
}
|
|
662
781
|
return null;
|
|
@@ -718,11 +837,21 @@ export function registerKnowledgePlugin(api) {
|
|
|
718
837
|
`Recommended: topK ≥ ${config.pgvectorRerankerTopN * 2} for the ` +
|
|
719
838
|
`reranker to meaningfully change ordering.`);
|
|
720
839
|
}
|
|
721
|
-
//
|
|
722
|
-
//
|
|
723
|
-
|
|
840
|
+
// TEST mode safety: loud, unmissable warning. A mis-set flag feeds an agent
|
|
841
|
+
// canned facts it will treat as real, so this must never go unnoticed.
|
|
842
|
+
if (config.testModeEnabled) {
|
|
843
|
+
api.logger.warn("openclaw-knowledge: ⚠️ TEST MODE ACTIVE — sources are MOCKED. " +
|
|
844
|
+
"LightRAG returns canned context and pgvector returns canned results; " +
|
|
845
|
+
"NO connection is made to a LightRAG server or PostgreSQL. The mocked " +
|
|
846
|
+
"context IS injected into the agent prompt (so its impact is real and " +
|
|
847
|
+
"observable downstream). NEVER enable testMode in production.");
|
|
848
|
+
}
|
|
849
|
+
// Only instantiate the pg pool when pgvector is actually in play AND we are
|
|
850
|
+
// not in test mode (mocks need no DB). Booting a pool with no valid
|
|
851
|
+
// connection string would keep the plugin disabled anyway and leak sockets
|
|
852
|
+
// on hot-reload.
|
|
724
853
|
let pool = null;
|
|
725
|
-
if (config.pgvectorEnabled) {
|
|
854
|
+
if (config.pgvectorEnabled && !config.testModeEnabled) {
|
|
726
855
|
const realPool = new pg.Pool({
|
|
727
856
|
connectionString: config.postgresUrl,
|
|
728
857
|
max: 3,
|
|
@@ -733,15 +862,16 @@ export function registerKnowledgePlugin(api) {
|
|
|
733
862
|
});
|
|
734
863
|
pool = realPool;
|
|
735
864
|
}
|
|
865
|
+
const mockNote = config.testModeEnabled ? " [MOCK]" : "";
|
|
736
866
|
const sources = [];
|
|
737
867
|
if (config.pgvectorEnabled) {
|
|
738
868
|
const rerankNote = config.pgvectorRerankerEnabled
|
|
739
869
|
? ` + reranker(${config.pgvectorRerankerModel})`
|
|
740
870
|
: "";
|
|
741
|
-
sources.push(`pgvector (${config.collections.join(", ")})${rerankNote}`);
|
|
871
|
+
sources.push(`pgvector (${config.collections.join(", ")})${rerankNote}${mockNote}`);
|
|
742
872
|
}
|
|
743
873
|
if (config.lightragEnabled) {
|
|
744
|
-
sources.push(`LightRAG (${config.lightragQueryMode})`);
|
|
874
|
+
sources.push(`LightRAG (${config.lightragQueryMode})${mockNote}`);
|
|
745
875
|
}
|
|
746
876
|
const routerNote = config.routerEnabled
|
|
747
877
|
? ` | router=${config.routerMode}${config.routerClassifierId ? "/few-shot" : "/zero-shot"}`
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lightrag.d.ts
CHANGED
|
@@ -1,4 +1,16 @@
|
|
|
1
|
-
import type { LightRAGQueryMode } from "./types.js";
|
|
1
|
+
import type { LightRAGQueryMode, LightRAGQueryResult, LightRAGReference } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Parse the `references` field of a LightRAG response into a clean list.
|
|
4
|
+
*
|
|
5
|
+
* Mirrors the production gold-eval extractor: keep only dict entries with a
|
|
6
|
+
* non-empty string `file_path`; anything malformed is silently dropped (the
|
|
7
|
+
* references are a best-effort enrichment, never a hard dependency). Returns
|
|
8
|
+
* `[]` for older servers that omit the field entirely, which preserves the
|
|
9
|
+
* pre-3.2.8 behavior end-to-end.
|
|
10
|
+
*
|
|
11
|
+
* @internal exported for unit testing
|
|
12
|
+
*/
|
|
13
|
+
export declare function parseLightRAGReferences(raw: unknown): LightRAGReference[];
|
|
2
14
|
/**
|
|
3
15
|
* Query a LightRAG server for context relevant to `query`.
|
|
4
16
|
*
|
|
@@ -8,10 +20,14 @@ import type { LightRAGQueryMode } from "./types.js";
|
|
|
8
20
|
* - `global` — community summaries
|
|
9
21
|
* - `hybrid` — local + global (recommended default)
|
|
10
22
|
*
|
|
23
|
+
* Returns the assembled `context` plus the structured source `references`
|
|
24
|
+
* (empty on servers that don't emit them). The references enable provenance
|
|
25
|
+
* source-attribution; the caller decides whether/how to surface them.
|
|
26
|
+
*
|
|
11
27
|
* @throws Error on any non-OK HTTP response, with the first 200 chars of the
|
|
12
28
|
* error body for debugging.
|
|
13
29
|
*/
|
|
14
|
-
export declare function queryLightRAG(url: string, apiKey: string, query: string, mode?: LightRAGQueryMode): Promise<
|
|
30
|
+
export declare function queryLightRAG(url: string, apiKey: string, query: string, mode?: LightRAGQueryMode): Promise<LightRAGQueryResult>;
|
|
15
31
|
/**
|
|
16
32
|
* Truncate text to `maxChars` without cutting mid-sentence when possible.
|
|
17
33
|
* Falls back to a raw character cut if no sentence boundary is found in the
|
package/dist/lightrag.js
CHANGED
|
@@ -4,6 +4,36 @@
|
|
|
4
4
|
// call its `/query` endpoint with `only_need_context=true` so it returns the
|
|
5
5
|
// assembled context text WITHOUT running its own LLM synthesis — we only need
|
|
6
6
|
// the raw context to feed back into OpenClaw's agent.
|
|
7
|
+
/**
|
|
8
|
+
* Parse the `references` field of a LightRAG response into a clean list.
|
|
9
|
+
*
|
|
10
|
+
* Mirrors the production gold-eval extractor: keep only dict entries with a
|
|
11
|
+
* non-empty string `file_path`; anything malformed is silently dropped (the
|
|
12
|
+
* references are a best-effort enrichment, never a hard dependency). Returns
|
|
13
|
+
* `[]` for older servers that omit the field entirely, which preserves the
|
|
14
|
+
* pre-3.2.8 behavior end-to-end.
|
|
15
|
+
*
|
|
16
|
+
* @internal exported for unit testing
|
|
17
|
+
*/
|
|
18
|
+
export function parseLightRAGReferences(raw) {
|
|
19
|
+
if (!Array.isArray(raw))
|
|
20
|
+
return [];
|
|
21
|
+
const out = [];
|
|
22
|
+
for (const entry of raw) {
|
|
23
|
+
if (!entry || typeof entry !== "object")
|
|
24
|
+
continue;
|
|
25
|
+
const rec = entry;
|
|
26
|
+
const fp = rec.file_path;
|
|
27
|
+
if (typeof fp !== "string" || fp.length === 0)
|
|
28
|
+
continue;
|
|
29
|
+
const ref = { file_path: fp };
|
|
30
|
+
if (typeof rec.reference_id === "string" && rec.reference_id.length > 0) {
|
|
31
|
+
ref.reference_id = rec.reference_id;
|
|
32
|
+
}
|
|
33
|
+
out.push(ref);
|
|
34
|
+
}
|
|
35
|
+
return out;
|
|
36
|
+
}
|
|
7
37
|
/**
|
|
8
38
|
* Query a LightRAG server for context relevant to `query`.
|
|
9
39
|
*
|
|
@@ -13,6 +43,10 @@
|
|
|
13
43
|
* - `global` — community summaries
|
|
14
44
|
* - `hybrid` — local + global (recommended default)
|
|
15
45
|
*
|
|
46
|
+
* Returns the assembled `context` plus the structured source `references`
|
|
47
|
+
* (empty on servers that don't emit them). The references enable provenance
|
|
48
|
+
* source-attribution; the caller decides whether/how to surface them.
|
|
49
|
+
*
|
|
16
50
|
* @throws Error on any non-OK HTTP response, with the first 200 chars of the
|
|
17
51
|
* error body for debugging.
|
|
18
52
|
*/
|
|
@@ -37,7 +71,10 @@ export async function queryLightRAG(url, apiKey, query, mode = "hybrid") {
|
|
|
37
71
|
throw new Error(`LightRAG query failed (${resp.status}): ${body.slice(0, 200)}`);
|
|
38
72
|
}
|
|
39
73
|
const data = (await resp.json());
|
|
40
|
-
return
|
|
74
|
+
return {
|
|
75
|
+
context: data.response ?? data.context ?? "",
|
|
76
|
+
references: parseLightRAGReferences(data.references),
|
|
77
|
+
};
|
|
41
78
|
}
|
|
42
79
|
/**
|
|
43
80
|
* Truncate text to `maxChars` without cutting mid-sentence when possible.
|
package/dist/lightrag.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lightrag.js","sourceRoot":"","sources":["../src/lightrag.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,EAAE;AACF,2EAA2E;AAC3E,6EAA6E;AAC7E,8EAA8E;AAC9E,sDAAsD;
|
|
1
|
+
{"version":3,"file":"lightrag.js","sourceRoot":"","sources":["../src/lightrag.ts"],"names":[],"mappings":"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"}
|
package/dist/provenance.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { PluginLogger } from "openclaw/plugin-sdk/plugin-entry";
|
|
2
|
-
import type { PgvectorResult } from "./types.js";
|
|
2
|
+
import type { LightRAGReference, PgvectorResult } from "./types.js";
|
|
3
3
|
export type ProvenanceReportLevel = "off" | "metadata" | "full";
|
|
4
4
|
export declare const PROVENANCE_REPORT_LEVELS: readonly ProvenanceReportLevel[];
|
|
5
5
|
/** Gateway-scoped stream this plugin emits on (see contract §2). */
|
|
@@ -80,8 +80,22 @@ export declare function buildPgvectorProvenance(data: PgvectorResult[], collecti
|
|
|
80
80
|
* (codex pass #36 P3). Negative values fall back to
|
|
81
81
|
* `injectedText.length` to keep the report
|
|
82
82
|
* well-formed even on caller mistakes.
|
|
83
|
+
* @param references source documents LightRAG attributed this context to
|
|
84
|
+
* (since 3.2.8). Surfaced as metadata-only items
|
|
85
|
+
* (`file_name` = path) so the chat frontend can show
|
|
86
|
+
* WHICH sources fed the answer. CRITICAL: a reference's
|
|
87
|
+
* `content` is the RETRIEVED text, NOT the injected
|
|
88
|
+
* text — it is deliberately never copied to `item.text`,
|
|
89
|
+
* because the injected blob is truncated to
|
|
90
|
+
* `lightragMaxChars` and a reference may have been
|
|
91
|
+
* truncated out. Mapping content→text would re-introduce
|
|
92
|
+
* the exact "report what was retrieved, not injected"
|
|
93
|
+
* leak fixed for pgvector. The ONLY item carrying
|
|
94
|
+
* injected text remains the single `lightrag-context`
|
|
95
|
+
* blob item below. The empty-context guard still wins:
|
|
96
|
+
* no injected text → no report, even with references.
|
|
83
97
|
*/
|
|
84
|
-
export declare function buildLightRAGProvenance(injectedText: string, mode: string, level: ProvenanceReportLevel, injectedChars?: number): ProvenanceReportV1 | null;
|
|
98
|
+
export declare function buildLightRAGProvenance(injectedText: string, mode: string, level: ProvenanceReportLevel, injectedChars?: number, references?: LightRAGReference[]): ProvenanceReportV1 | null;
|
|
85
99
|
/**
|
|
86
100
|
* Stable categories logged when emission fails. Operators triage by code;
|
|
87
101
|
* the underlying gateway reason / Error message is intentionally NEVER
|
package/dist/provenance.js
CHANGED
|
@@ -99,13 +99,46 @@ export function buildPgvectorProvenance(data, collections, level, injectedChars)
|
|
|
99
99
|
* (codex pass #36 P3). Negative values fall back to
|
|
100
100
|
* `injectedText.length` to keep the report
|
|
101
101
|
* well-formed even on caller mistakes.
|
|
102
|
+
* @param references source documents LightRAG attributed this context to
|
|
103
|
+
* (since 3.2.8). Surfaced as metadata-only items
|
|
104
|
+
* (`file_name` = path) so the chat frontend can show
|
|
105
|
+
* WHICH sources fed the answer. CRITICAL: a reference's
|
|
106
|
+
* `content` is the RETRIEVED text, NOT the injected
|
|
107
|
+
* text — it is deliberately never copied to `item.text`,
|
|
108
|
+
* because the injected blob is truncated to
|
|
109
|
+
* `lightragMaxChars` and a reference may have been
|
|
110
|
+
* truncated out. Mapping content→text would re-introduce
|
|
111
|
+
* the exact "report what was retrieved, not injected"
|
|
112
|
+
* leak fixed for pgvector. The ONLY item carrying
|
|
113
|
+
* injected text remains the single `lightrag-context`
|
|
114
|
+
* blob item below. The empty-context guard still wins:
|
|
115
|
+
* no injected text → no report, even with references.
|
|
102
116
|
*/
|
|
103
|
-
export function buildLightRAGProvenance(injectedText, mode, level, injectedChars) {
|
|
117
|
+
export function buildLightRAGProvenance(injectedText, mode, level, injectedChars, references = []) {
|
|
104
118
|
if (level === "off" || injectedText.length === 0)
|
|
105
119
|
return null;
|
|
106
|
-
|
|
120
|
+
// Source-attribution items: one per UNIQUE file_path, order preserved
|
|
121
|
+
// (LightRAG returns them ranked). Reserve one slot for the context blob
|
|
122
|
+
// item so it is never dropped by the cap. NEVER set `text` here.
|
|
123
|
+
const refItems = [];
|
|
124
|
+
const seen = new Set();
|
|
125
|
+
for (const ref of references) {
|
|
126
|
+
if (refItems.length >= PROVENANCE_MAX_ITEMS - 1)
|
|
127
|
+
break;
|
|
128
|
+
if (seen.has(ref.file_path))
|
|
129
|
+
continue;
|
|
130
|
+
seen.add(ref.file_path);
|
|
131
|
+
// Document items are identified by `file_name` per PROVENANCE_CONTRACT §3
|
|
132
|
+
// (only memory items use `id`). LightRAG's `reference_id` is a per-query
|
|
133
|
+
// ordinal ("1", "2", …) — unstable and collision-prone as an item key —
|
|
134
|
+
// so it is intentionally NOT surfaced here. `file_path` is the key.
|
|
135
|
+
refItems.push({ file_name: ref.file_path, type: mode });
|
|
136
|
+
}
|
|
137
|
+
// The single blob item is the ONLY carrier of injected (post-truncation)
|
|
138
|
+
// text, gated on `full` exactly as before.
|
|
139
|
+
const contextItem = { id: "lightrag-context", type: mode };
|
|
107
140
|
if (level === "full") {
|
|
108
|
-
|
|
141
|
+
contextItem.text = injectedText.slice(0, PROVENANCE_EXCERPT_MAX_CHARS);
|
|
109
142
|
}
|
|
110
143
|
const reportedChars = typeof injectedChars === "number" && injectedChars >= 0
|
|
111
144
|
? injectedChars
|
|
@@ -116,7 +149,7 @@ export function buildLightRAGProvenance(injectedText, mode, level, injectedChars
|
|
|
116
149
|
kind: "documents",
|
|
117
150
|
injected: { chars: reportedChars, position: "system_append" },
|
|
118
151
|
retrieval: { route: "lightrag", lightrag: { mode } },
|
|
119
|
-
items: [
|
|
152
|
+
items: [...refItems, contextItem],
|
|
120
153
|
};
|
|
121
154
|
}
|
|
122
155
|
/**
|
package/dist/provenance.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provenance.js","sourceRoot":"","sources":["../src/provenance.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,0EAA0E;AAC1E,yEAAyE;AACzE,EAAE;AACF,oEAAoE;AACpE,iEAAiE;AACjE,6EAA6E;AAC7E,kEAAkE;AAClE,wEAAwE;AACxE,uDAAuD;AACvD,sEAAsE;AACtE,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,iDAAiD;AACjD,gDAAgD;AAChD,wEAAwE;AACxE,oDAAoD;AACpD,sEAAsE;AAOtE,MAAM,CAAC,MAAM,wBAAwB,GAAqC;IACxE,KAAK;IACL,UAAU;IACV,MAAM;CACP,CAAC;AAEF,oEAAoE;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAG,+BAA+B,CAAC;AAEjE,mEAAmE;AACnE,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,CAAC;AAElD,gEAAgE;AAChE,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAiCvC,4EAA4E;AAC5E,MAAM,UAAU,sBAAsB,CAAC,GAAY;IACjD,OAAO,wBAAwB,CAAC,QAAQ,CAAC,GAA4B,CAAC;QACpE,CAAC,CAAE,GAA6B;QAChC,CAAC,CAAC,KAAK,CAAC;AACZ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAY;IAChD,MAAM,SAAS,GAAI,GAAoC,EAAE,cAAc,CAAC;IACxE,IAAI,OAAO,SAAS,KAAK,UAAU;QAAE,OAAO,SAAS,CAAC;IACtD,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAqB,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAAsB,EACtB,WAAqB,EACrB,KAA4B,EAC5B,aAAqB;IAErB,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtD,MAAM,KAAK,GAAuB,IAAI;SACnC,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC;SAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,IAAI,GAAqB,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QAC5E,IAAI,CAAC,CAAC,SAAS;YAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;aACzC,IAAI,CAAC,CAAC,OAAO;YAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC;QACxC,IAAI,KAAK,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,4BAA4B,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IACL,OAAO;QACL,CAAC,EAAE,CAAC;QACJ,MAAM,EAAE,WAAW;QACnB,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE;QAC7D,SAAS,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE;QAC7C,KAAK;KACN,CAAC;AACJ,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"provenance.js","sourceRoot":"","sources":["../src/provenance.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,0EAA0E;AAC1E,yEAAyE;AACzE,EAAE;AACF,oEAAoE;AACpE,iEAAiE;AACjE,6EAA6E;AAC7E,kEAAkE;AAClE,wEAAwE;AACxE,uDAAuD;AACvD,sEAAsE;AACtE,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,iDAAiD;AACjD,gDAAgD;AAChD,wEAAwE;AACxE,oDAAoD;AACpD,sEAAsE;AAOtE,MAAM,CAAC,MAAM,wBAAwB,GAAqC;IACxE,KAAK;IACL,UAAU;IACV,MAAM;CACP,CAAC;AAEF,oEAAoE;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAG,+BAA+B,CAAC;AAEjE,mEAAmE;AACnE,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,CAAC;AAElD,gEAAgE;AAChE,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAiCvC,4EAA4E;AAC5E,MAAM,UAAU,sBAAsB,CAAC,GAAY;IACjD,OAAO,wBAAwB,CAAC,QAAQ,CAAC,GAA4B,CAAC;QACpE,CAAC,CAAE,GAA6B;QAChC,CAAC,CAAC,KAAK,CAAC;AACZ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAY;IAChD,MAAM,SAAS,GAAI,GAAoC,EAAE,cAAc,CAAC;IACxE,IAAI,OAAO,SAAS,KAAK,UAAU;QAAE,OAAO,SAAS,CAAC;IACtD,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAqB,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAAsB,EACtB,WAAqB,EACrB,KAA4B,EAC5B,aAAqB;IAErB,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtD,MAAM,KAAK,GAAuB,IAAI;SACnC,KAAK,CAAC,CAAC,EAAE,oBAAoB,CAAC;SAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,IAAI,GAAqB,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QAC5E,IAAI,CAAC,CAAC,SAAS;YAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;aACzC,IAAI,CAAC,CAAC,OAAO;YAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC;QACxC,IAAI,KAAK,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,4BAA4B,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IACL,OAAO;QACL,CAAC,EAAE,CAAC;QACJ,MAAM,EAAE,WAAW;QACnB,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE;QAC7D,SAAS,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE;QAC7C,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,UAAU,uBAAuB,CACrC,YAAoB,EACpB,IAAY,EACZ,KAA4B,EAC5B,aAAsB,EACtB,aAAkC,EAAE;IAEpC,IAAI,KAAK,KAAK,KAAK,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE9D,sEAAsE;IACtE,wEAAwE;IACxE,iEAAiE;IACjE,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,QAAQ,CAAC,MAAM,IAAI,oBAAoB,GAAG,CAAC;YAAE,MAAM;QACvD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,SAAS;QACtC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxB,0EAA0E;QAC1E,yEAAyE;QACzE,wEAAwE;QACxE,oEAAoE;QACpE,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,yEAAyE;IACzE,2CAA2C;IAC3C,MAAM,WAAW,GAAqB,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC7E,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,WAAW,CAAC,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,4BAA4B,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,aAAa,GACjB,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,IAAI,CAAC;QACrD,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC;IAC1B,OAAO;QACL,CAAC,EAAE,CAAC;QACJ,MAAM,EAAE,WAAW;QACnB,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE;QAC7D,SAAS,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE;QACpD,KAAK,EAAE,CAAC,GAAG,QAAQ,EAAE,WAAW,CAAC;KAClC,CAAC;AACJ,CAAC;AAqBD;;;;;;GAMG;AACH,SAAS,uBAAuB,CAAC,MAA0B;IACzD,IAAI,CAAC,MAAM;QAAE,OAAO,UAAU,CAAC;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACnC,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,mBAAmB,CAAC;IAC7D,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACzD,OAAO,qBAAqB,CAAC;IAC/B,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,gBAAgB,CAAC;IACtD,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7D,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,cAAc,CAAC;IAC7E,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAAkC,EAClC,MAAoB,EACpB,KAAyB,EACzB,UAA8B,EAC9B,OAAsC;IAEtC,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,4CAA4C;IAChE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,KAAK,IAAI;YAAE,SAAS;QAC9B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC;gBACf,KAAK;gBACL,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrC,MAAM,EAAE,iBAAiB;gBACzB,IAAI,EAAE,MAAM;aACb,CAAuD,CAAC;YACzD,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACjD,MAAM,CAAC,IAAI,CAAC,oDAAoD,IAAI,EAAE,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,uEAAuE;YACvE,sEAAsE;YACtE,MAAM,IAAI,GACR,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAQ,GAAa,CAAC,IAAI,KAAK,QAAQ;gBACvE,CAAC,CAAE,GAAa,CAAC,IAAI;gBACrB,CAAC,CAAC,OAAO,CAAC;YACd,MAAM,CAAC,IAAI,CAAC,sDAAsD,IAAI,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/tracing/events.d.ts
CHANGED
|
@@ -42,6 +42,14 @@ export interface PgvectorEvent {
|
|
|
42
42
|
* @since 3.2.3
|
|
43
43
|
*/
|
|
44
44
|
errored: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* `true` when these results came from TEST mode (canned data, no DB).
|
|
47
|
+
* Omitted entirely in normal operation so production event lines are
|
|
48
|
+
* byte-for-byte unchanged. Lets dashboards exclude synthetic traffic.
|
|
49
|
+
*
|
|
50
|
+
* @since 3.2.7
|
|
51
|
+
*/
|
|
52
|
+
mock?: boolean;
|
|
45
53
|
}
|
|
46
54
|
export interface LightRAGEvent {
|
|
47
55
|
type: "lightrag";
|
|
@@ -58,6 +66,17 @@ export interface LightRAGEvent {
|
|
|
58
66
|
* @since 3.2.3
|
|
59
67
|
*/
|
|
60
68
|
sparse: boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Number of source references LightRAG attributed the context to. `0` on
|
|
71
|
+
* servers that don't emit a `references` field or in TEST mode. Lets
|
|
72
|
+
* dashboards track source-attribution coverage. @since 3.2.8
|
|
73
|
+
*/
|
|
74
|
+
referenceCount?: number;
|
|
75
|
+
/**
|
|
76
|
+
* `true` when this context came from TEST mode (canned data, no live
|
|
77
|
+
* LightRAG server). Omitted in normal operation. @since 3.2.7
|
|
78
|
+
*/
|
|
79
|
+
mock?: boolean;
|
|
61
80
|
}
|
|
62
81
|
/**
|
|
63
82
|
* Threshold under which a LightRAG response is flagged `sparse`. Picked
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/tracing/events.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,EAAE;AACF,2EAA2E;AAC3E,yEAAyE;AACzE,yDAAyD;AACzD,EAAE;AACF,wEAAwE;AACxE,+DAA+D;AAC/D,wEAAwE;AACxE,+BAA+B;AAC/B,EAAE;AACF,sEAAsE;AACtE,qEAAqE;AACrE,gEAAgE;AAChE,wEAAwE;AACxE,iCAAiC;AACjC,EAAE;AACF,oEAAoE;AACpE,uEAAuE;AACvE,qEAAqE;AACrE,sEAAsE;AACtE,uEAAuE;AACvE,8DAA8D;AAC9D,EAAE;AACF,2EAA2E;AAC3E,0EAA0E;AAC1E,mBAAmB;AAcnB;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/tracing/events.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,EAAE;AACF,2EAA2E;AAC3E,yEAAyE;AACzE,yDAAyD;AACzD,EAAE;AACF,wEAAwE;AACxE,+DAA+D;AAC/D,wEAAwE;AACxE,+BAA+B;AAC/B,EAAE;AACF,sEAAsE;AACtE,qEAAqE;AACrE,gEAAgE;AAChE,wEAAwE;AACxE,iCAAiC;AACjC,EAAE;AACF,oEAAoE;AACpE,uEAAuE;AACvE,qEAAqE;AACrE,sEAAsE;AACtE,uEAAuE;AACvE,8DAA8D;AAC9D,EAAE;AACF,2EAA2E;AAC3E,0EAA0E;AAC1E,mBAAmB;AAcnB;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAyEhD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,CAAC;AAqCnD,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,MAAqB,EAAE,KAAqB;IACpE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,IAAI,OAAO,EAAE,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;IAC9D,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAAqB,EACrB,KAAyB,EACzB,WAAmB;IAEnB,IAAI,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO;IAC1B,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QACzD,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,wBAAwB,EAAE,SAAS,WAAW,EAAE,CAAC,CAAC;IAChF,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;IAClD,CAAC;AACH,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -45,9 +45,68 @@ export interface KnowledgePluginConfig {
|
|
|
45
45
|
* "metadata" (file names/collections/scores, no content), "full"
|
|
46
46
|
* (plus the exact injected excerpts).
|
|
47
47
|
*
|
|
48
|
-
* @since 3.
|
|
48
|
+
* @since 3.2.7
|
|
49
49
|
*/
|
|
50
50
|
provenanceReport?: string;
|
|
51
|
+
/**
|
|
52
|
+
* TEST mode — mock both knowledge sources so the plugin can run in an
|
|
53
|
+
* isolated test environment with NO live LightRAG server and NO
|
|
54
|
+
* PostgreSQL/pgvector backend. The goal is to observe the plugin's real
|
|
55
|
+
* impact on the agent's answers (the mocked context is genuinely
|
|
56
|
+
* injected into the system prompt, so any downstream LLM trace —
|
|
57
|
+
* e.g. LiteLLM → Langfuse — reflects it). Off by default; see the loud
|
|
58
|
+
* registration warning. NEVER enable in production.
|
|
59
|
+
*
|
|
60
|
+
* @since 3.2.7
|
|
61
|
+
*/
|
|
62
|
+
testMode?: TestModePluginConfig;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Raw TEST-mode configuration block (from
|
|
66
|
+
* `plugins.entries.openclaw-knowledge.config.testMode`).
|
|
67
|
+
*
|
|
68
|
+
* @since 3.2.7
|
|
69
|
+
*/
|
|
70
|
+
export interface TestModePluginConfig {
|
|
71
|
+
/**
|
|
72
|
+
* Master switch. When `true`, BOTH sources are mocked: LightRAG returns
|
|
73
|
+
* {@link lightragMockResponse} and pgvector returns
|
|
74
|
+
* {@link pgvectorMockResults} — no network call, no DB pool. When the
|
|
75
|
+
* mock is active a source counts as "enabled" even without its
|
|
76
|
+
* credentials/URL, so the plugin still registers its hook. Default `false`.
|
|
77
|
+
*/
|
|
78
|
+
enabled?: boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Canned LightRAG context returned in test mode. The literal token
|
|
81
|
+
* `{{query}}` (whitespace-tolerant) is substituted with the user's query
|
|
82
|
+
* at runtime so operators can confirm the query reaches the source.
|
|
83
|
+
* Defaults to a realistic synthetic knowledge-graph context (> 200 chars
|
|
84
|
+
* so it is not flagged `sparse`).
|
|
85
|
+
*/
|
|
86
|
+
lightragMockResponse?: string;
|
|
87
|
+
/**
|
|
88
|
+
* Canned pgvector hits returned in test mode. Each entry is normalized to
|
|
89
|
+
* a full {@link PgvectorResult} (missing fields default to `null`, missing
|
|
90
|
+
* `collection` to the first configured collection, missing `score` to
|
|
91
|
+
* `0.8`) and the list is sorted by descending score to mirror the real
|
|
92
|
+
* cosine-ranked path. Defaults to a small realistic synthetic set.
|
|
93
|
+
*/
|
|
94
|
+
pgvectorMockResults?: PgvectorMockResult[];
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Ergonomic, partial shape an operator writes for a single mocked pgvector
|
|
98
|
+
* hit. Only the fields worth asserting on are exposed; everything else is
|
|
99
|
+
* filled with `null` by the resolver.
|
|
100
|
+
*
|
|
101
|
+
* @since 3.2.7
|
|
102
|
+
*/
|
|
103
|
+
export interface PgvectorMockResult {
|
|
104
|
+
file_name?: string;
|
|
105
|
+
text?: string;
|
|
106
|
+
/** Cosine-like score in `[0, 1]`. Default `0.8`. */
|
|
107
|
+
score?: number;
|
|
108
|
+
/** Collection label. Defaults to the first configured collection. */
|
|
109
|
+
collection?: string;
|
|
51
110
|
}
|
|
52
111
|
export interface JinaPluginConfig {
|
|
53
112
|
/** Jina API key. Required for `router.mode=jina-classifier` or `pgvectorReranker.enabled`. Supports `${ENV_VAR}` substitution. */
|
|
@@ -112,6 +171,35 @@ export interface PgvectorRerankerPluginConfig {
|
|
|
112
171
|
maxCharsPerDoc?: number;
|
|
113
172
|
}
|
|
114
173
|
export type LightRAGQueryMode = "naive" | "local" | "global" | "hybrid";
|
|
174
|
+
/**
|
|
175
|
+
* One source reference from a LightRAG `/query` response. LightRAG (≥ 1.4.5)
|
|
176
|
+
* returns a structured `references` array alongside the assembled `response`
|
|
177
|
+
* context, each entry pointing at a source document. We capture ONLY the
|
|
178
|
+
* source-attribution fields (`reference_id`, `file_path`) — never the
|
|
179
|
+
* reference's `content`, which is the RETRIEVED text, not the INJECTED text
|
|
180
|
+
* (see `buildLightRAGProvenance` for why mixing the two would leak excerpts
|
|
181
|
+
* the LLM never saw).
|
|
182
|
+
*
|
|
183
|
+
* @since 3.2.8
|
|
184
|
+
*/
|
|
185
|
+
export interface LightRAGReference {
|
|
186
|
+
/** LightRAG's opaque reference identifier (e.g. "5"), when provided. */
|
|
187
|
+
reference_id?: string;
|
|
188
|
+
/** Source document path/name LightRAG attributes this context to. */
|
|
189
|
+
file_path: string;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Result of {@link queryLightRAG}: the assembled context blob plus the
|
|
193
|
+
* structured source references. Pre-3.2.8 the function returned just the
|
|
194
|
+
* context string; the object form carries the references needed for
|
|
195
|
+
* provenance source-attribution without a second round-trip.
|
|
196
|
+
*
|
|
197
|
+
* @since 3.2.8
|
|
198
|
+
*/
|
|
199
|
+
export interface LightRAGQueryResult {
|
|
200
|
+
context: string;
|
|
201
|
+
references: LightRAGReference[];
|
|
202
|
+
}
|
|
115
203
|
/**
|
|
116
204
|
* Fully resolved plugin configuration after defaults, env substitution, and
|
|
117
205
|
* derivation of the pgvector/lightrag enabled flags from presence of secrets.
|
|
@@ -167,9 +255,30 @@ export interface ResolvedKnowledgeConfig {
|
|
|
167
255
|
/**
|
|
168
256
|
* Provenance reporting level (provenance/v1). Default "off".
|
|
169
257
|
*
|
|
170
|
-
* @since 3.
|
|
258
|
+
* @since 3.2.7
|
|
171
259
|
*/
|
|
172
260
|
provenanceReport: "off" | "metadata" | "full";
|
|
261
|
+
/**
|
|
262
|
+
* TEST mode master switch (resolved from `testMode.enabled`). When `true`
|
|
263
|
+
* both sources are mocked and no pg pool / network call is made.
|
|
264
|
+
*
|
|
265
|
+
* @since 3.2.7
|
|
266
|
+
*/
|
|
267
|
+
testModeEnabled: boolean;
|
|
268
|
+
/**
|
|
269
|
+
* Resolved LightRAG canned context for test mode (defaults applied,
|
|
270
|
+
* `{{query}}` still un-substituted — substitution happens per-turn).
|
|
271
|
+
*
|
|
272
|
+
* @since 3.2.7
|
|
273
|
+
*/
|
|
274
|
+
lightragMockResponse: string;
|
|
275
|
+
/**
|
|
276
|
+
* Resolved pgvector canned hits for test mode (normalized to full
|
|
277
|
+
* {@link PgvectorResult} shape and sorted by descending score).
|
|
278
|
+
*
|
|
279
|
+
* @since 3.2.7
|
|
280
|
+
*/
|
|
281
|
+
pgvectorMockResults: PgvectorResult[];
|
|
173
282
|
}
|
|
174
283
|
/**
|
|
175
284
|
* One search hit from the PostgreSQL `knowledge_vectors` table, after score
|
package/openclaw.plugin.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"id": "openclaw-knowledge",
|
|
3
3
|
"name": "Knowledge Base",
|
|
4
4
|
"description": "Multi-source knowledge search (pgvector + LightRAG) with optional Jina-powered router & reranker — injects relevant documents and knowledge graph context before each turn via the before_prompt_build hook",
|
|
5
|
-
"version": "3.2.
|
|
5
|
+
"version": "3.2.8",
|
|
6
6
|
"activation": {
|
|
7
7
|
"onStartup": true
|
|
8
8
|
},
|
|
@@ -183,6 +183,51 @@
|
|
|
183
183
|
],
|
|
184
184
|
"default": "off",
|
|
185
185
|
"description": "Provenance reporting toward chat frontends (provenance/v1): off = no emission; metadata = file names/collections/scores; full = plus the exact injected excerpts. Reports ride the gateway agent-event bus and land under the chat's own ACL — never in logs."
|
|
186
|
+
},
|
|
187
|
+
"testMode": {
|
|
188
|
+
"type": "object",
|
|
189
|
+
"additionalProperties": false,
|
|
190
|
+
"description": "TEST mode — mock BOTH sources so the plugin runs in an isolated test environment with no live LightRAG server and no PostgreSQL/pgvector backend. The mocked context is genuinely injected into the agent prompt, so its impact is real and observable downstream (e.g. the agent's LLM call traced via LiteLLM → Langfuse reflects it). Off by default. NEVER enable in production.",
|
|
191
|
+
"properties": {
|
|
192
|
+
"enabled": {
|
|
193
|
+
"type": "boolean",
|
|
194
|
+
"default": false,
|
|
195
|
+
"description": "Master switch. When true, LightRAG and pgvector return canned data instead of querying a server/DB — and each source counts as enabled even without its URL/credentials. The explicit pgvectorEnabled/lightragEnabled:false toggles still win, so you can mock a single source in isolation. A loud warning is logged at registration."
|
|
196
|
+
},
|
|
197
|
+
"lightragMockResponse": {
|
|
198
|
+
"type": "string",
|
|
199
|
+
"description": "Canned LightRAG context returned in test mode. The token {{query}} (whitespace-tolerant) is replaced with the user's query at runtime. Defaults to a realistic synthetic knowledge-graph context (>200 chars, with a citable reference id) so injection is easy to confirm from the agent's answer."
|
|
200
|
+
},
|
|
201
|
+
"pgvectorMockResults": {
|
|
202
|
+
"type": "array",
|
|
203
|
+
"description": "Canned pgvector hits returned in test mode. Each entry is normalized to a full result row (missing fields → null, missing collection → first configured collection, missing score → 0.8) and sorted by descending score. Defaults to a small realistic synthetic set.",
|
|
204
|
+
"items": {
|
|
205
|
+
"type": "object",
|
|
206
|
+
"additionalProperties": false,
|
|
207
|
+
"properties": {
|
|
208
|
+
"file_name": {
|
|
209
|
+
"type": "string",
|
|
210
|
+
"description": "Source document name shown in the injected block."
|
|
211
|
+
},
|
|
212
|
+
"text": {
|
|
213
|
+
"type": "string",
|
|
214
|
+
"description": "Chunk content injected into the prompt."
|
|
215
|
+
},
|
|
216
|
+
"score": {
|
|
217
|
+
"type": "number",
|
|
218
|
+
"minimum": 0,
|
|
219
|
+
"maximum": 1,
|
|
220
|
+
"default": 0.8,
|
|
221
|
+
"description": "Cosine-like similarity score (0–1)."
|
|
222
|
+
},
|
|
223
|
+
"collection": {
|
|
224
|
+
"type": "string",
|
|
225
|
+
"description": "Collection label. Defaults to the first configured collection."
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
186
231
|
}
|
|
187
232
|
},
|
|
188
233
|
"required": []
|
|
@@ -310,6 +355,21 @@
|
|
|
310
355
|
"label": "Jina RPM budget (soft)",
|
|
311
356
|
"advanced": true,
|
|
312
357
|
"help": "Soft alert threshold on outbound Jina calls per minute. Default 60. Never blocks — only logs and emits jina_rpm_exceeded events. Set to 0 to disable."
|
|
358
|
+
},
|
|
359
|
+
"testMode.enabled": {
|
|
360
|
+
"label": "TEST mode (mock sources)",
|
|
361
|
+
"advanced": true,
|
|
362
|
+
"help": "Mock LightRAG + pgvector for infra-less test environments. The mocked context is really injected so its impact is observable. NEVER enable in production."
|
|
363
|
+
},
|
|
364
|
+
"testMode.lightragMockResponse": {
|
|
365
|
+
"label": "Mock LightRAG context",
|
|
366
|
+
"advanced": true,
|
|
367
|
+
"help": "Canned LightRAG context for test mode. Use {{query}} to echo the user's query. Defaults to a realistic synthetic graph context."
|
|
368
|
+
},
|
|
369
|
+
"testMode.pgvectorMockResults": {
|
|
370
|
+
"label": "Mock pgvector results",
|
|
371
|
+
"advanced": true,
|
|
372
|
+
"help": "Canned pgvector hits for test mode (file_name/text/score/collection). Defaults to a small realistic synthetic set."
|
|
313
373
|
}
|
|
314
374
|
}
|
|
315
375
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lacneu/openclaw-knowledge",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.8",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Multi-source knowledge plugin for OpenClaw — pgvector + LightRAG injection with optional Jina-powered router & reranker, via before_prompt_build hook",
|
|
6
6
|
"license": "MIT",
|