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
@@ -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
  ## 설명
@@ -12,8 +12,8 @@ const path = require('path');
12
12
  const cwd = path.join(process.cwd(), '.aiwf');
13
13
  const args = process.argv.slice(2); // 추가 인자 전달
14
14
 
15
- const proc = spawn('node', [
16
- '../claude-code/aiwf/ko/commands/evaluate.js',
15
+ const proc = spawn('aiwf', [
16
+ 'evaluate',
17
17
  ...args
18
18
  ], { cwd, stdio: 'inherit' });
19
19
 
@@ -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 get-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 link-feature-to-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 list-feature
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 architect
6
+ aiwf persona set architect
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 backend
6
+ aiwf persona set backend
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 data_analyst
6
+ aiwf persona set data_analyst
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 frontend
6
+ aiwf persona set frontend
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 security
6
+ aiwf persona set security
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 status
6
+ aiwf persona status
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 update-status "$@"
6
+ aiwf update-feature-status
7
7
  ```
8
8
 
9
9
  ## 설명
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aiwf",
3
- "version": "0.3.7",
3
+ "version": "0.3.8",
4
4
  "description": "AI Workflow Framework for Claude Code with multi-language support (Korean/English)",
5
5
  "main": "index.js",
6
6
  "type": "module",
package/src/cli/index.js CHANGED
@@ -7,6 +7,11 @@ import AIToolCommand from '../commands/ai-tool.js';
7
7
  import PersonaCommand from '../commands/persona.js';
8
8
  import { CacheCLI } from './cache-cli.js';
9
9
  import { addTaskToSprint } from '../commands/sprint-task.js';
10
+ import CompressCommand from '../commands/compress.js';
11
+ import FeatureCommand from '../commands/feature.js';
12
+ import TokenCommand from '../commands/token.js';
13
+ import EvaluateCommand from '../commands/evaluate.js';
14
+ import { createProject } from '../commands/create-project.js';
10
15
 
11
16
  // Parse version from package.json
12
17
  import { readFileSync } from 'fs';
@@ -217,5 +222,174 @@ program
217
222
  }
218
223
  });
219
224
 
225
+ // Create project command
226
+ program
227
+ .command('create-project')
228
+ .alias('create')
229
+ .description('Create a new AIWF project / 새 AIWF 프로젝트 생성')
230
+ .action(async () => {
231
+ try {
232
+ await createProject();
233
+ } catch (error) {
234
+ console.error(chalk.red(`오류: ${error.message}`));
235
+ process.exit(1);
236
+ }
237
+ });
238
+
239
+ // Context compression command
240
+ program
241
+ .command('compress [mode] [path]')
242
+ .description('Compress context for token optimization / 토큰 최적화를 위한 컨텍스트 압축')
243
+ .option('--persona, -p', 'Enable persona-aware compression / 페르소나 인식 압축 활성화')
244
+ .action(async (mode, path, options) => {
245
+ const compressCmd = new CompressCommand();
246
+ const args = [];
247
+ if (mode) args.push(mode);
248
+ if (path) args.push(path);
249
+ if (options.persona) args.push('--persona');
250
+ await compressCmd.execute(args);
251
+ });
252
+
253
+ // Feature ledger management commands
254
+ const feature = program.command('feature');
255
+ feature.description('Manage feature development tracking / 기능 개발 추적 관리');
256
+
257
+ feature
258
+ .command('list')
259
+ .alias('ls')
260
+ .description('List all features / 모든 기능 목록')
261
+ .action(async () => {
262
+ const featureCmd = new FeatureCommand();
263
+ await featureCmd.execute(['list']);
264
+ });
265
+
266
+ feature
267
+ .command('create <name> [description...]')
268
+ .alias('add')
269
+ .description('Create a new feature / 새 기능 생성')
270
+ .action(async (name, description) => {
271
+ const featureCmd = new FeatureCommand();
272
+ const args = ['create', name];
273
+ if (description) args.push(...description);
274
+ await featureCmd.execute(args);
275
+ });
276
+
277
+ feature
278
+ .command('update <featureId> <status>')
279
+ .description('Update feature status / 기능 상태 업데이트')
280
+ .action(async (featureId, status) => {
281
+ const featureCmd = new FeatureCommand();
282
+ await featureCmd.execute(['update', featureId, status]);
283
+ });
284
+
285
+ feature
286
+ .command('status [featureId]')
287
+ .description('Show feature status / 기능 상태 표시')
288
+ .action(async (featureId) => {
289
+ const featureCmd = new FeatureCommand();
290
+ const args = ['status'];
291
+ if (featureId) args.push(featureId);
292
+ await featureCmd.execute(args);
293
+ });
294
+
295
+ feature
296
+ .command('sync')
297
+ .description('Sync with git commits / Git 커밋과 동기화')
298
+ .action(async () => {
299
+ const featureCmd = new FeatureCommand();
300
+ await featureCmd.execute(['sync']);
301
+ });
302
+
303
+ // Token tracking commands
304
+ const token = program.command('token');
305
+ token.description('Manage token usage tracking / 토큰 사용량 추적 관리');
306
+
307
+ token
308
+ .command('status')
309
+ .alias('s')
310
+ .description('Show token usage status / 토큰 사용 현황 표시')
311
+ .action(async () => {
312
+ const tokenCmd = new TokenCommand();
313
+ await tokenCmd.execute(['status']);
314
+ });
315
+
316
+ token
317
+ .command('report [period]')
318
+ .description('Generate usage report / 사용 리포트 생성')
319
+ .action(async (period) => {
320
+ const tokenCmd = new TokenCommand();
321
+ const args = ['report'];
322
+ if (period) args.push(period);
323
+ await tokenCmd.execute(args);
324
+ });
325
+
326
+ token
327
+ .command('track <input> <output>')
328
+ .description('Manually track token usage / 토큰 사용량 수동 기록')
329
+ .action(async (input, output) => {
330
+ const tokenCmd = new TokenCommand();
331
+ await tokenCmd.execute(['track', input, output]);
332
+ });
333
+
334
+ token
335
+ .command('limit <type> <value>')
336
+ .description('Set usage limits / 사용 한도 설정')
337
+ .action(async (type, value) => {
338
+ const tokenCmd = new TokenCommand();
339
+ await tokenCmd.execute(['limit', type, value]);
340
+ });
341
+
342
+ token
343
+ .command('reset')
344
+ .description('Reset tracking data / 추적 데이터 초기화')
345
+ .action(async () => {
346
+ const tokenCmd = new TokenCommand();
347
+ await tokenCmd.execute(['reset']);
348
+ });
349
+
350
+ // Evaluation commands
351
+ const evaluate = program.command('evaluate');
352
+ evaluate.description('Evaluate AI responses and code quality / AI 응답 및 코드 품질 평가');
353
+
354
+ evaluate
355
+ .command('response <file>')
356
+ .description('Evaluate AI response quality / AI 응답 품질 평가')
357
+ .action(async (file) => {
358
+ const evaluateCmd = new EvaluateCommand();
359
+ await evaluateCmd.execute(['response', file]);
360
+ });
361
+
362
+ evaluate
363
+ .command('code <file>')
364
+ .description('Evaluate code quality / 코드 품질 평가')
365
+ .action(async (file) => {
366
+ const evaluateCmd = new EvaluateCommand();
367
+ await evaluateCmd.execute(['code', file]);
368
+ });
369
+
370
+ evaluate
371
+ .command('persona <file> <persona>')
372
+ .description('Evaluate persona appropriateness / 페르소나 적합성 평가')
373
+ .action(async (file, persona) => {
374
+ const evaluateCmd = new EvaluateCommand();
375
+ await evaluateCmd.execute(['persona', file, persona]);
376
+ });
377
+
378
+ evaluate
379
+ .command('report')
380
+ .description('Generate evaluation report / 평가 리포트 생성')
381
+ .action(async () => {
382
+ const evaluateCmd = new EvaluateCommand();
383
+ await evaluateCmd.execute(['report']);
384
+ });
385
+
386
+ evaluate
387
+ .command('criteria')
388
+ .description('Show evaluation criteria / 평가 기준 표시')
389
+ .action(async () => {
390
+ const evaluateCmd = new EvaluateCommand();
391
+ await evaluateCmd.execute(['criteria']);
392
+ });
393
+
220
394
  // Parse command line arguments
221
395
  program.parse(process.argv);
@@ -0,0 +1,60 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * AIWF 컨텍스트 압축 명령어
5
+ * 대용량 컨텍스트를 효율적으로 압축하여 토큰 사용량 감소
6
+ */
7
+
8
+ import { ResourceLoader } from '../lib/resource-loader.js';
9
+ import chalk from 'chalk';
10
+
11
+ class CompressCommand {
12
+ constructor() {
13
+ this.resourceLoader = new ResourceLoader();
14
+ }
15
+
16
+ /**
17
+ * 압축 명령어 실행
18
+ */
19
+ async execute(args) {
20
+ try {
21
+ // compress-context 모듈 동적 로드
22
+ const compressModule = await this.resourceLoader.loadUtil('compress-context.js');
23
+ const executeCompressContext = compressModule.executeCompressContext || compressModule.default;
24
+
25
+ if (typeof executeCompressContext !== 'function') {
26
+ throw new Error('compress-context 모듈을 로드할 수 없습니다.');
27
+ }
28
+
29
+ // 실행
30
+ await executeCompressContext(args);
31
+
32
+ } catch (error) {
33
+ console.error(chalk.red('❌ 압축 실행 중 오류가 발생했습니다:'), error.message);
34
+ this.showHelp();
35
+ }
36
+ }
37
+
38
+ /**
39
+ * 도움말 표시
40
+ */
41
+ showHelp() {
42
+ console.log(chalk.cyan('\n🗜️ AIWF 컨텍스트 압축'));
43
+ console.log(chalk.gray('-'.repeat(50)));
44
+ console.log('사용법: aiwf compress [옵션] [경로]');
45
+ console.log('');
46
+ console.log('옵션:');
47
+ console.log(' aggressive 공격적 압축 (50-70% 토큰 감소)');
48
+ console.log(' balanced 균형잡힌 압축 (30-50% 토큰 감소) [기본값]');
49
+ console.log(' minimal 최소 압축 (10-30% 토큰 감소)');
50
+ console.log(' --persona 페르소나 인식 압축 활성화');
51
+ console.log('');
52
+ console.log('예시:');
53
+ console.log(' aiwf compress # 기본 압축');
54
+ console.log(' aiwf compress aggressive # 공격적 압축');
55
+ console.log(' aiwf compress --persona balanced # 페르소나 인식 압축');
56
+ console.log(' aiwf compress .aiwf # 특정 경로 압축');
57
+ }
58
+ }
59
+
60
+ export default CompressCommand;
@@ -6,28 +6,33 @@ import { fileURLToPath } from 'url';
6
6
  import prompts from 'prompts';
7
7
  import chalk from 'chalk';
8
8
  import ora from 'ora';
9
+ import { ResourceLoader } from '../lib/resource-loader.js';
9
10
 
10
11
  const __filename = fileURLToPath(import.meta.url);
11
12
  const __dirname = path.dirname(__filename);
12
- const TEMPLATES_DIR = path.join(__dirname, '../../templates');
13
+
14
+ // ResourceLoader를 사용하여 템플릿 관리
15
+ const resourceLoader = new ResourceLoader();
13
16
 
14
17
  async function createProject() {
15
18
  console.log(chalk.cyan('\n🚀 AIWF 프로젝트 생성기\n'));
16
19
 
17
- // 사용 가능한 템플릿 찾기
18
- const templates = fs.readdirSync(TEMPLATES_DIR)
19
- .filter(dir => fs.existsSync(path.join(TEMPLATES_DIR, dir, 'config.json')));
20
-
21
- const templateConfigs = templates.map(template => {
22
- const config = JSON.parse(
23
- fs.readFileSync(path.join(TEMPLATES_DIR, template, 'config.json'), 'utf8')
24
- );
25
- return {
26
- value: template,
27
- title: config.displayName,
28
- description: config.description
29
- };
30
- });
20
+ // ResourceLoader를 사용하여 템플릿 찾기
21
+ const templates = await resourceLoader.listTemplates();
22
+
23
+ const templateConfigs = [];
24
+ for (const template of templates) {
25
+ try {
26
+ const config = await resourceLoader.loadTemplateConfig(template);
27
+ templateConfigs.push({
28
+ value: template,
29
+ title: config.displayName,
30
+ description: config.description
31
+ });
32
+ } catch (error) {
33
+ console.error(`템플릿 ${template} 로드 실패:`, error.message);
34
+ }
35
+ }
31
36
 
32
37
  const questions = [
33
38
  {
@@ -85,7 +90,8 @@ async function createProject() {
85
90
  const spinner = ora('프로젝트 생성 중...').start();
86
91
 
87
92
  try {
88
- const templatePath = path.join(TEMPLATES_DIR, answers.template, 'template');
93
+ // ResourceLoader를 사용하여 템플릿 경로 가져오기
94
+ const templatePath = await resourceLoader.getTemplatePath(answers.template);
89
95
  const targetPath = path.resolve(answers.directory);
90
96
 
91
97
  // 템플릿 복사
@@ -144,7 +150,7 @@ async function replacePlaceholders(dir, replacements) {
144
150
  }
145
151
 
146
152
  // CLI 실행
147
- if (require.main === module) {
153
+ if (import.meta.url === `file://${process.argv[1]}`) {
148
154
  createProject().catch(error => {
149
155
  console.error(chalk.red('오류:', error.message));
150
156
  process.exit(1);