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.
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +65 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/upgrade.d.ts.map +1 -1
- package/dist/commands/upgrade.js +11 -6
- package/dist/commands/upgrade.js.map +1 -1
- package/dist/core/compute-checksums.d.ts +7 -0
- package/dist/core/compute-checksums.d.ts.map +1 -1
- package/dist/core/compute-checksums.js +12 -3
- package/dist/core/compute-checksums.js.map +1 -1
- package/dist/core/file-lock.d.ts +3 -0
- package/dist/core/file-lock.d.ts.map +1 -0
- package/dist/core/file-lock.js +84 -0
- package/dist/core/file-lock.js.map +1 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +4 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/install-metadata-backref.d.ts +14 -0
- package/dist/core/install-metadata-backref.d.ts.map +1 -0
- package/dist/core/install-metadata-backref.js +39 -0
- package/dist/core/install-metadata-backref.js.map +1 -0
- package/dist/core/install-metadata-writer.d.ts +4 -0
- package/dist/core/install-metadata-writer.d.ts.map +1 -0
- package/dist/core/install-metadata-writer.js +31 -0
- package/dist/core/install-metadata-writer.js.map +1 -0
- package/dist/core/install-metadata.d.ts +158 -0
- package/dist/core/install-metadata.d.ts.map +1 -0
- package/dist/core/install-metadata.js +180 -0
- package/dist/core/install-metadata.js.map +1 -0
- package/dist/core/release-metadata.d.ts +80 -0
- package/dist/core/release-metadata.d.ts.map +1 -0
- package/dist/core/release-metadata.js +70 -0
- package/dist/core/release-metadata.js.map +1 -0
- package/dist/core/smart-update.d.ts +8 -0
- package/dist/core/smart-update.d.ts.map +1 -1
- package/dist/core/smart-update.js +170 -47
- package/dist/core/smart-update.js.map +1 -1
- package/dist/migrate/migrate-orchestrator.d.ts.map +1 -1
- package/dist/migrate/migrate-orchestrator.js +6 -2
- package/dist/migrate/migrate-orchestrator.js.map +1 -1
- package/dist/migrate/portable-installer.d.ts +3 -0
- package/dist/migrate/portable-installer.d.ts.map +1 -1
- package/dist/migrate/portable-installer.js +3 -0
- package/dist/migrate/portable-installer.js.map +1 -1
- package/dist/migrate/reconcile/portable-registry-lock.d.ts.map +1 -1
- package/dist/migrate/reconcile/portable-registry-lock.js +6 -78
- package/dist/migrate/reconcile/portable-registry-lock.js.map +1 -1
- package/dist/migrate/reconcile/portable-registry.d.ts +24 -6
- package/dist/migrate/reconcile/portable-registry.d.ts.map +1 -1
- package/dist/migrate/reconcile/portable-registry.js +7 -1
- package/dist/migrate/reconcile/portable-registry.js.map +1 -1
- package/dist/migrate/skill-directory-installer.d.ts +2 -0
- package/dist/migrate/skill-directory-installer.d.ts.map +1 -1
- package/dist/migrate/skill-directory-installer.js +3 -0
- package/dist/migrate/skill-directory-installer.js.map +1 -1
- package/dist/migrate/types.d.ts +2 -2
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AA0DA,wBAAsB,MAAM,CAAC,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6F7G"}
|
package/dist/commands/doctor.js
CHANGED
|
@@ -4,6 +4,8 @@ import pc from "picocolors";
|
|
|
4
4
|
import { checkClaudeDir, checkConfig, checkGit, checkHooks, checkMcp, checkMemory, checkNodeVersion, checkPipPackages, checkPython, checkScripts, checkSystemDeps, checkVenv, } from "./doctor-checks.js";
|
|
5
5
|
import { checkMemoryHealth } from "./doctor-memory-checks.js";
|
|
6
6
|
import { collectProviderContractDiagnostics, summarizeProviderContractDiagnostics, } from "../migrate/provider-contract-diagnostics.js";
|
|
7
|
+
import { readInstallMetadata, CorruptInstallMetadataError } from "../core/install-metadata.js";
|
|
8
|
+
import { readPortableRegistry } from "../migrate/reconcile/portable-registry.js";
|
|
7
9
|
function statusIcon(status) {
|
|
8
10
|
switch (status) {
|
|
9
11
|
case "pass":
|
|
@@ -74,6 +76,7 @@ export async function doctor(args) {
|
|
|
74
76
|
});
|
|
75
77
|
}
|
|
76
78
|
}
|
|
79
|
+
results.push(...(await checkMetadataHealth(root)));
|
|
77
80
|
if (args?.state) {
|
|
78
81
|
results.push(...checkStateTaxonomy(root));
|
|
79
82
|
results.push(...checkMemoryHealth(root));
|
|
@@ -114,6 +117,68 @@ export async function doctor(args) {
|
|
|
114
117
|
if (fail > 0)
|
|
115
118
|
process.exit(1);
|
|
116
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* Installed-metadata + portable-registry health. Read-only: surfaces the metadata
|
|
122
|
+
* source, schema, installed version, and user-modified count, and reports a corrupt
|
|
123
|
+
* canonical metadata.json as a clear FAIL rather than silently treating it as absent.
|
|
124
|
+
* "Pending delete" needs a release manifest to compare against; doctor has none on
|
|
125
|
+
* disk, so it is reported as n/a rather than fabricated.
|
|
126
|
+
*/
|
|
127
|
+
function checkInstalledMetadata(root) {
|
|
128
|
+
if (!root) {
|
|
129
|
+
return { status: "warn", name: "Installed metadata", detail: "Project root not found; skipped metadata health check." };
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
const { source, meta } = readInstallMetadata(path.join(root, ".claude"));
|
|
133
|
+
if (source === "none" || !meta) {
|
|
134
|
+
return {
|
|
135
|
+
status: "warn",
|
|
136
|
+
name: "Installed metadata",
|
|
137
|
+
detail: "No installed metadata found. Run `mewkit upgrade` to write canonical metadata.",
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
const userModified = meta.files.filter((f) => f.owner === "meowkit-modified").length;
|
|
141
|
+
const schema = source === "new" ? meta.schemaVersion : "n/a (legacy)";
|
|
142
|
+
return {
|
|
143
|
+
status: source === "new" ? "pass" : "warn",
|
|
144
|
+
name: "Installed metadata",
|
|
145
|
+
detail: `source=${source}, schema=${schema}, version=${meta.version || "unknown"}, ` +
|
|
146
|
+
`user-modified=${userModified}, pending-delete=n/a (run upgrade)`,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
if (err instanceof CorruptInstallMetadataError) {
|
|
151
|
+
return {
|
|
152
|
+
status: "fail",
|
|
153
|
+
name: "Installed metadata",
|
|
154
|
+
detail: `Canonical metadata.json is corrupt: ${err.detail}`,
|
|
155
|
+
fix: "Re-run `mewkit upgrade` to regenerate .claude/metadata.json.",
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
throw err;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
async function checkMetadataHealth(root) {
|
|
162
|
+
const results = [checkInstalledMetadata(root)];
|
|
163
|
+
// The portable registry is global (~/.mewkit/), not per-project, so it is
|
|
164
|
+
// checked regardless of whether a project root was found.
|
|
165
|
+
try {
|
|
166
|
+
const registry = await readPortableRegistry();
|
|
167
|
+
results.push({
|
|
168
|
+
status: "pass",
|
|
169
|
+
name: "Portable registry",
|
|
170
|
+
detail: `schema ${registry.version}, ${registry.installations.length} installation(s).`,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
catch (err) {
|
|
174
|
+
results.push({
|
|
175
|
+
status: "warn",
|
|
176
|
+
name: "Portable registry",
|
|
177
|
+
detail: `Could not read portable registry: ${err.message}`,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
return results;
|
|
181
|
+
}
|
|
117
182
|
function checkStateTaxonomy(root) {
|
|
118
183
|
if (!root) {
|
|
119
184
|
return [{ status: "warn", name: "State taxonomy", detail: "Project root not found; skipped state path checks." }];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EACN,cAAc,EACd,WAAW,EACX,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,eAAe,EACf,SAAS,GAGT,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EACN,kCAAkC,EAClC,oCAAoC,GAEpC,MAAM,6CAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;CACd;AA8JD,wBAAsB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAiC9D"}
|
package/dist/commands/upgrade.js
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
import fs from "node:fs";
|
|
2
1
|
import { join } from "node:path";
|
|
3
2
|
import pc from "picocolors";
|
|
4
|
-
import { fetchReleases, downloadRelease, cleanupDownload, smartUpdate } from "../core/index.js";
|
|
5
|
-
/** Read installed version from
|
|
3
|
+
import { fetchReleases, downloadRelease, cleanupDownload, smartUpdate, readInstallMetadata } from "../core/index.js";
|
|
4
|
+
/** Read installed version from canonical metadata (instant, no npx), with legacy fallback. */
|
|
6
5
|
function getLocalVersion() {
|
|
7
6
|
try {
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
const { source, meta } = readInstallMetadata(join(process.cwd(), ".claude"));
|
|
8
|
+
if (source === "none" || !meta)
|
|
9
|
+
return null;
|
|
10
|
+
// A legacy checksum manifest has no trustworthy version; report it only when
|
|
11
|
+
// a real version was recovered (never the empty placeholder).
|
|
12
|
+
return meta.version ? meta.version : null;
|
|
11
13
|
}
|
|
12
14
|
catch {
|
|
13
15
|
return null;
|
|
@@ -108,6 +110,9 @@ async function performUpgrade(localVersion, useBeta, cleanup, assumeYes) {
|
|
|
108
110
|
console.log(` ${pc.green("added")} ${stats.added}`);
|
|
109
111
|
console.log(` ${pc.cyan("updated")} ${stats.updated}`);
|
|
110
112
|
console.log(` ${pc.dim("skipped")} ${stats.skipped}`);
|
|
113
|
+
if (stats.deletionsDeleted.length > 0) {
|
|
114
|
+
console.log(` ${pc.red("deleted")} ${stats.deletionsDeleted.length} ${pc.dim("(marked for removal by the release)")}`);
|
|
115
|
+
}
|
|
111
116
|
if (stats.orphansDeleted.length > 0) {
|
|
112
117
|
console.log(` ${pc.red("removed")} ${stats.orphansDeleted.length} ${pc.dim("(release no longer ships)")}`);
|
|
113
118
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,13 @@ export interface Manifest {
|
|
|
20
20
|
export declare function hashFile(filePath: string): string;
|
|
21
21
|
/** Determine the layer of a file based on its path relative to the project root */
|
|
22
22
|
export declare function classifyLayer(relativePath: string): FileLayer;
|
|
23
|
+
/**
|
|
24
|
+
* Recursively collect all files in a directory, returning paths relative to baseDir.
|
|
25
|
+
* Skips build/cache noise, the legacy checksum manifest, and the CLI's own
|
|
26
|
+
* installed-state files (metadata.json + its lock) — those are written by the CLI,
|
|
27
|
+
* not shipped content, so they must never scan themselves into a manifest.
|
|
28
|
+
*/
|
|
29
|
+
export declare function collectFiles(dir: string, baseDir: string): string[];
|
|
23
30
|
/**
|
|
24
31
|
* Build a manifest by scanning all files in the .claude/ directory.
|
|
25
32
|
* All MeowKit files live inside .claude/ — no root-level scanning.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compute-checksums.d.ts","sourceRoot":"","sources":["../../src/core/compute-checksums.ts"],"names":[],"mappings":"AAIA,4CAA4C;AAC5C,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAClD,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,MAAM,GAAG,kBAAkB,CAAC;AAEpE,MAAM,WAAW,aAAa;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CACzC;AAsBD,qCAAqC;AACrC,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAe7D;
|
|
1
|
+
{"version":3,"file":"compute-checksums.d.ts","sourceRoot":"","sources":["../../src/core/compute-checksums.ts"],"names":[],"mappings":"AAIA,4CAA4C;AAC5C,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAClD,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,MAAM,GAAG,kBAAkB,CAAC;AAEpE,MAAM,WAAW,aAAa;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CACzC;AAsBD,qCAAqC;AACrC,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAe7D;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAyBnE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,CA0BzD;AAED,6BAA6B;AAC7B,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAGzE;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAQ/D"}
|
|
@@ -43,13 +43,22 @@ export function classifyLayer(relativePath) {
|
|
|
43
43
|
}
|
|
44
44
|
/**
|
|
45
45
|
* Recursively collect all files in a directory, returning paths relative to baseDir.
|
|
46
|
-
* Skips
|
|
46
|
+
* Skips build/cache noise, the legacy checksum manifest, and the CLI's own
|
|
47
|
+
* installed-state files (metadata.json + its lock) — those are written by the CLI,
|
|
48
|
+
* not shipped content, so they must never scan themselves into a manifest.
|
|
47
49
|
*/
|
|
48
|
-
function collectFiles(dir, baseDir) {
|
|
50
|
+
export function collectFiles(dir, baseDir) {
|
|
49
51
|
const files = [];
|
|
50
52
|
if (!existsSync(dir))
|
|
51
53
|
return files;
|
|
52
|
-
const SKIP = new Set([
|
|
54
|
+
const SKIP = new Set([
|
|
55
|
+
"__pycache__",
|
|
56
|
+
"node_modules",
|
|
57
|
+
".DS_Store",
|
|
58
|
+
MANIFEST_FILENAME,
|
|
59
|
+
"metadata.json",
|
|
60
|
+
".metadata.lock",
|
|
61
|
+
]);
|
|
53
62
|
const entries = readdirSync(dir);
|
|
54
63
|
for (const entry of entries) {
|
|
55
64
|
if (SKIP.has(entry))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compute-checksums.js","sourceRoot":"","sources":["../../src/core/compute-checksums.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAuB3C,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAElD,4EAA4E;AAC5E,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;AAExF,qDAAqD;AACrD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;IAC1B,WAAW;IACX,qBAAqB;IACrB,MAAM;IACN,aAAa;IACb,kBAAkB;IAClB,UAAU;IACV,mBAAmB;IACnB,uBAAuB;CACvB,CAAC,CAAC;AAEH,2DAA2D;AAC3D,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAE9C,qCAAqC;AACrC,MAAM,UAAU,QAAQ,CAAC,QAAgB;IACxC,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACvC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,aAAa,CAAC,YAAoB;IACjD,mCAAmC;IACnC,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IACrD,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC;QAAE,OAAO,MAAM,CAAC;IAE5E,yDAAyD;IACzD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAExB,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACzC,IAAI,MAAM,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IACxC,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACzC,IAAI,MAAM,KAAK,eAAe;QAAE,OAAO,MAAM,CAAC;IAE9C,OAAO,MAAM,CAAC;AACf,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"compute-checksums.js","sourceRoot":"","sources":["../../src/core/compute-checksums.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-lock.d.ts","sourceRoot":"","sources":["../../src/core/file-lock.ts"],"names":[],"mappings":"AA+EA,qEAAqE;AACrE,wBAAsB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAO/F"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// PID-based advisory file lock generalized over an arbitrary lock path.
|
|
2
|
+
// Acquires by exclusively creating the lock file (`wx`) and writing the
|
|
3
|
+
// owner PID + timestamp; reclaims a lock whose owner PID is dead or whose
|
|
4
|
+
// timestamp is older than STALE_LOCK_MS; serializes concurrent callers via a
|
|
5
|
+
// bounded spin. Replaces a per-call proper-lockfile dependency.
|
|
6
|
+
import { existsSync } from "node:fs";
|
|
7
|
+
import { mkdir, open, readFile, unlink } from "node:fs/promises";
|
|
8
|
+
import { dirname } from "node:path";
|
|
9
|
+
const STALE_LOCK_MS = 60 * 1000;
|
|
10
|
+
const ACQUIRE_TIMEOUT_MS = 10 * 1000;
|
|
11
|
+
const RETRY_INTERVAL_MS = 100;
|
|
12
|
+
function isErrnoCode(error, code) {
|
|
13
|
+
return (typeof error === "object" && error !== null && "code" in error && error.code === code);
|
|
14
|
+
}
|
|
15
|
+
async function acquireFileLock(lockPath) {
|
|
16
|
+
const lockDir = dirname(lockPath);
|
|
17
|
+
if (!existsSync(lockDir))
|
|
18
|
+
await mkdir(lockDir, { recursive: true });
|
|
19
|
+
const myPid = process.pid;
|
|
20
|
+
const startTime = Date.now();
|
|
21
|
+
while (true) {
|
|
22
|
+
try {
|
|
23
|
+
const handle = await open(lockPath, "wx");
|
|
24
|
+
await handle.writeFile(`${myPid}\n${Date.now()}\n`, "utf-8");
|
|
25
|
+
await handle.close();
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
if (!isErrnoCode(err, "EEXIST"))
|
|
30
|
+
throw err;
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
const content = await readFile(lockPath, "utf-8");
|
|
34
|
+
const [pidStr, tsStr] = content.split("\n");
|
|
35
|
+
const pid = Number.parseInt(pidStr, 10);
|
|
36
|
+
const ts = Number.parseInt(tsStr, 10);
|
|
37
|
+
let alive = false;
|
|
38
|
+
try {
|
|
39
|
+
if (Number.isFinite(pid) && pid > 0) {
|
|
40
|
+
process.kill(pid, 0);
|
|
41
|
+
alive = true;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
alive = false;
|
|
46
|
+
}
|
|
47
|
+
if (!alive || (Number.isFinite(ts) && Date.now() - ts > STALE_LOCK_MS)) {
|
|
48
|
+
try {
|
|
49
|
+
await unlink(lockPath);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
/* lost the reclaim race — another waiter cleaned it */
|
|
53
|
+
}
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// Lock disappeared or unreadable between create and read — retry.
|
|
59
|
+
}
|
|
60
|
+
if (Date.now() - startTime > ACQUIRE_TIMEOUT_MS) {
|
|
61
|
+
throw new Error(`Could not acquire lock ${lockPath} within ${ACQUIRE_TIMEOUT_MS / 1000}s`);
|
|
62
|
+
}
|
|
63
|
+
await new Promise((r) => setTimeout(r, RETRY_INTERVAL_MS));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
async function releaseFileLock(lockPath) {
|
|
67
|
+
try {
|
|
68
|
+
await unlink(lockPath);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// Best-effort: the lock may already be gone (reclaimed as stale).
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/** Run `operation` while holding an exclusive lock at `lockPath`. */
|
|
75
|
+
export async function withFileLock(lockPath, operation) {
|
|
76
|
+
await acquireFileLock(lockPath);
|
|
77
|
+
try {
|
|
78
|
+
return await operation();
|
|
79
|
+
}
|
|
80
|
+
finally {
|
|
81
|
+
await releaseFileLock(lockPath);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=file-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-lock.js","sourceRoot":"","sources":["../../src/core/file-lock.ts"],"names":[],"mappings":"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"}
|
package/dist/core/index.d.ts
CHANGED
|
@@ -7,6 +7,10 @@ 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";
|
package/dist/core/index.d.ts.map
CHANGED
|
@@ -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"}
|
package/dist/core/index.js
CHANGED
|
@@ -7,6 +7,10 @@ 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";
|
package/dist/core/index.js.map
CHANGED
|
@@ -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"}
|
|
@@ -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"}
|