rpr-cli 0.3.4__tar.gz → 0.3.8__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 (327) hide show
  1. rpr_cli-0.3.4/README.md → rpr_cli-0.3.8/PKG-INFO +45 -16
  2. rpr_cli-0.3.4/PKG-INFO → rpr_cli-0.3.8/README.md +27 -33
  3. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/pyproject.toml +10 -6
  4. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/Cargo.lock +72 -4
  5. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/Cargo.toml +8 -6
  6. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/lib.rs +6 -1
  7. rpr_cli-0.3.8/rpr-parser/src/rename.rs +1087 -0
  8. rpr_cli-0.3.8/src/rpr/__init__.py +1 -0
  9. rpr_cli-0.3.4/rpr-parser/rpr_parser.pyi → rpr_cli-0.3.8/src/rpr/_native.pyi +10 -1
  10. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/rename.py +20 -1
  11. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/map/extractor.py +1 -1
  12. rpr_cli-0.3.8/src/rpr/project_rename.py +129 -0
  13. rpr_cli-0.3.4/.github/agents/story.agent.md +0 -165
  14. rpr_cli-0.3.4/.github/workflows/publish-pypi.yml +0 -59
  15. rpr_cli-0.3.4/.gitignore +0 -28
  16. rpr_cli-0.3.4/CLAUDE.md +0 -70
  17. rpr_cli-0.3.4/GEMINI.md +0 -0
  18. rpr_cli-0.3.4/changelogs/mui_v9.txt +0 -2178
  19. rpr_cli-0.3.4/code-map.md +0 -155
  20. rpr_cli-0.3.4/nx_uv_setup.md +0 -841
  21. rpr_cli-0.3.4/patch_output.py +0 -150
  22. rpr_cli-0.3.4/plan-languageAwareTemplateAdd.prompt.md +0 -63
  23. rpr_cli-0.3.4/rpr-parser/pyproject.toml +0 -12
  24. rpr_cli-0.3.4/rpr-parser/uv.lock +0 -8
  25. rpr_cli-0.3.4/special_files.md +0 -20
  26. rpr_cli-0.3.4/src/rpr/__init__.py +0 -1
  27. rpr_cli-0.3.4/src/rpr/project_rename.py +0 -521
  28. rpr_cli-0.3.4/stories/README.md +0 -93
  29. rpr_cli-0.3.4/stories/chat-attachment-upload-gap.md +0 -306
  30. rpr_cli-0.3.4/stories/completed/00-bootstrap-cli.md +0 -61
  31. rpr_cli-0.3.4/stories/completed/01-rpr-init.md +0 -215
  32. rpr_cli-0.3.4/stories/completed/02-rpr-generate-domain.md +0 -89
  33. rpr_cli-0.3.4/stories/completed/03-rpr-generate-api.md +0 -39
  34. rpr_cli-0.3.4/stories/completed/04-rpr-generate-ui.md +0 -104
  35. rpr_cli-0.3.4/stories/completed/05-rpr-generate-engine.md +0 -111
  36. rpr_cli-0.3.4/stories/completed/06-rpr-generate-storybook.md +0 -89
  37. rpr_cli-0.3.4/stories/completed/07-rpr-sync-rules.md +0 -157
  38. rpr_cli-0.3.4/stories/completed/08-rpr-add-template.md +0 -69
  39. rpr_cli-0.3.4/stories/completed/09-rpr-check.md +0 -115
  40. rpr_cli-0.3.4/stories/completed/10-rpr-domain-config.md +0 -120
  41. rpr_cli-0.3.4/stories/completed/chat/18-rpr-terminal-ui-foundation.md +0 -37
  42. rpr_cli-0.3.4/stories/completed/chat/19-rpr-markdown-rendering.md +0 -38
  43. rpr_cli-0.3.4/stories/completed/chat/20-rpr-chat-repl.md +0 -36
  44. rpr_cli-0.3.4/stories/completed/chat/21-rpr-agent-tool-loop.md +0 -40
  45. rpr_cli-0.3.4/stories/completed/chat/22-rpr-chat-tui.md +0 -44
  46. rpr_cli-0.3.4/stories/completed/chat/23-rpr-chat-unified-command-shell.md +0 -96
  47. rpr_cli-0.3.4/stories/completed/chat/24-rpr-async-chat-runtime-and-services.md +0 -75
  48. rpr_cli-0.3.4/stories/completed/chat/25-rpr-prompt-service-and-conversation-lifecycle.md +0 -76
  49. rpr_cli-0.3.4/stories/completed/chat/26-rpr-shared-command-catalog.md +0 -213
  50. rpr_cli-0.3.4/stories/completed/chat/27-rpr-slash-command-selection-panel.md +0 -61
  51. rpr_cli-0.3.4/stories/completed/chat/28-rpr-chat-cancellable-and-multiline-input.md +0 -63
  52. rpr_cli-0.3.4/stories/completed/chat/29-rpr-file-context-selection.md +0 -52
  53. rpr_cli-0.3.4/stories/completed/map/11-rpr-map-command.md +0 -32
  54. rpr_cli-0.3.4/stories/completed/map/12-rpr-map-file-walker.md +0 -51
  55. rpr_cli-0.3.4/stories/completed/map/13-rpr-map-rust-engine.md +0 -126
  56. rpr_cli-0.3.4/stories/completed/map/13a-rpr-map-gitignore.md +0 -34
  57. rpr_cli-0.3.4/stories/completed/map/14-rpr-map-graph-builder.md +0 -94
  58. rpr_cli-0.3.4/stories/completed/map/15-rpr-map-analysis-bridge.md +0 -94
  59. rpr_cli-0.3.4/stories/completed/map/16-rpr-map-layer-classifier.md +0 -60
  60. rpr_cli-0.3.4/stories/completed/map/17-rpr-map-output.md +0 -94
  61. rpr_cli-0.3.4/stories/completed/map/17a-rpr-map-directory-topology.md +0 -65
  62. rpr_cli-0.3.4/stories/completed/map/17b-rpr-map-architecture-assessment.md +0 -61
  63. rpr_cli-0.3.4/stories/completed/map/17c-rpr-map-representative-chains.md +0 -52
  64. rpr_cli-0.3.4/stories/completed/map/17d-rpr-map-multi-resolution-output.md +0 -72
  65. rpr_cli-0.3.4/stories/map/30-rpr-map-directory-view-and-cycle-detection.md +0 -38
  66. rpr_cli-0.3.4/stories/map/31-rpr-map-coupling-hotspots-and-verdict-reasoning.md +0 -41
  67. rpr_cli-0.3.4/stories/map/32-rpr-map-dependencies-responsibilities-and-test-coverage.md +0 -98
  68. rpr_cli-0.3.4/stories/package-maintenance/default-vite-8-oxc-toolchain.md +0 -142
  69. rpr_cli-0.3.4/stories/package-maintenance/rpr-update-packages.md +0 -183
  70. rpr_cli-0.3.4/stories/package-maintenance/typescript-7-frontend-scaffold-compatibility.md +0 -123
  71. rpr_cli-0.3.4/tests/__init__.py +0 -0
  72. rpr_cli-0.3.4/tests/test_add.py +0 -753
  73. rpr_cli-0.3.4/tests/test_architecture.py +0 -659
  74. rpr_cli-0.3.4/tests/test_architecture_unwrapped.py +0 -152
  75. rpr_cli-0.3.4/tests/test_catalog.py +0 -222
  76. rpr_cli-0.3.4/tests/test_chat.py +0 -720
  77. rpr_cli-0.3.4/tests/test_chat_service.py +0 -282
  78. rpr_cli-0.3.4/tests/test_check.py +0 -564
  79. rpr_cli-0.3.4/tests/test_completer.py +0 -131
  80. rpr_cli-0.3.4/tests/test_context.py +0 -376
  81. rpr_cli-0.3.4/tests/test_generate_api.py +0 -125
  82. rpr_cli-0.3.4/tests/test_generate_domain.py +0 -327
  83. rpr_cli-0.3.4/tests/test_generate_engine.py +0 -133
  84. rpr_cli-0.3.4/tests/test_generate_storybook.py +0 -225
  85. rpr_cli-0.3.4/tests/test_generate_ui.py +0 -288
  86. rpr_cli-0.3.4/tests/test_init.py +0 -744
  87. rpr_cli-0.3.4/tests/test_map.py +0 -80
  88. rpr_cli-0.3.4/tests/test_map_chains.py +0 -554
  89. rpr_cli-0.3.4/tests/test_map_classifier.py +0 -330
  90. rpr_cli-0.3.4/tests/test_map_coverage.py +0 -182
  91. rpr_cli-0.3.4/tests/test_map_dependencies.py +0 -266
  92. rpr_cli-0.3.4/tests/test_map_extractor.py +0 -455
  93. rpr_cli-0.3.4/tests/test_map_graph.py +0 -309
  94. rpr_cli-0.3.4/tests/test_map_output.py +0 -1397
  95. rpr_cli-0.3.4/tests/test_map_responsibility.py +0 -220
  96. rpr_cli-0.3.4/tests/test_map_topology.py +0 -651
  97. rpr_cli-0.3.4/tests/test_map_walker.py +0 -448
  98. rpr_cli-0.3.4/tests/test_package_updates.py +0 -175
  99. rpr_cli-0.3.4/tests/test_packaging.py +0 -19
  100. rpr_cli-0.3.4/tests/test_prompt_session.py +0 -236
  101. rpr_cli-0.3.4/tests/test_refresh.py +0 -60
  102. rpr_cli-0.3.4/tests/test_rename.py +0 -335
  103. rpr_cli-0.3.4/tests/test_rpr_parser_stub.py +0 -12
  104. rpr_cli-0.3.4/tests/test_selector.py +0 -189
  105. rpr_cli-0.3.4/tests/test_settings.py +0 -112
  106. rpr_cli-0.3.4/tests/test_sync.py +0 -240
  107. rpr_cli-0.3.4/tests/test_ui.py +0 -133
  108. rpr_cli-0.3.4/tests/test_update_packages.py +0 -209
  109. rpr_cli-0.3.4/untitled:plan-chatAttachmentUploadGap.prompt.md +0 -52
  110. rpr_cli-0.3.4/update_output.py +0 -134
  111. rpr_cli-0.3.4/uv.lock +0 -309
  112. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/LICENSE +0 -0
  113. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/config/container.rs +0 -0
  114. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/config/mod.rs +0 -0
  115. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/config/settings.rs +0 -0
  116. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/graph.rs +0 -0
  117. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/models/dtos/mod.rs +0 -0
  118. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/models/entities/mod.rs +0 -0
  119. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/models/entities/users.rs +0 -0
  120. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/models/mod.rs +0 -0
  121. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/parse.rs +0 -0
  122. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/repos/base.rs +0 -0
  123. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/repos/mod.rs +0 -0
  124. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/repos/users.rs +0 -0
  125. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/resolve.rs +0 -0
  126. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/walker.rs +0 -0
  127. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/agent/__init__.py +0 -0
  128. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/agent/approval.py +0 -0
  129. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/agent/bootstrap.py +0 -0
  130. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/agent/client.py +0 -0
  131. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/agent/control.py +0 -0
  132. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/agent/mock.py +0 -0
  133. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/agent/runtime.py +0 -0
  134. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/agent/session.py +0 -0
  135. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/agent/tools/__init__.py +0 -0
  136. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/agent/tools/base.py +0 -0
  137. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/agent/tools/mutating.py +0 -0
  138. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/agent/tools/readonly.py +0 -0
  139. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/agent/tools/registry.py +0 -0
  140. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/application/__init__.py +0 -0
  141. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/application/catalog.py +0 -0
  142. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/application/chat_service.py +0 -0
  143. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/application/checks.py +0 -0
  144. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/application/cli_adapter.py +0 -0
  145. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/application/completer.py +0 -0
  146. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/application/conversation_service.py +0 -0
  147. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/application/prompt_service.py +0 -0
  148. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/application/selector.py +0 -0
  149. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/application/shell.py +0 -0
  150. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/checks/__init__.py +0 -0
  151. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/checks/base.py +0 -0
  152. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/checks/instructions.py +0 -0
  153. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/checks/packages.py +0 -0
  154. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/checks/workspace.py +0 -0
  155. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/cli.py +0 -0
  156. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/__init__.py +0 -0
  157. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/add.py +0 -0
  158. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/chat.py +0 -0
  159. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/check.py +0 -0
  160. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/generate/__init__.py +0 -0
  161. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/generate/api.py +0 -0
  162. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/generate/domain.py +0 -0
  163. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/generate/engine.py +0 -0
  164. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/generate/storybook.py +0 -0
  165. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/generate/ui.py +0 -0
  166. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/init.py +0 -0
  167. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/map.py +0 -0
  168. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/refresh.py +0 -0
  169. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/settings.py +0 -0
  170. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/sync.py +0 -0
  171. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/update.py +0 -0
  172. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/context.py +0 -0
  173. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/dependencies.py +0 -0
  174. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/dependency_manifest_data.py +0 -0
  175. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/generators/__init__.py +0 -0
  176. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/generators/base.py +0 -0
  177. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/generators/claude.py +0 -0
  178. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/generators/codex.py +0 -0
  179. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/generators/copilot.py +0 -0
  180. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/generators/cursor.py +0 -0
  181. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/generators/gemini.py +0 -0
  182. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/generators/github.py +0 -0
  183. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/manifest_refresh.py +0 -0
  184. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/map/__init__.py +0 -0
  185. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/map/architecture.py +0 -0
  186. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/map/chains.py +0 -0
  187. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/map/classifier.py +0 -0
  188. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/map/coverage.py +0 -0
  189. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/map/dependencies.py +0 -0
  190. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/map/graph.py +0 -0
  191. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/map/output.py +0 -0
  192. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/map/responsibility.py +0 -0
  193. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/map/topology.py +0 -0
  194. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/map/walker.py +0 -0
  195. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/package_updates.py +0 -0
  196. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/domain/base_entity.md +0 -0
  197. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/domain/base_repo.md +0 -0
  198. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/domain/container.md +0 -0
  199. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/domain/settings.md +0 -0
  200. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/instructions/all.instructions.md +0 -0
  201. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/instructions/api.instructions.md +0 -0
  202. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/instructions/domain.instructions.md +0 -0
  203. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/instructions/frontend.instructions.md +0 -0
  204. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/instructions/rust-engine.instructions.md +0 -0
  205. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/instructions/setup-guide.instructions.md +0 -0
  206. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/instructions/tooling-setup.instructions.md +0 -0
  207. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/instructions/tooling.instructions.md +0 -0
  208. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/BACKEND_FLOW.md +0 -0
  209. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/README.md +0 -0
  210. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/client/content.ts +0 -0
  211. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/client/httpChatStreamClient.spec.ts +0 -0
  212. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/client/httpChatStreamClient.ts +0 -0
  213. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/client/index.ts +0 -0
  214. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/client/types.ts +0 -0
  215. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/ChatComposer.spec.tsx +0 -0
  216. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/ChatComposer.tsx +0 -0
  217. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/__screenshots__/ChatComposer.spec.tsx/ChatComposer-renders-custom-action-buttons-beside-the-attachment-control-1.png +0 -0
  218. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/fileDrop.spec.ts +0 -0
  219. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/fileDrop.ts +0 -0
  220. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/index.ts +0 -0
  221. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/ChatComposerMentionTokens.tsx +0 -0
  222. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/ChatSuggestionsPopover.tsx +0 -0
  223. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/LocalFileSuggestionAction.tsx +0 -0
  224. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/index.ts +0 -0
  225. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/localFileSuggestions.spec.ts +0 -0
  226. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/localFileSuggestions.ts +0 -0
  227. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/triggerDetection.spec.ts +0 -0
  228. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/triggerDetection.ts +0 -0
  229. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/types.ts +0 -0
  230. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/useChatSuggestions.ts +0 -0
  231. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/types.ts +0 -0
  232. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/useChatComposer.ts +0 -0
  233. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/useChatStream.spec.tsx +0 -0
  234. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/useChatStream.ts +0 -0
  235. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/ChatExperience.spec.tsx +0 -0
  236. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/ChatExperience.styles.tsx +0 -0
  237. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/ChatExperience.tsx +0 -0
  238. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/ChatExperienceComposer.styles.tsx +0 -0
  239. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/ChatExperienceComposer.tsx +0 -0
  240. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/ChatExperienceHeader.styles.tsx +0 -0
  241. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/ChatExperienceHeader.tsx +0 -0
  242. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/ThreadHistory.styles.tsx +0 -0
  243. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/ThreadHistory.tsx +0 -0
  244. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/chatStorage.spec.ts +0 -0
  245. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/chatStorage.ts +0 -0
  246. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/index.ts +0 -0
  247. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/types.ts +0 -0
  248. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/useChatExperience.spec.tsx +0 -0
  249. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/useChatExperience.ts +0 -0
  250. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/index.ts +0 -0
  251. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/testing/createMockChatStreamClient.ts +0 -0
  252. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/testing/createMockSuggestionProvider.ts +0 -0
  253. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/testing/index.ts +0 -0
  254. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/ChatMessage.tsx +0 -0
  255. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/ChatMessageActions.tsx +0 -0
  256. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/ChatMessageContent.spec.tsx +0 -0
  257. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/ChatMessageContent.tsx +0 -0
  258. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/ChatThread.spec.tsx +0 -0
  259. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/ChatThread.tsx +0 -0
  260. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/README.md +0 -0
  261. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/contentFormat.ts +0 -0
  262. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/index.ts +0 -0
  263. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/streaming.ts +0 -0
  264. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/types.ts +0 -0
  265. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/virtual-list/VirtualComponent.spec.tsx +0 -0
  266. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/virtual-list/VirtualComponent.tsx +0 -0
  267. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/virtual-list/VirtualComponentList.spec.tsx +0 -0
  268. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/virtual-list/VirtualComponentList.tsx +0 -0
  269. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/virtual-list/index.ts +0 -0
  270. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/fetch.service.md +0 -0
  271. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/sticky-navigation.md +0 -0
  272. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/sticky-navigation.spec.md +0 -0
  273. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/vitest-browser-config.md +0 -0
  274. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/api/routes/chat_routes.py +0 -0
  275. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/api/tests/test_chat.py +0 -0
  276. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/models/dtos/chat_dtos.py +0 -0
  277. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/models/dtos/conversation_history_dtos.py +0 -0
  278. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/models/entities/conversation_history.py +0 -0
  279. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/repos/conversation_history.py +0 -0
  280. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/services/agent_session_codec.py +0 -0
  281. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/services/chat_service.py +0 -0
  282. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/services/conversation_history_service.py +0 -0
  283. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/services/conversation_operations.py +0 -0
  284. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/services/history_codec.py +0 -0
  285. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/services/in_memory_history_store.py +0 -0
  286. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/services/postgres_history_store.py +0 -0
  287. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/services/protocols/conversation_history_store.py +0 -0
  288. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/services/protocols/conversation_runtime.py +0 -0
  289. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/services/protocols/llm_provider.py +0 -0
  290. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/tests/test_chat_dtos.py +0 -0
  291. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/tests/test_chat_service.py +0 -0
  292. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/tests/test_history_codec.py +0 -0
  293. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/tests/test_history_projection.py +0 -0
  294. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/tests/test_persistence_config.py +0 -0
  295. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/tests/test_postgres_history_store.py +0 -0
  296. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/models/dtos/__init__.py +0 -0
  297. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/models/dtos/vllm_model_dtos.py +0 -0
  298. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/services/agents/VLLM_SETUP.md +0 -0
  299. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/services/agents/__init__.py +0 -0
  300. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/services/agents/model_catalog.py +0 -0
  301. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/services/agents/vllm_agent_factory.py +0 -0
  302. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/services/agents/vllm_agent_factory_protocol.py +0 -0
  303. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/services/agents/vllm_inference_coordinator.py +0 -0
  304. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/services/runtimes/__init__.py +0 -0
  305. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/services/runtimes/agents_sdk.py +0 -0
  306. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/services/runtimes/agents_sdk_message_mapping.py +0 -0
  307. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/tests/test_agents_sdk_runtime.py +0 -0
  308. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/tests/test_vllm_model_catalog.py +0 -0
  309. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/tests/test_vllm_provider.py +0 -0
  310. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/special_files/camel_case_model.md +0 -0
  311. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/special_files/domain_container.md +0 -0
  312. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/special_files/domain_settings.md +0 -0
  313. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/special_files/dto_util.md +0 -0
  314. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/special_files/encrypted_column.md +0 -0
  315. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/special_files/logging.md +0 -0
  316. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/special_files/mapper_util.md +0 -0
  317. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/special_files/partial_update.md +0 -0
  318. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/special_files/test_encrypted_column.md +0 -0
  319. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/templates/__init__.py +0 -0
  320. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/templates/registry.py +0 -0
  321. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/ui/__init__.py +0 -0
  322. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/ui/console.py +0 -0
  323. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/ui/markdown.py +0 -0
  324. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/ui/prompt_session.py +0 -0
  325. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/ui/renderers.py +0 -0
  326. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/ui/theme.py +0 -0
  327. {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/workspace.py +0 -0
@@ -1,3 +1,20 @@
1
+ Metadata-Version: 2.4
2
+ Name: rpr-cli
3
+ Version: 0.3.8
4
+ Requires-Dist: typer>=0.24.1
5
+ Requires-Dist: jinja2>=3.1.5
6
+ Requires-Dist: pyyaml>=6.0.2
7
+ Requires-Dist: rich>=14.3.3
8
+ Requires-Dist: pathspec>=1.0.4
9
+ Requires-Dist: prompt-toolkit>=3.0.52
10
+ Requires-Dist: tomlkit>=0.15.0
11
+ Requires-Dist: packaging>=26.2
12
+ License-File: LICENSE
13
+ Summary: RPR CLI -- React Python Rust monorepo scaffolding orchestrator
14
+ License-Expression: MIT
15
+ Requires-Python: >=3.14
16
+ Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
17
+
1
18
  # RPR CLI
2
19
 
3
20
  React Python Rust monorepo scaffolding orchestrator.
@@ -18,7 +35,8 @@ Both install the `rpr` command.
18
35
  For development, editable install is fine:
19
36
 
20
37
  ```bash
21
- uv tool install -e .
38
+ uv sync
39
+ uv run maturin develop
22
40
  ```
23
41
 
24
42
  For an actual distributable install you can use in other projects, build the wheel first and install the built artifact:
@@ -34,6 +52,10 @@ From another local project you can also install the built artifact directly:
34
52
  uv add ../project-getting-started/dist/rpr_cli-*.whl
35
53
  ```
36
54
 
55
+ The published wheels are mixed Python/Rust distributions. The `rpr._native`
56
+ binding used by `rpr rename` and accelerated `rpr map` is installed alongside
57
+ the Python package; no separate parser installation is required.
58
+
37
59
  ## Usage
38
60
 
39
61
  ### 🚀 Scaffolding & Generation
@@ -57,9 +79,13 @@ Run `rpr rename <new-name>` from an initialized workspace root to update RPR
57
79
  metadata, package and Nx project names, imports, commands, paths, lockfiles, and
58
80
  matching references in user-added text files. The command shows its complete
59
81
  change plan before asking for confirmation. Use `--dry-run` to preview without
60
- writing or `--yes` to skip the prompt. Dependency directories, VCS data, build
61
- outputs, binary contents, and symlink targets are not changed. The outer workspace
62
- directory keeps its existing name.
82
+ writing or `--yes` to skip the prompt. On its first invocation, rename creates a
83
+ `.rename-ignore` file and stops so you can review the generated dependency,
84
+ environment, cache, and build-output exclusions before rerunning. The file uses
85
+ gitignore-style patterns and is independent of `.gitignore`, allowing ignored
86
+ source and experiments to remain in rename scope. Binary contents, VCS data, and
87
+ symlink targets are never changed. The outer workspace directory keeps its
88
+ existing name.
63
89
 
64
90
  `rpr init <project-name>` creates the project directory when it does not exist. If the directory already exists and is not an NX workspace, RPR initializes Git and runs `nx init` inside that directory.
65
91
 
@@ -200,13 +226,13 @@ The `chat` command also supports:
200
226
  # Install Python dependencies
201
227
  uv sync
202
228
 
203
- # Build the Rust extension (rpr_parser) — required for rpr map acceleration
204
- cd rpr-parser && uv run maturin develop && cd ..
229
+ # Rebuild the bundled Rust extension after native code changes
230
+ uv run maturin develop
205
231
  ```
206
232
 
207
- > **Note:** `uv tool install dist/rpr-*.whl` uses the root hatchling build backend and does **not** build the
208
- > Rust extension. You must run `maturin develop` separately before using `rpr map` with the Rust
209
- > backend. Without it, `rpr map` falls back to the pure-Python implementation automatically.
233
+ > **Note:** `uv tool install rpr-cli` installs the matching platform wheel with
234
+ > the Rust binding included. Building from a source checkout requires a Rust
235
+ > toolchain because Maturin compiles the same native module locally.
210
236
 
211
237
  #### Running Tests
212
238
 
@@ -220,7 +246,7 @@ uv run pytest tests/test_map_extractor.py
220
246
  # Single test
221
247
  uv run pytest tests/test_map_extractor.py::test_fallback_returns_correct_shape
222
248
 
223
- # Rust unit tests (rpr_parser crate)
249
+ # Rust unit tests (bundled native crate)
224
250
  cd rpr-parser && cargo test && cd ..
225
251
 
226
252
  # Lint and format
@@ -228,8 +254,8 @@ uv run ruff check .
228
254
  uv run ruff format .
229
255
  ```
230
256
 
231
- The Rust-path tests in `tests/test_map_extractor.py` are automatically skipped if the Rust
232
- extension hasn't been built yet — run `maturin develop` first to enable them.
257
+ The Rust-path tests in `tests/test_map_extractor.py` are automatically skipped if the bundled
258
+ extension has not been built yet — run `uv run maturin develop` first to enable them.
233
259
 
234
260
  ### Publishing To PyPI
235
261
 
@@ -245,10 +271,13 @@ No `PYPI_API_TOKEN` secret is required when publishing through GitHub Actions OI
245
271
  Release flow:
246
272
 
247
273
  ```bash
248
- # update src/rpr/__init__.py with the new version
249
- git commit -am "Release 0.1.2"
250
- git tag v0.1.2
274
+ # update src/rpr/__init__.py and rpr-parser/Cargo.toml to the same version
275
+ git commit -am "Release 0.3.8"
276
+ git tag v0.3.8
251
277
  git push origin main --tags
252
278
  ```
253
279
 
254
- The workflow in `.github/workflows/publish-pypi.yml` builds the sdist and wheel, checks that the tag matches the package version, and uploads `dist/*` to PyPI.
280
+ The workflow in `.github/workflows/publish-pypi.yml` checks both version declarations against the
281
+ tag, builds an sdist plus native wheels for Linux x86-64/AArch64, Windows x86-64, and macOS
282
+ x86-64/Apple Silicon, then publishes all artifacts to PyPI.
283
+
@@ -1,20 +1,3 @@
1
- Metadata-Version: 2.5
2
- Name: rpr-cli
3
- Version: 0.3.4
4
- Summary: RPR CLI -- React Python Rust monorepo scaffolding orchestrator
5
- License-Expression: MIT
6
- License-File: LICENSE
7
- Requires-Python: >=3.14
8
- Requires-Dist: jinja2>=3.1.5
9
- Requires-Dist: packaging>=26.2
10
- Requires-Dist: pathspec>=1.0.4
11
- Requires-Dist: prompt-toolkit>=3.0.52
12
- Requires-Dist: pyyaml>=6.0.2
13
- Requires-Dist: rich>=14.3.3
14
- Requires-Dist: tomlkit>=0.15.0
15
- Requires-Dist: typer>=0.24.1
16
- Description-Content-Type: text/markdown
17
-
18
1
  # RPR CLI
19
2
 
20
3
  React Python Rust monorepo scaffolding orchestrator.
@@ -35,7 +18,8 @@ Both install the `rpr` command.
35
18
  For development, editable install is fine:
36
19
 
37
20
  ```bash
38
- uv tool install -e .
21
+ uv sync
22
+ uv run maturin develop
39
23
  ```
40
24
 
41
25
  For an actual distributable install you can use in other projects, build the wheel first and install the built artifact:
@@ -51,6 +35,10 @@ From another local project you can also install the built artifact directly:
51
35
  uv add ../project-getting-started/dist/rpr_cli-*.whl
52
36
  ```
53
37
 
38
+ The published wheels are mixed Python/Rust distributions. The `rpr._native`
39
+ binding used by `rpr rename` and accelerated `rpr map` is installed alongside
40
+ the Python package; no separate parser installation is required.
41
+
54
42
  ## Usage
55
43
 
56
44
  ### 🚀 Scaffolding & Generation
@@ -74,9 +62,13 @@ Run `rpr rename <new-name>` from an initialized workspace root to update RPR
74
62
  metadata, package and Nx project names, imports, commands, paths, lockfiles, and
75
63
  matching references in user-added text files. The command shows its complete
76
64
  change plan before asking for confirmation. Use `--dry-run` to preview without
77
- writing or `--yes` to skip the prompt. Dependency directories, VCS data, build
78
- outputs, binary contents, and symlink targets are not changed. The outer workspace
79
- directory keeps its existing name.
65
+ writing or `--yes` to skip the prompt. On its first invocation, rename creates a
66
+ `.rename-ignore` file and stops so you can review the generated dependency,
67
+ environment, cache, and build-output exclusions before rerunning. The file uses
68
+ gitignore-style patterns and is independent of `.gitignore`, allowing ignored
69
+ source and experiments to remain in rename scope. Binary contents, VCS data, and
70
+ symlink targets are never changed. The outer workspace directory keeps its
71
+ existing name.
80
72
 
81
73
  `rpr init <project-name>` creates the project directory when it does not exist. If the directory already exists and is not an NX workspace, RPR initializes Git and runs `nx init` inside that directory.
82
74
 
@@ -217,13 +209,13 @@ The `chat` command also supports:
217
209
  # Install Python dependencies
218
210
  uv sync
219
211
 
220
- # Build the Rust extension (rpr_parser) — required for rpr map acceleration
221
- cd rpr-parser && uv run maturin develop && cd ..
212
+ # Rebuild the bundled Rust extension after native code changes
213
+ uv run maturin develop
222
214
  ```
223
215
 
224
- > **Note:** `uv tool install dist/rpr-*.whl` uses the root hatchling build backend and does **not** build the
225
- > Rust extension. You must run `maturin develop` separately before using `rpr map` with the Rust
226
- > backend. Without it, `rpr map` falls back to the pure-Python implementation automatically.
216
+ > **Note:** `uv tool install rpr-cli` installs the matching platform wheel with
217
+ > the Rust binding included. Building from a source checkout requires a Rust
218
+ > toolchain because Maturin compiles the same native module locally.
227
219
 
228
220
  #### Running Tests
229
221
 
@@ -237,7 +229,7 @@ uv run pytest tests/test_map_extractor.py
237
229
  # Single test
238
230
  uv run pytest tests/test_map_extractor.py::test_fallback_returns_correct_shape
239
231
 
240
- # Rust unit tests (rpr_parser crate)
232
+ # Rust unit tests (bundled native crate)
241
233
  cd rpr-parser && cargo test && cd ..
242
234
 
243
235
  # Lint and format
@@ -245,8 +237,8 @@ uv run ruff check .
245
237
  uv run ruff format .
246
238
  ```
247
239
 
248
- The Rust-path tests in `tests/test_map_extractor.py` are automatically skipped if the Rust
249
- extension hasn't been built yet — run `maturin develop` first to enable them.
240
+ The Rust-path tests in `tests/test_map_extractor.py` are automatically skipped if the bundled
241
+ extension has not been built yet — run `uv run maturin develop` first to enable them.
250
242
 
251
243
  ### Publishing To PyPI
252
244
 
@@ -262,10 +254,12 @@ No `PYPI_API_TOKEN` secret is required when publishing through GitHub Actions OI
262
254
  Release flow:
263
255
 
264
256
  ```bash
265
- # update src/rpr/__init__.py with the new version
266
- git commit -am "Release 0.1.2"
267
- git tag v0.1.2
257
+ # update src/rpr/__init__.py and rpr-parser/Cargo.toml to the same version
258
+ git commit -am "Release 0.3.8"
259
+ git tag v0.3.8
268
260
  git push origin main --tags
269
261
  ```
270
262
 
271
- The workflow in `.github/workflows/publish-pypi.yml` builds the sdist and wheel, checks that the tag matches the package version, and uploads `dist/*` to PyPI.
263
+ The workflow in `.github/workflows/publish-pypi.yml` checks both version declarations against the
264
+ tag, builds an sdist plus native wheels for Linux x86-64/AArch64, Windows x86-64, and macOS
265
+ x86-64/Apple Silicon, then publishes all artifacts to PyPI.
@@ -23,11 +23,15 @@ rpr = "rpr.cli:app"
23
23
  dev = ["pytest>=9.0.2", "maturin>=1.8.2"]
24
24
 
25
25
  [build-system]
26
- requires = ["hatchling"]
27
- build-backend = "hatchling.build"
26
+ requires = ["maturin>=1.12.6,<2.0"]
27
+ build-backend = "maturin"
28
28
 
29
- [tool.hatch.build.targets.wheel]
30
- packages = ["src/rpr"]
29
+ [tool.maturin]
30
+ manifest-path = "rpr-parser/Cargo.toml"
31
+ python-source = "src"
32
+ module-name = "rpr._native"
33
+ features = ["pyo3/extension-module"]
34
+ include = [{ path = "LICENSE", format = "sdist" }]
31
35
 
32
- [tool.hatch.version]
33
- path = "src/rpr/__init__.py"
36
+ [tool.pytest.ini_options]
37
+ testpaths = ["tests"]
@@ -1981,7 +1981,7 @@ dependencies = [
1981
1981
 
1982
1982
  [[package]]
1983
1983
  name = "rpr-parser"
1984
- version = "0.1.0"
1984
+ version = "0.3.8"
1985
1985
  dependencies = [
1986
1986
  "dirs",
1987
1987
  "dotenvy",
@@ -1991,8 +1991,12 @@ dependencies = [
1991
1991
  "pyo3-log",
1992
1992
  "rayon",
1993
1993
  "sea-orm",
1994
+ "serde_json",
1995
+ "serde_yaml",
1996
+ "sha2",
1994
1997
  "tempfile",
1995
1998
  "tokio",
1999
+ "toml",
1996
2000
  "tree-sitter",
1997
2001
  "tree-sitter-cpp",
1998
2002
  "tree-sitter-javascript",
@@ -2283,6 +2287,15 @@ dependencies = [
2283
2287
  "zmij",
2284
2288
  ]
2285
2289
 
2290
+ [[package]]
2291
+ name = "serde_spanned"
2292
+ version = "1.1.1"
2293
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2294
+ checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26"
2295
+ dependencies = [
2296
+ "serde_core",
2297
+ ]
2298
+
2286
2299
  [[package]]
2287
2300
  name = "serde_urlencoded"
2288
2301
  version = "0.7.1"
@@ -2295,6 +2308,19 @@ dependencies = [
2295
2308
  "serde",
2296
2309
  ]
2297
2310
 
2311
+ [[package]]
2312
+ name = "serde_yaml"
2313
+ version = "0.9.34+deprecated"
2314
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2315
+ checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47"
2316
+ dependencies = [
2317
+ "indexmap",
2318
+ "itoa",
2319
+ "ryu",
2320
+ "serde",
2321
+ "unsafe-libyaml",
2322
+ ]
2323
+
2298
2324
  [[package]]
2299
2325
  name = "sha1"
2300
2326
  version = "0.10.6"
@@ -2807,6 +2833,30 @@ dependencies = [
2807
2833
  "tokio",
2808
2834
  ]
2809
2835
 
2836
+ [[package]]
2837
+ name = "toml"
2838
+ version = "0.9.12+spec-1.1.0"
2839
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2840
+ checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863"
2841
+ dependencies = [
2842
+ "indexmap",
2843
+ "serde_core",
2844
+ "serde_spanned",
2845
+ "toml_datetime 0.7.5+spec-1.1.0",
2846
+ "toml_parser",
2847
+ "toml_writer",
2848
+ "winnow 0.7.15",
2849
+ ]
2850
+
2851
+ [[package]]
2852
+ name = "toml_datetime"
2853
+ version = "0.7.5+spec-1.1.0"
2854
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2855
+ checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347"
2856
+ dependencies = [
2857
+ "serde_core",
2858
+ ]
2859
+
2810
2860
  [[package]]
2811
2861
  name = "toml_datetime"
2812
2862
  version = "1.1.0+spec-1.1.0"
@@ -2823,9 +2873,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
2823
2873
  checksum = "16bff38f1d86c47f9ff0647e6838d7bb362522bdf44006c7068c2b1e606f1f3c"
2824
2874
  dependencies = [
2825
2875
  "indexmap",
2826
- "toml_datetime",
2876
+ "toml_datetime 1.1.0+spec-1.1.0",
2827
2877
  "toml_parser",
2828
- "winnow",
2878
+ "winnow 1.0.0",
2829
2879
  ]
2830
2880
 
2831
2881
  [[package]]
@@ -2834,9 +2884,15 @@ version = "1.1.0+spec-1.1.0"
2834
2884
  source = "registry+https://github.com/rust-lang/crates.io-index"
2835
2885
  checksum = "2334f11ee363607eb04df9b8fc8a13ca1715a72ba8662a26ac285c98aabb4011"
2836
2886
  dependencies = [
2837
- "winnow",
2887
+ "winnow 1.0.0",
2838
2888
  ]
2839
2889
 
2890
+ [[package]]
2891
+ name = "toml_writer"
2892
+ version = "1.1.2+spec-1.1.0"
2893
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2894
+ checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2"
2895
+
2840
2896
  [[package]]
2841
2897
  name = "tracing"
2842
2898
  version = "0.1.44"
@@ -2978,6 +3034,12 @@ version = "0.2.6"
2978
3034
  source = "registry+https://github.com/rust-lang/crates.io-index"
2979
3035
  checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
2980
3036
 
3037
+ [[package]]
3038
+ name = "unsafe-libyaml"
3039
+ version = "0.2.11"
3040
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3041
+ checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861"
3042
+
2981
3043
  [[package]]
2982
3044
  name = "url"
2983
3045
  version = "2.5.8"
@@ -3314,6 +3376,12 @@ version = "0.48.5"
3314
3376
  source = "registry+https://github.com/rust-lang/crates.io-index"
3315
3377
  checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
3316
3378
 
3379
+ [[package]]
3380
+ name = "winnow"
3381
+ version = "0.7.15"
3382
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3383
+ checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945"
3384
+
3317
3385
  [[package]]
3318
3386
  name = "winnow"
3319
3387
  version = "1.0.0"
@@ -1,14 +1,14 @@
1
1
  [package]
2
2
  name = "rpr-parser"
3
- version = "0.1.0"
3
+ version = "0.3.8"
4
4
  edition = "2021"
5
5
 
6
6
  [lib]
7
- name = "rpr_parser"
7
+ name = "_native"
8
8
  crate-type = ["cdylib"]
9
9
 
10
10
  [dependencies]
11
- pyo3 = { version = "0.28", features = ["extension-module"] }
11
+ pyo3 = { version = "0.28", features = ["extension-module", "abi3-py314"] }
12
12
  rayon = "1.11"
13
13
  walkdir = "2"
14
14
  tree-sitter = "0.26"
@@ -18,6 +18,11 @@ tree-sitter-javascript = "0.25"
18
18
  tree-sitter-rust = "0.24"
19
19
  tree-sitter-cpp = "0.23"
20
20
  ignore = "0.4.25"
21
+ serde_json = "1"
22
+ serde_yaml = "0.9"
23
+ sha2 = "0.10"
24
+ tempfile = "3"
25
+ toml = "0.9"
21
26
  sea-orm = { version = "2.0.0-rc", features = [ "sqlx-sqlite", "runtime-tokio", "macros", "debug-print", "with-uuid", "with-chrono", "with-time", "with-json" ] }
22
27
  uuid = { version = "1", features = ["v4"] }
23
28
  dotenvy = "0.15.7"
@@ -26,9 +31,6 @@ dirs = "6.0.0"
26
31
  log = "0.4.29"
27
32
  pyo3-log = "0.13.3"
28
33
 
29
- [dev-dependencies]
30
- tempfile = "3"
31
-
32
34
  [profile.release]
33
35
  lto = true
34
36
  codegen-units = 1
@@ -10,6 +10,7 @@ mod graph;
10
10
  mod models;
11
11
  mod parse;
12
12
  mod repos;
13
+ mod rename;
13
14
  mod resolve;
14
15
  mod walker;
15
16
 
@@ -130,7 +131,7 @@ fn build_dependency_graph(py: Python<'_>, abs_root: String) -> PyResult<Py<PyAny
130
131
  }
131
132
 
132
133
  #[pymodule]
133
- fn rpr_parser(m: &Bound<'_, PyModule>) -> PyResult<()> {
134
+ fn _native(m: &Bound<'_, PyModule>) -> PyResult<()> {
134
135
  init_logging();
135
136
  // Register a tiny smoke-test function first so Python/Jupyter can confirm
136
137
  // the compiled module loaded before we move on to more complex APIs.
@@ -138,5 +139,9 @@ fn rpr_parser(m: &Bound<'_, PyModule>) -> PyResult<()> {
138
139
  m.add_function(wrap_pyfunction!(close_env, m)?)?;
139
140
  m.add_function(wrap_pyfunction!(reset_logging, m)?)?;
140
141
  m.add_function(wrap_pyfunction!(build_dependency_graph, m)?)?;
142
+ m.add_class::<rename::NativeRenamePlan>()?;
143
+ m.add_function(wrap_pyfunction!(rename::ensure_rename_ignore, m)?)?;
144
+ m.add_function(wrap_pyfunction!(rename::plan_project_rename, m)?)?;
145
+ m.add_function(wrap_pyfunction!(rename::apply_project_rename, m)?)?;
141
146
  Ok(())
142
147
  }