@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,29 @@
1
+ import { type Runtime, type SymlinkResult } from "@younndai/lyt-skills";
2
+ import { type AgentManualRuntime, type PatternHealResult } from "@younndai/lyt-vault";
3
+ export type ManualHealAction = "installed" | "updated" | "skipped-symlink" | "refused-malformed" | "no-destination";
4
+ export interface ManualHealEntry {
5
+ runtime: AgentManualRuntime;
6
+ action: ManualHealAction;
7
+ destinationPath: string | null;
8
+ message?: string;
9
+ }
10
+ export interface HealResult {
11
+ runtimes: readonly Runtime[];
12
+ skills: SymlinkResult;
13
+ manual: ManualHealEntry[];
14
+ patterns: PatternHealResult;
15
+ }
16
+ export interface HealPodOptions {
17
+ runtimesOverride?: readonly Runtime[] | undefined;
18
+ skillsSourceDir?: string | undefined;
19
+ skillTargetOverrides?: Partial<Record<Runtime, string>> | undefined;
20
+ collisionStampFn?: (() => string) | undefined;
21
+ homedirOverride?: string | undefined;
22
+ skillsCatalogDir?: string | undefined;
23
+ manualVersionOverride?: string | undefined;
24
+ patternsBundledDirOverride?: string | undefined;
25
+ patternBackupStampFn?: (() => string) | undefined;
26
+ }
27
+ export declare function healPod(opts?: HealPodOptions): Promise<HealResult>;
28
+ export declare function summarizeHeal(heal: HealResult): string;
29
+ //# sourceMappingURL=heal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heal.d.ts","sourceRoot":"","sources":["../../src/flows/heal.ts"],"names":[],"mappings":"AA0CA,OAAO,EAA2B,KAAK,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACjG,OAAO,EAML,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,MAAM,gBAAgB,GACxB,WAAW,GACX,SAAS,GACT,iBAAiB,GACjB,mBAAmB,GACnB,gBAAgB,CAAC;AAErB,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,kBAAkB,CAAC;IAC5B,MAAM,EAAE,gBAAgB,CAAC;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAC7B,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAE7B,gBAAgB,CAAC,EAAE,SAAS,OAAO,EAAE,GAAG,SAAS,CAAC;IAElD,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,oBAAoB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IACpE,gBAAgB,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;IAE9C,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE3C,0BAA0B,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChD,oBAAoB,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;CACnD;AAED,wBAAsB,OAAO,CAAC,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CA8B5E;AAsDD,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAuBtD"}
@@ -0,0 +1,146 @@
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
+ // W1.2 / OD-4 (2026-06-03) — idempotent pod heal.
17
+ //
18
+ // `healPod` re-aligns the three things a `lyt init` is meant to keep fresh,
19
+ // composing primitives from lyt-skills + lyt-vault (the meta package is the
20
+ // natural composer — see init-bootstrap.ts header):
21
+ //
22
+ // 1. SKILLS — symlinkSkillsTriRuntime into every DETECTED runtime
23
+ // (collision-safe per D30.4: a user dir at a target is renamed
24
+ // aside, never destroyed; a pristine copy is upgraded to a link;
25
+ // an already-correct link short-circuits to already-linked).
26
+ // 2. MANUAL — the agent manual marker block, replaced-or-appended in each
27
+ // detected runtime's global instructions file. Malformed markers
28
+ // are REFUSED (D9) — heal never silently mutates a hand-edited
29
+ // file; it leaves it and reports `refused-malformed`.
30
+ // 3. PATTERNS — healPatterns version-update (D30.3): add missing, replace
31
+ // pristine-older (with backup), leave forks untouched.
32
+ //
33
+ // EVERY step is idempotent and non-fatal: a heal on an aligned pod is a no-op;
34
+ // a per-runtime failure is recorded, not thrown, so a single `lyt init` never
35
+ // fails because of heal (D30 never-fail). The CLI command runs this on the
36
+ // fresh + re-init branches; unit tests drive it directly with seams so no real
37
+ // ~/.claude / ~/.codex / ~/.agents is ever touched in CI.
38
+ import { existsSync, lstatSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
39
+ import { dirname } from "node:path";
40
+ import { symlinkSkillsTriRuntime } from "@younndai/lyt-skills";
41
+ import { AgentManualMalformedMarkersError, detectInstalledRuntimes, generateAgentManual, healPatterns, replaceMarkerBlock, } from "@younndai/lyt-vault";
42
+ export async function healPod(opts = {}) {
43
+ // Runtimes: explicit override, else detect installed ones (~/.claude, etc.).
44
+ const runtimes = opts.runtimesOverride ?? detectInstalledRuntimes(opts.homedirOverride);
45
+ // 1. Skills — collision-safe symlink into each detected runtime.
46
+ const skills = symlinkSkillsTriRuntime({
47
+ ...(opts.skillsSourceDir !== undefined ? { sourceDir: opts.skillsSourceDir } : {}),
48
+ runtimes,
49
+ ...(opts.skillTargetOverrides !== undefined
50
+ ? { targetDirOverrides: opts.skillTargetOverrides }
51
+ : {}),
52
+ ...(opts.collisionStampFn !== undefined ? { collisionStampFn: opts.collisionStampFn } : {}),
53
+ });
54
+ // 2. Manual — inject/refresh the marker block per runtime (non-fatal).
55
+ const manual = [];
56
+ for (const runtime of runtimes) {
57
+ manual.push(await injectManual(runtime, opts));
58
+ }
59
+ // 3. Patterns — version-update heal.
60
+ const patterns = healPatterns({
61
+ ...(opts.patternsBundledDirOverride !== undefined
62
+ ? { bundledDirOverride: opts.patternsBundledDirOverride }
63
+ : {}),
64
+ ...(opts.patternBackupStampFn !== undefined ? { stampFn: opts.patternBackupStampFn } : {}),
65
+ });
66
+ return { runtimes, skills, manual, patterns };
67
+ }
68
+ async function injectManual(runtime, opts) {
69
+ const gen = await generateAgentManual({
70
+ runtime: runtime,
71
+ install: true,
72
+ ...(opts.homedirOverride !== undefined ? { homedirOverride: opts.homedirOverride } : {}),
73
+ ...(opts.skillsCatalogDir !== undefined ? { skillsDirOverride: opts.skillsCatalogDir } : {}),
74
+ ...(opts.manualVersionOverride !== undefined
75
+ ? { versionOverride: opts.manualVersionOverride }
76
+ : {}),
77
+ });
78
+ const dest = gen.destinationPath;
79
+ if (dest === null) {
80
+ return { runtime, action: "no-destination", destinationPath: null };
81
+ }
82
+ // Symlink-refuse (mirrors the command's Sec-M1 defense): writeFileSync
83
+ // follows symlinks, so never write the manual through a planted link.
84
+ if (existsSync(dest) && lstatSync(dest).isSymbolicLink()) {
85
+ return {
86
+ runtime,
87
+ action: "skipped-symlink",
88
+ destinationPath: dest,
89
+ message: `${dest} is a symlink; refused to write the agent manual through it`,
90
+ };
91
+ }
92
+ let existing = "";
93
+ if (existsSync(dest))
94
+ existing = readFileSync(dest, "utf8");
95
+ try {
96
+ // force=false → malformed markers REFUSE (D9). Heal never silently
97
+ // overwrites a hand-edited file; it leaves it and reports.
98
+ const { result: next, replaced } = replaceMarkerBlock(existing, gen.content, dest, false);
99
+ const dir = dirname(dest);
100
+ if (!existsSync(dir))
101
+ mkdirSync(dir, { recursive: true });
102
+ writeFileSync(dest, next, "utf8");
103
+ return {
104
+ runtime,
105
+ action: replaced ? "updated" : "installed",
106
+ destinationPath: dest,
107
+ };
108
+ }
109
+ catch (err) {
110
+ if (err instanceof AgentManualMalformedMarkersError) {
111
+ return {
112
+ runtime,
113
+ action: "refused-malformed",
114
+ destinationPath: dest,
115
+ message: err.message,
116
+ };
117
+ }
118
+ throw err;
119
+ }
120
+ }
121
+ // Compact one-line summary for the CLI human output.
122
+ export function summarizeHeal(heal) {
123
+ const skillCounts = new Map();
124
+ for (const r of heal.skills.results) {
125
+ skillCounts.set(r.status, (skillCounts.get(r.status) ?? 0) + 1);
126
+ }
127
+ const skillsParts = [...skillCounts.entries()]
128
+ .sort((a, b) => a[0].localeCompare(b[0]))
129
+ .map(([status, n]) => `${n} ${status}`);
130
+ const manualParts = heal.manual.map((m) => `${m.runtime}:${m.action}`);
131
+ const patCounts = new Map();
132
+ for (const e of heal.patterns.entries) {
133
+ patCounts.set(e.action, (patCounts.get(e.action) ?? 0) + 1);
134
+ }
135
+ const patParts = [...patCounts.entries()]
136
+ .sort((a, b) => a[0].localeCompare(b[0]))
137
+ .map(([action, n]) => `${n} ${action}`);
138
+ const runtimeList = heal.runtimes.length > 0 ? heal.runtimes.join(", ") : "(none detected)";
139
+ return [
140
+ `Heal — runtimes: ${runtimeList}`,
141
+ ` skills: ${skillsParts.length > 0 ? skillsParts.join(", ") : "(no runtimes)"}`,
142
+ ` manual: ${manualParts.length > 0 ? manualParts.join(", ") : "(no runtimes)"}`,
143
+ ` patterns: ${patParts.length > 0 ? patParts.join(", ") : "(none)"}`,
144
+ ].join("\n");
145
+ }
146
+ //# sourceMappingURL=heal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heal.js","sourceRoot":"","sources":["../../src/flows/heal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,kDAAkD;AAClD,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,oDAAoD;AACpD,EAAE;AACF,kEAAkE;AAClE,+DAA+D;AAC/D,iEAAiE;AACjE,6DAA6D;AAC7D,0EAA0E;AAC1E,iEAAiE;AACjE,+DAA+D;AAC/D,sDAAsD;AACtD,0EAA0E;AAC1E,uDAAuD;AACvD,EAAE;AACF,+EAA+E;AAC/E,8EAA8E;AAC9E,2EAA2E;AAC3E,+EAA+E;AAC/E,0DAA0D;AAE1D,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,uBAAuB,EAAoC,MAAM,sBAAsB,CAAC;AACjG,OAAO,EACL,gCAAgC,EAChC,uBAAuB,EACvB,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,GAGnB,MAAM,qBAAqB,CAAC;AAuC7B,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAuB,EAAE;IACrD,6EAA6E;IAC7E,MAAM,QAAQ,GACZ,IAAI,CAAC,gBAAgB,IAAI,uBAAuB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAEzE,iEAAiE;IACjE,MAAM,MAAM,GAAG,uBAAuB,CAAC;QACrC,GAAG,CAAC,IAAI,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,QAAQ;QACR,GAAG,CAAC,IAAI,CAAC,oBAAoB,KAAK,SAAS;YACzC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,oBAAoB,EAAE;YACnD,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,IAAI,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5F,CAAC,CAAC;IAEH,uEAAuE;IACvE,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,MAAM,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,qCAAqC;IACrC,MAAM,QAAQ,GAAG,YAAY,CAAC;QAC5B,GAAG,CAAC,IAAI,CAAC,0BAA0B,KAAK,SAAS;YAC/C,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,0BAA0B,EAAE;YACzD,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,IAAI,CAAC,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3F,CAAC,CAAC;IAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,OAAgB,EAAE,IAAoB;IAChE,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC;QACpC,OAAO,EAAE,OAA6B;QACtC,OAAO,EAAE,IAAI;QACb,GAAG,CAAC,IAAI,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxF,GAAG,CAAC,IAAI,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5F,GAAG,CAAC,IAAI,CAAC,qBAAqB,KAAK,SAAS;YAC1C,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,qBAAqB,EAAE;YACjD,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,GAAG,CAAC,eAAe,CAAC;IACjC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;IACtE,CAAC;IACD,uEAAuE;IACvE,sEAAsE;IACtE,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC;QACzD,OAAO;YACL,OAAO;YACP,MAAM,EAAE,iBAAiB;YACzB,eAAe,EAAE,IAAI;YACrB,OAAO,EAAE,GAAG,IAAI,6DAA6D;SAC9E,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,UAAU,CAAC,IAAI,CAAC;QAAE,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5D,IAAI,CAAC;QACH,mEAAmE;QACnE,2DAA2D;QAC3D,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,kBAAkB,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC1F,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAClC,OAAO;YACL,OAAO;YACP,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;YAC1C,eAAe,EAAE,IAAI;SACtB,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,gCAAgC,EAAE,CAAC;YACpD,OAAO;gBACL,OAAO;gBACP,MAAM,EAAE,mBAAmB;gBAC3B,eAAe,EAAE,IAAI;gBACrB,OAAO,EAAE,GAAG,CAAC,OAAO;aACrB,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,aAAa,CAAC,IAAgB;IAC5C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,WAAW,GAAG,CAAC,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC;SAC3C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACxC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;SACtC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACxC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC;IAC5F,OAAO;QACL,oBAAoB,WAAW,EAAE;QACjC,eAAe,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE;QAClF,eAAe,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE;QAClF,eAAe,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;KACtE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,93 @@
1
+ import type { Client } from "@libsql/client";
2
+ import { readIdentityCache, type FederationGhClient, type FederationInitBranch, type MaterializePodResult, type MeshGhClient, type VaultCloneFn } from "@younndai/lyt-vault";
3
+ import type { HealResult } from "./heal.js";
4
+ export type InitBootstrapBranch = "fresh" | "re-init" | "discovery" | "adopt";
5
+ export type IntegrityStatus = "ok" | "missing" | "unparseable" | "orphaned-home-mesh";
6
+ export interface IntegrityIssue {
7
+ vaultName: string;
8
+ status: IntegrityStatus;
9
+ error?: string;
10
+ }
11
+ export type DiscoveredRepoKind = "lyt-prefix" | "lyt-public-topic";
12
+ export interface DiscoveredRepo {
13
+ fullName: string;
14
+ kind: DiscoveredRepoKind;
15
+ alreadyInRegistry: boolean;
16
+ }
17
+ export interface DiscoveryProbeResult {
18
+ repos: DiscoveredRepo[];
19
+ }
20
+ export interface DiscoveryProbe {
21
+ probe(handle: string): Promise<DiscoveryProbeResult>;
22
+ }
23
+ export interface InitBootstrapMeshAssignment {
24
+ meshRidHex: string;
25
+ meshName: string;
26
+ meshAutoCreated: boolean;
27
+ mainVaultName?: string;
28
+ mainVaultPath?: string;
29
+ }
30
+ export interface InitBootstrapFederation {
31
+ handle: string;
32
+ fedRidHex: string;
33
+ branch: FederationInitBranch;
34
+ localPath: string;
35
+ federationYonPath: string;
36
+ remoteCreated: boolean;
37
+ pushed: boolean;
38
+ remoteFullName: string;
39
+ }
40
+ export interface InitBootstrapAdopt {
41
+ podBranch: FederationInitBranch;
42
+ podHandle: string;
43
+ podLocalPath: string;
44
+ vaultsRecoveredFromManifest: number;
45
+ vaultsAcquired: number;
46
+ manifestSkipped: {
47
+ vaultName: string;
48
+ reason: string;
49
+ }[];
50
+ firstVaultCreated: boolean;
51
+ primaryVaultPath: string | null;
52
+ primaryMeshName: string | null;
53
+ reconciledVaultPaths: string[];
54
+ }
55
+ export interface InitBootstrapResult {
56
+ branch: InitBootstrapBranch;
57
+ meshAssignment?: InitBootstrapMeshAssignment;
58
+ federation?: InitBootstrapFederation;
59
+ integrityIssues?: IntegrityIssue[];
60
+ discoveredRepos?: DiscoveredRepo[];
61
+ adopt?: InitBootstrapAdopt;
62
+ adoptError?: {
63
+ reason: string;
64
+ };
65
+ heal?: HealResult;
66
+ reconciledVaultPaths?: string[];
67
+ publish?: MaterializePodResult;
68
+ durationMs: number;
69
+ }
70
+ export type InitBootstrapMode = "auto" | "custom" | "discover";
71
+ export interface InitBootstrapCustomOverrides {
72
+ meshName?: string;
73
+ pushTarget?: string;
74
+ starterFigment?: boolean;
75
+ }
76
+ export interface InitBootstrapArgs {
77
+ mode: InitBootstrapMode;
78
+ meshGhClient?: MeshGhClient;
79
+ federationGhClient?: FederationGhClient;
80
+ vaultCloneFn?: VaultCloneFn;
81
+ registryDb?: Client;
82
+ nowIso?: string;
83
+ discoveryProbe?: DiscoveryProbe;
84
+ handle?: string;
85
+ customOverrides?: InitBootstrapCustomOverrides;
86
+ heal?: (() => Promise<HealResult>) | undefined;
87
+ materializePublish?: ((db: Client) => Promise<MaterializePodResult>) | undefined;
88
+ onPhase?: (op: string, label: string) => void | Promise<void>;
89
+ }
90
+ export declare function probeFreshState(registryDb?: Client): Promise<boolean>;
91
+ export declare function resolveLocalFirst(cached: ReturnType<typeof readIdentityCache>): boolean;
92
+ export declare function initBootstrapFlow(args: InitBootstrapArgs): Promise<InitBootstrapResult>;
93
+ //# sourceMappingURL=init-bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-bootstrap.d.ts","sourceRoot":"","sources":["../../src/flows/init-bootstrap.ts"],"names":[],"mappings":"AA0CA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAgBL,iBAAiB,EAKjB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;AAE9E,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,SAAS,GAAG,aAAa,GAAG,oBAAoB,CAAC;AAEtF,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,kBAAkB,CAAC;AAEnE,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,kBAAkB,CAAC;IACzB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IAInC,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAM7B,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,2BAA2B;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;IAIzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAIhB,cAAc,EAAE,MAAM,CAAC;CACxB;AAQD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,oBAAoB,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,2BAA2B,EAAE,MAAM,CAAC;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACzD,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,mBAAmB,CAAC;IAG5B,cAAc,CAAC,EAAE,2BAA2B,CAAC;IAC7C,UAAU,CAAC,EAAE,uBAAuB,CAAC;IAGrC,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IAGnC,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IAInC,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAM3B,UAAU,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAGhC,IAAI,CAAC,EAAE,UAAU,CAAC;IAGlB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAKhC,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE/D,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,iBAAiB,CAAC;IACxB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IAKxC,YAAY,CAAC,EAAE,YAAY,CAAC;IAI5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAMhB,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,4BAA4B,CAAC;IAO/C,IAAI,CAAC,EAAE,CAAC,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC;IAU/C,kBAAkB,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC,GAAG,SAAS,CAAC;IAQjF,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/D;AAOD,wBAAsB,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAU3E;AAYD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,GAAG,OAAO,CAEvF;AAyCD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAwF7F"}