c64bridge 1.0.6 → 1.1.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 (136) hide show
  1. package/.github/skills/assembly-program/SKILL.md +37 -0
  2. package/.github/skills/basic-program/SKILL.md +40 -0
  3. package/.github/skills/cross-platform-demo/SKILL.md +32 -0
  4. package/.github/skills/drive-manager/SKILL.md +33 -0
  5. package/.github/skills/graphics-demo/SKILL.md +30 -0
  6. package/.github/skills/hello-world/SKILL.md +36 -0
  7. package/.github/skills/memory-debug/SKILL.md +32 -0
  8. package/.github/skills/pr-converge/SKILL.md +33 -0
  9. package/.github/skills/printer-job/SKILL.md +30 -0
  10. package/.github/skills/sid-music/SKILL.md +35 -0
  11. package/.github/skills/software-launch/SKILL.md +31 -0
  12. package/.github/skills/stream-control/SKILL.md +29 -0
  13. package/.github/skills/system-control/SKILL.md +32 -0
  14. package/AGENTS.md +28 -7
  15. package/README.md +70 -15
  16. package/data/assembly/assembly-spec.md +2 -0
  17. package/dist/c64Client.js +238 -60
  18. package/dist/chargen.js +0 -4
  19. package/dist/config.js +53 -28
  20. package/dist/device.js +92 -37
  21. package/dist/diagnostics.js +66 -5
  22. package/dist/hostPaths.js +128 -0
  23. package/dist/logger.js +3 -2
  24. package/dist/loggingHttpClient.js +71 -2
  25. package/dist/mcp-server.js +416 -291
  26. package/dist/numericArg.js +55 -0
  27. package/dist/petscii.js +13 -6
  28. package/dist/platform.js +12 -3
  29. package/dist/prompts/registry.js +6 -1
  30. package/dist/redact.js +166 -0
  31. package/dist/tools/access.js +66 -0
  32. package/dist/tools/debug.js +6 -0
  33. package/dist/tools/developer.js +77 -36
  34. package/dist/tools/errors.js +54 -3
  35. package/dist/tools/input.js +25 -8
  36. package/dist/tools/machineControl.js +113 -21
  37. package/dist/tools/memory.js +135 -30
  38. package/dist/tools/meta/artifacts.js +5 -5
  39. package/dist/tools/meta/background.js +216 -54
  40. package/dist/tools/meta/compilation.js +6 -5
  41. package/dist/tools/meta/config.js +20 -10
  42. package/dist/tools/meta/configInventory.js +25 -2
  43. package/dist/tools/meta/diagnostics.js +2 -1
  44. package/dist/tools/meta/filesystem.js +16 -14
  45. package/dist/tools/meta/graphics.js +48 -20
  46. package/dist/tools/meta/memory.js +45 -19
  47. package/dist/tools/meta/program.js +10 -7
  48. package/dist/tools/meta/screen.js +116 -25
  49. package/dist/tools/pauseGuard.js +23 -0
  50. package/dist/tools/pollValidator.js +53 -8
  51. package/dist/tools/programRunners.js +62 -18
  52. package/dist/tools/registry/batch.js +17 -11
  53. package/dist/tools/registry/config.js +9 -2
  54. package/dist/tools/registry/disk.js +12 -2
  55. package/dist/tools/registry/drive.js +3 -0
  56. package/dist/tools/registry/extract.js +3 -0
  57. package/dist/tools/registry/graphics.js +59 -6
  58. package/dist/tools/registry/index.js +17 -1
  59. package/dist/tools/registry/memory.js +11 -1
  60. package/dist/tools/registry/platform.js +4 -1
  61. package/dist/tools/registry/printer.js +2 -1
  62. package/dist/tools/registry/program.js +5 -1
  63. package/dist/tools/registry/rag.js +1 -0
  64. package/dist/tools/registry/sound.js +12 -1
  65. package/dist/tools/registry/stream.js +2 -1
  66. package/dist/tools/registry/system.js +8 -1
  67. package/dist/tools/schema.js +7 -7
  68. package/dist/tools/streaming.js +34 -4
  69. package/dist/tools/translation/assembler.js +247 -24
  70. package/dist/tools/translation/basicDetokenizer.js +80 -0
  71. package/dist/tools/translation/basicTokenizer.js +8 -3
  72. package/dist/tools/translation/disassembler.js +14 -0
  73. package/dist/tools/types.js +258 -7
  74. package/dist/tools/vice.js +5 -16
  75. package/dist/vicBitmap.js +1 -1
  76. package/dist/vice/mockServer.js +3 -0
  77. package/dist/vice/process.js +19 -0
  78. package/dist/vice/resourcePolicy.js +36 -0
  79. package/dist/vice/viceClient.js +22 -5
  80. package/doc/vice/support-matrix.md +17 -11
  81. package/mcp/schemas/c64_batch.schema.json +2 -1
  82. package/mcp/schemas/c64_config.schema.json +33 -466
  83. package/mcp/schemas/c64_debug.schema.json +3 -602
  84. package/mcp/schemas/c64_disk.schema.json +17 -344
  85. package/mcp/schemas/c64_drive.schema.json +2 -157
  86. package/mcp/schemas/c64_extract.schema.json +10 -364
  87. package/mcp/schemas/c64_graphics.schema.json +19 -426
  88. package/mcp/schemas/c64_input.schema.json +5 -318
  89. package/mcp/schemas/c64_memory.schema.json +23 -491
  90. package/mcp/schemas/c64_printer.schema.json +3 -258
  91. package/mcp/schemas/c64_program.schema.json +16 -491
  92. package/mcp/schemas/c64_rag.schema.json +1 -81
  93. package/mcp/schemas/c64_select_backend.schema.json +2 -36
  94. package/mcp/schemas/c64_sound.schema.json +20 -822
  95. package/mcp/schemas/c64_stream.schema.json +4 -75
  96. package/mcp/schemas/c64_system.schema.json +28 -348
  97. package/mcp/schemas/c64_vice.schema.json +2 -71
  98. package/mcp/server.json +1 -1
  99. package/mcp/tools.json +1990 -6900
  100. package/mcp.json +21 -1
  101. package/package.json +19 -8
  102. package/scripts/mockC64Server.mjs +44 -0
  103. package/scripts/run-coverage.mjs +27 -1
  104. package/scripts/smoke-run.sh +3 -2
  105. package/scripts/start.mjs +23 -1
  106. package/server.json +53 -3
  107. package/dist/.tsbuildinfo +0 -1
  108. package/doc/agent-state-spec.md +0 -243
  109. package/doc/plans/bun/baseline-metrics.md +0 -16
  110. package/doc/plans/bun/migration-checklist.md +0 -55
  111. package/doc/plans/bun/migration.md +0 -83
  112. package/doc/plans/improve-knowledge/notes.md +0 -43
  113. package/doc/plans/improve-knowledge/plan.md +0 -121
  114. package/doc/plans/improve-knowledge/rollout.md +0 -110
  115. package/doc/plans/meta-tools/README.md +0 -110
  116. package/doc/plans/meta-tools/analysis.md +0 -272
  117. package/doc/plans/meta-tools/catalog.md +0 -435
  118. package/doc/plans/meta-tools/notes.md +0 -192
  119. package/doc/plans/meta-tools/rollout.md +0 -368
  120. package/doc/plans/prompts/README.md +0 -96
  121. package/doc/plans/prompts/user-prompt-ideas.md +0 -147
  122. package/doc/plans/tool-consolidation/notes.md +0 -28
  123. package/doc/plans/tool-consolidation/plan.md +0 -169
  124. package/doc/plans/tool-consolidation/rollout.md +0 -104
  125. package/doc/plans/vice-backend-switch/plan.md +0 -486
  126. package/doc/plans/vice-backend-switch-2/plan.md +0 -48
  127. package/doc/plans/vice-support/notes.md +0 -63
  128. package/doc/plans/vice-support/plan.md +0 -88
  129. package/doc/plans/vice-support/rollout.md +0 -99
  130. package/doc/reviews/audit.md +0 -143
  131. package/doc/reviews/hardening/01-fable/prompt-handover.md +0 -125
  132. package/doc/reviews/hardening/01-fable/prompt.md +0 -98
  133. package/doc/reviews/hardening/01-fable/review-prompt.md +0 -468
  134. package/doc/reviews/hardening/01-fable/review.md +0 -1234
  135. package/doc/reviews/vice-support-review.md +0 -185
  136. package/scripts/compare-rest/rest-compare-2025-11-01T00-25-21-830Z.json +0 -2513
@@ -28,8 +28,20 @@
28
28
  "boolean",
29
29
  "null"
30
30
  ],
31
- "description": "Include pixel payload bytes in the response.",
32
- "default": true
31
+ "description": "Include raw pixel payload bytes in the response. Off by default because a frame is about 100 KB; the response is rejected above 2 MiB, so lower count when it is on.",
32
+ "default": false
33
+ },
34
+ "format": {
35
+ "type": [
36
+ "string",
37
+ "null"
38
+ ],
39
+ "description": "Set to png to receive each frame as an MCP image block (C64 palette). At most 4 frames per call. Limits depend on op.",
40
+ "enum": [
41
+ "png",
42
+ "hires",
43
+ "multicolor"
44
+ ]
33
45
  },
34
46
  "encoding": {
35
47
  "type": [
@@ -56,7 +68,7 @@
56
68
  "string",
57
69
  "null"
58
70
  ],
59
- "description": "Exact text to render in PETSCII (overrides prompt derivation).",
71
+ "description": "Exact text to render in PETSCII (overrides prompt derivation). Limits depend on op.",
60
72
  "minLength": 1
61
73
  },
62
74
  "maxWidth": {
@@ -82,7 +94,7 @@
82
94
  "integer",
83
95
  "null"
84
96
  ],
85
- "description": "Border colour index (0-15).",
97
+ "description": "Border colour index (0-15). Limits depend on op.",
86
98
  "minimum": 0,
87
99
  "maximum": 15
88
100
  },
@@ -91,7 +103,7 @@
91
103
  "integer",
92
104
  "null"
93
105
  ],
94
- "description": "Background colour index (0-15).",
106
+ "description": "Background colour index (0-15). Limits depend on op.",
95
107
  "minimum": 0,
96
108
  "maximum": 15
97
109
  },
@@ -194,14 +206,6 @@
194
206
  "description": "Filesystem path of the source image (PNG, JPEG, BMP, GIF, TIFF, and other Jimp-supported formats).",
195
207
  "minLength": 1
196
208
  },
197
- "format": {
198
- "description": "Bitmap encoding mode to generate for the VIC-II display.",
199
- "type": "string",
200
- "enum": [
201
- "hires",
202
- "multicolor"
203
- ]
204
- },
205
209
  "bitmapAddress": {
206
210
  "description": "Absolute C64 memory address, provided as an integer or hex string such as $2000.",
207
211
  "type": [
@@ -229,417 +233,6 @@
229
233
  "required": [
230
234
  "op"
231
235
  ],
232
- "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. Required inputs: none. Optional inputs: count, includePixels, encoding.\n- render_petscii_art: Create PETSCII art from prompts, text, or explicit bitmap data, and optionally display it on the C64. Required inputs: none. Optional inputs: prompt, text, maxWidth, maxHeight, borderColor, backgroundColor, foregroundColor, dryRun, bitmap.\n- render_petscii_text: Display PETSCII text with optional border and background colours. Required inputs: text. Optional inputs: borderColor, backgroundColor.\n- render_sprite: Display supplied 63-byte sprite data at the requested position and colour by writing memory and patching VIC-II registers directly. Required inputs: sprite. Optional inputs: index, x, y, color, multicolour.\n- render_bitmap: Import an image file, convert it to VIC-II bitmap memory, write it into RAM, and display it. Required inputs: imagePath, format. Optional inputs: bitmapAddress, screenAddress, borderColor, backgroundColor, preserveAspect.\n- get_display_state: Read VIC-II and CIA2 registers to determine the current graphics mode and memory layout. The same shared-memory path is used on C64U/U64, U2-family hardware, and VICE, so the response shape is identical. Required inputs: none.",
233
- "additionalProperties": false,
234
- "x-c64bridge-operations": [
235
- {
236
- "op": "capture_frame",
237
- "description": "Capture one or more complete video frames from the active backend.",
238
- "required": [],
239
- "optional": [
240
- "count",
241
- "includePixels",
242
- "encoding"
243
- ],
244
- "inputSchema": {
245
- "type": "object",
246
- "description": "Capture one or more complete video frames from the active backend.",
247
- "properties": {
248
- "op": {
249
- "const": "capture_frame"
250
- },
251
- "count": {
252
- "type": [
253
- "integer",
254
- "null"
255
- ],
256
- "description": "Number of frames to capture.",
257
- "minimum": 1,
258
- "maximum": 32,
259
- "default": 1
260
- },
261
- "includePixels": {
262
- "type": [
263
- "boolean",
264
- "null"
265
- ],
266
- "description": "Include pixel payload bytes in the response.",
267
- "default": true
268
- },
269
- "encoding": {
270
- "type": [
271
- "string",
272
- "null"
273
- ],
274
- "description": "Encoding used for the pixel payload when included.",
275
- "enum": [
276
- "base64",
277
- "hex"
278
- ],
279
- "default": "base64"
280
- }
281
- },
282
- "required": [
283
- "op"
284
- ],
285
- "additionalProperties": false
286
- }
287
- },
288
- {
289
- "op": "render_petscii_art",
290
- "description": "Create PETSCII art from prompts, text, or explicit bitmap data, and optionally display it on the C64.",
291
- "required": [],
292
- "optional": [
293
- "prompt",
294
- "text",
295
- "maxWidth",
296
- "maxHeight",
297
- "borderColor",
298
- "backgroundColor",
299
- "foregroundColor",
300
- "dryRun",
301
- "bitmap"
302
- ],
303
- "inputSchema": {
304
- "type": "object",
305
- "description": "Create PETSCII art from prompts, text, or explicit bitmap data, and optionally display it on the C64.",
306
- "properties": {
307
- "prompt": {
308
- "type": [
309
- "string",
310
- "null"
311
- ],
312
- "description": "Natural language prompt describing the desired PETSCII art.",
313
- "minLength": 1
314
- },
315
- "text": {
316
- "type": [
317
- "string",
318
- "null"
319
- ],
320
- "description": "Exact text to render in PETSCII (overrides prompt derivation).",
321
- "minLength": 1
322
- },
323
- "maxWidth": {
324
- "type": [
325
- "integer",
326
- "null"
327
- ],
328
- "description": "Maximum bitmap width in pixels (1-320).",
329
- "minimum": 1,
330
- "maximum": 320
331
- },
332
- "maxHeight": {
333
- "type": [
334
- "integer",
335
- "null"
336
- ],
337
- "description": "Maximum bitmap height in pixels (1-200).",
338
- "minimum": 1,
339
- "maximum": 200
340
- },
341
- "borderColor": {
342
- "type": [
343
- "integer",
344
- "null"
345
- ],
346
- "description": "Border colour index (0-15).",
347
- "minimum": 0,
348
- "maximum": 15
349
- },
350
- "backgroundColor": {
351
- "type": [
352
- "integer",
353
- "null"
354
- ],
355
- "description": "Background colour index (0-15).",
356
- "minimum": 0,
357
- "maximum": 15
358
- },
359
- "foregroundColor": {
360
- "type": [
361
- "integer",
362
- "null"
363
- ],
364
- "description": "Foreground colour index (0-15).",
365
- "minimum": 0,
366
- "maximum": 15
367
- },
368
- "dryRun": {
369
- "type": "boolean",
370
- "description": "When true, skip uploading the generated BASIC program to the C64.",
371
- "default": false
372
- },
373
- "bitmap": {
374
- "description": "Explicit bitmap definition for PETSCII rendering.",
375
- "type": [
376
- "object",
377
- "null"
378
- ],
379
- "properties": {
380
- "width": {
381
- "type": "integer",
382
- "minimum": 1,
383
- "maximum": 320
384
- },
385
- "height": {
386
- "type": "integer",
387
- "minimum": 1,
388
- "maximum": 200
389
- },
390
- "pixels": {
391
- "type": "array",
392
- "items": {
393
- "type": "integer",
394
- "minimum": 0,
395
- "maximum": 1
396
- }
397
- }
398
- },
399
- "required": [
400
- "width",
401
- "height",
402
- "pixels"
403
- ],
404
- "additionalProperties": false
405
- },
406
- "op": {
407
- "const": "render_petscii_art"
408
- }
409
- },
410
- "additionalProperties": false,
411
- "required": [
412
- "op"
413
- ]
414
- }
415
- },
416
- {
417
- "op": "render_petscii_text",
418
- "description": "Display PETSCII text with optional border and background colours.",
419
- "required": [
420
- "text"
421
- ],
422
- "optional": [
423
- "borderColor",
424
- "backgroundColor"
425
- ],
426
- "inputSchema": {
427
- "type": "object",
428
- "description": "Display PETSCII text with optional border and background colours.",
429
- "properties": {
430
- "text": {
431
- "type": "string",
432
- "description": "The PETSCII text to print after clearing the screen.",
433
- "minLength": 1
434
- },
435
- "borderColor": {
436
- "type": [
437
- "integer",
438
- "null"
439
- ],
440
- "description": "Border colour index (0-15).",
441
- "minimum": 0,
442
- "maximum": 15
443
- },
444
- "backgroundColor": {
445
- "type": [
446
- "integer",
447
- "null"
448
- ],
449
- "description": "Background colour index (0-15).",
450
- "minimum": 0,
451
- "maximum": 15
452
- },
453
- "op": {
454
- "const": "render_petscii_text"
455
- }
456
- },
457
- "required": [
458
- "text",
459
- "op"
460
- ],
461
- "additionalProperties": false
462
- }
463
- },
464
- {
465
- "op": "render_sprite",
466
- "description": "Display supplied 63-byte sprite data at the requested position and colour by writing memory and patching VIC-II registers directly.",
467
- "required": [
468
- "sprite"
469
- ],
470
- "optional": [
471
- "index",
472
- "x",
473
- "y",
474
- "color",
475
- "multicolour"
476
- ],
477
- "inputSchema": {
478
- "type": "object",
479
- "description": "Display supplied 63-byte sprite data at the requested position and colour by writing memory and patching VIC-II registers directly.",
480
- "properties": {
481
- "sprite": {
482
- "description": "63-byte sprite definition provided as base64/hex string or array of bytes.",
483
- "type": [
484
- "string",
485
- "array"
486
- ],
487
- "items": {
488
- "type": "integer",
489
- "minimum": 0,
490
- "maximum": 255
491
- },
492
- "minItems": 63,
493
- "maxItems": 63
494
- },
495
- "index": {
496
- "type": "integer",
497
- "description": "Sprite index (0-7) to configure in screen memory.",
498
- "minimum": 0,
499
- "maximum": 7,
500
- "default": 0
501
- },
502
- "x": {
503
- "type": "integer",
504
- "description": "Sprite X position (0-511).",
505
- "minimum": 0,
506
- "maximum": 511,
507
- "default": 100
508
- },
509
- "y": {
510
- "type": "integer",
511
- "description": "Sprite Y position (0-255).",
512
- "minimum": 0,
513
- "maximum": 255,
514
- "default": 100
515
- },
516
- "color": {
517
- "type": "integer",
518
- "description": "Sprite colour index (0-15).",
519
- "minimum": 0,
520
- "maximum": 15,
521
- "default": 1
522
- },
523
- "multicolour": {
524
- "type": "boolean",
525
- "description": "Enable multicolour mode for the sprite.",
526
- "default": false
527
- },
528
- "op": {
529
- "const": "render_sprite"
530
- }
531
- },
532
- "required": [
533
- "sprite",
534
- "op"
535
- ],
536
- "additionalProperties": false
537
- }
538
- },
539
- {
540
- "op": "render_bitmap",
541
- "description": "Import an image file, convert it to VIC-II bitmap memory, write it into RAM, and display it.",
542
- "required": [
543
- "imagePath",
544
- "format"
545
- ],
546
- "optional": [
547
- "bitmapAddress",
548
- "screenAddress",
549
- "borderColor",
550
- "backgroundColor",
551
- "preserveAspect"
552
- ],
553
- "inputSchema": {
554
- "type": "object",
555
- "description": "Import an image file, convert it to VIC-II bitmap memory, write it into RAM, and display it.",
556
- "properties": {
557
- "imagePath": {
558
- "type": "string",
559
- "description": "Filesystem path of the source image (PNG, JPEG, BMP, GIF, TIFF, and other Jimp-supported formats).",
560
- "minLength": 1
561
- },
562
- "format": {
563
- "description": "Bitmap encoding mode to generate for the VIC-II display.",
564
- "type": "string",
565
- "enum": [
566
- "hires",
567
- "multicolor"
568
- ]
569
- },
570
- "bitmapAddress": {
571
- "description": "Absolute C64 memory address, provided as an integer or hex string such as $2000.",
572
- "type": [
573
- "integer",
574
- "string",
575
- "null"
576
- ],
577
- "default": 8192
578
- },
579
- "screenAddress": {
580
- "description": "Absolute C64 memory address, provided as an integer or hex string such as $2000.",
581
- "type": [
582
- "integer",
583
- "string",
584
- "null"
585
- ],
586
- "default": 1024
587
- },
588
- "borderColor": {
589
- "type": [
590
- "integer",
591
- "null"
592
- ],
593
- "description": "Border colour index (0-15).",
594
- "minimum": 0,
595
- "maximum": 15,
596
- "default": 0
597
- },
598
- "backgroundColor": {
599
- "type": [
600
- "integer",
601
- "null"
602
- ],
603
- "description": "Background colour index (0-15). Used for multicolor mode and aspect-ratio padding.",
604
- "minimum": 0,
605
- "maximum": 15,
606
- "default": 0
607
- },
608
- "preserveAspect": {
609
- "type": "boolean",
610
- "description": "Preserve the source image aspect ratio and pad with the background colour.",
611
- "default": true
612
- },
613
- "op": {
614
- "const": "render_bitmap"
615
- }
616
- },
617
- "required": [
618
- "imagePath",
619
- "format",
620
- "op"
621
- ],
622
- "additionalProperties": false
623
- }
624
- },
625
- {
626
- "op": "get_display_state",
627
- "description": "Read VIC-II and CIA2 registers to determine the current graphics mode and memory layout. The same shared-memory path is used on C64U/U64, U2-family hardware, and VICE, so the response shape is identical.",
628
- "required": [],
629
- "optional": [],
630
- "inputSchema": {
631
- "type": "object",
632
- "description": "Read VIC-II and CIA2 registers to determine the current graphics mode and memory layout. The same shared-memory path is used on C64U/U64, U2-family hardware, and VICE, so the response shape is identical.",
633
- "properties": {
634
- "op": {
635
- "const": "get_display_state"
636
- }
637
- },
638
- "required": [
639
- "op"
640
- ],
641
- "additionalProperties": false
642
- }
643
- }
644
- ]
236
+ "description": "Graphics operations available via the c64_graphics tool.\n\nOperations:\n- capture_frame [c64u, vice]: Capture one or more complete video frames from the active backend. Required inputs: none. Optional inputs: count, includePixels, format, encoding.\n- render_petscii_art [write]: Create PETSCII art from prompts, text, or explicit bitmap data, and optionally display it on the C64. Required inputs: none. Optional inputs: prompt, text, maxWidth, maxHeight, borderColor, backgroundColor, foregroundColor, dryRun, bitmap.\n- render_petscii_text [write]: Display PETSCII text with optional border and background colours. Required inputs: text. Optional inputs: borderColor, backgroundColor.\n- render_sprite [write]: Display supplied 63-byte sprite data at the requested position and colour by writing memory and patching VIC-II registers directly. Required inputs: sprite. Optional inputs: index, x, y, color, multicolour.\n- render_bitmap [write]: Import an image file, convert it to VIC-II bitmap memory, write it into RAM, and display it. Required inputs: imagePath, format. Optional inputs: bitmapAddress, screenAddress, borderColor, backgroundColor, preserveAspect.\n- get_display_state: Read VIC-II and CIA2 registers to determine the current graphics mode and memory layout. The same shared-memory path is used on C64U/U64, U2-family hardware, and VICE, so the response shape is identical. Required inputs: none.",
237
+ "additionalProperties": false
645
238
  }