Files
whetstone_DSL/progress.md
Bill 06706aeacf Step 246: mcp_main.cpp — standalone MCP server entry point
Wires HeadlessEditorState + MCPBridge into a standalone whetstone_mcp
binary that any MCP client (Claude Code, Cursor, etc.) can launch over
stdio. No SDL, no ImGui, no OpenGL — headless only. 12/12 tests pass.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 05:40:32 +00:00

2.3 KiB

Sprint 9 Progress — Agent-First Tooling

Phase 9a: Standalone MCP Server

Step 245: HeadlessEditorState (no ImGui dependency)

Status: PASS (20/20 tests)

Created the headless agent API surface — same method interface as EditorState but with zero GUI dependencies (no ImGui, no SDL, no WebSocket).

Files created:

  • editor/src/ASTUtils.h — Pure AST utility functions extracted from EditorUtils.h (cloneModule, isAnnotationNode, countAnnotationNodes, findNodeById, findNodeAtPosition)
  • editor/src/HeadlessEditorState.h — Lightweight state: HeadlessAgentState, HeadlessLibraryState, HeadlessBufferState, buffer management, orchestrator sync
  • editor/src/HeadlessAgentRPCHandler.h — Full RPC dispatch mirroring AgentRPCHandler.h (20+ methods: getAST, parseSource, runPipeline, applyMutation, applyBatch, projectLanguage, generateCode, workflow recording, etc.)
  • editor/tests/step245_test.cpp — 20 test cases covering construction, buffer management, RPC dispatch, permission enforcement, pipeline execution

Key design decisions:

  • JSON roundtrip cloning (matching EditorUtils.h) instead of manual deep copy
  • Separate HeadlessAgentState (no AgentMarketplace/WebSocket dependency chain)
  • All files under 600-line architecture limit

Step 246: mcp_main.cpp — Standalone MCP Server Entry Point

Status: PASS (12/12 tests)

Wires HeadlessEditorState + MCPBridge into a standalone whetstone_mcp binary that any MCP client (Claude Code, Cursor, etc.) can launch over stdio.

Files created:

  • editor/src/mcp_main.cpp — Standalone MCP server entry point with CLI arg parsing (--workspace, --language, --verbose), signal handling, resource reader lambda routing whetstone:// URIs, and MCPBridge stdio loop
  • editor/tests/step246_test.cpp — 12 test cases: initialize, notifications, tools/list (10+), resources/list (5), prompts/list (4), tools/call pipeline, tools/call get_ast, resources/read ast, resources/read diagnostics, ping, resources/read settings, CLI arg parsing

Key design decisions:

  • No SDL, no ImGui, no OpenGL — headless only binary
  • Fixed "mcp-session" session ID (MCP stdio is single-client)
  • Default Refactor role for full MCP access
  • Empty scratch buffer on startup so getAST works immediately
  • All logging to stderr (stdout is the MCP transport)