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,350 +1,592 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "object",
|
|
3
|
-
"
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
"
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
"
|
|
10
|
-
|
|
11
|
-
|
|
3
|
+
"properties": {
|
|
4
|
+
"op": {
|
|
5
|
+
"type": "string",
|
|
6
|
+
"enum": [
|
|
7
|
+
"list",
|
|
8
|
+
"get",
|
|
9
|
+
"set",
|
|
10
|
+
"batch_update",
|
|
11
|
+
"load_flash",
|
|
12
|
+
"save_flash",
|
|
13
|
+
"reset_defaults",
|
|
14
|
+
"read_debugreg",
|
|
15
|
+
"write_debugreg",
|
|
16
|
+
"info",
|
|
17
|
+
"version",
|
|
18
|
+
"snapshot",
|
|
19
|
+
"restore",
|
|
20
|
+
"diff",
|
|
21
|
+
"shuffle"
|
|
22
|
+
],
|
|
23
|
+
"description": "Selects the operation."
|
|
24
|
+
},
|
|
25
|
+
"category": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"description": "Configuration category reported by the Ultimate firmware (e.g. 'Audio').",
|
|
28
|
+
"minLength": 1
|
|
29
|
+
},
|
|
30
|
+
"item": {
|
|
31
|
+
"type": [
|
|
32
|
+
"string",
|
|
33
|
+
"null"
|
|
34
|
+
],
|
|
35
|
+
"description": "Specific configuration item inside the selected category (e.g. 'Volume').",
|
|
36
|
+
"minLength": 1
|
|
37
|
+
},
|
|
38
|
+
"value": {
|
|
39
|
+
"description": "Primitive configuration value (string, number, or boolean).",
|
|
40
|
+
"type": [
|
|
41
|
+
"string",
|
|
42
|
+
"number",
|
|
43
|
+
"boolean"
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
"path": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"description": "Absolute or workspace-relative path where the snapshot file will be written.",
|
|
49
|
+
"minLength": 1
|
|
50
|
+
},
|
|
51
|
+
"applyToFlash": {
|
|
52
|
+
"type": [
|
|
53
|
+
"boolean",
|
|
54
|
+
"null"
|
|
55
|
+
],
|
|
56
|
+
"description": "When true, save the restored configuration to flash immediately.",
|
|
57
|
+
"default": false
|
|
58
|
+
},
|
|
59
|
+
"root": {
|
|
60
|
+
"type": [
|
|
61
|
+
"string",
|
|
62
|
+
"null"
|
|
63
|
+
],
|
|
64
|
+
"description": "Root path to search for programs",
|
|
65
|
+
"minLength": 1,
|
|
66
|
+
"default": "/"
|
|
67
|
+
},
|
|
68
|
+
"extensions": {
|
|
69
|
+
"type": [
|
|
70
|
+
"array",
|
|
71
|
+
"null"
|
|
72
|
+
],
|
|
73
|
+
"items": {
|
|
74
|
+
"type": "string",
|
|
75
|
+
"description": "File extensions to include (without dot)",
|
|
76
|
+
"minLength": 1
|
|
12
77
|
},
|
|
13
|
-
"
|
|
14
|
-
|
|
15
|
-
"
|
|
78
|
+
"default": [
|
|
79
|
+
"prg",
|
|
80
|
+
"crt"
|
|
16
81
|
]
|
|
17
82
|
},
|
|
83
|
+
"durationMs": {
|
|
84
|
+
"type": [
|
|
85
|
+
"integer",
|
|
86
|
+
"null"
|
|
87
|
+
],
|
|
88
|
+
"description": "Duration to run each program in milliseconds",
|
|
89
|
+
"minimum": 1,
|
|
90
|
+
"default": 5000
|
|
91
|
+
},
|
|
92
|
+
"captureScreen": {
|
|
93
|
+
"type": [
|
|
94
|
+
"boolean",
|
|
95
|
+
"null"
|
|
96
|
+
],
|
|
97
|
+
"description": "Capture screen after each run",
|
|
98
|
+
"default": true
|
|
99
|
+
},
|
|
100
|
+
"maxPrograms": {
|
|
101
|
+
"type": [
|
|
102
|
+
"integer",
|
|
103
|
+
"null"
|
|
104
|
+
],
|
|
105
|
+
"description": "Maximum number of programs to run",
|
|
106
|
+
"minimum": 1,
|
|
107
|
+
"default": 10
|
|
108
|
+
},
|
|
109
|
+
"outputPath": {
|
|
110
|
+
"type": [
|
|
111
|
+
"string",
|
|
112
|
+
"null"
|
|
113
|
+
],
|
|
114
|
+
"description": "Output directory for run logs and captures",
|
|
115
|
+
"minLength": 1
|
|
116
|
+
},
|
|
117
|
+
"resetDelayMs": {
|
|
118
|
+
"type": [
|
|
119
|
+
"integer",
|
|
120
|
+
"null"
|
|
121
|
+
],
|
|
122
|
+
"description": "Delay after reset operations to allow the platform to settle.",
|
|
123
|
+
"minimum": 0,
|
|
124
|
+
"maximum": 1000,
|
|
125
|
+
"default": 100
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
"required": [
|
|
129
|
+
"op"
|
|
130
|
+
],
|
|
131
|
+
"description": "Configuration operations available via the c64_config tool.\n\nOperations:\n- list: List configuration categories reported by the firmware. Required inputs: none.\n- get: Read a configuration category or specific item. Required inputs: category. Optional inputs: item.\n- set: Write a configuration value in the selected category. Required inputs: category, item, value.\n- batch_update: Apply multiple configuration updates in a single request. Required inputs: none.\n- load_flash: Load configuration from flash storage. Required inputs: none.\n- save_flash: Persist the current configuration to flash storage. Required inputs: none.\n- reset_defaults: Reset firmware configuration to factory defaults. Required inputs: none.\n- read_debugreg: Read the Ultimate debug register ($D7FF). Required inputs: none.\n- write_debugreg: Write a hex value to the Ultimate debug register ($D7FF). Required inputs: value.\n- info: Retrieve Ultimate hardware information and status. Required inputs: none.\n- version: Fetch firmware version details. Required inputs: none.\n- snapshot: Snapshot configuration to disk for later restore or diff. Required inputs: path.\n- restore: Restore configuration from a snapshot file. Required inputs: path. Optional inputs: applyToFlash.\n- diff: Compare the current configuration with a snapshot. Required inputs: path.\n- shuffle: Discover PRG/CRT files and run each with optional screen capture. Required inputs: none. Optional inputs: root, extensions, durationMs, captureScreen, maxPrograms, outputPath, resetDelayMs.",
|
|
132
|
+
"additionalProperties": false,
|
|
133
|
+
"x-c64bridge-operations": [
|
|
18
134
|
{
|
|
19
|
-
"
|
|
20
|
-
"description": "
|
|
21
|
-
"
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
"null"
|
|
31
|
-
],
|
|
32
|
-
"description": "Specific configuration item inside the selected category (e.g. 'Volume').",
|
|
33
|
-
"minLength": 1
|
|
135
|
+
"op": "list",
|
|
136
|
+
"description": "List configuration categories reported by the firmware.",
|
|
137
|
+
"required": [],
|
|
138
|
+
"optional": [],
|
|
139
|
+
"inputSchema": {
|
|
140
|
+
"type": "object",
|
|
141
|
+
"description": "List configuration categories reported by the firmware.",
|
|
142
|
+
"properties": {
|
|
143
|
+
"op": {
|
|
144
|
+
"const": "list"
|
|
145
|
+
}
|
|
34
146
|
},
|
|
35
|
-
"
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
147
|
+
"additionalProperties": false,
|
|
148
|
+
"required": [
|
|
149
|
+
"op"
|
|
150
|
+
]
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"op": "get",
|
|
155
|
+
"description": "Read a configuration category or specific item.",
|
|
39
156
|
"required": [
|
|
40
|
-
"category"
|
|
41
|
-
"op"
|
|
157
|
+
"category"
|
|
42
158
|
],
|
|
43
|
-
"
|
|
159
|
+
"optional": [
|
|
160
|
+
"item"
|
|
161
|
+
],
|
|
162
|
+
"inputSchema": {
|
|
163
|
+
"type": "object",
|
|
164
|
+
"description": "Read a configuration category or specific item.",
|
|
165
|
+
"properties": {
|
|
166
|
+
"category": {
|
|
167
|
+
"type": "string",
|
|
168
|
+
"description": "Configuration category reported by the Ultimate firmware (e.g. 'Audio').",
|
|
169
|
+
"minLength": 1
|
|
170
|
+
},
|
|
171
|
+
"item": {
|
|
172
|
+
"type": [
|
|
173
|
+
"string",
|
|
174
|
+
"null"
|
|
175
|
+
],
|
|
176
|
+
"description": "Specific configuration item inside the selected category (e.g. 'Volume').",
|
|
177
|
+
"minLength": 1
|
|
178
|
+
},
|
|
179
|
+
"op": {
|
|
180
|
+
"const": "get"
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
"required": [
|
|
184
|
+
"category",
|
|
185
|
+
"op"
|
|
186
|
+
],
|
|
187
|
+
"additionalProperties": false
|
|
188
|
+
}
|
|
44
189
|
},
|
|
45
190
|
{
|
|
46
|
-
"
|
|
191
|
+
"op": "set",
|
|
47
192
|
"description": "Write a configuration value in the selected category.",
|
|
48
|
-
"properties": {
|
|
49
|
-
"category": {
|
|
50
|
-
"type": "string",
|
|
51
|
-
"description": "Configuration category reported by the Ultimate firmware (e.g. 'Audio').",
|
|
52
|
-
"minLength": 1
|
|
53
|
-
},
|
|
54
|
-
"item": {
|
|
55
|
-
"type": "string",
|
|
56
|
-
"description": "Configuration item name inside the category.",
|
|
57
|
-
"minLength": 1
|
|
58
|
-
},
|
|
59
|
-
"value": {
|
|
60
|
-
"description": "Primitive configuration value (string, number, or boolean).",
|
|
61
|
-
"type": [
|
|
62
|
-
"string",
|
|
63
|
-
"number",
|
|
64
|
-
"boolean"
|
|
65
|
-
]
|
|
66
|
-
},
|
|
67
|
-
"op": {
|
|
68
|
-
"const": "set"
|
|
69
|
-
}
|
|
70
|
-
},
|
|
71
193
|
"required": [
|
|
72
194
|
"category",
|
|
73
195
|
"item",
|
|
74
|
-
"value"
|
|
75
|
-
"op"
|
|
196
|
+
"value"
|
|
76
197
|
],
|
|
77
|
-
"
|
|
198
|
+
"optional": [],
|
|
199
|
+
"inputSchema": {
|
|
200
|
+
"type": "object",
|
|
201
|
+
"description": "Write a configuration value in the selected category.",
|
|
202
|
+
"properties": {
|
|
203
|
+
"category": {
|
|
204
|
+
"type": "string",
|
|
205
|
+
"description": "Configuration category reported by the Ultimate firmware (e.g. 'Audio').",
|
|
206
|
+
"minLength": 1
|
|
207
|
+
},
|
|
208
|
+
"item": {
|
|
209
|
+
"type": "string",
|
|
210
|
+
"description": "Configuration item name inside the category.",
|
|
211
|
+
"minLength": 1
|
|
212
|
+
},
|
|
213
|
+
"value": {
|
|
214
|
+
"description": "Primitive configuration value (string, number, or boolean).",
|
|
215
|
+
"type": [
|
|
216
|
+
"string",
|
|
217
|
+
"number",
|
|
218
|
+
"boolean"
|
|
219
|
+
]
|
|
220
|
+
},
|
|
221
|
+
"op": {
|
|
222
|
+
"const": "set"
|
|
223
|
+
}
|
|
224
|
+
},
|
|
225
|
+
"required": [
|
|
226
|
+
"category",
|
|
227
|
+
"item",
|
|
228
|
+
"value",
|
|
229
|
+
"op"
|
|
230
|
+
],
|
|
231
|
+
"additionalProperties": false
|
|
232
|
+
}
|
|
78
233
|
},
|
|
79
234
|
{
|
|
235
|
+
"op": "batch_update",
|
|
80
236
|
"description": "Apply multiple configuration updates in a single request.",
|
|
81
|
-
"
|
|
82
|
-
"
|
|
237
|
+
"required": [],
|
|
238
|
+
"optional": [],
|
|
239
|
+
"inputSchema": {
|
|
240
|
+
"description": "Apply multiple configuration updates in a single request.",
|
|
83
241
|
"type": "object",
|
|
84
242
|
"additionalProperties": {
|
|
85
|
-
"type":
|
|
86
|
-
|
|
87
|
-
"
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
243
|
+
"type": "object",
|
|
244
|
+
"additionalProperties": {
|
|
245
|
+
"type": [
|
|
246
|
+
"string",
|
|
247
|
+
"number",
|
|
248
|
+
"boolean"
|
|
249
|
+
]
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
"properties": {
|
|
253
|
+
"op": {
|
|
254
|
+
"const": "batch_update"
|
|
255
|
+
}
|
|
256
|
+
},
|
|
257
|
+
"required": [
|
|
258
|
+
"op"
|
|
259
|
+
]
|
|
260
|
+
}
|
|
100
261
|
},
|
|
101
262
|
{
|
|
102
|
-
"
|
|
263
|
+
"op": "load_flash",
|
|
103
264
|
"description": "Load configuration from flash storage.",
|
|
104
|
-
"
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
265
|
+
"required": [],
|
|
266
|
+
"optional": [],
|
|
267
|
+
"inputSchema": {
|
|
268
|
+
"type": "object",
|
|
269
|
+
"description": "Load configuration from flash storage.",
|
|
270
|
+
"properties": {
|
|
271
|
+
"op": {
|
|
272
|
+
"const": "load_flash"
|
|
273
|
+
}
|
|
274
|
+
},
|
|
275
|
+
"additionalProperties": false,
|
|
276
|
+
"required": [
|
|
277
|
+
"op"
|
|
278
|
+
]
|
|
279
|
+
}
|
|
113
280
|
},
|
|
114
281
|
{
|
|
115
|
-
"
|
|
282
|
+
"op": "save_flash",
|
|
116
283
|
"description": "Persist the current configuration to flash storage.",
|
|
117
|
-
"
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
284
|
+
"required": [],
|
|
285
|
+
"optional": [],
|
|
286
|
+
"inputSchema": {
|
|
287
|
+
"type": "object",
|
|
288
|
+
"description": "Persist the current configuration to flash storage.",
|
|
289
|
+
"properties": {
|
|
290
|
+
"op": {
|
|
291
|
+
"const": "save_flash"
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
"additionalProperties": false,
|
|
295
|
+
"required": [
|
|
296
|
+
"op"
|
|
297
|
+
]
|
|
298
|
+
}
|
|
126
299
|
},
|
|
127
300
|
{
|
|
128
|
-
"
|
|
301
|
+
"op": "reset_defaults",
|
|
129
302
|
"description": "Reset firmware configuration to factory defaults.",
|
|
130
|
-
"
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
303
|
+
"required": [],
|
|
304
|
+
"optional": [],
|
|
305
|
+
"inputSchema": {
|
|
306
|
+
"type": "object",
|
|
307
|
+
"description": "Reset firmware configuration to factory defaults.",
|
|
308
|
+
"properties": {
|
|
309
|
+
"op": {
|
|
310
|
+
"const": "reset_defaults"
|
|
311
|
+
}
|
|
312
|
+
},
|
|
313
|
+
"additionalProperties": false,
|
|
314
|
+
"required": [
|
|
315
|
+
"op"
|
|
316
|
+
]
|
|
317
|
+
}
|
|
139
318
|
},
|
|
140
319
|
{
|
|
141
|
-
"
|
|
320
|
+
"op": "read_debugreg",
|
|
142
321
|
"description": "Read the Ultimate debug register ($D7FF).",
|
|
143
|
-
"
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
322
|
+
"required": [],
|
|
323
|
+
"optional": [],
|
|
324
|
+
"inputSchema": {
|
|
325
|
+
"type": "object",
|
|
326
|
+
"description": "Read the Ultimate debug register ($D7FF).",
|
|
327
|
+
"properties": {
|
|
328
|
+
"op": {
|
|
329
|
+
"const": "read_debugreg"
|
|
330
|
+
}
|
|
331
|
+
},
|
|
332
|
+
"additionalProperties": false,
|
|
333
|
+
"required": [
|
|
334
|
+
"op"
|
|
335
|
+
]
|
|
336
|
+
}
|
|
152
337
|
},
|
|
153
338
|
{
|
|
154
|
-
"
|
|
339
|
+
"op": "write_debugreg",
|
|
155
340
|
"description": "Write a hex value to the Ultimate debug register ($D7FF).",
|
|
156
|
-
"properties": {
|
|
157
|
-
"value": {
|
|
158
|
-
"type": "string",
|
|
159
|
-
"description": "Hex value (00-FF) to write to the debug register.",
|
|
160
|
-
"minLength": 1,
|
|
161
|
-
"maxLength": 2,
|
|
162
|
-
"pattern": "^[0-9A-Fa-f]{1,2}$"
|
|
163
|
-
},
|
|
164
|
-
"op": {
|
|
165
|
-
"const": "write_debugreg"
|
|
166
|
-
}
|
|
167
|
-
},
|
|
168
341
|
"required": [
|
|
169
|
-
"value"
|
|
170
|
-
"op"
|
|
342
|
+
"value"
|
|
171
343
|
],
|
|
172
|
-
"
|
|
344
|
+
"optional": [],
|
|
345
|
+
"inputSchema": {
|
|
346
|
+
"type": "object",
|
|
347
|
+
"description": "Write a hex value to the Ultimate debug register ($D7FF).",
|
|
348
|
+
"properties": {
|
|
349
|
+
"value": {
|
|
350
|
+
"type": "string",
|
|
351
|
+
"description": "Hex value (00-FF) to write to the debug register.",
|
|
352
|
+
"minLength": 1,
|
|
353
|
+
"maxLength": 2,
|
|
354
|
+
"pattern": "^[0-9A-Fa-f]{1,2}$"
|
|
355
|
+
},
|
|
356
|
+
"op": {
|
|
357
|
+
"const": "write_debugreg"
|
|
358
|
+
}
|
|
359
|
+
},
|
|
360
|
+
"required": [
|
|
361
|
+
"value",
|
|
362
|
+
"op"
|
|
363
|
+
],
|
|
364
|
+
"additionalProperties": false
|
|
365
|
+
}
|
|
173
366
|
},
|
|
174
367
|
{
|
|
175
|
-
"
|
|
368
|
+
"op": "info",
|
|
176
369
|
"description": "Retrieve Ultimate hardware information and status.",
|
|
177
|
-
"
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
370
|
+
"required": [],
|
|
371
|
+
"optional": [],
|
|
372
|
+
"inputSchema": {
|
|
373
|
+
"type": "object",
|
|
374
|
+
"description": "Retrieve Ultimate hardware information and status.",
|
|
375
|
+
"properties": {
|
|
376
|
+
"op": {
|
|
377
|
+
"const": "info"
|
|
378
|
+
}
|
|
379
|
+
},
|
|
380
|
+
"additionalProperties": false,
|
|
381
|
+
"required": [
|
|
382
|
+
"op"
|
|
383
|
+
]
|
|
384
|
+
}
|
|
186
385
|
},
|
|
187
386
|
{
|
|
188
|
-
"
|
|
387
|
+
"op": "version",
|
|
189
388
|
"description": "Fetch firmware version details.",
|
|
190
|
-
"
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
389
|
+
"required": [],
|
|
390
|
+
"optional": [],
|
|
391
|
+
"inputSchema": {
|
|
392
|
+
"type": "object",
|
|
393
|
+
"description": "Fetch firmware version details.",
|
|
394
|
+
"properties": {
|
|
395
|
+
"op": {
|
|
396
|
+
"const": "version"
|
|
397
|
+
}
|
|
398
|
+
},
|
|
399
|
+
"additionalProperties": false,
|
|
400
|
+
"required": [
|
|
401
|
+
"op"
|
|
402
|
+
]
|
|
403
|
+
}
|
|
199
404
|
},
|
|
200
405
|
{
|
|
201
|
-
"
|
|
406
|
+
"op": "snapshot",
|
|
202
407
|
"description": "Snapshot configuration to disk for later restore or diff.",
|
|
203
|
-
"properties": {
|
|
204
|
-
"path": {
|
|
205
|
-
"type": "string",
|
|
206
|
-
"description": "Absolute or workspace-relative path where the snapshot file will be written.",
|
|
207
|
-
"minLength": 1
|
|
208
|
-
},
|
|
209
|
-
"op": {
|
|
210
|
-
"const": "snapshot"
|
|
211
|
-
}
|
|
212
|
-
},
|
|
213
408
|
"required": [
|
|
214
|
-
"path"
|
|
215
|
-
"op"
|
|
409
|
+
"path"
|
|
216
410
|
],
|
|
217
|
-
"
|
|
411
|
+
"optional": [],
|
|
412
|
+
"inputSchema": {
|
|
413
|
+
"type": "object",
|
|
414
|
+
"description": "Snapshot configuration to disk for later restore or diff.",
|
|
415
|
+
"properties": {
|
|
416
|
+
"path": {
|
|
417
|
+
"type": "string",
|
|
418
|
+
"description": "Absolute or workspace-relative path where the snapshot file will be written.",
|
|
419
|
+
"minLength": 1
|
|
420
|
+
},
|
|
421
|
+
"op": {
|
|
422
|
+
"const": "snapshot"
|
|
423
|
+
}
|
|
424
|
+
},
|
|
425
|
+
"required": [
|
|
426
|
+
"path",
|
|
427
|
+
"op"
|
|
428
|
+
],
|
|
429
|
+
"additionalProperties": false
|
|
430
|
+
}
|
|
218
431
|
},
|
|
219
432
|
{
|
|
220
|
-
"
|
|
433
|
+
"op": "restore",
|
|
221
434
|
"description": "Restore configuration from a snapshot file.",
|
|
222
|
-
"properties": {
|
|
223
|
-
"path": {
|
|
224
|
-
"type": "string",
|
|
225
|
-
"description": "Snapshot file to read (must contain categories payload).",
|
|
226
|
-
"minLength": 1
|
|
227
|
-
},
|
|
228
|
-
"applyToFlash": {
|
|
229
|
-
"type": [
|
|
230
|
-
"boolean",
|
|
231
|
-
"null"
|
|
232
|
-
],
|
|
233
|
-
"description": "When true, save the restored configuration to flash immediately.",
|
|
234
|
-
"default": false
|
|
235
|
-
},
|
|
236
|
-
"op": {
|
|
237
|
-
"const": "restore"
|
|
238
|
-
}
|
|
239
|
-
},
|
|
240
435
|
"required": [
|
|
241
|
-
"path"
|
|
242
|
-
|
|
436
|
+
"path"
|
|
437
|
+
],
|
|
438
|
+
"optional": [
|
|
439
|
+
"applyToFlash"
|
|
243
440
|
],
|
|
244
|
-
"
|
|
441
|
+
"inputSchema": {
|
|
442
|
+
"type": "object",
|
|
443
|
+
"description": "Restore configuration from a snapshot file.",
|
|
444
|
+
"properties": {
|
|
445
|
+
"path": {
|
|
446
|
+
"type": "string",
|
|
447
|
+
"description": "Snapshot file to read (must contain categories payload).",
|
|
448
|
+
"minLength": 1
|
|
449
|
+
},
|
|
450
|
+
"applyToFlash": {
|
|
451
|
+
"type": [
|
|
452
|
+
"boolean",
|
|
453
|
+
"null"
|
|
454
|
+
],
|
|
455
|
+
"description": "When true, save the restored configuration to flash immediately.",
|
|
456
|
+
"default": false
|
|
457
|
+
},
|
|
458
|
+
"op": {
|
|
459
|
+
"const": "restore"
|
|
460
|
+
}
|
|
461
|
+
},
|
|
462
|
+
"required": [
|
|
463
|
+
"path",
|
|
464
|
+
"op"
|
|
465
|
+
],
|
|
466
|
+
"additionalProperties": false
|
|
467
|
+
}
|
|
245
468
|
},
|
|
246
469
|
{
|
|
247
|
-
"
|
|
470
|
+
"op": "diff",
|
|
248
471
|
"description": "Compare the current configuration with a snapshot.",
|
|
249
|
-
"properties": {
|
|
250
|
-
"path": {
|
|
251
|
-
"type": "string",
|
|
252
|
-
"description": "Snapshot file to compare with.",
|
|
253
|
-
"minLength": 1
|
|
254
|
-
},
|
|
255
|
-
"op": {
|
|
256
|
-
"const": "diff"
|
|
257
|
-
}
|
|
258
|
-
},
|
|
259
472
|
"required": [
|
|
260
|
-
"path"
|
|
261
|
-
"op"
|
|
473
|
+
"path"
|
|
262
474
|
],
|
|
263
|
-
"
|
|
475
|
+
"optional": [],
|
|
476
|
+
"inputSchema": {
|
|
477
|
+
"type": "object",
|
|
478
|
+
"description": "Compare the current configuration with a snapshot.",
|
|
479
|
+
"properties": {
|
|
480
|
+
"path": {
|
|
481
|
+
"type": "string",
|
|
482
|
+
"description": "Snapshot file to compare with.",
|
|
483
|
+
"minLength": 1
|
|
484
|
+
},
|
|
485
|
+
"op": {
|
|
486
|
+
"const": "diff"
|
|
487
|
+
}
|
|
488
|
+
},
|
|
489
|
+
"required": [
|
|
490
|
+
"path",
|
|
491
|
+
"op"
|
|
492
|
+
],
|
|
493
|
+
"additionalProperties": false
|
|
494
|
+
}
|
|
264
495
|
},
|
|
265
496
|
{
|
|
266
|
-
"
|
|
497
|
+
"op": "shuffle",
|
|
267
498
|
"description": "Discover PRG/CRT files and run each with optional screen capture.",
|
|
268
|
-
"
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
499
|
+
"required": [],
|
|
500
|
+
"optional": [
|
|
501
|
+
"root",
|
|
502
|
+
"extensions",
|
|
503
|
+
"durationMs",
|
|
504
|
+
"captureScreen",
|
|
505
|
+
"maxPrograms",
|
|
506
|
+
"outputPath",
|
|
507
|
+
"resetDelayMs"
|
|
508
|
+
],
|
|
509
|
+
"inputSchema": {
|
|
510
|
+
"type": "object",
|
|
511
|
+
"description": "Discover PRG/CRT files and run each with optional screen capture.",
|
|
512
|
+
"properties": {
|
|
513
|
+
"root": {
|
|
514
|
+
"type": [
|
|
515
|
+
"string",
|
|
516
|
+
"null"
|
|
517
|
+
],
|
|
518
|
+
"description": "Root path to search for programs",
|
|
519
|
+
"minLength": 1,
|
|
520
|
+
"default": "/"
|
|
521
|
+
},
|
|
522
|
+
"extensions": {
|
|
523
|
+
"type": [
|
|
524
|
+
"array",
|
|
525
|
+
"null"
|
|
526
|
+
],
|
|
527
|
+
"items": {
|
|
528
|
+
"type": "string",
|
|
529
|
+
"description": "File extensions to include (without dot)",
|
|
530
|
+
"minLength": 1
|
|
531
|
+
},
|
|
532
|
+
"default": [
|
|
533
|
+
"prg",
|
|
534
|
+
"crt"
|
|
535
|
+
]
|
|
536
|
+
},
|
|
537
|
+
"durationMs": {
|
|
538
|
+
"type": [
|
|
539
|
+
"integer",
|
|
540
|
+
"null"
|
|
541
|
+
],
|
|
542
|
+
"description": "Duration to run each program in milliseconds",
|
|
543
|
+
"minimum": 1,
|
|
544
|
+
"default": 5000
|
|
545
|
+
},
|
|
546
|
+
"captureScreen": {
|
|
547
|
+
"type": [
|
|
548
|
+
"boolean",
|
|
549
|
+
"null"
|
|
550
|
+
],
|
|
551
|
+
"description": "Capture screen after each run",
|
|
552
|
+
"default": true
|
|
553
|
+
},
|
|
554
|
+
"maxPrograms": {
|
|
555
|
+
"type": [
|
|
556
|
+
"integer",
|
|
557
|
+
"null"
|
|
558
|
+
],
|
|
559
|
+
"description": "Maximum number of programs to run",
|
|
560
|
+
"minimum": 1,
|
|
561
|
+
"default": 10
|
|
562
|
+
},
|
|
563
|
+
"outputPath": {
|
|
564
|
+
"type": [
|
|
565
|
+
"string",
|
|
566
|
+
"null"
|
|
567
|
+
],
|
|
568
|
+
"description": "Output directory for run logs and captures",
|
|
286
569
|
"minLength": 1
|
|
287
570
|
},
|
|
288
|
-
"
|
|
289
|
-
"
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
"
|
|
296
|
-
"
|
|
297
|
-
|
|
298
|
-
"
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
},
|
|
302
|
-
"captureScreen": {
|
|
303
|
-
"type": [
|
|
304
|
-
"boolean",
|
|
305
|
-
"null"
|
|
306
|
-
],
|
|
307
|
-
"description": "Capture screen after each run",
|
|
308
|
-
"default": true
|
|
309
|
-
},
|
|
310
|
-
"maxPrograms": {
|
|
311
|
-
"type": [
|
|
312
|
-
"integer",
|
|
313
|
-
"null"
|
|
314
|
-
],
|
|
315
|
-
"description": "Maximum number of programs to run",
|
|
316
|
-
"minimum": 1,
|
|
317
|
-
"default": 10
|
|
318
|
-
},
|
|
319
|
-
"outputPath": {
|
|
320
|
-
"type": [
|
|
321
|
-
"string",
|
|
322
|
-
"null"
|
|
323
|
-
],
|
|
324
|
-
"description": "Output directory for run logs and captures",
|
|
325
|
-
"minLength": 1
|
|
326
|
-
},
|
|
327
|
-
"resetDelayMs": {
|
|
328
|
-
"type": [
|
|
329
|
-
"integer",
|
|
330
|
-
"null"
|
|
331
|
-
],
|
|
332
|
-
"description": "Delay after reset operations to allow the platform to settle.",
|
|
333
|
-
"minimum": 0,
|
|
334
|
-
"maximum": 1000,
|
|
335
|
-
"default": 100
|
|
571
|
+
"resetDelayMs": {
|
|
572
|
+
"type": [
|
|
573
|
+
"integer",
|
|
574
|
+
"null"
|
|
575
|
+
],
|
|
576
|
+
"description": "Delay after reset operations to allow the platform to settle.",
|
|
577
|
+
"minimum": 0,
|
|
578
|
+
"maximum": 1000,
|
|
579
|
+
"default": 100
|
|
580
|
+
},
|
|
581
|
+
"op": {
|
|
582
|
+
"const": "shuffle"
|
|
583
|
+
}
|
|
336
584
|
},
|
|
337
|
-
"
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
"required": [
|
|
343
|
-
"op"
|
|
344
|
-
]
|
|
585
|
+
"additionalProperties": false,
|
|
586
|
+
"required": [
|
|
587
|
+
"op"
|
|
588
|
+
]
|
|
589
|
+
}
|
|
345
590
|
}
|
|
346
|
-
]
|
|
347
|
-
"discriminator": {
|
|
348
|
-
"propertyName": "op"
|
|
349
|
-
}
|
|
591
|
+
]
|
|
350
592
|
}
|