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,190 @@
|
|
|
1
|
+
// Search-path tools: vault_search, vault_search_related, vault_reindex.
|
|
2
|
+
//
|
|
3
|
+
// Like the read-path tools, each exposes a pure logic function (returns
|
|
4
|
+
// Result, never throws) plus an MCP ToolDefinition. The logic functions own
|
|
5
|
+
// the index-db lifecycle: they open the SQLite index, run the query, and close
|
|
6
|
+
// it. If the index is empty (first run after a fresh clone) they trigger a
|
|
7
|
+
// reindex first, so search works without an explicit setup step.
|
|
8
|
+
import { canRead } from "../access/rbac.js";
|
|
9
|
+
import { ok } from "../frontmatter/types.js";
|
|
10
|
+
import { DEFAULT_WEIGHTS, hybridSearch, relatedSearch, } from "../search/hybrid.js";
|
|
11
|
+
import { reindexVault } from "../search/reindex.js";
|
|
12
|
+
import { documentCount, openIndexDb } from "../storage/index-db.js";
|
|
13
|
+
// Builds the index if it has never been built. A populated index is left as-is
|
|
14
|
+
// — callers wanting a refresh use vault_reindex explicitly.
|
|
15
|
+
async function ensureIndexed(vaultRoot) {
|
|
16
|
+
const dbResult = openIndexDb(vaultRoot);
|
|
17
|
+
if (!dbResult.ok)
|
|
18
|
+
return dbResult;
|
|
19
|
+
const empty = documentCount(dbResult.value) === 0;
|
|
20
|
+
dbResult.value.close();
|
|
21
|
+
if (empty) {
|
|
22
|
+
const reindexed = await reindexVault(vaultRoot);
|
|
23
|
+
if (!reindexed.ok)
|
|
24
|
+
return reindexed;
|
|
25
|
+
}
|
|
26
|
+
return ok(undefined);
|
|
27
|
+
}
|
|
28
|
+
function parseWeights(raw) {
|
|
29
|
+
if (raw && typeof raw === "object") {
|
|
30
|
+
const obj = raw;
|
|
31
|
+
const bm25 = obj.bm25;
|
|
32
|
+
const vector = obj.vector;
|
|
33
|
+
if (typeof bm25 === "number" &&
|
|
34
|
+
typeof vector === "number" &&
|
|
35
|
+
bm25 >= 0 &&
|
|
36
|
+
vector >= 0 &&
|
|
37
|
+
bm25 + vector > 0) {
|
|
38
|
+
return { bm25, vector };
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return DEFAULT_WEIGHTS;
|
|
42
|
+
}
|
|
43
|
+
function parseLimit(raw) {
|
|
44
|
+
if (typeof raw === "number" && Number.isFinite(raw) && raw > 0) {
|
|
45
|
+
return Math.min(Math.floor(raw), 50);
|
|
46
|
+
}
|
|
47
|
+
return 10;
|
|
48
|
+
}
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
// vault_search
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
export async function vaultSearch(vaultRoot, args, access) {
|
|
53
|
+
const query = args.query;
|
|
54
|
+
if (typeof query !== "string" || query.trim().length === 0) {
|
|
55
|
+
return {
|
|
56
|
+
ok: false,
|
|
57
|
+
error: new Error("vault_search requires a non-empty 'query' argument"),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
const ready = await ensureIndexed(vaultRoot);
|
|
61
|
+
if (!ready.ok)
|
|
62
|
+
return ready;
|
|
63
|
+
const dbResult = openIndexDb(vaultRoot);
|
|
64
|
+
if (!dbResult.ok)
|
|
65
|
+
return dbResult;
|
|
66
|
+
const db = dbResult.value;
|
|
67
|
+
try {
|
|
68
|
+
const result = await hybridSearch(db, query, {
|
|
69
|
+
weights: parseWeights(args.weights),
|
|
70
|
+
limit: parseLimit(args.limit),
|
|
71
|
+
});
|
|
72
|
+
if (!result.ok || !access)
|
|
73
|
+
return result;
|
|
74
|
+
// RBAC: drop hits in collections the role cannot read.
|
|
75
|
+
const hits = result.value.hits.filter((h) => canRead(access.role, h.collection));
|
|
76
|
+
return ok({ ...result.value, count: hits.length, hits });
|
|
77
|
+
}
|
|
78
|
+
finally {
|
|
79
|
+
db.close();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// ---------------------------------------------------------------------------
|
|
83
|
+
// vault_search_related
|
|
84
|
+
// ---------------------------------------------------------------------------
|
|
85
|
+
export async function vaultSearchRelated(vaultRoot, args, access) {
|
|
86
|
+
const path = args.path;
|
|
87
|
+
if (typeof path !== "string" || path.trim().length === 0) {
|
|
88
|
+
return {
|
|
89
|
+
ok: false,
|
|
90
|
+
error: new Error("vault_search_related requires a non-empty 'path' argument"),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
const ready = await ensureIndexed(vaultRoot);
|
|
94
|
+
if (!ready.ok)
|
|
95
|
+
return ready;
|
|
96
|
+
const dbResult = openIndexDb(vaultRoot);
|
|
97
|
+
if (!dbResult.ok)
|
|
98
|
+
return dbResult;
|
|
99
|
+
const db = dbResult.value;
|
|
100
|
+
try {
|
|
101
|
+
const result = relatedSearch(db, path, {
|
|
102
|
+
weights: parseWeights(args.weights),
|
|
103
|
+
limit: parseLimit(args.limit),
|
|
104
|
+
});
|
|
105
|
+
if (!result.ok || !access)
|
|
106
|
+
return result;
|
|
107
|
+
// RBAC: drop related hits in collections the role cannot read.
|
|
108
|
+
const hits = result.value.hits.filter((h) => canRead(access.role, h.collection));
|
|
109
|
+
return ok({ ...result.value, count: hits.length, hits });
|
|
110
|
+
}
|
|
111
|
+
finally {
|
|
112
|
+
db.close();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
export async function vaultReindex(vaultRoot) {
|
|
116
|
+
const result = await reindexVault(vaultRoot);
|
|
117
|
+
if (!result.ok)
|
|
118
|
+
return result;
|
|
119
|
+
return ok({ ...result.value, vault: vaultRoot });
|
|
120
|
+
}
|
|
121
|
+
// ---------------------------------------------------------------------------
|
|
122
|
+
// MCP tool definitions
|
|
123
|
+
// ---------------------------------------------------------------------------
|
|
124
|
+
const weightsSchema = {
|
|
125
|
+
type: "object",
|
|
126
|
+
description: "Optional ranking weights. Defaults to an even bm25/vector split.",
|
|
127
|
+
properties: {
|
|
128
|
+
bm25: { type: "number", description: "Lexical (BM25) weight, >= 0" },
|
|
129
|
+
vector: { type: "number", description: "Semantic (vector) weight, >= 0" },
|
|
130
|
+
},
|
|
131
|
+
additionalProperties: false,
|
|
132
|
+
};
|
|
133
|
+
export const searchTools = [
|
|
134
|
+
{
|
|
135
|
+
name: "vault_search",
|
|
136
|
+
description: "Hybrid search across the vault: BM25 lexical ranking combined with " +
|
|
137
|
+
"vector semantic similarity. Returns ranked documents with snippets. " +
|
|
138
|
+
"Falls back to lexical-only ranking if embeddings are unavailable.",
|
|
139
|
+
inputSchema: {
|
|
140
|
+
type: "object",
|
|
141
|
+
properties: {
|
|
142
|
+
query: { type: "string", description: "Free-text search query" },
|
|
143
|
+
limit: {
|
|
144
|
+
type: "number",
|
|
145
|
+
description: "Maximum results to return (default 10, max 50)",
|
|
146
|
+
},
|
|
147
|
+
weights: weightsSchema,
|
|
148
|
+
},
|
|
149
|
+
required: ["query"],
|
|
150
|
+
additionalProperties: false,
|
|
151
|
+
},
|
|
152
|
+
handler: (vaultRoot, args, access) => vaultSearch(vaultRoot, args, access),
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
name: "vault_search_related",
|
|
156
|
+
description: "Find documents related to a given vault document. Uses that " +
|
|
157
|
+
"document's own text and embeddings as the query; the document itself " +
|
|
158
|
+
"is excluded from results. Path is relative to the vault root.",
|
|
159
|
+
inputSchema: {
|
|
160
|
+
type: "object",
|
|
161
|
+
properties: {
|
|
162
|
+
path: {
|
|
163
|
+
type: "string",
|
|
164
|
+
description: "Vault-relative path of the reference document",
|
|
165
|
+
},
|
|
166
|
+
limit: {
|
|
167
|
+
type: "number",
|
|
168
|
+
description: "Maximum results to return (default 10, max 50)",
|
|
169
|
+
},
|
|
170
|
+
weights: weightsSchema,
|
|
171
|
+
},
|
|
172
|
+
required: ["path"],
|
|
173
|
+
additionalProperties: false,
|
|
174
|
+
},
|
|
175
|
+
handler: (vaultRoot, args, access) => vaultSearchRelated(vaultRoot, args, access),
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
name: "vault_reindex",
|
|
179
|
+
description: "Rebuild the search index from the markdown files on disk. The index " +
|
|
180
|
+
"is a derived cache; this clears and rebuilds it, re-embedding all " +
|
|
181
|
+
"document chunks. Run after bulk edits made outside Daftari.",
|
|
182
|
+
inputSchema: {
|
|
183
|
+
type: "object",
|
|
184
|
+
properties: {},
|
|
185
|
+
additionalProperties: false,
|
|
186
|
+
},
|
|
187
|
+
handler: (vaultRoot) => vaultReindex(vaultRoot),
|
|
188
|
+
},
|
|
189
|
+
];
|
|
190
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type AccessContext } from "../access/rbac.js";
|
|
2
|
+
import { type Result, type ValidationReport } from "../frontmatter/types.js";
|
|
3
|
+
import type { ToolDefinition } from "./read.js";
|
|
4
|
+
export interface WriteResult {
|
|
5
|
+
path: string;
|
|
6
|
+
action: "create" | "update" | "append" | "promote" | "deprecate";
|
|
7
|
+
commit: string;
|
|
8
|
+
status: string;
|
|
9
|
+
updated: string;
|
|
10
|
+
validation: ValidationReport;
|
|
11
|
+
indexUpdated: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function vaultWrite(vaultRoot: string, args: Record<string, unknown>, access?: AccessContext): Promise<Result<WriteResult, Error>>;
|
|
14
|
+
export declare function vaultAppend(vaultRoot: string, args: Record<string, unknown>, access?: AccessContext): Promise<Result<WriteResult, Error>>;
|
|
15
|
+
export declare function vaultPromote(vaultRoot: string, args: Record<string, unknown>, access?: AccessContext): Promise<Result<WriteResult, Error>>;
|
|
16
|
+
export declare function vaultDeprecate(vaultRoot: string, args: Record<string, unknown>, access?: AccessContext): Promise<Result<WriteResult, Error>>;
|
|
17
|
+
export declare const writeTools: ToolDefinition[];
|
|
18
|
+
//# sourceMappingURL=write.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,aAAa,EAAwB,MAAM,mBAAmB,CAAC;AAI7E,OAAO,EAKL,KAAK,MAAM,EACX,KAAK,gBAAgB,EACtB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAsChD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,YAAY,EAAE,OAAO,CAAC;CACvB;AA2FD,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAsErC;AAQD,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,WAAW,EAAE,KAAK,CAAC,CAAC,CAkDrC;AASD,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAiErC;AASD,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CA6DrC;AAaD,eAAO,MAAM,UAAU,EAAE,cAAc,EAmGtC,CAAC"}
|