crewly 1.20.19 → 1.20.21
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/config/roles/generalist/prompt.md +8 -2
- package/config/roles/team-leader/prompt.md +2 -1
- package/config/skills/agent/core/wiki-query/SKILL.md +11 -0
- package/config/skills/agent/core/wiki-query/execute.sh +22 -3
- package/config/skills/orchestrator/wiki-ingest/SKILL.md +19 -0
- package/config/skills/orchestrator/wiki-ingest/execute.sh +36 -1
- package/config/skills/team-leader/wiki-review-proposals/SKILL.md +35 -0
- package/config/skills/team-leader/wiki-review-proposals/execute.sh +40 -0
- package/config/skills/team-leader/wiki-supersede/SKILL.md +38 -0
- package/config/skills/team-leader/wiki-supersede/execute.sh +44 -0
- package/dist/backend/backend/src/constants.d.ts +32 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +30 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts +29 -0
- package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/wiki/wiki.controller.js +196 -4
- package/dist/backend/backend/src/controllers/wiki/wiki.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/wiki/wiki.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/wiki/wiki.routes.js +9 -1
- package/dist/backend/backend/src/controllers/wiki/wiki.routes.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +3 -0
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +28 -0
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +46 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/memory/memory.service.d.ts +2 -0
- package/dist/backend/backend/src/services/memory/memory.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/memory/memory.service.js +16 -4
- package/dist/backend/backend/src/services/memory/memory.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/schema-loader.service.d.ts +9 -0
- package/dist/backend/backend/src/services/wiki/schema-loader.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/schema-loader.service.js +40 -1
- package/dist/backend/backend/src/services/wiki/schema-loader.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.d.ts +32 -0
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.js +63 -1
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.d.ts +2 -0
- package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js +9 -2
- package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-curation.service.d.ts +106 -0
- package/dist/backend/backend/src/services/wiki/wiki-curation.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-curation.service.js +211 -0
- package/dist/backend/backend/src/services/wiki/wiki-curation.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-history.service.d.ts +63 -0
- package/dist/backend/backend/src/services/wiki/wiki-history.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-history.service.js +124 -0
- package/dist/backend/backend/src/services/wiki/wiki-history.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-index.service.d.ts +119 -0
- package/dist/backend/backend/src/services/wiki/wiki-index.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-index.service.js +263 -0
- package/dist/backend/backend/src/services/wiki/wiki-index.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts +66 -11
- package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js +162 -44
- package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-lint.service.d.ts +31 -0
- package/dist/backend/backend/src/services/wiki/wiki-lint.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-lint.service.js +69 -0
- package/dist/backend/backend/src/services/wiki/wiki-lint.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-owner.resolver.d.ts +29 -0
- package/dist/backend/backend/src/services/wiki/wiki-owner.resolver.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-owner.resolver.js +55 -0
- package/dist/backend/backend/src/services/wiki/wiki-owner.resolver.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-page.d.ts +101 -0
- package/dist/backend/backend/src/services/wiki/wiki-page.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-page.js +130 -0
- package/dist/backend/backend/src/services/wiki/wiki-page.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-policy.d.ts +35 -0
- package/dist/backend/backend/src/services/wiki/wiki-policy.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-policy.js +44 -0
- package/dist/backend/backend/src/services/wiki/wiki-policy.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-process.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-process.service.js +5 -2
- package/dist/backend/backend/src/services/wiki/wiki-process.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-query.service.d.ts +57 -13
- package/dist/backend/backend/src/services/wiki/wiki-query.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-query.service.js +91 -54
- package/dist/backend/backend/src/services/wiki/wiki-query.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-redaction.d.ts +74 -0
- package/dist/backend/backend/src/services/wiki/wiki-redaction.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-redaction.js +94 -0
- package/dist/backend/backend/src/services/wiki/wiki-redaction.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts +12 -3
- package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-search.service.js +19 -9
- package/dist/backend/backend/src/services/wiki/wiki-search.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-usage.service.d.ts +96 -0
- package/dist/backend/backend/src/services/wiki/wiki-usage.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-usage.service.js +147 -0
- package/dist/backend/backend/src/services/wiki/wiki-usage.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-vault-walk.d.ts +25 -0
- package/dist/backend/backend/src/services/wiki/wiki-vault-walk.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-vault-walk.js +52 -0
- package/dist/backend/backend/src/services/wiki/wiki-vault-walk.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts +19 -1
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js +47 -6
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki.types.d.ts +24 -0
- package/dist/backend/backend/src/services/wiki/wiki.types.d.ts.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +32 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +30 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +28 -0
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.js +46 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/backend/src/services/memory/memory.service.d.ts +2 -0
- package/dist/cli/backend/src/services/memory/memory.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/memory/memory.service.js +16 -4
- package/dist/cli/backend/src/services/memory/memory.service.js.map +1 -1
- package/dist/cli/backend/src/services/wiki/schema-loader.service.d.ts +9 -0
- package/dist/cli/backend/src/services/wiki/schema-loader.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/wiki/schema-loader.service.js +40 -1
- package/dist/cli/backend/src/services/wiki/schema-loader.service.js.map +1 -1
- package/dist/cli/backend/src/services/wiki/wiki-history.service.d.ts +63 -0
- package/dist/cli/backend/src/services/wiki/wiki-history.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-history.service.js +124 -0
- package/dist/cli/backend/src/services/wiki/wiki-history.service.js.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-index.service.d.ts +119 -0
- package/dist/cli/backend/src/services/wiki/wiki-index.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-index.service.js +263 -0
- package/dist/cli/backend/src/services/wiki/wiki-index.service.js.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts +66 -11
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.js +162 -44
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
- package/dist/cli/backend/src/services/wiki/wiki-page.d.ts +101 -0
- package/dist/cli/backend/src/services/wiki/wiki-page.d.ts.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-page.js +130 -0
- package/dist/cli/backend/src/services/wiki/wiki-page.js.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-policy.d.ts +35 -0
- package/dist/cli/backend/src/services/wiki/wiki-policy.d.ts.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-policy.js +44 -0
- package/dist/cli/backend/src/services/wiki/wiki-policy.js.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-redaction.d.ts +74 -0
- package/dist/cli/backend/src/services/wiki/wiki-redaction.d.ts.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-redaction.js +94 -0
- package/dist/cli/backend/src/services/wiki/wiki-redaction.js.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-search.service.d.ts +12 -3
- package/dist/cli/backend/src/services/wiki/wiki-search.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/wiki/wiki-search.service.js +19 -9
- package/dist/cli/backend/src/services/wiki/wiki-search.service.js.map +1 -1
- package/dist/cli/backend/src/services/wiki/wiki-usage.service.d.ts +96 -0
- package/dist/cli/backend/src/services/wiki/wiki-usage.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-usage.service.js +147 -0
- package/dist/cli/backend/src/services/wiki/wiki-usage.service.js.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-vault-walk.d.ts +25 -0
- package/dist/cli/backend/src/services/wiki/wiki-vault-walk.d.ts.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki-vault-walk.js +52 -0
- package/dist/cli/backend/src/services/wiki/wiki-vault-walk.js.map +1 -0
- package/dist/cli/backend/src/services/wiki/wiki.types.d.ts +24 -0
- package/dist/cli/backend/src/services/wiki/wiki.types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Confidentiality gate for vault writes.
|
|
3
|
+
*
|
|
4
|
+
* Secrets (tokens, keys, passwords) are never allowed into a vault: the
|
|
5
|
+
* write is refused and the pattern that matched is named — never the
|
|
6
|
+
* value. PII (emails, phone numbers) is governed per vault by the
|
|
7
|
+
* `privacy:` block in SCHEMA.md: a personal vault refuses or masks
|
|
8
|
+
* inbound customer detail, an enterprise vault holds customer data by
|
|
9
|
+
* design and the rule flips to "mask on the way out" (visibility).
|
|
10
|
+
*
|
|
11
|
+
* @module services/wiki/wiki-redaction
|
|
12
|
+
*/
|
|
13
|
+
/** A detector: name + regex; `mask` is what replaces a match when masking. */
|
|
14
|
+
export interface RedactionPattern {
|
|
15
|
+
name: string;
|
|
16
|
+
regex: RegExp;
|
|
17
|
+
mask: string;
|
|
18
|
+
}
|
|
19
|
+
/** Secret detectors — always enforced, never configurable off. */
|
|
20
|
+
export declare const SECRET_PATTERNS: readonly RedactionPattern[];
|
|
21
|
+
/** PII detectors — enforced per the vault's `privacy:` policy. */
|
|
22
|
+
export declare const PII_PATTERNS: readonly RedactionPattern[];
|
|
23
|
+
/** What the vault wants done with PII on the way in. */
|
|
24
|
+
export type PiiMode = 'allow' | 'mask' | 'refuse';
|
|
25
|
+
/** Privacy policy of a vault (SCHEMA.md `privacy:` block; defaults shown). */
|
|
26
|
+
export interface VaultPrivacyPolicy {
|
|
27
|
+
/** `allow` (enterprise KB: customer data is the content), `mask`, or `refuse` (personal KB). Default `allow`. */
|
|
28
|
+
pii: PiiMode;
|
|
29
|
+
}
|
|
30
|
+
/** Outcome of scanning a body. */
|
|
31
|
+
export interface RedactionScan {
|
|
32
|
+
/** Names of secret patterns that matched (values are never returned). */
|
|
33
|
+
secrets: string[];
|
|
34
|
+
/** Names of PII patterns that matched. */
|
|
35
|
+
pii: string[];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Scan text for secrets and PII without altering it.
|
|
39
|
+
*
|
|
40
|
+
* @param text - Body to scan
|
|
41
|
+
* @returns Which pattern names matched
|
|
42
|
+
*/
|
|
43
|
+
export declare function scanForSensitive(text: string): RedactionScan;
|
|
44
|
+
/**
|
|
45
|
+
* Replace every secret match with its mask (and PII when asked). Used for
|
|
46
|
+
* archives and outbound copies where the text must survive but the values
|
|
47
|
+
* must not.
|
|
48
|
+
*
|
|
49
|
+
* @param text - Body
|
|
50
|
+
* @param includePii - Also mask PII
|
|
51
|
+
* @returns Masked text
|
|
52
|
+
*/
|
|
53
|
+
export declare function redactSensitive(text: string, includePii?: boolean): string;
|
|
54
|
+
/** Result of applying a vault's policy to an inbound body. */
|
|
55
|
+
export type PrivacyGateResult = {
|
|
56
|
+
ok: true;
|
|
57
|
+
body: string;
|
|
58
|
+
masked: string[];
|
|
59
|
+
} | {
|
|
60
|
+
ok: false;
|
|
61
|
+
reason: 'secret_detected' | 'pii_refused';
|
|
62
|
+
patterns: string[];
|
|
63
|
+
message: string;
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Apply the confidentiality gate to a body about to be written.
|
|
67
|
+
* Secrets always refuse; PII follows `policy.pii`.
|
|
68
|
+
*
|
|
69
|
+
* @param body - Text to write
|
|
70
|
+
* @param policy - The vault's privacy policy
|
|
71
|
+
* @returns The (possibly masked) body, or a refusal naming the patterns
|
|
72
|
+
*/
|
|
73
|
+
export declare function applyPrivacyGate(body: string, policy: VaultPrivacyPolicy): PrivacyGateResult;
|
|
74
|
+
//# sourceMappingURL=wiki-redaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki-redaction.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-redaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,8EAA8E;AAC9E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,kEAAkE;AAClE,eAAO,MAAM,eAAe,EAAE,SAAS,gBAAgB,EAYtD,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,YAAY,EAAE,SAAS,gBAAgB,EAInD,CAAC;AAEF,wDAAwD;AACxD,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAElD,8EAA8E;AAC9E,MAAM,WAAW,kBAAkB;IACjC,iHAAiH;IACjH,GAAG,EAAE,OAAO,CAAC;CACd;AAED,kCAAkC;AAClC,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,0CAA0C;IAC1C,GAAG,EAAE,MAAM,EAAE,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAI5D;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,UAAQ,GAAG,MAAM,CAKxE;AAED,8DAA8D;AAC9D,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,GAC5C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,iBAAiB,GAAG,aAAa,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAElG;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,iBAAiB,CAwB5F"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Confidentiality gate for vault writes.
|
|
3
|
+
*
|
|
4
|
+
* Secrets (tokens, keys, passwords) are never allowed into a vault: the
|
|
5
|
+
* write is refused and the pattern that matched is named — never the
|
|
6
|
+
* value. PII (emails, phone numbers) is governed per vault by the
|
|
7
|
+
* `privacy:` block in SCHEMA.md: a personal vault refuses or masks
|
|
8
|
+
* inbound customer detail, an enterprise vault holds customer data by
|
|
9
|
+
* design and the rule flips to "mask on the way out" (visibility).
|
|
10
|
+
*
|
|
11
|
+
* @module services/wiki/wiki-redaction
|
|
12
|
+
*/
|
|
13
|
+
/** Secret detectors — always enforced, never configurable off. */
|
|
14
|
+
export const SECRET_PATTERNS = [
|
|
15
|
+
{ name: 'slack_token', regex: /\bxox[abprse]-\d{6,}-[A-Za-z0-9-]{8,}/g, mask: '[REDACTED slack_token]' },
|
|
16
|
+
{ name: 'slack_config_token', regex: /\bxoxe(?:\.xoxp)?-\d-[A-Za-z0-9-]{20,}/g, mask: '[REDACTED slack_config_token]' },
|
|
17
|
+
{ name: 'openai_key', regex: /\bsk-(?:proj-|ant-)?[A-Za-z0-9_-]{20,}/g, mask: '[REDACTED api_key]' },
|
|
18
|
+
{ name: 'aws_access_key', regex: /\bAKIA[0-9A-Z]{16}\b/g, mask: '[REDACTED aws_key]' },
|
|
19
|
+
{ name: 'github_token', regex: /\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{20,}/g, mask: '[REDACTED github_token]' },
|
|
20
|
+
{ name: 'google_api_key', regex: /\bAIza[0-9A-Za-z_-]{30,}/g, mask: '[REDACTED google_key]' },
|
|
21
|
+
{ name: 'private_key_block', regex: /-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g, mask: '[REDACTED private_key]' },
|
|
22
|
+
{ name: 'jwt', regex: /\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\b/g, mask: '[REDACTED jwt]' },
|
|
23
|
+
{ name: 'bearer_header', regex: /\bBearer\s+[A-Za-z0-9._~+/=-]{20,}/g, mask: 'Bearer [REDACTED]' },
|
|
24
|
+
{ name: 'password_assignment', regex: /\b(?:password|passwd|pwd|secret)\s*[:=]\s*["']?(?!\s)[^\s"',;]{6,}/gi, mask: 'password=[REDACTED]' },
|
|
25
|
+
{ name: 'connection_string', regex: /\b(?:mongodb(?:\+srv)?|postgres(?:ql)?|mysql|redis):\/\/[^\s:@/]+:[^\s@/]+@/g, mask: '[REDACTED connection_string]' },
|
|
26
|
+
];
|
|
27
|
+
/** PII detectors — enforced per the vault's `privacy:` policy. */
|
|
28
|
+
export const PII_PATTERNS = [
|
|
29
|
+
{ name: 'email', regex: /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/g, mask: '[email]' },
|
|
30
|
+
{ name: 'phone', regex: /(?<![\d-])(?:\+?\d{1,3}[\s-]?)?(?:\(?\d{3}\)?[\s-]?)\d{3}[\s-]?\d{4}(?![\d-])/g, mask: '[phone]' },
|
|
31
|
+
{ name: 'cn_id_number', regex: /\b\d{17}[\dXx]\b/g, mask: '[id-number]' },
|
|
32
|
+
];
|
|
33
|
+
/**
|
|
34
|
+
* Scan text for secrets and PII without altering it.
|
|
35
|
+
*
|
|
36
|
+
* @param text - Body to scan
|
|
37
|
+
* @returns Which pattern names matched
|
|
38
|
+
*/
|
|
39
|
+
export function scanForSensitive(text) {
|
|
40
|
+
const hit = (patterns) => patterns.filter((p) => { p.regex.lastIndex = 0; return p.regex.test(text); }).map((p) => p.name);
|
|
41
|
+
return { secrets: hit(SECRET_PATTERNS), pii: hit(PII_PATTERNS) };
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Replace every secret match with its mask (and PII when asked). Used for
|
|
45
|
+
* archives and outbound copies where the text must survive but the values
|
|
46
|
+
* must not.
|
|
47
|
+
*
|
|
48
|
+
* @param text - Body
|
|
49
|
+
* @param includePii - Also mask PII
|
|
50
|
+
* @returns Masked text
|
|
51
|
+
*/
|
|
52
|
+
export function redactSensitive(text, includePii = false) {
|
|
53
|
+
let out = text;
|
|
54
|
+
for (const p of SECRET_PATTERNS)
|
|
55
|
+
out = out.replace(p.regex, p.mask);
|
|
56
|
+
if (includePii)
|
|
57
|
+
for (const p of PII_PATTERNS)
|
|
58
|
+
out = out.replace(p.regex, p.mask);
|
|
59
|
+
return out;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Apply the confidentiality gate to a body about to be written.
|
|
63
|
+
* Secrets always refuse; PII follows `policy.pii`.
|
|
64
|
+
*
|
|
65
|
+
* @param body - Text to write
|
|
66
|
+
* @param policy - The vault's privacy policy
|
|
67
|
+
* @returns The (possibly masked) body, or a refusal naming the patterns
|
|
68
|
+
*/
|
|
69
|
+
export function applyPrivacyGate(body, policy) {
|
|
70
|
+
const scan = scanForSensitive(body);
|
|
71
|
+
if (scan.secrets.length > 0) {
|
|
72
|
+
return {
|
|
73
|
+
ok: false,
|
|
74
|
+
reason: 'secret_detected',
|
|
75
|
+
patterns: scan.secrets,
|
|
76
|
+
message: `Refused: the body contains what looks like a credential (${scan.secrets.join(', ')}). Remove it — a vault never stores secrets.`,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
if (scan.pii.length > 0) {
|
|
80
|
+
if (policy.pii === 'refuse') {
|
|
81
|
+
return {
|
|
82
|
+
ok: false,
|
|
83
|
+
reason: 'pii_refused',
|
|
84
|
+
patterns: scan.pii,
|
|
85
|
+
message: `Refused: this vault does not accept personal data (${scan.pii.join(', ')}). Describe the fact without the identifying detail.`,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
if (policy.pii === 'mask') {
|
|
89
|
+
return { ok: true, body: redactSensitive(body, true), masked: scan.pii };
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return { ok: true, body, masked: [] };
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=wiki-redaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki-redaction.js","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-redaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -64,7 +64,16 @@ export interface WikiSearchFailure {
|
|
|
64
64
|
reason: 'vault_missing' | 'invalid_input' | 'invalid_query';
|
|
65
65
|
message: string;
|
|
66
66
|
}
|
|
67
|
-
|
|
67
|
+
/** Eligibility filters applied per page (frontmatter-driven). */
|
|
68
|
+
export interface WikiSearchFilters {
|
|
69
|
+
/** Include pages marked `superseded_by` (default false). */
|
|
70
|
+
includeSuperseded?: boolean;
|
|
71
|
+
/** Role of the reader; pages whose `visibility` excludes it are dropped. Undefined = owner (sees all). */
|
|
72
|
+
viewerRole?: string;
|
|
73
|
+
/** Include `_proposed/` pages (default false). */
|
|
74
|
+
includeProposed?: boolean;
|
|
75
|
+
}
|
|
76
|
+
export interface WikiSearchInput extends WikiSearchFilters {
|
|
68
77
|
vaultPath: string;
|
|
69
78
|
query: string;
|
|
70
79
|
}
|
|
@@ -73,7 +82,7 @@ export interface VaultRef {
|
|
|
73
82
|
vaultPath: string;
|
|
74
83
|
label?: string;
|
|
75
84
|
}
|
|
76
|
-
export interface WikiMultiSearchInput {
|
|
85
|
+
export interface WikiMultiSearchInput extends WikiSearchFilters {
|
|
77
86
|
vaults: VaultRef[];
|
|
78
87
|
query: string;
|
|
79
88
|
}
|
|
@@ -125,7 +134,7 @@ export declare class WikiSearchService {
|
|
|
125
134
|
searchCorpus(vaultPath: string, docs: Array<{
|
|
126
135
|
relativePath: string;
|
|
127
136
|
absPath: string;
|
|
128
|
-
}>, query: string): Promise<WikiSearchHit[]>;
|
|
137
|
+
}>, query: string, filters?: WikiSearchFilters): Promise<WikiSearchHit[]>;
|
|
129
138
|
/**
|
|
130
139
|
* Core BM25 search over an arbitrary corpus of doc refs (one or many vaults).
|
|
131
140
|
* Builds the combined corpus statistics, scores, ranks, and attaches snippets
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wiki-search.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-search.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;
|
|
1
|
+
{"version":3,"file":"wiki-search.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-search.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AASH,0DAA0D;AAC1D,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,sDAAsD;AACtD,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,2DAA2D;AAC3D,eAAO,MAAM,iCAAiC,IAAI,CAAC;AACnD,gEAAgE;AAChE,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAChD,mEAAmE;AACnE,eAAO,MAAM,0BAA0B,QAAa,CAAC;AASrD,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,4DAA4D;IAC5D,YAAY,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,aAAa,EAAE,OAAO,CAAC;IACvB,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,IAAI,CAAC;IACT,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,kFAAkF;IAClF,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,eAAe,GAAG,eAAe,GAAG,eAAe,CAAC;IAC5D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,iEAAiE;AACjE,MAAM,WAAW,iBAAiB;IAChC,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,0GAA0G;IAC1G,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,iDAAiD;AACjD,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAqBD;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAM/C;AAoBD;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkC;IAEzD,0BAA0B;IAC1B,MAAM,CAAC,WAAW,IAAI,iBAAiB;IAKvC,uBAAuB;IACvB,MAAM,CAAC,aAAa,IAAI,IAAI;IAI5B,oEAAoE;IACpE,OAAO,CAAC,aAAa;IAWrB;;;;OAIG;IACG,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,GAAG,iBAAiB,CAAC;IAgBnF;;;;OAIG;IACG,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,GAAG,iBAAiB,CAAC;IAuBjG;;;;;;;;;;;OAWG;IACG,YAAY,CAChB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,KAAK,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,EACtD,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,aAAa,EAAE,CAAC;IAQ3B;;;;OAIG;YACW,aAAa;IA+D3B;;;;;;;OAOG;YACW,WAAW;IA2BzB;;;OAGG;YACW,MAAM;IAyBpB;;;;OAIG;YACW,OAAO;IA2CrB;;OAEG;IACH,OAAO,CAAC,SAAS;IAgBjB;;;;OAIG;YACW,aAAa;CA2B5B"}
|
|
@@ -22,6 +22,8 @@ import * as fs from 'fs/promises';
|
|
|
22
22
|
import * as path from 'path';
|
|
23
23
|
import { existsSync } from 'fs';
|
|
24
24
|
import { overlayRootFor } from './wiki-overlay.resolver.js';
|
|
25
|
+
import { parsePage, isVisibleTo } from './wiki-page.js';
|
|
26
|
+
import { WIKI_KB_CONSTANTS } from '../../constants.js';
|
|
25
27
|
/** Cap on how many .md files are inspected per search. */
|
|
26
28
|
export const WIKI_SEARCH_MAX_FILES = 500;
|
|
27
29
|
/** Cap on how many results returned to the caller. */
|
|
@@ -113,7 +115,7 @@ export class WikiSearchService {
|
|
|
113
115
|
if ('ok' in v)
|
|
114
116
|
return v;
|
|
115
117
|
const refs = (await this.collectDocs(vaultPath)).map((r) => ({ vaultPath, ...r }));
|
|
116
|
-
const { hits, truncated } = await this._searchCorpus(refs, v.query);
|
|
118
|
+
const { hits, truncated } = await this._searchCorpus(refs, v.query, input);
|
|
117
119
|
return { ok: true, vaultPath, query: v.query, hits, truncated };
|
|
118
120
|
}
|
|
119
121
|
/**
|
|
@@ -140,7 +142,7 @@ export class WikiSearchService {
|
|
|
140
142
|
if (refs.length >= WIKI_SEARCH_MAX_FILES)
|
|
141
143
|
break;
|
|
142
144
|
}
|
|
143
|
-
const { hits, truncated } = await this._searchCorpus(refs, v.query);
|
|
145
|
+
const { hits, truncated } = await this._searchCorpus(refs, v.query, input);
|
|
144
146
|
for (const h of hits) {
|
|
145
147
|
if (h.vaultPath)
|
|
146
148
|
h.vaultLabel = labelByPath.get(h.vaultPath);
|
|
@@ -159,12 +161,12 @@ export class WikiSearchService {
|
|
|
159
161
|
* @param query - Raw query string (validated/normalised here).
|
|
160
162
|
* @returns BM25-ranked hits, or an empty array for an invalid/empty query.
|
|
161
163
|
*/
|
|
162
|
-
async searchCorpus(vaultPath, docs, query) {
|
|
164
|
+
async searchCorpus(vaultPath, docs, query, filters = {}) {
|
|
163
165
|
const v = this.validateQuery(query);
|
|
164
166
|
if ('ok' in v)
|
|
165
167
|
return [];
|
|
166
168
|
const refs = docs.map((d) => ({ vaultPath, ...d }));
|
|
167
|
-
const { hits } = await this._searchCorpus(refs, v.query);
|
|
169
|
+
const { hits } = await this._searchCorpus(refs, v.query, filters);
|
|
168
170
|
return hits;
|
|
169
171
|
}
|
|
170
172
|
/**
|
|
@@ -172,15 +174,18 @@ export class WikiSearchService {
|
|
|
172
174
|
* Builds the combined corpus statistics, scores, ranks, and attaches snippets
|
|
173
175
|
* for the top results. Each hit carries its owning `vaultPath`.
|
|
174
176
|
*/
|
|
175
|
-
async _searchCorpus(docRefs, query) {
|
|
177
|
+
async _searchCorpus(docRefs, query, filters = {}) {
|
|
176
178
|
const queryTerms = Array.from(new Set(tokenize(query)));
|
|
177
179
|
const needleLower = query.toLowerCase();
|
|
178
|
-
const
|
|
179
|
-
const
|
|
180
|
+
const proposedPrefix = `${WIKI_KB_CONSTANTS.PROPOSED_DIR}/`;
|
|
181
|
+
const eligible = filters.includeProposed ? docRefs : docRefs.filter((r) => !r.relativePath.startsWith(proposedPrefix));
|
|
182
|
+
const truncatedFiles = eligible.length >= WIKI_SEARCH_MAX_FILES;
|
|
183
|
+
const slice = eligible.slice(0, WIKI_SEARCH_MAX_FILES);
|
|
180
184
|
// Pass 1: read + tokenise each doc, accumulate query-term frequencies + length.
|
|
185
|
+
// Superseded pages and pages the viewer may not see are dropped here.
|
|
181
186
|
const docs = [];
|
|
182
187
|
for (const ref of slice) {
|
|
183
|
-
const doc = await this.statDoc(ref, queryTerms);
|
|
188
|
+
const doc = await this.statDoc(ref, queryTerms, filters);
|
|
184
189
|
if (doc)
|
|
185
190
|
docs.push(doc);
|
|
186
191
|
}
|
|
@@ -297,7 +302,7 @@ export class WikiSearchService {
|
|
|
297
302
|
* tokens are folded in (weighted) so title relevance contributes to BM25.
|
|
298
303
|
* Returns null only on unreadable/oversize files with no filename match.
|
|
299
304
|
*/
|
|
300
|
-
async statDoc(ref, queryTerms) {
|
|
305
|
+
async statDoc(ref, queryTerms, filters = {}) {
|
|
301
306
|
const { vaultPath, relativePath, absPath } = ref;
|
|
302
307
|
const filenameMatch = queryTerms.some((t) => relativePath.toLowerCase().includes(t));
|
|
303
308
|
// Filename/title tokens, folded in with a weight.
|
|
@@ -320,6 +325,11 @@ export class WikiSearchService {
|
|
|
320
325
|
const stat = await fs.stat(absPath);
|
|
321
326
|
if (stat.size <= WIKI_SEARCH_MAX_FILE_BYTES) {
|
|
322
327
|
content = await fs.readFile(absPath, 'utf8');
|
|
328
|
+
const { frontmatter } = parsePage(content);
|
|
329
|
+
if (frontmatter.superseded_by && !filters.includeSuperseded)
|
|
330
|
+
return null;
|
|
331
|
+
if (!isVisibleTo(frontmatter, filters.viewerRole))
|
|
332
|
+
return null;
|
|
323
333
|
}
|
|
324
334
|
}
|
|
325
335
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wiki-search.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-search.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wiki-search.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-search.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WikiUsageService — the retrieval ledger.
|
|
3
|
+
*
|
|
4
|
+
* Every query against a vault appends one JSONL line: who asked, what,
|
|
5
|
+
* which pages were read, and whether it was a miss (nothing relevant).
|
|
6
|
+
* This is the only honest signal for "is the knowledge base alive":
|
|
7
|
+
* pages nobody reads and questions nobody could answer both come out of
|
|
8
|
+
* it, and the bookkeeping report turns them into work.
|
|
9
|
+
*
|
|
10
|
+
* @module services/wiki/wiki-usage.service
|
|
11
|
+
*/
|
|
12
|
+
/** One retrieval event. */
|
|
13
|
+
export interface WikiUsageEvent {
|
|
14
|
+
at: string;
|
|
15
|
+
/** `wiki-query` | `recall` | `search` | `page` */
|
|
16
|
+
via: string;
|
|
17
|
+
agent: string;
|
|
18
|
+
query: string;
|
|
19
|
+
/** Vault-relative pages returned/read. */
|
|
20
|
+
hits: string[];
|
|
21
|
+
/** True when nothing relevant came back — a capture gap. */
|
|
22
|
+
miss: boolean;
|
|
23
|
+
}
|
|
24
|
+
/** Aggregate over a window. */
|
|
25
|
+
export interface WikiUsageReport {
|
|
26
|
+
windowDays: number;
|
|
27
|
+
queries: number;
|
|
28
|
+
misses: number;
|
|
29
|
+
/** Distinct pages read at least once in the window. */
|
|
30
|
+
pagesRead: number;
|
|
31
|
+
/** Most-read pages, descending. */
|
|
32
|
+
topPages: Array<{
|
|
33
|
+
path: string;
|
|
34
|
+
reads: number;
|
|
35
|
+
}>;
|
|
36
|
+
/** Queries that found nothing (deduped, most recent first). */
|
|
37
|
+
missedQueries: string[];
|
|
38
|
+
/** Agents that queried, with counts. */
|
|
39
|
+
byAgent: Array<{
|
|
40
|
+
agent: string;
|
|
41
|
+
queries: number;
|
|
42
|
+
}>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Appends and summarises `llm-curated/usage.jsonl` per vault.
|
|
46
|
+
*/
|
|
47
|
+
export declare class WikiUsageService {
|
|
48
|
+
private readonly now;
|
|
49
|
+
private static instance;
|
|
50
|
+
private readonly logger;
|
|
51
|
+
constructor(now?: () => Date);
|
|
52
|
+
static getInstance(): WikiUsageService;
|
|
53
|
+
/** Test-only reset. */
|
|
54
|
+
static _resetForTesting(): void;
|
|
55
|
+
/**
|
|
56
|
+
* Ledger path for a vault.
|
|
57
|
+
*
|
|
58
|
+
* @param vaultPath - Vault root
|
|
59
|
+
* @returns `<vault>/llm-curated/usage.jsonl`
|
|
60
|
+
*/
|
|
61
|
+
ledgerPath(vaultPath: string): string;
|
|
62
|
+
/**
|
|
63
|
+
* Append one event. Never throws (a ledger failure must not fail a query).
|
|
64
|
+
*
|
|
65
|
+
* @param vaultPath - Vault root
|
|
66
|
+
* @param event - Event fields (`at` is filled in)
|
|
67
|
+
*/
|
|
68
|
+
record(vaultPath: string, event: Omit<WikiUsageEvent, 'at'>): Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* Read events in the last N days.
|
|
71
|
+
*
|
|
72
|
+
* @param vaultPath - Vault root
|
|
73
|
+
* @param windowDays - Window (default {@link WIKI_KB_CONSTANTS.USAGE_WINDOW_DAYS})
|
|
74
|
+
* @returns Events, oldest first
|
|
75
|
+
*/
|
|
76
|
+
events(vaultPath: string, windowDays?: number): Promise<WikiUsageEvent[]>;
|
|
77
|
+
/**
|
|
78
|
+
* Summarise the window: read counts, misses, unread work.
|
|
79
|
+
*
|
|
80
|
+
* @param vaultPath - Vault root
|
|
81
|
+
* @param windowDays - Window
|
|
82
|
+
* @returns Report
|
|
83
|
+
*/
|
|
84
|
+
report(vaultPath: string, windowDays?: number): Promise<WikiUsageReport>;
|
|
85
|
+
/**
|
|
86
|
+
* Pages never read in the window (given the full page list).
|
|
87
|
+
*
|
|
88
|
+
* @param vaultPath - Vault root
|
|
89
|
+
* @param allPages - Vault-relative page paths
|
|
90
|
+
* @param windowDays - Window
|
|
91
|
+
* @returns Unread pages
|
|
92
|
+
*/
|
|
93
|
+
unreadPages(vaultPath: string, allPages: string[], windowDays?: number): Promise<string[]>;
|
|
94
|
+
private rotateIfLarge;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=wiki-usage.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki-usage.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-usage.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,2BAA2B;AAC3B,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,kDAAkD;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,4DAA4D;IAC5D,IAAI,EAAE,OAAO,CAAC;CACf;AAED,+BAA+B;AAC/B,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,+DAA+D;IAC/D,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,wCAAwC;IACxC,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpD;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAIf,OAAO,CAAC,QAAQ,CAAC,GAAG;IAHhC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiC;IACxD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;gBAEZ,GAAG,GAAE,MAAM,IAAuB;IAI/D,MAAM,CAAC,WAAW,IAAI,gBAAgB;IAKtC,uBAAuB;IACvB,MAAM,CAAC,gBAAgB,IAAI,IAAI;IAI/B;;;;;OAKG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAIrC;;;;;OAKG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjF;;;;;;OAMG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,GAAE,MAA4C,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAqBpH;;;;;;OAMG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,GAAE,MAA4C,GAAG,OAAO,CAAC,eAAe,CAAC;IAqBnH;;;;;;;OAOG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,UAAU,GAAE,MAA4C,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAMvH,aAAa;CAO5B"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WikiUsageService — the retrieval ledger.
|
|
3
|
+
*
|
|
4
|
+
* Every query against a vault appends one JSONL line: who asked, what,
|
|
5
|
+
* which pages were read, and whether it was a miss (nothing relevant).
|
|
6
|
+
* This is the only honest signal for "is the knowledge base alive":
|
|
7
|
+
* pages nobody reads and questions nobody could answer both come out of
|
|
8
|
+
* it, and the bookkeeping report turns them into work.
|
|
9
|
+
*
|
|
10
|
+
* @module services/wiki/wiki-usage.service
|
|
11
|
+
*/
|
|
12
|
+
import * as path from 'path';
|
|
13
|
+
import * as fs from 'fs/promises';
|
|
14
|
+
import { LoggerService } from '../core/logger.service.js';
|
|
15
|
+
import { WIKI_KB_CONSTANTS } from '../../constants.js';
|
|
16
|
+
/**
|
|
17
|
+
* Appends and summarises `llm-curated/usage.jsonl` per vault.
|
|
18
|
+
*/
|
|
19
|
+
export class WikiUsageService {
|
|
20
|
+
now;
|
|
21
|
+
static instance = null;
|
|
22
|
+
logger;
|
|
23
|
+
constructor(now = () => new Date()) {
|
|
24
|
+
this.now = now;
|
|
25
|
+
this.logger = LoggerService.getInstance().createComponentLogger('WikiUsage');
|
|
26
|
+
}
|
|
27
|
+
static getInstance() {
|
|
28
|
+
if (!this.instance)
|
|
29
|
+
this.instance = new WikiUsageService();
|
|
30
|
+
return this.instance;
|
|
31
|
+
}
|
|
32
|
+
/** Test-only reset. */
|
|
33
|
+
static _resetForTesting() {
|
|
34
|
+
this.instance = null;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Ledger path for a vault.
|
|
38
|
+
*
|
|
39
|
+
* @param vaultPath - Vault root
|
|
40
|
+
* @returns `<vault>/llm-curated/usage.jsonl`
|
|
41
|
+
*/
|
|
42
|
+
ledgerPath(vaultPath) {
|
|
43
|
+
return path.join(vaultPath, 'llm-curated', WIKI_KB_CONSTANTS.USAGE_FILENAME);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Append one event. Never throws (a ledger failure must not fail a query).
|
|
47
|
+
*
|
|
48
|
+
* @param vaultPath - Vault root
|
|
49
|
+
* @param event - Event fields (`at` is filled in)
|
|
50
|
+
*/
|
|
51
|
+
async record(vaultPath, event) {
|
|
52
|
+
const line = JSON.stringify({ at: this.now().toISOString(), ...event, query: event.query.slice(0, 300) }) + '\n';
|
|
53
|
+
try {
|
|
54
|
+
const file = this.ledgerPath(vaultPath);
|
|
55
|
+
await fs.mkdir(path.dirname(file), { recursive: true });
|
|
56
|
+
await fs.appendFile(file, line, 'utf8');
|
|
57
|
+
await this.rotateIfLarge(file);
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
this.logger.debug('usage ledger append failed (non-fatal)', { vaultPath, error: err instanceof Error ? err.message : String(err) });
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Read events in the last N days.
|
|
65
|
+
*
|
|
66
|
+
* @param vaultPath - Vault root
|
|
67
|
+
* @param windowDays - Window (default {@link WIKI_KB_CONSTANTS.USAGE_WINDOW_DAYS})
|
|
68
|
+
* @returns Events, oldest first
|
|
69
|
+
*/
|
|
70
|
+
async events(vaultPath, windowDays = WIKI_KB_CONSTANTS.USAGE_WINDOW_DAYS) {
|
|
71
|
+
let raw;
|
|
72
|
+
try {
|
|
73
|
+
raw = await fs.readFile(this.ledgerPath(vaultPath), 'utf8');
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
78
|
+
const since = this.now().getTime() - windowDays * 24 * 3600 * 1000;
|
|
79
|
+
const out = [];
|
|
80
|
+
for (const line of raw.split('\n')) {
|
|
81
|
+
if (!line.trim())
|
|
82
|
+
continue;
|
|
83
|
+
try {
|
|
84
|
+
const e = JSON.parse(line);
|
|
85
|
+
if (Date.parse(e.at) >= since)
|
|
86
|
+
out.push(e);
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
/* skip corrupt line */
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return out;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Summarise the window: read counts, misses, unread work.
|
|
96
|
+
*
|
|
97
|
+
* @param vaultPath - Vault root
|
|
98
|
+
* @param windowDays - Window
|
|
99
|
+
* @returns Report
|
|
100
|
+
*/
|
|
101
|
+
async report(vaultPath, windowDays = WIKI_KB_CONSTANTS.USAGE_WINDOW_DAYS) {
|
|
102
|
+
const events = await this.events(vaultPath, windowDays);
|
|
103
|
+
const reads = new Map();
|
|
104
|
+
const byAgent = new Map();
|
|
105
|
+
const missed = [];
|
|
106
|
+
for (const e of events) {
|
|
107
|
+
for (const p of e.hits)
|
|
108
|
+
reads.set(p, (reads.get(p) ?? 0) + 1);
|
|
109
|
+
byAgent.set(e.agent, (byAgent.get(e.agent) ?? 0) + 1);
|
|
110
|
+
if (e.miss)
|
|
111
|
+
missed.push(e.query);
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
windowDays,
|
|
115
|
+
queries: events.length,
|
|
116
|
+
misses: missed.length,
|
|
117
|
+
pagesRead: reads.size,
|
|
118
|
+
topPages: [...reads.entries()].map(([p, n]) => ({ path: p, reads: n })).sort((a, b) => b.reads - a.reads).slice(0, 20),
|
|
119
|
+
missedQueries: [...new Set(missed.reverse())].slice(0, 20),
|
|
120
|
+
byAgent: [...byAgent.entries()].map(([agent, queries]) => ({ agent, queries })).sort((a, b) => b.queries - a.queries),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Pages never read in the window (given the full page list).
|
|
125
|
+
*
|
|
126
|
+
* @param vaultPath - Vault root
|
|
127
|
+
* @param allPages - Vault-relative page paths
|
|
128
|
+
* @param windowDays - Window
|
|
129
|
+
* @returns Unread pages
|
|
130
|
+
*/
|
|
131
|
+
async unreadPages(vaultPath, allPages, windowDays = WIKI_KB_CONSTANTS.USAGE_WINDOW_DAYS) {
|
|
132
|
+
const read = new Set();
|
|
133
|
+
for (const e of await this.events(vaultPath, windowDays))
|
|
134
|
+
for (const p of e.hits)
|
|
135
|
+
read.add(p);
|
|
136
|
+
return allPages.filter((p) => !read.has(p));
|
|
137
|
+
}
|
|
138
|
+
async rotateIfLarge(file) {
|
|
139
|
+
const stat = await fs.stat(file).catch(() => null);
|
|
140
|
+
if (!stat || stat.size <= WIKI_KB_CONSTANTS.USAGE_MAX_BYTES)
|
|
141
|
+
return;
|
|
142
|
+
const raw = await fs.readFile(file, 'utf8');
|
|
143
|
+
const lines = raw.split('\n').filter(Boolean);
|
|
144
|
+
await fs.writeFile(file, lines.slice(Math.floor(lines.length / 2)).join('\n') + '\n', 'utf8');
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=wiki-usage.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki-usage.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-usage.service.ts"],"names":[],"mappings":"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"}
|