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.
- package/README.md +49 -4
- package/dist/commands/budget.d.ts +13 -0
- package/dist/commands/budget.d.ts.map +1 -1
- package/dist/commands/budget.js +45 -0
- package/dist/commands/budget.js.map +1 -1
- package/dist/commands/doctor-checks.d.ts +1 -1
- package/dist/commands/doctor-checks.d.ts.map +1 -1
- package/dist/commands/doctor-checks.js +7 -1
- package/dist/commands/doctor-checks.js.map +1 -1
- package/dist/commands/doctor-hard-gates.d.ts +3 -0
- package/dist/commands/doctor-hard-gates.d.ts.map +1 -0
- package/dist/commands/doctor-hard-gates.js +170 -0
- package/dist/commands/doctor-hard-gates.js.map +1 -0
- package/dist/commands/doctor.d.ts +1 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +12 -3
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/evolve.d.ts +11 -0
- package/dist/commands/evolve.d.ts.map +1 -0
- package/dist/commands/evolve.js +63 -0
- package/dist/commands/evolve.js.map +1 -0
- package/dist/commands/health.d.ts +14 -0
- package/dist/commands/health.d.ts.map +1 -0
- package/dist/commands/health.js +193 -0
- package/dist/commands/health.js.map +1 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +64 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/inventory.d.ts +13 -0
- package/dist/commands/inventory.d.ts.map +1 -0
- package/dist/commands/inventory.js +85 -0
- package/dist/commands/inventory.js.map +1 -0
- package/dist/commands/pack-helpers.d.ts +37 -0
- package/dist/commands/pack-helpers.d.ts.map +1 -0
- package/dist/commands/pack-helpers.js +105 -0
- package/dist/commands/pack-helpers.js.map +1 -0
- package/dist/commands/pack.d.ts +9 -0
- package/dist/commands/pack.d.ts.map +1 -0
- package/dist/commands/pack.js +160 -0
- package/dist/commands/pack.js.map +1 -0
- package/dist/commands/policy.d.ts +8 -0
- package/dist/commands/policy.d.ts.map +1 -0
- package/dist/commands/policy.js +65 -0
- package/dist/commands/policy.js.map +1 -0
- package/dist/commands/portability.d.ts +7 -0
- package/dist/commands/portability.d.ts.map +1 -0
- package/dist/commands/portability.js +50 -0
- package/dist/commands/portability.js.map +1 -0
- package/dist/commands/providers.d.ts +6 -0
- package/dist/commands/providers.d.ts.map +1 -0
- package/dist/commands/providers.js +94 -0
- package/dist/commands/providers.js.map +1 -0
- package/dist/commands/reflect.d.ts +14 -0
- package/dist/commands/reflect.d.ts.map +1 -0
- package/dist/commands/reflect.js +135 -0
- package/dist/commands/reflect.js.map +1 -0
- package/dist/commands/simulate.d.ts +14 -0
- package/dist/commands/simulate.d.ts.map +1 -0
- package/dist/commands/simulate.js +86 -0
- package/dist/commands/simulate.js.map +1 -0
- package/dist/commands/upgrade.d.ts.map +1 -1
- package/dist/commands/upgrade.js +22 -1
- package/dist/commands/upgrade.js.map +1 -1
- package/dist/commands/validate.d.ts +29 -0
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +242 -94
- package/dist/commands/validate.js.map +1 -1
- package/dist/core/build-inventory.d.ts +71 -0
- package/dist/core/build-inventory.d.ts.map +1 -0
- package/dist/core/build-inventory.js +222 -0
- package/dist/core/build-inventory.js.map +1 -0
- package/dist/core/check-packs.d.ts +13 -0
- package/dist/core/check-packs.d.ts.map +1 -0
- package/dist/core/check-packs.js +131 -0
- package/dist/core/check-packs.js.map +1 -0
- package/dist/core/check-stale-index.d.ts +35 -0
- package/dist/core/check-stale-index.d.ts.map +1 -0
- package/dist/core/check-stale-index.js +132 -0
- package/dist/core/check-stale-index.js.map +1 -0
- package/dist/core/check-workflow-drift.d.ts +49 -0
- package/dist/core/check-workflow-drift.d.ts.map +1 -0
- package/dist/core/check-workflow-drift.js +226 -0
- package/dist/core/check-workflow-drift.js.map +1 -0
- package/dist/core/context-budget.d.ts +9 -0
- package/dist/core/context-budget.d.ts.map +1 -0
- package/dist/core/context-budget.js +46 -0
- package/dist/core/context-budget.js.map +1 -0
- package/dist/core/event-log.d.ts +44 -0
- package/dist/core/event-log.d.ts.map +1 -0
- package/dist/core/event-log.js +169 -0
- package/dist/core/event-log.js.map +1 -0
- package/dist/core/evolution/event-clusters.d.ts +4 -0
- package/dist/core/evolution/event-clusters.d.ts.map +1 -0
- package/dist/core/evolution/event-clusters.js +82 -0
- package/dist/core/evolution/event-clusters.js.map +1 -0
- package/dist/core/evolution/recommendation-renderer.d.ts +3 -0
- package/dist/core/evolution/recommendation-renderer.d.ts.map +1 -0
- package/dist/core/evolution/recommendation-renderer.js +24 -0
- package/dist/core/evolution/recommendation-renderer.js.map +1 -0
- package/dist/core/evolution/review-failure-clusters.d.ts +10 -0
- package/dist/core/evolution/review-failure-clusters.d.ts.map +1 -0
- package/dist/core/evolution/review-failure-clusters.js +30 -0
- package/dist/core/evolution/review-failure-clusters.js.map +1 -0
- package/dist/core/evolution/suggestions.d.ts +24 -0
- package/dist/core/evolution/suggestions.d.ts.map +1 -0
- package/dist/core/evolution/suggestions.js +11 -0
- package/dist/core/evolution/suggestions.js.map +1 -0
- package/dist/core/gate-policy.d.ts +20 -0
- package/dist/core/gate-policy.d.ts.map +1 -0
- package/dist/core/gate-policy.js +64 -0
- package/dist/core/gate-policy.js.map +1 -0
- package/dist/core/harness-scaffold.d.ts +29 -0
- package/dist/core/harness-scaffold.d.ts.map +1 -0
- package/dist/core/harness-scaffold.js +53 -0
- package/dist/core/harness-scaffold.js.map +1 -0
- package/dist/core/hook-runner.d.ts +69 -0
- package/dist/core/hook-runner.d.ts.map +1 -0
- package/dist/core/hook-runner.js +95 -0
- package/dist/core/hook-runner.js.map +1 -0
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +2 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/install-metadata.d.ts +15 -0
- package/dist/core/install-metadata.d.ts.map +1 -1
- package/dist/core/install-metadata.js +11 -0
- package/dist/core/install-metadata.js.map +1 -1
- package/dist/core/is-hook-script.d.ts +2 -0
- package/dist/core/is-hook-script.d.ts.map +1 -0
- package/dist/core/is-hook-script.js +45 -0
- package/dist/core/is-hook-script.js.map +1 -0
- package/dist/core/pack-manifest.d.ts +48 -0
- package/dist/core/pack-manifest.d.ts.map +1 -0
- package/dist/core/pack-manifest.js +126 -0
- package/dist/core/pack-manifest.js.map +1 -0
- package/dist/core/pack-resolver.d.ts +18 -0
- package/dist/core/pack-resolver.d.ts.map +1 -0
- package/dist/core/pack-resolver.js +144 -0
- package/dist/core/pack-resolver.js.map +1 -0
- package/dist/core/portability-matrix.d.ts +17 -0
- package/dist/core/portability-matrix.d.ts.map +1 -0
- package/dist/core/portability-matrix.js +31 -0
- package/dist/core/portability-matrix.js.map +1 -0
- package/dist/core/simulation-runner.d.ts +93 -0
- package/dist/core/simulation-runner.d.ts.map +1 -0
- package/dist/core/simulation-runner.js +161 -0
- package/dist/core/simulation-runner.js.map +1 -0
- package/dist/core/smart-update.d.ts +24 -0
- package/dist/core/smart-update.d.ts.map +1 -1
- package/dist/core/smart-update.js +69 -0
- package/dist/core/smart-update.js.map +1 -1
- package/dist/core/usage/usage-analyzer.d.ts +18 -0
- package/dist/core/usage/usage-analyzer.d.ts.map +1 -0
- package/dist/core/usage/usage-analyzer.js +41 -0
- package/dist/core/usage/usage-analyzer.js.map +1 -0
- package/dist/core/validate-install.d.ts.map +1 -1
- package/dist/core/validate-install.js +3 -1
- package/dist/core/validate-install.js.map +1 -1
- package/dist/index.js +91 -4
- package/dist/index.js.map +1 -1
- package/dist/memory/archive.d.ts +9 -0
- package/dist/memory/archive.d.ts.map +1 -0
- package/dist/memory/archive.js +42 -0
- package/dist/memory/archive.js.map +1 -0
- package/dist/memory/compact.d.ts +9 -0
- package/dist/memory/compact.d.ts.map +1 -0
- package/dist/memory/compact.js +33 -0
- package/dist/memory/compact.js.map +1 -0
- package/dist/memory/conflicts.d.ts +8 -0
- package/dist/memory/conflicts.d.ts.map +1 -0
- package/dist/memory/conflicts.js +28 -0
- package/dist/memory/conflicts.js.map +1 -0
- package/dist/memory/promote.d.ts +8 -0
- package/dist/memory/promote.d.ts.map +1 -0
- package/dist/memory/promote.js +10 -0
- package/dist/memory/promote.js.map +1 -0
- package/dist/memory/store-utils.d.ts +14 -0
- package/dist/memory/store-utils.d.ts.map +1 -0
- package/dist/memory/store-utils.js +44 -0
- package/dist/memory/store-utils.js.map +1 -0
- package/dist/migrate/converters/md-to-codex-rules.d.ts.map +1 -1
- package/dist/migrate/converters/md-to-codex-rules.js +30 -0
- package/dist/migrate/converters/md-to-codex-rules.js.map +1 -1
- package/dist/migrate/portability-policy.d.ts.map +1 -1
- package/dist/migrate/portability-policy.js +44 -23
- package/dist/migrate/portability-policy.js.map +1 -1
- package/dist/migrate/provider-support-summary.d.ts +49 -0
- package/dist/migrate/provider-support-summary.d.ts.map +1 -0
- package/dist/migrate/provider-support-summary.js +98 -0
- package/dist/migrate/provider-support-summary.js.map +1 -0
- package/dist/migrate/types.d.ts +2 -2
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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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"}
|