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.
- copper_pilot_cli-0.1.10/HISTORY.md +420 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/PKG-INFO +27 -5
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/README.md +23 -4
- copper_pilot_cli-0.1.10/VERSION +1 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/docs/cli.md +107 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/docs/development.md +14 -1
- copper_pilot_cli-0.1.10/docs/harness.md +214 -0
- copper_pilot_cli-0.1.10/docs/validate.md +286 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/plugins/copper-pilot/agents/copper-pilot.md +2 -1
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/plugins/copper-pilot/skills/copper-pilot-review/SKILL.md +3 -2
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/pyproject.toml +4 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/skills/copper-pilot-review/SKILL.md +23 -0
- copper_pilot_cli-0.1.10/src/copper_pilot_cli/copper_acp.py +1205 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_app.py +16 -2
- copper_pilot_cli-0.1.10/src/copper_pilot_cli/copper_background.py +285 -0
- copper_pilot_cli-0.1.10/src/copper_pilot_cli/copper_graph.py +533 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_main.py +67 -5
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_mcp.py +102 -3
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_protocol.py +113 -8
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/deepagents_tools.py +36 -2
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/langchain.py +6 -0
- copper_pilot_cli-0.1.10/src/copper_pilot_cli/validate/__init__.py +98 -0
- copper_pilot_cli-0.1.10/src/copper_pilot_cli/validate/builtins.py +669 -0
- copper_pilot_cli-0.1.10/src/copper_pilot_cli/validate/cli.py +333 -0
- copper_pilot_cli-0.1.10/src/copper_pilot_cli/validate/config.py +407 -0
- copper_pilot_cli-0.1.10/src/copper_pilot_cli/validate/default.yaml +345 -0
- copper_pilot_cli-0.1.10/src/copper_pilot_cli/validate/design.py +503 -0
- copper_pilot_cli-0.1.10/src/copper_pilot_cli/validate/kicad.py +177 -0
- copper_pilot_cli-0.1.10/src/copper_pilot_cli/validate/report.py +335 -0
- copper_pilot_cli-0.1.10/src/copper_pilot_cli/validate/reviewer.py +477 -0
- copper_pilot_cli-0.1.10/src/copper_pilot_cli/validate/runner.py +739 -0
- copper_pilot_cli-0.1.10/tests/test_acp.py +1535 -0
- copper_pilot_cli-0.1.10/tests/test_durability.py +683 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_langchain.py +19 -0
- copper_pilot_cli-0.1.10/tests/test_main.py +324 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_mcp.py +86 -2
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_release_gates.py +11 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_tui.py +26 -0
- copper_pilot_cli-0.1.10/tests/test_validate.py +1603 -0
- copper_pilot_cli-0.1.10/tests/test_validate_live.py +38 -0
- copper_pilot_cli-0.1.8/HISTORY.md +0 -217
- copper_pilot_cli-0.1.8/VERSION +0 -1
- copper_pilot_cli-0.1.8/docs/harness.md +0 -120
- copper_pilot_cli-0.1.8/src/copper_pilot_cli/copper_graph.py +0 -217
- copper_pilot_cli-0.1.8/tests/test_main.py +0 -128
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/.claude-plugin/marketplace.json +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/.gitignore +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/CODE_OF_CONDUCT.md +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/CONTRIBUTING.md +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/LICENSE +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/NOTICE +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/SECURITY.md +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/SUPPORT.md +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/UPSTREAM.md +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/docs/assets/esp32-mini-1-h4.gif +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/docs/assets/logo-dark.png +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/docs/assets/logo-light.png +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/docs/assets/logo.png +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/.gitignore +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/001_esp32/.copperpilot/PLANS.md +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/001_esp32/.copperpilot/README.md +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/001_esp32/.copperpilot/TOOLS.md +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/001_esp32/.copperpilot/plans/esp32-dev-board.plan.md +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/001_esp32/.gitignore +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/001_esp32/README.md +0 -0
- {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
- {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
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/001_esp32/esp32/esp32.kicad_pcb +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/001_esp32/esp32/esp32.kicad_pro +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/001_esp32/esp32/esp32.kicad_sch +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/001_esp32/esp32/esp32.png +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/001_esp32/helper.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/001_esp32/main.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/.copperpilot/PLANS.md +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/.copperpilot/README.md +0 -0
- {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
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/.gitignore +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/README.md +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/assembly_spec.json +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/3dmodels/CM4.step +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/3dmodels/CM5.step +0 -0
- {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
- {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
- {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
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/CM5.3dshapes/5033981892.stp +0 -0
- {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
- {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
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/CM5.3dshapes/SRP5030CC.stp +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.kicad_dru +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.kicad_pcb +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.kicad_pro +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.kicad_sch +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.kicad_sym +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera.png +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/cm5_camera_bottom.png +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/fp-lib-table +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/cm5_camera/sym-lib-table +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/generate_3d_models.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/helper.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/examples/002_cm5_camera/main.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/plugins/copper-pilot/.claude-plugin/plugin.json +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/plugins/copper-pilot/.mcp.json +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/__init__.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/__main__.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/_upstream/__init__.py +0 -0
- {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
- {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
- {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
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/_version.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/clipboard.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_api.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_auth.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_config.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_features.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_hooks.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_preferences.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_presentation.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_status_events.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_theme.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_tools.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_update.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_widgets.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/copper_workspace.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/diagnostics.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/media_utils.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/py.typed +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/sessions.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/src/copper_pilot_cli/textual_patches.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_auth.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_clipboard.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_cm5_camera_example.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_copper_api.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_e2e.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_esp32_example.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_features.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_live_chat_e2e.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_plugin_manifest.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_preferences.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_presentation.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_protocol.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_sessions.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_status_events.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_tools.py +0 -0
- {copper_pilot_cli-0.1.8 → copper_pilot_cli-0.1.10}/tests/test_upstream_provenance.py +0 -0
- {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.
|
|
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`
|
|
140
|
-
|
|
141
|
-
|
|
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`)
|
|
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`
|
|
89
|
-
|
|
90
|
-
|
|
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`)
|
|
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
|