ixt-cli 0.8.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.
- ixt/__init__.py +8 -0
- ixt/__main__.py +8 -0
- ixt/backends/__init__.py +1 -0
- ixt/backends/binary.py +935 -0
- ixt/backends/binary_resolver.py +307 -0
- ixt/backends/node.py +490 -0
- ixt/backends/python.py +234 -0
- ixt/cli/__init__.py +31 -0
- ixt/cli/argparse_completion.py +557 -0
- ixt/cli/cmd_apply.py +404 -0
- ixt/cli/cmd_cache.py +86 -0
- ixt/cli/cmd_config.py +295 -0
- ixt/cli/cmd_info.py +116 -0
- ixt/cli/cmd_install.py +508 -0
- ixt/cli/cmd_misc.py +261 -0
- ixt/cli/cmd_registry.py +35 -0
- ixt/cli/cmd_upgrade.py +336 -0
- ixt/cli/commands.py +70 -0
- ixt/cli/parser.py +555 -0
- ixt/cli/render.py +85 -0
- ixt/config/__init__.py +5 -0
- ixt/config/asset_index.py +305 -0
- ixt/config/asset_pattern_cache.py +87 -0
- ixt/config/env_policy.py +340 -0
- ixt/config/flags.py +29 -0
- ixt/config/fs_policy.py +17 -0
- ixt/config/heuristics.py +465 -0
- ixt/config/models.py +176 -0
- ixt/config/registry.py +145 -0
- ixt/config/settings.py +173 -0
- ixt/config/setup_toml.py +179 -0
- ixt/config/toml.py +416 -0
- ixt/core/__init__.py +16 -0
- ixt/core/apply.py +564 -0
- ixt/core/apply_actions.py +106 -0
- ixt/core/backend.py +187 -0
- ixt/core/bootstrap.py +410 -0
- ixt/core/cache.py +332 -0
- ixt/core/discover.py +150 -0
- ixt/core/doctor.py +591 -0
- ixt/core/export.py +419 -0
- ixt/core/expose.py +350 -0
- ixt/core/extract.py +261 -0
- ixt/core/hooks.py +182 -0
- ixt/core/identity.py +148 -0
- ixt/core/inject.py +143 -0
- ixt/core/install.py +509 -0
- ixt/core/install_local.py +229 -0
- ixt/core/locks.py +54 -0
- ixt/core/pathlink.py +86 -0
- ixt/core/resolution_stats.py +191 -0
- ixt/core/resolve.py +150 -0
- ixt/core/resolve_cache.py +185 -0
- ixt/core/runtimes.py +192 -0
- ixt/core/save.py +237 -0
- ixt/core/setup_completions.py +11 -0
- ixt/core/setup_path.py +368 -0
- ixt/core/upgrade.py +596 -0
- ixt/data/__init__.py +10 -0
- ixt/data/asset_index.json +574 -0
- ixt/data/heuristics.toml +98 -0
- ixt/data/registry.toml +71 -0
- ixt/libs/__init__.py +3 -0
- ixt/libs/constants.py +4 -0
- ixt/libs/fmt.py +108 -0
- ixt/libs/logger.py +109 -0
- ixt/libs/output.py +25 -0
- ixt/libs/req_spec.py +115 -0
- ixt/libs/semver.py +149 -0
- ixt/libs/shell.py +126 -0
- ixt/libs/style.py +238 -0
- ixt/net/__init__.py +1 -0
- ixt/net/github_api.py +158 -0
- ixt/net/gitlab_api.py +149 -0
- ixt/net/http.py +194 -0
- ixt/net/npm.py +24 -0
- ixt/net/pypi.py +26 -0
- ixt/net/source.py +163 -0
- ixt/platform/__init__.py +131 -0
- ixt/platform/win.py +68 -0
- ixt_cli-0.8.0.dist-info/METADATA +294 -0
- ixt_cli-0.8.0.dist-info/RECORD +84 -0
- ixt_cli-0.8.0.dist-info/WHEEL +4 -0
- ixt_cli-0.8.0.dist-info/entry_points.txt +2 -0
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ixt-cli
|
|
3
|
+
Version: 0.8.0
|
|
4
|
+
Summary: Universal CLI tool isolator - manage Python, Node, and binary tools with per-tool isolation
|
|
5
|
+
Project-URL: Homepage, https://gitlab.com/pytgaen-group/ixt
|
|
6
|
+
Project-URL: Repository, https://gitlab.com/pytgaen-group/ixt.git
|
|
7
|
+
Project-URL: Issues, https://gitlab.com/pytgaen-group/ixt/-/issues
|
|
8
|
+
Project-URL: Documentation, https://gitlab.com/pytgaen-group/ixt#readme
|
|
9
|
+
Author-email: Gaëtan Montury <10528250-pytgaen@users.noreply.gitlab.com>
|
|
10
|
+
License: MIT
|
|
11
|
+
Keywords: cli,github,isolation,npm,package-manager,pypi,tool
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Operating System :: OS Independent
|
|
17
|
+
Classifier: Programming Language :: Python
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
24
|
+
Classifier: Topic :: Software Development
|
|
25
|
+
Classifier: Topic :: Utilities
|
|
26
|
+
Requires-Python: >=3.10
|
|
27
|
+
Description-Content-Type: text/markdown
|
|
28
|
+
|
|
29
|
+
<p align="center">
|
|
30
|
+
<img src="assets/ixt.jpg" alt="ixt" width="600">
|
|
31
|
+
</p>
|
|
32
|
+
|
|
33
|
+
<h1 align="center">ixt — Universal CLI Tool Isolator</h1>
|
|
34
|
+
|
|
35
|
+
<p align="center">
|
|
36
|
+
<a href="https://gitlab.com/pytgaen-group/ixt/-/releases"><img src="https://img.shields.io/gitlab/v/release/pytgaen-group/ixt?label=release" alt="Release"></a>
|
|
37
|
+
<a href="https://gitlab.com/pytgaen-group/ixt/-/pipelines"><img src="https://img.shields.io/gitlab/pipeline-status/pytgaen-group/ixt?branch=main" alt="Pipeline"></a>
|
|
38
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="License: MIT"></a>
|
|
39
|
+
<img src="https://img.shields.io/badge/python-3.10%2B-blue.svg" alt="Python 3.10+">
|
|
40
|
+
</p>
|
|
41
|
+
|
|
42
|
+
<p align="center">
|
|
43
|
+
<img src="assets/wip.jpg" alt="Work in Progress" width="300">
|
|
44
|
+
</p>
|
|
45
|
+
|
|
46
|
+
**One CLI for Python, Node, and binary tools — each in its own isolated env.**
|
|
47
|
+
**Optional Linux runtime policy can restrict env vars and filesystem access per tool.**
|
|
48
|
+
|
|
49
|
+
*Zero third-party deps. Zero system pollution. One command, any ecosystem.*
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
ixt tool install ruff # Python (PyPI)
|
|
53
|
+
ixt tool install @anthropic-ai/claude-code # Node (npm)
|
|
54
|
+
ixt tool install ripgrep # Binary (GitHub — via built-in registry)
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Each tool gets its own isolated environment. Only the binaries you choose are exposed to your PATH.
|
|
58
|
+
|
|
59
|
+
## 📥 Install
|
|
60
|
+
|
|
61
|
+
From PyPI. The published package is `ixt-cli`; it installs the `ixt` command.
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# One-shot via uvx (requires uv)
|
|
65
|
+
uvx --from ixt-cli==0.7.0 ixt --help
|
|
66
|
+
|
|
67
|
+
# Persistent install via uv tool
|
|
68
|
+
uv tool install ixt-cli==0.7.0
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Or from source:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
git clone https://gitlab.com/pytgaen-group/ixt.git && cd ixt
|
|
75
|
+
uv tool install -e .
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Then add `$IXT_HOME/installed/bin` to your PATH:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
ixt setup path
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Integrity verification
|
|
85
|
+
|
|
86
|
+
Release tags are SSH-signed. Installing from PyPI pins the published package
|
|
87
|
+
version but does not verify the Git tag signature locally. Use the clone flow
|
|
88
|
+
when you want to verify the signed release before installing:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
# Verify the signed tag (requires the maintainer's SSH public key in git's allowed_signers)
|
|
92
|
+
git clone https://gitlab.com/pytgaen-group/ixt.git && cd ixt
|
|
93
|
+
git fetch --tags
|
|
94
|
+
git verify-tag v0.7.0
|
|
95
|
+
git checkout --detach v0.7.0
|
|
96
|
+
uv tool install .
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
A valid tag signature means the checked-out source matches the maintainer-signed release tag.
|
|
100
|
+
|
|
101
|
+
## 🚀 Quick Start
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
# Install tools from 3 ecosystems
|
|
105
|
+
ixt tool install ruff # Python linter
|
|
106
|
+
ixt tool install @google/gemini-cli # Node CLI
|
|
107
|
+
ixt tool install sharkdp/fd # GitHub binary
|
|
108
|
+
|
|
109
|
+
# List installed tools
|
|
110
|
+
ixt tool list
|
|
111
|
+
# ruff 0.5.0 pypi [ruff]
|
|
112
|
+
# gemini-cli 0.1.12 npm [gemini]
|
|
113
|
+
# fd 10.2.0 github [fd]
|
|
114
|
+
|
|
115
|
+
# Upgrade
|
|
116
|
+
ixt tool upgrade ruff
|
|
117
|
+
ixt tool upgrade --all
|
|
118
|
+
|
|
119
|
+
# Uninstall
|
|
120
|
+
ixt tool uninstall fd
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## ⚙️ How It Works
|
|
124
|
+
|
|
125
|
+
ixt auto-detects the backend from the package name:
|
|
126
|
+
|
|
127
|
+
| Format | Backend | Example |
|
|
128
|
+
| ------------- | --------------- | ------------------------ |
|
|
129
|
+
| `name` | PyPI (Python) | `ruff`, `mypy`, `httpie` |
|
|
130
|
+
| `@scope/name` | npm (Node) | `@google/gemini-cli` |
|
|
131
|
+
| `owner/repo` | GitHub Releases | `BurntSushi/ripgrep` |
|
|
132
|
+
|
|
133
|
+
Each tool is installed in its own isolated environment (`$IXT_HOME/installed/envs/<tool>/`), and only the requested binaries are exposed in `$IXT_HOME/installed/bin/`.
|
|
134
|
+
|
|
135
|
+
For GitHub Releases, ixt learns each tool's asset-URL template on the first install and caches it in `$IXT_CACHE_HOME/metadata/asset_patterns.json`. Subsequent installs and upgrades resolve the latest tag via a plain 302 on `github.com/.../releases/latest` and download directly from the CDN — **zero calls to `api.github.com`**, no rate limit, no token required. If a maintainer ever renames their release assets, the cache entry is auto-invalidated and ixt falls back to the full release API to relearn.
|
|
136
|
+
|
|
137
|
+
### Force a backend
|
|
138
|
+
|
|
139
|
+
Use namespace prefixes:
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
ixt tool install @pypi:ruff
|
|
143
|
+
ixt tool install @npm:prettier
|
|
144
|
+
ixt tool install @gh:BurntSushi/ripgrep
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## 🛡️ Runtime policy
|
|
148
|
+
|
|
149
|
+
Dependency isolation is the baseline — but ixt also lets you control **what each tool can see at runtime**: which environment variables it receives, which filesystem paths it can read or write. This is a runtime policy for commands launched through ixt shims, not a sandbox for install-time package-manager scripts. If the install step itself is untrusted, use a disposable VM/container/user.
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
# Avoid passing secrets in the runtime environment
|
|
153
|
+
ixt tool config some-cli env base os-common
|
|
154
|
+
ixt tool config some-cli env allow '*RUFF*'
|
|
155
|
+
|
|
156
|
+
# Restrict filesystem at runtime: read-only host, hide ~/.aws and ~/.ssh
|
|
157
|
+
ixt tool config some-cli fs base app-common
|
|
158
|
+
ixt tool config some-cli fs scratch ~/.aws ~/.ssh
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
When a policy is active, the PATH shim becomes a small Python wrapper that — when [bubblewrap](https://github.com/containers/bubblewrap) is installed — runs the tool with PID isolation and a private `/proc`. The filtered env reaches the tool, and `/proc/$PPID/environ` reads from inside cannot recover the host secrets. Filesystem policy also requires bwrap. Without bwrap, env policy still cleans the env reaching the tool but `/proc` reads remain exfiltrable — the shim warns once per session in this **degraded "hygiene-only" mode**. Reset the policy and you're back to a direct symlink with zero overhead.
|
|
162
|
+
|
|
163
|
+
The policy is replayable: declare `env_base`, `env_allow`, `fs_scratch`, etc. inside `ixt.toml` and `ixt tool apply` reproduces it on any machine. Use `IXT_SHIM_DEBUG=1` to dump the effective env, `IXT_POLICY_QUIET=1` to silence the degraded-mode warning, `IXT_DISABLE_BWRAP=1` to force degraded mode for debugging.
|
|
164
|
+
|
|
165
|
+
> ⚠️ **Linux only for now.** Enforcement relies on POSIX `execve` and Linux namespaces. On macOS/Windows the policy is saved to `ixt.json` but **not enforced at runtime** — the tool runs with the full environment.
|
|
166
|
+
> Install [bubblewrap](https://github.com/containers/bubblewrap) for **effective env/fs enforcement**: `sudo apt install bubblewrap` / `sudo dnf install bubblewrap` / `sudo pacman -S bubblewrap` / `sudo apk add bubblewrap`. The env axis runs without it but only as a hygiene measure (cleans logs/traces); the fs axis requires it and errors out otherwise. Network isolation is not implemented yet.
|
|
167
|
+
> This is not a general malware sandbox.
|
|
168
|
+
|
|
169
|
+
[Full policy reference →](https://gitlab.com/pytgaen-group/ixt/-/blob/main/docs/policy/index.md)
|
|
170
|
+
|
|
171
|
+
## 📚 Built-in Registry
|
|
172
|
+
|
|
173
|
+
ixt ships with a built-in registry that maps common tool names to their source. No need to remember the GitHub path:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
ixt tool install ripgrep # resolves to @gh:BurntSushi/ripgrep
|
|
177
|
+
ixt tool install fd # resolves to @gh:sharkdp/fd
|
|
178
|
+
ixt tool install bat # resolves to @gh:sharkdp/bat
|
|
179
|
+
ixt tool install lazygit # resolves to @gh:jesseduffield/lazygit
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
The registry currently includes 50+ popular tools (ripgrep, fd, bat, fzf, jq, delta, starship, zellij, helix, nushell, etc.). For a simple name, ixt checks the registry first and falls back to PyPI when no registry entry matches.
|
|
183
|
+
|
|
184
|
+
You can add your own entries in `$IXT_HOME/config/registry.toml`:
|
|
185
|
+
|
|
186
|
+
```toml
|
|
187
|
+
[tools]
|
|
188
|
+
mytool = "@gh:owner/repo"
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
For team/project overlays, point `IXT_REGISTRY` at one or more local registry files separated by `;`:
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
export IXT_REGISTRY="/org/registry.toml;/project/registry.toml"
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
## 📌 Version pinning
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
ixt tool install sharkdp/fd@10.2.0 # exact version
|
|
201
|
+
ixt tool install sharkdp/fd@10 # latest 10.x.x
|
|
202
|
+
ixt tool install ruff>=0.5.0 # PEP 508 (Python)
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## 🧰 Commands
|
|
206
|
+
|
|
207
|
+
| Command | Description |
|
|
208
|
+
| ---------------------------------------------- | --------------------------------------------------------------------- |
|
|
209
|
+
| `ixt tool add <pkg>` | Add a tool to ixt.toml without installing |
|
|
210
|
+
| `ixt tool install <pkg>` | Install a tool in isolation |
|
|
211
|
+
| `ixt tool install <pkg> --bare` | Install the env without exposing any binary |
|
|
212
|
+
| `ixt tool uninstall <pkg>` | Remove a tool |
|
|
213
|
+
| `ixt tool list` | List installed tools |
|
|
214
|
+
| `ixt tool info <pkg>` | Show tool details |
|
|
215
|
+
| `ixt tool upgrade <pkg>` | Upgrade a tool |
|
|
216
|
+
| `ixt tool upgrade --all` | Upgrade all tools |
|
|
217
|
+
| `ixt tool apply` | Sync tools from declarative config |
|
|
218
|
+
| `ixt tool export` | Export installed tools as ixt.toml (stdout), preserves install intent |
|
|
219
|
+
| `ixt asset-index export` | Export portable binary-resolution metadata as JSON |
|
|
220
|
+
| `ixt tool config <pkg> expose <rules...>` | Change exposed binaries |
|
|
221
|
+
| `ixt tool config <pkg> inject <dep>` | Inject a package into the tool's env |
|
|
222
|
+
| `ixt tool config <pkg> uninject <dep>` | Remove an injected package |
|
|
223
|
+
| `ixt tool config __all__ expose <rules...>` | Re-expose every installed tool |
|
|
224
|
+
| `ixt tool shell <pkg>` | Open a subshell in tool's env |
|
|
225
|
+
| `ixt tool where <pkg>` | Print the tool env path |
|
|
226
|
+
| `ixt environment [--sizes]` | Show ixt configuration, paths, and optional storage sizes |
|
|
227
|
+
| `ixt doctor` | Check ixt health (runtimes, PATH, caches) |
|
|
228
|
+
| `ixt cache info` | Show cache paths and sizes |
|
|
229
|
+
| `ixt cache prune` | Keep current + previous indexed download artifacts per repository |
|
|
230
|
+
| `ixt cache clear {downloads,metadata,tmp,all}` | Wipe cache(s); never touches installed tools |
|
|
231
|
+
| `ixt runtime info` | Show ixt-managed runtime state |
|
|
232
|
+
| `ixt runtime prune [--all]` | Remove unused or all ixt-managed runtimes |
|
|
233
|
+
| `ixt setup path` | Add `$IXT_HOME/installed/bin` to PATH |
|
|
234
|
+
| `ixt setup completions --shell zsh` | Print shell completion code for ixt |
|
|
235
|
+
|
|
236
|
+
## 🏗️ Architecture
|
|
237
|
+
|
|
238
|
+
```
|
|
239
|
+
$IXT_HOME/ # default ~/.local/share/ixt (respects $XDG_DATA_HOME)
|
|
240
|
+
├── config/
|
|
241
|
+
│ ├── ixt.toml
|
|
242
|
+
│ ├── registry.toml
|
|
243
|
+
│ └── heuristics.toml
|
|
244
|
+
└── installed/
|
|
245
|
+
├── bin/ # PATH-exposed shims
|
|
246
|
+
├── envs/ # isolated environments
|
|
247
|
+
│ ├── ruff/ # Python venv
|
|
248
|
+
│ ├── gemini-cli/ # Node node_modules
|
|
249
|
+
│ └── ripgrep/ # extracted binary
|
|
250
|
+
└── runtimes/ # auto-bootstrapped: uv, bun
|
|
251
|
+
|
|
252
|
+
$IXT_CACHE_HOME/ # default ~/.cache/ixt (respects $XDG_CACHE_HOME)
|
|
253
|
+
├── downloads/ # downloaded archives and runtime payloads
|
|
254
|
+
├── metadata/ # resolve cache, asset templates, downloads index
|
|
255
|
+
└── tmp/ # ixt-owned temporary files
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
**Zero dependencies.** ixt uses Python stdlib only — no PyPI packages. `bun` is auto-downloaded on first Node install. `uv` is typically already on your PATH (you used it to install ixt), with an auto-download fallback to `$IXT_HOME/installed/runtimes/uv` if missing.
|
|
259
|
+
|
|
260
|
+
## 📊 How ixt compares
|
|
261
|
+
|
|
262
|
+
| | uv tool | pipx | npm -g | aqua | mise | proto | **ixt** |
|
|
263
|
+
| ------------------------ | ------- | ---- | ------ | ---- | --------- | ----- | ------- |
|
|
264
|
+
| Python tools (PyPI) | ✅ | ✅ | — | — | ✅ (pipx) | — | ✅ |
|
|
265
|
+
| Node tools (npm) | — | — | ✅ | — | ✅ (npm) | — | ✅ |
|
|
266
|
+
| GitHub Releases binaries | — | — | — | ✅ | ✅ (ubi) | ~ | ✅ |
|
|
267
|
+
| Dependency isolation | ✅ | ✅ | ❌ | — | partial | — | ✅ |
|
|
268
|
+
| Fine-grained exposure | — | — | — | — | — | — | ✅ |
|
|
269
|
+
| Runtime policy (env+fs) | — | — | — | — | — | — | ✅ |
|
|
270
|
+
| Bootstrap from scratch | — | — | — | — | curl | curl | ✅ |
|
|
271
|
+
| Declarative config | — | — | — | YAML | TOML | TOML | TOML |
|
|
272
|
+
|
|
273
|
+
ixt is **not** a runtime version manager (mise, proto, asdf cover that). It manages the **last mile**: install, isolate, expose and group CLI tools across three ecosystems.
|
|
274
|
+
|
|
275
|
+
## 🛠️ Development
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
git clone https://gitlab.com/pytgaen-group/ixt.git && cd ixt
|
|
279
|
+
uv sync --group dev
|
|
280
|
+
|
|
281
|
+
uv run pytest # test suite
|
|
282
|
+
uv run ruff check src/ tests/ # lint
|
|
283
|
+
uv run ruff format src/ tests/ # format
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
## 🤝 Contributing
|
|
287
|
+
|
|
288
|
+
Development happens on **GitLab**: <https://gitlab.com/pytgaen-group/ixt>. The GitHub repository (if present) is a **read-only mirror** — please open issues and merge requests on GitLab.
|
|
289
|
+
|
|
290
|
+
Bug reports and reproduction recipes are welcome. See [`CONTRIBUTING.md`](CONTRIBUTING.md) for details, or open an issue to start a discussion.
|
|
291
|
+
|
|
292
|
+
## 📄 License
|
|
293
|
+
|
|
294
|
+
MIT
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
ixt/__init__.py,sha256=AyoVqI1XY3uk7PnZSbMLLGvNFHSWOQmC8-MOeBS8UTc,179
|
|
2
|
+
ixt/__main__.py,sha256=i4Ef_MsZ2RraaVLvl_IWl8M5Vfopmd0QfWOJT0Am0-M,120
|
|
3
|
+
ixt/backends/__init__.py,sha256=9h9OPSQwEQ5KUGeaMN4xCcw16ypZ8nWuwvyFRFpP7OI,55
|
|
4
|
+
ixt/backends/binary.py,sha256=MAJrUo8vvwc0WMYEbpxfP9L_NuTWR2XI2I01WBIluLw,32886
|
|
5
|
+
ixt/backends/binary_resolver.py,sha256=E9k_hN8WCqax7-5GLuaSiMv6HonVqALn-P7WJP78y1s,10535
|
|
6
|
+
ixt/backends/node.py,sha256=GKOBv7Tp8lt4gQzkTf7Zkhont5OswtrmrBp6PiPzfdo,16870
|
|
7
|
+
ixt/backends/python.py,sha256=8vFLdAmxw8u94AxUCizAvTLp9O5GmjpHTuyyuPo6hwU,8388
|
|
8
|
+
ixt/cli/__init__.py,sha256=M8QoOX8pxpPNvgBQh26g7KtF3S2yYBOx54_I9r3MrDo,731
|
|
9
|
+
ixt/cli/argparse_completion.py,sha256=RUuqu2xzsx5KdxORX8ZljN0En7wsb-pKMed2hmsfA0Q,18014
|
|
10
|
+
ixt/cli/cmd_apply.py,sha256=QaaeK5r0e8V0fztJcZUSbR8wvB-aLXViKUnhBIhFOwc,14074
|
|
11
|
+
ixt/cli/cmd_cache.py,sha256=p6P7-KNTYd2HKRFFJTLnn_kQL0hpRmpwYTXdNrXZw98,2631
|
|
12
|
+
ixt/cli/cmd_config.py,sha256=8Sp_FaoD7UUHTVyJ2gE9SxPwEGe9t3iimpdAXX4Lt_A,9945
|
|
13
|
+
ixt/cli/cmd_info.py,sha256=-o2X6EQBV1AdMaGepE9muTcAwonb1HIPGCPonea82J8,3810
|
|
14
|
+
ixt/cli/cmd_install.py,sha256=Roj_gyw6WdgLudjiFeLZ9SJeoAN6iM0MLdjZlgE_tVE,18981
|
|
15
|
+
ixt/cli/cmd_misc.py,sha256=ljuY7ncrk9jH18sVH0XVGdb1eu38MKTfjrU6ZRiJ2bM,9014
|
|
16
|
+
ixt/cli/cmd_registry.py,sha256=S34uul3N77_zAkiVpB47-3hZq3cxGgQZtPDXXLEj3Xw,978
|
|
17
|
+
ixt/cli/cmd_upgrade.py,sha256=LkOrvKFXr8ENJ0NN7udi05vANynbDxHmDQiMD-YKuhA,12063
|
|
18
|
+
ixt/cli/commands.py,sha256=t7PmEhcRWsj0pOmHB1qKU7hTx-iZrXZ7jOqGW46fOp0,1771
|
|
19
|
+
ixt/cli/parser.py,sha256=yaRdyvdEcZQDGyErddOaZS6wiceVTK5W8dqLWk6BiAE,19636
|
|
20
|
+
ixt/cli/render.py,sha256=OghbKAIcVcIhc-4470c-DYibqs14KwiUdwbV_oJ7ijE,2650
|
|
21
|
+
ixt/config/__init__.py,sha256=mMFmONjPOm8Jb4ZfzCB2qcfXpgKwFsxwHiPhRPsVRYg,113
|
|
22
|
+
ixt/config/asset_index.py,sha256=JVgM9UluxgD04y-ZLw8EYCp5LBZJw1_akZtT1B3T-j4,9915
|
|
23
|
+
ixt/config/asset_pattern_cache.py,sha256=NlHE0lkA3m4XzOlpao7yJdPTFDIMmb802-MBOFaA154,2455
|
|
24
|
+
ixt/config/env_policy.py,sha256=D4hn1ps3OwkVRLMNVn6swAiDtH3UG6mwfQS9gkvce0g,12032
|
|
25
|
+
ixt/config/flags.py,sha256=O79c8fzJhENSelYAH6504RXEYLTx2F67HRnL0PBYRx4,884
|
|
26
|
+
ixt/config/fs_policy.py,sha256=NcLx7L94-H-gnfJ2_eOXof8BlK0NzWAqpYpWYGQGaY8,377
|
|
27
|
+
ixt/config/heuristics.py,sha256=tY_FE35MeWuBTowY2X6K12eTDx5I6_2zgV9y1eMJUbU,15654
|
|
28
|
+
ixt/config/models.py,sha256=2U1piSxCkVDeiI31J_IcqGJklnf3GoRC0m_zZPh-pLw,7183
|
|
29
|
+
ixt/config/registry.py,sha256=49UrSPlQKP-jpd8xp4M4gpkCX6d6jhG9yrI7caZSE1I,4402
|
|
30
|
+
ixt/config/settings.py,sha256=et4eVWi1RxHK9btH9qWnESlSwc0X7LwXgJqA8_mukuw,5457
|
|
31
|
+
ixt/config/setup_toml.py,sha256=4Nxbz8Q_whv_XbBSe6rlYyijPiNAcEym7JrNA9fmzNE,5185
|
|
32
|
+
ixt/config/toml.py,sha256=bPIPUn4y3pxvp2uzSF-v8MqjKlrMCgxuELOzDHgKqS4,12999
|
|
33
|
+
ixt/core/__init__.py,sha256=SnU6KFRPz_1iDyauq-sWVlDyJioVbR9gE0VwF7rqVIA,421
|
|
34
|
+
ixt/core/apply.py,sha256=F_-5czeiDQsRyADV3M5I0wSIsd7Va1iBRerD9jciogw,18257
|
|
35
|
+
ixt/core/apply_actions.py,sha256=EdMV3BjICNIJyIdCfG5eFwykYjJgr3sGom6B_ofZDtw,2956
|
|
36
|
+
ixt/core/backend.py,sha256=YAxShc7DZK-C8tLvnW3xewq9CuWNIxDmwriSwgXquiA,6401
|
|
37
|
+
ixt/core/bootstrap.py,sha256=1TmqMrpaU6SKgD05-ntJsFiuX5X65K1AIEBUic21c-c,14117
|
|
38
|
+
ixt/core/cache.py,sha256=iTvAQo-tl9gscMAmEYCjXCebEoz6Djz4KZOD2n5B6eQ,10118
|
|
39
|
+
ixt/core/discover.py,sha256=M-CdOTglkAVTUPBCgdgThr8KeQ-uRpITT-gLKPMQZNs,4886
|
|
40
|
+
ixt/core/doctor.py,sha256=DDY4YkAM_KLrgoxpk_h74E9fyg35E4uCPX7OPKjhiuw,19384
|
|
41
|
+
ixt/core/export.py,sha256=binzqIJh0DsG1k2Pfo3Lxrt7bg0qln0362a1yNhYUeY,14285
|
|
42
|
+
ixt/core/expose.py,sha256=iQYRxUyqSOAkBwf763fEDdT9ObxeIweXv0KP1lW-PCs,11712
|
|
43
|
+
ixt/core/extract.py,sha256=6XcSX0xq9UfkVUAvwE8tbCuI7AMpbuDqBFPeEirK1Uo,8404
|
|
44
|
+
ixt/core/hooks.py,sha256=q7g095PbEcdCOqqzqMS-McpB5jWuhJf_SSl5eAmtLoE,5348
|
|
45
|
+
ixt/core/identity.py,sha256=HosZwPqDkuhLFKOvXQPfMwSBFG9NTDJSwzgrTm6uUu0,4692
|
|
46
|
+
ixt/core/inject.py,sha256=2ssmT8wc4w4PywXax6Jq6_hOeTHSc3jhqsCE7LMuQOQ,4601
|
|
47
|
+
ixt/core/install.py,sha256=NZ9gfs8N7EcA6cI4MHbVek8Dbg5qfk77FwF8vNboVWA,17432
|
|
48
|
+
ixt/core/install_local.py,sha256=Xuycmn9_FPiMypbdwm2-qbCLaYEuyMgYhLv-EdpduR4,8188
|
|
49
|
+
ixt/core/locks.py,sha256=Rbb7CjtFfUKws-yRbZiiQca4xDcS1RDphSaFV80lrb4,1538
|
|
50
|
+
ixt/core/pathlink.py,sha256=NgagHA1YXaFF2R-ZWWUwtYidRjOT16kfNlIIpOetEnU,2551
|
|
51
|
+
ixt/core/resolution_stats.py,sha256=aKZy1EJav35C3FI02j2Uu2PujYNA45K58Rjd1wqnp94,6049
|
|
52
|
+
ixt/core/resolve.py,sha256=8h9QzbxprRZ1xG9E5_sgOM6Qk9xTRxOY6m_TL3ByPPY,5404
|
|
53
|
+
ixt/core/resolve_cache.py,sha256=4A3G-es1kqXsq3Fk8nmxjYWL1DGDd-Al9B-zNonXt50,6207
|
|
54
|
+
ixt/core/runtimes.py,sha256=rKZeLokcpe62ITPqvowqCCArRckum5FTo5DWBqsbB-I,5596
|
|
55
|
+
ixt/core/save.py,sha256=BDLGAcU78Mfo7sr0hKhFi48aVCj27soTEVU-9LLzJjU,7741
|
|
56
|
+
ixt/core/setup_completions.py,sha256=MnL0oyZjdyDAPjmIDVMb-dLrr0QjchA0Ab_YLAXildE,365
|
|
57
|
+
ixt/core/setup_path.py,sha256=bhs9k5pgyazCVeErqcCBUre2x4JDsddgE9N5JRKs3zs,12653
|
|
58
|
+
ixt/core/upgrade.py,sha256=yjfRHPVEN85TtQbwo2uG32LlkVAsAsmK6_NU2S_YjKY,21160
|
|
59
|
+
ixt/data/__init__.py,sha256=4zQcyHjACLhTjYyTZb54iyEEgHGCJ8fvjAVPOU_5gYw,256
|
|
60
|
+
ixt/data/asset_index.json,sha256=WwF6QyiegsR1hzrmdESHmjHtq57nbdYStG_iwTnCOt8,17602
|
|
61
|
+
ixt/data/heuristics.toml,sha256=49UX7BZSVPpjL5eabSwWFVHE7hso3jViLJ96G7duYEk,3674
|
|
62
|
+
ixt/data/registry.toml,sha256=BFbgiXlbyvYtCUOXqkJ8jbM3OJ7XdNnPPdmHMKWBIxc,2139
|
|
63
|
+
ixt/libs/__init__.py,sha256=gbVEEfhpsFwsInRMBcrD6oPBuABEBKx7VdOsDMPzHek,31
|
|
64
|
+
ixt/libs/constants.py,sha256=o6TvAdkUxuD_XhKaOviXbXGddfFO_j7J2UnNqG2Qi4I,162
|
|
65
|
+
ixt/libs/fmt.py,sha256=FWfUdkqgUpNKRxKXtbntuZmknNM4u7EBYQmSx_gQho8,3318
|
|
66
|
+
ixt/libs/logger.py,sha256=XuY2ale8sQ3xAgL1NQDVm8-DjLkbYxg9adErllCfKlY,3088
|
|
67
|
+
ixt/libs/output.py,sha256=qOWD3Ca5sFT7xcgbRM3snsqnVc1be4PYtMNw2I8hVRU,777
|
|
68
|
+
ixt/libs/req_spec.py,sha256=iP_LUsM3WkHPLFX0tjHSRmIhaulMOyezJMGvWvfojG8,3327
|
|
69
|
+
ixt/libs/semver.py,sha256=Mzuoc6DzA4G8LTqp0PwwSyOwCheakyFWOKf408UKnQw,4285
|
|
70
|
+
ixt/libs/shell.py,sha256=YXhAlVr2aT5fHX6JfvkTJ1pgXC56x_D8Wc1sEscAcro,3398
|
|
71
|
+
ixt/libs/style.py,sha256=ykVmEDfSkKG73uvWPGmLyVCF39VFjloJG7p5j-Pib8M,6801
|
|
72
|
+
ixt/net/__init__.py,sha256=aPlB-roRhMek1VGT6FQgc9n9S5FMkvTyqdES4ZZc7dU,72
|
|
73
|
+
ixt/net/github_api.py,sha256=XmvcLIBIwsk0_cbs1EHhLUZA68vUnAYQt4Gp6mxKK2I,5725
|
|
74
|
+
ixt/net/gitlab_api.py,sha256=wVRBbDGfR5FMUDRZJxQ4q8YEfbrzdq2rs5lmCjjIvTA,5162
|
|
75
|
+
ixt/net/http.py,sha256=TnDogRdh9ZypVi1O7Tte7gI7JiLF_52_TiyimxsBjMc,5729
|
|
76
|
+
ixt/net/npm.py,sha256=UJ73BRXdsTlHZI74ZenT5WjZCcbH-y_hCmj-MfOiljE,788
|
|
77
|
+
ixt/net/pypi.py,sha256=1CMYMJRDhDjf9ty9xpU-63k36kJp9OQ5m0U5YgZJrX4,837
|
|
78
|
+
ixt/net/source.py,sha256=WhVLDag-vyTF6Oqt1atGyFEOkmp5KPfSyD0KWsavacw,5163
|
|
79
|
+
ixt/platform/__init__.py,sha256=brGAVu14t-zLYqKKLx1ko2pA0-r1avW79exDoD5ahUM,2914
|
|
80
|
+
ixt/platform/win.py,sha256=_aRu1k_lIni-UfAuGca6WqOXrPNx8kKLdpkiiBaeOgY,2386
|
|
81
|
+
ixt_cli-0.8.0.dist-info/METADATA,sha256=V8WHkbTra4Rh61T8uwQCvL4KUkTBQInfwrfVbsgo_zg,15435
|
|
82
|
+
ixt_cli-0.8.0.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
|
|
83
|
+
ixt_cli-0.8.0.dist-info/entry_points.txt,sha256=W_r-gY4cDxw_UGSQK3pgpoHE_vy7RDpBh8XivLLaFyE,37
|
|
84
|
+
ixt_cli-0.8.0.dist-info/RECORD,,
|