mewkit 1.6.8 → 1.7.1

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 (88) hide show
  1. package/package.json +10 -2
  2. package/dist/commands/budget.d.ts +0 -6
  3. package/dist/commands/budget.d.ts.map +0 -1
  4. package/dist/commands/budget.js +0 -95
  5. package/dist/commands/budget.js.map +0 -1
  6. package/dist/commands/doctor.d.ts +0 -4
  7. package/dist/commands/doctor.d.ts.map +0 -1
  8. package/dist/commands/doctor.js +0 -365
  9. package/dist/commands/doctor.js.map +0 -1
  10. package/dist/commands/init.d.ts +0 -7
  11. package/dist/commands/init.d.ts.map +0 -1
  12. package/dist/commands/init.js +0 -309
  13. package/dist/commands/init.js.map +0 -1
  14. package/dist/commands/memory.d.ts +0 -9
  15. package/dist/commands/memory.d.ts.map +0 -1
  16. package/dist/commands/memory.js +0 -217
  17. package/dist/commands/memory.js.map +0 -1
  18. package/dist/commands/setup.d.ts +0 -16
  19. package/dist/commands/setup.d.ts.map +0 -1
  20. package/dist/commands/setup.js +0 -413
  21. package/dist/commands/setup.js.map +0 -1
  22. package/dist/commands/task.d.ts +0 -10
  23. package/dist/commands/task.d.ts.map +0 -1
  24. package/dist/commands/task.js +0 -313
  25. package/dist/commands/task.js.map +0 -1
  26. package/dist/commands/upgrade.d.ts +0 -7
  27. package/dist/commands/upgrade.d.ts.map +0 -1
  28. package/dist/commands/upgrade.js +0 -143
  29. package/dist/commands/upgrade.js.map +0 -1
  30. package/dist/commands/validate.d.ts +0 -2
  31. package/dist/commands/validate.d.ts.map +0 -1
  32. package/dist/commands/validate.js +0 -139
  33. package/dist/commands/validate.js.map +0 -1
  34. package/dist/core/compute-checksums.d.ts +0 -25
  35. package/dist/core/compute-checksums.d.ts.map +0 -1
  36. package/dist/core/compute-checksums.js +0 -105
  37. package/dist/core/compute-checksums.js.map +0 -1
  38. package/dist/core/core-logger.d.ts +0 -9
  39. package/dist/core/core-logger.d.ts.map +0 -1
  40. package/dist/core/core-logger.js +0 -31
  41. package/dist/core/core-logger.js.map +0 -1
  42. package/dist/core/dependency-installer.d.ts +0 -29
  43. package/dist/core/dependency-installer.d.ts.map +0 -1
  44. package/dist/core/dependency-installer.js +0 -150
  45. package/dist/core/dependency-installer.js.map +0 -1
  46. package/dist/core/github-releases.d.ts +0 -32
  47. package/dist/core/github-releases.d.ts.map +0 -1
  48. package/dist/core/github-releases.js +0 -96
  49. package/dist/core/github-releases.js.map +0 -1
  50. package/dist/core/index.d.ts +0 -12
  51. package/dist/core/index.d.ts.map +0 -1
  52. package/dist/core/index.js +0 -12
  53. package/dist/core/index.js.map +0 -1
  54. package/dist/core/merge-settings.d.ts +0 -7
  55. package/dist/core/merge-settings.d.ts.map +0 -1
  56. package/dist/core/merge-settings.js +0 -131
  57. package/dist/core/merge-settings.js.map +0 -1
  58. package/dist/core/skills-dependencies.d.ts +0 -25
  59. package/dist/core/skills-dependencies.d.ts.map +0 -1
  60. package/dist/core/skills-dependencies.js +0 -100
  61. package/dist/core/skills-dependencies.js.map +0 -1
  62. package/dist/core/smart-update-utils.d.ts +0 -10
  63. package/dist/core/smart-update-utils.d.ts.map +0 -1
  64. package/dist/core/smart-update-utils.js +0 -61
  65. package/dist/core/smart-update-utils.js.map +0 -1
  66. package/dist/core/smart-update.d.ts +0 -18
  67. package/dist/core/smart-update.d.ts.map +0 -1
  68. package/dist/core/smart-update.js +0 -177
  69. package/dist/core/smart-update.js.map +0 -1
  70. package/dist/core/substitute-placeholders.d.ts +0 -11
  71. package/dist/core/substitute-placeholders.d.ts.map +0 -1
  72. package/dist/core/substitute-placeholders.js +0 -28
  73. package/dist/core/substitute-placeholders.js.map +0 -1
  74. package/dist/core/validate-install.d.ts +0 -6
  75. package/dist/core/validate-install.d.ts.map +0 -1
  76. package/dist/core/validate-install.js +0 -97
  77. package/dist/core/validate-install.js.map +0 -1
  78. package/dist/index.d.ts +0 -3
  79. package/dist/index.d.ts.map +0 -1
  80. package/dist/index.js +0 -153
  81. package/dist/index.js.map +0 -1
  82. package/dist/lib/system-deps-registry.d.ts +0 -117
  83. package/dist/lib/system-deps-registry.d.ts.map +0 -1
  84. package/dist/lib/system-deps-registry.js +0 -234
  85. package/dist/lib/system-deps-registry.js.map +0 -1
  86. package/dist/logger.d.ts +0 -26
  87. package/dist/logger.js +0 -70
  88. package/dist/logger.js.map +0 -1
@@ -1,97 +0,0 @@
1
- import { existsSync, readdirSync, statSync, accessSync, constants } from "node:fs";
2
- import { join } from "node:path";
3
- import pc from "picocolors";
4
- function check(label, pass, issues) {
5
- if (pass) {
6
- console.log(` ${pc.green("PASS")} ${label}`);
7
- }
8
- else {
9
- console.log(` ${pc.red("FAIL")} ${label}`);
10
- issues.push(label);
11
- }
12
- return pass;
13
- }
14
- /** Counts .md files in a directory (non-recursive) */
15
- function countMdFiles(dir) {
16
- if (!existsSync(dir))
17
- return 0;
18
- try {
19
- return readdirSync(dir).filter((f) => f.endsWith(".md")).length;
20
- }
21
- catch {
22
- return 0;
23
- }
24
- }
25
- /** Counts subdirectories in a directory */
26
- function countSubdirs(dir) {
27
- if (!existsSync(dir))
28
- return 0;
29
- try {
30
- return readdirSync(dir).filter((f) => {
31
- try {
32
- return statSync(join(dir, f)).isDirectory();
33
- }
34
- catch {
35
- return false;
36
- }
37
- }).length;
38
- }
39
- catch {
40
- return 0;
41
- }
42
- }
43
- export function validate(targetDir) {
44
- const issues = [];
45
- const claude = join(targetDir, ".claude");
46
- console.log(pc.bold("\nValidation Results:"));
47
- // Core structure
48
- check(".claude/ directory exists", existsSync(claude), issues);
49
- check("CLAUDE.md exists", existsSync(join(targetDir, "CLAUDE.md")), issues);
50
- check("meowkit.config.json exists", existsSync(join(claude, "meowkit.config.json")), issues);
51
- // Agents (expect 10+ from real system)
52
- const agentCount = countMdFiles(join(claude, "agents"));
53
- check(`Agents: ${agentCount} files (need 10+)`, agentCount >= 10, issues);
54
- // Skills (expect 30+ directories)
55
- const skillCount = countSubdirs(join(claude, "skills"));
56
- check(`Skills: ${skillCount} directories (need 30+)`, skillCount >= 30, issues);
57
- // Commands
58
- const cmdDir = join(claude, "commands");
59
- const cmdExists = existsSync(cmdDir);
60
- check("Commands directory exists", cmdExists, issues);
61
- // Modes
62
- const modeCount = countMdFiles(join(claude, "modes"));
63
- check(`Modes: ${modeCount} files (need 5+)`, modeCount >= 5, issues);
64
- // Rules
65
- const ruleCount = countMdFiles(join(claude, "rules"));
66
- check(`Rules: ${ruleCount} files (need 10+)`, ruleCount >= 10, issues);
67
- // Hooks — all must be executable
68
- const hooksDir = join(claude, "hooks");
69
- if (existsSync(hooksDir)) {
70
- const hookFiles = readdirSync(hooksDir);
71
- for (const hookFile of hookFiles) {
72
- const hookPath = join(hooksDir, hookFile);
73
- let isExecutable = false;
74
- try {
75
- accessSync(hookPath, constants.X_OK);
76
- isExecutable = true;
77
- }
78
- catch {
79
- // Not executable
80
- }
81
- check(`Hook ${hookFile} is executable`, isExecutable, issues);
82
- }
83
- }
84
- else {
85
- check("Hooks directory exists", false, issues);
86
- }
87
- // Scripts
88
- check("Scripts directory exists", existsSync(join(claude, "scripts")), issues);
89
- // Settings
90
- check("settings.json exists", existsSync(join(claude, "settings.json")), issues);
91
- const valid = issues.length === 0;
92
- console.log(valid
93
- ? `\n ${pc.green(pc.bold("All checks passed"))}`
94
- : `\n ${pc.red(pc.bold(`${issues.length} issue(s) found`))}`);
95
- return { valid, issues };
96
- }
97
- //# sourceMappingURL=validate-install.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate-install.js","sourceRoot":"","sources":["../../src/core/validate-install.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js DELETED
@@ -1,153 +0,0 @@
1
- #!/usr/bin/env node
2
- import fs from "node:fs";
3
- import { dirname, join } from "node:path";
4
- import { fileURLToPath } from "node:url";
5
- import minimist from "minimist";
6
- import pc from "picocolors";
7
- import { init } from "./commands/init.js";
8
- import { upgrade } from "./commands/upgrade.js";
9
- import { validate } from "./commands/validate.js";
10
- import { budget } from "./commands/budget.js";
11
- import { memory } from "./commands/memory.js";
12
- import { doctor } from "./commands/doctor.js";
13
- import { setup } from "./commands/setup.js";
14
- import { task } from "./commands/task.js";
15
- const __dirname = dirname(fileURLToPath(import.meta.url));
16
- const pkgJson = JSON.parse(fs.readFileSync(join(__dirname, "..", "package.json"), "utf-8"));
17
- const VERSION = pkgJson.version;
18
- function printHelp() {
19
- console.log(`
20
- ${pc.bold(pc.cyan("meowkit"))} ${pc.dim(`v${VERSION}`)} — MeowKit runtime CLI
21
-
22
- ${pc.bold("Usage:")}
23
- meowkit <command> [options]
24
-
25
- ${pc.bold("Commands:")}
26
- ${pc.green("init")} Scaffold or update MeowKit in the current project
27
- ${pc.green("upgrade")} Upgrade MeowKit to the latest version
28
- ${pc.green("validate")} Validate .claude/ project structure
29
- ${pc.green("budget")} View token usage and cost log
30
- ${pc.green("memory")} Manage agent memory (lessons & patterns)
31
- ${pc.green("setup")} Guided post-scaffold configuration
32
- ${pc.green("doctor")} Diagnose common environment issues
33
- ${pc.green("status")} Print version and config summary
34
- ${pc.green("task")} Create and list task files (new, list)
35
-
36
- ${pc.bold("Options:")}
37
- --help, -h Show help
38
- --version, -v Show version
39
- `);
40
- }
41
- async function printStatus() {
42
- const channel = VERSION.includes("-beta") || VERSION.includes("-rc") ? "beta" : "stable";
43
- console.log(`${pc.bold(pc.cyan("meowkit"))} ${pc.dim(`v${VERSION}`)} ${pc.dim(`(${channel})`)}`);
44
- console.log();
45
- const configPath = ".claude/meowkit.config.json";
46
- try {
47
- const content = fs.readFileSync(configPath, "utf-8");
48
- const config = JSON.parse(content);
49
- console.log(`${pc.bold("Config:")} ${configPath}`);
50
- for (const [key, value] of Object.entries(config)) {
51
- console.log(` ${pc.dim(key)}: ${String(value)}`);
52
- }
53
- }
54
- catch {
55
- console.log(`${pc.dim("No .claude/meowkit.config.json found.")}`);
56
- }
57
- }
58
- async function main() {
59
- const args = minimist(process.argv.slice(2), {
60
- boolean: [
61
- "help",
62
- "version",
63
- "check",
64
- "beta",
65
- "list",
66
- "monthly",
67
- "clear",
68
- "show",
69
- "stats",
70
- "report",
71
- "all",
72
- "dry-run",
73
- "force",
74
- "system-deps",
75
- ],
76
- string: ["only", "type", "priority", "status"],
77
- alias: { h: "help", v: "version" },
78
- });
79
- if (args.version) {
80
- console.log(VERSION);
81
- return;
82
- }
83
- const command = args._[0];
84
- if (args.help && !command) {
85
- printHelp();
86
- return;
87
- }
88
- switch (command) {
89
- case "init":
90
- await init({
91
- dryRun: args["dry-run"],
92
- force: args.force,
93
- beta: args.beta,
94
- });
95
- break;
96
- case "upgrade":
97
- await upgrade({
98
- check: args.check,
99
- beta: args.beta,
100
- list: args.list,
101
- });
102
- break;
103
- case "validate":
104
- await validate();
105
- break;
106
- case "budget":
107
- await budget({ monthly: args.monthly });
108
- break;
109
- case "memory":
110
- await memory({
111
- clear: args.clear,
112
- show: args.show,
113
- stats: args.stats,
114
- });
115
- break;
116
- case "setup":
117
- await setup({ only: args.only, systemDeps: args["system-deps"] });
118
- break;
119
- case "doctor":
120
- await doctor({ report: args.report });
121
- break;
122
- case "status":
123
- await printStatus();
124
- break;
125
- case "task": {
126
- const subcommand = args._[1];
127
- // positional description: everything after the subcommand that isn't a flag
128
- const description = args._.slice(2).join(" ");
129
- task({
130
- subcommand,
131
- type: args.type,
132
- priority: args.priority,
133
- all: args.all,
134
- status: args.status,
135
- description: description || undefined,
136
- });
137
- break;
138
- }
139
- default:
140
- if (command) {
141
- console.error(pc.red(`Unknown command: ${command}`));
142
- console.log();
143
- }
144
- printHelp();
145
- break;
146
- }
147
- }
148
- main().catch((error) => {
149
- const message = error instanceof Error ? error.message : String(error);
150
- console.error(pc.red(`Fatal: ${message}`));
151
- process.exit(1);
152
- });
153
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAwB,CAAC;AACnH,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;AAEhC,SAAS,SAAS;IACjB,OAAO,CAAC,GAAG,CAAC;EACX,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC;;EAEpD,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;;;EAGjB,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC;IAClB,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;IAChB,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;IACnB,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC;IACpB,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;IAClB,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;IAClB,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;IACjB,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;IAClB,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;IAClB,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;;EAElB,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC;;;CAGpB,CAAC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW;IACzB,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;IACzF,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC;IACjG,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,UAAU,GAAG,6BAA6B,CAAC;IACjD,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,MAAM,GAA4B,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;QACvF,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC;QACnD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnD,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,uCAAuC,CAAC,EAAE,CAAC,CAAC;IACnE,CAAC;AACF,CAAC;AAED,KAAK,UAAU,IAAI;IAClB,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QAC5C,OAAO,EAAE;YACR,MAAM;YACN,SAAS;YACT,OAAO;YACP,MAAM;YACN,MAAM;YACN,SAAS;YACT,OAAO;YACP,MAAM;YACN,OAAO;YACP,QAAQ;YACR,KAAK;YACL,SAAS;YACT,OAAO;YACP,aAAa;SACb;QACD,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC;QAC9C,KAAK,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE;KAClC,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO;IACR,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAuB,CAAC;IAEhD,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,SAAS,EAAE,CAAC;QACZ,OAAO;IACR,CAAC;IAED,QAAQ,OAAO,EAAE,CAAC;QACjB,KAAK,MAAM;YACV,MAAM,IAAI,CAAC;gBACV,MAAM,EAAE,IAAI,CAAC,SAAS,CAAwB;gBAC9C,KAAK,EAAE,IAAI,CAAC,KAA4B;gBACxC,IAAI,EAAE,IAAI,CAAC,IAA2B;aACtC,CAAC,CAAC;YACH,MAAM;QACP,KAAK,SAAS;YACb,MAAM,OAAO,CAAC;gBACb,KAAK,EAAE,IAAI,CAAC,KAA4B;gBACxC,IAAI,EAAE,IAAI,CAAC,IAA2B;gBACtC,IAAI,EAAE,IAAI,CAAC,IAA2B;aACtC,CAAC,CAAC;YACH,MAAM;QACP,KAAK,UAAU;YACd,MAAM,QAAQ,EAAE,CAAC;YACjB,MAAM;QACP,KAAK,QAAQ;YACZ,MAAM,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAA8B,EAAE,CAAC,CAAC;YAC/D,MAAM;QACP,KAAK,QAAQ;YACZ,MAAM,MAAM,CAAC;gBACZ,KAAK,EAAE,IAAI,CAAC,KAA4B;gBACxC,IAAI,EAAE,IAAI,CAAC,IAA2B;gBACtC,KAAK,EAAE,IAAI,CAAC,KAA4B;aACxC,CAAC,CAAC;YACH,MAAM;QACP,KAAK,OAAO;YACX,MAAM,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAA0B,EAAE,UAAU,EAAE,IAAI,CAAC,aAAa,CAAwB,EAAE,CAAC,CAAC;YAC/G,MAAM;QACP,KAAK,QAAQ;YACZ,MAAM,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAA6B,EAAE,CAAC,CAAC;YAC7D,MAAM;QACP,KAAK,QAAQ;YACZ,MAAM,WAAW,EAAE,CAAC;YACpB,MAAM;QACP,KAAK,MAAM,CAAC,CAAC,CAAC;YACb,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAuB,CAAC;YACnD,4EAA4E;YAC5E,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9C,IAAI,CAAC;gBACJ,UAAU;gBACV,IAAI,EAAE,IAAI,CAAC,IAA0B;gBACrC,QAAQ,EAAE,IAAI,CAAC,QAA8B;gBAC7C,GAAG,EAAE,IAAI,CAAC,GAA0B;gBACpC,MAAM,EAAE,IAAI,CAAC,MAA4B;gBACzC,WAAW,EAAE,WAAW,IAAI,SAAS;aACrC,CAAC,CAAC;YACH,MAAM;QACP,CAAC;QACD;YACC,IAAI,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC,CAAC;gBACrD,OAAO,CAAC,GAAG,EAAE,CAAC;YACf,CAAC;YACD,SAAS,EAAE,CAAC;YACZ,MAAM;IACR,CAAC;AACF,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC/B,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"}
@@ -1,117 +0,0 @@
1
- /**
2
- * system-deps-registry.ts
3
- *
4
- * Single source of truth for installable system dependencies.
5
- *
6
- * WHY THIS FILE EXISTS (Q4 / locked decision #2):
7
- * The mewkit CLI used to hardcode ffmpeg + imagemagick directly in setup.ts and
8
- * doctor.ts. This refactor extracts them into a typed registry so:
9
- * 1. Skills can declare opt-in system deps via SKILL.md metadata (schema-driven).
10
- * 2. The CLI iterates the registry instead of hardcoded if/else branches.
11
- * 3. New deps (e.g. playwright-chromium) are registered here — not scattered.
12
- *
13
- * PARSE CONTRACT (optional_system_deps HTML comment):
14
- * Claude Code's native frontmatter schema does NOT support custom fields like
15
- * optional_system_deps — they are silently dropped. Skills instead declare deps in
16
- * a MEOWKIT METADATA HTML comment block inside SKILL.md:
17
- *
18
- * <!--
19
- * MEOWKIT METADATA ...:
20
- * optional_system_deps: [playwright-chromium]
21
- * -->
22
- *
23
- * parseOptionalSystemDepsFromSkillMd() finds this comment and extracts the list.
24
- * validateSkillDeclaredKeys() then checks each key against SYSTEM_DEPS — unknown
25
- * keys are rejected so no skill can request arbitrary package installs.
26
- *
27
- * Playwright version: 1.58.0 (pinned from PyPI on 2026-04-09 via WebFetch).
28
- */
29
- export interface DoctorContext {
30
- /** Absolute path to the project root (contains .claude/) */
31
- projectRoot: string;
32
- }
33
- export interface DoctorResult {
34
- status: "OK" | "MISSING_PACKAGE" | "MISSING_BINARY" | "ERROR";
35
- message?: string;
36
- }
37
- export interface SystemDepEntry {
38
- /** Registry key — referenced in SKILL.md optional_system_deps */
39
- key: string;
40
- /** Human-readable name shown in prompts */
41
- name: string;
42
- /**
43
- * Shell command whose exit code 0 means the dep is present.
44
- * For PATH-based deps with a single binary (e.g. ffmpeg), this is the canonical probe.
45
- * When the dep may ship under multiple binary names (e.g. ImageMagick 6 uses "convert",
46
- * ImageMagick 7+ uses "magick"), use detectCommands instead.
47
- */
48
- detectCommand: string;
49
- /**
50
- * Optional fallback probes for deps that ship under multiple binary names.
51
- * If ANY entry exits 0, the dep is considered present.
52
- * When set, takes precedence over detectCommand for presence checks.
53
- * Example: ImageMagick 6 ships "convert", IM 7+ ships "magick" (no "convert" shim).
54
- */
55
- detectCommands?: string[];
56
- /** Per-OS ordered list of install commands */
57
- installCommands: Partial<Record<NodeJS.Platform, string[]>>;
58
- /** Link shown to users when auto-install is unavailable */
59
- manualUrl: string;
60
- /** Approximate download size in bytes — shown as ~NMB in prompts */
61
- sizeBytes: number;
62
- /** Optional dedicated doctor check (overrides generic detectCommand probe) */
63
- doctorCheck?: (ctx: DoctorContext) => Promise<DoctorResult>;
64
- }
65
- /**
66
- * All registered system dependencies.
67
- * Insertion order = display order in prompts (ffmpeg, imagemagick, playwright-chromium).
68
- */
69
- export declare const SYSTEM_DEPS: Record<string, SystemDepEntry>;
70
- /** Return all registered entries in insertion order */
71
- export declare function listDeps(): SystemDepEntry[];
72
- /**
73
- * Check whether a PATH-based dep's binary (or any of its aliases) is present.
74
- * Uses detectCommands when set (multi-probe); falls back to single detectCommand probe.
75
- *
76
- * NOT suitable for venv-based deps (playwright-chromium) — callers must handle
77
- * those separately (detectCommand includes ".venv").
78
- */
79
- export declare function isDepCommandPresent(dep: SystemDepEntry, commandAvailableFn: (cmd: string) => boolean): boolean;
80
- /** Look up a single entry by key */
81
- export declare function getDep(key: string): SystemDepEntry | undefined;
82
- /**
83
- * Validate keys declared in a skill's optional_system_deps against the registry.
84
- * Unknown keys are rejected to prevent skills from requesting arbitrary installs.
85
- *
86
- * @param declared Keys parsed from SKILL.md optional_system_deps comment
87
- * @param skillName Used in warning messages for traceability
88
- */
89
- export declare function validateSkillDeclaredKeys(declared: string[], skillName: string): {
90
- valid: string[];
91
- invalid: string[];
92
- };
93
- /**
94
- * Parse optional_system_deps from a SKILL.md HTML comment block.
95
- *
96
- * PARSE CONTRACT:
97
- * The parser looks for a comment starting with "MEOWKIT METADATA" and extracts
98
- * the "optional_system_deps:" line from it. Handles both single-line and
99
- * multi-line YAML-ish list formats:
100
- *
101
- * optional_system_deps: [playwright-chromium]
102
- * optional_system_deps: [playwright-chromium, ffmpeg]
103
- *
104
- * Multi-line YAML block format (not currently used but handled):
105
- * optional_system_deps:
106
- * - playwright-chromium
107
- *
108
- * Returns an empty array if the comment or field is absent.
109
- *
110
- * WHY NOT NATIVE FRONTMATTER (Q4 decision):
111
- * Claude Code's frontmatter schema only supports a fixed set of native fields.
112
- * Custom fields like optional_system_deps are silently dropped. The HTML comment
113
- * approach is the agreed MeowKit convention for skill metadata that the CLI needs
114
- * but Claude Code should ignore.
115
- */
116
- export declare function parseOptionalSystemDepsFromSkillMd(skillMdContent: string): string[];
117
- //# sourceMappingURL=system-deps-registry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"system-deps-registry.d.ts","sourceRoot":"","sources":["../../src/lib/system-deps-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AASH,MAAM,WAAW,aAAa;IAC7B,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,IAAI,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,OAAO,CAAC;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC9B,iEAAiE;IACjE,GAAG,EAAE,MAAM,CAAC;IACZ,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,8CAA8C;IAC9C,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC5D,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;CAC5D;AAuDD;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CA2DtD,CAAC;AAMF,uDAAuD;AACvD,wBAAgB,QAAQ,IAAI,cAAc,EAAE,CAE3C;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAG9G;AAED,oCAAoC;AACpC,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAE9D;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACxC,QAAQ,EAAE,MAAM,EAAE,EAClB,SAAS,EAAE,MAAM,GACf;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAiBxC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,kCAAkC,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,EAAE,CA+BnF"}
@@ -1,234 +0,0 @@
1
- /**
2
- * system-deps-registry.ts
3
- *
4
- * Single source of truth for installable system dependencies.
5
- *
6
- * WHY THIS FILE EXISTS (Q4 / locked decision #2):
7
- * The mewkit CLI used to hardcode ffmpeg + imagemagick directly in setup.ts and
8
- * doctor.ts. This refactor extracts them into a typed registry so:
9
- * 1. Skills can declare opt-in system deps via SKILL.md metadata (schema-driven).
10
- * 2. The CLI iterates the registry instead of hardcoded if/else branches.
11
- * 3. New deps (e.g. playwright-chromium) are registered here — not scattered.
12
- *
13
- * PARSE CONTRACT (optional_system_deps HTML comment):
14
- * Claude Code's native frontmatter schema does NOT support custom fields like
15
- * optional_system_deps — they are silently dropped. Skills instead declare deps in
16
- * a MEOWKIT METADATA HTML comment block inside SKILL.md:
17
- *
18
- * <!--
19
- * MEOWKIT METADATA ...:
20
- * optional_system_deps: [playwright-chromium]
21
- * -->
22
- *
23
- * parseOptionalSystemDepsFromSkillMd() finds this comment and extracts the list.
24
- * validateSkillDeclaredKeys() then checks each key against SYSTEM_DEPS — unknown
25
- * keys are rejected so no skill can request arbitrary package installs.
26
- *
27
- * Playwright version: 1.58.0 (pinned from PyPI on 2026-04-09 via WebFetch).
28
- */
29
- import { spawnSync } from "node:child_process";
30
- import path from "node:path";
31
- // ---------------------------------------------------------------------------
32
- // Registry
33
- // ---------------------------------------------------------------------------
34
- /**
35
- * Dedicated Playwright doctor check (locked decision #3):
36
- * Two probes — package import AND chromium binary presence.
37
- * Generic detectCommand is not enough here because pip install playwright
38
- * succeeds without downloading the ~130MB Chromium binary.
39
- */
40
- async function playwrightDoctorCheck(ctx) {
41
- const venvPython = path.join(ctx.projectRoot, ".claude", "skills", ".venv", "bin", "python3");
42
- // On Windows the venv layout differs
43
- const venvPythonWin = path.join(ctx.projectRoot, ".claude", "skills", ".venv", "Scripts", "python.exe");
44
- const python = process.platform === "win32" ? venvPythonWin : venvPython;
45
- // Probe 1: can we import playwright?
46
- const importProbe = spawnSync(python, ["-c", "import playwright"], {
47
- encoding: "utf-8",
48
- stdio: ["pipe", "pipe", "pipe"],
49
- });
50
- if (importProbe.status !== 0) {
51
- return {
52
- status: "MISSING_PACKAGE",
53
- message: "playwright Python package not installed — run: npx mewkit setup --system-deps",
54
- };
55
- }
56
- // Probe 2: is the Chromium binary installed?
57
- // playwright install --dry-run chromium exits 0 and prints "chromium" if installed
58
- const venvPlaywright = process.platform === "win32"
59
- ? path.join(ctx.projectRoot, ".claude", "skills", ".venv", "Scripts", "playwright.exe")
60
- : path.join(ctx.projectRoot, ".claude", "skills", ".venv", "bin", "playwright");
61
- const dryRunProbe = spawnSync(venvPlaywright, ["install", "--dry-run", "chromium"], {
62
- encoding: "utf-8",
63
- stdio: ["pipe", "pipe", "pipe"],
64
- });
65
- // --dry-run output contains "chromium" when already installed (no-op)
66
- // If it returns non-zero or output doesn't mention chromium, binary is missing
67
- const combinedOutput = (dryRunProbe.stdout ?? "") + (dryRunProbe.stderr ?? "");
68
- if (dryRunProbe.status !== 0 || !combinedOutput.toLowerCase().includes("chromium")) {
69
- return {
70
- status: "MISSING_BINARY",
71
- message: "Chromium binary not installed — run: npx mewkit setup --system-deps",
72
- };
73
- }
74
- return { status: "OK" };
75
- }
76
- /**
77
- * All registered system dependencies.
78
- * Insertion order = display order in prompts (ffmpeg, imagemagick, playwright-chromium).
79
- */
80
- export const SYSTEM_DEPS = {
81
- ffmpeg: {
82
- key: "ffmpeg",
83
- name: "FFmpeg",
84
- detectCommand: "ffmpeg",
85
- installCommands: {
86
- darwin: ["brew install ffmpeg"],
87
- linux: [
88
- // apt-get
89
- "apt-get install -y ffmpeg",
90
- // dnf fallback handled at runtime in setup.ts by checking available pkg manager
91
- ],
92
- win32: [],
93
- },
94
- manualUrl: "https://ffmpeg.org/download.html",
95
- sizeBytes: 50_000_000,
96
- },
97
- imagemagick: {
98
- key: "imagemagick",
99
- name: "ImageMagick",
100
- // IM 6 ships "convert"; IM 7+ ships "magick" with no "convert" shim.
101
- // detectCommands ensures presence is detected regardless of which version is installed.
102
- detectCommand: "convert",
103
- detectCommands: ["convert", "magick"],
104
- installCommands: {
105
- darwin: ["brew install imagemagick"],
106
- linux: ["apt-get install -y imagemagick"],
107
- win32: [],
108
- },
109
- manualUrl: "https://imagemagick.org/script/download.php",
110
- sizeBytes: 20_000_000,
111
- },
112
- // Playwright version: 1.58.0 — pinned from PyPI on 2026-04-09 via WebFetch
113
- // Source: https://pypi.org/pypi/playwright/json → info.version = "1.58.0"
114
- "playwright-chromium": {
115
- key: "playwright-chromium",
116
- name: "Playwright + Chromium",
117
- // Detect by importing the Python package (not a PATH command)
118
- detectCommand: ".claude/skills/.venv/bin/python3 -c 'import playwright'",
119
- installCommands: {
120
- darwin: [
121
- ".claude/skills/.venv/bin/pip install playwright==1.58.0",
122
- ".claude/skills/.venv/bin/playwright install chromium",
123
- ],
124
- linux: [
125
- ".claude/skills/.venv/bin/pip install playwright==1.58.0",
126
- ".claude/skills/.venv/bin/playwright install chromium",
127
- ],
128
- win32: [
129
- ".claude\\skills\\.venv\\Scripts\\pip install playwright==1.58.0",
130
- ".claude\\skills\\.venv\\Scripts\\playwright install chromium",
131
- ],
132
- },
133
- sizeBytes: 200_000_000,
134
- manualUrl: "https://playwright.dev/python/docs/intro",
135
- doctorCheck: playwrightDoctorCheck,
136
- },
137
- };
138
- // ---------------------------------------------------------------------------
139
- // Helpers
140
- // ---------------------------------------------------------------------------
141
- /** Return all registered entries in insertion order */
142
- export function listDeps() {
143
- return Object.values(SYSTEM_DEPS);
144
- }
145
- /**
146
- * Check whether a PATH-based dep's binary (or any of its aliases) is present.
147
- * Uses detectCommands when set (multi-probe); falls back to single detectCommand probe.
148
- *
149
- * NOT suitable for venv-based deps (playwright-chromium) — callers must handle
150
- * those separately (detectCommand includes ".venv").
151
- */
152
- export function isDepCommandPresent(dep, commandAvailableFn) {
153
- const probes = dep.detectCommands ?? [dep.detectCommand];
154
- return probes.some((cmd) => commandAvailableFn(cmd));
155
- }
156
- /** Look up a single entry by key */
157
- export function getDep(key) {
158
- return SYSTEM_DEPS[key];
159
- }
160
- /**
161
- * Validate keys declared in a skill's optional_system_deps against the registry.
162
- * Unknown keys are rejected to prevent skills from requesting arbitrary installs.
163
- *
164
- * @param declared Keys parsed from SKILL.md optional_system_deps comment
165
- * @param skillName Used in warning messages for traceability
166
- */
167
- export function validateSkillDeclaredKeys(declared, skillName) {
168
- const valid = [];
169
- const invalid = [];
170
- for (const key of declared) {
171
- if (SYSTEM_DEPS[key]) {
172
- valid.push(key);
173
- }
174
- else {
175
- console.warn(`[mewkit] Skill "${skillName}" declares unknown system dep "${key}" — ignored. ` +
176
- `Register it in lib/system-deps-registry.ts to allow installation.`);
177
- invalid.push(key);
178
- }
179
- }
180
- return { valid, invalid };
181
- }
182
- /**
183
- * Parse optional_system_deps from a SKILL.md HTML comment block.
184
- *
185
- * PARSE CONTRACT:
186
- * The parser looks for a comment starting with "MEOWKIT METADATA" and extracts
187
- * the "optional_system_deps:" line from it. Handles both single-line and
188
- * multi-line YAML-ish list formats:
189
- *
190
- * optional_system_deps: [playwright-chromium]
191
- * optional_system_deps: [playwright-chromium, ffmpeg]
192
- *
193
- * Multi-line YAML block format (not currently used but handled):
194
- * optional_system_deps:
195
- * - playwright-chromium
196
- *
197
- * Returns an empty array if the comment or field is absent.
198
- *
199
- * WHY NOT NATIVE FRONTMATTER (Q4 decision):
200
- * Claude Code's frontmatter schema only supports a fixed set of native fields.
201
- * Custom fields like optional_system_deps are silently dropped. The HTML comment
202
- * approach is the agreed MeowKit convention for skill metadata that the CLI needs
203
- * but Claude Code should ignore.
204
- */
205
- export function parseOptionalSystemDepsFromSkillMd(skillMdContent) {
206
- // Find the MEOWKIT METADATA comment block
207
- const commentMatch = skillMdContent.match(/<!--\s*\n\s*MEOWKIT METADATA[\s\S]*?-->/);
208
- if (!commentMatch)
209
- return [];
210
- const block = commentMatch[0];
211
- // Inline bracket format: optional_system_deps: [key1, key2]
212
- const inlineMatch = block.match(/optional_system_deps:\s*\[([^\]]*)\]/);
213
- if (inlineMatch) {
214
- const raw = inlineMatch[1] ?? "";
215
- return raw
216
- .split(",")
217
- .map((s) => s.trim())
218
- .filter((s) => s.length > 0);
219
- }
220
- // Multi-line YAML block format:
221
- // optional_system_deps:
222
- // - key1
223
- // - key2
224
- const blockMatch = block.match(/optional_system_deps:\s*\n((?:\s*-\s*\S+\s*\n?)+)/);
225
- if (blockMatch) {
226
- const lines = blockMatch[1] ?? "";
227
- return lines
228
- .split("\n")
229
- .map((l) => l.replace(/^\s*-\s*/, "").trim())
230
- .filter((s) => s.length > 0);
231
- }
232
- return [];
233
- }
234
- //# sourceMappingURL=system-deps-registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"system-deps-registry.js","sourceRoot":"","sources":["../../src/lib/system-deps-registry.ts"],"names":[],"mappings":"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"}