c64bridge 1.0.7 → 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 (132) 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 +69 -14
  16. package/data/assembly/assembly-spec.md +2 -0
  17. package/dist/c64Client.js +238 -60
  18. package/dist/config.js +48 -26
  19. package/dist/device.js +92 -37
  20. package/dist/diagnostics.js +62 -2
  21. package/dist/hostPaths.js +128 -0
  22. package/dist/loggingHttpClient.js +59 -1
  23. package/dist/mcp-server.js +409 -286
  24. package/dist/numericArg.js +55 -0
  25. package/dist/petscii.js +13 -1
  26. package/dist/platform.js +12 -3
  27. package/dist/prompts/registry.js +6 -1
  28. package/dist/tools/access.js +66 -0
  29. package/dist/tools/debug.js +6 -0
  30. package/dist/tools/developer.js +67 -34
  31. package/dist/tools/errors.js +54 -3
  32. package/dist/tools/input.js +23 -6
  33. package/dist/tools/machineControl.js +112 -20
  34. package/dist/tools/memory.js +135 -30
  35. package/dist/tools/meta/artifacts.js +5 -5
  36. package/dist/tools/meta/background.js +216 -54
  37. package/dist/tools/meta/compilation.js +6 -5
  38. package/dist/tools/meta/config.js +15 -6
  39. package/dist/tools/meta/filesystem.js +16 -14
  40. package/dist/tools/meta/graphics.js +48 -20
  41. package/dist/tools/meta/memory.js +45 -19
  42. package/dist/tools/meta/program.js +10 -7
  43. package/dist/tools/meta/screen.js +116 -25
  44. package/dist/tools/pauseGuard.js +23 -0
  45. package/dist/tools/pollValidator.js +53 -8
  46. package/dist/tools/programRunners.js +62 -18
  47. package/dist/tools/registry/batch.js +16 -4
  48. package/dist/tools/registry/config.js +9 -2
  49. package/dist/tools/registry/disk.js +12 -2
  50. package/dist/tools/registry/drive.js +3 -0
  51. package/dist/tools/registry/extract.js +3 -0
  52. package/dist/tools/registry/graphics.js +59 -6
  53. package/dist/tools/registry/index.js +17 -1
  54. package/dist/tools/registry/memory.js +11 -1
  55. package/dist/tools/registry/platform.js +4 -1
  56. package/dist/tools/registry/printer.js +2 -1
  57. package/dist/tools/registry/program.js +5 -1
  58. package/dist/tools/registry/rag.js +1 -0
  59. package/dist/tools/registry/sound.js +12 -1
  60. package/dist/tools/registry/stream.js +2 -1
  61. package/dist/tools/registry/system.js +8 -1
  62. package/dist/tools/schema.js +7 -7
  63. package/dist/tools/streaming.js +34 -4
  64. package/dist/tools/translation/assembler.js +247 -24
  65. package/dist/tools/translation/basicDetokenizer.js +80 -0
  66. package/dist/tools/translation/basicTokenizer.js +8 -3
  67. package/dist/tools/translation/disassembler.js +14 -0
  68. package/dist/tools/types.js +258 -7
  69. package/dist/tools/vice.js +5 -16
  70. package/dist/vicBitmap.js +1 -1
  71. package/dist/vice/mockServer.js +3 -0
  72. package/dist/vice/process.js +19 -0
  73. package/dist/vice/resourcePolicy.js +36 -0
  74. package/dist/vice/viceClient.js +22 -5
  75. package/doc/vice/support-matrix.md +17 -11
  76. package/mcp/schemas/c64_batch.schema.json +2 -1
  77. package/mcp/schemas/c64_config.schema.json +25 -475
  78. package/mcp/schemas/c64_debug.schema.json +3 -602
  79. package/mcp/schemas/c64_disk.schema.json +17 -344
  80. package/mcp/schemas/c64_drive.schema.json +2 -157
  81. package/mcp/schemas/c64_extract.schema.json +10 -364
  82. package/mcp/schemas/c64_graphics.schema.json +19 -426
  83. package/mcp/schemas/c64_input.schema.json +5 -318
  84. package/mcp/schemas/c64_memory.schema.json +23 -491
  85. package/mcp/schemas/c64_printer.schema.json +3 -258
  86. package/mcp/schemas/c64_program.schema.json +16 -491
  87. package/mcp/schemas/c64_rag.schema.json +1 -81
  88. package/mcp/schemas/c64_select_backend.schema.json +2 -36
  89. package/mcp/schemas/c64_sound.schema.json +20 -822
  90. package/mcp/schemas/c64_stream.schema.json +4 -75
  91. package/mcp/schemas/c64_system.schema.json +28 -348
  92. package/mcp/schemas/c64_vice.schema.json +2 -71
  93. package/mcp/server.json +1 -1
  94. package/mcp/tools.json +1983 -6910
  95. package/mcp.json +21 -1
  96. package/package.json +16 -8
  97. package/scripts/mockC64Server.mjs +44 -0
  98. package/scripts/run-coverage.mjs +27 -1
  99. package/scripts/smoke-run.sh +3 -2
  100. package/scripts/start.mjs +23 -1
  101. package/server.json +35 -2
  102. package/dist/.tsbuildinfo +0 -1
  103. package/doc/agent-state-spec.md +0 -243
  104. package/doc/audit/secret-handling.md +0 -61
  105. package/doc/plans/bun/baseline-metrics.md +0 -16
  106. package/doc/plans/bun/migration-checklist.md +0 -55
  107. package/doc/plans/bun/migration.md +0 -83
  108. package/doc/plans/improve-knowledge/notes.md +0 -43
  109. package/doc/plans/improve-knowledge/plan.md +0 -121
  110. package/doc/plans/improve-knowledge/rollout.md +0 -110
  111. package/doc/plans/meta-tools/README.md +0 -110
  112. package/doc/plans/meta-tools/analysis.md +0 -272
  113. package/doc/plans/meta-tools/catalog.md +0 -435
  114. package/doc/plans/meta-tools/notes.md +0 -192
  115. package/doc/plans/meta-tools/rollout.md +0 -368
  116. package/doc/plans/prompts/README.md +0 -96
  117. package/doc/plans/prompts/user-prompt-ideas.md +0 -147
  118. package/doc/plans/tool-consolidation/notes.md +0 -28
  119. package/doc/plans/tool-consolidation/plan.md +0 -169
  120. package/doc/plans/tool-consolidation/rollout.md +0 -104
  121. package/doc/plans/vice-backend-switch/plan.md +0 -486
  122. package/doc/plans/vice-backend-switch-2/plan.md +0 -48
  123. package/doc/plans/vice-support/notes.md +0 -63
  124. package/doc/plans/vice-support/plan.md +0 -88
  125. package/doc/plans/vice-support/rollout.md +0 -99
  126. package/doc/reviews/audit.md +0 -143
  127. package/doc/reviews/hardening/01-fable/prompt-handover.md +0 -125
  128. package/doc/reviews/hardening/01-fable/prompt.md +0 -98
  129. package/doc/reviews/hardening/01-fable/review-prompt.md +0 -468
  130. package/doc/reviews/hardening/01-fable/review.md +0 -1234
  131. package/doc/reviews/vice-support-review.md +0 -185
  132. package/scripts/compare-rest/rest-compare-2025-11-01T00-25-21-830Z.json +0 -2513
@@ -13,14 +13,17 @@
13
13
  "description": "Selects the operation."
14
14
  },
15
15
  "address": {
16
- "type": "string",
17
- "description": "Start address ($HHHH or decimal)",
16
+ "type": [
17
+ "string",
18
+ "null"
19
+ ],
20
+ "description": "Start address ($HHHH or decimal) Limits depend on op.",
18
21
  "minLength": 1
19
22
  },
20
23
  "length": {
21
24
  "type": "integer",
22
- "description": "Number of bytes to scan",
23
- "minimum": 63,
25
+ "description": "Number of bytes to scan Limits depend on op.",
26
+ "minimum": 1,
24
27
  "maximum": 65536
25
28
  },
26
29
  "stride": {
@@ -103,7 +106,7 @@
103
106
  "string",
104
107
  "null"
105
108
  ],
106
- "description": "File path to write charset binary",
109
+ "description": "File path to write charset binary Limits depend on op.",
107
110
  "minLength": 1
108
111
  },
109
112
  "minNonEmptyChars": {
@@ -199,363 +202,6 @@
199
202
  "required": [
200
203
  "op"
201
204
  ],
202
- "description": "Extraction operations available via the c64_extract tool.\n\nOperations:\n- sprites: Scan RAM for sprites and optionally export .spr files. Required inputs: address, length. Optional inputs: stride, maxSprites, minNonZeroRows, minSetBits, includeBase64, outputDir, pauseDuringRead.\n- charset: Locate and extract 2KB character sets from RAM. Required inputs: none. Optional inputs: address, scanRange, outputPath, pauseDuringRead, minNonEmptyChars, minEntropy.\n- memory_dump: Dump a RAM range to hex or binary files with manifest metadata. Required inputs: address, length, outputPath. Optional inputs: format, chunkSize, pauseDuringRead, retries.\n- fs_stats: Walk the filesystem and aggregate counts/bytes by extension. Required inputs: none. Optional inputs: root, extensions, includeContainers, maxSamplesPerExtension.\n- firmware_health: Run firmware readiness checks and report status metrics. Required inputs: none.",
203
- "additionalProperties": false,
204
- "x-c64bridge-operations": [
205
- {
206
- "op": "sprites",
207
- "description": "Scan RAM for sprites and optionally export .spr files.",
208
- "required": [
209
- "address",
210
- "length"
211
- ],
212
- "optional": [
213
- "stride",
214
- "maxSprites",
215
- "minNonZeroRows",
216
- "minSetBits",
217
- "includeBase64",
218
- "outputDir",
219
- "pauseDuringRead"
220
- ],
221
- "inputSchema": {
222
- "type": "object",
223
- "description": "Scan RAM for sprites and optionally export .spr files.",
224
- "properties": {
225
- "address": {
226
- "type": "string",
227
- "description": "Start address ($HHHH or decimal)",
228
- "minLength": 1
229
- },
230
- "length": {
231
- "type": "integer",
232
- "description": "Number of bytes to scan",
233
- "minimum": 63,
234
- "maximum": 65536
235
- },
236
- "stride": {
237
- "type": [
238
- "integer",
239
- "null"
240
- ],
241
- "description": "Stride between sprite candidates in bytes",
242
- "minimum": 1,
243
- "default": 64
244
- },
245
- "maxSprites": {
246
- "type": [
247
- "integer",
248
- "null"
249
- ],
250
- "description": "Maximum sprites to return",
251
- "minimum": 1,
252
- "maximum": 256,
253
- "default": 16
254
- },
255
- "minNonZeroRows": {
256
- "type": [
257
- "integer",
258
- "null"
259
- ],
260
- "description": "Minimum non-empty rows required",
261
- "minimum": 1,
262
- "maximum": 21,
263
- "default": 4
264
- },
265
- "minSetBits": {
266
- "type": [
267
- "integer",
268
- "null"
269
- ],
270
- "description": "Minimum number of set bits required",
271
- "minimum": 1,
272
- "maximum": 504,
273
- "default": 12
274
- },
275
- "includeBase64": {
276
- "type": [
277
- "boolean",
278
- "null"
279
- ],
280
- "description": "Include base64 data in response",
281
- "default": true
282
- },
283
- "outputDir": {
284
- "type": [
285
- "string",
286
- "null"
287
- ],
288
- "description": "Directory to write .spr files",
289
- "minLength": 1
290
- },
291
- "pauseDuringRead": {
292
- "type": [
293
- "boolean",
294
- "null"
295
- ],
296
- "description": "Pause the machine during memory read",
297
- "default": true
298
- },
299
- "op": {
300
- "const": "sprites"
301
- }
302
- },
303
- "required": [
304
- "address",
305
- "length",
306
- "op"
307
- ],
308
- "additionalProperties": false
309
- }
310
- },
311
- {
312
- "op": "charset",
313
- "description": "Locate and extract 2KB character sets from RAM.",
314
- "required": [],
315
- "optional": [
316
- "address",
317
- "scanRange",
318
- "outputPath",
319
- "pauseDuringRead",
320
- "minNonEmptyChars",
321
- "minEntropy"
322
- ],
323
- "inputSchema": {
324
- "type": "object",
325
- "description": "Locate and extract 2KB character sets from RAM.",
326
- "properties": {
327
- "address": {
328
- "type": [
329
- "string",
330
- "null"
331
- ],
332
- "description": "Start address to scan ($HHHH or decimal). If not provided, scans common locations.",
333
- "minLength": 1
334
- },
335
- "scanRange": {
336
- "type": [
337
- "string",
338
- "null"
339
- ],
340
- "description": "Range to scan if address not provided: 'common' or 'full'",
341
- "enum": [
342
- "common",
343
- "full"
344
- ],
345
- "default": "common"
346
- },
347
- "outputPath": {
348
- "type": [
349
- "string",
350
- "null"
351
- ],
352
- "description": "File path to write charset binary",
353
- "minLength": 1
354
- },
355
- "pauseDuringRead": {
356
- "type": [
357
- "boolean",
358
- "null"
359
- ],
360
- "description": "Pause the machine during memory read",
361
- "default": true
362
- },
363
- "minNonEmptyChars": {
364
- "type": [
365
- "integer",
366
- "null"
367
- ],
368
- "description": "Minimum non-empty characters required",
369
- "minimum": 1,
370
- "maximum": 256,
371
- "default": 32
372
- },
373
- "minEntropy": {
374
- "type": [
375
- "number",
376
- "null"
377
- ],
378
- "description": "Minimum average entropy threshold",
379
- "minimum": 0,
380
- "maximum": 1,
381
- "default": 0.3
382
- },
383
- "op": {
384
- "const": "charset"
385
- }
386
- },
387
- "additionalProperties": false,
388
- "required": [
389
- "op"
390
- ]
391
- }
392
- },
393
- {
394
- "op": "memory_dump",
395
- "description": "Dump a RAM range to hex or binary files with manifest metadata.",
396
- "required": [
397
- "address",
398
- "length",
399
- "outputPath"
400
- ],
401
- "optional": [
402
- "format",
403
- "chunkSize",
404
- "pauseDuringRead",
405
- "retries"
406
- ],
407
- "inputSchema": {
408
- "type": "object",
409
- "description": "Dump a RAM range to hex or binary files with manifest metadata.",
410
- "properties": {
411
- "address": {
412
- "type": "string",
413
- "description": "Start address ($HHHH or decimal)",
414
- "minLength": 1
415
- },
416
- "length": {
417
- "type": "integer",
418
- "description": "Number of bytes to dump",
419
- "minimum": 1,
420
- "maximum": 65536
421
- },
422
- "outputPath": {
423
- "type": "string",
424
- "description": "Destination file path",
425
- "minLength": 1
426
- },
427
- "format": {
428
- "type": [
429
- "string",
430
- "null"
431
- ],
432
- "description": "Output format: hex|binary",
433
- "enum": [
434
- "hex",
435
- "binary"
436
- ],
437
- "default": "hex"
438
- },
439
- "chunkSize": {
440
- "type": [
441
- "integer",
442
- "null"
443
- ],
444
- "description": "Chunk size for reads",
445
- "minimum": 1,
446
- "maximum": 4096,
447
- "default": 512
448
- },
449
- "pauseDuringRead": {
450
- "type": [
451
- "boolean",
452
- "null"
453
- ],
454
- "description": "Pause/resume around dump",
455
- "default": true
456
- },
457
- "retries": {
458
- "type": [
459
- "integer",
460
- "null"
461
- ],
462
- "description": "Retries per chunk on failure",
463
- "minimum": 0,
464
- "default": 1
465
- },
466
- "op": {
467
- "const": "memory_dump"
468
- }
469
- },
470
- "required": [
471
- "address",
472
- "length",
473
- "outputPath",
474
- "op"
475
- ],
476
- "additionalProperties": false
477
- }
478
- },
479
- {
480
- "op": "fs_stats",
481
- "description": "Walk the filesystem and aggregate counts/bytes by extension.",
482
- "required": [],
483
- "optional": [
484
- "root",
485
- "extensions",
486
- "includeContainers",
487
- "maxSamplesPerExtension"
488
- ],
489
- "inputSchema": {
490
- "type": "object",
491
- "description": "Walk the filesystem and aggregate counts/bytes by extension.",
492
- "properties": {
493
- "root": {
494
- "type": [
495
- "string",
496
- "null"
497
- ],
498
- "description": "Root path to scan",
499
- "minLength": 1,
500
- "default": "/"
501
- },
502
- "extensions": {
503
- "type": [
504
- "array",
505
- "null"
506
- ],
507
- "items": {
508
- "type": "string",
509
- "description": "Limit to these extensions (without dot)",
510
- "minLength": 1
511
- }
512
- },
513
- "includeContainers": {
514
- "type": [
515
- "boolean",
516
- "null"
517
- ],
518
- "description": "Include container images (d64/d81/etc.) in extension stats",
519
- "default": true
520
- },
521
- "maxSamplesPerExtension": {
522
- "type": [
523
- "integer",
524
- "null"
525
- ],
526
- "description": "Number of sample paths to keep per extension",
527
- "minimum": 1,
528
- "maximum": 10,
529
- "default": 3
530
- },
531
- "op": {
532
- "const": "fs_stats"
533
- }
534
- },
535
- "additionalProperties": false,
536
- "required": [
537
- "op"
538
- ]
539
- }
540
- },
541
- {
542
- "op": "firmware_health",
543
- "description": "Run firmware readiness checks and report status metrics.",
544
- "required": [],
545
- "optional": [],
546
- "inputSchema": {
547
- "type": "object",
548
- "description": "Run firmware readiness checks and report status metrics.",
549
- "properties": {
550
- "op": {
551
- "const": "firmware_health"
552
- }
553
- },
554
- "additionalProperties": false,
555
- "required": [
556
- "op"
557
- ]
558
- }
559
- }
560
- ]
205
+ "description": "Extraction operations available via the c64_extract tool.\n\nOperations:\n- sprites [write]: Scan RAM for sprites and optionally export .spr files. Required inputs: address, length. Optional inputs: stride, maxSprites, minNonZeroRows, minSetBits, includeBase64, outputDir, pauseDuringRead.\n- charset [write]: Locate and extract 2KB character sets from RAM. Required inputs: none. Optional inputs: address, scanRange, outputPath, pauseDuringRead, minNonEmptyChars, minEntropy.\n- memory_dump [write]: Dump a RAM range to hex or binary files with manifest metadata. Required inputs: address, length, outputPath. Optional inputs: format, chunkSize, pauseDuringRead, retries.\n- fs_stats [c64u, u2]: Walk the filesystem and aggregate counts/bytes by extension. Required inputs: none. Optional inputs: root, extensions, includeContainers, maxSamplesPerExtension.\n- firmware_health: Run firmware readiness checks and report status metrics. Required inputs: none.",
206
+ "additionalProperties": false
561
207
  }