omdev 0.0.0.dev539__tar.gz → 0.0.0.dev540__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 (447) hide show
  1. {omdev-0.0.0.dev539/omdev.egg-info → omdev-0.0.0.dev540}/PKG-INFO +2 -2
  2. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/cli.py +37 -13
  3. omdev-0.0.0.dev540/omdev/dockerdev/config.py +33 -0
  4. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/config.toml +9 -0
  5. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/gen.py +6 -29
  6. omdev-0.0.0.dev540/omdev/dockerdev/resources/fragments/uv.sh +7 -0
  7. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/scripts/lib/io/pipelines.py +8 -9
  8. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/rich/markdown2.py +36 -11
  9. omdev-0.0.0.dev540/omdev/tui/rich/textual/__init__.py +12 -0
  10. omdev-0.0.0.dev540/omdev/tui/rich/textual/dark.py +108 -0
  11. omdev-0.0.0.dev540/omdev/tui/rich/textual/dump.py +239 -0
  12. omdev-0.0.0.dev540/omdev/tui/rich/textual/themes.py +222 -0
  13. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/textual/__init__.py +1 -0
  14. omdev-0.0.0.dev540/omdev/tui/textual/widgets2.py +54 -0
  15. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540/omdev.egg-info}/PKG-INFO +2 -2
  16. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev.egg-info/SOURCES.txt +5 -0
  17. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev.egg-info/requires.txt +1 -1
  18. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/pyproject.toml +2 -2
  19. omdev-0.0.0.dev539/omdev/dockerdev/resources/fragments/uv.sh +0 -3
  20. omdev-0.0.0.dev539/omdev/tui/textual/widgets2.py +0 -24
  21. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/LICENSE +0 -0
  22. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/MANIFEST.in +0 -0
  23. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/README.md +0 -0
  24. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/.omlish-manifests.json +0 -0
  25. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/README.md +0 -0
  26. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/__about__.py +0 -0
  27. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/__init__.py +0 -0
  28. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/amalg/__init__.py +0 -0
  29. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/amalg/__main__.py +0 -0
  30. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/amalg/cli/__init__.py +0 -0
  31. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/amalg/cli/main.py +0 -0
  32. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/amalg/gen/__init__.py +0 -0
  33. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/amalg/gen/gen.py +0 -0
  34. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/amalg/gen/imports.py +0 -0
  35. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/amalg/gen/manifests.py +0 -0
  36. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/amalg/gen/resources.py +0 -0
  37. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/amalg/gen/srcfiles.py +0 -0
  38. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/amalg/gen/strip.py +0 -0
  39. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/amalg/gen/types.py +0 -0
  40. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/amalg/gen/typing.py +0 -0
  41. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/amalg/info.py +0 -0
  42. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/amalg/sources.py +0 -0
  43. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cache/__init__.py +0 -0
  44. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cache/compute/__init__.py +0 -0
  45. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cache/compute/cache.py +0 -0
  46. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cache/compute/contexts.py +0 -0
  47. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cache/compute/currents.py +0 -0
  48. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cache/compute/fns.py +0 -0
  49. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cache/compute/resolvers.py +0 -0
  50. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cache/compute/storage.py +0 -0
  51. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cache/compute/types.py +0 -0
  52. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cache/data/__init__.py +0 -0
  53. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cache/data/actions.py +0 -0
  54. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cache/data/cache.py +0 -0
  55. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cache/data/consts.py +0 -0
  56. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cache/data/defaults.py +0 -0
  57. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cache/data/manifests.py +0 -0
  58. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cache/data/specs.py +0 -0
  59. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/capi/__init__.py +0 -0
  60. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/capi/darwin/__init__.py +0 -0
  61. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/capi/darwin/aps.py +0 -0
  62. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/capi/darwin/ax.py +0 -0
  63. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/capi/darwin/cf.py +0 -0
  64. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/capi/darwin/cg.py +0 -0
  65. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/capi/linux/__init__.py +0 -0
  66. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/capi/linux/x11.py +0 -0
  67. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cc/__init__.py +0 -0
  68. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cc/__main__.py +0 -0
  69. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cc/cdeps.py +0 -0
  70. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cc/cdeps.toml +0 -0
  71. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cc/cli.py +0 -0
  72. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cc/srclangs.py +0 -0
  73. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cexts/__init__.py +0 -0
  74. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cexts/_boilerplate.cc +0 -0
  75. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cexts/_distutils/LICENSE +0 -0
  76. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cexts/_distutils/__init__.py +0 -0
  77. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cexts/_distutils/build_ext.py +0 -0
  78. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  79. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  80. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cexts/_distutils/compilers/options.py +0 -0
  81. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  82. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cexts/_distutils/dir_util.py +0 -0
  83. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cexts/_distutils/errors.py +0 -0
  84. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cexts/_distutils/extension.py +0 -0
  85. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cexts/_distutils/file_util.py +0 -0
  86. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cexts/_distutils/modified.py +0 -0
  87. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cexts/_distutils/spawn.py +0 -0
  88. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cexts/_distutils/sysconfig.py +0 -0
  89. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cexts/_distutils/util.py +0 -0
  90. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cexts/_distutils/version.py +0 -0
  91. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cexts/build.py +0 -0
  92. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cexts/cmake.py +0 -0
  93. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cexts/importhook.py +0 -0
  94. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cexts/magic.py +0 -0
  95. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cexts/scan.py +0 -0
  96. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/__init__.py +0 -0
  97. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/__main__.py +0 -0
  98. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/cache.py +0 -0
  99. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/ci.py +0 -0
  100. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/cli.py +0 -0
  101. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/compose.py +0 -0
  102. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/consts.py +0 -0
  103. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/docker/__init__.py +0 -0
  104. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/docker/buildcaching.py +0 -0
  105. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/docker/cache.py +0 -0
  106. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/docker/cacheserved/__init__.py +0 -0
  107. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/docker/cacheserved/cache.py +0 -0
  108. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/docker/cacheserved/manifests.py +0 -0
  109. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/docker/cmds.py +0 -0
  110. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/docker/dataserver.py +0 -0
  111. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/docker/imagepulling.py +0 -0
  112. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/docker/inject.py +0 -0
  113. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/docker/packing.py +0 -0
  114. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/docker/repositories.py +0 -0
  115. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/docker/utils.py +0 -0
  116. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/github/__init__.py +0 -0
  117. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/github/api/__init__.py +0 -0
  118. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/github/api/clients.py +0 -0
  119. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/github/api/v1/__init__.py +0 -0
  120. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/github/api/v1/api.py +0 -0
  121. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/github/api/v1/client.py +0 -0
  122. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/github/api/v2/__init__.py +0 -0
  123. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/github/api/v2/api.py +0 -0
  124. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/github/api/v2/azure.py +0 -0
  125. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/github/api/v2/client.py +0 -0
  126. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/github/bootstrap.py +0 -0
  127. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/github/cache.py +0 -0
  128. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/github/cli.py +0 -0
  129. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/github/env.py +0 -0
  130. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/github/inject.py +0 -0
  131. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/inject.py +0 -0
  132. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/requirements.py +0 -0
  133. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/shell.py +0 -0
  134. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/ci/utils.py +0 -0
  135. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cli/__init__.py +0 -0
  136. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cli/__main__.py +0 -0
  137. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cli/_pathhack.py +0 -0
  138. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cli/clicli.py +0 -0
  139. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cli/install.py +0 -0
  140. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cli/main.py +0 -0
  141. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cli/managers.py +0 -0
  142. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cli/types.py +0 -0
  143. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/clipboard/__init__.py +0 -0
  144. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/clipboard/capi/__init__.py +0 -0
  145. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/clipboard/capi/darwin_cf.py +0 -0
  146. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/clipboard/capi/linux_x11.py +0 -0
  147. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/clipboard/commands.py +0 -0
  148. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/clipboard/platform.py +0 -0
  149. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/clipboard/types.py +0 -0
  150. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cmake.py +0 -0
  151. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cmdlog/__init__.py +0 -0
  152. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cmdlog/__main__.py +0 -0
  153. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cmdlog/_cmdlog.py +0 -0
  154. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cmdlog/cli.py +0 -0
  155. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/cmdlog/cmdlog.py +0 -0
  156. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dataclasses/__init__.py +0 -0
  157. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dataclasses/__main__.py +0 -0
  158. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dataclasses/_dumping.py +0 -0
  159. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dataclasses/_template.py +0 -0
  160. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dataclasses/cli.py +0 -0
  161. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dataclasses/codegen.py +0 -0
  162. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dataclasses/dumping.py +0 -0
  163. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dataserver/__init__.py +0 -0
  164. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dataserver/handlers.py +0 -0
  165. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dataserver/http.py +0 -0
  166. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dataserver/routes.py +0 -0
  167. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dataserver/server.py +0 -0
  168. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dataserver/targets.py +0 -0
  169. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/__init__.py +0 -0
  170. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/__main__.py +0 -0
  171. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/content.py +0 -0
  172. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/helpers.py +0 -0
  173. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/ops.py +0 -0
  174. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/rendering.py +0 -0
  175. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/resources/.python-versions.json +0 -0
  176. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/resources/configs/.gdbinit +0 -0
  177. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/resources/configs/.tmux.conf +0 -0
  178. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/resources/configs/.vimrc +0 -0
  179. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/resources/depsets/python.toml +0 -0
  180. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/resources/depsets/system.toml +0 -0
  181. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/resources/depsets/x11.toml +0 -0
  182. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/resources/fragments/apt.sh +0 -0
  183. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/resources/fragments/docker.sh +0 -0
  184. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/resources/fragments/firefox.sh +0 -0
  185. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/resources/fragments/go.sh +0 -0
  186. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/resources/fragments/jdk.sh +0 -0
  187. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/resources/fragments/nvm.sh +0 -0
  188. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/resources/fragments/pyenv.sh +0 -0
  189. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/resources/fragments/rust.sh +0 -0
  190. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/resources/fragments/sshd.sh +0 -0
  191. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/resources/fragments/vcpkg.sh +0 -0
  192. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/resources/fragments/zig.sh +0 -0
  193. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/dockerdev/resources/xu +0 -0
  194. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/git/__init__.py +0 -0
  195. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/git/magic.py +0 -0
  196. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/git/revisions.py +0 -0
  197. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/git/shallow.py +0 -0
  198. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/git/status.py +0 -0
  199. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/home/__init__.py +0 -0
  200. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/home/paths.py +0 -0
  201. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/home/secrets.py +0 -0
  202. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/home/shadow.py +0 -0
  203. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/imgur.py +0 -0
  204. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/intellij/__init__.py +0 -0
  205. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/intellij/cli.py +0 -0
  206. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/intellij/ides.py +0 -0
  207. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/intellij/open.py +0 -0
  208. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/interp/__init__.py +0 -0
  209. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/interp/__main__.py +0 -0
  210. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/interp/cli.py +0 -0
  211. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/interp/default.py +0 -0
  212. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/interp/inject.py +0 -0
  213. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/interp/inspect.py +0 -0
  214. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/interp/providers/__init__.py +0 -0
  215. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/interp/providers/base.py +0 -0
  216. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/interp/providers/inject.py +0 -0
  217. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/interp/providers/running.py +0 -0
  218. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/interp/providers/standalone.py +0 -0
  219. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/interp/providers/system.py +0 -0
  220. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/interp/pyenv/__init__.py +0 -0
  221. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/interp/pyenv/inject.py +0 -0
  222. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/interp/pyenv/install.py +0 -0
  223. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/interp/pyenv/provider.py +0 -0
  224. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/interp/pyenv/pyenv.py +0 -0
  225. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/interp/resolvers.py +0 -0
  226. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/interp/types.py +0 -0
  227. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/interp/uv/__init__.py +0 -0
  228. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/interp/uv/inject.py +0 -0
  229. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/interp/uv/provider.py +0 -0
  230. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/interp/uv/uv.py +0 -0
  231. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/interp/venvs.py +0 -0
  232. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/irc/__init__.py +0 -0
  233. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/irc/messages/__init__.py +0 -0
  234. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/irc/messages/base.py +0 -0
  235. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/irc/messages/formats.py +0 -0
  236. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/irc/messages/messages.py +0 -0
  237. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/irc/messages/parsing.py +0 -0
  238. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/irc/numerics/__init__.py +0 -0
  239. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/irc/numerics/formats.py +0 -0
  240. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/irc/numerics/numerics.py +0 -0
  241. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/irc/numerics/types.py +0 -0
  242. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/irc/protocol/LICENSE +0 -0
  243. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/irc/protocol/__init__.py +0 -0
  244. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/irc/protocol/consts.py +0 -0
  245. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/irc/protocol/errors.py +0 -0
  246. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/irc/protocol/message.py +0 -0
  247. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/irc/protocol/nuh.py +0 -0
  248. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/irc/protocol/parsing.py +0 -0
  249. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/irc/protocol/rendering.py +0 -0
  250. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/irc/protocol/tags.py +0 -0
  251. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/irc/protocol/utils.py +0 -0
  252. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/java/__init__.py +0 -0
  253. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/java/__main__.py +0 -0
  254. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/java/cli.py +0 -0
  255. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/java/pomgen.py +0 -0
  256. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/java/xml.py +0 -0
  257. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/magic/__init__.py +0 -0
  258. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/magic/__main__.py +0 -0
  259. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/magic/cli.py +0 -0
  260. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/magic/find.py +0 -0
  261. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/magic/magic.py +0 -0
  262. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/magic/prepare.py +0 -0
  263. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/magic/styles.py +0 -0
  264. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/manifests/__init__.py +0 -0
  265. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/manifests/__main__.py +0 -0
  266. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/manifests/_dumping.py +0 -0
  267. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/manifests/building.py +0 -0
  268. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/manifests/dumping.py +0 -0
  269. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/manifests/main.py +0 -0
  270. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/markdown/__init__.py +0 -0
  271. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/markdown/incparse.py +0 -0
  272. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/markdown/tokens.py +0 -0
  273. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/mypy/__init__.py +0 -0
  274. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/mypy/debug.py +0 -0
  275. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/mypy/report.py +0 -0
  276. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/oci/__init__.py +0 -0
  277. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/oci/building.py +0 -0
  278. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/oci/compression.py +0 -0
  279. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/oci/data.py +0 -0
  280. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/oci/datarefs.py +0 -0
  281. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/oci/dataserver.py +0 -0
  282. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/oci/loading.py +0 -0
  283. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/oci/media.py +0 -0
  284. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/oci/pack/__init__.py +0 -0
  285. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/oci/pack/packing.py +0 -0
  286. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/oci/pack/repositories.py +0 -0
  287. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/oci/pack/unpacking.py +0 -0
  288. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/oci/repositories.py +0 -0
  289. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/oci/tars.py +0 -0
  290. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/packaging/__init__.py +0 -0
  291. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/packaging/marshal.py +0 -0
  292. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/packaging/names.py +0 -0
  293. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/packaging/requires.py +0 -0
  294. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/packaging/revisions.py +0 -0
  295. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/packaging/specifiers.py +0 -0
  296. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/packaging/versions.py +0 -0
  297. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/packaging/wheelfile.py +0 -0
  298. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/pip.py +0 -0
  299. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/precheck/__init__.py +0 -0
  300. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/precheck/__main__.py +0 -0
  301. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/precheck/base.py +0 -0
  302. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/precheck/blanklines.py +0 -0
  303. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/precheck/caches.py +0 -0
  304. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/precheck/git.py +0 -0
  305. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/precheck/imports.py +0 -0
  306. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/precheck/lite.py +0 -0
  307. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/precheck/main.py +0 -0
  308. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/precheck/manifests.py +0 -0
  309. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/precheck/scripts.py +0 -0
  310. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/precheck/unicode.py +0 -0
  311. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/__init__.py +0 -0
  312. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/asts/__init__.py +0 -0
  313. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/asts/parents.py +0 -0
  314. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/asts/toplevel.py +0 -0
  315. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/asts/visitors.py +0 -0
  316. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/attrdocs.py +0 -0
  317. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/bracepy.py +0 -0
  318. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/classdot.py +0 -0
  319. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/docstrings/LICENSE +0 -0
  320. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/docstrings/__init__.py +0 -0
  321. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/docstrings/attrdoc.py +0 -0
  322. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/docstrings/common.py +0 -0
  323. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/docstrings/epydoc.py +0 -0
  324. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/docstrings/google.py +0 -0
  325. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/docstrings/numpydoc.py +0 -0
  326. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/docstrings/parser.py +0 -0
  327. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/docstrings/rest.py +0 -0
  328. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/findimports.py +0 -0
  329. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/reprs.py +0 -0
  330. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/scripts/__init__.py +0 -0
  331. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/scripts/bumpversion.py +0 -0
  332. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/scripts/execstat.py +0 -0
  333. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/scripts/importtrace.py +0 -0
  334. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/srcheaders.py +0 -0
  335. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/tokens/__init__.py +0 -0
  336. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/tokens/all.py +0 -0
  337. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/tokens/tokenizert.py +0 -0
  338. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/tokens/utils.py +0 -0
  339. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/tools/__init__.py +0 -0
  340. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/tools/importscan.py +0 -0
  341. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/tools/mkrelimp.py +0 -0
  342. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/py/tools/pipdepup.py +0 -0
  343. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/pyproject/__init__.py +0 -0
  344. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/pyproject/__main__.py +0 -0
  345. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/pyproject/cli.py +0 -0
  346. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/pyproject/configs.py +0 -0
  347. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/pyproject/inject.py +0 -0
  348. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/pyproject/pkg.py +0 -0
  349. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/pyproject/reqs.py +0 -0
  350. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/pyproject/resources/dockerdev.sh +0 -0
  351. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/pyproject/resources/python.sh +0 -0
  352. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/pyproject/tools/__init__.py +0 -0
  353. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/pyproject/tools/aboutdeps.py +0 -0
  354. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/pyproject/tools/buildrs.py +0 -0
  355. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/pyproject/tools/pyversions.py +0 -0
  356. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/pyproject/venvs.py +0 -0
  357. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/pyproject/versions.py +0 -0
  358. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/rs/__init__.py +0 -0
  359. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/scripts/__init__.py +0 -0
  360. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/scripts/ci.py +0 -0
  361. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/scripts/interp.py +0 -0
  362. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/scripts/lib/__init__.py +0 -0
  363. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/scripts/lib/formats/__init__.py +0 -0
  364. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/scripts/lib/formats/goyaml.py +0 -0
  365. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/scripts/lib/inject.py +0 -0
  366. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/scripts/lib/io/__init__.py +0 -0
  367. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/scripts/lib/io/streams.py +0 -0
  368. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/scripts/lib/logs.py +0 -0
  369. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/scripts/lib/marshal.py +0 -0
  370. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/scripts/pyproject.py +0 -0
  371. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/scripts/slowcat.py +0 -0
  372. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/scripts/tmpexec.py +0 -0
  373. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tagstrings.py +0 -0
  374. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/__init__.py +0 -0
  375. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/cloc.py +0 -0
  376. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/diff.py +0 -0
  377. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/doc.py +0 -0
  378. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/docker.py +0 -0
  379. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/git/__init__.py +0 -0
  380. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/git/__main__.py +0 -0
  381. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/git/cli.py +0 -0
  382. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/git/cloning.py +0 -0
  383. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/git/consts.py +0 -0
  384. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/git/messages.py +0 -0
  385. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/json/__init__.py +0 -0
  386. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/json/__main__.py +0 -0
  387. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/json/cli.py +0 -0
  388. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/json/formats.py +0 -0
  389. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/json/io.py +0 -0
  390. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/json/parsing.py +0 -0
  391. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/json/processing.py +0 -0
  392. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/json/rendering.py +0 -0
  393. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/jsonview/__init__.py +0 -0
  394. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/jsonview/__main__.py +0 -0
  395. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/jsonview/cli.py +0 -0
  396. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/jsonview/resources/jsonview.css +0 -0
  397. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/jsonview/resources/jsonview.html.j2 +0 -0
  398. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/jsonview/resources/jsonview.js +0 -0
  399. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/linehisto.py +0 -0
  400. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/mkenv.py +0 -0
  401. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/notebook.py +0 -0
  402. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/pawk/README.md +0 -0
  403. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/pawk/__init__.py +0 -0
  404. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/pawk/__main__.py +0 -0
  405. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/pawk/pawk.py +0 -0
  406. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/pip.py +0 -0
  407. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/prof.py +0 -0
  408. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/qr.py +0 -0
  409. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/shadow.py +0 -0
  410. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/shell.py +0 -0
  411. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tools/sqlrepl.py +0 -0
  412. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/__init__.py +0 -0
  413. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/apps/__init__.py +0 -0
  414. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/apps/edit/__init__.py +0 -0
  415. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/apps/edit/main.py +0 -0
  416. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/apps/irc/__init__.py +0 -0
  417. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/apps/irc/__main__.py +0 -0
  418. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/apps/irc/app.py +0 -0
  419. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/apps/irc/client.py +0 -0
  420. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/apps/irc/commands.py +0 -0
  421. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/apps/irc/main.py +0 -0
  422. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/apps/markdown/__init__.py +0 -0
  423. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/apps/markdown/__main__.py +0 -0
  424. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/apps/markdown/cli.py +0 -0
  425. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/rich/__init__.py +0 -0
  426. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/rich/console2.py +0 -0
  427. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/textual/app2.py +0 -0
  428. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/textual/autocomplete/LICENSE +0 -0
  429. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/textual/autocomplete/__init__.py +0 -0
  430. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/textual/autocomplete/matching.py +0 -0
  431. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/textual/autocomplete/paths.py +0 -0
  432. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/textual/autocomplete/widget.py +0 -0
  433. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/textual/binding2.py +0 -0
  434. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/textual/clipboard.py +0 -0
  435. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/textual/debug/__init__.py +0 -0
  436. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/textual/debug/dominfo.py +0 -0
  437. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/textual/debug/screen.py +0 -0
  438. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/textual/devtools.py +0 -0
  439. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/textual/drivers2.py +0 -0
  440. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/textual/logging2.py +0 -0
  441. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/textual/render2.py +0 -0
  442. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/textual/screen2.py +0 -0
  443. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev/tui/textual/types.py +0 -0
  444. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev.egg-info/dependency_links.txt +0 -0
  445. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev.egg-info/entry_points.txt +0 -0
  446. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/omdev.egg-info/top_level.txt +0 -0
  447. {omdev-0.0.0.dev539 → omdev-0.0.0.dev540}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev539
3
+ Version: 0.0.0.dev540
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
14
14
  Requires-Python: >=3.13
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: omlish==0.0.0.dev539
17
+ Requires-Dist: omlish==0.0.0.dev540
18
18
  Provides-Extra: all
19
19
  Requires-Dist: black~=26.3; extra == "all"
20
20
  Requires-Dist: pycparser~=3.0; extra == "all"
@@ -2,6 +2,8 @@
2
2
  TODO:
3
3
  - default run bash
4
4
  - all of the below stuff
5
+ - launch / manage compose services
6
+ - more cache dirs
5
7
 
6
8
  ====
7
9
 
@@ -54,8 +56,10 @@ from omlish import check
54
56
  from omlish import lang
55
57
  from omlish import marshal as msh
56
58
  from omlish.argparse import all as ap
59
+ from omlish.os.paths import is_path_in_dir
57
60
 
58
- from .gen import Config
61
+ from ..home.paths import get_cache_dir
62
+ from .config import Config
59
63
  from .gen import gen_src
60
64
 
61
65
 
@@ -145,29 +149,49 @@ class Cli(ap.Cli):
145
149
 
146
150
  @ap.cmd(
147
151
  ap.arg('-v', '--verbose', action='store_true'),
152
+ ap.arg('-C', '--mount-caches', action='store_true'),
148
153
  ap.arg('args', nargs=ap.REMAINDER),
149
154
  accepts_unknown=True,
150
155
  )
151
156
  def run(self) -> None:
152
- check.not_empty(self.args.args)
153
-
154
157
  sha = self._build(
155
158
  verbose=self.args.verbose,
156
159
  )
157
160
 
161
+ #
162
+
163
+ run_args: list[str] = ['run']
164
+
165
+ if self.unknown_args:
166
+ run_args.extend(self.unknown_args)
167
+ else:
168
+ run_args.extend([
169
+ '--rm',
170
+ '-it',
171
+ ])
172
+
173
+ if self.args.mount_caches:
174
+ cache_dir = os.path.join(get_cache_dir(), 'dockerdev')
175
+ cfg = self._load_config()
176
+ for cl, cr in (cfg.cache_mounts or {}).items():
177
+ cld = os.path.join(cache_dir, cl)
178
+ check.state(is_path_in_dir(cache_dir, cld))
179
+ os.makedirs(cld, exist_ok=True)
180
+ run_args.append(f'--mount=type=bind,src={cld},dst={cr}')
181
+
182
+ run_args.append(sha)
183
+
184
+ if self.args.args:
185
+ check.not_empty(self.args.args)
186
+ else:
187
+ run_args.append('bash')
188
+
189
+ #
190
+
158
191
  os.execl(
159
192
  docker := check.not_none(shutil.which('docker')),
160
193
  docker,
161
- 'run',
162
- *(
163
- self.unknown_args or
164
- [
165
- '--rm',
166
- '-it',
167
- ]
168
- ),
169
- sha,
170
- *self.args.args,
194
+ *run_args,
171
195
  )
172
196
 
173
197
 
@@ -0,0 +1,33 @@
1
+ import typing as ta
2
+
3
+ from omlish import dataclasses as dc
4
+
5
+
6
+ ##
7
+
8
+
9
+ @dc.dataclass(frozen=True)
10
+ class Config:
11
+ base_image: str
12
+
13
+ workdir: str | None = None
14
+
15
+ _: dc.KW_ONLY
16
+
17
+ dep_sets: ta.Sequence[str] | None = None
18
+
19
+ jdks: ta.Sequence[str] | None = None
20
+
21
+ go_version: str | None = None
22
+
23
+ zig_version: str | None = None
24
+
25
+ nvm_versions: ta.Sequence[str] | None = None
26
+
27
+ uv_python_versions: ta.Sequence[str] | None = None
28
+
29
+ pyenv_version_keys: ta.Sequence[str] | None = None
30
+
31
+ config_files: ta.Sequence[str] | None = None
32
+
33
+ cache_mounts: ta.Mapping[str, str] | None = None
@@ -21,6 +21,11 @@ nvm_versions = [
21
21
  '25',
22
22
  ]
23
23
 
24
+ uv_python_versions = [
25
+ '3.13',
26
+ '3.14',
27
+ ]
28
+
24
29
  pyenv_version_keys = [
25
30
  '8',
26
31
  '13',
@@ -34,3 +39,7 @@ config_files = [
34
39
  ]
35
40
 
36
41
  workdir = '/omlish'
42
+
43
+ [cache_mounts]
44
+ 'pip' = '/root/.cache/pip'
45
+ 'uv' = '/root/.cache/uv'
@@ -1,12 +1,12 @@
1
1
  """
2
2
  TODO:
3
3
  - per-feature config, obv
4
+ - install pnpm
4
5
  """
5
6
  import io
6
7
  import typing as ta
7
8
 
8
- from omlish import dataclasses as dc
9
-
9
+ from .config import Config
10
10
  from .content import LazyContent
11
11
  from .content import Resource
12
12
  from .helpers import APT_CACHE_MOUNTS
@@ -28,32 +28,6 @@ from .rendering import render_op
28
28
  ##
29
29
 
30
30
 
31
- @dc.dataclass(frozen=True)
32
- class Config:
33
- base_image: str
34
-
35
- workdir: str | None = None
36
-
37
- _: dc.KW_ONLY
38
-
39
- dep_sets: ta.Sequence[str] | None = None
40
-
41
- jdks: ta.Sequence[str] | None = None
42
-
43
- go_version: str | None = None
44
-
45
- zig_version: str | None = None
46
-
47
- nvm_versions: ta.Sequence[str] | None = None
48
-
49
- pyenv_version_keys: ta.Sequence[str] | None = None
50
-
51
- config_files: ta.Sequence[str] | None = None
52
-
53
-
54
- ##
55
-
56
-
57
31
  def gen_ops(cfg: Config) -> ta.Sequence[Op]:
58
32
  ops: list[Op] = [
59
33
  From(cfg.base_image),
@@ -120,7 +94,10 @@ def gen_ops(cfg: Config) -> ta.Sequence[Op]:
120
94
  static_env={'NVM_VERSIONS': cfg.nvm_versions},
121
95
  ))
122
96
 
123
- ops.append(fragment_section('uv'))
97
+ ops.append(fragment_section(
98
+ 'uv',
99
+ static_env={'UV_PYTHON_VERSIONS': cfg.uv_python_versions or []},
100
+ ))
124
101
 
125
102
  if cfg.pyenv_version_keys:
126
103
  ops.append(fragment_section(
@@ -0,0 +1,7 @@
1
+ set -ex ;
2
+
3
+ curl -LsSf 'https://astral.sh/uv/install.sh' | sh ;
4
+
5
+ for PV in ${UV_PYTHON_VERSIONS} ; do
6
+ bash --login -c "uv python install $PV" ;
7
+ done ;
@@ -43,7 +43,7 @@ def __omlish_amalg__(): # noqa
43
43
  dict(path='../../lite/namespaces.py', sha1='27b12b6592403c010fb8b2a0af7c24238490d3a1'),
44
44
  dict(path='../../logs/levels.py', sha1='91405563d082a5eba874da82aac89d83ce7b6152'),
45
45
  dict(path='../../logs/warnings.py', sha1='c4eb694b24773351107fcc058f3620f1dbfb6799'),
46
- dict(path='core.py', sha1='d9c24e9b85536086a93fc6f00ae02cdba2824e55'),
46
+ dict(path='core.py', sha1='3dabd48ce0e19fd974a89ea7b4dd2b6c4118d36b'),
47
47
  dict(path='../streams/types.py', sha1='8959d244de95eaf9f118cc3fd2d713d85e55ff36'),
48
48
  dict(path='../../logs/infos.py', sha1='4dd104bd468a8c438601dd0bbda619b47d2f1620'),
49
49
  dict(path='../../logs/metrics/base.py', sha1='95120732c745ceec5333f81553761ab6ff4bb3fb'),
@@ -1394,7 +1394,7 @@ class IoPipelineMessages(NamespaceClass):
1394
1394
  #
1395
1395
 
1396
1396
  class Completable(Abstract, ta.Generic[T]):
1397
- # Management of completable state is implemented as a 'hidden' / dynamic attributes to allow mixing in with
1397
+ # Management of completable state is implemented as 'hidden' / dynamic attributes to allow mixing in with
1398
1398
  # otherwise frozen dataclasses.
1399
1399
 
1400
1400
  # _completion_state: ta.Literal['pending', 'succeeded', 'failed'] = 'pending'
@@ -1529,12 +1529,12 @@ class IoPipelineHandlerNotifications(NamespaceClass):
1529
1529
  @ta.final
1530
1530
  @dc.dataclass(frozen=True)
1531
1531
  class Added(IoPipelineHandlerNotification):
1532
- pass
1532
+ ctx: 'IoPipelineHandlerContext'
1533
1533
 
1534
1534
  @ta.final
1535
1535
  @dc.dataclass(frozen=True)
1536
1536
  class Removed(IoPipelineHandlerNotification):
1537
- pass
1537
+ ctx: 'IoPipelineHandlerContext'
1538
1538
 
1539
1539
 
1540
1540
  ##
@@ -1591,7 +1591,7 @@ IoPipelineHandlerRef_ = IoPipelineHandlerRef['IoPipelineHandler'] # ta.TypeAlia
1591
1591
  class IoPipelineHandlerContext:
1592
1592
  """
1593
1593
  The embodiment of an instance of a handler at a position in a pipeline. Passed to IoPipelineHandler methods,
1594
- providing handler-specific access to the pipeline and. As instances of `ShareableIoPipelineHandler` may validly be
1594
+ providing handler-specific access to the pipeline. As instances of `ShareableIoPipelineHandler` may validly be
1595
1595
  simultaneously present at multiple positions in a pipeline, a single handler may have multiple active context
1596
1596
  instances associated with it in any given pipeline.
1597
1597
 
@@ -2343,9 +2343,8 @@ class IoPipeline:
2343
2343
 
2344
2344
  # _: dc.KW_ONLY
2345
2345
 
2346
+ # Metadata and ervices are fixed for the lifetime of the pipeline.
2346
2347
  metadata: ta.Union[ta.Sequence[IoPipelineMetadata], IoPipelineMetadatas] = ()
2347
-
2348
- # Services are fixed for the lifetime of the pipeline.
2349
2348
  services: ta.Union[ta.Sequence[IoPipelineService], IoPipelineServices] = ()
2350
2349
 
2351
2350
  #
@@ -2787,7 +2786,7 @@ class IoPipeline:
2787
2786
  self._handler_update(ctx, 'added') # noqa
2788
2787
 
2789
2788
  # FIXME: exceptions?
2790
- self._notify(ctx, IoPipelineHandlerNotifications.Added()) # noqa
2789
+ self._notify(ctx, IoPipelineHandlerNotifications.Added(ctx))
2791
2790
 
2792
2791
  return ctx._ref # noqa
2793
2792
 
@@ -2879,7 +2878,7 @@ class IoPipeline:
2879
2878
  self._handler_update(ctx, 'removed') # noqa
2880
2879
 
2881
2880
  # FIXME: exceptions? defer?
2882
- self._notify(ctx, IoPipelineHandlerNotifications.Removed()) # noqa
2881
+ self._notify(ctx, IoPipelineHandlerNotifications.Removed(ctx))
2883
2882
 
2884
2883
  def remove(self, handler_ref: IoPipelineHandlerRef) -> None:
2885
2884
  self._remove(handler_ref)
@@ -31,8 +31,8 @@ def configure_markdown_parser(parser: ta.Optional['md.MarkdownIt'] = None) -> 'm
31
31
  )
32
32
 
33
33
 
34
- def markdown_from_tokens(tokens: ta.Sequence['md.token.Token']) -> 'rich.markdown.Markdown':
35
- rmd = rich.markdown.Markdown('')
34
+ def markdown_from_tokens(tokens: ta.Sequence['md.token.Token'], **kwargs: ta.Any) -> 'rich.markdown.Markdown':
35
+ rmd = rich.markdown.Markdown('', **kwargs)
36
36
  rmd.parsed = tokens # type: ignore[assignment]
37
37
  return rmd
38
38
 
@@ -57,6 +57,8 @@ class MarkdownLiveStream(lang.ExitStacked, lang.Abstract):
57
57
  *,
58
58
  parser: ta.Optional['md.MarkdownIt'] = None,
59
59
  console: ta.Optional['rich.console.Console'] = None,
60
+ render_console_kwargs: ta.Mapping[str, ta.Any] | None = None,
61
+ markdown_kwargs: ta.Mapping[str, ta.Any] | None = None,
60
62
  ) -> None:
61
63
  super().__init__()
62
64
 
@@ -68,8 +70,14 @@ class MarkdownLiveStream(lang.ExitStacked, lang.Abstract):
68
70
  parser = configure_markdown_parser()
69
71
  self._parser = parser
70
72
 
73
+ self._render_console_kwargs = render_console_kwargs
74
+ self._markdown_kwargs = markdown_kwargs
75
+
71
76
  self._lines_printed_to_scrollback = 0
72
77
 
78
+ def _markdown_from_tokens(self, tokens: ta.Sequence['md.token.Token']) -> 'rich.markdown.Markdown':
79
+ return markdown_from_tokens(tokens, **(self._markdown_kwargs or {}))
80
+
73
81
  _live: 'rich.live.Live' # noqa
74
82
 
75
83
  def _enter_contexts(self) -> None:
@@ -86,10 +94,11 @@ class MarkdownLiveStream(lang.ExitStacked, lang.Abstract):
86
94
  obj,
87
95
  force_terminal=True,
88
96
  width=self._console.width,
97
+ **(self._render_console_kwargs or {}),
89
98
  ).splitlines()
90
99
 
91
100
  def _console_render_markdown(self, src: str) -> list[str]:
92
- return self._console_render(markdown_from_tokens(self._parser.parse(src)))
101
+ return self._console_render(self._markdown_from_tokens(self._parser.parse(src)))
93
102
 
94
103
  @abc.abstractmethod
95
104
  def feed(self, s: str) -> None:
@@ -137,10 +146,14 @@ class IncrementalMarkdownLiveStream(MarkdownLiveStream):
137
146
  *,
138
147
  parser: ta.Optional['md.MarkdownIt'] = None,
139
148
  console: ta.Optional['rich.console.Console'] = None,
149
+ render_console_kwargs: ta.Mapping[str, ta.Any] | None = None,
150
+ markdown_kwargs: ta.Mapping[str, ta.Any] | None = None,
140
151
  ) -> None:
141
152
  super().__init__(
142
153
  parser=parser,
143
154
  console=console,
155
+ render_console_kwargs=render_console_kwargs,
156
+ markdown_kwargs=markdown_kwargs,
144
157
  )
145
158
 
146
159
  self._inc_parser = IncrementalMarkdownParser(parser=self._parser)
@@ -150,7 +163,7 @@ class IncrementalMarkdownLiveStream(MarkdownLiveStream):
150
163
 
151
164
  if ip_out.new_stable:
152
165
  # Render the stable lines
153
- stable_lines = self._console_render(markdown_from_tokens(ip_out.new_stable))
166
+ stable_lines = self._console_render(self._markdown_from_tokens(ip_out.new_stable))
154
167
 
155
168
  # Overlap Detection
156
169
  already_printed_count = min(self._lines_printed_to_scrollback, len(stable_lines))
@@ -163,7 +176,7 @@ class IncrementalMarkdownLiveStream(MarkdownLiveStream):
163
176
  # Adjust counter
164
177
  self._lines_printed_to_scrollback = max(0, self._lines_printed_to_scrollback - len(stable_lines))
165
178
 
166
- unstable_lines = self._console_render(markdown_from_tokens(ip_out.unstable))
179
+ unstable_lines = self._console_render(self._markdown_from_tokens(ip_out.unstable))
167
180
 
168
181
  available_height = self._console.height - 2
169
182
  total_lines = len(unstable_lines)
@@ -199,11 +212,15 @@ class SteppedIncrementalMarkdownLiveStream(MarkdownLiveStream):
199
212
  *,
200
213
  parser: ta.Optional['md.MarkdownIt'] = None,
201
214
  console: ta.Optional['rich.console.Console'] = None,
215
+ render_console_kwargs: ta.Mapping[str, ta.Any] | None = None,
216
+ markdown_kwargs: ta.Mapping[str, ta.Any] | None = None,
202
217
  scroll_step: int | None = None,
203
218
  ) -> None:
204
219
  super().__init__(
205
220
  parser=parser,
206
221
  console=console,
222
+ render_console_kwargs=render_console_kwargs,
223
+ markdown_kwargs=markdown_kwargs,
207
224
  )
208
225
 
209
226
  self._inc_parser = IncrementalMarkdownParser(parser=self._parser)
@@ -216,7 +233,7 @@ class SteppedIncrementalMarkdownLiveStream(MarkdownLiveStream):
216
233
  # Handle stable content
217
234
 
218
235
  if ip_out.new_stable:
219
- stable_lines = self._console_render(markdown_from_tokens(ip_out.new_stable))
236
+ stable_lines = self._console_render(self._markdown_from_tokens(ip_out.new_stable))
220
237
 
221
238
  # Overlap Detection: Determine how many lines of this now-stable block were already pushed to scrollback
222
239
  # while they were in the "unstable" phase.
@@ -234,7 +251,7 @@ class SteppedIncrementalMarkdownLiveStream(MarkdownLiveStream):
234
251
  ##
235
252
  # Handle unstable content
236
253
 
237
- unstable_lines = self._console_render(markdown_from_tokens(ip_out.unstable))
254
+ unstable_lines = self._console_render(self._markdown_from_tokens(ip_out.unstable))
238
255
  total_lines = len(unstable_lines)
239
256
  available_height = self._console.height - 2
240
257
 
@@ -279,10 +296,14 @@ class ClaudeIncrementalMarkdownLiveStream(MarkdownLiveStream):
279
296
  *,
280
297
  parser: ta.Optional['md.MarkdownIt'] = None,
281
298
  console: ta.Optional['rich.console.Console'] = None,
299
+ render_console_kwargs: ta.Mapping[str, ta.Any] | None = None,
300
+ markdown_kwargs: ta.Mapping[str, ta.Any] | None = None,
282
301
  ) -> None:
283
302
  super().__init__(
284
303
  parser=parser,
285
304
  console=console,
305
+ render_console_kwargs=render_console_kwargs,
306
+ markdown_kwargs=markdown_kwargs,
286
307
  )
287
308
 
288
309
  from ...markdown.incparse import ClaudeIncrementalMarkdownParser # noqa
@@ -308,7 +329,7 @@ class ClaudeIncrementalMarkdownLiveStream(MarkdownLiveStream):
308
329
  self._live.stop()
309
330
 
310
331
  # Render and print stable content to true scrollback
311
- stable_lines = self._console_render(markdown_from_tokens(ip_out.new_stable))
332
+ stable_lines = self._console_render(self._markdown_from_tokens(ip_out.new_stable))
312
333
  for line in stable_lines:
313
334
  self._console.print(rich.text.Text.from_ansi(line), highlight=False)
314
335
 
@@ -320,7 +341,7 @@ class ClaudeIncrementalMarkdownLiveStream(MarkdownLiveStream):
320
341
  self._live.start()
321
342
 
322
343
  # Render current unstable content
323
- unstable_lines = self._console_render(markdown_from_tokens(ip_out.unstable))
344
+ unstable_lines = self._console_render(self._markdown_from_tokens(ip_out.unstable))
324
345
  current_line_count = len(unstable_lines)
325
346
 
326
347
  # Calculate available display height
@@ -361,10 +382,14 @@ class GptIncrementalMarkdownLiveStream(MarkdownLiveStream):
361
382
  *,
362
383
  parser: ta.Optional['md.MarkdownIt'] = None,
363
384
  console: ta.Optional['rich.console.Console'] = None,
385
+ render_console_kwargs: ta.Mapping[str, ta.Any] | None = None,
386
+ markdown_kwargs: ta.Mapping[str, ta.Any] | None = None,
364
387
  ) -> None:
365
388
  super().__init__(
366
389
  parser=parser,
367
390
  console=console,
391
+ render_console_kwargs=render_console_kwargs,
392
+ markdown_kwargs=markdown_kwargs,
368
393
  )
369
394
 
370
395
  from ...markdown.incparse import GptIncrementalMarkdownParser # noqa
@@ -379,9 +404,9 @@ class GptIncrementalMarkdownLiveStream(MarkdownLiveStream):
379
404
  if ip_out.new_stable:
380
405
  # Print stable renderables directly through Rich (avoid ANSI round-tripping / splitlines). Use end="" so we
381
406
  # don't inject extra blank lines beyond what the markdown renderable produces.
382
- self._live.console.print(markdown_from_tokens(ip_out.new_stable), end='')
407
+ self._live.console.print(self._markdown_from_tokens(ip_out.new_stable), end='')
383
408
 
384
409
  # Show the remaining (unstable) tail in the live region. We intentionally do *not* try to "spill overflow of
385
410
  # unstable to scrollback", since those lines are not provably stable and may retroactively change; printing them
386
411
  # would violate correctness.
387
- self._live.update(markdown_from_tokens(ip_out.unstable))
412
+ self._live.update(self._markdown_from_tokens(ip_out.unstable))
@@ -0,0 +1,12 @@
1
+ from omlish import lang as _lang
2
+
3
+
4
+ with _lang.auto_proxy_init(globals()):
5
+ from .dark import TEXTUAL_DARK # noqa
6
+
7
+ from .themes import ( # noqa
8
+ DumpedTextualTheme,
9
+
10
+ build_pygments_theme,
11
+ build_theme,
12
+ )
@@ -0,0 +1,108 @@
1
+ # flake8: noqa: E241
2
+ # @omlish-llm-author "opus-4.6"
3
+ from .themes import DumpedTextualTheme
4
+
5
+
6
+ ##
7
+
8
+
9
+ ##
10
+ # Pre-computed color values for textual-dark (v8.1.1).
11
+ #
12
+ # These are the *resolved* hex values that Textual's ColorSystem.generate() produces for the default "textual-dark"
13
+ # theme. Only the subset that matters for markdown rendering is kept here.
14
+ #
15
+
16
+
17
+ TEXTUAL_DARK = DumpedTextualTheme(
18
+ 'textual-dark',
19
+
20
+ colors={
21
+ # Core palette
22
+ 'primary': '#0178D4',
23
+ 'secondary': '#004578',
24
+ 'foreground': '#E0E0E0',
25
+ 'background': '#121212',
26
+ 'warning': '#FEA62B',
27
+ 'error': '#B93C5B',
28
+ 'surface': '#1E1E1E',
29
+
30
+ # Derived text-on-background tints
31
+ 'text-primary': '#57A5E2',
32
+ 'text-secondary': '#5684A5',
33
+ 'text-warning': '#FFC473',
34
+ 'text-error': '#D17E92',
35
+
36
+ # Foreground variants
37
+ 'foreground-muted': '#E0E0E099', # 60 % alpha
38
+
39
+ # Markdown header variables (straight from design.py defaults)
40
+ 'markdown-h1-color': '#0178D4',
41
+ 'markdown-h1-text-style': 'bold',
42
+ 'markdown-h2-color': '#0178D4',
43
+ 'markdown-h2-text-style': 'underline',
44
+ 'markdown-h3-color': '#0178D4',
45
+ 'markdown-h3-text-style': 'bold',
46
+ 'markdown-h4-color': '#E0E0E0',
47
+ 'markdown-h4-text-style': 'bold underline',
48
+ 'markdown-h5-color': '#E0E0E0',
49
+ 'markdown-h5-text-style': 'bold',
50
+ 'markdown-h6-color': '#E0E0E099',
51
+ 'markdown-h6-text-style': 'bold',
52
+ },
53
+
54
+ blended={
55
+ # Pre-blended colors for elements that use alpha/percentage notation in Textual CSS. Computed against
56
+ # background #121212.
57
+
58
+ # MarkdownBlock &:dark > .code_inline -> bg: $warning 10%, color: $text-warning 95%
59
+ 'code_inline_bg': '#292014',
60
+ 'code_inline_fg': '#F3BB6E',
61
+ # MarkdownFence -> bg: black 10% (over #121212)
62
+ 'code_block_bg': '#101010',
63
+ 'code_block_fg': '#D2D2D2', # rgb(210,210,210) literal in textual CSS
64
+ # MarkdownBlockQuote -> bg: $boost (white 4 %)
65
+ 'block_quote_bg': '#1B1B1B',
66
+ # MarkdownBlockQuote -> border-left: outer $text-primary 50%
67
+ 'block_quote_border': '#345B7A',
68
+ # foreground-muted blended (for H6 -- 60 % alpha white-ish on #121212)
69
+ 'h6_color': '#8D8D8D',
70
+ },
71
+
72
+ pygments_styles={
73
+ # Resolved from textual.highlight.HighlightTheme.STYLES.
74
+ # Alpha-blended against fence bg #101010. Base text from highlight()'s stylize_before("$text").
75
+ 'Token': '#DFDFDF',
76
+ 'Token.Comment': '#9F9F9F',
77
+ 'Token.Error': '#D17E92 bg:#441E27',
78
+ 'Token.Generic.Emph': 'italic',
79
+ 'Token.Generic.Error': '#D17E92 bg:#441E27',
80
+ 'Token.Generic.Heading': 'underline #57A5E2',
81
+ 'Token.Generic.Strong': 'bold',
82
+ 'Token.Generic.Subheading': '#57A5E2',
83
+ 'Token.Keyword': '#FFC473',
84
+ 'Token.Keyword.Constant': 'bold #71AC84',
85
+ 'Token.Keyword.Namespace': '#D17E92',
86
+ 'Token.Keyword.Type': 'bold',
87
+ 'Token.Literal.Number': '#FFC473',
88
+ 'Token.Literal.String': '#8AD4A1',
89
+ 'Token.Literal.String.Backtick': '#9F9F9F',
90
+ 'Token.Literal.String.Doc': 'italic #71AC84',
91
+ 'Token.Literal.String.Double': '#7DC092',
92
+ 'Token.Name': '#57A5E2',
93
+ 'Token.Name.Attribute': '#FFC473',
94
+ 'Token.Name.Builtin': '#FFC473',
95
+ 'Token.Name.Builtin.Pseudo': 'italic',
96
+ 'Token.Name.Class': 'bold #FFC473',
97
+ 'Token.Name.Constant': '#D17E92',
98
+ 'Token.Name.Decorator': 'bold #57A5E2',
99
+ 'Token.Name.Function': 'underline #FFC473',
100
+ 'Token.Name.Function.Magic': 'underline #FFC473',
101
+ 'Token.Name.Tag': 'bold #57A5E2',
102
+ 'Token.Name.Variable': '#5684A5',
103
+ # Note: Token.Number IS Token.Literal.Number in Pygments (alias), so only the Literal.Number entry is needed.
104
+ 'Token.Operator': 'bold',
105
+ 'Token.Operator.Word': 'bold #D17E92',
106
+ 'Token.Whitespace': '',
107
+ },
108
+ )