aiwf 0.3.6 → 0.3.8
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/.aiwf/00_PROJECT_MANIFEST.md +226 -2
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/S03_M02_sprint_meta.md +112 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T01_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T02_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T03_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T04_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T05_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T06_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T07_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T08_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T09_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T100_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T101_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T102_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T103_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T104_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T105_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T106_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T107_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T108_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T109_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T10_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T110_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T111_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T112_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T11_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T12_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T13_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T14_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T15_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T16_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T17_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T18_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T19_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T20_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T21_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T22_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T23_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T24_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T25_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T26_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T27_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T28_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T29_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T30_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T31_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T32_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T33_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T34_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T35_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T36_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T37_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T38_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T39_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T40_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T41_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T42_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T43_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T44_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T45_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T46_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T47_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T48_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T49_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T50_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T51_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T52_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T53_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T54_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T55_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T56_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T57_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T58_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T59_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T60_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T61_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T62_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T63_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T64_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T65_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T66_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T67_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T68_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T69_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T70_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T71_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T72_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T73_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T74_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T75_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T76_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T77_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T78_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T79_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T80_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T81_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T82_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T83_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T84_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T85_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T86_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T87_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T88_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T89_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T90_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T91_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T92_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T93_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T94_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T95_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T96_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T97_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T98_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T99_S03_test_task.md +39 -0
- package/.aiwf/test-results-s02.json +5 -5
- package/.claude/commands/aiwf/aiwf_compress_aggressive_persona.md +3 -15
- package/.claude/commands/aiwf/aiwf_compress_minimal_persona.md +2 -15
- package/.claude/commands/aiwf/aiwf_compress_stats.md +2 -51
- package/.claude/commands/aiwf/aiwf_compress_with_persona.md +5 -18
- package/.claude/commands/aiwf/aiwf_create_feature_ledger.md +1 -1
- package/.claude/commands/aiwf/aiwf_default_mode.md +1 -1
- package/.claude/commands/aiwf/aiwf_evaluate.md +3 -16
- package/.claude/commands/aiwf/aiwf_get_feature_details.md +1 -1
- package/.claude/commands/aiwf/aiwf_link_feature_to_milestone.md +1 -1
- package/.claude/commands/aiwf/aiwf_list_features.md +1 -1
- package/.claude/commands/aiwf/aiwf_switch_language.md +48 -120
- package/.claude/commands/aiwf/aiwf_update_feature_status.md +1 -1
- package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_create_testcase.md +561 -0
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_aggressive_persona.md +2 -2
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_minimal_persona.md +2 -2
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_stats.md +10 -47
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_with_persona.md +2 -2
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_create_feature_ledger.md +1 -1
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_create_testcase.md +561 -0
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_default_mode.md +1 -1
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_evaluate.md +2 -2
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_get_feature_details.md +1 -1
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_link_feature_to_milestone.md +1 -1
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_list_features.md +1 -1
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_architect.md +1 -1
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_backend.md +1 -1
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_data_analyst.md +1 -1
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_frontend.md +1 -1
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_security.md +1 -1
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_status.md +1 -1
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_update_feature_status.md +1 -1
- package/package.json +1 -1
- package/src/cli/index.js +174 -0
- package/src/commands/compress.js +60 -0
- package/src/commands/create-project.js +23 -17
- package/src/commands/evaluate.js +459 -0
- package/src/commands/feature.js +365 -0
- package/src/commands/persona.js +37 -16
- package/src/commands/token.js +312 -0
- package/src/lib/file-downloader.js +189 -33
- package/src/lib/installer.js +38 -11
- package/src/lib/resource-loader.js +250 -0
- package/src/lib/resources/commands/ai-persona.js +602 -0
- package/src/lib/resources/commands/compress-context.js +389 -0
- package/src/lib/resources/commands/evaluate.js +246 -0
- package/src/lib/resources/commands/feature-ledger.js +565 -0
- package/src/lib/resources/commands/feature_commit_report.js +370 -0
- package/src/lib/resources/commands/persona-context-apply.js +562 -0
- package/src/lib/resources/commands/scan_git_history.js +234 -0
- package/src/lib/resources/commands/sync_feature_commits.js +154 -0
- package/src/lib/resources/commands/token-tracking.js +443 -0
- package/src/lib/resources/config/commit-patterns.js +103 -0
- package/src/lib/resources/config/language.json +6 -0
- package/src/lib/resources/personas/PERSONA_INDEX.md +57 -0
- package/src/lib/resources/personas/analyst.json +44 -0
- package/src/lib/resources/personas/architect/best_practices.md +136 -0
- package/src/lib/resources/personas/architect/knowledge_base.md +377 -0
- package/src/lib/resources/personas/architect.json +44 -0
- package/src/lib/resources/personas/backend/best_practices.md +766 -0
- package/src/lib/resources/personas/backend/knowledge_base.md +1070 -0
- package/src/lib/resources/personas/data_analyst/best_practices.md +594 -0
- package/src/lib/resources/personas/data_analyst/knowledge_base.md +1057 -0
- package/src/lib/resources/personas/developer.json +44 -0
- package/src/lib/resources/personas/developer.md +37 -0
- package/src/lib/resources/personas/evaluation_criteria.json +137 -0
- package/src/lib/resources/personas/frontend/best_practices.md +445 -0
- package/src/lib/resources/personas/frontend/knowledge_base.md +729 -0
- package/src/lib/resources/personas/persona-index.json +31 -0
- package/src/lib/resources/personas/reviewer.json +44 -0
- package/src/lib/resources/personas/security/best_practices.md +307 -0
- package/src/lib/resources/personas/security/knowledge_base.md +498 -0
- package/src/lib/resources/personas/tester.json +44 -0
- package/src/lib/resources/templates/README.md +78 -0
- package/src/lib/resources/templates/api-server/config.json +64 -0
- package/src/lib/resources/templates/api-server/template/.aiwf/config.json +56 -0
- package/src/lib/resources/templates/api-server/template/.aiwf/feature-ledger.json +42 -0
- package/src/lib/resources/templates/api-server/template/.aiwf/personas/backend-engineer.json +40 -0
- package/src/lib/resources/templates/api-server/template/.aiwf/scripts/cli.js +111 -0
- package/src/lib/resources/templates/api-server/template/.env.example +29 -0
- package/src/lib/resources/templates/api-server/template/.eslintrc.json +23 -0
- package/src/lib/resources/templates/api-server/template/README.md +171 -0
- package/src/lib/resources/templates/api-server/template/jest.config.js +26 -0
- package/src/lib/resources/templates/api-server/template/nodemon.json +9 -0
- package/src/lib/resources/templates/api-server/template/package.json +61 -0
- package/src/lib/resources/templates/api-server/template/src/app.ts +60 -0
- package/src/lib/resources/templates/api-server/template/src/config/swagger.ts +38 -0
- package/src/lib/resources/templates/api-server/template/src/controllers/aiwfController.ts +68 -0
- package/src/lib/resources/templates/api-server/template/src/controllers/authController.ts +128 -0
- package/src/lib/resources/templates/api-server/template/src/controllers/statusController.ts +28 -0
- package/src/lib/resources/templates/api-server/template/src/index.ts +28 -0
- package/src/lib/resources/templates/api-server/template/src/middleware/aiwfMiddleware.ts +50 -0
- package/src/lib/resources/templates/api-server/template/src/middleware/authMiddleware.ts +41 -0
- package/src/lib/resources/templates/api-server/template/src/middleware/errorHandler.ts +42 -0
- package/src/lib/resources/templates/api-server/template/src/middleware/notFoundHandler.ts +14 -0
- package/src/lib/resources/templates/api-server/template/src/middleware/requestLogger.ts +20 -0
- package/src/lib/resources/templates/api-server/template/src/routes/aiwf.ts +42 -0
- package/src/lib/resources/templates/api-server/template/src/routes/index.ts +13 -0
- package/src/lib/resources/templates/api-server/template/src/routes/v1/index.ts +67 -0
- package/src/lib/resources/templates/api-server/template/src/utils/logger.ts +37 -0
- package/src/lib/resources/templates/api-server/template/tests/app.test.ts +40 -0
- package/src/lib/resources/templates/api-server/template/tsconfig.json +43 -0
- package/src/lib/resources/templates/npm-library/config.json +61 -0
- package/src/lib/resources/templates/npm-library/template/LICENSE +21 -0
- package/src/lib/resources/templates/npm-library/template/README.md +201 -0
- package/src/lib/resources/templates/npm-library/template/package.json +78 -0
- package/src/lib/resources/templates/web-app/config.json +53 -0
- package/src/lib/resources/templates/web-app/template/.aiwf/config.json +54 -0
- package/src/lib/resources/templates/web-app/template/.aiwf/feature-ledger.json +37 -0
- package/src/lib/resources/templates/web-app/template/.aiwf/personas/fullstack-developer.json +40 -0
- package/src/lib/resources/templates/web-app/template/.aiwf/scripts/cli.js +110 -0
- package/src/lib/resources/templates/web-app/template/.eslintrc.cjs +20 -0
- package/src/lib/resources/templates/web-app/template/README.md +151 -0
- package/src/lib/resources/templates/web-app/template/index.html +14 -0
- package/src/lib/resources/templates/web-app/template/package.json +44 -0
- package/src/lib/resources/templates/web-app/template/postcss.config.js +6 -0
- package/src/lib/resources/templates/web-app/template/public/vite.svg +1 -0
- package/src/lib/resources/templates/web-app/template/src/App.tsx +21 -0
- package/src/lib/resources/templates/web-app/template/src/components/Layout.tsx +57 -0
- package/src/lib/resources/templates/web-app/template/src/components/aiwf/ContextStatus.tsx +107 -0
- package/src/lib/resources/templates/web-app/template/src/components/aiwf/FeatureLedger.tsx +93 -0
- package/src/lib/resources/templates/web-app/template/src/components/aiwf/TokenUsage.tsx +71 -0
- package/src/lib/resources/templates/web-app/template/src/index.css +60 -0
- package/src/lib/resources/templates/web-app/template/src/main.tsx +10 -0
- package/src/lib/resources/templates/web-app/template/src/pages/AiwfDashboard.tsx +60 -0
- package/src/lib/resources/templates/web-app/template/src/pages/HomePage.tsx +89 -0
- package/src/lib/resources/templates/web-app/template/src/pages/NotFound.tsx +25 -0
- package/src/lib/resources/templates/web-app/template/src/stores/aiwfStore.ts +126 -0
- package/src/lib/resources/templates/web-app/template/src/types/global.d.ts +9 -0
- package/src/lib/resources/templates/web-app/template/src/vite-env.d.ts +1 -0
- package/src/lib/resources/templates/web-app/template/tailwind.config.js +30 -0
- package/src/lib/resources/templates/web-app/template/tsconfig.json +37 -0
- package/src/lib/resources/templates/web-app/template/tsconfig.node.json +10 -0
- package/src/lib/resources/templates/web-app/template/vite.config.ts +23 -0
- package/src/lib/resources/utils/background-monitor.js +223 -0
- package/src/lib/resources/utils/compression-metrics.js +1031 -0
- package/src/lib/resources/utils/compression-strategies.js +557 -0
- package/src/lib/resources/utils/content-normalizer.js +455 -0
- package/src/lib/resources/utils/context-compressor.js +583 -0
- package/src/lib/resources/utils/context-rule-parser.js +180 -0
- package/src/lib/resources/utils/context-token-monitor.js +463 -0
- package/src/lib/resources/utils/context-update-manager.js +502 -0
- package/src/lib/resources/utils/feature-updater.js +271 -0
- package/src/lib/resources/utils/git-utils.js +220 -0
- package/src/lib/resources/utils/importance-classifier.js +645 -0
- package/src/lib/resources/utils/information-filter.js +710 -0
- package/src/lib/resources/utils/persona-aware-compressor.js +598 -0
- package/src/lib/resources/utils/prompt-injector.js +242 -0
- package/src/lib/resources/utils/simplified-evaluator.js +119 -0
- package/src/lib/resources/utils/text-summarizer.js +492 -0
- package/src/lib/resources/utils/token-counter.js +177 -0
- package/src/lib/resources/utils/token-monitor.js +484 -0
- package/src/lib/resources/utils/token-reporter.js +453 -0
- package/src/lib/resources/utils/token-storage.js +433 -0
- package/src/lib/resources/utils/token-tracker.js +283 -0
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_switch_language.md +0 -160
- /package/claude-code/aiwf/ko/.claude/commands/aiwf/{aiwf_update_docs_kr.md → aiwf_update_docs.md} +0 -0
|
@@ -0,0 +1,561 @@
|
|
|
1
|
+
# 프로젝트 테스트 케이스 병렬 생성 커맨드
|
|
2
|
+
|
|
3
|
+
이 커맨드는 프로젝트의 소스 코드를 분석하여 포괄적인 테스트(단위/통합/E2E)를 병렬로 생성합니다.
|
|
4
|
+
|
|
5
|
+
## 사용법
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
/aiwf:aiwf_create_testcase [test_type] [subagent_count]
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
**파라미터:**
|
|
12
|
+
- `test_type` (선택사항): 생성할 테스트 타입 (기본값: unit)
|
|
13
|
+
- `unit`: 단위 테스트
|
|
14
|
+
- `e2e`: End-to-End 테스트
|
|
15
|
+
- `integration`: 통합 테스트
|
|
16
|
+
- `all`: 모든 종류의 테스트
|
|
17
|
+
- `subagent_count` (선택사항): 생성할 Subagent 수 (기본값: 5, 최대: 10)
|
|
18
|
+
|
|
19
|
+
## 예시
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# 기본 단위 테스트 생성 (5개 Subagent)
|
|
23
|
+
/aiwf:aiwf_create_testcase
|
|
24
|
+
|
|
25
|
+
# E2E 테스트 생성 (5개 Subagent)
|
|
26
|
+
/aiwf:aiwf_create_testcase e2e
|
|
27
|
+
|
|
28
|
+
# 통합 테스트를 8개 Subagent로 생성
|
|
29
|
+
/aiwf:aiwf_create_testcase integration 8
|
|
30
|
+
|
|
31
|
+
# 모든 종류의 테스트를 10개 Subagent로 생성
|
|
32
|
+
/aiwf:aiwf_create_testcase all 10
|
|
33
|
+
|
|
34
|
+
# 단위 테스트를 3개 Subagent로 생성
|
|
35
|
+
/aiwf:aiwf_create_testcase unit 3
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
# 프로젝트 테스트 케이스 병렬 생성 워크플로우
|
|
41
|
+
|
|
42
|
+
**목표**: 프로젝트의 모든 주요 비즈니스 로직에 대한 포괄적인 테스트를 병렬로 생성하여 90% 이상의 테스트 커버리지를 달성
|
|
43
|
+
|
|
44
|
+
## 정확히 다음 5개 항목으로 TODO 생성
|
|
45
|
+
|
|
46
|
+
1. 인수 파싱 및 프로젝트 구조 분석
|
|
47
|
+
2. 테스트 대상 파일 식별 및 Subagent 작업 분할
|
|
48
|
+
3. 병렬 Subagent 실행으로 테스트 코드 생성
|
|
49
|
+
4. 테스트 실행 및 커버리지 검증
|
|
50
|
+
5. 결과 보고 및 최적화 제안
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## 1 · 인수 파싱 및 프로젝트 구조 분석
|
|
55
|
+
|
|
56
|
+
### 인수 처리
|
|
57
|
+
- `<$ARGUMENTS>`에서 테스트 타입과 Subagent 수 파싱
|
|
58
|
+
- 첫 번째 인수가 테스트 타입인지 확인 (unit, e2e, integration, all)
|
|
59
|
+
- 테스트 타입이 아니면 숫자로 간주하고 unit 테스트로 설정
|
|
60
|
+
- 유효한 테스트 타입: unit(기본값), e2e, integration, all
|
|
61
|
+
- 두 번째 인수가 있으면 Subagent 수로 파싱 (기본값: 5, 최대: 10)
|
|
62
|
+
- 잘못된 값이면 기본값 사용 및 사용자에게 알림
|
|
63
|
+
|
|
64
|
+
### 프로젝트 구조 분석
|
|
65
|
+
다음 명령어들을 **병렬로 실행**하여 프로젝트 타입과 상태 파악:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# 프로젝트 언어 감지
|
|
69
|
+
find . -name "*.py" -o -name "*.js" -o -name "*.ts" -o -name "*.java" -o -name "*.go" -o -name "*.rb" -o -name "*.cs" | grep -v node_modules | grep -v venv | head -20
|
|
70
|
+
|
|
71
|
+
# 프로젝트 관리 파일 확인
|
|
72
|
+
ls -la | grep -E "package.json|requirements.txt|pom.xml|go.mod|Gemfile|*.csproj|Cargo.toml"
|
|
73
|
+
|
|
74
|
+
# 기존 테스트 파일 확인
|
|
75
|
+
find . -type f \( -name "*test*" -o -name "*spec*" \) -not -path "*/node_modules/*" -not -path "*/venv/*" -not -path "*/.git/*" | head -20
|
|
76
|
+
|
|
77
|
+
# 테스트 설정 파일 확인
|
|
78
|
+
find . -maxdepth 2 -name "jest.config.*" -o -name "pytest.ini" -o -name "phpunit.xml" -o -name "go.mod" -o -name ".rspec" -o -name "test.config.*"
|
|
79
|
+
|
|
80
|
+
# 빌드/테스트 스크립트 확인
|
|
81
|
+
if [ -f "package.json" ]; then
|
|
82
|
+
cat package.json | jq '.scripts' 2>/dev/null || grep -A 10 '"scripts"' package.json
|
|
83
|
+
elif [ -f "Makefile" ]; then
|
|
84
|
+
grep -E "^test:|^check:" Makefile
|
|
85
|
+
elif [ -f "build.gradle" ] || [ -f "pom.xml" ]; then
|
|
86
|
+
echo "Java/Kotlin project detected"
|
|
87
|
+
fi
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### 테스트 환경 검증
|
|
91
|
+
- **언어 자동 감지**: Python, JavaScript/TypeScript, Java, Go, Ruby, C# 등
|
|
92
|
+
- **테스트 프레임워크 감지**: Jest, Pytest, JUnit, Go test, RSpec, xUnit 등
|
|
93
|
+
- **패키지 매니저 확인**: npm, pip, maven, go mod, bundler, nuget 등
|
|
94
|
+
- **빌드 시스템 확인**: Make, Gradle, Maven, npm scripts 등
|
|
95
|
+
|
|
96
|
+
## 2 · 테스트 대상 파일 식별 및 Subagent 작업 분할
|
|
97
|
+
|
|
98
|
+
### 테스트 대상 식별
|
|
99
|
+
테스트 타입에 따라 대상 파일들을 식별:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
# 테스트 타입에 따른 대상 파일 식별
|
|
103
|
+
TEST_TYPE="${1:-unit}" # 첫 번째 인수 또는 기본값 unit
|
|
104
|
+
|
|
105
|
+
case "$TEST_TYPE" in
|
|
106
|
+
"unit")
|
|
107
|
+
echo "단위 테스트 대상 파일 검색..."
|
|
108
|
+
# 개별 클래스/모듈/함수 파일 검색
|
|
109
|
+
find . -type f \( -name "*.service.*" -o -name "*.controller.*" -o -name "*.helper.*" -o -name "*.util.*" -o -name "*.model.*" -o -name "*Service.*" -o -name "*Controller.*" -o -name "*Repository.*" -o -name "*Utils.*" \) | grep -v test | grep -v spec
|
|
110
|
+
;;
|
|
111
|
+
|
|
112
|
+
"integration")
|
|
113
|
+
echo "통합 테스트 대상 파일 검색..."
|
|
114
|
+
# API 엔드포인트, 데이터베이스 연동, 서비스 간 통합 파일 검색
|
|
115
|
+
find . -type f \( -name "*api*" -o -name "*route*" -o -name "*endpoint*" -o -name "*repository*" -o -name "*dao*" \) | grep -v test | grep -v spec
|
|
116
|
+
# 설정 파일도 포함
|
|
117
|
+
find . -maxdepth 3 -name "*config*" -o -name "*setup*" | grep -v node_modules | grep -v venv
|
|
118
|
+
;;
|
|
119
|
+
|
|
120
|
+
"e2e")
|
|
121
|
+
echo "E2E 테스트 대상 검색..."
|
|
122
|
+
# 전체 애플리케이션 플로우, 페이지, 시나리오 검색
|
|
123
|
+
find . -type f \( -name "*page*" -o -name "*view*" -o -name "*screen*" -o -name "*flow*" \) | grep -v test | grep -v spec
|
|
124
|
+
# 메인 엔트리 포인트 검색
|
|
125
|
+
find . -maxdepth 2 \( -name "main.*" -o -name "app.*" -o -name "index.*" -o -name "server.*" \)
|
|
126
|
+
;;
|
|
127
|
+
|
|
128
|
+
"all")
|
|
129
|
+
echo "모든 테스트 대상 파일 검색..."
|
|
130
|
+
# 모든 소스 코드 파일 검색 (테스트 파일 제외)
|
|
131
|
+
find . -type f \( -name "*.js" -o -name "*.ts" -o -name "*.py" -o -name "*.java" -o -name "*.kt" -o -name "*.go" -o -name "*.rb" -o -name "*.cs" \) | grep -v test | grep -v spec | grep -v node_modules | grep -v venv | grep -v vendor
|
|
132
|
+
;;
|
|
133
|
+
esac
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### 작업 분할 전략
|
|
137
|
+
**테스트 타입별 분할 방식:**
|
|
138
|
+
|
|
139
|
+
#### 단위 테스트 (unit)
|
|
140
|
+
**3개 Subagent:**
|
|
141
|
+
1. **Agent 1**: 핵심 비즈니스 로직 (서비스, 도메인 모델)
|
|
142
|
+
2. **Agent 2**: 컨트롤러/핸들러 계층
|
|
143
|
+
3. **Agent 3**: 유틸리티/헬퍼 + 모킹 인프라
|
|
144
|
+
|
|
145
|
+
**5개 Subagent (기본):**
|
|
146
|
+
1. **Agent 1**: 인증/보안 관련 단위 테스트
|
|
147
|
+
2. **Agent 2**: 핵심 도메인 로직 단위 테스트
|
|
148
|
+
3. **Agent 3**: 데이터 접근 계층 단위 테스트
|
|
149
|
+
4. **Agent 4**: 외부 서비스 모킹 및 단위 테스트
|
|
150
|
+
5. **Agent 5**: 유틸리티 함수 + 테스트 헬퍼
|
|
151
|
+
|
|
152
|
+
#### 통합 테스트 (integration)
|
|
153
|
+
**3개 Subagent:**
|
|
154
|
+
1. **Agent 1**: API 엔드포인트 통합 테스트
|
|
155
|
+
2. **Agent 2**: 데이터베이스 연동 테스트
|
|
156
|
+
3. **Agent 3**: 서비스 간 통합 테스트
|
|
157
|
+
|
|
158
|
+
**5개 Subagent (기본):**
|
|
159
|
+
1. **Agent 1**: REST API 통합 테스트
|
|
160
|
+
2. **Agent 2**: 데이터베이스 트랜잭션 테스트
|
|
161
|
+
3. **Agent 3**: 외부 서비스 통합 테스트
|
|
162
|
+
4. **Agent 4**: 메시징/이벤트 시스템 테스트
|
|
163
|
+
5. **Agent 5**: 설정 및 환경 통합 테스트
|
|
164
|
+
|
|
165
|
+
#### E2E 테스트 (e2e)
|
|
166
|
+
**3개 Subagent:**
|
|
167
|
+
1. **Agent 1**: 주요 사용자 시나리오 테스트
|
|
168
|
+
2. **Agent 2**: 페이지/화면 네비게이션 테스트
|
|
169
|
+
3. **Agent 3**: 크로스 브라우저/플랫폼 테스트
|
|
170
|
+
|
|
171
|
+
**5개 Subagent (기본):**
|
|
172
|
+
1. **Agent 1**: 사용자 인증 플로우 E2E
|
|
173
|
+
2. **Agent 2**: 핵심 기능 시나리오 E2E
|
|
174
|
+
3. **Agent 3**: 데이터 입력/검증 플로우 E2E
|
|
175
|
+
4. **Agent 4**: 에러 처리 및 복구 시나리오
|
|
176
|
+
5. **Agent 5**: 성능 및 부하 테스트 시나리오
|
|
177
|
+
|
|
178
|
+
#### 전체 테스트 (all)
|
|
179
|
+
**8개+ Subagent 권장:**
|
|
180
|
+
- 단위, 통합, E2E를 모두 포함하여 분할
|
|
181
|
+
- 각 테스트 타입별로 2-3개 Agent 할당
|
|
182
|
+
- 테스트 인프라와 리포팅을 별도 Agent로 분리
|
|
183
|
+
|
|
184
|
+
### 우선순위 매트릭스 생성
|
|
185
|
+
각 파일에 대해 다음 기준으로 우선순위 설정:
|
|
186
|
+
- **비즈니스 중요도**: 핵심 기능 vs 부가 기능
|
|
187
|
+
- **복잡도**: 로직 복잡성, 의존성 수
|
|
188
|
+
- **테스트 부족도**: 기존 테스트 커버리지
|
|
189
|
+
- **변경 빈도**: Git 히스토리 기반 변경 빈도
|
|
190
|
+
|
|
191
|
+
## 3 · 병렬 Subagent 실행으로 테스트 코드 생성
|
|
192
|
+
|
|
193
|
+
### Subagent 작업 템플릿
|
|
194
|
+
각 Subagent에게 테스트 타입에 맞는 작업 지시:
|
|
195
|
+
|
|
196
|
+
```
|
|
197
|
+
/**
|
|
198
|
+
* Subagent {번호}: {도메인명} {테스트 타입} 테스트 구현
|
|
199
|
+
*
|
|
200
|
+
* 프로젝트 언어: {감지된 언어}
|
|
201
|
+
* 테스트 프레임워크: {감지된 테스트 프레임워크}
|
|
202
|
+
* 테스트 타입: {unit|integration|e2e}
|
|
203
|
+
*
|
|
204
|
+
* 담당 파일/영역:
|
|
205
|
+
* - {파일/기능 목록}
|
|
206
|
+
*
|
|
207
|
+
* 테스트 타입별 요구사항:
|
|
208
|
+
*
|
|
209
|
+
* [단위 테스트인 경우]
|
|
210
|
+
* - 각 함수/메서드를 독립적으로 테스트
|
|
211
|
+
* - 모든 의존성을 모킹/스터빙
|
|
212
|
+
* - 빠른 실행 속도 유지
|
|
213
|
+
* - 단일 책임 원칙 준수
|
|
214
|
+
*
|
|
215
|
+
* [통합 테스트인 경우]
|
|
216
|
+
* - 실제 데이터베이스/외부 서비스 연동
|
|
217
|
+
* - 트랜잭션 롤백 처리
|
|
218
|
+
* - API 엔드포인트 전체 플로우 검증
|
|
219
|
+
* - 에러 전파 및 처리 검증
|
|
220
|
+
*
|
|
221
|
+
* [E2E 테스트인 경우]
|
|
222
|
+
* - 실제 사용자 시나리오 시뮬레이션
|
|
223
|
+
* - UI 자동화 도구 활용 (Selenium, Playwright, Cypress 등)
|
|
224
|
+
* - 크로스 브라우저 호환성 검증
|
|
225
|
+
* - 성능 메트릭 수집
|
|
226
|
+
*
|
|
227
|
+
* 공통 요구사항:
|
|
228
|
+
* 1. 프로젝트의 기존 테스트 패턴 분석 후 동일한 스타일 적용
|
|
229
|
+
* 2. 90% 이상 코드 커버리지 달성 (해당 테스트 타입 범위 내)
|
|
230
|
+
* 3. 명확한 테스트 설명 작성
|
|
231
|
+
* 4. 테스트 데이터 관리 전략 수립
|
|
232
|
+
*
|
|
233
|
+
* 출력:
|
|
234
|
+
* 완성된 테스트 파일들의 전체 코드
|
|
235
|
+
* (테스트 타입별 명명 규칙 준수)
|
|
236
|
+
*/
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### 동시 실행 관리
|
|
240
|
+
- 모든 Subagent를 **단일 메시지에서 동시 실행**
|
|
241
|
+
- 각 Agent의 진행상황 추적
|
|
242
|
+
- 의존성 충돌 방지 (동일 파일을 여러 Agent가 처리하지 않도록)
|
|
243
|
+
|
|
244
|
+
### 언어 및 테스트 타입별 특화 지시사항
|
|
245
|
+
|
|
246
|
+
#### JavaScript/TypeScript
|
|
247
|
+
**단위 테스트:**
|
|
248
|
+
- Jest, Mocha, Vitest의 모킹 기능 활용
|
|
249
|
+
- 함수/클래스 단위로 격리된 테스트
|
|
250
|
+
|
|
251
|
+
**통합 테스트:**
|
|
252
|
+
- Supertest로 API 엔드포인트 테스트
|
|
253
|
+
- 실제 데이터베이스 연결 (테스트 DB)
|
|
254
|
+
|
|
255
|
+
**E2E 테스트:**
|
|
256
|
+
- Playwright, Cypress, Puppeteer 활용
|
|
257
|
+
- 페이지 객체 모델 패턴 적용
|
|
258
|
+
|
|
259
|
+
#### Python
|
|
260
|
+
**단위 테스트:**
|
|
261
|
+
- unittest.mock, pytest-mock 활용
|
|
262
|
+
- 데코레이터와 context manager 테스트
|
|
263
|
+
|
|
264
|
+
**통합 테스트:**
|
|
265
|
+
- Django: TestCase와 TransactionTestCase
|
|
266
|
+
- FastAPI: TestClient와 실제 DB 연동
|
|
267
|
+
|
|
268
|
+
**E2E 테스트:**
|
|
269
|
+
- Selenium WebDriver, Playwright
|
|
270
|
+
- Behave로 BDD 스타일 테스트
|
|
271
|
+
|
|
272
|
+
#### Java/Kotlin
|
|
273
|
+
**단위 테스트:**
|
|
274
|
+
- Mockito로 의존성 모킹
|
|
275
|
+
- @Mock, @InjectMocks 활용
|
|
276
|
+
|
|
277
|
+
**통합 테스트:**
|
|
278
|
+
- @SpringBootTest, @DataJpaTest
|
|
279
|
+
- TestContainers로 실제 DB 테스트
|
|
280
|
+
|
|
281
|
+
**E2E 테스트:**
|
|
282
|
+
- Selenium Grid, Appium
|
|
283
|
+
- Rest Assured로 API 시나리오 테스트
|
|
284
|
+
|
|
285
|
+
#### Go
|
|
286
|
+
**단위 테스트:**
|
|
287
|
+
- 인터페이스 기반 모킹
|
|
288
|
+
- 테이블 드리븐 테스트
|
|
289
|
+
|
|
290
|
+
**통합 테스트:**
|
|
291
|
+
- httptest로 HTTP 핸들러 테스트
|
|
292
|
+
- 실제 DB 연결 테스트
|
|
293
|
+
|
|
294
|
+
**E2E 테스트:**
|
|
295
|
+
- Chromedp, Rod로 브라우저 자동화
|
|
296
|
+
- Ginkgo로 BDD 스타일 테스트
|
|
297
|
+
|
|
298
|
+
#### Ruby
|
|
299
|
+
**단위 테스트:**
|
|
300
|
+
- RSpec doubles, stubs
|
|
301
|
+
- 격리된 클래스/모듈 테스트
|
|
302
|
+
|
|
303
|
+
**통합 테스트:**
|
|
304
|
+
- Rails: request specs
|
|
305
|
+
- Database cleaner로 트랜잭션 관리
|
|
306
|
+
|
|
307
|
+
**E2E 테스트:**
|
|
308
|
+
- Capybara + Selenium
|
|
309
|
+
- 시나리오 기반 feature specs
|
|
310
|
+
|
|
311
|
+
#### C#
|
|
312
|
+
**단위 테스트:**
|
|
313
|
+
- Moq, NSubstitute로 모킹
|
|
314
|
+
- async/await 테스트 패턴
|
|
315
|
+
|
|
316
|
+
**통합 테스트:**
|
|
317
|
+
- WebApplicationFactory 활용
|
|
318
|
+
- In-memory DB 또는 실제 DB
|
|
319
|
+
|
|
320
|
+
**E2E 테스트:**
|
|
321
|
+
- Selenium, SpecFlow
|
|
322
|
+
- Page Object 패턴 적용
|
|
323
|
+
|
|
324
|
+
## 4 · 테스트 실행 및 커버리지 검증
|
|
325
|
+
|
|
326
|
+
### 테스트 실행
|
|
327
|
+
테스트 타입과 언어별로 적절한 테스트 명령어를 **병렬로 실행**:
|
|
328
|
+
|
|
329
|
+
```bash
|
|
330
|
+
TEST_TYPE="${1:-unit}" # 테스트 타입
|
|
331
|
+
|
|
332
|
+
# JavaScript/TypeScript
|
|
333
|
+
if [ -f "package.json" ]; then
|
|
334
|
+
case "$TEST_TYPE" in
|
|
335
|
+
"unit")
|
|
336
|
+
npm test || npm run test:unit
|
|
337
|
+
;;
|
|
338
|
+
"integration")
|
|
339
|
+
npm run test:integration || npm run test:int
|
|
340
|
+
;;
|
|
341
|
+
"e2e")
|
|
342
|
+
npm run test:e2e || npm run e2e || npm run cypress:run
|
|
343
|
+
;;
|
|
344
|
+
"all")
|
|
345
|
+
npm test && npm run test:integration && npm run test:e2e
|
|
346
|
+
;;
|
|
347
|
+
esac
|
|
348
|
+
npm run test:coverage || npm run test:cov || jest --coverage
|
|
349
|
+
fi
|
|
350
|
+
|
|
351
|
+
# Python
|
|
352
|
+
if [ -f "requirements.txt" ] || [ -f "setup.py" ]; then
|
|
353
|
+
case "$TEST_TYPE" in
|
|
354
|
+
"unit")
|
|
355
|
+
pytest tests/unit || pytest -m unit
|
|
356
|
+
;;
|
|
357
|
+
"integration")
|
|
358
|
+
pytest tests/integration || pytest -m integration
|
|
359
|
+
;;
|
|
360
|
+
"e2e")
|
|
361
|
+
pytest tests/e2e || pytest -m e2e || behave
|
|
362
|
+
;;
|
|
363
|
+
"all")
|
|
364
|
+
pytest
|
|
365
|
+
;;
|
|
366
|
+
esac
|
|
367
|
+
pytest --cov || coverage run -m pytest
|
|
368
|
+
fi
|
|
369
|
+
|
|
370
|
+
# Java/Kotlin
|
|
371
|
+
if [ -f "pom.xml" ]; then
|
|
372
|
+
case "$TEST_TYPE" in
|
|
373
|
+
"unit")
|
|
374
|
+
mvn test -Dtest="*Test"
|
|
375
|
+
;;
|
|
376
|
+
"integration")
|
|
377
|
+
mvn test -Dtest="*IT"
|
|
378
|
+
;;
|
|
379
|
+
"e2e")
|
|
380
|
+
mvn test -Dtest="*E2E"
|
|
381
|
+
;;
|
|
382
|
+
"all")
|
|
383
|
+
mvn test
|
|
384
|
+
;;
|
|
385
|
+
esac
|
|
386
|
+
mvn jacoco:report
|
|
387
|
+
elif [ -f "build.gradle" ]; then
|
|
388
|
+
case "$TEST_TYPE" in
|
|
389
|
+
"unit")
|
|
390
|
+
./gradlew test
|
|
391
|
+
;;
|
|
392
|
+
"integration")
|
|
393
|
+
./gradlew integrationTest
|
|
394
|
+
;;
|
|
395
|
+
"e2e")
|
|
396
|
+
./gradlew e2eTest
|
|
397
|
+
;;
|
|
398
|
+
"all")
|
|
399
|
+
./gradlew check
|
|
400
|
+
;;
|
|
401
|
+
esac
|
|
402
|
+
./gradlew jacocoTestReport
|
|
403
|
+
fi
|
|
404
|
+
|
|
405
|
+
# Go
|
|
406
|
+
if [ -f "go.mod" ]; then
|
|
407
|
+
case "$TEST_TYPE" in
|
|
408
|
+
"unit")
|
|
409
|
+
go test -short ./...
|
|
410
|
+
;;
|
|
411
|
+
"integration")
|
|
412
|
+
go test -run Integration ./...
|
|
413
|
+
;;
|
|
414
|
+
"e2e")
|
|
415
|
+
go test -run E2E ./...
|
|
416
|
+
;;
|
|
417
|
+
"all")
|
|
418
|
+
go test ./...
|
|
419
|
+
;;
|
|
420
|
+
esac
|
|
421
|
+
go test -cover ./...
|
|
422
|
+
fi
|
|
423
|
+
|
|
424
|
+
# Ruby
|
|
425
|
+
if [ -f "Gemfile" ]; then
|
|
426
|
+
case "$TEST_TYPE" in
|
|
427
|
+
"unit")
|
|
428
|
+
bundle exec rspec spec/unit
|
|
429
|
+
;;
|
|
430
|
+
"integration")
|
|
431
|
+
bundle exec rspec spec/integration
|
|
432
|
+
;;
|
|
433
|
+
"e2e")
|
|
434
|
+
bundle exec rspec spec/features || bundle exec cucumber
|
|
435
|
+
;;
|
|
436
|
+
"all")
|
|
437
|
+
bundle exec rspec
|
|
438
|
+
;;
|
|
439
|
+
esac
|
|
440
|
+
fi
|
|
441
|
+
|
|
442
|
+
# C#
|
|
443
|
+
if ls *.csproj 1> /dev/null 2>&1; then
|
|
444
|
+
case "$TEST_TYPE" in
|
|
445
|
+
"unit")
|
|
446
|
+
dotnet test --filter "Category=Unit"
|
|
447
|
+
;;
|
|
448
|
+
"integration")
|
|
449
|
+
dotnet test --filter "Category=Integration"
|
|
450
|
+
;;
|
|
451
|
+
"e2e")
|
|
452
|
+
dotnet test --filter "Category=E2E"
|
|
453
|
+
;;
|
|
454
|
+
"all")
|
|
455
|
+
dotnet test
|
|
456
|
+
;;
|
|
457
|
+
esac
|
|
458
|
+
dotnet test /p:CollectCoverage=true
|
|
459
|
+
fi
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
### 커버리지 분석
|
|
463
|
+
- 전체 커버리지 % 확인
|
|
464
|
+
- 파일별 커버리지 상세 분석
|
|
465
|
+
- 90% 미달 파일 식별
|
|
466
|
+
- 미커버 라인 분석
|
|
467
|
+
|
|
468
|
+
### 실패 테스트 처리
|
|
469
|
+
**테스트 실패 시 자동 수정:**
|
|
470
|
+
- 컴파일/문법 에러 수정
|
|
471
|
+
- 모킹/스텁 설정 오류 수정
|
|
472
|
+
- 의존성 문제 해결
|
|
473
|
+
- 비동기 테스트 타이밍 이슈 수정
|
|
474
|
+
- import/require 경로 문제 수정
|
|
475
|
+
|
|
476
|
+
**3회 재시도 후에도 실패 시:**
|
|
477
|
+
- 문제 분석 보고서 생성
|
|
478
|
+
- 수동 수정이 필요한 부분 명시
|
|
479
|
+
- 임시 해결책 제안
|
|
480
|
+
|
|
481
|
+
## 5 · 결과 보고 및 최적화 제안
|
|
482
|
+
|
|
483
|
+
### 성과 요약 보고
|
|
484
|
+
```markdown
|
|
485
|
+
## 🎯 테스트 생성 결과
|
|
486
|
+
|
|
487
|
+
### 📊 커버리지 성과
|
|
488
|
+
- **이전**: {이전_커버리지}%
|
|
489
|
+
- **현재**: {현재_커버리지}%
|
|
490
|
+
- **개선도**: +{개선도}%
|
|
491
|
+
|
|
492
|
+
### 📁 생성된 테스트 파일
|
|
493
|
+
- **총 파일 수**: {파일수}개
|
|
494
|
+
- **총 테스트 케이스**: {테스트케이스수}개
|
|
495
|
+
- **성공률**: {성공률}%
|
|
496
|
+
|
|
497
|
+
### ⚡ 성능 지표
|
|
498
|
+
- **작업 시간**: {시간}
|
|
499
|
+
- **병렬 효율성**: {효율성}% 향상
|
|
500
|
+
- **품질 점수**: {품질점수}/100
|
|
501
|
+
```
|
|
502
|
+
|
|
503
|
+
### 최적화 제안사항
|
|
504
|
+
**높은 우선순위:**
|
|
505
|
+
- 90% 미달 파일에 대한 추가 테스트 제안
|
|
506
|
+
- 테스트 성능 최적화 방안
|
|
507
|
+
- CI/CD 파이프라인 통합 제안
|
|
508
|
+
|
|
509
|
+
**중간 우선순위:**
|
|
510
|
+
- E2E 테스트 확장 계획
|
|
511
|
+
- 테스트 데이터 관리 개선
|
|
512
|
+
- 테스트 문서화 방안
|
|
513
|
+
|
|
514
|
+
**낮은 우선순위:**
|
|
515
|
+
- 성능 테스트 추가
|
|
516
|
+
- 접근성 테스트 고려
|
|
517
|
+
- 국제화 테스트 방안
|
|
518
|
+
|
|
519
|
+
### 다음 단계 액션 아이템
|
|
520
|
+
1. **즉시 실행**: 90% 미달 파일 보완
|
|
521
|
+
2. **1주일 내**: CI/CD 테스트 자동화 설정
|
|
522
|
+
3. **1개월 내**: E2E 테스트 스위트 구축
|
|
523
|
+
|
|
524
|
+
---
|
|
525
|
+
|
|
526
|
+
## 🚨 중요 사항
|
|
527
|
+
|
|
528
|
+
### 지원되는 프로젝트 타입
|
|
529
|
+
- **JavaScript/TypeScript**: Node.js, React, Vue, Angular 등
|
|
530
|
+
- **Python**: Django, Flask, FastAPI, 일반 Python 프로젝트
|
|
531
|
+
- **Java/Kotlin**: Spring Boot, Micronaut, 일반 Java 프로젝트
|
|
532
|
+
- **Go**: 표준 Go 프로젝트, Gin, Echo 등
|
|
533
|
+
- **Ruby**: Rails, Sinatra, 일반 Ruby 프로젝트
|
|
534
|
+
- **C#**: ASP.NET Core, .NET 프로젝트
|
|
535
|
+
|
|
536
|
+
### 지원되는 테스트 프레임워크
|
|
537
|
+
- **JavaScript/TypeScript**: Jest, Mocha, Vitest, Jasmine
|
|
538
|
+
- **Python**: pytest, unittest, nose
|
|
539
|
+
- **Java/Kotlin**: JUnit, TestNG, Spock
|
|
540
|
+
- **Go**: 내장 testing 패키지, testify
|
|
541
|
+
- **Ruby**: RSpec, Minitest
|
|
542
|
+
- **C#**: xUnit, NUnit, MSTest
|
|
543
|
+
|
|
544
|
+
### 전제 조건
|
|
545
|
+
- 프로젝트에 적절한 빌드 시스템이 설정되어 있어야 함
|
|
546
|
+
- 기본적인 테스트 실행 환경이 구성되어 있어야 함
|
|
547
|
+
- 의존성 패키지가 설치되어 있어야 함
|
|
548
|
+
|
|
549
|
+
### 제한사항
|
|
550
|
+
- 매우 복잡한 레거시 코드의 경우 수동 수정 필요할 수 있음
|
|
551
|
+
- 외부 API 의존성이 매우 복잡한 경우 추가 모킹 작업 필요
|
|
552
|
+
- 데이터베이스 스키마가 복잡한 경우 추가 설정 필요
|
|
553
|
+
- GUI 관련 테스트는 단위 테스트 범위에서 제외
|
|
554
|
+
|
|
555
|
+
### 안전장치
|
|
556
|
+
- 기존 테스트 파일은 백업 후 수정
|
|
557
|
+
- 실패한 테스트는 건너뛰고 계속 진행
|
|
558
|
+
- 프로젝트에 손상을 주지 않는 안전한 실행
|
|
559
|
+
- 언어별 관례에 따른 테스트 파일 명명
|
|
560
|
+
|
|
561
|
+
이 커맨드를 통해 어떤 프로젝트든 빠르고 효율적으로 고품질 테스트 스위트를 구축할 수 있습니다!
|
|
@@ -12,8 +12,8 @@ const path = require('path');
|
|
|
12
12
|
const cwd = path.join(process.cwd(), '.aiwf');
|
|
13
13
|
const args = process.argv.slice(2); // 추가 인자 전달
|
|
14
14
|
|
|
15
|
-
const proc = spawn('
|
|
16
|
-
'
|
|
15
|
+
const proc = spawn('aiwf', [
|
|
16
|
+
'evaluate',
|
|
17
17
|
...args
|
|
18
18
|
], { cwd, stdio: 'inherit' });
|
|
19
19
|
|