mewkit 1.10.3 → 1.10.4

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 (193) hide show
  1. package/README.md +49 -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 +170 -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 +12 -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 +64 -3
  29. package/dist/commands/init.js.map +1 -1
  30. package/dist/commands/inventory.d.ts +13 -0
  31. package/dist/commands/inventory.d.ts.map +1 -0
  32. package/dist/commands/inventory.js +85 -0
  33. package/dist/commands/inventory.js.map +1 -0
  34. package/dist/commands/pack-helpers.d.ts +37 -0
  35. package/dist/commands/pack-helpers.d.ts.map +1 -0
  36. package/dist/commands/pack-helpers.js +105 -0
  37. package/dist/commands/pack-helpers.js.map +1 -0
  38. package/dist/commands/pack.d.ts +9 -0
  39. package/dist/commands/pack.d.ts.map +1 -0
  40. package/dist/commands/pack.js +160 -0
  41. package/dist/commands/pack.js.map +1 -0
  42. package/dist/commands/policy.d.ts +8 -0
  43. package/dist/commands/policy.d.ts.map +1 -0
  44. package/dist/commands/policy.js +65 -0
  45. package/dist/commands/policy.js.map +1 -0
  46. package/dist/commands/portability.d.ts +7 -0
  47. package/dist/commands/portability.d.ts.map +1 -0
  48. package/dist/commands/portability.js +50 -0
  49. package/dist/commands/portability.js.map +1 -0
  50. package/dist/commands/providers.d.ts +6 -0
  51. package/dist/commands/providers.d.ts.map +1 -0
  52. package/dist/commands/providers.js +94 -0
  53. package/dist/commands/providers.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 +22 -1
  64. package/dist/commands/upgrade.js.map +1 -1
  65. package/dist/commands/validate.d.ts +29 -0
  66. package/dist/commands/validate.d.ts.map +1 -1
  67. package/dist/commands/validate.js +242 -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/context-budget.d.ts +9 -0
  86. package/dist/core/context-budget.d.ts.map +1 -0
  87. package/dist/core/context-budget.js +46 -0
  88. package/dist/core/context-budget.js.map +1 -0
  89. package/dist/core/event-log.d.ts +44 -0
  90. package/dist/core/event-log.d.ts.map +1 -0
  91. package/dist/core/event-log.js +169 -0
  92. package/dist/core/event-log.js.map +1 -0
  93. package/dist/core/evolution/event-clusters.d.ts +4 -0
  94. package/dist/core/evolution/event-clusters.d.ts.map +1 -0
  95. package/dist/core/evolution/event-clusters.js +82 -0
  96. package/dist/core/evolution/event-clusters.js.map +1 -0
  97. package/dist/core/evolution/recommendation-renderer.d.ts +3 -0
  98. package/dist/core/evolution/recommendation-renderer.d.ts.map +1 -0
  99. package/dist/core/evolution/recommendation-renderer.js +24 -0
  100. package/dist/core/evolution/recommendation-renderer.js.map +1 -0
  101. package/dist/core/evolution/review-failure-clusters.d.ts +10 -0
  102. package/dist/core/evolution/review-failure-clusters.d.ts.map +1 -0
  103. package/dist/core/evolution/review-failure-clusters.js +30 -0
  104. package/dist/core/evolution/review-failure-clusters.js.map +1 -0
  105. package/dist/core/evolution/suggestions.d.ts +24 -0
  106. package/dist/core/evolution/suggestions.d.ts.map +1 -0
  107. package/dist/core/evolution/suggestions.js +11 -0
  108. package/dist/core/evolution/suggestions.js.map +1 -0
  109. package/dist/core/gate-policy.d.ts +20 -0
  110. package/dist/core/gate-policy.d.ts.map +1 -0
  111. package/dist/core/gate-policy.js +64 -0
  112. package/dist/core/gate-policy.js.map +1 -0
  113. package/dist/core/harness-scaffold.d.ts +29 -0
  114. package/dist/core/harness-scaffold.d.ts.map +1 -0
  115. package/dist/core/harness-scaffold.js +53 -0
  116. package/dist/core/harness-scaffold.js.map +1 -0
  117. package/dist/core/hook-runner.d.ts +69 -0
  118. package/dist/core/hook-runner.d.ts.map +1 -0
  119. package/dist/core/hook-runner.js +95 -0
  120. package/dist/core/hook-runner.js.map +1 -0
  121. package/dist/core/index.d.ts +2 -0
  122. package/dist/core/index.d.ts.map +1 -1
  123. package/dist/core/index.js +2 -0
  124. package/dist/core/index.js.map +1 -1
  125. package/dist/core/install-metadata.d.ts +15 -0
  126. package/dist/core/install-metadata.d.ts.map +1 -1
  127. package/dist/core/install-metadata.js +11 -0
  128. package/dist/core/install-metadata.js.map +1 -1
  129. package/dist/core/is-hook-script.d.ts +2 -0
  130. package/dist/core/is-hook-script.d.ts.map +1 -0
  131. package/dist/core/is-hook-script.js +45 -0
  132. package/dist/core/is-hook-script.js.map +1 -0
  133. package/dist/core/pack-manifest.d.ts +48 -0
  134. package/dist/core/pack-manifest.d.ts.map +1 -0
  135. package/dist/core/pack-manifest.js +126 -0
  136. package/dist/core/pack-manifest.js.map +1 -0
  137. package/dist/core/pack-resolver.d.ts +18 -0
  138. package/dist/core/pack-resolver.d.ts.map +1 -0
  139. package/dist/core/pack-resolver.js +144 -0
  140. package/dist/core/pack-resolver.js.map +1 -0
  141. package/dist/core/portability-matrix.d.ts +17 -0
  142. package/dist/core/portability-matrix.d.ts.map +1 -0
  143. package/dist/core/portability-matrix.js +31 -0
  144. package/dist/core/portability-matrix.js.map +1 -0
  145. package/dist/core/simulation-runner.d.ts +93 -0
  146. package/dist/core/simulation-runner.d.ts.map +1 -0
  147. package/dist/core/simulation-runner.js +161 -0
  148. package/dist/core/simulation-runner.js.map +1 -0
  149. package/dist/core/smart-update.d.ts +24 -0
  150. package/dist/core/smart-update.d.ts.map +1 -1
  151. package/dist/core/smart-update.js +69 -0
  152. package/dist/core/smart-update.js.map +1 -1
  153. package/dist/core/usage/usage-analyzer.d.ts +18 -0
  154. package/dist/core/usage/usage-analyzer.d.ts.map +1 -0
  155. package/dist/core/usage/usage-analyzer.js +41 -0
  156. package/dist/core/usage/usage-analyzer.js.map +1 -0
  157. package/dist/core/validate-install.d.ts.map +1 -1
  158. package/dist/core/validate-install.js +3 -1
  159. package/dist/core/validate-install.js.map +1 -1
  160. package/dist/index.js +91 -4
  161. package/dist/index.js.map +1 -1
  162. package/dist/memory/archive.d.ts +9 -0
  163. package/dist/memory/archive.d.ts.map +1 -0
  164. package/dist/memory/archive.js +42 -0
  165. package/dist/memory/archive.js.map +1 -0
  166. package/dist/memory/compact.d.ts +9 -0
  167. package/dist/memory/compact.d.ts.map +1 -0
  168. package/dist/memory/compact.js +33 -0
  169. package/dist/memory/compact.js.map +1 -0
  170. package/dist/memory/conflicts.d.ts +8 -0
  171. package/dist/memory/conflicts.d.ts.map +1 -0
  172. package/dist/memory/conflicts.js +28 -0
  173. package/dist/memory/conflicts.js.map +1 -0
  174. package/dist/memory/promote.d.ts +8 -0
  175. package/dist/memory/promote.d.ts.map +1 -0
  176. package/dist/memory/promote.js +10 -0
  177. package/dist/memory/promote.js.map +1 -0
  178. package/dist/memory/store-utils.d.ts +14 -0
  179. package/dist/memory/store-utils.d.ts.map +1 -0
  180. package/dist/memory/store-utils.js +44 -0
  181. package/dist/memory/store-utils.js.map +1 -0
  182. package/dist/migrate/converters/md-to-codex-rules.d.ts.map +1 -1
  183. package/dist/migrate/converters/md-to-codex-rules.js +30 -0
  184. package/dist/migrate/converters/md-to-codex-rules.js.map +1 -1
  185. package/dist/migrate/portability-policy.d.ts.map +1 -1
  186. package/dist/migrate/portability-policy.js +44 -23
  187. package/dist/migrate/portability-policy.js.map +1 -1
  188. package/dist/migrate/provider-support-summary.d.ts +49 -0
  189. package/dist/migrate/provider-support-summary.d.ts.map +1 -0
  190. package/dist/migrate/provider-support-summary.js +98 -0
  191. package/dist/migrate/provider-support-summary.js.map +1 -0
  192. package/dist/migrate/types.d.ts +2 -2
  193. package/package.json +1 -1
@@ -0,0 +1,37 @@
1
+ import { CorruptInstallMetadataError, type InstallFileEntry, type InstallMetadata, type PackManifest, type ReleaseInfo } from "../core/index.js";
2
+ export interface InstalledState {
3
+ meta: InstallMetadata | null;
4
+ /** Installed pack names (incl. base). `undefined` packs ⇒ full ⇒ every pack. */
5
+ installedPacks: string[];
6
+ /** Whether this is a full/legacy install (packs sentinel undefined). */
7
+ isFull: boolean;
8
+ }
9
+ /** Read installed packs; a corrupt metadata.json surfaces as a thrown error to the caller. */
10
+ export declare function readInstalledState(claudeDir: string, manifest: PackManifest): InstalledState;
11
+ /** Extract every `.claude/`-relative path referenced inside settings.json command strings. */
12
+ export declare function settingsReferencedPaths(claudeDir: string): Set<string>;
13
+ /** Pick the release matching the installed version, falling back to latest stable. */
14
+ export declare function pickInstallRelease(version: string | undefined): Promise<ReleaseInfo | null>;
15
+ /**
16
+ * Rebuild canonical metadata by scanning the current `.claude/` and recording the
17
+ * next pack list. Full rebuild (not a surgical `files` patch) so stale entries
18
+ * can't corrupt a future upgrade hash-compare. `priorEntriesByPath` preserves the
19
+ * as-shipped `baseChecksum` for surviving files.
20
+ */
21
+ export declare function rebuildMetadata(claudeDir: string, prior: InstallMetadata | null, nextPacks: string[] | undefined): Promise<void>;
22
+ export interface RemovalPlan {
23
+ /** Pristine, pack-exclusive, kit-owned paths safe to delete. */
24
+ deletable: string[];
25
+ /** Paths kept because shared/base/settings-referenced or user-modified. */
26
+ preserved: string[];
27
+ }
28
+ /**
29
+ * Decide which files a `pack remove` may delete. A file is deletable only when it
30
+ * is in a target pack's members AND NOT in base, AND NOT in any surviving installed
31
+ * pack, AND NOT referenced by settings.json, AND it is kit-owned + pristine on disk.
32
+ * Membership is resolved from the on-disk inventory, so dual-homed artifacts and
33
+ * base-covered hooks survive automatically.
34
+ */
35
+ export declare function computeRemovablePaths(claudeDir: string, manifest: PackManifest, installedNonBase: string[], requested: string[], metaFiles: InstallFileEntry[]): RemovalPlan;
36
+ export { CorruptInstallMetadataError };
37
+ //# sourceMappingURL=pack-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack-helpers.d.ts","sourceRoot":"","sources":["../../src/commands/pack-helpers.ts"],"names":[],"mappings":"AAKA,OAAO,EAIN,2BAA2B,EAM3B,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,eAAe,GAAG,IAAI,CAAC;IAC7B,gFAAgF;IAChF,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,wEAAwE;IACxE,MAAM,EAAE,OAAO,CAAC;CAChB;AAED,8FAA8F;AAC9F,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,cAAc,CAQ5F;AAED,8FAA8F;AAC9F,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CActE;AAED,sFAAsF;AACtF,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAOjG;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACpC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,eAAe,GAAG,IAAI,EAC7B,SAAS,EAAE,MAAM,EAAE,GAAG,SAAS,GAC7B,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,MAAM,WAAW,WAAW;IAC3B,gEAAgE;IAChE,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,2EAA2E;IAC3E,SAAS,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACpC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,YAAY,EACtB,gBAAgB,EAAE,MAAM,EAAE,EAC1B,SAAS,EAAE,MAAM,EAAE,EACnB,SAAS,EAAE,gBAAgB,EAAE,GAC3B,WAAW,CA8Bb;AAED,OAAO,EAAE,2BAA2B,EAAE,CAAC"}
@@ -0,0 +1,105 @@
1
+ // Shared helpers for the `pack` command: installed-state reads, settings.json
2
+ // hook-reference extraction (so remove never breaks an append-only invocation),
3
+ // release selection, and crash-safe metadata rebuild.
4
+ import { existsSync, readFileSync } from "node:fs";
5
+ import { join } from "node:path";
6
+ import { availablePacks, BASE_PACK, buildInstallMetadata, CorruptInstallMetadataError, fetchReleases, hashFile, indexByPath, readInstallMetadata, resolvePacksDetailed, } from "../core/index.js";
7
+ import { writeInstallMetadata } from "../core/install-metadata-writer.js";
8
+ /** Read installed packs; a corrupt metadata.json surfaces as a thrown error to the caller. */
9
+ export function readInstalledState(claudeDir, manifest) {
10
+ const { meta } = readInstallMetadata(claudeDir);
11
+ const declared = meta?.packs;
12
+ const isFull = !declared;
13
+ const installedPacks = declared
14
+ ? [...new Set([BASE_PACK, ...declared])]
15
+ : [BASE_PACK, ...availablePacks(manifest)];
16
+ return { meta, installedPacks, isFull };
17
+ }
18
+ /** Extract every `.claude/`-relative path referenced inside settings.json command strings. */
19
+ export function settingsReferencedPaths(claudeDir) {
20
+ const out = new Set();
21
+ const sp = join(claudeDir, "settings.json");
22
+ if (!existsSync(sp))
23
+ return out;
24
+ let txt;
25
+ try {
26
+ txt = readFileSync(sp, "utf-8");
27
+ }
28
+ catch {
29
+ return out;
30
+ }
31
+ const re = /\.claude\/([A-Za-z0-9_./-]+)/g;
32
+ let m;
33
+ while ((m = re.exec(txt)) !== null)
34
+ out.add(m[1]);
35
+ return out;
36
+ }
37
+ /** Pick the release matching the installed version, falling back to latest stable. */
38
+ export async function pickInstallRelease(version) {
39
+ const releases = await fetchReleases();
40
+ if (version) {
41
+ const exact = releases.find((r) => r.version === version);
42
+ if (exact)
43
+ return exact;
44
+ }
45
+ return releases.find((r) => !r.isBeta) ?? releases[0] ?? null;
46
+ }
47
+ /**
48
+ * Rebuild canonical metadata by scanning the current `.claude/` and recording the
49
+ * next pack list. Full rebuild (not a surgical `files` patch) so stale entries
50
+ * can't corrupt a future upgrade hash-compare. `priorEntriesByPath` preserves the
51
+ * as-shipped `baseChecksum` for surviving files.
52
+ */
53
+ export async function rebuildMetadata(claudeDir, prior, nextPacks) {
54
+ const meta = buildInstallMetadata(claudeDir, {
55
+ version: prior?.version ?? "unknown",
56
+ priorEntriesByPath: indexByPath(prior?.files ?? []),
57
+ scope: prior?.scope ?? "local",
58
+ mergedSettings: prior?.settings?.merged,
59
+ profile: prior?.profile,
60
+ packs: nextPacks,
61
+ });
62
+ await writeInstallMetadata(claudeDir, meta);
63
+ }
64
+ /**
65
+ * Decide which files a `pack remove` may delete. A file is deletable only when it
66
+ * is in a target pack's members AND NOT in base, AND NOT in any surviving installed
67
+ * pack, AND NOT referenced by settings.json, AND it is kit-owned + pristine on disk.
68
+ * Membership is resolved from the on-disk inventory, so dual-homed artifacts and
69
+ * base-covered hooks survive automatically.
70
+ */
71
+ export function computeRemovablePaths(claudeDir, manifest, installedNonBase, requested, metaFiles) {
72
+ const detailed = resolvePacksDetailed(claudeDir, manifest, installedNonBase);
73
+ const removeSet = new Set(requested);
74
+ const surviving = installedNonBase.filter((n) => !removeSet.has(n));
75
+ const keep = new Set(detailed.packMembership.get(BASE_PACK) ?? []);
76
+ for (const sp of surviving)
77
+ for (const pth of detailed.packMembership.get(sp) ?? [])
78
+ keep.add(pth);
79
+ for (const ref of settingsReferencedPaths(claudeDir))
80
+ keep.add(ref);
81
+ const byPath = indexByPath(metaFiles);
82
+ const deletable = [];
83
+ const preserved = [];
84
+ for (const target of requested) {
85
+ for (const pth of detailed.packMembership.get(target) ?? []) {
86
+ if (keep.has(pth)) {
87
+ // shared with base/another installed pack, or settings.json-referenced
88
+ preserved.push(pth);
89
+ continue;
90
+ }
91
+ const dest = join(claudeDir, pth);
92
+ if (!existsSync(dest))
93
+ continue;
94
+ const entry = byPath[pth];
95
+ if (!entry || entry.owner !== "meowkit" || hashFile(dest) !== entry.checksum) {
96
+ preserved.push(pth);
97
+ continue;
98
+ }
99
+ deletable.push(pth);
100
+ }
101
+ }
102
+ return { deletable, preserved };
103
+ }
104
+ export { CorruptInstallMetadataError };
105
+ //# sourceMappingURL=pack-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack-helpers.js","sourceRoot":"","sources":["../../src/commands/pack-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface PackArgs {
2
+ subcommand?: string;
3
+ packs: string[];
4
+ json?: boolean;
5
+ yes?: boolean;
6
+ beta?: boolean;
7
+ }
8
+ export declare function pack(args: PackArgs): Promise<void>;
9
+ //# sourceMappingURL=pack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.d.ts","sourceRoot":"","sources":["../../src/commands/pack.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,QAAQ;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAOD,wBAAsB,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCxD"}
@@ -0,0 +1,160 @@
1
+ // `mewkit pack <list|add|remove>` — post-install domain management built on the
2
+ // P1 resolver + P2 allow-set filter. add = scoped install; remove = safe,
3
+ // exclusivity-checked delete (never touches base, another installed pack, a
4
+ // settings.json-referenced hook, or a user-modified file).
5
+ import { unlinkSync } from "node:fs";
6
+ import { join } from "node:path";
7
+ import pc from "picocolors";
8
+ import * as p from "@clack/prompts";
9
+ import { availablePacks, BASE_PACK, cleanupDownload, downloadRelease, hasPackManifest, loadPackManifest, resolvePacksDetailed, smartUpdate, } from "../core/index.js";
10
+ import { computeRemovablePaths, CorruptInstallMetadataError, pickInstallRelease, readInstalledState, rebuildMetadata, } from "./pack-helpers.js";
11
+ /** Packs that are core safety surface — never removable. */
12
+ const PROTECTED_PACKS = new Set([BASE_PACK, "lifecycle-core"]);
13
+ const BLANK_CONFIG = { description: "", enableCostTracking: true, enableMemory: true, geminiApiKey: null };
14
+ export async function pack(args) {
15
+ const claudeDir = join(process.cwd(), ".claude");
16
+ if (!hasPackManifest(claudeDir)) {
17
+ console.error(pc.red("Pack management requires meowkit with a pack-manifest.json."));
18
+ console.log(pc.dim("Run `mewkit upgrade` first, then retry."));
19
+ process.exit(1);
20
+ }
21
+ const manifest = loadPackManifest(claudeDir);
22
+ let state;
23
+ try {
24
+ state = readInstalledState(claudeDir, manifest);
25
+ }
26
+ catch (err) {
27
+ if (err instanceof CorruptInstallMetadataError) {
28
+ console.error(pc.red(`Installed metadata is corrupt: ${err.detail}`));
29
+ console.log(pc.dim("Run `mewkit upgrade` to repair, then retry."));
30
+ process.exit(1);
31
+ }
32
+ throw err;
33
+ }
34
+ switch (args.subcommand) {
35
+ case "list":
36
+ return packList(claudeDir, manifest, state.installedPacks, args.json === true);
37
+ case "add":
38
+ return packAdd(claudeDir, manifest, state.meta, state.installedPacks, args);
39
+ case "remove":
40
+ return packRemove(claudeDir, manifest, state.meta, state.installedPacks, args);
41
+ default:
42
+ console.error(pc.red(`Unknown pack subcommand: ${args.subcommand ?? "(none)"}`));
43
+ console.log(pc.dim("Usage: mewkit pack <list|add|remove> [packs...]"));
44
+ process.exit(1);
45
+ }
46
+ }
47
+ function packList(claudeDir, manifest, installed, json) {
48
+ const installedSet = new Set(installed);
49
+ const detailed = resolvePacksDetailed(claudeDir, manifest, installed.filter((n) => n !== BASE_PACK));
50
+ const rows = availablePacks(manifest).map((name) => ({
51
+ pack: name,
52
+ installed: installedSet.has(name),
53
+ members: detailed.packMembership.get(name)?.size ?? 0,
54
+ }));
55
+ if (json) {
56
+ console.log(JSON.stringify(rows, null, 2));
57
+ return;
58
+ }
59
+ console.log(pc.bold(pc.cyan("MeowKit packs")));
60
+ console.log(pc.dim("base is always installed (safety rules, hooks, settings, core commands)."));
61
+ console.log();
62
+ for (const r of rows) {
63
+ const mark = r.installed ? pc.green("installed") : pc.dim("available");
64
+ const count = r.installed ? pc.dim(` (${r.members} files)`) : "";
65
+ console.log(` [${mark}] ${r.pack}${count}`);
66
+ }
67
+ }
68
+ async function packAdd(claudeDir, manifest, meta, installed, args) {
69
+ const requested = args.packs.filter((n) => n !== BASE_PACK);
70
+ for (const n of requested) {
71
+ if (!(n in manifest.packs)) {
72
+ console.error(pc.red(`Unknown pack "${n}". Available: ${availablePacks(manifest).join(", ")}`));
73
+ process.exit(1);
74
+ }
75
+ }
76
+ const installedSet = new Set(installed);
77
+ const newPacks = requested.filter((n) => !installedSet.has(n));
78
+ if (newPacks.length === 0) {
79
+ console.log(pc.dim(`Already installed: ${requested.join(", ") || "(nothing requested)"} — nothing to do.`));
80
+ return;
81
+ }
82
+ const release = await pickInstallRelease(meta?.version);
83
+ if (!release) {
84
+ console.error(pc.red("No releases found on GitHub."));
85
+ process.exit(1);
86
+ }
87
+ console.log(pc.dim(`Fetching v${release.version} to add: ${newPacks.join(", ")}...`));
88
+ const sourceDir = await downloadRelease(release);
89
+ try {
90
+ const srcClaude = join(sourceDir, ".claude");
91
+ const srcManifest = loadPackManifest(srcClaude);
92
+ const installedPaths = new Set((meta?.files ?? []).map((f) => f.path));
93
+ const resolved = resolvePacksDetailed(srcClaude, srcManifest, newPacks).paths;
94
+ const allowed = new Set([...resolved].filter((pth) => !installedPaths.has(pth)));
95
+ // Store only user-selected packs — `base` is the always-implicit pseudo-pack,
96
+ // re-prepended by readInstalledState; keeping it out of metadata keeps the
97
+ // stored list semantically "the optional domains installed".
98
+ const nextPacks = [...new Set([...installed, ...newPacks])].filter((n) => n !== BASE_PACK);
99
+ // cleanup:false ⇒ a focused add only WRITES new files; it never deletes.
100
+ const stats = await smartUpdate(BLANK_CONFIG, sourceDir, process.cwd(), false, false, {
101
+ cleanup: false,
102
+ allowedPaths: allowed,
103
+ profile: meta?.profile,
104
+ packs: nextPacks,
105
+ assumeYes: true,
106
+ });
107
+ console.log(pc.green(`Added ${newPacks.join(", ")}: ${stats.added} file(s) written, ${stats.updated} updated.`));
108
+ }
109
+ finally {
110
+ cleanupDownload(sourceDir);
111
+ }
112
+ }
113
+ async function packRemove(claudeDir, manifest, meta, installed, args) {
114
+ const requested = args.packs;
115
+ for (const n of requested) {
116
+ if (PROTECTED_PACKS.has(n)) {
117
+ console.error(pc.red(`Refusing to remove "${n}" — core safety surface is not removable.`));
118
+ process.exit(1);
119
+ }
120
+ if (!(n in manifest.packs)) {
121
+ console.error(pc.red(`Unknown pack "${n}". Available: ${availablePacks(manifest).join(", ")}`));
122
+ process.exit(1);
123
+ }
124
+ }
125
+ const removeSet = new Set(requested);
126
+ // Stored list excludes the implicit `base` (re-prepended by readInstalledState).
127
+ const nextPacks = installed.filter((n) => n !== BASE_PACK && !removeSet.has(n));
128
+ const { deletable, preserved } = computeRemovablePaths(claudeDir, manifest, installed.filter((n) => n !== BASE_PACK), requested, meta?.files ?? []);
129
+ if (deletable.length === 0) {
130
+ console.log(pc.dim(`Nothing to remove for ${requested.join(", ")} (no pristine pack-exclusive files).`));
131
+ if (preserved.length > 0)
132
+ console.log(pc.yellow(`${preserved.length} shared/modified file(s) preserved.`));
133
+ return;
134
+ }
135
+ if (!args.yes) {
136
+ const confirm = await p.confirm({ message: `Delete ${deletable.length} file(s) for ${requested.join(", ")}?`, initialValue: false });
137
+ if (p.isCancel(confirm) || confirm !== true) {
138
+ console.log(pc.dim("Cancelled."));
139
+ return;
140
+ }
141
+ }
142
+ // Crash-safety: record the next pack list BEFORE deleting, then full rebuild.
143
+ await rebuildMetadata(claudeDir, meta, nextPacks);
144
+ const deleted = [];
145
+ for (const pth of deletable) {
146
+ try {
147
+ unlinkSync(join(claudeDir, pth));
148
+ deleted.push(pth);
149
+ }
150
+ catch (err) {
151
+ console.log(pc.yellow(`Failed to delete ${pth}: ${err.message}`));
152
+ }
153
+ }
154
+ await rebuildMetadata(claudeDir, meta, nextPacks);
155
+ console.log(pc.green(`Removed ${requested.join(", ")}: ${deleted.length} file(s) deleted.`));
156
+ if (preserved.length > 0) {
157
+ console.log(pc.yellow(`${preserved.length} shared/base/modified file(s) preserved.`));
158
+ }
159
+ }
160
+ //# sourceMappingURL=pack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.js","sourceRoot":"","sources":["../../src/commands/pack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface PolicyArgs {
2
+ subcommand?: string;
3
+ profile?: string;
4
+ json?: boolean;
5
+ yes?: boolean;
6
+ }
7
+ export declare function policy(args?: PolicyArgs): Promise<void>;
8
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/commands/policy.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;CACd;AAeD,wBAAsB,MAAM,CAAC,IAAI,GAAE,UAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA4CjE"}
@@ -0,0 +1,65 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import pc from "picocolors";
4
+ import * as p from "@clack/prompts";
5
+ import { parsePolicyProfile, readGatePolicy, writeGatePolicy } from "../core/gate-policy.js";
6
+ function findClaudeDir() {
7
+ const candidate = path.join(process.cwd(), ".claude");
8
+ return fs.existsSync(candidate) && fs.statSync(candidate).isDirectory() ? candidate : null;
9
+ }
10
+ async function confirmWeakening(current, next, yes) {
11
+ if (yes || current === next)
12
+ return true;
13
+ const rank = { lightweight: 1, balanced: 2, strict: 3 };
14
+ if (rank[next] >= rank[current])
15
+ return true;
16
+ const ok = await p.confirm({ message: `Switch policy from ${current} to weaker ${next}?`, initialValue: false });
17
+ return !p.isCancel(ok) && ok === true;
18
+ }
19
+ export async function policy(args = {}) {
20
+ const claudeDir = findClaudeDir();
21
+ if (!claudeDir) {
22
+ console.error(pc.red("Could not find .claude/ directory in the current directory."));
23
+ process.exit(1);
24
+ }
25
+ const sub = args.subcommand ?? "explain";
26
+ const current = readGatePolicy(claudeDir);
27
+ if (sub === "explain") {
28
+ if (args.json) {
29
+ console.log(JSON.stringify(current, null, 2));
30
+ return;
31
+ }
32
+ console.log(pc.bold(pc.cyan("MeowKit gate policy")));
33
+ console.log(`${pc.dim("Profile:")} ${current.policy.profile}`);
34
+ console.log(`${pc.dim("Source:")} ${current.source}`);
35
+ if (current.error)
36
+ console.log(`${pc.yellow("Warning:")} ${current.error}`);
37
+ console.log(` plan gate: ${current.policy.planGate}`);
38
+ console.log(` approved plan required: ${String(current.policy.requireApprovedPlan)}`);
39
+ console.log(` contract gate: ${current.policy.contractGate}`);
40
+ console.log(` review gate: ${current.policy.reviewGate}`);
41
+ console.log(` build verify: ${current.policy.buildVerify}`);
42
+ console.log(` human approval: ${current.policy.humanApproval}`);
43
+ console.log(pc.dim("Privacy and prompt-injection blocks are never disabled by policy."));
44
+ return;
45
+ }
46
+ if (sub === "set") {
47
+ const next = parsePolicyProfile(args.profile);
48
+ if (!next) {
49
+ console.error(pc.red(`Unknown policy profile: ${args.profile ?? "(missing)"}`));
50
+ console.log(pc.dim("Usage: mewkit policy set <strict|balanced|lightweight>"));
51
+ process.exit(1);
52
+ }
53
+ if (!(await confirmWeakening(current.policy.profile, next, args.yes))) {
54
+ console.log(pc.dim("Cancelled."));
55
+ return;
56
+ }
57
+ writeGatePolicy(claudeDir, next);
58
+ console.log(pc.green(`Policy set to ${next}.`));
59
+ return;
60
+ }
61
+ console.error(pc.red(`Unknown policy subcommand: ${sub}`));
62
+ console.log(pc.dim("Usage: mewkit policy <explain|set> [profile]"));
63
+ process.exit(1);
64
+ }
65
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/commands/policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface PortabilityArgs {
2
+ subcommand?: string;
3
+ provider?: string;
4
+ json?: boolean;
5
+ }
6
+ export declare function portability(args?: PortabilityArgs): void;
7
+ //# sourceMappingURL=portability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portability.d.ts","sourceRoot":"","sources":["../../src/commands/portability.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAMD,wBAAgB,WAAW,CAAC,IAAI,GAAE,eAAoB,GAAG,IAAI,CAyC5D"}
@@ -0,0 +1,50 @@
1
+ import pc from "picocolors";
2
+ import { buildPortabilityMatrix, coverage, explainProvider } from "../core/portability-matrix.js";
3
+ import { ProviderType } from "../migrate/types.js";
4
+ function pad(s, n) {
5
+ return s.length >= n ? s : s + " ".repeat(n - s.length);
6
+ }
7
+ export function portability(args = {}) {
8
+ const sub = args.subcommand ?? "matrix";
9
+ if (sub === "matrix") {
10
+ const rows = buildPortabilityMatrix();
11
+ if (args.json) {
12
+ console.log(JSON.stringify(rows, null, 2));
13
+ return;
14
+ }
15
+ console.log(pc.bold(pc.cyan("Provider capability matrix")));
16
+ console.log(` ${pc.bold(pad("PROVIDER", 16))} ${pc.bold(pad("SURFACE", 8))} ${pc.bold(pad("STATUS", 12))} CONTRACT`);
17
+ for (const r of rows) {
18
+ console.log(` ${pad(r.provider, 16)} ${pad(r.surface, 8)} ${pad(r.displayStatus, 12)} ${r.surfaceStatus}`);
19
+ }
20
+ return;
21
+ }
22
+ if (sub === "coverage") {
23
+ const result = coverage();
24
+ console.log(args.json ? JSON.stringify(result, null, 2) : `${result.documented}/${result.surfaces} documented surfaces, ${result.warn} warn, ${result.fail} fail`);
25
+ return;
26
+ }
27
+ if (sub === "explain") {
28
+ const parsed = ProviderType.safeParse(args.provider);
29
+ if (!parsed.success) {
30
+ console.error(pc.red(`Unknown provider: ${args.provider ?? "(missing)"}`));
31
+ process.exit(1);
32
+ }
33
+ const rows = explainProvider(parsed.data);
34
+ if (args.json) {
35
+ console.log(JSON.stringify(rows, null, 2));
36
+ return;
37
+ }
38
+ console.log(pc.bold(pc.cyan(`Provider capability: ${parsed.data}`)));
39
+ for (const r of rows) {
40
+ console.log(` ${pc.bold(r.surface)}: ${r.displayStatus} (${r.message})`);
41
+ if (r.docs.length > 0)
42
+ console.log(` ${pc.dim(r.docs.join(", "))}`);
43
+ }
44
+ return;
45
+ }
46
+ console.error(pc.red(`Unknown portability subcommand: ${sub}`));
47
+ console.log(pc.dim("Usage: mewkit portability <matrix|coverage|explain> [provider] [--json]"));
48
+ process.exit(1);
49
+ }
50
+ //# sourceMappingURL=portability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portability.js","sourceRoot":"","sources":["../../src/commands/portability.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface ProvidersCliArgs {
2
+ provider?: string;
3
+ json?: boolean;
4
+ }
5
+ export declare function providersCommand(args?: ProvidersCliArgs): Promise<void>;
6
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/commands/providers.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAYD,wBAAsB,gBAAgB,CAAC,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBjF"}
@@ -0,0 +1,94 @@
1
+ import pc from "picocolors";
2
+ import { collectProviderSupportMatrix, findProviderSupportInfo, } from "../migrate/provider-support-summary.js";
3
+ const ROLE_LABELS = {
4
+ "full-harness": "full harness",
5
+ "hard-gate-candidate": "hard-gate candidate",
6
+ procedure: "procedure",
7
+ "policy-advisory": "policy/advisory",
8
+ "config-only": "config-only",
9
+ disabled: "disabled",
10
+ deprecated: "deprecated",
11
+ };
12
+ export async function providersCommand(args = {}) {
13
+ const matrix = collectProviderSupportMatrix();
14
+ if (args.json === true) {
15
+ const payload = args.provider ? findProviderSupportInfo(args.provider, matrix) : matrix;
16
+ if (payload === null) {
17
+ console.error(pc.red(`Unknown provider: ${args.provider}`));
18
+ process.exit(2);
19
+ }
20
+ console.log(JSON.stringify(payload, null, 2));
21
+ return;
22
+ }
23
+ if (args.provider) {
24
+ const provider = findProviderSupportInfo(args.provider, matrix);
25
+ if (provider === null) {
26
+ console.error(pc.red(`Unknown provider: ${args.provider}`));
27
+ printProviderNames(matrix);
28
+ process.exit(2);
29
+ }
30
+ printProviderDetail(provider);
31
+ return;
32
+ }
33
+ printProviderMatrix(matrix);
34
+ }
35
+ function printProviderMatrix(matrix) {
36
+ const { counts } = matrix;
37
+ console.log(pc.bold(pc.cyan("MeowKit provider support")));
38
+ console.log(pc.dim(`${counts.total} known providers — ${counts.verified} verified, ${counts.experimental} experimental, ${counts.deprecated} deprecated; ${counts.enabledSurfaces} enabled documented surfaces`));
39
+ console.log();
40
+ console.log(` ${pc.bold(`${pad("PROVIDER", 16)} ${pad("LEVEL", 12)} ${pad("ROLE", 20)} SURFACES`)}`);
41
+ for (const provider of matrix.providers) {
42
+ console.log(` ${pad(provider.id, 16)} ${pad(formatLevel(provider.supportLevel), 12)} ${pad(ROLE_LABELS[provider.role], 20)} ${formatSurfaceList(provider.effectiveSurfaces)}`);
43
+ }
44
+ console.log();
45
+ console.log(pc.dim("Run `mewkit providers <provider>` for paths, disabled surfaces, docs, and enforcement level."));
46
+ }
47
+ function printProviderDetail(provider) {
48
+ console.log(pc.bold(pc.cyan(`${provider.displayName} (${provider.id})`)));
49
+ console.log(` ${pc.dim("Support level:")} ${formatLevel(provider.supportLevel)}`);
50
+ if (provider.supportReason !== null && provider.supportReason.length > 0) {
51
+ console.log(` ${pc.dim("Reason:")} ${provider.supportReason}`);
52
+ }
53
+ console.log(` ${pc.dim("Role:")} ${ROLE_LABELS[provider.role]}`);
54
+ console.log(` ${pc.dim("Subagents:")} ${provider.subagents}`);
55
+ console.log(` ${pc.dim("Enabled surfaces:")} ${formatSurfaceList(provider.effectiveSurfaces)}`);
56
+ console.log(` ${pc.dim("Disabled surfaces:")} ${formatSurfaceList(provider.disabledSurfaces)}`);
57
+ console.log(` ${pc.dim("Enforcement:")} Gate 1 ${provider.enforcement.gate1}, Gate 2 ${provider.enforcement.gate2}, secret protection ${provider.enforcement.secretProtection}`);
58
+ console.log();
59
+ console.log(pc.bold("Surfaces"));
60
+ for (const surface of provider.surfaces) {
61
+ const status = surface.enabled ? pc.green("enabled") : pc.dim("disabled");
62
+ const path = surface.enabled ? ` → ${surface.projectPath ?? "(global only)"}` : "";
63
+ console.log(` ${pad(surface.label, 10)} ${pad(surface.status, 12)} ${status}${path}`);
64
+ if (surface.enabled) {
65
+ console.log(` ${" ".repeat(24)}${pc.dim(`${surface.format ?? "unknown"} / ${surface.writeStrategy ?? "unknown"}`)}`);
66
+ }
67
+ if (surface.note !== undefined && surface.note.length > 0) {
68
+ console.log(` ${" ".repeat(24)}${pc.dim(surface.note)}`);
69
+ }
70
+ }
71
+ if (provider.docs.length > 0) {
72
+ console.log();
73
+ console.log(pc.bold("Docs"));
74
+ for (const doc of provider.docs)
75
+ console.log(` ${doc}`);
76
+ }
77
+ }
78
+ function printProviderNames(matrix) {
79
+ console.log(pc.dim(`Known providers: ${matrix.providers.map((provider) => provider.id).join(", ")}`));
80
+ }
81
+ function formatLevel(level) {
82
+ if (level === "verified")
83
+ return pc.green(level);
84
+ if (level === "experimental")
85
+ return pc.yellow(level);
86
+ return pc.red(level);
87
+ }
88
+ function formatSurfaceList(surfaces) {
89
+ return surfaces.length > 0 ? surfaces.join(", ") : pc.dim("none");
90
+ }
91
+ function pad(value, width) {
92
+ return value.length >= width ? value : value + " ".repeat(width - value.length);
93
+ }
94
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/commands/providers.ts"],"names":[],"mappings":"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"}