@ossiq/cli-linux-x64 0.1.12 → 0.1.14
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.
- package/bin/ossiq/_internal/_cffi_backend.cpython-313-x86_64-linux-gnu.so +0 -0
- package/bin/ossiq/_internal/base_library.zip +0 -0
- package/bin/ossiq/_internal/cryptography/hazmat/bindings/_rust.abi3.so +0 -0
- package/bin/ossiq/_internal/cryptography-50.0.1.dist-info/METADATA +110 -0
- package/bin/ossiq/_internal/cryptography-50.0.1.dist-info/RECORD +122 -0
- package/bin/ossiq/_internal/cryptography-50.0.1.dist-info/WHEEL +5 -0
- package/bin/ossiq/_internal/cryptography-50.0.1.dist-info/licenses/LICENSE +3 -0
- package/bin/ossiq/_internal/cryptography-50.0.1.dist-info/licenses/LICENSE.APACHE +202 -0
- package/bin/ossiq/_internal/{semantic_version-2.10.0.dist-info/LICENSE → cryptography-50.0.1.dist-info/licenses/LICENSE.BSD} +14 -9
- package/bin/ossiq/_internal/cryptography-50.0.1.dist-info/sboms/cryptography-rust.cyclonedx.json +1365 -0
- package/bin/ossiq/_internal/cryptography-50.0.1.dist-info/sboms/sbom.json +43 -0
- package/bin/ossiq/_internal/keyring-25.7.0.dist-info/METADATA +554 -0
- package/bin/ossiq/_internal/keyring-25.7.0.dist-info/RECORD +40 -0
- package/bin/ossiq/_internal/{semantic_version-2.10.0.dist-info → keyring-25.7.0.dist-info}/WHEEL +1 -2
- package/bin/ossiq/_internal/keyring-25.7.0.dist-info/entry_points.txt +13 -0
- package/bin/ossiq/_internal/keyring-25.7.0.dist-info/licenses/LICENSE +18 -0
- package/bin/ossiq/_internal/keyring-25.7.0.dist-info/top_level.txt +1 -0
- package/bin/ossiq/_internal/lark/grammars/common.lark +59 -0
- package/bin/ossiq/_internal/lark/grammars/lark.lark +62 -0
- package/bin/ossiq/_internal/lark/grammars/python.lark +302 -0
- package/bin/ossiq/_internal/lark/grammars/unicode.lark +7 -0
- package/bin/ossiq/_internal/lark/py.typed +0 -0
- package/bin/ossiq/_internal/libpython3.13.so.1.0 +0 -0
- package/bin/ossiq/_internal/ossiq/data/SKILL.md +42 -16
- package/bin/ossiq/_internal/ossiq/domain/README.md +30 -4
- package/bin/ossiq/_internal/ossiq/solver/README.md +10 -3
- package/bin/ossiq/_internal/ossiq/strategy/README.md +20 -2
- package/bin/ossiq/_internal/ossiq/ui/html_templates/spa_app.html +1828 -1518
- package/bin/ossiq/_internal/ossiq/ui/renderers/export/README.md +103 -40
- package/bin/ossiq/_internal/ossiq/ui/renderers/export/schemas/export_schema_v1.6.json +1805 -0
- package/bin/ossiq/_internal/ossiq/ui/renderers/export/schemas/export_schema_v1.6_standard.json +1328 -0
- package/bin/ossiq/_internal/ossiq-0.1.14.dist-info/INSTALLER +1 -0
- package/bin/ossiq/_internal/ossiq-0.1.14.dist-info/METADATA +207 -0
- package/bin/ossiq/_internal/ossiq-0.1.14.dist-info/RECORD +13 -0
- package/bin/ossiq/_internal/ossiq-0.1.14.dist-info/REQUESTED +0 -0
- package/bin/ossiq/_internal/ossiq-0.1.14.dist-info/uv_cache.json +1 -0
- package/bin/ossiq/_internal/pysolvers.cpython-313-x86_64-linux-gnu.so +0 -0
- package/bin/ossiq/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/INSTALLER +1 -0
- package/bin/ossiq/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/METADATA +133 -0
- package/bin/ossiq/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/RECORD +21 -0
- package/bin/ossiq/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/REQUESTED +0 -0
- package/bin/ossiq/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/WHEEL +5 -0
- package/bin/ossiq/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/licenses/LICENSE +73 -0
- package/bin/ossiq/_internal/setuptools/_vendor/importlib_metadata-8.7.1.dist-info/top_level.txt +1 -0
- package/bin/ossiq/ossiq +0 -0
- package/package.json +1 -1
- package/bin/ossiq/_internal/ossiq-0.1.12.dist-info/METADATA +0 -385
- package/bin/ossiq/_internal/ossiq-0.1.12.dist-info/RECORD +0 -13
- package/bin/ossiq/_internal/ossiq-0.1.12.dist-info/uv_cache.json +0 -1
- package/bin/ossiq/_internal/semantic_version-2.10.0.dist-info/METADATA +0 -324
- package/bin/ossiq/_internal/semantic_version-2.10.0.dist-info/RECORD +0 -10
- package/bin/ossiq/_internal/semantic_version-2.10.0.dist-info/top_level.txt +0 -1
- package/bin/ossiq/_internal/wcwidth/textwrap.py,cover +0 -664
- /package/bin/ossiq/_internal/{ossiq-0.1.12.dist-info → cryptography-50.0.1.dist-info}/INSTALLER +0 -0
- /package/bin/ossiq/_internal/{ossiq-0.1.12.dist-info → cryptography-50.0.1.dist-info}/REQUESTED +0 -0
- /package/bin/ossiq/_internal/{semantic_version-2.10.0.dist-info → keyring-25.7.0.dist-info}/INSTALLER +0 -0
- /package/bin/ossiq/_internal/{semantic_version-2.10.0.dist-info → keyring-25.7.0.dist-info}/REQUESTED +0 -0
- /package/bin/ossiq/_internal/{ossiq-0.1.12.dist-info → ossiq-0.1.14.dist-info}/WHEEL +0 -0
- /package/bin/ossiq/_internal/{ossiq-0.1.12.dist-info → ossiq-0.1.14.dist-info}/direct_url.json +0 -0
- /package/bin/ossiq/_internal/{ossiq-0.1.12.dist-info → ossiq-0.1.14.dist-info}/entry_points.txt +0 -0
- /package/bin/ossiq/_internal/{ossiq-0.1.12.dist-info → ossiq-0.1.14.dist-info}/licenses/AUTHORS +0 -0
- /package/bin/ossiq/_internal/{ossiq-0.1.12.dist-info → ossiq-0.1.14.dist-info}/licenses/LICENSE +0 -0
- /package/bin/ossiq/_internal/{ossiq-0.1.12.dist-info → ossiq-0.1.14.dist-info}/uv_build.json +0 -0
|
@@ -15,6 +15,8 @@ solver/
|
|
|
15
15
|
├── problem.py SolverProblem, CandidateVersion, PackageConstraint
|
|
16
16
|
├── universe.py SolvablePool — builds SolverProblem from registry
|
|
17
17
|
├── version_matchers.py npm semver + PEP 440 range matching — raw constraint → bool
|
|
18
|
+
├── npm_range.py npm range grammar (Lark) + node-semver's rewrite rules → comparator sets
|
|
19
|
+
├── pep508.py Which declared PyPI requirements apply to a project (extras + environment markers)
|
|
18
20
|
├── encoder.py ConstraintEncoder — produces EncodedProblem (WCNF)
|
|
19
21
|
├── weights.py Constraint weight constants + semver_rank_weight()
|
|
20
22
|
└── dependencies_solver.py Public API: solve_direct(), solve_transitive()
|
|
@@ -51,7 +53,8 @@ deps / transitive_records
|
|
|
51
53
|
SolvablePool.build() universe.py
|
|
52
54
|
– deduplicates by canonical_name (highest ConstraintType priority wins)
|
|
53
55
|
– fetches candidates from warm registry cache
|
|
54
|
-
– filters yanked, unpublished, prerelease (unless allowed)
|
|
56
|
+
– filters yanked, unpublished, prerelease (unless allowed), and deprecated releases when
|
|
57
|
+
allow_deprecated=False (only `ossiq add` choosing a live package passes that)
|
|
55
58
|
– sorts candidates descending (newest first)
|
|
56
59
|
– stamps has_cve=True on versions any of the package's CVEs affects (cves_by_package;
|
|
57
60
|
judged by version_matchers.cve_affects_version, ranges included)
|
|
@@ -85,7 +88,7 @@ greedily; the pluggable RC2 driver **minimises** total violated soft cost exactl
|
|
|
85
88
|
| L1 | Hard | — | Version outside declared `version_constraint` (PEP 440 or npm semver) |
|
|
86
89
|
| L2 | Soft-Hard | `W_ENGINE = 100_000` | Engine mismatch (`python`/`node` requirement vs `engine_context`) |
|
|
87
90
|
| L3 | Soft | `max(80_000 − rank × 5_000, 1_000)` | Semver-rank preference — rank 0 = latest eligible semver |
|
|
88
|
-
| L4 | Soft | `W_DEPRECATED = 10_000` | Deprecated flag — penalty on selection |
|
|
91
|
+
| L4 | Soft | `W_DEPRECATED = 10_000` | Deprecated flag — penalty on selection. A deprecated release still wins over a clean one that ranks two or more places below it (2 × 5 000 = 10 000), and the penalty is the same for every candidate when all are deprecated. A caller that must never get a deprecated release passes `allow_deprecated=False`, which removes them before this level applies |
|
|
89
92
|
| L5 | Hard | — | CVE-affected version |
|
|
90
93
|
| L6 | Soft-Hard | `W_VERY_FRESH = 100_000` | Published < 7 days ago — both direct and transitive passes |
|
|
91
94
|
| L7 | — | *(reserved)* | Health score — not implemented |
|
|
@@ -116,7 +119,11 @@ Structural clauses per package (encoder):
|
|
|
116
119
|
|
|
117
120
|
### Version constraint dispatch (encoder.py)
|
|
118
121
|
|
|
119
|
-
`version_satisfies_constraint(version, constraint, registry)` (in `version_matchers.py`) dispatches directly to PyPI (PEP 440) or npm (semver) based on the `ProjectPackagesRegistry` passed in — no exception-based fallback.
|
|
122
|
+
`version_satisfies_constraint(version, constraint, registry)` (in `version_matchers.py`) dispatches directly to PyPI (PEP 440) or npm (semver) based on the `ProjectPackagesRegistry` passed in — no exception-based fallback. npm ranges go through `npm_range.py` — a Lark grammar for the syntax plus node-semver's own rewrite rules, held to node-semver's verdicts by `tests/solver/node_semver_conformance.json`, so a partial version (`"14"`) is the X-range `14.x` exactly as npm reads it. Unparseable constraints pass through (`True`) — unknown format is never a hard block — and so does a blank one: PyPI publishes an unconstrained requirement as an empty specifier.
|
|
123
|
+
|
|
124
|
+
### Which requirements apply (pep508.py)
|
|
125
|
+
|
|
126
|
+
A PyPI release declares requirements gated on extras (`oauthlib<4; extra == "socialaccount"`) and on environment markers (`tomli; python_version < "3.11"`). Whether one applies depends on the project, so `RequirementScope` (`domain/`) carries the extras the project enables per package and its Python floor, and `applicable_requirements()` keeps a requirement when its marker holds in at least one environment the project can be installed into — the same stance uv's universal resolution takes. The registry (`package_version_requires`), the candidate `requires` built in `universe.py`, and the enrichment of lockfile edges all read requirements through it; the scan sets the scope once, from the lockfile's `extra = [...]` edges and `requires-python`.
|
|
120
127
|
|
|
121
128
|
---
|
|
122
129
|
|
|
@@ -62,7 +62,7 @@ A strategy is not one dial, it is two, kept separate on purpose:
|
|
|
62
62
|
|
|
63
63
|
| Tier | Base reach | Escalates to `LATEST` when... |
|
|
64
64
|
|---|---|---|
|
|
65
|
-
| `security` | in-range | an admitted motive is `exploitable_cve
|
|
65
|
+
| `security` | in-range | an admitted motive is `exploitable_cve`; the pick leaves the range only when no in-range version clears the CVE |
|
|
66
66
|
| `deprecation` | in-range | an admitted motive is `exploitable_cve` or `end_of_life` |
|
|
67
67
|
| `standard` | in-range | same as above |
|
|
68
68
|
| `latest` | latest | already maximal |
|
|
@@ -77,7 +77,7 @@ A strategy is not one dial, it is two, kept separate on purpose:
|
|
|
77
77
|
|---|---|---|
|
|
78
78
|
| `security` | no target (no CVE) | `2.32.0` — nearest CVE-clear version |
|
|
79
79
|
| `deprecation` | no target | `2.32.0` |
|
|
80
|
-
| `standard` | `1.10.
|
|
80
|
+
| `standard` | `1.10.26` — newest in the installed major, reported but not written (`requires_widening=True`) | `2.34.2` — newest, already CVE-clear |
|
|
81
81
|
| `latest` | `2.13.5` — widens the pin, `requires_widening=True` | `2.34.2` |
|
|
82
82
|
| `cutting-edge` | `2.13.5` (or newer, if a prerelease exists) | `2.34.2` |
|
|
83
83
|
|
|
@@ -109,6 +109,10 @@ A strategy is not one dial, it is two, kept separate on purpose:
|
|
|
109
109
|
- **`escalation`** — set when reach was pushed past the tier's base `MAX_REACH` (a CVE or
|
|
110
110
|
end-of-life motive escalated it), or when every reachable candidate still carries a qualifying
|
|
111
111
|
CVE and the newest was picked anyway. Never silently "stay put".
|
|
112
|
+
- **`widening_authorized`** — an escalating motive carried the pick past the tier's base
|
|
113
|
+
`MAX_REACH` and some reachable version clears the CVE. `plan` lists the pick as an update instead
|
|
114
|
+
of holding it under *Requires constraint widening*; `apply` still confirms the widening, unless
|
|
115
|
+
`--yes` is given. Rule 8's drift-only widening never sets it.
|
|
112
116
|
|
|
113
117
|
---
|
|
114
118
|
|
|
@@ -157,6 +161,20 @@ Filtering fresh candidates out of the ladder here makes one decision serve every
|
|
|
157
161
|
the whole point of rule 5 in the root `CLAUDE.md`. The downstream hold survives as a backstop for
|
|
158
162
|
transitive recommendations, which come from the solver's *soft* freshness penalty.
|
|
159
163
|
|
|
164
|
+
**Why is the package manager's release cutoff a second filter rather than a longer cooldown?**
|
|
165
|
+
uv's `exclude-newer` (and its npm-side counterparts) looks like a cooldown, but it is a different
|
|
166
|
+
kind of rule. OSS IQ's cooldown is advice: one number per project, and an exploitable CVE or
|
|
167
|
+
end-of-life outranks it. The package manager's cutoff is enforcement: it can differ per package
|
|
168
|
+
or exempt one outright, it may be a fixed instant rather than a span, and the installer refuses a
|
|
169
|
+
release past it whatever OSS IQ recommends. It also binds only on a *move*, since uv leaves an
|
|
170
|
+
already-locked release past the cutoff alone. Folding the two into `max(days)` loses the
|
|
171
|
+
per-package rules, and lets an escalating motive "bypass" a rule `apply` cannot bypass. So
|
|
172
|
+
`select_target` takes the cutoff as its own parameter and applies it ahead of the cooldown and
|
|
173
|
+
outside `escalate`. A hold it causes carries `enforced_by`, so surfaces name uv rather than OSS
|
|
174
|
+
IQ. Both rules always apply, so the stricter one wins. The cutoff is not dropped from the registry
|
|
175
|
+
either: facts like `latest_version` and drift stay true, and the installed version stays visible
|
|
176
|
+
when it postdates the cutoff.
|
|
177
|
+
|
|
160
178
|
**Why may only `latest`/`cutting-edge` cross to ESM-only, and only on a `require(esm)` Node?**
|
|
161
179
|
For a CommonJS project an ESM-only release is a break whatever its version number:
|
|
162
180
|
`require()` of it fails outright below Node 20.19/22.12, and above that it returns the module
|