@cr8rcho/alkahest 0.1.71 → 0.1.73

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.
@@ -14,9 +14,15 @@
14
14
  * on the target note map so the web shows typed rows. `title`/`created`/`updated`/cssclass
15
15
  * keys are skipped (title feeds the note title; timestamps collide with real columns).
16
16
  *
17
- * Idempotent by title: a file whose title matches an existing note (case-insensitive)
18
- * updates that note's body instead of creating a duplicate, so re-running an import
19
- * refreshes the map.
17
+ * Idempotent by SOURCE, then by title: every imported note is stamped with a `source_path`
18
+ * prop (frontmatter `source_path:` override > the file's path relative to the import root),
19
+ * and a file whose source matches an existing note updates that note IN PLACE — including a
20
+ * title change, so retitling a document no longer mints a duplicate and orphans the old note.
21
+ * Files without a source match fall back to the original case-insensitive title match (which
22
+ * is also the upgrade path: the first re-import after this change matches by title and stamps
23
+ * the source). Staged/transformed trees whose on-disk layout is derived (e.g. a docs mirror
24
+ * whose filenames follow titles) should write the ORIGINAL repo path into `source_path:`
25
+ * frontmatter so the identity survives the transform.
20
26
  *
21
27
  * Like notes.ts, everything returns a structured result and never writes to stdout.
22
28
  */
@@ -33,10 +39,16 @@ export interface ImportFilePlan {
33
39
  props: Record<string, unknown>;
34
40
  /** Tree path = the file's subdirectory relative to the import root ('' at the root). */
35
41
  folder: string;
42
+ /** Rename-safe identity stamped into props.source_path (frontmatter override > relpath). */
43
+ source: string;
36
44
  /** Normalized [[wikilink]] targets found in the body (deduped, self-links dropped). */
37
45
  links: string[];
38
46
  /** What the import will do with it: create | update. */
39
47
  action: "create" | "update";
48
+ /** For updates: which key found the existing note. */
49
+ matched_by?: "source" | "title";
50
+ /** For source-matched updates whose title changed: the note is retitled in place. */
51
+ retitle?: boolean;
40
52
  }
41
53
  export interface NotesImportParams {
42
54
  api?: string;
@@ -57,6 +69,8 @@ export interface NotesImportResult {
57
69
  files?: ImportFilePlan[];
58
70
  created?: number;
59
71
  updated?: number;
72
+ /** Of the updates: notes retitled in place via a source_path match (no duplicate minted). */
73
+ renamed?: number;
60
74
  linked?: number;
61
75
  /** Files whose frontmatter yielded properties. */
62
76
  withProps?: number;
@@ -22,6 +22,11 @@ function walkMarkdown(root) {
22
22
  /** Frontmatter keys that never become props: title feeds the note title, timestamps collide
23
23
  * with the hosted real columns, css/position are Obsidian display internals. */
24
24
  const SKIPPED_KEYS = new Set(["title", "created", "updated", "cssclass", "cssclasses", "position"]);
25
+ /** Reserved provenance prop: the import's rename-safe identity key. Harvested from frontmatter
26
+ * as an override, else derived from the file's path relative to the import root; stamped into
27
+ * props on every write; matched BEFORE title so retitled documents update in place. Never
28
+ * registered as a notebook prop def (like `tags`). */
29
+ const SOURCE_KEY = "source_path";
25
30
  /** One scalar: strip quotes, coerce booleans/numbers, keep everything else a string. */
26
31
  function scalar(v) {
27
32
  const t = v.trim().replace(/^["']|["']$/g, "");
@@ -174,21 +179,42 @@ export async function importNotes(path, params) {
174
179
  if (!pull.ok)
175
180
  return { ok: false, code: pull.code, message: pull.message, maps: pull.mapList };
176
181
  const existingByTitle = new Map();
182
+ const existingBySource = new Map();
177
183
  for (const m of pull.maps ?? []) {
178
- for (const n of m.notes)
179
- existingByTitle.set(n.title.trim().toLowerCase(), { id: n.id, slug: n.slug });
184
+ for (const n of m.notes) {
185
+ existingByTitle.set(n.title.trim().toLowerCase(), { id: n.id, slug: n.slug, title: n.title });
186
+ const src = n.props?.[SOURCE_KEY];
187
+ if (typeof src === "string" && src.trim())
188
+ existingBySource.set(src.trim(), { id: n.id, slug: n.slug, title: n.title });
189
+ }
180
190
  }
191
+ /** Source first (rename-safe identity), title as the fallback/upgrade path. */
192
+ const findExisting = (source, titleKey) => existingBySource.has(source)
193
+ ? { note: existingBySource.get(source), matched_by: "source" }
194
+ : existingByTitle.has(titleKey)
195
+ ? { note: existingByTitle.get(titleKey), matched_by: "title" }
196
+ : null;
181
197
  const plans = files.map((file) => {
182
198
  const { title: fmTitle, props, rest } = parseFrontmatter(readFileSync(file, "utf8"));
199
+ // The provenance override rides in as a prop — pull it out so it never double-registers.
200
+ const fmSource = typeof props[SOURCE_KEY] === "string" ? String(props[SOURCE_KEY]).trim() : "";
201
+ delete props[SOURCE_KEY];
183
202
  const name = basename(file, ".md").trim();
184
203
  const title = fmTitle || name;
185
204
  const body = rest.trim();
186
205
  const links = extractLinks(body).filter((t) => t.toLowerCase() !== name.toLowerCase());
187
- const action = existingByTitle.has(title.trim().toLowerCase()) ? "update" : "create";
206
+ const source = fmSource || relative(params.dir, file).split(sep).join("/");
207
+ const hit = findExisting(source, title.trim().toLowerCase());
188
208
  // The vault's directory structure becomes the note's tree path (cloud ADR-035).
189
209
  const rel = relative(params.dir, dirname(file));
190
210
  const folder = rel && rel !== "." ? rel.split(sep).join("/") : "";
191
- return { file, title, name, body, props, links, action, folder };
211
+ return {
212
+ file, title, name, body, props, links, folder, source,
213
+ action: hit ? "update" : "create",
214
+ ...(hit ? { matched_by: hit.matched_by } : {}),
215
+ ...(hit && hit.matched_by === "source" && hit.note.title.trim().toLowerCase() !== title.trim().toLowerCase()
216
+ ? { retitle: true } : {}),
217
+ };
192
218
  });
193
219
  if (params.dryRun) {
194
220
  const resolvable = new Set(plans.map((p) => p.name.toLowerCase()));
@@ -200,44 +226,52 @@ export async function importNotes(path, params) {
200
226
  ok: true, files: plans,
201
227
  created: plans.filter((p) => p.action === "create").length,
202
228
  updated: plans.filter((p) => p.action === "update").length,
229
+ renamed: plans.filter((p) => p.retitle).length,
203
230
  linked: plans.reduce((n, p) => n + p.links.filter((t) => resolvable.has(t.toLowerCase())).length, 0),
204
231
  withProps: plans.filter((p) => Object.keys(p.props).length > 0).length,
205
232
  unresolved,
206
233
  };
207
234
  }
208
- // Write pass 1 — the notes.
235
+ // Write pass 1 — the notes. Every write stamps the source_path prop (shallow-merged), so a
236
+ // pre-source pool upgrades itself: the first re-import matches by title and stamps identity.
209
237
  const failures = [];
210
- let created = 0, updated = 0;
238
+ let created = 0, updated = 0, renamed = 0;
211
239
  for (const p of plans) {
212
240
  const shared = { api: params.api, token: params.token, slug: params.slug };
213
- const existing = existingByTitle.get(p.title.trim().toLowerCase());
214
- if (existing) {
241
+ const hit = findExisting(p.source, p.title.trim().toLowerCase());
242
+ if (hit) {
243
+ const retitle = hit.matched_by === "source" && hit.note.title.trim().toLowerCase() !== p.title.trim().toLowerCase();
215
244
  const res = await updateNote(path, {
216
- ...shared, note: existing.id, body: p.body, folder: p.folder || null,
217
- ...(Object.keys(p.props).length ? { props: p.props } : {}), // shallow-merge server-side
245
+ ...shared, note: hit.note.id, body: p.body, folder: p.folder || null,
246
+ ...(retitle ? { title: p.title } : {}), // source identity survives a retitle — update in place
247
+ props: { ...p.props, [SOURCE_KEY]: p.source }, // shallow-merge server-side
218
248
  });
219
249
  if (!res.ok || !res.note) {
220
250
  failures.push({ file: p.file, message: res.message ?? res.code ?? "update failed" });
221
251
  continue;
222
252
  }
223
253
  // The note may live on other maps only — make sure it sits on the target map too.
224
- const mem = await mapNote(path, { ...shared, noteRef: existing.id, mapSlug: params.mapSlug });
254
+ const mem = await mapNote(path, { ...shared, noteRef: hit.note.id, mapSlug: params.mapSlug });
225
255
  if (!mem.ok) {
226
256
  failures.push({ file: p.file, message: mem.message ?? mem.code ?? "map failed" });
227
257
  continue;
228
258
  }
259
+ existingBySource.set(p.source, { id: hit.note.id, slug: hit.note.slug, title: p.title });
229
260
  updated++;
261
+ if (retitle)
262
+ renamed++;
230
263
  }
231
264
  else {
232
265
  const res = await createNote(path, {
233
266
  ...shared, mapSlug: params.mapSlug, title: p.title, body: p.body, folder: p.folder || undefined,
234
- ...(Object.keys(p.props).length ? { props: p.props } : {}),
267
+ props: { ...p.props, [SOURCE_KEY]: p.source },
235
268
  });
236
269
  if (!res.ok || !res.note) {
237
270
  failures.push({ file: p.file, message: res.message ?? res.code ?? "create failed" });
238
271
  continue;
239
272
  }
240
- existingByTitle.set(p.title.trim().toLowerCase(), { id: res.note.id, slug: res.note.slug });
273
+ existingByTitle.set(p.title.trim().toLowerCase(), { id: res.note.id, slug: res.note.slug, title: res.note.title });
274
+ existingBySource.set(p.source, { id: res.note.id, slug: res.note.slug, title: res.note.title });
241
275
  created++;
242
276
  }
243
277
  }
@@ -271,7 +305,7 @@ export async function importNotes(path, params) {
271
305
  }
272
306
  }
273
307
  return {
274
- ok: true, files: plans, created, updated, linked,
308
+ ok: true, files: plans, created, updated, renamed, linked,
275
309
  withProps: plans.filter((p) => Object.keys(p.props).length > 0).length,
276
310
  defsAdded, defsMerged,
277
311
  unresolved: [...unresolvedSet], failures,
@@ -1 +1 @@
1
- {"version":3,"file":"notesImport.js","sourceRoot":"","sources":["../../src/core/notesImport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"notesImport.js","sourceRoot":"","sources":["../../src/core/notesImport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAqB,MAAM,YAAY,CAAC;AA6F7G,mFAAmF;AACnF,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,EAAE;QAC5B,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACnC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC1B,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,EAAE,CAAC,WAAW,EAAE;gBAAE,KAAK,CAAC,CAAC,CAAC,CAAC;iBAC1B,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,CAAC;IACZ,OAAO,GAAG,CAAC;AACb,CAAC;AAED;iFACiF;AACjF,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;AAEpG;;;uDAGuD;AACvD,MAAM,UAAU,GAAG,aAAa,CAAC;AAEjC,wFAAwF;AACxF,SAAS,MAAM,CAAC,CAAS;IACvB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,CAAC,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAChC,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,GAAW;IACnC,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACzD,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,KAAyB,CAAC;IAC9B,MAAM,KAAK,GAA4B,EAAE,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACpE,IAAI,CAAC,EAAE;YAAE,SAAS,CAAC,2CAA2C;QAC9D,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACzB,kDAAkD;QAClD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC5B,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;gBAC/C,IAAI,CAAC,EAAE;oBAAE,MAAM;gBACf,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClC,CAAC,EAAE,CAAC;YACN,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,2DAA2D;gBAC9E,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAAE,CAAC,EAAE,CAAC;gBAC7D,SAAS;YACX,CAAC;YACD,KAAK,GAAG,EAAE,CAAC,CAAC,0BAA0B;YACtC,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;gBAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YAClE,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gBAAE,SAAS;YAClD,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACnB,SAAS;QACX,CAAC;QACD,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;YAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QAC/E,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YAAE,SAAS;QAClD,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,eAAe;YAC3C,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3F,CAAC;aAAM,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC,CAAC,gCAAgC;YACzE,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrG,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,0EAA0E;IAC1E,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClE,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC9F,IAAI,CAAE,KAAK,CAAC,IAAiB,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IAC1D,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;AACxD,CAAC;AAED;;+FAE+F;AAC/F,SAAS,SAAS,CAAC,KAA2C;IAC5D,MAAM,GAAG,GAAG,IAAI,GAAG,EAAwD,CAAC;IAC5E,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/C,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,MAAM;gBAAE,SAAS;YAC3C,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACrB,IAAI,CAAC,CAAC,EAAE,CAAC;gBAAC,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;gBAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAAC,CAAC;YAC1E,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAAC,KAAK,MAAM,CAAC,IAAI,CAAC;oBAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;iBACvF,IAAI,OAAO,CAAC,KAAK,SAAS;gBAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;iBACpD,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;iBACjD,IAAI,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;;gBAC9D,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;QACzC,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAA0B,CAAC,CAAC,CAAC,MAAM,CAAC;QACrF,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACjF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,uFAAuF;AACvF,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACtC,CAAC;AAED,0FAA0F;AAC1F,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACrD,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,MAAyB;IACvE,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,GAAG,sBAAsB,EAAE,CAAC;QAC7H,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,kBAAkB,MAAM,CAAC,GAAG,KAAK,GAAG,IAAI,EAAE,CAAC;IAC3F,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAClG,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC7E,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,sBAAsB,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC;IAExG,qFAAqF;IACrF,8CAA8C;IAC9C,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAChH,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;IAC/F,MAAM,eAAe,GAAG,IAAI,GAAG,EAAuD,CAAC;IACvF,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAuD,CAAC;IACxF,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;QAChC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;YACxB,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAC9F,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,CAAC;YAClC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE;gBAAE,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC1H,CAAC;IACH,CAAC;IACD,+EAA+E;IAC/E,MAAM,YAAY,GAAG,CAAC,MAAc,EAAE,QAAgB,EAAE,EAAE,CACxD,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC;QAC1B,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAE,EAAE,UAAU,EAAE,QAAiB,EAAE;QACxE,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC7B,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAE,EAAE,UAAU,EAAE,OAAgB,EAAE;YACxE,CAAC,CAAC,IAAI,CAAC;IAEb,MAAM,KAAK,GAAqB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACjD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACrF,yFAAyF;QACzF,MAAM,QAAQ,GAAG,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/F,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,OAAO,IAAI,IAAI,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACvF,MAAM,MAAM,GAAG,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3E,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QAC7D,gFAAgF;QAChF,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,OAAO;YACL,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM;YACrD,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,QAAiB,CAAC,CAAC,CAAC,QAAiB;YACnD,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9C,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC1G,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACnE,KAAK,MAAM,CAAC,IAAI,eAAe,CAAC,IAAI,EAAE;YAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;QACjF,MAAM,UAAU,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,OAAO;YACL,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK;YACtB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM;YAC1D,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM;YAC1D,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM;YAC9C,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YACpG,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM;YACtE,UAAU;SACX,CAAC;IACJ,CAAC;IAED,2FAA2F;IAC3F,6FAA6F;IAC7F,MAAM,QAAQ,GAAwC,EAAE,CAAC;IACzD,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC;IAC1C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QAC3E,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QACjE,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACpH,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE;gBACjC,GAAG,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,IAAI;gBACpE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,uDAAuD;gBAC/F,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,4BAA4B;aAC5E,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,IAAI,eAAe,EAAE,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YAC7H,kFAAkF;YAClF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9F,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,IAAI,YAAY,EAAE,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YAC7G,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YACzF,OAAO,EAAE,CAAC;YACV,IAAI,OAAO;gBAAE,OAAO,EAAE,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE;gBACjC,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,SAAS;gBAC/F,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;aAC9C,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,IAAI,eAAe,EAAE,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YAC7H,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACnH,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAChG,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IACD,2FAA2F;IAC3F,6EAA6E;IAC7E,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACnE,KAAK,MAAM,CAAC,IAAI,eAAe,CAAC,IAAI,EAAE;QAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1D,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;YACxB,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;gBAAE,MAAM,EAAE,CAAC;;gBACzC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,2FAA2F;IAC3F,2FAA2F;IAC3F,6DAA6D;IAC7D,IAAI,SAAS,GAAG,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE;YACvC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI;SACvF,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YAAC,SAAS,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;YAAC,UAAU,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;QAAC,CAAC;IAC3E,CAAC;IAED,OAAO;QACL,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM;QACzD,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM;QACtE,SAAS,EAAE,UAAU;QACrB,UAAU,EAAE,CAAC,GAAG,aAAa,CAAC,EAAE,QAAQ;KACzC,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cr8rcho/alkahest",
3
- "version": "0.1.71",
3
+ "version": "0.1.73",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -10,7 +10,8 @@
10
10
  "alkahest": "dist/cli.js"
11
11
  },
12
12
  "files": [
13
- "dist"
13
+ "dist",
14
+ "presets"
14
15
  ],
15
16
  "engines": {
16
17
  "node": ">=20"
@@ -0,0 +1,24 @@
1
+ <!-- alkahest as-built preset — installed by `alkahest docs init`. Owned by this repo: edit freely. -->
2
+ ## Documentation — as-built docs + ADR
3
+
4
+ This repo keeps **as-built documentation** under `docs/` (four layers: system / components /
5
+ features / modules — see docs/README.md) and **ADRs** under `docs/decisions/`. The writing
6
+ instructions live in the account skills `as-built-docs` and `adr` — read them via the
7
+ alkahest MCP `skills` tool before writing docs.
8
+
9
+ 1. **After finishing any code change, update the affected docs in the same session.**
10
+ The layer mapping and the update checklist are in the `as-built-docs` skill. Write an
11
+ ADR only for decisions whose "why" a code diff cannot reconstruct (criteria and the
12
+ template are in the `adr` skill).
13
+ 2. **First documentation pass (repo has no docs yet)?** Follow the bootstrap protocol in
14
+ the `as-built-docs` skill: one system map + 2–3 core modules + ADR-001 (architecture
15
+ snapshot) — small first, then mirror and hand the user the note-map link. Grow the rest
16
+ incrementally with later work.
17
+ 3. **After changing `docs/`, mirror it to the hosted note maps** by running
18
+ `node scripts/sync-docs-maps.mjs` (background recommended — one POST per document).
19
+ The script stages the docs (title from the first H1, H1 line stripped, intra-set
20
+ relative links → `[[wikilinks]]`, the original repo path injected as `source_path:`
21
+ frontmatter) and uploads with `alkahest notes import --map <adr|as-built>`. The import
22
+ is idempotent by source_path first, title second — re-runs and retitles update notes in
23
+ place. The script is a reference implementation and belongs to this repo: adapt it to
24
+ local conventions freely.
@@ -0,0 +1,16 @@
1
+ {
2
+ "id": "as-built",
3
+ "name": "as-built docs",
4
+ "description": "Living as-built documentation + an ADR log, written by your agent and mirrored to note maps.",
5
+ "skills": [
6
+ { "name": "as-built-docs", "file": "skills/as-built-docs.md" },
7
+ { "name": "adr", "file": "skills/adr.md" }
8
+ ],
9
+ "scaffold": "scaffold",
10
+ "snippet": "CLAUDE-snippet.md",
11
+ "scripts": [{ "file": "sync-docs-maps.mjs", "dest": "scripts/sync-docs-maps.mjs" }],
12
+ "maps": [
13
+ { "slug": "as-built", "name": "as-built" },
14
+ { "slug": "adr", "name": "adr" }
15
+ ]
16
+ }
@@ -0,0 +1,44 @@
1
+ # Documentation
2
+
3
+ This directory holds this repository's **as-built documentation** — documents that record
4
+ how the system is actually built (never plans or PRDs). Writing instructions live in the
5
+ `as-built-docs` account skill (read it via the alkahest MCP `skills` tool).
6
+
7
+ ## Layers
8
+
9
+ ```
10
+ docs/
11
+ ├── system/ ← whole-app overview (the map)
12
+ ├── components/ ← UI areas (what the user sees)
13
+ ├── features/ ← behaviors (what happens over time)
14
+ ├── modules/ ← code layers (developer view)
15
+ └── decisions/ ← ADRs — the append-only "why" axis (see decisions/README.md)
16
+ ```
17
+
18
+ ## Index
19
+
20
+ > Add one row per document as you create it.
21
+
22
+ ### System
23
+
24
+ | Document | Summary |
25
+ |---|---|
26
+
27
+ ### Components
28
+
29
+ | Document | Summary |
30
+ |---|---|
31
+
32
+ ### Features
33
+
34
+ | Document | Summary |
35
+ |---|---|
36
+
37
+ ### Modules
38
+
39
+ | Document | Summary |
40
+ |---|---|
41
+
42
+ ### Decisions
43
+
44
+ See [decisions/README.md](./decisions/README.md).
@@ -0,0 +1,12 @@
1
+ # Decisions (ADR)
2
+
3
+ This folder collects **Architecture Decision Records** — the why / alternatives /
4
+ trade-offs of decisions, frozen at decision time. Writing instructions and the template
5
+ live in the `adr` account skill (read it via the alkahest MCP `skills` tool).
6
+
7
+ Quick rules:
8
+
9
+ - `NNN-kebab-title.md`, zero-padded, sequential, never renumbered.
10
+ - Append-only: a changed decision gets a NEW ADR with `Supersedes:`; the old one keeps its
11
+ body and gets `Status: Superseded by …`.
12
+ - Start the practice with **ADR-001 — architecture snapshot** of the current code.
File without changes
@@ -0,0 +1,65 @@
1
+ # adr — decision records
2
+
3
+ ADRs (`docs/decisions/NNN-kebab-title.md`) record the **why** of decisions: context,
4
+ alternatives, trade-offs. They are a separate axis from as-built docs — as-built documents
5
+ are overwritten to stay current; ADRs are **append-only**, frozen at decision time.
6
+
7
+ ## When to write one
8
+
9
+ One-line test: **if the code diff alone cannot reconstruct the "why", it deserves an ADR.**
10
+
11
+ Typical cases: data-model or structural changes; policy decisions and their reversals;
12
+ adopting an external dependency or license; fixing an ownership boundary ("this module is
13
+ the single owner of that transform"); behavior changes that trade something away; and
14
+ decisions deliberately **not** taken (record the reason and the revisit trigger).
15
+
16
+ Skip when: plain bug fixes, refactors, dependency bumps — anything self-evident from the
17
+ code and the as-built docs.
18
+
19
+ ## Bootstrap — ADR-001
20
+
21
+ On a repo's first documentation pass, write **ADR-001 as an architecture snapshot**: the
22
+ decisions already embedded in the current code (framework, storage, module boundaries),
23
+ each with the alternatives it implicitly rejected. This seeds the habit of communicating
24
+ through decision records.
25
+
26
+ ## Numbering & lifecycle
27
+
28
+ - `NNN` is zero-padded, sequential, never reused or renumbered.
29
+ - Never rewrite an accepted ADR. When a decision changes, write a **new** ADR that names
30
+ the old one in `Supersedes:`, and flip the old one's Status to `Superseded by …`
31
+ (keep the body — "why we did it that way once, then backed out" is the value).
32
+
33
+ ## Tags (frontmatter)
34
+
35
+ Every ADR opens with a `tags:` frontmatter block. Keep the vocabulary small and stable:
36
+ one **surface** tag (the area of the product it touches) plus at most two **arc** tags
37
+ (a storyline several ADRs share). On the hosted `adr` note map each tag renders as a hub
38
+ node — keep every tag attached to roughly 3–12 ADRs so the map stays legible, and prefer
39
+ reusing an existing tag over inventing a new one.
40
+
41
+ ## Template
42
+
43
+ ```markdown
44
+ ---
45
+ tags: [<one surface tag>, <0-2 arc tags>]
46
+ ---
47
+
48
+ # ADR-NNN: <one-line title>
49
+
50
+ * **Status**: Accepted (YYYY-MM-DD)
51
+ * **Date**: YYYY-MM-DD
52
+ * **Supersedes**: none | ADR-NNN (partial/full)
53
+ * **Related**: ADRs, as-built docs
54
+
55
+ ***
56
+
57
+ ## 1. Context
58
+ ## 2. Decision
59
+ ## 3. Trade-offs
60
+ ## 4. Considered alternatives
61
+ ## 5. Known limitations
62
+ ```
63
+
64
+ Keep *Trade-offs*, *Considered alternatives*, and *Known limitations* non-empty — they are
65
+ the point of the record. Cite code richly (files, functions, constants).
@@ -0,0 +1,56 @@
1
+ # as-built-docs — writing instructions
2
+
3
+ You are maintaining this repository's **as-built documentation**: documents that record how
4
+ the system **is actually built**. Never plans, PRDs, or aspirations — present tense, code as
5
+ the source of truth.
6
+
7
+ ## The four layers
8
+
9
+ Documents live under `docs/` in four folders, split by scope and viewpoint:
10
+
11
+ | Layer | Scope | Viewpoint | Answers |
12
+ |---|---|---|---|
13
+ | `system/` | whole app | architecture / data flow | "How is this app put together overall?" |
14
+ | `components/` | one UI area | what the user sees | "What is on this screen area, and what does each control do?" |
15
+ | `features/` | one behavior | time / user action | "When and under what conditions does this behavior run?" |
16
+ | `modules/` | one code layer | developer view | "What does this layer provide, and how is it separated from the rest?" |
17
+
18
+ Placement rule of thumb: what the user *sees* → `components/`; what *happens over time* →
19
+ `features/`; *code structure* → `modules/`; the picture that crosses all three → `system/`.
20
+ When a topic straddles two layers, pick one as the **main** document and leave a short
21
+ summary + link in the other.
22
+
23
+ ## Bootstrap — when the repo has no docs yet
24
+
25
+ Do NOT try to document everything in one session. The first pass is deliberately small so
26
+ the user sees a map fast:
27
+
28
+ 1. `docs/system/<app>.md` — one system map: layers, data flow, key dependencies, honest
29
+ Known Limitations.
30
+ 2. Two or three `docs/modules/*.md` for the load-bearing modules only.
31
+ 3. One decision record (see the `adr` skill): **ADR-001, an architecture snapshot** — the
32
+ decisions already embedded in the current code.
33
+ 4. Add each document to the index in `docs/README.md`, then **mirror to the note maps and
34
+ hand the user the map link** (the mirroring rule lives in this repo's CLAUDE.md).
35
+
36
+ Grow the rest incrementally: each later work session adds or updates only the documents its
37
+ code changes touch.
38
+
39
+ ## Tone and rules
40
+
41
+ - **As-built, present tense** — "this is how it is built." Cite real file paths, function
42
+ names, and constants so readers can jump straight to code.
43
+ - **Decision history is a separate axis** — why / alternatives / trade-offs belong in ADRs
44
+ (`docs/decisions/`, see the `adr` skill), not in these documents.
45
+ - **Known Limitations, honestly** — the most valuable section of a post-hoc document.
46
+ Remove limitations you fixed; add the ones you introduced.
47
+ - **Overwrite freely** — these documents always describe the present. (ADRs are the
48
+ append-only record; never blend the two.)
49
+
50
+ ## After every code change (checklist)
51
+
52
+ - [ ] Does the affected document still describe current behavior?
53
+ - [ ] Are its code citations (paths, names, constants) still valid?
54
+ - [ ] Known Limitations updated — fixed ones removed, new ones added?
55
+ - [ ] Cross-references from documents in other layers updated?
56
+ - [ ] `docs/README.md` index still accurate (add a row when adding a document)?
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/env node
2
+ // Reference implementation (alkahest as-built preset) — mirror this repo's docs into the
3
+ // project's note maps:
4
+ // docs/decisions/NNN-*.md → note map `adr` (flat)
5
+ // docs/{system,components,features,modules}/*.md → note map `as-built` (folder = category)
6
+ //
7
+ // Staging transforms (the importer's rules: filename = title, frontmatter passes through):
8
+ // - title from the first H1 ("ADR-NNN: rest — tail" → "ADR-NNN rest"; as-built strips a
9
+ // "System|Component|Feature|Module — " class prefix and a " — " tail), sanitized;
10
+ // - the H1 line is dropped from the body (the note title renders it);
11
+ // - relative .md links WITHIN each set become [[wikilinks]] so the graph connects
12
+ // (cross-set links stay plain markdown);
13
+ // - the ORIGINAL repo path rides in as `source_path:` frontmatter — the staged filename
14
+ // is title-derived, so this is what keeps identity through a retitle (the importer
15
+ // matches source_path before title and renames the note in place).
16
+ //
17
+ // Re-running is safe: import is idempotent by source_path, then title.
18
+ // This script belongs to the repo it lives in — adapt titles/sets/maps to local conventions.
19
+ // Usage: node scripts/sync-docs-maps.mjs [--stage-only]
20
+ import { readdirSync, readFileSync, mkdirSync, writeFileSync, rmSync } from "node:fs";
21
+ import { spawnSync } from "node:child_process";
22
+ import { join, dirname, basename } from "node:path";
23
+ import { fileURLToPath } from "node:url";
24
+ import { tmpdir } from "node:os";
25
+
26
+ const ROOT = join(dirname(fileURLToPath(import.meta.url)), "..");
27
+ const DOCS = join(ROOT, "docs");
28
+ const OUT = join(tmpdir(), "alkahest-docs-staging");
29
+ rmSync(OUT, { recursive: true, force: true });
30
+
31
+ const sanitize = (t) =>
32
+ t.replace(/\(\//g, "(").replace(/[/\\:]/g, "-").replace(/`/g, "").replace(/\s+/g, " ").trim();
33
+ const firstH1 = (src) => (src.match(/^#\s+(.+)$/m) ?? [null, ""])[1].trim();
34
+ // Frontmatter rides through to the staged file — the importer strips it from the stored body
35
+ // and harvests its keys into note props (`tags:` is the reserved one). Split it off first so
36
+ // stripH1 still sees the H1 at the head of what's left.
37
+ const splitFm = (src) => {
38
+ const m = src.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n+/);
39
+ return m ? [m[0], src.slice(m[0].length)] : ["", src];
40
+ };
41
+ const stripH1 = (src) => {
42
+ const [fm, body] = splitFm(src);
43
+ return fm + body.replace(/^#\s+.+\n+/, "");
44
+ };
45
+ // Rename-safe identity: inject the ORIGINAL repo path as source_path: frontmatter (merged
46
+ // into an existing block, or a new block is minted).
47
+ const withSource = (staged, rel) => {
48
+ const [fm, body] = splitFm(staged);
49
+ const line = `source_path: ${rel}\n`;
50
+ return fm ? fm.replace(/---\r?\n*$/, (close) => line + close) + body : `---\n${line}---\n\n${staged}`;
51
+ };
52
+
53
+ // ---- ADRs ------------------------------------------------------------------
54
+ const adrDir = join(DOCS, "decisions");
55
+ const adrFiles = readdirSync(adrDir).filter((f) => /^\d{3}-.*\.md$/.test(f));
56
+ const adrTitle = {};
57
+ for (const f of adrFiles) {
58
+ const h1 = firstH1(readFileSync(join(adrDir, f), "utf8"));
59
+ // Convention "ADR-NNN: title — tail"; the em-dash variant "ADR-NNN — title" also parses.
60
+ const m = h1.match(/^ADR-(\d{3})(?::|\s+—)\s*(.+)$/);
61
+ const num = m ? m[1] : f.slice(0, 3);
62
+ adrTitle[num] = sanitize(`ADR-${num} ${(m ? m[2] : h1).split(" — ")[0].trim()}`);
63
+ }
64
+ const linkAdrs = (body) =>
65
+ body.replace(/\[([^\]]*)\]\((?:\.\/)?(\d{3})-[^)#\s]*\.md(?:#[^)]*)?\)/g, (all, _label, num) =>
66
+ adrTitle[num] ? `[[${adrTitle[num]}]]` : all);
67
+ mkdirSync(join(OUT, "adr"), { recursive: true });
68
+ for (const f of adrFiles) {
69
+ const t = adrTitle[f.slice(0, 3)];
70
+ const staged = linkAdrs(stripH1(readFileSync(join(adrDir, f), "utf8")));
71
+ writeFileSync(join(OUT, "adr", `${t}.md`), withSource(staged, `docs/decisions/${f}`));
72
+ }
73
+
74
+ // ---- as-built --------------------------------------------------------------
75
+ const cats = ["system", "components", "features", "modules"];
76
+ const abTitle = {};
77
+ const abSrc = {};
78
+ for (const cat of cats) {
79
+ for (const f of readdirSync(join(DOCS, cat)).filter((x) => x.endsWith(".md"))) {
80
+ const src = readFileSync(join(DOCS, cat, f), "utf8");
81
+ let t = firstH1(src).replace(/^(System|Component|Feature|Module)\s*—\s*/i, "");
82
+ t = t.split(" — ")[0].trim() || firstH1(src);
83
+ abTitle[basename(f, ".md")] = sanitize(t);
84
+ abSrc[basename(f, ".md")] = { cat, src };
85
+ }
86
+ }
87
+ const linkAb = (body) =>
88
+ body.replace(/\[([^\]]*)\]\((?:\.\.\/(?:system|components|features|modules)\/|\.\/)?([a-z0-9-]+)\.md(?:#[^)]*)?\)/g,
89
+ (all, _label, name) => (abTitle[name] ? `[[${abTitle[name]}]]` : all));
90
+ for (const [name, { cat, src }] of Object.entries(abSrc)) {
91
+ mkdirSync(join(OUT, "as-built", cat), { recursive: true });
92
+ writeFileSync(join(OUT, "as-built", cat, `${abTitle[name]}.md`), withSource(linkAb(stripH1(src)), `docs/${cat}/${name}.md`));
93
+ }
94
+
95
+ console.log(`staged ${adrFiles.length} ADRs + ${Object.keys(abSrc).length} as-built docs → ${OUT}`);
96
+ if (process.argv.includes("--stage-only")) process.exit(0);
97
+
98
+ // A full mirror is many sequential POSTs, so a transient failure is a question of when, not
99
+ // if. The CLI handles it per file (keeps going, prints `✗ <file>: <message>`, exits 1) — act
100
+ // on the exit code and retry the whole set: rows that already landed come back as updates.
101
+ const ATTEMPTS = 3;
102
+ const failed = [];
103
+
104
+ for (const [dir, map] of [["adr", "adr"], ["as-built", "as-built"]]) {
105
+ let ok = false;
106
+ for (let attempt = 1; attempt <= ATTEMPTS && !ok; attempt++) {
107
+ console.log(`\n== notes import ${dir} → map ${map}${attempt > 1 ? ` (retry ${attempt - 1})` : ""} ==`);
108
+ const run = spawnSync("alkahest", ["notes", "import", join(OUT, dir), "--map", map, "--path", ROOT], {
109
+ stdio: "inherit",
110
+ });
111
+ if (run.error) console.error(`[sync] could not run alkahest: ${run.error.message}`);
112
+ ok = !run.error && run.status === 0;
113
+ if (!ok && attempt < ATTEMPTS) Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 5000);
114
+ }
115
+ if (!ok) failed.push(`${dir} → ${map}`);
116
+ }
117
+
118
+ if (failed.length) {
119
+ console.error(`\n[sync] FAILED after ${ATTEMPTS} attempts: ${failed.join(", ")}`);
120
+ console.error("[sync] scroll up for the per-file '✗ <file>: <message>' lines from the importer.");
121
+ process.exit(1);
122
+ }
123
+ console.log("\n[sync] both maps up to date.");
@@ -0,0 +1,12 @@
1
+ {
2
+ "presets": [
3
+ {
4
+ "id": "as-built",
5
+ "name": "as-built docs",
6
+ "description": "Living as-built documentation + an ADR log, written by your agent and mirrored to note maps.",
7
+ "skills": ["as-built-docs", "adr"],
8
+ "maps": ["as-built", "adr"],
9
+ "contents": ["skills", "scaffold", "claude-snippet", "sync-script"]
10
+ }
11
+ ]
12
+ }