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.
- package/README.md +61 -0
- package/dist/commands/budget.d.ts +6 -0
- package/dist/commands/budget.d.ts.map +1 -0
- package/dist/commands/budget.js +95 -0
- package/dist/commands/budget.js.map +1 -0
- package/dist/commands/doctor.d.ts +4 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +248 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/memory.d.ts +8 -0
- package/dist/commands/memory.d.ts.map +1 -0
- package/dist/commands/memory.js +159 -0
- package/dist/commands/memory.js.map +1 -0
- package/dist/commands/setup.d.ts +5 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +149 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/task.d.ts +10 -0
- package/dist/commands/task.d.ts.map +1 -0
- package/dist/commands/task.js +301 -0
- package/dist/commands/task.js.map +1 -0
- package/dist/commands/upgrade.d.ts +8 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +108 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/commands/validate.d.ts +2 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +139 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +121 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +26 -0
- package/dist/logger.js +70 -0
- package/dist/logger.js.map +1 -0
- package/package.json +30 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync, copyFileSync, appendFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { execSync } from "node:child_process";
|
|
4
|
+
import pc from "picocolors";
|
|
5
|
+
/** Setup Python virtual environment for MeowKit skill scripts */
|
|
6
|
+
function setupVenv(projectDir) {
|
|
7
|
+
const venvDir = join(projectDir, ".claude", "skills", ".venv");
|
|
8
|
+
if (existsSync(venvDir)) {
|
|
9
|
+
return { name: "venv", status: "skip", message: "Python venv already exists" };
|
|
10
|
+
}
|
|
11
|
+
// Check if python3 is available
|
|
12
|
+
try {
|
|
13
|
+
execSync("python3 --version", { stdio: "pipe" });
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return { name: "venv", status: "fail", message: "python3 not found. Install Python 3.9+ first." };
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
console.log(pc.dim(" Creating Python venv..."));
|
|
20
|
+
execSync(`python3 -m venv "${venvDir}"`, { stdio: "pipe" });
|
|
21
|
+
// Install common skill dependencies if requirements.txt exists
|
|
22
|
+
const reqFile = join(projectDir, ".claude", "skills", "requirements.txt");
|
|
23
|
+
if (existsSync(reqFile)) {
|
|
24
|
+
console.log(pc.dim(" Installing skill dependencies..."));
|
|
25
|
+
execSync(`"${venvDir}/bin/pip" install -r "${reqFile}"`, { stdio: "pipe" });
|
|
26
|
+
}
|
|
27
|
+
return { name: "venv", status: "pass", message: `Created at ${venvDir}` };
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
31
|
+
return { name: "venv", status: "fail", message: `Failed to create venv: ${msg}` };
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// Default file contents — used when .example files don't exist (no scaffold yet)
|
|
35
|
+
const DEFAULT_MCP = `{
|
|
36
|
+
"mcpServers": {
|
|
37
|
+
"context7": {
|
|
38
|
+
"command": "npx",
|
|
39
|
+
"args": ["-y", "@upstash/context7-mcp", "--api-key", "YOUR_API_KEY"]
|
|
40
|
+
},
|
|
41
|
+
"sequential-thinking": {
|
|
42
|
+
"command": "npx",
|
|
43
|
+
"args": ["-y", "@modelcontextprotocol/server-sequential-thinking"]
|
|
44
|
+
},
|
|
45
|
+
"playwright": {
|
|
46
|
+
"command": "npx",
|
|
47
|
+
"args": ["@playwright/mcp@latest"]
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}\n`;
|
|
51
|
+
const DEFAULT_ENV = `# MeowKit Environment Variables
|
|
52
|
+
# Never commit this file to git.
|
|
53
|
+
|
|
54
|
+
# Gemini API key (required for meow:multimodal skill)
|
|
55
|
+
# Get from: https://aistudio.google.com/apikey
|
|
56
|
+
GEMINI_API_KEY=
|
|
57
|
+
\n`;
|
|
58
|
+
const DEFAULT_GITIGNORE = `# MeowKit
|
|
59
|
+
.env
|
|
60
|
+
.env.local
|
|
61
|
+
.claude/memory/
|
|
62
|
+
.claude/logs/
|
|
63
|
+
\n`;
|
|
64
|
+
/** Setup MCP configuration */
|
|
65
|
+
function setupMcp(projectDir) {
|
|
66
|
+
const mcpTarget = join(projectDir, ".mcp.json");
|
|
67
|
+
if (existsSync(mcpTarget)) {
|
|
68
|
+
return { name: "mcp", status: "skip", message: ".mcp.json already exists" };
|
|
69
|
+
}
|
|
70
|
+
// Copy from example if available, otherwise create with defaults
|
|
71
|
+
const mcpExample = join(projectDir, ".claude", "mcp.json.example");
|
|
72
|
+
if (existsSync(mcpExample)) {
|
|
73
|
+
copyFileSync(mcpExample, mcpTarget);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
writeFileSync(mcpTarget, DEFAULT_MCP, "utf-8");
|
|
77
|
+
}
|
|
78
|
+
return { name: "mcp", status: "pass", message: "Created .mcp.json — edit API keys inside." };
|
|
79
|
+
}
|
|
80
|
+
/** Setup .env */
|
|
81
|
+
function setupEnv(projectDir) {
|
|
82
|
+
const envTarget = join(projectDir, ".env");
|
|
83
|
+
if (existsSync(envTarget)) {
|
|
84
|
+
return { name: "env", status: "skip", message: ".env already exists" };
|
|
85
|
+
}
|
|
86
|
+
const envExample = join(projectDir, ".claude", "env.example");
|
|
87
|
+
if (existsSync(envExample)) {
|
|
88
|
+
copyFileSync(envExample, envTarget);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
writeFileSync(envTarget, DEFAULT_ENV, "utf-8");
|
|
92
|
+
}
|
|
93
|
+
return { name: "env", status: "pass", message: "Created .env — add your API keys." };
|
|
94
|
+
}
|
|
95
|
+
/** Setup .gitignore with MeowKit entries */
|
|
96
|
+
function setupGitignore(projectDir) {
|
|
97
|
+
const gitignore = join(projectDir, ".gitignore");
|
|
98
|
+
// Check if already has MeowKit entries
|
|
99
|
+
if (existsSync(gitignore)) {
|
|
100
|
+
const content = readFileSync(gitignore, "utf-8");
|
|
101
|
+
if (content.includes(".claude/memory/")) {
|
|
102
|
+
return { name: "gitignore", status: "skip", message: "MeowKit entries already in .gitignore" };
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Read from .gitignore.meowkit if exists, otherwise use defaults
|
|
106
|
+
const meowkitIgnore = join(projectDir, ".claude", "gitignore.meowkit");
|
|
107
|
+
const additions = existsSync(meowkitIgnore)
|
|
108
|
+
? readFileSync(meowkitIgnore, "utf-8")
|
|
109
|
+
: DEFAULT_GITIGNORE;
|
|
110
|
+
appendFileSync(gitignore, `\n${additions}`, "utf-8");
|
|
111
|
+
return { name: "gitignore", status: "pass", message: "Appended MeowKit entries to .gitignore" };
|
|
112
|
+
}
|
|
113
|
+
const STEPS = {
|
|
114
|
+
venv: setupVenv,
|
|
115
|
+
mcp: setupMcp,
|
|
116
|
+
env: setupEnv,
|
|
117
|
+
gitignore: setupGitignore,
|
|
118
|
+
};
|
|
119
|
+
/** Run setup steps. --only=<step> runs a single step. */
|
|
120
|
+
export function setup(args) {
|
|
121
|
+
// Always use cwd. No walk-up — avoids matching ~/.claude or parent projects.
|
|
122
|
+
const dir = process.cwd();
|
|
123
|
+
const stepsToRun = args.only
|
|
124
|
+
? [args.only]
|
|
125
|
+
: Object.keys(STEPS);
|
|
126
|
+
console.log(pc.bold("\nMeowKit Setup\n"));
|
|
127
|
+
const results = [];
|
|
128
|
+
for (const stepName of stepsToRun) {
|
|
129
|
+
const fn = STEPS[stepName];
|
|
130
|
+
if (!fn) {
|
|
131
|
+
console.error(pc.red(`Unknown step: ${stepName}. Available: ${Object.keys(STEPS).join(", ")}`));
|
|
132
|
+
process.exit(1);
|
|
133
|
+
}
|
|
134
|
+
const result = fn(dir);
|
|
135
|
+
results.push(result);
|
|
136
|
+
const icon = result.status === "pass" ? pc.green("✓")
|
|
137
|
+
: result.status === "skip" ? pc.yellow("○")
|
|
138
|
+
: pc.red("✗");
|
|
139
|
+
console.log(` ${icon} ${pc.bold(stepName)}: ${result.message}`);
|
|
140
|
+
}
|
|
141
|
+
const passed = results.filter((r) => r.status === "pass").length;
|
|
142
|
+
const skipped = results.filter((r) => r.status === "skip").length;
|
|
143
|
+
const failed = results.filter((r) => r.status === "fail").length;
|
|
144
|
+
console.log(`\n ${pc.bold("Summary:")} ${passed} configured, ${skipped} skipped, ${failed} failed`);
|
|
145
|
+
if (failed > 0) {
|
|
146
|
+
process.exit(1);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/commands/task.ts"],"names":[],"mappings":"AA6UA,MAAM,WAAW,QAAQ;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAmCzC"}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import pc from "picocolors";
|
|
4
|
+
// ── Helpers ──────────────────────────────────────────────────────────────────
|
|
5
|
+
/** Format today as YYMMDD */
|
|
6
|
+
function todayYYMMDD() {
|
|
7
|
+
const d = new Date();
|
|
8
|
+
const yy = String(d.getFullYear()).slice(2);
|
|
9
|
+
const mm = String(d.getMonth() + 1).padStart(2, "0");
|
|
10
|
+
const dd = String(d.getDate()).padStart(2, "0");
|
|
11
|
+
return `${yy}${mm}${dd}`;
|
|
12
|
+
}
|
|
13
|
+
/** Format today as YYYY-MM-DD for frontmatter */
|
|
14
|
+
function todayISO() {
|
|
15
|
+
return new Date().toISOString().slice(0, 10);
|
|
16
|
+
}
|
|
17
|
+
/** Convert description to kebab-case slug */
|
|
18
|
+
function toKebab(text) {
|
|
19
|
+
return text
|
|
20
|
+
.toLowerCase()
|
|
21
|
+
.replace(/[^a-z0-9\s-]/g, "")
|
|
22
|
+
.trim()
|
|
23
|
+
.replace(/\s+/g, "-")
|
|
24
|
+
.replace(/-+/g, "-")
|
|
25
|
+
.slice(0, 60);
|
|
26
|
+
}
|
|
27
|
+
/** Walk up from cwd looking for tasks/active/ directory */
|
|
28
|
+
function findTasksDir() {
|
|
29
|
+
let current = process.cwd();
|
|
30
|
+
while (true) {
|
|
31
|
+
const candidate = path.join(current, "tasks", "active");
|
|
32
|
+
if (fs.existsSync(candidate) && fs.statSync(candidate).isDirectory()) {
|
|
33
|
+
return candidate;
|
|
34
|
+
}
|
|
35
|
+
const parent = path.dirname(current);
|
|
36
|
+
if (parent === current)
|
|
37
|
+
return null;
|
|
38
|
+
current = parent;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/** Walk up from cwd looking for tasks/ root (for --all scan) */
|
|
42
|
+
function findTasksRoot() {
|
|
43
|
+
let current = process.cwd();
|
|
44
|
+
while (true) {
|
|
45
|
+
const candidate = path.join(current, "tasks");
|
|
46
|
+
if (fs.existsSync(candidate) && fs.statSync(candidate).isDirectory()) {
|
|
47
|
+
return candidate;
|
|
48
|
+
}
|
|
49
|
+
const parent = path.dirname(current);
|
|
50
|
+
if (parent === current)
|
|
51
|
+
return null;
|
|
52
|
+
current = parent;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/** Parse YAML-style frontmatter between --- fences */
|
|
56
|
+
function parseFrontmatter(content) {
|
|
57
|
+
const match = /^---\n([\s\S]*?)\n---/.exec(content);
|
|
58
|
+
if (!match)
|
|
59
|
+
return {};
|
|
60
|
+
const result = {};
|
|
61
|
+
for (const line of match[1].split("\n")) {
|
|
62
|
+
const colonIdx = line.indexOf(":");
|
|
63
|
+
if (colonIdx === -1)
|
|
64
|
+
continue;
|
|
65
|
+
const key = line.slice(0, colonIdx).trim();
|
|
66
|
+
const val = line.slice(colonIdx + 1).trim().replace(/^"(.*)"$/, "$1");
|
|
67
|
+
if (key === "title")
|
|
68
|
+
result.title = val;
|
|
69
|
+
else if (key === "type")
|
|
70
|
+
result.type = val;
|
|
71
|
+
else if (key === "status")
|
|
72
|
+
result.status = val;
|
|
73
|
+
else if (key === "priority")
|
|
74
|
+
result.priority = val;
|
|
75
|
+
else if (key === "created")
|
|
76
|
+
result.created = val;
|
|
77
|
+
}
|
|
78
|
+
return result;
|
|
79
|
+
}
|
|
80
|
+
/** Walk a directory recursively collecting .md file paths */
|
|
81
|
+
function collectMdFiles(dir) {
|
|
82
|
+
const results = [];
|
|
83
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
84
|
+
const full = path.join(dir, entry.name);
|
|
85
|
+
if (entry.isDirectory()) {
|
|
86
|
+
results.push(...collectMdFiles(full));
|
|
87
|
+
}
|
|
88
|
+
else if (entry.isFile() && entry.name.endsWith(".md")) {
|
|
89
|
+
results.push(full);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return results;
|
|
93
|
+
}
|
|
94
|
+
/** Map template type to file suffix used in naming */
|
|
95
|
+
function typeSuffix(type) {
|
|
96
|
+
const map = {
|
|
97
|
+
feature: "feature",
|
|
98
|
+
"bug-fix": "bug",
|
|
99
|
+
refactor: "refactor",
|
|
100
|
+
security: "security",
|
|
101
|
+
};
|
|
102
|
+
return map[type];
|
|
103
|
+
}
|
|
104
|
+
/** Read template content from .claude/tasks/templates/ relative to project root */
|
|
105
|
+
function readTemplate(type, projectRoot) {
|
|
106
|
+
const templateNames = {
|
|
107
|
+
feature: "feature-implementation.md",
|
|
108
|
+
"bug-fix": "bug-fix.md",
|
|
109
|
+
refactor: "refactor.md",
|
|
110
|
+
security: "security-audit.md",
|
|
111
|
+
};
|
|
112
|
+
// Look in .claude/tasks/templates/ or tasks/templates/ under project root
|
|
113
|
+
const candidates = [
|
|
114
|
+
path.join(projectRoot, ".claude", "tasks", "templates", templateNames[type]),
|
|
115
|
+
path.join(projectRoot, "tasks", "templates", templateNames[type]),
|
|
116
|
+
path.join(projectRoot, "system", "tasks", "templates", templateNames[type]),
|
|
117
|
+
];
|
|
118
|
+
for (const p of candidates) {
|
|
119
|
+
if (fs.existsSync(p)) {
|
|
120
|
+
return fs.readFileSync(p, "utf-8");
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
/** Find project root by looking for tasks/ directory */
|
|
126
|
+
function findProjectRoot() {
|
|
127
|
+
let current = process.cwd();
|
|
128
|
+
while (true) {
|
|
129
|
+
if (fs.existsSync(path.join(current, "tasks")))
|
|
130
|
+
return current;
|
|
131
|
+
const parent = path.dirname(current);
|
|
132
|
+
if (parent === current)
|
|
133
|
+
return process.cwd();
|
|
134
|
+
current = parent;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// ── Table helpers ────────────────────────────────────────────────────────────
|
|
138
|
+
function padEnd(str, len) {
|
|
139
|
+
const s = str ?? "";
|
|
140
|
+
return s.length >= len ? s.slice(0, len) : s + " ".repeat(len - s.length);
|
|
141
|
+
}
|
|
142
|
+
function statusColor(status) {
|
|
143
|
+
switch (status) {
|
|
144
|
+
case "done": return pc.green(padEnd(status, 12));
|
|
145
|
+
case "in-progress": return pc.cyan(padEnd(status, 12));
|
|
146
|
+
case "blocked": return pc.red(padEnd(status, 12));
|
|
147
|
+
case "review": return pc.yellow(padEnd(status, 12));
|
|
148
|
+
default: return pc.dim(padEnd(status, 12));
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
function priorityColor(priority) {
|
|
152
|
+
switch (priority) {
|
|
153
|
+
case "high": return pc.red(padEnd(priority, 8));
|
|
154
|
+
case "medium": return pc.yellow(padEnd(priority, 8));
|
|
155
|
+
case "low": return pc.dim(padEnd(priority, 8));
|
|
156
|
+
default: return pc.dim(padEnd(priority, 8));
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// ── Commands ─────────────────────────────────────────────────────────────────
|
|
160
|
+
/** meowkit task new --type feature "description" */
|
|
161
|
+
function taskNew(args) {
|
|
162
|
+
const type = args.type ?? "feature";
|
|
163
|
+
const validTypes = ["feature", "bug-fix", "refactor", "security"];
|
|
164
|
+
if (!validTypes.includes(type)) {
|
|
165
|
+
console.error(pc.red(`Invalid --type "${type}". Must be one of: ${validTypes.join(", ")}`));
|
|
166
|
+
process.exit(1);
|
|
167
|
+
}
|
|
168
|
+
const description = args.description.trim();
|
|
169
|
+
if (!description) {
|
|
170
|
+
console.error(pc.red("Description is required. Usage: meowkit task new [--type feature] \"description\""));
|
|
171
|
+
process.exit(1);
|
|
172
|
+
}
|
|
173
|
+
// Resolve destination directory — create tasks/active/ if it doesn't exist
|
|
174
|
+
let activeDir = findTasksDir();
|
|
175
|
+
if (!activeDir) {
|
|
176
|
+
// Create tasks/active/ under cwd
|
|
177
|
+
activeDir = path.join(process.cwd(), "tasks", "active");
|
|
178
|
+
fs.mkdirSync(activeDir, { recursive: true });
|
|
179
|
+
}
|
|
180
|
+
const slug = toKebab(description);
|
|
181
|
+
const suffix = typeSuffix(type);
|
|
182
|
+
const filename = `${todayYYMMDD()}-${slug}.${suffix}.md`;
|
|
183
|
+
const destPath = path.join(activeDir, filename);
|
|
184
|
+
if (fs.existsSync(destPath)) {
|
|
185
|
+
console.error(pc.red(`File already exists: ${destPath}`));
|
|
186
|
+
process.exit(1);
|
|
187
|
+
}
|
|
188
|
+
// Build frontmatter with filled-in values
|
|
189
|
+
const priority = args.priority ?? "medium";
|
|
190
|
+
const frontmatter = [
|
|
191
|
+
"---",
|
|
192
|
+
`title: "${description}"`,
|
|
193
|
+
`type: ${type}`,
|
|
194
|
+
`status: draft`,
|
|
195
|
+
`phase: 1`,
|
|
196
|
+
`priority: ${priority}`,
|
|
197
|
+
`effort: medium`,
|
|
198
|
+
`created: ${todayISO()}`,
|
|
199
|
+
`branch: ${suffix}/${slug}`,
|
|
200
|
+
`agent: ""`,
|
|
201
|
+
"---",
|
|
202
|
+
"",
|
|
203
|
+
].join("\n");
|
|
204
|
+
// Try to get template body (everything after the frontmatter)
|
|
205
|
+
const projectRoot = findProjectRoot();
|
|
206
|
+
const templateContent = readTemplate(type, projectRoot);
|
|
207
|
+
let body = "";
|
|
208
|
+
if (templateContent) {
|
|
209
|
+
// Strip template frontmatter, keep body
|
|
210
|
+
const bodyMatch = /^---\n[\s\S]*?\n---\n([\s\S]*)/.exec(templateContent);
|
|
211
|
+
body = bodyMatch ? bodyMatch[1] : templateContent;
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
body = `\n# ${description}\n\n<!-- Fill in sections from the template -->\n\n## Agent State\n\nCurrent phase: 1 — Planning\nLast action: Task file created\nNext action: Get Gate 1 approval before writing any tests or code\nBlockers: none\nDecisions made: none yet\n`;
|
|
215
|
+
}
|
|
216
|
+
fs.writeFileSync(destPath, frontmatter + body, "utf-8");
|
|
217
|
+
console.log(`\n ${pc.green("✓")} Created: ${pc.bold(destPath)}\n`);
|
|
218
|
+
}
|
|
219
|
+
/** meowkit task list [--all] [--status done] */
|
|
220
|
+
function taskList(args) {
|
|
221
|
+
const root = args.all ? findTasksRoot() : findTasksDir();
|
|
222
|
+
if (!root) {
|
|
223
|
+
console.log(pc.dim("\n No tasks/ directory found. Run from a MeowKit project.\n"));
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
const files = collectMdFiles(root);
|
|
227
|
+
if (files.length === 0) {
|
|
228
|
+
console.log(pc.dim(`\n No task files found in ${root}\n`));
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
const rows = [];
|
|
232
|
+
for (const file of files) {
|
|
233
|
+
const content = fs.readFileSync(file, "utf-8");
|
|
234
|
+
const fm = parseFrontmatter(content);
|
|
235
|
+
const status = fm.status ?? "unknown";
|
|
236
|
+
if (args.status && status !== args.status)
|
|
237
|
+
continue;
|
|
238
|
+
rows.push({
|
|
239
|
+
status,
|
|
240
|
+
type: fm.type ?? "unknown",
|
|
241
|
+
priority: fm.priority ?? "medium",
|
|
242
|
+
title: fm.title ?? path.basename(file, ".md"),
|
|
243
|
+
relPath: path.relative(process.cwd(), file),
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
if (rows.length === 0) {
|
|
247
|
+
console.log(pc.dim(`\n No tasks with status "${args.status ?? "any"}"\n`));
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
const header = ` ${pc.bold(padEnd("Status", 12))}` +
|
|
251
|
+
`${pc.bold(padEnd("Type", 14))}` +
|
|
252
|
+
`${pc.bold(padEnd("Priority", 8))}` +
|
|
253
|
+
` ${pc.bold(padEnd("Title", 40))}` +
|
|
254
|
+
` ${pc.bold("Path")}`;
|
|
255
|
+
const divider = " " + "─".repeat(100);
|
|
256
|
+
console.log(`\n${header}`);
|
|
257
|
+
console.log(divider);
|
|
258
|
+
for (const row of rows) {
|
|
259
|
+
const line = ` ${statusColor(row.status)}` +
|
|
260
|
+
`${pc.dim(padEnd(row.type, 14))}` +
|
|
261
|
+
`${priorityColor(row.priority)}` +
|
|
262
|
+
` ${padEnd(row.title, 40)}` +
|
|
263
|
+
` ${pc.dim(row.relPath)}`;
|
|
264
|
+
console.log(line);
|
|
265
|
+
}
|
|
266
|
+
console.log(`\n ${pc.dim(`${rows.length} task${rows.length === 1 ? "" : "s"} found`)}\n`);
|
|
267
|
+
}
|
|
268
|
+
export function task(args) {
|
|
269
|
+
const sub = args.subcommand;
|
|
270
|
+
switch (sub) {
|
|
271
|
+
case "new":
|
|
272
|
+
taskNew({
|
|
273
|
+
type: args.type,
|
|
274
|
+
priority: args.priority,
|
|
275
|
+
description: args.description ?? "",
|
|
276
|
+
});
|
|
277
|
+
break;
|
|
278
|
+
case "list":
|
|
279
|
+
taskList({
|
|
280
|
+
all: args.all,
|
|
281
|
+
status: args.status,
|
|
282
|
+
});
|
|
283
|
+
break;
|
|
284
|
+
default: {
|
|
285
|
+
console.log(`
|
|
286
|
+
${pc.bold("meowkit task")} — Manage task files
|
|
287
|
+
|
|
288
|
+
${pc.bold("Usage:")}
|
|
289
|
+
meowkit task new [--type feature|bug-fix|refactor|security] [--priority high|medium|low] "description"
|
|
290
|
+
meowkit task list [--all] [--status draft|in-progress|blocked|review|done]
|
|
291
|
+
|
|
292
|
+
${pc.bold("Examples:")}
|
|
293
|
+
meowkit task new "Add user authentication"
|
|
294
|
+
meowkit task new --type bug-fix --priority high "Fix null session crash"
|
|
295
|
+
meowkit task list
|
|
296
|
+
meowkit task list --all --status in-progress
|
|
297
|
+
`);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=task.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/commands/task.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AAYA,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA+BD,wBAAsB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA0F9D"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { execSync } from "node:child_process";
|
|
2
|
+
import pc from "picocolors";
|
|
3
|
+
function getLocalVersion() {
|
|
4
|
+
try {
|
|
5
|
+
const output = execSync("npm list -g create-meowkit --json 2>/dev/null", {
|
|
6
|
+
encoding: "utf-8",
|
|
7
|
+
});
|
|
8
|
+
const parsed = JSON.parse(output);
|
|
9
|
+
return parsed.dependencies?.["create-meowkit"]?.version ?? null;
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
async function fetchVersion(tag) {
|
|
16
|
+
const response = await fetch(`https://registry.npmjs.org/create-meowkit/${tag}`);
|
|
17
|
+
if (!response.ok) {
|
|
18
|
+
throw new Error(`Failed to fetch ${tag} from npm registry: ${response.statusText}`);
|
|
19
|
+
}
|
|
20
|
+
const data = (await response.json());
|
|
21
|
+
return data.version;
|
|
22
|
+
}
|
|
23
|
+
async function fetchRegistryInfo() {
|
|
24
|
+
const response = await fetch("https://registry.npmjs.org/create-meowkit");
|
|
25
|
+
if (!response.ok) {
|
|
26
|
+
throw new Error(`Failed to fetch from npm registry: ${response.statusText}`);
|
|
27
|
+
}
|
|
28
|
+
return (await response.json());
|
|
29
|
+
}
|
|
30
|
+
export async function upgrade(args) {
|
|
31
|
+
const localVersion = getLocalVersion();
|
|
32
|
+
const isBeta = localVersion?.includes("-beta") || localVersion?.includes("-rc");
|
|
33
|
+
console.log(`${pc.bold("Current version:")} ${localVersion ? pc.cyan(localVersion) : pc.dim("not installed")}${isBeta ? pc.dim(" (beta)") : ""}`);
|
|
34
|
+
// List available versions
|
|
35
|
+
if (args.list) {
|
|
36
|
+
console.log(pc.dim("Fetching available versions..."));
|
|
37
|
+
try {
|
|
38
|
+
const info = await fetchRegistryInfo();
|
|
39
|
+
const tags = info["dist-tags"];
|
|
40
|
+
const versions = Object.keys(info.versions).reverse().slice(0, 10);
|
|
41
|
+
console.log();
|
|
42
|
+
console.log(pc.bold("Channels:"));
|
|
43
|
+
console.log(` ${pc.green("stable:")} ${tags.latest ?? "none"}`);
|
|
44
|
+
if (tags.beta) {
|
|
45
|
+
console.log(` ${pc.yellow("beta:")} ${tags.beta}`);
|
|
46
|
+
}
|
|
47
|
+
console.log();
|
|
48
|
+
console.log(pc.bold("Recent versions:"));
|
|
49
|
+
for (const v of versions) {
|
|
50
|
+
const marker = v === localVersion ? pc.cyan(" (installed)") : "";
|
|
51
|
+
console.log(` ${v}${marker}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
56
|
+
console.error(pc.red(`Failed to list versions: ${message}`));
|
|
57
|
+
}
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
// Check for updates
|
|
61
|
+
if (args.check) {
|
|
62
|
+
console.log(pc.dim("Checking for updates..."));
|
|
63
|
+
try {
|
|
64
|
+
const latest = await fetchVersion("latest");
|
|
65
|
+
console.log(`${pc.bold("Latest stable:")} ${pc.green(latest)}`);
|
|
66
|
+
try {
|
|
67
|
+
const beta = await fetchVersion("beta");
|
|
68
|
+
console.log(`${pc.bold("Latest beta:")} ${pc.yellow(beta)}`);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// No beta published yet — skip
|
|
72
|
+
}
|
|
73
|
+
if (localVersion === latest) {
|
|
74
|
+
console.log(pc.green("You are on the latest stable version."));
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
console.log(pc.yellow(`Update available: ${localVersion ?? "none"} -> ${latest}`));
|
|
78
|
+
console.log(pc.dim("Run `meowkit upgrade` to install."));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
83
|
+
console.error(pc.red(`Failed to check for updates: ${message}`));
|
|
84
|
+
}
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
// Perform upgrade
|
|
88
|
+
const tag = args.beta ? "beta" : "latest";
|
|
89
|
+
const pkg = `create-meowkit@${tag}`;
|
|
90
|
+
console.log(pc.dim(`Installing ${pkg}...`));
|
|
91
|
+
try {
|
|
92
|
+
execSync(`npm install -g ${pkg}`, {
|
|
93
|
+
encoding: "utf-8",
|
|
94
|
+
stdio: "inherit",
|
|
95
|
+
});
|
|
96
|
+
const newVersion = getLocalVersion();
|
|
97
|
+
console.log();
|
|
98
|
+
console.log(pc.green(pc.bold("Upgrade complete!")));
|
|
99
|
+
console.log(` ${pc.dim("Before:")} ${localVersion ?? "not installed"}`);
|
|
100
|
+
console.log(` ${pc.dim("After:")} ${newVersion ?? "unknown"}`);
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
104
|
+
console.error(pc.red(`Upgrade failed: ${message}`));
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=upgrade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAwHA,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CA+C9C"}
|