bmall-mcp 1.2.0 → 1.2.2
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 +7 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -1
- package/dist/tools/rules/pull.js +2 -2
- package/dist/tools/rules/pull.js.map +1 -1
- package/dist/tools/rules/push.js +2 -2
- package/dist/tools/rules/push.js.map +1 -1
- package/dist/tools/rules/utils.d.ts +1 -1
- package/dist/tools/rules/utils.d.ts.map +1 -1
- package/dist/tools/rules/utils.js +14 -7
- package/dist/tools/rules/utils.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +22 -0
- package/src/tools/rules/pull.ts +2 -2
- package/src/tools/rules/push.ts +2 -2
- package/src/tools/rules/utils.ts +14 -7
package/README.md
CHANGED
|
@@ -140,6 +140,13 @@ src/
|
|
|
140
140
|
|
|
141
141
|
## Changelog
|
|
142
142
|
|
|
143
|
+
### v1.2.1 (2026-01-14)
|
|
144
|
+
- ✅ 修复 IDE Rules 路径计算问题,改为运行时动态获取
|
|
145
|
+
- ✅ 添加调试日志,输出当前工作目录
|
|
146
|
+
|
|
147
|
+
### v1.2.0 (2026-01-14)
|
|
148
|
+
- ✅ 重构项目结构,新增 `src/utils/` 目录
|
|
149
|
+
|
|
143
150
|
### v1.1.6 (2026-01-14)
|
|
144
151
|
- ✅ 新增 Harmony (鸿蒙) Rules 类型支持
|
|
145
152
|
- ✅ 新增 `MCP_IDE` 环境变量,配置一次自动识别 IDE
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;GAEG"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;GAEG;AAcH,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAE9C"}
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,11 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
|
|
|
7
7
|
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
8
8
|
import { toolDefinitions } from "./server/tools.js";
|
|
9
9
|
import { handleToolCall } from "./server/handlers.js";
|
|
10
|
+
// 存储项目根目录
|
|
11
|
+
let projectRoot = null;
|
|
12
|
+
export function getProjectRoot() {
|
|
13
|
+
return projectRoot;
|
|
14
|
+
}
|
|
10
15
|
const server = new Server({
|
|
11
16
|
name: "bmall-mcp",
|
|
12
17
|
version: "1.0.0",
|
|
@@ -22,6 +27,20 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
|
22
27
|
// 处理 Tool 调用
|
|
23
28
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
24
29
|
const { name, arguments: args } = request.params;
|
|
30
|
+
// 尝试获取 roots
|
|
31
|
+
try {
|
|
32
|
+
const rootsResult = await server.listRoots();
|
|
33
|
+
console.error("[bmall-mcp] roots/list 结果:", JSON.stringify(rootsResult));
|
|
34
|
+
if (rootsResult?.roots?.length > 0) {
|
|
35
|
+
const uri = rootsResult.roots[0].uri;
|
|
36
|
+
// 转换 file:// URI 为路径
|
|
37
|
+
projectRoot = uri.replace(/^file:\/\//, "");
|
|
38
|
+
console.error("[bmall-mcp] 项目根目录:", projectRoot);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch (e) {
|
|
42
|
+
console.error("[bmall-mcp] roots/list 失败:", e);
|
|
43
|
+
}
|
|
25
44
|
return handleToolCall(name, args);
|
|
26
45
|
});
|
|
27
46
|
// 启动服务器
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;IACE,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,OAAO;CACjB,EACD;IACE,YAAY,EAAE;QACZ,KAAK,EAAE,EAAE;KACV;CACF,CACF,CAAC;AAEF,WAAW;AACX,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IAC5D,KAAK,EAAE,eAAe;CACvB,CAAC,CAAC,CAAC;AAEJ,aAAa;AACb,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IACjD,OAAO,cAAc,CAAC,IAAI,EAAE,IAA+B,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC;AAEH,QAAQ;AACR,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;AACvD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;IACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,UAAU;AACV,IAAI,WAAW,GAAkB,IAAI,CAAC;AAEtC,MAAM,UAAU,cAAc;IAC5B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;IACE,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,OAAO;CACjB,EACD;IACE,YAAY,EAAE;QACZ,KAAK,EAAE,EAAE;KACV;CACF,CACF,CAAC;AAEF,WAAW;AACX,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IAC5D,KAAK,EAAE,eAAe;CACvB,CAAC,CAAC,CAAC;AAEJ,aAAa;AACb,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAEjD,aAAa;IACb,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;QACzE,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YACrC,qBAAqB;YACrB,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YAC5C,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,cAAc,CAAC,IAAI,EAAE,IAA+B,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC;AAEH,QAAQ;AACR,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;AACvD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;IACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/tools/rules/pull.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as path from "path";
|
|
2
2
|
import * as fs from "fs";
|
|
3
3
|
import { log } from "../../utils/index.js";
|
|
4
|
-
import { RULES_CACHE_DIR, validateAndGetRulesType, fetchRulesFromGit, copyMarkdownFiles, getGitRulesDir,
|
|
4
|
+
import { RULES_CACHE_DIR, validateAndGetRulesType, fetchRulesFromGit, copyMarkdownFiles, getGitRulesDir, getIDERulesPath, } from "./utils.js";
|
|
5
5
|
export async function pullRules(ide, rulesType) {
|
|
6
6
|
try {
|
|
7
7
|
// 验证并获取 Rules 类型
|
|
@@ -12,7 +12,7 @@ export async function pullRules(ide, rulesType) {
|
|
|
12
12
|
const projectType = typeResult.type;
|
|
13
13
|
// 验证并获取 IDE
|
|
14
14
|
const targetIDE = ide || "kiro";
|
|
15
|
-
const targetPath =
|
|
15
|
+
const targetPath = getIDERulesPath(targetIDE);
|
|
16
16
|
if (!targetPath) {
|
|
17
17
|
return `❌ 不支持的 IDE: ${targetIDE}\n支持的 IDE: kiro, cursor, windsurf`;
|
|
18
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/tools/rules/pull.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAC3C,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/tools/rules/pull.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAC3C,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAY,EAAE,SAAkB;IAC9D,IAAI,CAAC;QACH,iBAAiB;QACjB,MAAM,UAAU,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;QACtD,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,OAAO,UAAU,CAAC,KAAK,CAAC;QAC1B,CAAC;QACD,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC;QAEpC,YAAY;QACZ,MAAM,SAAS,GAAG,GAAG,IAAI,MAAM,CAAC;QAChC,MAAM,UAAU,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,eAAe,SAAS,mCAAmC,CAAC;QACrE,CAAC;QAED,UAAU;QACV,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE9C,6CAA6C;QAC7C,MAAM,YAAY,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;QACjD,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAE/D,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAClC,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAE5D,GAAG,CAAC,oBAAoB,kBAAkB,KAAK,CAAC,CAAC;QACjD,wBAAwB;QACxB,MAAM,MAAM,GAAG,iBAAiB,CAAC,cAAc,EAAE,kBAAkB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAExF,IAAI,MAAM,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,8BAA8B,cAAc,EAAE,CAAC;QACxD,CAAC;QAED,OAAO;YACC,WAAW;OAChB,SAAS;QACR,kBAAkB;SACjB,MAAM,CAAC,KAAK;QACb,eAAe,EAAE,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,QAAQ,GACZ,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzD,OAAO,WAAW,QAAQ,EAAE,CAAC;IAC/B,CAAC;AACH,CAAC"}
|
package/dist/tools/rules/push.js
CHANGED
|
@@ -2,7 +2,7 @@ import * as fs from "fs";
|
|
|
2
2
|
import * as path from "path";
|
|
3
3
|
import { execSync } from "child_process";
|
|
4
4
|
import { log } from "../../utils/index.js";
|
|
5
|
-
import { GIT_BRANCH, RULES_CACHE_DIR,
|
|
5
|
+
import { GIT_BRANCH, RULES_CACHE_DIR, getIDERulesPath, validateAndGetRulesType, detectProjectName, getGitRulesDir, copyMarkdownFiles, initializeGitCache, setupSparseCheckout, checkoutOrCreateBranch, } from "./utils.js";
|
|
6
6
|
export async function pushRules(ide, message, rulesType) {
|
|
7
7
|
try {
|
|
8
8
|
// 验证并获取 Rules 类型
|
|
@@ -12,7 +12,7 @@ export async function pushRules(ide, message, rulesType) {
|
|
|
12
12
|
}
|
|
13
13
|
const projectType = typeResult.type;
|
|
14
14
|
// 验证并获取 IDE
|
|
15
|
-
const localRulesPath =
|
|
15
|
+
const localRulesPath = getIDERulesPath(ide);
|
|
16
16
|
if (!localRulesPath) {
|
|
17
17
|
return `❌ 不支持的 IDE: ${ide}`;
|
|
18
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../../src/tools/rules/push.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAC3C,OAAO,EACL,UAAU,EACV,eAAe,EACf,
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../../src/tools/rules/push.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ import { ProjectType } from "../../utils/index.js";
|
|
|
6
6
|
export declare const GIT_REPO = "git@coding.jd.com:retail-jdb-app-ai/RulesManager.git";
|
|
7
7
|
export declare const GIT_BRANCH = "develop";
|
|
8
8
|
export declare const RULES_CACHE_DIR: string;
|
|
9
|
-
export declare
|
|
9
|
+
export declare function getIDERulesPath(ide: string): string;
|
|
10
10
|
export declare function normalizeRulesType(input: string): ProjectType;
|
|
11
11
|
export declare function validateAndGetRulesType(rulesType?: string): {
|
|
12
12
|
type: ProjectType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/tools/rules/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAa,WAAW,EAA0B,MAAM,sBAAsB,CAAC;AAGtF,eAAO,MAAM,QAAQ,yDAAyD,CAAC;AAC/E,eAAO,MAAM,UAAU,YAAY,CAAC;AACpC,eAAO,MAAM,eAAe,QAA4C,CAAC;AAGzE,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/tools/rules/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAa,WAAW,EAA0B,MAAM,sBAAsB,CAAC;AAGtF,eAAO,MAAM,QAAQ,yDAAyD,CAAC;AAC/E,eAAO,MAAM,UAAU,YAAY,CAAC;AACpC,eAAO,MAAM,eAAe,QAA4C,CAAC;AAGzE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAYnD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAiB7D;AAED,wBAAgB,uBAAuB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAejG;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAW/D;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAwD1C;AAGD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMxD;AAGD,wBAAgB,kBAAkB,IAAI,IAAI,CAyBzC;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAY1D;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,GAAE,MAAmB,GAAG,IAAI,CAmChG;AAED,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAuCjF;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAqB,GAC/C;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAsCtC"}
|
|
@@ -10,13 +10,20 @@ import { HOME, CWD, log, detectProjectType } from "../../utils/index.js";
|
|
|
10
10
|
export const GIT_REPO = "git@coding.jd.com:retail-jdb-app-ai/RulesManager.git";
|
|
11
11
|
export const GIT_BRANCH = "develop";
|
|
12
12
|
export const RULES_CACHE_DIR = path.join(HOME, ".bmall-mcp/rules-cache");
|
|
13
|
-
// IDE 的 Rules
|
|
14
|
-
export
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
// 获取 IDE 的 Rules 目录路径(运行时计算)
|
|
14
|
+
export function getIDERulesPath(ide) {
|
|
15
|
+
const cwd = process.cwd();
|
|
16
|
+
log(`当前工作目录 (cwd): ${cwd}`);
|
|
17
|
+
const paths = {
|
|
18
|
+
kiro: path.join(cwd, ".kiro/steering/bmall"),
|
|
19
|
+
cursor: path.join(cwd, ".cursor/rules/bmall"),
|
|
20
|
+
windsurf: path.join(cwd, ".windsurfrules"),
|
|
21
|
+
joycode: path.join(cwd, ".joycode/rules/bmall"),
|
|
22
|
+
};
|
|
23
|
+
const result = paths[ide] || paths.kiro;
|
|
24
|
+
log(`IDE: ${ide}, Rules 路径: ${result}`);
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
20
27
|
export function normalizeRulesType(input) {
|
|
21
28
|
const normalized = input.toLowerCase().trim();
|
|
22
29
|
if (["ios", "i", "iphone", "objective-c", "objc", "oc"].includes(normalized)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/tools/rules/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,GAAG,EAAe,GAAG,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEtF,WAAW;AACX,MAAM,CAAC,MAAM,QAAQ,GAAG,sDAAsD,CAAC;AAC/E,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC;AACpC,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;AAEzE,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/tools/rules/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -13,6 +13,13 @@ import {
|
|
|
13
13
|
import { toolDefinitions } from "./server/tools.js";
|
|
14
14
|
import { handleToolCall } from "./server/handlers.js";
|
|
15
15
|
|
|
16
|
+
// 存储项目根目录
|
|
17
|
+
let projectRoot: string | null = null;
|
|
18
|
+
|
|
19
|
+
export function getProjectRoot(): string | null {
|
|
20
|
+
return projectRoot;
|
|
21
|
+
}
|
|
22
|
+
|
|
16
23
|
const server = new Server(
|
|
17
24
|
{
|
|
18
25
|
name: "bmall-mcp",
|
|
@@ -33,6 +40,21 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
|
33
40
|
// 处理 Tool 调用
|
|
34
41
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
35
42
|
const { name, arguments: args } = request.params;
|
|
43
|
+
|
|
44
|
+
// 尝试获取 roots
|
|
45
|
+
try {
|
|
46
|
+
const rootsResult = await server.listRoots();
|
|
47
|
+
console.error("[bmall-mcp] roots/list 结果:", JSON.stringify(rootsResult));
|
|
48
|
+
if (rootsResult?.roots?.length > 0) {
|
|
49
|
+
const uri = rootsResult.roots[0].uri;
|
|
50
|
+
// 转换 file:// URI 为路径
|
|
51
|
+
projectRoot = uri.replace(/^file:\/\//, "");
|
|
52
|
+
console.error("[bmall-mcp] 项目根目录:", projectRoot);
|
|
53
|
+
}
|
|
54
|
+
} catch (e) {
|
|
55
|
+
console.error("[bmall-mcp] roots/list 失败:", e);
|
|
56
|
+
}
|
|
57
|
+
|
|
36
58
|
return handleToolCall(name, args as Record<string, unknown>);
|
|
37
59
|
});
|
|
38
60
|
|
package/src/tools/rules/pull.ts
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
fetchRulesFromGit,
|
|
8
8
|
copyMarkdownFiles,
|
|
9
9
|
getGitRulesDir,
|
|
10
|
-
|
|
10
|
+
getIDERulesPath,
|
|
11
11
|
} from "./utils.js";
|
|
12
12
|
|
|
13
13
|
export async function pullRules(ide?: string, rulesType?: string): Promise<string> {
|
|
@@ -21,7 +21,7 @@ export async function pullRules(ide?: string, rulesType?: string): Promise<strin
|
|
|
21
21
|
|
|
22
22
|
// 验证并获取 IDE
|
|
23
23
|
const targetIDE = ide || "kiro";
|
|
24
|
-
const targetPath =
|
|
24
|
+
const targetPath = getIDERulesPath(targetIDE);
|
|
25
25
|
if (!targetPath) {
|
|
26
26
|
return `❌ 不支持的 IDE: ${targetIDE}\n支持的 IDE: kiro, cursor, windsurf`;
|
|
27
27
|
}
|
package/src/tools/rules/push.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { log } from "../../utils/index.js";
|
|
|
5
5
|
import {
|
|
6
6
|
GIT_BRANCH,
|
|
7
7
|
RULES_CACHE_DIR,
|
|
8
|
-
|
|
8
|
+
getIDERulesPath,
|
|
9
9
|
validateAndGetRulesType,
|
|
10
10
|
detectProjectName,
|
|
11
11
|
getGitRulesDir,
|
|
@@ -25,7 +25,7 @@ export async function pushRules(ide: string, message?: string, rulesType?: strin
|
|
|
25
25
|
const projectType = typeResult.type;
|
|
26
26
|
|
|
27
27
|
// 验证并获取 IDE
|
|
28
|
-
const localRulesPath =
|
|
28
|
+
const localRulesPath = getIDERulesPath(ide);
|
|
29
29
|
if (!localRulesPath) {
|
|
30
30
|
return `❌ 不支持的 IDE: ${ide}`;
|
|
31
31
|
}
|
package/src/tools/rules/utils.ts
CHANGED
|
@@ -13,13 +13,20 @@ export const GIT_REPO = "git@coding.jd.com:retail-jdb-app-ai/RulesManager.git";
|
|
|
13
13
|
export const GIT_BRANCH = "develop";
|
|
14
14
|
export const RULES_CACHE_DIR = path.join(HOME, ".bmall-mcp/rules-cache");
|
|
15
15
|
|
|
16
|
-
// IDE 的 Rules
|
|
17
|
-
export
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
// 获取 IDE 的 Rules 目录路径(运行时计算)
|
|
17
|
+
export function getIDERulesPath(ide: string): string {
|
|
18
|
+
const cwd = process.cwd();
|
|
19
|
+
log(`当前工作目录 (cwd): ${cwd}`);
|
|
20
|
+
const paths: Record<string, string> = {
|
|
21
|
+
kiro: path.join(cwd, ".kiro/steering/bmall"),
|
|
22
|
+
cursor: path.join(cwd, ".cursor/rules/bmall"),
|
|
23
|
+
windsurf: path.join(cwd, ".windsurfrules"),
|
|
24
|
+
joycode: path.join(cwd, ".joycode/rules/bmall"),
|
|
25
|
+
};
|
|
26
|
+
const result = paths[ide] || paths.kiro;
|
|
27
|
+
log(`IDE: ${ide}, Rules 路径: ${result}`);
|
|
28
|
+
return result;
|
|
29
|
+
}
|
|
23
30
|
|
|
24
31
|
export function normalizeRulesType(input: string): ProjectType {
|
|
25
32
|
const normalized = input.toLowerCase().trim();
|