athar-mcp 0.1.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.
Files changed (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +242 -0
  3. package/dist/cli/commands/list.d.ts +10 -0
  4. package/dist/cli/commands/list.d.ts.map +1 -0
  5. package/dist/cli/commands/list.js +73 -0
  6. package/dist/cli/commands/list.js.map +1 -0
  7. package/dist/cli/commands/review.d.ts +2 -0
  8. package/dist/cli/commands/review.d.ts.map +1 -0
  9. package/dist/cli/commands/review.js +112 -0
  10. package/dist/cli/commands/review.js.map +1 -0
  11. package/dist/cli/commands/setup.d.ts +2 -0
  12. package/dist/cli/commands/setup.d.ts.map +1 -0
  13. package/dist/cli/commands/setup.js +55 -0
  14. package/dist/cli/commands/setup.js.map +1 -0
  15. package/dist/cli/commands/status.d.ts +2 -0
  16. package/dist/cli/commands/status.d.ts.map +1 -0
  17. package/dist/cli/commands/status.js +39 -0
  18. package/dist/cli/commands/status.js.map +1 -0
  19. package/dist/cli/index.d.ts +12 -0
  20. package/dist/cli/index.d.ts.map +1 -0
  21. package/dist/cli/index.js +43 -0
  22. package/dist/cli/index.js.map +1 -0
  23. package/dist/db/connection.d.ts +11 -0
  24. package/dist/db/connection.d.ts.map +1 -0
  25. package/dist/db/connection.js +49 -0
  26. package/dist/db/connection.js.map +1 -0
  27. package/dist/db/schema.d.ts +12 -0
  28. package/dist/db/schema.d.ts.map +1 -0
  29. package/dist/db/schema.js +95 -0
  30. package/dist/db/schema.js.map +1 -0
  31. package/dist/index.d.ts +19 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +48 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/server.d.ts +7 -0
  36. package/dist/server.d.ts.map +1 -0
  37. package/dist/server.js +139 -0
  38. package/dist/server.js.map +1 -0
  39. package/dist/smoke-test.d.ts +7 -0
  40. package/dist/smoke-test.d.ts.map +1 -0
  41. package/dist/smoke-test.js +99 -0
  42. package/dist/smoke-test.js.map +1 -0
  43. package/dist/spaced-repetition/scheduler.d.ts +46 -0
  44. package/dist/spaced-repetition/scheduler.d.ts.map +1 -0
  45. package/dist/spaced-repetition/scheduler.js +98 -0
  46. package/dist/spaced-repetition/scheduler.js.map +1 -0
  47. package/dist/spaced-repetition/sm2.d.ts +36 -0
  48. package/dist/spaced-repetition/sm2.d.ts.map +1 -0
  49. package/dist/spaced-repetition/sm2.js +90 -0
  50. package/dist/spaced-repetition/sm2.js.map +1 -0
  51. package/dist/tools/memory.d.ts +25 -0
  52. package/dist/tools/memory.d.ts.map +1 -0
  53. package/dist/tools/memory.js +112 -0
  54. package/dist/tools/memory.js.map +1 -0
  55. package/dist/tools/save-lesson.d.ts +11 -0
  56. package/dist/tools/save-lesson.d.ts.map +1 -0
  57. package/dist/tools/save-lesson.js +137 -0
  58. package/dist/tools/save-lesson.js.map +1 -0
  59. package/dist/tools/validators.d.ts +82 -0
  60. package/dist/tools/validators.d.ts.map +1 -0
  61. package/dist/tools/validators.js +86 -0
  62. package/dist/tools/validators.js.map +1 -0
  63. package/dist/utils/logger.d.ts +23 -0
  64. package/dist/utils/logger.d.ts.map +1 -0
  65. package/dist/utils/logger.js +55 -0
  66. package/dist/utils/logger.js.map +1 -0
  67. package/dist/utils/paths.d.ts +17 -0
  68. package/dist/utils/paths.d.ts.map +1 -0
  69. package/dist/utils/paths.js +43 -0
  70. package/dist/utils/paths.js.map +1 -0
  71. package/package.json +60 -0
@@ -0,0 +1,86 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Zod schema for the save_lesson tool input.
4
+ * Enforces structured, high-quality lesson data from the AI assistant.
5
+ */
6
+ export const SaveLessonSchema = z.object({
7
+ title: z
8
+ .string()
9
+ .min(10, 'Title must be at least 10 characters — be specific about the mistake pattern')
10
+ .max(200)
11
+ .describe('Concise title describing the mistake pattern (e.g., "React useEffect cleanup race condition")'),
12
+ problem: z
13
+ .string()
14
+ .min(20, 'Problem description must be detailed enough to be useful')
15
+ .describe('What went wrong — the symptom observed by the developer'),
16
+ error_message: z
17
+ .string()
18
+ .optional()
19
+ .describe('Exact error message, stack trace snippet, or compiler error if applicable'),
20
+ root_cause: z
21
+ .string()
22
+ .min(20, 'Root cause must explain WHY, not just WHAT')
23
+ .describe('The actual root cause — WHY this happened, not just what happened'),
24
+ bad_code: z
25
+ .string()
26
+ .optional()
27
+ .describe('The incorrect code snippet that caused the problem'),
28
+ good_code: z
29
+ .string()
30
+ .optional()
31
+ .describe('The corrected code snippet showing the fix'),
32
+ lesson: z
33
+ .string()
34
+ .min(20, 'Lesson must be a meaningful takeaway')
35
+ .describe('The key takeaway — what to always remember to avoid this mistake'),
36
+ tags: z
37
+ .array(z.string().min(1).max(30))
38
+ .min(1, 'At least one tag is required for categorization')
39
+ .max(10)
40
+ .describe('Categorization tags (e.g., ["async", "react", "typescript", "race-condition"])'),
41
+ language: z
42
+ .string()
43
+ .optional()
44
+ .describe('Programming language (e.g., "typescript", "python", "rust")'),
45
+ file_path: z
46
+ .string()
47
+ .optional()
48
+ .describe('File path where the error occurred'),
49
+ git_diff: z
50
+ .string()
51
+ .optional()
52
+ .describe('Git diff context showing the change that fixed the issue'),
53
+ review_questions: z
54
+ .array(z.object({
55
+ q: z.string().min(10).describe('A review question testing understanding of this lesson'),
56
+ a: z.string().min(10).describe('The expected answer'),
57
+ }))
58
+ .min(1, 'At least one review question is required')
59
+ .max(3, 'Maximum 3 review questions per lesson')
60
+ .describe('1-3 review questions to test understanding during spaced repetition reviews'),
61
+ });
62
+ /**
63
+ * Zod schema for the memory (search) tool input.
64
+ */
65
+ export const MemorySchema = z.object({
66
+ query: z
67
+ .string()
68
+ .min(2)
69
+ .describe('Search query — error pattern, keyword, tag name, or natural language description'),
70
+ limit: z
71
+ .number()
72
+ .int()
73
+ .min(1)
74
+ .max(10)
75
+ .default(3)
76
+ .describe('Maximum number of results to return (default: 3)'),
77
+ language: z
78
+ .string()
79
+ .optional()
80
+ .describe('Filter results by programming language'),
81
+ tags: z
82
+ .array(z.string())
83
+ .optional()
84
+ .describe('Filter results by tags (matches any)'),
85
+ });
86
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/tools/validators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Logger utility for Athar.
3
+ *
4
+ * CRITICAL: In MCP servers using stdio transport, stdout is the JSON-RPC channel.
5
+ * ALL logging MUST go to stderr. Using console.log() would corrupt the protocol.
6
+ */
7
+ declare class Logger {
8
+ private context;
9
+ private isVerbose;
10
+ constructor(context: string);
11
+ private write;
12
+ debug(message: string, ...args: unknown[]): void;
13
+ info(message: string, ...args: unknown[]): void;
14
+ warn(message: string, ...args: unknown[]): void;
15
+ error(message: string, ...args: unknown[]): void;
16
+ }
17
+ /**
18
+ * Create a namespaced logger instance.
19
+ * @param context - Module name (e.g., 'server', 'db', 'save-lesson')
20
+ */
21
+ export declare function createLogger(context: string): Logger;
22
+ export {};
23
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,cAAM,MAAM;IACV,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAU;gBAEf,OAAO,EAAE,MAAM;IAK3B,OAAO,CAAC,KAAK;IAgBb,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAIhD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI/C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI/C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;CAGjD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpD"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Logger utility for Athar.
3
+ *
4
+ * CRITICAL: In MCP servers using stdio transport, stdout is the JSON-RPC channel.
5
+ * ALL logging MUST go to stderr. Using console.log() would corrupt the protocol.
6
+ */
7
+ const LOG_COLORS = {
8
+ debug: '\x1b[90m', // gray
9
+ info: '\x1b[36m', // cyan
10
+ warn: '\x1b[33m', // yellow
11
+ error: '\x1b[31m', // red
12
+ };
13
+ const RESET = '\x1b[0m';
14
+ class Logger {
15
+ context;
16
+ isVerbose;
17
+ constructor(context) {
18
+ this.context = context;
19
+ this.isVerbose = process.env.ATHAR_DEBUG === '1' || process.env.ATHAR_DEBUG === 'true';
20
+ }
21
+ write(level, message, ...args) {
22
+ if (level === 'debug' && !this.isVerbose)
23
+ return;
24
+ const timestamp = new Date().toISOString().slice(11, 23); // HH:mm:ss.SSS
25
+ const color = LOG_COLORS[level];
26
+ const prefix = `${color}[${timestamp}] [${level.toUpperCase()}] [${this.context}]${RESET}`;
27
+ // Always write to stderr — never stdout
28
+ process.stderr.write(`${prefix} ${message}\n`);
29
+ if (args.length > 0) {
30
+ for (const arg of args) {
31
+ process.stderr.write(` ${typeof arg === 'string' ? arg : JSON.stringify(arg, null, 2)}\n`);
32
+ }
33
+ }
34
+ }
35
+ debug(message, ...args) {
36
+ this.write('debug', message, ...args);
37
+ }
38
+ info(message, ...args) {
39
+ this.write('info', message, ...args);
40
+ }
41
+ warn(message, ...args) {
42
+ this.write('warn', message, ...args);
43
+ }
44
+ error(message, ...args) {
45
+ this.write('error', message, ...args);
46
+ }
47
+ }
48
+ /**
49
+ * Create a namespaced logger instance.
50
+ * @param context - Module name (e.g., 'server', 'db', 'save-lesson')
51
+ */
52
+ export function createLogger(context) {
53
+ return new Logger(context);
54
+ }
55
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,UAAU,GAA6B;IAC3C,KAAK,EAAE,UAAU,EAAG,OAAO;IAC3B,IAAI,EAAE,UAAU,EAAI,OAAO;IAC3B,IAAI,EAAE,UAAU,EAAI,SAAS;IAC7B,KAAK,EAAE,UAAU,EAAG,MAAM;CAC3B,CAAC;AAEF,MAAM,KAAK,GAAG,SAAS,CAAC;AAExB,MAAM,MAAM;IACF,OAAO,CAAS;IAChB,SAAS,CAAU;IAE3B,YAAY,OAAe;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC;IACzF,CAAC;IAEO,KAAK,CAAC,KAAe,EAAE,OAAe,EAAE,GAAG,IAAe;QAChE,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAEjD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe;QACzE,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,GAAG,KAAK,IAAI,SAAS,MAAM,KAAK,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,OAAO,IAAI,KAAK,EAAE,CAAC;QAE3F,wCAAwC;QACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,OAAO,IAAI,CAAC,CAAC;QAC/C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC9F,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;QACvC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;QACvC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IACxC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * XDG-compliant data directory for Athar.
3
+ *
4
+ * Linux: ~/.local/share/athar/
5
+ * macOS: ~/Library/Application Support/athar/
6
+ * Windows: %APPDATA%/athar/
7
+ */
8
+ export declare function getDataDir(): string;
9
+ /**
10
+ * Full path to the SQLite database file.
11
+ */
12
+ export declare function getDatabasePath(): string;
13
+ /**
14
+ * Path to the Antigravity IDE MCP config file.
15
+ */
16
+ export declare function getMcpConfigPath(): string;
17
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAqBnC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAGzC"}
@@ -0,0 +1,43 @@
1
+ import { homedir, platform } from 'node:os';
2
+ import { join } from 'node:path';
3
+ import { mkdirSync, existsSync } from 'node:fs';
4
+ /**
5
+ * XDG-compliant data directory for Athar.
6
+ *
7
+ * Linux: ~/.local/share/athar/
8
+ * macOS: ~/Library/Application Support/athar/
9
+ * Windows: %APPDATA%/athar/
10
+ */
11
+ export function getDataDir() {
12
+ const home = homedir();
13
+ let dataDir;
14
+ switch (platform()) {
15
+ case 'darwin':
16
+ dataDir = join(home, 'Library', 'Application Support', 'athar');
17
+ break;
18
+ case 'win32':
19
+ dataDir = join(process.env.APPDATA || join(home, 'AppData', 'Roaming'), 'athar');
20
+ break;
21
+ default: // linux, freebsd, etc.
22
+ dataDir = join(process.env.XDG_DATA_HOME || join(home, '.local', 'share'), 'athar');
23
+ break;
24
+ }
25
+ if (!existsSync(dataDir)) {
26
+ mkdirSync(dataDir, { recursive: true });
27
+ }
28
+ return dataDir;
29
+ }
30
+ /**
31
+ * Full path to the SQLite database file.
32
+ */
33
+ export function getDatabasePath() {
34
+ return join(getDataDir(), 'lessons.db');
35
+ }
36
+ /**
37
+ * Path to the Antigravity IDE MCP config file.
38
+ */
39
+ export function getMcpConfigPath() {
40
+ const home = homedir();
41
+ return join(home, '.gemini', 'config', 'mcp_config.json');
42
+ }
43
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEhD;;;;;;GAMG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,IAAI,OAAe,CAAC;IAEpB,QAAQ,QAAQ,EAAE,EAAE,CAAC;QACnB,KAAK,QAAQ;YACX,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,qBAAqB,EAAE,OAAO,CAAC,CAAC;YAChE,MAAM;QACR,KAAK,OAAO;YACV,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;YACjF,MAAM;QACR,SAAS,uBAAuB;YAC9B,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;YACpF,MAAM;IACV,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE,YAAY,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;AAC5D,CAAC"}
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "athar-mcp",
3
+ "version": "0.1.0",
4
+ "description": "أثر — AI-powered programming lesson memory with spaced repetition. An MCP server that captures lessons from coding sessions and helps you never repeat the same mistake.",
5
+ "type": "module",
6
+ "bin": {
7
+ "athar": "./dist/cli/index.js",
8
+ "athar-mcp": "./dist/index.js"
9
+ },
10
+ "main": "./dist/index.js",
11
+ "files": [
12
+ "dist"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "dev": "tsx src/index.ts",
17
+ "dev:cli": "tsx src/cli/index.ts",
18
+ "test": "node --test",
19
+ "prepublishOnly": "npm run build",
20
+ "typecheck": "tsc --noEmit"
21
+ },
22
+ "keywords": [
23
+ "mcp",
24
+ "model-context-protocol",
25
+ "spaced-repetition",
26
+ "learning",
27
+ "programming-lessons",
28
+ "ai-assistant",
29
+ "antigravity",
30
+ "cli",
31
+ "sqlite",
32
+ "local-first"
33
+ ],
34
+ "author": "Ameen",
35
+ "license": "MIT",
36
+ "repository": {
37
+ "type": "git",
38
+ "url": "https://github.com/ameenmv/athar.git"
39
+ },
40
+ "homepage": "https://github.com/ameenmv/athar#readme",
41
+ "bugs": {
42
+ "url": "https://github.com/ameenmv/athar/issues"
43
+ },
44
+ "dependencies": {
45
+ "@modelcontextprotocol/sdk": "^1.12.0",
46
+ "chalk": "^5.4.0",
47
+ "commander": "^13.0.0",
48
+ "inquirer": "^12.0.0",
49
+ "zod": "^3.24.0"
50
+ },
51
+ "devDependencies": {
52
+ "@types/node": "^22.0.0",
53
+ "tsx": "^4.19.0",
54
+ "typescript": "^5.7.0"
55
+ },
56
+ "engines": {
57
+ "node": ">=20.0.0"
58
+ }
59
+ }
60
+