c64bridge 0.8.0 → 0.9.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.
Files changed (79) hide show
  1. package/.github/prompts/steer.prompt.md +55 -0
  2. package/AGENTS.md +9 -7
  3. package/README.md +139 -95
  4. package/data/embeddings_asm.json +1 -1
  5. package/data/embeddings_basic.json +1 -1
  6. package/data/embeddings_hardware.json +1 -1
  7. package/data/embeddings_mixed.json +1 -1
  8. package/data/embeddings_other.json +1 -1
  9. package/data/graphics/petscii-style-guide.md +4 -4
  10. package/data/graphics/sprite-charset-best-practices.md +9 -9
  11. package/data/vice/vice-binary-monitor-spec.md +921 -0
  12. package/dist/.tsbuildinfo +1 -1
  13. package/dist/device.js +86 -10
  14. package/dist/mcp-server.js +1 -1
  15. package/dist/prompts/registry.js +27 -25
  16. package/dist/rag/knowledgeIndex.js +112 -79
  17. package/dist/rag/resourceUris.js +93 -0
  18. package/dist/tools/audio.js +11 -11
  19. package/dist/tools/debug.js +1 -1
  20. package/dist/tools/developer.js +13 -13
  21. package/dist/tools/graphics.js +10 -10
  22. package/dist/tools/machineControl.js +5 -5
  23. package/dist/tools/memory.js +19 -11
  24. package/dist/tools/meta/index.js +1 -1
  25. package/dist/tools/printer.js +11 -12
  26. package/dist/tools/programRunners.js +16 -16
  27. package/dist/tools/rag.js +9 -9
  28. package/dist/tools/registry/config.js +1 -1
  29. package/dist/tools/registry/disk.js +1 -1
  30. package/dist/tools/registry/drive.js +1 -1
  31. package/dist/tools/registry/extract.js +1 -1
  32. package/dist/tools/registry/graphics.js +1 -1
  33. package/dist/tools/registry/memory.js +1 -1
  34. package/dist/tools/registry/platform.js +1 -1
  35. package/dist/tools/registry/printer.js +1 -1
  36. package/dist/tools/registry/program.js +1 -1
  37. package/dist/tools/registry/rag.js +1 -1
  38. package/dist/tools/registry/sound.js +1 -1
  39. package/dist/tools/registry/stream.js +1 -1
  40. package/dist/tools/registry/system.js +1 -1
  41. package/dist/tools/storage.js +15 -15
  42. package/dist/tools/streaming.js +3 -3
  43. package/dist/tools/types.js +41 -4
  44. package/dist/tools/vice.js +2 -5
  45. package/dist/vice/process.js +79 -2
  46. package/dist/vice/readiness.js +35 -0
  47. package/dist/vice/smokeOptions.js +44 -0
  48. package/dist/viceRunner.js +2 -0
  49. package/doc/developer.md +10 -2
  50. package/doc/plans/prompts/README.md +7 -7
  51. package/mcp/prompts.json +42 -59
  52. package/mcp/protocol-examples.json +2 -2
  53. package/mcp/resources.json +179 -166
  54. package/mcp/schemas/c64_config.schema.json +109 -326
  55. package/mcp/schemas/c64_debug.schema.json +158 -337
  56. package/mcp/schemas/c64_disk.schema.json +180 -262
  57. package/mcp/schemas/c64_drive.schema.json +31 -111
  58. package/mcp/schemas/c64_extract.schema.json +193 -291
  59. package/mcp/schemas/c64_graphics.schema.json +208 -308
  60. package/mcp/schemas/c64_memory.schema.json +94 -144
  61. package/mcp/schemas/c64_printer.schema.json +151 -205
  62. package/mcp/schemas/c64_program.schema.json +229 -367
  63. package/mcp/schemas/c64_rag.schema.json +25 -59
  64. package/mcp/schemas/c64_select_backend.schema.json +19 -26
  65. package/mcp/schemas/c64_sound.schema.json +346 -622
  66. package/mcp/schemas/c64_stream.schema.json +25 -54
  67. package/mcp/schemas/c64_system.schema.json +79 -212
  68. package/mcp/schemas/c64_vice.schema.json +24 -55
  69. package/mcp/server.json +1 -1
  70. package/mcp/tools.json +1935 -3443
  71. package/mcp.json +10 -9
  72. package/package.json +20 -15
  73. package/scripts/fetch-external-sources.mjs +1 -2
  74. package/scripts/prepare-release.mjs +59 -2
  75. package/scripts/run-coverage.mjs +26 -1
  76. package/scripts/run-tests.mjs +2 -2
  77. package/scripts/run-tests.ts +273 -52
  78. package/scripts/update-readme.ts +54 -2
  79. package/server.json +94 -0
@@ -1,333 +1,233 @@
1
1
  {
2
2
  "type": "object",
3
- "description": "Graphics operations available via the c64_graphics tool.",
4
- "oneOf": [
5
- {
6
- "type": "object",
7
- "description": "Capture one or more complete video frames from the active backend.",
8
- "properties": {
9
- "op": {
10
- "const": "capture_frame"
11
- },
12
- "count": {
13
- "type": [
14
- "integer",
15
- "null"
16
- ],
17
- "description": "Number of frames to capture.",
18
- "minimum": 1,
19
- "maximum": 32,
20
- "default": 1
21
- },
22
- "includePixels": {
23
- "type": [
24
- "boolean",
25
- "null"
26
- ],
27
- "description": "Include pixel payload bytes in the response.",
28
- "default": true
29
- },
30
- "encoding": {
31
- "type": [
32
- "string",
33
- "null"
34
- ],
35
- "description": "Encoding used for the pixel payload when included.",
36
- "enum": [
37
- "base64",
38
- "hex"
39
- ],
40
- "default": "base64"
41
- }
42
- },
43
- "required": [
44
- "op"
3
+ "properties": {
4
+ "op": {
5
+ "type": "string",
6
+ "enum": [
7
+ "capture_frame",
8
+ "render_petscii_art",
9
+ "render_petscii_text",
10
+ "render_sprite",
11
+ "render_bitmap"
45
12
  ],
46
- "additionalProperties": false
13
+ "description": "Selects the operation."
14
+ },
15
+ "count": {
16
+ "type": [
17
+ "integer",
18
+ "null"
19
+ ],
20
+ "description": "Number of frames to capture.",
21
+ "minimum": 1,
22
+ "maximum": 32,
23
+ "default": 1
24
+ },
25
+ "includePixels": {
26
+ "type": [
27
+ "boolean",
28
+ "null"
29
+ ],
30
+ "description": "Include pixel payload bytes in the response.",
31
+ "default": true
32
+ },
33
+ "encoding": {
34
+ "type": [
35
+ "string",
36
+ "null"
37
+ ],
38
+ "description": "Encoding used for the pixel payload when included.",
39
+ "enum": [
40
+ "base64",
41
+ "hex"
42
+ ],
43
+ "default": "base64"
44
+ },
45
+ "prompt": {
46
+ "type": [
47
+ "string",
48
+ "null"
49
+ ],
50
+ "description": "Natural language prompt describing the desired PETSCII art.",
51
+ "minLength": 1
52
+ },
53
+ "text": {
54
+ "type": [
55
+ "string",
56
+ "null"
57
+ ],
58
+ "description": "Exact text to render in PETSCII (overrides prompt derivation).",
59
+ "minLength": 1
60
+ },
61
+ "maxWidth": {
62
+ "type": [
63
+ "integer",
64
+ "null"
65
+ ],
66
+ "description": "Maximum bitmap width in pixels (1-320).",
67
+ "minimum": 1,
68
+ "maximum": 320
69
+ },
70
+ "maxHeight": {
71
+ "type": [
72
+ "integer",
73
+ "null"
74
+ ],
75
+ "description": "Maximum bitmap height in pixels (1-200).",
76
+ "minimum": 1,
77
+ "maximum": 200
78
+ },
79
+ "borderColor": {
80
+ "type": [
81
+ "integer",
82
+ "null"
83
+ ],
84
+ "description": "Border colour index (0-15).",
85
+ "minimum": 0,
86
+ "maximum": 15
87
+ },
88
+ "backgroundColor": {
89
+ "type": [
90
+ "integer",
91
+ "null"
92
+ ],
93
+ "description": "Background colour index (0-15).",
94
+ "minimum": 0,
95
+ "maximum": 15
96
+ },
97
+ "foregroundColor": {
98
+ "type": [
99
+ "integer",
100
+ "null"
101
+ ],
102
+ "description": "Foreground colour index (0-15).",
103
+ "minimum": 0,
104
+ "maximum": 15
105
+ },
106
+ "dryRun": {
107
+ "type": "boolean",
108
+ "description": "When true, skip uploading the generated BASIC program to the C64.",
109
+ "default": false
47
110
  },
48
- {
49
- "type": "object",
50
- "description": "Create PETSCII art from prompts, text, or explicit bitmap data, and optionally display it on the C64.",
111
+ "bitmap": {
112
+ "description": "Explicit bitmap definition for PETSCII rendering.",
113
+ "type": [
114
+ "object",
115
+ "null"
116
+ ],
51
117
  "properties": {
52
- "prompt": {
53
- "type": [
54
- "string",
55
- "null"
56
- ],
57
- "description": "Natural language prompt describing the desired PETSCII art.",
58
- "minLength": 1
59
- },
60
- "text": {
61
- "type": [
62
- "string",
63
- "null"
64
- ],
65
- "description": "Exact text to render in PETSCII (overrides prompt derivation).",
66
- "minLength": 1
67
- },
68
- "maxWidth": {
69
- "type": [
70
- "integer",
71
- "null"
72
- ],
73
- "description": "Maximum bitmap width in pixels (1-320).",
118
+ "width": {
119
+ "type": "integer",
74
120
  "minimum": 1,
75
121
  "maximum": 320
76
122
  },
77
- "maxHeight": {
78
- "type": [
79
- "integer",
80
- "null"
81
- ],
82
- "description": "Maximum bitmap height in pixels (1-200).",
123
+ "height": {
124
+ "type": "integer",
83
125
  "minimum": 1,
84
126
  "maximum": 200
85
127
  },
86
- "borderColor": {
87
- "type": [
88
- "integer",
89
- "null"
90
- ],
91
- "description": "Border colour index (0-15).",
92
- "minimum": 0,
93
- "maximum": 15
94
- },
95
- "backgroundColor": {
96
- "type": [
97
- "integer",
98
- "null"
99
- ],
100
- "description": "Background colour index (0-15).",
101
- "minimum": 0,
102
- "maximum": 15
103
- },
104
- "foregroundColor": {
105
- "type": [
106
- "integer",
107
- "null"
108
- ],
109
- "description": "Foreground colour index (0-15).",
110
- "minimum": 0,
111
- "maximum": 15
112
- },
113
- "dryRun": {
114
- "type": "boolean",
115
- "description": "When true, skip uploading the generated BASIC program to the C64.",
116
- "default": false
117
- },
118
- "bitmap": {
119
- "description": "Explicit bitmap definition for PETSCII rendering.",
120
- "type": [
121
- "object",
122
- "null"
123
- ],
124
- "properties": {
125
- "width": {
126
- "type": "integer",
127
- "minimum": 1,
128
- "maximum": 320
129
- },
130
- "height": {
131
- "type": "integer",
132
- "minimum": 1,
133
- "maximum": 200
134
- },
135
- "pixels": {
136
- "type": "array",
137
- "items": {
138
- "type": "integer",
139
- "minimum": 0,
140
- "maximum": 1
141
- }
142
- }
143
- },
144
- "required": [
145
- "width",
146
- "height",
147
- "pixels"
148
- ],
149
- "additionalProperties": false
150
- },
151
- "op": {
152
- "const": "render_petscii_art"
153
- }
154
- },
155
- "additionalProperties": false,
156
- "required": [
157
- "op"
158
- ]
159
- },
160
- {
161
- "type": "object",
162
- "description": "Display PETSCII text with optional border and background colours.",
163
- "properties": {
164
- "text": {
165
- "type": "string",
166
- "description": "The PETSCII text to print after clearing the screen.",
167
- "minLength": 1
168
- },
169
- "borderColor": {
170
- "type": [
171
- "integer",
172
- "null"
173
- ],
174
- "description": "Border colour index (0-15).",
175
- "minimum": 0,
176
- "maximum": 15
177
- },
178
- "backgroundColor": {
179
- "type": [
180
- "integer",
181
- "null"
182
- ],
183
- "description": "Background colour index (0-15).",
184
- "minimum": 0,
185
- "maximum": 15
186
- },
187
- "op": {
188
- "const": "render_petscii_text"
189
- }
190
- },
191
- "required": [
192
- "text",
193
- "op"
194
- ],
195
- "additionalProperties": false
196
- },
197
- {
198
- "type": "object",
199
- "description": "Display supplied 63-byte sprite data at the requested position and colour by writing memory and patching VIC-II registers directly.",
200
- "properties": {
201
- "sprite": {
202
- "description": "63-byte sprite definition provided as base64/hex string or array of bytes.",
203
- "type": [
204
- "string",
205
- "array"
206
- ],
128
+ "pixels": {
129
+ "type": "array",
207
130
  "items": {
208
131
  "type": "integer",
209
132
  "minimum": 0,
210
- "maximum": 255
211
- },
212
- "minItems": 63,
213
- "maxItems": 63
214
- },
215
- "index": {
216
- "type": "integer",
217
- "description": "Sprite index (0-7) to configure in screen memory.",
218
- "minimum": 0,
219
- "maximum": 7,
220
- "default": 0
221
- },
222
- "x": {
223
- "type": "integer",
224
- "description": "Sprite X position (0-511).",
225
- "minimum": 0,
226
- "maximum": 511,
227
- "default": 100
228
- },
229
- "y": {
230
- "type": "integer",
231
- "description": "Sprite Y position (0-255).",
232
- "minimum": 0,
233
- "maximum": 255,
234
- "default": 100
235
- },
236
- "color": {
237
- "type": "integer",
238
- "description": "Sprite colour index (0-15).",
239
- "minimum": 0,
240
- "maximum": 15,
241
- "default": 1
242
- },
243
- "multicolour": {
244
- "type": "boolean",
245
- "description": "Enable multicolour mode for the sprite.",
246
- "default": false
247
- },
248
- "op": {
249
- "const": "render_sprite"
133
+ "maximum": 1
134
+ }
250
135
  }
251
136
  },
252
137
  "required": [
253
- "sprite",
254
- "op"
138
+ "width",
139
+ "height",
140
+ "pixels"
255
141
  ],
256
142
  "additionalProperties": false
257
143
  },
258
- {
259
- "type": "object",
260
- "description": "Import an image file, convert it to VIC-II bitmap memory, write it into RAM, and display it.",
261
- "properties": {
262
- "imagePath": {
263
- "type": "string",
264
- "description": "Filesystem path of the source image (PNG, JPEG, BMP, GIF, TIFF, and other Jimp-supported formats).",
265
- "minLength": 1
266
- },
267
- "format": {
268
- "description": "Bitmap encoding mode to generate for the VIC-II display.",
269
- "type": "string",
270
- "enum": [
271
- "hires",
272
- "multicolor"
273
- ]
274
- },
275
- "bitmapAddress": {
276
- "description": "Absolute C64 memory address, provided as an integer or hex string such as $2000.",
277
- "type": [
278
- "integer",
279
- "string",
280
- "null"
281
- ],
282
- "default": 8192
283
- },
284
- "screenAddress": {
285
- "description": "Absolute C64 memory address, provided as an integer or hex string such as $2000.",
286
- "type": [
287
- "integer",
288
- "string",
289
- "null"
290
- ],
291
- "default": 1024
292
- },
293
- "borderColor": {
294
- "type": [
295
- "integer",
296
- "null"
297
- ],
298
- "description": "Border colour index (0-15).",
299
- "minimum": 0,
300
- "maximum": 15,
301
- "default": 0
302
- },
303
- "backgroundColor": {
304
- "type": [
305
- "integer",
306
- "null"
307
- ],
308
- "description": "Background colour index (0-15). Used for multicolor mode and aspect-ratio padding.",
309
- "minimum": 0,
310
- "maximum": 15,
311
- "default": 0
312
- },
313
- "preserveAspect": {
314
- "type": "boolean",
315
- "description": "Preserve the source image aspect ratio and pad with the background colour.",
316
- "default": true
317
- },
318
- "op": {
319
- "const": "render_bitmap"
320
- }
144
+ "sprite": {
145
+ "description": "63-byte sprite definition provided as base64/hex string or array of bytes.",
146
+ "type": [
147
+ "string",
148
+ "array"
149
+ ],
150
+ "items": {
151
+ "type": "integer",
152
+ "minimum": 0,
153
+ "maximum": 255
321
154
  },
322
- "required": [
323
- "imagePath",
324
- "format",
325
- "op"
155
+ "minItems": 63,
156
+ "maxItems": 63
157
+ },
158
+ "index": {
159
+ "type": "integer",
160
+ "description": "Sprite index (0-7) to configure in screen memory.",
161
+ "minimum": 0,
162
+ "maximum": 7,
163
+ "default": 0
164
+ },
165
+ "x": {
166
+ "type": "integer",
167
+ "description": "Sprite X position (0-511).",
168
+ "minimum": 0,
169
+ "maximum": 511,
170
+ "default": 100
171
+ },
172
+ "y": {
173
+ "type": "integer",
174
+ "description": "Sprite Y position (0-255).",
175
+ "minimum": 0,
176
+ "maximum": 255,
177
+ "default": 100
178
+ },
179
+ "color": {
180
+ "type": "integer",
181
+ "description": "Sprite colour index (0-15).",
182
+ "minimum": 0,
183
+ "maximum": 15,
184
+ "default": 1
185
+ },
186
+ "multicolour": {
187
+ "type": "boolean",
188
+ "description": "Enable multicolour mode for the sprite.",
189
+ "default": false
190
+ },
191
+ "imagePath": {
192
+ "type": "string",
193
+ "description": "Filesystem path of the source image (PNG, JPEG, BMP, GIF, TIFF, and other Jimp-supported formats).",
194
+ "minLength": 1
195
+ },
196
+ "format": {
197
+ "description": "Bitmap encoding mode to generate for the VIC-II display.",
198
+ "type": "string",
199
+ "enum": [
200
+ "hires",
201
+ "multicolor"
202
+ ]
203
+ },
204
+ "bitmapAddress": {
205
+ "description": "Absolute C64 memory address, provided as an integer or hex string such as $2000.",
206
+ "type": [
207
+ "integer",
208
+ "string",
209
+ "null"
326
210
  ],
327
- "additionalProperties": false
211
+ "default": 8192
212
+ },
213
+ "screenAddress": {
214
+ "description": "Absolute C64 memory address, provided as an integer or hex string such as $2000.",
215
+ "type": [
216
+ "integer",
217
+ "string",
218
+ "null"
219
+ ],
220
+ "default": 1024
221
+ },
222
+ "preserveAspect": {
223
+ "type": "boolean",
224
+ "description": "Preserve the source image aspect ratio and pad with the background colour.",
225
+ "default": true
328
226
  }
227
+ },
228
+ "required": [
229
+ "op"
329
230
  ],
330
- "discriminator": {
331
- "propertyName": "op"
332
- }
231
+ "description": "Graphics operations available via the c64_graphics tool.\n\nOperations:\n- capture_frame: Capture one or more complete video frames from the active backend.\n- render_petscii_art: Create PETSCII art from prompts, text, or explicit bitmap data, and optionally display it on the C64.\n- render_petscii_text: Display PETSCII text with optional border and background colours.\n- render_sprite: Display supplied 63-byte sprite data at the requested position and colour by writing memory and patching VIC-II registers directly.\n- render_bitmap: Import an image file, convert it to VIC-II bitmap memory, write it into RAM, and display it.",
232
+ "additionalProperties": false
333
233
  }