mewkit 1.10.2 → 1.11.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 (221) hide show
  1. package/README.md +56 -4
  2. package/dist/commands/budget.d.ts +13 -0
  3. package/dist/commands/budget.d.ts.map +1 -1
  4. package/dist/commands/budget.js +45 -0
  5. package/dist/commands/budget.js.map +1 -1
  6. package/dist/commands/doctor-checks.d.ts +1 -1
  7. package/dist/commands/doctor-checks.d.ts.map +1 -1
  8. package/dist/commands/doctor-checks.js +7 -1
  9. package/dist/commands/doctor-checks.js.map +1 -1
  10. package/dist/commands/doctor-hard-gates.d.ts +3 -0
  11. package/dist/commands/doctor-hard-gates.d.ts.map +1 -0
  12. package/dist/commands/doctor-hard-gates.js +138 -0
  13. package/dist/commands/doctor-hard-gates.js.map +1 -0
  14. package/dist/commands/doctor.d.ts +1 -0
  15. package/dist/commands/doctor.d.ts.map +1 -1
  16. package/dist/commands/doctor.js +77 -3
  17. package/dist/commands/doctor.js.map +1 -1
  18. package/dist/commands/evolve.d.ts +11 -0
  19. package/dist/commands/evolve.d.ts.map +1 -0
  20. package/dist/commands/evolve.js +63 -0
  21. package/dist/commands/evolve.js.map +1 -0
  22. package/dist/commands/health.d.ts +14 -0
  23. package/dist/commands/health.d.ts.map +1 -0
  24. package/dist/commands/health.js +193 -0
  25. package/dist/commands/health.js.map +1 -0
  26. package/dist/commands/init.d.ts +6 -0
  27. package/dist/commands/init.d.ts.map +1 -1
  28. package/dist/commands/init.js +63 -3
  29. package/dist/commands/init.js.map +1 -1
  30. package/dist/commands/inventory.d.ts +17 -0
  31. package/dist/commands/inventory.d.ts.map +1 -0
  32. package/dist/commands/inventory.js +114 -0
  33. package/dist/commands/inventory.js.map +1 -0
  34. package/dist/commands/memory.d.ts +3 -0
  35. package/dist/commands/memory.d.ts.map +1 -1
  36. package/dist/commands/memory.js +67 -0
  37. package/dist/commands/memory.js.map +1 -1
  38. package/dist/commands/pack-helpers.d.ts +37 -0
  39. package/dist/commands/pack-helpers.d.ts.map +1 -0
  40. package/dist/commands/pack-helpers.js +105 -0
  41. package/dist/commands/pack-helpers.js.map +1 -0
  42. package/dist/commands/pack.d.ts +11 -0
  43. package/dist/commands/pack.d.ts.map +1 -0
  44. package/dist/commands/pack.js +192 -0
  45. package/dist/commands/pack.js.map +1 -0
  46. package/dist/commands/policy.d.ts +8 -0
  47. package/dist/commands/policy.d.ts.map +1 -0
  48. package/dist/commands/policy.js +65 -0
  49. package/dist/commands/policy.js.map +1 -0
  50. package/dist/commands/portability.d.ts +7 -0
  51. package/dist/commands/portability.d.ts.map +1 -0
  52. package/dist/commands/portability.js +50 -0
  53. package/dist/commands/portability.js.map +1 -0
  54. package/dist/commands/reflect.d.ts +14 -0
  55. package/dist/commands/reflect.d.ts.map +1 -0
  56. package/dist/commands/reflect.js +135 -0
  57. package/dist/commands/reflect.js.map +1 -0
  58. package/dist/commands/simulate.d.ts +14 -0
  59. package/dist/commands/simulate.d.ts.map +1 -0
  60. package/dist/commands/simulate.js +86 -0
  61. package/dist/commands/simulate.js.map +1 -0
  62. package/dist/commands/upgrade.d.ts.map +1 -1
  63. package/dist/commands/upgrade.js +32 -6
  64. package/dist/commands/upgrade.js.map +1 -1
  65. package/dist/commands/validate.d.ts +28 -0
  66. package/dist/commands/validate.d.ts.map +1 -1
  67. package/dist/commands/validate.js +170 -94
  68. package/dist/commands/validate.js.map +1 -1
  69. package/dist/core/build-inventory.d.ts +71 -0
  70. package/dist/core/build-inventory.d.ts.map +1 -0
  71. package/dist/core/build-inventory.js +222 -0
  72. package/dist/core/build-inventory.js.map +1 -0
  73. package/dist/core/check-packs.d.ts +13 -0
  74. package/dist/core/check-packs.d.ts.map +1 -0
  75. package/dist/core/check-packs.js +131 -0
  76. package/dist/core/check-packs.js.map +1 -0
  77. package/dist/core/check-stale-index.d.ts +35 -0
  78. package/dist/core/check-stale-index.d.ts.map +1 -0
  79. package/dist/core/check-stale-index.js +132 -0
  80. package/dist/core/check-stale-index.js.map +1 -0
  81. package/dist/core/check-workflow-drift.d.ts +49 -0
  82. package/dist/core/check-workflow-drift.d.ts.map +1 -0
  83. package/dist/core/check-workflow-drift.js +226 -0
  84. package/dist/core/check-workflow-drift.js.map +1 -0
  85. package/dist/core/compute-checksums.d.ts +7 -0
  86. package/dist/core/compute-checksums.d.ts.map +1 -1
  87. package/dist/core/compute-checksums.js +12 -3
  88. package/dist/core/compute-checksums.js.map +1 -1
  89. package/dist/core/context-budget.d.ts +9 -0
  90. package/dist/core/context-budget.d.ts.map +1 -0
  91. package/dist/core/context-budget.js +46 -0
  92. package/dist/core/context-budget.js.map +1 -0
  93. package/dist/core/event-log.d.ts +44 -0
  94. package/dist/core/event-log.d.ts.map +1 -0
  95. package/dist/core/event-log.js +169 -0
  96. package/dist/core/event-log.js.map +1 -0
  97. package/dist/core/evolution/event-clusters.d.ts +4 -0
  98. package/dist/core/evolution/event-clusters.d.ts.map +1 -0
  99. package/dist/core/evolution/event-clusters.js +82 -0
  100. package/dist/core/evolution/event-clusters.js.map +1 -0
  101. package/dist/core/evolution/recommendation-renderer.d.ts +3 -0
  102. package/dist/core/evolution/recommendation-renderer.d.ts.map +1 -0
  103. package/dist/core/evolution/recommendation-renderer.js +24 -0
  104. package/dist/core/evolution/recommendation-renderer.js.map +1 -0
  105. package/dist/core/evolution/review-failure-clusters.d.ts +10 -0
  106. package/dist/core/evolution/review-failure-clusters.d.ts.map +1 -0
  107. package/dist/core/evolution/review-failure-clusters.js +30 -0
  108. package/dist/core/evolution/review-failure-clusters.js.map +1 -0
  109. package/dist/core/evolution/suggestions.d.ts +24 -0
  110. package/dist/core/evolution/suggestions.d.ts.map +1 -0
  111. package/dist/core/evolution/suggestions.js +11 -0
  112. package/dist/core/evolution/suggestions.js.map +1 -0
  113. package/dist/core/file-lock.d.ts +3 -0
  114. package/dist/core/file-lock.d.ts.map +1 -0
  115. package/dist/core/file-lock.js +84 -0
  116. package/dist/core/file-lock.js.map +1 -0
  117. package/dist/core/gate-policy.d.ts +20 -0
  118. package/dist/core/gate-policy.d.ts.map +1 -0
  119. package/dist/core/gate-policy.js +64 -0
  120. package/dist/core/gate-policy.js.map +1 -0
  121. package/dist/core/harness-scaffold.d.ts +29 -0
  122. package/dist/core/harness-scaffold.d.ts.map +1 -0
  123. package/dist/core/harness-scaffold.js +53 -0
  124. package/dist/core/harness-scaffold.js.map +1 -0
  125. package/dist/core/hook-runner.d.ts +69 -0
  126. package/dist/core/hook-runner.d.ts.map +1 -0
  127. package/dist/core/hook-runner.js +95 -0
  128. package/dist/core/hook-runner.js.map +1 -0
  129. package/dist/core/index.d.ts +6 -0
  130. package/dist/core/index.d.ts.map +1 -1
  131. package/dist/core/index.js +6 -0
  132. package/dist/core/index.js.map +1 -1
  133. package/dist/core/install-metadata-backref.d.ts +14 -0
  134. package/dist/core/install-metadata-backref.d.ts.map +1 -0
  135. package/dist/core/install-metadata-backref.js +39 -0
  136. package/dist/core/install-metadata-backref.js.map +1 -0
  137. package/dist/core/install-metadata-writer.d.ts +4 -0
  138. package/dist/core/install-metadata-writer.d.ts.map +1 -0
  139. package/dist/core/install-metadata-writer.js +31 -0
  140. package/dist/core/install-metadata-writer.js.map +1 -0
  141. package/dist/core/install-metadata.d.ts +173 -0
  142. package/dist/core/install-metadata.d.ts.map +1 -0
  143. package/dist/core/install-metadata.js +191 -0
  144. package/dist/core/install-metadata.js.map +1 -0
  145. package/dist/core/is-hook-script.d.ts +2 -0
  146. package/dist/core/is-hook-script.d.ts.map +1 -0
  147. package/dist/core/is-hook-script.js +45 -0
  148. package/dist/core/is-hook-script.js.map +1 -0
  149. package/dist/core/pack-manifest.d.ts +48 -0
  150. package/dist/core/pack-manifest.d.ts.map +1 -0
  151. package/dist/core/pack-manifest.js +126 -0
  152. package/dist/core/pack-manifest.js.map +1 -0
  153. package/dist/core/pack-resolver.d.ts +18 -0
  154. package/dist/core/pack-resolver.d.ts.map +1 -0
  155. package/dist/core/pack-resolver.js +144 -0
  156. package/dist/core/pack-resolver.js.map +1 -0
  157. package/dist/core/portability-matrix.d.ts +17 -0
  158. package/dist/core/portability-matrix.d.ts.map +1 -0
  159. package/dist/core/portability-matrix.js +31 -0
  160. package/dist/core/portability-matrix.js.map +1 -0
  161. package/dist/core/release-metadata.d.ts +80 -0
  162. package/dist/core/release-metadata.d.ts.map +1 -0
  163. package/dist/core/release-metadata.js +70 -0
  164. package/dist/core/release-metadata.js.map +1 -0
  165. package/dist/core/simulation-runner.d.ts +93 -0
  166. package/dist/core/simulation-runner.d.ts.map +1 -0
  167. package/dist/core/simulation-runner.js +161 -0
  168. package/dist/core/simulation-runner.js.map +1 -0
  169. package/dist/core/smart-update.d.ts +32 -0
  170. package/dist/core/smart-update.d.ts.map +1 -1
  171. package/dist/core/smart-update.js +239 -47
  172. package/dist/core/smart-update.js.map +1 -1
  173. package/dist/core/usage/usage-analyzer.d.ts +18 -0
  174. package/dist/core/usage/usage-analyzer.d.ts.map +1 -0
  175. package/dist/core/usage/usage-analyzer.js +41 -0
  176. package/dist/core/usage/usage-analyzer.js.map +1 -0
  177. package/dist/core/validate-install.d.ts.map +1 -1
  178. package/dist/core/validate-install.js +3 -1
  179. package/dist/core/validate-install.js.map +1 -1
  180. package/dist/index.js +175 -4
  181. package/dist/index.js.map +1 -1
  182. package/dist/memory/archive.d.ts +9 -0
  183. package/dist/memory/archive.d.ts.map +1 -0
  184. package/dist/memory/archive.js +42 -0
  185. package/dist/memory/archive.js.map +1 -0
  186. package/dist/memory/compact.d.ts +9 -0
  187. package/dist/memory/compact.d.ts.map +1 -0
  188. package/dist/memory/compact.js +33 -0
  189. package/dist/memory/compact.js.map +1 -0
  190. package/dist/memory/conflicts.d.ts +8 -0
  191. package/dist/memory/conflicts.d.ts.map +1 -0
  192. package/dist/memory/conflicts.js +28 -0
  193. package/dist/memory/conflicts.js.map +1 -0
  194. package/dist/memory/promote.d.ts +8 -0
  195. package/dist/memory/promote.d.ts.map +1 -0
  196. package/dist/memory/promote.js +10 -0
  197. package/dist/memory/promote.js.map +1 -0
  198. package/dist/memory/store-utils.d.ts +14 -0
  199. package/dist/memory/store-utils.d.ts.map +1 -0
  200. package/dist/memory/store-utils.js +44 -0
  201. package/dist/memory/store-utils.js.map +1 -0
  202. package/dist/migrate/migrate-orchestrator.d.ts.map +1 -1
  203. package/dist/migrate/migrate-orchestrator.js +6 -2
  204. package/dist/migrate/migrate-orchestrator.js.map +1 -1
  205. package/dist/migrate/portable-installer.d.ts +3 -0
  206. package/dist/migrate/portable-installer.d.ts.map +1 -1
  207. package/dist/migrate/portable-installer.js +3 -0
  208. package/dist/migrate/portable-installer.js.map +1 -1
  209. package/dist/migrate/reconcile/portable-registry-lock.d.ts.map +1 -1
  210. package/dist/migrate/reconcile/portable-registry-lock.js +6 -78
  211. package/dist/migrate/reconcile/portable-registry-lock.js.map +1 -1
  212. package/dist/migrate/reconcile/portable-registry.d.ts +24 -6
  213. package/dist/migrate/reconcile/portable-registry.d.ts.map +1 -1
  214. package/dist/migrate/reconcile/portable-registry.js +7 -1
  215. package/dist/migrate/reconcile/portable-registry.js.map +1 -1
  216. package/dist/migrate/skill-directory-installer.d.ts +2 -0
  217. package/dist/migrate/skill-directory-installer.d.ts.map +1 -1
  218. package/dist/migrate/skill-directory-installer.js +3 -0
  219. package/dist/migrate/skill-directory-installer.js.map +1 -1
  220. package/dist/migrate/types.d.ts +4 -4
  221. package/package.json +1 -1
@@ -1,11 +1,14 @@
1
1
  import { existsSync, readFileSync, writeFileSync, mkdirSync, unlinkSync } from "node:fs";
2
- import { join } from "node:path";
2
+ import { join, relative, isAbsolute } from "node:path";
3
3
  import * as log from "./core-logger.js";
4
4
  import { processTemplate } from "./substitute-placeholders.js";
5
5
  import { mergeSettingsFile } from "./merge-settings.js";
6
- import { readManifest, buildManifest, writeManifest, hashFile, classifyLayer } from "./compute-checksums.js";
6
+ import { writeManifest, hashFile, classifyLayer } from "./compute-checksums.js";
7
7
  import { loadIgnorePatterns, walkDir, copyFile } from "./smart-update-utils.js";
8
8
  import { findOrphans } from "./find-orphans.js";
9
+ import { readReleaseMetadata, toOrphanManifest, mapPathToLastModified } from "./release-metadata.js";
10
+ import { readInstallMetadata, readLegacyManifestMetadata, buildInstallMetadata, indexByPath, CorruptInstallMetadataError, } from "./install-metadata.js";
11
+ import { writeInstallMetadata } from "./install-metadata-writer.js";
9
12
  /**
10
13
  * Smart update from a downloaded release directory.
11
14
  *
@@ -18,7 +21,13 @@ import { findOrphans } from "./find-orphans.js";
18
21
  export async function smartUpdate(config, sourceDir, targetDir, dryRun, force = false, options = {}) {
19
22
  const cleanup = options.cleanup !== false; // default-on
20
23
  const assumeYes = options.assumeYes === true;
21
- const oldManifest = force ? null : readManifest(join(targetDir, ".claude"));
24
+ const targetClaudeDir = join(targetDir, ".claude");
25
+ // Single pre-write read of the installed state. Both the user-edit baseline
26
+ // and the orphan-cleanup guard are derived from THIS value and never re-read
27
+ // after any write, so write ordering cannot affect either decision.
28
+ const prior = force ? { source: "none", meta: null } : readPriorInstallState(targetClaudeDir);
29
+ const priorSource = prior.source;
30
+ const priorEntriesByPath = indexByPath(prior.meta?.files ?? []);
22
31
  const stats = {
23
32
  updated: 0,
24
33
  skipped: 0,
@@ -26,11 +35,18 @@ export async function smartUpdate(config, sourceDir, targetDir, dryRun, force =
26
35
  userModified: [],
27
36
  orphansDeleted: [],
28
37
  orphansSkipped: [],
38
+ deletionsDeleted: [],
39
+ deletionsSkipped: [],
40
+ deletionsAlreadyGone: [],
41
+ deletionsPreview: [],
42
+ profileTrimmed: [],
43
+ profileTrimSkipped: [],
44
+ profileTrimPreview: [],
29
45
  };
30
- if (!oldManifest && existsSync(join(targetDir, ".claude"))) {
31
- log.warn("No manifest found — will treat all existing files as unmodified.");
46
+ if (priorSource === "none" && !force && existsSync(targetClaudeDir)) {
47
+ log.warn("No installed metadata found — will treat all existing files as unmodified.");
32
48
  }
33
- const oldChecksums = oldManifest?.checksums ?? {};
49
+ let settingsMerged = false;
34
50
  const isIgnored = loadIgnorePatterns(targetDir);
35
51
  // Source .claude/ from downloaded release
36
52
  const claudeSrc = join(sourceDir, ".claude");
@@ -46,6 +62,13 @@ export async function smartUpdate(config, sourceDir, targetDir, dryRun, force =
46
62
  for (const { manifestPath, targetRelPath, srcPath } of claudeFiles) {
47
63
  const destPath = join(targetDir, targetRelPath);
48
64
  const layer = classifyLayer(manifestPath);
65
+ // Profile filter: a resolved allow-set installs only its files. The set
66
+ // always ⊇ base (safety rules + hooks + settings), so this never filters a
67
+ // safety file. Absent ⇒ full tree (unchanged).
68
+ if (options.allowedPaths && !options.allowedPaths.has(manifestPath)) {
69
+ stats.skipped++;
70
+ continue;
71
+ }
49
72
  if (isIgnored(targetRelPath)) {
50
73
  log.debug(`Ignored (protected): ${targetRelPath}`);
51
74
  stats.skipped++;
@@ -54,6 +77,7 @@ export async function smartUpdate(config, sourceDir, targetDir, dryRun, force =
54
77
  // settings.json uses append-only merge
55
78
  if (manifestPath === "settings.json") {
56
79
  mergeSettingsFile(srcPath, destPath, dryRun);
80
+ settingsMerged = true;
57
81
  stats.updated++;
58
82
  continue;
59
83
  }
@@ -76,10 +100,12 @@ export async function smartUpdate(config, sourceDir, targetDir, dryRun, force =
76
100
  stats.added++;
77
101
  continue;
78
102
  }
79
- // File exists — check if user modified it
103
+ // File exists — check if user modified it. The prior baseline hash comes
104
+ // from the canonical reader (legacy `sha256` is mapped to `checksum`), so
105
+ // this comparison is unchanged in meaning from the legacy manifest path.
80
106
  const currentHash = hashFile(destPath);
81
- const manifestEntry = oldChecksums[manifestPath];
82
- if (manifestEntry && currentHash !== manifestEntry.sha256) {
107
+ const priorEntry = priorEntriesByPath[manifestPath];
108
+ if (priorEntry && currentHash !== priorEntry.checksum) {
83
109
  log.debug(`Skipped (user-modified): ${targetRelPath}`);
84
110
  stats.userModified.push(targetRelPath);
85
111
  stats.skipped++;
@@ -174,27 +200,98 @@ export async function smartUpdate(config, sourceDir, targetDir, dryRun, force =
174
200
  mkdirSync(join(targetDir, ".claude", "memory"), { recursive: true });
175
201
  mkdirSync(join(targetDir, ".claude", "logs"), { recursive: true });
176
202
  }
203
+ // Single release read, reused by the deletions pass and the metadata write.
204
+ const release = readReleaseMetadataSafe(sourceDir);
205
+ // Explicit-deletions pass — runs BEFORE orphan cleanup. A path listed in the
206
+ // release `deletions[]` is removed only when the PRE-WRITE installed metadata
207
+ // marks it kit-owned AND its on-disk hash is still pristine. Ownership comes
208
+ // from priorEntriesByPath (a file slated for deletion is absent from the new
209
+ // release, so it has no fresh entry). On a fresh install this map is empty, so
210
+ // every gate fails and the pass is a no-op. Suppressed entirely by
211
+ // `--no-cleanup`, the same safety switch as orphan cleanup (deletions are
212
+ // intent, orphan cleanup is heuristic — `--no-cleanup` disables both).
213
+ if (cleanup && release && release.deletions.length > 0) {
214
+ const eligible = [];
215
+ for (const relPath of release.deletions) {
216
+ const dest = join(claudeDir, relPath);
217
+ if (!isWithinDir(claudeDir, dest)) {
218
+ stats.deletionsSkipped.push(relPath);
219
+ continue;
220
+ }
221
+ if (!existsSync(dest)) {
222
+ stats.deletionsAlreadyGone.push(relPath);
223
+ continue;
224
+ }
225
+ const entry = priorEntriesByPath[relPath];
226
+ if (!entry || entry.owner !== "meowkit") {
227
+ stats.deletionsSkipped.push(relPath);
228
+ continue;
229
+ }
230
+ if (hashFile(dest) !== entry.checksum) {
231
+ stats.deletionsSkipped.push(relPath); // user-modified — preserve
232
+ continue;
233
+ }
234
+ eligible.push(relPath);
235
+ }
236
+ if (eligible.length > 0) {
237
+ if (dryRun) {
238
+ stats.deletionsPreview.push(...eligible);
239
+ }
240
+ else {
241
+ let proceed;
242
+ if (assumeYes || force)
243
+ proceed = true;
244
+ else if (options.confirmOrphans)
245
+ proceed = await options.confirmOrphans(eligible);
246
+ else
247
+ proceed = await confirmDelete(eligible.length);
248
+ if (!proceed) {
249
+ stats.deletionsSkipped.push(...eligible);
250
+ }
251
+ else {
252
+ for (const relPath of eligible) {
253
+ try {
254
+ unlinkSync(join(claudeDir, relPath));
255
+ stats.deletionsDeleted.push(relPath);
256
+ }
257
+ catch (err) {
258
+ log.warn(`Failed to delete ${relPath}: ${err.message}`);
259
+ stats.deletionsSkipped.push(relPath);
260
+ }
261
+ }
262
+ log.info(`Removed ${stats.deletionsDeleted.length} file(s) marked for deletion by the release.`);
263
+ }
264
+ }
265
+ }
266
+ }
177
267
  // Orphan cleanup pass — removes user-disk files no longer in the release
178
268
  // manifest. Scoped to kit-owned dirs (rules/, skills/, agents/, hooks/);
179
269
  // user-private state (memory/, logs/, .env, secrets/) is never inspected.
180
270
  // Default-on; opt out via `--no-cleanup`. Confirmation required unless
181
271
  // `--yes` / `--force`.
182
272
  //
183
- // Safety gate: only run when a prior meowkit.manifest.json exists in the
184
- // user's .claude/. Without it the dir is either fresh (no orphans possible)
185
- // or owned by another tool (claudekit, etc.) — in the latter case every
186
- // existing file would be flagged and we'd offer to delete the user's
187
- // other toolkit. `force` is computed from oldManifest at line 47 and is
188
- // not a re-read, so we read fresh here.
189
- const hasPriorMeowkitInstall = readManifest(claudeDir) !== null;
273
+ // Safety gate: only run when a prior MeowKit install is detected. Without it
274
+ // the dir is either fresh (no orphans possible) or owned by another, unrelated
275
+ // tool — in the latter case every existing file would be flagged and we'd offer
276
+ // to delete the user's other toolkit. The guard value is taken
277
+ // from the SINGLE pre-write read at the top of smartUpdate so a later
278
+ // metadata write cannot flip it. A version-only `metadata.json`
279
+ // (`legacy-metadata`) does NOT count — it can come from the old pipeline on a
280
+ // non-checksum install — so only `new` and `legacy-manifest` enable cleanup.
281
+ const hasPriorMeowkitInstall = priorSource === "new" || priorSource === "legacy-manifest";
190
282
  if (cleanup && hasPriorMeowkitInstall) {
191
- const releaseManifest = buildReleaseManifest(sourceDir);
283
+ const releaseManifest = release ? toOrphanManifest(release) : null;
192
284
  if (!releaseManifest) {
193
285
  log.warn("release-manifest.json not found in source release — orphan cleanup skipped. " +
194
286
  "Pass --no-cleanup to silence this warning, or report the missing manifest as a release-pipeline bug.");
195
287
  }
196
288
  else {
197
- const orphans = findOrphans({ claudeDir, manifest: releaseManifest });
289
+ // Paths declared in `deletions[]` are owned by the deletions pass above —
290
+ // whatever it decided (delete / preserve user-modified) is authoritative.
291
+ // Excluding them here prevents orphan cleanup from re-deleting a file the
292
+ // deletions gate deliberately preserved (e.g. a user-modified listed path).
293
+ const deletionSet = new Set(release?.deletions ?? []);
294
+ const orphans = findOrphans({ claudeDir, manifest: releaseManifest }).filter((o) => !deletionSet.has(o));
198
295
  if (orphans.length > 0) {
199
296
  const useCallback = options.confirmOrphans && !dryRun && !assumeYes && !force;
200
297
  if (!useCallback) {
@@ -234,48 +331,143 @@ export async function smartUpdate(config, sourceDir, targetDir, dryRun, force =
234
331
  }
235
332
  }
236
333
  }
237
- // Write manifest
334
+ // Profile-trim pass — the full→core downgrade. When an allow-set is active and
335
+ // a prior MeowKit install exists, previously-installed pristine kit files
336
+ // OUTSIDE the allow-set are removed; otherwise they linger as zombie skills
337
+ // still auto-loaded by the runtime. User-modified files are preserved + warned.
338
+ // Orphan logic can't catch these — they ARE in the release manifest — so this
339
+ // is the dedicated data-safety pass. Suppressed by `--no-cleanup`, never on full.
340
+ if (cleanup && options.trimToProfile && options.allowedPaths && hasPriorMeowkitInstall) {
341
+ const allow = options.allowedPaths;
342
+ const trimEligible = [];
343
+ for (const entry of prior.meta?.files ?? []) {
344
+ // Normalize to forward slashes — `allow` (resolver) uses them, but a
345
+ // metadata path from collectFiles carries native separators on Windows.
346
+ const relForward = entry.path.replace(/\\/g, "/");
347
+ if (allow.has(relForward) || entry.layer === "user")
348
+ continue;
349
+ const dest = join(claudeDir, entry.path);
350
+ if (!isWithinDir(claudeDir, dest) || !existsSync(dest))
351
+ continue;
352
+ // pristine kit-owned only — user-modified (owner flips to meowkit-modified
353
+ // or disk hash drifts) is preserved, mirroring the deletions-pass guard.
354
+ if (entry.owner !== "meowkit" || hashFile(dest) !== entry.checksum) {
355
+ stats.profileTrimSkipped.push(entry.path);
356
+ continue;
357
+ }
358
+ trimEligible.push(entry.path);
359
+ }
360
+ if (trimEligible.length > 0) {
361
+ if (dryRun) {
362
+ stats.profileTrimPreview.push(...trimEligible);
363
+ }
364
+ else {
365
+ let proceed;
366
+ if (assumeYes || force)
367
+ proceed = true;
368
+ else if (options.confirmOrphans)
369
+ proceed = await options.confirmOrphans(trimEligible);
370
+ else
371
+ proceed = await confirmDelete(trimEligible.length);
372
+ if (!proceed) {
373
+ stats.profileTrimSkipped.push(...trimEligible);
374
+ }
375
+ else {
376
+ for (const relPath of trimEligible) {
377
+ try {
378
+ unlinkSync(join(claudeDir, relPath));
379
+ stats.profileTrimmed.push(relPath);
380
+ }
381
+ catch (err) {
382
+ log.warn(`Failed to trim ${relPath}: ${err.message}`);
383
+ stats.profileTrimSkipped.push(relPath);
384
+ }
385
+ }
386
+ log.info(`Trimmed ${stats.profileTrimmed.length} file(s) outside the '${options.profile ?? "selected"}' profile.`);
387
+ }
388
+ }
389
+ }
390
+ }
391
+ // Write installed metadata. `dryRun` writes neither file (matches today).
238
392
  if (!dryRun) {
239
- const newManifest = buildManifest(claudeDir);
240
- writeManifest(claudeDir, newManifest);
393
+ const meta = buildInstallMetadata(claudeDir, {
394
+ version: release?.version ?? "unknown",
395
+ sourceTimestamps: mapPathToLastModified(release),
396
+ priorEntriesByPath,
397
+ scope: "local",
398
+ mergedSettings: settingsMerged ? ["settings.json"] : undefined,
399
+ profile: options.profile,
400
+ packs: options.packs,
401
+ });
402
+ try {
403
+ await writeInstallMetadata(claudeDir, meta);
404
+ // One-release rollback dual-write of the legacy manifest. Only after the
405
+ // canonical write succeeds — if the canonical write fails, the previous
406
+ // legacy manifest stays on disk so the next run still detects a prior install.
407
+ // Derived from the entries just computed, avoiding a second scan+hash of .claude/.
408
+ writeManifest(claudeDir, legacyManifestFromInstallMeta(meta));
409
+ }
410
+ catch (err) {
411
+ log.warn(`Failed to write installed metadata: ${err.message}`);
412
+ }
241
413
  }
242
- log.setData("update", {
243
- updated: stats.updated,
244
- skipped: stats.skipped,
245
- added: stats.added,
246
- userModified: stats.userModified,
247
- orphansDeleted: stats.orphansDeleted,
248
- orphansSkipped: stats.orphansSkipped,
249
- });
414
+ log.setData("update", stats);
250
415
  return stats;
251
416
  }
417
+ /**
418
+ * Project canonical install metadata onto the legacy `Manifest` shape for the
419
+ * one-release dual-write, reproducing `buildManifest`'s output without a second
420
+ * directory walk (the hashes are already in `meta.files`).
421
+ */
422
+ function legacyManifestFromInstallMeta(meta) {
423
+ const checksums = {};
424
+ for (const f of meta.files) {
425
+ checksums[f.path] = {
426
+ sha256: f.checksum,
427
+ layer: f.layer,
428
+ owner: f.layer === "user" ? "user" : "meowkit",
429
+ baseChecksum: f.checksum,
430
+ sourceChecksum: f.checksum,
431
+ targetChecksum: f.checksum,
432
+ installedAt: meta.installedAt,
433
+ };
434
+ }
435
+ return { version: "0.2.0", generatedAt: meta.installedAt, checksums };
436
+ }
252
437
  function toManifestPath(relPath) {
253
438
  return relPath.replace(/\\/g, "/").replace(/^\.claude\//, "");
254
439
  }
440
+ /** True when `target` resolves to a path strictly inside `dir` (no `..` escape, no symlink-free check needed for an exact listed path). */
441
+ function isWithinDir(dir, target) {
442
+ const rel = relative(dir, target);
443
+ return rel !== "" && !rel.startsWith("..") && !isAbsolute(rel);
444
+ }
255
445
  /**
256
- * Build a manifest-shaped object from the release source `.claude/` so we can
257
- * compare against the user-installed dir without writing anything to disk.
258
- * The release ships `release-manifest.json` at sourceDir root with `files[]`;
259
- * we project that onto the same `checksums` shape `findOrphans` expects.
446
+ * Read the prior installed state for the user-edit baseline and orphan guard.
447
+ * If the canonical metadata.json is present but corrupt, fall back to the legacy
448
+ * manifest so user-edit protection still has a baseline, rather than treating
449
+ * every file as unmodified.
260
450
  */
261
- function buildReleaseManifest(sourceDir) {
262
- const manifestPath = join(sourceDir, "release-manifest.json");
263
- if (!existsSync(manifestPath))
264
- return null;
451
+ function readPriorInstallState(claudeDir) {
265
452
  try {
266
- const raw = JSON.parse(readFileSync(manifestPath, "utf-8"));
267
- const checksums = {};
268
- for (const f of raw.files ?? []) {
269
- checksums[f.path] = { sha256: f.checksum, layer: "core" };
453
+ return readInstallMetadata(claudeDir);
454
+ }
455
+ catch (err) {
456
+ if (err instanceof CorruptInstallMetadataError) {
457
+ log.warn(`Installed metadata is corrupt (${err.detail}); falling back to legacy manifest detection.`);
458
+ const legacy = readLegacyManifestMetadata(claudeDir);
459
+ return legacy ? { source: "legacy-manifest", meta: legacy } : { source: "none", meta: null };
270
460
  }
271
- return {
272
- version: raw.version ?? "unknown",
273
- generatedAt: raw.generatedAt ?? new Date().toISOString(),
274
- checksums,
275
- };
461
+ throw err;
462
+ }
463
+ }
464
+ /** Parse the release manifest, treating a corrupt one as absent (version becomes "unknown"). */
465
+ function readReleaseMetadataSafe(sourceDir) {
466
+ try {
467
+ return readReleaseMetadata(sourceDir);
276
468
  }
277
469
  catch (err) {
278
- log.warn(`Failed to parse release-manifest.json: ${err.message}`);
470
+ log.warn(`Failed to read release-manifest.json for installed metadata: ${err.message}`);
279
471
  return null;
280
472
  }
281
473
  }
@@ -1 +1 @@
1
- {"version":3,"file":"smart-update.js","sourceRoot":"","sources":["../../src/core/smart-update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"smart-update.js","sourceRoot":"","sources":["../../src/core/smart-update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { EventRecord } from "../event-log.js";
2
+ import type { InventoryEntry } from "../build-inventory.js";
3
+ export type UsageStatus = "available" | "na";
4
+ export interface ArtifactUsage {
5
+ id: string;
6
+ type: string;
7
+ count: number;
8
+ lastSeen?: string;
9
+ status: UsageStatus;
10
+ }
11
+ export interface UsageReport {
12
+ status: UsageStatus;
13
+ reason?: string;
14
+ artifacts: ArtifactUsage[];
15
+ }
16
+ export declare function analyzeArtifactUsage(entries: InventoryEntry[], events: EventRecord[]): UsageReport;
17
+ export declare function filterUnused(report: UsageReport, threshold?: number): ArtifactUsage[];
18
+ //# sourceMappingURL=usage-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-analyzer.d.ts","sourceRoot":"","sources":["../../../src/core/usage/usage-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,IAAI,CAAC;AAE7C,MAAM,WAAW,aAAa;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,aAAa,EAAE,CAAC;CAC3B;AAQD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,CA2BlG;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,SAAI,GAAG,aAAa,EAAE,CAGhF"}
@@ -0,0 +1,41 @@
1
+ function eventArtifactId(event) {
2
+ if (event.event === "skill.invoked" && typeof event.data.skill === "string")
3
+ return event.data.skill;
4
+ if (event.event === "agent.invoked" && typeof event.data.agent === "string")
5
+ return event.data.agent;
6
+ return null;
7
+ }
8
+ export function analyzeArtifactUsage(entries, events) {
9
+ const usageEvents = events.filter((e) => eventArtifactId(e) !== null);
10
+ if (usageEvents.length === 0) {
11
+ return {
12
+ status: "na",
13
+ reason: "Usage events are not emitted yet; pruning cannot honestly classify artifacts as unused.",
14
+ artifacts: entries.map((e) => ({ id: e.id, type: e.type, count: 0, status: "na" })),
15
+ };
16
+ }
17
+ const counts = new Map();
18
+ for (const event of usageEvents) {
19
+ const id = eventArtifactId(event);
20
+ if (!id)
21
+ continue;
22
+ const row = counts.get(id) ?? { count: 0 };
23
+ row.count++;
24
+ if (!row.lastSeen || event.ts > row.lastSeen)
25
+ row.lastSeen = event.ts;
26
+ counts.set(id, row);
27
+ }
28
+ return {
29
+ status: "available",
30
+ artifacts: entries.map((entry) => {
31
+ const row = counts.get(entry.id);
32
+ return { id: entry.id, type: entry.type, count: row?.count ?? 0, lastSeen: row?.lastSeen, status: "available" };
33
+ }),
34
+ };
35
+ }
36
+ export function filterUnused(report, threshold = 1) {
37
+ if (report.status !== "available")
38
+ return [];
39
+ return report.artifacts.filter((a) => a.count < threshold);
40
+ }
41
+ //# sourceMappingURL=usage-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-analyzer.js","sourceRoot":"","sources":["../../../src/core/usage/usage-analyzer.ts"],"names":[],"mappings":"AAmBA,SAAS,eAAe,CAAC,KAAkB;IAC1C,IAAI,KAAK,CAAC,KAAK,KAAK,eAAe,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;IACrG,IAAI,KAAK,CAAC,KAAK,KAAK,eAAe,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;IACrG,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAyB,EAAE,MAAqB;IACpF,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IACtE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO;YACN,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,yFAAyF;YACjG,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;SACnF,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAgD,CAAC;IACvE,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QACjC,MAAM,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,EAAE;YAAE,SAAS;QAClB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC,QAAQ;YAAE,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC;QACtE,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,OAAO;QACN,MAAM,EAAE,WAAW;QACnB,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAChC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACjC,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QACjH,CAAC,CAAC;KACF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAmB,EAAE,SAAS,GAAG,CAAC;IAC9D,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW;QAAE,OAAO,EAAE,CAAC;IAC7C,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;AAC5D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"validate-install.d.ts","sourceRoot":"","sources":["../../src/core/validate-install.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CACjB;AAsCD,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAiE5D"}
1
+ {"version":3,"file":"validate-install.d.ts","sourceRoot":"","sources":["../../src/core/validate-install.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CACjB;AAsCD,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAkE5D"}
@@ -1,6 +1,7 @@
1
1
  import { existsSync, readdirSync, statSync, accessSync, constants } from "node:fs";
2
2
  import { join } from "node:path";
3
3
  import pc from "picocolors";
4
+ import { isHookScript } from "./is-hook-script.js";
4
5
  function check(label, pass, issues) {
5
6
  if (pass) {
6
7
  console.log(` ${pc.green("PASS")} ${label}`);
@@ -67,7 +68,8 @@ export function validate(targetDir) {
67
68
  // Hooks — all must be executable
68
69
  const hooksDir = join(claude, "hooks");
69
70
  if (existsSync(hooksDir)) {
70
- const hookFiles = readdirSync(hooksDir);
71
+ // Only real hook scripts — exclude subdirs and sidecars that accessSync(X_OK) accepts.
72
+ const hookFiles = readdirSync(hooksDir).filter((f) => isHookScript(join(hooksDir, f)));
71
73
  for (const hookFile of hookFiles) {
72
74
  const hookPath = join(hooksDir, hookFile);
73
75
  let isExecutable = false;
@@ -1 +1 @@
1
- {"version":3,"file":"validate-install.js","sourceRoot":"","sources":["../../src/core/validate-install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate-install.js","sourceRoot":"","sources":["../../src/core/validate-install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACnF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAOnD,SAAS,KAAK,CAAC,KAAa,EAAE,IAAa,EAAE,MAAgB;IAC5D,IAAI,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,sDAAsD;AACtD,SAAS,YAAY,CAAC,GAAW;IAChC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IAC/B,IAAI,CAAC;QACJ,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,CAAC,CAAC;IACV,CAAC;AACF,CAAC;AAED,2CAA2C;AAC3C,SAAS,YAAY,CAAC,GAAW;IAChC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IAC/B,IAAI,CAAC;QACJ,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACpC,IAAI,CAAC;gBACJ,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC7C,CAAC;YAAC,MAAM,CAAC;gBACR,OAAO,KAAK,CAAC;YACd,CAAC;QACF,CAAC,CAAC,CAAC,MAAM,CAAC;IACX,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,CAAC,CAAC;IACV,CAAC;AACF,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,SAAiB;IACzC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAE1C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAE9C,iBAAiB;IACjB,KAAK,CAAC,2BAA2B,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;IAC/D,KAAK,CAAC,kBAAkB,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC5E,KAAK,CAAC,4BAA4B,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAE7F,uCAAuC;IACvC,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IACxD,KAAK,CAAC,WAAW,UAAU,mBAAmB,EAAE,UAAU,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;IAE1E,kCAAkC;IAClC,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IACxD,KAAK,CAAC,WAAW,UAAU,yBAAyB,EAAE,UAAU,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;IAEhF,WAAW;IACX,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACrC,KAAK,CAAC,2BAA2B,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAEtD,QAAQ;IACR,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtD,KAAK,CAAC,UAAU,SAAS,kBAAkB,EAAE,SAAS,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IAErE,QAAQ;IACR,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtD,KAAK,CAAC,UAAU,SAAS,mBAAmB,EAAE,SAAS,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;IAEvE,iCAAiC;IACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,uFAAuF;QACvF,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACvF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC1C,IAAI,YAAY,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC;gBACJ,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;gBACrC,YAAY,GAAG,IAAI,CAAC;YACrB,CAAC;YAAC,MAAM,CAAC;gBACR,iBAAiB;YAClB,CAAC;YACD,KAAK,CAAC,QAAQ,QAAQ,gBAAgB,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QAC/D,CAAC;IACF,CAAC;SAAM,CAAC;QACP,KAAK,CAAC,wBAAwB,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,UAAU;IACV,KAAK,CAAC,0BAA0B,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAE/E,WAAW;IACX,KAAK,CAAC,sBAAsB,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAEjF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CACV,KAAK;QACJ,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE;QACjD,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,iBAAiB,CAAC,CAAC,EAAE,CAC9D,CAAC;IAEF,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC1B,CAAC"}