rpr-cli 0.3.5__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 (326) hide show
  1. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/PKG-INFO +32 -25
  2. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/README.md +20 -14
  3. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/pyproject.toml +10 -6
  4. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/rpr-parser/Cargo.lock +1 -1
  5. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/rpr-parser/Cargo.toml +3 -3
  6. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/rpr-parser/src/lib.rs +1 -1
  7. rpr_cli-0.3.8/src/rpr/__init__.py +1 -0
  8. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/map/extractor.py +1 -1
  9. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/project_rename.py +8 -6
  10. rpr_cli-0.3.5/.github/agents/story.agent.md +0 -165
  11. rpr_cli-0.3.5/.github/workflows/publish-pypi.yml +0 -59
  12. rpr_cli-0.3.5/.gitignore +0 -28
  13. rpr_cli-0.3.5/CLAUDE.md +0 -70
  14. rpr_cli-0.3.5/GEMINI.md +0 -0
  15. rpr_cli-0.3.5/changelogs/mui_v9.txt +0 -2178
  16. rpr_cli-0.3.5/code-map.md +0 -155
  17. rpr_cli-0.3.5/nx_uv_setup.md +0 -841
  18. rpr_cli-0.3.5/patch_output.py +0 -150
  19. rpr_cli-0.3.5/plan-languageAwareTemplateAdd.prompt.md +0 -63
  20. rpr_cli-0.3.5/rpr-parser/pyproject.toml +0 -12
  21. rpr_cli-0.3.5/rpr-parser/uv.lock +0 -8
  22. rpr_cli-0.3.5/special_files.md +0 -20
  23. rpr_cli-0.3.5/src/rpr/__init__.py +0 -1
  24. rpr_cli-0.3.5/stories/README.md +0 -93
  25. rpr_cli-0.3.5/stories/chat-attachment-upload-gap.md +0 -306
  26. rpr_cli-0.3.5/stories/completed/00-bootstrap-cli.md +0 -61
  27. rpr_cli-0.3.5/stories/completed/01-rpr-init.md +0 -215
  28. rpr_cli-0.3.5/stories/completed/02-rpr-generate-domain.md +0 -89
  29. rpr_cli-0.3.5/stories/completed/03-rpr-generate-api.md +0 -39
  30. rpr_cli-0.3.5/stories/completed/04-rpr-generate-ui.md +0 -104
  31. rpr_cli-0.3.5/stories/completed/05-rpr-generate-engine.md +0 -111
  32. rpr_cli-0.3.5/stories/completed/06-rpr-generate-storybook.md +0 -89
  33. rpr_cli-0.3.5/stories/completed/07-rpr-sync-rules.md +0 -157
  34. rpr_cli-0.3.5/stories/completed/08-rpr-add-template.md +0 -69
  35. rpr_cli-0.3.5/stories/completed/09-rpr-check.md +0 -115
  36. rpr_cli-0.3.5/stories/completed/10-rpr-domain-config.md +0 -120
  37. rpr_cli-0.3.5/stories/completed/chat/18-rpr-terminal-ui-foundation.md +0 -37
  38. rpr_cli-0.3.5/stories/completed/chat/19-rpr-markdown-rendering.md +0 -38
  39. rpr_cli-0.3.5/stories/completed/chat/20-rpr-chat-repl.md +0 -36
  40. rpr_cli-0.3.5/stories/completed/chat/21-rpr-agent-tool-loop.md +0 -40
  41. rpr_cli-0.3.5/stories/completed/chat/22-rpr-chat-tui.md +0 -44
  42. rpr_cli-0.3.5/stories/completed/chat/23-rpr-chat-unified-command-shell.md +0 -96
  43. rpr_cli-0.3.5/stories/completed/chat/24-rpr-async-chat-runtime-and-services.md +0 -75
  44. rpr_cli-0.3.5/stories/completed/chat/25-rpr-prompt-service-and-conversation-lifecycle.md +0 -76
  45. rpr_cli-0.3.5/stories/completed/chat/26-rpr-shared-command-catalog.md +0 -213
  46. rpr_cli-0.3.5/stories/completed/chat/27-rpr-slash-command-selection-panel.md +0 -61
  47. rpr_cli-0.3.5/stories/completed/chat/28-rpr-chat-cancellable-and-multiline-input.md +0 -63
  48. rpr_cli-0.3.5/stories/completed/chat/29-rpr-file-context-selection.md +0 -52
  49. rpr_cli-0.3.5/stories/completed/map/11-rpr-map-command.md +0 -32
  50. rpr_cli-0.3.5/stories/completed/map/12-rpr-map-file-walker.md +0 -51
  51. rpr_cli-0.3.5/stories/completed/map/13-rpr-map-rust-engine.md +0 -126
  52. rpr_cli-0.3.5/stories/completed/map/13a-rpr-map-gitignore.md +0 -34
  53. rpr_cli-0.3.5/stories/completed/map/14-rpr-map-graph-builder.md +0 -94
  54. rpr_cli-0.3.5/stories/completed/map/15-rpr-map-analysis-bridge.md +0 -94
  55. rpr_cli-0.3.5/stories/completed/map/16-rpr-map-layer-classifier.md +0 -60
  56. rpr_cli-0.3.5/stories/completed/map/17-rpr-map-output.md +0 -94
  57. rpr_cli-0.3.5/stories/completed/map/17a-rpr-map-directory-topology.md +0 -65
  58. rpr_cli-0.3.5/stories/completed/map/17b-rpr-map-architecture-assessment.md +0 -61
  59. rpr_cli-0.3.5/stories/completed/map/17c-rpr-map-representative-chains.md +0 -52
  60. rpr_cli-0.3.5/stories/completed/map/17d-rpr-map-multi-resolution-output.md +0 -72
  61. rpr_cli-0.3.5/stories/map/30-rpr-map-directory-view-and-cycle-detection.md +0 -38
  62. rpr_cli-0.3.5/stories/map/31-rpr-map-coupling-hotspots-and-verdict-reasoning.md +0 -41
  63. rpr_cli-0.3.5/stories/map/32-rpr-map-dependencies-responsibilities-and-test-coverage.md +0 -98
  64. rpr_cli-0.3.5/stories/package-maintenance/default-vite-8-oxc-toolchain.md +0 -142
  65. rpr_cli-0.3.5/stories/package-maintenance/rpr-update-packages.md +0 -183
  66. rpr_cli-0.3.5/stories/package-maintenance/typescript-7-frontend-scaffold-compatibility.md +0 -123
  67. rpr_cli-0.3.5/tests/__init__.py +0 -0
  68. rpr_cli-0.3.5/tests/test_add.py +0 -753
  69. rpr_cli-0.3.5/tests/test_architecture.py +0 -659
  70. rpr_cli-0.3.5/tests/test_architecture_unwrapped.py +0 -152
  71. rpr_cli-0.3.5/tests/test_catalog.py +0 -222
  72. rpr_cli-0.3.5/tests/test_chat.py +0 -720
  73. rpr_cli-0.3.5/tests/test_chat_service.py +0 -282
  74. rpr_cli-0.3.5/tests/test_check.py +0 -564
  75. rpr_cli-0.3.5/tests/test_completer.py +0 -131
  76. rpr_cli-0.3.5/tests/test_context.py +0 -376
  77. rpr_cli-0.3.5/tests/test_generate_api.py +0 -125
  78. rpr_cli-0.3.5/tests/test_generate_domain.py +0 -327
  79. rpr_cli-0.3.5/tests/test_generate_engine.py +0 -133
  80. rpr_cli-0.3.5/tests/test_generate_storybook.py +0 -225
  81. rpr_cli-0.3.5/tests/test_generate_ui.py +0 -288
  82. rpr_cli-0.3.5/tests/test_init.py +0 -744
  83. rpr_cli-0.3.5/tests/test_map.py +0 -80
  84. rpr_cli-0.3.5/tests/test_map_chains.py +0 -554
  85. rpr_cli-0.3.5/tests/test_map_classifier.py +0 -330
  86. rpr_cli-0.3.5/tests/test_map_coverage.py +0 -182
  87. rpr_cli-0.3.5/tests/test_map_dependencies.py +0 -266
  88. rpr_cli-0.3.5/tests/test_map_extractor.py +0 -455
  89. rpr_cli-0.3.5/tests/test_map_graph.py +0 -309
  90. rpr_cli-0.3.5/tests/test_map_output.py +0 -1397
  91. rpr_cli-0.3.5/tests/test_map_responsibility.py +0 -220
  92. rpr_cli-0.3.5/tests/test_map_topology.py +0 -651
  93. rpr_cli-0.3.5/tests/test_map_walker.py +0 -448
  94. rpr_cli-0.3.5/tests/test_package_updates.py +0 -175
  95. rpr_cli-0.3.5/tests/test_packaging.py +0 -19
  96. rpr_cli-0.3.5/tests/test_prompt_session.py +0 -236
  97. rpr_cli-0.3.5/tests/test_refresh.py +0 -60
  98. rpr_cli-0.3.5/tests/test_rename.py +0 -433
  99. rpr_cli-0.3.5/tests/test_rpr_parser_stub.py +0 -15
  100. rpr_cli-0.3.5/tests/test_selector.py +0 -189
  101. rpr_cli-0.3.5/tests/test_settings.py +0 -112
  102. rpr_cli-0.3.5/tests/test_sync.py +0 -240
  103. rpr_cli-0.3.5/tests/test_ui.py +0 -133
  104. rpr_cli-0.3.5/tests/test_update_packages.py +0 -209
  105. rpr_cli-0.3.5/untitled:plan-chatAttachmentUploadGap.prompt.md +0 -52
  106. rpr_cli-0.3.5/update_output.py +0 -134
  107. rpr_cli-0.3.5/uv.lock +0 -309
  108. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/LICENSE +0 -0
  109. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/rpr-parser/src/config/container.rs +0 -0
  110. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/rpr-parser/src/config/mod.rs +0 -0
  111. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/rpr-parser/src/config/settings.rs +0 -0
  112. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/rpr-parser/src/graph.rs +0 -0
  113. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/rpr-parser/src/models/dtos/mod.rs +0 -0
  114. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/rpr-parser/src/models/entities/mod.rs +0 -0
  115. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/rpr-parser/src/models/entities/users.rs +0 -0
  116. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/rpr-parser/src/models/mod.rs +0 -0
  117. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/rpr-parser/src/parse.rs +0 -0
  118. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/rpr-parser/src/rename.rs +0 -0
  119. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/rpr-parser/src/repos/base.rs +0 -0
  120. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/rpr-parser/src/repos/mod.rs +0 -0
  121. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/rpr-parser/src/repos/users.rs +0 -0
  122. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/rpr-parser/src/resolve.rs +0 -0
  123. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/rpr-parser/src/walker.rs +0 -0
  124. /rpr_cli-0.3.5/rpr-parser/rpr_parser.pyi → /rpr_cli-0.3.8/src/rpr/_native.pyi +0 -0
  125. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/agent/__init__.py +0 -0
  126. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/agent/approval.py +0 -0
  127. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/agent/bootstrap.py +0 -0
  128. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/agent/client.py +0 -0
  129. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/agent/control.py +0 -0
  130. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/agent/mock.py +0 -0
  131. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/agent/runtime.py +0 -0
  132. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/agent/session.py +0 -0
  133. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/agent/tools/__init__.py +0 -0
  134. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/agent/tools/base.py +0 -0
  135. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/agent/tools/mutating.py +0 -0
  136. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/agent/tools/readonly.py +0 -0
  137. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/agent/tools/registry.py +0 -0
  138. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/application/__init__.py +0 -0
  139. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/application/catalog.py +0 -0
  140. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/application/chat_service.py +0 -0
  141. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/application/checks.py +0 -0
  142. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/application/cli_adapter.py +0 -0
  143. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/application/completer.py +0 -0
  144. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/application/conversation_service.py +0 -0
  145. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/application/prompt_service.py +0 -0
  146. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/application/selector.py +0 -0
  147. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/application/shell.py +0 -0
  148. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/checks/__init__.py +0 -0
  149. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/checks/base.py +0 -0
  150. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/checks/instructions.py +0 -0
  151. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/checks/packages.py +0 -0
  152. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/checks/workspace.py +0 -0
  153. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/cli.py +0 -0
  154. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/commands/__init__.py +0 -0
  155. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/commands/add.py +0 -0
  156. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/commands/chat.py +0 -0
  157. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/commands/check.py +0 -0
  158. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/commands/generate/__init__.py +0 -0
  159. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/commands/generate/api.py +0 -0
  160. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/commands/generate/domain.py +0 -0
  161. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/commands/generate/engine.py +0 -0
  162. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/commands/generate/storybook.py +0 -0
  163. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/commands/generate/ui.py +0 -0
  164. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/commands/init.py +0 -0
  165. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/commands/map.py +0 -0
  166. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/commands/refresh.py +0 -0
  167. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/commands/rename.py +0 -0
  168. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/commands/settings.py +0 -0
  169. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/commands/sync.py +0 -0
  170. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/commands/update.py +0 -0
  171. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/context.py +0 -0
  172. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/dependencies.py +0 -0
  173. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/dependency_manifest_data.py +0 -0
  174. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/generators/__init__.py +0 -0
  175. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/generators/base.py +0 -0
  176. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/generators/claude.py +0 -0
  177. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/generators/codex.py +0 -0
  178. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/generators/copilot.py +0 -0
  179. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/generators/cursor.py +0 -0
  180. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/generators/gemini.py +0 -0
  181. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/generators/github.py +0 -0
  182. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/manifest_refresh.py +0 -0
  183. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/map/__init__.py +0 -0
  184. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/map/architecture.py +0 -0
  185. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/map/chains.py +0 -0
  186. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/map/classifier.py +0 -0
  187. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/map/coverage.py +0 -0
  188. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/map/dependencies.py +0 -0
  189. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/map/graph.py +0 -0
  190. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/map/output.py +0 -0
  191. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/map/responsibility.py +0 -0
  192. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/map/topology.py +0 -0
  193. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/map/walker.py +0 -0
  194. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/package_updates.py +0 -0
  195. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/domain/base_entity.md +0 -0
  196. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/domain/base_repo.md +0 -0
  197. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/domain/container.md +0 -0
  198. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/domain/settings.md +0 -0
  199. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/instructions/all.instructions.md +0 -0
  200. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/instructions/api.instructions.md +0 -0
  201. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/instructions/domain.instructions.md +0 -0
  202. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/instructions/frontend.instructions.md +0 -0
  203. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/instructions/rust-engine.instructions.md +0 -0
  204. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/instructions/setup-guide.instructions.md +0 -0
  205. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/instructions/tooling-setup.instructions.md +0 -0
  206. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/instructions/tooling.instructions.md +0 -0
  207. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/BACKEND_FLOW.md +0 -0
  208. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/README.md +0 -0
  209. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/client/content.ts +0 -0
  210. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/client/httpChatStreamClient.spec.ts +0 -0
  211. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/client/httpChatStreamClient.ts +0 -0
  212. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/client/index.ts +0 -0
  213. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/client/types.ts +0 -0
  214. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/ChatComposer.spec.tsx +0 -0
  215. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/ChatComposer.tsx +0 -0
  216. {rpr_cli-0.3.5 → 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
  217. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/fileDrop.spec.ts +0 -0
  218. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/fileDrop.ts +0 -0
  219. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/index.ts +0 -0
  220. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/ChatComposerMentionTokens.tsx +0 -0
  221. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/ChatSuggestionsPopover.tsx +0 -0
  222. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/LocalFileSuggestionAction.tsx +0 -0
  223. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/index.ts +0 -0
  224. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/localFileSuggestions.spec.ts +0 -0
  225. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/localFileSuggestions.ts +0 -0
  226. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/triggerDetection.spec.ts +0 -0
  227. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/triggerDetection.ts +0 -0
  228. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/types.ts +0 -0
  229. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/useChatSuggestions.ts +0 -0
  230. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/types.ts +0 -0
  231. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/useChatComposer.ts +0 -0
  232. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/useChatStream.spec.tsx +0 -0
  233. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/useChatStream.ts +0 -0
  234. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/ChatExperience.spec.tsx +0 -0
  235. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/ChatExperience.styles.tsx +0 -0
  236. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/ChatExperience.tsx +0 -0
  237. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/ChatExperienceComposer.styles.tsx +0 -0
  238. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/ChatExperienceComposer.tsx +0 -0
  239. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/ChatExperienceHeader.styles.tsx +0 -0
  240. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/ChatExperienceHeader.tsx +0 -0
  241. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/ThreadHistory.styles.tsx +0 -0
  242. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/ThreadHistory.tsx +0 -0
  243. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/chatStorage.spec.ts +0 -0
  244. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/chatStorage.ts +0 -0
  245. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/index.ts +0 -0
  246. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/types.ts +0 -0
  247. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/useChatExperience.spec.tsx +0 -0
  248. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/useChatExperience.ts +0 -0
  249. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/index.ts +0 -0
  250. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/testing/createMockChatStreamClient.ts +0 -0
  251. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/testing/createMockSuggestionProvider.ts +0 -0
  252. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/testing/index.ts +0 -0
  253. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/ChatMessage.tsx +0 -0
  254. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/ChatMessageActions.tsx +0 -0
  255. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/ChatMessageContent.spec.tsx +0 -0
  256. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/ChatMessageContent.tsx +0 -0
  257. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/ChatThread.spec.tsx +0 -0
  258. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/ChatThread.tsx +0 -0
  259. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/README.md +0 -0
  260. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/contentFormat.ts +0 -0
  261. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/index.ts +0 -0
  262. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/streaming.ts +0 -0
  263. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/types.ts +0 -0
  264. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/virtual-list/VirtualComponent.spec.tsx +0 -0
  265. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/virtual-list/VirtualComponent.tsx +0 -0
  266. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/virtual-list/VirtualComponentList.spec.tsx +0 -0
  267. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/virtual-list/VirtualComponentList.tsx +0 -0
  268. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/virtual-list/index.ts +0 -0
  269. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/fetch.service.md +0 -0
  270. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/sticky-navigation.md +0 -0
  271. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/sticky-navigation.spec.md +0 -0
  272. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/vitest-browser-config.md +0 -0
  273. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/api/routes/chat_routes.py +0 -0
  274. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/api/tests/test_chat.py +0 -0
  275. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/models/dtos/chat_dtos.py +0 -0
  276. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/models/dtos/conversation_history_dtos.py +0 -0
  277. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/models/entities/conversation_history.py +0 -0
  278. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/repos/conversation_history.py +0 -0
  279. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/services/agent_session_codec.py +0 -0
  280. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/services/chat_service.py +0 -0
  281. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/services/conversation_history_service.py +0 -0
  282. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/services/conversation_operations.py +0 -0
  283. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/services/history_codec.py +0 -0
  284. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/services/in_memory_history_store.py +0 -0
  285. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/services/postgres_history_store.py +0 -0
  286. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/services/protocols/conversation_history_store.py +0 -0
  287. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/services/protocols/conversation_runtime.py +0 -0
  288. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/services/protocols/llm_provider.py +0 -0
  289. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/tests/test_chat_dtos.py +0 -0
  290. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/tests/test_chat_service.py +0 -0
  291. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/tests/test_history_codec.py +0 -0
  292. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/tests/test_history_projection.py +0 -0
  293. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/tests/test_persistence_config.py +0 -0
  294. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/tests/test_postgres_history_store.py +0 -0
  295. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/models/dtos/__init__.py +0 -0
  296. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/models/dtos/vllm_model_dtos.py +0 -0
  297. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/services/agents/VLLM_SETUP.md +0 -0
  298. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/services/agents/__init__.py +0 -0
  299. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/services/agents/model_catalog.py +0 -0
  300. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/services/agents/vllm_agent_factory.py +0 -0
  301. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/services/agents/vllm_agent_factory_protocol.py +0 -0
  302. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/services/agents/vllm_inference_coordinator.py +0 -0
  303. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/services/runtimes/__init__.py +0 -0
  304. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/services/runtimes/agents_sdk.py +0 -0
  305. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/services/runtimes/agents_sdk_message_mapping.py +0 -0
  306. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/tests/test_agents_sdk_runtime.py +0 -0
  307. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/tests/test_vllm_model_catalog.py +0 -0
  308. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/vllm_provider/domain/tests/test_vllm_provider.py +0 -0
  309. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/special_files/camel_case_model.md +0 -0
  310. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/special_files/domain_container.md +0 -0
  311. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/special_files/domain_settings.md +0 -0
  312. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/special_files/dto_util.md +0 -0
  313. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/special_files/encrypted_column.md +0 -0
  314. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/special_files/logging.md +0 -0
  315. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/special_files/mapper_util.md +0 -0
  316. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/special_files/partial_update.md +0 -0
  317. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/scaffolds/special_files/test_encrypted_column.md +0 -0
  318. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/templates/__init__.py +0 -0
  319. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/templates/registry.py +0 -0
  320. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/ui/__init__.py +0 -0
  321. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/ui/console.py +0 -0
  322. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/ui/markdown.py +0 -0
  323. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/ui/prompt_session.py +0 -0
  324. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/ui/renderers.py +0 -0
  325. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/ui/theme.py +0 -0
  326. {rpr_cli-0.3.5 → rpr_cli-0.3.8}/src/rpr/workspace.py +0 -0
@@ -1,19 +1,19 @@
1
- Metadata-Version: 2.5
1
+ Metadata-Version: 2.4
2
2
  Name: rpr-cli
3
- Version: 0.3.5
4
- Summary: RPR CLI -- React Python Rust monorepo scaffolding orchestrator
5
- License-Expression: MIT
6
- License-File: LICENSE
7
- Requires-Python: >=3.14
3
+ Version: 0.3.8
4
+ Requires-Dist: typer>=0.24.1
8
5
  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
6
  Requires-Dist: pyyaml>=6.0.2
13
7
  Requires-Dist: rich>=14.3.3
8
+ Requires-Dist: pathspec>=1.0.4
9
+ Requires-Dist: prompt-toolkit>=3.0.52
14
10
  Requires-Dist: tomlkit>=0.15.0
15
- Requires-Dist: typer>=0.24.1
16
- Description-Content-Type: text/markdown
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
17
 
18
18
  # RPR CLI
19
19
 
@@ -35,7 +35,8 @@ Both install the `rpr` command.
35
35
  For development, editable install is fine:
36
36
 
37
37
  ```bash
38
- uv tool install -e .
38
+ uv sync
39
+ uv run maturin develop
39
40
  ```
40
41
 
41
42
  For an actual distributable install you can use in other projects, build the wheel first and install the built artifact:
@@ -51,6 +52,10 @@ From another local project you can also install the built artifact directly:
51
52
  uv add ../project-getting-started/dist/rpr_cli-*.whl
52
53
  ```
53
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
+
54
59
  ## Usage
55
60
 
56
61
  ### 🚀 Scaffolding & Generation
@@ -221,14 +226,13 @@ The `chat` command also supports:
221
226
  # Install Python dependencies
222
227
  uv sync
223
228
 
224
- # Build the Rust extension (rpr_parser) — required for rename and map acceleration
225
- cd rpr-parser && uv run maturin develop && cd ..
229
+ # Rebuild the bundled Rust extension after native code changes
230
+ uv run maturin develop
226
231
  ```
227
232
 
228
- > **Note:** `uv tool install dist/rpr-*.whl` uses the root hatchling build backend and does **not** build the
229
- > Rust extension. You must run `maturin develop` separately before using `rpr rename` or `rpr map`
230
- > with the Rust backend. Rename requires the extension; map falls back to the pure-Python
231
- > implementation when it is unavailable.
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.
232
236
 
233
237
  #### Running Tests
234
238
 
@@ -242,7 +246,7 @@ uv run pytest tests/test_map_extractor.py
242
246
  # Single test
243
247
  uv run pytest tests/test_map_extractor.py::test_fallback_returns_correct_shape
244
248
 
245
- # Rust unit tests (rpr_parser crate)
249
+ # Rust unit tests (bundled native crate)
246
250
  cd rpr-parser && cargo test && cd ..
247
251
 
248
252
  # Lint and format
@@ -250,8 +254,8 @@ uv run ruff check .
250
254
  uv run ruff format .
251
255
  ```
252
256
 
253
- The Rust-path tests in `tests/test_map_extractor.py` are automatically skipped if the Rust
254
- 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.
255
259
 
256
260
  ### Publishing To PyPI
257
261
 
@@ -267,10 +271,13 @@ No `PYPI_API_TOKEN` secret is required when publishing through GitHub Actions OI
267
271
  Release flow:
268
272
 
269
273
  ```bash
270
- # update src/rpr/__init__.py with the new version
271
- git commit -am "Release 0.1.2"
272
- 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
273
277
  git push origin main --tags
274
278
  ```
275
279
 
276
- 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
+
@@ -18,7 +18,8 @@ Both install the `rpr` command.
18
18
  For development, editable install is fine:
19
19
 
20
20
  ```bash
21
- uv tool install -e .
21
+ uv sync
22
+ uv run maturin develop
22
23
  ```
23
24
 
24
25
  For an actual distributable install you can use in other projects, build the wheel first and install the built artifact:
@@ -34,6 +35,10 @@ From another local project you can also install the built artifact directly:
34
35
  uv add ../project-getting-started/dist/rpr_cli-*.whl
35
36
  ```
36
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
+
37
42
  ## Usage
38
43
 
39
44
  ### 🚀 Scaffolding & Generation
@@ -204,14 +209,13 @@ The `chat` command also supports:
204
209
  # Install Python dependencies
205
210
  uv sync
206
211
 
207
- # Build the Rust extension (rpr_parser) — required for rename and map acceleration
208
- cd rpr-parser && uv run maturin develop && cd ..
212
+ # Rebuild the bundled Rust extension after native code changes
213
+ uv run maturin develop
209
214
  ```
210
215
 
211
- > **Note:** `uv tool install dist/rpr-*.whl` uses the root hatchling build backend and does **not** build the
212
- > Rust extension. You must run `maturin develop` separately before using `rpr rename` or `rpr map`
213
- > with the Rust backend. Rename requires the extension; map falls back to the pure-Python
214
- > implementation when it is unavailable.
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.
215
219
 
216
220
  #### Running Tests
217
221
 
@@ -225,7 +229,7 @@ uv run pytest tests/test_map_extractor.py
225
229
  # Single test
226
230
  uv run pytest tests/test_map_extractor.py::test_fallback_returns_correct_shape
227
231
 
228
- # Rust unit tests (rpr_parser crate)
232
+ # Rust unit tests (bundled native crate)
229
233
  cd rpr-parser && cargo test && cd ..
230
234
 
231
235
  # Lint and format
@@ -233,8 +237,8 @@ uv run ruff check .
233
237
  uv run ruff format .
234
238
  ```
235
239
 
236
- The Rust-path tests in `tests/test_map_extractor.py` are automatically skipped if the Rust
237
- 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.
238
242
 
239
243
  ### Publishing To PyPI
240
244
 
@@ -250,10 +254,12 @@ No `PYPI_API_TOKEN` secret is required when publishing through GitHub Actions OI
250
254
  Release flow:
251
255
 
252
256
  ```bash
253
- # update src/rpr/__init__.py with the new version
254
- git commit -am "Release 0.1.2"
255
- 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
256
260
  git push origin main --tags
257
261
  ```
258
262
 
259
- 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",
@@ -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"
@@ -131,7 +131,7 @@ fn build_dependency_graph(py: Python<'_>, abs_root: String) -> PyResult<Py<PyAny
131
131
  }
132
132
 
133
133
  #[pymodule]
134
- fn rpr_parser(m: &Bound<'_, PyModule>) -> PyResult<()> {
134
+ fn _native(m: &Bound<'_, PyModule>) -> PyResult<()> {
135
135
  init_logging();
136
136
  // Register a tiny smoke-test function first so Python/Jupyter can confirm
137
137
  // the compiled module loaded before we move on to more complex APIs.
@@ -0,0 +1 @@
1
+ __version__ = "0.3.8"
@@ -29,7 +29,7 @@ from rpr.map.graph import DependencyGraph, build_graph
29
29
  from rpr.map.walker import Language, SourceFile, walk
30
30
 
31
31
  try:
32
- import rpr_parser
32
+ from rpr import _native as rpr_parser
33
33
 
34
34
  _RUST_AVAILABLE = True
35
35
  except ImportError:
@@ -1,5 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import importlib
3
4
  from dataclasses import dataclass, field
4
5
  from pathlib import Path
5
6
  from typing import Any
@@ -47,23 +48,24 @@ class RenamePlan:
47
48
 
48
49
  def _native_module() -> Any:
49
50
  try:
50
- import rpr_parser
51
+ native = importlib.import_module("rpr._native")
51
52
  except ImportError as exc:
52
53
  raise ProjectRenameError(
53
- "The Rust rename backend is unavailable. Build it with "
54
- "`cd rpr-parser && uv run maturin develop`, then rerun the command."
54
+ "This rpr-cli installation does not include a compatible Rust backend. "
55
+ "Reinstall the latest platform wheel with `uv tool install rpr-cli "
56
+ "--force`. Source checkouts can run `uv run maturin develop`."
55
57
  ) from exc
56
58
  required = (
57
59
  "ensure_rename_ignore",
58
60
  "plan_project_rename",
59
61
  "apply_project_rename",
60
62
  )
61
- if any(not hasattr(rpr_parser, name) for name in required):
63
+ if any(not hasattr(native, name) for name in required):
62
64
  raise ProjectRenameError(
63
65
  "The installed Rust rename backend is out of date. Rebuild it with "
64
- "`cd rpr-parser && uv run maturin develop`, then rerun the command."
66
+ "`uv run maturin develop`, then rerun the command."
65
67
  )
66
- return rpr_parser
68
+ return native
67
69
 
68
70
 
69
71
  def ensure_rename_ignore(project_dir: Path) -> bool:
@@ -1,165 +0,0 @@
1
- ---
2
- description: "Use when researching and drafting implementation-ready user stories with concrete file touch plans, domain artifacts, and validation steps."
3
- name: "Story Planning Agent"
4
- tools: [execute, read, edit, search]
5
- ---
6
-
7
- You are a Senior Story Planning Agent. Your objective is to research, architect, and draft implementation-ready user stories. The story must be concrete enough that a developer or coding agent can move into implementation with minimal additional discovery.
8
-
9
- You do not write production code in the story. You do write a grounded plan that names likely files, symbols, domain objects, tests, boundaries, and package requirements.
10
-
11
- ## Primary Standard
12
-
13
- Every story must be evidence-backed, vertically sliced, and specific about how the work will likely land in this repository.
14
-
15
- Avoid abstract statements like:
16
-
17
- - "update the backend logic"
18
- - "extend the domain layer"
19
- - "add tests"
20
- - "handle edge cases"
21
-
22
- Replace them with repository-grounded guidance like:
23
-
24
- - which existing files are likely to change
25
- - which new files are likely to be created
26
- - which DTOs, entities, value objects, repositories, workflows, routes, commands, hooks, or components are involved
27
- - which tests should be added or updated
28
- - which existing patterns or scaffolds should be followed
29
-
30
- If the codebase evidence is incomplete, say so explicitly and record the gap as an assumption or open question. Do not fill gaps with generic architecture prose.
31
-
32
- ## Agentic Workflow
33
-
34
- You must strictly execute the following phases in order. Do not skip to generation without completing the research and planning phases.
35
-
36
- ### Phase 1: Discovery & Evidence Collection
37
-
38
- 1. Analyze the request and identify the business outcome, user value, and likely vertical slice.
39
- 2. Use the search and read tools to inspect the current codebase, architectural notes, domain documentation, and local instruction files.
40
- 3. Do not rely on completed stories for implementation guidance unless the user explicitly asks for a comparison. They may be stale.
41
- 4. Determine the Bounded Context.
42
- 5. Build an evidence set from the repository:
43
- - current entrypoints or commands
44
- - existing domain/application modules
45
- - existing routes, services, workflows, repos, DTOs, entities, value objects, or UI components
46
- - renderer/output layers and infrastructure touchpoints
47
- - existing tests that cover or neighbor the feature
48
- 6. Identify the likely domain artifacts involved. This includes Aggregates, Entities, Value Objects, DTOs, repositories, services, workflows, commands/events, or UI models. If none are expected, explicitly say that no new domain artifact is expected.
49
- 7. If the feature requires new packages, you MUST use the search tool to find the latest stable version on the official registry. Do not guess the version.
50
- 8. For non-trivial work, collect enough evidence to name concrete files. If you cannot identify at least a few likely touchpoints, keep researching before drafting.
51
-
52
- ### Phase 2: Architectural Validation
53
-
54
- 1. Vertical Slice Check: Ensure the story covers a usable slice of behavior across the necessary layers. If the prompt is purely horizontal, reframe it into a user-facing or operator-facing capability.
55
- 2. File Touch Plan Check: Identify likely existing files to update and likely new files to create. For each file, capture why it belongs in the plan.
56
- 3. Boundary Check: Map the work across the appropriate layers such as command/entrypoint, application, domain, repository, output, infrastructure, API, UI, or persistence.
57
- 4. SOLID and DDD Check: Ensure responsibilities stay separated. Do not collapse extraction, orchestration, rendering, transport, and persistence into one change bucket.
58
- 5. Pattern Alignment Check: Follow the bundled RPR guidance and scaffolds in src/rpr/scaffolds. Use those instructions to ground naming, layering, DTO/entity discipline, and route or UI patterns.
59
- 6. Testability Check: Identify the exact test files to update or add, the behavior each test should cover, and the likely validation commands.
60
- 7. Abstraction Gate: If any plan item still reads like generic advice instead of repository-specific guidance, refine it before generating the story.
61
-
62
- ### Phase 3: Story Generation
63
-
64
- 1. Formulate a concise, descriptive title.
65
- 2. Draft the story using the strict template below.
66
- 3. Keep the implementation guidance concrete and file-oriented, but do not include source code or pseudocode.
67
- 4. Name DTOs, entities, value objects, repositories, workflows, services, commands, routes, hooks, or components whenever the repository evidence supports doing so.
68
- 5. If a layer has no expected impact, say "No expected change" rather than omitting it.
69
- 6. Acceptance criteria must be testable and map back to the implementation plan.
70
-
71
- ### Phase 4: Review & File Operations
72
-
73
- 1. Review the story against the original request. Confirm that it captures the business need and implementation path.
74
- 2. Run the Concrete Story Checklist before saving:
75
- - The story names concrete files or directories likely involved.
76
- - The story identifies likely domain artifacts or explicitly states none are expected.
77
- - The story explains how the work crosses repository layers.
78
- - The story names tests to add or update.
79
- - Any package dependency includes a verified version and install command.
80
- - The plan does not rely on vague phrases like "update relevant files" or "add necessary tests."
81
- 3. Save the story in /stories/{bounded-context-or-feature-dir}/{story-name}.md using the edit or execute tools.
82
-
83
- ## Story Authoring Rules
84
-
85
- - Prefer repository-relative file paths.
86
- - When a file does not exist yet but is a likely addition, mark it clearly as a new file.
87
- - Each file in the File Touch Plan must include a reason.
88
- - If you infer a DTO or entity name from current naming conventions, present it as "likely" when appropriate.
89
- - Keep stories implementation-ready, not code-heavy.
90
- - Do not paste large code snippets into the story.
91
- - Do not invent packages, versions, or architectural layers that are not supported by the codebase evidence.
92
-
93
- ## User Story Template
94
-
95
- ```
96
- # {Story Title}
97
-
98
- ## User Story
99
- As a {user type}, I want to {action} so that {benefit}.
100
-
101
- ## Business Outcome
102
- - {What changes for the user, operator, or developer when this story is complete}
103
-
104
- ## Domain Context
105
- - **Bounded Context:** {The specific DDD bounded context this belongs to}
106
- - **Primary Capability:** {The business or technical capability being added}
107
- - **Existing Artifacts Involved:** {Existing entities, value objects, DTOs, services, repos, workflows, routes, commands, components, or modules already present}
108
- - **New or Updated Artifacts Likely Needed:** {Best-effort list of DTOs, entities, value objects, workflows, services, repos, routes, hooks, components, or helper modules. If none: "No new domain artifacts expected."}
109
-
110
- ## Codebase Evidence
111
- - `{path}` - {Why this file or directory matters to the implementation}
112
- - `{path}` - {Why this file or directory matters to the implementation}
113
- - `{path}` - {Why this file or directory matters to the implementation}
114
-
115
- ## File Touch Plan
116
- | Path | Change | Reason |
117
- | --- | --- | --- |
118
- | `{path}` | update | {What will likely change here} |
119
- | `{path}` | create | {Why a new file is likely needed} |
120
- | `{path}` | verify | {Why this file should be checked even if no code change is certain yet} |
121
-
122
- ## Technical Implementation Plan
123
-
124
- ### Vertical Slice Summary
125
- {Summarize the end-to-end path of the feature through the repository.}
126
-
127
- ### Entry Points and Orchestration
128
- {Describe command, route, workflow, or UI entrypoints involved. If no change: "No expected change."}
129
-
130
- ### Domain and Application Changes
131
- {Describe DTO/entity/value object/repository/service/workflow changes with concrete references to the repository structure. If no change: "No expected change."}
132
-
133
- ### API, UI, Output, or Infrastructure Changes
134
- {Describe boundary-layer changes such as route handlers, renderers, presenters, output formatters, infrastructure adapters, or UI components. If no change: "No expected change."}
135
-
136
- ### Data, Contracts, and Edge Cases
137
- {Call out schema, contracts, validation, compatibility expectations, failure states, and negative paths.}
138
-
139
- ### Testing and Validation Plan
140
- - `{test path}` - {Behavior to cover}
141
- - `{test path}` - {Behavior to cover}
142
- - Validation commands: `{command}`
143
-
144
- ## Dependency & Package Requirements
145
- {List required packages, external dependencies, or infrastructural needs.
146
- If none: "No new packages required."}
147
-
148
- ## Assumptions & Open Questions
149
- - {Assumption grounded in current repo evidence}
150
- - {Uncertainty that needs confirmation from a product owner or architect}
151
-
152
- ## Acceptance Criteria
153
- - {Specific happy-path behavior with observable result}
154
- - {Specific failure-path or boundary behavior}
155
- - {Specific validation of files, contracts, or output shape}
156
- ```
157
-
158
- ## Important Packaging Rules
159
-
160
- If a story requires packages, you must include the exact native package manager command with the verified latest version. Do not hallucinate versions.
161
-
162
- - Python: `uv add {package-name}@{version}`
163
- - Node: `npm install {package-name}@{version}`
164
- - Rust: `cargo add {package-name}@{version}`
165
- - Golang: `go get {package-name}@{version}`
@@ -1,59 +0,0 @@
1
- name: Publish PyPI
2
-
3
- on:
4
- push:
5
- tags:
6
- - "v*"
7
- workflow_dispatch:
8
-
9
- jobs:
10
- publish:
11
- runs-on: ubuntu-latest
12
- env:
13
- FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
14
- environment:
15
- name: pypi
16
- url: https://pypi.org/p/rpr-cli
17
- permissions:
18
- contents: read
19
- id-token: write
20
-
21
- steps:
22
- - name: Check out repository
23
- uses: actions/checkout@v6
24
-
25
- - name: Set up Python
26
- uses: actions/setup-python@v6
27
- with:
28
- python-version: "3.14"
29
-
30
- - name: Set up uv
31
- uses: astral-sh/setup-uv@v8.1.0
32
-
33
- - name: Validate tag matches package version
34
- run: |
35
- python - <<'PY'
36
- from pathlib import Path
37
- import os
38
- import re
39
-
40
- version_text = Path("src/rpr/__init__.py").read_text()
41
- match = re.search(r'__version__\s*=\s*"([^"]+)"', version_text)
42
- if match is None:
43
- raise SystemExit("Could not find __version__ in src/rpr/__init__.py")
44
-
45
- version = match.group(1)
46
- ref = os.environ["GITHUB_REF_NAME"]
47
- if ref != f"v{version}":
48
- raise SystemExit(
49
- f"Tag {ref!r} does not match package version v{version!r}"
50
- )
51
- PY
52
-
53
- - name: Build distribution artifacts
54
- run: uv build
55
-
56
- - name: Publish to PyPI
57
- uses: pypa/gh-action-pypi-publish@release/v1
58
- with:
59
- attestations: true
rpr_cli-0.3.5/.gitignore DELETED
@@ -1,28 +0,0 @@
1
- # Python
2
- __pycache__/
3
- *.py[cod]
4
- *.egg-info/
5
- .venv/
6
- *.egg
7
- dist/
8
- build/
9
-
10
- # Environment
11
- .env
12
- .env.local
13
- .env.*.local
14
-
15
- # IDE
16
- .idea/
17
- .vscode/
18
- *.swp
19
- *.swo
20
-
21
- # Rust
22
- rpr-parser/target/
23
-
24
- # OS
25
- .DS_Store
26
- Thumbs.db
27
-
28
- .notes
rpr_cli-0.3.5/CLAUDE.md DELETED
@@ -1,70 +0,0 @@
1
- # CLAUDE.md
2
-
3
- This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
-
5
- ## Commands
6
-
7
- ```bash
8
- # Install dependencies
9
- uv sync
10
-
11
- # Install CLI globally
12
- uv tool install .
13
-
14
- # Run tests
15
- uv run pytest
16
-
17
- # Run a single test file
18
- uv run pytest tests/test_init.py
19
-
20
- # Run a single test
21
- uv run pytest tests/test_init.py::test_function_name
22
-
23
- # Lint and format
24
- uvx ruff check .
25
- uvx ruff format .
26
- ```
27
-
28
- ## Architecture
29
-
30
- RPR is a CLI tool (built with Typer) that bootstraps and manages NX + UV monorepos with a Domain-Driven Design (DDD) architecture. It scaffolds full-stack apps with Python backends, React frontends, optional Rust engines, and syncs AI instructions across multiple AI tools.
31
-
32
- ### Command Structure
33
-
34
- - `rpr init` — bootstraps an NX workspace with UV workspace configuration
35
- - `rpr generate [domain|api|ui|engine|storybook]` — creates new packages/apps with boilerplate
36
- - `rpr sync rules` — reads instructions from `src/rpr/scaffolds/instructions/` and generates AI tool config files (`.cursor/rules/*.mdc`, `.github/copilot-instructions.md`, `CLAUDE.md`, `GEMINI.md`)
37
- - `rpr add template` — extracts code blocks from markdown templates, interpolates variables, writes to target paths
38
- - `rpr check` — validates workspace structure, instructions, packages
39
-
40
- ### Core Abstractions
41
-
42
- **`RunContext`** (`src/rpr/context.py`) — wraps all file I/O and shell execution. Every command receives a `RunContext` and uses it for all operations. Supports `--dry-run` which previews changes without writing anything.
43
-
44
- **`SyncConfig`** (`src/rpr/generators/base.py`) — parsed from `.rpr.yaml` in the target project. Tracks source instruction directory, output targets, and template variables used for interpolation.
45
-
46
- **`Rule`** objects — parsed from markdown instruction files. Each rule has `id`, `description`, `apply_to` (glob pattern), `language` (for syntax highlighting), and content body. Used by all AI instruction generators.
47
-
48
- **Template registry** (`src/rpr/templates/registry.py`) — maps template IDs (e.g. `mapper_util`, `dto_util`) to source markdown files in `src/rpr/scaffolds/special_files/` (Python) or `src/rpr/scaffolds/js_special_files/` (TypeScript) and their target paths within a generated project.
49
-
50
- ### Scaffolding System
51
-
52
- Templates live in two places:
53
-
54
- - `src/rpr/scaffolds/instructions/` — AI instruction markdown files bundled into the package
55
- - `src/rpr/scaffolds/special_files/` and `src/rpr/scaffolds/js_special_files/` — code templates (Python/TypeScript) referenced by `rpr add template`
56
-
57
- Generate commands (ui, engine, storybook) build file trees by writing individual files via `RunContext`, not by copying directory trees. Each generate command constructs paths relative to the workspace root and writes all necessary config files, source stubs, and package manifests.
58
-
59
- ### AI Instruction Generators
60
-
61
- Each generator in `src/rpr/generators/` takes a list of `Rule` objects and produces output in a tool-specific format:
62
-
63
- - `cursor.py` → `.cursor/rules/*.mdc` files (one per rule)
64
- - `copilot.py` → `.github/copilot-instructions.md` (single concatenated file)
65
- - `claude.py` → `CLAUDE.md`
66
- - `gemini.py` → `GEMINI.md`
67
-
68
- ### Check System
69
-
70
- `src/rpr/checks/` contains health check validators that inspect a workspace and return structured `CheckResult` objects. `rpr check` aggregates these and reports issues with Rich formatting.
rpr_cli-0.3.5/GEMINI.md DELETED
File without changes