smart-coding-mcp 1.2.0 → 1.2.1

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/index.js CHANGED
@@ -4,6 +4,11 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
4
4
  import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js";
5
5
  import { pipeline } from "@xenova/transformers";
6
6
  import fs from "fs/promises";
7
+ import { createRequire } from "module";
8
+
9
+ // Import package.json for version
10
+ const require = createRequire(import.meta.url);
11
+ const packageJson = require("./package.json");
7
12
 
8
13
  import { loadConfig } from "./lib/config.js";
9
14
  import { EmbeddingsCache } from "./lib/cache.js";
@@ -110,7 +115,7 @@ async function initialize() {
110
115
  const server = new Server(
111
116
  {
112
117
  name: "smart-coding-mcp",
113
- version: "1.0.0"
118
+ version: packageJson.version
114
119
  },
115
120
  {
116
121
  capabilities: {
package/lib/config.js CHANGED
@@ -136,24 +136,55 @@ export async function loadConfig(workspaceDir = null) {
136
136
  console.error(`[Config] Error: ${error.message}`);
137
137
  }
138
138
 
139
- // Apply environment variable overrides (prefix: SMART_CODING_)
139
+ // Apply environment variable overrides (prefix: SMART_CODING_) with validation
140
140
  if (process.env.SMART_CODING_VERBOSE !== undefined) {
141
- config.verbose = process.env.SMART_CODING_VERBOSE === 'true';
141
+ const value = process.env.SMART_CODING_VERBOSE;
142
+ if (value === 'true' || value === 'false') {
143
+ config.verbose = value === 'true';
144
+ }
142
145
  }
146
+
143
147
  if (process.env.SMART_CODING_BATCH_SIZE !== undefined) {
144
- config.batchSize = parseInt(process.env.SMART_CODING_BATCH_SIZE, 10);
148
+ const value = parseInt(process.env.SMART_CODING_BATCH_SIZE, 10);
149
+ if (!isNaN(value) && value > 0 && value <= 1000) {
150
+ config.batchSize = value;
151
+ } else {
152
+ console.error(`[Config] Invalid SMART_CODING_BATCH_SIZE: ${process.env.SMART_CODING_BATCH_SIZE}, using default`);
153
+ }
145
154
  }
155
+
146
156
  if (process.env.SMART_CODING_MAX_FILE_SIZE !== undefined) {
147
- config.maxFileSize = parseInt(process.env.SMART_CODING_MAX_FILE_SIZE, 10);
157
+ const value = parseInt(process.env.SMART_CODING_MAX_FILE_SIZE, 10);
158
+ if (!isNaN(value) && value > 0) {
159
+ config.maxFileSize = value;
160
+ } else {
161
+ console.error(`[Config] Invalid SMART_CODING_MAX_FILE_SIZE: ${process.env.SMART_CODING_MAX_FILE_SIZE}, using default`);
162
+ }
148
163
  }
164
+
149
165
  if (process.env.SMART_CODING_CHUNK_SIZE !== undefined) {
150
- config.chunkSize = parseInt(process.env.SMART_CODING_CHUNK_SIZE, 10);
166
+ const value = parseInt(process.env.SMART_CODING_CHUNK_SIZE, 10);
167
+ if (!isNaN(value) && value > 0 && value <= 100) {
168
+ config.chunkSize = value;
169
+ } else {
170
+ console.error(`[Config] Invalid SMART_CODING_CHUNK_SIZE: ${process.env.SMART_CODING_CHUNK_SIZE}, using default`);
171
+ }
151
172
  }
173
+
152
174
  if (process.env.SMART_CODING_MAX_RESULTS !== undefined) {
153
- config.maxResults = parseInt(process.env.SMART_CODING_MAX_RESULTS, 10);
175
+ const value = parseInt(process.env.SMART_CODING_MAX_RESULTS, 10);
176
+ if (!isNaN(value) && value > 0 && value <= 100) {
177
+ config.maxResults = value;
178
+ } else {
179
+ console.error(`[Config] Invalid SMART_CODING_MAX_RESULTS: ${process.env.SMART_CODING_MAX_RESULTS}, using default`);
180
+ }
154
181
  }
182
+
155
183
  if (process.env.SMART_CODING_SMART_INDEXING !== undefined) {
156
- config.smartIndexing = process.env.SMART_CODING_SMART_INDEXING === 'true';
184
+ const value = process.env.SMART_CODING_SMART_INDEXING;
185
+ if (value === 'true' || value === 'false') {
186
+ config.smartIndexing = value === 'true';
187
+ }
157
188
  }
158
189
 
159
190
  return config;
package/lib/utils.js CHANGED
@@ -31,14 +31,60 @@ export function smartChunk(content, file, config) {
31
31
 
32
32
  // Language-specific patterns for function/class detection
33
33
  const patterns = {
34
+ // JavaScript/TypeScript
34
35
  js: /^(export\s+)?(async\s+)?(function|class|const|let|var)\s+\w+/,
36
+ jsx: /^(export\s+)?(async\s+)?(function|class|const|let|var)\s+\w+/,
35
37
  ts: /^(export\s+)?(async\s+)?(function|class|const|let|var|interface|type)\s+\w+/,
36
- py: /^(class|def)\s+\w+/,
37
- java: /^(public|private|protected)?\s*(static\s+)?(class|interface|void|int|String|boolean)\s+\w+/,
38
- go: /^func\s+\w+/,
39
- rs: /^(pub\s+)?(fn|struct|enum|trait|impl)\s+\w+/,
38
+ tsx: /^(export\s+)?(async\s+)?(function|class|const|let|var|interface|type)\s+\w+/,
39
+ mjs: /^(export\s+)?(async\s+)?(function|class|const|let|var)\s+\w+/,
40
+ cjs: /^(export\s+)?(async\s+)?(function|class|const|let|var)\s+\w+/,
41
+
42
+ // Python
43
+ py: /^(class|def|async\s+def)\s+\w+/,
44
+ pyw: /^(class|def|async\s+def)\s+\w+/,
45
+
46
+ // Java/Kotlin/Scala
47
+ java: /^(public|private|protected)?\s*(static\s+)?(class|interface|enum|void|int|String|boolean)\s+\w+/,
48
+ kt: /^(class|interface|object|fun|val|var)\s+\w+/,
49
+ kts: /^(class|interface|object|fun|val|var)\s+\w+/,
50
+ scala: /^(class|object|trait|def|val|var)\s+\w+/,
51
+
52
+ // C/C++
53
+ c: /^(struct|enum|union|void|int|char|float|double)\s+\w+/,
54
+ cpp: /^(class|struct|namespace|template|void|int|bool)\s+\w+/,
55
+ cc: /^(class|struct|namespace|template|void|int|bool)\s+\w+/,
56
+ cxx: /^(class|struct|namespace|template|void|int|bool)\s+\w+/,
57
+ h: /^(class|struct|namespace|template|void|int|bool)\s+\w+/,
58
+ hpp: /^(class|struct|namespace|template|void|int|bool)\s+\w+/,
59
+
60
+ // C#
61
+ cs: /^(public|private|protected)?\s*(static\s+)?(class|interface|struct|enum|void|int|string|bool)\s+\w+/,
62
+
63
+ // Go
64
+ go: /^(func|type|const|var)\s+\w+/,
65
+
66
+ // Rust
67
+ rs: /^(pub\s+)?(fn|struct|enum|trait|impl|const|static)\s+\w+/,
68
+
69
+ // PHP
70
+ php: /^(class|interface|trait|function|const)\s+\w+/,
71
+
72
+ // Ruby
73
+ rb: /^(class|module|def)\s+\w+/,
74
+ rake: /^(class|module|def|task)\s+\w+/,
75
+
76
+ // Swift
77
+ swift: /^(class|struct|enum|protocol|func|var|let)\s+\w+/,
78
+
79
+ // R
80
+ r: /^(\w+)\s*<-\s*function/,
81
+ R: /^(\w+)\s*<-\s*function/,
82
+
83
+ // Lua
84
+ lua: /^(function|local\s+function)\s+\w+/,
40
85
  };
41
86
 
87
+
42
88
  const langPattern = patterns[ext.slice(1)] || patterns.js;
43
89
  let currentChunk = [];
44
90
  let chunkStartLine = 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "smart-coding-mcp",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "An extensible MCP server that enhances coding productivity with AI-powered features including semantic code search, intelligent indexing, and more, using local LLMs",
5
5
  "type": "module",
6
6
  "main": "index.js",