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.
Files changed (264) hide show
  1. cc_branch-1.0.0/CHANGELOG.md +19 -0
  2. cc_branch-1.0.0/CONTRIBUTING.md +76 -0
  3. cc_branch-1.0.0/LICENSE +21 -0
  4. cc_branch-1.0.0/MANIFEST.in +17 -0
  5. cc_branch-1.0.0/PKG-INFO +179 -0
  6. cc_branch-1.0.0/README.md +140 -0
  7. cc_branch-1.0.0/README.zh.md +140 -0
  8. cc_branch-1.0.0/cc_branch/__init__.py +76 -0
  9. cc_branch-1.0.0/cc_branch/__main__.py +4 -0
  10. cc_branch-1.0.0/cc_branch/adapters/__init__.py +30 -0
  11. cc_branch-1.0.0/cc_branch/adapters/base.py +41 -0
  12. cc_branch-1.0.0/cc_branch/adapters/none.py +38 -0
  13. cc_branch-1.0.0/cc_branch/adapters/resume.py +91 -0
  14. cc_branch-1.0.0/cc_branch/adapters/selection.py +19 -0
  15. cc_branch-1.0.0/cc_branch/agent_registry/__init__.py +31 -0
  16. cc_branch-1.0.0/cc_branch/agent_registry/builtins.py +33 -0
  17. cc_branch-1.0.0/cc_branch/agent_registry/io.py +20 -0
  18. cc_branch-1.0.0/cc_branch/agent_registry/loader.py +65 -0
  19. cc_branch-1.0.0/cc_branch/agent_registry/models.py +55 -0
  20. cc_branch-1.0.0/cc_branch/agent_registry/paths.py +22 -0
  21. cc_branch-1.0.0/cc_branch/agents.yaml +66 -0
  22. cc_branch-1.0.0/cc_branch/app_state/__init__.py +11 -0
  23. cc_branch-1.0.0/cc_branch/app_state/paths.py +20 -0
  24. cc_branch-1.0.0/cc_branch/app_state/project_index.py +501 -0
  25. cc_branch-1.0.0/cc_branch/application/__init__.py +2 -0
  26. cc_branch-1.0.0/cc_branch/application/agent_sessions.py +530 -0
  27. cc_branch-1.0.0/cc_branch/application/config_validation/__init__.py +29 -0
  28. cc_branch-1.0.0/cc_branch/application/config_validation/collector.py +66 -0
  29. cc_branch-1.0.0/cc_branch/application/config_validation/constants.py +128 -0
  30. cc_branch-1.0.0/cc_branch/application/config_validation/issues.py +87 -0
  31. cc_branch-1.0.0/cc_branch/application/config_validation/sections.py +272 -0
  32. cc_branch-1.0.0/cc_branch/application/config_validation/validators.py +94 -0
  33. cc_branch-1.0.0/cc_branch/application/config_workflows/__init__.py +87 -0
  34. cc_branch-1.0.0/cc_branch/application/config_workflows/initialization.py +119 -0
  35. cc_branch-1.0.0/cc_branch/application/config_workflows/manage.py +107 -0
  36. cc_branch-1.0.0/cc_branch/application/config_workflows/options.py +78 -0
  37. cc_branch-1.0.0/cc_branch/application/config_workflows/read.py +93 -0
  38. cc_branch-1.0.0/cc_branch/application/config_workflows/save.py +73 -0
  39. cc_branch-1.0.0/cc_branch/application/config_workflows/versioning.py +53 -0
  40. cc_branch-1.0.0/cc_branch/application/config_workflows/window_state.py +125 -0
  41. cc_branch-1.0.0/cc_branch/application/diagnostics.py +224 -0
  42. cc_branch-1.0.0/cc_branch/application/global_agents.py +169 -0
  43. cc_branch-1.0.0/cc_branch/application/global_openers.py +139 -0
  44. cc_branch-1.0.0/cc_branch/application/remote_directory.py +114 -0
  45. cc_branch-1.0.0/cc_branch/application/results.py +19 -0
  46. cc_branch-1.0.0/cc_branch/application/runtime_environment.py +17 -0
  47. cc_branch-1.0.0/cc_branch/application/session_binding.py +232 -0
  48. cc_branch-1.0.0/cc_branch/application/ssh_config.py +150 -0
  49. cc_branch-1.0.0/cc_branch/application/state_store.py +31 -0
  50. cc_branch-1.0.0/cc_branch/application/system_paths.py +38 -0
  51. cc_branch-1.0.0/cc_branch/application/workspace_actions/__init__.py +168 -0
  52. cc_branch-1.0.0/cc_branch/application/workspace_actions/command_specs.py +116 -0
  53. cc_branch-1.0.0/cc_branch/application/workspace_actions/dependencies.py +24 -0
  54. cc_branch-1.0.0/cc_branch/application/workspace_actions/executor.py +190 -0
  55. cc_branch-1.0.0/cc_branch/application/workspace_actions/lifecycle.py +267 -0
  56. cc_branch-1.0.0/cc_branch/application/workspace_actions/open.py +283 -0
  57. cc_branch-1.0.0/cc_branch/application/workspace_actions/persistence.py +91 -0
  58. cc_branch-1.0.0/cc_branch/application/workspace_actions/sync.py +105 -0
  59. cc_branch-1.0.0/cc_branch/application/workspace_actions/targets.py +141 -0
  60. cc_branch-1.0.0/cc_branch/application/workspace_status.py +224 -0
  61. cc_branch-1.0.0/cc_branch/backends.py +7 -0
  62. cc_branch-1.0.0/cc_branch/bootstrap/__init__.py +41 -0
  63. cc_branch-1.0.0/cc_branch/bootstrap/environment.py +57 -0
  64. cc_branch-1.0.0/cc_branch/bootstrap/files.py +75 -0
  65. cc_branch-1.0.0/cc_branch/bootstrap/generation.py +55 -0
  66. cc_branch-1.0.0/cc_branch/bootstrap/models.py +68 -0
  67. cc_branch-1.0.0/cc_branch/bootstrap/sessions.py +17 -0
  68. cc_branch-1.0.0/cc_branch/cli/__init__.py +89 -0
  69. cc_branch-1.0.0/cc_branch/cli/commands/__init__.py +1 -0
  70. cc_branch-1.0.0/cc_branch/cli/commands/doctor.py +33 -0
  71. cc_branch-1.0.0/cc_branch/cli/commands/init.py +210 -0
  72. cc_branch-1.0.0/cc_branch/cli/commands/open.py +36 -0
  73. cc_branch-1.0.0/cc_branch/cli/commands/serve.py +45 -0
  74. cc_branch-1.0.0/cc_branch/cli/commands/service.py +268 -0
  75. cc_branch-1.0.0/cc_branch/cli/commands/sessions.py +144 -0
  76. cc_branch-1.0.0/cc_branch/cli/commands/sync.py +51 -0
  77. cc_branch-1.0.0/cc_branch/cli/commands/workspace.py +95 -0
  78. cc_branch-1.0.0/cc_branch/cli/constants.py +7 -0
  79. cc_branch-1.0.0/cc_branch/cli/dispatch.py +111 -0
  80. cc_branch-1.0.0/cc_branch/cli/errors.py +34 -0
  81. cc_branch-1.0.0/cc_branch/cli/help.py +159 -0
  82. cc_branch-1.0.0/cc_branch/cli/output.py +29 -0
  83. cc_branch-1.0.0/cc_branch/cli/parser.py +282 -0
  84. cc_branch-1.0.0/cc_branch/cli/targets.py +31 -0
  85. cc_branch-1.0.0/cc_branch/config/__init__.py +53 -0
  86. cc_branch-1.0.0/cc_branch/config/initialization.py +64 -0
  87. cc_branch-1.0.0/cc_branch/config/loading.py +51 -0
  88. cc_branch-1.0.0/cc_branch/config/normalization.py +47 -0
  89. cc_branch-1.0.0/cc_branch/config/paths.py +162 -0
  90. cc_branch-1.0.0/cc_branch/constants.py +6 -0
  91. cc_branch-1.0.0/cc_branch/context.py +100 -0
  92. cc_branch-1.0.0/cc_branch/desktop_backend.py +44 -0
  93. cc_branch-1.0.0/cc_branch/doctor/__init__.py +43 -0
  94. cc_branch-1.0.0/cc_branch/doctor/autofix.py +128 -0
  95. cc_branch-1.0.0/cc_branch/doctor/checks.py +324 -0
  96. cc_branch-1.0.0/cc_branch/doctor/messages.py +66 -0
  97. cc_branch-1.0.0/cc_branch/doctor/rendering.py +62 -0
  98. cc_branch-1.0.0/cc_branch/exceptions.py +35 -0
  99. cc_branch-1.0.0/cc_branch/models/__init__.py +29 -0
  100. cc_branch-1.0.0/cc_branch/models/agents.py +32 -0
  101. cc_branch-1.0.0/cc_branch/models/common.py +28 -0
  102. cc_branch-1.0.0/cc_branch/models/config.py +665 -0
  103. cc_branch-1.0.0/cc_branch/models/diagnostics.py +55 -0
  104. cc_branch-1.0.0/cc_branch/models/openers.py +32 -0
  105. cc_branch-1.0.0/cc_branch/models/plan.py +188 -0
  106. cc_branch-1.0.0/cc_branch/models/state.py +145 -0
  107. cc_branch-1.0.0/cc_branch/opener_registry.py +51 -0
  108. cc_branch-1.0.0/cc_branch/openers/__init__.py +60 -0
  109. cc_branch-1.0.0/cc_branch/openers/commands.py +61 -0
  110. cc_branch-1.0.0/cc_branch/openers/dispatcher.py +258 -0
  111. cc_branch-1.0.0/cc_branch/openers/editors.py +302 -0
  112. cc_branch-1.0.0/cc_branch/openers/platform.py +93 -0
  113. cc_branch-1.0.0/cc_branch/openers/registry.py +503 -0
  114. cc_branch-1.0.0/cc_branch/openers/terminal.py +163 -0
  115. cc_branch-1.0.0/cc_branch/openers/types.py +67 -0
  116. cc_branch-1.0.0/cc_branch/openers/warp.py +242 -0
  117. cc_branch-1.0.0/cc_branch/planner/__init__.py +24 -0
  118. cc_branch-1.0.0/cc_branch/planner/commands.py +175 -0
  119. cc_branch-1.0.0/cc_branch/planner/naming.py +18 -0
  120. cc_branch-1.0.0/cc_branch/planner/paths.py +36 -0
  121. cc_branch-1.0.0/cc_branch/planner/remote.py +52 -0
  122. cc_branch-1.0.0/cc_branch/planner/slots.py +30 -0
  123. cc_branch-1.0.0/cc_branch/planner/workspace.py +84 -0
  124. cc_branch-1.0.0/cc_branch/profiles/__init__.py +38 -0
  125. cc_branch-1.0.0/cc_branch/profiles/definitions.py +52 -0
  126. cc_branch-1.0.0/cc_branch/profiles/queries.py +17 -0
  127. cc_branch-1.0.0/cc_branch/profiles/rendering.py +141 -0
  128. cc_branch-1.0.0/cc_branch/repository/__init__.py +17 -0
  129. cc_branch-1.0.0/cc_branch/repository/codec.py +59 -0
  130. cc_branch-1.0.0/cc_branch/repository/state_repository.py +70 -0
  131. cc_branch-1.0.0/cc_branch/repository/validation.py +11 -0
  132. cc_branch-1.0.0/cc_branch/runtime/__init__.py +98 -0
  133. cc_branch-1.0.0/cc_branch/runtime/backends.py +191 -0
  134. cc_branch-1.0.0/cc_branch/runtime/capabilities.py +108 -0
  135. cc_branch-1.0.0/cc_branch/runtime/executables.py +40 -0
  136. cc_branch-1.0.0/cc_branch/runtime/execution/__init__.py +85 -0
  137. cc_branch-1.0.0/cc_branch/runtime/execution/backend_ops.py +28 -0
  138. cc_branch-1.0.0/cc_branch/runtime/execution/dashboard.py +82 -0
  139. cc_branch-1.0.0/cc_branch/runtime/execution/lifecycle.py +189 -0
  140. cc_branch-1.0.0/cc_branch/runtime/execution/status.py +118 -0
  141. cc_branch-1.0.0/cc_branch/runtime/execution/targets.py +65 -0
  142. cc_branch-1.0.0/cc_branch/runtime/execution/windows.py +142 -0
  143. cc_branch-1.0.0/cc_branch/runtime/sessions.py +320 -0
  144. cc_branch-1.0.0/cc_branch/runtime/shells.py +55 -0
  145. cc_branch-1.0.0/cc_branch/runtime/sync/__init__.py +53 -0
  146. cc_branch-1.0.0/cc_branch/runtime/sync/fingerprints.py +60 -0
  147. cc_branch-1.0.0/cc_branch/runtime/sync/inspection.py +17 -0
  148. cc_branch-1.0.0/cc_branch/runtime/sync/models.py +75 -0
  149. cc_branch-1.0.0/cc_branch/runtime/sync/report.py +173 -0
  150. cc_branch-1.0.0/cc_branch/runtime/sync/state.py +85 -0
  151. cc_branch-1.0.0/cc_branch/runtime/sync/targets.py +64 -0
  152. cc_branch-1.0.0/cc_branch/runtime_capabilities.py +41 -0
  153. cc_branch-1.0.0/cc_branch/runtime_sync.py +37 -0
  154. cc_branch-1.0.0/cc_branch/schema.py +69 -0
  155. cc_branch-1.0.0/cc_branch/sessions.py +19 -0
  156. cc_branch-1.0.0/cc_branch/shells.py +17 -0
  157. cc_branch-1.0.0/cc_branch/state.py +71 -0
  158. cc_branch-1.0.0/cc_branch/targets.py +67 -0
  159. cc_branch-1.0.0/cc_branch/templates.py +15 -0
  160. cc_branch-1.0.0/cc_branch/text.py +10 -0
  161. cc_branch-1.0.0/cc_branch/webui/__init__.py +5 -0
  162. cc_branch-1.0.0/cc_branch/webui/server/__init__.py +24 -0
  163. cc_branch-1.0.0/cc_branch/webui/server/api.py +614 -0
  164. cc_branch-1.0.0/cc_branch/webui/server/auth.py +97 -0
  165. cc_branch-1.0.0/cc_branch/webui/server/directory_picker.py +112 -0
  166. cc_branch-1.0.0/cc_branch/webui/server/handler.py +352 -0
  167. cc_branch-1.0.0/cc_branch/webui/server/runtime.py +31 -0
  168. cc_branch-1.0.0/cc_branch/webui/server/static.py +65 -0
  169. cc_branch-1.0.0/cc_branch/webui/server/terminal.py +63 -0
  170. cc_branch-1.0.0/cc_branch/webui/static/__init__.py +0 -0
  171. cc_branch-1.0.0/cc_branch/webui/static/apple-touch-icon.png +0 -0
  172. cc_branch-1.0.0/cc_branch/webui/static/assets/AddProjectModal-BhYm9ym8.js +1 -0
  173. cc_branch-1.0.0/cc_branch/webui/static/assets/ConfigEditor-eDOeTS2j.js +3 -0
  174. cc_branch-1.0.0/cc_branch/webui/static/assets/DoctorView-CLxHgGMY.js +3 -0
  175. cc_branch-1.0.0/cc_branch/webui/static/assets/FormPrimitives-BgUREk4d.js +1 -0
  176. cc_branch-1.0.0/cc_branch/webui/static/assets/SettingsModal-zho31DY5.js +4 -0
  177. cc_branch-1.0.0/cc_branch/webui/static/assets/Toast-B0o231EY.js +1 -0
  178. cc_branch-1.0.0/cc_branch/webui/static/assets/app-DDz2917G.js +1 -0
  179. cc_branch-1.0.0/cc_branch/webui/static/assets/configIssues-C47Cc0oD.js +1 -0
  180. cc_branch-1.0.0/cc_branch/webui/static/assets/core-Cv_ktERL.js +1 -0
  181. cc_branch-1.0.0/cc_branch/webui/static/assets/cursor-BM_3k4Y4.svg +1 -0
  182. cc_branch-1.0.0/cc_branch/webui/static/assets/dist-js-DWgoLVDI.js +1 -0
  183. cc_branch-1.0.0/cc_branch/webui/static/assets/dist-js-DaxDCY-s.js +1 -0
  184. cc_branch-1.0.0/cc_branch/webui/static/assets/folder-open-C4jJiCft.js +1 -0
  185. cc_branch-1.0.0/cc_branch/webui/static/assets/gemini-BYkEpiWr.svg +1 -0
  186. cc_branch-1.0.0/cc_branch/webui/static/assets/index-BTm2_0ej.js +44 -0
  187. cc_branch-1.0.0/cc_branch/webui/static/assets/index-DQT0CXzC.css +2 -0
  188. cc_branch-1.0.0/cc_branch/webui/static/assets/laptop-Uwog81lT.js +1 -0
  189. cc_branch-1.0.0/cc_branch/webui/static/assets/rolldown-runtime-S-ySWqyJ.js +1 -0
  190. cc_branch-1.0.0/cc_branch/webui/static/assets/warp-Cohf40FX.png +0 -0
  191. cc_branch-1.0.0/cc_branch/webui/static/dashboard-header-candidates.html +546 -0
  192. cc_branch-1.0.0/cc_branch/webui/static/favicon.png +0 -0
  193. cc_branch-1.0.0/cc_branch/webui/static/favicon.svg +32 -0
  194. cc_branch-1.0.0/cc_branch/webui/static/icon-512.png +0 -0
  195. cc_branch-1.0.0/cc_branch/webui/static/icons.svg +24 -0
  196. cc_branch-1.0.0/cc_branch/webui/static/index.html +67 -0
  197. cc_branch-1.0.0/cc_branch.egg-info/PKG-INFO +179 -0
  198. cc_branch-1.0.0/cc_branch.egg-info/SOURCES.txt +262 -0
  199. cc_branch-1.0.0/cc_branch.egg-info/dependency_links.txt +1 -0
  200. cc_branch-1.0.0/cc_branch.egg-info/entry_points.txt +3 -0
  201. cc_branch-1.0.0/cc_branch.egg-info/requires.txt +12 -0
  202. cc_branch-1.0.0/cc_branch.egg-info/top_level.txt +1 -0
  203. cc_branch-1.0.0/docs/README.md +31 -0
  204. cc_branch-1.0.0/docs/architecture.md +409 -0
  205. cc_branch-1.0.0/docs/contributing.md +180 -0
  206. cc_branch-1.0.0/docs/features.md +133 -0
  207. cc_branch-1.0.0/docs/getting-started.md +156 -0
  208. cc_branch-1.0.0/docs/install-troubleshooting.md +172 -0
  209. cc_branch-1.0.0/docs/publishing.md +353 -0
  210. cc_branch-1.0.0/docs/quickstart.md +176 -0
  211. cc_branch-1.0.0/docs/ssh-remote-workspaces.md +122 -0
  212. cc_branch-1.0.0/docs/uninstall-cleanup.md +51 -0
  213. cc_branch-1.0.0/docs/user-guide.md +554 -0
  214. cc_branch-1.0.0/docs/webui-spec.md +288 -0
  215. cc_branch-1.0.0/docs/workspace-terminology.zh.md +165 -0
  216. cc_branch-1.0.0/examples/agent-branch.yaml +43 -0
  217. cc_branch-1.0.0/examples/scenario-long-term.yaml +151 -0
  218. cc_branch-1.0.0/examples/scenario-multi-project.yaml +104 -0
  219. cc_branch-1.0.0/examples/scenario-solo-dev.yaml +78 -0
  220. cc_branch-1.0.0/examples/scenario-ssh-remote.yaml +30 -0
  221. cc_branch-1.0.0/packaging/desktop/cc_branch_backend.py +4 -0
  222. cc_branch-1.0.0/packaging/homebrew/Formula/cc-branch.rb.template +53 -0
  223. cc_branch-1.0.0/packaging/homebrew/README.md +41 -0
  224. cc_branch-1.0.0/packaging/npm/README.md +17 -0
  225. cc_branch-1.0.0/pyproject.toml +109 -0
  226. cc_branch-1.0.0/setup.cfg +4 -0
  227. cc_branch-1.0.0/setup.py +4 -0
  228. cc_branch-1.0.0/tests/test_agent_sessions.py +397 -0
  229. cc_branch-1.0.0/tests/test_app_state.py +188 -0
  230. cc_branch-1.0.0/tests/test_application_architecture.py +3085 -0
  231. cc_branch-1.0.0/tests/test_bootstrap.py +500 -0
  232. cc_branch-1.0.0/tests/test_cli.py +1074 -0
  233. cc_branch-1.0.0/tests/test_config.py +914 -0
  234. cc_branch-1.0.0/tests/test_context.py +16 -0
  235. cc_branch-1.0.0/tests/test_desktop_backend.py +81 -0
  236. cc_branch-1.0.0/tests/test_desktop_sidecar_build.py +160 -0
  237. cc_branch-1.0.0/tests/test_desktop_tauri_config.py +534 -0
  238. cc_branch-1.0.0/tests/test_diagnostic_bundle.py +100 -0
  239. cc_branch-1.0.0/tests/test_doctor.py +577 -0
  240. cc_branch-1.0.0/tests/test_global_agents.py +66 -0
  241. cc_branch-1.0.0/tests/test_global_openers.py +55 -0
  242. cc_branch-1.0.0/tests/test_openers.py +1031 -0
  243. cc_branch-1.0.0/tests/test_planner.py +527 -0
  244. cc_branch-1.0.0/tests/test_preflight_desktop_release.py +2433 -0
  245. cc_branch-1.0.0/tests/test_release_canary.py +1343 -0
  246. cc_branch-1.0.0/tests/test_release_version.py +46 -0
  247. cc_branch-1.0.0/tests/test_remote_directory.py +53 -0
  248. cc_branch-1.0.0/tests/test_render_desktop_release_notes.py +127 -0
  249. cc_branch-1.0.0/tests/test_runtime_backends.py +64 -0
  250. cc_branch-1.0.0/tests/test_runtime_executables.py +26 -0
  251. cc_branch-1.0.0/tests/test_schema.py +74 -0
  252. cc_branch-1.0.0/tests/test_session_binding.py +178 -0
  253. cc_branch-1.0.0/tests/test_smoke_test_backend_sidecar.py +235 -0
  254. cc_branch-1.0.0/tests/test_smoke_test_desktop_app.py +724 -0
  255. cc_branch-1.0.0/tests/test_ssh_config.py +48 -0
  256. cc_branch-1.0.0/tests/test_state.py +200 -0
  257. cc_branch-1.0.0/tests/test_system_paths.py +33 -0
  258. cc_branch-1.0.0/tests/test_templates.py +18 -0
  259. cc_branch-1.0.0/tests/test_verify_desktop_installers.py +1130 -0
  260. cc_branch-1.0.0/tests/test_verify_github_release.py +1321 -0
  261. cc_branch-1.0.0/tests/test_verify_macos_dmg.py +362 -0
  262. cc_branch-1.0.0/tests/test_web_vitest_config.py +25 -0
  263. cc_branch-1.0.0/tests/test_webui.py +3011 -0
  264. 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.
@@ -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__
@@ -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
+ [![CI](https://github.com/GeminiLight/cc-branch/actions/workflows/ci.yml/badge.svg)](https://github.com/GeminiLight/cc-branch/actions/workflows/ci.yml)
49
+ ![Python](https://img.shields.io/badge/python-3.10%2B-blue)
50
+ ![Status](https://img.shields.io/badge/status-v1.0.0-green)
51
+ ![License](https://img.shields.io/badge/license-MIT-green)
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
+ [![CI](https://github.com/GeminiLight/cc-branch/actions/workflows/ci.yml/badge.svg)](https://github.com/GeminiLight/cc-branch/actions/workflows/ci.yml)
10
+ ![Python](https://img.shields.io/badge/python-3.10%2B-blue)
11
+ ![Status](https://img.shields.io/badge/status-v1.0.0-green)
12
+ ![License](https://img.shields.io/badge/license-MIT-green)
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
+ [![CI](https://github.com/GeminiLight/cc-branch/actions/workflows/ci.yml/badge.svg)](https://github.com/GeminiLight/cc-branch/actions/workflows/ci.yml)
10
+ ![Python](https://img.shields.io/badge/python-3.10%2B-blue)
11
+ ![Status](https://img.shields.io/badge/status-v1.0.0-green)
12
+ ![License](https://img.shields.io/badge/license-MIT-green)
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
+ ]
@@ -0,0 +1,4 @@
1
+ from .cli import main
2
+
3
+ if __name__ == "__main__":
4
+ raise SystemExit(main())