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.
Files changed (271) hide show
  1. package/.aiwf/00_PROJECT_MANIFEST.md +226 -2
  2. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/S03_M02_sprint_meta.md +112 -0
  3. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T01_S03_new_test_task.md +39 -0
  4. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T02_S03_first_task.md +39 -0
  5. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T03_S03_test_task.md +39 -0
  6. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T04_S03_task_with_special_characters.md +39 -0
  7. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T05_S03_test.md +39 -0
  8. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T06_S03_test_task.md +39 -0
  9. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T07_S03_next_task.md +39 -0
  10. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T08_S03_next_task.md +39 -0
  11. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T09_S03_new_test_task.md +39 -0
  12. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T100_S03_task_with_special_characters.md +39 -0
  13. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T101_S03_test.md +39 -0
  14. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T102_S03_test_task.md +39 -0
  15. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T103_S03_next_task.md +39 -0
  16. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T104_S03_next_task.md +39 -0
  17. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T105_S03_new_test_task.md +39 -0
  18. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T106_S03_first_task.md +39 -0
  19. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T107_S03_test_task.md +39 -0
  20. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T108_S03_task_with_special_characters.md +39 -0
  21. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T109_S03_test.md +39 -0
  22. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T10_S03_first_task.md +39 -0
  23. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T110_S03_test_task.md +39 -0
  24. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T111_S03_next_task.md +39 -0
  25. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T112_S03_next_task.md +39 -0
  26. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T11_S03_test_task.md +39 -0
  27. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T12_S03_task_with_special_characters.md +39 -0
  28. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T13_S03_test.md +39 -0
  29. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T14_S03_test_task.md +39 -0
  30. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T15_S03_next_task.md +39 -0
  31. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T16_S03_next_task.md +39 -0
  32. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T17_S03_new_test_task.md +39 -0
  33. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T18_S03_first_task.md +39 -0
  34. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T19_S03_test_task.md +39 -0
  35. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T20_S03_task_with_special_characters.md +39 -0
  36. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T21_S03_test.md +39 -0
  37. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T22_S03_test_task.md +39 -0
  38. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T23_S03_next_task.md +39 -0
  39. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T24_S03_next_task.md +39 -0
  40. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T25_S03_new_test_task.md +39 -0
  41. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T26_S03_first_task.md +39 -0
  42. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T27_S03_test_task.md +39 -0
  43. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T28_S03_task_with_special_characters.md +39 -0
  44. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T29_S03_test.md +39 -0
  45. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T30_S03_test_task.md +39 -0
  46. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T31_S03_next_task.md +39 -0
  47. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T32_S03_next_task.md +39 -0
  48. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T33_S03_new_test_task.md +39 -0
  49. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T34_S03_first_task.md +39 -0
  50. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T35_S03_test_task.md +39 -0
  51. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T36_S03_task_with_special_characters.md +39 -0
  52. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T37_S03_test.md +39 -0
  53. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T38_S03_test_task.md +39 -0
  54. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T39_S03_next_task.md +39 -0
  55. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T40_S03_next_task.md +39 -0
  56. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T41_S03_new_test_task.md +39 -0
  57. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T42_S03_first_task.md +39 -0
  58. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T43_S03_test_task.md +39 -0
  59. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T44_S03_task_with_special_characters.md +39 -0
  60. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T45_S03_test.md +39 -0
  61. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T46_S03_test_task.md +39 -0
  62. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T47_S03_next_task.md +39 -0
  63. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T48_S03_next_task.md +39 -0
  64. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T49_S03_new_test_task.md +39 -0
  65. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T50_S03_first_task.md +39 -0
  66. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T51_S03_test_task.md +39 -0
  67. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T52_S03_task_with_special_characters.md +39 -0
  68. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T53_S03_test.md +39 -0
  69. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T54_S03_test_task.md +39 -0
  70. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T55_S03_next_task.md +39 -0
  71. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T56_S03_next_task.md +39 -0
  72. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T57_S03_new_test_task.md +39 -0
  73. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T58_S03_first_task.md +39 -0
  74. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T59_S03_test_task.md +39 -0
  75. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T60_S03_task_with_special_characters.md +39 -0
  76. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T61_S03_test.md +39 -0
  77. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T62_S03_test_task.md +39 -0
  78. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T63_S03_next_task.md +39 -0
  79. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T64_S03_next_task.md +39 -0
  80. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T65_S03_new_test_task.md +39 -0
  81. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T66_S03_first_task.md +39 -0
  82. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T67_S03_test_task.md +39 -0
  83. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T68_S03_task_with_special_characters.md +39 -0
  84. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T69_S03_test.md +39 -0
  85. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T70_S03_test_task.md +39 -0
  86. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T71_S03_next_task.md +39 -0
  87. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T72_S03_next_task.md +39 -0
  88. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T73_S03_new_test_task.md +39 -0
  89. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T74_S03_first_task.md +39 -0
  90. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T75_S03_test_task.md +39 -0
  91. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T76_S03_task_with_special_characters.md +39 -0
  92. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T77_S03_test.md +39 -0
  93. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T78_S03_test_task.md +39 -0
  94. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T79_S03_next_task.md +39 -0
  95. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T80_S03_next_task.md +39 -0
  96. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T81_S03_new_test_task.md +39 -0
  97. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T82_S03_first_task.md +39 -0
  98. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T83_S03_test_task.md +39 -0
  99. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T84_S03_task_with_special_characters.md +39 -0
  100. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T85_S03_test.md +39 -0
  101. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T86_S03_test_task.md +39 -0
  102. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T87_S03_next_task.md +39 -0
  103. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T88_S03_next_task.md +39 -0
  104. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T89_S03_new_test_task.md +39 -0
  105. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T90_S03_first_task.md +39 -0
  106. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T91_S03_test_task.md +39 -0
  107. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T92_S03_task_with_special_characters.md +39 -0
  108. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T93_S03_test.md +39 -0
  109. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T94_S03_test_task.md +39 -0
  110. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T95_S03_next_task.md +39 -0
  111. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T96_S03_next_task.md +39 -0
  112. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T97_S03_new_test_task.md +39 -0
  113. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T98_S03_first_task.md +39 -0
  114. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T99_S03_test_task.md +39 -0
  115. package/.aiwf/test-results-s02.json +5 -5
  116. package/.claude/commands/aiwf/aiwf_compress_aggressive_persona.md +3 -15
  117. package/.claude/commands/aiwf/aiwf_compress_minimal_persona.md +2 -15
  118. package/.claude/commands/aiwf/aiwf_compress_stats.md +2 -51
  119. package/.claude/commands/aiwf/aiwf_compress_with_persona.md +5 -18
  120. package/.claude/commands/aiwf/aiwf_create_feature_ledger.md +1 -1
  121. package/.claude/commands/aiwf/aiwf_default_mode.md +1 -1
  122. package/.claude/commands/aiwf/aiwf_evaluate.md +3 -16
  123. package/.claude/commands/aiwf/aiwf_get_feature_details.md +1 -1
  124. package/.claude/commands/aiwf/aiwf_link_feature_to_milestone.md +1 -1
  125. package/.claude/commands/aiwf/aiwf_list_features.md +1 -1
  126. package/.claude/commands/aiwf/aiwf_switch_language.md +48 -120
  127. package/.claude/commands/aiwf/aiwf_update_feature_status.md +1 -1
  128. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_create_testcase.md +561 -0
  129. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_aggressive_persona.md +2 -2
  130. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_minimal_persona.md +2 -2
  131. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_stats.md +10 -47
  132. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_with_persona.md +2 -2
  133. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_create_feature_ledger.md +1 -1
  134. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_create_testcase.md +561 -0
  135. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_default_mode.md +1 -1
  136. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_evaluate.md +2 -2
  137. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_get_feature_details.md +1 -1
  138. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_link_feature_to_milestone.md +1 -1
  139. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_list_features.md +1 -1
  140. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_architect.md +1 -1
  141. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_backend.md +1 -1
  142. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_data_analyst.md +1 -1
  143. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_frontend.md +1 -1
  144. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_security.md +1 -1
  145. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_status.md +1 -1
  146. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_update_feature_status.md +1 -1
  147. package/package.json +1 -1
  148. package/src/cli/index.js +174 -0
  149. package/src/commands/compress.js +60 -0
  150. package/src/commands/create-project.js +23 -17
  151. package/src/commands/evaluate.js +459 -0
  152. package/src/commands/feature.js +365 -0
  153. package/src/commands/persona.js +37 -16
  154. package/src/commands/token.js +312 -0
  155. package/src/lib/file-downloader.js +189 -33
  156. package/src/lib/installer.js +38 -11
  157. package/src/lib/resource-loader.js +250 -0
  158. package/src/lib/resources/commands/ai-persona.js +602 -0
  159. package/src/lib/resources/commands/compress-context.js +389 -0
  160. package/src/lib/resources/commands/evaluate.js +246 -0
  161. package/src/lib/resources/commands/feature-ledger.js +565 -0
  162. package/src/lib/resources/commands/feature_commit_report.js +370 -0
  163. package/src/lib/resources/commands/persona-context-apply.js +562 -0
  164. package/src/lib/resources/commands/scan_git_history.js +234 -0
  165. package/src/lib/resources/commands/sync_feature_commits.js +154 -0
  166. package/src/lib/resources/commands/token-tracking.js +443 -0
  167. package/src/lib/resources/config/commit-patterns.js +103 -0
  168. package/src/lib/resources/config/language.json +6 -0
  169. package/src/lib/resources/personas/PERSONA_INDEX.md +57 -0
  170. package/src/lib/resources/personas/analyst.json +44 -0
  171. package/src/lib/resources/personas/architect/best_practices.md +136 -0
  172. package/src/lib/resources/personas/architect/knowledge_base.md +377 -0
  173. package/src/lib/resources/personas/architect.json +44 -0
  174. package/src/lib/resources/personas/backend/best_practices.md +766 -0
  175. package/src/lib/resources/personas/backend/knowledge_base.md +1070 -0
  176. package/src/lib/resources/personas/data_analyst/best_practices.md +594 -0
  177. package/src/lib/resources/personas/data_analyst/knowledge_base.md +1057 -0
  178. package/src/lib/resources/personas/developer.json +44 -0
  179. package/src/lib/resources/personas/developer.md +37 -0
  180. package/src/lib/resources/personas/evaluation_criteria.json +137 -0
  181. package/src/lib/resources/personas/frontend/best_practices.md +445 -0
  182. package/src/lib/resources/personas/frontend/knowledge_base.md +729 -0
  183. package/src/lib/resources/personas/persona-index.json +31 -0
  184. package/src/lib/resources/personas/reviewer.json +44 -0
  185. package/src/lib/resources/personas/security/best_practices.md +307 -0
  186. package/src/lib/resources/personas/security/knowledge_base.md +498 -0
  187. package/src/lib/resources/personas/tester.json +44 -0
  188. package/src/lib/resources/templates/README.md +78 -0
  189. package/src/lib/resources/templates/api-server/config.json +64 -0
  190. package/src/lib/resources/templates/api-server/template/.aiwf/config.json +56 -0
  191. package/src/lib/resources/templates/api-server/template/.aiwf/feature-ledger.json +42 -0
  192. package/src/lib/resources/templates/api-server/template/.aiwf/personas/backend-engineer.json +40 -0
  193. package/src/lib/resources/templates/api-server/template/.aiwf/scripts/cli.js +111 -0
  194. package/src/lib/resources/templates/api-server/template/.env.example +29 -0
  195. package/src/lib/resources/templates/api-server/template/.eslintrc.json +23 -0
  196. package/src/lib/resources/templates/api-server/template/README.md +171 -0
  197. package/src/lib/resources/templates/api-server/template/jest.config.js +26 -0
  198. package/src/lib/resources/templates/api-server/template/nodemon.json +9 -0
  199. package/src/lib/resources/templates/api-server/template/package.json +61 -0
  200. package/src/lib/resources/templates/api-server/template/src/app.ts +60 -0
  201. package/src/lib/resources/templates/api-server/template/src/config/swagger.ts +38 -0
  202. package/src/lib/resources/templates/api-server/template/src/controllers/aiwfController.ts +68 -0
  203. package/src/lib/resources/templates/api-server/template/src/controllers/authController.ts +128 -0
  204. package/src/lib/resources/templates/api-server/template/src/controllers/statusController.ts +28 -0
  205. package/src/lib/resources/templates/api-server/template/src/index.ts +28 -0
  206. package/src/lib/resources/templates/api-server/template/src/middleware/aiwfMiddleware.ts +50 -0
  207. package/src/lib/resources/templates/api-server/template/src/middleware/authMiddleware.ts +41 -0
  208. package/src/lib/resources/templates/api-server/template/src/middleware/errorHandler.ts +42 -0
  209. package/src/lib/resources/templates/api-server/template/src/middleware/notFoundHandler.ts +14 -0
  210. package/src/lib/resources/templates/api-server/template/src/middleware/requestLogger.ts +20 -0
  211. package/src/lib/resources/templates/api-server/template/src/routes/aiwf.ts +42 -0
  212. package/src/lib/resources/templates/api-server/template/src/routes/index.ts +13 -0
  213. package/src/lib/resources/templates/api-server/template/src/routes/v1/index.ts +67 -0
  214. package/src/lib/resources/templates/api-server/template/src/utils/logger.ts +37 -0
  215. package/src/lib/resources/templates/api-server/template/tests/app.test.ts +40 -0
  216. package/src/lib/resources/templates/api-server/template/tsconfig.json +43 -0
  217. package/src/lib/resources/templates/npm-library/config.json +61 -0
  218. package/src/lib/resources/templates/npm-library/template/LICENSE +21 -0
  219. package/src/lib/resources/templates/npm-library/template/README.md +201 -0
  220. package/src/lib/resources/templates/npm-library/template/package.json +78 -0
  221. package/src/lib/resources/templates/web-app/config.json +53 -0
  222. package/src/lib/resources/templates/web-app/template/.aiwf/config.json +54 -0
  223. package/src/lib/resources/templates/web-app/template/.aiwf/feature-ledger.json +37 -0
  224. package/src/lib/resources/templates/web-app/template/.aiwf/personas/fullstack-developer.json +40 -0
  225. package/src/lib/resources/templates/web-app/template/.aiwf/scripts/cli.js +110 -0
  226. package/src/lib/resources/templates/web-app/template/.eslintrc.cjs +20 -0
  227. package/src/lib/resources/templates/web-app/template/README.md +151 -0
  228. package/src/lib/resources/templates/web-app/template/index.html +14 -0
  229. package/src/lib/resources/templates/web-app/template/package.json +44 -0
  230. package/src/lib/resources/templates/web-app/template/postcss.config.js +6 -0
  231. package/src/lib/resources/templates/web-app/template/public/vite.svg +1 -0
  232. package/src/lib/resources/templates/web-app/template/src/App.tsx +21 -0
  233. package/src/lib/resources/templates/web-app/template/src/components/Layout.tsx +57 -0
  234. package/src/lib/resources/templates/web-app/template/src/components/aiwf/ContextStatus.tsx +107 -0
  235. package/src/lib/resources/templates/web-app/template/src/components/aiwf/FeatureLedger.tsx +93 -0
  236. package/src/lib/resources/templates/web-app/template/src/components/aiwf/TokenUsage.tsx +71 -0
  237. package/src/lib/resources/templates/web-app/template/src/index.css +60 -0
  238. package/src/lib/resources/templates/web-app/template/src/main.tsx +10 -0
  239. package/src/lib/resources/templates/web-app/template/src/pages/AiwfDashboard.tsx +60 -0
  240. package/src/lib/resources/templates/web-app/template/src/pages/HomePage.tsx +89 -0
  241. package/src/lib/resources/templates/web-app/template/src/pages/NotFound.tsx +25 -0
  242. package/src/lib/resources/templates/web-app/template/src/stores/aiwfStore.ts +126 -0
  243. package/src/lib/resources/templates/web-app/template/src/types/global.d.ts +9 -0
  244. package/src/lib/resources/templates/web-app/template/src/vite-env.d.ts +1 -0
  245. package/src/lib/resources/templates/web-app/template/tailwind.config.js +30 -0
  246. package/src/lib/resources/templates/web-app/template/tsconfig.json +37 -0
  247. package/src/lib/resources/templates/web-app/template/tsconfig.node.json +10 -0
  248. package/src/lib/resources/templates/web-app/template/vite.config.ts +23 -0
  249. package/src/lib/resources/utils/background-monitor.js +223 -0
  250. package/src/lib/resources/utils/compression-metrics.js +1031 -0
  251. package/src/lib/resources/utils/compression-strategies.js +557 -0
  252. package/src/lib/resources/utils/content-normalizer.js +455 -0
  253. package/src/lib/resources/utils/context-compressor.js +583 -0
  254. package/src/lib/resources/utils/context-rule-parser.js +180 -0
  255. package/src/lib/resources/utils/context-token-monitor.js +463 -0
  256. package/src/lib/resources/utils/context-update-manager.js +502 -0
  257. package/src/lib/resources/utils/feature-updater.js +271 -0
  258. package/src/lib/resources/utils/git-utils.js +220 -0
  259. package/src/lib/resources/utils/importance-classifier.js +645 -0
  260. package/src/lib/resources/utils/information-filter.js +710 -0
  261. package/src/lib/resources/utils/persona-aware-compressor.js +598 -0
  262. package/src/lib/resources/utils/prompt-injector.js +242 -0
  263. package/src/lib/resources/utils/simplified-evaluator.js +119 -0
  264. package/src/lib/resources/utils/text-summarizer.js +492 -0
  265. package/src/lib/resources/utils/token-counter.js +177 -0
  266. package/src/lib/resources/utils/token-monitor.js +484 -0
  267. package/src/lib/resources/utils/token-reporter.js +453 -0
  268. package/src/lib/resources/utils/token-storage.js +433 -0
  269. package/src/lib/resources/utils/token-tracker.js +283 -0
  270. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_switch_language.md +0 -160
  271. /package/claude-code/aiwf/ko/.claude/commands/aiwf/{aiwf_update_docs_kr.md → aiwf_update_docs.md} +0 -0
@@ -0,0 +1,370 @@
1
+ #!/usr/bin/env node
2
+
3
+ const { Command } = require('commander');
4
+ const chalk = require('chalk');
5
+ const ora = require('ora');
6
+ const fs = require('fs').promises;
7
+ const path = require('path');
8
+ const {
9
+ getCommitsByFeatureId,
10
+ isGitRepository,
11
+ runGitCommand
12
+ } = require('../utils/git-utils');
13
+ const {
14
+ findFeatureFile,
15
+ readFeatureFile
16
+ } = require('../utils/feature-updater');
17
+
18
+ const program = new Command();
19
+
20
+ /**
21
+ * feature_commit_report 명령어
22
+ * Feature와 Git 커밋의 매핑 리포트 생성
23
+ */
24
+
25
+ program
26
+ .name('feature_commit_report')
27
+ .description('Feature와 Git 커밋의 매핑 리포트를 생성합니다')
28
+ .option('-f, --feature <id>', '특정 Feature ID의 리포트만 생성')
29
+ .option('-s, --status <status>', 'Feature 상태별 필터링 (active|completed|archived)')
30
+ .option('-o, --output <path>', '리포트 출력 경로', './feature_commit_report.md')
31
+ .option('-F, --format <format>', '출력 형식 (markdown|json|html)', 'markdown')
32
+ .option('-d, --detailed', '상세 커밋 정보 포함')
33
+ .option('-t, --timeline', '타임라인 형식으로 표시')
34
+ .option('-v, --verbose', '상세 로그 출력')
35
+ .action(async (options) => {
36
+ const spinner = ora();
37
+
38
+ try {
39
+ // Git 저장소 확인
40
+ if (!await isGitRepository()) {
41
+ console.error(chalk.red('❌ 현재 디렉토리는 Git 저장소가 아닙니다.'));
42
+ process.exit(1);
43
+ }
44
+
45
+ spinner.start('Feature 정보 수집 중...');
46
+
47
+ // Feature 파일 수집
48
+ const basePath = path.join(process.cwd(), '.aiwf', '06_FEATURE_LEDGERS');
49
+ const statuses = options.status ? [options.status] : ['active', 'completed', 'archived'];
50
+ const features = [];
51
+
52
+ for (const status of statuses) {
53
+ const dirPath = path.join(basePath, status);
54
+ try {
55
+ const files = await fs.readdir(dirPath);
56
+ const featureFiles = files.filter(f => f.endsWith('.md'));
57
+
58
+ for (const file of featureFiles) {
59
+ const featureId = file.split('_')[0];
60
+
61
+ // 특정 Feature ID 필터링
62
+ if (options.feature && featureId !== options.feature) {
63
+ continue;
64
+ }
65
+
66
+ const filePath = path.join(dirPath, file);
67
+ const { frontmatter } = await readFeatureFile(filePath);
68
+
69
+ features.push({
70
+ id: featureId,
71
+ status: status,
72
+ title: frontmatter.title || 'Untitled',
73
+ milestone: frontmatter.milestone || 'N/A',
74
+ assignee: frontmatter.assignee || 'Unassigned',
75
+ created: frontmatter.created_date || 'Unknown',
76
+ updated: frontmatter.last_updated || 'Unknown',
77
+ gitCommits: frontmatter.git_commits || [],
78
+ progress: frontmatter.progress_percentage || 0
79
+ });
80
+ }
81
+ } catch (error) {
82
+ // 디렉토리가 없을 수 있음
83
+ continue;
84
+ }
85
+ }
86
+
87
+ spinner.succeed(chalk.green(`${features.length}개 Feature 정보 수집 완료`));
88
+
89
+ if (features.length === 0) {
90
+ console.log(chalk.yellow('리포트를 생성할 Feature가 없습니다.'));
91
+ return;
92
+ }
93
+
94
+ // 각 Feature의 커밋 정보 수집
95
+ spinner.start('Git 커밋 정보 수집 중...');
96
+ const reportData = [];
97
+
98
+ for (const feature of features) {
99
+ const commits = await getCommitsByFeatureId(feature.id);
100
+
101
+ reportData.push({
102
+ ...feature,
103
+ commits: commits,
104
+ commitCount: commits.length,
105
+ firstCommit: commits.length > 0 ? commits[commits.length - 1] : null,
106
+ lastCommit: commits.length > 0 ? commits[0] : null
107
+ });
108
+ }
109
+
110
+ spinner.succeed(chalk.green('커밋 정보 수집 완료'));
111
+
112
+ // 리포트 생성
113
+ spinner.start('리포트 생성 중...');
114
+
115
+ let reportContent;
116
+ switch (options.format) {
117
+ case 'json':
118
+ reportContent = generateJsonReport(reportData, options);
119
+ break;
120
+ case 'html':
121
+ reportContent = generateHtmlReport(reportData, options);
122
+ break;
123
+ case 'markdown':
124
+ default:
125
+ reportContent = generateMarkdownReport(reportData, options);
126
+ }
127
+
128
+ // 리포트 저장
129
+ await fs.writeFile(options.output, reportContent, 'utf8');
130
+ spinner.succeed(chalk.green(`리포트 생성 완료: ${options.output}`));
131
+
132
+ // 요약 정보 출력
133
+ console.log(chalk.cyan('\n📊 리포트 요약:'));
134
+ console.log(chalk.white(` 총 Feature: ${reportData.length}개`));
135
+ console.log(chalk.white(` 총 커밋: ${reportData.reduce((sum, f) => sum + f.commitCount, 0)}개`));
136
+
137
+ const byStatus = {};
138
+ reportData.forEach(f => {
139
+ byStatus[f.status] = (byStatus[f.status] || 0) + 1;
140
+ });
141
+
142
+ console.log(chalk.cyan('\n 상태별 분포:'));
143
+ Object.entries(byStatus).forEach(([status, count]) => {
144
+ const icon = status === 'active' ? '🟢' : status === 'completed' ? '✅' : '📦';
145
+ console.log(chalk.white(` ${icon} ${status}: ${count}개`));
146
+ });
147
+
148
+ } catch (error) {
149
+ spinner.fail(chalk.red('리포트 생성 중 오류 발생'));
150
+ console.error(chalk.red(error.message));
151
+ if (options.verbose) {
152
+ console.error(error.stack);
153
+ }
154
+ process.exit(1);
155
+ }
156
+ });
157
+
158
+ /**
159
+ * Markdown 형식 리포트 생성
160
+ */
161
+ function generateMarkdownReport(data, options) {
162
+ let report = '# Feature-Git Commit Mapping Report\n\n';
163
+ report += `Generated: ${new Date().toISOString()}\n\n`;
164
+
165
+ // 요약 섹션
166
+ report += '## Summary\n\n';
167
+ report += `- Total Features: ${data.length}\n`;
168
+ report += `- Total Commits: ${data.reduce((sum, f) => sum + f.commitCount, 0)}\n`;
169
+ report += '\n';
170
+
171
+ // 상태별 통계
172
+ const byStatus = {};
173
+ data.forEach(f => {
174
+ byStatus[f.status] = (byStatus[f.status] || []);
175
+ byStatus[f.status].push(f);
176
+ });
177
+
178
+ report += '## Features by Status\n\n';
179
+
180
+ Object.entries(byStatus).forEach(([status, features]) => {
181
+ report += `### ${status.charAt(0).toUpperCase() + status.slice(1)} (${features.length})\n\n`;
182
+
183
+ features.forEach(feature => {
184
+ report += `#### ${feature.id}: ${feature.title}\n\n`;
185
+ report += `- **Milestone**: ${feature.milestone}\n`;
186
+ report += `- **Assignee**: ${feature.assignee}\n`;
187
+ report += `- **Progress**: ${feature.progress}%\n`;
188
+ report += `- **Commits**: ${feature.commitCount}\n`;
189
+
190
+ if (feature.firstCommit) {
191
+ report += `- **First Commit**: ${feature.firstCommit.date.substring(0, 10)}\n`;
192
+ report += `- **Last Commit**: ${feature.lastCommit.date.substring(0, 10)}\n`;
193
+ }
194
+
195
+ if (options.detailed && feature.commits.length > 0) {
196
+ report += '\n**Commit History**:\n\n';
197
+ feature.commits.forEach(commit => {
198
+ const shortHash = commit.hash.substring(0, 7);
199
+ const date = commit.date.substring(0, 10);
200
+ const message = commit.message.split('\n')[0];
201
+ report += `- \`${shortHash}\` (${date}): ${message}\n`;
202
+ });
203
+ }
204
+
205
+ report += '\n';
206
+ });
207
+ });
208
+
209
+ // 타임라인 뷰 (옵션)
210
+ if (options.timeline) {
211
+ report += '## Timeline View\n\n';
212
+
213
+ // 모든 커밋을 날짜순으로 정렬
214
+ const allCommits = [];
215
+ data.forEach(feature => {
216
+ feature.commits.forEach(commit => {
217
+ allCommits.push({
218
+ ...commit,
219
+ featureId: feature.id,
220
+ featureTitle: feature.title
221
+ });
222
+ });
223
+ });
224
+
225
+ allCommits.sort((a, b) => new Date(b.date) - new Date(a.date));
226
+
227
+ let currentMonth = '';
228
+ allCommits.forEach(commit => {
229
+ const month = commit.date.substring(0, 7);
230
+ if (month !== currentMonth) {
231
+ currentMonth = month;
232
+ report += `\n### ${month}\n\n`;
233
+ }
234
+
235
+ const shortHash = commit.hash.substring(0, 7);
236
+ const date = commit.date.substring(0, 10);
237
+ const message = commit.message.split('\n')[0];
238
+ report += `- **${date}** - ${commit.featureId}: ${message} (\`${shortHash}\`)\n`;
239
+ });
240
+ }
241
+
242
+ return report;
243
+ }
244
+
245
+ /**
246
+ * JSON 형식 리포트 생성
247
+ */
248
+ function generateJsonReport(data, options) {
249
+ const report = {
250
+ generated: new Date().toISOString(),
251
+ summary: {
252
+ totalFeatures: data.length,
253
+ totalCommits: data.reduce((sum, f) => sum + f.commitCount, 0),
254
+ byStatus: {}
255
+ },
256
+ features: []
257
+ };
258
+
259
+ // 상태별 집계
260
+ data.forEach(f => {
261
+ report.summary.byStatus[f.status] = (report.summary.byStatus[f.status] || 0) + 1;
262
+ });
263
+
264
+ // Feature 데이터
265
+ report.features = data.map(feature => {
266
+ const featureData = {
267
+ id: feature.id,
268
+ title: feature.title,
269
+ status: feature.status,
270
+ milestone: feature.milestone,
271
+ assignee: feature.assignee,
272
+ progress: feature.progress,
273
+ commitCount: feature.commitCount,
274
+ created: feature.created,
275
+ updated: feature.updated
276
+ };
277
+
278
+ if (options.detailed) {
279
+ featureData.commits = feature.commits.map(commit => ({
280
+ hash: commit.hash,
281
+ author: commit.author,
282
+ date: commit.date,
283
+ message: commit.message
284
+ }));
285
+ }
286
+
287
+ return featureData;
288
+ });
289
+
290
+ return JSON.stringify(report, null, 2);
291
+ }
292
+
293
+ /**
294
+ * HTML 형식 리포트 생성
295
+ */
296
+ function generateHtmlReport(data, options) {
297
+ let html = `<!DOCTYPE html>
298
+ <html>
299
+ <head>
300
+ <meta charset="UTF-8">
301
+ <title>Feature-Git Commit Mapping Report</title>
302
+ <style>
303
+ body { font-family: Arial, sans-serif; margin: 20px; }
304
+ h1, h2, h3 { color: #333; }
305
+ .summary { background: #f5f5f5; padding: 15px; border-radius: 5px; }
306
+ .feature { border: 1px solid #ddd; margin: 10px 0; padding: 15px; border-radius: 5px; }
307
+ .active { border-left: 4px solid #28a745; }
308
+ .completed { border-left: 4px solid #007bff; }
309
+ .archived { border-left: 4px solid #6c757d; }
310
+ .progress { background: #e9ecef; height: 20px; border-radius: 3px; }
311
+ .progress-bar { background: #007bff; height: 100%; border-radius: 3px; }
312
+ .commit { font-family: monospace; font-size: 0.9em; margin: 5px 0; }
313
+ code { background: #f5f5f5; padding: 2px 4px; border-radius: 3px; }
314
+ </style>
315
+ </head>
316
+ <body>
317
+ <h1>Feature-Git Commit Mapping Report</h1>
318
+ <p>Generated: ${new Date().toISOString()}</p>
319
+
320
+ <div class="summary">
321
+ <h2>Summary</h2>
322
+ <ul>
323
+ <li>Total Features: ${data.length}</li>
324
+ <li>Total Commits: ${data.reduce((sum, f) => sum + f.commitCount, 0)}</li>
325
+ </ul>
326
+ </div>
327
+ `;
328
+
329
+ // Features by status
330
+ const byStatus = {};
331
+ data.forEach(f => {
332
+ byStatus[f.status] = (byStatus[f.status] || []);
333
+ byStatus[f.status].push(f);
334
+ });
335
+
336
+ Object.entries(byStatus).forEach(([status, features]) => {
337
+ html += `<h2>${status.charAt(0).toUpperCase() + status.slice(1)} Features (${features.length})</h2>`;
338
+
339
+ features.forEach(feature => {
340
+ html += `<div class="feature ${status}">`;
341
+ html += `<h3>${feature.id}: ${feature.title}</h3>`;
342
+ html += `<p><strong>Milestone:</strong> ${feature.milestone} | `;
343
+ html += `<strong>Assignee:</strong> ${feature.assignee} | `;
344
+ html += `<strong>Commits:</strong> ${feature.commitCount}</p>`;
345
+
346
+ html += `<div class="progress">`;
347
+ html += `<div class="progress-bar" style="width: ${feature.progress}%"></div>`;
348
+ html += `</div>`;
349
+ html += `<p>Progress: ${feature.progress}%</p>`;
350
+
351
+ if (options.detailed && feature.commits.length > 0) {
352
+ html += '<h4>Commit History:</h4>';
353
+ feature.commits.forEach(commit => {
354
+ const shortHash = commit.hash.substring(0, 7);
355
+ const date = commit.date.substring(0, 10);
356
+ const message = commit.message.split('\n')[0];
357
+ html += `<div class="commit"><code>${shortHash}</code> (${date}): ${message}</div>`;
358
+ });
359
+ }
360
+
361
+ html += '</div>';
362
+ });
363
+ });
364
+
365
+ html += '</body></html>';
366
+ return html;
367
+ }
368
+
369
+ // 명령어 실행
370
+ program.parse(process.argv);