netbox-super-cli 1.0.6__tar.gz → 1.0.7__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 (222) hide show
  1. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/CHANGELOG.md +18 -0
  2. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/PKG-INFO +3 -2
  3. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/_version.py +1 -1
  4. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/pyproject.toml +7 -2
  5. netbox_super_cli-1.0.7/tests/test_packaging.py +71 -0
  6. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/uv.lock +4 -2
  7. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/.github/workflows/agents-md-sync.yml +0 -0
  8. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/.github/workflows/bench.yml +0 -0
  9. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/.github/workflows/claude.yml +0 -0
  10. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/.github/workflows/docs.yml +0 -0
  11. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/.github/workflows/e2e.yml +0 -0
  12. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/.github/workflows/lint.yml +0 -0
  13. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/.github/workflows/release.yml +0 -0
  14. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/.github/workflows/test.yml +0 -0
  15. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/.gitignore +0 -0
  16. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/.pre-commit-config.yaml +0 -0
  17. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/.python-version +0 -0
  18. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/AGENTS.md +0 -0
  19. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/CLAUDE.md +0 -0
  20. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/LICENSE +0 -0
  21. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/README.md +0 -0
  22. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/architecture/caching.md +0 -0
  23. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/architecture/command-generation.md +0 -0
  24. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/architecture/http-client.md +0 -0
  25. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/architecture/overview.md +0 -0
  26. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/architecture/schema-loading.md +0 -0
  27. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/contributing/adding-bundled-schemas.md +0 -0
  28. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/contributing/branching.md +0 -0
  29. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/contributing/development.md +0 -0
  30. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/contributing/release-process.md +0 -0
  31. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/getting-started/concepts.md +0 -0
  32. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/getting-started/first-run.md +0 -0
  33. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/getting-started/install.md +0 -0
  34. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/guides/ci-and-automation.md +0 -0
  35. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/guides/managing-profiles.md +0 -0
  36. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/guides/output-formats.md +0 -0
  37. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/guides/using-with-ai-agents.md +0 -0
  38. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/guides/working-with-plugins.md +0 -0
  39. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/guides/writes-and-safety.md +0 -0
  40. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/index.md +0 -0
  41. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/reference/cli.md +0 -0
  42. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/reference/config.md +0 -0
  43. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/reference/exit-codes.md +0 -0
  44. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/docs/reference/schemas.md +0 -0
  45. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/justfile +0 -0
  46. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/mkdocs.yml +0 -0
  47. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/__init__.py +0 -0
  48. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/__main__.py +0 -0
  49. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/aliases/__init__.py +0 -0
  50. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/aliases/resolver.py +0 -0
  51. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/auth/__init__.py +0 -0
  52. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/auth/verify.py +0 -0
  53. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/builder/__init__.py +0 -0
  54. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/builder/build.py +0 -0
  55. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cache/__init__.py +0 -0
  56. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cache/store.py +0 -0
  57. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/__init__.py +0 -0
  58. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/aliases_commands.py +0 -0
  59. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/app.py +0 -0
  60. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/cache_commands.py +0 -0
  61. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/commands_dump.py +0 -0
  62. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/config_commands.py +0 -0
  63. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/globals.py +0 -0
  64. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/handlers.py +0 -0
  65. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/init_commands.py +0 -0
  66. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/login_commands.py +0 -0
  67. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/profiles_commands.py +0 -0
  68. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/registration.py +0 -0
  69. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/runtime.py +0 -0
  70. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/skill_commands.py +0 -0
  71. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/writes/__init__.py +0 -0
  72. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/writes/apply.py +0 -0
  73. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/writes/bulk.py +0 -0
  74. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/writes/coercion.py +0 -0
  75. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/writes/confirmation.py +0 -0
  76. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/writes/input.py +0 -0
  77. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/cli/writes/preflight.py +0 -0
  78. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/config/__init__.py +0 -0
  79. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/config/loader.py +0 -0
  80. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/config/models.py +0 -0
  81. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/config/settings.py +0 -0
  82. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/config/writer.py +0 -0
  83. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/http/__init__.py +0 -0
  84. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/http/audit.py +0 -0
  85. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/http/client.py +0 -0
  86. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/http/errors.py +0 -0
  87. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/http/retry.py +0 -0
  88. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/model/__init__.py +0 -0
  89. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/model/command_model.py +0 -0
  90. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/output/__init__.py +0 -0
  91. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/output/_console.py +0 -0
  92. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/output/csv_.py +0 -0
  93. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/output/errors.py +0 -0
  94. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/output/explain.py +0 -0
  95. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/output/flatten.py +0 -0
  96. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/output/headers.py +0 -0
  97. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/output/json_.py +0 -0
  98. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/output/jsonl.py +0 -0
  99. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/output/render.py +0 -0
  100. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/output/table.py +0 -0
  101. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/output/yaml_.py +0 -0
  102. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/schema/__init__.py +0 -0
  103. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/schema/hashing.py +0 -0
  104. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/schema/loader.py +0 -0
  105. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/schema/models.py +0 -0
  106. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/schema/source.py +0 -0
  107. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/schemas/__init__.py +0 -0
  108. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/schemas/bundled/__init__.py +0 -0
  109. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/schemas/bundled/manifest.yaml +0 -0
  110. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/schemas/bundled/netbox-4.5.10.json.gz +0 -0
  111. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/schemas/bundled/netbox-4.6.0.json.gz +0 -0
  112. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/nsc/skill/__init__.py +0 -0
  113. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/scripts/gen_docs.py +0 -0
  114. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/scripts/sync_agents_md.py +0 -0
  115. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/skills/netbox-super-cli/SKILL.md +0 -0
  116. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/__init__.py +0 -0
  117. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/aliases/__init__.py +0 -0
  118. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/aliases/test_resolver.py +0 -0
  119. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/auth/__init__.py +0 -0
  120. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/auth/test_verify.py +0 -0
  121. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/benchmarks/__init__.py +0 -0
  122. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/benchmarks/test_startup.py +0 -0
  123. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/builder/__init__.py +0 -0
  124. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/builder/test_build.py +0 -0
  125. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/builder/test_default_columns.py +0 -0
  126. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/builder/test_redaction_marking.py +0 -0
  127. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/builder/test_request_body_shape.py +0 -0
  128. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cache/__init__.py +0 -0
  129. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cache/test_prune.py +0 -0
  130. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cache/test_store.py +0 -0
  131. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/__init__.py +0 -0
  132. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_aliases_commands.py +0 -0
  133. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_app_smoke.py +0 -0
  134. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_cache_commands.py +0 -0
  135. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_commands_dump.py +0 -0
  136. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_completion_smoke.py +0 -0
  137. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_config_commands.py +0 -0
  138. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_explain.py +0 -0
  139. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_globals_color.py +0 -0
  140. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_handlers.py +0 -0
  141. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_init_commands.py +0 -0
  142. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_login_commands.py +0 -0
  143. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_meta_subcommands_under_broken_config.py +0 -0
  144. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_ndjson_input.py +0 -0
  145. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_profiles_commands.py +0 -0
  146. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_registration.py +0 -0
  147. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_respx_integration.py +0 -0
  148. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_runtime.py +0 -0
  149. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_runtime_color.py +0 -0
  150. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_skill_commands.py +0 -0
  151. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_stdin_sniffer.py +0 -0
  152. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/test_writes_respx.py +0 -0
  153. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/writes/__init__.py +0 -0
  154. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/writes/test_apply.py +0 -0
  155. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/writes/test_bulk.py +0 -0
  156. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/writes/test_confirmation.py +0 -0
  157. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/writes/test_handler_helpers.py +0 -0
  158. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/writes/test_handlers_audit.py +0 -0
  159. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/writes/test_input.py +0 -0
  160. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/cli/writes/test_preflight.py +0 -0
  161. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/config/__init__.py +0 -0
  162. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/config/test_loader.py +0 -0
  163. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/config/test_models.py +0 -0
  164. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/config/test_writer_atomicity.py +0 -0
  165. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/config/test_writer_dotted_paths.py +0 -0
  166. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/config/test_writer_roundtrip.py +0 -0
  167. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/conftest.py +0 -0
  168. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/e2e/README.md +0 -0
  169. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/e2e/__init__.py +0 -0
  170. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/e2e/conftest.py +0 -0
  171. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/e2e/docker-compose.yml +0 -0
  172. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/e2e/test_audit_redaction.py +0 -0
  173. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/e2e/test_auth_error_envelope.py +0 -0
  174. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/e2e/test_bulk_create_with_loop_fallback.py +0 -0
  175. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/e2e/test_full_cycle.py +0 -0
  176. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/e2e/test_login.py +0 -0
  177. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/e2e/test_ndjson.py +0 -0
  178. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/e2e/test_preflight_blocks_apply.py +0 -0
  179. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/e2e/test_validation_error_envelope_from_netbox.py +0 -0
  180. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/e2e/wait_for_netbox.sh +0 -0
  181. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/fixtures/profiles/single_profile.yaml +0 -0
  182. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/fixtures/responses/auth_401.json +0 -0
  183. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/fixtures/responses/circuits_providers_list.json +0 -0
  184. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/fixtures/responses/dcim_devices_get.json +0 -0
  185. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/fixtures/responses/dcim_devices_list_p1.json +0 -0
  186. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/fixtures/responses/dcim_devices_list_p2.json +0 -0
  187. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/http/__init__.py +0 -0
  188. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/http/test_audit.py +0 -0
  189. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/http/test_audit_redaction.py +0 -0
  190. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/http/test_client.py +0 -0
  191. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/http/test_client_redaction_threading.py +0 -0
  192. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/http/test_errors.py +0 -0
  193. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/http/test_retry.py +0 -0
  194. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/model/__init__.py +0 -0
  195. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/model/test_command_model.py +0 -0
  196. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/model/test_request_body_shape.py +0 -0
  197. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/__init__.py +0 -0
  198. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_console.py +0 -0
  199. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_csv.py +0 -0
  200. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_errors.py +0 -0
  201. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_errors_aliases.py +0 -0
  202. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_errors_color.py +0 -0
  203. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_explain.py +0 -0
  204. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_explain_color.py +0 -0
  205. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_flatten.py +0 -0
  206. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_input_error_envelope.py +0 -0
  207. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_json.py +0 -0
  208. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_jsonl.py +0 -0
  209. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_render_dispatch.py +0 -0
  210. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_table.py +0 -0
  211. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_table_color.py +0 -0
  212. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/output/test_yaml.py +0 -0
  213. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/schema/__init__.py +0 -0
  214. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/schema/test_hashing.py +0 -0
  215. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/schema/test_loader.py +0 -0
  216. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/schema/test_models.py +0 -0
  217. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/schema/test_source.py +0 -0
  218. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/schema/test_source_ttl.py +0 -0
  219. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/scripts/__init__.py +0 -0
  220. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/scripts/test_gen_docs.py +0 -0
  221. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/skill/__init__.py +0 -0
  222. {netbox_super_cli-1.0.6 → netbox_super_cli-1.0.7}/tests/skill/test_bundle.py +0 -0
@@ -2,6 +2,24 @@
2
2
 
3
3
  All notable changes to netbox-super-cli are tracked here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) loosely. From v1.0.0 onward, releases follow [Semantic Versioning](https://semver.org/) and the version in `pyproject.toml` matches the git tag. Pre-1.0 milestones (Phase 1-5) were pinned by tag while `pyproject.toml` stayed at `0.0.1`.
4
4
 
5
+ ## v1.0.7 — 2026-06-09
6
+
7
+ Patch release. Fixes a hard crash on fresh installs caused by an undeclared
8
+ `click` dependency (issue #81).
9
+
10
+ ### Fixed
11
+
12
+ - **`nsc` no longer crashes with `ModuleNotFoundError: No module named 'click'`
13
+ on fresh installs** (issue #81). `nsc` imports the standalone `click` package
14
+ directly, but it was never declared as a dependency — it was only pulled in
15
+ transitively by `typer`. typer 0.26 vendored click (as `typer._click`) and
16
+ dropped its public `click` dependency, so a fresh `uv tool install` / `pip
17
+ install` resolving `typer>=0.12` got typer 0.26.x with no `click`, and the
18
+ first `import click` aborted every command. `click>=8.1` is now an explicit
19
+ dependency, and `typer` is pinned `>=0.12,<0.26` — the last line that uses the
20
+ standalone `click` that nsc's `TyperGroup` overrides are written against.
21
+ Adopting typer 0.26's vendored click is tracked in #82.
22
+
5
23
  ## v1.0.6 — 2026-06-09
6
24
 
7
25
  Patch release. Fixes table/CSV column rendering for fields that are nested
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: netbox-super-cli
3
- Version: 1.0.6
3
+ Version: 1.0.7
4
4
  Summary: Dynamic NetBox CLI generated from the live OpenAPI schema.
5
5
  Project-URL: Homepage, https://github.com/thomaschristory/netbox-super-cli
6
6
  Project-URL: Issues, https://github.com/thomaschristory/netbox-super-cli/issues
@@ -16,13 +16,14 @@ Classifier: Programming Language :: Python :: 3.12
16
16
  Classifier: Programming Language :: Python :: 3.13
17
17
  Classifier: Topic :: System :: Networking
18
18
  Requires-Python: >=3.12
19
+ Requires-Dist: click>=8.1
19
20
  Requires-Dist: httpx>=0.27
20
21
  Requires-Dist: platformdirs>=4.2
21
22
  Requires-Dist: pydantic>=2.7
22
23
  Requires-Dist: rich>=13.7
23
24
  Requires-Dist: ruamel-yaml>=0.18
24
25
  Requires-Dist: structlog>=24.1
25
- Requires-Dist: typer>=0.12
26
+ Requires-Dist: typer<0.26,>=0.12
26
27
  Description-Content-Type: text/markdown
27
28
 
28
29
  # netbox-super-cli (`nsc`)
@@ -1,3 +1,3 @@
1
1
  """Single source of truth for the package version."""
2
2
 
3
- __version__ = "1.0.6"
3
+ __version__ = "1.0.7"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "netbox-super-cli"
3
- version = "1.0.6"
3
+ version = "1.0.7"
4
4
  description = "Dynamic NetBox CLI generated from the live OpenAPI schema."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -18,7 +18,12 @@ classifiers = [
18
18
  "Topic :: System :: Networking",
19
19
  ]
20
20
  dependencies = [
21
- "typer>=0.12",
21
+ # typer 0.26 vendored click as typer._click and dropped its public `click`
22
+ # dependency; nsc imports the standalone `click` directly and subclasses
23
+ # TyperGroup, so it stays on the <0.26 line (which uses standalone click)
24
+ # until that interop is migrated. See issue #82.
25
+ "typer>=0.12,<0.26",
26
+ "click>=8.1",
22
27
  "rich>=13.7",
23
28
  "httpx>=0.27",
24
29
  "pydantic>=2.7",
@@ -0,0 +1,71 @@
1
+ """Packaging-metadata guards.
2
+
3
+ Protects against importing a third-party package directly while relying on
4
+ another dependency to supply it transitively. That is exactly how `click`
5
+ broke on fresh installs (issue #81): `nsc` imports `click` directly, but it
6
+ was only ever pulled in via `typer` — and typer 0.26 vendored click as
7
+ `typer._click` and dropped its public `click` dependency, so fresh
8
+ resolutions had no `click` and `import click` crashed.
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ import ast
14
+ import pathlib
15
+ import re
16
+ import sys
17
+ import tomllib
18
+ from importlib.metadata import packages_distributions
19
+
20
+ _REPO_ROOT = pathlib.Path(__file__).resolve().parents[1]
21
+ _NSC = _REPO_ROOT / "nsc"
22
+
23
+
24
+ def _canonical(name: str) -> str:
25
+ return re.sub(r"[-_.]+", "-", name).strip().lower()
26
+
27
+
28
+ def _declared_dependencies() -> set[str]:
29
+ data = tomllib.loads((_REPO_ROOT / "pyproject.toml").read_text(encoding="utf-8"))
30
+ deps: list[str] = data["project"]["dependencies"]
31
+ return {_canonical(re.split(r"[<>=!~\[; ]", dep, maxsplit=1)[0]) for dep in deps}
32
+
33
+
34
+ def _top_level_imports(tree: ast.AST) -> set[str]:
35
+ names: set[str] = set()
36
+ for node in ast.walk(tree):
37
+ if isinstance(node, ast.Import):
38
+ names.update(alias.name.split(".")[0] for alias in node.names)
39
+ elif isinstance(node, ast.ImportFrom) and node.level == 0 and node.module:
40
+ names.add(node.module.split(".")[0])
41
+ return names
42
+
43
+
44
+ def _directly_imported_modules() -> set[str]:
45
+ names: set[str] = set()
46
+ for path in _NSC.rglob("*.py"):
47
+ names |= _top_level_imports(ast.parse(path.read_text(encoding="utf-8")))
48
+ return names
49
+
50
+
51
+ def test_click_is_a_declared_dependency() -> None:
52
+ # The concrete regression guard for issue #81: nsc imports click directly.
53
+ assert "click" in _directly_imported_modules()
54
+ assert _canonical("click") in _declared_dependencies()
55
+
56
+
57
+ def test_every_direct_third_party_import_is_declared() -> None:
58
+ # Generalizes the guard: any top-level third-party module imported anywhere
59
+ # in nsc/ must resolve to a declared dependency — never a transitive freebie.
60
+ declared = _declared_dependencies()
61
+ dist_map = packages_distributions()
62
+ undeclared: dict[str, set[str]] = {}
63
+ for module in _directly_imported_modules():
64
+ if module == "nsc" or module in sys.stdlib_module_names:
65
+ continue
66
+ dists = dist_map.get(module)
67
+ if dists is None:
68
+ continue # not an installed distribution (e.g. a namespace shim)
69
+ if not any(_canonical(dist) in declared for dist in dists):
70
+ undeclared[module] = set(dists)
71
+ assert not undeclared, f"third-party imports missing from dependencies: {undeclared}"
@@ -646,9 +646,10 @@ wheels = [
646
646
 
647
647
  [[package]]
648
648
  name = "netbox-super-cli"
649
- version = "1.0.6"
649
+ version = "1.0.7"
650
650
  source = { editable = "." }
651
651
  dependencies = [
652
+ { name = "click" },
652
653
  { name = "httpx" },
653
654
  { name = "platformdirs" },
654
655
  { name = "pydantic" },
@@ -676,13 +677,14 @@ docs = [
676
677
 
677
678
  [package.metadata]
678
679
  requires-dist = [
680
+ { name = "click", specifier = ">=8.1" },
679
681
  { name = "httpx", specifier = ">=0.27" },
680
682
  { name = "platformdirs", specifier = ">=4.2" },
681
683
  { name = "pydantic", specifier = ">=2.7" },
682
684
  { name = "rich", specifier = ">=13.7" },
683
685
  { name = "ruamel-yaml", specifier = ">=0.18" },
684
686
  { name = "structlog", specifier = ">=24.1" },
685
- { name = "typer", specifier = ">=0.12" },
687
+ { name = "typer", specifier = ">=0.12,<0.26" },
686
688
  ]
687
689
 
688
690
  [package.metadata.requires-dev]