appiq-solution 1.4.8 → 1.5.0
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.
- package/README.md +172 -48
- package/bmad-core/agent-teams/team-fullstack.yaml +1 -11
- package/bmad-core/agents/analyst.md +3 -7
- package/bmad-core/agents/architect.md +0 -6
- package/bmad-core/agents/dev.md +5 -24
- package/bmad-core/agents/pm.md +3 -7
- package/bmad-core/agents/qa.md +0 -17
- package/bmad-core/agents/sm.md +3 -8
- package/bmad-core/agents/ux-expert.md +3 -8
- package/bmad-core/data/technical-preferences.md +1 -147
- package/bmad-core/templates/fullstack-architecture-tmpl.yaml +5 -12
- package/bmad-core/workflows/brownfield-fullstack.yaml +1 -15
- package/bmad-core/workflows/greenfield-fullstack.yaml +5 -49
- package/bmad-core/working-in-the-brownfield.md +10 -19
- package/dist/agents/bmad-orchestrator.txt +0 -111
- package/dist/agents/pm.txt +2 -0
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/teams/phaser-2d-nodejs-game-team.txt +0 -111
- package/dist/expansion-packs/bmad-2d-unity-game-dev/teams/unity-2d-game-team.txt +0 -111
- package/dist/teams/team-all.txt +2 -111
- package/dist/teams/team-fullstack.txt +2 -111
- package/dist/teams/team-ide-minimal.txt +0 -111
- package/dist/teams/team-no-ui.txt +2 -111
- package/{#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev → expansion-packs/appiq-flutter-mobile-dev}/config.yaml +1 -0
- package/package.json +60 -18
- package/tools/cli.js +3 -3
- package/tools/installer/lib/ide-setup.js +11 -0
- package/tools/installer/package-lock.json +2 -2
- package/#NEW APP PROMPT/ARCHITECTURE.md +0 -279
- package/#NEW APP PROMPT/ARCHITECTURE_UNIFIED.md +0 -414
- package/#NEW APP PROMPT/accesibility_prompt.md +0 -103
- package/#NEW APP PROMPT/clean-code.mdc +0 -55
- package/#NEW APP PROMPT/codequality.mdc +0 -47
- package/#NEW APP PROMPT/flutter-ai-rules/LICENSE +0 -21
- package/#NEW APP PROMPT/flutter-ai-rules/README.md +0 -104
- package/#NEW APP PROMPT/flutter-ai-rules/combined/README.md +0 -25
- package/#NEW APP PROMPT/flutter-ai-rules/combined/flutter_dart.md +0 -192
- package/#NEW APP PROMPT/flutter-ai-rules/combined/flutter_dart__under_6K.md +0 -99
- package/#NEW APP PROMPT/flutter-ai-rules/combined/flutter_dart_bloc_mocktail.md +0 -308
- package/#NEW APP PROMPT/flutter-ai-rules/combined/flutter_dart_bloc_mocktail__under_6K.md +0 -87
- package/#NEW APP PROMPT/flutter-ai-rules/combined/flutter_dart_change_notifier.md +0 -254
- package/#NEW APP PROMPT/flutter-ai-rules/combined/flutter_dart_change_notifier__under_6K.md +0 -98
- package/#NEW APP PROMPT/flutter-ai-rules/combined/flutter_dart_provider.md +0 -261
- package/#NEW APP PROMPT/flutter-ai-rules/combined/flutter_dart_provider__under_6K.md +0 -105
- package/#NEW APP PROMPT/flutter-ai-rules/combined/flutter_dart_riverpod_mockito.md +0 -371
- package/#NEW APP PROMPT/flutter-ai-rules/combined/flutter_dart_riverpod_mockito__under_6K.md +0 -92
- package/#NEW APP PROMPT/flutter-ai-rules/combined/flutter_with_bloc.md +0 -287
- package/#NEW APP PROMPT/flutter-ai-rules/combined/flutter_with_bloc__under_6K.md +0 -68
- package/#NEW APP PROMPT/flutter-ai-rules/combined/flutter_with_riverpod.md +0 -375
- package/#NEW APP PROMPT/flutter-ai-rules/combined/flutter_with_riverpod__under_6K.md +0 -106
- package/#NEW APP PROMPT/flutter-ai-rules/media/flutter_ai_rules.png +0 -0
- package/#NEW APP PROMPT/flutter-ai-rules/media/mocktail_md_01.png +0 -0
- package/#NEW APP PROMPT/flutter-ai-rules/media/mocktail_md_02.png +0 -0
- package/#NEW APP PROMPT/flutter-ai-rules/rules/bloc.md +0 -94
- package/#NEW APP PROMPT/flutter-ai-rules/rules/dart_3_updates.md +0 -93
- package/#NEW APP PROMPT/flutter-ai-rules/rules/effective_dart.md +0 -105
- package/#NEW APP PROMPT/flutter-ai-rules/rules/flutter_app_architecture.md +0 -57
- package/#NEW APP PROMPT/flutter-ai-rules/rules/flutter_change_notifier.md +0 -62
- package/#NEW APP PROMPT/flutter-ai-rules/rules/flutter_errors.md +0 -11
- package/#NEW APP PROMPT/flutter-ai-rules/rules/mockito.md +0 -31
- package/#NEW APP PROMPT/flutter-ai-rules/rules/mocktail.md +0 -24
- package/#NEW APP PROMPT/flutter-ai-rules/rules/provider.md +0 -69
- package/#NEW APP PROMPT/flutter-ai-rules/rules/riverpod.md +0 -188
- package/#NEW APP PROMPT/generate ssh.md +0 -4
- package/#NEW APP PROMPT/project_ai_prompt.md +0 -544
- package/#Tools/APPIQ-METHOD/.bmad-config.json +0 -13
- package/#Tools/APPIQ-METHOD/.cursor/commands/analyze.md +0 -27
- package/#Tools/APPIQ-METHOD/.cursor/commands/appiq.md +0 -27
- package/#Tools/APPIQ-METHOD/.cursor/commands/help.md +0 -27
- package/#Tools/APPIQ-METHOD/.cursor/commands/story.md +0 -27
- package/#Tools/APPIQ-METHOD/DEVELOPMENT_GUIDE.md +0 -855
- package/#Tools/APPIQ-METHOD/NPM-README.md +0 -138
- package/#Tools/APPIQ-METHOD/README.md +0 -107
- package/#Tools/APPIQ-METHOD/SMART_WORKFLOW_GUIDE.md +0 -401
- package/#Tools/APPIQ-METHOD/activate-appiq.js +0 -81
- package/#Tools/APPIQ-METHOD/appiq-solution/README.md +0 -226
- package/#Tools/APPIQ-METHOD/bmad-core/agent-teams/team-all.yaml +0 -14
- package/#Tools/APPIQ-METHOD/bmad-core/agent-teams/team-flutter-mobile.yaml +0 -114
- package/#Tools/APPIQ-METHOD/bmad-core/agent-teams/team-fullstack.yaml +0 -28
- package/#Tools/APPIQ-METHOD/bmad-core/agent-teams/team-ide-minimal.yaml +0 -10
- package/#Tools/APPIQ-METHOD/bmad-core/agent-teams/team-no-ui.yaml +0 -13
- package/#Tools/APPIQ-METHOD/bmad-core/agents/analyst.md +0 -85
- package/#Tools/APPIQ-METHOD/bmad-core/agents/architect.md +0 -90
- package/#Tools/APPIQ-METHOD/bmad-core/agents/bmad-master.md +0 -108
- package/#Tools/APPIQ-METHOD/bmad-core/agents/bmad-orchestrator.md +0 -150
- package/#Tools/APPIQ-METHOD/bmad-core/agents/bmad-smart-launcher.md +0 -170
- package/#Tools/APPIQ-METHOD/bmad-core/agents/dev.md +0 -95
- package/#Tools/APPIQ-METHOD/bmad-core/agents/init-flow-po.md +0 -143
- package/#Tools/APPIQ-METHOD/bmad-core/agents/pm.md +0 -85
- package/#Tools/APPIQ-METHOD/bmad-core/agents/po.md +0 -76
- package/#Tools/APPIQ-METHOD/bmad-core/agents/qa.md +0 -86
- package/#Tools/APPIQ-METHOD/bmad-core/agents/sm.md +0 -67
- package/#Tools/APPIQ-METHOD/bmad-core/agents/ux-expert.md +0 -71
- package/#Tools/APPIQ-METHOD/bmad-core/bmad-core/user-guide.md +0 -0
- package/#Tools/APPIQ-METHOD/bmad-core/checklists/architect-checklist.md +0 -443
- package/#Tools/APPIQ-METHOD/bmad-core/checklists/change-checklist.md +0 -182
- package/#Tools/APPIQ-METHOD/bmad-core/checklists/pm-checklist.md +0 -375
- package/#Tools/APPIQ-METHOD/bmad-core/checklists/po-master-checklist.md +0 -441
- package/#Tools/APPIQ-METHOD/bmad-core/checklists/security-validation-checklist.md +0 -332
- package/#Tools/APPIQ-METHOD/bmad-core/checklists/story-dod-checklist.md +0 -101
- package/#Tools/APPIQ-METHOD/bmad-core/checklists/story-draft-checklist.md +0 -156
- package/#Tools/APPIQ-METHOD/bmad-core/core-config.yaml +0 -20
- package/#Tools/APPIQ-METHOD/bmad-core/core-config.yaml.bak +0 -20
- package/#Tools/APPIQ-METHOD/bmad-core/data/backend-services-integration.md +0 -686
- package/#Tools/APPIQ-METHOD/bmad-core/data/bmad-kb.md +0 -803
- package/#Tools/APPIQ-METHOD/bmad-core/data/brainstorming-techniques.md +0 -36
- package/#Tools/APPIQ-METHOD/bmad-core/data/elicitation-methods.md +0 -134
- package/#Tools/APPIQ-METHOD/bmad-core/data/shadcn-ui-integration.md +0 -388
- package/#Tools/APPIQ-METHOD/bmad-core/data/technical-preferences.md +0 -149
- package/#Tools/APPIQ-METHOD/bmad-core/enhanced-ide-development-workflow.md +0 -43
- package/#Tools/APPIQ-METHOD/bmad-core/tasks/advanced-elicitation.md +0 -117
- package/#Tools/APPIQ-METHOD/bmad-core/tasks/brownfield-create-epic.md +0 -160
- package/#Tools/APPIQ-METHOD/bmad-core/tasks/brownfield-create-story.md +0 -147
- package/#Tools/APPIQ-METHOD/bmad-core/tasks/correct-course.md +0 -70
- package/#Tools/APPIQ-METHOD/bmad-core/tasks/create-brownfield-story.md +0 -304
- package/#Tools/APPIQ-METHOD/bmad-core/tasks/create-deep-research-prompt.md +0 -289
- package/#Tools/APPIQ-METHOD/bmad-core/tasks/create-flutter-story.md +0 -197
- package/#Tools/APPIQ-METHOD/bmad-core/tasks/create-next-story.md +0 -112
- package/#Tools/APPIQ-METHOD/bmad-core/tasks/document-project.md +0 -341
- package/#Tools/APPIQ-METHOD/bmad-core/tasks/facilitate-brainstorming-session.md +0 -136
- package/#Tools/APPIQ-METHOD/bmad-core/tasks/generate-ai-frontend-prompt.md +0 -51
- package/#Tools/APPIQ-METHOD/bmad-core/tasks/index-docs.md +0 -179
- package/#Tools/APPIQ-METHOD/bmad-core/tasks/intelligent-epic-creation.md +0 -234
- package/#Tools/APPIQ-METHOD/bmad-core/tasks/kb-mode-interaction.md +0 -75
- package/#Tools/APPIQ-METHOD/bmad-core/tasks/review-story.md +0 -145
- package/#Tools/APPIQ-METHOD/bmad-core/tasks/shard-doc.md +0 -187
- package/#Tools/APPIQ-METHOD/bmad-core/tasks/smart-project-analysis.md +0 -289
- package/#Tools/APPIQ-METHOD/bmad-core/tasks/validate-next-story.md +0 -134
- package/#Tools/APPIQ-METHOD/bmad-core/templates/architecture-tmpl.yaml +0 -650
- package/#Tools/APPIQ-METHOD/bmad-core/templates/brainstorming-output-tmpl.yaml +0 -156
- package/#Tools/APPIQ-METHOD/bmad-core/templates/brownfield-architecture-tmpl.yaml +0 -476
- package/#Tools/APPIQ-METHOD/bmad-core/templates/brownfield-prd-tmpl.yaml +0 -280
- package/#Tools/APPIQ-METHOD/bmad-core/templates/competitor-analysis-tmpl.yaml +0 -293
- package/#Tools/APPIQ-METHOD/bmad-core/templates/flutter-mobile-prd-tmpl.yaml +0 -330
- package/#Tools/APPIQ-METHOD/bmad-core/templates/flutter-story-tmpl.yaml +0 -376
- package/#Tools/APPIQ-METHOD/bmad-core/templates/flutter-ui-spec-tmpl.yaml +0 -415
- package/#Tools/APPIQ-METHOD/bmad-core/templates/front-end-architecture-tmpl.yaml +0 -206
- package/#Tools/APPIQ-METHOD/bmad-core/templates/front-end-spec-tmpl.yaml +0 -349
- package/#Tools/APPIQ-METHOD/bmad-core/templates/fullstack-architecture-tmpl.yaml +0 -812
- package/#Tools/APPIQ-METHOD/bmad-core/templates/market-research-tmpl.yaml +0 -252
- package/#Tools/APPIQ-METHOD/bmad-core/templates/prd-tmpl.yaml +0 -202
- package/#Tools/APPIQ-METHOD/bmad-core/templates/project-brief-tmpl.yaml +0 -221
- package/#Tools/APPIQ-METHOD/bmad-core/templates/story-tmpl.yaml +0 -137
- package/#Tools/APPIQ-METHOD/bmad-core/user-guide.md +0 -251
- package/#Tools/APPIQ-METHOD/bmad-core/workflows/brownfield-fullstack.yaml +0 -311
- package/#Tools/APPIQ-METHOD/bmad-core/workflows/brownfield-service.yaml +0 -187
- package/#Tools/APPIQ-METHOD/bmad-core/workflows/brownfield-ui.yaml +0 -197
- package/#Tools/APPIQ-METHOD/bmad-core/workflows/greenfield-fullstack.yaml +0 -284
- package/#Tools/APPIQ-METHOD/bmad-core/workflows/greenfield-service.yaml +0 -206
- package/#Tools/APPIQ-METHOD/bmad-core/workflows/greenfield-ui.yaml +0 -235
- package/#Tools/APPIQ-METHOD/bmad-core/working-in-the-brownfield.md +0 -373
- package/#Tools/APPIQ-METHOD/commands/README.md +0 -28
- package/#Tools/APPIQ-METHOD/commands/analyze.md +0 -27
- package/#Tools/APPIQ-METHOD/commands/appiq.md +0 -27
- package/#Tools/APPIQ-METHOD/commands/help.md +0 -27
- package/#Tools/APPIQ-METHOD/commands/story.md +0 -27
- package/#Tools/APPIQ-METHOD/dist/agents/analyst.txt +0 -2882
- package/#Tools/APPIQ-METHOD/dist/agents/architect.txt +0 -3543
- package/#Tools/APPIQ-METHOD/dist/agents/bmad-master.txt +0 -8756
- package/#Tools/APPIQ-METHOD/dist/agents/bmad-orchestrator.txt +0 -1490
- package/#Tools/APPIQ-METHOD/dist/agents/dev.txt +0 -428
- package/#Tools/APPIQ-METHOD/dist/agents/pm.txt +0 -2229
- package/#Tools/APPIQ-METHOD/dist/agents/po.txt +0 -1364
- package/#Tools/APPIQ-METHOD/dist/agents/qa.txt +0 -386
- package/#Tools/APPIQ-METHOD/dist/agents/sm.txt +0 -668
- package/#Tools/APPIQ-METHOD/dist/agents/ux-expert.txt +0 -701
- package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.txt +0 -2408
- package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.txt +0 -1631
- package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.txt +0 -822
- package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-2d-phaser-game-dev/teams/phaser-2d-nodejs-game-team.txt +0 -10989
- package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-architect.txt +0 -4047
- package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-designer.txt +0 -3744
- package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-developer.txt +0 -465
- package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-sm.txt +0 -990
- package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-2d-unity-game-dev/teams/unity-2d-game-team.txt +0 -15467
- package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.txt +0 -2077
- package/#Tools/APPIQ-METHOD/dist/teams/team-all.txt +0 -11062
- package/#Tools/APPIQ-METHOD/dist/teams/team-fullstack.txt +0 -10392
- package/#Tools/APPIQ-METHOD/dist/teams/team-ide-minimal.txt +0 -3507
- package/#Tools/APPIQ-METHOD/dist/teams/team-no-ui.txt +0 -8951
- package/#Tools/APPIQ-METHOD/install-appiq.sh +0 -41
- package/#Tools/APPIQ-METHOD/package-lock.json +0 -631
- package/#Tools/APPIQ-METHOD/package.json +0 -44
- package/#Tools/APPIQ-METHOD/tasks/todo.md +0 -275
- package/#Tools/APPIQ-METHOD/tools/appiq-installer.js +0 -2711
- package/#Tools/APPIQ-METHOD/tools/bmad-npx-wrapper.js +0 -39
- package/#Tools/APPIQ-METHOD/tools/builders/web-builder.js +0 -681
- package/#Tools/APPIQ-METHOD/tools/bump-all-versions.js +0 -106
- package/#Tools/APPIQ-METHOD/tools/bump-expansion-version.js +0 -83
- package/#Tools/APPIQ-METHOD/tools/cli.js +0 -152
- package/#Tools/APPIQ-METHOD/tools/epic-solution-installer.js +0 -536
- package/#Tools/APPIQ-METHOD/tools/flattener/main.js +0 -570
- package/#Tools/APPIQ-METHOD/tools/installer/README.md +0 -8
- package/#Tools/APPIQ-METHOD/tools/installer/bin/bmad.js +0 -483
- package/#Tools/APPIQ-METHOD/tools/installer/config/ide-agent-config.yaml +0 -58
- package/#Tools/APPIQ-METHOD/tools/installer/config/install.config.yaml +0 -92
- package/#Tools/APPIQ-METHOD/tools/installer/lib/config-loader.js +0 -253
- package/#Tools/APPIQ-METHOD/tools/installer/lib/file-manager.js +0 -411
- package/#Tools/APPIQ-METHOD/tools/installer/lib/ide-base-setup.js +0 -227
- package/#Tools/APPIQ-METHOD/tools/installer/lib/ide-setup.js +0 -1096
- package/#Tools/APPIQ-METHOD/tools/installer/lib/installer.js +0 -1772
- package/#Tools/APPIQ-METHOD/tools/installer/lib/memory-profiler.js +0 -224
- package/#Tools/APPIQ-METHOD/tools/installer/lib/module-manager.js +0 -110
- package/#Tools/APPIQ-METHOD/tools/installer/lib/resource-locator.js +0 -310
- package/#Tools/APPIQ-METHOD/tools/installer/package-lock.json +0 -906
- package/#Tools/APPIQ-METHOD/tools/installer/package.json +0 -43
- package/#Tools/APPIQ-METHOD/tools/lib/dependency-resolver.js +0 -179
- package/#Tools/APPIQ-METHOD/tools/lib/yaml-utils.js +0 -29
- package/#Tools/APPIQ-METHOD/tools/md-assets/web-agent-startup-instructions.md +0 -39
- package/#Tools/APPIQ-METHOD/tools/semantic-release-sync-installer.js +0 -30
- package/#Tools/APPIQ-METHOD/tools/setup-ide-commands.js +0 -348
- package/#Tools/APPIQ-METHOD/tools/smart-installer.js +0 -592
- package/#Tools/APPIQ-METHOD/tools/sync-installer-version.js +0 -34
- package/#Tools/APPIQ-METHOD/tools/update-expansion-version.js +0 -54
- package/#Tools/APPIQ-METHOD/tools/upgraders/v3-to-v4-upgrader.js +0 -763
- package/#Tools/APPIQ-METHOD/tools/version-bump.js +0 -79
- package/#Tools/APPIQ-METHOD/tools/yaml-format.js +0 -240
- package/#Tools/SkyReels-V2/.pre-commit-config.yaml +0 -25
- package/#Tools/SkyReels-V2/LICENSE.txt +0 -38
- package/#Tools/SkyReels-V2/README.md +0 -766
- package/#Tools/SkyReels-V2/generate_video.py +0 -161
- package/#Tools/SkyReels-V2/generate_video_df.py +0 -220
- package/#Tools/SkyReels-V2/requirements.txt +0 -16
- package/#Tools/SkyReels-V2/skycaptioner_v1/README.md +0 -278
- package/#Tools/SkyReels-V2/skycaptioner_v1/examples/test.csv +0 -5
- package/#Tools/SkyReels-V2/skycaptioner_v1/examples/test_result.csv +0 -5
- package/#Tools/SkyReels-V2/skycaptioner_v1/infer_fusion_caption.sh +0 -9
- package/#Tools/SkyReels-V2/skycaptioner_v1/infer_struct_caption.sh +0 -8
- package/#Tools/SkyReels-V2/skycaptioner_v1/requirements.txt +0 -3
- package/#Tools/SkyReels-V2/skycaptioner_v1/scripts/gradio_fusion_caption.py +0 -146
- package/#Tools/SkyReels-V2/skycaptioner_v1/scripts/gradio_struct_caption.py +0 -92
- package/#Tools/SkyReels-V2/skycaptioner_v1/scripts/utils.py +0 -19
- package/#Tools/SkyReels-V2/skycaptioner_v1/scripts/vllm_fusion_caption.py +0 -256
- package/#Tools/SkyReels-V2/skycaptioner_v1/scripts/vllm_struct_caption.py +0 -156
- package/#Tools/SkyReels-V2/skyreels_v2_infer/__init__.py +0 -1
- package/#Tools/SkyReels-V2/skyreels_v2_infer/distributed/__init__.py +0 -0
- package/#Tools/SkyReels-V2/skyreels_v2_infer/distributed/xdit_context_parallel.py +0 -286
- package/#Tools/SkyReels-V2/skyreels_v2_infer/modules/__init__.py +0 -69
- package/#Tools/SkyReels-V2/skyreels_v2_infer/modules/attention.py +0 -179
- package/#Tools/SkyReels-V2/skyreels_v2_infer/modules/clip.py +0 -525
- package/#Tools/SkyReels-V2/skyreels_v2_infer/modules/t5.py +0 -454
- package/#Tools/SkyReels-V2/skyreels_v2_infer/modules/tokenizers.py +0 -78
- package/#Tools/SkyReels-V2/skyreels_v2_infer/modules/transformer.py +0 -839
- package/#Tools/SkyReels-V2/skyreels_v2_infer/modules/vae.py +0 -639
- package/#Tools/SkyReels-V2/skyreels_v2_infer/modules/xlm_roberta.py +0 -165
- package/#Tools/SkyReels-V2/skyreels_v2_infer/pipelines/__init__.py +0 -5
- package/#Tools/SkyReels-V2/skyreels_v2_infer/pipelines/diffusion_forcing_pipeline.py +0 -659
- package/#Tools/SkyReels-V2/skyreels_v2_infer/pipelines/image2video_pipeline.py +0 -156
- package/#Tools/SkyReels-V2/skyreels_v2_infer/pipelines/prompt_enhancer.py +0 -65
- package/#Tools/SkyReels-V2/skyreels_v2_infer/pipelines/text2video_pipeline.py +0 -110
- package/#Tools/SkyReels-V2/skyreels_v2_infer/scheduler/__init__.py +0 -0
- package/#Tools/SkyReels-V2/skyreels_v2_infer/scheduler/fm_solvers_unipc.py +0 -759
- package/#Tools/SuperClaude/.claude/commands/analyze.md +0 -36
- package/#Tools/SuperClaude/.claude/commands/build.md +0 -35
- package/#Tools/SuperClaude/.claude/commands/cleanup.md +0 -46
- package/#Tools/SuperClaude/.claude/commands/deploy.md +0 -55
- package/#Tools/SuperClaude/.claude/commands/design.md +0 -91
- package/#Tools/SuperClaude/.claude/commands/dev-setup.md +0 -37
- package/#Tools/SuperClaude/.claude/commands/document.md +0 -99
- package/#Tools/SuperClaude/.claude/commands/estimate.md +0 -69
- package/#Tools/SuperClaude/.claude/commands/explain.md +0 -85
- package/#Tools/SuperClaude/.claude/commands/git.md +0 -47
- package/#Tools/SuperClaude/.claude/commands/improve.md +0 -162
- package/#Tools/SuperClaude/.claude/commands/index.md +0 -159
- package/#Tools/SuperClaude/.claude/commands/load.md +0 -65
- package/#Tools/SuperClaude/.claude/commands/migrate.md +0 -76
- package/#Tools/SuperClaude/.claude/commands/scan.md +0 -163
- package/#Tools/SuperClaude/.claude/commands/shared/ambiguity-check.yml +0 -40
- package/#Tools/SuperClaude/.claude/commands/shared/audit.yml +0 -21
- package/#Tools/SuperClaude/.claude/commands/shared/checkpoint.yml +0 -28
- package/#Tools/SuperClaude/.claude/commands/shared/cleanup-patterns.yml +0 -107
- package/#Tools/SuperClaude/.claude/commands/shared/command-memory.yml +0 -52
- package/#Tools/SuperClaude/.claude/commands/shared/command-templates.yml +0 -167
- package/#Tools/SuperClaude/.claude/commands/shared/config-validator.yml +0 -206
- package/#Tools/SuperClaude/.claude/commands/shared/constants.yml +0 -311
- package/#Tools/SuperClaude/.claude/commands/shared/documentation-dirs.yml +0 -134
- package/#Tools/SuperClaude/.claude/commands/shared/error-handling.yml +0 -341
- package/#Tools/SuperClaude/.claude/commands/shared/evidence.yml +0 -75
- package/#Tools/SuperClaude/.claude/commands/shared/execution-lifecycle.yml +0 -277
- package/#Tools/SuperClaude/.claude/commands/shared/git-operations.yml +0 -217
- package/#Tools/SuperClaude/.claude/commands/shared/git-workflow.yml +0 -37
- package/#Tools/SuperClaude/.claude/commands/shared/implementation.yml +0 -199
- package/#Tools/SuperClaude/.claude/commands/shared/loading-config.yml +0 -73
- package/#Tools/SuperClaude/.claude/commands/shared/mcp-flags.yml +0 -109
- package/#Tools/SuperClaude/.claude/commands/shared/migration-report.md +0 -165
- package/#Tools/SuperClaude/.claude/commands/shared/patterns.yml +0 -155
- package/#Tools/SuperClaude/.claude/commands/shared/performance.yml +0 -317
- package/#Tools/SuperClaude/.claude/commands/shared/planning-mode.yml +0 -51
- package/#Tools/SuperClaude/.claude/commands/shared/research-first.yml +0 -278
- package/#Tools/SuperClaude/.claude/commands/shared/session-recovery.yml +0 -144
- package/#Tools/SuperClaude/.claude/commands/shared/severity-levels.yml +0 -252
- package/#Tools/SuperClaude/.claude/commands/shared/task-system.yml +0 -380
- package/#Tools/SuperClaude/.claude/commands/shared/task-ultracompressed.yml +0 -88
- package/#Tools/SuperClaude/.claude/commands/shared/templates/feature-template.md +0 -59
- package/#Tools/SuperClaude/.claude/commands/shared/templates/task-ultracompressed.md +0 -26
- package/#Tools/SuperClaude/.claude/commands/shared/thinking-modes.yml +0 -61
- package/#Tools/SuperClaude/.claude/commands/shared/ultracompressed.yml +0 -97
- package/#Tools/SuperClaude/.claude/commands/shared/user-experience.yml +0 -208
- package/#Tools/SuperClaude/.claude/commands/shared/validation.yml +0 -54
- package/#Tools/SuperClaude/.claude/commands/shared/workflow-chains.yml +0 -138
- package/#Tools/SuperClaude/.claude/commands/spawn.md +0 -106
- package/#Tools/SuperClaude/.claude/commands/task.md +0 -110
- package/#Tools/SuperClaude/.claude/commands/test.md +0 -67
- package/#Tools/SuperClaude/.claude/commands/troubleshoot.md +0 -93
- package/#Tools/SuperClaude/.github/ISSUE_TEMPLATE/bug_report.yml +0 -114
- package/#Tools/SuperClaude/.github/ISSUE_TEMPLATE/feature_request.yml +0 -119
- package/#Tools/SuperClaude/.github/ISSUE_TEMPLATE/question.yml +0 -87
- package/#Tools/SuperClaude/.github/pull_request_template.md +0 -62
- package/#Tools/SuperClaude/CHANGELOG.md +0 -109
- package/#Tools/SuperClaude/CLAUDE.md +0 -95
- package/#Tools/SuperClaude/CODE_OF_CONDUCT.md +0 -45
- package/#Tools/SuperClaude/CONTRIBUTING.md +0 -225
- package/#Tools/SuperClaude/Commands_Cheat_Sheet.md +0 -160
- package/#Tools/SuperClaude/LICENSE +0 -21
- package/#Tools/SuperClaude/MCP.md +0 -117
- package/#Tools/SuperClaude/PERSONAS.md +0 -115
- package/#Tools/SuperClaude/README.md +0 -249
- package/#Tools/SuperClaude/RULES.md +0 -220
- package/#Tools/SuperClaude/SECURITY.md +0 -91
- package/#Tools/SuperClaude/install.sh +0 -296
- package/#Tools/claude-talk-to-figma-mcp/.github/workflows/test.yml +0 -36
- package/#Tools/claude-talk-to-figma-mcp/CHANGELOG.md +0 -88
- package/#Tools/claude-talk-to-figma-mcp/Dockerfile +0 -16
- package/#Tools/claude-talk-to-figma-mcp/LICENSE +0 -22
- package/#Tools/claude-talk-to-figma-mcp/TESTING.md +0 -216
- package/#Tools/claude-talk-to-figma-mcp/bun.lock +0 -964
- package/#Tools/claude-talk-to-figma-mcp/context/01/00-analisis.md +0 -151
- package/#Tools/claude-talk-to-figma-mcp/context/01/01-tools-refactor.md +0 -370
- package/#Tools/claude-talk-to-figma-mcp/context/01/02-tools-refactor-backlog.md +0 -253
- package/#Tools/claude-talk-to-figma-mcp/context/01/03-tools-refactor-test.md +0 -138
- package/#Tools/claude-talk-to-figma-mcp/context/01/04-tools-refactor-channel-error.md +0 -133
- package/#Tools/claude-talk-to-figma-mcp/context/01/04-tools-refactor-test-backlog.md +0 -0
- package/#Tools/claude-talk-to-figma-mcp/context/01/05-tools-refactor-four-tools-error.md +0 -356
- package/#Tools/claude-talk-to-figma-mcp/context/01/06-tools-refactor-four-tools-error-backlog.md +0 -425
- package/#Tools/claude-talk-to-figma-mcp/context/01/prompt-dev-nodejs-bun.md +0 -105
- package/#Tools/claude-talk-to-figma-mcp/context/01-prompt.md +0 -135
- package/#Tools/claude-talk-to-figma-mcp/context/02/00-analisis.md +0 -131
- package/#Tools/claude-talk-to-figma-mcp/context/02/01-plan.md +0 -162
- package/#Tools/claude-talk-to-figma-mcp/context/02/02-backlog.md +0 -241
- package/#Tools/claude-talk-to-figma-mcp/context/02-analisis.md +0 -202
- package/#Tools/claude-talk-to-figma-mcp/context/99-notas.md +0 -139
- package/#Tools/claude-talk-to-figma-mcp/context/pr-14/pr-14-analisis.md +0 -221
- package/#Tools/claude-talk-to-figma-mcp/context/pr-14/pr-14-claude-tests.md +0 -152
- package/#Tools/claude-talk-to-figma-mcp/context/pr-14/pr-14-npm-publishing.md +0 -272
- package/#Tools/claude-talk-to-figma-mcp/images/claude-talk-to-figma.png +0 -0
- package/#Tools/claude-talk-to-figma-mcp/images/mcp-figma-plugin-configuration.png +0 -0
- package/#Tools/claude-talk-to-figma-mcp/jest.config.cjs +0 -25
- package/#Tools/claude-talk-to-figma-mcp/package.json +0 -67
- package/#Tools/claude-talk-to-figma-mcp/prompts/prompt-ux-ui-especialista-es.md +0 -82
- package/#Tools/claude-talk-to-figma-mcp/prompts/prompt-ux-ui-especialista-gal.md +0 -80
- package/#Tools/claude-talk-to-figma-mcp/prompts/prompt-ux-ui-especialista-pt.md +0 -80
- package/#Tools/claude-talk-to-figma-mcp/prompts/prompt-ux-ui-specialist.md +0 -80
- package/#Tools/claude-talk-to-figma-mcp/readme.md +0 -307
- package/#Tools/claude-talk-to-figma-mcp/scripts/configure-claude.js +0 -90
- package/#Tools/claude-talk-to-figma-mcp/scripts/setup.sh +0 -30
- package/#Tools/claude-talk-to-figma-mcp/scripts/test-integration.js +0 -339
- package/#Tools/claude-talk-to-figma-mcp/smithery.yaml +0 -26
- package/#Tools/claude-talk-to-figma-mcp/src/claude_mcp_plugin/code.js +0 -3295
- package/#Tools/claude-talk-to-figma-mcp/src/claude_mcp_plugin/manifest.json +0 -24
- package/#Tools/claude-talk-to-figma-mcp/src/claude_mcp_plugin/setcharacters.js +0 -215
- package/#Tools/claude-talk-to-figma-mcp/src/claude_mcp_plugin/ui.html +0 -656
- package/#Tools/claude-talk-to-figma-mcp/src/socket.ts +0 -349
- package/#Tools/claude-talk-to-figma-mcp/src/talk_to_figma_mcp/bun.lock +0 -246
- package/#Tools/claude-talk-to-figma-mcp/src/talk_to_figma_mcp/config/config.ts +0 -22
- package/#Tools/claude-talk-to-figma-mcp/src/talk_to_figma_mcp/package.json +0 -31
- package/#Tools/claude-talk-to-figma-mcp/src/talk_to_figma_mcp/prompts/index.ts +0 -297
- package/#Tools/claude-talk-to-figma-mcp/src/talk_to_figma_mcp/server.ts +0 -62
- package/#Tools/claude-talk-to-figma-mcp/src/talk_to_figma_mcp/tools/component-tools.ts +0 -48
- package/#Tools/claude-talk-to-figma-mcp/src/talk_to_figma_mcp/tools/creation-tools.ts +0 -620
- package/#Tools/claude-talk-to-figma-mcp/src/talk_to_figma_mcp/tools/document-tools.ts +0 -390
- package/#Tools/claude-talk-to-figma-mcp/src/talk_to_figma_mcp/tools/index.ts +0 -28
- package/#Tools/claude-talk-to-figma-mcp/src/talk_to_figma_mcp/tools/modification-tools.ts +0 -408
- package/#Tools/claude-talk-to-figma-mcp/src/talk_to_figma_mcp/tools/text-tools.ts +0 -531
- package/#Tools/claude-talk-to-figma-mcp/src/talk_to_figma_mcp/tsconfig.json +0 -18
- package/#Tools/claude-talk-to-figma-mcp/src/talk_to_figma_mcp/types/color.ts +0 -13
- package/#Tools/claude-talk-to-figma-mcp/src/talk_to_figma_mcp/types/index.ts +0 -87
- package/#Tools/claude-talk-to-figma-mcp/src/talk_to_figma_mcp/utils/defaults.ts +0 -23
- package/#Tools/claude-talk-to-figma-mcp/src/talk_to_figma_mcp/utils/figma-helpers.ts +0 -142
- package/#Tools/claude-talk-to-figma-mcp/src/talk_to_figma_mcp/utils/logger.ts +0 -8
- package/#Tools/claude-talk-to-figma-mcp/src/talk_to_figma_mcp/utils/websocket.ts +0 -258
- package/#Tools/claude-talk-to-figma-mcp/tests/fixtures/test-data.ts +0 -32
- package/#Tools/claude-talk-to-figma-mcp/tests/integration/set-fill-color.test.ts +0 -309
- package/#Tools/claude-talk-to-figma-mcp/tests/integration/set-stroke-color.test.ts +0 -387
- package/#Tools/claude-talk-to-figma-mcp/tests/setup.ts +0 -7
- package/#Tools/claude-talk-to-figma-mcp/tests/unit/utils/defaults.test.ts +0 -131
- package/#Tools/claude-talk-to-figma-mcp/tsconfig.json +0 -17
- package/#Tools/claude-talk-to-figma-mcp/tsup.config.ts +0 -14
- package/#Tools/jwt creator/AuthKey_MZ7UQGFV2Q.p8 +0 -6
- package/#Tools/jwt creator/generate_apple_jwt.js +0 -18
- package/#Tools/jwt creator/node_modules/.package-lock.json +0 -145
- package/#Tools/jwt creator/node_modules/buffer-equal-constant-time/.travis.yml +0 -4
- package/#Tools/jwt creator/node_modules/buffer-equal-constant-time/LICENSE.txt +0 -12
- package/#Tools/jwt creator/node_modules/buffer-equal-constant-time/README.md +0 -50
- package/#Tools/jwt creator/node_modules/buffer-equal-constant-time/index.js +0 -41
- package/#Tools/jwt creator/node_modules/buffer-equal-constant-time/package.json +0 -21
- package/#Tools/jwt creator/node_modules/buffer-equal-constant-time/test.js +0 -42
- package/#Tools/jwt creator/node_modules/ecdsa-sig-formatter/CODEOWNERS +0 -1
- package/#Tools/jwt creator/node_modules/ecdsa-sig-formatter/LICENSE +0 -201
- package/#Tools/jwt creator/node_modules/ecdsa-sig-formatter/README.md +0 -65
- package/#Tools/jwt creator/node_modules/ecdsa-sig-formatter/package.json +0 -46
- package/#Tools/jwt creator/node_modules/ecdsa-sig-formatter/src/ecdsa-sig-formatter.d.ts +0 -17
- package/#Tools/jwt creator/node_modules/ecdsa-sig-formatter/src/ecdsa-sig-formatter.js +0 -187
- package/#Tools/jwt creator/node_modules/ecdsa-sig-formatter/src/param-bytes-for-alg.js +0 -23
- package/#Tools/jwt creator/node_modules/jsonwebtoken/LICENSE +0 -21
- package/#Tools/jwt creator/node_modules/jsonwebtoken/README.md +0 -396
- package/#Tools/jwt creator/node_modules/jsonwebtoken/decode.js +0 -30
- package/#Tools/jwt creator/node_modules/jsonwebtoken/index.js +0 -8
- package/#Tools/jwt creator/node_modules/jsonwebtoken/lib/JsonWebTokenError.js +0 -14
- package/#Tools/jwt creator/node_modules/jsonwebtoken/lib/NotBeforeError.js +0 -13
- package/#Tools/jwt creator/node_modules/jsonwebtoken/lib/TokenExpiredError.js +0 -13
- package/#Tools/jwt creator/node_modules/jsonwebtoken/lib/asymmetricKeyDetailsSupported.js +0 -3
- package/#Tools/jwt creator/node_modules/jsonwebtoken/lib/psSupported.js +0 -3
- package/#Tools/jwt creator/node_modules/jsonwebtoken/lib/rsaPssKeyDetailsSupported.js +0 -3
- package/#Tools/jwt creator/node_modules/jsonwebtoken/lib/timespan.js +0 -18
- package/#Tools/jwt creator/node_modules/jsonwebtoken/lib/validateAsymmetricKey.js +0 -66
- package/#Tools/jwt creator/node_modules/jsonwebtoken/package.json +0 -71
- package/#Tools/jwt creator/node_modules/jsonwebtoken/sign.js +0 -253
- package/#Tools/jwt creator/node_modules/jsonwebtoken/verify.js +0 -263
- package/#Tools/jwt creator/node_modules/jwa/LICENSE +0 -17
- package/#Tools/jwt creator/node_modules/jwa/README.md +0 -150
- package/#Tools/jwt creator/node_modules/jwa/index.js +0 -266
- package/#Tools/jwt creator/node_modules/jwa/package.json +0 -37
- package/#Tools/jwt creator/node_modules/jws/CHANGELOG.md +0 -34
- package/#Tools/jwt creator/node_modules/jws/LICENSE +0 -17
- package/#Tools/jwt creator/node_modules/jws/index.js +0 -22
- package/#Tools/jwt creator/node_modules/jws/lib/data-stream.js +0 -55
- package/#Tools/jwt creator/node_modules/jws/lib/sign-stream.js +0 -78
- package/#Tools/jwt creator/node_modules/jws/lib/tostring.js +0 -10
- package/#Tools/jwt creator/node_modules/jws/lib/verify-stream.js +0 -120
- package/#Tools/jwt creator/node_modules/jws/package.json +0 -34
- package/#Tools/jwt creator/node_modules/jws/readme.md +0 -255
- package/#Tools/jwt creator/node_modules/lodash.includes/LICENSE +0 -47
- package/#Tools/jwt creator/node_modules/lodash.includes/README.md +0 -18
- package/#Tools/jwt creator/node_modules/lodash.includes/index.js +0 -745
- package/#Tools/jwt creator/node_modules/lodash.includes/package.json +0 -17
- package/#Tools/jwt creator/node_modules/lodash.isboolean/LICENSE +0 -22
- package/#Tools/jwt creator/node_modules/lodash.isboolean/README.md +0 -18
- package/#Tools/jwt creator/node_modules/lodash.isboolean/index.js +0 -70
- package/#Tools/jwt creator/node_modules/lodash.isboolean/package.json +0 -17
- package/#Tools/jwt creator/node_modules/lodash.isinteger/LICENSE +0 -47
- package/#Tools/jwt creator/node_modules/lodash.isinteger/README.md +0 -18
- package/#Tools/jwt creator/node_modules/lodash.isinteger/index.js +0 -265
- package/#Tools/jwt creator/node_modules/lodash.isinteger/package.json +0 -17
- package/#Tools/jwt creator/node_modules/lodash.isnumber/LICENSE +0 -22
- package/#Tools/jwt creator/node_modules/lodash.isnumber/README.md +0 -18
- package/#Tools/jwt creator/node_modules/lodash.isnumber/index.js +0 -79
- package/#Tools/jwt creator/node_modules/lodash.isnumber/package.json +0 -17
- package/#Tools/jwt creator/node_modules/lodash.isplainobject/LICENSE +0 -47
- package/#Tools/jwt creator/node_modules/lodash.isplainobject/README.md +0 -18
- package/#Tools/jwt creator/node_modules/lodash.isplainobject/index.js +0 -139
- package/#Tools/jwt creator/node_modules/lodash.isplainobject/package.json +0 -17
- package/#Tools/jwt creator/node_modules/lodash.isstring/LICENSE +0 -22
- package/#Tools/jwt creator/node_modules/lodash.isstring/README.md +0 -18
- package/#Tools/jwt creator/node_modules/lodash.isstring/index.js +0 -95
- package/#Tools/jwt creator/node_modules/lodash.isstring/package.json +0 -17
- package/#Tools/jwt creator/node_modules/lodash.once/LICENSE +0 -47
- package/#Tools/jwt creator/node_modules/lodash.once/README.md +0 -18
- package/#Tools/jwt creator/node_modules/lodash.once/index.js +0 -294
- package/#Tools/jwt creator/node_modules/lodash.once/package.json +0 -17
- package/#Tools/jwt creator/node_modules/ms/index.js +0 -162
- package/#Tools/jwt creator/node_modules/ms/license.md +0 -21
- package/#Tools/jwt creator/node_modules/ms/package.json +0 -38
- package/#Tools/jwt creator/node_modules/ms/readme.md +0 -59
- package/#Tools/jwt creator/node_modules/safe-buffer/LICENSE +0 -21
- package/#Tools/jwt creator/node_modules/safe-buffer/README.md +0 -584
- package/#Tools/jwt creator/node_modules/safe-buffer/index.d.ts +0 -187
- package/#Tools/jwt creator/node_modules/safe-buffer/index.js +0 -65
- package/#Tools/jwt creator/node_modules/safe-buffer/package.json +0 -51
- package/#Tools/jwt creator/node_modules/semver/LICENSE +0 -15
- package/#Tools/jwt creator/node_modules/semver/README.md +0 -664
- package/#Tools/jwt creator/node_modules/semver/bin/semver.js +0 -191
- package/#Tools/jwt creator/node_modules/semver/classes/comparator.js +0 -143
- package/#Tools/jwt creator/node_modules/semver/classes/index.js +0 -7
- package/#Tools/jwt creator/node_modules/semver/classes/range.js +0 -556
- package/#Tools/jwt creator/node_modules/semver/classes/semver.js +0 -319
- package/#Tools/jwt creator/node_modules/semver/functions/clean.js +0 -8
- package/#Tools/jwt creator/node_modules/semver/functions/cmp.js +0 -54
- package/#Tools/jwt creator/node_modules/semver/functions/coerce.js +0 -62
- package/#Tools/jwt creator/node_modules/semver/functions/compare-build.js +0 -9
- package/#Tools/jwt creator/node_modules/semver/functions/compare-loose.js +0 -5
- package/#Tools/jwt creator/node_modules/semver/functions/compare.js +0 -7
- package/#Tools/jwt creator/node_modules/semver/functions/diff.js +0 -60
- package/#Tools/jwt creator/node_modules/semver/functions/eq.js +0 -5
- package/#Tools/jwt creator/node_modules/semver/functions/gt.js +0 -5
- package/#Tools/jwt creator/node_modules/semver/functions/gte.js +0 -5
- package/#Tools/jwt creator/node_modules/semver/functions/inc.js +0 -21
- package/#Tools/jwt creator/node_modules/semver/functions/lt.js +0 -5
- package/#Tools/jwt creator/node_modules/semver/functions/lte.js +0 -5
- package/#Tools/jwt creator/node_modules/semver/functions/major.js +0 -5
- package/#Tools/jwt creator/node_modules/semver/functions/minor.js +0 -5
- package/#Tools/jwt creator/node_modules/semver/functions/neq.js +0 -5
- package/#Tools/jwt creator/node_modules/semver/functions/parse.js +0 -18
- package/#Tools/jwt creator/node_modules/semver/functions/patch.js +0 -5
- package/#Tools/jwt creator/node_modules/semver/functions/prerelease.js +0 -8
- package/#Tools/jwt creator/node_modules/semver/functions/rcompare.js +0 -5
- package/#Tools/jwt creator/node_modules/semver/functions/rsort.js +0 -5
- package/#Tools/jwt creator/node_modules/semver/functions/satisfies.js +0 -12
- package/#Tools/jwt creator/node_modules/semver/functions/sort.js +0 -5
- package/#Tools/jwt creator/node_modules/semver/functions/valid.js +0 -8
- package/#Tools/jwt creator/node_modules/semver/index.js +0 -91
- package/#Tools/jwt creator/node_modules/semver/internal/constants.js +0 -37
- package/#Tools/jwt creator/node_modules/semver/internal/debug.js +0 -11
- package/#Tools/jwt creator/node_modules/semver/internal/identifiers.js +0 -25
- package/#Tools/jwt creator/node_modules/semver/internal/lrucache.js +0 -42
- package/#Tools/jwt creator/node_modules/semver/internal/parse-options.js +0 -17
- package/#Tools/jwt creator/node_modules/semver/internal/re.js +0 -223
- package/#Tools/jwt creator/node_modules/semver/package.json +0 -78
- package/#Tools/jwt creator/node_modules/semver/preload.js +0 -4
- package/#Tools/jwt creator/node_modules/semver/range.bnf +0 -16
- package/#Tools/jwt creator/node_modules/semver/ranges/gtr.js +0 -6
- package/#Tools/jwt creator/node_modules/semver/ranges/intersects.js +0 -9
- package/#Tools/jwt creator/node_modules/semver/ranges/ltr.js +0 -6
- package/#Tools/jwt creator/node_modules/semver/ranges/max-satisfying.js +0 -27
- package/#Tools/jwt creator/node_modules/semver/ranges/min-satisfying.js +0 -26
- package/#Tools/jwt creator/node_modules/semver/ranges/min-version.js +0 -63
- package/#Tools/jwt creator/node_modules/semver/ranges/outside.js +0 -82
- package/#Tools/jwt creator/node_modules/semver/ranges/simplify.js +0 -49
- package/#Tools/jwt creator/node_modules/semver/ranges/subset.js +0 -249
- package/#Tools/jwt creator/node_modules/semver/ranges/to-comparators.js +0 -10
- package/#Tools/jwt creator/node_modules/semver/ranges/valid.js +0 -13
- package/#Tools/jwt creator/package-lock.json +0 -150
- package/#Tools/jwt creator/package.json +0 -5
- package/#Tools/package.json +0 -94
- package/SuperClaude/.claude/commands/analyze.md +0 -36
- package/SuperClaude/.claude/commands/build.md +0 -35
- package/SuperClaude/.claude/commands/cleanup.md +0 -46
- package/SuperClaude/.claude/commands/deploy.md +0 -55
- package/SuperClaude/.claude/commands/design.md +0 -91
- package/SuperClaude/.claude/commands/dev-setup.md +0 -37
- package/SuperClaude/.claude/commands/document.md +0 -99
- package/SuperClaude/.claude/commands/estimate.md +0 -69
- package/SuperClaude/.claude/commands/explain.md +0 -85
- package/SuperClaude/.claude/commands/git.md +0 -47
- package/SuperClaude/.claude/commands/improve.md +0 -162
- package/SuperClaude/.claude/commands/index.md +0 -159
- package/SuperClaude/.claude/commands/load.md +0 -65
- package/SuperClaude/.claude/commands/migrate.md +0 -76
- package/SuperClaude/.claude/commands/scan.md +0 -163
- package/SuperClaude/.claude/commands/shared/ambiguity-check.yml +0 -40
- package/SuperClaude/.claude/commands/shared/audit.yml +0 -21
- package/SuperClaude/.claude/commands/shared/checkpoint.yml +0 -28
- package/SuperClaude/.claude/commands/shared/cleanup-patterns.yml +0 -107
- package/SuperClaude/.claude/commands/shared/command-memory.yml +0 -52
- package/SuperClaude/.claude/commands/shared/command-templates.yml +0 -167
- package/SuperClaude/.claude/commands/shared/config-validator.yml +0 -206
- package/SuperClaude/.claude/commands/shared/constants.yml +0 -311
- package/SuperClaude/.claude/commands/shared/documentation-dirs.yml +0 -134
- package/SuperClaude/.claude/commands/shared/error-handling.yml +0 -341
- package/SuperClaude/.claude/commands/shared/evidence.yml +0 -75
- package/SuperClaude/.claude/commands/shared/execution-lifecycle.yml +0 -277
- package/SuperClaude/.claude/commands/shared/git-operations.yml +0 -217
- package/SuperClaude/.claude/commands/shared/git-workflow.yml +0 -37
- package/SuperClaude/.claude/commands/shared/implementation.yml +0 -199
- package/SuperClaude/.claude/commands/shared/loading-config.yml +0 -73
- package/SuperClaude/.claude/commands/shared/mcp-flags.yml +0 -109
- package/SuperClaude/.claude/commands/shared/migration-report.md +0 -165
- package/SuperClaude/.claude/commands/shared/patterns.yml +0 -155
- package/SuperClaude/.claude/commands/shared/performance.yml +0 -317
- package/SuperClaude/.claude/commands/shared/planning-mode.yml +0 -51
- package/SuperClaude/.claude/commands/shared/research-first.yml +0 -278
- package/SuperClaude/.claude/commands/shared/session-recovery.yml +0 -144
- package/SuperClaude/.claude/commands/shared/severity-levels.yml +0 -252
- package/SuperClaude/.claude/commands/shared/task-system.yml +0 -380
- package/SuperClaude/.claude/commands/shared/task-ultracompressed.yml +0 -88
- package/SuperClaude/.claude/commands/shared/templates/feature-template.md +0 -59
- package/SuperClaude/.claude/commands/shared/templates/task-ultracompressed.md +0 -26
- package/SuperClaude/.claude/commands/shared/thinking-modes.yml +0 -61
- package/SuperClaude/.claude/commands/shared/ultracompressed.yml +0 -97
- package/SuperClaude/.claude/commands/shared/user-experience.yml +0 -208
- package/SuperClaude/.claude/commands/shared/validation.yml +0 -54
- package/SuperClaude/.claude/commands/shared/workflow-chains.yml +0 -138
- package/SuperClaude/.claude/commands/spawn.md +0 -106
- package/SuperClaude/.claude/commands/task.md +0 -110
- package/SuperClaude/.claude/commands/test.md +0 -67
- package/SuperClaude/.claude/commands/troubleshoot.md +0 -93
- package/SuperClaude/.github/ISSUE_TEMPLATE/bug_report.yml +0 -114
- package/SuperClaude/.github/ISSUE_TEMPLATE/feature_request.yml +0 -119
- package/SuperClaude/.github/ISSUE_TEMPLATE/question.yml +0 -87
- package/SuperClaude/.github/pull_request_template.md +0 -62
- package/SuperClaude/CHANGELOG.md +0 -109
- package/SuperClaude/CLAUDE.md +0 -95
- package/SuperClaude/CODE_OF_CONDUCT.md +0 -45
- package/SuperClaude/CONTRIBUTING.md +0 -225
- package/SuperClaude/Commands_Cheat_Sheet.md +0 -160
- package/SuperClaude/LICENSE +0 -21
- package/SuperClaude/MCP.md +0 -117
- package/SuperClaude/PERSONAS.md +0 -115
- package/SuperClaude/README.md +0 -249
- package/SuperClaude/RULES.md +0 -220
- package/SuperClaude/SECURITY.md +0 -91
- package/SuperClaude/install.sh +0 -296
- package/appiq-mcp installer/How-to.md +0 -250
- package/appiq-mcp installer/LICENSE +0 -21
- package/appiq-mcp installer/README.md +0 -235
- package/appiq-mcp installer/index.js +0 -672
- package/appiq-mcp installer/my_mcps.md +0 -105
- package/appiq-mcp installer/package-lock.json +0 -708
- package/appiq-mcp installer/package.json +0 -46
- package/appiq-mcp installer/test-install.bat +0 -60
- package/appiq-mcp installer/test-install.sh +0 -55
- package/appiq-mcp installer/test-load.js +0 -40
- package/bmad-core/agent-teams/team-flutter-mobile.yaml +0 -114
- package/bmad-core/agents/bmad-smart-launcher.md +0 -170
- package/bmad-core/agents/init-flow-po.md +0 -143
- package/bmad-core/checklists/security-validation-checklist.md +0 -332
- package/bmad-core/core-config.yaml.bak +0 -20
- package/bmad-core/data/backend-services-integration.md +0 -686
- package/bmad-core/data/shadcn-ui-integration.md +0 -388
- package/bmad-core/tasks/create-flutter-story.md +0 -197
- package/bmad-core/tasks/intelligent-epic-creation.md +0 -234
- package/bmad-core/tasks/smart-project-analysis.md +0 -289
- package/bmad-core/templates/flutter-mobile-prd-tmpl.yaml +0 -330
- package/bmad-core/templates/flutter-story-tmpl.yaml +0 -376
- package/bmad-core/templates/flutter-ui-spec-tmpl.yaml +0 -415
- package/dist/expansion-packs/bmad-mobile-app-dev/agents/mobile-analytics.txt +0 -1530
- package/dist/expansion-packs/bmad-mobile-app-dev/agents/mobile-architect.txt +0 -322
- package/dist/expansion-packs/bmad-mobile-app-dev/agents/mobile-developer.txt +0 -692
- package/dist/expansion-packs/bmad-mobile-app-dev/agents/mobile-pm.txt +0 -382
- package/dist/expansion-packs/bmad-mobile-app-dev/agents/mobile-qa.txt +0 -665
- package/dist/expansion-packs/bmad-mobile-app-dev/agents/mobile-security.txt +0 -1070
- package/dist/expansion-packs/bmad-mobile-app-dev/agents/mobile-ux-expert.txt +0 -1494
- package/dist/expansion-packs/bmad-mobile-app-dev/teams/mobile-team-cross-platform.txt +0 -15613
- package/flutter/CLAUDE.md +0 -58
- package/flutter/punkt.claude/New Folder With Items/channel.md +0 -221
- package/flutter/punkt.claude/New Folder With Items/commands/add-translations.md +0 -12
- package/flutter/punkt.claude/New Folder With Items/commands/create-feature.md +0 -168
- package/flutter/punkt.claude/New Folder With Items/commands/explain-codebase.md +0 -1
- package/flutter/punkt.claude/New Folder With Items/commands/feature-business-logic.md +0 -551
- package/flutter/punkt.claude/New Folder With Items/commands/feature-data-layer.md +0 -924
- package/flutter/punkt.claude/New Folder With Items/commands/feature-domain-layer.md +0 -540
- package/flutter/punkt.claude/New Folder With Items/commands/feature-integration.md +0 -493
- package/flutter/punkt.claude/New Folder With Items/commands/feature-localization.md +0 -427
- package/flutter/punkt.claude/New Folder With Items/commands/feature-ui-layer.md +0 -300
- package/flutter/punkt.claude/New Folder With Items/commands/git-commit.md +0 -3
- package/flutter/punkt.claude/New Folder With Items/commands/search-web.md +0 -1
- package/flutter/punkt.claude/punkt.claude/channel.md +0 -225
- package/flutter/punkt.claude/punkt.claude/commands/add-translations.md +0 -60
- package/flutter/punkt.claude/punkt.claude/commands/bug-fix.md +0 -32
- package/flutter/punkt.claude/punkt.claude/commands/checkdev.md +0 -122
- package/flutter/punkt.claude/punkt.claude/commands/create-feature.md +0 -174
- package/flutter/punkt.claude/punkt.claude/commands/dev.md +0 -79
- package/flutter/punkt.claude/punkt.claude/commands/explain-codebase.md +0 -1
- package/flutter/punkt.claude/punkt.claude/commands/feature-business-logic.md +0 -430
- package/flutter/punkt.claude/punkt.claude/commands/feature-data-layer.md +0 -572
- package/flutter/punkt.claude/punkt.claude/commands/feature-domain-layer.md +0 -537
- package/flutter/punkt.claude/punkt.claude/commands/feature-integration.md +0 -493
- package/flutter/punkt.claude/punkt.claude/commands/feature-localization.md +0 -427
- package/flutter/punkt.claude/punkt.claude/commands/feature-ui-layer.md +0 -831
- package/flutter/punkt.claude/punkt.claude/commands/git-commit.md +0 -3
- package/flutter/punkt.claude/punkt.claude/commands/manage-translations.md +0 -433
- package/flutter/punkt.claude/punkt.claude/commands/search-web.md +0 -1
- package/flutter/punkt.claude/punkt.claude/developer_check.md +0 -121
- package/tools/appiq-installer.js +0 -2711
- package/tools/epic-solution-installer.js +0 -536
- package/tools/setup-ide-commands.js +0 -348
- package/tools/smart-installer.js +0 -592
- package/web/CLAUDE.md +0 -58
- /package/{#Tools/APPIQ-METHOD/.github → .github}/FUNDING.yaml +0 -0
- /package/{#Tools/APPIQ-METHOD/.github → .github}/ISSUE_TEMPLATE/bug_report.md +0 -0
- /package/{#Tools/APPIQ-METHOD/.github → .github}/ISSUE_TEMPLATE/feature_request.md +0 -0
- /package/{#Tools/APPIQ-METHOD/.github → .github}/workflows/release.yaml +0 -0
- /package/{#Tools/APPIQ-METHOD/.releaserc.json → .releaserc.json} +0 -0
- /package/{#Tools/APPIQ-METHOD/.vscode → .vscode}/settings.json +0 -0
- /package/{#Tools/APPIQ-METHOD/CHANGELOG.md → CHANGELOG.md} +0 -0
- /package/{#Tools/APPIQ-METHOD/CONTRIBUTING.md → CONTRIBUTING.md} +0 -0
- /package/{#Tools/APPIQ-METHOD/LICENSE → LICENSE} +0 -0
- /package/{#Tools/APPIQ-METHOD/common → common}/tasks/create-doc.md +0 -0
- /package/{#Tools/APPIQ-METHOD/common → common}/tasks/execute-checklist.md +0 -0
- /package/{#Tools/APPIQ-METHOD/common → common}/utils/bmad-doc-template.md +0 -0
- /package/{#Tools/APPIQ-METHOD/common → common}/utils/workflow-management.md +0 -0
- /package/{#Tools/APPIQ-METHOD/docs → docs}/GUIDING-PRINCIPLES.md +0 -0
- /package/{#Tools/APPIQ-METHOD/docs → docs}/core-architecture.md +0 -0
- /package/{#Tools/APPIQ-METHOD/docs → docs}/expansion-packs.md +0 -0
- /package/{#Tools/APPIQ-METHOD/docs → docs}/how-to-contribute-with-pull-requests.md +0 -0
- /package/{#Tools/APPIQ-METHOD/docs → docs}/versioning-and-releases.md +0 -0
- /package/{#Tools/APPIQ-METHOD/docs → docs}/versions.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/README.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev → expansion-packs/appiq-flutter-mobile-dev}/agent-teams/flutter-mobile-team.yaml +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev → expansion-packs/appiq-flutter-mobile-dev}/agents/flutter-cubit-agent.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev → expansion-packs/appiq-flutter-mobile-dev}/agents/flutter-data-agent.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev → expansion-packs/appiq-flutter-mobile-dev}/agents/flutter-domain-agent.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev → expansion-packs/appiq-flutter-mobile-dev}/agents/flutter-ui-agent.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev → expansion-packs/appiq-flutter-mobile-dev}/agents/shared-components-agent.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev → expansion-packs/appiq-flutter-mobile-dev}/checklists/flutter-story-dod-checklist.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev → expansion-packs/appiq-flutter-mobile-dev}/data/flutter-development-guidelines.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev → expansion-packs/appiq-flutter-mobile-dev}/templates/flutter-mobile-architecture-tmpl.yaml +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev → expansion-packs/appiq-flutter-mobile-dev}/workflows/flutter-ui-first-development.yaml +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-phaser-game-dev/agent-teams/phaser-2d-nodejs-game-team.yaml +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-phaser-game-dev/agents/game-designer.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-phaser-game-dev/agents/game-developer.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-phaser-game-dev/agents/game-sm.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-phaser-game-dev/checklists/game-design-checklist.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-phaser-game-dev/checklists/game-story-dod-checklist.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-phaser-game-dev/config.yaml +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-phaser-game-dev/data/bmad-kb.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-phaser-game-dev/data/development-guidelines.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-phaser-game-dev/tasks/advanced-elicitation.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-phaser-game-dev/tasks/create-game-story.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-phaser-game-dev/tasks/game-design-brainstorming.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-phaser-game-dev/templates/game-architecture-tmpl.yaml +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-phaser-game-dev/templates/game-brief-tmpl.yaml +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-phaser-game-dev/templates/game-design-doc-tmpl.yaml +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-phaser-game-dev/templates/game-story-tmpl.yaml +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-phaser-game-dev/templates/level-design-doc-tmpl.yaml +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-phaser-game-dev/workflows/game-dev-greenfield.yaml +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-phaser-game-dev/workflows/game-prototype.yaml +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-unity-game-dev/agent-teams/unity-2d-game-team.yaml +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-unity-game-dev/agents/game-architect.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-unity-game-dev/agents/game-designer.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-unity-game-dev/agents/game-developer.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-unity-game-dev/agents/game-sm.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-unity-game-dev/checklists/game-architect-checklist.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-unity-game-dev/checklists/game-change-checklist.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-unity-game-dev/checklists/game-design-checklist.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-unity-game-dev/checklists/game-story-dod-checklist.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-unity-game-dev/config.yaml +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-unity-game-dev/data/bmad-kb.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-unity-game-dev/data/development-guidelines.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-unity-game-dev/tasks/advanced-elicitation.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-unity-game-dev/tasks/correct-course-game.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-unity-game-dev/tasks/create-game-story.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-unity-game-dev/tasks/game-design-brainstorming.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-unity-game-dev/tasks/validate-game-story.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-unity-game-dev/templates/game-architecture-tmpl.yaml +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-unity-game-dev/templates/game-brief-tmpl.yaml +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-unity-game-dev/templates/game-design-doc-tmpl.yaml +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-unity-game-dev/templates/game-story-tmpl.yaml +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-unity-game-dev/templates/level-design-doc-tmpl.yaml +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-unity-game-dev/workflows/game-dev-greenfield.yaml +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-2d-unity-game-dev/workflows/game-prototype.yaml +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-infrastructure-devops/README.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-infrastructure-devops/agents/infra-devops-platform.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-infrastructure-devops/checklists/infrastructure-checklist.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-infrastructure-devops/config.yaml +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-infrastructure-devops/data/bmad-kb.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-infrastructure-devops/tasks/review-infrastructure.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-infrastructure-devops/tasks/validate-infrastructure.md +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-infrastructure-devops/templates/infrastructure-architecture-tmpl.yaml +0 -0
- /package/{#Tools/APPIQ-METHOD/expansion-packs → expansion-packs}/bmad-infrastructure-devops/templates/infrastructure-platform-from-arch-tmpl.yaml +0 -0
@@ -1,924 +0,0 @@
|
|
1
|
-
# Data Layer Development Command
|
2
|
-
|
3
|
-
Develops the data layer (Models, Repository Implementations, Data Sources) for a feature following VoicePilot architectural patterns.
|
4
|
-
|
5
|
-
**Usage:** `feature-data-layer [FEATURE_NAME] [FEATURE_DESCRIPTION]`
|
6
|
-
|
7
|
-
**Example:** `feature-data-layer project-favorites "Allow users to mark projects as favorites and view them in a separate list"`
|
8
|
-
|
9
|
-
## Pre-Execution Checklist
|
10
|
-
|
11
|
-
1. **Check Channel Status**: Read `/Users/vapps-it/Projects/voicepilot/.claude/channel.md`
|
12
|
-
2. **Verify Dependencies**: Ensure domain layer is completed
|
13
|
-
3. **Update Channel**: Mark Data Layer status as "IN_PROGRESS" and assign agent
|
14
|
-
4. **Check Blockers**: Verify domain layer provides all necessary interfaces
|
15
|
-
|
16
|
-
## Implementation Process
|
17
|
-
|
18
|
-
### Phase 1: Analysis & Planning
|
19
|
-
|
20
|
-
1. **Study Existing Data Patterns**:
|
21
|
-
- Analyze `lib/data/repositories/` implementation patterns
|
22
|
-
- Study existing model structure in `lib/data/models/`
|
23
|
-
- Review data source patterns and API integration
|
24
|
-
- Check BaseRepository and BaseDataSource usage
|
25
|
-
- Understand JSON serialization and caching patterns
|
26
|
-
|
27
|
-
2. **Define Data Requirements**:
|
28
|
-
- Plan API endpoints and data structures
|
29
|
-
- Design caching strategy and offline support
|
30
|
-
- Define model serialization requirements
|
31
|
-
- Plan error handling and fallback mechanisms
|
32
|
-
- Identify external service integrations
|
33
|
-
|
34
|
-
3. **Update Channel**: Add data layer requirements to channel.md
|
35
|
-
|
36
|
-
### Phase 2: Model Implementation
|
37
|
-
|
38
|
-
1. **Create Model File** (`lib/data/models/[feature]_model.dart`):
|
39
|
-
```dart
|
40
|
-
import 'package:projectpilot/domain/entities/[feature]_entity.dart';
|
41
|
-
|
42
|
-
class [FeatureName]Model extends [FeatureName]Entity {
|
43
|
-
const [FeatureName]Model({
|
44
|
-
required super.id,
|
45
|
-
required super.title,
|
46
|
-
super.description,
|
47
|
-
required super.createdAt,
|
48
|
-
required super.updatedAt,
|
49
|
-
super.isActive,
|
50
|
-
super.metadata,
|
51
|
-
});
|
52
|
-
|
53
|
-
/// Create model from entity
|
54
|
-
factory [FeatureName]Model.fromEntity([FeatureName]Entity entity) {
|
55
|
-
return [FeatureName]Model(
|
56
|
-
id: entity.id,
|
57
|
-
title: entity.title,
|
58
|
-
description: entity.description,
|
59
|
-
createdAt: entity.createdAt,
|
60
|
-
updatedAt: entity.updatedAt,
|
61
|
-
isActive: entity.isActive,
|
62
|
-
metadata: entity.metadata,
|
63
|
-
);
|
64
|
-
}
|
65
|
-
|
66
|
-
/// Create model from JSON (API response)
|
67
|
-
factory [FeatureName]Model.fromJson(Map<String, dynamic> json) {
|
68
|
-
return [FeatureName]Model(
|
69
|
-
id: json['id'] as String,
|
70
|
-
title: json['title'] as String,
|
71
|
-
description: json['description'] as String?,
|
72
|
-
createdAt: DateTime.parse(json['created_at'] as String),
|
73
|
-
updatedAt: DateTime.parse(json['updated_at'] as String),
|
74
|
-
isActive: json['is_active'] as bool? ?? true,
|
75
|
-
metadata: json['metadata'] as Map<String, dynamic>?,
|
76
|
-
);
|
77
|
-
}
|
78
|
-
|
79
|
-
/// Create model from cache JSON (optimized for local storage)
|
80
|
-
factory [FeatureName]Model.fromCacheJson(Map<String, dynamic> json) {
|
81
|
-
return [FeatureName]Model(
|
82
|
-
id: json['id'] as String,
|
83
|
-
title: json['title'] as String,
|
84
|
-
description: json['description'] as String?,
|
85
|
-
createdAt: DateTime.fromMillisecondsSinceEpoch(
|
86
|
-
json['created_at'] as int,
|
87
|
-
),
|
88
|
-
updatedAt: DateTime.fromMillisecondsSinceEpoch(
|
89
|
-
json['updated_at'] as int,
|
90
|
-
),
|
91
|
-
isActive: json['is_active'] as bool? ?? true,
|
92
|
-
metadata: json['metadata'] as Map<String, dynamic>?,
|
93
|
-
);
|
94
|
-
}
|
95
|
-
|
96
|
-
/// Convert to JSON for API requests
|
97
|
-
Map<String, dynamic> toJson() {
|
98
|
-
return {
|
99
|
-
'id': id,
|
100
|
-
'title': title,
|
101
|
-
'description': description,
|
102
|
-
'created_at': createdAt.toIso8601String(),
|
103
|
-
'updated_at': updatedAt.toIso8601String(),
|
104
|
-
'is_active': isActive,
|
105
|
-
'metadata': metadata,
|
106
|
-
};
|
107
|
-
}
|
108
|
-
|
109
|
-
/// Convert to cache JSON (optimized for local storage)
|
110
|
-
Map<String, dynamic> toCacheJson() {
|
111
|
-
return {
|
112
|
-
'id': id,
|
113
|
-
'title': title,
|
114
|
-
'description': description,
|
115
|
-
'created_at': createdAt.millisecondsSinceEpoch,
|
116
|
-
'updated_at': updatedAt.millisecondsSinceEpoch,
|
117
|
-
'is_active': isActive,
|
118
|
-
'metadata': metadata,
|
119
|
-
};
|
120
|
-
}
|
121
|
-
|
122
|
-
/// Convert to entity
|
123
|
-
[FeatureName]Entity toEntity() {
|
124
|
-
return [FeatureName]Entity(
|
125
|
-
id: id,
|
126
|
-
title: title,
|
127
|
-
description: description,
|
128
|
-
createdAt: createdAt,
|
129
|
-
updatedAt: updatedAt,
|
130
|
-
isActive: isActive,
|
131
|
-
metadata: metadata,
|
132
|
-
);
|
133
|
-
}
|
134
|
-
|
135
|
-
/// Convert to create request JSON
|
136
|
-
Map<String, dynamic> toCreateJson() {
|
137
|
-
return {
|
138
|
-
'title': title,
|
139
|
-
'description': description,
|
140
|
-
'is_active': isActive,
|
141
|
-
'metadata': metadata,
|
142
|
-
};
|
143
|
-
}
|
144
|
-
|
145
|
-
/// Convert to update request JSON
|
146
|
-
Map<String, dynamic> toUpdateJson() {
|
147
|
-
return {
|
148
|
-
'title': title,
|
149
|
-
'description': description,
|
150
|
-
'is_active': isActive,
|
151
|
-
'metadata': metadata,
|
152
|
-
};
|
153
|
-
}
|
154
|
-
|
155
|
-
/// Create copyWith method for model
|
156
|
-
@override
|
157
|
-
[FeatureName]Model copyWith({
|
158
|
-
String? id,
|
159
|
-
String? title,
|
160
|
-
String? description,
|
161
|
-
DateTime? createdAt,
|
162
|
-
DateTime? updatedAt,
|
163
|
-
bool? isActive,
|
164
|
-
Map<String, dynamic>? metadata,
|
165
|
-
}) {
|
166
|
-
return [FeatureName]Model(
|
167
|
-
id: id ?? this.id,
|
168
|
-
title: title ?? this.title,
|
169
|
-
description: description ?? this.description,
|
170
|
-
createdAt: createdAt ?? this.createdAt,
|
171
|
-
updatedAt: updatedAt ?? this.updatedAt,
|
172
|
-
isActive: isActive ?? this.isActive,
|
173
|
-
metadata: metadata ?? this.metadata,
|
174
|
-
);
|
175
|
-
}
|
176
|
-
}
|
177
|
-
|
178
|
-
/// Extension for List<[FeatureName]Model> conversions
|
179
|
-
extension [FeatureName]ModelList on List<[FeatureName]Model> {
|
180
|
-
List<[FeatureName]Entity> toEntityList() {
|
181
|
-
return map((model) => model.toEntity()).toList();
|
182
|
-
}
|
183
|
-
|
184
|
-
List<Map<String, dynamic>> toCacheJsonList() {
|
185
|
-
return map((model) => model.toCacheJson()).toList();
|
186
|
-
}
|
187
|
-
}
|
188
|
-
|
189
|
-
/// Extension for List<Map<String, dynamic>> conversions
|
190
|
-
extension [FeatureName]JsonList on List<Map<String, dynamic>> {
|
191
|
-
List<[FeatureName]Model> to[FeatureName]ModelList() {
|
192
|
-
return map((json) => [FeatureName]Model.fromJson(json)).toList();
|
193
|
-
}
|
194
|
-
|
195
|
-
List<[FeatureName]Model> toCached[FeatureName]ModelList() {
|
196
|
-
return map((json) => [FeatureName]Model.fromCacheJson(json)).toList();
|
197
|
-
}
|
198
|
-
}
|
199
|
-
```
|
200
|
-
|
201
|
-
### Phase 3: Data Source Implementation
|
202
|
-
|
203
|
-
1. **Create Remote Data Source** (`lib/data/datasources/[feature]_remote_data_source.dart`):
|
204
|
-
```dart
|
205
|
-
import 'package:dartz/dartz.dart';
|
206
|
-
import 'package:projectpilot/core/services/base_data_source.dart';
|
207
|
-
import 'package:projectpilot/data/models/[feature]_model.dart';
|
208
|
-
import 'package:projectpilot/domain/failure/failures.dart';
|
209
|
-
|
210
|
-
abstract class [FeatureName]RemoteDataSource {
|
211
|
-
Future<List<[FeatureName]Model>> getItems({
|
212
|
-
int page = 1,
|
213
|
-
int limit = 20,
|
214
|
-
});
|
215
|
-
|
216
|
-
Future<[FeatureName]Model> getItemById(String itemId);
|
217
|
-
|
218
|
-
Future<[FeatureName]Model> createItem(Map<String, dynamic> itemData);
|
219
|
-
|
220
|
-
Future<[FeatureName]Model> updateItem(String itemId, Map<String, dynamic> itemData);
|
221
|
-
|
222
|
-
Future<void> deleteItem(String itemId);
|
223
|
-
|
224
|
-
Future<List<[FeatureName]Model>> searchItems(String query, {int limit = 20});
|
225
|
-
|
226
|
-
Future<List<[FeatureName]Model>> filterItems({
|
227
|
-
bool? isActive,
|
228
|
-
DateTime? createdAfter,
|
229
|
-
DateTime? createdBefore,
|
230
|
-
Map<String, dynamic>? customFilters,
|
231
|
-
});
|
232
|
-
|
233
|
-
Future<Map<String, dynamic>> getStatistics();
|
234
|
-
}
|
235
|
-
|
236
|
-
class [FeatureName]RemoteDataSourceImpl extends BaseDataSource
|
237
|
-
implements [FeatureName]RemoteDataSource {
|
238
|
-
|
239
|
-
static const String _baseEndpoint = '/api/v1/[feature-name]';
|
240
|
-
|
241
|
-
@override
|
242
|
-
Future<List<[FeatureName]Model>> getItems({
|
243
|
-
int page = 1,
|
244
|
-
int limit = 20,
|
245
|
-
}) async {
|
246
|
-
return executeWithErrorHandling(
|
247
|
-
() async {
|
248
|
-
final response = await apiClient.get(
|
249
|
-
'$_baseEndpoint',
|
250
|
-
queryParameters: {
|
251
|
-
'page': page,
|
252
|
-
'limit': limit,
|
253
|
-
},
|
254
|
-
);
|
255
|
-
|
256
|
-
final data = response.data as Map<String, dynamic>;
|
257
|
-
final items = data['data'] as List<dynamic>;
|
258
|
-
|
259
|
-
return items
|
260
|
-
.cast<Map<String, dynamic>>()
|
261
|
-
.to[FeatureName]ModelList();
|
262
|
-
},
|
263
|
-
operationName: 'getItems',
|
264
|
-
failureMessage: 'Failed to load items',
|
265
|
-
).then((either) => either.fold(
|
266
|
-
(failure) => throw failure,
|
267
|
-
(items) => items,
|
268
|
-
));
|
269
|
-
}
|
270
|
-
|
271
|
-
@override
|
272
|
-
Future<[FeatureName]Model> getItemById(String itemId) async {
|
273
|
-
return executeWithErrorHandling(
|
274
|
-
() async {
|
275
|
-
final response = await apiClient.get('$_baseEndpoint/$itemId');
|
276
|
-
final data = response.data as Map<String, dynamic>;
|
277
|
-
return [FeatureName]Model.fromJson(data['data']);
|
278
|
-
},
|
279
|
-
operationName: 'getItemById_$itemId',
|
280
|
-
failureMessage: 'Failed to load item',
|
281
|
-
).then((either) => either.fold(
|
282
|
-
(failure) => throw failure,
|
283
|
-
(item) => item,
|
284
|
-
));
|
285
|
-
}
|
286
|
-
|
287
|
-
@override
|
288
|
-
Future<[FeatureName]Model> createItem(Map<String, dynamic> itemData) async {
|
289
|
-
return executeWithErrorHandling(
|
290
|
-
() async {
|
291
|
-
final response = await apiClient.post(
|
292
|
-
_baseEndpoint,
|
293
|
-
data: itemData,
|
294
|
-
);
|
295
|
-
|
296
|
-
final data = response.data as Map<String, dynamic>;
|
297
|
-
return [FeatureName]Model.fromJson(data['data']);
|
298
|
-
},
|
299
|
-
operationName: 'createItem',
|
300
|
-
failureMessage: 'Failed to create item',
|
301
|
-
).then((either) => either.fold(
|
302
|
-
(failure) => throw failure,
|
303
|
-
(item) => item,
|
304
|
-
));
|
305
|
-
}
|
306
|
-
|
307
|
-
@override
|
308
|
-
Future<[FeatureName]Model> updateItem(
|
309
|
-
String itemId,
|
310
|
-
Map<String, dynamic> itemData,
|
311
|
-
) async {
|
312
|
-
return executeWithErrorHandling(
|
313
|
-
() async {
|
314
|
-
final response = await apiClient.put(
|
315
|
-
'$_baseEndpoint/$itemId',
|
316
|
-
data: itemData,
|
317
|
-
);
|
318
|
-
|
319
|
-
final data = response.data as Map<String, dynamic>;
|
320
|
-
return [FeatureName]Model.fromJson(data['data']);
|
321
|
-
},
|
322
|
-
operationName: 'updateItem_$itemId',
|
323
|
-
failureMessage: 'Failed to update item',
|
324
|
-
).then((either) => either.fold(
|
325
|
-
(failure) => throw failure,
|
326
|
-
(item) => item,
|
327
|
-
));
|
328
|
-
}
|
329
|
-
|
330
|
-
@override
|
331
|
-
Future<void> deleteItem(String itemId) async {
|
332
|
-
return executeWithErrorHandling(
|
333
|
-
() async {
|
334
|
-
await apiClient.delete('$_baseEndpoint/$itemId');
|
335
|
-
},
|
336
|
-
operationName: 'deleteItem_$itemId',
|
337
|
-
failureMessage: 'Failed to delete item',
|
338
|
-
).then((either) => either.fold(
|
339
|
-
(failure) => throw failure,
|
340
|
-
(_) => null,
|
341
|
-
));
|
342
|
-
}
|
343
|
-
|
344
|
-
@override
|
345
|
-
Future<List<[FeatureName]Model>> searchItems(
|
346
|
-
String query, {
|
347
|
-
int limit = 20,
|
348
|
-
}) async {
|
349
|
-
return executeWithErrorHandling(
|
350
|
-
() async {
|
351
|
-
final response = await apiClient.get(
|
352
|
-
'$_baseEndpoint/search',
|
353
|
-
queryParameters: {
|
354
|
-
'q': query,
|
355
|
-
'limit': limit,
|
356
|
-
},
|
357
|
-
);
|
358
|
-
|
359
|
-
final data = response.data as Map<String, dynamic>;
|
360
|
-
final items = data['data'] as List<dynamic>;
|
361
|
-
|
362
|
-
return items
|
363
|
-
.cast<Map<String, dynamic>>()
|
364
|
-
.to[FeatureName]ModelList();
|
365
|
-
},
|
366
|
-
operationName: 'searchItems_$query',
|
367
|
-
failureMessage: 'Failed to search items',
|
368
|
-
).then((either) => either.fold(
|
369
|
-
(failure) => throw failure,
|
370
|
-
(items) => items,
|
371
|
-
));
|
372
|
-
}
|
373
|
-
|
374
|
-
@override
|
375
|
-
Future<List<[FeatureName]Model>> filterItems({
|
376
|
-
bool? isActive,
|
377
|
-
DateTime? createdAfter,
|
378
|
-
DateTime? createdBefore,
|
379
|
-
Map<String, dynamic>? customFilters,
|
380
|
-
}) async {
|
381
|
-
return executeWithErrorHandling(
|
382
|
-
() async {
|
383
|
-
final queryParameters = <String, dynamic>{};
|
384
|
-
|
385
|
-
if (isActive != null) queryParameters['is_active'] = isActive;
|
386
|
-
if (createdAfter != null) {
|
387
|
-
queryParameters['created_after'] = createdAfter.toIso8601String();
|
388
|
-
}
|
389
|
-
if (createdBefore != null) {
|
390
|
-
queryParameters['created_before'] = createdBefore.toIso8601String();
|
391
|
-
}
|
392
|
-
if (customFilters != null) {
|
393
|
-
queryParameters.addAll(customFilters);
|
394
|
-
}
|
395
|
-
|
396
|
-
final response = await apiClient.get(
|
397
|
-
'$_baseEndpoint/filter',
|
398
|
-
queryParameters: queryParameters,
|
399
|
-
);
|
400
|
-
|
401
|
-
final data = response.data as Map<String, dynamic>;
|
402
|
-
final items = data['data'] as List<dynamic>;
|
403
|
-
|
404
|
-
return items
|
405
|
-
.cast<Map<String, dynamic>>()
|
406
|
-
.to[FeatureName]ModelList();
|
407
|
-
},
|
408
|
-
operationName: 'filterItems',
|
409
|
-
failureMessage: 'Failed to filter items',
|
410
|
-
).then((either) => either.fold(
|
411
|
-
(failure) => throw failure,
|
412
|
-
(items) => items,
|
413
|
-
));
|
414
|
-
}
|
415
|
-
|
416
|
-
@override
|
417
|
-
Future<Map<String, dynamic>> getStatistics() async {
|
418
|
-
return executeWithErrorHandling(
|
419
|
-
() async {
|
420
|
-
final response = await apiClient.get('$_baseEndpoint/statistics');
|
421
|
-
return response.data as Map<String, dynamic>;
|
422
|
-
},
|
423
|
-
operationName: 'getStatistics',
|
424
|
-
failureMessage: 'Failed to load statistics',
|
425
|
-
).then((either) => either.fold(
|
426
|
-
(failure) => throw failure,
|
427
|
-
(stats) => stats,
|
428
|
-
));
|
429
|
-
}
|
430
|
-
}
|
431
|
-
```
|
432
|
-
|
433
|
-
2. **Create Local Data Source** (`lib/data/datasources/[feature]_local_data_source.dart`):
|
434
|
-
```dart
|
435
|
-
import 'dart:convert';
|
436
|
-
import 'package:shared_preferences/shared_preferences.dart';
|
437
|
-
import 'package:projectpilot/data/models/[feature]_model.dart';
|
438
|
-
|
439
|
-
abstract class [FeatureName]LocalDataSource {
|
440
|
-
Future<List<[FeatureName]Model>> getCachedItems();
|
441
|
-
Future<void> cacheItems(List<[FeatureName]Model> items);
|
442
|
-
Future<[FeatureName]Model?> getCachedItemById(String itemId);
|
443
|
-
Future<void> cacheItem([FeatureName]Model item);
|
444
|
-
Future<void> removeCachedItem(String itemId);
|
445
|
-
Future<void> clearCache();
|
446
|
-
Future<bool> hasCachedData();
|
447
|
-
Future<DateTime?> getLastCacheTime();
|
448
|
-
Future<void> saveState(dynamic state);
|
449
|
-
Future<dynamic> restoreState();
|
450
|
-
}
|
451
|
-
|
452
|
-
class [FeatureName]LocalDataSourceImpl implements [FeatureName]LocalDataSource {
|
453
|
-
static const String _cacheKey = '[feature_name]_cache';
|
454
|
-
static const String _cacheTimeKey = '[feature_name]_cache_time';
|
455
|
-
static const String _stateKey = '[feature_name]_state';
|
456
|
-
|
457
|
-
final SharedPreferences _prefs;
|
458
|
-
|
459
|
-
const [FeatureName]LocalDataSourceImpl({
|
460
|
-
required SharedPreferences prefs,
|
461
|
-
}) : _prefs = prefs;
|
462
|
-
|
463
|
-
@override
|
464
|
-
Future<List<[FeatureName]Model>> getCachedItems() async {
|
465
|
-
try {
|
466
|
-
final cachedData = _prefs.getString(_cacheKey);
|
467
|
-
if (cachedData == null) return [];
|
468
|
-
|
469
|
-
final List<dynamic> jsonList = json.decode(cachedData);
|
470
|
-
return jsonList
|
471
|
-
.cast<Map<String, dynamic>>()
|
472
|
-
.toCached[FeatureName]ModelList();
|
473
|
-
} catch (e) {
|
474
|
-
logger.e('Error loading cached items: $e');
|
475
|
-
return [];
|
476
|
-
}
|
477
|
-
}
|
478
|
-
|
479
|
-
@override
|
480
|
-
Future<void> cacheItems(List<[FeatureName]Model> items) async {
|
481
|
-
try {
|
482
|
-
final jsonData = json.encode(items.toCacheJsonList());
|
483
|
-
await _prefs.setString(_cacheKey, jsonData);
|
484
|
-
await _prefs.setInt(
|
485
|
-
_cacheTimeKey,
|
486
|
-
DateTime.now().millisecondsSinceEpoch,
|
487
|
-
);
|
488
|
-
logger.d('Cached ${items.length} items');
|
489
|
-
} catch (e) {
|
490
|
-
logger.e('Error caching items: $e');
|
491
|
-
}
|
492
|
-
}
|
493
|
-
|
494
|
-
@override
|
495
|
-
Future<[FeatureName]Model?> getCachedItemById(String itemId) async {
|
496
|
-
try {
|
497
|
-
final cachedItems = await getCachedItems();
|
498
|
-
return cachedItems.cast<[FeatureName]Model?>().firstWhere(
|
499
|
-
(item) => item?.id == itemId,
|
500
|
-
orElse: () => null,
|
501
|
-
);
|
502
|
-
} catch (e) {
|
503
|
-
logger.e('Error loading cached item: $e');
|
504
|
-
return null;
|
505
|
-
}
|
506
|
-
}
|
507
|
-
|
508
|
-
@override
|
509
|
-
Future<void> cacheItem([FeatureName]Model item) async {
|
510
|
-
try {
|
511
|
-
final cachedItems = await getCachedItems();
|
512
|
-
final existingIndex = cachedItems.indexWhere((i) => i.id == item.id);
|
513
|
-
|
514
|
-
if (existingIndex >= 0) {
|
515
|
-
cachedItems[existingIndex] = item;
|
516
|
-
} else {
|
517
|
-
cachedItems.add(item);
|
518
|
-
}
|
519
|
-
|
520
|
-
await cacheItems(cachedItems);
|
521
|
-
} catch (e) {
|
522
|
-
logger.e('Error caching single item: $e');
|
523
|
-
}
|
524
|
-
}
|
525
|
-
|
526
|
-
@override
|
527
|
-
Future<void> removeCachedItem(String itemId) async {
|
528
|
-
try {
|
529
|
-
final cachedItems = await getCachedItems();
|
530
|
-
cachedItems.removeWhere((item) => item.id == itemId);
|
531
|
-
await cacheItems(cachedItems);
|
532
|
-
} catch (e) {
|
533
|
-
logger.e('Error removing cached item: $e');
|
534
|
-
}
|
535
|
-
}
|
536
|
-
|
537
|
-
@override
|
538
|
-
Future<void> clearCache() async {
|
539
|
-
try {
|
540
|
-
await _prefs.remove(_cacheKey);
|
541
|
-
await _prefs.remove(_cacheTimeKey);
|
542
|
-
logger.d('Cache cleared');
|
543
|
-
} catch (e) {
|
544
|
-
logger.e('Error clearing cache: $e');
|
545
|
-
}
|
546
|
-
}
|
547
|
-
|
548
|
-
@override
|
549
|
-
Future<bool> hasCachedData() async {
|
550
|
-
return _prefs.containsKey(_cacheKey);
|
551
|
-
}
|
552
|
-
|
553
|
-
@override
|
554
|
-
Future<DateTime?> getLastCacheTime() async {
|
555
|
-
final timestamp = _prefs.getInt(_cacheTimeKey);
|
556
|
-
if (timestamp == null) return null;
|
557
|
-
return DateTime.fromMillisecondsSinceEpoch(timestamp);
|
558
|
-
}
|
559
|
-
|
560
|
-
@override
|
561
|
-
Future<void> saveState(dynamic state) async {
|
562
|
-
try {
|
563
|
-
final stateJson = json.encode(state);
|
564
|
-
await _prefs.setString(_stateKey, stateJson);
|
565
|
-
} catch (e) {
|
566
|
-
logger.e('Error saving state: $e');
|
567
|
-
}
|
568
|
-
}
|
569
|
-
|
570
|
-
@override
|
571
|
-
Future<dynamic> restoreState() async {
|
572
|
-
try {
|
573
|
-
final stateData = _prefs.getString(_stateKey);
|
574
|
-
if (stateData == null) return null;
|
575
|
-
return json.decode(stateData);
|
576
|
-
} catch (e) {
|
577
|
-
logger.e('Error restoring state: $e');
|
578
|
-
return null;
|
579
|
-
}
|
580
|
-
}
|
581
|
-
}
|
582
|
-
```
|
583
|
-
|
584
|
-
### Phase 4: Repository Implementation
|
585
|
-
|
586
|
-
1. **Create Repository Implementation** (`lib/data/repositories/[feature]_repository_impl.dart`):
|
587
|
-
```dart
|
588
|
-
import 'package:dartz/dartz.dart';
|
589
|
-
import 'package:projectpilot/core/repositories/base_repository.dart';
|
590
|
-
import 'package:projectpilot/data/datasources/[feature]_local_data_source.dart';
|
591
|
-
import 'package:projectpilot/data/datasources/[feature]_remote_data_source.dart';
|
592
|
-
import 'package:projectpilot/data/models/[feature]_model.dart';
|
593
|
-
import 'package:projectpilot/domain/entities/[feature]_entity.dart';
|
594
|
-
import 'package:projectpilot/domain/failure/failures.dart';
|
595
|
-
import 'package:projectpilot/domain/repositories/[feature]_repository.dart';
|
596
|
-
|
597
|
-
class [FeatureName]RepositoryImpl extends BaseRepository
|
598
|
-
implements [FeatureName]Repository {
|
599
|
-
final [FeatureName]RemoteDataSource _remoteDataSource;
|
600
|
-
final [FeatureName]LocalDataSource _localDataSource;
|
601
|
-
|
602
|
-
const [FeatureName]RepositoryImpl({
|
603
|
-
required [FeatureName]RemoteDataSource remoteDataSource,
|
604
|
-
required [FeatureName]LocalDataSource localDataSource,
|
605
|
-
}) : _remoteDataSource = remoteDataSource,
|
606
|
-
_localDataSource = localDataSource;
|
607
|
-
|
608
|
-
@override
|
609
|
-
Future<Either<Failure, List<[FeatureName]Entity>>> getItems({
|
610
|
-
int page = 1,
|
611
|
-
int limit = 20,
|
612
|
-
bool forceRefresh = false,
|
613
|
-
}) async {
|
614
|
-
return executeSupabaseOperation(
|
615
|
-
() async {
|
616
|
-
// Try remote first, fallback to cache
|
617
|
-
if (!forceRefresh) {
|
618
|
-
final cachedItems = await _localDataSource.getCachedItems();
|
619
|
-
if (cachedItems.isNotEmpty) {
|
620
|
-
logger.d('Returning ${cachedItems.length} cached items');
|
621
|
-
return cachedItems.toEntityList();
|
622
|
-
}
|
623
|
-
}
|
624
|
-
|
625
|
-
try {
|
626
|
-
final remoteItems = await _remoteDataSource.getItems(
|
627
|
-
page: page,
|
628
|
-
limit: limit,
|
629
|
-
);
|
630
|
-
|
631
|
-
// Cache the results
|
632
|
-
await _localDataSource.cacheItems(remoteItems);
|
633
|
-
|
634
|
-
logger.d('Loaded ${remoteItems.length} items from remote');
|
635
|
-
return remoteItems.toEntityList();
|
636
|
-
} catch (e) {
|
637
|
-
// Fallback to cache on network error
|
638
|
-
final cachedItems = await _localDataSource.getCachedItems();
|
639
|
-
if (cachedItems.isNotEmpty) {
|
640
|
-
logger.w('Network failed, returning cached items: $e');
|
641
|
-
return cachedItems.toEntityList();
|
642
|
-
}
|
643
|
-
rethrow;
|
644
|
-
}
|
645
|
-
},
|
646
|
-
operationName: 'getItems_page${page}_limit$limit',
|
647
|
-
failureMessage: 'Failed to load items',
|
648
|
-
);
|
649
|
-
}
|
650
|
-
|
651
|
-
@override
|
652
|
-
Future<Either<Failure, [FeatureName]Entity>> getItemById(
|
653
|
-
String itemId,
|
654
|
-
) async {
|
655
|
-
return executeSupabaseOperation(
|
656
|
-
() async {
|
657
|
-
try {
|
658
|
-
final remoteItem = await _remoteDataSource.getItemById(itemId);
|
659
|
-
await _localDataSource.cacheItem(remoteItem);
|
660
|
-
return remoteItem.toEntity();
|
661
|
-
} catch (e) {
|
662
|
-
// Fallback to cache
|
663
|
-
final cachedItem = await _localDataSource.getCachedItemById(itemId);
|
664
|
-
if (cachedItem != null) {
|
665
|
-
logger.w('Network failed, returning cached item: $e');
|
666
|
-
return cachedItem.toEntity();
|
667
|
-
}
|
668
|
-
rethrow;
|
669
|
-
}
|
670
|
-
},
|
671
|
-
operationName: 'getItemById_$itemId',
|
672
|
-
failureMessage: 'Failed to load item',
|
673
|
-
);
|
674
|
-
}
|
675
|
-
|
676
|
-
@override
|
677
|
-
Future<Either<Failure, [FeatureName]Entity>> createItem({
|
678
|
-
required String title,
|
679
|
-
String? description,
|
680
|
-
Map<String, dynamic>? metadata,
|
681
|
-
Map<String, dynamic>? additionalData,
|
682
|
-
}) async {
|
683
|
-
return executeSupabaseOperation(
|
684
|
-
() async {
|
685
|
-
final itemData = <String, dynamic>{
|
686
|
-
'title': title,
|
687
|
-
'description': description,
|
688
|
-
'metadata': metadata,
|
689
|
-
...?additionalData,
|
690
|
-
};
|
691
|
-
|
692
|
-
final createdItem = await _remoteDataSource.createItem(itemData);
|
693
|
-
await _localDataSource.cacheItem(createdItem);
|
694
|
-
|
695
|
-
logger.d('Created item: ${createdItem.id}');
|
696
|
-
return createdItem.toEntity();
|
697
|
-
},
|
698
|
-
operationName: 'createItem',
|
699
|
-
failureMessage: 'Failed to create item',
|
700
|
-
);
|
701
|
-
}
|
702
|
-
|
703
|
-
@override
|
704
|
-
Future<Either<Failure, [FeatureName]Entity>> updateItem(
|
705
|
-
[FeatureName]Entity item,
|
706
|
-
) async {
|
707
|
-
return executeSupabaseOperation(
|
708
|
-
() async {
|
709
|
-
final model = [FeatureName]Model.fromEntity(item);
|
710
|
-
final updatedItem = await _remoteDataSource.updateItem(
|
711
|
-
item.id,
|
712
|
-
model.toUpdateJson(),
|
713
|
-
);
|
714
|
-
|
715
|
-
await _localDataSource.cacheItem(updatedItem);
|
716
|
-
|
717
|
-
logger.d('Updated item: ${updatedItem.id}');
|
718
|
-
return updatedItem.toEntity();
|
719
|
-
},
|
720
|
-
operationName: 'updateItem_${item.id}',
|
721
|
-
failureMessage: 'Failed to update item',
|
722
|
-
);
|
723
|
-
}
|
724
|
-
|
725
|
-
@override
|
726
|
-
Future<Either<Failure, void>> deleteItem(String itemId) async {
|
727
|
-
return executeSupabaseOperation(
|
728
|
-
() async {
|
729
|
-
await _remoteDataSource.deleteItem(itemId);
|
730
|
-
await _localDataSource.removeCachedItem(itemId);
|
731
|
-
|
732
|
-
logger.d('Deleted item: $itemId');
|
733
|
-
},
|
734
|
-
operationName: 'deleteItem_$itemId',
|
735
|
-
failureMessage: 'Failed to delete item',
|
736
|
-
);
|
737
|
-
}
|
738
|
-
|
739
|
-
@override
|
740
|
-
Future<Either<Failure, List<[FeatureName]Entity>>> searchItems(
|
741
|
-
String query, {
|
742
|
-
int limit = 20,
|
743
|
-
}) async {
|
744
|
-
return executeSupabaseOperation(
|
745
|
-
() async {
|
746
|
-
final results = await _remoteDataSource.searchItems(
|
747
|
-
query,
|
748
|
-
limit: limit,
|
749
|
-
);
|
750
|
-
|
751
|
-
logger.d('Search "$query" returned ${results.length} items');
|
752
|
-
return results.toEntityList();
|
753
|
-
},
|
754
|
-
operationName: 'searchItems_$query',
|
755
|
-
failureMessage: 'Failed to search items',
|
756
|
-
);
|
757
|
-
}
|
758
|
-
|
759
|
-
@override
|
760
|
-
Future<Either<Failure, List<[FeatureName]Entity>>> filterItems({
|
761
|
-
bool? isActive,
|
762
|
-
DateTime? createdAfter,
|
763
|
-
DateTime? createdBefore,
|
764
|
-
List<String>? tags,
|
765
|
-
Map<String, dynamic>? customFilters,
|
766
|
-
}) async {
|
767
|
-
return executeSupabaseOperation(
|
768
|
-
() async {
|
769
|
-
final filters = <String, dynamic>{
|
770
|
-
...?customFilters,
|
771
|
-
};
|
772
|
-
|
773
|
-
if (tags != null && tags.isNotEmpty) {
|
774
|
-
filters['tags'] = tags.join(',');
|
775
|
-
}
|
776
|
-
|
777
|
-
final results = await _remoteDataSource.filterItems(
|
778
|
-
isActive: isActive,
|
779
|
-
createdAfter: createdAfter,
|
780
|
-
createdBefore: createdBefore,
|
781
|
-
customFilters: filters,
|
782
|
-
);
|
783
|
-
|
784
|
-
logger.d('Filter returned ${results.length} items');
|
785
|
-
return results.toEntityList();
|
786
|
-
},
|
787
|
-
operationName: 'filterItems',
|
788
|
-
failureMessage: 'Failed to filter items',
|
789
|
-
);
|
790
|
-
}
|
791
|
-
|
792
|
-
@override
|
793
|
-
Future<Either<Failure, List<[FeatureName]Entity>>> getCachedItems() async {
|
794
|
-
return executeSupabaseOperation(
|
795
|
-
() async {
|
796
|
-
final cachedItems = await _localDataSource.getCachedItems();
|
797
|
-
return cachedItems.toEntityList();
|
798
|
-
},
|
799
|
-
operationName: 'getCachedItems',
|
800
|
-
failureMessage: 'Failed to load cached items',
|
801
|
-
);
|
802
|
-
}
|
803
|
-
|
804
|
-
@override
|
805
|
-
Future<Either<Failure, void>> clearCache() async {
|
806
|
-
return executeSupabaseOperation(
|
807
|
-
() async {
|
808
|
-
await _localDataSource.clearCache();
|
809
|
-
logger.d('Cache cleared');
|
810
|
-
},
|
811
|
-
operationName: 'clearCache',
|
812
|
-
failureMessage: 'Failed to clear cache',
|
813
|
-
);
|
814
|
-
}
|
815
|
-
|
816
|
-
@override
|
817
|
-
Future<Either<Failure, void>> saveCachedItems(
|
818
|
-
List<[FeatureName]Entity> items,
|
819
|
-
) async {
|
820
|
-
return executeSupabaseOperation(
|
821
|
-
() async {
|
822
|
-
final models = items
|
823
|
-
.map((entity) => [FeatureName]Model.fromEntity(entity))
|
824
|
-
.toList();
|
825
|
-
await _localDataSource.cacheItems(models);
|
826
|
-
},
|
827
|
-
operationName: 'saveCachedItems',
|
828
|
-
failureMessage: 'Failed to save cached items',
|
829
|
-
);
|
830
|
-
}
|
831
|
-
|
832
|
-
@override
|
833
|
-
Future<Either<Failure, Map<String, dynamic>>> getStatistics() async {
|
834
|
-
return executeSupabaseOperation(
|
835
|
-
() async {
|
836
|
-
return await _remoteDataSource.getStatistics();
|
837
|
-
},
|
838
|
-
operationName: 'getStatistics',
|
839
|
-
failureMessage: 'Failed to load statistics',
|
840
|
-
);
|
841
|
-
}
|
842
|
-
|
843
|
-
// Implement all other required methods following the same pattern...
|
844
|
-
// [Additional methods for batch operations, sync, etc.]
|
845
|
-
}
|
846
|
-
```
|
847
|
-
|
848
|
-
## Quality Checklist
|
849
|
-
|
850
|
-
### Model Implementation
|
851
|
-
- [ ] Extends domain entity correctly
|
852
|
-
- [ ] JSON serialization implemented
|
853
|
-
- [ ] Cache optimization methods
|
854
|
-
- [ ] Conversion methods (toEntity, fromEntity)
|
855
|
-
- [ ] List extension methods
|
856
|
-
|
857
|
-
### Data Sources
|
858
|
-
- [ ] BaseDataSource pattern followed
|
859
|
-
- [ ] Comprehensive error handling
|
860
|
-
- [ ] Proper logging implementation
|
861
|
-
- [ ] Caching strategies implemented
|
862
|
-
- [ ] Fallback mechanisms included
|
863
|
-
|
864
|
-
### Repository Implementation
|
865
|
-
- [ ] BaseRepository pattern followed
|
866
|
-
- [ ] Remote/local coordination
|
867
|
-
- [ ] Proper error propagation
|
868
|
-
- [ ] Either return types used
|
869
|
-
- [ ] Cache management implemented
|
870
|
-
|
871
|
-
### Performance
|
872
|
-
- [ ] Efficient serialization
|
873
|
-
- [ ] Optimized caching
|
874
|
-
- [ ] Proper resource management
|
875
|
-
- [ ] Memory leak prevention
|
876
|
-
- [ ] Background operation support
|
877
|
-
|
878
|
-
## Channel Communication
|
879
|
-
|
880
|
-
### Before Starting
|
881
|
-
Update channel.md:
|
882
|
-
```markdown
|
883
|
-
### 💾 Data Layer Status
|
884
|
-
- **Status:** IN_PROGRESS
|
885
|
-
- **Assigned Agent:** [YOUR_ID]
|
886
|
-
- **Progress:** 0%
|
887
|
-
```
|
888
|
-
|
889
|
-
### During Development
|
890
|
-
Update progress regularly:
|
891
|
-
```markdown
|
892
|
-
- **Progress:** [PERCENTAGE]%
|
893
|
-
- **Files Created:** [LIST_OF_FILES]
|
894
|
-
- **Next Steps:** [CURRENT_WORK]
|
895
|
-
```
|
896
|
-
|
897
|
-
### After Completion
|
898
|
-
Mark as completed:
|
899
|
-
```markdown
|
900
|
-
### 💾 Data Layer Status
|
901
|
-
- **Status:** COMPLETED
|
902
|
-
- **Progress:** 100%
|
903
|
-
- **Files Created:** [COMPLETE_LIST]
|
904
|
-
```
|
905
|
-
|
906
|
-
## Dependencies
|
907
|
-
|
908
|
-
### Must be completed first:
|
909
|
-
- Domain layer (entities and repository interfaces)
|
910
|
-
|
911
|
-
### Enables after completion:
|
912
|
-
- Business logic integration
|
913
|
-
- UI layer data binding
|
914
|
-
- Full feature integration
|
915
|
-
|
916
|
-
## Output Deliverables
|
917
|
-
|
918
|
-
1. **Model**: `lib/data/models/[feature]_model.dart`
|
919
|
-
2. **Remote Data Source**: `lib/data/datasources/[feature]_remote_data_source.dart`
|
920
|
-
3. **Local Data Source**: `lib/data/datasources/[feature]_local_data_source.dart`
|
921
|
-
4. **Repository Implementation**: `lib/data/repositories/[feature]_repository_impl.dart`
|
922
|
-
5. **Updated Channel**: Progress and completion status in channel.md
|
923
|
-
|
924
|
-
All data layer components must follow existing patterns and provide robust caching, error handling, and offline support.
|