c64bridge 0.7.4 → 0.8.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.
- package/.github/prompts/README.md +14 -4
- package/.github/prompts/assembly-routine-session.prompt.md +9 -9
- package/.github/prompts/basic-program-session.prompt.md +11 -9
- package/.github/prompts/drive-management-session.prompt.md +9 -9
- package/.github/prompts/hello-world-session.prompt.md +17 -0
- package/.github/prompts/petscii-art-session.prompt.md +9 -9
- package/.github/prompts/play-classic-game.prompt.md +9 -9
- package/.github/prompts/pr-converge.prompt.md +13 -0
- package/.github/prompts/sid-music-session.prompt.md +9 -9
- package/AGENTS.md +59 -60
- package/README.md +550 -191
- package/data/assembly/assembly-spec.md +290 -1
- package/data/context/bootstrap.md +26 -2
- package/data/context/fast-paths.md +44 -0
- package/data/graphics/petscii-style-guide.md +6 -2
- package/data/graphics/sprite-charset-best-practices.md +5 -5
- package/dist/.tsbuildinfo +1 -1
- package/dist/c64Client.js +990 -26
- package/dist/config.js +5 -1
- package/dist/device.js +680 -57
- package/dist/diagnostics.js +371 -0
- package/dist/mcp/metadata.js +39 -0
- package/dist/mcp-server.js +170 -20
- package/dist/platform.js +10 -2
- package/dist/prompts/registry.js +166 -309
- package/dist/rag/init.js +37 -1
- package/dist/rag/knowledgeIndex.js +18 -6
- package/dist/rag/rateLimiter.js +2 -2
- package/dist/streamCapture.js +135 -0
- package/dist/tools/audio.js +3 -1
- package/dist/tools/debug.js +470 -0
- package/dist/tools/developer.js +10 -4
- package/dist/tools/graphics.js +183 -17
- package/dist/tools/machineControl.js +11 -5
- package/dist/tools/memory.js +19 -10
- package/dist/tools/meta/audio.js +240 -1
- package/dist/tools/meta/config.js +20 -28
- package/dist/tools/meta/configInventory.js +104 -0
- package/dist/tools/meta/diagnostics.js +45 -2
- package/dist/tools/meta/graphics.js +14 -6
- package/dist/tools/meta/index.js +1 -0
- package/dist/tools/meta/memory.js +20 -6
- package/dist/tools/meta/program.js +473 -0
- package/dist/tools/pollValidator.js +4 -2
- package/dist/tools/programRunners.js +8 -4
- package/dist/tools/registry/config.js +17 -0
- package/dist/tools/registry/disk.js +7 -0
- package/dist/tools/registry/drive.js +3 -0
- package/dist/tools/registry/graphics.js +111 -27
- package/dist/tools/registry/index.js +6 -0
- package/dist/tools/registry/memory.js +1 -0
- package/dist/tools/registry/platform.js +121 -0
- package/dist/tools/registry/program.js +26 -8
- package/dist/tools/registry/sound.js +96 -0
- package/dist/tools/registry/system.js +15 -2
- package/dist/tools/storage.js +1 -0
- package/dist/tools/streaming.js +1 -0
- package/dist/tools/types.js +38 -4
- package/dist/tools/vice.js +160 -0
- package/dist/vicBitmap.js +317 -0
- package/dist/vice/mockServer.js +439 -0
- package/dist/vice/process.js +310 -0
- package/dist/vice/readiness.js +18 -2
- package/dist/vice/viceClient.js +382 -22
- package/doc/developer.md +62 -24
- package/doc/img/backend-switch/hello-c64u.png +0 -0
- package/doc/img/backend-switch/hello-vice-and-c64u.png +0 -0
- package/doc/img/backend-switch/hello-vice.png +0 -0
- package/doc/img/backend-switch/metadata.json +50 -0
- package/doc/plans/vice-backend-switch/plan.md +486 -0
- package/doc/plans/vice-backend-switch-2/plan.md +48 -0
- package/doc/plans/vice-support/notes.md +1 -0
- package/doc/plans/vice-support/plan.md +5 -0
- package/doc/plans/vice-support/rollout.md +23 -17
- package/doc/reviews/vice-support-review.md +185 -0
- package/doc/troubleshooting-mcp.md +35 -6
- package/doc/vice/support-matrix.md +54 -0
- package/mcp/prompts.json +292 -0
- package/mcp/protocol-examples.json +46 -0
- package/mcp/resources.json +940 -0
- package/mcp/schemas/c64_config.schema.json +350 -0
- package/mcp/schemas/c64_debug.schema.json +380 -0
- package/mcp/schemas/c64_disk.schema.json +278 -0
- package/mcp/schemas/c64_drive.schema.json +120 -0
- package/mcp/schemas/c64_extract.schema.json +302 -0
- package/mcp/schemas/c64_graphics.schema.json +333 -0
- package/mcp/schemas/c64_memory.schema.json +155 -0
- package/mcp/schemas/c64_printer.schema.json +218 -0
- package/mcp/schemas/c64_program.schema.json +391 -0
- package/mcp/schemas/c64_rag.schema.json +67 -0
- package/mcp/schemas/c64_select_backend.schema.json +32 -0
- package/mcp/schemas/c64_sound.schema.json +644 -0
- package/mcp/schemas/c64_stream.schema.json +61 -0
- package/mcp/schemas/c64_system.schema.json +227 -0
- package/mcp/schemas/c64_vice.schema.json +63 -0
- package/mcp/server.json +15 -0
- package/mcp/tools.json +4517 -0
- package/mcp.json +83 -9
- package/package.json +8 -3
- package/scripts/capture-backend-switch-screenshots.mjs +276 -0
- package/scripts/generate-mcp-interface.ts +289 -0
- package/scripts/invoke-bun.mjs +67 -21
- package/scripts/mockC64Server.mjs +162 -6
- package/scripts/run-coverage.mjs +284 -0
- package/scripts/run-tests.mjs +95 -39
- package/scripts/run-tests.ts +378 -73
- package/scripts/update-readme.ts +147 -13
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
# VICE Support Review
|
|
2
|
+
|
|
3
|
+
Date: 2026-03-08
|
|
4
|
+
Reviewer: GitHub Copilot
|
|
5
|
+
Scope: PR #103 (`feat/vice`) plus all VICE-related source, grouped tools, tests, docs, generated MCP interface metadata, and CI wiring.
|
|
6
|
+
|
|
7
|
+
## Verdict
|
|
8
|
+
|
|
9
|
+
Not production-ready.
|
|
10
|
+
|
|
11
|
+
The branch introduces useful VICE backend work, but the published MCP compatibility contract is not trustworthy yet. The highest-risk issue is that grouped-tool per-operation platform metadata is not enforced centrally, so several operations declared as c64u-only execute on VICE anyway. That breaks the generated MCP surface, README compatibility tables, and the implied contract relied on by clients and prompts.
|
|
12
|
+
|
|
13
|
+
## Findings
|
|
14
|
+
|
|
15
|
+
### VICE-001: Grouped per-operation platform support is metadata-only, and multiple c64u-only operations execute on VICE anyway
|
|
16
|
+
|
|
17
|
+
- Severity: high
|
|
18
|
+
- Confidence: high
|
|
19
|
+
|
|
20
|
+
Evidence:
|
|
21
|
+
|
|
22
|
+
- `src/tools/types.ts:296` publishes `operationPlatforms` into metadata, but `defineToolModule().invoke()` only checks the merged tool-level platforms at `src/tools/types.ts:316-317`.
|
|
23
|
+
- `src/tools/registry/program.ts:110` declares `load_prg` and `run_crt` as c64u-only, but `src/tools/registry/program.ts:29` and `src/tools/registry/program.ts:47` wire them directly to raw handlers (`groupedProgramHandlers.load_prg` / `run_crt`) instead of routing through `programRunnersModule.invoke()`.
|
|
24
|
+
- The raw handlers themselves do not perform a platform check. `executeLoadPrg()` and `executeRunCrt()` in `src/tools/programRunners.ts:634` and `src/tools/programRunners.ts:701` call the client directly.
|
|
25
|
+
- Runtime probe on VICE using `node --loader ts-node/esm` showed both grouped operations succeed instead of raising `unsupported_platform`:
|
|
26
|
+
|
|
27
|
+
```text
|
|
28
|
+
{"called":"loadPrgFile","path":"//USB0/demo.prg"}
|
|
29
|
+
{"op":"load_prg","isError":false,"error":null,"success":true}
|
|
30
|
+
{"called":"runCrtFile","path":"//USB0/game.crt"}
|
|
31
|
+
{"op":"run_crt","isError":false,"error":null,"success":true}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
- The same pattern exists in other grouped tools:
|
|
35
|
+
- `src/tools/registry/drive.ts:89` marks `load_rom` c64u-only, but `src/tools/storage.ts:454` has no per-tool platform restriction. Runtime probe on VICE succeeded.
|
|
36
|
+
- `src/tools/registry/disk.ts:365` marks `file_info` c64u-only, but `src/tools/storage.ts:542` has no per-tool platform restriction. Runtime probe on VICE succeeded.
|
|
37
|
+
- `src/tools/registry/sound.ts:156-157` marks `play_sid_file` / `play_mod_file` c64u-only, but `src/tools/audio.ts:770` and `src/tools/audio.ts:811` have no per-tool platform restriction. Runtime probe on VICE succeeded.
|
|
38
|
+
|
|
39
|
+
Why this matters:
|
|
40
|
+
|
|
41
|
+
- MCP clients, generated schemas, prompts, and README tables will all believe those operations are unavailable on VICE, while runtime execution may still proceed.
|
|
42
|
+
- The failure mode is especially dangerous because it is silent contract drift, not an obvious exception.
|
|
43
|
+
- The current design makes correctness depend on whether a grouped operation happens to route through a legacy tool that already has its own per-tool platform guard.
|
|
44
|
+
|
|
45
|
+
Recommended fix:
|
|
46
|
+
|
|
47
|
+
- Enforce `operationPlatforms` inside the grouped dispatcher path rather than treating it as documentation-only metadata.
|
|
48
|
+
- Avoid raw handler reuse for grouped operations when the original module-level invocation path is responsible for platform checks.
|
|
49
|
+
- Add explicit grouped-tool tests for every c64u-only operation exposed through grouped tools on the VICE platform.
|
|
50
|
+
|
|
51
|
+
### VICE-002: Capability declarations, implementation, tests, and docs disagree on whether VICE supports drive and storage management
|
|
52
|
+
|
|
53
|
+
- Severity: high
|
|
54
|
+
- Confidence: high
|
|
55
|
+
|
|
56
|
+
Evidence:
|
|
57
|
+
|
|
58
|
+
- `src/platform.ts:31` declares VICE limited by `no-drive-management`.
|
|
59
|
+
- The backend itself still rejects several storage/drive operations on VICE:
|
|
60
|
+
- `src/device.ts:625` rejects `driveLoadRom`
|
|
61
|
+
- `src/device.ts:681` rejects `filesInfo`
|
|
62
|
+
- `src/device.ts:682-685` reject disk-image creation
|
|
63
|
+
- These unsupported backend paths are covered by tests in:
|
|
64
|
+
- `test/device.test.mjs:247` (`driveLoadRom throws unsupported`)
|
|
65
|
+
- `test/device.test.mjs:308` (`filesInfo throws unsupported`)
|
|
66
|
+
- Yet the grouped MCP suite expects success for grouped VICE drive/storage calls that the public compatibility tables mark as unavailable on VICE:
|
|
67
|
+
- `test/suites/mcpServerCallToolSuite.mjs:239` expects `c64_drive` `load_rom` success
|
|
68
|
+
- `test/suites/mcpServerCallToolSuite.mjs:255` expects `c64_disk` `file_info` success
|
|
69
|
+
- README compatibility tables currently mark those operations as unavailable on VICE:
|
|
70
|
+
- `README.md:297` `file_info`
|
|
71
|
+
- `README.md:309` `load_rom`
|
|
72
|
+
|
|
73
|
+
Why this matters:
|
|
74
|
+
|
|
75
|
+
- The codebase currently contains three mutually inconsistent stories:
|
|
76
|
+
1. Platform metadata says VICE has no drive management.
|
|
77
|
+
2. The grouped runtime can still execute selected drive/storage operations on VICE.
|
|
78
|
+
3. The raw backend still rejects a substantial subset of drive/storage operations on VICE.
|
|
79
|
+
- This inconsistency makes it impossible to reason safely about platform parity or to generate correct client behavior.
|
|
80
|
+
|
|
81
|
+
Recommended fix:
|
|
82
|
+
|
|
83
|
+
- Decide whether VICE drive/storage support is a real supported feature or a phase-one experiment.
|
|
84
|
+
- If it is supported, remove the stale `no-drive-management` limitation, align docs, and add real-device coverage.
|
|
85
|
+
- If it is not supported, close the grouped-tool escape hatches and update the tests that currently encode success on VICE.
|
|
86
|
+
|
|
87
|
+
### VICE-003: Real VICE coverage is materially weaker than the published feature surface, and mock-only behavior is being presented as platform support
|
|
88
|
+
|
|
89
|
+
- Severity: medium
|
|
90
|
+
- Confidence: high
|
|
91
|
+
|
|
92
|
+
Evidence:
|
|
93
|
+
|
|
94
|
+
- In `test/device.test.mjs`, the resource-backed drive/config tests only run under `useViceMock`:
|
|
95
|
+
- drive tests are guarded under the mock-only block starting near `test/device.test.mjs:187`
|
|
96
|
+
- config read/write tests are also guarded under the mock-only block starting near `test/device.test.mjs:269`
|
|
97
|
+
- The same file only verifies unsupported behavior for the real-VICE path on several operations (`loadPrgFile`, `runCrtFile`, `sidplayFile`, `driveLoadRom`, `filesInfo`, flash config operations).
|
|
98
|
+
- CI does run both VICE mock tests and VICE device tests (`.github/workflows/build-and-test.yaml:24-31`), but the real-device job does not prove the full grouped feature matrix claimed in README or generated metadata.
|
|
99
|
+
- My targeted existing test run passed cleanly (`70 passed / 0 failed`) even though the grouped-tool contract violations above are real. That means the current suite is not protecting the public grouped MCP surface sufficiently.
|
|
100
|
+
|
|
101
|
+
Why this matters:
|
|
102
|
+
|
|
103
|
+
- The mock server is currently doing more than emulating a thin transport boundary. It is effectively defining platform behavior for features that are not yet validated on real VICE.
|
|
104
|
+
- The branch therefore risks shipping mock-server parity instead of real emulator parity.
|
|
105
|
+
|
|
106
|
+
Recommended fix:
|
|
107
|
+
|
|
108
|
+
- Split the VICE matrix into clearly labeled categories: real-device supported, mock-only experimental, and unsupported.
|
|
109
|
+
- Add grouped-tool regression tests for the actual public MCP operations on VICE, not just backend/facade tests.
|
|
110
|
+
- Avoid advertising VICE support in README/generated tables for operations that have only been validated against the mock server.
|
|
111
|
+
|
|
112
|
+
### VICE-004: The README and generated compatibility surface overstate confidence in VICE support
|
|
113
|
+
|
|
114
|
+
- Severity: medium
|
|
115
|
+
- Confidence: high
|
|
116
|
+
|
|
117
|
+
Evidence:
|
|
118
|
+
|
|
119
|
+
- README currently presents a crisp compatibility matrix for grouped tools, including VICE columns for operations such as:
|
|
120
|
+
- `README.md:367-368` `load_prg`, `run_crt`
|
|
121
|
+
- `README.md:394-395` `play_mod_file`, `play_sid_file`
|
|
122
|
+
- `README.md:297` `file_info`
|
|
123
|
+
- `README.md:309` `load_rom`
|
|
124
|
+
- Because `operationPlatforms` is not authoritative at runtime, the tables are currently descriptive rather than contractual.
|
|
125
|
+
- The generated MCP tool metadata is built from the same source of truth, so this drift is not isolated to the README.
|
|
126
|
+
|
|
127
|
+
Why this matters:
|
|
128
|
+
|
|
129
|
+
- Consumers will treat those tables and generated schemas as API contract, not as aspirational guidance.
|
|
130
|
+
- When the documented matrix diverges from live runtime behavior, automation and prompts become unsafe.
|
|
131
|
+
|
|
132
|
+
Recommended fix:
|
|
133
|
+
|
|
134
|
+
- Treat generated compatibility output as release-blocking and validate it with runtime tests.
|
|
135
|
+
- Do not publish per-operation platform tables until grouped dispatch enforces them.
|
|
136
|
+
|
|
137
|
+
## Validation Performed
|
|
138
|
+
|
|
139
|
+
- Reviewed implementation across `src/device.ts`, `src/vice/viceClient.ts`, `src/vice/process.ts`, `src/vice/readiness.ts`, grouped tool registries, legacy tool modules, docs, CI, and tests.
|
|
140
|
+
- Ran targeted tests:
|
|
141
|
+
|
|
142
|
+
```text
|
|
143
|
+
runTests: test/groupedToolsShims.test.mjs
|
|
144
|
+
runTests: test/programRunnersModule.test.mjs
|
|
145
|
+
runTests: test/device.test.mjs
|
|
146
|
+
Result: 70 passed, 0 failed
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
- Ran targeted runtime probes with `node --loader ts-node/esm` against the checked-out TypeScript sources on platform `vice`.
|
|
150
|
+
- Confirmed that grouped `c64_program.load_prg`, `c64_program.run_crt`, `c64_drive.load_rom`, `c64_disk.file_info`, `c64_sound.play_sid_file`, and `c64_sound.play_mod_file` execute successfully on VICE despite being declared c64u-only in grouped tool metadata.
|
|
151
|
+
|
|
152
|
+
## Coverage Assessment
|
|
153
|
+
|
|
154
|
+
Coverage is not sufficient for the grouped public MCP contract.
|
|
155
|
+
|
|
156
|
+
- Strengths:
|
|
157
|
+
- Core VICE monitor protocol parsing and request/response handling are exercised well.
|
|
158
|
+
- The VICE smoke test covers basic run-and-readiness flow.
|
|
159
|
+
- Some backend unsupported paths are explicitly tested.
|
|
160
|
+
|
|
161
|
+
- Gaps:
|
|
162
|
+
- The grouped MCP operations are not exhaustively tested against their per-operation platform declarations.
|
|
163
|
+
- Real-VICE coverage does not match the feature surface advertised in grouped tool metadata and README.
|
|
164
|
+
- Several regressions are only detectable with end-to-end grouped-tool invocation, not backend-only tests.
|
|
165
|
+
|
|
166
|
+
## Documentation Assessment
|
|
167
|
+
|
|
168
|
+
Documentation is not yet reliable enough for release.
|
|
169
|
+
|
|
170
|
+
- The README compatibility matrix is more precise than the runtime enforcement actually is.
|
|
171
|
+
- `platform.ts` still advertises `no-drive-management` for VICE while grouped docs/tests/runtime partially expose drive operations.
|
|
172
|
+
- The branch needs a single explicit statement of what is supported on real VICE, what is mock-only, and what remains phase-one unsupported.
|
|
173
|
+
|
|
174
|
+
## Duplication and Architectural Fit
|
|
175
|
+
|
|
176
|
+
- The broad `C64Facade` abstraction remains workable, but VICE support is currently split across backend restrictions, grouped metadata, README generation, and mock-server behavior without a single authoritative enforcement point.
|
|
177
|
+
- The highest-value simplification is to move per-operation platform enforcement into one place in grouped dispatch and make documentation generation consume that authoritative runtime rule.
|
|
178
|
+
|
|
179
|
+
## What I Did Not Fully Verify
|
|
180
|
+
|
|
181
|
+
- I did not run the full `npm run test:matrix` or a full build during this review.
|
|
182
|
+
- I did not validate every drive/config resource behavior against a real installed VICE instance.
|
|
183
|
+
- I did not audit every generated file under `mcp/` line-by-line after tracing the metadata source.
|
|
184
|
+
|
|
185
|
+
Those limitations do not change the main verdict because the highest-severity issues were verified directly in source and with targeted runtime probes.
|
|
@@ -8,16 +8,37 @@ Field notes for the stdio-based Model Context Protocol server. Use these checks
|
|
|
8
8
|
# 1. Is the MCP server running?
|
|
9
9
|
ps -ef | grep "c64bridge" | grep -v grep
|
|
10
10
|
|
|
11
|
-
# 2. Do startup logs show the connectivity probe?
|
|
11
|
+
# 2. Do startup logs show the diagnostics file and connectivity probe?
|
|
12
12
|
tail -n20 ~/.c64bridge.log # or the terminal running npm start
|
|
13
13
|
|
|
14
|
-
# 3.
|
|
14
|
+
# 3. Inspect the persistent MCP diagnostics trail
|
|
15
|
+
ls -1t ~/.c64bridge/diagnostics | head
|
|
16
|
+
tail -n50 ~/.c64bridge/diagnostics/<latest-file>.ndjson
|
|
17
|
+
|
|
18
|
+
# 4. Can we reach the configured REST endpoint directly?
|
|
15
19
|
curl -s http://<your-c64-host>/v1/info | jq .version
|
|
16
20
|
|
|
17
|
-
#
|
|
21
|
+
# 5. When using the mock server
|
|
18
22
|
npm test -- --mock
|
|
19
23
|
```
|
|
20
24
|
|
|
25
|
+
## Persistent Diagnostics
|
|
26
|
+
|
|
27
|
+
The MCP server now writes a newline-delimited JSON diagnostics file for each session.
|
|
28
|
+
|
|
29
|
+
- Default location: `~/.c64bridge/diagnostics/`
|
|
30
|
+
- Override location: set `C64BRIDGE_DIAGNOSTICS_DIR=/path/to/dir`
|
|
31
|
+
- Disable only if necessary: set `C64BRIDGE_DISABLE_DIAGNOSTICS=1`
|
|
32
|
+
|
|
33
|
+
Each file records:
|
|
34
|
+
|
|
35
|
+
- MCP startup and readiness
|
|
36
|
+
- tool, prompt, and resource request lifecycle events
|
|
37
|
+
- unhandled rejections, warnings, and uncaught exceptions
|
|
38
|
+
- VICE/Xvfb startup failures with captured stderr and stdout tails
|
|
39
|
+
|
|
40
|
+
When VS Code or Copilot appears to crash, preserve the newest `.ndjson` file before restarting. It is the fastest way to tell whether the MCP server was failing, hanging, or repeatedly restarting.
|
|
41
|
+
|
|
21
42
|
## Common Issues & Fixes
|
|
22
43
|
|
|
23
44
|
### 1. Server Starts Without Connectivity Logs
|
|
@@ -47,6 +68,13 @@ npm test -- --mock
|
|
|
47
68
|
2. Verify the settings JSON matches the snippet in `AGENTS.md` (`command`, `args`, `type: "stdio"`).
|
|
48
69
|
3. Keep `npm start` (or `npx c64bridge`) running; Copilot terminates the stdio process when the chat closes.
|
|
49
70
|
4. Inspect the Copilot output channel for connection errors and ensure the stdio server entry is configured and running.
|
|
71
|
+
5. Correlate the VS Code/Copilot timestamp with the newest file under `~/.c64bridge/diagnostics/`.
|
|
72
|
+
|
|
73
|
+
If the entire VS Code window crashes rather than just the MCP session, also collect:
|
|
74
|
+
|
|
75
|
+
- VS Code logs from `Help` -> `Open Logs Folder`
|
|
76
|
+
- extension host logs and crash dumps from the same time window
|
|
77
|
+
- the matching `.ndjson` file from `~/.c64bridge/diagnostics/`
|
|
50
78
|
|
|
51
79
|
### 3. Tests Fail Because Mock Server Is Missing
|
|
52
80
|
|
|
@@ -151,9 +179,10 @@ Use these checks to validate the full stack:
|
|
|
151
179
|
## Key Lessons Learned
|
|
152
180
|
|
|
153
181
|
1. Connectivity logs are the fastest signal—watch the console during startup.
|
|
154
|
-
2.
|
|
155
|
-
3.
|
|
156
|
-
4.
|
|
182
|
+
2. The diagnostics `.ndjson` file is now the authoritative crash trail for MCP sessions.
|
|
183
|
+
3. Keep configuration files small and explicit; mismatched hosts cause silent timeouts.
|
|
184
|
+
4. Automated tests cover most workflows; run `npm test` before suspecting hardware.
|
|
185
|
+
5. Copilot Chat terminates the stdio server when the session ends—restart `npm start` as needed.
|
|
157
186
|
|
|
158
187
|
## Emergency Recovery
|
|
159
188
|
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# VICE Support Matrix
|
|
2
|
+
|
|
3
|
+
This document is the source of truth for VICE support in the public MCP surface.
|
|
4
|
+
|
|
5
|
+
## Decision Rules
|
|
6
|
+
|
|
7
|
+
- `supported`: part of the public VICE contract, enforced at runtime, documented in generated compatibility tables, and covered by regression tests.
|
|
8
|
+
- `mock-only experimental`: may exist in test scaffolding or backend experiments, but must not appear as supported in public MCP metadata or README compatibility tables.
|
|
9
|
+
- `unsupported`: blocked at runtime on VICE with `unsupported_platform`.
|
|
10
|
+
|
|
11
|
+
## Phase-One Decisions
|
|
12
|
+
|
|
13
|
+
- Resource-backed VICE drive operations are supported in phase one: `list_drives`, `mount`, `unmount`, `reset`, `power_on`, `power_off`, and `set_mode`.
|
|
14
|
+
- Grouped operations already declared c64u-only remain c64u-only on VICE and must be blocked at runtime.
|
|
15
|
+
- Mock-only behavior must not appear in public compatibility tables before it is intentionally promoted to supported status.
|
|
16
|
+
- For this phase, there are no public `mock-only experimental` operations in the grouped MCP contract. Any such behavior remains internal to tests or backend experiments until explicitly reclassified here.
|
|
17
|
+
|
|
18
|
+
## Public VICE Contract
|
|
19
|
+
|
|
20
|
+
### Supported
|
|
21
|
+
|
|
22
|
+
| Tool | Operations |
|
|
23
|
+
| --- | --- |
|
|
24
|
+
| `c64_program` | `run_prg`, `upload_run_basic`, `upload_run_asm`, `batch_run` |
|
|
25
|
+
| `c64_memory` | `read`, `read_screen`, `wait_for_text`, `write` |
|
|
26
|
+
| `c64_system` | `reset`, `reboot`, `poweroff`, `start_task`, `stop_task`, `stop_all_tasks`, `list_tasks` |
|
|
27
|
+
| `c64_graphics` | `render_petscii_art`, `render_bitmap`, `render_sprite`, `render_petscii_text` |
|
|
28
|
+
| `c64_rag` | `basic`, `asm` |
|
|
29
|
+
| `c64_disk` | `list_drives`, `mount`, `unmount` |
|
|
30
|
+
| `c64_drive` | `reset`, `power_on`, `power_off`, `set_mode` |
|
|
31
|
+
| `c64_config` | `list`, `get`, `set`, `batch_update`, `info`, `version`, `snapshot`, `restore`, `diff` |
|
|
32
|
+
| `c64_sound` | `set_volume`, `reset`, `note_on`, `note_off`, `silence_all`, `generate`, `compile_play` |
|
|
33
|
+
| `c64_debug` | all operations |
|
|
34
|
+
| `c64_vice` | all operations |
|
|
35
|
+
|
|
36
|
+
### Unsupported
|
|
37
|
+
|
|
38
|
+
| Tool | Operations |
|
|
39
|
+
| --- | --- |
|
|
40
|
+
| `c64_program` | `load_prg`, `run_crt`, `bundle_run` |
|
|
41
|
+
| `c64_disk` | `file_info`, `create_image`, `find_and_run` |
|
|
42
|
+
| `c64_drive` | `load_rom` |
|
|
43
|
+
| `c64_sound` | `play_sid_file`, `play_mod_file`, `pipeline`, `analyze`, `record_analyze` |
|
|
44
|
+
| `c64_config` | `load_flash`, `save_flash`, `reset_defaults`, `read_debugreg`, `write_debugreg`, `shuffle` |
|
|
45
|
+
| `c64_system` | `pause`, `resume`, `menu` |
|
|
46
|
+
| `c64_stream` | all operations |
|
|
47
|
+
| `c64_printer` | all operations |
|
|
48
|
+
| `c64_extract` | all operations |
|
|
49
|
+
|
|
50
|
+
## Notes
|
|
51
|
+
|
|
52
|
+
- `supported` means supported on the public grouped MCP surface. It does not imply parity with Ultimate firmware internals.
|
|
53
|
+
- VICE still has platform limits such as `no-rest-api`, `no-firmware-filesystem`, `no-flash-config`, and `limited-sid`.
|
|
54
|
+
- When this matrix changes, update runtime enforcement, tests, README-generated compatibility tables, and generated `mcp/*.json` artifacts together.
|
package/mcp/prompts.json
ADDED
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
{
|
|
2
|
+
"prompts": [
|
|
3
|
+
{
|
|
4
|
+
"name": "hello-world",
|
|
5
|
+
"title": "Hello World Workflow",
|
|
6
|
+
"description": "Route ultra-fast hello-world and smoke-test requests to the canonical greeting skill.",
|
|
7
|
+
"_meta": {
|
|
8
|
+
"requiredResources": [
|
|
9
|
+
"c64://context/bootstrap",
|
|
10
|
+
"c64://context/fast-paths",
|
|
11
|
+
"c64://docs/index"
|
|
12
|
+
],
|
|
13
|
+
"optionalResources": [],
|
|
14
|
+
"tools": [
|
|
15
|
+
"c64_program"
|
|
16
|
+
],
|
|
17
|
+
"tags": [
|
|
18
|
+
"hello",
|
|
19
|
+
"demo",
|
|
20
|
+
"greeting",
|
|
21
|
+
"smoke-test"
|
|
22
|
+
],
|
|
23
|
+
"argumentOptions": {}
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "basic-program",
|
|
28
|
+
"title": "BASIC Program Workflow",
|
|
29
|
+
"description": "Route bespoke Commodore BASIC v2 requests to the canonical BASIC skill.",
|
|
30
|
+
"_meta": {
|
|
31
|
+
"requiredResources": [
|
|
32
|
+
"c64://specs/basic",
|
|
33
|
+
"c64://context/bootstrap",
|
|
34
|
+
"c64://docs/index"
|
|
35
|
+
],
|
|
36
|
+
"optionalResources": [
|
|
37
|
+
"c64://context/fast-paths"
|
|
38
|
+
],
|
|
39
|
+
"tools": [
|
|
40
|
+
"c64_program",
|
|
41
|
+
"c64_memory"
|
|
42
|
+
],
|
|
43
|
+
"tags": [
|
|
44
|
+
"basic",
|
|
45
|
+
"program"
|
|
46
|
+
],
|
|
47
|
+
"argumentOptions": {}
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"name": "cross-platform-demo",
|
|
52
|
+
"title": "Cross-Platform Demo Workflow",
|
|
53
|
+
"description": "Route quick visible demo requests to the cross-platform demo skill.",
|
|
54
|
+
"_meta": {
|
|
55
|
+
"requiredResources": [
|
|
56
|
+
"c64://context/bootstrap",
|
|
57
|
+
"c64://context/fast-paths",
|
|
58
|
+
"c64://docs/index"
|
|
59
|
+
],
|
|
60
|
+
"optionalResources": [],
|
|
61
|
+
"tools": [
|
|
62
|
+
"c64_program"
|
|
63
|
+
],
|
|
64
|
+
"tags": [
|
|
65
|
+
"demo",
|
|
66
|
+
"platform",
|
|
67
|
+
"greeting"
|
|
68
|
+
],
|
|
69
|
+
"argumentOptions": {}
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"name": "preset-music-demo",
|
|
74
|
+
"title": "Preset Music Demo Workflow",
|
|
75
|
+
"description": "Route quick recognizable tune requests to the SID music skill.",
|
|
76
|
+
"_meta": {
|
|
77
|
+
"requiredResources": [
|
|
78
|
+
"c64://specs/sid",
|
|
79
|
+
"c64://specs/sidwave",
|
|
80
|
+
"c64://context/fast-paths"
|
|
81
|
+
],
|
|
82
|
+
"optionalResources": [
|
|
83
|
+
"c64://docs/sid/best-practices"
|
|
84
|
+
],
|
|
85
|
+
"tools": [
|
|
86
|
+
"c64_sound"
|
|
87
|
+
],
|
|
88
|
+
"tags": [
|
|
89
|
+
"sid",
|
|
90
|
+
"music",
|
|
91
|
+
"demo"
|
|
92
|
+
],
|
|
93
|
+
"argumentOptions": {}
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"name": "assembly-program",
|
|
98
|
+
"title": "Assembly Program Workflow",
|
|
99
|
+
"description": "Route 6502/6510 routine requests to the canonical assembly skill.",
|
|
100
|
+
"arguments": [
|
|
101
|
+
{
|
|
102
|
+
"name": "hardware",
|
|
103
|
+
"description": "Optional focus area for the routine (sid, vic, cia, or multi for combined work).",
|
|
104
|
+
"options": [
|
|
105
|
+
"sid",
|
|
106
|
+
"vic",
|
|
107
|
+
"cia",
|
|
108
|
+
"multi"
|
|
109
|
+
]
|
|
110
|
+
}
|
|
111
|
+
],
|
|
112
|
+
"_meta": {
|
|
113
|
+
"requiredResources": [
|
|
114
|
+
"c64://specs/assembly",
|
|
115
|
+
"c64://specs/vic",
|
|
116
|
+
"c64://specs/sid",
|
|
117
|
+
"c64://context/bootstrap"
|
|
118
|
+
],
|
|
119
|
+
"optionalResources": [
|
|
120
|
+
"c64://docs/sid/best-practices"
|
|
121
|
+
],
|
|
122
|
+
"tools": [
|
|
123
|
+
"c64_program",
|
|
124
|
+
"c64_memory"
|
|
125
|
+
],
|
|
126
|
+
"tags": [
|
|
127
|
+
"assembly",
|
|
128
|
+
"program"
|
|
129
|
+
],
|
|
130
|
+
"argumentOptions": {
|
|
131
|
+
"hardware": [
|
|
132
|
+
"sid",
|
|
133
|
+
"vic",
|
|
134
|
+
"cia",
|
|
135
|
+
"multi"
|
|
136
|
+
]
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"name": "sid-music",
|
|
142
|
+
"title": "SID Composition Workflow",
|
|
143
|
+
"description": "Route SID playback and composition work to the canonical SID skill.",
|
|
144
|
+
"_meta": {
|
|
145
|
+
"requiredResources": [
|
|
146
|
+
"c64://specs/sid",
|
|
147
|
+
"c64://specs/sidwave",
|
|
148
|
+
"c64://docs/sid/file-structure",
|
|
149
|
+
"c64://docs/sid/best-practices"
|
|
150
|
+
],
|
|
151
|
+
"optionalResources": [
|
|
152
|
+
"c64://context/fast-paths"
|
|
153
|
+
],
|
|
154
|
+
"tools": [
|
|
155
|
+
"c64_sound"
|
|
156
|
+
],
|
|
157
|
+
"tags": [
|
|
158
|
+
"sid",
|
|
159
|
+
"music"
|
|
160
|
+
],
|
|
161
|
+
"argumentOptions": {}
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"name": "graphics-demo",
|
|
166
|
+
"title": "Graphics Demo Workflow",
|
|
167
|
+
"description": "Route graphics requests to the canonical graphics skill.",
|
|
168
|
+
"arguments": [
|
|
169
|
+
{
|
|
170
|
+
"name": "mode",
|
|
171
|
+
"description": "Target VIC-II technique (text, multicolour, bitmap, or sprite).",
|
|
172
|
+
"options": [
|
|
173
|
+
"text",
|
|
174
|
+
"multicolour",
|
|
175
|
+
"bitmap",
|
|
176
|
+
"sprite"
|
|
177
|
+
]
|
|
178
|
+
}
|
|
179
|
+
],
|
|
180
|
+
"_meta": {
|
|
181
|
+
"requiredResources": [
|
|
182
|
+
"c64://specs/vic",
|
|
183
|
+
"c64://context/bootstrap"
|
|
184
|
+
],
|
|
185
|
+
"optionalResources": [
|
|
186
|
+
"c64://specs/assembly",
|
|
187
|
+
"c64://specs/charset",
|
|
188
|
+
"c64://docs/petscii-style"
|
|
189
|
+
],
|
|
190
|
+
"tools": [
|
|
191
|
+
"c64_program",
|
|
192
|
+
"c64_memory",
|
|
193
|
+
"c64_graphics"
|
|
194
|
+
],
|
|
195
|
+
"tags": [
|
|
196
|
+
"graphics",
|
|
197
|
+
"vic"
|
|
198
|
+
],
|
|
199
|
+
"argumentOptions": {
|
|
200
|
+
"mode": [
|
|
201
|
+
"text",
|
|
202
|
+
"multicolour",
|
|
203
|
+
"bitmap",
|
|
204
|
+
"sprite"
|
|
205
|
+
]
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"name": "printer-job",
|
|
211
|
+
"title": "Printer Job Workflow",
|
|
212
|
+
"description": "Route printer work to the canonical printer skill.",
|
|
213
|
+
"arguments": [
|
|
214
|
+
{
|
|
215
|
+
"name": "printerType",
|
|
216
|
+
"description": "Select Commodore (device 4) or Epson FX workflow helpers.",
|
|
217
|
+
"options": [
|
|
218
|
+
"commodore",
|
|
219
|
+
"epson"
|
|
220
|
+
]
|
|
221
|
+
}
|
|
222
|
+
],
|
|
223
|
+
"_meta": {
|
|
224
|
+
"requiredResources": [
|
|
225
|
+
"c64://specs/printer",
|
|
226
|
+
"c64://docs/printer/guide",
|
|
227
|
+
"c64://docs/printer/prompts"
|
|
228
|
+
],
|
|
229
|
+
"optionalResources": [
|
|
230
|
+
"c64://docs/printer/commodore-text",
|
|
231
|
+
"c64://docs/printer/commodore-bitmap",
|
|
232
|
+
"c64://docs/printer/epson-text",
|
|
233
|
+
"c64://docs/printer/epson-bitmap"
|
|
234
|
+
],
|
|
235
|
+
"tools": [
|
|
236
|
+
"c64_printer"
|
|
237
|
+
],
|
|
238
|
+
"tags": [
|
|
239
|
+
"printer"
|
|
240
|
+
],
|
|
241
|
+
"argumentOptions": {
|
|
242
|
+
"printerType": [
|
|
243
|
+
"commodore",
|
|
244
|
+
"epson"
|
|
245
|
+
]
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
"name": "memory-debug",
|
|
251
|
+
"title": "Memory Debug Workflow",
|
|
252
|
+
"description": "Route reversible memory inspection or patching work to the canonical memory skill.",
|
|
253
|
+
"_meta": {
|
|
254
|
+
"requiredResources": [
|
|
255
|
+
"c64://context/bootstrap",
|
|
256
|
+
"c64://specs/assembly",
|
|
257
|
+
"c64://docs/index"
|
|
258
|
+
],
|
|
259
|
+
"optionalResources": [],
|
|
260
|
+
"tools": [
|
|
261
|
+
"c64_memory",
|
|
262
|
+
"c64_system"
|
|
263
|
+
],
|
|
264
|
+
"tags": [
|
|
265
|
+
"memory",
|
|
266
|
+
"debug"
|
|
267
|
+
],
|
|
268
|
+
"argumentOptions": {}
|
|
269
|
+
}
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
"name": "drive-manager",
|
|
273
|
+
"title": "Drive Manager Workflow",
|
|
274
|
+
"description": "Route disk-image and drive-state requests to the canonical drive skill.",
|
|
275
|
+
"_meta": {
|
|
276
|
+
"requiredResources": [
|
|
277
|
+
"c64://context/bootstrap"
|
|
278
|
+
],
|
|
279
|
+
"optionalResources": [],
|
|
280
|
+
"tools": [
|
|
281
|
+
"c64_disk",
|
|
282
|
+
"c64_drive"
|
|
283
|
+
],
|
|
284
|
+
"tags": [
|
|
285
|
+
"drive",
|
|
286
|
+
"storage"
|
|
287
|
+
],
|
|
288
|
+
"argumentOptions": {}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
]
|
|
292
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"protocolVersion": "2025-06-18",
|
|
3
|
+
"examples": {
|
|
4
|
+
"initialize": {
|
|
5
|
+
"description": "Client initialization request sent immediately after connecting to the stdio MCP server.",
|
|
6
|
+
"request": {
|
|
7
|
+
"jsonrpc": "2.0",
|
|
8
|
+
"id": 1,
|
|
9
|
+
"method": "initialize",
|
|
10
|
+
"params": {
|
|
11
|
+
"protocolVersion": "2025-06-18",
|
|
12
|
+
"capabilities": {
|
|
13
|
+
"resources": {},
|
|
14
|
+
"tools": {},
|
|
15
|
+
"prompts": {}
|
|
16
|
+
},
|
|
17
|
+
"clientInfo": {
|
|
18
|
+
"name": "c64bridge-static-interface-generator",
|
|
19
|
+
"version": "1.0.0"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"tools/list": {
|
|
25
|
+
"description": "Enumerates the full tool catalog and input schemas exposed by the server.",
|
|
26
|
+
"request": {
|
|
27
|
+
"jsonrpc": "2.0",
|
|
28
|
+
"id": 2,
|
|
29
|
+
"method": "tools/list",
|
|
30
|
+
"params": {}
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"tools/call": {
|
|
34
|
+
"description": "Invokes the c64_program tool with deterministic example arguments.",
|
|
35
|
+
"request": {
|
|
36
|
+
"jsonrpc": "2.0",
|
|
37
|
+
"id": 3,
|
|
38
|
+
"method": "tools/call",
|
|
39
|
+
"params": {
|
|
40
|
+
"name": "c64_program",
|
|
41
|
+
"arguments": {}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|