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
@@ -0,0 +1,95 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import path from "node:path";
3
+ const SHELL_INTERPRETERS = new Set(["sh", "bash", "dash", "zsh"]);
4
+ /** First token + first double-quoted argument of a hook command string. */
5
+ function parseCommand(raw) {
6
+ const interpMatch = raw.match(/^(\S+)\s+"([^"]+)"/);
7
+ if (!interpMatch)
8
+ return null;
9
+ const interpreter = interpMatch[1] ?? "";
10
+ const scriptRef = interpMatch[2] ?? "";
11
+ return { raw, interpreter, scriptRef, script: path.basename(scriptRef) };
12
+ }
13
+ /** Does a concrete tool name satisfy a group's matcher regex (e.g. "Edit|Write")? */
14
+ function matcherMatches(groupMatcher, tool) {
15
+ // Matcher-less groups (SessionStart, Stop, …) apply to the event unconditionally.
16
+ if (!groupMatcher)
17
+ return true;
18
+ // A matcher present but no concrete tool requested → include (caller wants all).
19
+ if (!tool)
20
+ return true;
21
+ try {
22
+ return new RegExp(`^(?:${groupMatcher})$`).test(tool);
23
+ }
24
+ catch {
25
+ return groupMatcher === tool;
26
+ }
27
+ }
28
+ /**
29
+ * Walk settings.hooks[event], returning every command whose group matches `tool`.
30
+ * Pure — does not expand `$CLAUDE_PROJECT_DIR` (that happens at run time).
31
+ */
32
+ export function parseHookCommands(settings, event, tool) {
33
+ const groups = settings.hooks?.[event];
34
+ if (!Array.isArray(groups))
35
+ return [];
36
+ const out = [];
37
+ for (const group of groups) {
38
+ if (!matcherMatches(group.matcher, tool))
39
+ continue;
40
+ for (const entry of group.hooks ?? []) {
41
+ if (typeof entry.command !== "string")
42
+ continue;
43
+ const parsed = parseCommand(entry.command);
44
+ if (parsed)
45
+ out.push(parsed);
46
+ }
47
+ }
48
+ return out;
49
+ }
50
+ function expandScriptRef(scriptRef, projectDir) {
51
+ return scriptRef.replace(/\$\{?CLAUDE_PROJECT_DIR\}?/g, projectDir);
52
+ }
53
+ /**
54
+ * Reconstruct and run the configured hook commands for one event/tool against
55
+ * `projectDir`, feeding the canonical JSON-on-stdin payload. Returns one result
56
+ * per executed command (in settings order).
57
+ */
58
+ export function runConfiguredHook(settings, opts) {
59
+ const shellOnly = opts.shellOnly !== false;
60
+ const commands = parseHookCommands(settings, opts.event, opts.tool);
61
+ const input = JSON.stringify({
62
+ hook_event_name: opts.event,
63
+ tool_name: opts.toolName ?? opts.tool ?? "",
64
+ tool_input: opts.toolInput ?? {},
65
+ session_id: "hook-runner",
66
+ cwd: opts.projectDir,
67
+ transcript_path: "",
68
+ });
69
+ const results = [];
70
+ for (const cmd of commands) {
71
+ if (shellOnly && !SHELL_INTERPRETERS.has(cmd.interpreter))
72
+ continue;
73
+ if (opts.only && cmd.script !== opts.only)
74
+ continue;
75
+ if (opts.exclude?.includes(cmd.script))
76
+ continue;
77
+ const scriptPath = expandScriptRef(cmd.scriptRef, opts.projectDir);
78
+ const proc = spawnSync(cmd.interpreter, [scriptPath], {
79
+ cwd: opts.projectDir,
80
+ input,
81
+ encoding: "utf8",
82
+ timeout: 15000,
83
+ env: { ...process.env, CLAUDE_PROJECT_DIR: opts.projectDir, ...opts.extraEnv },
84
+ });
85
+ results.push({
86
+ script: cmd.script,
87
+ interpreter: cmd.interpreter,
88
+ status: proc.status,
89
+ stdout: proc.stdout ?? "",
90
+ stderr: proc.stderr ?? "",
91
+ });
92
+ }
93
+ return results;
94
+ }
95
+ //# sourceMappingURL=hook-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-runner.js","sourceRoot":"","sources":["../../src/core/hook-runner.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,13 @@ export * from "./validate-install.js";
7
7
  export * from "./smart-update.js";
8
8
  export * from "./smart-update-utils.js";
9
9
  export * from "./find-orphans.js";
10
+ export * from "./install-metadata.js";
11
+ export * from "./install-metadata-writer.js";
12
+ export * from "./install-metadata-backref.js";
13
+ export * from "./release-metadata.js";
10
14
  export * from "./core-logger.js";
11
15
  export * from "./skills-dependencies.js";
12
16
  export * from "./dependency-installer.js";
17
+ export * from "./pack-manifest.js";
18
+ export * from "./pack-resolver.js";
13
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC"}
@@ -7,7 +7,13 @@ export * from "./validate-install.js";
7
7
  export * from "./smart-update.js";
8
8
  export * from "./smart-update-utils.js";
9
9
  export * from "./find-orphans.js";
10
+ export * from "./install-metadata.js";
11
+ export * from "./install-metadata-writer.js";
12
+ export * from "./install-metadata-backref.js";
13
+ export * from "./release-metadata.js";
10
14
  export * from "./core-logger.js";
11
15
  export * from "./skills-dependencies.js";
12
16
  export * from "./dependency-installer.js";
17
+ export * from "./pack-manifest.js";
18
+ export * from "./pack-resolver.js";
13
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { type InstallFileEntry } from "./install-metadata.js";
2
+ export interface InstalledBackRef {
3
+ version: string | null;
4
+ entriesByPath: Record<string, InstallFileEntry>;
5
+ sourceClaudeDir: string;
6
+ }
7
+ /** Build a back-reference from the migration source root, or null if no installed metadata. */
8
+ export declare function buildInstalledBackRef(sourceRoot: string): InstalledBackRef | null;
9
+ /** Resolve the back-ref fields for one exported asset; omits fields that are unavailable. */
10
+ export declare function resolveInstalledBackRef(backRef: InstalledBackRef | null, absSourcePath: string): {
11
+ installedVersion?: string;
12
+ installedChecksum?: string;
13
+ };
14
+ //# sourceMappingURL=install-metadata-backref.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-metadata-backref.d.ts","sourceRoot":"","sources":["../../src/core/install-metadata-backref.ts"],"names":[],"mappings":"AAKA,OAAO,EAAoC,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEhG,MAAM,WAAW,gBAAgB;IAChC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAChD,eAAe,EAAE,MAAM,CAAC;CACxB;AAED,+FAA+F;AAC/F,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAajF;AAED,6FAA6F;AAC7F,wBAAgB,uBAAuB,CACtC,OAAO,EAAE,gBAAgB,GAAG,IAAI,EAChC,aAAa,EAAE,MAAM,GACnB;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAE,CAU3D"}
@@ -0,0 +1,39 @@
1
+ // One-way bridge from a migration source to the installed metadata it was
2
+ // exported from. `mewkit migrate --install` stamps portable-registry entries
3
+ // with these back-references; absent or corrupt source metadata yields null so
4
+ // a migration is never failed or altered by the bridge.
5
+ import { relative, join, isAbsolute } from "node:path";
6
+ import { readInstallMetadata, indexByPath } from "./install-metadata.js";
7
+ /** Build a back-reference from the migration source root, or null if no installed metadata. */
8
+ export function buildInstalledBackRef(sourceRoot) {
9
+ const sourceClaudeDir = join(sourceRoot, ".claude");
10
+ try {
11
+ const read = readInstallMetadata(sourceClaudeDir);
12
+ if (read.source === "none" || !read.meta)
13
+ return null;
14
+ return {
15
+ version: read.meta.version || null,
16
+ entriesByPath: indexByPath(read.meta.files),
17
+ sourceClaudeDir,
18
+ };
19
+ }
20
+ catch {
21
+ return null; // corrupt source metadata is not worth failing a migration over
22
+ }
23
+ }
24
+ /** Resolve the back-ref fields for one exported asset; omits fields that are unavailable. */
25
+ export function resolveInstalledBackRef(backRef, absSourcePath) {
26
+ if (!backRef)
27
+ return {};
28
+ const out = {};
29
+ if (backRef.version)
30
+ out.installedVersion = backRef.version;
31
+ const rel = relative(backRef.sourceClaudeDir, absSourcePath);
32
+ if (rel && !rel.startsWith("..") && !isAbsolute(rel)) {
33
+ const entry = backRef.entriesByPath[rel];
34
+ if (entry)
35
+ out.installedChecksum = entry.checksum;
36
+ }
37
+ return out;
38
+ }
39
+ //# sourceMappingURL=install-metadata-backref.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-metadata-backref.js","sourceRoot":"","sources":["../../src/core/install-metadata-backref.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,6EAA6E;AAC7E,+EAA+E;AAC/E,wDAAwD;AACxD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAyB,MAAM,uBAAuB,CAAC;AAQhG,+FAA+F;AAC/F,MAAM,UAAU,qBAAqB,CAAC,UAAkB;IACvD,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACpD,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,mBAAmB,CAAC,eAAe,CAAC,CAAC;QAClD,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACtD,OAAO;YACN,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI;YAClC,aAAa,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YAC3C,eAAe;SACf,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC,CAAC,gEAAgE;IAC9E,CAAC;AACF,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,uBAAuB,CACtC,OAAgC,EAChC,aAAqB;IAErB,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,GAAG,GAA8D,EAAE,CAAC;IAC1E,IAAI,OAAO,CAAC,OAAO;QAAE,GAAG,CAAC,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAC5D,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;IAC7D,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,KAAK;YAAE,GAAG,CAAC,iBAAiB,GAAG,KAAK,CAAC,QAAQ,CAAC;IACnD,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type InstallMetadata } from "./install-metadata.js";
2
+ /** Atomically write `.claude/metadata.json` under a per-project lock. */
3
+ export declare function writeInstallMetadata(claudeDir: string, meta: InstallMetadata): Promise<void>;
4
+ //# sourceMappingURL=install-metadata-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-metadata-writer.d.ts","sourceRoot":"","sources":["../../src/core/install-metadata-writer.ts"],"names":[],"mappings":"AAMA,OAAO,EAA6B,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIxF,yEAAyE;AACzE,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBlG"}
@@ -0,0 +1,31 @@
1
+ // Locked, atomic writer for the canonical installed `.claude/metadata.json`.
2
+ // Serializes concurrent init/upgrade/migrate writers via a per-project lock and
3
+ // publishes via temp-file + rename so a reader never observes a partial file.
4
+ import { rename, unlink, writeFile } from "node:fs/promises";
5
+ import { join } from "node:path";
6
+ import { withFileLock } from "./file-lock.js";
7
+ import { INSTALL_METADATA_FILENAME } from "./install-metadata.js";
8
+ const LOCK_FILENAME = ".metadata.lock";
9
+ /** Atomically write `.claude/metadata.json` under a per-project lock. */
10
+ export async function writeInstallMetadata(claudeDir, meta) {
11
+ const lockPath = join(claudeDir, LOCK_FILENAME);
12
+ const targetPath = join(claudeDir, INSTALL_METADATA_FILENAME);
13
+ const serialized = JSON.stringify(meta, null, 2) + "\n";
14
+ await withFileLock(lockPath, async () => {
15
+ const tempPath = `${targetPath}.tmp-${process.pid}-${Date.now()}`;
16
+ try {
17
+ await writeFile(tempPath, serialized, "utf-8");
18
+ await rename(tempPath, targetPath);
19
+ }
20
+ catch (error) {
21
+ try {
22
+ await unlink(tempPath);
23
+ }
24
+ catch {
25
+ /* best-effort cleanup of the temp file */
26
+ }
27
+ throw error;
28
+ }
29
+ });
30
+ }
31
+ //# sourceMappingURL=install-metadata-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-metadata-writer.js","sourceRoot":"","sources":["../../src/core/install-metadata-writer.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,gFAAgF;AAChF,8EAA8E;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAwB,MAAM,uBAAuB,CAAC;AAExF,MAAM,aAAa,GAAG,gBAAgB,CAAC;AAEvC,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,SAAiB,EAAE,IAAqB;IAClF,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IAExD,MAAM,YAAY,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,QAAQ,GAAG,GAAG,UAAU,QAAQ,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAClE,IAAI,CAAC;YACJ,MAAM,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YAC/C,MAAM,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC;gBACJ,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;YACxB,CAAC;YAAC,MAAM,CAAC;gBACR,0CAA0C;YAC3C,CAAC;YACD,MAAM,KAAK,CAAC;QACb,CAAC;IACF,CAAC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,173 @@
1
+ import { z } from "zod";
2
+ export declare const INSTALL_METADATA_FILENAME = "metadata.json";
3
+ export declare const InstallFileEntrySchema: z.ZodObject<{
4
+ path: z.ZodString;
5
+ owner: z.ZodEnum<["meowkit", "user", "meowkit-modified"]>;
6
+ layer: z.ZodEnum<["core", "skill", "user"]>;
7
+ checksum: z.ZodString;
8
+ baseChecksum: z.ZodString;
9
+ installedVersion: z.ZodOptional<z.ZodString>;
10
+ sourceTimestamp: z.ZodOptional<z.ZodString>;
11
+ installedAt: z.ZodOptional<z.ZodString>;
12
+ }, "strip", z.ZodTypeAny, {
13
+ path: string;
14
+ checksum: string;
15
+ owner: "user" | "meowkit" | "meowkit-modified";
16
+ layer: "core" | "skill" | "user";
17
+ baseChecksum: string;
18
+ installedVersion?: string | undefined;
19
+ sourceTimestamp?: string | undefined;
20
+ installedAt?: string | undefined;
21
+ }, {
22
+ path: string;
23
+ checksum: string;
24
+ owner: "user" | "meowkit" | "meowkit-modified";
25
+ layer: "core" | "skill" | "user";
26
+ baseChecksum: string;
27
+ installedVersion?: string | undefined;
28
+ sourceTimestamp?: string | undefined;
29
+ installedAt?: string | undefined;
30
+ }>;
31
+ export type InstallFileEntry = z.infer<typeof InstallFileEntrySchema>;
32
+ export declare const InstallMetadataSchema: z.ZodObject<{
33
+ schemaVersion: z.ZodLiteral<"1.0">;
34
+ tool: z.ZodDefault<z.ZodString>;
35
+ version: z.ZodString;
36
+ scope: z.ZodOptional<z.ZodString>;
37
+ installedAt: z.ZodString;
38
+ files: z.ZodArray<z.ZodObject<{
39
+ path: z.ZodString;
40
+ owner: z.ZodEnum<["meowkit", "user", "meowkit-modified"]>;
41
+ layer: z.ZodEnum<["core", "skill", "user"]>;
42
+ checksum: z.ZodString;
43
+ baseChecksum: z.ZodString;
44
+ installedVersion: z.ZodOptional<z.ZodString>;
45
+ sourceTimestamp: z.ZodOptional<z.ZodString>;
46
+ installedAt: z.ZodOptional<z.ZodString>;
47
+ }, "strip", z.ZodTypeAny, {
48
+ path: string;
49
+ checksum: string;
50
+ owner: "user" | "meowkit" | "meowkit-modified";
51
+ layer: "core" | "skill" | "user";
52
+ baseChecksum: string;
53
+ installedVersion?: string | undefined;
54
+ sourceTimestamp?: string | undefined;
55
+ installedAt?: string | undefined;
56
+ }, {
57
+ path: string;
58
+ checksum: string;
59
+ owner: "user" | "meowkit" | "meowkit-modified";
60
+ layer: "core" | "skill" | "user";
61
+ baseChecksum: string;
62
+ installedVersion?: string | undefined;
63
+ sourceTimestamp?: string | undefined;
64
+ installedAt?: string | undefined;
65
+ }>, "many">;
66
+ settings: z.ZodOptional<z.ZodObject<{
67
+ merged: z.ZodArray<z.ZodString, "many">;
68
+ }, "strip", z.ZodTypeAny, {
69
+ merged: string[];
70
+ }, {
71
+ merged: string[];
72
+ }>>;
73
+ /** Installed profile name ("full" for a whole-tree install). */
74
+ profile: z.ZodOptional<z.ZodString>;
75
+ /**
76
+ * Resolved pack list for a partial install. Absent/undefined is the "full,
77
+ * auto-adopt new packs on upgrade" sentinel — never a frozen all-packs list.
78
+ */
79
+ packs: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
80
+ }, "strip", z.ZodTypeAny, {
81
+ version: string;
82
+ files: {
83
+ path: string;
84
+ checksum: string;
85
+ owner: "user" | "meowkit" | "meowkit-modified";
86
+ layer: "core" | "skill" | "user";
87
+ baseChecksum: string;
88
+ installedVersion?: string | undefined;
89
+ sourceTimestamp?: string | undefined;
90
+ installedAt?: string | undefined;
91
+ }[];
92
+ installedAt: string;
93
+ schemaVersion: "1.0";
94
+ tool: string;
95
+ scope?: string | undefined;
96
+ settings?: {
97
+ merged: string[];
98
+ } | undefined;
99
+ profile?: string | undefined;
100
+ packs?: string[] | undefined;
101
+ }, {
102
+ version: string;
103
+ files: {
104
+ path: string;
105
+ checksum: string;
106
+ owner: "user" | "meowkit" | "meowkit-modified";
107
+ layer: "core" | "skill" | "user";
108
+ baseChecksum: string;
109
+ installedVersion?: string | undefined;
110
+ sourceTimestamp?: string | undefined;
111
+ installedAt?: string | undefined;
112
+ }[];
113
+ installedAt: string;
114
+ schemaVersion: "1.0";
115
+ tool?: string | undefined;
116
+ scope?: string | undefined;
117
+ settings?: {
118
+ merged: string[];
119
+ } | undefined;
120
+ profile?: string | undefined;
121
+ packs?: string[] | undefined;
122
+ }>;
123
+ export type InstallMetadata = z.infer<typeof InstallMetadataSchema>;
124
+ export type MetadataSource = "new" | "legacy-manifest" | "legacy-metadata" | "none";
125
+ export interface ReadInstallMetadataResult {
126
+ source: MetadataSource;
127
+ meta: InstallMetadata | null;
128
+ }
129
+ /** Thrown when a canonical metadata.json carries `schemaVersion` but fails validation. */
130
+ export declare class CorruptInstallMetadataError extends Error {
131
+ readonly detail: string;
132
+ constructor(detail: string);
133
+ }
134
+ /** Index a file-entry list by its `.claude/`-relative path. */
135
+ export declare function indexByPath(entries: InstallFileEntry[]): Record<string, InstallFileEntry>;
136
+ /**
137
+ * Read installed metadata with explicit source precedence:
138
+ * new (schemaVersion) > legacy checksum manifest > version-only metadata > none.
139
+ * The legacy-manifest branch never trusts `Manifest.version` (hardcoded upstream);
140
+ * it sources the version from a sibling version-only metadata.json when present.
141
+ * Throws CorruptInstallMetadataError when a schemaVersion-bearing file fails Zod.
142
+ */
143
+ export declare function readInstallMetadata(claudeDir: string): ReadInstallMetadataResult;
144
+ /**
145
+ * Read ONLY the legacy `meowkit.manifest.json` as canonical-shaped metadata,
146
+ * or null when absent. Used as a recovery path when the canonical metadata.json
147
+ * is present but corrupt, so user-edit protection still has a prior baseline.
148
+ */
149
+ export declare function readLegacyManifestMetadata(claudeDir: string): InstallMetadata | null;
150
+ export interface BuildInstallMetadataOptions {
151
+ /** Installed kit version (from release-manifest). */
152
+ version: string;
153
+ /** Per-path source commit timestamp (release-manifest `lastModified`). */
154
+ sourceTimestamps?: Record<string, string>;
155
+ /** Prior installed entries, indexed by `.claude/`-relative path. */
156
+ priorEntriesByPath?: Record<string, InstallFileEntry>;
157
+ /** Optional install scope marker (e.g. "local"). */
158
+ scope?: string;
159
+ /** settings.json files merged this install. */
160
+ mergedSettings?: string[];
161
+ /** Installed profile name (recorded verbatim; "full" for whole-tree installs). */
162
+ profile?: string;
163
+ /** Resolved pack list for a partial install; omit for full/legacy (sentinel). */
164
+ packs?: string[];
165
+ }
166
+ /**
167
+ * Scan an installed `.claude/` and build canonical metadata. Ownership for kit
168
+ * (core/skill) files is computed against the prior state: a kit file whose disk
169
+ * hash differs from its prior `baseChecksum` is labeled `meowkit-modified`;
170
+ * `baseChecksum` preserves the as-shipped hash across upgrades.
171
+ */
172
+ export declare function buildInstallMetadata(claudeDir: string, opts: BuildInstallMetadataOptions): InstallMetadata;
173
+ //# sourceMappingURL=install-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-metadata.d.ts","sourceRoot":"","sources":["../../src/core/install-metadata.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,yBAAyB,kBAAkB,CAAC;AAEzD,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;EASjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAQjC,gEAAgE;;IAEhE;;;OAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEF,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,MAAM,CAAC;AACpF,MAAM,WAAW,yBAAyB;IACzC,MAAM,EAAE,cAAc,CAAC;IACvB,IAAI,EAAE,eAAe,GAAG,IAAI,CAAC;CAC7B;AAED,0FAA0F;AAC1F,qBAAa,2BAA4B,SAAQ,KAAK;aACzB,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM;CAI1C;AAED,+DAA+D;AAC/D,wBAAgB,WAAW,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAIzF;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,yBAAyB,CAyChF;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAGpF;AA6BD,MAAM,WAAW,2BAA2B;IAC3C,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,oEAAoE;IACpE,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACtD,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,2BAA2B,GAAG,eAAe,CA6C1G"}
@@ -0,0 +1,191 @@
1
+ // Canonical installed-metadata model for a MeowKit install under `.claude/`.
2
+ // Declares the Zod schema, a compatibility reader that recognizes the new file,
3
+ // the legacy checksum manifest, and the old version-only metadata, and a builder
4
+ // that labels per-file ownership (meowkit / user / meowkit-modified) against the
5
+ // prior installed state. The locked atomic writer lives in install-metadata-writer.ts.
6
+ import { existsSync, readFileSync } from "node:fs";
7
+ import { join } from "node:path";
8
+ import { z } from "zod";
9
+ import { collectFiles, hashFile, classifyLayer, readManifest } from "./compute-checksums.js";
10
+ export const INSTALL_METADATA_FILENAME = "metadata.json";
11
+ export const InstallFileEntrySchema = z.object({
12
+ path: z.string(),
13
+ owner: z.enum(["meowkit", "user", "meowkit-modified"]),
14
+ layer: z.enum(["core", "skill", "user"]),
15
+ checksum: z.string(),
16
+ baseChecksum: z.string(),
17
+ installedVersion: z.string().optional(),
18
+ sourceTimestamp: z.string().optional(),
19
+ installedAt: z.string().optional(),
20
+ });
21
+ export const InstallMetadataSchema = z.object({
22
+ schemaVersion: z.literal("1.0"),
23
+ tool: z.string().default("meowkit"),
24
+ version: z.string(),
25
+ scope: z.string().optional(),
26
+ installedAt: z.string(),
27
+ files: z.array(InstallFileEntrySchema),
28
+ settings: z.object({ merged: z.array(z.string()) }).optional(),
29
+ /** Installed profile name ("full" for a whole-tree install). */
30
+ profile: z.string().optional(),
31
+ /**
32
+ * Resolved pack list for a partial install. Absent/undefined is the "full,
33
+ * auto-adopt new packs on upgrade" sentinel — never a frozen all-packs list.
34
+ */
35
+ packs: z.array(z.string()).optional(),
36
+ });
37
+ /** Thrown when a canonical metadata.json carries `schemaVersion` but fails validation. */
38
+ export class CorruptInstallMetadataError extends Error {
39
+ detail;
40
+ constructor(detail) {
41
+ super(`Corrupt .claude/metadata.json: ${detail}`);
42
+ this.detail = detail;
43
+ this.name = "CorruptInstallMetadataError";
44
+ }
45
+ }
46
+ /** Index a file-entry list by its `.claude/`-relative path. */
47
+ export function indexByPath(entries) {
48
+ const out = {};
49
+ for (const e of entries)
50
+ out[e.path] = e;
51
+ return out;
52
+ }
53
+ /**
54
+ * Read installed metadata with explicit source precedence:
55
+ * new (schemaVersion) > legacy checksum manifest > version-only metadata > none.
56
+ * The legacy-manifest branch never trusts `Manifest.version` (hardcoded upstream);
57
+ * it sources the version from a sibling version-only metadata.json when present.
58
+ * Throws CorruptInstallMetadataError when a schemaVersion-bearing file fails Zod.
59
+ */
60
+ export function readInstallMetadata(claudeDir) {
61
+ const metadataPath = join(claudeDir, INSTALL_METADATA_FILENAME);
62
+ let legacyMetadataVersion = null;
63
+ if (existsSync(metadataPath)) {
64
+ let parsed;
65
+ try {
66
+ parsed = JSON.parse(readFileSync(metadataPath, "utf-8"));
67
+ }
68
+ catch {
69
+ // mid-write or garbage; `parsed` stays undefined and we fall through.
70
+ }
71
+ if (typeof parsed === "object" && parsed !== null) {
72
+ const obj = parsed;
73
+ if ("schemaVersion" in obj) {
74
+ const result = InstallMetadataSchema.safeParse(parsed);
75
+ if (!result.success)
76
+ throw new CorruptInstallMetadataError(result.error.message);
77
+ return { source: "new", meta: result.data };
78
+ }
79
+ if (typeof obj.version === "string")
80
+ legacyMetadataVersion = obj.version;
81
+ }
82
+ }
83
+ const legacyManifest = readManifest(claudeDir);
84
+ if (legacyManifest !== null) {
85
+ return { source: "legacy-manifest", meta: mapLegacyManifest(legacyManifest, legacyMetadataVersion) };
86
+ }
87
+ if (legacyMetadataVersion !== null) {
88
+ return {
89
+ source: "legacy-metadata",
90
+ meta: {
91
+ schemaVersion: "1.0",
92
+ tool: "meowkit",
93
+ version: legacyMetadataVersion,
94
+ installedAt: "",
95
+ files: [],
96
+ },
97
+ };
98
+ }
99
+ return { source: "none", meta: null };
100
+ }
101
+ /**
102
+ * Read ONLY the legacy `meowkit.manifest.json` as canonical-shaped metadata,
103
+ * or null when absent. Used as a recovery path when the canonical metadata.json
104
+ * is present but corrupt, so user-edit protection still has a prior baseline.
105
+ */
106
+ export function readLegacyManifestMetadata(claudeDir) {
107
+ const manifest = readManifest(claudeDir);
108
+ return manifest === null ? null : mapLegacyManifest(manifest, null);
109
+ }
110
+ /**
111
+ * Project a legacy `meowkit.manifest.json` onto the canonical shape. The legacy
112
+ * `sha256` maps to BOTH `checksum` and `baseChecksum` so the user-edit comparison
113
+ * stays equivalent. Version comes from a sibling version-only metadata.json or "".
114
+ */
115
+ function mapLegacyManifest(manifest, legacyVersion) {
116
+ const files = [];
117
+ for (const [path, entry] of Object.entries(manifest.checksums)) {
118
+ files.push({
119
+ path,
120
+ owner: entry.owner ?? (entry.layer === "user" ? "user" : "meowkit"),
121
+ layer: entry.layer,
122
+ checksum: entry.sha256,
123
+ baseChecksum: entry.baseChecksum ?? entry.sha256,
124
+ installedVersion: entry.installedVersion,
125
+ installedAt: entry.installedAt,
126
+ });
127
+ }
128
+ return {
129
+ schemaVersion: "1.0",
130
+ tool: "meowkit",
131
+ version: legacyVersion ?? "",
132
+ installedAt: manifest.generatedAt,
133
+ files,
134
+ };
135
+ }
136
+ /**
137
+ * Scan an installed `.claude/` and build canonical metadata. Ownership for kit
138
+ * (core/skill) files is computed against the prior state: a kit file whose disk
139
+ * hash differs from its prior `baseChecksum` is labeled `meowkit-modified`;
140
+ * `baseChecksum` preserves the as-shipped hash across upgrades.
141
+ */
142
+ export function buildInstallMetadata(claudeDir, opts) {
143
+ const installedAt = new Date().toISOString();
144
+ const prior = opts.priorEntriesByPath ?? {};
145
+ const timestamps = opts.sourceTimestamps ?? {};
146
+ const files = [];
147
+ for (const relPath of collectFiles(claudeDir, claudeDir)) {
148
+ const diskHash = hashFile(join(claudeDir, relPath));
149
+ const layer = classifyLayer(relPath);
150
+ const priorEntry = prior[relPath];
151
+ const baseChecksum = priorEntry ? priorEntry.baseChecksum : diskHash;
152
+ let owner;
153
+ if (layer === "user")
154
+ owner = "user";
155
+ else if (!priorEntry || diskHash === priorEntry.baseChecksum)
156
+ owner = "meowkit";
157
+ else
158
+ owner = "meowkit-modified";
159
+ const entry = {
160
+ path: relPath,
161
+ owner,
162
+ layer,
163
+ checksum: diskHash,
164
+ baseChecksum,
165
+ installedVersion: opts.version,
166
+ installedAt,
167
+ };
168
+ const sourceTimestamp = timestamps[relPath];
169
+ if (sourceTimestamp)
170
+ entry.sourceTimestamp = sourceTimestamp;
171
+ files.push(entry);
172
+ }
173
+ files.sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0));
174
+ const meta = {
175
+ schemaVersion: "1.0",
176
+ tool: "meowkit",
177
+ version: opts.version,
178
+ installedAt,
179
+ files,
180
+ };
181
+ if (opts.scope)
182
+ meta.scope = opts.scope;
183
+ if (opts.mergedSettings && opts.mergedSettings.length > 0)
184
+ meta.settings = { merged: opts.mergedSettings };
185
+ if (opts.profile)
186
+ meta.profile = opts.profile;
187
+ if (opts.packs)
188
+ meta.packs = opts.packs;
189
+ return meta;
190
+ }
191
+ //# sourceMappingURL=install-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-metadata.js","sourceRoot":"","sources":["../../src/core/install-metadata.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function isHookScript(p: string): boolean;
2
+ //# sourceMappingURL=is-hook-script.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-hook-script.d.ts","sourceRoot":"","sources":["../../src/core/is-hook-script.ts"],"names":[],"mappings":"AAiBA,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CA2B/C"}