aiwf 0.3.1 → 0.3.3

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 (493) hide show
  1. package/.aiwf/00_PROJECT_MANIFEST.md +183 -0
  2. package/.aiwf/01_PROJECT_DOCS/ARCHITECTURE.md +121 -0
  3. package/.aiwf/01_PROJECT_DOCS/FEATURE_LEDGER_ADVANCED_USE_CASES.md +412 -0
  4. package/.aiwf/01_PROJECT_DOCS/FEATURE_LEDGER_API_REFERENCE.md +361 -0
  5. package/.aiwf/01_PROJECT_DOCS/FEATURE_LEDGER_COMMANDS_GUIDE.md +254 -0
  6. package/.aiwf/01_PROJECT_DOCS/FEATURE_LEDGER_FAQ.md +365 -0
  7. package/.aiwf/01_PROJECT_DOCS/FEATURE_LEDGER_SYSTEM_OVERVIEW.md +305 -0
  8. package/.aiwf/01_PROJECT_DOCS/FEATURE_LEDGER_USER_GUIDE.md +416 -0
  9. package/.aiwf/01_PROJECT_DOCS/FEATURE_LEDGER_/354/213/234/354/236/221_/352/260/200/354/235/264/353/223/234.md +247 -0
  10. package/.aiwf/02_REQUIREMENTS/CLAUDE.md +78 -0
  11. package/.aiwf/02_REQUIREMENTS/M02_Context_Engineering_Enhancement/M02_milestone_meta.md +34 -0
  12. package/.aiwf/02_REQUIREMENTS/M02_Context_Engineering_Enhancement/PRD_Context_Engineering_Enhancement.md +108 -0
  13. package/.aiwf/02_REQUIREMENTS/M02_Context_Engineering_Enhancement/SPECS_AI_Persona_System.md +299 -0
  14. package/.aiwf/02_REQUIREMENTS/M02_Context_Engineering_Enhancement/SPECS_Feature_Ledger_System.md +330 -0
  15. package/.aiwf/02_REQUIREMENTS/M02_Context_Engineering_Enhancement/SPECS_Token_Optimization.md +833 -0
  16. package/.aiwf/03_SPRINTS/CLAUDE.md +83 -0
  17. package/.aiwf/03_SPRINTS/S01_M02_context_foundation/S01_M02_sprint_meta.md +95 -0
  18. package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX01_S01_Feature_Ledger_/353/215/260/354/235/264/355/204/260_/352/265/254/354/241/260_/354/204/244/352/263/204.md +111 -0
  19. package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX02_S01_Feature_Ledger_CLI_/353/252/205/353/240/271/354/226/264_/352/260/234/353/260/234.md +115 -0
  20. package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX03_S01_Git_/354/227/260/353/217/231_Feature_/354/266/224/354/240/201.md +141 -0
  21. package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX04_S01_Feature_Ledger_/353/254/270/354/204/234/355/231/224.md +114 -0
  22. package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX05_S01_AI_/355/216/230/353/245/264/354/206/214/353/202/230_/353/215/260/354/235/264/355/204/260_/352/265/254/354/241/260_/354/204/244/352/263/204.md +123 -0
  23. package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX06_S01_/355/216/230/353/245/264/354/206/214/353/202/230_/352/264/200/353/246/254_/353/252/205/353/240/271/354/226/264_/352/265/254/355/230/204.md +114 -0
  24. package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX07_S01_Context_/354/225/225/354/266/225_/354/225/204/355/202/244/355/205/215/354/262/230_/354/204/244/352/263/204.md +114 -0
  25. package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX08_S01_/355/206/240/355/201/260_/354/266/224/354/240/201_/354/213/234/354/212/244/355/205/234_/355/224/204/353/241/234/355/206/240/355/203/200/354/236/205.md +112 -0
  26. package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX09_S01_/354/225/225/354/266/225_/354/225/214/352/263/240/353/246/254/354/246/230_/355/224/204/353/241/234/355/206/240/355/203/200/354/236/205.md +118 -0
  27. package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX10_S01_update_docs_/353/252/205/353/240/271/354/226/264_/353/263/265/352/265/254.md +118 -0
  28. package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX11_S01_/355/206/265/355/225/251_/355/205/214/354/212/244/355/212/270_Suite_/352/265/254/354/266/225.md +128 -0
  29. package/.aiwf/03_SPRINTS/S01_M02_context_foundation/TX12_S01_/354/204/261/353/212/245_/354/265/234/354/240/201/355/231/224_/353/260/217_/353/254/270/354/204/234/355/231/224.md +122 -0
  30. package/.aiwf/03_SPRINTS/S02_M02_ai_enhancement/S02_M02_sprint_meta.md +107 -0
  31. package/.aiwf/03_SPRINTS/S02_M02_ai_enhancement/TX01_S02_AI_/355/216/230/353/245/264/354/206/214/353/202/230_/353/252/205/353/240/271/354/226/264_/352/265/254/355/230/204.md +129 -0
  32. package/.aiwf/03_SPRINTS/S02_M02_ai_enhancement/TX02_S02_/355/216/230/353/245/264/354/206/214/353/202/230_/354/273/250/355/205/215/354/212/244/355/212/270_/354/240/201/354/232/251_/354/213/234/354/212/244/355/205/234.md +152 -0
  33. package/.aiwf/03_SPRINTS/S02_M02_ai_enhancement/TX03_S02_Context_/354/225/225/354/266/225_/354/225/214/352/263/240/353/246/254/354/246/230_/352/265/254/355/230/204.md +186 -0
  34. package/.aiwf/03_SPRINTS/S02_M02_ai_enhancement/TX05_S02_S02_/355/206/265/355/225/251_/355/205/214/354/212/244/355/212/270_/353/260/217_/353/254/270/354/204/234/355/231/224.md +192 -0
  35. package/.aiwf/03_SPRINTS/S02_M02_ai_enhancement/TX4_S02_Feature_Git_/354/227/260/353/217/231_/353/260/217_/354/236/220/353/217/231/355/231/224.md +162 -0
  36. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/S03_FINAL_SPRINT_SUMMARY.md +137 -0
  37. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/S03_M02_sprint_meta.md +106 -0
  38. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/TX14_S03_M02_/353/247/210/354/235/274/354/212/244/355/206/244_/354/265/234/354/242/205_/352/262/200/354/246/235_/353/260/217_/353/254/270/354/204/234/355/231/224.md +214 -0
  39. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/TX15_S03_/352/270/260/353/263/270_/355/224/204/353/241/234/354/240/235/355/212/270_/355/205/234/355/224/214/353/246/277_/352/260/234/353/260/234.md +177 -0
  40. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/TX16_S03_/354/230/244/355/224/204/353/235/274/354/235/270_/355/205/234/355/224/214/353/246/277_/354/272/220/354/213/234_/354/213/234/354/212/244/355/205/234.md +206 -0
  41. package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/TX_T13_S03_AI_/353/217/204/352/265/254_/355/206/265/355/225/251_/355/205/234/355/224/214/353/246/277_/352/260/234/353/260/234.md +151 -0
  42. package/.aiwf/04_GENERAL_TASKS/CLAUDE.md +96 -0
  43. package/.aiwf/04_GENERAL_TASKS/TX001_complete_english_translation.md +127 -0
  44. package/.aiwf/05_DOCUMENTATION/performance-report.md +33 -0
  45. package/.aiwf/06_FEATURE_LEDGERS/FEATURE_GIT_INTEGRATION.md +314 -0
  46. package/.aiwf/06_FEATURE_LEDGERS/FEATURE_INTEGRATION_GUIDE.md +227 -0
  47. package/.aiwf/06_FEATURE_LEDGERS/FEATURE_LEDGER_INDEX.md +23 -0
  48. package/.aiwf/06_FEATURE_LEDGERS/FEATURE_SCHEMA.md +205 -0
  49. package/.aiwf/06_FEATURE_LEDGERS/FEATURE_STATE_DIAGRAM.md +190 -0
  50. package/.aiwf/06_FEATURE_LEDGERS/active/FL001_user_authentication_system.md +47 -0
  51. package/.aiwf/06_FEATURE_LEDGERS/active/FL002_user_authentication_system.md +47 -0
  52. package/.aiwf/07_AI_PERSONAS/PERSONA_INDEX.md +57 -0
  53. package/.aiwf/07_AI_PERSONAS/architect/best_practices.md +104 -0
  54. package/.aiwf/07_AI_PERSONAS/architect/context_rules.md +46 -0
  55. package/.aiwf/07_AI_PERSONAS/architect/knowledge_base.md +235 -0
  56. package/.aiwf/07_AI_PERSONAS/backend/best_practices.md +363 -0
  57. package/.aiwf/07_AI_PERSONAS/backend/context_rules.md +61 -0
  58. package/.aiwf/07_AI_PERSONAS/backend/knowledge_base.md +623 -0
  59. package/.aiwf/07_AI_PERSONAS/data_analyst/best_practices.md +32 -0
  60. package/.aiwf/07_AI_PERSONAS/data_analyst/context_rules.md +43 -0
  61. package/.aiwf/07_AI_PERSONAS/data_analyst/knowledge_base.md +36 -0
  62. package/.aiwf/07_AI_PERSONAS/frontend/best_practices.md +31 -0
  63. package/.aiwf/07_AI_PERSONAS/frontend/context_rules.md +43 -0
  64. package/.aiwf/07_AI_PERSONAS/frontend/knowledge_base.md +32 -0
  65. package/.aiwf/07_AI_PERSONAS/security/best_practices.md +63 -0
  66. package/.aiwf/07_AI_PERSONAS/security/context_rules.md +53 -0
  67. package/.aiwf/07_AI_PERSONAS/security/knowledge_base.md +93 -0
  68. package/.aiwf/10_PERSONAS/active.json +1 -0
  69. package/.aiwf/10_PERSONAS/developer.md +37 -0
  70. package/.aiwf/10_STATE_OF_PROJECT/2025-07-09-07-20-solid-progress.md +144 -0
  71. package/.aiwf/98_PROMPTS/SAAS_DEVELOPMENT_GUIDE.md +302 -0
  72. package/.aiwf/98_PROMPTS/github_integration.md +130 -0
  73. package/.aiwf/98_PROMPTS/useful-prompts.md +31 -0
  74. package/.aiwf/98_PROMPTS/vibe-front-prompts.md +89 -0
  75. package/.aiwf/99_TEMPLATES/adr_template.md +49 -0
  76. package/.aiwf/99_TEMPLATES/feature_template.md +263 -0
  77. package/.aiwf/99_TEMPLATES/milestone_meta_template.md +25 -0
  78. package/.aiwf/99_TEMPLATES/project_manifest_template.md +39 -0
  79. package/.aiwf/99_TEMPLATES/sprint_meta_template.md +23 -0
  80. package/.aiwf/99_TEMPLATES/task_template.md +36 -0
  81. package/.aiwf/CLAUDE.md +76 -0
  82. package/.aiwf/ai-tools/README.md +105 -0
  83. package/.aiwf/ai-tools/augment/README.md +371 -0
  84. package/.aiwf/ai-tools/augment/config.json +30 -0
  85. package/.aiwf/ai-tools/augment/template/.augment/aiwf-integration.md +387 -0
  86. package/.aiwf/ai-tools/augment/template/.augment/augment.yaml +347 -0
  87. package/.aiwf/ai-tools/augment/template/augment.config.json +64 -0
  88. package/.aiwf/ai-tools/claude-code/README.md +151 -0
  89. package/.aiwf/ai-tools/claude-code/config.json +28 -0
  90. package/.aiwf/ai-tools/claude-code/template/CLAUDE.md +91 -0
  91. package/.aiwf/ai-tools/cursor/README.md +314 -0
  92. package/.aiwf/ai-tools/cursor/config.json +29 -0
  93. package/.aiwf/ai-tools/cursor/template/.cursorrules +362 -0
  94. package/.aiwf/ai-tools/github-copilot/README.md +195 -0
  95. package/.aiwf/ai-tools/github-copilot/config.json +24 -0
  96. package/.aiwf/ai-tools/github-copilot/template/.github/copilot-instructions.md +202 -0
  97. package/.aiwf/ai-tools/windsurf/README.md +355 -0
  98. package/.aiwf/ai-tools/windsurf/config.json +29 -0
  99. package/.aiwf/ai-tools/windsurf/template/.windsurf/aiwf-rules.md +260 -0
  100. package/.aiwf/ai-tools/windsurf/template/.windsurf/windsurf.config.js +312 -0
  101. package/.aiwf/ai-tools/windsurf/template/windsurf.config.json +63 -0
  102. package/.aiwf/config/language.json +6 -0
  103. package/.aiwf/feature-ledger/FL-001-authentication.json +52 -0
  104. package/.aiwf/feature-ledger/feature-index.json +20 -0
  105. package/.aiwf/installed.flag +1 -0
  106. package/.aiwf/personas/analyst.json +44 -0
  107. package/.aiwf/personas/architect/best_practices.md +136 -0
  108. package/.aiwf/personas/architect/knowledge_base.md +377 -0
  109. package/.aiwf/personas/architect.json +44 -0
  110. package/.aiwf/personas/backend/best_practices.md +766 -0
  111. package/.aiwf/personas/backend/knowledge_base.md +1070 -0
  112. package/.aiwf/personas/data_analyst/best_practices.md +594 -0
  113. package/.aiwf/personas/data_analyst/knowledge_base.md +1057 -0
  114. package/.aiwf/personas/developer.json +44 -0
  115. package/.aiwf/personas/evaluation_criteria.json +137 -0
  116. package/.aiwf/personas/frontend/best_practices.md +445 -0
  117. package/.aiwf/personas/frontend/knowledge_base.md +729 -0
  118. package/.aiwf/personas/persona-index.json +31 -0
  119. package/.aiwf/personas/reviewer.json +44 -0
  120. package/.aiwf/personas/security/best_practices.md +307 -0
  121. package/.aiwf/personas/security/knowledge_base.md +498 -0
  122. package/.aiwf/personas/tester.json +44 -0
  123. package/.aiwf/scripts/cache-templates.js +209 -0
  124. package/.aiwf/scripts/create-offline.js +86 -0
  125. package/.aiwf/scripts/create-project.js +151 -0
  126. package/.aiwf/scripts/feature-progress-calculator.cjs +236 -0
  127. package/.aiwf/scripts/git-integration.cjs +391 -0
  128. package/.aiwf/scripts/install-git-hooks.cjs +226 -0
  129. package/.aiwf/scripts/test-commit-parsing.cjs +125 -0
  130. package/.aiwf/scripts/update-feature-status.cjs +198 -0
  131. package/.aiwf/templates/README.md +78 -0
  132. package/.aiwf/templates/api-server/config.json +64 -0
  133. package/.aiwf/templates/api-server/template/.aiwf/config.json +56 -0
  134. package/.aiwf/templates/api-server/template/.aiwf/feature-ledger.json +42 -0
  135. package/.aiwf/templates/api-server/template/.aiwf/personas/backend-engineer.json +40 -0
  136. package/.aiwf/templates/api-server/template/.aiwf/scripts/cli.js +111 -0
  137. package/.aiwf/templates/api-server/template/.env.example +29 -0
  138. package/.aiwf/templates/api-server/template/.eslintrc.json +23 -0
  139. package/.aiwf/templates/api-server/template/README.md +171 -0
  140. package/.aiwf/templates/api-server/template/jest.config.js +26 -0
  141. package/.aiwf/templates/api-server/template/nodemon.json +9 -0
  142. package/.aiwf/templates/api-server/template/package.json +61 -0
  143. package/.aiwf/templates/api-server/template/src/app.ts +60 -0
  144. package/.aiwf/templates/api-server/template/src/config/swagger.ts +38 -0
  145. package/.aiwf/templates/api-server/template/src/controllers/aiwfController.ts +68 -0
  146. package/.aiwf/templates/api-server/template/src/controllers/authController.ts +128 -0
  147. package/.aiwf/templates/api-server/template/src/controllers/statusController.ts +28 -0
  148. package/.aiwf/templates/api-server/template/src/index.ts +28 -0
  149. package/.aiwf/templates/api-server/template/src/middleware/aiwfMiddleware.ts +50 -0
  150. package/.aiwf/templates/api-server/template/src/middleware/authMiddleware.ts +41 -0
  151. package/.aiwf/templates/api-server/template/src/middleware/errorHandler.ts +42 -0
  152. package/.aiwf/templates/api-server/template/src/middleware/notFoundHandler.ts +14 -0
  153. package/.aiwf/templates/api-server/template/src/middleware/requestLogger.ts +20 -0
  154. package/.aiwf/templates/api-server/template/src/routes/aiwf.ts +42 -0
  155. package/.aiwf/templates/api-server/template/src/routes/index.ts +13 -0
  156. package/.aiwf/templates/api-server/template/src/routes/v1/index.ts +67 -0
  157. package/.aiwf/templates/api-server/template/src/utils/logger.ts +37 -0
  158. package/.aiwf/templates/api-server/template/tests/app.test.ts +40 -0
  159. package/.aiwf/templates/api-server/template/tsconfig.json +43 -0
  160. package/.aiwf/templates/npm-library/config.json +61 -0
  161. package/.aiwf/templates/npm-library/template/LICENSE +21 -0
  162. package/.aiwf/templates/npm-library/template/README.md +201 -0
  163. package/.aiwf/templates/npm-library/template/package.json +78 -0
  164. package/.aiwf/templates/web-app/config.json +53 -0
  165. package/.aiwf/templates/web-app/template/.aiwf/config.json +54 -0
  166. package/.aiwf/templates/web-app/template/.aiwf/feature-ledger.json +37 -0
  167. package/.aiwf/templates/web-app/template/.aiwf/personas/fullstack-developer.json +40 -0
  168. package/.aiwf/templates/web-app/template/.aiwf/scripts/cli.js +110 -0
  169. package/.aiwf/templates/web-app/template/.eslintrc.cjs +20 -0
  170. package/.aiwf/templates/web-app/template/README.md +151 -0
  171. package/.aiwf/templates/web-app/template/index.html +14 -0
  172. package/.aiwf/templates/web-app/template/package.json +44 -0
  173. package/.aiwf/templates/web-app/template/postcss.config.js +6 -0
  174. package/.aiwf/templates/web-app/template/public/vite.svg +1 -0
  175. package/.aiwf/templates/web-app/template/src/App.tsx +21 -0
  176. package/.aiwf/templates/web-app/template/src/components/Layout.tsx +57 -0
  177. package/.aiwf/templates/web-app/template/src/components/aiwf/ContextStatus.tsx +107 -0
  178. package/.aiwf/templates/web-app/template/src/components/aiwf/FeatureLedger.tsx +93 -0
  179. package/.aiwf/templates/web-app/template/src/components/aiwf/TokenUsage.tsx +71 -0
  180. package/.aiwf/templates/web-app/template/src/index.css +60 -0
  181. package/.aiwf/templates/web-app/template/src/main.tsx +10 -0
  182. package/.aiwf/templates/web-app/template/src/pages/AiwfDashboard.tsx +60 -0
  183. package/.aiwf/templates/web-app/template/src/pages/HomePage.tsx +89 -0
  184. package/.aiwf/templates/web-app/template/src/pages/NotFound.tsx +25 -0
  185. package/.aiwf/templates/web-app/template/src/stores/aiwfStore.ts +126 -0
  186. package/.aiwf/templates/web-app/template/src/types/global.d.ts +9 -0
  187. package/.aiwf/templates/web-app/template/src/vite-env.d.ts +1 -0
  188. package/.aiwf/templates/web-app/template/tailwind.config.js +30 -0
  189. package/.aiwf/templates/web-app/template/tsconfig.json +37 -0
  190. package/.aiwf/templates/web-app/template/tsconfig.node.json +10 -0
  191. package/.aiwf/templates/web-app/template/vite.config.ts +23 -0
  192. package/.aiwf/test-cache/86c7f9e80251abb8bedd58953ab0d1779e46b4f43ea33b63bffdb778106373b0.json +6 -0
  193. package/.aiwf/test-cache/9e252a90b80fce0585d7ed0646e7a9b4343e109f661f42a3ae678ba1ec5e22c7.json +7 -0
  194. package/.aiwf/test-results-s02.json +36 -0
  195. package/.aiwf/token-data/alerts.json +293 -0
  196. package/.aiwf/token-data/monitor-config.json +12 -0
  197. package/CHANGELOG.md +95 -11
  198. package/CHANGELOG_M02.md +52 -0
  199. package/CLAUDE.md +135 -0
  200. package/README.ko.md +5 -0
  201. package/README.md +6 -0
  202. package/RELEASE_NOTES_M02.md +177 -0
  203. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_create_feature_ledger.md +54 -0
  204. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_default_mode.md +66 -0
  205. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_get_feature_details.md +78 -0
  206. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_link_feature_to_milestone.md +57 -0
  207. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_list_features.md +54 -0
  208. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_persona_architect.md +60 -0
  209. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_persona_backend.md +60 -0
  210. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_persona_data_analyst.md +60 -0
  211. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_persona_frontend.md +60 -0
  212. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_persona_security.md +60 -0
  213. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_persona_status.md +72 -0
  214. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_update_feature_status.md +53 -0
  215. package/claude-code/aiwf/en/commands/ai-persona.js +667 -0
  216. package/claude-code/aiwf/en/commands/compress-context.js +355 -0
  217. package/claude-code/aiwf/en/commands/feature-ledger.js +565 -0
  218. package/claude-code/aiwf/en/commands/feature_commit_report.js +370 -0
  219. package/claude-code/aiwf/en/commands/scan_git_history.js +234 -0
  220. package/claude-code/aiwf/en/commands/sync_feature_commits.js +154 -0
  221. package/claude-code/aiwf/en/commands/token-tracking.js +443 -0
  222. package/claude-code/aiwf/en/config/commit-patterns.js +103 -0
  223. package/claude-code/aiwf/en/hooks/install-hooks.sh +100 -0
  224. package/claude-code/aiwf/en/hooks/post-commit +84 -0
  225. package/claude-code/aiwf/en/tests/compression-test-suite.js +1252 -0
  226. package/claude-code/aiwf/en/tests/test-git-integration.js +164 -0
  227. package/claude-code/aiwf/en/tests/token-tracking.test.js +537 -0
  228. package/claude-code/aiwf/en/utils/compression-metrics.js +1031 -0
  229. package/claude-code/aiwf/en/utils/compression-strategies.js +557 -0
  230. package/claude-code/aiwf/en/utils/content-normalizer.js +455 -0
  231. package/claude-code/aiwf/en/utils/context-compressor.js +583 -0
  232. package/claude-code/aiwf/en/utils/feature-updater.js +271 -0
  233. package/claude-code/aiwf/en/utils/git-utils.js +220 -0
  234. package/claude-code/aiwf/en/utils/importance-classifier.js +645 -0
  235. package/claude-code/aiwf/en/utils/information-filter.js +710 -0
  236. package/claude-code/aiwf/en/utils/text-summarizer.js +487 -0
  237. package/claude-code/aiwf/en/utils/token-counter.js +177 -0
  238. package/claude-code/aiwf/en/utils/token-monitor.js +484 -0
  239. package/claude-code/aiwf/en/utils/token-reporter.js +453 -0
  240. package/claude-code/aiwf/en/utils/token-storage.js +433 -0
  241. package/claude-code/aiwf/en/utils/token-tracker.js +283 -0
  242. package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/FEATURE_ID_GENERATOR.md +138 -0
  243. package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/FEATURE_INDEX.md +186 -0
  244. package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/FEATURE_METADATA.md +240 -0
  245. package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/FEATURE_WORKFLOW.md +183 -0
  246. package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/README.md +94 -0
  247. package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/active/FL001_/354/202/254/354/232/251/354/236/220_/354/235/270/354/246/235_/354/213/234/354/212/244/355/205/234.md +154 -0
  248. package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/active/FL002_ai_/355/216/230/353/245/264/354/206/214/353/202/230_/354/213/234/354/212/244/355/205/234.md +272 -0
  249. package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/completed/FL003_/353/213/244/352/265/255/354/226/264_/353/252/205/353/240/271/354/226/264_/355/221/234/354/244/200/355/231/224.md +266 -0
  250. package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/schemas/feature_schema.json +122 -0
  251. package/claude-code/aiwf/ko/.aiwf/06_FEATURE_LEDGERS/schemas/feature_validator.cjs +406 -0
  252. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_aggressive_persona.md +53 -0
  253. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_context.md +116 -0
  254. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_minimal_persona.md +48 -0
  255. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_stats.md +79 -0
  256. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_with_persona.md +51 -0
  257. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_create_feature_ledger.md +54 -0
  258. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_default_mode.md +44 -0
  259. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_evaluate.md +92 -0
  260. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_get_feature_details.md +78 -0
  261. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_link_feature_to_milestone.md +57 -0
  262. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_list_features.md +54 -0
  263. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_architect.md +48 -0
  264. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_backend.md +37 -0
  265. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_data_analyst.md +37 -0
  266. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_frontend.md +37 -0
  267. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_security.md +48 -0
  268. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_status.md +50 -0
  269. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_update_docs_kr.md +25 -0
  270. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_update_feature_status.md +53 -0
  271. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_yolo.md +2 -2
  272. package/claude-code/aiwf/ko/CLAUDE.md +76 -0
  273. package/claude-code/aiwf/ko/ai-tools/README.md +105 -0
  274. package/claude-code/aiwf/ko/ai-tools/augment/README.md +371 -0
  275. package/claude-code/aiwf/ko/ai-tools/augment/config.json +30 -0
  276. package/claude-code/aiwf/ko/ai-tools/augment/template/.augment/aiwf-integration.md +387 -0
  277. package/claude-code/aiwf/ko/ai-tools/augment/template/.augment/augment.yaml +347 -0
  278. package/claude-code/aiwf/ko/ai-tools/augment/template/augment.config.json +64 -0
  279. package/claude-code/aiwf/ko/ai-tools/claude-code/README.md +151 -0
  280. package/claude-code/aiwf/ko/ai-tools/claude-code/config.json +28 -0
  281. package/claude-code/aiwf/ko/ai-tools/claude-code/template/CLAUDE.md +91 -0
  282. package/claude-code/aiwf/ko/ai-tools/cursor/README.md +314 -0
  283. package/claude-code/aiwf/ko/ai-tools/cursor/config.json +29 -0
  284. package/claude-code/aiwf/ko/ai-tools/cursor/template/.cursorrules +362 -0
  285. package/claude-code/aiwf/ko/ai-tools/github-copilot/README.md +195 -0
  286. package/claude-code/aiwf/ko/ai-tools/github-copilot/config.json +24 -0
  287. package/claude-code/aiwf/ko/ai-tools/github-copilot/template/.github/copilot-instructions.md +202 -0
  288. package/claude-code/aiwf/ko/ai-tools/windsurf/README.md +355 -0
  289. package/claude-code/aiwf/ko/ai-tools/windsurf/config.json +29 -0
  290. package/claude-code/aiwf/ko/ai-tools/windsurf/template/.windsurf/aiwf-rules.md +260 -0
  291. package/claude-code/aiwf/ko/ai-tools/windsurf/template/.windsurf/windsurf.config.js +312 -0
  292. package/claude-code/aiwf/ko/ai-tools/windsurf/template/windsurf.config.json +63 -0
  293. package/claude-code/aiwf/ko/commands/ai-persona.js +602 -0
  294. package/claude-code/aiwf/ko/commands/compress-context.js +389 -0
  295. package/claude-code/aiwf/ko/commands/evaluate.js +246 -0
  296. package/claude-code/aiwf/ko/commands/feature-ledger.js +565 -0
  297. package/claude-code/aiwf/ko/commands/feature_commit_report.js +370 -0
  298. package/claude-code/aiwf/ko/commands/persona-context-apply.js +562 -0
  299. package/claude-code/aiwf/ko/commands/scan_git_history.js +234 -0
  300. package/claude-code/aiwf/ko/commands/sync_feature_commits.js +154 -0
  301. package/claude-code/aiwf/ko/commands/token-tracking.js +443 -0
  302. package/claude-code/aiwf/ko/config/commit-patterns.js +103 -0
  303. package/claude-code/aiwf/ko/config/language.json +6 -0
  304. package/claude-code/aiwf/ko/feature-ledger/FL-001-authentication.json +52 -0
  305. package/claude-code/aiwf/ko/feature-ledger/feature-index.json +20 -0
  306. package/claude-code/aiwf/ko/hooks/install-hooks.sh +100 -0
  307. package/claude-code/aiwf/ko/hooks/post-commit +84 -0
  308. package/claude-code/aiwf/ko/personas/PERSONA_INDEX.md +57 -0
  309. package/claude-code/aiwf/ko/personas/analyst.json +44 -0
  310. package/claude-code/aiwf/ko/personas/architect/best_practices.md +136 -0
  311. package/claude-code/aiwf/ko/personas/architect/knowledge_base.md +377 -0
  312. package/claude-code/aiwf/ko/personas/architect.json +44 -0
  313. package/claude-code/aiwf/ko/personas/backend/best_practices.md +766 -0
  314. package/claude-code/aiwf/ko/personas/backend/knowledge_base.md +1070 -0
  315. package/claude-code/aiwf/ko/personas/data_analyst/best_practices.md +594 -0
  316. package/claude-code/aiwf/ko/personas/data_analyst/knowledge_base.md +1057 -0
  317. package/claude-code/aiwf/ko/personas/developer.json +44 -0
  318. package/claude-code/aiwf/ko/personas/developer.md +37 -0
  319. package/claude-code/aiwf/ko/personas/evaluation_criteria.json +137 -0
  320. package/claude-code/aiwf/ko/personas/frontend/best_practices.md +445 -0
  321. package/claude-code/aiwf/ko/personas/frontend/knowledge_base.md +729 -0
  322. package/claude-code/aiwf/ko/personas/persona-index.json +31 -0
  323. package/claude-code/aiwf/ko/personas/reviewer.json +44 -0
  324. package/claude-code/aiwf/ko/personas/security/best_practices.md +307 -0
  325. package/claude-code/aiwf/ko/personas/security/knowledge_base.md +498 -0
  326. package/claude-code/aiwf/ko/personas/tester.json +44 -0
  327. package/claude-code/aiwf/ko/scripts/cache-templates.js +209 -0
  328. package/claude-code/aiwf/ko/scripts/create-offline.js +86 -0
  329. package/claude-code/aiwf/ko/scripts/create-project.js +151 -0
  330. package/claude-code/aiwf/ko/scripts/feature-progress-calculator.cjs +236 -0
  331. package/claude-code/aiwf/ko/scripts/git-integration.cjs +391 -0
  332. package/claude-code/aiwf/ko/scripts/install-git-hooks.cjs +226 -0
  333. package/claude-code/aiwf/ko/scripts/test-commit-parsing.cjs +125 -0
  334. package/claude-code/aiwf/ko/scripts/update-feature-status.cjs +198 -0
  335. package/claude-code/aiwf/ko/templates/README.md +78 -0
  336. package/claude-code/aiwf/ko/templates/api-server/config.json +64 -0
  337. package/claude-code/aiwf/ko/templates/api-server/template/.aiwf/config.json +56 -0
  338. package/claude-code/aiwf/ko/templates/api-server/template/.aiwf/feature-ledger.json +42 -0
  339. package/claude-code/aiwf/ko/templates/api-server/template/.aiwf/personas/backend-engineer.json +40 -0
  340. package/claude-code/aiwf/ko/templates/api-server/template/.aiwf/scripts/cli.js +111 -0
  341. package/claude-code/aiwf/ko/templates/api-server/template/.env.example +29 -0
  342. package/claude-code/aiwf/ko/templates/api-server/template/.eslintrc.json +23 -0
  343. package/claude-code/aiwf/ko/templates/api-server/template/README.md +171 -0
  344. package/claude-code/aiwf/ko/templates/api-server/template/jest.config.js +26 -0
  345. package/claude-code/aiwf/ko/templates/api-server/template/nodemon.json +9 -0
  346. package/claude-code/aiwf/ko/templates/api-server/template/package.json +61 -0
  347. package/claude-code/aiwf/ko/templates/api-server/template/src/app.ts +60 -0
  348. package/claude-code/aiwf/ko/templates/api-server/template/src/config/swagger.ts +38 -0
  349. package/claude-code/aiwf/ko/templates/api-server/template/src/controllers/aiwfController.ts +68 -0
  350. package/claude-code/aiwf/ko/templates/api-server/template/src/controllers/authController.ts +128 -0
  351. package/claude-code/aiwf/ko/templates/api-server/template/src/controllers/statusController.ts +28 -0
  352. package/claude-code/aiwf/ko/templates/api-server/template/src/index.ts +28 -0
  353. package/claude-code/aiwf/ko/templates/api-server/template/src/middleware/aiwfMiddleware.ts +50 -0
  354. package/claude-code/aiwf/ko/templates/api-server/template/src/middleware/authMiddleware.ts +41 -0
  355. package/claude-code/aiwf/ko/templates/api-server/template/src/middleware/errorHandler.ts +42 -0
  356. package/claude-code/aiwf/ko/templates/api-server/template/src/middleware/notFoundHandler.ts +14 -0
  357. package/claude-code/aiwf/ko/templates/api-server/template/src/middleware/requestLogger.ts +20 -0
  358. package/claude-code/aiwf/ko/templates/api-server/template/src/routes/aiwf.ts +42 -0
  359. package/claude-code/aiwf/ko/templates/api-server/template/src/routes/index.ts +13 -0
  360. package/claude-code/aiwf/ko/templates/api-server/template/src/routes/v1/index.ts +67 -0
  361. package/claude-code/aiwf/ko/templates/api-server/template/src/utils/logger.ts +37 -0
  362. package/claude-code/aiwf/ko/templates/api-server/template/tests/app.test.ts +40 -0
  363. package/claude-code/aiwf/ko/templates/api-server/template/tsconfig.json +43 -0
  364. package/claude-code/aiwf/ko/templates/npm-library/config.json +61 -0
  365. package/claude-code/aiwf/ko/templates/npm-library/template/LICENSE +21 -0
  366. package/claude-code/aiwf/ko/templates/npm-library/template/README.md +201 -0
  367. package/claude-code/aiwf/ko/templates/npm-library/template/package.json +78 -0
  368. package/claude-code/aiwf/ko/templates/web-app/config.json +53 -0
  369. package/claude-code/aiwf/ko/templates/web-app/template/.aiwf/config.json +54 -0
  370. package/claude-code/aiwf/ko/templates/web-app/template/.aiwf/feature-ledger.json +37 -0
  371. package/claude-code/aiwf/ko/templates/web-app/template/.aiwf/personas/fullstack-developer.json +40 -0
  372. package/claude-code/aiwf/ko/templates/web-app/template/.aiwf/scripts/cli.js +110 -0
  373. package/claude-code/aiwf/ko/templates/web-app/template/.eslintrc.cjs +20 -0
  374. package/claude-code/aiwf/ko/templates/web-app/template/README.md +151 -0
  375. package/claude-code/aiwf/ko/templates/web-app/template/index.html +14 -0
  376. package/claude-code/aiwf/ko/templates/web-app/template/package-lock.json +10022 -0
  377. package/claude-code/aiwf/ko/templates/web-app/template/package.json +44 -0
  378. package/claude-code/aiwf/ko/templates/web-app/template/postcss.config.js +6 -0
  379. package/claude-code/aiwf/ko/templates/web-app/template/public/vite.svg +1 -0
  380. package/claude-code/aiwf/ko/templates/web-app/template/src/App.tsx +21 -0
  381. package/claude-code/aiwf/ko/templates/web-app/template/src/components/Layout.tsx +57 -0
  382. package/claude-code/aiwf/ko/templates/web-app/template/src/components/aiwf/ContextStatus.tsx +107 -0
  383. package/claude-code/aiwf/ko/templates/web-app/template/src/components/aiwf/FeatureLedger.tsx +93 -0
  384. package/claude-code/aiwf/ko/templates/web-app/template/src/components/aiwf/TokenUsage.tsx +71 -0
  385. package/claude-code/aiwf/ko/templates/web-app/template/src/index.css +60 -0
  386. package/claude-code/aiwf/ko/templates/web-app/template/src/main.tsx +10 -0
  387. package/claude-code/aiwf/ko/templates/web-app/template/src/pages/AiwfDashboard.tsx +60 -0
  388. package/claude-code/aiwf/ko/templates/web-app/template/src/pages/HomePage.tsx +89 -0
  389. package/claude-code/aiwf/ko/templates/web-app/template/src/pages/NotFound.tsx +25 -0
  390. package/claude-code/aiwf/ko/templates/web-app/template/src/stores/aiwfStore.ts +126 -0
  391. package/claude-code/aiwf/ko/templates/web-app/template/src/types/global.d.ts +9 -0
  392. package/claude-code/aiwf/ko/templates/web-app/template/src/vite-env.d.ts +1 -0
  393. package/claude-code/aiwf/ko/templates/web-app/template/tailwind.config.js +30 -0
  394. package/claude-code/aiwf/ko/templates/web-app/template/tsconfig.json +37 -0
  395. package/claude-code/aiwf/ko/templates/web-app/template/tsconfig.node.json +10 -0
  396. package/claude-code/aiwf/ko/templates/web-app/template/vite.config.ts +23 -0
  397. package/claude-code/aiwf/ko/tests/compression-test-suite.js +1252 -0
  398. package/claude-code/aiwf/ko/tests/test-git-integration.js +164 -0
  399. package/claude-code/aiwf/ko/tests/token-tracking.test.js +537 -0
  400. package/claude-code/aiwf/ko/token-data/alerts.json +293 -0
  401. package/claude-code/aiwf/ko/token-data/monitor-config.json +12 -0
  402. package/claude-code/aiwf/ko/utils/background-monitor.js +223 -0
  403. package/claude-code/aiwf/ko/utils/compression-metrics.js +1031 -0
  404. package/claude-code/aiwf/ko/utils/compression-strategies.js +557 -0
  405. package/claude-code/aiwf/ko/utils/content-normalizer.js +455 -0
  406. package/claude-code/aiwf/ko/utils/context-compressor.js +583 -0
  407. package/claude-code/aiwf/ko/utils/context-rule-parser.js +180 -0
  408. package/claude-code/aiwf/ko/utils/context-token-monitor.js +463 -0
  409. package/claude-code/aiwf/ko/utils/context-update-manager.js +502 -0
  410. package/claude-code/aiwf/ko/utils/feature-updater.js +271 -0
  411. package/claude-code/aiwf/ko/utils/git-utils.js +220 -0
  412. package/claude-code/aiwf/ko/utils/importance-classifier.js +645 -0
  413. package/claude-code/aiwf/ko/utils/information-filter.js +710 -0
  414. package/claude-code/aiwf/ko/utils/persona-aware-compressor.js +598 -0
  415. package/claude-code/aiwf/ko/utils/prompt-injector.js +242 -0
  416. package/claude-code/aiwf/ko/utils/simplified-evaluator.js +119 -0
  417. package/claude-code/aiwf/ko/utils/text-summarizer.js +492 -0
  418. package/claude-code/aiwf/ko/utils/token-counter.js +177 -0
  419. package/claude-code/aiwf/ko/utils/token-monitor.js +484 -0
  420. package/claude-code/aiwf/ko/utils/token-reporter.js +453 -0
  421. package/claude-code/aiwf/ko/utils/token-storage.js +433 -0
  422. package/claude-code/aiwf/ko/utils/token-tracker.js +283 -0
  423. package/docs/AI_PERSONA_SYSTEM_DESIGN.md +516 -0
  424. package/docs/API_DOCUMENTATION.md +932 -0
  425. package/docs/API_REFERENCE.md +979 -0
  426. package/docs/COMMANDS_GUIDE.ko.md +8 -2
  427. package/docs/COMMANDS_GUIDE.md +196 -2
  428. package/docs/CONTRIBUTING.ko.md +408 -0
  429. package/docs/CONTRIBUTING.md +205 -203
  430. package/docs/EXAMPLES.md +691 -0
  431. package/docs/GETTING_STARTED.md +480 -0
  432. package/docs/PERFORMANCE_ARCHITECTURE.md +494 -0
  433. package/docs/PERFORMANCE_GUIDELINES.md +553 -0
  434. package/docs/TROUBLESHOOTING.md +721 -0
  435. package/docs/git-feature-integration-guide.md +253 -0
  436. package/docs/guides/ai-personas-guide-ko.md +239 -0
  437. package/docs/guides/ai-personas-guide.md +239 -0
  438. package/docs/guides/context-compression-guide-ko.md +313 -0
  439. package/docs/guides/context-compression-guide.md +313 -0
  440. package/docs/guides/feature-git-integration-guide-ko.md +481 -0
  441. package/docs/guides/feature-git-integration-guide.md +481 -0
  442. package/docs/lightweight-evaluation.md +198 -0
  443. package/docs/m02-dod-checklist.md +125 -0
  444. package/docs/m02-gap-analysis.md +214 -0
  445. package/docs/m02-milestone-completion-report.md +186 -0
  446. package/docs/m02-milestone-executive-summary.md +68 -0
  447. package/docs/offline-template-cache.md +323 -0
  448. package/docs/performance-benchmark-report.md +159 -0
  449. package/docs/persona-aware-compression.md +168 -0
  450. package/docs/reports/S02-sprint-report.md +190 -0
  451. package/docs/usability-test-report.md +170 -0
  452. package/index.js +116 -4
  453. package/jest.config.js +20 -1
  454. package/language-utils.js +1 -1
  455. package/lib/ai-persona-manager.js +711 -0
  456. package/lib/cache-cli.js +459 -0
  457. package/lib/cache-integration.js +401 -0
  458. package/lib/cache-system.js +332 -0
  459. package/lib/context-engine.js +568 -0
  460. package/lib/file-batch-processor.js +401 -0
  461. package/lib/memory-profiler.js +471 -0
  462. package/lib/metrics-collector.js +885 -0
  463. package/lib/offline-detector.js +386 -0
  464. package/lib/performance-benchmark.js +621 -0
  465. package/lib/task-analyzer.js +599 -0
  466. package/lib/template-cache-system.js +559 -0
  467. package/lib/template-downloader.js +467 -0
  468. package/lib/template-manager.js +310 -0
  469. package/lib/template-version-manager.js +491 -0
  470. package/lib/token-optimizer.js +517 -0
  471. package/package.json +6 -3
  472. package/scripts/run-integration-tests.js +317 -0
  473. package/src/commands/ai-tool.js +383 -0
  474. package/test-token-system.js +88 -0
  475. package/tests/application.test.js +260 -0
  476. package/tests/basic.test.js +1 -1
  477. package/tests/integration/ai-persona-system.test.js +396 -0
  478. package/tests/integration/ai-persona.test.js +390 -0
  479. package/tests/integration/command-integration.test.js +600 -0
  480. package/tests/integration/context-compression.test.js +361 -0
  481. package/tests/integration/feature-ledger.test.js +226 -0
  482. package/tests/integration/git-integration.test.js +307 -0
  483. package/tests/integration/m02-milestone.test.js +420 -0
  484. package/tests/integration/persona-context-application.test.js +508 -0
  485. package/tests/integration/setup.js +174 -0
  486. package/tests/integration/test-persona-aware-compression.js +93 -0
  487. package/tests/language-utils.test.js +25 -9
  488. package/tests/s02-integration.test.js +422 -0
  489. package/tests/unit/ai-persona-manager.test.js +514 -0
  490. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_language_manager.md +0 -287
  491. package/claude-code/aiwf/en/.claude/commands/aiwf/aiwf_language_status.md +0 -246
  492. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_language_manager.md +0 -287
  493. package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_language_status.md +0 -246
@@ -0,0 +1,594 @@
1
+ # Data Analyst 페르소나 Best Practices
2
+
3
+ ## 개요
4
+ Data Analyst 페르소나는 데이터 분석, 시각화, 인사이트 도출에 중점을 둡니다. 정확성, 해석 가능성, 실행 가능한 인사이트를 최우선으로 고려합니다.
5
+
6
+ ## 핵심 원칙
7
+
8
+ ### 1. 데이터 품질 우선
9
+ - 데이터 정합성 검증
10
+ - 이상치 탐지 및 처리
11
+ - 결측치 처리 전략
12
+ - 데이터 버전 관리
13
+
14
+ ### 2. 재현 가능한 분석
15
+ ```python
16
+ # 분석 환경 설정
17
+ import pandas as pd
18
+ import numpy as np
19
+ import matplotlib.pyplot as plt
20
+ import seaborn as sns
21
+ from datetime import datetime
22
+
23
+ # 재현성을 위한 시드 설정
24
+ np.random.seed(42)
25
+
26
+ # 분석 메타데이터 기록
27
+ analysis_metadata = {
28
+ 'analyst': 'data_analyst_persona',
29
+ 'date': datetime.now().isoformat(),
30
+ 'version': '1.0.0',
31
+ 'purpose': 'User behavior analysis',
32
+ 'data_sources': ['user_events.csv', 'transactions.csv']
33
+ }
34
+
35
+ # 데이터 로딩 및 전처리 파이프라인
36
+ class DataPipeline:
37
+ def __init__(self, config):
38
+ self.config = config
39
+ self.raw_data = None
40
+ self.processed_data = None
41
+
42
+ def load_data(self):
43
+ """데이터 로딩 with 에러 처리"""
44
+ try:
45
+ self.raw_data = pd.read_csv(
46
+ self.config['data_path'],
47
+ parse_dates=self.config.get('date_columns', []),
48
+ encoding='utf-8'
49
+ )
50
+ self.log_data_info()
51
+ except Exception as e:
52
+ print(f"데이터 로딩 실패: {e}")
53
+ raise
54
+
55
+ def log_data_info(self):
56
+ """데이터 기본 정보 로깅"""
57
+ print(f"데이터 shape: {self.raw_data.shape}")
58
+ print(f"메모리 사용량: {self.raw_data.memory_usage().sum() / 1024**2:.2f} MB")
59
+ print(f"결측치 현황:\n{self.raw_data.isnull().sum()}")
60
+ ```
61
+
62
+ ### 3. 명확한 시각화 원칙
63
+ ```python
64
+ # 시각화 스타일 가이드
65
+ class VisualizationStyle:
66
+ # 색상 팔레트 정의
67
+ COLORS = {
68
+ 'primary': '#1f77b4',
69
+ 'secondary': '#ff7f0e',
70
+ 'success': '#2ca02c',
71
+ 'danger': '#d62728',
72
+ 'warning': '#ff9800',
73
+ 'info': '#17a2b8'
74
+ }
75
+
76
+ @staticmethod
77
+ def setup_plot_style():
78
+ """일관된 플롯 스타일 설정"""
79
+ plt.style.use('seaborn-v0_8-whitegrid')
80
+ plt.rcParams.update({
81
+ 'figure.figsize': (10, 6),
82
+ 'font.size': 12,
83
+ 'axes.labelsize': 14,
84
+ 'axes.titlesize': 16,
85
+ 'legend.fontsize': 12,
86
+ 'figure.dpi': 100
87
+ })
88
+
89
+ @staticmethod
90
+ def add_value_labels(ax, bars, format_string='{:.1f}'):
91
+ """막대 그래프에 값 레이블 추가"""
92
+ for bar in bars:
93
+ height = bar.get_height()
94
+ ax.annotate(format_string.format(height),
95
+ xy=(bar.get_x() + bar.get_width() / 2, height),
96
+ xytext=(0, 3),
97
+ textcoords="offset points",
98
+ ha='center', va='bottom')
99
+ ```
100
+
101
+ ## 데이터 분석 워크플로우
102
+
103
+ ### 1. 탐색적 데이터 분석 (EDA)
104
+ ```python
105
+ class ExploratoryDataAnalysis:
106
+ def __init__(self, df):
107
+ self.df = df
108
+
109
+ def generate_summary_report(self):
110
+ """종합 요약 리포트 생성"""
111
+ report = {
112
+ 'basic_info': self.get_basic_info(),
113
+ 'numeric_summary': self.get_numeric_summary(),
114
+ 'categorical_summary': self.get_categorical_summary(),
115
+ 'correlation_analysis': self.get_correlations(),
116
+ 'missing_data': self.analyze_missing_data()
117
+ }
118
+ return report
119
+
120
+ def get_basic_info(self):
121
+ """기본 정보 추출"""
122
+ return {
123
+ 'shape': self.df.shape,
124
+ 'columns': list(self.df.columns),
125
+ 'dtypes': self.df.dtypes.to_dict(),
126
+ 'memory_usage': self.df.memory_usage(deep=True).sum() / 1024**2,
127
+ 'duplicates': self.df.duplicated().sum()
128
+ }
129
+
130
+ def get_numeric_summary(self):
131
+ """수치형 변수 요약"""
132
+ numeric_cols = self.df.select_dtypes(include=[np.number]).columns
133
+ summary = {}
134
+
135
+ for col in numeric_cols:
136
+ summary[col] = {
137
+ 'mean': self.df[col].mean(),
138
+ 'median': self.df[col].median(),
139
+ 'std': self.df[col].std(),
140
+ 'min': self.df[col].min(),
141
+ 'max': self.df[col].max(),
142
+ 'q1': self.df[col].quantile(0.25),
143
+ 'q3': self.df[col].quantile(0.75),
144
+ 'skewness': self.df[col].skew(),
145
+ 'kurtosis': self.df[col].kurtosis(),
146
+ 'outliers': self.detect_outliers(self.df[col])
147
+ }
148
+
149
+ return summary
150
+
151
+ def detect_outliers(self, series, method='iqr'):
152
+ """이상치 탐지"""
153
+ if method == 'iqr':
154
+ Q1 = series.quantile(0.25)
155
+ Q3 = series.quantile(0.75)
156
+ IQR = Q3 - Q1
157
+ lower_bound = Q1 - 1.5 * IQR
158
+ upper_bound = Q3 + 1.5 * IQR
159
+ outliers = series[(series < lower_bound) | (series > upper_bound)]
160
+ return {
161
+ 'count': len(outliers),
162
+ 'percentage': len(outliers) / len(series) * 100,
163
+ 'indices': outliers.index.tolist()
164
+ }
165
+ ```
166
+
167
+ ### 2. 통계 분석
168
+ ```python
169
+ class StatisticalAnalysis:
170
+ def __init__(self, data):
171
+ self.data = data
172
+
173
+ def hypothesis_test(self, group1, group2, test_type='t-test', alpha=0.05):
174
+ """가설 검정 수행"""
175
+ from scipy import stats
176
+
177
+ # 정규성 검정
178
+ _, p_value1 = stats.normaltest(group1)
179
+ _, p_value2 = stats.normaltest(group2)
180
+
181
+ is_normal = p_value1 > alpha and p_value2 > alpha
182
+
183
+ if test_type == 't-test' and is_normal:
184
+ # 등분산 검정
185
+ _, p_levene = stats.levene(group1, group2)
186
+ equal_var = p_levene > alpha
187
+
188
+ # t-검정
189
+ statistic, p_value = stats.ttest_ind(
190
+ group1, group2, equal_var=equal_var
191
+ )
192
+ test_name = f"{'Welch' if not equal_var else 'Student'}'s t-test"
193
+ else:
194
+ # 비모수 검정
195
+ statistic, p_value = stats.mannwhitneyu(
196
+ group1, group2, alternative='two-sided'
197
+ )
198
+ test_name = "Mann-Whitney U test"
199
+
200
+ return {
201
+ 'test': test_name,
202
+ 'statistic': statistic,
203
+ 'p_value': p_value,
204
+ 'significant': p_value < alpha,
205
+ 'effect_size': self.calculate_effect_size(group1, group2)
206
+ }
207
+
208
+ def calculate_effect_size(self, group1, group2):
209
+ """효과 크기 계산 (Cohen's d)"""
210
+ mean_diff = np.mean(group1) - np.mean(group2)
211
+ pooled_std = np.sqrt(
212
+ (np.std(group1, ddof=1) ** 2 + np.std(group2, ddof=1) ** 2) / 2
213
+ )
214
+ cohen_d = mean_diff / pooled_std
215
+
216
+ return {
217
+ 'cohen_d': cohen_d,
218
+ 'interpretation': self.interpret_cohen_d(cohen_d)
219
+ }
220
+
221
+ @staticmethod
222
+ def interpret_cohen_d(d):
223
+ """Cohen's d 해석"""
224
+ d = abs(d)
225
+ if d < 0.2:
226
+ return "매우 작은 효과"
227
+ elif d < 0.5:
228
+ return "작은 효과"
229
+ elif d < 0.8:
230
+ return "중간 효과"
231
+ else:
232
+ return "큰 효과"
233
+ ```
234
+
235
+ ### 3. 예측 모델링
236
+ ```python
237
+ class PredictiveModeling:
238
+ def __init__(self, X, y):
239
+ self.X = X
240
+ self.y = y
241
+ self.models = {}
242
+ self.results = {}
243
+
244
+ def train_evaluate_models(self, models_list, cv_folds=5):
245
+ """여러 모델 학습 및 평가"""
246
+ from sklearn.model_selection import cross_validate
247
+ from sklearn.metrics import make_scorer
248
+
249
+ scoring = {
250
+ 'accuracy': 'accuracy',
251
+ 'precision': 'precision_weighted',
252
+ 'recall': 'recall_weighted',
253
+ 'f1': 'f1_weighted',
254
+ 'roc_auc': 'roc_auc_ovr_weighted'
255
+ }
256
+
257
+ for name, model in models_list.items():
258
+ print(f"Training {name}...")
259
+
260
+ cv_results = cross_validate(
261
+ model, self.X, self.y,
262
+ cv=cv_folds,
263
+ scoring=scoring,
264
+ return_train_score=True,
265
+ n_jobs=-1
266
+ )
267
+
268
+ self.models[name] = model
269
+ self.results[name] = self.summarize_cv_results(cv_results)
270
+
271
+ def summarize_cv_results(self, cv_results):
272
+ """교차 검증 결과 요약"""
273
+ summary = {}
274
+
275
+ for metric in cv_results:
276
+ if metric.startswith('test_'):
277
+ metric_name = metric.replace('test_', '')
278
+ summary[metric_name] = {
279
+ 'mean': cv_results[metric].mean(),
280
+ 'std': cv_results[metric].std(),
281
+ 'values': cv_results[metric].tolist()
282
+ }
283
+
284
+ return summary
285
+
286
+ def feature_importance_analysis(self, model_name):
287
+ """특성 중요도 분석"""
288
+ model = self.models[model_name]
289
+
290
+ if hasattr(model, 'feature_importances_'):
291
+ importances = model.feature_importances_
292
+ elif hasattr(model, 'coef_'):
293
+ importances = np.abs(model.coef_).ravel()
294
+ else:
295
+ return None
296
+
297
+ feature_importance = pd.DataFrame({
298
+ 'feature': self.X.columns,
299
+ 'importance': importances
300
+ }).sort_values('importance', ascending=False)
301
+
302
+ return feature_importance
303
+ ```
304
+
305
+ ## 데이터 시각화 Best Practices
306
+
307
+ ### 1. 대시보드 디자인
308
+ ```python
309
+ class DashboardBuilder:
310
+ def __init__(self, data):
311
+ self.data = data
312
+
313
+ def create_executive_dashboard(self):
314
+ """경영진 대시보드 생성"""
315
+ fig = plt.figure(figsize=(16, 10))
316
+ gs = fig.add_gridspec(3, 3, hspace=0.3, wspace=0.3)
317
+
318
+ # KPI 카드
319
+ ax1 = fig.add_subplot(gs[0, :])
320
+ self.create_kpi_cards(ax1)
321
+
322
+ # 시계열 트렌드
323
+ ax2 = fig.add_subplot(gs[1, :2])
324
+ self.create_trend_chart(ax2)
325
+
326
+ # 카테고리별 분포
327
+ ax3 = fig.add_subplot(gs[1, 2])
328
+ self.create_category_distribution(ax3)
329
+
330
+ # 히트맵
331
+ ax4 = fig.add_subplot(gs[2, :2])
332
+ self.create_correlation_heatmap(ax4)
333
+
334
+ # 상위 10 항목
335
+ ax5 = fig.add_subplot(gs[2, 2])
336
+ self.create_top_items(ax5)
337
+
338
+ plt.suptitle('Executive Dashboard', fontsize=20, y=0.98)
339
+ return fig
340
+
341
+ def create_kpi_cards(self, ax):
342
+ """KPI 카드 생성"""
343
+ ax.axis('off')
344
+
345
+ kpis = [
346
+ {'name': 'Total Revenue', 'value': '$1.2M', 'change': '+15%'},
347
+ {'name': 'Active Users', 'value': '45.2K', 'change': '+8%'},
348
+ {'name': 'Conversion Rate', 'value': '3.4%', 'change': '-2%'},
349
+ {'name': 'Avg Order Value', 'value': '$85', 'change': '+12%'}
350
+ ]
351
+
352
+ for i, kpi in enumerate(kpis):
353
+ x = i * 0.25 + 0.125
354
+
355
+ # KPI 박스
356
+ rect = plt.Rectangle((x - 0.1, 0.2), 0.2, 0.6,
357
+ facecolor='lightblue',
358
+ edgecolor='darkblue',
359
+ linewidth=2)
360
+ ax.add_patch(rect)
361
+
362
+ # 텍스트
363
+ ax.text(x, 0.65, kpi['name'], ha='center', fontsize=12)
364
+ ax.text(x, 0.5, kpi['value'], ha='center',
365
+ fontsize=18, fontweight='bold')
366
+
367
+ # 변화율
368
+ color = 'green' if kpi['change'].startswith('+') else 'red'
369
+ ax.text(x, 0.35, kpi['change'], ha='center',
370
+ fontsize=14, color=color)
371
+ ```
372
+
373
+ ### 2. 인터랙티브 시각화
374
+ ```python
375
+ import plotly.graph_objects as go
376
+ import plotly.express as px
377
+ from plotly.subplots import make_subplots
378
+
379
+ class InteractiveVisualizations:
380
+ def __init__(self, data):
381
+ self.data = data
382
+
383
+ def create_interactive_scatter(self, x_col, y_col, color_col=None, size_col=None):
384
+ """인터랙티브 산점도 생성"""
385
+ fig = px.scatter(
386
+ self.data,
387
+ x=x_col,
388
+ y=y_col,
389
+ color=color_col,
390
+ size=size_col,
391
+ hover_data=self.data.columns,
392
+ title=f'{y_col} vs {x_col}',
393
+ labels={x_col: x_col.replace('_', ' ').title(),
394
+ y_col: y_col.replace('_', ' ').title()}
395
+ )
396
+
397
+ # 추세선 추가
398
+ fig.add_trace(
399
+ go.Scatter(
400
+ x=self.data[x_col],
401
+ y=self.data[y_col].rolling(window=7).mean(),
402
+ mode='lines',
403
+ name='7-day MA',
404
+ line=dict(color='red', dash='dash')
405
+ )
406
+ )
407
+
408
+ fig.update_layout(
409
+ hovermode='closest',
410
+ template='plotly_white',
411
+ font=dict(size=12)
412
+ )
413
+
414
+ return fig
415
+
416
+ def create_animated_timeline(self, date_col, value_col, category_col):
417
+ """애니메이션 타임라인 차트"""
418
+ # 데이터 준비
419
+ df_animated = self.data.sort_values(date_col)
420
+
421
+ fig = px.bar(
422
+ df_animated,
423
+ x=category_col,
424
+ y=value_col,
425
+ animation_frame=date_col,
426
+ animation_group=category_col,
427
+ range_y=[0, df_animated[value_col].max() * 1.1],
428
+ title=f'{value_col} Timeline by {category_col}'
429
+ )
430
+
431
+ fig.update_layout(
432
+ xaxis=dict(categoryorder='total descending'),
433
+ showlegend=False
434
+ )
435
+
436
+ return fig
437
+ ```
438
+
439
+ ## 보고서 작성 가이드
440
+
441
+ ### 1. 구조화된 인사이트
442
+ ```python
443
+ class InsightGenerator:
444
+ def __init__(self, analysis_results):
445
+ self.results = analysis_results
446
+
447
+ def generate_insights(self):
448
+ """자동 인사이트 생성"""
449
+ insights = []
450
+
451
+ # 트렌드 인사이트
452
+ if 'trend_analysis' in self.results:
453
+ trend = self.results['trend_analysis']
454
+ if trend['slope'] > 0:
455
+ insights.append({
456
+ 'type': 'trend',
457
+ 'severity': 'positive',
458
+ 'message': f"{trend['metric']}이(가) {trend['period']} 동안 "
459
+ f"{trend['change_pct']:.1f}% 증가했습니다.",
460
+ 'recommendation': "현재 성장 모멘텀을 유지하기 위한 전략 수립 필요"
461
+ })
462
+
463
+ # 이상치 인사이트
464
+ if 'anomalies' in self.results:
465
+ anomalies = self.results['anomalies']
466
+ if anomalies['count'] > 0:
467
+ insights.append({
468
+ 'type': 'anomaly',
469
+ 'severity': 'warning',
470
+ 'message': f"{anomalies['count']}개의 이상치가 발견되었습니다.",
471
+ 'recommendation': "이상치 원인 분석 및 대응 방안 마련 필요"
472
+ })
473
+
474
+ return insights
475
+
476
+ def create_executive_summary(self):
477
+ """경영진 요약 보고서 생성"""
478
+ summary = {
479
+ 'overview': self.generate_overview(),
480
+ 'key_findings': self.extract_key_findings(),
481
+ 'recommendations': self.generate_recommendations(),
482
+ 'next_steps': self.suggest_next_steps()
483
+ }
484
+
485
+ return self.format_summary(summary)
486
+ ```
487
+
488
+ ### 2. 자동화된 리포팅
489
+ ```python
490
+ class AutomatedReporting:
491
+ def __init__(self, template_path):
492
+ self.template_path = template_path
493
+
494
+ def generate_report(self, data, analysis_results, output_path):
495
+ """자동 리포트 생성"""
496
+ from jinja2 import Template
497
+ import pdfkit
498
+
499
+ # 템플릿 로드
500
+ with open(self.template_path, 'r') as f:
501
+ template = Template(f.read())
502
+
503
+ # 데이터 준비
504
+ context = {
505
+ 'report_date': datetime.now().strftime('%Y-%m-%d'),
506
+ 'summary_stats': self.prepare_summary_stats(data),
507
+ 'charts': self.generate_charts(data),
508
+ 'insights': analysis_results.get('insights', []),
509
+ 'recommendations': analysis_results.get('recommendations', [])
510
+ }
511
+
512
+ # HTML 생성
513
+ html = template.render(**context)
514
+
515
+ # PDF 변환
516
+ options = {
517
+ 'page-size': 'A4',
518
+ 'margin-top': '0.75in',
519
+ 'margin-right': '0.75in',
520
+ 'margin-bottom': '0.75in',
521
+ 'margin-left': '0.75in',
522
+ 'encoding': "UTF-8",
523
+ 'no-outline': None
524
+ }
525
+
526
+ pdfkit.from_string(html, output_path, options=options)
527
+
528
+ return output_path
529
+ ```
530
+
531
+ ## 데이터 거버넌스
532
+
533
+ ### 1. 데이터 품질 모니터링
534
+ ```python
535
+ class DataQualityMonitor:
536
+ def __init__(self, rules):
537
+ self.rules = rules
538
+ self.violations = []
539
+
540
+ def check_data_quality(self, df):
541
+ """데이터 품질 검사"""
542
+ results = {
543
+ 'passed': 0,
544
+ 'failed': 0,
545
+ 'violations': []
546
+ }
547
+
548
+ for rule in self.rules:
549
+ if rule['type'] == 'completeness':
550
+ passed = self.check_completeness(df, rule)
551
+ elif rule['type'] == 'uniqueness':
552
+ passed = self.check_uniqueness(df, rule)
553
+ elif rule['type'] == 'validity':
554
+ passed = self.check_validity(df, rule)
555
+ elif rule['type'] == 'consistency':
556
+ passed = self.check_consistency(df, rule)
557
+
558
+ if passed:
559
+ results['passed'] += 1
560
+ else:
561
+ results['failed'] += 1
562
+ results['violations'].append(rule)
563
+
564
+ return results
565
+
566
+ def check_completeness(self, df, rule):
567
+ """완전성 검사"""
568
+ column = rule['column']
569
+ threshold = rule.get('threshold', 0.95)
570
+
571
+ completeness = 1 - (df[column].isnull().sum() / len(df))
572
+ return completeness >= threshold
573
+ ```
574
+
575
+ ## 체크리스트
576
+
577
+ ### 분석 시작 전
578
+ - [ ] 비즈니스 목표 명확화
579
+ - [ ] 데이터 소스 확인
580
+ - [ ] 데이터 품질 검증
581
+ - [ ] 분석 계획 수립
582
+
583
+ ### 분석 진행 중
584
+ - [ ] 가정 사항 문서화
585
+ - [ ] 중간 결과 검증
586
+ - [ ] 이해관계자 피드백
587
+ - [ ] 분석 재현성 확보
588
+
589
+ ### 분석 완료 후
590
+ - [ ] 결과 검증
591
+ - [ ] 인사이트 도출
592
+ - [ ] 시각화 최적화
593
+ - [ ] 보고서 작성
594
+ - [ ] 권고사항 제시