sourcecode 1.35.34__tar.gz → 1.35.35__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.
- {sourcecode-1.35.34 → sourcecode-1.35.35}/PKG-INFO +36 -7
- {sourcecode-1.35.34 → sourcecode-1.35.35}/README.md +35 -6
- {sourcecode-1.35.34 → sourcecode-1.35.35}/pyproject.toml +1 -1
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/__init__.py +1 -1
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/cli.py +239 -355
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/explain.py +3 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/license.py +122 -26
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/prepare_context.py +8 -1
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/serializer.py +9 -7
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/spring_findings.py +1 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/.github/workflows/build-windows.yml +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/.gitignore +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/.ruff.toml +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/CHANGELOG.md +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/CONTRIBUTING.md +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/LICENSE +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/SECURITY.md +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/raw +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/adaptive_scanner.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/architecture_analyzer.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/architecture_summary.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/ast_extractor.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/cache.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/canonical_ir.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/cir_graphs.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/classifier.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/code_notes_analyzer.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/confidence_analyzer.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/context_scorer.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/context_summarizer.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/contract_model.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/contract_pipeline.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/coverage_parser.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/dependency_analyzer.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/detectors/__init__.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/detectors/base.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/detectors/csproj_parser.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/detectors/dart.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/detectors/dotnet.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/detectors/elixir.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/detectors/go.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/detectors/heuristic.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/detectors/hybrid.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/detectors/java.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/detectors/jvm_ext.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/detectors/nodejs.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/detectors/parsers.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/detectors/php.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/detectors/project.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/detectors/python.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/detectors/ruby.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/detectors/rust.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/detectors/systems.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/detectors/terraform.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/detectors/tooling.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/doc_analyzer.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/entrypoint_classifier.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/env_analyzer.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/error_schema.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/file_chunker.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/file_classifier.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/flow_analyzer.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/fqn_utils.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/git_analyzer.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/graph_analyzer.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/mcp/__init__.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/mcp/onboarding/__init__.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/mcp/onboarding/applier.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/mcp/onboarding/backup.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/mcp/onboarding/detector.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/mcp/onboarding/planner.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/mcp/orchestrator.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/mcp/registry.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/mcp/runner.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/mcp/server.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/mcp_nudge.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/metrics_analyzer.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/migrate_check.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/output_budget.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/path_filters.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/pr_comment_renderer.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/pr_impact.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/progress.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/ranking_engine.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/redactor.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/relevance_scorer.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/rename_refactor.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/repo_classifier.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/repository_ir.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/ris.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/runtime_classifier.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/scanner.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/schema.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/semantic_analyzer.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/spring_event_topology.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/spring_impact.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/spring_model.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/spring_security_audit.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/spring_semantic.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/spring_tx_analyzer.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/summarizer.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/telemetry/__init__.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/telemetry/config.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/telemetry/consent.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/telemetry/events.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/telemetry/filters.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/telemetry/transport.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/tree_utils.py +0 -0
- {sourcecode-1.35.34 → sourcecode-1.35.35}/src/sourcecode/workspace.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sourcecode
|
|
3
|
-
Version: 1.35.
|
|
3
|
+
Version: 1.35.35
|
|
4
4
|
Summary: Persistent structural context and ultra-fast repeated analysis for AI coding agents
|
|
5
5
|
License-File: LICENSE
|
|
6
6
|
Keywords: agents,ai,codebase,context,developer-tools,llm
|
|
@@ -40,7 +40,7 @@ Description-Content-Type: text/markdown
|
|
|
40
40
|
|
|
41
41
|
**Persistent structural context and ultra-fast repeated analysis for AI coding agents.**
|
|
42
42
|
|
|
43
|
-

|
|
44
44
|

|
|
45
45
|
|
|
46
46
|
---
|
|
@@ -114,7 +114,7 @@ pipx install sourcecode
|
|
|
114
114
|
|
|
115
115
|
```bash
|
|
116
116
|
sourcecode version
|
|
117
|
-
# sourcecode 1.35.
|
|
117
|
+
# sourcecode 1.35.35
|
|
118
118
|
```
|
|
119
119
|
|
|
120
120
|
---
|
|
@@ -290,6 +290,35 @@ Specifically:
|
|
|
290
290
|
|
|
291
291
|
---
|
|
292
292
|
|
|
293
|
+
## Pricing
|
|
294
|
+
|
|
295
|
+
Two tiers. **Gating is by repo size and automation — never by command.** Every
|
|
296
|
+
command runs at full power on Free for small and mid-size repos. You upgrade
|
|
297
|
+
when the work gets bigger or automated.
|
|
298
|
+
|
|
299
|
+
| | **Free** — €0 | **Pro** — €19/mo · €190/yr per dev |
|
|
300
|
+
|---|---|---|
|
|
301
|
+
| Repo size | ≤ 500 Java source files | **> 500 Java files** (enterprise monoliths) |
|
|
302
|
+
| Commands | All of them, full output | Same commands, unlocked at scale |
|
|
303
|
+
| `impact` / `fix-bug` / `review-pr` / `modernize` | ✅ full on small repos | ✅ full on large repos (Free gets a capped preview) |
|
|
304
|
+
| `--full`, git-churn ranking, uncapped graph/semantic | ✅ on small repos | ✅ on large repos |
|
|
305
|
+
| `prepare-context delta` | 30 free runs/repo | unlimited — CI/CD automation |
|
|
306
|
+
| `prepare-context generate-tests` | small repos | large repos |
|
|
307
|
+
| MCP local server (`mcp serve`) | ✅ | ✅ |
|
|
308
|
+
| Offline, no data egress, no account | ✅ | ✅ |
|
|
309
|
+
|
|
310
|
+
**Non-Java repos are free at any size** — the size limit counts Java source
|
|
311
|
+
files only, by design. sourcecode monetises enterprise Java monoliths.
|
|
312
|
+
|
|
313
|
+
```bash
|
|
314
|
+
sourcecode auth login # browser device-code auth
|
|
315
|
+
sourcecode activate <key> # or activate a license key directly
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
Full breakdown: [docs/PRODUCT_TIERS.md](docs/PRODUCT_TIERS.md).
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
293
322
|
## Command reference
|
|
294
323
|
|
|
295
324
|
### `--compact` and `--agent`
|
|
@@ -301,7 +330,7 @@ Core flags. Feed directly to AI agents as first-message context.
|
|
|
301
330
|
| `--compact` | High-signal summary: stacks, entry points, dependencies, confidence, gaps | ~2,500–4,000 |
|
|
302
331
|
| `--agent` | Structured JSON: identity, entry points, architecture, event flows | ~4,500–5,500 |
|
|
303
332
|
|
|
304
|
-
### `impact` — blast-radius analysis
|
|
333
|
+
### `impact` — blast-radius analysis [free ≤500 Java files · Pro above]
|
|
305
334
|
|
|
306
335
|
```bash
|
|
307
336
|
sourcecode impact ClassName /path/to/repo
|
|
@@ -476,7 +505,7 @@ sourcecode onboard /path/to/repo
|
|
|
476
505
|
|
|
477
506
|
Entry points, architecture summary, key files, confidence level, and gaps. Designed to be injected as agent context at the start of a session.
|
|
478
507
|
|
|
479
|
-
### `review-pr` —
|
|
508
|
+
### `review-pr` — PR review context [free ≤500 Java files · Pro above]
|
|
480
509
|
|
|
481
510
|
```bash
|
|
482
511
|
sourcecode review-pr /path/to/repo --since main
|
|
@@ -485,7 +514,7 @@ sourcecode review-pr /path/to/repo --since HEAD~3
|
|
|
485
514
|
|
|
486
515
|
Changed files, risk ranking, test coverage gaps, affected modules, and blast radius of changed classes. Returns a `ci_decision` field for CI/CD integration.
|
|
487
516
|
|
|
488
|
-
### `fix-bug` —
|
|
517
|
+
### `fix-bug` — Bug triage context [free ≤500 Java files · Pro above]
|
|
489
518
|
|
|
490
519
|
```bash
|
|
491
520
|
sourcecode fix-bug /path/to/repo --symptom "NullPointerException in checkout"
|
|
@@ -493,7 +522,7 @@ sourcecode fix-bug /path/to/repo --symptom "NullPointerException in checkout"
|
|
|
493
522
|
|
|
494
523
|
Risk-ranked file list correlated to the symptom: keyword extraction, path matching, content matching, git commit correlation.
|
|
495
524
|
|
|
496
|
-
### `modernize` — [Pro]
|
|
525
|
+
### `modernize` — Modernization planning [free ≤500 Java files · Pro above]
|
|
497
526
|
|
|
498
527
|
```bash
|
|
499
528
|
sourcecode modernize /path/to/repo
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
**Persistent structural context and ultra-fast repeated analysis for AI coding agents.**
|
|
4
4
|
|
|
5
|
-

|
|
6
6
|

|
|
7
7
|
|
|
8
8
|
---
|
|
@@ -76,7 +76,7 @@ pipx install sourcecode
|
|
|
76
76
|
|
|
77
77
|
```bash
|
|
78
78
|
sourcecode version
|
|
79
|
-
# sourcecode 1.35.
|
|
79
|
+
# sourcecode 1.35.35
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
---
|
|
@@ -252,6 +252,35 @@ Specifically:
|
|
|
252
252
|
|
|
253
253
|
---
|
|
254
254
|
|
|
255
|
+
## Pricing
|
|
256
|
+
|
|
257
|
+
Two tiers. **Gating is by repo size and automation — never by command.** Every
|
|
258
|
+
command runs at full power on Free for small and mid-size repos. You upgrade
|
|
259
|
+
when the work gets bigger or automated.
|
|
260
|
+
|
|
261
|
+
| | **Free** — €0 | **Pro** — €19/mo · €190/yr per dev |
|
|
262
|
+
|---|---|---|
|
|
263
|
+
| Repo size | ≤ 500 Java source files | **> 500 Java files** (enterprise monoliths) |
|
|
264
|
+
| Commands | All of them, full output | Same commands, unlocked at scale |
|
|
265
|
+
| `impact` / `fix-bug` / `review-pr` / `modernize` | ✅ full on small repos | ✅ full on large repos (Free gets a capped preview) |
|
|
266
|
+
| `--full`, git-churn ranking, uncapped graph/semantic | ✅ on small repos | ✅ on large repos |
|
|
267
|
+
| `prepare-context delta` | 30 free runs/repo | unlimited — CI/CD automation |
|
|
268
|
+
| `prepare-context generate-tests` | small repos | large repos |
|
|
269
|
+
| MCP local server (`mcp serve`) | ✅ | ✅ |
|
|
270
|
+
| Offline, no data egress, no account | ✅ | ✅ |
|
|
271
|
+
|
|
272
|
+
**Non-Java repos are free at any size** — the size limit counts Java source
|
|
273
|
+
files only, by design. sourcecode monetises enterprise Java monoliths.
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
sourcecode auth login # browser device-code auth
|
|
277
|
+
sourcecode activate <key> # or activate a license key directly
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
Full breakdown: [docs/PRODUCT_TIERS.md](docs/PRODUCT_TIERS.md).
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
|
|
255
284
|
## Command reference
|
|
256
285
|
|
|
257
286
|
### `--compact` and `--agent`
|
|
@@ -263,7 +292,7 @@ Core flags. Feed directly to AI agents as first-message context.
|
|
|
263
292
|
| `--compact` | High-signal summary: stacks, entry points, dependencies, confidence, gaps | ~2,500–4,000 |
|
|
264
293
|
| `--agent` | Structured JSON: identity, entry points, architecture, event flows | ~4,500–5,500 |
|
|
265
294
|
|
|
266
|
-
### `impact` — blast-radius analysis
|
|
295
|
+
### `impact` — blast-radius analysis [free ≤500 Java files · Pro above]
|
|
267
296
|
|
|
268
297
|
```bash
|
|
269
298
|
sourcecode impact ClassName /path/to/repo
|
|
@@ -438,7 +467,7 @@ sourcecode onboard /path/to/repo
|
|
|
438
467
|
|
|
439
468
|
Entry points, architecture summary, key files, confidence level, and gaps. Designed to be injected as agent context at the start of a session.
|
|
440
469
|
|
|
441
|
-
### `review-pr` —
|
|
470
|
+
### `review-pr` — PR review context [free ≤500 Java files · Pro above]
|
|
442
471
|
|
|
443
472
|
```bash
|
|
444
473
|
sourcecode review-pr /path/to/repo --since main
|
|
@@ -447,7 +476,7 @@ sourcecode review-pr /path/to/repo --since HEAD~3
|
|
|
447
476
|
|
|
448
477
|
Changed files, risk ranking, test coverage gaps, affected modules, and blast radius of changed classes. Returns a `ci_decision` field for CI/CD integration.
|
|
449
478
|
|
|
450
|
-
### `fix-bug` —
|
|
479
|
+
### `fix-bug` — Bug triage context [free ≤500 Java files · Pro above]
|
|
451
480
|
|
|
452
481
|
```bash
|
|
453
482
|
sourcecode fix-bug /path/to/repo --symptom "NullPointerException in checkout"
|
|
@@ -455,7 +484,7 @@ sourcecode fix-bug /path/to/repo --symptom "NullPointerException in checkout"
|
|
|
455
484
|
|
|
456
485
|
Risk-ranked file list correlated to the symptom: keyword extraction, path matching, content matching, git commit correlation.
|
|
457
486
|
|
|
458
|
-
### `modernize` — [Pro]
|
|
487
|
+
### `modernize` — Modernization planning [free ≤500 Java files · Pro above]
|
|
459
488
|
|
|
460
489
|
```bash
|
|
461
490
|
sourcecode modernize /path/to/repo
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "sourcecode"
|
|
7
|
-
version = "1.35.
|
|
7
|
+
version = "1.35.35"
|
|
8
8
|
description = "Persistent structural context and ultra-fast repeated analysis for AI coding agents"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|