rbxstudio-mcp 2.3.2 → 2.4.0
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 +67 -14
- package/dist/__tests__/bridge-service.test.js +25 -13
- package/dist/__tests__/bridge-service.test.js.map +1 -1
- package/dist/__tests__/bridge-session.test.d.ts +2 -0
- package/dist/__tests__/bridge-session.test.d.ts.map +1 -0
- package/dist/__tests__/bridge-session.test.js +171 -0
- package/dist/__tests__/bridge-session.test.js.map +1 -0
- package/dist/__tests__/chunker.test.d.ts +2 -0
- package/dist/__tests__/chunker.test.d.ts.map +1 -0
- package/dist/__tests__/chunker.test.js +201 -0
- package/dist/__tests__/chunker.test.js.map +1 -0
- package/dist/__tests__/docs-core.test.d.ts +2 -0
- package/dist/__tests__/docs-core.test.d.ts.map +1 -0
- package/dist/__tests__/docs-core.test.js +137 -0
- package/dist/__tests__/docs-core.test.js.map +1 -0
- package/dist/__tests__/docs-fetcher.test.d.ts +2 -0
- package/dist/__tests__/docs-fetcher.test.d.ts.map +1 -0
- package/dist/__tests__/docs-fetcher.test.js +173 -0
- package/dist/__tests__/docs-fetcher.test.js.map +1 -0
- package/dist/__tests__/helpers.d.ts +8 -0
- package/dist/__tests__/helpers.d.ts.map +1 -0
- package/dist/__tests__/helpers.js +23 -0
- package/dist/__tests__/helpers.js.map +1 -0
- package/dist/__tests__/http-routes.test.d.ts +2 -0
- package/dist/__tests__/http-routes.test.d.ts.map +1 -0
- package/dist/__tests__/http-routes.test.js +233 -0
- package/dist/__tests__/http-routes.test.js.map +1 -0
- package/dist/__tests__/http-server.test.js +13 -6
- package/dist/__tests__/http-server.test.js.map +1 -1
- package/dist/__tests__/integration.test.js +9 -4
- package/dist/__tests__/integration.test.js.map +1 -1
- package/dist/__tests__/semantic-search.test.d.ts +2 -0
- package/dist/__tests__/semantic-search.test.d.ts.map +1 -0
- package/dist/__tests__/semantic-search.test.js +202 -0
- package/dist/__tests__/semantic-search.test.js.map +1 -0
- package/dist/__tests__/smoke.test.js +7 -3
- package/dist/__tests__/smoke.test.js.map +1 -1
- package/dist/__tests__/studio-client.test.d.ts +2 -0
- package/dist/__tests__/studio-client.test.d.ts.map +1 -0
- package/dist/__tests__/studio-client.test.js +25 -0
- package/dist/__tests__/studio-client.test.js.map +1 -0
- package/dist/__tests__/tool-nudges.test.d.ts +2 -0
- package/dist/__tests__/tool-nudges.test.d.ts.map +1 -0
- package/dist/__tests__/tool-nudges.test.js +60 -0
- package/dist/__tests__/tool-nudges.test.js.map +1 -0
- package/dist/__tests__/tool-registry.test.d.ts +2 -0
- package/dist/__tests__/tool-registry.test.d.ts.map +1 -0
- package/dist/__tests__/tool-registry.test.js +365 -0
- package/dist/__tests__/tool-registry.test.js.map +1 -0
- package/dist/__tests__/tools-bridge.test.d.ts +2 -0
- package/dist/__tests__/tools-bridge.test.d.ts.map +1 -0
- package/dist/__tests__/tools-bridge.test.js +396 -0
- package/dist/__tests__/tools-bridge.test.js.map +1 -0
- package/dist/__tests__/tools-docs.test.d.ts +2 -0
- package/dist/__tests__/tools-docs.test.d.ts.map +1 -0
- package/dist/__tests__/tools-docs.test.js +112 -0
- package/dist/__tests__/tools-docs.test.js.map +1 -0
- package/dist/__tests__/tools-guards.test.d.ts +2 -0
- package/dist/__tests__/tools-guards.test.d.ts.map +1 -0
- package/dist/__tests__/tools-guards.test.js +131 -0
- package/dist/__tests__/tools-guards.test.js.map +1 -0
- package/dist/__tests__/tools-runtime.test.d.ts +2 -0
- package/dist/__tests__/tools-runtime.test.d.ts.map +1 -0
- package/dist/__tests__/tools-runtime.test.js +214 -0
- package/dist/__tests__/tools-runtime.test.js.map +1 -0
- package/dist/__tests__/tools-visual.test.d.ts +2 -0
- package/dist/__tests__/tools-visual.test.d.ts.map +1 -0
- package/dist/__tests__/tools-visual.test.js +149 -0
- package/dist/__tests__/tools-visual.test.js.map +1 -0
- package/dist/bridge-service.d.ts +99 -12
- package/dist/bridge-service.d.ts.map +1 -1
- package/dist/bridge-service.js +238 -21
- package/dist/bridge-service.js.map +1 -1
- package/dist/docs/cache.d.ts +50 -0
- package/dist/docs/cache.d.ts.map +1 -0
- package/dist/docs/cache.js +123 -0
- package/dist/docs/cache.js.map +1 -0
- package/dist/docs/embeddings/chunker.d.ts +120 -0
- package/dist/docs/embeddings/chunker.d.ts.map +1 -0
- package/dist/docs/embeddings/chunker.js +395 -0
- package/dist/docs/embeddings/chunker.js.map +1 -0
- package/dist/docs/embeddings/embedder.d.ts +41 -0
- package/dist/docs/embeddings/embedder.d.ts.map +1 -0
- package/dist/docs/embeddings/embedder.js +113 -0
- package/dist/docs/embeddings/embedder.js.map +1 -0
- package/dist/docs/embeddings/index.d.ts +102 -0
- package/dist/docs/embeddings/index.d.ts.map +1 -0
- package/dist/docs/embeddings/index.js +250 -0
- package/dist/docs/embeddings/index.js.map +1 -0
- package/dist/docs/embeddings/manager.d.ts +68 -0
- package/dist/docs/embeddings/manager.d.ts.map +1 -0
- package/dist/docs/embeddings/manager.js +97 -0
- package/dist/docs/embeddings/manager.js.map +1 -0
- package/dist/docs/fetcher.d.ts +29 -0
- package/dist/docs/fetcher.d.ts.map +1 -0
- package/dist/docs/fetcher.js +244 -0
- package/dist/docs/fetcher.js.map +1 -0
- package/dist/docs/reference.d.ts +37 -0
- package/dist/docs/reference.d.ts.map +1 -0
- package/dist/docs/reference.js +108 -0
- package/dist/docs/reference.js.map +1 -0
- package/dist/docs/search.d.ts +194 -0
- package/dist/docs/search.d.ts.map +1 -0
- package/dist/docs/search.js +733 -0
- package/dist/docs/search.js.map +1 -0
- package/dist/http-server.d.ts.map +1 -1
- package/dist/http-server.js +52 -5
- package/dist/http-server.js.map +1 -1
- package/dist/index.d.ts +8 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -1035
- package/dist/index.js.map +1 -1
- package/dist/instructions.d.ts +15 -0
- package/dist/instructions.d.ts.map +1 -0
- package/dist/instructions.js +26 -0
- package/dist/instructions.js.map +1 -0
- package/dist/tools/defs/attributes.d.ts +6 -0
- package/dist/tools/defs/attributes.d.ts.map +1 -0
- package/dist/tools/defs/attributes.js +85 -0
- package/dist/tools/defs/attributes.js.map +1 -0
- package/dist/tools/defs/docs.d.ts +17 -0
- package/dist/tools/defs/docs.d.ts.map +1 -0
- package/dist/tools/defs/docs.js +151 -0
- package/dist/tools/defs/docs.js.map +1 -0
- package/dist/tools/defs/execute.d.ts +6 -0
- package/dist/tools/defs/execute.d.ts.map +1 -0
- package/dist/tools/defs/execute.js +21 -0
- package/dist/tools/defs/execute.js.map +1 -0
- package/dist/tools/defs/inspection.d.ts +7 -0
- package/dist/tools/defs/inspection.d.ts.map +1 -0
- package/dist/tools/defs/inspection.js +202 -0
- package/dist/tools/defs/inspection.js.map +1 -0
- package/dist/tools/defs/objects.d.ts +6 -0
- package/dist/tools/defs/objects.d.ts.map +1 -0
- package/dist/tools/defs/objects.js +111 -0
- package/dist/tools/defs/objects.js.map +1 -0
- package/dist/tools/defs/properties.d.ts +6 -0
- package/dist/tools/defs/properties.d.ts.map +1 -0
- package/dist/tools/defs/properties.js +71 -0
- package/dist/tools/defs/properties.js.map +1 -0
- package/dist/tools/defs/runtime.d.ts +6 -0
- package/dist/tools/defs/runtime.d.ts.map +1 -0
- package/dist/tools/defs/runtime.js +145 -0
- package/dist/tools/defs/runtime.js.map +1 -0
- package/dist/tools/defs/scripts.d.ts +18 -0
- package/dist/tools/defs/scripts.d.ts.map +1 -0
- package/dist/tools/defs/scripts.js +163 -0
- package/dist/tools/defs/scripts.js.map +1 -0
- package/dist/tools/defs/tags.d.ts +6 -0
- package/dist/tools/defs/tags.d.ts.map +1 -0
- package/dist/tools/defs/tags.js +74 -0
- package/dist/tools/defs/tags.js.map +1 -0
- package/dist/tools/defs/visual.d.ts +7 -0
- package/dist/tools/defs/visual.d.ts.map +1 -0
- package/dist/tools/defs/visual.js +208 -0
- package/dist/tools/defs/visual.js.map +1 -0
- package/dist/tools/index.d.ts +101 -25
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +580 -63
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/nudges.d.ts +25 -0
- package/dist/tools/nudges.d.ts.map +1 -0
- package/dist/tools/nudges.js +34 -0
- package/dist/tools/nudges.js.map +1 -0
- package/dist/tools/registry.d.ts +20 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +65 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/types.d.ts +24 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +2 -0
- package/dist/tools/types.js.map +1 -0
- package/package.json +7 -6
- package/studio-plugin/MCPPlugin.rbxmx +3 -238
- package/studio-plugin/plugin.luau +2041 -365
|
@@ -748,13 +748,6 @@ processRequest = function(request)
|
|
|
748
748
|
return handlers.getScriptSource(data)
|
|
749
749
|
elseif endpoint == "/api/set-script-source" then
|
|
750
750
|
return handlers.setScriptSource(data)
|
|
751
|
-
-- Partial script editing endpoints
|
|
752
|
-
elseif endpoint == "/api/edit-script-lines" then
|
|
753
|
-
return handlers.editScriptLines(data)
|
|
754
|
-
elseif endpoint == "/api/insert-script-lines" then
|
|
755
|
-
return handlers.insertScriptLines(data)
|
|
756
|
-
elseif endpoint == "/api/delete-script-lines" then
|
|
757
|
-
return handlers.deleteScriptLines(data)
|
|
758
751
|
-- Attribute endpoints
|
|
759
752
|
elseif endpoint == "/api/get-attribute" then
|
|
760
753
|
return handlers.getAttribute(data)
|
|
@@ -2498,237 +2491,9 @@ handlers.setScriptSource = function(requestData)
|
|
|
2498
2491
|
end
|
|
2499
2492
|
end
|
|
2500
2493
|
|
|
2501
|
-
--
|
|
2502
|
-
|
|
2503
|
-
|
|
2504
|
-
local startLine = requestData.startLine
|
|
2505
|
-
local endLine = requestData.endLine
|
|
2506
|
-
local newContent = requestData.newContent
|
|
2507
|
-
|
|
2508
|
-
if not instancePath or not startLine or not endLine or not newContent then
|
|
2509
|
-
return { error = "Instance path, startLine, endLine, and newContent are required" }
|
|
2510
|
-
end
|
|
2511
|
-
|
|
2512
|
-
-- Normalize escape sequences that may have been double-escaped
|
|
2513
|
-
newContent = newContent:gsub("\\n", "\n")
|
|
2514
|
-
newContent = newContent:gsub("\\t", "\t")
|
|
2515
|
-
newContent = newContent:gsub("\\r", "\r")
|
|
2516
|
-
newContent = newContent:gsub("\\\\", "\\")
|
|
2517
|
-
|
|
2518
|
-
local instance = getInstanceByPath(instancePath)
|
|
2519
|
-
if not instance then
|
|
2520
|
-
return { error = "Instance not found: " .. instancePath }
|
|
2521
|
-
end
|
|
2522
|
-
|
|
2523
|
-
if not instance:IsA("LuaSourceContainer") then
|
|
2524
|
-
return { error = "Instance is not a script-like object: " .. instance.ClassName }
|
|
2525
|
-
end
|
|
2526
|
-
|
|
2527
|
-
local success, result = pcall(function()
|
|
2528
|
-
local lines, hadTrailingNewline = splitLines(instance.Source)
|
|
2529
|
-
local totalLines = #lines
|
|
2530
|
-
|
|
2531
|
-
if startLine < 1 or startLine > totalLines then
|
|
2532
|
-
error("startLine out of range (1-" .. totalLines .. ")")
|
|
2533
|
-
end
|
|
2534
|
-
if endLine < startLine or endLine > totalLines then
|
|
2535
|
-
error("endLine out of range (" .. startLine .. "-" .. totalLines .. ")")
|
|
2536
|
-
end
|
|
2537
|
-
|
|
2538
|
-
-- Split new content into lines
|
|
2539
|
-
local newLines = select(1, splitLines(newContent))
|
|
2540
|
-
|
|
2541
|
-
-- Build new source: lines before + new content + lines after
|
|
2542
|
-
local resultLines = {}
|
|
2543
|
-
|
|
2544
|
-
-- Lines before the edit
|
|
2545
|
-
for i = 1, startLine - 1 do
|
|
2546
|
-
table.insert(resultLines, lines[i])
|
|
2547
|
-
end
|
|
2548
|
-
|
|
2549
|
-
-- New content lines
|
|
2550
|
-
for _, line in ipairs(newLines) do
|
|
2551
|
-
table.insert(resultLines, line)
|
|
2552
|
-
end
|
|
2553
|
-
|
|
2554
|
-
-- Lines after the edit
|
|
2555
|
-
for i = endLine + 1, totalLines do
|
|
2556
|
-
table.insert(resultLines, lines[i])
|
|
2557
|
-
end
|
|
2558
|
-
|
|
2559
|
-
local newSource = joinLines(resultLines, hadTrailingNewline)
|
|
2560
|
-
|
|
2561
|
-
-- Use UpdateSourceAsync for editor compatibility
|
|
2562
|
-
ScriptEditorService:UpdateSourceAsync(instance, function(oldContent)
|
|
2563
|
-
return newSource
|
|
2564
|
-
end)
|
|
2565
|
-
|
|
2566
|
-
ChangeHistoryService:SetWaypoint("Edit script lines " .. startLine .. "-" .. endLine .. ": " .. instance.Name)
|
|
2567
|
-
|
|
2568
|
-
return {
|
|
2569
|
-
success = true,
|
|
2570
|
-
instancePath = instancePath,
|
|
2571
|
-
editedLines = { startLine = startLine, endLine = endLine },
|
|
2572
|
-
linesRemoved = endLine - startLine + 1,
|
|
2573
|
-
linesAdded = #newLines,
|
|
2574
|
-
newLineCount = #resultLines,
|
|
2575
|
-
message = "Script lines edited successfully"
|
|
2576
|
-
}
|
|
2577
|
-
end)
|
|
2578
|
-
|
|
2579
|
-
if success then
|
|
2580
|
-
return result
|
|
2581
|
-
else
|
|
2582
|
-
return { error = "Failed to edit script lines: " .. tostring(result) }
|
|
2583
|
-
end
|
|
2584
|
-
end
|
|
2585
|
-
|
|
2586
|
-
-- Partial Script Editing: Insert lines after a specific line
|
|
2587
|
-
handlers.insertScriptLines = function(requestData)
|
|
2588
|
-
local instancePath = requestData.instancePath
|
|
2589
|
-
local afterLine = requestData.afterLine or 0 -- 0 means insert at beginning
|
|
2590
|
-
local newContent = requestData.newContent
|
|
2591
|
-
|
|
2592
|
-
if not instancePath or not newContent then
|
|
2593
|
-
return { error = "Instance path and newContent are required" }
|
|
2594
|
-
end
|
|
2595
|
-
|
|
2596
|
-
-- Normalize escape sequences that may have been double-escaped
|
|
2597
|
-
newContent = newContent:gsub("\\n", "\n")
|
|
2598
|
-
newContent = newContent:gsub("\\t", "\t")
|
|
2599
|
-
newContent = newContent:gsub("\\r", "\r")
|
|
2600
|
-
newContent = newContent:gsub("\\\\", "\\")
|
|
2601
|
-
|
|
2602
|
-
local instance = getInstanceByPath(instancePath)
|
|
2603
|
-
if not instance then
|
|
2604
|
-
return { error = "Instance not found: " .. instancePath }
|
|
2605
|
-
end
|
|
2606
|
-
|
|
2607
|
-
if not instance:IsA("LuaSourceContainer") then
|
|
2608
|
-
return { error = "Instance is not a script-like object: " .. instance.ClassName }
|
|
2609
|
-
end
|
|
2610
|
-
|
|
2611
|
-
local success, result = pcall(function()
|
|
2612
|
-
local lines, hadTrailingNewline = splitLines(instance.Source)
|
|
2613
|
-
local totalLines = #lines
|
|
2614
|
-
|
|
2615
|
-
if afterLine < 0 or afterLine > totalLines then
|
|
2616
|
-
error("afterLine out of range (0-" .. totalLines .. ")")
|
|
2617
|
-
end
|
|
2618
|
-
|
|
2619
|
-
-- Split new content into lines
|
|
2620
|
-
local newLines = select(1, splitLines(newContent))
|
|
2621
|
-
|
|
2622
|
-
-- Build new source
|
|
2623
|
-
local resultLines = {}
|
|
2624
|
-
|
|
2625
|
-
-- Lines before insertion point
|
|
2626
|
-
for i = 1, afterLine do
|
|
2627
|
-
table.insert(resultLines, lines[i])
|
|
2628
|
-
end
|
|
2629
|
-
|
|
2630
|
-
-- New content lines
|
|
2631
|
-
for _, line in ipairs(newLines) do
|
|
2632
|
-
table.insert(resultLines, line)
|
|
2633
|
-
end
|
|
2634
|
-
|
|
2635
|
-
-- Lines after insertion point
|
|
2636
|
-
for i = afterLine + 1, totalLines do
|
|
2637
|
-
table.insert(resultLines, lines[i])
|
|
2638
|
-
end
|
|
2639
|
-
|
|
2640
|
-
local newSource = joinLines(resultLines, hadTrailingNewline)
|
|
2641
|
-
|
|
2642
|
-
-- Use UpdateSourceAsync for editor compatibility
|
|
2643
|
-
ScriptEditorService:UpdateSourceAsync(instance, function(oldContent)
|
|
2644
|
-
return newSource
|
|
2645
|
-
end)
|
|
2646
|
-
|
|
2647
|
-
ChangeHistoryService:SetWaypoint("Insert script lines after line " .. afterLine .. ": " .. instance.Name)
|
|
2648
|
-
|
|
2649
|
-
return {
|
|
2650
|
-
success = true,
|
|
2651
|
-
instancePath = instancePath,
|
|
2652
|
-
insertedAfterLine = afterLine,
|
|
2653
|
-
linesInserted = #newLines,
|
|
2654
|
-
newLineCount = #resultLines,
|
|
2655
|
-
message = "Script lines inserted successfully"
|
|
2656
|
-
}
|
|
2657
|
-
end)
|
|
2658
|
-
|
|
2659
|
-
if success then
|
|
2660
|
-
return result
|
|
2661
|
-
else
|
|
2662
|
-
return { error = "Failed to insert script lines: " .. tostring(result) }
|
|
2663
|
-
end
|
|
2664
|
-
end
|
|
2665
|
-
|
|
2666
|
-
-- Partial Script Editing: Delete specific lines
|
|
2667
|
-
handlers.deleteScriptLines = function(requestData)
|
|
2668
|
-
local instancePath = requestData.instancePath
|
|
2669
|
-
local startLine = requestData.startLine
|
|
2670
|
-
local endLine = requestData.endLine
|
|
2671
|
-
|
|
2672
|
-
if not instancePath or not startLine or not endLine then
|
|
2673
|
-
return { error = "Instance path, startLine, and endLine are required" }
|
|
2674
|
-
end
|
|
2675
|
-
|
|
2676
|
-
local instance = getInstanceByPath(instancePath)
|
|
2677
|
-
if not instance then
|
|
2678
|
-
return { error = "Instance not found: " .. instancePath }
|
|
2679
|
-
end
|
|
2680
|
-
|
|
2681
|
-
if not instance:IsA("LuaSourceContainer") then
|
|
2682
|
-
return { error = "Instance is not a script-like object: " .. instance.ClassName }
|
|
2683
|
-
end
|
|
2684
|
-
|
|
2685
|
-
local success, result = pcall(function()
|
|
2686
|
-
local lines, hadTrailingNewline = splitLines(instance.Source)
|
|
2687
|
-
local totalLines = #lines
|
|
2688
|
-
|
|
2689
|
-
if startLine < 1 or startLine > totalLines then
|
|
2690
|
-
error("startLine out of range (1-" .. totalLines .. ")")
|
|
2691
|
-
end
|
|
2692
|
-
if endLine < startLine or endLine > totalLines then
|
|
2693
|
-
error("endLine out of range (" .. startLine .. "-" .. totalLines .. ")")
|
|
2694
|
-
end
|
|
2695
|
-
|
|
2696
|
-
-- Build new source without the deleted lines
|
|
2697
|
-
local resultLines = {}
|
|
2698
|
-
|
|
2699
|
-
for i = 1, startLine - 1 do
|
|
2700
|
-
table.insert(resultLines, lines[i])
|
|
2701
|
-
end
|
|
2702
|
-
|
|
2703
|
-
for i = endLine + 1, totalLines do
|
|
2704
|
-
table.insert(resultLines, lines[i])
|
|
2705
|
-
end
|
|
2706
|
-
|
|
2707
|
-
local newSource = joinLines(resultLines, hadTrailingNewline)
|
|
2708
|
-
|
|
2709
|
-
-- Use UpdateSourceAsync for editor compatibility
|
|
2710
|
-
ScriptEditorService:UpdateSourceAsync(instance, function(oldContent)
|
|
2711
|
-
return newSource
|
|
2712
|
-
end)
|
|
2713
|
-
|
|
2714
|
-
ChangeHistoryService:SetWaypoint("Delete script lines " .. startLine .. "-" .. endLine .. ": " .. instance.Name)
|
|
2715
|
-
|
|
2716
|
-
return {
|
|
2717
|
-
success = true,
|
|
2718
|
-
instancePath = instancePath,
|
|
2719
|
-
deletedLines = { startLine = startLine, endLine = endLine },
|
|
2720
|
-
linesDeleted = endLine - startLine + 1,
|
|
2721
|
-
newLineCount = #resultLines,
|
|
2722
|
-
message = "Script lines deleted successfully"
|
|
2723
|
-
}
|
|
2724
|
-
end)
|
|
2725
|
-
|
|
2726
|
-
if success then
|
|
2727
|
-
return result
|
|
2728
|
-
else
|
|
2729
|
-
return { error = "Failed to delete script lines: " .. tostring(result) }
|
|
2730
|
-
end
|
|
2731
|
-
end
|
|
2494
|
+
-- Legacy line-based partial script editors removed — superseded by the
|
|
2495
|
+
-- string-based editScript handler below. Line numbers shift after each
|
|
2496
|
+
-- edit, which makes line-based editing unreliable for AI workflows.
|
|
2732
2497
|
|
|
2733
2498
|
-- Attribute Tools: Get a single attribute
|
|
2734
2499
|
handlers.getAttribute = function(requestData)
|