rpr-cli 0.1.22__tar.gz → 0.1.24__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/PKG-INFO +1 -1
  2. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/Sample-dot-github/instructions/domain.instructions.md +3 -3
  3. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/nx_uv_setup.md +1 -1
  4. rpr_cli-0.1.24/src/rpr/__init__.py +1 -0
  5. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/checks/packages.py +1 -1
  6. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/commands/generate/domain.py +12 -3
  7. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/commands/generate/storybook.py +5 -5
  8. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/commands/generate/ui.py +5 -5
  9. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/commands/init.py +2 -1
  10. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/dependencies.py +16 -0
  11. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/dependency_manifest_data.py +6 -11
  12. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/manifest_refresh.py +6 -2
  13. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/scaffolds/domain/container.md +0 -2
  14. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/scaffolds/instructions/domain.instructions.md +3 -3
  15. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/scaffolds/special_files/domain_container.md +0 -2
  16. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/02-rpr-generate-domain.md +4 -4
  17. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/map/17-rpr-map-output.md +2 -2
  18. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_check.py +1 -1
  19. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_generate_domain.py +8 -4
  20. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_generate_storybook.py +17 -17
  21. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_refresh.py +10 -4
  22. rpr_cli-0.1.22/src/rpr/__init__.py +0 -1
  23. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/.github/agents/story.agent.md +0 -0
  24. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/.github/workflows/publish-pypi.yml +0 -0
  25. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/.gitignore +0 -0
  26. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/CLAUDE.md +0 -0
  27. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/GEMINI.md +0 -0
  28. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/LICENSE +0 -0
  29. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/README.md +0 -0
  30. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/Sample-dot-github/instructions/all.instructions.md +0 -0
  31. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/Sample-dot-github/instructions/api.instructions.md +0 -0
  32. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/Sample-dot-github/instructions/frontend.instructions.md +0 -0
  33. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/Sample-dot-github/instructions/rust-engine.instructions.md +0 -0
  34. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/Sample-dot-github/instructions/setup-guide.instructions.md +0 -0
  35. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/Sample-dot-github/instructions/tooling-setup.instructions.md +0 -0
  36. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/Sample-dot-github/instructions/tooling.instructions.md +0 -0
  37. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/Sample-dot-github/scaffolds/README.md +0 -0
  38. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/Sample-dot-github/scaffolds/api/main.py +0 -0
  39. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/Sample-dot-github/scaffolds/domain/base-repo.md +0 -0
  40. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/Sample-dot-github/scaffolds/domain/base_entity.md +0 -0
  41. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/Sample-dot-github/scaffolds/frontend/api.service.ts +0 -0
  42. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/Sample-dot-github/scaffolds/frontend/useStateNavigation.ts +0 -0
  43. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/changelogs/mui_v9.txt +0 -0
  44. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/code-map.md +0 -0
  45. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/patch_output.py +0 -0
  46. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/pyproject.toml +0 -0
  47. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/rpr-parser/Cargo.lock +0 -0
  48. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/rpr-parser/Cargo.toml +0 -0
  49. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/rpr-parser/pyproject.toml +0 -0
  50. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/rpr-parser/rpr_parser.pyi +0 -0
  51. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/rpr-parser/src/config/container.rs +0 -0
  52. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/rpr-parser/src/config/mod.rs +0 -0
  53. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/rpr-parser/src/config/settings.rs +0 -0
  54. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/rpr-parser/src/graph.rs +0 -0
  55. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/rpr-parser/src/lib.rs +0 -0
  56. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/rpr-parser/src/models/dtos/mod.rs +0 -0
  57. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/rpr-parser/src/models/entities/mod.rs +0 -0
  58. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/rpr-parser/src/models/entities/users.rs +0 -0
  59. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/rpr-parser/src/models/mod.rs +0 -0
  60. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/rpr-parser/src/parse.rs +0 -0
  61. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/rpr-parser/src/repos/base.rs +0 -0
  62. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/rpr-parser/src/repos/mod.rs +0 -0
  63. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/rpr-parser/src/repos/users.rs +0 -0
  64. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/rpr-parser/src/resolve.rs +0 -0
  65. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/rpr-parser/src/walker.rs +0 -0
  66. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/rpr-parser/uv.lock +0 -0
  67. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/special_files.md +0 -0
  68. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/agent/__init__.py +0 -0
  69. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/agent/approval.py +0 -0
  70. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/agent/bootstrap.py +0 -0
  71. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/agent/client.py +0 -0
  72. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/agent/control.py +0 -0
  73. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/agent/mock.py +0 -0
  74. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/agent/runtime.py +0 -0
  75. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/agent/session.py +0 -0
  76. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/agent/tools/__init__.py +0 -0
  77. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/agent/tools/base.py +0 -0
  78. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/agent/tools/mutating.py +0 -0
  79. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/agent/tools/readonly.py +0 -0
  80. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/agent/tools/registry.py +0 -0
  81. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/application/__init__.py +0 -0
  82. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/application/catalog.py +0 -0
  83. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/application/chat_service.py +0 -0
  84. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/application/checks.py +0 -0
  85. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/application/cli_adapter.py +0 -0
  86. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/application/completer.py +0 -0
  87. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/application/conversation_service.py +0 -0
  88. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/application/prompt_service.py +0 -0
  89. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/application/selector.py +0 -0
  90. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/application/shell.py +0 -0
  91. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/checks/__init__.py +0 -0
  92. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/checks/base.py +0 -0
  93. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/checks/instructions.py +0 -0
  94. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/checks/workspace.py +0 -0
  95. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/cli.py +0 -0
  96. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/commands/__init__.py +0 -0
  97. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/commands/add.py +0 -0
  98. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/commands/chat.py +0 -0
  99. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/commands/check.py +0 -0
  100. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/commands/generate/__init__.py +0 -0
  101. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/commands/generate/api.py +0 -0
  102. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/commands/generate/engine.py +0 -0
  103. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/commands/map.py +0 -0
  104. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/commands/refresh.py +0 -0
  105. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/commands/settings.py +0 -0
  106. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/commands/sync.py +0 -0
  107. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/context.py +0 -0
  108. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/generators/__init__.py +0 -0
  109. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/generators/base.py +0 -0
  110. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/generators/claude.py +0 -0
  111. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/generators/copilot.py +0 -0
  112. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/generators/cursor.py +0 -0
  113. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/generators/gemini.py +0 -0
  114. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/generators/github.py +0 -0
  115. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/map/__init__.py +0 -0
  116. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/map/architecture.py +0 -0
  117. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/map/chains.py +0 -0
  118. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/map/classifier.py +0 -0
  119. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/map/coverage.py +0 -0
  120. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/map/dependencies.py +0 -0
  121. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/map/extractor.py +0 -0
  122. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/map/graph.py +0 -0
  123. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/map/output.py +0 -0
  124. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/map/responsibility.py +0 -0
  125. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/map/topology.py +0 -0
  126. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/map/walker.py +0 -0
  127. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/scaffolds/domain/base_entity.md +0 -0
  128. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/scaffolds/domain/base_repo.md +0 -0
  129. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/scaffolds/domain/settings.md +0 -0
  130. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/scaffolds/instructions/all.instructions.md +0 -0
  131. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/scaffolds/instructions/api.instructions.md +0 -0
  132. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/scaffolds/instructions/frontend.instructions.md +0 -0
  133. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/scaffolds/instructions/rust-engine.instructions.md +0 -0
  134. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/scaffolds/instructions/setup-guide.instructions.md +0 -0
  135. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/scaffolds/instructions/tooling-setup.instructions.md +0 -0
  136. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/scaffolds/instructions/tooling.instructions.md +0 -0
  137. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/scaffolds/js_special_files/fetch.service.md +0 -0
  138. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/scaffolds/js_special_files/sticky-navigation.md +0 -0
  139. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/scaffolds/special_files/domain_settings.md +0 -0
  140. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/scaffolds/special_files/dto_util.md +0 -0
  141. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/scaffolds/special_files/encrypted_column.md +0 -0
  142. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/scaffolds/special_files/mapper_util.md +0 -0
  143. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/scaffolds/special_files/partial_update.md +0 -0
  144. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/templates/__init__.py +0 -0
  145. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/templates/registry.py +0 -0
  146. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/ui/__init__.py +0 -0
  147. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/ui/console.py +0 -0
  148. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/ui/markdown.py +0 -0
  149. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/ui/prompt_session.py +0 -0
  150. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/ui/renderers.py +0 -0
  151. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/ui/theme.py +0 -0
  152. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/src/rpr/workspace.py +0 -0
  153. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/README.md +0 -0
  154. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/00-bootstrap-cli.md +0 -0
  155. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/01-rpr-init.md +0 -0
  156. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/03-rpr-generate-api.md +0 -0
  157. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/04-rpr-generate-ui.md +0 -0
  158. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/05-rpr-generate-engine.md +0 -0
  159. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/06-rpr-generate-storybook.md +0 -0
  160. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/07-rpr-sync-rules.md +0 -0
  161. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/08-rpr-add-template.md +0 -0
  162. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/09-rpr-check.md +0 -0
  163. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/10-rpr-domain-config.md +0 -0
  164. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/chat/18-rpr-terminal-ui-foundation.md +0 -0
  165. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/chat/19-rpr-markdown-rendering.md +0 -0
  166. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/chat/20-rpr-chat-repl.md +0 -0
  167. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/chat/21-rpr-agent-tool-loop.md +0 -0
  168. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/chat/22-rpr-chat-tui.md +0 -0
  169. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/chat/23-rpr-chat-unified-command-shell.md +0 -0
  170. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/chat/24-rpr-async-chat-runtime-and-services.md +0 -0
  171. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/chat/25-rpr-prompt-service-and-conversation-lifecycle.md +0 -0
  172. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/chat/26-rpr-shared-command-catalog.md +0 -0
  173. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/chat/27-rpr-slash-command-selection-panel.md +0 -0
  174. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/chat/28-rpr-chat-cancellable-and-multiline-input.md +0 -0
  175. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/chat/29-rpr-file-context-selection.md +0 -0
  176. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/map/11-rpr-map-command.md +0 -0
  177. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/map/12-rpr-map-file-walker.md +0 -0
  178. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/map/13-rpr-map-rust-engine.md +0 -0
  179. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/map/13a-rpr-map-gitignore.md +0 -0
  180. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/map/14-rpr-map-graph-builder.md +0 -0
  181. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/map/15-rpr-map-analysis-bridge.md +0 -0
  182. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/map/16-rpr-map-layer-classifier.md +0 -0
  183. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/map/17a-rpr-map-directory-topology.md +0 -0
  184. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/map/17b-rpr-map-architecture-assessment.md +0 -0
  185. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/map/17c-rpr-map-representative-chains.md +0 -0
  186. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/completed/map/17d-rpr-map-multi-resolution-output.md +0 -0
  187. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/map/30-rpr-map-directory-view-and-cycle-detection.md +0 -0
  188. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/map/31-rpr-map-coupling-hotspots-and-verdict-reasoning.md +0 -0
  189. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/stories/map/32-rpr-map-dependencies-responsibilities-and-test-coverage.md +0 -0
  190. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/__init__.py +0 -0
  191. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_add.py +0 -0
  192. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_architecture.py +0 -0
  193. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_architecture_unwrapped.py +0 -0
  194. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_catalog.py +0 -0
  195. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_chat.py +0 -0
  196. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_chat_service.py +0 -0
  197. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_completer.py +0 -0
  198. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_context.py +0 -0
  199. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_generate_api.py +0 -0
  200. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_generate_engine.py +0 -0
  201. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_generate_ui.py +0 -0
  202. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_init.py +0 -0
  203. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_map.py +0 -0
  204. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_map_chains.py +0 -0
  205. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_map_classifier.py +0 -0
  206. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_map_coverage.py +0 -0
  207. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_map_dependencies.py +0 -0
  208. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_map_extractor.py +0 -0
  209. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_map_graph.py +0 -0
  210. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_map_output.py +0 -0
  211. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_map_responsibility.py +0 -0
  212. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_map_topology.py +0 -0
  213. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_map_walker.py +0 -0
  214. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_packaging.py +0 -0
  215. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_prompt_session.py +0 -0
  216. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_rpr_parser_stub.py +0 -0
  217. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_selector.py +0 -0
  218. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_settings.py +0 -0
  219. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_sync.py +0 -0
  220. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/tests/test_ui.py +0 -0
  221. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/update_output.py +0 -0
  222. {rpr_cli-0.1.22 → rpr_cli-0.1.24}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rpr-cli
3
- Version: 0.1.22
3
+ Version: 0.1.24
4
4
  Summary: RPR CLI -- React Python Rust monorepo scaffolding orchestrator
5
5
  License-Expression: MIT
6
6
  License-File: LICENSE
@@ -9,8 +9,8 @@ Use a DDD-style domain layer with explicit boundaries, SQLModel entities, Depend
9
9
 
10
10
  ## Structure
11
11
 
12
- - **entities**: SQLModel-based persistence models. Use the shared base entity pattern for ids and timestamps.
13
- - **dtos**: request, response, and integration models.
12
+ - **models/entities**: SQLModel-based persistence models. Use the shared base entity pattern for ids and timestamps.
13
+ - **models/dtos**: request, response, and integration models.
14
14
  - **repos**: data-access layer. Extend the shared base repository pattern.
15
15
  - **services**: external clients and provider integrations. Keep transport-specific logic here, not in workflows.
16
16
  - **workflows**: business use cases and multi-step orchestration. Pub/sub handlers belong in `workflows/handlers` when the project uses them.
@@ -47,7 +47,7 @@ npx nx run domain:migrate -- downgrade -1
47
47
  ```
48
48
 
49
49
  - Keep the Alembic CLI under the project's configured Python environment.
50
- - Alembic autogeneration depends on model discovery, so make sure new entity modules are imported by the domain model registry such as `entities/__init__.py`.
50
+ - Alembic autogeneration depends on model discovery, so make sure new entity modules are imported by the domain model registry such as `models/entities/__init__.py`.
51
51
 
52
52
  ## Repository Pattern
53
53
 
@@ -488,7 +488,7 @@ npx nx run domain:migrate -- upgrade head # applies all pending migrations
488
488
  npx nx run domain:migrate -- downgrade -1 # rolls back the most recent migration
489
489
  ```
490
490
 
491
- Alembic autogeneration relies on model discovery, make sure the new entity modules are imported by the package's model registry such as `entities/__init__.py` file.
491
+ Alembic autogeneration relies on model discovery, make sure the new entity modules are imported by the package's model registry such as `models/entities/__init__.py` file.
492
492
 
493
493
  ## Adding other languages (e.g. Rust)
494
494
 
@@ -0,0 +1 @@
1
+ __version__ = "0.1.24"
@@ -525,7 +525,7 @@ def _check_domain_migration_scaffold(
525
525
  env_ok = (
526
526
  f"from {name_underscore}_domain.config.settings import Settings"
527
527
  in env_content
528
- and f"import {name_underscore}_domain.entities" in env_content
528
+ and f"import {name_underscore}_domain.models.entities" in env_content
529
529
  )
530
530
 
531
531
  missing: list[str] = []
@@ -51,7 +51,16 @@ def domain(
51
51
  console.print(f"\n[bold]Generating domain package:[/] {pkg_name}\n")
52
52
 
53
53
  # --- directories -------------------------------------------------------
54
- dirs = ["entities", "dtos", "repos", "services", "workflows", "config", "utils"]
54
+ dirs = [
55
+ "models",
56
+ "models/entities",
57
+ "models/dtos",
58
+ "repos",
59
+ "services",
60
+ "workflows",
61
+ "config",
62
+ "utils",
63
+ ]
55
64
  for d in dirs:
56
65
  ctx.ensure_dir(src_root / d)
57
66
  ctx.ensure_dir(tests_root)
@@ -72,7 +81,7 @@ def domain(
72
81
  _write_container(ctx, src_root / "config" / "container.py", pkg_name)
73
82
 
74
83
  # --- scaffold files ----------------------------------------------------
75
- _write_base_entity(ctx, src_root / "entities" / "base.py")
84
+ _write_base_entity(ctx, src_root / "models" / "entities" / "base.py")
76
85
  _write_base_repo(ctx, src_root / "repos" / "base.py", pkg_name)
77
86
  _write_domain_test(ctx, tests_root / "test_package.py", pkg_name)
78
87
  if migrations:
@@ -294,7 +303,7 @@ from sqlalchemy.ext.asyncio import create_async_engine
294
303
  from sqlmodel import SQLModel
295
304
 
296
305
  from {pkg_name_underscore}.config.settings import Settings
297
- import {pkg_name_underscore}.entities # noqa: F401
306
+ import {pkg_name_underscore}.models.entities # noqa: F401
298
307
 
299
308
 
300
309
  settings = Settings()
@@ -12,7 +12,7 @@ from rpr.context import RunContext
12
12
  from rpr.dependencies import (
13
13
  ROOT_STORYBOOK_DEV_DEPENDENCIES,
14
14
  STORYBOOK_DEV_DEPENDENCIES,
15
- npm_install_names,
15
+ npm_install_specs,
16
16
  npm_package_name,
17
17
  storybook_host_package_name,
18
18
  storybook_package_dependencies,
@@ -199,10 +199,10 @@ def _write_sb_package_json(ctx: RunContext, sb_root: Path, ui_pkg: str) -> None:
199
199
 
200
200
 
201
201
  def _install_storybook_dependencies(ctx: RunContext, ui_pkg: str) -> None:
202
- runtime = npm_install_names(storybook_package_dependencies(ui_pkg))
202
+ runtime = npm_install_specs(storybook_package_dependencies(ui_pkg))
203
203
  dev = [
204
- *npm_install_names(ROOT_STORYBOOK_DEV_DEPENDENCIES),
205
- *npm_install_names(STORYBOOK_DEV_DEPENDENCIES),
204
+ *npm_install_specs(ROOT_STORYBOOK_DEV_DEPENDENCIES),
205
+ *npm_install_specs(STORYBOOK_DEV_DEPENDENCIES),
206
206
  ]
207
207
  if runtime:
208
208
  ctx.run_command(["npm", "i", *sorted(set(runtime))], cwd=ctx.project_dir)
@@ -371,7 +371,7 @@ const config: StorybookConfig = {{
371
371
  stories: [
372
372
  "../../{ui_pkg}/src/**/*.stories.@(ts|tsx)",
373
373
  ],
374
- addons: ["@storybook/addon-essentials"],
374
+ addons: [],
375
375
  framework: {{
376
376
  name: "@storybook/react-vite",
377
377
  options: {{}},
@@ -14,7 +14,7 @@ from rpr.dependencies import (
14
14
  UI_LIBRARY_DEV_DEPENDENCIES,
15
15
  WEB_APP_DEV_DEPENDENCIES,
16
16
  node_project_name,
17
- npm_install_names,
17
+ npm_install_specs,
18
18
  ui_package_name,
19
19
  web_app_dependencies,
20
20
  web_package_name,
@@ -154,11 +154,11 @@ def _install_ui_dependencies(
154
154
  runtime: list[str] = []
155
155
  dev: list[str] = []
156
156
  if include_library:
157
- runtime.extend(npm_install_names(UI_LIBRARY_DEPENDENCIES))
158
- dev.extend(npm_install_names(UI_LIBRARY_DEV_DEPENDENCIES))
157
+ runtime.extend(npm_install_specs(UI_LIBRARY_DEPENDENCIES))
158
+ dev.extend(npm_install_specs(UI_LIBRARY_DEV_DEPENDENCIES))
159
159
  if include_web:
160
- runtime.extend(npm_install_names(web_app_dependencies(ui_pkg_name)))
161
- dev.extend(npm_install_names(WEB_APP_DEV_DEPENDENCIES))
160
+ runtime.extend(npm_install_specs(web_app_dependencies(ui_pkg_name)))
161
+ dev.extend(npm_install_specs(WEB_APP_DEV_DEPENDENCIES))
162
162
 
163
163
  if runtime:
164
164
  ctx.run_command(["npm", "i", *sorted(set(runtime))], cwd=ctx.project_dir)
@@ -16,6 +16,7 @@ from rpr.context import RunContext
16
16
  from rpr.dependencies import (
17
17
  ROOT_NODE_DEV_DEPENDENCIES,
18
18
  node_project_name,
19
+ npm_install_specs,
19
20
  npm_install_names,
20
21
  npm_package_name,
21
22
  python_package_name,
@@ -846,7 +847,7 @@ def init(
846
847
  dev=npm_install_names(ROOT_NODE_DEV_DEPENDENCIES),
847
848
  )
848
849
  ctx.run_command(
849
- ["npm", "i", "-D", *npm_install_names(ROOT_NODE_DEV_DEPENDENCIES)],
850
+ ["npm", "i", "-D", *npm_install_specs(ROOT_NODE_DEV_DEPENDENCIES)],
850
851
  cwd=project_dir,
851
852
  )
852
853
 
@@ -132,6 +132,22 @@ def npm_install_names(dependencies: Mapping[str, str] | list[str]) -> list[str]:
132
132
  return list(dependencies)
133
133
 
134
134
 
135
+ def npm_install_specs(dependencies: Mapping[str, str] | list[str]) -> list[str]:
136
+ if not isinstance(dependencies, Mapping):
137
+ return list(dependencies)
138
+
139
+ specs: list[str] = []
140
+ for name, value in dependencies.items():
141
+ specifier = str(value)
142
+ if specifier.startswith(("file:", "workspace:")):
143
+ continue
144
+ if specifier:
145
+ specs.append(f"{name}@{specifier}")
146
+ else:
147
+ specs.append(name)
148
+ return specs
149
+
150
+
135
151
  def api_runtime_dependencies(name: str) -> list[str]:
136
152
  return [python_project_name(name, "domain"), *API_RUNTIME_BASE_DEPENDENCIES]
137
153
 
@@ -161,20 +161,15 @@ MANIFEST = {
161
161
  },
162
162
  },
163
163
  "storybook_dev_dependencies": {
164
- "@storybook/addon-essentials": {
165
- "registry": "npm",
166
- "specifier": "latest",
167
- "strategy": "latest",
168
- },
169
164
  "@storybook/react": {
170
165
  "registry": "npm",
171
- "specifier": "latest",
172
- "strategy": "latest",
166
+ "specifier": "^10.3.6",
167
+ "strategy": "pinned-major",
173
168
  },
174
169
  "@storybook/react-vite": {
175
170
  "registry": "npm",
176
- "specifier": "latest",
177
- "strategy": "latest",
171
+ "specifier": "^10.3.6",
172
+ "strategy": "pinned-major",
178
173
  },
179
174
  "@vitejs/plugin-react": {
180
175
  "registry": "npm",
@@ -193,8 +188,8 @@ MANIFEST = {
193
188
  },
194
189
  "storybook": {
195
190
  "registry": "npm",
196
- "specifier": "latest",
197
- "strategy": "latest",
191
+ "specifier": "^10.3.6",
192
+ "strategy": "pinned-major",
198
193
  },
199
194
  "typescript": {
200
195
  "registry": "npm",
@@ -9,7 +9,9 @@ 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", "latest"]
12
+ RefreshStrategy = Literal[
13
+ "caret", "minimum", "exact", "major-range", "latest", "pinned-major"
14
+ ]
13
15
  Manifest = dict[str, dict[str, dict[str, str]]]
14
16
 
15
17
  _USER_AGENT = "rpr-cli/0.1.1 (+https://github.com/)"
@@ -79,6 +81,8 @@ def refresh_dependency_manifest(
79
81
  continue
80
82
 
81
83
  package = entry.get("package", dependency)
84
+ if strategy == "pinned-major":
85
+ continue
82
86
  if strategy == "latest":
83
87
  latest_version = "latest"
84
88
  new_specifier = _format_specifier(
@@ -155,4 +159,4 @@ def _next_major(version: str) -> int:
155
159
  match = re.match(r"^(\d+)", version)
156
160
  if match is None:
157
161
  raise ManifestRefreshError(f"Cannot determine next major version for {version}")
158
- return int(match.group(1)) + 1
162
+ return int(match.group(1)) + 1
@@ -17,8 +17,6 @@ from your_app_domain.config.settings import Settings
17
17
 
18
18
 
19
19
  class Container(containers.DeclarativeContainer):
20
- wiring_config = containers.WiringConfiguration(modules=[])
21
-
22
20
  config = providers.Singleton(Settings)
23
21
 
24
22
  db_engine = providers.Singleton(
@@ -9,8 +9,8 @@ Use a DDD-style domain layer with explicit boundaries, SQLModel entities, Depend
9
9
 
10
10
  ## Structure
11
11
 
12
- - **entities**: SQLModel-based persistence models. Use the shared base entity pattern for ids and timestamps.
13
- - **dtos**: request, response, and integration models.
12
+ - **models/entities**: SQLModel-based persistence models. Use the shared base entity pattern for ids and timestamps.
13
+ - **models/dtos**: request, response, and integration models.
14
14
  - **repos**: data-access layer. Extend the shared base repository pattern.
15
15
  - **services**: external clients and provider integrations. Keep transport-specific logic here, not in workflows.
16
16
  - **workflows**: business use cases and multi-step orchestration. Pub/sub handlers belong in `workflows/handlers` when the project uses them.
@@ -47,7 +47,7 @@ npx nx run {name_underscore}_domain:migrate -- downgrade -1
47
47
  ```
48
48
 
49
49
  - Keep the Alembic CLI under the project's configured Python environment.
50
- - Alembic autogeneration depends on model discovery, so make sure new entity modules are imported by the domain model registry such as `entities/__init__.py`.
50
+ - Alembic autogeneration depends on model discovery, so make sure new entity modules are imported by the domain model registry such as `models/entities/__init__.py`.
51
51
 
52
52
  ## Repository Pattern
53
53
 
@@ -17,8 +17,6 @@ from your_app_domain.config.settings import Settings
17
17
 
18
18
 
19
19
  class Container(containers.DeclarativeContainer):
20
- wiring_config = containers.WiringConfiguration(modules=[])
21
-
22
20
  config = providers.Singleton(Settings)
23
21
 
24
22
  db_engine = providers.Singleton(
@@ -16,7 +16,7 @@ Generate the backend domain package in the expected UV `src` layout and make it
16
16
  - [ ] Creates subfolders: `entities/`, `dtos/`, `repos/`, `services/`, `workflows/`, `config/`, `utils/`.
17
17
  - [ ] Creates `__init__.py` in each subfolder.
18
18
  - [ ] Scaffolds `config/settings.py` (Pydantic `BaseSettings` with `.env` loading) and `config/container.py` (Dependency Injector `DeclarativeContainer` with DB engine and HTTP client providers). See **Story 10** for the exact content contract.
19
- - [ ] Scaffolds a `BaseEntity` in `entities/base.py` using `Sample-dot-github/scaffolds/domain/base_entity.md` as the reference.
19
+ - [ ] Scaffolds a `BaseEntity` in `models/entities/base.py` using `Sample-dot-github/scaffolds/domain/base_entity.md` as the reference.
20
20
  - [ ] Scaffolds a base repository in `repos/base.py` using `Sample-dot-github/scaffolds/domain/base-repo.md` as the reference.
21
21
  - [ ] The `utils/` folder is created but left empty; utilities are added via `rpr add template`.
22
22
  - [ ] Adds the package to `[tool.uv.workspace].members` in the root `pyproject.toml`.
@@ -57,9 +57,9 @@ packages/python/domain/
57
57
 
58
58
  The `project.json` must define at minimum `test` and `lint` targets. Use `uv run` to invoke Python tools so they execute inside the package's managed environment:
59
59
 
60
- | Target | Command |
61
- |--------|---------|
62
- | `test` | `uv run pytest packages/python/domain` |
60
+ | Target | Command |
61
+ | ------ | ---------------------------------------------- |
62
+ | `test` | `uv run pytest packages/python/domain` |
63
63
  | `lint` | `uv run ruff check packages/python/domain/src` |
64
64
 
65
65
  ## Key Files
@@ -41,8 +41,8 @@ One subsection per layer (skip empty layers). Each subsection lists:
41
41
 
42
42
  ```
43
43
  ## Entities
44
- - src/my_domain/entities/user.py — 4 dependents, 1 dependency
45
- - src/my_domain/entities/base.py — 6 dependents, 0 dependencies (leaf)
44
+ - src/my_domain/models/entities/user.py — 4 dependents, 1 dependency
45
+ - src/my_domain/models/entities/base.py — 6 dependents, 0 dependencies (leaf)
46
46
  ```
47
47
 
48
48
  #### 5. Dependency edges (condensed)
@@ -206,7 +206,7 @@ def _create_domain_migration_scaffold(base: Path) -> None:
206
206
  (migrations / "versions").mkdir(parents=True, exist_ok=True)
207
207
  (migrations / "env.py").write_text(
208
208
  "from my_app_domain.config.settings import Settings\n"
209
- "import my_app_domain.entities # noqa: F401\n"
209
+ "import my_app_domain.models.entities # noqa: F401\n"
210
210
  )
211
211
  (domain / "pyproject.toml").write_text(
212
212
  """[project]
@@ -65,15 +65,18 @@ def test_generate_domain_scaffolds_config_and_metadata(monkeypatch):
65
65
  assert domain_root.exists()
66
66
  assert (src_root / "config" / "settings.py").exists()
67
67
  assert (src_root / "config" / "container.py").exists()
68
- assert (src_root / "entities" / "base.py").exists()
68
+ assert (src_root / "models" / "entities" / "base.py").exists()
69
+ assert (src_root / "entities").exists() is False
70
+ assert (src_root / "dtos").exists() is False
69
71
  assert (src_root / "repos" / "base.py").exists()
70
72
  assert (domain_root / "tests" / "test_package.py").exists()
71
73
  assert (domain_root / "README.md").read_text().startswith("# my-app Domain")
72
74
 
73
75
  for package_dir in [
74
76
  "",
75
- "entities",
76
- "dtos",
77
+ "models",
78
+ "models/entities",
79
+ "models/dtos",
77
80
  "repos",
78
81
  "services",
79
82
  "workflows",
@@ -104,6 +107,7 @@ def test_generate_domain_scaffolds_config_and_metadata(monkeypatch):
104
107
 
105
108
  assert "from my_app_domain.config.settings import Settings" in container
106
109
  assert "class Container(containers.DeclarativeContainer):" in container
110
+ assert "wiring_config = containers.WiringConfiguration" not in container
107
111
  assert "config = providers.Singleton(Settings)" in container
108
112
  assert "settings.database_url" in container
109
113
  assert "pool_pre_ping=True" in container
@@ -167,7 +171,7 @@ def test_generate_domain_with_migrations_scaffolds_alembic_and_target(monkeypatc
167
171
  assert (domain_root / "migrations" / "versions").is_dir()
168
172
  assert "script_location = %(here)s/migrations" in alembic_ini
169
173
  assert "from my_app_domain.config.settings import Settings" in env_py
170
- assert "import my_app_domain.entities # noqa: F401" in env_py
174
+ assert "import my_app_domain.models.entities # noqa: F401" in env_py
171
175
  assert project["name"] == "my_app_domain"
172
176
  assert project["targets"]["migrate"]["options"]["command"] == (
173
177
  "uv run alembic -c packages/python/my_app_domain/alembic.ini"
@@ -84,7 +84,8 @@ def test_generate_storybook_scaffolds_host_package_and_starter_story(monkeypatch
84
84
  "storybook build -c packages/node/sb/.storybook -o dist/storybook"
85
85
  )
86
86
  assert "../../my-app-ui/src/**/*.stories.@(ts|tsx)" in sb_main
87
- assert "@storybook/addon-essentials" in sb_main
87
+ assert "@storybook/addon-essentials" not in sb_main
88
+ assert "addons: []" in sb_main
88
89
  assert "ThemeProvider" in sb_preview
89
90
  assert 'import { appTheme } from "@my-app/ui";' in sb_preview
90
91
  assert "createTheme" not in sb_preview
@@ -98,11 +99,11 @@ def test_generate_storybook_scaffolds_host_package_and_starter_story(monkeypatch
98
99
  "cmd": [
99
100
  "npm",
100
101
  "i",
101
- "@emotion/react",
102
- "@emotion/styled",
103
- "@mui/material",
104
- "react",
105
- "react-dom",
102
+ "@emotion/react@latest",
103
+ "@emotion/styled@latest",
104
+ "@mui/material@latest",
105
+ "react-dom@latest",
106
+ "react@latest",
106
107
  ],
107
108
  "cwd": Path.cwd(),
108
109
  "supports_dry_run": False,
@@ -112,17 +113,16 @@ def test_generate_storybook_scaffolds_host_package_and_starter_story(monkeypatch
112
113
  "npm",
113
114
  "i",
114
115
  "-D",
115
- "@nx/storybook",
116
- "@storybook/addon-essentials",
117
- "@storybook/react",
118
- "@storybook/react-vite",
119
- "@types/react",
120
- "@types/react-dom",
121
- "@vitejs/plugin-react",
122
- "storybook",
123
- "typescript",
124
- "vite",
125
- "vitest",
116
+ "@nx/storybook@latest",
117
+ "@storybook/react-vite@^10.3.6",
118
+ "@storybook/react@^10.3.6",
119
+ "@types/react-dom@latest",
120
+ "@types/react@latest",
121
+ "@vitejs/plugin-react@latest",
122
+ "storybook@^10.3.6",
123
+ "typescript@latest",
124
+ "vite@latest",
125
+ "vitest@latest",
126
126
  ],
127
127
  "cwd": Path.cwd(),
128
128
  "supports_dry_run": False,
@@ -18,7 +18,9 @@ def test_refresh_manifest_preserves_latest_dependency_policy(
18
18
  manifest_path.write_text(original)
19
19
  fetch_calls: list[tuple[str, str]] = []
20
20
 
21
- def fake_fetch_latest_version(registry: str, package: str, *, timeout: float = 10.0) -> str:
21
+ def fake_fetch_latest_version(
22
+ registry: str, package: str, *, timeout: float = 10.0
23
+ ) -> str:
22
24
  fetch_calls.append((registry, package))
23
25
  return "9.9.9"
24
26
 
@@ -35,12 +37,16 @@ def test_refresh_manifest_preserves_latest_dependency_policy(
35
37
  assert fetch_calls == []
36
38
 
37
39
 
38
- def test_refresh_manifest_dry_run_does_not_write_file(monkeypatch, tmp_path: Path) -> None:
40
+ def test_refresh_manifest_dry_run_does_not_write_file(
41
+ monkeypatch, tmp_path: Path
42
+ ) -> None:
39
43
  manifest_path = tmp_path / "dependency_manifest_data.py"
40
44
  original = render_dependency_manifest_module(get_dependency_manifest())
41
45
  manifest_path.write_text(original)
42
46
 
43
- def fake_fetch_latest_version(registry: str, package: str, *, timeout: float = 10.0) -> str:
47
+ def fake_fetch_latest_version(
48
+ registry: str, package: str, *, timeout: float = 10.0
49
+ ) -> str:
44
50
  return "9.9.9"
45
51
 
46
52
  monkeypatch.setattr("rpr.commands.refresh.MANIFEST_DATA_PATH", manifest_path)
@@ -51,4 +57,4 @@ def test_refresh_manifest_dry_run_does_not_write_file(monkeypatch, tmp_path: Pat
51
57
  result = runner.invoke(app, ["refresh", "manifest", "--dry-run"])
52
58
 
53
59
  assert result.exit_code == 0, result.stdout
54
- assert manifest_path.read_text() == original
60
+ assert manifest_path.read_text() == original
@@ -1 +0,0 @@
1
- __version__ = "0.1.22"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes