copper-pilot-cli 0.1.8__tar.gz → 0.1.10__tar.gz

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 (167) hide show
  1. copper_pilot_cli-0.1.10/HISTORY.md +420 -0
  2. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/PKG-INFO +27 -5
  3. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/README.md +23 -4
  4. copper_pilot_cli-0.1.10/VERSION +1 -0
  5. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/docs/cli.md +107 -0
  6. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/docs/development.md +14 -1
  7. copper_pilot_cli-0.1.10/docs/harness.md +214 -0
  8. copper_pilot_cli-0.1.10/docs/validate.md +286 -0
  9. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/plugins/copper-pilot/agents/copper-pilot.md +2 -1
  10. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/plugins/copper-pilot/skills/copper-pilot-review/SKILL.md +3 -2
  11. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/pyproject.toml +4 -0
  12. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/skills/copper-pilot-review/SKILL.md +23 -0
  13. copper_pilot_cli-0.1.10/src/copper_pilot_cli/copper_acp.py +1205 -0
  14. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_app.py +16 -2
  15. copper_pilot_cli-0.1.10/src/copper_pilot_cli/copper_background.py +285 -0
  16. copper_pilot_cli-0.1.10/src/copper_pilot_cli/copper_graph.py +533 -0
  17. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_main.py +67 -5
  18. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_mcp.py +102 -3
  19. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_protocol.py +113 -8
  20. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/deepagents_tools.py +36 -2
  21. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/langchain.py +6 -0
  22. copper_pilot_cli-0.1.10/src/copper_pilot_cli/validate/__init__.py +98 -0
  23. copper_pilot_cli-0.1.10/src/copper_pilot_cli/validate/builtins.py +669 -0
  24. copper_pilot_cli-0.1.10/src/copper_pilot_cli/validate/cli.py +333 -0
  25. copper_pilot_cli-0.1.10/src/copper_pilot_cli/validate/config.py +407 -0
  26. copper_pilot_cli-0.1.10/src/copper_pilot_cli/validate/default.yaml +345 -0
  27. copper_pilot_cli-0.1.10/src/copper_pilot_cli/validate/design.py +503 -0
  28. copper_pilot_cli-0.1.10/src/copper_pilot_cli/validate/kicad.py +177 -0
  29. copper_pilot_cli-0.1.10/src/copper_pilot_cli/validate/report.py +335 -0
  30. copper_pilot_cli-0.1.10/src/copper_pilot_cli/validate/reviewer.py +477 -0
  31. copper_pilot_cli-0.1.10/src/copper_pilot_cli/validate/runner.py +739 -0
  32. copper_pilot_cli-0.1.10/tests/test_acp.py +1535 -0
  33. copper_pilot_cli-0.1.10/tests/test_durability.py +683 -0
  34. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_langchain.py +19 -0
  35. copper_pilot_cli-0.1.10/tests/test_main.py +324 -0
  36. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_mcp.py +86 -2
  37. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_release_gates.py +11 -0
  38. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_tui.py +26 -0
  39. copper_pilot_cli-0.1.10/tests/test_validate.py +1603 -0
  40. copper_pilot_cli-0.1.10/tests/test_validate_live.py +38 -0
  41. copper_pilot_cli-0.1.8/HISTORY.md +0 -217
  42. copper_pilot_cli-0.1.8/VERSION +0 -1
  43. copper_pilot_cli-0.1.8/docs/harness.md +0 -120
  44. copper_pilot_cli-0.1.8/src/copper_pilot_cli/copper_graph.py +0 -217
  45. copper_pilot_cli-0.1.8/tests/test_main.py +0 -128
  46. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/.claude-plugin/marketplace.json +0 -0
  47. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/.gitignore +0 -0
  48. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/CODE_OF_CONDUCT.md +0 -0
  49. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/CONTRIBUTING.md +0 -0
  50. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/LICENSE +0 -0
  51. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/NOTICE +0 -0
  52. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/SECURITY.md +0 -0
  53. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/SUPPORT.md +0 -0
  54. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/UPSTREAM.md +0 -0
  55. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/docs/assets/esp32-mini-1-h4.gif +0 -0
  56. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/docs/assets/logo-dark.png +0 -0
  57. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/docs/assets/logo-light.png +0 -0
  58. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/docs/assets/logo.png +0 -0
  59. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/.gitignore +0 -0
  60. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/001_esp32/.copperpilot/PLANS.md +0 -0
  61. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/001_esp32/.copperpilot/README.md +0 -0
  62. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/001_esp32/.copperpilot/TOOLS.md +0 -0
  63. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/001_esp32/.copperpilot/plans/esp32-dev-board.plan.md +0 -0
  64. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/001_esp32/.gitignore +0 -0
  65. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/001_esp32/README.md +0 -0
  66. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/001_esp32/esp32/3d-models/SW-SMD_L3.9-W2.9-H2.0-LS4.8.step +0 -0
  67. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/001_esp32/esp32/3d-models/TYPE-C-31-M-12.step +0 -0
  68. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/001_esp32/esp32/esp32.kicad_pcb +0 -0
  69. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/001_esp32/esp32/esp32.kicad_pro +0 -0
  70. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/001_esp32/esp32/esp32.kicad_sch +0 -0
  71. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/001_esp32/esp32/esp32.png +0 -0
  72. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/001_esp32/helper.py +0 -0
  73. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/001_esp32/main.py +0 -0
  74. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/.copperpilot/PLANS.md +0 -0
  75. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/.copperpilot/README.md +0 -0
  76. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/.copperpilot/plans/cm5-camera-carrier.plan.md +0 -0
  77. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/.gitignore +0 -0
  78. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/README.md +0 -0
  79. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/assembly_spec.json +0 -0
  80. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/3dmodels/CM4.step +0 -0
  81. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/3dmodels/CM5.step +0 -0
  82. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/3dmodels/Camera_IMX219-D160.step +0 -0
  83. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/3dmodels/USB_A_Molex_105057-0001_Vertical.wrl +0 -0
  84. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/3dmodels/USB_A_vertical.step +0 -0
  85. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/CM5.3dshapes/5033981892.stp +0 -0
  86. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/CM5.3dshapes/DF40C-100DS.stp +0 -0
  87. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/CM5.3dshapes/JTHDA-19F08.STEP +0 -0
  88. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/CM5.3dshapes/SRP5030CC.stp +0 -0
  89. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.kicad_dru +0 -0
  90. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.kicad_pcb +0 -0
  91. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.kicad_pro +0 -0
  92. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.kicad_sch +0 -0
  93. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.kicad_sym +0 -0
  94. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.png +0 -0
  95. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/C_0402_1005Metric.kicad_mod +0 -0
  96. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/C_0805_2012Metric.kicad_mod +0 -0
  97. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/Camera_Module_IMX219-D160.kicad_mod +0 -0
  98. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/Crystal_SMD_3225-4Pin_3.2x2.5mm.kicad_mod +0 -0
  99. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/HDMI_Mini-C_Molex_47151-0001.kicad_mod +0 -0
  100. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/LED_0603_1608Metric.kicad_mod +0 -0
  101. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/L_Bourns_SRP5030CC.kicad_mod +0 -0
  102. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/L_CommonModeChoke_Coilank_ACM1210.kicad_mod +0 -0
  103. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/MOLEX_USB_67298-4090.kicad_mod +0 -0
  104. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/Molex_200528-0150_1x15-1MP_P1.00mm_Horizontal.kicad_mod +0 -0
  105. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/PinHeader_1x03_P2.54mm_Vertical.kicad_mod +0 -0
  106. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/PinHeader_2x20_P2.54mm_Vertical.kicad_mod +0 -0
  107. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/R_0402_1005Metric.kicad_mod +0 -0
  108. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/R_0603_1608Metric.kicad_mod +0 -0
  109. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/Raspberry-Pi-4-Compute-Module.kicad_mod +0 -0
  110. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/SDCARD_MOLEX_503398-1892.kicad_mod +0 -0
  111. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/SOT-23-5.kicad_mod +0 -0
  112. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/SW_SPST_PTS645Sx43SMTR92.kicad_mod +0 -0
  113. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/TSOT-23-6.kicad_mod +0 -0
  114. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/Texas_DRT-3.kicad_mod +0 -0
  115. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/UQFN-10_1.4x1.8mm_P0.4mm.kicad_mod +0 -0
  116. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_Horizontal.kicad_mod +0 -0
  117. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera_bottom.png +0 -0
  118. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/fp-lib-table +0 -0
  119. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/sym-lib-table +0 -0
  120. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/generate_3d_models.py +0 -0
  121. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/helper.py +0 -0
  122. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/main.py +0 -0
  123. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/plugins/copper-pilot/.claude-plugin/plugin.json +0 -0
  124. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/plugins/copper-pilot/.mcp.json +0 -0
  125. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/__init__.py +0 -0
  126. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/__main__.py +0 -0
  127. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/_upstream/__init__.py +0 -0
  128. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/_upstream/dcode_0_1_69/PROVENANCE.json +0 -0
  129. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/_upstream/dcode_0_1_69/__init__.py +0 -0
  130. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/_upstream/dcode_0_1_69/diff_utils.py +0 -0
  131. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/_version.py +0 -0
  132. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/clipboard.py +0 -0
  133. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_api.py +0 -0
  134. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_auth.py +0 -0
  135. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_config.py +0 -0
  136. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_features.py +0 -0
  137. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_hooks.py +0 -0
  138. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_preferences.py +0 -0
  139. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_presentation.py +0 -0
  140. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_status_events.py +0 -0
  141. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_theme.py +0 -0
  142. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_tools.py +0 -0
  143. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_update.py +0 -0
  144. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_widgets.py +0 -0
  145. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_workspace.py +0 -0
  146. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/diagnostics.py +0 -0
  147. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/media_utils.py +0 -0
  148. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/py.typed +0 -0
  149. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/sessions.py +0 -0
  150. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/textual_patches.py +0 -0
  151. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_auth.py +0 -0
  152. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_clipboard.py +0 -0
  153. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_cm5_camera_example.py +0 -0
  154. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_copper_api.py +0 -0
  155. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_e2e.py +0 -0
  156. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_esp32_example.py +0 -0
  157. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_features.py +0 -0
  158. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_live_chat_e2e.py +0 -0
  159. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_plugin_manifest.py +0 -0
  160. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_preferences.py +0 -0
  161. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_presentation.py +0 -0
  162. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_protocol.py +0 -0
  163. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_sessions.py +0 -0
  164. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_status_events.py +0 -0
  165. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_tools.py +0 -0
  166. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_upstream_provenance.py +0 -0
  167. {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_workspace.py +0 -0
@@ -0,0 +1,420 @@
1
+ Changelog
2
+ =========
3
+
4
+
5
+ (unreleased)
6
+ ------------
7
+
8
+ Fix
9
+ ~~~
10
+ - Skip the killed-background resume test on Windows. [AdityaNG, Cursor]
11
+
12
+ os.killpg is POSIX-only, and that failure was the Windows CI break.
13
+ - Resume the agent when a background shell already exited. [AdityaNG,
14
+ Cursor]
15
+
16
+ The continuation turn only ran while a background command was still alive, so a search that finished during the rest of the turn never woke the agent.
17
+
18
+ Other
19
+ ~~~~~
20
+ - Merge pull request #23 from CopperPilot/feat/acp-image-prompts.
21
+ [Aditya]
22
+
23
+ feat(acp): accept image prompts
24
+ - Feat(acp): accept image prompts. [AdityaNG, Cursor]
25
+
26
+ T3 Code refused to start any ACP turn that carried an image because initialize never advertised promptCapabilities.image, and prompt() dropped image blocks anyway. Advertise image support, save each image block under .copperpilot/attachments, pass it as a path-first runtime attachment like the TUI does, and list the saved paths in the query so the agent reads the workspace copy.
27
+ - Merge pull request #22 from CopperPilot/fix/resume-finished-
28
+ background-shell. [Aditya]
29
+
30
+ fix: resume the agent when a background shell already exited
31
+ - Merge pull request #21 from CopperPilot/feat/validate. [Aditya]
32
+
33
+ feat: copper-pilot validate, a stage-gated read-only review graph
34
+ - Fix(validate): default reviewers to agent mode and pass Windows CI.
35
+ [AdityaNG, Cursor]
36
+
37
+ Agent mode is the better default for hosted reviewers; the read-only broker still blocks design writes. Windows treated POSIX virtual paths and library URIs as relative, and os.kill(SIGTERM) aborted pytest before it could report.
38
+ - Fix(validate): enforce reviewer.timeout_s and treat SIGTERM like
39
+ Ctrl-C. [AdityaNG, Claude Fable 5.1]
40
+
41
+ A hosted architecture review on a 68-part board outlived an external
42
+ timeout(1) wrapper; SIGTERM killed the process with no report, and the
43
+ graph's reviewer.timeout_s had never been applied. Each reviewer slice now
44
+ runs under asyncio.timeout(reviewer.timeout_s) and times out as an ERROR,
45
+ and the CLI maps SIGTERM onto the same partial-report path as Ctrl-C.
46
+ - Fix(validate): scope release.repo to the project folder; tolerate
47
+ markdown escapes in replies. [AdityaNG, Claude Fable 5.1]
48
+
49
+ Running validate on a repository that keeps generated boards outside the
50
+ KiCad project (video/build/tmp_pcbs) counted them as portability failures.
51
+ The workspace walker now skips the same build/dist/node_modules folders as
52
+ discover_workspace, and release.repo only scans the project folder.
53
+
54
+ A live sch.ratings reviewer wrote '\*' inside JSON strings, which is not a
55
+ JSON escape and cost a repair turn; invalid escapes are now dropped before
56
+ the repair path is used.
57
+ - Feat(validate): explain, --context, Python validate() API, and live
58
+ test. [AdityaNG, Claude Fable 5.1]
59
+
60
+ Add copper-pilot validate explain CHECK_ID (config, rendered prompt, input
61
+ hashes, last result), --context FILE ... (appended to every reviewer prompt
62
+ under Reference material and folded into the cache key), the
63
+ copper_pilot_cli.validate.validate()/avalidate() API returning a
64
+ ValidationReport, and a pytest -m live end-to-end run of validate --until S2
65
+ on examples/001_esp32.
66
+ - Feat(validate): --json events, --junit, --emit-fix-prompt, MCP
67
+ validate tool, skill and docs. [AdityaNG, Claude Fable 5.1]
68
+
69
+ Stream validate.start/check/result/end events (plus copper.retry pass-through)
70
+ with --json, write JUnit XML with --junit (FAIL/ERROR -> failure/error,
71
+ SKIPPED -> skipped naming the blocker, WARN -> system-out), and print a
72
+ ready fix message for copper-pilot --mode agent with --emit-fix-prompt.
73
+ Expose validate(workspace?, profile?, gate?, until?, only?, effort?,
74
+ no_cache?) on the MCP server with per-check progress and the fixed read-only
75
+ reviewer policy. Add a Validate section to the review skill and plugin,
76
+ docs/validate.md, and the CLI reference with the exit-code table.
77
+ - Feat(validate): hosted agent reviewers with read-only broker,
78
+ grounding and consensus. [AdityaNG, Claude Fable 5.1]
79
+
80
+ Add the reviewer adapter: each agent check runs CopperPilot in Ask mode
81
+ against a read-only snapshot of the workspace through a Manual broker whose
82
+ policy approves reads, scratch-folder writes and non-dangerous shell only.
83
+ The snapshot is re-hashed after every check; any change outside scratch is
84
+ an ERROR. Replies must end with a fenced json findings block (two repair
85
+ turns, then ERROR); findings are grounded against the design index and
86
+ ungrounded ones can never fail a check. per_part, per_sheet and per_netclass
87
+ checks fan out in batches, repeat: N takes a majority consensus, and a
88
+ non-retryable usage-limit block stops scheduling agent checks and exits 4.
89
+ default.yaml gains the agent checks for S1-S8 and the CLI gains --effort,
90
+ --concurrency and --repeat.
91
+ - Feat(validate): engine, builtin checks, reports, and validate
92
+ list|graph|run. [AdityaNG, Claude Fable 5.1]
93
+
94
+ Add the copper-pilot validate subcommand: a stage-gated graph of read-only
95
+ checks loaded from a packaged default.yaml and extended by
96
+ .copperpilot/validate.yaml. This slice ships the engine (config models and
97
+ graph validation, design snapshot/hash/index, kicad-cli wrappers, dependency
98
+ waves, stage/full/strict gating, result cache) with the deterministic builtin
99
+ checks (intake.tools, intake.project, intake.intent, parts.bom_fields,
100
+ sch.erc, pcb.parity, pcb.rules, pcb.drc, release.outputs, release.repo) and
101
+ writes report.json, REPORT.md and next_actions.json under
102
+ .copperpilot/validate/runs/<id>/ with a latest pointer.
103
+ - Merge pull request #20 from CopperPilot/feat/acp-session-updates.
104
+ [Aditya]
105
+
106
+ feat(acp): usage, plan, subagent, elicitation, and /effort session updates
107
+ - Merge origin/main into feat/acp-session-updates. [AdityaNG, Claude
108
+ Fable 5.1]
109
+ - Merge pull request #19 from CopperPilot/feat/client-turn-durability.
110
+ [Aditya]
111
+
112
+ feat: make hosted turns durable across transport drops
113
+ - Fix(background): normalize CRLF shell output on Windows. [AdityaNG,
114
+ Claude Fable 5.1]
115
+ - Feat: make hosted turns durable across transport drops. [AdityaNG,
116
+ Claude Fable 5.1]
117
+
118
+ Port the desktop client's chat-manager resilience into the shared graph
119
+ node so every front-end (TUI, headless, MCP, ACP) benefits:
120
+
121
+ - Retry a dropped stream up to three times with 5/10/20 s backoff and a
122
+ stitched "Resume where we left off" re-prompt carrying the partial
123
+ transcript, so the hosted agent continues instead of restarting.
124
+ - Classify failures like `_categorizeError`: drops, timeouts, 5xx and 429
125
+ retry; 4xx, invalid/oversized requests, plan refusals and auth fail fast.
126
+ - Capture the websocket close code and reason in the error message and log,
127
+ including drops that happen while a tool result is being sent.
128
+ - Checkpoint partial progress (text, tool calls, results) on a terminal
129
+ failure or cancellation with a hidden interruption note, so a later
130
+ manual "continue" has the prior work in context.
131
+ - Surface retry progress as `copper.retry` events: ACP agent thoughts, TUI
132
+ status/notification, headless yellow lines, MCP progress.
133
+ - Honour the desktop foreground-to-background shell contract: commands
134
+ outliving their timeout keep running, the turn continues, and their
135
+ output is fed back in a continuation turn after the final frame.
136
+ - Drop the 300 s idle-frame timeout; websocket keepalive still detects dead
137
+ peers and long hosted reasoning no longer trips a client limit.
138
+ - Fix the ACP cancel race where a server close after `session/cancel`
139
+ surfaced as an error instead of `cancelled`.
140
+ - Fix(acp): read slash commands from the first prompt block. [AdityaNG,
141
+ Claude Fable 5.1]
142
+
143
+ T3 Code appends runtime context as a second text block, so /effort was
144
+ reaching the hosted agent instead of being answered locally.
145
+ - Fix(acp): elicit option questions, unwrap T3 prompts, bound question
146
+ waits. [AdityaNG, Claude Fable 5.1]
147
+
148
+ T3 Code in Full access auto-selects the first option of a permission prompt,
149
+ so clarifying questions with options now use form elicitation (enum) when the
150
+ client supports it. /effort is recognised inside T3's <user_request> envelope.
151
+ Questions nobody answers within 100 seconds are skipped with a note, because
152
+ the hosted service drops a turn whose tool result takes longer than two minutes.
153
+ - Feat(acp): usage, plan, subagent, elicitation, and /effort updates.
154
+ [AdityaNG, Claude Fable 5.1]
155
+
156
+ Emit usage_update from hosted token counts so T3 Code's context meter works,
157
+ project hosted todo_list events and .copperpilot/plans artifacts onto ACP plan
158
+ entries, render Intelligence survey workers as think tool calls, collect
159
+ free-text clarifications through ACP form elicitation when the client supports
160
+ it, and advertise a locally handled /effort command.
161
+
162
+
163
+ 0.1.9 (2026-10-16)
164
+ ------------------
165
+ - Release: version 0.1.9 🚀 [AdityaNG]
166
+ - Merge pull request #18 from CopperPilot/feat/acp-server. [Aditya]
167
+
168
+ feat: add `copper-pilot acp` Agent Client Protocol server
169
+ - Fix(acp): surface hosted turn failures in the JSON-RPC error message.
170
+ [AdityaNG, Claude Fable 5.1]
171
+
172
+ T3 Code showed a bare "Internal error" for a prompt the hosted service
173
+ had refused with "Upgrade to a paid plan to use Intelligence." because the
174
+ explanation only lived in the error's `data`, which T3 does not display.
175
+ Carry the hosted message in the error `message` (keeping the code), map a
176
+ refused websocket handshake to auth_required when it is 401/403, log every
177
+ failed turn to the diagnostics log, and never let an unexpected exception
178
+ escape to the SDK's generic handler.
179
+ - Fix(acp): accept `copper-pilot acp auth login` for clients that append
180
+ login args. [AdityaNG, Claude Fable 5.1]
181
+
182
+ T3 Code runs an ACP terminal auth method by appending the method's args to
183
+ the configured agent command, so the advertised `auth login` was spawned as
184
+ `copper-pilot acp auth login`. The acp parser rejected the extra arguments
185
+ with exit code 2 and T3 reported "The provider login command did not finish
186
+ successfully." Normalize `acp auth ...` onto `auth ...` before parsing and
187
+ document the alias.
188
+ - Feat: add `copper-pilot acp` Agent Client Protocol server. [AdityaNG,
189
+ Claude Fable 5.1]
190
+
191
+ Serve the hosted CopperPilot agent over ACP stdio so editors such as Zed
192
+ can drive it with streaming messages, tool calls, permission prompts,
193
+ session modes (ask/plan/agent), an effort config option, session/load
194
+ resume of existing threads, and session/cancel.
195
+
196
+ - New copper_acp.py built directly on the agent-client-protocol SDK;
197
+ approvals and clarifying questions map onto session/request_permission.
198
+ - `acp` optional extra; the command prints an install hint without it.
199
+ - CI license gate ignores agent-client-protocol (Apache-2.0 LICENSE file,
200
+ no license metadata in the wheel).
201
+ - Tests: tests/test_acp.py (100% coverage of copper_acp.py, including a
202
+ real stdio JSON-RPC round trip), parser and entrypoint tests, and a
203
+ release-gate check for the extra.
204
+ - Docs: cli.md, harness.md (Zed setup), README.
205
+
206
+
207
+ 0.1.8 (2026-10-14)
208
+ ------------------
209
+
210
+ Fix
211
+ ~~~
212
+ - Annotate async context managers for ty 0.0.87. [AdityaNG]
213
+
214
+ CI resolves the unpinned ty dependency to 0.0.87, which rejects AsyncIterator returns on asynccontextmanager.
215
+ - Upgrade the pinned Deep Agents runtime to 0.7.19. [AdityaNG]
216
+
217
+ Keep the exact runtime pin while picking up the filesystem and media-handling fixes from 0.7.14.
218
+ - Align the CLI with hosted usage limits. [AdityaNG]
219
+
220
+ Keep blocked turns machine-readable, shrink oversized resumed chats to the desktop frame budget, and report the installed client version.
221
+
222
+ Other
223
+ ~~~~~
224
+ - Release: version 0.1.8 🚀 [AdityaNG]
225
+ - Merge pull request #16 from CopperPilot/update/14_oct_2026. [Aditya]
226
+
227
+ Add Intelligence effort, hosted survey workers, and modal keyboard focus
228
+ - Fix(tests/test_tui.py) [AdityaNG]
229
+ - Feat(src/copper_pilot_cli/copper_status_events.py) [AdityaNG]
230
+ - Merge pull request #3 from
231
+ CopperPilot/dependabot/github_actions/softprops/action-gh-release-3.
232
+ [Aditya]
233
+
234
+ build(deps): bump softprops/action-gh-release from 2 to 3
235
+ - Build(deps): bump softprops/action-gh-release from 2 to 3.
236
+ [dependabot[bot]]
237
+
238
+ Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2 to 3.
239
+ - [Release notes](https://github.com/softprops/action-gh-release/releases)
240
+ - [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
241
+ - [Commits](https://github.com/softprops/action-gh-release/compare/v2...v3)
242
+
243
+ ---
244
+ updated-dependencies:
245
+ - dependency-name: softprops/action-gh-release
246
+ dependency-version: '3'
247
+ dependency-type: direct:production
248
+ update-type: version-update:semver-major
249
+ ...
250
+ - Merge pull request #4 from CopperPilot/dependabot/pip/websockets-
251
+ gte-15-and-lt-18. [Aditya]
252
+
253
+ build(deps): update websockets requirement from <17,>=15 to >=15,<18
254
+ - Build(deps): update websockets requirement from <17,>=15 to >=15,<18.
255
+ [dependabot[bot]]
256
+
257
+ Updates the requirements on [websockets](https://github.com/python-websockets/websockets) to permit the latest version.
258
+ - [Release notes](https://github.com/python-websockets/websockets/releases)
259
+ - [Commits](https://github.com/python-websockets/websockets/compare/15.0...17.1)
260
+
261
+ ---
262
+ updated-dependencies:
263
+ - dependency-name: websockets
264
+ dependency-version: '17.1'
265
+ dependency-type: direct:production
266
+ ...
267
+ - Merge pull request #5 from CopperPilot/dependabot/pip/uuid-utils-
268
+ gte-0.12-and-lt-2. [Aditya]
269
+
270
+ build(deps): update uuid-utils requirement from <1,>=0.12 to >=0.12,<2
271
+ - Build(deps): update uuid-utils requirement from <1,>=0.12 to
272
+ >=0.12,<2. [dependabot[bot]]
273
+
274
+ Updates the requirements on [uuid-utils](https://github.com/aminalaee/uuid-utils) to permit the latest version.
275
+ - [Release notes](https://github.com/aminalaee/uuid-utils/releases)
276
+ - [Commits](https://github.com/aminalaee/uuid-utils/compare/0.12.0...1.0.0)
277
+
278
+ ---
279
+ updated-dependencies:
280
+ - dependency-name: uuid-utils
281
+ dependency-version: 1.0.0
282
+ dependency-type: direct:production
283
+ ...
284
+ - Merge pull request #2 from
285
+ CopperPilot/dependabot/github_actions/actions/setup-python-7. [Aditya]
286
+
287
+ build(deps): bump actions/setup-python from 5 to 7
288
+ - Build(deps): bump actions/setup-python from 5 to 7. [dependabot[bot]]
289
+
290
+ Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 7.
291
+ - [Release notes](https://github.com/actions/setup-python/releases)
292
+ - [Commits](https://github.com/actions/setup-python/compare/v5...v7)
293
+
294
+ ---
295
+ updated-dependencies:
296
+ - dependency-name: actions/setup-python
297
+ dependency-version: '7'
298
+ dependency-type: direct:production
299
+ update-type: version-update:semver-major
300
+ ...
301
+ - Merge pull request #13 from
302
+ CopperPilot/update/deepagents_0_7_19_3_oct. [Aditya]
303
+
304
+ Upgrade the pinned Deep Agents runtime to 0.7.19
305
+ - Merge pull request #1 from
306
+ CopperPilot/dependabot/github_actions/actions/checkout-7. [Aditya]
307
+
308
+ build(deps): bump actions/checkout from 4 to 7
309
+ - Build(deps): bump actions/checkout from 4 to 7. [dependabot[bot]]
310
+
311
+ Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 7.
312
+ - [Release notes](https://github.com/actions/checkout/releases)
313
+ - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
314
+ - [Commits](https://github.com/actions/checkout/compare/v4...v7)
315
+
316
+ ---
317
+ updated-dependencies:
318
+ - dependency-name: actions/checkout
319
+ dependency-version: '7'
320
+ dependency-type: direct:production
321
+ update-type: version-update:semver-major
322
+ ...
323
+ - Merge pull request #12 from
324
+ CopperPilot/update/contract_alignment_3_oct. [Aditya]
325
+
326
+ Align the CLI with hosted usage limits
327
+
328
+
329
+ 0.1.7 (2026-10-03)
330
+ ------------------
331
+ - Release: version 0.1.7 🚀 [AdityaNG]
332
+ - Merge pull request #11 from
333
+ CopperPilot/feat/python_versions_support_expansion. [Aditya]
334
+
335
+ Support Python 3.11 and future releases
336
+ - Ci: probe Python 3.15 weekly instead of on pull requests. [AdityaNG]
337
+
338
+ Keep the upstream install failure visible without turning required pull request checks red.
339
+ - Feat(py11) [AdityaNG]
340
+ - Merge pull request #7 from CopperPilot/feat/example_002_cm5_camera.
341
+ [Aditya]
342
+
343
+ feat(examples/002_cm5_camera): add 3D pose audit and generated carrier
344
+ - Fix(examples/002_cm5_camera): render the README PCB as a dimetric 3D
345
+ view. [AdityaNG, Cursor]
346
+
347
+ Use an orthogonal high-quality camera with a slight isometric tilt so the
348
+ hero PNG shows connector height instead of a flat top-down shot.
349
+ - Fix(examples/002_cm5_camera): skip library dirs relative to the
350
+ workspace. [AdityaNG, Cursor]
351
+
352
+ Absolute path parts named tmp (Linux /tmp pytest roots) were skipping the
353
+ entire haystack, so libraries_ready failed on Ubuntu CI.
354
+ - Feat(examples/002_cm5_camera): add 3D pose audit and generated
355
+ carrier. [AdityaNG, Cursor]
356
+
357
+ Lock connector 3D offsets, Module1 pad orientation, and the generated
358
+ KiCad project so the example reproduces NANO-C assembly parity.
359
+ - Feat(examples/002_cm5_camera/main.py): new example. [AdityaNG]
360
+
361
+
362
+ 0.1.6 (2026-09-18)
363
+ ------------------
364
+ - Release: version 0.1.6 🚀 [AdityaNG]
365
+ - Merge pull request #6 from CopperPilot/feat/plugins. [Aditya]
366
+
367
+ feat: add MCP conductor and Claude Code plugin
368
+ - Clarify server restrictions in PR template. [Aditya]
369
+
370
+ Updated checklist item to clarify server restrictions.
371
+ - Feat: add MCP conductor and Claude Code plugin. [AdityaNG, Cursor]
372
+
373
+ Let Claude Code, Cursor, and Codex delegate electronics work to the hosted agent via copper-pilot mcp, a portable review skill, and an in-repo plugin.
374
+
375
+
376
+ 0.1.5 (2026-09-17)
377
+ ------------------
378
+ - Release: version 0.1.5 🚀 [AdityaNG]
379
+ - Fix(README.md) [AdityaNG]
380
+
381
+
382
+ 0.1.4 (2026-09-17)
383
+ ------------------
384
+ - Release: version 0.1.4 🚀 [AdityaNG]
385
+ - Fix(tests/test_release_gates.py) [AdityaNG]
386
+
387
+
388
+ 0.1.3 (2026-09-17)
389
+ ------------------
390
+ - Release: version 0.1.3 🚀 [AdityaNG]
391
+ - Docs. [AdityaNG]
392
+
393
+
394
+ 0.1.2 (2026-09-17)
395
+ ------------------
396
+ - Release: version 0.1.2 🚀 [AdityaNG]
397
+ - Ci(pyproject.toml) [AdityaNG]
398
+ - Fix(tests/test_tui.py) [AdityaNG]
399
+
400
+
401
+ 0.1.1 (2026-09-17)
402
+ ------------------
403
+ - Release: version 0.1.1 🚀 [AdityaNG]
404
+
405
+
406
+ 0.1.0 (2026-09-17)
407
+ ------------------
408
+ - Release: version 0.1.0 🚀 [AdityaNG]
409
+ - Fix(tests/test_release_gates.py) [AdityaNG]
410
+ - Test. [AdityaNG]
411
+ - Docs. [AdityaNG]
412
+ - Docs. [AdityaNG]
413
+ - Example(examples/001_esp32/) [AdityaNG]
414
+ - Makefile. [AdityaNG]
415
+ - Ci. [AdityaNG]
416
+ - Docs. [AdityaNG]
417
+ - Refactor(name) [AdityaNG]
418
+ - Init. [AdityaNG]
419
+
420
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: copper-pilot-cli
3
- Version: 0.1.8
3
+ Version: 0.1.10
4
4
  Summary: CopperPilot hosted agent for the terminal and LangChain
5
5
  Project-URL: Homepage, https://copperpilot.ai
6
6
  Project-URL: Repository, https://github.com/CopperPilot/copper-pilot-cli
@@ -37,7 +37,10 @@ Requires-Dist: rich<16,>=15
37
37
  Requires-Dist: textual<9,>=8.2.8
38
38
  Requires-Dist: uuid-utils<2,>=0.12
39
39
  Requires-Dist: websockets<18,>=15
40
+ Provides-Extra: acp
41
+ Requires-Dist: agent-client-protocol<1,>=0.12; extra == 'acp'
40
42
  Provides-Extra: dev
43
+ Requires-Dist: agent-client-protocol<1,>=0.12; extra == 'dev'
41
44
  Requires-Dist: build<2,>=1.4; extra == 'dev'
42
45
  Requires-Dist: gitchangelog==3.0.4; extra == 'dev'
43
46
  Requires-Dist: pip-audit<3,>=2.10; extra == 'dev'
@@ -119,6 +122,22 @@ Balanced effort is the default. Paid-plan users can select Intelligence with
119
122
  server-owned survey subagents and shows their lifecycle through the existing
120
123
  Deep Agents task rows; Intelligence Plan turns survey before writing a plan.
121
124
 
125
+ ## Validate
126
+
127
+ ```console
128
+ copper-pilot validate ./my-board
129
+ ```
130
+
131
+ Runs a stage-gated graph of read-only reviewers over the KiCad workspace:
132
+ `kicad-cli` checks (ERC, DRC, schematic parity, board rules, Gerbers) plus
133
+ hosted Agent-mode reviewers, each scoped to one concern, in the order a hardware
134
+ engineer reviews a board. It never edits design files. The verdict, a
135
+ `REPORT.md`, and `next_actions.json` (only the earliest failing stage, worst
136
+ first) land in `.copperpilot/validate/latest/`; `--emit-fix-prompt` prints a
137
+ ready message for `copper-pilot --mode agent`. Exit codes: 0 pass, 1 fail,
138
+ 2 config error, 3 incomplete, 4 not logged in or usage limit. See
139
+ [docs/validate.md](docs/validate.md).
140
+
122
141
  ## Use from Claude Code, Cursor, or Codex
123
142
 
124
143
  CopperPilot stays the electronics agent. Copy
@@ -136,9 +155,11 @@ Claude Code can also install the in-repo plugin:
136
155
  /plugin install copper-pilot
137
156
  ```
138
157
 
139
- That plugin starts `copper-pilot mcp` and adds `@copper-pilot` plus
140
- `/copper-pilot-review`. Setup for Cursor, Codex, and approvals:
141
- [docs/harness.md](docs/harness.md).
158
+ That plugin starts `copper-pilot mcp` (tools `status`, `ask`, `plan`, `run`,
159
+ `resume`, `threads_list`, `validate`) and adds `@copper-pilot` plus
160
+ `/copper-pilot-review`. Editors that speak the Agent Client Protocol, such as
161
+ Zed, can run `copper-pilot acp` after `pip install "copper-pilot-cli[acp]"`.
162
+ Setup for Cursor, Codex, Zed, and approvals: [docs/harness.md](docs/harness.md).
142
163
 
143
164
  ## Configuration
144
165
 
@@ -197,7 +218,8 @@ normalizes hosted tool names, approval decisions, and result envelopes.
197
218
  Computer use, model/provider selection, local model execution, LangSmith
198
219
  tracing, content telemetry, MCP **host**/plugin-runtime controls, and server
199
220
  implementation code are not part of this package. A thin MCP **server**
200
- (`copper-pilot mcp`) that delegates to the hosted agent is.
221
+ (`copper-pilot mcp`) and an ACP **server** (`copper-pilot acp`) that delegate
222
+ to the hosted agent are.
201
223
 
202
224
  See [UPSTREAM.md](UPSTREAM.md) and [NOTICE](NOTICE) for the retained Textual
203
225
  client attribution.
@@ -68,6 +68,22 @@ Balanced effort is the default. Paid-plan users can select Intelligence with
68
68
  server-owned survey subagents and shows their lifecycle through the existing
69
69
  Deep Agents task rows; Intelligence Plan turns survey before writing a plan.
70
70
 
71
+ ## Validate
72
+
73
+ ```console
74
+ copper-pilot validate ./my-board
75
+ ```
76
+
77
+ Runs a stage-gated graph of read-only reviewers over the KiCad workspace:
78
+ `kicad-cli` checks (ERC, DRC, schematic parity, board rules, Gerbers) plus
79
+ hosted Agent-mode reviewers, each scoped to one concern, in the order a hardware
80
+ engineer reviews a board. It never edits design files. The verdict, a
81
+ `REPORT.md`, and `next_actions.json` (only the earliest failing stage, worst
82
+ first) land in `.copperpilot/validate/latest/`; `--emit-fix-prompt` prints a
83
+ ready message for `copper-pilot --mode agent`. Exit codes: 0 pass, 1 fail,
84
+ 2 config error, 3 incomplete, 4 not logged in or usage limit. See
85
+ [docs/validate.md](docs/validate.md).
86
+
71
87
  ## Use from Claude Code, Cursor, or Codex
72
88
 
73
89
  CopperPilot stays the electronics agent. Copy
@@ -85,9 +101,11 @@ Claude Code can also install the in-repo plugin:
85
101
  /plugin install copper-pilot
86
102
  ```
87
103
 
88
- That plugin starts `copper-pilot mcp` and adds `@copper-pilot` plus
89
- `/copper-pilot-review`. Setup for Cursor, Codex, and approvals:
90
- [docs/harness.md](docs/harness.md).
104
+ That plugin starts `copper-pilot mcp` (tools `status`, `ask`, `plan`, `run`,
105
+ `resume`, `threads_list`, `validate`) and adds `@copper-pilot` plus
106
+ `/copper-pilot-review`. Editors that speak the Agent Client Protocol, such as
107
+ Zed, can run `copper-pilot acp` after `pip install "copper-pilot-cli[acp]"`.
108
+ Setup for Cursor, Codex, Zed, and approvals: [docs/harness.md](docs/harness.md).
91
109
 
92
110
  ## Configuration
93
111
 
@@ -146,7 +164,8 @@ normalizes hosted tool names, approval decisions, and result envelopes.
146
164
  Computer use, model/provider selection, local model execution, LangSmith
147
165
  tracing, content telemetry, MCP **host**/plugin-runtime controls, and server
148
166
  implementation code are not part of this package. A thin MCP **server**
149
- (`copper-pilot mcp`) that delegates to the hosted agent is.
167
+ (`copper-pilot mcp`) and an ACP **server** (`copper-pilot acp`) that delegate
168
+ to the hosted agent are.
150
169
 
151
170
  See [UPSTREAM.md](UPSTREAM.md) and [NOTICE](NOTICE) for the retained Textual
152
171
  client attribution.
@@ -0,0 +1 @@
1
+ 0.1.10
@@ -7,6 +7,8 @@ copper-pilot --help
7
7
  copper-pilot auth --help
8
8
  copper-pilot threads --help
9
9
  copper-pilot mcp --help
10
+ copper-pilot acp --help
11
+ copper-pilot validate --help
10
12
  ```
11
13
 
12
14
  Python 3.11 or newer is required. Install with `pip install copper-pilot-cli`.
@@ -49,6 +51,39 @@ Headless mode is also used when `--message` is set and stdout is not a TTY.
49
51
  With `--json --no-stream`, the document includes `thread_id` so a later run can
50
52
  pass `--resume`.
51
53
 
54
+ ## Validate
55
+
56
+ ```console
57
+ copper-pilot validate [workspace] [--profile dev|release] [--gate stage|full|strict]
58
+ [--until STAGE] [--only ID,...] [--skip ID,...] [--json] [--junit PATH]
59
+ copper-pilot validate list|graph [workspace]
60
+ copper-pilot validate explain CHECK_ID [workspace]
61
+ ```
62
+
63
+ Runs a stage-gated graph of read-only reviewers: `kicad-cli` checks (ERC,
64
+ DRC, parity, rules, Gerbers) and hosted Agent-mode reviewers scoped to one
65
+ concern each, in the order a hardware engineer reviews (intake, architecture,
66
+ parts, schematic, netlist-to-layout, placement, routing, DFM/DFA, release).
67
+ It never modifies design files. Outputs land in `.copperpilot/validate/latest/`:
68
+ `report.json`, `REPORT.md`, and `next_actions.json` (only the earliest failing
69
+ stage, worst first). Uses the stored credential; never opens a browser.
70
+
71
+ | Code | Meaning |
72
+ |------|---------|
73
+ | 0 | PASS: every selected check is PASS or WARN |
74
+ | 1 | FAIL: at least one blocking FAIL or ERROR |
75
+ | 2 | Usage or config error: bad flags, invalid YAML, a dependency cycle |
76
+ | 3 | INCOMPLETE: no failures, but checks were SKIPPED because of `--gate`, `--until` or `--only` |
77
+ | 4 | Environment: not logged in, or a usage-limit block |
78
+
79
+ ```console
80
+ copper-pilot validate ./my-board --json --gate stage
81
+ copper-pilot validate ./my-board --until S3 --emit-fix-prompt
82
+ copper-pilot validate ./my-board --profile release --gate full --junit validate.xml
83
+ ```
84
+
85
+ Flags, config, the default graph and the fix loop: [validate.md](validate.md).
86
+
52
87
  ## MCP
53
88
 
54
89
  ```console
@@ -67,10 +102,50 @@ write to stdout; the protocol owns it.
67
102
  | `run` | `--mode agent`. Optional `effort`; `approval` is `auto` (default) or `yolo`. |
68
103
  | `resume` | Continue `thread_id`. Optional `mode`, `effort`, and the same approval as `run`. |
69
104
  | `threads_list` | List threads for this workspace (`limit`, `all_workspaces`). |
105
+ | `validate` | Read-only stage-gated review; returns `verdict`, `exit_code`, `report_path`, `next_actions`. |
70
106
 
71
107
  Workspace is the tool argument, else `CLAUDE_PROJECT_DIR`, else the process
72
108
  current directory. Manual approval is TUI-only. See [harness.md](harness.md).
73
109
 
110
+ ## ACP
111
+
112
+ ```console
113
+ pip install "copper-pilot-cli[acp]"
114
+ copper-pilot acp
115
+ ```
116
+
117
+ Serves the Agent Client Protocol over stdio for editors such as Zed. The
118
+ `acp` extra is optional; without it the command prints an install hint and
119
+ exits with status 2. `copper-pilot acp auth login` is accepted as an alias for
120
+ `copper-pilot auth login`, because some ACP clients (T3 Code) run the
121
+ advertised login method by appending its arguments to the agent command. One ACP session is one CopperPilot thread, and the
122
+ session `cwd` is the workspace. Uses the stored device-login credential and
123
+ advertises a terminal auth method that runs `copper-pilot auth login`.
124
+
125
+ | ACP feature | CopperPilot behavior |
126
+ |-------------|----------------------|
127
+ | Session modes | `ask`, `plan`, `agent` (default `agent`) |
128
+ | Config options | `mode` and `effort` (`balanced` default, `intelligence` paid) |
129
+ | `session/load` | Resumes an existing thread id and replays its history |
130
+ | `session/request_permission` | Auto approval; non-routine writes and shell prompt the editor |
131
+ | `elicitation/create` | Clarifying questions (options or free text) when the client advertises form elicitation |
132
+ | `session/cancel` | Cancels the hosted turn and local tools |
133
+ | `usage_update` | Prompt tokens of the latest hosted turn; window size is unknown (0) |
134
+ | `plan` | Hosted todo list events and `.copperpilot/plans/*.plan.md` todos |
135
+ | `available_commands_update` | `/effort balanced\|intelligence`, answered locally |
136
+
137
+ "Allow all for this session" switches that session to YOLO until the server
138
+ exits; it is never saved. Clarifying questions use ACP form elicitation when
139
+ the client supports it (T3 Code does): options become an enum, free text a
140
+ string field. Without form elicitation, option questions are shown as
141
+ permission choices plus Skip and free-text questions are declined with a
142
+ message to continue in the TUI. A question nobody answers within 100 seconds
143
+ is skipped with a note asking the model to repeat it in its reply, because the
144
+ hosted service drops a turn whose tool result takes longer than two minutes.
145
+ Intelligence survey workers appear as `think` tool calls named
146
+ `Survey: <task>` whose status and output track the worker.
147
+ See [harness.md](harness.md).
148
+
74
149
  ## Effort and Intelligence
75
150
 
76
151
  Balanced is the default. Intelligence is available on paid plans and lets the
@@ -138,6 +213,38 @@ searches run freely. Writes, edits, deletes, and shell commands are gated:
138
213
 
139
214
  `--yolo` wins over `--auto-approve`. Saved preferences never enable YOLO.
140
215
 
216
+ ## Turn durability
217
+
218
+ Every front-end (TUI, headless, MCP, ACP) runs a hosted turn through the same
219
+ checkpointed graph node, which mirrors the desktop client's chat manager:
220
+
221
+ - A stream that drops before the final frame (socket close, timeout, 5xx, 429)
222
+ is retried up to three times with 5 s, 10 s, and 20 s backoff. The retry
223
+ re-prompts the hosted agent with the partial transcript and
224
+ `Resume where we left off: <original message>` so it continues rather than
225
+ restarting. Deterministic failures (4xx other than 429, invalid or oversized
226
+ requests, plan refusals, auth) fail immediately.
227
+ - Retry progress is visible: the TUI status bar and a notification, a yellow
228
+ line in headless text mode, MCP progress, and ACP agent thoughts
229
+ (`Retrying (1/2) in 5s: …`). `--json` emits `copper.retry` events.
230
+ - The websocket close code and reason are carried into the error message
231
+ (`close code 1011 received: …`) and the log file.
232
+ - Whatever a failed turn produced before the error (assistant text, tool calls
233
+ and results) is still checkpointed with a hidden
234
+ `[Turn interrupted before completion: …]` note, so a later "continue" has the
235
+ prior work in context.
236
+ - There is no idle timeout between frames once a turn is streaming; websocket
237
+ keepalive still detects dead peers, and long hosted reasoning or subagent
238
+ runs no longer trip a client-side limit. The first frame must still arrive
239
+ within 60 s.
240
+ - Shell commands run in the foreground for the requested timeout (default
241
+ 25 s) and then move to the background unless the request sets
242
+ `kill_on_timeout` or `background: false`. After the final frame the client
243
+ resumes the agent with their output. Commands still running are awaited
244
+ first. Commands that already exited while the model was still working are
245
+ delivered too, so a search that finishes mid-turn is not dropped. Output is
246
+ capped at 5 MB and the whole process tree is killed on cancel.
247
+
141
248
  ## Usage limits
142
249
 
143
250
  The hosted service owns weekly and window usage. The CLI does not show raw