moai-adk 0.34.0__py3-none-any.whl → 1.1.0__py3-none-any.whl
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.
- moai_adk/__main__.py +136 -5
- moai_adk/astgrep/__init__.py +37 -0
- moai_adk/astgrep/analyzer.py +522 -0
- moai_adk/astgrep/models.py +124 -0
- moai_adk/astgrep/rules.py +179 -0
- moai_adk/cli/commands/analyze.py +11 -2
- moai_adk/cli/commands/doctor.py +7 -1
- moai_adk/cli/commands/init.py +321 -11
- moai_adk/cli/commands/language.py +7 -1
- moai_adk/cli/commands/rank.py +449 -0
- moai_adk/cli/commands/status.py +7 -1
- moai_adk/cli/commands/switch.py +325 -0
- moai_adk/cli/commands/update.py +296 -23
- moai_adk/cli/prompts/init_prompts.py +362 -66
- moai_adk/cli/prompts/translations/__init__.py +573 -0
- moai_adk/cli/ui/prompts.py +61 -2
- moai_adk/cli/worktree/cli.py +106 -1
- moai_adk/cli/worktree/manager.py +155 -0
- moai_adk/core/config/unified.py +244 -63
- moai_adk/core/credentials.py +264 -0
- moai_adk/core/error_recovery_system.py +22 -4
- moai_adk/core/git/conflict_detector.py +10 -1
- moai_adk/core/git/event_detector.py +16 -5
- moai_adk/core/integration/engine.py +2 -2
- moai_adk/core/integration/integration_tester.py +5 -5
- moai_adk/core/language_config_resolver.py +9 -3
- moai_adk/core/merge/analyzer.py +509 -324
- moai_adk/core/migration/alfred_to_moai_migrator.py +7 -1
- moai_adk/core/migration/backup_manager.py +54 -4
- moai_adk/core/migration/file_migrator.py +174 -2
- moai_adk/core/migration/interactive_checkbox_ui.py +42 -31
- moai_adk/core/migration/version_detector.py +123 -19
- moai_adk/core/migration/version_migrator.py +44 -9
- moai_adk/core/model_allocator.py +241 -0
- moai_adk/core/project/backup_utils.py +12 -2
- moai_adk/core/project/initializer.py +44 -87
- moai_adk/core/project/phase_executor.py +95 -33
- moai_adk/core/project/validator.py +16 -1
- moai_adk/core/quality/trust_checker.py +30 -10
- moai_adk/core/rollback_manager.py +60 -25
- moai_adk/core/template/backup.py +88 -6
- moai_adk/core/template/config.py +33 -9
- moai_adk/core/template/merger.py +34 -8
- moai_adk/core/template/processor.py +334 -11
- moai_adk/core/template_engine.py +10 -1
- moai_adk/core/template_variable_synchronizer.py +16 -2
- moai_adk/core/version_sync.py +54 -6
- moai_adk/foundation/__init__.py +1 -20
- moai_adk/foundation/testing.py +1 -1
- moai_adk/loop/__init__.py +54 -0
- moai_adk/loop/controller.py +305 -0
- moai_adk/loop/feedback.py +230 -0
- moai_adk/loop/state.py +209 -0
- moai_adk/loop/storage.py +220 -0
- moai_adk/lsp/__init__.py +70 -0
- moai_adk/lsp/client.py +320 -0
- moai_adk/lsp/models.py +261 -0
- moai_adk/lsp/protocol.py +404 -0
- moai_adk/lsp/server_manager.py +248 -0
- moai_adk/project/configuration.py +8 -1
- moai_adk/py.typed +0 -0
- moai_adk/ralph/__init__.py +37 -0
- moai_adk/ralph/engine.py +307 -0
- moai_adk/rank/__init__.py +21 -0
- moai_adk/rank/auth.py +425 -0
- moai_adk/rank/client.py +557 -0
- moai_adk/rank/config.py +147 -0
- moai_adk/rank/hook.py +1503 -0
- moai_adk/rank/py.typed +0 -0
- moai_adk/statusline/__init__.py +3 -0
- moai_adk/statusline/enhanced_output_style_detector.py +5 -5
- moai_adk/statusline/main.py +20 -1
- moai_adk/statusline/memory_collector.py +268 -0
- moai_adk/statusline/renderer.py +54 -38
- moai_adk/tag_system/__init__.py +48 -0
- moai_adk/tag_system/atomic_ops.py +117 -0
- moai_adk/tag_system/linkage.py +335 -0
- moai_adk/tag_system/parser.py +176 -0
- moai_adk/tag_system/validator.py +200 -0
- moai_adk/templates/.claude/agents/moai/builder-agent.md +19 -3
- moai_adk/templates/.claude/agents/moai/builder-command.md +62 -16
- moai_adk/templates/.claude/agents/moai/builder-plugin.md +763 -0
- moai_adk/templates/.claude/agents/moai/builder-skill.md +21 -5
- moai_adk/templates/.claude/agents/moai/expert-backend.md +103 -39
- moai_adk/templates/.claude/agents/moai/expert-debug.md +9 -3
- moai_adk/templates/.claude/agents/moai/expert-devops.md +16 -14
- moai_adk/templates/.claude/agents/moai/expert-frontend.md +45 -31
- moai_adk/templates/.claude/agents/moai/expert-performance.md +13 -9
- moai_adk/templates/.claude/agents/moai/expert-refactoring.md +228 -0
- moai_adk/templates/.claude/agents/moai/expert-security.md +19 -3
- moai_adk/templates/.claude/agents/moai/expert-testing.md +13 -9
- moai_adk/templates/.claude/agents/moai/manager-claude-code.md +8 -2
- moai_adk/templates/.claude/agents/moai/manager-docs.md +10 -5
- moai_adk/templates/.claude/agents/moai/manager-git.md +99 -27
- moai_adk/templates/.claude/agents/moai/manager-project.md +87 -7
- moai_adk/templates/.claude/agents/moai/manager-quality.md +22 -5
- moai_adk/templates/.claude/agents/moai/manager-spec.md +8 -2
- moai_adk/templates/.claude/agents/moai/manager-strategy.md +45 -14
- moai_adk/templates/.claude/agents/moai/manager-tdd.md +16 -3
- moai_adk/templates/.claude/commands/moai/0-project.md +239 -1185
- moai_adk/templates/.claude/commands/moai/1-plan.md +383 -363
- moai_adk/templates/.claude/commands/moai/2-run.md +254 -347
- moai_adk/templates/.claude/commands/moai/3-sync.md +174 -100
- moai_adk/templates/.claude/commands/moai/9-feedback.md +49 -33
- moai_adk/templates/.claude/commands/moai/alfred.md +339 -0
- moai_adk/templates/.claude/commands/moai/cancel-loop.md +163 -0
- moai_adk/templates/.claude/commands/moai/fix.md +264 -0
- moai_adk/templates/.claude/commands/moai/loop.md +363 -0
- moai_adk/templates/.claude/hooks/moai/lib/README.md +143 -0
- moai_adk/templates/.claude/hooks/moai/lib/__init__.py +37 -81
- moai_adk/templates/.claude/hooks/moai/lib/alfred_detector.py +105 -0
- moai_adk/templates/.claude/hooks/moai/lib/atomic_write.py +122 -0
- moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +4 -1
- moai_adk/templates/.claude/hooks/moai/lib/common.py +35 -5
- moai_adk/templates/.claude/hooks/moai/lib/config.py +376 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +24 -28
- moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +14 -14
- moai_adk/templates/.claude/hooks/moai/lib/enhanced_output_style_detector.py +372 -0
- moai_adk/templates/.claude/hooks/moai/lib/exceptions.py +171 -0
- moai_adk/templates/.claude/hooks/moai/lib/file_utils.py +95 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_collector.py +190 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +15 -13
- moai_adk/templates/.claude/hooks/moai/lib/language_detector.py +298 -0
- moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +125 -25
- moai_adk/templates/.claude/hooks/moai/lib/main.py +341 -0
- moai_adk/templates/.claude/hooks/moai/lib/memory_collector.py +268 -0
- moai_adk/templates/.claude/hooks/moai/lib/metrics_tracker.py +78 -0
- moai_adk/templates/.claude/hooks/moai/lib/models.py +9 -7
- moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +204 -13
- moai_adk/templates/.claude/hooks/moai/lib/project.py +23 -14
- moai_adk/templates/.claude/hooks/moai/lib/renderer.py +359 -0
- moai_adk/templates/.claude/hooks/moai/lib/tag_linkage.py +333 -0
- moai_adk/templates/.claude/hooks/moai/lib/tag_parser.py +176 -0
- moai_adk/templates/.claude/hooks/moai/lib/tag_validator.py +200 -0
- moai_adk/templates/.claude/hooks/moai/lib/timeout.py +5 -5
- moai_adk/templates/.claude/hooks/moai/lib/tool_registry.py +896 -0
- moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +30 -18
- moai_adk/templates/.claude/hooks/moai/lib/update_checker.py +129 -0
- moai_adk/templates/.claude/hooks/moai/lib/version_reader.py +741 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__ast_grep_scan.py +276 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__code_formatter.py +255 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__coverage_guard.py +325 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__linter.py +315 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__lsp_diagnostic.py +508 -0
- moai_adk/templates/.claude/hooks/moai/pre_commit__tag_validator.py +287 -0
- moai_adk/templates/.claude/hooks/moai/pre_tool__security_guard.py +268 -0
- moai_adk/templates/.claude/hooks/moai/pre_tool__tdd_enforcer.py +208 -0
- moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +93 -61
- moai_adk/templates/.claude/hooks/moai/session_end__rank_submit.py +69 -0
- moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +165 -70
- moai_adk/templates/.claude/hooks/moai/shared/utils/announcement_translator.py +206 -0
- moai_adk/templates/.claude/hooks/moai/stop__loop_controller.py +621 -0
- moai_adk/templates/.claude/output-styles/moai/alfred.md +758 -0
- moai_adk/templates/.claude/output-styles/moai/r2d2.md +86 -3
- moai_adk/templates/.claude/output-styles/moai/yoda.md +2 -2
- moai_adk/templates/.claude/settings.json +154 -77
- moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +252 -198
- moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +169 -323
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +39 -27
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +115 -125
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +150 -150
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +182 -175
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +198 -138
- moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +226 -320
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +43 -222
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +75 -219
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +103 -463
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/component-architecture.md +723 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/nextjs16-patterns.md +713 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/performance-optimization.md +694 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/react19-patterns.md +591 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/state-management.md +680 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/vue35-patterns.md +802 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +118 -339
- moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +74 -377
- moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +299 -70
- moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +205 -182
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/advanced-agent-patterns.md +370 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-cli-reference-official.md +420 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +32 -22
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-devcontainers-official.md +381 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-discover-plugins-official.md +379 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-headless-official.md +378 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +110 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugin-marketplaces-official.md +308 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugins-official.md +640 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sandboxing-official.md +282 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +425 -71
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-statusline-official.md +293 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +325 -143
- moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +96 -316
- moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +116 -294
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-advanced.md +279 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-implementation.md +267 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +121 -650
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/patterns.md +22 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-ears-format.md +200 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +37 -730
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-tdd-implementation.md +275 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +77 -819
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-implementation.md +244 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-validation.md +219 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +14 -18
- moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +86 -270
- moai_adk/templates/.claude/skills/moai-framework-electron/SKILL.md +288 -0
- moai_adk/templates/.claude/skills/moai-framework-electron/examples.md +2082 -0
- moai_adk/templates/.claude/skills/moai-framework-electron/reference.md +1649 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +76 -582
- moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +1239 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/modules/advanced-patterns.md +401 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +1136 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +82 -436
- moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +585 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/aspnet-core.md +627 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/blazor-components.md +767 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/cqrs-validation.md +626 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/csharp12-features.md +580 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/efcore-patterns.md +622 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +403 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +65 -542
- moai_adk/templates/.claude/skills/moai-lang-elixir/examples.md +1171 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/modules/advanced-patterns.md +531 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/reference.md +889 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +32 -405
- moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +114 -293
- moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +83 -307
- moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +179 -0
- moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +973 -0
- moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +1543 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +42 -279
- moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +94 -556
- moai_adk/templates/.claude/skills/moai-lang-php/examples.md +1608 -0
- moai_adk/templates/.claude/skills/moai-lang-php/modules/advanced-patterns.md +538 -0
- moai_adk/templates/.claude/skills/moai-lang-php/reference.md +1323 -0
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +108 -358
- moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +84 -482
- moai_adk/templates/.claude/skills/moai-lang-r/examples.md +1154 -0
- moai_adk/templates/.claude/skills/moai-lang-r/modules/advanced-patterns.md +489 -0
- moai_adk/templates/.claude/skills/moai-lang-r/reference.md +1087 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +106 -610
- moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +1106 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/modules/advanced-patterns.md +309 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/modules/testing-patterns.md +306 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +1024 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +51 -265
- moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +106 -442
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/akka-actors.md +479 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/cats-effect.md +489 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/functional-programming.md +460 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/spark-data.md +498 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/zio-patterns.md +541 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +88 -457
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/combine-reactive.md +256 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/concurrency.md +270 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/swift6-features.md +265 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/swiftui-patterns.md +314 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +75 -283
- moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +97 -252
- moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +64 -240
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +331 -12
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +330 -37
- moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +90 -287
- moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +200 -206
- moai_adk/templates/.claude/skills/moai-platform-auth0/examples.md +2446 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/adaptive-mfa.md +233 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/akamai-integration.md +214 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/application-credentials.md +280 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-log-events.md +224 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-overview.md +140 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/bot-detection.md +144 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/breached-password-detection.md +187 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/brute-force-protection.md +189 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/certifications.md +282 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/compliance-overview.md +263 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/continuous-session-protection.md +307 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/customize-mfa.md +177 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/dpop-implementation.md +283 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/fapi-implementation.md +259 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/gdpr-compliance.md +313 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/guardian-configuration.md +269 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/highly-regulated-identity.md +272 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/jwt-fundamentals.md +248 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mdl-verification.md +210 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-api-management.md +278 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-factors.md +226 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-overview.md +174 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mtls-sender-constraining.md +316 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/ropg-flow-mfa.md +216 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-center.md +325 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-guidance.md +277 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/state-parameters.md +177 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/step-up-authentication.md +251 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/suspicious-ip-throttling.md +240 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/tenant-access-control.md +179 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/webauthn-fido.md +235 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/reference.md +224 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +75 -330
- moai_adk/templates/.claude/skills/moai-platform-clerk/examples.md +1426 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/modules/advanced-patterns.md +417 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/reference.md +273 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +100 -340
- moai_adk/templates/.claude/skills/moai-platform-convex/examples.md +506 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/auth-integration.md +421 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/file-storage.md +474 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/reactive-queries.md +302 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/server-functions.md +452 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/reference.md +385 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +113 -326
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/examples.md +514 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/custom-claims.md +374 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/phone-auth.md +372 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/social-auth.md +339 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/reference.md +382 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +71 -302
- moai_adk/templates/.claude/skills/moai-platform-firestore/examples.md +445 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/offline-cache.md +392 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/realtime-listeners.md +441 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/security-rules.md +352 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/transactions.md +452 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/reference.md +322 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +101 -412
- moai_adk/templates/.claude/skills/moai-platform-neon/examples.md +470 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/auto-scaling.md +349 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/branching-workflows.md +354 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/connection-pooling.md +412 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/pitr-backups.md +458 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/reference.md +272 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +96 -327
- moai_adk/templates/.claude/skills/moai-platform-railway/examples.md +539 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/docker-deployment.md +261 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/multi-service.md +291 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/networking-domains.md +338 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/volumes-storage.md +353 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/reference.md +374 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +103 -428
- moai_adk/templates/.claude/skills/moai-platform-supabase/examples.md +502 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/auth-integration.md +384 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/edge-functions.md +371 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/postgresql-pgvector.md +231 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/realtime-presence.md +354 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/row-level-security.md +286 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/storage-cdn.md +319 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/typescript-patterns.md +453 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/reference.md +284 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +96 -446
- moai_adk/templates/.claude/skills/moai-platform-vercel/examples.md +502 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/analytics-speed.md +348 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/deployment-config.md +344 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/edge-functions.md +222 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/isr-caching.md +306 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/kv-storage.md +399 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/reference.md +360 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/SKILL.md +193 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/examples.md +1099 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/language-specific.md +307 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/pattern-syntax.md +237 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/refactoring-patterns.md +260 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/security-rules.md +239 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/reference.md +288 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/go.yml +90 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/python.yml +101 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/typescript.yml +83 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/complexity-check.yml +94 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/deprecated-apis.yml +84 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/secrets-detection.yml +89 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/sql-injection.yml +45 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/xss-prevention.yml +50 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/sgconfig.yml +54 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +225 -423
- moai_adk/templates/.claude/skills/moai-workflow-loop/SKILL.md +197 -0
- moai_adk/templates/.claude/skills/moai-workflow-loop/examples.md +1063 -0
- moai_adk/templates/.claude/skills/moai-workflow-loop/reference.md +1414 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +211 -314
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +15 -43
- moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +119 -316
- moai_adk/templates/.claude/skills/moai-workflow-spec/modules/advanced-patterns.md +237 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +96 -203
- moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +201 -388
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +52 -3
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +263 -806
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/context7-integration.md +286 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/review-workflows.md +500 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/relevance-analysis.md +154 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/safety-analysis.md +148 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/scoring-algorithms.md +196 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/timeliness-analysis.md +168 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/truthfulness-analysis.md +136 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/usability-analysis.md +153 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework.md +257 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +191 -1344
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/analysis-patterns.md +340 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/core-classes.md +299 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/tool-integration.md +380 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/debugging-workflows.md +451 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/error-analysis.md +442 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/optimization-patterns.md +473 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/profiling-techniques.md +481 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/ai-optimization.md +241 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/bottleneck-detection.md +397 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/optimization-plan.md +315 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/profiler-core.md +277 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/real-time-monitoring.md +187 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +287 -1194
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/quality-metrics.md +415 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/ai-workflows.md +620 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/patterns.md +692 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/security-analysis.md +429 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +262 -1192
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/static-analysis.md +438 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd/core-classes.md +397 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/advanced-features.md +494 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/red-green-refactor.md +316 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-generation.md +471 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-patterns.md +371 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +227 -1222
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/trust5-validation.md +428 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/SKILL.md +228 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/integration-patterns.md +149 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/moai-adk-integration.md +245 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-advanced.md +310 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-development.md +202 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-workflows.md +302 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/registry-architecture.md +271 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/resource-optimization.md +300 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/tools-integration.md +280 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/troubleshooting.md +397 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-commands.md +296 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-management.md +217 -0
- moai_adk/templates/.git-hooks/pre-push +162 -59
- moai_adk/templates/.github/workflows/ci-universal.yml +934 -133
- moai_adk/templates/.gitignore +65 -107
- moai_adk/templates/.lsp.json +152 -0
- moai_adk/templates/.mcp.json +2 -20
- moai_adk/templates/.moai/announcements/en.json +18 -0
- moai_adk/templates/.moai/announcements/ja.json +18 -0
- moai_adk/templates/.moai/announcements/ko.json +18 -0
- moai_adk/templates/.moai/announcements/zh.json +18 -0
- moai_adk/templates/.moai/config/config.yaml +8 -2
- moai_adk/templates/.moai/config/multilingual-triggers.yaml +213 -0
- moai_adk/templates/.moai/config/sections/language.yaml +2 -2
- moai_adk/templates/.moai/config/sections/llm.yaml +41 -0
- moai_adk/templates/.moai/config/sections/pricing.yaml +30 -0
- moai_adk/templates/.moai/config/sections/project.yaml +2 -2
- moai_adk/templates/.moai/config/sections/quality.yaml +43 -5
- moai_adk/templates/.moai/config/sections/ralph.yaml +55 -0
- moai_adk/templates/.moai/config/sections/system.yaml +46 -1
- moai_adk/templates/.moai/config/sections/user.yaml +1 -1
- moai_adk/templates/.moai/config/statusline-config.yaml +2 -2
- moai_adk/templates/.moai/llm-configs/glm.json +22 -0
- moai_adk/templates/CLAUDE.ja.md +343 -0
- moai_adk/templates/CLAUDE.ko.md +343 -0
- moai_adk/templates/CLAUDE.md +200 -499
- moai_adk/templates/CLAUDE.zh.md +343 -0
- moai_adk/utils/common.py +37 -0
- moai_adk/version.py +1 -1
- moai_adk-1.1.0.dist-info/METADATA +2443 -0
- moai_adk-1.1.0.dist-info/RECORD +701 -0
- {moai_adk-0.34.0.dist-info → moai_adk-1.1.0.dist-info}/entry_points.txt +2 -0
- moai_adk-1.1.0.dist-info/licenses/LICENSE +99 -0
- moai_adk/core/config/auto_spec_config.py +0 -340
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +0 -901
- moai_adk/core/spec/confidence_scoring.py +0 -680
- moai_adk/core/spec/ears_template_engine.py +0 -1247
- moai_adk/core/spec/quality_validator.py +0 -687
- moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +0 -670
- moai_adk/templates/.claude/agents/moai/expert-database.md +0 -777
- moai_adk/templates/.claude/agents/moai/expert-uiux.md +0 -1041
- moai_adk/templates/.claude/agents/moai/mcp-context7.md +0 -458
- moai_adk/templates/.claude/agents/moai/mcp-figma.md +0 -1607
- moai_adk/templates/.claude/agents/moai/mcp-notion.md +0 -789
- moai_adk/templates/.claude/agents/moai/mcp-playwright.md +0 -469
- moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +0 -1032
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +0 -438
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +0 -431
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +0 -405
- moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +0 -336
- moai_adk/templates/.claude/skills/moai-mcp-figma/SKILL.md +0 -402
- moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +0 -607
- moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +0 -300
- moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +0 -537
- moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +0 -520
- moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +0 -574
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +0 -317
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +0 -663
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +0 -190
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +0 -175
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +0 -196
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +0 -17
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +0 -158
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +0 -340
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +0 -713
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +0 -538
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +0 -1336
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +0 -730
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +0 -608
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +0 -1005
- moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +0 -436
- moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +0 -411
- moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +0 -982
- moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +0 -778
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +0 -646
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +0 -782
- moai_adk/templates/.moai/config/questions/_schema.yaml +0 -151
- moai_adk/templates/.moai/config/questions/tab0-init.yaml +0 -251
- moai_adk/templates/.moai/config/questions/tab1-user.yaml +0 -108
- moai_adk/templates/.moai/config/questions/tab2-project.yaml +0 -81
- moai_adk/templates/.moai/config/questions/tab3-git.yaml +0 -634
- moai_adk/templates/.moai/config/questions/tab4-quality.yaml +0 -170
- moai_adk/templates/.moai/config/questions/tab5-system.yaml +0 -87
- moai_adk/templates/.moai/scripts/setup-glm.py +0 -136
- moai_adk-0.34.0.dist-info/METADATA +0 -2999
- moai_adk-0.34.0.dist-info/RECORD +0 -463
- moai_adk-0.34.0.dist-info/licenses/LICENSE +0 -21
- /moai_adk/foundation/{git.py → git/__init__.py} +0 -0
- /moai_adk/templates/.claude/skills/moai-library-mermaid/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-library-mermaid/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-library-nextra/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-jit-docs/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-jit-docs/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-testing/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-testing/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/{moai-worktree → moai-workflow-worktree}/examples.md +0 -0
- /moai_adk/templates/.claude/skills/{moai-worktree → moai-workflow-worktree}/reference.md +0 -0
- {moai_adk-0.34.0.dist-info → moai_adk-1.1.0.dist-info}/WHEEL +0 -0
|
@@ -1,20 +1,32 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: moai-lang-r
|
|
3
|
-
description: R 4.4+ development specialist covering tidyverse, ggplot2, Shiny, and data science patterns. Use when developing data analysis pipelines, visualizations, or Shiny applications.
|
|
4
|
-
version: 1.
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
name: "moai-lang-r"
|
|
3
|
+
description: "R 4.4+ development specialist covering tidyverse, ggplot2, Shiny, and data science patterns. Use when developing data analysis pipelines, visualizations, or Shiny applications."
|
|
4
|
+
version: 1.1.0
|
|
5
|
+
category: "language"
|
|
6
|
+
modularized: true
|
|
7
|
+
user-invocable: false
|
|
8
|
+
tags:
|
|
9
|
+
["language", "r", "tidyverse", "ggplot2", "shiny", "dplyr", "data-science"]
|
|
10
|
+
updated: 2026-01-11
|
|
11
|
+
status: "active"
|
|
12
|
+
allowed-tools:
|
|
13
|
+
- Read
|
|
14
|
+
- Grep
|
|
15
|
+
- Glob
|
|
16
|
+
- Bash
|
|
17
|
+
- mcp__context7__resolve-library-id
|
|
18
|
+
- mcp__context7__get-library-docs
|
|
8
19
|
---
|
|
9
20
|
|
|
10
21
|
## Quick Reference (30 seconds)
|
|
11
22
|
|
|
12
23
|
R 4.4+ Development Specialist - tidyverse, ggplot2, Shiny, renv, and modern R patterns.
|
|
13
24
|
|
|
14
|
-
Auto-Triggers:
|
|
25
|
+
Auto-Triggers: Files with .R extension, .Rmd, .qmd, DESCRIPTION, renv.lock, Shiny or ggplot2 discussions
|
|
15
26
|
|
|
16
27
|
Core Capabilities:
|
|
17
|
-
|
|
28
|
+
|
|
29
|
+
- R 4.4 Features: Native pipe operator, lambda syntax with backslash, improved error messages
|
|
18
30
|
- Data Manipulation: dplyr, tidyr, purrr, stringr, forcats
|
|
19
31
|
- Visualization: ggplot2, plotly, scales, patchwork
|
|
20
32
|
- Web Applications: Shiny, reactivity, modules, bslib
|
|
@@ -25,58 +37,17 @@ Core Capabilities:
|
|
|
25
37
|
|
|
26
38
|
### Quick Patterns
|
|
27
39
|
|
|
28
|
-
dplyr Data Pipeline:
|
|
29
|
-
|
|
30
|
-
library
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
summarise(
|
|
40
|
-
total_revenue = sum(revenue_k, na.rm = TRUE),
|
|
41
|
-
avg_growth = mean(growth, na.rm = TRUE),
|
|
42
|
-
.groups = "drop"
|
|
43
|
-
)
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
ggplot2 Visualization:
|
|
47
|
-
```r
|
|
48
|
-
library(ggplot2)
|
|
49
|
-
|
|
50
|
-
ggplot(data, aes(x = date, y = value, color = category)) +
|
|
51
|
-
geom_line(linewidth = 1) +
|
|
52
|
-
geom_point(size = 2) +
|
|
53
|
-
scale_color_viridis_d() +
|
|
54
|
-
labs(
|
|
55
|
-
title = "Trend Analysis",
|
|
56
|
-
x = "Date", y = "Value",
|
|
57
|
-
color = "Category"
|
|
58
|
-
) +
|
|
59
|
-
theme_minimal()
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
Shiny Basic App:
|
|
63
|
-
```r
|
|
64
|
-
library(shiny)
|
|
65
|
-
|
|
66
|
-
ui <- fluidPage(
|
|
67
|
-
selectInput("var", "Variable:", choices = names(mtcars)),
|
|
68
|
-
plotOutput("plot")
|
|
69
|
-
)
|
|
70
|
-
|
|
71
|
-
server <- function(input, output, session) {
|
|
72
|
-
output$plot <- renderPlot({
|
|
73
|
-
ggplot(mtcars, aes(.data[[input$var]])) +
|
|
74
|
-
geom_histogram()
|
|
75
|
-
})
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
shinyApp(ui, server)
|
|
79
|
-
```
|
|
40
|
+
dplyr Data Pipeline Pattern:
|
|
41
|
+
|
|
42
|
+
Load tidyverse library. Create result by piping data through filter for year 2020 or later, mutate adding revenue_k as revenue divided by 1000 and growth as current minus lagged revenue divided by lagged revenue, group_by category, then summarise with total_revenue as sum, avg_growth as mean with na.rm TRUE, and groups set to drop.
|
|
43
|
+
|
|
44
|
+
ggplot2 Visualization Pattern:
|
|
45
|
+
|
|
46
|
+
Load ggplot2 library. Create ggplot with data and aes mapping x to date, y to value, and color to category. Add geom_line with linewidth 1 and geom_point with size 2. Apply scale_color_viridis_d for color scale. Add labs for title, axis labels, and color legend. Apply theme_minimal for clean appearance.
|
|
47
|
+
|
|
48
|
+
Shiny Basic App Pattern:
|
|
49
|
+
|
|
50
|
+
Load shiny library. Create ui using fluidPage with selectInput for variable selection from mtcars column names and plotOutput for plot. Create server function with input, output, and session parameters. In server, assign renderPlot to output plot using ggplot with mtcars and aes using .data pronoun with input variable for histogram. Create app with shinyApp passing ui and server.
|
|
80
51
|
|
|
81
52
|
---
|
|
82
53
|
|
|
@@ -84,450 +55,98 @@ shinyApp(ui, server)
|
|
|
84
55
|
|
|
85
56
|
### R 4.4 Modern Features
|
|
86
57
|
|
|
87
|
-
Native Pipe Operator
|
|
88
|
-
```r
|
|
89
|
-
# R 4.4+ native pipe (preferred over magrittr %>%)
|
|
90
|
-
result <- data |>
|
|
91
|
-
filter(!is.na(value)) |>
|
|
92
|
-
mutate(log_value = log(value)) |>
|
|
93
|
-
summarise(mean_log = mean(log_value))
|
|
58
|
+
Native Pipe Operator:
|
|
94
59
|
|
|
95
|
-
|
|
96
|
-
data |>
|
|
97
|
-
lm(formula = y ~ x, data = _)
|
|
98
|
-
|
|
99
|
-
# Chain with function calls
|
|
100
|
-
data |>
|
|
101
|
-
(\(d) split(d, d$group))() |>
|
|
102
|
-
lapply(\(x) mean(x$value))
|
|
103
|
-
```
|
|
60
|
+
Create result by piping data through filter removing NA values, mutate adding log_value as log of value, and summarise computing mean_log. For non-first argument position, use underscore placeholder in lm formula call with data parameter.
|
|
104
61
|
|
|
105
62
|
Lambda Syntax with Backslash:
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
map(data, \(x) x^2)
|
|
109
|
-
map2(list1, list2, \(x, y) x + y)
|
|
110
|
-
pmap(list(a = 1:3, b = 4:6), \(a, b) a * b)
|
|
111
|
-
|
|
112
|
-
# In dplyr contexts
|
|
113
|
-
data |>
|
|
114
|
-
mutate(across(where(is.numeric), \(x) scale(x)[,1]))
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
Improved Error Messages:
|
|
118
|
-
```r
|
|
119
|
-
# R 4.4 provides clearer error traces
|
|
120
|
-
# Enable for debugging
|
|
121
|
-
options(error = rlang::entrace)
|
|
122
|
-
rlang::global_entrace()
|
|
123
|
-
|
|
124
|
-
# Informative conditions
|
|
125
|
-
rlang::abort(
|
|
126
|
-
|
|
127
|
-
message = "Data validation failed",
|
|
128
|
-
class = "validation_error",
|
|
129
|
-
body = c(
|
|
130
|
-
i = "Column 'value' contains negative numbers",
|
|
131
|
-
x = "Expected all positive values"
|
|
132
|
-
)
|
|
133
|
-
)
|
|
134
|
-
```
|
|
63
|
+
|
|
64
|
+
Use map with data and backslash x syntax for x squared. Use map2 with two lists and backslash x y for x plus y. In dplyr contexts, use mutate with across on numeric columns applying backslash x for scale function extracting first column.
|
|
135
65
|
|
|
136
66
|
### tidyverse Data Manipulation
|
|
137
67
|
|
|
138
68
|
dplyr Core Verbs:
|
|
139
|
-
|
|
140
|
-
library
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
select(id, date, amount, category) |>
|
|
146
|
-
mutate(
|
|
147
|
-
month = floor_date(date, "month"),
|
|
148
|
-
amount_scaled = amount / max(amount)
|
|
149
|
-
) |>
|
|
150
|
-
arrange(desc(date))
|
|
151
|
-
|
|
152
|
-
# group_by with summarise
|
|
153
|
-
summary <- processed |>
|
|
154
|
-
group_by(category, month) |>
|
|
155
|
-
summarise(
|
|
156
|
-
n = n(),
|
|
157
|
-
total = sum(amount),
|
|
158
|
-
avg = mean(amount),
|
|
159
|
-
.groups = "drop"
|
|
160
|
-
)
|
|
161
|
-
|
|
162
|
-
# across for multiple columns
|
|
163
|
-
data |>
|
|
164
|
-
mutate(across(starts_with("price"), \(x) round(x, 2))) |>
|
|
165
|
-
summarise(across(where(is.numeric), list(
|
|
166
|
-
mean = \(x) mean(x, na.rm = TRUE),
|
|
167
|
-
sd = \(x) sd(x, na.rm = TRUE)
|
|
168
|
-
)))
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
tidyr Reshaping:
|
|
172
|
-
```r
|
|
173
|
-
library(tidyr)
|
|
174
|
-
|
|
175
|
-
# pivot_longer (wide to long)
|
|
176
|
-
wide_data |>
|
|
177
|
-
pivot_longer(
|
|
178
|
-
cols = starts_with("year_"),
|
|
179
|
-
names_to = "year",
|
|
180
|
-
names_prefix = "year_",
|
|
181
|
-
values_to = "value"
|
|
182
|
-
)
|
|
183
|
-
|
|
184
|
-
# pivot_wider (long to wide)
|
|
185
|
-
long_data |>
|
|
186
|
-
pivot_wider(
|
|
187
|
-
names_from = category,
|
|
188
|
-
values_from = value,
|
|
189
|
-
values_fill = 0
|
|
190
|
-
)
|
|
191
|
-
|
|
192
|
-
# nest/unnest for list columns
|
|
193
|
-
data |>
|
|
194
|
-
group_by(id) |>
|
|
195
|
-
nest() |>
|
|
196
|
-
mutate(model = map(data, \(d) lm(y ~ x, data = d))) |>
|
|
197
|
-
mutate(summary = map(model, broom::tidy)) |>
|
|
198
|
-
unnest(summary)
|
|
199
|
-
```
|
|
69
|
+
|
|
70
|
+
Load dplyr library. Create processed by piping raw_data through filter for active status and positive amount, select for specific columns, mutate adding month using floor_date and amount_scaled dividing by max, then arrange descending by date. For grouped summaries, pipe through group_by, summarise with n for count, sum and mean for aggregations, and groups drop.
|
|
71
|
+
|
|
72
|
+
tidyr Reshaping Pattern:
|
|
73
|
+
|
|
74
|
+
Load tidyr library. For wide to long transformation, use pivot_longer with cols starting with year prefix, names_to for column name, names_prefix to strip, and values_to for values. For long to wide transformation, use pivot_wider with names_from and values_from, adding values_fill for missing value handling.
|
|
200
75
|
|
|
201
76
|
purrr Functional Programming:
|
|
202
|
-
|
|
203
|
-
library
|
|
204
|
-
|
|
205
|
-
# map variants
|
|
206
|
-
files |> map(\(f) read_csv(f))
|
|
207
|
-
files |> map_dfr(\(f) read_csv(f), .id = "source")
|
|
208
|
-
values |> map_dbl(\(x) mean(x, na.rm = TRUE))
|
|
209
|
-
values |> map_chr(\(x) paste(x, collapse = ", "))
|
|
210
|
-
|
|
211
|
-
# safely for error handling
|
|
212
|
-
safe_read <- safely(read_csv)
|
|
213
|
-
results <- files |> map(safe_read)
|
|
214
|
-
successes <- results |> map("result") |> compact()
|
|
215
|
-
errors <- results |> map("error") |> compact()
|
|
216
|
-
|
|
217
|
-
# possibly with default value
|
|
218
|
-
safe_log <- possibly(log, otherwise = NA_real_)
|
|
219
|
-
values |> map_dbl(safe_log)
|
|
220
|
-
|
|
221
|
-
# walk for side effects
|
|
222
|
-
plots |> walk(\(p) ggsave(paste0(p$name, ".png"), p$plot))
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
stringr Text Processing:
|
|
226
|
-
```r
|
|
227
|
-
library(stringr)
|
|
228
|
-
|
|
229
|
-
# Common operations
|
|
230
|
-
str_detect(text, "pattern")
|
|
231
|
-
str_extract(text, "\\d+")
|
|
232
|
-
str_replace_all(text, "old", "new")
|
|
233
|
-
str_split(text, ",")
|
|
234
|
-
|
|
235
|
-
# Complex patterns with regex
|
|
236
|
-
data |>
|
|
237
|
-
mutate(
|
|
238
|
-
email_domain = str_extract(email, "(?<=@)[^@]+$"),
|
|
239
|
-
first_word = str_extract(name, "^\\w+"),
|
|
240
|
-
cleaned = str_squish(str_to_lower(text))
|
|
241
|
-
)
|
|
242
|
-
```
|
|
77
|
+
|
|
78
|
+
Load purrr library. Use map with files and lambda to read_csv each file. Use map_dfr for row-binding with id parameter for source column. Use map_dbl for extracting numeric results with mean and na.rm TRUE. For error handling, create safe_read using safely wrapper on read_csv. Map files through safe_read, extract results, and use compact to filter successes.
|
|
243
79
|
|
|
244
80
|
### ggplot2 Visualization Patterns
|
|
245
81
|
|
|
246
82
|
Complete Plot Structure:
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
library(scales)
|
|
250
|
-
|
|
251
|
-
p <- ggplot(data, aes(x = x, y = y, color = group)) +
|
|
252
|
-
# Geometries
|
|
253
|
-
geom_point(alpha = 0.7, size = 3) +
|
|
254
|
-
geom_smooth(method = "lm", se = TRUE) +
|
|
255
|
-
# Scales
|
|
256
|
-
scale_x_continuous(labels = comma) +
|
|
257
|
-
scale_y_log10(labels = dollar) +
|
|
258
|
-
scale_color_brewer(palette = "Set2") +
|
|
259
|
-
# Facets
|
|
260
|
-
facet_wrap(~ category, scales = "free_y") +
|
|
261
|
-
# Labels
|
|
262
|
-
labs(
|
|
263
|
-
title = "Analysis Title",
|
|
264
|
-
subtitle = "Descriptive subtitle",
|
|
265
|
-
caption = "Source: Dataset",
|
|
266
|
-
x = "X Axis Label",
|
|
267
|
-
y = "Y Axis Label"
|
|
268
|
-
) +
|
|
269
|
-
# Theme
|
|
270
|
-
theme_minimal(base_size = 12) +
|
|
271
|
-
theme(
|
|
272
|
-
legend.position = "bottom",
|
|
273
|
-
plot.title = element_text(face = "bold"),
|
|
274
|
-
axis.text.x = element_text(angle = 45, hjust = 1)
|
|
275
|
-
)
|
|
276
|
-
|
|
277
|
-
# Save with proper dimensions
|
|
278
|
-
ggsave("output.png", p, width = 10, height = 6, dpi = 300)
|
|
279
|
-
```
|
|
83
|
+
|
|
84
|
+
Load ggplot2 and scales libraries. Create p using ggplot with data and aesthetics for x, y, and color by group. Add geom_point with alpha and size, geom_smooth with lm method and standard error. Apply scale_x_continuous with comma labels, scale_y_log10 with dollar labels, and scale_color_brewer with Set2 palette. Add facet_wrap by category with free_y scales. Add labs for title, subtitle, and axis labels. Apply theme_minimal with base_size and theme for legend position. Save with ggsave specifying filename, plot, dimensions, and dpi.
|
|
280
85
|
|
|
281
86
|
Multiple Plots with patchwork:
|
|
282
|
-
|
|
283
|
-
library
|
|
284
|
-
|
|
285
|
-
p1 <- ggplot(data, aes(x)) + geom_histogram()
|
|
286
|
-
p2 <- ggplot(data, aes(x, y)) + geom_point()
|
|
287
|
-
p3 <- ggplot(data, aes(group, y)) + geom_boxplot()
|
|
288
|
-
|
|
289
|
-
# Combine plots
|
|
290
|
-
combined <- (p1 | p2) / p3 +
|
|
291
|
-
plot_annotation(
|
|
292
|
-
title = "Combined Analysis",
|
|
293
|
-
tag_levels = "A"
|
|
294
|
-
) +
|
|
295
|
-
plot_layout(heights = c(1, 2))
|
|
296
|
-
```
|
|
87
|
+
|
|
88
|
+
Load patchwork library. Create p1 with histogram, p2 with scatter plot, and p3 with boxplot. Combine using pipe and parentheses for layout with p1 beside p2 over p3. Add plot_annotation for title and tag_levels.
|
|
297
89
|
|
|
298
90
|
### Shiny Application Patterns
|
|
299
91
|
|
|
300
92
|
Modular Shiny App:
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
dataFilterUI <- function(id) {
|
|
304
|
-
ns <- NS(id)
|
|
305
|
-
tagList(
|
|
306
|
-
selectInput(ns("category"), "Category:", choices = NULL),
|
|
307
|
-
sliderInput(ns("range"), "Range:", min = 0, max = 100, value = c(0, 100))
|
|
308
|
-
)
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
dataFilterServer <- function(id, data) {
|
|
312
|
-
moduleServer(id, function(input, output, session) {
|
|
313
|
-
observe({
|
|
314
|
-
categories <- unique(data()$category)
|
|
315
|
-
updateSelectInput(session, "category", choices = categories)
|
|
316
|
-
})
|
|
317
|
-
|
|
318
|
-
filtered_data <- reactive({
|
|
319
|
-
req(input$category)
|
|
320
|
-
data() |>
|
|
321
|
-
filter(
|
|
322
|
-
category == input$category,
|
|
323
|
-
value >= input$range[1],
|
|
324
|
-
value <= input$range[2]
|
|
325
|
-
)
|
|
326
|
-
})
|
|
327
|
-
|
|
328
|
-
return(filtered_data)
|
|
329
|
-
})
|
|
330
|
-
}
|
|
331
|
-
```
|
|
93
|
+
|
|
94
|
+
Create dataFilterUI function taking id parameter. Use NS function for namespace. Return tagList with selectInput for category with NULL initial choices and sliderInput for range. Create dataFilterServer function taking id and data reactive. Use moduleServer with inner function. In observe block, extract unique categories and updateSelectInput. Return reactive filtering data by category and range inputs using req for input validation.
|
|
332
95
|
|
|
333
96
|
Reactive Patterns:
|
|
334
|
-
|
|
335
|
-
server
|
|
336
|
-
# reactive: Cached computation
|
|
337
|
-
processed_data <- reactive({
|
|
338
|
-
raw_data() |>
|
|
339
|
-
filter(year == input$year) |>
|
|
340
|
-
mutate(calc = value * input$multiplier)
|
|
341
|
-
})
|
|
342
|
-
|
|
343
|
-
# reactiveVal: Mutable state
|
|
344
|
-
counter <- reactiveVal(0)
|
|
345
|
-
observeEvent(input$increment, {
|
|
346
|
-
counter(counter() + 1)
|
|
347
|
-
})
|
|
348
|
-
|
|
349
|
-
# reactiveValues: Multiple mutable values
|
|
350
|
-
rv <- reactiveValues(
|
|
351
|
-
data = NULL,
|
|
352
|
-
selected = NULL,
|
|
353
|
-
history = list()
|
|
354
|
-
)
|
|
355
|
-
|
|
356
|
-
# eventReactive: Trigger on specific event
|
|
357
|
-
analysis <- eventReactive(input$run_analysis, {
|
|
358
|
-
req(processed_data())
|
|
359
|
-
expensive_computation(processed_data())
|
|
360
|
-
})
|
|
361
|
-
|
|
362
|
-
# observe: Side effects
|
|
363
|
-
observe({
|
|
364
|
-
req(input$selection)
|
|
365
|
-
rv$selected <- input$selection
|
|
366
|
-
})
|
|
367
|
-
|
|
368
|
-
# debounce for rapid inputs
|
|
369
|
-
search_term <- reactive(input$search) |> debounce(300)
|
|
370
|
-
}
|
|
371
|
-
```
|
|
372
|
-
|
|
373
|
-
Shiny with bslib Modern UI:
|
|
374
|
-
```r
|
|
375
|
-
library(shiny)
|
|
376
|
-
library(bslib)
|
|
377
|
-
|
|
378
|
-
ui <- page_sidebar(
|
|
379
|
-
title = "Data Dashboard",
|
|
380
|
-
theme = bs_theme(
|
|
381
|
-
bootswatch = "flatly",
|
|
382
|
-
primary = "#0066CC"
|
|
383
|
-
),
|
|
384
|
-
sidebar = sidebar(
|
|
385
|
-
title = "Controls",
|
|
386
|
-
selectInput("dataset", "Dataset:", choices = c("mtcars", "iris")),
|
|
387
|
-
numericInput("n", "Rows:", value = 10, min = 1)
|
|
388
|
-
),
|
|
389
|
-
navset_card_tab(
|
|
390
|
-
nav_panel("Table", tableOutput("table")),
|
|
391
|
-
nav_panel("Plot", plotOutput("plot")),
|
|
392
|
-
nav_panel("Summary", verbatimTextOutput("summary"))
|
|
393
|
-
)
|
|
394
|
-
)
|
|
395
|
-
```
|
|
97
|
+
|
|
98
|
+
In server function, create processed_data as reactive caching filtered data by input year. Create counter as reactiveVal initialized to 0. Use observeEvent on input increment to update counter. Create analysis as eventReactive on input run_analysis for expensive computation. Apply debounce with 300 milliseconds on search input reactive for rapid input handling.
|
|
396
99
|
|
|
397
100
|
### testthat Testing Framework
|
|
398
101
|
|
|
399
|
-
Test Structure:
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
library(testthat)
|
|
403
|
-
|
|
404
|
-
test_that("calculate_growth returns correct values", {
|
|
405
|
-
# Arrange
|
|
406
|
-
data <- tibble(year = 2020:2022, value = c(100, 110, 121))
|
|
407
|
-
|
|
408
|
-
# Act
|
|
409
|
-
result <- calculate_growth(data)
|
|
410
|
-
|
|
411
|
-
# Assert
|
|
412
|
-
expect_equal(nrow(result), 3)
|
|
413
|
-
expect_equal(result$growth[2], 0.1, tolerance = 0.001)
|
|
414
|
-
expect_true(is.na(result$growth[1]))
|
|
415
|
-
})
|
|
416
|
-
|
|
417
|
-
test_that("calculate_growth handles edge cases", {
|
|
418
|
-
expect_error(calculate_growth(NULL), "data cannot be NULL")
|
|
419
|
-
expect_warning(calculate_growth(tibble()), "empty data")
|
|
420
|
-
})
|
|
421
|
-
```
|
|
422
|
-
|
|
423
|
-
Snapshot Testing:
|
|
424
|
-
```r
|
|
425
|
-
test_that("plot output is consistent", {
|
|
426
|
-
p <- create_summary_plot(test_data)
|
|
427
|
-
expect_snapshot_output(print(p))
|
|
428
|
-
})
|
|
429
|
-
|
|
430
|
-
test_that("table output matches snapshot", {
|
|
431
|
-
result <- generate_report(test_data)
|
|
432
|
-
expect_snapshot(result)
|
|
433
|
-
})
|
|
434
|
-
```
|
|
435
|
-
|
|
436
|
-
Mocking External Dependencies:
|
|
437
|
-
```r
|
|
438
|
-
test_that("fetch_data uses API correctly", {
|
|
439
|
-
local_mocked_bindings(
|
|
440
|
-
httr2_request = function(url) {
|
|
441
|
-
list(status_code = 200, body = '{"data": [1,2,3]}')
|
|
442
|
-
}
|
|
443
|
-
)
|
|
444
|
-
|
|
445
|
-
result <- fetch_data("https://api.example.com/data")
|
|
446
|
-
expect_equal(result, c(1, 2, 3))
|
|
447
|
-
})
|
|
448
|
-
```
|
|
102
|
+
Test Structure Pattern:
|
|
103
|
+
|
|
104
|
+
Load testthat library. Create test_that block for calculate_growth with tibble of years and values. Call function and store result. Use expect_equal for row count, expect_equal for growth value with tolerance, and expect_true for NA check.
|
|
449
105
|
|
|
450
106
|
### renv Dependency Management
|
|
451
107
|
|
|
452
108
|
Project Setup:
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
renv::init()
|
|
456
|
-
|
|
457
|
-
# Install packages
|
|
458
|
-
renv::install("tidyverse")
|
|
459
|
-
renv::install("shiny")
|
|
460
|
-
renv::install("user/package") # GitHub
|
|
461
|
-
|
|
462
|
-
# Snapshot current state
|
|
463
|
-
renv::snapshot()
|
|
464
|
-
|
|
465
|
-
# Restore from lockfile
|
|
466
|
-
renv::restore()
|
|
467
|
-
|
|
468
|
-
# Update packages
|
|
469
|
-
renv::update()
|
|
470
|
-
```
|
|
471
|
-
|
|
472
|
-
renv.lock Structure:
|
|
473
|
-
```json
|
|
474
|
-
{
|
|
475
|
-
"R": {
|
|
476
|
-
"Version": "4.4.0",
|
|
477
|
-
"Repositories": [
|
|
478
|
-
{"Name": "CRAN", "URL": "https://cloud.r-project.org"}
|
|
479
|
-
]
|
|
480
|
-
},
|
|
481
|
-
"Packages": {
|
|
482
|
-
"dplyr": {
|
|
483
|
-
"Package": "dplyr",
|
|
484
|
-
"Version": "1.1.4",
|
|
485
|
-
"Source": "Repository"
|
|
486
|
-
}
|
|
487
|
-
}
|
|
488
|
-
}
|
|
489
|
-
```
|
|
109
|
+
|
|
110
|
+
Call renv::init for initialization. Call renv::install for tidyverse and shiny packages. Call renv::snapshot to record state. Call renv::restore to restore from lockfile.
|
|
490
111
|
|
|
491
112
|
---
|
|
492
113
|
|
|
493
114
|
## Advanced Implementation (10+ minutes)
|
|
494
115
|
|
|
495
116
|
For comprehensive coverage including:
|
|
496
|
-
|
|
117
|
+
|
|
118
|
+
- Advanced Shiny patterns for async, caching, and deployment
|
|
497
119
|
- Complex ggplot2 extensions and custom themes
|
|
498
120
|
- Database integration with dbplyr and pool
|
|
499
121
|
- R package development patterns
|
|
500
122
|
- Performance optimization techniques
|
|
501
|
-
- Production deployment
|
|
123
|
+
- Production deployment with Docker and Posit Connect
|
|
502
124
|
|
|
503
125
|
See:
|
|
504
|
-
|
|
505
|
-
-
|
|
126
|
+
|
|
127
|
+
- modules/advanced-patterns.md for complete advanced patterns guide
|
|
506
128
|
|
|
507
129
|
---
|
|
508
130
|
|
|
509
131
|
## Context7 Library Mappings
|
|
510
132
|
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
/
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
/r-lib/testthat - Unit testing framework
|
|
519
|
-
/rstudio/renv - Dependency management
|
|
520
|
-
```
|
|
133
|
+
- tidyverse/dplyr for data manipulation verbs
|
|
134
|
+
- tidyverse/ggplot2 for grammar of graphics visualization
|
|
135
|
+
- tidyverse/purrr for functional programming toolkit
|
|
136
|
+
- tidyverse/tidyr for data tidying functions
|
|
137
|
+
- rstudio/shiny for web application framework
|
|
138
|
+
- r-lib/testthat for unit testing framework
|
|
139
|
+
- rstudio/renv for dependency management
|
|
521
140
|
|
|
522
141
|
---
|
|
523
142
|
|
|
524
143
|
## Works Well With
|
|
525
144
|
|
|
526
|
-
-
|
|
527
|
-
-
|
|
528
|
-
-
|
|
529
|
-
-
|
|
530
|
-
-
|
|
145
|
+
- moai-lang-python for Python and R interoperability with reticulate
|
|
146
|
+
- moai-domain-database for SQL patterns and database optimization
|
|
147
|
+
- moai-workflow-testing for TDD and testing strategies
|
|
148
|
+
- moai-essentials-debug for AI-powered debugging
|
|
149
|
+
- moai-foundation-quality for TRUST 5 quality principles
|
|
531
150
|
|
|
532
151
|
---
|
|
533
152
|
|
|
@@ -536,44 +155,27 @@ See:
|
|
|
536
155
|
Common Issues:
|
|
537
156
|
|
|
538
157
|
R Version Check:
|
|
539
|
-
|
|
540
|
-
R.version.string
|
|
541
|
-
packageVersion("dplyr")
|
|
542
|
-
```
|
|
158
|
+
|
|
159
|
+
Call R.version.string in R console for version 4.4 or later. Call packageVersion with package name to check installed package versions.
|
|
543
160
|
|
|
544
161
|
Native Pipe Not Working:
|
|
545
|
-
|
|
546
|
-
-
|
|
162
|
+
|
|
163
|
+
- Ensure R version is 4.1 or later for native pipe operator
|
|
164
|
+
- Check RStudio settings under Tools, Global Options, Code for Use native pipe option
|
|
547
165
|
|
|
548
166
|
renv Issues:
|
|
549
|
-
```r
|
|
550
|
-
# Clear cache and reinitialize
|
|
551
|
-
renv::clean()
|
|
552
|
-
renv::rebuild()
|
|
553
167
|
|
|
554
|
-
|
|
555
|
-
renv::snapshot(force = TRUE)
|
|
556
|
-
```
|
|
168
|
+
Call renv::clean to remove unused packages. Call renv::rebuild to rebuild package library. Call renv::snapshot with force TRUE to force snapshot update.
|
|
557
169
|
|
|
558
170
|
Shiny Reactivity Debug:
|
|
559
|
-
```r
|
|
560
|
-
# Enable reactive log
|
|
561
|
-
options(shiny.reactlog = TRUE)
|
|
562
|
-
reactlog::reactlog_enable()
|
|
563
171
|
|
|
564
|
-
|
|
565
|
-
shiny::reactlogShow()
|
|
566
|
-
```
|
|
172
|
+
Set options shiny.reactlog to TRUE. Call reactlog::reactlog_enable to enable logging. Call shiny::reactlogShow to display reactive log visualization.
|
|
567
173
|
|
|
568
174
|
ggplot2 Font Issues:
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
library(showtext)
|
|
572
|
-
font_add_google("Roboto", "roboto")
|
|
573
|
-
showtext_auto()
|
|
574
|
-
```
|
|
175
|
+
|
|
176
|
+
Load showtext library. Call font_add_google with font name and family. Call showtext_auto to enable for all graphics devices.
|
|
575
177
|
|
|
576
178
|
---
|
|
577
179
|
|
|
578
|
-
Last Updated:
|
|
579
|
-
Status: Active (v1.
|
|
180
|
+
Last Updated: 2026-01-11
|
|
181
|
+
Status: Active (v1.1.0)
|