cc-branch 1.0.0__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.
- cc_branch-1.0.0/CHANGELOG.md +19 -0
- cc_branch-1.0.0/CONTRIBUTING.md +76 -0
- cc_branch-1.0.0/LICENSE +21 -0
- cc_branch-1.0.0/MANIFEST.in +17 -0
- cc_branch-1.0.0/PKG-INFO +179 -0
- cc_branch-1.0.0/README.md +140 -0
- cc_branch-1.0.0/README.zh.md +140 -0
- cc_branch-1.0.0/cc_branch/__init__.py +76 -0
- cc_branch-1.0.0/cc_branch/__main__.py +4 -0
- cc_branch-1.0.0/cc_branch/adapters/__init__.py +30 -0
- cc_branch-1.0.0/cc_branch/adapters/base.py +41 -0
- cc_branch-1.0.0/cc_branch/adapters/none.py +38 -0
- cc_branch-1.0.0/cc_branch/adapters/resume.py +91 -0
- cc_branch-1.0.0/cc_branch/adapters/selection.py +19 -0
- cc_branch-1.0.0/cc_branch/agent_registry/__init__.py +31 -0
- cc_branch-1.0.0/cc_branch/agent_registry/builtins.py +33 -0
- cc_branch-1.0.0/cc_branch/agent_registry/io.py +20 -0
- cc_branch-1.0.0/cc_branch/agent_registry/loader.py +65 -0
- cc_branch-1.0.0/cc_branch/agent_registry/models.py +55 -0
- cc_branch-1.0.0/cc_branch/agent_registry/paths.py +22 -0
- cc_branch-1.0.0/cc_branch/agents.yaml +66 -0
- cc_branch-1.0.0/cc_branch/app_state/__init__.py +11 -0
- cc_branch-1.0.0/cc_branch/app_state/paths.py +20 -0
- cc_branch-1.0.0/cc_branch/app_state/project_index.py +501 -0
- cc_branch-1.0.0/cc_branch/application/__init__.py +2 -0
- cc_branch-1.0.0/cc_branch/application/agent_sessions.py +530 -0
- cc_branch-1.0.0/cc_branch/application/config_validation/__init__.py +29 -0
- cc_branch-1.0.0/cc_branch/application/config_validation/collector.py +66 -0
- cc_branch-1.0.0/cc_branch/application/config_validation/constants.py +128 -0
- cc_branch-1.0.0/cc_branch/application/config_validation/issues.py +87 -0
- cc_branch-1.0.0/cc_branch/application/config_validation/sections.py +272 -0
- cc_branch-1.0.0/cc_branch/application/config_validation/validators.py +94 -0
- cc_branch-1.0.0/cc_branch/application/config_workflows/__init__.py +87 -0
- cc_branch-1.0.0/cc_branch/application/config_workflows/initialization.py +119 -0
- cc_branch-1.0.0/cc_branch/application/config_workflows/manage.py +107 -0
- cc_branch-1.0.0/cc_branch/application/config_workflows/options.py +78 -0
- cc_branch-1.0.0/cc_branch/application/config_workflows/read.py +93 -0
- cc_branch-1.0.0/cc_branch/application/config_workflows/save.py +73 -0
- cc_branch-1.0.0/cc_branch/application/config_workflows/versioning.py +53 -0
- cc_branch-1.0.0/cc_branch/application/config_workflows/window_state.py +125 -0
- cc_branch-1.0.0/cc_branch/application/diagnostics.py +224 -0
- cc_branch-1.0.0/cc_branch/application/global_agents.py +169 -0
- cc_branch-1.0.0/cc_branch/application/global_openers.py +139 -0
- cc_branch-1.0.0/cc_branch/application/remote_directory.py +114 -0
- cc_branch-1.0.0/cc_branch/application/results.py +19 -0
- cc_branch-1.0.0/cc_branch/application/runtime_environment.py +17 -0
- cc_branch-1.0.0/cc_branch/application/session_binding.py +232 -0
- cc_branch-1.0.0/cc_branch/application/ssh_config.py +150 -0
- cc_branch-1.0.0/cc_branch/application/state_store.py +31 -0
- cc_branch-1.0.0/cc_branch/application/system_paths.py +38 -0
- cc_branch-1.0.0/cc_branch/application/workspace_actions/__init__.py +168 -0
- cc_branch-1.0.0/cc_branch/application/workspace_actions/command_specs.py +116 -0
- cc_branch-1.0.0/cc_branch/application/workspace_actions/dependencies.py +24 -0
- cc_branch-1.0.0/cc_branch/application/workspace_actions/executor.py +190 -0
- cc_branch-1.0.0/cc_branch/application/workspace_actions/lifecycle.py +267 -0
- cc_branch-1.0.0/cc_branch/application/workspace_actions/open.py +283 -0
- cc_branch-1.0.0/cc_branch/application/workspace_actions/persistence.py +91 -0
- cc_branch-1.0.0/cc_branch/application/workspace_actions/sync.py +105 -0
- cc_branch-1.0.0/cc_branch/application/workspace_actions/targets.py +141 -0
- cc_branch-1.0.0/cc_branch/application/workspace_status.py +224 -0
- cc_branch-1.0.0/cc_branch/backends.py +7 -0
- cc_branch-1.0.0/cc_branch/bootstrap/__init__.py +41 -0
- cc_branch-1.0.0/cc_branch/bootstrap/environment.py +57 -0
- cc_branch-1.0.0/cc_branch/bootstrap/files.py +75 -0
- cc_branch-1.0.0/cc_branch/bootstrap/generation.py +55 -0
- cc_branch-1.0.0/cc_branch/bootstrap/models.py +68 -0
- cc_branch-1.0.0/cc_branch/bootstrap/sessions.py +17 -0
- cc_branch-1.0.0/cc_branch/cli/__init__.py +89 -0
- cc_branch-1.0.0/cc_branch/cli/commands/__init__.py +1 -0
- cc_branch-1.0.0/cc_branch/cli/commands/doctor.py +33 -0
- cc_branch-1.0.0/cc_branch/cli/commands/init.py +210 -0
- cc_branch-1.0.0/cc_branch/cli/commands/open.py +36 -0
- cc_branch-1.0.0/cc_branch/cli/commands/serve.py +45 -0
- cc_branch-1.0.0/cc_branch/cli/commands/service.py +268 -0
- cc_branch-1.0.0/cc_branch/cli/commands/sessions.py +144 -0
- cc_branch-1.0.0/cc_branch/cli/commands/sync.py +51 -0
- cc_branch-1.0.0/cc_branch/cli/commands/workspace.py +95 -0
- cc_branch-1.0.0/cc_branch/cli/constants.py +7 -0
- cc_branch-1.0.0/cc_branch/cli/dispatch.py +111 -0
- cc_branch-1.0.0/cc_branch/cli/errors.py +34 -0
- cc_branch-1.0.0/cc_branch/cli/help.py +159 -0
- cc_branch-1.0.0/cc_branch/cli/output.py +29 -0
- cc_branch-1.0.0/cc_branch/cli/parser.py +282 -0
- cc_branch-1.0.0/cc_branch/cli/targets.py +31 -0
- cc_branch-1.0.0/cc_branch/config/__init__.py +53 -0
- cc_branch-1.0.0/cc_branch/config/initialization.py +64 -0
- cc_branch-1.0.0/cc_branch/config/loading.py +51 -0
- cc_branch-1.0.0/cc_branch/config/normalization.py +47 -0
- cc_branch-1.0.0/cc_branch/config/paths.py +162 -0
- cc_branch-1.0.0/cc_branch/constants.py +6 -0
- cc_branch-1.0.0/cc_branch/context.py +100 -0
- cc_branch-1.0.0/cc_branch/desktop_backend.py +44 -0
- cc_branch-1.0.0/cc_branch/doctor/__init__.py +43 -0
- cc_branch-1.0.0/cc_branch/doctor/autofix.py +128 -0
- cc_branch-1.0.0/cc_branch/doctor/checks.py +324 -0
- cc_branch-1.0.0/cc_branch/doctor/messages.py +66 -0
- cc_branch-1.0.0/cc_branch/doctor/rendering.py +62 -0
- cc_branch-1.0.0/cc_branch/exceptions.py +35 -0
- cc_branch-1.0.0/cc_branch/models/__init__.py +29 -0
- cc_branch-1.0.0/cc_branch/models/agents.py +32 -0
- cc_branch-1.0.0/cc_branch/models/common.py +28 -0
- cc_branch-1.0.0/cc_branch/models/config.py +665 -0
- cc_branch-1.0.0/cc_branch/models/diagnostics.py +55 -0
- cc_branch-1.0.0/cc_branch/models/openers.py +32 -0
- cc_branch-1.0.0/cc_branch/models/plan.py +188 -0
- cc_branch-1.0.0/cc_branch/models/state.py +145 -0
- cc_branch-1.0.0/cc_branch/opener_registry.py +51 -0
- cc_branch-1.0.0/cc_branch/openers/__init__.py +60 -0
- cc_branch-1.0.0/cc_branch/openers/commands.py +61 -0
- cc_branch-1.0.0/cc_branch/openers/dispatcher.py +258 -0
- cc_branch-1.0.0/cc_branch/openers/editors.py +302 -0
- cc_branch-1.0.0/cc_branch/openers/platform.py +93 -0
- cc_branch-1.0.0/cc_branch/openers/registry.py +503 -0
- cc_branch-1.0.0/cc_branch/openers/terminal.py +163 -0
- cc_branch-1.0.0/cc_branch/openers/types.py +67 -0
- cc_branch-1.0.0/cc_branch/openers/warp.py +242 -0
- cc_branch-1.0.0/cc_branch/planner/__init__.py +24 -0
- cc_branch-1.0.0/cc_branch/planner/commands.py +175 -0
- cc_branch-1.0.0/cc_branch/planner/naming.py +18 -0
- cc_branch-1.0.0/cc_branch/planner/paths.py +36 -0
- cc_branch-1.0.0/cc_branch/planner/remote.py +52 -0
- cc_branch-1.0.0/cc_branch/planner/slots.py +30 -0
- cc_branch-1.0.0/cc_branch/planner/workspace.py +84 -0
- cc_branch-1.0.0/cc_branch/profiles/__init__.py +38 -0
- cc_branch-1.0.0/cc_branch/profiles/definitions.py +52 -0
- cc_branch-1.0.0/cc_branch/profiles/queries.py +17 -0
- cc_branch-1.0.0/cc_branch/profiles/rendering.py +141 -0
- cc_branch-1.0.0/cc_branch/repository/__init__.py +17 -0
- cc_branch-1.0.0/cc_branch/repository/codec.py +59 -0
- cc_branch-1.0.0/cc_branch/repository/state_repository.py +70 -0
- cc_branch-1.0.0/cc_branch/repository/validation.py +11 -0
- cc_branch-1.0.0/cc_branch/runtime/__init__.py +98 -0
- cc_branch-1.0.0/cc_branch/runtime/backends.py +191 -0
- cc_branch-1.0.0/cc_branch/runtime/capabilities.py +108 -0
- cc_branch-1.0.0/cc_branch/runtime/executables.py +40 -0
- cc_branch-1.0.0/cc_branch/runtime/execution/__init__.py +85 -0
- cc_branch-1.0.0/cc_branch/runtime/execution/backend_ops.py +28 -0
- cc_branch-1.0.0/cc_branch/runtime/execution/dashboard.py +82 -0
- cc_branch-1.0.0/cc_branch/runtime/execution/lifecycle.py +189 -0
- cc_branch-1.0.0/cc_branch/runtime/execution/status.py +118 -0
- cc_branch-1.0.0/cc_branch/runtime/execution/targets.py +65 -0
- cc_branch-1.0.0/cc_branch/runtime/execution/windows.py +142 -0
- cc_branch-1.0.0/cc_branch/runtime/sessions.py +320 -0
- cc_branch-1.0.0/cc_branch/runtime/shells.py +55 -0
- cc_branch-1.0.0/cc_branch/runtime/sync/__init__.py +53 -0
- cc_branch-1.0.0/cc_branch/runtime/sync/fingerprints.py +60 -0
- cc_branch-1.0.0/cc_branch/runtime/sync/inspection.py +17 -0
- cc_branch-1.0.0/cc_branch/runtime/sync/models.py +75 -0
- cc_branch-1.0.0/cc_branch/runtime/sync/report.py +173 -0
- cc_branch-1.0.0/cc_branch/runtime/sync/state.py +85 -0
- cc_branch-1.0.0/cc_branch/runtime/sync/targets.py +64 -0
- cc_branch-1.0.0/cc_branch/runtime_capabilities.py +41 -0
- cc_branch-1.0.0/cc_branch/runtime_sync.py +37 -0
- cc_branch-1.0.0/cc_branch/schema.py +69 -0
- cc_branch-1.0.0/cc_branch/sessions.py +19 -0
- cc_branch-1.0.0/cc_branch/shells.py +17 -0
- cc_branch-1.0.0/cc_branch/state.py +71 -0
- cc_branch-1.0.0/cc_branch/targets.py +67 -0
- cc_branch-1.0.0/cc_branch/templates.py +15 -0
- cc_branch-1.0.0/cc_branch/text.py +10 -0
- cc_branch-1.0.0/cc_branch/webui/__init__.py +5 -0
- cc_branch-1.0.0/cc_branch/webui/server/__init__.py +24 -0
- cc_branch-1.0.0/cc_branch/webui/server/api.py +614 -0
- cc_branch-1.0.0/cc_branch/webui/server/auth.py +97 -0
- cc_branch-1.0.0/cc_branch/webui/server/directory_picker.py +112 -0
- cc_branch-1.0.0/cc_branch/webui/server/handler.py +352 -0
- cc_branch-1.0.0/cc_branch/webui/server/runtime.py +31 -0
- cc_branch-1.0.0/cc_branch/webui/server/static.py +65 -0
- cc_branch-1.0.0/cc_branch/webui/server/terminal.py +63 -0
- cc_branch-1.0.0/cc_branch/webui/static/__init__.py +0 -0
- cc_branch-1.0.0/cc_branch/webui/static/apple-touch-icon.png +0 -0
- cc_branch-1.0.0/cc_branch/webui/static/assets/AddProjectModal-BhYm9ym8.js +1 -0
- cc_branch-1.0.0/cc_branch/webui/static/assets/ConfigEditor-eDOeTS2j.js +3 -0
- cc_branch-1.0.0/cc_branch/webui/static/assets/DoctorView-CLxHgGMY.js +3 -0
- cc_branch-1.0.0/cc_branch/webui/static/assets/FormPrimitives-BgUREk4d.js +1 -0
- cc_branch-1.0.0/cc_branch/webui/static/assets/SettingsModal-zho31DY5.js +4 -0
- cc_branch-1.0.0/cc_branch/webui/static/assets/Toast-B0o231EY.js +1 -0
- cc_branch-1.0.0/cc_branch/webui/static/assets/app-DDz2917G.js +1 -0
- cc_branch-1.0.0/cc_branch/webui/static/assets/configIssues-C47Cc0oD.js +1 -0
- cc_branch-1.0.0/cc_branch/webui/static/assets/core-Cv_ktERL.js +1 -0
- cc_branch-1.0.0/cc_branch/webui/static/assets/cursor-BM_3k4Y4.svg +1 -0
- cc_branch-1.0.0/cc_branch/webui/static/assets/dist-js-DWgoLVDI.js +1 -0
- cc_branch-1.0.0/cc_branch/webui/static/assets/dist-js-DaxDCY-s.js +1 -0
- cc_branch-1.0.0/cc_branch/webui/static/assets/folder-open-C4jJiCft.js +1 -0
- cc_branch-1.0.0/cc_branch/webui/static/assets/gemini-BYkEpiWr.svg +1 -0
- cc_branch-1.0.0/cc_branch/webui/static/assets/index-BTm2_0ej.js +44 -0
- cc_branch-1.0.0/cc_branch/webui/static/assets/index-DQT0CXzC.css +2 -0
- cc_branch-1.0.0/cc_branch/webui/static/assets/laptop-Uwog81lT.js +1 -0
- cc_branch-1.0.0/cc_branch/webui/static/assets/rolldown-runtime-S-ySWqyJ.js +1 -0
- cc_branch-1.0.0/cc_branch/webui/static/assets/warp-Cohf40FX.png +0 -0
- cc_branch-1.0.0/cc_branch/webui/static/dashboard-header-candidates.html +546 -0
- cc_branch-1.0.0/cc_branch/webui/static/favicon.png +0 -0
- cc_branch-1.0.0/cc_branch/webui/static/favicon.svg +32 -0
- cc_branch-1.0.0/cc_branch/webui/static/icon-512.png +0 -0
- cc_branch-1.0.0/cc_branch/webui/static/icons.svg +24 -0
- cc_branch-1.0.0/cc_branch/webui/static/index.html +67 -0
- cc_branch-1.0.0/cc_branch.egg-info/PKG-INFO +179 -0
- cc_branch-1.0.0/cc_branch.egg-info/SOURCES.txt +262 -0
- cc_branch-1.0.0/cc_branch.egg-info/dependency_links.txt +1 -0
- cc_branch-1.0.0/cc_branch.egg-info/entry_points.txt +3 -0
- cc_branch-1.0.0/cc_branch.egg-info/requires.txt +12 -0
- cc_branch-1.0.0/cc_branch.egg-info/top_level.txt +1 -0
- cc_branch-1.0.0/docs/README.md +31 -0
- cc_branch-1.0.0/docs/architecture.md +409 -0
- cc_branch-1.0.0/docs/contributing.md +180 -0
- cc_branch-1.0.0/docs/features.md +133 -0
- cc_branch-1.0.0/docs/getting-started.md +156 -0
- cc_branch-1.0.0/docs/install-troubleshooting.md +172 -0
- cc_branch-1.0.0/docs/publishing.md +353 -0
- cc_branch-1.0.0/docs/quickstart.md +176 -0
- cc_branch-1.0.0/docs/ssh-remote-workspaces.md +122 -0
- cc_branch-1.0.0/docs/uninstall-cleanup.md +51 -0
- cc_branch-1.0.0/docs/user-guide.md +554 -0
- cc_branch-1.0.0/docs/webui-spec.md +288 -0
- cc_branch-1.0.0/docs/workspace-terminology.zh.md +165 -0
- cc_branch-1.0.0/examples/agent-branch.yaml +43 -0
- cc_branch-1.0.0/examples/scenario-long-term.yaml +151 -0
- cc_branch-1.0.0/examples/scenario-multi-project.yaml +104 -0
- cc_branch-1.0.0/examples/scenario-solo-dev.yaml +78 -0
- cc_branch-1.0.0/examples/scenario-ssh-remote.yaml +30 -0
- cc_branch-1.0.0/packaging/desktop/cc_branch_backend.py +4 -0
- cc_branch-1.0.0/packaging/homebrew/Formula/cc-branch.rb.template +53 -0
- cc_branch-1.0.0/packaging/homebrew/README.md +41 -0
- cc_branch-1.0.0/packaging/npm/README.md +17 -0
- cc_branch-1.0.0/pyproject.toml +109 -0
- cc_branch-1.0.0/setup.cfg +4 -0
- cc_branch-1.0.0/setup.py +4 -0
- cc_branch-1.0.0/tests/test_agent_sessions.py +397 -0
- cc_branch-1.0.0/tests/test_app_state.py +188 -0
- cc_branch-1.0.0/tests/test_application_architecture.py +3085 -0
- cc_branch-1.0.0/tests/test_bootstrap.py +500 -0
- cc_branch-1.0.0/tests/test_cli.py +1074 -0
- cc_branch-1.0.0/tests/test_config.py +914 -0
- cc_branch-1.0.0/tests/test_context.py +16 -0
- cc_branch-1.0.0/tests/test_desktop_backend.py +81 -0
- cc_branch-1.0.0/tests/test_desktop_sidecar_build.py +160 -0
- cc_branch-1.0.0/tests/test_desktop_tauri_config.py +534 -0
- cc_branch-1.0.0/tests/test_diagnostic_bundle.py +100 -0
- cc_branch-1.0.0/tests/test_doctor.py +577 -0
- cc_branch-1.0.0/tests/test_global_agents.py +66 -0
- cc_branch-1.0.0/tests/test_global_openers.py +55 -0
- cc_branch-1.0.0/tests/test_openers.py +1031 -0
- cc_branch-1.0.0/tests/test_planner.py +527 -0
- cc_branch-1.0.0/tests/test_preflight_desktop_release.py +2433 -0
- cc_branch-1.0.0/tests/test_release_canary.py +1343 -0
- cc_branch-1.0.0/tests/test_release_version.py +46 -0
- cc_branch-1.0.0/tests/test_remote_directory.py +53 -0
- cc_branch-1.0.0/tests/test_render_desktop_release_notes.py +127 -0
- cc_branch-1.0.0/tests/test_runtime_backends.py +64 -0
- cc_branch-1.0.0/tests/test_runtime_executables.py +26 -0
- cc_branch-1.0.0/tests/test_schema.py +74 -0
- cc_branch-1.0.0/tests/test_session_binding.py +178 -0
- cc_branch-1.0.0/tests/test_smoke_test_backend_sidecar.py +235 -0
- cc_branch-1.0.0/tests/test_smoke_test_desktop_app.py +724 -0
- cc_branch-1.0.0/tests/test_ssh_config.py +48 -0
- cc_branch-1.0.0/tests/test_state.py +200 -0
- cc_branch-1.0.0/tests/test_system_paths.py +33 -0
- cc_branch-1.0.0/tests/test_templates.py +18 -0
- cc_branch-1.0.0/tests/test_verify_desktop_installers.py +1130 -0
- cc_branch-1.0.0/tests/test_verify_github_release.py +1321 -0
- cc_branch-1.0.0/tests/test_verify_macos_dmg.py +362 -0
- cc_branch-1.0.0/tests/test_web_vitest_config.py +25 -0
- cc_branch-1.0.0/tests/test_webui.py +3011 -0
- cc_branch-1.0.0/tests/test_workspace.py +776 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [1.0.0] - 2026-06-01
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- First public baseline for CC Branch.
|
|
12
|
+
- CLI, Web UI, and desktop shell for restoring multi-agent terminal workspaces.
|
|
13
|
+
- App-scoped Web UI service commands: `cc-branch service start`, `status`, `stop`, `restart`, and `logs`.
|
|
14
|
+
- Project-level foreground Web UI command: `cc-branch serve`.
|
|
15
|
+
- Config editor and dashboard support for enabling or disabling individual windows.
|
|
16
|
+
- Tmux and direct-layout workspace execution, SSH targets, opener integrations, diagnostics, and local project index.
|
|
17
|
+
- Desktop release packaging with bundled backend sidecar and GitHub release verification.
|
|
18
|
+
|
|
19
|
+
[1.0.0]: https://github.com/GeminiLight/cc-branch/releases/tag/v1.0.0
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Contributing to CC Branch
|
|
2
|
+
|
|
3
|
+
Thanks for contributing to CC Branch.
|
|
4
|
+
|
|
5
|
+
The canonical contributor guide lives in [`docs/contributing.md`](docs/contributing.md). Keep that file as the source of truth for architecture boundaries, test commands, and documentation expectations.
|
|
6
|
+
|
|
7
|
+
## Quick Setup
|
|
8
|
+
|
|
9
|
+
Requirements:
|
|
10
|
+
|
|
11
|
+
- Python 3.10+
|
|
12
|
+
- Node.js/npm for Web UI work
|
|
13
|
+
- `tmux` when testing `layoutBackend: tmux`
|
|
14
|
+
- Git
|
|
15
|
+
|
|
16
|
+
Install locally:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
pip install -e .
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Editable installs do not build Web UI assets. Build them when you need to test `cc-branch serve`:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
python scripts/build-webui.py
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Quality Checks
|
|
29
|
+
|
|
30
|
+
Run the relevant checks before opening a pull request:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
python -m unittest discover tests
|
|
34
|
+
python -m ruff check .
|
|
35
|
+
python -m mypy cc_branch
|
|
36
|
+
npm --prefix apps/web run lint
|
|
37
|
+
npm --prefix apps/web test -- --run
|
|
38
|
+
npm --prefix apps/web run build
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
For package validation:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
python -m build --sdist --wheel
|
|
45
|
+
python -m twine check dist/*
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Pull Requests
|
|
49
|
+
|
|
50
|
+
- Keep each PR focused.
|
|
51
|
+
- Add or update tests for behavior changes.
|
|
52
|
+
- Update user-facing docs when behavior changes.
|
|
53
|
+
- Use clear commit messages that describe the real change.
|
|
54
|
+
- Include rollout or release notes when touching packaging, desktop, or publishing behavior.
|
|
55
|
+
|
|
56
|
+
## Documentation
|
|
57
|
+
|
|
58
|
+
When behavior changes, keep these files aligned as needed:
|
|
59
|
+
|
|
60
|
+
- [`README.md`](README.md)
|
|
61
|
+
- [`README.zh.md`](README.zh.md)
|
|
62
|
+
- [`docs/README.md`](docs/README.md)
|
|
63
|
+
- [`docs/getting-started.md`](docs/getting-started.md)
|
|
64
|
+
- [`docs/quickstart.md`](docs/quickstart.md)
|
|
65
|
+
- [`docs/user-guide.md`](docs/user-guide.md)
|
|
66
|
+
- [`docs/features.md`](docs/features.md)
|
|
67
|
+
- [`docs/architecture.md`](docs/architecture.md)
|
|
68
|
+
- [`docs/webui-spec.md`](docs/webui-spec.md)
|
|
69
|
+
|
|
70
|
+
## Security
|
|
71
|
+
|
|
72
|
+
Report security issues through the process in [`SECURITY.md`](SECURITY.md).
|
|
73
|
+
|
|
74
|
+
## License
|
|
75
|
+
|
|
76
|
+
By contributing, you agree that your contributions will be licensed under the MIT License.
|
cc_branch-1.0.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 GeminiLight
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Include important files
|
|
2
|
+
include LICENSE
|
|
3
|
+
include README.md
|
|
4
|
+
include README.zh.md
|
|
5
|
+
include CHANGELOG.md
|
|
6
|
+
include CONTRIBUTING.md
|
|
7
|
+
include pyproject.toml
|
|
8
|
+
include cc_branch/agents.yaml
|
|
9
|
+
recursive-include cc_branch/webui/static *
|
|
10
|
+
prune cc_branch/webui/static/__pycache__
|
|
11
|
+
|
|
12
|
+
# Include examples and docs
|
|
13
|
+
recursive-include examples *.yaml
|
|
14
|
+
recursive-include docs *.md
|
|
15
|
+
recursive-include packaging *.md *.template *.py
|
|
16
|
+
global-exclude *.py[cod]
|
|
17
|
+
global-exclude __pycache__
|
cc_branch-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: cc-branch
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Multi-agent workspace orchestrator for shell and tmux runtimes
|
|
5
|
+
Author-email: GeminiLight <wtfly2018@gmail.com>
|
|
6
|
+
Maintainer-email: GeminiLight <wtfly2018@gmail.com>
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
Project-URL: Homepage, https://github.com/GeminiLight/cc-branch
|
|
9
|
+
Project-URL: Documentation, https://github.com/GeminiLight/cc-branch/blob/main/docs
|
|
10
|
+
Project-URL: Repository, https://github.com/GeminiLight/cc-branch
|
|
11
|
+
Project-URL: Issues, https://github.com/GeminiLight/cc-branch/issues
|
|
12
|
+
Project-URL: Changelog, https://github.com/GeminiLight/cc-branch/blob/main/CHANGELOG.md
|
|
13
|
+
Keywords: tmux,cli,agents,orchestrator,ai,workspace,automation
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Topic :: Software Development :: Build Tools
|
|
16
|
+
Classifier: Topic :: System :: Shells
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Environment :: Console
|
|
22
|
+
Classifier: Operating System :: MacOS
|
|
23
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
24
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
25
|
+
Requires-Python: >=3.10
|
|
26
|
+
Description-Content-Type: text/markdown
|
|
27
|
+
License-File: LICENSE
|
|
28
|
+
Requires-Dist: PyYAML>=6.0
|
|
29
|
+
Requires-Dist: rich>=13.0.0
|
|
30
|
+
Provides-Extra: dev
|
|
31
|
+
Requires-Dist: mypy>=1.18.0; extra == "dev"
|
|
32
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
33
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
34
|
+
Requires-Dist: ruff>=0.1.0; extra == "dev"
|
|
35
|
+
Requires-Dist: types-PyYAML>=6.0.12; extra == "dev"
|
|
36
|
+
Provides-Extra: desktop
|
|
37
|
+
Requires-Dist: pyinstaller>=6.0.0; extra == "desktop"
|
|
38
|
+
Dynamic: license-file
|
|
39
|
+
|
|
40
|
+
<div align="center">
|
|
41
|
+
|
|
42
|
+
# CC Branch
|
|
43
|
+
|
|
44
|
+
### Restore your multi-agent CLI workbench in one command
|
|
45
|
+
|
|
46
|
+
English | [中文](README.zh.md)
|
|
47
|
+
|
|
48
|
+
[](https://github.com/GeminiLight/cc-branch/actions/workflows/ci.yml)
|
|
49
|
+

|
|
50
|
+

|
|
51
|
+

|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
|
|
55
|
+
CC Branch restores the working environment around a project: agents, terminals, editors, local folders, SSH machines, and reusable sessions.
|
|
56
|
+
|
|
57
|
+
## Why Developers Use It
|
|
58
|
+
|
|
59
|
+
### 1. Restore the full project workbench
|
|
60
|
+
|
|
61
|
+
- A project may need Codex, Claude Code, dev servers, logs, editors, and multiple tmux windows.
|
|
62
|
+
- CC Branch lets you configure that workbench once, then bring it back with one command.
|
|
63
|
+
|
|
64
|
+
### 2. Continue from existing sessions
|
|
65
|
+
|
|
66
|
+
- Agent and tmux sessions may already be running from the last time you worked on the project.
|
|
67
|
+
- CC Branch attaches back to those sessions, so returning to a project feels like continuing work instead of starting over.
|
|
68
|
+
|
|
69
|
+
### 3. Work across local and SSH machines
|
|
70
|
+
|
|
71
|
+
- A project may span a local repo, SSH machine, GPU box, remote tmux session, and local editor.
|
|
72
|
+
- CC Branch keeps local and remote work in one workspace, so returning to the project means continuing instead of rebuilding.
|
|
73
|
+
|
|
74
|
+
## Install
|
|
75
|
+
|
|
76
|
+
### Desktop app
|
|
77
|
+
|
|
78
|
+
Download the desktop app from the [latest GitHub Release](https://github.com/GeminiLight/cc-branch/releases/latest).
|
|
79
|
+
|
|
80
|
+
Use this when you want the native desktop experience.
|
|
81
|
+
|
|
82
|
+
### CLI and Web UI with pip
|
|
83
|
+
|
|
84
|
+
Install the CLI/backend and packaged browser Web UI:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
pip install cc-branch
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
The pip package does not install the desktop app. Use GitHub Releases for the native desktop build.
|
|
91
|
+
|
|
92
|
+
### From source
|
|
93
|
+
|
|
94
|
+
Use the source install when you want to develop or inspect the repo locally:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
git clone https://github.com/GeminiLight/cc-branch.git
|
|
98
|
+
cd cc-branch
|
|
99
|
+
pip install .
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Source checkouts do not build the Web UI automatically. Run `python scripts/build-webui.py` before `cc-branch serve` when developing the browser UI.
|
|
103
|
+
|
|
104
|
+
`cc-branch` is also available as `ccb`.
|
|
105
|
+
|
|
106
|
+
## Quick Use
|
|
107
|
+
|
|
108
|
+
Start the browser Web UI:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
cc-branch service start
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
It runs at `http://127.0.0.1:8080` by default.
|
|
115
|
+
|
|
116
|
+
Create and restore a workspace from a project:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
cd /path/to/project
|
|
120
|
+
cc-branch init
|
|
121
|
+
cc-branch plan
|
|
122
|
+
cc-branch start
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Daily Commands
|
|
126
|
+
|
|
127
|
+
| Command | What it is for |
|
|
128
|
+
| --- | --- |
|
|
129
|
+
| `cc-branch service start` | Start the local Web UI service in the background |
|
|
130
|
+
| `cc-branch serve` | Run the Web UI server in the foreground |
|
|
131
|
+
| `cc-branch init` | Create a starter `.cc-branch/config.yaml` |
|
|
132
|
+
| `cc-branch plan` | Show the agents, commands, panes, openers, and SSH targets before launch |
|
|
133
|
+
| `cc-branch start` | Start missing targets or reconnect reusable tmux-backed sessions |
|
|
134
|
+
| `cc-branch attach [tab[:pane]]` | Jump into a running tab, pane, or tmux target |
|
|
135
|
+
| `cc-branch open --opener <tool>` | Open the project with VS Code, Cursor, Warp, terminal, Web UI, or desktop |
|
|
136
|
+
| `cc-branch status` | Show runtime status |
|
|
137
|
+
| `cc-branch sync` | Apply config changes to running tmux targets |
|
|
138
|
+
| `cc-branch doctor --fix` | Diagnose and repair low-risk environment, config, or state issues |
|
|
139
|
+
| `cc-branch session list` | List known agent session metadata |
|
|
140
|
+
|
|
141
|
+
## Example Config
|
|
142
|
+
|
|
143
|
+
```yaml
|
|
144
|
+
version: 2
|
|
145
|
+
project: my-app
|
|
146
|
+
root: .
|
|
147
|
+
openWith: cursor
|
|
148
|
+
layoutBackend: tmux
|
|
149
|
+
|
|
150
|
+
tabs:
|
|
151
|
+
- name: agents
|
|
152
|
+
panes:
|
|
153
|
+
- name: planner
|
|
154
|
+
agent: codex
|
|
155
|
+
- name: review
|
|
156
|
+
agent: claude
|
|
157
|
+
- name: remote-lab
|
|
158
|
+
ssh:
|
|
159
|
+
host: gpu-dev
|
|
160
|
+
cwd: /srv/my-app
|
|
161
|
+
panes:
|
|
162
|
+
- name: qa
|
|
163
|
+
command: npm run qa
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Built-in agent profiles are available automatically. Add an `agents` section only when you need to override a built-in profile or define a custom local tool.
|
|
167
|
+
|
|
168
|
+
## Documentation
|
|
169
|
+
|
|
170
|
+
- [Getting Started](docs/getting-started.md)
|
|
171
|
+
- [User Guide](docs/user-guide.md)
|
|
172
|
+
- [Feature Reference](docs/features.md)
|
|
173
|
+
- [SSH Remote Workspaces](docs/ssh-remote-workspaces.md)
|
|
174
|
+
- [Install Troubleshooting](docs/install-troubleshooting.md)
|
|
175
|
+
- [Publishing Runbook](docs/publishing.md)
|
|
176
|
+
|
|
177
|
+
## License
|
|
178
|
+
|
|
179
|
+
MIT License. See [LICENSE](LICENSE) for details.
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# CC Branch
|
|
4
|
+
|
|
5
|
+
### Restore your multi-agent CLI workbench in one command
|
|
6
|
+
|
|
7
|
+
English | [中文](README.zh.md)
|
|
8
|
+
|
|
9
|
+
[](https://github.com/GeminiLight/cc-branch/actions/workflows/ci.yml)
|
|
10
|
+

|
|
11
|
+

|
|
12
|
+

|
|
13
|
+
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
CC Branch restores the working environment around a project: agents, terminals, editors, local folders, SSH machines, and reusable sessions.
|
|
17
|
+
|
|
18
|
+
## Why Developers Use It
|
|
19
|
+
|
|
20
|
+
### 1. Restore the full project workbench
|
|
21
|
+
|
|
22
|
+
- A project may need Codex, Claude Code, dev servers, logs, editors, and multiple tmux windows.
|
|
23
|
+
- CC Branch lets you configure that workbench once, then bring it back with one command.
|
|
24
|
+
|
|
25
|
+
### 2. Continue from existing sessions
|
|
26
|
+
|
|
27
|
+
- Agent and tmux sessions may already be running from the last time you worked on the project.
|
|
28
|
+
- CC Branch attaches back to those sessions, so returning to a project feels like continuing work instead of starting over.
|
|
29
|
+
|
|
30
|
+
### 3. Work across local and SSH machines
|
|
31
|
+
|
|
32
|
+
- A project may span a local repo, SSH machine, GPU box, remote tmux session, and local editor.
|
|
33
|
+
- CC Branch keeps local and remote work in one workspace, so returning to the project means continuing instead of rebuilding.
|
|
34
|
+
|
|
35
|
+
## Install
|
|
36
|
+
|
|
37
|
+
### Desktop app
|
|
38
|
+
|
|
39
|
+
Download the desktop app from the [latest GitHub Release](https://github.com/GeminiLight/cc-branch/releases/latest).
|
|
40
|
+
|
|
41
|
+
Use this when you want the native desktop experience.
|
|
42
|
+
|
|
43
|
+
### CLI and Web UI with pip
|
|
44
|
+
|
|
45
|
+
Install the CLI/backend and packaged browser Web UI:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
pip install cc-branch
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
The pip package does not install the desktop app. Use GitHub Releases for the native desktop build.
|
|
52
|
+
|
|
53
|
+
### From source
|
|
54
|
+
|
|
55
|
+
Use the source install when you want to develop or inspect the repo locally:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
git clone https://github.com/GeminiLight/cc-branch.git
|
|
59
|
+
cd cc-branch
|
|
60
|
+
pip install .
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Source checkouts do not build the Web UI automatically. Run `python scripts/build-webui.py` before `cc-branch serve` when developing the browser UI.
|
|
64
|
+
|
|
65
|
+
`cc-branch` is also available as `ccb`.
|
|
66
|
+
|
|
67
|
+
## Quick Use
|
|
68
|
+
|
|
69
|
+
Start the browser Web UI:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
cc-branch service start
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
It runs at `http://127.0.0.1:8080` by default.
|
|
76
|
+
|
|
77
|
+
Create and restore a workspace from a project:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
cd /path/to/project
|
|
81
|
+
cc-branch init
|
|
82
|
+
cc-branch plan
|
|
83
|
+
cc-branch start
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Daily Commands
|
|
87
|
+
|
|
88
|
+
| Command | What it is for |
|
|
89
|
+
| --- | --- |
|
|
90
|
+
| `cc-branch service start` | Start the local Web UI service in the background |
|
|
91
|
+
| `cc-branch serve` | Run the Web UI server in the foreground |
|
|
92
|
+
| `cc-branch init` | Create a starter `.cc-branch/config.yaml` |
|
|
93
|
+
| `cc-branch plan` | Show the agents, commands, panes, openers, and SSH targets before launch |
|
|
94
|
+
| `cc-branch start` | Start missing targets or reconnect reusable tmux-backed sessions |
|
|
95
|
+
| `cc-branch attach [tab[:pane]]` | Jump into a running tab, pane, or tmux target |
|
|
96
|
+
| `cc-branch open --opener <tool>` | Open the project with VS Code, Cursor, Warp, terminal, Web UI, or desktop |
|
|
97
|
+
| `cc-branch status` | Show runtime status |
|
|
98
|
+
| `cc-branch sync` | Apply config changes to running tmux targets |
|
|
99
|
+
| `cc-branch doctor --fix` | Diagnose and repair low-risk environment, config, or state issues |
|
|
100
|
+
| `cc-branch session list` | List known agent session metadata |
|
|
101
|
+
|
|
102
|
+
## Example Config
|
|
103
|
+
|
|
104
|
+
```yaml
|
|
105
|
+
version: 2
|
|
106
|
+
project: my-app
|
|
107
|
+
root: .
|
|
108
|
+
openWith: cursor
|
|
109
|
+
layoutBackend: tmux
|
|
110
|
+
|
|
111
|
+
tabs:
|
|
112
|
+
- name: agents
|
|
113
|
+
panes:
|
|
114
|
+
- name: planner
|
|
115
|
+
agent: codex
|
|
116
|
+
- name: review
|
|
117
|
+
agent: claude
|
|
118
|
+
- name: remote-lab
|
|
119
|
+
ssh:
|
|
120
|
+
host: gpu-dev
|
|
121
|
+
cwd: /srv/my-app
|
|
122
|
+
panes:
|
|
123
|
+
- name: qa
|
|
124
|
+
command: npm run qa
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Built-in agent profiles are available automatically. Add an `agents` section only when you need to override a built-in profile or define a custom local tool.
|
|
128
|
+
|
|
129
|
+
## Documentation
|
|
130
|
+
|
|
131
|
+
- [Getting Started](docs/getting-started.md)
|
|
132
|
+
- [User Guide](docs/user-guide.md)
|
|
133
|
+
- [Feature Reference](docs/features.md)
|
|
134
|
+
- [SSH Remote Workspaces](docs/ssh-remote-workspaces.md)
|
|
135
|
+
- [Install Troubleshooting](docs/install-troubleshooting.md)
|
|
136
|
+
- [Publishing Runbook](docs/publishing.md)
|
|
137
|
+
|
|
138
|
+
## License
|
|
139
|
+
|
|
140
|
+
MIT License. See [LICENSE](LICENSE) for details.
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# CC Branch
|
|
4
|
+
|
|
5
|
+
### 一键恢复多 Agent CLI 工作台
|
|
6
|
+
|
|
7
|
+
[English](README.md) | 中文
|
|
8
|
+
|
|
9
|
+
[](https://github.com/GeminiLight/cc-branch/actions/workflows/ci.yml)
|
|
10
|
+

|
|
11
|
+

|
|
12
|
+

|
|
13
|
+
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
CC Branch 恢复一个项目周围的工作环境:Agent、终端、编辑器、本机目录、SSH 机器和可复用会话。
|
|
17
|
+
|
|
18
|
+
## 为什么用它
|
|
19
|
+
|
|
20
|
+
### 1. 恢复完整的项目工作台
|
|
21
|
+
|
|
22
|
+
- 一个项目可能同时需要 Codex、Claude Code、dev server、日志、编辑器和多个 tmux 窗口。
|
|
23
|
+
- CC Branch 让这套工作台只配置一次,之后一条命令就能恢复。
|
|
24
|
+
|
|
25
|
+
### 2. 回到已有会话继续
|
|
26
|
+
|
|
27
|
+
- 上次开的 Agent 会话和 tmux 会话,很多时候其实还在继续运行。
|
|
28
|
+
- CC Branch 可以直接接回这些会话,回到项目就是继续工作,而不是重新开始。
|
|
29
|
+
|
|
30
|
+
### 3. 同时处理本机和 SSH 机器
|
|
31
|
+
|
|
32
|
+
- 一个项目可能横跨本机仓库、SSH 机器、GPU 机器、远程 tmux 会话和本机编辑器。
|
|
33
|
+
- CC Branch 把本机和远程工作放进同一个 workspace,回到项目就是继续,而不是重新搭环境。
|
|
34
|
+
|
|
35
|
+
## 安装
|
|
36
|
+
|
|
37
|
+
### 桌面端
|
|
38
|
+
|
|
39
|
+
从 [最新 GitHub Release](https://github.com/GeminiLight/cc-branch/releases/latest) 下载桌面端。
|
|
40
|
+
|
|
41
|
+
需要原生桌面体验时,使用桌面端。
|
|
42
|
+
|
|
43
|
+
### 用 pip 安装 CLI 和 Web UI
|
|
44
|
+
|
|
45
|
+
安装 CLI/backend 和打包好的浏览器 Web UI:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
pip install cc-branch
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
pip 包不会安装桌面端。需要原生桌面 App 时,从 GitHub Releases 下载。
|
|
52
|
+
|
|
53
|
+
### 从源码安装
|
|
54
|
+
|
|
55
|
+
需要本地开发或查看源码时,可以从仓库安装:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
git clone https://github.com/GeminiLight/cc-branch.git
|
|
59
|
+
cd cc-branch
|
|
60
|
+
pip install .
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
源码 checkout 不会自动构建 Web UI。开发浏览器 UI 时,先运行 `python scripts/build-webui.py` 再使用 `cc-branch serve`。
|
|
64
|
+
|
|
65
|
+
`cc-branch` 也可以简写为 `ccb`。
|
|
66
|
+
|
|
67
|
+
## 快速使用
|
|
68
|
+
|
|
69
|
+
启动浏览器 Web UI:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
cc-branch service start
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
默认运行在 `http://127.0.0.1:8080`。
|
|
76
|
+
|
|
77
|
+
在项目里创建并恢复 workspace:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
cd /path/to/project
|
|
81
|
+
cc-branch init
|
|
82
|
+
cc-branch plan
|
|
83
|
+
cc-branch start
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## 日常命令
|
|
87
|
+
|
|
88
|
+
| 命令 | 用途 |
|
|
89
|
+
| --- | --- |
|
|
90
|
+
| `cc-branch service start` | 后台启动本地 Web UI service |
|
|
91
|
+
| `cc-branch serve` | 前台运行 Web UI server |
|
|
92
|
+
| `cc-branch init` | 创建 starter `.cc-branch/config.yaml` |
|
|
93
|
+
| `cc-branch plan` | 启动前展示 Agent、命令、窗格、打开方式和 SSH 目标 |
|
|
94
|
+
| `cc-branch start` | 启动缺失目标,或接回可复用的 tmux 会话 |
|
|
95
|
+
| `cc-branch attach [tab[:pane]]` | 进入正在运行的 tab、pane 或 tmux target |
|
|
96
|
+
| `cc-branch open --opener <tool>` | 用 VS Code、Cursor、Warp、terminal、Web UI 或桌面端打开项目 |
|
|
97
|
+
| `cc-branch status` | 查看 runtime 状态 |
|
|
98
|
+
| `cc-branch sync` | 把配置变更同步到正在运行的 tmux targets |
|
|
99
|
+
| `cc-branch doctor --fix` | 诊断并修复低风险环境、配置或状态问题 |
|
|
100
|
+
| `cc-branch session list` | 列出已知 agent session metadata |
|
|
101
|
+
|
|
102
|
+
## 配置示例
|
|
103
|
+
|
|
104
|
+
```yaml
|
|
105
|
+
version: 2
|
|
106
|
+
project: my-app
|
|
107
|
+
root: .
|
|
108
|
+
openWith: cursor
|
|
109
|
+
layoutBackend: tmux
|
|
110
|
+
|
|
111
|
+
tabs:
|
|
112
|
+
- name: agents
|
|
113
|
+
panes:
|
|
114
|
+
- name: planner
|
|
115
|
+
agent: codex
|
|
116
|
+
- name: review
|
|
117
|
+
agent: claude
|
|
118
|
+
- name: remote-lab
|
|
119
|
+
ssh:
|
|
120
|
+
host: gpu-dev
|
|
121
|
+
cwd: /srv/my-app
|
|
122
|
+
panes:
|
|
123
|
+
- name: qa
|
|
124
|
+
command: npm run qa
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
内置 agent profiles 会自动可用。只有在需要覆盖内置 profile 或定义自定义本地工具时,才需要添加 `agents` 配置。
|
|
128
|
+
|
|
129
|
+
## 文档
|
|
130
|
+
|
|
131
|
+
- [Getting Started](docs/getting-started.md)
|
|
132
|
+
- [User Guide](docs/user-guide.md)
|
|
133
|
+
- [Feature Reference](docs/features.md)
|
|
134
|
+
- [SSH Remote Workspaces](docs/ssh-remote-workspaces.md)
|
|
135
|
+
- [Install Troubleshooting](docs/install-troubleshooting.md)
|
|
136
|
+
- [Publishing Runbook](docs/publishing.md)
|
|
137
|
+
|
|
138
|
+
## 许可证
|
|
139
|
+
|
|
140
|
+
本项目采用 MIT 许可证。详情见 [LICENSE](LICENSE)。
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"""cc-branch — Multi-agent workspace orchestrator."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from .adapters import AgentAdapter, get_adapter
|
|
6
|
+
from .backends import Backend, TmuxBackend, get_backend, set_backend
|
|
7
|
+
from .config import init_workspace, load_workspace
|
|
8
|
+
from .context import WorkspaceContext
|
|
9
|
+
from .exceptions import (
|
|
10
|
+
CcbError,
|
|
11
|
+
ConfigError,
|
|
12
|
+
RuntimeError,
|
|
13
|
+
SlotNotFoundError,
|
|
14
|
+
StateError,
|
|
15
|
+
WindowNotFoundError,
|
|
16
|
+
WorkspaceError,
|
|
17
|
+
)
|
|
18
|
+
from .models import (
|
|
19
|
+
AgentSpec,
|
|
20
|
+
DisplayConfig,
|
|
21
|
+
DoctorReport,
|
|
22
|
+
Issue,
|
|
23
|
+
SlotConfig,
|
|
24
|
+
SlotPlan,
|
|
25
|
+
WindowConfig,
|
|
26
|
+
WindowPlan,
|
|
27
|
+
WorkspaceConfig,
|
|
28
|
+
WorkspacePlan,
|
|
29
|
+
WorkspaceState,
|
|
30
|
+
)
|
|
31
|
+
from .planner import plan_workspace
|
|
32
|
+
from .repository import StateRepository
|
|
33
|
+
from .sessions import inspect_session, list_sessions, prune_sessions, restore_session
|
|
34
|
+
from .state import load_state, merge_state, save_state
|
|
35
|
+
|
|
36
|
+
__version__ = "1.0.0"
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def main(argv: list[str] | None = None) -> int:
|
|
40
|
+
from .cli import main as cli_main
|
|
41
|
+
|
|
42
|
+
return cli_main(argv)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
__all__ = [
|
|
46
|
+
"init_workspace",
|
|
47
|
+
"__version__",
|
|
48
|
+
"load_state",
|
|
49
|
+
"load_workspace",
|
|
50
|
+
"main",
|
|
51
|
+
"merge_state",
|
|
52
|
+
"plan_workspace",
|
|
53
|
+
"save_state",
|
|
54
|
+
"AgentAdapter",
|
|
55
|
+
"AgentSpec",
|
|
56
|
+
"DisplayConfig",
|
|
57
|
+
"DoctorReport",
|
|
58
|
+
"get_adapter",
|
|
59
|
+
"get_backend",
|
|
60
|
+
"inspect_session",
|
|
61
|
+
"Issue",
|
|
62
|
+
"list_sessions",
|
|
63
|
+
"prune_sessions",
|
|
64
|
+
"restore_session",
|
|
65
|
+
"set_backend",
|
|
66
|
+
"SlotConfig",
|
|
67
|
+
"SlotPlan",
|
|
68
|
+
"WindowConfig",
|
|
69
|
+
"WindowPlan",
|
|
70
|
+
"WorkspaceConfig",
|
|
71
|
+
"WorkspaceContext",
|
|
72
|
+
"WorkspacePlan",
|
|
73
|
+
"WorkspaceState",
|
|
74
|
+
"StateRepository",
|
|
75
|
+
"TmuxBackend",
|
|
76
|
+
]
|