quadkit-cli 0.0.2__tar.gz → 0.0.4__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. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/.gitignore +18 -25
  2. quadkit_cli-0.0.4/PKG-INFO +187 -0
  3. quadkit_cli-0.0.4/README.md +131 -0
  4. quadkit_cli-0.0.4/docs/ARCHITECTURE.md +586 -0
  5. quadkit_cli-0.0.4/docs/COMMANDS.md +258 -0
  6. quadkit_cli-0.0.4/docs/CONFIGURATION.md +46 -0
  7. quadkit_cli-0.0.4/docs/GUIDE.md +205 -0
  8. quadkit_cli-0.0.4/docs/HOWTOS.md +92 -0
  9. quadkit_cli-0.0.4/docs/PROJECT_LAYOUT.md +242 -0
  10. quadkit_cli-0.0.4/docs/PUBLIC_PACKAGE_CLI_MATRIX.md +89 -0
  11. quadkit_cli-0.0.4/docs/QUICKSTART.md +67 -0
  12. quadkit_cli-0.0.4/docs/TROUBLESHOOTING.md +150 -0
  13. quadkit_cli-0.0.4/example.yaml +8 -0
  14. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/pyproject.toml +23 -23
  15. quadkit_cli-0.0.4/src/quadkit/cli/commands/__init__.py +48 -0
  16. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/commands/config.py +37 -10
  17. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/commands/db_bootstrap.py +11 -10
  18. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/commands/db_commands_ops.py +2 -2
  19. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/commands/events.py +13 -10
  20. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/commands/init.py +3 -1
  21. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/commands/inspect.py +2 -1
  22. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/commands/meta.py +60 -61
  23. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/commands/new.py +6 -3
  24. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/commands/project.py +3 -4
  25. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/commands/system.py +40 -34
  26. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/config.py +0 -3
  27. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/contributors/core.py +4 -1
  28. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/contributors/runtime.py +2 -30
  29. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/exceptions.py +3 -1
  30. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/lib/__init__.py +0 -2
  31. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/lib/config_loader.py +10 -2
  32. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/output/manager.py +8 -9
  33. quadkit_cli-0.0.4/src/quadkit/cli/package_names.py +116 -0
  34. quadkit_cli-0.0.4/src/quadkit/cli/registry/__init__.py +363 -0
  35. quadkit_cli-0.0.4/src/quadkit/cli/registry/_lazy_exports.py +167 -0
  36. quadkit_cli-0.0.4/src/quadkit/cli/registry/database.py +216 -0
  37. quadkit_cli-0.0.2/src/quadkit/cli/registry/database.py → quadkit_cli-0.0.4/src/quadkit/cli/registry/database_backends.py +6 -191
  38. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/health_checks/providers.py +14 -31
  39. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/migration.py +7 -1
  40. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/presets.py +20 -22
  41. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/provider_catalog.py +20 -18
  42. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/provider_registry.py +19 -6
  43. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/secrets.py +6 -1
  44. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/template.py +16 -35
  45. quadkit_cli-0.0.4/src/quadkit/cli/runtime/__init__.py +37 -0
  46. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/runtime/context.py +8 -1
  47. quadkit_cli-0.0.4/src/quadkit/cli/runtime/main.py +330 -0
  48. quadkit_cli-0.0.4/src/quadkit/cli/scaffold/__init__.py +59 -0
  49. quadkit_cli-0.0.4/src/quadkit/cli/scaffold/app_files.py +377 -0
  50. quadkit_cli-0.0.4/src/quadkit/cli/scaffold/module_files.py +328 -0
  51. quadkit_cli-0.0.4/src/quadkit/cli/scaffold/render.py +193 -0
  52. quadkit_cli-0.0.4/src/quadkit/cli/scaffold/specs.py +201 -0
  53. quadkit_cli-0.0.4/src/quadkit/cli/scaffold/support_files.py +143 -0
  54. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/conftest.py +2 -4
  55. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/commands/test_system.py +15 -5
  56. quadkit_cli-0.0.4/tests/unit/registry/test_completion.py +80 -0
  57. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/registry/test_database.py +5 -5
  58. quadkit_cli-0.0.4/tests/unit/registry/test_presets.py +120 -0
  59. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/registry/test_template.py +4 -1
  60. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_cli_context.py +3 -1
  61. quadkit_cli-0.0.4/tests/unit/test_cli_contribution_system__testclicontributorsubprovider.py +478 -0
  62. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_cli_errors.py +2 -2
  63. quadkit_cli-0.0.4/tests/unit/test_cli_import_isolation.py +229 -0
  64. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_contributor_runtime.py +3 -3
  65. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_db.py +3 -0
  66. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_generator_base.py +1 -1
  67. quadkit_cli-0.0.4/tests/unit/test_generator_option_help.py +65 -0
  68. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_health_checks.py +18 -6
  69. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_new.py +8 -3
  70. quadkit_cli-0.0.4/tests/unit/test_package_names.py +153 -0
  71. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_project_layout.py +4 -2
  72. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_provider_registry.py +24 -24
  73. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_scaffold_and_validators.py +14 -1
  74. quadkit_cli-0.0.4/tests/unit/test_storage_driver_generator.py +46 -0
  75. quadkit_cli-0.0.2/PKG-INFO +0 -194
  76. quadkit_cli-0.0.2/README.md +0 -138
  77. quadkit_cli-0.0.2/example.yaml +0 -13
  78. quadkit_cli-0.0.2/src/quadkit/cli/commands/__init__.py +0 -36
  79. quadkit_cli-0.0.2/src/quadkit/cli/lib/config_gen.py +0 -304
  80. quadkit_cli-0.0.2/src/quadkit/cli/lib/console.py +0 -18
  81. quadkit_cli-0.0.2/src/quadkit/cli/registry/__init__.py +0 -338
  82. quadkit_cli-0.0.2/src/quadkit/cli/runtime/__init__.py +0 -8
  83. quadkit_cli-0.0.2/src/quadkit/cli/runtime/main.py +0 -154
  84. quadkit_cli-0.0.2/src/quadkit/cli/scaffold.py +0 -1161
  85. quadkit_cli-0.0.2/tests/unit/lib/test_config_gen.py +0 -251
  86. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/LICENSE +0 -0
  87. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/NOTICE +0 -0
  88. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/__init__.py +0 -0
  89. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/assembly/__init__.py +0 -0
  90. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/assembly/assembler.py +0 -0
  91. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/commands/add.py +0 -0
  92. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/commands/config_utils.py +0 -0
  93. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/commands/contrib.py +0 -0
  94. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/commands/db.py +0 -0
  95. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/commands/db_commands_data.py +0 -0
  96. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/commands/db_commands_migrations.py +0 -0
  97. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/commands/dev.py +0 -0
  98. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/commands/gen.py +0 -0
  99. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/commands/py.typed +0 -0
  100. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/commands/run.py +0 -0
  101. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/commands/shell.py +0 -0
  102. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/constants.py +0 -0
  103. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/contributors/__init__.py +0 -0
  104. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/contributors/base.py +0 -0
  105. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/contributors/discovery.py +0 -0
  106. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/contributors/registry.py +0 -0
  107. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/decorators.py +0 -0
  108. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/di/__init__.py +0 -0
  109. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/di/provider.py +0 -0
  110. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/di/sub_providers/__init__.py +0 -0
  111. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/di/sub_providers/contributor.py +0 -0
  112. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/events.py +0 -0
  113. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/generators/__init__.py +0 -0
  114. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/generators/base.py +0 -0
  115. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/generators/field_parser.py +0 -0
  116. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/generators/provider.py +0 -0
  117. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/generators/test.py +0 -0
  118. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/hooks.py +0 -0
  119. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/layout.py +0 -0
  120. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/lib/entry_point.py +0 -0
  121. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/lib/naming.py +0 -0
  122. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/lib/templates.py +0 -0
  123. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/module.py +0 -0
  124. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/output/__init__.py +0 -0
  125. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/protocols.py +0 -0
  126. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/py.typed +0 -0
  127. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/backend_base.py +0 -0
  128. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/command.py +0 -0
  129. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/completion.py +0 -0
  130. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/config.py +0 -0
  131. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/environment.py +0 -0
  132. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/formatter.py +0 -0
  133. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/generator.py +0 -0
  134. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/health.py +0 -0
  135. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/health_checks/__init__.py +0 -0
  136. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/health_checks/base.py +0 -0
  137. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/health_checks/deps.py +0 -0
  138. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/health_checks/project.py +0 -0
  139. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/health_checks/python_env.py +0 -0
  140. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/health_checks/tools.py +0 -0
  141. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/health_checks/vcs_docker.py +0 -0
  142. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/hook.py +0 -0
  143. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/inspect.py +0 -0
  144. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/provider.py +0 -0
  145. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/serializer.py +0 -0
  146. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/server.py +0 -0
  147. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/task.py +0 -0
  148. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/telemetry.py +0 -0
  149. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/version.py +0 -0
  150. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/registry/watcher.py +0 -0
  151. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/runtime/error_handler.py +0 -0
  152. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/scaffold_package.py +0 -0
  153. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/templates/provider.py.jinja2 +0 -0
  154. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/templates/py.typed +0 -0
  155. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/templates/test_unit.py.jinja2 +0 -0
  156. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/cli/types.py +0 -0
  157. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/src/quadkit/py.typed +0 -0
  158. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/helpers/runner.py +0 -0
  159. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/integration/__init__.py +0 -0
  160. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/integration/test_cli_lifecycle.py +0 -0
  161. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/test_package_structure_p1.py +0 -0
  162. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/__init__.py +0 -0
  163. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/_test_cli_contribution_system_support.py +0 -0
  164. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/commands/__init__.py +0 -0
  165. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/commands/test_config.py +0 -0
  166. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/commands/test_config_happy_paths.py +0 -0
  167. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/commands/test_contrib.py +0 -0
  168. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/commands/test_events_cmd.py +0 -0
  169. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/commands/test_inspect.py +0 -0
  170. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/commands/test_meta.py +0 -0
  171. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/commands/test_run.py +0 -0
  172. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/commands/test_shell.py +0 -0
  173. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/di/test_config_alignment.py +0 -0
  174. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/lib/test_templates.py +0 -0
  175. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/registry/__init__.py +0 -0
  176. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/registry/test_environment.py +0 -0
  177. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/registry/test_formatter.py +0 -0
  178. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/registry/test_health.py +0 -0
  179. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/registry/test_hook.py +0 -0
  180. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/registry/test_inspect_registry.py +0 -0
  181. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/registry/test_migration.py +0 -0
  182. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/registry/test_secrets.py +0 -0
  183. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/registry/test_serializer.py +0 -0
  184. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/registry/test_task.py +0 -0
  185. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/registry/test_telemetry.py +0 -0
  186. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/registry/test_version.py +0 -0
  187. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/registry/test_watcher.py +0 -0
  188. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_add.py +0 -0
  189. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_base_contributor.py +0 -0
  190. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_cli_constants.py +0 -0
  191. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_cli_contribution_system.py +0 -0
  192. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_cli_exceptions.py +0 -0
  193. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_cli_module.py +0 -0
  194. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_cli_types.py +0 -0
  195. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_config_async.py +0 -0
  196. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_config_loader.py +0 -0
  197. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_config_save.py +0 -0
  198. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_config_validate.py +0 -0
  199. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_contributor_registry.py +0 -0
  200. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_core_contributor.py +0 -0
  201. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_decorators.py +0 -0
  202. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_dev_command.py +0 -0
  203. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_error_handler.py +0 -0
  204. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_events.py +0 -0
  205. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_exception_handling.py +0 -0
  206. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_field_parser.py +0 -0
  207. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_gen.py +0 -0
  208. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_gen_controller.py +0 -0
  209. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_gen_provider.py +0 -0
  210. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_generator_registry.py +0 -0
  211. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_generators_contract.py +0 -0
  212. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_hooks.py +0 -0
  213. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_init_command.py +0 -0
  214. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_layout.py +0 -0
  215. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_main.py +0 -0
  216. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_output.py +0 -0
  217. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_output_json.py +0 -0
  218. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_project.py +0 -0
  219. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_public_surface.py +0 -0
  220. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_round40_hardening.py +0 -0
  221. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_run_detection.py +0 -0
  222. {quadkit_cli-0.0.2 → quadkit_cli-0.0.4}/tests/unit/test_server_registry.py +0 -0
@@ -28,6 +28,8 @@
28
28
  !.importlinter
29
29
  !.superpowers/
30
30
  !.superpowers/**
31
+ !.gitattributes
32
+ !.editorconfig
31
33
  !Makefile
32
34
  !docker-compose.test.yml
33
35
  !quadkit.yaml.example
@@ -98,69 +100,62 @@ internal-docs/
98
100
  # Editor swap files
99
101
  *.swp
100
102
 
101
- # Tiered package layout (core/, packages/, experimental/<family>/)
102
103
  !core/
103
104
  !packages/
104
- !experimental/
105
- !experimental/*/
106
105
  !core/quadkit*/
107
106
  !packages/quadkit*/
108
- !experimental/*/quadkit*/
109
107
  !core/quadkit*/pyproject.toml
110
108
  !packages/quadkit*/pyproject.toml
111
- !experimental/*/quadkit*/pyproject.toml
112
109
  !core/quadkit*/CHANGELOG.md
113
110
  !packages/quadkit*/CHANGELOG.md
114
- !experimental/*/quadkit*/CHANGELOG.md
115
111
  !core/quadkit*/README.md
116
112
  !packages/quadkit*/README.md
117
- !experimental/*/quadkit*/README.md
118
113
  !core/quadkit*/alembic.ini
119
114
  !packages/quadkit*/alembic.ini
120
- !experimental/*/quadkit*/alembic.ini
121
115
  !core/quadkit*/mypy.ini
122
116
  !packages/quadkit*/mypy.ini
123
- !experimental/*/quadkit*/mypy.ini
124
117
  !core/quadkit*/*.yaml.example
125
118
  !packages/quadkit*/*.yaml.example
126
- !experimental/*/quadkit*/*.yaml.example
127
119
  !core/quadkit*/src/
128
120
  !core/quadkit*/src/**
129
121
  !packages/quadkit*/src/
130
122
  !packages/quadkit*/src/**
131
- !experimental/*/quadkit*/src/
132
- !experimental/*/quadkit*/src/**
133
123
  !core/quadkit*/tests/
134
124
  !core/quadkit*/tests/**
135
125
  !packages/quadkit*/tests/
136
126
  !packages/quadkit*/tests/**
137
- !experimental/*/quadkit*/tests/
138
- !experimental/*/quadkit*/tests/**
139
127
  !core/quadkit*/docs/
140
128
  !core/quadkit*/docs/**
141
129
  !packages/quadkit*/docs/
142
130
  !packages/quadkit*/docs/**
143
- !experimental/*/quadkit*/docs/
144
- !experimental/*/quadkit*/docs/**
145
131
 
146
132
  # dev/
147
133
  !dev/
148
134
  !dev/**
149
135
 
150
136
  # Admin dev playground (committed dev asset; local SQLite files stay ignored)
151
- !experimental/*/quadkit*/playground/
152
- !experimental/*/quadkit*/playground/**
153
- experimental/*/quadkit*/playground/*.db
154
- experimental/*/quadkit*/playground/*.db-*
137
+ !packages/quadkit-admin/playground/
138
+ !packages/quadkit-admin/playground/serve.py
139
+
140
+ # gatewai apps
141
+ !apps/
142
+ !apps/**
143
+ !apps/gatewai/
144
+ !apps/gatewai/**
145
+ apps/**/node_modules/
146
+ apps/**/dist/
147
+ apps/**/__pycache__/
148
+ apps/**/*.pyc
149
+ apps/**/*.db
150
+ apps/**/*.db-wal
151
+ apps/**/*.db-shm
155
152
 
156
153
  # Re-exclude private content under the tiered paths.
157
154
  # MUST come after the !...docs/** negations above — last match wins.
158
155
  core/quadkit*/docs/plans/
159
156
  packages/quadkit*/docs/plans/
160
- experimental/*/quadkit*/docs/plans/
161
157
  core/quadkit*/docs/**/
162
158
  packages/quadkit*/docs/**/
163
- experimental/*/quadkit*/docs/**/
164
159
 
165
160
  # Re-exclude tooling artifacts under the tiered paths
166
161
  __pycache__/
@@ -178,13 +173,11 @@ test.db
178
173
  *.log
179
174
  !core/quadkit*/tests/fixtures/test.db
180
175
  !packages/quadkit*/tests/fixtures/test.db
181
- !experimental/*/quadkit*/tests/fixtures/test.db
182
176
 
183
177
  # Allow the generated example gifs to be tracked (README hero images).
184
178
  !core/quadkit*/docs/gifs/
185
179
  !core/quadkit*/docs/gifs/**
186
180
  !packages/*/quadkit*/docs/gifs/
187
181
  !packages/*/quadkit*/docs/gifs/**
188
- !experimental/*/quadkit*/docs/gifs/
189
- !experimental/*/quadkit*/docs/gifs/**
190
182
  examples/*/screenshot.png
183
+ !banner*
@@ -0,0 +1,187 @@
1
+ Metadata-Version: 2.5
2
+ Name: quadkit-cli
3
+ Version: 0.0.4
4
+ Summary: Command-line interface for Quadkit Framework - Project scaffolding, code generation, and development tools
5
+ Project-URL: Homepage, https://dbtinoy-.github.io/quadkit/
6
+ Project-URL: Repository, https://github.com/dbtinoy-/quadkit
7
+ Project-URL: Documentation, https://dbtinoy-.github.io/quadkit/
8
+ Project-URL: Issues, https://github.com/dbtinoy-/quadkit/issues
9
+ Project-URL: Changelog, https://github.com/dbtinoy-/quadkit/blob/main/CHANGELOG.md
10
+ Author-email: Quadkit Framework Team <team@quadkit.dev>
11
+ Maintainer-email: Quadkit Framework Team <team@quadkit.dev>
12
+ License: Apache-2.0
13
+ License-File: LICENSE
14
+ License-File: NOTICE
15
+ Keywords: cli,codegen,command-line,devtools,framework,scaffolding
16
+ Classifier: Development Status :: 3 - Alpha
17
+ Classifier: Environment :: Console
18
+ Classifier: Intended Audience :: Developers
19
+ Classifier: License :: OSI Approved :: Apache Software License
20
+ Classifier: Operating System :: OS Independent
21
+ Classifier: Programming Language :: Python :: 3
22
+ Classifier: Programming Language :: Python :: 3.11
23
+ Classifier: Programming Language :: Python :: 3.12
24
+ Classifier: Programming Language :: Python :: 3.13
25
+ Classifier: Topic :: Software Development :: Code Generators
26
+ Classifier: Topic :: Utilities
27
+ Classifier: Typing :: Typed
28
+ Requires-Python: >=3.11
29
+ Requires-Dist: aiofiles<26,>=23.0.0
30
+ Requires-Dist: click<9,>=8.1.0
31
+ Requires-Dist: httpx<1,>=0.25.0
32
+ Requires-Dist: jinja2<4,>=3.1.0
33
+ Requires-Dist: pyyaml<7,>=6.0
34
+ Requires-Dist: quadkit-contracts>=0.0.2
35
+ Requires-Dist: quadkit>=0.0.2
36
+ Requires-Dist: rich<14,>=13.0.0
37
+ Requires-Dist: shellingham<2,>=1.5.0
38
+ Requires-Dist: tomli<3,>=2.0.0
39
+ Requires-Dist: typer[all]<1,>=0.9.0
40
+ Requires-Dist: watchfiles<2,>=0.21.0
41
+ Provides-Extra: all
42
+ Requires-Dist: pytest-asyncio<2,>=0.21.0; extra == 'all'
43
+ Requires-Dist: pytest-cov<8,>=4.0.0; extra == 'all'
44
+ Requires-Dist: pytest<10,>=8.0.0; extra == 'all'
45
+ Requires-Dist: quadkit-testing>=0.0.2; extra == 'all'
46
+ Provides-Extra: dev
47
+ Requires-Dist: black<27,>=23.0.0; extra == 'dev'
48
+ Requires-Dist: mypy<3,>=1.0.0; extra == 'dev'
49
+ Requires-Dist: ruff<1,>=0.1.0; extra == 'dev'
50
+ Provides-Extra: test
51
+ Requires-Dist: pytest-asyncio<2,>=0.21.0; extra == 'test'
52
+ Requires-Dist: pytest-cov<8,>=4.0.0; extra == 'test'
53
+ Requires-Dist: pytest<10,>=8.0.0; extra == 'test'
54
+ Requires-Dist: quadkit-testing>=0.0.2; extra == 'test'
55
+ Description-Content-Type: text/markdown
56
+
57
+ # quadkit-cli
58
+
59
+ ![Quadkit](https://raw.githubusercontent.com/dbtinoy-/quadkit/main/banner.jpg)
60
+
61
+ [![PyPI](https://img.shields.io/pypi/v/quadkit-cli?color=%2322c55e&label=pypi)](https://pypi.org/project/quadkit-cli/)
62
+ [![Python](https://img.shields.io/pypi/pyversions/quadkit-cli?color=%2322c55e)](https://pypi.org/project/quadkit-cli/)
63
+ [![License](https://img.shields.io/pypi/l/quadkit-cli?color=%2322c55e)](https://github.com/dbtinoy-/quadkit/blob/main/LICENSE)
64
+
65
+ The `quadkit` command line: project scaffolding, generators, a smart
66
+ runner, and administrative commands for every stage of the application
67
+ lifecycle. Contributor-based — other packages can register their own
68
+ commands.
69
+
70
+ For day-to-day Quadkit developers: scaffold, generate, run, inspect.
71
+
72
+ ## The quadkit family
73
+
74
+ | Package | Role |
75
+ | --- | --- |
76
+ | [`quadkit-contracts`](https://pypi.org/project/quadkit-contracts/) | zero-dependency protocols, types, exception hierarchy |
77
+ | [`quadkit`](https://pypi.org/project/quadkit/) | the framework core — DI container, modules, config, logging, `Result` |
78
+ | [`quadkit-web`](https://pypi.org/project/quadkit-web/) | ASGI layer — controllers, routing, middleware, OpenAPI docs |
79
+ | [`quadkit-cli`](https://pypi.org/project/quadkit-cli/) | project scaffolding and code generators |
80
+ | [`quadkit-testing`](https://pypi.org/project/quadkit-testing/) | in-process test beds, fakes, fixtures |
81
+
82
+ ## Installation
83
+
84
+ ```bash
85
+ uv add quadkit-cli
86
+ # or as a standalone tool:
87
+ uv tool install quadkit-cli
88
+ ```
89
+
90
+ Requires **Python >= 3.11**.
91
+
92
+ ## Minimal working example
93
+
94
+ There is no code to write — the product is the command line:
95
+
96
+ ```bash
97
+ # Create a new project (template defaults to web-api); the package
98
+ # inside is my_api/ with app.py exposing create_app()
99
+ quadkit new project my-api
100
+ cd my-api
101
+
102
+ # Generate application code (list all generators: quadkit gen list)
103
+ quadkit gen provider MyProvider
104
+ quadkit gen controller Orders
105
+
106
+ # Serve the application; reload is on by default, pass --no-reload in prod
107
+ quadkit run my_api.app:create_app --host 0.0.0.0 --port 8000 --workers 4
108
+ ```
109
+
110
+ Eleven generators ship today (`quadkit gen list`):
111
+
112
+ ```text
113
+ controller middleware graphql webhook websocket exception_filter
114
+ interceptor error resource provider test
115
+ ```
116
+
117
+ Global options: `--json` for machine-readable output, `--quiet`,
118
+ `--debug`, `--no-color`, and `--config <path>` to point at a specific
119
+ `application.yaml`.
120
+
121
+ ## Command index
122
+
123
+ | Command | Purpose |
124
+ | --- | --- |
125
+ | `quadkit new project / module / package` | scaffold projects, bounded contexts, and `quadkit-*` extensions |
126
+ | `quadkit init` | initialize Quadkit in an existing project |
127
+ | `quadkit add <provider>` | add a provider to a project (e.g. `database`, `auth`) |
128
+ | `quadkit run [target]` | smart runner — auto-detects `create_app`, sets profile |
129
+ | `quadkit dev start` | production-server startup |
130
+ | `quadkit gen <what>` | code generation (controllers, providers, middleware, tests, more — see `quadkit gen list`) |
131
+ | `quadkit test` / `quadkit lint` | project-level checks |
132
+ | `quadkit db` / `quadkit events` | database / event-schema management |
133
+ | `quadkit config` / `quadkit inspect` / `quadkit shell` | configuration, runtime introspection, REPL |
134
+ | `quadkit project` / `quadkit contrib` / `quadkit system` | project tasks, contributors, system info |
135
+ | `quadkit version` | framework and package versions |
136
+
137
+ Per-distribution guide:
138
+ [quadkit-cli reference](https://dbtinoy-.github.io/quadkit/reference/quadkit-cli/).
139
+
140
+ ## Optional extras
141
+
142
+ `[dev]` and `[test]` bundle tooling; `[all]` pulls everything.
143
+
144
+ ## Configuration
145
+
146
+ The CLI reads `application.yaml` like any Quadkit application; its own
147
+ section is `cli` (`color`), overridable via `QK_CLI__*`, e.g.
148
+ `QK_CLI__COLOR=false`.
149
+
150
+ ## Error handling
151
+
152
+ Commands report structured failures (use `--json` for machine-readable
153
+ envelopes) and non-zero exit codes; `--debug` surfaces full tracebacks.
154
+
155
+ ## Testing
156
+
157
+ `quadkit test` runs the project suite; the CLI's own behavior is
158
+ covered by the public test set the release pipeline executes from the
159
+ exported tree.
160
+
161
+ ## Security
162
+
163
+ The CLI reads configuration and scaffolds code — it does not serve
164
+ traffic. As with every distribution, keep the `0.x` line pinned and
165
+ review release notes on upgrade. Report vulnerabilities privately per
166
+ [SECURITY.md](https://github.com/dbtinoy-/quadkit/blob/main/SECURITY.md).
167
+
168
+ ## Stability
169
+
170
+ Version `0.0.3` in the `0.x` series, released in lockstep with the
171
+ other four distributions; APIs may change between minor versions until
172
+ 1.0 — pin an exact version (`quadkit-cli==0.0.3`) or a tight range
173
+ (`>=0.0.3,<0.1.0`). Full policy:
174
+ [stability and compatibility](https://dbtinoy-.github.io/quadkit/reference/stability/).
175
+
176
+ ## Links
177
+
178
+ - **Documentation** — <https://dbtinoy-.github.io/quadkit/>
179
+ - **Getting started** — <https://dbtinoy-.github.io/quadkit/getting-started/installation/>
180
+ - **Changelog** — <https://github.com/dbtinoy-/quadkit/blob/main/CHANGELOG.md>
181
+ - **Issues** — <https://github.com/dbtinoy-/quadkit/issues>
182
+ - **Security** — report privately per [SECURITY.md](https://github.com/dbtinoy-/quadkit/blob/main/SECURITY.md)
183
+ - **Contributing** — [CONTRIBUTING.md](https://github.com/dbtinoy-/quadkit/blob/main/CONTRIBUTING.md)
184
+
185
+ Apache-2.0 — see [LICENSE](https://github.com/dbtinoy-/quadkit/blob/main/LICENSE). "Quadkit" and the
186
+ Quadkit logo are trademarks of the project — see
187
+ [TRADEMARK.md](https://github.com/dbtinoy-/quadkit/blob/main/TRADEMARK.md).
@@ -0,0 +1,131 @@
1
+ # quadkit-cli
2
+
3
+ ![Quadkit](https://raw.githubusercontent.com/dbtinoy-/quadkit/main/banner.jpg)
4
+
5
+ [![PyPI](https://img.shields.io/pypi/v/quadkit-cli?color=%2322c55e&label=pypi)](https://pypi.org/project/quadkit-cli/)
6
+ [![Python](https://img.shields.io/pypi/pyversions/quadkit-cli?color=%2322c55e)](https://pypi.org/project/quadkit-cli/)
7
+ [![License](https://img.shields.io/pypi/l/quadkit-cli?color=%2322c55e)](https://github.com/dbtinoy-/quadkit/blob/main/LICENSE)
8
+
9
+ The `quadkit` command line: project scaffolding, generators, a smart
10
+ runner, and administrative commands for every stage of the application
11
+ lifecycle. Contributor-based — other packages can register their own
12
+ commands.
13
+
14
+ For day-to-day Quadkit developers: scaffold, generate, run, inspect.
15
+
16
+ ## The quadkit family
17
+
18
+ | Package | Role |
19
+ | --- | --- |
20
+ | [`quadkit-contracts`](https://pypi.org/project/quadkit-contracts/) | zero-dependency protocols, types, exception hierarchy |
21
+ | [`quadkit`](https://pypi.org/project/quadkit/) | the framework core — DI container, modules, config, logging, `Result` |
22
+ | [`quadkit-web`](https://pypi.org/project/quadkit-web/) | ASGI layer — controllers, routing, middleware, OpenAPI docs |
23
+ | [`quadkit-cli`](https://pypi.org/project/quadkit-cli/) | project scaffolding and code generators |
24
+ | [`quadkit-testing`](https://pypi.org/project/quadkit-testing/) | in-process test beds, fakes, fixtures |
25
+
26
+ ## Installation
27
+
28
+ ```bash
29
+ uv add quadkit-cli
30
+ # or as a standalone tool:
31
+ uv tool install quadkit-cli
32
+ ```
33
+
34
+ Requires **Python >= 3.11**.
35
+
36
+ ## Minimal working example
37
+
38
+ There is no code to write — the product is the command line:
39
+
40
+ ```bash
41
+ # Create a new project (template defaults to web-api); the package
42
+ # inside is my_api/ with app.py exposing create_app()
43
+ quadkit new project my-api
44
+ cd my-api
45
+
46
+ # Generate application code (list all generators: quadkit gen list)
47
+ quadkit gen provider MyProvider
48
+ quadkit gen controller Orders
49
+
50
+ # Serve the application; reload is on by default, pass --no-reload in prod
51
+ quadkit run my_api.app:create_app --host 0.0.0.0 --port 8000 --workers 4
52
+ ```
53
+
54
+ Eleven generators ship today (`quadkit gen list`):
55
+
56
+ ```text
57
+ controller middleware graphql webhook websocket exception_filter
58
+ interceptor error resource provider test
59
+ ```
60
+
61
+ Global options: `--json` for machine-readable output, `--quiet`,
62
+ `--debug`, `--no-color`, and `--config <path>` to point at a specific
63
+ `application.yaml`.
64
+
65
+ ## Command index
66
+
67
+ | Command | Purpose |
68
+ | --- | --- |
69
+ | `quadkit new project / module / package` | scaffold projects, bounded contexts, and `quadkit-*` extensions |
70
+ | `quadkit init` | initialize Quadkit in an existing project |
71
+ | `quadkit add <provider>` | add a provider to a project (e.g. `database`, `auth`) |
72
+ | `quadkit run [target]` | smart runner — auto-detects `create_app`, sets profile |
73
+ | `quadkit dev start` | production-server startup |
74
+ | `quadkit gen <what>` | code generation (controllers, providers, middleware, tests, more — see `quadkit gen list`) |
75
+ | `quadkit test` / `quadkit lint` | project-level checks |
76
+ | `quadkit db` / `quadkit events` | database / event-schema management |
77
+ | `quadkit config` / `quadkit inspect` / `quadkit shell` | configuration, runtime introspection, REPL |
78
+ | `quadkit project` / `quadkit contrib` / `quadkit system` | project tasks, contributors, system info |
79
+ | `quadkit version` | framework and package versions |
80
+
81
+ Per-distribution guide:
82
+ [quadkit-cli reference](https://dbtinoy-.github.io/quadkit/reference/quadkit-cli/).
83
+
84
+ ## Optional extras
85
+
86
+ `[dev]` and `[test]` bundle tooling; `[all]` pulls everything.
87
+
88
+ ## Configuration
89
+
90
+ The CLI reads `application.yaml` like any Quadkit application; its own
91
+ section is `cli` (`color`), overridable via `QK_CLI__*`, e.g.
92
+ `QK_CLI__COLOR=false`.
93
+
94
+ ## Error handling
95
+
96
+ Commands report structured failures (use `--json` for machine-readable
97
+ envelopes) and non-zero exit codes; `--debug` surfaces full tracebacks.
98
+
99
+ ## Testing
100
+
101
+ `quadkit test` runs the project suite; the CLI's own behavior is
102
+ covered by the public test set the release pipeline executes from the
103
+ exported tree.
104
+
105
+ ## Security
106
+
107
+ The CLI reads configuration and scaffolds code — it does not serve
108
+ traffic. As with every distribution, keep the `0.x` line pinned and
109
+ review release notes on upgrade. Report vulnerabilities privately per
110
+ [SECURITY.md](https://github.com/dbtinoy-/quadkit/blob/main/SECURITY.md).
111
+
112
+ ## Stability
113
+
114
+ Version `0.0.3` in the `0.x` series, released in lockstep with the
115
+ other four distributions; APIs may change between minor versions until
116
+ 1.0 — pin an exact version (`quadkit-cli==0.0.3`) or a tight range
117
+ (`>=0.0.3,<0.1.0`). Full policy:
118
+ [stability and compatibility](https://dbtinoy-.github.io/quadkit/reference/stability/).
119
+
120
+ ## Links
121
+
122
+ - **Documentation** — <https://dbtinoy-.github.io/quadkit/>
123
+ - **Getting started** — <https://dbtinoy-.github.io/quadkit/getting-started/installation/>
124
+ - **Changelog** — <https://github.com/dbtinoy-/quadkit/blob/main/CHANGELOG.md>
125
+ - **Issues** — <https://github.com/dbtinoy-/quadkit/issues>
126
+ - **Security** — report privately per [SECURITY.md](https://github.com/dbtinoy-/quadkit/blob/main/SECURITY.md)
127
+ - **Contributing** — [CONTRIBUTING.md](https://github.com/dbtinoy-/quadkit/blob/main/CONTRIBUTING.md)
128
+
129
+ Apache-2.0 — see [LICENSE](https://github.com/dbtinoy-/quadkit/blob/main/LICENSE). "Quadkit" and the
130
+ Quadkit logo are trademarks of the project — see
131
+ [TRADEMARK.md](https://github.com/dbtinoy-/quadkit/blob/main/TRADEMARK.md).