omdev 0.0.25__tar.gz → 0.0.26__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 (522) hide show
  1. {omdev-0.0.25/omdev.egg-info → omdev-0.0.26}/PKG-INFO +8 -8
  2. {omdev-0.0.25 → omdev-0.0.26}/omdev/__about__.py +1 -1
  3. {omdev-0.0.25 → omdev-0.0.26}/omdev/packaging/marshal.py +1 -1
  4. {omdev-0.0.25 → omdev-0.0.26}/omdev/packaging/wheelfile.py +1 -1
  5. {omdev-0.0.25 → omdev-0.0.26}/omdev/scripts/ci.py +55 -46
  6. {omdev-0.0.25 → omdev-0.0.26}/omdev/scripts/interp.py +1 -19
  7. {omdev-0.0.25 → omdev-0.0.26}/omdev/scripts/lib/io/pipelines.py +29 -18
  8. {omdev-0.0.25 → omdev-0.0.26}/omdev/scripts/pidfiles.py +1 -19
  9. {omdev-0.0.25 → omdev-0.0.26}/omdev/scripts/pyproject.py +3 -21
  10. {omdev-0.0.25 → omdev-0.0.26/omdev.egg-info}/PKG-INFO +8 -8
  11. {omdev-0.0.25 → omdev-0.0.26}/omdev.egg-info/requires.txt +7 -7
  12. {omdev-0.0.25 → omdev-0.0.26}/pyproject.toml +8 -8
  13. {omdev-0.0.25 → omdev-0.0.26}/LICENSE +0 -0
  14. {omdev-0.0.25 → omdev-0.0.26}/MANIFEST.in +0 -0
  15. {omdev-0.0.25 → omdev-0.0.26}/README.md +0 -0
  16. {omdev-0.0.25 → omdev-0.0.26}/omdev/.omlish-manifests.json +0 -0
  17. {omdev-0.0.25 → omdev-0.0.26}/omdev/README.md +0 -0
  18. {omdev-0.0.25 → omdev-0.0.26}/omdev/__init__.py +0 -0
  19. {omdev-0.0.25 → omdev-0.0.26}/omdev/amalg/__init__.py +0 -0
  20. {omdev-0.0.25 → omdev-0.0.26}/omdev/amalg/__main__.py +0 -0
  21. {omdev-0.0.25 → omdev-0.0.26}/omdev/amalg/cli/__init__.py +0 -0
  22. {omdev-0.0.25 → omdev-0.0.26}/omdev/amalg/cli/main.py +0 -0
  23. {omdev-0.0.25 → omdev-0.0.26}/omdev/amalg/gen/__init__.py +0 -0
  24. {omdev-0.0.25 → omdev-0.0.26}/omdev/amalg/gen/gen.py +0 -0
  25. {omdev-0.0.25 → omdev-0.0.26}/omdev/amalg/gen/imports.py +0 -0
  26. {omdev-0.0.25 → omdev-0.0.26}/omdev/amalg/gen/manifests.py +0 -0
  27. {omdev-0.0.25 → omdev-0.0.26}/omdev/amalg/gen/resources.py +0 -0
  28. {omdev-0.0.25 → omdev-0.0.26}/omdev/amalg/gen/srcfiles.py +0 -0
  29. {omdev-0.0.25 → omdev-0.0.26}/omdev/amalg/gen/strip.py +0 -0
  30. {omdev-0.0.25 → omdev-0.0.26}/omdev/amalg/gen/types.py +0 -0
  31. {omdev-0.0.25 → omdev-0.0.26}/omdev/amalg/gen/typing.py +0 -0
  32. {omdev-0.0.25 → omdev-0.0.26}/omdev/amalg/info.py +0 -0
  33. {omdev-0.0.25 → omdev-0.0.26}/omdev/amalg/sources.py +0 -0
  34. {omdev-0.0.25 → omdev-0.0.26}/omdev/cache/__init__.py +0 -0
  35. {omdev-0.0.25 → omdev-0.0.26}/omdev/cache/compute/__init__.py +0 -0
  36. {omdev-0.0.25 → omdev-0.0.26}/omdev/cache/compute/cache.py +0 -0
  37. {omdev-0.0.25 → omdev-0.0.26}/omdev/cache/compute/contexts.py +0 -0
  38. {omdev-0.0.25 → omdev-0.0.26}/omdev/cache/compute/currents.py +0 -0
  39. {omdev-0.0.25 → omdev-0.0.26}/omdev/cache/compute/fns.py +0 -0
  40. {omdev-0.0.25 → omdev-0.0.26}/omdev/cache/compute/resolvers.py +0 -0
  41. {omdev-0.0.25 → omdev-0.0.26}/omdev/cache/compute/storage.py +0 -0
  42. {omdev-0.0.25 → omdev-0.0.26}/omdev/cache/compute/types.py +0 -0
  43. {omdev-0.0.25 → omdev-0.0.26}/omdev/cache/data/__init__.py +0 -0
  44. {omdev-0.0.25 → omdev-0.0.26}/omdev/cache/data/actions.py +0 -0
  45. {omdev-0.0.25 → omdev-0.0.26}/omdev/cache/data/cache.py +0 -0
  46. {omdev-0.0.25 → omdev-0.0.26}/omdev/cache/data/consts.py +0 -0
  47. {omdev-0.0.25 → omdev-0.0.26}/omdev/cache/data/defaults.py +0 -0
  48. {omdev-0.0.25 → omdev-0.0.26}/omdev/cache/data/manifests.py +0 -0
  49. {omdev-0.0.25 → omdev-0.0.26}/omdev/cache/data/specs.py +0 -0
  50. {omdev-0.0.25 → omdev-0.0.26}/omdev/capi/__init__.py +0 -0
  51. {omdev-0.0.25 → omdev-0.0.26}/omdev/capi/darwin/__init__.py +0 -0
  52. {omdev-0.0.25 → omdev-0.0.26}/omdev/capi/darwin/aps.py +0 -0
  53. {omdev-0.0.25 → omdev-0.0.26}/omdev/capi/darwin/ax.py +0 -0
  54. {omdev-0.0.25 → omdev-0.0.26}/omdev/capi/darwin/cf.py +0 -0
  55. {omdev-0.0.25 → omdev-0.0.26}/omdev/capi/darwin/cg.py +0 -0
  56. {omdev-0.0.25 → omdev-0.0.26}/omdev/capi/linux/__init__.py +0 -0
  57. {omdev-0.0.25 → omdev-0.0.26}/omdev/capi/linux/x11.py +0 -0
  58. {omdev-0.0.25 → omdev-0.0.26}/omdev/cc/__init__.py +0 -0
  59. {omdev-0.0.25 → omdev-0.0.26}/omdev/cc/__main__.py +0 -0
  60. {omdev-0.0.25 → omdev-0.0.26}/omdev/cc/cdeps.py +0 -0
  61. {omdev-0.0.25 → omdev-0.0.26}/omdev/cc/cdeps.toml +0 -0
  62. {omdev-0.0.25 → omdev-0.0.26}/omdev/cc/cli.py +0 -0
  63. {omdev-0.0.25 → omdev-0.0.26}/omdev/cc/srclangs.py +0 -0
  64. {omdev-0.0.25 → omdev-0.0.26}/omdev/cexts/__init__.py +0 -0
  65. {omdev-0.0.25 → omdev-0.0.26}/omdev/cexts/_boilerplate.cc +0 -0
  66. {omdev-0.0.25 → omdev-0.0.26}/omdev/cexts/_distutils/LICENSE +0 -0
  67. {omdev-0.0.25 → omdev-0.0.26}/omdev/cexts/_distutils/__init__.py +0 -0
  68. {omdev-0.0.25 → omdev-0.0.26}/omdev/cexts/_distutils/build_ext.py +0 -0
  69. {omdev-0.0.25 → omdev-0.0.26}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  70. {omdev-0.0.25 → omdev-0.0.26}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  71. {omdev-0.0.25 → omdev-0.0.26}/omdev/cexts/_distutils/compilers/options.py +0 -0
  72. {omdev-0.0.25 → omdev-0.0.26}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  73. {omdev-0.0.25 → omdev-0.0.26}/omdev/cexts/_distutils/dir_util.py +0 -0
  74. {omdev-0.0.25 → omdev-0.0.26}/omdev/cexts/_distutils/errors.py +0 -0
  75. {omdev-0.0.25 → omdev-0.0.26}/omdev/cexts/_distutils/extension.py +0 -0
  76. {omdev-0.0.25 → omdev-0.0.26}/omdev/cexts/_distutils/file_util.py +0 -0
  77. {omdev-0.0.25 → omdev-0.0.26}/omdev/cexts/_distutils/modified.py +0 -0
  78. {omdev-0.0.25 → omdev-0.0.26}/omdev/cexts/_distutils/spawn.py +0 -0
  79. {omdev-0.0.25 → omdev-0.0.26}/omdev/cexts/_distutils/sysconfig.py +0 -0
  80. {omdev-0.0.25 → omdev-0.0.26}/omdev/cexts/_distutils/util.py +0 -0
  81. {omdev-0.0.25 → omdev-0.0.26}/omdev/cexts/_distutils/version.py +0 -0
  82. {omdev-0.0.25 → omdev-0.0.26}/omdev/cexts/build.py +0 -0
  83. {omdev-0.0.25 → omdev-0.0.26}/omdev/cexts/cmake.py +0 -0
  84. {omdev-0.0.25 → omdev-0.0.26}/omdev/cexts/importhook.py +0 -0
  85. {omdev-0.0.25 → omdev-0.0.26}/omdev/cexts/magic.py +0 -0
  86. {omdev-0.0.25 → omdev-0.0.26}/omdev/cexts/scan.py +0 -0
  87. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/__init__.py +0 -0
  88. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/__main__.py +0 -0
  89. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/cache.py +0 -0
  90. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/ci.py +0 -0
  91. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/cli.py +0 -0
  92. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/compose.py +0 -0
  93. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/consts.py +0 -0
  94. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/docker/__init__.py +0 -0
  95. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/docker/buildcaching.py +0 -0
  96. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/docker/cache.py +0 -0
  97. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/docker/cacheserved/__init__.py +0 -0
  98. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/docker/cacheserved/cache.py +0 -0
  99. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/docker/cacheserved/manifests.py +0 -0
  100. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/docker/cmds.py +0 -0
  101. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/docker/dataserver.py +0 -0
  102. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/docker/imagepulling.py +0 -0
  103. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/docker/inject.py +0 -0
  104. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/docker/packing.py +0 -0
  105. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/docker/repositories.py +0 -0
  106. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/docker/utils.py +0 -0
  107. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/github/__init__.py +0 -0
  108. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/github/api/__init__.py +0 -0
  109. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/github/api/clients.py +0 -0
  110. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/github/api/v1/__init__.py +0 -0
  111. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/github/api/v1/api.py +0 -0
  112. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/github/api/v1/client.py +0 -0
  113. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/github/api/v2/__init__.py +0 -0
  114. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/github/api/v2/api.py +0 -0
  115. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/github/api/v2/azure.py +0 -0
  116. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/github/api/v2/client.py +0 -0
  117. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/github/bootstrap.py +0 -0
  118. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/github/cache.py +0 -0
  119. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/github/cli.py +0 -0
  120. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/github/env.py +0 -0
  121. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/github/inject.py +0 -0
  122. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/inject.py +0 -0
  123. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/requirements.py +0 -0
  124. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/shell.py +0 -0
  125. {omdev-0.0.25 → omdev-0.0.26}/omdev/ci/utils.py +0 -0
  126. {omdev-0.0.25 → omdev-0.0.26}/omdev/cli/__init__.py +0 -0
  127. {omdev-0.0.25 → omdev-0.0.26}/omdev/cli/__main__.py +0 -0
  128. {omdev-0.0.25 → omdev-0.0.26}/omdev/cli/_pathhack.py +0 -0
  129. {omdev-0.0.25 → omdev-0.0.26}/omdev/cli/clicli.py +0 -0
  130. {omdev-0.0.25 → omdev-0.0.26}/omdev/cli/install.py +0 -0
  131. {omdev-0.0.25 → omdev-0.0.26}/omdev/cli/main.py +0 -0
  132. {omdev-0.0.25 → omdev-0.0.26}/omdev/cli/managers.py +0 -0
  133. {omdev-0.0.25 → omdev-0.0.26}/omdev/cli/types.py +0 -0
  134. {omdev-0.0.25 → omdev-0.0.26}/omdev/clipboard/__init__.py +0 -0
  135. {omdev-0.0.25 → omdev-0.0.26}/omdev/clipboard/capi/__init__.py +0 -0
  136. {omdev-0.0.25 → omdev-0.0.26}/omdev/clipboard/capi/darwin_cf.py +0 -0
  137. {omdev-0.0.25 → omdev-0.0.26}/omdev/clipboard/capi/linux_x11.py +0 -0
  138. {omdev-0.0.25 → omdev-0.0.26}/omdev/clipboard/commands.py +0 -0
  139. {omdev-0.0.25 → omdev-0.0.26}/omdev/clipboard/platform.py +0 -0
  140. {omdev-0.0.25 → omdev-0.0.26}/omdev/clipboard/types.py +0 -0
  141. {omdev-0.0.25 → omdev-0.0.26}/omdev/cmake.py +0 -0
  142. {omdev-0.0.25 → omdev-0.0.26}/omdev/cmdlog/__init__.py +0 -0
  143. {omdev-0.0.25 → omdev-0.0.26}/omdev/cmdlog/__main__.py +0 -0
  144. {omdev-0.0.25 → omdev-0.0.26}/omdev/cmdlog/_cmdlog.py +0 -0
  145. {omdev-0.0.25 → omdev-0.0.26}/omdev/cmdlog/cli.py +0 -0
  146. {omdev-0.0.25 → omdev-0.0.26}/omdev/cmdlog/cmdlog.py +0 -0
  147. {omdev-0.0.25 → omdev-0.0.26}/omdev/dataclasses/__init__.py +0 -0
  148. {omdev-0.0.25 → omdev-0.0.26}/omdev/dataclasses/__main__.py +0 -0
  149. {omdev-0.0.25 → omdev-0.0.26}/omdev/dataclasses/_dumping.py +0 -0
  150. {omdev-0.0.25 → omdev-0.0.26}/omdev/dataclasses/_template.py +0 -0
  151. {omdev-0.0.25 → omdev-0.0.26}/omdev/dataclasses/cli.py +0 -0
  152. {omdev-0.0.25 → omdev-0.0.26}/omdev/dataclasses/codegen.py +0 -0
  153. {omdev-0.0.25 → omdev-0.0.26}/omdev/dataclasses/dumping.py +0 -0
  154. {omdev-0.0.25 → omdev-0.0.26}/omdev/dataserver/__init__.py +0 -0
  155. {omdev-0.0.25 → omdev-0.0.26}/omdev/dataserver/handlers.py +0 -0
  156. {omdev-0.0.25 → omdev-0.0.26}/omdev/dataserver/http.py +0 -0
  157. {omdev-0.0.25 → omdev-0.0.26}/omdev/dataserver/routes.py +0 -0
  158. {omdev-0.0.25 → omdev-0.0.26}/omdev/dataserver/server.py +0 -0
  159. {omdev-0.0.25 → omdev-0.0.26}/omdev/dataserver/targets.py +0 -0
  160. {omdev-0.0.25 → omdev-0.0.26}/omdev/diffs/__init__.py +0 -0
  161. {omdev-0.0.25 → omdev-0.0.26}/omdev/diffs/__main__.py +0 -0
  162. {omdev-0.0.25 → omdev-0.0.26}/omdev/diffs/cli.py +0 -0
  163. {omdev-0.0.25 → omdev-0.0.26}/omdev/diffs/parsing.py +0 -0
  164. {omdev-0.0.25 → omdev-0.0.26}/omdev/diffs/rendering.py +0 -0
  165. {omdev-0.0.25 → omdev-0.0.26}/omdev/diffs/types.py +0 -0
  166. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/__init__.py +0 -0
  167. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/__main__.py +0 -0
  168. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/build.py +0 -0
  169. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/cli.py +0 -0
  170. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/config.py +0 -0
  171. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/config.toml +0 -0
  172. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/content.py +0 -0
  173. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/gen.py +0 -0
  174. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/helpers.py +0 -0
  175. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/ops.py +0 -0
  176. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/rendering.py +0 -0
  177. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/.python-versions.json +0 -0
  178. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/configs/.gdbinit +0 -0
  179. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/configs/.sqliterc +0 -0
  180. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/configs/.tmux.conf +0 -0
  181. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/configs/.vimrc +0 -0
  182. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/depsets/python.toml +0 -0
  183. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/depsets/system.toml +0 -0
  184. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/depsets/x11.toml +0 -0
  185. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/apt.sh +0 -0
  186. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/chgrp.sh +0 -0
  187. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/docker.sh +0 -0
  188. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/firefox.sh +0 -0
  189. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/go.sh +0 -0
  190. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/jdk.sh +0 -0
  191. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/man.sh +0 -0
  192. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/nvm.sh +0 -0
  193. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/pyenv.sh +0 -0
  194. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/rbenv.sh +0 -0
  195. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/rust.sh +0 -0
  196. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/sshd.sh +0 -0
  197. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/user.sh +0 -0
  198. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/uv.sh +0 -0
  199. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/vcpkg.sh +0 -0
  200. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/workdir.sh +0 -0
  201. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/fragments/zig.sh +0 -0
  202. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/scripts/install-claude +0 -0
  203. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/scripts/install-codex +0 -0
  204. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/scripts/install-pi +0 -0
  205. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/scripts/run-dbus +0 -0
  206. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/resources/shift-uid.sh +0 -0
  207. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/run.py +0 -0
  208. {omdev-0.0.25 → omdev-0.0.26}/omdev/dockerdev/utils.py +0 -0
  209. {omdev-0.0.25 → omdev-0.0.26}/omdev/git/__init__.py +0 -0
  210. {omdev-0.0.25 → omdev-0.0.26}/omdev/git/magic.py +0 -0
  211. {omdev-0.0.25 → omdev-0.0.26}/omdev/git/revisions.py +0 -0
  212. {omdev-0.0.25 → omdev-0.0.26}/omdev/git/shallow.py +0 -0
  213. {omdev-0.0.25 → omdev-0.0.26}/omdev/git/status.py +0 -0
  214. {omdev-0.0.25 → omdev-0.0.26}/omdev/home/__init__.py +0 -0
  215. {omdev-0.0.25 → omdev-0.0.26}/omdev/home/__main__.py +0 -0
  216. {omdev-0.0.25 → omdev-0.0.26}/omdev/home/cli.py +0 -0
  217. {omdev-0.0.25 → omdev-0.0.26}/omdev/home/paths.py +0 -0
  218. {omdev-0.0.25 → omdev-0.0.26}/omdev/home/secrets.py +0 -0
  219. {omdev-0.0.25 → omdev-0.0.26}/omdev/home/shadow.py +0 -0
  220. {omdev-0.0.25 → omdev-0.0.26}/omdev/imgur.py +0 -0
  221. {omdev-0.0.25 → omdev-0.0.26}/omdev/intellij/__init__.py +0 -0
  222. {omdev-0.0.25 → omdev-0.0.26}/omdev/intellij/cli.py +0 -0
  223. {omdev-0.0.25 → omdev-0.0.26}/omdev/intellij/ides.py +0 -0
  224. {omdev-0.0.25 → omdev-0.0.26}/omdev/intellij/open.py +0 -0
  225. {omdev-0.0.25 → omdev-0.0.26}/omdev/interp/__init__.py +0 -0
  226. {omdev-0.0.25 → omdev-0.0.26}/omdev/interp/__main__.py +0 -0
  227. {omdev-0.0.25 → omdev-0.0.26}/omdev/interp/cli.py +0 -0
  228. {omdev-0.0.25 → omdev-0.0.26}/omdev/interp/default.py +0 -0
  229. {omdev-0.0.25 → omdev-0.0.26}/omdev/interp/inject.py +0 -0
  230. {omdev-0.0.25 → omdev-0.0.26}/omdev/interp/inspect.py +0 -0
  231. {omdev-0.0.25 → omdev-0.0.26}/omdev/interp/providers/__init__.py +0 -0
  232. {omdev-0.0.25 → omdev-0.0.26}/omdev/interp/providers/base.py +0 -0
  233. {omdev-0.0.25 → omdev-0.0.26}/omdev/interp/providers/inject.py +0 -0
  234. {omdev-0.0.25 → omdev-0.0.26}/omdev/interp/providers/running.py +0 -0
  235. {omdev-0.0.25 → omdev-0.0.26}/omdev/interp/providers/standalone.py +0 -0
  236. {omdev-0.0.25 → omdev-0.0.26}/omdev/interp/providers/system.py +0 -0
  237. {omdev-0.0.25 → omdev-0.0.26}/omdev/interp/pyenv/__init__.py +0 -0
  238. {omdev-0.0.25 → omdev-0.0.26}/omdev/interp/pyenv/inject.py +0 -0
  239. {omdev-0.0.25 → omdev-0.0.26}/omdev/interp/pyenv/install.py +0 -0
  240. {omdev-0.0.25 → omdev-0.0.26}/omdev/interp/pyenv/provider.py +0 -0
  241. {omdev-0.0.25 → omdev-0.0.26}/omdev/interp/pyenv/pyenv.py +0 -0
  242. {omdev-0.0.25 → omdev-0.0.26}/omdev/interp/resolvers.py +0 -0
  243. {omdev-0.0.25 → omdev-0.0.26}/omdev/interp/types.py +0 -0
  244. {omdev-0.0.25 → omdev-0.0.26}/omdev/interp/uv/__init__.py +0 -0
  245. {omdev-0.0.25 → omdev-0.0.26}/omdev/interp/uv/inject.py +0 -0
  246. {omdev-0.0.25 → omdev-0.0.26}/omdev/interp/uv/provider.py +0 -0
  247. {omdev-0.0.25 → omdev-0.0.26}/omdev/interp/uv/uv.py +0 -0
  248. {omdev-0.0.25 → omdev-0.0.26}/omdev/interp/venvs.py +0 -0
  249. {omdev-0.0.25 → omdev-0.0.26}/omdev/java/__init__.py +0 -0
  250. {omdev-0.0.25 → omdev-0.0.26}/omdev/java/__main__.py +0 -0
  251. {omdev-0.0.25 → omdev-0.0.26}/omdev/java/cli.py +0 -0
  252. {omdev-0.0.25 → omdev-0.0.26}/omdev/java/pomgen.py +0 -0
  253. {omdev-0.0.25 → omdev-0.0.26}/omdev/java/utils.py +0 -0
  254. {omdev-0.0.25 → omdev-0.0.26}/omdev/java/xml.py +0 -0
  255. {omdev-0.0.25 → omdev-0.0.26}/omdev/magic/__init__.py +0 -0
  256. {omdev-0.0.25 → omdev-0.0.26}/omdev/magic/__main__.py +0 -0
  257. {omdev-0.0.25 → omdev-0.0.26}/omdev/magic/cli.py +0 -0
  258. {omdev-0.0.25 → omdev-0.0.26}/omdev/magic/find.py +0 -0
  259. {omdev-0.0.25 → omdev-0.0.26}/omdev/magic/magic.py +0 -0
  260. {omdev-0.0.25 → omdev-0.0.26}/omdev/magic/prepare.py +0 -0
  261. {omdev-0.0.25 → omdev-0.0.26}/omdev/magic/styles.py +0 -0
  262. {omdev-0.0.25 → omdev-0.0.26}/omdev/manifests/__init__.py +0 -0
  263. {omdev-0.0.25 → omdev-0.0.26}/omdev/manifests/__main__.py +0 -0
  264. {omdev-0.0.25 → omdev-0.0.26}/omdev/manifests/_dumping.py +0 -0
  265. {omdev-0.0.25 → omdev-0.0.26}/omdev/manifests/building.py +0 -0
  266. {omdev-0.0.25 → omdev-0.0.26}/omdev/manifests/dumping.py +0 -0
  267. {omdev-0.0.25 → omdev-0.0.26}/omdev/manifests/main.py +0 -0
  268. {omdev-0.0.25 → omdev-0.0.26}/omdev/markdown/__init__.py +0 -0
  269. {omdev-0.0.25 → omdev-0.0.26}/omdev/markdown/incparse.py +0 -0
  270. {omdev-0.0.25 → omdev-0.0.26}/omdev/markdown/tokens.py +0 -0
  271. {omdev-0.0.25 → omdev-0.0.26}/omdev/mypy/__init__.py +0 -0
  272. {omdev-0.0.25 → omdev-0.0.26}/omdev/mypy/debug.py +0 -0
  273. {omdev-0.0.25 → omdev-0.0.26}/omdev/mypy/report.py +0 -0
  274. {omdev-0.0.25 → omdev-0.0.26}/omdev/packaging/__init__.py +0 -0
  275. {omdev-0.0.25 → omdev-0.0.26}/omdev/packaging/names.py +0 -0
  276. {omdev-0.0.25 → omdev-0.0.26}/omdev/packaging/requires.py +0 -0
  277. {omdev-0.0.25 → omdev-0.0.26}/omdev/packaging/revisions.py +0 -0
  278. {omdev-0.0.25 → omdev-0.0.26}/omdev/packaging/specifiers.py +0 -0
  279. {omdev-0.0.25 → omdev-0.0.26}/omdev/packaging/versions.py +0 -0
  280. {omdev-0.0.25 → omdev-0.0.26}/omdev/pip.py +0 -0
  281. {omdev-0.0.25 → omdev-0.0.26}/omdev/precheck/__init__.py +0 -0
  282. {omdev-0.0.25 → omdev-0.0.26}/omdev/precheck/__main__.py +0 -0
  283. {omdev-0.0.25 → omdev-0.0.26}/omdev/precheck/base.py +0 -0
  284. {omdev-0.0.25 → omdev-0.0.26}/omdev/precheck/blanklines.py +0 -0
  285. {omdev-0.0.25 → omdev-0.0.26}/omdev/precheck/caches.py +0 -0
  286. {omdev-0.0.25 → omdev-0.0.26}/omdev/precheck/git.py +0 -0
  287. {omdev-0.0.25 → omdev-0.0.26}/omdev/precheck/imports.py +0 -0
  288. {omdev-0.0.25 → omdev-0.0.26}/omdev/precheck/lite.py +0 -0
  289. {omdev-0.0.25 → omdev-0.0.26}/omdev/precheck/main.py +0 -0
  290. {omdev-0.0.25 → omdev-0.0.26}/omdev/precheck/manifests.py +0 -0
  291. {omdev-0.0.25 → omdev-0.0.26}/omdev/precheck/scripts.py +0 -0
  292. {omdev-0.0.25 → omdev-0.0.26}/omdev/precheck/unicode.py +0 -0
  293. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/__init__.py +0 -0
  294. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/asts/__init__.py +0 -0
  295. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/asts/parents.py +0 -0
  296. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/asts/toplevel.py +0 -0
  297. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/asts/visitors.py +0 -0
  298. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/attrdocs.py +0 -0
  299. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/bracepy.py +0 -0
  300. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/classdot.py +0 -0
  301. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/docstrings/LICENSE +0 -0
  302. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/docstrings/__init__.py +0 -0
  303. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/docstrings/attrdoc.py +0 -0
  304. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/docstrings/common.py +0 -0
  305. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/docstrings/epydoc.py +0 -0
  306. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/docstrings/google.py +0 -0
  307. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/docstrings/numpydoc.py +0 -0
  308. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/docstrings/parser.py +0 -0
  309. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/docstrings/rest.py +0 -0
  310. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/findimports.py +0 -0
  311. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/reprs.py +0 -0
  312. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/scripts/__init__.py +0 -0
  313. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/scripts/bumpversion.py +0 -0
  314. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/scripts/importtrace.py +0 -0
  315. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/srcheaders.py +0 -0
  316. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/tokens/__init__.py +0 -0
  317. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/tokens/all.py +0 -0
  318. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/tokens/tokenizert.py +0 -0
  319. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/tokens/utils.py +0 -0
  320. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/tools/__init__.py +0 -0
  321. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/tools/fixdocstrings.py +0 -0
  322. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/tools/importscan.py +0 -0
  323. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/tools/mkrelimp.py +0 -0
  324. {omdev-0.0.25 → omdev-0.0.26}/omdev/py/tools/pipdepup.py +0 -0
  325. {omdev-0.0.25 → omdev-0.0.26}/omdev/py.typed +0 -0
  326. {omdev-0.0.25 → omdev-0.0.26}/omdev/pyproject/__init__.py +0 -0
  327. {omdev-0.0.25 → omdev-0.0.26}/omdev/pyproject/__main__.py +0 -0
  328. {omdev-0.0.25 → omdev-0.0.26}/omdev/pyproject/cli.py +0 -0
  329. {omdev-0.0.25 → omdev-0.0.26}/omdev/pyproject/configs.py +0 -0
  330. {omdev-0.0.25 → omdev-0.0.26}/omdev/pyproject/inject.py +0 -0
  331. {omdev-0.0.25 → omdev-0.0.26}/omdev/pyproject/pkg.py +0 -0
  332. {omdev-0.0.25 → omdev-0.0.26}/omdev/pyproject/reqs.py +0 -0
  333. {omdev-0.0.25 → omdev-0.0.26}/omdev/pyproject/resources/dockerdev.sh +0 -0
  334. {omdev-0.0.25 → omdev-0.0.26}/omdev/pyproject/resources/python.sh +0 -0
  335. {omdev-0.0.25 → omdev-0.0.26}/omdev/pyproject/tools/__init__.py +0 -0
  336. {omdev-0.0.25 → omdev-0.0.26}/omdev/pyproject/tools/aboutdeps.py +0 -0
  337. {omdev-0.0.25 → omdev-0.0.26}/omdev/pyproject/tools/buildrs.py +0 -0
  338. {omdev-0.0.25 → omdev-0.0.26}/omdev/pyproject/tools/pyversions.py +0 -0
  339. {omdev-0.0.25 → omdev-0.0.26}/omdev/pyproject/venvs.py +0 -0
  340. {omdev-0.0.25 → omdev-0.0.26}/omdev/pyproject/versions.py +0 -0
  341. {omdev-0.0.25 → omdev-0.0.26}/omdev/rs/__init__.py +0 -0
  342. {omdev-0.0.25 → omdev-0.0.26}/omdev/scripts/__init__.py +0 -0
  343. {omdev-0.0.25 → omdev-0.0.26}/omdev/scripts/lib/__init__.py +0 -0
  344. {omdev-0.0.25 → omdev-0.0.26}/omdev/scripts/lib/formats/__init__.py +0 -0
  345. {omdev-0.0.25 → omdev-0.0.26}/omdev/scripts/lib/formats/goyaml.py +0 -0
  346. {omdev-0.0.25 → omdev-0.0.26}/omdev/scripts/lib/inject.py +0 -0
  347. {omdev-0.0.25 → omdev-0.0.26}/omdev/scripts/lib/io/__init__.py +0 -0
  348. {omdev-0.0.25 → omdev-0.0.26}/omdev/scripts/lib/io/streams.py +0 -0
  349. {omdev-0.0.25 → omdev-0.0.26}/omdev/scripts/lib/logs.py +0 -0
  350. {omdev-0.0.25 → omdev-0.0.26}/omdev/scripts/lib/marshal.py +0 -0
  351. {omdev-0.0.25 → omdev-0.0.26}/omdev/scripts/slowcat.py +0 -0
  352. {omdev-0.0.25 → omdev-0.0.26}/omdev/scripts/tmpexec.py +0 -0
  353. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/__init__.py +0 -0
  354. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/irc/__init__.py +0 -0
  355. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/irc/messages/__init__.py +0 -0
  356. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/irc/messages/base.py +0 -0
  357. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/irc/messages/formats.py +0 -0
  358. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/irc/messages/messages.py +0 -0
  359. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/irc/messages/parsing.py +0 -0
  360. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/irc/numerics/__init__.py +0 -0
  361. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/irc/numerics/formats.py +0 -0
  362. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/irc/numerics/numerics.py +0 -0
  363. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/irc/numerics/types.py +0 -0
  364. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/irc/protocol/LICENSE +0 -0
  365. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/irc/protocol/__init__.py +0 -0
  366. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/irc/protocol/consts.py +0 -0
  367. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/irc/protocol/errors.py +0 -0
  368. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/irc/protocol/message.py +0 -0
  369. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/irc/protocol/nuh.py +0 -0
  370. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/irc/protocol/parsing.py +0 -0
  371. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/irc/protocol/rendering.py +0 -0
  372. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/irc/protocol/tags.py +0 -0
  373. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/irc/protocol/utils.py +0 -0
  374. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/jsonschema/__init__.py +0 -0
  375. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/jsonschema/codegen/__init__.py +0 -0
  376. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/jsonschema/codegen/__main__.py +0 -0
  377. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/jsonschema/codegen/analysis.py +0 -0
  378. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/jsonschema/codegen/cli.py +0 -0
  379. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/jsonschema/codegen/config.py +0 -0
  380. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/jsonschema/codegen/errors.py +0 -0
  381. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/jsonschema/codegen/generator.py +0 -0
  382. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/jsonschema/codegen/ir.py +0 -0
  383. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/jsonschema/codegen/names.py +0 -0
  384. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/jsonschema/codegen/rendering.py +0 -0
  385. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/jsonschema/codegen/transforms.py +0 -0
  386. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/jsonschema/codegen/typing.py +0 -0
  387. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/oci/__init__.py +0 -0
  388. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/oci/building.py +0 -0
  389. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/oci/compression.py +0 -0
  390. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/oci/data.py +0 -0
  391. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/oci/datarefs.py +0 -0
  392. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/oci/dataserver.py +0 -0
  393. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/oci/loading.py +0 -0
  394. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/oci/media.py +0 -0
  395. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/oci/pack/__init__.py +0 -0
  396. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/oci/pack/packing.py +0 -0
  397. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/oci/pack/repositories.py +0 -0
  398. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/oci/pack/unpacking.py +0 -0
  399. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/oci/repositories.py +0 -0
  400. {omdev-0.0.25 → omdev-0.0.26}/omdev/specs/oci/tars.py +0 -0
  401. {omdev-0.0.25 → omdev-0.0.26}/omdev/supervisor/__init__.py +0 -0
  402. {omdev-0.0.25 → omdev-0.0.26}/omdev/supervisor/__main__.py +0 -0
  403. {omdev-0.0.25 → omdev-0.0.26}/omdev/supervisor/cli.py +0 -0
  404. {omdev-0.0.25 → omdev-0.0.26}/omdev/tagstrings.py +0 -0
  405. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/__init__.py +0 -0
  406. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/cloc.py +0 -0
  407. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/diff.py +0 -0
  408. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/doc.py +0 -0
  409. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/docker.py +0 -0
  410. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/git/__init__.py +0 -0
  411. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/git/__main__.py +0 -0
  412. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/git/cli.py +0 -0
  413. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/git/cloning.py +0 -0
  414. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/git/consts.py +0 -0
  415. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/git/messages.py +0 -0
  416. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/json/__init__.py +0 -0
  417. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/json/__main__.py +0 -0
  418. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/json/cli.py +0 -0
  419. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/json/formats.py +0 -0
  420. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/json/io.py +0 -0
  421. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/json/parsing.py +0 -0
  422. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/json/processing.py +0 -0
  423. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/json/rendering.py +0 -0
  424. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/jsonview/__init__.py +0 -0
  425. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/jsonview/__main__.py +0 -0
  426. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/jsonview/cli.py +0 -0
  427. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/jsonview/resources/jsonview.css +0 -0
  428. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/jsonview/resources/jsonview.html.j2 +0 -0
  429. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/jsonview/resources/jsonview.js +0 -0
  430. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/linehisto.py +0 -0
  431. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/mkenv.py +0 -0
  432. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/notebook.py +0 -0
  433. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/pawk/README.md +0 -0
  434. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/pawk/__init__.py +0 -0
  435. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/pawk/__main__.py +0 -0
  436. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/pawk/pawk.py +0 -0
  437. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/pip.py +0 -0
  438. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/prof.py +0 -0
  439. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/qr.py +0 -0
  440. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/shadow.py +0 -0
  441. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/shell.py +0 -0
  442. {omdev-0.0.25 → omdev-0.0.26}/omdev/tools/sqlrepl.py +0 -0
  443. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/__init__.py +0 -0
  444. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/apps/__init__.py +0 -0
  445. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/apps/edit/__init__.py +0 -0
  446. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/apps/edit/main.py +0 -0
  447. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/apps/irc/__init__.py +0 -0
  448. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/apps/irc/__main__.py +0 -0
  449. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/apps/irc/app.py +0 -0
  450. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/apps/irc/client.py +0 -0
  451. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/apps/irc/commands.py +0 -0
  452. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/apps/irc/main.py +0 -0
  453. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/apps/jtree/LICENSE +0 -0
  454. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/apps/jtree/__init__.py +0 -0
  455. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/apps/jtree/__main__.py +0 -0
  456. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/apps/jtree/app.py +0 -0
  457. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/apps/jtree/cli.py +0 -0
  458. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/apps/jtree/styles/layout.tcss +0 -0
  459. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/apps/jtree/utils.py +0 -0
  460. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/apps/jtree/widgets.py +0 -0
  461. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/apps/markdown/__init__.py +0 -0
  462. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/apps/markdown/__main__.py +0 -0
  463. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/apps/markdown/cli.py +0 -0
  464. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/rich/__init__.py +0 -0
  465. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/rich/console2.py +0 -0
  466. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/rich/diff/LICENSE +0 -0
  467. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/rich/diff/__init__.py +0 -0
  468. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/rich/diff/__main__.py +0 -0
  469. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/rich/diff/_compat.py +0 -0
  470. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/rich/diff/cli.py +0 -0
  471. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/rich/diff/renderables.py +0 -0
  472. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/rich/diff/rendering.py +0 -0
  473. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/rich/diff/underlinebar.py +0 -0
  474. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/rich/markdown2.py +0 -0
  475. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/rich/textual/__init__.py +0 -0
  476. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/rich/textual/dark.py +0 -0
  477. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/rich/textual/dump.py +0 -0
  478. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/rich/textual/themes.py +0 -0
  479. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/rich/trirule.py +0 -0
  480. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/__init__.py +0 -0
  481. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/actionmenu.py +0 -0
  482. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/altdevtools/LICENSE +0 -0
  483. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/altdevtools/__init__.py +0 -0
  484. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/altdevtools/client.py +0 -0
  485. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/altdevtools/previews/__init__.py +0 -0
  486. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/altdevtools/previews/borders.py +0 -0
  487. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/altdevtools/previews/colors.py +0 -0
  488. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/altdevtools/previews/colors.tcss +0 -0
  489. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/altdevtools/previews/easing.py +0 -0
  490. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/altdevtools/previews/easing.tcss +0 -0
  491. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/altdevtools/previews/keys.py +0 -0
  492. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/altdevtools/protocol.py +0 -0
  493. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/altdevtools/redirect_output.py +0 -0
  494. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/altdevtools/renderables.py +0 -0
  495. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/altdevtools/server.py +0 -0
  496. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/altdevtools/service.py +0 -0
  497. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/altdevtools/tools/__init__.py +0 -0
  498. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/altdevtools/tools/diagnose.py +0 -0
  499. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/app2.py +0 -0
  500. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/autocomplete/LICENSE +0 -0
  501. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/autocomplete/__init__.py +0 -0
  502. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/autocomplete/matching.py +0 -0
  503. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/autocomplete/paths.py +0 -0
  504. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/autocomplete/widget.py +0 -0
  505. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/binding2.py +0 -0
  506. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/clipboard.py +0 -0
  507. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/debug/__init__.py +0 -0
  508. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/debug/dominfo.py +0 -0
  509. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/debug/screen.py +0 -0
  510. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/devtools.py +0 -0
  511. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/dom2.py +0 -0
  512. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/drivers2.py +0 -0
  513. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/logging2.py +0 -0
  514. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/render2.py +0 -0
  515. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/screen2.py +0 -0
  516. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/types.py +0 -0
  517. {omdev-0.0.25 → omdev-0.0.26}/omdev/tui/textual/widgets2.py +0 -0
  518. {omdev-0.0.25 → omdev-0.0.26}/omdev.egg-info/SOURCES.txt +0 -0
  519. {omdev-0.0.25 → omdev-0.0.26}/omdev.egg-info/dependency_links.txt +0 -0
  520. {omdev-0.0.25 → omdev-0.0.26}/omdev.egg-info/entry_points.txt +0 -0
  521. {omdev-0.0.25 → omdev-0.0.26}/omdev.egg-info/top_level.txt +0 -0
  522. {omdev-0.0.25 → omdev-0.0.26}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.25
3
+ Version: 0.0.26
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,10 +14,10 @@ Classifier: Programming Language :: Python :: 3.14
14
14
  Requires-Python: >=3.14
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: omlish==0.0.25
17
+ Requires-Dist: omlish==0.0.26
18
18
  Provides-Extra: all
19
- Requires-Dist: ominfra==0.0.25; extra == "all"
20
- Requires-Dist: ommlds==0.0.25; extra == "all"
19
+ Requires-Dist: ominfra==0.0.26; extra == "all"
20
+ Requires-Dist: ommlds==0.0.26; extra == "all"
21
21
  Requires-Dist: black~=26.5; extra == "all"
22
22
  Requires-Dist: pycparser~=3.0; extra == "all"
23
23
  Requires-Dist: pcpp~=1.30; extra == "all"
@@ -25,7 +25,7 @@ Requires-Dist: docutils~=0.23; extra == "all"
25
25
  Requires-Dist: markdown-it-py~=4.2; extra == "all"
26
26
  Requires-Dist: mdit-py-plugins~=0.6; extra == "all"
27
27
  Requires-Dist: pygments~=2.20; extra == "all"
28
- Requires-Dist: mypy~=2.1; extra == "all"
28
+ Requires-Dist: mypy~=2.2; extra == "all"
29
29
  Requires-Dist: gprof2dot~=2025.4; extra == "all"
30
30
  Requires-Dist: segno~=1.6; extra == "all"
31
31
  Requires-Dist: rich~=15.0; extra == "all"
@@ -33,9 +33,9 @@ Requires-Dist: textual~=8.2; extra == "all"
33
33
  Requires-Dist: textual-dev~=1.8; extra == "all"
34
34
  Requires-Dist: textual-speedups~=0.2; extra == "all"
35
35
  Provides-Extra: ominfra
36
- Requires-Dist: ominfra==0.0.25; extra == "ominfra"
36
+ Requires-Dist: ominfra==0.0.26; extra == "ominfra"
37
37
  Provides-Extra: ommlds
38
- Requires-Dist: ommlds==0.0.25; extra == "ommlds"
38
+ Requires-Dist: ommlds==0.0.26; extra == "ommlds"
39
39
  Provides-Extra: black
40
40
  Requires-Dist: black~=26.5; extra == "black"
41
41
  Provides-Extra: c
@@ -47,7 +47,7 @@ Requires-Dist: markdown-it-py~=4.2; extra == "doc"
47
47
  Requires-Dist: mdit-py-plugins~=0.6; extra == "doc"
48
48
  Requires-Dist: pygments~=2.20; extra == "doc"
49
49
  Provides-Extra: mypy
50
- Requires-Dist: mypy~=2.1; extra == "mypy"
50
+ Requires-Dist: mypy~=2.2; extra == "mypy"
51
51
  Provides-Extra: prof
52
52
  Requires-Dist: gprof2dot~=2025.4; extra == "prof"
53
53
  Provides-Extra: qr
@@ -41,7 +41,7 @@ class Project(ProjectBase):
41
41
  ],
42
42
 
43
43
  'mypy': [
44
- 'mypy ~= 2.1',
44
+ 'mypy ~= 2.2',
45
45
  ],
46
46
 
47
47
  'prof': [
@@ -45,7 +45,7 @@ class RequiresMarkerListMarshaler(msh.Marshaler):
45
45
 
46
46
  class RequiresMarkerListMarshalerFactory(msh.MarshalerFactory):
47
47
  def make_marshaler(self, ctx: msh.MarshalFactoryContext, rty: rfl.Type) -> ta.Callable[[], msh.Marshaler] | None:
48
- if rty is not MarshalRequiresMarkerList:
48
+ if rty.runtime_object is not MarshalRequiresMarkerList:
49
49
  return None
50
50
  return lambda: RequiresMarkerListMarshaler(
51
51
  ctx.make_marshaler(RequiresMarkerItem),
@@ -129,7 +129,7 @@ class WheelFile(zipfile.ZipFile):
129
129
  def open( # type: ignore # noqa
130
130
  self,
131
131
  name_or_info: ta.Union[str, zipfile.ZipInfo],
132
- mode: str = 'r', # ta.Literal["r", "w"]
132
+ mode: ta.Literal['r', 'w'] = 'r',
133
133
  pwd: ta.Optional[bytes] = None,
134
134
  ) -> ta.IO[bytes]:
135
135
  def _update_crc(newdata: bytes) -> None:
@@ -134,7 +134,7 @@ def __omlish_amalg__(): # noqa
134
134
  dict(path='../../omlish/argparse/parsers.py', sha1='51044d7b7d1b1ca27173be2d3c007d574827a188'),
135
135
  dict(path='../../omlish/formats/yaml/goyaml/errors.py', sha1='c4dda09d78bc14d9824e45e3d5d434185ee5598b'),
136
136
  dict(path='../../omlish/http/headers.py', sha1='aa2182505c9b09e2b658df8f8b3d927bc5fae13b'),
137
- dict(path='../../omlish/http/parsing.py', sha1='4477d00145b207dd0397ecfbc8fef5ae8c641bb3'),
137
+ dict(path='../../omlish/http/parsing.py', sha1='1adee35518ee930557f2c3b19fd4253df98a5b3c'),
138
138
  dict(path='../../omlish/http/pipelines/compression/codings.py', sha1='b88bf055dff1b040ecde17d98484559e9078b8cf'), # noqa
139
139
  dict(path='../../omlish/io/pipelines/core.py', sha1='cec21cacb85a0f443ea4caa021b33184d3816cf2'),
140
140
  dict(path='../../omlish/io/streams/types.py', sha1='6a3167bf66a0a8817e19115b9c31973b2ff77788'),
@@ -163,7 +163,7 @@ def __omlish_amalg__(): # noqa
163
163
  dict(path='../../omlish/http/simple/types.py', sha1='8e31b8c442603b396523884ff554d3df6e7f4c1a'),
164
164
  dict(path='../../omlish/io/pipelines/bytes/buffering.py', sha1='c19bddb05ef9449aa1a1c228901cab0d2d927946'),
165
165
  dict(path='../../omlish/io/pipelines/drivers/metadata.py', sha1='44e49cb87136933ffe867087897eab5004034a93'), # noqa
166
- dict(path='../../omlish/io/pipelines/flow/types.py', sha1='ac9a91d0a8115443984a75a63ffac51a7acef580'),
166
+ dict(path='../../omlish/io/pipelines/flow/types.py', sha1='4353968e5bd490f4121eadf9e391076bd2673f28'),
167
167
  dict(path='../../omlish/io/pipelines/sched/types.py', sha1='854b3f0f8ed5da2132a516f787b9019f5cb4eef5'),
168
168
  dict(path='../../omlish/io/streams/base.py', sha1='bdeaff419684dec34fd0dc59808a9686131992bc'),
169
169
  dict(path='../../omlish/io/streams/framing.py', sha1='dc2d7f638b042619fd3d95789c71532a29fd5fe4'),
@@ -176,7 +176,7 @@ def __omlish_amalg__(): # noqa
176
176
  dict(path='../../omlish/sockets/handlers/simple.py', sha1='78e1a4c419c8f82d10577f19654a3d8ce28d757f'),
177
177
  dict(path='../../omlish/sockets/handlers/ssl.py', sha1='94c0acedffe5b581419a7a92c2f1c4e4a58b7a83'),
178
178
  dict(path='../../omlish/sockets/handlers/threading.py', sha1='24d7815c7bf8fcf3480267020785a3edc90b32f9'),
179
- dict(path='../../omlish/subprocesses/run.py', sha1='1d2a78b18bcc601c8b28269d792cc38bbf25a078'),
179
+ dict(path='../../omlish/subprocesses/run.py', sha1='9b7e1265cd59c58d30d8915f96ba84f80797ef42'),
180
180
  dict(path='../../omlish/subprocesses/wrap.py', sha1='8a9b7d2255481fae15c05f5624b0cdc0766f4b3f'),
181
181
  dict(path='../dataserver/handlers.py', sha1='ce0a208cbd7f66b26b9539ec6d5e7ef1041a4886'),
182
182
  dict(path='../dataserver/routes.py', sha1='97379cba6a531ca1bde33de0eb432bd9b36791c1'),
@@ -4924,6 +4924,7 @@ class SemanticHeaderHttpParseErrorCode(enum.Enum):
4924
4924
  INVALID_AUTHORIZATION = enum.auto()
4925
4925
  TE_WITHOUT_CHUNKED_LAST = enum.auto()
4926
4926
  TE_IN_HTTP10 = enum.auto()
4927
+ INVALID_TE = enum.auto()
4927
4928
 
4928
4929
 
4929
4930
  class EncodingHttpParseErrorCode(enum.Enum):
@@ -5203,14 +5204,14 @@ class HttpParser:
5203
5204
  """Strictness knobs. Defaults are maximally strict."""
5204
5205
 
5205
5206
  allow_obs_fold: bool = False
5206
- allow_space_before_colon: bool = False # DANGEROUS - upstreams may not handle well
5207
+ dangerous_allow_space_before_colon: bool = False # DANGEROUS - upstreams may not handle well
5207
5208
  allow_multiple_content_lengths: bool = False
5208
5209
  allow_content_length_with_te: bool = False
5209
5210
  allow_bare_lf: bool = False
5210
5211
  allow_missing_host: bool = False
5211
5212
  allow_multiple_hosts: bool = False
5212
5213
  allow_unknown_transfer_encoding: bool = False
5213
- allow_empty_header_values: bool = True
5214
+ reject_empty_header_values: bool = False
5214
5215
  allow_bare_cr_in_value: bool = False
5215
5216
  allow_te_without_chunked_in_response: bool = False
5216
5217
  allow_transfer_encoding_http10: bool = False
@@ -5879,7 +5880,7 @@ class _HttpParseContext:
5879
5880
 
5880
5881
  # Check for space before colon
5881
5882
  if name_bytes[-1] in self._OWS_CHARS:
5882
- if not self.config.allow_space_before_colon:
5883
+ if not self.config.dangerous_allow_space_before_colon:
5883
5884
  raise HeaderFieldHttpParseError(
5884
5885
  code=HeaderFieldHttpParseErrorCode.SPACE_BEFORE_COLON,
5885
5886
  message='Whitespace between field-name and colon',
@@ -5930,7 +5931,7 @@ class _HttpParseContext:
5930
5931
  value_stripped = self._strip_ows(value_bytes)
5931
5932
 
5932
5933
  # Check for empty value
5933
- if not value_stripped and not self.config.allow_empty_header_values:
5934
+ if not value_stripped and self.config.reject_empty_header_values:
5934
5935
  raise HeaderFieldHttpParseError(
5935
5936
  code=HeaderFieldHttpParseErrorCode.INVALID_FIELD_VALUE,
5936
5937
  message='Empty header field value not allowed',
@@ -6050,7 +6051,10 @@ class _HttpParseContext:
6050
6051
  for part in v.split(','):
6051
6052
  stripped = part.strip()
6052
6053
 
6053
- if not stripped.isdigit():
6054
+ # NOTE: must be ASCII digits only. str.isdigit() is True for non-ASCII numerics present in the
6055
+ # latin-1-decoded value (e.g. superscripts U+00B2/B3/B9), but int() rejects those with a ValueError -
6056
+ # which would escape as an uncaught exception rather than a clean parse error.
6057
+ if not (stripped.isascii() and stripped.isdigit()):
6054
6058
  raise SemanticHeaderHttpParseError(
6055
6059
  code=SemanticHeaderHttpParseErrorCode.INVALID_CONTENT_LENGTH,
6056
6060
  message=f'Content-Length value is not a valid non-negative integer: {stripped!r}',
@@ -6410,16 +6414,28 @@ class _HttpParseContext:
6410
6414
  if q_str is not None:
6411
6415
  q = float(q_str) # caller wraps ValueError
6412
6416
 
6417
+ # float() also accepts 'nan'/'inf'/overflowing exponents; reject those and any out-of-range value. The
6418
+ # chained comparison is False for NaN and +/-inf, so this single check covers non-finite and range at once.
6419
+ # (RFC 9110 qvalue is 0 <= q <= 1.)
6420
+ if not (0.0 <= q <= 1.0):
6421
+ raise ValueError(f'q-value out of range [0, 1]: {q_str!r}')
6422
+
6413
6423
  return token, q, params
6414
6424
 
6415
6425
  def _prepare_te(self, headers: ParsedHttpHeaders, prepared: PreparedParsedHttpHeaders) -> None:
6416
6426
  if 'te' not in headers:
6417
6427
  return
6418
6428
 
6419
- codings = [
6420
- self._split_header_element(p)[0]
6421
- for p in self._parse_comma_list(headers['te'])
6422
- ]
6429
+ try:
6430
+ codings = [
6431
+ self._split_header_element(p)[0]
6432
+ for p in self._parse_comma_list(headers['te'])
6433
+ ]
6434
+ except ValueError:
6435
+ raise SemanticHeaderHttpParseError(
6436
+ code=SemanticHeaderHttpParseErrorCode.INVALID_TE,
6437
+ message=f'Invalid q-value in TE header: {headers["te"]!r}',
6438
+ ) from None
6423
6439
 
6424
6440
  prepared.te = [c for c in codings if c]
6425
6441
 
@@ -13526,25 +13542,36 @@ class IoPipelineFlowMessages(NamespaceClass):
13526
13542
  ):
13527
13543
  pass
13528
13544
 
13545
+ ##
13546
+ # TODO / WIP:
13547
+ # - Level-triggered writability, edge-notified: emitters send one message per *transition*, never repeats.
13548
+ # ReadyForOutput means 'output may flow'; PauseOutput means 'stop producing output'.
13549
+ # - They flow INBOUND (transport -> app), originated by the transport head (or a dedicated watermark handler
13550
+ # watching an OutboundBytesBufferingIoPipelineHandler) from its unflushed backlog vs high/low watermarks.
13551
+ # - Handlers that buffer outbound data (ssl, compression, ...) do not forward these blindly: they combine the
13552
+ # transport-side signal with their own buffer level and re-announce the COMBINED value inbound, again only on
13553
+ # change. Pass-through handlers just propagate.
13554
+ # - The implied initial state is writable; a pipeline that never sends either message behaves as if ReadyForOutput
13555
+ # were always in effect. As with the other flow messages, these are only ever sent when an IoPipelineFlow service
13556
+ # is present.
13557
+
13529
13558
  #
13530
13559
 
13531
- # # TODO:
13532
- # @ta.final
13533
- # @dc.dataclass(frozen=True)
13534
- # class ReadyForOutput( # ~ Netty `ChannelOutboundInvoker::fireChannelWritabilityChanged` # noqa
13535
- # IoPipelineMessages.MayPropagate,
13536
- # IoPipelineMessages.NeverOutbound,
13537
- # ):
13538
- # pass
13560
+ @ta.final
13561
+ @dc.dataclass(frozen=True)
13562
+ class ReadyForOutput( # ~ Netty `ChannelInboundInvoker::fireChannelWritabilityChanged` # noqa
13563
+ IoPipelineMessages.MayPropagate,
13564
+ IoPipelineMessages.NeverOutbound,
13565
+ ):
13566
+ pass
13539
13567
 
13540
- # # TODO:
13541
- # @ta.final
13542
- # @dc.dataclass(frozen=True)
13543
- # class PauseOutput( # ~ Netty `ChannelOutboundInvoker::fireChannelWritabilityChanged` # noqa
13544
- # IoPipelineMessages.MayPropagate,
13545
- # IoPipelineMessages.NeverOutbound,
13546
- # ):
13547
- # pass
13568
+ @ta.final
13569
+ @dc.dataclass(frozen=True)
13570
+ class PauseOutput( # ~ Netty `ChannelInboundInvoker::fireChannelWritabilityChanged` # noqa
13571
+ IoPipelineMessages.MayPropagate,
13572
+ IoPipelineMessages.NeverOutbound,
13573
+ ):
13574
+ pass
13548
13575
 
13549
13576
 
13550
13577
  ##
@@ -16017,17 +16044,6 @@ class SubprocessRun:
16017
16044
  async_subprocesses = self._DEFAULT_ASYNC_SUBPROCESSES
16018
16045
  return await check.not_none(async_subprocesses).run_(self.replace(**kwargs))
16019
16046
 
16020
- _DEFAULT_MAYSYNC_SUBPROCESSES: ta.ClassVar[ta.Optional[ta.Any]] = None # AbstractMaysyncSubprocesses
16021
-
16022
- async def maysync_run(
16023
- self,
16024
- maysync_subprocesses: ta.Optional[ta.Any] = None, # AbstractMaysyncSubprocesses
16025
- **kwargs: ta.Any,
16026
- ) -> SubprocessRunOutput:
16027
- if maysync_subprocesses is None:
16028
- maysync_subprocesses = self._DEFAULT_MAYSYNC_SUBPROCESSES
16029
- return await check.not_none(maysync_subprocesses).run_(self.replace(**kwargs))
16030
-
16031
16047
 
16032
16048
  SubprocessRun._FIELD_NAMES = frozenset(fld.name for fld in dc.fields(SubprocessRun)) # noqa
16033
16049
 
@@ -16060,13 +16076,6 @@ class SubprocessRunnable(Abstract, ta.Generic[T]):
16060
16076
  ) -> T:
16061
16077
  return self.handle_run_output(await self.make_run().async_run(async_subprocesses, **kwargs))
16062
16078
 
16063
- async def maysync_run(
16064
- self,
16065
- maysync_subprocesses: ta.Optional[ta.Any] = None, # AbstractMaysyncSubprocesses
16066
- **kwargs: ta.Any,
16067
- ) -> T:
16068
- return self.handle_run_output(await self.make_run().maysync_run(maysync_subprocesses, **kwargs))
16069
-
16070
16079
 
16071
16080
  ########################################
16072
16081
  # ../../../omlish/subprocesses/wrap.py
@@ -77,7 +77,7 @@ def __omlish_amalg__(): # noqa
77
77
  dict(path='../../omlish/asyncs/asyncio/timeouts.py', sha1='4d31b02b3c39b8f2fa7e94db36552fde6942e36a'),
78
78
  dict(path='../../omlish/lite/inject.py', sha1='172296edc98b32e51fdaa44ccc0a05b56e94f3ba'),
79
79
  dict(path='../../omlish/logs/std/json.py', sha1='2a75553131e4d5331bb0cedde42aa183f403fc3b'),
80
- dict(path='../../omlish/subprocesses/run.py', sha1='1d2a78b18bcc601c8b28269d792cc38bbf25a078'),
80
+ dict(path='../../omlish/subprocesses/run.py', sha1='9b7e1265cd59c58d30d8915f96ba84f80797ef42'),
81
81
  dict(path='../../omlish/subprocesses/wrap.py', sha1='8a9b7d2255481fae15c05f5624b0cdc0766f4b3f'),
82
82
  dict(path='providers/base.py', sha1='f5d068c21f230d742e9015b033cd6320f4c68898'),
83
83
  dict(path='../../omlish/logs/std/standard.py', sha1='472f1f0623d6bcd301612551432afa7e3a661a34'),
@@ -4790,17 +4790,6 @@ class SubprocessRun:
4790
4790
  async_subprocesses = self._DEFAULT_ASYNC_SUBPROCESSES
4791
4791
  return await check.not_none(async_subprocesses).run_(self.replace(**kwargs))
4792
4792
 
4793
- _DEFAULT_MAYSYNC_SUBPROCESSES: ta.ClassVar[ta.Optional[ta.Any]] = None # AbstractMaysyncSubprocesses
4794
-
4795
- async def maysync_run(
4796
- self,
4797
- maysync_subprocesses: ta.Optional[ta.Any] = None, # AbstractMaysyncSubprocesses
4798
- **kwargs: ta.Any,
4799
- ) -> SubprocessRunOutput:
4800
- if maysync_subprocesses is None:
4801
- maysync_subprocesses = self._DEFAULT_MAYSYNC_SUBPROCESSES
4802
- return await check.not_none(maysync_subprocesses).run_(self.replace(**kwargs))
4803
-
4804
4793
 
4805
4794
  SubprocessRun._FIELD_NAMES = frozenset(fld.name for fld in dc.fields(SubprocessRun)) # noqa
4806
4795
 
@@ -4833,13 +4822,6 @@ class SubprocessRunnable(Abstract, ta.Generic[T]):
4833
4822
  ) -> T:
4834
4823
  return self.handle_run_output(await self.make_run().async_run(async_subprocesses, **kwargs))
4835
4824
 
4836
- async def maysync_run(
4837
- self,
4838
- maysync_subprocesses: ta.Optional[ta.Any] = None, # AbstractMaysyncSubprocesses
4839
- **kwargs: ta.Any,
4840
- ) -> T:
4841
- return self.handle_run_output(await self.make_run().maysync_run(maysync_subprocesses, **kwargs))
4842
-
4843
4825
 
4844
4826
  ########################################
4845
4827
  # ../../../omlish/subprocesses/wrap.py
@@ -52,7 +52,7 @@ def __omlish_amalg__(): # noqa
52
52
  dict(path='asyncs.py', sha1='a78bd64bada44716809c19e95d6ca4a96f3a28d7'),
53
53
  dict(path='bytes/buffering.py', sha1='c19bddb05ef9449aa1a1c228901cab0d2d927946'),
54
54
  dict(path='drivers/metadata.py', sha1='44e49cb87136933ffe867087897eab5004034a93'),
55
- dict(path='flow/types.py', sha1='ac9a91d0a8115443984a75a63ffac51a7acef580'),
55
+ dict(path='flow/types.py', sha1='4353968e5bd490f4121eadf9e391076bd2673f28'),
56
56
  dict(path='handlers/fns.py', sha1='6dd1901ebdbdb31caeffab06d239f1c41e3f2726'),
57
57
  dict(path='handlers/queues.py', sha1='f49d19c5dd7de77299bedbfb3a77a36479fd1edf'),
58
58
  dict(path='sched/types.py', sha1='854b3f0f8ed5da2132a516f787b9019f5cb4eef5'),
@@ -4145,25 +4145,36 @@ class IoPipelineFlowMessages(NamespaceClass):
4145
4145
  ):
4146
4146
  pass
4147
4147
 
4148
+ ##
4149
+ # TODO / WIP:
4150
+ # - Level-triggered writability, edge-notified: emitters send one message per *transition*, never repeats.
4151
+ # ReadyForOutput means 'output may flow'; PauseOutput means 'stop producing output'.
4152
+ # - They flow INBOUND (transport -> app), originated by the transport head (or a dedicated watermark handler
4153
+ # watching an OutboundBytesBufferingIoPipelineHandler) from its unflushed backlog vs high/low watermarks.
4154
+ # - Handlers that buffer outbound data (ssl, compression, ...) do not forward these blindly: they combine the
4155
+ # transport-side signal with their own buffer level and re-announce the COMBINED value inbound, again only on
4156
+ # change. Pass-through handlers just propagate.
4157
+ # - The implied initial state is writable; a pipeline that never sends either message behaves as if ReadyForOutput
4158
+ # were always in effect. As with the other flow messages, these are only ever sent when an IoPipelineFlow service
4159
+ # is present.
4160
+
4148
4161
  #
4149
4162
 
4150
- # # TODO:
4151
- # @ta.final
4152
- # @dc.dataclass(frozen=True)
4153
- # class ReadyForOutput( # ~ Netty `ChannelOutboundInvoker::fireChannelWritabilityChanged` # noqa
4154
- # IoPipelineMessages.MayPropagate,
4155
- # IoPipelineMessages.NeverOutbound,
4156
- # ):
4157
- # pass
4158
-
4159
- # # TODO:
4160
- # @ta.final
4161
- # @dc.dataclass(frozen=True)
4162
- # class PauseOutput( # ~ Netty `ChannelOutboundInvoker::fireChannelWritabilityChanged` # noqa
4163
- # IoPipelineMessages.MayPropagate,
4164
- # IoPipelineMessages.NeverOutbound,
4165
- # ):
4166
- # pass
4163
+ @ta.final
4164
+ @dc.dataclass(frozen=True)
4165
+ class ReadyForOutput( # ~ Netty `ChannelInboundInvoker::fireChannelWritabilityChanged` # noqa
4166
+ IoPipelineMessages.MayPropagate,
4167
+ IoPipelineMessages.NeverOutbound,
4168
+ ):
4169
+ pass
4170
+
4171
+ @ta.final
4172
+ @dc.dataclass(frozen=True)
4173
+ class PauseOutput( # ~ Netty `ChannelInboundInvoker::fireChannelWritabilityChanged` # noqa
4174
+ IoPipelineMessages.MayPropagate,
4175
+ IoPipelineMessages.NeverOutbound,
4176
+ ):
4177
+ pass
4167
4178
 
4168
4179
 
4169
4180
  ##
@@ -72,7 +72,7 @@ def __omlish_amalg__(): # noqa
72
72
  dict(path='../../logs/protocols.py', sha1='05ca4d1d7feb50c4e3b9f22ee371aa7bf4b3dbd1'),
73
73
  dict(path='../../argparse/cli.py', sha1='aef500dd2d8f5a65c4c04ede11355ac8eb513f2e'),
74
74
  dict(path='../../lite/args.py', sha1='ae96b0baeb376617a63c0e64632ab2c5ff4171a8'),
75
- dict(path='../../subprocesses/run.py', sha1='1d2a78b18bcc601c8b28269d792cc38bbf25a078'),
75
+ dict(path='../../subprocesses/run.py', sha1='9b7e1265cd59c58d30d8915f96ba84f80797ef42'),
76
76
  dict(path='../../subprocesses/wrap.py', sha1='8a9b7d2255481fae15c05f5624b0cdc0766f4b3f'),
77
77
  dict(path='../../diag/cmds/lslocks.py', sha1='b1e09c9374f9007cb19c2c5009937e7d2f4c0a7b'),
78
78
  dict(path='../../diag/cmds/lsof.py', sha1='0a58d3c05ce0038690ce8c5b64dd96e7b21b5853'),
@@ -3700,17 +3700,6 @@ class SubprocessRun:
3700
3700
  async_subprocesses = self._DEFAULT_ASYNC_SUBPROCESSES
3701
3701
  return await check.not_none(async_subprocesses).run_(self.replace(**kwargs))
3702
3702
 
3703
- _DEFAULT_MAYSYNC_SUBPROCESSES: ta.ClassVar[ta.Optional[ta.Any]] = None # AbstractMaysyncSubprocesses
3704
-
3705
- async def maysync_run(
3706
- self,
3707
- maysync_subprocesses: ta.Optional[ta.Any] = None, # AbstractMaysyncSubprocesses
3708
- **kwargs: ta.Any,
3709
- ) -> SubprocessRunOutput:
3710
- if maysync_subprocesses is None:
3711
- maysync_subprocesses = self._DEFAULT_MAYSYNC_SUBPROCESSES
3712
- return await check.not_none(maysync_subprocesses).run_(self.replace(**kwargs))
3713
-
3714
3703
 
3715
3704
  SubprocessRun._FIELD_NAMES = frozenset(fld.name for fld in dc.fields(SubprocessRun)) # noqa
3716
3705
 
@@ -3743,13 +3732,6 @@ class SubprocessRunnable(Abstract, ta.Generic[T]):
3743
3732
  ) -> T:
3744
3733
  return self.handle_run_output(await self.make_run().async_run(async_subprocesses, **kwargs))
3745
3734
 
3746
- async def maysync_run(
3747
- self,
3748
- maysync_subprocesses: ta.Optional[ta.Any] = None, # AbstractMaysyncSubprocesses
3749
- **kwargs: ta.Any,
3750
- ) -> T:
3751
- return self.handle_run_output(await self.make_run().maysync_run(maysync_subprocesses, **kwargs))
3752
-
3753
3735
 
3754
3736
  ########################################
3755
3737
  # ../../../subprocesses/wrap.py
@@ -90,7 +90,7 @@ def __omlish_amalg__(): # noqa
90
90
  dict(path='../magic/prepare.py', sha1='a9b6bd7408d86a52fab7aae2c522032fb251cb8e'),
91
91
  dict(path='../magic/styles.py', sha1='60fc56d089669eaad72c5c134b91bc69d4bc107e'),
92
92
  dict(path='../packaging/versions.py', sha1='d515a54dd7fa27a9fd4d8c8617e5a21a3c12ea1e'),
93
- dict(path='../packaging/wheelfile.py', sha1='2e1113819aa85ed00e1fe25c71a2b3dbc0a383f5'),
93
+ dict(path='../packaging/wheelfile.py', sha1='59294a1111983eed63b0bd64c2330b712d1919db'),
94
94
  dict(path='../../omlish/formats/toml/parser.py', sha1='275d1321063cfa9d662ca458af3cb2801b9140ce'),
95
95
  dict(path='../../omlish/formats/toml/writer.py', sha1='6ea41d7e724bb1dcf6bd84b88993ff4e8798e021'),
96
96
  dict(path='../../omlish/lite/abstract.py', sha1='a2fc3f3697fa8de5247761e9d554e70176f37aac'),
@@ -128,7 +128,7 @@ def __omlish_amalg__(): # noqa
128
128
  dict(path='../../omlish/lite/inject.py', sha1='172296edc98b32e51fdaa44ccc0a05b56e94f3ba'),
129
129
  dict(path='../../omlish/logs/contexts.py', sha1='2f5881193a0c19c89c399ab0e0b5072c4048a60c'),
130
130
  dict(path='../../omlish/logs/std/json.py', sha1='2a75553131e4d5331bb0cedde42aa183f403fc3b'),
131
- dict(path='../../omlish/subprocesses/run.py', sha1='1d2a78b18bcc601c8b28269d792cc38bbf25a078'),
131
+ dict(path='../../omlish/subprocesses/run.py', sha1='9b7e1265cd59c58d30d8915f96ba84f80797ef42'),
132
132
  dict(path='../../omlish/subprocesses/wrap.py', sha1='8a9b7d2255481fae15c05f5624b0cdc0766f4b3f'),
133
133
  dict(path='../interp/providers/base.py', sha1='f5d068c21f230d742e9015b033cd6320f4c68898'),
134
134
  dict(path='../../omlish/logs/base.py', sha1='76bd4fff7a943cfdf0f992fb14d0cb7d89fc3fc6'),
@@ -875,7 +875,7 @@ class WheelFile(zipfile.ZipFile):
875
875
  def open( # type: ignore # noqa
876
876
  self,
877
877
  name_or_info: ta.Union[str, zipfile.ZipInfo],
878
- mode: str = 'r', # ta.Literal["r", "w"]
878
+ mode: ta.Literal['r', 'w'] = 'r',
879
879
  pwd: ta.Optional[bytes] = None,
880
880
  ) -> ta.IO[bytes]:
881
881
  def _update_crc(newdata: bytes) -> None:
@@ -8971,17 +8971,6 @@ class SubprocessRun:
8971
8971
  async_subprocesses = self._DEFAULT_ASYNC_SUBPROCESSES
8972
8972
  return await check.not_none(async_subprocesses).run_(self.replace(**kwargs))
8973
8973
 
8974
- _DEFAULT_MAYSYNC_SUBPROCESSES: ta.ClassVar[ta.Optional[ta.Any]] = None # AbstractMaysyncSubprocesses
8975
-
8976
- async def maysync_run(
8977
- self,
8978
- maysync_subprocesses: ta.Optional[ta.Any] = None, # AbstractMaysyncSubprocesses
8979
- **kwargs: ta.Any,
8980
- ) -> SubprocessRunOutput:
8981
- if maysync_subprocesses is None:
8982
- maysync_subprocesses = self._DEFAULT_MAYSYNC_SUBPROCESSES
8983
- return await check.not_none(maysync_subprocesses).run_(self.replace(**kwargs))
8984
-
8985
8974
 
8986
8975
  SubprocessRun._FIELD_NAMES = frozenset(fld.name for fld in dc.fields(SubprocessRun)) # noqa
8987
8976
 
@@ -9014,13 +9003,6 @@ class SubprocessRunnable(Abstract, ta.Generic[T]):
9014
9003
  ) -> T:
9015
9004
  return self.handle_run_output(await self.make_run().async_run(async_subprocesses, **kwargs))
9016
9005
 
9017
- async def maysync_run(
9018
- self,
9019
- maysync_subprocesses: ta.Optional[ta.Any] = None, # AbstractMaysyncSubprocesses
9020
- **kwargs: ta.Any,
9021
- ) -> T:
9022
- return self.handle_run_output(await self.make_run().maysync_run(maysync_subprocesses, **kwargs))
9023
-
9024
9006
 
9025
9007
  ########################################
9026
9008
  # ../../../omlish/subprocesses/wrap.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.25
3
+ Version: 0.0.26
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,10 +14,10 @@ Classifier: Programming Language :: Python :: 3.14
14
14
  Requires-Python: >=3.14
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: omlish==0.0.25
17
+ Requires-Dist: omlish==0.0.26
18
18
  Provides-Extra: all
19
- Requires-Dist: ominfra==0.0.25; extra == "all"
20
- Requires-Dist: ommlds==0.0.25; extra == "all"
19
+ Requires-Dist: ominfra==0.0.26; extra == "all"
20
+ Requires-Dist: ommlds==0.0.26; extra == "all"
21
21
  Requires-Dist: black~=26.5; extra == "all"
22
22
  Requires-Dist: pycparser~=3.0; extra == "all"
23
23
  Requires-Dist: pcpp~=1.30; extra == "all"
@@ -25,7 +25,7 @@ Requires-Dist: docutils~=0.23; extra == "all"
25
25
  Requires-Dist: markdown-it-py~=4.2; extra == "all"
26
26
  Requires-Dist: mdit-py-plugins~=0.6; extra == "all"
27
27
  Requires-Dist: pygments~=2.20; extra == "all"
28
- Requires-Dist: mypy~=2.1; extra == "all"
28
+ Requires-Dist: mypy~=2.2; extra == "all"
29
29
  Requires-Dist: gprof2dot~=2025.4; extra == "all"
30
30
  Requires-Dist: segno~=1.6; extra == "all"
31
31
  Requires-Dist: rich~=15.0; extra == "all"
@@ -33,9 +33,9 @@ Requires-Dist: textual~=8.2; extra == "all"
33
33
  Requires-Dist: textual-dev~=1.8; extra == "all"
34
34
  Requires-Dist: textual-speedups~=0.2; extra == "all"
35
35
  Provides-Extra: ominfra
36
- Requires-Dist: ominfra==0.0.25; extra == "ominfra"
36
+ Requires-Dist: ominfra==0.0.26; extra == "ominfra"
37
37
  Provides-Extra: ommlds
38
- Requires-Dist: ommlds==0.0.25; extra == "ommlds"
38
+ Requires-Dist: ommlds==0.0.26; extra == "ommlds"
39
39
  Provides-Extra: black
40
40
  Requires-Dist: black~=26.5; extra == "black"
41
41
  Provides-Extra: c
@@ -47,7 +47,7 @@ Requires-Dist: markdown-it-py~=4.2; extra == "doc"
47
47
  Requires-Dist: mdit-py-plugins~=0.6; extra == "doc"
48
48
  Requires-Dist: pygments~=2.20; extra == "doc"
49
49
  Provides-Extra: mypy
50
- Requires-Dist: mypy~=2.1; extra == "mypy"
50
+ Requires-Dist: mypy~=2.2; extra == "mypy"
51
51
  Provides-Extra: prof
52
52
  Requires-Dist: gprof2dot~=2025.4; extra == "prof"
53
53
  Provides-Extra: qr
@@ -1,8 +1,8 @@
1
- omlish==0.0.25
1
+ omlish==0.0.26
2
2
 
3
3
  [all]
4
- ominfra==0.0.25
5
- ommlds==0.0.25
4
+ ominfra==0.0.26
5
+ ommlds==0.0.26
6
6
  black~=26.5
7
7
  pycparser~=3.0
8
8
  pcpp~=1.30
@@ -10,7 +10,7 @@ docutils~=0.23
10
10
  markdown-it-py~=4.2
11
11
  mdit-py-plugins~=0.6
12
12
  pygments~=2.20
13
- mypy~=2.1
13
+ mypy~=2.2
14
14
  gprof2dot~=2025.4
15
15
  segno~=1.6
16
16
  rich~=15.0
@@ -32,13 +32,13 @@ mdit-py-plugins~=0.6
32
32
  pygments~=2.20
33
33
 
34
34
  [mypy]
35
- mypy~=2.1
35
+ mypy~=2.2
36
36
 
37
37
  [ominfra]
38
- ominfra==0.0.25
38
+ ominfra==0.0.26
39
39
 
40
40
  [ommlds]
41
- ommlds==0.0.25
41
+ ommlds==0.0.26
42
42
 
43
43
  [prof]
44
44
  gprof2dot~=2025.4
@@ -13,7 +13,7 @@ urls = {source = 'https://github.com/wrmsr/omlish'}
13
13
  license = 'BSD-3-Clause'
14
14
  readme = 'README.md'
15
15
  requires-python = '>=3.14'
16
- version = '0.0.25'
16
+ version = '0.0.26'
17
17
  classifiers = [
18
18
  'Development Status :: 2 - Pre-Alpha',
19
19
  'Intended Audience :: Developers',
@@ -24,13 +24,13 @@ classifiers = [
24
24
  ]
25
25
  description = 'omdev'
26
26
  dependencies = [
27
- 'omlish == 0.0.25',
27
+ 'omlish == 0.0.26',
28
28
  ]
29
29
 
30
30
  [project.optional-dependencies]
31
31
  all = [
32
- 'ominfra == 0.0.25',
33
- 'ommlds == 0.0.25',
32
+ 'ominfra == 0.0.26',
33
+ 'ommlds == 0.0.26',
34
34
  'black ~= 26.5',
35
35
  'pycparser ~= 3.0',
36
36
  'pcpp ~= 1.30',
@@ -38,7 +38,7 @@ all = [
38
38
  'markdown-it-py ~= 4.2',
39
39
  'mdit-py-plugins ~= 0.6',
40
40
  'pygments ~= 2.20',
41
- 'mypy ~= 2.1',
41
+ 'mypy ~= 2.2',
42
42
  'gprof2dot ~= 2025.4',
43
43
  'segno ~= 1.6',
44
44
  'rich ~= 15.0',
@@ -47,10 +47,10 @@ all = [
47
47
  'textual-speedups ~= 0.2',
48
48
  ]
49
49
  ominfra = [
50
- 'ominfra == 0.0.25',
50
+ 'ominfra == 0.0.26',
51
51
  ]
52
52
  ommlds = [
53
- 'ommlds == 0.0.25',
53
+ 'ommlds == 0.0.26',
54
54
  ]
55
55
  black = [
56
56
  'black ~= 26.5',
@@ -66,7 +66,7 @@ doc = [
66
66
  'pygments ~= 2.20',
67
67
  ]
68
68
  mypy = [
69
- 'mypy ~= 2.1',
69
+ 'mypy ~= 2.2',
70
70
  ]
71
71
  prof = [
72
72
  'gprof2dot ~= 2025.4',
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes