@el4cteo/rbx-studio-mcp 0.6.5 → 0.6.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.
Files changed (46) hide show
  1. package/README.md +28 -2
  2. package/dist/bridge/console.js +182 -0
  3. package/dist/bridge/console.js.map +1 -1
  4. package/dist/index.js +4 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/lib/cloudassets.js +233 -0
  7. package/dist/lib/cloudassets.js.map +1 -0
  8. package/dist/lib/credentials.js +180 -0
  9. package/dist/lib/credentials.js.map +1 -0
  10. package/dist/lib/livedata.js +325 -0
  11. package/dist/lib/livedata.js.map +1 -0
  12. package/dist/lib/liveluau.js +83 -0
  13. package/dist/lib/liveluau.js.map +1 -0
  14. package/dist/lib/liveops.js +358 -0
  15. package/dist/lib/liveops.js.map +1 -0
  16. package/dist/lib/opencloud.js +235 -0
  17. package/dist/lib/opencloud.js.map +1 -0
  18. package/dist/tools/audio.js +96 -0
  19. package/dist/tools/audio.js.map +1 -0
  20. package/dist/tools/data.js +122 -3
  21. package/dist/tools/data.js.map +1 -1
  22. package/dist/tools/exec.js +48 -1
  23. package/dist/tools/exec.js.map +1 -1
  24. package/dist/tools/scripts.js +112 -4
  25. package/dist/tools/scripts.js.map +1 -1
  26. package/dist/tools/spatial.js +135 -0
  27. package/dist/tools/spatial.js.map +1 -0
  28. package/dist/tools/universe.js +177 -0
  29. package/dist/tools/universe.js.map +1 -0
  30. package/dist/tools/upload.js +294 -0
  31. package/dist/tools/upload.js.map +1 -0
  32. package/dist/tools/world.js +361 -10
  33. package/dist/tools/world.js.map +1 -1
  34. package/package.json +74 -74
  35. package/plugin/src/Commands.luau +646 -622
  36. package/plugin/src/Config.luau +1 -1
  37. package/plugin/src/Phrase.luau +816 -766
  38. package/plugin/src/Prompt.luau +965 -961
  39. package/plugin/src/Secret.luau +86 -0
  40. package/plugin/src/Serialize.luau +759 -499
  41. package/plugin/src/handlers/Assets.luau +636 -587
  42. package/plugin/src/handlers/Audio.luau +411 -0
  43. package/plugin/src/handlers/Geometry.luau +722 -577
  44. package/plugin/src/handlers/Instances.luau +84 -4
  45. package/plugin/src/handlers/Spatial.luau +334 -0
  46. package/plugin/src/init.server.luau +883 -879
@@ -0,0 +1,96 @@
1
+ import { z } from "zod";
2
+ import { json } from "../lib/format.js";
3
+ import { defineTool } from "../lib/tool.js";
4
+ export function registerAudioTools(context) {
5
+ const { bridge } = context;
6
+ defineTool(context, {
7
+ name: "audio",
8
+ title: "Wire up Roblox's audio graph",
9
+ description: "Builds and inspects the modern audio API — AudioPlayer, emitters, " +
10
+ "effects and the Wires between them.\n\n" +
11
+ "Roblox's modern audio is a signal graph, not one instance with a Play " +
12
+ "method. An `AudioPlayer` holds the asset, an `AudioEmitter` puts the " +
13
+ "sound in the world or an `AudioDeviceOutput` sends it to the player's " +
14
+ "speakers, effects sit in between, and NOTHING is connected until a " +
15
+ "`Wire` joins two named pins. A place can hold a perfectly configured " +
16
+ "AudioPlayer with the right asset and the right volume and be " +
17
+ "completely silent, with no error anywhere, because the wire was never " +
18
+ "made. That is what this tool is for: `create` can make each instance, " +
19
+ "but the pin names, the direction and the choice of sink are where it " +
20
+ "actually goes wrong.\n\n" +
21
+ "`graph` is the one to reach for: it builds a whole working chain in " +
22
+ "one undoable step. `kind=\"world\"` gives a sound that comes from a " +
23
+ "part; `kind=\"ui\"` gives one with no position, for menus and music. " +
24
+ "Add `effects` to splice reverb, EQ or a fader into the chain.\n\n" +
25
+ "`wire` joins two instances you already have. `inspect` reads an " +
26
+ "existing graph back and reports every connection — including the ones " +
27
+ "that report Connected = false, which the Explorer does not show and " +
28
+ "which are the usual reason for silence.\n\n" +
29
+ "The old `Sound` instance still works and is still shorter for a plain " +
30
+ "one-off noise; use `create` for that. Come here when the case needs " +
31
+ "effects, per-listener mixing, or one emitter fed by several sources.",
32
+ inputSchema: {
33
+ op: z
34
+ .enum(["graph", "wire", "inspect"])
35
+ .default("graph")
36
+ .describe("'graph' builds a whole working chain, 'wire' joins two existing " +
37
+ "instances, 'inspect' reads a graph back."),
38
+ kind: z
39
+ .enum(["world", "ui"])
40
+ .optional()
41
+ .describe("graph only: 'world' is a sound heard from a place — it needs a " +
42
+ "part to come from. 'ui' has no position: menu clicks, music. " +
43
+ "Defaults to 'world'."),
44
+ parent: z
45
+ .string()
46
+ .optional()
47
+ .describe('graph only: where the graph goes. For kind="world" this is the ' +
48
+ "part or attachment the sound comes from."),
49
+ asset: z
50
+ .string()
51
+ .optional()
52
+ .describe('graph only: the audio id, e.g. "rbxassetid://1234". Find one with ' +
53
+ '`assets op="search" kind="audio"`. Leave it out to build the ' +
54
+ "chain now and set the asset later."),
55
+ name: z.string().optional().describe("graph only: name for the AudioPlayer."),
56
+ effects: z
57
+ .array(z.string())
58
+ .optional()
59
+ .describe("graph only: effect classes to splice between the player and the " +
60
+ 'output, in order, e.g. ["AudioFader", "AudioReverb"]. Also ' +
61
+ "accepts AudioEqualizer, AudioCompressor, AudioEcho, " +
62
+ "AudioDistortion, AudioPitchShifter, AudioChorus, AudioFlanger " +
63
+ "and AudioLimiter."),
64
+ from: z.string().optional().describe("wire only: the instance sound comes OUT of."),
65
+ to: z.string().optional().describe("wire only: the instance sound goes INTO."),
66
+ fromPin: z
67
+ .string()
68
+ .optional()
69
+ .describe('wire only: the source\'s output pin. Defaults to "Output", which ' +
70
+ "is right for everything but a channel splitter."),
71
+ toPin: z
72
+ .string()
73
+ .optional()
74
+ .describe('wire only: the target\'s input pin. Defaults to "Input". A wrong ' +
75
+ "pin name is accepted by the engine and produces silence, so the " +
76
+ "name is checked against the instance before the wire is made."),
77
+ path: z
78
+ .string()
79
+ .optional()
80
+ .describe("inspect only: where to look. Omit to walk the whole place, which " +
81
+ "is the right call when tracking down silence of unknown origin."),
82
+ studioId: z.string().optional().describe("Target Studio; omit for the active one."),
83
+ },
84
+ }, async (args) => {
85
+ const { op, studioId, ...rest } = args;
86
+ const response = await bridge.call(op === "wire" ? "audio.wire" : op === "inspect" ? "audio.inspect" : "audio.graph", rest, { studioId, timeoutMs: 30_000 });
87
+ if (op === "graph") {
88
+ return json(response, "Nothing plays on its own — call `AudioPlayer:Play()` from a script, " +
89
+ "or set `Playing` with `modify`. Check the result's `note` and " +
90
+ "`warnings` first: they are the difference between a graph that is " +
91
+ "wired and one that is audible.");
92
+ }
93
+ return json(response);
94
+ });
95
+ }
96
+ //# sourceMappingURL=audio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio.js","sourceRoot":"","sources":["../../src/tools/audio.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,9 @@
1
1
  import { z } from "zod";
2
+ import { ToolError } from "../lib/errors.js";
2
3
  import { json, table, text, textOf } from "../lib/format.js";
4
+ import { liveDataStore } from "../lib/livedata.js";
5
+ import { snapshotDataStores } from "../lib/liveops.js";
6
+ import { requireCredentials, requireUniverse } from "../lib/opencloud.js";
3
7
  import { defineTool } from "../lib/tool.js";
4
8
  /**
5
9
  * Data store calls cross the network twice — bridge to Studio, Studio to
@@ -8,6 +12,69 @@ import { defineTool } from "../lib/tool.js";
8
12
  * so the ceiling is generous on purpose.
9
13
  */
10
14
  const TIMEOUT_MS = 45_000;
15
+ /**
16
+ * The live path: Open Cloud instead of the Studio bridge.
17
+ *
18
+ * Writes are gated on `confirm` exactly as the Studio path is, and for a
19
+ * stronger reason — this is the data of people who are playing right now, and
20
+ * there is no undo, no recording, and no "it was only the Studio copy".
21
+ */
22
+ async function live(args) {
23
+ if (args.kind === "memory") {
24
+ throw new ToolError("UNSUPPORTED", 'MemoryStore over Open Cloud is not wired up here yet (target="live").', 'Use target="studio" for now. Roblox does expose memory stores over Open ' +
25
+ "Cloud (queues and sorted maps under /cloud/v2/universes/.../memory-store), " +
26
+ "it simply has no route through this tool yet — so this is a gap here, " +
27
+ "not a platform limit.");
28
+ }
29
+ const writing = args.op === "set" || args.op === "remove" || args.op === "increment";
30
+ if (writing && args.confirm !== true) {
31
+ throw new ToolError("NEEDS_CONFIRM", `A live ${args.op} changes the data of players in the running game.`, "Nothing here can undo it. Read the key first, then pass confirm: true.");
32
+ }
33
+ const credentials = await requireCredentials();
34
+ const universe = await requireUniverse(args.universeId);
35
+ if (args.op === "snapshot") {
36
+ // Handled before this function is reached; narrowed here so the shared
37
+ // LiveArgs type does not have to carry an op it has no path for.
38
+ throw new ToolError("UNREACHABLE", "snapshot is handled before the live path.");
39
+ }
40
+ const result = await liveDataStore(credentials, {
41
+ op: args.op,
42
+ kind: args.kind === "ordered" ? "ordered" : "data",
43
+ universe,
44
+ store: args.store,
45
+ scope: args.scope,
46
+ key: args.key,
47
+ value: args.value,
48
+ amount: args.amount,
49
+ limit: args.limit ?? 50,
50
+ cursor: args.cursor,
51
+ create: args.create,
52
+ });
53
+ const items = result["items"];
54
+ if (items) {
55
+ if (items.length === 0) {
56
+ return text(args.kind === "ordered"
57
+ ? `${args.store} has no entries in scope "${args.scope ?? "global"}". An ordered ` +
58
+ 'store written with no scope lands in "global"; one written with a scope ' +
59
+ "is invisible from any other."
60
+ : args.store === undefined
61
+ ? `Universe ${universe} has no data stores.`
62
+ : `Nothing in ${args.store}. Check the \`scope\` — keys written under one are ` +
63
+ "invisible without it.");
64
+ }
65
+ const columns = args.kind === "ordered"
66
+ ? ["rank", "key", "value"]
67
+ : args.op === "versions"
68
+ ? ["version", "created", "deleted"]
69
+ : args.store === undefined
70
+ ? ["store", "created", "state"]
71
+ : ["key", "state"];
72
+ return text(textOf(table(columns, items, {
73
+ more: result["truncated"] === true ? "more available — raise `limit`" : undefined,
74
+ })));
75
+ }
76
+ return json(result);
77
+ }
11
78
  export function registerDataTools(context) {
12
79
  const { bridge } = context;
13
80
  defineTool(context, {
@@ -34,15 +101,55 @@ export function registerDataTools(context) {
34
101
  "DataStore needs 'Enable Studio Access to API Services' ticked in Game " +
35
102
  "Settings → Security, and a published place. If it is off, this tool " +
36
103
  "says so in those words rather than reporting the raw 502. MemoryStore " +
37
- "needs neither.",
104
+ "needs neither.\n\n" +
105
+ "`target=\"live\"` is the other half of this tool and the one that " +
106
+ "answers a real bug report. It goes to Roblox directly instead of " +
107
+ "through Studio, so it sees exactly what the running servers see — not " +
108
+ "what the place happens to be connected to, and with no Studio API " +
109
+ "toggle involved. Use it whenever the question is about a player who is " +
110
+ "actually playing. It needs an Open Cloud key and a universe id; the " +
111
+ "user sets both once with `cloud` in the Studio panel.\n\n" +
112
+ "`kind=\"ordered\"` (live only) is OrderedDataStoreService, the " +
113
+ "leaderboard backend: numbers only, always sorted, no history. `list` " +
114
+ "returns it ranked highest first, which is the leaderboard itself.\n\n" +
115
+ "`op=\"snapshot\"` is the safety net. It tells Roblox to snapshot " +
116
+ "every data store in the experience, so support can roll them back. " +
117
+ "TAKE ONE BEFORE ANY LIVE WRITE. Roblox allows one per experience " +
118
+ "per UTC day, and the result says whether this call actually took " +
119
+ "one — a second call the same day reports success while doing " +
120
+ "nothing, and anything written since the first one is not covered.",
38
121
  inputSchema: {
122
+ target: z
123
+ .enum(["studio", "live"])
124
+ .default("studio")
125
+ .describe("'studio' reads through the connected Studio — right while " +
126
+ "building. 'live' goes to Roblox over Open Cloud and sees what " +
127
+ "the published game's servers see — right for a bug report."),
128
+ universeId: z
129
+ .string()
130
+ .optional()
131
+ .describe("live only: which game. Omit to use the one set with `cloud " +
132
+ "universe <id>` in the panel."),
133
+ amount: z
134
+ .number()
135
+ .optional()
136
+ .describe('live increment only: how much to add. Negative subtracts. Safer ' +
137
+ "than get-then-set for currency, which loses whatever the player " +
138
+ "earned in between."),
139
+ create: z
140
+ .boolean()
141
+ .optional()
142
+ .describe("live set only: allow writing a key that does not exist yet. Off " +
143
+ "by default — Open Cloud separates create from update, and a " +
144
+ "typo'd key silently creating a second empty save beside the real " +
145
+ "one is exactly what looks like a player's data resetting."),
39
146
  op: z
40
- .enum(["list", "get", "versions", "set", "remove"])
147
+ .enum(["list", "get", "versions", "set", "remove", "increment", "snapshot"])
41
148
  .default("list")
42
149
  .describe("'list' shows stores (no `store`) or a store's keys (with one). " +
43
150
  "'versions' is DataStore only and is how you see a key's history."),
44
151
  kind: z
45
- .enum(["data", "memory"])
152
+ .enum(["data", "memory", "ordered"])
46
153
  .default("data")
47
154
  .describe("'data' = DataStoreService, permanent and versioned. 'memory' = " +
48
155
  "MemoryStoreService, shared and expiring. They are separate " +
@@ -103,6 +210,18 @@ export function registerDataTools(context) {
103
210
  readOnly: false,
104
211
  destructive: true,
105
212
  }, async (args) => {
213
+ if (args.op === "snapshot") {
214
+ const { requireCredentials: needKey, requireUniverse: needUniverse } = await import("../lib/opencloud.js");
215
+ return json(await snapshotDataStores(await needKey(), await needUniverse(args.universeId)));
216
+ }
217
+ if (args.target === "live")
218
+ return live(args);
219
+ if (args.kind === "ordered") {
220
+ throw new ToolError("UNSUPPORTED", 'kind="ordered" only works with target="live".', "Studio has no way to enumerate an OrderedDataStore; Open Cloud does.");
221
+ }
222
+ if (args.op === "increment") {
223
+ throw new ToolError("UNSUPPORTED", 'op="increment" only works with target="live".', 'Read with `get` and write with `set` against Studio, or use target="live".');
224
+ }
106
225
  const response = await bridge.call(`data.${args.op}`, {
107
226
  kind: args.kind,
108
227
  store: args.store,
@@ -1 +1 @@
1
- {"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/tools/data.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/tools/data.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,8 @@
1
1
  import { z } from "zod";
2
2
  import { json, table, text } from "../lib/format.js";
3
+ import { ToolError } from "../lib/errors.js";
4
+ import { runLiveLuau } from "../lib/liveluau.js";
5
+ import { requireCredentials, requirePlace, requireUniverse } from "../lib/opencloud.js";
3
6
  import { defineTool } from "../lib/tool.js";
4
7
  export function registerExecTools(context) {
5
8
  const { bridge } = context;
@@ -33,17 +36,61 @@ export function registerExecTools(context) {
33
36
  "a zero is indistinguishable from a genuine zero. Read live state off the " +
34
37
  "DataModel instead (instances, attributes, properties), or have the game " +
35
38
  "print it and read that with `console`. The result warns when a call could " +
36
- "have hit this.",
39
+ "have hit this.\n\n" +
40
+ "`target=\"live\"` runs the script on Roblox's servers against the " +
41
+ "PUBLISHED place instead, with no Studio involved. That is how you " +
42
+ "read or repair production: a real player's data store entry, what " +
43
+ "the live game actually holds, a migration over saved data. " +
44
+ "Everything the script prints comes back in `logs`.\n\n" +
45
+ "BE CAREFUL WITH IT. The Studio path has an undo stack and a place " +
46
+ "nobody is playing. This one touches live data and live players, and " +
47
+ "nothing here can put any of it back — so it needs `confirm: true` " +
48
+ "and you should read before you write. Roblox queues it as a task, " +
49
+ "so expect seconds, not milliseconds, and a `state` of COMPLETE or " +
50
+ "FAILED rather than a bare value.",
37
51
  inputSchema: {
38
52
  source: z
39
53
  .string()
40
54
  .min(1)
41
55
  .describe("Luau to run. In an editor session this has plugin permissions, so " +
42
56
  "`game`, `workspace` and plugin-only APIs are all reachable."),
57
+ target: z
58
+ .enum(["studio", "live"])
59
+ .default("studio")
60
+ .describe("'studio' runs in the connected Studio, with plugin " +
61
+ "permissions. 'live' runs on Roblox's servers against the " +
62
+ "published place — production, with no undo."),
63
+ universeId: z.string().optional().describe("live only: which game. Omit to use `cloud universe`."),
64
+ placeId: z.string().optional().describe("live only: which place. Omit to use `cloud place`."),
65
+ timeoutSeconds: z
66
+ .number()
67
+ .int()
68
+ .min(1)
69
+ .max(300)
70
+ .optional()
71
+ .describe("live only: how long the script may run. Defaults to 30."),
72
+ confirm: z
73
+ .boolean()
74
+ .optional()
75
+ .describe("Required for target=\"live\". This runs against the game people " +
76
+ "are playing and nothing here can undo it."),
43
77
  studioId: z.string().optional().describe("Target Studio; omit for the active one."),
44
78
  },
45
79
  destructive: true,
46
80
  }, async (args) => {
81
+ if (args.target === "live") {
82
+ if (args.confirm !== true) {
83
+ throw new ToolError("NEEDS_CONFIRM", "This would run against the published game, where people are playing.", "There is no undo and no recording. Read the script once more, " +
84
+ "then pass confirm: true.");
85
+ }
86
+ const credentials = await requireCredentials();
87
+ return json(await runLiveLuau(credentials, {
88
+ universeId: await requireUniverse(args.universeId),
89
+ placeId: await requirePlace(args.placeId),
90
+ source: args.source,
91
+ timeoutSeconds: args.timeoutSeconds ?? 30,
92
+ }));
93
+ }
47
94
  const response = await bridge.call("exec.run", { source: args.source }, { studioId: args.studioId, timeoutMs: 60_000 });
48
95
  const parts = [];
49
96
  if (response.output.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/tools/exec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/tools/exec.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,8 @@
1
1
  import { z } from "zod";
2
- import { body, cursorSchema, decodeCursor, encodeCursor, limitSchema, table, text, } from "../lib/format.js";
2
+ import { body, cursorSchema, decodeCursor, encodeCursor, json, limitSchema, table, text } from "../lib/format.js";
3
+ import { ToolError } from "../lib/errors.js";
4
+ import { liveChildren, liveInstance, liveScriptWrite, resolveLivePath } from "../lib/liveops.js";
5
+ import { requireCredentials, requirePlace, requireUniverse } from "../lib/opencloud.js";
3
6
  import { defineTool } from "../lib/tool.js";
4
7
  /**
5
8
  * Prefixes each line with its number, right-aligned to the widest one.
@@ -38,7 +41,16 @@ export function registerScriptTools(context) {
38
41
  "`open` puts a script on the user's screen at a line, instead of telling " +
39
42
  "them where to look. Ask for it when you are pointing at something they " +
40
43
  "should see; it is not automatic, and reading twenty scripts does not " +
41
- "rearrange their editor.",
44
+ "rearrange their editor.\n\n" +
45
+ "`target=\"live\"` reads the code of the PUBLISHED place instead, with " +
46
+ "no Studio involved — which is how you check what is actually " +
47
+ "deployed rather than what is on someone's machine. Two limits are " +
48
+ "real and worth knowing before you reach for it: Roblox's Instance " +
49
+ "API can only see Folders and scripts, so a path through a Model or " +
50
+ "a Part cannot be walked at all; and it addresses things by GUID " +
51
+ "with no search, so each segment of the path costs a round trip. " +
52
+ "Expect seconds. `list: true` shows what is under a path instead of " +
53
+ "reading it, which is how you find your way down.",
42
54
  inputSchema: {
43
55
  op: z
44
56
  .enum(["read", "open"])
@@ -51,6 +63,18 @@ export function registerScriptTools(context) {
51
63
  .min(1)
52
64
  .optional()
53
65
  .describe("open only: line to put the cursor on."),
66
+ target: z
67
+ .enum(["studio", "live"])
68
+ .default("studio")
69
+ .describe("'studio' reads the open place. 'live' reads the published " +
70
+ "place over Open Cloud, Folders and scripts only."),
71
+ list: z
72
+ .boolean()
73
+ .optional()
74
+ .describe("live only: list what is under the first path instead of reading " +
75
+ "it. Pass an empty path list to see the top level."),
76
+ universeId: z.string().optional().describe("live only: omit to use `cloud universe`."),
77
+ placeId: z.string().optional().describe("live only: omit to use `cloud place`."),
54
78
  paths: z
55
79
  .array(z.union([
56
80
  z.string().describe("A script path, read in full."),
@@ -95,6 +119,46 @@ export function registerScriptTools(context) {
95
119
  readOnly: false,
96
120
  destructive: false,
97
121
  }, async (args) => {
122
+ if (args.target === "live") {
123
+ const credentials = await requireCredentials();
124
+ const universeId = await requireUniverse(args.universeId);
125
+ const placeId = await requirePlace(args.placeId);
126
+ const first = args.paths[0];
127
+ const wanted = typeof first === "string" ? first : first?.path;
128
+ if (args.list === true) {
129
+ // An empty path means the root, which is how you start exploring a
130
+ // place you have never walked from the outside.
131
+ const at = wanted === undefined || wanted === ""
132
+ ? { id: "root" }
133
+ : await resolveLivePath(credentials, { universeId, placeId, path: wanted });
134
+ const children = await liveChildren(credentials, {
135
+ universeId,
136
+ placeId,
137
+ instanceId: at.id,
138
+ limit: 100,
139
+ });
140
+ const items = children["items"];
141
+ if (items.length === 0) {
142
+ return text(`Nothing under ${wanted ?? "the root"} that the Instance API can see. ` +
143
+ "It only reports Folders and scripts.");
144
+ }
145
+ return table(["name", "className", "hasChildren"], items);
146
+ }
147
+ if (wanted === undefined)
148
+ return text('live read needs a path in `paths`.');
149
+ const at = await resolveLivePath(credentials, { universeId, placeId, path: wanted });
150
+ const read = await liveInstance(credentials, {
151
+ universeId,
152
+ placeId,
153
+ instanceId: at.id,
154
+ });
155
+ const source = read["source"];
156
+ if (typeof source !== "string") {
157
+ return text(`${wanted} is a ${read["className"]}, which holds no source. ` +
158
+ "Use `list: true` to see what is inside it.");
159
+ }
160
+ return body(source, `${wanted} (${read["className"]}, published place)`);
161
+ }
98
162
  if (args.op === "open") {
99
163
  /*
100
164
  * One path, not the batch. Opening is a thing that happens to the
@@ -193,8 +257,27 @@ export function registerScriptTools(context) {
193
257
  "Writes go through `ScriptEditorService:UpdateSourceAsync`, so an open " +
194
258
  "editor tab updates in place and unsaved work is preserved. Undo for " +
195
259
  "source changes is the script editor's own, per script — Ctrl+Z in a " +
196
- "script tab reverts that script, not the whole batch.",
260
+ "script tab reverts that script, not the whole batch.\n\n" +
261
+ "`target=\"live\"` edits the PUBLISHED place instead. It takes ONE " +
262
+ "edit, it replaces the whole `source` rather than finding and " +
263
+ "replacing, and there is no undo of any kind — so read the script " +
264
+ "with `script_read target=\"live\"` first and send back the whole " +
265
+ "thing. Needs `confirm: true`.\n\n" +
266
+ "It changes the SAVED place, not running servers: people already " +
267
+ "playing keep the old code until their server empties. Follow it " +
268
+ "with `universe op=\"restart\"` to roll them over.",
197
269
  inputSchema: {
270
+ target: z
271
+ .enum(["studio", "live"])
272
+ .default("studio")
273
+ .describe("'studio' edits the open place. 'live' rewrites a script in the " +
274
+ "published place over Open Cloud — one file, whole source, no " +
275
+ "undo."),
276
+ path: z.string().optional().describe('live only: the script, e.g. "ServerScriptService.Main".'),
277
+ source: z.string().optional().describe("live only: the complete new source."),
278
+ universeId: z.string().optional().describe("live only: omit to use `cloud universe`."),
279
+ placeId: z.string().optional().describe("live only: omit to use `cloud place`."),
280
+ confirm: z.boolean().optional().describe('Required for target="live".'),
198
281
  edits: z
199
282
  .array(z.object({
200
283
  path: z
@@ -242,13 +325,38 @@ export function registerScriptTools(context) {
242
325
  "edit is refused if the script changed since you read it, instead " +
243
326
  "of being applied to source you have not seen."),
244
327
  }))
245
- .min(1)
246
328
  .max(50)
247
329
  .describe("Edits to apply together as one undoable step."),
248
330
  studioId: z.string().optional().describe("Target Studio; omit for the active one."),
249
331
  },
250
332
  destructive: true,
251
333
  }, async (args) => {
334
+ if (args.target === "live") {
335
+ if (!args.path || args.source === undefined) {
336
+ throw new ToolError("BAD_PARAMS", 'live edit needs `path` and `source`.');
337
+ }
338
+ if (args.confirm !== true) {
339
+ throw new ToolError("NEEDS_CONFIRM", "This rewrites a script in the published place.", "There is no undo. Read it with `script_read target=\"live\"` first " +
340
+ "and send back the whole file, then pass confirm: true.");
341
+ }
342
+ const credentials = await requireCredentials();
343
+ const universeId = await requireUniverse(args.universeId);
344
+ const placeId = await requirePlace(args.placeId);
345
+ const at = await resolveLivePath(credentials, { universeId, placeId, path: args.path });
346
+ if (at.className !== "Script" && at.className !== "LocalScript" && at.className !== "ModuleScript") {
347
+ throw new ToolError("WRONG_KIND", `${args.path} is a ${at.className}, which has no source to write.`);
348
+ }
349
+ return json(await liveScriptWrite(credentials, {
350
+ universeId,
351
+ placeId,
352
+ instanceId: at.id,
353
+ className: at.className,
354
+ source: args.source,
355
+ }));
356
+ }
357
+ if (!args.edits || args.edits.length === 0) {
358
+ throw new ToolError("BAD_PARAMS", "script_edit needs at least one entry in `edits`.");
359
+ }
252
360
  const response = await bridge.call("script.edit", { edits: args.edits }, { studioId: args.studioId, timeoutMs: 30_000 });
253
361
  return table(["path", "className", "edits", "lineCount", "lineDelta"], response.items);
254
362
  });