rpr-cli 0.1.3__tar.gz → 0.1.6__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.1.3 → rpr_cli-0.1.6}/.github/workflows/publish-pypi.yml +10 -5
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/PKG-INFO +8 -3
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/README.md +7 -2
- rpr_cli-0.1.6/src/rpr/__init__.py +1 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/commands/init.py +25 -4
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/dependency_manifest_data.py +11 -33
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_init.py +88 -2
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_refresh.py +2 -0
- rpr_cli-0.1.3/src/rpr/__init__.py +0 -1
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/.github/agents/story.agent.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/.gitignore +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/CLAUDE.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/GEMINI.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/LICENSE +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/Sample-dot-github/instructions/all.instructions.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/Sample-dot-github/instructions/api.instructions.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/Sample-dot-github/instructions/domain.instructions.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/Sample-dot-github/instructions/frontend.instructions.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/Sample-dot-github/instructions/rust-engine.instructions.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/Sample-dot-github/instructions/setup-guide.instructions.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/Sample-dot-github/instructions/tooling-setup.instructions.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/Sample-dot-github/instructions/tooling.instructions.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/Sample-dot-github/scaffolds/README.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/Sample-dot-github/scaffolds/api/main.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/Sample-dot-github/scaffolds/domain/base-repo.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/Sample-dot-github/scaffolds/domain/base_entity.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/Sample-dot-github/scaffolds/frontend/api.service.ts +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/Sample-dot-github/scaffolds/frontend/useStateNavigation.ts +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/changelogs/mui_v9.txt +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/code-map.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/nx_uv_setup.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/patch_output.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/pyproject.toml +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/rpr-parser/Cargo.lock +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/rpr-parser/Cargo.toml +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/rpr-parser/pyproject.toml +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/rpr-parser/rpr_parser.pyi +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/rpr-parser/src/config/container.rs +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/rpr-parser/src/config/mod.rs +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/rpr-parser/src/config/settings.rs +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/rpr-parser/src/graph.rs +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/rpr-parser/src/lib.rs +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/rpr-parser/src/models/dtos/mod.rs +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/rpr-parser/src/models/entities/mod.rs +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/rpr-parser/src/models/entities/users.rs +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/rpr-parser/src/models/mod.rs +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/rpr-parser/src/parse.rs +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/rpr-parser/src/repos/base.rs +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/rpr-parser/src/repos/mod.rs +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/rpr-parser/src/repos/users.rs +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/rpr-parser/src/resolve.rs +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/rpr-parser/src/walker.rs +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/rpr-parser/uv.lock +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/special_files.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/agent/__init__.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/agent/approval.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/agent/bootstrap.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/agent/client.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/agent/control.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/agent/mock.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/agent/runtime.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/agent/session.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/agent/tools/__init__.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/agent/tools/base.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/agent/tools/mutating.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/agent/tools/readonly.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/agent/tools/registry.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/application/__init__.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/application/catalog.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/application/chat_service.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/application/checks.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/application/cli_adapter.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/application/completer.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/application/conversation_service.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/application/prompt_service.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/application/selector.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/application/shell.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/checks/__init__.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/checks/base.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/checks/instructions.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/checks/packages.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/checks/workspace.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/cli.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/commands/__init__.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/commands/add.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/commands/chat.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/commands/check.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/commands/generate/__init__.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/commands/generate/api.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/commands/generate/domain.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/commands/generate/engine.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/commands/generate/storybook.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/commands/generate/ui.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/commands/map.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/commands/refresh.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/commands/settings.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/commands/sync.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/context.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/dependencies.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/generators/__init__.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/generators/base.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/generators/claude.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/generators/copilot.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/generators/cursor.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/generators/gemini.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/manifest_refresh.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/map/__init__.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/map/architecture.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/map/chains.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/map/classifier.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/map/coverage.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/map/dependencies.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/map/extractor.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/map/graph.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/map/output.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/map/responsibility.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/map/topology.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/map/walker.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/scaffolds/domain/base_entity.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/scaffolds/domain/base_repo.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/scaffolds/domain/container.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/scaffolds/domain/settings.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/scaffolds/instructions/all.instructions.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/scaffolds/instructions/api.instructions.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/scaffolds/instructions/domain.instructions.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/scaffolds/instructions/frontend.instructions.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/scaffolds/instructions/rust-engine.instructions.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/scaffolds/instructions/setup-guide.instructions.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/scaffolds/instructions/tooling-setup.instructions.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/scaffolds/instructions/tooling.instructions.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/scaffolds/js_special_files/fetch.service.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/scaffolds/js_special_files/sticky-navigation.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/scaffolds/special_files/domain_container.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/scaffolds/special_files/domain_settings.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/scaffolds/special_files/dto_util.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/scaffolds/special_files/encrypted_column.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/scaffolds/special_files/mapper_util.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/scaffolds/special_files/partial_update.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/templates/__init__.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/templates/registry.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/ui/__init__.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/ui/console.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/ui/markdown.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/ui/prompt_session.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/ui/renderers.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/ui/theme.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/src/rpr/workspace.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/README.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/00-bootstrap-cli.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/01-rpr-init.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/02-rpr-generate-domain.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/03-rpr-generate-api.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/04-rpr-generate-ui.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/05-rpr-generate-engine.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/06-rpr-generate-storybook.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/07-rpr-sync-rules.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/08-rpr-add-template.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/09-rpr-check.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/10-rpr-domain-config.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/chat/18-rpr-terminal-ui-foundation.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/chat/19-rpr-markdown-rendering.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/chat/20-rpr-chat-repl.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/chat/21-rpr-agent-tool-loop.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/chat/22-rpr-chat-tui.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/chat/23-rpr-chat-unified-command-shell.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/chat/24-rpr-async-chat-runtime-and-services.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/chat/25-rpr-prompt-service-and-conversation-lifecycle.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/chat/26-rpr-shared-command-catalog.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/chat/27-rpr-slash-command-selection-panel.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/chat/28-rpr-chat-cancellable-and-multiline-input.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/chat/29-rpr-file-context-selection.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/map/11-rpr-map-command.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/map/12-rpr-map-file-walker.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/map/13-rpr-map-rust-engine.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/map/13a-rpr-map-gitignore.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/map/14-rpr-map-graph-builder.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/map/15-rpr-map-analysis-bridge.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/map/16-rpr-map-layer-classifier.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/map/17-rpr-map-output.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/map/17a-rpr-map-directory-topology.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/map/17b-rpr-map-architecture-assessment.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/map/17c-rpr-map-representative-chains.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/completed/map/17d-rpr-map-multi-resolution-output.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/map/30-rpr-map-directory-view-and-cycle-detection.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/map/31-rpr-map-coupling-hotspots-and-verdict-reasoning.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/stories/map/32-rpr-map-dependencies-responsibilities-and-test-coverage.md +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/__init__.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_add.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_architecture.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_architecture_unwrapped.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_catalog.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_chat.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_chat_service.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_check.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_completer.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_context.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_generate_api.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_generate_domain.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_generate_engine.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_generate_storybook.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_generate_ui.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_map.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_map_chains.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_map_classifier.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_map_coverage.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_map_dependencies.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_map_extractor.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_map_graph.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_map_output.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_map_responsibility.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_map_topology.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_map_walker.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_packaging.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_prompt_session.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_rpr_parser_stub.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_selector.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_settings.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_sync.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/tests/test_ui.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/update_output.py +0 -0
- {rpr_cli-0.1.3 → rpr_cli-0.1.6}/uv.lock +0 -0
|
@@ -9,20 +9,26 @@ on:
|
|
|
9
9
|
jobs:
|
|
10
10
|
publish:
|
|
11
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
|
|
12
17
|
permissions:
|
|
13
18
|
contents: read
|
|
19
|
+
id-token: write
|
|
14
20
|
|
|
15
21
|
steps:
|
|
16
22
|
- name: Check out repository
|
|
17
|
-
uses: actions/checkout@
|
|
23
|
+
uses: actions/checkout@v6
|
|
18
24
|
|
|
19
25
|
- name: Set up Python
|
|
20
|
-
uses: actions/setup-python@
|
|
26
|
+
uses: actions/setup-python@v6
|
|
21
27
|
with:
|
|
22
28
|
python-version: "3.14"
|
|
23
29
|
|
|
24
30
|
- name: Set up uv
|
|
25
|
-
uses: astral-sh/setup-uv@
|
|
31
|
+
uses: astral-sh/setup-uv@v8.1.0
|
|
26
32
|
|
|
27
33
|
- name: Validate tag matches package version
|
|
28
34
|
run: |
|
|
@@ -50,5 +56,4 @@ jobs:
|
|
|
50
56
|
- name: Publish to PyPI
|
|
51
57
|
uses: pypa/gh-action-pypi-publish@release/v1
|
|
52
58
|
with:
|
|
53
|
-
|
|
54
|
-
password: ${{ secrets.PYPI_API_TOKEN }}
|
|
59
|
+
attestations: true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rpr-cli
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.6
|
|
4
4
|
Summary: RPR CLI -- React Python Rust monorepo scaffolding orchestrator
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
License-File: LICENSE
|
|
@@ -55,6 +55,8 @@ uv add ../project-getting-started/dist/rpr_cli-*.whl
|
|
|
55
55
|
|
|
56
56
|
Create a new NX + UV monorepo, then add apps and packages as needed.
|
|
57
57
|
|
|
58
|
+
> NX monorepo uses integrated mode.
|
|
59
|
+
|
|
58
60
|
```bash
|
|
59
61
|
rpr init my-app # Create/init my-app with root NX + UV tooling and AI instructions
|
|
60
62
|
cd my-app
|
|
@@ -67,12 +69,13 @@ rpr generate storybook # Add Storybook for UI component development
|
|
|
67
69
|
|
|
68
70
|
`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.
|
|
69
71
|
|
|
70
|
-
By default, `rpr init` scaffolds the root workspace and AI instructions only. To create project components during initialization, repeat `--scaffold
|
|
72
|
+
By default, `rpr init` scaffolds the root workspace and AI instructions only. To create project components during initialization, repeat `--scaffold` or pass a comma-separated list:
|
|
71
73
|
|
|
72
74
|
```bash
|
|
73
75
|
rpr init todo-list --scaffold domain
|
|
74
76
|
rpr init todo-list --scaffold api --domain-migrations
|
|
75
77
|
rpr init todo-list --scaffold api --scaffold web --domain-migrations
|
|
78
|
+
rpr init todo-list --scaffold instructions, domain, api, ui, web, storybook
|
|
76
79
|
```
|
|
77
80
|
|
|
78
81
|
Available scaffolds are:
|
|
@@ -227,7 +230,9 @@ This repo is set up to publish the package `rpr-cli` to PyPI from GitHub Actions
|
|
|
227
230
|
One-time setup:
|
|
228
231
|
|
|
229
232
|
1. Create the PyPI project `rpr-cli`.
|
|
230
|
-
2.
|
|
233
|
+
2. Create a PyPI Trusted Publisher for this repository using workflow `.github/workflows/publish-pypi.yml` and environment `pypi`.
|
|
234
|
+
|
|
235
|
+
No `PYPI_API_TOKEN` secret is required when publishing through GitHub Actions OIDC.
|
|
231
236
|
|
|
232
237
|
Release flow:
|
|
233
238
|
|
|
@@ -40,6 +40,8 @@ uv add ../project-getting-started/dist/rpr_cli-*.whl
|
|
|
40
40
|
|
|
41
41
|
Create a new NX + UV monorepo, then add apps and packages as needed.
|
|
42
42
|
|
|
43
|
+
> NX monorepo uses integrated mode.
|
|
44
|
+
|
|
43
45
|
```bash
|
|
44
46
|
rpr init my-app # Create/init my-app with root NX + UV tooling and AI instructions
|
|
45
47
|
cd my-app
|
|
@@ -52,12 +54,13 @@ rpr generate storybook # Add Storybook for UI component development
|
|
|
52
54
|
|
|
53
55
|
`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.
|
|
54
56
|
|
|
55
|
-
By default, `rpr init` scaffolds the root workspace and AI instructions only. To create project components during initialization, repeat `--scaffold
|
|
57
|
+
By default, `rpr init` scaffolds the root workspace and AI instructions only. To create project components during initialization, repeat `--scaffold` or pass a comma-separated list:
|
|
56
58
|
|
|
57
59
|
```bash
|
|
58
60
|
rpr init todo-list --scaffold domain
|
|
59
61
|
rpr init todo-list --scaffold api --domain-migrations
|
|
60
62
|
rpr init todo-list --scaffold api --scaffold web --domain-migrations
|
|
63
|
+
rpr init todo-list --scaffold instructions, domain, api, ui, web, storybook
|
|
61
64
|
```
|
|
62
65
|
|
|
63
66
|
Available scaffolds are:
|
|
@@ -212,7 +215,9 @@ This repo is set up to publish the package `rpr-cli` to PyPI from GitHub Actions
|
|
|
212
215
|
One-time setup:
|
|
213
216
|
|
|
214
217
|
1. Create the PyPI project `rpr-cli`.
|
|
215
|
-
2.
|
|
218
|
+
2. Create a PyPI Trusted Publisher for this repository using workflow `.github/workflows/publish-pypi.yml` and environment `pypi`.
|
|
219
|
+
|
|
220
|
+
No `PYPI_API_TOKEN` secret is required when publishing through GitHub Actions OIDC.
|
|
216
221
|
|
|
217
222
|
Release flow:
|
|
218
223
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.1.6"
|
|
@@ -106,6 +106,25 @@ def _normalize_scaffold_name(value: str) -> ScaffoldName:
|
|
|
106
106
|
return normalized # type: ignore[return-value]
|
|
107
107
|
|
|
108
108
|
|
|
109
|
+
def _parse_scaffold_values(
|
|
110
|
+
values: list[str] | None,
|
|
111
|
+
extra_args: list[str],
|
|
112
|
+
) -> list[ScaffoldName]:
|
|
113
|
+
raw_values = values or []
|
|
114
|
+
if extra_args and not raw_values:
|
|
115
|
+
raise typer.BadParameter(
|
|
116
|
+
"Unexpected extra arguments. Use --scaffold to select components."
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
scaffolds: list[ScaffoldName] = []
|
|
120
|
+
for raw_value in [*raw_values, *extra_args]:
|
|
121
|
+
for value in raw_value.split(","):
|
|
122
|
+
value = value.strip()
|
|
123
|
+
if value:
|
|
124
|
+
scaffolds.append(_normalize_scaffold_name(value))
|
|
125
|
+
return scaffolds
|
|
126
|
+
|
|
127
|
+
|
|
109
128
|
def _resolve_scaffolds(scaffolds: list[ScaffoldName] | None) -> list[ScaffoldName]:
|
|
110
129
|
requested = scaffolds or ["instructions"]
|
|
111
130
|
resolved: list[ScaffoldName] = []
|
|
@@ -675,8 +694,9 @@ API_BASE_URL=http://localhost:8000
|
|
|
675
694
|
# ---------------------------------------------------------------------------
|
|
676
695
|
|
|
677
696
|
|
|
678
|
-
@app.command()
|
|
697
|
+
@app.command(context_settings={"allow_extra_args": True})
|
|
679
698
|
def init(
|
|
699
|
+
ctx: typer.Context,
|
|
680
700
|
project_name: Annotated[
|
|
681
701
|
str | None, typer.Argument(help="Name of the project to create.")
|
|
682
702
|
] = None,
|
|
@@ -691,8 +711,9 @@ def init(
|
|
|
691
711
|
typer.Option(
|
|
692
712
|
"--scaffold",
|
|
693
713
|
help=(
|
|
694
|
-
"Repeat to scaffold additional
|
|
695
|
-
"api, ui, web, storybook,
|
|
714
|
+
"Repeat or pass a comma-separated list to scaffold additional "
|
|
715
|
+
"components: instructions, domain, api, ui, web, storybook, "
|
|
716
|
+
"engine. Defaults to instructions only."
|
|
696
717
|
),
|
|
697
718
|
),
|
|
698
719
|
] = None,
|
|
@@ -712,7 +733,7 @@ def init(
|
|
|
712
733
|
project_name = typer.prompt("Project name")
|
|
713
734
|
|
|
714
735
|
selected_scaffolds = _resolve_scaffolds(
|
|
715
|
-
|
|
736
|
+
_parse_scaffold_values(scaffold, list(ctx.args))
|
|
716
737
|
)
|
|
717
738
|
if domain_migrations and "domain" not in selected_scaffolds:
|
|
718
739
|
raise typer.BadParameter(
|
|
@@ -6,59 +6,37 @@ from __future__ import annotations
|
|
|
6
6
|
MANIFEST = {
|
|
7
7
|
"root_node_dev_dependencies": {
|
|
8
8
|
"@eslint/js": {
|
|
9
|
-
"
|
|
10
|
-
"specifier": "latest",
|
|
11
|
-
"strategy": "caret",
|
|
9
|
+
"specifier": "^9.39.4",
|
|
12
10
|
},
|
|
13
11
|
"@nx/eslint": {
|
|
14
|
-
"
|
|
15
|
-
"specifier": "latest",
|
|
16
|
-
"strategy": "caret",
|
|
12
|
+
"specifier": "^22.7.1",
|
|
17
13
|
},
|
|
18
14
|
"@nx/eslint-plugin": {
|
|
19
|
-
"
|
|
20
|
-
"specifier": "latest",
|
|
21
|
-
"strategy": "caret",
|
|
15
|
+
"specifier": "^22.7.1",
|
|
22
16
|
},
|
|
23
17
|
"eslint": {
|
|
24
|
-
"
|
|
25
|
-
"specifier": "latest",
|
|
26
|
-
"strategy": "caret",
|
|
18
|
+
"specifier": "^9.39.4",
|
|
27
19
|
},
|
|
28
20
|
"eslint-plugin-import": {
|
|
29
|
-
"
|
|
30
|
-
"specifier": "latest",
|
|
31
|
-
"strategy": "caret",
|
|
21
|
+
"specifier": "^2.32.0",
|
|
32
22
|
},
|
|
33
23
|
"eslint-plugin-jsx-a11y": {
|
|
34
|
-
"
|
|
35
|
-
"specifier": "latest",
|
|
36
|
-
"strategy": "caret",
|
|
24
|
+
"specifier": "^6.10.2",
|
|
37
25
|
},
|
|
38
26
|
"eslint-plugin-react": {
|
|
39
|
-
"
|
|
40
|
-
"specifier": "latest",
|
|
41
|
-
"strategy": "caret",
|
|
27
|
+
"specifier": "^7.37.5",
|
|
42
28
|
},
|
|
43
29
|
"eslint-plugin-react-hooks": {
|
|
44
|
-
"
|
|
45
|
-
"specifier": "latest",
|
|
46
|
-
"strategy": "caret",
|
|
30
|
+
"specifier": "^7.1.1",
|
|
47
31
|
},
|
|
48
32
|
"globals": {
|
|
49
|
-
"
|
|
50
|
-
"specifier": "latest",
|
|
51
|
-
"strategy": "caret",
|
|
33
|
+
"specifier": "^15.15.0",
|
|
52
34
|
},
|
|
53
35
|
"prettier": {
|
|
54
|
-
"
|
|
55
|
-
"specifier": "latest",
|
|
56
|
-
"strategy": "caret",
|
|
36
|
+
"specifier": "^3.7.4",
|
|
57
37
|
},
|
|
58
38
|
"typescript-eslint": {
|
|
59
|
-
"
|
|
60
|
-
"specifier": "latest",
|
|
61
|
-
"strategy": "caret",
|
|
39
|
+
"specifier": "^8.59.2",
|
|
62
40
|
},
|
|
63
41
|
},
|
|
64
42
|
"root_storybook_dev_dependencies": {
|
|
@@ -74,8 +74,17 @@ def test_init_new_workspace_disables_nx_cloud(monkeypatch):
|
|
|
74
74
|
package_json = json.loads((project_dir / "package.json").read_text())
|
|
75
75
|
assert package_json["scripts"]["lint"] == "npx nx run-many --target=lint --all"
|
|
76
76
|
assert package_json["workspaces"] == ["apps/*", "packages/node/*"]
|
|
77
|
-
|
|
78
|
-
assert "
|
|
77
|
+
dev_dependencies = package_json["devDependencies"]
|
|
78
|
+
assert "eslint" in dev_dependencies
|
|
79
|
+
assert "prettier" in dev_dependencies
|
|
80
|
+
assert dev_dependencies["eslint"] == "^9.39.4"
|
|
81
|
+
assert dev_dependencies["@eslint/js"] == "^9.39.4"
|
|
82
|
+
assert dev_dependencies["eslint-plugin-import"] == "^2.32.0"
|
|
83
|
+
assert dev_dependencies["eslint-plugin-jsx-a11y"] == "^6.10.2"
|
|
84
|
+
assert dev_dependencies["eslint-plugin-react"] == "^7.37.5"
|
|
85
|
+
assert not any(
|
|
86
|
+
version == "latest" for version in dev_dependencies.values()
|
|
87
|
+
)
|
|
79
88
|
|
|
80
89
|
assert (project_dir / "eslint.config.mjs").exists()
|
|
81
90
|
assert (project_dir / ".prettierrc").exists()
|
|
@@ -210,6 +219,83 @@ def test_init_scaffold_selection_runs_requested_generators_in_dependency_order(
|
|
|
210
219
|
]
|
|
211
220
|
|
|
212
221
|
|
|
222
|
+
def test_init_accepts_comma_separated_scaffold_values(monkeypatch):
|
|
223
|
+
scaffold_calls: list[str] = []
|
|
224
|
+
instructions_calls: list[dict[str, object]] = []
|
|
225
|
+
|
|
226
|
+
def fake_run_command(
|
|
227
|
+
self, cmd, *, cwd=None, env=None, capture=False, supports_dry_run=False
|
|
228
|
+
):
|
|
229
|
+
return _completed(cmd)
|
|
230
|
+
|
|
231
|
+
def fake_domain(*, name, dry_run, migrations=False):
|
|
232
|
+
scaffold_calls.append(f"domain:{name}:{dry_run}:{migrations}")
|
|
233
|
+
|
|
234
|
+
def fake_api(*, name, dry_run):
|
|
235
|
+
scaffold_calls.append(f"api:{name}:{dry_run}")
|
|
236
|
+
|
|
237
|
+
def fake_ui(*, name, dry_run, include_library=True, include_web=True):
|
|
238
|
+
scaffold_calls.append(
|
|
239
|
+
f"ui:{name}:{dry_run}:{include_library}:{include_web}"
|
|
240
|
+
)
|
|
241
|
+
|
|
242
|
+
def fake_storybook(*, ui_package=None, dry_run):
|
|
243
|
+
scaffold_calls.append(f"storybook:{ui_package}:{dry_run}")
|
|
244
|
+
|
|
245
|
+
monkeypatch.setattr("rpr.context.RunContext.run_command", fake_run_command)
|
|
246
|
+
monkeypatch.setattr(
|
|
247
|
+
"rpr.commands.init._scaffold_ai_instructions",
|
|
248
|
+
lambda *args, **kwargs: instructions_calls.append({"args": args, "kwargs": kwargs}),
|
|
249
|
+
)
|
|
250
|
+
monkeypatch.setattr("rpr.commands.generate.domain.domain", fake_domain)
|
|
251
|
+
monkeypatch.setattr("rpr.commands.generate.api.api", fake_api)
|
|
252
|
+
monkeypatch.setattr("rpr.commands.generate.ui.ui", fake_ui)
|
|
253
|
+
monkeypatch.setattr("rpr.commands.generate.storybook.storybook", fake_storybook)
|
|
254
|
+
|
|
255
|
+
commands = [
|
|
256
|
+
[
|
|
257
|
+
"init",
|
|
258
|
+
"comma-space",
|
|
259
|
+
"--scaffold",
|
|
260
|
+
"instructions,",
|
|
261
|
+
"domain,",
|
|
262
|
+
"api,",
|
|
263
|
+
"ui,",
|
|
264
|
+
"web,",
|
|
265
|
+
"storybook",
|
|
266
|
+
],
|
|
267
|
+
[
|
|
268
|
+
"init",
|
|
269
|
+
"comma-tight",
|
|
270
|
+
"--scaffold",
|
|
271
|
+
"instructions,domain,api,ui,web,storybook",
|
|
272
|
+
],
|
|
273
|
+
[
|
|
274
|
+
"init",
|
|
275
|
+
"comma-quoted",
|
|
276
|
+
"--scaffold",
|
|
277
|
+
"instructions, domain, api, ui, web, storybook",
|
|
278
|
+
],
|
|
279
|
+
]
|
|
280
|
+
|
|
281
|
+
with runner.isolated_filesystem():
|
|
282
|
+
for command in commands:
|
|
283
|
+
scaffold_calls.clear()
|
|
284
|
+
instructions_calls.clear()
|
|
285
|
+
|
|
286
|
+
result = runner.invoke(app, command)
|
|
287
|
+
|
|
288
|
+
project_name = command[1]
|
|
289
|
+
assert result.exit_code == 0, result.stdout
|
|
290
|
+
assert len(instructions_calls) == 1
|
|
291
|
+
assert scaffold_calls == [
|
|
292
|
+
f"domain:{project_name}:False:False",
|
|
293
|
+
f"api:{project_name}:False",
|
|
294
|
+
f"ui:{project_name}:False:True:True",
|
|
295
|
+
f"storybook:{project_name}-ui:False",
|
|
296
|
+
]
|
|
297
|
+
|
|
298
|
+
|
|
213
299
|
def test_init_forwards_domain_migrations(monkeypatch):
|
|
214
300
|
recorded_calls: list[dict[str, object]] = []
|
|
215
301
|
scaffold_calls: list[str] = []
|
|
@@ -27,6 +27,8 @@ def test_refresh_manifest_updates_manifest_data_file(monkeypatch, tmp_path: Path
|
|
|
27
27
|
assert result.exit_code == 0, result.stdout
|
|
28
28
|
assert "uvicorn[standard]: uvicorn[standard]>=0.34 -> uvicorn[standard]>=9.9.9" in result.stdout
|
|
29
29
|
updated = manifest_path.read_text()
|
|
30
|
+
assert "'eslint': {'specifier': '^9.39.4'}" in updated
|
|
31
|
+
assert "'eslint-plugin-import': {'specifier': '^2.32.0'}" in updated
|
|
30
32
|
assert "'specifier': '^9.9.9'" in updated
|
|
31
33
|
assert "'specifier': 'fastapi>=9.9.9'" in updated
|
|
32
34
|
assert "'specifier': 'uvicorn[standard]>=9.9.9'" in updated
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.1.3"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rpr_cli-0.1.3 → rpr_cli-0.1.6}/Sample-dot-github/instructions/tooling-setup.instructions.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|