continuum-ai-mcp 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.
Files changed (115) hide show
  1. package/README.md +274 -0
  2. package/dist/cli/index.d.ts +3 -0
  3. package/dist/cli/index.d.ts.map +1 -0
  4. package/dist/cli/index.js +125 -0
  5. package/dist/cli/index.js.map +1 -0
  6. package/dist/database/Database.d.ts +4 -0
  7. package/dist/database/Database.d.ts.map +1 -0
  8. package/dist/database/Database.js +83 -0
  9. package/dist/database/Database.js.map +1 -0
  10. package/dist/database/schema.sql +121 -0
  11. package/dist/knowledge/KnowledgeEngine.d.ts +63 -0
  12. package/dist/knowledge/KnowledgeEngine.d.ts.map +1 -0
  13. package/dist/knowledge/KnowledgeEngine.js +190 -0
  14. package/dist/knowledge/KnowledgeEngine.js.map +1 -0
  15. package/dist/languages/LanguageRegistry.d.ts +38 -0
  16. package/dist/languages/LanguageRegistry.d.ts.map +1 -0
  17. package/dist/languages/LanguageRegistry.js +233 -0
  18. package/dist/languages/LanguageRegistry.js.map +1 -0
  19. package/dist/languages/definitions/cpp.d.ts +2 -0
  20. package/dist/languages/definitions/cpp.d.ts.map +1 -0
  21. package/dist/languages/definitions/cpp.js +25 -0
  22. package/dist/languages/definitions/cpp.js.map +1 -0
  23. package/dist/languages/definitions/csharp.d.ts +2 -0
  24. package/dist/languages/definitions/csharp.d.ts.map +1 -0
  25. package/dist/languages/definitions/csharp.js +40 -0
  26. package/dist/languages/definitions/csharp.js.map +1 -0
  27. package/dist/languages/definitions/go.d.ts +2 -0
  28. package/dist/languages/definitions/go.d.ts.map +1 -0
  29. package/dist/languages/definitions/go.js +21 -0
  30. package/dist/languages/definitions/go.js.map +1 -0
  31. package/dist/languages/definitions/java.d.ts +2 -0
  32. package/dist/languages/definitions/java.d.ts.map +1 -0
  33. package/dist/languages/definitions/java.js +32 -0
  34. package/dist/languages/definitions/java.js.map +1 -0
  35. package/dist/languages/definitions/javascript.d.ts +2 -0
  36. package/dist/languages/definitions/javascript.d.ts.map +1 -0
  37. package/dist/languages/definitions/javascript.js +26 -0
  38. package/dist/languages/definitions/javascript.js.map +1 -0
  39. package/dist/languages/definitions/kotlin.d.ts +2 -0
  40. package/dist/languages/definitions/kotlin.d.ts.map +1 -0
  41. package/dist/languages/definitions/kotlin.js +36 -0
  42. package/dist/languages/definitions/kotlin.js.map +1 -0
  43. package/dist/languages/definitions/markdown.d.ts +2 -0
  44. package/dist/languages/definitions/markdown.d.ts.map +1 -0
  45. package/dist/languages/definitions/markdown.js +18 -0
  46. package/dist/languages/definitions/markdown.js.map +1 -0
  47. package/dist/languages/definitions/php.d.ts +2 -0
  48. package/dist/languages/definitions/php.d.ts.map +1 -0
  49. package/dist/languages/definitions/php.js +27 -0
  50. package/dist/languages/definitions/php.js.map +1 -0
  51. package/dist/languages/definitions/python.d.ts +2 -0
  52. package/dist/languages/definitions/python.d.ts.map +1 -0
  53. package/dist/languages/definitions/python.js +17 -0
  54. package/dist/languages/definitions/python.js.map +1 -0
  55. package/dist/languages/definitions/ruby.d.ts +2 -0
  56. package/dist/languages/definitions/ruby.d.ts.map +1 -0
  57. package/dist/languages/definitions/ruby.js +16 -0
  58. package/dist/languages/definitions/ruby.js.map +1 -0
  59. package/dist/languages/definitions/rust.d.ts +2 -0
  60. package/dist/languages/definitions/rust.d.ts.map +1 -0
  61. package/dist/languages/definitions/rust.js +28 -0
  62. package/dist/languages/definitions/rust.js.map +1 -0
  63. package/dist/languages/definitions/sql.d.ts +2 -0
  64. package/dist/languages/definitions/sql.d.ts.map +1 -0
  65. package/dist/languages/definitions/sql.js +36 -0
  66. package/dist/languages/definitions/sql.js.map +1 -0
  67. package/dist/languages/definitions/swift.d.ts +2 -0
  68. package/dist/languages/definitions/swift.d.ts.map +1 -0
  69. package/dist/languages/definitions/swift.js +40 -0
  70. package/dist/languages/definitions/swift.js.map +1 -0
  71. package/dist/languages/definitions/typescript.d.ts +2 -0
  72. package/dist/languages/definitions/typescript.d.ts.map +1 -0
  73. package/dist/languages/definitions/typescript.js +40 -0
  74. package/dist/languages/definitions/typescript.js.map +1 -0
  75. package/dist/mcp/McpServer.d.ts +2 -0
  76. package/dist/mcp/McpServer.d.ts.map +1 -0
  77. package/dist/mcp/McpServer.js +262 -0
  78. package/dist/mcp/McpServer.js.map +1 -0
  79. package/dist/parser/IncrementalParser.d.ts +25 -0
  80. package/dist/parser/IncrementalParser.d.ts.map +1 -0
  81. package/dist/parser/IncrementalParser.js +195 -0
  82. package/dist/parser/IncrementalParser.js.map +1 -0
  83. package/dist/schema/ISchemaAdapter.d.ts +20 -0
  84. package/dist/schema/ISchemaAdapter.d.ts.map +1 -0
  85. package/dist/schema/ISchemaAdapter.js +3 -0
  86. package/dist/schema/ISchemaAdapter.js.map +1 -0
  87. package/dist/schema/MssqlAdapter.d.ts +6 -0
  88. package/dist/schema/MssqlAdapter.d.ts.map +1 -0
  89. package/dist/schema/MssqlAdapter.js +139 -0
  90. package/dist/schema/MssqlAdapter.js.map +1 -0
  91. package/dist/schema/MySqlAdapter.d.ts +6 -0
  92. package/dist/schema/MySqlAdapter.d.ts.map +1 -0
  93. package/dist/schema/MySqlAdapter.js +77 -0
  94. package/dist/schema/MySqlAdapter.js.map +1 -0
  95. package/dist/schema/PostgresAdapter.d.ts +6 -0
  96. package/dist/schema/PostgresAdapter.d.ts.map +1 -0
  97. package/dist/schema/PostgresAdapter.js +78 -0
  98. package/dist/schema/PostgresAdapter.js.map +1 -0
  99. package/dist/schema/SchemaReader.d.ts +17 -0
  100. package/dist/schema/SchemaReader.d.ts.map +1 -0
  101. package/dist/schema/SchemaReader.js +82 -0
  102. package/dist/schema/SchemaReader.js.map +1 -0
  103. package/dist/session/SessionEngine.d.ts +40 -0
  104. package/dist/session/SessionEngine.d.ts.map +1 -0
  105. package/dist/session/SessionEngine.js +131 -0
  106. package/dist/session/SessionEngine.js.map +1 -0
  107. package/dist/utils/logger.d.ts +3 -0
  108. package/dist/utils/logger.d.ts.map +1 -0
  109. package/dist/utils/logger.js +54 -0
  110. package/dist/utils/logger.js.map +1 -0
  111. package/dist/watcher/FileWatcher.d.ts +19 -0
  112. package/dist/watcher/FileWatcher.d.ts.map +1 -0
  113. package/dist/watcher/FileWatcher.js +146 -0
  114. package/dist/watcher/FileWatcher.js.map +1 -0
  115. package/package.json +54 -0
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.logger = void 0;
40
+ const pino_1 = __importDefault(require("pino"));
41
+ const os = __importStar(require("os"));
42
+ const path = __importStar(require("path"));
43
+ const level = process.env.LOG_LEVEL ?? 'info';
44
+ // Write logs to a temp file to completely isolate from MCP stdio.
45
+ // process.cwd() may be '/' (read-only) when spawned by an IDE, so we use
46
+ // the OS temp directory which is always writable.
47
+ const logFilePath = process.env.LOG_FILE ?? path.join(os.tmpdir(), 'continuum.log');
48
+ // added this to test file touches
49
+ exports.logger = (0, pino_1.default)({
50
+ level,
51
+ base: { service: 'continuum' },
52
+ timestamp: pino_1.default.stdTimeFunctions.isoTime,
53
+ }, pino_1.default.destination({ dest: logFilePath, sync: true }));
54
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,uCAAyB;AACzB,2CAA6B;AAE7B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC;AAE9C,kEAAkE;AAClE,yEAAyE;AACzE,kDAAkD;AAElD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC;AAEpF,kCAAkC;AACrB,QAAA,MAAM,GAAG,IAAA,cAAI,EACxB;IACE,KAAK;IACL,IAAI,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE;IAC9B,SAAS,EAAE,cAAI,CAAC,gBAAgB,CAAC,OAAO;CACzC,EACD,cAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CACpD,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { SessionEngine } from '../session/SessionEngine';
2
+ import { IncrementalParser } from '../parser/IncrementalParser';
3
+ /**
4
+ * Watches configured paths and triggers incremental parsing on changes.
5
+ * Only watches extensions registered in the LanguageRegistry.
6
+ */
7
+ export declare class FileWatcher {
8
+ private watcher;
9
+ private readonly session;
10
+ private readonly parser;
11
+ private isInitialScanComplete;
12
+ constructor(session: SessionEngine, parser: IncrementalParser);
13
+ start(watchPaths: string[]): void;
14
+ private isWatchedExtension;
15
+ private handleChange;
16
+ private handleDelete;
17
+ stop(): void;
18
+ }
19
+ //# sourceMappingURL=FileWatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileWatcher.d.ts","sourceRoot":"","sources":["../../src/watcher/FileWatcher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AA8BhE;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,qBAAqB,CAAS;gBAE1B,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB;IAK7D,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI;IA2BjC,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,YAAY;IAsBpB,IAAI,IAAI,IAAI;CAMb"}
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.FileWatcher = void 0;
40
+ const chokidar_1 = __importDefault(require("chokidar"));
41
+ const path = __importStar(require("path"));
42
+ const LanguageRegistry_1 = require("../languages/LanguageRegistry");
43
+ const logger_1 = require("../utils/logger");
44
+ const IGNORED_PATTERNS = [
45
+ /node_modules/,
46
+ /\.git/,
47
+ /dist/,
48
+ /build/,
49
+ /\.next/,
50
+ /\.nuxt/,
51
+ /target\/debug/, // Rust
52
+ /target\/release/, // Rust
53
+ /bin\/Debug/, // .NET
54
+ /bin\/Release/, // .NET
55
+ /obj\//, // .NET build artifacts
56
+ /\.angular/, // Angular cache
57
+ /coverage/,
58
+ /\.nyc_output/,
59
+ /\.db$/,
60
+ /\.db-journal$/,
61
+ /__pycache__/, // Python
62
+ /\.pytest_cache/,
63
+ /\.venv/, // Python virtualenv
64
+ /venv/,
65
+ /\.gradle/, // Java/Kotlin
66
+ /\.idea/,
67
+ /\.vscode/,
68
+ ];
69
+ /**
70
+ * Watches configured paths and triggers incremental parsing on changes.
71
+ * Only watches extensions registered in the LanguageRegistry.
72
+ */
73
+ class FileWatcher {
74
+ watcher = null;
75
+ session;
76
+ parser;
77
+ isInitialScanComplete = false;
78
+ constructor(session, parser) {
79
+ this.session = session;
80
+ this.parser = parser;
81
+ }
82
+ start(watchPaths) {
83
+ const resolved = watchPaths.map((p) => path.resolve(p));
84
+ const extensions = (0, LanguageRegistry_1.getAllWatchedExtensions)();
85
+ logger_1.logger.info({ paths: resolved, languageCount: extensions.length }, 'FileWatcher starting');
86
+ this.watcher = chokidar_1.default.watch(resolved, {
87
+ ignored: IGNORED_PATTERNS,
88
+ persistent: true,
89
+ ignoreInitial: false, // Parse existing files on startup
90
+ awaitWriteFinish: {
91
+ stabilityThreshold: 300,
92
+ pollInterval: 100,
93
+ },
94
+ });
95
+ this.watcher
96
+ .on('add', (filePath) => this.handleChange(filePath, 'created'))
97
+ .on('change', (filePath) => this.handleChange(filePath, 'modified'))
98
+ .on('unlink', (filePath) => this.handleDelete(filePath))
99
+ .on('error', (error) => logger_1.logger.error({ error }, 'FileWatcher error'))
100
+ .on('ready', () => {
101
+ this.isInitialScanComplete = true;
102
+ logger_1.logger.info('FileWatcher: initial scan complete');
103
+ });
104
+ }
105
+ isWatchedExtension(filePath) {
106
+ const ext = path.extname(filePath).toLowerCase();
107
+ return (0, LanguageRegistry_1.getAllWatchedExtensions)().includes(ext);
108
+ }
109
+ handleChange(filePath, action) {
110
+ if (!this.isWatchedExtension(filePath))
111
+ return;
112
+ logger_1.logger.debug({ filePath, action }, 'File changed');
113
+ // Only record to session AFTER initial scan (avoid polluting session with all existing files)
114
+ if (this.isInitialScanComplete) {
115
+ this.session.recordFileTouch(filePath, action);
116
+ }
117
+ // Always parse for indexing
118
+ this.parser.parseFile(filePath).catch((err) => logger_1.logger.error({ filePath, err }, 'Parse failed'));
119
+ }
120
+ handleDelete(filePath) {
121
+ if (!this.isWatchedExtension(filePath))
122
+ return;
123
+ logger_1.logger.debug({ filePath }, 'File deleted');
124
+ if (this.isInitialScanComplete) {
125
+ this.session.recordFileTouch(filePath, 'deleted');
126
+ }
127
+ // Remove from database
128
+ const { getDb } = require('../database/Database');
129
+ const db = getDb();
130
+ const file = db
131
+ .prepare('SELECT id FROM files WHERE path = ?')
132
+ .get(filePath);
133
+ if (file) {
134
+ db.prepare('DELETE FROM files WHERE id = ?').run(file.id);
135
+ logger_1.logger.debug({ filePath }, 'Removed deleted file from index');
136
+ }
137
+ }
138
+ stop() {
139
+ if (this.watcher) {
140
+ this.watcher.close().catch(() => { });
141
+ logger_1.logger.info('FileWatcher stopped');
142
+ }
143
+ }
144
+ }
145
+ exports.FileWatcher = FileWatcher;
146
+ //# sourceMappingURL=FileWatcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileWatcher.js","sourceRoot":"","sources":["../../src/watcher/FileWatcher.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wDAA+C;AAC/C,2CAA6B;AAG7B,oEAAwE;AACxE,4CAAyC;AAEzC,MAAM,gBAAgB,GAAG;IACvB,cAAc;IACd,OAAO;IACP,MAAM;IACN,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,eAAe,EAAG,OAAO;IACzB,iBAAiB,EAAE,OAAO;IAC1B,YAAY,EAAM,OAAO;IACzB,cAAc,EAAI,OAAO;IACzB,OAAO,EAAW,uBAAuB;IACzC,WAAW,EAAO,gBAAgB;IAClC,UAAU;IACV,cAAc;IACd,OAAO;IACP,eAAe;IACf,aAAa,EAAK,SAAS;IAC3B,gBAAgB;IAChB,QAAQ,EAAU,oBAAoB;IACtC,MAAM;IACN,UAAU,EAAQ,cAAc;IAChC,QAAQ;IACR,UAAU;CACX,CAAC;AAEF;;;GAGG;AACH,MAAa,WAAW;IACd,OAAO,GAAqB,IAAI,CAAC;IACxB,OAAO,CAAgB;IACvB,MAAM,CAAoB;IACnC,qBAAqB,GAAG,KAAK,CAAC;IAEtC,YAAY,OAAsB,EAAE,MAAyB;QAC3D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,UAAoB;QACxB,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,IAAA,0CAAuB,GAAE,CAAC;QAE7C,eAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC;QAE3F,IAAI,CAAC,OAAO,GAAG,kBAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE;YACtC,OAAO,EAAE,gBAAgB;YACzB,UAAU,EAAE,IAAI;YAChB,aAAa,EAAE,KAAK,EAAE,kCAAkC;YACxD,gBAAgB,EAAE;gBAChB,kBAAkB,EAAE,GAAG;gBACvB,YAAY,EAAE,GAAG;aAClB;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO;aACT,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;aAC/D,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;aACnE,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;aACvD,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,eAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,mBAAmB,CAAC,CAAC;aACpE,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAChB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;YAClC,eAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,kBAAkB,CAAC,QAAgB;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QACjD,OAAO,IAAA,0CAAuB,GAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC;IAEO,YAAY,CAAC,QAAgB,EAAE,MAA8B;QACnE,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;YAAE,OAAO;QAE/C,eAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC;QAEnD,8FAA8F;QAC9F,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjD,CAAC;QAED,4BAA4B;QAC5B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAC5C,eAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,cAAc,CAAC,CAChD,CAAC;IACJ,CAAC;IAEO,YAAY,CAAC,QAAgB;QACnC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;YAAE,OAAO;QAE/C,eAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,EAAE,cAAc,CAAC,CAAC;QAE3C,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACpD,CAAC;QAED,uBAAuB;QACvB,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAClD,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,EAAE;aACZ,OAAO,CAAC,qCAAqC,CAAC;aAC9C,GAAG,CAAC,QAAQ,CAA+B,CAAC;QAE/C,IAAI,IAAI,EAAE,CAAC;YACT,EAAE,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1D,eAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,EAAE,iCAAiC,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACrC,eAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;CACF;AAvFD,kCAuFC"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "continuum-ai-mcp",
3
+ "version": "1.0.0",
4
+ "description": "AI Development Memory Layer — Universal Language Support MCP Server",
5
+ "main": "dist/mcp/McpServer.js",
6
+ "files": [
7
+ "dist"
8
+ ],
9
+ "bin": {
10
+ "continuum": "dist/cli/index.js"
11
+ },
12
+ "keywords": ["mcp", "ai", "developer-tools", "code-analysis", "sqlite"],
13
+ "author": "Prudhvi Gandrothu",
14
+ "license": "MIT",
15
+ "scripts": {
16
+ "dev": "tsx src/mcp/McpServer.ts",
17
+ "build": "NODE_OPTIONS=--max-old-space-size=4096 tsc && mkdir -p dist/database && cp src/database/schema.sql dist/database/",
18
+ "start": "node dist/mcp/McpServer.js",
19
+ "type-check": "tsc --noEmit",
20
+ "lint": "eslint src --ext .ts",
21
+ "lint:fix": "eslint src --ext .ts --fix",
22
+ "format": "prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"",
23
+ "test": "vitest run",
24
+ "test:watch": "vitest",
25
+ "test:coverage": "vitest run --coverage",
26
+ "clean": "rm -rf dist"
27
+ },
28
+ "dependencies": {
29
+ "@modelcontextprotocol/sdk": "^1.12.3",
30
+ "better-sqlite3": "^9.4.3",
31
+ "chokidar": "^3.6.0",
32
+ "dotenv": "^16.4.5",
33
+ "mssql": "^11.0.1",
34
+ "mysql2": "^3.9.7",
35
+ "pg": "^8.11.5",
36
+ "pino": "^9.2.0",
37
+ "zod": "^3.23.8"
38
+ },
39
+ "devDependencies": {
40
+ "@types/better-sqlite3": "^7.6.10",
41
+ "@types/mssql": "^9.1.5",
42
+ "@types/node": "^22.2.0",
43
+ "@types/pg": "^8.11.6",
44
+ "@typescript-eslint/eslint-plugin": "^8.1.0",
45
+ "@typescript-eslint/parser": "^8.1.0",
46
+ "@vitest/coverage-v8": "^2.0.5",
47
+ "eslint": "^9.9.0",
48
+ "pino-pretty": "^13.0.0",
49
+ "prettier": "^3.3.3",
50
+ "tsx": "^4.17.0",
51
+ "typescript": "^5.5.4",
52
+ "vitest": "^2.0.5"
53
+ }
54
+ }