aiwf 0.3.7 β†’ 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 (267) 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/ko/.claude/commands/aiwf/aiwf_compress_aggressive_persona.md +2 -2
  129. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_minimal_persona.md +2 -2
  130. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_stats.md +10 -47
  131. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_with_persona.md +2 -2
  132. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_create_feature_ledger.md +1 -1
  133. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_default_mode.md +1 -1
  134. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_evaluate.md +2 -2
  135. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_get_feature_details.md +1 -1
  136. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_link_feature_to_milestone.md +1 -1
  137. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_list_features.md +1 -1
  138. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_architect.md +1 -1
  139. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_backend.md +1 -1
  140. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_data_analyst.md +1 -1
  141. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_frontend.md +1 -1
  142. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_security.md +1 -1
  143. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_status.md +1 -1
  144. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_update_feature_status.md +1 -1
  145. package/package.json +1 -1
  146. package/src/cli/index.js +174 -0
  147. package/src/commands/compress.js +60 -0
  148. package/src/commands/create-project.js +23 -17
  149. package/src/commands/evaluate.js +459 -0
  150. package/src/commands/feature.js +365 -0
  151. package/src/commands/persona.js +37 -16
  152. package/src/commands/token.js +312 -0
  153. package/src/lib/resource-loader.js +250 -0
  154. package/src/lib/resources/commands/ai-persona.js +602 -0
  155. package/src/lib/resources/commands/compress-context.js +389 -0
  156. package/src/lib/resources/commands/evaluate.js +246 -0
  157. package/src/lib/resources/commands/feature-ledger.js +565 -0
  158. package/src/lib/resources/commands/feature_commit_report.js +370 -0
  159. package/src/lib/resources/commands/persona-context-apply.js +562 -0
  160. package/src/lib/resources/commands/scan_git_history.js +234 -0
  161. package/src/lib/resources/commands/sync_feature_commits.js +154 -0
  162. package/src/lib/resources/commands/token-tracking.js +443 -0
  163. package/src/lib/resources/config/commit-patterns.js +103 -0
  164. package/src/lib/resources/config/language.json +6 -0
  165. package/src/lib/resources/personas/PERSONA_INDEX.md +57 -0
  166. package/src/lib/resources/personas/analyst.json +44 -0
  167. package/src/lib/resources/personas/architect/best_practices.md +136 -0
  168. package/src/lib/resources/personas/architect/knowledge_base.md +377 -0
  169. package/src/lib/resources/personas/architect.json +44 -0
  170. package/src/lib/resources/personas/backend/best_practices.md +766 -0
  171. package/src/lib/resources/personas/backend/knowledge_base.md +1070 -0
  172. package/src/lib/resources/personas/data_analyst/best_practices.md +594 -0
  173. package/src/lib/resources/personas/data_analyst/knowledge_base.md +1057 -0
  174. package/src/lib/resources/personas/developer.json +44 -0
  175. package/src/lib/resources/personas/developer.md +37 -0
  176. package/src/lib/resources/personas/evaluation_criteria.json +137 -0
  177. package/src/lib/resources/personas/frontend/best_practices.md +445 -0
  178. package/src/lib/resources/personas/frontend/knowledge_base.md +729 -0
  179. package/src/lib/resources/personas/persona-index.json +31 -0
  180. package/src/lib/resources/personas/reviewer.json +44 -0
  181. package/src/lib/resources/personas/security/best_practices.md +307 -0
  182. package/src/lib/resources/personas/security/knowledge_base.md +498 -0
  183. package/src/lib/resources/personas/tester.json +44 -0
  184. package/src/lib/resources/templates/README.md +78 -0
  185. package/src/lib/resources/templates/api-server/config.json +64 -0
  186. package/src/lib/resources/templates/api-server/template/.aiwf/config.json +56 -0
  187. package/src/lib/resources/templates/api-server/template/.aiwf/feature-ledger.json +42 -0
  188. package/src/lib/resources/templates/api-server/template/.aiwf/personas/backend-engineer.json +40 -0
  189. package/src/lib/resources/templates/api-server/template/.aiwf/scripts/cli.js +111 -0
  190. package/src/lib/resources/templates/api-server/template/.env.example +29 -0
  191. package/src/lib/resources/templates/api-server/template/.eslintrc.json +23 -0
  192. package/src/lib/resources/templates/api-server/template/README.md +171 -0
  193. package/src/lib/resources/templates/api-server/template/jest.config.js +26 -0
  194. package/src/lib/resources/templates/api-server/template/nodemon.json +9 -0
  195. package/src/lib/resources/templates/api-server/template/package.json +61 -0
  196. package/src/lib/resources/templates/api-server/template/src/app.ts +60 -0
  197. package/src/lib/resources/templates/api-server/template/src/config/swagger.ts +38 -0
  198. package/src/lib/resources/templates/api-server/template/src/controllers/aiwfController.ts +68 -0
  199. package/src/lib/resources/templates/api-server/template/src/controllers/authController.ts +128 -0
  200. package/src/lib/resources/templates/api-server/template/src/controllers/statusController.ts +28 -0
  201. package/src/lib/resources/templates/api-server/template/src/index.ts +28 -0
  202. package/src/lib/resources/templates/api-server/template/src/middleware/aiwfMiddleware.ts +50 -0
  203. package/src/lib/resources/templates/api-server/template/src/middleware/authMiddleware.ts +41 -0
  204. package/src/lib/resources/templates/api-server/template/src/middleware/errorHandler.ts +42 -0
  205. package/src/lib/resources/templates/api-server/template/src/middleware/notFoundHandler.ts +14 -0
  206. package/src/lib/resources/templates/api-server/template/src/middleware/requestLogger.ts +20 -0
  207. package/src/lib/resources/templates/api-server/template/src/routes/aiwf.ts +42 -0
  208. package/src/lib/resources/templates/api-server/template/src/routes/index.ts +13 -0
  209. package/src/lib/resources/templates/api-server/template/src/routes/v1/index.ts +67 -0
  210. package/src/lib/resources/templates/api-server/template/src/utils/logger.ts +37 -0
  211. package/src/lib/resources/templates/api-server/template/tests/app.test.ts +40 -0
  212. package/src/lib/resources/templates/api-server/template/tsconfig.json +43 -0
  213. package/src/lib/resources/templates/npm-library/config.json +61 -0
  214. package/src/lib/resources/templates/npm-library/template/LICENSE +21 -0
  215. package/src/lib/resources/templates/npm-library/template/README.md +201 -0
  216. package/src/lib/resources/templates/npm-library/template/package.json +78 -0
  217. package/src/lib/resources/templates/web-app/config.json +53 -0
  218. package/src/lib/resources/templates/web-app/template/.aiwf/config.json +54 -0
  219. package/src/lib/resources/templates/web-app/template/.aiwf/feature-ledger.json +37 -0
  220. package/src/lib/resources/templates/web-app/template/.aiwf/personas/fullstack-developer.json +40 -0
  221. package/src/lib/resources/templates/web-app/template/.aiwf/scripts/cli.js +110 -0
  222. package/src/lib/resources/templates/web-app/template/.eslintrc.cjs +20 -0
  223. package/src/lib/resources/templates/web-app/template/README.md +151 -0
  224. package/src/lib/resources/templates/web-app/template/index.html +14 -0
  225. package/src/lib/resources/templates/web-app/template/package.json +44 -0
  226. package/src/lib/resources/templates/web-app/template/postcss.config.js +6 -0
  227. package/src/lib/resources/templates/web-app/template/public/vite.svg +1 -0
  228. package/src/lib/resources/templates/web-app/template/src/App.tsx +21 -0
  229. package/src/lib/resources/templates/web-app/template/src/components/Layout.tsx +57 -0
  230. package/src/lib/resources/templates/web-app/template/src/components/aiwf/ContextStatus.tsx +107 -0
  231. package/src/lib/resources/templates/web-app/template/src/components/aiwf/FeatureLedger.tsx +93 -0
  232. package/src/lib/resources/templates/web-app/template/src/components/aiwf/TokenUsage.tsx +71 -0
  233. package/src/lib/resources/templates/web-app/template/src/index.css +60 -0
  234. package/src/lib/resources/templates/web-app/template/src/main.tsx +10 -0
  235. package/src/lib/resources/templates/web-app/template/src/pages/AiwfDashboard.tsx +60 -0
  236. package/src/lib/resources/templates/web-app/template/src/pages/HomePage.tsx +89 -0
  237. package/src/lib/resources/templates/web-app/template/src/pages/NotFound.tsx +25 -0
  238. package/src/lib/resources/templates/web-app/template/src/stores/aiwfStore.ts +126 -0
  239. package/src/lib/resources/templates/web-app/template/src/types/global.d.ts +9 -0
  240. package/src/lib/resources/templates/web-app/template/src/vite-env.d.ts +1 -0
  241. package/src/lib/resources/templates/web-app/template/tailwind.config.js +30 -0
  242. package/src/lib/resources/templates/web-app/template/tsconfig.json +37 -0
  243. package/src/lib/resources/templates/web-app/template/tsconfig.node.json +10 -0
  244. package/src/lib/resources/templates/web-app/template/vite.config.ts +23 -0
  245. package/src/lib/resources/utils/background-monitor.js +223 -0
  246. package/src/lib/resources/utils/compression-metrics.js +1031 -0
  247. package/src/lib/resources/utils/compression-strategies.js +557 -0
  248. package/src/lib/resources/utils/content-normalizer.js +455 -0
  249. package/src/lib/resources/utils/context-compressor.js +583 -0
  250. package/src/lib/resources/utils/context-rule-parser.js +180 -0
  251. package/src/lib/resources/utils/context-token-monitor.js +463 -0
  252. package/src/lib/resources/utils/context-update-manager.js +502 -0
  253. package/src/lib/resources/utils/feature-updater.js +271 -0
  254. package/src/lib/resources/utils/git-utils.js +220 -0
  255. package/src/lib/resources/utils/importance-classifier.js +645 -0
  256. package/src/lib/resources/utils/information-filter.js +710 -0
  257. package/src/lib/resources/utils/persona-aware-compressor.js +598 -0
  258. package/src/lib/resources/utils/prompt-injector.js +242 -0
  259. package/src/lib/resources/utils/simplified-evaluator.js +119 -0
  260. package/src/lib/resources/utils/text-summarizer.js +492 -0
  261. package/src/lib/resources/utils/token-counter.js +177 -0
  262. package/src/lib/resources/utils/token-monitor.js +484 -0
  263. package/src/lib/resources/utils/token-reporter.js +453 -0
  264. package/src/lib/resources/utils/token-storage.js +433 -0
  265. package/src/lib/resources/utils/token-tracker.js +283 -0
  266. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_switch_language.md +0 -160
  267. /package/claude-code/aiwf/ko/.claude/commands/aiwf/{aiwf_update_docs_kr.md β†’ aiwf_update_docs.md} +0 -0
@@ -0,0 +1,39 @@
1
+ # T98: First Task
2
+
3
+ **μŠ€ν”„λ¦°νŠΈ**: S03
4
+ **생성일**: 2025-07-20 15:24
5
+ **μƒνƒœ**: pending
6
+ **μš°μ„ μˆœμœ„**: medium
7
+ **μ˜ˆμƒ μ‹œκ°„**: TBD
8
+
9
+ ## κ°œμš”
10
+
11
+ [νƒœμŠ€ν¬μ— λŒ€ν•œ κ°„λ‹¨ν•œ μ„€λͺ…을 μž‘μ„±ν•˜μ„Έμš”]
12
+
13
+ ## μš”κ΅¬μ‚¬ν•­
14
+
15
+ - [ ] [ꡬ체적인 μš”κ΅¬μ‚¬ν•­ 1]
16
+ - [ ] [ꡬ체적인 μš”κ΅¬μ‚¬ν•­ 2]
17
+ - [ ] [ꡬ체적인 μš”κ΅¬μ‚¬ν•­ 3]
18
+
19
+ ## 승인 κΈ°μ€€
20
+
21
+ - [ ] [μ™„λ£Œ 쑰건 1]
22
+ - [ ] [μ™„λ£Œ 쑰건 2]
23
+ - [ ] [μ™„λ£Œ 쑰건 3]
24
+
25
+ ## 기술 κ°€μ΄λ“œλΌμΈ
26
+
27
+ - [κ΄€λ ¨ μ•„ν‚€ν…μ²˜ κ²°μ • μ°Έμ‘°]
28
+ - [κΈ°μ‘΄ μ½”λ“œλ² μ΄μŠ€ νŒ¨ν„΄ μ°Έμ‘°]
29
+ - [μ‚¬μš©ν•  기술 μŠ€νƒ]
30
+
31
+ ## κ΅¬ν˜„ λ…ΈνŠΈ
32
+
33
+ - [κ΅¬ν˜„ μ‹œ 고렀사항]
34
+ - [잠재적 리슀크]
35
+ - [ν…ŒμŠ€νŠΈ μ „λž΅]
36
+
37
+ ## μ°Έμ‘°
38
+
39
+ - [κ΄€λ ¨ λ¬Έμ„œλ‚˜ μ½”λ“œ 링크]
@@ -0,0 +1,39 @@
1
+ # T99: Test Task
2
+
3
+ **μŠ€ν”„λ¦°νŠΈ**: S03
4
+ **생성일**: 2025-07-20 15:24
5
+ **μƒνƒœ**: pending
6
+ **μš°μ„ μˆœμœ„**: medium
7
+ **μ˜ˆμƒ μ‹œκ°„**: TBD
8
+
9
+ ## κ°œμš”
10
+
11
+ [νƒœμŠ€ν¬μ— λŒ€ν•œ κ°„λ‹¨ν•œ μ„€λͺ…을 μž‘μ„±ν•˜μ„Έμš”]
12
+
13
+ ## μš”κ΅¬μ‚¬ν•­
14
+
15
+ - [ ] [ꡬ체적인 μš”κ΅¬μ‚¬ν•­ 1]
16
+ - [ ] [ꡬ체적인 μš”κ΅¬μ‚¬ν•­ 2]
17
+ - [ ] [ꡬ체적인 μš”κ΅¬μ‚¬ν•­ 3]
18
+
19
+ ## 승인 κΈ°μ€€
20
+
21
+ - [ ] [μ™„λ£Œ 쑰건 1]
22
+ - [ ] [μ™„λ£Œ 쑰건 2]
23
+ - [ ] [μ™„λ£Œ 쑰건 3]
24
+
25
+ ## 기술 κ°€μ΄λ“œλΌμΈ
26
+
27
+ - [κ΄€λ ¨ μ•„ν‚€ν…μ²˜ κ²°μ • μ°Έμ‘°]
28
+ - [κΈ°μ‘΄ μ½”λ“œλ² μ΄μŠ€ νŒ¨ν„΄ μ°Έμ‘°]
29
+ - [μ‚¬μš©ν•  기술 μŠ€νƒ]
30
+
31
+ ## κ΅¬ν˜„ λ…ΈνŠΈ
32
+
33
+ - [κ΅¬ν˜„ μ‹œ 고렀사항]
34
+ - [잠재적 리슀크]
35
+ - [ν…ŒμŠ€νŠΈ μ „λž΅]
36
+
37
+ ## μ°Έμ‘°
38
+
39
+ - [κ΄€λ ¨ λ¬Έμ„œλ‚˜ μ½”λ“œ 링크]
@@ -4,27 +4,27 @@
4
4
  {
5
5
  "name": "Persona Switching Time",
6
6
  "status": "passed",
7
- "executionTime": 0.303858287,
7
+ "executionTime": 0.3037124869999998,
8
8
  "criteria": "< 2 seconds"
9
9
  },
10
10
  {
11
11
  "name": "Pre-commit Hook Installation",
12
12
  "status": "passed",
13
- "executionTime": 0.007028295000000071,
13
+ "executionTime": 0.02001247400000011,
14
14
  "criteria": "Hook installed or installable"
15
15
  },
16
16
  {
17
17
  "name": "Multi-language Support",
18
18
  "status": "passed",
19
- "executionTime": 0.0037783789999994042,
19
+ "executionTime": 0.000359030999999959,
20
20
  "criteria": "Korean/English commands"
21
21
  },
22
22
  {
23
23
  "name": "Performance Baseline",
24
24
  "status": "passed",
25
- "executionTime": 0.0728547009999993,
25
+ "executionTime": 0.05356764800000019,
26
26
  "criteria": "< 5 seconds total",
27
- "actualValue": "0.07s"
27
+ "actualValue": "0.05s"
28
28
  }
29
29
  ],
30
30
  "summary": {
@@ -4,21 +4,9 @@
4
4
 
5
5
  ## μ‹€ν–‰
6
6
 
7
- ```javascript
8
- const { spawn } = require('child_process');
9
- const path = require('path');
10
-
11
- // .aiwf λ””λ ‰ν† λ¦¬λ‘œ μ΄λ™ν•˜μ—¬ λͺ…λ Ή μ‹€ν–‰
12
- const cwd = path.join(process.cwd(), '.aiwf');
13
- const proc = spawn('node', [
14
- '../claude-code/aiwf/ko/commands/compress-context.js',
15
- 'aggressive',
16
- '--persona'
17
- ], { cwd, stdio: 'inherit' });
18
-
19
- proc.on('error', (err) => {
20
- console.error('λͺ…λ Ή μ‹€ν–‰ μ‹€νŒ¨:', err.message);
21
- });
7
+ ```bash
8
+ # AIWF CLIλ₯Ό μ‚¬μš©ν•˜μ—¬ 페λ₯΄μ†Œλ‚˜ 인식 곡격적 μ••μΆ• μ‹€ν–‰
9
+ aiwf compress aggressive --persona
22
10
  ```
23
11
 
24
12
  ## μ„€λͺ…
@@ -4,21 +4,8 @@
4
4
 
5
5
  ## μ‹€ν–‰
6
6
 
7
- ```javascript
8
- const { spawn } = require('child_process');
9
- const path = require('path');
10
-
11
- // .aiwf λ””λ ‰ν† λ¦¬λ‘œ μ΄λ™ν•˜μ—¬ λͺ…λ Ή μ‹€ν–‰
12
- const cwd = path.join(process.cwd(), '.aiwf');
13
- const proc = spawn('node', [
14
- '../claude-code/aiwf/ko/commands/compress-context.js',
15
- 'minimal',
16
- '--persona'
17
- ], { cwd, stdio: 'inherit' });
18
-
19
- proc.on('error', (err) => {
20
- console.error('λͺ…λ Ή μ‹€ν–‰ μ‹€νŒ¨:', err.message);
21
- });
7
+ ```bash
8
+ aiwf compress minimal --persona
22
9
  ```
23
10
 
24
11
  ## μ„€λͺ…
@@ -4,57 +4,8 @@
4
4
 
5
5
  ## μ‹€ν–‰
6
6
 
7
- ```javascript
8
- const fs = require('fs');
9
- const path = require('path');
10
- const chalk = require('chalk');
11
-
12
- // PersonaAwareCompressor import
13
- const { PersonaAwareCompressor } = require(path.join(
14
- process.cwd(),
15
- 'claude-code/aiwf/ko/utils/persona-aware-compressor.js'
16
- ));
17
-
18
- try {
19
- const compressor = new PersonaAwareCompressor();
20
- const stats = compressor.getPersonaCompressionStats();
21
-
22
- console.log(chalk.cyan('πŸ“Š 페λ₯΄μ†Œλ‚˜λ³„ μ••μΆ• 톡계'));
23
- console.log(chalk.gray('━'.repeat(50)));
24
-
25
- if (stats.currentPersona) {
26
- console.log(`ν˜„μž¬ 페λ₯΄μ†Œλ‚˜: ${chalk.yellow(stats.currentPersona)}`);
27
-
28
- if (stats.strategy) {
29
- console.log('\nπŸ“‹ ν˜„μž¬ 페λ₯΄μ†Œλ‚˜ μ••μΆ• μ „λž΅:');
30
- console.log(`- 포컀슀 μ˜μ—­: ${stats.strategy.focusAreas.join(', ')}`);
31
- console.log(`- μš”μ•½ 초점: ${stats.strategy.summarizationFocus}`);
32
- console.log(`- 보쑴 νŒ¨ν„΄: ${stats.strategy.preservePatterns.slice(0, 5).join(', ')}...`);
33
- }
34
- } else {
35
- console.log(chalk.yellow('⚠️ ν™œμ„±ν™”λœ 페λ₯΄μ†Œλ‚˜κ°€ μ—†μŠ΅λ‹ˆλ‹€.'));
36
- }
37
-
38
- const avgRatios = stats.averageRatioByPersona;
39
- if (Object.keys(avgRatios).length > 0) {
40
- console.log('\nπŸ“ˆ 페λ₯΄μ†Œλ‚˜λ³„ 평균 μ••μΆ•λ₯ :');
41
- Object.entries(avgRatios).forEach(([persona, ratio]) => {
42
- const personaNames = {
43
- architect: 'Architect',
44
- security: 'Security Expert',
45
- frontend: 'Frontend Developer',
46
- backend: 'Backend Developer',
47
- data_analyst: 'Data Analyst'
48
- };
49
- console.log(`- ${personaNames[persona] || persona}: ${chalk.green(ratio + '%')}`);
50
- });
51
- } else {
52
- console.log('\nμ••μΆ• νžˆμŠ€ν† λ¦¬κ°€ μ—†μŠ΅λ‹ˆλ‹€.');
53
- }
54
-
55
- } catch (error) {
56
- console.error(chalk.red('였λ₯˜:'), error.message);
57
- }
7
+ ```bash
8
+ aiwf compress stats
58
9
  ```
59
10
 
60
11
  ## μ„€λͺ…
@@ -4,21 +4,8 @@
4
4
 
5
5
  ## μ‹€ν–‰
6
6
 
7
- ```javascript
8
- const { spawn } = require('child_process');
9
- const path = require('path');
10
-
11
- // .aiwf λ””λ ‰ν† λ¦¬λ‘œ μ΄λ™ν•˜μ—¬ λͺ…λ Ή μ‹€ν–‰
12
- const cwd = path.join(process.cwd(), '.aiwf');
13
- const proc = spawn('node', [
14
- '../claude-code/aiwf/ko/commands/compress-context.js',
15
- 'balanced',
16
- '--persona'
17
- ], { cwd, stdio: 'inherit' });
18
-
19
- proc.on('error', (err) => {
20
- console.error('λͺ…λ Ή μ‹€ν–‰ μ‹€νŒ¨:', err.message);
21
- });
7
+ ```bash
8
+ aiwf compress balanced --persona
22
9
  ```
23
10
 
24
11
  ## μ„€λͺ…
@@ -37,11 +24,11 @@ proc.on('error', (err) => {
37
24
 
38
25
  ```bash
39
26
  # κΈ°λ³Έ λͺ¨λ“œ (balanced)둜 페λ₯΄μ†Œλ‚˜ 인식 μ••μΆ•
40
- aiwf compress-with-persona
27
+ aiwf compress balanced --persona
41
28
 
42
29
  # λ‹€λ₯Έ μ••μΆ• λͺ¨λ“œμ™€ ν•¨κ»˜ μ‚¬μš©
43
- aiwf compress-aggressive-persona # aggressive λͺ¨λ“œ
44
- aiwf compress-minimal-persona # minimal λͺ¨λ“œ
30
+ aiwf compress aggressive --persona # aggressive λͺ¨λ“œ
31
+ aiwf compress minimal --persona # minimal λͺ¨λ“œ
45
32
  ```
46
33
 
47
34
  ## μ°Έκ³ 
@@ -3,7 +3,7 @@
3
3
  μƒˆλ‘œμš΄ Feature Ledgerλ₯Ό μƒμ„±ν•˜μ—¬ κΈ°λŠ₯ κ°œλ°œμ„ μΆ”μ ν•©λ‹ˆλ‹€.
4
4
 
5
5
  ```bash
6
- cd .aiwf && node ../claude-code/aiwf/ko/commands/feature-ledger.js create "$@"
6
+ aiwf feature create "$@"
7
7
  ```
8
8
 
9
9
  ## μ„€λͺ…
@@ -3,7 +3,7 @@
3
3
  AIλ₯Ό κΈ°λ³Έ λͺ¨λ“œλ‘œ λ³΅μ›ν•©λ‹ˆλ‹€.
4
4
 
5
5
  ```bash
6
- cd .aiwf && node ../claude-code/aiwf/ko/commands/ai-persona.js default
6
+ aiwf persona default
7
7
  ```
8
8
 
9
9
  ## μ„€λͺ…
@@ -4,22 +4,9 @@ AI 응닡 ν’ˆμ§ˆμ„ κ°„λ‹¨ν•˜κ²Œ ν‰κ°€ν•©λ‹ˆλ‹€.
4
4
 
5
5
  ## μ‹€ν–‰
6
6
 
7
- ```javascript
8
- const { spawn } = require('child_process');
9
- const path = require('path');
10
-
11
- // .aiwf λ””λ ‰ν† λ¦¬λ‘œ μ΄λ™ν•˜μ—¬ λͺ…λ Ή μ‹€ν–‰
12
- const cwd = path.join(process.cwd(), '.aiwf');
13
- const args = process.argv.slice(2); // μΆ”κ°€ 인자 전달
14
-
15
- const proc = spawn('node', [
16
- '../claude-code/aiwf/ko/commands/evaluate.js',
17
- ...args
18
- ], { cwd, stdio: 'inherit' });
19
-
20
- proc.on('error', (err) => {
21
- console.error('λͺ…λ Ή μ‹€ν–‰ μ‹€νŒ¨:', err.message);
22
- });
7
+ ```bash
8
+ # AIWF CLIλ₯Ό μ‚¬μš©ν•˜μ—¬ 평가 μ‹€ν–‰
9
+ aiwf evaluate [options]
23
10
  ```
24
11
 
25
12
  ## μ„€λͺ…
@@ -3,7 +3,7 @@
3
3
  νŠΉμ • Feature Ledger의 상세 정보λ₯Ό ν™•μΈν•©λ‹ˆλ‹€.
4
4
 
5
5
  ```bash
6
- cd .aiwf && node ../claude-code/aiwf/ko/commands/feature-ledger.js details "$@"
6
+ aiwf feature details "$@"
7
7
  ```
8
8
 
9
9
  ## μ„€λͺ…
@@ -3,7 +3,7 @@
3
3
  Feature Ledgerλ₯Ό λ§ˆμΌμŠ€ν†€ 및 μŠ€ν”„λ¦°νŠΈμ™€ μ—°κ²°ν•©λ‹ˆλ‹€.
4
4
 
5
5
  ```bash
6
- cd .aiwf && node ../claude-code/aiwf/ko/commands/feature-ledger.js link-milestone "$@"
6
+ aiwf feature link-milestone "$@"
7
7
  ```
8
8
 
9
9
  ## μ„€λͺ…
@@ -3,7 +3,7 @@
3
3
  Feature Ledger λͺ©λ‘μ„ λ‹€μ–‘ν•œ 필터와 ν˜•μ‹μœΌλ‘œ μ‘°νšŒν•©λ‹ˆλ‹€.
4
4
 
5
5
  ```bash
6
- cd .aiwf && node ../claude-code/aiwf/ko/commands/feature-ledger.js list "$@"
6
+ aiwf feature list "$@"
7
7
  ```
8
8
 
9
9
  ## μ„€λͺ…
@@ -1,160 +1,88 @@
1
1
  # AIWF μ–Έμ–΄ μ „ν™˜
2
2
 
3
- μ‚¬μš©μžκ°€ AIWF ν”„λ ˆμž„μ›Œν¬μ˜ μ–Έμ–΄ 섀정을 λ³€κ²½ν•  수 μžˆλ„λ‘ ν•˜λŠ” λͺ…λ Ήμ–΄μž…λ‹ˆλ‹€.
3
+ AIWF ν”„λ ˆμž„μ›Œν¬μ˜ μ–Έμ–΄ 섀정을 λ³€κ²½ν•©λ‹ˆλ‹€.
4
4
 
5
5
  ## μ‚¬μš©λ²•
6
6
 
7
- 이 λͺ…λ Ήμ–΄λŠ” λ‹€μŒκ³Ό 같은 κ²½μš°μ— μ‚¬μš©λ©λ‹ˆλ‹€:
8
- - ν˜„μž¬ μ–Έμ–΄ 섀정을 λ‹€λ₯Έ μ–Έμ–΄λ‘œ λ³€κ²½ν•˜κ³  싢은 경우
9
- - μ–Έμ–΄ μ„€μ • μƒνƒœλ₯Ό ν™•μΈν•˜κ³  싢은 경우
10
- - μ–Έμ–΄ 감지 문제λ₯Ό ν•΄κ²°ν•˜κ³  싢은 경우
11
-
12
- ## νŒŒλΌλ―Έν„°
13
-
14
- - `<μ–Έμ–΄μ½”λ“œ>` (선택사항): λ³€κ²½ν•  μ–Έμ–΄ (`ko` λ˜λŠ” `en`)
15
- - νŒŒλΌλ―Έν„° 없이 μ‹€ν–‰ν•˜λ©΄ ν˜„μž¬ μ–Έμ–΄ μƒνƒœλ₯Ό ν‘œμ‹œ
16
-
17
- ## μ‹€ν–‰ 단계
18
-
19
- ### 1. ν˜„μž¬ μ–Έμ–΄ μƒνƒœ 확인
20
-
21
- λ¨Όμ € ν˜„μž¬ μ–Έμ–΄ μ„€μ • μƒνƒœλ₯Ό ν™•μΈν•©λ‹ˆλ‹€:
22
-
23
7
  ```bash
24
- node -e "
25
- import('./language-utils.js').then(async ({ getLanguageStatus }) => {
26
- const status = await getLanguageStatus();
27
- console.log('=== AIWF μ–Έμ–΄ μ„€μ • μƒνƒœ ===');
28
- console.log('κ°μ§€λœ μ–Έμ–΄:', status.detectedLanguage);
29
- console.log('μ„€μ •λœ μ–Έμ–΄:', status.configuredLanguage || 'μ—†μŒ');
30
- console.log('ν˜„μž¬ μ‚¬μš© μ–Έμ–΄:', status.effectiveLanguage);
31
- console.log('μžλ™ 감지:', status.autoDetect ? 'ν™œμ„±ν™”' : 'λΉ„ν™œμ„±ν™”');
32
- console.log('폴백 μ–Έμ–΄:', status.fallbackLanguage);
33
- console.log('μ„€μ • 파일 경둜:', status.configPath);
34
- if (status.error) console.log('였λ₯˜:', status.error);
35
- });
36
- "
37
- ```
38
-
39
- ### 2. 인수 뢄석
40
-
41
- `<$ARGUMENTS>` 값을 ν™•μΈν•˜μ—¬ λ‹€μŒ 쀑 ν•˜λ‚˜λ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€:
42
-
43
- - **인수 μ—†μŒ**: ν˜„μž¬ μƒνƒœλ§Œ ν‘œμ‹œν•˜κ³  μ’…λ£Œ
44
- - **μœ νš¨ν•œ μ–Έμ–΄μ½”λ“œ (`ko` λ˜λŠ” `en`)**: ν•΄λ‹Ή μ–Έμ–΄λ‘œ μ „ν™˜
45
- - **λ¬΄νš¨ν•œ 인수**: 였λ₯˜ λ©”μ‹œμ§€ ν‘œμ‹œ ν›„ μ‚¬μš©λ²• μ•ˆλ‚΄
8
+ # ν˜„μž¬ μ–Έμ–΄ μƒνƒœ 확인
9
+ aiwf-lang status
46
10
 
47
- ### 3. μ–Έμ–΄ μ „ν™˜ μ‹€ν–‰
11
+ # ν•œκ΅­μ–΄λ‘œ μ „ν™˜
12
+ aiwf-lang set ko
48
13
 
49
- μœ νš¨ν•œ μ–Έμ–΄μ½”λ“œκ°€ 제곡된 경우 μ–Έμ–΄λ₯Ό μ „ν™˜ν•©λ‹ˆλ‹€:
14
+ # μ˜μ–΄λ‘œ μ „ν™˜
15
+ aiwf-lang set en
50
16
 
51
- ```bash
52
- node -e "
53
- import('./language-utils.js').then(async ({ switchLanguage }) => {
54
- const targetLanguage = process.argv[1];
55
- const result = await switchLanguage(targetLanguage);
56
-
57
- if (result.success) {
58
- console.log('βœ… μ–Έμ–΄ μ „ν™˜ 성곡!');
59
- console.log('이전 μ–Έμ–΄:', result.previousLanguage);
60
- console.log('μƒˆ μ–Έμ–΄:', result.newLanguage);
61
- console.log('λ©”μ‹œμ§€:', result.message);
62
- } else {
63
- console.error('❌ μ–Έμ–΄ μ „ν™˜ μ‹€νŒ¨:', result.error);
64
- console.log('λ©”μ‹œμ§€:', result.message);
65
- }
66
- });
67
- " -- $ARGUMENTS
17
+ # μ–Έμ–΄ μ„€μ • μ΄ˆκΈ°ν™” (μžλ™ κ°μ§€λ‘œ 되돌림)
18
+ aiwf-lang reset
68
19
  ```
69
20
 
70
- ### 4. μ „ν™˜ ν›„ 검증
21
+ ## μ„€λͺ…
71
22
 
72
- μ–Έμ–΄ μ „ν™˜ ν›„ 섀정이 μ œλŒ€λ‘œ μ μš©λ˜μ—ˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€:
23
+ 이 λͺ…λ Ήμ–΄λŠ” λ‹€μŒκ³Ό 같은 κ²½μš°μ— μ‚¬μš©λ©λ‹ˆλ‹€:
24
+ - ν˜„μž¬ μ–Έμ–΄ 섀정을 λ‹€λ₯Έ μ–Έμ–΄λ‘œ λ³€κ²½ν•˜κ³  싢은 경우
25
+ - μ–Έμ–΄ μ„€μ • μƒνƒœλ₯Ό ν™•μΈν•˜κ³  싢은 경우
26
+ - μ–Έμ–΄ 감지 문제λ₯Ό ν•΄κ²°ν•˜κ³  싢은 경우
73
27
 
74
- ```bash
75
- node -e "
76
- import('./language-utils.js').then(async ({ getLanguageStatus }) => {
77
- const status = await getLanguageStatus();
78
- console.log('\n=== μ „ν™˜ ν›„ μ–Έμ–΄ μ„€μ • μƒνƒœ ===');
79
- console.log('ν˜„μž¬ μ‚¬μš© μ–Έμ–΄:', status.effectiveLanguage);
80
- console.log('μ„€μ • 파일:', status.configuredLanguage ? 'μ €μž₯됨' : 'μ—†μŒ');
81
- });
82
- "
83
- ```
28
+ ## 지원 μ–Έμ–΄
84
29
 
85
- ### 5. λͺ…λ Ήμ–΄ 경둜 ν…ŒμŠ€νŠΈ
30
+ - `ko` - ν•œκ΅­μ–΄
31
+ - `en` - μ˜μ–΄
86
32
 
87
- μƒˆ μ–Έμ–΄λ‘œ λͺ…λ Ήμ–΄ κ²½λ‘œκ°€ μ œλŒ€λ‘œ ν•΄κ²°λ˜λŠ”μ§€ ν…ŒμŠ€νŠΈν•©λ‹ˆλ‹€:
33
+ ## μ‚¬μš© μ˜ˆμ‹œ
88
34
 
35
+ ### ν˜„μž¬ μƒνƒœ 확인
89
36
  ```bash
90
- node -e "
91
- import('./language-utils.js').then(async ({ resolveCommandPath, detectLanguage }) => {
92
- const currentLang = await detectLanguage();
93
- const testCommands = ['aiwf_do_task', 'aiwf_commit', 'aiwf_initialize'];
94
-
95
- console.log('\n=== λͺ…λ Ήμ–΄ 경둜 ν…ŒμŠ€νŠΈ ===');
96
- console.log('ν˜„μž¬ μ–Έμ–΄:', currentLang);
97
-
98
- for (const cmd of testCommands) {
99
- const result = await resolveCommandPath(cmd);
100
- if (result.path) {
101
- console.log('βœ…', cmd, '->', result.path, result.fallback ? '(폴백)' : '(직접)');
102
- } else {
103
- console.log('❌', cmd, '-> 찾을 수 μ—†μŒ:', result.error);
104
- }
105
- }
106
- });
107
- "
37
+ aiwf-lang status
108
38
  ```
109
39
 
110
- ## 좜λ ₯ ν˜•μ‹
40
+ ### μ–Έμ–΄ λ³€κ²½
41
+ ```bash
42
+ # ν•œκ΅­μ–΄λ‘œ λ³€κ²½
43
+ aiwf-lang set ko
111
44
 
112
- ### 성곡적인 μ–Έμ–΄ μ „ν™˜
45
+ # μ˜μ–΄λ‘œ λ³€κ²½
46
+ aiwf-lang set en
113
47
  ```
114
- βœ… μ–Έμ–΄ μ „ν™˜ 성곡!
115
- 이전 μ–Έμ–΄: en
116
- μƒˆ μ–Έμ–΄: ko
117
- λ©”μ‹œμ§€: μ–Έμ–΄κ°€ μ„±κ³΅μ μœΌλ‘œ λ³€κ²½λ˜μ—ˆμŠ΅λ‹ˆλ‹€
118
-
119
- === μ „ν™˜ ν›„ μ–Έμ–΄ μ„€μ • μƒνƒœ ===
120
- ν˜„μž¬ μ‚¬μš© μ–Έμ–΄: ko
121
- μ„€μ • 파일: μ €μž₯됨
122
48
 
123
- === λͺ…λ Ήμ–΄ 경둜 ν…ŒμŠ€νŠΈ ===
124
- ν˜„μž¬ μ–Έμ–΄: ko
125
- βœ… aiwf_do_task -> claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_do_task.md (직접)
126
- βœ… aiwf_commit -> claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_commit.md (직접)
127
- βœ… aiwf_initialize -> claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_initialize.md (직접)
128
- ```
49
+ ## 좜λ ₯ μ˜ˆμ‹œ
129
50
 
130
- ### ν˜„μž¬ μƒνƒœ ν™•μΈλ§Œ μˆ˜ν–‰
131
- ```
51
+ ### μƒνƒœ 확인
52
+ ```bash
53
+ $ aiwf-lang status
132
54
  === AIWF μ–Έμ–΄ μ„€μ • μƒνƒœ ===
133
55
  κ°μ§€λœ μ–Έμ–΄: ko
134
- μ„€μ •λœ μ–Έμ–΄: ko
56
+ μ„€μ •λœ μ–Έμ–΄: ko
135
57
  ν˜„μž¬ μ‚¬μš© μ–Έμ–΄: ko
136
58
  μžλ™ 감지: ν™œμ„±ν™”
137
59
  폴백 μ–Έμ–΄: en
138
- μ„€μ • 파일 경둜: .aiwf/config/language.json
139
60
  ```
140
61
 
141
- ### 였λ₯˜ λ°œμƒ μ‹œ
62
+ ### 성곡적인 μ–Έμ–΄ μ „ν™˜
63
+ ```bash
64
+ $ aiwf-lang set en
65
+ βœ… μ–Έμ–΄ μ „ν™˜ 성곡!
66
+ 이전 μ–Έμ–΄: ko
67
+ μƒˆ μ–Έμ–΄: en
68
+ μ–Έμ–΄κ°€ μ„±κ³΅μ μœΌλ‘œ λ³€κ²½λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
142
69
  ```
143
- ❌ μ–Έμ–΄ μ „ν™˜ μ‹€νŒ¨: μ§€μ›λ˜μ§€ μ•ŠλŠ” μ–Έμ–΄μž…λ‹ˆλ‹€
144
- λ©”μ‹œμ§€: μ–Έμ–΄ 변경에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€
145
70
 
146
- μ‚¬μš©λ²•: /project:aiwf:switch_language [ko|en]
71
+ ### 였λ₯˜ λ°œμƒ μ‹œ
72
+ ```bash
73
+ $ aiwf-lang set invalid
74
+ ❌ 였λ₯˜: μ§€μ›λ˜μ§€ μ•ŠλŠ” μ–Έμ–΄μž…λ‹ˆλ‹€
147
75
  지원 μ–Έμ–΄: ko (ν•œκ΅­μ–΄), en (English)
148
76
  ```
149
77
 
150
78
  ## μ£Όμ˜μ‚¬ν•­
151
79
 
152
- 1. **μ„€μ • 파일 κΆŒν•œ**: `.aiwf/config/` 디렉토리에 μ“°κΈ° κΆŒν•œμ΄ ν•„μš”ν•©λ‹ˆλ‹€
153
- 2. **λͺ…λ Ήμ–΄ 파일 쑴재**: μ „ν™˜ν•˜λ €λŠ” μ–Έμ–΄μ˜ λͺ…λ Ήμ–΄ νŒŒμΌλ“€μ΄ μ‘΄μž¬ν•΄μ•Ό ν•©λ‹ˆλ‹€
154
- 3. **ν”„λ‘œμ νŠΈ 루트**: AIWFκ°€ μ΄ˆκΈ°ν™”λœ ν”„λ‘œμ νŠΈμ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆλ‹€
80
+ 1. **μ„€μ • 파일 κΆŒν•œ**: μ„€μ • νŒŒμΌμ— μ“°κΈ° κΆŒν•œμ΄ ν•„μš”ν•©λ‹ˆλ‹€
81
+ 2. **ν”„λ‘œμ νŠΈ 루트**: AIWFκ°€ μ„€μΉ˜λœ ν™˜κ²½μ—μ„œ μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆλ‹€
82
+ 3. **μ–Έμ–΄ 파일**: μ „ν™˜ν•˜λ €λŠ” μ–Έμ–΄μ˜ λ¦¬μ†ŒμŠ€ νŒŒμΌλ“€μ΄ μ‘΄μž¬ν•΄μ•Ό ν•©λ‹ˆλ‹€
155
83
 
156
84
  ## κ΄€λ ¨ λͺ…λ Ήμ–΄
157
85
 
158
- - `/project:aiwf:initialize` - AIWF ν”„λ‘œμ νŠΈ μ΄ˆκΈ°ν™”
159
- - `/project:aiwf:update_docs` - λ¬Έμ„œ μ—…λ°μ΄νŠΈ (언어별)
160
- - `/project:aiwf:help` - 도움말 (ν˜„μž¬ μ–Έμ–΄λ‘œ ν‘œμ‹œ)
86
+ - `aiwf --help` - AIWF 도움말 (ν˜„μž¬ μ–Έμ–΄λ‘œ ν‘œμ‹œ)
87
+ - `aiwf feature` - Feature 관리 λͺ…λ Ήμ–΄
88
+ - `aiwf compress` - μ»¨ν…μŠ€νŠΈ μ••μΆ• λͺ…λ Ήμ–΄
@@ -3,7 +3,7 @@
3
3
  Feature Ledger의 μƒνƒœλ₯Ό λ³€κ²½ν•©λ‹ˆλ‹€.
4
4
 
5
5
  ```bash
6
- cd .aiwf && node ../claude-code/aiwf/ko/commands/feature-ledger.js update-status "$@"
6
+ aiwf feature update-status "$@"
7
7
  ```
8
8
 
9
9
  ## μ„€λͺ…
@@ -10,8 +10,8 @@ const path = require('path');
10
10
 
11
11
  // .aiwf λ””λ ‰ν† λ¦¬λ‘œ μ΄λ™ν•˜μ—¬ λͺ…λ Ή μ‹€ν–‰
12
12
  const cwd = path.join(process.cwd(), '.aiwf');
13
- const proc = spawn('node', [
14
- '../claude-code/aiwf/ko/commands/compress-context.js',
13
+ const proc = spawn('aiwf', [
14
+ 'compress',
15
15
  'aggressive',
16
16
  '--persona'
17
17
  ], { cwd, stdio: 'inherit' });
@@ -10,8 +10,8 @@ const path = require('path');
10
10
 
11
11
  // .aiwf λ””λ ‰ν† λ¦¬λ‘œ μ΄λ™ν•˜μ—¬ λͺ…λ Ή μ‹€ν–‰
12
12
  const cwd = path.join(process.cwd(), '.aiwf');
13
- const proc = spawn('node', [
14
- '../claude-code/aiwf/ko/commands/compress-context.js',
13
+ const proc = spawn('aiwf', [
14
+ 'compress',
15
15
  'minimal',
16
16
  '--persona'
17
17
  ], { cwd, stdio: 'inherit' });
@@ -5,56 +5,19 @@
5
5
  ## μ‹€ν–‰
6
6
 
7
7
  ```javascript
8
- const fs = require('fs');
8
+ const { spawn } = require('child_process');
9
9
  const path = require('path');
10
- const chalk = require('chalk');
11
10
 
12
- // PersonaAwareCompressor import
13
- const { PersonaAwareCompressor } = require(path.join(
14
- process.cwd(),
15
- 'claude-code/aiwf/ko/utils/persona-aware-compressor.js'
16
- ));
11
+ // .aiwf λ””λ ‰ν† λ¦¬λ‘œ μ΄λ™ν•˜μ—¬ λͺ…λ Ή μ‹€ν–‰
12
+ const cwd = path.join(process.cwd(), '.aiwf');
13
+ const proc = spawn('aiwf', [
14
+ 'compress',
15
+ '--stats'
16
+ ], { cwd, stdio: 'inherit' });
17
17
 
18
- try {
19
- const compressor = new PersonaAwareCompressor();
20
- const stats = compressor.getPersonaCompressionStats();
21
-
22
- console.log(chalk.cyan('πŸ“Š 페λ₯΄μ†Œλ‚˜λ³„ μ••μΆ• 톡계'));
23
- console.log(chalk.gray('━'.repeat(50)));
24
-
25
- if (stats.currentPersona) {
26
- console.log(`ν˜„μž¬ 페λ₯΄μ†Œλ‚˜: ${chalk.yellow(stats.currentPersona)}`);
27
-
28
- if (stats.strategy) {
29
- console.log('\nπŸ“‹ ν˜„μž¬ 페λ₯΄μ†Œλ‚˜ μ••μΆ• μ „λž΅:');
30
- console.log(`- 포컀슀 μ˜μ—­: ${stats.strategy.focusAreas.join(', ')}`);
31
- console.log(`- μš”μ•½ 초점: ${stats.strategy.summarizationFocus}`);
32
- console.log(`- 보쑴 νŒ¨ν„΄: ${stats.strategy.preservePatterns.slice(0, 5).join(', ')}...`);
33
- }
34
- } else {
35
- console.log(chalk.yellow('⚠️ ν™œμ„±ν™”λœ 페λ₯΄μ†Œλ‚˜κ°€ μ—†μŠ΅λ‹ˆλ‹€.'));
36
- }
37
-
38
- const avgRatios = stats.averageRatioByPersona;
39
- if (Object.keys(avgRatios).length > 0) {
40
- console.log('\nπŸ“ˆ 페λ₯΄μ†Œλ‚˜λ³„ 평균 μ••μΆ•λ₯ :');
41
- Object.entries(avgRatios).forEach(([persona, ratio]) => {
42
- const personaNames = {
43
- architect: 'Architect',
44
- security: 'Security Expert',
45
- frontend: 'Frontend Developer',
46
- backend: 'Backend Developer',
47
- data_analyst: 'Data Analyst'
48
- };
49
- console.log(`- ${personaNames[persona] || persona}: ${chalk.green(ratio + '%')}`);
50
- });
51
- } else {
52
- console.log('\nμ••μΆ• νžˆμŠ€ν† λ¦¬κ°€ μ—†μŠ΅λ‹ˆλ‹€.');
53
- }
54
-
55
- } catch (error) {
56
- console.error(chalk.red('였λ₯˜:'), error.message);
57
- }
18
+ proc.on('error', (err) => {
19
+ console.error('λͺ…λ Ή μ‹€ν–‰ μ‹€νŒ¨:', err.message);
20
+ });
58
21
  ```
59
22
 
60
23
  ## μ„€λͺ…
@@ -10,8 +10,8 @@ const path = require('path');
10
10
 
11
11
  // .aiwf λ””λ ‰ν† λ¦¬λ‘œ μ΄λ™ν•˜μ—¬ λͺ…λ Ή μ‹€ν–‰
12
12
  const cwd = path.join(process.cwd(), '.aiwf');
13
- const proc = spawn('node', [
14
- '../claude-code/aiwf/ko/commands/compress-context.js',
13
+ const proc = spawn('aiwf', [
14
+ 'compress',
15
15
  'balanced',
16
16
  '--persona'
17
17
  ], { cwd, stdio: 'inherit' });
@@ -3,7 +3,7 @@
3
3
  μƒˆλ‘œμš΄ Feature Ledgerλ₯Ό μƒμ„±ν•˜μ—¬ κΈ°λŠ₯ κ°œλ°œμ„ μΆ”μ ν•©λ‹ˆλ‹€.
4
4
 
5
5
  ```bash
6
- cd .aiwf && node ../claude-code/aiwf/ko/commands/feature-ledger.js create "$@"
6
+ aiwf feature create "$@"
7
7
  ```
8
8
 
9
9
  ## μ„€λͺ