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
@@ -397,9 +397,9 @@ export const audioModule = defineToolModule({
397
397
  domain: "audio",
398
398
  summary: "SID composition, playback, and audio analysis workflows.",
399
399
  resources: [
400
- "c64://specs/sid",
401
- "c64://specs/sidwave",
402
- "c64://docs/sid/file-structure",
400
+ "c64://sound/sid/spec",
401
+ "c64://sound/sidwave/spec",
402
+ "c64://sound/sid/file-format",
403
403
  ],
404
404
  prompts: ["sid-music"],
405
405
  defaultTags: ["sid", "audio"],
@@ -411,7 +411,7 @@ export const audioModule = defineToolModule({
411
411
  tools: [
412
412
  {
413
413
  name: "sid_volume",
414
- description: "Set the SID master volume register at $D418. See c64://specs/sid.",
414
+ description: "Set the SID master volume register at $D418. See c64://sound/sid/spec.",
415
415
  summary: "Clamps the requested volume and writes it to the SID master volume register.",
416
416
  inputSchema: sidVolumeArgsSchema.jsonSchema,
417
417
  tags: ["sid", "control"],
@@ -496,7 +496,7 @@ export const audioModule = defineToolModule({
496
496
  },
497
497
  {
498
498
  name: "sid_note_on",
499
- description: "Trigger a SID voice with configurable waveform, pulse width, and ADSR envelope. See c64://specs/sid.",
499
+ description: "Trigger a SID voice with configurable waveform, pulse width, and ADSR envelope. See c64://sound/sid/spec.",
500
500
  summary: "Resolves note or frequency, clamps parameters, and writes the SID voice registers.",
501
501
  inputSchema: sidNoteOnArgsSchema.jsonSchema,
502
502
  tags: ["sid", "control", "music", "pal-ntsc"],
@@ -700,7 +700,7 @@ export const audioModule = defineToolModule({
700
700
  description: "Play a SID file stored on the Ultimate filesystem via the firmware player.",
701
701
  summary: "Instructs the SID player to load the given file and optional song number.",
702
702
  inputSchema: sidplayFileArgsSchema.jsonSchema,
703
- relatedResources: ["c64://specs/sid"],
703
+ relatedResources: ["c64://sound/sid/spec"],
704
704
  tags: ["sid", "playback"],
705
705
  prerequisites: ["drives_list"],
706
706
  examples: [
@@ -740,7 +740,7 @@ export const audioModule = defineToolModule({
740
740
  description: "Play a MOD tracker module stored on the Ultimate filesystem.",
741
741
  summary: "Sends the module to the Ultimate SID player and starts playback.",
742
742
  inputSchema: modplayFileArgsSchema.jsonSchema,
743
- relatedResources: ["c64://specs/sid"],
743
+ relatedResources: ["c64://sound/sid/spec"],
744
744
  tags: ["sid", "playback"],
745
745
  prerequisites: ["drives_list"],
746
746
  examples: [
@@ -780,7 +780,7 @@ export const audioModule = defineToolModule({
780
780
  summary: "Builds a note timeline from semitone offsets and triggers SID playback asynchronously.",
781
781
  lifecycle: "fire-and-forget",
782
782
  inputSchema: musicGenerateArgsSchema.jsonSchema,
783
- relatedResources: ["c64://specs/sid"],
783
+ relatedResources: ["c64://sound/sid/spec"],
784
784
  relatedPrompts: ["sid-music"],
785
785
  tags: ["sid", "music", "generator", "pal-ntsc"],
786
786
  prerequisites: ["sid_volume"],
@@ -862,7 +862,7 @@ export const audioModule = defineToolModule({
862
862
  description: "Compile a SIDWAVE composition to PRG or SID and optionally play it immediately.",
863
863
  summary: "Parses SIDWAVE/CPG input, compiles to a PRG, and plays via PRG or SID attachment.",
864
864
  inputSchema: musicCompileArgsSchema.jsonSchema,
865
- relatedResources: ["c64://specs/sid", "c64://specs/sidwave", "c64://docs/sid/file-structure"],
865
+ relatedResources: ["c64://sound/sid/spec", "c64://sound/sidwave/spec", "c64://sound/sid/file-format"],
866
866
  relatedPrompts: ["sid-music"],
867
867
  tags: ["sid", "music", "compiler"],
868
868
  prerequisites: [],
@@ -945,7 +945,7 @@ export const audioModule = defineToolModule({
945
945
  description: "Record audio from the default input device and analyze SID playback characteristics.",
946
946
  summary: "Captures PCM data, extracts notes, tempo, and deviation metrics for SID verification workflows.",
947
947
  inputSchema: recordAndAnalyzeArgsSchema.jsonSchema,
948
- relatedResources: ["c64://specs/sid", "c64://docs/sid/file-structure"],
948
+ relatedResources: ["c64://sound/sid/spec", "c64://sound/sid/file-format"],
949
949
  relatedPrompts: ["sid-music"],
950
950
  tags: ["sid", "analysis"],
951
951
  prerequisites: [],
@@ -985,7 +985,7 @@ export const audioModule = defineToolModule({
985
985
  description: "Automatically analyze SID playback when the user requests verification feedback.",
986
986
  summary: "Detects verification intent in natural language, records a short clip, and returns musical feedback.",
987
987
  inputSchema: analyzeAudioArgsSchema.jsonSchema,
988
- relatedResources: ["c64://specs/sid", "c64://docs/sid/file-structure"],
988
+ relatedResources: ["c64://sound/sid/spec", "c64://sound/sid/file-format"],
989
989
  relatedPrompts: ["sid-music"],
990
990
  tags: ["sid", "analysis"],
991
991
  prerequisites: [],
@@ -350,7 +350,7 @@ const debugOperationDispatcher = createOperationDispatcher("c64_debug", debugOpe
350
350
  export const debugModuleGroup = defineToolModule({
351
351
  domain: "debug",
352
352
  summary: "VICE Binary Monitor debugger operations (breakpoints, registers, stepping).",
353
- resources: ["c64://specs/assembly", "c64://specs/memory-map"],
353
+ resources: ["c64://assembly/6510-spec", "c64://memory/map"],
354
354
  prompts: ["assembly-program", "memory-debug"],
355
355
  defaultTags: ["debug", "vice"],
356
356
  workflowHints: [
@@ -123,8 +123,8 @@ export const developerModule = defineToolModule({
123
123
  domain: "developer",
124
124
  summary: "Configuration management, diagnostics, and helper utilities for advanced workflows.",
125
125
  resources: [
126
- "c64://context/bootstrap",
127
- "c64://docs/index",
126
+ "c64://guide/bootstrap",
127
+ "c64://guide/index",
128
128
  ],
129
129
  prompts: ["memory-debug"],
130
130
  defaultTags: ["developer", "config", "debug"],
@@ -138,7 +138,7 @@ export const developerModule = defineToolModule({
138
138
  description: "List configuration categories available on the Ultimate firmware.",
139
139
  summary: "Fetches the configuration tree and returns firmware-reported categories.",
140
140
  inputSchema: noArgsSchema.jsonSchema,
141
- relatedResources: ["c64://context/bootstrap"],
141
+ relatedResources: ["c64://guide/bootstrap"],
142
142
  tags: ["config", "list"],
143
143
  examples: [
144
144
  { name: "List configs", description: "Enumerate configuration categories", arguments: {} },
@@ -173,7 +173,7 @@ export const developerModule = defineToolModule({
173
173
  description: "Read a configuration category or specific item.",
174
174
  summary: "Returns firmware configuration data for the selected category (and item).",
175
175
  inputSchema: configGetArgsSchema.jsonSchema,
176
- relatedResources: ["c64://context/bootstrap"],
176
+ relatedResources: ["c64://guide/bootstrap"],
177
177
  tags: ["config", "read"],
178
178
  examples: [
179
179
  { name: "Get audio config", description: "Read audio category", arguments: { category: "Audio" } },
@@ -210,7 +210,7 @@ export const developerModule = defineToolModule({
210
210
  description: "Set a configuration value within a category.",
211
211
  summary: "Writes a primitive value to a specific configuration item via firmware APIs.",
212
212
  inputSchema: configSetArgsSchema.jsonSchema,
213
- relatedResources: ["c64://context/bootstrap"],
213
+ relatedResources: ["c64://guide/bootstrap"],
214
214
  tags: ["config", "write"],
215
215
  examples: [
216
216
  { name: "Set volume", description: "Adjust audio volume", arguments: { category: "Audio", item: "Volume", value: 75 } },
@@ -254,7 +254,7 @@ export const developerModule = defineToolModule({
254
254
  description: "Apply multiple configuration changes in a single request.",
255
255
  summary: "Sends a nested object of category/item values to the firmware batch endpoint.",
256
256
  inputSchema: configBatchSchema.jsonSchema,
257
- relatedResources: ["c64://context/bootstrap"],
257
+ relatedResources: ["c64://guide/bootstrap"],
258
258
  tags: ["config", "write"],
259
259
  examples: [
260
260
  { name: "Batch update", description: "Update multiple settings", arguments: { Audio: { Volume: 80, DACMode: "stereo" } } },
@@ -298,7 +298,7 @@ export const developerModule = defineToolModule({
298
298
  description: "Load configuration settings from flash storage.",
299
299
  summary: "Restores the firmware configuration by reading the persisted flash snapshot.",
300
300
  inputSchema: noArgsSchema.jsonSchema,
301
- relatedResources: ["c64://context/bootstrap"],
301
+ relatedResources: ["c64://guide/bootstrap"],
302
302
  tags: ["config", "flash"],
303
303
  examples: [
304
304
  { name: "Load from flash", description: "Restore saved configuration", arguments: {} },
@@ -334,7 +334,7 @@ export const developerModule = defineToolModule({
334
334
  description: "Persist current configuration settings to flash storage.",
335
335
  summary: "Saves the active configuration snapshot so it survives power cycles.",
336
336
  inputSchema: noArgsSchema.jsonSchema,
337
- relatedResources: ["c64://context/bootstrap"],
337
+ relatedResources: ["c64://guide/bootstrap"],
338
338
  tags: ["config", "flash"],
339
339
  examples: [
340
340
  { name: "Save to flash", description: "Persist current config", arguments: {} },
@@ -370,7 +370,7 @@ export const developerModule = defineToolModule({
370
370
  description: "Reset configuration categories to their factory defaults.",
371
371
  summary: "Instructs the firmware to discard overrides and restore default configuration values.",
372
372
  inputSchema: noArgsSchema.jsonSchema,
373
- relatedResources: ["c64://context/bootstrap"],
373
+ relatedResources: ["c64://guide/bootstrap"],
374
374
  tags: ["config", "reset"],
375
375
  examples: [
376
376
  { name: "Reset config", description: "Restore factory defaults", arguments: {} },
@@ -407,7 +407,7 @@ export const developerModule = defineToolModule({
407
407
  summary: "Calls the firmware version endpoint (Ultimate) or returns emulator info (VICE).",
408
408
  supportedPlatforms: ["c64u", "vice"],
409
409
  inputSchema: noArgsSchema.jsonSchema,
410
- relatedResources: ["c64://context/bootstrap"],
410
+ relatedResources: ["c64://guide/bootstrap"],
411
411
  tags: ["diagnostics", "version"],
412
412
  examples: [
413
413
  { name: "Get version", description: "Check firmware version", arguments: {} },
@@ -439,7 +439,7 @@ export const developerModule = defineToolModule({
439
439
  summary: "Returns the diagnostics payload reported by the firmware (Ultimate) or emulator (VICE).",
440
440
  supportedPlatforms: ["c64u", "vice"],
441
441
  inputSchema: noArgsSchema.jsonSchema,
442
- relatedResources: ["c64://context/bootstrap"],
442
+ relatedResources: ["c64://guide/bootstrap"],
443
443
  tags: ["diagnostics", "info"],
444
444
  examples: [
445
445
  { name: "Get hardware info", description: "Query hardware status", arguments: {} },
@@ -470,7 +470,7 @@ export const developerModule = defineToolModule({
470
470
  description: "Read the Ultimate debug register ($D7FF).",
471
471
  summary: "Returns the current hex value stored in the debug register.",
472
472
  inputSchema: noArgsSchema.jsonSchema,
473
- relatedResources: ["c64://context/bootstrap"],
473
+ relatedResources: ["c64://guide/bootstrap"],
474
474
  tags: ["debug"],
475
475
  examples: [
476
476
  { name: "Read debug register", description: "Check $D7FF value", arguments: {} },
@@ -509,7 +509,7 @@ export const developerModule = defineToolModule({
509
509
  description: "Write a value into the Ultimate debug register ($D7FF).",
510
510
  summary: "Validates the hex input and forwards it to the firmware.",
511
511
  inputSchema: debugWriteArgsSchema.jsonSchema,
512
- relatedResources: ["c64://context/bootstrap"],
512
+ relatedResources: ["c64://guide/bootstrap"],
513
513
  tags: ["debug"],
514
514
  examples: [
515
515
  { name: "Write debug register", description: "Set $D7FF to $42", arguments: { value: "42" } },
@@ -546,9 +546,9 @@ export const graphicsModule = defineToolModule({
546
546
  domain: "graphics",
547
547
  summary: "PETSCII art, sprite workflows, and VIC-II graphics helpers.",
548
548
  resources: [
549
- "c64://specs/vic",
550
- "c64://specs/assembly",
551
- "c64://specs/basic",
549
+ "c64://graphics/vic/spec",
550
+ "c64://assembly/6510-spec",
551
+ "c64://basic/spec",
552
552
  ],
553
553
  prompts: ["graphics-demo", "basic-program", "assembly-program"],
554
554
  defaultTags: ["graphics", "vic"],
@@ -559,10 +559,10 @@ export const graphicsModule = defineToolModule({
559
559
  tools: [
560
560
  {
561
561
  name: "render_sprite",
562
- description: "Display supplied 63-byte sprite data at the requested position and colour by writing memory and patching VIC-II registers directly. See c64://specs/vic for registers.",
562
+ description: "Display supplied 63-byte sprite data at the requested position and colour by writing memory and patching VIC-II registers directly. See c64://graphics/vic/spec for registers.",
563
563
  summary: "Writes sprite data into RAM, updates the sprite pointer table, and patches VIC-II registers to render a sprite preview.",
564
564
  inputSchema: spriteArgsSchema.jsonSchema,
565
- relatedResources: ["c64://specs/vic"],
565
+ relatedResources: ["c64://graphics/vic/spec"],
566
566
  relatedPrompts: ["graphics-demo", "assembly-program"],
567
567
  tags: ["sprite", "assembly", "pal-ntsc"],
568
568
  prerequisites: ["upload_run_asm"],
@@ -587,7 +587,7 @@ export const graphicsModule = defineToolModule({
587
587
  description: "Import an image file, convert it to a VIC-II bitmap, write it into RAM, and display it.",
588
588
  summary: "Decodes a source image, quantizes it into C64 colours, writes bitmap/screen/color RAM, and displays it in hires or multicolor bitmap mode.",
589
589
  inputSchema: generateBitmapArgsSchema.jsonSchema,
590
- relatedResources: ["c64://specs/vic", "c64://context/bootstrap"],
590
+ relatedResources: ["c64://graphics/vic/spec", "c64://guide/bootstrap"],
591
591
  relatedPrompts: ["graphics-demo"],
592
592
  tags: ["bitmap", "vic", "image"],
593
593
  workflowHints: [
@@ -601,10 +601,10 @@ export const graphicsModule = defineToolModule({
601
601
  },
602
602
  {
603
603
  name: "render_petscii_text",
604
- description: "Display PETSCII text with optional border and background colours. See c64://specs/basic.",
604
+ description: "Display PETSCII text with optional border and background colours. See c64://basic/spec.",
605
605
  summary: "Generates a BASIC program that clears the screen, sets colours, and prints text.",
606
606
  inputSchema: renderPetsciiScreenArgsSchema.jsonSchema,
607
- relatedResources: ["c64://specs/basic", "c64://context/bootstrap"],
607
+ relatedResources: ["c64://basic/spec", "c64://guide/bootstrap"],
608
608
  relatedPrompts: ["basic-program", "graphics-demo"],
609
609
  tags: ["basic", "screen"],
610
610
  prerequisites: ["upload_run_basic"],
@@ -626,10 +626,10 @@ export const graphicsModule = defineToolModule({
626
626
  },
627
627
  {
628
628
  name: "render_petscii_art",
629
- description: "Create PETSCII art from prompts, text, or bitmap input, and optionally display it on the C64. Returns metadata including PETSCII codes and glyphs. See c64://specs/basic, c64://specs/vic, and c64://specs/charset.",
629
+ description: "Create PETSCII art from prompts, text, or bitmap input, and optionally display it on the C64. Returns metadata including PETSCII codes and glyphs. See c64://basic/spec, c64://graphics/vic/spec, and c64://graphics/character-set.",
630
630
  summary: "Synthesises PETSCII art, generates a BASIC program with preview metadata (petsciiCodes, glyphs, dimensions), and uploads it unless dry-run is requested.",
631
631
  inputSchema: petsciiImageArgsSchema.jsonSchema,
632
- relatedResources: ["c64://specs/basic", "c64://specs/vic", "c64://specs/charset"],
632
+ relatedResources: ["c64://basic/spec", "c64://graphics/vic/spec", "c64://graphics/character-set"],
633
633
  relatedPrompts: ["graphics-demo", "basic-program"],
634
634
  tags: ["petscii", "basic", "pal-ntsc"],
635
635
  prerequisites: ["upload_run_basic"],
@@ -33,7 +33,7 @@ const menuButtonArgsSchema = createNoArgsSchema("No arguments required to toggle
33
33
  export const machineControlModule = defineToolModule({
34
34
  domain: "machine",
35
35
  summary: "Power, reset, pause/resume, and diagnostic controls for the C64 and Ultimate hardware.",
36
- resources: ["c64://context/bootstrap"],
36
+ resources: ["c64://guide/bootstrap"],
37
37
  prompts: ["memory-debug"],
38
38
  defaultTags: ["machine", "control"],
39
39
  workflowHints: [
@@ -43,7 +43,7 @@ export const machineControlModule = defineToolModule({
43
43
  tools: [
44
44
  {
45
45
  name: "reset_c64",
46
- description: "Reset the C64 via Ultimate firmware. Review c64://context/bootstrap safety rules.",
46
+ description: "Reset the C64 via Ultimate firmware. Review c64://guide/bootstrap safety rules.",
47
47
  summary: "Issues a soft reset, equivalent to power cycling without cutting power.",
48
48
  inputSchema: resetArgsSchema.jsonSchema,
49
49
  tags: ["reset"],
@@ -81,7 +81,7 @@ export const machineControlModule = defineToolModule({
81
81
  },
82
82
  {
83
83
  name: "reboot_c64",
84
- description: "Reboot the Ultimate firmware and C64. See c64://context/bootstrap.",
84
+ description: "Reboot the Ultimate firmware and C64. See c64://guide/bootstrap.",
85
85
  summary: "Triggers a firmware reboot, useful after configuration changes.",
86
86
  inputSchema: rebootArgsSchema.jsonSchema,
87
87
  tags: ["reboot"],
@@ -119,7 +119,7 @@ export const machineControlModule = defineToolModule({
119
119
  },
120
120
  {
121
121
  name: "pause",
122
- description: "Pause the machine on Ultimate hardware. See memory safety checklist in c64://context/bootstrap.",
122
+ description: "Pause the machine on Ultimate hardware. See memory safety checklist in c64://guide/bootstrap.",
123
123
  summary: "Suspends CPU execution on Ultimate hardware until resumed.",
124
124
  inputSchema: pauseArgsSchema.jsonSchema,
125
125
  tags: ["pause"],
@@ -195,7 +195,7 @@ export const machineControlModule = defineToolModule({
195
195
  },
196
196
  {
197
197
  name: "poweroff",
198
- description: "Power off the machine via Ultimate firmware. See safety notes in c64://context/bootstrap.",
198
+ description: "Power off the machine via Ultimate firmware. See safety notes in c64://guide/bootstrap.",
199
199
  summary: "Attempts a controlled shutdown through the Ultimate control interface.",
200
200
  inputSchema: poweroffArgsSchema.jsonSchema,
201
201
  tags: ["power"],
@@ -171,13 +171,21 @@ async function executeReadMemory(rawArgs, ctx) {
171
171
  const detailRecord = toRecord(result.details) ?? {};
172
172
  const resolvedAddress = resolveAddressLabel(detailRecord, parsed.address);
173
173
  const resolvedLength = resolveLength(detailRecord) ?? parsed.length;
174
- return textResult(`Read ${resolvedLength} bytes starting at ${resolvedAddress}.`, {
174
+ const data = {
175
175
  success: true,
176
176
  address: resolvedAddress,
177
177
  length: resolvedLength,
178
178
  hexData: result.data ?? null,
179
179
  details: detailRecord,
180
- });
180
+ };
181
+ const base = textResult(`Read ${resolvedLength} bytes starting at ${resolvedAddress}.`, data);
182
+ return {
183
+ ...base,
184
+ structuredContent: {
185
+ type: "json",
186
+ data,
187
+ },
188
+ };
181
189
  }
182
190
  catch (error) {
183
191
  if (error instanceof ToolError) {
@@ -354,9 +362,9 @@ export const memoryModule = defineToolModule({
354
362
  summary: "Screen, main memory, and low-level inspection utilities.",
355
363
  supportedPlatforms: ["c64u", "vice"],
356
364
  resources: [
357
- "c64://context/bootstrap",
358
- "c64://specs/basic",
359
- "c64://specs/assembly",
365
+ "c64://guide/bootstrap",
366
+ "c64://basic/spec",
367
+ "c64://assembly/6510-spec",
360
368
  ],
361
369
  prompts: ["memory-debug", "basic-program", "assembly-program"],
362
370
  defaultTags: ["memory", "debug"],
@@ -367,10 +375,10 @@ export const memoryModule = defineToolModule({
367
375
  tools: [
368
376
  {
369
377
  name: "read_screen",
370
- description: "Read the current text screen (40x25) and return its ASCII representation. For PETSCII details, see c64://specs/basic.",
378
+ description: "Read the current text screen (40x25) and return its ASCII representation. For PETSCII details, see c64://basic/spec.",
371
379
  summary: "Fetches screen RAM, converts from PETSCII, and returns the printable output.",
372
380
  inputSchema: readScreenArgsSchema.jsonSchema,
373
- relatedResources: ["c64://context/bootstrap", "c64://specs/basic"],
381
+ relatedResources: ["c64://guide/bootstrap", "c64://basic/spec"],
374
382
  relatedPrompts: ["memory-debug", "basic-program", "assembly-program"],
375
383
  tags: ["screen", "memory"],
376
384
  prerequisites: [],
@@ -390,10 +398,10 @@ export const memoryModule = defineToolModule({
390
398
  },
391
399
  {
392
400
  name: "read",
393
- description: "Read a range of bytes from main memory and return the data as hexadecimal. Consult c64://specs/assembly and docs index.",
401
+ description: "Read a range of bytes from main memory and return the data as hexadecimal. Consult c64://assembly/6510-spec and docs index.",
394
402
  summary: "Resolves symbols, reads memory, and returns a hex dump with addressing metadata.",
395
403
  inputSchema: readMemoryArgsSchema.jsonSchema,
396
- relatedResources: ["c64://context/bootstrap", "c64://specs/assembly", "c64://docs/index"],
404
+ relatedResources: ["c64://guide/bootstrap", "c64://assembly/6510-spec", "c64://guide/index"],
397
405
  relatedPrompts: ["memory-debug", "assembly-program"],
398
406
  tags: ["memory", "hex"],
399
407
  prerequisites: [],
@@ -414,10 +422,10 @@ export const memoryModule = defineToolModule({
414
422
  },
415
423
  {
416
424
  name: "write",
417
- description: "Write a hexadecimal byte sequence into main memory at the specified address. See c64://context/bootstrap for safety rules.",
425
+ description: "Write a hexadecimal byte sequence into main memory at the specified address. See c64://guide/bootstrap for safety rules.",
418
426
  summary: "Resolves symbols, validates hex data, and writes bytes to RAM.",
419
427
  inputSchema: writeMemoryArgsSchema.jsonSchema,
420
- relatedResources: ["c64://context/bootstrap", "c64://specs/assembly", "c64://docs/index"],
428
+ relatedResources: ["c64://guide/bootstrap", "c64://assembly/6510-spec", "c64://guide/index"],
421
429
  relatedPrompts: ["memory-debug", "assembly-program"],
422
430
  tags: ["memory", "hex", "write"],
423
431
  prerequisites: ["read"],
@@ -28,7 +28,7 @@ const allTools = [
28
28
  export const metaModule = defineToolModule({
29
29
  domain: "meta",
30
30
  summary: "High-level meta tools that orchestrate multiple MCP actions.",
31
- resources: ["c64://context/bootstrap", "c64://specs/assembly"],
31
+ resources: ["c64://guide/bootstrap", "c64://assembly/6510-spec"],
32
32
  defaultTags: ["meta", "orchestration", "experimental"],
33
33
  supportedPlatforms: ["c64u", "vice"],
34
34
  workflowHints: [
@@ -227,13 +227,12 @@ export const printerModule = defineToolModule({
227
227
  domain: "printer",
228
228
  summary: "Printer workflow helpers for Commodore MPS and Epson FX devices, including prompt templates.",
229
229
  resources: [
230
- "c64://specs/printer",
231
- "c64://docs/printer/guide",
232
- "c64://docs/printer/commodore-text",
233
- "c64://docs/printer/commodore-bitmap",
234
- "c64://docs/printer/epson-text",
235
- "c64://docs/printer/epson-bitmap",
236
- "c64://docs/printer/prompts",
230
+ "c64://printer/spec",
231
+ "c64://printer/commodore/text",
232
+ "c64://printer/commodore/bitmap",
233
+ "c64://printer/epson/text",
234
+ "c64://printer/epson/bitmap",
235
+ "c64://printer/prompt-guide",
237
236
  ],
238
237
  prompts: ["printer-job"],
239
238
  defaultTags: ["printer"],
@@ -244,10 +243,10 @@ export const printerModule = defineToolModule({
244
243
  tools: [
245
244
  {
246
245
  name: "print_text",
247
- description: "Print text on device 4 using Commodore or Epson workflows. See c64://docs/printer/guide.",
246
+ description: "Print text on device 4 using Commodore or Epson workflows. See c64://printer/spec.",
248
247
  summary: "Generates printer BASIC, opens device 4, prints text, and optionally emits a form feed.",
249
248
  inputSchema: printTextArgsSchema.jsonSchema,
250
- relatedResources: ["c64://docs/printer/guide", "c64://specs/printer"],
249
+ relatedResources: ["c64://printer/spec"],
251
250
  relatedPrompts: ["printer-job"],
252
251
  tags: ["text"],
253
252
  prerequisites: ["upload_run_basic"],
@@ -304,7 +303,7 @@ export const printerModule = defineToolModule({
304
303
  description: "Print a Commodore MPS bit-image row using BIM BASIC helpers.",
305
304
  summary: "Generates BASIC that emits Commodore BIM commands for the provided bitmap columns.",
306
305
  inputSchema: commodoreBitmapArgsSchema.jsonSchema,
307
- relatedResources: ["c64://docs/printer/commodore-bitmap"],
306
+ relatedResources: ["c64://printer/commodore/bitmap"],
308
307
  relatedPrompts: ["printer-job"],
309
308
  tags: ["bitmap", "commodore"],
310
309
  prerequisites: ["upload_run_basic"],
@@ -364,7 +363,7 @@ export const printerModule = defineToolModule({
364
363
  description: "Print an Epson FX bit-image row using ESC/P commands.",
365
364
  summary: "Generates BASIC that emits ESC/P graphics commands for Epson printers.",
366
365
  inputSchema: epsonBitmapArgsSchema.jsonSchema,
367
- relatedResources: ["c64://docs/printer/epson-bitmap"],
366
+ relatedResources: ["c64://printer/epson/bitmap"],
368
367
  relatedPrompts: ["printer-job"],
369
368
  tags: ["bitmap", "epson"],
370
369
  prerequisites: ["upload_run_basic"],
@@ -425,7 +424,7 @@ export const printerModule = defineToolModule({
425
424
  description: "Define custom characters on Commodore MPS printers using DLL mode.",
426
425
  summary: "Uploads custom glyph data (11 columns each) for device 4 DLL mode.",
427
426
  inputSchema: commodoreDllArgsSchema.jsonSchema,
428
- relatedResources: ["c64://docs/printer/commodore-bitmap"],
427
+ relatedResources: ["c64://printer/commodore/bitmap"],
429
428
  relatedPrompts: ["printer-job"],
430
429
  tags: ["dll", "commodore"],
431
430
  prerequisites: ["upload_run_basic"],
@@ -394,7 +394,7 @@ async function executeUploadRunBasic(rawArgs, ctx) {
394
394
  format: "prg",
395
395
  entryAddress,
396
396
  prgSize: prg.length,
397
- resources: ["c64://specs/basic", "c64://context/bootstrap"],
397
+ resources: ["c64://basic/spec", "c64://guide/bootstrap"],
398
398
  ...(screenOutput ? { screen: screenOutput } : {}),
399
399
  ...(autoFixInfo
400
400
  ? {
@@ -460,7 +460,7 @@ async function executeUploadRunAsm(rawArgs, ctx) {
460
460
  format: "prg",
461
461
  entryAddress,
462
462
  prgSize: prg.length,
463
- resources: ["c64://specs/assembly", "c64://context/bootstrap"],
463
+ resources: ["c64://assembly/6510-spec", "c64://guide/bootstrap"],
464
464
  ...(shouldVerify && verified ? { verified: true } : {}),
465
465
  };
466
466
  const base = textResult("Assembly program assembled, uploaded, and executed successfully.", {
@@ -506,7 +506,7 @@ async function executeLoadPrg(rawArgs, ctx) {
506
506
  format: "prg",
507
507
  path: parsed.path,
508
508
  entryAddress: null,
509
- resources: ["c64://context/bootstrap"],
509
+ resources: ["c64://guide/bootstrap"],
510
510
  };
511
511
  const base = textResult(`PRG ${parsed.path} loaded into memory.`, {
512
512
  success: true,
@@ -538,7 +538,7 @@ async function executeRunPrg(rawArgs, ctx) {
538
538
  format: "prg",
539
539
  path: parsed.path,
540
540
  entryAddress: null,
541
- resources: ["c64://context/bootstrap"],
541
+ resources: ["c64://guide/bootstrap"],
542
542
  };
543
543
  const base = textResult(`PRG ${parsed.path} loaded and executed.`, {
544
544
  success: true,
@@ -570,7 +570,7 @@ async function executeRunCrt(rawArgs, ctx) {
570
570
  format: "crt",
571
571
  path: parsed.path,
572
572
  entryAddress: null,
573
- resources: ["c64://context/bootstrap"],
573
+ resources: ["c64://guide/bootstrap"],
574
574
  };
575
575
  const base = textResult(`PRG ${parsed.path} loaded and executed.`, {
576
576
  success: true,
@@ -598,9 +598,9 @@ export const programRunnersModule = defineToolModule({
598
598
  domain: "programs",
599
599
  summary: "Program uploaders, runners, and compilation workflows for BASIC, assembly, and PRG files.",
600
600
  resources: [
601
- "c64://context/bootstrap",
602
- "c64://specs/basic",
603
- "c64://specs/assembly",
601
+ "c64://guide/bootstrap",
602
+ "c64://basic/spec",
603
+ "c64://assembly/6510-spec",
604
604
  ],
605
605
  prompts: ["basic-program", "assembly-program"],
606
606
  defaultTags: ["programs", "execution"],
@@ -611,10 +611,10 @@ export const programRunnersModule = defineToolModule({
611
611
  tools: [
612
612
  {
613
613
  name: "upload_run_basic",
614
- description: "Upload a BASIC program to the C64 and execute it immediately. Refer to c64://specs/basic for syntax and device I/O.",
614
+ description: "Upload a BASIC program to the C64 and execute it immediately. Refer to c64://basic/spec for syntax and device I/O.",
615
615
  summary: "Uploads Commodore BASIC v2 source and runs it via Ultimate 64 firmware.",
616
616
  inputSchema: uploadBasicArgsSchema.jsonSchema,
617
- relatedResources: ["c64://specs/basic", "c64://docs/basic/pitfalls", "c64://context/bootstrap"],
617
+ relatedResources: ["c64://basic/spec", "c64://basic/pitfalls", "c64://guide/bootstrap"],
618
618
  relatedPrompts: ["basic-program"],
619
619
  tags: ["basic", "execution"],
620
620
  prerequisites: ["read_screen"],
@@ -636,10 +636,10 @@ export const programRunnersModule = defineToolModule({
636
636
  },
637
637
  {
638
638
  name: "upload_run_asm",
639
- description: "Assemble 6502/6510 source code, upload the PRG, and run it immediately. See c64://specs/assembly.",
639
+ description: "Assemble 6502/6510 source code, upload the PRG, and run it immediately. See c64://assembly/6510-spec.",
640
640
  summary: "Compiles assembly to a PRG and executes it on the C64 via Ultimate 64 firmware.",
641
641
  inputSchema: uploadAsmArgsSchema.jsonSchema,
642
- relatedResources: ["c64://specs/assembly", "c64://context/bootstrap"],
642
+ relatedResources: ["c64://assembly/6510-spec", "c64://guide/bootstrap"],
643
643
  relatedPrompts: ["assembly-program"],
644
644
  tags: ["assembly", "execution"],
645
645
  prerequisites: ["read_screen"],
@@ -664,7 +664,7 @@ export const programRunnersModule = defineToolModule({
664
664
  description: "Load a PRG into C64 memory without executing it.",
665
665
  summary: "Instructs the Ultimate firmware to transfer a PRG into memory without RUN.",
666
666
  inputSchema: prgFileArgsSchema.jsonSchema,
667
- relatedResources: ["c64://context/bootstrap"],
667
+ relatedResources: ["c64://guide/bootstrap"],
668
668
  tags: ["programs", "file"],
669
669
  prerequisites: ["drives_list"],
670
670
  examples: [
@@ -688,7 +688,7 @@ export const programRunnersModule = defineToolModule({
688
688
  description: "Run a PRG located on the Ultimate filesystem without uploading source.",
689
689
  summary: "Loads and executes a PRG file residing on attached storage.",
690
690
  inputSchema: prgFileArgsSchema.jsonSchema,
691
- relatedResources: ["c64://context/bootstrap"],
691
+ relatedResources: ["c64://guide/bootstrap"],
692
692
  tags: ["programs", "execution", "file"],
693
693
  workflowHints: [
694
694
  "Call when the user provides a PRG path and expects immediate execution without compiling.",
@@ -712,7 +712,7 @@ export const programRunnersModule = defineToolModule({
712
712
  description: "Run a cartridge image stored on the Ultimate filesystem.",
713
713
  summary: "Mounts and autostarts the specified CRT file through the firmware.",
714
714
  inputSchema: crtFileArgsSchema.jsonSchema,
715
- relatedResources: ["c64://context/bootstrap"],
715
+ relatedResources: ["c64://guide/bootstrap"],
716
716
  tags: ["programs", "cartridge"],
717
717
  workflowHints: [
718
718
  "Use for cartridge images and remind the user that the machine will reset into the CRT.",
@@ -742,7 +742,7 @@ export const programRunnersModule = defineToolModule({
742
742
  format: "crt",
743
743
  path: parsed.path,
744
744
  entryAddress: null,
745
- resources: ["c64://context/bootstrap"],
745
+ resources: ["c64://guide/bootstrap"],
746
746
  };
747
747
  const base = textResult(`CRT ${parsed.path} mounted and started.`, {
748
748
  success: true,
package/dist/tools/rag.js CHANGED
@@ -23,18 +23,18 @@ const ragRetrieveArgsSchema = objectSchema({
23
23
  });
24
24
  function createRagTool(language, options) {
25
25
  const primaryResourceUris = language === "basic"
26
- ? ["c64://specs/basic", "c64://context/bootstrap"]
27
- : ["c64://specs/assembly", "c64://context/bootstrap"];
26
+ ? ["c64://basic/spec", "c64://guide/bootstrap"]
27
+ : ["c64://assembly/6510-spec", "c64://guide/bootstrap"];
28
28
  return {
29
29
  name: language === "basic" ? "rag_retrieve_basic" : "rag_retrieve_asm",
30
30
  description: language === "basic"
31
- ? "Retrieve BASIC references from local knowledge. See c64://specs/basic before coding."
32
- : "Retrieve 6502/6510 assembly references from local knowledge. See c64://specs/assembly.",
31
+ ? "Retrieve BASIC references from local knowledge. See c64://basic/spec before coding."
32
+ : "Retrieve 6502/6510 assembly references from local knowledge. See c64://assembly/6510-spec.",
33
33
  summary: options.summary,
34
34
  inputSchema: ragRetrieveArgsSchema.jsonSchema,
35
35
  relatedResources: language === "basic"
36
- ? ["c64://specs/basic"]
37
- : ["c64://specs/assembly"],
36
+ ? ["c64://basic/spec"]
37
+ : ["c64://assembly/6510-spec"],
38
38
  relatedPrompts: language === "basic"
39
39
  ? ["basic-program"]
40
40
  : ["assembly-program"],
@@ -175,9 +175,9 @@ export const ragModule = defineToolModule({
175
175
  domain: "rag",
176
176
  summary: "Retrieval-augmented generation helpers for BASIC and assembly examples.",
177
177
  resources: [
178
- "c64://specs/basic",
179
- "c64://specs/assembly",
180
- "c64://docs/index",
178
+ "c64://basic/spec",
179
+ "c64://assembly/6510-spec",
180
+ "c64://guide/index",
181
181
  ],
182
182
  prompts: ["basic-program", "assembly-program"],
183
183
  defaultTags: ["rag", "search"],
@@ -151,7 +151,7 @@ const configOperationHandlers = createOperationHandlers(configOperations);
151
151
  export const configModuleGroup = defineToolModule({
152
152
  domain: "config",
153
153
  summary: "Grouped configuration management, diagnostics, and snapshot workflows.",
154
- resources: ["c64://context/bootstrap", "c64://docs/index"],
154
+ resources: ["c64://guide/bootstrap", "c64://guide/index"],
155
155
  prompts: ["memory-debug"],
156
156
  defaultTags: ["config", "diagnostics"],
157
157
  supportedPlatforms: ["c64u", "vice"],