@younndai/lyt 0.9.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 (96) hide show
  1. package/LICENSE +200 -0
  2. package/NOTICE +23 -0
  3. package/README.md +117 -0
  4. package/dist/automator-bodies/arc-builder.d.ts +13 -0
  5. package/dist/automator-bodies/arc-builder.d.ts.map +1 -0
  6. package/dist/automator-bodies/arc-builder.js +34 -0
  7. package/dist/automator-bodies/arc-builder.js.map +1 -0
  8. package/dist/automator-bodies/index.d.ts +20 -0
  9. package/dist/automator-bodies/index.d.ts.map +1 -0
  10. package/dist/automator-bodies/index.js +32 -0
  11. package/dist/automator-bodies/index.js.map +1 -0
  12. package/dist/automator-bodies/lane-builder.d.ts +12 -0
  13. package/dist/automator-bodies/lane-builder.d.ts.map +1 -0
  14. package/dist/automator-bodies/lane-builder.js +34 -0
  15. package/dist/automator-bodies/lane-builder.js.map +1 -0
  16. package/dist/automator-bodies/metadata-filler.d.ts +34 -0
  17. package/dist/automator-bodies/metadata-filler.d.ts.map +1 -0
  18. package/dist/automator-bodies/metadata-filler.js +211 -0
  19. package/dist/automator-bodies/metadata-filler.js.map +1 -0
  20. package/dist/automator-run.d.ts +27 -0
  21. package/dist/automator-run.d.ts.map +1 -0
  22. package/dist/automator-run.js +137 -0
  23. package/dist/automator-run.js.map +1 -0
  24. package/dist/bench/graded-corpus.d.ts +5 -0
  25. package/dist/bench/graded-corpus.d.ts.map +1 -0
  26. package/dist/bench/graded-corpus.js +121 -0
  27. package/dist/bench/graded-corpus.js.map +1 -0
  28. package/dist/bench/invariant-corpus.d.ts +18 -0
  29. package/dist/bench/invariant-corpus.d.ts.map +1 -0
  30. package/dist/bench/invariant-corpus.js +181 -0
  31. package/dist/bench/invariant-corpus.js.map +1 -0
  32. package/dist/bench/ir-metrics.d.ts +33 -0
  33. package/dist/bench/ir-metrics.d.ts.map +1 -0
  34. package/dist/bench/ir-metrics.js +79 -0
  35. package/dist/bench/ir-metrics.js.map +1 -0
  36. package/dist/bench/latency-bench.d.ts +15 -0
  37. package/dist/bench/latency-bench.d.ts.map +1 -0
  38. package/dist/bench/latency-bench.js +68 -0
  39. package/dist/bench/latency-bench.js.map +1 -0
  40. package/dist/bench/latency-corpus.d.ts +4 -0
  41. package/dist/bench/latency-corpus.d.ts.map +1 -0
  42. package/dist/bench/latency-corpus.js +109 -0
  43. package/dist/bench/latency-corpus.js.map +1 -0
  44. package/dist/bench/pod-harness.d.ts +16 -0
  45. package/dist/bench/pod-harness.d.ts.map +1 -0
  46. package/dist/bench/pod-harness.js +127 -0
  47. package/dist/bench/pod-harness.js.map +1 -0
  48. package/dist/bench/run-bench.d.ts +20 -0
  49. package/dist/bench/run-bench.d.ts.map +1 -0
  50. package/dist/bench/run-bench.js +86 -0
  51. package/dist/bench/run-bench.js.map +1 -0
  52. package/dist/cli-automator-run.d.ts +7 -0
  53. package/dist/cli-automator-run.d.ts.map +1 -0
  54. package/dist/cli-automator-run.js +80 -0
  55. package/dist/cli-automator-run.js.map +1 -0
  56. package/dist/cli.d.ts +3 -0
  57. package/dist/cli.d.ts.map +1 -0
  58. package/dist/cli.js +161 -0
  59. package/dist/cli.js.map +1 -0
  60. package/dist/commands/bench.d.ts +3 -0
  61. package/dist/commands/bench.d.ts.map +1 -0
  62. package/dist/commands/bench.js +92 -0
  63. package/dist/commands/bench.js.map +1 -0
  64. package/dist/commands/capture.d.ts +4 -0
  65. package/dist/commands/capture.d.ts.map +1 -0
  66. package/dist/commands/capture.js +251 -0
  67. package/dist/commands/capture.js.map +1 -0
  68. package/dist/commands/init.d.ts +12 -0
  69. package/dist/commands/init.d.ts.map +1 -0
  70. package/dist/commands/init.js +741 -0
  71. package/dist/commands/init.js.map +1 -0
  72. package/dist/commands/primer.d.ts +3 -0
  73. package/dist/commands/primer.d.ts.map +1 -0
  74. package/dist/commands/primer.js +199 -0
  75. package/dist/commands/primer.js.map +1 -0
  76. package/dist/commands/reindex.d.ts +3 -0
  77. package/dist/commands/reindex.d.ts.map +1 -0
  78. package/dist/commands/reindex.js +105 -0
  79. package/dist/commands/reindex.js.map +1 -0
  80. package/dist/commands/search.d.ts +3 -0
  81. package/dist/commands/search.d.ts.map +1 -0
  82. package/dist/commands/search.js +224 -0
  83. package/dist/commands/search.js.map +1 -0
  84. package/dist/flows/heal.d.ts +29 -0
  85. package/dist/flows/heal.d.ts.map +1 -0
  86. package/dist/flows/heal.js +146 -0
  87. package/dist/flows/heal.js.map +1 -0
  88. package/dist/flows/init-bootstrap.d.ts +93 -0
  89. package/dist/flows/init-bootstrap.d.ts.map +1 -0
  90. package/dist/flows/init-bootstrap.js +561 -0
  91. package/dist/flows/init-bootstrap.js.map +1 -0
  92. package/dist/index.d.ts +11 -0
  93. package/dist/index.d.ts.map +1 -0
  94. package/dist/index.js +27 -0
  95. package/dist/index.js.map +1 -0
  96. package/package.json +81 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bench.js","sourceRoot":"","sources":["../../src/commands/bench.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Command } from "commander";
2
+ export declare function buildCaptureCommand(): Command;
3
+ export declare function parseTagsOpt(raw: string | undefined): string | undefined;
4
+ //# sourceMappingURL=capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"AAkCA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiCpC,wBAAgB,mBAAmB,IAAI,OAAO,CA+C7C;AA2LD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAYxE"}
@@ -0,0 +1,251 @@
1
+ /*
2
+ * Copyright 2026 MARLINK TRADING SRL (YounndAI)
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ // V-C-1 Phase E / V-C-2 (RATIFIED 2026-06-10) — `lyt capture "<text>"`.
17
+ //
18
+ // A TRUE top-level alias for `lyt pattern run knowledge-capture capture`: the
19
+ // frictionless command the wizard's "Next" steps advertise. It routes through
20
+ // the IDENTICAL capture ceremony — patternRunFlow renders the knowledge-capture
21
+ // template (the v1 8-field frontmatter contract), enforces mandatory
22
+ // purpose+topic (validateMandatoryFrontmatterTokens), and — via the Phase A
23
+ // index-on-write wiring inside patternRunFlow — indexes the figment so it's
24
+ // searchable immediately. It is NOT a lighter bypass: it cannot write a Figment
25
+ // that `pattern run` couldn't, and it cannot skip purpose/topic (it prompts on a
26
+ // TTY, else surfaces the same refusal). The guardrail the V-C-2 decision names.
27
+ //
28
+ // `--index-only <relpath>` is the seam the /lyt-capture skill uses: the skill
29
+ // fills the Figment body INLINE with its Write tool (its established convention),
30
+ // then calls `lyt capture --index-only notes/<file>.md --vault <name>` to index
31
+ // what it just wrote — the same captureIndexFlow the write path uses, so the
32
+ // skill path hits SC1 too without re-routing its body authoring through the CLI.
33
+ import { Command } from "commander";
34
+ import { createInterface } from "node:readline/promises";
35
+ import { captureIndexFlow, closeRegistry, getVaultByName, listVaults, openRegistry, patternRunFlow, } from "@younndai/lyt-vault";
36
+ const CAPTURE_PATTERN = "knowledge-capture";
37
+ const CAPTURE_VERB = "capture";
38
+ // The generated pod-map vault is generator-managed (writable=false) — never a
39
+ // capture target, so it is excluded from single-vault default resolution.
40
+ const POD_MAP_VAULT_NAME = "lyt-pod-map";
41
+ export function buildCaptureCommand() {
42
+ return new Command("capture")
43
+ .description("Capture a Figment — true alias for `pattern run knowledge-capture capture` (full v1 ceremony: mandatory purpose+topic, 8-field frontmatter). Indexes on write so it's searchable immediately.")
44
+ .argument("[text]", "The thought to capture (becomes the Figment title; slug derived from it)")
45
+ .option("--vault <name>", "Target vault (default: the single user vault, else required)")
46
+ .option("--title <title>", "Explicit title (overrides the positional text)")
47
+ .option("--purpose <p>", "Why keep this? (author-supplied; prompted on a TTY if omitted)")
48
+ .option("--topic <t>", "Semantic category (author-supplied; prompted on a TTY if omitted)")
49
+ .option("--tags <list>", "Comma-separated tags, e.g. a,b — seeds frontmatter tags (≥2 figments sharing a tag form a lane; also feeds the primer keyword fallback)")
50
+ .option("--weight <n>", "Importance 1-5 (default 3)")
51
+ .option("--mesh-visibility <v>", "local | parent | public (default local)")
52
+ .option("--slug <slug>", "Filename slug (default: derived from the title)")
53
+ .option("--vars <kv>", "Repeatable key=value override (advanced)", collectVars, {})
54
+ .option("--index-only <relpath>", "Index an already-written figment (the /lyt-capture skill uses this after its inline Write); requires --vault. Does NOT write.")
55
+ .option("--json", "Emit JSON")
56
+ .action(async (text, opts) => {
57
+ try {
58
+ if (opts.indexOnly !== undefined) {
59
+ await runIndexOnly(opts);
60
+ return;
61
+ }
62
+ await runCapture(text, opts);
63
+ }
64
+ catch (err) {
65
+ const message = err instanceof Error ? err.message : String(err);
66
+ if (opts.json === true) {
67
+ // eslint-disable-next-line no-console
68
+ console.error(JSON.stringify({ error: "capture-error", message }, null, 2));
69
+ }
70
+ else {
71
+ // eslint-disable-next-line no-console
72
+ console.error(`lyt capture: ${message}`);
73
+ }
74
+ process.exitCode = 1;
75
+ }
76
+ });
77
+ }
78
+ // --index-only: index a figment the caller already wrote (the skill seam). No
79
+ // write, no ceremony (the skill already wrote the contract-compliant figment);
80
+ // this only refreshes the caches so search/recall/primer hit (SC1/SC3).
81
+ async function runIndexOnly(opts) {
82
+ if (opts.vault === undefined) {
83
+ throw new Error("--index-only requires --vault <name> (the vault the figment was written to).");
84
+ }
85
+ const relPath = opts.indexOnly.replace(/\\/g, "/");
86
+ const res = await captureIndexFlow({ vaultName: opts.vault, relPath });
87
+ if (opts.json === true) {
88
+ // eslint-disable-next-line no-console
89
+ console.log(JSON.stringify({
90
+ indexed: res.ftsIndexed,
91
+ deferred: res.deferred,
92
+ relPath,
93
+ ...(res.note ? { note: res.note } : {}),
94
+ }, null, 2));
95
+ return;
96
+ }
97
+ // Key the message on whether the figment actually got into the index — covers
98
+ // success, a deferred failure, AND the out-of-notes seam-guard (deferred:false
99
+ // but not indexed), each of which carries an explanatory note.
100
+ if (res.ftsIndexed) {
101
+ // eslint-disable-next-line no-console
102
+ console.log(`Indexed ${relPath} in ${res.vaultName} (searchable now).`);
103
+ }
104
+ else {
105
+ // eslint-disable-next-line no-console
106
+ console.log(`⚠ ${res.note ?? "not indexed"}`);
107
+ }
108
+ }
109
+ async function runCapture(text, opts) {
110
+ const db = await openRegistry();
111
+ let vaultName;
112
+ try {
113
+ vaultName = await resolveCaptureVault(opts.vault, db);
114
+ }
115
+ finally {
116
+ await closeRegistry(db);
117
+ }
118
+ const title = (opts.title ?? text ?? "").trim();
119
+ if (title.length === 0) {
120
+ throw new Error('provide a thought to capture, e.g. `lyt capture "my first thought"`, or pass --title.');
121
+ }
122
+ const slug = opts.slug ?? slugify(title);
123
+ // Resolve the mandatory ceremony fields. --purpose/--topic (or --vars) win;
124
+ // else prompt on a TTY; else leave empty so patternRunFlow surfaces the same
125
+ // refusal `pattern run` would (ceremony preserved — never silently bypassed).
126
+ const purpose = opts.purpose ?? opts.vars["purpose"] ?? (await promptIfTty("Why keep this? (purpose): "));
127
+ const topic = opts.topic ?? opts.vars["topic"] ?? (await promptIfTty("Topic (semantic category): "));
128
+ // V-C-1 SC3 option-b — `--tags a,b` restored (the knowledge-capture template
129
+ // regained its `tags: [<tags>]` token). Parsed to the inline-array INNER form
130
+ // ("a, b") so the template renders `tags: [a, b]`; omitted → the template
131
+ // default renders `tags: []`. The /lyt-capture skill's inline tag inference
132
+ // stays the primary path; `--tags` is the bare-quick-path affordance that
133
+ // seeds both the primer keyword fallback AND (at ≥2 shared) a real lane.
134
+ const tags = parseTagsOpt(opts.tags);
135
+ const vars = {
136
+ title,
137
+ ...(purpose !== undefined ? { purpose } : {}),
138
+ ...(topic !== undefined ? { topic } : {}),
139
+ ...(tags !== undefined ? { tags } : {}),
140
+ ...(opts.weight !== undefined ? { weight: opts.weight } : {}),
141
+ ...(opts.meshVisibility !== undefined ? { "mesh-visibility": opts.meshVisibility } : {}),
142
+ // Explicit --vars win last (advanced override seam, matches `pattern run`).
143
+ ...opts.vars,
144
+ };
145
+ const r = await patternRunFlow({
146
+ patternName: CAPTURE_PATTERN,
147
+ verbId: CAPTURE_VERB,
148
+ vaultName,
149
+ slug,
150
+ vars,
151
+ });
152
+ if (opts.json === true) {
153
+ // eslint-disable-next-line no-console
154
+ console.log(JSON.stringify({
155
+ filePath: r.filePath,
156
+ vault: r.vaultName,
157
+ alreadyExisted: r.alreadyExisted,
158
+ indexDeferred: r.indexDeferred === true,
159
+ ...(r.indexNote ? { indexNote: r.indexNote } : {}),
160
+ }, null, 2));
161
+ return;
162
+ }
163
+ // eslint-disable-next-line no-console
164
+ console.log(`Captured to ${r.filePath}`);
165
+ if (r.indexDeferred === true && r.indexNote !== undefined) {
166
+ // eslint-disable-next-line no-console
167
+ console.log(` ⚠ ${r.indexNote}`);
168
+ }
169
+ }
170
+ // Default-vault resolution: --vault → the single user vault → require --vault.
171
+ // (LYT_ACTIVE_VAULT is the skill's PATH-based seam; the CLI alias is name-based
172
+ // via the registry, so it resolves the single registered user vault instead —
173
+ // which makes the wizard's no-flag `lyt capture "your first thought"` real on a
174
+ // fresh pod where personal/main is the only user vault.)
175
+ async function resolveCaptureVault(explicit, db) {
176
+ if (explicit !== undefined && explicit.length > 0) {
177
+ const row = await getVaultByName(db, explicit);
178
+ if (row === null) {
179
+ throw new Error(`no vault registered with name '${explicit}'. See \`lyt vault list\`.`);
180
+ }
181
+ return row.name;
182
+ }
183
+ const userVaults = (await listVaults(db)).filter((v) => v.status === "active" && v.name !== POD_MAP_VAULT_NAME);
184
+ if (userVaults.length === 1) {
185
+ return userVaults[0].name;
186
+ }
187
+ if (userVaults.length === 0) {
188
+ throw new Error("no writable vault found. Run `lyt init` first.");
189
+ }
190
+ throw new Error(`multiple vaults — pass --vault <name>. Available: ${userVaults.map((v) => v.name).join(", ")}.`);
191
+ }
192
+ // Prompt on an interactive TTY only; return undefined on a non-TTY so the caller
193
+ // leaves the field empty and patternRunFlow surfaces the mandatory-field refusal
194
+ // (never hang a script waiting on stdin).
195
+ async function promptIfTty(question) {
196
+ if (process.stdin.isTTY !== true)
197
+ return undefined;
198
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
199
+ try {
200
+ const ans = (await rl.question(question)).trim();
201
+ return ans.length > 0 ? ans : undefined;
202
+ }
203
+ finally {
204
+ rl.close();
205
+ }
206
+ }
207
+ function slugify(title) {
208
+ return (title
209
+ .toLowerCase()
210
+ .replace(/[^a-z0-9]+/g, "-")
211
+ .replace(/^-+|-+$/g, "")
212
+ .slice(0, 60)
213
+ .replace(/-+$/g, "") || `untitled-capture`);
214
+ }
215
+ // Parse `--tags a,b , c` → the inline-array inner form "a, b, c" for the
216
+ // template's `tags: [<tags>]` token. Empty/whitespace-only entries are dropped;
217
+ // an all-empty value yields undefined (the template default `[]` then applies).
218
+ // Single-token tags are the supported quick-path form (the inline-array
219
+ // frontmatter parser splits on whitespace, so multi-word tags are not the
220
+ // intent here — the /lyt-capture skill authors richer tags inline).
221
+ //
222
+ // release review (+ committed-state pass C3-M1): per-token sanitize away the
223
+ // glyphs that break or type-drift the inline-array `tags: [<tags>]` flow scalar
224
+ // under a strict YAML reader (Obsidian properties), then collapse internal
225
+ // whitespace. Stripped: `[ ] " backtick` (structure/quote) AND `: { } & *`
226
+ // (flow-mapping / anchor / alias indicators — e.g. `--tags "a: b"` would else
227
+ // emit `tags: [a: b]`, a flow MAPPING not a string). lyt's own read-back
228
+ // (extractFrontmatterTags) is tolerant and never breaks the index regardless;
229
+ // this keeps the on-disk Figment well-formed for EXTERNAL strict readers too.
230
+ // NOTE: the `--vars tags=…` advanced seam bypasses this (matches --vars
231
+ // purpose=/topic=, unsanitized by design). Exported for unit test.
232
+ export function parseTagsOpt(raw) {
233
+ if (raw === undefined)
234
+ return undefined;
235
+ const parts = raw
236
+ .split(",")
237
+ .map((s) => s
238
+ .replace(/[[\]"`:{}&*]/g, "")
239
+ .replace(/\s+/g, " ")
240
+ .trim())
241
+ .filter((s) => s.length > 0);
242
+ return parts.length > 0 ? parts.join(", ") : undefined;
243
+ }
244
+ function collectVars(value, previous) {
245
+ const m = value.match(/^([^=]+)=(.*)$/);
246
+ if (!m) {
247
+ throw new Error(`--vars must be 'key=value' (got '${value}')`);
248
+ }
249
+ return { ...previous, [m[1]]: m[2] };
250
+ }
251
+ //# sourceMappingURL=capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/commands/capture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { Command } from "commander";
2
+ import { type InitBootstrapResult } from "../flows/init-bootstrap.js";
3
+ export declare function buildLytInitCommand(): Command;
4
+ export declare function adoptCloneFailures(manifestSkipped: readonly {
5
+ vaultName: string;
6
+ reason: string;
7
+ }[]): {
8
+ vaultName: string;
9
+ reason: string;
10
+ }[];
11
+ export declare function emitJsonResult(res: InitBootstrapResult): void;
12
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAkCA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,OAAO,EAOL,KAAK,mBAAmB,EACzB,MAAM,4BAA4B,CAAC;AAYpC,wBAAgB,mBAAmB,IAAI,OAAO,CAgS7C;AA+DD,wBAAgB,kBAAkB,CAChC,eAAe,EAAE,SAAS;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,GAChE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,CAIzC;AAID,wBAAgB,cAAc,CAAC,GAAG,EAAE,mBAAmB,GAAG,IAAI,CA4F7D"}