dotagents-cli 0.7.5__tar.gz → 0.8.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 (119) hide show
  1. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/CHANGELOG.md +89 -1
  2. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/PKG-INFO +20 -9
  3. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/README.md +8 -2
  4. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/docs/guide/commands.md +38 -15
  5. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/docs/guide/install.md +6 -3
  6. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/docs/guide/overlays.md +48 -9
  7. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/docs/guide/private-sync.md +12 -1
  8. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/install.py +2 -2
  9. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/pyproject.toml +13 -6
  10. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/AGENTS.md +111 -29
  11. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/__init__.py +1 -1
  12. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/_context.py +16 -0
  13. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/_env.py +42 -5
  14. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/_overlay/dotagents/templates/AGENTS.md +7 -0
  15. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/_overlays.py +10 -4
  16. dotagents_cli-0.8.0/src/dotagents/_pipwheel.py +319 -0
  17. dotagents_cli-0.8.0/src/dotagents/_pyvenv.py +329 -0
  18. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/_resources.py +18 -5
  19. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/_skills.py +1 -1
  20. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/_sources.py +19 -18
  21. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/cli/__init__.py +3 -92
  22. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/cli/about.py +2 -2
  23. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/cli/build_pyz.py +62 -21
  24. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/cli/init.py +16 -0
  25. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/cli/overlays.py +135 -24
  26. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/conftest.py +21 -1
  27. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_about.py +3 -3
  28. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_build_pyz.py +18 -3
  29. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_cli_main.py +1 -1
  30. dotagents_cli-0.8.0/tests/test_cloud_setup.py +97 -0
  31. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_fix_cli.py +0 -28
  32. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_fix_init.py +2 -2
  33. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_fix_skills_adapters.py +16 -0
  34. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_init_base.py +15 -0
  35. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_overlays_cli.py +61 -0
  36. dotagents_cli-0.8.0/tests/test_pipwheel.py +102 -0
  37. dotagents_cli-0.8.0/tests/test_pyvenv_core.py +216 -0
  38. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_sources_uri.py +2 -2
  39. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tools/cloud-setup.sh +18 -4
  40. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tools/pyz_smoke.sh +8 -8
  41. dotagents_cli-0.7.5/tests/test_cloud_setup.py +0 -55
  42. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/.gitignore +0 -0
  43. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/LICENSE +0 -0
  44. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/docs/api/agents.md +0 -0
  45. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/docs/api/cli.md +0 -0
  46. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/docs/api/commands.md +0 -0
  47. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/docs/api/context.md +0 -0
  48. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/docs/api/env.md +0 -0
  49. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/docs/api/fs.md +0 -0
  50. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/docs/api/hooks.md +0 -0
  51. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/docs/api/merge.md +0 -0
  52. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/docs/api/overlays.md +0 -0
  53. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/docs/api/reference.md +0 -0
  54. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/docs/api/resources.md +0 -0
  55. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/docs/api/scope.md +0 -0
  56. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/docs/api/skills.md +0 -0
  57. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/docs/api/sources.md +0 -0
  58. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/docs/api/wrappers.md +0 -0
  59. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/docs/changelog.md +0 -0
  60. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/docs/guide/authoring.md +0 -0
  61. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/docs/index.md +0 -0
  62. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/mkdocs.yml +0 -0
  63. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/__main__.py +0 -0
  64. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/_agents.py +0 -0
  65. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/_fs.py +0 -0
  66. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/_hooks.py +0 -0
  67. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/_ignore.py +0 -0
  68. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/_merge.py +0 -0
  69. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/_overlay/dotagents/cmds/findings.py +0 -0
  70. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/_overlay/dotagents/cmds/launch.py +0 -0
  71. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/_overlay/dotagents/hooks/preinvocation_antigravity_context.py +0 -0
  72. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/_overlay/dotagents/hooks/pretooluse_codex_env.py +0 -0
  73. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/_overlay/dotagents/hooks/sessionstart_codex_context.py +0 -0
  74. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/_overlay/dotagents/templates/PROJECT.md +0 -0
  75. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/_scope.py +0 -0
  76. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/_wrappers.py +0 -0
  77. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/cli/_common.py +0 -0
  78. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/cli/context.py +0 -0
  79. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/cli/env.py +0 -0
  80. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/cli/path.py +0 -0
  81. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/src/dotagents/py.typed +0 -0
  82. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/_helpers.py +0 -0
  83. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/_shell.py +0 -0
  84. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_agents.py +0 -0
  85. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_api_header.py +0 -0
  86. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_audit_leak.py +0 -0
  87. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_cmds_discovery.py +0 -0
  88. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_context.py +0 -0
  89. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_env.py +0 -0
  90. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_env_cli_scope.py +0 -0
  91. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_env_format.py +0 -0
  92. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_env_into.py +0 -0
  93. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_env_regressions.py +0 -0
  94. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_env_safety.py +0 -0
  95. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_findings_cmd.py +0 -0
  96. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_fix_adapters.py +0 -0
  97. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_fix_env.py +0 -0
  98. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_fix_hooks.py +0 -0
  99. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_fix_overlays.py +0 -0
  100. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_fix_packaging.py +0 -0
  101. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_fix_scope_context.py +0 -0
  102. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_git_ssl_revoke.py +0 -0
  103. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_hooks.py +0 -0
  104. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_ignore.py +0 -0
  105. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_last_mile.py +0 -0
  106. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_launch_cmd.py +0 -0
  107. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_local_additions.py +0 -0
  108. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_mcp.py +0 -0
  109. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_no_internal_labels.py +0 -0
  110. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_overlay_libs.py +0 -0
  111. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_overlays_command.py +0 -0
  112. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_path_timeout_frontmatter.py +0 -0
  113. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_powershell_env_hook.py +0 -0
  114. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_quoting_injection_safety.py +0 -0
  115. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_scope.py +0 -0
  116. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_sources.py +0 -0
  117. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_wire_hooks.py +0 -0
  118. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tests/test_wrappers.py +0 -0
  119. {dotagents_cli-0.7.5 → dotagents_cli-0.8.0}/tools/audit.py +0 -0
@@ -7,6 +7,92 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.8.0] - 2026-10-16
11
+
12
+ ### Added
13
+
14
+ - `overlays add` takes globs: `overlays add '*' -g` installs every overlay the repos
15
+ offer, which for a store with a registry (`<store>/dotagents.toml`) is everything
16
+ it names. A glob matching nothing is an error.
17
+ - `tools/cloud-setup.sh` installs every overlay the store's registry names
18
+ (`overlays add '*'`) before falling back to installing `private-sync` alone.
19
+
20
+ - Each store has a Python venv, `<store>/.pyvenv/<X.Y.Z>-<os>-<arch>/`, made from
21
+ the Python that runs dotagents, where skills run. `init` and `overlays add` /
22
+ `sync` / `remove` keep it current: the user venv always has duho, and every
23
+ overlay's `requirements.txt` is installed (in one pip run, only when a file
24
+ changed, before the overlay's `setup.py`). A project gets its own venv when one of
25
+ its overlays ships requirements or a `lib/`. `--no-venv` skips it for a run;
26
+ `AGENTS_NO_PYVENV=1` turns it off. `.pyvenv/` holds the agents' venvs only: a
27
+ venv there that no sync completed is never used, and a project's own code keeps
28
+ its venvs in the project tree.
29
+ - The venvs layer project > user > system through a `.pth` file in each: the store's
30
+ own overlay libs, then each lower store's venv packages and libs, then dotagents
31
+ itself. A project venv imports the project's packages first, then the user's.
32
+ - `env` points `AGENTS_PYTHON` at the active venv and names it in `AGENTS_PYVENV`;
33
+ overlay `setup.py` scripts run under it. `context` prints it ("Python for
34
+ skills"), and its JSON form carries it as `python`. The managed block tells
35
+ agents to run skill scripts with `$AGENTS_PYTHON`.
36
+ - pip without ensurepip: a venv where the interpreter has no ensurepip is created
37
+ without pip, and pip runs from its wheel (25.3, the last for Python 3.9, checked
38
+ against a pinned sha256). The wheel is found in the store's cache, in a `.pyz`
39
+ built with the new `build-pyz --with-pip`, in `AGENTS_PIP_SOURCE` (a directory of
40
+ wheels, or any URI pathapi-uri reads) or pip's `find-links`, or on your index
41
+ (`PIP_INDEX_URL`, or the mirror in `pip.ini` / `pip.conf`). `AGENTS_PIP_SOURCE`
42
+ is also passed to pip as `--find-links` for the requirements.
43
+
44
+ ### Changed
45
+
46
+ - `overlays add` no longer stops at the first overlay that fails. Each failure is
47
+ logged, the overlays that require the failed one are skipped, every other overlay
48
+ is installed, and the command exits 1 naming each failure. A failed overlay this
49
+ run was installing for the first time is removed again, as before; the ones that
50
+ installed stay.
51
+ - With a scope venv, `env` no longer puts the overlay libs it layers on
52
+ `PYTHONPATH`: the venv's interpreter imports them, and no other Python in the
53
+ session should. Without a venv, `PYTHONPATH` carries them as before.
54
+ `AGENTS_PYTHONPATH` still lists every lib.
55
+ - The base block's "Startup: annotate that you read `…`" line names a store under
56
+ the home directory from there (`~/.agents/AGENTS.md`), and any other store by its
57
+ absolute path as before. A store kept in git and used on machines whose home
58
+ directories differ no longer shows `AGENTS.md` modified on all but one of them.
59
+
60
+ ### Fixed
61
+
62
+ - `env --cache` on Windows with Python before 3.13 could miss a cache it had just
63
+ written: `time.time()` there lags the file's own timestamp by up to one clock
64
+ tick, and a cache file dated after "now" was treated as stale. A cache file
65
+ dated up to 2 s in the future now counts as fresh.
66
+
67
+ ## [0.7.6] - 2026-10-15
68
+
69
+ ### Added
70
+
71
+ - A `repo` extra (`repopath[uri]`) for overlay sources at `github:`, `gitlab:` and
72
+ `repo:` URIs, which the `uri` extra no longer brings.
73
+
74
+ ### Changed
75
+
76
+ - dotagents depends on `pathapi` (`>=0.1.0,<0.2`), the new name of `pathlib_next`,
77
+ instead of `pathlib_next`. The `.pyz` vendors it; `build-pyz --pathapi-version`
78
+ names its pin, and `--pathlib-next-version` still works. On Python 3.9 nothing
79
+ else has to be installed for it.
80
+ - The extras install pathapi's own distributions: `uri` and `http` install
81
+ `pathapi-uri` (the URI layer, imported as `uripath`, with `file:`, `http(s):`,
82
+ `dav:`, `ftp:`, `zip:` and `tar:` on the standard library); `sftp` adds
83
+ `sftppath[paramiko]` and `s3` adds `objpath[s3]`. Overlay sources are read as
84
+ before. A `git:` URI is not a scheme any more; a repository tree is a `repo:` URI.
85
+ - `build-pyz --extras` vendors what the named extras install, each distribution at
86
+ its floor, and refuses an extra it does not know.
87
+ - `about` lists `pathapi`, `pathapi-uri`, `netimps` and the plugin distributions in
88
+ place of `pathlib_next`, `uritools` and `requests`.
89
+
90
+ ### Removed
91
+
92
+ - The `.pyz` no longer extracts the built-in command modules' sources to temporary
93
+ files at startup: duho reads a command's flags and help through the zip importer
94
+ when the module has no file on disk.
95
+
10
96
  ## [0.7.5] - 2026-10-14
11
97
 
12
98
  ### Changed
@@ -1441,7 +1527,9 @@ Patch release: the PATH/POSIX-conversion fix above (the only change since 0.3.0)
1441
1527
  affected module sources (`dotagents.cli`, `duho.presets`) to extracted temp files
1442
1528
  before dispatch; a no-op for a plain install.
1443
1529
 
1444
- [Unreleased]: https://github.com/jose-pr/dotagents/compare/v0.7.5...HEAD
1530
+ [Unreleased]: https://github.com/jose-pr/dotagents/compare/v0.8.0...HEAD
1531
+ [0.8.0]: https://github.com/jose-pr/dotagents/compare/v0.7.6...v0.8.0
1532
+ [0.7.6]: https://github.com/jose-pr/dotagents/compare/v0.7.5...v0.7.6
1445
1533
  [0.7.5]: https://github.com/jose-pr/dotagents/compare/v0.7.4...v0.7.5
1446
1534
  [0.7.4]: https://github.com/jose-pr/dotagents/compare/v0.7.3...v0.7.4
1447
1535
  [0.7.3]: https://github.com/jose-pr/dotagents/compare/v0.7.2...v0.7.3
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: dotagents-cli
3
- Version: 0.7.5
3
+ Version: 0.8.0
4
4
  Summary: The dotagents CLI: install and manage a portable ~/.agents config for AI coding agents
5
5
  Project-URL: Homepage, https://github.com/jose-pr/dotagents/
6
6
  Project-URL: Repository, https://github.com/jose-pr/dotagents
@@ -24,12 +24,12 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
24
24
  Classifier: Typing :: Typed
25
25
  Requires-Python: >=3.9
26
26
  Requires-Dist: duho<0.8,>=0.7.5
27
- Requires-Dist: pathlib-next<0.10,>=0.9.0
27
+ Requires-Dist: pathapi<0.2,>=0.1.0
28
28
  Requires-Dist: tomli>=1.1.0; python_version < '3.11'
29
29
  Provides-Extra: dev
30
30
  Requires-Dist: build; extra == 'dev'
31
31
  Requires-Dist: hatchling>=1.27; extra == 'dev'
32
- Requires-Dist: pathlib-next[http]; extra == 'dev'
32
+ Requires-Dist: pathapi-uri<0.2,>=0.1.0; extra == 'dev'
33
33
  Requires-Dist: pytest; extra == 'dev'
34
34
  Requires-Dist: pyyaml; extra == 'dev'
35
35
  Provides-Extra: docs
@@ -37,13 +37,18 @@ Requires-Dist: mkdocs-material>=9.5; extra == 'docs'
37
37
  Requires-Dist: mkdocs>=1.5; extra == 'docs'
38
38
  Requires-Dist: mkdocstrings[python]>=0.24; extra == 'docs'
39
39
  Provides-Extra: http
40
- Requires-Dist: pathlib-next[http]; extra == 'http'
40
+ Requires-Dist: pathapi-uri<0.2,>=0.1.0; extra == 'http'
41
+ Provides-Extra: repo
42
+ Requires-Dist: pathapi-uri<0.2,>=0.1.0; extra == 'repo'
43
+ Requires-Dist: repopath[uri]<0.2,>=0.1.0; extra == 'repo'
41
44
  Provides-Extra: s3
42
- Requires-Dist: pathlib-next[s3]; extra == 's3'
45
+ Requires-Dist: objpath[s3]<0.2,>=0.1.0; extra == 's3'
46
+ Requires-Dist: pathapi-uri<0.2,>=0.1.0; extra == 's3'
43
47
  Provides-Extra: sftp
44
- Requires-Dist: pathlib-next[sftp]; extra == 'sftp'
48
+ Requires-Dist: pathapi-uri<0.2,>=0.1.0; extra == 'sftp'
49
+ Requires-Dist: sftppath[paramiko]<0.2,>=0.1.0; extra == 'sftp'
45
50
  Provides-Extra: uri
46
- Requires-Dist: pathlib-next[uri]; extra == 'uri'
51
+ Requires-Dist: pathapi-uri<0.2,>=0.1.0; extra == 'uri'
47
52
  Provides-Extra: yaml
48
53
  Requires-Dist: pyyaml; extra == 'yaml'
49
54
  Description-Content-Type: text/markdown
@@ -156,7 +161,8 @@ dotagents init --force # replace AGENTS.md's content wholesale
156
161
 
157
162
  `--from <source>` selects another *base*: a base overlay directory, a dotagents
158
163
  checkout (its `src/dotagents/_overlay`), a `file:`, `http(s):`, `zip:`, `sftp:` or `s3:`
159
- URI (`pip install "dotagents-cli[uri]"` for all but `file:`), or a git repository
164
+ URI (`pip install "dotagents-cli[uri]"` for all but `file:`, plus `[sftp]` or `[s3]`
165
+ for those schemes), or a git repository
160
166
  (`repo[@ref][#path]`). A remote one is fetched into `<user store>/.cache/overlays/`.
161
167
  The bundled base ships inside the package, so `--from` is only for a base of your own.
162
168
  `init` records it (without any credentials in the URL), and later `init` and
@@ -209,6 +215,11 @@ store's shared `skills/` so every agent sees the same skills.
209
215
  `.ignore` at the overlay's root match (setup output, local state) and tool caches are left
210
216
  alone; `--prune` clears them too. A fresh `add` whose setup script fails is rolled
211
217
  back.
218
+ - Each store has a Python venv, `<store>/.pyvenv/<version>-<os>-<arch>/`, where skills
219
+ run (`$AGENTS_PYTHON`): duho, every overlay's `requirements.txt` and every overlay
220
+ `lib/` import there, layered project > user > system. pip comes from the
221
+ interpreter, else its pinned wheel (cache, `AGENTS_PIP_SOURCE`, your index mirror,
222
+ or a `.pyz` built `--with-pip`).
212
223
  - `sync` refreshes each overlay from the repo it was installed from (`--repo` replaces
213
224
  that source), installs a `requires` added upstream, and re-merges the managed block.
214
225
  - `remove` deletes the overlay's directory, unpublishes only the skills **it**
@@ -239,7 +250,7 @@ authors:
239
250
 
240
251
  ### Downloadable `dotagents.pyz`
241
252
 
242
- A self-contained zipapp with `duho`, `pathlib_next` and `tomli` bundled in (pure
253
+ A self-contained zipapp with `duho`, `pathapi` and `tomli` bundled in (pure
243
254
  Python, so one file runs on any OS and on Python 3.9+), so it needs no
244
255
  `pip install`. Each release attaches one:
245
256
  <https://github.com/jose-pr/dotagents/releases/latest/download/dotagents.pyz>.
@@ -106,7 +106,8 @@ dotagents init --force # replace AGENTS.md's content wholesale
106
106
 
107
107
  `--from <source>` selects another *base*: a base overlay directory, a dotagents
108
108
  checkout (its `src/dotagents/_overlay`), a `file:`, `http(s):`, `zip:`, `sftp:` or `s3:`
109
- URI (`pip install "dotagents-cli[uri]"` for all but `file:`), or a git repository
109
+ URI (`pip install "dotagents-cli[uri]"` for all but `file:`, plus `[sftp]` or `[s3]`
110
+ for those schemes), or a git repository
110
111
  (`repo[@ref][#path]`). A remote one is fetched into `<user store>/.cache/overlays/`.
111
112
  The bundled base ships inside the package, so `--from` is only for a base of your own.
112
113
  `init` records it (without any credentials in the URL), and later `init` and
@@ -159,6 +160,11 @@ store's shared `skills/` so every agent sees the same skills.
159
160
  `.ignore` at the overlay's root match (setup output, local state) and tool caches are left
160
161
  alone; `--prune` clears them too. A fresh `add` whose setup script fails is rolled
161
162
  back.
163
+ - Each store has a Python venv, `<store>/.pyvenv/<version>-<os>-<arch>/`, where skills
164
+ run (`$AGENTS_PYTHON`): duho, every overlay's `requirements.txt` and every overlay
165
+ `lib/` import there, layered project > user > system. pip comes from the
166
+ interpreter, else its pinned wheel (cache, `AGENTS_PIP_SOURCE`, your index mirror,
167
+ or a `.pyz` built `--with-pip`).
162
168
  - `sync` refreshes each overlay from the repo it was installed from (`--repo` replaces
163
169
  that source), installs a `requires` added upstream, and re-merges the managed block.
164
170
  - `remove` deletes the overlay's directory, unpublishes only the skills **it**
@@ -189,7 +195,7 @@ authors:
189
195
 
190
196
  ### Downloadable `dotagents.pyz`
191
197
 
192
- A self-contained zipapp with `duho`, `pathlib_next` and `tomli` bundled in (pure
198
+ A self-contained zipapp with `duho`, `pathapi` and `tomli` bundled in (pure
193
199
  Python, so one file runs on any OS and on Python 3.9+), so it needs no
194
200
  `pip install`. Each release attaches one:
195
201
  <https://github.com/jose-pr/dotagents/releases/latest/download/dotagents.pyz>.
@@ -100,10 +100,15 @@ dotagents init # base config into ./.agents (project sc
100
100
  dotagents init -g # ...into ~/.agents (user scope)
101
101
  dotagents init --bin-dir ~/.local/bin # also write a `dotagents` command on PATH
102
102
  dotagents init --no-hooks # skip agent hook wiring + the skills links
103
+ dotagents init --no-venv # skip the store's Python venv (duho for skills)
103
104
  dotagents init --agents claude,codex # exactly these agents (default: detected + claude)
104
105
  dotagents init --dry-run
105
106
  ```
106
107
 
108
+ `init` also creates or updates the store's Python venv, where skills run (see
109
+ [the scope venv](overlays.md#python-dependencies-and-the-scope-venv)). Offline, or
110
+ with no pip to be had, that is a warning; `overlays sync` retries.
111
+
107
112
  ### Hook wiring
108
113
 
109
114
  For each active agent, `init` adds what that harness needs to load the config, and
@@ -198,6 +203,7 @@ Manages opt-in overlays **by name**. See [Overlays](overlays.md) for the full mo
198
203
 
199
204
  ```bash
200
205
  dotagents overlays add python engineering # install into the scope, publish skills, merge rules/routing
206
+ dotagents overlays add '*' -g # everything the repos offer (a store registry: all it names)
201
207
  dotagents overlays list # installed (discovered) + available from the repos
202
208
  dotagents overlays sync 'py*' # refresh installed overlays matching a glob
203
209
  dotagents overlays sync --prune # also clear what .gitignore/.ignore protect: exactly upstream
@@ -205,7 +211,14 @@ dotagents overlays remove python # delete the overlay dir, unpublish i
205
211
  dotagents overlays show python # describe one: manifest, requires, setup, skills, source (--json)
206
212
  ```
207
213
 
208
- - **`add`** installs what each manifest's `requires` names first, each requirement
214
+ - **`add`** takes names or globs: `'*'` is every overlay the repos offer, so with
215
+ a store registry it installs everything the registry names, and `'py*'` the ones
216
+ starting with `py`; a glob that matches nothing is an error. One overlay failing
217
+ (its copy, requirements or setup) does not stop the rest: it is logged, what
218
+ requires it is skipped, everything else installs, and the command exits 1 naming
219
+ each failure. A failed overlay this run was installing for the first time is
220
+ removed again; one that was already installed is left in place, not set up.
221
+ `add` installs what each manifest's `requires` names first, each requirement
209
222
  installed and set up before the overlay that needs it (`--no-requires` to skip); a
210
223
  requirement the scope already has, in its own store or the user store for a project,
211
224
  is satisfied and left alone, while a name you ask for explicitly is always
@@ -213,8 +226,11 @@ dotagents overlays show python # describe one: manifest, requires, s
213
226
  before touching anything — the first repo that offers a name wins — records where
214
227
  each overlay came from, and publishes skills from the installed copy, never
215
228
  replacing a skill already in the shared `skills/` dir (and links them into
216
- Claude's skills dir when `init` wired Claude for the store). A fresh install whose setup
217
- script fails is rolled back. A source inside the store's own `overlays/` directory
229
+ Claude's skills dir when `init` wired Claude for the store). Each overlay's
230
+ `requirements.txt` is installed into the scope venv before its setup script runs
231
+ (`--no-venv` skips it; see
232
+ [the scope venv](overlays.md#python-dependencies-and-the-scope-venv)). A fresh install
233
+ whose requirements or setup script fail is rolled back. A source inside the store's own `overlays/` directory
218
234
  is refused (by `sync` too): `remove` would delete the only copy.
219
235
  - `add`, `remove` and `show` without an overlay name are usage errors (exit 2), and
220
236
  a `--dry-run` says what it would write (`would recompose ...`) instead of reporting
@@ -359,7 +375,7 @@ form and drop names that are not shell identifiers.
359
375
  `<NAME_OVERLAY_ROOT>` placeholder, so an env file and a context file refer to an
360
376
  overlay's install dir by one name. When `dotagents` runs from a `.pyz`,
361
377
  `AGENTS_PYLIB` names that archive: the libraries it bundles (duho,
362
- pathlib_next) import from it, so an overlay built on them appends it to
378
+ pathapi) import from it, so an overlay built on them appends it to
363
379
  `sys.path` when its own import fails. An installed `dotagents` sets nothing,
364
380
  since those libraries are already in `AGENTS_PYTHON`'s site-packages. It is
365
381
  never put on `PYTHONPATH`, where it would shadow a project's own copy.
@@ -572,39 +588,46 @@ See [Private sync](private-sync.md) for the full walkthrough.
572
588
  ## about
573
589
 
574
590
  ```bash
575
- dotagents about # dotagents-cli <version>, then duho, pathlib_next, ...
591
+ dotagents about # dotagents-cli <version>, then duho, pathapi, ...
576
592
  dotagents about --json # the same, plus where it runs from and the Python
577
593
  ```
578
594
 
579
595
  One `<distribution> <version>` per line, the CLI first. From a built `.pyz` the
580
596
  list is exactly what `build-pyz` vendored (it records the names and versions in
581
597
  `dotagents/_bundle.json` before stripping the `dist-info` dirs the zipapp would
582
- otherwise carry, so `--extras uri,http` shows up here as `uritools`, `requests`
583
- and friends). From a plain install it is whichever of a fixed set is installed:
584
- `duho`, `pathlib_next`, `uritools`, `netimps` and `requests`. A package outside that
585
- set, such as a client the `sftp` or `s3` extra pulls in, is not listed.
598
+ otherwise carry, so `--extras uri` shows up here as `pathapi-uri` and `netimps`).
599
+ From a plain install it is whichever of a fixed set is installed: `duho`, `pathapi`,
600
+ `pathapi-uri`, `netimps`, `sftppath`, `objpath` and `repopath`. A package outside
601
+ that set, such as a client the `sftp` or `s3` extra pulls in (`paramiko`, `boto3`),
602
+ is not listed.
586
603
 
587
604
  ## build-pyz
588
605
 
589
606
  ```bash
590
607
  python -m dotagents build-pyz --out dist/dotagents.pyz
591
- python -m dotagents build-pyz --extras uri,http # also vendor pathlib_next's extras
608
+ python -m dotagents build-pyz --extras uri,repo # also vendor what those extras install
609
+ python -m dotagents build-pyz --with-pip # also carry pip, for machines without it
592
610
  ```
593
611
 
594
- Builds a self-contained zipapp from a source checkout, with `duho` and `pathlib_next`
595
- vendored (plus the `pathlib_next` extras named by `--extras`), so it runs with no
612
+ Builds a self-contained zipapp from a source checkout, with `duho` and `pathapi`
613
+ vendored (plus what the dotagents-cli extras named by `--extras` install), so it runs with no
596
614
  `pip install`. The repo's `tools/` never ships in it. Flags:
597
615
 
598
616
  - `--out <path>` — where to write it (default `dist/dotagents.pyz`).
599
617
  - `--python <shebang>` — the interpreter line embedded in it (default
600
618
  `/usr/bin/env python3`).
601
- - `--duho-version`, `--pathlib-next-version` — the versions vendored (defaults: the
602
- floors the package declares).
603
- - `--extras <a,b>` — `pathlib_next` extras to vendor too (`uri`, `http`, `s3`),
619
+ - `--duho-version`, `--pathapi-version` — the versions vendored (defaults: the
620
+ floors the package declares). `--pathlib-next-version` is the old name of the
621
+ second.
622
+ - `--extras <a,b>` — dotagents-cli extras to vendor too (`uri`, `http`, `s3`, `repo`),
623
+ each distribution they install at its floor,
604
624
  so the `.pyz` can read those overlay sources; none by default. Everything is
605
625
  vendored as pure-Python wheels resolved for Python 3.9, so the file does not
606
626
  depend on the machine that built it; `sftp` needs native modules and fails the
607
627
  build with a message saying so. The archive is compressed.
628
+ - `--with-pip` — also vendor the pinned pip wheel (about 1.8 MB), so the `.pyz` can
629
+ set up the scope venv where Python has no ensurepip and no index is reachable
630
+ (see [the scope venv](overlays.md#python-dependencies-and-the-scope-venv)).
608
631
 
609
632
  Each release attaches a built one:
610
633
  <https://github.com/jose-pr/dotagents/releases/latest/download/dotagents.pyz>.
@@ -5,7 +5,9 @@ pip install dotagents-cli # the `dotagents` command and `import dot
5
5
  pip install "dotagents-cli[uri]" # + remote overlay sources beyond git and http(s) registries
6
6
  ```
7
7
 
8
- The `http`, `sftp` and `s3` extras add those schemes' own clients to `uri`. With no
8
+ `uri` installs `pathapi-uri`: `file:`, `http(s):`, `dav:`, `ftp:`, `zip:` and `tar:` on
9
+ the standard library. `sftp`, `s3` and `repo` add `sftp:`, `s3:` and `github:` /
10
+ `gitlab:` / `repo:` to it; `http` installs the same as `uri`. With no
9
11
  `pip` at all, use the [downloadable `dotagents.pyz`](#downloadable-dotagentspyz).
10
12
 
11
13
  `dotagents init` then lays down the neutral **base config**. Opinionated content is
@@ -49,7 +51,8 @@ dotagents init --force # replace AGENTS.md's content wholesale
49
51
 
50
52
  `--from <source>` selects another *base*: a base overlay directory, a dotagents
51
53
  checkout (its `src/dotagents/_overlay`), a `file:`, `http(s):`, `zip:`, `sftp:` or `s3:`
52
- URI (`pip install "dotagents-cli[uri]"` for all but `file:`), or a git repository
54
+ URI (`pip install "dotagents-cli[uri]"` for all but `file:`, plus `[sftp]` or `[s3]`
55
+ for those schemes), or a git repository
53
56
  (`repo[@ref][#path]`). A remote one is fetched into `<user store>/.cache/overlays/`.
54
57
  The bundled base ships inside the package, so `--from` is only for a base of your own.
55
58
  `init` records it in
@@ -58,7 +61,7 @@ The bundled base ships inside the package, so `--from` is only for a base of you
58
61
 
59
62
  ## Downloadable `dotagents.pyz`
60
63
 
61
- A self-contained zipapp with `duho`, `pathlib_next` and `tomli` bundled in as
64
+ A self-contained zipapp with `duho`, `pathapi` and `tomli` bundled in as
62
65
  pure-Python wheels (plus whatever `build-pyz --extras` added), so it needs no
63
66
  `pip install` and runs on any OS with Python 3.9+. Each release attaches one:
64
67
  <https://github.com/jose-pr/dotagents/releases/latest/download/dotagents.pyz>.
@@ -124,9 +124,10 @@ in what the path names:
124
124
  `…/dotagents.git@repo#overlays/net` is the `net` overlay itself. Given as `--repo`,
125
125
  that form would list `net`'s own subdirectories as overlays.
126
126
 
127
- A `scheme://` location that is not git is a **pathlib_next path**. With the `uri`
128
- extra (`pip install 'dotagents-cli[uri]'`; `[http]`, `[sftp]`, `[s3]` add the schemes'
129
- own clients) any scheme pathlib_next speaks works like a local path: an `http(s)://`
127
+ A `scheme://` location that is not git is a **uripath path** (pathapi's URI layer, the
128
+ `pathapi-uri` distribution). With the `uri` extra (`pip install 'dotagents-cli[uri]'`;
129
+ `[sftp]`, `[s3]` and `[repo]` add `sftp:`, `s3:` and `github:` / `gitlab:` / `repo:`)
130
+ any scheme uripath speaks works like a local path: an `http(s)://`
130
131
  directory listing, an `sftp`, `s3`, `dav` or `github` tree is a directory of overlays
131
132
  as a repo or one overlay as a source, a file is a registry; an archive is a tree too —
132
133
  `zip:<archive-uri>!/<inner path>` (`tar:`, or `archive:` to auto-detect), the archive
@@ -135,7 +136,7 @@ materialized into `<user store>/.cache/overlays/uri/`, synced once per run, and
135
136
  from there; `file://` is a local path, no copy. Without the extra, an `http(s)://`
136
137
  location can still be a registry file (fetched with the standard library), and
137
138
  anything else says which extra it needs. The `.pyz` vendors none of this unless built
138
- with `build-pyz --extras uri,http`.
139
+ with `build-pyz --extras uri`.
139
140
 
140
141
  A source written as a **relative path** (`./python`, `../shared/net`, `overlays/rust`)
141
142
  is relative to the registry it is in: the registry file's directory for a local file,
@@ -225,12 +226,49 @@ copies, where symlinks are unavailable) into the scope's shared skills dir, so e
225
226
  agent that reads that dir picks up the same skills. Removing the overlay unpublishes
226
227
  only the skills it published, then sweeps any now-broken symlinks.
227
228
 
229
+ ## Python dependencies and the scope venv
230
+
231
+ Every store has a Python venv, `<store>/.pyvenv/<X.Y.Z>-<os>-<arch>/` (for example
232
+ `~/.agents/.pyvenv/3.14.7-nt-arm64`), made from the Python that runs dotagents.
233
+ A store's `.pyvenv/` holds these **agents' venvs only**: skills, overlay helpers and
234
+ setup scripts run there. A project's own code gets its venvs beside the store, in
235
+ the project root's `.pyvenv/` (`<project>/.pyvenv/<version>-<os>-<arch>/`, which the
236
+ python overlay's `dotagents pyvenv` creates); only a venv dotagents itself synced is
237
+ ever used as an agents' venv. `init` and every
238
+ `overlays add` / `sync` / `remove` keep it current:
239
+
240
+ - The user store's venv always has **duho**, so any skill can build a command line
241
+ on it, plus the packages each overlay installed there lists in a
242
+ **`requirements.txt`** at its root (pip's format). They are installed in one pip
243
+ run, so pip sees every constraint at once, and only when a file changed.
244
+ - A project gets its own venv only when one of its overlays ships a
245
+ `requirements.txt` or a `lib/`; otherwise a project session uses the user venv.
246
+ - The venvs **layer like everything else**. A `.pth` file in each venv lists, highest
247
+ precedence first: the store's own overlay libs, then the user venv's packages and
248
+ libs, then the system store's. dotagents itself comes last. So in a project venv,
249
+ the project's packages and libs win, then the user's, then the system's.
250
+ - `dotagents env` points **`AGENTS_PYTHON`** at the active venv (and names it in
251
+ `AGENTS_PYVENV`). Overlay `setup.py` and `env.py` run under it, and the managed
252
+ block tells agents to run skill scripts with it. Libs the venv layers stay off
253
+ `PYTHONPATH`, so no other Python in the session, such as a project's own venv,
254
+ imports them by accident.
255
+
256
+ **No ensurepip, no network?** pip runs from its wheel, pinned by version (25.3, the
257
+ last for Python 3.9) and hash, found in this order: the store's cache, a copy
258
+ vendored into the `.pyz` (`build-pyz --with-pip`), `AGENTS_PIP_SOURCE` (a directory
259
+ of wheels, or any URI pathapi-uri reads: `file:`, `s3:`, `sftp:`, ...), pip's own
260
+ `find-links`, then your index (`PIP_INDEX_URL` or the mirror in `pip.ini` /
261
+ `pip.conf`). `AGENTS_PIP_SOURCE` is also handed to pip as `--find-links` for the
262
+ requirements themselves.
263
+
264
+ Opt out per run with `--no-venv`, or for good with `AGENTS_NO_PYVENV=1`.
265
+
228
266
  ## Setup scripts
229
267
 
230
268
  An overlay may ship an **idempotent** `setup.py` at its root — the recommended,
231
- OS-agnostic form: it runs under the same Python that runs dotagents, so it works on
232
- every platform. After `add` / `sync` copies the overlay
233
- in, dotagents runs the script automatically. Reserve it for real install-time work:
269
+ OS-agnostic form: it runs under `AGENTS_PYTHON` (the scope venv above, with the
270
+ overlay's requirements installed first), so it works on every platform. After
271
+ `add` / `sync` copies the overlay in, dotagents runs the script automatically. Reserve it for real install-time work:
234
272
  `PATH`, `PYTHONPATH` and `$<NAME>_OVERLAY_ROOT` are `dotagents env`'s job
235
273
  (above), and an overlay's own env vars belong in its `env.py`, not in a script that
236
274
  writes one into the store — none of the example overlays ship a setup script any more.
@@ -241,8 +279,9 @@ Presence of a script is the opt-in; skip it with `--no-setup`. The author contra
241
279
  - **Environment** carries `AGENTS_HOME` (the user store), `AGENTS_SCOPE_ROOT` (the
242
280
  store the overlay is installed into), `AGENTS_SCOPE` (`user` or `project`) and
243
281
  `AGENTS_OVERLAY_DIR` (the overlay's own installed dir) — never hardcode a home path.
244
- - **Environment** is also the scope's assembled `dotagents env`: every overlay's `lib/`
245
- on `PYTHONPATH`, its `bin/` on `PATH`.
282
+ - **Environment** is also the scope's assembled `dotagents env`: every overlay's `bin/`
283
+ on `PATH`, and every overlay's `lib/` importable (through the venv's layering, or
284
+ `PYTHONPATH` without a venv).
246
285
  - **Time limit**: 300 seconds, or the manifest's `setup_timeout`, or the command's
247
286
  `--setup-timeout` (which wins); `0` means no limit. A script still running then is
248
287
  stopped, and that counts as a failure (exit 124).
@@ -19,6 +19,16 @@ never lands in the public repo). `<name>` defaults to the project's basename, so
19
19
  local checkout and a cloud checkout of the same project resolve to the same store
20
20
  entry.
21
21
 
22
+ The store's installed overlays can travel two ways:
23
+
24
+ - **Tracked copies**: `overlays/` is committed. Every machine and cloud session has
25
+ them with the clone, offline; every `overlays sync` is a diff in the private repo.
26
+ - **A registry**: `<store>/dotagents.toml` names one source per overlay and
27
+ `overlays/` is left out of the repo. `dotagents overlays add '*' -g` installs
28
+ everything it names, keeping going past one that fails; the bootstrap below runs
29
+ it in a cloud session. The repo stays small; each new machine fetches the
30
+ overlays once.
31
+
22
32
  ## Commands
23
33
 
24
34
  The overlay goes into the user store, since the store is what it syncs:
@@ -82,7 +92,8 @@ curl -fsSL https://raw.githubusercontent.com/<you>/dotagents/main/tools/cloud-se
82
92
  success. `&&` propagates the curl failure instead.
83
93
 
84
94
  The bootstrap authenticates (bypassing a hosted-runner `github.com` → proxy git
85
- rewrite), clones/pulls the store, installs the CLI, links the project, and wires the
95
+ rewrite), clones/pulls the store, installs the CLI, installs every overlay the store's
96
+ registry names (`overlays add '*'`, when it has one), links the project, and wires the
86
97
  hooks into `~/.claude/settings.json` — driven by `AGENTS_REMOTE` /
87
98
  `DOTAGENTS_AGENTS_TOKEN` / `DOTAGENTS_CLI_INSTALL` environment variables (the token is
88
99
  never committed). `AGENTS_OVERLAYS_REMOTE` / `AGENTS_OVERLAYS_REF` choose where it
@@ -5,7 +5,7 @@ Thin front over ``dotagents.cli.main()``, kept at this filename so existing
5
5
  muscle-memory/docs pointing at ``python install.py`` still work.
6
6
 
7
7
  Self-bootstrapping, inside a virtual environment: the CLI needs the
8
- ``dotagents`` package and its ``duho``/``pathlib_next`` dependencies
8
+ ``dotagents`` package and its ``duho``/``pathapi`` dependencies
9
9
  importable. If they aren't -- e.g. a fresh venv with nothing installed yet --
10
10
  this shim installs this checkout **into the interpreter that is running it**
11
11
  (``sys.executable -m pip install -e .``) and retries, exactly once. When
@@ -49,7 +49,7 @@ def _import_main():
49
49
  """Return ``dotagents.cli.main`` if importable, else None.
50
50
 
51
51
  The ``src/`` fallback lets an un-pip-installed checkout resolve its
52
- ``src/`` layout directly, provided ``duho``/``pathlib_next`` are importable
52
+ ``src/`` layout directly, provided ``duho``/``pathapi`` are importable
53
53
  some other way. A plain editable install makes all three importable without
54
54
  the fallback.
55
55
  """
@@ -36,19 +36,26 @@ classifiers = [
36
36
  # raise a floor and move its pin there in the same change.
37
37
  dependencies = [
38
38
  "duho>=0.7.5,<0.8",
39
- "pathlib_next>=0.9.0,<0.10",
39
+ "pathapi>=0.1.0,<0.2",
40
40
  # overlay.toml manifests and TOML registries; tomllib is stdlib from 3.11.
41
41
  'tomli>=1.1.0; python_version < "3.11"',
42
42
  ]
43
43
 
44
+ # Overlay sources at a URI. `pathapi-uri` (import name `uripath`) gives the
45
+ # file:, http(s):, dav:, ftp:, zip: and tar: schemes on the standard library;
46
+ # the other distributions add their schemes to it. `build-pyz --extras` vendors
47
+ # the floor of each (EXTRA_REQUIREMENTS in src/dotagents/cli/build_pyz.py).
44
48
  [project.optional-dependencies]
45
- uri = ["pathlib_next[uri]"]
46
- http = ["pathlib_next[http]"]
47
- sftp = ["pathlib_next[sftp]"]
48
- s3 = ["pathlib_next[s3]"]
49
+ uri = ["pathapi-uri>=0.1.0,<0.2"]
50
+ # http(s) is part of `uri` now; kept so `dotagents-cli[http]` still installs.
51
+ http = ["pathapi-uri>=0.1.0,<0.2"]
52
+ sftp = ["pathapi-uri>=0.1.0,<0.2", "sftppath[paramiko]>=0.1.0,<0.2"]
53
+ s3 = ["pathapi-uri>=0.1.0,<0.2", "objpath[s3]>=0.1.0,<0.2"]
54
+ # github:, gitlab: and repo: (a repository's tree at a ref).
55
+ repo = ["pathapi-uri>=0.1.0,<0.2", "repopath[uri]>=0.1.0,<0.2"]
49
56
  # YAML overlay-repo registries (dotagents.yaml / *.yml).
50
57
  yaml = ["pyyaml"]
51
- dev = ["build", "hatchling>=1.27", "pytest", "pyyaml", "pathlib_next[http]"]
58
+ dev = ["build", "hatchling>=1.27", "pytest", "pyyaml", "pathapi-uri>=0.1.0,<0.2"]
52
59
  docs = [
53
60
  "mkdocs>=1.5",
54
61
  "mkdocs-material>=9.5",