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,502 @@
1
+ /**
2
+ * 컨텍스트 실시간 업데이트 관리자
3
+ * 페르소나 컨텍스트 파일의 변경을 감지하고 실시간으로 반영하는 모듈
4
+ */
5
+
6
+ const fs = require('fs');
7
+ const path = require('path');
8
+ const EventEmitter = require('events');
9
+ const chokidar = require('chokidar');
10
+ const ContextRuleParser = require('./context-rule-parser');
11
+
12
+ class ContextUpdateManager extends EventEmitter {
13
+ constructor() {
14
+ super();
15
+ this.contextParser = new ContextRuleParser();
16
+ this.watchers = new Map();
17
+ this.updateQueue = [];
18
+ this.isProcessing = false;
19
+ this.pollingInterval = null;
20
+ this.lastUpdateTimes = new Map();
21
+ }
22
+
23
+ /**
24
+ * 컨텍스트 파일 감시 시작
25
+ * @param {Array} personas - 감시할 페르소나 목록
26
+ * @param {Object} options - 감시 옵션
27
+ */
28
+ startWatching(personas = ['architect', 'frontend', 'backend', 'data_analyst', 'security'], options = {}) {
29
+ const watchOptions = {
30
+ persistent: true,
31
+ ignoreInitial: true,
32
+ awaitWriteFinish: {
33
+ stabilityThreshold: 1000,
34
+ pollInterval: 100
35
+ },
36
+ ...options
37
+ };
38
+
39
+ personas.forEach(persona => {
40
+ const contextPath = path.join(
41
+ process.cwd(),
42
+ '.aiwf',
43
+ '07_AI_PERSONAS',
44
+ persona,
45
+ 'context_rules.md'
46
+ );
47
+
48
+ try {
49
+ // 파일이 존재하는지 확인
50
+ if (!fs.existsSync(contextPath)) {
51
+ this.createDefaultContextFile(persona, contextPath);
52
+ }
53
+
54
+ // Chokidar 감시자 생성
55
+ const watcher = chokidar.watch(contextPath, watchOptions);
56
+
57
+ watcher
58
+ .on('change', () => this.handleFileChange(persona, contextPath))
59
+ .on('add', () => this.handleFileAdd(persona, contextPath))
60
+ .on('unlink', () => this.handleFileRemove(persona, contextPath))
61
+ .on('error', error => this.handleWatchError(persona, error));
62
+
63
+ this.watchers.set(persona, watcher);
64
+ console.log(`컨텍스트 감시 시작: ${persona}`);
65
+ } catch (error) {
66
+ console.error(`감시 설정 실패 (${persona}):`, error);
67
+ // 폴백: 폴링 방식으로 전환
68
+ this.startPolling(persona, contextPath);
69
+ }
70
+ });
71
+
72
+ // 이벤트 리스너 설정
73
+ this.setupEventHandlers();
74
+ }
75
+
76
+ /**
77
+ * 기본 컨텍스트 파일 생성
78
+ * @param {string} persona - 페르소나 이름
79
+ * @param {string} filePath - 파일 경로
80
+ */
81
+ createDefaultContextFile(persona, filePath) {
82
+ const defaultContexts = {
83
+ architect: `---
84
+ persona_name: architect
85
+ analysis_approach: 시스템 설계 중심
86
+ design_principles:
87
+ - 확장성
88
+ - 유지보수성
89
+ - 성능
90
+ communication_style: 구조적이고 논리적
91
+ ---
92
+
93
+ # 아키텍트 페르소나 컨텍스트
94
+
95
+ ## 핵심 역할
96
+ 시스템 전체 구조를 설계하고 기술적 결정을 내리는 역할을 수행합니다.
97
+
98
+ ## 분석 접근법
99
+ - 전체 시스템 관점에서 문제 분석
100
+ - 컴포넌트 간 상호작용 고려
101
+ - 장기적 확장성과 유지보수성 중시
102
+
103
+ ## 소통 스타일
104
+ - 다이어그램과 구조도를 활용한 설명
105
+ - 기술적 트레이드오프 명확히 제시
106
+ - 단계별 구현 계획 제공`,
107
+
108
+ frontend: `---
109
+ persona_name: frontend
110
+ analysis_approach: UI/UX 중심
111
+ design_principles:
112
+ - 사용성
113
+ - 접근성
114
+ - 반응성
115
+ communication_style: 시각적이고 직관적
116
+ ---
117
+
118
+ # 프론트엔드 페르소나 컨텍스트
119
+
120
+ ## 핵심 역할
121
+ 사용자 인터페이스와 경험을 설계하고 구현하는 역할을 수행합니다.
122
+
123
+ ## 분석 접근법
124
+ - 사용자 관점에서 문제 접근
125
+ - 시각적 요소와 인터랙션 중시
126
+ - 다양한 디바이스와 브라우저 고려
127
+
128
+ ## 소통 스타일
129
+ - 목업과 프로토타입 활용
130
+ - 사용자 시나리오 기반 설명
131
+ - 직관적이고 이해하기 쉬운 표현`,
132
+
133
+ backend: `---
134
+ persona_name: backend
135
+ analysis_approach: API 및 데이터 처리 중심
136
+ design_principles:
137
+ - 보안
138
+ - 효율성
139
+ - 확장성
140
+ communication_style: 기술적이고 정확함
141
+ ---
142
+
143
+ # 백엔드 페르소나 컨텍스트
144
+
145
+ ## 핵심 역할
146
+ 서버 사이드 로직과 데이터 처리를 담당하는 역할을 수행합니다.
147
+
148
+ ## 분석 접근법
149
+ - 데이터 흐름과 처리 로직 중심
150
+ - 성능과 보안 최적화 고려
151
+ - API 설계와 데이터베이스 구조 중시
152
+
153
+ ## 소통 스타일
154
+ - API 문서와 데이터 스키마 제공
155
+ - 기술적 세부사항 명확히 전달
156
+ - 성능 지표와 보안 고려사항 강조`,
157
+
158
+ data_analyst: `---
159
+ persona_name: data_analyst
160
+ analysis_approach: 데이터 기반 의사결정
161
+ design_principles:
162
+ - 정확성
163
+ - 통찰력
164
+ - 시각화
165
+ communication_style: 분석적이고 통계적
166
+ ---
167
+
168
+ # 데이터 분석가 페르소나 컨텍스트
169
+
170
+ ## 핵심 역할
171
+ 데이터를 분석하여 인사이트를 도출하고 의사결정을 지원하는 역할을 수행합니다.
172
+
173
+ ## 분석 접근법
174
+ - 정량적 데이터 분석 우선
175
+ - 통계적 방법론 적용
176
+ - 시각화를 통한 인사이트 전달
177
+
178
+ ## 소통 스타일
179
+ - 차트와 그래프 활용
180
+ - 데이터 기반 근거 제시
181
+ - 객관적이고 중립적인 관점`,
182
+
183
+ security: `---
184
+ persona_name: security
185
+ analysis_approach: 보안 취약점 중심
186
+ design_principles:
187
+ - 보안성
188
+ - 무결성
189
+ - 기밀성
190
+ communication_style: 신중하고 방어적
191
+ ---
192
+
193
+ # 보안 페르소나 컨텍스트
194
+
195
+ ## 핵심 역할
196
+ 시스템의 보안 취약점을 식별하고 보호 방안을 제시하는 역할을 수행합니다.
197
+
198
+ ## 분석 접근법
199
+ - 위협 모델링과 취약점 분석
200
+ - 보안 모범 사례 적용
201
+ - 컴플라이언스 요구사항 고려
202
+
203
+ ## 소통 스타일
204
+ - 위험도 평가와 우선순위 제시
205
+ - 구체적인 보안 대책 제안
206
+ - 예방적 접근과 지속적 모니터링 강조`
207
+ };
208
+
209
+ const content = defaultContexts[persona] || `---
210
+ persona_name: ${persona}
211
+ analysis_approach: 일반적 접근
212
+ design_principles:
213
+ - 품질
214
+ - 효율성
215
+ communication_style: 표준적
216
+ ---
217
+
218
+ # ${persona} 페르소나 컨텍스트
219
+
220
+ 기본 페르소나 컨텍스트입니다.`;
221
+
222
+ // 디렉토리 생성
223
+ const dir = path.dirname(filePath);
224
+ if (!fs.existsSync(dir)) {
225
+ fs.mkdirSync(dir, { recursive: true });
226
+ }
227
+
228
+ // 파일 생성
229
+ fs.writeFileSync(filePath, content, 'utf-8');
230
+ console.log(`기본 컨텍스트 파일 생성: ${persona}`);
231
+ }
232
+
233
+ /**
234
+ * 파일 변경 처리
235
+ * @param {string} persona - 페르소나 이름
236
+ * @param {string} filePath - 파일 경로
237
+ */
238
+ async handleFileChange(persona, filePath) {
239
+ console.log(`컨텍스트 변경 감지: ${persona}`);
240
+
241
+ // 업데이트 큐에 추가
242
+ this.updateQueue.push({
243
+ type: 'change',
244
+ persona,
245
+ filePath,
246
+ timestamp: new Date().toISOString()
247
+ });
248
+
249
+ // 큐 처리
250
+ this.processUpdateQueue();
251
+ }
252
+
253
+ /**
254
+ * 파일 추가 처리
255
+ * @param {string} persona - 페르소나 이름
256
+ * @param {string} filePath - 파일 경로
257
+ */
258
+ handleFileAdd(persona, filePath) {
259
+ console.log(`컨텍스트 파일 추가: ${persona}`);
260
+
261
+ this.updateQueue.push({
262
+ type: 'add',
263
+ persona,
264
+ filePath,
265
+ timestamp: new Date().toISOString()
266
+ });
267
+
268
+ this.processUpdateQueue();
269
+ }
270
+
271
+ /**
272
+ * 파일 제거 처리
273
+ * @param {string} persona - 페르소나 이름
274
+ * @param {string} filePath - 파일 경로
275
+ */
276
+ handleFileRemove(persona, filePath) {
277
+ console.log(`컨텍스트 파일 제거: ${persona}`);
278
+
279
+ this.updateQueue.push({
280
+ type: 'remove',
281
+ persona,
282
+ filePath,
283
+ timestamp: new Date().toISOString()
284
+ });
285
+
286
+ this.processUpdateQueue();
287
+ }
288
+
289
+ /**
290
+ * 감시 오류 처리
291
+ * @param {string} persona - 페르소나 이름
292
+ * @param {Error} error - 오류 객체
293
+ */
294
+ handleWatchError(persona, error) {
295
+ console.error(`감시 오류 (${persona}):`, error);
296
+
297
+ // 폴링으로 전환
298
+ const contextPath = path.join(
299
+ process.cwd(),
300
+ '.aiwf',
301
+ '07_AI_PERSONAS',
302
+ persona,
303
+ 'context_rules.md'
304
+ );
305
+ this.startPolling(persona, contextPath);
306
+ }
307
+
308
+ /**
309
+ * 폴링 방식으로 파일 감시
310
+ * @param {string} persona - 페르소나 이름
311
+ * @param {string} filePath - 파일 경로
312
+ */
313
+ startPolling(persona, filePath) {
314
+ const pollInterval = 5000; // 5초마다 확인
315
+
316
+ const checkFile = async () => {
317
+ try {
318
+ const stats = await fs.promises.stat(filePath);
319
+ const lastModified = stats.mtimeMs;
320
+ const previousModified = this.lastUpdateTimes.get(persona);
321
+
322
+ if (previousModified && lastModified !== previousModified) {
323
+ this.handleFileChange(persona, filePath);
324
+ }
325
+
326
+ this.lastUpdateTimes.set(persona, lastModified);
327
+ } catch (error) {
328
+ // 파일이 없으면 생성
329
+ if (error.code === 'ENOENT') {
330
+ this.createDefaultContextFile(persona, filePath);
331
+ }
332
+ }
333
+ };
334
+
335
+ // 기존 인터벌 정리
336
+ if (this.pollingInterval) {
337
+ clearInterval(this.pollingInterval);
338
+ }
339
+
340
+ // 새 인터벌 설정
341
+ this.pollingInterval = setInterval(checkFile, pollInterval);
342
+ console.log(`폴링 모드로 전환: ${persona}`);
343
+ }
344
+
345
+ /**
346
+ * 업데이트 큐 처리
347
+ */
348
+ async processUpdateQueue() {
349
+ if (this.isProcessing || this.updateQueue.length === 0) {
350
+ return;
351
+ }
352
+
353
+ this.isProcessing = true;
354
+
355
+ while (this.updateQueue.length > 0) {
356
+ const update = this.updateQueue.shift();
357
+
358
+ try {
359
+ await this.processUpdate(update);
360
+ } catch (error) {
361
+ console.error('업데이트 처리 오류:', error);
362
+ this.emit('error', { update, error });
363
+ }
364
+ }
365
+
366
+ this.isProcessing = false;
367
+ }
368
+
369
+ /**
370
+ * 개별 업데이트 처리
371
+ * @param {Object} update - 업데이트 정보
372
+ */
373
+ async processUpdate(update) {
374
+ const { type, persona, filePath, timestamp } = update;
375
+
376
+ switch (type) {
377
+ case 'change':
378
+ case 'add':
379
+ // 컨텍스트 다시 파싱
380
+ const newContext = await this.contextParser.parseContextRules(persona);
381
+
382
+ // 캐시 무효화
383
+ this.contextParser.clearCache();
384
+
385
+ // 이벤트 발생
386
+ this.emit('contextUpdated', {
387
+ persona,
388
+ context: newContext,
389
+ updateType: type,
390
+ timestamp
391
+ });
392
+
393
+ console.log(`컨텍스트 업데이트 완료: ${persona}`);
394
+ break;
395
+
396
+ case 'remove':
397
+ // 기본 컨텍스트로 복원
398
+ this.createDefaultContextFile(persona, filePath);
399
+
400
+ this.emit('contextRemoved', {
401
+ persona,
402
+ timestamp
403
+ });
404
+ break;
405
+ }
406
+ }
407
+
408
+ /**
409
+ * 이벤트 핸들러 설정
410
+ */
411
+ setupEventHandlers() {
412
+ // 컨텍스트 업데이트 시 로깅
413
+ this.on('contextUpdated', (data) => {
414
+ console.log(`[이벤트] 컨텍스트 업데이트: ${data.persona} (${data.updateType})`);
415
+ });
416
+
417
+ // 오류 발생 시 로깅
418
+ this.on('error', (data) => {
419
+ console.error(`[이벤트] 오류 발생:`, data.error);
420
+ });
421
+ }
422
+
423
+ /**
424
+ * 모든 감시 중지
425
+ */
426
+ stopWatching() {
427
+ // Chokidar 감시자 정리
428
+ this.watchers.forEach((watcher, persona) => {
429
+ watcher.close();
430
+ console.log(`감시 중지: ${persona}`);
431
+ });
432
+ this.watchers.clear();
433
+
434
+ // 폴링 인터벌 정리
435
+ if (this.pollingInterval) {
436
+ clearInterval(this.pollingInterval);
437
+ this.pollingInterval = null;
438
+ }
439
+
440
+ // 큐 초기화
441
+ this.updateQueue = [];
442
+ this.isProcessing = false;
443
+ }
444
+
445
+ /**
446
+ * 특정 페르소나 감시 중지
447
+ * @param {string} persona - 페르소나 이름
448
+ */
449
+ stopWatchingPersona(persona) {
450
+ const watcher = this.watchers.get(persona);
451
+ if (watcher) {
452
+ watcher.close();
453
+ this.watchers.delete(persona);
454
+ console.log(`감시 중지: ${persona}`);
455
+ }
456
+ }
457
+
458
+ /**
459
+ * 감시 상태 확인
460
+ * @returns {Object} 감시 상태 정보
461
+ */
462
+ getWatchStatus() {
463
+ const activeWatchers = Array.from(this.watchers.keys());
464
+ const queueLength = this.updateQueue.length;
465
+ const isPolling = this.pollingInterval !== null;
466
+
467
+ return {
468
+ activeWatchers,
469
+ watcherCount: activeWatchers.length,
470
+ queueLength,
471
+ isProcessing: this.isProcessing,
472
+ isPolling,
473
+ lastUpdateTimes: Object.fromEntries(this.lastUpdateTimes)
474
+ };
475
+ }
476
+
477
+ /**
478
+ * 강제 업데이트 트리거
479
+ * @param {string} persona - 페르소나 이름
480
+ */
481
+ forceUpdate(persona) {
482
+ const contextPath = path.join(
483
+ process.cwd(),
484
+ '.aiwf',
485
+ '07_AI_PERSONAS',
486
+ persona,
487
+ 'context_rules.md'
488
+ );
489
+
490
+ this.handleFileChange(persona, contextPath);
491
+ }
492
+
493
+ /**
494
+ * 모든 페르소나 강제 업데이트
495
+ */
496
+ forceUpdateAll() {
497
+ const personas = Array.from(this.watchers.keys());
498
+ personas.forEach(persona => this.forceUpdate(persona));
499
+ }
500
+ }
501
+
502
+ module.exports = ContextUpdateManager;