git-repokit 0.9.10__tar.gz → 0.9.12__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 (223) hide show
  1. git_repokit-0.9.12/PKG-INFO +329 -0
  2. git_repokit-0.9.12/README.md +288 -0
  3. git_repokit-0.9.12/git_repokit.egg-info/PKG-INFO +329 -0
  4. {git_repokit-0.9.10 → git_repokit-0.9.12}/git_repokit.egg-info/SOURCES.txt +5 -0
  5. {git_repokit-0.9.10 → git_repokit-0.9.12}/pyproject.toml +3 -3
  6. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/__version__.py +1 -1
  7. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/badges.py +26 -26
  8. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/branch_utils.py +4 -2
  9. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/cli.py +21 -8
  10. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/common_kit.py +42 -5
  11. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/config.py +1 -1
  12. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/github_setup.py +2 -2
  13. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/guardrails.py +1 -1
  14. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/hooks/pre-commit-template +2 -2
  15. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/LICENSES.md +5 -2
  16. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/__init__.py +44 -13
  17. git_repokit-0.9.12/repokit/licenses/proprietary-evaluation.txt +50 -0
  18. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/repo_manager.py +117 -91
  19. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/template_engine.py +5 -3
  20. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/hooks/pre-commit.template +2 -2
  21. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/pypi/pyproject.toml +2 -2
  22. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_badges.py +3 -3
  23. git_repokit-0.9.12/tests/test_cli_examples.py +91 -0
  24. git_repokit-0.9.12/tests/test_docs_links.py +35 -0
  25. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_github_owner.py +1 -1
  26. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_layers.py +39 -1
  27. git_repokit-0.9.12/tests/test_license_adopt.py +95 -0
  28. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_license_cli.py +19 -3
  29. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_licenses.py +3 -3
  30. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_new_default.py +11 -0
  31. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_packaging.py +32 -4
  32. git_repokit-0.9.12/tests/test_private_branch_create.py +338 -0
  33. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_readme_blocks.py +10 -10
  34. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_template_parity.py +3 -3
  35. git_repokit-0.9.10/PKG-INFO +0 -422
  36. git_repokit-0.9.10/README.md +0 -381
  37. git_repokit-0.9.10/git_repokit.egg-info/PKG-INFO +0 -422
  38. {git_repokit-0.9.10 → git_repokit-0.9.12}/LICENSE +0 -0
  39. {git_repokit-0.9.10 → git_repokit-0.9.12}/MANIFEST.in +0 -0
  40. {git_repokit-0.9.10 → git_repokit-0.9.12}/git_repokit.egg-info/dependency_links.txt +0 -0
  41. {git_repokit-0.9.10 → git_repokit-0.9.12}/git_repokit.egg-info/entry_points.txt +0 -0
  42. {git_repokit-0.9.10 → git_repokit-0.9.12}/git_repokit.egg-info/requires.txt +0 -0
  43. {git_repokit-0.9.10 → git_repokit-0.9.12}/git_repokit.egg-info/top_level.txt +0 -0
  44. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/__init__.py +0 -0
  45. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/__main__.py +0 -0
  46. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/_vendor/__init__.py +0 -0
  47. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/_vendor/ailib/__init__.py +0 -0
  48. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/_vendor/ailib/analyzer.py +0 -0
  49. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/_vendor/ailib/backend.py +0 -0
  50. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/_vendor/ailib/cache.py +0 -0
  51. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/_vendor/ailib/parsers.py +0 -0
  52. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/_vendor/ailib/transports/__init__.py +0 -0
  53. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/_vendor/ailib/transports/cli.py +0 -0
  54. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/_vendor/ailib/transports/openai_compat.py +0 -0
  55. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/_vendor/ailib/transports/prompt_file.py +0 -0
  56. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/_vendor/ailib/types.py +0 -0
  57. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/auth_integration.py +0 -0
  58. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/defaults.py +0 -0
  59. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/directory_analyzer.py +0 -0
  60. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/directory_profiles.py +0 -0
  61. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/git_config.py +0 -0
  62. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/github_create.py +0 -0
  63. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/history_cleaner.py +0 -0
  64. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/history_protection.py +0 -0
  65. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/hooks/pre-commit-guardrails +0 -0
  66. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/layers.py +0 -0
  67. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/0bsd.txt +0 -0
  68. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/agpl-3.0.txt +0 -0
  69. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/all-rights-reserved.txt +0 -0
  70. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/apache-2.0.txt +0 -0
  71. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/bsd-2-clause.txt +0 -0
  72. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/bsd-3-clause.txt +0 -0
  73. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/bsl-1.0.txt +0 -0
  74. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/cc-by-4.0.txt +0 -0
  75. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/cc-by-sa-4.0.txt +0 -0
  76. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/cc0-1.0.txt +0 -0
  77. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/epl-2.0.txt +0 -0
  78. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/gpl-2.0.txt +0 -0
  79. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/gpl-3.0.txt +0 -0
  80. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/isc.txt +0 -0
  81. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/lgpl-2.1.txt +0 -0
  82. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/lgpl-3.0.txt +0 -0
  83. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/mit.txt +0 -0
  84. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/mpl-2.0.txt +0 -0
  85. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/licenses/unlicense.txt +0 -0
  86. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/readme_blocks.py +0 -0
  87. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/remote_integration.py +0 -0
  88. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/ai/claude/CLAUDE-nested.md.template +0 -0
  89. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/ai/claude/CLAUDE.md.template +0 -0
  90. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/ai/claude/instructions/step1_context_rebuilder.md +0 -0
  91. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/ai/claude/instructions/step2_dev_workflow_process.md +0 -0
  92. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/ai/claude/instructions/step3_context_bridge.md +0 -0
  93. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/common/CHANGELOG.md.template +0 -0
  94. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/common/CONTRIBUTING.md.template +0 -0
  95. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/common/README.md.template +0 -0
  96. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/common/gitattributes.template +0 -0
  97. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/common/gitignore.template +0 -0
  98. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/extras/FUNDING.yml.template +0 -0
  99. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/extras/ROADMAP.md.template +0 -0
  100. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/extras/dependabot.yml.template +0 -0
  101. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/extras/one-offs-README.md.template +0 -0
  102. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/extras/platform-support.md.template +0 -0
  103. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/extras/pull_request_template.md.template +0 -0
  104. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/extras/release-template.md.template +0 -0
  105. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/extras/settings.json.template +0 -0
  106. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/extras/stale.yml.template +0 -0
  107. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/github/CODEOWNERS.template +0 -0
  108. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/github/ISSUE_TEMPLATE/bug-report.md.template +0 -0
  109. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/github/ISSUE_TEMPLATE/feature-request.md.template +0 -0
  110. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/github/issues/notes.md.template +0 -0
  111. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/github/issues/roadmap.md.template +0 -0
  112. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/any/claude-plugin/.claude-plugin/marketplace.json +0 -0
  113. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/any/claude-plugin/plugin/.claude-plugin/plugin.json +0 -0
  114. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/any/claude-plugin/plugin/README.md +0 -0
  115. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/cmake-app/.github/workflows/ci-c-cpp.yml +0 -0
  116. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/cmake-app/.repokit-common.toml.rkappend +0 -0
  117. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/cmake-app/.vscode/launch.json +0 -0
  118. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/cmake-app/.vscode/tasks.json +0 -0
  119. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/cmake-app/CMakeLists.txt +0 -0
  120. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/cmake-app/CMakePresets.json +0 -0
  121. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/cmake-app/cmake/GenerateStamp.cmake +0 -0
  122. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/cmake-app/src/main.cpp +0 -0
  123. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/cmake-app/tests/test_version.cpp +0 -0
  124. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/cmake-app/vcpkg.json +0 -0
  125. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/minimal/.vscode/launch.json +0 -0
  126. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/minimal/Makefile +0 -0
  127. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/minimal/build.bat +0 -0
  128. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/minimal/src/__RK_SNAKE__.c +0 -0
  129. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/msbuild/.vscode/launch.json +0 -0
  130. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/msbuild/.vscode/tasks.json +0 -0
  131. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/msbuild/__RK_PROJECT__.sln +0 -0
  132. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/msbuild/__RK_PROJECT__.vcxproj +0 -0
  133. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/c-cpp/msbuild/src/main.cpp +0 -0
  134. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/claude-plugin/.repokit-common.toml +0 -0
  135. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/claude-plugin/.vscode/launch.json +0 -0
  136. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/claude-plugin/plugin/hooks/hooks.json +0 -0
  137. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/claude-plugin/plugin/hooks/scripts/session-start.mjs +0 -0
  138. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/claude-plugin/plugin/tests/manifest.test.js +0 -0
  139. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/node/.repokit-common.toml.rkappend +0 -0
  140. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/node/package.json +0 -0
  141. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/node-package/.github/workflows/release.yml +0 -0
  142. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/node-package/package.json +0 -0
  143. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/node-package/src/index.ts +0 -0
  144. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/node-package/tests/index.test.ts +0 -0
  145. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/script/.vscode/launch.json +0 -0
  146. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/script/__RK_PROJECT__.js +0 -0
  147. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/script/tests/version.test.js +0 -0
  148. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/ts/package.json +0 -0
  149. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/js-ts/ts/tsconfig.json +0 -0
  150. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/claude-plugin/.github/workflows/ci-python.yml +0 -0
  151. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/claude-plugin/.repokit-common.toml +0 -0
  152. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/claude-plugin/.vscode/launch.json +0 -0
  153. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/claude-plugin/VERSION +0 -0
  154. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/claude-plugin/plugin/hooks/hooks.json +0 -0
  155. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/claude-plugin/plugin/hooks/scripts/run-hook.mjs +0 -0
  156. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/claude-plugin/plugin/hooks/scripts/session_start.py +0 -0
  157. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/claude-plugin/plugin/tests/test_manifest.py +0 -0
  158. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/pypi/.github/workflows/release.yml +0 -0
  159. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/pypi/.vscode/launch.json +0 -0
  160. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/pypi/__RK_SNAKE__/__init__.py +0 -0
  161. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/pypi/__RK_SNAKE__/__main__.py +0 -0
  162. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/pypi/__RK_SNAKE__/_version.py +0 -0
  163. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/pypi/__RK_SNAKE__/cli.py +0 -0
  164. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/pypi/tests/conftest.py +0 -0
  165. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/pypi/tests/test_version.py +0 -0
  166. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/script/.github/workflows/ci-python.yml +0 -0
  167. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/script/.repokit-common.toml +0 -0
  168. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/script/.vscode/launch.json +0 -0
  169. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/script/VERSION +0 -0
  170. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/script/__RK_PROJECT__.py +0 -0
  171. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/script/tests/test_version.py +0 -0
  172. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/setuppy/requirements.txt +0 -0
  173. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/archetypes/python/setuppy/setup.py +0 -0
  174. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/languages/c-cpp/.gitignore.rkappend +0 -0
  175. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/languages/c-cpp/.repokit-common.toml +0 -0
  176. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/languages/c-cpp/include/__RK_SNAKE__/version.h +0 -0
  177. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/languages/c-cpp/src/app.rc +0 -0
  178. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/languages/js-ts/.editorconfig +0 -0
  179. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/languages/js-ts/.github/workflows/ci-js-ts.yml +0 -0
  180. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/languages/js-ts/.gitignore.rkappend +0 -0
  181. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/languages/js-ts/.repokit-common.toml +0 -0
  182. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/languages/js-ts/.vscode/launch.json +0 -0
  183. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/languages/js-ts/VERSION +0 -0
  184. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/languages/python/.github/workflows/ci-python.yml +0 -0
  185. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/languages/python/.gitignore.rkappend +0 -0
  186. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/languages/python/.vscode/launch.json +0 -0
  187. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/layers/manifest.toml +0 -0
  188. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/vault/CLAUDE.md +0 -0
  189. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/vault/claude/_maps/MOC-project.md +0 -0
  190. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/vault/claude/_oracle/backlinks.md +0 -0
  191. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/vault/claude/_oracle/concepts.md +0 -0
  192. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/vault/claude/_oracle/manifest.md +0 -0
  193. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/vault/claude/_todo/ACTIVE-WORK.md +0 -0
  194. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/templates/vault/claude/_todo/OPEN-LOOPS.md +0 -0
  195. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/utils.py +0 -0
  196. {git_repokit-0.9.10 → git_repokit-0.9.12}/repokit/vault.py +0 -0
  197. {git_repokit-0.9.10 → git_repokit-0.9.12}/setup.cfg +0 -0
  198. {git_repokit-0.9.10 → git_repokit-0.9.12}/setup.py +0 -0
  199. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_branch_strategies.py +0 -0
  200. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_cli_integration.py +0 -0
  201. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_core_functionality.py +0 -0
  202. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_deployment_scenarios.py +0 -0
  203. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_directory_profiles.py +0 -0
  204. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_extras_cli.py +0 -0
  205. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_github_create.py +0 -0
  206. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_github_integration.py +0 -0
  207. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_github_setup.py +0 -0
  208. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_guardrails.py +0 -0
  209. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_hermetic.py +0 -0
  210. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_hook_encoding.py +0 -0
  211. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_hook_patterns.py +0 -0
  212. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_layer_action_pins.py +0 -0
  213. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_layers_c_cpp.py +0 -0
  214. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_layers_claude_plugin.py +0 -0
  215. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_layers_cli.py +0 -0
  216. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_layers_compositions.py +0 -0
  217. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_layers_js_ts.py +0 -0
  218. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_layers_vscode.py +0 -0
  219. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_legacy_smoke.py +0 -0
  220. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_run_tests_driver.py +0 -0
  221. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_utils.py +0 -0
  222. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_vault_bootstrap.py +0 -0
  223. {git_repokit-0.9.10 → git_repokit-0.9.12}/tests/test_vendored_ailib.py +0 -0
@@ -0,0 +1,329 @@
1
+ Metadata-Version: 2.4
2
+ Name: git-repokit
3
+ Version: 0.9.12
4
+ Summary: Create standardized Git repositories: language presets, licenses, GitHub setup, and a private notes vault
5
+ Author: Dustin Darcy
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/DazzleTools/git-repokit
8
+ Project-URL: Repository, https://github.com/DazzleTools/git-repokit
9
+ Project-URL: Issues, https://github.com/DazzleTools/git-repokit/issues
10
+ Project-URL: Changelog, https://github.com/DazzleTools/git-repokit/blob/main/CHANGELOG.md
11
+ Keywords: git,repository,scaffolding,template,project-generator,github
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Environment :: Console
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Operating System :: OS Independent
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Topic :: Software Development :: Version Control :: Git
22
+ Requires-Python: >=3.10
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ Requires-Dist: requests>=2.25.0
26
+ Requires-Dist: tomli>=1.1; python_version < "3.11"
27
+ Provides-Extra: test
28
+ Requires-Dist: pytest>=7.0.0; extra == "test"
29
+ Requires-Dist: python-dotenv>=1.0.0; extra == "test"
30
+ Requires-Dist: pyyaml>=6.0; extra == "test"
31
+ Requires-Dist: build>=1.0; extra == "test"
32
+ Provides-Extra: dev
33
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
34
+ Requires-Dist: python-dotenv>=1.0.0; extra == "dev"
35
+ Requires-Dist: pyyaml>=6.0; extra == "dev"
36
+ Requires-Dist: build>=1.0; extra == "dev"
37
+ Requires-Dist: black>=23.0.0; extra == "dev"
38
+ Requires-Dist: flake8>=6.0.0; extra == "dev"
39
+ Requires-Dist: mypy>=1.0.0; extra == "dev"
40
+ Dynamic: license-file
41
+
42
+ # git-repokit
43
+
44
+ [![PyPI](https://img.shields.io/pypi/v/git-repokit?color=green)](https://pypi.org/project/git-repokit/)
45
+ [![Release Date](https://img.shields.io/github/release-date/DazzleTools/git-repokit?color=green)](https://github.com/DazzleTools/git-repokit/releases)
46
+ [![PyPI Downloads](https://static.pepy.tech/personalized-badge/git-repokit?period=total&units=international_system&left_color=black&right_color=green&left_text=downloads)](https://pypistats.org/packages/git-repokit)
47
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
48
+ [![License: MIT](https://img.shields.io/badge/license-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
49
+ [![GitHub Discussions](https://img.shields.io/github/discussions/DazzleTools/git-repokit)](https://github.com/DazzleTools/git-repokit/discussions)
50
+ [![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20macOS-lightgrey.svg)](docs/platform-support.md)
51
+
52
+ **One `repokit` command creates a project that is ready to work in (including the structure, the code for its language, the tooling and hooks, a private notes vault, a license, and the repository on GitHub with its labels and first issues).**
53
+
54
+ `repokit create` replaces the hand-run route of copying a template repository, running its setup, then setting up GitHub and the notes by hand. Every piece is optional and configurable, so your own house style lives in one config file, and a create becomes one short command.
55
+
56
+ ## What a project gets
57
+
58
+ A full create (the [Quick Start](#-quick-start) below) produces:
59
+
60
+ - **The structure:** README, CONTRIBUTING, CHANGELOG, LICENSE, `.gitignore`, `.gitattributes`, `docs/`, `tests/`, `scripts/`, and, if you ask for them, ROADMAP, a funding file, Dependabot, a stale-issue policy and PR and release templates.
61
+ - **The code for its language:** a Python package with `pyproject.toml` and a CLI, a CMake or Visual Studio C/C++ project, a TypeScript npm package, a Claude Code plugin, and more. Each comes with tests, a CI workflow and a VS Code debug configuration that work from the first commit. See [Languages and layers](docs/Languages-and-Layers.md).
62
+ - **A README that names the project:** the real GitHub owner, badges for the release, the Python or Node minimum and the license, install and test commands for the preset, and a License section at the end.
63
+ - **The tooling:** [git-repokit-common](https://github.com/DazzleTools/git-repokit-common) vendored at `scripts/repokit-common/`, with git hooks that keep version numbers in step, keep private files out of public commits, and run the tests before a push.
64
+ - **A private vault:** `private/` is its own git repository, ignored by the project, for notes, design documents and postmortems. It starts with a map, an index for an oracle session and a to-do board. See [The vault](docs/The-Vault.md).
65
+ - **The repository on GitHub** (with `--github`): created with your `gh` login and pushed. It gets the standard labels, Roadmap and Quick Notes as issues #1 and #2 (pinned), discussions and topics. See [GitHub setup](docs/GitHub-Setup.md).
66
+
67
+ ## 📦 Installation
68
+
69
+ Python 3.10 or newer. The command is `repokit`.
70
+
71
+ ```bash
72
+ pip install git-repokit
73
+ # or the same tool under its DazzleTools alias
74
+ pip install dazzle-git-repokit
75
+ ```
76
+
77
+ `--github` also needs the [GitHub CLI](https://cli.github.com/), logged in once with `gh auth login`.
78
+
79
+ From source:
80
+
81
+ ```bash
82
+ git clone https://github.com/DazzleTools/git-repokit.git
83
+ cd git-repokit
84
+ pip install -e ".[dev]" # with the test and lint tools
85
+ ```
86
+
87
+ ## 🎯 Quick Start
88
+
89
+ ### A full project, on GitHub
90
+
91
+ This is the most common create: a Python package with everything turned on, published to GitHub with its labels, first issues and topics.
92
+
93
+ ```bash
94
+ repokit create my-tool --language python --license gpl-3.0-or-later \
95
+ --description "What my-tool does, in one sentence" \
96
+ --extras all \
97
+ --github --github-setup labels,issues,pin,discussions,topics \
98
+ --topics cli,python
99
+ ```
100
+
101
+ You get a private GitHub repository under your `gh` login (add `--public` for a public one, `--org MyOrg` for an organization), with `main` pushed, the labels made, and issues #1 (Roadmap) and #2 (Quick Notes) pinned. Locally, `my-tool/` holds the project and its vault in `my-tool/private/`. [GitHub setup](docs/GitHub-Setup.md) lists the few steps that are still done by hand afterwards.
102
+
103
+ ### The same create from your house config
104
+
105
+ Put the choices you make every time in `~/.repokit/config.json`:
106
+
107
+ ```json
108
+ {
109
+ "license": "gpl-3.0-or-later",
110
+ "license_private": "all-rights-reserved",
111
+ "extras": ["all"],
112
+ "github_setup": ["labels", "issues", "pin", "discussions", "topics"],
113
+ "github": {"username": "your-login"}
114
+ }
115
+ ```
116
+
117
+ Then the full create is:
118
+
119
+ ```bash
120
+ repokit create my-tool --language python --github \
121
+ --description "What my-tool does, in one sentence" --topics cli,python
122
+ ```
123
+
124
+ Every key is listed in [Configuration](docs/Configuration.md).
125
+
126
+ ### A multi-branch project
127
+
128
+ The private-branch model keeps all your working history on a local-only `private` branch, and moves finished work to public branches that are checked out beside it:
129
+
130
+ ```bash
131
+ repokit create my-app --branch-strategy standard --language python --license mit --github
132
+ ```
133
+
134
+ ```
135
+ my-app/
136
+ local/ the repository, on the private branch: work here
137
+ dev/ the dev branch
138
+ github/ the main branch
139
+ ```
140
+
141
+ Then the day-to-day loop is:
142
+
143
+ ```bash
144
+ cd my-app/local # work and commit on private, notes and all
145
+ git add -A && git commit -m "Add the parser"
146
+
147
+ cd ../dev # bring the work to dev, without the private files
148
+ repokit safe-merge private --preview
149
+ repokit safe-merge private
150
+ git commit -m "Add the parser"
151
+
152
+ cd ../github # and on to main when it is ready
153
+ repokit safe-merge dev
154
+ git commit -m "Release the parser"
155
+ git push
156
+ ```
157
+
158
+ `safe-merge` leaves out the private content (`private/`, `CLAUDE.md`, `revisions/`, ...), and the hooks refuse it on a public branch if it ever gets staged. `--github` pushes only the public branches. Other layouts: `simple` (private, dev, main), `gitflow`, `github-flow`, and your own with `--branches` and `--worktrees`; see [Branch strategies](#branch-strategies) below.
159
+
160
+ ### Other common creates
161
+
162
+ ```bash
163
+ # Local only: no GitHub, nothing pushed
164
+ repokit create my-tool --language python --license mit
165
+
166
+ # A Claude Code plugin (hooks in JavaScript; add --language python for Python hooks)
167
+ repokit create my-plugin --with claude-plugin --license apache-2.0 --github
168
+
169
+ # A C/C++ app with CMake, or a Visual Studio solution
170
+ repokit create my-app --language c-cpp --license bsd-3-clause
171
+ repokit create my-app --with c-cpp/msbuild --license gpl-3.0-or-later
172
+
173
+ # A TypeScript npm package
174
+ repokit create my-lib --language js-ts --license mpl-2.0
175
+
176
+ # A one-file Python script, no packaging, given away to the public domain
177
+ repokit create my-script --with python/script --license unlicense
178
+
179
+ # Several pieces in one --with, comma-separated; repokit puts them in order
180
+ repokit create my-plugin --with claude-plugin,ts --license mit # a Claude Code plugin in TypeScript
181
+ repokit create my-lib --with node,ts,node-package --license isc # the same layers as --with js-ts/node-package
182
+ repokit create my-app --with c-cpp/cmake-app,python/script --license mit # two languages, a preset for each
183
+
184
+ # A private project: all rights reserved, evaluation-only, your own terms, or no LICENSE at all
185
+ repokit create my-work --language python --license all-rights-reserved
186
+ repokit create my-work --language python --license proprietary-evaluation
187
+ repokit create my-work --language python --license file=../terms/client-terms.txt
188
+ repokit create my-sketch --license none
189
+
190
+ # What every language offers, and the license catalogue
191
+ repokit list
192
+ ```
193
+
194
+ The catalogue has every license GitHub and GitLab offer when you create a repository, beyond the ones above: `lgpl-3.0`, `agpl-3.0`, `epl-2.0`, `0bsd`, `cc0-1.0` and more, with the texts from [choosealicense.com](https://choosealicense.com/licenses/), which also helps you pick one. `repokit list` prints every id, ready to copy. Two more are for software you are not giving away: `all-rights-reserved`, and `proprietary-evaluation`, which allows evaluation and non-commercial use until you revoke it, forbids everything else, and optionally provides an email for permission requests.
195
+
196
+ ## Choosing the code type
197
+
198
+ `--language` picks the language: `python`, `c-cpp`, `js-ts`, or `generic` (the default, which adds no code). Each language has a default preset, and `--with` picks another one, such as `python/claude-plugin` or `c-cpp/msbuild`. `--with` also takes a comma-separated list of presets and single layers (`--with claude-plugin,ts`). A name can be bare when only one language has it, and is qualified when two do: `script` is refused as ambiguous, `python/script` is not. `repokit list` shows every preset and layer, including the planned ones.
199
+
200
+ | Language | Default preset | Other presets |
201
+ |---|---|---|
202
+ | `python` | `python/pypi`: a package with `pyproject.toml`, a CLI, tests, and publish-on-release | `python/script`, `python/setuppy`, `python/claude-plugin` |
203
+ | `c-cpp` | `c-cpp/cmake-app`: CMake presets, vcpkg, CTest, a version header | `c-cpp/msbuild`, `c-cpp/minimal` |
204
+ | `js-ts` | `js-ts/node-package`: a TypeScript npm package with `node:test` | `js-ts/script`, `js-ts/claude-plugin` |
205
+
206
+ Several languages stack: `--language python,c-cpp`. The details, and how to add a language, are in [Languages and layers](docs/Languages-and-Layers.md).
207
+
208
+ ## The license
209
+
210
+ A license is required. `--license <id>` writes `LICENSE` from a catalogue of the licenses GitHub and GitLab offer (`mit`, `apache-2.0`, `gpl-3.0`, `gpl-3.0-or-later`, `bsd-3-clause`, ...), plus `all-rights-reserved` and `proprietary-evaluation` for a private project. `--license file=<path>` copies a text as it is, and `--license none` writes no file. The holder and year come from your git identity and the clock, and the license also populates in `pyproject.toml` or the plugin manifest. With `license` set in the config, you can leave the flag off.
211
+
212
+ ## Branch strategies
213
+
214
+ repokit has two ways to keep private work private:
215
+
216
+ - **`main-only` (the default):** the project folder is the repository, on `main`, and `private/` is its own nested git repository that the project ignores. One branch, no merging rules to learn.
217
+ - **The private-branch model:** your working history lives on a local-only `private` branch in `<name>/local/`, and the public branches are git worktrees in sibling folders. You move finished work across with `repokit safe-merge`, which leaves the private content behind. This is the model repokit was first built for, and it suits projects with several release stages or several people.
218
+
219
+ | `--branch-strategy` | Public branches | Checked out in folders | Flow |
220
+ |---|---|---|---|
221
+ | `main-only` | main | the project folder itself | commit on main |
222
+ | `standard` | dev, staging, test, live, main | `dev/`, `github/` (main) | private -> dev -> test / staging -> main -> live |
223
+ | `simple` | dev, main | `github/` (main) | private -> dev -> main |
224
+ | `gitflow` | develop, release, hotfix, main | `develop/`, `github/` (main) | private -> develop -> release -> main, with hotfixes |
225
+ | `github-flow` | main | `github/` (main) | private -> main |
226
+ | `minimal` | main | none (switch branches in `local/`) | private -> main |
227
+
228
+ ```bash
229
+ # A GitFlow project on GitHub
230
+ repokit create my-lib --branch-strategy gitflow --language python --license mit --github
231
+
232
+ # Your own branches, with worktrees for two of them (name a private-branch
233
+ # strategy too, or the project gets no private branch)
234
+ repokit create my-app --branch-strategy simple --branches main,develop,qa,production \
235
+ --worktrees main,develop --license mit
236
+ ```
237
+
238
+ The guards for the private-branch model: `repokit check-guardrails` shows what is protected, `repokit setup-guardrails` installs the hooks in a project repokit did not make, and `repokit safe-merge-dev` merges between development branches while keeping their history out of the public ones. The [Branch strategies](docs/Branch-Strategies.md) guide covers each layout, and the [Workflow guide](docs/Workflow-Guide.md) covers the day-to-day work.
239
+
240
+ ## Existing projects
241
+
242
+ ```bash
243
+ repokit analyze ./my-project # what repokit would do, changing nothing
244
+ repokit adopt ./my-project --dry-run # preview adopting a git repository in place
245
+ repokit adopt ./my-project --language python --migration-strategy safe --backup
246
+ repokit migrate ./my-folder --dry-run # add repokit's folders and files to a folder
247
+ ```
248
+
249
+ `adopt` fills in what the project lacks. It keeps the project's own license file (`LICENSE`, `LICENSE.md`, `COPYING`, ...); with none, it writes the license your config names, or adopts the project without one and says so. `--license` is only for choosing one (it replaces the project's own file). It keeps the repository's history and sets up the private-branch layout (`--branch-strategy standard` unless you name another): your folder stays on the `private` branch, with `main` and `dev` checked out in sibling folders. The `safe` strategy keeps every existing file and adds what is missing beside it. `repokit setup-guardrails` adds the private-content hooks to a project repokit did not create. The [Adoption guide](docs/Adoption-Guide.md) and the [Migration guide](docs/Migration-Guide.md) walk through each case.
250
+
251
+ ## All commands
252
+
253
+ | Command | What it does |
254
+ |---|---|
255
+ | `create` | Create a new project |
256
+ | `list` | List the languages, presets and layers |
257
+ | `analyze` | Report what repokit would do with an existing folder |
258
+ | `adopt` | Add repokit's structure to an existing git repository, in place |
259
+ | `migrate` | Add repokit's standard folders, files and hooks to an existing folder |
260
+ | `publish` | Publish an existing repository to GitHub or GitLab |
261
+ | `bootstrap` | Write a script that sets repokit up |
262
+ | `init-config` | Write a `.repokit.json` |
263
+ | `store-credentials` | Store a GitHub or GitLab token for `--publish-to` |
264
+ | `setup-guardrails`, `check-guardrails` | Install, or check, the private-content protection |
265
+ | `safe-merge`, `safe-merge-dev` | Merge branches without carrying private content across |
266
+ | `clean-history`, `analyze-history` | Find, or remove, sensitive data in a repository's history |
267
+ | `manage-gitkeep` | Add or remove `.gitkeep` files |
268
+ | `list-templates` | List the template files |
269
+
270
+ `repokit <command> --help` shows each command's options and examples.
271
+
272
+ ## 🧪 Testing
273
+
274
+ ```bash
275
+ python -m pytest -q # the full suite, about ten minutes
276
+ python -m pytest -q -m unit # the unit tests, a few seconds
277
+ ```
278
+
279
+ Every run is isolated from your git config, home directory and tokens. A `git push` runs the unit tests through the vendored pre-push hook; CI runs the unit tests on Python 3.10 to 3.13, on Linux and Windows. [tests/README.md](tests/README.md) covers the test classes and the live GitHub tests.
280
+
281
+ ## 📚 Documentation
282
+
283
+ - [Configuration](docs/Configuration.md): every config key, and the flag that matches it
284
+ - [Languages and layers](docs/Languages-and-Layers.md): presets, `--with`, and adding a language
285
+ - [GitHub setup](docs/GitHub-Setup.md): `--github`, `--github-setup`, and what GitHub has no API for
286
+ - [The vault](docs/The-Vault.md): `private/`, its first files, and the sessions that use it
287
+ - [Branch strategies](docs/Branch-Strategies.md): main-only and the private-branch model
288
+ - [Workflow guide](docs/Workflow-Guide.md): day-to-day work under the private-branch strategies
289
+ - [Deployment demo](docs/Deployment-Demo.md): worked examples, from a new project to GitHub
290
+ - [Adoption guide](docs/Adoption-Guide.md) and [Migration guide](docs/Migration-Guide.md): existing projects
291
+ - [Recipes and how-tos](docs/Recipes-And-Howtos.md): commands for common cases
292
+ - [Auth guide](docs/Auth-Guide.md): the `gh` login, and tokens for `--publish-to`
293
+ - [Platform support](docs/platform-support.md): what runs where, and what each platform needs
294
+ - [Why repokit exists](docs/Why-RepoKit-Exists.md)
295
+
296
+ The [documentation guide](docs/README.md) suggests a reading order.
297
+
298
+ ## Contributing
299
+
300
+ Contributions are welcome! See the [CONTRIBUTING.md](CONTRIBUTING.md) for more details.
301
+
302
+ Like the project?
303
+
304
+ [!["Buy Me A Coffee"](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/djdarcy)
305
+
306
+ ## Related Projects
307
+
308
+ - [git-repokit-common](https://github.com/DazzleTools/git-repokit-common) - The shared scripts and git hooks every project gets at `scripts/repokit-common/`: version sync, private-content checks, tests before a push, `gh_issue_full.py`. repokit vendors it into each project it creates, and into itself
309
+ - [git-repokit-template](https://github.com/DazzleTools/git-repokit-template) - The template repository repokit grew from: copy it, run its setup, then finish GitHub and the notes by hand. `repokit create --language python` reproduces its project tree, and a regression test keeps the two in step
310
+ - [dazzlecmd](https://github.com/DazzleTools/dazzlecmd) - The DazzleTools CLI (`dz`). Its `dz private-init` first made `private/` its own repository; repokit's vault is a port of it
311
+ - [github-traffic-tracker](https://github.com/djdarcy/github-traffic-tracker) - Traffic history beyond GitHub's 14 days (`ghtraf`). `--github-setup traffic` prints its setup commands, and the `installs` and `views` badges read its counts
312
+
313
+ ## Acknowledgments
314
+
315
+ - Inspired by modern DevOps practices and GitOps workflows
316
+ - https://nvie.com/posts/a-successful-git-branching-model/
317
+ - https://trunkbaseddevelopment.com/
318
+ - https://docs.github.com/en/get-started/quickstart/github-flow
319
+ - https://martinfowler.com/articles/continuousIntegration.html
320
+ - https://www.atlassian.com/continuous-delivery
321
+ - https://www.perforce.com/blog/vcs/best-branching-strategies-high-velocity-development
322
+ - Built for developers who value consistency and automation
323
+ - Special thanks to the open-source community writ large
324
+
325
+ ## License
326
+
327
+ git-repokit, Copyright (C) 2025-2026 Dustin Darcy
328
+
329
+ Licensed under the MIT License (MIT) -- see [LICENSE](LICENSE).
@@ -0,0 +1,288 @@
1
+ # git-repokit
2
+
3
+ [![PyPI](https://img.shields.io/pypi/v/git-repokit?color=green)](https://pypi.org/project/git-repokit/)
4
+ [![Release Date](https://img.shields.io/github/release-date/DazzleTools/git-repokit?color=green)](https://github.com/DazzleTools/git-repokit/releases)
5
+ [![PyPI Downloads](https://static.pepy.tech/personalized-badge/git-repokit?period=total&units=international_system&left_color=black&right_color=green&left_text=downloads)](https://pypistats.org/packages/git-repokit)
6
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
7
+ [![License: MIT](https://img.shields.io/badge/license-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
8
+ [![GitHub Discussions](https://img.shields.io/github/discussions/DazzleTools/git-repokit)](https://github.com/DazzleTools/git-repokit/discussions)
9
+ [![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20macOS-lightgrey.svg)](docs/platform-support.md)
10
+
11
+ **One `repokit` command creates a project that is ready to work in (including the structure, the code for its language, the tooling and hooks, a private notes vault, a license, and the repository on GitHub with its labels and first issues).**
12
+
13
+ `repokit create` replaces the hand-run route of copying a template repository, running its setup, then setting up GitHub and the notes by hand. Every piece is optional and configurable, so your own house style lives in one config file, and a create becomes one short command.
14
+
15
+ ## What a project gets
16
+
17
+ A full create (the [Quick Start](#-quick-start) below) produces:
18
+
19
+ - **The structure:** README, CONTRIBUTING, CHANGELOG, LICENSE, `.gitignore`, `.gitattributes`, `docs/`, `tests/`, `scripts/`, and, if you ask for them, ROADMAP, a funding file, Dependabot, a stale-issue policy and PR and release templates.
20
+ - **The code for its language:** a Python package with `pyproject.toml` and a CLI, a CMake or Visual Studio C/C++ project, a TypeScript npm package, a Claude Code plugin, and more. Each comes with tests, a CI workflow and a VS Code debug configuration that work from the first commit. See [Languages and layers](docs/Languages-and-Layers.md).
21
+ - **A README that names the project:** the real GitHub owner, badges for the release, the Python or Node minimum and the license, install and test commands for the preset, and a License section at the end.
22
+ - **The tooling:** [git-repokit-common](https://github.com/DazzleTools/git-repokit-common) vendored at `scripts/repokit-common/`, with git hooks that keep version numbers in step, keep private files out of public commits, and run the tests before a push.
23
+ - **A private vault:** `private/` is its own git repository, ignored by the project, for notes, design documents and postmortems. It starts with a map, an index for an oracle session and a to-do board. See [The vault](docs/The-Vault.md).
24
+ - **The repository on GitHub** (with `--github`): created with your `gh` login and pushed. It gets the standard labels, Roadmap and Quick Notes as issues #1 and #2 (pinned), discussions and topics. See [GitHub setup](docs/GitHub-Setup.md).
25
+
26
+ ## 📦 Installation
27
+
28
+ Python 3.10 or newer. The command is `repokit`.
29
+
30
+ ```bash
31
+ pip install git-repokit
32
+ # or the same tool under its DazzleTools alias
33
+ pip install dazzle-git-repokit
34
+ ```
35
+
36
+ `--github` also needs the [GitHub CLI](https://cli.github.com/), logged in once with `gh auth login`.
37
+
38
+ From source:
39
+
40
+ ```bash
41
+ git clone https://github.com/DazzleTools/git-repokit.git
42
+ cd git-repokit
43
+ pip install -e ".[dev]" # with the test and lint tools
44
+ ```
45
+
46
+ ## 🎯 Quick Start
47
+
48
+ ### A full project, on GitHub
49
+
50
+ This is the most common create: a Python package with everything turned on, published to GitHub with its labels, first issues and topics.
51
+
52
+ ```bash
53
+ repokit create my-tool --language python --license gpl-3.0-or-later \
54
+ --description "What my-tool does, in one sentence" \
55
+ --extras all \
56
+ --github --github-setup labels,issues,pin,discussions,topics \
57
+ --topics cli,python
58
+ ```
59
+
60
+ You get a private GitHub repository under your `gh` login (add `--public` for a public one, `--org MyOrg` for an organization), with `main` pushed, the labels made, and issues #1 (Roadmap) and #2 (Quick Notes) pinned. Locally, `my-tool/` holds the project and its vault in `my-tool/private/`. [GitHub setup](docs/GitHub-Setup.md) lists the few steps that are still done by hand afterwards.
61
+
62
+ ### The same create from your house config
63
+
64
+ Put the choices you make every time in `~/.repokit/config.json`:
65
+
66
+ ```json
67
+ {
68
+ "license": "gpl-3.0-or-later",
69
+ "license_private": "all-rights-reserved",
70
+ "extras": ["all"],
71
+ "github_setup": ["labels", "issues", "pin", "discussions", "topics"],
72
+ "github": {"username": "your-login"}
73
+ }
74
+ ```
75
+
76
+ Then the full create is:
77
+
78
+ ```bash
79
+ repokit create my-tool --language python --github \
80
+ --description "What my-tool does, in one sentence" --topics cli,python
81
+ ```
82
+
83
+ Every key is listed in [Configuration](docs/Configuration.md).
84
+
85
+ ### A multi-branch project
86
+
87
+ The private-branch model keeps all your working history on a local-only `private` branch, and moves finished work to public branches that are checked out beside it:
88
+
89
+ ```bash
90
+ repokit create my-app --branch-strategy standard --language python --license mit --github
91
+ ```
92
+
93
+ ```
94
+ my-app/
95
+ local/ the repository, on the private branch: work here
96
+ dev/ the dev branch
97
+ github/ the main branch
98
+ ```
99
+
100
+ Then the day-to-day loop is:
101
+
102
+ ```bash
103
+ cd my-app/local # work and commit on private, notes and all
104
+ git add -A && git commit -m "Add the parser"
105
+
106
+ cd ../dev # bring the work to dev, without the private files
107
+ repokit safe-merge private --preview
108
+ repokit safe-merge private
109
+ git commit -m "Add the parser"
110
+
111
+ cd ../github # and on to main when it is ready
112
+ repokit safe-merge dev
113
+ git commit -m "Release the parser"
114
+ git push
115
+ ```
116
+
117
+ `safe-merge` leaves out the private content (`private/`, `CLAUDE.md`, `revisions/`, ...), and the hooks refuse it on a public branch if it ever gets staged. `--github` pushes only the public branches. Other layouts: `simple` (private, dev, main), `gitflow`, `github-flow`, and your own with `--branches` and `--worktrees`; see [Branch strategies](#branch-strategies) below.
118
+
119
+ ### Other common creates
120
+
121
+ ```bash
122
+ # Local only: no GitHub, nothing pushed
123
+ repokit create my-tool --language python --license mit
124
+
125
+ # A Claude Code plugin (hooks in JavaScript; add --language python for Python hooks)
126
+ repokit create my-plugin --with claude-plugin --license apache-2.0 --github
127
+
128
+ # A C/C++ app with CMake, or a Visual Studio solution
129
+ repokit create my-app --language c-cpp --license bsd-3-clause
130
+ repokit create my-app --with c-cpp/msbuild --license gpl-3.0-or-later
131
+
132
+ # A TypeScript npm package
133
+ repokit create my-lib --language js-ts --license mpl-2.0
134
+
135
+ # A one-file Python script, no packaging, given away to the public domain
136
+ repokit create my-script --with python/script --license unlicense
137
+
138
+ # Several pieces in one --with, comma-separated; repokit puts them in order
139
+ repokit create my-plugin --with claude-plugin,ts --license mit # a Claude Code plugin in TypeScript
140
+ repokit create my-lib --with node,ts,node-package --license isc # the same layers as --with js-ts/node-package
141
+ repokit create my-app --with c-cpp/cmake-app,python/script --license mit # two languages, a preset for each
142
+
143
+ # A private project: all rights reserved, evaluation-only, your own terms, or no LICENSE at all
144
+ repokit create my-work --language python --license all-rights-reserved
145
+ repokit create my-work --language python --license proprietary-evaluation
146
+ repokit create my-work --language python --license file=../terms/client-terms.txt
147
+ repokit create my-sketch --license none
148
+
149
+ # What every language offers, and the license catalogue
150
+ repokit list
151
+ ```
152
+
153
+ The catalogue has every license GitHub and GitLab offer when you create a repository, beyond the ones above: `lgpl-3.0`, `agpl-3.0`, `epl-2.0`, `0bsd`, `cc0-1.0` and more, with the texts from [choosealicense.com](https://choosealicense.com/licenses/), which also helps you pick one. `repokit list` prints every id, ready to copy. Two more are for software you are not giving away: `all-rights-reserved`, and `proprietary-evaluation`, which allows evaluation and non-commercial use until you revoke it, forbids everything else, and optionally provides an email for permission requests.
154
+
155
+ ## Choosing the code type
156
+
157
+ `--language` picks the language: `python`, `c-cpp`, `js-ts`, or `generic` (the default, which adds no code). Each language has a default preset, and `--with` picks another one, such as `python/claude-plugin` or `c-cpp/msbuild`. `--with` also takes a comma-separated list of presets and single layers (`--with claude-plugin,ts`). A name can be bare when only one language has it, and is qualified when two do: `script` is refused as ambiguous, `python/script` is not. `repokit list` shows every preset and layer, including the planned ones.
158
+
159
+ | Language | Default preset | Other presets |
160
+ |---|---|---|
161
+ | `python` | `python/pypi`: a package with `pyproject.toml`, a CLI, tests, and publish-on-release | `python/script`, `python/setuppy`, `python/claude-plugin` |
162
+ | `c-cpp` | `c-cpp/cmake-app`: CMake presets, vcpkg, CTest, a version header | `c-cpp/msbuild`, `c-cpp/minimal` |
163
+ | `js-ts` | `js-ts/node-package`: a TypeScript npm package with `node:test` | `js-ts/script`, `js-ts/claude-plugin` |
164
+
165
+ Several languages stack: `--language python,c-cpp`. The details, and how to add a language, are in [Languages and layers](docs/Languages-and-Layers.md).
166
+
167
+ ## The license
168
+
169
+ A license is required. `--license <id>` writes `LICENSE` from a catalogue of the licenses GitHub and GitLab offer (`mit`, `apache-2.0`, `gpl-3.0`, `gpl-3.0-or-later`, `bsd-3-clause`, ...), plus `all-rights-reserved` and `proprietary-evaluation` for a private project. `--license file=<path>` copies a text as it is, and `--license none` writes no file. The holder and year come from your git identity and the clock, and the license also populates in `pyproject.toml` or the plugin manifest. With `license` set in the config, you can leave the flag off.
170
+
171
+ ## Branch strategies
172
+
173
+ repokit has two ways to keep private work private:
174
+
175
+ - **`main-only` (the default):** the project folder is the repository, on `main`, and `private/` is its own nested git repository that the project ignores. One branch, no merging rules to learn.
176
+ - **The private-branch model:** your working history lives on a local-only `private` branch in `<name>/local/`, and the public branches are git worktrees in sibling folders. You move finished work across with `repokit safe-merge`, which leaves the private content behind. This is the model repokit was first built for, and it suits projects with several release stages or several people.
177
+
178
+ | `--branch-strategy` | Public branches | Checked out in folders | Flow |
179
+ |---|---|---|---|
180
+ | `main-only` | main | the project folder itself | commit on main |
181
+ | `standard` | dev, staging, test, live, main | `dev/`, `github/` (main) | private -> dev -> test / staging -> main -> live |
182
+ | `simple` | dev, main | `github/` (main) | private -> dev -> main |
183
+ | `gitflow` | develop, release, hotfix, main | `develop/`, `github/` (main) | private -> develop -> release -> main, with hotfixes |
184
+ | `github-flow` | main | `github/` (main) | private -> main |
185
+ | `minimal` | main | none (switch branches in `local/`) | private -> main |
186
+
187
+ ```bash
188
+ # A GitFlow project on GitHub
189
+ repokit create my-lib --branch-strategy gitflow --language python --license mit --github
190
+
191
+ # Your own branches, with worktrees for two of them (name a private-branch
192
+ # strategy too, or the project gets no private branch)
193
+ repokit create my-app --branch-strategy simple --branches main,develop,qa,production \
194
+ --worktrees main,develop --license mit
195
+ ```
196
+
197
+ The guards for the private-branch model: `repokit check-guardrails` shows what is protected, `repokit setup-guardrails` installs the hooks in a project repokit did not make, and `repokit safe-merge-dev` merges between development branches while keeping their history out of the public ones. The [Branch strategies](docs/Branch-Strategies.md) guide covers each layout, and the [Workflow guide](docs/Workflow-Guide.md) covers the day-to-day work.
198
+
199
+ ## Existing projects
200
+
201
+ ```bash
202
+ repokit analyze ./my-project # what repokit would do, changing nothing
203
+ repokit adopt ./my-project --dry-run # preview adopting a git repository in place
204
+ repokit adopt ./my-project --language python --migration-strategy safe --backup
205
+ repokit migrate ./my-folder --dry-run # add repokit's folders and files to a folder
206
+ ```
207
+
208
+ `adopt` fills in what the project lacks. It keeps the project's own license file (`LICENSE`, `LICENSE.md`, `COPYING`, ...); with none, it writes the license your config names, or adopts the project without one and says so. `--license` is only for choosing one (it replaces the project's own file). It keeps the repository's history and sets up the private-branch layout (`--branch-strategy standard` unless you name another): your folder stays on the `private` branch, with `main` and `dev` checked out in sibling folders. The `safe` strategy keeps every existing file and adds what is missing beside it. `repokit setup-guardrails` adds the private-content hooks to a project repokit did not create. The [Adoption guide](docs/Adoption-Guide.md) and the [Migration guide](docs/Migration-Guide.md) walk through each case.
209
+
210
+ ## All commands
211
+
212
+ | Command | What it does |
213
+ |---|---|
214
+ | `create` | Create a new project |
215
+ | `list` | List the languages, presets and layers |
216
+ | `analyze` | Report what repokit would do with an existing folder |
217
+ | `adopt` | Add repokit's structure to an existing git repository, in place |
218
+ | `migrate` | Add repokit's standard folders, files and hooks to an existing folder |
219
+ | `publish` | Publish an existing repository to GitHub or GitLab |
220
+ | `bootstrap` | Write a script that sets repokit up |
221
+ | `init-config` | Write a `.repokit.json` |
222
+ | `store-credentials` | Store a GitHub or GitLab token for `--publish-to` |
223
+ | `setup-guardrails`, `check-guardrails` | Install, or check, the private-content protection |
224
+ | `safe-merge`, `safe-merge-dev` | Merge branches without carrying private content across |
225
+ | `clean-history`, `analyze-history` | Find, or remove, sensitive data in a repository's history |
226
+ | `manage-gitkeep` | Add or remove `.gitkeep` files |
227
+ | `list-templates` | List the template files |
228
+
229
+ `repokit <command> --help` shows each command's options and examples.
230
+
231
+ ## 🧪 Testing
232
+
233
+ ```bash
234
+ python -m pytest -q # the full suite, about ten minutes
235
+ python -m pytest -q -m unit # the unit tests, a few seconds
236
+ ```
237
+
238
+ Every run is isolated from your git config, home directory and tokens. A `git push` runs the unit tests through the vendored pre-push hook; CI runs the unit tests on Python 3.10 to 3.13, on Linux and Windows. [tests/README.md](tests/README.md) covers the test classes and the live GitHub tests.
239
+
240
+ ## 📚 Documentation
241
+
242
+ - [Configuration](docs/Configuration.md): every config key, and the flag that matches it
243
+ - [Languages and layers](docs/Languages-and-Layers.md): presets, `--with`, and adding a language
244
+ - [GitHub setup](docs/GitHub-Setup.md): `--github`, `--github-setup`, and what GitHub has no API for
245
+ - [The vault](docs/The-Vault.md): `private/`, its first files, and the sessions that use it
246
+ - [Branch strategies](docs/Branch-Strategies.md): main-only and the private-branch model
247
+ - [Workflow guide](docs/Workflow-Guide.md): day-to-day work under the private-branch strategies
248
+ - [Deployment demo](docs/Deployment-Demo.md): worked examples, from a new project to GitHub
249
+ - [Adoption guide](docs/Adoption-Guide.md) and [Migration guide](docs/Migration-Guide.md): existing projects
250
+ - [Recipes and how-tos](docs/Recipes-And-Howtos.md): commands for common cases
251
+ - [Auth guide](docs/Auth-Guide.md): the `gh` login, and tokens for `--publish-to`
252
+ - [Platform support](docs/platform-support.md): what runs where, and what each platform needs
253
+ - [Why repokit exists](docs/Why-RepoKit-Exists.md)
254
+
255
+ The [documentation guide](docs/README.md) suggests a reading order.
256
+
257
+ ## Contributing
258
+
259
+ Contributions are welcome! See the [CONTRIBUTING.md](CONTRIBUTING.md) for more details.
260
+
261
+ Like the project?
262
+
263
+ [!["Buy Me A Coffee"](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/djdarcy)
264
+
265
+ ## Related Projects
266
+
267
+ - [git-repokit-common](https://github.com/DazzleTools/git-repokit-common) - The shared scripts and git hooks every project gets at `scripts/repokit-common/`: version sync, private-content checks, tests before a push, `gh_issue_full.py`. repokit vendors it into each project it creates, and into itself
268
+ - [git-repokit-template](https://github.com/DazzleTools/git-repokit-template) - The template repository repokit grew from: copy it, run its setup, then finish GitHub and the notes by hand. `repokit create --language python` reproduces its project tree, and a regression test keeps the two in step
269
+ - [dazzlecmd](https://github.com/DazzleTools/dazzlecmd) - The DazzleTools CLI (`dz`). Its `dz private-init` first made `private/` its own repository; repokit's vault is a port of it
270
+ - [github-traffic-tracker](https://github.com/djdarcy/github-traffic-tracker) - Traffic history beyond GitHub's 14 days (`ghtraf`). `--github-setup traffic` prints its setup commands, and the `installs` and `views` badges read its counts
271
+
272
+ ## Acknowledgments
273
+
274
+ - Inspired by modern DevOps practices and GitOps workflows
275
+ - https://nvie.com/posts/a-successful-git-branching-model/
276
+ - https://trunkbaseddevelopment.com/
277
+ - https://docs.github.com/en/get-started/quickstart/github-flow
278
+ - https://martinfowler.com/articles/continuousIntegration.html
279
+ - https://www.atlassian.com/continuous-delivery
280
+ - https://www.perforce.com/blog/vcs/best-branching-strategies-high-velocity-development
281
+ - Built for developers who value consistency and automation
282
+ - Special thanks to the open-source community writ large
283
+
284
+ ## License
285
+
286
+ git-repokit, Copyright (C) 2025-2026 Dustin Darcy
287
+
288
+ Licensed under the MIT License (MIT) -- see [LICENSE](LICENSE).