pz-cli 5.0.0__py3-none-any.whl

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 (399) hide show
  1. pz_cli-5.0.0.dist-info/METADATA +51 -0
  2. pz_cli-5.0.0.dist-info/RECORD +399 -0
  3. pz_cli-5.0.0.dist-info/WHEEL +4 -0
  4. pz_cli-5.0.0.dist-info/entry_points.txt +5 -0
  5. pz_core/__init__.py +64 -0
  6. pz_core/__main__.py +7 -0
  7. pz_core/app.py +45 -0
  8. pz_core/assembly/__init__.py +17 -0
  9. pz_core/assembly/app_discovery.py +1240 -0
  10. pz_core/assembly/apps/__init__.py +25 -0
  11. pz_core/assembly/apps/compiler.py +824 -0
  12. pz_core/assembly/apps/providers.py +188 -0
  13. pz_core/assembly/cli/__init__.py +9 -0
  14. pz_core/assembly/cli/compiler.py +166 -0
  15. pz_core/assembly/diagnostics/__init__.py +21 -0
  16. pz_core/assembly/diagnostics/checks.py +257 -0
  17. pz_core/assembly/diagnostics/dev_sources.py +569 -0
  18. pz_core/assembly/events/__init__.py +5 -0
  19. pz_core/assembly/events/compiler.py +219 -0
  20. pz_core/assembly/extensions/__init__.py +5 -0
  21. pz_core/assembly/extensions/compiler.py +696 -0
  22. pz_core/assembly/infra/__init__.py +6 -0
  23. pz_core/assembly/infra/compiler.py +272 -0
  24. pz_core/assembly/lifecycle/__init__.py +5 -0
  25. pz_core/assembly/lifecycle/compiler.py +95 -0
  26. pz_core/assembly/middlewares/__init__.py +19 -0
  27. pz_core/assembly/middlewares/compiler.py +508 -0
  28. pz_core/assembly/project/__init__.py +7 -0
  29. pz_core/assembly/project/compiler.py +9 -0
  30. pz_core/assembly/project/context.py +17 -0
  31. pz_core/assembly/project/discovery.py +227 -0
  32. pz_core/assembly/resources/__init__.py +19 -0
  33. pz_core/assembly/resources/compiler.py +310 -0
  34. pz_core/assembly/resources/settings.py +129 -0
  35. pz_core/assembly/routes/__init__.py +7 -0
  36. pz_core/assembly/routes/compiler.py +400 -0
  37. pz_core/assembly/runtime_manifests/__init__.py +13 -0
  38. pz_core/assembly/runtime_manifests/compiler.py +159 -0
  39. pz_core/assembly/settings/__init__.py +17 -0
  40. pz_core/assembly/settings/compiler.py +786 -0
  41. pz_core/assembly/settings/host_project_overrides.py +82 -0
  42. pz_core/assembly/settings/host_runtime_endpoint.py +207 -0
  43. pz_core/authoring/__init__.py +79 -0
  44. pz_core/authoring/app_init_service.py +946 -0
  45. pz_core/authoring/app_versions.py +814 -0
  46. pz_core/authoring/cli.py +192 -0
  47. pz_core/authoring/commands.py +1810 -0
  48. pz_core/authoring/conflicts.py +180 -0
  49. pz_core/authoring/dev_bindings.py +916 -0
  50. pz_core/authoring/dev_git.py +1087 -0
  51. pz_core/authoring/dev_import.py +1061 -0
  52. pz_core/authoring/dev_manifest.py +522 -0
  53. pz_core/authoring/dev_sources.py +1638 -0
  54. pz_core/authoring/env_cli.py +454 -0
  55. pz_core/authoring/files.py +109 -0
  56. pz_core/authoring/ide_projection.py +1129 -0
  57. pz_core/authoring/naming.py +58 -0
  58. pz_core/authoring/official_dev_sources.py +432 -0
  59. pz_core/authoring/official_sources.json +156 -0
  60. pz_core/authoring/orchestration_service.py +558 -0
  61. pz_core/authoring/project_default.jsonc +53 -0
  62. pz_core/authoring/project_defaults.py +88 -0
  63. pz_core/authoring/project_metadata_service.py +199 -0
  64. pz_core/authoring/project_settings_checks.py +51 -0
  65. pz_core/authoring/project_settings_cli.py +299 -0
  66. pz_core/authoring/project_settings_service.py +1700 -0
  67. pz_core/authoring/project_state.py +399 -0
  68. pz_core/authoring/publish_git.py +423 -0
  69. pz_core/authoring/publish_lock.py +188 -0
  70. pz_core/authoring/publish_source.py +195 -0
  71. pz_core/authoring/release.py +1382 -0
  72. pz_core/authoring/repo_keys.py +29 -0
  73. pz_core/authoring/root_cli.py +28 -0
  74. pz_core/authoring/scaffold_service.py +325 -0
  75. pz_core/authoring/sync_service.py +787 -0
  76. pz_core/authoring/templates/app/__init__.py +1 -0
  77. pz_core/authoring/templates/app/api.py +25 -0
  78. pz_core/authoring/templates/app/apps.py +31 -0
  79. pz_core/authoring/templates/app/auth_package_init.py +14 -0
  80. pz_core/authoring/templates/app/auth_readme.py +29 -0
  81. pz_core/authoring/templates/app/configs_package_init.py +14 -0
  82. pz_core/authoring/templates/app/default_env.py +18 -0
  83. pz_core/authoring/templates/app/default_jsonc.py +25 -0
  84. pz_core/authoring/templates/app/locales_readme.py +25 -0
  85. pz_core/authoring/templates/app/migrations_readme.py +19 -0
  86. pz_core/authoring/templates/app/models.py +14 -0
  87. pz_core/authoring/templates/app/package_init.py +8 -0
  88. pz_core/authoring/templates/app/pages_base.py +161 -0
  89. pz_core/authoring/templates/app/pages_readme.py +25 -0
  90. pz_core/authoring/templates/app/public.py +31 -0
  91. pz_core/authoring/templates/app/pyproject.py +77 -0
  92. pz_core/authoring/templates/app/readme.py +74 -0
  93. pz_core/authoring/templates/app/settings.py +46 -0
  94. pz_core/authoring/templates/app/static_app_js.py +24 -0
  95. pz_core/authoring/templates/app/static_readme.py +31 -0
  96. pz_core/authoring/templates/app/template_config_page.py +23 -0
  97. pz_core/authoring/templates/app/template_index_html.py +28 -0
  98. pz_core/authoring/templates/app/templates_readme.py +32 -0
  99. pz_core/authoring/templates/app/urls.py +36 -0
  100. pz_core/authoring/templates/app/views.py +36 -0
  101. pz_core/authoring/templates/project/__init__.py +1 -0
  102. pz_core/authoring/templates/project/agents.py +51 -0
  103. pz_core/authoring/templates/project/apps_container_readme.py +37 -0
  104. pz_core/authoring/templates/project/main_py.py +59 -0
  105. pz_core/authoring/templates/project/project_env.py +19 -0
  106. pz_core/authoring/templates/project/pyproject.py +26 -0
  107. pz_core/authoring/templates/project/pz_env_env.py +65 -0
  108. pz_core/authoring/templates/project/pz_env_jsonc.py +69 -0
  109. pz_core/authoring/templates/project/pz_jsonc.py +12 -0
  110. pz_core/authoring/templates/project/readme.py +94 -0
  111. pz_core/authoring/templates/project/root_gitkeep.py +8 -0
  112. pz_core/authoring/templates/shared/__init__.py +5 -0
  113. pz_core/authoring/templates/shared/text.py +10 -0
  114. pz_core/authoring/venv_service.py +87 -0
  115. pz_core/authoring/workspace.py +167 -0
  116. pz_core/cli.py +291 -0
  117. pz_core/cli_options.py +74 -0
  118. pz_core/core/__init__.py +3 -0
  119. pz_core/core/errors/__init__.py +5 -0
  120. pz_core/core/errors/models.py +117 -0
  121. pz_core/core/events/__init__.py +5 -0
  122. pz_core/core/events/registry.py +54 -0
  123. pz_core/core/extensions/__init__.py +51 -0
  124. pz_core/core/extensions/registry.py +790 -0
  125. pz_core/core/health/__init__.py +6 -0
  126. pz_core/core/health/contracts.py +10 -0
  127. pz_core/core/middlewares/__init__.py +6 -0
  128. pz_core/core/middlewares/models.py +24 -0
  129. pz_core/core/routing/__init__.py +5 -0
  130. pz_core/core/routing/models.py +21 -0
  131. pz_core/core/settings_contracts.py +25 -0
  132. pz_core/docs/README.md +20 -0
  133. pz_core/docs/distribution-README.md +438 -0
  134. pz_core/docs/pz/345/221/275/344/273/244/346/200/273/350/247/210.md +1011 -0
  135. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/00-pz/346/236/266/346/236/204/346/200/273/347/272/262.md +240 -0
  136. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/01-/347/233/256/345/275/225/344/270/216/345/210/206/345/261/202/350/247/204/350/214/203.md +216 -0
  137. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/02-/345/214/205/344/270/216/345/210/206/345/217/221/350/247/204/350/214/203.md +403 -0
  138. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/03-App/346/234/200/345/260/217/345/255/220/345/214/205/350/247/204/350/214/203.md +571 -0
  139. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/04-Settings/344/270/216/351/205/215/347/275/256/350/247/204/350/214/203.md +1177 -0
  140. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/05-/350/265/204/346/272/220/344/270/216/350/277/220/350/241/214/347/233/256/345/275/225/350/247/204/350/214/203.md +575 -0
  141. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/06-/346/225/260/346/215/256/345/272/223/344/270/216/345/217/257/351/200/211/345/237/272/347/241/200/350/256/276/346/226/275/350/247/204/350/214/203.md +499 -0
  142. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/07-App/346/233/277/346/215/242/350/247/204/350/214/203.md +206 -0
  143. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/08-/345/271/263/345/217/260/347/272/247App/344/270/216/350/277/220/350/241/214/346/227/266/345/215/225/344/276/213/350/247/204/350/214/203.md +445 -0
  144. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/09-CLI/344/270/216Worker/345/205/245/345/217/243/350/247/204/350/214/203.md +950 -0
  145. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/10-/346/265/213/350/257/225/344/270/216/345/245/221/347/272/246/350/247/204/350/214/203.md +1001 -0
  146. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/11-/344/273/223/345/272/223/347/234/237/347/233/270/346/272/220/345/234/260/345/233/276.md +102 -0
  147. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/12-/346/236/204/345/273/272/344/270/216/345/217/221/345/270/203/346/243/200/346/237/245/346/270/205/345/215/225.md +171 -0
  148. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/13-/346/255/243/345/274/217Facade/346/200/273/350/241/250.md +402 -0
  149. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/14-/345/210/206/345/261/202/344/270/216/346/211/251/345/261/225/350/247/204/350/214/203.md +550 -0
  150. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/15-/345/255/220/345/214/205/345/274/200/345/217/221/344/275/277/347/224/250/346/211/213/345/206/214.md +1004 -0
  151. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/16-/346/211/251/345/261/225/347/202/271/346/255/243/345/274/217/345/215/217/350/256/256/346/270/205/345/215/225.md +352 -0
  152. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/17-pz.protocols.v1/346/255/243/345/274/217/345/215/217/350/256/256.md +266 -0
  153. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/18-/346/211/251/345/261/225/347/202/271/345/206/262/347/252/201/350/243/201/345/206/263/346/200/273/350/241/250.md +131 -0
  154. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/19-/351/224/231/350/257/257/347/240/201/344/270/216/350/257/212/346/226/255/345/215/217/350/256/256.md +176 -0
  155. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/20-/347/247/201/346/234/211/345/214/205/344/273/223/344/270/216/347/273/237/344/270/200/350/256/244/350/257/201/351/203/250/347/275/262/350/247/204/350/214/203.md +243 -0
  156. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/21-contrib/347/272/246/345/256/232/344/270/216Provider/346/216/245/345/205/245/350/247/204/350/214/203.md +365 -0
  157. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/22-/345/244/232/345/233/275/350/257/255/350/250/200/350/265/204/346/272/220/346/262/273/347/220/206/344/270/216/346/214/211/351/234/200/345/212/240/350/275/275/350/247/204/350/214/203.md +912 -0
  158. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/23-/351/246/226/345/261/217/345/261/225/347/244/272/344/270/216/351/246/226/345/270/247/347/250/263/345/256/232/350/247/204/350/214/203.md +269 -0
  159. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/24-pz/345/220/257/345/212/250/344/270/216/350/277/220/350/241/214/346/227/266/347/274/226/350/257/221/346/265/201/347/250/213.md +245 -0
  160. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/25-/351/235/242/345/220/221/345/257/271/350/261/241/345/274/200/345/217/221/350/247/204/350/214/203.md +300 -0
  161. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/README.md +98 -0
  162. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/00-legacy_core/346/240/207/345/207/206pip/345/214/205/345/214/226/351/207/215/346/236/204/346/200/273/347/272/262.md +1073 -0
  163. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/01-/347/233/256/345/275/225/344/270/216/345/210/206/345/261/202/351/207/215/346/236/204/346/211/247/350/241/214/346/226/271/346/241/210.md +224 -0
  164. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/02-/345/214/205/344/270/216/345/210/206/345/217/221/350/247/204/350/214/203-/345/220/253/345/216/206/345/217/262/345/217/243/345/276/204.md +671 -0
  165. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/13-/344/270/200/346/254/241/346/200/247/345/256/236/346/226/275/346/270/205/345/215/225.md +387 -0
  166. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/14-/345/255/220/345/214/205/351/200/202/351/205/215/346/224/271/351/200/240/346/270/205/345/215/225.md +592 -0
  167. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/15-infra/350/243/201/345/211/252/344/270/216/350/220/275/344/275/215/346/270/205/345/215/225.md +81 -0
  168. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/19-core/345/215/225/344/270/200/346/255/243/345/274/217/346/226/271/346/241/210/346/224/266/346/225/233/346/211/247/350/241/214/346/270/205/345/215/225.md +161 -0
  169. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/25-/345/215/217/350/256/256/345/210/260/346/272/220/347/240/201/345/267/256/350/267/235/346/270/205/345/215/225.md +377 -0
  170. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/26-cutover/345/256/214/345/267/245/346/243/200/346/237/245/346/270/205/345/215/225.md +117 -0
  171. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/29-/345/244/232/345/233/275/350/257/255/350/250/200/350/265/204/346/272/220/346/262/273/347/220/206/344/270/216/346/214/211/351/234/200/345/212/240/350/275/275/350/247/204/350/214/203-/345/220/253/350/277/201/347/247/273/347/255/226/347/225/245.md +956 -0
  172. pz_core/docs/pz/350/247/204/350/214/203/344/270/216/344/275/277/347/224/250/archive//344/270/255/351/227/264/346/200/201/99-/350/265/204/346/272/220/346/224/266/345/217/243/345/220/216/347/273/255TODO.md +84 -0
  173. pz_core/docs//345/217/221/347/211/210/345/211/215/346/270/205/345/215/225-4.0.11.md +84 -0
  174. pz_core/docs//346/226/260/346/211/213/346/214/207/345/215/227.md +422 -0
  175. pz_core/infra/__init__.py +17 -0
  176. pz_core/infra/db/__init__.py +23 -0
  177. pz_core/infra/db/contracts.py +73 -0
  178. pz_core/infra/health/__init__.py +5 -0
  179. pz_core/infra/health/contracts.py +8 -0
  180. pz_core/infra/kv/__init__.py +5 -0
  181. pz_core/infra/kv/contracts.py +17 -0
  182. pz_core/infra/observability/__init__.py +23 -0
  183. pz_core/infra/observability/contracts.py +142 -0
  184. pz_core/infra/resilience/__init__.py +5 -0
  185. pz_core/infra/resilience/contracts.py +17 -0
  186. pz_core/infra/resources/__init__.py +5 -0
  187. pz_core/infra/resources/contracts.py +16 -0
  188. pz_core/infra/settings/__init__.py +17 -0
  189. pz_core/infra/settings/models.py +81 -0
  190. pz_core/infra/storage/__init__.py +5 -0
  191. pz_core/infra/storage/ports.py +27 -0
  192. pz_core/project_root_commands.py +282 -0
  193. pz_core/project_runtime_cli.py +344 -0
  194. pz_core/project_sources.py +253 -0
  195. pz_core/pz_launcher.py +209 -0
  196. pz_core/root_cli.py +70 -0
  197. pz_core/runtime/__init__.py +229 -0
  198. pz_core/runtime/access.py +86 -0
  199. pz_core/runtime/adapters/__init__.py +5 -0
  200. pz_core/runtime/adapters/base.py +18 -0
  201. pz_core/runtime/asyncio_bridge.py +18 -0
  202. pz_core/runtime/bindings/__init__.py +5 -0
  203. pz_core/runtime/bindings/container.py +50 -0
  204. pz_core/runtime/cli/__init__.py +5 -0
  205. pz_core/runtime/cli/_args.py +67 -0
  206. pz_core/runtime/cli/app_commands.py +417 -0
  207. pz_core/runtime/cli/check.py +214 -0
  208. pz_core/runtime/cli/db.py +297 -0
  209. pz_core/runtime/cli/main.py +89 -0
  210. pz_core/runtime/cli/resources.py +280 -0
  211. pz_core/runtime/discovery.py +23 -0
  212. pz_core/runtime/environment_integrity.py +157 -0
  213. pz_core/runtime/errors.py +5 -0
  214. pz_core/runtime/events.py +87 -0
  215. pz_core/runtime/facades/__init__.py +38 -0
  216. pz_core/runtime/facades/_capabilities.py +46 -0
  217. pz_core/runtime/facades/cache.py +103 -0
  218. pz_core/runtime/facades/database.py +71 -0
  219. pz_core/runtime/facades/events.py +380 -0
  220. pz_core/runtime/facades/health.py +101 -0
  221. pz_core/runtime/facades/mail.py +121 -0
  222. pz_core/runtime/facades/observability.py +102 -0
  223. pz_core/runtime/facades/providers.py +75 -0
  224. pz_core/runtime/facades/resources.py +52 -0
  225. pz_core/runtime/facades/storage.py +296 -0
  226. pz_core/runtime/health/__init__.py +5 -0
  227. pz_core/runtime/health/service.py +102 -0
  228. pz_core/runtime/host.py +188 -0
  229. pz_core/runtime/host_runner.py +282 -0
  230. pz_core/runtime/http/__init__.py +20 -0
  231. pz_core/runtime/http/app.py +576 -0
  232. pz_core/runtime/http_timing.py +173 -0
  233. pz_core/runtime/invocation.py +29 -0
  234. pz_core/runtime/json_safe.py +47 -0
  235. pz_core/runtime/lifecycle/__init__.py +25 -0
  236. pz_core/runtime/lifecycle/manager.py +533 -0
  237. pz_core/runtime/plan.py +214 -0
  238. pz_core/runtime/plan_context.py +33 -0
  239. pz_core/runtime/plan_snapshot.py +177 -0
  240. pz_core/runtime/registries/__init__.py +27 -0
  241. pz_core/runtime/registries/capabilities.py +101 -0
  242. pz_core/runtime/registries/providers.py +396 -0
  243. pz_core/runtime/resource_assets.py +344 -0
  244. pz_core/runtime/run_cli.py +211 -0
  245. pz_core/runtime/settings.py +888 -0
  246. pz_core/runtime/worker/__init__.py +21 -0
  247. pz_core/runtime/worker/engine.py +921 -0
  248. pz_core/runtime/worker/runtime.py +25 -0
  249. pz_core/testing/__init__.py +15 -0
  250. pz_core/testing/doc_route_contracts.py +305 -0
  251. pz_core/utils/__init__.py +44 -0
  252. pz_core/utils/env.py +65 -0
  253. pz_core/utils/project_jsonc/__init__.py +29 -0
  254. pz_core/utils/project_jsonc/document.py +420 -0
  255. pz_core/utils/project_settings.py +99 -0
  256. pz_foundation/__init__.py +50 -0
  257. pz_foundation/_contracts.py +81 -0
  258. pz_foundation/_errors.py +34 -0
  259. pz_foundation/api.py +14 -0
  260. pz_foundation/apps.py +127 -0
  261. pz_foundation/auth/__init__.py +1 -0
  262. pz_foundation/cache_control.py +233 -0
  263. pz_foundation/cli/__init__.py +2 -0
  264. pz_foundation/cli/workers.py +565 -0
  265. pz_foundation/configs/__init__.py +0 -0
  266. pz_foundation/configs/default.env +15 -0
  267. pz_foundation/configs/default.jsonc +452 -0
  268. pz_foundation/db/__init__.py +94 -0
  269. pz_foundation/db/aerich_executor.py +664 -0
  270. pz_foundation/db/config.py +358 -0
  271. pz_foundation/db/connection_manager.py +689 -0
  272. pz_foundation/db/connection_probe.py +204 -0
  273. pz_foundation/db/database.py +1291 -0
  274. pz_foundation/db/deps.py +47 -0
  275. pz_foundation/db/lifecycle_status.py +85 -0
  276. pz_foundation/db/migrations.py +477 -0
  277. pz_foundation/db/mysql.py +57 -0
  278. pz_foundation/db/postgresql.py +409 -0
  279. pz_foundation/db/production_pool_fallback.py +143 -0
  280. pz_foundation/db/public.py +45 -0
  281. pz_foundation/db/session.py +369 -0
  282. pz_foundation/db/sqlite.py +15 -0
  283. pz_foundation/db/tortoise_manager.py +724 -0
  284. pz_foundation/db/tortoise_psycopg.py +148 -0
  285. pz_foundation/docs/README.md +18 -0
  286. pz_foundation/docs/distribution-README.md +319 -0
  287. pz_foundation/docs/infra/350/243/201/345/211/252/344/270/216/350/220/275/344/275/215/350/257/264/346/230/216.md +39 -0
  288. pz_foundation/docs//345/205/254/345/274/200/345/205/215/350/264/271/346/216/245/345/217/243/351/230/262/346/273/245/347/224/250/344/270/216/344/272/272/346/234/272/346/240/241/351/252/214.md +680 -0
  289. pz_foundation/docs//350/256/276/350/256/241/346/226/207/346/241/243.md +288 -0
  290. pz_foundation/docs//350/267/257/347/224/261/344/270/216URL/345/244/204/347/220/206/350/247/204/350/214/203.md +119 -0
  291. pz_foundation/health.py +105 -0
  292. pz_foundation/host/__init__.py +11 -0
  293. pz_foundation/host/builder.py +34 -0
  294. pz_foundation/host/cache_runtime.py +44 -0
  295. pz_foundation/host/db/__init__.py +17 -0
  296. pz_foundation/host/db/aerich_config.py +36 -0
  297. pz_foundation/host/db/config.py +106 -0
  298. pz_foundation/host/db/connection_manager.py +48 -0
  299. pz_foundation/host/db/deps.py +5 -0
  300. pz_foundation/host/db/orm_retry_patch.py +566 -0
  301. pz_foundation/host/db/request_adapter.py +325 -0
  302. pz_foundation/host/db/router.py +28 -0
  303. pz_foundation/host/db/session.py +284 -0
  304. pz_foundation/host/db/tortoise_manager.py +10 -0
  305. pz_foundation/host/idempotency.py +132 -0
  306. pz_foundation/host/lifespan.py +247 -0
  307. pz_foundation/host/redis_runtime.py +100 -0
  308. pz_foundation/host/web.py +790 -0
  309. pz_foundation/infra_provider.py +236 -0
  310. pz_foundation/kv/__init__.py +25 -0
  311. pz_foundation/kv/cache.py +1166 -0
  312. pz_foundation/kv/deps.py +84 -0
  313. pz_foundation/kv/public.py +25 -0
  314. pz_foundation/kv/redis_manager.py +1531 -0
  315. pz_foundation/lazy_exports.py +43 -0
  316. pz_foundation/lazy_imports.py +124 -0
  317. pz_foundation/lifecycle.py +392 -0
  318. pz_foundation/managed_workers.py +1117 -0
  319. pz_foundation/middlewares/__init__.py +26 -0
  320. pz_foundation/middlewares/_settings.py +250 -0
  321. pz_foundation/middlewares/analytics.py +124 -0
  322. pz_foundation/middlewares/cache_control.py +156 -0
  323. pz_foundation/middlewares/compression.py +202 -0
  324. pz_foundation/middlewares/cors.py +62 -0
  325. pz_foundation/middlewares/geo_country.py +44 -0
  326. pz_foundation/middlewares/inner_router.py +50 -0
  327. pz_foundation/middlewares/rate_limited/__init__.py +3 -0
  328. pz_foundation/middlewares/rate_limited/key_limiter.py +115 -0
  329. pz_foundation/middlewares/request_logging.py +104 -0
  330. pz_foundation/middlewares/route_owner.py +309 -0
  331. pz_foundation/middlewares/security_csrf.py +44 -0
  332. pz_foundation/middlewares/security_headers/__init__.py +4 -0
  333. pz_foundation/middlewares/security_headers/conflicts.py +44 -0
  334. pz_foundation/middlewares/security_headers/csp_nonce.py +200 -0
  335. pz_foundation/middlewares/security_headers/security_headers.py +44 -0
  336. pz_foundation/migrations/__init__.py +1 -0
  337. pz_foundation/migrations/pz_foundation/__init__.py +1 -0
  338. pz_foundation/models.py +22 -0
  339. pz_foundation/notifications/__init__.py +23 -0
  340. pz_foundation/notifications/email.py +542 -0
  341. pz_foundation/notifications/public.py +31 -0
  342. pz_foundation/observability/__init__.py +71 -0
  343. pz_foundation/observability/http.py +34 -0
  344. pz_foundation/observability/logger/__init__.py +49 -0
  345. pz_foundation/observability/logger/_bot_settings.py +126 -0
  346. pz_foundation/observability/logger/bot_message.py +592 -0
  347. pz_foundation/observability/logger/core.py +385 -0
  348. pz_foundation/observability/logger/delivery_audit.py +84 -0
  349. pz_foundation/observability/logger/feishu_bot.py +199 -0
  350. pz_foundation/observability/logger/telegram_bot.py +194 -0
  351. pz_foundation/observability/metrics.py +365 -0
  352. pz_foundation/observability/runtime.py +68 -0
  353. pz_foundation/public.py +405 -0
  354. pz_foundation/resources/__init__.py +12 -0
  355. pz_foundation/resources/builder.py +900 -0
  356. pz_foundation/resources/images.py +363 -0
  357. pz_foundation/root_cli.py +20 -0
  358. pz_foundation/routing/__init__.py +203 -0
  359. pz_foundation/routing/canonical.py +486 -0
  360. pz_foundation/routing/convertors.py +82 -0
  361. pz_foundation/routing/declarations.py +843 -0
  362. pz_foundation/routing/exports.py +148 -0
  363. pz_foundation/routing/loaders.py +138 -0
  364. pz_foundation/routing/manifest.py +215 -0
  365. pz_foundation/routing/manifest_provider.py +47 -0
  366. pz_foundation/routing/mounts.py +101 -0
  367. pz_foundation/routing/ordering.py +172 -0
  368. pz_foundation/routing/registry.py +133 -0
  369. pz_foundation/routing/utils.py +28 -0
  370. pz_foundation/runtime.py +234 -0
  371. pz_foundation/settings.py +253 -0
  372. pz_foundation/settings_normalization.py +130 -0
  373. pz_foundation/storage/__init__.py +25 -0
  374. pz_foundation/storage/local.py +209 -0
  375. pz_foundation/storage/public.py +106 -0
  376. pz_foundation/storage/s3.py +116 -0
  377. pz_foundation/storage/service.py +234 -0
  378. pz_foundation/urls.py +19 -0
  379. pz_foundation/utils/__init__.py +6 -0
  380. pz_foundation/utils/merge.py +160 -0
  381. pz_foundation/worker_replicas.py +55 -0
  382. pz_settings_center/__init__.py +5 -0
  383. pz_settings_center/api/__init__.py +5 -0
  384. pz_settings_center/api/runtime_overrides.py +360 -0
  385. pz_settings_center/apps.py +28 -0
  386. pz_settings_center/configs/__init__.py +0 -0
  387. pz_settings_center/configs/default.env +2 -0
  388. pz_settings_center/configs/default.jsonc +1 -0
  389. pz_settings_center/docs/01-settings_center/350/203/275/345/212/233/350/276/271/347/225/214.md +124 -0
  390. pz_settings_center/docs/README.md +12 -0
  391. pz_settings_center/docs/distribution-README.md +150 -0
  392. pz_settings_center/docs//350/256/276/350/256/241/346/226/207/346/241/243.md +48 -0
  393. pz_settings_center/integration_payload.py +18 -0
  394. pz_settings_center/project_helpers.py +405 -0
  395. pz_settings_center/public.py +139 -0
  396. pz_settings_center/routing_helpers.py +73 -0
  397. pz_settings_center/runtime_override_provider.py +61 -0
  398. pz_settings_center/typed_settings.py +324 -0
  399. pz_settings_center/urls.py +9 -0
@@ -0,0 +1,6 @@
1
+ from __future__ import annotations
2
+
3
+ from .contracts import HealthStatus
4
+
5
+ __all__ = ["HealthStatus"]
6
+
@@ -0,0 +1,10 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+
5
+
6
+ @dataclass(frozen=True, slots=True)
7
+ class HealthStatus:
8
+ status: str
9
+ detail: str = ""
10
+
@@ -0,0 +1,6 @@
1
+ from __future__ import annotations
2
+
3
+ from .models import MiddlewareDecl, MiddlewareManifest
4
+
5
+ __all__ = ["MiddlewareDecl", "MiddlewareManifest"]
6
+
@@ -0,0 +1,24 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from typing import Any
5
+
6
+
7
+ @dataclass(frozen=True, slots=True)
8
+ class MiddlewareDecl:
9
+ id: str
10
+ factory: str
11
+ owner: str
12
+ priority: int = 100
13
+ replace: str | None = None
14
+ params_model: str | None = None
15
+ params: dict[str, Any] | None = None
16
+
17
+ @property
18
+ def import_path(self) -> str:
19
+ return self.factory
20
+
21
+
22
+ @dataclass(frozen=True, slots=True)
23
+ class MiddlewareManifest:
24
+ middlewares: tuple[MiddlewareDecl, ...]
@@ -0,0 +1,5 @@
1
+ from __future__ import annotations
2
+
3
+ from .models import RouteConflictPolicy, RouteDecl, RouteManifest
4
+
5
+ __all__ = ["RouteConflictPolicy", "RouteDecl", "RouteManifest"]
@@ -0,0 +1,21 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from typing import Literal
5
+
6
+ RouteConflictPolicy = Literal["fail", "warn"]
7
+
8
+
9
+ @dataclass(frozen=True, slots=True)
10
+ class RouteDecl:
11
+ path: str
12
+ method: str
13
+ name: str
14
+ owner: str
15
+ source_path: str | None = None
16
+
17
+
18
+ @dataclass(frozen=True, slots=True)
19
+ class RouteManifest:
20
+ routes: tuple[RouteDecl, ...]
21
+ conflict_policy: RouteConflictPolicy = "fail"
@@ -0,0 +1,25 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Literal
4
+
5
+ from pydantic import BaseModel, ConfigDict, Field
6
+
7
+
8
+ AppRouteDefaultMode = Literal["auth", "public"]
9
+
10
+
11
+ class AppRoutePolicySettings(BaseModel):
12
+ """Generic per-app route policy declaration compiled by an auth provider."""
13
+
14
+ model_config = ConfigDict(extra="ignore")
15
+
16
+ default_mode: AppRouteDefaultMode = "auth"
17
+ auth_paths: list[str] = Field(default_factory=list)
18
+ public_paths: list[str] = Field(default_factory=list)
19
+ delegate_paths: list[str] = Field(default_factory=list)
20
+ auth_owner: str | None = None
21
+ public_owner: str | None = None
22
+ delegate_owner: str | None = None
23
+
24
+
25
+ __all__ = ["AppRouteDefaultMode", "AppRoutePolicySettings"]
pz_core/docs/README.md ADDED
@@ -0,0 +1,20 @@
1
+ # PZ 文档索引(Start Here)
2
+
3
+ ## 设计依据
4
+
5
+ 本 README 按 `pz` 正式设计文档口径编写,回链如下:
6
+
7
+ 如果本 README 与 `pz` 设计文档、正式 contract 或正式装配约定冲突,以 `pz` 设计文档为准。
8
+
9
+ - [`新手指南`](新手指南.md)
10
+ - [`pz命令总览`](pz命令总览.md)
11
+ - [`03-App最小子包规范`](pz规范与使用/03-App最小子包规范.md)
12
+ - [`10-测试与契约规范`](pz规范与使用/10-测试与契约规范.md)
13
+ - [`14-分层与扩展规范`](pz规范与使用/14-分层与扩展规范.md)
14
+ - [`15-子包开发使用手册`](pz规范与使用/15-子包开发使用手册.md)
15
+ - [`21-contrib约定与Provider接入规范`](pz规范与使用/21-contrib约定与Provider接入规范.md)
16
+ - [`25-面向对象开发规范`](pz规范与使用/25-面向对象开发规范.md)
17
+
18
+ ## 快速了解
19
+
20
+ - [`24-pz启动与运行时编译流程`](pz规范与使用/24-pz启动与运行时编译流程.md)
@@ -0,0 +1,438 @@
1
+ # pz
2
+
3
+ `pz` 是唯一正式基础包,也是唯一可以独立启动的包。
4
+
5
+ 它只承载稳定合同、发现、编译、组装、启动,以及顶层 `pz` CLI 主链;官方能力与业务能力都应落成最小子包,而不是继续堆回基础层。
6
+
7
+ ## 最重要的设计哲学
8
+
9
+ - 单一基础包:`pz` 是唯一正式基础包,不能再拆回第二套 core。
10
+ - 最小子包平权:除 `pz` 外,正式运行单元只有最小子包;官方能力和业务能力使用同一套装配模型。
11
+ - 约定优先:目录名、import 包名、distribution、`app_id` 必须围绕稳定 app 身份收敛,不强制特定技术前缀,不保留第二套命名和第二套入口。
12
+ - 分层清晰:基础层只保留稳定合同与薄绑定层;高层能力优先进入 `pz_contrib` 或其它最小子包。
13
+ - 单一真相源:路由、settings、公开 surface、安装单位都必须有唯一正式入口,不做长期兼容桥接层。
14
+
15
+ ## 新手指南
16
+
17
+ 新手入口固定在独立文档:
18
+
19
+ - [`新手指南.md`](新手指南.md)
20
+
21
+ 里面包含:
22
+
23
+ - 开发线:先执行 `bash scripts/install_pz.sh` 安装公开 `pz-cli` distribution,拿到 `pz` 后在空目录里运行 `pz dev init`;默认导入官方 `pz_apps` 的正式最小子包并交给业务仓管理,只有显式 `--link` 才保留上游 checkout
24
+ - 生产线:正式安装源、环境配置、覆盖顺序、`PZ_ENV=product` 启动口径
25
+
26
+ 新项目开发线的最短正式路径是:
27
+
28
+ ```bash
29
+ bash scripts/install_pz.sh
30
+ exec "$SHELL" -l
31
+ mkdir my_project && cd my_project
32
+ pz dev init --project-dir .
33
+ ```
34
+
35
+ repo-local 作者面命令仍然统一是:
36
+
37
+ - `pz env doctor`
38
+ - `pz env install`
39
+ - `pz env init`
40
+ - `pz env sync`
41
+ - `pz startapp`
42
+ - 开发模式下统一走 `pz dev init`
43
+ - 必要时再执行 `pz settings update`
44
+ - 启动时统一走 `pz run`
45
+
46
+ 开发模式默认自动接入:
47
+
48
+ - 当前目录名对应的默认本地 app
49
+ - 官方 `pz_apps` 中全部正式最小子包;通过系统临时 Git cache 固定 revision 后导入 `apps/<app_id>`,不保留嵌套 `.git`
50
+ - 需要保留 bootstrap checkout 时显式使用 `pz dev init --link --clone-sources`;复用已有本地源码则使用 `pz dev init --link --source-dir <path>`
51
+ - 后续需要上游联调时通过 `pz dev link pz_apps` 或具体 app id 显式绑定,需要业务接管额外源码时通过 `pz dev add <app_id>` 导入单个最小子包
52
+ - `git@github.com:JiXiangTools/pyzza.git`(逻辑仓名 `pz`)
53
+
54
+ 补充说明:
55
+
56
+ - `--project-dir` 默认就是当前目录;脚本会直接把当前目录初始化成完整项目。
57
+ - 默认 app slug 来自当前目录名;如果要覆盖,可以显式传 `--app-name`.
58
+ - `pz-cli==5.0.0` 是唯一基础 distribution;一个 wheel 固定包含 `pz_core`、`pz_settings_center` 与 `pz_foundation` Python 包。
59
+ - `pz dev init` 默认声明 `pz_settings_center`、`pz_foundation` 与 `apps`;运行时只发现 `apps/` 下的真实本地 app 和可见受管快捷方式。
60
+ - 默认模式通过业务仓中的 `apps/<app_id>` 解析导入源码;只有显式 linked 初始化才把 checkout 和 binding 记录到 typed v5 manifest。
61
+ - linked 模式中的同仓 distributions 通过精确 `[tool.uv.sources]` 指向同一 `apps/.sources/pz` checkout,并默认从 `develop` 创建业务分支;只有显式传 `--base-branch main` 才改用 `main` 基线。
62
+ - 默认初始化会从系统临时 Git cache 导入 `pz_apps` 的全部正式最小叶子;额外仓仍显式选择 `dev add` 业务导入或 `dev link` 上游绑定。
63
+ - 如果同时传了 `--no-sync`,命令仍完成骨架、源码装配、settings 与 IDE 投影,只跳过最终初始环境安装;后续再执行一次 `pz env install --project-dir ...` 或 `pz env sync --project-dir ...` 即可。
64
+ - 启动口径默认就是 `pz run`;它会复用当前 `pz` 所在解释器并执行项目根 `main.py`,不再额外生成第二套启动脚本。
65
+ - 如果在同一个项目目录里重复执行 `pz dev init`,默认模式不得覆盖既有业务源码;linked 模式复用 manifest 中已有 checkout 与 binding。
66
+
67
+ ## 安装
68
+
69
+ 新手正式安装路径:
70
+
71
+ ```bash
72
+ bash scripts/install_pz.sh
73
+ ```
74
+
75
+ 重新打开 shell 后可使用:
76
+
77
+ ```bash
78
+ pz --help
79
+ pz --help
80
+ ```
81
+
82
+ 本地发布链 smoke:
83
+
84
+ ```bash
85
+ bash scripts/build_pz.sh --no-sources
86
+ ```
87
+
88
+ 然后继续按 `docs/pz规范与使用/12-构建与发布检查清单.md` 执行干净 venv 安装 smoke。
89
+
90
+ 基础包 + 官方 contrib 组合:
91
+
92
+ ```bash
93
+ pip install "pz[contrib]"
94
+ ```
95
+
96
+ 公开安装 facade:
97
+
98
+ ```bash
99
+ uv tool install pz-cli
100
+ pip install pz-cli
101
+ ```
102
+
103
+ 安装口径说明:
104
+
105
+ - 新手安装 CLI 的唯一正式入口默认走 `bash scripts/install_pz.sh`,它会从 `pub` index 安装公开 `pz-cli` distribution,不要求私有安装凭据。
106
+ - 默认公开安装索引路径是 `packages/pub/+simple/`,安装脚本会优先按这个正式入口解析。
107
+ - `scripts/install_pz.sh` 统一负责安装与 PATH 刷新,确保 `pz` / `pz` 能在 shell 里直接使用。
108
+ - `pz` 是极薄的 launcher facade;它只负责按正式顺序选择 provider,然后进入 `pz_core.cli:main`。
109
+ - `pz-cli` 的 console script 固定指向 `pz_core.pz_launcher:main`;provider 选定后仍只进入同一个 `pz_core.cli:main`。
110
+ - `pz` 的正式 provider 顺序是:项目 `.venv` -> 项目 dev manifest 里记录的 `apps/.sources/pz` bootstrap runtime -> 当前解释器 `site-packages` -> `uv tool run --from pz-cli pz`。
111
+ - `pz` 的正式 CLI 真相源仍然固定为 `pz_core.cli:main`;`pz` 只是外层 launcher,不引入第二套运行时。
112
+ - `pip install pz` 只负责把 console script 安装到对应解释器的 scripts 目录,不保证那个目录已经在当前 shell 的 `PATH` 里。
113
+ - `pip install pz-cli==5.0.0` / `uv tool install pz-cli` 安装唯一基础 wheel;它直接提供 `pz_core`、`pz_settings_center` 与 `pz_foundation`,不会安装旧拆分 wheel,也不会自动安装 `pz_apps` 仓中的业务子包。
114
+ - `pz` 会先按正式 provider 顺序解析,再决定最终命中的 `pz_core.cli:main`;当前目录只负责项目上下文和项目级 provider 发现,不允许再长出私有 wrapper 语义。
115
+ - 因此验证“已安装的 `pz-cli` 是否可用”时,仍然应在 `pz` 源码树外执行,避免把源码树遮蔽误判成正式安装语义。
116
+ - 单 wheel 不改变源码分层:`pz_core` 仍不得直接 import 官方或业务 app 的内部实现。
117
+ - 顶层项目作者面命令由 `pz` 基础包直接提供,不再要求额外安装 root CLI provider。
118
+
119
+ ## 常用命令
120
+
121
+ 命令分类的唯一正式真相表见 [`pz命令总览.md`](pz命令总览.md)。本 README 只保留三层摘要:
122
+
123
+ - 编排层命令:`pz dev init`、`pz dev add`、`pz dev link`、`pz dev branch`、`pz dev update`、`pz dev unlink`、`pz env init`、`pz app init`、`pz app add`、`pz app update`、`pz app rm`、`pz pub`、`pz pub batch`
124
+ - 原子层命令:`pz env doctor`、`pz env install`、`pz env sync`、`pz settings init`、`pz settings update`、`pz settings refresh-agents`、`pz settings reset-agents`、`pz startapp`、`pz app versions`、`pz app declare`、`pz app undeclare`、`pz app install`、`pz dev source cache`、`pz dev source import`、`pz dev source link`、`pz dev source branch`、`pz dev source update`、`pz dev source unlink`、`pz dev ide sync`、`pz pub commit`、`pz pub tag`、`pz pub upload`、`pz pub rm`
125
+ - 运行时层命令:`pz run`、`pz list`、`pz check`、`pz db ...`、`pz workers ...`、`pz resources ...`、`pz <app_id> <tool>`
126
+
127
+ 常用入口示例:
128
+
129
+ ```bash
130
+ pz dev init --project-dir .
131
+ pz env doctor --project-dir .
132
+ pz env install --project-dir .
133
+ pz env init --project-dir .
134
+ pz env sync --project-dir .
135
+ pz settings init --force --project-dir .
136
+ pz settings update catalog --project-dir .
137
+ pz startapp demo --project-dir .
138
+ pz app versions catalog --project-dir .
139
+ pz app add catalog --project-dir .
140
+ pz app add catalog --version 1.4.2 --project-dir .
141
+ pz dev add https://example.com/catalog.git --project-dir .
142
+ pz dev add ../catalog/catalog --project-dir .
143
+ pz dev link ../catalog --project-dir .
144
+ pz dev update catalog --project-dir .
145
+ pz dev unlink catalog --project-dir .
146
+ pz pub catalog --target pypi --dry-run --project-dir .
147
+ pz pub rm catalog --target devpi_pub --force --project-dir .
148
+ pz pub batch pz catalog --target pypi --project-dir .
149
+ pz list --project-dir .
150
+ pz catalog config --help
151
+ ```
152
+
153
+ ### CLI 扩展
154
+
155
+ `pz` 现在支持两类扩展命令,统一收口在根命令层:
156
+
157
+ - app CLI 扩展:每个 app 的正式 CLI 入口固定为 `<app>/cli/*.py`。显式形式始终是 `pz <app_id> <tool>`。
158
+ - project CLI 扩展:项目自身的 npm-like 快捷命令统一写在 `pz.jsonc` 顶层 `commands`。
159
+
160
+ 唯一的 app CLI tool 会自动注册成 `pz <tool>` 根命令;如果多个 app 暴露了同名 tool,根命令不会抢占,而是明确要求写成 `pz <app_id> <tool>`。
161
+
162
+ `pz.jsonc` 里的 `commands` 支持:
163
+
164
+ ```jsonc
165
+ {
166
+ "commands": {
167
+ "hello": "echo hello",
168
+ "lint": ["python", "-m", "pytest", "-q"],
169
+ "worker:smoke": {
170
+ "argv": ["python", "-m", "pytest", "tests/test_worker.py", "-q"],
171
+ "description": "Run the worker smoke suite."
172
+ }
173
+ }
174
+ }
175
+ ```
176
+
177
+ 项目级扩展配置还可以声明发布锁:
178
+
179
+ ```jsonc
180
+ {
181
+ "extensions": {
182
+ "publish_lock": {
183
+ "targets": {
184
+ "pub": ["pz-cli"],
185
+ "devpi_prod": ["pz"],
186
+ "dev": ["catalog"]
187
+ }
188
+ }
189
+ }
190
+ }
191
+ ```
192
+
193
+ 说明:
194
+
195
+ - `pub` / `prod` / `dev` 会按正式 devpi index 分类生效。
196
+ - 也可以直接写精确 target 名,比如 `devpi_pub`、`devpi_prod`、`devpi_dev`。
197
+ - 一旦命中对应锁,未列入 allowlist 的包不能执行 `pz pub ...`。
198
+
199
+ 补充约束:
200
+
201
+ - 内建正式命令仍然优先,项目命令不能覆盖 `run`、`dev`、`list`、`check`、`db` 等正式入口。
202
+ - `pz --help` 会把当前项目可用的扩展命令列到 `Extensions:` 小节。
203
+
204
+ 补充说明:
205
+
206
+ - 新建开发项目的正式入口是 `pz dev init` / `pz dev init`。
207
+ - `pz env install` / `pz env install` 是“创建或复用项目 `.venv`,再执行首轮依赖同步”的原子命令。
208
+ - `pz env init` / `pz env init` 是“已有目录补齐骨架、托管区块和初始环境安装”的编排命令,不与 `dev init` 竞争新项目入口。
209
+ - CLI 初始化入口固定为分组命令,例如 `pz env init`、`pz app init`、`pz dev init`、`pz settings init`;`pz` 入口遵循同一分组结构。
210
+
211
+ 本地 contrib 安装链 smoke:
212
+
213
+ 执行 `bash scripts/build_pz.sh --no-sources` 后,继续按 `docs/pz规范与使用/12-构建与发布检查清单.md` 的官方最小子包 smoke 路径验证。
214
+
215
+ `pz.app` 是正式宿主 Python API 入口。
216
+
217
+ ## 重要约定
218
+
219
+ - 命名规则固定为:
220
+ - 目录名 = `<app_id>`
221
+ - import 包名 = `<app_id>`
222
+ - `app_id = <app_id>`
223
+ - distribution = `<app_id with _ replaced by ->`
224
+ - 新建子包默认让目录名、import 包名与 `app_id` 对齐;历史稳定 `app_id` 以已声明值为准,不因文档命名口径变化迁移,也不强制 `pz_` 前缀。
225
+ - `installed_apps` 的正式写法只允许目录名;可以写最小子包名,也可以写容器目录名,框架会递归发现其中嵌套的最小子包。
226
+ - Python 运行时代码读取配置只允许:
227
+ - `import pz_settings_center.public as settings_center`
228
+ - app 私有配置走 `settings_center.settings.<app_id>.<field>`
229
+ - 项目级配置走 `settings_center.settings.project.<field>`
230
+ - 每个 app 的 URL 真相源固定在 `<app>/urls.py` 或 `<app>/urls/`,直接使用 FastAPI 原生 `APIRouter()` 与 `include_router(...)`。
231
+ - `public.py` 是 app 唯一稳定公开面;跨包调用优先走 `public.py`,不要直接 import 别的 app 内部实现。
232
+ - `pz_core.cli:main` 是唯一正式 CLI dispatcher;`pz.root_cli` 是顶层命令 provider entry-point group,不是第二个入口。
233
+ - `env`、`settings`、`startapp`、`app`、`dev`、`pub` 都属于正式顶层命令协议,由已安装的 `pz.root_cli` provider handler 注册后交给同一个 dispatcher。
234
+ - 面向用户的主路径优先走编排层;原子命令保留给单一职责动作和编排复用。
235
+ - 其它命令统一收敛到 `pz` 的单一运行时 CLI 主链。
236
+
237
+ ## 使用方式
238
+
239
+ 新建项目:
240
+
241
+ ```bash
242
+ pz env doctor --project-dir /path/to/project
243
+ pz dev init --project-dir /path/to/project
244
+ ```
245
+
246
+ 默认会同时生成:
247
+
248
+ - `pz.jsonc`
249
+ - `pz.develop.jsonc`
250
+ - `pz.test.jsonc`
251
+ - `pz.product.jsonc`
252
+ - `.env`
253
+ - `.env.develop`
254
+ - `.env.test`
255
+ - `.env.product`
256
+
257
+ 其中 `pz.{env}.jsonc` 是非敏感的环境静态覆盖骨架;`.env` 是默认 secrets 模板;`.env.{env}` 只放对应环境的敏感或运行态差异覆盖。
258
+
259
+ 新建子包:
260
+
261
+ ```bash
262
+ pz startapp demo --project-dir /path/to/project
263
+ ```
264
+
265
+ 把已发布 app 加入项目声明并安装:
266
+
267
+ ```bash
268
+ pz app add catalog --project-dir /path/to/project
269
+ ```
270
+
271
+ 未指定版本时默认安装兼容的最新稳定版本,也可用 `--version <version>` 精确指定。解析结果会以精确版本进入项目声明和 `uv.lock`;安装目标是当前项目解释器环境,不会把源码写进 `apps/`。安装前可用 `pz app versions catalog` 查看可用、当前声明、锁定和已安装版本。
272
+
273
+ 把正式最小子包源码导入本地 `apps/` 并交给业务仓管理:
274
+
275
+ ```bash
276
+ pz dev add https://example.com/catalog.git --project-dir /path/to/project
277
+ ```
278
+
279
+ 也可以从本地叶子源码目录导入:
280
+
281
+ ```bash
282
+ pz dev add ../catalog/catalog --project-dir /path/to/project
283
+ ```
284
+
285
+ 需要保留上游 checkout 与 Git 生命周期时使用 linked 模式:
286
+
287
+ ```bash
288
+ pz dev link ../catalog --project-dir /path/to/project
289
+ ```
290
+
291
+ 新建项目级 settings:
292
+
293
+ ```bash
294
+ pz settings init --project-dir /path/to/project
295
+ ```
296
+
297
+ 明确覆盖并重生成项目级 settings:
298
+
299
+ ```bash
300
+ pz settings init --force --project-dir /path/to/project
301
+ ```
302
+
303
+ 更新某个 app 的 settings:
304
+
305
+ ```bash
306
+ pz settings update catalog --project-dir /path/to/project
307
+ ```
308
+
309
+ 只刷新项目根 `AGENTS.md` 的 pz 托管区块:
310
+
311
+ ```bash
312
+ pz settings refresh-agents --project-dir /path/to/project
313
+ ```
314
+
315
+ 整份重置项目根 `AGENTS.md`:
316
+
317
+ ```bash
318
+ pz settings reset-agents --project-dir /path/to/project
319
+ ```
320
+
321
+ 补充说明:
322
+
323
+ - `pz env doctor` 负责检查当前项目目录的作者面前置条件,例如 `python`、`uv`、`git`。
324
+ - `pz dev init` 是新建开发项目的唯一正式入口;它会补齐骨架、默认本地 app、官方源码基线,刷新托管配置区块,并默认调用 `pz env install`,让 `pz run` 可以直接启动。
325
+ - `pz env install` 是正式初始环境安装入口,负责创建或复用项目 `.venv`,并对项目根和已发现的作者面根执行首轮同步。
326
+ - `pz env init` 负责复用底层 scaffold service、`pz settings update` 与 `pz env install` 的正式语义,对已有目录补齐骨架、刷新托管区块,并默认完成初始环境安装。
327
+ - `pz env sync` 是正式依赖同步入口,负责对项目根和已发现的作者面根执行统一的同步编排。
328
+ - 底层 scaffold service 会同时生成 `pz.jsonc`、`pz.develop.jsonc`、`pz.test.jsonc`、`pz.product.jsonc`、`.env`、`.env.develop`、`.env.test`、`.env.product`,但它不作为公开根命令暴露。
329
+ - 默认 `.env` 模板应覆盖当前正式项目常用 env 键面,并显式排除 `PZ_AGENT*` 与 `SEO_OPS*` 这类非当前正式 settings 真相源。
330
+ - 默认 `pz.develop.jsonc` / `pz.test.jsonc` / `pz.product.jsonc` 也必须生成标准环境覆盖骨架,不能退回空 `{}`。
331
+ - `pz env` / `pz settings` / `pz startapp` / `pz app|dev|pub` 都是正式顶层命令协议的一部分。
332
+ - 这些命令由 `pz` 基础包直接提供;官方 `contrib` 组合不是前置条件。
333
+ - `pz startapp <name>` 负责生成符合正式约定的最小子包骨架。
334
+ - 生成骨架默认包含 `urls.py`、`pages/`、`templates/`、`static/`、`models.py` 等目录,并对齐 MVC 心智与“前端展示 / AJAX + API”约定。
335
+ - `pz app add <app_id>` 是项目装配编排命令,依次复用版本查询、精确声明、安装与 settings 原子能力;默认选择兼容的最新稳定版本,也接受 `--version <version>`,且不向 `apps/` 写源码。
336
+ - `pz app update <app_id>` 复用同一编排,默认升级到兼容的最新稳定版本,也可精确切换版本;`pz app versions <app_id>` 是无副作用的版本查看原子命令。
337
+ - `pz app add <app_id>` / `pz app update <app_id>` 永远按 distribution 名称安装,也不回退为源码仓 `editable` 安装;若能从正式 `publish` target 解析出私有索引 `check_url`,则只复用这份索引元数据补全安装认证。
338
+ - `pz app declare <app_id>` / `pz app add <app_id>` 不接管 `apps/<app_id>` 中业务拥有的真实源码;切回 package 模式前必须先由业务 Git 工作流收敛该目录。
339
+ - `pz app add <app_id>` / `pz dev add <source>` / `pz dev link <source>` 完成后都必须检查结果状态;若多个项目本地源码位置同时暴露同一 `app_id`,命令直接报错,并给出标准人工处理指引。
340
+ - 运行时发现阶段若项目源码扫描范围与环境中已安装 distribution 同时都可导入同名最小子包,则正式优先级固定为项目源码优先。
341
+ - `pz dev add <app-or-source>` 编排 `dev source cache -> dev source import -> settings update -> env sync -> dev ide sync`;Git 来源默认使用 `develop` 分支,当前用户隔离的系统临时 cache 存在时先更新、不存在时 staged clone,再按固定 full commit 导入一个最小子包到 `apps/<app_id>`。app 目录、source mode、provenance 与宿主 dependency/`tool.uv.sources` 在同一原子事务落位,最终不保留嵌套 `.git`,导入结果由业务仓管理。
342
+ - `pz dev link <repo-or-app>` 保留现有 `apps/.sources/<repo_key>` checkout 与 `apps/` binding 模型,用于上游源码联调。
343
+ - `pz dev update <app_id>` 只更新 manifest 中的 linked checkout,不更新业务仓拥有的真实目录,也不进入发布链。
344
+ - `pz dev unlink <binding>` 只移除 linked 源码暴露,不删除业务仓真实目录,也不隐式移除项目声明。
345
+ - `pz pub <app_id>` 是正式单包发布编排入口,按顺序执行 package-scoped release commit、`<distribution>@<version>` annotated tag 与 build/upload;不自动升级版本号,不执行 `git push`。
346
+ - `pz pub commit` / `pz pub tag` / `pz pub upload` 是单一职责原子命令,供编排、验证和失败续跑复用。
347
+ - `pz pub batch <app_id>...` 是上层编排命令,只按你显式给出的顺序依次执行完整单包 `pub`,不隐式推断依赖顺序。
348
+ - 发布目标的非敏感配置可以写入项目根 `pz.jsonc` 的 `publish` / `publish.targets.<name>`;若在源码仓根直接发布,则写入源码仓根 `pyproject.toml` 的 `tool.pz.publish`;凭证仍应通过环境变量提供。
349
+ - `pz pub` 会优先使用当前进程环境中的发布凭据;若当前项目根存在 `.env`,会把其中同名凭据补入子进程环境,但不覆盖已显式导出的环境变量。
350
+ - 发布命令既可以在标准项目根执行,也可以在源码仓根执行;项目根读取 `pz.jsonc`,源码仓根读取根 `pyproject.toml`,不要求额外再包一层 `apps/`。
351
+ - 当前正式 devpi 发布目标采用通用命名 `devpi_dev`、`devpi_prod` 与 `devpi_pub`,目标地址与环境变量名写在各源码仓根 `pyproject.toml` 的 `tool.pz.publish`,实际凭证由当前 deploy 仓的 `docker-compose/devpi/.env` 或等价 shell 环境变量提供。
352
+ - `pz settings init` 只用于“目录已存在但还没有 `pz.jsonc`”的场景;如果项目已经执行过 `pz env init` 或 `pz dev init`,通常不再执行这个命令。
353
+ - `pz settings init` 在缺失时也会补齐 `pz.develop.jsonc`、`pz.test.jsonc`、`pz.product.jsonc`、`.env`、`.env.develop`、`.env.test`、`.env.product`,但不会覆盖已有 env / jsonc 文件。
354
+ - 若确实需要按当前已发现的最小子包重新生成托管区块,可显式执行 `pz settings init --force` 覆盖现有 `pz.jsonc`。
355
+ - `pz settings update <target>` 用于把当前项目里目标 app 的默认配置同步进现有 `pz.jsonc`。
356
+ - `pz settings refresh-agents` 只刷新项目根 `AGENTS.md` 里的 pz 托管区块,不改用户手写内容。
357
+ - `pz settings reset-agents` 会把项目根 `AGENTS.md` 重置为当前正式托管块;这是整份文件重置,不保留用户手写内容。
358
+
359
+ 源码仓根 `pyproject.toml` 的发布目标示例:
360
+
361
+ ```toml
362
+ [tool.pz.publish]
363
+ default_target = "devpi_pub"
364
+
365
+ [tool.pz.publish.targets.devpi_pub]
366
+ publish_url = "https://packages.example.test/packages/pub/"
367
+ check_url = "https://packages.example.test/packages/pub/+simple/"
368
+ username_env = "DEVPI_OWNER"
369
+ password_env = "DEVPI_OWNER_PASSWORD"
370
+ install_username_env = "DEVPI_INSTALL_USER"
371
+ install_password_env = "DEVPI_INSTALL_PASSWORD"
372
+ ```
373
+
374
+ 对应发布示例:
375
+
376
+ ```bash
377
+ set -a
378
+ source <deploy_repo_root>/docker-compose/devpi/.env
379
+ set +a
380
+ cd <app_repo_root>
381
+ pz pub catalog --target devpi_dev --project-dir .
382
+ ```
383
+
384
+ ## 仓库关系
385
+
386
+ 按照当前设计文档口径,最终只有两个 Git 管理边界:`pz` 是唯一正式基础仓,`pz_apps` 是承载其余最小子包的逻辑源码仓。`pz_apps` 沿用既有物理 Git 远端,不再新建第三个仓库。
387
+
388
+ - `pz`
389
+ - 定位:唯一正式基础包与唯一启动壳,负责稳定合同、发现协议、`RuntimePlan` 编译、统一 CLI 主链与通用启动协议。
390
+ - GitHub:[JiXiangTools/pz](https://github.com/JiXiangTools/pz)
391
+ - `pz_apps`
392
+ - 定位:承载平台、站点运行时和其它非最小基础能力的最小子包;逻辑 source-root 与 distribution 名称使用 `pz_apps` / `pz-apps-source-root`。
393
+ - Git 远端:[JiXiangTools/pyzza_platform](https://github.com/JiXiangTools/pyzza_platform)
394
+
395
+ 补充说明:
396
+
397
+ - `pz_contrib` 是官方最小子包源码容器与官方通用装配实现;在任一宿主里都应通过当前 `[tool.uv.sources]` 或对应源码仓解析出它的正式真相源,而不是把某个固定目录名当 contract,但它本身不形成独立运行时 namespace。
398
+ - `pz` 通过稳定合同承载扩展点;平台能力和站点能力应分别在对应源码仓内按最小子包落地,而不是回写到基础层。
399
+
400
+ ## 设计依据
401
+
402
+ 本 README 按 `pz` 正式设计文档口径编写。
403
+
404
+ 如果本 README 与 `pz` 设计文档、正式 contract 或正式装配约定冲突,以 `pz` 设计文档为准。
405
+
406
+ - [`03-App最小子包规范`](pz规范与使用/03-App最小子包规范.md)
407
+ - [`10-测试与契约规范`](pz规范与使用/10-测试与契约规范.md)
408
+ - [`14-分层与扩展规范`](pz规范与使用/14-分层与扩展规范.md)
409
+ - [`15-子包开发使用手册`](pz规范与使用/15-子包开发使用手册.md)
410
+ - [`21-contrib约定与Provider接入规范`](pz规范与使用/21-contrib约定与Provider接入规范.md)
411
+
412
+ ## 文档索引
413
+
414
+ 总索引:
415
+
416
+ - [pz 规范与使用](pz规范与使用/README.md)
417
+
418
+ 架构与分发:
419
+
420
+ - [00-pz架构总纲](pz规范与使用/00-pz架构总纲.md)
421
+ - [01-目录与分层规范](pz规范与使用/01-目录与分层规范.md)
422
+ - [02-包与分发规范](pz规范与使用/02-包与分发规范.md)
423
+ - [14-分层与扩展规范](pz规范与使用/14-分层与扩展规范.md)
424
+
425
+ 开发与约定:
426
+
427
+ - [03-App最小子包规范](pz规范与使用/03-App最小子包规范.md)
428
+ - [04-Settings与配置规范](pz规范与使用/04-Settings与配置规范.md)
429
+ - [09-CLI与Worker入口规范](pz规范与使用/09-CLI与Worker入口规范.md)
430
+ - [15-子包开发使用手册](pz规范与使用/15-子包开发使用手册.md)
431
+ - [21-contrib约定与Provider接入规范](pz规范与使用/21-contrib约定与Provider接入规范.md)
432
+
433
+ 测试与治理:
434
+
435
+ - [10-测试与契约规范](pz规范与使用/10-测试与契约规范.md)
436
+ - [11-仓库真相源地图](pz规范与使用/11-仓库真相源地图.md)
437
+ - [12-构建与发布检查清单](pz规范与使用/12-构建与发布检查清单.md)
438
+ - [26-cutover完工检查清单(历史)](pz规范与使用/archive/中间态/26-cutover完工检查清单.md)