@voxgig/sdkgen 4.8.1 → 4.8.3

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 (376) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/dist/action/doctor.d.ts +1 -0
  3. package/dist/action/doctor.js +50 -2
  4. package/dist/action/doctor.js.map +1 -1
  5. package/dist/helpers/naming.js +4 -2
  6. package/dist/helpers/naming.js.map +1 -1
  7. package/dist/tsconfig.tsbuildinfo +1 -1
  8. package/model/sdkgen.aon +21 -0
  9. package/package.json +2 -2
  10. package/project/.sdk/model/feature/secrets.aon +120 -18
  11. package/project/.sdk/model/target/c.aon +10 -0
  12. package/project/.sdk/model/target/clojure.aon +13 -0
  13. package/project/.sdk/model/target/cpp.aon +10 -0
  14. package/project/.sdk/model/target/csharp.aon +9 -0
  15. package/project/.sdk/model/target/dart.aon +10 -0
  16. package/project/.sdk/model/target/elixir.aon +9 -0
  17. package/project/.sdk/model/target/go.aon +13 -0
  18. package/project/.sdk/model/target/java.aon +9 -0
  19. package/project/.sdk/model/target/js.aon +7 -0
  20. package/project/.sdk/model/target/kotlin.aon +9 -0
  21. package/project/.sdk/model/target/lean.aon +17 -0
  22. package/project/.sdk/model/target/lua.aon +8 -0
  23. package/project/.sdk/model/target/ocaml.aon +9 -0
  24. package/project/.sdk/model/target/perl.aon +8 -0
  25. package/project/.sdk/model/target/php.aon +8 -0
  26. package/project/.sdk/model/target/py.aon +13 -0
  27. package/project/.sdk/model/target/rb.aon +8 -0
  28. package/project/.sdk/model/target/rust.aon +10 -0
  29. package/project/.sdk/model/target/scala.aon +21 -2
  30. package/project/.sdk/model/target/swift.aon +18 -0
  31. package/project/.sdk/model/target/ts.aon +13 -0
  32. package/project/.sdk/src/cmp/clojure/Package_clojure.ts +9 -2
  33. package/project/.sdk/src/cmp/cpp/Gitignore_cpp.ts +3 -0
  34. package/project/.sdk/src/cmp/dart/Test_dart.ts +2 -0
  35. package/project/.sdk/src/cmp/elixir/Package_elixir.ts +4 -1
  36. package/project/.sdk/src/cmp/go/Config_go.ts +59 -2
  37. package/project/.sdk/src/cmp/go/Main_go.ts +8 -2
  38. package/project/.sdk/src/cmp/java/Test_java.ts +6 -5
  39. package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +6 -5
  40. package/project/.sdk/src/cmp/lean/Package_lean.ts +23 -0
  41. package/project/.sdk/src/cmp/lean/ReadmeInstall_lean.ts +1 -0
  42. package/project/.sdk/src/cmp/lean/ReadmeTopTest_lean.ts +1 -0
  43. package/project/.sdk/src/cmp/ocaml/Gitignore_ocaml.ts +1 -0
  44. package/project/.sdk/src/cmp/ocaml/Main_ocaml.ts +7 -3
  45. package/project/.sdk/src/cmp/py/Config_py.ts +82 -1
  46. package/project/.sdk/src/cmp/py/Main_py.ts +44 -0
  47. package/project/.sdk/src/cmp/py/fragment/Main.fragment.py +2 -0
  48. package/project/.sdk/src/cmp/swift/Main_swift.ts +10 -0
  49. package/project/.sdk/src/cmp/swift/Package_swift.ts +13 -1
  50. package/project/.sdk/src/cmp/ts/Config_ts.ts +42 -17
  51. package/project/.sdk/src/cmp/ts/fragment/Config.data.fragment.ts +13 -1
  52. package/project/.sdk/src/cmp/ts/fragment/Config.fragment.ts +13 -1
  53. package/project/.sdk/tm/c/Makefile +38 -3
  54. package/project/.sdk/tm/c/tests/omni_resolver.h +361 -0
  55. package/project/.sdk/tm/c/tests/omni_smoke_test.c +237 -0
  56. package/project/.sdk/tm/c/tests/primary_corpus_test.c +205 -284
  57. package/project/.sdk/tm/c/tests/struct_corpus_test.c +292 -212
  58. package/project/.sdk/tm/c/tests/vendor/omni/json.c +811 -0
  59. package/project/.sdk/tm/c/tests/vendor/omni/omni.h +240 -0
  60. package/project/.sdk/tm/c/tests/vendor/omni/runner.c +940 -0
  61. package/project/.sdk/tm/c/tests/vendor/omni/util.c +351 -0
  62. package/project/.sdk/tm/c/utility/struct/utility.c +7 -2
  63. package/project/.sdk/tm/clojure/test/sdk/test/omni.clj +401 -0
  64. package/project/.sdk/tm/clojure/test/sdk/test/omni_smoke.clj +81 -0
  65. package/project/.sdk/tm/clojure/test/sdk/test/primary.clj +92 -58
  66. package/project/.sdk/tm/clojure/test/sdk/test/struct_corpus.clj +122 -149
  67. package/project/.sdk/tm/clojure/test/sdk/test_runner.clj +8 -3
  68. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/json.clj +145 -0
  69. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/runner.clj +445 -0
  70. package/project/.sdk/tm/clojure/test/vendor/omni/voxgig/omni/util.clj +145 -0
  71. package/project/.sdk/tm/cpp/Makefile +5 -1
  72. package/project/.sdk/tm/cpp/test/omni_resolver.hpp +473 -0
  73. package/project/.sdk/tm/cpp/test/omni_smoke_test.cpp +209 -0
  74. package/project/.sdk/tm/cpp/test/primary_utility_test.cpp +243 -184
  75. package/project/.sdk/tm/cpp/test/runner_support.hpp +68 -181
  76. package/project/.sdk/tm/cpp/test/struct_corpus_test.cpp +183 -56
  77. package/project/.sdk/tm/cpp/test/vendor/omni/json.hpp +406 -0
  78. package/project/.sdk/tm/cpp/test/vendor/omni/omni.hpp +751 -0
  79. package/project/.sdk/tm/cpp/test/vendor/omni/util.hpp +256 -0
  80. package/project/.sdk/tm/cpp/utility/pipeline.hpp +7 -1
  81. package/project/.sdk/tm/csharp/test/OmniResolver.cs +491 -0
  82. package/project/.sdk/tm/csharp/test/OmniSmokeTest.cs +106 -0
  83. package/project/.sdk/tm/csharp/test/PrimaryUtilityTest.cs +299 -316
  84. package/project/.sdk/tm/csharp/test/Runner.cs +104 -269
  85. package/project/.sdk/tm/csharp/test/StructUtilityTest.cs +535 -724
  86. package/project/.sdk/tm/csharp/test/vendor/omni/Runner.cs +864 -0
  87. package/project/.sdk/tm/csharp/test/vendor/omni/Util.cs +347 -0
  88. package/project/.sdk/tm/csharp/utility/MakeSpec.cs +3 -1
  89. package/project/.sdk/tm/csharp/utility/PrepareMethod.cs +6 -1
  90. package/project/.sdk/tm/csharp/utility/struct/Struct.cs +21 -5
  91. package/project/.sdk/tm/dart/test/omni.dart +520 -0
  92. package/project/.sdk/tm/dart/test/omni_smoke_test.dart +143 -0
  93. package/project/.sdk/tm/dart/test/primary_test.dart +86 -28
  94. package/project/.sdk/tm/dart/test/struct_test.dart +438 -11
  95. package/project/.sdk/tm/dart/test/vendor/omni/omni.dart +7 -0
  96. package/project/.sdk/tm/dart/test/vendor/omni/runner.dart +653 -0
  97. package/project/.sdk/tm/dart/test/vendor/omni/util.dart +232 -0
  98. package/project/.sdk/tm/elixir/Makefile +11 -3
  99. package/project/.sdk/tm/elixir/test/omni_smoke_test.exs +117 -0
  100. package/project/.sdk/tm/elixir/test/primary_utility_test.exs +341 -16
  101. package/project/.sdk/tm/elixir/test/struct_corpus_test.exs +554 -9
  102. package/project/.sdk/tm/elixir/test/support/omni.ex +377 -0
  103. package/project/.sdk/tm/elixir/test/vendor/omni/json.ex +122 -0
  104. package/project/.sdk/tm/elixir/test/vendor/omni/runner.ex +623 -0
  105. package/project/.sdk/tm/elixir/test/vendor/omni/util.ex +187 -0
  106. package/project/.sdk/tm/go/core/context.go +32 -16
  107. package/project/.sdk/tm/go/feature/secrets/plugin/capability.go +261 -0
  108. package/project/.sdk/tm/go/feature/secrets/plugin/catalog.go +78 -0
  109. package/project/.sdk/tm/go/feature/secrets/plugin/config.go +652 -0
  110. package/project/.sdk/tm/go/feature/secrets/plugin/depend.go +250 -0
  111. package/project/.sdk/tm/go/feature/secrets/plugin/env.go +194 -0
  112. package/project/.sdk/tm/go/feature/secrets/plugin/export.go +80 -0
  113. package/project/.sdk/tm/go/feature/secrets/plugin/graph.go +238 -0
  114. package/project/.sdk/tm/go/feature/secrets/plugin/host.go +1575 -0
  115. package/project/.sdk/tm/go/feature/secrets/plugin/order.go +248 -0
  116. package/project/.sdk/tm/go/feature/secrets/plugin/point.go +184 -0
  117. package/project/.sdk/tm/go/feature/secrets/plugin/ref.go +123 -0
  118. package/project/.sdk/tm/go/feature/secrets/plugin/resolve.go +79 -0
  119. package/project/.sdk/tm/go/feature/secrets/plugin/types.go +296 -0
  120. package/project/.sdk/tm/go/feature/secrets/plugin/util.go +87 -0
  121. package/project/.sdk/tm/go/feature/secrets/plugin/version.go +161 -0
  122. package/project/.sdk/tm/go/feature/secrets/plugins/aws/aws.go +292 -0
  123. package/project/.sdk/tm/go/feature/secrets/plugins/aws/sigv4.go +201 -0
  124. package/project/.sdk/tm/go/feature/secrets/plugins/azuresecrets/azuresecrets.go +187 -0
  125. package/project/.sdk/tm/go/feature/secrets/plugins/boru/boru.go +184 -0
  126. package/project/.sdk/tm/go/feature/secrets/plugins/doppler/doppler.go +114 -0
  127. package/project/.sdk/tm/go/feature/secrets/plugins/gcpsecrets/gcpsecrets.go +156 -0
  128. package/project/.sdk/tm/go/feature/secrets/plugins/hashicorp/hashicorp.go +209 -0
  129. package/project/.sdk/tm/go/feature/secrets/plugins/httpjson/httpjson.go +241 -0
  130. package/project/.sdk/tm/go/feature/secrets/plugins/infisical/infisical.go +151 -0
  131. package/project/.sdk/tm/go/feature/secrets/plugins/onepassword/onepassword.go +152 -0
  132. package/project/.sdk/tm/go/feature/secrets/plugins/secretspec/secretspec.go +143 -0
  133. package/project/.sdk/tm/go/feature/secrets/sekreto/addr.go +120 -0
  134. package/project/.sdk/tm/go/feature/secrets/sekreto/providers.go +439 -0
  135. package/project/.sdk/tm/go/feature/secrets/sekreto/sekreto.go +685 -0
  136. package/project/.sdk/tm/go/feature/secrets_feature.go +675 -0
  137. package/project/.sdk/tm/go/src/feature/secrets/.gitkeep +0 -0
  138. package/project/.sdk/tm/go/test/feature/secrets/secrets_feature_test.go +799 -0
  139. package/project/.sdk/tm/go/test/omni/omni.go +897 -0
  140. package/project/.sdk/tm/go/test/omni/util.go +360 -0
  141. package/project/.sdk/tm/go/test/omniresolver_test.go +748 -0
  142. package/project/.sdk/tm/go/test/omnismoke_test.go +112 -0
  143. package/project/.sdk/tm/go/test/primary_utility_test.go +123 -191
  144. package/project/.sdk/tm/go/test/struct_utility_test.go +323 -16
  145. package/project/.sdk/tm/go/test/testsupport_test.go +294 -0
  146. package/project/.sdk/tm/go/utility/make_options.go +8 -1
  147. package/project/.sdk/tm/go/utility/prepare_method.go +5 -1
  148. package/project/.sdk/tm/go/utility/struct/voxgigstruct.go +2 -2
  149. package/project/.sdk/tm/java/test/OmniResolver.java +355 -0
  150. package/project/.sdk/tm/java/test/OmniSmokeTest.java +99 -0
  151. package/project/.sdk/tm/java/test/PrimaryUtilityTest.java +254 -280
  152. package/project/.sdk/tm/java/test/RunnerSupport.java +9 -194
  153. package/project/.sdk/tm/java/test/StructCorpusTest.java +119 -42
  154. package/project/.sdk/tm/java/test/vendor/omni/Json.java +287 -0
  155. package/project/.sdk/tm/java/test/vendor/omni/Runner.java +851 -0
  156. package/project/.sdk/tm/java/test/vendor/omni/Util.java +322 -0
  157. package/project/.sdk/tm/java/utility/MakeSpec.java +3 -1
  158. package/project/.sdk/tm/java/utility/PrepareMethod.java +5 -5
  159. package/project/.sdk/tm/java/utility/struct/Struct.java +17 -4
  160. package/project/.sdk/tm/js/src/utility/StructUtility.js +3 -3
  161. package/project/.sdk/tm/js/test/omni.js +251 -0
  162. package/project/.sdk/tm/js/test/omni.test.js +105 -0
  163. package/project/.sdk/tm/js/test/utility/PrimaryUtility.test.js +6 -2
  164. package/project/.sdk/tm/js/test/utility/StructUtility.test.js +27 -2
  165. package/project/.sdk/tm/js/test/vendor/omni/index.js +77 -0
  166. package/project/.sdk/tm/js/test/vendor/omni/runner.js +613 -0
  167. package/project/.sdk/tm/js/test/vendor/omni/util.js +212 -0
  168. package/project/.sdk/tm/kotlin/core/Utility.kt +1 -1
  169. package/project/.sdk/tm/kotlin/test/OmniResolver.kt +343 -0
  170. package/project/.sdk/tm/kotlin/test/OmniSmokeTest.kt +100 -0
  171. package/project/.sdk/tm/kotlin/test/PrimaryUtilityTest.kt +244 -262
  172. package/project/.sdk/tm/kotlin/test/RunnerSupport.kt +9 -178
  173. package/project/.sdk/tm/kotlin/test/StructCorpusTest.kt +121 -32
  174. package/project/.sdk/tm/kotlin/test/vendor/omni/Json.kt +264 -0
  175. package/project/.sdk/tm/kotlin/test/vendor/omni/Runner.kt +615 -0
  176. package/project/.sdk/tm/kotlin/test/vendor/omni/Util.kt +139 -0
  177. package/project/.sdk/tm/kotlin/utility/MakeSpecUrl.kt +6 -3
  178. package/project/.sdk/tm/kotlin/utility/Prepare.kt +6 -6
  179. package/project/.sdk/tm/kotlin/utility/struct/Struct.kt +18 -2
  180. package/project/.sdk/tm/lean/Makefile +12 -5
  181. package/project/.sdk/tm/lean/src/SdkUtility.lean +14 -1
  182. package/project/.sdk/tm/lean/test/OmniResolver.lean +358 -0
  183. package/project/.sdk/tm/lean/test/OmniSmoke.lean +174 -0
  184. package/project/.sdk/tm/lean/test/StructCorpus.lean +245 -574
  185. package/project/.sdk/tm/lean/test/TPrimaryUtility.lean +155 -291
  186. package/project/.sdk/tm/lean/test/vendor/omni/Omni.lean +997 -0
  187. package/project/.sdk/tm/lua/test/omni.lua +456 -0
  188. package/project/.sdk/tm/lua/test/omni_smoke_test.lua +103 -0
  189. package/project/.sdk/tm/lua/test/primary_utility_test.lua +250 -509
  190. package/project/.sdk/tm/lua/test/struct_utility_test.lua +161 -70
  191. package/project/.sdk/tm/lua/test/vendor/omni/json.lua +268 -0
  192. package/project/.sdk/tm/lua/test/vendor/omni/regex.lua +385 -0
  193. package/project/.sdk/tm/lua/test/vendor/omni/runner.lua +641 -0
  194. package/project/.sdk/tm/lua/test/vendor/omni/util.lua +282 -0
  195. package/project/.sdk/tm/lua/utility/prepare_method.lua +5 -1
  196. package/project/.sdk/tm/lua/utility/struct/regex.lua +663 -0
  197. package/project/.sdk/tm/lua/utility/struct/struct.lua +660 -420
  198. package/project/.sdk/tm/ocaml/Makefile +37 -12
  199. package/project/.sdk/tm/ocaml/test/omni_resolver.ml +284 -0
  200. package/project/.sdk/tm/ocaml/test/omni_smoke_test.ml +169 -0
  201. package/project/.sdk/tm/ocaml/test/primary_utility_test.ml +84 -100
  202. package/project/.sdk/tm/ocaml/test/struct_corpus.ml +225 -201
  203. package/project/.sdk/tm/ocaml/test/vendor/omni/omni.ml +1157 -0
  204. package/project/.sdk/tm/perl/lib/Voxgig/Struct.pm +88 -12
  205. package/project/.sdk/tm/perl/t/omni.pm +647 -0
  206. package/project/.sdk/tm/perl/t/omni_smoke.t +87 -0
  207. package/project/.sdk/tm/perl/t/primary_utility.t +189 -487
  208. package/project/.sdk/tm/perl/t/struct_utility.t +455 -389
  209. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Runner.pm +649 -0
  210. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni/Util.pm +253 -0
  211. package/project/.sdk/tm/perl/t/vendor/omni/Voxgig/Omni.pm +24 -0
  212. package/project/.sdk/tm/perl/utility/prepare_method.pm +7 -2
  213. package/project/.sdk/tm/php/test/Omni.php +691 -0
  214. package/project/.sdk/tm/php/test/OmniSmokeTest.php +93 -0
  215. package/project/.sdk/tm/php/test/PrimaryUtilityTest.php +210 -571
  216. package/project/.sdk/tm/php/test/StructUtilityTest.php +320 -342
  217. package/project/.sdk/tm/php/test/vendor/omni/Runner.php +644 -0
  218. package/project/.sdk/tm/php/test/vendor/omni/Util.php +283 -0
  219. package/project/.sdk/tm/php/utility/MakeSpec.php +10 -3
  220. package/project/.sdk/tm/php/utility/PrepareBody.php +7 -1
  221. package/project/.sdk/tm/php/utility/PrepareMethod.php +6 -2
  222. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/__init__.py +36 -0
  223. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/capability.py +141 -0
  224. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/catalog.py +50 -0
  225. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/config.py +333 -0
  226. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/depend.py +198 -0
  227. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/env.py +147 -0
  228. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/export.py +52 -0
  229. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/graph.py +139 -0
  230. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/host.py +1053 -0
  231. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/order.py +171 -0
  232. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/point.py +95 -0
  233. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/ref.py +116 -0
  234. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/resolve.py +59 -0
  235. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/types.py +87 -0
  236. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_plugin/version.py +112 -0
  237. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/__init__.py +74 -0
  238. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/addr.py +116 -0
  239. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/aws.py +192 -0
  240. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/azuresecrets.py +120 -0
  241. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/boru.py +140 -0
  242. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/doppler.py +62 -0
  243. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/gcpsecrets.py +101 -0
  244. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/hashicorp.py +152 -0
  245. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/httpjson.py +115 -0
  246. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/infisical.py +92 -0
  247. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/onepassword.py +101 -0
  248. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/secretspec.py +119 -0
  249. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/plugins/sigv4.py +125 -0
  250. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/providers.py +211 -0
  251. package/project/.sdk/tm/py/pkg/feature/secrets/voxgig_sekreto/sekreto.py +455 -0
  252. package/project/.sdk/tm/py/pkg/feature/secrets_feature.py +467 -0
  253. package/project/.sdk/tm/py/pkg/utility/prepare_method.py +5 -1
  254. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/__init__.py +0 -2
  255. package/project/.sdk/tm/py/pkg/utility/voxgig_struct/voxgig_struct.py +780 -529
  256. package/project/.sdk/tm/py/src/feature/secrets/.gitkeep +0 -0
  257. package/project/.sdk/tm/py/test/feature/__init__.py +0 -0
  258. package/project/.sdk/tm/py/test/feature/secrets/__init__.py +0 -0
  259. package/project/.sdk/tm/py/test/feature/secrets/test_secrets.py +337 -0
  260. package/project/.sdk/tm/py/test/omni.py +415 -0
  261. package/project/.sdk/tm/py/test/test_omni_smoke.py +74 -0
  262. package/project/.sdk/tm/py/test/test_primary_utility.py +144 -668
  263. package/project/.sdk/tm/py/test/test_struct_utility.py +74 -27
  264. package/project/.sdk/tm/py/test/voxgig_omni/__init__.py +62 -0
  265. package/project/.sdk/tm/py/test/voxgig_omni/runner.py +566 -0
  266. package/project/.sdk/tm/py/test/voxgig_omni/util.py +237 -0
  267. package/project/.sdk/tm/rb/test/omni.rb +505 -0
  268. package/project/.sdk/tm/rb/test/omni_smoke_test.rb +72 -0
  269. package/project/.sdk/tm/rb/test/primary_utility_test.rb +174 -560
  270. package/project/.sdk/tm/rb/test/struct_utility_test.rb +13 -7
  271. package/project/.sdk/tm/rb/test/vendor/omni/runner.rb +493 -0
  272. package/project/.sdk/tm/rb/test/vendor/omni/util.rb +199 -0
  273. package/project/.sdk/tm/rb/test/vendor/omni/voxgig_omni.rb +15 -0
  274. package/project/.sdk/tm/rb/utility/prepare_method.rb +5 -1
  275. package/project/.sdk/tm/rust/tests/common/mod.rs +19 -242
  276. package/project/.sdk/tm/rust/tests/omni_resolver/mod.rs +888 -0
  277. package/project/.sdk/tm/rust/tests/omni_smoke_test.rs +286 -0
  278. package/project/.sdk/tm/rust/tests/primary_utility_test.rs +318 -312
  279. package/project/.sdk/tm/rust/tests/struct_utility_test.rs +66 -28
  280. package/project/.sdk/tm/rust/tests/vendor/omni/json.rs +412 -0
  281. package/project/.sdk/tm/rust/tests/vendor/omni/mod.rs +38 -0
  282. package/project/.sdk/tm/rust/tests/vendor/omni/regex.rs +392 -0
  283. package/project/.sdk/tm/rust/tests/vendor/omni/runner.rs +1001 -0
  284. package/project/.sdk/tm/rust/tests/vendor/omni/util.rs +161 -0
  285. package/project/.sdk/tm/rust/utility/prepare_method.rs +5 -1
  286. package/project/.sdk/tm/scala/Makefile +16 -6
  287. package/project/.sdk/tm/scala/sdktest/OmniResolver.scala +497 -0
  288. package/project/.sdk/tm/scala/sdktest/OmniSmoke.scala +192 -0
  289. package/project/.sdk/tm/scala/sdktest/PrimaryCorpus.scala +47 -19
  290. package/project/.sdk/tm/scala/sdktest/StructCorpus.scala +0 -0
  291. package/project/.sdk/tm/scala/sdktest/vendor/omni/Json.scala +229 -0
  292. package/project/.sdk/tm/scala/sdktest/vendor/omni/Runner.scala +552 -0
  293. package/project/.sdk/tm/scala/sdktest/vendor/omni/Util.scala +104 -0
  294. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Constants.swift +10 -0
  295. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Inject.swift +28 -5
  296. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Injection.swift +5 -1
  297. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Minor.swift +4 -1
  298. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/Struct/Validate.swift +15 -5
  299. package/project/.sdk/tm/swift/Sources/ProjectNameSDK/utility/Prepare.swift +6 -1
  300. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniResolver.swift +474 -0
  301. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/OmniSmokeTest.swift +107 -0
  302. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/PrimaryUtilityTest.swift +141 -178
  303. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/Runner.swift +17 -113
  304. package/project/.sdk/tm/swift/Tests/ProjectNameSDKTests/StructUtilityTest.swift +295 -446
  305. package/project/.sdk/tm/swift/Tests/vendor/omni/Json.swift +364 -0
  306. package/project/.sdk/tm/swift/Tests/vendor/omni/Runner.swift +730 -0
  307. package/project/.sdk/tm/swift/Tests/vendor/omni/Util.swift +162 -0
  308. package/project/.sdk/tm/ts/src/feature/secrets/SecretsFeature.ts +7 -0
  309. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Capability.ts +148 -0
  310. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Catalog.ts +55 -0
  311. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Config.ts +344 -0
  312. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Depend.ts +205 -0
  313. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Env.ts +138 -0
  314. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Export.ts +46 -0
  315. package/project/.sdk/tm/ts/src/feature/secrets/plugin/FeatureHost.ts +349 -0
  316. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Graph.ts +181 -0
  317. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Host.ts +1132 -0
  318. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Order.ts +177 -0
  319. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Point.ts +119 -0
  320. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Ref.ts +102 -0
  321. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Resolve.ts +61 -0
  322. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Types.ts +112 -0
  323. package/project/.sdk/tm/ts/src/feature/secrets/plugin/Version.ts +100 -0
  324. package/project/.sdk/tm/ts/src/feature/secrets/plugin/index.ts +37 -0
  325. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +163 -30
  326. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +27 -22
  327. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/aws.ts +26 -36
  328. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/azuresecrets.ts +19 -21
  329. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/boru.ts +36 -17
  330. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/doppler.ts +14 -21
  331. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/gcpsecrets.ts +27 -27
  332. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/hashicorp.ts +25 -39
  333. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/httpjson.ts +99 -0
  334. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/infisical.ts +14 -16
  335. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{provider → plugins}/onepassword.ts +15 -22
  336. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/plugins/secretspec.ts +98 -0
  337. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/{Sigv4.ts → plugins/sigv4.ts} +7 -6
  338. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +97 -23
  339. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/builtin.ts +37 -0
  340. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +4 -17
  341. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +4 -16
  342. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +11 -25
  343. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +6 -23
  344. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +106 -39
  345. package/project/.sdk/tm/ts/src/utility/StructUtility.ts +3 -3
  346. package/project/.sdk/tm/ts/test/omni.ts +104 -32
  347. package/project/.sdk/tm/ts/test/utility/StructUtility.test.ts +27 -0
  348. package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +32 -5
  349. package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +2 -2
  350. package/project/.sdk/tm/ts/test/vendor/omni/index.ts +2 -2
  351. package/project/.sdk/tm/zig/test/primary_utility_test.zig +1 -1
  352. package/project/.sdk/tm/zig/test/struct_runner.zig +5 -4
  353. package/project/sdkgen-package.json +1 -1
  354. package/src/action/doctor.ts +66 -2
  355. package/src/helpers/naming.ts +4 -2
  356. package/project/.sdk/tm/c/tests/runner.h +0 -274
  357. package/project/.sdk/tm/cpp/test/struct_runner.hpp +0 -314
  358. package/project/.sdk/tm/csharp/test/StructRunner.cs +0 -276
  359. package/project/.sdk/tm/dart/test/runner.dart +0 -406
  360. package/project/.sdk/tm/dart/test/struct_corpus.dart +0 -531
  361. package/project/.sdk/tm/elixir/test/support/struct_corpus.ex +0 -1088
  362. package/project/.sdk/tm/go/test/runner_test.go +0 -629
  363. package/project/.sdk/tm/go/test/struct_runner_test.go +0 -1094
  364. package/project/.sdk/tm/java/test/StructRunner.java +0 -281
  365. package/project/.sdk/tm/js/test/runner.js +0 -387
  366. package/project/.sdk/tm/kotlin/test/StructRunner.kt +0 -177
  367. package/project/.sdk/tm/lua/test/struct_runner.lua +0 -602
  368. package/project/.sdk/tm/ocaml/test/corpus_runner.ml +0 -185
  369. package/project/.sdk/tm/perl/t/struct_runner.pm +0 -275
  370. package/project/.sdk/tm/php/test/StructRunner.php +0 -275
  371. package/project/.sdk/tm/py/test/struct_runner.py +0 -411
  372. package/project/.sdk/tm/rb/test/struct_runner.rb +0 -309
  373. package/project/.sdk/tm/rust/tests/struct_runner/mod.rs +0 -424
  374. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/Registry.ts +0 -90
  375. package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/http.ts +0 -66
  376. package/project/.sdk/tm/ts/test/vendor/omni/compat.ts +0 -188
@@ -0,0 +1,171 @@
1
+ # VENDORED: @voxgig/plugin 0.1.6 (python/voxgig_plugin/order.py)
2
+ # Source: https://github.com/voxgig/plugin @ 8d8968afc0a2008fbd795b41ab166307d989f02a [tag: sdk-20260904-1610-0]
3
+ # License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ """Ordering (section 7) - one rule, one place.
5
+
6
+ sdkgen grew two special cases in `makeOptions` (`test`, then `station`)
7
+ and the third was not far off. This sort is the whole replacement, and the
8
+ tiers are in this order for a reason:
9
+
10
+ 1 constraints before/after edges, by ref or by name
11
+ 2 bands integer, lower first, default 0
12
+ 3 declaration ties break by `pos`
13
+
14
+ CONSTRAINTS BEAT BANDS precisely so the correct tool wins when both are
15
+ present. A band expresses a genuine cross-cutting layer; a constraint
16
+ expresses a relationship between two specific things; and a band chosen by
17
+ trial and error to fix an ordering bug is a bug wearing a number.
18
+ """
19
+
20
+ from .types import fail
21
+ from .ref import parse_ref
22
+
23
+
24
+ def resolve_order(bindings, pin=None):
25
+ nodes = list(bindings)
26
+ byref = {b['ref']: b for b in nodes}
27
+
28
+ # Constraints are edges. A constraint naming an ABSENT binding is
29
+ # satisfied VACUOUSLY (section 7) - a plugin ordered `after: 'test'`
30
+ # must load in a host with no test plugin. That is sdkgen's __after__
31
+ # behaviour, kept.
32
+ edges = {b['ref']: [] for b in nodes}
33
+
34
+ for b in nodes:
35
+ block = b.get('order') or {}
36
+ # An ABSENT constraint and an EMPTY LIST are both "no constraint".
37
+ if declared(block.get('after')):
38
+ for target in targets(block['after'], nodes):
39
+ edges[target].append(b['ref'])
40
+ if declared(block.get('before')):
41
+ for target in targets(block['before'], nodes):
42
+ edges[b['ref']].append(target)
43
+
44
+ # Stable topological sort. Among ready nodes, band first (lower runs
45
+ # first), then `pos` - the position the DOCUMENT visibly states, not
46
+ # the order instances happened to load and not the incarnation `seq`.
47
+ indeg = {b['ref']: 0 for b in nodes}
48
+ for source in edges:
49
+ for target in edges[source]:
50
+ indeg[target] = indeg.get(target, 0) + 1
51
+
52
+ out = []
53
+ ready = [b for b in nodes if 0 == indeg[b['ref']]]
54
+
55
+ while 0 < len(ready):
56
+ ready.sort(key=lambda b: (band(b), b.get('pos') or 0))
57
+ nxt = ready.pop(0)
58
+ out.append(nxt['ref'])
59
+ for target in edges[nxt['ref']]:
60
+ indeg[target] -= 1
61
+ if 0 == indeg[target]:
62
+ ready.append(byref[target])
63
+
64
+ if len(out) != len(nodes):
65
+ stuck = [b['ref'] for b in nodes if b['ref'] not in out]
66
+ fail('plugin_order_cycle',
67
+ 'before/after constraints cycle: ' + ' -> '.join(stuck),
68
+ {'cycle': stuck})
69
+
70
+ return applypin(out, edges, pin)
71
+
72
+
73
+ def band(b):
74
+ block = b.get('order') or {}
75
+ value = block.get('band')
76
+ return value if isinstance(value, int) and not isinstance(value, bool) else 0
77
+
78
+
79
+ def declared(spec):
80
+ """Was a constraint stated? An absent value and an EMPTY LIST are
81
+ both no-constraint - and an empty list is truthy in most languages,
82
+ which is exactly how this class of bug survives."""
83
+ if spec is None:
84
+ return False
85
+ if isinstance(spec, list):
86
+ return any('' != one for one in spec)
87
+ return '' != spec
88
+
89
+
90
+ def targets(spec, nodes):
91
+ """Matching is by REF, or by NAME across all of that definition's
92
+ instances (section 7) - which is the whole reason the two spellings
93
+ exist."""
94
+ hit = []
95
+ # One spelling or a LIST of them. A list fans out to the union of what
96
+ # each names, so after: ['a','b'] means after BOTH, and the same
97
+ # instance named twice - once by name, once by ref - is one edge.
98
+ specs = spec if isinstance(spec, list) else [spec]
99
+ for one in specs:
100
+ for b in nodes:
101
+ if b['ref'] in hit:
102
+ continue
103
+ if b['ref'] == one:
104
+ hit.append(b['ref'])
105
+ continue
106
+ if parse_ref(b['ref'])['name'] == one:
107
+ hit.append(b['ref'])
108
+ return hit
109
+
110
+
111
+ def applypin(order, edges, pin=None):
112
+ """A PIN IS NOT A CONSTRAINT (section 7).
113
+
114
+ Constraints and bands are negotiable by definition - they are what
115
+ plugins and documents say they want, and the sort's job is to satisfy
116
+ them all. A pin is the host stating a structural invariant of its own
117
+ architecture, which is a different kind of claim and must not lose a
118
+ tie to a document.
119
+
120
+ So a pin PLACES the binding at the named end, and an ordering that
121
+ would move it away is `plugin_order_pinned` - rejected, not honoured
122
+ into a broken wrap. Station's transport adapter must sit immediately
123
+ outside the base transport; an `order` list that moves it has to be an
124
+ error rather than a preference.
125
+ """
126
+ if None is pin:
127
+ return order
128
+ out = list(order)
129
+
130
+ # SORTED, not insertion order. A pin map is data - it can arrive from
131
+ # a host's own construction options in any order, and two names
132
+ # pinned to the same end are order-sensitive (`{b:'first',
133
+ # a:'first'}` and `{a:'first', b:'first'}` give different results).
134
+ # Python dicts are insertion-ordered and a Go map has no order at
135
+ # all, so leaving it unstated made the same declaration mean
136
+ # different things in different ports.
137
+ for name in sorted(pin):
138
+ want = pin[name]
139
+ idx = -1
140
+ for i, ref in enumerate(out):
141
+ if parse_ref(ref)['name'] == name:
142
+ idx = i
143
+ break
144
+ if -1 == idx:
145
+ continue
146
+
147
+ # `first`/`outermost` is index 0; `last`/`innermost` is the end.
148
+ # Section 6.2 makes the first chain binding outermost, which is
149
+ # why the vocabulary is positional and why the two spellings pair
150
+ # this way.
151
+ wantfirst = 'first' == want or 'outermost' == want
152
+ ref = out.pop(idx)
153
+ if wantfirst:
154
+ out.insert(0, ref)
155
+ else:
156
+ out.append(ref)
157
+
158
+ # Now check that the placement did not break a constraint. This is the
159
+ # half that makes a pin a rejection rather than an override: the host
160
+ # wins on position, but it does not get to silently discard a
161
+ # relationship a plugin declared.
162
+ at = {ref: i for i, ref in enumerate(out)}
163
+ for source in edges:
164
+ for target in edges[source]:
165
+ if at[source] > at[target]:
166
+ fail('plugin_order_pinned',
167
+ 'a pin would move a binding an ordering constrains: ' +
168
+ source + ' must precede ' + target,
169
+ {'before': source, 'after': target})
170
+
171
+ return out
@@ -0,0 +1,95 @@
1
+ # VENDORED: @voxgig/plugin 0.1.6 (python/voxgig_plugin/point.py)
2
+ # Source: https://github.com/voxgig/plugin @ 8d8968afc0a2008fbd795b41ab166307d989f02a [tag: sdk-20260904-1610-0]
3
+ # License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ """Extension points (section 6). Three kinds, chosen because they are what
5
+ the two existing systems actually needed, and no more.
6
+
7
+ A PLUGIN NEVER MUTATES THE HOST. That inversion is what makes deactivation
8
+ possible: sdkgen's `utility.fetcher = wrapped` is not undoable, but "this
9
+ instance holds slot 3 of the request chain" is undoable in O(1). OSGi named
10
+ it the whiteboard pattern in 2004, in a paper called *Listeners Considered
11
+ Harmful*, and for exactly this reason.
12
+ """
13
+
14
+ import functools
15
+
16
+ from .types import fail
17
+
18
+
19
+ # Section 6.1: "fan-out" is not one answer but four. In a language with
20
+ # asynchrony, "call every binding" hides a decision - start them all and
21
+ # wait, await each in turn, or do not wait - and a design that leaves it
22
+ # unsaid gets four different answers from four ports, in the concurrency
23
+ # behaviour of production code no corpus entry happens to cover.
24
+ MODES = ['emit', 'parallel', 'serial', 'bail']
25
+
26
+
27
+ def emit(bindings, mode, arg):
28
+ """Fan-out. Return values are ignored except in `bail`."""
29
+ if 'bail' == mode:
30
+ # Stops at the first binding that RETURNS A VALUE - the "handled,
31
+ # stop" case. A `None` RETURN DECLINES (section 6.1): python has
32
+ # one way to say nothing, and the model's rule is written to that
33
+ # rather than to JavaScript's null/undefined pair.
34
+ for b in bindings:
35
+ value = b['fn'](arg)
36
+ if None is not value:
37
+ return value
38
+ return None
39
+
40
+ errors = []
41
+ for b in bindings:
42
+ try:
43
+ b['fn'](arg)
44
+ except Exception as err:
45
+ # `emit` raises synchronously; the collecting modes gather.
46
+ if 'emit' == mode:
47
+ raise
48
+ errors.append(err)
49
+ return None if 'emit' == mode else errors
50
+
51
+
52
+ def compose(bindings, base):
53
+ """Composition: b1(b2(b3(base))), FIRST BINDING OUTERMOST (section
54
+ 6.2).
55
+
56
+ Recomputed by the host whenever the live set changes, and cached
57
+ between changes. Plugins receive `next` as an argument; they never see
58
+ or store the previous value of anything. A plugin that stashes `next`
59
+ and calls it after deactivation is a bug the host cannot prevent, and
60
+ this says so rather than pretending otherwise.
61
+ """
62
+ nxt = base
63
+ for i in range(len(bindings) - 1, -1, -1):
64
+ fn = bindings[i]['fn']
65
+ inner = nxt
66
+ # `inner=inner, fn=fn` binds the CURRENT values into the default
67
+ # arguments. Python closures capture the variable, not the value,
68
+ # so a plain closure here would leave every layer calling the last
69
+ # one - the single most common way to get this loop wrong.
70
+ nxt = (lambda *args, fn=fn, inner=inner: fn(inner, *args))
71
+ return nxt
72
+
73
+
74
+ def provider(bindings, spec):
75
+ """At most one live implementation (section 6.3). The winner is the
76
+ highest band, ties broken by ref sort, and THE LOSERS ARE VISIBLE
77
+ rather than silently ignored."""
78
+ if 0 == len(bindings):
79
+ return {'winner': None, 'shadowed': []}
80
+
81
+ if spec.get('exclusive') and 1 < len(bindings):
82
+ refs = sorted(b['ref'] for b in bindings)
83
+ fail('plugin_point_exclusive',
84
+ 'point is exclusive and has ' + str(len(bindings)) +
85
+ ' bindings: ' + ', '.join(refs),
86
+ {'refs': refs})
87
+
88
+ ranked = sorted(bindings, key=functools.cmp_to_key(rank))
89
+ return {'winner': ranked[0], 'shadowed': [b['ref'] for b in ranked[1:]]}
90
+
91
+
92
+ def rank(a, b):
93
+ if a['band'] != b['band']:
94
+ return b['band'] - a['band'] # HIGHEST band wins
95
+ return -1 if a['ref'] < b['ref'] else (1 if a['ref'] > b['ref'] else 0)
@@ -0,0 +1,116 @@
1
+ # VENDORED: @voxgig/plugin 0.1.6 (python/voxgig_plugin/ref.py)
2
+ # Source: https://github.com/voxgig/plugin @ 8d8968afc0a2008fbd795b41ab166307d989f02a [tag: sdk-20260904-1610-0]
3
+ # License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ """Identity: name+tag, written `name$tag` (section 4).
5
+
6
+ The four pure functions, and the whole of what `ref` pins. They are the
7
+ first thing a new port implements and the first corpus section it passes.
8
+ """
9
+
10
+ import re
11
+
12
+ from .types import fail
13
+
14
+ # Section 4: `^[a-zA-Z@][a-zA-Z0-9.~_\-/]*$`, max 1024.
15
+ #
16
+ # `\Z`, NOT `$`. PYTHON'S `$` ALSO MATCHES BEFORE A TRAILING NEWLINE, so
17
+ # `^...$` accepts "abc\n" as a plugin name - and nothing else in the
18
+ # grammar, in this file, or (until `ref/name#trailing-newline`) in the
19
+ # corpus would ever say so. The anchors in the design's grammar mean
20
+ # STRING start and end; ruby needs `\A`/`\z` for the same reason, and
21
+ # worse, since its `^`/`$` match at every line boundary.
22
+ NAME_RE = re.compile(r'^[a-zA-Z@][a-zA-Z0-9.~_\-/]*\Z')
23
+
24
+ # Section 4: `^[a-zA-Z0-9.~_-]+$`, max 1024, or empty.
25
+ #
26
+ # The asymmetry with a name is deliberate: a tag MAY start with a digit
27
+ # because auto-tagging assigns integer tags (`stripe$1`), and a tag admits
28
+ # neither `@` nor `/` because a name is a package specifier and a tag is
29
+ # not.
30
+ TAG_RE = re.compile(r'^[a-zA-Z0-9.~_-]+\Z')
31
+
32
+ MAX = 1024
33
+
34
+
35
+ def check_name(name):
36
+ if not isinstance(name, str):
37
+ return False
38
+ if 0 == len(name) or MAX < len(name):
39
+ return False
40
+ return None is not NAME_RE.match(name)
41
+
42
+
43
+ def check_tag(tag):
44
+ if not isinstance(tag, str):
45
+ return False
46
+ # The empty tag is an ordinary tag (section 4 rule 2). The
47
+ # single-instance case writes no tag and never learns tags exist.
48
+ if 0 == len(tag):
49
+ return True
50
+ if MAX < len(tag):
51
+ return False
52
+ return None is not TAG_RE.match(tag)
53
+
54
+
55
+ def parse_ref(text):
56
+ """`name$tag` -> the pair. Canonicalizing: `stripe$` and `stripe` both
57
+ give tag ''."""
58
+ if not isinstance(text, str):
59
+ fail('plugin_bad_name', 'ref must be a string')
60
+
61
+ # Split on the FIRST `$`. Nothing in the grammar decides this - `$` is
62
+ # in neither character class - so the corpus is the arbiter (section 4
63
+ # rule 5), and it picks the split that blames the part actually at
64
+ # fault: `a$b$c` is a good name with a bad tag, not the reverse.
65
+ cut = text.find('$')
66
+ name = text if -1 == cut else text[:cut]
67
+ tag = '' if -1 == cut else text[cut + 1:]
68
+
69
+ if not check_name(name):
70
+ fail('plugin_bad_name', 'invalid plugin name: ' + name, {'name': name})
71
+ if not check_tag(tag):
72
+ fail('plugin_bad_tag', 'invalid plugin tag: ' + tag,
73
+ {'name': name, 'tag': tag})
74
+
75
+ return {'name': name, 'tag': tag}
76
+
77
+
78
+ def format_ref(name, tag=None):
79
+ """The pair -> `name$tag`. An empty tag NEVER writes the separator,
80
+ which is the half of canonicalization format_ref owns: parse tolerates
81
+ `stripe$`, format never produces it, so a round trip is idempotent."""
82
+ tag = '' if None is tag else tag
83
+ if not check_name(name):
84
+ fail('plugin_bad_name', 'invalid plugin name: ' + str(name),
85
+ {'name': name})
86
+ if not check_tag(tag):
87
+ fail('plugin_bad_tag', 'invalid plugin tag: ' + str(tag),
88
+ {'name': name, 'tag': tag})
89
+ return name if '' == tag else name + '$' + tag
90
+
91
+
92
+ def canon_ref(text):
93
+ """The canonical spelling of a ref. Section 4 rule 5: ports must
94
+ canonicalize before comparison."""
95
+ ref = parse_ref(text)
96
+ return format_ref(ref['name'], ref['tag'])
97
+
98
+
99
+ def try_ref(text):
100
+ """The canonical ref this string denotes, or None if it denotes none -
101
+ the TOLERANT half of `canon_ref`, and the one a requirement name needs.
102
+
103
+ A REQUIREMENT NAME IS A CAPABILITY NAME FIRST (section 11.1), and
104
+ capability names are free-form: the design puts no grammar on them, so
105
+ `2fa` and `my cap` are perfectly good ones and neither is a well-formed
106
+ ref. `canon_ref` RAISES on those, so asking it "is this a ref?" made a
107
+ legal document kill the host. Answering None is the whole difference.
108
+ """
109
+ if not isinstance(text, str):
110
+ return None
111
+ cut = text.find('$')
112
+ name = text if -1 == cut else text[:cut]
113
+ tag = '' if -1 == cut else text[cut + 1:]
114
+ if not check_name(name) or not check_tag(tag):
115
+ return None
116
+ return name if '' == tag else name + '$' + tag
@@ -0,0 +1,59 @@
1
+ # VENDORED: @voxgig/plugin 0.1.6 (python/voxgig_plugin/resolve.py)
2
+ # Source: https://github.com/voxgig/plugin @ 8d8968afc0a2008fbd795b41ab166307d989f02a [tag: sdk-20260904-1610-0]
3
+ # License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ """Dynamic resolution (section 10.2) - name to candidate module ids.
5
+
6
+ PURE. It returns the ids a host WOULD try, in order; it does not load
7
+ anything. That separation is what lets the corpus pin resolution in every
8
+ language including those with no dynamic loading at all, and it is why
9
+ section 15.4 puts real module loading in per-port integration tests rather
10
+ than here.
11
+ """
12
+
13
+ DEFAULT_SOURCES = [
14
+ {'kind': 'module',
15
+ 'prefix': ['@voxgig/plugin-', 'voxgig-plugin-', 'plugin-', '']},
16
+ ]
17
+
18
+
19
+ def resolve_candidates(name, sources=None):
20
+ out = []
21
+
22
+ # A SCOPED NAME RESOLVES VERBATIM ONLY (section 10.2). `@acme/thing`
23
+ # is already a package id; prefixing it produces
24
+ # `@voxgig/plugin-@acme/thing`, which is not a thing that can exist.
25
+ if name.startswith('@'):
26
+ return [name]
27
+
28
+ entries = sources if sources else DEFAULT_SOURCES
29
+
30
+ for src in entries:
31
+ if 'module' == src.get('kind'):
32
+ prefixes = src.get('prefix') or ['']
33
+ if 0 == len(prefixes):
34
+ prefixes = ['']
35
+ for prefix in prefixes:
36
+ found = prefix + name
37
+ if found not in out:
38
+ out.append(found)
39
+ elif 'path' == src.get('kind'):
40
+ found = src['dir'].rstrip('/') + '/' + name
41
+ if found not in out:
42
+ out.append(found)
43
+
44
+ return out
45
+
46
+
47
+ def resolve_from(location):
48
+ """A MODULE PATH IS NOT A NAME (section 10.2). The ref grammar starts
49
+ a name with a letter or `@`, so `./local/thing` is not a ref and never
50
+ reaches candidate generation - seneca allows a path where a plugin
51
+ name goes, and this design deliberately does not, because a ref is an
52
+ ADDRESS WITHIN A HOST and a path is a LOCATION ON A DISK.
53
+
54
+ Loading from an explicit location is a separate field that bypasses
55
+ candidate generation entirely: `from` is passed to the resolver
56
+ verbatim, and a resolver that cannot honour a location raises
57
+ plugin_resolve_failed.
58
+ """
59
+ return [location]
@@ -0,0 +1,87 @@
1
+ # VENDORED: @voxgig/plugin 0.1.6 (python/voxgig_plugin/types.py)
2
+ # Source: https://github.com/voxgig/plugin @ 8d8968afc0a2008fbd795b41ab166307d989f02a [tag: sdk-20260904-1610-0]
3
+ # License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ """Shared types. Deliberately small: the design's section 19 budget says
5
+ the library owns naming, configuration, lifecycle, ordering, binding and
6
+ teardown, and nothing else.
7
+
8
+ PYTHON IS THE OTHER HALF OF P4'S PROVING PAIR (section 18): "the closest
9
+ dynamic analogue that is not JavaScript". It raises where the canonical
10
+ raises and go returns, so the interesting differences here are not about
11
+ errors — they are about the places JavaScript's coercion rules and
12
+ Python's disagree, and `True == 1` is the first of them.
13
+ """
14
+
15
+ import json
16
+
17
+
18
+ # Section 5.1's seven statuses, and no more. A port that adds an eighth is
19
+ # diverging. `loading` and `closing` are observable only from inside a
20
+ # callback or from another thread.
21
+ STATUSES = ['declared', 'loaded', 'pending', 'live', 'failed',
22
+ 'loading', 'closing']
23
+
24
+
25
+ # Section 12's detail fields, IN THIS FIXED ORDER.
26
+ #
27
+ # The order is part of the contract, not a formatting preference. An
28
+ # earlier draft named six fields while other sections promised
29
+ # diagnostics that had nowhere to go, which would have left each port
30
+ # inventing its own order and breaking message parity.
31
+ DETAIL_ORDER = [
32
+ 'host', 'ref', 'name', 'tag', 'point', 'key', 'capability',
33
+ 'range', 'version', 'match', 'candidates', 'cycle', 'holders',
34
+ 'refs', 'path', 'cause',
35
+ ]
36
+
37
+
38
+ def compactjson(value):
39
+ """JSON.stringify's output: compact, and NOT ascii-escaped.
40
+
41
+ `ensure_ascii=True` would render a non-ASCII value as `\\uXXXX` where
42
+ every other port prints the character, which breaks section 12
43
+ message parity on exactly the inputs least likely to be tested.
44
+ """
45
+ return json.dumps(value, separators=(',', ':'), ensure_ascii=False)
46
+
47
+
48
+ def formaterror(code, text, details=None):
49
+ """`plugin/<code>: <text> [<key>=<value> ...]`
50
+
51
+ Values render as COMPACT JSON, so a value containing a space or a
52
+ bracket cannot break the parse, and a list renders as a JSON array.
53
+ The bracket is absent entirely when no field applies.
54
+ """
55
+ details = details or {}
56
+ parts = []
57
+ for key in DETAIL_ORDER:
58
+ if key not in details:
59
+ continue
60
+ parts.append(key + '=' + compactjson(details[key]))
61
+ tail = '' if 0 == len(parts) else ' [' + ' '.join(parts) + ']'
62
+ return 'plugin/' + code + ': ' + text + tail
63
+
64
+
65
+ class PluginError(Exception):
66
+ """Every error carries a section 12 code. Ports compare by CODE and
67
+ never by message: wording is a port's own business, and pinning the
68
+ words would make every translation a corpus change. The FORMAT,
69
+ however, is pinned - a parseable message is what makes a log
70
+ searchable across twenty languages."""
71
+
72
+ def __init__(self, code, text, details=None):
73
+ super().__init__(formaterror(code, text, details))
74
+ self.code = code
75
+ self.text = text
76
+ self.details = details or {}
77
+
78
+
79
+ def fail(code, text, details=None):
80
+ raise PluginError(code, text, details)
81
+
82
+
83
+ def codeof(err):
84
+ """The section 12 code of an error, or '' for one this library did not
85
+ raise. The corpus compares by code, so the driver needs one place
86
+ that knows how to read it."""
87
+ return getattr(err, 'code', '')
@@ -0,0 +1,112 @@
1
+ # VENDORED: @voxgig/plugin 0.1.6 (python/voxgig_plugin/version.py)
2
+ # Source: https://github.com/voxgig/plugin @ 8d8968afc0a2008fbd795b41ab166307d989f02a [tag: sdk-20260904-1610-0]
3
+ # License: MIT (c) voxgig - see repository LICENSE. Do not edit: resync from upstream.
4
+ """Versions and ranges (section 11.2).
5
+
6
+ TWO FIELDS AND ONE PREDICATE. A capability declares `version`, a concrete
7
+ version. A requirement declares `range`. A requirement is satisfied when
8
+ the names match, the `match` passes, and:
9
+
10
+ the provider's `version` falls inside the requirement's `range`.
11
+
12
+ That is the whole rule. There is no third field and no second comparison -
13
+ an earlier draft added a provider-side `compat` range, which left three
14
+ values and no statement of how they combine, and three defensible
15
+ readings of one declaration is worse than the ambiguity it was introduced
16
+ to fix.
17
+ """
18
+
19
+ import re
20
+
21
+ from .types import fail
22
+
23
+ # `\Z`, NOT `$` — the same trap as the ref grammar. Python's `$` also
24
+ # matches before a trailing newline, so `^...$` accepts "2.1\n" as a
25
+ # range. Pinned by `version/rangebad#trailing-newline`.
26
+ VERSION_RE = re.compile(r'^(\d+)(?:\.(\d+))?(?:\.(\d+))?\Z')
27
+
28
+ # A COMPONENT IS BOUNDED, and the bound is the model's, not the host
29
+ # language's. Python integers are unbounded and JavaScript's stop being
30
+ # exact past 2^53, so `4294967296.0.0` compared as an ordinary number in
31
+ # one port and lost precision in another. 2^31-1 is the smallest bound
32
+ # every target language holds exactly, which makes it the model's.
33
+ COMPONENT_MAX = 2147483647
34
+
35
+
36
+ def component(digits, whole, field):
37
+ value = int(digits)
38
+ if COMPONENT_MAX < value:
39
+ fail('plugin_bad_range',
40
+ 'version component out of range in ' + whole + ': ' + digits,
41
+ {field: whole})
42
+ return value
43
+
44
+
45
+ def parse_range(text):
46
+ """Two forms and no more (section 11.2):
47
+
48
+ '2.1' >= 2.1.0 and < 3.0.0
49
+ '~2.1' >= 2.1.0 and < 2.2.0
50
+ """
51
+ if not isinstance(text, str) or 0 == len(text):
52
+ fail('plugin_bad_range', 'invalid range: ' + str(text),
53
+ {'range': text})
54
+
55
+ tilde = text.startswith('~')
56
+ body = text[1:] if tilde else text
57
+ found = VERSION_RE.match(body)
58
+ if None is found:
59
+ fail('plugin_bad_range', 'invalid range: ' + text, {'range': text})
60
+
61
+ major = component(found.group(1), text, 'range')
62
+ minor = (0 if None is found.group(2)
63
+ else component(found.group(2), text, 'range'))
64
+ patch = (0 if None is found.group(3)
65
+ else component(found.group(3), text, 'range'))
66
+
67
+ lo = [major, minor, patch]
68
+ hi = [major, minor + 1, 0] if tilde else [major + 1, 0, 0]
69
+ return {'lo': lo, 'hi': hi}
70
+
71
+
72
+ def parse_version(text):
73
+ if not isinstance(text, str):
74
+ fail('plugin_bad_range', 'invalid version: ' + str(text),
75
+ {'version': text})
76
+ found = VERSION_RE.match(text)
77
+ if None is found:
78
+ fail('plugin_bad_range', 'invalid version: ' + text,
79
+ {'version': text})
80
+ return [
81
+ component(found.group(1), text, 'version'),
82
+ (0 if None is found.group(2)
83
+ else component(found.group(2), text, 'version')),
84
+ (0 if None is found.group(3)
85
+ else component(found.group(3), text, 'version')),
86
+ ]
87
+
88
+
89
+ def satisfies(version, text):
90
+ """The one satisfaction predicate: lo <= version < hi."""
91
+ value = parse_version(version)
92
+ span = parse_range(text)
93
+ return 0 <= cmp(value, span['lo']) and 0 > cmp(value, span['hi'])
94
+
95
+
96
+ def satisfiesq(version, text):
97
+ """satisfies for the internal callers that treat an unparseable
98
+ version or range as "does not satisfy" - Capability and Graph, both of
99
+ which run over data the corpus has already admitted."""
100
+ try:
101
+ return satisfies(version, text)
102
+ except Exception:
103
+ return False
104
+
105
+
106
+ def cmp(a, b):
107
+ for i in range(3):
108
+ x = a[i] if i < len(a) else 0
109
+ y = b[i] if i < len(b) else 0
110
+ if x != y:
111
+ return -1 if x < y else 1
112
+ return 0