aios-core 2.1.6 ā 2.2.1
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-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 +1 -1
- 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/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/github-workflows/README.md +109 -109
- 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 +704 -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 -11
- 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/tests/integration/wizard-detection.test.js +8 -6
- package/packages/installer/tests/unit/env-template.test.js +8 -8
- 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/tools/diagnose-installation.js +266 -0
- package/tools/diagnose-npx-issue.ps1 +96 -0
- package/tools/quick-diagnose.cmd +85 -0
- package/tools/quick-diagnose.ps1 +117 -0
- 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/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,873 +1,873 @@
|
|
|
1
|
-
---
|
|
2
|
-
|
|
3
|
-
## Execution Modes
|
|
4
|
-
|
|
5
|
-
**Choose your execution mode:**
|
|
6
|
-
|
|
7
|
-
### 1. YOLO Mode - Fast, Autonomous (0-1 prompts)
|
|
8
|
-
- Autonomous decision making with logging
|
|
9
|
-
- Minimal user interaction
|
|
10
|
-
- **Best for:** Simple, deterministic tasks
|
|
11
|
-
|
|
12
|
-
### 2. Interactive Mode - Balanced, Educational (5-10 prompts) **[DEFAULT]**
|
|
13
|
-
- Explicit decision checkpoints
|
|
14
|
-
- Educational explanations
|
|
15
|
-
- **Best for:** Learning, complex decisions
|
|
16
|
-
|
|
17
|
-
### 3. Pre-Flight Planning - Comprehensive Upfront Planning
|
|
18
|
-
- Task analysis phase (identify all ambiguities)
|
|
19
|
-
- Zero ambiguity execution
|
|
20
|
-
- **Best for:** Ambiguous requirements, critical work
|
|
21
|
-
|
|
22
|
-
**Parameter:** `mode` (optional, default: `interactive`)
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## Task Definition (AIOS Task Format V1.0)
|
|
27
|
-
|
|
28
|
-
```yaml
|
|
29
|
-
task: devImproveCodeQuality()
|
|
30
|
-
responsƔvel: Dex (Builder)
|
|
31
|
-
responsavel_type: Agente
|
|
32
|
-
atomic_layer: Strategy
|
|
33
|
-
|
|
34
|
-
**Entrada:**
|
|
35
|
-
- campo: task
|
|
36
|
-
tipo: string
|
|
37
|
-
origem: User Input
|
|
38
|
-
obrigatório: true
|
|
39
|
-
validação: Must be registered task
|
|
40
|
-
|
|
41
|
-
- campo: parameters
|
|
42
|
-
tipo: object
|
|
43
|
-
origem: User Input
|
|
44
|
-
obrigatório: false
|
|
45
|
-
validação: Valid task parameters
|
|
46
|
-
|
|
47
|
-
- campo: mode
|
|
48
|
-
tipo: string
|
|
49
|
-
origem: User Input
|
|
50
|
-
obrigatório: false
|
|
51
|
-
validação: yolo|interactive|pre-flight
|
|
52
|
-
|
|
53
|
-
**SaĆda:**
|
|
54
|
-
- campo: execution_result
|
|
55
|
-
tipo: object
|
|
56
|
-
destino: Memory
|
|
57
|
-
persistido: false
|
|
58
|
-
|
|
59
|
-
- campo: logs
|
|
60
|
-
tipo: array
|
|
61
|
-
destino: File (.ai/logs/*)
|
|
62
|
-
persistido: true
|
|
63
|
-
|
|
64
|
-
- campo: state
|
|
65
|
-
tipo: object
|
|
66
|
-
destino: State management
|
|
67
|
-
persistido: true
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
---
|
|
71
|
-
|
|
72
|
-
## Pre-Conditions
|
|
73
|
-
|
|
74
|
-
**Purpose:** Validate prerequisites BEFORE task execution (blocking)
|
|
75
|
-
|
|
76
|
-
**Checklist:**
|
|
77
|
-
|
|
78
|
-
```yaml
|
|
79
|
-
pre-conditions:
|
|
80
|
-
- [ ] Task is registered; required parameters provided; dependencies met
|
|
81
|
-
tipo: pre-condition
|
|
82
|
-
blocker: true
|
|
83
|
-
validação: |
|
|
84
|
-
Check task is registered; required parameters provided; dependencies met
|
|
85
|
-
error_message: "Pre-condition failed: Task is registered; required parameters provided; dependencies met"
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
---
|
|
89
|
-
|
|
90
|
-
## Post-Conditions
|
|
91
|
-
|
|
92
|
-
**Purpose:** Validate execution success AFTER task completes
|
|
93
|
-
|
|
94
|
-
**Checklist:**
|
|
95
|
-
|
|
96
|
-
```yaml
|
|
97
|
-
post-conditions:
|
|
98
|
-
- [ ] Task completed; exit code 0; expected outputs created
|
|
99
|
-
tipo: post-condition
|
|
100
|
-
blocker: true
|
|
101
|
-
validação: |
|
|
102
|
-
Verify task completed; exit code 0; expected outputs created
|
|
103
|
-
error_message: "Post-condition failed: Task completed; exit code 0; expected outputs created"
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
---
|
|
107
|
-
|
|
108
|
-
## Acceptance Criteria
|
|
109
|
-
|
|
110
|
-
**Purpose:** Definitive pass/fail criteria for task completion
|
|
111
|
-
|
|
112
|
-
**Checklist:**
|
|
113
|
-
|
|
114
|
-
```yaml
|
|
115
|
-
acceptance-criteria:
|
|
116
|
-
- [ ] Task completed as expected; side effects documented
|
|
117
|
-
tipo: acceptance-criterion
|
|
118
|
-
blocker: true
|
|
119
|
-
validação: |
|
|
120
|
-
Assert task completed as expected; side effects documented
|
|
121
|
-
error_message: "Acceptance criterion not met: Task completed as expected; side effects documented"
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
---
|
|
125
|
-
|
|
126
|
-
## Tools
|
|
127
|
-
|
|
128
|
-
**External/shared resources used by this task:**
|
|
129
|
-
|
|
130
|
-
- **Tool:** task-runner
|
|
131
|
-
- **Purpose:** Task execution and orchestration
|
|
132
|
-
- **Source:** .aios-core/core/task-runner.js
|
|
133
|
-
|
|
134
|
-
- **Tool:** logger
|
|
135
|
-
- **Purpose:** Execution logging and error tracking
|
|
136
|
-
- **Source:** .aios-core/utils/logger.js
|
|
137
|
-
|
|
138
|
-
---
|
|
139
|
-
|
|
140
|
-
## Scripts
|
|
141
|
-
|
|
142
|
-
**Agent-specific code for this task:**
|
|
143
|
-
|
|
144
|
-
- **Script:** execute-task.js
|
|
145
|
-
- **Purpose:** Generic task execution wrapper
|
|
146
|
-
- **Language:** JavaScript
|
|
147
|
-
- **Location:** .aios-core/scripts/execute-task.js
|
|
148
|
-
|
|
149
|
-
---
|
|
150
|
-
|
|
151
|
-
## Error Handling
|
|
152
|
-
|
|
153
|
-
**Strategy:** retry
|
|
154
|
-
|
|
155
|
-
**Common Errors:**
|
|
156
|
-
|
|
157
|
-
1. **Error:** Task Not Found
|
|
158
|
-
- **Cause:** Specified task not registered in system
|
|
159
|
-
- **Resolution:** Verify task name and registration
|
|
160
|
-
- **Recovery:** List available tasks, suggest similar
|
|
161
|
-
|
|
162
|
-
2. **Error:** Invalid Parameters
|
|
163
|
-
- **Cause:** Task parameters do not match expected schema
|
|
164
|
-
- **Resolution:** Validate parameters against task definition
|
|
165
|
-
- **Recovery:** Provide parameter template, reject execution
|
|
166
|
-
|
|
167
|
-
3. **Error:** Execution Timeout
|
|
168
|
-
- **Cause:** Task exceeds maximum execution time
|
|
169
|
-
- **Resolution:** Optimize task or increase timeout
|
|
170
|
-
- **Recovery:** Kill task, cleanup resources, log state
|
|
171
|
-
|
|
172
|
-
---
|
|
173
|
-
|
|
174
|
-
## Performance
|
|
175
|
-
|
|
176
|
-
**Expected Metrics:**
|
|
177
|
-
|
|
178
|
-
```yaml
|
|
179
|
-
duration_expected: 5-20 min (estimated)
|
|
180
|
-
cost_estimated: $0.003-0.015
|
|
181
|
-
token_usage: ~2,000-8,000 tokens
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
**Optimization Notes:**
|
|
185
|
-
- Iterative analysis with depth limits; cache intermediate results; batch similar operations
|
|
186
|
-
|
|
187
|
-
---
|
|
188
|
-
|
|
189
|
-
## Metadata
|
|
190
|
-
|
|
191
|
-
```yaml
|
|
192
|
-
story: N/A
|
|
193
|
-
version: 1.0.0
|
|
194
|
-
dependencies:
|
|
195
|
-
- N/A
|
|
196
|
-
tags:
|
|
197
|
-
- development
|
|
198
|
-
- code
|
|
199
|
-
updated_at: 2025-11-17
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
---
|
|
203
|
-
|
|
204
|
-
# No checklists needed - this task performs automated code refactoring, validation is through linting and testing
|
|
205
|
-
tools:
|
|
206
|
-
- github-cli
|
|
207
|
-
---
|
|
208
|
-
|
|
209
|
-
# Improve Code Quality - AIOS Developer Task
|
|
210
|
-
|
|
211
|
-
## Purpose
|
|
212
|
-
Automatically improve code quality across multiple dimensions including formatting, linting, modern syntax, and best practices.
|
|
213
|
-
|
|
214
|
-
## Command Pattern
|
|
215
|
-
```
|
|
216
|
-
*improve-code-quality <path> [options]
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
## Parameters
|
|
220
|
-
- `path`: File or directory path to improve
|
|
221
|
-
- `options`: Code improvement configuration
|
|
222
|
-
|
|
223
|
-
### Options
|
|
224
|
-
- `--patterns <types>`: Comma-separated improvement patterns to apply
|
|
225
|
-
- `--auto-fix`: Automatically apply all safe improvements
|
|
226
|
-
- `--preview`: Show changes before applying
|
|
227
|
-
- `--exclude <patterns>`: Exclude file patterns (e.g., "*.test.js")
|
|
228
|
-
- `--recursive`: Process directories recursively
|
|
229
|
-
- `--config <file>`: Use custom configuration file
|
|
230
|
-
- `--report <file>`: Generate improvement report
|
|
231
|
-
- `--threshold <level>`: Minimum confidence for auto-fix (0-1, default: 0.8)
|
|
232
|
-
- `--backup`: Create backups before applying changes
|
|
233
|
-
|
|
234
|
-
## Improvement Patterns
|
|
235
|
-
- `formatting`: Code formatting with Prettier
|
|
236
|
-
- `linting`: ESLint fixes and rule compliance
|
|
237
|
-
- `modern-syntax`: ES6+ syntax upgrades
|
|
238
|
-
- `imports`: Import organization and optimization
|
|
239
|
-
- `dead-code`: Dead code elimination
|
|
240
|
-
- `naming`: Naming convention improvements
|
|
241
|
-
- `error-handling`: Error handling patterns
|
|
242
|
-
- `async-await`: Promise to async/await conversion
|
|
243
|
-
- `type-safety`: Type annotations and safety
|
|
244
|
-
- `documentation`: JSDoc generation and updates
|
|
245
|
-
|
|
246
|
-
## Examples
|
|
247
|
-
```bash
|
|
248
|
-
# Improve single file with preview
|
|
249
|
-
*improve-code-quality aios-core/scripts/legacy-utility.js --preview
|
|
250
|
-
|
|
251
|
-
# Auto-fix all safe improvements in directory
|
|
252
|
-
*improve-code-quality aios-core/agents --auto-fix --recursive
|
|
253
|
-
|
|
254
|
-
# Apply specific patterns
|
|
255
|
-
*improve-code-quality aios-core/utils --patterns formatting,modern-syntax,async-await
|
|
256
|
-
|
|
257
|
-
# Generate improvement report
|
|
258
|
-
*improve-code-quality . --recursive --report quality-report.json
|
|
259
|
-
|
|
260
|
-
# Use custom configuration
|
|
261
|
-
*improve-code-quality aios-core --config .aios/quality-config.json
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
## Implementation
|
|
265
|
-
|
|
266
|
-
```javascript
|
|
267
|
-
const fs = require('fs').promises;
|
|
268
|
-
const path = require('path');
|
|
269
|
-
const chalk = require('chalk');
|
|
270
|
-
const inquirer = require('inquirer');
|
|
271
|
-
const glob = require('glob').promises;
|
|
272
|
-
|
|
273
|
-
class ImproveCodeQualityTask {
|
|
274
|
-
constructor() {
|
|
275
|
-
this.taskName = 'improve-code-quality';
|
|
276
|
-
this.description = 'Automatically improve code quality';
|
|
277
|
-
this.rootPath = process.cwd();
|
|
278
|
-
this.codeQualityImprover = null;
|
|
279
|
-
this.improvements = [];
|
|
280
|
-
this.appliedImprovements = [];
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
async execute(params) {
|
|
284
|
-
try {
|
|
285
|
-
console.log(chalk.blue('šØ AIOS Code Quality Improvement'));
|
|
286
|
-
console.log(chalk.gray('Analyzing and improving code quality\n'));
|
|
287
|
-
|
|
288
|
-
// Parse parameters
|
|
289
|
-
const config = await this.parseParameters(params);
|
|
290
|
-
|
|
291
|
-
// Initialize dependencies
|
|
292
|
-
await this.initializeDependencies();
|
|
293
|
-
|
|
294
|
-
// Get files to improve
|
|
295
|
-
const files = await this.getFilesToImprove(config);
|
|
296
|
-
|
|
297
|
-
if (files.length === 0) {
|
|
298
|
-
console.log(chalk.yellow('No files found to improve'));
|
|
299
|
-
return { success: true, improvements: [] };
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
console.log(chalk.gray(`Found ${files.length} files to analyze\n`));
|
|
303
|
-
|
|
304
|
-
// Analyze files for improvements
|
|
305
|
-
await this.analyzeFiles(files, config);
|
|
306
|
-
|
|
307
|
-
// Execute based on mode
|
|
308
|
-
if (config.autoFix) {
|
|
309
|
-
await this.applyImprovements(config);
|
|
310
|
-
} else if (config.preview) {
|
|
311
|
-
await this.previewImprovements(config);
|
|
312
|
-
} else {
|
|
313
|
-
await this.interactiveImprovement(config);
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
// Generate report if requested
|
|
317
|
-
if (config.report) {
|
|
318
|
-
await this.generateReport(config.report);
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
return {
|
|
322
|
-
success: true,
|
|
323
|
-
filesAnalyzed: files.length,
|
|
324
|
-
totalImprovements: this.improvements.length,
|
|
325
|
-
appliedImprovements: this.appliedImprovements.length
|
|
326
|
-
};
|
|
327
|
-
|
|
328
|
-
} catch (error) {
|
|
329
|
-
console.error(chalk.red(`\nā Code quality improvement failed: ${error.message}`));
|
|
330
|
-
throw error;
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
async parseParameters(params) {
|
|
335
|
-
if (params.length < 1) {
|
|
336
|
-
throw new Error('Usage: *improve-code-quality <path> [options]');
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
const config = {
|
|
340
|
-
targetPath: params[0],
|
|
341
|
-
patterns: ['formatting', 'linting', 'modern-syntax', 'imports', 'naming'],
|
|
342
|
-
autoFix: false,
|
|
343
|
-
preview: false,
|
|
344
|
-
exclude: [],
|
|
345
|
-
recursive: false,
|
|
346
|
-
configFile: null,
|
|
347
|
-
report: null,
|
|
348
|
-
threshold: 0.8,
|
|
349
|
-
backup: true
|
|
350
|
-
};
|
|
351
|
-
|
|
352
|
-
// Parse options
|
|
353
|
-
for (let i = 1; i < params.length; i++) {
|
|
354
|
-
const param = params[i];
|
|
355
|
-
|
|
356
|
-
if (param === '--auto-fix') {
|
|
357
|
-
config.autoFix = true;
|
|
358
|
-
} else if (param === '--preview') {
|
|
359
|
-
config.preview = true;
|
|
360
|
-
} else if (param === '--recursive') {
|
|
361
|
-
config.recursive = true;
|
|
362
|
-
} else if (param === '--backup') {
|
|
363
|
-
config.backup = true;
|
|
364
|
-
} else if (param.startsWith('--patterns') && params[i + 1]) {
|
|
365
|
-
config.patterns = params[++i].split(',').map(p => p.trim());
|
|
366
|
-
} else if (param.startsWith('--exclude') && params[i + 1]) {
|
|
367
|
-
config.exclude = params[++i].split(',').map(e => e.trim());
|
|
368
|
-
} else if (param.startsWith('--config') && params[i + 1]) {
|
|
369
|
-
config.configFile = params[++i];
|
|
370
|
-
} else if (param.startsWith('--report') && params[i + 1]) {
|
|
371
|
-
config.report = params[++i];
|
|
372
|
-
} else if (param.startsWith('--threshold') && params[i + 1]) {
|
|
373
|
-
config.threshold = parseFloat(params[++i]);
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
// Load custom configuration if provided
|
|
378
|
-
if (config.configFile) {
|
|
379
|
-
await this.loadCustomConfig(config);
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
// Validate threshold
|
|
383
|
-
if (config.threshold < 0 || config.threshold > 1) {
|
|
384
|
-
throw new Error('Threshold must be between 0 and 1');
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
return config;
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
async loadCustomConfig(config) {
|
|
391
|
-
try {
|
|
392
|
-
const content = await fs.readFile(config.configFile, 'utf-8');
|
|
393
|
-
const customConfig = JSON.parse(content);
|
|
394
|
-
|
|
395
|
-
// Merge custom config
|
|
396
|
-
Object.assign(config, {
|
|
397
|
-
patterns: customConfig.patterns || config.patterns,
|
|
398
|
-
threshold: customConfig.threshold || config.threshold,
|
|
399
|
-
exclude: customConfig.exclude || config.exclude,
|
|
400
|
-
// Add pattern-specific configurations
|
|
401
|
-
patternConfig: customConfig.patternConfig || {}
|
|
402
|
-
});
|
|
403
|
-
} catch (error) {
|
|
404
|
-
console.warn(chalk.yellow(`Failed to load custom config: ${error.message}`));
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
async initializeDependencies() {
|
|
409
|
-
try {
|
|
410
|
-
const CodeQualityImprover = require('../scripts/code-quality-improver');
|
|
411
|
-
this.codeQualityImprover = new CodeQualityImprover({ rootPath: this.rootPath });
|
|
412
|
-
|
|
413
|
-
} catch (error) {
|
|
414
|
-
throw new Error(`Failed to initialize dependencies: ${error.message}`);
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
async getFilesToImprove(config) {
|
|
419
|
-
const targetPath = path.resolve(this.rootPath, config.targetPath);
|
|
420
|
-
const files = [];
|
|
421
|
-
|
|
422
|
-
try {
|
|
423
|
-
const stats = await fs.stat(targetPath);
|
|
424
|
-
|
|
425
|
-
if (stats.isFile()) {
|
|
426
|
-
// Single file
|
|
427
|
-
if (this.shouldProcessFile(targetPath, config)) {
|
|
428
|
-
files.push(targetPath);
|
|
429
|
-
}
|
|
430
|
-
} else if (stats.isDirectory()) {
|
|
431
|
-
// Directory
|
|
432
|
-
const pattern = config.recursive ? '**/*.{js,jsx,ts,tsx}' : '*.{js,jsx,ts,tsx}';
|
|
433
|
-
const globPattern = path.join(targetPath, pattern);
|
|
434
|
-
|
|
435
|
-
const matches = await glob(globPattern, {
|
|
436
|
-
ignore: config.exclude.map(e => path.join(targetPath, '**', e)),
|
|
437
|
-
nodir: true
|
|
438
|
-
});
|
|
439
|
-
|
|
440
|
-
for (const match of matches) {
|
|
441
|
-
if (this.shouldProcessFile(match, config)) {
|
|
442
|
-
files.push(match);
|
|
443
|
-
}
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
} catch (error) {
|
|
447
|
-
console.warn(chalk.yellow(`Cannot access ${targetPath}: ${error.message}`));
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
return files;
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
shouldProcessFile(filePath, config) {
|
|
454
|
-
// Skip test files unless explicitly included
|
|
455
|
-
if (!config.includeTests && (filePath.includes('.test.') || filePath.includes('.spec.'))) {
|
|
456
|
-
return false;
|
|
457
|
-
}
|
|
458
|
-
|
|
459
|
-
// Skip build artifacts
|
|
460
|
-
if (filePath.includes('/dist/') || filePath.includes('/build/')) {
|
|
461
|
-
return false;
|
|
462
|
-
}
|
|
463
|
-
|
|
464
|
-
// Skip node_modules
|
|
465
|
-
if (filePath.includes('node_modules')) {
|
|
466
|
-
return false;
|
|
467
|
-
}
|
|
468
|
-
|
|
469
|
-
// Check file extension
|
|
470
|
-
const ext = path.extname(filePath);
|
|
471
|
-
return ['.js', '.jsx', '.ts', '.tsx'].includes(ext);
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
async analyzeFiles(files, config) {
|
|
475
|
-
console.log(chalk.blue('š Analyzing code quality...'));
|
|
476
|
-
|
|
477
|
-
const progressInterval = Math.max(1, Math.floor(files.length / 20));
|
|
478
|
-
|
|
479
|
-
for (let i = 0; i < files.length; i++) {
|
|
480
|
-
const file = files[i];
|
|
481
|
-
|
|
482
|
-
try {
|
|
483
|
-
// Create backup if requested
|
|
484
|
-
if (config.backup) {
|
|
485
|
-
await this.createBackup(file);
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
// Analyze file for improvements
|
|
489
|
-
const analysis = await this.codeQualityImprover.analyzeFile(file, {
|
|
490
|
-
patterns: config.patterns,
|
|
491
|
-
patternConfig: config.patternConfig
|
|
492
|
-
});
|
|
493
|
-
|
|
494
|
-
if (analysis.improvements && analysis.improvements.length > 0) {
|
|
495
|
-
// Filter by confidence threshold
|
|
496
|
-
const filteredImprovements = analysis.improvements.filter(
|
|
497
|
-
imp => imp.confidence >= config.threshold
|
|
498
|
-
);
|
|
499
|
-
|
|
500
|
-
// Add to improvements list
|
|
501
|
-
for (const improvement of filteredImprovements) {
|
|
502
|
-
improvement.file = path.relative(this.rootPath, file);
|
|
503
|
-
improvement.id = `imp-${this.improvements.length + 1}`;
|
|
504
|
-
this.improvements.push(improvement);
|
|
505
|
-
}
|
|
506
|
-
}
|
|
507
|
-
|
|
508
|
-
// Show progress
|
|
509
|
-
if (i % progressInterval === 0) {
|
|
510
|
-
const progress = Math.floor((i / files.length) * 100);
|
|
511
|
-
process.stdout.write(`\rProgress: ${progress}%`);
|
|
512
|
-
}
|
|
513
|
-
|
|
514
|
-
} catch (error) {
|
|
515
|
-
console.warn(chalk.yellow(`\nFailed to analyze ${file}: ${error.message}`));
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
|
|
519
|
-
console.log('\rProgress: 100%\n');
|
|
520
|
-
}
|
|
521
|
-
|
|
522
|
-
async createBackup(filePath) {
|
|
523
|
-
const backupDir = path.join(this.rootPath, '.aios', 'backups', 'code-quality');
|
|
524
|
-
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
525
|
-
const relativePath = path.relative(this.rootPath, filePath);
|
|
526
|
-
const backupPath = path.join(backupDir, timestamp, relativePath);
|
|
527
|
-
|
|
528
|
-
await fs.mkdir(path.dirname(backupPath), { recursive: true });
|
|
529
|
-
await fs.copyFile(filePath, backupPath);
|
|
530
|
-
}
|
|
531
|
-
|
|
532
|
-
async applyImprovements(config) {
|
|
533
|
-
console.log(chalk.blue('\nš§ Applying improvements...'));
|
|
534
|
-
|
|
535
|
-
if (this.improvements.length === 0) {
|
|
536
|
-
console.log(chalk.yellow('No improvements to apply'));
|
|
537
|
-
return;
|
|
538
|
-
}
|
|
539
|
-
|
|
540
|
-
// Group improvements by file
|
|
541
|
-
const byFile = this.groupImprovementsByFile();
|
|
542
|
-
|
|
543
|
-
let applied = 0;
|
|
544
|
-
let failed = 0;
|
|
545
|
-
|
|
546
|
-
for (const [file, improvements] of Object.entries(byFile)) {
|
|
547
|
-
try {
|
|
548
|
-
console.log(chalk.gray(`\nImproving ${file}...`));
|
|
549
|
-
|
|
550
|
-
const result = await this.codeQualityImprover.applyImprovements(
|
|
551
|
-
path.join(this.rootPath, file),
|
|
552
|
-
improvements
|
|
553
|
-
);
|
|
554
|
-
|
|
555
|
-
if (result.success) {
|
|
556
|
-
applied += result.appliedCount;
|
|
557
|
-
this.appliedImprovements.push(...improvements.filter(
|
|
558
|
-
imp => result.applied.includes(imp.id)
|
|
559
|
-
));
|
|
560
|
-
|
|
561
|
-
// Show applied improvements
|
|
562
|
-
for (const improvement of improvements) {
|
|
563
|
-
if (result.applied.includes(improvement.id)) {
|
|
564
|
-
console.log(chalk.green(` ā
${improvement.description}`));
|
|
565
|
-
}
|
|
566
|
-
}
|
|
567
|
-
} else {
|
|
568
|
-
failed++;
|
|
569
|
-
console.error(chalk.red(` Failed: ${result.error}`));
|
|
570
|
-
}
|
|
571
|
-
} catch (error) {
|
|
572
|
-
failed++;
|
|
573
|
-
console.error(chalk.red(` Error: ${error.message}`));
|
|
574
|
-
}
|
|
575
|
-
}
|
|
576
|
-
|
|
577
|
-
// Show summary
|
|
578
|
-
console.log(chalk.blue('\nš Improvement Summary:'));
|
|
579
|
-
console.log(chalk.green(` ā
Applied: ${applied}`));
|
|
580
|
-
if (failed > 0) {
|
|
581
|
-
console.log(chalk.red(` ā Failed: ${failed}`));
|
|
582
|
-
}
|
|
583
|
-
}
|
|
584
|
-
|
|
585
|
-
async previewImprovements(config) {
|
|
586
|
-
if (this.improvements.length === 0) {
|
|
587
|
-
console.log(chalk.yellow('No improvements found'));
|
|
588
|
-
return;
|
|
589
|
-
}
|
|
590
|
-
|
|
591
|
-
console.log(chalk.blue(`\nš Found ${this.improvements.length} improvements:\n`));
|
|
592
|
-
|
|
593
|
-
// Group by file
|
|
594
|
-
const byFile = this.groupImprovementsByFile();
|
|
595
|
-
|
|
596
|
-
for (const [file, improvements] of Object.entries(byFile)) {
|
|
597
|
-
console.log(chalk.blue(`\nš ${file}`));
|
|
598
|
-
console.log(chalk.gray('ā'.repeat(50)));
|
|
599
|
-
|
|
600
|
-
for (const improvement of improvements) {
|
|
601
|
-
this.displayImprovement(improvement);
|
|
602
|
-
}
|
|
603
|
-
}
|
|
604
|
-
|
|
605
|
-
// Show pattern statistics
|
|
606
|
-
this.displayStatistics();
|
|
607
|
-
|
|
608
|
-
// Show next steps
|
|
609
|
-
console.log(chalk.blue('\nš Next Steps:'));
|
|
610
|
-
console.log(`1. Apply all improvements: *improve-code-quality ${config.targetPath} --auto-fix`);
|
|
611
|
-
console.log(`2. Interactive selection: *improve-code-quality ${config.targetPath}`);
|
|
612
|
-
console.log(`3. Generate report: *improve-code-quality ${config.targetPath} --report quality-report.json`);
|
|
613
|
-
}
|
|
614
|
-
|
|
615
|
-
async interactiveImprovement(config) {
|
|
616
|
-
if (this.improvements.length === 0) {
|
|
617
|
-
console.log(chalk.yellow('No improvements found'));
|
|
618
|
-
return;
|
|
619
|
-
}
|
|
620
|
-
|
|
621
|
-
console.log(chalk.blue(`\nš Found ${this.improvements.length} improvements`));
|
|
622
|
-
|
|
623
|
-
// Group by file for better UX
|
|
624
|
-
const byFile = this.groupImprovementsByFile();
|
|
625
|
-
|
|
626
|
-
for (const [file, improvements] of Object.entries(byFile)) {
|
|
627
|
-
console.log(chalk.blue(`\nš ${file}`));
|
|
628
|
-
|
|
629
|
-
const choices = improvements.map(imp => ({
|
|
630
|
-
name: `${imp.pattern}: ${imp.description}`,
|
|
631
|
-
value: imp.id,
|
|
632
|
-
checked: imp.confidence >= 0.9 // Pre-check high confidence
|
|
633
|
-
}));
|
|
634
|
-
|
|
635
|
-
const { selected } = await inquirer.prompt([{
|
|
636
|
-
type: 'checkbox',
|
|
637
|
-
name: 'selected',
|
|
638
|
-
message: 'Select improvements to apply:',
|
|
639
|
-
choices,
|
|
640
|
-
pageSize: 10
|
|
641
|
-
}]);
|
|
642
|
-
|
|
643
|
-
if (selected.length > 0) {
|
|
644
|
-
const selectedImprovements = improvements.filter(
|
|
645
|
-
imp => selected.includes(imp.id)
|
|
646
|
-
);
|
|
647
|
-
|
|
648
|
-
try {
|
|
649
|
-
const result = await this.codeQualityImprover.applyImprovements(
|
|
650
|
-
path.join(this.rootPath, file),
|
|
651
|
-
selectedImprovements
|
|
652
|
-
);
|
|
653
|
-
|
|
654
|
-
if (result.success) {
|
|
655
|
-
console.log(chalk.green(`ā
Applied ${result.appliedCount} improvements`));
|
|
656
|
-
this.appliedImprovements.push(...selectedImprovements);
|
|
657
|
-
} else {
|
|
658
|
-
console.error(chalk.red(`Failed: ${result.error}`));
|
|
659
|
-
}
|
|
660
|
-
} catch (error) {
|
|
661
|
-
console.error(chalk.red(`Error: ${error.message}`));
|
|
662
|
-
}
|
|
663
|
-
}
|
|
664
|
-
}
|
|
665
|
-
}
|
|
666
|
-
|
|
667
|
-
groupImprovementsByFile() {
|
|
668
|
-
const byFile = {};
|
|
669
|
-
|
|
670
|
-
for (const improvement of this.improvements) {
|
|
671
|
-
if (!byFile[improvement.file]) {
|
|
672
|
-
byFile[improvement.file] = [];
|
|
673
|
-
}
|
|
674
|
-
byFile[improvement.file].push(improvement);
|
|
675
|
-
}
|
|
676
|
-
|
|
677
|
-
return byFile;
|
|
678
|
-
}
|
|
679
|
-
|
|
680
|
-
displayImprovement(improvement) {
|
|
681
|
-
const confidenceColor = improvement.confidence >= 0.9 ? chalk.green :
|
|
682
|
-
improvement.confidence >= 0.7 ? chalk.yellow :
|
|
683
|
-
chalk.gray;
|
|
684
|
-
|
|
685
|
-
console.log(`\n${chalk.gray(improvement.id)} ${chalk.blue(`[${improvement.pattern}]`)} ${improvement.description}`);
|
|
686
|
-
console.log(` ${chalk.gray('Confidence:')} ${confidenceColor((improvement.confidence * 100).toFixed(0) + '%')}`);
|
|
687
|
-
console.log(` ${chalk.gray('Location:')} Line ${improvement.location.start}${improvement.location.end !== improvement.location.start ? `-${improvement.location.end}` : ''}`);
|
|
688
|
-
|
|
689
|
-
if (improvement.details) {
|
|
690
|
-
console.log(` ${chalk.gray('Details:')} ${improvement.details}`);
|
|
691
|
-
}
|
|
692
|
-
|
|
693
|
-
if (improvement.preview) {
|
|
694
|
-
console.log(chalk.gray(' Preview:'));
|
|
695
|
-
console.log(chalk.red(` - ${improvement.preview.before}`));
|
|
696
|
-
console.log(chalk.green(` + ${improvement.preview.after}`));
|
|
697
|
-
}
|
|
698
|
-
}
|
|
699
|
-
|
|
700
|
-
async generateReport(reportPath) {
|
|
701
|
-
console.log(chalk.blue('\nš¤ Generating quality report...'));
|
|
702
|
-
|
|
703
|
-
const report = {
|
|
704
|
-
version: 1,
|
|
705
|
-
timestamp: new Date().toISOString(),
|
|
706
|
-
summary: {
|
|
707
|
-
filesAnalyzed: new Set(this.improvements.map(i => i.file)).size,
|
|
708
|
-
totalImprovements: this.improvements.length,
|
|
709
|
-
appliedImprovements: this.appliedImprovements.length,
|
|
710
|
-
patterns: this.getPatternStatistics()
|
|
711
|
-
},
|
|
712
|
-
improvements: this.improvements.map(imp => ({
|
|
713
|
-
...imp,
|
|
714
|
-
applied: this.appliedImprovements.some(a => a.id === imp.id)
|
|
715
|
-
})),
|
|
716
|
-
files: this.getFileStatistics()
|
|
717
|
-
};
|
|
718
|
-
|
|
719
|
-
await fs.writeFile(reportPath, JSON.stringify(report, null, 2));
|
|
720
|
-
console.log(chalk.green(`ā
Report generated: ${reportPath}`));
|
|
721
|
-
}
|
|
722
|
-
|
|
723
|
-
getPatternStatistics() {
|
|
724
|
-
const stats = {};
|
|
725
|
-
|
|
726
|
-
for (const improvement of this.improvements) {
|
|
727
|
-
if (!stats[improvement.pattern]) {
|
|
728
|
-
stats[improvement.pattern] = {
|
|
729
|
-
total: 0,
|
|
730
|
-
applied: 0,
|
|
731
|
-
averageConfidence: 0
|
|
732
|
-
};
|
|
733
|
-
}
|
|
734
|
-
|
|
735
|
-
stats[improvement.pattern].total++;
|
|
736
|
-
stats[improvement.pattern].averageConfidence += improvement.confidence;
|
|
737
|
-
|
|
738
|
-
if (this.appliedImprovements.some(a => a.id === improvement.id)) {
|
|
739
|
-
stats[improvement.pattern].applied++;
|
|
740
|
-
}
|
|
741
|
-
}
|
|
742
|
-
|
|
743
|
-
// Calculate averages
|
|
744
|
-
for (const pattern of Object.keys(stats)) {
|
|
745
|
-
stats[pattern].averageConfidence /= stats[pattern].total;
|
|
746
|
-
}
|
|
747
|
-
|
|
748
|
-
return stats;
|
|
749
|
-
}
|
|
750
|
-
|
|
751
|
-
getFileStatistics() {
|
|
752
|
-
const fileStats = {};
|
|
753
|
-
|
|
754
|
-
for (const improvement of this.improvements) {
|
|
755
|
-
if (!fileStats[improvement.file]) {
|
|
756
|
-
fileStats[improvement.file] = {
|
|
757
|
-
improvements: 0,
|
|
758
|
-
applied: 0,
|
|
759
|
-
patterns: new Set()
|
|
760
|
-
};
|
|
761
|
-
}
|
|
762
|
-
|
|
763
|
-
fileStats[improvement.file].improvements++;
|
|
764
|
-
fileStats[improvement.file].patterns.add(improvement.pattern);
|
|
765
|
-
|
|
766
|
-
if (this.appliedImprovements.some(a => a.id === improvement.id)) {
|
|
767
|
-
fileStats[improvement.file].applied++;
|
|
768
|
-
}
|
|
769
|
-
}
|
|
770
|
-
|
|
771
|
-
// Convert sets to arrays
|
|
772
|
-
for (const file of Object.keys(fileStats)) {
|
|
773
|
-
fileStats[file].patterns = Array.from(fileStats[file].patterns);
|
|
774
|
-
}
|
|
775
|
-
|
|
776
|
-
return fileStats;
|
|
777
|
-
}
|
|
778
|
-
|
|
779
|
-
displayStatistics() {
|
|
780
|
-
const patternStats = this.getPatternStatistics();
|
|
781
|
-
|
|
782
|
-
console.log(chalk.blue('\nš Pattern Statistics:'));
|
|
783
|
-
|
|
784
|
-
const sortedPatterns = Object.entries(patternStats)
|
|
785
|
-
.sort(([,a], [,b]) => b.total - a.total);
|
|
786
|
-
|
|
787
|
-
for (const [pattern, stats] of sortedPatterns) {
|
|
788
|
-
console.log(` ${pattern}: ${stats.total} improvements (${(stats.averageConfidence * 100).toFixed(0)}% avg confidence)`);
|
|
789
|
-
}
|
|
790
|
-
}
|
|
791
|
-
}
|
|
792
|
-
|
|
793
|
-
module.exports = ImproveCodeQualityTask;
|
|
794
|
-
```
|
|
795
|
-
|
|
796
|
-
## Integration Points
|
|
797
|
-
|
|
798
|
-
### Code Quality Improver
|
|
799
|
-
- Core improvement engine
|
|
800
|
-
- Pattern-based analysis
|
|
801
|
-
- Safe transformation application
|
|
802
|
-
- Multi-tool integration
|
|
803
|
-
|
|
804
|
-
### Tool Integration
|
|
805
|
-
- ESLint for linting fixes
|
|
806
|
-
- Prettier for formatting
|
|
807
|
-
- jscodeshift for AST transformations
|
|
808
|
-
- Custom patterns for specific improvements
|
|
809
|
-
|
|
810
|
-
### Configuration System
|
|
811
|
-
- Pattern-specific configurations
|
|
812
|
-
- Custom rule definitions
|
|
813
|
-
- Threshold management
|
|
814
|
-
- Tool preferences
|
|
815
|
-
|
|
816
|
-
### Backup System
|
|
817
|
-
- Automatic backup creation
|
|
818
|
-
- Timestamped storage
|
|
819
|
-
- Easy rollback capability
|
|
820
|
-
- Cleanup management
|
|
821
|
-
|
|
822
|
-
## Improvement Workflow
|
|
823
|
-
|
|
824
|
-
### Analysis Phase
|
|
825
|
-
1. Parse source code
|
|
826
|
-
2. Run pattern analyzers
|
|
827
|
-
3. Calculate confidence scores
|
|
828
|
-
4. Generate improvement suggestions
|
|
829
|
-
5. Filter by threshold
|
|
830
|
-
|
|
831
|
-
### Review Phase
|
|
832
|
-
1. Display improvements
|
|
833
|
-
2. Group by file/pattern
|
|
834
|
-
3. Show confidence levels
|
|
835
|
-
4. Provide previews
|
|
836
|
-
5. Allow selection
|
|
837
|
-
|
|
838
|
-
### Application Phase
|
|
839
|
-
1. Create backups
|
|
840
|
-
2. Apply transformations
|
|
841
|
-
3. Validate results
|
|
842
|
-
4. Update files
|
|
843
|
-
5. Track changes
|
|
844
|
-
|
|
845
|
-
## Best Practices
|
|
846
|
-
|
|
847
|
-
### Safe Improvements
|
|
848
|
-
- Always backup before changes
|
|
849
|
-
- Validate syntax after transformation
|
|
850
|
-
- Test code after improvements
|
|
851
|
-
- Use conservative thresholds
|
|
852
|
-
- Apply incrementally
|
|
853
|
-
|
|
854
|
-
### Pattern Selection
|
|
855
|
-
- Start with safe patterns (formatting)
|
|
856
|
-
- Progress to more complex transformations
|
|
857
|
-
- Respect project conventions
|
|
858
|
-
- Consider team preferences
|
|
859
|
-
- Monitor results
|
|
860
|
-
|
|
861
|
-
### Quality Tracking
|
|
862
|
-
- Generate regular reports
|
|
863
|
-
- Track improvement trends
|
|
864
|
-
- Measure code quality metrics
|
|
865
|
-
- Identify problem areas
|
|
866
|
-
- Celebrate progress
|
|
867
|
-
|
|
868
|
-
## Security Considerations
|
|
869
|
-
- Validate transformation safety
|
|
870
|
-
- Prevent code injection
|
|
871
|
-
- Maintain functionality
|
|
872
|
-
- Preserve sensitive patterns
|
|
1
|
+
---
|
|
2
|
+
|
|
3
|
+
## Execution Modes
|
|
4
|
+
|
|
5
|
+
**Choose your execution mode:**
|
|
6
|
+
|
|
7
|
+
### 1. YOLO Mode - Fast, Autonomous (0-1 prompts)
|
|
8
|
+
- Autonomous decision making with logging
|
|
9
|
+
- Minimal user interaction
|
|
10
|
+
- **Best for:** Simple, deterministic tasks
|
|
11
|
+
|
|
12
|
+
### 2. Interactive Mode - Balanced, Educational (5-10 prompts) **[DEFAULT]**
|
|
13
|
+
- Explicit decision checkpoints
|
|
14
|
+
- Educational explanations
|
|
15
|
+
- **Best for:** Learning, complex decisions
|
|
16
|
+
|
|
17
|
+
### 3. Pre-Flight Planning - Comprehensive Upfront Planning
|
|
18
|
+
- Task analysis phase (identify all ambiguities)
|
|
19
|
+
- Zero ambiguity execution
|
|
20
|
+
- **Best for:** Ambiguous requirements, critical work
|
|
21
|
+
|
|
22
|
+
**Parameter:** `mode` (optional, default: `interactive`)
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Task Definition (AIOS Task Format V1.0)
|
|
27
|
+
|
|
28
|
+
```yaml
|
|
29
|
+
task: devImproveCodeQuality()
|
|
30
|
+
responsƔvel: Dex (Builder)
|
|
31
|
+
responsavel_type: Agente
|
|
32
|
+
atomic_layer: Strategy
|
|
33
|
+
|
|
34
|
+
**Entrada:**
|
|
35
|
+
- campo: task
|
|
36
|
+
tipo: string
|
|
37
|
+
origem: User Input
|
|
38
|
+
obrigatório: true
|
|
39
|
+
validação: Must be registered task
|
|
40
|
+
|
|
41
|
+
- campo: parameters
|
|
42
|
+
tipo: object
|
|
43
|
+
origem: User Input
|
|
44
|
+
obrigatório: false
|
|
45
|
+
validação: Valid task parameters
|
|
46
|
+
|
|
47
|
+
- campo: mode
|
|
48
|
+
tipo: string
|
|
49
|
+
origem: User Input
|
|
50
|
+
obrigatório: false
|
|
51
|
+
validação: yolo|interactive|pre-flight
|
|
52
|
+
|
|
53
|
+
**SaĆda:**
|
|
54
|
+
- campo: execution_result
|
|
55
|
+
tipo: object
|
|
56
|
+
destino: Memory
|
|
57
|
+
persistido: false
|
|
58
|
+
|
|
59
|
+
- campo: logs
|
|
60
|
+
tipo: array
|
|
61
|
+
destino: File (.ai/logs/*)
|
|
62
|
+
persistido: true
|
|
63
|
+
|
|
64
|
+
- campo: state
|
|
65
|
+
tipo: object
|
|
66
|
+
destino: State management
|
|
67
|
+
persistido: true
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Pre-Conditions
|
|
73
|
+
|
|
74
|
+
**Purpose:** Validate prerequisites BEFORE task execution (blocking)
|
|
75
|
+
|
|
76
|
+
**Checklist:**
|
|
77
|
+
|
|
78
|
+
```yaml
|
|
79
|
+
pre-conditions:
|
|
80
|
+
- [ ] Task is registered; required parameters provided; dependencies met
|
|
81
|
+
tipo: pre-condition
|
|
82
|
+
blocker: true
|
|
83
|
+
validação: |
|
|
84
|
+
Check task is registered; required parameters provided; dependencies met
|
|
85
|
+
error_message: "Pre-condition failed: Task is registered; required parameters provided; dependencies met"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Post-Conditions
|
|
91
|
+
|
|
92
|
+
**Purpose:** Validate execution success AFTER task completes
|
|
93
|
+
|
|
94
|
+
**Checklist:**
|
|
95
|
+
|
|
96
|
+
```yaml
|
|
97
|
+
post-conditions:
|
|
98
|
+
- [ ] Task completed; exit code 0; expected outputs created
|
|
99
|
+
tipo: post-condition
|
|
100
|
+
blocker: true
|
|
101
|
+
validação: |
|
|
102
|
+
Verify task completed; exit code 0; expected outputs created
|
|
103
|
+
error_message: "Post-condition failed: Task completed; exit code 0; expected outputs created"
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Acceptance Criteria
|
|
109
|
+
|
|
110
|
+
**Purpose:** Definitive pass/fail criteria for task completion
|
|
111
|
+
|
|
112
|
+
**Checklist:**
|
|
113
|
+
|
|
114
|
+
```yaml
|
|
115
|
+
acceptance-criteria:
|
|
116
|
+
- [ ] Task completed as expected; side effects documented
|
|
117
|
+
tipo: acceptance-criterion
|
|
118
|
+
blocker: true
|
|
119
|
+
validação: |
|
|
120
|
+
Assert task completed as expected; side effects documented
|
|
121
|
+
error_message: "Acceptance criterion not met: Task completed as expected; side effects documented"
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Tools
|
|
127
|
+
|
|
128
|
+
**External/shared resources used by this task:**
|
|
129
|
+
|
|
130
|
+
- **Tool:** task-runner
|
|
131
|
+
- **Purpose:** Task execution and orchestration
|
|
132
|
+
- **Source:** .aios-core/core/task-runner.js
|
|
133
|
+
|
|
134
|
+
- **Tool:** logger
|
|
135
|
+
- **Purpose:** Execution logging and error tracking
|
|
136
|
+
- **Source:** .aios-core/utils/logger.js
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Scripts
|
|
141
|
+
|
|
142
|
+
**Agent-specific code for this task:**
|
|
143
|
+
|
|
144
|
+
- **Script:** execute-task.js
|
|
145
|
+
- **Purpose:** Generic task execution wrapper
|
|
146
|
+
- **Language:** JavaScript
|
|
147
|
+
- **Location:** .aios-core/scripts/execute-task.js
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Error Handling
|
|
152
|
+
|
|
153
|
+
**Strategy:** retry
|
|
154
|
+
|
|
155
|
+
**Common Errors:**
|
|
156
|
+
|
|
157
|
+
1. **Error:** Task Not Found
|
|
158
|
+
- **Cause:** Specified task not registered in system
|
|
159
|
+
- **Resolution:** Verify task name and registration
|
|
160
|
+
- **Recovery:** List available tasks, suggest similar
|
|
161
|
+
|
|
162
|
+
2. **Error:** Invalid Parameters
|
|
163
|
+
- **Cause:** Task parameters do not match expected schema
|
|
164
|
+
- **Resolution:** Validate parameters against task definition
|
|
165
|
+
- **Recovery:** Provide parameter template, reject execution
|
|
166
|
+
|
|
167
|
+
3. **Error:** Execution Timeout
|
|
168
|
+
- **Cause:** Task exceeds maximum execution time
|
|
169
|
+
- **Resolution:** Optimize task or increase timeout
|
|
170
|
+
- **Recovery:** Kill task, cleanup resources, log state
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## Performance
|
|
175
|
+
|
|
176
|
+
**Expected Metrics:**
|
|
177
|
+
|
|
178
|
+
```yaml
|
|
179
|
+
duration_expected: 5-20 min (estimated)
|
|
180
|
+
cost_estimated: $0.003-0.015
|
|
181
|
+
token_usage: ~2,000-8,000 tokens
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**Optimization Notes:**
|
|
185
|
+
- Iterative analysis with depth limits; cache intermediate results; batch similar operations
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## Metadata
|
|
190
|
+
|
|
191
|
+
```yaml
|
|
192
|
+
story: N/A
|
|
193
|
+
version: 1.0.0
|
|
194
|
+
dependencies:
|
|
195
|
+
- N/A
|
|
196
|
+
tags:
|
|
197
|
+
- development
|
|
198
|
+
- code
|
|
199
|
+
updated_at: 2025-11-17
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
# No checklists needed - this task performs automated code refactoring, validation is through linting and testing
|
|
205
|
+
tools:
|
|
206
|
+
- github-cli
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
# Improve Code Quality - AIOS Developer Task
|
|
210
|
+
|
|
211
|
+
## Purpose
|
|
212
|
+
Automatically improve code quality across multiple dimensions including formatting, linting, modern syntax, and best practices.
|
|
213
|
+
|
|
214
|
+
## Command Pattern
|
|
215
|
+
```
|
|
216
|
+
*improve-code-quality <path> [options]
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## Parameters
|
|
220
|
+
- `path`: File or directory path to improve
|
|
221
|
+
- `options`: Code improvement configuration
|
|
222
|
+
|
|
223
|
+
### Options
|
|
224
|
+
- `--patterns <types>`: Comma-separated improvement patterns to apply
|
|
225
|
+
- `--auto-fix`: Automatically apply all safe improvements
|
|
226
|
+
- `--preview`: Show changes before applying
|
|
227
|
+
- `--exclude <patterns>`: Exclude file patterns (e.g., "*.test.js")
|
|
228
|
+
- `--recursive`: Process directories recursively
|
|
229
|
+
- `--config <file>`: Use custom configuration file
|
|
230
|
+
- `--report <file>`: Generate improvement report
|
|
231
|
+
- `--threshold <level>`: Minimum confidence for auto-fix (0-1, default: 0.8)
|
|
232
|
+
- `--backup`: Create backups before applying changes
|
|
233
|
+
|
|
234
|
+
## Improvement Patterns
|
|
235
|
+
- `formatting`: Code formatting with Prettier
|
|
236
|
+
- `linting`: ESLint fixes and rule compliance
|
|
237
|
+
- `modern-syntax`: ES6+ syntax upgrades
|
|
238
|
+
- `imports`: Import organization and optimization
|
|
239
|
+
- `dead-code`: Dead code elimination
|
|
240
|
+
- `naming`: Naming convention improvements
|
|
241
|
+
- `error-handling`: Error handling patterns
|
|
242
|
+
- `async-await`: Promise to async/await conversion
|
|
243
|
+
- `type-safety`: Type annotations and safety
|
|
244
|
+
- `documentation`: JSDoc generation and updates
|
|
245
|
+
|
|
246
|
+
## Examples
|
|
247
|
+
```bash
|
|
248
|
+
# Improve single file with preview
|
|
249
|
+
*improve-code-quality aios-core/scripts/legacy-utility.js --preview
|
|
250
|
+
|
|
251
|
+
# Auto-fix all safe improvements in directory
|
|
252
|
+
*improve-code-quality aios-core/agents --auto-fix --recursive
|
|
253
|
+
|
|
254
|
+
# Apply specific patterns
|
|
255
|
+
*improve-code-quality aios-core/utils --patterns formatting,modern-syntax,async-await
|
|
256
|
+
|
|
257
|
+
# Generate improvement report
|
|
258
|
+
*improve-code-quality . --recursive --report quality-report.json
|
|
259
|
+
|
|
260
|
+
# Use custom configuration
|
|
261
|
+
*improve-code-quality aios-core --config .aios/quality-config.json
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
## Implementation
|
|
265
|
+
|
|
266
|
+
```javascript
|
|
267
|
+
const fs = require('fs').promises;
|
|
268
|
+
const path = require('path');
|
|
269
|
+
const chalk = require('chalk');
|
|
270
|
+
const inquirer = require('inquirer');
|
|
271
|
+
const glob = require('glob').promises;
|
|
272
|
+
|
|
273
|
+
class ImproveCodeQualityTask {
|
|
274
|
+
constructor() {
|
|
275
|
+
this.taskName = 'improve-code-quality';
|
|
276
|
+
this.description = 'Automatically improve code quality';
|
|
277
|
+
this.rootPath = process.cwd();
|
|
278
|
+
this.codeQualityImprover = null;
|
|
279
|
+
this.improvements = [];
|
|
280
|
+
this.appliedImprovements = [];
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
async execute(params) {
|
|
284
|
+
try {
|
|
285
|
+
console.log(chalk.blue('šØ AIOS Code Quality Improvement'));
|
|
286
|
+
console.log(chalk.gray('Analyzing and improving code quality\n'));
|
|
287
|
+
|
|
288
|
+
// Parse parameters
|
|
289
|
+
const config = await this.parseParameters(params);
|
|
290
|
+
|
|
291
|
+
// Initialize dependencies
|
|
292
|
+
await this.initializeDependencies();
|
|
293
|
+
|
|
294
|
+
// Get files to improve
|
|
295
|
+
const files = await this.getFilesToImprove(config);
|
|
296
|
+
|
|
297
|
+
if (files.length === 0) {
|
|
298
|
+
console.log(chalk.yellow('No files found to improve'));
|
|
299
|
+
return { success: true, improvements: [] };
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
console.log(chalk.gray(`Found ${files.length} files to analyze\n`));
|
|
303
|
+
|
|
304
|
+
// Analyze files for improvements
|
|
305
|
+
await this.analyzeFiles(files, config);
|
|
306
|
+
|
|
307
|
+
// Execute based on mode
|
|
308
|
+
if (config.autoFix) {
|
|
309
|
+
await this.applyImprovements(config);
|
|
310
|
+
} else if (config.preview) {
|
|
311
|
+
await this.previewImprovements(config);
|
|
312
|
+
} else {
|
|
313
|
+
await this.interactiveImprovement(config);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
// Generate report if requested
|
|
317
|
+
if (config.report) {
|
|
318
|
+
await this.generateReport(config.report);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
return {
|
|
322
|
+
success: true,
|
|
323
|
+
filesAnalyzed: files.length,
|
|
324
|
+
totalImprovements: this.improvements.length,
|
|
325
|
+
appliedImprovements: this.appliedImprovements.length
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
} catch (error) {
|
|
329
|
+
console.error(chalk.red(`\nā Code quality improvement failed: ${error.message}`));
|
|
330
|
+
throw error;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
async parseParameters(params) {
|
|
335
|
+
if (params.length < 1) {
|
|
336
|
+
throw new Error('Usage: *improve-code-quality <path> [options]');
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
const config = {
|
|
340
|
+
targetPath: params[0],
|
|
341
|
+
patterns: ['formatting', 'linting', 'modern-syntax', 'imports', 'naming'],
|
|
342
|
+
autoFix: false,
|
|
343
|
+
preview: false,
|
|
344
|
+
exclude: [],
|
|
345
|
+
recursive: false,
|
|
346
|
+
configFile: null,
|
|
347
|
+
report: null,
|
|
348
|
+
threshold: 0.8,
|
|
349
|
+
backup: true
|
|
350
|
+
};
|
|
351
|
+
|
|
352
|
+
// Parse options
|
|
353
|
+
for (let i = 1; i < params.length; i++) {
|
|
354
|
+
const param = params[i];
|
|
355
|
+
|
|
356
|
+
if (param === '--auto-fix') {
|
|
357
|
+
config.autoFix = true;
|
|
358
|
+
} else if (param === '--preview') {
|
|
359
|
+
config.preview = true;
|
|
360
|
+
} else if (param === '--recursive') {
|
|
361
|
+
config.recursive = true;
|
|
362
|
+
} else if (param === '--backup') {
|
|
363
|
+
config.backup = true;
|
|
364
|
+
} else if (param.startsWith('--patterns') && params[i + 1]) {
|
|
365
|
+
config.patterns = params[++i].split(',').map(p => p.trim());
|
|
366
|
+
} else if (param.startsWith('--exclude') && params[i + 1]) {
|
|
367
|
+
config.exclude = params[++i].split(',').map(e => e.trim());
|
|
368
|
+
} else if (param.startsWith('--config') && params[i + 1]) {
|
|
369
|
+
config.configFile = params[++i];
|
|
370
|
+
} else if (param.startsWith('--report') && params[i + 1]) {
|
|
371
|
+
config.report = params[++i];
|
|
372
|
+
} else if (param.startsWith('--threshold') && params[i + 1]) {
|
|
373
|
+
config.threshold = parseFloat(params[++i]);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
// Load custom configuration if provided
|
|
378
|
+
if (config.configFile) {
|
|
379
|
+
await this.loadCustomConfig(config);
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
// Validate threshold
|
|
383
|
+
if (config.threshold < 0 || config.threshold > 1) {
|
|
384
|
+
throw new Error('Threshold must be between 0 and 1');
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
return config;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
async loadCustomConfig(config) {
|
|
391
|
+
try {
|
|
392
|
+
const content = await fs.readFile(config.configFile, 'utf-8');
|
|
393
|
+
const customConfig = JSON.parse(content);
|
|
394
|
+
|
|
395
|
+
// Merge custom config
|
|
396
|
+
Object.assign(config, {
|
|
397
|
+
patterns: customConfig.patterns || config.patterns,
|
|
398
|
+
threshold: customConfig.threshold || config.threshold,
|
|
399
|
+
exclude: customConfig.exclude || config.exclude,
|
|
400
|
+
// Add pattern-specific configurations
|
|
401
|
+
patternConfig: customConfig.patternConfig || {}
|
|
402
|
+
});
|
|
403
|
+
} catch (error) {
|
|
404
|
+
console.warn(chalk.yellow(`Failed to load custom config: ${error.message}`));
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
async initializeDependencies() {
|
|
409
|
+
try {
|
|
410
|
+
const CodeQualityImprover = require('../scripts/code-quality-improver');
|
|
411
|
+
this.codeQualityImprover = new CodeQualityImprover({ rootPath: this.rootPath });
|
|
412
|
+
|
|
413
|
+
} catch (error) {
|
|
414
|
+
throw new Error(`Failed to initialize dependencies: ${error.message}`);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
async getFilesToImprove(config) {
|
|
419
|
+
const targetPath = path.resolve(this.rootPath, config.targetPath);
|
|
420
|
+
const files = [];
|
|
421
|
+
|
|
422
|
+
try {
|
|
423
|
+
const stats = await fs.stat(targetPath);
|
|
424
|
+
|
|
425
|
+
if (stats.isFile()) {
|
|
426
|
+
// Single file
|
|
427
|
+
if (this.shouldProcessFile(targetPath, config)) {
|
|
428
|
+
files.push(targetPath);
|
|
429
|
+
}
|
|
430
|
+
} else if (stats.isDirectory()) {
|
|
431
|
+
// Directory
|
|
432
|
+
const pattern = config.recursive ? '**/*.{js,jsx,ts,tsx}' : '*.{js,jsx,ts,tsx}';
|
|
433
|
+
const globPattern = path.join(targetPath, pattern);
|
|
434
|
+
|
|
435
|
+
const matches = await glob(globPattern, {
|
|
436
|
+
ignore: config.exclude.map(e => path.join(targetPath, '**', e)),
|
|
437
|
+
nodir: true
|
|
438
|
+
});
|
|
439
|
+
|
|
440
|
+
for (const match of matches) {
|
|
441
|
+
if (this.shouldProcessFile(match, config)) {
|
|
442
|
+
files.push(match);
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
} catch (error) {
|
|
447
|
+
console.warn(chalk.yellow(`Cannot access ${targetPath}: ${error.message}`));
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
return files;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
shouldProcessFile(filePath, config) {
|
|
454
|
+
// Skip test files unless explicitly included
|
|
455
|
+
if (!config.includeTests && (filePath.includes('.test.') || filePath.includes('.spec.'))) {
|
|
456
|
+
return false;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
// Skip build artifacts
|
|
460
|
+
if (filePath.includes('/dist/') || filePath.includes('/build/')) {
|
|
461
|
+
return false;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
// Skip node_modules
|
|
465
|
+
if (filePath.includes('node_modules')) {
|
|
466
|
+
return false;
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
// Check file extension
|
|
470
|
+
const ext = path.extname(filePath);
|
|
471
|
+
return ['.js', '.jsx', '.ts', '.tsx'].includes(ext);
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
async analyzeFiles(files, config) {
|
|
475
|
+
console.log(chalk.blue('š Analyzing code quality...'));
|
|
476
|
+
|
|
477
|
+
const progressInterval = Math.max(1, Math.floor(files.length / 20));
|
|
478
|
+
|
|
479
|
+
for (let i = 0; i < files.length; i++) {
|
|
480
|
+
const file = files[i];
|
|
481
|
+
|
|
482
|
+
try {
|
|
483
|
+
// Create backup if requested
|
|
484
|
+
if (config.backup) {
|
|
485
|
+
await this.createBackup(file);
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
// Analyze file for improvements
|
|
489
|
+
const analysis = await this.codeQualityImprover.analyzeFile(file, {
|
|
490
|
+
patterns: config.patterns,
|
|
491
|
+
patternConfig: config.patternConfig
|
|
492
|
+
});
|
|
493
|
+
|
|
494
|
+
if (analysis.improvements && analysis.improvements.length > 0) {
|
|
495
|
+
// Filter by confidence threshold
|
|
496
|
+
const filteredImprovements = analysis.improvements.filter(
|
|
497
|
+
imp => imp.confidence >= config.threshold
|
|
498
|
+
);
|
|
499
|
+
|
|
500
|
+
// Add to improvements list
|
|
501
|
+
for (const improvement of filteredImprovements) {
|
|
502
|
+
improvement.file = path.relative(this.rootPath, file);
|
|
503
|
+
improvement.id = `imp-${this.improvements.length + 1}`;
|
|
504
|
+
this.improvements.push(improvement);
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
// Show progress
|
|
509
|
+
if (i % progressInterval === 0) {
|
|
510
|
+
const progress = Math.floor((i / files.length) * 100);
|
|
511
|
+
process.stdout.write(`\rProgress: ${progress}%`);
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
} catch (error) {
|
|
515
|
+
console.warn(chalk.yellow(`\nFailed to analyze ${file}: ${error.message}`));
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
console.log('\rProgress: 100%\n');
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
async createBackup(filePath) {
|
|
523
|
+
const backupDir = path.join(this.rootPath, '.aios', 'backups', 'code-quality');
|
|
524
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
525
|
+
const relativePath = path.relative(this.rootPath, filePath);
|
|
526
|
+
const backupPath = path.join(backupDir, timestamp, relativePath);
|
|
527
|
+
|
|
528
|
+
await fs.mkdir(path.dirname(backupPath), { recursive: true });
|
|
529
|
+
await fs.copyFile(filePath, backupPath);
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
async applyImprovements(config) {
|
|
533
|
+
console.log(chalk.blue('\nš§ Applying improvements...'));
|
|
534
|
+
|
|
535
|
+
if (this.improvements.length === 0) {
|
|
536
|
+
console.log(chalk.yellow('No improvements to apply'));
|
|
537
|
+
return;
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
// Group improvements by file
|
|
541
|
+
const byFile = this.groupImprovementsByFile();
|
|
542
|
+
|
|
543
|
+
let applied = 0;
|
|
544
|
+
let failed = 0;
|
|
545
|
+
|
|
546
|
+
for (const [file, improvements] of Object.entries(byFile)) {
|
|
547
|
+
try {
|
|
548
|
+
console.log(chalk.gray(`\nImproving ${file}...`));
|
|
549
|
+
|
|
550
|
+
const result = await this.codeQualityImprover.applyImprovements(
|
|
551
|
+
path.join(this.rootPath, file),
|
|
552
|
+
improvements
|
|
553
|
+
);
|
|
554
|
+
|
|
555
|
+
if (result.success) {
|
|
556
|
+
applied += result.appliedCount;
|
|
557
|
+
this.appliedImprovements.push(...improvements.filter(
|
|
558
|
+
imp => result.applied.includes(imp.id)
|
|
559
|
+
));
|
|
560
|
+
|
|
561
|
+
// Show applied improvements
|
|
562
|
+
for (const improvement of improvements) {
|
|
563
|
+
if (result.applied.includes(improvement.id)) {
|
|
564
|
+
console.log(chalk.green(` ā
${improvement.description}`));
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
} else {
|
|
568
|
+
failed++;
|
|
569
|
+
console.error(chalk.red(` Failed: ${result.error}`));
|
|
570
|
+
}
|
|
571
|
+
} catch (error) {
|
|
572
|
+
failed++;
|
|
573
|
+
console.error(chalk.red(` Error: ${error.message}`));
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
// Show summary
|
|
578
|
+
console.log(chalk.blue('\nš Improvement Summary:'));
|
|
579
|
+
console.log(chalk.green(` ā
Applied: ${applied}`));
|
|
580
|
+
if (failed > 0) {
|
|
581
|
+
console.log(chalk.red(` ā Failed: ${failed}`));
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
async previewImprovements(config) {
|
|
586
|
+
if (this.improvements.length === 0) {
|
|
587
|
+
console.log(chalk.yellow('No improvements found'));
|
|
588
|
+
return;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
console.log(chalk.blue(`\nš Found ${this.improvements.length} improvements:\n`));
|
|
592
|
+
|
|
593
|
+
// Group by file
|
|
594
|
+
const byFile = this.groupImprovementsByFile();
|
|
595
|
+
|
|
596
|
+
for (const [file, improvements] of Object.entries(byFile)) {
|
|
597
|
+
console.log(chalk.blue(`\nš ${file}`));
|
|
598
|
+
console.log(chalk.gray('ā'.repeat(50)));
|
|
599
|
+
|
|
600
|
+
for (const improvement of improvements) {
|
|
601
|
+
this.displayImprovement(improvement);
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
// Show pattern statistics
|
|
606
|
+
this.displayStatistics();
|
|
607
|
+
|
|
608
|
+
// Show next steps
|
|
609
|
+
console.log(chalk.blue('\nš Next Steps:'));
|
|
610
|
+
console.log(`1. Apply all improvements: *improve-code-quality ${config.targetPath} --auto-fix`);
|
|
611
|
+
console.log(`2. Interactive selection: *improve-code-quality ${config.targetPath}`);
|
|
612
|
+
console.log(`3. Generate report: *improve-code-quality ${config.targetPath} --report quality-report.json`);
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
async interactiveImprovement(config) {
|
|
616
|
+
if (this.improvements.length === 0) {
|
|
617
|
+
console.log(chalk.yellow('No improvements found'));
|
|
618
|
+
return;
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
console.log(chalk.blue(`\nš Found ${this.improvements.length} improvements`));
|
|
622
|
+
|
|
623
|
+
// Group by file for better UX
|
|
624
|
+
const byFile = this.groupImprovementsByFile();
|
|
625
|
+
|
|
626
|
+
for (const [file, improvements] of Object.entries(byFile)) {
|
|
627
|
+
console.log(chalk.blue(`\nš ${file}`));
|
|
628
|
+
|
|
629
|
+
const choices = improvements.map(imp => ({
|
|
630
|
+
name: `${imp.pattern}: ${imp.description}`,
|
|
631
|
+
value: imp.id,
|
|
632
|
+
checked: imp.confidence >= 0.9 // Pre-check high confidence
|
|
633
|
+
}));
|
|
634
|
+
|
|
635
|
+
const { selected } = await inquirer.prompt([{
|
|
636
|
+
type: 'checkbox',
|
|
637
|
+
name: 'selected',
|
|
638
|
+
message: 'Select improvements to apply:',
|
|
639
|
+
choices,
|
|
640
|
+
pageSize: 10
|
|
641
|
+
}]);
|
|
642
|
+
|
|
643
|
+
if (selected.length > 0) {
|
|
644
|
+
const selectedImprovements = improvements.filter(
|
|
645
|
+
imp => selected.includes(imp.id)
|
|
646
|
+
);
|
|
647
|
+
|
|
648
|
+
try {
|
|
649
|
+
const result = await this.codeQualityImprover.applyImprovements(
|
|
650
|
+
path.join(this.rootPath, file),
|
|
651
|
+
selectedImprovements
|
|
652
|
+
);
|
|
653
|
+
|
|
654
|
+
if (result.success) {
|
|
655
|
+
console.log(chalk.green(`ā
Applied ${result.appliedCount} improvements`));
|
|
656
|
+
this.appliedImprovements.push(...selectedImprovements);
|
|
657
|
+
} else {
|
|
658
|
+
console.error(chalk.red(`Failed: ${result.error}`));
|
|
659
|
+
}
|
|
660
|
+
} catch (error) {
|
|
661
|
+
console.error(chalk.red(`Error: ${error.message}`));
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
groupImprovementsByFile() {
|
|
668
|
+
const byFile = {};
|
|
669
|
+
|
|
670
|
+
for (const improvement of this.improvements) {
|
|
671
|
+
if (!byFile[improvement.file]) {
|
|
672
|
+
byFile[improvement.file] = [];
|
|
673
|
+
}
|
|
674
|
+
byFile[improvement.file].push(improvement);
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
return byFile;
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
displayImprovement(improvement) {
|
|
681
|
+
const confidenceColor = improvement.confidence >= 0.9 ? chalk.green :
|
|
682
|
+
improvement.confidence >= 0.7 ? chalk.yellow :
|
|
683
|
+
chalk.gray;
|
|
684
|
+
|
|
685
|
+
console.log(`\n${chalk.gray(improvement.id)} ${chalk.blue(`[${improvement.pattern}]`)} ${improvement.description}`);
|
|
686
|
+
console.log(` ${chalk.gray('Confidence:')} ${confidenceColor((improvement.confidence * 100).toFixed(0) + '%')}`);
|
|
687
|
+
console.log(` ${chalk.gray('Location:')} Line ${improvement.location.start}${improvement.location.end !== improvement.location.start ? `-${improvement.location.end}` : ''}`);
|
|
688
|
+
|
|
689
|
+
if (improvement.details) {
|
|
690
|
+
console.log(` ${chalk.gray('Details:')} ${improvement.details}`);
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
if (improvement.preview) {
|
|
694
|
+
console.log(chalk.gray(' Preview:'));
|
|
695
|
+
console.log(chalk.red(` - ${improvement.preview.before}`));
|
|
696
|
+
console.log(chalk.green(` + ${improvement.preview.after}`));
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
async generateReport(reportPath) {
|
|
701
|
+
console.log(chalk.blue('\nš¤ Generating quality report...'));
|
|
702
|
+
|
|
703
|
+
const report = {
|
|
704
|
+
version: 1,
|
|
705
|
+
timestamp: new Date().toISOString(),
|
|
706
|
+
summary: {
|
|
707
|
+
filesAnalyzed: new Set(this.improvements.map(i => i.file)).size,
|
|
708
|
+
totalImprovements: this.improvements.length,
|
|
709
|
+
appliedImprovements: this.appliedImprovements.length,
|
|
710
|
+
patterns: this.getPatternStatistics()
|
|
711
|
+
},
|
|
712
|
+
improvements: this.improvements.map(imp => ({
|
|
713
|
+
...imp,
|
|
714
|
+
applied: this.appliedImprovements.some(a => a.id === imp.id)
|
|
715
|
+
})),
|
|
716
|
+
files: this.getFileStatistics()
|
|
717
|
+
};
|
|
718
|
+
|
|
719
|
+
await fs.writeFile(reportPath, JSON.stringify(report, null, 2));
|
|
720
|
+
console.log(chalk.green(`ā
Report generated: ${reportPath}`));
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
getPatternStatistics() {
|
|
724
|
+
const stats = {};
|
|
725
|
+
|
|
726
|
+
for (const improvement of this.improvements) {
|
|
727
|
+
if (!stats[improvement.pattern]) {
|
|
728
|
+
stats[improvement.pattern] = {
|
|
729
|
+
total: 0,
|
|
730
|
+
applied: 0,
|
|
731
|
+
averageConfidence: 0
|
|
732
|
+
};
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
stats[improvement.pattern].total++;
|
|
736
|
+
stats[improvement.pattern].averageConfidence += improvement.confidence;
|
|
737
|
+
|
|
738
|
+
if (this.appliedImprovements.some(a => a.id === improvement.id)) {
|
|
739
|
+
stats[improvement.pattern].applied++;
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
// Calculate averages
|
|
744
|
+
for (const pattern of Object.keys(stats)) {
|
|
745
|
+
stats[pattern].averageConfidence /= stats[pattern].total;
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
return stats;
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
getFileStatistics() {
|
|
752
|
+
const fileStats = {};
|
|
753
|
+
|
|
754
|
+
for (const improvement of this.improvements) {
|
|
755
|
+
if (!fileStats[improvement.file]) {
|
|
756
|
+
fileStats[improvement.file] = {
|
|
757
|
+
improvements: 0,
|
|
758
|
+
applied: 0,
|
|
759
|
+
patterns: new Set()
|
|
760
|
+
};
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
fileStats[improvement.file].improvements++;
|
|
764
|
+
fileStats[improvement.file].patterns.add(improvement.pattern);
|
|
765
|
+
|
|
766
|
+
if (this.appliedImprovements.some(a => a.id === improvement.id)) {
|
|
767
|
+
fileStats[improvement.file].applied++;
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
// Convert sets to arrays
|
|
772
|
+
for (const file of Object.keys(fileStats)) {
|
|
773
|
+
fileStats[file].patterns = Array.from(fileStats[file].patterns);
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
return fileStats;
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
displayStatistics() {
|
|
780
|
+
const patternStats = this.getPatternStatistics();
|
|
781
|
+
|
|
782
|
+
console.log(chalk.blue('\nš Pattern Statistics:'));
|
|
783
|
+
|
|
784
|
+
const sortedPatterns = Object.entries(patternStats)
|
|
785
|
+
.sort(([,a], [,b]) => b.total - a.total);
|
|
786
|
+
|
|
787
|
+
for (const [pattern, stats] of sortedPatterns) {
|
|
788
|
+
console.log(` ${pattern}: ${stats.total} improvements (${(stats.averageConfidence * 100).toFixed(0)}% avg confidence)`);
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
module.exports = ImproveCodeQualityTask;
|
|
794
|
+
```
|
|
795
|
+
|
|
796
|
+
## Integration Points
|
|
797
|
+
|
|
798
|
+
### Code Quality Improver
|
|
799
|
+
- Core improvement engine
|
|
800
|
+
- Pattern-based analysis
|
|
801
|
+
- Safe transformation application
|
|
802
|
+
- Multi-tool integration
|
|
803
|
+
|
|
804
|
+
### Tool Integration
|
|
805
|
+
- ESLint for linting fixes
|
|
806
|
+
- Prettier for formatting
|
|
807
|
+
- jscodeshift for AST transformations
|
|
808
|
+
- Custom patterns for specific improvements
|
|
809
|
+
|
|
810
|
+
### Configuration System
|
|
811
|
+
- Pattern-specific configurations
|
|
812
|
+
- Custom rule definitions
|
|
813
|
+
- Threshold management
|
|
814
|
+
- Tool preferences
|
|
815
|
+
|
|
816
|
+
### Backup System
|
|
817
|
+
- Automatic backup creation
|
|
818
|
+
- Timestamped storage
|
|
819
|
+
- Easy rollback capability
|
|
820
|
+
- Cleanup management
|
|
821
|
+
|
|
822
|
+
## Improvement Workflow
|
|
823
|
+
|
|
824
|
+
### Analysis Phase
|
|
825
|
+
1. Parse source code
|
|
826
|
+
2. Run pattern analyzers
|
|
827
|
+
3. Calculate confidence scores
|
|
828
|
+
4. Generate improvement suggestions
|
|
829
|
+
5. Filter by threshold
|
|
830
|
+
|
|
831
|
+
### Review Phase
|
|
832
|
+
1. Display improvements
|
|
833
|
+
2. Group by file/pattern
|
|
834
|
+
3. Show confidence levels
|
|
835
|
+
4. Provide previews
|
|
836
|
+
5. Allow selection
|
|
837
|
+
|
|
838
|
+
### Application Phase
|
|
839
|
+
1. Create backups
|
|
840
|
+
2. Apply transformations
|
|
841
|
+
3. Validate results
|
|
842
|
+
4. Update files
|
|
843
|
+
5. Track changes
|
|
844
|
+
|
|
845
|
+
## Best Practices
|
|
846
|
+
|
|
847
|
+
### Safe Improvements
|
|
848
|
+
- Always backup before changes
|
|
849
|
+
- Validate syntax after transformation
|
|
850
|
+
- Test code after improvements
|
|
851
|
+
- Use conservative thresholds
|
|
852
|
+
- Apply incrementally
|
|
853
|
+
|
|
854
|
+
### Pattern Selection
|
|
855
|
+
- Start with safe patterns (formatting)
|
|
856
|
+
- Progress to more complex transformations
|
|
857
|
+
- Respect project conventions
|
|
858
|
+
- Consider team preferences
|
|
859
|
+
- Monitor results
|
|
860
|
+
|
|
861
|
+
### Quality Tracking
|
|
862
|
+
- Generate regular reports
|
|
863
|
+
- Track improvement trends
|
|
864
|
+
- Measure code quality metrics
|
|
865
|
+
- Identify problem areas
|
|
866
|
+
- Celebrate progress
|
|
867
|
+
|
|
868
|
+
## Security Considerations
|
|
869
|
+
- Validate transformation safety
|
|
870
|
+
- Prevent code injection
|
|
871
|
+
- Maintain functionality
|
|
872
|
+
- Preserve sensitive patterns
|
|
873
873
|
- Audit all changes
|