daftari 1.13.1 → 1.15.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 +92 -0
- package/README.md +1 -0
- package/dist/curation/lint.d.ts +26 -1
- package/dist/curation/lint.d.ts.map +1 -1
- package/dist/curation/lint.js +129 -74
- package/dist/curation/lint.js.map +1 -1
- package/dist/curation/tension-blast.d.ts +37 -0
- package/dist/curation/tension-blast.d.ts.map +1 -0
- package/dist/curation/tension-blast.js +223 -0
- package/dist/curation/tension-blast.js.map +1 -0
- package/dist/curation/tension-clusters.d.ts +18 -0
- package/dist/curation/tension-clusters.d.ts.map +1 -0
- package/dist/curation/tension-clusters.js +157 -0
- package/dist/curation/tension-clusters.js.map +1 -0
- package/dist/curation/tension.d.ts +25 -1
- package/dist/curation/tension.d.ts.map +1 -1
- package/dist/curation/tension.js +258 -15
- package/dist/curation/tension.js.map +1 -1
- package/dist/curation/vault-docs.d.ts +14 -0
- package/dist/curation/vault-docs.d.ts.map +1 -0
- package/dist/curation/vault-docs.js +90 -0
- package/dist/curation/vault-docs.js.map +1 -0
- package/dist/tools/curation.d.ts +7 -1
- package/dist/tools/curation.d.ts.map +1 -1
- package/dist/tools/curation.js +238 -10
- package/dist/tools/curation.js.map +1 -1
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +8 -4
- package/dist/tools/search.js.map +1 -1
- package/package.json +1 -1
package/dist/curation/tension.js
CHANGED
|
@@ -2,46 +2,114 @@
|
|
|
2
2
|
//
|
|
3
3
|
// A "tension" is a recorded contradiction or pull between two documents: two
|
|
4
4
|
// sources that say things which sit uneasily together. Daftari records the
|
|
5
|
-
// tension; it never resolves it
|
|
6
|
-
//
|
|
5
|
+
// tension; it never resolves it automatically — resolution is a deliberate
|
|
6
|
+
// curatorial act recorded through `vault_tension_resolve`.
|
|
7
7
|
//
|
|
8
|
-
// The log is a human-readable markdown file, .daftari/tensions.md
|
|
9
|
-
//
|
|
8
|
+
// The log is a human-readable markdown file, .daftari/tensions.md. Each entry
|
|
9
|
+
// is one `## ` block. Phase 1 (2026-05-31) added two structural fields to
|
|
10
|
+
// each entry:
|
|
11
|
+
//
|
|
12
|
+
// - `kind` (temporal | factual | interpretive | unspecified): the taxonomy
|
|
13
|
+
// of the disagreement. `unspecified` is reserved for legacy entries logged
|
|
14
|
+
// before Phase 1; new entries must declare one of the other three.
|
|
15
|
+
// - a `resolution` block: present iff the tension has been closed.
|
|
16
|
+
//
|
|
17
|
+
// Legacy entries without a `kind` or `id` are read as `kind: "unspecified"`
|
|
18
|
+
// and have no id — they cannot be resolved through the tool. They can still
|
|
19
|
+
// be edited or re-logged.
|
|
10
20
|
import { mkdirSync } from "node:fs";
|
|
11
|
-
import { appendFile, readFile } from "node:fs/promises";
|
|
21
|
+
import { appendFile, readFile, writeFile } from "node:fs/promises";
|
|
12
22
|
import { join } from "node:path";
|
|
13
23
|
import { err, ok } from "../frontmatter/types.js";
|
|
24
|
+
import { ageInDays } from "./staleness.js";
|
|
14
25
|
export const DEFAULT_TENSION_STATUS = "unresolved";
|
|
26
|
+
export const RESOLVED_TENSION_STATUS = "resolved";
|
|
27
|
+
export const TENSION_KINDS = ["temporal", "factual", "interpretive", "unspecified"];
|
|
28
|
+
// `unspecified` is for legacy entries only — never accepted on a new log.
|
|
29
|
+
export const LOGGABLE_TENSION_KINDS = ["temporal", "factual", "interpretive"];
|
|
30
|
+
export const RESOLUTION_KINDS = ["superseded", "corrected", "accepted", "invalid"];
|
|
15
31
|
export function tensionsPath(vaultRoot) {
|
|
16
32
|
return join(vaultRoot, ".daftari", "tensions.md");
|
|
17
33
|
}
|
|
34
|
+
function renderResolution(resolution) {
|
|
35
|
+
const lines = [
|
|
36
|
+
`- **Resolved at:** ${resolution.resolved_at}`,
|
|
37
|
+
`- **Resolved by:** ${resolution.resolved_by}`,
|
|
38
|
+
`- **Resolution kind:** ${resolution.kind}`,
|
|
39
|
+
];
|
|
40
|
+
if (resolution.rationale !== undefined && resolution.rationale.length > 0) {
|
|
41
|
+
lines.push(`- **Rationale:** ${resolution.rationale}`);
|
|
42
|
+
}
|
|
43
|
+
if (resolution.references !== undefined && resolution.references.length > 0) {
|
|
44
|
+
lines.push(`- **References:** ${resolution.references.join(", ")}`);
|
|
45
|
+
}
|
|
46
|
+
return lines.join("\n");
|
|
47
|
+
}
|
|
18
48
|
// Renders one entry in the canonical block format. The blank trailing line
|
|
19
|
-
// keeps consecutive entries visually separated in the file.
|
|
49
|
+
// keeps consecutive entries visually separated in the file. `kind` and `id`
|
|
50
|
+
// are written only when set, to preserve legacy entries untouched on read /
|
|
51
|
+
// re-render.
|
|
20
52
|
function renderEntry(entry) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
`- **
|
|
24
|
-
|
|
25
|
-
`- **
|
|
53
|
+
const lines = [`## ${entry.date} — ${entry.title}`];
|
|
54
|
+
if (entry.id !== undefined)
|
|
55
|
+
lines.push(`- **Id:** ${entry.id}`);
|
|
56
|
+
if (entry.kind !== "unspecified")
|
|
57
|
+
lines.push(`- **Kind:** ${entry.kind}`);
|
|
58
|
+
lines.push(`- **Source A:** ${entry.sourceA} says ${entry.claimA}`);
|
|
59
|
+
lines.push(`- **Source B:** ${entry.sourceB} says ${entry.claimB}`);
|
|
60
|
+
lines.push(`- **Status:** ${entry.status}`);
|
|
61
|
+
lines.push(`- **Logged by:** ${entry.loggedBy}`);
|
|
62
|
+
if (entry.resolution !== undefined) {
|
|
63
|
+
lines.push(renderResolution(entry.resolution));
|
|
64
|
+
}
|
|
65
|
+
return `${lines.join("\n")}\n`;
|
|
26
66
|
}
|
|
27
|
-
//
|
|
28
|
-
//
|
|
29
|
-
//
|
|
67
|
+
// Assigns the next sequential `tension-NNN` id. Scans existing entries for
|
|
68
|
+
// the highest numeric suffix and increments. Legacy entries without an id are
|
|
69
|
+
// skipped — their absence is OK; new entries simply pick up after the last
|
|
70
|
+
// numbered id ever seen.
|
|
71
|
+
function nextTensionId(existing) {
|
|
72
|
+
let max = 0;
|
|
73
|
+
for (const e of existing) {
|
|
74
|
+
if (e.id === undefined)
|
|
75
|
+
continue;
|
|
76
|
+
const m = e.id.match(/^tension-(\d+)$/);
|
|
77
|
+
if (!m)
|
|
78
|
+
continue;
|
|
79
|
+
const n = Number.parseInt(m[1], 10);
|
|
80
|
+
if (Number.isFinite(n) && n > max)
|
|
81
|
+
max = n;
|
|
82
|
+
}
|
|
83
|
+
const next = max + 1;
|
|
84
|
+
return `tension-${String(next).padStart(3, "0")}`;
|
|
85
|
+
}
|
|
86
|
+
// Appends a tension entry to .daftari/tensions.md. Auto-assigns an `id` if
|
|
87
|
+
// the caller doesn't supply one (the normal path).
|
|
30
88
|
export async function addTension(vaultRoot, input) {
|
|
31
89
|
for (const field of ["title", "sourceA", "claimA", "sourceB", "claimB", "loggedBy"]) {
|
|
32
90
|
if (typeof input[field] !== "string" || input[field].trim().length === 0) {
|
|
33
91
|
return err(new Error(`addTension requires a non-empty '${field}'`));
|
|
34
92
|
}
|
|
35
93
|
}
|
|
94
|
+
if (!LOGGABLE_TENSION_KINDS.includes(input.kind)) {
|
|
95
|
+
return err(new Error(`addTension 'kind' must be one of: ${LOGGABLE_TENSION_KINDS.join(", ")} ` +
|
|
96
|
+
`(unspecified is for legacy entries only)`));
|
|
97
|
+
}
|
|
98
|
+
const existing = await listTensions(vaultRoot);
|
|
99
|
+
if (!existing.ok)
|
|
100
|
+
return existing;
|
|
36
101
|
const entry = {
|
|
102
|
+
id: nextTensionId(existing.value),
|
|
37
103
|
date: input.date ?? new Date().toISOString().slice(0, 10),
|
|
38
104
|
title: input.title.trim(),
|
|
105
|
+
kind: input.kind,
|
|
39
106
|
sourceA: input.sourceA.trim(),
|
|
40
107
|
claimA: input.claimA.trim(),
|
|
41
108
|
sourceB: input.sourceB.trim(),
|
|
42
109
|
claimB: input.claimB.trim(),
|
|
43
110
|
status: input.status ?? DEFAULT_TENSION_STATUS,
|
|
44
111
|
loggedBy: input.loggedBy.trim(),
|
|
112
|
+
resolved: false,
|
|
45
113
|
};
|
|
46
114
|
try {
|
|
47
115
|
mkdirSync(join(vaultRoot, ".daftari"), { recursive: true });
|
|
@@ -65,6 +133,12 @@ function parseSourceLine(value) {
|
|
|
65
133
|
claim: value.slice(marker + " says ".length).trim(),
|
|
66
134
|
};
|
|
67
135
|
}
|
|
136
|
+
function parseReferences(value) {
|
|
137
|
+
return value
|
|
138
|
+
.split(",")
|
|
139
|
+
.map((s) => s.trim())
|
|
140
|
+
.filter((s) => s.length > 0);
|
|
141
|
+
}
|
|
68
142
|
function parseBlock(block) {
|
|
69
143
|
const lines = block.split("\n");
|
|
70
144
|
const header = lines[0]?.replace(/^##\s+/, "") ?? "";
|
|
@@ -74,20 +148,38 @@ function parseBlock(block) {
|
|
|
74
148
|
const entry = {
|
|
75
149
|
date: headerMatch[1],
|
|
76
150
|
title: headerMatch[2].trim(),
|
|
151
|
+
kind: "unspecified",
|
|
77
152
|
sourceA: "",
|
|
78
153
|
claimA: "",
|
|
79
154
|
sourceB: "",
|
|
80
155
|
claimB: "",
|
|
81
156
|
status: DEFAULT_TENSION_STATUS,
|
|
82
157
|
loggedBy: "",
|
|
158
|
+
resolved: false,
|
|
83
159
|
};
|
|
160
|
+
// Resolution fields are accumulated separately so the block can be assembled
|
|
161
|
+
// (or skipped) in one place at the end.
|
|
162
|
+
let resolvedAt;
|
|
163
|
+
let resolvedBy;
|
|
164
|
+
let resolutionKind;
|
|
165
|
+
let rationale;
|
|
166
|
+
let references;
|
|
84
167
|
for (const line of lines.slice(1)) {
|
|
85
168
|
const m = line.match(/^-\s+\*\*(.+?):\*\*\s*(.*)$/);
|
|
86
169
|
if (!m)
|
|
87
170
|
continue;
|
|
88
171
|
const label = m[1].toLowerCase();
|
|
89
172
|
const value = m[2];
|
|
90
|
-
if (label === "
|
|
173
|
+
if (label === "id") {
|
|
174
|
+
entry.id = value.trim();
|
|
175
|
+
}
|
|
176
|
+
else if (label === "kind") {
|
|
177
|
+
const k = value.trim();
|
|
178
|
+
if (TENSION_KINDS.includes(k)) {
|
|
179
|
+
entry.kind = k;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
else if (label === "source a") {
|
|
91
183
|
const s = parseSourceLine(value);
|
|
92
184
|
entry.sourceA = s.path;
|
|
93
185
|
entry.claimA = s.claim;
|
|
@@ -103,6 +195,37 @@ function parseBlock(block) {
|
|
|
103
195
|
else if (label === "logged by") {
|
|
104
196
|
entry.loggedBy = value.trim();
|
|
105
197
|
}
|
|
198
|
+
else if (label === "resolved at") {
|
|
199
|
+
resolvedAt = value.trim();
|
|
200
|
+
}
|
|
201
|
+
else if (label === "resolved by") {
|
|
202
|
+
resolvedBy = value.trim();
|
|
203
|
+
}
|
|
204
|
+
else if (label === "resolution kind") {
|
|
205
|
+
const rk = value.trim();
|
|
206
|
+
if (RESOLUTION_KINDS.includes(rk)) {
|
|
207
|
+
resolutionKind = rk;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
else if (label === "rationale") {
|
|
211
|
+
rationale = value.trim();
|
|
212
|
+
}
|
|
213
|
+
else if (label === "references") {
|
|
214
|
+
references = parseReferences(value);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (resolvedAt !== undefined && resolvedBy !== undefined && resolutionKind !== undefined) {
|
|
218
|
+
const resolution = {
|
|
219
|
+
resolved_at: resolvedAt,
|
|
220
|
+
resolved_by: resolvedBy,
|
|
221
|
+
kind: resolutionKind,
|
|
222
|
+
};
|
|
223
|
+
if (rationale !== undefined && rationale.length > 0)
|
|
224
|
+
resolution.rationale = rationale;
|
|
225
|
+
if (references !== undefined && references.length > 0)
|
|
226
|
+
resolution.references = references;
|
|
227
|
+
entry.resolution = resolution;
|
|
228
|
+
entry.resolved = true;
|
|
106
229
|
}
|
|
107
230
|
return entry;
|
|
108
231
|
}
|
|
@@ -131,4 +254,124 @@ export async function listTensions(vaultRoot, status) {
|
|
|
131
254
|
}
|
|
132
255
|
return ok(status ? entries.filter((e) => e.status === status) : entries);
|
|
133
256
|
}
|
|
257
|
+
// Records a resolution on an existing tension. Errors if the id isn't found,
|
|
258
|
+
// or if the tension is already resolved. The whole tensions.md file is read,
|
|
259
|
+
// the matched entry is updated, and the file is rewritten in place. The
|
|
260
|
+
// leading-blank-line convention of the append path is preserved.
|
|
261
|
+
export async function resolveTension(vaultRoot, id, resolution) {
|
|
262
|
+
let raw;
|
|
263
|
+
try {
|
|
264
|
+
raw = await readFile(tensionsPath(vaultRoot), "utf-8");
|
|
265
|
+
}
|
|
266
|
+
catch (e) {
|
|
267
|
+
if (e.code === "ENOENT") {
|
|
268
|
+
return err(new Error(`tension not found: ${id}`));
|
|
269
|
+
}
|
|
270
|
+
const reason = e instanceof Error ? e.message : String(e);
|
|
271
|
+
return err(new Error(`cannot read tension log: ${reason}`));
|
|
272
|
+
}
|
|
273
|
+
// Split the file into a leading preamble (anything before the first
|
|
274
|
+
// entry) plus a list of entry blocks. Reassembled the same way.
|
|
275
|
+
const segments = raw.split(/(?=^## )/m);
|
|
276
|
+
const preamble = segments[0]?.startsWith("## ") ? "" : (segments[0] ?? "");
|
|
277
|
+
const blocks = segments.filter((s) => s.startsWith("## "));
|
|
278
|
+
let matched = null;
|
|
279
|
+
let matchIdx = -1;
|
|
280
|
+
for (let i = 0; i < blocks.length; i++) {
|
|
281
|
+
const entry = parseBlock(blocks[i].trim());
|
|
282
|
+
if (!entry || entry.id !== id)
|
|
283
|
+
continue;
|
|
284
|
+
matched = entry;
|
|
285
|
+
matchIdx = i;
|
|
286
|
+
break;
|
|
287
|
+
}
|
|
288
|
+
if (!matched || matchIdx === -1) {
|
|
289
|
+
return err(new Error(`tension not found: ${id}`));
|
|
290
|
+
}
|
|
291
|
+
if (matched.resolved) {
|
|
292
|
+
return err(new Error(`tension is already resolved: ${id}`));
|
|
293
|
+
}
|
|
294
|
+
const updated = {
|
|
295
|
+
...matched,
|
|
296
|
+
status: RESOLVED_TENSION_STATUS,
|
|
297
|
+
resolved: true,
|
|
298
|
+
resolution,
|
|
299
|
+
};
|
|
300
|
+
// Preserve the leading blank line of the original block: every block in the
|
|
301
|
+
// file (except possibly the first) is preceded by one blank line. The split
|
|
302
|
+
// captures the "## " marker at the start of each block, so we re-add the
|
|
303
|
+
// blank-line prefix on rewrite.
|
|
304
|
+
const rewritten = blocks.map((b, i) => {
|
|
305
|
+
if (i !== matchIdx)
|
|
306
|
+
return b;
|
|
307
|
+
// The new block content includes its trailing newline.
|
|
308
|
+
const rendered = renderEntry(updated);
|
|
309
|
+
// Preserve the same separator the original block had: count leading
|
|
310
|
+
// newlines on the original to keep the file's spacing stable.
|
|
311
|
+
const leading = (b.match(/^\n*/)?.[0] ?? "").length;
|
|
312
|
+
return `${"\n".repeat(leading)}${rendered}`;
|
|
313
|
+
});
|
|
314
|
+
const next = preamble + rewritten.join("");
|
|
315
|
+
try {
|
|
316
|
+
await writeFile(tensionsPath(vaultRoot), next);
|
|
317
|
+
return ok(updated);
|
|
318
|
+
}
|
|
319
|
+
catch (e) {
|
|
320
|
+
const reason = e instanceof Error ? e.message : String(e);
|
|
321
|
+
return err(new Error(`cannot write tension log: ${reason}`));
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
// --- Phase 4: aging -------------------------------------------------------
|
|
325
|
+
//
|
|
326
|
+
// Phase 4 (2026-05-31 plan) layers basic age-based tiering on top of the
|
|
327
|
+
// taxonomy. The tier is computed from each entry's logged date and is purely
|
|
328
|
+
// advisory — lint reports it; no entry is ever auto-edited.
|
|
329
|
+
//
|
|
330
|
+
// Tier boundaries (calendar-day inclusive on the low side, exclusive on the
|
|
331
|
+
// high side as documented in `agingTier`):
|
|
332
|
+
//
|
|
333
|
+
// age ≤ 30 days → "fresh"
|
|
334
|
+
// 30 < age ≤ 90 → "aging"
|
|
335
|
+
// age > 90 → "stale"
|
|
336
|
+
//
|
|
337
|
+
// Two carve-outs short-circuit the computation to `null`:
|
|
338
|
+
//
|
|
339
|
+
// 1. `kind === "unspecified"` — legacy entries are not aged. They predate
|
|
340
|
+
// classification; warning on age would punish the absence of a feature
|
|
341
|
+
// that didn't exist when the entry was logged.
|
|
342
|
+
// 2. `resolution.kind === "accepted"` — an explicitly accepted persistent
|
|
343
|
+
// disagreement is a stable epistemic feature of the vault, not debt.
|
|
344
|
+
// Spec: Locked Resolutions Index, Gap 4.
|
|
345
|
+
//
|
|
346
|
+
// `agingTier` itself does NOT filter by resolved status — a resolved
|
|
347
|
+
// superseded/corrected/invalid entry still receives a tier. The lint
|
|
348
|
+
// aggregation in `computeTensionHealth` is what scopes aging counts to
|
|
349
|
+
// unresolved entries (the "active surface"); the function stays pure so it
|
|
350
|
+
// can be tested per-entry against the exact spec rules.
|
|
351
|
+
export const AGING_TIERS = ["fresh", "aging", "stale"];
|
|
352
|
+
// Stale-tier lint copy by kind. `unspecified` is absent on purpose — it isn't
|
|
353
|
+
// aged, so it never produces a stale-tier message. The strings are the
|
|
354
|
+
// verbatim Phase 1 / Phase 4 spec copy; if these change, update the plan too.
|
|
355
|
+
export const STALE_TIER_LINT_COPY = {
|
|
356
|
+
temporal: "Unresolved temporal tension — likely just needs the older doc deprecated.",
|
|
357
|
+
factual: "Unresolved factual tension — investigation overdue.",
|
|
358
|
+
interpretive: "Unresolved interpretive tension — decide explicitly: `accepted` if both views stand, " +
|
|
359
|
+
"`invalid` if it was mis-logged. Long-running unacknowledged disagreement is the smell, " +
|
|
360
|
+
"not the disagreement itself.",
|
|
361
|
+
};
|
|
362
|
+
// Boundary inclusivity: a tension exactly 30 days old is fresh, 31 days is
|
|
363
|
+
// aging, 90 days is aging, 91 days is stale. The thresholds in the table match
|
|
364
|
+
// the spec's "0–30 / 31–90 / 90+" buckets read as "≤30 / 31–90 / >90".
|
|
365
|
+
export function agingTier(entry, now = new Date()) {
|
|
366
|
+
if (entry.kind === "unspecified")
|
|
367
|
+
return null;
|
|
368
|
+
if (entry.resolution?.kind === "accepted")
|
|
369
|
+
return null;
|
|
370
|
+
const age = ageInDays(entry.date, now);
|
|
371
|
+
if (age <= 30)
|
|
372
|
+
return "fresh";
|
|
373
|
+
if (age <= 90)
|
|
374
|
+
return "aging";
|
|
375
|
+
return "stale";
|
|
376
|
+
}
|
|
134
377
|
//# sourceMappingURL=tension.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tension.js","sourceRoot":"","sources":["../../src/curation/tension.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tension.js","sourceRoot":"","sources":["../../src/curation/tension.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type Frontmatter, type Result } from "../frontmatter/types.js";
|
|
2
|
+
export interface LoadedDoc {
|
|
3
|
+
path: string;
|
|
4
|
+
frontmatter: Frontmatter;
|
|
5
|
+
content: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function loadDocuments(vaultRoot: string): Promise<Result<LoadedDoc[], Error>>;
|
|
8
|
+
export declare function extractLinks(content: string): string[];
|
|
9
|
+
export declare function resolveLink(rawTarget: string, fromPath: string, byPath: Set<string>, byBasename: Map<string, string>): string | null;
|
|
10
|
+
export declare function buildPathIndexes(docs: LoadedDoc[]): {
|
|
11
|
+
byPath: Set<string>;
|
|
12
|
+
byBasename: Map<string, string>;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=vault-docs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-docs.d.ts","sourceRoot":"","sources":["../../src/curation/vault-docs.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,WAAW,EAAM,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAG5E,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAKD,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC,CAmB1F;AAID,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBtD;AAMD,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EACnB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,MAAM,GAAG,IAAI,CAYf;AAMD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG;IACnD,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC,CAQA"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// Shared vault-document loading and in-vault link helpers.
|
|
2
|
+
//
|
|
3
|
+
// Extracted from lint.ts so the same loader and link-resolution machinery can
|
|
4
|
+
// back any curation surface that needs the full set of vault docs plus a
|
|
5
|
+
// reverse-link view (lint, tension blast radius). Keeps the link-extraction
|
|
6
|
+
// regexes and the path-normalisation rules in one place so the two callers
|
|
7
|
+
// can't drift apart.
|
|
8
|
+
import { posix } from "node:path";
|
|
9
|
+
import { parseDocument } from "../frontmatter/parser.js";
|
|
10
|
+
import { ok } from "../frontmatter/types.js";
|
|
11
|
+
import { listFiles, readFile, resolveVaultPath } from "../storage/local.js";
|
|
12
|
+
// Loads every markdown file under the vault root, returning frontmatter +
|
|
13
|
+
// body for each. Files that fail to parse or to read are silently skipped —
|
|
14
|
+
// the curation surface should never crash because a single file is malformed.
|
|
15
|
+
export async function loadDocuments(vaultRoot) {
|
|
16
|
+
const list = await listFiles(vaultRoot);
|
|
17
|
+
if (!list.ok)
|
|
18
|
+
return list;
|
|
19
|
+
const docs = [];
|
|
20
|
+
for (const relPath of list.value) {
|
|
21
|
+
const resolved = resolveVaultPath(vaultRoot, relPath);
|
|
22
|
+
if (!resolved.ok)
|
|
23
|
+
continue;
|
|
24
|
+
const file = await readFile(resolved.value);
|
|
25
|
+
if (!file.ok)
|
|
26
|
+
continue;
|
|
27
|
+
const parsed = parseDocument(file.value);
|
|
28
|
+
if (!parsed.ok)
|
|
29
|
+
continue;
|
|
30
|
+
docs.push({
|
|
31
|
+
path: relPath,
|
|
32
|
+
frontmatter: parsed.value.frontmatter,
|
|
33
|
+
content: parsed.value.content,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
return ok(docs);
|
|
37
|
+
}
|
|
38
|
+
// Pulls every internal link target out of a markdown body: both [[wikilinks]]
|
|
39
|
+
// and [text](target) markdown links. External URLs and anchors are dropped.
|
|
40
|
+
export function extractLinks(content) {
|
|
41
|
+
const targets = [];
|
|
42
|
+
for (const m of content.matchAll(/\[\[([^\]]+)\]\]/g)) {
|
|
43
|
+
// A wikilink may carry a |display alias and/or a #heading anchor.
|
|
44
|
+
const raw = m[1].split("|")[0]?.split("#")[0]?.trim();
|
|
45
|
+
if (raw)
|
|
46
|
+
targets.push(raw);
|
|
47
|
+
}
|
|
48
|
+
for (const m of content.matchAll(/\[[^\]]*\]\(([^)\s]+)\)/g)) {
|
|
49
|
+
const raw = m[1].split("#")[0]?.trim();
|
|
50
|
+
if (!raw)
|
|
51
|
+
continue;
|
|
52
|
+
if (/^(https?:|mailto:|#)/i.test(raw))
|
|
53
|
+
continue;
|
|
54
|
+
targets.push(raw);
|
|
55
|
+
}
|
|
56
|
+
return targets;
|
|
57
|
+
}
|
|
58
|
+
// Resolves a raw link target to a vault-relative path, or null if it points
|
|
59
|
+
// nowhere. Tries, in order: the target as-is, with a .md suffix, resolved
|
|
60
|
+
// relative to the linking file's directory, then a bare basename match (the
|
|
61
|
+
// common [[note-name]] wikilink form).
|
|
62
|
+
export function resolveLink(rawTarget, fromPath, byPath, byBasename) {
|
|
63
|
+
const withMd = (p) => (p.endsWith(".md") ? p : `${p}.md`);
|
|
64
|
+
if (byPath.has(rawTarget))
|
|
65
|
+
return rawTarget;
|
|
66
|
+
if (byPath.has(withMd(rawTarget)))
|
|
67
|
+
return withMd(rawTarget);
|
|
68
|
+
const relual = posix.normalize(posix.join(posix.dirname(fromPath), rawTarget));
|
|
69
|
+
if (byPath.has(relual))
|
|
70
|
+
return relual;
|
|
71
|
+
if (byPath.has(withMd(relual)))
|
|
72
|
+
return withMd(relual);
|
|
73
|
+
const base = posix.basename(rawTarget).replace(/\.md$/, "");
|
|
74
|
+
return byBasename.get(base) ?? null;
|
|
75
|
+
}
|
|
76
|
+
// Precomputes the two indexes resolveLink consults: the set of every known
|
|
77
|
+
// vault-relative path, and the basename → path map used for bare-name
|
|
78
|
+
// wikilinks. First write wins on basename collisions so the mapping is
|
|
79
|
+
// deterministic across runs.
|
|
80
|
+
export function buildPathIndexes(docs) {
|
|
81
|
+
const byPath = new Set(docs.map((d) => d.path));
|
|
82
|
+
const byBasename = new Map();
|
|
83
|
+
for (const d of docs) {
|
|
84
|
+
const base = posix.basename(d.path).replace(/\.md$/, "");
|
|
85
|
+
if (!byBasename.has(base))
|
|
86
|
+
byBasename.set(base, d.path);
|
|
87
|
+
}
|
|
88
|
+
return { byPath, byBasename };
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=vault-docs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-docs.js","sourceRoot":"","sources":["../../src/curation/vault-docs.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/curation.d.ts
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
import { type AccessContext } from "../access/rbac.js";
|
|
2
|
-
import { type LintCheckName, type LintFinding } from "../curation/lint.js";
|
|
2
|
+
import { type LintCheckName, type LintFinding, type TensionHealth } from "../curation/lint.js";
|
|
3
3
|
import { type ProvenanceEntry } from "../curation/provenance.js";
|
|
4
4
|
import { type TensionEntry } from "../curation/tension.js";
|
|
5
|
+
import { type TensionBlastResult } from "../curation/tension-blast.js";
|
|
6
|
+
import { type TensionClustersResult } from "../curation/tension-clusters.js";
|
|
5
7
|
import { type Result } from "../frontmatter/types.js";
|
|
6
8
|
import type { ToolDefinition } from "./read.js";
|
|
7
9
|
export declare function vaultTensionLog(vaultRoot: string, args: Record<string, unknown>, access?: AccessContext): Promise<Result<TensionEntry, Error>>;
|
|
10
|
+
export declare function vaultTensionResolve(vaultRoot: string, args: Record<string, unknown>, access?: AccessContext): Promise<Result<TensionEntry, Error>>;
|
|
11
|
+
export declare function vaultTensionClusters(vaultRoot: string, _args?: Record<string, unknown>, access?: AccessContext): Promise<Result<TensionClustersResult, Error>>;
|
|
12
|
+
export declare function vaultTensionBlast(vaultRoot: string, args: Record<string, unknown>, access?: AccessContext): Promise<Result<TensionBlastResult, Error>>;
|
|
8
13
|
export interface VaultLintResult {
|
|
9
14
|
generatedAt: string;
|
|
10
15
|
filter: LintCheckName | null;
|
|
11
16
|
checks: Partial<Record<LintCheckName, LintFinding[]>>;
|
|
12
17
|
totalFindings: number;
|
|
18
|
+
tensionHealth: TensionHealth;
|
|
13
19
|
}
|
|
14
20
|
export declare function vaultLint(vaultRoot: string, args?: Record<string, unknown>, access?: AccessContext): Promise<Result<VaultLintResult, Error>>;
|
|
15
21
|
export interface VaultProvenanceResult {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"curation.d.ts","sourceRoot":"","sources":["../../src/tools/curation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"curation.d.ts","sourceRoot":"","sources":["../../src/tools/curation.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,aAAa,EAAc,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,WAAW,EAEhB,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,eAAe,EAAqB,MAAM,2BAA2B,CAAC;AACpF,OAAO,EAML,KAAK,YAAY,EAElB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAuB,KAAK,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAC5F,OAAO,EAAuB,KAAK,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAClG,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAkBhD,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CA+CtC;AAUD,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CA0DtC;AASD,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACnC,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC,CAI/C;AAWD,wBAAsB,iBAAiB,CACrC,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,CA0B5C;AAMD,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IACtD,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED,wBAAsB,SAAS,CAC7B,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EAClC,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,CAuCzC;AAMD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAID,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC,CAiB/C;AAMD,eAAO,MAAM,aAAa,EAAE,cAAc,EAsMzC,CAAC"}
|