c64bridge 0.7.4 → 0.8.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/.github/prompts/README.md +14 -4
- package/.github/prompts/assembly-routine-session.prompt.md +9 -9
- package/.github/prompts/basic-program-session.prompt.md +11 -9
- package/.github/prompts/drive-management-session.prompt.md +9 -9
- package/.github/prompts/hello-world-session.prompt.md +17 -0
- package/.github/prompts/petscii-art-session.prompt.md +9 -9
- package/.github/prompts/play-classic-game.prompt.md +9 -9
- package/.github/prompts/pr-converge.prompt.md +13 -0
- package/.github/prompts/sid-music-session.prompt.md +9 -9
- package/AGENTS.md +59 -60
- package/README.md +550 -191
- package/data/assembly/assembly-spec.md +290 -1
- package/data/context/bootstrap.md +26 -2
- package/data/context/fast-paths.md +44 -0
- package/data/graphics/petscii-style-guide.md +6 -2
- package/data/graphics/sprite-charset-best-practices.md +5 -5
- package/dist/.tsbuildinfo +1 -1
- package/dist/c64Client.js +990 -26
- package/dist/config.js +5 -1
- package/dist/device.js +680 -57
- package/dist/diagnostics.js +371 -0
- package/dist/mcp/metadata.js +39 -0
- package/dist/mcp-server.js +170 -20
- package/dist/platform.js +10 -2
- package/dist/prompts/registry.js +166 -309
- package/dist/rag/init.js +37 -1
- package/dist/rag/knowledgeIndex.js +18 -6
- package/dist/rag/rateLimiter.js +2 -2
- package/dist/streamCapture.js +135 -0
- package/dist/tools/audio.js +3 -1
- package/dist/tools/debug.js +470 -0
- package/dist/tools/developer.js +10 -4
- package/dist/tools/graphics.js +183 -17
- package/dist/tools/machineControl.js +11 -5
- package/dist/tools/memory.js +19 -10
- package/dist/tools/meta/audio.js +240 -1
- package/dist/tools/meta/config.js +20 -28
- package/dist/tools/meta/configInventory.js +104 -0
- package/dist/tools/meta/diagnostics.js +45 -2
- package/dist/tools/meta/graphics.js +14 -6
- package/dist/tools/meta/index.js +1 -0
- package/dist/tools/meta/memory.js +20 -6
- package/dist/tools/meta/program.js +473 -0
- package/dist/tools/pollValidator.js +4 -2
- package/dist/tools/programRunners.js +8 -4
- package/dist/tools/registry/config.js +17 -0
- package/dist/tools/registry/disk.js +7 -0
- package/dist/tools/registry/drive.js +3 -0
- package/dist/tools/registry/graphics.js +111 -27
- package/dist/tools/registry/index.js +6 -0
- package/dist/tools/registry/memory.js +1 -0
- package/dist/tools/registry/platform.js +121 -0
- package/dist/tools/registry/program.js +26 -8
- package/dist/tools/registry/sound.js +96 -0
- package/dist/tools/registry/system.js +15 -2
- package/dist/tools/storage.js +1 -0
- package/dist/tools/streaming.js +1 -0
- package/dist/tools/types.js +38 -4
- package/dist/tools/vice.js +160 -0
- package/dist/vicBitmap.js +317 -0
- package/dist/vice/mockServer.js +439 -0
- package/dist/vice/process.js +310 -0
- package/dist/vice/readiness.js +18 -2
- package/dist/vice/viceClient.js +382 -22
- package/doc/developer.md +62 -24
- package/doc/img/backend-switch/hello-c64u.png +0 -0
- package/doc/img/backend-switch/hello-vice-and-c64u.png +0 -0
- package/doc/img/backend-switch/hello-vice.png +0 -0
- package/doc/img/backend-switch/metadata.json +50 -0
- package/doc/plans/vice-backend-switch/plan.md +486 -0
- package/doc/plans/vice-backend-switch-2/plan.md +48 -0
- package/doc/plans/vice-support/notes.md +1 -0
- package/doc/plans/vice-support/plan.md +5 -0
- package/doc/plans/vice-support/rollout.md +23 -17
- package/doc/reviews/vice-support-review.md +185 -0
- package/doc/troubleshooting-mcp.md +35 -6
- package/doc/vice/support-matrix.md +54 -0
- package/mcp/prompts.json +292 -0
- package/mcp/protocol-examples.json +46 -0
- package/mcp/resources.json +940 -0
- package/mcp/schemas/c64_config.schema.json +350 -0
- package/mcp/schemas/c64_debug.schema.json +380 -0
- package/mcp/schemas/c64_disk.schema.json +278 -0
- package/mcp/schemas/c64_drive.schema.json +120 -0
- package/mcp/schemas/c64_extract.schema.json +302 -0
- package/mcp/schemas/c64_graphics.schema.json +333 -0
- package/mcp/schemas/c64_memory.schema.json +155 -0
- package/mcp/schemas/c64_printer.schema.json +218 -0
- package/mcp/schemas/c64_program.schema.json +391 -0
- package/mcp/schemas/c64_rag.schema.json +67 -0
- package/mcp/schemas/c64_select_backend.schema.json +32 -0
- package/mcp/schemas/c64_sound.schema.json +644 -0
- package/mcp/schemas/c64_stream.schema.json +61 -0
- package/mcp/schemas/c64_system.schema.json +227 -0
- package/mcp/schemas/c64_vice.schema.json +63 -0
- package/mcp/server.json +15 -0
- package/mcp/tools.json +4517 -0
- package/mcp.json +83 -9
- package/package.json +8 -3
- package/scripts/capture-backend-switch-screenshots.mjs +276 -0
- package/scripts/generate-mcp-interface.ts +289 -0
- package/scripts/invoke-bun.mjs +67 -21
- package/scripts/mockC64Server.mjs +162 -6
- package/scripts/run-coverage.mjs +284 -0
- package/scripts/run-tests.mjs +95 -39
- package/scripts/run-tests.ts +378 -73
- package/scripts/update-readme.ts +147 -13
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
{
|
|
2
|
+
"type": "object",
|
|
3
|
+
"description": "Available debugger operations.",
|
|
4
|
+
"oneOf": [
|
|
5
|
+
{
|
|
6
|
+
"type": "object",
|
|
7
|
+
"description": "List all active VICE checkpoints (breakpoints).",
|
|
8
|
+
"properties": {
|
|
9
|
+
"op": {
|
|
10
|
+
"const": "list_checkpoints"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"required": [
|
|
14
|
+
"op"
|
|
15
|
+
],
|
|
16
|
+
"additionalProperties": false
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"type": "object",
|
|
20
|
+
"description": "Fetch a single checkpoint by id.",
|
|
21
|
+
"properties": {
|
|
22
|
+
"op": {
|
|
23
|
+
"const": "get_checkpoint"
|
|
24
|
+
},
|
|
25
|
+
"id": {
|
|
26
|
+
"type": "integer",
|
|
27
|
+
"description": "Debugger checkpoint identifier.",
|
|
28
|
+
"minimum": 1
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"required": [
|
|
32
|
+
"op",
|
|
33
|
+
"id"
|
|
34
|
+
],
|
|
35
|
+
"additionalProperties": false
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"type": "object",
|
|
39
|
+
"description": "Create a new checkpoint (breakpoint) in VICE.",
|
|
40
|
+
"properties": {
|
|
41
|
+
"op": {
|
|
42
|
+
"const": "create_checkpoint"
|
|
43
|
+
},
|
|
44
|
+
"address": {
|
|
45
|
+
"type": "string",
|
|
46
|
+
"description": "Start address (e.g. $0801).",
|
|
47
|
+
"minLength": 1
|
|
48
|
+
},
|
|
49
|
+
"endAddress": {
|
|
50
|
+
"type": [
|
|
51
|
+
"string",
|
|
52
|
+
"null"
|
|
53
|
+
],
|
|
54
|
+
"description": "Optional end address for range.",
|
|
55
|
+
"minLength": 1
|
|
56
|
+
},
|
|
57
|
+
"stopOnHit": {
|
|
58
|
+
"type": [
|
|
59
|
+
"boolean",
|
|
60
|
+
"null"
|
|
61
|
+
],
|
|
62
|
+
"description": "Pause execution when hit (default true).",
|
|
63
|
+
"default": true
|
|
64
|
+
},
|
|
65
|
+
"enabled": {
|
|
66
|
+
"type": [
|
|
67
|
+
"boolean",
|
|
68
|
+
"null"
|
|
69
|
+
],
|
|
70
|
+
"description": "Whether the checkpoint is enabled (default true).",
|
|
71
|
+
"default": true
|
|
72
|
+
},
|
|
73
|
+
"temporary": {
|
|
74
|
+
"type": [
|
|
75
|
+
"boolean",
|
|
76
|
+
"null"
|
|
77
|
+
],
|
|
78
|
+
"description": "Automatically remove after first hit.",
|
|
79
|
+
"default": false
|
|
80
|
+
},
|
|
81
|
+
"operations": {
|
|
82
|
+
"type": [
|
|
83
|
+
"object",
|
|
84
|
+
"null"
|
|
85
|
+
],
|
|
86
|
+
"description": "Checkpoint operation filters.",
|
|
87
|
+
"properties": {
|
|
88
|
+
"execute": {
|
|
89
|
+
"type": [
|
|
90
|
+
"boolean",
|
|
91
|
+
"null"
|
|
92
|
+
],
|
|
93
|
+
"description": "Trigger on execute (default true).",
|
|
94
|
+
"default": true
|
|
95
|
+
},
|
|
96
|
+
"load": {
|
|
97
|
+
"type": [
|
|
98
|
+
"boolean",
|
|
99
|
+
"null"
|
|
100
|
+
],
|
|
101
|
+
"description": "Trigger on memory load.",
|
|
102
|
+
"default": false
|
|
103
|
+
},
|
|
104
|
+
"store": {
|
|
105
|
+
"type": [
|
|
106
|
+
"boolean",
|
|
107
|
+
"null"
|
|
108
|
+
],
|
|
109
|
+
"description": "Trigger on memory store.",
|
|
110
|
+
"default": false
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
"additionalProperties": false
|
|
114
|
+
},
|
|
115
|
+
"memspace": {
|
|
116
|
+
"type": [
|
|
117
|
+
"integer",
|
|
118
|
+
"null"
|
|
119
|
+
],
|
|
120
|
+
"description": "VICE memory space (0=CPU, 1=Drive8, etc.).",
|
|
121
|
+
"minimum": 0,
|
|
122
|
+
"maximum": 4
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
"required": [
|
|
126
|
+
"op",
|
|
127
|
+
"address"
|
|
128
|
+
],
|
|
129
|
+
"additionalProperties": false
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"type": "object",
|
|
133
|
+
"description": "Remove a checkpoint by id.",
|
|
134
|
+
"properties": {
|
|
135
|
+
"op": {
|
|
136
|
+
"const": "delete_checkpoint"
|
|
137
|
+
},
|
|
138
|
+
"id": {
|
|
139
|
+
"type": "integer",
|
|
140
|
+
"description": "Debugger checkpoint identifier.",
|
|
141
|
+
"minimum": 1
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
"required": [
|
|
145
|
+
"op",
|
|
146
|
+
"id"
|
|
147
|
+
],
|
|
148
|
+
"additionalProperties": false
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"type": "object",
|
|
152
|
+
"description": "Enable or disable a checkpoint by id.",
|
|
153
|
+
"properties": {
|
|
154
|
+
"op": {
|
|
155
|
+
"const": "toggle_checkpoint"
|
|
156
|
+
},
|
|
157
|
+
"id": {
|
|
158
|
+
"type": "integer",
|
|
159
|
+
"description": "Debugger checkpoint identifier.",
|
|
160
|
+
"minimum": 1
|
|
161
|
+
},
|
|
162
|
+
"enabled": {
|
|
163
|
+
"type": "boolean",
|
|
164
|
+
"description": "Set to true to enable, false to disable."
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
"required": [
|
|
168
|
+
"op",
|
|
169
|
+
"id",
|
|
170
|
+
"enabled"
|
|
171
|
+
],
|
|
172
|
+
"additionalProperties": false
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"type": "object",
|
|
176
|
+
"description": "Attach a conditional expression to a checkpoint.",
|
|
177
|
+
"properties": {
|
|
178
|
+
"op": {
|
|
179
|
+
"const": "set_condition"
|
|
180
|
+
},
|
|
181
|
+
"id": {
|
|
182
|
+
"type": "integer",
|
|
183
|
+
"description": "Debugger checkpoint identifier.",
|
|
184
|
+
"minimum": 1
|
|
185
|
+
},
|
|
186
|
+
"expression": {
|
|
187
|
+
"type": "string",
|
|
188
|
+
"description": "VICE monitor conditional expression.",
|
|
189
|
+
"minLength": 1
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
"required": [
|
|
193
|
+
"op",
|
|
194
|
+
"id",
|
|
195
|
+
"expression"
|
|
196
|
+
],
|
|
197
|
+
"additionalProperties": false
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"type": "object",
|
|
201
|
+
"description": "List available registers (metadata).",
|
|
202
|
+
"properties": {
|
|
203
|
+
"op": {
|
|
204
|
+
"const": "list_registers"
|
|
205
|
+
},
|
|
206
|
+
"memspace": {
|
|
207
|
+
"type": [
|
|
208
|
+
"integer",
|
|
209
|
+
"null"
|
|
210
|
+
],
|
|
211
|
+
"description": "VICE memory space (0=CPU, 1=Drive8, etc.).",
|
|
212
|
+
"minimum": 0,
|
|
213
|
+
"maximum": 4
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
"required": [
|
|
217
|
+
"op"
|
|
218
|
+
],
|
|
219
|
+
"additionalProperties": false
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"type": "object",
|
|
223
|
+
"description": "Read register values, optionally filtered by name or id.",
|
|
224
|
+
"properties": {
|
|
225
|
+
"op": {
|
|
226
|
+
"const": "get_registers"
|
|
227
|
+
},
|
|
228
|
+
"memspace": {
|
|
229
|
+
"type": [
|
|
230
|
+
"integer",
|
|
231
|
+
"null"
|
|
232
|
+
],
|
|
233
|
+
"description": "VICE memory space (0=CPU, 1=Drive8, etc.).",
|
|
234
|
+
"minimum": 0,
|
|
235
|
+
"maximum": 4
|
|
236
|
+
},
|
|
237
|
+
"registers": {
|
|
238
|
+
"type": [
|
|
239
|
+
"array",
|
|
240
|
+
"null"
|
|
241
|
+
],
|
|
242
|
+
"description": "Registers to include.",
|
|
243
|
+
"items": {
|
|
244
|
+
"type": "object",
|
|
245
|
+
"description": "Selects a register by id or name.",
|
|
246
|
+
"properties": {
|
|
247
|
+
"name": {
|
|
248
|
+
"type": [
|
|
249
|
+
"string",
|
|
250
|
+
"null"
|
|
251
|
+
],
|
|
252
|
+
"description": "Register name (case-insensitive)."
|
|
253
|
+
},
|
|
254
|
+
"id": {
|
|
255
|
+
"type": [
|
|
256
|
+
"integer",
|
|
257
|
+
"null"
|
|
258
|
+
],
|
|
259
|
+
"description": "Register id.",
|
|
260
|
+
"minimum": 0
|
|
261
|
+
}
|
|
262
|
+
},
|
|
263
|
+
"additionalProperties": false
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
},
|
|
267
|
+
"required": [
|
|
268
|
+
"op"
|
|
269
|
+
],
|
|
270
|
+
"additionalProperties": false
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
"type": "object",
|
|
274
|
+
"description": "Write register values.",
|
|
275
|
+
"properties": {
|
|
276
|
+
"op": {
|
|
277
|
+
"const": "set_registers"
|
|
278
|
+
},
|
|
279
|
+
"memspace": {
|
|
280
|
+
"type": [
|
|
281
|
+
"integer",
|
|
282
|
+
"null"
|
|
283
|
+
],
|
|
284
|
+
"description": "VICE memory space (0=CPU, 1=Drive8, etc.).",
|
|
285
|
+
"minimum": 0,
|
|
286
|
+
"maximum": 4
|
|
287
|
+
},
|
|
288
|
+
"writes": {
|
|
289
|
+
"type": "array",
|
|
290
|
+
"description": "Register writes to apply.",
|
|
291
|
+
"items": {
|
|
292
|
+
"type": "object",
|
|
293
|
+
"description": "Register write descriptor.",
|
|
294
|
+
"properties": {
|
|
295
|
+
"name": {
|
|
296
|
+
"type": [
|
|
297
|
+
"string",
|
|
298
|
+
"null"
|
|
299
|
+
],
|
|
300
|
+
"description": "Register name (case-insensitive)."
|
|
301
|
+
},
|
|
302
|
+
"id": {
|
|
303
|
+
"type": [
|
|
304
|
+
"integer",
|
|
305
|
+
"null"
|
|
306
|
+
],
|
|
307
|
+
"description": "Register id.",
|
|
308
|
+
"minimum": 0
|
|
309
|
+
},
|
|
310
|
+
"value": {
|
|
311
|
+
"type": "integer",
|
|
312
|
+
"description": "Value to write.",
|
|
313
|
+
"minimum": 0
|
|
314
|
+
}
|
|
315
|
+
},
|
|
316
|
+
"required": [
|
|
317
|
+
"value"
|
|
318
|
+
],
|
|
319
|
+
"additionalProperties": false
|
|
320
|
+
},
|
|
321
|
+
"minItems": 1
|
|
322
|
+
}
|
|
323
|
+
},
|
|
324
|
+
"required": [
|
|
325
|
+
"op",
|
|
326
|
+
"writes"
|
|
327
|
+
],
|
|
328
|
+
"additionalProperties": false
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
"type": "object",
|
|
332
|
+
"description": "Single-step CPU execution.",
|
|
333
|
+
"properties": {
|
|
334
|
+
"op": {
|
|
335
|
+
"const": "step"
|
|
336
|
+
},
|
|
337
|
+
"count": {
|
|
338
|
+
"type": [
|
|
339
|
+
"integer",
|
|
340
|
+
"null"
|
|
341
|
+
],
|
|
342
|
+
"description": "Number of instructions to step.",
|
|
343
|
+
"minimum": 1,
|
|
344
|
+
"default": 1
|
|
345
|
+
},
|
|
346
|
+
"mode": {
|
|
347
|
+
"type": [
|
|
348
|
+
"string",
|
|
349
|
+
"null"
|
|
350
|
+
],
|
|
351
|
+
"description": "Step mode (into or over).",
|
|
352
|
+
"enum": [
|
|
353
|
+
"into",
|
|
354
|
+
"over"
|
|
355
|
+
]
|
|
356
|
+
}
|
|
357
|
+
},
|
|
358
|
+
"required": [
|
|
359
|
+
"op"
|
|
360
|
+
],
|
|
361
|
+
"additionalProperties": false
|
|
362
|
+
},
|
|
363
|
+
{
|
|
364
|
+
"type": "object",
|
|
365
|
+
"description": "Continue execution until the current routine returns.",
|
|
366
|
+
"properties": {
|
|
367
|
+
"op": {
|
|
368
|
+
"const": "step_return"
|
|
369
|
+
}
|
|
370
|
+
},
|
|
371
|
+
"required": [
|
|
372
|
+
"op"
|
|
373
|
+
],
|
|
374
|
+
"additionalProperties": false
|
|
375
|
+
}
|
|
376
|
+
],
|
|
377
|
+
"discriminator": {
|
|
378
|
+
"propertyName": "op"
|
|
379
|
+
}
|
|
380
|
+
}
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
{
|
|
2
|
+
"type": "object",
|
|
3
|
+
"description": "Disk operations available via the c64_disk tool.",
|
|
4
|
+
"oneOf": [
|
|
5
|
+
{
|
|
6
|
+
"type": "object",
|
|
7
|
+
"description": "List Ultimate drive slots and their mounted images.",
|
|
8
|
+
"properties": {
|
|
9
|
+
"op": {
|
|
10
|
+
"const": "list_drives"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"additionalProperties": false,
|
|
14
|
+
"required": [
|
|
15
|
+
"op"
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"type": "object",
|
|
20
|
+
"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
|
+
"required": [
|
|
104
|
+
"drive",
|
|
105
|
+
"image",
|
|
106
|
+
"op"
|
|
107
|
+
],
|
|
108
|
+
"additionalProperties": false
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"type": "object",
|
|
112
|
+
"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
|
+
"required": [
|
|
124
|
+
"drive",
|
|
125
|
+
"op"
|
|
126
|
+
],
|
|
127
|
+
"additionalProperties": false
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"type": "object",
|
|
131
|
+
"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
|
+
"required": [
|
|
143
|
+
"path",
|
|
144
|
+
"op"
|
|
145
|
+
],
|
|
146
|
+
"additionalProperties": false
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"type": "object",
|
|
150
|
+
"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
|
+
"required": [
|
|
190
|
+
"format",
|
|
191
|
+
"path",
|
|
192
|
+
"op"
|
|
193
|
+
],
|
|
194
|
+
"additionalProperties": false
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"type": "object",
|
|
198
|
+
"description": "Search for a PRG/CRT by name substring and run the first match.",
|
|
199
|
+
"properties": {
|
|
200
|
+
"root": {
|
|
201
|
+
"type": [
|
|
202
|
+
"string",
|
|
203
|
+
"null"
|
|
204
|
+
],
|
|
205
|
+
"description": "Root path to search",
|
|
206
|
+
"minLength": 1,
|
|
207
|
+
"default": "/"
|
|
208
|
+
},
|
|
209
|
+
"nameContains": {
|
|
210
|
+
"type": "string",
|
|
211
|
+
"description": "Substring to match",
|
|
212
|
+
"minLength": 1
|
|
213
|
+
},
|
|
214
|
+
"extensions": {
|
|
215
|
+
"type": [
|
|
216
|
+
"array",
|
|
217
|
+
"null"
|
|
218
|
+
],
|
|
219
|
+
"items": {
|
|
220
|
+
"type": "string",
|
|
221
|
+
"description": "File extensions to include (without dot)",
|
|
222
|
+
"minLength": 1
|
|
223
|
+
}
|
|
224
|
+
},
|
|
225
|
+
"caseInsensitive": {
|
|
226
|
+
"type": [
|
|
227
|
+
"boolean",
|
|
228
|
+
"null"
|
|
229
|
+
],
|
|
230
|
+
"description": "Case-insensitive name match",
|
|
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
|
|
273
|
+
}
|
|
274
|
+
],
|
|
275
|
+
"discriminator": {
|
|
276
|
+
"propertyName": "op"
|
|
277
|
+
}
|
|
278
|
+
}
|