@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 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: cfg.collections ?? DEFAULT_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.3.0 — provenance reporting toward chat frontends. Off-list values
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))
@@ -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/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.pgvectorEnabled &&
123
- pool) {
124
- tasks.push(runPgvectorSource(pool, query, config, cooldowns.pgvector_reranker, logger, rpmMonitor));
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
- tasks.push(runLightRAGSource(query, config));
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 { source: "lightrag", data: context, durationMs: Date.now() - startedAt };
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
- // Only instantiate the pg pool when pgvector is actually in play. Booting
722
- // a pool with no valid connection string would keep the plugin disabled
723
- // anyway and leak sockets on hot-reload.
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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"}
@@ -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<string>;
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 data.response ?? "";
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.
@@ -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;AAQtD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAW,EACX,MAAc,EACd,KAAa,EACb,OAA0B,QAAQ;IAElC,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IACF,IAAI,MAAM;QAAE,OAAO,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;IAE1C,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,GAAG,QAAQ,EAAE;QACvC,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK;YACL,IAAI;YACJ,iBAAiB,EAAE,IAAI;YACvB,MAAM,EAAE,KAAK;SACd,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,0BAA0B,IAAI,CAAC,MAAM,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAChE,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAA4B,CAAC;IAC5D,OAAO,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,QAAgB;IAC7D,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC;IAEzC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9C,OAAO,UAAU,GAAG,QAAQ,GAAG,GAAG;QAChC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC;QACpC,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,UAAkB,EAClB,QAAgB;IAEhB,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IAClC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,OAAO;QACL,SAAS,EAAE,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC9C,cAAc,EAAE,OAAO,CAAC,MAAM;KAC/B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"lightrag.js","sourceRoot":"","sources":["../src/lightrag.ts"],"names":[],"mappings":"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"}
@@ -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
@@ -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
- const item = { id: "lightrag-context", type: mode };
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
- item.text = injectedText.slice(0, PROVENANCE_EXCERPT_MAX_CHARS);
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: [item],
152
+ items: [...refItems, contextItem],
120
153
  };
121
154
  }
122
155
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"provenance.js","sourceRoot":"","sources":["../src/provenance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provenance.js","sourceRoot":"","sources":["../src/provenance.ts"],"names":[],"mappings":"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"}
@@ -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;AAsDhD;;;;;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"}
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.3.0
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.3.0
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
@@ -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.6",
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.6",
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",