aiwf 0.3.7 → 0.3.12

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.
Files changed (605) hide show
  1. package/CHANGELOG.md +97 -0
  2. package/README.ko.md +114 -28
  3. package/README.md +152 -40
  4. package/docs/AI-WORKFLOW.md +121 -19
  5. package/docs/API_DOCUMENTATION.md +1 -1
  6. package/docs/API_REFERENCE.md +1 -1
  7. package/docs/CLI_USAGE_GUIDE.ko.md +634 -0
  8. package/docs/CLI_USAGE_GUIDE.md +339 -178
  9. package/docs/COMMANDS_GUIDE.ko.md +308 -4
  10. package/docs/COMMANDS_GUIDE.md +117 -0
  11. package/docs/CONTRIBUTING.ko.md +6 -6
  12. package/docs/CONTRIBUTING.md +6 -6
  13. package/docs/DEVELOPMENT_GUIDE.ko.md +440 -0
  14. package/docs/DEVELOPMENT_GUIDE.md +1 -1
  15. package/docs/EXAMPLES.md +8 -6
  16. package/docs/GETTING_STARTED.md +6 -3
  17. package/docs/STATE_MANAGEMENT_GUIDE.ko.md +278 -0
  18. package/docs/STATE_MANAGEMENT_GUIDE.md +278 -0
  19. package/docs/TROUBLESHOOTING.md +14 -13
  20. package/docs/guides/checkpoint-system-guide-ko.md +356 -0
  21. package/docs/guides/checkpoint-system-guide.md +356 -0
  22. package/docs/guides/independent-sprint-guide-ko.md +321 -0
  23. package/docs/guides/independent-sprint-guide.md +321 -0
  24. package/package.json +30 -3
  25. package/scripts/update-file-lists.js +267 -0
  26. package/src/cli/checkpoint-cli.js +417 -0
  27. package/src/cli/index.js +461 -0
  28. package/src/cli/sprint-cli.js +287 -0
  29. package/src/commands/compress.js +60 -0
  30. package/src/commands/create-project.js +23 -17
  31. package/src/commands/evaluate.js +459 -0
  32. package/src/commands/persona.js +37 -16
  33. package/src/commands/sprint-independent.js +393 -0
  34. package/src/commands/state-refactored.js +419 -0
  35. package/src/commands/state.js +1164 -0
  36. package/src/commands/token.js +312 -0
  37. package/src/commands/yolo-config.js +502 -0
  38. package/src/config/file-lists.js +147 -0
  39. package/src/config/yolo-config-template.yaml +168 -0
  40. package/src/lib/file-downloader.js +7 -72
  41. package/src/lib/github-integration.js +402 -0
  42. package/src/lib/resource-loader-enhanced.js +399 -0
  43. package/src/lib/resource-loader.js +250 -0
  44. package/{claude-code/aiwf/ko → src/lib/resources}/commands/ai-persona.js +1 -1
  45. package/src/lib/state/priority-calculator.js +217 -0
  46. package/src/lib/state/state-index.js +155 -0
  47. package/src/lib/state/task-scanner.js +328 -0
  48. package/src/utils/checkpoint-manager.js +425 -0
  49. package/src/utils/engineering-guard.js +389 -0
  50. package/.aiwf/00_PROJECT_MANIFEST.md +0 -196
  51. package/.aiwf/01_PROJECT_DOCS/ARCHITECTURE.md +0 -121
  52. package/.aiwf/01_PROJECT_DOCS/FEATURE_LEDGER_ADVANCED_USE_CASES.md +0 -412
  53. package/.aiwf/01_PROJECT_DOCS/FEATURE_LEDGER_API_REFERENCE.md +0 -361
  54. package/.aiwf/01_PROJECT_DOCS/FEATURE_LEDGER_COMMANDS_GUIDE.md +0 -254
  55. package/.aiwf/01_PROJECT_DOCS/FEATURE_LEDGER_FAQ.md +0 -365
  56. package/.aiwf/01_PROJECT_DOCS/FEATURE_LEDGER_SYSTEM_OVERVIEW.md +0 -305
  57. package/.aiwf/01_PROJECT_DOCS/FEATURE_LEDGER_USER_GUIDE.md +0 -416
  58. package/.aiwf/01_PROJECT_DOCS/FEATURE_LEDGER_/354/213/234/354/236/221_/352/260/200/354/235/264/353/223/234.md +0 -247
  59. package/.aiwf/02_REQUIREMENTS/CLAUDE.md +0 -78
  60. package/.aiwf/02_REQUIREMENTS/M02_Context_Engineering_Enhancement/M02_milestone_meta.md +0 -34
  61. package/.aiwf/02_REQUIREMENTS/M02_Context_Engineering_Enhancement/PRD_Context_Engineering_Enhancement.md +0 -108
  62. package/.aiwf/02_REQUIREMENTS/M02_Context_Engineering_Enhancement/SPECS_AI_Persona_System.md +0 -299
  63. package/.aiwf/02_REQUIREMENTS/M02_Context_Engineering_Enhancement/SPECS_Feature_Ledger_System.md +0 -330
  64. package/.aiwf/02_REQUIREMENTS/M02_Context_Engineering_Enhancement/SPECS_Token_Optimization.md +0 -833
  65. package/.aiwf/02_REQUIREMENTS/M03_Simone_Integration_Enhancement/M03_milestone_meta.md +0 -55
  66. package/.aiwf/02_REQUIREMENTS/M03_Simone_Integration_Enhancement/SPECS_AIWF_Simplified_Plan.md +0 -221
  67. package/.aiwf/03_SPRINTS/CLAUDE.md +0 -83
  68. package/.aiwf/03_SPRINTS/S01_M02_context_foundation/S01_M02_sprint_meta.md +0 -95
  69. package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX01_S01_Feature_Ledger_/353/215/260/354/235/264/355/204/260_/352/265/254/354/241/260_/354/204/244/352/263/204.md +0 -111
  70. package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX02_S01_Feature_Ledger_CLI_/353/252/205/353/240/271/354/226/264_/352/260/234/353/260/234.md +0 -115
  71. package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX03_S01_Git_/354/227/260/353/217/231_Feature_/354/266/224/354/240/201.md +0 -141
  72. package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX04_S01_Feature_Ledger_/353/254/270/354/204/234/355/231/224.md +0 -114
  73. package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX05_S01_AI_/355/216/230/353/245/264/354/206/214/353/202/230_/353/215/260/354/235/264/355/204/260_/352/265/254/354/241/260_/354/204/244/352/263/204.md +0 -123
  74. package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX06_S01_/355/216/230/353/245/264/354/206/214/353/202/230_/352/264/200/353/246/254_/353/252/205/353/240/271/354/226/264_/352/265/254/355/230/204.md +0 -114
  75. package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX07_S01_Context_/354/225/225/354/266/225_/354/225/204/355/202/244/355/205/215/354/262/230_/354/204/244/352/263/204.md +0 -114
  76. package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX08_S01_/355/206/240/355/201/260_/354/266/224/354/240/201_/354/213/234/354/212/244/355/205/234_/355/224/204/353/241/234/355/206/240/355/203/200/354/236/205.md +0 -112
  77. package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX09_S01_/354/225/225/354/266/225_/354/225/214/352/263/240/353/246/254/354/246/230_/355/224/204/353/241/234/355/206/240/355/203/200/354/236/205.md +0 -118
  78. package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX10_S01_update_docs_/353/252/205/353/240/271/354/226/264_/353/263/265/352/265/254.md +0 -118
  79. package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX11_S01_/355/206/265/355/225/251_/355/205/214/354/212/244/355/212/270_Suite_/352/265/254/354/266/225.md +0 -128
  80. package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX12_S01_/354/204/261/353/212/245_/354/265/234/354/240/201/355/231/224_/353/260/217_/353/254/270/354/204/234/355/231/224.md +0 -122
  81. package/.aiwf/03_SPRINTS/S02_M02_ai_enhancement/S02_M02_sprint_meta.md +0 -107
  82. package/.aiwf/03_SPRINTS/S02_M02_ai_enhancement/TX01_S02_AI_/355/216/230/353/245/264/354/206/214/353/202/230_/353/252/205/353/240/271/354/226/264_/352/265/254/355/230/204.md +0 -129
  83. package/.aiwf/03_SPRINTS/S02_M02_ai_enhancement/TX02_S02_/355/216/230/353/245/264/354/206/214/353/202/230_/354/273/250/355/205/215/354/212/244/355/212/270_/354/240/201/354/232/251_/354/213/234/354/212/244/355/205/234.md +0 -152
  84. package/.aiwf/03_SPRINTS/S02_M02_ai_enhancement/TX03_S02_Context_/354/225/225/354/266/225_/354/225/214/352/263/240/353/246/254/354/246/230_/352/265/254/355/230/204.md +0 -186
  85. package/.aiwf/03_SPRINTS/S02_M02_ai_enhancement/TX05_S02_S02_/355/206/265/355/225/251_/355/205/214/354/212/244/355/212/270_/353/260/217_/353/254/270/354/204/234/355/231/224.md +0 -192
  86. package/.aiwf/03_SPRINTS/S02_M02_ai_enhancement/TX4_S02_Feature_Git_/354/227/260/353/217/231_/353/260/217_/354/236/220/353/217/231/355/231/224.md +0 -162
  87. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/S03_FINAL_SPRINT_SUMMARY.md +0 -137
  88. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/S03_M02_sprint_meta.md +0 -105
  89. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/TX14_S03_M02_/353/247/210/354/235/274/354/212/244/355/206/244_/354/265/234/354/242/205_/352/262/200/354/246/235_/353/260/217_/353/254/270/354/204/234/355/231/224.md +0 -214
  90. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/TX15_S03_/352/270/260/353/263/270_/355/224/204/353/241/234/354/240/235/355/212/270_/355/205/234/355/224/214/353/246/277_/352/260/234/353/260/234.md +0 -177
  91. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/TX16_S03_/354/230/244/355/224/204/353/235/274/354/235/270_/355/205/234/355/224/214/353/246/277_/354/272/220/354/213/234_/354/213/234/354/212/244/355/205/234.md +0 -206
  92. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/TX_T13_S03_AI_/353/217/204/352/265/254_/355/206/265/355/225/251_/355/205/234/355/224/214/353/246/277_/352/260/234/353/260/234.md +0 -151
  93. package/.aiwf/04_GENERAL_TASKS/CLAUDE.md +0 -96
  94. package/.aiwf/04_GENERAL_TASKS/TX001_complete_english_translation.md +0 -127
  95. package/.aiwf/06_FEATURE_LEDGERS/FEATURE_GIT_INTEGRATION.md +0 -314
  96. package/.aiwf/06_FEATURE_LEDGERS/FEATURE_INTEGRATION_GUIDE.md +0 -227
  97. package/.aiwf/06_FEATURE_LEDGERS/FEATURE_LEDGER_INDEX.md +0 -23
  98. package/.aiwf/06_FEATURE_LEDGERS/FEATURE_SCHEMA.md +0 -205
  99. package/.aiwf/06_FEATURE_LEDGERS/FEATURE_STATE_DIAGRAM.md +0 -190
  100. package/.aiwf/06_FEATURE_LEDGERS/active/FL001_user_authentication_system.md +0 -47
  101. package/.aiwf/06_FEATURE_LEDGERS/active/FL002_user_authentication_system.md +0 -47
  102. package/.aiwf/07_AI_PERSONAS/architect/best_practices.md +0 -104
  103. package/.aiwf/07_AI_PERSONAS/architect/context_rules.md +0 -46
  104. package/.aiwf/07_AI_PERSONAS/architect/knowledge_base.md +0 -235
  105. package/.aiwf/07_AI_PERSONAS/backend/best_practices.md +0 -363
  106. package/.aiwf/07_AI_PERSONAS/backend/context_rules.md +0 -61
  107. package/.aiwf/07_AI_PERSONAS/backend/knowledge_base.md +0 -623
  108. package/.aiwf/07_AI_PERSONAS/data_analyst/best_practices.md +0 -32
  109. package/.aiwf/07_AI_PERSONAS/data_analyst/context_rules.md +0 -43
  110. package/.aiwf/07_AI_PERSONAS/data_analyst/knowledge_base.md +0 -36
  111. package/.aiwf/07_AI_PERSONAS/frontend/best_practices.md +0 -31
  112. package/.aiwf/07_AI_PERSONAS/frontend/context_rules.md +0 -43
  113. package/.aiwf/07_AI_PERSONAS/frontend/knowledge_base.md +0 -32
  114. package/.aiwf/07_AI_PERSONAS/security/best_practices.md +0 -63
  115. package/.aiwf/07_AI_PERSONAS/security/context_rules.md +0 -53
  116. package/.aiwf/07_AI_PERSONAS/security/knowledge_base.md +0 -93
  117. package/.aiwf/10_PERSONAS/active.json +0 -1
  118. package/.aiwf/10_STATE_OF_PROJECT/2025-07-09-07-20-solid-progress.md +0 -144
  119. package/.aiwf/98_PROMPTS/SAAS_DEVELOPMENT_GUIDE.md +0 -302
  120. package/.aiwf/98_PROMPTS/github_integration.md +0 -130
  121. package/.aiwf/98_PROMPTS/useful-prompts.md +0 -31
  122. package/.aiwf/98_PROMPTS/vibe-front-prompts.md +0 -89
  123. package/.aiwf/99_TEMPLATES/adr_template.md +0 -49
  124. package/.aiwf/99_TEMPLATES/feature_template.md +0 -263
  125. package/.aiwf/99_TEMPLATES/milestone_meta_template.md +0 -25
  126. package/.aiwf/99_TEMPLATES/project_manifest_template.md +0 -39
  127. package/.aiwf/99_TEMPLATES/sprint_meta_template.md +0 -23
  128. package/.aiwf/99_TEMPLATES/task_template.md +0 -36
  129. package/.aiwf/CLAUDE.md +0 -76
  130. package/.aiwf/ai-tools/README.md +0 -105
  131. package/.aiwf/ai-tools/augment/README.md +0 -371
  132. package/.aiwf/ai-tools/augment/config.json +0 -30
  133. package/.aiwf/ai-tools/augment/template/.augment/aiwf-integration.md +0 -387
  134. package/.aiwf/ai-tools/augment/template/.augment/augment.yaml +0 -347
  135. package/.aiwf/ai-tools/augment/template/augment.config.json +0 -64
  136. package/.aiwf/ai-tools/claude-code/README.md +0 -151
  137. package/.aiwf/ai-tools/claude-code/config.json +0 -28
  138. package/.aiwf/ai-tools/claude-code/template/CLAUDE.md +0 -91
  139. package/.aiwf/ai-tools/cursor/README.md +0 -314
  140. package/.aiwf/ai-tools/cursor/config.json +0 -29
  141. package/.aiwf/ai-tools/cursor/template/.cursorrules +0 -362
  142. package/.aiwf/ai-tools/github-copilot/README.md +0 -195
  143. package/.aiwf/ai-tools/github-copilot/config.json +0 -24
  144. package/.aiwf/ai-tools/github-copilot/template/.github/copilot-instructions.md +0 -202
  145. package/.aiwf/ai-tools/windsurf/README.md +0 -355
  146. package/.aiwf/ai-tools/windsurf/config.json +0 -29
  147. package/.aiwf/ai-tools/windsurf/template/.windsurf/aiwf-rules.md +0 -260
  148. package/.aiwf/ai-tools/windsurf/template/.windsurf/windsurf.config.js +0 -312
  149. package/.aiwf/ai-tools/windsurf/template/windsurf.config.json +0 -63
  150. package/.aiwf/config/language.json +0 -6
  151. package/.aiwf/feature-ledger/FL-001-authentication.json +0 -52
  152. package/.aiwf/feature-ledger/feature-index.json +0 -20
  153. package/.aiwf/installed.flag +0 -1
  154. package/.aiwf/metrics/metrics.json +0 -18
  155. package/.aiwf/personas/current.json +0 -5
  156. package/.aiwf/scripts/cache-templates.js +0 -209
  157. package/.aiwf/scripts/create-offline.js +0 -86
  158. package/.aiwf/scripts/create-project.js +0 -151
  159. package/.aiwf/scripts/feature-progress-calculator.cjs +0 -236
  160. package/.aiwf/scripts/git-integration.cjs +0 -391
  161. package/.aiwf/scripts/install-git-hooks.cjs +0 -226
  162. package/.aiwf/scripts/test-commit-parsing.cjs +0 -125
  163. package/.aiwf/scripts/update-feature-status.cjs +0 -198
  164. package/.aiwf/test-results-s02.json +0 -36
  165. package/.claude/commands/aiwf/aiwf_add_task_to_sprint.md +0 -283
  166. package/.claude/commands/aiwf/aiwf_changelog.md +0 -82
  167. package/.claude/commands/aiwf/aiwf_code_review.md +0 -88
  168. package/.claude/commands/aiwf/aiwf_commit.md +0 -160
  169. package/.claude/commands/aiwf/aiwf_compress_aggressive_persona.md +0 -53
  170. package/.claude/commands/aiwf/aiwf_compress_context.md +0 -116
  171. package/.claude/commands/aiwf/aiwf_compress_minimal_persona.md +0 -48
  172. package/.claude/commands/aiwf/aiwf_compress_stats.md +0 -79
  173. package/.claude/commands/aiwf/aiwf_compress_with_persona.md +0 -51
  174. package/.claude/commands/aiwf/aiwf_create_feature_ledger.md +0 -54
  175. package/.claude/commands/aiwf/aiwf_create_general_task.md +0 -147
  176. package/.claude/commands/aiwf/aiwf_create_milestone_plan.md +0 -194
  177. package/.claude/commands/aiwf/aiwf_create_prd.md +0 -280
  178. package/.claude/commands/aiwf/aiwf_create_sprint_tasks.md +0 -189
  179. package/.claude/commands/aiwf/aiwf_create_sprints_from_milestone.md +0 -121
  180. package/.claude/commands/aiwf/aiwf_default_mode.md +0 -44
  181. package/.claude/commands/aiwf/aiwf_discuss_review.md +0 -29
  182. package/.claude/commands/aiwf/aiwf_do_task.md +0 -109
  183. package/.claude/commands/aiwf/aiwf_docs.md +0 -225
  184. package/.claude/commands/aiwf/aiwf_evaluate.md +0 -92
  185. package/.claude/commands/aiwf/aiwf_get_feature_details.md +0 -78
  186. package/.claude/commands/aiwf/aiwf_infinite.md +0 -202
  187. package/.claude/commands/aiwf/aiwf_initialize.md +0 -134
  188. package/.claude/commands/aiwf/aiwf_install_git_hooks.md +0 -63
  189. package/.claude/commands/aiwf/aiwf_issue_create.md +0 -65
  190. package/.claude/commands/aiwf/aiwf_link_feature_branch.md +0 -43
  191. package/.claude/commands/aiwf/aiwf_link_feature_commit.md +0 -46
  192. package/.claude/commands/aiwf/aiwf_link_feature_to_milestone.md +0 -57
  193. package/.claude/commands/aiwf/aiwf_list_features.md +0 -54
  194. package/.claude/commands/aiwf/aiwf_mermaid.md +0 -272
  195. package/.claude/commands/aiwf/aiwf_persona_architect.md +0 -48
  196. package/.claude/commands/aiwf/aiwf_persona_backend.md +0 -37
  197. package/.claude/commands/aiwf/aiwf_persona_data_analyst.md +0 -37
  198. package/.claude/commands/aiwf/aiwf_persona_frontend.md +0 -37
  199. package/.claude/commands/aiwf/aiwf_persona_security.md +0 -48
  200. package/.claude/commands/aiwf/aiwf_persona_status.md +0 -50
  201. package/.claude/commands/aiwf/aiwf_pr_create.md +0 -76
  202. package/.claude/commands/aiwf/aiwf_prime.md +0 -9
  203. package/.claude/commands/aiwf/aiwf_project_review.md +0 -261
  204. package/.claude/commands/aiwf/aiwf_switch_language.md +0 -160
  205. package/.claude/commands/aiwf/aiwf_test.md +0 -124
  206. package/.claude/commands/aiwf/aiwf_testing_review.md +0 -198
  207. package/.claude/commands/aiwf/aiwf_tm-run-all-subtask.md +0 -210
  208. package/.claude/commands/aiwf/aiwf_ultrathink_code_advanced.md +0 -460
  209. package/.claude/commands/aiwf/aiwf_ultrathink_code_basic.md +0 -165
  210. package/.claude/commands/aiwf/aiwf_ultrathink_general.md +0 -305
  211. package/.claude/commands/aiwf/aiwf_update_docs_kr.md +0 -25
  212. package/.claude/commands/aiwf/aiwf_update_feature_status.md +0 -53
  213. package/.claude/commands/aiwf/aiwf_yolo.md +0 -300
  214. package/.eslintrc.json +0 -26
  215. package/.prettierrc +0 -10
  216. package/CLAUDE.md +0 -254
  217. package/RELEASE_NOTES_M02.md +0 -177
  218. package/TEST_RECOVERY_PLAN.md +0 -68
  219. package/claude-code/aiwf/en/.aiwf/00_PROJECT_MANIFEST.md +0 -49
  220. package/claude-code/aiwf/en/.aiwf/01_PROJECT_DOCS/ARCHITECTURE.md +0 -55
  221. package/claude-code/aiwf/en/.aiwf/02_REQUIREMENTS/CLAUDE.md +0 -78
  222. package/claude-code/aiwf/en/.aiwf/02_REQUIREMENTS/M01_Backend_Setup/M01_milestone_meta.md +0 -42
  223. package/claude-code/aiwf/en/.aiwf/02_REQUIREMENTS/M01_Backend_Setup/PRD_AMEND_01_Auth_Flow_Update.md +0 -73
  224. package/claude-code/aiwf/en/.aiwf/02_REQUIREMENTS/M01_Backend_Setup/PRD_Backend_Setup.md +0 -98
  225. package/claude-code/aiwf/en/.aiwf/02_REQUIREMENTS/M01_Backend_Setup/SPECS_API_V1.md +0 -232
  226. package/claude-code/aiwf/en/.aiwf/03_SPRINTS/CLAUDE.md +0 -83
  227. package/claude-code/aiwf/en/.aiwf/03_SPRINTS/S01_M01_Initial_API/S01_sprint_meta.md +0 -49
  228. package/claude-code/aiwf/en/.aiwf/03_SPRINTS/S01_M01_Initial_API/T01_S01_Setup_Project_Structure.md +0 -60
  229. package/claude-code/aiwf/en/.aiwf/04_GENERAL_TASKS/CLAUDE.md +0 -96
  230. package/claude-code/aiwf/en/.aiwf/04_GENERAL_TASKS/T002_API_Rate_Limiting.md +0 -54
  231. package/claude-code/aiwf/en/.aiwf/04_GENERAL_TASKS/TX001_Refactor_Logging_Module.md +0 -58
  232. package/claude-code/aiwf/en/.aiwf/05_ARCHITECTURAL_DECISIONS/ADR001_Chosen_Database_System.md +0 -119
  233. package/claude-code/aiwf/en/.aiwf/05_ARCHITECTURAL_DECISIONS/ADR002_API_Authentication_Method.md +0 -124
  234. package/claude-code/aiwf/en/.aiwf/10_STATE_OF_PROJECT/2025-06-12-12-00-needs-focus.md +0 -139
  235. package/claude-code/aiwf/en/.aiwf/10_STATE_OF_PROJECT/2025-06-12-12-00-test-alignment.md +0 -155
  236. package/claude-code/aiwf/en/.aiwf/10_STATE_OF_PROJECT/2025-06-13-00-50-solid-progress.md +0 -122
  237. package/claude-code/aiwf/en/.aiwf/10_STATE_OF_PROJECT/2025-06-14-08-30-infrastructure-challenges.md +0 -141
  238. package/claude-code/aiwf/en/.aiwf/10_STATE_OF_PROJECT/2025-06-16-21-48-critical-foundation-issues.md +0 -177
  239. package/claude-code/aiwf/en/.aiwf/10_STATE_OF_PROJECT/2025-06-17-15-08-solid-progress.md +0 -149
  240. package/claude-code/aiwf/en/.aiwf/10_STATE_OF_PROJECT/index.json +0 -5
  241. package/claude-code/aiwf/en/.aiwf/10_STATE_OF_PROJECT/sync-index.js +0 -78
  242. package/claude-code/aiwf/en/.aiwf/98_PROMPTS/github_integration.md +0 -130
  243. package/claude-code/aiwf/en/.aiwf/98_PROMPTS/useful-prompts.md +0 -31
  244. package/claude-code/aiwf/en/.aiwf/98_PROMPTS/vibe-front-prompts.md +0 -89
  245. package/claude-code/aiwf/en/.aiwf/99_TEMPLATES/adr_template.md +0 -49
  246. package/claude-code/aiwf/en/.aiwf/99_TEMPLATES/milestone_meta_template.md +0 -25
  247. package/claude-code/aiwf/en/.aiwf/99_TEMPLATES/project_manifest_template.md +0 -39
  248. package/claude-code/aiwf/en/.aiwf/99_TEMPLATES/sprint_meta_template.md +0 -23
  249. package/claude-code/aiwf/en/.aiwf/99_TEMPLATES/task_template.md +0 -36
  250. package/claude-code/aiwf/en/.aiwf/CLAUDE.md +0 -74
  251. package/claude-code/aiwf/en/.aiwf/README.md +0 -97
  252. package/claude-code/aiwf/en/.claude/CLAUDE_BE.md +0 -276
  253. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_changelog.md +0 -82
  254. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_code_review.md +0 -88
  255. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_commit.md +0 -160
  256. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_create_feature_ledger.md +0 -54
  257. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_create_general_task.md +0 -147
  258. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_create_milestone_plan.md +0 -194
  259. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_create_prd.md +0 -272
  260. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_create_sprint_tasks.md +0 -189
  261. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_create_sprints_from_milestone.md +0 -121
  262. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_create_testcase.md +0 -561
  263. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_default_mode.md +0 -66
  264. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_discuss_review.md +0 -29
  265. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_do_task.md +0 -109
  266. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_docs.md +0 -225
  267. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_get_feature_details.md +0 -78
  268. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_infinite.md +0 -202
  269. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_initialize.md +0 -134
  270. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_issue_create.md +0 -65
  271. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_link_feature_to_milestone.md +0 -57
  272. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_list_features.md +0 -54
  273. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_mermaid.md +0 -272
  274. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_persona_architect.md +0 -60
  275. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_persona_backend.md +0 -60
  276. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_persona_data_analyst.md +0 -60
  277. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_persona_frontend.md +0 -60
  278. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_persona_security.md +0 -60
  279. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_persona_status.md +0 -72
  280. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_pr_create.md +0 -76
  281. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_prime.md +0 -9
  282. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_project_review.md +0 -261
  283. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_switch_language.md +0 -160
  284. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_test.md +0 -125
  285. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_testing_review.md +0 -198
  286. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_tm-run-all-subtask.md +0 -206
  287. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_ultrathink_code_advanced.md +0 -460
  288. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_ultrathink_code_basic.md +0 -165
  289. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_ultrathink_general.md +0 -362
  290. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_update_feature_status.md +0 -53
  291. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_yolo.md +0 -300
  292. package/claude-code/aiwf/en/.claude/mcp.json +0 -31
  293. package/claude-code/aiwf/en/.claude/settings.json +0 -102
  294. package/claude-code/aiwf/en/commands/ai-persona.js +0 -667
  295. package/claude-code/aiwf/en/commands/compress-context.js +0 -355
  296. package/claude-code/aiwf/en/commands/feature-ledger.js +0 -565
  297. package/claude-code/aiwf/en/config/commit-patterns.js +0 -103
  298. package/claude-code/aiwf/en/hooks/install-hooks.sh +0 -100
  299. package/claude-code/aiwf/en/hooks/post-commit +0 -84
  300. package/claude-code/aiwf/en/tests/compression-test-suite.js +0 -1252
  301. package/claude-code/aiwf/en/tests/test-git-integration.js +0 -164
  302. package/claude-code/aiwf/en/tests/token-tracking.test.js +0 -537
  303. package/claude-code/aiwf/en/utils/context-compressor.js +0 -583
  304. package/claude-code/aiwf/en/utils/git-utils.js +0 -220
  305. package/claude-code/aiwf/en/utils/text-summarizer.js +0 -487
  306. package/claude-code/aiwf/ko/.aiwf/00_PROJECT_MANIFEST.md +0 -49
  307. package/claude-code/aiwf/ko/.aiwf/01_PROJECT_DOCS/ARCHITECTURE.md +0 -55
  308. package/claude-code/aiwf/ko/.aiwf/02_REQUIREMENTS/CLAUDE.md +0 -78
  309. package/claude-code/aiwf/ko/.aiwf/02_REQUIREMENTS/M01_Backend_Setup/M01_milestone_meta.md +0 -42
  310. package/claude-code/aiwf/ko/.aiwf/02_REQUIREMENTS/M01_Backend_Setup/PRD_AMEND_01_Auth_Flow_Update.md +0 -73
  311. package/claude-code/aiwf/ko/.aiwf/02_REQUIREMENTS/M01_Backend_Setup/PRD_Backend_Setup.md +0 -98
  312. package/claude-code/aiwf/ko/.aiwf/02_REQUIREMENTS/M01_Backend_Setup/SPECS_API_V1.md +0 -232
  313. package/claude-code/aiwf/ko/.aiwf/03_SPRINTS/CLAUDE.md +0 -83
  314. package/claude-code/aiwf/ko/.aiwf/03_SPRINTS/S01_M01_Initial_API/S01_sprint_meta.md +0 -49
  315. package/claude-code/aiwf/ko/.aiwf/03_SPRINTS/S01_M01_Initial_API/T01_S01_Setup_Project_Structure.md +0 -60
  316. package/claude-code/aiwf/ko/.aiwf/04_GENERAL_TASKS/CLAUDE.md +0 -96
  317. package/claude-code/aiwf/ko/.aiwf/04_GENERAL_TASKS/T002_API_Rate_Limiting.md +0 -54
  318. package/claude-code/aiwf/ko/.aiwf/04_GENERAL_TASKS/TX001_Refactor_Logging_Module.md +0 -58
  319. package/claude-code/aiwf/ko/.aiwf/05_ARCHITECTURAL_DECISIONS/ADR001_Chosen_Database_System.md +0 -119
  320. package/claude-code/aiwf/ko/.aiwf/05_ARCHITECTURAL_DECISIONS/ADR002_API_Authentication_Method.md +0 -124
  321. package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/FEATURE_ID_GENERATOR.md +0 -138
  322. package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/FEATURE_INDEX.md +0 -186
  323. package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/FEATURE_METADATA.md +0 -240
  324. package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/FEATURE_WORKFLOW.md +0 -183
  325. package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/README.md +0 -94
  326. package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/active/FL001_/354/202/254/354/232/251/354/236/220_/354/235/270/354/246/235_/354/213/234/354/212/244/355/205/234.md +0 -154
  327. package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/active/FL002_ai_/355/216/230/353/245/264/354/206/214/353/202/230_/354/213/234/354/212/244/355/205/234.md +0 -272
  328. package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/completed/FL003_/353/213/244/352/265/255/354/226/264_/353/252/205/353/240/271/354/226/264_/355/221/234/354/244/200/355/231/224.md +0 -266
  329. package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/schemas/feature_schema.json +0 -122
  330. package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/schemas/feature_validator.cjs +0 -406
  331. package/claude-code/aiwf/ko/.aiwf/10_STATE_OF_PROJECT/2025-06-12-12-00-needs-focus.md +0 -139
  332. package/claude-code/aiwf/ko/.aiwf/10_STATE_OF_PROJECT/2025-06-12-12-00-test-alignment.md +0 -155
  333. package/claude-code/aiwf/ko/.aiwf/10_STATE_OF_PROJECT/2025-06-13-00-50-solid-progress.md +0 -122
  334. package/claude-code/aiwf/ko/.aiwf/10_STATE_OF_PROJECT/2025-06-14-08-30-infrastructure-challenges.md +0 -141
  335. package/claude-code/aiwf/ko/.aiwf/10_STATE_OF_PROJECT/2025-06-16-21-48-critical-foundation-issues.md +0 -177
  336. package/claude-code/aiwf/ko/.aiwf/10_STATE_OF_PROJECT/2025-06-17-15-08-solid-progress.md +0 -149
  337. package/claude-code/aiwf/ko/.aiwf/10_STATE_OF_PROJECT/index.json +0 -5
  338. package/claude-code/aiwf/ko/.aiwf/10_STATE_OF_PROJECT/sync-index.js +0 -78
  339. package/claude-code/aiwf/ko/.aiwf/98_PROMPTS/github_integration.md +0 -130
  340. package/claude-code/aiwf/ko/.aiwf/98_PROMPTS/useful-prompts.md +0 -31
  341. package/claude-code/aiwf/ko/.aiwf/98_PROMPTS/vibe-front-prompts.md +0 -89
  342. package/claude-code/aiwf/ko/.aiwf/99_TEMPLATES/adr_template.md +0 -49
  343. package/claude-code/aiwf/ko/.aiwf/99_TEMPLATES/milestone_meta_template.md +0 -25
  344. package/claude-code/aiwf/ko/.aiwf/99_TEMPLATES/project_manifest_template.md +0 -39
  345. package/claude-code/aiwf/ko/.aiwf/99_TEMPLATES/sprint_meta_template.md +0 -23
  346. package/claude-code/aiwf/ko/.aiwf/99_TEMPLATES/task_template.md +0 -36
  347. package/claude-code/aiwf/ko/.aiwf/CLAUDE.md +0 -76
  348. package/claude-code/aiwf/ko/.aiwf/README.md +0 -97
  349. package/claude-code/aiwf/ko/.claude/CLAUDE_BE.md +0 -276
  350. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_changelog.md +0 -82
  351. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_code_review.md +0 -88
  352. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_commit.md +0 -160
  353. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_aggressive_persona.md +0 -53
  354. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_context.md +0 -116
  355. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_minimal_persona.md +0 -48
  356. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_stats.md +0 -79
  357. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_with_persona.md +0 -51
  358. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_create_feature_ledger.md +0 -54
  359. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_create_general_task.md +0 -147
  360. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_create_milestone_plan.md +0 -194
  361. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_create_prd.md +0 -280
  362. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_create_sprint_tasks.md +0 -189
  363. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_create_sprints_from_milestone.md +0 -121
  364. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_create_testcase.md +0 -561
  365. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_default_mode.md +0 -44
  366. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_discuss_review.md +0 -29
  367. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_do_task.md +0 -109
  368. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_docs.md +0 -225
  369. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_evaluate.md +0 -92
  370. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_get_feature_details.md +0 -78
  371. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_infinite.md +0 -202
  372. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_initialize.md +0 -134
  373. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_issue_create.md +0 -65
  374. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_link_feature_to_milestone.md +0 -57
  375. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_list_features.md +0 -54
  376. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_mermaid.md +0 -272
  377. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_architect.md +0 -48
  378. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_backend.md +0 -37
  379. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_data_analyst.md +0 -37
  380. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_frontend.md +0 -37
  381. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_security.md +0 -48
  382. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_status.md +0 -50
  383. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_pr_create.md +0 -76
  384. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_prime.md +0 -9
  385. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_project_review.md +0 -261
  386. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_switch_language.md +0 -160
  387. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_test.md +0 -124
  388. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_testing_review.md +0 -198
  389. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_tm-run-all-subtask.md +0 -210
  390. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_ultrathink_code_advanced.md +0 -460
  391. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_ultrathink_code_basic.md +0 -165
  392. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_ultrathink_general.md +0 -305
  393. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_update_docs_kr.md +0 -25
  394. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_update_feature_status.md +0 -53
  395. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_yolo.md +0 -300
  396. package/claude-code/aiwf/ko/.claude/mcp.json +0 -31
  397. package/claude-code/aiwf/ko/.claude/settings.json +0 -102
  398. package/claude-code/aiwf/ko/CLAUDE.md +0 -76
  399. package/claude-code/aiwf/ko/ai-tools/README.md +0 -105
  400. package/claude-code/aiwf/ko/ai-tools/augment/README.md +0 -371
  401. package/claude-code/aiwf/ko/ai-tools/augment/config.json +0 -30
  402. package/claude-code/aiwf/ko/ai-tools/augment/template/.augment/aiwf-integration.md +0 -387
  403. package/claude-code/aiwf/ko/ai-tools/augment/template/.augment/augment.yaml +0 -347
  404. package/claude-code/aiwf/ko/ai-tools/augment/template/augment.config.json +0 -64
  405. package/claude-code/aiwf/ko/ai-tools/claude-code/README.md +0 -151
  406. package/claude-code/aiwf/ko/ai-tools/claude-code/config.json +0 -28
  407. package/claude-code/aiwf/ko/ai-tools/claude-code/template/CLAUDE.md +0 -91
  408. package/claude-code/aiwf/ko/ai-tools/cursor/README.md +0 -314
  409. package/claude-code/aiwf/ko/ai-tools/cursor/config.json +0 -29
  410. package/claude-code/aiwf/ko/ai-tools/cursor/template/.cursorrules +0 -362
  411. package/claude-code/aiwf/ko/ai-tools/github-copilot/README.md +0 -195
  412. package/claude-code/aiwf/ko/ai-tools/github-copilot/config.json +0 -24
  413. package/claude-code/aiwf/ko/ai-tools/github-copilot/template/.github/copilot-instructions.md +0 -202
  414. package/claude-code/aiwf/ko/ai-tools/windsurf/README.md +0 -355
  415. package/claude-code/aiwf/ko/ai-tools/windsurf/config.json +0 -29
  416. package/claude-code/aiwf/ko/ai-tools/windsurf/template/.windsurf/aiwf-rules.md +0 -260
  417. package/claude-code/aiwf/ko/ai-tools/windsurf/template/.windsurf/windsurf.config.js +0 -312
  418. package/claude-code/aiwf/ko/ai-tools/windsurf/template/windsurf.config.json +0 -63
  419. package/claude-code/aiwf/ko/commands/feature_commit_report.js +0 -370
  420. package/claude-code/aiwf/ko/commands/scan_git_history.js +0 -234
  421. package/claude-code/aiwf/ko/commands/sync_feature_commits.js +0 -154
  422. package/claude-code/aiwf/ko/commands/token-tracking.js +0 -443
  423. package/claude-code/aiwf/ko/feature-ledger/FL-001-authentication.json +0 -52
  424. package/claude-code/aiwf/ko/feature-ledger/feature-index.json +0 -20
  425. package/claude-code/aiwf/ko/hooks/install-hooks.sh +0 -100
  426. package/claude-code/aiwf/ko/hooks/post-commit +0 -84
  427. package/claude-code/aiwf/ko/personas/PERSONA_INDEX.md +0 -57
  428. package/claude-code/aiwf/ko/personas/analyst.json +0 -44
  429. package/claude-code/aiwf/ko/personas/architect/best_practices.md +0 -136
  430. package/claude-code/aiwf/ko/personas/architect/knowledge_base.md +0 -377
  431. package/claude-code/aiwf/ko/personas/architect.json +0 -44
  432. package/claude-code/aiwf/ko/personas/backend/best_practices.md +0 -766
  433. package/claude-code/aiwf/ko/personas/backend/knowledge_base.md +0 -1070
  434. package/claude-code/aiwf/ko/personas/data_analyst/best_practices.md +0 -594
  435. package/claude-code/aiwf/ko/personas/data_analyst/knowledge_base.md +0 -1057
  436. package/claude-code/aiwf/ko/personas/developer.json +0 -44
  437. package/claude-code/aiwf/ko/personas/developer.md +0 -37
  438. package/claude-code/aiwf/ko/personas/evaluation_criteria.json +0 -137
  439. package/claude-code/aiwf/ko/personas/frontend/best_practices.md +0 -445
  440. package/claude-code/aiwf/ko/personas/frontend/knowledge_base.md +0 -729
  441. package/claude-code/aiwf/ko/personas/persona-index.json +0 -31
  442. package/claude-code/aiwf/ko/personas/reviewer.json +0 -44
  443. package/claude-code/aiwf/ko/personas/security/best_practices.md +0 -307
  444. package/claude-code/aiwf/ko/personas/security/knowledge_base.md +0 -498
  445. package/claude-code/aiwf/ko/personas/tester.json +0 -44
  446. package/claude-code/aiwf/ko/scripts/cache-templates.js +0 -209
  447. package/claude-code/aiwf/ko/scripts/create-offline.js +0 -86
  448. package/claude-code/aiwf/ko/scripts/create-project.js +0 -151
  449. package/claude-code/aiwf/ko/scripts/feature-progress-calculator.cjs +0 -236
  450. package/claude-code/aiwf/ko/scripts/git-integration.cjs +0 -391
  451. package/claude-code/aiwf/ko/scripts/install-git-hooks.cjs +0 -226
  452. package/claude-code/aiwf/ko/scripts/test-commit-parsing.cjs +0 -125
  453. package/claude-code/aiwf/ko/scripts/update-feature-status.cjs +0 -198
  454. package/claude-code/aiwf/ko/tests/compression-test-suite.js +0 -1252
  455. package/claude-code/aiwf/ko/tests/test-git-integration.js +0 -164
  456. package/claude-code/aiwf/ko/tests/token-tracking.test.js +0 -537
  457. package/claude-code/aiwf/ko/utils/compression-metrics.js +0 -1031
  458. package/claude-code/aiwf/ko/utils/compression-strategies.js +0 -557
  459. package/claude-code/aiwf/ko/utils/content-normalizer.js +0 -455
  460. package/claude-code/aiwf/ko/utils/feature-updater.js +0 -271
  461. package/claude-code/aiwf/ko/utils/importance-classifier.js +0 -645
  462. package/claude-code/aiwf/ko/utils/information-filter.js +0 -710
  463. package/claude-code/aiwf/ko/utils/token-counter.js +0 -177
  464. package/claude-code/aiwf/ko/utils/token-monitor.js +0 -484
  465. package/claude-code/aiwf/ko/utils/token-reporter.js +0 -453
  466. package/claude-code/aiwf/ko/utils/token-storage.js +0 -433
  467. package/claude-code/aiwf/ko/utils/token-tracker.js +0 -283
  468. package/claude-code/docker/Dockerfile +0 -117
  469. package/jest.config.js +0 -23
  470. package/scripts/update-feature-status.js +0 -70
  471. package/tests/application.test.js +0 -260
  472. package/tests/basic.test.js +0 -62
  473. package/tests/commands.test.js +0 -127
  474. package/tests/installer.test.js +0 -129
  475. package/tests/integration/ai-persona-system.test.js +0 -396
  476. package/tests/integration/ai-persona.test.js +0 -390
  477. package/tests/integration/command-integration.test.js +0 -600
  478. package/tests/integration/context-compression.test.js +0 -361
  479. package/tests/integration/feature-ledger.test.js +0 -226
  480. package/tests/integration/git-integration.test.js +0 -307
  481. package/tests/integration/m02-milestone.test.js +0 -420
  482. package/tests/integration/persona-context-application.test.js +0 -508
  483. package/tests/integration/setup.js +0 -174
  484. package/tests/integration/test-persona-aware-compression.js +0 -93
  485. package/tests/integration/test-persona-system/.aiwf/metrics/metrics.json +0 -833
  486. package/tests/integration/test-persona-system/docs/README.md +0 -1
  487. package/tests/integration/test-persona-system/package.json +0 -1
  488. package/tests/integration/test-persona-system/src/auth.js +0 -1
  489. package/tests/integration/test-persona-system/src/index.js +0 -1
  490. package/tests/integration/test-persona-system/test/test.js +0 -1
  491. package/tests/language-utils.test.js +0 -287
  492. package/tests/s02-integration.test.js +0 -422
  493. package/tests/unit/ai-persona-manager.test.js +0 -514
  494. package/tests/unit/sprint-task.test.js +0 -172
  495. /package/{claude-code/aiwf/ko → src/lib/resources}/commands/compress-context.js +0 -0
  496. /package/{claude-code/aiwf/ko → src/lib/resources}/commands/evaluate.js +0 -0
  497. /package/{claude-code/aiwf/ko → src/lib/resources}/commands/feature-ledger.js +0 -0
  498. /package/{claude-code/aiwf/en → src/lib/resources}/commands/feature_commit_report.js +0 -0
  499. /package/{claude-code/aiwf/ko → src/lib/resources}/commands/persona-context-apply.js +0 -0
  500. /package/{claude-code/aiwf/en → src/lib/resources}/commands/scan_git_history.js +0 -0
  501. /package/{claude-code/aiwf/en → src/lib/resources}/commands/sync_feature_commits.js +0 -0
  502. /package/{claude-code/aiwf/en → src/lib/resources}/commands/token-tracking.js +0 -0
  503. /package/{claude-code/aiwf/ko → src/lib/resources}/config/commit-patterns.js +0 -0
  504. /package/{claude-code/aiwf/ko → src/lib/resources}/config/language.json +0 -0
  505. /package/{.aiwf/07_AI_PERSONAS → src/lib/resources/personas}/PERSONA_INDEX.md +0 -0
  506. /package/{.aiwf → src/lib/resources}/personas/analyst.json +0 -0
  507. /package/{.aiwf → src/lib/resources}/personas/architect/best_practices.md +0 -0
  508. /package/{.aiwf → src/lib/resources}/personas/architect/knowledge_base.md +0 -0
  509. /package/{.aiwf → src/lib/resources}/personas/architect.json +0 -0
  510. /package/{.aiwf → src/lib/resources}/personas/backend/best_practices.md +0 -0
  511. /package/{.aiwf → src/lib/resources}/personas/backend/knowledge_base.md +0 -0
  512. /package/{.aiwf → src/lib/resources}/personas/data_analyst/best_practices.md +0 -0
  513. /package/{.aiwf → src/lib/resources}/personas/data_analyst/knowledge_base.md +0 -0
  514. /package/{.aiwf → src/lib/resources}/personas/developer.json +0 -0
  515. /package/{.aiwf/10_PERSONAS → src/lib/resources/personas}/developer.md +0 -0
  516. /package/{.aiwf → src/lib/resources}/personas/evaluation_criteria.json +0 -0
  517. /package/{.aiwf → src/lib/resources}/personas/frontend/best_practices.md +0 -0
  518. /package/{.aiwf → src/lib/resources}/personas/frontend/knowledge_base.md +0 -0
  519. /package/{.aiwf → src/lib/resources}/personas/persona-index.json +0 -0
  520. /package/{.aiwf → src/lib/resources}/personas/reviewer.json +0 -0
  521. /package/{.aiwf → src/lib/resources}/personas/security/best_practices.md +0 -0
  522. /package/{.aiwf → src/lib/resources}/personas/security/knowledge_base.md +0 -0
  523. /package/{.aiwf → src/lib/resources}/personas/tester.json +0 -0
  524. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/README.md +0 -0
  525. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/config.json +0 -0
  526. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/template/.aiwf/config.json +0 -0
  527. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/template/.aiwf/feature-ledger.json +0 -0
  528. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/template/.aiwf/personas/backend-engineer.json +0 -0
  529. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/template/.aiwf/scripts/cli.js +0 -0
  530. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/template/.env.example +0 -0
  531. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/template/.eslintrc.json +0 -0
  532. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/template/README.md +0 -0
  533. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/template/jest.config.js +0 -0
  534. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/template/nodemon.json +0 -0
  535. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/template/package.json +0 -0
  536. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/template/src/app.ts +0 -0
  537. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/template/src/config/swagger.ts +0 -0
  538. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/template/src/controllers/aiwfController.ts +0 -0
  539. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/template/src/controllers/authController.ts +0 -0
  540. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/template/src/controllers/statusController.ts +0 -0
  541. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/template/src/index.ts +0 -0
  542. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/template/src/middleware/aiwfMiddleware.ts +0 -0
  543. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/template/src/middleware/authMiddleware.ts +0 -0
  544. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/template/src/middleware/errorHandler.ts +0 -0
  545. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/template/src/middleware/notFoundHandler.ts +0 -0
  546. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/template/src/middleware/requestLogger.ts +0 -0
  547. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/template/src/routes/aiwf.ts +0 -0
  548. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/template/src/routes/index.ts +0 -0
  549. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/template/src/routes/v1/index.ts +0 -0
  550. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/template/src/utils/logger.ts +0 -0
  551. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/template/tests/app.test.ts +0 -0
  552. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/api-server/template/tsconfig.json +0 -0
  553. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/npm-library/config.json +0 -0
  554. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/npm-library/template/LICENSE +0 -0
  555. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/npm-library/template/README.md +0 -0
  556. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/npm-library/template/package.json +0 -0
  557. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/config.json +0 -0
  558. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/template/.aiwf/config.json +0 -0
  559. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/template/.aiwf/feature-ledger.json +0 -0
  560. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/template/.aiwf/personas/fullstack-developer.json +0 -0
  561. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/template/.aiwf/scripts/cli.js +0 -0
  562. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/template/.eslintrc.cjs +0 -0
  563. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/template/README.md +0 -0
  564. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/template/index.html +0 -0
  565. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/template/package.json +0 -0
  566. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/template/postcss.config.js +0 -0
  567. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/template/public/vite.svg +0 -0
  568. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/template/src/App.tsx +0 -0
  569. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/template/src/components/Layout.tsx +0 -0
  570. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/template/src/components/aiwf/ContextStatus.tsx +0 -0
  571. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/template/src/components/aiwf/FeatureLedger.tsx +0 -0
  572. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/template/src/components/aiwf/TokenUsage.tsx +0 -0
  573. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/template/src/index.css +0 -0
  574. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/template/src/main.tsx +0 -0
  575. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/template/src/pages/AiwfDashboard.tsx +0 -0
  576. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/template/src/pages/HomePage.tsx +0 -0
  577. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/template/src/pages/NotFound.tsx +0 -0
  578. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/template/src/stores/aiwfStore.ts +0 -0
  579. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/template/src/types/global.d.ts +0 -0
  580. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/template/src/vite-env.d.ts +0 -0
  581. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/template/tailwind.config.js +0 -0
  582. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/template/tsconfig.json +0 -0
  583. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/template/tsconfig.node.json +0 -0
  584. /package/{claude-code/aiwf/ko → src/lib/resources}/templates/web-app/template/vite.config.ts +0 -0
  585. /package/{claude-code/aiwf/ko → src/lib/resources}/utils/background-monitor.js +0 -0
  586. /package/{claude-code/aiwf/en → src/lib/resources}/utils/compression-metrics.js +0 -0
  587. /package/{claude-code/aiwf/en → src/lib/resources}/utils/compression-strategies.js +0 -0
  588. /package/{claude-code/aiwf/en → src/lib/resources}/utils/content-normalizer.js +0 -0
  589. /package/{claude-code/aiwf/ko → src/lib/resources}/utils/context-compressor.js +0 -0
  590. /package/{claude-code/aiwf/ko → src/lib/resources}/utils/context-rule-parser.js +0 -0
  591. /package/{claude-code/aiwf/ko → src/lib/resources}/utils/context-token-monitor.js +0 -0
  592. /package/{claude-code/aiwf/ko → src/lib/resources}/utils/context-update-manager.js +0 -0
  593. /package/{claude-code/aiwf/en → src/lib/resources}/utils/feature-updater.js +0 -0
  594. /package/{claude-code/aiwf/ko → src/lib/resources}/utils/git-utils.js +0 -0
  595. /package/{claude-code/aiwf/en → src/lib/resources}/utils/importance-classifier.js +0 -0
  596. /package/{claude-code/aiwf/en → src/lib/resources}/utils/information-filter.js +0 -0
  597. /package/{claude-code/aiwf/ko → src/lib/resources}/utils/persona-aware-compressor.js +0 -0
  598. /package/{claude-code/aiwf/ko → src/lib/resources}/utils/prompt-injector.js +0 -0
  599. /package/{claude-code/aiwf/ko → src/lib/resources}/utils/simplified-evaluator.js +0 -0
  600. /package/{claude-code/aiwf/ko → src/lib/resources}/utils/text-summarizer.js +0 -0
  601. /package/{claude-code/aiwf/en → src/lib/resources}/utils/token-counter.js +0 -0
  602. /package/{claude-code/aiwf/en → src/lib/resources}/utils/token-monitor.js +0 -0
  603. /package/{claude-code/aiwf/en → src/lib/resources}/utils/token-reporter.js +0 -0
  604. /package/{claude-code/aiwf/en → src/lib/resources}/utils/token-storage.js +0 -0
  605. /package/{claude-code/aiwf/en → src/lib/resources}/utils/token-tracker.js +0 -0
@@ -1,514 +0,0 @@
1
- /**
2
- * AI Persona Manager Unit Tests
3
- */
4
-
5
- import { jest } from '@jest/globals';
6
- import { AIPersonaManager } from '../../src/lib/ai-persona-manager.js';
7
- import { ContextEngine } from '../../src/lib/context-engine.js';
8
- import { MetricsCollector } from '../../src/lib/metrics-collector.js';
9
- import { TaskAnalyzer } from '../../src/lib/task-analyzer.js';
10
- import fs from 'fs/promises';
11
- import path from 'path';
12
-
13
- // Mock dependencies
14
- jest.mock('../../src/lib/context-engine.js');
15
- jest.mock('../../src/lib/metrics-collector.js');
16
- jest.mock('../../src/lib/task-analyzer.js');
17
- jest.mock('fs/promises');
18
-
19
- describe('AIPersonaManager', () => {
20
- let manager;
21
- let mockContextEngine;
22
- let mockMetricsCollector;
23
- let mockTaskAnalyzer;
24
-
25
- beforeEach(() => {
26
- // Reset mocks
27
- jest.clearAllMocks();
28
-
29
- // Create mock instances
30
- mockContextEngine = {
31
- init: jest.fn().mockResolvedValue(true),
32
- applyPersonaRules: jest.fn().mockResolvedValue({}),
33
- filterContent: jest.fn().mockResolvedValue('filtered content'),
34
- reset: jest.fn().mockResolvedValue(true),
35
- cleanup: jest.fn().mockResolvedValue(true)
36
- };
37
-
38
- mockMetricsCollector = {
39
- init: jest.fn().mockResolvedValue(true),
40
- trackEvent: jest.fn(),
41
- collectCurrentMetrics: jest.fn().mockResolvedValue({}),
42
- getPersonaHistory: jest.fn().mockResolvedValue([]),
43
- getPersonaStats: jest.fn().mockResolvedValue({}),
44
- generateReport: jest.fn().mockResolvedValue({}),
45
- reset: jest.fn().mockResolvedValue(true),
46
- cleanup: jest.fn().mockResolvedValue(true)
47
- };
48
-
49
- mockTaskAnalyzer = {
50
- analyzeTask: jest.fn().mockResolvedValue({
51
- keywords: ['test'],
52
- scores: { developer: 50, architect: 30 },
53
- primaryType: 'developer'
54
- }),
55
- calculateSimilarity: jest.fn().mockReturnValue(0.5),
56
- cleanup: jest.fn()
57
- };
58
-
59
- // Mock constructor implementations
60
- ContextEngine.mockImplementation(() => mockContextEngine);
61
- MetricsCollector.mockImplementation(() => mockMetricsCollector);
62
- TaskAnalyzer.mockImplementation(() => mockTaskAnalyzer);
63
-
64
- // Mock fs
65
- fs.mkdir.mockResolvedValue(undefined);
66
- fs.readdir.mockResolvedValue([]);
67
-
68
- // Create manager instance
69
- manager = new AIPersonaManager({
70
- metricsEnabled: true,
71
- autoDetectionEnabled: true
72
- });
73
- });
74
-
75
- afterEach(() => {
76
- jest.restoreAllMocks();
77
- });
78
-
79
- describe('initialization', () => {
80
- test('initializes successfully', async () => {
81
- const result = await manager.init();
82
-
83
- expect(result).toBe(true);
84
- expect(fs.mkdir).toHaveBeenCalledWith(
85
- expect.stringContaining('.aiwf/personas'),
86
- { recursive: true }
87
- );
88
- expect(mockContextEngine.init).toHaveBeenCalled();
89
- expect(mockMetricsCollector.init).toHaveBeenCalled();
90
- });
91
-
92
- test('loads available personas', async () => {
93
- await manager.init();
94
-
95
- const personas = manager.getAvailablePersonas();
96
- expect(personas).toContain('architect');
97
- expect(personas).toContain('debugger');
98
- expect(personas).toContain('reviewer');
99
- expect(personas).toContain('documenter');
100
- expect(personas).toContain('optimizer');
101
- expect(personas).toContain('developer');
102
- });
103
-
104
- test('sets default persona to developer', async () => {
105
- await manager.init();
106
-
107
- const current = manager.getCurrentPersona();
108
- expect(current.name).toBe('developer');
109
- });
110
-
111
- test('emits initialized event', async () => {
112
- const listener = jest.fn();
113
- manager.on('initialized', listener);
114
-
115
- await manager.init();
116
-
117
- expect(listener).toHaveBeenCalledWith({
118
- availablePersonas: expect.arrayContaining(['developer']),
119
- currentPersona: 'developer'
120
- });
121
- });
122
- });
123
-
124
- describe('persona switching', () => {
125
- beforeEach(async () => {
126
- await manager.init();
127
- });
128
-
129
- test('switches personas correctly', async () => {
130
- const result = await manager.switchPersona('architect');
131
-
132
- expect(result.name).toBe('architect');
133
- expect(manager.currentPersona.name).toBe('architect');
134
- expect(mockContextEngine.applyPersonaRules).toHaveBeenCalledWith(
135
- expect.objectContaining({ name: 'architect' })
136
- );
137
- });
138
-
139
- test('tracks persona switch event', async () => {
140
- await manager.switchPersona('debugger', { manual: true });
141
-
142
- expect(mockMetricsCollector.trackEvent).toHaveBeenCalledWith(
143
- 'persona_switch',
144
- expect.objectContaining({
145
- from: 'developer',
146
- to: 'debugger',
147
- trigger: 'manual'
148
- })
149
- );
150
- });
151
-
152
- test('saves persona history', async () => {
153
- await manager.switchPersona('architect');
154
- await manager.switchPersona('debugger');
155
-
156
- expect(manager.personaHistory).toHaveLength(1);
157
- expect(manager.personaHistory[0].persona.name).toBe('architect');
158
- });
159
-
160
- test('throws error for invalid persona', async () => {
161
- await expect(manager.switchPersona('invalid')).rejects.toThrow(
162
- 'Invalid persona: invalid'
163
- );
164
- });
165
-
166
- test('skips switch if already in persona', async () => {
167
- await manager.switchPersona('architect');
168
- mockContextEngine.applyPersonaRules.mockClear();
169
-
170
- await manager.switchPersona('architect');
171
-
172
- expect(mockContextEngine.applyPersonaRules).not.toHaveBeenCalled();
173
- });
174
-
175
- test('emits personaSwitched event', async () => {
176
- const listener = jest.fn();
177
- manager.on('personaSwitched', listener);
178
-
179
- await manager.switchPersona('reviewer', { manual: true });
180
-
181
- expect(listener).toHaveBeenCalledWith({
182
- persona: 'reviewer',
183
- trigger: 'manual'
184
- });
185
- });
186
- });
187
-
188
- describe('automatic persona detection', () => {
189
- beforeEach(async () => {
190
- await manager.init();
191
- });
192
-
193
- test('detects optimal persona for debugging task', async () => {
194
- mockTaskAnalyzer.analyzeTask.mockResolvedValue({
195
- keywords: ['bug', 'error', 'fix'],
196
- scores: {
197
- debugger: 80,
198
- developer: 40,
199
- architect: 20
200
- },
201
- primaryType: 'debugger'
202
- });
203
-
204
- const result = await manager.detectOptimalPersona({
205
- command: 'fix the login error',
206
- description: 'Users cannot login due to session bug'
207
- });
208
-
209
- expect(result).toBe('debugger');
210
- expect(mockTaskAnalyzer.analyzeTask).toHaveBeenCalled();
211
- });
212
-
213
- test('switches persona if confidence is high', async () => {
214
- mockTaskAnalyzer.analyzeTask.mockResolvedValue({
215
- scores: {
216
- architect: 90,
217
- developer: 30
218
- }
219
- });
220
-
221
- await manager.detectOptimalPersona({
222
- command: 'design the system architecture'
223
- });
224
-
225
- expect(manager.currentPersona.name).toBe('architect');
226
- });
227
-
228
- test('does not switch if confidence is low', async () => {
229
- mockTaskAnalyzer.analyzeTask.mockResolvedValue({
230
- scores: {
231
- developer: 55,
232
- architect: 50
233
- }
234
- });
235
-
236
- await manager.detectOptimalPersona({
237
- command: 'implement feature'
238
- });
239
-
240
- expect(manager.currentPersona.name).toBe('developer');
241
- });
242
-
243
- test('returns current persona if auto-detection disabled', async () => {
244
- manager.options.autoDetectionEnabled = false;
245
-
246
- const result = await manager.detectOptimalPersona({
247
- command: 'debug error'
248
- });
249
-
250
- expect(result).toBe('developer');
251
- expect(mockTaskAnalyzer.analyzeTask).not.toHaveBeenCalled();
252
- });
253
- });
254
-
255
- describe('persona scoring', () => {
256
- beforeEach(async () => {
257
- await manager.init();
258
- });
259
-
260
- test('calculates persona fit score', async () => {
261
- const analysis = {
262
- keywords: ['design', 'architecture', 'system'],
263
- scores: { architect: 70 },
264
- recentFiles: ['architecture.md', 'design.yml'],
265
- errorState: { hasErrors: false }
266
- };
267
-
268
- const score = await manager.scorePersonaFit('architect', analysis);
269
-
270
- expect(score).toBeGreaterThan(0);
271
- expect(score).toBeLessThanOrEqual(1);
272
- });
273
-
274
- test('gives bonus for debugger when errors exist', async () => {
275
- const analysis = {
276
- keywords: ['error'],
277
- scores: { debugger: 50 },
278
- errorState: { hasErrors: true }
279
- };
280
-
281
- const score = await manager.scorePersonaFit('debugger', analysis);
282
-
283
- expect(score).toBeGreaterThan(0.5);
284
- });
285
-
286
- test('considers historical performance', async () => {
287
- mockMetricsCollector.getPersonaHistory.mockResolvedValue([
288
- {
289
- task: { type: 'debug' },
290
- qualityMetrics: { overallScore: 0.9 }
291
- }
292
- ]);
293
-
294
- const analysis = {
295
- keywords: ['debug'],
296
- scores: { debugger: 60 }
297
- };
298
-
299
- const score = await manager.scorePersonaFit('debugger', analysis);
300
-
301
- expect(mockMetricsCollector.getPersonaHistory).toHaveBeenCalledWith('debugger');
302
- });
303
- });
304
-
305
- describe('context management', () => {
306
- beforeEach(async () => {
307
- await manager.init();
308
- });
309
-
310
- test('gets persona context rules', () => {
311
- const context = manager.getPersonaContext('architect');
312
-
313
- expect(context).toHaveProperty('priority');
314
- expect(context).toHaveProperty('exclude');
315
- expect(context).toHaveProperty('focus');
316
- expect(context).toHaveProperty('keywords');
317
- });
318
-
319
- test('applies persona rules to content', async () => {
320
- const content = 'test content';
321
- const result = await manager.applyPersonaRules(content, 'reviewer');
322
-
323
- expect(mockContextEngine.filterContent).toHaveBeenCalledWith(
324
- content,
325
- expect.objectContaining({ name: 'reviewer' })
326
- );
327
- expect(result).toBe('filtered content');
328
- });
329
-
330
- test('uses current persona if none specified', async () => {
331
- await manager.switchPersona('optimizer');
332
-
333
- await manager.applyPersonaRules('content');
334
-
335
- expect(mockContextEngine.filterContent).toHaveBeenCalledWith(
336
- 'content',
337
- expect.objectContaining({ name: 'optimizer' })
338
- );
339
- });
340
- });
341
-
342
- describe('metrics and reporting', () => {
343
- beforeEach(async () => {
344
- await manager.init();
345
- });
346
-
347
- test('gets persona statistics', async () => {
348
- mockMetricsCollector.getPersonaStats.mockResolvedValue({
349
- totalSessions: 10,
350
- averageQualityScore: 0.85
351
- });
352
-
353
- const stats = await manager.getPersonaStats('architect');
354
-
355
- expect(mockMetricsCollector.getPersonaStats).toHaveBeenCalledWith('architect');
356
- expect(stats).toHaveProperty('totalSessions', 10);
357
- });
358
-
359
- test('generates comprehensive report', async () => {
360
- mockMetricsCollector.generateReport.mockResolvedValue({
361
- personaAnalysis: {
362
- architect: { effectiveness: 0.8 }
363
- }
364
- });
365
-
366
- const report = await manager.generateReport({ timeRange: 'week' });
367
-
368
- expect(mockMetricsCollector.generateReport).toHaveBeenCalledWith({ timeRange: 'week' });
369
- expect(report).toHaveProperty('personaInsights');
370
- });
371
-
372
- test('returns message when metrics disabled', async () => {
373
- manager.options.metricsEnabled = false;
374
-
375
- const stats = await manager.getPersonaStats('architect');
376
-
377
- expect(stats).toHaveProperty('message', 'Metrics collection is disabled');
378
- });
379
- });
380
-
381
- describe('persona insights', () => {
382
- beforeEach(async () => {
383
- await manager.init();
384
- });
385
-
386
- test('generates insights for persona', async () => {
387
- const analysis = {
388
- tokenEfficiency: 0.3,
389
- averageCompletionTime: 400000,
390
- averageQualityScore: 0.7,
391
- bestUseCases: ['design', 'planning']
392
- };
393
-
394
- const insights = await manager.generatePersonaInsights('architect', analysis);
395
-
396
- expect(insights).toHaveProperty('effectiveness');
397
- expect(insights).toHaveProperty('recommendations');
398
- expect(insights).toHaveProperty('bestPractices');
399
- expect(insights.recommendations).toContain(
400
- 'Consider more aggressive context filtering to improve token efficiency'
401
- );
402
- });
403
-
404
- test('calculates effectiveness rating', () => {
405
- const analysis = {
406
- averageCompletionTime: 60000,
407
- averageQualityScore: 0.9,
408
- tokenEfficiency: 0.8
409
- };
410
-
411
- const effectiveness = manager.calculateEffectiveness(analysis);
412
-
413
- expect(effectiveness.score).toBeGreaterThan(0.8);
414
- expect(effectiveness.rating).toBe('excellent');
415
- });
416
- });
417
-
418
- describe('utility methods', () => {
419
- beforeEach(async () => {
420
- await manager.init();
421
- });
422
-
423
- test('validates persona names', () => {
424
- expect(manager.isValidPersona('architect')).toBe(true);
425
- expect(manager.isValidPersona('invalid')).toBe(false);
426
- });
427
-
428
- test('gets available personas', () => {
429
- const personas = manager.getAvailablePersonas();
430
-
431
- expect(personas).toBeInstanceOf(Array);
432
- expect(personas.length).toBe(6);
433
- expect(personas).toContain('developer');
434
- });
435
-
436
- test('matches file patterns', () => {
437
- expect(manager.matchesPattern('test.js', '*.js')).toBe(true);
438
- expect(manager.matchesPattern('src/test.js', 'src/**')).toBe(true);
439
- expect(manager.matchesPattern('test.py', '*.js')).toBe(false);
440
- });
441
- });
442
-
443
- describe('reset and cleanup', () => {
444
- beforeEach(async () => {
445
- await manager.init();
446
- });
447
-
448
- test('resets persona system', async () => {
449
- await manager.switchPersona('architect');
450
- manager.personaHistory.push({ test: 'data' });
451
-
452
- await manager.reset();
453
-
454
- expect(manager.currentPersona.name).toBe('developer');
455
- expect(manager.personaHistory).toHaveLength(0);
456
- expect(manager.personaCache.size).toBe(0);
457
- expect(mockContextEngine.reset).toHaveBeenCalled();
458
- expect(mockMetricsCollector.reset).toHaveBeenCalled();
459
- });
460
-
461
- test('cleans up resources', async () => {
462
- await manager.cleanup();
463
-
464
- expect(manager.personaCache.size).toBe(0);
465
- expect(mockContextEngine.cleanup).toHaveBeenCalled();
466
- expect(mockMetricsCollector.cleanup).toHaveBeenCalled();
467
- });
468
- });
469
-
470
- describe('error handling', () => {
471
- beforeEach(async () => {
472
- await manager.init();
473
- });
474
-
475
- test('emits error on initialization failure', async () => {
476
- const error = new Error('Init failed');
477
- mockContextEngine.init.mockRejectedValue(error);
478
-
479
- const listener = jest.fn();
480
- const newManager = new AIPersonaManager();
481
- newManager.on('error', listener);
482
-
483
- await expect(newManager.init()).rejects.toThrow('Init failed');
484
- expect(listener).toHaveBeenCalledWith({
485
- error,
486
- phase: 'initialization'
487
- });
488
- });
489
-
490
- test('emits error on persona switch failure', async () => {
491
- const error = new Error('Switch failed');
492
- mockContextEngine.applyPersonaRules.mockRejectedValue(error);
493
-
494
- const listener = jest.fn();
495
- manager.on('error', listener);
496
-
497
- await expect(manager.switchPersona('architect')).rejects.toThrow('Switch failed');
498
- expect(listener).toHaveBeenCalledWith({
499
- error,
500
- phase: 'persona_switch'
501
- });
502
- });
503
-
504
- test('handles detection errors gracefully', async () => {
505
- mockTaskAnalyzer.analyzeTask.mockRejectedValue(new Error('Analysis failed'));
506
-
507
- const result = await manager.detectOptimalPersona({
508
- command: 'test command'
509
- });
510
-
511
- expect(result).toBe('developer'); // Falls back to current persona
512
- });
513
- });
514
- });
@@ -1,172 +0,0 @@
1
- /**
2
- * 스프린트 태스크 관리 테스트
3
- */
4
-
5
- import { jest } from '@jest/globals';
6
- import { addTaskToSprint } from '../../src/commands/sprint-task.js';
7
-
8
- // Manual mocks
9
- const mockFs = {
10
- access: jest.fn(),
11
- readdir: jest.fn(),
12
- readFile: jest.fn(),
13
- writeFile: jest.fn()
14
- };
15
-
16
- // Mock the fs/promises module
17
- jest.unstable_mockModule('fs/promises', () => mockFs);
18
-
19
- describe('Sprint Task Management', () => {
20
- const mockProjectRoot = '/test/project';
21
- const mockSprintPath = '/test/project/.aiwf/03_SPRINTS/S03_M02_test_sprint';
22
-
23
- beforeEach(() => {
24
- jest.clearAllMocks();
25
-
26
- // Mock console methods
27
- global.console.log = jest.fn();
28
- global.console.warn = jest.fn();
29
- global.console.error = jest.fn();
30
- });
31
-
32
- describe('addTaskToSprint', () => {
33
- it('should successfully add a task to an existing sprint', async () => {
34
- // Mock file system operations
35
- mockFs.access.mockResolvedValue();
36
- mockFs.readdir
37
- .mockResolvedValueOnce(['.aiwf']) // Project root check
38
- .mockResolvedValueOnce(['S01_M01_sprint1', 'S03_M02_test_sprint']) // Sprint directory
39
- .mockResolvedValueOnce(['T01_S03_existing_task.md', 'S03_sprint_meta.md']); // Sprint contents
40
-
41
- mockFs.readFile.mockResolvedValueOnce(`# S03 Sprint Meta
42
- ## 태스크 목록
43
- - [ ] T01: Existing Task - 상태: pending
44
- `);
45
-
46
- mockFs.writeFile.mockResolvedValue();
47
-
48
- // Execute
49
- const result = await addTaskToSprint('S03', 'New Test Task');
50
-
51
- // Verify
52
- expect(result.success).toBe(true);
53
- expect(result.taskNumber).toBe('T02');
54
- expect(mockFs.writeFile).toHaveBeenCalledTimes(3); // Task file, sprint meta, manifest
55
- });
56
-
57
- it('should handle first task in sprint correctly', async () => {
58
- // Mock empty sprint
59
- mockFs.access.mockResolvedValue();
60
- mockFs.readdir
61
- .mockResolvedValueOnce(['.aiwf'])
62
- .mockResolvedValueOnce(['S03_M02_test_sprint'])
63
- .mockResolvedValueOnce(['S03_sprint_meta.md']); // No task files
64
-
65
- mockFs.readFile.mockResolvedValueOnce(`# S03 Sprint Meta
66
- ## 개요
67
- Test sprint
68
- `);
69
-
70
- mockFs.writeFile.mockResolvedValue();
71
-
72
- const result = await addTaskToSprint('S03', 'First Task');
73
-
74
- expect(result.taskNumber).toBe('T01');
75
- });
76
-
77
- it('should throw error when sprint does not exist', async () => {
78
- mockFs.access.mockResolvedValue();
79
- mockFs.readdir
80
- .mockResolvedValueOnce(['.aiwf'])
81
- .mockResolvedValueOnce(['S01_M01_sprint1']); // S03 not found
82
-
83
- await expect(addTaskToSprint('S03', 'Test Task'))
84
- .rejects.toThrow('스프린트 S03를 찾을 수 없습니다.');
85
- });
86
-
87
- it('should sanitize task title for filename', async () => {
88
- mockFs.access.mockResolvedValue();
89
- mockFs.readdir
90
- .mockResolvedValueOnce(['.aiwf'])
91
- .mockResolvedValueOnce(['S03_M02_test_sprint'])
92
- .mockResolvedValueOnce([]);
93
-
94
- mockFs.readFile.mockResolvedValueOnce('# Sprint Meta');
95
- mockFs.writeFile.mockResolvedValue();
96
-
97
- await addTaskToSprint('S03', 'Task with Special!@# Characters');
98
-
99
- // Check that the filename was sanitized
100
- const writeCall = mockFs.writeFile.mock.calls[0];
101
- const filePath = writeCall[0];
102
- expect(filePath).toMatch(/T01_S03_task_with_special_characters\.md$/);
103
- });
104
- });
105
-
106
- describe('Error Handling', () => {
107
- it('should handle missing .aiwf directory', async () => {
108
- mockFs.access.mockRejectedValue(new Error('Not found'));
109
-
110
- await expect(addTaskToSprint('S03', 'Test'))
111
- .rejects.toThrow('.aiwf 디렉토리를 찾을 수 없습니다');
112
- });
113
-
114
- it('should warn when sprint meta file is missing', async () => {
115
- mockFs.access.mockResolvedValue();
116
- mockFs.readdir
117
- .mockResolvedValueOnce(['.aiwf'])
118
- .mockResolvedValueOnce(['S03_M02_test_sprint'])
119
- .mockResolvedValueOnce([]); // No meta file
120
-
121
- mockFs.writeFile.mockResolvedValue();
122
-
123
- await addTaskToSprint('S03', 'Test Task');
124
-
125
- expect(console.warn).toHaveBeenCalledWith(
126
- expect.stringContaining('스프린트 메타 파일을 찾을 수 없습니다')
127
- );
128
- });
129
- });
130
-
131
- describe('Task Numbering', () => {
132
- it('should correctly determine next task number', async () => {
133
- mockFs.access.mockResolvedValue();
134
- mockFs.readdir
135
- .mockResolvedValueOnce(['.aiwf'])
136
- .mockResolvedValueOnce(['S03_M02_test_sprint'])
137
- .mockResolvedValueOnce([
138
- 'T01_S03_task1.md',
139
- 'T03_S03_task3.md',
140
- 'T10_S03_task10.md',
141
- 'S03_sprint_meta.md'
142
- ]);
143
-
144
- mockFs.readFile.mockResolvedValueOnce('# Sprint Meta');
145
- mockFs.writeFile.mockResolvedValue();
146
-
147
- const result = await addTaskToSprint('S03', 'Next Task');
148
-
149
- expect(result.taskNumber).toBe('T11'); // Next after T10
150
- });
151
-
152
- it('should handle non-standard task filenames', async () => {
153
- mockFs.access.mockResolvedValue();
154
- mockFs.readdir
155
- .mockResolvedValueOnce(['.aiwf'])
156
- .mockResolvedValueOnce(['S03_M02_test_sprint'])
157
- .mockResolvedValueOnce([
158
- 'T01_S03_task1.md',
159
- 'random_file.txt',
160
- 'TX05_not_a_task.md',
161
- 'S03_sprint_meta.md'
162
- ]);
163
-
164
- mockFs.readFile.mockResolvedValueOnce('# Sprint Meta');
165
- mockFs.writeFile.mockResolvedValue();
166
-
167
- const result = await addTaskToSprint('S03', 'Next Task');
168
-
169
- expect(result.taskNumber).toBe('T02'); // Only counts valid task files
170
- });
171
- });
172
- });