c64bridge 0.8.1 → 0.9.1
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/.github/prompts/steer.prompt.md +55 -0
- package/AGENTS.md +9 -7
- package/README.md +192 -154
- package/data/embeddings_asm.json +1 -1
- package/data/embeddings_basic.json +1 -1
- package/data/embeddings_hardware.json +1 -1
- package/data/embeddings_mixed.json +1 -1
- package/data/embeddings_other.json +1 -1
- package/data/graphics/petscii-style-guide.md +4 -4
- package/data/graphics/sprite-charset-best-practices.md +9 -9
- package/data/vice/vice-binary-monitor-spec.md +938 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/c64Client.js +76 -2
- package/dist/device.js +129 -13
- package/dist/mcp-server.js +1 -1
- package/dist/prompts/registry.js +27 -25
- package/dist/rag/indexer.js +18 -8
- package/dist/rag/knowledgeIndex.js +112 -79
- package/dist/rag/resourceUris.js +93 -0
- package/dist/sidwaveCompiler.js +1 -1
- package/dist/{assemblyConverter.js → tools/assember.js} +10 -1
- package/dist/tools/audio.js +11 -11
- package/dist/{basicConverter.js → tools/basicTokenizer.js} +1 -1
- package/dist/tools/debug.js +159 -6
- package/dist/tools/developer.js +13 -13
- package/dist/tools/disassembler.js +478 -0
- package/dist/tools/graphics.js +10 -10
- package/dist/tools/input.js +338 -0
- package/dist/tools/machineControl.js +5 -5
- package/dist/tools/memory.js +336 -12
- package/dist/tools/meta/index.js +1 -1
- package/dist/tools/printer.js +11 -12
- package/dist/tools/programRunners.js +61 -22
- package/dist/tools/rag.js +9 -9
- package/dist/tools/registry/batch.js +167 -0
- package/dist/tools/registry/config.js +1 -1
- package/dist/tools/registry/disk.js +1 -1
- package/dist/tools/registry/drive.js +1 -1
- package/dist/tools/registry/extract.js +1 -1
- package/dist/tools/registry/graphics.js +102 -2
- package/dist/tools/registry/index.js +4 -0
- package/dist/tools/registry/input.js +2 -0
- package/dist/tools/registry/memory.js +62 -2
- package/dist/tools/registry/platform.js +1 -1
- package/dist/tools/registry/printer.js +1 -1
- package/dist/tools/registry/program.js +1 -1
- package/dist/tools/registry/rag.js +1 -1
- package/dist/tools/registry/sound.js +1 -1
- package/dist/tools/registry/stream.js +1 -1
- package/dist/tools/registry/system.js +1 -1
- package/dist/tools/schema.js +4 -5
- package/dist/tools/storage.js +15 -15
- package/dist/tools/streaming.js +3 -3
- package/dist/tools/symbolRegistry.js +49 -0
- package/dist/tools/types.js +56 -4
- package/dist/tools/vice.js +2 -5
- package/dist/vice/process.js +120 -2
- package/dist/vice/readiness.js +35 -0
- package/dist/vice/smokeOptions.js +44 -0
- package/dist/vice/viceClient.js +5 -1
- package/dist/viceRunner.js +2 -0
- package/doc/plans/prompts/README.md +7 -7
- package/mcp/prompts.json +42 -59
- package/mcp/protocol-examples.json +2 -2
- package/mcp/resources.json +179 -166
- package/mcp/schemas/c64_batch.schema.json +53 -0
- package/mcp/schemas/c64_config.schema.json +525 -283
- package/mcp/schemas/c64_debug.schema.json +763 -304
- package/mcp/schemas/c64_disk.schema.json +499 -243
- package/mcp/schemas/c64_drive.schema.json +165 -90
- package/mcp/schemas/c64_extract.schema.json +533 -274
- package/mcp/schemas/c64_graphics.schema.json +607 -295
- package/mcp/schemas/c64_input.schema.json +136 -0
- package/mcp/schemas/c64_memory.schema.json +637 -128
- package/mcp/schemas/c64_printer.schema.json +393 -196
- package/mcp/schemas/c64_program.schema.json +699 -340
- package/mcp/schemas/c64_rag.schema.json +100 -54
- package/mcp/schemas/c64_select_backend.schema.json +49 -23
- package/mcp/schemas/c64_sound.schema.json +1092 -577
- package/mcp/schemas/c64_stream.schema.json +89 -47
- package/mcp/schemas/c64_system.schema.json +351 -185
- package/mcp/schemas/c64_vice.schema.json +85 -47
- package/mcp/server.json +1 -1
- package/mcp/tools.json +7299 -3346
- package/mcp.json +3 -3
- package/package.json +17 -14
- package/scripts/fetch-external-sources.mjs +1 -2
- package/scripts/run-coverage.mjs +33 -1
- package/scripts/run-tests.mjs +2 -2
- package/scripts/run-tests.ts +275 -52
- package/scripts/update-readme.ts +132 -3
- package/server.json +2 -2
|
@@ -1,278 +1,534 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "object",
|
|
3
|
-
"
|
|
4
|
-
|
|
3
|
+
"properties": {
|
|
4
|
+
"op": {
|
|
5
|
+
"type": "string",
|
|
6
|
+
"enum": [
|
|
7
|
+
"list_drives",
|
|
8
|
+
"mount",
|
|
9
|
+
"unmount",
|
|
10
|
+
"file_info",
|
|
11
|
+
"create_image",
|
|
12
|
+
"find_and_run"
|
|
13
|
+
],
|
|
14
|
+
"description": "Selects the operation."
|
|
15
|
+
},
|
|
16
|
+
"drive": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"description": "Drive identifier (for example drive8).",
|
|
19
|
+
"minLength": 1
|
|
20
|
+
},
|
|
21
|
+
"image": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"description": "Absolute or Ultimate filesystem path to the disk image.",
|
|
24
|
+
"minLength": 1
|
|
25
|
+
},
|
|
26
|
+
"type": {
|
|
27
|
+
"type": [
|
|
28
|
+
"string",
|
|
29
|
+
"null"
|
|
30
|
+
],
|
|
31
|
+
"description": "Override detected image type when firmware guesses incorrectly.",
|
|
32
|
+
"enum": [
|
|
33
|
+
"d64",
|
|
34
|
+
"g64",
|
|
35
|
+
"d71",
|
|
36
|
+
"g71",
|
|
37
|
+
"d81"
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
"attachmentMode": {
|
|
41
|
+
"type": [
|
|
42
|
+
"string",
|
|
43
|
+
"null"
|
|
44
|
+
],
|
|
45
|
+
"description": "Attachment mode controlling how the firmware treats the mounted image.",
|
|
46
|
+
"enum": [
|
|
47
|
+
"readwrite",
|
|
48
|
+
"readonly",
|
|
49
|
+
"unlinked"
|
|
50
|
+
]
|
|
51
|
+
},
|
|
52
|
+
"driveMode": {
|
|
53
|
+
"type": [
|
|
54
|
+
"string",
|
|
55
|
+
"null"
|
|
56
|
+
],
|
|
57
|
+
"description": "Drive emulation mode to switch to during verification.",
|
|
58
|
+
"enum": [
|
|
59
|
+
"1541",
|
|
60
|
+
"1571",
|
|
61
|
+
"1581"
|
|
62
|
+
]
|
|
63
|
+
},
|
|
64
|
+
"verify": {
|
|
65
|
+
"type": "boolean",
|
|
66
|
+
"description": "When true, power on/reset/verify using the reliability workflow.",
|
|
67
|
+
"default": false
|
|
68
|
+
},
|
|
69
|
+
"powerOnIfNeeded": {
|
|
70
|
+
"type": "boolean",
|
|
71
|
+
"description": "Power on the drive automatically before mounting when verify=true.",
|
|
72
|
+
"default": true
|
|
73
|
+
},
|
|
74
|
+
"resetAfterMount": {
|
|
75
|
+
"type": "boolean",
|
|
76
|
+
"description": "Issue a drive reset after mounting when verify=true.",
|
|
77
|
+
"default": true
|
|
78
|
+
},
|
|
79
|
+
"maxRetries": {
|
|
80
|
+
"type": "integer",
|
|
81
|
+
"description": "Maximum number of mount retries when verify=true.",
|
|
82
|
+
"minimum": 0,
|
|
83
|
+
"maximum": 5,
|
|
84
|
+
"default": 2
|
|
85
|
+
},
|
|
86
|
+
"retryDelayMs": {
|
|
87
|
+
"type": "integer",
|
|
88
|
+
"description": "Delay between mount retry attempts when verify=true.",
|
|
89
|
+
"minimum": 0,
|
|
90
|
+
"maximum": 5000,
|
|
91
|
+
"default": 500
|
|
92
|
+
},
|
|
93
|
+
"path": {
|
|
94
|
+
"type": "string",
|
|
95
|
+
"description": "Absolute or Ultimate filesystem path to the disk image to mount or manage.",
|
|
96
|
+
"minLength": 1
|
|
97
|
+
},
|
|
98
|
+
"format": {
|
|
99
|
+
"type": "string",
|
|
100
|
+
"description": "Disk image format to create.",
|
|
101
|
+
"enum": [
|
|
102
|
+
"d64",
|
|
103
|
+
"d71",
|
|
104
|
+
"d81",
|
|
105
|
+
"dnp"
|
|
106
|
+
]
|
|
107
|
+
},
|
|
108
|
+
"diskname": {
|
|
109
|
+
"type": [
|
|
110
|
+
"string",
|
|
111
|
+
"null"
|
|
112
|
+
],
|
|
113
|
+
"description": "Optional disk label (1-16 characters, converted to PETSCII).",
|
|
114
|
+
"minLength": 1,
|
|
115
|
+
"maxLength": 16
|
|
116
|
+
},
|
|
117
|
+
"tracks": {
|
|
118
|
+
"type": [
|
|
119
|
+
"integer",
|
|
120
|
+
"null"
|
|
121
|
+
],
|
|
122
|
+
"description": "Track count (D64 supports 35 or 40; DNP requires explicit tracks).",
|
|
123
|
+
"minimum": 1,
|
|
124
|
+
"maximum": 255
|
|
125
|
+
},
|
|
126
|
+
"root": {
|
|
127
|
+
"type": [
|
|
128
|
+
"string",
|
|
129
|
+
"null"
|
|
130
|
+
],
|
|
131
|
+
"description": "Root path to search",
|
|
132
|
+
"minLength": 1,
|
|
133
|
+
"default": "/"
|
|
134
|
+
},
|
|
135
|
+
"nameContains": {
|
|
136
|
+
"type": "string",
|
|
137
|
+
"description": "Substring to match",
|
|
138
|
+
"minLength": 1
|
|
139
|
+
},
|
|
140
|
+
"extensions": {
|
|
141
|
+
"type": [
|
|
142
|
+
"array",
|
|
143
|
+
"null"
|
|
144
|
+
],
|
|
145
|
+
"items": {
|
|
146
|
+
"type": "string",
|
|
147
|
+
"description": "File extensions to include (without dot)",
|
|
148
|
+
"minLength": 1
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
"caseInsensitive": {
|
|
152
|
+
"type": [
|
|
153
|
+
"boolean",
|
|
154
|
+
"null"
|
|
155
|
+
],
|
|
156
|
+
"description": "Case-insensitive name match",
|
|
157
|
+
"default": true
|
|
158
|
+
},
|
|
159
|
+
"sort": {
|
|
160
|
+
"type": [
|
|
161
|
+
"string",
|
|
162
|
+
"null"
|
|
163
|
+
],
|
|
164
|
+
"description": "Sort order for matches",
|
|
165
|
+
"enum": [
|
|
166
|
+
"discovered",
|
|
167
|
+
"alphabetical"
|
|
168
|
+
],
|
|
169
|
+
"default": "discovered"
|
|
170
|
+
},
|
|
171
|
+
"waitMs": {
|
|
172
|
+
"type": [
|
|
173
|
+
"integer",
|
|
174
|
+
"null"
|
|
175
|
+
],
|
|
176
|
+
"description": "Delay after firmware run before returning",
|
|
177
|
+
"minimum": 0,
|
|
178
|
+
"default": 0
|
|
179
|
+
},
|
|
180
|
+
"captureCandidates": {
|
|
181
|
+
"type": [
|
|
182
|
+
"integer",
|
|
183
|
+
"null"
|
|
184
|
+
],
|
|
185
|
+
"description": "Include up to this many candidates in result",
|
|
186
|
+
"minimum": 1,
|
|
187
|
+
"maximum": 100,
|
|
188
|
+
"default": 10
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
"required": [
|
|
192
|
+
"op"
|
|
193
|
+
],
|
|
194
|
+
"description": "Disk operations available via the c64_disk tool.\n\nOperations:\n- list_drives: List Ultimate drive slots and their mounted images. Required inputs: none.\n- mount: Mount a disk image with optional verification and retries. Required inputs: drive, image. Optional inputs: type, attachmentMode, driveMode, verify, powerOnIfNeeded, resetAfterMount, maxRetries, retryDelayMs.\n- unmount: Remove the mounted image from an Ultimate drive slot. Required inputs: drive.\n- file_info: Inspect metadata for a file on the Ultimate filesystem. Required inputs: path.\n- create_image: Create a blank disk image of the specified format. Required inputs: format, path. Optional inputs: diskname, tracks.\n- find_and_run: Search for a PRG/CRT by name substring and run the first match. Required inputs: nameContains. Optional inputs: root, extensions, caseInsensitive, sort, waitMs, captureCandidates.",
|
|
195
|
+
"additionalProperties": false,
|
|
196
|
+
"x-c64bridge-operations": [
|
|
5
197
|
{
|
|
6
|
-
"
|
|
198
|
+
"op": "list_drives",
|
|
7
199
|
"description": "List Ultimate drive slots and their mounted images.",
|
|
8
|
-
"
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
200
|
+
"required": [],
|
|
201
|
+
"optional": [],
|
|
202
|
+
"inputSchema": {
|
|
203
|
+
"type": "object",
|
|
204
|
+
"description": "List Ultimate drive slots and their mounted images.",
|
|
205
|
+
"properties": {
|
|
206
|
+
"op": {
|
|
207
|
+
"const": "list_drives"
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
"additionalProperties": false,
|
|
211
|
+
"required": [
|
|
212
|
+
"op"
|
|
213
|
+
]
|
|
214
|
+
}
|
|
17
215
|
},
|
|
18
216
|
{
|
|
19
|
-
"
|
|
217
|
+
"op": "mount",
|
|
20
218
|
"description": "Mount a disk image with optional verification and retries.",
|
|
21
|
-
"properties": {
|
|
22
|
-
"drive": {
|
|
23
|
-
"type": "string",
|
|
24
|
-
"description": "Drive identifier (for example drive8).",
|
|
25
|
-
"minLength": 1
|
|
26
|
-
},
|
|
27
|
-
"image": {
|
|
28
|
-
"type": "string",
|
|
29
|
-
"description": "Absolute or Ultimate filesystem path to the disk image.",
|
|
30
|
-
"minLength": 1
|
|
31
|
-
},
|
|
32
|
-
"type": {
|
|
33
|
-
"type": [
|
|
34
|
-
"string",
|
|
35
|
-
"null"
|
|
36
|
-
],
|
|
37
|
-
"description": "Override detected image type when firmware guesses incorrectly.",
|
|
38
|
-
"enum": [
|
|
39
|
-
"d64",
|
|
40
|
-
"g64",
|
|
41
|
-
"d71",
|
|
42
|
-
"g71",
|
|
43
|
-
"d81"
|
|
44
|
-
]
|
|
45
|
-
},
|
|
46
|
-
"attachmentMode": {
|
|
47
|
-
"type": [
|
|
48
|
-
"string",
|
|
49
|
-
"null"
|
|
50
|
-
],
|
|
51
|
-
"description": "Attachment mode controlling how the firmware treats the mounted image.",
|
|
52
|
-
"enum": [
|
|
53
|
-
"readwrite",
|
|
54
|
-
"readonly",
|
|
55
|
-
"unlinked"
|
|
56
|
-
]
|
|
57
|
-
},
|
|
58
|
-
"driveMode": {
|
|
59
|
-
"type": [
|
|
60
|
-
"string",
|
|
61
|
-
"null"
|
|
62
|
-
],
|
|
63
|
-
"description": "Drive emulation mode to switch to during verification.",
|
|
64
|
-
"enum": [
|
|
65
|
-
"1541",
|
|
66
|
-
"1571",
|
|
67
|
-
"1581"
|
|
68
|
-
]
|
|
69
|
-
},
|
|
70
|
-
"verify": {
|
|
71
|
-
"type": "boolean",
|
|
72
|
-
"description": "When true, power on/reset/verify using the reliability workflow.",
|
|
73
|
-
"default": false
|
|
74
|
-
},
|
|
75
|
-
"powerOnIfNeeded": {
|
|
76
|
-
"type": "boolean",
|
|
77
|
-
"description": "Power on the drive automatically before mounting when verify=true.",
|
|
78
|
-
"default": true
|
|
79
|
-
},
|
|
80
|
-
"resetAfterMount": {
|
|
81
|
-
"type": "boolean",
|
|
82
|
-
"description": "Issue a drive reset after mounting when verify=true.",
|
|
83
|
-
"default": true
|
|
84
|
-
},
|
|
85
|
-
"maxRetries": {
|
|
86
|
-
"type": "integer",
|
|
87
|
-
"description": "Maximum number of mount retries when verify=true.",
|
|
88
|
-
"minimum": 0,
|
|
89
|
-
"maximum": 5,
|
|
90
|
-
"default": 2
|
|
91
|
-
},
|
|
92
|
-
"retryDelayMs": {
|
|
93
|
-
"type": "integer",
|
|
94
|
-
"description": "Delay between mount retry attempts when verify=true.",
|
|
95
|
-
"minimum": 0,
|
|
96
|
-
"maximum": 5000,
|
|
97
|
-
"default": 500
|
|
98
|
-
},
|
|
99
|
-
"op": {
|
|
100
|
-
"const": "mount"
|
|
101
|
-
}
|
|
102
|
-
},
|
|
103
219
|
"required": [
|
|
104
220
|
"drive",
|
|
105
|
-
"image"
|
|
106
|
-
|
|
221
|
+
"image"
|
|
222
|
+
],
|
|
223
|
+
"optional": [
|
|
224
|
+
"type",
|
|
225
|
+
"attachmentMode",
|
|
226
|
+
"driveMode",
|
|
227
|
+
"verify",
|
|
228
|
+
"powerOnIfNeeded",
|
|
229
|
+
"resetAfterMount",
|
|
230
|
+
"maxRetries",
|
|
231
|
+
"retryDelayMs"
|
|
107
232
|
],
|
|
108
|
-
"
|
|
233
|
+
"inputSchema": {
|
|
234
|
+
"type": "object",
|
|
235
|
+
"description": "Mount a disk image with optional verification and retries.",
|
|
236
|
+
"properties": {
|
|
237
|
+
"drive": {
|
|
238
|
+
"type": "string",
|
|
239
|
+
"description": "Drive identifier (for example drive8).",
|
|
240
|
+
"minLength": 1
|
|
241
|
+
},
|
|
242
|
+
"image": {
|
|
243
|
+
"type": "string",
|
|
244
|
+
"description": "Absolute or Ultimate filesystem path to the disk image.",
|
|
245
|
+
"minLength": 1
|
|
246
|
+
},
|
|
247
|
+
"type": {
|
|
248
|
+
"type": [
|
|
249
|
+
"string",
|
|
250
|
+
"null"
|
|
251
|
+
],
|
|
252
|
+
"description": "Override detected image type when firmware guesses incorrectly.",
|
|
253
|
+
"enum": [
|
|
254
|
+
"d64",
|
|
255
|
+
"g64",
|
|
256
|
+
"d71",
|
|
257
|
+
"g71",
|
|
258
|
+
"d81"
|
|
259
|
+
]
|
|
260
|
+
},
|
|
261
|
+
"attachmentMode": {
|
|
262
|
+
"type": [
|
|
263
|
+
"string",
|
|
264
|
+
"null"
|
|
265
|
+
],
|
|
266
|
+
"description": "Attachment mode controlling how the firmware treats the mounted image.",
|
|
267
|
+
"enum": [
|
|
268
|
+
"readwrite",
|
|
269
|
+
"readonly",
|
|
270
|
+
"unlinked"
|
|
271
|
+
]
|
|
272
|
+
},
|
|
273
|
+
"driveMode": {
|
|
274
|
+
"type": [
|
|
275
|
+
"string",
|
|
276
|
+
"null"
|
|
277
|
+
],
|
|
278
|
+
"description": "Drive emulation mode to switch to during verification.",
|
|
279
|
+
"enum": [
|
|
280
|
+
"1541",
|
|
281
|
+
"1571",
|
|
282
|
+
"1581"
|
|
283
|
+
]
|
|
284
|
+
},
|
|
285
|
+
"verify": {
|
|
286
|
+
"type": "boolean",
|
|
287
|
+
"description": "When true, power on/reset/verify using the reliability workflow.",
|
|
288
|
+
"default": false
|
|
289
|
+
},
|
|
290
|
+
"powerOnIfNeeded": {
|
|
291
|
+
"type": "boolean",
|
|
292
|
+
"description": "Power on the drive automatically before mounting when verify=true.",
|
|
293
|
+
"default": true
|
|
294
|
+
},
|
|
295
|
+
"resetAfterMount": {
|
|
296
|
+
"type": "boolean",
|
|
297
|
+
"description": "Issue a drive reset after mounting when verify=true.",
|
|
298
|
+
"default": true
|
|
299
|
+
},
|
|
300
|
+
"maxRetries": {
|
|
301
|
+
"type": "integer",
|
|
302
|
+
"description": "Maximum number of mount retries when verify=true.",
|
|
303
|
+
"minimum": 0,
|
|
304
|
+
"maximum": 5,
|
|
305
|
+
"default": 2
|
|
306
|
+
},
|
|
307
|
+
"retryDelayMs": {
|
|
308
|
+
"type": "integer",
|
|
309
|
+
"description": "Delay between mount retry attempts when verify=true.",
|
|
310
|
+
"minimum": 0,
|
|
311
|
+
"maximum": 5000,
|
|
312
|
+
"default": 500
|
|
313
|
+
},
|
|
314
|
+
"op": {
|
|
315
|
+
"const": "mount"
|
|
316
|
+
}
|
|
317
|
+
},
|
|
318
|
+
"required": [
|
|
319
|
+
"drive",
|
|
320
|
+
"image",
|
|
321
|
+
"op"
|
|
322
|
+
],
|
|
323
|
+
"additionalProperties": false
|
|
324
|
+
}
|
|
109
325
|
},
|
|
110
326
|
{
|
|
111
|
-
"
|
|
327
|
+
"op": "unmount",
|
|
112
328
|
"description": "Remove the mounted image from an Ultimate drive slot.",
|
|
113
|
-
"properties": {
|
|
114
|
-
"drive": {
|
|
115
|
-
"type": "string",
|
|
116
|
-
"description": "Drive identifier such as drive8, drive9, or unit name defined in the Ultimate UI.",
|
|
117
|
-
"minLength": 1
|
|
118
|
-
},
|
|
119
|
-
"op": {
|
|
120
|
-
"const": "unmount"
|
|
121
|
-
}
|
|
122
|
-
},
|
|
123
329
|
"required": [
|
|
124
|
-
"drive"
|
|
125
|
-
"op"
|
|
330
|
+
"drive"
|
|
126
331
|
],
|
|
127
|
-
"
|
|
332
|
+
"optional": [],
|
|
333
|
+
"inputSchema": {
|
|
334
|
+
"type": "object",
|
|
335
|
+
"description": "Remove the mounted image from an Ultimate drive slot.",
|
|
336
|
+
"properties": {
|
|
337
|
+
"drive": {
|
|
338
|
+
"type": "string",
|
|
339
|
+
"description": "Drive identifier such as drive8, drive9, or unit name defined in the Ultimate UI.",
|
|
340
|
+
"minLength": 1
|
|
341
|
+
},
|
|
342
|
+
"op": {
|
|
343
|
+
"const": "unmount"
|
|
344
|
+
}
|
|
345
|
+
},
|
|
346
|
+
"required": [
|
|
347
|
+
"drive",
|
|
348
|
+
"op"
|
|
349
|
+
],
|
|
350
|
+
"additionalProperties": false
|
|
351
|
+
}
|
|
128
352
|
},
|
|
129
353
|
{
|
|
130
|
-
"
|
|
354
|
+
"op": "file_info",
|
|
131
355
|
"description": "Inspect metadata for a file on the Ultimate filesystem.",
|
|
132
|
-
"properties": {
|
|
133
|
-
"path": {
|
|
134
|
-
"type": "string",
|
|
135
|
-
"description": "Absolute or Ultimate filesystem path to the disk image to mount or manage.",
|
|
136
|
-
"minLength": 1
|
|
137
|
-
},
|
|
138
|
-
"op": {
|
|
139
|
-
"const": "file_info"
|
|
140
|
-
}
|
|
141
|
-
},
|
|
142
356
|
"required": [
|
|
143
|
-
"path"
|
|
144
|
-
"op"
|
|
357
|
+
"path"
|
|
145
358
|
],
|
|
146
|
-
"
|
|
359
|
+
"optional": [],
|
|
360
|
+
"inputSchema": {
|
|
361
|
+
"type": "object",
|
|
362
|
+
"description": "Inspect metadata for a file on the Ultimate filesystem.",
|
|
363
|
+
"properties": {
|
|
364
|
+
"path": {
|
|
365
|
+
"type": "string",
|
|
366
|
+
"description": "Absolute or Ultimate filesystem path to the disk image to mount or manage.",
|
|
367
|
+
"minLength": 1
|
|
368
|
+
},
|
|
369
|
+
"op": {
|
|
370
|
+
"const": "file_info"
|
|
371
|
+
}
|
|
372
|
+
},
|
|
373
|
+
"required": [
|
|
374
|
+
"path",
|
|
375
|
+
"op"
|
|
376
|
+
],
|
|
377
|
+
"additionalProperties": false
|
|
378
|
+
}
|
|
147
379
|
},
|
|
148
380
|
{
|
|
149
|
-
"
|
|
381
|
+
"op": "create_image",
|
|
150
382
|
"description": "Create a blank disk image of the specified format.",
|
|
151
|
-
"properties": {
|
|
152
|
-
"format": {
|
|
153
|
-
"type": "string",
|
|
154
|
-
"description": "Disk image format to create.",
|
|
155
|
-
"enum": [
|
|
156
|
-
"d64",
|
|
157
|
-
"d71",
|
|
158
|
-
"d81",
|
|
159
|
-
"dnp"
|
|
160
|
-
]
|
|
161
|
-
},
|
|
162
|
-
"path": {
|
|
163
|
-
"type": "string",
|
|
164
|
-
"description": "Destination path on the Ultimate filesystem.",
|
|
165
|
-
"minLength": 1
|
|
166
|
-
},
|
|
167
|
-
"diskname": {
|
|
168
|
-
"type": [
|
|
169
|
-
"string",
|
|
170
|
-
"null"
|
|
171
|
-
],
|
|
172
|
-
"description": "Optional disk label (1-16 characters, converted to PETSCII).",
|
|
173
|
-
"minLength": 1,
|
|
174
|
-
"maxLength": 16
|
|
175
|
-
},
|
|
176
|
-
"tracks": {
|
|
177
|
-
"type": [
|
|
178
|
-
"integer",
|
|
179
|
-
"null"
|
|
180
|
-
],
|
|
181
|
-
"description": "Track count (D64 supports 35 or 40; DNP requires explicit tracks).",
|
|
182
|
-
"minimum": 1,
|
|
183
|
-
"maximum": 255
|
|
184
|
-
},
|
|
185
|
-
"op": {
|
|
186
|
-
"const": "create_image"
|
|
187
|
-
}
|
|
188
|
-
},
|
|
189
383
|
"required": [
|
|
190
384
|
"format",
|
|
191
|
-
"path"
|
|
192
|
-
|
|
385
|
+
"path"
|
|
386
|
+
],
|
|
387
|
+
"optional": [
|
|
388
|
+
"diskname",
|
|
389
|
+
"tracks"
|
|
193
390
|
],
|
|
194
|
-
"
|
|
391
|
+
"inputSchema": {
|
|
392
|
+
"type": "object",
|
|
393
|
+
"description": "Create a blank disk image of the specified format.",
|
|
394
|
+
"properties": {
|
|
395
|
+
"format": {
|
|
396
|
+
"type": "string",
|
|
397
|
+
"description": "Disk image format to create.",
|
|
398
|
+
"enum": [
|
|
399
|
+
"d64",
|
|
400
|
+
"d71",
|
|
401
|
+
"d81",
|
|
402
|
+
"dnp"
|
|
403
|
+
]
|
|
404
|
+
},
|
|
405
|
+
"path": {
|
|
406
|
+
"type": "string",
|
|
407
|
+
"description": "Destination path on the Ultimate filesystem.",
|
|
408
|
+
"minLength": 1
|
|
409
|
+
},
|
|
410
|
+
"diskname": {
|
|
411
|
+
"type": [
|
|
412
|
+
"string",
|
|
413
|
+
"null"
|
|
414
|
+
],
|
|
415
|
+
"description": "Optional disk label (1-16 characters, converted to PETSCII).",
|
|
416
|
+
"minLength": 1,
|
|
417
|
+
"maxLength": 16
|
|
418
|
+
},
|
|
419
|
+
"tracks": {
|
|
420
|
+
"type": [
|
|
421
|
+
"integer",
|
|
422
|
+
"null"
|
|
423
|
+
],
|
|
424
|
+
"description": "Track count (D64 supports 35 or 40; DNP requires explicit tracks).",
|
|
425
|
+
"minimum": 1,
|
|
426
|
+
"maximum": 255
|
|
427
|
+
},
|
|
428
|
+
"op": {
|
|
429
|
+
"const": "create_image"
|
|
430
|
+
}
|
|
431
|
+
},
|
|
432
|
+
"required": [
|
|
433
|
+
"format",
|
|
434
|
+
"path",
|
|
435
|
+
"op"
|
|
436
|
+
],
|
|
437
|
+
"additionalProperties": false
|
|
438
|
+
}
|
|
195
439
|
},
|
|
196
440
|
{
|
|
197
|
-
"
|
|
441
|
+
"op": "find_and_run",
|
|
198
442
|
"description": "Search for a PRG/CRT by name substring and run the first match.",
|
|
199
|
-
"
|
|
200
|
-
"
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
443
|
+
"required": [
|
|
444
|
+
"nameContains"
|
|
445
|
+
],
|
|
446
|
+
"optional": [
|
|
447
|
+
"root",
|
|
448
|
+
"extensions",
|
|
449
|
+
"caseInsensitive",
|
|
450
|
+
"sort",
|
|
451
|
+
"waitMs",
|
|
452
|
+
"captureCandidates"
|
|
453
|
+
],
|
|
454
|
+
"inputSchema": {
|
|
455
|
+
"type": "object",
|
|
456
|
+
"description": "Search for a PRG/CRT by name substring and run the first match.",
|
|
457
|
+
"properties": {
|
|
458
|
+
"root": {
|
|
459
|
+
"type": [
|
|
460
|
+
"string",
|
|
461
|
+
"null"
|
|
462
|
+
],
|
|
463
|
+
"description": "Root path to search",
|
|
464
|
+
"minLength": 1,
|
|
465
|
+
"default": "/"
|
|
466
|
+
},
|
|
467
|
+
"nameContains": {
|
|
220
468
|
"type": "string",
|
|
221
|
-
"description": "
|
|
469
|
+
"description": "Substring to match",
|
|
222
470
|
"minLength": 1
|
|
471
|
+
},
|
|
472
|
+
"extensions": {
|
|
473
|
+
"type": [
|
|
474
|
+
"array",
|
|
475
|
+
"null"
|
|
476
|
+
],
|
|
477
|
+
"items": {
|
|
478
|
+
"type": "string",
|
|
479
|
+
"description": "File extensions to include (without dot)",
|
|
480
|
+
"minLength": 1
|
|
481
|
+
}
|
|
482
|
+
},
|
|
483
|
+
"caseInsensitive": {
|
|
484
|
+
"type": [
|
|
485
|
+
"boolean",
|
|
486
|
+
"null"
|
|
487
|
+
],
|
|
488
|
+
"description": "Case-insensitive name match",
|
|
489
|
+
"default": true
|
|
490
|
+
},
|
|
491
|
+
"sort": {
|
|
492
|
+
"type": [
|
|
493
|
+
"string",
|
|
494
|
+
"null"
|
|
495
|
+
],
|
|
496
|
+
"description": "Sort order for matches",
|
|
497
|
+
"enum": [
|
|
498
|
+
"discovered",
|
|
499
|
+
"alphabetical"
|
|
500
|
+
],
|
|
501
|
+
"default": "discovered"
|
|
502
|
+
},
|
|
503
|
+
"waitMs": {
|
|
504
|
+
"type": [
|
|
505
|
+
"integer",
|
|
506
|
+
"null"
|
|
507
|
+
],
|
|
508
|
+
"description": "Delay after firmware run before returning",
|
|
509
|
+
"minimum": 0,
|
|
510
|
+
"default": 0
|
|
511
|
+
},
|
|
512
|
+
"captureCandidates": {
|
|
513
|
+
"type": [
|
|
514
|
+
"integer",
|
|
515
|
+
"null"
|
|
516
|
+
],
|
|
517
|
+
"description": "Include up to this many candidates in result",
|
|
518
|
+
"minimum": 1,
|
|
519
|
+
"maximum": 100,
|
|
520
|
+
"default": 10
|
|
521
|
+
},
|
|
522
|
+
"op": {
|
|
523
|
+
"const": "find_and_run"
|
|
223
524
|
}
|
|
224
525
|
},
|
|
225
|
-
"
|
|
226
|
-
"
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
"default": true
|
|
232
|
-
},
|
|
233
|
-
"sort": {
|
|
234
|
-
"type": [
|
|
235
|
-
"string",
|
|
236
|
-
"null"
|
|
237
|
-
],
|
|
238
|
-
"description": "Sort order for matches",
|
|
239
|
-
"enum": [
|
|
240
|
-
"discovered",
|
|
241
|
-
"alphabetical"
|
|
242
|
-
],
|
|
243
|
-
"default": "discovered"
|
|
244
|
-
},
|
|
245
|
-
"waitMs": {
|
|
246
|
-
"type": [
|
|
247
|
-
"integer",
|
|
248
|
-
"null"
|
|
249
|
-
],
|
|
250
|
-
"description": "Delay after firmware run before returning",
|
|
251
|
-
"minimum": 0,
|
|
252
|
-
"default": 0
|
|
253
|
-
},
|
|
254
|
-
"captureCandidates": {
|
|
255
|
-
"type": [
|
|
256
|
-
"integer",
|
|
257
|
-
"null"
|
|
258
|
-
],
|
|
259
|
-
"description": "Include up to this many candidates in result",
|
|
260
|
-
"minimum": 1,
|
|
261
|
-
"maximum": 100,
|
|
262
|
-
"default": 10
|
|
263
|
-
},
|
|
264
|
-
"op": {
|
|
265
|
-
"const": "find_and_run"
|
|
266
|
-
}
|
|
267
|
-
},
|
|
268
|
-
"required": [
|
|
269
|
-
"nameContains",
|
|
270
|
-
"op"
|
|
271
|
-
],
|
|
272
|
-
"additionalProperties": false
|
|
526
|
+
"required": [
|
|
527
|
+
"nameContains",
|
|
528
|
+
"op"
|
|
529
|
+
],
|
|
530
|
+
"additionalProperties": false
|
|
531
|
+
}
|
|
273
532
|
}
|
|
274
|
-
]
|
|
275
|
-
"discriminator": {
|
|
276
|
-
"propertyName": "op"
|
|
277
|
-
}
|
|
533
|
+
]
|
|
278
534
|
}
|