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.
- rpr_cli-0.3.4/README.md → rpr_cli-0.3.8/PKG-INFO +45 -16
- rpr_cli-0.3.4/PKG-INFO → rpr_cli-0.3.8/README.md +27 -33
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/pyproject.toml +10 -6
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/Cargo.lock +72 -4
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/Cargo.toml +8 -6
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/lib.rs +6 -1
- rpr_cli-0.3.8/rpr-parser/src/rename.rs +1087 -0
- rpr_cli-0.3.8/src/rpr/__init__.py +1 -0
- rpr_cli-0.3.4/rpr-parser/rpr_parser.pyi → rpr_cli-0.3.8/src/rpr/_native.pyi +10 -1
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/rename.py +20 -1
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/map/extractor.py +1 -1
- rpr_cli-0.3.8/src/rpr/project_rename.py +129 -0
- rpr_cli-0.3.4/.github/agents/story.agent.md +0 -165
- rpr_cli-0.3.4/.github/workflows/publish-pypi.yml +0 -59
- rpr_cli-0.3.4/.gitignore +0 -28
- rpr_cli-0.3.4/CLAUDE.md +0 -70
- rpr_cli-0.3.4/GEMINI.md +0 -0
- rpr_cli-0.3.4/changelogs/mui_v9.txt +0 -2178
- rpr_cli-0.3.4/code-map.md +0 -155
- rpr_cli-0.3.4/nx_uv_setup.md +0 -841
- rpr_cli-0.3.4/patch_output.py +0 -150
- rpr_cli-0.3.4/plan-languageAwareTemplateAdd.prompt.md +0 -63
- rpr_cli-0.3.4/rpr-parser/pyproject.toml +0 -12
- rpr_cli-0.3.4/rpr-parser/uv.lock +0 -8
- rpr_cli-0.3.4/special_files.md +0 -20
- rpr_cli-0.3.4/src/rpr/__init__.py +0 -1
- rpr_cli-0.3.4/src/rpr/project_rename.py +0 -521
- rpr_cli-0.3.4/stories/README.md +0 -93
- rpr_cli-0.3.4/stories/chat-attachment-upload-gap.md +0 -306
- rpr_cli-0.3.4/stories/completed/00-bootstrap-cli.md +0 -61
- rpr_cli-0.3.4/stories/completed/01-rpr-init.md +0 -215
- rpr_cli-0.3.4/stories/completed/02-rpr-generate-domain.md +0 -89
- rpr_cli-0.3.4/stories/completed/03-rpr-generate-api.md +0 -39
- rpr_cli-0.3.4/stories/completed/04-rpr-generate-ui.md +0 -104
- rpr_cli-0.3.4/stories/completed/05-rpr-generate-engine.md +0 -111
- rpr_cli-0.3.4/stories/completed/06-rpr-generate-storybook.md +0 -89
- rpr_cli-0.3.4/stories/completed/07-rpr-sync-rules.md +0 -157
- rpr_cli-0.3.4/stories/completed/08-rpr-add-template.md +0 -69
- rpr_cli-0.3.4/stories/completed/09-rpr-check.md +0 -115
- rpr_cli-0.3.4/stories/completed/10-rpr-domain-config.md +0 -120
- rpr_cli-0.3.4/stories/completed/chat/18-rpr-terminal-ui-foundation.md +0 -37
- rpr_cli-0.3.4/stories/completed/chat/19-rpr-markdown-rendering.md +0 -38
- rpr_cli-0.3.4/stories/completed/chat/20-rpr-chat-repl.md +0 -36
- rpr_cli-0.3.4/stories/completed/chat/21-rpr-agent-tool-loop.md +0 -40
- rpr_cli-0.3.4/stories/completed/chat/22-rpr-chat-tui.md +0 -44
- rpr_cli-0.3.4/stories/completed/chat/23-rpr-chat-unified-command-shell.md +0 -96
- rpr_cli-0.3.4/stories/completed/chat/24-rpr-async-chat-runtime-and-services.md +0 -75
- rpr_cli-0.3.4/stories/completed/chat/25-rpr-prompt-service-and-conversation-lifecycle.md +0 -76
- rpr_cli-0.3.4/stories/completed/chat/26-rpr-shared-command-catalog.md +0 -213
- rpr_cli-0.3.4/stories/completed/chat/27-rpr-slash-command-selection-panel.md +0 -61
- rpr_cli-0.3.4/stories/completed/chat/28-rpr-chat-cancellable-and-multiline-input.md +0 -63
- rpr_cli-0.3.4/stories/completed/chat/29-rpr-file-context-selection.md +0 -52
- rpr_cli-0.3.4/stories/completed/map/11-rpr-map-command.md +0 -32
- rpr_cli-0.3.4/stories/completed/map/12-rpr-map-file-walker.md +0 -51
- rpr_cli-0.3.4/stories/completed/map/13-rpr-map-rust-engine.md +0 -126
- rpr_cli-0.3.4/stories/completed/map/13a-rpr-map-gitignore.md +0 -34
- rpr_cli-0.3.4/stories/completed/map/14-rpr-map-graph-builder.md +0 -94
- rpr_cli-0.3.4/stories/completed/map/15-rpr-map-analysis-bridge.md +0 -94
- rpr_cli-0.3.4/stories/completed/map/16-rpr-map-layer-classifier.md +0 -60
- rpr_cli-0.3.4/stories/completed/map/17-rpr-map-output.md +0 -94
- rpr_cli-0.3.4/stories/completed/map/17a-rpr-map-directory-topology.md +0 -65
- rpr_cli-0.3.4/stories/completed/map/17b-rpr-map-architecture-assessment.md +0 -61
- rpr_cli-0.3.4/stories/completed/map/17c-rpr-map-representative-chains.md +0 -52
- rpr_cli-0.3.4/stories/completed/map/17d-rpr-map-multi-resolution-output.md +0 -72
- rpr_cli-0.3.4/stories/map/30-rpr-map-directory-view-and-cycle-detection.md +0 -38
- rpr_cli-0.3.4/stories/map/31-rpr-map-coupling-hotspots-and-verdict-reasoning.md +0 -41
- rpr_cli-0.3.4/stories/map/32-rpr-map-dependencies-responsibilities-and-test-coverage.md +0 -98
- rpr_cli-0.3.4/stories/package-maintenance/default-vite-8-oxc-toolchain.md +0 -142
- rpr_cli-0.3.4/stories/package-maintenance/rpr-update-packages.md +0 -183
- rpr_cli-0.3.4/stories/package-maintenance/typescript-7-frontend-scaffold-compatibility.md +0 -123
- rpr_cli-0.3.4/tests/__init__.py +0 -0
- rpr_cli-0.3.4/tests/test_add.py +0 -753
- rpr_cli-0.3.4/tests/test_architecture.py +0 -659
- rpr_cli-0.3.4/tests/test_architecture_unwrapped.py +0 -152
- rpr_cli-0.3.4/tests/test_catalog.py +0 -222
- rpr_cli-0.3.4/tests/test_chat.py +0 -720
- rpr_cli-0.3.4/tests/test_chat_service.py +0 -282
- rpr_cli-0.3.4/tests/test_check.py +0 -564
- rpr_cli-0.3.4/tests/test_completer.py +0 -131
- rpr_cli-0.3.4/tests/test_context.py +0 -376
- rpr_cli-0.3.4/tests/test_generate_api.py +0 -125
- rpr_cli-0.3.4/tests/test_generate_domain.py +0 -327
- rpr_cli-0.3.4/tests/test_generate_engine.py +0 -133
- rpr_cli-0.3.4/tests/test_generate_storybook.py +0 -225
- rpr_cli-0.3.4/tests/test_generate_ui.py +0 -288
- rpr_cli-0.3.4/tests/test_init.py +0 -744
- rpr_cli-0.3.4/tests/test_map.py +0 -80
- rpr_cli-0.3.4/tests/test_map_chains.py +0 -554
- rpr_cli-0.3.4/tests/test_map_classifier.py +0 -330
- rpr_cli-0.3.4/tests/test_map_coverage.py +0 -182
- rpr_cli-0.3.4/tests/test_map_dependencies.py +0 -266
- rpr_cli-0.3.4/tests/test_map_extractor.py +0 -455
- rpr_cli-0.3.4/tests/test_map_graph.py +0 -309
- rpr_cli-0.3.4/tests/test_map_output.py +0 -1397
- rpr_cli-0.3.4/tests/test_map_responsibility.py +0 -220
- rpr_cli-0.3.4/tests/test_map_topology.py +0 -651
- rpr_cli-0.3.4/tests/test_map_walker.py +0 -448
- rpr_cli-0.3.4/tests/test_package_updates.py +0 -175
- rpr_cli-0.3.4/tests/test_packaging.py +0 -19
- rpr_cli-0.3.4/tests/test_prompt_session.py +0 -236
- rpr_cli-0.3.4/tests/test_refresh.py +0 -60
- rpr_cli-0.3.4/tests/test_rename.py +0 -335
- rpr_cli-0.3.4/tests/test_rpr_parser_stub.py +0 -12
- rpr_cli-0.3.4/tests/test_selector.py +0 -189
- rpr_cli-0.3.4/tests/test_settings.py +0 -112
- rpr_cli-0.3.4/tests/test_sync.py +0 -240
- rpr_cli-0.3.4/tests/test_ui.py +0 -133
- rpr_cli-0.3.4/tests/test_update_packages.py +0 -209
- rpr_cli-0.3.4/untitled:plan-chatAttachmentUploadGap.prompt.md +0 -52
- rpr_cli-0.3.4/update_output.py +0 -134
- rpr_cli-0.3.4/uv.lock +0 -309
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/LICENSE +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/config/container.rs +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/config/mod.rs +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/config/settings.rs +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/graph.rs +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/models/dtos/mod.rs +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/models/entities/mod.rs +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/models/entities/users.rs +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/models/mod.rs +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/parse.rs +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/repos/base.rs +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/repos/mod.rs +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/repos/users.rs +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/resolve.rs +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/rpr-parser/src/walker.rs +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/agent/__init__.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/agent/approval.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/agent/bootstrap.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/agent/client.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/agent/control.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/agent/mock.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/agent/runtime.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/agent/session.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/agent/tools/__init__.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/agent/tools/base.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/agent/tools/mutating.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/agent/tools/readonly.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/agent/tools/registry.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/application/__init__.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/application/catalog.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/application/chat_service.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/application/checks.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/application/cli_adapter.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/application/completer.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/application/conversation_service.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/application/prompt_service.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/application/selector.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/application/shell.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/checks/__init__.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/checks/base.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/checks/instructions.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/checks/packages.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/checks/workspace.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/cli.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/__init__.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/add.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/chat.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/check.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/generate/__init__.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/generate/api.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/generate/domain.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/generate/engine.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/generate/storybook.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/generate/ui.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/init.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/map.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/refresh.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/settings.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/sync.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/commands/update.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/context.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/dependencies.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/dependency_manifest_data.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/generators/__init__.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/generators/base.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/generators/claude.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/generators/codex.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/generators/copilot.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/generators/cursor.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/generators/gemini.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/generators/github.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/manifest_refresh.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/map/__init__.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/map/architecture.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/map/chains.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/map/classifier.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/map/coverage.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/map/dependencies.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/map/graph.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/map/output.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/map/responsibility.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/map/topology.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/map/walker.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/package_updates.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/domain/base_entity.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/domain/base_repo.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/domain/container.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/domain/settings.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/instructions/all.instructions.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/instructions/api.instructions.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/instructions/domain.instructions.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/instructions/frontend.instructions.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/instructions/rust-engine.instructions.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/instructions/setup-guide.instructions.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/instructions/tooling-setup.instructions.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/instructions/tooling.instructions.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/BACKEND_FLOW.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/README.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/client/content.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/client/httpChatStreamClient.spec.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/client/httpChatStreamClient.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/client/index.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/client/types.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/ChatComposer.spec.tsx +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/ChatComposer.tsx +0 -0
- {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
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/fileDrop.spec.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/fileDrop.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/index.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/ChatComposerMentionTokens.tsx +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/ChatSuggestionsPopover.tsx +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/LocalFileSuggestionAction.tsx +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/index.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/localFileSuggestions.spec.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/localFileSuggestions.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/triggerDetection.spec.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/triggerDetection.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/types.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/suggestions/useChatSuggestions.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/types.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/useChatComposer.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/useChatStream.spec.tsx +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/composer/useChatStream.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/ChatExperience.spec.tsx +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/ChatExperience.styles.tsx +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/ChatExperience.tsx +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/ChatExperienceComposer.styles.tsx +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/ChatExperienceComposer.tsx +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/ChatExperienceHeader.styles.tsx +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/ChatExperienceHeader.tsx +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/ThreadHistory.styles.tsx +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/ThreadHistory.tsx +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/chatStorage.spec.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/chatStorage.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/index.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/types.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/useChatExperience.spec.tsx +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/experience/useChatExperience.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/index.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/testing/createMockChatStreamClient.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/testing/createMockSuggestionProvider.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/testing/index.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/ChatMessage.tsx +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/ChatMessageActions.tsx +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/ChatMessageContent.spec.tsx +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/ChatMessageContent.tsx +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/ChatThread.spec.tsx +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/ChatThread.tsx +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/README.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/contentFormat.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/index.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/streaming.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/thread/types.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/virtual-list/VirtualComponent.spec.tsx +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/virtual-list/VirtualComponent.tsx +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/virtual-list/VirtualComponentList.spec.tsx +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/virtual-list/VirtualComponentList.tsx +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/chat/virtual-list/index.ts +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/fetch.service.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/sticky-navigation.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/sticky-navigation.spec.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/js_special_files/vitest-browser-config.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/api/routes/chat_routes.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/api/tests/test_chat.py +0 -0
- {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
- {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
- {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
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/repos/conversation_history.py +0 -0
- {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
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/services/chat_service.py +0 -0
- {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
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/services/conversation_operations.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/py_special_files/chat/domain/services/history_codec.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/special_files/camel_case_model.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/special_files/domain_container.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/special_files/domain_settings.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/special_files/dto_util.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/special_files/encrypted_column.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/special_files/logging.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/special_files/mapper_util.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/special_files/partial_update.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/scaffolds/special_files/test_encrypted_column.md +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/templates/__init__.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/templates/registry.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/ui/__init__.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/ui/console.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/ui/markdown.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/ui/prompt_session.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/ui/renderers.py +0 -0
- {rpr_cli-0.3.4 → rpr_cli-0.3.8}/src/rpr/ui/theme.py +0 -0
- {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
|
|
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.
|
|
61
|
-
|
|
62
|
-
|
|
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
|
-
#
|
|
204
|
-
|
|
229
|
+
# Rebuild the bundled Rust extension after native code changes
|
|
230
|
+
uv run maturin develop
|
|
205
231
|
```
|
|
206
232
|
|
|
207
|
-
> **Note:** `uv tool install
|
|
208
|
-
> Rust
|
|
209
|
-
>
|
|
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 (
|
|
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
|
|
232
|
-
extension
|
|
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
|
|
249
|
-
git commit -am "Release 0.
|
|
250
|
-
git tag v0.
|
|
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`
|
|
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
|
|
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.
|
|
78
|
-
|
|
79
|
-
|
|
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
|
-
#
|
|
221
|
-
|
|
212
|
+
# Rebuild the bundled Rust extension after native code changes
|
|
213
|
+
uv run maturin develop
|
|
222
214
|
```
|
|
223
215
|
|
|
224
|
-
> **Note:** `uv tool install
|
|
225
|
-
> Rust
|
|
226
|
-
>
|
|
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 (
|
|
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
|
|
249
|
-
extension
|
|
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
|
|
266
|
-
git commit -am "Release 0.
|
|
267
|
-
git tag v0.
|
|
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`
|
|
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 = ["
|
|
27
|
-
build-backend = "
|
|
26
|
+
requires = ["maturin>=1.12.6,<2.0"]
|
|
27
|
+
build-backend = "maturin"
|
|
28
28
|
|
|
29
|
-
[tool.
|
|
30
|
-
|
|
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.
|
|
33
|
-
|
|
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.
|
|
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.
|
|
3
|
+
version = "0.3.8"
|
|
4
4
|
edition = "2021"
|
|
5
5
|
|
|
6
6
|
[lib]
|
|
7
|
-
name = "
|
|
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
|
|
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
|
}
|