devez-vibe 1.3.14 → 1.3.16

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/bin/dvz.exe CHANGED
Binary file
@@ -800,7 +800,7 @@ async function claudePluginDetail(params) {
800
800
  };
801
801
  }
802
802
 
803
- async function claudeSkills(params) {
803
+ async function claudeSkills(params) {
804
804
  const installed = await runClaudeJson(params, ["plugin", "list", "--json"]);
805
805
  const skills = [];
806
806
  for (const plugin of Array.isArray(installed) ? installed : []) {
@@ -817,10 +817,48 @@ async function claudeSkills(params) {
817
817
  }
818
818
  } catch { /* Plugins do not have to provide skills. */ }
819
819
  }
820
- return { data: [{ cwd: params.cwd || process.cwd(), skills }] };
821
- }
822
-
823
- function isQuestionDeliveryError(error) {
820
+ return { data: [{ cwd: params.cwd || process.cwd(), skills }] };
821
+ }
822
+
823
+ function claudeMcpStatusValue(statuses) {
824
+ return {
825
+ data: (Array.isArray(statuses) ? statuses : []).map((server) => ({
826
+ name: String(server?.name || "MCP"),
827
+ serverInfo: server?.serverInfo
828
+ ? {
829
+ title: String(server.serverInfo.name || server.name || "MCP"),
830
+ version: String(server.serverInfo.version || ""),
831
+ }
832
+ : null,
833
+ tools: Object.fromEntries(
834
+ (Array.isArray(server?.tools) ? server.tools : [])
835
+ .filter((tool) => tool?.name)
836
+ .map((tool) => [String(tool.name), tool]),
837
+ ),
838
+ resources: [],
839
+ authStatus: server?.status === "needs-auth"
840
+ ? "notLoggedIn"
841
+ : server?.status === "connected"
842
+ ? "unsupported"
843
+ : String(server?.status || "unknown"),
844
+ status: String(server?.status || "unknown"),
845
+ ...(server?.error ? { error: String(server.error) } : {}),
846
+ })),
847
+ };
848
+ }
849
+
850
+ async function claudeMcpStatus(params) {
851
+ const session = lookupSession(params.threadId || params.sessionId);
852
+ if (!session) {
853
+ return {
854
+ data: [],
855
+ unavailableReason: "Claude 세션이 아직 시작되지 않았습니다.",
856
+ };
857
+ }
858
+ return claudeMcpStatusValue(await session.query.mcpServerStatus());
859
+ }
860
+
861
+ function isQuestionDeliveryError(error) {
824
862
  return error?.code === -32700
825
863
  || String(error?.message || error).includes("사용자 입력 화면에 전달하지 못했습니다");
826
864
  }
@@ -2236,9 +2274,10 @@ async function readableCwd(id, cwd) {
2236
2274
  return await transcriptCwd(id) || cwd;
2237
2275
  }
2238
2276
 
2239
- async function dispatch(method, params = {}) {
2240
- if (method === "model/list") return loadModelCatalog(params);
2241
- if (method === "plugin/list") return claudePluginCatalog(params);
2277
+ async function dispatch(method, params = {}) {
2278
+ if (method === "model/list") return loadModelCatalog(params);
2279
+ if (method === "mcpServerStatus/list") return claudeMcpStatus(params);
2280
+ if (method === "plugin/list") return claudePluginCatalog(params);
2242
2281
  if (method === "plugin/installed") return claudePluginCatalog(params, true);
2243
2282
  if (method === "plugin/read") return claudePluginDetail(params);
2244
2283
  if (method === "plugin/install") {
@@ -2474,14 +2513,29 @@ async function runSelfTest() {
2474
2513
  [{ name: "official", installLocation: "/tmp/official" }],
2475
2514
  );
2476
2515
  const plugin = pluginCatalog.marketplaces[0]?.plugins[0];
2477
- if (plugin?.id !== "cloudflare@official"
2516
+ if (plugin?.id !== "cloudflare@official"
2478
2517
  || plugin?.name !== "cloudflare@official"
2479
2518
  || plugin?.interface?.displayName !== "cloudflare"
2480
2519
  || plugin?.installed !== true
2481
2520
  || plugin?.enabled !== true) {
2482
- throw new Error(`Claude plugin catalogue self-test failed: ${JSON.stringify(pluginCatalog)}`);
2483
- }
2484
- const user = (uuid, text) => ({
2521
+ throw new Error(`Claude plugin catalogue self-test failed: ${JSON.stringify(pluginCatalog)}`);
2522
+ }
2523
+ const mcpStatus = claudeMcpStatusValue([
2524
+ {
2525
+ name: "context7",
2526
+ status: "connected",
2527
+ serverInfo: { name: "Context7", version: "1.0.0" },
2528
+ tools: [{ name: "resolve" }, { name: "docs" }],
2529
+ },
2530
+ { name: "figma", status: "needs-auth", tools: [] },
2531
+ ]).data;
2532
+ if (mcpStatus[0]?.name !== "context7"
2533
+ || Object.keys(mcpStatus[0]?.tools || {}).length !== 2
2534
+ || mcpStatus[0]?.status !== "connected"
2535
+ || mcpStatus[1]?.authStatus !== "notLoggedIn") {
2536
+ throw new Error(`Claude MCP status self-test failed: ${JSON.stringify(mcpStatus)}`);
2537
+ }
2538
+ const user = (uuid, text) => ({
2485
2539
  type: "user",
2486
2540
  uuid,
2487
2541
  message: { role: "user", content: [{ type: "text", text }] },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "devez-vibe",
3
- "version": "1.3.14",
3
+ "version": "1.3.16",
4
4
  "description": "Stable terminal UI for Codex and Claude Agent SDK",
5
5
  "keywords": [
6
6
  "codex",