netbox-super-cli 1.3.1__tar.gz → 1.5.0__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 (333) hide show
  1. netbox_super_cli-1.5.0/.github/ISSUE_TEMPLATE/bug_report.yml +127 -0
  2. netbox_super_cli-1.5.0/.github/ISSUE_TEMPLATE/config.yml +11 -0
  3. netbox_super_cli-1.5.0/.github/ISSUE_TEMPLATE/docs.yml +35 -0
  4. netbox_super_cli-1.5.0/.github/ISSUE_TEMPLATE/feature_request.yml +68 -0
  5. netbox_super_cli-1.5.0/.github/pull_request_template.md +17 -0
  6. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/.github/workflows/test.yml +2 -3
  7. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/CHANGELOG.md +50 -0
  8. netbox_super_cli-1.3.1/README.md → netbox_super_cli-1.5.0/PKG-INFO +96 -4
  9. netbox_super_cli-1.3.1/PKG-INFO → netbox_super_cli-1.5.0/README.md +61 -33
  10. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/guides/interactive-tui.md +16 -0
  11. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/reference/config.md +3 -1
  12. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/_version.py +1 -1
  13. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/cli/app.py +16 -0
  14. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/cli/globals.py +13 -2
  15. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/cli/handlers.py +3 -0
  16. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/cli/registration.py +63 -6
  17. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/cli/runtime.py +19 -1
  18. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/cli/tui_commands.py +11 -0
  19. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/config/models.py +14 -0
  20. netbox_super_cli-1.5.0/nsc/config/saved_searches.py +112 -0
  21. netbox_super_cli-1.5.0/nsc/output/colors.py +36 -0
  22. netbox_super_cli-1.5.0/nsc/output/flatten.py +72 -0
  23. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/output/render.py +2 -1
  24. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/output/table.py +30 -1
  25. netbox_super_cli-1.5.0/nsc/savedfilters/__init__.py +4 -0
  26. netbox_super_cli-1.5.0/nsc/savedfilters/objecttypes.py +103 -0
  27. netbox_super_cli-1.5.0/nsc/savedfilters/params.py +55 -0
  28. netbox_super_cli-1.5.0/nsc/savedfilters/store.py +140 -0
  29. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/__init__.py +13 -0
  30. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/app.py +67 -0
  31. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/columns.py +23 -9
  32. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/keymap.py +5 -1
  33. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/screens/filter.py +92 -1
  34. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/screens/list.py +13 -3
  35. netbox_super_cli-1.5.0/nsc/tui/screens/saved_search_picker.py +92 -0
  36. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/styles.tcss +24 -0
  37. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/view.py +27 -4
  38. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/widgets/help.py +1 -0
  39. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/pyproject.toml +9 -3
  40. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/skills/netbox-super-cli/SKILL.md +5 -0
  41. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/test_registration.py +88 -0
  42. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/test_runtime_color.py +26 -2
  43. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/test_tui_command.py +53 -0
  44. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/writes/test_bulk.py +19 -14
  45. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/config/test_models.py +36 -1
  46. netbox_super_cli-1.5.0/tests/config/test_saved_search_fallback.py +55 -0
  47. netbox_super_cli-1.5.0/tests/config/test_saved_searches.py +86 -0
  48. netbox_super_cli-1.5.0/tests/output/test_colors.py +28 -0
  49. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/output/test_flatten.py +97 -0
  50. netbox_super_cli-1.5.0/tests/output/test_table_color.py +277 -0
  51. netbox_super_cli-1.5.0/tests/savedfilters/test_objecttypes.py +123 -0
  52. netbox_super_cli-1.5.0/tests/savedfilters/test_params.py +64 -0
  53. netbox_super_cli-1.5.0/tests/savedfilters/test_store.py +190 -0
  54. netbox_super_cli-1.5.0/tests/tui/__init__.py +0 -0
  55. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_app.py +47 -0
  56. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_columns.py +49 -0
  57. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_filter_screen.py +124 -2
  58. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_keymap.py +6 -4
  59. netbox_super_cli-1.5.0/tests/tui/test_saved_filter_integration.py +98 -0
  60. netbox_super_cli-1.5.0/tests/tui/test_view.py +87 -0
  61. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/uv.lock +1 -1
  62. netbox_super_cli-1.3.1/nsc/output/flatten.py +0 -53
  63. netbox_super_cli-1.3.1/tests/output/test_table_color.py +0 -138
  64. netbox_super_cli-1.3.1/tests/tui/test_view.py +0 -27
  65. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/.github/dependabot.yml +0 -0
  66. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/.github/workflows/bench.yml +0 -0
  67. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/.github/workflows/claude.yml +0 -0
  68. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/.github/workflows/docs.yml +0 -0
  69. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/.github/workflows/e2e.yml +0 -0
  70. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/.github/workflows/lint.yml +0 -0
  71. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/.github/workflows/release.yml +0 -0
  72. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/.github/workflows/skill-convention-review.yml +0 -0
  73. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/.gitignore +0 -0
  74. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/.pre-commit-config.yaml +0 -0
  75. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/.python-version +0 -0
  76. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/AGENTS.md +0 -0
  77. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/CLAUDE.md +0 -0
  78. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/LICENSE +0 -0
  79. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/architecture/caching.md +0 -0
  80. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/architecture/command-generation.md +0 -0
  81. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/architecture/http-client.md +0 -0
  82. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/architecture/overview.md +0 -0
  83. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/architecture/schema-loading.md +0 -0
  84. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/assets/tui/detail.svg +0 -0
  85. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/assets/tui/filter.svg +0 -0
  86. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/assets/tui/list.svg +0 -0
  87. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/assets/tui/picker.svg +0 -0
  88. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/assets/tui/search.svg +0 -0
  89. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/contributing/adding-bundled-schemas.md +0 -0
  90. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/contributing/branching.md +0 -0
  91. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/contributing/development.md +0 -0
  92. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/contributing/release-process.md +0 -0
  93. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/getting-started/concepts.md +0 -0
  94. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/getting-started/first-run.md +0 -0
  95. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/getting-started/install.md +0 -0
  96. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/guides/audit-log.md +0 -0
  97. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/guides/ci-and-automation.md +0 -0
  98. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/guides/managing-profiles.md +0 -0
  99. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/guides/output-formats.md +0 -0
  100. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/guides/using-with-ai-agents.md +0 -0
  101. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/guides/working-with-plugins.md +0 -0
  102. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/guides/writes-and-safety.md +0 -0
  103. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/index.md +0 -0
  104. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/reference/cli.md +0 -0
  105. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/reference/exit-codes.md +0 -0
  106. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/docs/reference/schemas.md +0 -0
  107. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/justfile +0 -0
  108. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/mkdocs.yml +0 -0
  109. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/__init__.py +0 -0
  110. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/__main__.py +0 -0
  111. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/aliases/__init__.py +0 -0
  112. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/aliases/resolver.py +0 -0
  113. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/auth/__init__.py +0 -0
  114. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/auth/verify.py +0 -0
  115. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/builder/__init__.py +0 -0
  116. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/builder/build.py +0 -0
  117. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/cache/__init__.py +0 -0
  118. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/cache/store.py +0 -0
  119. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/cli/__init__.py +0 -0
  120. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/cli/aliases_commands.py +0 -0
  121. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/cli/cache_commands.py +0 -0
  122. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/cli/commands_dump.py +0 -0
  123. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/cli/config_commands.py +0 -0
  124. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/cli/init_commands.py +0 -0
  125. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/cli/login_commands.py +0 -0
  126. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/cli/profiles_commands.py +0 -0
  127. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/cli/skill_commands.py +0 -0
  128. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/cli/writes/__init__.py +0 -0
  129. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/cli/writes/apply.py +0 -0
  130. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/cli/writes/bulk.py +0 -0
  131. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/cli/writes/coercion.py +0 -0
  132. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/cli/writes/confirmation.py +0 -0
  133. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/cli/writes/input.py +0 -0
  134. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/cli/writes/preflight.py +0 -0
  135. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/completion/__init__.py +0 -0
  136. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/completion/cache_probe.py +0 -0
  137. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/completion/callbacks.py +0 -0
  138. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/completion/providers.py +0 -0
  139. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/config/__init__.py +0 -0
  140. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/config/loader.py +0 -0
  141. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/config/settings.py +0 -0
  142. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/config/writer.py +0 -0
  143. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/http/__init__.py +0 -0
  144. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/http/audit.py +0 -0
  145. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/http/client.py +0 -0
  146. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/http/errors.py +0 -0
  147. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/http/retry.py +0 -0
  148. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/model/__init__.py +0 -0
  149. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/model/command_model.py +0 -0
  150. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/output/__init__.py +0 -0
  151. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/output/_console.py +0 -0
  152. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/output/csv_.py +0 -0
  153. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/output/errors.py +0 -0
  154. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/output/explain.py +0 -0
  155. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/output/headers.py +0 -0
  156. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/output/json_.py +0 -0
  157. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/output/jsonl.py +0 -0
  158. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/output/yaml_.py +0 -0
  159. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/schema/__init__.py +0 -0
  160. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/schema/hashing.py +0 -0
  161. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/schema/loader.py +0 -0
  162. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/schema/models.py +0 -0
  163. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/schema/source.py +0 -0
  164. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/schemas/__init__.py +0 -0
  165. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/schemas/bundled/__init__.py +0 -0
  166. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/schemas/bundled/manifest.yaml +0 -0
  167. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/schemas/bundled/netbox-4.5.10.json.gz +0 -0
  168. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/schemas/bundled/netbox-4.6.0.json.gz +0 -0
  169. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/skill/__init__.py +0 -0
  170. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/_bindings.py +0 -0
  171. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/bulk.py +0 -0
  172. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/catalog.py +0 -0
  173. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/errors.py +0 -0
  174. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/filters.py +0 -0
  175. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/fk.py +0 -0
  176. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/forms.py +0 -0
  177. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/nav.py +0 -0
  178. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/relations.py +0 -0
  179. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/screens/__init__.py +0 -0
  180. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/screens/bulk_edit_form.py +0 -0
  181. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/screens/columns.py +0 -0
  182. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/screens/detail.py +0 -0
  183. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/screens/edit_form.py +0 -0
  184. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/screens/global_search.py +0 -0
  185. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/screens/picker.py +0 -0
  186. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/screens/record_picker.py +0 -0
  187. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/search.py +0 -0
  188. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/selection.py +0 -0
  189. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/widgets/__init__.py +0 -0
  190. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/widgets/_modal.py +0 -0
  191. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/widgets/bulk_diff.py +0 -0
  192. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/widgets/bulk_summary.py +0 -0
  193. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/widgets/confirm.py +0 -0
  194. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/widgets/diff.py +0 -0
  195. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/nsc/tui/widgets/nav_tree.py +0 -0
  196. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/scripts/gen_docs.py +0 -0
  197. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/scripts/sync_agents_md.py +0 -0
  198. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/__init__.py +0 -0
  199. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/aliases/__init__.py +0 -0
  200. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/aliases/test_resolver.py +0 -0
  201. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/audit/__init__.py +0 -0
  202. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/audit/test_redaction_full.py +0 -0
  203. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/auth/__init__.py +0 -0
  204. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/auth/test_verify.py +0 -0
  205. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/benchmarks/__init__.py +0 -0
  206. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/benchmarks/test_startup.py +0 -0
  207. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/builder/__init__.py +0 -0
  208. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/builder/test_build.py +0 -0
  209. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/builder/test_default_columns.py +0 -0
  210. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/builder/test_redaction_marking.py +0 -0
  211. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/builder/test_request_body_shape.py +0 -0
  212. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cache/__init__.py +0 -0
  213. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cache/test_prune.py +0 -0
  214. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cache/test_store.py +0 -0
  215. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/__init__.py +0 -0
  216. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/test_aliases_commands.py +0 -0
  217. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/test_app_smoke.py +0 -0
  218. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/test_cache_commands.py +0 -0
  219. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/test_commands_dump.py +0 -0
  220. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/test_completion_protocol_smoke.py +0 -0
  221. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/test_completion_smoke.py +0 -0
  222. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/test_config_commands.py +0 -0
  223. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/test_dynamic_completion.py +0 -0
  224. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/test_explain.py +0 -0
  225. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/test_globals_color.py +0 -0
  226. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/test_handlers.py +0 -0
  227. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/test_init_commands.py +0 -0
  228. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/test_lazy_textual_import.py +0 -0
  229. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/test_login_commands.py +0 -0
  230. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/test_meta_subcommands_under_broken_config.py +0 -0
  231. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/test_ndjson_input.py +0 -0
  232. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/test_profiles_commands.py +0 -0
  233. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/test_respx_integration.py +0 -0
  234. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/test_runtime.py +0 -0
  235. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/test_skill_commands.py +0 -0
  236. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/test_stdin_sniffer.py +0 -0
  237. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/test_writes_respx.py +0 -0
  238. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/writes/__init__.py +0 -0
  239. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/writes/test_apply.py +0 -0
  240. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/writes/test_confirmation.py +0 -0
  241. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/writes/test_handler_helpers.py +0 -0
  242. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/writes/test_handlers_audit.py +0 -0
  243. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/writes/test_input.py +0 -0
  244. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/cli/writes/test_preflight.py +0 -0
  245. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/config/__init__.py +0 -0
  246. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/config/test_loader.py +0 -0
  247. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/config/test_settings_private_dir.py +0 -0
  248. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/config/test_writer_atomicity.py +0 -0
  249. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/config/test_writer_dotted_paths.py +0 -0
  250. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/config/test_writer_roundtrip.py +0 -0
  251. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/conftest.py +0 -0
  252. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/e2e/README.md +0 -0
  253. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/e2e/__init__.py +0 -0
  254. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/e2e/conftest.py +0 -0
  255. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/e2e/docker-compose.yml +0 -0
  256. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/e2e/test_audit_redaction.py +0 -0
  257. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/e2e/test_auth_error_envelope.py +0 -0
  258. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/e2e/test_bulk_create_with_loop_fallback.py +0 -0
  259. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/e2e/test_full_cycle.py +0 -0
  260. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/e2e/test_login.py +0 -0
  261. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/e2e/test_ndjson.py +0 -0
  262. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/e2e/test_preflight_blocks_apply.py +0 -0
  263. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/e2e/test_validation_error_envelope_from_netbox.py +0 -0
  264. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/e2e/wait_for_netbox.sh +0 -0
  265. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/fixtures/profiles/single_profile.yaml +0 -0
  266. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/fixtures/responses/auth_401.json +0 -0
  267. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/fixtures/responses/circuits_providers_list.json +0 -0
  268. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/fixtures/responses/dcim_devices_get.json +0 -0
  269. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/fixtures/responses/dcim_devices_list_p1.json +0 -0
  270. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/fixtures/responses/dcim_devices_list_p2.json +0 -0
  271. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/http/__init__.py +0 -0
  272. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/http/test_audit.py +0 -0
  273. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/http/test_audit_permissions.py +0 -0
  274. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/http/test_audit_redaction.py +0 -0
  275. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/http/test_client.py +0 -0
  276. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/http/test_client_redaction_threading.py +0 -0
  277. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/http/test_errors.py +0 -0
  278. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/http/test_retry.py +0 -0
  279. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/model/__init__.py +0 -0
  280. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/model/test_command_model.py +0 -0
  281. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/model/test_request_body_shape.py +0 -0
  282. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/output/__init__.py +0 -0
  283. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/output/test_console.py +0 -0
  284. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/output/test_csv.py +0 -0
  285. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/output/test_errors.py +0 -0
  286. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/output/test_errors_aliases.py +0 -0
  287. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/output/test_errors_color.py +0 -0
  288. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/output/test_explain.py +0 -0
  289. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/output/test_explain_color.py +0 -0
  290. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/output/test_input_error_envelope.py +0 -0
  291. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/output/test_json.py +0 -0
  292. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/output/test_jsonl.py +0 -0
  293. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/output/test_render_dispatch.py +0 -0
  294. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/output/test_table.py +0 -0
  295. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/output/test_yaml.py +0 -0
  296. {netbox_super_cli-1.3.1/tests/schema → netbox_super_cli-1.5.0/tests/savedfilters}/__init__.py +0 -0
  297. {netbox_super_cli-1.3.1/tests/scripts → netbox_super_cli-1.5.0/tests/schema}/__init__.py +0 -0
  298. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/schema/test_hashing.py +0 -0
  299. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/schema/test_loader.py +0 -0
  300. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/schema/test_models.py +0 -0
  301. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/schema/test_source.py +0 -0
  302. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/schema/test_source_ttl.py +0 -0
  303. {netbox_super_cli-1.3.1/tests/skill → netbox_super_cli-1.5.0/tests/scripts}/__init__.py +0 -0
  304. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/scripts/test_gen_docs.py +0 -0
  305. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/scripts/test_sync_agents_md.py +0 -0
  306. {netbox_super_cli-1.3.1/tests/tui → netbox_super_cli-1.5.0/tests/skill}/__init__.py +0 -0
  307. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/skill/test_bundle.py +0 -0
  308. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/test_packaging.py +0 -0
  309. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_bindings.py +0 -0
  310. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_bulk_apply.py +0 -0
  311. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_bulk_diff.py +0 -0
  312. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_bulk_diff_modal.py +0 -0
  313. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_bulk_edit_form.py +0 -0
  314. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_bulk_import_isolation.py +0 -0
  315. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_bulk_summary.py +0 -0
  316. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_catalog.py +0 -0
  317. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_column_chooser.py +0 -0
  318. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_detail_screen.py +0 -0
  319. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_diff.py +0 -0
  320. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_diff_modal.py +0 -0
  321. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_edit_form.py +0 -0
  322. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_errors.py +0 -0
  323. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_filters.py +0 -0
  324. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_fk_resolve.py +0 -0
  325. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_forms.py +0 -0
  326. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_global_search.py +0 -0
  327. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_help_overlay.py +0 -0
  328. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_list_screen.py +0 -0
  329. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_picker.py +0 -0
  330. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_record_picker.py +0 -0
  331. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_relations.py +0 -0
  332. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_search.py +0 -0
  333. {netbox_super_cli-1.3.1 → netbox_super_cli-1.5.0}/tests/tui/test_selection.py +0 -0
@@ -0,0 +1,127 @@
1
+ name: 🐞 Bug report
2
+ description: Something in nsc (the CLI or TUI) behaves incorrectly or crashes.
3
+ title: "[Bug]: "
4
+ labels: ["bug"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ Thanks for filing a bug! The version numbers and the **exact command** make
10
+ most issues reproducible — please fill in as much as you can.
11
+
12
+ > [!WARNING]
13
+ > **Redact secrets.** Never paste your `NSC_TOKEN`, API tokens, or any
14
+ > credential. Replace them with `***`.
15
+
16
+ - type: input
17
+ id: nsc-version
18
+ attributes:
19
+ label: nsc version
20
+ description: Output of `nsc --version`.
21
+ placeholder: "nsc 1.4.0"
22
+ validations:
23
+ required: true
24
+
25
+ - type: dropdown
26
+ id: install-method
27
+ attributes:
28
+ label: How did you install nsc?
29
+ options:
30
+ - uv tool install
31
+ - pipx
32
+ - pip
33
+ - uvx (ephemeral)
34
+ - from source / git checkout
35
+ - other
36
+ validations:
37
+ required: true
38
+
39
+ - type: input
40
+ id: python-version
41
+ attributes:
42
+ label: Python version
43
+ description: Output of `python --version` for the interpreter nsc runs under.
44
+ placeholder: "3.12.x"
45
+ validations:
46
+ required: true
47
+
48
+ - type: dropdown
49
+ id: os
50
+ attributes:
51
+ label: Operating system
52
+ options:
53
+ - Linux
54
+ - macOS
55
+ - Windows
56
+ - Other
57
+ validations:
58
+ required: true
59
+
60
+ - type: input
61
+ id: netbox-version
62
+ attributes:
63
+ label: NetBox version
64
+ description: The NetBox server version nsc talks to (NetBox UI footer, or `/api/status/`).
65
+ placeholder: "v4.6.3"
66
+ validations:
67
+ required: false
68
+
69
+ - type: dropdown
70
+ id: schema-source
71
+ attributes:
72
+ label: Which schema was nsc using?
73
+ description: nsc generates commands from the OpenAPI schema — a live fetch, the on-disk cache, or the bundled offline snapshot.
74
+ options:
75
+ - Live NetBox API
76
+ - Cached schema
77
+ - Bundled offline snapshot
78
+ - Not sure
79
+ validations:
80
+ required: false
81
+
82
+ - type: textarea
83
+ id: command
84
+ attributes:
85
+ label: Command you ran
86
+ description: The exact `nsc ...` invocation. Redact tokens.
87
+ render: shell
88
+ placeholder: nsc dcim devices list --site-id 42 --output json
89
+ validations:
90
+ required: true
91
+
92
+ - type: textarea
93
+ id: what-happened
94
+ attributes:
95
+ label: What happened?
96
+ description: The actual behavior, including any error message or traceback.
97
+ render: shell
98
+ validations:
99
+ required: true
100
+
101
+ - type: textarea
102
+ id: expected
103
+ attributes:
104
+ label: What did you expect to happen?
105
+ validations:
106
+ required: true
107
+
108
+ - type: textarea
109
+ id: logs
110
+ attributes:
111
+ label: Relevant logs / audit output
112
+ description: Optional. Anything else that helps — re-run with extra output if useful. Redact secrets first.
113
+ render: shell
114
+ validations:
115
+ required: false
116
+
117
+ - type: checkboxes
118
+ id: checks
119
+ attributes:
120
+ label: Before submitting
121
+ options:
122
+ - label: I searched existing issues and this isn't a duplicate.
123
+ required: true
124
+ - label: I'm on the latest release of nsc, or I noted my version above.
125
+ required: true
126
+ - label: I removed any tokens / credentials from the command and logs above.
127
+ required: true
@@ -0,0 +1,11 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: 📖 Documentation
4
+ url: https://thomaschristory.github.io/netbox-super-cli/
5
+ about: Guides, the CLI/TUI reference, and configuration docs — please check here first.
6
+ - name: 💬 Questions & usage help
7
+ url: https://github.com/thomaschristory/netbox-super-cli/discussions
8
+ about: Ask how-to questions, share setups, or propose ideas before filing a feature request.
9
+ - name: 🔐 Security vulnerability
10
+ url: https://github.com/thomaschristory/netbox-super-cli/security/advisories/new
11
+ about: Report a security issue privately. Please do NOT open a public issue for vulnerabilities.
@@ -0,0 +1,35 @@
1
+ name: 📖 Documentation issue
2
+ description: A gap, error, or confusing part of the docs, README, or bundled SKILL.
3
+ title: "[Docs]: "
4
+ labels: ["documentation"]
5
+ body:
6
+ - type: textarea
7
+ id: where
8
+ attributes:
9
+ label: Where is the problem?
10
+ description: A page URL, a file path (e.g. `README.md`, `docs/...`), or a command's `--help` output.
11
+ validations:
12
+ required: true
13
+
14
+ - type: textarea
15
+ id: problem
16
+ attributes:
17
+ label: What's wrong or missing?
18
+ validations:
19
+ required: true
20
+
21
+ - type: textarea
22
+ id: suggestion
23
+ attributes:
24
+ label: Suggested fix
25
+ description: Optional — a sentence, a corrected snippet, or a link to the right info.
26
+ validations:
27
+ required: false
28
+
29
+ - type: checkboxes
30
+ id: checks
31
+ attributes:
32
+ label: Before submitting
33
+ options:
34
+ - label: I searched existing issues and this isn't a duplicate.
35
+ required: true
@@ -0,0 +1,68 @@
1
+ name: ✨ Feature request
2
+ description: Suggest a new capability or improvement for the CLI, TUI, or output.
3
+ title: "[Feature]: "
4
+ labels: ["enhancement"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ Thanks for the idea! Describing the **problem** first (not just the
10
+ solution) helps us find the best fit. nsc is generated from NetBox's
11
+ OpenAPI schema, so features usually apply across every resource.
12
+
13
+ - type: dropdown
14
+ id: area
15
+ attributes:
16
+ label: Which area?
17
+ options:
18
+ - CLI (commands, flags, output)
19
+ - TUI (interactive browser)
20
+ - Output / formatting (table, json, jsonl, yaml, csv)
21
+ - Config / auth / profiles
22
+ - Shell completion
23
+ - Schema / code generation
24
+ - Documentation
25
+ - Other / not sure
26
+ validations:
27
+ required: true
28
+
29
+ - type: textarea
30
+ id: problem
31
+ attributes:
32
+ label: What problem are you trying to solve?
33
+ description: What are you trying to do, and where does nsc get in the way today?
34
+ validations:
35
+ required: true
36
+
37
+ - type: textarea
38
+ id: proposal
39
+ attributes:
40
+ label: Proposed solution
41
+ description: What would you like nsc to do? A sketch of the command, flag, or UX is great.
42
+ validations:
43
+ required: false
44
+
45
+ - type: textarea
46
+ id: example
47
+ attributes:
48
+ label: Example usage
49
+ description: How would it look on the command line (or in the TUI)?
50
+ render: shell
51
+ placeholder: nsc dcim devices list --some-new-flag
52
+ validations:
53
+ required: false
54
+
55
+ - type: textarea
56
+ id: alternatives
57
+ attributes:
58
+ label: Alternatives considered
59
+ validations:
60
+ required: false
61
+
62
+ - type: checkboxes
63
+ id: checks
64
+ attributes:
65
+ label: Before submitting
66
+ options:
67
+ - label: I searched existing issues and this isn't a duplicate.
68
+ required: true
@@ -0,0 +1,17 @@
1
+ <!--
2
+ Thanks for contributing to netbox-super-cli! Keep this short — a couple of
3
+ sentences plus the checklist is plenty. See CLAUDE.md / docs/contributing for
4
+ conventions.
5
+ -->
6
+
7
+ ## What & why
8
+
9
+ <!-- What does this change, and why? Link the issue: Closes #123 -->
10
+
11
+ ## Checklist
12
+
13
+ - [ ] PR title follows [Conventional Commits](https://www.conventionalcommits.org/) (`feat:`, `fix:`, `docs:`, `chore:`, `refactor:`, …)
14
+ - [ ] Tests added or updated, and `just test` passes
15
+ - [ ] `just lint` passes (ruff + `mypy --strict`)
16
+ - [ ] Docs / `CHANGELOG.md` updated if this is user-facing
17
+ - [ ] Linked the related issue (e.g. `Closes #…`)
@@ -10,12 +10,11 @@ permissions:
10
10
 
11
11
  jobs:
12
12
  test:
13
- runs-on: ${{ matrix.os }}
13
+ runs-on: ubuntu-latest
14
14
  strategy:
15
15
  fail-fast: false
16
16
  matrix:
17
- os: [ubuntu-latest, macos-latest]
18
- python: ["3.12", "3.13"]
17
+ python: ["3.12", "3.13", "3.14"]
19
18
  steps:
20
19
  - uses: actions/checkout@v7
21
20
  - name: Install uv
@@ -2,6 +2,56 @@
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.5.0 — 2026-06-29
6
+
7
+ Minor release. Saved searches become interchangeable with the NetBox web UI.
8
+
9
+ ### Changed
10
+
11
+ - **Saved searches are now NetBox-native** ([#129]). Filter sets saved from the
12
+ TUI (`Ctrl+W`) and applied via `--saved` are stored as NetBox saved filters
13
+ (`extras.saved-filters`), scoped to the resource's object type, so they are
14
+ fully interchangeable with the web UI's filter dropdown — a search saved in
15
+ `nsc` appears in the web UI and vice versa. The object type is resolved from
16
+ NetBox's own object-type registry (`/api/core/object-types/`), so the mapping
17
+ is exact rather than guessed. When NetBox is unreachable or the user lacks
18
+ permission on `extras.savedfilter`, saves/loads transparently fall back to the
19
+ previous local `config.yaml` store and surface a notice instead of failing.
20
+
21
+ [#129]: https://github.com/thomaschristory/netbox-super-cli/issues/129
22
+
23
+ ## v1.4.0 — 2026-06-26
24
+
25
+ Minor release. Three user-facing features for the interactive TUI and table
26
+ output: individually selectable custom-field columns, local saved searches, and
27
+ NetBox-native object colors.
28
+
29
+ ### Added
30
+
31
+ - **Individually selectable custom fields** ([#121], closes [#118]). The TUI
32
+ column chooser (`f` — Fields) now expands `custom_fields` into one toggleable
33
+ column per custom field (`custom_fields.<name>`) instead of a single opaque
34
+ object. On the CLI, `--columns custom_fields.<name>` selects an individual
35
+ custom field (now documented).
36
+ - **Saved searches** ([#123], closes [#119]). Named filter sets persist per
37
+ resource. In the TUI filter builder, `Ctrl+W` saves the current filters under
38
+ a name and `Ctrl+O` opens a picker to apply one (`d` deletes an entry). On the
39
+ CLI, `--saved <name>` re-applies a saved filter set on `list`; explicit
40
+ `--filter` and typed options take precedence over saved values. Names
41
+ containing `.` (or whitespace) are rejected to keep the config file well-formed.
42
+ - **NetBox object colors** ([#122], closes [#120]). Role, tag, and other
43
+ color-bearing fields render in their NetBox-defined colors in table output. A
44
+ new `object_colors` setting (`auto`/`on`/`off`) and the
45
+ `--object-colors/--no-object-colors` flag toggle this independently of
46
+ `--color`; `off`, `NO_COLOR`, and non-TTY output are always respected.
47
+
48
+ [#118]: https://github.com/thomaschristory/netbox-super-cli/issues/118
49
+ [#119]: https://github.com/thomaschristory/netbox-super-cli/issues/119
50
+ [#120]: https://github.com/thomaschristory/netbox-super-cli/issues/120
51
+ [#121]: https://github.com/thomaschristory/netbox-super-cli/pull/121
52
+ [#122]: https://github.com/thomaschristory/netbox-super-cli/pull/122
53
+ [#123]: https://github.com/thomaschristory/netbox-super-cli/pull/123
54
+
5
55
  ## v1.3.1 — 2026-06-25
6
56
 
7
57
  Patch release. CI maintenance only — no runtime or user-facing changes.
@@ -1,6 +1,61 @@
1
- # netbox-super-cli (`nsc`)
2
-
3
- A Python CLI for [NetBox](https://netbox.dev/) that builds its command tree dynamically from your install's live OpenAPI schema. The same binary works against any NetBox version and exposes plugin-provided endpoints automatically — the schema, not hand-written code, defines the surface.
1
+ Metadata-Version: 2.4
2
+ Name: netbox-super-cli
3
+ Version: 1.5.0
4
+ Summary: Dynamic NetBox CLI generated from the live OpenAPI schema.
5
+ Project-URL: Homepage, https://github.com/thomaschristory/netbox-super-cli
6
+ Project-URL: Documentation, https://thomaschristory.github.io/netbox-super-cli/
7
+ Project-URL: Source, https://github.com/thomaschristory/netbox-super-cli
8
+ Project-URL: Issues, https://github.com/thomaschristory/netbox-super-cli/issues
9
+ Project-URL: Changelog, https://github.com/thomaschristory/netbox-super-cli/blob/main/CHANGELOG.md
10
+ Author: Thomas Christory
11
+ License-Expression: Apache-2.0
12
+ License-File: LICENSE
13
+ Keywords: automation,cli,netbox,openapi
14
+ Classifier: Development Status :: 5 - Production/Stable
15
+ Classifier: Environment :: Console
16
+ Classifier: Intended Audience :: Information Technology
17
+ Classifier: Intended Audience :: System Administrators
18
+ Classifier: Intended Audience :: Telecommunications Industry
19
+ Classifier: License :: OSI Approved :: Apache Software License
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Programming Language :: Python :: 3.14
23
+ Classifier: Topic :: System :: Networking
24
+ Requires-Python: >=3.12
25
+ Requires-Dist: click>=8.1
26
+ Requires-Dist: httpx>=0.27
27
+ Requires-Dist: platformdirs>=4.2
28
+ Requires-Dist: pydantic>=2.7
29
+ Requires-Dist: rich>=13.7
30
+ Requires-Dist: ruamel-yaml>=0.18
31
+ Requires-Dist: structlog>=24.1
32
+ Requires-Dist: textual>=0.50
33
+ Requires-Dist: typer<0.27,>=0.26
34
+ Description-Content-Type: text/markdown
35
+
36
+ <div align="center">
37
+
38
+ # netbox-super-cli&nbsp;·&nbsp;`nsc`
39
+
40
+ **A Python CLI for [NetBox](https://netbox.dev/) that builds its entire command tree from your install's live OpenAPI schema.**
41
+
42
+ One binary, any NetBox version, every plugin endpoint — the schema, not hand-written code, defines the surface.
43
+
44
+ <br/>
45
+
46
+ [![PyPI version](https://img.shields.io/pypi/v/netbox-super-cli?style=flat-square&logo=pypi&logoColor=white&label=pypi)](https://pypi.org/project/netbox-super-cli/)
47
+ [![Python](https://img.shields.io/pypi/pyversions/netbox-super-cli?style=flat-square&logo=python&logoColor=white)](https://pypi.org/project/netbox-super-cli/)
48
+ [![Downloads](https://img.shields.io/pypi/dm/netbox-super-cli?style=flat-square&label=downloads)](https://pypi.org/project/netbox-super-cli/)
49
+ [![License](https://img.shields.io/badge/license-Apache_2.0-green?style=flat-square)](LICENSE)
50
+ [![Tests](https://img.shields.io/github/actions/workflow/status/thomaschristory/netbox-super-cli/test.yml?branch=main&style=flat-square&label=tests)](https://github.com/thomaschristory/netbox-super-cli/actions/workflows/test.yml)
51
+ [![Docs](https://img.shields.io/badge/docs-online-blue?style=flat-square)](https://thomaschristory.github.io/netbox-super-cli/)
52
+ [![Stars](https://img.shields.io/github/stars/thomaschristory/netbox-super-cli?style=flat-square)](https://github.com/thomaschristory/netbox-super-cli/stargazers)
53
+
54
+ [**📚 Documentation**](https://thomaschristory.github.io/netbox-super-cli/) &nbsp;·&nbsp; [**🚀 Install**](#install) &nbsp;·&nbsp; [**🖥️ Interactive TUI**](#interactive-tui) &nbsp;·&nbsp; [**🤖 AI Skill**](#bundled-skill-for-ai-agents)
55
+
56
+ </div>
57
+
58
+ ---
4
59
 
5
60
  > **Docs:** [thomaschristory.github.io/netbox-super-cli](https://thomaschristory.github.io/netbox-super-cli/) — the full guide, including install, first-run, guides, and the auto-generated CLI/config/exit-code reference.
6
61
 
@@ -45,7 +100,9 @@ nsc tui devices # jump straight into the devices list
45
100
  Highlights: a collapsible resource picker, a web-UI-style filter builder (`/`),
46
101
  inline record editing with a confirm-diff save, schema-derived relationship
47
102
  drill-down, bulk edit with a per-record preview, a persisted column chooser
48
- (`f`), and global search (`Ctrl`+`F`). Full walkthrough in the
103
+ (`f`) that lists each custom field individually, and global search (`Ctrl`+`F`).
104
+ The same dotted paths work on the CLI: `nsc ls devices --columns id,name,custom_fields.rack_role`.
105
+ Full walkthrough in the
49
106
  [Interactive TUI guide](https://thomaschristory.github.io/netbox-super-cli/guides/interactive-tui/).
50
107
 
51
108
  ## Reading
@@ -61,6 +118,41 @@ uv run nsc circuits providers list --output csv
61
118
  uv run nsc ipam prefixes list --filter created__gte=2026-01-01 --output yaml
62
119
  ```
63
120
 
121
+ ### Saved searches
122
+
123
+ Filter sets you save from the TUI (Ctrl+W in the filter builder) are stored as
124
+ **NetBox native saved filters** (`extras.saved-filters`), scoped to the resource's
125
+ object type. A search you save in `nsc` shows up in the NetBox web UI's filter
126
+ dropdown for that object — and a filter saved in the web UI loads in the TUI
127
+ (Ctrl+O) — so the two are fully interchangeable. Re-apply one on the CLI with
128
+ `--saved`:
129
+
130
+ ```sh
131
+ uv run nsc dcim devices list --saved active-switches
132
+ # explicit --filter / typed options override the saved values:
133
+ uv run nsc dcim devices list --saved active-switches --status offline
134
+ ```
135
+
136
+ When NetBox is unreachable (offline, or missing permission on
137
+ `extras.savedfilter`), `nsc` transparently falls back to a local store under
138
+ `saved_searches` in `~/.nsc/config.yaml`, keyed by tag/resource, and tells you it
139
+ did so.
140
+
141
+ ### Object colors
142
+
143
+ NetBox assigns colors to roles, tags, and similar fields. In table output `nsc`
144
+ renders those values in their NetBox-defined colors:
145
+
146
+ ```sh
147
+ uv run nsc dcim devices list # colored when stdout is a TTY
148
+ uv run nsc dcim devices list --no-object-colors # plain text
149
+ ```
150
+
151
+ Toggle it independently of `--color` with the `object_colors` setting
152
+ (`auto`/`on`/`off`) or the `--object-colors/--no-object-colors` flag. `off`,
153
+ `NO_COLOR`, and non-TTY output are always respected, so piped or redirected
154
+ output stays uncolored.
155
+
64
156
  ## Writing
65
157
 
66
158
  ```sh
@@ -1,35 +1,26 @@
1
- Metadata-Version: 2.4
2
- Name: netbox-super-cli
3
- Version: 1.3.1
4
- Summary: Dynamic NetBox CLI generated from the live OpenAPI schema.
5
- Project-URL: Homepage, https://github.com/thomaschristory/netbox-super-cli
6
- Project-URL: Issues, https://github.com/thomaschristory/netbox-super-cli/issues
7
- Author-email: Thomas <mick27@gmail.com>
8
- License-Expression: Apache-2.0
9
- License-File: LICENSE
10
- Keywords: automation,cli,netbox,openapi
11
- Classifier: Development Status :: 3 - Alpha
12
- Classifier: Environment :: Console
13
- Classifier: Intended Audience :: System Administrators
14
- Classifier: License :: OSI Approved :: Apache Software License
15
- Classifier: Programming Language :: Python :: 3.12
16
- Classifier: Programming Language :: Python :: 3.13
17
- Classifier: Topic :: System :: Networking
18
- Requires-Python: >=3.12
19
- Requires-Dist: click>=8.1
20
- Requires-Dist: httpx>=0.27
21
- Requires-Dist: platformdirs>=4.2
22
- Requires-Dist: pydantic>=2.7
23
- Requires-Dist: rich>=13.7
24
- Requires-Dist: ruamel-yaml>=0.18
25
- Requires-Dist: structlog>=24.1
26
- Requires-Dist: textual>=0.50
27
- Requires-Dist: typer<0.27,>=0.26
28
- Description-Content-Type: text/markdown
29
-
30
- # netbox-super-cli (`nsc`)
31
-
32
- A Python CLI for [NetBox](https://netbox.dev/) that builds its command tree dynamically from your install's live OpenAPI schema. The same binary works against any NetBox version and exposes plugin-provided endpoints automatically — the schema, not hand-written code, defines the surface.
1
+ <div align="center">
2
+
3
+ # netbox-super-cli&nbsp;·&nbsp;`nsc`
4
+
5
+ **A Python CLI for [NetBox](https://netbox.dev/) that builds its entire command tree from your install's live OpenAPI schema.**
6
+
7
+ One binary, any NetBox version, every plugin endpoint — the schema, not hand-written code, defines the surface.
8
+
9
+ <br/>
10
+
11
+ [![PyPI version](https://img.shields.io/pypi/v/netbox-super-cli?style=flat-square&logo=pypi&logoColor=white&label=pypi)](https://pypi.org/project/netbox-super-cli/)
12
+ [![Python](https://img.shields.io/pypi/pyversions/netbox-super-cli?style=flat-square&logo=python&logoColor=white)](https://pypi.org/project/netbox-super-cli/)
13
+ [![Downloads](https://img.shields.io/pypi/dm/netbox-super-cli?style=flat-square&label=downloads)](https://pypi.org/project/netbox-super-cli/)
14
+ [![License](https://img.shields.io/badge/license-Apache_2.0-green?style=flat-square)](LICENSE)
15
+ [![Tests](https://img.shields.io/github/actions/workflow/status/thomaschristory/netbox-super-cli/test.yml?branch=main&style=flat-square&label=tests)](https://github.com/thomaschristory/netbox-super-cli/actions/workflows/test.yml)
16
+ [![Docs](https://img.shields.io/badge/docs-online-blue?style=flat-square)](https://thomaschristory.github.io/netbox-super-cli/)
17
+ [![Stars](https://img.shields.io/github/stars/thomaschristory/netbox-super-cli?style=flat-square)](https://github.com/thomaschristory/netbox-super-cli/stargazers)
18
+
19
+ [**📚 Documentation**](https://thomaschristory.github.io/netbox-super-cli/) &nbsp;·&nbsp; [**🚀 Install**](#install) &nbsp;·&nbsp; [**🖥️ Interactive TUI**](#interactive-tui) &nbsp;·&nbsp; [**🤖 AI Skill**](#bundled-skill-for-ai-agents)
20
+
21
+ </div>
22
+
23
+ ---
33
24
 
34
25
  > **Docs:** [thomaschristory.github.io/netbox-super-cli](https://thomaschristory.github.io/netbox-super-cli/) — the full guide, including install, first-run, guides, and the auto-generated CLI/config/exit-code reference.
35
26
 
@@ -74,7 +65,9 @@ nsc tui devices # jump straight into the devices list
74
65
  Highlights: a collapsible resource picker, a web-UI-style filter builder (`/`),
75
66
  inline record editing with a confirm-diff save, schema-derived relationship
76
67
  drill-down, bulk edit with a per-record preview, a persisted column chooser
77
- (`f`), and global search (`Ctrl`+`F`). Full walkthrough in the
68
+ (`f`) that lists each custom field individually, and global search (`Ctrl`+`F`).
69
+ The same dotted paths work on the CLI: `nsc ls devices --columns id,name,custom_fields.rack_role`.
70
+ Full walkthrough in the
78
71
  [Interactive TUI guide](https://thomaschristory.github.io/netbox-super-cli/guides/interactive-tui/).
79
72
 
80
73
  ## Reading
@@ -90,6 +83,41 @@ uv run nsc circuits providers list --output csv
90
83
  uv run nsc ipam prefixes list --filter created__gte=2026-01-01 --output yaml
91
84
  ```
92
85
 
86
+ ### Saved searches
87
+
88
+ Filter sets you save from the TUI (Ctrl+W in the filter builder) are stored as
89
+ **NetBox native saved filters** (`extras.saved-filters`), scoped to the resource's
90
+ object type. A search you save in `nsc` shows up in the NetBox web UI's filter
91
+ dropdown for that object — and a filter saved in the web UI loads in the TUI
92
+ (Ctrl+O) — so the two are fully interchangeable. Re-apply one on the CLI with
93
+ `--saved`:
94
+
95
+ ```sh
96
+ uv run nsc dcim devices list --saved active-switches
97
+ # explicit --filter / typed options override the saved values:
98
+ uv run nsc dcim devices list --saved active-switches --status offline
99
+ ```
100
+
101
+ When NetBox is unreachable (offline, or missing permission on
102
+ `extras.savedfilter`), `nsc` transparently falls back to a local store under
103
+ `saved_searches` in `~/.nsc/config.yaml`, keyed by tag/resource, and tells you it
104
+ did so.
105
+
106
+ ### Object colors
107
+
108
+ NetBox assigns colors to roles, tags, and similar fields. In table output `nsc`
109
+ renders those values in their NetBox-defined colors:
110
+
111
+ ```sh
112
+ uv run nsc dcim devices list # colored when stdout is a TTY
113
+ uv run nsc dcim devices list --no-object-colors # plain text
114
+ ```
115
+
116
+ Toggle it independently of `--color` with the `object_colors` setting
117
+ (`auto`/`on`/`off`) or the `--object-colors/--no-object-colors` flag. `off`,
118
+ `NO_COLOR`, and non-TTY output are always respected, so piped or redirected
119
+ output stays uncolored.
120
+
93
121
  ## Writing
94
122
 
95
123
  ```sh
@@ -81,11 +81,27 @@ NetBox list endpoint exposes hundreds of query parameters.
81
81
  | <kbd>↓</kbd> | Move to the next field (from a text field) |
82
82
  | <kbd>Tab</kbd> / <kbd>Shift</kbd>+<kbd>Tab</kbd> | Move between fields |
83
83
  | <kbd>Ctrl</kbd>+<kbd>S</kbd> | Apply |
84
+ | <kbd>Ctrl</kbd>+<kbd>W</kbd> | Save the current filters as a named search |
85
+ | <kbd>Ctrl</kbd>+<kbd>O</kbd> | Load (or delete) a saved search |
84
86
  | <kbd>Esc</kbd> | Cancel |
85
87
 
86
88
  Applying re-queries the list. Reopening the builder shows your current filters
87
89
  so you can refine them.
88
90
 
91
+ ### Saved searches
92
+
93
+ <kbd>Ctrl</kbd>+<kbd>W</kbd> stores the current filter set as a NetBox **native
94
+ saved filter** (`extras.saved-filters`), scoped to the current resource's object
95
+ type. It then appears in the NetBox web UI's filter dropdown for that object, and
96
+ filters created in the web UI load here with <kbd>Ctrl</kbd>+<kbd>O</kbd> — the two
97
+ surfaces are interchangeable. In the load picker, <kbd>Enter</kbd> applies the
98
+ highlighted search and <kbd>d</kbd> deletes it. Re-apply one non-interactively
99
+ with `nsc <app> <resource> list --saved <name>`.
100
+
101
+ If NetBox is unreachable (offline, or you lack permission on
102
+ `extras.savedfilter`), saves and loads transparently fall back to a local store in
103
+ `~/.nsc/config.yaml` and a toast tells you the fallback was used.
104
+
89
105
  ## Viewing and editing a record
90
106
 
91
107
  The detail view **is** the edit surface — there is no separate "edit window".
@@ -11,8 +11,9 @@ All fields below describe `~/.nsc/config.yaml`.
11
11
  |---|---|---|
12
12
  | `default_profile` | `str | None` | `None` |
13
13
  | `profiles` | `dict[str, Profile]` | `{}` |
14
- | `defaults` | `<class 'Defaults'>` | `Defaults(output=<OutputFormat.TABLE: 'table'>, page_size=50, timeout=30.0, schema_refresh=<SchemaRefresh.DAILY: 'daily'>, color_mode=<ColorMode.AUTO: 'auto'>, audit_redaction=<AuditRedaction.SAFE: 'safe'>)` |
14
+ | `defaults` | `<class 'Defaults'>` | `Defaults(output=<OutputFormat.TABLE: 'table'>, page_size=50, timeout=30.0, schema_refresh=<SchemaRefresh.DAILY: 'daily'>, color_mode=<ColorMode.AUTO: 'auto'>, object_colors=<ObjectColorMode.AUTO: 'auto'>, audit_redaction=<AuditRedaction.SAFE: 'safe'>)` |
15
15
  | `columns` | `dict[str, dict[str, list[str]]]` | `{}` |
16
+ | `saved_searches` | `dict[str, dict[str, dict[str, dict[str, str]]]]` | `{}` |
16
17
 
17
18
  ## `Profile`
18
19
 
@@ -34,4 +35,5 @@ All fields below describe `~/.nsc/config.yaml`.
34
35
  | `timeout` | `<class 'float'>` | `30.0` |
35
36
  | `schema_refresh` | `<enum 'SchemaRefresh'>` | `<SchemaRefresh.DAILY: 'daily'>` |
36
37
  | `color_mode` | `<enum 'ColorMode'>` | `<ColorMode.AUTO: 'auto'>` |
38
+ | `object_colors` | `<enum 'ObjectColorMode'>` | `<ObjectColorMode.AUTO: 'auto'>` |
37
39
  | `audit_redaction` | `<enum 'AuditRedaction'>` | `<AuditRedaction.SAFE: 'safe'>` |
@@ -1,3 +1,3 @@
1
1
  """Single source of truth for the package version."""
2
2
 
3
- __version__ = "1.3.1"
3
+ __version__ = "1.5.0"
@@ -94,6 +94,14 @@ def _extract_global_overrides(args: list[str]) -> CLIOverrides:
94
94
  kwargs["refresh_schema"] = True
95
95
  i += 1
96
96
  continue
97
+ if a == "--object-colors":
98
+ kwargs["object_colors"] = True
99
+ i += 1
100
+ continue
101
+ if a == "--no-object-colors":
102
+ kwargs["object_colors"] = False
103
+ i += 1
104
+ continue
97
105
  i += 1
98
106
  return CLIOverrides(**kwargs) # type: ignore[arg-type]
99
107
 
@@ -310,6 +318,13 @@ def _root(
310
318
  ),
311
319
  ] = False,
312
320
  output: Annotated[str | None, typer.Option("--output", "-o")] = None,
321
+ object_colors: Annotated[
322
+ bool | None,
323
+ typer.Option(
324
+ "--object-colors/--no-object-colors",
325
+ help="Render NetBox-native object colors (role/tag/…) in table output.",
326
+ ),
327
+ ] = None,
313
328
  debug: Annotated[bool, typer.Option("--debug")] = False,
314
329
  ) -> None:
315
330
  """Root callback — global options live here."""
@@ -321,6 +336,7 @@ def _root(
321
336
  schema_override=schema,
322
337
  refresh_schema=refresh_schema,
323
338
  output=output,
339
+ object_colors=object_colors,
324
340
  )
325
341
  try:
326
342
  config = load_config(default_paths().config_file)