mcp-probe-kit 3.6.2 → 3.6.3

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 CHANGED
@@ -421,7 +421,7 @@ No installation needed, use the latest version directly.
421
421
  }
422
422
  ```
423
423
 
424
- > **Skill 自动安装**:任意 MCP 工具调用会在用户项目写入 `.agents/skills/mcp-probe-kit/SKILL.md`。工作区根目录**自动识别**(Cursor 注入 `WORKSPACE_FOLDER_PATHS`;OpenCode 等项目级 `opencode.json` 会设置进程 cwd),**无需**在每台客户端配置 `MCP_PROJECT_ROOT`。仅全局 MCP 且无法识别工作区时,可选手动设置 `MCP_PROJECT_ROOT` 或在工具参数传 `project_root`。需 **v3.6.2+**。
424
+ > **Skill 自动安装**:任意 MCP 工具调用会在用户项目写入 `.agents/skills/mcp-probe-kit/SKILL.md`。工作区根目录**自动识别**(Cursor 注入 `WORKSPACE_FOLDER_PATHS`;OpenCode 等项目级 `opencode.json` 会设置进程 cwd),**无需**在每台客户端配置 `MCP_PROJECT_ROOT`。仅全局 MCP 且无法识别工作区时,可选手动设置 `MCP_PROJECT_ROOT` 或在工具参数传 `project_root`。需 **v3.6.3+**。
425
425
 
426
426
  #### Claude Desktop Configuration
427
427
 
@@ -712,7 +712,7 @@ This is a known [Cursor-side issue](https://forum.cursor.com/t/mcp-server-connec
712
712
  | `latched shared-process MCP routing disabled` + `ipcReady` timeout | Windows `mcpProcess` utility failed; legacy fallback discovers tools but Agent lease stays empty |
713
713
  | Settings green dot, Agent `No MCP servers available` | Renderer ↔ shared-process MCP routing not wired for this session |
714
714
 
715
- **What we do (v3.6.2+):** `tools/list` **omits `outputSchema` by default** (~50 KB → ~23 KB). Structured output still works via `structuredContent` on `tools/call`. To restore full schemas: `MCP_INCLUDE_OUTPUT_SCHEMA=1`.
715
+ **What we do (v3.6.3+):** `tools/list` **omits `outputSchema` by default** (~50 KB → ~23 KB). Structured output still works via `structuredContent` on `tools/call`. To restore full schemas: `MCP_INCLUDE_OUTPUT_SCHEMA=1`.
716
716
 
717
717
  **What you can try:**
718
718
 
@@ -116,7 +116,7 @@ describe("gitnexus-bridge workspace preparation", () => {
116
116
  expect(result.code).toBe(0);
117
117
  expect(result.stdout.trim().length).toBeGreaterThan(0);
118
118
  });
119
- test("Windows 下 git.exe 直接启动,不走 git.cmd 壳层", () => {
119
+ test.runIf(process.platform === "win32")("Windows 下 git.exe 直接启动,不走 git.cmd 壳层", () => {
120
120
  const resolved = resolveExecutableCommand("git", "win32").toLowerCase();
121
121
  const spawned = resolveSpawnCommand("git", ["init", "-q"], "win32");
122
122
  expect(resolved).toContain("git");
@@ -60,4 +60,20 @@ describe("workspace-root explicit project_root", () => {
60
60
  expect(resolution.explicitHonored).toBe(false);
61
61
  expect(resolution.warning).toMatch(/未能采用传入的 project_root/);
62
62
  });
63
+ test("不把盘符根目录当作工作区", () => {
64
+ const original = process.env.INIT_CWD;
65
+ process.env.INIT_CWD = "D:\\";
66
+ try {
67
+ const resolution = resolveWorkspaceRootWithMeta("");
68
+ expect(resolution.root).not.toBe("D:\\");
69
+ }
70
+ finally {
71
+ if (original === undefined) {
72
+ delete process.env.INIT_CWD;
73
+ }
74
+ else {
75
+ process.env.INIT_CWD = original;
76
+ }
77
+ }
78
+ });
63
79
  });
@@ -126,7 +126,9 @@ function findWorkspaceAncestor(start, packageRoot) {
126
126
  }
127
127
  let current = start;
128
128
  while (true) {
129
- if (current !== packageRoot && looksLikeWorkspaceRoot(current)) {
129
+ if (current !== packageRoot &&
130
+ !isFilesystemRoot(current) &&
131
+ looksLikeWorkspaceRoot(current)) {
130
132
  return current;
131
133
  }
132
134
  const parent = path.dirname(current);
@@ -146,6 +148,19 @@ function resolveTrustedClientWorkspace(clientPath, packageRoot) {
146
148
  }
147
149
  return findWorkspaceAncestor(clientPath, packageRoot) ?? clientPath;
148
150
  }
151
+ function isFilesystemRoot(target) {
152
+ const normalized = path.resolve(target);
153
+ return normalized === path.parse(normalized).root;
154
+ }
155
+ function isUsableWorkspaceCandidate(target, packageRoot) {
156
+ if (!isExistingDirectory(target)) {
157
+ return false;
158
+ }
159
+ if (target === packageRoot || isFilesystemRoot(target)) {
160
+ return false;
161
+ }
162
+ return true;
163
+ }
149
164
  function resolveFromEnvKeys(keys, packageRoot) {
150
165
  for (const key of keys) {
151
166
  const candidate = safeResolve(process.env[key] || "");
@@ -153,7 +168,7 @@ function resolveFromEnvKeys(keys, packageRoot) {
153
168
  if (resolved) {
154
169
  return resolved;
155
170
  }
156
- if (isExistingDirectory(candidate) && candidate !== packageRoot) {
171
+ if (isUsableWorkspaceCandidate(candidate, packageRoot)) {
157
172
  return candidate;
158
173
  }
159
174
  }
@@ -219,7 +234,7 @@ function resolveAutoWorkspaceRoot(packageRoot) {
219
234
  };
220
235
  }
221
236
  const cwd = safeResolve(process.cwd());
222
- if (isExistingDirectory(cwd) && cwd !== packageRoot) {
237
+ if (isUsableWorkspaceCandidate(cwd, packageRoot)) {
223
238
  if (looksLikeWorkspaceRoot(cwd)) {
224
239
  return { root: cwd, source: "cwd", explicitHonored: false };
225
240
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-probe-kit",
3
- "version": "3.6.2",
3
+ "version": "3.6.3",
4
4
  "description": "AI-Powered Development Toolkit - MCP Server with 30 tools covering code quality, development efficiency, project management, and UI/UX design. Features: Structured Output, Workflow Orchestration, MCP Skill auto-sync, UI/UX Pro Max, and Requirements Interview.",
5
5
  "mcpName": "io.github.mybolide/mcp-probe-kit",
6
6
  "type": "module",