omdev 0.0.25__tar.gz → 0.0.27__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.27}/PKG-INFO +9 -9
  2. {omdev-0.0.25 → omdev-0.0.27}/omdev/.omlish-manifests.json +0 -14
  3. {omdev-0.0.25 → omdev-0.0.27}/omdev/__about__.py +3 -3
  4. {omdev-0.0.25 → omdev-0.0.27}/omdev/packaging/marshal.py +1 -1
  5. {omdev-0.0.25 → omdev-0.0.27}/omdev/packaging/wheelfile.py +1 -1
  6. {omdev-0.0.25 → omdev-0.0.27}/omdev/scripts/ci.py +81 -72
  7. {omdev-0.0.25 → omdev-0.0.27}/omdev/scripts/interp.py +1 -19
  8. {omdev-0.0.25 → omdev-0.0.27}/omdev/scripts/lib/io/pipelines.py +51 -40
  9. omdev-0.0.25/omdev/scripts/lib/io/streams.py → omdev-0.0.27/omdev/scripts/lib/io/streambufs.py +2 -2
  10. {omdev-0.0.25 → omdev-0.0.27}/omdev/scripts/pidfiles.py +1 -19
  11. {omdev-0.0.25 → omdev-0.0.27}/omdev/scripts/pyproject.py +5 -23
  12. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/json/parsing.py +3 -3
  13. {omdev-0.0.25 → omdev-0.0.27/omdev.egg-info}/PKG-INFO +9 -9
  14. {omdev-0.0.25 → omdev-0.0.27}/omdev.egg-info/SOURCES.txt +1 -4
  15. {omdev-0.0.25 → omdev-0.0.27}/omdev.egg-info/requires.txt +8 -8
  16. {omdev-0.0.25 → omdev-0.0.27}/pyproject.toml +9 -9
  17. omdev-0.0.25/omdev/supervisor/__main__.py +0 -11
  18. omdev-0.0.25/omdev/supervisor/cli.py +0 -120
  19. omdev-0.0.25/omdev/tui/textual/altdevtools/tools/__init__.py +0 -0
  20. {omdev-0.0.25 → omdev-0.0.27}/LICENSE +0 -0
  21. {omdev-0.0.25 → omdev-0.0.27}/MANIFEST.in +0 -0
  22. {omdev-0.0.25 → omdev-0.0.27}/README.md +0 -0
  23. {omdev-0.0.25 → omdev-0.0.27}/omdev/README.md +0 -0
  24. {omdev-0.0.25 → omdev-0.0.27}/omdev/__init__.py +0 -0
  25. {omdev-0.0.25 → omdev-0.0.27}/omdev/amalg/__init__.py +0 -0
  26. {omdev-0.0.25 → omdev-0.0.27}/omdev/amalg/__main__.py +0 -0
  27. {omdev-0.0.25 → omdev-0.0.27}/omdev/amalg/cli/__init__.py +0 -0
  28. {omdev-0.0.25 → omdev-0.0.27}/omdev/amalg/cli/main.py +0 -0
  29. {omdev-0.0.25 → omdev-0.0.27}/omdev/amalg/gen/__init__.py +0 -0
  30. {omdev-0.0.25 → omdev-0.0.27}/omdev/amalg/gen/gen.py +0 -0
  31. {omdev-0.0.25 → omdev-0.0.27}/omdev/amalg/gen/imports.py +0 -0
  32. {omdev-0.0.25 → omdev-0.0.27}/omdev/amalg/gen/manifests.py +0 -0
  33. {omdev-0.0.25 → omdev-0.0.27}/omdev/amalg/gen/resources.py +0 -0
  34. {omdev-0.0.25 → omdev-0.0.27}/omdev/amalg/gen/srcfiles.py +0 -0
  35. {omdev-0.0.25 → omdev-0.0.27}/omdev/amalg/gen/strip.py +0 -0
  36. {omdev-0.0.25 → omdev-0.0.27}/omdev/amalg/gen/types.py +0 -0
  37. {omdev-0.0.25 → omdev-0.0.27}/omdev/amalg/gen/typing.py +0 -0
  38. {omdev-0.0.25 → omdev-0.0.27}/omdev/amalg/info.py +0 -0
  39. {omdev-0.0.25 → omdev-0.0.27}/omdev/amalg/sources.py +0 -0
  40. {omdev-0.0.25 → omdev-0.0.27}/omdev/cache/__init__.py +0 -0
  41. {omdev-0.0.25 → omdev-0.0.27}/omdev/cache/compute/__init__.py +0 -0
  42. {omdev-0.0.25 → omdev-0.0.27}/omdev/cache/compute/cache.py +0 -0
  43. {omdev-0.0.25 → omdev-0.0.27}/omdev/cache/compute/contexts.py +0 -0
  44. {omdev-0.0.25 → omdev-0.0.27}/omdev/cache/compute/currents.py +0 -0
  45. {omdev-0.0.25 → omdev-0.0.27}/omdev/cache/compute/fns.py +0 -0
  46. {omdev-0.0.25 → omdev-0.0.27}/omdev/cache/compute/resolvers.py +0 -0
  47. {omdev-0.0.25 → omdev-0.0.27}/omdev/cache/compute/storage.py +0 -0
  48. {omdev-0.0.25 → omdev-0.0.27}/omdev/cache/compute/types.py +0 -0
  49. {omdev-0.0.25 → omdev-0.0.27}/omdev/cache/data/__init__.py +0 -0
  50. {omdev-0.0.25 → omdev-0.0.27}/omdev/cache/data/actions.py +0 -0
  51. {omdev-0.0.25 → omdev-0.0.27}/omdev/cache/data/cache.py +0 -0
  52. {omdev-0.0.25 → omdev-0.0.27}/omdev/cache/data/consts.py +0 -0
  53. {omdev-0.0.25 → omdev-0.0.27}/omdev/cache/data/defaults.py +0 -0
  54. {omdev-0.0.25 → omdev-0.0.27}/omdev/cache/data/manifests.py +0 -0
  55. {omdev-0.0.25 → omdev-0.0.27}/omdev/cache/data/specs.py +0 -0
  56. {omdev-0.0.25 → omdev-0.0.27}/omdev/capi/__init__.py +0 -0
  57. {omdev-0.0.25 → omdev-0.0.27}/omdev/capi/darwin/__init__.py +0 -0
  58. {omdev-0.0.25 → omdev-0.0.27}/omdev/capi/darwin/aps.py +0 -0
  59. {omdev-0.0.25 → omdev-0.0.27}/omdev/capi/darwin/ax.py +0 -0
  60. {omdev-0.0.25 → omdev-0.0.27}/omdev/capi/darwin/cf.py +0 -0
  61. {omdev-0.0.25 → omdev-0.0.27}/omdev/capi/darwin/cg.py +0 -0
  62. {omdev-0.0.25 → omdev-0.0.27}/omdev/capi/linux/__init__.py +0 -0
  63. {omdev-0.0.25 → omdev-0.0.27}/omdev/capi/linux/x11.py +0 -0
  64. {omdev-0.0.25 → omdev-0.0.27}/omdev/cc/__init__.py +0 -0
  65. {omdev-0.0.25 → omdev-0.0.27}/omdev/cc/__main__.py +0 -0
  66. {omdev-0.0.25 → omdev-0.0.27}/omdev/cc/cdeps.py +0 -0
  67. {omdev-0.0.25 → omdev-0.0.27}/omdev/cc/cdeps.toml +0 -0
  68. {omdev-0.0.25 → omdev-0.0.27}/omdev/cc/cli.py +0 -0
  69. {omdev-0.0.25 → omdev-0.0.27}/omdev/cc/srclangs.py +0 -0
  70. {omdev-0.0.25 → omdev-0.0.27}/omdev/cexts/__init__.py +0 -0
  71. {omdev-0.0.25 → omdev-0.0.27}/omdev/cexts/_boilerplate.cc +0 -0
  72. {omdev-0.0.25 → omdev-0.0.27}/omdev/cexts/_distutils/LICENSE +0 -0
  73. {omdev-0.0.25 → omdev-0.0.27}/omdev/cexts/_distutils/__init__.py +0 -0
  74. {omdev-0.0.25 → omdev-0.0.27}/omdev/cexts/_distutils/build_ext.py +0 -0
  75. {omdev-0.0.25 → omdev-0.0.27}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  76. {omdev-0.0.25 → omdev-0.0.27}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  77. {omdev-0.0.25 → omdev-0.0.27}/omdev/cexts/_distutils/compilers/options.py +0 -0
  78. {omdev-0.0.25 → omdev-0.0.27}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  79. {omdev-0.0.25 → omdev-0.0.27}/omdev/cexts/_distutils/dir_util.py +0 -0
  80. {omdev-0.0.25 → omdev-0.0.27}/omdev/cexts/_distutils/errors.py +0 -0
  81. {omdev-0.0.25 → omdev-0.0.27}/omdev/cexts/_distutils/extension.py +0 -0
  82. {omdev-0.0.25 → omdev-0.0.27}/omdev/cexts/_distutils/file_util.py +0 -0
  83. {omdev-0.0.25 → omdev-0.0.27}/omdev/cexts/_distutils/modified.py +0 -0
  84. {omdev-0.0.25 → omdev-0.0.27}/omdev/cexts/_distutils/spawn.py +0 -0
  85. {omdev-0.0.25 → omdev-0.0.27}/omdev/cexts/_distutils/sysconfig.py +0 -0
  86. {omdev-0.0.25 → omdev-0.0.27}/omdev/cexts/_distutils/util.py +0 -0
  87. {omdev-0.0.25 → omdev-0.0.27}/omdev/cexts/_distutils/version.py +0 -0
  88. {omdev-0.0.25 → omdev-0.0.27}/omdev/cexts/build.py +0 -0
  89. {omdev-0.0.25 → omdev-0.0.27}/omdev/cexts/cmake.py +0 -0
  90. {omdev-0.0.25 → omdev-0.0.27}/omdev/cexts/importhook.py +0 -0
  91. {omdev-0.0.25 → omdev-0.0.27}/omdev/cexts/magic.py +0 -0
  92. {omdev-0.0.25 → omdev-0.0.27}/omdev/cexts/scan.py +0 -0
  93. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/__init__.py +0 -0
  94. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/__main__.py +0 -0
  95. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/cache.py +0 -0
  96. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/ci.py +0 -0
  97. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/cli.py +0 -0
  98. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/compose.py +0 -0
  99. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/consts.py +0 -0
  100. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/docker/__init__.py +0 -0
  101. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/docker/buildcaching.py +0 -0
  102. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/docker/cache.py +0 -0
  103. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/docker/cacheserved/__init__.py +0 -0
  104. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/docker/cacheserved/cache.py +0 -0
  105. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/docker/cacheserved/manifests.py +0 -0
  106. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/docker/cmds.py +0 -0
  107. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/docker/dataserver.py +0 -0
  108. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/docker/imagepulling.py +0 -0
  109. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/docker/inject.py +0 -0
  110. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/docker/packing.py +0 -0
  111. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/docker/repositories.py +0 -0
  112. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/docker/utils.py +0 -0
  113. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/github/__init__.py +0 -0
  114. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/github/api/__init__.py +0 -0
  115. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/github/api/clients.py +0 -0
  116. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/github/api/v1/__init__.py +0 -0
  117. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/github/api/v1/api.py +0 -0
  118. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/github/api/v1/client.py +0 -0
  119. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/github/api/v2/__init__.py +0 -0
  120. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/github/api/v2/api.py +0 -0
  121. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/github/api/v2/azure.py +0 -0
  122. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/github/api/v2/client.py +0 -0
  123. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/github/bootstrap.py +0 -0
  124. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/github/cache.py +0 -0
  125. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/github/cli.py +0 -0
  126. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/github/env.py +0 -0
  127. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/github/inject.py +0 -0
  128. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/inject.py +0 -0
  129. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/requirements.py +0 -0
  130. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/shell.py +0 -0
  131. {omdev-0.0.25 → omdev-0.0.27}/omdev/ci/utils.py +0 -0
  132. {omdev-0.0.25 → omdev-0.0.27}/omdev/cli/__init__.py +0 -0
  133. {omdev-0.0.25 → omdev-0.0.27}/omdev/cli/__main__.py +0 -0
  134. {omdev-0.0.25 → omdev-0.0.27}/omdev/cli/_pathhack.py +0 -0
  135. {omdev-0.0.25 → omdev-0.0.27}/omdev/cli/clicli.py +0 -0
  136. {omdev-0.0.25 → omdev-0.0.27}/omdev/cli/install.py +0 -0
  137. {omdev-0.0.25 → omdev-0.0.27}/omdev/cli/main.py +0 -0
  138. {omdev-0.0.25 → omdev-0.0.27}/omdev/cli/managers.py +0 -0
  139. {omdev-0.0.25 → omdev-0.0.27}/omdev/cli/types.py +0 -0
  140. {omdev-0.0.25 → omdev-0.0.27}/omdev/clipboard/__init__.py +0 -0
  141. {omdev-0.0.25 → omdev-0.0.27}/omdev/clipboard/capi/__init__.py +0 -0
  142. {omdev-0.0.25 → omdev-0.0.27}/omdev/clipboard/capi/darwin_cf.py +0 -0
  143. {omdev-0.0.25 → omdev-0.0.27}/omdev/clipboard/capi/linux_x11.py +0 -0
  144. {omdev-0.0.25 → omdev-0.0.27}/omdev/clipboard/commands.py +0 -0
  145. {omdev-0.0.25 → omdev-0.0.27}/omdev/clipboard/platform.py +0 -0
  146. {omdev-0.0.25 → omdev-0.0.27}/omdev/clipboard/types.py +0 -0
  147. {omdev-0.0.25 → omdev-0.0.27}/omdev/cmake.py +0 -0
  148. {omdev-0.0.25 → omdev-0.0.27}/omdev/cmdlog/__init__.py +0 -0
  149. {omdev-0.0.25 → omdev-0.0.27}/omdev/cmdlog/__main__.py +0 -0
  150. {omdev-0.0.25 → omdev-0.0.27}/omdev/cmdlog/_cmdlog.py +0 -0
  151. {omdev-0.0.25 → omdev-0.0.27}/omdev/cmdlog/cli.py +0 -0
  152. {omdev-0.0.25 → omdev-0.0.27}/omdev/cmdlog/cmdlog.py +0 -0
  153. {omdev-0.0.25 → omdev-0.0.27}/omdev/dataclasses/__init__.py +0 -0
  154. {omdev-0.0.25 → omdev-0.0.27}/omdev/dataclasses/__main__.py +0 -0
  155. {omdev-0.0.25 → omdev-0.0.27}/omdev/dataclasses/_dumping.py +0 -0
  156. {omdev-0.0.25 → omdev-0.0.27}/omdev/dataclasses/_template.py +0 -0
  157. {omdev-0.0.25 → omdev-0.0.27}/omdev/dataclasses/cli.py +0 -0
  158. {omdev-0.0.25 → omdev-0.0.27}/omdev/dataclasses/codegen.py +0 -0
  159. {omdev-0.0.25 → omdev-0.0.27}/omdev/dataclasses/dumping.py +0 -0
  160. {omdev-0.0.25 → omdev-0.0.27}/omdev/dataserver/__init__.py +0 -0
  161. {omdev-0.0.25 → omdev-0.0.27}/omdev/dataserver/handlers.py +0 -0
  162. {omdev-0.0.25 → omdev-0.0.27}/omdev/dataserver/http.py +0 -0
  163. {omdev-0.0.25 → omdev-0.0.27}/omdev/dataserver/routes.py +0 -0
  164. {omdev-0.0.25 → omdev-0.0.27}/omdev/dataserver/server.py +0 -0
  165. {omdev-0.0.25 → omdev-0.0.27}/omdev/dataserver/targets.py +0 -0
  166. {omdev-0.0.25 → omdev-0.0.27}/omdev/diffs/__init__.py +0 -0
  167. {omdev-0.0.25 → omdev-0.0.27}/omdev/diffs/__main__.py +0 -0
  168. {omdev-0.0.25 → omdev-0.0.27}/omdev/diffs/cli.py +0 -0
  169. {omdev-0.0.25 → omdev-0.0.27}/omdev/diffs/parsing.py +0 -0
  170. {omdev-0.0.25 → omdev-0.0.27}/omdev/diffs/rendering.py +0 -0
  171. {omdev-0.0.25 → omdev-0.0.27}/omdev/diffs/types.py +0 -0
  172. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/__init__.py +0 -0
  173. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/__main__.py +0 -0
  174. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/build.py +0 -0
  175. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/cli.py +0 -0
  176. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/config.py +0 -0
  177. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/config.toml +0 -0
  178. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/content.py +0 -0
  179. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/gen.py +0 -0
  180. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/helpers.py +0 -0
  181. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/ops.py +0 -0
  182. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/rendering.py +0 -0
  183. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/.python-versions.json +0 -0
  184. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/configs/.gdbinit +0 -0
  185. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/configs/.sqliterc +0 -0
  186. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/configs/.tmux.conf +0 -0
  187. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/configs/.vimrc +0 -0
  188. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/depsets/python.toml +0 -0
  189. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/depsets/system.toml +0 -0
  190. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/depsets/x11.toml +0 -0
  191. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/fragments/apt.sh +0 -0
  192. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/fragments/chgrp.sh +0 -0
  193. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/fragments/docker.sh +0 -0
  194. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/fragments/firefox.sh +0 -0
  195. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/fragments/go.sh +0 -0
  196. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/fragments/jdk.sh +0 -0
  197. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/fragments/man.sh +0 -0
  198. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/fragments/nvm.sh +0 -0
  199. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/fragments/pyenv.sh +0 -0
  200. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/fragments/rbenv.sh +0 -0
  201. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/fragments/rust.sh +0 -0
  202. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/fragments/sshd.sh +0 -0
  203. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/fragments/user.sh +0 -0
  204. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/fragments/uv.sh +0 -0
  205. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/fragments/vcpkg.sh +0 -0
  206. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/fragments/workdir.sh +0 -0
  207. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/fragments/zig.sh +0 -0
  208. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/scripts/install-claude +0 -0
  209. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/scripts/install-codex +0 -0
  210. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/scripts/install-pi +0 -0
  211. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/scripts/run-dbus +0 -0
  212. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/resources/shift-uid.sh +0 -0
  213. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/run.py +0 -0
  214. {omdev-0.0.25 → omdev-0.0.27}/omdev/dockerdev/utils.py +0 -0
  215. {omdev-0.0.25 → omdev-0.0.27}/omdev/git/__init__.py +0 -0
  216. {omdev-0.0.25 → omdev-0.0.27}/omdev/git/magic.py +0 -0
  217. {omdev-0.0.25 → omdev-0.0.27}/omdev/git/revisions.py +0 -0
  218. {omdev-0.0.25 → omdev-0.0.27}/omdev/git/shallow.py +0 -0
  219. {omdev-0.0.25 → omdev-0.0.27}/omdev/git/status.py +0 -0
  220. {omdev-0.0.25 → omdev-0.0.27}/omdev/home/__init__.py +0 -0
  221. {omdev-0.0.25 → omdev-0.0.27}/omdev/home/__main__.py +0 -0
  222. {omdev-0.0.25 → omdev-0.0.27}/omdev/home/cli.py +0 -0
  223. {omdev-0.0.25 → omdev-0.0.27}/omdev/home/paths.py +0 -0
  224. {omdev-0.0.25 → omdev-0.0.27}/omdev/home/secrets.py +0 -0
  225. {omdev-0.0.25 → omdev-0.0.27}/omdev/home/shadow.py +0 -0
  226. {omdev-0.0.25 → omdev-0.0.27}/omdev/imgur.py +0 -0
  227. {omdev-0.0.25 → omdev-0.0.27}/omdev/intellij/__init__.py +0 -0
  228. {omdev-0.0.25 → omdev-0.0.27}/omdev/intellij/cli.py +0 -0
  229. {omdev-0.0.25 → omdev-0.0.27}/omdev/intellij/ides.py +0 -0
  230. {omdev-0.0.25 → omdev-0.0.27}/omdev/intellij/open.py +0 -0
  231. {omdev-0.0.25 → omdev-0.0.27}/omdev/interp/__init__.py +0 -0
  232. {omdev-0.0.25 → omdev-0.0.27}/omdev/interp/__main__.py +0 -0
  233. {omdev-0.0.25 → omdev-0.0.27}/omdev/interp/cli.py +0 -0
  234. {omdev-0.0.25 → omdev-0.0.27}/omdev/interp/default.py +0 -0
  235. {omdev-0.0.25 → omdev-0.0.27}/omdev/interp/inject.py +0 -0
  236. {omdev-0.0.25 → omdev-0.0.27}/omdev/interp/inspect.py +0 -0
  237. {omdev-0.0.25 → omdev-0.0.27}/omdev/interp/providers/__init__.py +0 -0
  238. {omdev-0.0.25 → omdev-0.0.27}/omdev/interp/providers/base.py +0 -0
  239. {omdev-0.0.25 → omdev-0.0.27}/omdev/interp/providers/inject.py +0 -0
  240. {omdev-0.0.25 → omdev-0.0.27}/omdev/interp/providers/running.py +0 -0
  241. {omdev-0.0.25 → omdev-0.0.27}/omdev/interp/providers/standalone.py +0 -0
  242. {omdev-0.0.25 → omdev-0.0.27}/omdev/interp/providers/system.py +0 -0
  243. {omdev-0.0.25 → omdev-0.0.27}/omdev/interp/pyenv/__init__.py +0 -0
  244. {omdev-0.0.25 → omdev-0.0.27}/omdev/interp/pyenv/inject.py +0 -0
  245. {omdev-0.0.25 → omdev-0.0.27}/omdev/interp/pyenv/install.py +0 -0
  246. {omdev-0.0.25 → omdev-0.0.27}/omdev/interp/pyenv/provider.py +0 -0
  247. {omdev-0.0.25 → omdev-0.0.27}/omdev/interp/pyenv/pyenv.py +0 -0
  248. {omdev-0.0.25 → omdev-0.0.27}/omdev/interp/resolvers.py +0 -0
  249. {omdev-0.0.25 → omdev-0.0.27}/omdev/interp/types.py +0 -0
  250. {omdev-0.0.25 → omdev-0.0.27}/omdev/interp/uv/__init__.py +0 -0
  251. {omdev-0.0.25 → omdev-0.0.27}/omdev/interp/uv/inject.py +0 -0
  252. {omdev-0.0.25 → omdev-0.0.27}/omdev/interp/uv/provider.py +0 -0
  253. {omdev-0.0.25 → omdev-0.0.27}/omdev/interp/uv/uv.py +0 -0
  254. {omdev-0.0.25 → omdev-0.0.27}/omdev/interp/venvs.py +0 -0
  255. {omdev-0.0.25 → omdev-0.0.27}/omdev/java/__init__.py +0 -0
  256. {omdev-0.0.25 → omdev-0.0.27}/omdev/java/__main__.py +0 -0
  257. {omdev-0.0.25 → omdev-0.0.27}/omdev/java/cli.py +0 -0
  258. {omdev-0.0.25 → omdev-0.0.27}/omdev/java/pomgen.py +0 -0
  259. {omdev-0.0.25 → omdev-0.0.27}/omdev/java/utils.py +0 -0
  260. {omdev-0.0.25 → omdev-0.0.27}/omdev/java/xml.py +0 -0
  261. {omdev-0.0.25 → omdev-0.0.27}/omdev/magic/__init__.py +0 -0
  262. {omdev-0.0.25 → omdev-0.0.27}/omdev/magic/__main__.py +0 -0
  263. {omdev-0.0.25 → omdev-0.0.27}/omdev/magic/cli.py +0 -0
  264. {omdev-0.0.25 → omdev-0.0.27}/omdev/magic/find.py +0 -0
  265. {omdev-0.0.25 → omdev-0.0.27}/omdev/magic/magic.py +0 -0
  266. {omdev-0.0.25 → omdev-0.0.27}/omdev/magic/prepare.py +0 -0
  267. {omdev-0.0.25 → omdev-0.0.27}/omdev/magic/styles.py +0 -0
  268. {omdev-0.0.25 → omdev-0.0.27}/omdev/manifests/__init__.py +0 -0
  269. {omdev-0.0.25 → omdev-0.0.27}/omdev/manifests/__main__.py +0 -0
  270. {omdev-0.0.25 → omdev-0.0.27}/omdev/manifests/_dumping.py +0 -0
  271. {omdev-0.0.25 → omdev-0.0.27}/omdev/manifests/building.py +0 -0
  272. {omdev-0.0.25 → omdev-0.0.27}/omdev/manifests/dumping.py +0 -0
  273. {omdev-0.0.25 → omdev-0.0.27}/omdev/manifests/main.py +0 -0
  274. {omdev-0.0.25 → omdev-0.0.27}/omdev/markdown/__init__.py +0 -0
  275. {omdev-0.0.25 → omdev-0.0.27}/omdev/markdown/incparse.py +0 -0
  276. {omdev-0.0.25 → omdev-0.0.27}/omdev/markdown/tokens.py +0 -0
  277. {omdev-0.0.25 → omdev-0.0.27}/omdev/mypy/__init__.py +0 -0
  278. {omdev-0.0.25 → omdev-0.0.27}/omdev/mypy/debug.py +0 -0
  279. {omdev-0.0.25 → omdev-0.0.27}/omdev/mypy/report.py +0 -0
  280. {omdev-0.0.25 → omdev-0.0.27}/omdev/packaging/__init__.py +0 -0
  281. {omdev-0.0.25 → omdev-0.0.27}/omdev/packaging/names.py +0 -0
  282. {omdev-0.0.25 → omdev-0.0.27}/omdev/packaging/requires.py +0 -0
  283. {omdev-0.0.25 → omdev-0.0.27}/omdev/packaging/revisions.py +0 -0
  284. {omdev-0.0.25 → omdev-0.0.27}/omdev/packaging/specifiers.py +0 -0
  285. {omdev-0.0.25 → omdev-0.0.27}/omdev/packaging/versions.py +0 -0
  286. {omdev-0.0.25 → omdev-0.0.27}/omdev/pip.py +0 -0
  287. {omdev-0.0.25 → omdev-0.0.27}/omdev/precheck/__init__.py +0 -0
  288. {omdev-0.0.25 → omdev-0.0.27}/omdev/precheck/__main__.py +0 -0
  289. {omdev-0.0.25 → omdev-0.0.27}/omdev/precheck/base.py +0 -0
  290. {omdev-0.0.25 → omdev-0.0.27}/omdev/precheck/blanklines.py +0 -0
  291. {omdev-0.0.25 → omdev-0.0.27}/omdev/precheck/caches.py +0 -0
  292. {omdev-0.0.25 → omdev-0.0.27}/omdev/precheck/git.py +0 -0
  293. {omdev-0.0.25 → omdev-0.0.27}/omdev/precheck/imports.py +0 -0
  294. {omdev-0.0.25 → omdev-0.0.27}/omdev/precheck/lite.py +0 -0
  295. {omdev-0.0.25 → omdev-0.0.27}/omdev/precheck/main.py +0 -0
  296. {omdev-0.0.25 → omdev-0.0.27}/omdev/precheck/manifests.py +0 -0
  297. {omdev-0.0.25 → omdev-0.0.27}/omdev/precheck/scripts.py +0 -0
  298. {omdev-0.0.25 → omdev-0.0.27}/omdev/precheck/unicode.py +0 -0
  299. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/__init__.py +0 -0
  300. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/asts/__init__.py +0 -0
  301. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/asts/parents.py +0 -0
  302. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/asts/toplevel.py +0 -0
  303. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/asts/visitors.py +0 -0
  304. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/attrdocs.py +0 -0
  305. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/bracepy.py +0 -0
  306. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/classdot.py +0 -0
  307. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/docstrings/LICENSE +0 -0
  308. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/docstrings/__init__.py +0 -0
  309. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/docstrings/attrdoc.py +0 -0
  310. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/docstrings/common.py +0 -0
  311. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/docstrings/epydoc.py +0 -0
  312. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/docstrings/google.py +0 -0
  313. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/docstrings/numpydoc.py +0 -0
  314. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/docstrings/parser.py +0 -0
  315. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/docstrings/rest.py +0 -0
  316. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/findimports.py +0 -0
  317. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/reprs.py +0 -0
  318. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/scripts/__init__.py +0 -0
  319. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/scripts/bumpversion.py +0 -0
  320. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/scripts/importtrace.py +0 -0
  321. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/srcheaders.py +0 -0
  322. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/tokens/__init__.py +0 -0
  323. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/tokens/all.py +0 -0
  324. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/tokens/tokenizert.py +0 -0
  325. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/tokens/utils.py +0 -0
  326. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/tools/__init__.py +0 -0
  327. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/tools/fixdocstrings.py +0 -0
  328. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/tools/importscan.py +0 -0
  329. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/tools/mkrelimp.py +0 -0
  330. {omdev-0.0.25 → omdev-0.0.27}/omdev/py/tools/pipdepup.py +0 -0
  331. {omdev-0.0.25 → omdev-0.0.27}/omdev/py.typed +0 -0
  332. {omdev-0.0.25 → omdev-0.0.27}/omdev/pyproject/__init__.py +0 -0
  333. {omdev-0.0.25 → omdev-0.0.27}/omdev/pyproject/__main__.py +0 -0
  334. {omdev-0.0.25 → omdev-0.0.27}/omdev/pyproject/cli.py +0 -0
  335. {omdev-0.0.25 → omdev-0.0.27}/omdev/pyproject/configs.py +0 -0
  336. {omdev-0.0.25 → omdev-0.0.27}/omdev/pyproject/inject.py +0 -0
  337. {omdev-0.0.25 → omdev-0.0.27}/omdev/pyproject/pkg.py +0 -0
  338. {omdev-0.0.25 → omdev-0.0.27}/omdev/pyproject/reqs.py +0 -0
  339. {omdev-0.0.25 → omdev-0.0.27}/omdev/pyproject/resources/dockerdev.sh +0 -0
  340. {omdev-0.0.25 → omdev-0.0.27}/omdev/pyproject/resources/python.sh +0 -0
  341. {omdev-0.0.25 → omdev-0.0.27}/omdev/pyproject/tools/__init__.py +0 -0
  342. {omdev-0.0.25 → omdev-0.0.27}/omdev/pyproject/tools/aboutdeps.py +0 -0
  343. {omdev-0.0.25 → omdev-0.0.27}/omdev/pyproject/tools/buildrs.py +0 -0
  344. {omdev-0.0.25 → omdev-0.0.27}/omdev/pyproject/tools/pyversions.py +0 -0
  345. {omdev-0.0.25 → omdev-0.0.27}/omdev/pyproject/venvs.py +0 -0
  346. {omdev-0.0.25 → omdev-0.0.27}/omdev/pyproject/versions.py +0 -0
  347. {omdev-0.0.25 → omdev-0.0.27}/omdev/rs/__init__.py +0 -0
  348. {omdev-0.0.25 → omdev-0.0.27}/omdev/scripts/__init__.py +0 -0
  349. {omdev-0.0.25 → omdev-0.0.27}/omdev/scripts/lib/__init__.py +0 -0
  350. {omdev-0.0.25 → omdev-0.0.27}/omdev/scripts/lib/formats/__init__.py +0 -0
  351. {omdev-0.0.25 → omdev-0.0.27}/omdev/scripts/lib/formats/goyaml.py +0 -0
  352. {omdev-0.0.25 → omdev-0.0.27}/omdev/scripts/lib/inject.py +0 -0
  353. {omdev-0.0.25 → omdev-0.0.27}/omdev/scripts/lib/io/__init__.py +0 -0
  354. {omdev-0.0.25 → omdev-0.0.27}/omdev/scripts/lib/logs.py +0 -0
  355. {omdev-0.0.25 → omdev-0.0.27}/omdev/scripts/lib/marshal.py +0 -0
  356. {omdev-0.0.25 → omdev-0.0.27}/omdev/scripts/slowcat.py +0 -0
  357. {omdev-0.0.25 → omdev-0.0.27}/omdev/scripts/tmpexec.py +0 -0
  358. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/__init__.py +0 -0
  359. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/irc/__init__.py +0 -0
  360. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/irc/messages/__init__.py +0 -0
  361. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/irc/messages/base.py +0 -0
  362. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/irc/messages/formats.py +0 -0
  363. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/irc/messages/messages.py +0 -0
  364. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/irc/messages/parsing.py +0 -0
  365. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/irc/numerics/__init__.py +0 -0
  366. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/irc/numerics/formats.py +0 -0
  367. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/irc/numerics/numerics.py +0 -0
  368. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/irc/numerics/types.py +0 -0
  369. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/irc/protocol/LICENSE +0 -0
  370. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/irc/protocol/__init__.py +0 -0
  371. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/irc/protocol/consts.py +0 -0
  372. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/irc/protocol/errors.py +0 -0
  373. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/irc/protocol/message.py +0 -0
  374. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/irc/protocol/nuh.py +0 -0
  375. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/irc/protocol/parsing.py +0 -0
  376. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/irc/protocol/rendering.py +0 -0
  377. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/irc/protocol/tags.py +0 -0
  378. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/irc/protocol/utils.py +0 -0
  379. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/jsonschema/__init__.py +0 -0
  380. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/jsonschema/codegen/__init__.py +0 -0
  381. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/jsonschema/codegen/__main__.py +0 -0
  382. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/jsonschema/codegen/analysis.py +0 -0
  383. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/jsonschema/codegen/cli.py +0 -0
  384. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/jsonschema/codegen/config.py +0 -0
  385. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/jsonschema/codegen/errors.py +0 -0
  386. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/jsonschema/codegen/generator.py +0 -0
  387. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/jsonschema/codegen/ir.py +0 -0
  388. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/jsonschema/codegen/names.py +0 -0
  389. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/jsonschema/codegen/rendering.py +0 -0
  390. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/jsonschema/codegen/transforms.py +0 -0
  391. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/jsonschema/codegen/typing.py +0 -0
  392. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/oci/__init__.py +0 -0
  393. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/oci/building.py +0 -0
  394. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/oci/compression.py +0 -0
  395. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/oci/data.py +0 -0
  396. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/oci/datarefs.py +0 -0
  397. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/oci/dataserver.py +0 -0
  398. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/oci/loading.py +0 -0
  399. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/oci/media.py +0 -0
  400. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/oci/pack/__init__.py +0 -0
  401. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/oci/pack/packing.py +0 -0
  402. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/oci/pack/repositories.py +0 -0
  403. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/oci/pack/unpacking.py +0 -0
  404. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/oci/repositories.py +0 -0
  405. {omdev-0.0.25 → omdev-0.0.27}/omdev/specs/oci/tars.py +0 -0
  406. {omdev-0.0.25 → omdev-0.0.27}/omdev/tagstrings.py +0 -0
  407. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/__init__.py +0 -0
  408. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/cloc.py +0 -0
  409. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/diff.py +0 -0
  410. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/doc.py +0 -0
  411. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/docker.py +0 -0
  412. {omdev-0.0.25/omdev/supervisor → omdev-0.0.27/omdev/tools/git}/__init__.py +0 -0
  413. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/git/__main__.py +0 -0
  414. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/git/cli.py +0 -0
  415. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/git/cloning.py +0 -0
  416. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/git/consts.py +0 -0
  417. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/git/messages.py +0 -0
  418. {omdev-0.0.25/omdev/tools/git → omdev-0.0.27/omdev/tools/json}/__init__.py +0 -0
  419. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/json/__main__.py +0 -0
  420. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/json/cli.py +0 -0
  421. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/json/formats.py +0 -0
  422. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/json/io.py +0 -0
  423. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/json/processing.py +0 -0
  424. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/json/rendering.py +0 -0
  425. {omdev-0.0.25/omdev/tools/json → omdev-0.0.27/omdev/tools/jsonview}/__init__.py +0 -0
  426. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/jsonview/__main__.py +0 -0
  427. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/jsonview/cli.py +0 -0
  428. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/jsonview/resources/jsonview.css +0 -0
  429. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/jsonview/resources/jsonview.html.j2 +0 -0
  430. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/jsonview/resources/jsonview.js +0 -0
  431. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/linehisto.py +0 -0
  432. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/mkenv.py +0 -0
  433. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/notebook.py +0 -0
  434. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/pawk/README.md +0 -0
  435. {omdev-0.0.25/omdev/tools/jsonview → omdev-0.0.27/omdev/tools/pawk}/__init__.py +0 -0
  436. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/pawk/__main__.py +0 -0
  437. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/pawk/pawk.py +0 -0
  438. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/pip.py +0 -0
  439. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/prof.py +0 -0
  440. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/qr.py +0 -0
  441. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/shadow.py +0 -0
  442. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/shell.py +0 -0
  443. {omdev-0.0.25 → omdev-0.0.27}/omdev/tools/sqlrepl.py +0 -0
  444. {omdev-0.0.25/omdev/tools/pawk → omdev-0.0.27/omdev/tui}/__init__.py +0 -0
  445. {omdev-0.0.25/omdev/tui → omdev-0.0.27/omdev/tui/apps}/__init__.py +0 -0
  446. {omdev-0.0.25/omdev/tui/apps → omdev-0.0.27/omdev/tui/apps/edit}/__init__.py +0 -0
  447. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/apps/edit/main.py +0 -0
  448. {omdev-0.0.25/omdev/tui/apps/edit → omdev-0.0.27/omdev/tui/apps/irc}/__init__.py +0 -0
  449. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/apps/irc/__main__.py +0 -0
  450. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/apps/irc/app.py +0 -0
  451. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/apps/irc/client.py +0 -0
  452. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/apps/irc/commands.py +0 -0
  453. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/apps/irc/main.py +0 -0
  454. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/apps/jtree/LICENSE +0 -0
  455. {omdev-0.0.25/omdev/tui/apps/irc → omdev-0.0.27/omdev/tui/apps/jtree}/__init__.py +0 -0
  456. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/apps/jtree/__main__.py +0 -0
  457. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/apps/jtree/app.py +0 -0
  458. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/apps/jtree/cli.py +0 -0
  459. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/apps/jtree/styles/layout.tcss +0 -0
  460. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/apps/jtree/utils.py +0 -0
  461. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/apps/jtree/widgets.py +0 -0
  462. {omdev-0.0.25/omdev/tui/apps/jtree → omdev-0.0.27/omdev/tui/apps/markdown}/__init__.py +0 -0
  463. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/apps/markdown/__main__.py +0 -0
  464. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/apps/markdown/cli.py +0 -0
  465. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/rich/__init__.py +0 -0
  466. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/rich/console2.py +0 -0
  467. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/rich/diff/LICENSE +0 -0
  468. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/rich/diff/__init__.py +0 -0
  469. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/rich/diff/__main__.py +0 -0
  470. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/rich/diff/_compat.py +0 -0
  471. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/rich/diff/cli.py +0 -0
  472. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/rich/diff/renderables.py +0 -0
  473. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/rich/diff/rendering.py +0 -0
  474. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/rich/diff/underlinebar.py +0 -0
  475. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/rich/markdown2.py +0 -0
  476. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/rich/textual/__init__.py +0 -0
  477. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/rich/textual/dark.py +0 -0
  478. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/rich/textual/dump.py +0 -0
  479. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/rich/textual/themes.py +0 -0
  480. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/rich/trirule.py +0 -0
  481. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/__init__.py +0 -0
  482. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/actionmenu.py +0 -0
  483. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/altdevtools/LICENSE +0 -0
  484. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/altdevtools/__init__.py +0 -0
  485. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/altdevtools/client.py +0 -0
  486. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/altdevtools/previews/__init__.py +0 -0
  487. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/altdevtools/previews/borders.py +0 -0
  488. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/altdevtools/previews/colors.py +0 -0
  489. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/altdevtools/previews/colors.tcss +0 -0
  490. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/altdevtools/previews/easing.py +0 -0
  491. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/altdevtools/previews/easing.tcss +0 -0
  492. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/altdevtools/previews/keys.py +0 -0
  493. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/altdevtools/protocol.py +0 -0
  494. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/altdevtools/redirect_output.py +0 -0
  495. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/altdevtools/renderables.py +0 -0
  496. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/altdevtools/server.py +0 -0
  497. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/altdevtools/service.py +0 -0
  498. {omdev-0.0.25/omdev/tui/apps/markdown → omdev-0.0.27/omdev/tui/textual/altdevtools/tools}/__init__.py +0 -0
  499. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/altdevtools/tools/diagnose.py +0 -0
  500. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/app2.py +0 -0
  501. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/autocomplete/LICENSE +0 -0
  502. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/autocomplete/__init__.py +0 -0
  503. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/autocomplete/matching.py +0 -0
  504. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/autocomplete/paths.py +0 -0
  505. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/autocomplete/widget.py +0 -0
  506. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/binding2.py +0 -0
  507. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/clipboard.py +0 -0
  508. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/debug/__init__.py +0 -0
  509. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/debug/dominfo.py +0 -0
  510. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/debug/screen.py +0 -0
  511. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/devtools.py +0 -0
  512. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/dom2.py +0 -0
  513. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/drivers2.py +0 -0
  514. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/logging2.py +0 -0
  515. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/render2.py +0 -0
  516. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/screen2.py +0 -0
  517. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/types.py +0 -0
  518. {omdev-0.0.25 → omdev-0.0.27}/omdev/tui/textual/widgets2.py +0 -0
  519. {omdev-0.0.25 → omdev-0.0.27}/omdev.egg-info/dependency_links.txt +0 -0
  520. {omdev-0.0.25 → omdev-0.0.27}/omdev.egg-info/entry_points.txt +0 -0
  521. {omdev-0.0.25 → omdev-0.0.27}/omdev.egg-info/top_level.txt +0 -0
  522. {omdev-0.0.25 → omdev-0.0.27}/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.27
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.27
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.27; extra == "all"
20
+ Requires-Dist: omllm==0.0.27; 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.3; 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"
37
- Provides-Extra: ommlds
38
- Requires-Dist: ommlds==0.0.25; extra == "ommlds"
36
+ Requires-Dist: ominfra==0.0.27; extra == "ominfra"
37
+ Provides-Extra: omllm
38
+ Requires-Dist: omllm==0.0.27; extra == "omllm"
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.3; extra == "mypy"
51
51
  Provides-Extra: prof
52
52
  Requires-Dist: gprof2dot~=2025.4; extra == "prof"
53
53
  Provides-Extra: qr
@@ -339,20 +339,6 @@
339
339
  }
340
340
  }
341
341
  },
342
- {
343
- "module": ".supervisor.__main__",
344
- "attr": "_CLI_MODULE",
345
- "file": "omdev/supervisor/__main__.py",
346
- "line": 4,
347
- "value": {
348
- "!.cli.types.CliModule": {
349
- "name": [
350
- "supervisor"
351
- ],
352
- "module": "omdev.supervisor.__main__"
353
- }
354
- }
355
- },
356
342
  {
357
343
  "module": ".tools.cloc",
358
344
  "attr": "_CLI_MODULE",
@@ -16,8 +16,8 @@ class Project(ProjectBase):
16
16
  f'ominfra == {__version__}',
17
17
  ],
18
18
 
19
- 'ommlds': [
20
- f'ommlds == {__version__}',
19
+ 'omllm': [
20
+ f'omllm == {__version__}',
21
21
  ],
22
22
 
23
23
  #
@@ -41,7 +41,7 @@ class Project(ProjectBase):
41
41
  ],
42
42
 
43
43
  'mypy': [
44
- 'mypy ~= 2.1',
44
+ 'mypy ~= 2.3',
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:
@@ -101,9 +101,9 @@ def __omlish_amalg__(): # noqa
101
101
  dict(path='../../omlish/http/urllib.py', sha1='25431c5bdc7dd5cbecfcb8c0bdffaabf8c1691b9'),
102
102
  dict(path='../../omlish/http/versions.py', sha1='5b1659b81eb197c6880fbe78684a1348595ec804'),
103
103
  dict(path='../../omlish/io/pipelines/errors.py', sha1='231f62c44c201a261f2a781bcc0060e997ecf33c'),
104
- dict(path='../../omlish/io/streams/errors.py', sha1='67ca85fd8741b5bfefe76c872ce1c30c18fab06f'),
104
+ dict(path='../../omlish/io/streambufs/errors.py', sha1='67ca85fd8741b5bfefe76c872ce1c30c18fab06f'),
105
105
  dict(path='../../omlish/lite/abstract.py', sha1='a2fc3f3697fa8de5247761e9d554e70176f37aac'),
106
- dict(path='../../omlish/lite/asyncs.py', sha1='b3f2251c56617ce548abf9c333ac996b63edb23e'),
106
+ dict(path='../../omlish/lite/asyncs.py', sha1='6bd4b8ecc310ac1df19bafaf6eb85a1a284f65d5'),
107
107
  dict(path='../../omlish/lite/bytes.py', sha1='b1833c50941b1177ed8e8c267259f7de7dbf1b96'),
108
108
  dict(path='../../omlish/lite/cached.py', sha1='0c33cf961ac8f0727284303c7a30c5ea98f714f2'),
109
109
  dict(path='../../omlish/lite/check.py', sha1='62b9ccea94c4f7bcef97e7adae8674b8cb11d4af'),
@@ -134,10 +134,10 @@ 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
- dict(path='../../omlish/io/streams/types.py', sha1='6a3167bf66a0a8817e19115b9c31973b2ff77788'),
140
+ dict(path='../../omlish/io/streambufs/types.py', sha1='6a3167bf66a0a8817e19115b9c31973b2ff77788'),
141
141
  dict(path='../../omlish/lite/json.py', sha1='01124e62093ebd4078602f16df0ec04cb724a612'),
142
142
  dict(path='../../omlish/lite/marshal.py', sha1='66bc88d705df274e9fa1168d2aab20c7e3935cf6'),
143
143
  dict(path='../../omlish/lite/maybes.py', sha1='5ac5f92e5610c6795b0a228c38e7bcd272bf6305'),
@@ -163,11 +163,11 @@ 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
- dict(path='../../omlish/io/streams/base.py', sha1='bdeaff419684dec34fd0dc59808a9686131992bc'),
169
- dict(path='../../omlish/io/streams/framing.py', sha1='dc2d7f638b042619fd3d95789c71532a29fd5fe4'),
170
- dict(path='../../omlish/io/streams/utils.py', sha1='5162329f6dc70d88a94c743bae4ea19dec6fcea7'),
168
+ dict(path='../../omlish/io/streambufs/base.py', sha1='bdeaff419684dec34fd0dc59808a9686131992bc'),
169
+ dict(path='../../omlish/io/streambufs/framing.py', sha1='dc2d7f638b042619fd3d95789c71532a29fd5fe4'),
170
+ dict(path='../../omlish/io/streambufs/utils.py', sha1='5162329f6dc70d88a94c743bae4ea19dec6fcea7'),
171
171
  dict(path='../../omlish/lite/inject.py', sha1='172296edc98b32e51fdaa44ccc0a05b56e94f3ba'),
172
172
  dict(path='../../omlish/logs/contexts.py', sha1='2f5881193a0c19c89c399ab0e0b5072c4048a60c'),
173
173
  dict(path='../../omlish/logs/std/json.py', sha1='2a75553131e4d5331bb0cedde42aa183f403fc3b'),
@@ -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'),
@@ -185,15 +185,15 @@ def __omlish_amalg__(): # noqa
185
185
  dict(path='../../omlish/formats/yaml/goyaml/ast.py', sha1='5ae8fa62a717986ac45024d5988b626850ed1786'),
186
186
  dict(path='../../omlish/formats/yaml/goyaml/scanning.py', sha1='9c7bb51121f85ac499f8f907fbc3ce20a07f3e1d'),
187
187
  dict(path='../../omlish/http/pipelines/chunking.py', sha1='7e25a89726210c96b93b4d1c676fdd8347ba82c5'),
188
- dict(path='../../omlish/http/pipelines/compression/compressors.py', sha1='fda7c252cec85e4c895b905d1e4dd4063e29db1a'), # noqa
189
- dict(path='../../omlish/http/pipelines/compression/decompressors.py', sha1='f263936305f7be5085c6a5f2782ae734bf221813'), # noqa
188
+ dict(path='../../omlish/http/pipelines/compression/compressors.py', sha1='0abf43a23ccd37537eb225f98ec0058026ce28b7'), # noqa
189
+ dict(path='../../omlish/http/pipelines/compression/decompressors.py', sha1='650380a2bad2ee5cdbe92088b7f606709095bcb5'), # noqa
190
190
  dict(path='../../omlish/http/pipelines/encoders.py', sha1='fdcc3953e2a7f9ba4c1fddba9c365da113c77b45'),
191
191
  dict(path='../../omlish/http/pipelines/requests.py', sha1='a0115429e52527073df8638f692aeca95803d3a7'),
192
192
  dict(path='../../omlish/http/pipelines/responses.py', sha1='49c0a85b1fb7571dc52e0362f2b9eb68a2a4ee34'),
193
193
  dict(path='../../omlish/http/simple/handlers.py', sha1='f15e127ac962f4577e06adfdb3c05a19fa896e89'),
194
194
  dict(path='../../omlish/io/pipelines/handlers/decoders.py', sha1='c7a5db7b3989f8b5c952e255f9e6c8fc91fa6236'), # noqa
195
- dict(path='../../omlish/io/streams/direct.py', sha1='8f031ad9167bef9a359f9859f234751dd9823a8c'),
196
- dict(path='../../omlish/io/streams/scanning.py', sha1='33a75b7c6fee3d0a3f06dd86a03e83d2027e0f77'),
195
+ dict(path='../../omlish/io/streambufs/direct.py', sha1='8f031ad9167bef9a359f9859f234751dd9823a8c'),
196
+ dict(path='../../omlish/io/streambufs/scanning.py', sha1='33a75b7c6fee3d0a3f06dd86a03e83d2027e0f77'),
197
197
  dict(path='../../omlish/logs/base.py', sha1='76bd4fff7a943cfdf0f992fb14d0cb7d89fc3fc6'),
198
198
  dict(path='../../omlish/logs/std/records.py', sha1='67e552537d9268d4df6939b8a92be885fda35238'),
199
199
  dict(path='../../omlish/logs/std/standard.py', sha1='472f1f0623d6bcd301612551432afa7e3a661a34'),
@@ -205,7 +205,7 @@ def __omlish_amalg__(): # noqa
205
205
  dict(path='../specs/oci/loading.py', sha1='64d806ffad8d24087ccc29f759f672e6d795bee2'),
206
206
  dict(path='../../omlish/formats/yaml/goyaml/parsing.py', sha1='78c28c2b865c57077b071543361920db142242d0'),
207
207
  dict(path='../../omlish/http/pipelines/servers/responses.py', sha1='d2bc2464c242a7206edc015a7d9c88a7e21802ed'), # noqa
208
- dict(path='../../omlish/io/streams/segmented.py', sha1='9bd6ccc359c933d113d97324d1dde6b6924066dc'),
208
+ dict(path='../../omlish/io/streambufs/segmented.py', sha1='9bd6ccc359c933d113d97324d1dde6b6924066dc'),
209
209
  dict(path='../../omlish/logs/asyncs.py', sha1='8376df395029a9d0957e2338adede895a9364215'),
210
210
  dict(path='../../omlish/logs/std/loggers.py', sha1='dbdfc66188e6accb75d03454e43221d3fba0f011'),
211
211
  dict(path='../../omlish/subprocesses/asyncs.py', sha1='bba44d524c24c6ac73168aee6343488414e5bf48'),
@@ -214,14 +214,14 @@ def __omlish_amalg__(): # noqa
214
214
  dict(path='../specs/oci/dataserver.py', sha1='49c8cde4810c4185a57696e84ce933978a3ed3a1'),
215
215
  dict(path='../../omlish/asyncs/asyncio/subprocesses.py', sha1='b6b5f9ae3fd0b9c83593bad2e04a08f726e5904d'),
216
216
  dict(path='../../omlish/formats/yaml/goyaml/decoding.py', sha1='5047d6c283348c2cd4265c955bb94651e971addd'),
217
- dict(path='../../omlish/http/pipelines/aggregators.py', sha1='680f486f4a17e02746dbb8f05794fc39a978315d'),
218
- dict(path='../../omlish/io/pipelines/bytes/decoders.py', sha1='e49b17ece8aa2e006a6d92158628e2dc671e21f1'),
217
+ dict(path='../../omlish/http/pipelines/aggregators.py', sha1='dbffeb4a48b42edafea05abe1123b5e9862511bb'),
218
+ dict(path='../../omlish/io/pipelines/bytes/decoders.py', sha1='ed307472f3d443f38eb33c66e0cdde9f9f1f7a00'),
219
219
  dict(path='../../omlish/logs/modules.py', sha1='dd7d5f8e63fe8829dfb49460f3929ab64b68ee14'),
220
220
  dict(path='cache.py', sha1='9353e5c3b73bed47258680fd15ac49417113f0ca'),
221
221
  dict(path='docker/cmds.py', sha1='5528c384f68f9003732bfaf6be302e84747909dd'),
222
222
  dict(path='utils.py', sha1='b7b7b439b1077771f2bd7c7c74ed422ea2663014'),
223
- dict(path='../../omlish/http/pipelines/decoders.py', sha1='953c4d8f9121097c3aa8b59ad10eb4a61481824a'),
224
- dict(path='../../omlish/io/pipelines/drivers/sync.py', sha1='005f8130f95ea097f19144fc1df898fffefbaa79'),
223
+ dict(path='../../omlish/http/pipelines/decoders.py', sha1='d13e61a6e4ed6824b552b7b8dc3818eba43a6ce6'),
224
+ dict(path='../../omlish/io/pipelines/drivers/sync.py', sha1='a276abbb87270f8fc9c18685866b17c5f6415e32'),
225
225
  dict(path='../../omlish/lite/timing.py', sha1='af5022f5a508939f1b433ed0514ede340fd0d672'),
226
226
  dict(path='compose.py', sha1='d2bec1385701979c7ff9913456b72d8c7b31f70b'),
227
227
  dict(path='docker/cache.py', sha1='1c30c907c44e7cc12cd985ccb88b1f6b65558899'),
@@ -236,7 +236,7 @@ def __omlish_amalg__(): # noqa
236
236
  dict(path='docker/imagepulling.py', sha1='d6b1ca1ecb9aa5c593a25e6deb78e942c75ebcb4'),
237
237
  dict(path='github/api/v1/client.py', sha1='6ddd600cd8a7ff72a6a3408ded14240bafab6944'),
238
238
  dict(path='github/api/v2/client.py', sha1='e28f27c07011487d5a3f4ae32fdfa1a857d02459'),
239
- dict(path='../../omlish/http/simple/pipelines/handlers.py', sha1='07c3ae396dda6334afe4310aa4077b4784988a63'), # noqa
239
+ dict(path='../../omlish/http/simple/pipelines/handlers.py', sha1='78f2e8f745cc126e57ff3bf65189a7144d4150bb'), # noqa
240
240
  dict(path='ci.py', sha1='87b82e2bd86aa886764f1e0067251b056e359650'),
241
241
  dict(path='github/cache.py', sha1='d91f9c87d167574e94c99817e6c3a0f75925dfb9'),
242
242
  dict(path='github/cli.py', sha1='4f63c026d5d00b04a579ee9186a6264094eeae9d'),
@@ -345,7 +345,7 @@ AwaitableT = ta.TypeVar('AwaitableT', bound=ta.Awaitable)
345
345
  SimpleHttpHandler = ta.Callable[['SimpleHttpHandlerRequest'], 'SimpleHttpHandlerResponse'] # ta.TypeAlias
346
346
  SimpleHttpHandlerResponseData = ta.Union[Bytes, 'SimpleHttpHandlerResponseStreamedData'] # ta.TypeAlias # noqa
347
347
 
348
- # ../../omlish/io/streams/utils.py
348
+ # ../../omlish/io/streambufs/utils.py
349
349
  CanByteStreamBuffer = ta.Union[BytesLike, 'ByteStreamBufferLike'] # ta.TypeAlias
350
350
 
351
351
  # ../../omlish/lite/inject.py
@@ -957,7 +957,7 @@ class FlowControlValidationIoPipelineError(IoPipelineError):
957
957
 
958
958
 
959
959
  ########################################
960
- # ../../../omlish/io/streams/errors.py
960
+ # ../../../omlish/io/streambufs/errors.py
961
961
 
962
962
 
963
963
  ##
@@ -1227,7 +1227,7 @@ def sync_await(aw: ta.Awaitable[T]) -> T:
1227
1227
  except StopIteration:
1228
1228
  pass
1229
1229
 
1230
- if ret is missing or cr.cr_await is not None or cr.cr_running:
1230
+ if ret is missing or cr.cr_await is not None or cr.cr_running: # type: ignore[attr-defined]
1231
1231
  raise SyncAwaitCoroutineNotTerminatedError('Not terminated')
1232
1232
 
1233
1233
  finally:
@@ -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
 
@@ -8681,7 +8697,7 @@ class IoPipeline:
8681
8697
 
8682
8698
 
8683
8699
  ########################################
8684
- # ../../../omlish/io/streams/types.py
8700
+ # ../../../omlish/io/streambufs/types.py
8685
8701
 
8686
8702
 
8687
8703
  ##
@@ -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
  ##
@@ -13631,7 +13658,7 @@ class IoPipelineScheduling(Abstract):
13631
13658
 
13632
13659
 
13633
13660
  ########################################
13634
- # ../../../omlish/io/streams/base.py
13661
+ # ../../../omlish/io/streambufs/base.py
13635
13662
 
13636
13663
 
13637
13664
  ##
@@ -13644,7 +13671,7 @@ class BaseByteStreamBufferLike(ByteStreamBufferLike, Abstract):
13644
13671
 
13645
13672
 
13646
13673
  ########################################
13647
- # ../../../omlish/io/streams/framing.py
13674
+ # ../../../omlish/io/streambufs/framing.py
13648
13675
 
13649
13676
 
13650
13677
  ##
@@ -13979,7 +14006,7 @@ class LengthFieldByteStreamFrameDecoder:
13979
14006
 
13980
14007
 
13981
14008
  ########################################
13982
- # ../../../omlish/io/streams/utils.py
14009
+ # ../../../omlish/io/streambufs/utils.py
13983
14010
 
13984
14011
 
13985
14012
  ##
@@ -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
@@ -22127,7 +22136,7 @@ class FnMessageToMessageDecoderIoPipelineHandler(MessageToMessageDecoderIoPipeli
22127
22136
 
22128
22137
 
22129
22138
  ########################################
22130
- # ../../../omlish/io/streams/direct.py
22139
+ # ../../../omlish/io/streambufs/direct.py
22131
22140
 
22132
22141
 
22133
22142
  ##
@@ -22294,7 +22303,7 @@ def empty_byte_stream_buffer_view() -> ByteStreamBufferView:
22294
22303
 
22295
22304
 
22296
22305
  ########################################
22297
- # ../../../omlish/io/streams/scanning.py
22306
+ # ../../../omlish/io/streambufs/scanning.py
22298
22307
 
22299
22308
 
22300
22309
  ##
@@ -26697,7 +26706,7 @@ class IoPipelineHttpResponseCompressor(IoPipelineHttpResponseObjects, IoPipeline
26697
26706
 
26698
26707
 
26699
26708
  ########################################
26700
- # ../../../omlish/io/streams/segmented.py
26709
+ # ../../../omlish/io/streambufs/segmented.py
26701
26710
 
26702
26711
 
26703
26712
  ##
@@ -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