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 ADDED
@@ -0,0 +1,61 @@
1
+ # mewkit
2
+
3
+ Runtime CLI for [MeowKit](https://github.com/ngocsangyem/MeowKit) — manage your AI agent toolkit after installation.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install -g mewkit
9
+ ```
10
+
11
+ Or use directly:
12
+
13
+ ```bash
14
+ npx mewkit <command>
15
+ ```
16
+
17
+ ## Commands
18
+
19
+ | Command | Description |
20
+ |---------|-------------|
21
+ | `meowkit doctor` | Diagnose environment (Node.js, Python, Git, `.claude/` structure) |
22
+ | `meowkit setup` | Guided configuration (Python venv, MCP, .env, .gitignore) |
23
+ | `meowkit upgrade` | Update to latest version (`--check`, `--beta`, `--list`) |
24
+ | `meowkit validate` | Verify `.claude/` structure integrity |
25
+ | `meowkit budget` | Token usage and cost tracking (`--monthly`) |
26
+ | `meowkit memory` | View/manage cross-session memory (`--show`, `--stats`, `--clear`) |
27
+ | `meowkit status` | Print version, channel, and config |
28
+ | `meowkit task new` | Create structured task file from template |
29
+ | `meowkit task list` | List active tasks with status |
30
+
31
+ ## Usage
32
+
33
+ ```bash
34
+ # Post-install setup
35
+ meowkit setup
36
+
37
+ # Check environment
38
+ meowkit doctor
39
+
40
+ # Upgrade MeowKit
41
+ meowkit upgrade # Latest stable
42
+ meowkit upgrade --beta # Latest beta
43
+ meowkit upgrade --check # Check without installing
44
+ meowkit upgrade --list # Show all available versions
45
+
46
+ # View token costs
47
+ meowkit budget --monthly
48
+
49
+ # Manage memory
50
+ meowkit memory --show # Display lessons learned
51
+ meowkit memory --clear # Reset memory
52
+ ```
53
+
54
+ ## Related
55
+
56
+ - [create-meowkit](https://www.npmjs.com/package/create-meowkit) — Scaffold CLI (`npm create meowkit@latest`)
57
+ - [GitHub](https://github.com/ngocsangyem/MeowKit)
58
+
59
+ ## License
60
+
61
+ MIT
@@ -0,0 +1,6 @@
1
+ interface BudgetArgs {
2
+ monthly?: boolean;
3
+ }
4
+ export declare function budget(args: BudgetArgs): Promise<void>;
5
+ export {};
6
+ //# sourceMappingURL=budget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget.d.ts","sourceRoot":"","sources":["../../src/commands/budget.ts"],"names":[],"mappings":"AAYA,UAAU,UAAU;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAgED,wBAAsB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA6C5D"}
@@ -0,0 +1,95 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import pc from "picocolors";
4
+ function findCostLog() {
5
+ let current = process.cwd();
6
+ while (true) {
7
+ const candidate = path.join(current, ".claude", "memory", "cost-log.json");
8
+ if (fs.existsSync(candidate)) {
9
+ return candidate;
10
+ }
11
+ const parent = path.dirname(current);
12
+ if (parent === current) {
13
+ return null;
14
+ }
15
+ current = parent;
16
+ }
17
+ }
18
+ function readCostLog(logPath) {
19
+ const content = fs.readFileSync(logPath, "utf-8");
20
+ const parsed = JSON.parse(content);
21
+ if (!Array.isArray(parsed)) {
22
+ throw new Error("cost-log.json must contain an array");
23
+ }
24
+ return parsed;
25
+ }
26
+ function padEnd(str, len) {
27
+ return str.length >= len ? str.slice(0, len) : str + " ".repeat(len - str.length);
28
+ }
29
+ function padStart(str, len) {
30
+ return str.length >= len ? str : " ".repeat(len - str.length) + str;
31
+ }
32
+ function printTable(entries) {
33
+ const header = ` ${padEnd("Date", 12)}${padEnd("Command", 16)}${padEnd("Tier", 10)}${padStart("Tokens", 12)} ${padEnd("Task", 30)}`;
34
+ console.log(pc.bold(header));
35
+ console.log(pc.dim(" " + "-".repeat(80)));
36
+ for (const entry of entries) {
37
+ const line = ` ${padEnd(entry.date, 12)}${padEnd(entry.command, 16)}${padEnd(entry.tier, 10)}${padStart(String(entry.estimated_tokens), 12)} ${padEnd(entry.task, 30)}`;
38
+ console.log(line);
39
+ }
40
+ }
41
+ function aggregateByMonth(entries) {
42
+ const monthly = new Map();
43
+ for (const entry of entries) {
44
+ const month = entry.date.slice(0, 7); // YYYY-MM
45
+ const existing = monthly.get(month) ?? { tokens: 0, count: 0 };
46
+ existing.tokens += entry.estimated_tokens;
47
+ existing.count += 1;
48
+ monthly.set(month, existing);
49
+ }
50
+ console.log(pc.bold(` ${padEnd("Month", 12)}${padStart("Entries", 10)}${padStart("Tokens", 14)}`));
51
+ console.log(pc.dim(" " + "-".repeat(36)));
52
+ for (const [month, data] of monthly) {
53
+ console.log(` ${padEnd(month, 12)}${padStart(String(data.count), 10)}${padStart(String(data.tokens), 14)}`);
54
+ }
55
+ }
56
+ export async function budget(args) {
57
+ console.log(pc.bold(pc.cyan("Token Budget & Cost Log")));
58
+ console.log();
59
+ const logPath = findCostLog();
60
+ if (!logPath) {
61
+ console.error(pc.red("Could not find .claude/memory/cost-log.json"));
62
+ console.log(pc.dim("Run a meowkit agent command first to generate cost data."));
63
+ process.exit(1);
64
+ }
65
+ console.log(`${pc.dim("Source:")} ${logPath}`);
66
+ console.log();
67
+ let entries;
68
+ try {
69
+ entries = readCostLog(logPath);
70
+ }
71
+ catch (error) {
72
+ const message = error instanceof Error ? error.message : String(error);
73
+ console.error(pc.red(`Failed to read cost log: ${message}`));
74
+ process.exit(1);
75
+ }
76
+ if (entries.length === 0) {
77
+ console.log(pc.dim("No cost entries recorded yet."));
78
+ return;
79
+ }
80
+ if (args.monthly) {
81
+ aggregateByMonth(entries);
82
+ }
83
+ else {
84
+ const recent = entries.slice(-10);
85
+ if (entries.length > 10) {
86
+ console.log(pc.dim(`Showing last 10 of ${entries.length} entries`));
87
+ console.log();
88
+ }
89
+ printTable(recent);
90
+ }
91
+ console.log();
92
+ const totalTokens = entries.reduce((sum, e) => sum + e.estimated_tokens, 0);
93
+ console.log(`${pc.bold("Total estimated tokens:")} ${pc.cyan(totalTokens.toLocaleString())}`);
94
+ }
95
+ //# sourceMappingURL=budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget.js","sourceRoot":"","sources":["../../src/commands/budget.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function doctor(args?: {
2
+ report?: boolean;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAqNA,wBAAsB,MAAM,CAAC,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA2DvE"}
@@ -0,0 +1,248 @@
1
+ import { execSync } from "node:child_process";
2
+ import fs, { chmodSync } from "node:fs";
3
+ import path from "node:path";
4
+ import pc from "picocolors";
5
+ function statusIcon(status) {
6
+ switch (status) {
7
+ case "pass": return pc.green("PASS");
8
+ case "fail": return pc.red("FAIL");
9
+ case "warn": return pc.yellow("WARN");
10
+ }
11
+ }
12
+ /** Find MeowKit project root — checks cwd only (no walk-up to avoid matching parent projects). */
13
+ function findProjectRoot() {
14
+ const cwd = process.cwd();
15
+ const hasDotClaude = fs.existsSync(path.join(cwd, ".claude"));
16
+ const hasConfig = fs.existsSync(path.join(cwd, ".claude", "meowkit.config.json"));
17
+ const hasManifest = fs.existsSync(path.join(cwd, ".claude", "meowkit.manifest.json"));
18
+ const hasClaude = fs.existsSync(path.join(cwd, "CLAUDE.md"));
19
+ if (hasDotClaude || hasConfig || hasManifest || hasClaude) {
20
+ return cwd;
21
+ }
22
+ return null;
23
+ }
24
+ // --- Check functions: each takes projectRoot (may be null) ---
25
+ function checkNodeVersion() {
26
+ const major = parseInt(process.versions.node.split(".")[0] ?? "0", 10);
27
+ if (major >= 20) {
28
+ return { name: "Node.js >= 20", status: "pass", detail: `v${process.versions.node}` };
29
+ }
30
+ return { name: "Node.js >= 20", status: "fail", detail: `v${process.versions.node} — need 20+` };
31
+ }
32
+ function checkPython() {
33
+ for (const cmd of ["python3 --version", "python --version"]) {
34
+ try {
35
+ const output = execSync(cmd, { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] }).trim();
36
+ const match = output.match(/Python (\d+)\.(\d+)/);
37
+ if (match) {
38
+ const major = parseInt(match[1] ?? "0", 10);
39
+ const minor = parseInt(match[2] ?? "0", 10);
40
+ if (major >= 3 && minor >= 9) {
41
+ return { name: "Python 3.9+", status: "pass", detail: output };
42
+ }
43
+ return { name: "Python 3.9+", status: "fail", detail: `${output} — need 3.9+` };
44
+ }
45
+ }
46
+ catch { /* try next */ }
47
+ }
48
+ return { name: "Python 3.9+", status: "warn", detail: "Not found in PATH" };
49
+ }
50
+ function checkGit() {
51
+ try {
52
+ const output = execSync("git --version", { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] }).trim();
53
+ return { name: "Git", status: "pass", detail: output };
54
+ }
55
+ catch {
56
+ return { name: "Git", status: "fail", detail: "Not found in PATH" };
57
+ }
58
+ }
59
+ function checkClaudeDir(root) {
60
+ if (!root) {
61
+ return {
62
+ name: ".claude/ directory",
63
+ status: "warn",
64
+ detail: "No MeowKit project found — run 'npm create meowkit' to scaffold",
65
+ };
66
+ }
67
+ const claudeDir = path.join(root, ".claude");
68
+ if (fs.existsSync(claudeDir)) {
69
+ return { name: ".claude/ directory", status: "pass", detail: claudeDir };
70
+ }
71
+ return {
72
+ name: ".claude/ directory",
73
+ status: "warn",
74
+ detail: "Project found but .claude/ missing — run 'npm create meowkit' to scaffold",
75
+ fix: "npm create meowkit",
76
+ };
77
+ }
78
+ function checkHooks(root) {
79
+ if (!root)
80
+ return { name: "Hooks", status: "warn", detail: "Skipped — no project" };
81
+ const hooksDir = path.join(root, ".claude", "hooks");
82
+ if (!fs.existsSync(hooksDir)) {
83
+ return { name: "Hooks", status: "warn", detail: "No hooks/ directory" };
84
+ }
85
+ const hooks = fs.readdirSync(hooksDir).filter((f) => !f.startsWith("."));
86
+ if (hooks.length === 0) {
87
+ return { name: "Hooks", status: "warn", detail: "No hook files" };
88
+ }
89
+ const nonExec = [];
90
+ for (const h of hooks) {
91
+ try {
92
+ fs.accessSync(path.join(hooksDir, h), fs.constants.X_OK);
93
+ }
94
+ catch {
95
+ nonExec.push(h);
96
+ }
97
+ }
98
+ if (nonExec.length === 0) {
99
+ return { name: "Hooks", status: "pass", detail: `${hooks.length} hook(s), all executable` };
100
+ }
101
+ // Auto-fix permissions
102
+ let fixed = 0;
103
+ for (const h of nonExec) {
104
+ try {
105
+ chmodSync(path.join(hooksDir, h), 0o755);
106
+ fixed++;
107
+ }
108
+ catch { /* can't fix */ }
109
+ }
110
+ if (fixed === nonExec.length) {
111
+ return { name: "Hooks", status: "pass", detail: `${hooks.length} hook(s) — auto-fixed ${fixed} permission(s)` };
112
+ }
113
+ return {
114
+ name: "Hooks",
115
+ status: "fail",
116
+ detail: `${nonExec.length - fixed} not executable: ${nonExec.join(", ")}`,
117
+ fix: "chmod +x .claude/hooks/*",
118
+ };
119
+ }
120
+ function checkScripts(root) {
121
+ if (!root)
122
+ return { name: "Scripts", status: "warn", detail: "Skipped — no project" };
123
+ const scriptsDir = path.join(root, ".claude", "scripts");
124
+ if (!fs.existsSync(scriptsDir)) {
125
+ return { name: "Scripts", status: "warn", detail: "No scripts/ directory" };
126
+ }
127
+ const expected = ["validate.py", "security-scan.py", "checklist.py", "injection-audit.py"];
128
+ const missing = expected.filter((s) => !fs.existsSync(path.join(scriptsDir, s)));
129
+ if (missing.length === 0) {
130
+ return { name: "Scripts", status: "pass", detail: `${expected.length} validation scripts found` };
131
+ }
132
+ return { name: "Scripts", status: "warn", detail: `Missing: ${missing.join(", ")}` };
133
+ }
134
+ function checkMemory(root) {
135
+ if (!root)
136
+ return { name: "Memory", status: "warn", detail: "Skipped — no project" };
137
+ const memDir = path.join(root, ".claude", "memory");
138
+ if (!fs.existsSync(memDir)) {
139
+ return { name: "Memory", status: "warn", detail: "memory/ not found — will be created on first session" };
140
+ }
141
+ try {
142
+ const test = path.join(memDir, ".doctor-test");
143
+ fs.writeFileSync(test, "test", "utf-8");
144
+ fs.unlinkSync(test);
145
+ return { name: "Memory", status: "pass", detail: "Writable" };
146
+ }
147
+ catch {
148
+ return { name: "Memory", status: "fail", detail: `${memDir} is not writable` };
149
+ }
150
+ }
151
+ function checkMcp(root) {
152
+ if (!root)
153
+ return { name: "MCP config", status: "warn", detail: "Skipped — no project" };
154
+ if (fs.existsSync(path.join(root, ".mcp.json"))) {
155
+ return { name: "MCP config", status: "pass", detail: ".mcp.json found" };
156
+ }
157
+ return {
158
+ name: "MCP config",
159
+ status: "warn",
160
+ detail: "No .mcp.json",
161
+ fix: "meowkit setup --only=mcp",
162
+ };
163
+ }
164
+ function checkVenv(root) {
165
+ if (!root)
166
+ return { name: "Skills venv", status: "warn", detail: "Skipped — no project" };
167
+ const venvDir = path.join(root, ".claude", "skills", ".venv");
168
+ if (fs.existsSync(venvDir)) {
169
+ return { name: "Skills venv", status: "pass", detail: venvDir };
170
+ }
171
+ return {
172
+ name: "Skills venv",
173
+ status: "warn",
174
+ detail: "No Python venv for skills",
175
+ fix: "meowkit setup --only=venv",
176
+ };
177
+ }
178
+ function checkConfig(root) {
179
+ if (!root)
180
+ return { name: "Config", status: "warn", detail: "Skipped — no project" };
181
+ const configPath = path.join(root, ".claude", "meowkit.config.json");
182
+ if (!fs.existsSync(configPath)) {
183
+ return { name: "Config", status: "warn", detail: ".claude/meowkit.config.json not found" };
184
+ }
185
+ try {
186
+ JSON.parse(fs.readFileSync(configPath, "utf-8"));
187
+ return { name: "Config", status: "pass", detail: ".claude/meowkit.config.json valid" };
188
+ }
189
+ catch {
190
+ return { name: "Config", status: "fail", detail: ".claude/meowkit.config.json is invalid JSON" };
191
+ }
192
+ }
193
+ export async function doctor(args) {
194
+ console.log(pc.bold(pc.cyan("MeowKit Doctor")));
195
+ console.log(pc.dim("Diagnosing common issues...\n"));
196
+ const root = findProjectRoot();
197
+ if (root) {
198
+ console.log(` ${pc.dim("Project:")} ${root}\n`);
199
+ }
200
+ const results = [
201
+ checkNodeVersion(),
202
+ checkPython(),
203
+ checkGit(),
204
+ checkClaudeDir(root),
205
+ checkConfig(root),
206
+ checkHooks(root),
207
+ checkScripts(root),
208
+ checkMemory(root),
209
+ checkMcp(root),
210
+ checkVenv(root),
211
+ ];
212
+ for (const r of results) {
213
+ console.log(` [${statusIcon(r.status)}] ${r.name}`);
214
+ console.log(` ${pc.dim(r.detail)}`);
215
+ if (r.fix) {
216
+ console.log(` ${pc.cyan(`Fix: ${r.fix}`)}`);
217
+ }
218
+ }
219
+ console.log();
220
+ const pass = results.filter((r) => r.status === "pass").length;
221
+ const fail = results.filter((r) => r.status === "fail").length;
222
+ const warn = results.filter((r) => r.status === "warn").length;
223
+ const parts = [pc.green(`${pass} passed`)];
224
+ if (warn > 0)
225
+ parts.push(pc.yellow(`${warn} warnings`));
226
+ if (fail > 0)
227
+ parts.push(pc.red(`${fail} failed`));
228
+ console.log(parts.join(", "));
229
+ if (args?.report) {
230
+ const lines = [
231
+ "# MeowKit Doctor Report",
232
+ `Date: ${new Date().toISOString()}`,
233
+ `Node: ${process.versions.node}`,
234
+ `Platform: ${process.platform} ${process.arch}`,
235
+ `Project: ${root ?? "not found"}`,
236
+ "",
237
+ "## Results",
238
+ ...results.map((r) => `- [${r.status.toUpperCase()}] ${r.name}: ${r.detail}${r.fix ? ` (fix: ${r.fix})` : ""}`),
239
+ "",
240
+ `## Summary: ${pass} passed, ${warn} warnings, ${fail} failed`,
241
+ ];
242
+ console.log(pc.dim("\n--- Report ---"));
243
+ console.log(lines.join("\n"));
244
+ }
245
+ if (fail > 0)
246
+ process.exit(1);
247
+ }
248
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ interface MemoryArgs {
2
+ clear?: boolean;
3
+ show?: boolean;
4
+ stats?: boolean;
5
+ }
6
+ export declare function memory(args: MemoryArgs): Promise<void>;
7
+ export {};
8
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/commands/memory.ts"],"names":[],"mappings":"AAKA,UAAU,UAAU;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAiKD,wBAAsB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB5D"}
@@ -0,0 +1,159 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import readline from "node:readline";
4
+ import pc from "picocolors";
5
+ function findMemoryDir() {
6
+ let current = process.cwd();
7
+ while (true) {
8
+ const candidate = path.join(current, ".claude", "memory");
9
+ if (fs.existsSync(candidate) && fs.statSync(candidate).isDirectory()) {
10
+ return candidate;
11
+ }
12
+ const parent = path.dirname(current);
13
+ if (parent === current) {
14
+ return null;
15
+ }
16
+ current = parent;
17
+ }
18
+ }
19
+ function promptConfirmation(question) {
20
+ const rl = readline.createInterface({
21
+ input: process.stdin,
22
+ output: process.stdout,
23
+ });
24
+ return new Promise((resolve) => {
25
+ rl.question(question, (answer) => {
26
+ rl.close();
27
+ resolve(answer.toLowerCase() === "y" || answer.toLowerCase() === "yes");
28
+ });
29
+ });
30
+ }
31
+ async function clearMemory(memoryDir) {
32
+ const confirmed = await promptConfirmation(pc.yellow("This will clear all learned patterns and lessons. Continue? (y/N) "));
33
+ if (!confirmed) {
34
+ console.log(pc.dim("Aborted."));
35
+ return;
36
+ }
37
+ const patternsPath = path.join(memoryDir, "patterns.json");
38
+ const lessonsPath = path.join(memoryDir, "lessons.md");
39
+ if (fs.existsSync(patternsPath)) {
40
+ fs.writeFileSync(patternsPath, "[]", "utf-8");
41
+ console.log(` ${pc.green("Cleared")} patterns.json`);
42
+ }
43
+ if (fs.existsSync(lessonsPath)) {
44
+ fs.writeFileSync(lessonsPath, "", "utf-8");
45
+ console.log(` ${pc.green("Cleared")} lessons.md`);
46
+ }
47
+ console.log();
48
+ console.log(pc.green("Memory cleared."));
49
+ }
50
+ function showLessons(memoryDir) {
51
+ const lessonsPath = path.join(memoryDir, "lessons.md");
52
+ if (!fs.existsSync(lessonsPath)) {
53
+ console.log(pc.dim("No lessons.md file found."));
54
+ return;
55
+ }
56
+ const content = fs.readFileSync(lessonsPath, "utf-8");
57
+ if (content.trim().length === 0) {
58
+ console.log(pc.dim("lessons.md is empty."));
59
+ return;
60
+ }
61
+ console.log(pc.bold("Lessons:"));
62
+ console.log();
63
+ console.log(content);
64
+ }
65
+ function showStats(memoryDir) {
66
+ const patternsPath = path.join(memoryDir, "patterns.json");
67
+ const lessonsPath = path.join(memoryDir, "lessons.md");
68
+ let sessionsCount = 0;
69
+ let patternsCount = 0;
70
+ let lastUpdated = "unknown";
71
+ if (fs.existsSync(patternsPath)) {
72
+ try {
73
+ const content = fs.readFileSync(patternsPath, "utf-8");
74
+ const patterns = JSON.parse(content);
75
+ patternsCount = patterns.length;
76
+ // Find latest timestamp
77
+ for (const p of patterns) {
78
+ if (p.timestamp && p.timestamp > lastUpdated) {
79
+ lastUpdated = p.timestamp;
80
+ }
81
+ }
82
+ }
83
+ catch {
84
+ // Ignore parse errors
85
+ }
86
+ }
87
+ if (fs.existsSync(lessonsPath)) {
88
+ const content = fs.readFileSync(lessonsPath, "utf-8");
89
+ // Count sessions by counting level-2 headings or non-empty sections
90
+ const headings = content.match(/^## /gm);
91
+ sessionsCount = headings ? headings.length : 0;
92
+ }
93
+ // Check file modification time as fallback for last updated
94
+ if (lastUpdated === "unknown") {
95
+ const files = [patternsPath, lessonsPath].filter((f) => fs.existsSync(f));
96
+ for (const file of files) {
97
+ const stat = fs.statSync(file);
98
+ const mtime = stat.mtime.toISOString();
99
+ if (mtime > lastUpdated || lastUpdated === "unknown") {
100
+ lastUpdated = mtime;
101
+ }
102
+ }
103
+ }
104
+ console.log(pc.bold("Memory Stats:"));
105
+ console.log(` ${pc.dim("Sessions captured:")} ${pc.cyan(String(sessionsCount))}`);
106
+ console.log(` ${pc.dim("Patterns learned:")} ${pc.cyan(String(patternsCount))}`);
107
+ console.log(` ${pc.dim("Last updated:")} ${pc.cyan(lastUpdated === "unknown" ? "never" : lastUpdated)}`);
108
+ }
109
+ function showSummary(memoryDir) {
110
+ const patternsPath = path.join(memoryDir, "patterns.json");
111
+ const lessonsPath = path.join(memoryDir, "lessons.md");
112
+ console.log(pc.bold("Memory Summary:"));
113
+ console.log();
114
+ if (fs.existsSync(lessonsPath)) {
115
+ const content = fs.readFileSync(lessonsPath, "utf-8");
116
+ const lineCount = content.trim().length === 0 ? 0 : content.split("\n").length;
117
+ console.log(` ${pc.dim("lessons.md:")} ${pc.cyan(`${lineCount} lines`)}`);
118
+ }
119
+ else {
120
+ console.log(` ${pc.dim("lessons.md:")} ${pc.yellow("not found")}`);
121
+ }
122
+ if (fs.existsSync(patternsPath)) {
123
+ try {
124
+ const content = fs.readFileSync(patternsPath, "utf-8");
125
+ const patterns = JSON.parse(content);
126
+ console.log(` ${pc.dim("patterns.json:")} ${pc.cyan(`${patterns.length} entries`)}`);
127
+ }
128
+ catch {
129
+ console.log(` ${pc.dim("patterns.json:")} ${pc.red("invalid JSON")}`);
130
+ }
131
+ }
132
+ else {
133
+ console.log(` ${pc.dim("patterns.json:")} ${pc.yellow("not found")}`);
134
+ }
135
+ }
136
+ export async function memory(args) {
137
+ console.log(pc.bold(pc.cyan("Agent Memory")));
138
+ console.log();
139
+ const memoryDir = findMemoryDir();
140
+ if (!memoryDir) {
141
+ console.error(pc.red("Could not find .claude/memory/ directory."));
142
+ process.exit(1);
143
+ }
144
+ console.log(`${pc.dim("Location:")} ${memoryDir}`);
145
+ console.log();
146
+ if (args.clear) {
147
+ await clearMemory(memoryDir);
148
+ }
149
+ else if (args.show) {
150
+ showLessons(memoryDir);
151
+ }
152
+ else if (args.stats) {
153
+ showStats(memoryDir);
154
+ }
155
+ else {
156
+ showSummary(memoryDir);
157
+ }
158
+ }
159
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/commands/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** Run setup steps. --only=<step> runs a single step. */
2
+ export declare function setup(args: {
3
+ only?: string;
4
+ }): void;
5
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AA8IA,yDAAyD;AACzD,wBAAgB,KAAK,CAAC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAqCnD"}