scc-cli 1.4.0__py3-none-any.whl

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.

Potentially problematic release.


This version of scc-cli might be problematic. Click here for more details.

Files changed (112) hide show
  1. scc_cli/__init__.py +15 -0
  2. scc_cli/audit/__init__.py +37 -0
  3. scc_cli/audit/parser.py +191 -0
  4. scc_cli/audit/reader.py +180 -0
  5. scc_cli/auth.py +145 -0
  6. scc_cli/claude_adapter.py +485 -0
  7. scc_cli/cli.py +259 -0
  8. scc_cli/cli_admin.py +683 -0
  9. scc_cli/cli_audit.py +245 -0
  10. scc_cli/cli_common.py +166 -0
  11. scc_cli/cli_config.py +527 -0
  12. scc_cli/cli_exceptions.py +705 -0
  13. scc_cli/cli_helpers.py +244 -0
  14. scc_cli/cli_init.py +272 -0
  15. scc_cli/cli_launch.py +1400 -0
  16. scc_cli/cli_org.py +1433 -0
  17. scc_cli/cli_support.py +322 -0
  18. scc_cli/cli_team.py +858 -0
  19. scc_cli/cli_worktree.py +865 -0
  20. scc_cli/config.py +583 -0
  21. scc_cli/console.py +562 -0
  22. scc_cli/constants.py +79 -0
  23. scc_cli/contexts.py +377 -0
  24. scc_cli/deprecation.py +54 -0
  25. scc_cli/deps.py +189 -0
  26. scc_cli/docker/__init__.py +127 -0
  27. scc_cli/docker/core.py +466 -0
  28. scc_cli/docker/credentials.py +726 -0
  29. scc_cli/docker/launch.py +603 -0
  30. scc_cli/doctor/__init__.py +99 -0
  31. scc_cli/doctor/checks.py +1082 -0
  32. scc_cli/doctor/render.py +346 -0
  33. scc_cli/doctor/types.py +66 -0
  34. scc_cli/errors.py +288 -0
  35. scc_cli/evaluation/__init__.py +27 -0
  36. scc_cli/evaluation/apply_exceptions.py +207 -0
  37. scc_cli/evaluation/evaluate.py +97 -0
  38. scc_cli/evaluation/models.py +80 -0
  39. scc_cli/exit_codes.py +55 -0
  40. scc_cli/git.py +1405 -0
  41. scc_cli/json_command.py +166 -0
  42. scc_cli/json_output.py +96 -0
  43. scc_cli/kinds.py +62 -0
  44. scc_cli/marketplace/__init__.py +123 -0
  45. scc_cli/marketplace/compute.py +377 -0
  46. scc_cli/marketplace/constants.py +87 -0
  47. scc_cli/marketplace/managed.py +135 -0
  48. scc_cli/marketplace/materialize.py +723 -0
  49. scc_cli/marketplace/normalize.py +548 -0
  50. scc_cli/marketplace/render.py +238 -0
  51. scc_cli/marketplace/resolve.py +459 -0
  52. scc_cli/marketplace/schema.py +502 -0
  53. scc_cli/marketplace/sync.py +257 -0
  54. scc_cli/marketplace/team_cache.py +195 -0
  55. scc_cli/marketplace/team_fetch.py +688 -0
  56. scc_cli/marketplace/trust.py +244 -0
  57. scc_cli/models/__init__.py +41 -0
  58. scc_cli/models/exceptions.py +273 -0
  59. scc_cli/models/plugin_audit.py +434 -0
  60. scc_cli/org_templates.py +269 -0
  61. scc_cli/output_mode.py +167 -0
  62. scc_cli/panels.py +113 -0
  63. scc_cli/platform.py +350 -0
  64. scc_cli/profiles.py +1034 -0
  65. scc_cli/remote.py +443 -0
  66. scc_cli/schemas/__init__.py +1 -0
  67. scc_cli/schemas/org-v1.schema.json +456 -0
  68. scc_cli/schemas/team-config.v1.schema.json +163 -0
  69. scc_cli/sessions.py +425 -0
  70. scc_cli/setup.py +582 -0
  71. scc_cli/source_resolver.py +470 -0
  72. scc_cli/stats.py +378 -0
  73. scc_cli/stores/__init__.py +13 -0
  74. scc_cli/stores/exception_store.py +251 -0
  75. scc_cli/subprocess_utils.py +88 -0
  76. scc_cli/teams.py +339 -0
  77. scc_cli/templates/__init__.py +2 -0
  78. scc_cli/templates/org/__init__.py +0 -0
  79. scc_cli/templates/org/minimal.json +19 -0
  80. scc_cli/templates/org/reference.json +74 -0
  81. scc_cli/templates/org/strict.json +38 -0
  82. scc_cli/templates/org/teams.json +42 -0
  83. scc_cli/templates/statusline.sh +75 -0
  84. scc_cli/theme.py +348 -0
  85. scc_cli/ui/__init__.py +124 -0
  86. scc_cli/ui/branding.py +68 -0
  87. scc_cli/ui/chrome.py +395 -0
  88. scc_cli/ui/dashboard/__init__.py +62 -0
  89. scc_cli/ui/dashboard/_dashboard.py +669 -0
  90. scc_cli/ui/dashboard/loaders.py +369 -0
  91. scc_cli/ui/dashboard/models.py +184 -0
  92. scc_cli/ui/dashboard/orchestrator.py +337 -0
  93. scc_cli/ui/formatters.py +443 -0
  94. scc_cli/ui/gate.py +350 -0
  95. scc_cli/ui/help.py +157 -0
  96. scc_cli/ui/keys.py +521 -0
  97. scc_cli/ui/list_screen.py +431 -0
  98. scc_cli/ui/picker.py +700 -0
  99. scc_cli/ui/prompts.py +200 -0
  100. scc_cli/ui/wizard.py +490 -0
  101. scc_cli/update.py +680 -0
  102. scc_cli/utils/__init__.py +39 -0
  103. scc_cli/utils/fixit.py +264 -0
  104. scc_cli/utils/fuzzy.py +124 -0
  105. scc_cli/utils/locks.py +101 -0
  106. scc_cli/utils/ttl.py +376 -0
  107. scc_cli/validate.py +455 -0
  108. scc_cli-1.4.0.dist-info/METADATA +369 -0
  109. scc_cli-1.4.0.dist-info/RECORD +112 -0
  110. scc_cli-1.4.0.dist-info/WHEEL +4 -0
  111. scc_cli-1.4.0.dist-info/entry_points.txt +2 -0
  112. scc_cli-1.4.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,369 @@
1
+ Metadata-Version: 2.4
2
+ Name: scc-cli
3
+ Version: 1.4.0
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="#configuration">Configuration</a> ·
51
+ <a href="docs/ARCHITECTURE.md">Architecture</a> ·
52
+ <a href="#contributing">Contributing</a>
53
+ </p>
54
+
55
+ ---
56
+
57
+ 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.
58
+
59
+ 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.
60
+
61
+ > **Plugin Marketplace:** Extend Claude with the [official plugin marketplace](https://github.com/CCimen/sandboxed-code-plugins). Start with [**scc-safety-net**](docs/MARKETPLACE.md#safety-net-plugin) to block destructive git commands like `push --force`.
62
+
63
+ ## 30-Second Guide
64
+
65
+ **Requires:** Python 3.10+, Docker Desktop 4.50+, Git 2.30+
66
+
67
+ ```bash
68
+ pip install scc-cli # Install
69
+ scc setup # Configure (paste your org URL, pick your team)
70
+ cd ~/project && scc # Auto-detect workspace and launch (or scc start ~/project)
71
+ ```
72
+
73
+ Run `scc doctor` to verify your environment or troubleshoot issues.
74
+
75
+ ### Smart Start Flow
76
+
77
+ When you run `scc` or `scc start` from inside a git repository:
78
+ - **Auto-detects workspace** from your current directory
79
+ - **Shows Quick Resume** if you have recent sessions for this workspace
80
+ - **Prints brief context** (workspace name, branch, team) before launching
81
+
82
+ **Keyboard shortcuts in interactive mode:**
83
+ - `Enter` — Select/resume session
84
+ - `n` — Start new session
85
+ - `Esc` — Go back
86
+ - `q` — Quit
87
+
88
+ ---
89
+
90
+ ### Find Your Path
91
+
92
+ | You are... | Start here |
93
+ |------------|------------|
94
+ | **Developer** joining a team | [Developer Onboarding](#developer-onboarding) — what you get automatically |
95
+ | **Team Lead** setting up your team | [Team Setup](#team-setup) — manage plugins in your own repo |
96
+ | **Org Admin** configuring security | [Organization Setup](#organization-setup) — control what's allowed org-wide |
97
+ | Exploring **plugins** | [Plugin Marketplace](docs/MARKETPLACE.md) — official plugins & safety tools |
98
+
99
+ ---
100
+
101
+ ### Developer Onboarding
102
+
103
+ **New to a team?** After running `scc setup` and `scc start`, you get:
104
+
105
+ - **Your team's approved plugins and MCP servers** — pre-configured and ready
106
+ - **Organization security policies** — applied automatically, no action needed
107
+ - **Command guardrails** — block destructive git commands like `push --force` (when scc-safety-net plugin is enabled)
108
+ - **Isolated git worktrees** — your main branch stays clean while Claude experiments
109
+
110
+ **What you never need to do:**
111
+ - Edit config files manually
112
+ - Download or configure plugins
113
+ - Worry about security settings
114
+
115
+ Your org admin and team lead handle the configuration. You just code.
116
+
117
+ ---
118
+
119
+ ### Who Controls What
120
+
121
+ | Setting | Org Admin | Team Lead | Developer |
122
+ |---------|:---------:|:---------:|:---------:|
123
+ | Block dangerous plugins/servers | ✅ **Sets** | ❌ Cannot override | ❌ Cannot override |
124
+ | Default plugins for all teams | ✅ **Sets** | — | — |
125
+ | Team-specific plugins | ✅ Approves | ✅ **Chooses** | — |
126
+ | Project-local config (.scc.yaml) | ✅ Can restrict | ✅ Can restrict | ✅ **Extends** |
127
+ | Safety-net policy (block/warn) | ✅ **Sets** | ❌ Cannot override | ❌ Cannot override |
128
+
129
+ Organization security blocks cannot be overridden by teams or developers.
130
+
131
+ *"Approves" = teams can only select from org-allowed marketplaces; blocks always apply. "Extends" = can add plugins/settings, cannot remove org defaults.*
132
+
133
+ ---
134
+
135
+ ### Organization Setup
136
+
137
+ Org admins create a single JSON config that controls security for all teams:
138
+
139
+ ```json
140
+ {
141
+ "schema_version": "1.0.0",
142
+ "organization": { "name": "Acme Corp", "id": "acme" },
143
+ "marketplaces": {
144
+ "sandboxed-code-official": {
145
+ "source": "github",
146
+ "owner": "CCimen",
147
+ "repo": "sandboxed-code-plugins"
148
+ }
149
+ },
150
+ "security": {
151
+ "blocked_plugins": ["*malicious*"],
152
+ "blocked_mcp_servers": ["*.untrusted.com"],
153
+ "safety_net": { "action": "block" }
154
+ },
155
+ "defaults": {
156
+ "allowed_plugins": ["*"],
157
+ "network_policy": "unrestricted"
158
+ },
159
+ "profiles": {
160
+ "backend": { "additional_plugins": ["scc-safety-net@sandboxed-code-official"] },
161
+ "frontend": { "additional_plugins": ["scc-safety-net@sandboxed-code-official"] }
162
+ }
163
+ }
164
+ ```
165
+
166
+ Host this anywhere: GitHub, GitLab, S3, or any HTTPS URL. Private repos work with token auth.
167
+
168
+ See [examples/](examples/) for complete org configs and [GOVERNANCE.md](docs/GOVERNANCE.md) for delegation rules.
169
+
170
+ ---
171
+
172
+ ### Team Setup
173
+
174
+ Teams can manage their plugins **two ways**:
175
+
176
+ **Option A: Inline (simple)** — Team config lives in the org config file.
177
+ ```json
178
+ "profiles": {
179
+ "backend": {
180
+ "additional_plugins": ["scc-safety-net@sandboxed-code-official"]
181
+ }
182
+ }
183
+ ```
184
+
185
+ **Option B: Team Repo (GitOps)** — Team maintains their own config repo.
186
+ ```json
187
+ "profiles": {
188
+ "backend": {
189
+ "config_source": {
190
+ "source": "github",
191
+ "owner": "acme",
192
+ "repo": "backend-team-scc-config"
193
+ }
194
+ }
195
+ }
196
+ ```
197
+
198
+ With Option B, team leads can update plugins via PRs to their own repo—no org admin approval needed for allowed additions.
199
+
200
+ **Config precedence:** Org defaults → Team profile → Project `.scc.yaml` (additive merge; blocks apply after merge).
201
+
202
+ ---
203
+
204
+ ## Commands
205
+
206
+ | Command | Description |
207
+ |---------|-------------|
208
+ | `scc` | Smart start: auto-detect workspace, show Quick Resume, or launch |
209
+ | `scc start` | Same as `scc` — auto-detects workspace from CWD |
210
+ | `scc start -i` | Force workspace picker (ignore current folder) |
211
+ | `scc start <path>` | Start Claude Code in sandbox for specific path |
212
+ | `scc start --resume` | Resume most recent session (no UI) |
213
+ | `scc start --select` | Show session picker to choose which session to resume |
214
+ | `scc start --standalone` | Launch without organization config (no team profile) |
215
+ | `scc start --offline` | Use cached org config only (no network) |
216
+ | `scc start --dry-run` | Preview launch configuration without starting container |
217
+ | `scc start --dry-run --json` | Output launch config as JSON (for CI/automation) |
218
+ | `scc start --non-interactive` | Fail fast instead of prompting (for CI/scripts) |
219
+ | `scc setup` | Configure organization connection |
220
+ | `scc stop` | Stop running sandbox(es) |
221
+ | `scc doctor` | Check system health |
222
+ | `scc team list` | List team profiles |
223
+ | `scc team switch <name>` | Switch to a different team |
224
+ | `scc config explain` | Show effective config with sources |
225
+ | `scc worktree create <repo> <name>` | Create git worktree |
226
+
227
+ Run `scc <command> --help` for options. See [CLI Reference](docs/CLI-REFERENCE.md) for full command list.
228
+
229
+ ---
230
+
231
+ ## Configuration
232
+
233
+ ### Setup Modes
234
+
235
+ **Organization mode** (recommended):
236
+ ```bash
237
+ scc setup
238
+ # Enter URL when prompted: https://gitlab.example.org/devops/scc-config.json
239
+ ```
240
+
241
+ **Standalone mode** (no org config):
242
+ ```bash
243
+ scc setup --standalone
244
+ ```
245
+
246
+ ### Project Config
247
+
248
+ Add `.scc.yaml` to your repository root for project-specific settings:
249
+
250
+ ```yaml
251
+ additional_plugins:
252
+ - "project-linter@internal"
253
+
254
+ session:
255
+ timeout_hours: 4
256
+ ```
257
+
258
+ ### File Locations
259
+
260
+ ```
261
+ ~/.config/scc/config.json # Org URL, team, preferences
262
+ ~/.cache/scc/ # Cache (safe to delete)
263
+ <repo>/.scc.yaml # Project-specific config
264
+ ```
265
+
266
+ ---
267
+
268
+ ## Troubleshooting
269
+
270
+ Run `scc doctor` to diagnose issues.
271
+
272
+ | Problem | Solution |
273
+ |---------|----------|
274
+ | Docker not reachable | Start Docker Desktop |
275
+ | Organization config fetch failed | Check URL and token |
276
+ | Plugin blocked | Check `scc config explain` for security blocks |
277
+
278
+ See [TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) for more solutions.
279
+
280
+ ---
281
+
282
+ ## Documentation
283
+
284
+ - [Architecture](docs/ARCHITECTURE.md) — system design, module structure
285
+ - [Governance](docs/GOVERNANCE.md) — delegation model, security boundaries
286
+ - [Marketplace](docs/MARKETPLACE.md) — plugin distribution and safety-net
287
+ - [Troubleshooting](docs/TROUBLESHOOTING.md) — common problems and solutions
288
+ - [Examples](examples/) — ready-to-use organization config templates
289
+
290
+ ---
291
+
292
+ ## Automation & CI
293
+
294
+ SCC supports non-interactive operation for CI/CD pipelines and scripting.
295
+
296
+ ### Exit Codes
297
+
298
+ | Code | Name | Meaning |
299
+ |------|------|---------|
300
+ | 0 | `EXIT_SUCCESS` | Operation completed successfully |
301
+ | 1 | `EXIT_ERROR` | General error |
302
+ | 2 | `EXIT_USAGE` | Invalid command-line usage |
303
+ | 3 | `EXIT_CONFIG` | Configuration error |
304
+ | 4 | `EXIT_VALIDATION` | Validation failure |
305
+ | 5 | `EXIT_PREREQ` | Missing prerequisites |
306
+ | 6 | `EXIT_GOVERNANCE` | Blocked by security policy |
307
+ | 130 | `EXIT_CANCELLED` | User cancelled (Esc/Ctrl+C) |
308
+
309
+ ### JSON Output
310
+
311
+ Use `--json` for machine-readable output:
312
+
313
+ ```bash
314
+ # Preview launch configuration
315
+ scc start --dry-run --json
316
+
317
+ # List teams as JSON
318
+ scc team list --json
319
+
320
+ # Explain config with JSON envelope
321
+ scc config explain --json
322
+ ```
323
+
324
+ JSON envelope format:
325
+ ```json
326
+ {
327
+ "apiVersion": "scc.cli/v1",
328
+ "kind": "StartDryRun",
329
+ "metadata": { "timestamp": "...", "version": "..." },
330
+ "status": { "ok": true },
331
+ "data": { ... }
332
+ }
333
+ ```
334
+
335
+ ### Non-Interactive Mode
336
+
337
+ Use `--non-interactive` to fail fast instead of prompting:
338
+
339
+ ```bash
340
+ # CI pipeline: fail if workspace not specified
341
+ scc start --non-interactive ~/project
342
+
343
+ # Require explicit team selection
344
+ scc start --non-interactive --team backend ~/project
345
+
346
+ # Combine with JSON for full automation
347
+ scc start --dry-run --json --non-interactive ~/project
348
+ ```
349
+
350
+ When `--non-interactive` is set:
351
+ - Missing required inputs cause immediate failure (exit 2)
352
+ - No TUI pickers or prompts are displayed
353
+ - Errors are returned as JSON when `--json` is also set
354
+
355
+ ---
356
+
357
+ ## Development
358
+
359
+ ```bash
360
+ uv sync # Install dependencies
361
+ uv run pytest # Run tests
362
+ uv run ruff check # Run linter
363
+ ```
364
+
365
+ ---
366
+
367
+ ## License
368
+
369
+ MIT
@@ -0,0 +1,112 @@
1
+ scc_cli/__init__.py,sha256=it1SC7TzewmuZCAhc2lJ6oahTky9-PJoLxLUQ-TFmm4,438
2
+ scc_cli/auth.py,sha256=2la9Ny4BuIffef0SzZOh7oreYIXJVDkL7dDPgpWRByE,4481
3
+ scc_cli/claude_adapter.py,sha256=gxoB4FOvZHjw0c2MdiVX-8Z9PuaCpBLNgBswTKXRWXc,17700
4
+ scc_cli/cli.py,sha256=v7ILKfPe_8GUzZBcKQ8mR0PI4Ght_RjpnDAJ3TCOdWw,10073
5
+ scc_cli/cli_admin.py,sha256=dhFumHWM4pIQcSS3kgwpmN1nICLS33MdkTMBCS-4xMA,25777
6
+ scc_cli/cli_audit.py,sha256=RTvTTIyu5Vs16Yemk4SAp8yihDISb1Sx34QnDgFjMRw,7749
7
+ scc_cli/cli_common.py,sha256=j_e5dEDqHoE7wVJZF61mzcotpQCe9v-wqWlIN5qc380,6505
8
+ scc_cli/cli_config.py,sha256=RZNHEtOQG0cIG24dllw4BpHLgd_iqDaP1cyY5Yq6pYg,19954
9
+ scc_cli/cli_exceptions.py,sha256=q--Xc9dFFHYfyM0JDmoMxX7dxOpqaMLfuFKkLCn3RXQ,25540
10
+ scc_cli/cli_helpers.py,sha256=jKvyvs2DxS6VHcs9TIEFVWikp9LUY_UUkYF7lKc2s38,7134
11
+ scc_cli/cli_init.py,sha256=isnpBWCNTzBFmCHp7gftFBGz_eyswsZh5Yd3jZEImoA,9744
12
+ scc_cli/cli_launch.py,sha256=j5h4HRR8VtG6D-40Lvj5r0qmrdZN4peI6k7eB-HYsTM,55997
13
+ scc_cli/cli_org.py,sha256=5IjDeRiv7bIRXGAPDhjjJwhlEAJ_ij2pAsijCYlfnYw,49921
14
+ scc_cli/cli_support.py,sha256=w96HWEpTpJ3jUGmHUwJVREdeDmkGvhLIdT5DqgIXKAg,11354
15
+ scc_cli/cli_team.py,sha256=WQo5XMDu2bxd5uG30gnLJheXi5rGQyuZDRmHphzdL0A,33020
16
+ scc_cli/cli_worktree.py,sha256=2hqa9H06Tz-jhNxljmdjVCr4OLBernw-uAW5onM-VNA,30989
17
+ scc_cli/config.py,sha256=IHnAWyztMgFzCEORS9vXyJlNoHv3s2k9fEdQgkWMlqg,22076
18
+ scc_cli/console.py,sha256=nOU2gbEn1y-_bDDM3YpRgq1zHfmEpMm9CkmZh-v0KAg,21225
19
+ scc_cli/constants.py,sha256=CL-CPiP0hACyA14uDkbOZo65i5x-5bITM-cbD4QOXEU,4414
20
+ scc_cli/contexts.py,sha256=4fEAUG_8lc00h1G05GeARO-Y-GMKzODYmaAzs6urmCY,13331
21
+ scc_cli/deprecation.py,sha256=1iCVOGUgm5oXJG0OsXtRZlp_TZFl2DBPhZyX536DqzA,1884
22
+ scc_cli/deps.py,sha256=HpXXpJ4sBwceJfU4c5en3lg3zSaJR9YBL-tYOb2-Iw0,6959
23
+ scc_cli/errors.py,sha256=nIC6v7O_gwFEywhMPbNCMsN1vuKPLa3E1mpjScqXUWw,8720
24
+ scc_cli/exit_codes.py,sha256=9tieQUDPZqEwuupQC8mHA651cm_4eXEBIbKPlr_a9to,1784
25
+ scc_cli/git.py,sha256=MfadcSveNKAVRgw3DVmjnZFS3mbF2AS9D8y7wGdMbv4,48379
26
+ scc_cli/json_command.py,sha256=G0aL7haiS4LQQ0YsfLYdNfqWzZm9IyNhjORX51PCszU,6322
27
+ scc_cli/json_output.py,sha256=b9CZzyQeg4npwVfJncm9U2JY8Qe1-xo7zSZUgdrV6zw,3301
28
+ scc_cli/kinds.py,sha256=6Uk7so_a4RhvX7r7xVTFRwHdzcLaQ0gDR4EX4Y2POWY,1522
29
+ scc_cli/org_templates.py,sha256=JjkfcCjLwDCoHeqFsvY6kq-Bs0zaja2tbjBrJ_aOKWI,9050
30
+ scc_cli/output_mode.py,sha256=BZpkUx7tAfk-VYP-GOzui7NeHN-19sxdXdSo7HRcc5Y,6500
31
+ scc_cli/panels.py,sha256=fg8OJ3It44Jt7-q4LufGi9KFrA7i9ViuA4xBO8--1W8,3269
32
+ scc_cli/platform.py,sha256=qZEuUOgRA-v2le6_mYrt61uWkWW01Osyt9R5gPA9Qls,11080
33
+ scc_cli/profiles.py,sha256=aA1AMk2Q7ubTACpEBDRyMXcqHkUU1Fjr1vjeS9OMpBU,37797
34
+ scc_cli/remote.py,sha256=Nu-G4MLyh0ffR6shLlS-vwUjG-HxmcegAOEA5f6h3qQ,16947
35
+ scc_cli/sessions.py,sha256=Mg46nQMXJyx6Hu6GNeesXrtGIoZL6knviFQk8rZxc4E,13954
36
+ scc_cli/setup.py,sha256=xz0-inyIP0FFg9AwZvgnJ29McZb8M8YKXs70VrZuN0c,21446
37
+ scc_cli/source_resolver.py,sha256=QBVYzSaCipmTM_b1eboamTYjIdXTXOceBXRpyQDG7D8,16024
38
+ scc_cli/stats.py,sha256=wbCHY-Qu5VLDp2bXhvfcMcWZgWUgbl9mNwqeE3h0ALE,13749
39
+ scc_cli/subprocess_utils.py,sha256=dXE-IsYsc53dx0rwN0bxWe7Oc5wv7kf3a9-auEXshww,2264
40
+ scc_cli/teams.py,sha256=m5sHTS3RPl9FJU9yK-LTvqEsHUhcU_60DkoJC53uXfg,11287
41
+ scc_cli/theme.py,sha256=PW9K77wCeJfDUfHr_bDkA1udlJI2pDUJklztVZCkmWw,13575
42
+ scc_cli/update.py,sha256=9_EgGhdl_QMsP4e2NT6qAuqvUPLiCklcNf_yRKPkTZA,24092
43
+ scc_cli/validate.py,sha256=H_wC55ApPafGNZ24BivFX0XAfmHkwaDuoTCNebM4KAU,18959
44
+ scc_cli/audit/__init__.py,sha256=hkFttaKDpMN6OQIVoiGtMZNrGtlKNX3ahaspbUJ_rp4,890
45
+ scc_cli/audit/parser.py,sha256=LzEILJP0D8Jy-4616YXtuczacPVi2lgULNmNWLmp_gw,5113
46
+ scc_cli/audit/reader.py,sha256=FirKgcXrFiE4lxX189x7D-nboimx4KZ2buu6L6ShM-4,5468
47
+ scc_cli/docker/__init__.py,sha256=6lMnM4utXw5L5G3E8B_sKdx-FHS1r5-H8N70AAWwo0Y,3695
48
+ scc_cli/docker/core.py,sha256=r-C20wlI9aRdTS1utupcprKqsdQH7ENGFTTBmUOIWyY,14791
49
+ scc_cli/docker/credentials.py,sha256=M8gk2w3twoBWVJZutXQfkNygPle8JOxsxRGz31JtZ68,26255
50
+ scc_cli/docker/launch.py,sha256=giYXK5uGwYCQf9hdoCWhTvM_z_vrmN4g3o0sw25gTag,21734
51
+ scc_cli/doctor/__init__.py,sha256=Z88bcOz3ywGJu5oKgJvZjY4bqmTrkiBPm_iQU0wwM6E,2673
52
+ scc_cli/doctor/checks.py,sha256=ihLKoWGvWCPKl0Va2VYl9acTgsIY7MRXb99MtZSpyUc,35054
53
+ scc_cli/doctor/render.py,sha256=BPLqoGyr9Y2crxQpBDLXX7ZQhv6NVSLcVRhmw7v_190,12265
54
+ scc_cli/doctor/types.py,sha256=GXVNLUaAPYb0K_8IDKfWO23WFhFVzgqH95xnDGRAXKU,1884
55
+ scc_cli/evaluation/__init__.py,sha256=k9AcfESzr6nA87sY52x0-QlZ69V7K-p10e9zKIG3g0E,607
56
+ scc_cli/evaluation/apply_exceptions.py,sha256=MkS6L00h4kojtirs3uVn5Rp2DKDPMuQ3DOo5PlQLuF0,6863
57
+ scc_cli/evaluation/evaluate.py,sha256=XPVOE_Zxl4QDz_OvtdRNZW9owZyz8MiN0bBBxN9rgKk,3071
58
+ scc_cli/evaluation/models.py,sha256=9dEUmf2P_RI26RU6bm4Nr2-jHGIIjU80JP3JkuhR-28,2789
59
+ scc_cli/marketplace/__init__.py,sha256=b1W_LXi-W03JsJeKzQaL_gSF1fMG09sGSc3sVco0Kpo,3305
60
+ scc_cli/marketplace/compute.py,sha256=pB8b1Q6pESBvxZqUGUHsctPAizNdXg-N0KlwjKaW_Xw,19736
61
+ scc_cli/marketplace/constants.py,sha256=xnJmHxNYaOpQBas1Lod1qbTI_6W56vSjuNy7krxTFZw,4529
62
+ scc_cli/marketplace/managed.py,sha256=BImC4O1zDGgQqt4M7u34YsmwgZsFFp7oAoagkdjtNAs,4324
63
+ scc_cli/marketplace/materialize.py,sha256=Msb6GxSetAXw2NMWhpzvFeTEhKl6JfTed_cYj_0qFs0,24535
64
+ scc_cli/marketplace/normalize.py,sha256=GQxhERrHP3GFFkfsYl1WrF829rNSgNx_zoiIB1e_1K0,18861
65
+ scc_cli/marketplace/render.py,sha256=75Z3nKhcWATlgQzfF1RQsOVOFLe8Uh9fOD3daxFME-o,9980
66
+ scc_cli/marketplace/resolve.py,sha256=Z0jEtXWdphDe6QAD4YpcYXWjnixrXbcfF3mttcklha8,19899
67
+ scc_cli/marketplace/schema.py,sha256=loKhavxzH8WD9Eo3v5mFeB31ru72JKgPX1VIpLegB28,17357
68
+ scc_cli/marketplace/sync.py,sha256=mvqmZ90IblL7-Rk4_yqDRrTVBzV4FSH2rhZ_hqZttwY,10009
69
+ scc_cli/marketplace/team_cache.py,sha256=HrabN9dLIi-5lg8LOP30PWdXqWjR4kp4JLKX0fuAMR4,6937
70
+ scc_cli/marketplace/team_fetch.py,sha256=7gabv6nxKaD4qWSBqARjXi6dXDl57MLvG-9lTazKRkU,23047
71
+ scc_cli/marketplace/trust.py,sha256=_5BE86cH_EeqPt8xhryjx_iT_1DYCrt2DnDCEavpuTg,9450
72
+ scc_cli/models/__init__.py,sha256=LCCDNsFG15TVPyOoW8SP61nnlzYbWFjkdiZaIevww6Y,849
73
+ scc_cli/models/exceptions.py,sha256=BWG78KlQPaBGWKQNwtEsb9UpSMCr_YxIT8NSOJqRw98,8688
74
+ scc_cli/models/plugin_audit.py,sha256=4KZpTCg1xNmmA0xEqmy0FuO9MkMntfSUUqGMeeiLgY0,12925
75
+ scc_cli/schemas/__init__.py,sha256=DdfRQqD1txSEPjBg7HLm-3s-gsbfSRO3fxjxDe6mQjo,51
76
+ scc_cli/schemas/org-v1.schema.json,sha256=ALNu1yUAp3hbmCd8U9bnD_uliZwlEXAp9QrQNaChp94,20846
77
+ scc_cli/schemas/team-config.v1.schema.json,sha256=kLcWWVu9_Dg0KT3MJB39MU4obMb071bTXBaR1T3c_98,6233
78
+ scc_cli/stores/__init__.py,sha256=_g6LgPobP1Uc9qmP5Y_pAFgy-2zaT5Lx6nBkTdWjahI,211
79
+ scc_cli/stores/exception_store.py,sha256=6im0L9uGKLvLZfLTTzsA_nnoyymJ7FKzCiZpGD9qDEw,8111
80
+ scc_cli/templates/__init__.py,sha256=5Qbr_rm2GpsYXCxuvhUu8h9qMvz69uFhGOKTLLv70b0,73
81
+ scc_cli/templates/statusline.sh,sha256=WstSweqpIAbr3zfrUxz1cyQPEeYqyTbDfiLcwr1YFMM,2240
82
+ scc_cli/templates/org/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
+ scc_cli/templates/org/minimal.json,sha256=PWGKMpViq6uDchxQLSldCa8lmWCafdcNqYjO5cGt1-k,428
84
+ scc_cli/templates/org/reference.json,sha256=Ot5r19LAwKm_SVmg90Bldi9I7GFqXMyXaWgnOzlLbkg,1999
85
+ scc_cli/templates/org/strict.json,sha256=O5KAC97k6gWrupPlRmn1oKQsrUugWBnmFO7Dehj0Zlc,978
86
+ scc_cli/templates/org/teams.json,sha256=VRommOQpmhHBu2xd3wlNPzAkjkzsm7fBrrP9iAidZJA,1071
87
+ scc_cli/ui/__init__.py,sha256=C3QUrlNBrWvjRD2jE3u0-5bo617mnzkbipvF7AUDpAI,3720
88
+ scc_cli/ui/branding.py,sha256=mOPVmGsdEbSk6bv2-56v9c4lAizxcCUEKo-4FKs_6Z4,2452
89
+ scc_cli/ui/chrome.py,sha256=ji0_VDhVifGjNH-v5BNZPCzXCtVDyGobThCjD7BivC4,12932
90
+ scc_cli/ui/formatters.py,sha256=sh8FXWZApUT3Syk13OlEfb233NRQ9hhaPnA2GClon1k,13210
91
+ scc_cli/ui/gate.py,sha256=sT82jz9pXtbE0SVOFX-3hw4oNk3vU8T0GzlCZB1FJUQ,11461
92
+ scc_cli/ui/help.py,sha256=I83vTRR1IyQPIlIjuCVnJ5lg6noYneXvodbwpwrhx6k,4722
93
+ scc_cli/ui/keys.py,sha256=LSqtZ9Kamq7bpOPlA4yRXMdJKvH8Deg-_igzmEVuiPo,19144
94
+ scc_cli/ui/list_screen.py,sha256=At4UO2f6mACU1NrRb8CVzCAOqjRMmbC80DYmoCq0ehA,15215
95
+ scc_cli/ui/picker.py,sha256=mEcSZ-vc62tXdU3M0106r2gNqrM2-UR7hUjy3tgxmsc,23268
96
+ scc_cli/ui/prompts.py,sha256=BEGNuU5MfAv1wEGQyQHLDHjn9HnvOxdayBp3tLSmrrk,6430
97
+ scc_cli/ui/wizard.py,sha256=KPgYp-rJTeUi59pLlVd7dqINlnuLwhbPo0wQbV_7s1c,17192
98
+ scc_cli/ui/dashboard/__init__.py,sha256=8Gt3i30HohPAnvtdjkaUlzvXy4lJ3v_aPVMUvGQISoY,1845
99
+ scc_cli/ui/dashboard/_dashboard.py,sha256=qxuMv9U2jCRuB_4tyjp5UVKJgrGKGhhNaLkqjpiW-JM,28569
100
+ scc_cli/ui/dashboard/loaders.py,sha256=5kBsc1DFI5WxBHDR5XzIBmPcmf8_FGqob_ip-_shlm4,10766
101
+ scc_cli/ui/dashboard/models.py,sha256=OaBzEAutzVyhg83fOvGl4tr4eadwTymPbgGloHRSbU8,5805
102
+ scc_cli/ui/dashboard/orchestrator.py,sha256=dSLU0QXUxMGt2sMusq8sT9yiq1Z-9aRpnZ6jrLxcwCY,11823
103
+ scc_cli/utils/__init__.py,sha256=3W3MNrlzIBZVfQeKmYiwskDby_QLyqXMKxUaha00iww,858
104
+ scc_cli/utils/fixit.py,sha256=nPAfbuprUtdeGU_oi7yBG9oRztXVe1aSAOcpZOD1L94,7218
105
+ scc_cli/utils/fuzzy.py,sha256=kbqa-V1NZV8qU150MSU5sVct4jvl9Dd13WpXPhen4fw,3717
106
+ scc_cli/utils/locks.py,sha256=Q08ye0QZlD7agUqT2_Sk8uusuQQ2DM0adJT2bDND_WQ,2901
107
+ scc_cli/utils/ttl.py,sha256=qmoG_gy0i8zbAt035otiWRPBIQ0XHRYhOn26oUW6MvI,14117
108
+ scc_cli-1.4.0.dist-info/METADATA,sha256=jiBz0KZrIhlyWCXRUiwX_jlW3CXxvolhKHVdEZ_WEhE,12015
109
+ scc_cli-1.4.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
110
+ scc_cli-1.4.0.dist-info/entry_points.txt,sha256=9J2SwHzS8UJI_CWb331bSoNMwGYFGvy3CYwWuxIAhxM,41
111
+ scc_cli-1.4.0.dist-info/licenses/LICENSE,sha256=VPkRI_D_65MtQecIM3Wgkw_SYdkGABksxbaTilghVxE,1068
112
+ scc_cli-1.4.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.28.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ scc = scc_cli.cli:main
@@ -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.