crewly 1.20.20 → 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/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/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,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The page contract of the LLM-wiki.
|
|
3
|
+
*
|
|
4
|
+
* A vault page is markdown with YAML frontmatter. Two fields make a page a
|
|
5
|
+
* piece of knowledge rather than a bookmark: `summary` (the one-line
|
|
6
|
+
* conclusion — what this means for us) and `keep_because` (the reason it
|
|
7
|
+
* earns a place at all). Without them a write goes to `log.md`, not to a
|
|
8
|
+
* page. This module parses/serialises that shape and applies the gate;
|
|
9
|
+
* everything else (index, history, supersede) builds on it.
|
|
10
|
+
*
|
|
11
|
+
* @module services/wiki/wiki-page
|
|
12
|
+
*/
|
|
13
|
+
import { type WikiKeepBecause } from '../../constants.js';
|
|
14
|
+
/** Frontmatter every page carries (agents set the first block; the system fills the rest). */
|
|
15
|
+
export interface WikiPageFrontmatter {
|
|
16
|
+
title: string;
|
|
17
|
+
/** One-line conclusion: what this page means for the team/project. */
|
|
18
|
+
summary: string;
|
|
19
|
+
keep_because: WikiKeepBecause;
|
|
20
|
+
tags?: string[];
|
|
21
|
+
/** Roles allowed to read the page; empty/absent = everyone in the vault's instance. */
|
|
22
|
+
visibility?: string[];
|
|
23
|
+
source?: string;
|
|
24
|
+
caller?: string;
|
|
25
|
+
recorded?: string;
|
|
26
|
+
updated?: string;
|
|
27
|
+
superseded_by?: string;
|
|
28
|
+
superseded_at?: string;
|
|
29
|
+
superseded_reason?: string;
|
|
30
|
+
proposed_by?: string;
|
|
31
|
+
/** Anything else on the page (migrated fields such as `confidence`, `migrated_from`). */
|
|
32
|
+
[key: string]: unknown;
|
|
33
|
+
}
|
|
34
|
+
/** A parsed page. */
|
|
35
|
+
export interface WikiPage {
|
|
36
|
+
frontmatter: Partial<WikiPageFrontmatter>;
|
|
37
|
+
body: string;
|
|
38
|
+
/** True when the file had a `---` block at all. */
|
|
39
|
+
hadFrontmatter: boolean;
|
|
40
|
+
}
|
|
41
|
+
/** Why a page write was refused by the retention gate. */
|
|
42
|
+
export interface RetentionRefusal {
|
|
43
|
+
reason: 'retention_gate';
|
|
44
|
+
missing: string[];
|
|
45
|
+
message: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Split a page into frontmatter + body. Tolerant: a page without a block
|
|
49
|
+
* parses as `{ frontmatter: {}, body: raw }`; a malformed block is left in
|
|
50
|
+
* the body untouched.
|
|
51
|
+
*
|
|
52
|
+
* @param raw - File content
|
|
53
|
+
* @returns The parsed page
|
|
54
|
+
*/
|
|
55
|
+
export declare function parsePage(raw: string): WikiPage;
|
|
56
|
+
/**
|
|
57
|
+
* Serialise frontmatter + body back into a file. Keys are written in the
|
|
58
|
+
* canonical order of {@link WIKI_KB_CONSTANTS.FRONTMATTER_KEYS} first, then
|
|
59
|
+
* any extra keys, so diffs stay readable.
|
|
60
|
+
*
|
|
61
|
+
* @param frontmatter - Fields to write (undefined values are dropped)
|
|
62
|
+
* @param body - Markdown body
|
|
63
|
+
* @returns File content
|
|
64
|
+
*/
|
|
65
|
+
export declare function serializePage(frontmatter: Partial<WikiPageFrontmatter>, body: string): string;
|
|
66
|
+
/**
|
|
67
|
+
* Apply the retention gate to a page write: `title`, a non-empty `summary`
|
|
68
|
+
* and a valid `keep_because` are required. Returns null when the page
|
|
69
|
+
* passes.
|
|
70
|
+
*
|
|
71
|
+
* @param fm - Frontmatter the writer supplied
|
|
72
|
+
* @returns A refusal describing what is missing, or null
|
|
73
|
+
*/
|
|
74
|
+
export declare function checkRetention(fm: Partial<WikiPageFrontmatter>): RetentionRefusal | null;
|
|
75
|
+
/**
|
|
76
|
+
* The single index line for a page: `- [title](path) — summary`, with a
|
|
77
|
+
* `⟶ superseded by <path>` marker when applicable.
|
|
78
|
+
*
|
|
79
|
+
* @param relativePath - Vault-relative page path
|
|
80
|
+
* @param fm - The page's frontmatter
|
|
81
|
+
* @returns One markdown list line
|
|
82
|
+
*/
|
|
83
|
+
export declare function indexLineFor(relativePath: string, fm: Partial<WikiPageFrontmatter>): string;
|
|
84
|
+
/**
|
|
85
|
+
* Whether a viewer role may read a page. No `visibility` list = public
|
|
86
|
+
* within the instance; a canonical role (owner/orchestrator) always may.
|
|
87
|
+
*
|
|
88
|
+
* @param fm - Page frontmatter
|
|
89
|
+
* @param viewerRole - Role of the reader, or undefined for the owner/UI
|
|
90
|
+
* @returns True when readable
|
|
91
|
+
*/
|
|
92
|
+
export declare function isVisibleTo(fm: Partial<WikiPageFrontmatter>, viewerRole?: string): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Collapse whitespace and cut to a maximum length (with an ellipsis).
|
|
95
|
+
*
|
|
96
|
+
* @param value - Text
|
|
97
|
+
* @param max - Maximum characters
|
|
98
|
+
* @returns One line
|
|
99
|
+
*/
|
|
100
|
+
export declare function oneLine(value: string, max: number): string;
|
|
101
|
+
//# sourceMappingURL=wiki-page.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki-page.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAqB,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE7E,8FAA8F;AAC9F,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,eAAe,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,uFAAuF;IACvF,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yFAAyF;IACzF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,qBAAqB;AACrB,MAAM,WAAW,QAAQ;IACvB,WAAW,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,0DAA0D;AAC1D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAW/C;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAU7F;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,gBAAgB,GAAG,IAAI,CAiBxF;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,MAAM,CAK3F;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,mBAAmB,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAM1F;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAG1D"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The page contract of the LLM-wiki.
|
|
3
|
+
*
|
|
4
|
+
* A vault page is markdown with YAML frontmatter. Two fields make a page a
|
|
5
|
+
* piece of knowledge rather than a bookmark: `summary` (the one-line
|
|
6
|
+
* conclusion — what this means for us) and `keep_because` (the reason it
|
|
7
|
+
* earns a place at all). Without them a write goes to `log.md`, not to a
|
|
8
|
+
* page. This module parses/serialises that shape and applies the gate;
|
|
9
|
+
* everything else (index, history, supersede) builds on it.
|
|
10
|
+
*
|
|
11
|
+
* @module services/wiki/wiki-page
|
|
12
|
+
*/
|
|
13
|
+
import { parse as parseYAML, stringify as stringifyYAML } from 'yaml';
|
|
14
|
+
import { WIKI_KB_CONSTANTS } from '../../constants.js';
|
|
15
|
+
/**
|
|
16
|
+
* Split a page into frontmatter + body. Tolerant: a page without a block
|
|
17
|
+
* parses as `{ frontmatter: {}, body: raw }`; a malformed block is left in
|
|
18
|
+
* the body untouched.
|
|
19
|
+
*
|
|
20
|
+
* @param raw - File content
|
|
21
|
+
* @returns The parsed page
|
|
22
|
+
*/
|
|
23
|
+
export function parsePage(raw) {
|
|
24
|
+
const normalized = raw.replace(/\r\n/g, '\n');
|
|
25
|
+
const m = normalized.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);
|
|
26
|
+
if (!m)
|
|
27
|
+
return { frontmatter: {}, body: normalized, hadFrontmatter: false };
|
|
28
|
+
try {
|
|
29
|
+
const parsed = parseYAML(m[1]);
|
|
30
|
+
const fm = parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : {};
|
|
31
|
+
return { frontmatter: fm, body: m[2], hadFrontmatter: true };
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return { frontmatter: {}, body: normalized, hadFrontmatter: false };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Serialise frontmatter + body back into a file. Keys are written in the
|
|
39
|
+
* canonical order of {@link WIKI_KB_CONSTANTS.FRONTMATTER_KEYS} first, then
|
|
40
|
+
* any extra keys, so diffs stay readable.
|
|
41
|
+
*
|
|
42
|
+
* @param frontmatter - Fields to write (undefined values are dropped)
|
|
43
|
+
* @param body - Markdown body
|
|
44
|
+
* @returns File content
|
|
45
|
+
*/
|
|
46
|
+
export function serializePage(frontmatter, body) {
|
|
47
|
+
const ordered = {};
|
|
48
|
+
for (const key of WIKI_KB_CONSTANTS.FRONTMATTER_KEYS) {
|
|
49
|
+
if (frontmatter[key] !== undefined)
|
|
50
|
+
ordered[key] = frontmatter[key];
|
|
51
|
+
}
|
|
52
|
+
for (const [key, value] of Object.entries(frontmatter)) {
|
|
53
|
+
if (!(key in ordered) && value !== undefined)
|
|
54
|
+
ordered[key] = value;
|
|
55
|
+
}
|
|
56
|
+
const yaml = stringifyYAML(ordered).trimEnd();
|
|
57
|
+
return `---\n${yaml}\n---\n${body.replace(/^\n+/, '')}`;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Apply the retention gate to a page write: `title`, a non-empty `summary`
|
|
61
|
+
* and a valid `keep_because` are required. Returns null when the page
|
|
62
|
+
* passes.
|
|
63
|
+
*
|
|
64
|
+
* @param fm - Frontmatter the writer supplied
|
|
65
|
+
* @returns A refusal describing what is missing, or null
|
|
66
|
+
*/
|
|
67
|
+
export function checkRetention(fm) {
|
|
68
|
+
const missing = [];
|
|
69
|
+
if (!fm.title || !String(fm.title).trim())
|
|
70
|
+
missing.push('title');
|
|
71
|
+
const summary = typeof fm.summary === 'string' ? fm.summary.trim() : '';
|
|
72
|
+
if (!summary)
|
|
73
|
+
missing.push('summary');
|
|
74
|
+
else if (summary.length > WIKI_KB_CONSTANTS.SUMMARY_MAX_CHARS)
|
|
75
|
+
missing.push(`summary (≤ ${WIKI_KB_CONSTANTS.SUMMARY_MAX_CHARS} chars)`);
|
|
76
|
+
if (!fm.keep_because || !WIKI_KB_CONSTANTS.KEEP_BECAUSE.includes(String(fm.keep_because))) {
|
|
77
|
+
missing.push(`keep_because (one of ${WIKI_KB_CONSTANTS.KEEP_BECAUSE.join(' | ')})`);
|
|
78
|
+
}
|
|
79
|
+
if (missing.length === 0)
|
|
80
|
+
return null;
|
|
81
|
+
return {
|
|
82
|
+
reason: 'retention_gate',
|
|
83
|
+
missing,
|
|
84
|
+
message: `A page needs ${missing.join(', ')}. Default is to NOT keep: write a page only when it changes a decision, ` +
|
|
85
|
+
`contradicts what we believed, is a citable hard fact, or a reusable method — otherwise append to llm-curated/log.md.`,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* The single index line for a page: `- [title](path) — summary`, with a
|
|
90
|
+
* `⟶ superseded by <path>` marker when applicable.
|
|
91
|
+
*
|
|
92
|
+
* @param relativePath - Vault-relative page path
|
|
93
|
+
* @param fm - The page's frontmatter
|
|
94
|
+
* @returns One markdown list line
|
|
95
|
+
*/
|
|
96
|
+
export function indexLineFor(relativePath, fm) {
|
|
97
|
+
const title = oneLine(String(fm.title ?? relativePath.split('/').pop() ?? relativePath), WIKI_KB_CONSTANTS.TITLE_MAX_CHARS);
|
|
98
|
+
const summary = oneLine(String(fm.summary ?? ''), WIKI_KB_CONSTANTS.SUMMARY_MAX_CHARS);
|
|
99
|
+
const superseded = fm.superseded_by ? ` ⟶ superseded by ${fm.superseded_by}` : '';
|
|
100
|
+
return `- [${title}](${relativePath})${summary ? ` — ${summary}` : ''}${superseded}`;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Whether a viewer role may read a page. No `visibility` list = public
|
|
104
|
+
* within the instance; a canonical role (owner/orchestrator) always may.
|
|
105
|
+
*
|
|
106
|
+
* @param fm - Page frontmatter
|
|
107
|
+
* @param viewerRole - Role of the reader, or undefined for the owner/UI
|
|
108
|
+
* @returns True when readable
|
|
109
|
+
*/
|
|
110
|
+
export function isVisibleTo(fm, viewerRole) {
|
|
111
|
+
const list = Array.isArray(fm.visibility) ? fm.visibility.map((v) => String(v).toLowerCase()) : [];
|
|
112
|
+
if (list.length === 0)
|
|
113
|
+
return true;
|
|
114
|
+
if (!viewerRole)
|
|
115
|
+
return true;
|
|
116
|
+
const role = viewerRole.toLowerCase();
|
|
117
|
+
return role === 'orchestrator' || role === 'owner' || list.includes(role);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Collapse whitespace and cut to a maximum length (with an ellipsis).
|
|
121
|
+
*
|
|
122
|
+
* @param value - Text
|
|
123
|
+
* @param max - Maximum characters
|
|
124
|
+
* @returns One line
|
|
125
|
+
*/
|
|
126
|
+
export function oneLine(value, max) {
|
|
127
|
+
const flat = value.replace(/\\n/g, ' ').replace(/\s+/g, ' ').trim();
|
|
128
|
+
return flat.length <= max ? flat : `${flat.slice(0, max - 1)}…`;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=wiki-page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki-page.js","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-page.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Write-policy decisions for a vault (SCHEMA.md `write_policy`).
|
|
3
|
+
*
|
|
4
|
+
* Who wrote is resolved by the server from the `X-Agent-Session` header
|
|
5
|
+
* (session → team member → role), never from a role the caller claims.
|
|
6
|
+
* The owner (dashboard, no session) and the orchestrator are canonical.
|
|
7
|
+
*
|
|
8
|
+
* @module services/wiki/wiki-policy
|
|
9
|
+
*/
|
|
10
|
+
import type { VaultSchema } from './wiki.types.js';
|
|
11
|
+
/** What a write by a given role becomes. */
|
|
12
|
+
export type WriteDecision = 'canonical' | 'proposed';
|
|
13
|
+
/**
|
|
14
|
+
* Decide whether a writer's page lands directly or as a proposal.
|
|
15
|
+
*
|
|
16
|
+
* Rules, in order: no role (owner/UI) → canonical; role listed in
|
|
17
|
+
* `canonical` → canonical; role listed in `proposed_only` → proposed;
|
|
18
|
+
* `worker` in `proposed_only` covers every role not listed elsewhere;
|
|
19
|
+
* an unlisted role with no `worker` catch-all → proposed (safe default).
|
|
20
|
+
*
|
|
21
|
+
* @param schema - Vault schema
|
|
22
|
+
* @param role - Writer's role (lower-cased inside), or undefined for the owner
|
|
23
|
+
* @returns The decision
|
|
24
|
+
*/
|
|
25
|
+
export declare function decideWrite(schema: Pick<VaultSchema, 'write_policy'>, role: string | undefined): WriteDecision;
|
|
26
|
+
/**
|
|
27
|
+
* Whether a role may accept/reject proposals or supersede pages (a
|
|
28
|
+
* canonical role).
|
|
29
|
+
*
|
|
30
|
+
* @param schema - Vault schema
|
|
31
|
+
* @param role - Role, or undefined for the owner
|
|
32
|
+
* @returns True when allowed
|
|
33
|
+
*/
|
|
34
|
+
export declare function canReview(schema: Pick<VaultSchema, 'write_policy'>, role: string | undefined): boolean;
|
|
35
|
+
//# sourceMappingURL=wiki-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki-policy.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,4CAA4C;AAC5C,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,UAAU,CAAC;AAErD;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,CAO9G;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEtG"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Write-policy decisions for a vault (SCHEMA.md `write_policy`).
|
|
3
|
+
*
|
|
4
|
+
* Who wrote is resolved by the server from the `X-Agent-Session` header
|
|
5
|
+
* (session → team member → role), never from a role the caller claims.
|
|
6
|
+
* The owner (dashboard, no session) and the orchestrator are canonical.
|
|
7
|
+
*
|
|
8
|
+
* @module services/wiki/wiki-policy
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Decide whether a writer's page lands directly or as a proposal.
|
|
12
|
+
*
|
|
13
|
+
* Rules, in order: no role (owner/UI) → canonical; role listed in
|
|
14
|
+
* `canonical` → canonical; role listed in `proposed_only` → proposed;
|
|
15
|
+
* `worker` in `proposed_only` covers every role not listed elsewhere;
|
|
16
|
+
* an unlisted role with no `worker` catch-all → proposed (safe default).
|
|
17
|
+
*
|
|
18
|
+
* @param schema - Vault schema
|
|
19
|
+
* @param role - Writer's role (lower-cased inside), or undefined for the owner
|
|
20
|
+
* @returns The decision
|
|
21
|
+
*/
|
|
22
|
+
export function decideWrite(schema, role) {
|
|
23
|
+
if (!role)
|
|
24
|
+
return 'canonical';
|
|
25
|
+
const r = role.toLowerCase();
|
|
26
|
+
if (r === 'orchestrator' || r === 'owner')
|
|
27
|
+
return 'canonical';
|
|
28
|
+
const canonical = schema.write_policy.canonical.map((x) => x.toLowerCase());
|
|
29
|
+
if (canonical.includes(r))
|
|
30
|
+
return 'canonical';
|
|
31
|
+
return 'proposed';
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Whether a role may accept/reject proposals or supersede pages (a
|
|
35
|
+
* canonical role).
|
|
36
|
+
*
|
|
37
|
+
* @param schema - Vault schema
|
|
38
|
+
* @param role - Role, or undefined for the owner
|
|
39
|
+
* @returns True when allowed
|
|
40
|
+
*/
|
|
41
|
+
export function canReview(schema, role) {
|
|
42
|
+
return decideWrite(schema, role) === 'canonical';
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=wiki-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki-policy.js","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,WAAW,CAAC,MAAyC,EAAE,IAAwB;IAC7F,IAAI,CAAC,IAAI;QAAE,OAAO,WAAW,CAAC;IAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC7B,IAAI,CAAC,KAAK,cAAc,IAAI,CAAC,KAAK,OAAO;QAAE,OAAO,WAAW,CAAC;IAC9D,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5E,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,WAAW,CAAC;IAC9C,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,MAAyC,EAAE,IAAwB;IAC3F,OAAO,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,WAAW,CAAC;AACnD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wiki-process.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-process.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,qBAAqB;IACpC,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iFAAiF;IACjF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,8BAA8B;IAC9B,IAAI,EAAE,aAAa,CAAC;IACpB;;;;;;OAMG;IACH,YAAY,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC5C,kDAAkD;IAClD,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,MAAM,uBAAuB,GAC/B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAA;CAAE,GAC5C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,kBAAkB,GAAG,oBAAoB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtF;;GAEG;AACH,qBAAa,kBAAkB;IAK3B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IALxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;gBAGtB,KAAK,GAAE,gBAAiD,EACxD,KAAK,GAAE,gBAAiD;IAK3E,MAAM,CAAC,WAAW,IAAI,kBAAkB;IAKxC,uBAAuB;IACvB,MAAM,CAAC,gBAAgB,IAAI,IAAI;IAI/B;;;;;;OAMG;IACG,SAAS,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IA2E/E;;;OAGG;IACH,OAAO,CAAC,eAAe;
|
|
1
|
+
{"version":3,"file":"wiki-process.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-process.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,qBAAqB;IACpC,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iFAAiF;IACjF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,8BAA8B;IAC9B,IAAI,EAAE,aAAa,CAAC;IACpB;;;;;;OAMG;IACH,YAAY,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC5C,kDAAkD;IAClD,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,MAAM,uBAAuB,GAC/B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAA;CAAE,GAC5C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,kBAAkB,GAAG,oBAAoB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtF;;GAEG;AACH,qBAAa,kBAAkB;IAK3B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IALxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;gBAGtB,KAAK,GAAE,gBAAiD,EACxD,KAAK,GAAE,gBAAiD;IAK3E,MAAM,CAAC,WAAW,IAAI,kBAAkB;IAKxC,uBAAuB;IACvB,MAAM,CAAC,gBAAgB,IAAI,IAAI;IAI/B;;;;;;OAMG;IACG,SAAS,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IA2E/E;;;OAGG;IACH,OAAO,CAAC,eAAe;CAaxB"}
|
|
@@ -126,12 +126,15 @@ export class WikiProcessService {
|
|
|
126
126
|
*/
|
|
127
127
|
classifierNotes() {
|
|
128
128
|
return [
|
|
129
|
-
'
|
|
129
|
+
'Default is to NOT keep. A page must change a decision, contradict what we believed, be a citable hard fact, or a reusable method — otherwise append it to llm-curated/log.md (no gate) or skip it.',
|
|
130
|
+
'A page needs three things or wiki-ingest refuses it: --title, a one-line --summary that states the CONCLUSION (what this means for us, not what the source said), and --keep-because <changes_decision|contradicts|hard_fact|reusable_method>.',
|
|
131
|
+
'If the item changes an earlier conclusion, write the new page and then call wiki-supersede old→new with the reason; never delete or overwrite the old page.',
|
|
130
132
|
'Pick the target page path under llm-curated/. You may invent sub-folder names — there is NO preset taxonomy. Examples: llm-curated/customers/anthropic.md, llm-curated/decisions/2026-05-22-pricing-lock.md, llm-curated/patterns/embedding-fallback.md.',
|
|
131
133
|
'NEVER target a frozen folder (vaultContext.schemaSummary.frozenPaths). The ingest call will reject these with HTTP 422.',
|
|
132
134
|
'PREFER merging into an existing relevant page over creating a new one. Use vaultContext.candidatePages to check first; only create a new page when nothing fits.',
|
|
133
135
|
'If after reading the context you decide the item is actually NOT wiki-worthy after all (duplicate of existing content, low signal), mark it skipped via POST /queue/:id/skip with a `skipReason`.',
|
|
134
|
-
'When committing: 1) call wiki-ingest with the target path; 2) call POST /queue/:id/process with { ingested, pagesWritten, targetPath, summary }.',
|
|
136
|
+
'When committing: 1) call wiki-ingest with the target path + title/summary/keep-because; 2) call POST /queue/:id/process with { ingested, pagesWritten, targetPath, summary }.',
|
|
137
|
+
'Never paste credentials or customer personal data; ingest refuses secrets and applies the vault privacy policy to personal data.',
|
|
135
138
|
];
|
|
136
139
|
}
|
|
137
140
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wiki-process.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-process.service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"wiki-process.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-process.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
* WikiQueryService — read a vault and build the `system-context` payload
|
|
3
3
|
* that the caller's runtime feeds to its LLM for synthesis.
|
|
4
4
|
*
|
|
5
|
+
* Retrieval is two-step: the payload leads with the vault's one-line
|
|
6
|
+
* index (`llm-curated/index.md`, trimmed to the query's neighbourhood
|
|
7
|
+
* when it would not fit), then BM25 candidate pages; the caller picks
|
|
8
|
+
* 3–5 paths and asks again with `pages` to get them in full. Superseded
|
|
9
|
+
* pages and pages the viewer's role may not see never appear. Every call
|
|
10
|
+
* is written to the vault's usage ledger (what was asked, what was read,
|
|
11
|
+
* whether it was a miss).
|
|
12
|
+
*
|
|
5
13
|
* Per v2.1 spec §3 the skill is split into two halves:
|
|
6
14
|
* - System-context (LLM-agnostic) → what this service produces
|
|
7
15
|
* - Task-instruction (per-LLM) → lives on disk under
|
|
@@ -15,6 +23,9 @@
|
|
|
15
23
|
*/
|
|
16
24
|
import { SchemaLoaderService } from './schema-loader.service.js';
|
|
17
25
|
import { VaultSchema } from './wiki.types.js';
|
|
26
|
+
import { WikiIndexService } from './wiki-index.service.js';
|
|
27
|
+
import { WikiUsageService } from './wiki-usage.service.js';
|
|
28
|
+
import { type WikiPageFrontmatter } from './wiki-page.js';
|
|
18
29
|
export interface WikiQueryInput {
|
|
19
30
|
/** Absolute path to the vault root. */
|
|
20
31
|
vaultPath: string;
|
|
@@ -24,6 +35,14 @@ export interface WikiQueryInput {
|
|
|
24
35
|
topK?: number;
|
|
25
36
|
/** How many tail log.md entries to include (default 20). */
|
|
26
37
|
recentLogEntries?: number;
|
|
38
|
+
/** Step 2: vault-relative pages to return in full (max 8). */
|
|
39
|
+
pages?: string[];
|
|
40
|
+
/** Who is asking (session name) — for the usage ledger. */
|
|
41
|
+
agent?: string;
|
|
42
|
+
/** Reader's role — pages whose `visibility` excludes it are hidden. Undefined = owner. */
|
|
43
|
+
viewerRole?: string;
|
|
44
|
+
/** Include superseded pages (default false). */
|
|
45
|
+
includeSuperseded?: boolean;
|
|
27
46
|
}
|
|
28
47
|
export interface WikiLogEntry {
|
|
29
48
|
timestamp: string;
|
|
@@ -40,12 +59,27 @@ export interface WikiCandidatePage {
|
|
|
40
59
|
/** Simple keyword overlap score; higher = more relevant. */
|
|
41
60
|
score: number;
|
|
42
61
|
}
|
|
62
|
+
/** A page returned in full (step 2). */
|
|
63
|
+
export interface WikiFullPage {
|
|
64
|
+
path: string;
|
|
65
|
+
frontmatter: Partial<WikiPageFrontmatter>;
|
|
66
|
+
content: string;
|
|
67
|
+
truncated: boolean;
|
|
68
|
+
}
|
|
43
69
|
export interface WikiQuerySystemContext {
|
|
44
70
|
vault: {
|
|
45
71
|
scope: VaultSchema['vault_scope'];
|
|
46
72
|
id: string;
|
|
47
73
|
path: string;
|
|
48
74
|
};
|
|
75
|
+
/** Step 1: the one-line-per-page index (trimmed to the query when large). */
|
|
76
|
+
index: {
|
|
77
|
+
text: string;
|
|
78
|
+
truncated: boolean;
|
|
79
|
+
entries: number;
|
|
80
|
+
};
|
|
81
|
+
/** Step 2: pages the caller asked for in full. */
|
|
82
|
+
pages: WikiFullPage[];
|
|
49
83
|
schemaSummary: {
|
|
50
84
|
hardcoded: Array<{
|
|
51
85
|
path: string;
|
|
@@ -81,7 +115,9 @@ export declare class WikiQueryService {
|
|
|
81
115
|
private static instance;
|
|
82
116
|
private readonly logger;
|
|
83
117
|
private readonly schemaLoader;
|
|
84
|
-
|
|
118
|
+
private readonly index;
|
|
119
|
+
private readonly usage;
|
|
120
|
+
constructor(schemaLoader?: SchemaLoaderService, index?: WikiIndexService, usage?: WikiUsageService);
|
|
85
121
|
static getInstance(): WikiQueryService;
|
|
86
122
|
/** Test-only reset. */
|
|
87
123
|
static _resetForTesting(): void;
|
|
@@ -103,23 +139,31 @@ export declare class WikiQueryService {
|
|
|
103
139
|
*/
|
|
104
140
|
private readRecentLog;
|
|
105
141
|
/**
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
142
|
+
* Rank the vault's `llm-curated/` pages by Okapi BM25 against the query,
|
|
143
|
+
* reusing {@link WikiSearchService.searchCorpus} so the agent-facing
|
|
144
|
+
* skill scores identically to the wiki UI search. Seed files (index,
|
|
145
|
+
* log) are excluded; superseded/invisible/proposed pages are dropped by
|
|
146
|
+
* the search filters.
|
|
147
|
+
*
|
|
148
|
+
* @param vaultPath - Vault root
|
|
149
|
+
* @param query - Query text
|
|
150
|
+
* @param topK - How many candidates
|
|
151
|
+
* @param filters - Viewer/superseded filters
|
|
152
|
+
* @returns Candidates with truncated excerpts
|
|
112
153
|
*/
|
|
113
154
|
private findCandidatePages;
|
|
114
155
|
/**
|
|
115
|
-
*
|
|
116
|
-
*
|
|
156
|
+
* Step 2: return the requested pages in full (frontmatter + content),
|
|
157
|
+
* honouring frozen paths, visibility and supersession. Unknown paths
|
|
158
|
+
* are skipped silently (the caller sees which ones came back).
|
|
117
159
|
*
|
|
118
|
-
* @param vaultPath -
|
|
119
|
-
* @param schema -
|
|
120
|
-
* @
|
|
160
|
+
* @param vaultPath - Vault root
|
|
161
|
+
* @param schema - Vault schema (frozen folders are readable — SOPs/norms are knowledge too)
|
|
162
|
+
* @param requested - Vault-relative paths
|
|
163
|
+
* @param filters - Viewer/superseded filters
|
|
164
|
+
* @returns Pages in request order
|
|
121
165
|
*/
|
|
122
|
-
private
|
|
166
|
+
private readFullPages;
|
|
123
167
|
private readExcerpt;
|
|
124
168
|
}
|
|
125
169
|
//# sourceMappingURL=wiki-query.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wiki-query.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-query.service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"wiki-query.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/wiki/wiki-query.service.ts"],"names":[],"mappings":"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"}
|