sourcecode 2.0.1__py3-none-any.whl → 2.2.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.
@@ -0,0 +1,241 @@
1
+ Metadata-Version: 2.4
2
+ Name: sourcecode
3
+ Version: 2.2.0
4
+ Summary: Persistent structural context and ultra-fast repeated analysis for AI coding agents
5
+ License-File: LICENSE
6
+ Keywords: agents,ai,codebase,context,developer-tools,llm
7
+ Classifier: Development Status :: 4 - Beta
8
+ Classifier: Environment :: Console
9
+ Classifier: Intended Audience :: Developers
10
+ Classifier: License :: OSI Approved :: Apache Software License
11
+ Classifier: Operating System :: OS Independent
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.9
14
+ Classifier: Programming Language :: Python :: 3.10
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
18
+ Classifier: Topic :: Utilities
19
+ Requires-Python: >=3.9
20
+ Requires-Dist: defusedxml>=0.7
21
+ Requires-Dist: mcp>=1.0.0
22
+ Requires-Dist: pathspec>=1.0
23
+ Requires-Dist: ruamel-yaml>=0.18
24
+ Requires-Dist: tomli>=2.0; python_version < '3.11'
25
+ Requires-Dist: typer>=0.24
26
+ Provides-Extra: ast
27
+ Requires-Dist: tree-sitter-javascript>=0.21; extra == 'ast'
28
+ Requires-Dist: tree-sitter-typescript>=0.21; extra == 'ast'
29
+ Requires-Dist: tree-sitter>=0.21; extra == 'ast'
30
+ Provides-Extra: dev
31
+ Requires-Dist: mcp>=1.0.0; extra == 'dev'
32
+ Requires-Dist: mypy>=1.10; extra == 'dev'
33
+ Requires-Dist: pytest>=8; extra == 'dev'
34
+ Requires-Dist: ruff>=0.15; extra == 'dev'
35
+ Provides-Extra: mcp
36
+ Requires-Dist: mcp>=1.0.0; extra == 'mcp'
37
+ Description-Content-Type: text/markdown
38
+
39
+ # ASK Engine
40
+
41
+ > **ASK — Actionable Software Knowledge.** Persistent structural intelligence for AI coding agents.
42
+
43
+ **Context · Impact · Migration · Architecture · Review — everything from one structural model.**
44
+
45
+ ![Version](https://img.shields.io/badge/version-2.2.0-blue)
46
+ ![Python](https://img.shields.io/badge/python-3.9%2B-green)
47
+
48
+ > **ASK Engine** is the product. The CLI command is **`ask`**. The legacy **`sourcecode`**
49
+ > command still works as a deprecated alias (it prints a one-line notice and forwards to
50
+ > `ask`) and remains the Python/PyPI package name for now. The authoritative version is
51
+ > whatever `ask version` reports. See [docs/PRODUCT_IDENTITY.md](docs/PRODUCT_IDENTITY.md).
52
+
53
+ ---
54
+
55
+ ## The problem
56
+
57
+ Every time an AI coding agent starts a new session, it has to re-parse the repository from scratch. For a large Java or TypeScript monolith, that means 5–15 seconds per invocation. Multiply by dozens of agent turns per hour, and repo context acquisition becomes a real bottleneck — not just latency, but tokens, compute, and iteration velocity.
58
+
59
+ ASK Engine solves this with a persistent structural cache keyed on file content hashes. After the first scan, every subsequent invocation returns pre-built context in milliseconds. The repo doesn't change? The cache doesn't expire.
60
+
61
+ **The cache is not a performance optimization. It is what makes ASK Engine usable as infrastructure rather than a one-off tool.**
62
+
63
+ ---
64
+
65
+ ## Proof — measured on real repos
66
+
67
+ | Repo | Size | Cold scan | Cache hit | Speedup |
68
+ |------|------|-----------|-----------|---------|
69
+ | Keycloak | 7,885 Java files | 10.5s | 0.6s | **~17x** |
70
+ | BroadleafCommerce | 2,985 Java files | 2.7s | 0.3s | **~9x** |
71
+
72
+ Cache keyed on content hashes — invalidated only when source changes. On repeated agent sessions against the same codebase, nearly every invocation is a cache hit.
73
+
74
+ At 0.3s per call, ASK Engine becomes **constant infrastructure** inside agent loops — call it before every edit, every PR review, every test run, without batching or caching manually.
75
+
76
+ ---
77
+
78
+ ## Install
79
+
80
+ ```bash
81
+ # Homebrew (macOS / Linux)
82
+ brew tap haroundominique/sourcecode && brew install sourcecode
83
+
84
+ # pip / pipx
85
+ pipx install sourcecode # or: pip install sourcecode
86
+
87
+ ask version # ask 2.2.0
88
+ ```
89
+
90
+ > **Package vs. command.** The install package is named `sourcecode` this release
91
+ > (renaming the distribution is a separate, breaking change). Installing it gives you the
92
+ > canonical **`ask`** command plus the deprecated **`sourcecode`** alias.
93
+
94
+ ---
95
+
96
+ ## Quickstart
97
+
98
+ ```bash
99
+ # High-signal structural summary — warm cache ~0.3s, cold 2–10s
100
+ ask --compact
101
+
102
+ # Blast radius: what breaks if this class changes?
103
+ ask impact OrderService /path/to/repo
104
+
105
+ # Spring Boot 2→3 migration readiness (bounded decision summary)
106
+ ask migrate-check /path/to/repo --compact
107
+
108
+ # Spring semantic audit: TX anomalies + security surface
109
+ ask spring-audit /path/to/repo
110
+
111
+ # Onboard to an unfamiliar codebase
112
+ ask onboard /path/to/repo
113
+
114
+ # PR review: risk, test gaps, changed modules
115
+ ask review-pr /path/to/repo --since main
116
+ ```
117
+
118
+ Full command reference: **[docs/USER_GUIDE.md](docs/USER_GUIDE.md)**.
119
+
120
+ ---
121
+
122
+ ## Capabilities
123
+
124
+ Everything is computed from one cached structural model. Seven groups:
125
+
126
+ ### 1 · Structural Context
127
+ Bounded, noise-free repo context designed to drop straight into an agent's context window.
128
+ `ask --compact` · `ask --agent` · `ask onboard` · `ask cold-start`
129
+ → [reference](docs/USER_GUIDE.md#core-commands)
130
+
131
+ ### 2 · Impact Analysis
132
+ Blast radius from a class or interface — reverse dependencies, through Spring DI, to the HTTP endpoints a change reaches.
133
+ `ask impact` · `ask impact-chain` (TX/SEC-enriched) · `ask pr-impact`
134
+ → [reference](docs/USER_GUIDE.md#core-commands)
135
+
136
+ ### 3 · Architecture Intelligence
137
+ The system map: module graph, dependency views, REST surface, per-class summaries, and a symbol-level IR for downstream tooling.
138
+ `ask export` · `ask repo-ir` · `ask endpoints` · `ask explain`
139
+ → [reference](docs/USER_GUIDE.md#core-commands)
140
+
141
+ ### 4 · Migration & Modernization
142
+ Is this codebase ready to upgrade? Per-dimension readiness (Jakarta / Spring Boot / JDK / Hibernate), located blockers, and an effort estimate.
143
+ `ask migrate-check` · `ask modernize`
144
+ → [migrate-check reference](docs/migrate-check.md) · [MODERNIZATION.md](docs/MODERNIZATION.md)
145
+
146
+ ### 5 · Spring Analysis
147
+ Deterministic Spring semantics: transactional anomalies (e.g. `@Transactional` on a private method = silent CGLIB no-op), security surface, request-body validation.
148
+ `ask spring-audit` · `ask validation`
149
+ → [reference](docs/USER_GUIDE.md#core-commands)
150
+
151
+ ### 6 · Developer Workflows
152
+ The everyday loop: diff-based PR review, symptom-driven bug triage, and delta context for continuous agent runs.
153
+ `ask review-pr` · `ask fix-bug` · `ask prepare-context`
154
+ → [reference](docs/USER_GUIDE.md#typical-workflows)
155
+
156
+ ### 7 · Utilities
157
+ `ask rename-class` (word-boundary Java rename) · `ask chunk-file` (split large files for agents) · `ask cache` (status / warm / clear / freshness)
158
+ → [reference](docs/USER_GUIDE.md)
159
+
160
+ ---
161
+
162
+ ## What it does — and doesn't
163
+
164
+ **ASK Engine reduces exploration cost.** It accelerates context acquisition and computes
165
+ blast radius; it does not replace reading code — it reduces how often an agent needs to.
166
+ All signals are **static and deterministic** (annotations, import graph, file structure) —
167
+ no runtime analysis, no LLM guessing.
168
+
169
+ Honest limits worth knowing before you rely on it:
170
+
171
+ - `impact` on an **implementation** class (`OrderServiceImpl`) returns 0 callers in Spring Boot — callers inject the interface. **Always target the interface.**
172
+ - `no_security_signal` on an endpoint means *no recognized method-level annotation*, **not** "unsecured" — Spring Security filter chains and custom authorization annotations show as `no_security_signal` unless taught via config (below).
173
+ - `spring-audit` / `impact-chain` are **Java/Spring only**; non-Java repos return `spring_detected: false`.
174
+ - Event topology (`--type events`) resolves Spring `ApplicationEvent` / `@EventListener` chains only — **not** Kafka/RabbitMQ/Redis routes.
175
+ - Architecture classification is tuned for Spring MVC layered apps; SPI/plugin models (e.g. Quarkus extensions) may be misclassified. JAX-RS subresource-locator endpoint recall is ~65%.
176
+ - Self-invocation `@Transactional` bypass (same-class call skipping the proxy) is not detected.
177
+
178
+ ---
179
+
180
+ ## Pricing
181
+
182
+ > **🎉 Early-adoption: Pro is currently unlocked for everyone.** Every install runs with
183
+ > full Pro entitlements — no size gate, no key. The tiers below describe the model the
184
+ > paywall will return to later.
185
+
186
+ **Gating is by repo size and automation — never by command.** Every command runs at full
187
+ power on Free for small and mid-size repos; you upgrade when the work gets bigger or automated.
188
+
189
+ | | **Free** — €0 | **Pro** — €19/mo · €190/yr per dev |
190
+ |---|---|---|
191
+ | Repo size | ≤ 500 Java source files | **> 500 Java files** (enterprise monoliths) |
192
+ | Commands | All of them, full output | Same commands, unlocked at scale |
193
+ | `impact` / `fix-bug` / `review-pr` / `modernize` | ✅ full on small repos | ✅ full on large repos (Free gets a capped preview) |
194
+ | `prepare-context delta` | 30 free runs/repo | unlimited — CI/CD automation |
195
+ | MCP local server, offline, no data egress | ✅ | ✅ |
196
+
197
+ **Non-Java repos are free at any size** — the size limit counts Java source files only.
198
+ ASK Engine monetises enterprise Java monoliths. Activate with `ask activate <key>`.
199
+ Full breakdown: [docs/PRODUCT_TIERS.md](docs/PRODUCT_TIERS.md).
200
+
201
+ ---
202
+
203
+ ## Configuration & privacy
204
+
205
+ ```bash
206
+ ask config # version, config file path, telemetry status
207
+ ask telemetry disable # anonymous telemetry is on by default (opt-out)
208
+ ```
209
+
210
+ Telemetry collects version, OS, commands, flags, duration, repo-size range, and errors —
211
+ **no source code, paths, secrets, or output**. Disable any time with
212
+ `export SOURCECODE_TELEMETRY=0` (or `DO_NOT_TRACK=1`).
213
+
214
+ **Custom security annotations.** Teach `endpoints`, `spring-audit`, and `explain` about
215
+ project-specific authorization annotations via an optional `sourcecode.config.json` at the
216
+ repo root (otherwise they report `policy: "none_detected"`):
217
+
218
+ ```json
219
+ {
220
+ "customSecurityAnnotations": [
221
+ { "fullyQualifiedName": "com.example.security.M3FiltroSeguridad", "shortName": "M3FiltroSeguridad" }
222
+ ]
223
+ }
224
+ ```
225
+
226
+ Matching endpoints report `policy: "custom"` and drop out of the `no_security_signal` count.
227
+
228
+ ---
229
+
230
+ ## Documentation
231
+
232
+ | Doc | What it covers |
233
+ |-----|----------------|
234
+ | [USER_GUIDE.md](docs/USER_GUIDE.md) | Full command reference, flags, output schema, workflows |
235
+ | [migrate-check.md](docs/migrate-check.md) | Migration rule catalogue (MIG-001..043) + Hibernate stratification |
236
+ | [MODERNIZATION.md](docs/MODERNIZATION.md) | The modernization product: assess → understand → plan → execute |
237
+ | [PRODUCT_TIERS.md](docs/PRODUCT_TIERS.md) | Free vs Pro, pricing model |
238
+ | [DEMO-5MIN.md](docs/DEMO-5MIN.md) | A reproducible 5-minute demo |
239
+ | [MANUAL-USUARIO.md](docs/MANUAL-USUARIO.md) | Guía de usuario en español |
240
+ | [PRODUCT_IDENTITY.md](docs/PRODUCT_IDENTITY.md) | `ask` (command) vs `sourcecode` (package/alias) |
241
+ | [privacy.md](docs/privacy.md) | Telemetry and data-handling policy |
@@ -1,14 +1,15 @@
1
- sourcecode/__init__.py,sha256=yG42_W0jLJG6vz-t5XrNtO02j4egJK-2bAkVuBvHOEU,102
1
+ sourcecode/__init__.py,sha256=QOkIfC7KA2tM2ix9_wUgS6fHiERh2v_TTNhjw8RBb1o,308
2
2
  sourcecode/adaptive_scanner.py,sha256=XffluXKzJUXrMtjEiAOnSNPZnztdIcts17T9ouHeID0,10521
3
3
  sourcecode/architecture_analyzer.py,sha256=6_wC4TYuBYxaqckZS0I1vBSMRPeH2vzlDB48gXwOOd4,46627
4
4
  sourcecode/architecture_summary.py,sha256=UaxmUU77oTlWxttMU3c6PxHrU-Q6q5N31TeU_NWWTdU,24297
5
5
  sourcecode/ast_extractor.py,sha256=FEsYTsMCXbJfSYQZRk1k-I-PjUNGnKqO1IxMftsgA5U,51351
6
6
  sourcecode/cache.py,sha256=1V3vsaODAa2UBJAC0xpvxpmRdriCezQx5Q8JCcfgziE,31892
7
7
  sourcecode/call_surface.py,sha256=fiqYfHooxN1fX9oQoysq1LS3LoZcobhyUNjAGEZKpwk,4148
8
+ sourcecode/caller_metrics.py,sha256=HG8RCOkpzzsEGdnMRob6byrwjoj5__t0TEsBj4yR7ks,2574
8
9
  sourcecode/canonical_ir.py,sha256=U69m8Vkr0p407xF1q5y1KguHXWEAubYw8NFHR9hDNJk,29178
9
10
  sourcecode/cir_graphs.py,sha256=9G0HHj1kw2325IDyzo2OpX73BNswEckecf4MZUXB4JM,12078
10
11
  sourcecode/classifier.py,sha256=YTTCoRdcLEFRVcql9Ow1dE7eYQj0jq2rgx32bRDnb1k,13852
11
- sourcecode/cli.py,sha256=qWGsEal6YUtEk1vKh7ekMi5DXvgX8lRYt1PwSdGPm8c,289908
12
+ sourcecode/cli.py,sha256=CKy6zdBfecnT6reYb749pLY4NqH1_Qy7c8DHnBWamrU,293593
12
13
  sourcecode/code_notes_analyzer.py,sha256=EJemNCNc9Dn-1RZYu-aNbK0ELzmsyC4s6FdHi3XyNEI,9392
13
14
  sourcecode/confidence_analyzer.py,sha256=_jckZSxksV-OU38vbkxfVNBnWCtlCq8Vwfg23x1uspA,19054
14
15
  sourcecode/context_graph.py,sha256=8MVDu06bPhvRDTgUqWEvRME2fOw34bFLf4OUILZd13I,43527
@@ -21,11 +22,12 @@ sourcecode/dependency_analyzer.py,sha256=fQCaWQ7_BNcVgZv8gweJCwJ1CGlXsz8nw_tqN3a
21
22
  sourcecode/doc_analyzer.py,sha256=05bjTUbDbmnbajD_cgRnACzS8T7xxBKVX4CjkJlhZg8,24411
22
23
  sourcecode/dynamic_argument_surface.py,sha256=iRzrJhs57UXrGvLhNPiTA-e_sdO6ka-wNqc0wIiegiM,2554
23
24
  sourcecode/endpoint_literals.py,sha256=Qf4gTZzvNSFDGDuOvF0YRL9NvaYKKj24klhR5LIOaXc,3263
25
+ sourcecode/endpoint_metrics.py,sha256=wkAonXe34ItHlvlGur3YRFUrcZfg6GdiiwiE4bMa21Y,2590
24
26
  sourcecode/entrypoint_classifier.py,sha256=jhTYlyqDJH2AtdEcLVaRU3lYRTJuF8DkxVzl4-W3zWE,5322
25
27
  sourcecode/env_analyzer.py,sha256=aNTyYgQk5noJDfJU6FmasmESOHfiomyJw5EvZqjy6qc,22213
26
28
  sourcecode/error_schema.py,sha256=uwosfNaSujtYm11_732Hu92z5ITV040fQDaIyefSvR4,1683
27
29
  sourcecode/evidence_provider.py,sha256=GSSL44JEaouO5AHks2sB3d1YvC9xIKIld1yBYxZpXxo,4277
28
- sourcecode/explain.py,sha256=DyGRH7DXvtuioE1TF7kq8xwprrSSHRXErm840RJ9pIc,21055
30
+ sourcecode/explain.py,sha256=bo4sy8qkEstIF3sIefECKRYJBK97C6cMjyzRa8USCdI,21189
29
31
  sourcecode/file_chunker.py,sha256=3vkM3mDQ5eE_yTPvUgjyjpGFBIjkW6_mrBmIbrylnA8,16444
30
32
  sourcecode/file_classifier.py,sha256=A0fEABqtfVu1MfoaxnPAvGpZgneGgVXlJDhT74NYXxE,15314
31
33
  sourcecode/format_contract.py,sha256=1cTNqwP8geA2hbQoBHUPgX3_vSh3l8guJT_jmgEnFF8,3466
@@ -34,13 +36,13 @@ sourcecode/git_analyzer.py,sha256=JStxTQXNjBWi_wLdwhsZs9mT-v50cSJIz4Agzn6Kh9I,13
34
36
  sourcecode/graph_analyzer.py,sha256=lp0eB1PWC20BYF-GpPhAyegRpKrUKgOmXZIcZSIX_Ks,65777
35
37
  sourcecode/hibernate_strat.py,sha256=h0leIhlWvSjYq3F99LxvLIDLrJ-xPYxWAREG4LkqZ-4,61190
36
38
  sourcecode/jdk_exports.py,sha256=fCrlwNAXUT9gge_joq6kMnY3zJxYB2pxqy-0w3o3MJI,874
37
- sourcecode/license.py,sha256=07tzgYulVSOMOIYvzZ3ZhBW2P3VcZWIYWQvMUjA5wOE,24172
38
- sourcecode/mcp_nudge.py,sha256=5ELU_ixzh6uA83NXLOZT8h00OhL53okfQdji3jyKOjg,2917
39
+ sourcecode/license.py,sha256=keFuwNxdAtvK2Ds91Wl79GMYxuxWYnN5Wbw1qBpaoUI,24896
40
+ sourcecode/mcp_nudge.py,sha256=yjwclsBVsDg1BtocGdEi6GYV4vzPo-SBlC9pIcNmlDM,2910
39
41
  sourcecode/metrics_analyzer.py,sha256=m0ENgtqKeBL17kUIK3fmGkgo7UfXBNHxCMj0H_Y5K7c,22750
40
42
  sourcecode/migrate_check.py,sha256=HJhvHuvXDGTJSRQU9_AMx0L94h2TImC1DCGs3m3RTu0,108199
41
43
  sourcecode/openapi_surface.py,sha256=BTt0K-woZbkbWTN77IkqeBm_Okag9owR0848fmot8sk,16207
42
44
  sourcecode/output_budget.py,sha256=Js9yUlfQtPhqBl9R6wn_9UHVjjJc3GtLcqyfjf5t50Q,9869
43
- sourcecode/path_filters.py,sha256=VnaD9jxZVNzluackNSTCdIddwzAqIseuSCs_A-gpCDM,6898
45
+ sourcecode/path_filters.py,sha256=T1y0SJsmUJBju2Hh_-z40kURAowUEq42FpPgWLbOaY0,6931
44
46
  sourcecode/pr_comment_renderer.py,sha256=KmcjMruhR44gjzMDJwjBSkWP9QEvh8xWBLyxzxoRbj0,14542
45
47
  sourcecode/pr_impact.py,sha256=dCDVw83EDbyVf6F9ZmEQmsFz8ruVH7d4mpeKQCIZHM0,16805
46
48
  sourcecode/prepare_context.py,sha256=PYygAKL_jwz8gGElgM9mroUSih18UKSSjv08ndfl4aA,222877
@@ -50,27 +52,29 @@ sourcecode/redactor.py,sha256=SB4hwIvg8h-hvcqKcDWaZvA-aSyn-at-BIRwa0tUv5E,3227
50
52
  sourcecode/relevance_scorer.py,sha256=0AgEt4KrV73nioMqBgjhGjtY7L2C7L7cSyKtj3IKcrw,9408
51
53
  sourcecode/rename_refactor.py,sha256=h6dNFlB9aZ_3q6heeHBkgXQeXaT03nvPSsYH6P8qxFg,12965
52
54
  sourcecode/repo_classifier.py,sha256=FG1vaWKdWXsWdl-S8hjVMiTqcwgaRXkDyvK4rPcOGtQ,22681
53
- sourcecode/repository_ir.py,sha256=vTW0RomLWRdu9UatU-2PYqQCxyiTOKTFToArYbWFAz4,281533
54
- sourcecode/ris.py,sha256=RcqLVwC-doFcKKViYDkCjZLBqf_wzLES7-F6vHEeWzE,20419
55
+ sourcecode/repository_ir.py,sha256=3DONydNhy-UU1R_1l-caePlBiUlZxkk9X5h92VXsQ34,284195
56
+ sourcecode/ris.py,sha256=aG2D4159gtpg968yD3PylYbIXhGFOwIlFBI0DSr84yY,20412
55
57
  sourcecode/runtime_classifier.py,sha256=uTAD6BDCiBLUZEDRfqk718kM4RTT_vAbfkcOI2_Xx58,18432
56
58
  sourcecode/scanner.py,sha256=WdOQ78mMzjR1NjmKTlbxdgwinnCTfAhxCVLBEFQiFHU,8899
57
59
  sourcecode/schema.py,sha256=aHNXDf8LGyUC8ZDE_VS9kiskC2-Oswhi_WnpdGy6HDw,24897
58
60
  sourcecode/security_config.py,sha256=_m8oQAy2gP7Ho2I-IIMTFFjFVWbJIGlLEOiAWK2TDjs,3503
61
+ sourcecode/security_posture.py,sha256=CAJw4oJD0aAW2yRewvd_fonkzi9_HpUjBZlIDZle00s,26034
59
62
  sourcecode/semantic_analyzer.py,sha256=bpgdC6m0_ftVtRf3rSdwhbhWjnZnGxRXaZVcfe4BbcQ,95414
60
63
  sourcecode/semantic_impact_engine.py,sha256=HpgjenY6DLPHPomP7Hw850zA-EBokf1S4O2sh8NegdI,20351
61
- sourcecode/semantic_integration_engine.py,sha256=cUJFZaBfgzsYpj9hRa9CZjo3U9VSfIQV1k2SQYM5HZw,14524
64
+ sourcecode/semantic_integration_engine.py,sha256=rxoCuP-uM_Y4-ELeBN0sz1a88e2eI1XTJDgsS57IOLI,15513
62
65
  sourcecode/semantic_services.py,sha256=AO_p7PRfjc-AUh6ThvLMfm4iUGi0issL_frCf8sxGlI,10637
63
- sourcecode/serializer.py,sha256=CaL_zf1bwE53SKkiveo3BhAL5ijcLCXdKX1jmMocMvE,129101
66
+ sourcecode/serializer.py,sha256=FmQo7eojA_z3ptLW-Vgze5mrEJ6FabcZqiwbQWWTgFI,130056
64
67
  sourcecode/spring_event_topology.py,sha256=5_ON_21Le5zbG-1GRc5GLIi5HJfy_QjcXLVPC5WeUGQ,18055
65
- sourcecode/spring_findings.py,sha256=G7Or2lKBUQbcTDqudLvSs9XvNg_YoAa-_lBOG_ULs8E,5457
68
+ sourcecode/spring_findings.py,sha256=EX7kLZLN74CFyR9iZPm3CI115BfFKNd4WRPuErNljZM,5729
66
69
  sourcecode/spring_impact.py,sha256=1Eu1vkdwTVsw92iBEJDe_i_FaSf4uGH9Rb0eSgIAAZc,57542
67
70
  sourcecode/spring_model.py,sha256=zOAgFmrRbG4a6KLm1TJl55aWMyPNsz3OS3FSczqPG6A,16594
68
- sourcecode/spring_security_audit.py,sha256=xrdv3MaR_m2wblA6a8MRWM7attvZeoPXKsoRO_R2lY4,21401
69
- sourcecode/spring_semantic.py,sha256=O1nKSGVzlukuxLHQVuCPxc-XrcrMFxwlHA20_dmEGgM,13307
70
- sourcecode/spring_tx_analyzer.py,sha256=iH9mK0Tgvhgy_Ee2r13KA_RMf8HKN-pjCKQGuyCCBjM,33812
71
+ sourcecode/spring_security_audit.py,sha256=Rk-aSohezdc7YDYbSoJquVnwpkDB8ty1BCD-4Hc4R5A,22832
72
+ sourcecode/spring_semantic.py,sha256=jteQ1PkY9ArFJv0embg_jBIdbOxqrk9mQ2Xz8OF_FKA,14214
73
+ sourcecode/spring_tx_analyzer.py,sha256=QMXkxa_hrqDVN3D8WJsd0nT7vfdZCT1E8ZWNoFFbvgU,34692
71
74
  sourcecode/summarizer.py,sha256=ByfFxIGVRrGrf3paQPuDOg1rVj78LyzXN_EXBkfbCLU,23582
72
75
  sourcecode/tree_utils.py,sha256=8GAkIfQAsvtEudIeW1l4ooH_oRtrWR8cpJQJsEa_Pfw,2093
73
76
  sourcecode/type_usage_surface.py,sha256=51IrKRQoIoRnlsiDjHnqpJBn2rc6E59aRhgS0HTzAF0,4428
77
+ sourcecode/validation_inference.py,sha256=UtmYv-d4TEzT1ihGEipAhtXDrwq0XtVtjMpb3i7NsNc,10815
74
78
  sourcecode/validation_surface.py,sha256=A7h0Z9xHjPrxUPkyoPKlhGb8tCF0w0PI_XT-tOj5sC4,21375
75
79
  sourcecode/version_check.py,sha256=CHp6ZxTIfo8kyHPCBgJA1uFC0xQCoXMuuOfrW8QTL8o,4942
76
80
  sourcecode/workspace.py,sha256=X_6NmNnitvT3_38V-JDChydo_sR68s249hLFlrQskU0,8271
@@ -83,7 +87,7 @@ sourcecode/detectors/elixir.py,sha256=jCpvt5Yi6jvplc80ovRtWh17q-11ZGo9qX7o8b57TJ
83
87
  sourcecode/detectors/go.py,sha256=2r66uRQfeTWsqxr4HDhT6vExZErby0t46QXLHVBRv9w,2782
84
88
  sourcecode/detectors/heuristic.py,sha256=7cRxrip4yIaggYzZJB6ef8yHKh-gHgiH_pXMFcjlyFU,3723
85
89
  sourcecode/detectors/hybrid.py,sha256=IGFRUVsAZ1ooRlFdznCeJAV6vy1yVDx-VyghvLtddXc,9101
86
- sourcecode/detectors/java.py,sha256=xlp4mqd26QWJf3MWqmTbD0IND_VEVzPHlGaLC4MNXNA,39028
90
+ sourcecode/detectors/java.py,sha256=rTeVIKIliElE1yPdIkll1pKqDUzXD1EFFJdXxp24gr4,41005
87
91
  sourcecode/detectors/jvm_ext.py,sha256=EgHJ5W8EE-ZTN9V607mVzohyKgZE8Mc2jCi-DF8RAZU,2616
88
92
  sourcecode/detectors/nodejs.py,sha256=Hg3Gmr7yIMJFiLoDwOTk2wtu00wxIs6kZf-oQujTFUA,13187
89
93
  sourcecode/detectors/parsers.py,sha256=ug9K31tyHqinmv0HkIVQVjdTZpBv67FYKAEf52YXOSM,3178
@@ -97,22 +101,22 @@ sourcecode/detectors/terraform.py,sha256=cxORPR_zVLOJpHlh4e9JnFpkQsn_UnqMMom5yG6
97
101
  sourcecode/detectors/tooling.py,sha256=8CKbtxwQoABP-WyBRNmdAmHDOvAH57AR1cF4UKuWEdQ,2074
98
102
  sourcecode/mcp/__init__.py,sha256=XU4HfRGbdid8wdUA0x_4f7uKZD1z3mv_XUY_WU_T9Mw,179
99
103
  sourcecode/mcp/orchestrator.py,sha256=diVoQgn24QmgPL3Ev8Sp6hsvh02OqY3MktHXOzrlodo,36525
100
- sourcecode/mcp/registry.py,sha256=jLCUG7-m53Fbxqjzpt_OWu6NUp7b46S2ixTDixsTRyo,65975
101
- sourcecode/mcp/runner.py,sha256=-Dp2qPGRkfNTVen6bKh7WtzQqpcEtsrXoiuajvshlKk,2866
102
- sourcecode/mcp/server.py,sha256=1jwMR0OwJcLi1GoAKT300RSQAhfd_nYLrvABG7s0pUU,63874
104
+ sourcecode/mcp/registry.py,sha256=DyREJve47GnajFYgPORmzQjH1Qi2ZzE5twvQpPXMghI,65821
105
+ sourcecode/mcp/runner.py,sha256=RGimCwhLyHxjCvH7q72y12HWEnATXZLC-NBWhkzlu0I,2852
106
+ sourcecode/mcp/server.py,sha256=yCp1YmmZ4hQE7KIHC8XcdxnToYCwSe9vxp4E-YMzVg0,63713
103
107
  sourcecode/mcp/onboarding/__init__.py,sha256=sj2PWqEBmMc4zBNkomg89WtL0M6S7A9yb7_wAuSWNP4,66
104
- sourcecode/mcp/onboarding/applier.py,sha256=B9CneieWTpaDSDIyW3S5nrlRlBpvfqUcgi93-mm_ApQ,2135
108
+ sourcecode/mcp/onboarding/applier.py,sha256=Z2ZqzPh7dTTzT7tfxDbfjDJKiBNQ18CPQCaReRTM3AY,2630
105
109
  sourcecode/mcp/onboarding/backup.py,sha256=ihqGOR8QTX8HASRSEDyfFyXr5bkXrygPHamv4p9KTmk,1452
106
110
  sourcecode/mcp/onboarding/detector.py,sha256=kDc0U6kXMuq_GivqwKrgJzIVLVeoLr3RQl63ksW10I8,3327
107
111
  sourcecode/mcp/onboarding/planner.py,sha256=Fopg5f72FDiPfldF7NOxYjcBA_w8hi_jBJpSz39lPb8,1332
108
112
  sourcecode/telemetry/__init__.py,sha256=6wsJnXsgsL_BtMK4hr5Ae1GToHeWej53F4o_-Tc23MQ,3406
109
113
  sourcecode/telemetry/config.py,sha256=u_zctgmA1pVT3Ai5jm-pdLY_5kJTRg4Xq2bvIbGBQE4,3727
110
- sourcecode/telemetry/consent.py,sha256=H5z2Wu63pZqbaKucRPoJQJ0zCo4cke9ZlBrJC-MaWTE,2201
114
+ sourcecode/telemetry/consent.py,sha256=LIAO9ohJZF8OuZwM4u1VWtALlYfTCCKq4wV3Vwc7i5Q,2194
111
115
  sourcecode/telemetry/events.py,sha256=LtzYfaX9Ilckj5PTvAcTpDa9mLqDsYPDUiDkRa58piY,2580
112
116
  sourcecode/telemetry/filters.py,sha256=NHa5T-6DaZduQPFuC34jOqHWQgSizM-Ygq8aZ4j19ng,5834
113
117
  sourcecode/telemetry/transport.py,sha256=4gGHsq0WeY9VywEZXA3vUxykfiYnw9uuqfjAAec7F8o,1681
114
- sourcecode-2.0.1.dist-info/METADATA,sha256=P2Lg_vnqwgoCPCTS1mPxE1KElhFVImTUzw9jAATaw-M,49096
115
- sourcecode-2.0.1.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
116
- sourcecode-2.0.1.dist-info/entry_points.txt,sha256=ex3F9rmbXeyDIoFQHtkEqTsKSaJow8F0LrVu8XfIktQ,57
117
- sourcecode-2.0.1.dist-info/licenses/LICENSE,sha256=7DdHrU9Z_3e7dSvq4ISijZNjnuHo5NIHNiHDouMQ9JU,10491
118
- sourcecode-2.0.1.dist-info/RECORD,,
118
+ sourcecode-2.2.0.dist-info/METADATA,sha256=GWUjIL4RNPYx8cMKSRHxzELL49K0anIx6qH8aHAsB3I,10837
119
+ sourcecode-2.2.0.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
120
+ sourcecode-2.2.0.dist-info/entry_points.txt,sha256=-JEAdChrK5We51kZcb7OaDcyil-dHBjBPL-NhuO-QY8,89
121
+ sourcecode-2.2.0.dist-info/licenses/LICENSE,sha256=7DdHrU9Z_3e7dSvq4ISijZNjnuHo5NIHNiHDouMQ9JU,10491
122
+ sourcecode-2.2.0.dist-info/RECORD,,
@@ -1,2 +1,3 @@
1
1
  [console_scripts]
2
+ ask = sourcecode.cli:main_entry
2
3
  sourcecode = sourcecode.cli:main_entry