scc-cli 1.5.5__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 (278) hide show
  1. scc_cli-1.5.5/.gitignore +61 -0
  2. scc_cli-1.5.5/LICENSE +21 -0
  3. scc_cli-1.5.5/PKG-INFO +460 -0
  4. scc_cli-1.5.5/README.md +423 -0
  5. scc_cli-1.5.5/pyproject.toml +103 -0
  6. scc_cli-1.5.5/src/scc_cli/__init__.py +15 -0
  7. scc_cli-1.5.5/src/scc_cli/audit/__init__.py +37 -0
  8. scc_cli-1.5.5/src/scc_cli/audit/parser.py +191 -0
  9. scc_cli-1.5.5/src/scc_cli/audit/reader.py +180 -0
  10. scc_cli-1.5.5/src/scc_cli/auth.py +145 -0
  11. scc_cli-1.5.5/src/scc_cli/claude_adapter.py +485 -0
  12. scc_cli-1.5.5/src/scc_cli/cli.py +388 -0
  13. scc_cli-1.5.5/src/scc_cli/cli_common.py +201 -0
  14. scc_cli-1.5.5/src/scc_cli/cli_helpers.py +244 -0
  15. scc_cli-1.5.5/src/scc_cli/commands/__init__.py +20 -0
  16. scc_cli-1.5.5/src/scc_cli/commands/admin.py +708 -0
  17. scc_cli-1.5.5/src/scc_cli/commands/audit.py +246 -0
  18. scc_cli-1.5.5/src/scc_cli/commands/config.py +662 -0
  19. scc_cli-1.5.5/src/scc_cli/commands/exceptions.py +696 -0
  20. scc_cli-1.5.5/src/scc_cli/commands/init.py +272 -0
  21. scc_cli-1.5.5/src/scc_cli/commands/launch/__init__.py +73 -0
  22. scc_cli-1.5.5/src/scc_cli/commands/launch/app.py +1383 -0
  23. scc_cli-1.5.5/src/scc_cli/commands/launch/render.py +309 -0
  24. scc_cli-1.5.5/src/scc_cli/commands/launch/sandbox.py +156 -0
  25. scc_cli-1.5.5/src/scc_cli/commands/launch/workspace.py +339 -0
  26. scc_cli-1.5.5/src/scc_cli/commands/org/__init__.py +49 -0
  27. scc_cli-1.5.5/src/scc_cli/commands/org/_builders.py +264 -0
  28. scc_cli-1.5.5/src/scc_cli/commands/org/app.py +41 -0
  29. scc_cli-1.5.5/src/scc_cli/commands/org/import_cmd.py +267 -0
  30. scc_cli-1.5.5/src/scc_cli/commands/org/init_cmd.py +269 -0
  31. scc_cli-1.5.5/src/scc_cli/commands/org/schema_cmd.py +76 -0
  32. scc_cli-1.5.5/src/scc_cli/commands/org/status_cmd.py +157 -0
  33. scc_cli-1.5.5/src/scc_cli/commands/org/update_cmd.py +330 -0
  34. scc_cli-1.5.5/src/scc_cli/commands/org/validate_cmd.py +138 -0
  35. scc_cli-1.5.5/src/scc_cli/commands/profile.py +683 -0
  36. scc_cli-1.5.5/src/scc_cli/commands/reset.py +597 -0
  37. scc_cli-1.5.5/src/scc_cli/commands/support.py +323 -0
  38. scc_cli-1.5.5/src/scc_cli/commands/team.py +910 -0
  39. scc_cli-1.5.5/src/scc_cli/commands/worktree/__init__.py +73 -0
  40. scc_cli-1.5.5/src/scc_cli/commands/worktree/_helpers.py +57 -0
  41. scc_cli-1.5.5/src/scc_cli/commands/worktree/app.py +171 -0
  42. scc_cli-1.5.5/src/scc_cli/commands/worktree/container_commands.py +385 -0
  43. scc_cli-1.5.5/src/scc_cli/commands/worktree/context_commands.py +61 -0
  44. scc_cli-1.5.5/src/scc_cli/commands/worktree/session_commands.py +288 -0
  45. scc_cli-1.5.5/src/scc_cli/commands/worktree/worktree_commands.py +734 -0
  46. scc_cli-1.5.5/src/scc_cli/config.py +647 -0
  47. scc_cli-1.5.5/src/scc_cli/confirm.py +20 -0
  48. scc_cli-1.5.5/src/scc_cli/console.py +562 -0
  49. scc_cli-1.5.5/src/scc_cli/contexts.py +394 -0
  50. scc_cli-1.5.5/src/scc_cli/core/__init__.py +71 -0
  51. scc_cli-1.5.5/src/scc_cli/core/constants.py +101 -0
  52. scc_cli-1.5.5/src/scc_cli/core/errors.py +309 -0
  53. scc_cli-1.5.5/src/scc_cli/core/exit_codes.py +134 -0
  54. scc_cli-1.5.5/src/scc_cli/core/maintenance.py +1003 -0
  55. scc_cli-1.5.5/src/scc_cli/core/personal_profiles.py +662 -0
  56. scc_cli-1.5.5/src/scc_cli/core/workspace.py +57 -0
  57. scc_cli-1.5.5/src/scc_cli/deprecation.py +54 -0
  58. scc_cli-1.5.5/src/scc_cli/deps.py +189 -0
  59. scc_cli-1.5.5/src/scc_cli/docker/__init__.py +129 -0
  60. scc_cli-1.5.5/src/scc_cli/docker/core.py +503 -0
  61. scc_cli-1.5.5/src/scc_cli/docker/credentials.py +726 -0
  62. scc_cli-1.5.5/src/scc_cli/docker/launch.py +683 -0
  63. scc_cli-1.5.5/src/scc_cli/doctor/__init__.py +107 -0
  64. scc_cli-1.5.5/src/scc_cli/doctor/checks/__init__.py +169 -0
  65. scc_cli-1.5.5/src/scc_cli/doctor/checks/cache.py +314 -0
  66. scc_cli-1.5.5/src/scc_cli/doctor/checks/config.py +107 -0
  67. scc_cli-1.5.5/src/scc_cli/doctor/checks/environment.py +210 -0
  68. scc_cli-1.5.5/src/scc_cli/doctor/checks/json_helpers.py +157 -0
  69. scc_cli-1.5.5/src/scc_cli/doctor/checks/organization.py +264 -0
  70. scc_cli-1.5.5/src/scc_cli/doctor/checks/worktree.py +278 -0
  71. scc_cli-1.5.5/src/scc_cli/doctor/render.py +365 -0
  72. scc_cli-1.5.5/src/scc_cli/doctor/types.py +66 -0
  73. scc_cli-1.5.5/src/scc_cli/evaluation/__init__.py +27 -0
  74. scc_cli-1.5.5/src/scc_cli/evaluation/apply_exceptions.py +207 -0
  75. scc_cli-1.5.5/src/scc_cli/evaluation/evaluate.py +97 -0
  76. scc_cli-1.5.5/src/scc_cli/evaluation/models.py +80 -0
  77. scc_cli-1.5.5/src/scc_cli/git.py +84 -0
  78. scc_cli-1.5.5/src/scc_cli/json_command.py +166 -0
  79. scc_cli-1.5.5/src/scc_cli/json_output.py +159 -0
  80. scc_cli-1.5.5/src/scc_cli/kinds.py +65 -0
  81. scc_cli-1.5.5/src/scc_cli/marketplace/__init__.py +123 -0
  82. scc_cli-1.5.5/src/scc_cli/marketplace/adapter.py +74 -0
  83. scc_cli-1.5.5/src/scc_cli/marketplace/compute.py +377 -0
  84. scc_cli-1.5.5/src/scc_cli/marketplace/constants.py +87 -0
  85. scc_cli-1.5.5/src/scc_cli/marketplace/managed.py +135 -0
  86. scc_cli-1.5.5/src/scc_cli/marketplace/materialize.py +846 -0
  87. scc_cli-1.5.5/src/scc_cli/marketplace/normalize.py +548 -0
  88. scc_cli-1.5.5/src/scc_cli/marketplace/render.py +296 -0
  89. scc_cli-1.5.5/src/scc_cli/marketplace/resolve.py +459 -0
  90. scc_cli-1.5.5/src/scc_cli/marketplace/schema.py +506 -0
  91. scc_cli-1.5.5/src/scc_cli/marketplace/sync.py +310 -0
  92. scc_cli-1.5.5/src/scc_cli/marketplace/team_cache.py +195 -0
  93. scc_cli-1.5.5/src/scc_cli/marketplace/team_fetch.py +689 -0
  94. scc_cli-1.5.5/src/scc_cli/marketplace/trust.py +244 -0
  95. scc_cli-1.5.5/src/scc_cli/models/__init__.py +41 -0
  96. scc_cli-1.5.5/src/scc_cli/models/exceptions.py +273 -0
  97. scc_cli-1.5.5/src/scc_cli/models/plugin_audit.py +434 -0
  98. scc_cli-1.5.5/src/scc_cli/org_templates.py +269 -0
  99. scc_cli-1.5.5/src/scc_cli/output_mode.py +167 -0
  100. scc_cli-1.5.5/src/scc_cli/panels.py +113 -0
  101. scc_cli-1.5.5/src/scc_cli/platform.py +350 -0
  102. scc_cli-1.5.5/src/scc_cli/profiles.py +960 -0
  103. scc_cli-1.5.5/src/scc_cli/remote.py +443 -0
  104. scc_cli-1.5.5/src/scc_cli/schemas/__init__.py +1 -0
  105. scc_cli-1.5.5/src/scc_cli/schemas/org-v1.schema.json +456 -0
  106. scc_cli-1.5.5/src/scc_cli/schemas/team-config.v1.schema.json +163 -0
  107. scc_cli-1.5.5/src/scc_cli/services/__init__.py +1 -0
  108. scc_cli-1.5.5/src/scc_cli/services/git/__init__.py +79 -0
  109. scc_cli-1.5.5/src/scc_cli/services/git/branch.py +151 -0
  110. scc_cli-1.5.5/src/scc_cli/services/git/core.py +216 -0
  111. scc_cli-1.5.5/src/scc_cli/services/git/hooks.py +108 -0
  112. scc_cli-1.5.5/src/scc_cli/services/git/worktree.py +444 -0
  113. scc_cli-1.5.5/src/scc_cli/services/workspace/__init__.py +36 -0
  114. scc_cli-1.5.5/src/scc_cli/services/workspace/resolver.py +223 -0
  115. scc_cli-1.5.5/src/scc_cli/services/workspace/suspicious.py +200 -0
  116. scc_cli-1.5.5/src/scc_cli/sessions.py +425 -0
  117. scc_cli-1.5.5/src/scc_cli/setup.py +589 -0
  118. scc_cli-1.5.5/src/scc_cli/source_resolver.py +470 -0
  119. scc_cli-1.5.5/src/scc_cli/stats.py +378 -0
  120. scc_cli-1.5.5/src/scc_cli/stores/__init__.py +13 -0
  121. scc_cli-1.5.5/src/scc_cli/stores/exception_store.py +251 -0
  122. scc_cli-1.5.5/src/scc_cli/subprocess_utils.py +88 -0
  123. scc_cli-1.5.5/src/scc_cli/teams.py +383 -0
  124. scc_cli-1.5.5/src/scc_cli/templates/__init__.py +2 -0
  125. scc_cli-1.5.5/src/scc_cli/templates/org/__init__.py +0 -0
  126. scc_cli-1.5.5/src/scc_cli/templates/org/minimal.json +19 -0
  127. scc_cli-1.5.5/src/scc_cli/templates/org/reference.json +74 -0
  128. scc_cli-1.5.5/src/scc_cli/templates/org/strict.json +38 -0
  129. scc_cli-1.5.5/src/scc_cli/templates/org/teams.json +42 -0
  130. scc_cli-1.5.5/src/scc_cli/templates/statusline.sh +75 -0
  131. scc_cli-1.5.5/src/scc_cli/theme.py +348 -0
  132. scc_cli-1.5.5/src/scc_cli/ui/__init__.py +154 -0
  133. scc_cli-1.5.5/src/scc_cli/ui/branding.py +68 -0
  134. scc_cli-1.5.5/src/scc_cli/ui/chrome.py +401 -0
  135. scc_cli-1.5.5/src/scc_cli/ui/dashboard/__init__.py +62 -0
  136. scc_cli-1.5.5/src/scc_cli/ui/dashboard/_dashboard.py +799 -0
  137. scc_cli-1.5.5/src/scc_cli/ui/dashboard/loaders.py +452 -0
  138. scc_cli-1.5.5/src/scc_cli/ui/dashboard/models.py +185 -0
  139. scc_cli-1.5.5/src/scc_cli/ui/dashboard/orchestrator.py +770 -0
  140. scc_cli-1.5.5/src/scc_cli/ui/formatters.py +444 -0
  141. scc_cli-1.5.5/src/scc_cli/ui/gate.py +350 -0
  142. scc_cli-1.5.5/src/scc_cli/ui/git_interactive.py +869 -0
  143. scc_cli-1.5.5/src/scc_cli/ui/git_render.py +176 -0
  144. scc_cli-1.5.5/src/scc_cli/ui/help.py +157 -0
  145. scc_cli-1.5.5/src/scc_cli/ui/keys.py +635 -0
  146. scc_cli-1.5.5/src/scc_cli/ui/list_screen.py +437 -0
  147. scc_cli-1.5.5/src/scc_cli/ui/picker.py +763 -0
  148. scc_cli-1.5.5/src/scc_cli/ui/prompts.py +196 -0
  149. scc_cli-1.5.5/src/scc_cli/ui/quick_resume.py +116 -0
  150. scc_cli-1.5.5/src/scc_cli/ui/settings.py +772 -0
  151. scc_cli-1.5.5/src/scc_cli/ui/wizard.py +576 -0
  152. scc_cli-1.5.5/src/scc_cli/update.py +680 -0
  153. scc_cli-1.5.5/src/scc_cli/utils/__init__.py +39 -0
  154. scc_cli-1.5.5/src/scc_cli/utils/fixit.py +264 -0
  155. scc_cli-1.5.5/src/scc_cli/utils/fuzzy.py +124 -0
  156. scc_cli-1.5.5/src/scc_cli/utils/locks.py +114 -0
  157. scc_cli-1.5.5/src/scc_cli/utils/ttl.py +376 -0
  158. scc_cli-1.5.5/src/scc_cli/validate.py +455 -0
  159. scc_cli-1.5.5/tests/__init__.py +0 -0
  160. scc_cli-1.5.5/tests/conftest.py +195 -0
  161. scc_cli-1.5.5/tests/integration/conftest.py +360 -0
  162. scc_cli-1.5.5/tests/integration/test_error_recovery.py +448 -0
  163. scc_cli-1.5.5/tests/integration/test_precedence.py +792 -0
  164. scc_cli-1.5.5/tests/integration/test_security_bypass.py +407 -0
  165. scc_cli-1.5.5/tests/integration/test_trust_adversarial.py +535 -0
  166. scc_cli-1.5.5/tests/test_adapter.py +315 -0
  167. scc_cli-1.5.5/tests/test_audit_cli.py +362 -0
  168. scc_cli-1.5.5/tests/test_auth.py +590 -0
  169. scc_cli-1.5.5/tests/test_claude_adapter.py +635 -0
  170. scc_cli-1.5.5/tests/test_cli.py +693 -0
  171. scc_cli-1.5.5/tests/test_cli_exceptions.py +851 -0
  172. scc_cli-1.5.5/tests/test_cli_helpers.py +337 -0
  173. scc_cli-1.5.5/tests/test_cli_org_import.py +460 -0
  174. scc_cli-1.5.5/tests/test_cli_org_init.py +332 -0
  175. scc_cli-1.5.5/tests/test_cli_org_status.py +529 -0
  176. scc_cli-1.5.5/tests/test_cli_org_update.py +503 -0
  177. scc_cli-1.5.5/tests/test_cli_setup.py +300 -0
  178. scc_cli-1.5.5/tests/test_cli_team.py +1166 -0
  179. scc_cli-1.5.5/tests/test_config.py +182 -0
  180. scc_cli-1.5.5/tests/test_config_explain.py +1057 -0
  181. scc_cli-1.5.5/tests/test_config_inheritance.py +1248 -0
  182. scc_cli-1.5.5/tests/test_config_xdg.py +542 -0
  183. scc_cli-1.5.5/tests/test_context_recording_warning.py +39 -0
  184. scc_cli-1.5.5/tests/test_contexts.py +561 -0
  185. scc_cli-1.5.5/tests/test_deps.py +339 -0
  186. scc_cli-1.5.5/tests/test_docker.py +174 -0
  187. scc_cli-1.5.5/tests/test_docker_core.py +1018 -0
  188. scc_cli-1.5.5/tests/test_docker_org_config.py +178 -0
  189. scc_cli-1.5.5/tests/test_docker_policy.py +566 -0
  190. scc_cli-1.5.5/tests/test_docker_policy_integration.py +579 -0
  191. scc_cli-1.5.5/tests/test_doctor_checks.py +704 -0
  192. scc_cli-1.5.5/tests/test_doctor_enhanced.py +254 -0
  193. scc_cli-1.5.5/tests/test_effective_config.py +1100 -0
  194. scc_cli-1.5.5/tests/test_evaluation.py +989 -0
  195. scc_cli-1.5.5/tests/test_exception_stores.py +455 -0
  196. scc_cli-1.5.5/tests/test_exceptions.py +610 -0
  197. scc_cli-1.5.5/tests/test_federation_backwards_compat.py +591 -0
  198. scc_cli-1.5.5/tests/test_file_sizes.py +227 -0
  199. scc_cli-1.5.5/tests/test_fixit.py +239 -0
  200. scc_cli-1.5.5/tests/test_fuzzy.py +145 -0
  201. scc_cli-1.5.5/tests/test_git_hooks.py +271 -0
  202. scc_cli-1.5.5/tests/test_git_safety.py +730 -0
  203. scc_cli-1.5.5/tests/test_git_safety_critical.py +604 -0
  204. scc_cli-1.5.5/tests/test_git_worktree.py +457 -0
  205. scc_cli-1.5.5/tests/test_help_grouping.py +263 -0
  206. scc_cli-1.5.5/tests/test_import_boundaries.py +494 -0
  207. scc_cli-1.5.5/tests/test_init_cli.py +423 -0
  208. scc_cli-1.5.5/tests/test_integration.py +728 -0
  209. scc_cli-1.5.5/tests/test_invariants.py +305 -0
  210. scc_cli-1.5.5/tests/test_json_output.py +385 -0
  211. scc_cli-1.5.5/tests/test_json_output_purity.py +109 -0
  212. scc_cli-1.5.5/tests/test_manifest_parser.py +425 -0
  213. scc_cli-1.5.5/tests/test_marketplace_compute.py +1152 -0
  214. scc_cli-1.5.5/tests/test_marketplace_managed.py +374 -0
  215. scc_cli-1.5.5/tests/test_marketplace_materialize.py +1057 -0
  216. scc_cli-1.5.5/tests/test_marketplace_normalize.py +556 -0
  217. scc_cli-1.5.5/tests/test_marketplace_render.py +624 -0
  218. scc_cli-1.5.5/tests/test_marketplace_resolve.py +605 -0
  219. scc_cli-1.5.5/tests/test_marketplace_schema.py +889 -0
  220. scc_cli-1.5.5/tests/test_marketplace_sync.py +559 -0
  221. scc_cli-1.5.5/tests/test_marketplace_trust.py +449 -0
  222. scc_cli-1.5.5/tests/test_mcp_servers.py +600 -0
  223. scc_cli-1.5.5/tests/test_no_root_sprawl.py +197 -0
  224. scc_cli-1.5.5/tests/test_org_cli.py +369 -0
  225. scc_cli-1.5.5/tests/test_org_templates.py +254 -0
  226. scc_cli-1.5.5/tests/test_output_mode_stderr.py +73 -0
  227. scc_cli-1.5.5/tests/test_personal_profile_sync.py +93 -0
  228. scc_cli-1.5.5/tests/test_personal_profiles.py +114 -0
  229. scc_cli-1.5.5/tests/test_platform.py +597 -0
  230. scc_cli-1.5.5/tests/test_plugin_audit_models.py +579 -0
  231. scc_cli-1.5.5/tests/test_plugin_isolation.py +106 -0
  232. scc_cli-1.5.5/tests/test_plugin_reader.py +450 -0
  233. scc_cli-1.5.5/tests/test_profiles.py +271 -0
  234. scc_cli-1.5.5/tests/test_prune.py +443 -0
  235. scc_cli-1.5.5/tests/test_quick_resume.py +189 -0
  236. scc_cli-1.5.5/tests/test_quick_resume_behavior.py +61 -0
  237. scc_cli-1.5.5/tests/test_quick_resume_filtering.py +155 -0
  238. scc_cli-1.5.5/tests/test_remote.py +890 -0
  239. scc_cli-1.5.5/tests/test_security_phase1.py +466 -0
  240. scc_cli-1.5.5/tests/test_session_flags.py +545 -0
  241. scc_cli-1.5.5/tests/test_sessions.py +598 -0
  242. scc_cli-1.5.5/tests/test_setup_wizard.py +364 -0
  243. scc_cli-1.5.5/tests/test_smart_start.py +265 -0
  244. scc_cli-1.5.5/tests/test_start_cancellation.py +41 -0
  245. scc_cli-1.5.5/tests/test_start_dryrun.py +424 -0
  246. scc_cli-1.5.5/tests/test_start_personal_profile.py +43 -0
  247. scc_cli-1.5.5/tests/test_stats.py +735 -0
  248. scc_cli-1.5.5/tests/test_stats_cli.py +337 -0
  249. scc_cli-1.5.5/tests/test_stats_launch.py +104 -0
  250. scc_cli-1.5.5/tests/test_status.py +397 -0
  251. scc_cli-1.5.5/tests/test_stream_contract.py +312 -0
  252. scc_cli-1.5.5/tests/test_subprocess_utils.py +208 -0
  253. scc_cli-1.5.5/tests/test_support_bundle.py +375 -0
  254. scc_cli-1.5.5/tests/test_symmetric_aliases.py +107 -0
  255. scc_cli-1.5.5/tests/test_team_cache.py +291 -0
  256. scc_cli-1.5.5/tests/test_team_cli.py +570 -0
  257. scc_cli-1.5.5/tests/test_team_fetch.py +953 -0
  258. scc_cli-1.5.5/tests/test_teams.py +776 -0
  259. scc_cli-1.5.5/tests/test_ttl.py +443 -0
  260. scc_cli-1.5.5/tests/test_ui_chrome.py +400 -0
  261. scc_cli-1.5.5/tests/test_ui_dashboard.py +720 -0
  262. scc_cli-1.5.5/tests/test_ui_formatters.py +743 -0
  263. scc_cli-1.5.5/tests/test_ui_gate.py +416 -0
  264. scc_cli-1.5.5/tests/test_ui_integration.py +1195 -0
  265. scc_cli-1.5.5/tests/test_ui_keys.py +568 -0
  266. scc_cli-1.5.5/tests/test_ui_list_screen.py +434 -0
  267. scc_cli-1.5.5/tests/test_ui_picker.py +745 -0
  268. scc_cli-1.5.5/tests/test_ui_snapshots.py +185 -0
  269. scc_cli-1.5.5/tests/test_ui_wizard.py +792 -0
  270. scc_cli-1.5.5/tests/test_update.py +985 -0
  271. scc_cli-1.5.5/tests/test_validate.py +281 -0
  272. scc_cli-1.5.5/tests/test_workspace_resolver.py +627 -0
  273. scc_cli-1.5.5/tests/test_workspace_suspicious.py +346 -0
  274. scc_cli-1.5.5/tests/test_workspace_team_pinning.py +101 -0
  275. scc_cli-1.5.5/tests/test_worktree_cli.py +1382 -0
  276. scc_cli-1.5.5/tests/test_worktree_cwd.py +115 -0
  277. scc_cli-1.5.5/tests/test_worktree_guidance.py +47 -0
  278. scc_cli-1.5.5/tests/test_wsl2_warning.py +28 -0
@@ -0,0 +1,61 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ .Python
7
+ build/
8
+ develop-eggs/
9
+ dist/
10
+ downloads/
11
+ eggs/
12
+ .eggs/
13
+ lib/
14
+ lib64/
15
+ parts/
16
+ sdist/
17
+ var/
18
+ wheels/
19
+ *.egg-info/
20
+ .installed.cfg
21
+ *.egg
22
+
23
+ # Virtual environments
24
+ .venv/
25
+ venv/
26
+ ENV/
27
+
28
+ # IDE
29
+ .idea/
30
+ .vscode/
31
+ *.swp
32
+ *.swo
33
+ *~
34
+
35
+ # Testing
36
+ .tox/
37
+ .nox/
38
+ .coverage
39
+ .coverage.*
40
+ htmlcov/
41
+ .pytest_cache/
42
+ .mypy_cache/
43
+
44
+ # OS
45
+ .DS_Store
46
+ Thumbs.db
47
+
48
+ # Local config (don't commit user-specific settings)
49
+ *.local.json
50
+
51
+ # Claude Code project instructions (local development only)
52
+ CLAUDE.md
53
+ .serena/
54
+ .claude/
55
+ .specify/
56
+ specs/
57
+ .code/
58
+
59
+ # Local development directories
60
+ plugindocs/
61
+ safetypluginclone/.claude/.state/
scc_cli-1.5.5/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Cagri Cimen
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.
scc_cli-1.5.5/PKG-INFO ADDED
@@ -0,0 +1,460 @@
1
+ Metadata-Version: 2.4
2
+ Name: scc-cli
3
+ Version: 1.5.5
4
+ Summary: Run Claude Code in Docker sandboxes with team configs and git worktree support
5
+ Project-URL: Homepage, https://github.com/CCimen/scc
6
+ Project-URL: Documentation, https://github.com/CCimen/scc#readme
7
+ Project-URL: Repository, https://github.com/CCimen/scc
8
+ Project-URL: Issues, https://github.com/CCimen/scc/issues
9
+ Author-email: Cagri Cimen <cagricimeenn@gmail.com>
10
+ License-Expression: MIT
11
+ License-File: LICENSE
12
+ Keywords: ai,claude,cli,docker,git,worktree
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Environment :: Console
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: License :: OSI Approved :: MIT License
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Topic :: Software Development
23
+ Requires-Python: >=3.10
24
+ Requires-Dist: jsonschema>=4.25.1
25
+ Requires-Dist: pydantic>=2.0.0
26
+ Requires-Dist: pyyaml>=6.0.0
27
+ Requires-Dist: readchar>=4.0.0
28
+ Requires-Dist: requests>=2.32.5
29
+ Requires-Dist: rich>=13.0.0
30
+ Requires-Dist: typer>=0.9.0
31
+ Provides-Extra: dev
32
+ Requires-Dist: mypy>=1.0.0; extra == 'dev'
33
+ Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
34
+ Requires-Dist: pytest>=7.0.0; extra == 'dev'
35
+ Requires-Dist: ruff>=0.1.0; extra == 'dev'
36
+ Description-Content-Type: text/markdown
37
+
38
+ <h1 align="center">SCC - Sandboxed Claude CLI</h1>
39
+
40
+ <p align="center">
41
+ <a href="https://pypi.org/project/scc-cli/"><img src="https://img.shields.io/pypi/v/scc-cli?style=flat-square&label=PyPI" alt="PyPI"></a>
42
+ <a href="https://pypi.org/project/scc-cli/"><img src="https://img.shields.io/pypi/pyversions/scc-cli?style=flat-square&label=Python" alt="Python"></a>
43
+ <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-blue?style=flat-square" alt="License: MIT"></a>
44
+ <a href="#contributing"><img src="https://img.shields.io/badge/Contributions-Welcome-brightgreen?style=flat-square" alt="Contributions Welcome"></a>
45
+ </p>
46
+
47
+ <p align="center">
48
+ <a href="#quick-start">Quick Start</a> ·
49
+ <a href="#commands">Commands</a> ·
50
+ <a href="https://scc-cli.dev">Documentation</a> ·
51
+ <a href="#configuration">Configuration</a> ·
52
+ <a href="https://scc-cli.dev/architecture/overview/">Architecture</a>
53
+ </p>
54
+
55
+ <p align="center">
56
+ <strong>📚 Full Documentation: <a href="https://scc-cli.dev">scc-cli.dev</a></strong>
57
+ </p>
58
+
59
+ ---
60
+
61
+ Run [Claude Code](https://docs.anthropic.com/en/docs/claude-code) (Anthropic's AI coding CLI) in Docker sandboxes with organization-managed team profiles and git worktree support.
62
+
63
+ SCC isolates AI execution in containers, enforces branch safety, and prevents destructive git commands. Organizations distribute plugins through a central config—developers get standardized setups without manual configuration.
64
+
65
+ > **Plugin Marketplace:** Extend Claude with the [official plugin marketplace](https://github.com/CCimen/sandboxed-code-plugins). Start with [**scc-safety-net**](https://scc-cli.dev/plugins/safety-net/) to block destructive git commands like `push --force`.
66
+
67
+ ## 30-Second Guide
68
+
69
+ **Requires:** Python 3.10+, Docker Desktop 4.50+, Git 2.30+
70
+
71
+ ```bash
72
+ uv tool install scc-cli # Install (recommended)
73
+ scc setup # Configure (paste your org URL, pick your team)
74
+ cd ~/project && scc # Auto-detect workspace and launch (or scc start ~/project)
75
+ ```
76
+
77
+ > **Alternative:** `pip install scc-cli` works if you don't have [uv](https://docs.astral.sh/uv/).
78
+
79
+ Run `scc doctor` to verify your environment or troubleshoot issues.
80
+
81
+ ### Smart Start Flow
82
+
83
+ When you run `scc` or `scc start`:
84
+ - **Auto-detects workspace** from git repository root or `.scc.yaml` location
85
+ - **Shows Quick Resume** if you have recent sessions for this workspace
86
+ - **Prints brief context** (workspace root, entry directory, team) before launching
87
+ - **Applies personal profile** (if saved) after team config, before workspace overrides
88
+ - **Safety guard**: Won't auto-launch from suspicious directories (home, `/tmp`). Explicit paths like `scc start ~/` prompt for confirmation
89
+
90
+ **Keyboard shortcuts in interactive mode:**
91
+ - `Enter` — Select/resume session
92
+ - `n` — Start new session
93
+ - `s` — Settings & maintenance
94
+ - `Esc` — Go back
95
+ - `q` — Quit
96
+
97
+ ---
98
+
99
+ ### Find Your Path
100
+
101
+ | You are... | Start here |
102
+ |------------|------------|
103
+ | **Developer** joining a team | [Developer Onboarding](#developer-onboarding) — what you get automatically |
104
+ | **Team Lead** setting up your team | [Team Setup](#team-setup) — manage plugins in your own repo |
105
+ | **Org Admin** configuring security | [Organization Setup](#organization-setup) — control what's allowed org-wide |
106
+ | Exploring **plugins** | [Plugin Marketplace](https://scc-cli.dev/plugins/marketplace/) — official plugins & safety tools |
107
+
108
+ ---
109
+
110
+ ### Developer Onboarding
111
+
112
+ **New to a team?** After running `scc setup` and `scc start`, you get:
113
+
114
+ - **Your team's approved plugins and MCP servers** — pre-configured and ready
115
+ - **Organization security policies** — applied automatically, no action needed
116
+ - **Command guardrails** — block destructive git commands like `push --force` (when scc-safety-net plugin is enabled)
117
+ - **Isolated git worktrees** — your main branch stays clean while Claude experiments
118
+ - **Personal profiles (optional)** — save your own plugin/MCP preferences per project
119
+
120
+ **What you never need to do:**
121
+ - Edit config files manually
122
+ - Download or configure plugins
123
+ - Worry about security settings
124
+
125
+ Your org admin and team lead handle the configuration. You just code.
126
+
127
+ ---
128
+
129
+ ### Who Controls What
130
+
131
+ | Setting | Org Admin | Team Lead | Developer |
132
+ |---------|:---------:|:---------:|:---------:|
133
+ | Block dangerous plugins/servers | ✅ **Sets** | ❌ Cannot override | ❌ Cannot override |
134
+ | Default plugins for all teams | ✅ **Sets** | — | — |
135
+ | Team-specific plugins | ✅ Approves | ✅ **Chooses** | — |
136
+ | Project-local config (.scc.yaml) | ✅ Can restrict | ✅ Can restrict | ✅ **Extends** |
137
+ | Personal profiles (local) | ✅ Governed by security blocks | ✅ Governed by delegation | ✅ **Chooses** |
138
+ | Safety-net policy (block/warn) | ✅ **Sets** | ❌ Cannot override | ❌ Cannot override |
139
+
140
+ Organization security blocks cannot be overridden by teams or developers.
141
+
142
+ *"Approves" = teams can only select from org-allowed marketplaces; blocks always apply. "Extends" = can add plugins/settings, cannot remove org defaults.*
143
+
144
+ ---
145
+
146
+ ### Organization Setup
147
+
148
+ Org admins create a single JSON config that controls security for all teams:
149
+
150
+ ```json
151
+ {
152
+ "schema_version": "1.0.0",
153
+ "organization": { "name": "Acme Corp", "id": "acme" },
154
+ "marketplaces": {
155
+ "sandboxed-code-official": {
156
+ "source": "github",
157
+ "owner": "CCimen",
158
+ "repo": "sandboxed-code-plugins"
159
+ }
160
+ },
161
+ "security": {
162
+ "blocked_plugins": ["*malicious*"],
163
+ "blocked_mcp_servers": ["*.untrusted.com"],
164
+ "safety_net": { "action": "block" }
165
+ },
166
+ "defaults": {
167
+ "allowed_plugins": ["*"],
168
+ "network_policy": "unrestricted"
169
+ },
170
+ "profiles": {
171
+ "backend": { "additional_plugins": ["scc-safety-net@sandboxed-code-official"] },
172
+ "frontend": { "additional_plugins": ["scc-safety-net@sandboxed-code-official"] }
173
+ }
174
+ }
175
+ ```
176
+
177
+ Host this anywhere: GitHub, GitLab, S3, or any HTTPS URL. Private repos work with token auth.
178
+
179
+ See [examples/](examples/) for complete org configs and [Governance](https://scc-cli.dev/architecture/governance-model/) for delegation rules.
180
+
181
+ ---
182
+
183
+ ### Team Setup
184
+
185
+ Teams can manage their plugins **two ways**:
186
+
187
+ **Option A: Inline (simple)** — Team config lives in the org config file.
188
+ ```json
189
+ "profiles": {
190
+ "backend": {
191
+ "additional_plugins": ["scc-safety-net@sandboxed-code-official"]
192
+ }
193
+ }
194
+ ```
195
+
196
+ **Option B: Team Repo (GitOps)** — Team maintains their own config repo.
197
+ ```json
198
+ "profiles": {
199
+ "backend": {
200
+ "config_source": {
201
+ "source": "github",
202
+ "owner": "acme",
203
+ "repo": "backend-team-scc-config"
204
+ }
205
+ }
206
+ }
207
+ ```
208
+
209
+ With Option B, team leads can update plugins via PRs to their own repo—no org admin approval needed for allowed additions.
210
+
211
+ **Config precedence:** Org defaults → Team profile → Project `.scc.yaml` (additive merge; blocks apply after merge).
212
+
213
+ ---
214
+
215
+ ### Personal Profiles
216
+
217
+ Want your own plugins or MCP servers without committing anything? Personal profiles are per‑project, stored outside the repo, and auto‑applied on `scc start`.
218
+
219
+ If you install plugins inside the container and they only show up in sandbox settings, `scc profile save` and `scc profile status` will detect them and offer to import them into `.claude/settings.local.json` before saving.
220
+
221
+ ```bash
222
+ # Save current workspace preferences
223
+ scc profile save
224
+
225
+ # Apply or preview
226
+ scc profile apply
227
+ scc profile apply --preview
228
+
229
+ # Check status/drift
230
+ scc profile status
231
+ ```
232
+
233
+ Sync across machines with any git host:
234
+
235
+ ```bash
236
+ scc profile export --repo ~/dotfiles/scc-profiles
237
+ scc profile sync --repo ~/dotfiles/scc-profiles --pull --commit --push
238
+ ```
239
+
240
+ ---
241
+
242
+ ## Commands
243
+
244
+ ### Essential Commands
245
+
246
+ | Command | Description |
247
+ |---------|-------------|
248
+ | `scc` | Smart start: auto-detect workspace, show Quick Resume, or launch |
249
+ | `scc setup` | Configure organization connection |
250
+ | `scc doctor` | Check system health and diagnose issues |
251
+ | `scc stop` | Stop running sandbox(es) |
252
+
253
+ ### Session & Team
254
+
255
+ | Command | Description |
256
+ |---------|-------------|
257
+ | `scc start --resume` | Resume most recent session |
258
+ | `scc start --select` | Pick from recent sessions |
259
+ | `scc team switch` | Switch to a different team profile |
260
+ | `scc sessions` | List recent sessions |
261
+
262
+ ### Worktrees
263
+
264
+ | Command | Description |
265
+ |---------|-------------|
266
+ | `scc worktree create <repo> <name>` | Create git worktree for parallel development |
267
+ | `scc worktree enter [target]` | Enter worktree in subshell (no shell config needed) |
268
+ | `scc worktree list -v` | List worktrees with git status |
269
+
270
+ ### Personal Profiles
271
+
272
+ | Command | Description |
273
+ |---------|-------------|
274
+ | `scc profile save` | Save current workspace settings as a personal profile |
275
+ | `scc profile apply` | Apply profile to current workspace |
276
+ | `scc profile diff` | Show diff between profile and workspace |
277
+ | `scc profile status` | Show whether a profile exists and if drift is detected |
278
+ | `scc profile export --repo PATH` | Export profiles to a local repo |
279
+ | `scc profile import --repo PATH` | Import profiles from a local repo |
280
+ | `scc profile sync --repo PATH` | Pull/import + export + optional commit/push |
281
+
282
+ ### Maintenance
283
+
284
+ | Command | Description |
285
+ |---------|-------------|
286
+ | `scc reset` | Interactive maintenance hub (cache, sessions, config) |
287
+ | `scc reset --cache` | Clear cache files |
288
+ | `scc reset --sessions` | Prune old sessions (keeps recent 20) |
289
+ | `scc reset --all` | Factory reset (removes all SCC data) |
290
+ | `scc config paths` | Show file locations and sizes |
291
+ | `scc sessions prune` | Clean up old sessions |
292
+
293
+ ### Governance & Admin
294
+
295
+ | Command | Description |
296
+ |---------|-------------|
297
+ | `scc config explain` | Show effective config with sources |
298
+ | `scc exceptions list` | View active exceptions |
299
+ | `scc audit plugins` | Audit installed plugins |
300
+ | `scc support bundle` | Generate support bundle for troubleshooting |
301
+ | `scc completion bash` | Generate shell completions (bash/zsh/fish) |
302
+
303
+ Run `scc <command> --help` for options. See **[CLI Reference](https://scc-cli.dev/reference/cli/overview/)** for the complete command list (40+ commands).
304
+
305
+ ### Git Worktrees
306
+
307
+ **Primary method (no shell config needed):**
308
+
309
+ ```bash
310
+ scc worktree enter feature-auth # Opens a subshell in the worktree
311
+ # Type 'exit' to return to your previous directory
312
+ ```
313
+
314
+ **Power users:** Add this shell wrapper for seamless `cd` switching:
315
+
316
+ ```bash
317
+ # Add to ~/.bashrc or ~/.zshrc
318
+ wt() {
319
+ local p
320
+ p="$(scc worktree switch "$@")" || return $?
321
+ cd "$p" || return 1
322
+ }
323
+ ```
324
+
325
+ **Usage examples (both methods):**
326
+
327
+ ```bash
328
+ scc worktree enter ^ # Enter main branch worktree
329
+ scc worktree enter - # Enter previous worktree (like cd -)
330
+ wt feature-auth # Switch with shell wrapper
331
+ wt scc/feature-x # Match by full branch name
332
+ ```
333
+
334
+ **Note:** Branch names with `/` are sanitized to `-` (e.g., `feature/auth` → `feature-auth`).
335
+
336
+ **Status indicators in `list -v`:**
337
+
338
+ | Symbol | Meaning |
339
+ |--------|---------|
340
+ | `+N` | N staged files |
341
+ | `!N` | N modified files |
342
+ | `?N` | N untracked files |
343
+ | `.` | Clean worktree |
344
+ | `…` | Status timed out |
345
+
346
+ **Cleanup stale entries:**
347
+
348
+ ```bash
349
+ scc worktree prune -n # Dry-run: show what would be pruned
350
+ scc worktree prune # Actually prune stale entries
351
+ ```
352
+
353
+ ---
354
+
355
+ ## Configuration
356
+
357
+ ### Setup Modes
358
+
359
+ **Organization mode** (recommended):
360
+ ```bash
361
+ scc setup
362
+ # Enter URL when prompted: https://gitlab.example.org/devops/scc-config.json
363
+ ```
364
+
365
+ **Standalone mode** (no org config):
366
+ ```bash
367
+ scc setup --standalone
368
+ ```
369
+
370
+ ### Project Config
371
+
372
+ Add `.scc.yaml` to your repository root for project-specific settings:
373
+
374
+ ```yaml
375
+ additional_plugins:
376
+ - "project-linter@internal"
377
+
378
+ session:
379
+ timeout_hours: 4
380
+ ```
381
+
382
+ ### File Locations
383
+
384
+ ```
385
+ ~/.config/scc/config.json # Org URL, team, preferences
386
+ ~/.cache/scc/ # Cache (safe to delete)
387
+ <repo>/.scc.yaml # Project-specific config
388
+ ```
389
+
390
+ Run `scc config paths` to see all locations with sizes and permissions.
391
+
392
+ ---
393
+
394
+ ## Troubleshooting
395
+
396
+ Run `scc doctor` to diagnose issues.
397
+
398
+ | Problem | Solution |
399
+ |---------|----------|
400
+ | Docker not reachable | Start Docker Desktop |
401
+ | Organization config fetch failed | Check URL and token |
402
+ | Plugin blocked | Check `scc config explain` for security blocks |
403
+
404
+ See [Troubleshooting Guide](https://scc-cli.dev/troubleshooting/) for more solutions.
405
+
406
+ ---
407
+
408
+ ## Documentation
409
+
410
+ Visit **[scc-cli.dev](https://scc-cli.dev)** for comprehensive documentation:
411
+
412
+ - [Getting Started](https://scc-cli.dev/getting-started/quick-start/) — installation and first steps
413
+ - [CLI Reference](https://scc-cli.dev/reference/cli/overview/) — complete command reference (40+ commands)
414
+ - [Architecture](https://scc-cli.dev/architecture/overview/) — system design, module structure
415
+ - [Governance](https://scc-cli.dev/architecture/governance-model/) — delegation model, security boundaries
416
+ - [Plugin Marketplace](https://scc-cli.dev/plugins/marketplace/) — plugin distribution and safety-net
417
+ - [Troubleshooting](https://scc-cli.dev/troubleshooting/) — common problems and solutions
418
+ - [Examples](https://scc-cli.dev/examples/) — ready-to-use organization config templates
419
+
420
+ ---
421
+
422
+ ## Automation & CI
423
+
424
+ SCC supports non-interactive operation for CI/CD pipelines and scripting.
425
+
426
+ ```bash
427
+ # CI pipeline example
428
+ scc start --non-interactive --team backend ~/project
429
+
430
+ # Preview configuration as JSON
431
+ scc start --dry-run --json
432
+
433
+ # Full automation mode
434
+ scc start --dry-run --json --non-interactive ~/project
435
+ ```
436
+
437
+ **Key flags:**
438
+ - `--non-interactive` — Fail fast instead of prompting
439
+ - `--json` — Machine-readable output with standardized envelope
440
+ - `--dry-run` — Preview configuration without launching
441
+
442
+ **Exit codes:** 0 (success), 2 (usage error), 3 (config error), 4 (tool error), 5 (prerequisites), 6 (governance block), 130 (cancelled)
443
+
444
+ See [CLI Reference → Exit Codes](https://scc-cli.dev/reference/cli/overview/#exit-codes) for complete documentation.
445
+
446
+ ---
447
+
448
+ ## Development
449
+
450
+ ```bash
451
+ uv sync # Install dependencies
452
+ uv run pytest # Run tests
453
+ uv run ruff check # Run linter
454
+ ```
455
+
456
+ ---
457
+
458
+ ## License
459
+
460
+ MIT