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,865 @@
|
|
|
1
|
+
# Learning System Implementation Guide
|
|
2
|
+
|
|
3
|
+
Technical guide for implementing and customizing the ProAgents learning system.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Architecture Overview
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
11
|
+
│ Learning System Architecture │
|
|
12
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
13
|
+
│ │
|
|
14
|
+
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
|
15
|
+
│ │ Events │───▶│ Collector │───▶│ Storage │ │
|
|
16
|
+
│ └─────────────┘ └─────────────┘ └─────────────┘ │
|
|
17
|
+
│ │ │ │
|
|
18
|
+
│ │ │ │
|
|
19
|
+
│ ▼ ▼ │
|
|
20
|
+
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
|
21
|
+
│ │ Analysis │◀───│ Adapter │◀───│ Loader │ │
|
|
22
|
+
│ └─────────────┘ └─────────────┘ └─────────────┘ │
|
|
23
|
+
│ │ │
|
|
24
|
+
│ │ │
|
|
25
|
+
│ ▼ │
|
|
26
|
+
│ ┌─────────────────────────────────────────────────────┐ │
|
|
27
|
+
│ │ Applied to AI Interactions │ │
|
|
28
|
+
│ └─────────────────────────────────────────────────────┘ │
|
|
29
|
+
│ │
|
|
30
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Core Components
|
|
36
|
+
|
|
37
|
+
### 1. Event Collector
|
|
38
|
+
|
|
39
|
+
Captures learning events from user interactions.
|
|
40
|
+
|
|
41
|
+
```typescript
|
|
42
|
+
// learning/collector.ts
|
|
43
|
+
|
|
44
|
+
interface LearningEvent {
|
|
45
|
+
type: EventType;
|
|
46
|
+
timestamp: string;
|
|
47
|
+
sessionId: string;
|
|
48
|
+
data: Record<string, unknown>;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
type EventType =
|
|
52
|
+
| 'checkpoint_skipped'
|
|
53
|
+
| 'checkpoint_reviewed'
|
|
54
|
+
| 'output_modified'
|
|
55
|
+
| 'correction_made'
|
|
56
|
+
| 'feature_completed'
|
|
57
|
+
| 'phase_duration'
|
|
58
|
+
| 'explicit_feedback';
|
|
59
|
+
|
|
60
|
+
class LearningCollector {
|
|
61
|
+
private events: LearningEvent[] = [];
|
|
62
|
+
private sessionId: string;
|
|
63
|
+
private flushInterval: NodeJS.Timer;
|
|
64
|
+
|
|
65
|
+
constructor(sessionId: string) {
|
|
66
|
+
this.sessionId = sessionId;
|
|
67
|
+
// Flush events every 30 seconds
|
|
68
|
+
this.flushInterval = setInterval(() => this.flush(), 30000);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
track(type: EventType, data: Record<string, unknown>): void {
|
|
72
|
+
this.events.push({
|
|
73
|
+
type,
|
|
74
|
+
timestamp: new Date().toISOString(),
|
|
75
|
+
sessionId: this.sessionId,
|
|
76
|
+
data,
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
// Flush if buffer is large
|
|
80
|
+
if (this.events.length >= 50) {
|
|
81
|
+
this.flush();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
async flush(): Promise<void> {
|
|
86
|
+
if (this.events.length === 0) return;
|
|
87
|
+
|
|
88
|
+
const eventsToFlush = [...this.events];
|
|
89
|
+
this.events = [];
|
|
90
|
+
|
|
91
|
+
await learningStorage.appendEvents(eventsToFlush);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
destroy(): void {
|
|
95
|
+
clearInterval(this.flushInterval);
|
|
96
|
+
this.flush();
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Singleton instance
|
|
101
|
+
export const collector = new LearningCollector(generateSessionId());
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### 2. Learning Storage
|
|
105
|
+
|
|
106
|
+
Persists learned data to the file system.
|
|
107
|
+
|
|
108
|
+
```typescript
|
|
109
|
+
// learning/storage.ts
|
|
110
|
+
|
|
111
|
+
import * as fs from 'fs/promises';
|
|
112
|
+
import * as path from 'path';
|
|
113
|
+
|
|
114
|
+
interface StorageConfig {
|
|
115
|
+
basePath: string;
|
|
116
|
+
projectHash: string;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
class LearningStorage {
|
|
120
|
+
private basePath: string;
|
|
121
|
+
private projectHash: string;
|
|
122
|
+
|
|
123
|
+
constructor(config: StorageConfig) {
|
|
124
|
+
this.basePath = config.basePath;
|
|
125
|
+
this.projectHash = config.projectHash;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
private get globalPath(): string {
|
|
129
|
+
return path.join(this.basePath, '.learning', 'global');
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
private get projectPath(): string {
|
|
133
|
+
return path.join(
|
|
134
|
+
this.basePath,
|
|
135
|
+
'.learning',
|
|
136
|
+
'projects',
|
|
137
|
+
this.projectHash
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
async initialize(): Promise<void> {
|
|
142
|
+
await fs.mkdir(this.globalPath, { recursive: true });
|
|
143
|
+
await fs.mkdir(this.projectPath, { recursive: true });
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Preferences (global)
|
|
147
|
+
async loadPreferences(): Promise<UserPreferences> {
|
|
148
|
+
const filePath = path.join(this.globalPath, 'preferences.json');
|
|
149
|
+
try {
|
|
150
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
151
|
+
return JSON.parse(content);
|
|
152
|
+
} catch {
|
|
153
|
+
return getDefaultPreferences();
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
async savePreferences(prefs: UserPreferences): Promise<void> {
|
|
158
|
+
const filePath = path.join(this.globalPath, 'preferences.json');
|
|
159
|
+
await fs.writeFile(filePath, JSON.stringify(prefs, null, 2));
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// Patterns (project-specific)
|
|
163
|
+
async loadPatterns(): Promise<ProjectPatterns> {
|
|
164
|
+
const filePath = path.join(this.projectPath, 'patterns.json');
|
|
165
|
+
try {
|
|
166
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
167
|
+
return JSON.parse(content);
|
|
168
|
+
} catch {
|
|
169
|
+
return getDefaultPatterns();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
async savePatterns(patterns: ProjectPatterns): Promise<void> {
|
|
174
|
+
const filePath = path.join(this.projectPath, 'patterns.json');
|
|
175
|
+
await fs.writeFile(filePath, JSON.stringify(patterns, null, 2));
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// Corrections (project-specific)
|
|
179
|
+
async loadCorrections(): Promise<Correction[]> {
|
|
180
|
+
const filePath = path.join(this.projectPath, 'corrections.json');
|
|
181
|
+
try {
|
|
182
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
183
|
+
return JSON.parse(content);
|
|
184
|
+
} catch {
|
|
185
|
+
return [];
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
async appendCorrection(correction: Correction): Promise<void> {
|
|
190
|
+
const corrections = await this.loadCorrections();
|
|
191
|
+
corrections.push(correction);
|
|
192
|
+
const filePath = path.join(this.projectPath, 'corrections.json');
|
|
193
|
+
await fs.writeFile(filePath, JSON.stringify(corrections, null, 2));
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// Events (raw data for analysis)
|
|
197
|
+
async appendEvents(events: LearningEvent[]): Promise<void> {
|
|
198
|
+
const filePath = path.join(this.projectPath, 'events.jsonl');
|
|
199
|
+
const lines = events.map((e) => JSON.stringify(e)).join('\n') + '\n';
|
|
200
|
+
await fs.appendFile(filePath, lines);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
export const learningStorage = new LearningStorage({
|
|
205
|
+
basePath: process.env.PROAGENTS_PATH || process.cwd(),
|
|
206
|
+
projectHash: getProjectHash(),
|
|
207
|
+
});
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### 3. Pattern Analyzer
|
|
211
|
+
|
|
212
|
+
Extracts patterns from collected events.
|
|
213
|
+
|
|
214
|
+
```typescript
|
|
215
|
+
// learning/analyzer.ts
|
|
216
|
+
|
|
217
|
+
interface PatternAnalysis {
|
|
218
|
+
codePatterns: CodePattern[];
|
|
219
|
+
checkpointPreferences: CheckpointPreference[];
|
|
220
|
+
corrections: CorrectionPattern[];
|
|
221
|
+
metrics: PhaseMetrics;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
class PatternAnalyzer {
|
|
225
|
+
async analyze(events: LearningEvent[]): Promise<PatternAnalysis> {
|
|
226
|
+
return {
|
|
227
|
+
codePatterns: this.extractCodePatterns(events),
|
|
228
|
+
checkpointPreferences: this.extractCheckpointPreferences(events),
|
|
229
|
+
corrections: this.extractCorrectionPatterns(events),
|
|
230
|
+
metrics: this.calculateMetrics(events),
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
private extractCodePatterns(events: LearningEvent[]): CodePattern[] {
|
|
235
|
+
const patterns: CodePattern[] = [];
|
|
236
|
+
|
|
237
|
+
// Group modifications by category
|
|
238
|
+
const modifications = events
|
|
239
|
+
.filter((e) => e.type === 'output_modified')
|
|
240
|
+
.map((e) => e.data as OutputModification);
|
|
241
|
+
|
|
242
|
+
// Naming convention patterns
|
|
243
|
+
const namingChanges = modifications.filter((m) =>
|
|
244
|
+
m.category === 'naming'
|
|
245
|
+
);
|
|
246
|
+
if (namingChanges.length >= 3) {
|
|
247
|
+
const commonPattern = findCommonPattern(namingChanges);
|
|
248
|
+
if (commonPattern) {
|
|
249
|
+
patterns.push({
|
|
250
|
+
type: 'naming',
|
|
251
|
+
pattern: commonPattern,
|
|
252
|
+
confidence: namingChanges.length / modifications.length,
|
|
253
|
+
examples: namingChanges.slice(0, 3),
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// Import ordering patterns
|
|
259
|
+
const importChanges = modifications.filter((m) =>
|
|
260
|
+
m.category === 'imports'
|
|
261
|
+
);
|
|
262
|
+
if (importChanges.length >= 3) {
|
|
263
|
+
patterns.push({
|
|
264
|
+
type: 'imports',
|
|
265
|
+
pattern: extractImportOrder(importChanges),
|
|
266
|
+
confidence: 0.8,
|
|
267
|
+
examples: importChanges.slice(0, 3),
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
return patterns;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
private extractCheckpointPreferences(
|
|
275
|
+
events: LearningEvent[]
|
|
276
|
+
): CheckpointPreference[] {
|
|
277
|
+
const preferences: CheckpointPreference[] = [];
|
|
278
|
+
|
|
279
|
+
const checkpointEvents = events.filter(
|
|
280
|
+
(e) =>
|
|
281
|
+
e.type === 'checkpoint_skipped' ||
|
|
282
|
+
e.type === 'checkpoint_reviewed'
|
|
283
|
+
);
|
|
284
|
+
|
|
285
|
+
// Group by checkpoint name
|
|
286
|
+
const grouped = groupBy(checkpointEvents, (e) =>
|
|
287
|
+
e.data.checkpoint as string
|
|
288
|
+
);
|
|
289
|
+
|
|
290
|
+
for (const [checkpoint, events] of Object.entries(grouped)) {
|
|
291
|
+
const skipped = events.filter(
|
|
292
|
+
(e) => e.type === 'checkpoint_skipped'
|
|
293
|
+
).length;
|
|
294
|
+
const reviewed = events.filter(
|
|
295
|
+
(e) => e.type === 'checkpoint_reviewed'
|
|
296
|
+
).length;
|
|
297
|
+
const total = skipped + reviewed;
|
|
298
|
+
|
|
299
|
+
if (total >= 3) {
|
|
300
|
+
preferences.push({
|
|
301
|
+
checkpoint,
|
|
302
|
+
skipRate: skipped / total,
|
|
303
|
+
sampleSize: total,
|
|
304
|
+
recommendation:
|
|
305
|
+
skipped / total > 0.8
|
|
306
|
+
? 'auto_skip'
|
|
307
|
+
: skipped / total < 0.2
|
|
308
|
+
? 'always_review'
|
|
309
|
+
: 'ask',
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
return preferences;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
private extractCorrectionPatterns(
|
|
318
|
+
events: LearningEvent[]
|
|
319
|
+
): CorrectionPattern[] {
|
|
320
|
+
const corrections = events
|
|
321
|
+
.filter((e) => e.type === 'correction_made')
|
|
322
|
+
.map((e) => e.data as Correction);
|
|
323
|
+
|
|
324
|
+
// Group similar corrections
|
|
325
|
+
const grouped = groupSimilarCorrections(corrections);
|
|
326
|
+
|
|
327
|
+
return grouped
|
|
328
|
+
.filter((g) => g.count >= 3) // Only patterns seen 3+ times
|
|
329
|
+
.map((g) => ({
|
|
330
|
+
originalPattern: g.pattern,
|
|
331
|
+
correctedPattern: g.correction,
|
|
332
|
+
count: g.count,
|
|
333
|
+
autoApply: g.count >= 5, // Auto-apply after 5 occurrences
|
|
334
|
+
}));
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
private calculateMetrics(events: LearningEvent[]): PhaseMetrics {
|
|
338
|
+
const durations = events
|
|
339
|
+
.filter((e) => e.type === 'phase_duration')
|
|
340
|
+
.map((e) => e.data as PhaseDuration);
|
|
341
|
+
|
|
342
|
+
const byPhase = groupBy(durations, (d) => d.phase);
|
|
343
|
+
const metrics: PhaseMetrics = {};
|
|
344
|
+
|
|
345
|
+
for (const [phase, phaseDurations] of Object.entries(byPhase)) {
|
|
346
|
+
const times = phaseDurations.map((d) => d.durationMs);
|
|
347
|
+
metrics[phase] = {
|
|
348
|
+
average: average(times),
|
|
349
|
+
median: median(times),
|
|
350
|
+
min: Math.min(...times),
|
|
351
|
+
max: Math.max(...times),
|
|
352
|
+
sampleSize: times.length,
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
return metrics;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
export const analyzer = new PatternAnalyzer();
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
### 4. Learning Adapter
|
|
364
|
+
|
|
365
|
+
Applies learned patterns to AI interactions.
|
|
366
|
+
|
|
367
|
+
```typescript
|
|
368
|
+
// learning/adapter.ts
|
|
369
|
+
|
|
370
|
+
interface AdaptedContext {
|
|
371
|
+
skipCheckpoints: string[];
|
|
372
|
+
autoCorrections: CorrectionPattern[];
|
|
373
|
+
suggestedPatterns: CodePattern[];
|
|
374
|
+
projectInsights: string[];
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
class LearningAdapter {
|
|
378
|
+
private storage: LearningStorage;
|
|
379
|
+
private cachedContext: AdaptedContext | null = null;
|
|
380
|
+
|
|
381
|
+
constructor(storage: LearningStorage) {
|
|
382
|
+
this.storage = storage;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
async getAdaptedContext(): Promise<AdaptedContext> {
|
|
386
|
+
if (this.cachedContext) {
|
|
387
|
+
return this.cachedContext;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
const [preferences, patterns, corrections] = await Promise.all([
|
|
391
|
+
this.storage.loadPreferences(),
|
|
392
|
+
this.storage.loadPatterns(),
|
|
393
|
+
this.storage.loadCorrections(),
|
|
394
|
+
]);
|
|
395
|
+
|
|
396
|
+
this.cachedContext = {
|
|
397
|
+
skipCheckpoints: this.determineSkipCheckpoints(preferences),
|
|
398
|
+
autoCorrections: this.getAutoCorrections(corrections),
|
|
399
|
+
suggestedPatterns: this.getSuggestedPatterns(patterns),
|
|
400
|
+
projectInsights: this.generateInsights(patterns),
|
|
401
|
+
};
|
|
402
|
+
|
|
403
|
+
return this.cachedContext;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
private determineSkipCheckpoints(prefs: UserPreferences): string[] {
|
|
407
|
+
return Object.entries(prefs.checkpoints)
|
|
408
|
+
.filter(([_, pref]) => pref.skipRate > 0.8 && pref.sampleSize >= 5)
|
|
409
|
+
.map(([checkpoint]) => checkpoint);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
private getAutoCorrections(corrections: Correction[]): CorrectionPattern[] {
|
|
413
|
+
// Group similar corrections and return those with 5+ occurrences
|
|
414
|
+
const grouped = groupSimilarCorrections(corrections);
|
|
415
|
+
return grouped
|
|
416
|
+
.filter((g) => g.count >= 5)
|
|
417
|
+
.map((g) => ({
|
|
418
|
+
originalPattern: g.pattern,
|
|
419
|
+
correctedPattern: g.correction,
|
|
420
|
+
count: g.count,
|
|
421
|
+
autoApply: true,
|
|
422
|
+
}));
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
private getSuggestedPatterns(patterns: ProjectPatterns): CodePattern[] {
|
|
426
|
+
return patterns.codePatterns.filter((p) => p.confidence >= 0.8);
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
private generateInsights(patterns: ProjectPatterns): string[] {
|
|
430
|
+
const insights: string[] = [];
|
|
431
|
+
|
|
432
|
+
// Naming convention insight
|
|
433
|
+
const namingPattern = patterns.codePatterns.find(
|
|
434
|
+
(p) => p.type === 'naming'
|
|
435
|
+
);
|
|
436
|
+
if (namingPattern) {
|
|
437
|
+
insights.push(
|
|
438
|
+
`Use ${namingPattern.pattern} for ${namingPattern.appliesTo}`
|
|
439
|
+
);
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
// State management insight
|
|
443
|
+
if (patterns.stateManagement) {
|
|
444
|
+
insights.push(
|
|
445
|
+
`Use ${patterns.stateManagement} for state management`
|
|
446
|
+
);
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
// API patterns
|
|
450
|
+
if (patterns.apiPatterns) {
|
|
451
|
+
insights.push(`Follow ${patterns.apiPatterns} for API calls`);
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
return insights;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
invalidateCache(): void {
|
|
458
|
+
this.cachedContext = null;
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
export const adapter = new LearningAdapter(learningStorage);
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
---
|
|
466
|
+
|
|
467
|
+
## Integration Points
|
|
468
|
+
|
|
469
|
+
### 1. Checkpoint System Integration
|
|
470
|
+
|
|
471
|
+
```typescript
|
|
472
|
+
// workflow/checkpoint.ts
|
|
473
|
+
|
|
474
|
+
import { adapter } from '../learning/adapter';
|
|
475
|
+
|
|
476
|
+
async function shouldShowCheckpoint(
|
|
477
|
+
checkpointName: string
|
|
478
|
+
): Promise<boolean> {
|
|
479
|
+
const context = await adapter.getAdaptedContext();
|
|
480
|
+
|
|
481
|
+
// Skip if in auto-skip list
|
|
482
|
+
if (context.skipCheckpoints.includes(checkpointName)) {
|
|
483
|
+
console.log(`[Learning] Auto-skipping checkpoint: ${checkpointName}`);
|
|
484
|
+
return false;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
return true;
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
async function recordCheckpointDecision(
|
|
491
|
+
checkpointName: string,
|
|
492
|
+
skipped: boolean
|
|
493
|
+
): Promise<void> {
|
|
494
|
+
collector.track(
|
|
495
|
+
skipped ? 'checkpoint_skipped' : 'checkpoint_reviewed',
|
|
496
|
+
{ checkpoint: checkpointName }
|
|
497
|
+
);
|
|
498
|
+
}
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
### 2. Code Generation Integration
|
|
502
|
+
|
|
503
|
+
```typescript
|
|
504
|
+
// workflow/codegen.ts
|
|
505
|
+
|
|
506
|
+
import { adapter } from '../learning/adapter';
|
|
507
|
+
|
|
508
|
+
async function generateCode(request: CodeRequest): Promise<string> {
|
|
509
|
+
const context = await adapter.getAdaptedContext();
|
|
510
|
+
|
|
511
|
+
// Build enhanced prompt with learned patterns
|
|
512
|
+
const enhancedPrompt = buildPrompt(request, {
|
|
513
|
+
patterns: context.suggestedPatterns,
|
|
514
|
+
insights: context.projectInsights,
|
|
515
|
+
});
|
|
516
|
+
|
|
517
|
+
let code = await aiGenerate(enhancedPrompt);
|
|
518
|
+
|
|
519
|
+
// Apply auto-corrections
|
|
520
|
+
for (const correction of context.autoCorrections) {
|
|
521
|
+
code = applyCorrection(code, correction);
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
return code;
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
function buildPrompt(
|
|
528
|
+
request: CodeRequest,
|
|
529
|
+
context: { patterns: CodePattern[]; insights: string[] }
|
|
530
|
+
): string {
|
|
531
|
+
let prompt = request.basePrompt;
|
|
532
|
+
|
|
533
|
+
if (context.patterns.length > 0) {
|
|
534
|
+
prompt += '\n\nFollow these project patterns:\n';
|
|
535
|
+
for (const pattern of context.patterns) {
|
|
536
|
+
prompt += `- ${pattern.type}: ${pattern.pattern}\n`;
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
if (context.insights.length > 0) {
|
|
541
|
+
prompt += '\n\nProject conventions:\n';
|
|
542
|
+
for (const insight of context.insights) {
|
|
543
|
+
prompt += `- ${insight}\n`;
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
return prompt;
|
|
548
|
+
}
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
### 3. Output Modification Tracking
|
|
552
|
+
|
|
553
|
+
```typescript
|
|
554
|
+
// workflow/review.ts
|
|
555
|
+
|
|
556
|
+
import { collector } from '../learning/collector';
|
|
557
|
+
|
|
558
|
+
function trackModification(
|
|
559
|
+
original: string,
|
|
560
|
+
modified: string,
|
|
561
|
+
category: string
|
|
562
|
+
): void {
|
|
563
|
+
if (original === modified) return;
|
|
564
|
+
|
|
565
|
+
collector.track('output_modified', {
|
|
566
|
+
category,
|
|
567
|
+
original: original.slice(0, 200), // Truncate for privacy
|
|
568
|
+
modified: modified.slice(0, 200),
|
|
569
|
+
diff: generateDiff(original, modified),
|
|
570
|
+
});
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
// Called when user edits AI-generated code
|
|
574
|
+
function onCodeEdited(
|
|
575
|
+
originalCode: string,
|
|
576
|
+
editedCode: string,
|
|
577
|
+
filePath: string
|
|
578
|
+
): void {
|
|
579
|
+
const changes = detectChanges(originalCode, editedCode);
|
|
580
|
+
|
|
581
|
+
for (const change of changes) {
|
|
582
|
+
if (change.type === 'naming') {
|
|
583
|
+
trackModification(change.original, change.modified, 'naming');
|
|
584
|
+
} else if (change.type === 'formatting') {
|
|
585
|
+
trackModification(change.original, change.modified, 'formatting');
|
|
586
|
+
} else if (change.type === 'structure') {
|
|
587
|
+
trackModification(change.original, change.modified, 'structure');
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
```
|
|
592
|
+
|
|
593
|
+
---
|
|
594
|
+
|
|
595
|
+
## Data Schemas
|
|
596
|
+
|
|
597
|
+
### User Preferences Schema
|
|
598
|
+
|
|
599
|
+
```typescript
|
|
600
|
+
interface UserPreferences {
|
|
601
|
+
version: string;
|
|
602
|
+
checkpoints: Record<
|
|
603
|
+
string,
|
|
604
|
+
{
|
|
605
|
+
skipRate: number;
|
|
606
|
+
sampleSize: number;
|
|
607
|
+
lastUpdated: string;
|
|
608
|
+
}
|
|
609
|
+
>;
|
|
610
|
+
detailLevel: 'minimal' | 'moderate' | 'detailed';
|
|
611
|
+
commonCorrections: Array<{
|
|
612
|
+
pattern: string;
|
|
613
|
+
correction: string;
|
|
614
|
+
count: number;
|
|
615
|
+
}>;
|
|
616
|
+
}
|
|
617
|
+
```
|
|
618
|
+
|
|
619
|
+
### Project Patterns Schema
|
|
620
|
+
|
|
621
|
+
```typescript
|
|
622
|
+
interface ProjectPatterns {
|
|
623
|
+
version: string;
|
|
624
|
+
projectHash: string;
|
|
625
|
+
analyzedAt: string;
|
|
626
|
+
|
|
627
|
+
codePatterns: CodePattern[];
|
|
628
|
+
stateManagement?: string;
|
|
629
|
+
apiPatterns?: string;
|
|
630
|
+
testingPatterns?: string;
|
|
631
|
+
|
|
632
|
+
conventions: {
|
|
633
|
+
naming: Record<string, string>;
|
|
634
|
+
imports: string[];
|
|
635
|
+
formatting: Record<string, unknown>;
|
|
636
|
+
};
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
interface CodePattern {
|
|
640
|
+
type: 'naming' | 'imports' | 'structure' | 'style';
|
|
641
|
+
pattern: string;
|
|
642
|
+
appliesTo?: string;
|
|
643
|
+
confidence: number;
|
|
644
|
+
examples: unknown[];
|
|
645
|
+
learnedFrom: number; // Number of observations
|
|
646
|
+
}
|
|
647
|
+
```
|
|
648
|
+
|
|
649
|
+
### Correction Schema
|
|
650
|
+
|
|
651
|
+
```typescript
|
|
652
|
+
interface Correction {
|
|
653
|
+
id: string;
|
|
654
|
+
timestamp: string;
|
|
655
|
+
type: 'naming' | 'code' | 'structure' | 'other';
|
|
656
|
+
original: string;
|
|
657
|
+
corrected: string;
|
|
658
|
+
context?: string;
|
|
659
|
+
autoApply: boolean;
|
|
660
|
+
}
|
|
661
|
+
```
|
|
662
|
+
|
|
663
|
+
---
|
|
664
|
+
|
|
665
|
+
## CLI Commands
|
|
666
|
+
|
|
667
|
+
### Learning Management Commands
|
|
668
|
+
|
|
669
|
+
```typescript
|
|
670
|
+
// cli/commands/learning.ts
|
|
671
|
+
|
|
672
|
+
import { Command } from 'commander';
|
|
673
|
+
import { learningStorage, analyzer, adapter } from '../learning';
|
|
674
|
+
|
|
675
|
+
export const learningCommand = new Command('learning')
|
|
676
|
+
.description('Manage learning system');
|
|
677
|
+
|
|
678
|
+
learningCommand
|
|
679
|
+
.command('report')
|
|
680
|
+
.description('Show learning report')
|
|
681
|
+
.action(async () => {
|
|
682
|
+
const [prefs, patterns, corrections] = await Promise.all([
|
|
683
|
+
learningStorage.loadPreferences(),
|
|
684
|
+
learningStorage.loadPatterns(),
|
|
685
|
+
learningStorage.loadCorrections(),
|
|
686
|
+
]);
|
|
687
|
+
|
|
688
|
+
console.log('ProAgents Learning Report');
|
|
689
|
+
console.log('='.repeat(40));
|
|
690
|
+
console.log(`Patterns Learned: ${patterns.codePatterns.length}`);
|
|
691
|
+
console.log(`Auto-corrections: ${corrections.filter(c => c.autoApply).length}`);
|
|
692
|
+
console.log(`Checkpoint preferences: ${Object.keys(prefs.checkpoints).length}`);
|
|
693
|
+
console.log();
|
|
694
|
+
|
|
695
|
+
if (patterns.codePatterns.length > 0) {
|
|
696
|
+
console.log('Top Patterns:');
|
|
697
|
+
for (const p of patterns.codePatterns.slice(0, 5)) {
|
|
698
|
+
console.log(` - ${p.type}: ${p.pattern}`);
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
});
|
|
702
|
+
|
|
703
|
+
learningCommand
|
|
704
|
+
.command('reset')
|
|
705
|
+
.description('Reset learning data')
|
|
706
|
+
.option('--preferences', 'Reset only preferences')
|
|
707
|
+
.option('--patterns', 'Reset only patterns')
|
|
708
|
+
.option('--all', 'Reset everything')
|
|
709
|
+
.action(async (options) => {
|
|
710
|
+
if (options.all) {
|
|
711
|
+
await learningStorage.reset();
|
|
712
|
+
console.log('All learning data reset.');
|
|
713
|
+
} else if (options.preferences) {
|
|
714
|
+
await learningStorage.resetPreferences();
|
|
715
|
+
console.log('Preferences reset.');
|
|
716
|
+
} else if (options.patterns) {
|
|
717
|
+
await learningStorage.resetPatterns();
|
|
718
|
+
console.log('Patterns reset.');
|
|
719
|
+
}
|
|
720
|
+
adapter.invalidateCache();
|
|
721
|
+
});
|
|
722
|
+
|
|
723
|
+
learningCommand
|
|
724
|
+
.command('export')
|
|
725
|
+
.description('Export learning data')
|
|
726
|
+
.argument('<path>', 'Export path')
|
|
727
|
+
.action(async (exportPath) => {
|
|
728
|
+
const data = await learningStorage.exportAll();
|
|
729
|
+
await fs.writeFile(exportPath, JSON.stringify(data, null, 2));
|
|
730
|
+
console.log(`Exported to ${exportPath}`);
|
|
731
|
+
});
|
|
732
|
+
```
|
|
733
|
+
|
|
734
|
+
---
|
|
735
|
+
|
|
736
|
+
## Configuration Options
|
|
737
|
+
|
|
738
|
+
```yaml
|
|
739
|
+
# proagents.config.yaml
|
|
740
|
+
|
|
741
|
+
learning:
|
|
742
|
+
# Enable/disable learning
|
|
743
|
+
enabled: true
|
|
744
|
+
|
|
745
|
+
# What to track
|
|
746
|
+
tracking:
|
|
747
|
+
preferences: true
|
|
748
|
+
patterns: true
|
|
749
|
+
corrections: true
|
|
750
|
+
metrics: true
|
|
751
|
+
|
|
752
|
+
# Auto-apply settings
|
|
753
|
+
auto_apply:
|
|
754
|
+
corrections: true
|
|
755
|
+
corrections_threshold: 5 # Apply after this many occurrences
|
|
756
|
+
checkpoint_skip: true
|
|
757
|
+
checkpoint_skip_threshold: 0.8 # Skip if >80% skip rate
|
|
758
|
+
|
|
759
|
+
# Privacy settings
|
|
760
|
+
privacy:
|
|
761
|
+
truncate_code_samples: true
|
|
762
|
+
max_sample_length: 200
|
|
763
|
+
exclude_paths:
|
|
764
|
+
- "**/.env*"
|
|
765
|
+
- "**/secrets/**"
|
|
766
|
+
|
|
767
|
+
# Storage settings
|
|
768
|
+
storage:
|
|
769
|
+
max_events_file_size_mb: 10
|
|
770
|
+
archive_after_days: 30
|
|
771
|
+
retention_days: 90
|
|
772
|
+
```
|
|
773
|
+
|
|
774
|
+
---
|
|
775
|
+
|
|
776
|
+
## Testing the Learning System
|
|
777
|
+
|
|
778
|
+
```typescript
|
|
779
|
+
// learning/__tests__/analyzer.test.ts
|
|
780
|
+
|
|
781
|
+
describe('PatternAnalyzer', () => {
|
|
782
|
+
it('extracts naming patterns from modifications', async () => {
|
|
783
|
+
const events: LearningEvent[] = [
|
|
784
|
+
{ type: 'output_modified', data: { category: 'naming', original: 'getData', modified: 'fetchUserData' } },
|
|
785
|
+
{ type: 'output_modified', data: { category: 'naming', original: 'handleClick', modified: 'handleUserClick' } },
|
|
786
|
+
{ type: 'output_modified', data: { category: 'naming', original: 'process', modified: 'processUserInput' } },
|
|
787
|
+
];
|
|
788
|
+
|
|
789
|
+
const analysis = await analyzer.analyze(events);
|
|
790
|
+
|
|
791
|
+
expect(analysis.codePatterns).toContainEqual(
|
|
792
|
+
expect.objectContaining({
|
|
793
|
+
type: 'naming',
|
|
794
|
+
pattern: expect.stringContaining('descriptive'),
|
|
795
|
+
})
|
|
796
|
+
);
|
|
797
|
+
});
|
|
798
|
+
|
|
799
|
+
it('identifies checkpoint preferences', async () => {
|
|
800
|
+
const events: LearningEvent[] = [
|
|
801
|
+
{ type: 'checkpoint_skipped', data: { checkpoint: 'after_requirements' } },
|
|
802
|
+
{ type: 'checkpoint_skipped', data: { checkpoint: 'after_requirements' } },
|
|
803
|
+
{ type: 'checkpoint_skipped', data: { checkpoint: 'after_requirements' } },
|
|
804
|
+
{ type: 'checkpoint_reviewed', data: { checkpoint: 'after_design' } },
|
|
805
|
+
{ type: 'checkpoint_reviewed', data: { checkpoint: 'after_design' } },
|
|
806
|
+
{ type: 'checkpoint_reviewed', data: { checkpoint: 'after_design' } },
|
|
807
|
+
];
|
|
808
|
+
|
|
809
|
+
const analysis = await analyzer.analyze(events);
|
|
810
|
+
|
|
811
|
+
expect(analysis.checkpointPreferences).toContainEqual(
|
|
812
|
+
expect.objectContaining({
|
|
813
|
+
checkpoint: 'after_requirements',
|
|
814
|
+
recommendation: 'auto_skip',
|
|
815
|
+
})
|
|
816
|
+
);
|
|
817
|
+
});
|
|
818
|
+
});
|
|
819
|
+
```
|
|
820
|
+
|
|
821
|
+
---
|
|
822
|
+
|
|
823
|
+
## Extending the Learning System
|
|
824
|
+
|
|
825
|
+
### Adding Custom Learners
|
|
826
|
+
|
|
827
|
+
```typescript
|
|
828
|
+
// learning/custom/myLearner.ts
|
|
829
|
+
|
|
830
|
+
import { BaseLearner } from '../base';
|
|
831
|
+
|
|
832
|
+
export class CustomApiPatternLearner extends BaseLearner {
|
|
833
|
+
name = 'api-patterns';
|
|
834
|
+
|
|
835
|
+
async learn(events: LearningEvent[]): Promise<Pattern[]> {
|
|
836
|
+
// Filter relevant events
|
|
837
|
+
const apiEvents = events.filter((e) =>
|
|
838
|
+
e.data.filePath?.includes('/api/') ||
|
|
839
|
+
e.data.filePath?.includes('/services/')
|
|
840
|
+
);
|
|
841
|
+
|
|
842
|
+
// Extract patterns
|
|
843
|
+
return this.extractPatterns(apiEvents);
|
|
844
|
+
}
|
|
845
|
+
|
|
846
|
+
async apply(code: string, patterns: Pattern[]): Promise<string> {
|
|
847
|
+
// Apply learned API patterns
|
|
848
|
+
return this.applyPatterns(code, patterns);
|
|
849
|
+
}
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
// Register learner
|
|
853
|
+
learningSystem.registerLearner(new CustomApiPatternLearner());
|
|
854
|
+
```
|
|
855
|
+
|
|
856
|
+
---
|
|
857
|
+
|
|
858
|
+
## Best Practices
|
|
859
|
+
|
|
860
|
+
1. **Privacy First**: Never store sensitive data (credentials, personal info)
|
|
861
|
+
2. **Confidence Thresholds**: Only apply patterns with high confidence (>0.8)
|
|
862
|
+
3. **Sample Size Requirements**: Require minimum observations (3-5) before learning
|
|
863
|
+
4. **User Override**: Always allow users to override learned behavior
|
|
864
|
+
5. **Transparency**: Show users what has been learned via reports
|
|
865
|
+
6. **Graceful Degradation**: System works without learning data
|