jscope 0.4.2__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 (81) hide show
  1. jscope/__init__.py +1 -0
  2. jscope/__main__.py +10 -0
  3. jscope/ai/__init__.py +0 -0
  4. jscope/ai/explain.py +180 -0
  5. jscope/ai/providers.py +71 -0
  6. jscope/analyzers/__init__.py +0 -0
  7. jscope/analyzers/auth_analyzer.py +170 -0
  8. jscope/analyzers/authorization_analyzer.py +196 -0
  9. jscope/analyzers/base.py +56 -0
  10. jscope/analyzers/common.py +78 -0
  11. jscope/analyzers/dataflow_analyzer.py +192 -0
  12. jscope/analyzers/endpoint_analyzer.py +150 -0
  13. jscope/analyzers/framework_detector.py +82 -0
  14. jscope/analyzers/graphql_analyzer.py +198 -0
  15. jscope/analyzers/graphql_schema_analyzer.py +132 -0
  16. jscope/analyzers/html_analyzer.py +196 -0
  17. jscope/analyzers/manager.py +114 -0
  18. jscope/analyzers/openapi_analyzer.py +278 -0
  19. jscope/analyzers/router_analyzer.py +502 -0
  20. jscope/analyzers/secret_analyzer.py +99 -0
  21. jscope/analyzers/service_worker_analyzer.py +142 -0
  22. jscope/analyzers/source_map_analyzer.py +119 -0
  23. jscope/analyzers/storage_analyzer.py +125 -0
  24. jscope/analyzers/wasm_analyzer.py +139 -0
  25. jscope/assessment_engine.py +285 -0
  26. jscope/assessment_reporting.py +71 -0
  27. jscope/benchmark/__init__.py +1 -0
  28. jscope/benchmark/fixtures.py +105 -0
  29. jscope/benchmark/runner.py +155 -0
  30. jscope/cli.py +1241 -0
  31. jscope/config.py +72 -0
  32. jscope/core/__init__.py +0 -0
  33. jscope/core/artifacts.py +139 -0
  34. jscope/core/cache.py +198 -0
  35. jscope/core/classification.py +56 -0
  36. jscope/core/evidence.py +411 -0
  37. jscope/core/graph.py +196 -0
  38. jscope/core/redact.py +67 -0
  39. jscope/crawler/__init__.py +0 -0
  40. jscope/crawler/crawler.py +176 -0
  41. jscope/dataflow/__init__.py +1 -0
  42. jscope/dataflow/engine.py +1684 -0
  43. jscope/dataflow/modules.py +205 -0
  44. jscope/dataflow/rules.py +118 -0
  45. jscope/downloader/__init__.py +0 -0
  46. jscope/downloader/downloader.py +116 -0
  47. jscope/parsing/__init__.py +0 -0
  48. jscope/parsing/ast_engine.py +322 -0
  49. jscope/parsing/graphql_schema.py +153 -0
  50. jscope/parsing/html.py +55 -0
  51. jscope/parsing/queries.py +385 -0
  52. jscope/parsing/wasm.py +146 -0
  53. jscope/passive_discovery.py +63 -0
  54. jscope/pipeline.py +196 -0
  55. jscope/plugin/__init__.py +0 -0
  56. jscope/plugin/_worker.py +199 -0
  57. jscope/plugin/loader.py +225 -0
  58. jscope/plugin/sandbox.py +207 -0
  59. jscope/reporting/__init__.py +0 -0
  60. jscope/reporting/formats.py +208 -0
  61. jscope/reporting/human.py +137 -0
  62. jscope/reporting/json_report.py +35 -0
  63. jscope/reporting/priority.py +116 -0
  64. jscope/runtime/__init__.py +0 -0
  65. jscope/runtime/observe.py +397 -0
  66. jscope/runtime/prober.py +259 -0
  67. jscope/runtime/scope.py +288 -0
  68. jscope/security_transport.py +246 -0
  69. jscope/verify/__init__.py +1 -0
  70. jscope/verify/engine.py +290 -0
  71. jscope/workspace/__init__.py +0 -0
  72. jscope/workspace/assessment.py +133 -0
  73. jscope/workspace/common.py +25 -0
  74. jscope/workspace/diff.py +143 -0
  75. jscope/workspace/store.py +206 -0
  76. jscope-0.4.2.dist-info/METADATA +180 -0
  77. jscope-0.4.2.dist-info/RECORD +81 -0
  78. jscope-0.4.2.dist-info/WHEEL +5 -0
  79. jscope-0.4.2.dist-info/entry_points.txt +2 -0
  80. jscope-0.4.2.dist-info/licenses/LICENSE +21 -0
  81. jscope-0.4.2.dist-info/top_level.txt +1 -0
@@ -0,0 +1,180 @@
1
+ Metadata-Version: 2.4
2
+ Name: jscope
3
+ Version: 0.4.2
4
+ Summary: Evidence-based JavaScript intelligence for bug bounty hunters and web app pentesters
5
+ Author: Muhammed Ali
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/LIME1Star/JScope
8
+ Project-URL: Issues, https://github.com/LIME1Star/JScope/issues
9
+ Project-URL: Changelog, https://github.com/LIME1Star/JScope/blob/main/CHANGELOG.md
10
+ Keywords: security,bug-bounty,pentest,javascript,static-analysis,appsec,recon
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Information Technology
14
+ Classifier: Operating System :: OS Independent
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.10
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: Security
21
+ Requires-Python: >=3.10
22
+ Description-Content-Type: text/markdown
23
+ License-File: LICENSE
24
+ Requires-Dist: tree-sitter>=0.23
25
+ Requires-Dist: tree-sitter-javascript>=0.23
26
+ Requires-Dist: tree-sitter-typescript>=0.23
27
+ Requires-Dist: requests>=2.31
28
+ Requires-Dist: beautifulsoup4>=4.12
29
+ Provides-Extra: yaml
30
+ Requires-Dist: PyYAML>=6.0; extra == "yaml"
31
+ Provides-Extra: browser
32
+ Requires-Dist: playwright>=1.40; extra == "browser"
33
+ Provides-Extra: dev
34
+ Requires-Dist: pytest>=7; extra == "dev"
35
+ Requires-Dist: PyYAML>=6.0; extra == "dev"
36
+ Requires-Dist: build; extra == "dev"
37
+ Requires-Dist: twine; extra == "dev"
38
+ Dynamic: license-file
39
+
40
+
41
+ <p align="center">
42
+ <picture>
43
+ <source media="(prefers-color-scheme: dark)" srcset="assets/logo-dark.svg">
44
+ <img alt="JScope" src="assets/logo-light.svg" width="360">
45
+ </picture>
46
+ </p>
47
+
48
+ <p align="center">
49
+ <b>Evidence-based JavaScript intelligence for bug bounty hunters and web app pentesters.</b><br>
50
+ Reconstructs how a web app behaves from its JS, and refuses to show a finding it can't justify.
51
+ </p>
52
+
53
+ <p align="center">
54
+ <a href="https://github.com/LIME1Star/JScope/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/LIME1Star/JScope/actions/workflows/ci.yml/badge.svg"></a>
55
+ <img alt="Python 3.10+" src="https://img.shields.io/badge/python-3.10%2B-blue">
56
+ <img alt="License: MIT" src="https://img.shields.io/badge/license-MIT-green">
57
+ </p>
58
+
59
+ ---
60
+
61
+ Most JS recon tools hand you a long list of strings. JScope hands you a **map** (routes, components, API calls, guards, roles)
62
+ and a **ranked list of where to start testing**, where every point in the ranking has a stated reason and every finding
63
+ carries the evidence behind it.
64
+
65
+ ```text
66
+ $ jscope analyze tests/sample_react
67
+
68
+ [where to start testing] (deterministic ranking; reasons shown)
69
+ 68 [CONFIRMED] JS-0004 endpoint: /api/admin/reports/export
70
+ test: Request as an unauthenticated / low-privilege user and check for missing access control.
71
+ 58 [CONFIRMED] JS-0001 endpoint: /api/admin/users
72
+ test: Request as an unauthenticated / low-privilege user and check for missing access control.
73
+ 54 [CONFIRMED] JS-0003 endpoint: /api/users/{id}/profile
74
+ test: Vary the ID parameter across accounts/sessions and diff authorization results.
75
+ ...
76
+
77
+ [route map] 6 route(s) (R=route G=guard role=declared role E=endpoint)
78
+ R / UNPROTECTED
79
+ E /api/v1/feed
80
+ R /admin/reports UNPROTECTED
81
+ E /api/admin/reports/export
82
+ R /login UNPROTECTED
83
+ E /api/auth/login
84
+ R /admin/users guards=RequireAuth roles=admin
85
+ E /api/admin/users
86
+ R /billing guards=RequireAuth
87
+ E /api/payments/invoices
88
+ R /profile guards=RequireAuth
89
+ E /api/users/{id}/profile
90
+ ```
91
+
92
+ An unguarded `/admin/reports` route calling an admin export endpoint is exactly the kind of lead you want surfaced in seconds.
93
+ Try it yourself on the bundled fixture (`tests/sample_react`).
94
+
95
+ ## Install
96
+
97
+ ```bash
98
+ pip install git+https://github.com/LIME1Star/JScope.git
99
+ jscope doctor # checks your install
100
+ ```
101
+
102
+ Python 3.10+. For YAML OpenAPI specs: `pip install "jscope[yaml] @ git+https://github.com/LIME1Star/JScope.git"`.
103
+
104
+ ## Quick start
105
+
106
+ ```bash
107
+ jscope analyze ./path/to/js-project --verbose # ranking, route map, evidence appendix
108
+ jscope explain JS-0004 --findings-file f.json # full evidence chain for one finding
109
+ jscope graph ./project # route -> component -> API -> guard map
110
+ jscope https://app.example.com # crawl + download + analyze (authorized targets only)
111
+ jscope report f.json --format html -o report.html # re-render: human | json | markdown | html | sarif
112
+ ```
113
+
114
+ Remote commands (`go`, `scan`, `crawl`, `download`) are bound to the target host, rate-limited, and **refuse loopback/private
115
+ addresses by default**. For controlled local testing pass `--allow-private`.
116
+
117
+ ## What makes it different
118
+
119
+ | | Typical JS recon | JScope |
120
+ |---|---|---|
121
+ | Method | regex over bundles | tree-sitter AST, constant propagation, dead-branch detection |
122
+ | Output | flat list of URLs / strings | route, guard and role graph with route-to-API attribution |
123
+ | Findings | everything that matches | only evidence-backed candidates, scored deterministically |
124
+ | Triage | you sort it out | ranked "where to start testing", each point explained |
125
+ | Honesty | silent on limits | every finding states what it could *not* resolve |
126
+
127
+ Tools like LinkFinder, jsluice and SecretFinder are excellent at fast extraction, and JScope is built to sit alongside them,
128
+ adding structure and prioritization on top.
129
+
130
+ ## How it stays honest
131
+
132
+ ```text
133
+ analyzers propose ---> EvidenceEngine scores + dedups ---> you see Findings
134
+ (Candidate) (deterministic, explainable) (Finding)
135
+ ```
136
+
137
+ Analyzers can never emit a finding directly, only `Candidate`s backed by typed `Evidence`. That boundary keeps a noisy analyzer
138
+ (including community plugins) from polluting your output. Confidence means "this pattern exists and means what it looks like",
139
+ **not** "this is exploitable"; only the opt-in `confirm` / `verify` steps add runtime evidence. Details:
140
+ [docs/EVIDENCE_SCHEMA.md](docs/EVIDENCE_SCHEMA.md).
141
+
142
+ ## What it analyzes
143
+
144
+ 14 built-in analyzers: routes (React Router, Vue Router, Angular, Next.js), authentication and authorization patterns, storage and
145
+ token handling, GraphQL operations and schemas, OpenAPI specs (correlated both ways with client calls), service workers,
146
+ source maps, HTML forms/CSP/SRI, WASM modules, secrets, endpoints and framework detection.
147
+
148
+ Also included: workspaces with baseline diffing (`ws-scan`), optional AI explanations that never invent findings
149
+ ([docs/AI.md](docs/AI.md)), a plugin system with trust tiers ([docs/PLUGINS.md](docs/PLUGINS.md)), SARIF output for CI, and
150
+ opt-in runtime confirmation and browser observation.
151
+
152
+ ## Status and limitations
153
+
154
+ JScope is a **beta development tool, not a production scanner.** Be aware of these before relying on it:
155
+
156
+ - Symbol resolution is a per-file heuristic. There is no cross-file data flow yet, and import resolution handles relative
157
+ paths only (no `@/` or tsconfig aliases).
158
+ - Client-side authorization findings are observations, not vulnerabilities. A missing guard may live in a layout or on the server.
159
+ - Runtime confirmation is opt-in and narrow: GET/OPTIONS only, allow-listed hosts. It shows a route *responds*, not that it is *vulnerable*.
160
+ - The accuracy benchmark uses 12 synthetic fixtures; a real-world corpus is on the [roadmap](docs/ROADMAP.md).
161
+ - Network scope enforcement is not unified across every component and DNS pinning is not guaranteed on all paths. Read
162
+ [docs/SECURITY_LIMITATIONS.md](docs/SECURITY_LIMITATIONS.md). Plugins execute arbitrary Python.
163
+
164
+ **Only test systems you own or are explicitly authorized to assess.**
165
+
166
+ ## Development
167
+
168
+ ```bash
169
+ git clone https://github.com/LIME1Star/JScope && cd JScope
170
+ python -m venv .venv && . .venv/bin/activate
171
+ pip install -e ".[dev]"
172
+ pytest
173
+ python -m jscope benchmark --strict
174
+ ```
175
+
176
+ See [CHANGELOG.md](CHANGELOG.md) for release history and [docs/](docs/) for each subsystem. Issues and pull requests are welcome.
177
+
178
+ ## License
179
+
180
+ MIT, see [LICENSE](LICENSE).
@@ -0,0 +1,81 @@
1
+ jscope/__init__.py,sha256=6hfVa12Q-nXyUEXr6SyKpqPEDJW6vlRHyPxlA27PfTs,22
2
+ jscope/__main__.py,sha256=xXqap1rt7DrRbDGYcWAD7GqUexTx0sKJSjfny9R1vIY,360
3
+ jscope/assessment_engine.py,sha256=ttRUnEN0F-brCyniQGNlqGp4qE6S7jQNLkoJhSAjTkE,12164
4
+ jscope/assessment_reporting.py,sha256=z8bKq-s5r6fBYEFlp3Ok78gzlrTUTJko2crdiBDqLt8,3453
5
+ jscope/cli.py,sha256=Vn_Yf2_grHSMI2Fw19YquZiKYtE_f1Vn3vHvENf7Ocg,64096
6
+ jscope/config.py,sha256=SXNJxB1PjXtwepqe8XG-m4JDSELUlx8txdpFk6b_Pa8,2956
7
+ jscope/passive_discovery.py,sha256=Ch9-3M8sixr5DEFzOsWZJQtGFUA9Zr05ZDmfh7eG3_A,3901
8
+ jscope/pipeline.py,sha256=-ARrOhisI6buVO7eeIXV8JVnebipeII3hVR2SqU-BxQ,10445
9
+ jscope/security_transport.py,sha256=3FECDtBvVQHnWbAQM9qJ8ufW5x1Nr9PBJWle9Qs4sTM,13287
10
+ jscope/ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
+ jscope/ai/explain.py,sha256=ZX9BzmAOIatSqHIl3_LLQAna5YkHNeDTCxav5ZiteFg,8121
12
+ jscope/ai/providers.py,sha256=-s1SB6QbCmVmBIKbge8JqnU2KYV-EDhOiA2VghFRnC8,2701
13
+ jscope/analyzers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
+ jscope/analyzers/auth_analyzer.py,sha256=Uloat3fdWL0dddP8x8_eia4LIOI_WSvTQnAItQ1Nzvs,12047
15
+ jscope/analyzers/authorization_analyzer.py,sha256=Xhoka4kHI0UtesBZ95lcQPr0bAXgZvmodxyNtq4sb7w,12824
16
+ jscope/analyzers/base.py,sha256=bKgDAAL595quCP_2cdlKP2M21EMldrhVV0Gg_L0_Ca4,2515
17
+ jscope/analyzers/common.py,sha256=RE4JRQPabEJxcX4byph9qm8tfAc9jrDoLEPuyu0dndo,3116
18
+ jscope/analyzers/dataflow_analyzer.py,sha256=C_K28Vu67_seZXJos2FEIfRNp5wsIZDMzAbie3V8ocA,12094
19
+ jscope/analyzers/endpoint_analyzer.py,sha256=3SFKZYMx49-51T7mZgAICY6kIBU7I9OBGkbpgeow4QI,7064
20
+ jscope/analyzers/framework_detector.py,sha256=DLlVrfq5edu7qaf152An2VU8FUaH019-nO_mcca-954,3704
21
+ jscope/analyzers/graphql_analyzer.py,sha256=bm4qpvh_svjE7adR6Eyk-9DTEdBmuKErddet7uP8QoI,12792
22
+ jscope/analyzers/graphql_schema_analyzer.py,sha256=eB-YklGolngYdhLdQB44M4FiLWrjzQrsj_08uQzDKWM,8740
23
+ jscope/analyzers/html_analyzer.py,sha256=mhjEwfGQjnLAUe-5mkBtBd3LUnq47MfRNY0QiiTQRgI,12613
24
+ jscope/analyzers/manager.py,sha256=2hgUrQZRRoxPzAgX3HLtP4X_4QLZWjRed6Smst94d6M,5275
25
+ jscope/analyzers/openapi_analyzer.py,sha256=g2WibDF86bZO2JWlDN7fYrQmEaOhUY-KkNadRBC4gx4,18117
26
+ jscope/analyzers/router_analyzer.py,sha256=wlw70iePfFFLkSOsS4TZTMChn9a04RU0LeHAY7F4s48,26539
27
+ jscope/analyzers/secret_analyzer.py,sha256=71tsPuWT_OFXATz_3ej0BalsWYBvQj_W0eadOMTwmns,4633
28
+ jscope/analyzers/service_worker_analyzer.py,sha256=NQXAHJPIxOwxYsNitsQdQ5PqmAm56SjxEEpiDKMpB_M,9092
29
+ jscope/analyzers/source_map_analyzer.py,sha256=nbJQwn45yKpzznI0Poa7m7X4LQnrayVrxeBIl9TybhQ,5914
30
+ jscope/analyzers/storage_analyzer.py,sha256=C3WJzRzxHsv8htrpFePvJlxC7NHOpLIoUWFbt-OJDFw,6610
31
+ jscope/analyzers/wasm_analyzer.py,sha256=61amZluwjT9_erd8HS40CbS2FPos2IsMXDkR471r_yM,8467
32
+ jscope/benchmark/__init__.py,sha256=71nTSRIIq4BVGnOc7JIrrYpDNHdb74GSsI0QMaOjsw0,45
33
+ jscope/benchmark/fixtures.py,sha256=tGmqIzSyMGSgDxqHI_jAvskfpBpEbNjy5Xuk84YKD0A,7207
34
+ jscope/benchmark/runner.py,sha256=NomPzyoM4qRfOP1Iml5Rn2hcpN78yrbhspLrv6ZKGRw,6662
35
+ jscope/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
+ jscope/core/artifacts.py,sha256=kH3nMXzPVvCN_6ZUx1kWIHRwIDLMfRxztu_s3ndCecA,5113
37
+ jscope/core/cache.py,sha256=r5YRVoEJqzAECTmDhuVbV6IsIZ5ONdLMV_WTKQe9j_o,9840
38
+ jscope/core/classification.py,sha256=4CLOxOt6xbv3agJvCjIOScppE4DdWQEPPRSXoI6yS8o,2737
39
+ jscope/core/evidence.py,sha256=CpGyFGA-J2x-HyQDVxr4DI1UhMfgmLokJRyg5cEDE9s,18102
40
+ jscope/core/graph.py,sha256=TFUPNQ7Zn0ku5HJeG9ig61c1ZOjKD5Kfr58MO-DCH4M,8792
41
+ jscope/core/redact.py,sha256=jU4j_S768_fxMvEv7B5BCOy-mnQL3GifgRQ7wWTLAtI,3085
42
+ jscope/crawler/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
+ jscope/crawler/crawler.py,sha256=8oKnRkhlJgC7DiiOJoijIg_mWpVafOYlnKKTJvKGd3o,8026
44
+ jscope/dataflow/__init__.py,sha256=Cgm6c07LHjTEu8_k32li2wQJ8JPvr672HyLpGdwgIWc,94
45
+ jscope/dataflow/engine.py,sha256=AiwPUoci1ANJXTL2nZzcOnw8RR2j-AI90-4LbcTX3hk,82697
46
+ jscope/dataflow/modules.py,sha256=m3LcvYnQhmuojMgmTsEH1qNg4Vqd2VxG11zzm5Bpg44,9000
47
+ jscope/dataflow/rules.py,sha256=BmMz24CW1mYKnTP3yjUfojR7BDL-oZKA0WR33QbKv-8,8166
48
+ jscope/downloader/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
+ jscope/downloader/downloader.py,sha256=uooUDozake49BVEJa6jN7vaQBB70f1NGoSCsl7q9PsE,4449
50
+ jscope/parsing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
+ jscope/parsing/ast_engine.py,sha256=UcVH_vJmxmLyi5iS-2kv8ta5SRQ8SBat0TQX6BnNqvI,13640
52
+ jscope/parsing/graphql_schema.py,sha256=TqPnAEmivsrsWYBD-gnSh2GvHbfhAmCDdePBj-ecs18,6071
53
+ jscope/parsing/html.py,sha256=VS2BH64IIMAqSAb1sy1Smx4crYGIDyDqV0uvpEICdb0,2267
54
+ jscope/parsing/queries.py,sha256=nopp_NaBOhiOx_PIVmNJO7xm-4i__kE0tuaqJ-2M-eA,16161
55
+ jscope/parsing/wasm.py,sha256=xnJiwnrEIfYq0TR8qN40BlJema6LQ_fuiCMhiUQJ0rU,4766
56
+ jscope/plugin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
+ jscope/plugin/_worker.py,sha256=DVJRkP5-ED0LAN58J5zLyLVEbcffMCjd4TUBg3c7Bpc,10308
58
+ jscope/plugin/loader.py,sha256=pOiRE0MZTQLgVzGkhj_Hvw0LsHuX9UwcfMu83dU-CHs,10272
59
+ jscope/plugin/sandbox.py,sha256=inrgVN8nqkj86BBwvpY0PVqjo228CG7g5ffH7dnfGh8,9486
60
+ jscope/reporting/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
+ jscope/reporting/formats.py,sha256=rWTJt3tglEA7pQJQYjdI67089-CFsvxUMpipbGOYvTI,12851
62
+ jscope/reporting/human.py,sha256=ONaOpohGxLMRK6FjtSRkYNq6CIv3cHC7JIDHWwIFmPk,6445
63
+ jscope/reporting/json_report.py,sha256=ynuFo5r-1mn8kouPpHBh_wBMq5SriyqD7gpwt2ePdyM,1560
64
+ jscope/reporting/priority.py,sha256=G0WfFyKeoWZJPXiTRvC7q9RLqgWsBDvhgsq7PGxq4WU,5836
65
+ jscope/runtime/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
+ jscope/runtime/observe.py,sha256=RKUWOK905DKhCo2iHcdRtPbojVoyFH0Sb5iPY_5S-So,21781
67
+ jscope/runtime/prober.py,sha256=Dn7WS-2FjRLFhVW1yvodgP469nirrqFTqSjclWOKROg,13104
68
+ jscope/runtime/scope.py,sha256=BBLQGozg_PYEAmjN6vZgiSsqVVGP6NFXQsENeprgnbc,12246
69
+ jscope/verify/__init__.py,sha256=llVTlQz_rzq7ROsKITTFT7oDaRE-aZTH4iWQNIVRVPc,57
70
+ jscope/verify/engine.py,sha256=wZCUEB0B79w_Z39wNLmTIIYSHt-VKVoeaIdQJoMHeTA,18680
71
+ jscope/workspace/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
72
+ jscope/workspace/assessment.py,sha256=hFri7O0Va1J0t8UoThdfucFPwPvZbCXrT2HW8EltSJQ,5989
73
+ jscope/workspace/common.py,sha256=mTANh2yJ1l7H4gigA4FNxwLSXHlPqGQLAYNgqKNgXaY,714
74
+ jscope/workspace/diff.py,sha256=dS9qwIk3Ey7h2AeIUsNx7iWBd-kOx8EA8anFXA2lJek,7188
75
+ jscope/workspace/store.py,sha256=E2iyIdVEVIUcAdC6eEWpEigWwK1StU61YGmAntHMXpc,9937
76
+ jscope-0.4.2.dist-info/licenses/LICENSE,sha256=jHQ-r_C-jMR_L-ibOhzB9LZEkE1LSNwF8YQN6JyWi0c,1069
77
+ jscope-0.4.2.dist-info/METADATA,sha256=WiVutHRhMyPoGyKcWXA6aW5QxudXTeGkQ47BFpKXt-c,8208
78
+ jscope-0.4.2.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
79
+ jscope-0.4.2.dist-info/entry_points.txt,sha256=WZbGlWco6l1MfpykhcyXGgFgV5KqTIX6mLsnLQnW3-0,43
80
+ jscope-0.4.2.dist-info/top_level.txt,sha256=KNyxdpv7mXEdW1_8F20DKfjY7wLnHorHTY7TMsppIyk,7
81
+ jscope-0.4.2.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (84.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ jscope = jscope.cli:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Muhammed Ali
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.
@@ -0,0 +1 @@
1
+ jscope