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