mewkit 1.0.0

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.
@@ -0,0 +1,139 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import pc from "picocolors";
4
+ /** Find MeowKit .claude/ in cwd only (no walk-up). */
5
+ function findMeowkitDir(startDir) {
6
+ const candidate = path.join(startDir, ".claude");
7
+ if (fs.existsSync(candidate) && fs.statSync(candidate).isDirectory()) {
8
+ return candidate;
9
+ }
10
+ return null;
11
+ }
12
+ function checkFileExists(meowkitDir, relativePath) {
13
+ const fullPath = path.join(meowkitDir, relativePath);
14
+ const exists = fs.existsSync(fullPath);
15
+ return {
16
+ name: `File exists: ${relativePath}`,
17
+ passed: exists,
18
+ detail: exists ? fullPath : `Missing: ${fullPath}`,
19
+ };
20
+ }
21
+ function checkDirExists(meowkitDir, relativePath) {
22
+ const fullPath = path.join(meowkitDir, relativePath);
23
+ const exists = fs.existsSync(fullPath) && fs.statSync(fullPath).isDirectory();
24
+ return {
25
+ name: `Directory exists: ${relativePath}`,
26
+ passed: exists,
27
+ detail: exists ? fullPath : `Missing: ${fullPath}`,
28
+ };
29
+ }
30
+ function checkHooksExecutable(meowkitDir) {
31
+ const hooksDir = path.join(meowkitDir, "hooks");
32
+ const results = [];
33
+ if (!fs.existsSync(hooksDir)) {
34
+ results.push({
35
+ name: "Hooks directory",
36
+ passed: false,
37
+ detail: `Missing: ${hooksDir}`,
38
+ });
39
+ return results;
40
+ }
41
+ const hookFiles = fs.readdirSync(hooksDir).filter((f) => !f.startsWith("."));
42
+ if (hookFiles.length === 0) {
43
+ results.push({
44
+ name: "Hooks present",
45
+ passed: false,
46
+ detail: "No hook files found in hooks/",
47
+ });
48
+ return results;
49
+ }
50
+ for (const hook of hookFiles) {
51
+ const hookPath = path.join(hooksDir, hook);
52
+ try {
53
+ fs.accessSync(hookPath, fs.constants.X_OK);
54
+ results.push({
55
+ name: `Hook executable: ${hook}`,
56
+ passed: true,
57
+ detail: hookPath,
58
+ });
59
+ }
60
+ catch {
61
+ results.push({
62
+ name: `Hook executable: ${hook}`,
63
+ passed: false,
64
+ detail: `Not executable: ${hookPath}`,
65
+ });
66
+ }
67
+ }
68
+ return results;
69
+ }
70
+ function checkConfigJson(meowkitDir) {
71
+ const configPath = path.join(meowkitDir, "meowkit.config.json");
72
+ if (!fs.existsSync(configPath)) {
73
+ return {
74
+ name: "Config JSON valid",
75
+ passed: false,
76
+ detail: `Missing: ${configPath}`,
77
+ };
78
+ }
79
+ try {
80
+ const content = fs.readFileSync(configPath, "utf-8");
81
+ JSON.parse(content);
82
+ return {
83
+ name: "Config JSON valid",
84
+ passed: true,
85
+ detail: configPath,
86
+ };
87
+ }
88
+ catch (error) {
89
+ const message = error instanceof Error ? error.message : String(error);
90
+ return {
91
+ name: "Config JSON valid",
92
+ passed: false,
93
+ detail: `Invalid JSON: ${message}`,
94
+ };
95
+ }
96
+ }
97
+ function printResult(result) {
98
+ const icon = result.passed ? pc.green("PASS") : pc.red("FAIL");
99
+ console.log(` [${icon}] ${result.name}`);
100
+ if (!result.passed) {
101
+ console.log(` ${pc.dim(result.detail)}`);
102
+ }
103
+ }
104
+ export async function validate() {
105
+ console.log(pc.bold(pc.cyan("Validating .claude/ project structure...")));
106
+ console.log();
107
+ const meowkitDir = findMeowkitDir(process.cwd());
108
+ if (!meowkitDir) {
109
+ console.error(pc.red("Could not find .claude/ directory in current or parent directories."));
110
+ process.exit(1);
111
+ }
112
+ console.log(`${pc.dim("Found:")} ${meowkitDir}`);
113
+ console.log();
114
+ const results = [];
115
+ // Required directories
116
+ results.push(checkDirExists(meowkitDir, "agents"));
117
+ results.push(checkDirExists(meowkitDir, "hooks"));
118
+ // CLAUDE.md lives at project root (Claude Code reads it from there)
119
+ const projectRoot = path.dirname(meowkitDir);
120
+ results.push(checkFileExists(projectRoot, "CLAUDE.md"));
121
+ // Hooks executable
122
+ results.push(...checkHooksExecutable(meowkitDir));
123
+ // Config JSON
124
+ results.push(checkConfigJson(meowkitDir));
125
+ for (const result of results) {
126
+ printResult(result);
127
+ }
128
+ console.log();
129
+ const passCount = results.filter((r) => r.passed).length;
130
+ const failCount = results.filter((r) => !r.passed).length;
131
+ if (failCount === 0) {
132
+ console.log(pc.green(pc.bold(`All ${passCount} checks passed.`)));
133
+ }
134
+ else {
135
+ console.log(`${pc.green(`${passCount} passed`)}, ${pc.red(`${failCount} failed`)}`);
136
+ process.exit(1);
137
+ }
138
+ }
139
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,YAAY,CAAC;AAQ5B,sDAAsD;AACtD,SAAS,cAAc,CAAC,QAAgB;IACtC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACjD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACrE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,eAAe,CAAC,UAAkB,EAAE,YAAoB;IAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACvC,OAAO;QACL,IAAI,EAAE,gBAAgB,YAAY,EAAE;QACpC,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,QAAQ,EAAE;KACnD,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,UAAkB,EAAE,YAAoB;IAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9E,OAAO;QACL,IAAI,EAAE,qBAAqB,YAAY,EAAE;QACzC,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,QAAQ,EAAE;KACnD,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,UAAkB;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAChD,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,iBAAiB;YACvB,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,YAAY,QAAQ,EAAE;SAC/B,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,SAAS,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAE7E,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,+BAA+B;SACxC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC;YACH,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,oBAAoB,IAAI,EAAE;gBAChC,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,QAAQ;aACjB,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,oBAAoB,IAAI,EAAE;gBAChC,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,mBAAmB,QAAQ,EAAE;aACtC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,eAAe,CAAC,UAAkB;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC;IAChE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO;YACL,IAAI,EAAE,mBAAmB;YACzB,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,YAAY,UAAU,EAAE;SACjC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACpB,OAAO;YACL,IAAI,EAAE,mBAAmB;YACzB,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,UAAU;SACnB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO;YACL,IAAI,EAAE,mBAAmB;YACzB,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,iBAAiB,OAAO,EAAE;SACnC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,MAAmB;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC5B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAEjD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC,CAAC;QAC7F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,OAAO,GAAkB,EAAE,CAAC;IAElC,uBAAuB;IACvB,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAElD,oEAAoE;IACpE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;IAExD,mBAAmB;IACnB,OAAO,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC;IAElD,cAAc;IACd,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;IAE1C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,WAAW,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;IACzD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;IAE1D,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,SAAS,iBAAiB,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CACT,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,SAAS,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,SAAS,CAAC,EAAE,CACvE,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,121 @@
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 { upgrade } from "./commands/upgrade.js";
8
+ import { validate } from "./commands/validate.js";
9
+ import { budget } from "./commands/budget.js";
10
+ import { memory } from "./commands/memory.js";
11
+ import { doctor } from "./commands/doctor.js";
12
+ import { setup } from "./commands/setup.js";
13
+ import { task } from "./commands/task.js";
14
+ const __dirname = dirname(fileURLToPath(import.meta.url));
15
+ const pkgJson = JSON.parse(fs.readFileSync(join(__dirname, "..", "package.json"), "utf-8"));
16
+ const VERSION = pkgJson.version;
17
+ function printHelp() {
18
+ console.log(`
19
+ ${pc.bold(pc.cyan("meowkit"))} ${pc.dim(`v${VERSION}`)} — MeowKit runtime CLI
20
+
21
+ ${pc.bold("Usage:")}
22
+ meowkit <command> [options]
23
+
24
+ ${pc.bold("Commands:")}
25
+ ${pc.green("upgrade")} Upgrade create-meowkit to the latest version
26
+ ${pc.green("validate")} Validate .claude/ project structure
27
+ ${pc.green("budget")} View token usage and cost log
28
+ ${pc.green("memory")} Manage agent memory (lessons & patterns)
29
+ ${pc.green("setup")} Guided post-scaffold configuration
30
+ ${pc.green("doctor")} Diagnose common environment issues
31
+ ${pc.green("status")} Print version and config summary
32
+ ${pc.green("task")} Create and list task files (new, list)
33
+
34
+ ${pc.bold("Options:")}
35
+ --help, -h Show help
36
+ --version, -v Show version
37
+ `);
38
+ }
39
+ async function printStatus() {
40
+ const channel = VERSION.includes("-beta") || VERSION.includes("-rc") ? "beta" : "stable";
41
+ console.log(`${pc.bold(pc.cyan("meowkit"))} ${pc.dim(`v${VERSION}`)} ${pc.dim(`(${channel})`)}`);
42
+ console.log();
43
+ const configPath = ".claude/meowkit.config.json";
44
+ try {
45
+ const content = fs.readFileSync(configPath, "utf-8");
46
+ const config = JSON.parse(content);
47
+ console.log(`${pc.bold("Config:")} ${configPath}`);
48
+ for (const [key, value] of Object.entries(config)) {
49
+ console.log(` ${pc.dim(key)}: ${String(value)}`);
50
+ }
51
+ }
52
+ catch {
53
+ console.log(`${pc.dim("No .claude/meowkit.config.json found.")}`);
54
+ }
55
+ }
56
+ async function main() {
57
+ const args = minimist(process.argv.slice(2), {
58
+ boolean: ["help", "version", "check", "beta", "list", "monthly", "clear", "show", "stats", "report", "all"],
59
+ string: ["only", "type", "priority", "status"],
60
+ alias: { h: "help", v: "version" },
61
+ });
62
+ if (args.version) {
63
+ console.log(VERSION);
64
+ return;
65
+ }
66
+ const command = args._[0];
67
+ if (args.help && !command) {
68
+ printHelp();
69
+ return;
70
+ }
71
+ switch (command) {
72
+ case "upgrade":
73
+ await upgrade({ check: args.check, beta: args.beta, list: args.list });
74
+ break;
75
+ case "validate":
76
+ await validate();
77
+ break;
78
+ case "budget":
79
+ await budget({ monthly: args.monthly });
80
+ break;
81
+ case "memory":
82
+ await memory({ clear: args.clear, show: args.show, stats: args.stats });
83
+ break;
84
+ case "setup":
85
+ setup({ only: args.only });
86
+ break;
87
+ case "doctor":
88
+ await doctor({ report: args.report });
89
+ break;
90
+ case "status":
91
+ await printStatus();
92
+ break;
93
+ case "task": {
94
+ const subcommand = args._[1];
95
+ // positional description: everything after the subcommand that isn't a flag
96
+ const description = args._.slice(2).join(" ");
97
+ task({
98
+ subcommand,
99
+ type: args.type,
100
+ priority: args.priority,
101
+ all: args.all,
102
+ status: args.status,
103
+ description: description || undefined,
104
+ });
105
+ break;
106
+ }
107
+ default:
108
+ if (command) {
109
+ console.error(pc.red(`Unknown command: ${command}`));
110
+ console.log();
111
+ }
112
+ printHelp();
113
+ break;
114
+ }
115
+ }
116
+ main().catch((error) => {
117
+ const message = error instanceof Error ? error.message : String(error);
118
+ console.error(pc.red(`Fatal: ${message}`));
119
+ process.exit(1);
120
+ });
121
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /** Output modes controlled by --json and --verbose flags */
2
+ interface LoggerOptions {
3
+ json: boolean;
4
+ verbose: boolean;
5
+ }
6
+ /** Initialize logger with CLI flags. Call once at startup. */
7
+ export declare function initLogger(opts: Partial<LoggerOptions> & {
8
+ command?: string;
9
+ }): void;
10
+ /** Info message (always shown in text mode, accumulated in json mode) */
11
+ export declare function info(msg: string): void;
12
+ /** Success message with green checkmark */
13
+ export declare function success(msg: string): void;
14
+ /** Warning message */
15
+ export declare function warn(msg: string): void;
16
+ /** Error message. Sets json output success=false. */
17
+ export declare function error(msg: string): void;
18
+ /** Debug message (only in --verbose mode) */
19
+ export declare function debug(msg: string): void;
20
+ /** Set structured data for json output */
21
+ export declare function setData(key: string, value: unknown): void;
22
+ /** Flush json output at end of command. No-op in text mode. */
23
+ export declare function flush(): void;
24
+ /** Check if json mode is active */
25
+ export declare function isJson(): boolean;
26
+ export {};
package/dist/logger.js ADDED
@@ -0,0 +1,70 @@
1
+ import pc from "picocolors";
2
+ let options = { json: false, verbose: false };
3
+ let jsonOutput = { success: true, command: "", data: {}, messages: [] };
4
+ /** Initialize logger with CLI flags. Call once at startup. */
5
+ export function initLogger(opts) {
6
+ options = { json: opts.json ?? false, verbose: opts.verbose ?? false };
7
+ jsonOutput = { success: true, command: opts.command ?? "", data: {}, messages: [] };
8
+ }
9
+ /** Info message (always shown in text mode, accumulated in json mode) */
10
+ export function info(msg) {
11
+ if (options.json) {
12
+ jsonOutput.messages.push({ level: "info", text: msg });
13
+ }
14
+ else {
15
+ console.log(msg);
16
+ }
17
+ }
18
+ /** Success message with green checkmark */
19
+ export function success(msg) {
20
+ if (options.json) {
21
+ jsonOutput.messages.push({ level: "success", text: msg });
22
+ }
23
+ else {
24
+ console.log(`${pc.green("✓")} ${msg}`);
25
+ }
26
+ }
27
+ /** Warning message */
28
+ export function warn(msg) {
29
+ if (options.json) {
30
+ jsonOutput.messages.push({ level: "warn", text: msg });
31
+ }
32
+ else {
33
+ console.warn(pc.yellow(`⚠ ${msg}`));
34
+ }
35
+ }
36
+ /** Error message. Sets json output success=false. */
37
+ export function error(msg) {
38
+ jsonOutput.success = false;
39
+ if (options.json) {
40
+ jsonOutput.messages.push({ level: "error", text: msg });
41
+ }
42
+ else {
43
+ console.error(pc.red(`✗ ${msg}`));
44
+ }
45
+ }
46
+ /** Debug message (only in --verbose mode) */
47
+ export function debug(msg) {
48
+ if (options.json) {
49
+ if (options.verbose)
50
+ jsonOutput.messages.push({ level: "debug", text: msg });
51
+ }
52
+ else if (options.verbose) {
53
+ console.log(pc.dim(`[debug] ${msg}`));
54
+ }
55
+ }
56
+ /** Set structured data for json output */
57
+ export function setData(key, value) {
58
+ jsonOutput.data[key] = value;
59
+ }
60
+ /** Flush json output at end of command. No-op in text mode. */
61
+ export function flush() {
62
+ if (options.json) {
63
+ console.log(JSON.stringify(jsonOutput, null, 2));
64
+ }
65
+ }
66
+ /** Check if json mode is active */
67
+ export function isJson() {
68
+ return options.json;
69
+ }
70
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "mewkit",
3
+ "version": "1.0.0",
4
+ "description": "MeowKit runtime CLI — upgrade, validate, budget, memory, doctor",
5
+ "type": "module",
6
+ "bin": {
7
+ "meowkit": "./dist/index.js"
8
+ },
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "scripts": {
13
+ "build": "tsc",
14
+ "prepublishOnly": "npm run build",
15
+ "dev": "tsc --watch"
16
+ },
17
+ "dependencies": {
18
+ "picocolors": "^1.1.0",
19
+ "minimist": "^1.2.8"
20
+ },
21
+ "devDependencies": {
22
+ "@types/minimist": "^1.2.5",
23
+ "@types/node": "^20.14.0",
24
+ "typescript": "^5.5.0"
25
+ },
26
+ "engines": {
27
+ "node": ">=20"
28
+ },
29
+ "license": "MIT"
30
+ }