[v0.8.1.dev1] OpenCode MCP host, adding-mcp-hosts skill, and dev docs refresh#47
Merged
LittleCoinCoin merged 40 commits intoCrackingShells:devfrom Feb 26, 2026
Merged
Conversation
[v0.8.0] CLI Architecture Refactoring, MCP Adapter System, and UX Normalization
## 0.8.0 (2026-02-20) * Merge pull request CrackingShells#44 from LittleCoinCoin/dev ([1157922](CrackingShells@1157922)), closes [CrackingShells#44](CrackingShells#44) * Merge pull request CrackingShells#45 from LittleCoinCoin/dev ([0ed9010](CrackingShells@0ed9010)), closes [CrackingShells#45](CrackingShells#45) * Merge pull request CrackingShells#46 from CrackingShells/dev ([514f2c7](CrackingShells@514f2c7)), closes [CrackingShells#46](CrackingShells#46) * chore: update entry point to hatch.cli module ([cf81671](CrackingShells@cf81671)) * chore: update submodule `cracking-shells-playbook` ([222b357](CrackingShells@222b357)) * chore(deps): add pytest to dev dependencies ([2761afe](CrackingShells@2761afe)) * chore(dev-infra): add code quality tools to dev dependencies ([f76c5c1](CrackingShells@f76c5c1)) * chore(dev-infra): add pre-commit configuration ([67da239](CrackingShells@67da239)) * chore(dev-infra): apply black formatting to entire codebase ([2daa89d](CrackingShells@2daa89d)) * chore(dev-infra): apply ruff linting fixes to codebase ([6681ee6](CrackingShells@6681ee6)) * chore(dev-infra): install pre-commit hooks and document initial state ([eb81ea4](CrackingShells@eb81ea4)) * chore(dev-infra): verify pre-commit hooks pass on entire codebase ([ed90350](CrackingShells@ed90350)) * chore(docs): remove deprecated CLI api doc ([12a22c0](CrackingShells@12a22c0)) * chore(docs): remove deprecated MCP documentation files ([5ca09a3](CrackingShells@5ca09a3)) * chore(release): 0.8.0-dev.1 ([f787c93](CrackingShells@f787c93)) * chore(release): 0.8.0-dev.2 ([2d30523](CrackingShells@2d30523)) * chore(tests): remove deprecated MCP test files ([29a5ec5](CrackingShells@29a5ec5)) * fix(backup): support different config filenames in backup listing ([06eb53a](CrackingShells@06eb53a)), closes [CrackingShells#2](CrackingShells#2) * fix(ci): pre-release installation instructions ([0206dc0](CrackingShells@0206dc0)) * fix(cli-version): use correct package name for version lookup ([76c3364](CrackingShells@76c3364)) * fix(cli): remove obsolete handle_mcp_show import ([388ca01](CrackingShells@388ca01)) * fix(docs): add missing return type annotations for mkdocs build ([da78682](CrackingShells@da78682)) * fix(instructions): purge stale Phase terminology ([dba119a](CrackingShells@dba119a)) * fix(mcp-adapters): add missing strategies import ([533a66d](CrackingShells@533a66d)) * fix(mcp-adapters): add transport mutual exclusion to GeminiAdapter ([319d067](CrackingShells@319d067)) * fix(mcp-adapters): allow enabled_tools/disabled_tools coexistence ([ea6471c](CrackingShells@ea6471c)) * fix(mcp-adapters): allow includeTools/excludeTools coexistence ([d8f8a56](CrackingShells@d8f8a56)) * fix(mcp-adapters): remove type field rejection from CodexAdapter ([0627352](CrackingShells@0627352)) * fix(mcp-adapters): remove type field rejection from GeminiAdapter ([2d8e0a3](CrackingShells@2d8e0a3)) * fix(ruff): resolve F821 errors and consolidate imports ([0be9fc8](CrackingShells@0be9fc8)), closes [hi#priority](https://github.com/hi/issues/priority) * docs: fix broken link in MCP host configuration architecture ([e9f89f1](CrackingShells@e9f89f1)) * docs(api): restructure CLI API documentation to modular architecture ([318d212](CrackingShells@318d212)) * docs(cli-ref): mark package list as deprecated and update filters ([06f5b75](CrackingShells@06f5b75)) * docs(cli-ref): update environment commands section ([749d992](CrackingShells@749d992)) * docs(cli-ref): update MCP commands section with new list/show commands ([1c812fd](CrackingShells@1c812fd)) * docs(cli-ref): update mcp sync command documentation ([17ae770](CrackingShells@17ae770)) * docs(cli): add module docstrings for refactored CLI ([8d7de20](CrackingShells@8d7de20)) * docs(cli): update documentation for handler-based architecture ([f95c5d0](CrackingShells@f95c5d0)) * docs(devs): add CLI architecture and implementation guide ([a3152e1](CrackingShells@a3152e1)) * docs(guide): add quick reference for viewing commands ([5bf5d01](CrackingShells@5bf5d01)) * docs(guide): add viewing host configurations section ([6c381d1](CrackingShells@6c381d1)) * docs(mcp-adapters): update architecture for new pattern ([693665c](CrackingShells@693665c)) * docs(mcp-host-config): deprecate legacy architecture doc ([d8618a5](CrackingShells@d8618a5)) * docs(mcp-host-config): deprecate legacy extension guide ([f172a51](CrackingShells@f172a51)) * docs(mcp-host-config): write new architecture documentation ([ff05ad5](CrackingShells@ff05ad5)) * docs(mcp-host-config): write new extension guide ([7821062](CrackingShells@7821062)) * docs(mcp-reporting): document metadata field exclusion behavior ([5ccb7f9](CrackingShells@5ccb7f9)) * docs(mcp): update error message examples ([5988b3a](CrackingShells@5988b3a)) * docs(testing): add tests/README.md with testing strategy ([08162ce](CrackingShells@08162ce)) * docs(testing): update README - all test issues resolved ([5c60ef2](CrackingShells@5c60ef2)) * docs(tutorial): fix command syntax in environment sync tutorial ([b2f40bf](CrackingShells@b2f40bf)) * docs(tutorial): fix verification commands in checkpoint tutorial ([59b2485](CrackingShells@59b2485)) * docs(tutorial): update env list output in create environment tutorial ([443607c](CrackingShells@443607c)) * docs(tutorial): update package installation tutorial outputs ([588bab3](CrackingShells@588bab3)) * docs(tutorials): fix command syntax in 04-mcp-host-configuration ([2ac1058](CrackingShells@2ac1058)) * docs(tutorials): fix outdated env list output format in 02-environments ([d38ae24](CrackingShells@d38ae24)) * docs(tutorials): fix validation output in 03-author-package ([776d40f](CrackingShells@776d40f)) * test(cli): add ConversionReport fixtures for reporter tests ([eeccff6](CrackingShells@eeccff6)) * test(cli): add failing integration test for MCP handler ([acf7c94](CrackingShells@acf7c94)) * test(cli): add failing test for host-centric mcp list servers ([0fcb8fd](CrackingShells@0fcb8fd)) * test(cli): add failing tests for ConversionReport integration ([8e6efc0](CrackingShells@8e6efc0)) * test(cli): add failing tests for env list hosts ([454b0e4](CrackingShells@454b0e4)) * test(cli): add failing tests for env list servers ([7250387](CrackingShells@7250387)) * test(cli): add failing tests for host-centric mcp list hosts ([3ec0617](CrackingShells@3ec0617)) * test(cli): add failing tests for mcp show hosts ([8c8f3e9](CrackingShells@8c8f3e9)) * test(cli): add failing tests for mcp show servers ([fac85fe](CrackingShells@fac85fe)) * test(cli): add failing tests for TableFormatter ([90f3953](CrackingShells@90f3953)) * test(cli): add test directory structure for CLI reporter ([7044b47](CrackingShells@7044b47)) * test(cli): add test utilities for handler testing ([55322c7](CrackingShells@55322c7)) * test(cli): add tests for Color enum and color enable/disable logic ([f854324](CrackingShells@f854324)) * test(cli): add tests for Consequence dataclass and ResultReporter ([127575d](CrackingShells@127575d)) * test(cli): add tests for ConsequenceType enum ([a3f0204](CrackingShells@a3f0204)) * test(cli): add tests for error reporting methods ([2561532](CrackingShells@2561532)) * test(cli): add tests for HatchArgumentParser ([8b192e5](CrackingShells@8b192e5)) * test(cli): add tests for ValidationError and utilities ([a2a5c29](CrackingShells@a2a5c29)) * test(cli): add true color detection tests ([79f6faa](CrackingShells@79f6faa)) * test(cli): update backup tests for cli_mcp module ([8174bef](CrackingShells@8174bef)) * test(cli): update color tests for HCL palette ([a19780c](CrackingShells@a19780c)) * test(cli): update direct_management tests for cli_mcp module ([16f8520](CrackingShells@16f8520)) * test(cli): update discovery tests for cli_mcp module ([de75cf0](CrackingShells@de75cf0)) * test(cli): update for new cli architecture ([64cf74e](CrackingShells@64cf74e)) * test(cli): update host config integration tests for cli_mcp module ([ea5c6b6](CrackingShells@ea5c6b6)) * test(cli): update host_specific_args tests for cli_mcp module ([8f477f6](CrackingShells@8f477f6)) * test(cli): update list tests for cli_mcp module ([e21ecc0](CrackingShells@e21ecc0)) * test(cli): update mcp list servers tests for --pattern removal ([9bb5fe5](CrackingShells@9bb5fe5)) * test(cli): update partial_updates tests for cli_mcp module ([4484e67](CrackingShells@4484e67)) * test(cli): update remaining MCP tests for cli_mcp module ([a655775](CrackingShells@a655775)) * test(cli): update sync_functionality tests for cli_mcp module ([eeb2d6d](CrackingShells@eeb2d6d)) * test(cli): update tests for cli_utils module ([7d72f76](CrackingShells@7d72f76)) * test(cli): update tests for mcp show removal ([a0e730b](CrackingShells@a0e730b)) * test(deprecate): rename 28 legacy MCP tests to .bak for rebuild ([e7f9c50](CrackingShells@e7f9c50)) * test(docker-loader): mock docker and online package loader tests ([df5533e](CrackingShells@df5533e)) * test(env-manager): mock conda/mamba detection tests ([ce82350](CrackingShells@ce82350)) * test(env-manager): mock environment creation tests ([8bf3289](CrackingShells@8bf3289)) * test(env-manager): mock remaining integration tests ([5a4d215](CrackingShells@5a4d215)) * test(env-manip): mock advanced package dependency tests ([1878751](CrackingShells@1878751)) * test(env-manip): mock advanced package dependency tests ([9a945ad](CrackingShells@9a945ad)) * test(env-manip): mock basic environment operations ([0b4ed74](CrackingShells@0b4ed74)) * test(env-manip): mock basic environment operations ([675a67d](CrackingShells@675a67d)) * test(env-manip): mock package addition tests ([0f99f4c](CrackingShells@0f99f4c)) * test(env-manip): mock package addition tests ([04cb79f](CrackingShells@04cb79f)) * test(env-manip): mock remaining 3 slow tests ([df7517c](CrackingShells@df7517c)) * test(env-manip): mock system, docker, and MCP server tests ([63084c4](CrackingShells@63084c4)) * test(env-manip): mock system, docker, and MCP server tests ([9487ef8](CrackingShells@9487ef8)) * test(env-manip): remove remaining @slow_test decorators ([0403a7d](CrackingShells@0403a7d)) * test(installer): add shared venv fixture for integration tests ([095f6ce](CrackingShells@095f6ce)) * test(installer): mock pip installation tests (batch 1) ([45bdae0](CrackingShells@45bdae0)) * test(installer): mock pip installation tests (batch 2) ([1650442](CrackingShells@1650442)) * test(installer): refactor integration test to use shared venv ([bd979be](CrackingShells@bd979be)) * test(mcp-adapters): add canonical configs fixture ([46f54a6](CrackingShells@46f54a6)) * test(mcp-adapters): add cross-host sync tests (64 pairs) ([c77f448](CrackingShells@c77f448)) * test(mcp-adapters): add field filtering regression tests ([bc3e631](CrackingShells@bc3e631)) * test(mcp-adapters): add host configuration tests (8 hosts) ([b3e640e](CrackingShells@b3e640e)) * test(mcp-adapters): add validation bug regression tests ([8eb6f7a](CrackingShells@8eb6f7a)) * test(mcp-adapters): deprecate old tests for data-driven ([8177520](CrackingShells@8177520)) * test(mcp-adapters): fix registry test for new abstract method ([32aa3cb](CrackingShells@32aa3cb)) * test(mcp-adapters): implement HostRegistry with fields.py ([127c1f7](CrackingShells@127c1f7)) * test(mcp-adapters): implement property-based assertions ([4ac17ef](CrackingShells@4ac17ef)) * test(mcp-host-config): add adapter registry unit tests ([bc8f455](CrackingShells@bc8f455)) * test(mcp-host-config): add integration tests for adapter serialization ([6910120](CrackingShells@6910120)) * test(mcp-host-config): add regression tests for field filtering ([d6ce817](CrackingShells@d6ce817)) * test(mcp-host-config): add unit tests ([c1a0fa4](CrackingShells@c1a0fa4)) * test(mcp-host-config): create three-tier test directory structure ([d78681b](CrackingShells@d78681b)) * test(mcp-host-config): update integration tests for adapter architecture ([acd7871](CrackingShells@acd7871)) * test(mcp-sync): use canonical fixture data in detailed flag tests ([c2f35e4](CrackingShells@c2f35e4)) * test(non-tty): remove slow_test from integration tests ([772de01](CrackingShells@772de01)) * test(system-installer): mock system installer tests ([23de568](CrackingShells@23de568)) * test(validation): add pytest pythonpath config ([9924374](CrackingShells@9924374)) * feat(adapters): create AdapterRegistry for host-adapter mapping ([a8e3dfb](CrackingShells@a8e3dfb)) * feat(adapters): create BaseAdapter abstract class ([4d9833c](CrackingShells@4d9833c)) * feat(adapters): create host-specific adapters ([7b725c8](CrackingShells@7b725c8)) * feat(cli): add --dry-run to env and package commands ([4a0f3e5](CrackingShells@4a0f3e5)) * feat(cli): add --dry-run to env use, package add, create commands ([79da44c](CrackingShells@79da44c)) * feat(cli): add --host and --pattern flags to mcp list servers ([29f86aa](CrackingShells@29f86aa)) * feat(cli): add --json flag to list commands ([73f62ed](CrackingShells@73f62ed)) * feat(cli): add --pattern filter to env list ([6deff84](CrackingShells@6deff84)) * feat(cli): add Color, ConsequenceType, Consequence, ResultReporter ([10cdb71](CrackingShells@10cdb71)) * feat(cli): add confirmation prompt to env remove ([b1156e7](CrackingShells@b1156e7)) * feat(cli): add confirmation prompt to package remove ([38d9051](CrackingShells@38d9051)) * feat(cli): add ConversionReport to ResultReporter bridge ([4ea999e](CrackingShells@4ea999e)) * feat(cli): add format_info utility ([b1f33d4](CrackingShells@b1f33d4)) * feat(cli): add format_validation_error utility ([f28b841](CrackingShells@f28b841)) * feat(cli): add format_warning utility ([28ec610](CrackingShells@28ec610)) * feat(cli): add hatch env show command ([2bc96bc](CrackingShells@2bc96bc)) * feat(cli): add hatch mcp show command ([9ab53bc](CrackingShells@9ab53bc)) * feat(cli): add HatchArgumentParser with formatted errors ([1fb7006](CrackingShells@1fb7006)) * feat(cli): add highlight utility for entity names ([c25631a](CrackingShells@c25631a)) * feat(cli): add parser for env list hosts command ([a218dea](CrackingShells@a218dea)) * feat(cli): add parser for env list servers command ([851c866](CrackingShells@851c866)) * feat(cli): add parser for mcp show hosts command ([f7abe61](CrackingShells@f7abe61)) * feat(cli): add report_error method to ResultReporter ([e0f89e1](CrackingShells@e0f89e1)) * feat(cli): add report_partial_success method to ResultReporter ([1ce4fd9](CrackingShells@1ce4fd9)) * feat(cli): add TableFormatter for aligned table output ([658f48a](CrackingShells@658f48a)) * feat(cli): add true color terminal detection ([aa76bfc](CrackingShells@aa76bfc)) * feat(cli): add unicode terminal detection ([91d7c30](CrackingShells@91d7c30)) * feat(cli): add ValidationError exception class ([af63b46](CrackingShells@af63b46)) * feat(cli): display server list in mcp sync pre-prompt ([96d7f56](CrackingShells@96d7f56)) * feat(cli): implement env list hosts command ([bebe6ab](CrackingShells@bebe6ab)) * feat(cli): implement env list servers command ([0c7a744](CrackingShells@0c7a744)) * feat(cli): implement HCL color palette with true color support ([d70b4f2](CrackingShells@d70b4f2)) * feat(cli): implement mcp show hosts command ([2c716bb](CrackingShells@2c716bb)) * feat(cli): implement mcp show servers command ([e6df7b4](CrackingShells@e6df7b4)) * feat(cli): update mcp list hosts JSON output ([a6f5994](CrackingShells@a6f5994)) * feat(cli): update mcp list hosts parser with --server flag ([c298d52](CrackingShells@c298d52)) * feat(mcp-adapters): implement field transformations in CodexAdapter ([59cc931](CrackingShells@59cc931)) * feat(mcp-host-config): add field support constants ([1e81a24](CrackingShells@1e81a24)) * feat(mcp-host-config): add transport detection to MCPServerConfig ([c4eabd2](CrackingShells@c4eabd2)) * feat(mcp-host-config): implement LMStudioAdapter ([0662b14](CrackingShells@0662b14)) * feat(mcp-reporting): metadata fields exclusion from cli reports ([41db3da](CrackingShells@41db3da)) * feat(mcp-sync): add --detailed flag for field-level sync output ([dea1541](CrackingShells@dea1541)) * feat(mcp): add preview_sync method for server name resolution ([52bdc10](CrackingShells@52bdc10)) * refactor(cli): add deprecation warning to cli_hatch shim ([f9adf0a](CrackingShells@f9adf0a)) * refactor(cli): create cli package structure ([bc80e29](CrackingShells@bc80e29)) * refactor(cli): deprecate `mcp discover servers` and `package list` ([9ce5be0](CrackingShells@9ce5be0)) * refactor(cli): extract argument parsing and implement clean routing ([efeae24](CrackingShells@efeae24)) * refactor(cli): extract environment handlers to cli_env ([d00959f](CrackingShells@d00959f)) * refactor(cli): extract handle_mcp_configure to cli_mcp ([9b9bc4d](CrackingShells@9b9bc4d)) * refactor(cli): extract handle_mcp_sync to cli_mcp ([f69be90](CrackingShells@f69be90)) * refactor(cli): extract MCP backup handlers to cli_mcp ([ca65e2b](CrackingShells@ca65e2b)) * refactor(cli): extract MCP discovery handlers to cli_mcp ([887b96e](CrackingShells@887b96e)) * refactor(cli): extract MCP list handlers to cli_mcp ([e518e90](CrackingShells@e518e90)) * refactor(cli): extract MCP remove handlers to cli_mcp ([4e84be7](CrackingShells@4e84be7)) * refactor(cli): extract package handlers to cli_package ([ebecb1e](CrackingShells@ebecb1e)) * refactor(cli): extract shared utilities to cli_utils ([0b0dc92](CrackingShells@0b0dc92)) * refactor(cli): extract system handlers to cli_system ([2f7d715](CrackingShells@2f7d715)) * refactor(cli): integrate backup path into ResultReporter ([fd9a1f4](CrackingShells@fd9a1f4)) * refactor(cli): integrate sync statistics into ResultReporter ([cc5a8b2](CrackingShells@cc5a8b2)) * refactor(cli): normalize cli_utils warning messages ([6e9b983](CrackingShells@6e9b983)) * refactor(cli): normalize MCP warning messages ([b72c6a4](CrackingShells@b72c6a4)) * refactor(cli): normalize operation cancelled messages ([ab0b611](CrackingShells@ab0b611)) * refactor(cli): normalize package warning messages ([c7463b3](CrackingShells@c7463b3)) * refactor(cli): remove --pattern from mcp list servers ([b8baef9](CrackingShells@b8baef9)) * refactor(cli): remove legacy mcp show <host> command ([fd2c290](CrackingShells@fd2c290)) * refactor(cli): rewrite mcp list hosts for host-centric design ([ac88a84](CrackingShells@ac88a84)) * refactor(cli): rewrite mcp list servers for host-centric design ([c2de727](CrackingShells@c2de727)) * refactor(cli): simplify CLI to use unified MCPServerConfig with adapters ([d97b99e](CrackingShells@d97b99e)) * refactor(cli): simplify env list to show package count only ([3045718](CrackingShells@3045718)) * refactor(cli): standardize backup restore failure error ([9a8377f](CrackingShells@9a8377f)) * refactor(cli): standardize configure failure error ([1065c32](CrackingShells@1065c32)) * refactor(cli): standardize mcp sync failure error reporting ([82a2d3b](CrackingShells@82a2d3b)) * refactor(cli): standardize package configure exception warning ([b1bde91](CrackingShells@b1bde91)) * refactor(cli): standardize package configure failure warning ([b14e9f4](CrackingShells@b14e9f4)) * refactor(cli): standardize package invalid host error ([7f448a1](CrackingShells@7f448a1)) * refactor(cli): standardize remove failure error ([023c64f](CrackingShells@023c64f)) * refactor(cli): standardize remove-host failure error ([b2de533](CrackingShells@b2de533)) * refactor(cli): standardize remove-server failure error ([2d40d09](CrackingShells@2d40d09)) * refactor(cli): update env execution errors to use report_error ([8021ba2](CrackingShells@8021ba2)) * refactor(cli): update env validation error to use ValidationError ([101eba7](CrackingShells@101eba7)) * refactor(cli): update MCP exception handlers to use report_error ([edec31d](CrackingShells@edec31d)) * refactor(cli): update MCP validation errors to use ValidationError ([20b165a](CrackingShells@20b165a)) * refactor(cli): update package errors to use report_error ([4d0ab73](CrackingShells@4d0ab73)) * refactor(cli): update system errors to use report_error ([b205032](CrackingShells@b205032)) * refactor(cli): use HatchArgumentParser for all parsers ([4b750fa](CrackingShells@4b750fa)) * refactor(cli): use ResultReporter in env create/remove handlers ([d0991ba](CrackingShells@d0991ba)) * refactor(cli): use ResultReporter in env python handlers ([df14f66](CrackingShells@df14f66)) * refactor(cli): use ResultReporter in handle_env_python_add_hatch_mcp ([0ec6b6a](CrackingShells@0ec6b6a)) * refactor(cli): use ResultReporter in handle_env_use ([b7536fb](CrackingShells@b7536fb)) * refactor(cli): use ResultReporter in handle_mcp_configure ([5f3c60c](CrackingShells@5f3c60c)) * refactor(cli): use ResultReporter in handle_mcp_sync ([9d52d24](CrackingShells@9d52d24)) * refactor(cli): use ResultReporter in handle_package_add ([49585fa](CrackingShells@49585fa)) * refactor(cli): use ResultReporter in handle_package_remove ([58ffdf1](CrackingShells@58ffdf1)) * refactor(cli): use ResultReporter in handle_package_sync ([987b9d1](CrackingShells@987b9d1)) * refactor(cli): use ResultReporter in MCP backup handlers ([9ec9e7b](CrackingShells@9ec9e7b)) * refactor(cli): use ResultReporter in MCP remove handlers ([e727324](CrackingShells@e727324)) * refactor(cli): use ResultReporter in system handlers ([df64898](CrackingShells@df64898)) * refactor(cli): use TableFormatter in handle_env_list ([0f18682](CrackingShells@0f18682)) * refactor(cli): use TableFormatter in handle_mcp_backup_list ([17dd96a](CrackingShells@17dd96a)) * refactor(cli): use TableFormatter in handle_mcp_discover_hosts ([6bef0fa](CrackingShells@6bef0fa)) * refactor(cli): use TableFormatter in handle_mcp_list_hosts ([3b465bb](CrackingShells@3b465bb)) * refactor(cli): use TableFormatter in handle_mcp_list_servers ([3145e47](CrackingShells@3145e47)) * refactor(mcp-adapters): add validate_filtered to BaseAdapter ([b1f542a](CrackingShells@b1f542a)) * refactor(mcp-adapters): convert ClaudeAdapter to validate-after-filter ([13933a5](CrackingShells@13933a5)) * refactor(mcp-adapters): convert CodexAdapter to validate-after-filter ([7ac8de1](CrackingShells@7ac8de1)) * refactor(mcp-adapters): convert CursorAdapter to validate-after-filter ([93aa631](CrackingShells@93aa631)) * refactor(mcp-adapters): convert GeminiAdapter to validate-after-filter ([cb5d98e](CrackingShells@cb5d98e)) * refactor(mcp-adapters): convert KiroAdapter to validate-after-filter ([0eb7d46](CrackingShells@0eb7d46)) * refactor(mcp-adapters): convert LMStudioAdapter to validate-after-filter ([1bd3780](CrackingShells@1bd3780)) * refactor(mcp-adapters): convert VSCodeAdapter to validate-after-filter ([5c78df9](CrackingShells@5c78df9)) * refactor(mcp-host-config): unified MCPServerConfig ([ca0e51c](CrackingShells@ca0e51c)) * refactor(mcp-host-config): update module exports ([5371a43](CrackingShells@5371a43)) * refactor(mcp-host-config): wire all strategies to use adapters ([528e5f5](CrackingShells@528e5f5)) * refactor(mcp): deprecate display_report in favor of ResultReporter ([3880ea3](CrackingShells@3880ea3)) * refactor(models): remove legacy host-specific models from models.py ([ff92280](CrackingShells@ff92280)) ### BREAKING CHANGE * Remove all legacy host-specific configuration models that are now replaced by the unified adapter architecture. Removed models: - MCPServerConfigBase (abstract base class) - MCPServerConfigGemini - MCPServerConfigVSCode - MCPServerConfigCursor - MCPServerConfigClaude - MCPServerConfigKiro - MCPServerConfigCodex - MCPServerConfigOmni - HOST_MODEL_REGISTRY The unified MCPServerConfig model plus host-specific adapters now handle all MCP server configuration. See: - hatch/mcp_host_config/adapters/ for host adapters This is part of Milestone 3.1: Legacy Removal in the adapter architecture refactoring. Tests will need to be updated in subsequent commits.
Remove committed report meant to be temporarily
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Document MCPHostStrategy interface, @register_host_strategy decorator, and ClaudeAdapter variant pattern. Clarify validate() deprecation in BaseAdapter Protocol section and update error handling example to use validate_filtered(). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Rewrite Testing Strategy section to document HostSpec, HostRegistry, generator functions, assertion functions, canonical_configs.json structure, steps for adding a new host, and deprecated test files. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Reports: skill design analysis + discovery questionnaire Roadmap: 5 parallel content leaves + packaging step Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
From the `__design__/` to `.claude/`
Replace the sequential tool priority ladder with a parallel research approach: web search, Context7, and codebase retrieval are now used together rather than as ordered fallbacks. Add output file requirements (00-parameter_analysis and 01-architecture_analysis under __reports__/<host-name>/) so discoveries are captured as artifacts rather than only in chat.
The previous pattern r"//[^\n]*" matched // anywhere on a line, including inside JSON string values such as URLs. This corrupted entries like "$schema": "https://opencode.ai/config.json" by stripping the // and everything after it, producing an unterminated string and a JSON parse failure. Anchor the pattern to the start of each line ((?m)^\s*//[^\n]*) so only standalone JSONC comment lines are stripped, leaving // inside string values untouched.
d8f3a75 anchored the pattern in read_configuration but left the same unanchored r"//[^\n]*" in write_configuration's read-before-write block. The unanchored pattern matched // inside URL string values such as "$schema": "https://opencode.ai/config.json", corrupting the JSON, causing silent fallback to empty existing_data and overwriting the config file with only {"mcp": {}}, erasing all other top-level keys. Apply the same fix: r"(?m)^\s*//[^\n]*"
cracking-shells-semantic-release bot
pushed a commit
that referenced
this pull request
Feb 26, 2026
## <small>0.8.1-dev.1 (2026-02-26)</small> * Merge branch 'feat/opencode-mcp-host-support' into dev ([793707d](793707d)) * Merge branch 'milestone/adding-mcp-hosts-skill' into dev ([bce3851](bce3851)) * Merge branch 'task/update-extension-guide' into milestone/mcp-docs-refresh ([d2a0df9](d2a0df9)) * Merge branch 'task/write-adapter-contract' into milestone/adding-mcp-hosts-skill ([c639322](c639322)) * Merge branch 'task/write-skill-md' into milestone/adding-mcp-hosts-skill ([d618f71](d618f71)) * Merge branch 'task/write-strategy-contract' into milestone/adding-mcp-hosts-skill ([13b195c](13b195c)) * Merge branch 'task/write-testing-fixtures' into milestone/adding-mcp-hosts-skill ([3cc4175](3cc4175)) * Merge pull request #47 from LittleCoinCoin/dev ([9d873aa](9d873aa)), closes [#47](#47) * fix(mcp-opencode): anchor JSONC comment regex in write_configuration ([a35d3a2](a35d3a2)) * fix(mcp-opencode): anchor JSONC comment regex to line start ([d8f3a75](d8f3a75)) * fix(mcp-opencode): make serialize() canonical-form; add test fixes ([ee1d915](ee1d915)) * test(mcp-fixtures): add opencode entry to canonical_configs.json ([5ae3b57](5ae3b57)) * test(mcp-fixtures): register opencode in host_registry.py ([734b3c0](734b3c0)) * feat(mcp-adapter): add OpenCodeAdapter with serialize transforms ([28e3bdf](28e3bdf)) * feat(mcp-fields): add OPENCODE_FIELDS constant ([b9ddf43](b9ddf43)) * feat(mcp-models): add opencode oauth fields to MCPServerConfig ([2bae600](2bae600)) * feat(mcp-registry): register OpenCodeAdapter in adapter registry ([20e0fc8](20e0fc8)) * feat(mcp-strategy): add OpenCodeHostStrategy with JSONC read/write ([8bb590a](8bb590a)) * feat(mcp-wiring): add opencode to backup and reporting ([7d0b075](7d0b075)) * feat(skill): add adapter contract reference ([336fced](336fced)) * feat(skill): add discovery guide reference ([8061c5f](8061c5f)) * feat(skill): add strategy contract reference ([cf9b807](cf9b807)) * feat(skill): add testing fixtures reference ([070894c](070894c)) * feat(skill): write SKILL.md with 5-step workflow ([8984a3a](8984a3a)) * docs(adding-mcp-hosts): use parallel research over priority ladder ([6f6165a](6f6165a)) * docs(mcp): document strategy, registration, and variant pattern ([21c30d5](21c30d5)) * docs(mcp): rewrite testing section with data-driven docs ([5fc6f97](5fc6f97)) * docs(mcp): rewrite testing section with data-driven infra ([24c6ebf](24c6ebf)) * docs(mcp): update adapter template to validate_filtered() ([69d61cc](69d61cc)) * docs(mcp): update field support matrix and field mapping documentation ([c08e064](c08e064)) * docs(mcp): update strategy template with interface docs ([0b83b6e](0b83b6e)) * docs(roadmap): add mcp-docs-refresh task files and gap analysis ([896f4d2](896f4d2)) * docs(roadmap): mark adding-mcp-hosts-skill campaign as done ([b7e6c95](b7e6c95)) * docs(roadmap): mark mcp-docs-refresh tasks as done ([fc07cd1](fc07cd1)) * chore: cleanup `__reports__/` ([1056e52](1056e52)) * chore: move skills directory location ([f739fed](f739fed)) * chore: update cs-playbook submodule ([c544cb3](c544cb3)) * chore(roadmap): add adding-mcp-hosts-skill campaign ([e48ea10](e48ea10)) * chore(skill): package adding-mcp-hosts skill ([e5fbfa2](e5fbfa2))
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
~/.config/opencode/opencode.json) with JSONC read/write, OAuth field support, and canonical-form serializationadding-mcp-hostsskill — a Claude Code agent skill that autonomously adds support for any new MCP host platform in 5 structured stepsvalidate_filtered()pipeline, data-driven testing section)Features
OpenCode MCP Host Support
Implements the full adapter + strategy stack for OpenCode, closing the gap left by the existing
MCPHostType.OPENCODEstub.New fields on
MCPServerConfig:opencode_oauth_scope— OAuth scope string for OpenCode provider entriesopencode_oauth_disable— boolean to disable OAuth for a provider entryNew constant:
OPENCODE_FIELDSinfields.py— defines the canonical field set for OpenCode adaptersNew
OpenCodeAdapter(hatch/mcp_host_config/adapters/opencode.py):serialize()produces canonical OpenCode JSON:"type": "local"/"remote"derived from transport,command/argsmerged into list form for local servers,"url"for remote,"oauth"sub-object when OAuth fields are presentvalidate_filtered()enforces thefilter → validate → transformpipeline (invariant from v0.8.0)New
OpenCodeHostStrategy(hatch/mcp_host_config/strategies.py):read_configuration()pre-processes raw OpenCode JSON beforeMCPServerConfigconstruction: splitscommandlists intocommand/args, maps"local"/"remote"type back to"stdio"/"sse"write_configuration()strips JSONC comments before writing, preserves file structureAdapterRegistry,backup.py, andreporting.pyTest coverage:
canonical_configs.jsonandhost_registry.pyadding-mcp-hostsAgent SkillPackages a Claude Code skill that enables an LLM agent to autonomously add support for any new MCP host platform to Hatch, following the same workflow used to add OpenCode.
Skill location:
.claude/skills/adding-mcp-hosts/(packaged to.claude/skills/dist/)5-step workflow encoded in SKILL.md:
FIELDSconstantBaseAdaptersubclass withserialize()andvalidate_filtered()MCPHostStrategysubclass withread_configuration()/write_configuration()Reference files (progressive disclosure):
references/discovery-guide.md— 17-question questionnaire, 3 escalation tiers, Host Spec YAML output formatreferences/adapter-contract.md—BaseAdapterinterface, serialization invariants, canonical patternsreferences/strategy-contract.md—MCPHostStrategyinterface, JSONC handling, read pre-processingreferences/testing-fixtures.md— data-driven fixture registration, canonical config format, auto-generated test matrixDeveloper Experience
MCP Host Configuration Docs Refresh
Aligned both developer docs with current codebase state so the extension guide produces working implementations when followed literally.
Architecture reference (
docs/devs/architecture/mcp_host_configuration.md):validate_filtered()pipeline documented as the authoritative validation flow;validate()marked deprecated with migration path notedtests/test_data/mcp_adapters/data-driven infrastructure,host_registry.pyfixture registration, and auto-generated test matrixExtension guide (
docs/devs/architecture/mcp_host_configuration_extension.md):validate_filtered()interfacehost_registry.pyandcanonical_configs.jsonto get 20+ tests for freeBug Fixes
write_configuration()previously used an unanchored#pattern that could strip#characters from inside string values; regex is now^\\s*#(multiline) so only true comment lines are stripped (fix(mcp-opencode): anchor JSONC comment regex)serialize()canonical form — early implementation passed throughMCPServerConfig.type("stdio"/"sse") directly into the output JSON; corrected to always derive"local"/"remote"from transport type as the OpenCode schema requires