@adiholick/nvstudio-mcp 2.1.5 → 2.1.7

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/dist/index.js CHANGED
@@ -28,7 +28,7 @@ const isDaemon = process.argv.includes('--daemon') || process.argv.includes('-d'
28
28
  // 2. Inisialisasi server MCP
29
29
  const server = new index_js_1.Server({
30
30
  name: "nvstudio-mcp",
31
- version: "2.1.5",
31
+ version: "2.1.7",
32
32
  }, {
33
33
  capabilities: {
34
34
  tools: {},
@@ -219,13 +219,7 @@ async function main() {
219
219
  process.stdin.on('close', shutdown);
220
220
  process.stdin.on('end', shutdown);
221
221
  process.stdin.on('error', shutdown);
222
- // Fallback khusus Windows: cek apakah stdin masih readable secara berkala
223
- setInterval(() => {
224
- if (!process.stdin.readable) {
225
- console.error("[nvstudio-mcp] stdin tidak readable lagi. IDE kemungkinan sudah ditutup.");
226
- shutdown();
227
- }
228
- }, 3000);
222
+ // Fallback dihapus karena menyebabkan disconnect palsu di beberapa environment AGY
229
223
  }
230
224
  if (isDaemon) {
231
225
  console.error("[nvstudio-mcp] Berjalan dalam mode DAEMON (Background Bridge Server di port 3055).");
@@ -76,8 +76,8 @@ function sendEvent(peer, kind, payload) {
76
76
  function broadcastStatus() {
77
77
  const statusEvent = {
78
78
  mcpConnected,
79
- studioCount: ssePeers.size,
80
- serverVersion: '2.1.5',
79
+ studioCount: Math.max(ssePeers.size, studioEventQueues.size),
80
+ serverVersion: '2.1.7',
81
81
  };
82
82
  broadcastEvent('status', statusEvent);
83
83
  // Juga enqueue untuk Studio yang belum polling saat ini
@@ -163,7 +163,7 @@ function startBridgeServer(port = 3055) {
163
163
  io.on('connection', (socket) => {
164
164
  socket.emit('init', {
165
165
  logs: activityLogs,
166
- stats: { totalTasks, successCount, errorCount, sessionStart, studioConnected: ssePeers.size > 0, port },
166
+ stats: { totalTasks, successCount, errorCount, sessionStart, studioConnected: Math.max(ssePeers.size, studioEventQueues.size) > 0, port },
167
167
  });
168
168
  });
169
169
  // ── /api/stats ─────────────────────────────────────────────────────────────
@@ -210,7 +210,7 @@ function startBridgeServer(port = 3055) {
210
210
  studioEventQueues.set(studioId, []); // kosongkan antrian
211
211
  // Selalu sertakan status terkini
212
212
  const events = [
213
- { kind: 'status', mcpConnected, studioCount: studioEventQueues.size, serverVersion: '2.1.5' },
213
+ { kind: 'status', mcpConnected, studioCount: studioEventQueues.size, serverVersion: '2.1.7' },
214
214
  ];
215
215
  // Tambahkan events tertunda (misalnya task requests)
216
216
  for (const ev of queue) {
@@ -259,7 +259,7 @@ function startBridgeServer(port = 3055) {
259
259
  const silenceTimer = setTimeout(() => cleanup(), 60000);
260
260
  const peer = { studioId, res, connectedAt: Date.now(), heartbeatTimer, silenceTimer };
261
261
  ssePeers.set(studioId, peer);
262
- sendEvent(peer, 'status', { mcpConnected, studioCount: studioEventQueues.size, serverVersion: '2.1.5' });
262
+ sendEvent(peer, 'status', { mcpConnected, studioCount: studioEventQueues.size, serverVersion: '2.1.7' });
263
263
  function cleanup() {
264
264
  clearInterval(heartbeatTimer);
265
265
  clearTimeout(silenceTimer);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adiholick/nvstudio-mcp",
3
- "version": "2.1.5",
3
+ "version": "2.1.7",
4
4
  "description": "Local Bridge Server MCP for Roblox Studio",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -1,5 +1,5 @@
1
1
  -- ══════════════════════════════════════════════════════════════════════
2
- -- NVStudio MCP Plugin v2.1.5
2
+ -- NVStudio MCP Plugin v2.1.7
3
3
  -- Arsitektur: Polling Stream / Local HTTP Bridge (Port 3055)
4
4
  -- Plugin auto-connect saat dimuat, polling /api/ping lalu /api/stream
5
5
  -- untuk mendapatkan events (status, request) dari server Node.js.
@@ -224,12 +224,15 @@ local function handleSSELine(line)
224
224
  -- status: update mcpConnected
225
225
  if kind == "status" then
226
226
  local newActive = decoded.mcpConnected == true
227
+ local changed = (mcpAgentActive ~= newActive)
227
228
  mcpAgentActive = newActive
228
229
  if ui then
229
230
  -- Jaga status tetap Connected selama bridge server hidup
230
231
  ui:setStatus("connected")
231
- if newActive then
232
+ if newActive and changed then
232
233
  ui:addLog("[System] ✅ IDE Agent (Antigravity) aktif.", Color3.fromRGB(100, 255, 100))
234
+ elseif not newActive and changed then
235
+ ui:addLog("[System] ⚠️ IDE Agent terputus.", Color3.fromRGB(255, 150, 50))
233
236
  end
234
237
  end
235
238
  return
@@ -271,7 +274,7 @@ function startConnectionLoop()
271
274
  reconnectDelay = RECONNECT_DELAY_INITIAL
272
275
 
273
276
  if ui then
274
- ui:addLog("[System] NVStudio MCP v2.1.5 — Menghubungkan ke server...", Color3.fromRGB(200, 200, 200))
277
+ ui:addLog("[System] NVStudio MCP v2.1.7 — Menghubungkan ke server...", Color3.fromRGB(200, 200, 200))
275
278
  end
276
279
 
277
280
  local consecutiveErrors = 0
@@ -379,7 +379,7 @@ end
379
379
  <BinaryString name="Tags"></BinaryString>
380
380
  <token name="RunContext">0</token>
381
381
  <ProtectedString name="Source"><![CDATA[-- ══════════════════════════════════════════════════════════════════════
382
- -- NVStudio MCP Plugin v2.1.5
382
+ -- NVStudio MCP Plugin v2.1.7
383
383
  -- Arsitektur: Polling Stream / Local HTTP Bridge (Port 3055)
384
384
  -- Plugin auto-connect saat dimuat, polling /api/ping lalu /api/stream
385
385
  -- untuk mendapatkan events (status, request) dari server Node.js.
@@ -604,12 +604,15 @@ local function handleSSELine(line)
604
604
  -- status: update mcpConnected
605
605
  if kind == "status" then
606
606
  local newActive = decoded.mcpConnected == true
607
+ local changed = (mcpAgentActive ~= newActive)
607
608
  mcpAgentActive = newActive
608
609
  if ui then
609
610
  -- Jaga status tetap Connected selama bridge server hidup
610
611
  ui:setStatus("connected")
611
- if newActive then
612
+ if newActive and changed then
612
613
  ui:addLog("[System] ✅ IDE Agent (Antigravity) aktif.", Color3.fromRGB(100, 255, 100))
614
+ elseif not newActive and changed then
615
+ ui:addLog("[System] ⚠️ IDE Agent terputus.", Color3.fromRGB(255, 150, 50))
613
616
  end
614
617
  end
615
618
  return
@@ -651,7 +654,7 @@ function startConnectionLoop()
651
654
  reconnectDelay = RECONNECT_DELAY_INITIAL
652
655
 
653
656
  if ui then
654
- ui:addLog("[System] NVStudio MCP v2.1.5 — Menghubungkan ke server...", Color3.fromRGB(200, 200, 200))
657
+ ui:addLog("[System] NVStudio MCP v2.1.7 — Menghubungkan ke server...", Color3.fromRGB(200, 200, 200))
655
658
  end
656
659
 
657
660
  local consecutiveErrors = 0
@@ -1078,7 +1081,7 @@ function UIManager.init(pluginInstance, studioId)
1078
1081
 
1079
1082
  -- Version
1080
1083
  local versionLabel = Instance.new("TextLabel")
1081
- versionLabel.Text = "v2.1.5"
1084
+ versionLabel.Text = "v2.1.7"
1082
1085
  versionLabel.Font = Enum.Font.Gotham
1083
1086
  versionLabel.TextSize = 11
1084
1087
  versionLabel.TextColor3 = Color3.fromRGB(120, 120, 130)
@@ -95,7 +95,7 @@ function UIManager.init(pluginInstance, studioId)
95
95
 
96
96
  -- Version
97
97
  local versionLabel = Instance.new("TextLabel")
98
- versionLabel.Text = "v2.1.5"
98
+ versionLabel.Text = "v2.1.7"
99
99
  versionLabel.Font = Enum.Font.Gotham
100
100
  versionLabel.TextSize = 11
101
101
  versionLabel.TextColor3 = Color3.fromRGB(120, 120, 130)