- Add DewToolCommand mixin that auto-derives MCP tool JSON Schema from
ArgParser, eliminating the need to define CLI commands and MCP tools
separately
- Add schemaFromArgParser() to generate JSON Schema from ArgParser options
- Add CommandRegistry.mcpTools recursive collector for all DewToolCommand
subcommands
- Refactor all kanban subcommands to use the mixin; switch get/update/delete
from positional rest args to --id / -i option for schema compatibility
- Promote list to a proper CLI subcommand (was MCP-only before)
- Add search, comment, and config subcommands (CLI + MCP tools)
- Add TicketStore.addComment() for non-destructive comment appending
- Simplify mcp.registerCommands() to take only CommandRegistry
- Simplify CLI entry point (no more KanbanToolProvider/McpToolRegistry)
- Delete stale files: kanban_tool_provider.dart, mcp_tool_provider.dart,
mcp_tool_registry.dart (superseded by DewToolCommand mixin)
- Add tools/mcp_client.dart debug client for manual MCP server testing
- Update .vscode/mcp.json with correct server config
All 26 tests pass, dart analyze clean.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Two bugs caused immediate connection close:
1. ProjectContext.find() at startup crashed if cwd wasn't a project root;
it's not needed here — each tool handler calls it on demand.
2. io.stdin.drain() added a second listener to stdin after stdioChannel
already subscribed, throwing StateError and killing the process.
The Dart event loop keeps the process alive while stdin has a listener.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>