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.
@@ -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. Resolution is a human/curatorial act, so an
6
- // entry just carries a Status the curator updates by hand.
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 append-only
9
- // from this module's side. Each entry is one `## ` block.
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
- return (`## ${entry.date} — ${entry.title}\n` +
22
- `- **Source A:** ${entry.sourceA} says ${entry.claimA}\n` +
23
- `- **Source B:** ${entry.sourceB} says ${entry.claimB}\n` +
24
- `- **Status:** ${entry.status}\n` +
25
- `- **Logged by:** ${entry.loggedBy}\n`);
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
- // Appends a tension entry to .daftari/tensions.md. Date defaults to today and
28
- // status to "unresolved" a freshly logged tension is unresolved by
29
- // definition.
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 === "source a") {
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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"}
@@ -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":"AAQA,OAAO,EAAE,KAAK,aAAa,EAAc,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAe,KAAK,aAAa,EAAE,KAAK,WAAW,EAAW,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAE,KAAK,eAAe,EAAqB,MAAM,2BAA2B,CAAC;AACpF,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAM,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAC1D,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,CAoCtC;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;CACvB;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,CAqCzC;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,EAsFzC,CAAC"}
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"}