daftari 1.0.0
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 +37 -0
- package/LICENSE +21 -0
- package/README.md +259 -0
- package/dist/access/locks.d.ts +19 -0
- package/dist/access/locks.d.ts.map +1 -0
- package/dist/access/locks.js +112 -0
- package/dist/access/locks.js.map +1 -0
- package/dist/access/rbac.d.ts +18 -0
- package/dist/access/rbac.d.ts.map +1 -0
- package/dist/access/rbac.js +48 -0
- package/dist/access/rbac.js.map +1 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +216 -0
- package/dist/cli.js.map +1 -0
- package/dist/curation/lint.d.ts +20 -0
- package/dist/curation/lint.d.ts.map +1 -0
- package/dist/curation/lint.js +176 -0
- package/dist/curation/lint.js.map +1 -0
- package/dist/curation/provenance.d.ts +21 -0
- package/dist/curation/provenance.d.ts.map +1 -0
- package/dist/curation/provenance.js +80 -0
- package/dist/curation/provenance.js.map +1 -0
- package/dist/curation/staleness.d.ts +19 -0
- package/dist/curation/staleness.d.ts.map +1 -0
- package/dist/curation/staleness.js +67 -0
- package/dist/curation/staleness.js.map +1 -0
- package/dist/curation/tension.d.ts +20 -0
- package/dist/curation/tension.d.ts.map +1 -0
- package/dist/curation/tension.js +134 -0
- package/dist/curation/tension.js.map +1 -0
- package/dist/frontmatter/parser.d.ts +10 -0
- package/dist/frontmatter/parser.d.ts.map +1 -0
- package/dist/frontmatter/parser.js +29 -0
- package/dist/frontmatter/parser.js.map +1 -0
- package/dist/frontmatter/schema.d.ts +7 -0
- package/dist/frontmatter/schema.d.ts.map +1 -0
- package/dist/frontmatter/schema.js +115 -0
- package/dist/frontmatter/schema.js.map +1 -0
- package/dist/frontmatter/types.d.ts +41 -0
- package/dist/frontmatter/types.d.ts.map +1 -0
- package/dist/frontmatter/types.js +8 -0
- package/dist/frontmatter/types.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +94 -0
- package/dist/index.js.map +1 -0
- package/dist/search/bm25.d.ts +19 -0
- package/dist/search/bm25.d.ts.map +1 -0
- package/dist/search/bm25.js +115 -0
- package/dist/search/bm25.js.map +1 -0
- package/dist/search/hybrid.d.ts +38 -0
- package/dist/search/hybrid.d.ts.map +1 -0
- package/dist/search/hybrid.js +162 -0
- package/dist/search/hybrid.js.map +1 -0
- package/dist/search/reindex.d.ts +15 -0
- package/dist/search/reindex.d.ts.map +1 -0
- package/dist/search/reindex.js +189 -0
- package/dist/search/reindex.js.map +1 -0
- package/dist/search/vector.d.ts +9 -0
- package/dist/search/vector.d.ts.map +1 -0
- package/dist/search/vector.js +128 -0
- package/dist/search/vector.js.map +1 -0
- package/dist/server.d.ts +6 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +72 -0
- package/dist/server.js.map +1 -0
- package/dist/storage/index-db.d.ts +37 -0
- package/dist/storage/index-db.d.ts.map +1 -0
- package/dist/storage/index-db.js +145 -0
- package/dist/storage/index-db.js.map +1 -0
- package/dist/storage/local.d.ts +6 -0
- package/dist/storage/local.d.ts.map +1 -0
- package/dist/storage/local.js +57 -0
- package/dist/storage/local.js.map +1 -0
- package/dist/tools/curation.d.ts +22 -0
- package/dist/tools/curation.d.ts.map +1 -0
- package/dist/tools/curation.js +202 -0
- package/dist/tools/curation.js.map +1 -0
- package/dist/tools/read.d.ts +74 -0
- package/dist/tools/read.d.ts.map +1 -0
- package/dist/tools/read.js +254 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/search.d.ts +13 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +190 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/write.d.ts +18 -0
- package/dist/tools/write.d.ts.map +1 -0
- package/dist/tools/write.js +465 -0
- package/dist/tools/write.js.map +1 -0
- package/dist/utils/config.d.ts +12 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +94 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/git.d.ts +23 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +114 -0
- package/dist/utils/git.js.map +1 -0
- package/package.json +69 -0
- package/templates/config.yaml +31 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
// Curation-path tools: vault_tension_log, vault_lint, vault_provenance.
|
|
2
|
+
//
|
|
3
|
+
// These are the advisory surface of the curation engine. vault_lint reports
|
|
4
|
+
// problems but fixes nothing; vault_tension_log records a contradiction but
|
|
5
|
+
// resolves nothing; vault_provenance just reads back write history. Each tool
|
|
6
|
+
// exposes a pure logic function (returns Result, never throws) plus an MCP
|
|
7
|
+
// ToolDefinition, mirroring the read- and write-path tools.
|
|
8
|
+
import { hasAnyRead } from "../access/rbac.js";
|
|
9
|
+
import { LINT_CHECKS, runLint } from "../curation/lint.js";
|
|
10
|
+
import { readProvenanceLog } from "../curation/provenance.js";
|
|
11
|
+
import { addTension } from "../curation/tension.js";
|
|
12
|
+
import { ok } from "../frontmatter/types.js";
|
|
13
|
+
// Curation tools are open to any role with at least one read grant. A guest
|
|
14
|
+
// (or any role with no read access) is denied.
|
|
15
|
+
function requireReadAccess(tool, access) {
|
|
16
|
+
if (access && !hasAnyRead(access.role)) {
|
|
17
|
+
return {
|
|
18
|
+
ok: false,
|
|
19
|
+
error: new Error(`access denied: role '${access.roleName}' cannot use ${tool}`),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
return ok(undefined);
|
|
23
|
+
}
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// vault_tension_log
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
export async function vaultTensionLog(vaultRoot, args, access) {
|
|
28
|
+
const allowed = requireReadAccess("vault_tension_log", access);
|
|
29
|
+
if (!allowed.ok)
|
|
30
|
+
return allowed;
|
|
31
|
+
const str = (field) => {
|
|
32
|
+
const v = args[field];
|
|
33
|
+
if (typeof v !== "string" || v.trim().length === 0) {
|
|
34
|
+
return {
|
|
35
|
+
ok: false,
|
|
36
|
+
error: new Error(`vault_tension_log requires a non-empty '${field}' argument`),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
return ok(v);
|
|
40
|
+
};
|
|
41
|
+
const title = str("title");
|
|
42
|
+
if (!title.ok)
|
|
43
|
+
return title;
|
|
44
|
+
const sourceA = str("sourceA");
|
|
45
|
+
if (!sourceA.ok)
|
|
46
|
+
return sourceA;
|
|
47
|
+
const sourceB = str("sourceB");
|
|
48
|
+
if (!sourceB.ok)
|
|
49
|
+
return sourceB;
|
|
50
|
+
const claimA = str("claimA");
|
|
51
|
+
if (!claimA.ok)
|
|
52
|
+
return claimA;
|
|
53
|
+
const claimB = str("claimB");
|
|
54
|
+
if (!claimB.ok)
|
|
55
|
+
return claimB;
|
|
56
|
+
const agent = str("agent");
|
|
57
|
+
if (!agent.ok)
|
|
58
|
+
return agent;
|
|
59
|
+
return addTension(vaultRoot, {
|
|
60
|
+
title: title.value,
|
|
61
|
+
sourceA: sourceA.value,
|
|
62
|
+
sourceB: sourceB.value,
|
|
63
|
+
claimA: claimA.value,
|
|
64
|
+
claimB: claimB.value,
|
|
65
|
+
loggedBy: agent.value,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
export async function vaultLint(vaultRoot, args = {}, access) {
|
|
69
|
+
const allowed = requireReadAccess("vault_lint", access);
|
|
70
|
+
if (!allowed.ok)
|
|
71
|
+
return allowed;
|
|
72
|
+
let filter = null;
|
|
73
|
+
if (args.filter !== undefined && args.filter !== null) {
|
|
74
|
+
if (typeof args.filter !== "string" ||
|
|
75
|
+
!LINT_CHECKS.includes(args.filter)) {
|
|
76
|
+
return {
|
|
77
|
+
ok: false,
|
|
78
|
+
error: new Error(`vault_lint 'filter' must be one of: ${LINT_CHECKS.join(", ")}`),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
filter = args.filter;
|
|
82
|
+
}
|
|
83
|
+
const report = await runLint(vaultRoot);
|
|
84
|
+
if (!report.ok)
|
|
85
|
+
return report;
|
|
86
|
+
if (filter) {
|
|
87
|
+
const findings = report.value.checks[filter];
|
|
88
|
+
return ok({
|
|
89
|
+
generatedAt: report.value.generatedAt,
|
|
90
|
+
filter,
|
|
91
|
+
checks: { [filter]: findings },
|
|
92
|
+
totalFindings: findings.length,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
return ok({
|
|
96
|
+
generatedAt: report.value.generatedAt,
|
|
97
|
+
filter: null,
|
|
98
|
+
checks: report.value.checks,
|
|
99
|
+
totalFindings: report.value.totalFindings,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
// Returns the write history of a single document, oldest entry first, read
|
|
103
|
+
// from the .daftari/curation-log.jsonl provenance trail.
|
|
104
|
+
export async function vaultProvenance(vaultRoot, args, access) {
|
|
105
|
+
const allowed = requireReadAccess("vault_provenance", access);
|
|
106
|
+
if (!allowed.ok)
|
|
107
|
+
return allowed;
|
|
108
|
+
const filePath = args.filePath;
|
|
109
|
+
if (typeof filePath !== "string" || filePath.trim().length === 0) {
|
|
110
|
+
return {
|
|
111
|
+
ok: false,
|
|
112
|
+
error: new Error("vault_provenance requires a non-empty 'filePath' argument"),
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
const log = await readProvenanceLog(vaultRoot);
|
|
116
|
+
if (!log.ok)
|
|
117
|
+
return log;
|
|
118
|
+
const history = log.value.filter((e) => e.file === filePath);
|
|
119
|
+
return ok({ path: filePath, count: history.length, history });
|
|
120
|
+
}
|
|
121
|
+
// ---------------------------------------------------------------------------
|
|
122
|
+
// MCP tool definitions
|
|
123
|
+
// ---------------------------------------------------------------------------
|
|
124
|
+
export const curationTools = [
|
|
125
|
+
{
|
|
126
|
+
name: "vault_tension_log",
|
|
127
|
+
description: "Record a tension — a contradiction or unresolved pull between two " +
|
|
128
|
+
"vault documents — to the advisory tension log. Records the tension; " +
|
|
129
|
+
"does not resolve it. Entries are logged with status 'unresolved'.",
|
|
130
|
+
inputSchema: {
|
|
131
|
+
type: "object",
|
|
132
|
+
properties: {
|
|
133
|
+
title: {
|
|
134
|
+
type: "string",
|
|
135
|
+
description: "Short title summarizing the tension",
|
|
136
|
+
},
|
|
137
|
+
sourceA: {
|
|
138
|
+
type: "string",
|
|
139
|
+
description: "Vault path of the first document",
|
|
140
|
+
},
|
|
141
|
+
claimA: {
|
|
142
|
+
type: "string",
|
|
143
|
+
description: "What source A claims",
|
|
144
|
+
},
|
|
145
|
+
sourceB: {
|
|
146
|
+
type: "string",
|
|
147
|
+
description: "Vault path of the second document",
|
|
148
|
+
},
|
|
149
|
+
claimB: {
|
|
150
|
+
type: "string",
|
|
151
|
+
description: "What source B claims",
|
|
152
|
+
},
|
|
153
|
+
agent: {
|
|
154
|
+
type: "string",
|
|
155
|
+
description: "Identity logging the tension, e.g. 'agent:claude-code'",
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
required: ["title", "sourceA", "claimA", "sourceB", "claimB", "agent"],
|
|
159
|
+
additionalProperties: false,
|
|
160
|
+
},
|
|
161
|
+
handler: (vaultRoot, args, access) => vaultTensionLog(vaultRoot, args, access),
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
name: "vault_lint",
|
|
165
|
+
description: "Run the advisory curation checks across the vault: stale files past " +
|
|
166
|
+
"TTL, orphan files with no inbound links, old drafts, stagnant " +
|
|
167
|
+
"low-confidence files, and deprecated files still linked from " +
|
|
168
|
+
"canonical ones. Reports problems; never auto-fixes. Optionally filter " +
|
|
169
|
+
"to a single check.",
|
|
170
|
+
inputSchema: {
|
|
171
|
+
type: "object",
|
|
172
|
+
properties: {
|
|
173
|
+
filter: {
|
|
174
|
+
type: "string",
|
|
175
|
+
enum: [...LINT_CHECKS],
|
|
176
|
+
description: "Restrict the report to a single check",
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
additionalProperties: false,
|
|
180
|
+
},
|
|
181
|
+
handler: (vaultRoot, args, access) => vaultLint(vaultRoot, args, access),
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
name: "vault_provenance",
|
|
185
|
+
description: "Return the write history of a single document from the provenance " +
|
|
186
|
+
"log: every create, update, append, promote, and deprecate recorded " +
|
|
187
|
+
"for it, oldest first.",
|
|
188
|
+
inputSchema: {
|
|
189
|
+
type: "object",
|
|
190
|
+
properties: {
|
|
191
|
+
filePath: {
|
|
192
|
+
type: "string",
|
|
193
|
+
description: "Vault-relative path of the document to query",
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
required: ["filePath"],
|
|
197
|
+
additionalProperties: false,
|
|
198
|
+
},
|
|
199
|
+
handler: (vaultRoot, args, access) => vaultProvenance(vaultRoot, args, access),
|
|
200
|
+
},
|
|
201
|
+
];
|
|
202
|
+
//# sourceMappingURL=curation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"curation.js","sourceRoot":"","sources":["../../src/tools/curation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { type AccessContext } from "../access/rbac.js";
|
|
2
|
+
import { type ProvenanceEntry } from "../curation/provenance.js";
|
|
3
|
+
import { type Frontmatter, type Result, type ValidationReport } from "../frontmatter/types.js";
|
|
4
|
+
export interface ToolDefinition {
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
inputSchema: Record<string, unknown>;
|
|
8
|
+
handler: (vaultRoot: string, args: Record<string, unknown>, access?: AccessContext) => Promise<Result<unknown, Error>>;
|
|
9
|
+
}
|
|
10
|
+
export interface VaultReadResult {
|
|
11
|
+
path: string;
|
|
12
|
+
content: string;
|
|
13
|
+
frontmatter: Frontmatter;
|
|
14
|
+
raw: Record<string, unknown>;
|
|
15
|
+
validation: ValidationReport;
|
|
16
|
+
hasFrontmatter: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function vaultRead(vaultRoot: string, path: string, access?: AccessContext): Promise<Result<VaultReadResult, Error>>;
|
|
19
|
+
export interface VaultIndexFilters {
|
|
20
|
+
collection?: string;
|
|
21
|
+
status?: string;
|
|
22
|
+
domain?: string;
|
|
23
|
+
tags?: string[];
|
|
24
|
+
}
|
|
25
|
+
export interface VaultIndexEntry {
|
|
26
|
+
path: string;
|
|
27
|
+
title: string;
|
|
28
|
+
collection: string;
|
|
29
|
+
domain: string;
|
|
30
|
+
status: string;
|
|
31
|
+
confidence: string;
|
|
32
|
+
updated: string;
|
|
33
|
+
tags: string[];
|
|
34
|
+
valid: boolean;
|
|
35
|
+
}
|
|
36
|
+
export interface VaultIndexResult {
|
|
37
|
+
count: number;
|
|
38
|
+
entries: VaultIndexEntry[];
|
|
39
|
+
}
|
|
40
|
+
export declare function vaultIndex(vaultRoot: string, filters?: VaultIndexFilters, access?: AccessContext): Promise<Result<VaultIndexResult, Error>>;
|
|
41
|
+
export interface StalenessDistribution {
|
|
42
|
+
fresh: number;
|
|
43
|
+
aging: number;
|
|
44
|
+
stale: number;
|
|
45
|
+
total: number;
|
|
46
|
+
}
|
|
47
|
+
export interface TensionSummary {
|
|
48
|
+
title: string;
|
|
49
|
+
date: string;
|
|
50
|
+
}
|
|
51
|
+
export interface UnresolvedTensions {
|
|
52
|
+
count: number;
|
|
53
|
+
recent: TensionSummary[];
|
|
54
|
+
}
|
|
55
|
+
export interface RecentWrites {
|
|
56
|
+
count: number;
|
|
57
|
+
entries: ProvenanceEntry[];
|
|
58
|
+
}
|
|
59
|
+
export interface VaultStatusResult {
|
|
60
|
+
vault: string;
|
|
61
|
+
fileCount: number;
|
|
62
|
+
collections: {
|
|
63
|
+
collection: string;
|
|
64
|
+
count: number;
|
|
65
|
+
}[];
|
|
66
|
+
invalidCount: number;
|
|
67
|
+
generatedAt: string;
|
|
68
|
+
stalenessDistribution: StalenessDistribution;
|
|
69
|
+
unresolvedTensions: UnresolvedTensions;
|
|
70
|
+
recentWrites: RecentWrites;
|
|
71
|
+
}
|
|
72
|
+
export declare function vaultStatus(vaultRoot: string, access?: AccessContext): Promise<Result<VaultStatusResult, Error>>;
|
|
73
|
+
export declare const readTools: ToolDefinition[];
|
|
74
|
+
//# sourceMappingURL=read.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
// Read-path tools: vault_read, vault_index, vault_status.
|
|
2
|
+
//
|
|
3
|
+
// Each tool exposes a pure async logic function (returns Result, never throws)
|
|
4
|
+
// plus an MCP ToolDefinition that wraps it. server.ts registers the
|
|
5
|
+
// definitions; tests call the logic functions directly.
|
|
6
|
+
import { canRead, filterByReadPermission } from "../access/rbac.js";
|
|
7
|
+
import { readProvenanceLog } from "../curation/provenance.js";
|
|
8
|
+
import { listStaleFiles } from "../curation/staleness.js";
|
|
9
|
+
import { DEFAULT_TENSION_STATUS, listTensions } from "../curation/tension.js";
|
|
10
|
+
import { parseDocument } from "../frontmatter/parser.js";
|
|
11
|
+
import { DOMAINS, err, ok, STATUSES, } from "../frontmatter/types.js";
|
|
12
|
+
import { listFiles, readFile, resolveVaultPath } from "../storage/local.js";
|
|
13
|
+
export async function vaultRead(vaultRoot, path, access) {
|
|
14
|
+
if (typeof path !== "string" || path.length === 0) {
|
|
15
|
+
return err(new Error("vault_read requires a non-empty 'path' argument"));
|
|
16
|
+
}
|
|
17
|
+
const resolved = resolveVaultPath(vaultRoot, path);
|
|
18
|
+
if (!resolved.ok)
|
|
19
|
+
return resolved;
|
|
20
|
+
const file = await readFile(resolved.value);
|
|
21
|
+
if (!file.ok)
|
|
22
|
+
return file;
|
|
23
|
+
const parsed = parseDocument(file.value);
|
|
24
|
+
if (!parsed.ok)
|
|
25
|
+
return parsed;
|
|
26
|
+
if (access) {
|
|
27
|
+
const collection = collectionOf(path, parsed.value.frontmatter);
|
|
28
|
+
if (!canRead(access.role, collection)) {
|
|
29
|
+
return err(new Error(`access denied: role '${access.roleName}' cannot read ` + `collection '${collection}'`));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return ok({
|
|
33
|
+
path,
|
|
34
|
+
content: parsed.value.content,
|
|
35
|
+
frontmatter: parsed.value.frontmatter,
|
|
36
|
+
raw: parsed.value.raw,
|
|
37
|
+
validation: parsed.value.validation,
|
|
38
|
+
hasFrontmatter: parsed.value.hasFrontmatter,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
// A document's collection is its frontmatter `collection`, falling back to the
|
|
42
|
+
// top-level directory of its vault-relative path.
|
|
43
|
+
function collectionOf(relPath, fm) {
|
|
44
|
+
if (fm.collection)
|
|
45
|
+
return fm.collection;
|
|
46
|
+
const top = relPath.split("/")[0];
|
|
47
|
+
return top ?? "";
|
|
48
|
+
}
|
|
49
|
+
export async function vaultIndex(vaultRoot, filters = {}, access) {
|
|
50
|
+
const list = await listFiles(vaultRoot);
|
|
51
|
+
if (!list.ok)
|
|
52
|
+
return list;
|
|
53
|
+
const entries = [];
|
|
54
|
+
for (const relPath of list.value) {
|
|
55
|
+
const resolved = resolveVaultPath(vaultRoot, relPath);
|
|
56
|
+
if (!resolved.ok)
|
|
57
|
+
continue;
|
|
58
|
+
const file = await readFile(resolved.value);
|
|
59
|
+
if (!file.ok)
|
|
60
|
+
continue;
|
|
61
|
+
const parsed = parseDocument(file.value);
|
|
62
|
+
if (!parsed.ok)
|
|
63
|
+
continue;
|
|
64
|
+
const fm = parsed.value.frontmatter;
|
|
65
|
+
const collection = collectionOf(relPath, fm);
|
|
66
|
+
if (filters.collection && collection !== filters.collection)
|
|
67
|
+
continue;
|
|
68
|
+
if (filters.status && fm.status !== filters.status)
|
|
69
|
+
continue;
|
|
70
|
+
if (filters.domain && fm.domain !== filters.domain)
|
|
71
|
+
continue;
|
|
72
|
+
if (filters.tags && filters.tags.length > 0) {
|
|
73
|
+
const hasAll = filters.tags.every((t) => fm.tags.includes(t));
|
|
74
|
+
if (!hasAll)
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
entries.push({
|
|
78
|
+
path: relPath,
|
|
79
|
+
title: fm.title,
|
|
80
|
+
collection,
|
|
81
|
+
domain: fm.domain,
|
|
82
|
+
status: fm.status,
|
|
83
|
+
confidence: fm.confidence,
|
|
84
|
+
updated: fm.updated,
|
|
85
|
+
tags: fm.tags,
|
|
86
|
+
valid: parsed.value.validation.valid,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
// RBAC: drop documents in collections the role cannot read.
|
|
90
|
+
const visible = access ? filterByReadPermission(access.role, entries) : entries;
|
|
91
|
+
return ok({ count: visible.length, entries: visible });
|
|
92
|
+
}
|
|
93
|
+
// The collection a bare vault-relative path belongs to: its top-level
|
|
94
|
+
// directory. tension/provenance records carry only a path (no frontmatter),
|
|
95
|
+
// so RBAC on those falls back to this path-based collection.
|
|
96
|
+
function topCollection(relPath) {
|
|
97
|
+
return relPath.split("/")[0] ?? "";
|
|
98
|
+
}
|
|
99
|
+
export async function vaultStatus(vaultRoot, access) {
|
|
100
|
+
// vault_status reports only over the documents the role can read.
|
|
101
|
+
const index = await vaultIndex(vaultRoot, {}, access);
|
|
102
|
+
if (!index.ok)
|
|
103
|
+
return index;
|
|
104
|
+
const byCollection = new Map();
|
|
105
|
+
let invalidCount = 0;
|
|
106
|
+
for (const entry of index.value.entries) {
|
|
107
|
+
byCollection.set(entry.collection, (byCollection.get(entry.collection) ?? 0) + 1);
|
|
108
|
+
if (!entry.valid)
|
|
109
|
+
invalidCount += 1;
|
|
110
|
+
}
|
|
111
|
+
const collections = [...byCollection.entries()]
|
|
112
|
+
.sort((a, b) => a[0].localeCompare(b[0]))
|
|
113
|
+
.map(([collection, count]) => ({ collection, count }));
|
|
114
|
+
// Staleness: score every file, then keep only those the index already
|
|
115
|
+
// deemed visible, so the distribution honours RBAC. Threshold 0 makes
|
|
116
|
+
// listStaleFiles return every document with its decay score.
|
|
117
|
+
const visiblePaths = new Set(index.value.entries.map((e) => e.path));
|
|
118
|
+
const staleScan = await listStaleFiles(vaultRoot, 0);
|
|
119
|
+
if (!staleScan.ok)
|
|
120
|
+
return staleScan;
|
|
121
|
+
const stalenessDistribution = {
|
|
122
|
+
fresh: 0,
|
|
123
|
+
aging: 0,
|
|
124
|
+
stale: 0,
|
|
125
|
+
total: 0,
|
|
126
|
+
};
|
|
127
|
+
for (const file of staleScan.value) {
|
|
128
|
+
if (!visiblePaths.has(file.path))
|
|
129
|
+
continue;
|
|
130
|
+
stalenessDistribution.total += 1;
|
|
131
|
+
const score = file.staleness.score;
|
|
132
|
+
if (score >= 1)
|
|
133
|
+
stalenessDistribution.stale += 1;
|
|
134
|
+
else if (score >= 0.5)
|
|
135
|
+
stalenessDistribution.aging += 1;
|
|
136
|
+
else
|
|
137
|
+
stalenessDistribution.fresh += 1;
|
|
138
|
+
}
|
|
139
|
+
// Unresolved tensions. A tension links two files; with an access context we
|
|
140
|
+
// show it only when the role can read the collections of BOTH sources, so
|
|
141
|
+
// the dashboard never leaks the existence of a doc in a denied collection.
|
|
142
|
+
const tensions = await listTensions(vaultRoot, DEFAULT_TENSION_STATUS);
|
|
143
|
+
if (!tensions.ok)
|
|
144
|
+
return tensions;
|
|
145
|
+
const visibleTensions = access
|
|
146
|
+
? tensions.value.filter((t) => canRead(access.role, topCollection(t.sourceA)) &&
|
|
147
|
+
canRead(access.role, topCollection(t.sourceB)))
|
|
148
|
+
: tensions.value;
|
|
149
|
+
const recentTensions = [...visibleTensions]
|
|
150
|
+
.sort((a, b) => b.date.localeCompare(a.date))
|
|
151
|
+
.slice(0, 5)
|
|
152
|
+
.map((t) => ({ title: t.title, date: t.date }));
|
|
153
|
+
// Recent writes from the provenance log (oldest first in the file). Each
|
|
154
|
+
// entry is gated by the role's read access to the written file's collection.
|
|
155
|
+
const log = await readProvenanceLog(vaultRoot);
|
|
156
|
+
if (!log.ok)
|
|
157
|
+
return log;
|
|
158
|
+
const visibleWrites = access
|
|
159
|
+
? log.value.filter((e) => canRead(access.role, topCollection(e.file)))
|
|
160
|
+
: log.value;
|
|
161
|
+
return ok({
|
|
162
|
+
vault: vaultRoot,
|
|
163
|
+
fileCount: index.value.count,
|
|
164
|
+
collections,
|
|
165
|
+
invalidCount,
|
|
166
|
+
generatedAt: new Date().toISOString(),
|
|
167
|
+
stalenessDistribution,
|
|
168
|
+
unresolvedTensions: {
|
|
169
|
+
count: visibleTensions.length,
|
|
170
|
+
recent: recentTensions,
|
|
171
|
+
},
|
|
172
|
+
recentWrites: {
|
|
173
|
+
count: visibleWrites.length,
|
|
174
|
+
entries: visibleWrites.slice(-10),
|
|
175
|
+
},
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
// ---------------------------------------------------------------------------
|
|
179
|
+
// MCP tool definitions
|
|
180
|
+
// ---------------------------------------------------------------------------
|
|
181
|
+
function asString(v) {
|
|
182
|
+
return typeof v === "string" && v.length > 0 ? v : undefined;
|
|
183
|
+
}
|
|
184
|
+
function asStringArray(v) {
|
|
185
|
+
if (!Array.isArray(v))
|
|
186
|
+
return undefined;
|
|
187
|
+
const out = v.filter((x) => typeof x === "string");
|
|
188
|
+
return out.length > 0 ? out : undefined;
|
|
189
|
+
}
|
|
190
|
+
export const readTools = [
|
|
191
|
+
{
|
|
192
|
+
name: "vault_read",
|
|
193
|
+
description: "Read a single vault document. Returns its markdown body, parsed " +
|
|
194
|
+
"frontmatter, and a validation report. Path is relative to the vault root.",
|
|
195
|
+
inputSchema: {
|
|
196
|
+
type: "object",
|
|
197
|
+
properties: {
|
|
198
|
+
path: {
|
|
199
|
+
type: "string",
|
|
200
|
+
description: "Vault-relative path to the markdown file, e.g. competitive-intel/foo.md",
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
required: ["path"],
|
|
204
|
+
additionalProperties: false,
|
|
205
|
+
},
|
|
206
|
+
handler: (vaultRoot, args, access) => vaultRead(vaultRoot, String(args.path ?? ""), access),
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
name: "vault_index",
|
|
210
|
+
description: "List vault documents with their metadata. Optionally filter by " +
|
|
211
|
+
"collection, status, domain, or tags (tags match is conjunctive).",
|
|
212
|
+
inputSchema: {
|
|
213
|
+
type: "object",
|
|
214
|
+
properties: {
|
|
215
|
+
collection: { type: "string", description: "Filter by collection name" },
|
|
216
|
+
status: {
|
|
217
|
+
type: "string",
|
|
218
|
+
enum: [...STATUSES],
|
|
219
|
+
description: "Filter by document status",
|
|
220
|
+
},
|
|
221
|
+
domain: {
|
|
222
|
+
type: "string",
|
|
223
|
+
enum: [...DOMAINS],
|
|
224
|
+
description: "Filter by domain",
|
|
225
|
+
},
|
|
226
|
+
tags: {
|
|
227
|
+
type: "array",
|
|
228
|
+
items: { type: "string" },
|
|
229
|
+
description: "Filter to documents that have all of these tags",
|
|
230
|
+
},
|
|
231
|
+
},
|
|
232
|
+
additionalProperties: false,
|
|
233
|
+
},
|
|
234
|
+
handler: (vaultRoot, args, access) => vaultIndex(vaultRoot, {
|
|
235
|
+
collection: asString(args.collection),
|
|
236
|
+
status: asString(args.status),
|
|
237
|
+
domain: asString(args.domain),
|
|
238
|
+
tags: asStringArray(args.tags),
|
|
239
|
+
}, access),
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
name: "vault_status",
|
|
243
|
+
description: "Vault health dashboard: total file count, per-collection counts, " +
|
|
244
|
+
"count of documents with invalid frontmatter, a staleness distribution " +
|
|
245
|
+
"(fresh/aging/stale), unresolved tensions, and recent write history.",
|
|
246
|
+
inputSchema: {
|
|
247
|
+
type: "object",
|
|
248
|
+
properties: {},
|
|
249
|
+
additionalProperties: false,
|
|
250
|
+
},
|
|
251
|
+
handler: (vaultRoot, _args, access) => vaultStatus(vaultRoot, access),
|
|
252
|
+
},
|
|
253
|
+
];
|
|
254
|
+
//# sourceMappingURL=read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type AccessContext } from "../access/rbac.js";
|
|
2
|
+
import { type Result } from "../frontmatter/types.js";
|
|
3
|
+
import { type HybridSearchResult, type RelatedSearchResult } from "../search/hybrid.js";
|
|
4
|
+
import { type ReindexResult } from "../search/reindex.js";
|
|
5
|
+
import type { ToolDefinition } from "./read.js";
|
|
6
|
+
export declare function vaultSearch(vaultRoot: string, args: Record<string, unknown>, access?: AccessContext): Promise<Result<HybridSearchResult, Error>>;
|
|
7
|
+
export declare function vaultSearchRelated(vaultRoot: string, args: Record<string, unknown>, access?: AccessContext): Promise<Result<RelatedSearchResult, Error>>;
|
|
8
|
+
export interface VaultReindexResult extends ReindexResult {
|
|
9
|
+
vault: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function vaultReindex(vaultRoot: string): Promise<Result<VaultReindexResult, Error>>;
|
|
12
|
+
export declare const searchTools: ToolDefinition[];
|
|
13
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,aAAa,EAAW,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAM,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAEL,KAAK,kBAAkB,EAGvB,KAAK,mBAAmB,EAEzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,aAAa,EAAgB,MAAM,sBAAsB,CAAC;AAExE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AA6ChD,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC,CA2B5C;AAMD,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC,CA2B7C;AAMD,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC,CAIhG;AAgBD,eAAO,MAAM,WAAW,EAAE,cAAc,EA2DvC,CAAC"}
|