scc-cli 1.4.1__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.
- scc_cli/__init__.py +15 -0
- scc_cli/audit/__init__.py +37 -0
- scc_cli/audit/parser.py +191 -0
- scc_cli/audit/reader.py +180 -0
- scc_cli/auth.py +145 -0
- scc_cli/claude_adapter.py +485 -0
- scc_cli/cli.py +259 -0
- scc_cli/cli_admin.py +706 -0
- scc_cli/cli_audit.py +245 -0
- scc_cli/cli_common.py +166 -0
- scc_cli/cli_config.py +527 -0
- scc_cli/cli_exceptions.py +705 -0
- scc_cli/cli_helpers.py +244 -0
- scc_cli/cli_init.py +272 -0
- scc_cli/cli_launch.py +1454 -0
- scc_cli/cli_org.py +1428 -0
- scc_cli/cli_support.py +322 -0
- scc_cli/cli_team.py +892 -0
- scc_cli/cli_worktree.py +865 -0
- scc_cli/config.py +583 -0
- scc_cli/console.py +562 -0
- scc_cli/constants.py +79 -0
- scc_cli/contexts.py +377 -0
- scc_cli/deprecation.py +54 -0
- scc_cli/deps.py +189 -0
- scc_cli/docker/__init__.py +127 -0
- scc_cli/docker/core.py +466 -0
- scc_cli/docker/credentials.py +726 -0
- scc_cli/docker/launch.py +604 -0
- scc_cli/doctor/__init__.py +99 -0
- scc_cli/doctor/checks.py +1074 -0
- scc_cli/doctor/render.py +346 -0
- scc_cli/doctor/types.py +66 -0
- scc_cli/errors.py +288 -0
- scc_cli/evaluation/__init__.py +27 -0
- scc_cli/evaluation/apply_exceptions.py +207 -0
- scc_cli/evaluation/evaluate.py +97 -0
- scc_cli/evaluation/models.py +80 -0
- scc_cli/exit_codes.py +55 -0
- scc_cli/git.py +1521 -0
- scc_cli/json_command.py +166 -0
- scc_cli/json_output.py +96 -0
- scc_cli/kinds.py +62 -0
- scc_cli/marketplace/__init__.py +123 -0
- scc_cli/marketplace/adapter.py +74 -0
- scc_cli/marketplace/compute.py +377 -0
- scc_cli/marketplace/constants.py +87 -0
- scc_cli/marketplace/managed.py +135 -0
- scc_cli/marketplace/materialize.py +723 -0
- scc_cli/marketplace/normalize.py +548 -0
- scc_cli/marketplace/render.py +257 -0
- scc_cli/marketplace/resolve.py +459 -0
- scc_cli/marketplace/schema.py +506 -0
- scc_cli/marketplace/sync.py +260 -0
- scc_cli/marketplace/team_cache.py +195 -0
- scc_cli/marketplace/team_fetch.py +688 -0
- scc_cli/marketplace/trust.py +244 -0
- scc_cli/models/__init__.py +41 -0
- scc_cli/models/exceptions.py +273 -0
- scc_cli/models/plugin_audit.py +434 -0
- scc_cli/org_templates.py +269 -0
- scc_cli/output_mode.py +167 -0
- scc_cli/panels.py +113 -0
- scc_cli/platform.py +350 -0
- scc_cli/profiles.py +960 -0
- scc_cli/remote.py +443 -0
- scc_cli/schemas/__init__.py +1 -0
- scc_cli/schemas/org-v1.schema.json +456 -0
- scc_cli/schemas/team-config.v1.schema.json +163 -0
- scc_cli/sessions.py +425 -0
- scc_cli/setup.py +588 -0
- scc_cli/source_resolver.py +470 -0
- scc_cli/stats.py +378 -0
- scc_cli/stores/__init__.py +13 -0
- scc_cli/stores/exception_store.py +251 -0
- scc_cli/subprocess_utils.py +88 -0
- scc_cli/teams.py +382 -0
- scc_cli/templates/__init__.py +2 -0
- scc_cli/templates/org/__init__.py +0 -0
- scc_cli/templates/org/minimal.json +19 -0
- scc_cli/templates/org/reference.json +74 -0
- scc_cli/templates/org/strict.json +38 -0
- scc_cli/templates/org/teams.json +42 -0
- scc_cli/templates/statusline.sh +75 -0
- scc_cli/theme.py +348 -0
- scc_cli/ui/__init__.py +124 -0
- scc_cli/ui/branding.py +68 -0
- scc_cli/ui/chrome.py +395 -0
- scc_cli/ui/dashboard/__init__.py +62 -0
- scc_cli/ui/dashboard/_dashboard.py +677 -0
- scc_cli/ui/dashboard/loaders.py +395 -0
- scc_cli/ui/dashboard/models.py +184 -0
- scc_cli/ui/dashboard/orchestrator.py +390 -0
- scc_cli/ui/formatters.py +443 -0
- scc_cli/ui/gate.py +350 -0
- scc_cli/ui/help.py +157 -0
- scc_cli/ui/keys.py +538 -0
- scc_cli/ui/list_screen.py +431 -0
- scc_cli/ui/picker.py +700 -0
- scc_cli/ui/prompts.py +200 -0
- scc_cli/ui/wizard.py +675 -0
- scc_cli/update.py +680 -0
- scc_cli/utils/__init__.py +39 -0
- scc_cli/utils/fixit.py +264 -0
- scc_cli/utils/fuzzy.py +124 -0
- scc_cli/utils/locks.py +101 -0
- scc_cli/utils/ttl.py +376 -0
- scc_cli/validate.py +455 -0
- scc_cli-1.4.1.dist-info/METADATA +369 -0
- scc_cli-1.4.1.dist-info/RECORD +113 -0
- scc_cli-1.4.1.dist-info/WHEEL +4 -0
- scc_cli-1.4.1.dist-info/entry_points.txt +2 -0
- scc_cli-1.4.1.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: scc-cli
|
|
3
|
+
Version: 1.4.1
|
|
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,113 @@
|
|
|
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=MrEfWRVcsQmQ9AMBE-rE03DBA3jmcpiaTy4lsXjhHIU,26674
|
|
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=6XATLt1mi-V1KViQYXM4AAOOj9K809mG4SCfYnzSyfk,58485
|
|
13
|
+
scc_cli/cli_org.py,sha256=kPsyJjP3rU8VSFXBJAPqYqhSqie4Thm4Du9ycqchZos,49829
|
|
14
|
+
scc_cli/cli_support.py,sha256=w96HWEpTpJ3jUGmHUwJVREdeDmkGvhLIdT5DqgIXKAg,11354
|
|
15
|
+
scc_cli/cli_team.py,sha256=QRL_DLJeW4eKDEdWhI3Y8CEB-Y0rf3yE0-4FvavKqIw,34731
|
|
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=mAt2gJXABMS7RTESqON0CI65X5M1um9SH4oi17ERBbU,52080
|
|
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=RjTGdrSf81SlU-DZ-PWDDPEeBTk0xwP_JRPXMv7dtmc,36084
|
|
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=dYbkLuWHPEvhp3LADyDEejxlBHqvJzouoN_BhQqqGfk,21818
|
|
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=Am_YeKVUoco9LrdqmSdxJUIQfR3OeDZqJ00FuxjuN00,13141
|
|
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=ReYjzaRCBMLEk5soaMV7R2n601RS8mgjn_4Jf44KxMU,21846
|
|
51
|
+
scc_cli/doctor/__init__.py,sha256=Z88bcOz3ywGJu5oKgJvZjY4bqmTrkiBPm_iQU0wwM6E,2673
|
|
52
|
+
scc_cli/doctor/checks.py,sha256=r0P9QHpmE-EiDXkd_7zmuVSESZPUpqJvXAHSQjl3SUA,34916
|
|
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/adapter.py,sha256=2DgPcd5PNJvM0fcYNdO8wZEszK0jHUI3MIduX-Hg-X4,2934
|
|
61
|
+
scc_cli/marketplace/compute.py,sha256=pB8b1Q6pESBvxZqUGUHsctPAizNdXg-N0KlwjKaW_Xw,19736
|
|
62
|
+
scc_cli/marketplace/constants.py,sha256=xnJmHxNYaOpQBas1Lod1qbTI_6W56vSjuNy7krxTFZw,4529
|
|
63
|
+
scc_cli/marketplace/managed.py,sha256=BImC4O1zDGgQqt4M7u34YsmwgZsFFp7oAoagkdjtNAs,4324
|
|
64
|
+
scc_cli/marketplace/materialize.py,sha256=Msb6GxSetAXw2NMWhpzvFeTEhKl6JfTed_cYj_0qFs0,24535
|
|
65
|
+
scc_cli/marketplace/normalize.py,sha256=GQxhERrHP3GFFkfsYl1WrF829rNSgNx_zoiIB1e_1K0,18861
|
|
66
|
+
scc_cli/marketplace/render.py,sha256=XWnUktATtN3qkhaIXNCkYgJwckV8KCwoXLvQSQv_Kgo,11375
|
|
67
|
+
scc_cli/marketplace/resolve.py,sha256=Z0jEtXWdphDe6QAD4YpcYXWjnixrXbcfF3mttcklha8,19899
|
|
68
|
+
scc_cli/marketplace/schema.py,sha256=ihfAKjPfBaet9q2-HlDaWvt88_JCzaYb58BWPJqRrQs,17549
|
|
69
|
+
scc_cli/marketplace/sync.py,sha256=UNGU7VtGgRiGg_rUD-9Xg4QiOoVlhGMquDzsPS5RakM,10206
|
|
70
|
+
scc_cli/marketplace/team_cache.py,sha256=HrabN9dLIi-5lg8LOP30PWdXqWjR4kp4JLKX0fuAMR4,6937
|
|
71
|
+
scc_cli/marketplace/team_fetch.py,sha256=7gabv6nxKaD4qWSBqARjXi6dXDl57MLvG-9lTazKRkU,23047
|
|
72
|
+
scc_cli/marketplace/trust.py,sha256=_5BE86cH_EeqPt8xhryjx_iT_1DYCrt2DnDCEavpuTg,9450
|
|
73
|
+
scc_cli/models/__init__.py,sha256=LCCDNsFG15TVPyOoW8SP61nnlzYbWFjkdiZaIevww6Y,849
|
|
74
|
+
scc_cli/models/exceptions.py,sha256=BWG78KlQPaBGWKQNwtEsb9UpSMCr_YxIT8NSOJqRw98,8688
|
|
75
|
+
scc_cli/models/plugin_audit.py,sha256=4KZpTCg1xNmmA0xEqmy0FuO9MkMntfSUUqGMeeiLgY0,12925
|
|
76
|
+
scc_cli/schemas/__init__.py,sha256=DdfRQqD1txSEPjBg7HLm-3s-gsbfSRO3fxjxDe6mQjo,51
|
|
77
|
+
scc_cli/schemas/org-v1.schema.json,sha256=ALNu1yUAp3hbmCd8U9bnD_uliZwlEXAp9QrQNaChp94,20846
|
|
78
|
+
scc_cli/schemas/team-config.v1.schema.json,sha256=kLcWWVu9_Dg0KT3MJB39MU4obMb071bTXBaR1T3c_98,6233
|
|
79
|
+
scc_cli/stores/__init__.py,sha256=_g6LgPobP1Uc9qmP5Y_pAFgy-2zaT5Lx6nBkTdWjahI,211
|
|
80
|
+
scc_cli/stores/exception_store.py,sha256=6im0L9uGKLvLZfLTTzsA_nnoyymJ7FKzCiZpGD9qDEw,8111
|
|
81
|
+
scc_cli/templates/__init__.py,sha256=5Qbr_rm2GpsYXCxuvhUu8h9qMvz69uFhGOKTLLv70b0,73
|
|
82
|
+
scc_cli/templates/statusline.sh,sha256=WstSweqpIAbr3zfrUxz1cyQPEeYqyTbDfiLcwr1YFMM,2240
|
|
83
|
+
scc_cli/templates/org/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
84
|
+
scc_cli/templates/org/minimal.json,sha256=PWGKMpViq6uDchxQLSldCa8lmWCafdcNqYjO5cGt1-k,428
|
|
85
|
+
scc_cli/templates/org/reference.json,sha256=Ot5r19LAwKm_SVmg90Bldi9I7GFqXMyXaWgnOzlLbkg,1999
|
|
86
|
+
scc_cli/templates/org/strict.json,sha256=O5KAC97k6gWrupPlRmn1oKQsrUugWBnmFO7Dehj0Zlc,978
|
|
87
|
+
scc_cli/templates/org/teams.json,sha256=VRommOQpmhHBu2xd3wlNPzAkjkzsm7fBrrP9iAidZJA,1071
|
|
88
|
+
scc_cli/ui/__init__.py,sha256=C3QUrlNBrWvjRD2jE3u0-5bo617mnzkbipvF7AUDpAI,3720
|
|
89
|
+
scc_cli/ui/branding.py,sha256=mOPVmGsdEbSk6bv2-56v9c4lAizxcCUEKo-4FKs_6Z4,2452
|
|
90
|
+
scc_cli/ui/chrome.py,sha256=ji0_VDhVifGjNH-v5BNZPCzXCtVDyGobThCjD7BivC4,12932
|
|
91
|
+
scc_cli/ui/formatters.py,sha256=sh8FXWZApUT3Syk13OlEfb233NRQ9hhaPnA2GClon1k,13210
|
|
92
|
+
scc_cli/ui/gate.py,sha256=sT82jz9pXtbE0SVOFX-3hw4oNk3vU8T0GzlCZB1FJUQ,11461
|
|
93
|
+
scc_cli/ui/help.py,sha256=I83vTRR1IyQPIlIjuCVnJ5lg6noYneXvodbwpwrhx6k,4722
|
|
94
|
+
scc_cli/ui/keys.py,sha256=saKXupJnT-vGFYAr37c0PfFkqr3pM6wQh1wfWgMGWNY,19664
|
|
95
|
+
scc_cli/ui/list_screen.py,sha256=At4UO2f6mACU1NrRb8CVzCAOqjRMmbC80DYmoCq0ehA,15215
|
|
96
|
+
scc_cli/ui/picker.py,sha256=mEcSZ-vc62tXdU3M0106r2gNqrM2-UR7hUjy3tgxmsc,23268
|
|
97
|
+
scc_cli/ui/prompts.py,sha256=BEGNuU5MfAv1wEGQyQHLDHjn9HnvOxdayBp3tLSmrrk,6430
|
|
98
|
+
scc_cli/ui/wizard.py,sha256=Z2fVU_KnLHNTHDsSDxUeranIuUUpibWT92O7GDSc6vI,22889
|
|
99
|
+
scc_cli/ui/dashboard/__init__.py,sha256=8Gt3i30HohPAnvtdjkaUlzvXy4lJ3v_aPVMUvGQISoY,1845
|
|
100
|
+
scc_cli/ui/dashboard/_dashboard.py,sha256=i29sPCB_k3AASmBIEPcaeYMGxd_1i2pXaf9tpsmflyc,28878
|
|
101
|
+
scc_cli/ui/dashboard/loaders.py,sha256=EfX0PpuuznPmHvI5KtyveeUk940MEwDcEFVjxHu5cFQ,11658
|
|
102
|
+
scc_cli/ui/dashboard/models.py,sha256=OaBzEAutzVyhg83fOvGl4tr4eadwTymPbgGloHRSbU8,5805
|
|
103
|
+
scc_cli/ui/dashboard/orchestrator.py,sha256=fotOfybIgmRUeB_bDw9_6PP7GvRgxgtmKNWHDnm0y44,13568
|
|
104
|
+
scc_cli/utils/__init__.py,sha256=3W3MNrlzIBZVfQeKmYiwskDby_QLyqXMKxUaha00iww,858
|
|
105
|
+
scc_cli/utils/fixit.py,sha256=nPAfbuprUtdeGU_oi7yBG9oRztXVe1aSAOcpZOD1L94,7218
|
|
106
|
+
scc_cli/utils/fuzzy.py,sha256=kbqa-V1NZV8qU150MSU5sVct4jvl9Dd13WpXPhen4fw,3717
|
|
107
|
+
scc_cli/utils/locks.py,sha256=Q08ye0QZlD7agUqT2_Sk8uusuQQ2DM0adJT2bDND_WQ,2901
|
|
108
|
+
scc_cli/utils/ttl.py,sha256=qmoG_gy0i8zbAt035otiWRPBIQ0XHRYhOn26oUW6MvI,14117
|
|
109
|
+
scc_cli-1.4.1.dist-info/METADATA,sha256=qfe6XJGzX08YcFkFxDBC2IjxT67SlIrvy3dMk50EWyA,12015
|
|
110
|
+
scc_cli-1.4.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
111
|
+
scc_cli-1.4.1.dist-info/entry_points.txt,sha256=9J2SwHzS8UJI_CWb331bSoNMwGYFGvy3CYwWuxIAhxM,41
|
|
112
|
+
scc_cli-1.4.1.dist-info/licenses/LICENSE,sha256=VPkRI_D_65MtQecIM3Wgkw_SYdkGABksxbaTilghVxE,1068
|
|
113
|
+
scc_cli-1.4.1.dist-info/RECORD,,
|
|
@@ -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.
|