mewkit 1.10.2 → 1.10.3

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 (58) hide show
  1. package/dist/commands/doctor.d.ts.map +1 -1
  2. package/dist/commands/doctor.js +65 -0
  3. package/dist/commands/doctor.js.map +1 -1
  4. package/dist/commands/upgrade.d.ts.map +1 -1
  5. package/dist/commands/upgrade.js +11 -6
  6. package/dist/commands/upgrade.js.map +1 -1
  7. package/dist/core/compute-checksums.d.ts +7 -0
  8. package/dist/core/compute-checksums.d.ts.map +1 -1
  9. package/dist/core/compute-checksums.js +12 -3
  10. package/dist/core/compute-checksums.js.map +1 -1
  11. package/dist/core/file-lock.d.ts +3 -0
  12. package/dist/core/file-lock.d.ts.map +1 -0
  13. package/dist/core/file-lock.js +84 -0
  14. package/dist/core/file-lock.js.map +1 -0
  15. package/dist/core/index.d.ts +4 -0
  16. package/dist/core/index.d.ts.map +1 -1
  17. package/dist/core/index.js +4 -0
  18. package/dist/core/index.js.map +1 -1
  19. package/dist/core/install-metadata-backref.d.ts +14 -0
  20. package/dist/core/install-metadata-backref.d.ts.map +1 -0
  21. package/dist/core/install-metadata-backref.js +39 -0
  22. package/dist/core/install-metadata-backref.js.map +1 -0
  23. package/dist/core/install-metadata-writer.d.ts +4 -0
  24. package/dist/core/install-metadata-writer.d.ts.map +1 -0
  25. package/dist/core/install-metadata-writer.js +31 -0
  26. package/dist/core/install-metadata-writer.js.map +1 -0
  27. package/dist/core/install-metadata.d.ts +158 -0
  28. package/dist/core/install-metadata.d.ts.map +1 -0
  29. package/dist/core/install-metadata.js +180 -0
  30. package/dist/core/install-metadata.js.map +1 -0
  31. package/dist/core/release-metadata.d.ts +80 -0
  32. package/dist/core/release-metadata.d.ts.map +1 -0
  33. package/dist/core/release-metadata.js +70 -0
  34. package/dist/core/release-metadata.js.map +1 -0
  35. package/dist/core/smart-update.d.ts +8 -0
  36. package/dist/core/smart-update.d.ts.map +1 -1
  37. package/dist/core/smart-update.js +170 -47
  38. package/dist/core/smart-update.js.map +1 -1
  39. package/dist/migrate/migrate-orchestrator.d.ts.map +1 -1
  40. package/dist/migrate/migrate-orchestrator.js +6 -2
  41. package/dist/migrate/migrate-orchestrator.js.map +1 -1
  42. package/dist/migrate/portable-installer.d.ts +3 -0
  43. package/dist/migrate/portable-installer.d.ts.map +1 -1
  44. package/dist/migrate/portable-installer.js +3 -0
  45. package/dist/migrate/portable-installer.js.map +1 -1
  46. package/dist/migrate/reconcile/portable-registry-lock.d.ts.map +1 -1
  47. package/dist/migrate/reconcile/portable-registry-lock.js +6 -78
  48. package/dist/migrate/reconcile/portable-registry-lock.js.map +1 -1
  49. package/dist/migrate/reconcile/portable-registry.d.ts +24 -6
  50. package/dist/migrate/reconcile/portable-registry.d.ts.map +1 -1
  51. package/dist/migrate/reconcile/portable-registry.js +7 -1
  52. package/dist/migrate/reconcile/portable-registry.js.map +1 -1
  53. package/dist/migrate/skill-directory-installer.d.ts +2 -0
  54. package/dist/migrate/skill-directory-installer.d.ts.map +1 -1
  55. package/dist/migrate/skill-directory-installer.js +3 -0
  56. package/dist/migrate/skill-directory-installer.js.map +1 -1
  57. package/dist/migrate/types.d.ts +2 -2
  58. package/package.json +1 -1
@@ -0,0 +1,158 @@
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
+ }, "strip", z.ZodTypeAny, {
74
+ version: string;
75
+ files: {
76
+ path: string;
77
+ checksum: string;
78
+ owner: "user" | "meowkit" | "meowkit-modified";
79
+ layer: "core" | "skill" | "user";
80
+ baseChecksum: string;
81
+ installedVersion?: string | undefined;
82
+ sourceTimestamp?: string | undefined;
83
+ installedAt?: string | undefined;
84
+ }[];
85
+ installedAt: string;
86
+ schemaVersion: "1.0";
87
+ tool: string;
88
+ scope?: string | undefined;
89
+ settings?: {
90
+ merged: string[];
91
+ } | undefined;
92
+ }, {
93
+ version: string;
94
+ files: {
95
+ path: string;
96
+ checksum: string;
97
+ owner: "user" | "meowkit" | "meowkit-modified";
98
+ layer: "core" | "skill" | "user";
99
+ baseChecksum: string;
100
+ installedVersion?: string | undefined;
101
+ sourceTimestamp?: string | undefined;
102
+ installedAt?: string | undefined;
103
+ }[];
104
+ installedAt: string;
105
+ schemaVersion: "1.0";
106
+ tool?: string | undefined;
107
+ scope?: string | undefined;
108
+ settings?: {
109
+ merged: string[];
110
+ } | undefined;
111
+ }>;
112
+ export type InstallMetadata = z.infer<typeof InstallMetadataSchema>;
113
+ export type MetadataSource = "new" | "legacy-manifest" | "legacy-metadata" | "none";
114
+ export interface ReadInstallMetadataResult {
115
+ source: MetadataSource;
116
+ meta: InstallMetadata | null;
117
+ }
118
+ /** Thrown when a canonical metadata.json carries `schemaVersion` but fails validation. */
119
+ export declare class CorruptInstallMetadataError extends Error {
120
+ readonly detail: string;
121
+ constructor(detail: string);
122
+ }
123
+ /** Index a file-entry list by its `.claude/`-relative path. */
124
+ export declare function indexByPath(entries: InstallFileEntry[]): Record<string, InstallFileEntry>;
125
+ /**
126
+ * Read installed metadata with explicit source precedence:
127
+ * new (schemaVersion) > legacy checksum manifest > version-only metadata > none.
128
+ * The legacy-manifest branch never trusts `Manifest.version` (hardcoded upstream);
129
+ * it sources the version from a sibling version-only metadata.json when present.
130
+ * Throws CorruptInstallMetadataError when a schemaVersion-bearing file fails Zod.
131
+ */
132
+ export declare function readInstallMetadata(claudeDir: string): ReadInstallMetadataResult;
133
+ /**
134
+ * Read ONLY the legacy `meowkit.manifest.json` as canonical-shaped metadata,
135
+ * or null when absent. Used as a recovery path when the canonical metadata.json
136
+ * is present but corrupt, so user-edit protection still has a prior baseline.
137
+ */
138
+ export declare function readLegacyManifestMetadata(claudeDir: string): InstallMetadata | null;
139
+ export interface BuildInstallMetadataOptions {
140
+ /** Installed kit version (from release-manifest). */
141
+ version: string;
142
+ /** Per-path source commit timestamp (release-manifest `lastModified`). */
143
+ sourceTimestamps?: Record<string, string>;
144
+ /** Prior installed entries, indexed by `.claude/`-relative path. */
145
+ priorEntriesByPath?: Record<string, InstallFileEntry>;
146
+ /** Optional install scope marker (e.g. "local"). */
147
+ scope?: string;
148
+ /** settings.json files merged this install. */
149
+ mergedSettings?: string[];
150
+ }
151
+ /**
152
+ * Scan an installed `.claude/` and build canonical metadata. Ownership for kit
153
+ * (core/skill) files is computed against the prior state: a kit file whose disk
154
+ * hash differs from its prior `baseChecksum` is labeled `meowkit-modified`;
155
+ * `baseChecksum` preserves the as-shipped hash across upgrades.
156
+ */
157
+ export declare function buildInstallMetadata(claudeDir: string, opts: BuildInstallMetadataOptions): InstallMetadata;
158
+ //# 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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQhC,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;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,2BAA2B,GAAG,eAAe,CA2C1G"}
@@ -0,0 +1,180 @@
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
+ });
30
+ /** Thrown when a canonical metadata.json carries `schemaVersion` but fails validation. */
31
+ export class CorruptInstallMetadataError extends Error {
32
+ detail;
33
+ constructor(detail) {
34
+ super(`Corrupt .claude/metadata.json: ${detail}`);
35
+ this.detail = detail;
36
+ this.name = "CorruptInstallMetadataError";
37
+ }
38
+ }
39
+ /** Index a file-entry list by its `.claude/`-relative path. */
40
+ export function indexByPath(entries) {
41
+ const out = {};
42
+ for (const e of entries)
43
+ out[e.path] = e;
44
+ return out;
45
+ }
46
+ /**
47
+ * Read installed metadata with explicit source precedence:
48
+ * new (schemaVersion) > legacy checksum manifest > version-only metadata > none.
49
+ * The legacy-manifest branch never trusts `Manifest.version` (hardcoded upstream);
50
+ * it sources the version from a sibling version-only metadata.json when present.
51
+ * Throws CorruptInstallMetadataError when a schemaVersion-bearing file fails Zod.
52
+ */
53
+ export function readInstallMetadata(claudeDir) {
54
+ const metadataPath = join(claudeDir, INSTALL_METADATA_FILENAME);
55
+ let legacyMetadataVersion = null;
56
+ if (existsSync(metadataPath)) {
57
+ let parsed;
58
+ try {
59
+ parsed = JSON.parse(readFileSync(metadataPath, "utf-8"));
60
+ }
61
+ catch {
62
+ // mid-write or garbage; `parsed` stays undefined and we fall through.
63
+ }
64
+ if (typeof parsed === "object" && parsed !== null) {
65
+ const obj = parsed;
66
+ if ("schemaVersion" in obj) {
67
+ const result = InstallMetadataSchema.safeParse(parsed);
68
+ if (!result.success)
69
+ throw new CorruptInstallMetadataError(result.error.message);
70
+ return { source: "new", meta: result.data };
71
+ }
72
+ if (typeof obj.version === "string")
73
+ legacyMetadataVersion = obj.version;
74
+ }
75
+ }
76
+ const legacyManifest = readManifest(claudeDir);
77
+ if (legacyManifest !== null) {
78
+ return { source: "legacy-manifest", meta: mapLegacyManifest(legacyManifest, legacyMetadataVersion) };
79
+ }
80
+ if (legacyMetadataVersion !== null) {
81
+ return {
82
+ source: "legacy-metadata",
83
+ meta: {
84
+ schemaVersion: "1.0",
85
+ tool: "meowkit",
86
+ version: legacyMetadataVersion,
87
+ installedAt: "",
88
+ files: [],
89
+ },
90
+ };
91
+ }
92
+ return { source: "none", meta: null };
93
+ }
94
+ /**
95
+ * Read ONLY the legacy `meowkit.manifest.json` as canonical-shaped metadata,
96
+ * or null when absent. Used as a recovery path when the canonical metadata.json
97
+ * is present but corrupt, so user-edit protection still has a prior baseline.
98
+ */
99
+ export function readLegacyManifestMetadata(claudeDir) {
100
+ const manifest = readManifest(claudeDir);
101
+ return manifest === null ? null : mapLegacyManifest(manifest, null);
102
+ }
103
+ /**
104
+ * Project a legacy `meowkit.manifest.json` onto the canonical shape. The legacy
105
+ * `sha256` maps to BOTH `checksum` and `baseChecksum` so the user-edit comparison
106
+ * stays equivalent. Version comes from a sibling version-only metadata.json or "".
107
+ */
108
+ function mapLegacyManifest(manifest, legacyVersion) {
109
+ const files = [];
110
+ for (const [path, entry] of Object.entries(manifest.checksums)) {
111
+ files.push({
112
+ path,
113
+ owner: entry.owner ?? (entry.layer === "user" ? "user" : "meowkit"),
114
+ layer: entry.layer,
115
+ checksum: entry.sha256,
116
+ baseChecksum: entry.baseChecksum ?? entry.sha256,
117
+ installedVersion: entry.installedVersion,
118
+ installedAt: entry.installedAt,
119
+ });
120
+ }
121
+ return {
122
+ schemaVersion: "1.0",
123
+ tool: "meowkit",
124
+ version: legacyVersion ?? "",
125
+ installedAt: manifest.generatedAt,
126
+ files,
127
+ };
128
+ }
129
+ /**
130
+ * Scan an installed `.claude/` and build canonical metadata. Ownership for kit
131
+ * (core/skill) files is computed against the prior state: a kit file whose disk
132
+ * hash differs from its prior `baseChecksum` is labeled `meowkit-modified`;
133
+ * `baseChecksum` preserves the as-shipped hash across upgrades.
134
+ */
135
+ export function buildInstallMetadata(claudeDir, opts) {
136
+ const installedAt = new Date().toISOString();
137
+ const prior = opts.priorEntriesByPath ?? {};
138
+ const timestamps = opts.sourceTimestamps ?? {};
139
+ const files = [];
140
+ for (const relPath of collectFiles(claudeDir, claudeDir)) {
141
+ const diskHash = hashFile(join(claudeDir, relPath));
142
+ const layer = classifyLayer(relPath);
143
+ const priorEntry = prior[relPath];
144
+ const baseChecksum = priorEntry ? priorEntry.baseChecksum : diskHash;
145
+ let owner;
146
+ if (layer === "user")
147
+ owner = "user";
148
+ else if (!priorEntry || diskHash === priorEntry.baseChecksum)
149
+ owner = "meowkit";
150
+ else
151
+ owner = "meowkit-modified";
152
+ const entry = {
153
+ path: relPath,
154
+ owner,
155
+ layer,
156
+ checksum: diskHash,
157
+ baseChecksum,
158
+ installedVersion: opts.version,
159
+ installedAt,
160
+ };
161
+ const sourceTimestamp = timestamps[relPath];
162
+ if (sourceTimestamp)
163
+ entry.sourceTimestamp = sourceTimestamp;
164
+ files.push(entry);
165
+ }
166
+ files.sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0));
167
+ const meta = {
168
+ schemaVersion: "1.0",
169
+ tool: "meowkit",
170
+ version: opts.version,
171
+ installedAt,
172
+ files,
173
+ };
174
+ if (opts.scope)
175
+ meta.scope = opts.scope;
176
+ if (opts.mergedSettings && opts.mergedSettings.length > 0)
177
+ meta.settings = { merged: opts.mergedSettings };
178
+ return meta;
179
+ }
180
+ //# 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,80 @@
1
+ import { z } from "zod";
2
+ import type { Manifest } from "./compute-checksums.js";
3
+ export declare const RELEASE_MANIFEST_FILENAME = "release-manifest.json";
4
+ export declare const ReleaseFileEntrySchema: z.ZodObject<{
5
+ path: z.ZodString;
6
+ checksum: z.ZodString;
7
+ size: z.ZodOptional<z.ZodNumber>;
8
+ lastModified: z.ZodOptional<z.ZodString>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ path: string;
11
+ checksum: string;
12
+ size?: number | undefined;
13
+ lastModified?: string | undefined;
14
+ }, {
15
+ path: string;
16
+ checksum: string;
17
+ size?: number | undefined;
18
+ lastModified?: string | undefined;
19
+ }>;
20
+ export type ReleaseFileEntry = z.infer<typeof ReleaseFileEntrySchema>;
21
+ export declare const ReleaseManifestSchema: z.ZodObject<{
22
+ version: z.ZodString;
23
+ generatedAt: z.ZodString;
24
+ files: z.ZodArray<z.ZodObject<{
25
+ path: z.ZodString;
26
+ checksum: z.ZodString;
27
+ size: z.ZodOptional<z.ZodNumber>;
28
+ lastModified: z.ZodOptional<z.ZodString>;
29
+ }, "strip", z.ZodTypeAny, {
30
+ path: string;
31
+ checksum: string;
32
+ size?: number | undefined;
33
+ lastModified?: string | undefined;
34
+ }, {
35
+ path: string;
36
+ checksum: string;
37
+ size?: number | undefined;
38
+ lastModified?: string | undefined;
39
+ }>, "many">;
40
+ deletions: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
41
+ }, "strip", z.ZodTypeAny, {
42
+ version: string;
43
+ generatedAt: string;
44
+ files: {
45
+ path: string;
46
+ checksum: string;
47
+ size?: number | undefined;
48
+ lastModified?: string | undefined;
49
+ }[];
50
+ deletions: string[];
51
+ }, {
52
+ version: string;
53
+ generatedAt: string;
54
+ files: {
55
+ path: string;
56
+ checksum: string;
57
+ size?: number | undefined;
58
+ lastModified?: string | undefined;
59
+ }[];
60
+ deletions?: string[] | undefined;
61
+ }>;
62
+ export type ReleaseManifest = z.infer<typeof ReleaseManifestSchema>;
63
+ /** Thrown when `release-manifest.json` is present but does not match the schema. */
64
+ export declare class CorruptReleaseManifestError extends Error {
65
+ readonly detail: string;
66
+ constructor(detail: string);
67
+ }
68
+ /**
69
+ * Read `release-manifest.json` from an extracted release root.
70
+ * Returns null when the file is absent; throws on a present-but-corrupt manifest.
71
+ */
72
+ export declare function readReleaseMetadata(sourceDir: string): ReleaseManifest | null;
73
+ /** Map each release file path to its source commit timestamp (when recorded). */
74
+ export declare function mapPathToLastModified(release: ReleaseManifest | null): Record<string, string>;
75
+ /**
76
+ * Project a release manifest onto the `Manifest` shape `findOrphans` consumes —
77
+ * only the checksum keys matter for orphan detection.
78
+ */
79
+ export declare function toOrphanManifest(release: ReleaseManifest): Manifest;
80
+ //# sourceMappingURL=release-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-metadata.d.ts","sourceRoot":"","sources":["../../src/core/release-metadata.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEvD,eAAO,MAAM,yBAAyB,0BAA0B,CAAC;AAEjE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;EAKjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,oFAAoF;AACpF,qBAAa,2BAA4B,SAAQ,KAAK;aACzB,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM;CAI1C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAY7E;AAED,iFAAiF;AACjF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAM7F;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,GAAG,QAAQ,CAMnE"}
@@ -0,0 +1,70 @@
1
+ // CLI-side reader for the release-metadata carrier: `release-manifest.json` at
2
+ // the extracted release root. This is the single parser for that file — it
3
+ // supplies the installed kit version, per-file source timestamps, and the
4
+ // optional maintainer-curated `deletions[]` list.
5
+ import { existsSync, readFileSync } from "node:fs";
6
+ import { join } from "node:path";
7
+ import { z } from "zod";
8
+ export const RELEASE_MANIFEST_FILENAME = "release-manifest.json";
9
+ export const ReleaseFileEntrySchema = z.object({
10
+ path: z.string(),
11
+ checksum: z.string(),
12
+ size: z.number().optional(),
13
+ lastModified: z.string().optional(),
14
+ });
15
+ export const ReleaseManifestSchema = z.object({
16
+ version: z.string(),
17
+ generatedAt: z.string(),
18
+ files: z.array(ReleaseFileEntrySchema),
19
+ deletions: z.array(z.string()).default([]),
20
+ });
21
+ /** Thrown when `release-manifest.json` is present but does not match the schema. */
22
+ export class CorruptReleaseManifestError extends Error {
23
+ detail;
24
+ constructor(detail) {
25
+ super(`Corrupt release-manifest.json: ${detail}`);
26
+ this.detail = detail;
27
+ this.name = "CorruptReleaseManifestError";
28
+ }
29
+ }
30
+ /**
31
+ * Read `release-manifest.json` from an extracted release root.
32
+ * Returns null when the file is absent; throws on a present-but-corrupt manifest.
33
+ */
34
+ export function readReleaseMetadata(sourceDir) {
35
+ const manifestPath = join(sourceDir, RELEASE_MANIFEST_FILENAME);
36
+ if (!existsSync(manifestPath))
37
+ return null;
38
+ let parsed;
39
+ try {
40
+ parsed = JSON.parse(readFileSync(manifestPath, "utf-8"));
41
+ }
42
+ catch (err) {
43
+ throw new CorruptReleaseManifestError(err.message);
44
+ }
45
+ const result = ReleaseManifestSchema.safeParse(parsed);
46
+ if (!result.success)
47
+ throw new CorruptReleaseManifestError(result.error.message);
48
+ return result.data;
49
+ }
50
+ /** Map each release file path to its source commit timestamp (when recorded). */
51
+ export function mapPathToLastModified(release) {
52
+ const out = {};
53
+ for (const f of release?.files ?? []) {
54
+ if (f.lastModified)
55
+ out[f.path] = f.lastModified;
56
+ }
57
+ return out;
58
+ }
59
+ /**
60
+ * Project a release manifest onto the `Manifest` shape `findOrphans` consumes —
61
+ * only the checksum keys matter for orphan detection.
62
+ */
63
+ export function toOrphanManifest(release) {
64
+ const checksums = {};
65
+ for (const f of release.files) {
66
+ checksums[f.path] = { sha256: f.checksum, layer: "core" };
67
+ }
68
+ return { version: release.version, generatedAt: release.generatedAt, checksums };
69
+ }
70
+ //# sourceMappingURL=release-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-metadata.js","sourceRoot":"","sources":["../../src/core/release-metadata.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,14 @@ export interface UpdateStats {
6
6
  userModified: string[];
7
7
  orphansDeleted: string[];
8
8
  orphansSkipped: string[];
9
+ /** Paths from release `deletions[]` removed because they were pristine kit-owned files. */
10
+ deletionsDeleted: string[];
11
+ /** Listed deletions left in place (user-modified, not kit-owned, or declined). */
12
+ deletionsSkipped: string[];
13
+ /** Listed deletions that were already absent on disk. */
14
+ deletionsAlreadyGone: string[];
15
+ /** Listed deletions a dry-run would remove. */
16
+ deletionsPreview: string[];
9
17
  }
10
18
  export interface SmartUpdateOptions {
11
19
  /** Default true. Set false to disable orphan deletion (CLI: `--no-cleanup`). */
@@ -1 +1 @@
1
- {"version":3,"file":"smart-update.d.ts","sourceRoot":"","sources":["../../src/core/smart-update.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAO/D,MAAM,WAAW,WAAW;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IAClC,gFAAgF;IAChF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qEAAqE;IACrE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACzD;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAChC,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,EACf,KAAK,UAAQ,EACb,OAAO,GAAE,kBAAuB,GAC9B,OAAO,CAAC,WAAW,CAAC,CAkQtB"}
1
+ {"version":3,"file":"smart-update.d.ts","sourceRoot":"","sources":["../../src/core/smart-update.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAmB/D,MAAM,WAAW,WAAW;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,2FAA2F;IAC3F,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,kFAAkF;IAClF,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,yDAAyD;IACzD,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,+CAA+C;IAC/C,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IAClC,gFAAgF;IAChF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qEAAqE;IACrE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACzD;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAChC,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,EACf,KAAK,UAAQ,EACb,OAAO,GAAE,kBAAuB,GAC9B,OAAO,CAAC,WAAW,CAAC,CA8VtB"}