proagents 1.0.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/LICENSE +21 -0
- package/README.md +170 -0
- package/bin/proagents.js +90 -0
- package/lib/commands/feature.js +125 -0
- package/lib/commands/fix.js +60 -0
- package/lib/commands/help.js +76 -0
- package/lib/commands/init.js +64 -0
- package/lib/commands/status.js +91 -0
- package/lib/index.js +28 -0
- package/package.json +52 -0
- package/proagents/.learning/global/common-patterns.json +77 -0
- package/proagents/.learning/global/user-preferences.json +76 -0
- package/proagents/.learning/projects/example-project/corrections.json +99 -0
- package/proagents/.learning/projects/example-project/feedback.json +109 -0
- package/proagents/.learning/projects/example-project/metrics.json +101 -0
- package/proagents/.learning/projects/example-project/patterns.json +102 -0
- package/proagents/.learning/schemas/README.md +48 -0
- package/proagents/.learning/schemas/corrections-schema.json +100 -0
- package/proagents/.learning/schemas/feedback-schema.json +144 -0
- package/proagents/.learning/schemas/metrics-schema.json +96 -0
- package/proagents/.learning/schemas/patterns-schema.json +82 -0
- package/proagents/.learning/schemas/project-patterns-schema.json +125 -0
- package/proagents/.learning/schemas/user-preferences-schema.json +136 -0
- package/proagents/GETTING-STARTED-STORY.md +708 -0
- package/proagents/README.md +99 -0
- package/proagents/WORKFLOW.md +1234 -0
- package/proagents/active-features/.gitkeep +0 -0
- package/proagents/active-features/README.md +176 -0
- package/proagents/active-features/_index.json +74 -0
- package/proagents/active-features/feature-user-auth/dependencies.json +81 -0
- package/proagents/active-features/feature-user-auth/files-modified.json +126 -0
- package/proagents/active-features/feature-user-auth/status.json +122 -0
- package/proagents/active-features/schemas/dependencies-schema.json +119 -0
- package/proagents/active-features/schemas/feature-schema.json +132 -0
- package/proagents/active-features/schemas/files-schema.json +100 -0
- package/proagents/active-features/schemas/index-schema.json +95 -0
- package/proagents/adr/README.md +302 -0
- package/proagents/adr/examples/api-versioning.md +297 -0
- package/proagents/adr/examples/database-choice.md +264 -0
- package/proagents/adr/template.md +273 -0
- package/proagents/ai-models/README.md +141 -0
- package/proagents/ai-models/cost-management.md +362 -0
- package/proagents/ai-models/fallbacks.md +342 -0
- package/proagents/ai-models/model-config.md +318 -0
- package/proagents/ai-models/task-routing.md +503 -0
- package/proagents/ai-training/README.md +155 -0
- package/proagents/ai-training/continuous-learning.md +413 -0
- package/proagents/ai-training/domain-knowledge.md +378 -0
- package/proagents/ai-training/pattern-learning.md +455 -0
- package/proagents/ai-training/training-data.md +337 -0
- package/proagents/ai-training/user-preferences.md +346 -0
- package/proagents/api-versioning/README.md +257 -0
- package/proagents/api-versioning/changelog-template.md +225 -0
- package/proagents/api-versioning/deprecation-workflow.md +470 -0
- package/proagents/api-versioning/versioning-strategy.md +291 -0
- package/proagents/approval-workflows/README.md +146 -0
- package/proagents/approval-workflows/approval-config.md +332 -0
- package/proagents/approval-workflows/approval-stages.md +503 -0
- package/proagents/approval-workflows/emergency-bypass.md +351 -0
- package/proagents/approval-workflows/examples.md +859 -0
- package/proagents/approval-workflows/notifications.md +320 -0
- package/proagents/automation/README.md +38 -0
- package/proagents/automation/ai-behavior-rules.md +339 -0
- package/proagents/automation/ai-prompt-injection.md +331 -0
- package/proagents/automation/auto-decisions.md +535 -0
- package/proagents/automation/decision-defaults.yaml +317 -0
- package/proagents/cache/README.md +110 -0
- package/proagents/cache/analysis-metadata.json +76 -0
- package/proagents/cache/conventions.json +125 -0
- package/proagents/cache/dependencies.json +85 -0
- package/proagents/cache/features.json +115 -0
- package/proagents/cache/patterns.json +105 -0
- package/proagents/cache/schemas/conventions-schema.json +138 -0
- package/proagents/cache/schemas/dependencies-schema.json +95 -0
- package/proagents/cache/schemas/features-schema.json +104 -0
- package/proagents/cache/schemas/metadata-schema.json +83 -0
- package/proagents/cache/schemas/patterns-schema.json +136 -0
- package/proagents/cache/schemas/structure-schema.json +72 -0
- package/proagents/cache/structure.json +109 -0
- package/proagents/changelog/2024/01/2024-01-10-api-url-config.md +41 -0
- package/proagents/changelog/2024/01/2024-01-12-login-bug-fix.md +69 -0
- package/proagents/changelog/2024/01/2024-01-15-user-auth-feature.md +99 -0
- package/proagents/changelog/CHANGELOG.md +82 -0
- package/proagents/changelog/README.md +327 -0
- package/proagents/changelog/entry-template.md +283 -0
- package/proagents/checklists/README.md +261 -0
- package/proagents/checklists/code-quality.md +137 -0
- package/proagents/checklists/code-review.md +148 -0
- package/proagents/checklists/pr-checklist.md +78 -0
- package/proagents/checklists/pre-deployment.md +132 -0
- package/proagents/checklists/pre-implementation.md +80 -0
- package/proagents/checklists/testing.md +120 -0
- package/proagents/cicd/README.md +338 -0
- package/proagents/cicd/azure-devops.md +267 -0
- package/proagents/cicd/github-actions.md +375 -0
- package/proagents/cicd/gitlab-ci.md +278 -0
- package/proagents/cicd/jenkins.md +317 -0
- package/proagents/cli/README.md +392 -0
- package/proagents/cli/commands-reference.md +893 -0
- package/proagents/cli/ide-integration.md +584 -0
- package/proagents/cli/shortcuts.md +394 -0
- package/proagents/cli/slash-commands.md +507 -0
- package/proagents/collaboration/README.md +143 -0
- package/proagents/collaboration/roles.md +248 -0
- package/proagents/collaboration/sessions.md +390 -0
- package/proagents/collaboration/sync.md +358 -0
- package/proagents/compliance/README.md +206 -0
- package/proagents/compliance/access-control.md +310 -0
- package/proagents/compliance/audit-logging.md +444 -0
- package/proagents/compliance/compliance-frameworks.md +429 -0
- package/proagents/compliance/reports.md +491 -0
- package/proagents/compliance/retention-policies.md +454 -0
- package/proagents/config/README.md +181 -0
- package/proagents/config/integrations/README.md +68 -0
- package/proagents/config/integrations/github.yaml +211 -0
- package/proagents/config/integrations/jira.yaml +144 -0
- package/proagents/config/integrations/linear.yaml +157 -0
- package/proagents/config/integrations/notion.yaml +203 -0
- package/proagents/config/integrations/slack.yaml +230 -0
- package/proagents/config/rules/README.md +73 -0
- package/proagents/config/rules/custom-rules.template.yaml +188 -0
- package/proagents/config/rules/validation-rules.template.yaml +177 -0
- package/proagents/config/standards/README.md +58 -0
- package/proagents/config/standards/architecture-rules.template.md +124 -0
- package/proagents/config/standards/coding-standards.template.md +107 -0
- package/proagents/config/standards/naming-conventions.template.md +114 -0
- package/proagents/config/standards/testing-standards.template.md +213 -0
- package/proagents/config/templates/README.md +74 -0
- package/proagents/config/templates/api-route.template.ts +142 -0
- package/proagents/config/templates/component.template.tsx +55 -0
- package/proagents/config/templates/hook.template.ts +93 -0
- package/proagents/config/templates/test.template.ts +171 -0
- package/proagents/config-versioning/README.md +120 -0
- package/proagents/config-versioning/changelog.md +300 -0
- package/proagents/config-versioning/rollback.md +283 -0
- package/proagents/config-versioning/versioning.md +330 -0
- package/proagents/contract-testing/README.md +223 -0
- package/proagents/contract-testing/contract-testing.md +614 -0
- package/proagents/contract-testing/pact-integration.md +507 -0
- package/proagents/contract-testing/schema-validation.md +565 -0
- package/proagents/cost/README.md +48 -0
- package/proagents/cost/cost-template.md +283 -0
- package/proagents/cost/estimation-framework.md +287 -0
- package/proagents/database/README.md +72 -0
- package/proagents/database/examples/001-create-users.sql +129 -0
- package/proagents/database/examples/002-add-preferences.sql +94 -0
- package/proagents/database/examples/003-add-index.sql +105 -0
- package/proagents/database/examples/004-rename-column.sql +122 -0
- package/proagents/database/examples/005-add-foreign-key.sql +142 -0
- package/proagents/database/examples/006-data-migration.sql +196 -0
- package/proagents/database/examples/007-drop-column.sql +163 -0
- package/proagents/database/examples/README.md +89 -0
- package/proagents/database/migration-workflow.md +478 -0
- package/proagents/database/rollback-scripts.md +487 -0
- package/proagents/database/safety-checks.md +447 -0
- package/proagents/dependency-management/README.md +140 -0
- package/proagents/dependency-management/automation.md +363 -0
- package/proagents/dependency-management/compatibility.md +319 -0
- package/proagents/dependency-management/security-scanning.md +413 -0
- package/proagents/dependency-management/update-policies.md +374 -0
- package/proagents/disaster-recovery/README.md +247 -0
- package/proagents/disaster-recovery/automation.md +366 -0
- package/proagents/disaster-recovery/backup-recovery.md +571 -0
- package/proagents/disaster-recovery/incident-response.md +565 -0
- package/proagents/disaster-recovery/rollback-procedures.md +499 -0
- package/proagents/disaster-recovery/runbooks.md +603 -0
- package/proagents/disaster-recovery/scenarios.md +892 -0
- package/proagents/disaster-recovery/testing.md +438 -0
- package/proagents/environments/README.md +244 -0
- package/proagents/environments/configuration.md +437 -0
- package/proagents/environments/promotion.md +434 -0
- package/proagents/environments/setup.md +420 -0
- package/proagents/examples/README.md +55 -0
- package/proagents/examples/backend-nodejs/README.md +188 -0
- package/proagents/examples/backend-nodejs/complete-conversation.md +601 -0
- package/proagents/examples/backend-nodejs/proagents.config.yaml +415 -0
- package/proagents/examples/backend-nodejs/workflow-example.md +909 -0
- package/proagents/examples/fullstack-nextjs/README.md +155 -0
- package/proagents/examples/fullstack-nextjs/complete-conversation.md +604 -0
- package/proagents/examples/fullstack-nextjs/proagents.config.yaml +287 -0
- package/proagents/examples/fullstack-nextjs/workflow-example.md +553 -0
- package/proagents/examples/mobile-react-native/README.md +171 -0
- package/proagents/examples/mobile-react-native/complete-conversation.md +825 -0
- package/proagents/examples/mobile-react-native/proagents.config.yaml +330 -0
- package/proagents/examples/mobile-react-native/workflow-example.md +723 -0
- package/proagents/examples/web-frontend-react/README.md +125 -0
- package/proagents/examples/web-frontend-react/complete-conversation.md +556 -0
- package/proagents/examples/web-frontend-react/proagents.config.yaml +183 -0
- package/proagents/examples/web-frontend-react/workflow-example.md +603 -0
- package/proagents/existing-projects/README.md +65 -0
- package/proagents/existing-projects/challenges.md +861 -0
- package/proagents/existing-projects/coexistence-mode.md +483 -0
- package/proagents/existing-projects/compatibility-assessment.md +541 -0
- package/proagents/existing-projects/gradual-adoption.md +515 -0
- package/proagents/existing-projects/migration-strategies.md +788 -0
- package/proagents/existing-projects/pattern-reconciliation.md +489 -0
- package/proagents/existing-projects/team-onboarding.md +617 -0
- package/proagents/existing-projects/technical-debt-handling.md +644 -0
- package/proagents/feature-flags/README.md +263 -0
- package/proagents/feature-flags/ab-testing.md +413 -0
- package/proagents/feature-flags/configuration.md +420 -0
- package/proagents/feature-flags/kill-switches.md +444 -0
- package/proagents/feature-flags/rollout-strategies.md +392 -0
- package/proagents/getting-started/README.md +60 -0
- package/proagents/getting-started/ai-training-setup.md +380 -0
- package/proagents/getting-started/ide-setup.md +195 -0
- package/proagents/getting-started/mcp-setup.md +239 -0
- package/proagents/getting-started/pm-integration.md +336 -0
- package/proagents/getting-started/prompt-engineering.md +478 -0
- package/proagents/getting-started/team-onboarding.md +236 -0
- package/proagents/git/README.md +68 -0
- package/proagents/git/branch-strategy.md +164 -0
- package/proagents/git/commit-conventions.md +241 -0
- package/proagents/git/pr-workflow.md +286 -0
- package/proagents/git/rollback-procedures.md +416 -0
- package/proagents/i18n/README.md +133 -0
- package/proagents/i18n/extraction.md +433 -0
- package/proagents/i18n/tms-integration.md +332 -0
- package/proagents/i18n/translation-workflow.md +413 -0
- package/proagents/i18n/validation.md +355 -0
- package/proagents/ide-integration/README.md +124 -0
- package/proagents/ide-integration/cline-config.md +429 -0
- package/proagents/ide-integration/continue-config.md +380 -0
- package/proagents/ide-integration/cursor-rules.md +280 -0
- package/proagents/ide-integration/github-copilot.md +384 -0
- package/proagents/ide-integration/windsurf-rules.md +314 -0
- package/proagents/integrations/README.md +97 -0
- package/proagents/integrations/pm/README.md +344 -0
- package/proagents/learning/README.md +136 -0
- package/proagents/learning/adaptation.md +305 -0
- package/proagents/learning/data-collection.md +283 -0
- package/proagents/learning/implementation-guide.md +865 -0
- package/proagents/learning/reports.md +306 -0
- package/proagents/logging/README.md +276 -0
- package/proagents/logging/aggregation.md +475 -0
- package/proagents/logging/log-levels.md +376 -0
- package/proagents/logging/sensitive-data.md +423 -0
- package/proagents/logging/structured-logging.md +406 -0
- package/proagents/mcp/README.md +133 -0
- package/proagents/mcp/context-providers.md +442 -0
- package/proagents/mcp/server-config.md +306 -0
- package/proagents/mcp/tools-definition.md +513 -0
- package/proagents/metrics/README.md +174 -0
- package/proagents/metrics/code-quality-kpis.md +461 -0
- package/proagents/metrics/deployment-metrics.md +517 -0
- package/proagents/metrics/developer-productivity.md +368 -0
- package/proagents/metrics/learning-effectiveness.md +478 -0
- package/proagents/migrations/README.md +77 -0
- package/proagents/migrations/from-claude-projects.md +312 -0
- package/proagents/migrations/from-cursor-rules.md +345 -0
- package/proagents/migrations/from-custom-workflows.md +410 -0
- package/proagents/monitoring/README.md +308 -0
- package/proagents/monitoring/alerting.md +449 -0
- package/proagents/monitoring/dashboards.md +454 -0
- package/proagents/monitoring/health-checks.md +436 -0
- package/proagents/monitoring/metrics.md +434 -0
- package/proagents/multi-project/README.md +170 -0
- package/proagents/multi-project/coordinated-deploy.md +510 -0
- package/proagents/multi-project/cross-project-deps.md +395 -0
- package/proagents/multi-project/unified-changelog.md +477 -0
- package/proagents/multi-project/walkthroughs/monorepo-setup.md +787 -0
- package/proagents/multi-project/workspace-config.md +408 -0
- package/proagents/notifications/README.md +151 -0
- package/proagents/notifications/channels.md +457 -0
- package/proagents/notifications/preferences.md +415 -0
- package/proagents/notifications/routing.md +449 -0
- package/proagents/notifications/scheduling.md +425 -0
- package/proagents/notifications/templates.md +446 -0
- package/proagents/offline-mode/README.md +145 -0
- package/proagents/offline-mode/caching.md +344 -0
- package/proagents/offline-mode/offline-operations.md +312 -0
- package/proagents/offline-mode/queue-specifications.md +679 -0
- package/proagents/offline-mode/sync.md +475 -0
- package/proagents/parallel-features/README.md +85 -0
- package/proagents/parallel-features/conflict-detection.md +226 -0
- package/proagents/parallel-features/dependency-management.md +392 -0
- package/proagents/parallel-features/merge-coordination.md +506 -0
- package/proagents/parallel-features/tracking-system.md +416 -0
- package/proagents/patterns/README.md +305 -0
- package/proagents/patterns/api-errors.md +453 -0
- package/proagents/patterns/async-errors.md +521 -0
- package/proagents/patterns/error-types.md +437 -0
- package/proagents/patterns/ui-errors.md +595 -0
- package/proagents/performance/README.md +59 -0
- package/proagents/performance/bundle-analysis.md +375 -0
- package/proagents/performance/load-testing.md +563 -0
- package/proagents/performance/runtime-metrics.md +489 -0
- package/proagents/performance/web-vitals.md +425 -0
- package/proagents/plugins/README.md +139 -0
- package/proagents/plugins/creating-plugins.md +504 -0
- package/proagents/plugins/plugin-api.md +467 -0
- package/proagents/plugins/plugin-registry.md +276 -0
- package/proagents/pm-integration/README.md +151 -0
- package/proagents/pm-integration/asana.md +346 -0
- package/proagents/pm-integration/github-issues.md +308 -0
- package/proagents/pm-integration/gitlab-issues.md +482 -0
- package/proagents/pm-integration/jira.md +364 -0
- package/proagents/pm-integration/linear.md +409 -0
- package/proagents/pm-integration/notion.md +275 -0
- package/proagents/pm-integration/sync-config.md +533 -0
- package/proagents/pm-integration/trello.md +159 -0
- package/proagents/proagents.config.yaml +213 -0
- package/proagents/prompts/00-init-wizard.md +426 -0
- package/proagents/prompts/00-init.md +219 -0
- package/proagents/prompts/01-analysis.md +244 -0
- package/proagents/prompts/02-requirements.md +399 -0
- package/proagents/prompts/03-ui-design.md +493 -0
- package/proagents/prompts/04-planning.md +505 -0
- package/proagents/prompts/05-implementation.md +518 -0
- package/proagents/prompts/06-testing.md +620 -0
- package/proagents/prompts/06.5-code-review.md +512 -0
- package/proagents/prompts/07-documentation.md +673 -0
- package/proagents/prompts/08-deployment.md +539 -0
- package/proagents/prompts/09-rollback.md +554 -0
- package/proagents/prompts/README.md +51 -0
- package/proagents/prompts/accessibility/README.md +146 -0
- package/proagents/prompts/accessibility/aria.md +276 -0
- package/proagents/prompts/accessibility/audit.md +233 -0
- package/proagents/prompts/accessibility/keyboard.md +392 -0
- package/proagents/prompts/accessibility/wcag.md +189 -0
- package/proagents/prompts/debugging/README.md +51 -0
- package/proagents/prompts/debugging/error-analysis.md +385 -0
- package/proagents/prompts/debugging/performance-debug.md +381 -0
- package/proagents/prompts/debugging/systematic.md +270 -0
- package/proagents/prompts/performance/README.md +47 -0
- package/proagents/prompts/performance/analyze.md +265 -0
- package/proagents/prompts/performance/optimize.md +347 -0
- package/proagents/prompts/refactoring/README.md +51 -0
- package/proagents/prompts/refactoring/architecture.md +531 -0
- package/proagents/prompts/refactoring/code-smells.md +174 -0
- package/proagents/prompts/refactoring/patterns.md +516 -0
- package/proagents/prompts/security-audit/README.md +197 -0
- package/proagents/prompts/security-audit/code-review.md +260 -0
- package/proagents/prompts/security-audit/vulnerability-scan.md +288 -0
- package/proagents/reporting/README.md +158 -0
- package/proagents/reporting/dashboards.md +366 -0
- package/proagents/reporting/exports.md +524 -0
- package/proagents/reporting/quality-metrics.md +385 -0
- package/proagents/reporting/templates/README.md +56 -0
- package/proagents/reporting/templates/dashboard-config.json +187 -0
- package/proagents/reporting/templates/metrics-queries.md +427 -0
- package/proagents/reporting/templates/react-dashboard.tsx +544 -0
- package/proagents/reporting/templates/widgets.md +451 -0
- package/proagents/reporting/velocity-metrics.md +340 -0
- package/proagents/reverse-engineering/README.md +151 -0
- package/proagents/reverse-engineering/architecture-extraction.md +325 -0
- package/proagents/reverse-engineering/code-analysis.md +377 -0
- package/proagents/reverse-engineering/dependency-mapping.md +567 -0
- package/proagents/reverse-engineering/diagram-generation.md +586 -0
- package/proagents/reverse-engineering/documentation-generation.md +468 -0
- package/proagents/reverse-engineering/pattern-detection.md +569 -0
- package/proagents/reverse-engineering/quality-assessment.md +733 -0
- package/proagents/rules/README.md +179 -0
- package/proagents/rules/custom-rules-template.yaml +286 -0
- package/proagents/rules/custom-rules.md +754 -0
- package/proagents/rules/validation-rules-template.yaml +517 -0
- package/proagents/runbooks/README.md +219 -0
- package/proagents/runbooks/dependency-vulnerability.md +505 -0
- package/proagents/runbooks/incident-response.md +451 -0
- package/proagents/runbooks/performance-degradation.md +584 -0
- package/proagents/runbooks/production-debugging.md +489 -0
- package/proagents/scaffolding/README.md +64 -0
- package/proagents/scaffolding/nextjs/README.md +578 -0
- package/proagents/scaffolding/nextjs/templates/api-route.ts.template +185 -0
- package/proagents/scaffolding/nextjs/templates/page.tsx.template +109 -0
- package/proagents/scaffolding/nextjs/templates/server-action.ts.template +204 -0
- package/proagents/scaffolding/nodejs/README.md +558 -0
- package/proagents/scaffolding/nodejs/templates/controller.ts.template +167 -0
- package/proagents/scaffolding/nodejs/templates/repository.ts.template +155 -0
- package/proagents/scaffolding/nodejs/templates/service.ts.template +207 -0
- package/proagents/scaffolding/project-types.md +401 -0
- package/proagents/scaffolding/react/README.md +399 -0
- package/proagents/scaffolding/react/templates/component.tsx.template +88 -0
- package/proagents/scaffolding/react/templates/hook.ts.template +127 -0
- package/proagents/scaffolding/react/templates/service.ts.template +155 -0
- package/proagents/scaffolding/react/templates/test.tsx.template +149 -0
- package/proagents/scaffolding/react-native/README.md +476 -0
- package/proagents/scaffolding/react-native/templates/hook.ts.template +226 -0
- package/proagents/scaffolding/react-native/templates/screen.tsx.template +247 -0
- package/proagents/secrets/README.md +278 -0
- package/proagents/secrets/access-control.md +443 -0
- package/proagents/secrets/rotation.md +403 -0
- package/proagents/secrets/scanning.md +487 -0
- package/proagents/secrets/storage.md +394 -0
- package/proagents/security/README.md +71 -0
- package/proagents/security/owasp-checklist.md +390 -0
- package/proagents/security/sast-guide.md +473 -0
- package/proagents/security/security-report-template.md +343 -0
- package/proagents/security/vulnerability-scanning.md +329 -0
- package/proagents/slash-commands.json +161 -0
- package/proagents/standards/README.md +120 -0
- package/proagents/standards/architecture-patterns.md +728 -0
- package/proagents/standards/architecture-rules-template.md +489 -0
- package/proagents/standards/coding-standards-template.md +489 -0
- package/proagents/standards/examples/README.md +61 -0
- package/proagents/standards/examples/nodejs-api.md +560 -0
- package/proagents/standards/examples/react-nextjs.md +428 -0
- package/proagents/standards/naming-conventions-template.md +526 -0
- package/proagents/standards/override-system.md +717 -0
- package/proagents/standards/testing-standards-template.md +220 -0
- package/proagents/team/README.md +256 -0
- package/proagents/team/code-ownership.md +306 -0
- package/proagents/team/communication-templates.md +441 -0
- package/proagents/team/handoff-protocol.md +380 -0
- package/proagents/team/ide-setup/README.md +103 -0
- package/proagents/team/ide-setup/cursor.md +276 -0
- package/proagents/team/ide-setup/jetbrains.md +330 -0
- package/proagents/team/ide-setup/neovim.md +640 -0
- package/proagents/team/ide-setup/vscode.md +348 -0
- package/proagents/team/onboarding.md +278 -0
- package/proagents/templates/README.md +57 -0
- package/proagents/templates/code-review-report.md +255 -0
- package/proagents/templates/codebase-analysis-report.md +315 -0
- package/proagents/templates/deployment-checklist.md +277 -0
- package/proagents/templates/feature-requirements.md +142 -0
- package/proagents/templates/feature-status.md +231 -0
- package/proagents/templates/implementation-plan.md +373 -0
- package/proagents/templates/rollback-plan.md +331 -0
- package/proagents/templates/test-plan.md +336 -0
- package/proagents/templates/ui-specification.md +431 -0
- package/proagents/testing-standards/README.md +229 -0
- package/proagents/testing-standards/coverage-requirements.md +198 -0
- package/proagents/testing-standards/mocking-guidelines.md +478 -0
- package/proagents/testing-standards/test-naming.md +485 -0
- package/proagents/testing-standards/test-patterns.md +488 -0
- package/proagents/troubleshooting/README.md +730 -0
- package/proagents/troubleshooting/ai-issues.md +601 -0
- package/proagents/troubleshooting/workflow-issues.md +571 -0
- package/proagents/ui-integration/README.md +77 -0
- package/proagents/ui-integration/figma-guide.md +217 -0
- package/proagents/ui-integration/manual-export-guide.md +358 -0
- package/proagents/ui-integration/sketch-interpretation.md +471 -0
- package/proagents/webhooks/README.md +126 -0
- package/proagents/webhooks/endpoints.md +298 -0
- package/proagents/webhooks/events.md +316 -0
- package/proagents/webhooks/payloads.md +325 -0
- package/proagents/webhooks/reliability.md +363 -0
- package/proagents/webhooks/security.md +380 -0
- package/proagents/workflow-modes/README.md +136 -0
- package/proagents/workflow-modes/deferred-tracking.md +405 -0
- package/proagents/workflow-modes/entry-modes.md +397 -0
- package/proagents/workflow-modes/guardrails.md +405 -0
- package/proagents/workflow-modes/mode-detection.md +358 -0
- package/proagents/workflow-modes/mode-switching.md +372 -0
|
@@ -0,0 +1,604 @@
|
|
|
1
|
+
# Complete Conversation: Next.js Settings Feature
|
|
2
|
+
|
|
3
|
+
A full walkthrough of building a settings page with API in a Next.js application.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Feature Request
|
|
8
|
+
|
|
9
|
+
**User:** I need to add a user settings page where users can update their profile, change notification preferences, and manage their account. It should have an API backend.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Phase 0: Initialization
|
|
14
|
+
|
|
15
|
+
**AI:** I'll help you build a comprehensive settings feature. Let me start by analyzing your existing codebase.
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
Starting ProAgents workflow...
|
|
19
|
+
Mode: Full Workflow
|
|
20
|
+
Feature: User Settings Page with API
|
|
21
|
+
Branch: feature/user-settings
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Phase 1: Codebase Analysis
|
|
27
|
+
|
|
28
|
+
**AI:** I've analyzed your Next.js project. Here's what I found:
|
|
29
|
+
|
|
30
|
+
### Project Structure
|
|
31
|
+
```
|
|
32
|
+
app/
|
|
33
|
+
├── (auth)/
|
|
34
|
+
│ ├── dashboard/
|
|
35
|
+
│ │ └── page.tsx
|
|
36
|
+
│ └── layout.tsx
|
|
37
|
+
├── api/
|
|
38
|
+
│ └── users/
|
|
39
|
+
│ └── route.ts
|
|
40
|
+
├── layout.tsx
|
|
41
|
+
└── page.tsx
|
|
42
|
+
lib/
|
|
43
|
+
├── db.ts # Prisma client
|
|
44
|
+
├── auth.ts # NextAuth config
|
|
45
|
+
└── validations/
|
|
46
|
+
└── user.ts # Zod schemas
|
|
47
|
+
components/
|
|
48
|
+
├── ui/ # shadcn/ui components
|
|
49
|
+
└── forms/
|
|
50
|
+
prisma/
|
|
51
|
+
└── schema.prisma
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Patterns Detected
|
|
55
|
+
- **Framework:** Next.js 14 with App Router
|
|
56
|
+
- **Database:** Prisma with PostgreSQL
|
|
57
|
+
- **Auth:** NextAuth.js with JWT strategy
|
|
58
|
+
- **UI:** shadcn/ui components with Tailwind
|
|
59
|
+
- **Validation:** Zod schemas
|
|
60
|
+
- **State:** React Query for server state
|
|
61
|
+
|
|
62
|
+
### Existing Conventions
|
|
63
|
+
- API routes use typed request/response
|
|
64
|
+
- Forms use react-hook-form with Zod
|
|
65
|
+
- All routes under `(auth)` require authentication
|
|
66
|
+
|
|
67
|
+
**Checkpoint: Analysis Complete**
|
|
68
|
+
Do you want to proceed with these patterns? [Yes/Modify]
|
|
69
|
+
|
|
70
|
+
**User:** Yes, proceed.
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Phase 2: Requirements
|
|
75
|
+
|
|
76
|
+
**AI:** Let me clarify the requirements for the settings feature.
|
|
77
|
+
|
|
78
|
+
### Feature Requirements
|
|
79
|
+
|
|
80
|
+
**1. Profile Settings**
|
|
81
|
+
- Update display name
|
|
82
|
+
- Update avatar (upload)
|
|
83
|
+
- Update bio/description
|
|
84
|
+
|
|
85
|
+
**2. Notification Preferences**
|
|
86
|
+
- Email notifications toggle
|
|
87
|
+
- Push notifications toggle
|
|
88
|
+
- Notification frequency (immediate/daily/weekly)
|
|
89
|
+
|
|
90
|
+
**3. Account Settings**
|
|
91
|
+
- Change email (with verification)
|
|
92
|
+
- Change password
|
|
93
|
+
- Delete account (with confirmation)
|
|
94
|
+
|
|
95
|
+
### Technical Requirements
|
|
96
|
+
- All operations require authentication
|
|
97
|
+
- Form validation with Zod
|
|
98
|
+
- Optimistic updates where appropriate
|
|
99
|
+
- Proper error handling
|
|
100
|
+
|
|
101
|
+
**User:** Looks good, but also add a timezone selector in profile settings.
|
|
102
|
+
|
|
103
|
+
**AI:** Added timezone selector to profile settings.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Phase 3: Design
|
|
108
|
+
|
|
109
|
+
**AI:** Based on your existing UI patterns, here's the design specification:
|
|
110
|
+
|
|
111
|
+
### Page Layout
|
|
112
|
+
```
|
|
113
|
+
/settings
|
|
114
|
+
├── /settings/profile # Profile settings
|
|
115
|
+
├── /settings/notifications # Notification preferences
|
|
116
|
+
└── /settings/account # Account management
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Component Structure
|
|
120
|
+
```tsx
|
|
121
|
+
// Settings layout with sidebar navigation
|
|
122
|
+
<SettingsLayout>
|
|
123
|
+
<SettingsSidebar />
|
|
124
|
+
<SettingsContent>
|
|
125
|
+
{children}
|
|
126
|
+
</SettingsContent>
|
|
127
|
+
</SettingsLayout>
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### UI Components (using existing shadcn/ui)
|
|
131
|
+
- Card for each settings section
|
|
132
|
+
- Form with Input, Select, Switch components
|
|
133
|
+
- Button for actions
|
|
134
|
+
- AlertDialog for destructive actions
|
|
135
|
+
- Toast for feedback
|
|
136
|
+
|
|
137
|
+
**Checkpoint: Design Complete**
|
|
138
|
+
Ready to proceed with implementation? [Yes/Modify]
|
|
139
|
+
|
|
140
|
+
**User:** Yes.
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## Phase 4: Implementation Plan
|
|
145
|
+
|
|
146
|
+
**AI:** Here's the implementation plan:
|
|
147
|
+
|
|
148
|
+
### Database Changes
|
|
149
|
+
```prisma
|
|
150
|
+
// Add to schema.prisma
|
|
151
|
+
model UserSettings {
|
|
152
|
+
id String @id @default(cuid())
|
|
153
|
+
userId String @unique
|
|
154
|
+
user User @relation(fields: [userId], references: [id])
|
|
155
|
+
timezone String @default("UTC")
|
|
156
|
+
emailNotifications Boolean @default(true)
|
|
157
|
+
pushNotifications Boolean @default(false)
|
|
158
|
+
notificationFrequency String @default("immediate")
|
|
159
|
+
createdAt DateTime @default(now())
|
|
160
|
+
updatedAt DateTime @updatedAt
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Files to Create
|
|
165
|
+
1. `prisma/migrations/xxx_add_user_settings.sql`
|
|
166
|
+
2. `lib/validations/settings.ts` - Zod schemas
|
|
167
|
+
3. `app/api/settings/route.ts` - GET/PATCH settings
|
|
168
|
+
4. `app/api/settings/password/route.ts` - Change password
|
|
169
|
+
5. `app/api/settings/account/route.ts` - Delete account
|
|
170
|
+
6. `app/(auth)/settings/layout.tsx` - Settings layout
|
|
171
|
+
7. `app/(auth)/settings/page.tsx` - Redirect to profile
|
|
172
|
+
8. `app/(auth)/settings/profile/page.tsx`
|
|
173
|
+
9. `app/(auth)/settings/notifications/page.tsx`
|
|
174
|
+
10. `app/(auth)/settings/account/page.tsx`
|
|
175
|
+
11. `components/settings/SettingsSidebar.tsx`
|
|
176
|
+
12. `components/settings/ProfileForm.tsx`
|
|
177
|
+
13. `components/settings/NotificationsForm.tsx`
|
|
178
|
+
14. `components/settings/AccountSettings.tsx`
|
|
179
|
+
|
|
180
|
+
### Implementation Order
|
|
181
|
+
1. Database schema + migration
|
|
182
|
+
2. Validation schemas
|
|
183
|
+
3. API routes
|
|
184
|
+
4. Layout and navigation
|
|
185
|
+
5. Individual settings pages
|
|
186
|
+
6. Forms and components
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## Phase 5: Implementation
|
|
191
|
+
|
|
192
|
+
**AI:** Starting implementation. Creating branch `feature/user-settings`.
|
|
193
|
+
|
|
194
|
+
### Step 1: Database Schema
|
|
195
|
+
|
|
196
|
+
```prisma
|
|
197
|
+
// prisma/schema.prisma - additions
|
|
198
|
+
model UserSettings {
|
|
199
|
+
id String @id @default(cuid())
|
|
200
|
+
userId String @unique
|
|
201
|
+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
202
|
+
timezone String @default("UTC")
|
|
203
|
+
emailNotifications Boolean @default(true)
|
|
204
|
+
pushNotifications Boolean @default(false)
|
|
205
|
+
notificationFrequency String @default("immediate")
|
|
206
|
+
createdAt DateTime @default(now())
|
|
207
|
+
updatedAt DateTime @updatedAt
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
npx prisma migrate dev --name add_user_settings
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### Step 2: Validation Schemas
|
|
216
|
+
|
|
217
|
+
```typescript
|
|
218
|
+
// lib/validations/settings.ts
|
|
219
|
+
import { z } from 'zod';
|
|
220
|
+
|
|
221
|
+
export const profileSchema = z.object({
|
|
222
|
+
name: z.string().min(2).max(50),
|
|
223
|
+
bio: z.string().max(500).optional(),
|
|
224
|
+
timezone: z.string(),
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
export const notificationsSchema = z.object({
|
|
228
|
+
emailNotifications: z.boolean(),
|
|
229
|
+
pushNotifications: z.boolean(),
|
|
230
|
+
notificationFrequency: z.enum(['immediate', 'daily', 'weekly']),
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
export const passwordSchema = z.object({
|
|
234
|
+
currentPassword: z.string().min(8),
|
|
235
|
+
newPassword: z.string().min(8),
|
|
236
|
+
confirmPassword: z.string().min(8),
|
|
237
|
+
}).refine((data) => data.newPassword === data.confirmPassword, {
|
|
238
|
+
message: "Passwords don't match",
|
|
239
|
+
path: ["confirmPassword"],
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
export const deleteAccountSchema = z.object({
|
|
243
|
+
confirmation: z.literal('DELETE'),
|
|
244
|
+
});
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### Step 3: API Routes
|
|
248
|
+
|
|
249
|
+
```typescript
|
|
250
|
+
// app/api/settings/route.ts
|
|
251
|
+
import { NextRequest, NextResponse } from 'next/server';
|
|
252
|
+
import { getServerSession } from 'next-auth';
|
|
253
|
+
import { authOptions } from '@/lib/auth';
|
|
254
|
+
import { db } from '@/lib/db';
|
|
255
|
+
import { profileSchema, notificationsSchema } from '@/lib/validations/settings';
|
|
256
|
+
|
|
257
|
+
export async function GET(req: NextRequest) {
|
|
258
|
+
try {
|
|
259
|
+
const session = await getServerSession(authOptions);
|
|
260
|
+
if (!session?.user?.id) {
|
|
261
|
+
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
const settings = await db.userSettings.findUnique({
|
|
265
|
+
where: { userId: session.user.id },
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
// Create default settings if none exist
|
|
269
|
+
if (!settings) {
|
|
270
|
+
const newSettings = await db.userSettings.create({
|
|
271
|
+
data: { userId: session.user.id },
|
|
272
|
+
});
|
|
273
|
+
return NextResponse.json({ data: newSettings });
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
return NextResponse.json({ data: settings });
|
|
277
|
+
} catch (error) {
|
|
278
|
+
return NextResponse.json({ error: 'Failed to fetch settings' }, { status: 500 });
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
export async function PATCH(req: NextRequest) {
|
|
283
|
+
try {
|
|
284
|
+
const session = await getServerSession(authOptions);
|
|
285
|
+
if (!session?.user?.id) {
|
|
286
|
+
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
const body = await req.json();
|
|
290
|
+
const { type, ...data } = body;
|
|
291
|
+
|
|
292
|
+
let validatedData;
|
|
293
|
+
if (type === 'profile') {
|
|
294
|
+
validatedData = profileSchema.parse(data);
|
|
295
|
+
await db.user.update({
|
|
296
|
+
where: { id: session.user.id },
|
|
297
|
+
data: { name: validatedData.name },
|
|
298
|
+
});
|
|
299
|
+
} else if (type === 'notifications') {
|
|
300
|
+
validatedData = notificationsSchema.parse(data);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
const settings = await db.userSettings.upsert({
|
|
304
|
+
where: { userId: session.user.id },
|
|
305
|
+
update: validatedData,
|
|
306
|
+
create: { userId: session.user.id, ...validatedData },
|
|
307
|
+
});
|
|
308
|
+
|
|
309
|
+
return NextResponse.json({ data: settings });
|
|
310
|
+
} catch (error) {
|
|
311
|
+
if (error instanceof z.ZodError) {
|
|
312
|
+
return NextResponse.json({ error: error.errors }, { status: 400 });
|
|
313
|
+
}
|
|
314
|
+
return NextResponse.json({ error: 'Failed to update settings' }, { status: 500 });
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
### Step 4: Settings Layout
|
|
320
|
+
|
|
321
|
+
```tsx
|
|
322
|
+
// app/(auth)/settings/layout.tsx
|
|
323
|
+
import { SettingsSidebar } from '@/components/settings/SettingsSidebar';
|
|
324
|
+
|
|
325
|
+
export default function SettingsLayout({
|
|
326
|
+
children,
|
|
327
|
+
}: {
|
|
328
|
+
children: React.ReactNode;
|
|
329
|
+
}) {
|
|
330
|
+
return (
|
|
331
|
+
<div className="container max-w-6xl py-8">
|
|
332
|
+
<h1 className="text-3xl font-bold mb-8">Settings</h1>
|
|
333
|
+
<div className="flex gap-8">
|
|
334
|
+
<SettingsSidebar />
|
|
335
|
+
<div className="flex-1">{children}</div>
|
|
336
|
+
</div>
|
|
337
|
+
</div>
|
|
338
|
+
);
|
|
339
|
+
}
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
### Step 5: Profile Page
|
|
343
|
+
|
|
344
|
+
```tsx
|
|
345
|
+
// app/(auth)/settings/profile/page.tsx
|
|
346
|
+
import { ProfileForm } from '@/components/settings/ProfileForm';
|
|
347
|
+
import { getServerSession } from 'next-auth';
|
|
348
|
+
import { authOptions } from '@/lib/auth';
|
|
349
|
+
import { db } from '@/lib/db';
|
|
350
|
+
|
|
351
|
+
export default async function ProfileSettingsPage() {
|
|
352
|
+
const session = await getServerSession(authOptions);
|
|
353
|
+
const user = await db.user.findUnique({
|
|
354
|
+
where: { id: session?.user?.id },
|
|
355
|
+
include: { settings: true },
|
|
356
|
+
});
|
|
357
|
+
|
|
358
|
+
return (
|
|
359
|
+
<div className="space-y-6">
|
|
360
|
+
<div>
|
|
361
|
+
<h2 className="text-xl font-semibold">Profile</h2>
|
|
362
|
+
<p className="text-muted-foreground">
|
|
363
|
+
Manage your public profile information.
|
|
364
|
+
</p>
|
|
365
|
+
</div>
|
|
366
|
+
<ProfileForm user={user} />
|
|
367
|
+
</div>
|
|
368
|
+
);
|
|
369
|
+
}
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
[Implementation continues for all components...]
|
|
373
|
+
|
|
374
|
+
---
|
|
375
|
+
|
|
376
|
+
## Phase 6: Testing
|
|
377
|
+
|
|
378
|
+
**AI:** Creating tests for the settings feature.
|
|
379
|
+
|
|
380
|
+
### API Route Tests
|
|
381
|
+
|
|
382
|
+
```typescript
|
|
383
|
+
// __tests__/api/settings.test.ts
|
|
384
|
+
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
|
385
|
+
import { GET, PATCH } from '@/app/api/settings/route';
|
|
386
|
+
import { NextRequest } from 'next/server';
|
|
387
|
+
|
|
388
|
+
vi.mock('next-auth', () => ({
|
|
389
|
+
getServerSession: vi.fn(),
|
|
390
|
+
}));
|
|
391
|
+
|
|
392
|
+
vi.mock('@/lib/db', () => ({
|
|
393
|
+
db: {
|
|
394
|
+
userSettings: {
|
|
395
|
+
findUnique: vi.fn(),
|
|
396
|
+
create: vi.fn(),
|
|
397
|
+
upsert: vi.fn(),
|
|
398
|
+
},
|
|
399
|
+
user: {
|
|
400
|
+
update: vi.fn(),
|
|
401
|
+
},
|
|
402
|
+
},
|
|
403
|
+
}));
|
|
404
|
+
|
|
405
|
+
describe('Settings API', () => {
|
|
406
|
+
describe('GET /api/settings', () => {
|
|
407
|
+
it('returns 401 when not authenticated', async () => {
|
|
408
|
+
const { getServerSession } = await import('next-auth');
|
|
409
|
+
vi.mocked(getServerSession).mockResolvedValue(null);
|
|
410
|
+
|
|
411
|
+
const req = new NextRequest('http://localhost/api/settings');
|
|
412
|
+
const res = await GET(req);
|
|
413
|
+
|
|
414
|
+
expect(res.status).toBe(401);
|
|
415
|
+
});
|
|
416
|
+
|
|
417
|
+
it('returns user settings when authenticated', async () => {
|
|
418
|
+
const { getServerSession } = await import('next-auth');
|
|
419
|
+
vi.mocked(getServerSession).mockResolvedValue({
|
|
420
|
+
user: { id: 'user-1' },
|
|
421
|
+
});
|
|
422
|
+
|
|
423
|
+
const { db } = await import('@/lib/db');
|
|
424
|
+
vi.mocked(db.userSettings.findUnique).mockResolvedValue({
|
|
425
|
+
id: 'settings-1',
|
|
426
|
+
userId: 'user-1',
|
|
427
|
+
timezone: 'America/New_York',
|
|
428
|
+
emailNotifications: true,
|
|
429
|
+
pushNotifications: false,
|
|
430
|
+
notificationFrequency: 'daily',
|
|
431
|
+
});
|
|
432
|
+
|
|
433
|
+
const req = new NextRequest('http://localhost/api/settings');
|
|
434
|
+
const res = await GET(req);
|
|
435
|
+
const data = await res.json();
|
|
436
|
+
|
|
437
|
+
expect(res.status).toBe(200);
|
|
438
|
+
expect(data.data.timezone).toBe('America/New_York');
|
|
439
|
+
});
|
|
440
|
+
});
|
|
441
|
+
|
|
442
|
+
describe('PATCH /api/settings', () => {
|
|
443
|
+
it('validates notification settings', async () => {
|
|
444
|
+
const { getServerSession } = await import('next-auth');
|
|
445
|
+
vi.mocked(getServerSession).mockResolvedValue({
|
|
446
|
+
user: { id: 'user-1' },
|
|
447
|
+
});
|
|
448
|
+
|
|
449
|
+
const req = new NextRequest('http://localhost/api/settings', {
|
|
450
|
+
method: 'PATCH',
|
|
451
|
+
body: JSON.stringify({
|
|
452
|
+
type: 'notifications',
|
|
453
|
+
emailNotifications: 'invalid', // Should be boolean
|
|
454
|
+
}),
|
|
455
|
+
});
|
|
456
|
+
|
|
457
|
+
const res = await PATCH(req);
|
|
458
|
+
expect(res.status).toBe(400);
|
|
459
|
+
});
|
|
460
|
+
});
|
|
461
|
+
});
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
### Component Tests
|
|
465
|
+
|
|
466
|
+
```typescript
|
|
467
|
+
// __tests__/components/ProfileForm.test.tsx
|
|
468
|
+
import { describe, it, expect } from 'vitest';
|
|
469
|
+
import { render, screen } from '@testing-library/react';
|
|
470
|
+
import userEvent from '@testing-library/user-event';
|
|
471
|
+
import { ProfileForm } from '@/components/settings/ProfileForm';
|
|
472
|
+
|
|
473
|
+
describe('ProfileForm', () => {
|
|
474
|
+
const mockUser = {
|
|
475
|
+
id: 'user-1',
|
|
476
|
+
name: 'John Doe',
|
|
477
|
+
email: 'john@example.com',
|
|
478
|
+
settings: {
|
|
479
|
+
timezone: 'UTC',
|
|
480
|
+
},
|
|
481
|
+
};
|
|
482
|
+
|
|
483
|
+
it('renders with user data', () => {
|
|
484
|
+
render(<ProfileForm user={mockUser} />);
|
|
485
|
+
|
|
486
|
+
expect(screen.getByDisplayValue('John Doe')).toBeInTheDocument();
|
|
487
|
+
expect(screen.getByDisplayValue('UTC')).toBeInTheDocument();
|
|
488
|
+
});
|
|
489
|
+
|
|
490
|
+
it('validates required fields', async () => {
|
|
491
|
+
render(<ProfileForm user={mockUser} />);
|
|
492
|
+
|
|
493
|
+
const nameInput = screen.getByLabelText(/name/i);
|
|
494
|
+
await userEvent.clear(nameInput);
|
|
495
|
+
await userEvent.click(screen.getByRole('button', { name: /save/i }));
|
|
496
|
+
|
|
497
|
+
expect(screen.getByText(/name is required/i)).toBeInTheDocument();
|
|
498
|
+
});
|
|
499
|
+
});
|
|
500
|
+
```
|
|
501
|
+
|
|
502
|
+
### E2E Tests
|
|
503
|
+
|
|
504
|
+
```typescript
|
|
505
|
+
// e2e/settings.spec.ts
|
|
506
|
+
import { test, expect } from '@playwright/test';
|
|
507
|
+
|
|
508
|
+
test.describe('Settings Page', () => {
|
|
509
|
+
test.beforeEach(async ({ page }) => {
|
|
510
|
+
// Login before each test
|
|
511
|
+
await page.goto('/login');
|
|
512
|
+
await page.fill('[name="email"]', 'test@example.com');
|
|
513
|
+
await page.fill('[name="password"]', 'password123');
|
|
514
|
+
await page.click('button[type="submit"]');
|
|
515
|
+
await page.waitForURL('/dashboard');
|
|
516
|
+
});
|
|
517
|
+
|
|
518
|
+
test('can update profile settings', async ({ page }) => {
|
|
519
|
+
await page.goto('/settings/profile');
|
|
520
|
+
|
|
521
|
+
await page.fill('[name="name"]', 'Updated Name');
|
|
522
|
+
await page.click('button:has-text("Save")');
|
|
523
|
+
|
|
524
|
+
await expect(page.locator('.toast')).toContainText('Settings saved');
|
|
525
|
+
});
|
|
526
|
+
|
|
527
|
+
test('can toggle notification preferences', async ({ page }) => {
|
|
528
|
+
await page.goto('/settings/notifications');
|
|
529
|
+
|
|
530
|
+
const emailToggle = page.locator('[name="emailNotifications"]');
|
|
531
|
+
await emailToggle.click();
|
|
532
|
+
await page.click('button:has-text("Save")');
|
|
533
|
+
|
|
534
|
+
await expect(page.locator('.toast')).toContainText('Settings saved');
|
|
535
|
+
});
|
|
536
|
+
});
|
|
537
|
+
```
|
|
538
|
+
|
|
539
|
+
**Test Results:**
|
|
540
|
+
```
|
|
541
|
+
✓ API tests: 12 passed
|
|
542
|
+
✓ Component tests: 8 passed
|
|
543
|
+
✓ E2E tests: 5 passed
|
|
544
|
+
Coverage: 87%
|
|
545
|
+
```
|
|
546
|
+
|
|
547
|
+
---
|
|
548
|
+
|
|
549
|
+
## Phase 7: Documentation
|
|
550
|
+
|
|
551
|
+
**AI:** Creating documentation for the settings feature.
|
|
552
|
+
|
|
553
|
+
### API Documentation
|
|
554
|
+
|
|
555
|
+
```markdown
|
|
556
|
+
## Settings API
|
|
557
|
+
|
|
558
|
+
### GET /api/settings
|
|
559
|
+
Returns the current user's settings.
|
|
560
|
+
|
|
561
|
+
**Response:**
|
|
562
|
+
- 200: Settings object
|
|
563
|
+
- 401: Unauthorized
|
|
564
|
+
|
|
565
|
+
### PATCH /api/settings
|
|
566
|
+
Updates user settings.
|
|
567
|
+
|
|
568
|
+
**Body:**
|
|
569
|
+
- type: "profile" | "notifications"
|
|
570
|
+
- ...fields based on type
|
|
571
|
+
|
|
572
|
+
**Response:**
|
|
573
|
+
- 200: Updated settings
|
|
574
|
+
- 400: Validation error
|
|
575
|
+
- 401: Unauthorized
|
|
576
|
+
```
|
|
577
|
+
|
|
578
|
+
---
|
|
579
|
+
|
|
580
|
+
## Phase 8: Deployment Preparation
|
|
581
|
+
|
|
582
|
+
**AI:** Pre-deployment checklist:
|
|
583
|
+
|
|
584
|
+
- [x] All tests passing
|
|
585
|
+
- [x] Database migration ready
|
|
586
|
+
- [x] Environment variables documented
|
|
587
|
+
- [x] No hardcoded secrets
|
|
588
|
+
- [x] Error handling complete
|
|
589
|
+
- [x] Loading states implemented
|
|
590
|
+
- [x] Mobile responsive
|
|
591
|
+
|
|
592
|
+
**Ready for deployment.**
|
|
593
|
+
|
|
594
|
+
---
|
|
595
|
+
|
|
596
|
+
## Summary
|
|
597
|
+
|
|
598
|
+
**Feature Complete:** User Settings Page with API
|
|
599
|
+
|
|
600
|
+
**Files Created:** 15
|
|
601
|
+
**Tests Added:** 25
|
|
602
|
+
**Coverage:** 87%
|
|
603
|
+
|
|
604
|
+
**PR Ready:** `feature/user-settings` → `main`
|