aios-core 2.1.5 ā 2.2.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/.aios-core/core/README.md +229 -229
- package/.aios-core/core/data/agent-config-requirements.yaml +368 -368
- package/.aios-core/core/data/aios-kb.md +923 -923
- package/.aios-core/core/data/workflow-patterns.yaml +267 -267
- package/.aios-core/core/docs/SHARD-TRANSLATION-GUIDE.md +335 -335
- package/.aios-core/core/docs/component-creation-guide.md +457 -457
- package/.aios-core/core/docs/session-update-pattern.md +307 -307
- package/.aios-core/core/docs/template-syntax.md +266 -266
- package/.aios-core/core/docs/troubleshooting-guide.md +624 -624
- package/.aios-core/core/elicitation/elicitation-engine.js +1 -1
- package/.aios-core/core/index.esm.js +42 -42
- package/.aios-core/core/index.js +1 -1
- package/.aios-core/core/migration/migration-config.yaml +83 -83
- package/.aios-core/core/migration/module-mapping.yaml +89 -89
- package/.aios-core/core/quality-gates/layer2-pr-automation.js +1 -1
- package/.aios-core/core/quality-gates/quality-gate-config.yaml +86 -86
- package/.aios-core/core/registry/README.md +179 -179
- package/.aios-core/core/utils/security-utils.js +1 -1
- package/.aios-core/core-config.yaml +391 -382
- package/.aios-core/data/agent-config-requirements.yaml +368 -368
- package/.aios-core/data/aios-kb.md +923 -923
- package/.aios-core/data/technical-preferences.md +3 -3
- package/.aios-core/data/workflow-patterns.yaml +267 -267
- package/.aios-core/development/README.md +142 -142
- package/.aios-core/development/agent-teams/team-all.yaml +15 -15
- package/.aios-core/development/agent-teams/team-fullstack.yaml +18 -18
- package/.aios-core/development/agent-teams/team-ide-minimal.yaml +10 -10
- package/.aios-core/development/agent-teams/team-no-ui.yaml +13 -13
- package/.aios-core/development/agent-teams/team-qa-focused.yaml +155 -155
- package/.aios-core/development/agents/aios-master.md +339 -339
- package/.aios-core/development/agents/analyst.md +195 -195
- package/.aios-core/development/agents/architect.md +359 -359
- package/.aios-core/development/agents/data-engineer.md +468 -468
- package/.aios-core/development/agents/dev.md +390 -390
- package/.aios-core/development/agents/devops.md +398 -398
- package/.aios-core/development/agents/pm.md +198 -198
- package/.aios-core/development/agents/po.md +256 -256
- package/.aios-core/development/agents/qa.md +312 -312
- package/.aios-core/development/agents/sm.md +220 -220
- package/.aios-core/development/agents/ux-design-expert.md +451 -451
- package/.aios-core/development/scripts/greeting-config-cli.js +85 -85
- package/.aios-core/development/tasks/add-mcp.md +319 -319
- package/.aios-core/development/tasks/advanced-elicitation.md +318 -318
- package/.aios-core/development/tasks/analyst-facilitate-brainstorming.md +341 -341
- package/.aios-core/development/tasks/analyze-brownfield.md +456 -0
- package/.aios-core/development/tasks/analyze-framework.md +696 -696
- package/.aios-core/development/tasks/analyze-performance.md +637 -637
- package/.aios-core/development/tasks/apply-qa-fixes.md +340 -340
- package/.aios-core/development/tasks/architect-analyze-impact.md +826 -826
- package/.aios-core/development/tasks/audit-codebase.md +429 -429
- package/.aios-core/development/tasks/audit-tailwind-config.md +270 -270
- package/.aios-core/development/tasks/audit-utilities.md +358 -358
- package/.aios-core/development/tasks/bootstrap-shadcn-library.md +286 -286
- package/.aios-core/development/tasks/brownfield-create-epic.md +485 -485
- package/.aios-core/development/tasks/brownfield-create-story.md +356 -356
- package/.aios-core/development/tasks/build-component.md +478 -478
- package/.aios-core/development/tasks/calculate-roi.md +455 -455
- package/.aios-core/development/tasks/ci-cd-configuration.md +764 -764
- package/.aios-core/development/tasks/cleanup-utilities.md +670 -670
- package/.aios-core/development/tasks/collaborative-edit.md +1108 -1108
- package/.aios-core/development/tasks/compose-molecule.md +284 -284
- package/.aios-core/development/tasks/consolidate-patterns.md +414 -414
- package/.aios-core/development/tasks/correct-course.md +279 -279
- package/.aios-core/development/tasks/create-agent.md +321 -321
- package/.aios-core/development/tasks/create-brownfield-story.md +726 -726
- package/.aios-core/development/tasks/create-deep-research-prompt.md +498 -498
- package/.aios-core/development/tasks/create-doc.md +316 -316
- package/.aios-core/development/tasks/create-next-story.md +774 -774
- package/.aios-core/development/tasks/create-suite.md +283 -283
- package/.aios-core/development/tasks/create-task.md +371 -371
- package/.aios-core/development/tasks/create-workflow.md +370 -370
- package/.aios-core/development/tasks/db-analyze-hotpaths.md +572 -572
- package/.aios-core/development/tasks/db-apply-migration.md +381 -381
- package/.aios-core/development/tasks/db-bootstrap.md +642 -642
- package/.aios-core/development/tasks/db-domain-modeling.md +693 -693
- package/.aios-core/development/tasks/db-dry-run.md +293 -293
- package/.aios-core/development/tasks/db-env-check.md +260 -260
- package/.aios-core/development/tasks/db-expansion-pack-integration.md +663 -663
- package/.aios-core/development/tasks/db-explain.md +631 -631
- package/.aios-core/development/tasks/db-impersonate.md +495 -495
- package/.aios-core/development/tasks/db-load-csv.md +593 -593
- package/.aios-core/development/tasks/db-policy-apply.md +653 -653
- package/.aios-core/development/tasks/db-rls-audit.md +411 -411
- package/.aios-core/development/tasks/db-rollback.md +739 -739
- package/.aios-core/development/tasks/db-run-sql.md +613 -613
- package/.aios-core/development/tasks/db-schema-audit.md +1011 -1011
- package/.aios-core/development/tasks/db-seed.md +390 -390
- package/.aios-core/development/tasks/db-smoke-test.md +351 -351
- package/.aios-core/development/tasks/db-snapshot.md +569 -569
- package/.aios-core/development/tasks/db-supabase-setup.md +712 -712
- package/.aios-core/development/tasks/db-verify-order.md +515 -515
- package/.aios-core/development/tasks/deprecate-component.md +956 -956
- package/.aios-core/development/tasks/dev-apply-qa-fixes.md +318 -318
- package/.aios-core/development/tasks/dev-backlog-debt.md +469 -469
- package/.aios-core/development/tasks/dev-develop-story.md +846 -846
- package/.aios-core/development/tasks/dev-improve-code-quality.md +872 -872
- package/.aios-core/development/tasks/dev-optimize-performance.md +1033 -1033
- package/.aios-core/development/tasks/dev-suggest-refactoring.md +870 -870
- package/.aios-core/development/tasks/dev-validate-next-story.md +348 -348
- package/.aios-core/development/tasks/document-project.md +552 -552
- package/.aios-core/development/tasks/environment-bootstrap.md +1311 -1311
- package/.aios-core/development/tasks/execute-checklist.md +301 -301
- package/.aios-core/development/tasks/export-design-tokens-dtcg.md +274 -274
- package/.aios-core/development/tasks/extend-pattern.md +269 -269
- package/.aios-core/development/tasks/extract-tokens.md +467 -467
- package/.aios-core/development/tasks/facilitate-brainstorming-session.md +518 -518
- package/.aios-core/development/tasks/generate-ai-frontend-prompt.md +260 -260
- package/.aios-core/development/tasks/generate-documentation.md +284 -284
- package/.aios-core/development/tasks/generate-migration-strategy.md +522 -522
- package/.aios-core/development/tasks/generate-shock-report.md +501 -501
- package/.aios-core/development/tasks/github-devops-github-pr-automation.md +427 -427
- package/.aios-core/development/tasks/github-devops-pre-push-quality-gate.md +733 -733
- package/.aios-core/development/tasks/github-devops-repository-cleanup.md +374 -374
- package/.aios-core/development/tasks/github-devops-version-management.md +483 -483
- package/.aios-core/development/tasks/improve-self.md +822 -822
- package/.aios-core/development/tasks/index-docs.md +387 -387
- package/.aios-core/development/tasks/init-project-status.md +506 -506
- package/.aios-core/development/tasks/integrate-expansion-pack.md +314 -314
- package/.aios-core/development/tasks/kb-mode-interaction.md +283 -283
- package/.aios-core/development/tasks/learn-patterns.md +900 -900
- package/.aios-core/development/tasks/mcp-workflow.md +437 -437
- package/.aios-core/development/tasks/modify-agent.md +381 -381
- package/.aios-core/development/tasks/modify-task.md +424 -424
- package/.aios-core/development/tasks/modify-workflow.md +465 -465
- package/.aios-core/development/tasks/po-backlog-add.md +370 -370
- package/.aios-core/development/tasks/po-manage-story-backlog.md +523 -523
- package/.aios-core/development/tasks/po-pull-story-from-clickup.md +540 -540
- package/.aios-core/development/tasks/po-pull-story.md +316 -316
- package/.aios-core/development/tasks/po-stories-index.md +351 -351
- package/.aios-core/development/tasks/po-sync-story-to-clickup.md +457 -457
- package/.aios-core/development/tasks/po-sync-story.md +303 -303
- package/.aios-core/development/tasks/pr-automation.md +701 -701
- package/.aios-core/development/tasks/propose-modification.md +842 -842
- package/.aios-core/development/tasks/qa-backlog-add-followup.md +425 -425
- package/.aios-core/development/tasks/qa-gate.md +373 -373
- package/.aios-core/development/tasks/qa-generate-tests.md +1174 -1174
- package/.aios-core/development/tasks/qa-nfr-assess.md +557 -557
- package/.aios-core/development/tasks/qa-review-proposal.md +1157 -1157
- package/.aios-core/development/tasks/qa-review-story.md +682 -682
- package/.aios-core/development/tasks/qa-risk-profile.md +566 -566
- package/.aios-core/development/tasks/qa-run-tests.md +277 -277
- package/.aios-core/development/tasks/qa-test-design.md +387 -387
- package/.aios-core/development/tasks/qa-trace-requirements.md +476 -476
- package/.aios-core/development/tasks/release-management.md +723 -723
- package/.aios-core/development/tasks/security-audit.md +554 -554
- package/.aios-core/development/tasks/security-scan.md +790 -790
- package/.aios-core/development/tasks/setup-database.md +741 -741
- package/.aios-core/development/tasks/setup-design-system.md +462 -462
- package/.aios-core/development/tasks/setup-github.md +874 -874
- package/.aios-core/development/tasks/setup-llm-routing.md +1 -1
- package/.aios-core/development/tasks/setup-mcp-docker.md +584 -584
- package/.aios-core/development/tasks/setup-project-docs.md +440 -0
- package/.aios-core/development/tasks/shard-doc.md +537 -537
- package/.aios-core/development/tasks/sm-create-next-story.md +480 -480
- package/.aios-core/development/tasks/sync-documentation.md +864 -864
- package/.aios-core/development/tasks/tailwind-upgrade.md +294 -294
- package/.aios-core/development/tasks/test-as-user.md +621 -621
- package/.aios-core/development/tasks/test-validation-task.md +171 -171
- package/.aios-core/development/tasks/undo-last.md +346 -346
- package/.aios-core/development/tasks/update-manifest.md +409 -409
- package/.aios-core/development/tasks/ux-create-wireframe.md +617 -617
- package/.aios-core/development/tasks/ux-ds-scan-artifact.md +672 -672
- package/.aios-core/development/tasks/ux-user-research.md +559 -559
- package/.aios-core/development/tasks/validate-next-story.md +422 -422
- package/.aios-core/development/workflows/README.md +83 -83
- package/.aios-core/development/workflows/brownfield-fullstack.yaml +297 -297
- package/.aios-core/development/workflows/brownfield-service.yaml +187 -187
- package/.aios-core/development/workflows/brownfield-ui.yaml +197 -197
- package/.aios-core/development/workflows/greenfield-fullstack.yaml +333 -333
- package/.aios-core/development/workflows/greenfield-service.yaml +206 -206
- package/.aios-core/development/workflows/greenfield-ui.yaml +235 -235
- package/.aios-core/docs/SHARD-TRANSLATION-GUIDE.md +335 -335
- package/.aios-core/docs/component-creation-guide.md +457 -457
- package/.aios-core/docs/session-update-pattern.md +307 -307
- package/.aios-core/docs/standards/AGENT-PERSONALIZATION-STANDARD-V1.md +572 -572
- package/.aios-core/docs/standards/AIOS-COLOR-PALETTE-QUICK-REFERENCE.md +185 -185
- package/.aios-core/docs/standards/AIOS-COLOR-PALETTE-V2.1.md +354 -354
- package/.aios-core/docs/standards/AIOS-FRAMEWORK-MASTER.md +1963 -1963
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-COMPLETE.md +821 -821
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1-SUMMARY.md +1190 -1190
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.1.md +439 -439
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO-V2.2-SUMMARY.md +1339 -1339
- package/.aios-core/docs/standards/AIOS-LIVRO-DE-OURO.md +5398 -5398
- package/.aios-core/docs/standards/EXECUTOR-DECISION-TREE.md +697 -697
- package/.aios-core/docs/standards/OPEN-SOURCE-VS-SERVICE-DIFFERENCES.md +511 -511
- package/.aios-core/docs/standards/QUALITY-GATES-SPECIFICATION.md +556 -556
- package/.aios-core/docs/standards/STANDARDS-INDEX.md +210 -210
- package/.aios-core/docs/standards/STORY-TEMPLATE-V2-SPECIFICATION.md +550 -550
- package/.aios-core/docs/standards/TASK-FORMAT-SPECIFICATION-V1.md +1414 -1414
- package/.aios-core/docs/standards/V3-ARCHITECTURAL-DECISIONS.md +523 -523
- package/.aios-core/docs/template-syntax.md +266 -266
- package/.aios-core/docs/troubleshooting-guide.md +624 -624
- package/.aios-core/index.esm.js +15 -15
- package/.aios-core/index.js +1 -1
- package/.aios-core/infrastructure/README.md +126 -126
- package/.aios-core/infrastructure/integrations/pm-adapters/README.md +59 -59
- package/.aios-core/infrastructure/scripts/approval-workflow.js +1 -1
- package/.aios-core/infrastructure/scripts/batch-creator.js +1 -1
- package/.aios-core/infrastructure/scripts/component-generator.js +3 -3
- package/.aios-core/infrastructure/scripts/component-metadata.js +1 -1
- package/.aios-core/infrastructure/scripts/component-search.js +1 -1
- package/.aios-core/infrastructure/scripts/coverage-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/dependency-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/dependency-impact-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/documentation-integrity/brownfield-analyzer.js +501 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/config-generator.js +368 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/deployment-config-loader.js +308 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/doc-generator.js +331 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/gitignore-generator.js +312 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/index.js +74 -0
- package/.aios-core/infrastructure/scripts/documentation-integrity/mode-detector.js +389 -0
- package/.aios-core/infrastructure/scripts/framework-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/improvement-engine.js +1 -1
- package/.aios-core/infrastructure/scripts/llm-routing/install-llm-routing.js +26 -13
- package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-free-tracked.cmd +127 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/claude-free-tracked.sh +108 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-proxy.cmd +71 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-proxy.sh +65 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-usage.cmd +51 -0
- package/.aios-core/infrastructure/scripts/llm-routing/templates/deepseek-usage.sh +16 -0
- package/.aios-core/infrastructure/scripts/llm-routing/usage-tracker/index.js +549 -0
- package/.aios-core/infrastructure/scripts/modification-risk-assessment.js +1 -1
- package/.aios-core/infrastructure/scripts/performance-analyzer.js +1 -1
- package/.aios-core/infrastructure/scripts/pm-adapter.js +134 -134
- package/.aios-core/infrastructure/scripts/repository-detector.js +3 -3
- package/.aios-core/infrastructure/scripts/template-engine.js +1 -1
- package/.aios-core/infrastructure/scripts/template-validator.js +1 -1
- package/.aios-core/infrastructure/scripts/test-generator.js +1 -1
- package/.aios-core/infrastructure/scripts/test-quality-assessment.js +1 -1
- package/.aios-core/infrastructure/scripts/transaction-manager.js +1 -1
- package/.aios-core/infrastructure/scripts/usage-analytics.js +1 -1
- package/.aios-core/infrastructure/scripts/visual-impact-generator.js +2 -2
- package/.aios-core/infrastructure/templates/core-config/core-config-brownfield.tmpl.yaml +176 -0
- package/.aios-core/infrastructure/templates/core-config/core-config-greenfield.tmpl.yaml +127 -0
- package/.aios-core/infrastructure/templates/github-workflows/README.md +109 -109
- package/.aios-core/infrastructure/templates/gitignore/gitignore-aios-base.tmpl +63 -0
- package/.aios-core/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +18 -0
- package/.aios-core/infrastructure/templates/gitignore/gitignore-node.tmpl +85 -0
- package/.aios-core/infrastructure/templates/gitignore/gitignore-python.tmpl +145 -0
- package/.aios-core/infrastructure/templates/project-docs/coding-standards-tmpl.md +346 -0
- package/.aios-core/infrastructure/templates/project-docs/source-tree-tmpl.md +177 -0
- package/.aios-core/infrastructure/templates/project-docs/tech-stack-tmpl.md +267 -0
- package/.aios-core/infrastructure/tests/regression-suite-v2.md +621 -621
- package/.aios-core/infrastructure/tools/README.md +222 -222
- package/.aios-core/infrastructure/tools/cli/github-cli.yaml +200 -200
- package/.aios-core/infrastructure/tools/cli/railway-cli.yaml +260 -260
- package/.aios-core/infrastructure/tools/cli/supabase-cli.yaml +224 -224
- package/.aios-core/infrastructure/tools/local/ffmpeg.yaml +261 -261
- package/.aios-core/infrastructure/tools/mcp/21st-dev-magic.yaml +127 -127
- package/.aios-core/infrastructure/tools/mcp/browser.yaml +103 -103
- package/.aios-core/infrastructure/tools/mcp/clickup.yaml +534 -534
- package/.aios-core/infrastructure/tools/mcp/context7.yaml +78 -78
- package/.aios-core/infrastructure/tools/mcp/desktop-commander.yaml +180 -180
- package/.aios-core/infrastructure/tools/mcp/exa.yaml +103 -103
- package/.aios-core/infrastructure/tools/mcp/google-workspace.yaml +930 -930
- package/.aios-core/infrastructure/tools/mcp/n8n.yaml +551 -551
- package/.aios-core/infrastructure/tools/mcp/supabase.yaml +808 -808
- package/.aios-core/install-manifest.yaml +347 -347
- package/.aios-core/product/README.md +56 -56
- package/.aios-core/product/checklists/accessibility-wcag-checklist.md +80 -0
- package/.aios-core/product/checklists/architect-checklist.md +443 -443
- package/.aios-core/product/checklists/change-checklist.md +182 -182
- package/.aios-core/product/checklists/component-quality-checklist.md +74 -0
- package/.aios-core/product/checklists/database-design-checklist.md +119 -119
- package/.aios-core/product/checklists/dba-predeploy-checklist.md +97 -97
- package/.aios-core/product/checklists/dba-rollback-checklist.md +99 -99
- package/.aios-core/product/checklists/migration-readiness-checklist.md +75 -0
- package/.aios-core/product/checklists/pattern-audit-checklist.md +88 -0
- package/.aios-core/product/checklists/pm-checklist.md +375 -375
- package/.aios-core/product/checklists/po-master-checklist.md +441 -441
- package/.aios-core/product/checklists/pre-push-checklist.md +108 -108
- package/.aios-core/product/checklists/release-checklist.md +122 -122
- package/.aios-core/product/checklists/story-dod-checklist.md +101 -101
- package/.aios-core/product/checklists/story-draft-checklist.md +215 -215
- package/.aios-core/product/data/atomic-design-principles.md +108 -0
- package/.aios-core/product/data/brainstorming-techniques.md +36 -36
- package/.aios-core/product/data/consolidation-algorithms.md +142 -0
- package/.aios-core/product/data/database-best-practices.md +182 -0
- package/.aios-core/product/data/design-token-best-practices.md +107 -0
- package/.aios-core/product/data/elicitation-methods.md +134 -134
- package/.aios-core/product/data/integration-patterns.md +207 -0
- package/.aios-core/product/data/migration-safety-guide.md +329 -0
- package/.aios-core/product/data/mode-selection-best-practices.md +471 -471
- package/.aios-core/product/data/postgres-tuning-guide.md +300 -0
- package/.aios-core/product/data/rls-security-patterns.md +333 -0
- package/.aios-core/product/data/roi-calculation-guide.md +142 -0
- package/.aios-core/product/data/supabase-patterns.md +330 -0
- package/.aios-core/product/data/test-levels-framework.md +148 -148
- package/.aios-core/product/data/test-priorities-matrix.md +174 -174
- package/.aios-core/product/data/wcag-compliance-guide.md +267 -0
- package/.aios-core/product/templates/1mcp-config.yaml +225 -225
- package/.aios-core/product/templates/activation-instructions-inline-greeting.yaml +63 -63
- package/.aios-core/product/templates/activation-instructions-template.md +258 -258
- package/.aios-core/product/templates/agent-template.yaml +120 -120
- package/.aios-core/product/templates/architecture-tmpl.yaml +650 -650
- package/.aios-core/product/templates/brainstorming-output-tmpl.yaml +155 -155
- package/.aios-core/product/templates/brownfield-architecture-tmpl.yaml +475 -475
- package/.aios-core/product/templates/brownfield-prd-tmpl.yaml +279 -279
- package/.aios-core/product/templates/changelog-template.md +134 -134
- package/.aios-core/product/templates/command-rationalization-matrix.md +152 -152
- package/.aios-core/product/templates/competitor-analysis-tmpl.yaml +292 -292
- package/.aios-core/product/templates/design-story-tmpl.yaml +587 -587
- package/.aios-core/product/templates/ds-artifact-analysis.md +70 -70
- package/.aios-core/product/templates/front-end-architecture-tmpl.yaml +205 -205
- package/.aios-core/product/templates/front-end-spec-tmpl.yaml +348 -348
- package/.aios-core/product/templates/fullstack-architecture-tmpl.yaml +804 -804
- package/.aios-core/product/templates/github-pr-template.md +67 -67
- package/.aios-core/product/templates/gordon-mcp.yaml +140 -140
- package/.aios-core/product/templates/ide-rules/antigravity-rules.md +115 -115
- package/.aios-core/product/templates/ide-rules/claude-rules.md +221 -221
- package/.aios-core/product/templates/ide-rules/cline-rules.md +84 -84
- package/.aios-core/product/templates/ide-rules/copilot-rules.md +92 -92
- package/.aios-core/product/templates/ide-rules/cursor-rules.md +115 -115
- package/.aios-core/product/templates/ide-rules/gemini-rules.md +85 -85
- package/.aios-core/product/templates/ide-rules/roo-rules.md +86 -86
- package/.aios-core/product/templates/ide-rules/trae-rules.md +104 -104
- package/.aios-core/product/templates/ide-rules/windsurf-rules.md +80 -80
- package/.aios-core/product/templates/index-strategy-tmpl.yaml +53 -53
- package/.aios-core/product/templates/market-research-tmpl.yaml +251 -251
- package/.aios-core/product/templates/mcp-workflow.js +271 -271
- package/.aios-core/product/templates/migration-plan-tmpl.yaml +1022 -1022
- package/.aios-core/product/templates/migration-strategy-tmpl.md +524 -524
- package/.aios-core/product/templates/personalized-agent-template.md +258 -258
- package/.aios-core/product/templates/personalized-checklist-template.md +340 -340
- package/.aios-core/product/templates/personalized-task-template-v2.md +905 -905
- package/.aios-core/product/templates/personalized-task-template.md +344 -344
- package/.aios-core/product/templates/personalized-template-file.yaml +322 -322
- package/.aios-core/product/templates/personalized-workflow-template.yaml +460 -460
- package/.aios-core/product/templates/prd-tmpl.yaml +201 -201
- package/.aios-core/product/templates/project-brief-tmpl.yaml +220 -220
- package/.aios-core/product/templates/qa-gate-tmpl.yaml +240 -240
- package/.aios-core/product/templates/rls-policies-tmpl.yaml +1203 -1203
- package/.aios-core/product/templates/schema-design-tmpl.yaml +428 -428
- package/.aios-core/product/templates/state-persistence-tmpl.yaml +219 -219
- package/.aios-core/product/templates/story-tmpl.yaml +331 -331
- package/.aios-core/product/templates/task-execution-report.md +495 -495
- package/.aios-core/product/templates/task-template.md +122 -122
- package/.aios-core/product/templates/token-exports-tailwind-tmpl.js +395 -395
- package/.aios-core/product/templates/tokens-schema-tmpl.yaml +305 -305
- package/.aios-core/product/templates/workflow-template.yaml +133 -133
- package/.aios-core/scripts/README.md +354 -354
- package/.aios-core/scripts/aios-doc-template.md +325 -325
- package/.aios-core/scripts/elicitation-engine.js +1 -1
- package/.aios-core/scripts/test-template-system.js +1 -1
- package/.aios-core/scripts/workflow-management.md +69 -69
- package/.aios-core/user-guide.md +1413 -1413
- package/.aios-core/working-in-the-brownfield.md +361 -361
- package/LICENSE +1 -1
- package/README.md +702 -703
- package/bin/aios-init-old.js +3 -3
- package/bin/aios-init-v4.js +1 -1
- package/bin/aios-init.backup-v1.1.4.js +1 -1
- package/bin/aios-init.js +3 -3
- package/bin/aios.js +279 -279
- package/bin/utils/install-errors.js +339 -339
- package/bin/utils/install-transaction.js +445 -445
- package/index.d.ts +18 -18
- package/index.esm.js +20 -20
- package/index.js +6 -6
- package/package.json +8 -10
- package/packages/installer/src/config/templates/env-template.js +27 -4
- package/packages/installer/src/detection/detect-project-type.js +81 -81
- package/packages/installer/src/wizard/wizard.js +185 -34
- package/packages/installer/tests/integration/environment-configuration.test.js +2 -1
- package/packages/installer/tests/integration/wizard-detection.test.js +8 -6
- package/packages/installer/tests/unit/env-template.test.js +11 -10
- package/src/config/ide-configs.js +1 -1
- package/src/wizard/feedback.js +2 -2
- package/src/wizard/index.js +1 -1
- package/src/wizard/validation/report-generator.js +1 -1
- package/src/wizard/validation/troubleshooting-system.js +13 -13
- package/.aios-core/development/tasks/validate-structure.md +0 -243
- package/.aios-core/infrastructure/scripts/_archived/final-todo-count.js +0 -122
- package/.aios-core/infrastructure/scripts/_archived/fix-yaml-formatting.js +0 -89
- package/.aios-core/infrastructure/scripts/_archived/migration-generator.js +0 -780
- package/.aios-core/infrastructure/scripts/_archived/migration-path-generator.js +0 -950
- package/.aios-core/infrastructure/scripts/_archived/phase2-entrada-saida-errors.js +0 -425
- package/.aios-core/infrastructure/scripts/_archived/phase2-spot-check.js +0 -132
- package/.aios-core/infrastructure/scripts/_archived/phase3-tools-scripts-validation.js +0 -381
- package/.aios-core/infrastructure/scripts/_archived/phase4-metadata-performance.js +0 -203
- package/.aios-core/infrastructure/scripts/_archived/test-yaml-parsing.js +0 -24
- package/.aios-core/infrastructure/scripts/_archived/verify-yaml-fix.js +0 -51
- package/.aios-core/infrastructure/scripts/source-tree-guardian/index.js +0 -375
- package/.aios-core/infrastructure/scripts/source-tree-guardian/manifest-generator.js +0 -410
- package/.aios-core/infrastructure/scripts/source-tree-guardian/rules/naming-rules.yaml +0 -285
- package/.aios-core/infrastructure/scripts/source-tree-guardian/rules/placement-rules.yaml +0 -262
- package/.aios-core/infrastructure/scripts/source-tree-guardian/validator.js +0 -468
- package/.aios-core/tasks/find-component.md.legacy +0 -391
- package/.aios-core/tasks/generate-commit-message.md.legacy +0 -426
- package/.aios-core/tasks/generate-migration.md.legacy +0 -382
- package/.aios-core/tasks/rollback-modification.md.legacy +0 -307
- package/.aios-core/tasks/update-tests.md.legacy +0 -283
|
@@ -1,901 +1,901 @@
|
|
|
1
|
-
---
|
|
2
|
-
|
|
3
|
-
# learn-patterns
|
|
4
|
-
|
|
5
|
-
## Execution Modes
|
|
6
|
-
|
|
7
|
-
**Choose your execution mode:**
|
|
8
|
-
|
|
9
|
-
### 1. YOLO Mode - Fast, Autonomous (0-1 prompts)
|
|
10
|
-
- Autonomous decision making with logging
|
|
11
|
-
- Minimal user interaction
|
|
12
|
-
- **Best for:** Simple, deterministic tasks
|
|
13
|
-
|
|
14
|
-
### 2. Interactive Mode - Balanced, Educational (5-10 prompts) **[DEFAULT]**
|
|
15
|
-
- Explicit decision checkpoints
|
|
16
|
-
- Educational explanations
|
|
17
|
-
- **Best for:** Learning, complex decisions
|
|
18
|
-
|
|
19
|
-
### 3. Pre-Flight Planning - Comprehensive Upfront Planning
|
|
20
|
-
- Task analysis phase (identify all ambiguities)
|
|
21
|
-
- Zero ambiguity execution
|
|
22
|
-
- **Best for:** Ambiguous requirements, critical work
|
|
23
|
-
|
|
24
|
-
**Parameter:** `mode` (optional, default: `interactive`)
|
|
25
|
-
|
|
26
|
-
---
|
|
27
|
-
|
|
28
|
-
## Task Definition (AIOS Task Format V1.0)
|
|
29
|
-
|
|
30
|
-
```yaml
|
|
31
|
-
task: learnPatterns()
|
|
32
|
-
responsƔvel: Uma (Empathizer)
|
|
33
|
-
responsavel_type: Agente
|
|
34
|
-
atomic_layer: Molecule
|
|
35
|
-
|
|
36
|
-
**Entrada:**
|
|
37
|
-
- campo: task
|
|
38
|
-
tipo: string
|
|
39
|
-
origem: User Input
|
|
40
|
-
obrigatório: true
|
|
41
|
-
validação: Must be registered task
|
|
42
|
-
|
|
43
|
-
- campo: parameters
|
|
44
|
-
tipo: object
|
|
45
|
-
origem: User Input
|
|
46
|
-
obrigatório: false
|
|
47
|
-
validação: Valid task parameters
|
|
48
|
-
|
|
49
|
-
- campo: mode
|
|
50
|
-
tipo: string
|
|
51
|
-
origem: User Input
|
|
52
|
-
obrigatório: false
|
|
53
|
-
validação: yolo|interactive|pre-flight
|
|
54
|
-
|
|
55
|
-
**SaĆda:**
|
|
56
|
-
- campo: execution_result
|
|
57
|
-
tipo: object
|
|
58
|
-
destino: Memory
|
|
59
|
-
persistido: false
|
|
60
|
-
|
|
61
|
-
- campo: logs
|
|
62
|
-
tipo: array
|
|
63
|
-
destino: File (.ai/logs/*)
|
|
64
|
-
persistido: true
|
|
65
|
-
|
|
66
|
-
- campo: state
|
|
67
|
-
tipo: object
|
|
68
|
-
destino: State management
|
|
69
|
-
persistido: true
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
---
|
|
73
|
-
|
|
74
|
-
## Pre-Conditions
|
|
75
|
-
|
|
76
|
-
**Purpose:** Validate prerequisites BEFORE task execution (blocking)
|
|
77
|
-
|
|
78
|
-
**Checklist:**
|
|
79
|
-
|
|
80
|
-
```yaml
|
|
81
|
-
pre-conditions:
|
|
82
|
-
- [ ] Task is registered; required parameters provided; dependencies met
|
|
83
|
-
tipo: pre-condition
|
|
84
|
-
blocker: true
|
|
85
|
-
validação: |
|
|
86
|
-
Check task is registered; required parameters provided; dependencies met
|
|
87
|
-
error_message: "Pre-condition failed: Task is registered; required parameters provided; dependencies met"
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
## Post-Conditions
|
|
93
|
-
|
|
94
|
-
**Purpose:** Validate execution success AFTER task completes
|
|
95
|
-
|
|
96
|
-
**Checklist:**
|
|
97
|
-
|
|
98
|
-
```yaml
|
|
99
|
-
post-conditions:
|
|
100
|
-
- [ ] Task completed; exit code 0; expected outputs created
|
|
101
|
-
tipo: post-condition
|
|
102
|
-
blocker: true
|
|
103
|
-
validação: |
|
|
104
|
-
Verify task completed; exit code 0; expected outputs created
|
|
105
|
-
error_message: "Post-condition failed: Task completed; exit code 0; expected outputs created"
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
---
|
|
109
|
-
|
|
110
|
-
## Acceptance Criteria
|
|
111
|
-
|
|
112
|
-
**Purpose:** Definitive pass/fail criteria for task completion
|
|
113
|
-
|
|
114
|
-
**Checklist:**
|
|
115
|
-
|
|
116
|
-
```yaml
|
|
117
|
-
acceptance-criteria:
|
|
118
|
-
- [ ] Task completed as expected; side effects documented
|
|
119
|
-
tipo: acceptance-criterion
|
|
120
|
-
blocker: true
|
|
121
|
-
validação: |
|
|
122
|
-
Assert task completed as expected; side effects documented
|
|
123
|
-
error_message: "Acceptance criterion not met: Task completed as expected; side effects documented"
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
---
|
|
127
|
-
|
|
128
|
-
## Tools
|
|
129
|
-
|
|
130
|
-
**External/shared resources used by this task:**
|
|
131
|
-
|
|
132
|
-
- **Tool:** task-runner
|
|
133
|
-
- **Purpose:** Task execution and orchestration
|
|
134
|
-
- **Source:** .aios-core/core/task-runner.js
|
|
135
|
-
|
|
136
|
-
- **Tool:** logger
|
|
137
|
-
- **Purpose:** Execution logging and error tracking
|
|
138
|
-
- **Source:** .aios-core/utils/logger.js
|
|
139
|
-
|
|
140
|
-
---
|
|
141
|
-
|
|
142
|
-
## Scripts
|
|
143
|
-
|
|
144
|
-
**Agent-specific code for this task:**
|
|
145
|
-
|
|
146
|
-
- **Script:** execute-task.js
|
|
147
|
-
- **Purpose:** Generic task execution wrapper
|
|
148
|
-
- **Language:** JavaScript
|
|
149
|
-
- **Location:** .aios-core/scripts/execute-task.js
|
|
150
|
-
|
|
151
|
-
---
|
|
152
|
-
|
|
153
|
-
## Error Handling
|
|
154
|
-
|
|
155
|
-
**Strategy:** retry
|
|
156
|
-
|
|
157
|
-
**Common Errors:**
|
|
158
|
-
|
|
159
|
-
1. **Error:** Task Not Found
|
|
160
|
-
- **Cause:** Specified task not registered in system
|
|
161
|
-
- **Resolution:** Verify task name and registration
|
|
162
|
-
- **Recovery:** List available tasks, suggest similar
|
|
163
|
-
|
|
164
|
-
2. **Error:** Invalid Parameters
|
|
165
|
-
- **Cause:** Task parameters do not match expected schema
|
|
166
|
-
- **Resolution:** Validate parameters against task definition
|
|
167
|
-
- **Recovery:** Provide parameter template, reject execution
|
|
168
|
-
|
|
169
|
-
3. **Error:** Execution Timeout
|
|
170
|
-
- **Cause:** Task exceeds maximum execution time
|
|
171
|
-
- **Resolution:** Optimize task or increase timeout
|
|
172
|
-
- **Recovery:** Kill task, cleanup resources, log state
|
|
173
|
-
|
|
174
|
-
---
|
|
175
|
-
|
|
176
|
-
## Performance
|
|
177
|
-
|
|
178
|
-
**Expected Metrics:**
|
|
179
|
-
|
|
180
|
-
```yaml
|
|
181
|
-
duration_expected: 2-5 min (estimated)
|
|
182
|
-
cost_estimated: $0.001-0.003
|
|
183
|
-
token_usage: ~1,000-3,000 tokens
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
**Optimization Notes:**
|
|
187
|
-
- Parallelize independent operations; reuse atom results; implement early exits
|
|
188
|
-
|
|
189
|
-
---
|
|
190
|
-
|
|
191
|
-
## Metadata
|
|
192
|
-
|
|
193
|
-
```yaml
|
|
194
|
-
story: N/A
|
|
195
|
-
version: 1.0.0
|
|
196
|
-
dependencies:
|
|
197
|
-
- N/A
|
|
198
|
-
tags:
|
|
199
|
-
- automation
|
|
200
|
-
- workflow
|
|
201
|
-
updated_at: 2025-11-17
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
---
|
|
205
|
-
|
|
206
|
-
# No checklists needed - analytical pattern learning task, no deliverables requiring validation
|
|
207
|
-
---
|
|
208
|
-
|
|
209
|
-
# Learn Patterns - AIOS Developer Task
|
|
210
|
-
|
|
211
|
-
## Purpose
|
|
212
|
-
Learn patterns from successful modifications to improve future meta-agent suggestions and automation.
|
|
213
|
-
|
|
214
|
-
## Command Pattern
|
|
215
|
-
```
|
|
216
|
-
*learn-patterns [options]
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
## Parameters
|
|
220
|
-
- `options`: Pattern learning configuration
|
|
221
|
-
|
|
222
|
-
### Options
|
|
223
|
-
- `--from-history <count>`: Learn from last N modifications (default: 50)
|
|
224
|
-
- `--type <types>`: Comma-separated pattern types to learn (code,structural,refactoring,dependency,performance)
|
|
225
|
-
- `--component <path>`: Learn patterns specific to a component
|
|
226
|
-
- `--threshold <value>`: Similarity threshold for pattern matching (0-1, default: 0.8)
|
|
227
|
-
- `--min-occurrences <count>`: Minimum occurrences before learning (default: 3)
|
|
228
|
-
- `--export <file>`: Export learned patterns to file
|
|
229
|
-
- `--import <file>`: Import patterns from file
|
|
230
|
-
- `--analyze`: Show pattern analysis and statistics
|
|
231
|
-
- `--reset`: Reset all learned patterns
|
|
232
|
-
- `--suggest <modification-id>`: Get pattern suggestions for a modification
|
|
233
|
-
|
|
234
|
-
## Examples
|
|
235
|
-
```bash
|
|
236
|
-
# Learn from recent modification history
|
|
237
|
-
*learn-patterns --from-history 100
|
|
238
|
-
|
|
239
|
-
# Learn specific pattern types
|
|
240
|
-
*learn-patterns --type code,refactoring --threshold 0.9
|
|
241
|
-
|
|
242
|
-
# Analyze patterns for a component
|
|
243
|
-
*learn-patterns --component aios-core/agents/developer.md --analyze
|
|
244
|
-
|
|
245
|
-
# Get suggestions for upcoming modification
|
|
246
|
-
*learn-patterns --suggest mod-123456 --type refactoring
|
|
247
|
-
|
|
248
|
-
# Export patterns for sharing
|
|
249
|
-
*learn-patterns --export patterns-export.json
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
## Implementation
|
|
253
|
-
|
|
254
|
-
```javascript
|
|
255
|
-
const fs = require('fs').promises;
|
|
256
|
-
const path = require('path');
|
|
257
|
-
const chalk = require('chalk');
|
|
258
|
-
const inquirer = require('inquirer');
|
|
259
|
-
|
|
260
|
-
class LearnPatternsTask {
|
|
261
|
-
constructor() {
|
|
262
|
-
this.taskName = 'learn-patterns';
|
|
263
|
-
this.description = 'Learn patterns from successful modifications';
|
|
264
|
-
this.rootPath = process.cwd();
|
|
265
|
-
this.patternLearner = null;
|
|
266
|
-
this.modificationHistory = null;
|
|
267
|
-
this.componentRegistry = null;
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
async execute(params) {
|
|
271
|
-
try {
|
|
272
|
-
console.log(chalk.blue('š§ AIOS Pattern Learning'));
|
|
273
|
-
console.log(chalk.gray('Learning from successful modifications\n'));
|
|
274
|
-
|
|
275
|
-
// Parse parameters
|
|
276
|
-
const config = await this.parseParameters(params);
|
|
277
|
-
|
|
278
|
-
// Initialize dependencies
|
|
279
|
-
await this.initializeDependencies();
|
|
280
|
-
|
|
281
|
-
// Execute requested action
|
|
282
|
-
let result;
|
|
283
|
-
if (config.reset) {
|
|
284
|
-
result = await this.resetPatterns();
|
|
285
|
-
} else if (config.export) {
|
|
286
|
-
result = await this.exportPatterns(config.export);
|
|
287
|
-
} else if (config.import) {
|
|
288
|
-
result = await this.importPatterns(config.import);
|
|
289
|
-
} else if (config.analyze) {
|
|
290
|
-
result = await this.analyzePatterns(config);
|
|
291
|
-
} else if (config.suggest) {
|
|
292
|
-
result = await this.suggestPatterns(config.suggest, config);
|
|
293
|
-
} else {
|
|
294
|
-
result = await this.learnPatterns(config);
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
// Display results
|
|
298
|
-
await this.displayResults(result, config);
|
|
299
|
-
|
|
300
|
-
return {
|
|
301
|
-
success: true,
|
|
302
|
-
patternsLearned: result.patternsLearned || 0,
|
|
303
|
-
totalPatterns: result.totalPatterns || this.patternLearner.patterns.size,
|
|
304
|
-
suggestions: result.suggestions || []
|
|
305
|
-
};
|
|
306
|
-
|
|
307
|
-
} catch (error) {
|
|
308
|
-
console.error(chalk.red(`\nā Pattern learning failed: ${error.message}`));
|
|
309
|
-
throw error;
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
async parseParameters(params) {
|
|
314
|
-
const config = {
|
|
315
|
-
fromHistory: 50,
|
|
316
|
-
types: ['code', 'structural', 'refactoring', 'dependency', 'performance'],
|
|
317
|
-
component: null,
|
|
318
|
-
threshold: 0.8,
|
|
319
|
-
minOccurrences: 3,
|
|
320
|
-
export: null,
|
|
321
|
-
import: null,
|
|
322
|
-
analyze: false,
|
|
323
|
-
reset: false,
|
|
324
|
-
suggest: null
|
|
325
|
-
};
|
|
326
|
-
|
|
327
|
-
for (let i = 0; i < params.length; i++) {
|
|
328
|
-
const param = params[i];
|
|
329
|
-
|
|
330
|
-
if (param === '--analyze') {
|
|
331
|
-
config.analyze = true;
|
|
332
|
-
} else if (param === '--reset') {
|
|
333
|
-
config.reset = true;
|
|
334
|
-
} else if (param.startsWith('--from-history') && params[i + 1]) {
|
|
335
|
-
config.fromHistory = parseInt(params[++i]);
|
|
336
|
-
} else if (param.startsWith('--type') && params[i + 1]) {
|
|
337
|
-
config.types = params[++i].split(',').map(t => t.trim());
|
|
338
|
-
} else if (param.startsWith('--component') && params[i + 1]) {
|
|
339
|
-
config.component = params[++i];
|
|
340
|
-
} else if (param.startsWith('--threshold') && params[i + 1]) {
|
|
341
|
-
config.threshold = parseFloat(params[++i]);
|
|
342
|
-
} else if (param.startsWith('--min-occurrences') && params[i + 1]) {
|
|
343
|
-
config.minOccurrences = parseInt(params[++i]);
|
|
344
|
-
} else if (param.startsWith('--export') && params[i + 1]) {
|
|
345
|
-
config.export = params[++i];
|
|
346
|
-
} else if (param.startsWith('--import') && params[i + 1]) {
|
|
347
|
-
config.import = params[++i];
|
|
348
|
-
} else if (param.startsWith('--suggest') && params[i + 1]) {
|
|
349
|
-
config.suggest = params[++i];
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
// Validate configuration
|
|
354
|
-
if (config.threshold < 0 || config.threshold > 1) {
|
|
355
|
-
throw new Error('Threshold must be between 0 and 1');
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
const validTypes = ['code', 'structural', 'refactoring', 'dependency', 'performance'];
|
|
359
|
-
for (const type of config.types) {
|
|
360
|
-
if (!validTypes.includes(type)) {
|
|
361
|
-
throw new Error(`Invalid pattern type: ${type}`);
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
return config;
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
async initializeDependencies() {
|
|
369
|
-
try {
|
|
370
|
-
// const PatternLearner = require('../scripts/pattern-learner'); // Archived in archived-utilities/ (Story 3.1.3)
|
|
371
|
-
// this.patternLearner = new PatternLearner({ rootPath: this.rootPath }); // Archived in archived-utilities/ (Story 3.1.3)
|
|
372
|
-
// await this.patternLearner.initialize(); // Archived in archived-utilities/ (Story 3.1.3)
|
|
373
|
-
|
|
374
|
-
// const ModificationHistory = require('../scripts/modification-history'); // Archived in archived-utilities/ (Story 3.1.3)
|
|
375
|
-
// this.modificationHistory = new ModificationHistory({ rootPath: this.rootPath }); // Archived in archived-utilities/ (Story 3.1.3)
|
|
376
|
-
|
|
377
|
-
const ComponentRegistry = require('../scripts/component-registry');
|
|
378
|
-
this.componentRegistry = new ComponentRegistry({ rootPath: this.rootPath });
|
|
379
|
-
|
|
380
|
-
} catch (error) {
|
|
381
|
-
throw new Error(`Failed to initialize dependencies: ${error.message}`);
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
async learnPatterns(config) {
|
|
386
|
-
console.log(chalk.blue('\nš Learning from modification history...'));
|
|
387
|
-
|
|
388
|
-
// Update learner configuration
|
|
389
|
-
this.patternLearner.learningThreshold = config.minOccurrences;
|
|
390
|
-
this.patternLearner.similarityThreshold = config.threshold;
|
|
391
|
-
|
|
392
|
-
// Load modification history
|
|
393
|
-
const modifications = await this.loadModificationHistory(config);
|
|
394
|
-
console.log(chalk.gray(`Loaded ${modifications.length} modifications for analysis`));
|
|
395
|
-
|
|
396
|
-
// Filter successful modifications
|
|
397
|
-
const successfulMods = modifications.filter(mod =>
|
|
398
|
-
mod.status === 'completed' &&
|
|
399
|
-
(!mod.rollback || mod.rollback.status !== 'rolled_back')
|
|
400
|
-
);
|
|
401
|
-
console.log(chalk.gray(`Found ${successfulMods.length} successful modifications`));
|
|
402
|
-
|
|
403
|
-
// Learn patterns from each modification
|
|
404
|
-
let patternsLearned = 0;
|
|
405
|
-
const progressInterval = Math.max(1, Math.floor(successfulMods.length / 20));
|
|
406
|
-
|
|
407
|
-
for (let i = 0; i < successfulMods.length; i++) {
|
|
408
|
-
const mod = successfulMods[i];
|
|
409
|
-
|
|
410
|
-
try {
|
|
411
|
-
// Record modification for pattern learning
|
|
412
|
-
const learned = await this.patternLearner.recordModification(mod);
|
|
413
|
-
if (learned) patternsLearned++;
|
|
414
|
-
|
|
415
|
-
// Show progress
|
|
416
|
-
if (i % progressInterval === 0) {
|
|
417
|
-
const progress = Math.floor((i / successfulMods.length) * 100);
|
|
418
|
-
process.stdout.write(`\rProgress: ${progress}%`);
|
|
419
|
-
}
|
|
420
|
-
} catch (error) {
|
|
421
|
-
console.warn(chalk.yellow(`\nFailed to learn from ${mod.id}: ${error.message}`));
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
console.log(''); // New line after progress
|
|
426
|
-
|
|
427
|
-
return {
|
|
428
|
-
patternsLearned: patternsLearned,
|
|
429
|
-
totalPatterns: this.patternLearner.patterns.size,
|
|
430
|
-
modificationsAnalyzed: successfulMods.length
|
|
431
|
-
};
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
async loadModificationHistory(config) {
|
|
435
|
-
let modifications = [];
|
|
436
|
-
|
|
437
|
-
if (config.component) {
|
|
438
|
-
// Load modifications for specific component
|
|
439
|
-
modifications = await this.modificationHistory.getComponentHistory(
|
|
440
|
-
config.component,
|
|
441
|
-
{ limit: config.fromHistory }
|
|
442
|
-
);
|
|
443
|
-
} else {
|
|
444
|
-
// Load recent modifications
|
|
445
|
-
modifications = await this.modificationHistory.getRecentModifications(
|
|
446
|
-
config.fromHistory
|
|
447
|
-
);
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
return modifications;
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
async analyzePatterns(config) {
|
|
454
|
-
console.log(chalk.blue('\nš Pattern Analysis'));
|
|
455
|
-
console.log(chalk.gray('ā'.repeat(50)));
|
|
456
|
-
|
|
457
|
-
const analytics = this.patternLearner.getAnalytics();
|
|
458
|
-
|
|
459
|
-
// Overall statistics
|
|
460
|
-
console.log(chalk.blue('\nš Overall Statistics:'));
|
|
461
|
-
console.log(`Total patterns: ${chalk.white(analytics.totalPatterns)}`);
|
|
462
|
-
console.log(`Total occurrences: ${chalk.white(analytics.totalOccurrences)}`);
|
|
463
|
-
console.log(`Average confidence: ${chalk.white((analytics.averageConfidence * 100).toFixed(1) + '%')}`);
|
|
464
|
-
console.log(`High confidence patterns: ${chalk.white(analytics.highConfidenceCount)}`);
|
|
465
|
-
|
|
466
|
-
// Pattern type breakdown
|
|
467
|
-
console.log(chalk.blue('\nš Pattern Types:'));
|
|
468
|
-
Object.entries(analytics.patternsByType).forEach(([type, patterns]) => {
|
|
469
|
-
if (config.types.includes(type)) {
|
|
470
|
-
console.log(`${type}: ${chalk.white(patterns.length)} patterns`);
|
|
471
|
-
}
|
|
472
|
-
});
|
|
473
|
-
|
|
474
|
-
// Component-specific analysis
|
|
475
|
-
if (config.component) {
|
|
476
|
-
const componentPatterns = Array.from(this.patternLearner.patterns.values())
|
|
477
|
-
.filter(p => p.metadata.components && p.metadata.components.includes(config.component));
|
|
478
|
-
|
|
479
|
-
console.log(chalk.blue(`\nš Component Analysis: ${config.component}`));
|
|
480
|
-
console.log(`Patterns applicable: ${chalk.white(componentPatterns.length)}`);
|
|
481
|
-
|
|
482
|
-
// Show top patterns for component
|
|
483
|
-
const topPatterns = componentPatterns
|
|
484
|
-
.sort((a, b) => b.confidence - a.confidence)
|
|
485
|
-
.slice(0, 5);
|
|
486
|
-
|
|
487
|
-
if (topPatterns.length > 0) {
|
|
488
|
-
console.log(chalk.gray('\nTop patterns:'));
|
|
489
|
-
topPatterns.forEach((pattern, index) => {
|
|
490
|
-
console.log(` ${index + 1}. ${pattern.description} (${(pattern.confidence * 100).toFixed(0)}% confidence)`);
|
|
491
|
-
});
|
|
492
|
-
}
|
|
493
|
-
}
|
|
494
|
-
|
|
495
|
-
// Recent learning activity
|
|
496
|
-
const recentPatterns = Array.from(this.patternLearner.patterns.values())
|
|
497
|
-
.sort((a, b) => new Date(b.lastSeen) - new Date(a.lastSeen))
|
|
498
|
-
.slice(0, 5);
|
|
499
|
-
|
|
500
|
-
console.log(chalk.blue('\nš Recently Active Patterns:'));
|
|
501
|
-
recentPatterns.forEach((pattern, index) => {
|
|
502
|
-
const lastSeen = new Date(pattern.lastSeen);
|
|
503
|
-
const daysAgo = Math.floor((Date.now() - lastSeen) / (1000 * 60 * 60 * 24));
|
|
504
|
-
console.log(` ${index + 1}. ${pattern.description} (${daysAgo} days ago)`);
|
|
505
|
-
});
|
|
506
|
-
|
|
507
|
-
return analytics;
|
|
508
|
-
}
|
|
509
|
-
|
|
510
|
-
async suggestPatterns(modificationId, config) {
|
|
511
|
-
console.log(chalk.blue('\nš” Pattern Suggestions'));
|
|
512
|
-
console.log(chalk.gray(`For modification: ${modificationId}\n`));
|
|
513
|
-
|
|
514
|
-
// Load modification details
|
|
515
|
-
const modification = await this.loadModification(modificationId);
|
|
516
|
-
if (!modification) {
|
|
517
|
-
throw new Error(`Modification not found: ${modificationId}`);
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
// Get pattern suggestions
|
|
521
|
-
const suggestions = this.patternLearner.suggestPatterns(modification, {
|
|
522
|
-
types: config.types,
|
|
523
|
-
minConfidence: 0.6,
|
|
524
|
-
maxSuggestions: 10
|
|
525
|
-
});
|
|
526
|
-
|
|
527
|
-
if (suggestions.length === 0) {
|
|
528
|
-
console.log(chalk.yellow('No applicable patterns found'));
|
|
529
|
-
return { suggestions: [] };
|
|
530
|
-
}
|
|
531
|
-
|
|
532
|
-
// Display suggestions
|
|
533
|
-
console.log(chalk.green(`Found ${suggestions.length} applicable patterns:\n`));
|
|
534
|
-
|
|
535
|
-
suggestions.forEach((suggestion, index) => {
|
|
536
|
-
console.log(chalk.blue(`${index + 1}. ${suggestion.pattern.description}`));
|
|
537
|
-
console.log(` Type: ${chalk.gray(suggestion.pattern.type)}`);
|
|
538
|
-
console.log(` Confidence: ${this.formatConfidence(suggestion.confidence)}`);
|
|
539
|
-
console.log(` Relevance: ${this.formatRelevance(suggestion.relevance)}`);
|
|
540
|
-
|
|
541
|
-
if (suggestion.pattern.metadata.successRate) {
|
|
542
|
-
console.log(` Success rate: ${chalk.green((suggestion.pattern.metadata.successRate * 100).toFixed(0) + '%')}`);
|
|
543
|
-
}
|
|
544
|
-
|
|
545
|
-
if (suggestion.applicationGuide) {
|
|
546
|
-
console.log(chalk.gray(' Application guide:'));
|
|
547
|
-
suggestion.applicationGuide.steps.forEach((step, stepIndex) => {
|
|
548
|
-
console.log(chalk.gray(` ${stepIndex + 1}. ${step}`));
|
|
549
|
-
});
|
|
550
|
-
}
|
|
551
|
-
|
|
552
|
-
console.log('');
|
|
553
|
-
});
|
|
554
|
-
|
|
555
|
-
// Ask if user wants to apply suggestions
|
|
556
|
-
if (suggestions.length > 0) {
|
|
557
|
-
const { applyPatterns } = await inquirer.prompt([{
|
|
558
|
-
type: 'confirm',
|
|
559
|
-
name: 'applyPatterns',
|
|
560
|
-
message: 'Would you like to apply any of these patterns?',
|
|
561
|
-
default: false
|
|
562
|
-
}]);
|
|
563
|
-
|
|
564
|
-
if (applyPatterns) {
|
|
565
|
-
const { selectedPatterns } = await inquirer.prompt([{
|
|
566
|
-
type: 'checkbox',
|
|
567
|
-
name: 'selectedPatterns',
|
|
568
|
-
message: 'Select patterns to apply:',
|
|
569
|
-
choices: suggestions.map((s, i) => ({
|
|
570
|
-
name: `${s.pattern.description} (${(s.confidence * 100).toFixed(0)}%)`,
|
|
571
|
-
value: i
|
|
572
|
-
}))
|
|
573
|
-
}]);
|
|
574
|
-
|
|
575
|
-
// Apply selected patterns
|
|
576
|
-
for (const index of selectedPatterns) {
|
|
577
|
-
await this.applyPattern(suggestions[index], modification);
|
|
578
|
-
}
|
|
579
|
-
}
|
|
580
|
-
}
|
|
581
|
-
|
|
582
|
-
return { suggestions };
|
|
583
|
-
}
|
|
584
|
-
|
|
585
|
-
async applyPattern(suggestion, modification) {
|
|
586
|
-
console.log(chalk.blue(`\nš§ Applying pattern: ${suggestion.pattern.description}`));
|
|
587
|
-
|
|
588
|
-
try {
|
|
589
|
-
// Implementation would depend on pattern type
|
|
590
|
-
// This is a placeholder for the actual pattern application logic
|
|
591
|
-
console.log(chalk.green('ā
Pattern applied successfully'));
|
|
592
|
-
|
|
593
|
-
// Record pattern application
|
|
594
|
-
this.patternLearner.recordPatternApplication(
|
|
595
|
-
suggestion.pattern.id,
|
|
596
|
-
modification.id,
|
|
597
|
-
true
|
|
598
|
-
);
|
|
599
|
-
} catch (error) {
|
|
600
|
-
console.error(chalk.red(`Failed to apply pattern: ${error.message}`));
|
|
601
|
-
|
|
602
|
-
// Record failed application
|
|
603
|
-
this.patternLearner.recordPatternApplication(
|
|
604
|
-
suggestion.pattern.id,
|
|
605
|
-
modification.id,
|
|
606
|
-
false
|
|
607
|
-
);
|
|
608
|
-
}
|
|
609
|
-
}
|
|
610
|
-
|
|
611
|
-
async exportPatterns(exportPath) {
|
|
612
|
-
console.log(chalk.blue('\nš¤ Exporting patterns...'));
|
|
613
|
-
|
|
614
|
-
const exportData = {
|
|
615
|
-
version: 1,
|
|
616
|
-
exportDate: new Date().toISOString(),
|
|
617
|
-
patterns: Array.from(this.patternLearner.patterns.entries()).map(([id, pattern]) => ({
|
|
618
|
-
id,
|
|
619
|
-
...pattern
|
|
620
|
-
})),
|
|
621
|
-
metadata: {
|
|
622
|
-
totalPatterns: this.patternLearner.patterns.size,
|
|
623
|
-
learningThreshold: this.patternLearner.learningThreshold,
|
|
624
|
-
similarityThreshold: this.patternLearner.similarityThreshold
|
|
625
|
-
}
|
|
626
|
-
};
|
|
627
|
-
|
|
628
|
-
await fs.writeFile(exportPath, JSON.stringify(exportData, null, 2));
|
|
629
|
-
console.log(chalk.green(`ā
Exported ${exportData.patterns.length} patterns to: ${exportPath}`));
|
|
630
|
-
|
|
631
|
-
return {
|
|
632
|
-
exported: true,
|
|
633
|
-
patternCount: exportData.patterns.length,
|
|
634
|
-
exportPath
|
|
635
|
-
};
|
|
636
|
-
}
|
|
637
|
-
|
|
638
|
-
async importPatterns(importPath) {
|
|
639
|
-
console.log(chalk.blue('\nš„ Importing patterns...'));
|
|
640
|
-
|
|
641
|
-
try {
|
|
642
|
-
const content = await fs.readFile(importPath, 'utf-8');
|
|
643
|
-
const importData = JSON.parse(content);
|
|
644
|
-
|
|
645
|
-
if (importData.version !== 1) {
|
|
646
|
-
throw new Error(`Unsupported import version: ${importData.version}`);
|
|
647
|
-
}
|
|
648
|
-
|
|
649
|
-
// Ask for import strategy
|
|
650
|
-
const { strategy } = await inquirer.prompt([{
|
|
651
|
-
type: 'list',
|
|
652
|
-
name: 'strategy',
|
|
653
|
-
message: 'Import strategy:',
|
|
654
|
-
choices: [
|
|
655
|
-
{ name: 'Merge with existing patterns', value: 'merge' },
|
|
656
|
-
{ name: 'Replace all patterns', value: 'replace' },
|
|
657
|
-
{ name: 'Cancel import', value: 'cancel' }
|
|
658
|
-
]
|
|
659
|
-
}]);
|
|
660
|
-
|
|
661
|
-
if (strategy === 'cancel') {
|
|
662
|
-
console.log(chalk.yellow('Import cancelled'));
|
|
663
|
-
return { imported: false };
|
|
664
|
-
}
|
|
665
|
-
|
|
666
|
-
if (strategy === 'replace') {
|
|
667
|
-
this.patternLearner.patterns.clear();
|
|
668
|
-
}
|
|
669
|
-
|
|
670
|
-
// Import patterns
|
|
671
|
-
let imported = 0;
|
|
672
|
-
for (const pattern of importData.patterns) {
|
|
673
|
-
const { id, ...patternData } = pattern;
|
|
674
|
-
|
|
675
|
-
if (strategy === 'merge' && this.patternLearner.patterns.has(id)) {
|
|
676
|
-
// Merge with existing pattern
|
|
677
|
-
const existing = this.patternLearner.patterns.get(id);
|
|
678
|
-
patternData.occurrences += existing.occurrences;
|
|
679
|
-
patternData.confidence = Math.max(patternData.confidence, existing.confidence);
|
|
680
|
-
}
|
|
681
|
-
|
|
682
|
-
this.patternLearner.patterns.set(id, patternData);
|
|
683
|
-
imported++;
|
|
684
|
-
}
|
|
685
|
-
|
|
686
|
-
// Save imported patterns
|
|
687
|
-
await this.patternLearner.savePatterns();
|
|
688
|
-
|
|
689
|
-
console.log(chalk.green(`ā
Imported ${imported} patterns`));
|
|
690
|
-
return {
|
|
691
|
-
imported: true,
|
|
692
|
-
patternCount: imported,
|
|
693
|
-
totalPatterns: this.patternLearner.patterns.size
|
|
694
|
-
};
|
|
695
|
-
|
|
696
|
-
} catch (error) {
|
|
697
|
-
throw new Error(`Import failed: ${error.message}`);
|
|
698
|
-
}
|
|
699
|
-
}
|
|
700
|
-
|
|
701
|
-
async resetPatterns() {
|
|
702
|
-
console.log(chalk.yellow('\nā ļø Pattern Reset'));
|
|
703
|
-
|
|
704
|
-
const { confirmReset } = await inquirer.prompt([{
|
|
705
|
-
type: 'confirm',
|
|
706
|
-
name: 'confirmReset',
|
|
707
|
-
message: 'Are you sure you want to reset all learned patterns?',
|
|
708
|
-
default: false
|
|
709
|
-
}]);
|
|
710
|
-
|
|
711
|
-
if (!confirmReset) {
|
|
712
|
-
console.log(chalk.gray('Reset cancelled'));
|
|
713
|
-
return { reset: false };
|
|
714
|
-
}
|
|
715
|
-
|
|
716
|
-
// Clear all patterns
|
|
717
|
-
this.patternLearner.patterns.clear();
|
|
718
|
-
this.patternLearner.modificationHistory = [];
|
|
719
|
-
await this.patternLearner.savePatterns();
|
|
720
|
-
|
|
721
|
-
console.log(chalk.green('ā
All patterns have been reset'));
|
|
722
|
-
return { reset: true };
|
|
723
|
-
}
|
|
724
|
-
|
|
725
|
-
async loadModification(modificationId) {
|
|
726
|
-
// Try multiple sources for modification data
|
|
727
|
-
const sources = [
|
|
728
|
-
path.join(this.rootPath, '.aios', 'modifications', `${modificationId}.json`),
|
|
729
|
-
path.join(this.rootPath, '.aios', 'history', `${modificationId}.json`),
|
|
730
|
-
path.join(this.rootPath, '.aios', 'proposals', `${modificationId}.json`)
|
|
731
|
-
];
|
|
732
|
-
|
|
733
|
-
for (const source of sources) {
|
|
734
|
-
try {
|
|
735
|
-
const content = await fs.readFile(source, 'utf-8');
|
|
736
|
-
return JSON.parse(content);
|
|
737
|
-
} catch (error) {
|
|
738
|
-
// Try next source
|
|
739
|
-
}
|
|
740
|
-
}
|
|
741
|
-
|
|
742
|
-
return null;
|
|
743
|
-
}
|
|
744
|
-
|
|
745
|
-
async displayResults(result, config) {
|
|
746
|
-
console.log(chalk.blue('\nš Pattern Learning Results'));
|
|
747
|
-
console.log(chalk.gray('ā'.repeat(50)));
|
|
748
|
-
|
|
749
|
-
if (result.patternsLearned !== undefined) {
|
|
750
|
-
console.log(`Patterns learned: ${chalk.green(result.patternsLearned)}`);
|
|
751
|
-
console.log(`Total patterns: ${chalk.white(result.totalPatterns)}`);
|
|
752
|
-
console.log(`Modifications analyzed: ${chalk.white(result.modificationsAnalyzed)}`);
|
|
753
|
-
}
|
|
754
|
-
|
|
755
|
-
if (result.exported) {
|
|
756
|
-
console.log(`Patterns exported: ${chalk.green(result.patternCount)}`);
|
|
757
|
-
console.log(`Export location: ${chalk.white(result.exportPath)}`);
|
|
758
|
-
}
|
|
759
|
-
|
|
760
|
-
if (result.imported) {
|
|
761
|
-
console.log(`Patterns imported: ${chalk.green(result.patternCount)}`);
|
|
762
|
-
console.log(`Total patterns: ${chalk.white(result.totalPatterns)}`);
|
|
763
|
-
}
|
|
764
|
-
|
|
765
|
-
if (result.reset) {
|
|
766
|
-
console.log(chalk.yellow('All patterns have been reset'));
|
|
767
|
-
}
|
|
768
|
-
|
|
769
|
-
// Show next steps
|
|
770
|
-
console.log(chalk.blue('\nš Next Steps:'));
|
|
771
|
-
if (result.patternsLearned > 0) {
|
|
772
|
-
console.log('1. Use --suggest to get pattern recommendations for new modifications');
|
|
773
|
-
console.log('2. Use --analyze to view pattern statistics');
|
|
774
|
-
console.log('3. Use --export to share patterns with other developers');
|
|
775
|
-
} else if (result.suggestions && result.suggestions.length > 0) {
|
|
776
|
-
console.log('1. Review suggested patterns carefully');
|
|
777
|
-
console.log('2. Apply patterns that match your modification goals');
|
|
778
|
-
console.log('3. Provide feedback on pattern effectiveness');
|
|
779
|
-
}
|
|
780
|
-
}
|
|
781
|
-
|
|
782
|
-
formatConfidence(confidence) {
|
|
783
|
-
const percentage = (confidence * 100).toFixed(0);
|
|
784
|
-
if (confidence >= 0.8) {
|
|
785
|
-
return chalk.green(`${percentage}%`);
|
|
786
|
-
} else if (confidence >= 0.6) {
|
|
787
|
-
return chalk.yellow(`${percentage}%`);
|
|
788
|
-
} else {
|
|
789
|
-
return chalk.red(`${percentage}%`);
|
|
790
|
-
}
|
|
791
|
-
}
|
|
792
|
-
|
|
793
|
-
formatRelevance(relevance) {
|
|
794
|
-
if (relevance >= 0.8) {
|
|
795
|
-
return chalk.green('High');
|
|
796
|
-
} else if (relevance >= 0.5) {
|
|
797
|
-
return chalk.yellow('Medium');
|
|
798
|
-
} else {
|
|
799
|
-
return chalk.red('Low');
|
|
800
|
-
}
|
|
801
|
-
}
|
|
802
|
-
}
|
|
803
|
-
|
|
804
|
-
module.exports = LearnPatternsTask;
|
|
805
|
-
```
|
|
806
|
-
|
|
807
|
-
## Pattern Types
|
|
808
|
-
|
|
809
|
-
### Code Transformation Patterns
|
|
810
|
-
- Variable renaming conventions
|
|
811
|
-
- Function extraction patterns
|
|
812
|
-
- Error handling additions
|
|
813
|
-
- Async/await conversions
|
|
814
|
-
- Code modernization patterns
|
|
815
|
-
|
|
816
|
-
### Structural Patterns
|
|
817
|
-
- Component organization changes
|
|
818
|
-
- Module restructuring
|
|
819
|
-
- Interface modifications
|
|
820
|
-
- Class hierarchy changes
|
|
821
|
-
- File organization patterns
|
|
822
|
-
|
|
823
|
-
### Refactoring Patterns
|
|
824
|
-
- Method extraction
|
|
825
|
-
- Class decomposition
|
|
826
|
-
- Interface segregation
|
|
827
|
-
- Dependency injection
|
|
828
|
-
- Code consolidation
|
|
829
|
-
|
|
830
|
-
### Dependency Patterns
|
|
831
|
-
- Package updates
|
|
832
|
-
- Import reorganization
|
|
833
|
-
- Dependency injection
|
|
834
|
-
- Service layer patterns
|
|
835
|
-
- API versioning
|
|
836
|
-
|
|
837
|
-
### Performance Patterns
|
|
838
|
-
- Caching implementations
|
|
839
|
-
- Query optimizations
|
|
840
|
-
- Lazy loading patterns
|
|
841
|
-
- Memory usage improvements
|
|
842
|
-
- Algorithm optimizations
|
|
843
|
-
|
|
844
|
-
## Learning Process
|
|
845
|
-
|
|
846
|
-
### Pattern Extraction
|
|
847
|
-
1. Analyze successful modifications
|
|
848
|
-
2. Extract change patterns using AST
|
|
849
|
-
3. Calculate pattern similarity
|
|
850
|
-
4. Group similar patterns
|
|
851
|
-
5. Build pattern templates
|
|
852
|
-
|
|
853
|
-
### Pattern Validation
|
|
854
|
-
1. Check minimum occurrences
|
|
855
|
-
2. Verify success rate
|
|
856
|
-
3. Validate consistency
|
|
857
|
-
4. Test applicability
|
|
858
|
-
5. Calculate confidence score
|
|
859
|
-
|
|
860
|
-
### Pattern Application
|
|
861
|
-
1. Match current context
|
|
862
|
-
2. Suggest relevant patterns
|
|
863
|
-
3. Provide application guide
|
|
864
|
-
4. Monitor application success
|
|
865
|
-
5. Update pattern metrics
|
|
866
|
-
|
|
867
|
-
## Integration Points
|
|
868
|
-
|
|
869
|
-
### Pattern Learner Utility
|
|
870
|
-
- Core pattern learning engine
|
|
871
|
-
- Pattern storage and retrieval
|
|
872
|
-
- Similarity calculations
|
|
873
|
-
- Suggestion generation
|
|
874
|
-
|
|
875
|
-
### Modification History
|
|
876
|
-
- Access to past modifications
|
|
877
|
-
- Success/failure tracking
|
|
878
|
-
- Component change history
|
|
879
|
-
- Impact analysis data
|
|
880
|
-
|
|
881
|
-
### Component Registry
|
|
882
|
-
- Component metadata
|
|
883
|
-
- Dependency information
|
|
884
|
-
- Usage patterns
|
|
885
|
-
- Performance metrics
|
|
886
|
-
|
|
887
|
-
## Security Considerations
|
|
888
|
-
- Validate pattern sources
|
|
889
|
-
- Prevent malicious patterns
|
|
890
|
-
- Audit pattern applications
|
|
891
|
-
- Secure pattern storage
|
|
892
|
-
- Control pattern sharing
|
|
893
|
-
|
|
894
|
-
## Best Practices
|
|
895
|
-
1. Learn from diverse modifications
|
|
896
|
-
2. Set appropriate thresholds
|
|
897
|
-
3. Regularly analyze patterns
|
|
898
|
-
4. Export valuable patterns
|
|
899
|
-
5. Monitor pattern effectiveness
|
|
900
|
-
6. Update patterns over time
|
|
1
|
+
---
|
|
2
|
+
|
|
3
|
+
# learn-patterns
|
|
4
|
+
|
|
5
|
+
## Execution Modes
|
|
6
|
+
|
|
7
|
+
**Choose your execution mode:**
|
|
8
|
+
|
|
9
|
+
### 1. YOLO Mode - Fast, Autonomous (0-1 prompts)
|
|
10
|
+
- Autonomous decision making with logging
|
|
11
|
+
- Minimal user interaction
|
|
12
|
+
- **Best for:** Simple, deterministic tasks
|
|
13
|
+
|
|
14
|
+
### 2. Interactive Mode - Balanced, Educational (5-10 prompts) **[DEFAULT]**
|
|
15
|
+
- Explicit decision checkpoints
|
|
16
|
+
- Educational explanations
|
|
17
|
+
- **Best for:** Learning, complex decisions
|
|
18
|
+
|
|
19
|
+
### 3. Pre-Flight Planning - Comprehensive Upfront Planning
|
|
20
|
+
- Task analysis phase (identify all ambiguities)
|
|
21
|
+
- Zero ambiguity execution
|
|
22
|
+
- **Best for:** Ambiguous requirements, critical work
|
|
23
|
+
|
|
24
|
+
**Parameter:** `mode` (optional, default: `interactive`)
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Task Definition (AIOS Task Format V1.0)
|
|
29
|
+
|
|
30
|
+
```yaml
|
|
31
|
+
task: learnPatterns()
|
|
32
|
+
responsƔvel: Uma (Empathizer)
|
|
33
|
+
responsavel_type: Agente
|
|
34
|
+
atomic_layer: Molecule
|
|
35
|
+
|
|
36
|
+
**Entrada:**
|
|
37
|
+
- campo: task
|
|
38
|
+
tipo: string
|
|
39
|
+
origem: User Input
|
|
40
|
+
obrigatório: true
|
|
41
|
+
validação: Must be registered task
|
|
42
|
+
|
|
43
|
+
- campo: parameters
|
|
44
|
+
tipo: object
|
|
45
|
+
origem: User Input
|
|
46
|
+
obrigatório: false
|
|
47
|
+
validação: Valid task parameters
|
|
48
|
+
|
|
49
|
+
- campo: mode
|
|
50
|
+
tipo: string
|
|
51
|
+
origem: User Input
|
|
52
|
+
obrigatório: false
|
|
53
|
+
validação: yolo|interactive|pre-flight
|
|
54
|
+
|
|
55
|
+
**SaĆda:**
|
|
56
|
+
- campo: execution_result
|
|
57
|
+
tipo: object
|
|
58
|
+
destino: Memory
|
|
59
|
+
persistido: false
|
|
60
|
+
|
|
61
|
+
- campo: logs
|
|
62
|
+
tipo: array
|
|
63
|
+
destino: File (.ai/logs/*)
|
|
64
|
+
persistido: true
|
|
65
|
+
|
|
66
|
+
- campo: state
|
|
67
|
+
tipo: object
|
|
68
|
+
destino: State management
|
|
69
|
+
persistido: true
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Pre-Conditions
|
|
75
|
+
|
|
76
|
+
**Purpose:** Validate prerequisites BEFORE task execution (blocking)
|
|
77
|
+
|
|
78
|
+
**Checklist:**
|
|
79
|
+
|
|
80
|
+
```yaml
|
|
81
|
+
pre-conditions:
|
|
82
|
+
- [ ] Task is registered; required parameters provided; dependencies met
|
|
83
|
+
tipo: pre-condition
|
|
84
|
+
blocker: true
|
|
85
|
+
validação: |
|
|
86
|
+
Check task is registered; required parameters provided; dependencies met
|
|
87
|
+
error_message: "Pre-condition failed: Task is registered; required parameters provided; dependencies met"
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Post-Conditions
|
|
93
|
+
|
|
94
|
+
**Purpose:** Validate execution success AFTER task completes
|
|
95
|
+
|
|
96
|
+
**Checklist:**
|
|
97
|
+
|
|
98
|
+
```yaml
|
|
99
|
+
post-conditions:
|
|
100
|
+
- [ ] Task completed; exit code 0; expected outputs created
|
|
101
|
+
tipo: post-condition
|
|
102
|
+
blocker: true
|
|
103
|
+
validação: |
|
|
104
|
+
Verify task completed; exit code 0; expected outputs created
|
|
105
|
+
error_message: "Post-condition failed: Task completed; exit code 0; expected outputs created"
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Acceptance Criteria
|
|
111
|
+
|
|
112
|
+
**Purpose:** Definitive pass/fail criteria for task completion
|
|
113
|
+
|
|
114
|
+
**Checklist:**
|
|
115
|
+
|
|
116
|
+
```yaml
|
|
117
|
+
acceptance-criteria:
|
|
118
|
+
- [ ] Task completed as expected; side effects documented
|
|
119
|
+
tipo: acceptance-criterion
|
|
120
|
+
blocker: true
|
|
121
|
+
validação: |
|
|
122
|
+
Assert task completed as expected; side effects documented
|
|
123
|
+
error_message: "Acceptance criterion not met: Task completed as expected; side effects documented"
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Tools
|
|
129
|
+
|
|
130
|
+
**External/shared resources used by this task:**
|
|
131
|
+
|
|
132
|
+
- **Tool:** task-runner
|
|
133
|
+
- **Purpose:** Task execution and orchestration
|
|
134
|
+
- **Source:** .aios-core/core/task-runner.js
|
|
135
|
+
|
|
136
|
+
- **Tool:** logger
|
|
137
|
+
- **Purpose:** Execution logging and error tracking
|
|
138
|
+
- **Source:** .aios-core/utils/logger.js
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Scripts
|
|
143
|
+
|
|
144
|
+
**Agent-specific code for this task:**
|
|
145
|
+
|
|
146
|
+
- **Script:** execute-task.js
|
|
147
|
+
- **Purpose:** Generic task execution wrapper
|
|
148
|
+
- **Language:** JavaScript
|
|
149
|
+
- **Location:** .aios-core/scripts/execute-task.js
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Error Handling
|
|
154
|
+
|
|
155
|
+
**Strategy:** retry
|
|
156
|
+
|
|
157
|
+
**Common Errors:**
|
|
158
|
+
|
|
159
|
+
1. **Error:** Task Not Found
|
|
160
|
+
- **Cause:** Specified task not registered in system
|
|
161
|
+
- **Resolution:** Verify task name and registration
|
|
162
|
+
- **Recovery:** List available tasks, suggest similar
|
|
163
|
+
|
|
164
|
+
2. **Error:** Invalid Parameters
|
|
165
|
+
- **Cause:** Task parameters do not match expected schema
|
|
166
|
+
- **Resolution:** Validate parameters against task definition
|
|
167
|
+
- **Recovery:** Provide parameter template, reject execution
|
|
168
|
+
|
|
169
|
+
3. **Error:** Execution Timeout
|
|
170
|
+
- **Cause:** Task exceeds maximum execution time
|
|
171
|
+
- **Resolution:** Optimize task or increase timeout
|
|
172
|
+
- **Recovery:** Kill task, cleanup resources, log state
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## Performance
|
|
177
|
+
|
|
178
|
+
**Expected Metrics:**
|
|
179
|
+
|
|
180
|
+
```yaml
|
|
181
|
+
duration_expected: 2-5 min (estimated)
|
|
182
|
+
cost_estimated: $0.001-0.003
|
|
183
|
+
token_usage: ~1,000-3,000 tokens
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**Optimization Notes:**
|
|
187
|
+
- Parallelize independent operations; reuse atom results; implement early exits
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## Metadata
|
|
192
|
+
|
|
193
|
+
```yaml
|
|
194
|
+
story: N/A
|
|
195
|
+
version: 1.0.0
|
|
196
|
+
dependencies:
|
|
197
|
+
- N/A
|
|
198
|
+
tags:
|
|
199
|
+
- automation
|
|
200
|
+
- workflow
|
|
201
|
+
updated_at: 2025-11-17
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
# No checklists needed - analytical pattern learning task, no deliverables requiring validation
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
# Learn Patterns - AIOS Developer Task
|
|
210
|
+
|
|
211
|
+
## Purpose
|
|
212
|
+
Learn patterns from successful modifications to improve future meta-agent suggestions and automation.
|
|
213
|
+
|
|
214
|
+
## Command Pattern
|
|
215
|
+
```
|
|
216
|
+
*learn-patterns [options]
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## Parameters
|
|
220
|
+
- `options`: Pattern learning configuration
|
|
221
|
+
|
|
222
|
+
### Options
|
|
223
|
+
- `--from-history <count>`: Learn from last N modifications (default: 50)
|
|
224
|
+
- `--type <types>`: Comma-separated pattern types to learn (code,structural,refactoring,dependency,performance)
|
|
225
|
+
- `--component <path>`: Learn patterns specific to a component
|
|
226
|
+
- `--threshold <value>`: Similarity threshold for pattern matching (0-1, default: 0.8)
|
|
227
|
+
- `--min-occurrences <count>`: Minimum occurrences before learning (default: 3)
|
|
228
|
+
- `--export <file>`: Export learned patterns to file
|
|
229
|
+
- `--import <file>`: Import patterns from file
|
|
230
|
+
- `--analyze`: Show pattern analysis and statistics
|
|
231
|
+
- `--reset`: Reset all learned patterns
|
|
232
|
+
- `--suggest <modification-id>`: Get pattern suggestions for a modification
|
|
233
|
+
|
|
234
|
+
## Examples
|
|
235
|
+
```bash
|
|
236
|
+
# Learn from recent modification history
|
|
237
|
+
*learn-patterns --from-history 100
|
|
238
|
+
|
|
239
|
+
# Learn specific pattern types
|
|
240
|
+
*learn-patterns --type code,refactoring --threshold 0.9
|
|
241
|
+
|
|
242
|
+
# Analyze patterns for a component
|
|
243
|
+
*learn-patterns --component aios-core/agents/developer.md --analyze
|
|
244
|
+
|
|
245
|
+
# Get suggestions for upcoming modification
|
|
246
|
+
*learn-patterns --suggest mod-123456 --type refactoring
|
|
247
|
+
|
|
248
|
+
# Export patterns for sharing
|
|
249
|
+
*learn-patterns --export patterns-export.json
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
## Implementation
|
|
253
|
+
|
|
254
|
+
```javascript
|
|
255
|
+
const fs = require('fs').promises;
|
|
256
|
+
const path = require('path');
|
|
257
|
+
const chalk = require('chalk');
|
|
258
|
+
const inquirer = require('inquirer');
|
|
259
|
+
|
|
260
|
+
class LearnPatternsTask {
|
|
261
|
+
constructor() {
|
|
262
|
+
this.taskName = 'learn-patterns';
|
|
263
|
+
this.description = 'Learn patterns from successful modifications';
|
|
264
|
+
this.rootPath = process.cwd();
|
|
265
|
+
this.patternLearner = null;
|
|
266
|
+
this.modificationHistory = null;
|
|
267
|
+
this.componentRegistry = null;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
async execute(params) {
|
|
271
|
+
try {
|
|
272
|
+
console.log(chalk.blue('š§ AIOS Pattern Learning'));
|
|
273
|
+
console.log(chalk.gray('Learning from successful modifications\n'));
|
|
274
|
+
|
|
275
|
+
// Parse parameters
|
|
276
|
+
const config = await this.parseParameters(params);
|
|
277
|
+
|
|
278
|
+
// Initialize dependencies
|
|
279
|
+
await this.initializeDependencies();
|
|
280
|
+
|
|
281
|
+
// Execute requested action
|
|
282
|
+
let result;
|
|
283
|
+
if (config.reset) {
|
|
284
|
+
result = await this.resetPatterns();
|
|
285
|
+
} else if (config.export) {
|
|
286
|
+
result = await this.exportPatterns(config.export);
|
|
287
|
+
} else if (config.import) {
|
|
288
|
+
result = await this.importPatterns(config.import);
|
|
289
|
+
} else if (config.analyze) {
|
|
290
|
+
result = await this.analyzePatterns(config);
|
|
291
|
+
} else if (config.suggest) {
|
|
292
|
+
result = await this.suggestPatterns(config.suggest, config);
|
|
293
|
+
} else {
|
|
294
|
+
result = await this.learnPatterns(config);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// Display results
|
|
298
|
+
await this.displayResults(result, config);
|
|
299
|
+
|
|
300
|
+
return {
|
|
301
|
+
success: true,
|
|
302
|
+
patternsLearned: result.patternsLearned || 0,
|
|
303
|
+
totalPatterns: result.totalPatterns || this.patternLearner.patterns.size,
|
|
304
|
+
suggestions: result.suggestions || []
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
} catch (error) {
|
|
308
|
+
console.error(chalk.red(`\nā Pattern learning failed: ${error.message}`));
|
|
309
|
+
throw error;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
async parseParameters(params) {
|
|
314
|
+
const config = {
|
|
315
|
+
fromHistory: 50,
|
|
316
|
+
types: ['code', 'structural', 'refactoring', 'dependency', 'performance'],
|
|
317
|
+
component: null,
|
|
318
|
+
threshold: 0.8,
|
|
319
|
+
minOccurrences: 3,
|
|
320
|
+
export: null,
|
|
321
|
+
import: null,
|
|
322
|
+
analyze: false,
|
|
323
|
+
reset: false,
|
|
324
|
+
suggest: null
|
|
325
|
+
};
|
|
326
|
+
|
|
327
|
+
for (let i = 0; i < params.length; i++) {
|
|
328
|
+
const param = params[i];
|
|
329
|
+
|
|
330
|
+
if (param === '--analyze') {
|
|
331
|
+
config.analyze = true;
|
|
332
|
+
} else if (param === '--reset') {
|
|
333
|
+
config.reset = true;
|
|
334
|
+
} else if (param.startsWith('--from-history') && params[i + 1]) {
|
|
335
|
+
config.fromHistory = parseInt(params[++i]);
|
|
336
|
+
} else if (param.startsWith('--type') && params[i + 1]) {
|
|
337
|
+
config.types = params[++i].split(',').map(t => t.trim());
|
|
338
|
+
} else if (param.startsWith('--component') && params[i + 1]) {
|
|
339
|
+
config.component = params[++i];
|
|
340
|
+
} else if (param.startsWith('--threshold') && params[i + 1]) {
|
|
341
|
+
config.threshold = parseFloat(params[++i]);
|
|
342
|
+
} else if (param.startsWith('--min-occurrences') && params[i + 1]) {
|
|
343
|
+
config.minOccurrences = parseInt(params[++i]);
|
|
344
|
+
} else if (param.startsWith('--export') && params[i + 1]) {
|
|
345
|
+
config.export = params[++i];
|
|
346
|
+
} else if (param.startsWith('--import') && params[i + 1]) {
|
|
347
|
+
config.import = params[++i];
|
|
348
|
+
} else if (param.startsWith('--suggest') && params[i + 1]) {
|
|
349
|
+
config.suggest = params[++i];
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
// Validate configuration
|
|
354
|
+
if (config.threshold < 0 || config.threshold > 1) {
|
|
355
|
+
throw new Error('Threshold must be between 0 and 1');
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
const validTypes = ['code', 'structural', 'refactoring', 'dependency', 'performance'];
|
|
359
|
+
for (const type of config.types) {
|
|
360
|
+
if (!validTypes.includes(type)) {
|
|
361
|
+
throw new Error(`Invalid pattern type: ${type}`);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
return config;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
async initializeDependencies() {
|
|
369
|
+
try {
|
|
370
|
+
// const PatternLearner = require('../scripts/pattern-learner'); // Archived in archived-utilities/ (Story 3.1.3)
|
|
371
|
+
// this.patternLearner = new PatternLearner({ rootPath: this.rootPath }); // Archived in archived-utilities/ (Story 3.1.3)
|
|
372
|
+
// await this.patternLearner.initialize(); // Archived in archived-utilities/ (Story 3.1.3)
|
|
373
|
+
|
|
374
|
+
// const ModificationHistory = require('../scripts/modification-history'); // Archived in archived-utilities/ (Story 3.1.3)
|
|
375
|
+
// this.modificationHistory = new ModificationHistory({ rootPath: this.rootPath }); // Archived in archived-utilities/ (Story 3.1.3)
|
|
376
|
+
|
|
377
|
+
const ComponentRegistry = require('../scripts/component-registry');
|
|
378
|
+
this.componentRegistry = new ComponentRegistry({ rootPath: this.rootPath });
|
|
379
|
+
|
|
380
|
+
} catch (error) {
|
|
381
|
+
throw new Error(`Failed to initialize dependencies: ${error.message}`);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
async learnPatterns(config) {
|
|
386
|
+
console.log(chalk.blue('\nš Learning from modification history...'));
|
|
387
|
+
|
|
388
|
+
// Update learner configuration
|
|
389
|
+
this.patternLearner.learningThreshold = config.minOccurrences;
|
|
390
|
+
this.patternLearner.similarityThreshold = config.threshold;
|
|
391
|
+
|
|
392
|
+
// Load modification history
|
|
393
|
+
const modifications = await this.loadModificationHistory(config);
|
|
394
|
+
console.log(chalk.gray(`Loaded ${modifications.length} modifications for analysis`));
|
|
395
|
+
|
|
396
|
+
// Filter successful modifications
|
|
397
|
+
const successfulMods = modifications.filter(mod =>
|
|
398
|
+
mod.status === 'completed' &&
|
|
399
|
+
(!mod.rollback || mod.rollback.status !== 'rolled_back')
|
|
400
|
+
);
|
|
401
|
+
console.log(chalk.gray(`Found ${successfulMods.length} successful modifications`));
|
|
402
|
+
|
|
403
|
+
// Learn patterns from each modification
|
|
404
|
+
let patternsLearned = 0;
|
|
405
|
+
const progressInterval = Math.max(1, Math.floor(successfulMods.length / 20));
|
|
406
|
+
|
|
407
|
+
for (let i = 0; i < successfulMods.length; i++) {
|
|
408
|
+
const mod = successfulMods[i];
|
|
409
|
+
|
|
410
|
+
try {
|
|
411
|
+
// Record modification for pattern learning
|
|
412
|
+
const learned = await this.patternLearner.recordModification(mod);
|
|
413
|
+
if (learned) patternsLearned++;
|
|
414
|
+
|
|
415
|
+
// Show progress
|
|
416
|
+
if (i % progressInterval === 0) {
|
|
417
|
+
const progress = Math.floor((i / successfulMods.length) * 100);
|
|
418
|
+
process.stdout.write(`\rProgress: ${progress}%`);
|
|
419
|
+
}
|
|
420
|
+
} catch (error) {
|
|
421
|
+
console.warn(chalk.yellow(`\nFailed to learn from ${mod.id}: ${error.message}`));
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
console.log(''); // New line after progress
|
|
426
|
+
|
|
427
|
+
return {
|
|
428
|
+
patternsLearned: patternsLearned,
|
|
429
|
+
totalPatterns: this.patternLearner.patterns.size,
|
|
430
|
+
modificationsAnalyzed: successfulMods.length
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
async loadModificationHistory(config) {
|
|
435
|
+
let modifications = [];
|
|
436
|
+
|
|
437
|
+
if (config.component) {
|
|
438
|
+
// Load modifications for specific component
|
|
439
|
+
modifications = await this.modificationHistory.getComponentHistory(
|
|
440
|
+
config.component,
|
|
441
|
+
{ limit: config.fromHistory }
|
|
442
|
+
);
|
|
443
|
+
} else {
|
|
444
|
+
// Load recent modifications
|
|
445
|
+
modifications = await this.modificationHistory.getRecentModifications(
|
|
446
|
+
config.fromHistory
|
|
447
|
+
);
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
return modifications;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
async analyzePatterns(config) {
|
|
454
|
+
console.log(chalk.blue('\nš Pattern Analysis'));
|
|
455
|
+
console.log(chalk.gray('ā'.repeat(50)));
|
|
456
|
+
|
|
457
|
+
const analytics = this.patternLearner.getAnalytics();
|
|
458
|
+
|
|
459
|
+
// Overall statistics
|
|
460
|
+
console.log(chalk.blue('\nš Overall Statistics:'));
|
|
461
|
+
console.log(`Total patterns: ${chalk.white(analytics.totalPatterns)}`);
|
|
462
|
+
console.log(`Total occurrences: ${chalk.white(analytics.totalOccurrences)}`);
|
|
463
|
+
console.log(`Average confidence: ${chalk.white((analytics.averageConfidence * 100).toFixed(1) + '%')}`);
|
|
464
|
+
console.log(`High confidence patterns: ${chalk.white(analytics.highConfidenceCount)}`);
|
|
465
|
+
|
|
466
|
+
// Pattern type breakdown
|
|
467
|
+
console.log(chalk.blue('\nš Pattern Types:'));
|
|
468
|
+
Object.entries(analytics.patternsByType).forEach(([type, patterns]) => {
|
|
469
|
+
if (config.types.includes(type)) {
|
|
470
|
+
console.log(`${type}: ${chalk.white(patterns.length)} patterns`);
|
|
471
|
+
}
|
|
472
|
+
});
|
|
473
|
+
|
|
474
|
+
// Component-specific analysis
|
|
475
|
+
if (config.component) {
|
|
476
|
+
const componentPatterns = Array.from(this.patternLearner.patterns.values())
|
|
477
|
+
.filter(p => p.metadata.components && p.metadata.components.includes(config.component));
|
|
478
|
+
|
|
479
|
+
console.log(chalk.blue(`\nš Component Analysis: ${config.component}`));
|
|
480
|
+
console.log(`Patterns applicable: ${chalk.white(componentPatterns.length)}`);
|
|
481
|
+
|
|
482
|
+
// Show top patterns for component
|
|
483
|
+
const topPatterns = componentPatterns
|
|
484
|
+
.sort((a, b) => b.confidence - a.confidence)
|
|
485
|
+
.slice(0, 5);
|
|
486
|
+
|
|
487
|
+
if (topPatterns.length > 0) {
|
|
488
|
+
console.log(chalk.gray('\nTop patterns:'));
|
|
489
|
+
topPatterns.forEach((pattern, index) => {
|
|
490
|
+
console.log(` ${index + 1}. ${pattern.description} (${(pattern.confidence * 100).toFixed(0)}% confidence)`);
|
|
491
|
+
});
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
// Recent learning activity
|
|
496
|
+
const recentPatterns = Array.from(this.patternLearner.patterns.values())
|
|
497
|
+
.sort((a, b) => new Date(b.lastSeen) - new Date(a.lastSeen))
|
|
498
|
+
.slice(0, 5);
|
|
499
|
+
|
|
500
|
+
console.log(chalk.blue('\nš Recently Active Patterns:'));
|
|
501
|
+
recentPatterns.forEach((pattern, index) => {
|
|
502
|
+
const lastSeen = new Date(pattern.lastSeen);
|
|
503
|
+
const daysAgo = Math.floor((Date.now() - lastSeen) / (1000 * 60 * 60 * 24));
|
|
504
|
+
console.log(` ${index + 1}. ${pattern.description} (${daysAgo} days ago)`);
|
|
505
|
+
});
|
|
506
|
+
|
|
507
|
+
return analytics;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
async suggestPatterns(modificationId, config) {
|
|
511
|
+
console.log(chalk.blue('\nš” Pattern Suggestions'));
|
|
512
|
+
console.log(chalk.gray(`For modification: ${modificationId}\n`));
|
|
513
|
+
|
|
514
|
+
// Load modification details
|
|
515
|
+
const modification = await this.loadModification(modificationId);
|
|
516
|
+
if (!modification) {
|
|
517
|
+
throw new Error(`Modification not found: ${modificationId}`);
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
// Get pattern suggestions
|
|
521
|
+
const suggestions = this.patternLearner.suggestPatterns(modification, {
|
|
522
|
+
types: config.types,
|
|
523
|
+
minConfidence: 0.6,
|
|
524
|
+
maxSuggestions: 10
|
|
525
|
+
});
|
|
526
|
+
|
|
527
|
+
if (suggestions.length === 0) {
|
|
528
|
+
console.log(chalk.yellow('No applicable patterns found'));
|
|
529
|
+
return { suggestions: [] };
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
// Display suggestions
|
|
533
|
+
console.log(chalk.green(`Found ${suggestions.length} applicable patterns:\n`));
|
|
534
|
+
|
|
535
|
+
suggestions.forEach((suggestion, index) => {
|
|
536
|
+
console.log(chalk.blue(`${index + 1}. ${suggestion.pattern.description}`));
|
|
537
|
+
console.log(` Type: ${chalk.gray(suggestion.pattern.type)}`);
|
|
538
|
+
console.log(` Confidence: ${this.formatConfidence(suggestion.confidence)}`);
|
|
539
|
+
console.log(` Relevance: ${this.formatRelevance(suggestion.relevance)}`);
|
|
540
|
+
|
|
541
|
+
if (suggestion.pattern.metadata.successRate) {
|
|
542
|
+
console.log(` Success rate: ${chalk.green((suggestion.pattern.metadata.successRate * 100).toFixed(0) + '%')}`);
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
if (suggestion.applicationGuide) {
|
|
546
|
+
console.log(chalk.gray(' Application guide:'));
|
|
547
|
+
suggestion.applicationGuide.steps.forEach((step, stepIndex) => {
|
|
548
|
+
console.log(chalk.gray(` ${stepIndex + 1}. ${step}`));
|
|
549
|
+
});
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
console.log('');
|
|
553
|
+
});
|
|
554
|
+
|
|
555
|
+
// Ask if user wants to apply suggestions
|
|
556
|
+
if (suggestions.length > 0) {
|
|
557
|
+
const { applyPatterns } = await inquirer.prompt([{
|
|
558
|
+
type: 'confirm',
|
|
559
|
+
name: 'applyPatterns',
|
|
560
|
+
message: 'Would you like to apply any of these patterns?',
|
|
561
|
+
default: false
|
|
562
|
+
}]);
|
|
563
|
+
|
|
564
|
+
if (applyPatterns) {
|
|
565
|
+
const { selectedPatterns } = await inquirer.prompt([{
|
|
566
|
+
type: 'checkbox',
|
|
567
|
+
name: 'selectedPatterns',
|
|
568
|
+
message: 'Select patterns to apply:',
|
|
569
|
+
choices: suggestions.map((s, i) => ({
|
|
570
|
+
name: `${s.pattern.description} (${(s.confidence * 100).toFixed(0)}%)`,
|
|
571
|
+
value: i
|
|
572
|
+
}))
|
|
573
|
+
}]);
|
|
574
|
+
|
|
575
|
+
// Apply selected patterns
|
|
576
|
+
for (const index of selectedPatterns) {
|
|
577
|
+
await this.applyPattern(suggestions[index], modification);
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
return { suggestions };
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
async applyPattern(suggestion, modification) {
|
|
586
|
+
console.log(chalk.blue(`\nš§ Applying pattern: ${suggestion.pattern.description}`));
|
|
587
|
+
|
|
588
|
+
try {
|
|
589
|
+
// Implementation would depend on pattern type
|
|
590
|
+
// This is a placeholder for the actual pattern application logic
|
|
591
|
+
console.log(chalk.green('ā
Pattern applied successfully'));
|
|
592
|
+
|
|
593
|
+
// Record pattern application
|
|
594
|
+
this.patternLearner.recordPatternApplication(
|
|
595
|
+
suggestion.pattern.id,
|
|
596
|
+
modification.id,
|
|
597
|
+
true
|
|
598
|
+
);
|
|
599
|
+
} catch (error) {
|
|
600
|
+
console.error(chalk.red(`Failed to apply pattern: ${error.message}`));
|
|
601
|
+
|
|
602
|
+
// Record failed application
|
|
603
|
+
this.patternLearner.recordPatternApplication(
|
|
604
|
+
suggestion.pattern.id,
|
|
605
|
+
modification.id,
|
|
606
|
+
false
|
|
607
|
+
);
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
async exportPatterns(exportPath) {
|
|
612
|
+
console.log(chalk.blue('\nš¤ Exporting patterns...'));
|
|
613
|
+
|
|
614
|
+
const exportData = {
|
|
615
|
+
version: 1,
|
|
616
|
+
exportDate: new Date().toISOString(),
|
|
617
|
+
patterns: Array.from(this.patternLearner.patterns.entries()).map(([id, pattern]) => ({
|
|
618
|
+
id,
|
|
619
|
+
...pattern
|
|
620
|
+
})),
|
|
621
|
+
metadata: {
|
|
622
|
+
totalPatterns: this.patternLearner.patterns.size,
|
|
623
|
+
learningThreshold: this.patternLearner.learningThreshold,
|
|
624
|
+
similarityThreshold: this.patternLearner.similarityThreshold
|
|
625
|
+
}
|
|
626
|
+
};
|
|
627
|
+
|
|
628
|
+
await fs.writeFile(exportPath, JSON.stringify(exportData, null, 2));
|
|
629
|
+
console.log(chalk.green(`ā
Exported ${exportData.patterns.length} patterns to: ${exportPath}`));
|
|
630
|
+
|
|
631
|
+
return {
|
|
632
|
+
exported: true,
|
|
633
|
+
patternCount: exportData.patterns.length,
|
|
634
|
+
exportPath
|
|
635
|
+
};
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
async importPatterns(importPath) {
|
|
639
|
+
console.log(chalk.blue('\nš„ Importing patterns...'));
|
|
640
|
+
|
|
641
|
+
try {
|
|
642
|
+
const content = await fs.readFile(importPath, 'utf-8');
|
|
643
|
+
const importData = JSON.parse(content);
|
|
644
|
+
|
|
645
|
+
if (importData.version !== 1) {
|
|
646
|
+
throw new Error(`Unsupported import version: ${importData.version}`);
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
// Ask for import strategy
|
|
650
|
+
const { strategy } = await inquirer.prompt([{
|
|
651
|
+
type: 'list',
|
|
652
|
+
name: 'strategy',
|
|
653
|
+
message: 'Import strategy:',
|
|
654
|
+
choices: [
|
|
655
|
+
{ name: 'Merge with existing patterns', value: 'merge' },
|
|
656
|
+
{ name: 'Replace all patterns', value: 'replace' },
|
|
657
|
+
{ name: 'Cancel import', value: 'cancel' }
|
|
658
|
+
]
|
|
659
|
+
}]);
|
|
660
|
+
|
|
661
|
+
if (strategy === 'cancel') {
|
|
662
|
+
console.log(chalk.yellow('Import cancelled'));
|
|
663
|
+
return { imported: false };
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
if (strategy === 'replace') {
|
|
667
|
+
this.patternLearner.patterns.clear();
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
// Import patterns
|
|
671
|
+
let imported = 0;
|
|
672
|
+
for (const pattern of importData.patterns) {
|
|
673
|
+
const { id, ...patternData } = pattern;
|
|
674
|
+
|
|
675
|
+
if (strategy === 'merge' && this.patternLearner.patterns.has(id)) {
|
|
676
|
+
// Merge with existing pattern
|
|
677
|
+
const existing = this.patternLearner.patterns.get(id);
|
|
678
|
+
patternData.occurrences += existing.occurrences;
|
|
679
|
+
patternData.confidence = Math.max(patternData.confidence, existing.confidence);
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
this.patternLearner.patterns.set(id, patternData);
|
|
683
|
+
imported++;
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
// Save imported patterns
|
|
687
|
+
await this.patternLearner.savePatterns();
|
|
688
|
+
|
|
689
|
+
console.log(chalk.green(`ā
Imported ${imported} patterns`));
|
|
690
|
+
return {
|
|
691
|
+
imported: true,
|
|
692
|
+
patternCount: imported,
|
|
693
|
+
totalPatterns: this.patternLearner.patterns.size
|
|
694
|
+
};
|
|
695
|
+
|
|
696
|
+
} catch (error) {
|
|
697
|
+
throw new Error(`Import failed: ${error.message}`);
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
async resetPatterns() {
|
|
702
|
+
console.log(chalk.yellow('\nā ļø Pattern Reset'));
|
|
703
|
+
|
|
704
|
+
const { confirmReset } = await inquirer.prompt([{
|
|
705
|
+
type: 'confirm',
|
|
706
|
+
name: 'confirmReset',
|
|
707
|
+
message: 'Are you sure you want to reset all learned patterns?',
|
|
708
|
+
default: false
|
|
709
|
+
}]);
|
|
710
|
+
|
|
711
|
+
if (!confirmReset) {
|
|
712
|
+
console.log(chalk.gray('Reset cancelled'));
|
|
713
|
+
return { reset: false };
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
// Clear all patterns
|
|
717
|
+
this.patternLearner.patterns.clear();
|
|
718
|
+
this.patternLearner.modificationHistory = [];
|
|
719
|
+
await this.patternLearner.savePatterns();
|
|
720
|
+
|
|
721
|
+
console.log(chalk.green('ā
All patterns have been reset'));
|
|
722
|
+
return { reset: true };
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
async loadModification(modificationId) {
|
|
726
|
+
// Try multiple sources for modification data
|
|
727
|
+
const sources = [
|
|
728
|
+
path.join(this.rootPath, '.aios', 'modifications', `${modificationId}.json`),
|
|
729
|
+
path.join(this.rootPath, '.aios', 'history', `${modificationId}.json`),
|
|
730
|
+
path.join(this.rootPath, '.aios', 'proposals', `${modificationId}.json`)
|
|
731
|
+
];
|
|
732
|
+
|
|
733
|
+
for (const source of sources) {
|
|
734
|
+
try {
|
|
735
|
+
const content = await fs.readFile(source, 'utf-8');
|
|
736
|
+
return JSON.parse(content);
|
|
737
|
+
} catch (error) {
|
|
738
|
+
// Try next source
|
|
739
|
+
}
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
return null;
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
async displayResults(result, config) {
|
|
746
|
+
console.log(chalk.blue('\nš Pattern Learning Results'));
|
|
747
|
+
console.log(chalk.gray('ā'.repeat(50)));
|
|
748
|
+
|
|
749
|
+
if (result.patternsLearned !== undefined) {
|
|
750
|
+
console.log(`Patterns learned: ${chalk.green(result.patternsLearned)}`);
|
|
751
|
+
console.log(`Total patterns: ${chalk.white(result.totalPatterns)}`);
|
|
752
|
+
console.log(`Modifications analyzed: ${chalk.white(result.modificationsAnalyzed)}`);
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
if (result.exported) {
|
|
756
|
+
console.log(`Patterns exported: ${chalk.green(result.patternCount)}`);
|
|
757
|
+
console.log(`Export location: ${chalk.white(result.exportPath)}`);
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
if (result.imported) {
|
|
761
|
+
console.log(`Patterns imported: ${chalk.green(result.patternCount)}`);
|
|
762
|
+
console.log(`Total patterns: ${chalk.white(result.totalPatterns)}`);
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
if (result.reset) {
|
|
766
|
+
console.log(chalk.yellow('All patterns have been reset'));
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
// Show next steps
|
|
770
|
+
console.log(chalk.blue('\nš Next Steps:'));
|
|
771
|
+
if (result.patternsLearned > 0) {
|
|
772
|
+
console.log('1. Use --suggest to get pattern recommendations for new modifications');
|
|
773
|
+
console.log('2. Use --analyze to view pattern statistics');
|
|
774
|
+
console.log('3. Use --export to share patterns with other developers');
|
|
775
|
+
} else if (result.suggestions && result.suggestions.length > 0) {
|
|
776
|
+
console.log('1. Review suggested patterns carefully');
|
|
777
|
+
console.log('2. Apply patterns that match your modification goals');
|
|
778
|
+
console.log('3. Provide feedback on pattern effectiveness');
|
|
779
|
+
}
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
formatConfidence(confidence) {
|
|
783
|
+
const percentage = (confidence * 100).toFixed(0);
|
|
784
|
+
if (confidence >= 0.8) {
|
|
785
|
+
return chalk.green(`${percentage}%`);
|
|
786
|
+
} else if (confidence >= 0.6) {
|
|
787
|
+
return chalk.yellow(`${percentage}%`);
|
|
788
|
+
} else {
|
|
789
|
+
return chalk.red(`${percentage}%`);
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
formatRelevance(relevance) {
|
|
794
|
+
if (relevance >= 0.8) {
|
|
795
|
+
return chalk.green('High');
|
|
796
|
+
} else if (relevance >= 0.5) {
|
|
797
|
+
return chalk.yellow('Medium');
|
|
798
|
+
} else {
|
|
799
|
+
return chalk.red('Low');
|
|
800
|
+
}
|
|
801
|
+
}
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
module.exports = LearnPatternsTask;
|
|
805
|
+
```
|
|
806
|
+
|
|
807
|
+
## Pattern Types
|
|
808
|
+
|
|
809
|
+
### Code Transformation Patterns
|
|
810
|
+
- Variable renaming conventions
|
|
811
|
+
- Function extraction patterns
|
|
812
|
+
- Error handling additions
|
|
813
|
+
- Async/await conversions
|
|
814
|
+
- Code modernization patterns
|
|
815
|
+
|
|
816
|
+
### Structural Patterns
|
|
817
|
+
- Component organization changes
|
|
818
|
+
- Module restructuring
|
|
819
|
+
- Interface modifications
|
|
820
|
+
- Class hierarchy changes
|
|
821
|
+
- File organization patterns
|
|
822
|
+
|
|
823
|
+
### Refactoring Patterns
|
|
824
|
+
- Method extraction
|
|
825
|
+
- Class decomposition
|
|
826
|
+
- Interface segregation
|
|
827
|
+
- Dependency injection
|
|
828
|
+
- Code consolidation
|
|
829
|
+
|
|
830
|
+
### Dependency Patterns
|
|
831
|
+
- Package updates
|
|
832
|
+
- Import reorganization
|
|
833
|
+
- Dependency injection
|
|
834
|
+
- Service layer patterns
|
|
835
|
+
- API versioning
|
|
836
|
+
|
|
837
|
+
### Performance Patterns
|
|
838
|
+
- Caching implementations
|
|
839
|
+
- Query optimizations
|
|
840
|
+
- Lazy loading patterns
|
|
841
|
+
- Memory usage improvements
|
|
842
|
+
- Algorithm optimizations
|
|
843
|
+
|
|
844
|
+
## Learning Process
|
|
845
|
+
|
|
846
|
+
### Pattern Extraction
|
|
847
|
+
1. Analyze successful modifications
|
|
848
|
+
2. Extract change patterns using AST
|
|
849
|
+
3. Calculate pattern similarity
|
|
850
|
+
4. Group similar patterns
|
|
851
|
+
5. Build pattern templates
|
|
852
|
+
|
|
853
|
+
### Pattern Validation
|
|
854
|
+
1. Check minimum occurrences
|
|
855
|
+
2. Verify success rate
|
|
856
|
+
3. Validate consistency
|
|
857
|
+
4. Test applicability
|
|
858
|
+
5. Calculate confidence score
|
|
859
|
+
|
|
860
|
+
### Pattern Application
|
|
861
|
+
1. Match current context
|
|
862
|
+
2. Suggest relevant patterns
|
|
863
|
+
3. Provide application guide
|
|
864
|
+
4. Monitor application success
|
|
865
|
+
5. Update pattern metrics
|
|
866
|
+
|
|
867
|
+
## Integration Points
|
|
868
|
+
|
|
869
|
+
### Pattern Learner Utility
|
|
870
|
+
- Core pattern learning engine
|
|
871
|
+
- Pattern storage and retrieval
|
|
872
|
+
- Similarity calculations
|
|
873
|
+
- Suggestion generation
|
|
874
|
+
|
|
875
|
+
### Modification History
|
|
876
|
+
- Access to past modifications
|
|
877
|
+
- Success/failure tracking
|
|
878
|
+
- Component change history
|
|
879
|
+
- Impact analysis data
|
|
880
|
+
|
|
881
|
+
### Component Registry
|
|
882
|
+
- Component metadata
|
|
883
|
+
- Dependency information
|
|
884
|
+
- Usage patterns
|
|
885
|
+
- Performance metrics
|
|
886
|
+
|
|
887
|
+
## Security Considerations
|
|
888
|
+
- Validate pattern sources
|
|
889
|
+
- Prevent malicious patterns
|
|
890
|
+
- Audit pattern applications
|
|
891
|
+
- Secure pattern storage
|
|
892
|
+
- Control pattern sharing
|
|
893
|
+
|
|
894
|
+
## Best Practices
|
|
895
|
+
1. Learn from diverse modifications
|
|
896
|
+
2. Set appropriate thresholds
|
|
897
|
+
3. Regularly analyze patterns
|
|
898
|
+
4. Export valuable patterns
|
|
899
|
+
5. Monitor pattern effectiveness
|
|
900
|
+
6. Update patterns over time
|
|
901
901
|
7. Share patterns across teams
|