@younndai/lyt 0.9.8 → 0.10.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.
Files changed (38) hide show
  1. package/README.md +13 -0
  2. package/dist/automator-bodies/metadata-filler.d.ts +21 -2
  3. package/dist/automator-bodies/metadata-filler.d.ts.map +1 -1
  4. package/dist/automator-bodies/metadata-filler.js +244 -40
  5. package/dist/automator-bodies/metadata-filler.js.map +1 -1
  6. package/dist/cli.js +12 -0
  7. package/dist/cli.js.map +1 -1
  8. package/dist/commands/backfill.d.ts +3 -0
  9. package/dist/commands/backfill.d.ts.map +1 -0
  10. package/dist/commands/backfill.js +101 -0
  11. package/dist/commands/backfill.js.map +1 -0
  12. package/dist/commands/capture.d.ts +14 -0
  13. package/dist/commands/capture.d.ts.map +1 -1
  14. package/dist/commands/capture.js +88 -2
  15. package/dist/commands/capture.js.map +1 -1
  16. package/dist/commands/contract.d.ts +15 -0
  17. package/dist/commands/contract.d.ts.map +1 -0
  18. package/dist/commands/contract.js +58 -0
  19. package/dist/commands/contract.js.map +1 -0
  20. package/dist/commands/init.d.ts.map +1 -1
  21. package/dist/commands/init.js +46 -1
  22. package/dist/commands/init.js.map +1 -1
  23. package/dist/commands/model.d.ts +11 -0
  24. package/dist/commands/model.d.ts.map +1 -0
  25. package/dist/commands/model.js +112 -0
  26. package/dist/commands/model.js.map +1 -0
  27. package/dist/commands/reconcile.d.ts +3 -0
  28. package/dist/commands/reconcile.d.ts.map +1 -0
  29. package/dist/commands/reconcile.js +102 -0
  30. package/dist/commands/reconcile.js.map +1 -0
  31. package/dist/commands/reindex.d.ts.map +1 -1
  32. package/dist/commands/reindex.js +38 -6
  33. package/dist/commands/reindex.js.map +1 -1
  34. package/dist/commands/search.d.ts +5 -0
  35. package/dist/commands/search.d.ts.map +1 -1
  36. package/dist/commands/search.js +30 -3
  37. package/dist/commands/search.js.map +1 -1
  38. package/package.json +6 -6
package/README.md CHANGED
@@ -71,6 +71,19 @@ leaves (unique-leaf, errors on collision), aliases, and `lyt:vault:` origin
71
71
  coordinates all resolve to it. `lyt vault init <mesh>/<vault>` is
72
72
  create-if-missing.
73
73
 
74
+ ## Metadata that stays correct
75
+
76
+ Every note carries an 8-field frontmatter contract — title, real dates, tags, a `topic`, and a `purpose` you write. Lyt keeps it correct at rest, sets it at capture, and heals legacy files — without ever touching your prose:
77
+
78
+ ```bash
79
+ lyt capture "an idea" --dir projects/notes # choose where it lands; sets a topic interactively
80
+ lyt vault backfill <name> # fill missing frontmatter on an existing vault, in place
81
+ lyt vault reconcile <name> --apply # heal notes that are unindexed or missing metadata
82
+ lyt doctor # count notes with missing or invalid frontmatter
83
+ ```
84
+
85
+ Backfill fills titles, genuine created/modified dates (from git history), and keyword tags **with no model required** — on any vault, including one you just imported. `purpose` is left blank and flagged, never guessed; anything you authored is never overwritten. When a local embedding model is present, `topic:` is enriched too — capture *suggests* one for you to confirm (never auto-selected), and backfill assigns a confident match from your vault's existing labels, leaving it blank when unsure. Topics are ranked against your vault's current on-disk labels and computed on-device — nothing is sent anywhere. Every machine-filled field is provenance-stamped, so it stays distinguishable from your own writing.
86
+
74
87
  ## The Lyt toolchain
75
88
 
76
89
  Lyt is an open toolchain — `@younndai/lyt` composes these packages, and you can also depend on any of them directly:
@@ -1,5 +1,6 @@
1
1
  import type { Client } from "@libsql/client";
2
2
  import { type LytRunContext } from "@younndai/lyt-runner";
3
+ import { type Embedder } from "@younndai/lyt-vault";
3
4
  declare const MANDATORY_FIELDS: readonly ["title", "created", "modified", "tags", "purpose", "topic", "mesh-visibility", "weight"];
4
5
  type MandatoryField = (typeof MANDATORY_FIELDS)[number];
5
6
  export interface MetadataFillerArgs {
@@ -19,6 +20,18 @@ export interface MetadataFillerOutcome {
19
20
  filesWritten: string[];
20
21
  }
21
22
  export declare function runMetadataFillerBody(ctx: LytRunContext, args: MetadataFillerArgs): Promise<MetadataFillerOutcome>;
23
+ interface EnrichmentContext {
24
+ existingTopics: string[];
25
+ labelVectors: Float32Array[];
26
+ embedder: Embedder | null;
27
+ }
28
+ interface FigmentEnrichment {
29
+ topic: string | null;
30
+ topicConfidence?: number | null;
31
+ tags: string[];
32
+ }
33
+ declare function enrichFigment(raw: string, slug: string, ctx: EnrichmentContext): Promise<FigmentEnrichment>;
34
+ declare function resolveFaithfulDate(absPath: string, vaultPath: string, vaultIsGitRepo: boolean): Promise<string>;
22
35
  interface FillResult {
23
36
  content: string;
24
37
  fieldsFilled: MandatoryField[];
@@ -26,9 +39,15 @@ interface FillResult {
26
39
  interface FillDefaults {
27
40
  filenameSlug: string;
28
41
  now: string;
42
+ enriched?: FigmentEnrichment;
29
43
  }
30
44
  export declare function fillMissingMandatoryFields(raw: string, defaults: FillDefaults): FillResult;
31
- declare function walkMarkdownFiles(root: string): string[];
45
+ export declare function detectMissingMandatoryFields(raw: string): MandatoryField[];
46
+ export declare function detectBlankEnrichableFields(raw: string): ("topic" | "tags")[];
47
+ declare function renderTagsValue(tags: readonly string[]): string;
48
+ declare function renderTopicValue(topic: string | null): string;
32
49
  export { MANDATORY_FIELDS };
33
- export { walkMarkdownFiles as _walkMarkdownFilesForTests };
50
+ export { resolveFaithfulDate as _resolveFaithfulDateForTests };
51
+ export { enrichFigment as _enrichFigmentForTests, renderTagsValue as _renderTagsValueForTests, renderTopicValue as _renderTopicValueForTests, };
52
+ export type { EnrichmentContext as _EnrichmentContext, FigmentEnrichment as _FigmentEnrichment };
34
53
  //# sourceMappingURL=metadata-filler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-filler.d.ts","sourceRoot":"","sources":["../../src/automator-bodies/metadata-filler.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAA0B,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAElF,QAAA,MAAM,gBAAgB,oGASZ,CAAC;AAEX,KAAK,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IAGzB,aAAa,CAAC,EAAE;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAG1B,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,qBAAqB,CAAC,CAqChC;AASD,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,cAAc,EAAE,CAAC;CAChC;AAED,UAAU,YAAY;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,UAAU,CA6D1F;AAgCD,iBAAS,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAuBjD;AAaD,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAC5B,OAAO,EAAE,iBAAiB,IAAI,0BAA0B,EAAE,CAAC"}
1
+ {"version":3,"file":"metadata-filler.d.ts","sourceRoot":"","sources":["../../src/automator-bodies/metadata-filler.ts"],"names":[],"mappings":"AA6EA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAA0B,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAcL,KAAK,QAAQ,EACd,MAAM,qBAAqB,CAAC;AAE7B,QAAA,MAAM,gBAAgB,oGASZ,CAAC;AAEX,KAAK,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IAGzB,aAAa,CAAC,EAAE;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAG1B,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,qBAAqB,CAAC,CAwHhC;AAuBD,UAAU,iBAAiB;IAIzB,cAAc,EAAE,MAAM,EAAE,CAAC;IAMzB,YAAY,EAAE,YAAY,EAAE,CAAC;IAE7B,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC3B;AAED,UAAU,iBAAiB;IAEzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAQrB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhC,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AA8DD,iBAAe,aAAa,CAC1B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,iBAAiB,GACrB,OAAO,CAAC,iBAAiB,CAAC,CA+B5B;AAoBD,iBAAe,mBAAmB,CAChC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,OAAO,GACtB,OAAO,CAAC,MAAM,CAAC,CA0BjB;AASD,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,cAAc,EAAE,CAAC;CAChC;AAED,UAAU,YAAY;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IAMZ,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,UAAU,CAU1F;AAqID,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,EAAE,CAqC1E;AAYD,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,EAAE,CAiC7E;AAuCD,iBAAS,eAAe,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAIxD;AAMD,iBAAS,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAGtD;AAiBD,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B,OAAO,EAAE,mBAAmB,IAAI,4BAA4B,EAAE,CAAC;AAE/D,OAAO,EACL,aAAa,IAAI,sBAAsB,EACvC,eAAe,IAAI,wBAAwB,EAC3C,gBAAgB,IAAI,yBAAyB,GAC9C,CAAC;AACF,YAAY,EAAE,iBAAiB,IAAI,kBAAkB,EAAE,iBAAiB,IAAI,kBAAkB,EAAE,CAAC"}
@@ -1,6 +1,7 @@
1
- import { readdirSync, readFileSync, statSync } from "node:fs";
2
- import { join, relative, sep, posix } from "node:path";
1
+ import { readFileSync, statSync } from "node:fs";
2
+ import { relative, sep, posix } from "node:path";
3
3
  import { writeMarkdownWithStamp } from "@younndai/lyt-runner";
4
+ import { classifyTopic, embedderMemoized, gitCommitterDateToIso, isGitRepo, isIndexable, loadEmbedder, modelCachePresent, parseFigmentTopicTags, precomputeTopicLabelVectors, runGit, stripFrontmatter, suggestFigmentTags, walkVaultMarkdownFiles, } from "@younndai/lyt-vault";
4
5
  const MANDATORY_FIELDS = [
5
6
  "title",
6
7
  "created",
@@ -12,22 +13,39 @@ const MANDATORY_FIELDS = [
12
13
  "weight",
13
14
  ];
14
15
  export async function runMetadataFillerBody(ctx, args) {
15
- const notesRoot = join(args.vaultPath, "notes");
16
- const targets = walkMarkdownFiles(notesRoot);
16
+ const targets = walkVaultMarkdownFiles(args.vaultPath, isIndexable);
17
17
  const outcome = {
18
18
  filesScanned: targets.length,
19
19
  filesMutated: 0,
20
20
  fieldsFilledTotal: 0,
21
21
  filesWritten: [],
22
22
  };
23
+ const vaultIsGitRepo = await isGitRepo(args.vaultPath);
24
+ const enrichCtx = await resolveEnrichmentContext(targets);
23
25
  for (const absPath of targets) {
24
26
  const raw = readFileSync(absPath, "utf8");
27
+ const missing = detectMissingMandatoryFields(raw);
28
+ const blankEnrichable = detectBlankEnrichableFields(raw);
29
+ if (missing.length === 0 && blankEnrichable.length === 0)
30
+ continue;
31
+ const faithfulDate = await resolveFaithfulDate(absPath, args.vaultPath, vaultIsGitRepo);
32
+ const wantsTopic = missing.includes("topic") || blankEnrichable.includes("topic");
33
+ const wantsTags = missing.includes("tags") || blankEnrichable.includes("tags");
34
+ const enriched = wantsTopic || wantsTags
35
+ ? await enrichFigment(raw, filenameSlug(absPath), enrichCtx)
36
+ : undefined;
25
37
  const filled = fillMissingMandatoryFields(raw, {
26
38
  filenameSlug: filenameSlug(absPath),
27
- now: new Date(ctx.startedAt).toISOString(),
39
+ now: faithfulDate,
40
+ ...(enriched !== undefined ? { enriched } : {}),
28
41
  });
29
42
  if (filled.fieldsFilled.length === 0)
30
43
  continue;
44
+ const enrichedFields = enriched !== undefined
45
+ ? filled.fieldsFilled.filter((f) => (f === "topic" && enriched.topic !== null) ||
46
+ (f === "tags" && enriched.tags.length > 0))
47
+ : [];
48
+ const topicWasEnriched = enrichedFields.includes("topic");
31
49
  await writeMarkdownWithStamp(ctx, args.vaultDb, {
32
50
  path: absPath,
33
51
  content: filled.content,
@@ -36,7 +54,13 @@ export async function runMetadataFillerBody(ctx, args) {
36
54
  src: `automator:${args.automatorName}/v${args.automatorVersion}`,
37
55
  method: "filler",
38
56
  confidence: 1.0,
39
- details: { fields_filled: filled.fieldsFilled },
57
+ details: {
58
+ fields_filled: filled.fieldsFilled,
59
+ ...(enrichedFields.length > 0 ? { enriched_fields: enrichedFields } : {}),
60
+ ...(topicWasEnriched && enriched?.topicConfidence !== null && enriched?.topicConfidence !== undefined
61
+ ? { topic_confidence: enriched.topicConfidence }
62
+ : {}),
63
+ },
40
64
  },
41
65
  ...(args.ledgerClients !== undefined ? { ledgerClients: args.ledgerClients } : {}),
42
66
  });
@@ -46,8 +70,91 @@ export async function runMetadataFillerBody(ctx, args) {
46
70
  }
47
71
  return outcome;
48
72
  }
73
+ async function resolveEnrichmentContext(targets) {
74
+ const rawTopics = [];
75
+ const seen = new Set();
76
+ for (const absPath of targets) {
77
+ let topic = null;
78
+ try {
79
+ topic = parseFigmentTopicTags(readFileSync(absPath, "utf8")).topic;
80
+ }
81
+ catch {
82
+ continue;
83
+ }
84
+ if (topic === null)
85
+ continue;
86
+ const trimmed = topic.trim();
87
+ if (trimmed.length === 0)
88
+ continue;
89
+ const key = trimmed.toLowerCase();
90
+ if (seen.has(key))
91
+ continue;
92
+ seen.add(key);
93
+ rawTopics.push(trimmed);
94
+ }
95
+ let embedder = null;
96
+ if (modelCachePresent() || embedderMemoized()) {
97
+ try {
98
+ const load = await loadEmbedder();
99
+ if (load.available)
100
+ embedder = load.embedder;
101
+ }
102
+ catch {
103
+ embedder = null;
104
+ }
105
+ }
106
+ const { labels, vectors } = await precomputeTopicLabelVectors(rawTopics, embedder);
107
+ return { existingTopics: labels, labelVectors: vectors, embedder };
108
+ }
109
+ async function enrichFigment(raw, slug, ctx) {
110
+ const body = stripFrontmatter(raw);
111
+ const title = slug.replace(/[-_]+/g, " ").trim();
112
+ const figmentText = `${title}\n${body}`.trim();
113
+ const tags = figmentText.length > 0 ? suggestFigmentTags(title, body) : [];
114
+ let topic = null;
115
+ let topicConfidence = null;
116
+ if (ctx.embedder !== null && ctx.existingTopics.length > 0 && figmentText.length > 0) {
117
+ const result = await classifyTopic(figmentText, ctx.existingTopics, ctx.embedder, {
118
+ labelVectors: ctx.labelVectors,
119
+ });
120
+ topic = result.topic;
121
+ if (topic !== null) {
122
+ const hit = result.ranked.find((r) => r.topic === topic);
123
+ topicConfidence = hit !== undefined ? hit.score : null;
124
+ }
125
+ }
126
+ return { topic, topicConfidence, tags };
127
+ }
128
+ async function resolveFaithfulDate(absPath, vaultPath, vaultIsGitRepo) {
129
+ if (vaultIsGitRepo) {
130
+ try {
131
+ const rel = relative(vaultPath, absPath).split(sep).join(posix.sep);
132
+ const r = await runGit(["log", "-1", "--format=%ct", "--", rel], {
133
+ cwd: vaultPath,
134
+ allowFailure: true,
135
+ });
136
+ if (r.code === 0) {
137
+ const raw = r.stdout.trim();
138
+ if (raw.length > 0) {
139
+ const iso = gitCommitterDateToIso(raw);
140
+ if (iso !== null)
141
+ return iso;
142
+ }
143
+ }
144
+ }
145
+ catch {
146
+ }
147
+ }
148
+ return new Date(statSync(absPath).mtimeMs).toISOString();
149
+ }
49
150
  const FRONTMATTER_DELIM = "---";
50
151
  export function fillMissingMandatoryFields(raw, defaults) {
152
+ const BOM = String.fromCodePoint(0xfeff);
153
+ const hasBom = raw.startsWith(BOM);
154
+ const inner = fillMissingMandatoryFieldsInner(hasBom ? raw.slice(1) : raw, defaults);
155
+ return hasBom ? { ...inner, content: BOM + inner.content } : inner;
156
+ }
157
+ function fillMissingMandatoryFieldsInner(raw, defaults) {
51
158
  const lines = raw.split(/\r?\n/);
52
159
  let firstNonEmpty = -1;
53
160
  for (let i = 0; i < lines.length; i++) {
@@ -79,25 +186,137 @@ export function fillMissingMandatoryFields(raw, defaults) {
79
186
  }
80
187
  const present = new Set();
81
188
  for (let i = firstNonEmpty + 1; i < closeIdx; i++) {
82
- const lineNoIndent = lines[i].replace(/^\s+/, "");
189
+ const line = lines[i];
190
+ if (/^\s/.test(line))
191
+ continue;
83
192
  for (const f of MANDATORY_FIELDS) {
84
- if (lineNoIndent.startsWith(`${f}:`) || lineNoIndent.startsWith(`${f} :`)) {
193
+ if (line.startsWith(`${f}:`) || line.startsWith(`${f} :`)) {
85
194
  present.add(f);
86
195
  break;
87
196
  }
88
197
  }
89
198
  }
90
199
  const missing = MANDATORY_FIELDS.filter((f) => !present.has(f));
91
- if (missing.length === 0) {
200
+ const blankReplaced = [];
201
+ for (const field of ["topic", "tags"]) {
202
+ if (!present.has(field))
203
+ continue;
204
+ const rendered = renderDefault(field, defaults);
205
+ if (rendered === blankDefaultFor(field))
206
+ continue;
207
+ for (let i = firstNonEmpty + 1; i < closeIdx; i++) {
208
+ const line = lines[i];
209
+ if (/^\s/.test(line))
210
+ continue;
211
+ if (!(line.startsWith(`${field}:`) || line.startsWith(`${field} :`)))
212
+ continue;
213
+ const value = line.slice(line.indexOf(":") + 1).trim();
214
+ if (!isBlankEnrichableValue(field, value))
215
+ break;
216
+ lines[i] = `${field}: ${rendered}`;
217
+ blankReplaced.push(field);
218
+ break;
219
+ }
220
+ }
221
+ if (missing.length === 0 && blankReplaced.length === 0) {
92
222
  return { content: raw, fieldsFilled: [] };
93
223
  }
94
224
  const insertions = missing.map((f) => `${f}: ${renderDefault(f, defaults)}`);
95
- lines.splice(closeIdx, 0, ...insertions);
225
+ if (insertions.length > 0)
226
+ lines.splice(closeIdx, 0, ...insertions);
96
227
  return {
97
228
  content: lines.join("\n"),
98
- fieldsFilled: missing,
229
+ fieldsFilled: [...missing, ...blankReplaced],
99
230
  };
100
231
  }
232
+ function isBlankEnrichableValue(field, value) {
233
+ const v = value.trim();
234
+ if (v.length === 0)
235
+ return true;
236
+ if (v === '""' || v === "''")
237
+ return true;
238
+ if (field === "tags" && v === "[]")
239
+ return true;
240
+ return false;
241
+ }
242
+ function blankDefaultFor(field) {
243
+ return field === "tags" ? "[]" : '""';
244
+ }
245
+ export function detectMissingMandatoryFields(raw) {
246
+ const BOM = String.fromCodePoint(0xfeff);
247
+ const inner = raw.startsWith(BOM) ? raw.slice(1) : raw;
248
+ const lines = inner.split(/\r?\n/);
249
+ let firstNonEmpty = -1;
250
+ for (let i = 0; i < lines.length; i++) {
251
+ if (lines[i].length > 0) {
252
+ firstNonEmpty = i;
253
+ break;
254
+ }
255
+ }
256
+ if (firstNonEmpty === -1 || lines[firstNonEmpty] !== FRONTMATTER_DELIM) {
257
+ return [...MANDATORY_FIELDS];
258
+ }
259
+ let closeIdx = -1;
260
+ for (let i = firstNonEmpty + 1; i < lines.length; i++) {
261
+ if (lines[i] === FRONTMATTER_DELIM) {
262
+ closeIdx = i;
263
+ break;
264
+ }
265
+ }
266
+ if (closeIdx === -1)
267
+ return [...MANDATORY_FIELDS];
268
+ const present = new Set();
269
+ for (let i = firstNonEmpty + 1; i < closeIdx; i++) {
270
+ const line = lines[i];
271
+ if (/^\s/.test(line))
272
+ continue;
273
+ for (const f of MANDATORY_FIELDS) {
274
+ if (line.startsWith(`${f}:`) || line.startsWith(`${f} :`)) {
275
+ present.add(f);
276
+ break;
277
+ }
278
+ }
279
+ }
280
+ return MANDATORY_FIELDS.filter((f) => !present.has(f));
281
+ }
282
+ export function detectBlankEnrichableFields(raw) {
283
+ const BOM = String.fromCodePoint(0xfeff);
284
+ const inner = raw.startsWith(BOM) ? raw.slice(1) : raw;
285
+ const lines = inner.split(/\r?\n/);
286
+ let firstNonEmpty = -1;
287
+ for (let i = 0; i < lines.length; i++) {
288
+ if (lines[i].length > 0) {
289
+ firstNonEmpty = i;
290
+ break;
291
+ }
292
+ }
293
+ if (firstNonEmpty === -1 || lines[firstNonEmpty] !== FRONTMATTER_DELIM)
294
+ return [];
295
+ let closeIdx = -1;
296
+ for (let i = firstNonEmpty + 1; i < lines.length; i++) {
297
+ if (lines[i] === FRONTMATTER_DELIM) {
298
+ closeIdx = i;
299
+ break;
300
+ }
301
+ }
302
+ if (closeIdx === -1)
303
+ return [];
304
+ const blank = [];
305
+ for (const field of ["topic", "tags"]) {
306
+ for (let i = firstNonEmpty + 1; i < closeIdx; i++) {
307
+ const line = lines[i];
308
+ if (/^\s/.test(line))
309
+ continue;
310
+ if (!(line.startsWith(`${field}:`) || line.startsWith(`${field} :`)))
311
+ continue;
312
+ const value = line.slice(line.indexOf(":") + 1).trim();
313
+ if (isBlankEnrichableValue(field, value))
314
+ blank.push(field);
315
+ break;
316
+ }
317
+ }
318
+ return blank;
319
+ }
101
320
  function renderFreshFrontmatter(defaults) {
102
321
  const body = MANDATORY_FIELDS.map((f) => `${f}: ${renderDefault(f, defaults)}`).join("\n");
103
322
  return `---\n${body}\n---`;
@@ -111,43 +330,27 @@ function renderDefault(field, defaults) {
111
330
  case "modified":
112
331
  return defaults.now;
113
332
  case "tags":
114
- return "[]";
333
+ return renderTagsValue(defaults.enriched?.tags ?? []);
115
334
  case "purpose":
116
335
  return '""';
117
336
  case "topic":
118
- return '""';
337
+ return renderTopicValue(defaults.enriched?.topic ?? null);
119
338
  case "mesh-visibility":
120
339
  return "local";
121
340
  case "weight":
122
341
  return "3";
123
342
  }
124
343
  }
125
- function walkMarkdownFiles(root) {
126
- const out = [];
127
- let names;
128
- try {
129
- names = readdirSync(root);
130
- }
131
- catch {
132
- return out;
133
- }
134
- for (const name of names) {
135
- const p = join(root, name);
136
- let stat;
137
- try {
138
- stat = statSync(p);
139
- }
140
- catch {
141
- continue;
142
- }
143
- if (stat.isDirectory()) {
144
- out.push(...walkMarkdownFiles(p));
145
- }
146
- else if (stat.isFile() && p.toLowerCase().endsWith(".md")) {
147
- out.push(p);
148
- }
149
- }
150
- return out;
344
+ function renderTagsValue(tags) {
345
+ if (tags.length === 0)
346
+ return "[]";
347
+ const items = tags.map((t) => `"${t.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`);
348
+ return `[${items.join(", ")}]`;
349
+ }
350
+ function renderTopicValue(topic) {
351
+ if (topic === null || topic.trim().length === 0)
352
+ return '""';
353
+ return `"${topic.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
151
354
  }
152
355
  function filenameSlug(absPath) {
153
356
  const parts = absPath.split(/[\\/]/);
@@ -158,5 +361,6 @@ function toVaultRel(absPath, vaultRoot) {
158
361
  return relative(vaultRoot, absPath).split(sep).join(posix.sep);
159
362
  }
160
363
  export { MANDATORY_FIELDS };
161
- export { walkMarkdownFiles as _walkMarkdownFilesForTests };
364
+ export { resolveFaithfulDate as _resolveFaithfulDateForTests };
365
+ export { enrichFigment as _enrichFigmentForTests, renderTagsValue as _renderTagsValueForTests, renderTopicValue as _renderTopicValueForTests, };
162
366
  //# sourceMappingURL=metadata-filler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-filler.js","sourceRoot":"","sources":["../../src/automator-bodies/metadata-filler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metadata-filler.js","sourceRoot":"","sources":["../../src/automator-bodies/metadata-filler.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -7,10 +7,14 @@ import { buildSkillsCommand } from "@younndai/lyt-skills";
7
7
  import { registerVaultVerbs } from "@younndai/lyt-vault";
8
8
  import { buildAgentManualCommand, buildDiscoverCommand, buildRepairCommand, } from "@younndai/lyt-vault";
9
9
  import { buildAutomatorRunSubcommand } from "./cli-automator-run.js";
10
+ import { buildBackfillCommand } from "./commands/backfill.js";
10
11
  import { buildBenchCommand } from "./commands/bench.js";
11
12
  import { buildCaptureCommand } from "./commands/capture.js";
13
+ import { buildContractCommand } from "./commands/contract.js";
12
14
  import { buildLytInitCommand } from "./commands/init.js";
15
+ import { buildModelCommand } from "./commands/model.js";
13
16
  import { buildPrimerCommand } from "./commands/primer.js";
17
+ import { buildReconcileCommand } from "./commands/reconcile.js";
14
18
  import { buildReindexCommand } from "./commands/reindex.js";
15
19
  import { buildSearchCommand } from "./commands/search.js";
16
20
  const program = new Command();
@@ -31,13 +35,21 @@ if (automatorCmd === undefined) {
31
35
  throw new Error("@younndai/lyt meta CLI: expected registerVaultVerbs to register an 'automator' command but none was found.");
32
36
  }
33
37
  automatorCmd.addCommand(buildAutomatorRunSubcommand());
38
+ const vaultCmd = program.commands.find((c) => c.name() === "vault");
39
+ if (vaultCmd === undefined) {
40
+ throw new Error("@younndai/lyt meta CLI: expected registerVaultVerbs to register a 'vault' command but none was found.");
41
+ }
42
+ vaultCmd.addCommand(buildBackfillCommand());
43
+ vaultCmd.addCommand(buildReconcileCommand());
34
44
  program.addCommand(buildSyncCommand());
35
45
  program.addCommand(buildPodStatusCommand());
36
46
  program.addCommand(buildMcpSubcommand());
37
47
  program.addCommand(buildSearchCommand());
38
48
  program.addCommand(buildCaptureCommand());
49
+ program.addCommand(buildContractCommand());
39
50
  program.addCommand(buildPrimerCommand());
40
51
  program.addCommand(buildReindexCommand());
52
+ program.addCommand(buildModelCommand());
41
53
  program.addCommand(buildBenchCommand());
42
54
  program.addCommand(buildLytInitCommand());
43
55
  program.addCommand(buildDiscoverCommand());
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAiBA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CACV,iLAAiL,CAClL;KACA,OAAO,CAAE,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAyB,CAAC,OAAO,CAAC,CAAC;AAkC/F,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,CAAC;AAClE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;IAC1B,MAAM,IAAI,KAAK,CACb,sGAAsG,CACvG,CAAC;AACJ,CAAC;AACD,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAC3C,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;AACzC,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;AAEzC,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,WAAW,CAAC,CAAC;AAC5E,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;IAC/B,MAAM,IAAI,KAAK,CACb,4GAA4G,CAC7G,CAAC;AACJ,CAAC;AACD,YAAY,CAAC,UAAU,CAAC,2BAA2B,EAAE,CAAC,CAAC;AAOvD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,OAAO,CAAC,CAAC;AACpE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;IAC3B,MAAM,IAAI,KAAK,CACb,uGAAuG,CACxG,CAAC;AACJ,CAAC;AACD,QAAQ,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAC5C,QAAQ,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;AAE7C,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;AAKvC,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;AAC5C,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;AAQzC,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;AAOzC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAO1C,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAO3C,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;AAOzC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAO1C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAMxC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAMxC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAQ1C,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAU3C,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;AASzC,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;AASzC,OAAO,CAAC,UAAU,CAAC,uBAAuB,EAAE,CAAC,CAAC;AAE9C,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACtD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAEjE,OAAO,CAAC,KAAK,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAC;IACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function buildBackfillCommand(): Command;
3
+ //# sourceMappingURL=backfill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backfill.d.ts","sourceRoot":"","sources":["../../src/commands/backfill.ts"],"names":[],"mappings":"AA4CA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgCpC,wBAAgB,oBAAoB,IAAI,OAAO,CAmG9C"}
@@ -0,0 +1,101 @@
1
+ import { Command } from "commander";
2
+ import { reconcileVaultScan } from "@younndai/lyt-vault";
3
+ import { runAutomator } from "../automator-run.js";
4
+ function asOutcome(body) {
5
+ const o = (body ?? {});
6
+ return {
7
+ filesScanned: typeof o.filesScanned === "number" ? o.filesScanned : 0,
8
+ filesMutated: typeof o.filesMutated === "number" ? o.filesMutated : 0,
9
+ fieldsFilledTotal: typeof o.fieldsFilledTotal === "number" ? o.fieldsFilledTotal : 0,
10
+ filesWritten: Array.isArray(o.filesWritten) ? o.filesWritten : [],
11
+ };
12
+ }
13
+ export function buildBackfillCommand() {
14
+ return new Command("backfill")
15
+ .description("Backfill missing frontmatter across a vault's figments (deterministic: real git/fs dates, purpose/topic left blank + flagged, provenance-stamped). Never overwrites existing values. Writes locally; use --push to also commit + push. NOT `lyt repair`.")
16
+ .argument("<name>", "Vault name to backfill (must be registered)")
17
+ .option("--dry-run", "Preview which figments WOULD be filled — read-only, writes nothing")
18
+ .option("--push", "Also git-commit + push the fills (default: write locally, run `lyt sync` to publish)")
19
+ .option("--json", "Emit a JSON result instead of the human-readable summary")
20
+ .action(async (name, opts) => {
21
+ if (opts.dryRun === true) {
22
+ let scan;
23
+ try {
24
+ scan = await reconcileVaultScan(name);
25
+ }
26
+ catch (err) {
27
+ reportError(opts, name, err);
28
+ process.exit(1);
29
+ }
30
+ const wouldFill = scan.missingFrontmatter;
31
+ if (opts.json === true) {
32
+ console.log(JSON.stringify({
33
+ dry_run: true,
34
+ vault: { name: scan.vaultName, path: scan.vaultPath },
35
+ scanned: scan.scanned,
36
+ would_fill: wouldFill.length,
37
+ figments: wouldFill,
38
+ }, null, 2));
39
+ }
40
+ else {
41
+ console.log(`backfill --dry-run ${scan.vaultName}: ${wouldFill.length}/${scan.scanned} figment(s) would be filled (nothing written).`);
42
+ for (const f of wouldFill.slice(0, 20)) {
43
+ console.log(` ${f.relPath} — missing: ${f.missing.join(", ")}`);
44
+ }
45
+ if (wouldFill.length > 20) {
46
+ console.log(` … and ${wouldFill.length - 20} more`);
47
+ }
48
+ }
49
+ return;
50
+ }
51
+ let result;
52
+ try {
53
+ result = await runAutomator({
54
+ automator: "metadata-filler",
55
+ vault: name,
56
+ ...(opts.push !== true ? { noPush: true } : {}),
57
+ });
58
+ }
59
+ catch (err) {
60
+ reportError(opts, name, err);
61
+ process.exit(1);
62
+ }
63
+ const outcome = asOutcome(result.body);
64
+ const payload = {
65
+ ok: result.ok,
66
+ vault: { name: result.plan.vaultName, path: result.plan.vaultPath },
67
+ automator_version: result.automatorVersion,
68
+ status: result.status,
69
+ error_summary: result.errorSummary,
70
+ pushed: opts.push === true,
71
+ files_scanned: outcome.filesScanned,
72
+ files_mutated: outcome.filesMutated,
73
+ fields_filled_total: outcome.fieldsFilledTotal,
74
+ files_written: outcome.filesWritten,
75
+ };
76
+ if (opts.json === true) {
77
+ console.log(JSON.stringify(payload, null, 2));
78
+ }
79
+ else {
80
+ console.log(`${result.ok ? "✓" : "✗"} backfill ${payload.vault.name}: ` +
81
+ `${outcome.filesMutated}/${outcome.filesScanned} figment(s) filled ` +
82
+ `(${outcome.fieldsFilledTotal} field(s))${opts.push === true ? " [pushed]" : " [local — run `lyt sync` to publish]"}` +
83
+ `${payload.error_summary !== null ? ` — ${payload.error_summary}` : ""}`);
84
+ if (outcome.filesMutated === 0 && result.ok) {
85
+ console.log(" all figments already carry contract-valid frontmatter (nothing to fill).");
86
+ }
87
+ }
88
+ if (!result.ok)
89
+ process.exit(1);
90
+ });
91
+ }
92
+ function reportError(opts, name, err) {
93
+ const msg = err instanceof Error ? err.message : String(err);
94
+ if (opts.json === true) {
95
+ console.log(JSON.stringify({ ok: false, vault: name, error: msg }, null, 2));
96
+ }
97
+ else {
98
+ console.error(`✗ backfill ${name}: ${msg}`);
99
+ }
100
+ }
101
+ //# sourceMappingURL=backfill.js.map