depfix 0.1.0__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.
Files changed (81) hide show
  1. depfix-0.1.0/CHANGELOG.md +22 -0
  2. depfix-0.1.0/CONTRIBUTING.md +28 -0
  3. depfix-0.1.0/MANIFEST.in +15 -0
  4. depfix-0.1.0/PKG-INFO +223 -0
  5. depfix-0.1.0/README.md +187 -0
  6. depfix-0.1.0/RELEASING.md +40 -0
  7. depfix-0.1.0/SECURITY.md +24 -0
  8. depfix-0.1.0/docs/AGENTS.md +35 -0
  9. depfix-0.1.0/docs/README.md +19 -0
  10. depfix-0.1.0/docs/concepts/AGENTS.md +30 -0
  11. depfix-0.1.0/docs/concepts/artifacts-and-cache/AGENTS.md +24 -0
  12. depfix-0.1.0/docs/concepts/artifacts-and-cache/README.md +25 -0
  13. depfix-0.1.0/docs/concepts/deployment/AGENTS.md +24 -0
  14. depfix-0.1.0/docs/concepts/deployment/README.md +30 -0
  15. depfix-0.1.0/docs/concepts/import-realms/AGENTS.md +25 -0
  16. depfix-0.1.0/docs/concepts/import-realms/README.md +31 -0
  17. depfix-0.1.0/docs/concepts/import-realms/compatibility.md +16 -0
  18. depfix-0.1.0/docs/concepts/manifests/AGENTS.md +24 -0
  19. depfix-0.1.0/docs/concepts/manifests/README.md +26 -0
  20. depfix-0.1.0/docs/concepts/resolution/AGENTS.md +26 -0
  21. depfix-0.1.0/docs/concepts/resolution/README.md +21 -0
  22. depfix-0.1.0/docs/concepts/resolution/module-discovery.md +13 -0
  23. depfix-0.1.0/docs/concepts/resolution/source-grammar.md +40 -0
  24. depfix-0.1.0/docs/concepts/resolution/uv-backend.md +16 -0
  25. depfix-0.1.0/docs/guides/AGENTS.md +24 -0
  26. depfix-0.1.0/docs/guides/getting-started.md +38 -0
  27. depfix-0.1.0/docs/guides/migration.md +12 -0
  28. depfix-0.1.0/docs/guides/troubleshooting.md +19 -0
  29. depfix-0.1.0/docs/operations/AGENTS.md +25 -0
  30. depfix-0.1.0/docs/operations/threat-model.md +27 -0
  31. depfix-0.1.0/docs/operations/verification.md +23 -0
  32. depfix-0.1.0/docs/project/AGENTS.md +23 -0
  33. depfix-0.1.0/docs/project/final-implementation-report.md +201 -0
  34. depfix-0.1.0/docs/project/phase-one-baseline.md +47 -0
  35. depfix-0.1.0/docs/reference/AGENTS.md +24 -0
  36. depfix-0.1.0/docs/reference/api.md +60 -0
  37. depfix-0.1.0/docs/reference/cli.md +31 -0
  38. depfix-0.1.0/docs/research/AGENTS.md +23 -0
  39. depfix-0.1.0/docs/research/cpython-import-realms.md +113 -0
  40. depfix-0.1.0/examples/AGENTS.md +27 -0
  41. depfix-0.1.0/examples/container/AGENTS.md +23 -0
  42. depfix-0.1.0/examples/container/Dockerfile +10 -0
  43. depfix-0.1.0/examples/container/README.md +5 -0
  44. depfix-0.1.0/examples/container/application.py +4 -0
  45. depfix-0.1.0/examples/two_idna_versions/AGENTS.md +23 -0
  46. depfix-0.1.0/examples/two_idna_versions/application.py +12 -0
  47. depfix-0.1.0/pyproject.toml +70 -0
  48. depfix-0.1.0/schemas/depfix-manifest-v1.schema.json +165 -0
  49. depfix-0.1.0/scripts/name_preflight.py +69 -0
  50. depfix-0.1.0/scripts/release_check.py +345 -0
  51. depfix-0.1.0/setup.cfg +4 -0
  52. depfix-0.1.0/src/depfix/__init__.py +196 -0
  53. depfix-0.1.0/src/depfix/__main__.py +3 -0
  54. depfix-0.1.0/src/depfix/_version.py +1 -0
  55. depfix-0.1.0/src/depfix/aliases.py +189 -0
  56. depfix-0.1.0/src/depfix/cache.py +385 -0
  57. depfix-0.1.0/src/depfix/cli.py +595 -0
  58. depfix-0.1.0/src/depfix/config.py +57 -0
  59. depfix-0.1.0/src/depfix/errors.py +214 -0
  60. depfix-0.1.0/src/depfix/handles.py +143 -0
  61. depfix-0.1.0/src/depfix/manager.py +258 -0
  62. depfix-0.1.0/src/depfix/manifest.py +456 -0
  63. depfix-0.1.0/src/depfix/models.py +113 -0
  64. depfix-0.1.0/src/depfix/project.py +585 -0
  65. depfix-0.1.0/src/depfix/py.typed +1 -0
  66. depfix-0.1.0/src/depfix/resolver.py +1000 -0
  67. depfix-0.1.0/src/depfix/runtime.py +708 -0
  68. depfix-0.1.0/src/depfix/scanner.py +271 -0
  69. depfix-0.1.0/src/depfix/schemas/depfix-manifest-v1.schema.json +165 -0
  70. depfix-0.1.0/src/depfix/settings.py +266 -0
  71. depfix-0.1.0/src/depfix/sources.py +306 -0
  72. depfix-0.1.0/src/depfix/specifiers.py +6 -0
  73. depfix-0.1.0/src/depfix/sync.py +123 -0
  74. depfix-0.1.0/src/depfix/uv_backend.py +334 -0
  75. depfix-0.1.0/src/depfix/wheel.py +406 -0
  76. depfix-0.1.0/src/depfix.egg-info/PKG-INFO +223 -0
  77. depfix-0.1.0/src/depfix.egg-info/SOURCES.txt +79 -0
  78. depfix-0.1.0/src/depfix.egg-info/dependency_links.txt +1 -0
  79. depfix-0.1.0/src/depfix.egg-info/entry_points.txt +2 -0
  80. depfix-0.1.0/src/depfix.egg-info/requires.txt +15 -0
  81. depfix-0.1.0/src/depfix.egg-info/top_level.txt +1 -0
@@ -0,0 +1,22 @@
1
+ # Changelog
2
+
3
+ All notable changes use this file. The project follows semantic versioning after its first public release.
4
+
5
+ ## 0.1.0 - Unreleased
6
+
7
+ - Established the permanent `depfix` distribution, import, CLI, environment, cache, bundle, generated-package, and
8
+ synthetic-namespace identities.
9
+ - Added zero-configuration ranged imports and lazy `PackageHandle` loading.
10
+ - Added unified PyPI, Git, URL, file, Python-module, and PEP 508 direct-reference sources.
11
+ - Added Core Metadata/artifact module discovery and four-state native classification with mixed-wheel Python fallback.
12
+ - Added mandatory uv resolution/build backend, executable discovery, and private repair bootstrap.
13
+ - Added deterministic manifests, AST export, frozen/offline install, air-gap bundles, IDE stubs/source maps, and uv pip
14
+ passthrough.
15
+ - Preserved parent-specific multiversion realms, namespace provider sets, canonical identity, resource/metadata facades,
16
+ concurrency, and spawn-worker behavior.
17
+ - Added release validation, cross-platform CI, and manual trusted-publishing workflow templates.
18
+ - Added a project-wide DOX hierarchy, concept-owned documentation folders, a GitHub/PyPI README, and canonical
19
+ `agent0ai` project metadata.
20
+
21
+ Release blockers: the owner must choose a license, add a private security contact, confirm PyPI name acceptance, and
22
+ configure protected trusted-publisher environments.
@@ -0,0 +1,28 @@
1
+ # Contributing
2
+
3
+ Use CPython 3.11+ and install development dependencies:
4
+
5
+ ```bash
6
+ python -m venv .venv
7
+ .venv/bin/python -m pip install -e '.[test,release]'
8
+ ```
9
+
10
+ On Windows, use `.venv\Scripts\python.exe`. Run before submitting changes:
11
+
12
+ ```bash
13
+ ruff format --check .
14
+ ruff check .
15
+ mypy src/depfix
16
+ pytest
17
+ python scripts/release_check.py --quick
18
+ ```
19
+
20
+ Changes to source parsing, manifests, import identity, cache layout, native policy, or uv commands require focused tests and
21
+ documentation. Tests must not depend on ambient third-party imports. Never commit credentials, private package artifacts,
22
+ global cache content, `.depfix/runtime`, or generated build output.
23
+
24
+ Preserve the stable `import_module -> ModuleType` and `load_package -> PackageHandle` contracts. New native support must be
25
+ opt-in and evidence-based; do not weaken the unknown-native gate to make one package pass.
26
+
27
+ No contributor identity or certificate-of-origin policy has been selected. The owner should establish those governance
28
+ terms together with the license before accepting external contributions.
@@ -0,0 +1,15 @@
1
+ include README.md
2
+ include CHANGELOG.md
3
+ include SECURITY.md
4
+ include CONTRIBUTING.md
5
+ include RELEASING.md
6
+ recursive-include docs *.md
7
+ recursive-include schemas *.json
8
+ recursive-include examples *.py *.md Dockerfile
9
+ recursive-include scripts *.py
10
+ prune .depfix
11
+ prune .github
12
+ prune build
13
+ prune dist
14
+ prune tests
15
+ global-exclude .env .env.* *.py[cod] __pycache__/*
depfix-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,223 @@
1
+ Metadata-Version: 2.4
2
+ Name: depfix
3
+ Version: 0.1.0
4
+ Summary: Import multiple Python package versions side by side with isolated dependency realms
5
+ Author: agent0ai
6
+ Project-URL: Homepage, https://github.com/agent0ai/depfix
7
+ Project-URL: Documentation, https://github.com/agent0ai/depfix/tree/main/docs
8
+ Project-URL: Repository, https://github.com/agent0ai/depfix
9
+ Project-URL: Issues, https://github.com/agent0ai/depfix/issues
10
+ Project-URL: Changelog, https://github.com/agent0ai/depfix/blob/main/CHANGELOG.md
11
+ Keywords: dependencies,dependency-isolation,imports,multiversion,packaging,uv
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Programming Language :: Python :: Implementation :: CPython
19
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
+ Classifier: Typing :: Typed
21
+ Requires-Python: >=3.11
22
+ Description-Content-Type: text/markdown
23
+ Requires-Dist: packaging>=24
24
+ Requires-Dist: pathspec>=0.12
25
+ Requires-Dist: platformdirs>=4
26
+ Requires-Dist: uv>=0.11.0
27
+ Provides-Extra: test
28
+ Requires-Dist: pytest>=8; extra == "test"
29
+ Requires-Dist: mypy>=1.10; extra == "test"
30
+ Requires-Dist: pyright>=1.1.400; extra == "test"
31
+ Requires-Dist: jsonschema>=4.23; extra == "test"
32
+ Provides-Extra: release
33
+ Requires-Dist: build>=1.2; extra == "release"
34
+ Requires-Dist: ruff>=0.12; extra == "release"
35
+ Requires-Dist: twine>=6; extra == "release"
36
+
37
+ <p align="center">
38
+ <img src="https://raw.githubusercontent.com/agent0ai/depfix/main/.github/readme-banner.svg" alt="Depfix — isolated Python dependency realms" width="100%" />
39
+ </p>
40
+
41
+ <h3 align="center">Import the version you need. Keep its dependencies in their own realm.</h3>
42
+
43
+ <p align="center">
44
+ Depfix lets one Python process load multiple pure-Python package versions side by side—even when their transitive dependencies conflict.
45
+ </p>
46
+
47
+ <p align="center">
48
+ <a href="https://pypi.org/project/depfix/"><img alt="PyPI" src="https://img.shields.io/pypi/v/depfix?style=for-the-badge&logo=pypi&logoColor=white" /></a>
49
+ <a href="https://pypi.org/project/depfix/"><img alt="Python 3.11+" src="https://img.shields.io/pypi/pyversions/depfix?style=for-the-badge&logo=python&logoColor=white" /></a>
50
+ <a href="https://github.com/agent0ai/depfix/actions/workflows/ci.yml"><img alt="CI" src="https://img.shields.io/github/actions/workflow/status/agent0ai/depfix/ci.yml?branch=main&style=for-the-badge&label=CI" /></a>
51
+ <a href="https://github.com/sponsors/agent0ai"><img alt="Sponsor agent0ai" src="https://img.shields.io/badge/Sponsor-agent0ai-FF69B4?style=for-the-badge&logo=githubsponsors&logoColor=white" /></a>
52
+ </p>
53
+
54
+ <p align="center">
55
+ <a href="#quick-start">Quick start</a> ·
56
+ <a href="#why-depfix">Why Depfix</a> ·
57
+ <a href="#from-live-imports-to-locked-deployments">Deployment</a> ·
58
+ <a href="#documentation">Documentation</a> ·
59
+ <a href="https://github.com/agent0ai/depfix/issues">Issues</a>
60
+ </p>
61
+
62
+ ```python
63
+ from depfix import import_module
64
+
65
+ idna_2 = import_module("idna==2.10")
66
+ idna_3 = import_module("idna==3.10")
67
+
68
+ assert idna_2.__depfix_version__ == "2.10"
69
+ assert idna_3.__depfix_version__ == "3.10"
70
+ assert idna_2 is not idna_3
71
+ ```
72
+
73
+ No virtual-environment switching. No `sys.path` swapping. No installation into the active `site-packages`.
74
+
75
+ ## Why Depfix
76
+
77
+ | Capability | Why it matters |
78
+ | --- | --- |
79
+ | **Side-by-side versions** | Load different versions of the same pure-Python distribution in one process. |
80
+ | **Dependency realms** | Each root keeps parent-specific dependency edges, so one graph does not flatten into another. |
81
+ | **Zero-configuration start** | Call `import_module()` directly; the first request prepares an exact graph in the user cache. |
82
+ | **Reproducible deployments** | Export deterministic manifests, install frozen state, and build complete air-gap bundles. |
83
+ | **Real package sources** | Resolve PyPI requirements, Git refs, URLs, local projects, wheels, and standalone Python files. |
84
+ | **Honest isolation** | Pure-Python realm loading is supported; unsafe native-extension loading fails explicitly. |
85
+
86
+ ## Quick start
87
+
88
+ Install Depfix from PyPI:
89
+
90
+ ```bash
91
+ python -m pip install depfix
92
+ ```
93
+
94
+ Then ask for the package version your code needs:
95
+
96
+ ```python
97
+ from depfix import import_module, load_package
98
+
99
+ requests = import_module("requests>=2.31,<3")
100
+ tools = load_package("setuptools==75.0.0")
101
+
102
+ print(requests.__depfix_version__)
103
+ print(tools.name, tools.version, tools.module_names)
104
+ setuptools = tools.modules.setuptools
105
+ ```
106
+
107
+ `import_module()` returns exactly one canonical module. If a distribution exposes zero or several public roots, Depfix
108
+ raises a typed discovery error instead of guessing. Use `module=` to select a known root or `load_package()` to inspect a
109
+ lazy package handle.
110
+
111
+ Importing `depfix` itself performs no resolution, network, cache, or subprocess work. Those begin only when a load or
112
+ preparation API is called.
113
+
114
+ ## How it works
115
+
116
+ ```text
117
+ requirement or source
118
+ → exact uv-backed resolution
119
+ → hash-pinned artifact graph
120
+ → verified, content-addressed cache
121
+ → parent-specific dependency realm
122
+ → canonical synthetic module identity
123
+ ```
124
+
125
+ Realm modules live under graph- and node-qualified internal names. Their logical imports are resolved through declared
126
+ dependency edges, not the process's ambient third-party packages. Repeated calls for the same graph and logical module
127
+ return the same module object.
128
+
129
+ Depfix invokes uv through its documented executable interface. It does not import uv internals, vendor a uv binary, alter
130
+ the active environment, or add prepared package trees to global `sys.path`.
131
+
132
+ ## Sources
133
+
134
+ ```python
135
+ import_module("requests>=2.31,<3")
136
+ import_module("pypi:requests[socks]~=2.32")
137
+ import_module("git:https://github.com/acme/sdk.git@v2.4.0")
138
+ import_module("url:https://packages.example/acme_sdk-2.4.0-py3-none-any.whl#sha256=<digest>")
139
+ import_module("file:../acme-sdk")
140
+ import_module("file:./helpers.py")
141
+ import_module("py:https://modules.example/utilities.py#sha256=<digest>")
142
+ ```
143
+
144
+ Standard PEP 508 direct references work too. Mutable Git refs are pinned to commits during export. Credentials remain in
145
+ external uv, index, keyring, or Git configuration and are never serialized into manifests.
146
+
147
+ ## From live imports to locked deployments
148
+
149
+ Live mode is ideal for exploration: it resolves into the platform cache and creates no project files. When the graph must
150
+ be reproducible, prepare it explicitly:
151
+
152
+ ```bash
153
+ depfix export . --output .depfix/imports.lock
154
+ depfix install .depfix/imports.lock --frozen
155
+ DEPFIX_FROZEN=1 python application.py
156
+ ```
157
+
158
+ `export` scans static `import_module()` and `load_package()` calls without executing application code. The manifest records
159
+ exact artifacts, hashes, target identity, import ownership, source provenance, policy, and parent-specific edges.
160
+
161
+ For disconnected targets:
162
+
163
+ ```bash
164
+ depfix bundle .depfix/imports.lock --output dist/application.depfixbundle --include-depfix-runtime
165
+ depfix install dist/application.depfixbundle --offline --frozen
166
+ ```
167
+
168
+ | Mode | Resolution | Network | Project state |
169
+ | --- | --- | --- | --- |
170
+ | **Live** | On the first request | Allowed by policy | None |
171
+ | **Prepared** | During export | Optional during install | Deterministic manifest |
172
+ | **Air-gapped** | On the connected build host | Forbidden on target | Manifest + exact bundle |
173
+
174
+ ## IDE support
175
+
176
+ ```bash
177
+ depfix ide sync .depfix/imports.lock
178
+ depfix ide configure .depfix/imports.lock
179
+ ```
180
+
181
+ Depfix generates a physical `depfix_imports` package with graph-specific stubs, editor snippets, and source maps. Distinct
182
+ aliases keep distinct version-specific APIs while runtime loading continues to use canonical realm identities.
183
+
184
+ ## Boundaries worth knowing
185
+
186
+ Depfix is an alpha release focused on CPython 3.11–3.13. Its isolation boundary prevents dependency-graph collisions; it
187
+ is not a sandbox for untrusted Python code.
188
+
189
+ Pure-Python wheels, namespace packages, resources, relative and circular imports, selected metadata access, threads, and
190
+ spawn workers are covered. Native extensions can carry process-global ABI and library state that cannot be made safe by
191
+ renaming a module. Depfix rejects unknown native loading with `NativeIsolationRequired`; use an application-owned worker
192
+ process when native code is required.
193
+
194
+ ## Documentation
195
+
196
+ | I want to… | Start here |
197
+ | --- | --- |
198
+ | Get a project running | [Getting started](https://github.com/agent0ai/depfix/blob/main/docs/guides/getting-started.md) |
199
+ | Understand dependency isolation | [Import realms](https://github.com/agent0ai/depfix/tree/main/docs/concepts/import-realms) |
200
+ | Follow resolution and package discovery | [Resolution](https://github.com/agent0ai/depfix/tree/main/docs/concepts/resolution) |
201
+ | Prepare containers or offline systems | [Deployment](https://github.com/agent0ai/depfix/tree/main/docs/concepts/deployment) |
202
+ | Inspect the Python surface | [Python API](https://github.com/agent0ai/depfix/blob/main/docs/reference/api.md) |
203
+ | Inspect every command | [CLI reference](https://github.com/agent0ai/depfix/blob/main/docs/reference/cli.md) |
204
+ | Review security assumptions | [Threat model](https://github.com/agent0ai/depfix/blob/main/docs/operations/threat-model.md) |
205
+ | Diagnose a failure | [Troubleshooting](https://github.com/agent0ai/depfix/blob/main/docs/guides/troubleshooting.md) |
206
+
207
+ Browse the complete [documentation map](https://github.com/agent0ai/depfix/tree/main/docs).
208
+
209
+ ## Created by agent0ai
210
+
211
+ Depfix is an open-source project by [agent0ai](https://github.com/agent0ai), creator of
212
+ [Agent Zero](https://github.com/agent0ai/agent-zero), [Space Agent](https://github.com/agent0ai/space-agent), and
213
+ [DOX](https://github.com/agent0ai/dox).
214
+
215
+ - Found a bug or compatibility gap? [Open an issue](https://github.com/agent0ai/depfix/issues).
216
+ - Want to contribute? Read [CONTRIBUTING.md](https://github.com/agent0ai/depfix/blob/main/CONTRIBUTING.md).
217
+ - Preparing a release? Follow [RELEASING.md](https://github.com/agent0ai/depfix/blob/main/RELEASING.md).
218
+ - Want to support agent0ai's work? [Sponsor on GitHub](https://github.com/sponsors/agent0ai).
219
+
220
+ ## License status
221
+
222
+ No license has been selected yet. Until the owner adds an explicit `LICENSE`, the source is publicly visible but no open-
223
+ source license grant should be assumed. License selection remains a blocker for the first public release.
depfix-0.1.0/README.md ADDED
@@ -0,0 +1,187 @@
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/agent0ai/depfix/main/.github/readme-banner.svg" alt="Depfix — isolated Python dependency realms" width="100%" />
3
+ </p>
4
+
5
+ <h3 align="center">Import the version you need. Keep its dependencies in their own realm.</h3>
6
+
7
+ <p align="center">
8
+ Depfix lets one Python process load multiple pure-Python package versions side by side—even when their transitive dependencies conflict.
9
+ </p>
10
+
11
+ <p align="center">
12
+ <a href="https://pypi.org/project/depfix/"><img alt="PyPI" src="https://img.shields.io/pypi/v/depfix?style=for-the-badge&logo=pypi&logoColor=white" /></a>
13
+ <a href="https://pypi.org/project/depfix/"><img alt="Python 3.11+" src="https://img.shields.io/pypi/pyversions/depfix?style=for-the-badge&logo=python&logoColor=white" /></a>
14
+ <a href="https://github.com/agent0ai/depfix/actions/workflows/ci.yml"><img alt="CI" src="https://img.shields.io/github/actions/workflow/status/agent0ai/depfix/ci.yml?branch=main&style=for-the-badge&label=CI" /></a>
15
+ <a href="https://github.com/sponsors/agent0ai"><img alt="Sponsor agent0ai" src="https://img.shields.io/badge/Sponsor-agent0ai-FF69B4?style=for-the-badge&logo=githubsponsors&logoColor=white" /></a>
16
+ </p>
17
+
18
+ <p align="center">
19
+ <a href="#quick-start">Quick start</a> ·
20
+ <a href="#why-depfix">Why Depfix</a> ·
21
+ <a href="#from-live-imports-to-locked-deployments">Deployment</a> ·
22
+ <a href="#documentation">Documentation</a> ·
23
+ <a href="https://github.com/agent0ai/depfix/issues">Issues</a>
24
+ </p>
25
+
26
+ ```python
27
+ from depfix import import_module
28
+
29
+ idna_2 = import_module("idna==2.10")
30
+ idna_3 = import_module("idna==3.10")
31
+
32
+ assert idna_2.__depfix_version__ == "2.10"
33
+ assert idna_3.__depfix_version__ == "3.10"
34
+ assert idna_2 is not idna_3
35
+ ```
36
+
37
+ No virtual-environment switching. No `sys.path` swapping. No installation into the active `site-packages`.
38
+
39
+ ## Why Depfix
40
+
41
+ | Capability | Why it matters |
42
+ | --- | --- |
43
+ | **Side-by-side versions** | Load different versions of the same pure-Python distribution in one process. |
44
+ | **Dependency realms** | Each root keeps parent-specific dependency edges, so one graph does not flatten into another. |
45
+ | **Zero-configuration start** | Call `import_module()` directly; the first request prepares an exact graph in the user cache. |
46
+ | **Reproducible deployments** | Export deterministic manifests, install frozen state, and build complete air-gap bundles. |
47
+ | **Real package sources** | Resolve PyPI requirements, Git refs, URLs, local projects, wheels, and standalone Python files. |
48
+ | **Honest isolation** | Pure-Python realm loading is supported; unsafe native-extension loading fails explicitly. |
49
+
50
+ ## Quick start
51
+
52
+ Install Depfix from PyPI:
53
+
54
+ ```bash
55
+ python -m pip install depfix
56
+ ```
57
+
58
+ Then ask for the package version your code needs:
59
+
60
+ ```python
61
+ from depfix import import_module, load_package
62
+
63
+ requests = import_module("requests>=2.31,<3")
64
+ tools = load_package("setuptools==75.0.0")
65
+
66
+ print(requests.__depfix_version__)
67
+ print(tools.name, tools.version, tools.module_names)
68
+ setuptools = tools.modules.setuptools
69
+ ```
70
+
71
+ `import_module()` returns exactly one canonical module. If a distribution exposes zero or several public roots, Depfix
72
+ raises a typed discovery error instead of guessing. Use `module=` to select a known root or `load_package()` to inspect a
73
+ lazy package handle.
74
+
75
+ Importing `depfix` itself performs no resolution, network, cache, or subprocess work. Those begin only when a load or
76
+ preparation API is called.
77
+
78
+ ## How it works
79
+
80
+ ```text
81
+ requirement or source
82
+ → exact uv-backed resolution
83
+ → hash-pinned artifact graph
84
+ → verified, content-addressed cache
85
+ → parent-specific dependency realm
86
+ → canonical synthetic module identity
87
+ ```
88
+
89
+ Realm modules live under graph- and node-qualified internal names. Their logical imports are resolved through declared
90
+ dependency edges, not the process's ambient third-party packages. Repeated calls for the same graph and logical module
91
+ return the same module object.
92
+
93
+ Depfix invokes uv through its documented executable interface. It does not import uv internals, vendor a uv binary, alter
94
+ the active environment, or add prepared package trees to global `sys.path`.
95
+
96
+ ## Sources
97
+
98
+ ```python
99
+ import_module("requests>=2.31,<3")
100
+ import_module("pypi:requests[socks]~=2.32")
101
+ import_module("git:https://github.com/acme/sdk.git@v2.4.0")
102
+ import_module("url:https://packages.example/acme_sdk-2.4.0-py3-none-any.whl#sha256=<digest>")
103
+ import_module("file:../acme-sdk")
104
+ import_module("file:./helpers.py")
105
+ import_module("py:https://modules.example/utilities.py#sha256=<digest>")
106
+ ```
107
+
108
+ Standard PEP 508 direct references work too. Mutable Git refs are pinned to commits during export. Credentials remain in
109
+ external uv, index, keyring, or Git configuration and are never serialized into manifests.
110
+
111
+ ## From live imports to locked deployments
112
+
113
+ Live mode is ideal for exploration: it resolves into the platform cache and creates no project files. When the graph must
114
+ be reproducible, prepare it explicitly:
115
+
116
+ ```bash
117
+ depfix export . --output .depfix/imports.lock
118
+ depfix install .depfix/imports.lock --frozen
119
+ DEPFIX_FROZEN=1 python application.py
120
+ ```
121
+
122
+ `export` scans static `import_module()` and `load_package()` calls without executing application code. The manifest records
123
+ exact artifacts, hashes, target identity, import ownership, source provenance, policy, and parent-specific edges.
124
+
125
+ For disconnected targets:
126
+
127
+ ```bash
128
+ depfix bundle .depfix/imports.lock --output dist/application.depfixbundle --include-depfix-runtime
129
+ depfix install dist/application.depfixbundle --offline --frozen
130
+ ```
131
+
132
+ | Mode | Resolution | Network | Project state |
133
+ | --- | --- | --- | --- |
134
+ | **Live** | On the first request | Allowed by policy | None |
135
+ | **Prepared** | During export | Optional during install | Deterministic manifest |
136
+ | **Air-gapped** | On the connected build host | Forbidden on target | Manifest + exact bundle |
137
+
138
+ ## IDE support
139
+
140
+ ```bash
141
+ depfix ide sync .depfix/imports.lock
142
+ depfix ide configure .depfix/imports.lock
143
+ ```
144
+
145
+ Depfix generates a physical `depfix_imports` package with graph-specific stubs, editor snippets, and source maps. Distinct
146
+ aliases keep distinct version-specific APIs while runtime loading continues to use canonical realm identities.
147
+
148
+ ## Boundaries worth knowing
149
+
150
+ Depfix is an alpha release focused on CPython 3.11–3.13. Its isolation boundary prevents dependency-graph collisions; it
151
+ is not a sandbox for untrusted Python code.
152
+
153
+ Pure-Python wheels, namespace packages, resources, relative and circular imports, selected metadata access, threads, and
154
+ spawn workers are covered. Native extensions can carry process-global ABI and library state that cannot be made safe by
155
+ renaming a module. Depfix rejects unknown native loading with `NativeIsolationRequired`; use an application-owned worker
156
+ process when native code is required.
157
+
158
+ ## Documentation
159
+
160
+ | I want to… | Start here |
161
+ | --- | --- |
162
+ | Get a project running | [Getting started](https://github.com/agent0ai/depfix/blob/main/docs/guides/getting-started.md) |
163
+ | Understand dependency isolation | [Import realms](https://github.com/agent0ai/depfix/tree/main/docs/concepts/import-realms) |
164
+ | Follow resolution and package discovery | [Resolution](https://github.com/agent0ai/depfix/tree/main/docs/concepts/resolution) |
165
+ | Prepare containers or offline systems | [Deployment](https://github.com/agent0ai/depfix/tree/main/docs/concepts/deployment) |
166
+ | Inspect the Python surface | [Python API](https://github.com/agent0ai/depfix/blob/main/docs/reference/api.md) |
167
+ | Inspect every command | [CLI reference](https://github.com/agent0ai/depfix/blob/main/docs/reference/cli.md) |
168
+ | Review security assumptions | [Threat model](https://github.com/agent0ai/depfix/blob/main/docs/operations/threat-model.md) |
169
+ | Diagnose a failure | [Troubleshooting](https://github.com/agent0ai/depfix/blob/main/docs/guides/troubleshooting.md) |
170
+
171
+ Browse the complete [documentation map](https://github.com/agent0ai/depfix/tree/main/docs).
172
+
173
+ ## Created by agent0ai
174
+
175
+ Depfix is an open-source project by [agent0ai](https://github.com/agent0ai), creator of
176
+ [Agent Zero](https://github.com/agent0ai/agent-zero), [Space Agent](https://github.com/agent0ai/space-agent), and
177
+ [DOX](https://github.com/agent0ai/dox).
178
+
179
+ - Found a bug or compatibility gap? [Open an issue](https://github.com/agent0ai/depfix/issues).
180
+ - Want to contribute? Read [CONTRIBUTING.md](https://github.com/agent0ai/depfix/blob/main/CONTRIBUTING.md).
181
+ - Preparing a release? Follow [RELEASING.md](https://github.com/agent0ai/depfix/blob/main/RELEASING.md).
182
+ - Want to support agent0ai's work? [Sponsor on GitHub](https://github.com/sponsors/agent0ai).
183
+
184
+ ## License status
185
+
186
+ No license has been selected yet. Until the owner adds an explicit `LICENSE`, the source is publicly visible but no open-
187
+ source license grant should be assumed. License selection remains a blocker for the first public release.
@@ -0,0 +1,40 @@
1
+ # Release checklist
2
+
3
+ No command or workflow in this repository publishes automatically. The first accepted upload is the definitive PyPI name
4
+ allocation.
5
+
6
+ ## Owner-controlled blockers
7
+
8
+ - [ ] Choose and add an owner-approved `LICENSE`; update PEP 621 license metadata and classifiers.
9
+ - [x] Record `agent0ai` as project owner in package metadata.
10
+ - [x] Record the owner-specified canonical source, documentation, issue, and changelog URLs.
11
+ - [ ] Apply [the prepared GitHub About metadata](.github/REPOSITORY_METADATA.md) in repository settings.
12
+ - [ ] Run `python scripts/name_preflight.py`; confirm the normalized `depfix` name with PyPI. A missing page is not a
13
+ reservation guarantee. Do not upload an empty placeholder.
14
+ - [ ] Configure protected `testpypi` and `pypi` repository environments with required reviewers.
15
+ - [ ] Configure matching TestPyPI/PyPI trusted publishers for the workflow and environment names.
16
+ - [ ] Add the private security reporting contact to `SECURITY.md`.
17
+
18
+ ## Candidate validation
19
+
20
+ - [ ] Update `_version.py` and `CHANGELOG.md`; confirm no unintended API/manifest format change.
21
+ - [ ] Run `python scripts/release_check.py` on a clean connected host.
22
+ - [ ] Review the printed wheel/sdist SHA-256 values and archive inventories.
23
+ - [ ] Confirm the wheel is `py3-none-any`, contains `py.typed` and schemas, and contains no tests, caches, credentials,
24
+ third-party packages, uv binaries, or project manifests.
25
+ - [ ] Install the exact wheel locally and verify `import depfix`, `depfix --help`, `depfix --version`, uv discovery, one live
26
+ import, and one export/install/offline run.
27
+ - [ ] Confirm CI passes Windows, macOS, Linux, supported Python versions, minimum uv, current uv, build, and clean-wheel jobs.
28
+
29
+ ## TestPyPI (explicit manual workflow)
30
+
31
+ - [ ] Invoke `Publish TestPyPI` manually for the reviewed commit.
32
+ - [ ] Install from TestPyPI while sourcing dependencies from PyPI, then repeat CLI/live/prepared checks.
33
+ - [ ] Verify rendered metadata, README, files, and dependency declarations.
34
+
35
+ ## PyPI (explicit manual workflow)
36
+
37
+ - [ ] Create and push the deliberate signed/annotated release tag according to owner policy.
38
+ - [ ] Invoke `Publish PyPI` manually with that tag and pass the protected-environment approval.
39
+ - [ ] Verify the PyPI page, artifact hashes, `pip install depfix`, `depfix --version`, uv installation, and a basic live import.
40
+ - [ ] Create the repository-host release from the same tag and changelog entry.
@@ -0,0 +1,24 @@
1
+ # Security policy
2
+
3
+ ## Supported versions
4
+
5
+ Until the first public release, only the current `0.1.x` source line receives security fixes. This document will be updated
6
+ when another maintained line exists.
7
+
8
+ ## Reporting
9
+
10
+ There is no owner-approved private security contact in the repository. Before publication, the owner must add the intended
11
+ private reporting channel. Until then, do not post live credentials, private index URLs, proprietary packages, or exploit
12
+ details in a public issue; contact the repository owner through an already established private channel.
13
+
14
+ Include the Depfix version, Python/uv versions, platform, source kind, frozen/offline state, and a minimal redacted
15
+ reproduction. `depfix doctor --json` is useful after review.
16
+
17
+ ## Scope
18
+
19
+ Relevant issues include artifact/manifest/bundle verification bypasses, archive traversal or links, credential disclosure,
20
+ unexpected network access in offline mode, resolution in frozen mode, cache race/collision attacks, ambient dependency
21
+ leaks, and unsafe native-module loading. Malicious behavior inherent to intentionally executed third-party Python code is
22
+ outside the isolation claim, though validation escapes remain in scope.
23
+
24
+ See [the threat model](docs/operations/threat-model.md) for controls and residual risks.
@@ -0,0 +1,35 @@
1
+ # Documentation
2
+
3
+ ## Purpose
4
+
5
+ - Explain Depfix to users, operators, contributors, and runtime implementers beyond the README quick path.
6
+
7
+ ## Ownership
8
+
9
+ - This tree owns API, CLI, architecture, resolution, realm, deployment, security, migration, troubleshooting, verification, and research documentation.
10
+
11
+ ## Local Contracts
12
+
13
+ - Describe shipped behavior in the present tense and label proposals or experiments explicitly.
14
+ - Keep commands executable from the repository root unless a document says otherwise.
15
+ - Link to the canonical contract rather than duplicating long normative details.
16
+
17
+ ## Work Guidance
18
+
19
+ - Organize durable product concepts into named folders with their own DOX contracts.
20
+ - Keep the root README concise; move deep operational and internal explanations here.
21
+
22
+ ## Verification
23
+
24
+ - Check relative links and run the commands a changed guide promises when practical.
25
+
26
+ ## Child DOX Index
27
+
28
+ - [`concepts/AGENTS.md`](concepts/AGENTS.md) — core technical concepts, each in an independent folder.
29
+ - [`guides/AGENTS.md`](guides/AGENTS.md) — task-oriented onboarding and troubleshooting.
30
+ - [`operations/AGENTS.md`](operations/AGENTS.md) — security and verification procedures.
31
+ - [`project/AGENTS.md`](project/AGENTS.md) — implementation records and historical baselines.
32
+ - [`reference/AGENTS.md`](reference/AGENTS.md) — exact Python and CLI interfaces.
33
+ - [`research/AGENTS.md`](research/AGENTS.md) — explicitly non-shipping design research.
34
+
35
+ `README.md` is the human documentation index and remains owned by this parent.
@@ -0,0 +1,19 @@
1
+ # Depfix documentation
2
+
3
+ Start with the [getting-started guide](guides/getting-started.md), then use this map to go deeper.
4
+
5
+ | I want to… | Start here |
6
+ | --- | --- |
7
+ | Load two versions in one process | [Import realms](concepts/import-realms/) |
8
+ | Understand how a request becomes an exact graph | [Resolution](concepts/resolution/) |
9
+ | Understand downloaded and extracted package state | [Artifacts and cache](concepts/artifacts-and-cache/) |
10
+ | Prepare reproducible or offline execution | [Deployment](concepts/deployment/) |
11
+ | Inspect the lock format | [Resolved manifests](concepts/manifests/) |
12
+ | Look up Python calls | [Python API](reference/api.md) |
13
+ | Look up commands | [CLI reference](reference/cli.md) |
14
+ | Fix an error | [Troubleshooting](guides/troubleshooting.md) |
15
+ | Review safety boundaries | [Threat model](operations/threat-model.md) |
16
+ | Validate a change or release | [Verification](operations/verification.md) |
17
+
18
+ The [research area](research/) contains forward-looking import-system work and is not a promise of shipped behavior. The
19
+ [project records](project/) preserve implementation audits without mixing historical detail into user guidance.
@@ -0,0 +1,30 @@
1
+ # Core concepts
2
+
3
+ ## Purpose
4
+
5
+ - Separate Depfix's stable technical ideas into independently understandable and maintainable domains.
6
+
7
+ ## Ownership
8
+
9
+ - Each child folder owns one concept, its boundaries, and links to deeper reference material.
10
+
11
+ ## Local Contracts
12
+
13
+ - Concept docs explain why the system is shaped this way; references define exact syntax and guides define tasks.
14
+ - A concept folder must remain useful when read independently with the parent documentation index.
15
+
16
+ ## Work Guidance
17
+
18
+ - Keep concept boundaries narrow and add cross-links where a workflow crosses domains.
19
+
20
+ ## Verification
21
+
22
+ - Compare concept claims with implementation tests and the current public API.
23
+
24
+ ## Child DOX Index
25
+
26
+ - [`artifacts-and-cache/AGENTS.md`](artifacts-and-cache/AGENTS.md) — immutable content, verification, and materialization.
27
+ - [`deployment/AGENTS.md`](deployment/AGENTS.md) — live, prepared, and air-gapped operation.
28
+ - [`import-realms/AGENTS.md`](import-realms/AGENTS.md) — runtime identity and dependency isolation.
29
+ - [`manifests/AGENTS.md`](manifests/AGENTS.md) — deterministic resolved graph records.
30
+ - [`resolution/AGENTS.md`](resolution/AGENTS.md) — source normalization, selection, inspection, and uv.
@@ -0,0 +1,24 @@
1
+ # Artifacts and cache
2
+
3
+ ## Purpose
4
+
5
+ - Document immutable package content, integrity checks, and safe local materialization.
6
+
7
+ ## Ownership
8
+
9
+ - This folder owns the content-addressed cache model and artifact lifecycle.
10
+
11
+ ## Local Contracts
12
+
13
+ - Blob identity is SHA-256 content identity; completed extracted targets are environment-specific and read-only.
14
+ - Cache mutation uses bounded input, locks, temporary construction, verification, and atomic promotion.
15
+
16
+ ## Work Guidance
17
+
18
+ - Distinguish immutable artifacts from realm nodes and request-resolution entries.
19
+
20
+ ## Verification
21
+
22
+ - Use cache, wheel-safety, bundle, and concurrency tests for changed claims.
23
+
24
+ ## Child DOX Index