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,1011 @@
1
+ # `pz` 命令总览
2
+
3
+ 本文件专门记录当前正式 `pz` 命令面。
4
+
5
+ 如果本文件与 `pz` 设计文档、正式 contract 或源码实际行为冲突,以后者为准。
6
+
7
+ 相关文档:
8
+
9
+ - [`README.md`](README.md)
10
+ - [`新手指南.md`](新手指南.md)
11
+ - [`pz规范与使用/24-pz启动与运行时编译流程.md`](pz规范与使用/24-pz启动与运行时编译流程.md)
12
+ - [`pz规范与使用/09-CLI与Worker入口规范.md`](pz规范与使用/09-CLI与Worker入口规范.md)
13
+ - [`pz dev source ownership 设计`](../../../docs/superpowers/specs/2026-07-13-pz-dev-add-link-source-ownership-design.md)
14
+ - [`pz app version resolution 设计`](../../../docs/superpowers/specs/2026-07-13-pz-app-version-resolution-design.md)
15
+ - [`pz pub Git release orchestration 设计`](../../../docs/superpowers/specs/2026-07-13-pz-publish-git-release-orchestration-design.md)
16
+
17
+ ## 1. 总原则
18
+
19
+ - 项目启动统一走 `pz run`
20
+ - 项目配置初始化、更新、托管区块刷新统一走 `pz settings ...` / `pz env ...`
21
+ - 新开发项目统一从 `pz dev init` 进入
22
+ - 发布包安装统一走 `pz app ...`
23
+ - 业务源码导入与上游源码联调统一走 `pz dev ...`
24
+ - 发布统一走 `pz pub ...`
25
+ - 运行时诊断统一走 `pz list`、`pz check`、`pz db ...`、`pz <app_id> <tool>`
26
+
27
+ `pz` 只是正式 launcher facade,不是第二套运行时真相源。
28
+
29
+ `pz` 是高频基础入口,定型后必须保持稳定。允许变更范围固定为:
30
+
31
+ - 修复与既有 contract 不一致的 bug
32
+ - 补齐缺失的 contract / 测试 / 文档
33
+ - 增加明确纳入 contract 的新命令或新选项
34
+
35
+ 不得随业务能力变化而改变既有命令语义、provider 顺序、入口函数、安装依赖边界或 `project_dir` 解析规则。
36
+
37
+ 每次执行 `pz` 时,provider 选择顺序固定为:
38
+
39
+ 1. 当前项目本地 `.venv`
40
+ 2. 当前项目 dev manifest 里记录的 `pz` bootstrap runtime path(正式 checkout 位于 `apps/.sources/pz`)
41
+ 3. 当前解释器里的已安装 `site-packages`
42
+ 4. `uv tool run --from pz-cli pz`
43
+
44
+ 这一步只负责决定这次命令最终落到哪个 `pz_core.cli:main`,不改变 `pz` 仍然是唯一正式基础包与唯一正式 CLI 真相源的约束。`pz.root_cli` 只是顶层命令 provider entry-point group,不是第二个 CLI 入口。
45
+
46
+ ## 2. 命令分类唯一真相表与顶层清单
47
+
48
+ 所有正式命令只属于下列三层之一。本表是命令分类的唯一正式真相源;`README.md`、`09-CLI与Worker入口规范.md` 和 `pz --help` 只做一致摘要,不另行定义分类。
49
+
50
+ | 层级 | 唯一命令集合 | 边界 |
51
+ | --- | --- | --- |
52
+ | 编排命令 | `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` | 组合多个已有原子动作,不引入第二套装配、版本解析、IDE 投影或发布协议。 |
53
+ | 原子命令 | `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` | 执行一个可单独验证、重试的作者面动作。 |
54
+ | 运行时命令 | `pz run`、`pz list`、`pz check`、`pz db ...`、`pz workers ...`、`pz resources ...`、`pz <app_id> <tool>` | 编译或消费当前正式运行时计划,不修改作者面命令分类。 |
55
+
56
+ 以下是当前正式顶层命令签名清单:
57
+
58
+ - `pz env doctor`
59
+ - `pz env install`
60
+ - `pz env init`
61
+ - `pz env sync`
62
+ - `pz settings init`
63
+ - `pz settings update`
64
+ - `pz settings refresh-agents`
65
+ - `pz settings reset-agents`
66
+ - `pz run`
67
+ - `pz run develop`
68
+ - `pz run dev`
69
+ - `pz run test`
70
+ - `pz run product`
71
+ - `pz startapp`
72
+ - `pz app init`
73
+ - `pz app add`
74
+ - `pz app rm`
75
+ - `pz app update`
76
+ - `pz app versions`
77
+ - `pz app declare`
78
+ - `pz app undeclare`
79
+ - `pz app install`
80
+ - `pz dev init`
81
+ - `pz dev add`
82
+ - `pz dev link`
83
+ - `pz dev branch`
84
+ - `pz dev update`
85
+ - `pz dev unlink`
86
+ - `pz dev source cache`
87
+ - `pz dev source import`
88
+ - `pz dev source link`
89
+ - `pz dev source branch`
90
+ - `pz dev source update`
91
+ - `pz dev source unlink`
92
+ - `pz dev ide sync`
93
+ - `pz pub`
94
+ - `pz pub commit`
95
+ - `pz pub tag`
96
+ - `pz pub upload`
97
+ - `pz pub rm`
98
+ - `pz pub batch`
99
+ - `pz list`
100
+ - `pz check`
101
+ - `pz db makemigrations`
102
+ - `pz db migrate`
103
+ - `pz db showmigrations`
104
+ - `pz workers list`
105
+ - `pz workers status`
106
+ - `pz workers stop`
107
+ - `pz workers restart`
108
+ - `pz workers run`
109
+ - `pz resources images`
110
+ - `pz <app_id> <tool>`
111
+
112
+ 命令路径不做缩写,不登记 `pz e d`、`pz a i`、`pz b mm` 这类二级 alias,也不按前缀猜测命令。高频简写只发生在参数层,并且必须通过 `pz_core.cli_options.add_cli_option()` 的同一份公共表注册;各命令的 `-h` 由 argparse 自动展示长短参数。
113
+
114
+ 当前正式参数短选项:
115
+
116
+ | 完整参数 | 短参数 |
117
+ | --- | --- |
118
+ | `--app-name` | `-a` |
119
+ | `--base-branch` | `-b` |
120
+ | `--clone-sources` | `-C` |
121
+ | `--concurrency` | `-c` |
122
+ | `--dry-run` | `-n` |
123
+ | `--delete-checkout` | `-X` |
124
+ | `--extra` | `-x` |
125
+ | `--force` | `-f` |
126
+ | `--group` | `-g` |
127
+ | `--host` | `-H` |
128
+ | `--json` | `-j` |
129
+ | `--no-sync` | `-S` |
130
+ | `--once` | `-o` |
131
+ | `--poll-interval` | `-I` |
132
+ | `--port` | `-p` |
133
+ | `--prepare-workspace` | `-w` |
134
+ | `--project-dir` | `-d` |
135
+ | `--project-only` | `-P` |
136
+ | `--reinstall-package` | `-i` |
137
+ | `--reload` | `-r` |
138
+ | `--replica-slot` | `-l` |
139
+ | `--reset-middlewares-order` | `-M` |
140
+ | `--shutdown-timeout` | `-T` |
141
+ | `--status` | `-s` |
142
+ | `--target` | `-t` |
143
+ | `--target-dir` | `-D` |
144
+ | `--workers` | `-W` |
145
+
146
+ ## 3. 新项目与作者面
147
+
148
+ ### `pz dev init`
149
+
150
+ 用途:
151
+
152
+ - 新建开发项目的唯一正式入口
153
+ - 默认把官方 `pz_apps` 中每个正式最小子包导入业务仓;显式 `--link` 才保留上游 checkout
154
+ - 负责项目骨架、默认本地 app、源码装配、托管配置刷新、初始环境安装与 IDE 投影
155
+ - 默认会通过 `pz env install` 确保项目根 `.venv` 存在;后续 `pz` provider 会优先使用该项目环境
156
+
157
+ 常用写法:
158
+
159
+ ```bash
160
+ pz dev init -d .
161
+ pz dev init -a demo -d .
162
+ pz dev init -S -d .
163
+ pz dev init --link -C -d .
164
+ pz dev init --link --source-dir ../pz -d .
165
+ ```
166
+
167
+ 边界:
168
+
169
+ - 它是编排命令,不替代 `pz run`
170
+ - 它不替代后续按需使用的 `pz dev add`、`pz dev link`、`pz app add`、`pz settings update`
171
+ - 默认模式编排 scaffold、`dev source cache`、对全部正式叶子执行 `dev source import`、一次 `settings update`、一次 `env install` 与一次 `dev ide sync`
172
+ - 默认模式不保留 `pz_apps` checkout;每个导入叶子落在 `apps/<app_id>`,由业务仓拥有
173
+ - linked 模式必须写成 `--link --clone-sources` 或 `--link --source-dir <path>`,两个 source selector 必须且只能出现一个
174
+ - `--clone-sources` / `--source-dir` 不带 `--link` 时直接失败,不允许隐式推断所有权模式
175
+ - linked 模式只保留原 bootstrap scope,不隐式暴露整个 `pz_apps` 仓;新增 linked 仓继续显式使用 `pz dev link`
176
+ - linked 模式默认基础分支是 `develop`;只有显式 `--base-branch main` 才从 `main` 创建业务分支
177
+ - 业务分支名固定来自 `business_app_id`:优先使用 `--app-name`,否则使用项目目录名归一化结果
178
+ - 最后调用 `pz dev ide sync`;已有 `.idea/` / `.vscode/` 对应 provider 执行投影,不存在的 IDE 目录只让该 provider 返回 `not_applicable`
179
+ - 默认执行完成后,`pz run` 可以直接启动;`--no-sync` 只跳过 `env install`,不跳过 IDE 投影同步
180
+
181
+ 参考:
182
+
183
+ - [`新手指南.md`](新手指南.md)
184
+ - [`pz规范与使用/09-CLI与Worker入口规范.md`](pz规范与使用/09-CLI与Worker入口规范.md)
185
+
186
+ ### `pz env doctor`
187
+
188
+ 用途:
189
+
190
+ - 检查当前项目目录的作者面前置条件
191
+ - 当前主要检查 `python`、`uv`、`git`
192
+
193
+ 常用写法:
194
+
195
+ ```bash
196
+ pz env doctor -d .
197
+ pz env doctor -j -d .
198
+ ```
199
+
200
+ ### `pz env install`
201
+
202
+ 用途:
203
+
204
+ - 创建或复用当前项目根 `.venv`
205
+ - 对当前项目根和已发现的作者面根执行首轮依赖同步
206
+ - 作为 `pz dev init` / `pz env init` 复用的正式原子能力
207
+
208
+ 常用写法:
209
+
210
+ ```bash
211
+ pz env install -d .
212
+ pz env install -g dev -d .
213
+ pz env install -x docs -d .
214
+ pz env install -i pz -d .
215
+ pz env install -P -d .
216
+ ```
217
+
218
+ ### `pz env init`
219
+
220
+ 用途:
221
+
222
+ - 面向“目录已存在,但需要补齐正式 pz 骨架与托管配置”的场景
223
+ - 复用底层 scaffold service、`pz settings update`、`pz env install` 的正式语义
224
+
225
+ 常用写法:
226
+
227
+ ```bash
228
+ pz env init -d .
229
+ pz env init -S -d .
230
+ ```
231
+
232
+ 边界:
233
+
234
+ - 不替代 `pz dev init` 的新项目职责
235
+ - CLI 初始化入口固定为分组命令,例如 `pz env init`、`pz app init`、`pz dev init`、`pz settings init`
236
+
237
+ ### `pz env sync`
238
+
239
+ 用途:
240
+
241
+ - 对正式项目根和已发现的作者面根执行依赖同步
242
+ - source-root workspace overlay 只镜像源码真相;`.venv`、`.pytest_cache`、`__pycache__`、`*.egg-info` 与 Python 包根 `dist` 等生成目录不会进入 overlay,也不会成为 editable build 输入;依赖目录内部的同名资源目录不属于清理范围,生成目录符号链接只解除链接而不跟随删除外部目标
243
+
244
+ 常用写法:
245
+
246
+ ```bash
247
+ pz env sync -d .
248
+ pz env sync -g dev -d .
249
+ pz env sync -x docs -d .
250
+ pz env sync -i pz -d .
251
+ pz env sync -P -d .
252
+ ```
253
+
254
+ ## 4. 配置与托管区块
255
+
256
+ ### `pz settings init`
257
+
258
+ 用途:
259
+
260
+ - 扫描已安装 app,读取各 app 的 `configs/default.jsonc` / `configs/default.env`,生成或覆盖 `pz*.jsonc` 与 `.env*` 的托管内容
261
+
262
+ 常用写法:
263
+
264
+ ```bash
265
+ pz settings init -d .
266
+ pz settings init -f -d .
267
+ ```
268
+
269
+ 边界:
270
+
271
+ - 更适合“目录已存在但还没有 `pz.jsonc`”的场景
272
+
273
+ ### `pz settings update`
274
+
275
+ 用途:
276
+
277
+ - 把当前 app 的 `configs/default.jsonc` 默认配置模板同步进现有 `pz*.jsonc`
278
+ - 把当前 app 的 `configs/default.env` 占位模板同步进现有 `.env*`
279
+ - 刷新托管配置区块,但不覆盖非托管项目值
280
+
281
+ 常用写法:
282
+
283
+ ```bash
284
+ pz settings update -d .
285
+ pz settings update <target> -d .
286
+ pz settings update -M -d .
287
+ ```
288
+
289
+ 硬约束:
290
+
291
+ - 项目配置更新统一走这个正式入口,不要直接手写第二套更新脚本
292
+
293
+ ### `pz settings refresh-agents`
294
+
295
+ 用途:
296
+
297
+ - 只刷新项目根 `AGENTS.md` 的 pz 托管区块
298
+ - 保留用户手写内容
299
+
300
+ 常用写法:
301
+
302
+ ```bash
303
+ pz settings refresh-agents -d .
304
+ ```
305
+
306
+ ### `pz settings reset-agents`
307
+
308
+ 用途:
309
+
310
+ - 整份重置项目根 `AGENTS.md` 为当前正式托管块
311
+ - 不保留用户手写内容
312
+
313
+ 常用写法:
314
+
315
+ ```bash
316
+ pz settings reset-agents -d .
317
+ ```
318
+
319
+ ## 5. 项目启动
320
+
321
+ ### `pz run`
322
+
323
+ 用途:
324
+
325
+ - 项目启动唯一正式入口
326
+
327
+ 等价关系:
328
+
329
+ - `pz run`
330
+ - `pz run develop`
331
+ - `pz run dev`
332
+
333
+ 都映射到 `PZ_ENV=develop`
334
+
335
+ 其它正式环境:
336
+
337
+ - `pz run test`
338
+ - `pz run product`
339
+
340
+ 常用写法:
341
+
342
+ ```bash
343
+ pz run -d .
344
+ pz run develop -d .
345
+ pz run dev -d .
346
+ pz run test -d .
347
+ pz run product -d .
348
+ ```
349
+
350
+ 硬约束:
351
+
352
+ - 项目启动统一只走 `pz run`
353
+ - 不要再发明 `python main.py`、自制 wrapper、第二套 shell 启动链作为正式入口
354
+
355
+ 运行时细节:
356
+
357
+ - `pz run` 会先判断是否需要 `handoff`
358
+ - 如果项目绑定了 dev runtime/source,会切到项目绑定的 Python + runtime import roots 再执行
359
+ - `app` 模式与 `dev` 模式的前半链路不同,但最后都汇合到统一 `RuntimePlan` / `host.builder` 主链
360
+
361
+ 参考:
362
+
363
+ - [`pz规范与使用/24-pz启动与运行时编译流程.md`](pz规范与使用/24-pz启动与运行时编译流程.md)
364
+ - [`pz规范与使用/09-CLI与Worker入口规范.md`](pz规范与使用/09-CLI与Worker入口规范.md)
365
+
366
+ ## 6. 最小子包骨架
367
+
368
+ ### `pz startapp`
369
+
370
+ 用途:
371
+
372
+ - 在 `apps/<app_id>/` 下创建正式最小子包骨架
373
+ - 默认写入项目 `installed_apps` 并刷新托管 settings;传 `--target-dir` / `-D` 时只生成源码骨架,不改项目声明
374
+
375
+ 常用写法:
376
+
377
+ ```bash
378
+ pz startapp demo -d .
379
+ pz startapp pz_site_crawler -D /path/to/source-root -d .
380
+ ```
381
+
382
+ 边界:
383
+
384
+ - 只负责最小子包骨架,不负责安装发布包,不负责源码绑定
385
+ - 默认写入 `<project-dir>/apps/<app_id>/`;传 `--target-dir` / `-D` 时写入 `<target-dir>/<app_id>/` 且不刷新项目 settings
386
+ - 生成的 app 骨架默认对齐正式最小子包规范:
387
+ - URL 入口固定为 `<app>/urls.py`
388
+ - 页面声明固定为 `<app>/pages/`
389
+ - 页面开发目录遵循 MVC 心智
390
+ - 前端默认只负责展示层,数据交互优先走 AJAX + 后端 API
391
+
392
+ ## 7. 发布包安装链
393
+
394
+ ### `pz app init`
395
+
396
+ 用途:
397
+
398
+ - 从当前项目已有 `apps/.sources` 读取默认包名和内部 PyPI / devpi 安装位置
399
+ - 默认把 `.sources` 中所有正式最小子包加入 `installed_apps`
400
+ - 默认创建或复用项目根 `.venv`
401
+ - 默认把单一基础 distribution `pz-cli` 与已发现正式最小 app 的已发布 distribution 安装进项目 `.venv`
402
+ - 声明完成后刷新托管 settings,把已发现 app 的模板同步进项目根 `pz*.jsonc` / `.env*`
403
+
404
+ 常用写法:
405
+
406
+ ```bash
407
+ pz app init -d .
408
+ pz app init -S -d .
409
+ ```
410
+
411
+ 边界:
412
+
413
+ - 它是生产装配模型下的编排命令;默认复用 `.sources` 包清单发现、项目声明、settings update、`.venv` 准备和 distribution 安装原子语义
414
+ - 默认安装位置来自 `.sources` 中各包最近 source-root 的 `tool.pz.publish.default_target` 与对应 `targets.<target>.check_url`;若默认包清单跨多个内部 PyPI / devpi index,`app init` 会把这些 index 去重后交给同一次安装解析
415
+ - 安装项使用 `.sources` 中各包 `pyproject.toml` 的 distribution 名,具体版本由内部 PyPI / devpi 与项目锁仓策略解析;`app init` 不把源码 checkout 的当前 version 当作生产安装 pin
416
+ - 未显式指定版本时,每个包先解析正式 index 中最新兼容稳定版,再形成一份依赖安全的 exact-version 计划;解析冲突在项目 mutation 前失败
417
+ - 最终 exact pin 写入项目依赖并由 `uv.lock` 固定,不保留浮动 `latest`
418
+ - `--no-sync` / `-S` 同时跳过项目根 `.venv` 准备与 distribution 安装;声明和 settings 刷新仍会完成
419
+ - 它不 clone 或导入源码;需要业务接管源码时使用 `pz dev add`,需要 linked checkout 时使用 `pz dev link` 或 `pz dev init`
420
+ - 它不从源码 editable 安装;安装必须走内部 PyPI / devpi
421
+ - 它不发布 package;发布仍走 `pz pub ...`
422
+ - 它会安装 `pz-cli` distribution,但只把正式最小 app 子包写入 `installed_apps`
423
+ - 它会跳过 `pz-cli` 和没有 `apps.py` 的集合包,避免把非 app distribution 写进运行时声明
424
+ - 它会按 source app 声明的 `requires_apps` 依赖关系写入 `installed_apps`,避免生成运行时无法编译的顺序
425
+
426
+ ### `pz app add`
427
+
428
+ 用途:
429
+
430
+ - 编排版本解析、精确声明、精确安装与 settings 刷新,把正式最小 app 加入项目
431
+
432
+ 常用写法:
433
+
434
+ ```bash
435
+ pz app add pz_demo -d .
436
+ pz app add pz_demo --version 2.4.1 -d .
437
+ ```
438
+
439
+ 边界:
440
+
441
+ - 未传 `--version` 时解析当前正式 index 中最新兼容稳定版
442
+ - `--version` 只接受一个精确 PEP 440 版本
443
+ - 解析出的版本以精确 pin 写入项目依赖并进入 `uv.lock`;不得把 `latest` 持久化
444
+ - 固定编排 `app versions -> app declare -> app install -> settings update`
445
+ - 它安装 distribution,不向 `apps/` 写源码
446
+ - `apps/<app_id>` 已存在业务拥有的真实源码时,`app declare` / `app add` 直接返回 `PZ_APP_SOURCE_OWNERSHIP_CONFLICT`;需要发布包模式时先由业务 Git 工作流移除或迁出该源码
447
+
448
+ ### `pz app rm`
449
+
450
+ 用途:
451
+
452
+ - 从项目声明中移除一个正式最小 app
453
+ - 编排 `app undeclare -> env sync -> settings update`
454
+
455
+ 常用写法:
456
+
457
+ ```bash
458
+ pz app rm pz_demo -d .
459
+ ```
460
+
461
+ 注意:
462
+
463
+ - 如果同名 linked dev source 仍存在,需要再执行 `pz dev unlink <app_id>`;业务仓真实源码由业务 Git 工作流管理
464
+
465
+ ### `pz app update`
466
+
467
+ 用途:
468
+
469
+ - 把已声明 app 更新到最新兼容稳定版,或切换到调用方指定的精确版本
470
+
471
+ 常用写法:
472
+
473
+ ```bash
474
+ pz app update pz_demo -d .
475
+ pz app update pz_demo --version 2.3.0 -d .
476
+ ```
477
+
478
+ 边界:
479
+
480
+ - 未传 `--version` 时解析最新兼容稳定版;当前已是最新时幂等成功
481
+ - `--version` 只接受一个精确 PEP 440 版本
482
+ - 固定编排版本解析、精确声明、精确安装、lock 与 settings 刷新
483
+ - 仍然是发布包更新,不是源码同步
484
+
485
+ ### `pz app versions`
486
+
487
+ 用途:
488
+
489
+ - 只读查看目标 app 在正式 package index 中的现有版本及当前项目版本状态
490
+
491
+ 常用写法:
492
+
493
+ ```bash
494
+ pz app versions pz_demo -d .
495
+ pz app versions pz_demo -j -d .
496
+ ```
497
+
498
+ 输出:
499
+
500
+ - 按 PEP 440 降序排列的可用版本
501
+ - 最新兼容稳定版
502
+ - 当前项目 declared、locked 与 installed 版本
503
+ - prerelease 与 yanked 标记
504
+ - 不修改项目、环境、lock 或远端 index
505
+
506
+ ### `pz app declare` / `pz app undeclare` / `pz app install`
507
+
508
+ 用途:
509
+
510
+ - 提供 app 编排可单独验证和失败续跑的原子能力
511
+
512
+ 常用写法:
513
+
514
+ ```bash
515
+ pz app declare pz_demo --version 2.4.1 -d .
516
+ pz app install pz_demo --version 2.4.1 -d .
517
+ pz app undeclare pz_demo -d .
518
+ ```
519
+
520
+ 规则:
521
+
522
+ - `declare` 只原子维护 exact distribution pin 与 app identity/load-order 声明
523
+ - `declare` 不接管 `apps/<app_id>` 中业务拥有的真实源码;存在同名真实目录时返回 `PZ_APP_SOURCE_OWNERSHIP_CONFLICT`
524
+ - `install` 只安装调用方已经解析出的精确版本,并校验 installed metadata
525
+ - `undeclare` 只移除 project pin 与 app 声明
526
+ - 三者都不选择 latest,不拉取源码,不发布 package
527
+
528
+ ## 8. 业务源码与 linked checkout
529
+
530
+ ### `pz dev add`
531
+
532
+ 用途:
533
+
534
+ - 把一个正式最小子包导入 `apps/<app_id>`,交由业务仓管理
535
+ - 编排 `dev source cache -> dev source import -> settings update -> env sync -> dev ide sync`;非 Git 本地输入跳过 cache
536
+
537
+ 常用写法:
538
+
539
+ ```bash
540
+ pz dev add git@github.com:<org>/<repo>.git -d .
541
+ pz dev add ../catalog/pz_page_center -d .
542
+ pz dev add pz_page_center -d .
543
+ pz dev add pz_page_center --branch feature-preview -d .
544
+ ```
545
+
546
+ 规则:
547
+
548
+ - 输入必须唯一解析到一个正式最小子包;零个或多个候选时直接失败
549
+ - Git 来源默认使用 `develop` 分支;`--branch` 才显式选择其他分支
550
+ - PZ 先检查当前用户隔离的 `<system-temp>/pz/users/<user-key>/git/<repo_key>`:无可用 Git cache 时 staged clone,有匹配 cache 时先 fetch/update,再固定 exact commit
551
+ - cache root、repo lock、checkout 与 `.pz-cache-owner.json` 必须通过当前用户 owner、权限、非符号链接和 canonical remote 校验
552
+ - cache 更新失败直接报错,不静默复制旧 revision;cache 只作可丢弃优化,不是项目源码真相
553
+ - 最终目录固定为 `apps/<app_id>`,不得包含 `.git`、虚拟环境、cache 或构建产物
554
+ - 导入源码由业务仓统一管理;PZ 不自动覆盖、更新或删除
555
+ - 项目 source mode 收敛为 `local`;宿主 `pyproject.toml` 同一事务声明 app dependency 与指向 `apps/<app_id>` 的精确 editable `tool.uv.sources`;任一步失败整体回滚
556
+ - Git provenance 记录无凭据 canonical source、full revision 和 leaf subpath;本地目录 provenance 只记录 `source = "local"`、不可逆 source identity 与 leaf subpath,不泄露绝对路径
557
+ - destination、同名 binding 或其他本地同名 `app_id` 已存在时直接失败
558
+ - 导入先在 `apps/` 同文件系统隐藏目录校验,再原子落位;失败不得留下半成品
559
+ - 项目本地源码与当前环境里的同名 distribution 同时存在时,本地源码优先
560
+
561
+ ### `pz dev link`
562
+
563
+ 用途:
564
+
565
+ - 保留上游 Git checkout,并通过 `apps/` binding 暴露源码用于联调
566
+ - 编排 `dev source link -> settings update -> env sync -> dev ide sync`
567
+
568
+ 常用写法:
569
+
570
+ ```bash
571
+ pz dev link git@github.com:<org>/<repo>.git -d .
572
+ pz dev link ../catalog -d .
573
+ pz dev link pz_page_center -b main -d .
574
+ ```
575
+
576
+ 规则:
577
+
578
+ - Git checkout 固定落在 `apps/.sources/<repo_key>`
579
+ - `apps/.sources/<repo_key>` 可以是指向项目外现存 Git checkout 的共享符号链接;这种 checkout 由外部所有,PZ 只读取,不切分支、不更新目标内容
580
+ - 目录输入在 `apps/<repo_key>` 建立目录 binding;叶子输入在 `apps/<app_id>` 建立叶子 binding
581
+ - 运行时只发现 `apps/` 下的真实本地 app 与可见 binding;物理 `apps/.sources` 不贡献 app
582
+ - 默认基础分支是 `develop`;显式替代值只有 `main`
583
+ - 受管 checkout 的目标分支固定为 manifest 中的 `business_app_id`,不能从命令行任意指定
584
+ - 任意业务仓真实目录或其他 linked binding 已暴露相同 `app_id` 时直接失败;冲突按解析后的 app 身份判断,不按路径名称判断
585
+
586
+ ### `pz dev branch`
587
+
588
+ 用途:
589
+
590
+ - 编排 `dev source branch -> env sync -> dev ide sync`,把已有受管 checkout 切到当前项目的业务分支
591
+
592
+ 常用写法:
593
+
594
+ ```bash
595
+ pz dev branch pz_apps -d .
596
+ pz dev branch pz_apps -b main -d .
597
+ ```
598
+
599
+ 规则:
600
+
601
+ - 只接受已有 repo 或 binding 身份
602
+ - 只作用于 manifest 中的 linked checkout;业务仓拥有的 `apps/<app_id>` 必须拒绝
603
+ - worktree 必须 clean
604
+ - 不执行 stash、commit、merge、rebase、reset 或 push
605
+ - `--base-branch` 只决定业务分支首次创建点,不允许指定任意目标分支
606
+
607
+ ### `pz dev update`
608
+
609
+ 用途:
610
+
611
+ - 编排 `dev source update -> env sync -> dev ide sync`,更新本地 dev checkout
612
+
613
+ 常用写法:
614
+
615
+ ```bash
616
+ pz dev update pz_page_center -d .
617
+ ```
618
+
619
+ 规则:
620
+
621
+ - 只作用于 manifest 中的 linked checkout;业务仓拥有的 `apps/<app_id>` 必须拒绝
622
+ - 只允许在 clean 的业务分支上执行
623
+ - 有 upstream 时只做 fast-forward-only 更新;没有 upstream 时只 fetch 并报告状态
624
+ - 共享 checkout 不执行 update,命令返回 `PZ_DEV_SHARED_CHECKOUT_READ_ONLY`;共享仓库应在其真实目录中独立更新
625
+
626
+ ### `pz dev unlink`
627
+
628
+ 用途:
629
+
630
+ - 移除精确的本地 source binding 和对应符号链接
631
+ - 编排 `dev source unlink -> settings update -> env sync -> dev ide sync`
632
+
633
+ 常用写法:
634
+
635
+ ```bash
636
+ pz dev unlink pz_page_center -d .
637
+ pz dev unlink pz_page_center -X -d .
638
+ ```
639
+
640
+ 规则:
641
+
642
+ - 默认保留任何 checkout;只有显式 `--delete-checkout` 才进入删除检查
643
+ - 只有最后一个 binding、worktree clean、upstream 可验证且没有未推送提交时,`--delete-checkout` 才允许删除 checkout
644
+ - checkout 条目若为共享符号链接,`--delete-checkout` 最多只解除项目内链接,绝不跟随删除外部目标
645
+ - 不删除 `pz dev add` 导入的业务仓真实目录
646
+
647
+ ### `pz dev source ...`
648
+
649
+ 用途:
650
+
651
+ - 提供 Git cache、源码导入、binding、分支、更新与解除 binding 的原子能力
652
+ - 供 `pz dev add/link/branch/update/unlink` 编排、失败续跑和自动化测试复用
653
+
654
+ 规则:
655
+
656
+ - `source cache` 只拥有当前用户隔离的 `<system-temp>/pz/users/<user-key>/git/<repo_key>` 的 clone/update、owner marker、remote identity、branch 与 exact commit 解析;默认分支是 `develop`
657
+ - `source cache` 返回 canonical `repo_key`、exact full commit 与不可变 resolution ref;失败续跑以 `--revision <full-commit>` 验证已有 ref,cache/ref 丢失时明确失败,不把任意 Git object 提升为可信 handoff
658
+ - Git 模式 `source import` 必须显式接收 `--repo-key <repo_key> --revision <full-commit>`,并在同一 repo lock 下验证 resolution ref;不得读取 branch、`HEAD` 或 cache 最新状态
659
+ - `source import` 只从已验证的 cache-pinned commit 或非 Git 本地目录复制业务源码,并原子拥有 app 目录、source-mode、provenance 与宿主 dependency/`tool.uv.sources` 事务;不执行网络更新
660
+ - `source link` / `source unlink` 只拥有 checkout、manifest 与 binding 事务
661
+ - `source branch` / `source update` 只拥有 linked checkout Git 事务
662
+ - 不刷新 settings、环境或 IDE 投影
663
+ - cache 命中必须先更新;损坏、remote 不匹配、符号链接重定向或无法证明 PZ 所有权的 temp entry 不得被信任或递归删除
664
+
665
+ ### `pz dev ide sync`
666
+
667
+ 用途:
668
+
669
+ - 原子刷新 PZ 管理的 IDE 影子投影,确保 PyCharm 与 VS Code 精确索引所有可见最小子包
670
+
671
+ 规则:
672
+
673
+ - 只编译一次可见最小子包投影,再分别交给 PyCharm 与 VS Code provider;不新增 IDE 专用命令
674
+ - `.idea/` 存在时维护 `.idea/pz.generated.sources.iml` 与 `modules.xml` 中唯一 PZ module entry
675
+ - `.vscode/` 存在时使用 JSONC 结构化维护 `settings.json` 中 PZ 插入的 `python.analysis.extraPaths`,并用 `pz.generated.sources.json` 记录 PZ-owned entries
676
+ - PyCharm linked 源码登记 canonical 精确叶子根;VS Code 使用 `${workspaceFolder}/apps/<visible-leaf-path>`,两者都不得登记整个 `.sources` checkout
677
+ - 只生成 IDE metadata,不复制源码,不参与运行时、打包、资源覆盖或发布
678
+ - 对应 `.idea/` / `.vscode/` 不存在时,该 provider 返回 `not_applicable`,PZ 不主动创建 IDE 项目配置目录
679
+ - 使用结构化 XML / JSONC 更新并保留全部用户内容;VS Code 只删除状态账本记录的旧 PZ entries
680
+ - provider 失败时保留或恢复上一份有效投影;中断的 VS Code 双文件更新通过事务 journal 续跑
681
+
682
+ ## 9. 发布链
683
+
684
+ ### `pz pub`
685
+
686
+ 用途:
687
+
688
+ - 编排目标子包的精确 Git commit、package tag、构建与发布
689
+
690
+ 常用写法:
691
+
692
+ ```bash
693
+ pz pub pz_demo -t devpi_dev -d .
694
+ pz pub pz_demo -t devpi_dev -n -d .
695
+ ```
696
+
697
+ 规则:
698
+
699
+ - 固定按 `pub commit -> pub tag -> pub upload` 执行
700
+ - 若 `project_dir` 本身是 Git root 且根 `pyproject.toml` 的 distribution 精确匹配目标,直接以仓库根作为发布源和整仓 release scope;否则再枚举 `apps/.sources` 并复用既有 workspace 子包发现程序
701
+ - 非根发布目标必须在 `.sources` Git 仓库中唯一命中;没有可用 Git、未找到子包、多个仓库重复命中分别报错,不回退发布业务复制目录
702
+ - 唯一命中外部共享只读 checkout 时,`pub commit/tag/upload` 返回 `PZ_PUB_SHARED_CHECKOUT_READ_ONLY`;`pub rm` 只操作索引,不受 source gate 约束
703
+ - commit 前先检查目标 index 的 distribution/version;远端已存在但本地没有精确匹配 release state 时直接失败
704
+ - 发布前必须已有明确 `project.version`;`pub` 不自动选择或升级版本号
705
+ - 根 distribution 显式提交 `.` 整仓 scope;嵌套最小子包只提交目标 package path,不提交同仓其他子包改动
706
+ - tag 固定为 `<distribution-name>@<version>`,例如 `pz-auth@5.0.1`
707
+ - 创建本地 commit 与 annotated tag,但不执行 `git push`
708
+ - 后续阶段失败时保留已经完成的 commit/tag;重跑复用精确匹配状态并继续
709
+ - `pub upload` 只从当前干净 checkout 直接构建,要求 HEAD 精确等于 package tag commit;不创建临时 Git worktree
710
+ - `--dry-run` 完成范围、版本、tag、build、publish lock 与目标规划,但不修改 Git 或远端
711
+
712
+ ### `pz pub commit`
713
+
714
+ 用途:
715
+
716
+ - 原子地提交目标最小子包当前可发布源码
717
+
718
+ 常用写法:
719
+
720
+ ```bash
721
+ pz pub commit pz_demo -d .
722
+ ```
723
+
724
+ 规则:
725
+
726
+ - Git index 必须没有预先 staged 的内容
727
+ - 只按目标 package path 执行 deletion-aware stage 与 commit
728
+ - 根 distribution 的目标 path 固定为显式 `.`,整仓属于同一个 release scope
729
+ - 其他已识别最小子包中的 unstaged 修改允许保留且不得进入 commit
730
+ - 不属于任何最小子包的未提交共享根文件属于歧义变更,阻止单包发布
731
+ - commit subject 固定为 `release(<app_id>): <version>`
732
+ - 不执行 stash、reset、clean、amend、rebase 或 push
733
+
734
+ ### `pz pub tag`
735
+
736
+ 用途:
737
+
738
+ - 为当前目标子包 release commit 创建 annotated package tag
739
+
740
+ 常用写法:
741
+
742
+ ```bash
743
+ pz pub tag pz_demo -d .
744
+ ```
745
+
746
+ 规则:
747
+
748
+ - tag 不存在时,在 `pub commit` 返回的精确 release commit 上创建;首次路径通常是 HEAD,失败重试时允许是当前分支可到达的历史 commit
749
+ - annotation 固定为 `release(<app_id>): <distribution-name> <version>`
750
+ - tag 已存在、annotation 与 release commit 精确匹配且该 commit 可从当前分支到达时幂等复用,即使 HEAD 已前进
751
+ - tag 指向其他 commit 或 metadata 不匹配时直接失败,不移动或删除 tag
752
+
753
+ ### `pz pub upload`
754
+
755
+ 用途:
756
+
757
+ - 原子执行目标子包的 build 与 package-index upload
758
+
759
+ 常用写法:
760
+
761
+ ```bash
762
+ pz pub upload pz_demo -t devpi_dev -d .
763
+ pz pub upload pz_demo -t devpi_dev -n -d .
764
+ pz pub upload pz_demo --version 1.2.3 -t devpi_dev -d .
765
+ ```
766
+
767
+ 规则:
768
+
769
+ - package tag 必须精确指向当前 HEAD release commit
770
+ - 当前 index 与 worktree 必须 clean;`--version` 必须与当前 `project.version` 一致
771
+ - 必须从当前 package root 直接构建,不创建临时 worktree 或源码副本
772
+ - 当前 `project.version`、tag 与 wheel metadata 必须一致
773
+ - clean-environment wheel install/import smoke 必须在远端 upload 前通过
774
+ - 继续复用 publish lock、目标配置、凭据和凭据脱敏合同
775
+ - 不执行 commit、tag、push 或源码修改
776
+ - 远端同版本只有在 artifact identity 与 hash 一致时才作为幂等成功,否则冲突
777
+
778
+ ### `pz pub rm`
779
+
780
+ 用途:
781
+
782
+ - 从发布目标移除一个版本化包的已发布产物
783
+ - 只解析 distribution 与 publish target,不要求 `apps/.sources` 存在 Git 仓库
784
+
785
+ 常用写法:
786
+
787
+ ```bash
788
+ pz pub rm pz_demo -t devpi_pub -d .
789
+ pz pub rm pz_demo -t devpi_pub -f -d .
790
+ ```
791
+
792
+ ### `pz pub batch`
793
+
794
+ 用途:
795
+
796
+ - 按你显式给出的顺序发布多个包
797
+
798
+ 常用写法:
799
+
800
+ ```bash
801
+ pz pub batch pz catalog -t devpi_dev -d .
802
+ ```
803
+
804
+ 边界:
805
+
806
+ - 不会替你猜依赖顺序
807
+ - 对每个 app 顺序执行完整 `pub commit -> pub tag -> pub upload`
808
+ - 每个 app 生成独立 release commit 与 package tag
809
+ - 任一 app 失败即停止;重跑时复用精确匹配的已完成阶段
810
+
811
+ ## 10. 运行时工具
812
+
813
+ ### `pz list`
814
+
815
+ 用途:
816
+
817
+ - 展示已发现 app 与当前 runtime 状态
818
+
819
+ 常用写法:
820
+
821
+ ```bash
822
+ pz list -d .
823
+ pz list -j -d .
824
+ ```
825
+
826
+ ### `pz check`
827
+
828
+ 用途:
829
+
830
+ - 运行项目与 runtime 检查
831
+
832
+ 常用写法:
833
+
834
+ ```bash
835
+ pz check -d .
836
+ pz check -j -d .
837
+ ```
838
+
839
+ 边界:
840
+
841
+ - 它是系统检查唯一正式入口
842
+
843
+ ### `pz db makemigrations`
844
+
845
+ 用途:
846
+
847
+ - 通过正式 runtime context 生成迁移
848
+
849
+ ### `pz db migrate`
850
+
851
+ 用途:
852
+
853
+ - 通过正式 runtime context 执行迁移
854
+
855
+ ### `pz db showmigrations`
856
+
857
+ 用途:
858
+
859
+ - 查看迁移状态
860
+
861
+ 常用写法:
862
+
863
+ ```bash
864
+ pz db makemigrations -d .
865
+ pz db migrate -d .
866
+ pz db showmigrations -d .
867
+ ```
868
+
869
+ 边界:
870
+
871
+ - `db` CLI 只能消费正式 app registry、正式迁移 owner 规则和当前 `RuntimePlan`
872
+
873
+ ### `pz resources images`
874
+
875
+ 用途:
876
+
877
+ - 通过正式资源编译链生成响应式图片派生产物
878
+
879
+ 常用写法:
880
+
881
+ ```bash
882
+ pz resources images -d .
883
+ pz resources images --force -d .
884
+ ```
885
+
886
+ 其中 `--force` 会绕过资源构建缓存并覆盖已有同名图片派生产物;同时,`pz_foundation.resources.images.force=true` 时,`pz resources images` 默认等价启用 `--force`。
887
+ 只有 CLI 未传 `--force` 且配置 force 为 false 时,才沿用资源构建缓存与图片派生的“已有同名产物则跳过”语义。
888
+
889
+ 边界:
890
+
891
+ - 图片派生属于 `pz_foundation.resources` 通用资源能力,不挂在某个站点子包的 app CLI 下。
892
+ - 图片派生输出只进入合并后的 runtime/cache static 产物,不写回业务包源码目录。
893
+
894
+ ### `pz workers`
895
+
896
+ 用途:
897
+
898
+ - 管理当前项目的 managed worker。
899
+
900
+ 常用写法:
901
+
902
+ ```bash
903
+ pz workers --project-dir . list
904
+ pz workers --project-dir . status --json
905
+ pz workers --project-dir . stop
906
+ pz workers --project-dir . restart
907
+ pz workers --project-dir . restart mission_carrier.task_center_worker
908
+ pz workers --project-dir . restart --start-timeout 90
909
+ ```
910
+
911
+ 选择规则:
912
+
913
+ - 不传 `name` 且不传 `--all` 时,只作用于当前 RuntimePlan 中 `auto_start=true` 的 worker。
914
+ - `name` 可匹配 worker 稳定名称、extension id,或 `<app_id>.<tool_name>`。
915
+ - `--all` 只在未显式传入 `name` 时扩展目标集合,包含非自动启动 worker role。
916
+
917
+ 常用参数:
918
+
919
+ | 参数 | 适用命令 | 说明 |
920
+ | --- | --- | --- |
921
+ | `--project-dir <path>` | 全部 | 指定包含 `pz.jsonc` 的项目根;默认从当前目录发现项目。 |
922
+ | `--json` | `list/status/stop/restart` | 输出机器可读 JSON。 |
923
+ | `--all` | `list/status/run/stop/restart` | 未传 `name` 时包含非自动启动 worker。 |
924
+ | `--timeout <seconds>` | `stop/restart` | 停止旧 worker / supervisor 的等待窗口。 |
925
+ | `--start-timeout <seconds>` | `restart` | detached supervisor 启动后等待状态刷新的窗口。 |
926
+ | `--poll-interval <seconds>` | `run/restart` | supervisor reconcile loop 间隔。 |
927
+ | `--owner-pid <pid>` | `run/restart` | 绑定宿主 PID;宿主退出后 detached supervisor 可收口。 |
928
+ | `--detach` | `run` | 后台拉起 detached supervisor 并立即返回。 |
929
+ | `--force-restart` / `--no-force-restart` | `run --detach` | 本次命令显式覆盖 `pz_foundation.managed_workers.force_restart_on_host_start`。 |
930
+
931
+ 边界:
932
+
933
+ - `workers` 由 `pz_foundation` 通过正式 root CLI provider 暴露。
934
+ - `list/status/stop/restart/run` 的实现集中在 `pz_foundation.cli.workers`,底层进程状态与 stop 语义集中在 `pz_foundation.managed_workers`。
935
+ - `run` 是 supervisor 底层入口;人工运维优先使用 `restart`、`stop`、`status`。
936
+ - `restart --start-timeout` 只控制命令等待新 supervisor 状态刷新的时间,不改变 worker 目标集合。
937
+ - `pz pz_foundation workers ...` 是同一实现的 app CLI 入口。
938
+
939
+ ### `pz <app_id> <tool>`
940
+
941
+ 用途:
942
+
943
+ - 调用某个 app 暴露出来的 CLI 工具
944
+
945
+ 常用写法:
946
+
947
+ ```bash
948
+ pz <app_id> <tool> -d .
949
+ ```
950
+
951
+ 边界:
952
+
953
+ - app CLI 的正式调用路径就是这一条
954
+
955
+ ## 11. 最常用命令组合
956
+
957
+ 新开发项目:
958
+
959
+ ```bash
960
+ pz dev init -d .
961
+ pz run -d .
962
+ ```
963
+
964
+ 新增业务仓源码:
965
+
966
+ ```bash
967
+ pz dev add git@github.com:<org>/<repo>.git -d .
968
+ pz run -d .
969
+ ```
970
+
971
+ 新增 linked 源码联调:
972
+
973
+ ```bash
974
+ pz dev link git@github.com:<org>/<repo>.git -d .
975
+ pz settings update -d .
976
+ pz run -d .
977
+ ```
978
+
979
+ 新增已发布 app:
980
+
981
+ ```bash
982
+ pz app add pz_demo -d .
983
+ pz settings update -d .
984
+ pz run -d .
985
+ ```
986
+
987
+ 只刷新 `AGENTS.md`:
988
+
989
+ ```bash
990
+ pz settings refresh-agents -d .
991
+ ```
992
+
993
+ 发布前检查:
994
+
995
+ ```bash
996
+ pz env doctor -d .
997
+ pz check -d .
998
+ ```
999
+
1000
+ ## 12. 命令边界速记
1001
+
1002
+ - 要启动项目:`pz run`
1003
+ - 要更新项目配置:`pz settings update`
1004
+ - 要刷新 `AGENTS.md`:`pz settings refresh-agents`
1005
+ - 要新建开发项目:`pz dev init`
1006
+ - 要装发布包:`pz app add`
1007
+ - 要把源码交给业务仓管理:`pz dev add`
1008
+ - 要绑定上游 checkout 联调:`pz dev link`
1009
+ - 要发包:`pz pub`
1010
+ - 要做系统检查:`pz check`
1011
+ - 要做迁移:`pz db ...`