copper-pilot-cli 0.1.7__tar.gz → 0.1.9__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.9/HISTORY.md +261 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/PKG-INFO +23 -9
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/README.md +16 -5
- copper_pilot_cli-0.1.9/VERSION +1 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/docs/cli.md +84 -4
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/docs/development.md +34 -0
- copper_pilot_cli-0.1.9/docs/harness.md +176 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/plugins/copper-pilot/agents/copper-pilot.md +2 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/pyproject.toml +7 -3
- copper_pilot_cli-0.1.9/src/copper_pilot_cli/copper_acp.py +754 -0
- copper_pilot_cli-0.1.9/src/copper_pilot_cli/copper_api.py +77 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/copper_app.py +145 -15
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/copper_auth.py +2 -1
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/copper_graph.py +43 -4
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/copper_main.py +94 -9
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/copper_mcp.py +89 -8
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/copper_protocol.py +127 -18
- copper_pilot_cli-0.1.9/src/copper_pilot_cli/copper_status_events.py +76 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/copper_widgets.py +18 -1
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/deepagents_tools.py +5 -6
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/langchain.py +9 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/sessions.py +3 -3
- copper_pilot_cli-0.1.9/tests/test_acp.py +827 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/tests/test_auth.py +2 -0
- copper_pilot_cli-0.1.9/tests/test_copper_api.py +63 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/tests/test_langchain.py +21 -2
- copper_pilot_cli-0.1.9/tests/test_main.py +264 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/tests/test_mcp.py +84 -2
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/tests/test_protocol.py +129 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/tests/test_release_gates.py +12 -1
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/tests/test_sessions.py +71 -2
- copper_pilot_cli-0.1.9/tests/test_status_events.py +51 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/tests/test_tools.py +29 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/tests/test_tui.py +188 -7
- copper_pilot_cli-0.1.7/HISTORY.md +0 -95
- copper_pilot_cli-0.1.7/VERSION +0 -1
- copper_pilot_cli-0.1.7/docs/harness.md +0 -108
- copper_pilot_cli-0.1.7/src/copper_pilot_cli/copper_api.py +0 -24
- copper_pilot_cli-0.1.7/tests/test_main.py +0 -114
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/.claude-plugin/marketplace.json +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/.gitignore +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/CODE_OF_CONDUCT.md +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/CONTRIBUTING.md +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/LICENSE +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/NOTICE +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/SECURITY.md +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/SUPPORT.md +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/UPSTREAM.md +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/docs/assets/esp32-mini-1-h4.gif +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/docs/assets/logo-dark.png +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/docs/assets/logo-light.png +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/docs/assets/logo.png +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/.gitignore +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/001_esp32/.copperpilot/PLANS.md +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/001_esp32/.copperpilot/README.md +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/001_esp32/.copperpilot/TOOLS.md +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/001_esp32/.copperpilot/plans/esp32-dev-board.plan.md +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/001_esp32/.gitignore +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/001_esp32/README.md +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/001_esp32/esp32/3d-models/SW-SMD_L3.9-W2.9-H2.0-LS4.8.step +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/001_esp32/esp32/3d-models/TYPE-C-31-M-12.step +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/001_esp32/esp32/esp32.kicad_pcb +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/001_esp32/esp32/esp32.kicad_pro +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/001_esp32/esp32/esp32.kicad_sch +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/001_esp32/esp32/esp32.png +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/001_esp32/helper.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/001_esp32/main.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/.copperpilot/PLANS.md +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/.copperpilot/README.md +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/.copperpilot/plans/cm5-camera-carrier.plan.md +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/.gitignore +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/README.md +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/assembly_spec.json +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/3dmodels/CM4.step +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/3dmodels/CM5.step +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/3dmodels/Camera_IMX219-D160.step +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/3dmodels/USB_A_Molex_105057-0001_Vertical.wrl +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/3dmodels/USB_A_vertical.step +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/CM5.3dshapes/5033981892.stp +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/CM5.3dshapes/DF40C-100DS.stp +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/CM5.3dshapes/JTHDA-19F08.STEP +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/CM5.3dshapes/SRP5030CC.stp +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/cm5_camera.kicad_dru +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/cm5_camera.kicad_pcb +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/cm5_camera.kicad_pro +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/cm5_camera.kicad_sch +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/cm5_camera.kicad_sym +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/cm5_camera.png +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/C_0402_1005Metric.kicad_mod +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/C_0805_2012Metric.kicad_mod +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/Camera_Module_IMX219-D160.kicad_mod +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/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.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/HDMI_Mini-C_Molex_47151-0001.kicad_mod +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/LED_0603_1608Metric.kicad_mod +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/L_Bourns_SRP5030CC.kicad_mod +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/L_CommonModeChoke_Coilank_ACM1210.kicad_mod +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/MOLEX_USB_67298-4090.kicad_mod +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/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.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/PinHeader_1x03_P2.54mm_Vertical.kicad_mod +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/PinHeader_2x20_P2.54mm_Vertical.kicad_mod +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/R_0402_1005Metric.kicad_mod +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/R_0603_1608Metric.kicad_mod +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/Raspberry-Pi-4-Compute-Module.kicad_mod +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/SDCARD_MOLEX_503398-1892.kicad_mod +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/SOT-23-5.kicad_mod +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/SW_SPST_PTS645Sx43SMTR92.kicad_mod +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/TSOT-23-6.kicad_mod +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/cm5_camera.pretty/Texas_DRT-3.kicad_mod +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/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.7 → copper_pilot_cli-0.1.9}/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.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/cm5_camera_bottom.png +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/fp-lib-table +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/cm5_camera/sym-lib-table +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/generate_3d_models.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/helper.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/examples/002_cm5_camera/main.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/plugins/copper-pilot/.claude-plugin/plugin.json +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/plugins/copper-pilot/.mcp.json +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/plugins/copper-pilot/skills/copper-pilot-review/SKILL.md +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/skills/copper-pilot-review/SKILL.md +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/__init__.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/__main__.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/_upstream/__init__.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/_upstream/dcode_0_1_69/PROVENANCE.json +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/_upstream/dcode_0_1_69/__init__.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/_upstream/dcode_0_1_69/diff_utils.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/_version.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/clipboard.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/copper_config.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/copper_features.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/copper_hooks.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/copper_preferences.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/copper_presentation.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/copper_theme.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/copper_tools.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/copper_update.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/copper_workspace.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/diagnostics.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/media_utils.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/py.typed +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/src/copper_pilot_cli/textual_patches.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/tests/test_clipboard.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/tests/test_cm5_camera_example.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/tests/test_e2e.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/tests/test_esp32_example.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/tests/test_features.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/tests/test_live_chat_e2e.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/tests/test_plugin_manifest.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/tests/test_preferences.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/tests/test_presentation.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/tests/test_upstream_provenance.py +0 -0
- {copper_pilot_cli-0.1.7 → copper_pilot_cli-0.1.9}/tests/test_workspace.py +0 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
Changelog
|
|
2
|
+
=========
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
(unreleased)
|
|
6
|
+
------------
|
|
7
|
+
- Merge pull request #18 from CopperPilot/feat/acp-server. [Aditya]
|
|
8
|
+
|
|
9
|
+
feat: add `copper-pilot acp` Agent Client Protocol server
|
|
10
|
+
- Fix(acp): surface hosted turn failures in the JSON-RPC error message.
|
|
11
|
+
[AdityaNG, Claude Fable 5.1]
|
|
12
|
+
|
|
13
|
+
T3 Code showed a bare "Internal error" for a prompt the hosted service
|
|
14
|
+
had refused with "Upgrade to a paid plan to use Intelligence." because the
|
|
15
|
+
explanation only lived in the error's `data`, which T3 does not display.
|
|
16
|
+
Carry the hosted message in the error `message` (keeping the code), map a
|
|
17
|
+
refused websocket handshake to auth_required when it is 401/403, log every
|
|
18
|
+
failed turn to the diagnostics log, and never let an unexpected exception
|
|
19
|
+
escape to the SDK's generic handler.
|
|
20
|
+
- Fix(acp): accept `copper-pilot acp auth login` for clients that append
|
|
21
|
+
login args. [AdityaNG, Claude Fable 5.1]
|
|
22
|
+
|
|
23
|
+
T3 Code runs an ACP terminal auth method by appending the method's args to
|
|
24
|
+
the configured agent command, so the advertised `auth login` was spawned as
|
|
25
|
+
`copper-pilot acp auth login`. The acp parser rejected the extra arguments
|
|
26
|
+
with exit code 2 and T3 reported "The provider login command did not finish
|
|
27
|
+
successfully." Normalize `acp auth ...` onto `auth ...` before parsing and
|
|
28
|
+
document the alias.
|
|
29
|
+
- Feat: add `copper-pilot acp` Agent Client Protocol server. [AdityaNG,
|
|
30
|
+
Claude Fable 5.1]
|
|
31
|
+
|
|
32
|
+
Serve the hosted CopperPilot agent over ACP stdio so editors such as Zed
|
|
33
|
+
can drive it with streaming messages, tool calls, permission prompts,
|
|
34
|
+
session modes (ask/plan/agent), an effort config option, session/load
|
|
35
|
+
resume of existing threads, and session/cancel.
|
|
36
|
+
|
|
37
|
+
- New copper_acp.py built directly on the agent-client-protocol SDK;
|
|
38
|
+
approvals and clarifying questions map onto session/request_permission.
|
|
39
|
+
- `acp` optional extra; the command prints an install hint without it.
|
|
40
|
+
- CI license gate ignores agent-client-protocol (Apache-2.0 LICENSE file,
|
|
41
|
+
no license metadata in the wheel).
|
|
42
|
+
- Tests: tests/test_acp.py (100% coverage of copper_acp.py, including a
|
|
43
|
+
real stdio JSON-RPC round trip), parser and entrypoint tests, and a
|
|
44
|
+
release-gate check for the extra.
|
|
45
|
+
- Docs: cli.md, harness.md (Zed setup), README.
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
0.1.8 (2026-10-14)
|
|
49
|
+
------------------
|
|
50
|
+
|
|
51
|
+
Fix
|
|
52
|
+
~~~
|
|
53
|
+
- Annotate async context managers for ty 0.0.87. [AdityaNG]
|
|
54
|
+
|
|
55
|
+
CI resolves the unpinned ty dependency to 0.0.87, which rejects AsyncIterator returns on asynccontextmanager.
|
|
56
|
+
- Upgrade the pinned Deep Agents runtime to 0.7.19. [AdityaNG]
|
|
57
|
+
|
|
58
|
+
Keep the exact runtime pin while picking up the filesystem and media-handling fixes from 0.7.14.
|
|
59
|
+
- Align the CLI with hosted usage limits. [AdityaNG]
|
|
60
|
+
|
|
61
|
+
Keep blocked turns machine-readable, shrink oversized resumed chats to the desktop frame budget, and report the installed client version.
|
|
62
|
+
|
|
63
|
+
Other
|
|
64
|
+
~~~~~
|
|
65
|
+
- Release: version 0.1.8 🚀 [AdityaNG]
|
|
66
|
+
- Merge pull request #16 from CopperPilot/update/14_oct_2026. [Aditya]
|
|
67
|
+
|
|
68
|
+
Add Intelligence effort, hosted survey workers, and modal keyboard focus
|
|
69
|
+
- Fix(tests/test_tui.py) [AdityaNG]
|
|
70
|
+
- Feat(src/copper_pilot_cli/copper_status_events.py) [AdityaNG]
|
|
71
|
+
- Merge pull request #3 from
|
|
72
|
+
CopperPilot/dependabot/github_actions/softprops/action-gh-release-3.
|
|
73
|
+
[Aditya]
|
|
74
|
+
|
|
75
|
+
build(deps): bump softprops/action-gh-release from 2 to 3
|
|
76
|
+
- Build(deps): bump softprops/action-gh-release from 2 to 3.
|
|
77
|
+
[dependabot[bot]]
|
|
78
|
+
|
|
79
|
+
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2 to 3.
|
|
80
|
+
- [Release notes](https://github.com/softprops/action-gh-release/releases)
|
|
81
|
+
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
|
|
82
|
+
- [Commits](https://github.com/softprops/action-gh-release/compare/v2...v3)
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
updated-dependencies:
|
|
86
|
+
- dependency-name: softprops/action-gh-release
|
|
87
|
+
dependency-version: '3'
|
|
88
|
+
dependency-type: direct:production
|
|
89
|
+
update-type: version-update:semver-major
|
|
90
|
+
...
|
|
91
|
+
- Merge pull request #4 from CopperPilot/dependabot/pip/websockets-
|
|
92
|
+
gte-15-and-lt-18. [Aditya]
|
|
93
|
+
|
|
94
|
+
build(deps): update websockets requirement from <17,>=15 to >=15,<18
|
|
95
|
+
- Build(deps): update websockets requirement from <17,>=15 to >=15,<18.
|
|
96
|
+
[dependabot[bot]]
|
|
97
|
+
|
|
98
|
+
Updates the requirements on [websockets](https://github.com/python-websockets/websockets) to permit the latest version.
|
|
99
|
+
- [Release notes](https://github.com/python-websockets/websockets/releases)
|
|
100
|
+
- [Commits](https://github.com/python-websockets/websockets/compare/15.0...17.1)
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
updated-dependencies:
|
|
104
|
+
- dependency-name: websockets
|
|
105
|
+
dependency-version: '17.1'
|
|
106
|
+
dependency-type: direct:production
|
|
107
|
+
...
|
|
108
|
+
- Merge pull request #5 from CopperPilot/dependabot/pip/uuid-utils-
|
|
109
|
+
gte-0.12-and-lt-2. [Aditya]
|
|
110
|
+
|
|
111
|
+
build(deps): update uuid-utils requirement from <1,>=0.12 to >=0.12,<2
|
|
112
|
+
- Build(deps): update uuid-utils requirement from <1,>=0.12 to
|
|
113
|
+
>=0.12,<2. [dependabot[bot]]
|
|
114
|
+
|
|
115
|
+
Updates the requirements on [uuid-utils](https://github.com/aminalaee/uuid-utils) to permit the latest version.
|
|
116
|
+
- [Release notes](https://github.com/aminalaee/uuid-utils/releases)
|
|
117
|
+
- [Commits](https://github.com/aminalaee/uuid-utils/compare/0.12.0...1.0.0)
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
updated-dependencies:
|
|
121
|
+
- dependency-name: uuid-utils
|
|
122
|
+
dependency-version: 1.0.0
|
|
123
|
+
dependency-type: direct:production
|
|
124
|
+
...
|
|
125
|
+
- Merge pull request #2 from
|
|
126
|
+
CopperPilot/dependabot/github_actions/actions/setup-python-7. [Aditya]
|
|
127
|
+
|
|
128
|
+
build(deps): bump actions/setup-python from 5 to 7
|
|
129
|
+
- Build(deps): bump actions/setup-python from 5 to 7. [dependabot[bot]]
|
|
130
|
+
|
|
131
|
+
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 7.
|
|
132
|
+
- [Release notes](https://github.com/actions/setup-python/releases)
|
|
133
|
+
- [Commits](https://github.com/actions/setup-python/compare/v5...v7)
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
updated-dependencies:
|
|
137
|
+
- dependency-name: actions/setup-python
|
|
138
|
+
dependency-version: '7'
|
|
139
|
+
dependency-type: direct:production
|
|
140
|
+
update-type: version-update:semver-major
|
|
141
|
+
...
|
|
142
|
+
- Merge pull request #13 from
|
|
143
|
+
CopperPilot/update/deepagents_0_7_19_3_oct. [Aditya]
|
|
144
|
+
|
|
145
|
+
Upgrade the pinned Deep Agents runtime to 0.7.19
|
|
146
|
+
- Merge pull request #1 from
|
|
147
|
+
CopperPilot/dependabot/github_actions/actions/checkout-7. [Aditya]
|
|
148
|
+
|
|
149
|
+
build(deps): bump actions/checkout from 4 to 7
|
|
150
|
+
- Build(deps): bump actions/checkout from 4 to 7. [dependabot[bot]]
|
|
151
|
+
|
|
152
|
+
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 7.
|
|
153
|
+
- [Release notes](https://github.com/actions/checkout/releases)
|
|
154
|
+
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
|
|
155
|
+
- [Commits](https://github.com/actions/checkout/compare/v4...v7)
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
updated-dependencies:
|
|
159
|
+
- dependency-name: actions/checkout
|
|
160
|
+
dependency-version: '7'
|
|
161
|
+
dependency-type: direct:production
|
|
162
|
+
update-type: version-update:semver-major
|
|
163
|
+
...
|
|
164
|
+
- Merge pull request #12 from
|
|
165
|
+
CopperPilot/update/contract_alignment_3_oct. [Aditya]
|
|
166
|
+
|
|
167
|
+
Align the CLI with hosted usage limits
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
0.1.7 (2026-10-03)
|
|
171
|
+
------------------
|
|
172
|
+
- Release: version 0.1.7 🚀 [AdityaNG]
|
|
173
|
+
- Merge pull request #11 from
|
|
174
|
+
CopperPilot/feat/python_versions_support_expansion. [Aditya]
|
|
175
|
+
|
|
176
|
+
Support Python 3.11 and future releases
|
|
177
|
+
- Ci: probe Python 3.15 weekly instead of on pull requests. [AdityaNG]
|
|
178
|
+
|
|
179
|
+
Keep the upstream install failure visible without turning required pull request checks red.
|
|
180
|
+
- Feat(py11) [AdityaNG]
|
|
181
|
+
- Merge pull request #7 from CopperPilot/feat/example_002_cm5_camera.
|
|
182
|
+
[Aditya]
|
|
183
|
+
|
|
184
|
+
feat(examples/002_cm5_camera): add 3D pose audit and generated carrier
|
|
185
|
+
- Fix(examples/002_cm5_camera): render the README PCB as a dimetric 3D
|
|
186
|
+
view. [AdityaNG, Cursor]
|
|
187
|
+
|
|
188
|
+
Use an orthogonal high-quality camera with a slight isometric tilt so the
|
|
189
|
+
hero PNG shows connector height instead of a flat top-down shot.
|
|
190
|
+
- Fix(examples/002_cm5_camera): skip library dirs relative to the
|
|
191
|
+
workspace. [AdityaNG, Cursor]
|
|
192
|
+
|
|
193
|
+
Absolute path parts named tmp (Linux /tmp pytest roots) were skipping the
|
|
194
|
+
entire haystack, so libraries_ready failed on Ubuntu CI.
|
|
195
|
+
- Feat(examples/002_cm5_camera): add 3D pose audit and generated
|
|
196
|
+
carrier. [AdityaNG, Cursor]
|
|
197
|
+
|
|
198
|
+
Lock connector 3D offsets, Module1 pad orientation, and the generated
|
|
199
|
+
KiCad project so the example reproduces NANO-C assembly parity.
|
|
200
|
+
- Feat(examples/002_cm5_camera/main.py): new example. [AdityaNG]
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
0.1.6 (2026-09-18)
|
|
204
|
+
------------------
|
|
205
|
+
- Release: version 0.1.6 🚀 [AdityaNG]
|
|
206
|
+
- Merge pull request #6 from CopperPilot/feat/plugins. [Aditya]
|
|
207
|
+
|
|
208
|
+
feat: add MCP conductor and Claude Code plugin
|
|
209
|
+
- Clarify server restrictions in PR template. [Aditya]
|
|
210
|
+
|
|
211
|
+
Updated checklist item to clarify server restrictions.
|
|
212
|
+
- Feat: add MCP conductor and Claude Code plugin. [AdityaNG, Cursor]
|
|
213
|
+
|
|
214
|
+
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.
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
0.1.5 (2026-09-17)
|
|
218
|
+
------------------
|
|
219
|
+
- Release: version 0.1.5 🚀 [AdityaNG]
|
|
220
|
+
- Fix(README.md) [AdityaNG]
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
0.1.4 (2026-09-17)
|
|
224
|
+
------------------
|
|
225
|
+
- Release: version 0.1.4 🚀 [AdityaNG]
|
|
226
|
+
- Fix(tests/test_release_gates.py) [AdityaNG]
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
0.1.3 (2026-09-17)
|
|
230
|
+
------------------
|
|
231
|
+
- Release: version 0.1.3 🚀 [AdityaNG]
|
|
232
|
+
- Docs. [AdityaNG]
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
0.1.2 (2026-09-17)
|
|
236
|
+
------------------
|
|
237
|
+
- Release: version 0.1.2 🚀 [AdityaNG]
|
|
238
|
+
- Ci(pyproject.toml) [AdityaNG]
|
|
239
|
+
- Fix(tests/test_tui.py) [AdityaNG]
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
0.1.1 (2026-09-17)
|
|
243
|
+
------------------
|
|
244
|
+
- Release: version 0.1.1 🚀 [AdityaNG]
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
0.1.0 (2026-09-17)
|
|
248
|
+
------------------
|
|
249
|
+
- Release: version 0.1.0 🚀 [AdityaNG]
|
|
250
|
+
- Fix(tests/test_release_gates.py) [AdityaNG]
|
|
251
|
+
- Test. [AdityaNG]
|
|
252
|
+
- Docs. [AdityaNG]
|
|
253
|
+
- Docs. [AdityaNG]
|
|
254
|
+
- Example(examples/001_esp32/) [AdityaNG]
|
|
255
|
+
- Makefile. [AdityaNG]
|
|
256
|
+
- Ci. [AdityaNG]
|
|
257
|
+
- Docs. [AdityaNG]
|
|
258
|
+
- Refactor(name) [AdityaNG]
|
|
259
|
+
- Init. [AdityaNG]
|
|
260
|
+
|
|
261
|
+
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: copper-pilot-cli
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.9
|
|
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
|
|
@@ -21,7 +21,7 @@ Classifier: Programming Language :: Python :: 3.14
|
|
|
21
21
|
Requires-Python: >=3.11
|
|
22
22
|
Requires-Dist: aiosqlite<1,>=0.22
|
|
23
23
|
Requires-Dist: certifi>=2024.8.30
|
|
24
|
-
Requires-Dist: deepagents==0.7.
|
|
24
|
+
Requires-Dist: deepagents==0.7.19
|
|
25
25
|
Requires-Dist: httpx<1,>=0.28
|
|
26
26
|
Requires-Dist: langchain-core<2,>=1.6
|
|
27
27
|
Requires-Dist: langgraph-checkpoint-sqlite<4,>=3.1
|
|
@@ -35,9 +35,12 @@ Requires-Dist: pyperclip<2,>=1.11
|
|
|
35
35
|
Requires-Dist: pyyaml<7,>=6
|
|
36
36
|
Requires-Dist: rich<16,>=15
|
|
37
37
|
Requires-Dist: textual<9,>=8.2.8
|
|
38
|
-
Requires-Dist: uuid-utils<
|
|
39
|
-
Requires-Dist: websockets<
|
|
38
|
+
Requires-Dist: uuid-utils<2,>=0.12
|
|
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'
|
|
@@ -107,12 +110,18 @@ copper-pilot ./my-board
|
|
|
107
110
|
copper-pilot --resume
|
|
108
111
|
copper-pilot threads list
|
|
109
112
|
copper-pilot -n -m "Review this board" --json
|
|
113
|
+
copper-pilot --mode plan --effort intelligence -m "Survey and plan this board"
|
|
110
114
|
```
|
|
111
115
|
|
|
112
116
|
Both `copper-pilot` and `copper-pilot-cli` run the same program.
|
|
113
117
|
`copper-pilot --help` lists flags; [docs/cli.md](docs/cli.md) is the full
|
|
114
118
|
command reference.
|
|
115
119
|
|
|
120
|
+
Balanced effort is the default. Paid-plan users can select Intelligence with
|
|
121
|
+
`--effort intelligence` or interactive `/effort`. Intelligence uses
|
|
122
|
+
server-owned survey subagents and shows their lifecycle through the existing
|
|
123
|
+
Deep Agents task rows; Intelligence Plan turns survey before writing a plan.
|
|
124
|
+
|
|
116
125
|
## Use from Claude Code, Cursor, or Codex
|
|
117
126
|
|
|
118
127
|
CopperPilot stays the electronics agent. Copy
|
|
@@ -131,8 +140,9 @@ Claude Code can also install the in-repo plugin:
|
|
|
131
140
|
```
|
|
132
141
|
|
|
133
142
|
That plugin starts `copper-pilot mcp` and adds `@copper-pilot` plus
|
|
134
|
-
`/copper-pilot-review`.
|
|
135
|
-
[
|
|
143
|
+
`/copper-pilot-review`. Editors that speak the Agent Client Protocol, such as
|
|
144
|
+
Zed, can run `copper-pilot acp` after `pip install "copper-pilot-cli[acp]"`.
|
|
145
|
+
Setup for Cursor, Codex, Zed, and approvals: [docs/harness.md](docs/harness.md).
|
|
136
146
|
|
|
137
147
|
## Configuration
|
|
138
148
|
|
|
@@ -147,13 +157,16 @@ the parent directory is mode `0700` and the file is mode `0600`.
|
|
|
147
157
|
## LangChain
|
|
148
158
|
|
|
149
159
|
```python
|
|
150
|
-
from copper_pilot_cli.copper_protocol import CopperMode
|
|
160
|
+
from copper_pilot_cli.copper_protocol import CopperEffort, CopperMode
|
|
151
161
|
from copper_pilot_cli.langchain import CopperPilotAgent
|
|
152
162
|
from helper import drc_violations, erc_errors, render_pcb, run
|
|
153
163
|
|
|
154
164
|
PLAN = CopperMode.PLAN
|
|
155
165
|
|
|
156
|
-
copper_pilot = CopperPilotAgent(
|
|
166
|
+
copper_pilot = CopperPilotAgent(
|
|
167
|
+
workspace="esp32",
|
|
168
|
+
effort=CopperEffort.INTELLIGENCE,
|
|
169
|
+
)
|
|
157
170
|
|
|
158
171
|
run(copper_pilot, "Build me an ESP32 dev board.", PLAN)
|
|
159
172
|
run(copper_pilot, "Let us build this plan.")
|
|
@@ -188,7 +201,8 @@ normalizes hosted tool names, approval decisions, and result envelopes.
|
|
|
188
201
|
Computer use, model/provider selection, local model execution, LangSmith
|
|
189
202
|
tracing, content telemetry, MCP **host**/plugin-runtime controls, and server
|
|
190
203
|
implementation code are not part of this package. A thin MCP **server**
|
|
191
|
-
(`copper-pilot mcp`)
|
|
204
|
+
(`copper-pilot mcp`) and an ACP **server** (`copper-pilot acp`) that delegate
|
|
205
|
+
to the hosted agent are.
|
|
192
206
|
|
|
193
207
|
See [UPSTREAM.md](UPSTREAM.md) and [NOTICE](NOTICE) for the retained Textual
|
|
194
208
|
client attribution.
|
|
@@ -56,12 +56,18 @@ copper-pilot ./my-board
|
|
|
56
56
|
copper-pilot --resume
|
|
57
57
|
copper-pilot threads list
|
|
58
58
|
copper-pilot -n -m "Review this board" --json
|
|
59
|
+
copper-pilot --mode plan --effort intelligence -m "Survey and plan this board"
|
|
59
60
|
```
|
|
60
61
|
|
|
61
62
|
Both `copper-pilot` and `copper-pilot-cli` run the same program.
|
|
62
63
|
`copper-pilot --help` lists flags; [docs/cli.md](docs/cli.md) is the full
|
|
63
64
|
command reference.
|
|
64
65
|
|
|
66
|
+
Balanced effort is the default. Paid-plan users can select Intelligence with
|
|
67
|
+
`--effort intelligence` or interactive `/effort`. Intelligence uses
|
|
68
|
+
server-owned survey subagents and shows their lifecycle through the existing
|
|
69
|
+
Deep Agents task rows; Intelligence Plan turns survey before writing a plan.
|
|
70
|
+
|
|
65
71
|
## Use from Claude Code, Cursor, or Codex
|
|
66
72
|
|
|
67
73
|
CopperPilot stays the electronics agent. Copy
|
|
@@ -80,8 +86,9 @@ Claude Code can also install the in-repo plugin:
|
|
|
80
86
|
```
|
|
81
87
|
|
|
82
88
|
That plugin starts `copper-pilot mcp` and adds `@copper-pilot` plus
|
|
83
|
-
`/copper-pilot-review`.
|
|
84
|
-
[
|
|
89
|
+
`/copper-pilot-review`. Editors that speak the Agent Client Protocol, such as
|
|
90
|
+
Zed, can run `copper-pilot acp` after `pip install "copper-pilot-cli[acp]"`.
|
|
91
|
+
Setup for Cursor, Codex, Zed, and approvals: [docs/harness.md](docs/harness.md).
|
|
85
92
|
|
|
86
93
|
## Configuration
|
|
87
94
|
|
|
@@ -96,13 +103,16 @@ the parent directory is mode `0700` and the file is mode `0600`.
|
|
|
96
103
|
## LangChain
|
|
97
104
|
|
|
98
105
|
```python
|
|
99
|
-
from copper_pilot_cli.copper_protocol import CopperMode
|
|
106
|
+
from copper_pilot_cli.copper_protocol import CopperEffort, CopperMode
|
|
100
107
|
from copper_pilot_cli.langchain import CopperPilotAgent
|
|
101
108
|
from helper import drc_violations, erc_errors, render_pcb, run
|
|
102
109
|
|
|
103
110
|
PLAN = CopperMode.PLAN
|
|
104
111
|
|
|
105
|
-
copper_pilot = CopperPilotAgent(
|
|
112
|
+
copper_pilot = CopperPilotAgent(
|
|
113
|
+
workspace="esp32",
|
|
114
|
+
effort=CopperEffort.INTELLIGENCE,
|
|
115
|
+
)
|
|
106
116
|
|
|
107
117
|
run(copper_pilot, "Build me an ESP32 dev board.", PLAN)
|
|
108
118
|
run(copper_pilot, "Let us build this plan.")
|
|
@@ -137,7 +147,8 @@ normalizes hosted tool names, approval decisions, and result envelopes.
|
|
|
137
147
|
Computer use, model/provider selection, local model execution, LangSmith
|
|
138
148
|
tracing, content telemetry, MCP **host**/plugin-runtime controls, and server
|
|
139
149
|
implementation code are not part of this package. A thin MCP **server**
|
|
140
|
-
(`copper-pilot mcp`)
|
|
150
|
+
(`copper-pilot mcp`) and an ACP **server** (`copper-pilot acp`) that delegate
|
|
151
|
+
to the hosted agent are.
|
|
141
152
|
|
|
142
153
|
See [UPSTREAM.md](UPSTREAM.md) and [NOTICE](NOTICE) for the retained Textual
|
|
143
154
|
client attribution.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.1.9
|
|
@@ -7,6 +7,7 @@ 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
|
|
10
11
|
```
|
|
11
12
|
|
|
12
13
|
Python 3.11 or newer is required. Install with `pip install copper-pilot-cli`.
|
|
@@ -30,6 +31,7 @@ valid.
|
|
|
30
31
|
| `--no-stream` | Print the final assistant message after the run instead of streaming. |
|
|
31
32
|
| `--json` | Emit JSON events (or a final JSON document with `--no-stream`). |
|
|
32
33
|
| `--mode {agent,plan,ask}` | Hosted chat mode. Default: `agent`. |
|
|
34
|
+
| `--effort {balanced,intelligence}` | Hosted effort. Default: `balanced`; Intelligence requires a paid plan. |
|
|
33
35
|
| `-y`, `--auto-approve` | Auto approval: routine writes and known-safe shell still run; unknown actions prompt. |
|
|
34
36
|
| `--yolo` | Permit local side effects without prompting. Must be set explicitly. |
|
|
35
37
|
| `--version` | Print the package version. |
|
|
@@ -41,6 +43,7 @@ copper-pilot ./my-board
|
|
|
41
43
|
copper-pilot --resume
|
|
42
44
|
copper-pilot -n -m "Review this board" --json
|
|
43
45
|
copper-pilot ./my-board --mode plan -m "Propose a power tree"
|
|
46
|
+
copper-pilot ./my-board --mode plan --effort intelligence -m "Survey and plan the power tree"
|
|
44
47
|
```
|
|
45
48
|
|
|
46
49
|
Headless mode is also used when `--message` is set and stdout is not a TTY.
|
|
@@ -60,15 +63,61 @@ write to stdout; the protocol owns it.
|
|
|
60
63
|
| Tool | Role |
|
|
61
64
|
|------|------|
|
|
62
65
|
| `status` | Login state and discovered schematic/PCB paths. No hosted call. |
|
|
63
|
-
| `ask` | `--mode ask`. Auto approval. Optional `thread_id`. |
|
|
64
|
-
| `plan` | `--mode plan`. Auto approval. |
|
|
65
|
-
| `run` | `--mode agent`. `approval` is `auto` (default) or `yolo`. |
|
|
66
|
-
| `resume` | Continue `thread_id`.
|
|
66
|
+
| `ask` | `--mode ask`. Auto approval. Optional `thread_id` and `effort`. |
|
|
67
|
+
| `plan` | `--mode plan`. Auto approval. Optional `effort`. |
|
|
68
|
+
| `run` | `--mode agent`. Optional `effort`; `approval` is `auto` (default) or `yolo`. |
|
|
69
|
+
| `resume` | Continue `thread_id`. Optional `mode`, `effort`, and the same approval as `run`. |
|
|
67
70
|
| `threads_list` | List threads for this workspace (`limit`, `all_workspaces`). |
|
|
68
71
|
|
|
69
72
|
Workspace is the tool argument, else `CLAUDE_PROJECT_DIR`, else the process
|
|
70
73
|
current directory. Manual approval is TUI-only. See [harness.md](harness.md).
|
|
71
74
|
|
|
75
|
+
## ACP
|
|
76
|
+
|
|
77
|
+
```console
|
|
78
|
+
pip install "copper-pilot-cli[acp]"
|
|
79
|
+
copper-pilot acp
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Serves the Agent Client Protocol over stdio for editors such as Zed. The
|
|
83
|
+
`acp` extra is optional; without it the command prints an install hint and
|
|
84
|
+
exits with status 2. `copper-pilot acp auth login` is accepted as an alias for
|
|
85
|
+
`copper-pilot auth login`, because some ACP clients (T3 Code) run the
|
|
86
|
+
advertised login method by appending its arguments to the agent command. One ACP session is one CopperPilot thread, and the
|
|
87
|
+
session `cwd` is the workspace. Uses the stored device-login credential and
|
|
88
|
+
advertises a terminal auth method that runs `copper-pilot auth login`.
|
|
89
|
+
|
|
90
|
+
| ACP feature | CopperPilot behavior |
|
|
91
|
+
|-------------|----------------------|
|
|
92
|
+
| Session modes | `ask`, `plan`, `agent` (default `agent`) |
|
|
93
|
+
| Config options | `mode` and `effort` (`balanced` default, `intelligence` paid) |
|
|
94
|
+
| `session/load` | Resumes an existing thread id and replays its history |
|
|
95
|
+
| `session/request_permission` | Auto approval; non-routine writes and shell prompt the editor |
|
|
96
|
+
| `session/cancel` | Cancels the hosted turn and local tools |
|
|
97
|
+
|
|
98
|
+
"Allow all for this session" switches that session to YOLO until the server
|
|
99
|
+
exits; it is never saved. Clarifying questions with options are shown as
|
|
100
|
+
permission choices plus Skip; free-text questions are declined with a message
|
|
101
|
+
to continue in the TUI. See [harness.md](harness.md).
|
|
102
|
+
|
|
103
|
+
## Effort and Intelligence
|
|
104
|
+
|
|
105
|
+
Balanced is the default. Intelligence is available on paid plans and lets the
|
|
106
|
+
hosted parent run one to four survey subagents. Intelligence Plan turns survey
|
|
107
|
+
before creating or revising a plan. Workers are server-owned, survey-only, and
|
|
108
|
+
appear in the TUI through the existing Deep Agents task rows; they do not open
|
|
109
|
+
nested chats or execute through the local tool broker.
|
|
110
|
+
|
|
111
|
+
The interactive `/effort` command changes effort for the current thread.
|
|
112
|
+
Resuming that thread restores it; a new thread starts Balanced. In headless
|
|
113
|
+
text mode, worker state changes print as compact lines. `--json` retains raw
|
|
114
|
+
`status_event` objects.
|
|
115
|
+
|
|
116
|
+
Interactive clarification can offer suggested answers, custom text, or Skip
|
|
117
|
+
and waits without a client timeout. Headless and MCP calls cannot present that
|
|
118
|
+
UI, so an `ask_user_question` tool request is rejected with a clear error
|
|
119
|
+
instead of guessing or auto-skipping.
|
|
120
|
+
|
|
72
121
|
## Auth
|
|
73
122
|
|
|
74
123
|
```console
|
|
@@ -118,6 +167,37 @@ searches run freely. Writes, edits, deletes, and shell commands are gated:
|
|
|
118
167
|
|
|
119
168
|
`--yolo` wins over `--auto-approve`. Saved preferences never enable YOLO.
|
|
120
169
|
|
|
170
|
+
## Usage limits
|
|
171
|
+
|
|
172
|
+
The hosted service owns weekly and window usage. The CLI does not show raw
|
|
173
|
+
token balances, sell credits, or complete checkout.
|
|
174
|
+
|
|
175
|
+
Inside the interactive app, `/tokens` prints the current window as a
|
|
176
|
+
percentage, the next refresh time, and any additional-usage state.
|
|
177
|
+
`/tokens json` prints the member-safe API payload instead.
|
|
178
|
+
|
|
179
|
+
A blocked turn stays readable in `--json` output. An error event uses `data`
|
|
180
|
+
as an object:
|
|
181
|
+
|
|
182
|
+
```json
|
|
183
|
+
{
|
|
184
|
+
"type": "error",
|
|
185
|
+
"data": {
|
|
186
|
+
"message": "Usage limit reached.",
|
|
187
|
+
"code": "http_402",
|
|
188
|
+
"status": 402,
|
|
189
|
+
"block_reason": "weekly",
|
|
190
|
+
"can_purchase_overage": true,
|
|
191
|
+
"retryable": false
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
`block_reason` is `window`, `weekly`, `cost_cap`, `busy`, or `billing` when
|
|
197
|
+
the server sends one. A `busy` block and an ordinary rate limit use status
|
|
198
|
+
`429` with `retryable: true`. `can_purchase_overage` only says whether the
|
|
199
|
+
billing page can offer additional usage. The Textual UI prints `message`.
|
|
200
|
+
|
|
121
201
|
## Configuration
|
|
122
202
|
|
|
123
203
|
| Setting | Location |
|
|
@@ -56,6 +56,40 @@ unreleased Python.
|
|
|
56
56
|
|
|
57
57
|
Do not commit credentials, `.venv/`, or `dist/`.
|
|
58
58
|
|
|
59
|
+
## Hosted protocol
|
|
60
|
+
|
|
61
|
+
The client speaks protocol v1. Agent turns, and plan turns that carry plan
|
|
62
|
+
context, use `/api/copperpilot/analyze/agent/ws`. Ask turns and plan turns
|
|
63
|
+
without that context use `/api/copperpilot/analyze/chat/ws`.
|
|
64
|
+
|
|
65
|
+
`make_chat_start` in `copper_protocol.py` bounds history before the socket
|
|
66
|
+
send, matching the desktop harness:
|
|
67
|
+
|
|
68
|
+
| Attempt | Message cap | History cap | Frame cap |
|
|
69
|
+
|---------|-------------|-------------|-----------|
|
|
70
|
+
| 1 | 64 KiB | 4 MiB | 12 MiB |
|
|
71
|
+
| 2 | 32 KiB | 2 MiB | 8 MiB |
|
|
72
|
+
| 3 | 8 KiB | 128 KiB | 8 MiB |
|
|
73
|
+
| 4 | 4 KiB | 64 KiB | 8 MiB |
|
|
74
|
+
|
|
75
|
+
History is kept newest-first. Inline `data:` attachments are replaced before
|
|
76
|
+
the byte caps apply. A query or workspace snapshot that still cannot fit
|
|
77
|
+
raises `ProtocolError` with `code="PAYLOAD_TOO_LARGE"`.
|
|
78
|
+
|
|
79
|
+
A WebSocket `error` frame keeps `code`, `status`, `block_reason`,
|
|
80
|
+
`can_purchase_overage`, and `retryable` on both `ProtocolError` and the
|
|
81
|
+
`copper.error` event. Absent fields stay absent. The interactive UI and MCP
|
|
82
|
+
`error` string use `public_message`; `--json` and the MCP event digest keep
|
|
83
|
+
the object.
|
|
84
|
+
|
|
85
|
+
Device login and the WebSocket `User-Agent` (`CopperPilot CLI/<version>`)
|
|
86
|
+
read the installed package version. That version comes from `VERSION`.
|
|
87
|
+
|
|
88
|
+
`POST /api/copperpilot/analyze/token_limits` is the account-usage read. It
|
|
89
|
+
returns percentages and reset state even when chat is blocked. Do not add
|
|
90
|
+
token counts, plan allocations, Stripe checkout, or a per-chat context meter
|
|
91
|
+
here. The server does not expose those on this contract.
|
|
92
|
+
|
|
59
93
|
## Release
|
|
60
94
|
|
|
61
95
|
Version is the contents of [`VERSION`](../VERSION). `make release` writes that
|