claude-toolstack-cli 1.0.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.
Files changed (48) hide show
  1. claude_toolstack_cli-1.0.0.dist-info/METADATA +354 -0
  2. claude_toolstack_cli-1.0.0.dist-info/RECORD +48 -0
  3. claude_toolstack_cli-1.0.0.dist-info/WHEEL +5 -0
  4. claude_toolstack_cli-1.0.0.dist-info/entry_points.txt +2 -0
  5. claude_toolstack_cli-1.0.0.dist-info/licenses/LICENSE +21 -0
  6. claude_toolstack_cli-1.0.0.dist-info/top_level.txt +1 -0
  7. cts/__init__.py +3 -0
  8. cts/__main__.py +5 -0
  9. cts/autopilot.py +633 -0
  10. cts/bundle.py +958 -0
  11. cts/cli.py +2858 -0
  12. cts/confidence.py +218 -0
  13. cts/config.py +19 -0
  14. cts/corpus/__init__.py +139 -0
  15. cts/corpus/apply.py +305 -0
  16. cts/corpus/archive.py +309 -0
  17. cts/corpus/baseline.py +294 -0
  18. cts/corpus/evaluate.py +409 -0
  19. cts/corpus/experiment_eval.py +585 -0
  20. cts/corpus/experiment_schema.py +380 -0
  21. cts/corpus/extract.py +353 -0
  22. cts/corpus/load.py +44 -0
  23. cts/corpus/model.py +114 -0
  24. cts/corpus/patch.py +467 -0
  25. cts/corpus/registry.py +420 -0
  26. cts/corpus/report.py +745 -0
  27. cts/corpus/scan.py +87 -0
  28. cts/corpus/store.py +63 -0
  29. cts/corpus/trends.py +478 -0
  30. cts/corpus/tuning_schema.py +313 -0
  31. cts/corpus/variants.py +335 -0
  32. cts/ctags.py +133 -0
  33. cts/diff_context.py +92 -0
  34. cts/errors.py +109 -0
  35. cts/http.py +89 -0
  36. cts/ranking.py +466 -0
  37. cts/render.py +388 -0
  38. cts/schema.py +96 -0
  39. cts/semantic/__init__.py +47 -0
  40. cts/semantic/candidates.py +150 -0
  41. cts/semantic/chunker.py +184 -0
  42. cts/semantic/config.py +120 -0
  43. cts/semantic/embedder.py +151 -0
  44. cts/semantic/indexer.py +159 -0
  45. cts/semantic/search.py +252 -0
  46. cts/semantic/store.py +330 -0
  47. cts/sidecar.py +431 -0
  48. cts/structural.py +305 -0
@@ -0,0 +1,354 @@
1
+ Metadata-Version: 2.4
2
+ Name: claude-toolstack-cli
3
+ Version: 1.0.0
4
+ Summary: CLI client for Claude Toolstack gateway
5
+ License-Expression: MIT
6
+ Requires-Python: >=3.10
7
+ Description-Content-Type: text/markdown
8
+ License-File: LICENSE
9
+ Provides-Extra: semantic
10
+ Requires-Dist: numpy>=1.24; extra == "semantic"
11
+ Requires-Dist: sentence-transformers>=2.2; extra == "semantic"
12
+ Dynamic: license-file
13
+
14
+ <p align="center">
15
+ <a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.es.md">Español</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
16
+ </p>
17
+
18
+ <p align="center">
19
+ <img src="https://raw.githubusercontent.com/mcp-tool-shop-org/brand/main/logos/claude-toolstack/readme.png" width="400" alt="Claude ToolStack">
20
+ </p>
21
+
22
+ <p align="center">
23
+ Docker + Claude Code workstation config for 64-GB Linux hosts.<br>
24
+ cgroup v2 slices &bull; Compose tool farm &bull; FastAPI gateway &bull; no thrash.
25
+ </p>
26
+
27
+ <p align="center">
28
+ <a href="https://pypi.org/project/claude-toolstack-cli/"><img src="https://img.shields.io/pypi/v/claude-toolstack-cli" alt="PyPI"></a>
29
+ <a href="https://github.com/mcp-tool-shop-org/claude-toolstack/actions/workflows/ci.yml"><img src="https://github.com/mcp-tool-shop-org/claude-toolstack/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
30
+ <a href="https://codecov.io/gh/mcp-tool-shop-org/claude-toolstack"><img src="https://codecov.io/gh/mcp-tool-shop-org/claude-toolstack/graph/badge.svg" alt="Coverage"></a>
31
+ <a href="https://github.com/mcp-tool-shop-org/claude-toolstack/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT License"></a>
32
+ <a href="https://mcp-tool-shop-org.github.io/claude-toolstack/"><img src="https://img.shields.io/badge/Landing_Page-live-blue" alt="Landing Page"></a>
33
+ </p>
34
+
35
+ ---
36
+
37
+ ## What This Is
38
+
39
+ A ready-to-deploy stack that keeps Claude Code productive on large, multi-language repositories without thrashing a 64-GB Linux workstation.
40
+
41
+ **Core idea:** don't load the repo into Claude. Keep durable indexes near the code in resource-governed containers. Stream only the smallest necessary evidence back to Claude through a thin HTTP gateway.
42
+
43
+ ## Architecture
44
+
45
+ ```
46
+ 64-GB Linux host (Ubuntu 22.04 / Fedora 38)
47
+ ├── systemd slices (cgroup v2 governance)
48
+ │ ├── claude-gw.slice — gateway + socket proxy
49
+ │ ├── claude-index.slice — indexing + search
50
+ │ ├── claude-lsp.slice — language servers
51
+ │ ├── claude-build.slice — build/test runners
52
+ │ └── claude-vector.slice — vector DB (optional)
53
+ ├── Docker Compose stack
54
+ │ ├── gateway — FastAPI, 6 endpoints, 127.0.0.1:8088
55
+ │ ├── dockerproxy — socket proxy (exec-only model)
56
+ │ ├── toolstack — cts CLI inside the stack (cli profile)
57
+ │ ├── ctags — universal-ctags indexer
58
+ │ └── build — generic build runner
59
+ └── Claude Code / Claude Desktop
60
+ └── calls gateway → gets bounded evidence
61
+ ```
62
+
63
+ ## Quick Start
64
+
65
+ ### 1. Bootstrap the host
66
+
67
+ ```bash
68
+ sudo ./scripts/bootstrap.sh
69
+ ```
70
+
71
+ This installs:
72
+ - zram swap (Ubuntu) or verifies swap-on-zram (Fedora)
73
+ - Sysctl tuning (swappiness, inotify watches)
74
+ - systemd slices with MemoryHigh/Max governance
75
+ - Docker daemon config (local log driver)
76
+ - claude-toolstack.service (boot management)
77
+
78
+ ### 2. Configure
79
+
80
+ ```bash
81
+ cp .env.example .env
82
+ # Edit .env: set API_KEY, ALLOWED_REPOS, etc.
83
+ ```
84
+
85
+ ### 3. Clone repos
86
+
87
+ ```bash
88
+ # Repos go under /workspace/repos/<org>/<repo>
89
+ git clone https://github.com/myorg/myrepo /workspace/repos/myorg/myrepo
90
+ ```
91
+
92
+ ### 4. Start the stack
93
+
94
+ ```bash
95
+ docker compose up -d --build
96
+ ```
97
+
98
+ ### 5. Verify
99
+
100
+ ```bash
101
+ ./scripts/smoke-test.sh "$API_KEY" myorg/myrepo
102
+ ./scripts/health.sh
103
+ ```
104
+
105
+ ## Gateway API
106
+
107
+ All endpoints require `x-api-key` header. Gateway binds to `127.0.0.1:8088` only.
108
+
109
+ | Method | Endpoint | Purpose |
110
+ |--------|----------|---------|
111
+ | `GET` | `/v1/status` | Health + config |
112
+ | `POST` | `/v1/search/rg` | Ripgrep with guardrails |
113
+ | `POST` | `/v1/file/slice` | Fetch file range (max 800 lines) |
114
+ | `POST` | `/v1/index/ctags` | Build ctags index (async) |
115
+ | `POST` | `/v1/symbol/ctags` | Query symbol definitions |
116
+ | `POST` | `/v1/run/job` | Run allowlisted test/build/lint |
117
+ | `GET` | `/v1/metrics` | Prometheus-format counters |
118
+
119
+ All responses include `X-Request-ID` for end-to-end correlation. Clients can send their own via the `X-Request-ID` header.
120
+
121
+ ## CLI (`cts`)
122
+
123
+ A zero-dependency Python CLI that wraps all gateway endpoints.
124
+
125
+ ### Install
126
+
127
+ ```bash
128
+ pip install -e .
129
+ # or: pipx install -e .
130
+ ```
131
+
132
+ ### Configure
133
+
134
+ ```bash
135
+ export CLAUDE_TOOLSTACK_API_KEY=<your-key>
136
+ export CLAUDE_TOOLSTACK_URL=http://127.0.0.1:8088 # default
137
+ ```
138
+
139
+ ### Usage
140
+
141
+ ```bash
142
+ # Gateway health
143
+ cts status
144
+
145
+ # Search (text output)
146
+ cts search "PaymentService" --repo myorg/myrepo --max 50
147
+
148
+ # Search (evidence bundle for Claude — auto-fetches context slices)
149
+ cts search "PaymentService" --repo myorg/myrepo --format claude
150
+
151
+ # File slice
152
+ cts slice --repo myorg/myrepo src/main.ts:120-180
153
+
154
+ # Symbol lookup
155
+ cts symbol PaymentService --repo myorg/myrepo
156
+
157
+ # Run tests
158
+ cts job test --repo myorg/myrepo --preset node
159
+
160
+ # Stack diagnostics
161
+ cts doctor
162
+ cts doctor --format json
163
+
164
+ # Performance knobs
165
+ cts perf
166
+ cts perf --format json
167
+
168
+ # Semantic search (default-on when store exists)
169
+ cts semantic index --repo myorg/myrepo --root /workspace/repos/myorg/myrepo
170
+ cts semantic search "what does auth do?" --repo myorg/myrepo
171
+
172
+ # All commands support: --format json|text|claude --request-id <id> --debug
173
+ ```
174
+
175
+ ### Evidence Bundles v2 (`--format claude`)
176
+
177
+ The `--claude` output mode produces compact, paste-ready evidence packs with structured v2 headers. Four bundle modes are available:
178
+
179
+ | Mode | Flag | What it does |
180
+ |------|------|-------------|
181
+ | `default` | `--bundle default` | Search + ranked matches + context slices |
182
+ | `error` | `--bundle error` | Stack-trace-aware: extracts files from trace, boosts in ranking |
183
+ | `symbol` | `--bundle symbol` | Definitions + call sites from search |
184
+ | `change` | `--bundle change` | Git diff + hunk context slices |
185
+
186
+ ```bash
187
+ # Default bundle (search + slices)
188
+ cts search "PaymentService" --repo myorg/myrepo --format claude
189
+
190
+ # Error bundle (pass stack trace for trace-aware ranking)
191
+ cts search "ConnectionError" --repo myorg/myrepo --format claude \
192
+ --bundle error --error-text "$(cat /tmp/traceback.txt)"
193
+
194
+ # Symbol bundle (definitions + call sites)
195
+ cts symbol PaymentService --repo myorg/myrepo --format claude --bundle symbol
196
+
197
+ # Path preferences (boost src, demote vendor)
198
+ cts search "handler" --repo myorg/myrepo --format claude \
199
+ --prefer-paths src,core --avoid-paths vendor,test
200
+
201
+ # Git recency scoring (requires local repo access)
202
+ cts search "handler" --repo myorg/myrepo --format claude \
203
+ --repo-root /workspace/repos/myorg/myrepo
204
+ ```
205
+
206
+ Tuning: `--evidence-files 5` (files to slice), `--context 30` (lines around hit).
207
+
208
+ ### curl examples
209
+
210
+ ```bash
211
+ # Search
212
+ curl -sS -H "x-api-key: $KEY" -H "content-type: application/json" \
213
+ -d '{"repo":"myorg/myrepo","query":"PaymentService","max_matches":50}' \
214
+ http://127.0.0.1:8088/v1/search/rg | jq
215
+
216
+ # File slice
217
+ curl -sS -H "x-api-key: $KEY" -H "content-type: application/json" \
218
+ -d '{"repo":"myorg/myrepo","path":"src/main.ts","start":120,"end":160}' \
219
+ http://127.0.0.1:8088/v1/file/slice | jq
220
+
221
+ # Run tests
222
+ curl -sS -H "x-api-key: $KEY" -H "content-type: application/json" \
223
+ -d '{"repo":"myorg/myrepo","job":"test","preset":"node"}' \
224
+ http://127.0.0.1:8088/v1/run/job | jq
225
+ ```
226
+
227
+ ## Resource Governance
228
+
229
+ systemd slices enforce MemoryHigh (throttle) and MemoryMax (hard cap) per service group:
230
+
231
+ | Slice | MemoryHigh | MemoryMax | Purpose |
232
+ |-------|-----------|-----------|---------|
233
+ | `claude-gw` | 2 GB | 4 GB | Gateway + socket proxy |
234
+ | `claude-index` | 6 GB | 10 GB | Indexers, search |
235
+ | `claude-lsp` | 8 GB | 16 GB | Language servers |
236
+ | `claude-build` | 10 GB | 18 GB | Build/test runners |
237
+ | `claude-vector` | 8 GB | 16 GB | Vector DB (optional) |
238
+
239
+ These are medium-repo defaults. Edit the slice files in `systemd/` for your workload.
240
+
241
+ OS + headroom: 10-14 GB always reserved for filesystem cache, desktop, SSH.
242
+
243
+ ## Security
244
+
245
+ ### Threat Model
246
+
247
+ **What we protect against:**
248
+ - Gateway abuse (unauthorized access, resource exhaustion)
249
+ - Path traversal (escaping repo root via `../` or symlinks)
250
+ - Docker socket escalation (raw socket = root-equivalent)
251
+ - Output flooding (unbounded search/build results consuming memory)
252
+
253
+ **Security layers:**
254
+
255
+ | Layer | Mechanism |
256
+ |-------|-----------|
257
+ | Auth | API key (`x-api-key` header), configurable |
258
+ | Network | Gateway binds `127.0.0.1` only |
259
+ | Docker | Socket proxy (Tecnativa), only `CONTAINERS+EXEC` |
260
+ | Repos | Allowlist/denylist with glob support |
261
+ | Paths | `realpath` jail, null byte rejection |
262
+ | Commands | Preset allowlist only, no arbitrary exec |
263
+ | Output | 512 KB cap, line truncation |
264
+ | Rate limit | Token bucket per key+ip |
265
+ | Audit | JSONL log, key hashed, rotated |
266
+ | Containers | Named allowlist, no wildcards |
267
+ | Resources | cgroup v2 slices, per-container mem/cpu limits |
268
+
269
+ ### What the gateway cannot do
270
+
271
+ - Execute arbitrary commands (preset allowlist only)
272
+ - Access repos outside `/workspace/repos` (path jail)
273
+ - Touch Docker images, volumes, networks, or system (proxy blocks)
274
+ - Return unbounded output (512 KB hard cap)
275
+ - Accept connections from non-localhost (bind address)
276
+ - Collect or send telemetry — **no telemetry, no phone-home, no analytics**
277
+
278
+ ## Directory Structure
279
+
280
+ ```
281
+ claude-toolstack/
282
+ ├── compose.yaml # Docker Compose stack (exec-only model)
283
+ ├── .env.example # Configuration template
284
+ ├── pyproject.toml # CLI packaging (cts)
285
+ ├── repos.yaml # Declarative repo registry
286
+ ├── cts/ # CLI client (zero deps for core)
287
+ │ ├── cli.py # argparse commands (doctor, perf, search, ...)
288
+ │ ├── errors.py # Structured error shape (CtsError)
289
+ │ ├── http.py # gateway HTTP client
290
+ │ ├── render.py # json/text/claude renderers (v1+v2)
291
+ │ ├── bundle.py # v2 bundle orchestrator (4 modes)
292
+ │ ├── ranking.py # path scoring, trace extraction, recency
293
+ │ ├── config.py # env + defaults
294
+ │ └── semantic/ # Embedding-based search (optional dep)
295
+ │ ├── store.py # SQLite vector store
296
+ │ ├── search.py # cosine similarity + narrowing
297
+ │ ├── candidates.py # candidate selection strategies
298
+ │ └── config.py # semantic knobs
299
+ ├── tests/ # 890+ unit tests (pytest)
300
+ ├── gateway/
301
+ │ ├── main.py # FastAPI gateway
302
+ │ ├── Dockerfile # python:3.12-slim + ripgrep + tini
303
+ │ └── requirements.txt # 6 dependencies
304
+ ├── nginx/
305
+ │ └── gateway.conf # Reverse proxy (optional)
306
+ ├── systemd/
307
+ │ ├── claude-gw.slice # gateway + dockerproxy (2G/4G)
308
+ │ ├── claude-index.slice # indexers + search (6G/10G)
309
+ │ ├── claude-lsp.slice # language servers (8G/16G)
310
+ │ ├── claude-build.slice # build/test runners (10G/18G)
311
+ │ ├── claude-vector.slice
312
+ │ ├── claude-toolstack.service
313
+ │ └── ... # zram, sysctl, daemon.json
314
+ ├── scripts/
315
+ │ ├── bootstrap.sh # Host setup (run once)
316
+ │ ├── verify.sh # All quality gates in one command
317
+ │ ├── cts-docker # Run cts inside Docker stack
318
+ │ ├── smoke-test.sh # Validation suite
319
+ │ └── ... # health, add-repo, policy-lint, triage
320
+ └── docs/
321
+ └── tuning.md # Slice tuning guide
322
+ ```
323
+
324
+ ## Claude Code Integration
325
+
326
+ ### Local Linux
327
+
328
+ Claude Code runs directly on the host. Configure gateway as an MCP server or call it via HTTP from task scripts.
329
+
330
+ ### Remote (macOS/Windows)
331
+
332
+ Use Claude Desktop's Code tab with an SSH environment pointing to your Linux host. The tool farm runs on the host; the GUI stays on your laptop.
333
+
334
+ ## Tuning
335
+
336
+ See [docs/tuning.md](docs/tuning.md) for:
337
+ - Slice sizing by repo size (small/medium/large)
338
+ - PSI monitoring and thrash detection
339
+ - Adding language servers (clangd, rust-analyzer, tsserver)
340
+ - Vector store options (SQLite+FAISS, Weaviate, Milvus)
341
+ - Job preset customization
342
+
343
+ ## No-Thrash Validation
344
+
345
+ After deployment, confirm:
346
+
347
+ 1. **PSI full near zero**: `watch -n 1 'cat /proc/pressure/memory'`
348
+ 2. **Containers hit MemoryHigh before Max**: check slice status
349
+ 3. **SSH stays responsive**: during indexing and builds
350
+ 4. **Containment works**: shrink one service's limit, run heavy task, confirm only that container dies
351
+
352
+ ---
353
+
354
+ Built by <a href="https://mcp-tool-shop.github.io/">MCP Tool Shop</a>
@@ -0,0 +1,48 @@
1
+ claude_toolstack_cli-1.0.0.dist-info/licenses/LICENSE,sha256=Nn5RQeT1iE5XkcQCHzOp-qlYhApd7PROGyc6h6rRxFk,1070
2
+ cts/__init__.py,sha256=GCqJ3UPKTraIwSad0uav4IoxKVC_vFLurNhJlpzZPDA,66
3
+ cts/__main__.py,sha256=HZ4lHY34h9rwTwkiLtHEE9p_uT1uywdCM1jPO3jHWeg,68
4
+ cts/autopilot.py,sha256=1_7HOEqGR_NzZwvKwzx0TQuZ1R6Ye3iRTl6-oXIVX1E,22426
5
+ cts/bundle.py,sha256=FuUCO2kQVkVxl3X7ma-cp23s3jLFHn4v5e6aPts0x_Q,30046
6
+ cts/cli.py,sha256=-ohmSIqujgzWL8ak59Pvp6E8QMLytmDa4OuPzqsGiek,85664
7
+ cts/confidence.py,sha256=GoIc04Mu5GTwAOdEPMnOwQyis_ej6L-inYrugxNzp3U,6896
8
+ cts/config.py,sha256=C9t4unA50ngSb_5efFLbU4N9-caJtMsFl4lUJw0aTQs,458
9
+ cts/ctags.py,sha256=hywk74AwBPckMLpIOb1qJtAEqrs26yEhhpBmWs1PNJU,3727
10
+ cts/diff_context.py,sha256=h4XRVPQcd1Grn7lNbwrBQDhM8TO_sy0eGMq0JQPAqro,2857
11
+ cts/errors.py,sha256=qKcQ53sUITV6wJp7PfX8GRErin8A4JFnjU_jetSREuk,3360
12
+ cts/http.py,sha256=XWYx2vox1KffMa43khVNVxFhy9PuMjf28cJNwKjBzvc,2635
13
+ cts/ranking.py,sha256=cKQNsiK7LiDO3fFUNZslQfH6sJBQLJ4PgNPdkSJBSHY,15116
14
+ cts/render.py,sha256=bU9fRG8Hy36WO7vW7IYz8MITOkuy6ImMm-fDUD1Z3To,12856
15
+ cts/schema.py,sha256=MLEwy3zawxB-d5Eb3iwfZXxeIgxBEg1c6y75RDL7KJQ,3026
16
+ cts/sidecar.py,sha256=qn05Ohqnm2AZdOv7eRscJba6Yi5a_Pf2nSOH7-xfO9I,13215
17
+ cts/structural.py,sha256=8ar0YAEEBguHV0mDkGFkFBbNu7bYBXNJtjDeXNqQ0cM,9323
18
+ cts/corpus/__init__.py,sha256=uHjXBLLQythYL4ecjL-nJ0FRvcYjYKMaTnyHI-e1dH4,3396
19
+ cts/corpus/apply.py,sha256=XpO-1vV-tRntDR4Ofdw38XhJqlJvqKu32EBnZIiaW1E,8300
20
+ cts/corpus/archive.py,sha256=yorK9Fz5Lz8GSeXthpMFPOb_GqGYI4WlJl4LZQQgH2Q,10243
21
+ cts/corpus/baseline.py,sha256=UfYTSFRG7yn1p2Z8jmZxubwpJ0Jk14NlprBDfqmSfbU,9300
22
+ cts/corpus/evaluate.py,sha256=T9mRRFhc2uUQQIpa_AUjS-TWGEn3osaE3xXxkTxW30g,12448
23
+ cts/corpus/experiment_eval.py,sha256=kIqfbObPjnTmajZDbaq3ANsUNdP0r5-31KR46wduvOI,19114
24
+ cts/corpus/experiment_schema.py,sha256=CyENfPY1CnOGYsxaDEYQfu-RBjDXZRl9oR_G9K0b8nY,11563
25
+ cts/corpus/extract.py,sha256=vICtB005ujhEAujQay1nKqJu7S5mXy04o2lCjzIba7k,11782
26
+ cts/corpus/load.py,sha256=PA61299IHPCnaMZetbcQRW6X76fyrStZc2ZmycAWUy0,1275
27
+ cts/corpus/model.py,sha256=TKxvy08ha2Rf9WoK7k8GQ3GgHdmWLslQs1aeZ7arQIk,4056
28
+ cts/corpus/patch.py,sha256=7ko-dF66yc67AqSHSOOHacKlcoR9QPI_fli1eSgjZEo,14629
29
+ cts/corpus/registry.py,sha256=PcER8wQNMEvJz7VzFK7sqrH1-6ZMq3bIHhryXp7N_TM,12934
30
+ cts/corpus/report.py,sha256=AkQwjV4kWncnIG53M0uDIomqD-T2Vf4CwfLfp6XfKck,25264
31
+ cts/corpus/scan.py,sha256=2P3Jkyip9NyDepjbwFdZhtDcVLUppBHcq3HVGQFKemg,2180
32
+ cts/corpus/store.py,sha256=IMA8M4Ubxzi7gAwG5zAAThG3z5PF6HZpUmkmtvEtB9U,1628
33
+ cts/corpus/trends.py,sha256=uE1G3AyqYW-YQfpy7pC0YdXvcVZ-_jkM3IWk4oUPAYU,15167
34
+ cts/corpus/tuning_schema.py,sha256=JBpQvAYTxjbd_mIcjDl0EZ-SLo3Cvj4tjP2myzOmN3E,11424
35
+ cts/corpus/variants.py,sha256=4zLLvPg-B0nsGON0yQquQnkC4xT4pki32MH_8BM0SDs,10978
36
+ cts/semantic/__init__.py,sha256=4emR8Nbtaftkxh1766h7CcDF2d1xq_owsOGPJE-BOhg,1192
37
+ cts/semantic/candidates.py,sha256=rJPvz2_WeGOW6Cxc0AkHyz93PPVOlWG0YRq_3ADLw3w,4669
38
+ cts/semantic/chunker.py,sha256=zzD4oDhruP5NWYdL6OmCLygMAKMiZ7vZ1eJxOxEpWJ8,4916
39
+ cts/semantic/config.py,sha256=lq-7DqCNkD6iGyceLdlQ5nGqveFVaSmUfdHmtISc6Hw,3787
40
+ cts/semantic/embedder.py,sha256=OMMzYNpp1gc0MKGDknEbFFTE4p7pSdvjaYAp2WbjSUU,4244
41
+ cts/semantic/indexer.py,sha256=xC6Ikb4kqNCSby2KWHmnQtfdnTkd9LrzGuINag-oMtY,4851
42
+ cts/semantic/search.py,sha256=x8aNTazqTdb4U_MRgQc3Z44KF1BDqbBoIdtfUPiJeOc,7292
43
+ cts/semantic/store.py,sha256=vUmwNQYO8XUomMFjmDZ_gAPjibMGlsGQJPLvoDf62PY,11447
44
+ claude_toolstack_cli-1.0.0.dist-info/METADATA,sha256=KW3l8EhygkOmLqOxI-P80Se4o2-7bfVQtbllBNSQ3TQ,12982
45
+ claude_toolstack_cli-1.0.0.dist-info/WHEEL,sha256=YCfwYGOYMi5Jhw2fU4yNgwErybb2IX5PEwBKV4ZbdBo,91
46
+ claude_toolstack_cli-1.0.0.dist-info/entry_points.txt,sha256=YxPfSezwExk8iQSvoVlxnvx1t-_ii0qebTLGN5Lproo,37
47
+ claude_toolstack_cli-1.0.0.dist-info/top_level.txt,sha256=6--EY7lQD9tGcXclwS9ak-nTbzpVqTfhpSBBjCudeIk,4
48
+ claude_toolstack_cli-1.0.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (82.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ cts = cts.cli:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 mcp-tool-shop
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.
cts/__init__.py ADDED
@@ -0,0 +1,3 @@
1
+ """cts — Claude Toolstack CLI client."""
2
+
3
+ __version__ = "1.0.0"
cts/__main__.py ADDED
@@ -0,0 +1,5 @@
1
+ """Entry point: python -m cts."""
2
+
3
+ from cts.cli import main
4
+
5
+ main()