rpr-cli 0.1.7__tar.gz → 0.1.20__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/PKG-INFO +1 -1
  2. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/Sample-dot-github/instructions/frontend.instructions.md +1 -0
  3. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/Sample-dot-github/instructions/setup-guide.instructions.md +4 -0
  4. rpr_cli-0.1.20/src/rpr/__init__.py +1 -0
  5. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/commands/generate/storybook.py +8 -4
  6. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/commands/generate/ui.py +6 -3
  7. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/commands/init.py +2 -2
  8. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/dependencies.py +28 -2
  9. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/dependency_manifest_data.py +96 -91
  10. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/manifest_refresh.py +37 -9
  11. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/scaffolds/instructions/frontend.instructions.md +1 -0
  12. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/scaffolds/instructions/setup-guide.instructions.md +4 -0
  13. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/workspace.py +28 -3
  14. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_check.py +1 -1
  15. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_generate_storybook.py +8 -4
  16. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_generate_ui.py +100 -8
  17. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_init.py +1 -8
  18. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_refresh.py +10 -11
  19. rpr_cli-0.1.7/src/rpr/__init__.py +0 -1
  20. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/.github/agents/story.agent.md +0 -0
  21. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/.github/workflows/publish-pypi.yml +0 -0
  22. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/.gitignore +0 -0
  23. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/CLAUDE.md +0 -0
  24. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/GEMINI.md +0 -0
  25. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/LICENSE +0 -0
  26. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/README.md +0 -0
  27. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/Sample-dot-github/instructions/all.instructions.md +0 -0
  28. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/Sample-dot-github/instructions/api.instructions.md +0 -0
  29. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/Sample-dot-github/instructions/domain.instructions.md +0 -0
  30. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/Sample-dot-github/instructions/rust-engine.instructions.md +0 -0
  31. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/Sample-dot-github/instructions/tooling-setup.instructions.md +0 -0
  32. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/Sample-dot-github/instructions/tooling.instructions.md +0 -0
  33. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/Sample-dot-github/scaffolds/README.md +0 -0
  34. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/Sample-dot-github/scaffolds/api/main.py +0 -0
  35. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/Sample-dot-github/scaffolds/domain/base-repo.md +0 -0
  36. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/Sample-dot-github/scaffolds/domain/base_entity.md +0 -0
  37. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/Sample-dot-github/scaffolds/frontend/api.service.ts +0 -0
  38. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/Sample-dot-github/scaffolds/frontend/useStateNavigation.ts +0 -0
  39. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/changelogs/mui_v9.txt +0 -0
  40. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/code-map.md +0 -0
  41. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/nx_uv_setup.md +0 -0
  42. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/patch_output.py +0 -0
  43. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/pyproject.toml +0 -0
  44. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/rpr-parser/Cargo.lock +0 -0
  45. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/rpr-parser/Cargo.toml +0 -0
  46. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/rpr-parser/pyproject.toml +0 -0
  47. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/rpr-parser/rpr_parser.pyi +0 -0
  48. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/rpr-parser/src/config/container.rs +0 -0
  49. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/rpr-parser/src/config/mod.rs +0 -0
  50. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/rpr-parser/src/config/settings.rs +0 -0
  51. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/rpr-parser/src/graph.rs +0 -0
  52. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/rpr-parser/src/lib.rs +0 -0
  53. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/rpr-parser/src/models/dtos/mod.rs +0 -0
  54. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/rpr-parser/src/models/entities/mod.rs +0 -0
  55. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/rpr-parser/src/models/entities/users.rs +0 -0
  56. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/rpr-parser/src/models/mod.rs +0 -0
  57. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/rpr-parser/src/parse.rs +0 -0
  58. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/rpr-parser/src/repos/base.rs +0 -0
  59. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/rpr-parser/src/repos/mod.rs +0 -0
  60. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/rpr-parser/src/repos/users.rs +0 -0
  61. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/rpr-parser/src/resolve.rs +0 -0
  62. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/rpr-parser/src/walker.rs +0 -0
  63. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/rpr-parser/uv.lock +0 -0
  64. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/special_files.md +0 -0
  65. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/agent/__init__.py +0 -0
  66. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/agent/approval.py +0 -0
  67. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/agent/bootstrap.py +0 -0
  68. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/agent/client.py +0 -0
  69. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/agent/control.py +0 -0
  70. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/agent/mock.py +0 -0
  71. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/agent/runtime.py +0 -0
  72. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/agent/session.py +0 -0
  73. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/agent/tools/__init__.py +0 -0
  74. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/agent/tools/base.py +0 -0
  75. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/agent/tools/mutating.py +0 -0
  76. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/agent/tools/readonly.py +0 -0
  77. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/agent/tools/registry.py +0 -0
  78. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/application/__init__.py +0 -0
  79. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/application/catalog.py +0 -0
  80. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/application/chat_service.py +0 -0
  81. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/application/checks.py +0 -0
  82. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/application/cli_adapter.py +0 -0
  83. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/application/completer.py +0 -0
  84. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/application/conversation_service.py +0 -0
  85. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/application/prompt_service.py +0 -0
  86. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/application/selector.py +0 -0
  87. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/application/shell.py +0 -0
  88. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/checks/__init__.py +0 -0
  89. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/checks/base.py +0 -0
  90. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/checks/instructions.py +0 -0
  91. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/checks/packages.py +0 -0
  92. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/checks/workspace.py +0 -0
  93. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/cli.py +0 -0
  94. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/commands/__init__.py +0 -0
  95. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/commands/add.py +0 -0
  96. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/commands/chat.py +0 -0
  97. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/commands/check.py +0 -0
  98. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/commands/generate/__init__.py +0 -0
  99. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/commands/generate/api.py +0 -0
  100. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/commands/generate/domain.py +0 -0
  101. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/commands/generate/engine.py +0 -0
  102. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/commands/map.py +0 -0
  103. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/commands/refresh.py +0 -0
  104. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/commands/settings.py +0 -0
  105. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/commands/sync.py +0 -0
  106. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/context.py +0 -0
  107. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/generators/__init__.py +0 -0
  108. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/generators/base.py +0 -0
  109. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/generators/claude.py +0 -0
  110. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/generators/copilot.py +0 -0
  111. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/generators/cursor.py +0 -0
  112. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/generators/gemini.py +0 -0
  113. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/map/__init__.py +0 -0
  114. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/map/architecture.py +0 -0
  115. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/map/chains.py +0 -0
  116. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/map/classifier.py +0 -0
  117. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/map/coverage.py +0 -0
  118. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/map/dependencies.py +0 -0
  119. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/map/extractor.py +0 -0
  120. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/map/graph.py +0 -0
  121. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/map/output.py +0 -0
  122. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/map/responsibility.py +0 -0
  123. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/map/topology.py +0 -0
  124. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/map/walker.py +0 -0
  125. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/scaffolds/domain/base_entity.md +0 -0
  126. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/scaffolds/domain/base_repo.md +0 -0
  127. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/scaffolds/domain/container.md +0 -0
  128. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/scaffolds/domain/settings.md +0 -0
  129. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/scaffolds/instructions/all.instructions.md +0 -0
  130. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/scaffolds/instructions/api.instructions.md +0 -0
  131. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/scaffolds/instructions/domain.instructions.md +0 -0
  132. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/scaffolds/instructions/rust-engine.instructions.md +0 -0
  133. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/scaffolds/instructions/tooling-setup.instructions.md +0 -0
  134. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/scaffolds/instructions/tooling.instructions.md +0 -0
  135. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/scaffolds/js_special_files/fetch.service.md +0 -0
  136. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/scaffolds/js_special_files/sticky-navigation.md +0 -0
  137. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/scaffolds/special_files/domain_container.md +0 -0
  138. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/scaffolds/special_files/domain_settings.md +0 -0
  139. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/scaffolds/special_files/dto_util.md +0 -0
  140. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/scaffolds/special_files/encrypted_column.md +0 -0
  141. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/scaffolds/special_files/mapper_util.md +0 -0
  142. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/scaffolds/special_files/partial_update.md +0 -0
  143. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/templates/__init__.py +0 -0
  144. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/templates/registry.py +0 -0
  145. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/ui/__init__.py +0 -0
  146. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/ui/console.py +0 -0
  147. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/ui/markdown.py +0 -0
  148. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/ui/prompt_session.py +0 -0
  149. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/ui/renderers.py +0 -0
  150. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/src/rpr/ui/theme.py +0 -0
  151. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/README.md +0 -0
  152. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/00-bootstrap-cli.md +0 -0
  153. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/01-rpr-init.md +0 -0
  154. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/02-rpr-generate-domain.md +0 -0
  155. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/03-rpr-generate-api.md +0 -0
  156. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/04-rpr-generate-ui.md +0 -0
  157. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/05-rpr-generate-engine.md +0 -0
  158. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/06-rpr-generate-storybook.md +0 -0
  159. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/07-rpr-sync-rules.md +0 -0
  160. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/08-rpr-add-template.md +0 -0
  161. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/09-rpr-check.md +0 -0
  162. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/10-rpr-domain-config.md +0 -0
  163. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/chat/18-rpr-terminal-ui-foundation.md +0 -0
  164. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/chat/19-rpr-markdown-rendering.md +0 -0
  165. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/chat/20-rpr-chat-repl.md +0 -0
  166. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/chat/21-rpr-agent-tool-loop.md +0 -0
  167. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/chat/22-rpr-chat-tui.md +0 -0
  168. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/chat/23-rpr-chat-unified-command-shell.md +0 -0
  169. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/chat/24-rpr-async-chat-runtime-and-services.md +0 -0
  170. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/chat/25-rpr-prompt-service-and-conversation-lifecycle.md +0 -0
  171. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/chat/26-rpr-shared-command-catalog.md +0 -0
  172. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/chat/27-rpr-slash-command-selection-panel.md +0 -0
  173. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/chat/28-rpr-chat-cancellable-and-multiline-input.md +0 -0
  174. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/chat/29-rpr-file-context-selection.md +0 -0
  175. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/map/11-rpr-map-command.md +0 -0
  176. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/map/12-rpr-map-file-walker.md +0 -0
  177. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/map/13-rpr-map-rust-engine.md +0 -0
  178. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/map/13a-rpr-map-gitignore.md +0 -0
  179. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/map/14-rpr-map-graph-builder.md +0 -0
  180. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/map/15-rpr-map-analysis-bridge.md +0 -0
  181. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/map/16-rpr-map-layer-classifier.md +0 -0
  182. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/map/17-rpr-map-output.md +0 -0
  183. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/map/17a-rpr-map-directory-topology.md +0 -0
  184. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/map/17b-rpr-map-architecture-assessment.md +0 -0
  185. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/map/17c-rpr-map-representative-chains.md +0 -0
  186. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/completed/map/17d-rpr-map-multi-resolution-output.md +0 -0
  187. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/map/30-rpr-map-directory-view-and-cycle-detection.md +0 -0
  188. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/map/31-rpr-map-coupling-hotspots-and-verdict-reasoning.md +0 -0
  189. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/stories/map/32-rpr-map-dependencies-responsibilities-and-test-coverage.md +0 -0
  190. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/__init__.py +0 -0
  191. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_add.py +0 -0
  192. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_architecture.py +0 -0
  193. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_architecture_unwrapped.py +0 -0
  194. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_catalog.py +0 -0
  195. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_chat.py +0 -0
  196. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_chat_service.py +0 -0
  197. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_completer.py +0 -0
  198. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_context.py +0 -0
  199. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_generate_api.py +0 -0
  200. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_generate_domain.py +0 -0
  201. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_generate_engine.py +0 -0
  202. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_map.py +0 -0
  203. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_map_chains.py +0 -0
  204. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_map_classifier.py +0 -0
  205. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_map_coverage.py +0 -0
  206. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_map_dependencies.py +0 -0
  207. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_map_extractor.py +0 -0
  208. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_map_graph.py +0 -0
  209. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_map_output.py +0 -0
  210. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_map_responsibility.py +0 -0
  211. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_map_topology.py +0 -0
  212. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_map_walker.py +0 -0
  213. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_packaging.py +0 -0
  214. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_prompt_session.py +0 -0
  215. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_rpr_parser_stub.py +0 -0
  216. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_selector.py +0 -0
  217. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_settings.py +0 -0
  218. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_sync.py +0 -0
  219. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/tests/test_ui.py +0 -0
  220. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/update_output.py +0 -0
  221. {rpr_cli-0.1.7 → rpr_cli-0.1.20}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rpr-cli
3
- Version: 0.1.7
3
+ Version: 0.1.20
4
4
  Summary: RPR CLI -- React Python Rust monorepo scaffolding orchestrator
5
5
  License-Expression: MIT
6
6
  License-File: LICENSE
@@ -11,6 +11,7 @@ Use React for UI composition, TanStack Query for server-state workflows, TanStac
11
11
 
12
12
  - Use functional components.
13
13
  - Extract reusable behavior into hooks instead of duplicating component logic.
14
+ - Import the generated shared UI package through the app-scoped package name `@{name}/ui`, such as `@testapp/ui`, not `@repo/{name}-ui`.
14
15
  - Prefer a shared base API service at `src/services/base/api.service.ts` when the UI package needs centralized fetch behavior.
15
16
  - Prefer a shared `useStateNavigation` hook at `src/hooks/useStateNavigation.ts` when UI state should persist in the URL.
16
17
  - Reuse existing components, hooks, and service patterns before introducing a new abstraction.
@@ -45,6 +45,9 @@ Use this guidance when validating or changing the monorepo setup against the RPR
45
45
  - Generate React app and library projects in a way that preserves the expected Nx command surface.
46
46
  - The web app should expose at least `serve`, `build`, `lint`, `test`, and `typecheck` when those capabilities exist in the generated project.
47
47
  - The UI library should expose at least `build`, `lint`, `test`, and `typecheck`.
48
+ - Use app-scoped Node package names: `packages/node/{name}-ui` publishes as `@{name}/ui`, `apps/{name}-web` publishes as `@{name}/web`, and Storybook publishes as `@{name}/sb`.
49
+ - Import the shared UI package through `@{name}/ui`, for example `import { AppThemeProvider } from "@testapp/ui"` for a `TestApp` workspace.
50
+ - Link local Node workspace packages with relative `file:` dependency specs instead of `workspace:*`, because npm must be able to install the generated workspace without unsupported protocol errors.
48
51
  - Keep Storybook as a dedicated host project at `packages/node/sb`; do not silently repurpose the UI library as the Storybook project.
49
52
 
50
53
  ## Python Expectations
@@ -81,6 +84,7 @@ npx nx run domain:migrate -- downgrade -1
81
84
  - Project roots and import package names follow the kebab-case and snake_case rules.
82
85
  - Python projects have both `src/` and `tests/`.
83
86
  - The domain import package remains `src/{name_underscore}_domain`.
87
+ - Node imports use app-scoped package names such as `@{name}/ui`, not stale `@repo/*` aliases.
84
88
  - Storybook remains hosted in `packages/node/sb`.
85
89
  - Workspace members and workspace dependency sources are complete.
86
90
  - Generated instructions, checks, and scaffolds refer to the current contract rather than stale paths.
@@ -0,0 +1 @@
1
+ __version__ = "0.1.20"
@@ -12,7 +12,9 @@ from rpr.context import RunContext
12
12
  from rpr.dependencies import (
13
13
  ROOT_STORYBOOK_DEV_DEPENDENCIES,
14
14
  STORYBOOK_DEV_DEPENDENCIES,
15
+ storybook_host_package_name,
15
16
  storybook_package_dependencies,
17
+ ui_package_name,
16
18
  )
17
19
  from rpr.workspace import ensure_npm_workspaces, write_package_json
18
20
 
@@ -185,7 +187,7 @@ def _write_sb_package_json(ctx: RunContext, sb_root: Path, ui_pkg: str) -> None:
185
187
  ctx,
186
188
  sb_root / "package.json",
187
189
  defaults={
188
- "name": "@repo/sb",
190
+ "name": storybook_host_package_name(ui_pkg),
189
191
  "version": "0.1.0",
190
192
  "private": True,
191
193
  "type": "module",
@@ -306,7 +308,8 @@ ReactDOM.createRoot(document.getElementById("root")!).render(
306
308
 
307
309
 
308
310
  def _write_sb_app(ctx: RunContext, src_root: Path, ui_pkg: str) -> None:
309
- content = f"""import {{ uiPackageName }} from "@repo/{ui_pkg}";
311
+ ui_import_name = ui_package_name(ui_pkg)
312
+ content = f"""import {{ uiPackageName }} from "{ui_import_name}";
310
313
 
311
314
  export const storybookHostTitle = "Storybook Host";
312
315
 
@@ -368,7 +371,8 @@ export default config;
368
371
 
369
372
 
370
373
  def _write_sb_preview(ctx: RunContext, path: Path, ui_pkg: str) -> None:
371
- content = """import { appTheme } from "@repo/__UI_PKG__";
374
+ ui_import_name = ui_package_name(ui_pkg)
375
+ content = """import { appTheme } from "__UI_IMPORT__";
372
376
  import { CssBaseline, ThemeProvider } from "@mui/material";
373
377
  import type { Preview } from "@storybook/react";
374
378
  import { Fragment, createElement } from "react";
@@ -398,7 +402,7 @@ const preview: Preview = {
398
402
  };
399
403
 
400
404
  export default preview;
401
- """.replace("__UI_PKG__", ui_pkg)
405
+ """.replace("__UI_IMPORT__", ui_import_name)
402
406
  ctx.write_file(path, content)
403
407
 
404
408
 
@@ -13,7 +13,9 @@ from rpr.dependencies import (
13
13
  UI_LIBRARY_DEPENDENCIES,
14
14
  UI_LIBRARY_DEV_DEPENDENCIES,
15
15
  WEB_APP_DEV_DEPENDENCIES,
16
+ ui_package_name,
16
17
  web_app_dependencies,
18
+ web_package_name,
17
19
  )
18
20
  from rpr.workspace import ensure_npm_workspaces, write_package_json
19
21
 
@@ -140,7 +142,7 @@ def _write_ui_package_json(ctx: RunContext, lib_root: Path, ui_pkg_name: str) ->
140
142
  ctx,
141
143
  lib_root / "package.json",
142
144
  defaults={
143
- "name": f"@repo/{ui_pkg_name}",
145
+ "name": ui_package_name(ui_pkg_name),
144
146
  "version": "0.1.0",
145
147
  "private": True,
146
148
  "main": "src/index.ts",
@@ -259,7 +261,7 @@ def _write_app_package_json(
259
261
  ctx,
260
262
  app_root / "package.json",
261
263
  defaults={
262
- "name": f"@repo/{app_name}",
264
+ "name": web_package_name(app_name),
263
265
  "version": "0.1.0",
264
266
  "private": True,
265
267
  "type": "module",
@@ -370,7 +372,8 @@ ReactDOM.createRoot(document.getElementById("root")!).render(
370
372
 
371
373
  def _write_app_tsx(ctx: RunContext, src: Path, app_name: str, ui_pkg_name: str) -> None:
372
374
  title = app_name.replace("-", " ").title()
373
- content = f"""import {{ AppThemeProvider, uiPackageName }} from "@repo/{ui_pkg_name}";
375
+ ui_import_name = ui_package_name(ui_pkg_name)
376
+ content = f"""import {{ AppThemeProvider, uiPackageName }} from "{ui_import_name}";
374
377
 
375
378
  export const appTitle = "{title}";
376
379
 
@@ -13,7 +13,7 @@ from rich.console import Console
13
13
 
14
14
  from rpr.cli import app
15
15
  from rpr.context import RunContext
16
- from rpr.dependencies import ROOT_NODE_DEV_DEPENDENCIES
16
+ from rpr.dependencies import ROOT_NODE_DEV_DEPENDENCIES, npm_package_name
17
17
  from rpr.generators.base import SyncConfig, load_rules
18
18
  from rpr.generators.claude import generate_claude_rules
19
19
  from rpr.generators.copilot import generate_copilot_rules
@@ -438,7 +438,7 @@ def _write_root_package_json(ctx: RunContext, project_name: str) -> None:
438
438
  else:
439
439
  package = {}
440
440
 
441
- package.setdefault("name", project_name)
441
+ package["name"] = npm_package_name(project_name)
442
442
  package["private"] = True
443
443
 
444
444
  workspaces = package.get("workspaces", [])
@@ -67,9 +67,35 @@ PYO3_VERSION = MANIFEST["engine"]["pyo3"]["specifier"]
67
67
  MATURIN_SPEC = MANIFEST["engine"]["maturin"]["specifier"]
68
68
 
69
69
 
70
+ def npm_package_name(package_name: str) -> str:
71
+ normalized = package_name.replace("_", "-").lower()
72
+ normalized = re.sub(r"[^a-z0-9._-]+", "-", normalized).strip(".-")
73
+ return normalized or "package"
74
+
75
+
76
+ def scoped_package_name(scope_name: str, package_name: str) -> str:
77
+ return f"@{npm_package_name(scope_name)}/{npm_package_name(package_name)}"
78
+
79
+
80
+ def _strip_suffix(package_name: str, suffix: str) -> str:
81
+ return package_name[: -len(suffix)] if package_name.endswith(suffix) else package_name
82
+
83
+
84
+ def ui_package_name(ui_pkg_name: str) -> str:
85
+ return scoped_package_name(_strip_suffix(ui_pkg_name, "-ui"), "ui")
86
+
87
+
88
+ def web_package_name(app_name: str) -> str:
89
+ return scoped_package_name(_strip_suffix(app_name, "-web"), "web")
90
+
91
+
92
+ def storybook_host_package_name(ui_pkg_name: str) -> str:
93
+ return scoped_package_name(_strip_suffix(ui_pkg_name, "-ui"), "sb")
94
+
95
+
70
96
  def web_app_dependencies(ui_pkg_name: str) -> dict[str, str]:
71
97
  return {
72
- f"@repo/{ui_pkg_name}": "workspace:*",
98
+ ui_package_name(ui_pkg_name): f"file:../../packages/node/{ui_pkg_name}",
73
99
  "react": UI_LIBRARY_DEPENDENCIES["react"],
74
100
  "react-dom": UI_LIBRARY_DEPENDENCIES["react-dom"],
75
101
  }
@@ -77,7 +103,7 @@ def web_app_dependencies(ui_pkg_name: str) -> dict[str, str]:
77
103
 
78
104
  def storybook_package_dependencies(ui_pkg_name: str) -> dict[str, str]:
79
105
  return {
80
- f"@repo/{ui_pkg_name}": "workspace:*",
106
+ ui_package_name(ui_pkg_name): f"file:../{ui_pkg_name}",
81
107
  **STORYBOOK_DEPENDENCIES,
82
108
  }
83
109
 
@@ -6,279 +6,284 @@ from __future__ import annotations
6
6
  MANIFEST = {
7
7
  "root_node_dev_dependencies": {
8
8
  "@eslint/js": {
9
- "specifier": "^9.39.4",
9
+ "specifier": "latest",
10
10
  },
11
11
  "@nx/eslint": {
12
- "specifier": "^22.7.1",
12
+ "specifier": "latest",
13
13
  },
14
14
  "@nx/eslint-plugin": {
15
- "specifier": "^22.7.1",
15
+ "specifier": "latest",
16
16
  },
17
17
  "eslint": {
18
- "specifier": "^9.39.4",
18
+ "specifier": "latest",
19
19
  },
20
20
  "eslint-plugin-import": {
21
- "specifier": "^2.32.0",
21
+ "specifier": "latest",
22
22
  },
23
23
  "eslint-plugin-jsx-a11y": {
24
- "specifier": "^6.10.2",
24
+ "specifier": "latest",
25
25
  },
26
26
  "eslint-plugin-react": {
27
- "specifier": "^7.37.5",
27
+ "specifier": "latest",
28
28
  },
29
29
  "eslint-plugin-react-hooks": {
30
- "specifier": "^7.1.1",
30
+ "specifier": "latest",
31
31
  },
32
32
  "globals": {
33
- "specifier": "^15.15.0",
33
+ "specifier": "latest",
34
34
  },
35
35
  "prettier": {
36
- "specifier": "^3.7.4",
36
+ "specifier": "latest",
37
37
  },
38
38
  "typescript-eslint": {
39
- "specifier": "^8.59.2",
39
+ "specifier": "latest",
40
40
  },
41
41
  },
42
42
  "root_storybook_dev_dependencies": {
43
43
  "@nx/storybook": {
44
44
  "registry": "npm",
45
45
  "specifier": "latest",
46
- "strategy": "caret",
46
+ "strategy": "latest",
47
47
  }
48
48
  },
49
49
  "ui_library_dependencies": {
50
50
  "@mui/material": {
51
51
  "registry": "npm",
52
- "specifier": "^9",
53
- "strategy": "caret",
52
+ "specifier": "latest",
53
+ "strategy": "latest",
54
54
  },
55
55
  "@emotion/react": {
56
56
  "registry": "npm",
57
- "specifier": "^11",
58
- "strategy": "caret",
57
+ "specifier": "latest",
58
+ "strategy": "latest",
59
59
  },
60
60
  "@emotion/styled": {
61
61
  "registry": "npm",
62
- "specifier": "^11",
63
- "strategy": "caret",
62
+ "specifier": "latest",
63
+ "strategy": "latest",
64
64
  },
65
65
  "@tanstack/react-query": {
66
66
  "registry": "npm",
67
- "specifier": "^5",
68
- "strategy": "caret",
67
+ "specifier": "latest",
68
+ "strategy": "latest",
69
69
  },
70
70
  "@tanstack/react-router": {
71
71
  "registry": "npm",
72
- "specifier": "^1",
73
- "strategy": "caret",
72
+ "specifier": "latest",
73
+ "strategy": "latest",
74
74
  },
75
75
  "react": {
76
76
  "registry": "npm",
77
- "specifier": "^19",
78
- "strategy": "caret",
77
+ "specifier": "latest",
78
+ "strategy": "latest",
79
79
  },
80
80
  "react-dom": {
81
81
  "registry": "npm",
82
- "specifier": "^19",
83
- "strategy": "caret",
82
+ "specifier": "latest",
83
+ "strategy": "latest",
84
84
  },
85
85
  },
86
86
  "ui_library_dev_dependencies": {
87
87
  "@types/react": {
88
88
  "registry": "npm",
89
- "specifier": "^19",
90
- "strategy": "caret",
89
+ "specifier": "latest",
90
+ "strategy": "latest",
91
91
  },
92
92
  "@types/react-dom": {
93
93
  "registry": "npm",
94
- "specifier": "^19",
95
- "strategy": "caret",
94
+ "specifier": "latest",
95
+ "strategy": "latest",
96
96
  },
97
97
  "typescript": {
98
98
  "registry": "npm",
99
- "specifier": "^5",
100
- "strategy": "caret",
99
+ "specifier": "latest",
100
+ "strategy": "latest",
101
101
  },
102
102
  "vite": {
103
103
  "registry": "npm",
104
- "specifier": "^8",
105
- "strategy": "caret",
104
+ "specifier": "latest",
105
+ "strategy": "latest",
106
106
  },
107
107
  "vitest": {
108
108
  "registry": "npm",
109
- "specifier": "^4",
110
- "strategy": "caret",
109
+ "specifier": "latest",
110
+ "strategy": "latest",
111
111
  },
112
112
  },
113
113
  "web_app_dev_dependencies": {
114
114
  "@types/react": {
115
115
  "registry": "npm",
116
- "specifier": "^19",
117
- "strategy": "caret",
116
+ "specifier": "latest",
117
+ "strategy": "latest",
118
118
  },
119
119
  "@types/react-dom": {
120
120
  "registry": "npm",
121
- "specifier": "^19",
122
- "strategy": "caret",
121
+ "specifier": "latest",
122
+ "strategy": "latest",
123
123
  },
124
124
  "@vitejs/plugin-react": {
125
125
  "registry": "npm",
126
126
  "specifier": "latest",
127
- "strategy": "caret",
127
+ "strategy": "latest",
128
128
  },
129
129
  "typescript": {
130
130
  "registry": "npm",
131
- "specifier": "^5",
132
- "strategy": "caret",
131
+ "specifier": "latest",
132
+ "strategy": "latest",
133
133
  },
134
134
  "vite": {
135
135
  "registry": "npm",
136
- "specifier": "^8",
137
- "strategy": "caret",
136
+ "specifier": "latest",
137
+ "strategy": "latest",
138
138
  },
139
139
  "vitest": {
140
140
  "registry": "npm",
141
- "specifier": "^4",
142
- "strategy": "caret",
141
+ "specifier": "latest",
142
+ "strategy": "latest",
143
143
  },
144
144
  },
145
145
  "storybook_dependencies": {
146
146
  "@emotion/react": {
147
147
  "registry": "npm",
148
- "specifier": "^11",
149
- "strategy": "caret",
148
+ "specifier": "latest",
149
+ "strategy": "latest",
150
150
  },
151
151
  "@emotion/styled": {
152
152
  "registry": "npm",
153
- "specifier": "^11",
154
- "strategy": "caret",
153
+ "specifier": "latest",
154
+ "strategy": "latest",
155
155
  },
156
156
  "@mui/material": {
157
157
  "registry": "npm",
158
- "specifier": "^9",
159
- "strategy": "caret",
158
+ "specifier": "latest",
159
+ "strategy": "latest",
160
160
  },
161
161
  "react": {
162
162
  "registry": "npm",
163
- "specifier": "^19",
164
- "strategy": "caret",
163
+ "specifier": "latest",
164
+ "strategy": "latest",
165
165
  },
166
166
  "react-dom": {
167
167
  "registry": "npm",
168
- "specifier": "^19",
169
- "strategy": "caret",
168
+ "specifier": "latest",
169
+ "strategy": "latest",
170
170
  },
171
171
  },
172
172
  "storybook_dev_dependencies": {
173
173
  "@storybook/addon-essentials": {
174
174
  "registry": "npm",
175
- "specifier": "^8",
176
- "strategy": "caret",
175
+ "specifier": "latest",
176
+ "strategy": "latest",
177
177
  },
178
178
  "@storybook/react": {
179
179
  "registry": "npm",
180
- "specifier": "^8",
181
- "strategy": "caret",
180
+ "specifier": "latest",
181
+ "strategy": "latest",
182
182
  },
183
183
  "@storybook/react-vite": {
184
184
  "registry": "npm",
185
- "specifier": "^8",
186
- "strategy": "caret",
185
+ "specifier": "latest",
186
+ "strategy": "latest",
187
+ },
188
+ "@vitejs/plugin-react": {
189
+ "registry": "npm",
190
+ "specifier": "latest",
191
+ "strategy": "latest",
187
192
  },
188
193
  "@types/react": {
189
194
  "registry": "npm",
190
- "specifier": "^19",
191
- "strategy": "caret",
195
+ "specifier": "latest",
196
+ "strategy": "latest",
192
197
  },
193
198
  "@types/react-dom": {
194
199
  "registry": "npm",
195
- "specifier": "^19",
196
- "strategy": "caret",
200
+ "specifier": "latest",
201
+ "strategy": "latest",
197
202
  },
198
203
  "storybook": {
199
204
  "registry": "npm",
200
- "specifier": "^8",
201
- "strategy": "caret",
205
+ "specifier": "latest",
206
+ "strategy": "latest",
202
207
  },
203
208
  "typescript": {
204
209
  "registry": "npm",
205
- "specifier": "^5",
206
- "strategy": "caret",
210
+ "specifier": "latest",
211
+ "strategy": "latest",
207
212
  },
208
213
  "vite": {
209
214
  "registry": "npm",
210
- "specifier": "^8",
211
- "strategy": "caret",
215
+ "specifier": "latest",
216
+ "strategy": "latest",
212
217
  },
213
218
  "vitest": {
214
219
  "registry": "npm",
215
- "specifier": "^4",
216
- "strategy": "caret",
220
+ "specifier": "latest",
221
+ "strategy": "latest",
217
222
  },
218
223
  },
219
224
  "domain_runtime_dependencies": {
220
225
  "sqlmodel": {
221
226
  "registry": "pypi",
222
227
  "specifier": "sqlmodel",
223
- "strategy": "minimum",
228
+ "strategy": "latest",
224
229
  },
225
230
  "httpx": {
226
231
  "registry": "pypi",
227
232
  "specifier": "httpx",
228
- "strategy": "minimum",
233
+ "strategy": "latest",
229
234
  },
230
235
  "dependency-injector": {
231
236
  "registry": "pypi",
232
237
  "specifier": "dependency-injector",
233
- "strategy": "minimum",
238
+ "strategy": "latest",
234
239
  },
235
240
  "pydantic": {
236
241
  "registry": "pypi",
237
242
  "specifier": "pydantic",
238
- "strategy": "minimum",
243
+ "strategy": "latest",
239
244
  },
240
245
  "pydantic-settings": {
241
246
  "registry": "pypi",
242
247
  "specifier": "pydantic-settings",
243
- "strategy": "minimum",
248
+ "strategy": "latest",
244
249
  },
245
250
  "asyncpg": {
246
251
  "registry": "pypi",
247
252
  "specifier": "asyncpg",
248
- "strategy": "minimum",
253
+ "strategy": "latest",
249
254
  },
250
255
  },
251
256
  "domain_migration_dependencies": {
252
257
  "alembic": {
253
258
  "registry": "pypi",
254
259
  "specifier": "alembic",
255
- "strategy": "minimum",
260
+ "strategy": "latest",
256
261
  }
257
262
  },
258
263
  "api_runtime_base_dependencies": {
259
264
  "fastapi": {
260
265
  "registry": "pypi",
261
- "specifier": "fastapi>=0.115",
262
- "strategy": "minimum",
266
+ "specifier": "fastapi",
267
+ "strategy": "latest",
263
268
  "package": "fastapi",
264
269
  },
265
270
  "uvicorn[standard]": {
266
271
  "registry": "pypi",
267
- "specifier": "uvicorn[standard]>=0.34",
268
- "strategy": "minimum",
272
+ "specifier": "uvicorn[standard]",
273
+ "strategy": "latest",
269
274
  "package": "uvicorn",
270
275
  },
271
276
  },
272
277
  "engine": {
273
278
  "pyo3": {
274
279
  "registry": "cratesio",
275
- "specifier": "0.28",
276
- "strategy": "exact",
280
+ "specifier": "*",
281
+ "strategy": "latest",
277
282
  },
278
283
  "maturin": {
279
284
  "registry": "pypi",
280
- "specifier": "maturin>=1.8.2,<2.0",
281
- "strategy": "major-range",
285
+ "specifier": "maturin",
286
+ "strategy": "latest",
282
287
  },
283
288
  },
284
- }
289
+ }
@@ -9,7 +9,7 @@ from urllib.parse import quote
9
9
  from urllib.request import Request, urlopen
10
10
 
11
11
  RegistryName = Literal["npm", "pypi", "cratesio"]
12
- RefreshStrategy = Literal["caret", "minimum", "exact", "major-range"]
12
+ RefreshStrategy = Literal["caret", "minimum", "exact", "major-range", "latest"]
13
13
  Manifest = dict[str, dict[str, dict[str, str]]]
14
14
 
15
15
  _USER_AGENT = "rpr-cli/0.1.1 (+https://github.com/)"
@@ -79,13 +79,31 @@ def refresh_dependency_manifest(
79
79
  continue
80
80
 
81
81
  package = entry.get("package", dependency)
82
- cache_key = (registry, package)
83
- latest_version = latest_version_cache.get(cache_key)
84
- if latest_version is None:
85
- latest_version = fetch_latest_version(registry, package, timeout=timeout)
86
- latest_version_cache[cache_key] = latest_version
87
-
88
- new_specifier = _format_specifier(strategy, dependency, package, latest_version)
82
+ if strategy == "latest":
83
+ latest_version = "latest"
84
+ new_specifier = _format_specifier(
85
+ strategy,
86
+ dependency,
87
+ package,
88
+ latest_version,
89
+ registry,
90
+ )
91
+ else:
92
+ cache_key = (registry, package)
93
+ latest_version = latest_version_cache.get(cache_key)
94
+ if latest_version is None:
95
+ latest_version = fetch_latest_version(
96
+ registry, package, timeout=timeout
97
+ )
98
+ latest_version_cache[cache_key] = latest_version
99
+
100
+ new_specifier = _format_specifier(
101
+ strategy,
102
+ dependency,
103
+ package,
104
+ latest_version,
105
+ registry,
106
+ )
89
107
  old_specifier = entry["specifier"]
90
108
  if new_specifier == old_specifier:
91
109
  continue
@@ -107,8 +125,18 @@ def refresh_dependency_manifest(
107
125
 
108
126
 
109
127
  def _format_specifier(
110
- strategy: str, dependency: str, package: str, latest_version: str
128
+ strategy: str,
129
+ dependency: str,
130
+ package: str,
131
+ latest_version: str,
132
+ registry: str,
111
133
  ) -> str:
134
+ if strategy == "latest":
135
+ if registry == "npm":
136
+ return "latest"
137
+ if registry == "cratesio":
138
+ return "*"
139
+ return dependency
112
140
  if strategy == "caret":
113
141
  return f"^{latest_version}"
114
142
  if strategy == "minimum":
@@ -11,6 +11,7 @@ Use React for UI composition, TanStack Query for server-state workflows, TanStac
11
11
 
12
12
  - Use functional components.
13
13
  - Extract reusable behavior into hooks instead of duplicating component logic.
14
+ - Import the generated shared UI package through the app-scoped package name `@{name}/ui`, such as `@testapp/ui`, not `@repo/{name}-ui`.
14
15
  - Prefer a shared base API service at `src/services/base/api.service.ts` when the UI package needs centralized fetch behavior.
15
16
  - Prefer a shared `useStateNavigation` hook at `src/hooks/useStateNavigation.ts` when UI state should persist in the URL.
16
17
  - Reuse existing components, hooks, and service patterns before introducing a new abstraction.