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,711 @@
1
+ /**
2
+ * AI Persona Manager
3
+ * Manages AI behavior personas for different development tasks
4
+ */
5
+
6
+ import fs from 'fs/promises';
7
+ import path from 'path';
8
+ import { EventEmitter } from 'events';
9
+ import { fileURLToPath } from 'url';
10
+ import { dirname } from 'path';
11
+
12
+ const __filename = fileURLToPath(import.meta.url);
13
+ const __dirname = dirname(__filename);
14
+
15
+ // Import related modules
16
+ import { ContextEngine } from './context-engine.js';
17
+ import { MetricsCollector } from './metrics-collector.js';
18
+ import { TaskAnalyzer } from './task-analyzer.js';
19
+
20
+ class AIPersonaManager extends EventEmitter {
21
+ constructor(options = {}) {
22
+ super();
23
+
24
+ this.options = {
25
+ personaConfigPath: options.personaConfigPath ||
26
+ path.join(process.cwd(), '.aiwf', 'personas'),
27
+ autoDetectionEnabled: options.autoDetectionEnabled !== false,
28
+ metricsEnabled: options.metricsEnabled !== false,
29
+ cacheTimeout: options.cacheTimeout || 300000, // 5 minutes
30
+ ...options
31
+ };
32
+
33
+ this.currentPersona = null;
34
+ this.personaHistory = [];
35
+ this.availablePersonas = {};
36
+ this.lastSwitchTime = null;
37
+
38
+ // Initialize sub-systems
39
+ this.contextEngine = new ContextEngine(this.options);
40
+ this.metricsCollector = new MetricsCollector(this.options);
41
+ this.taskAnalyzer = new TaskAnalyzer(this.options);
42
+
43
+ // Cache for persona configurations
44
+ this.personaCache = new Map();
45
+ }
46
+
47
+ /**
48
+ * Initialize the persona system
49
+ */
50
+ async init() {
51
+ try {
52
+ // Ensure persona directory exists
53
+ await fs.mkdir(this.options.personaConfigPath, { recursive: true });
54
+
55
+ // Load available personas
56
+ await this.loadAvailablePersonas();
57
+
58
+ // Initialize sub-systems
59
+ await this.contextEngine.init();
60
+ if (this.options.metricsEnabled) {
61
+ await this.metricsCollector.init();
62
+ }
63
+
64
+ // Set default persona
65
+ if (!this.currentPersona) {
66
+ await this.switchPersona('developer', { silent: true });
67
+ }
68
+
69
+ this.emit('initialized', {
70
+ availablePersonas: Object.keys(this.availablePersonas),
71
+ currentPersona: this.currentPersona?.name
72
+ });
73
+
74
+ return true;
75
+ } catch (error) {
76
+ this.emit('error', { error, phase: 'initialization' });
77
+ throw error;
78
+ }
79
+ }
80
+
81
+ /**
82
+ * Load available persona configurations
83
+ */
84
+ async loadAvailablePersonas() {
85
+ // Default personas
86
+ const defaultPersonas = {
87
+ architect: {
88
+ name: 'architect',
89
+ description: 'System design and architecture',
90
+ behaviors: [
91
+ 'Focus on big picture and overall system structure',
92
+ 'Prioritize scalability and maintainability',
93
+ 'Apply design patterns and architectural principles',
94
+ 'Consider integration points and interfaces'
95
+ ],
96
+ focusAreas: ['system design', 'architecture', 'patterns', 'scalability'],
97
+ communicationStyle: 'strategic and high-level',
98
+ recommendedTools: ['Glob', 'LS', 'MarkdownProcessor', 'Read'],
99
+ contextRules: {
100
+ priority: ['*.md', '*.yml', '*.json', 'architecture/**'],
101
+ exclude: ['test/**', 'node_modules/**', '*.test.*'],
102
+ focus: ['interfaces', 'contracts', 'dependencies'],
103
+ keywords: ['design', 'pattern', 'architecture', 'structure']
104
+ },
105
+ tokenAllocation: {
106
+ context: 0.3,
107
+ response: 0.7
108
+ }
109
+ },
110
+
111
+ debugger: {
112
+ name: 'debugger',
113
+ description: 'Bug detection and problem solving',
114
+ behaviors: [
115
+ 'Systematic and methodical approach',
116
+ 'Focus on root cause analysis',
117
+ 'Consider edge cases and error scenarios',
118
+ 'Trace execution flow step by step'
119
+ ],
120
+ focusAreas: ['error handling', 'debugging', 'testing', 'validation'],
121
+ communicationStyle: 'detailed and analytical',
122
+ recommendedTools: ['Grep', 'Read', 'Bash', 'MemoryProfiler'],
123
+ contextRules: {
124
+ priority: ['*.log', '*.test.*', 'error.**', 'debug/**'],
125
+ exclude: ['docs/**', '*.md'],
126
+ focus: ['errors', 'exceptions', 'stack traces', 'logs'],
127
+ keywords: ['error', 'bug', 'fix', 'debug', 'trace']
128
+ },
129
+ tokenAllocation: {
130
+ context: 0.5,
131
+ response: 0.5
132
+ }
133
+ },
134
+
135
+ reviewer: {
136
+ name: 'reviewer',
137
+ description: 'Code quality and standards',
138
+ behaviors: [
139
+ 'Verify coding standards compliance',
140
+ 'Identify security vulnerabilities',
141
+ 'Suggest optimizations and improvements',
142
+ 'Ensure best practices are followed'
143
+ ],
144
+ focusAreas: ['code quality', 'security', 'standards', 'best practices'],
145
+ communicationStyle: 'constructive and thorough',
146
+ recommendedTools: ['Grep', 'Read', 'Bash', 'FileUtils'],
147
+ contextRules: {
148
+ priority: ['*.js', '*.ts', '*.py', 'src/**'],
149
+ exclude: ['dist/**', 'build/**', 'coverage/**'],
150
+ focus: ['functions', 'classes', 'imports', 'exports'],
151
+ keywords: ['review', 'quality', 'security', 'standard']
152
+ },
153
+ tokenAllocation: {
154
+ context: 0.4,
155
+ response: 0.6
156
+ }
157
+ },
158
+
159
+ documenter: {
160
+ name: 'documenter',
161
+ description: 'Documentation and guides',
162
+ behaviors: [
163
+ 'Write clear and understandable explanations',
164
+ 'Provide practical examples',
165
+ 'Ensure comprehensive coverage',
166
+ 'Maintain consistent documentation style'
167
+ ],
168
+ focusAreas: ['documentation', 'guides', 'examples', 'tutorials'],
169
+ communicationStyle: 'clear and educational',
170
+ recommendedTools: ['MarkdownProcessor', 'Read', 'Write', 'TemplateEngine'],
171
+ contextRules: {
172
+ priority: ['*.md', 'README*', 'docs/**', 'examples/**'],
173
+ exclude: ['test/**', 'node_modules/**'],
174
+ focus: ['APIs', 'interfaces', 'usage', 'examples'],
175
+ keywords: ['document', 'explain', 'guide', 'example']
176
+ },
177
+ tokenAllocation: {
178
+ context: 0.2,
179
+ response: 0.8
180
+ }
181
+ },
182
+
183
+ optimizer: {
184
+ name: 'optimizer',
185
+ description: 'Performance optimization',
186
+ behaviors: [
187
+ 'Analyze performance bottlenecks',
188
+ 'Focus on efficiency and resource usage',
189
+ 'Measure and benchmark improvements',
190
+ 'Apply optimization techniques'
191
+ ],
192
+ focusAreas: ['performance', 'efficiency', 'optimization', 'benchmarking'],
193
+ communicationStyle: 'data-driven and precise',
194
+ recommendedTools: ['PerformanceBenchmark', 'MemoryProfiler', 'TokenTracker'],
195
+ contextRules: {
196
+ priority: ['*.bench.*', 'benchmark/**', 'perf/**'],
197
+ exclude: ['docs/**', '*.md'],
198
+ focus: ['algorithms', 'loops', 'memory', 'complexity'],
199
+ keywords: ['optimize', 'performance', 'speed', 'efficiency']
200
+ },
201
+ tokenAllocation: {
202
+ context: 0.6,
203
+ response: 0.4
204
+ }
205
+ },
206
+
207
+ developer: {
208
+ name: 'developer',
209
+ description: 'General development (default)',
210
+ behaviors: [
211
+ 'Balanced approach to coding',
212
+ 'Focus on functionality and correctness',
213
+ 'Write clean and maintainable code',
214
+ 'Follow project conventions'
215
+ ],
216
+ focusAreas: ['implementation', 'features', 'functionality', 'coding'],
217
+ communicationStyle: 'practical and straightforward',
218
+ recommendedTools: ['Read', 'Write', 'Edit', 'Bash'],
219
+ contextRules: {
220
+ priority: ['src/**', 'lib/**', '*.js', '*.ts'],
221
+ exclude: ['node_modules/**', 'dist/**'],
222
+ focus: ['implementation', 'logic', 'features'],
223
+ keywords: ['implement', 'create', 'build', 'develop']
224
+ },
225
+ tokenAllocation: {
226
+ context: 0.4,
227
+ response: 0.6
228
+ }
229
+ }
230
+ };
231
+
232
+ // Store default personas
233
+ this.availablePersonas = { ...defaultPersonas };
234
+
235
+ // Load custom personas if they exist
236
+ try {
237
+ const customPath = path.join(this.options.personaConfigPath, 'custom');
238
+ const files = await fs.readdir(customPath).catch(() => []);
239
+
240
+ for (const file of files) {
241
+ if (file.endsWith('.json')) {
242
+ const content = await fs.readFile(
243
+ path.join(customPath, file),
244
+ 'utf-8'
245
+ );
246
+ const persona = JSON.parse(content);
247
+ this.availablePersonas[persona.name] = persona;
248
+ }
249
+ }
250
+ } catch (error) {
251
+ // Custom personas are optional
252
+ }
253
+ }
254
+
255
+ /**
256
+ * Switch to a different persona
257
+ */
258
+ async switchPersona(personaName, options = {}) {
259
+ try {
260
+ // Validate persona
261
+ if (!this.isValidPersona(personaName)) {
262
+ throw new Error(`Invalid persona: ${personaName}`);
263
+ }
264
+
265
+ // Check if already in this persona
266
+ if (this.currentPersona?.name === personaName && !options.force) {
267
+ return this.currentPersona;
268
+ }
269
+
270
+ // Save current state to history
271
+ if (this.currentPersona && !options.silent) {
272
+ const metrics = this.options.metricsEnabled ?
273
+ await this.metricsCollector.collectCurrentMetrics() : null;
274
+
275
+ this.personaHistory.push({
276
+ persona: this.currentPersona,
277
+ startTime: this.lastSwitchTime,
278
+ endTime: new Date(),
279
+ metrics
280
+ });
281
+ }
282
+
283
+ // Load new persona
284
+ const persona = await this.loadPersona(personaName);
285
+
286
+ // Apply context rules
287
+ await this.contextEngine.applyPersonaRules(persona);
288
+
289
+ // Update state
290
+ this.currentPersona = persona;
291
+ this.lastSwitchTime = new Date();
292
+
293
+ // Track switch event
294
+ if (this.options.metricsEnabled && !options.silent) {
295
+ this.metricsCollector.trackEvent('persona_switch', {
296
+ from: this.personaHistory[this.personaHistory.length - 1]?.persona?.name,
297
+ to: personaName,
298
+ trigger: options.manual ? 'manual' : 'auto',
299
+ reason: options.reason
300
+ });
301
+ }
302
+
303
+ // Emit event
304
+ this.emit('personaSwitched', {
305
+ persona: personaName,
306
+ trigger: options.manual ? 'manual' : 'auto'
307
+ });
308
+
309
+ return persona;
310
+ } catch (error) {
311
+ this.emit('error', { error, phase: 'persona_switch' });
312
+ throw error;
313
+ }
314
+ }
315
+
316
+ /**
317
+ * Load a specific persona configuration
318
+ */
319
+ async loadPersona(personaName) {
320
+ // Check cache first
321
+ if (this.personaCache.has(personaName)) {
322
+ const cached = this.personaCache.get(personaName);
323
+ if (Date.now() - cached.timestamp < this.options.cacheTimeout) {
324
+ return cached.persona;
325
+ }
326
+ }
327
+
328
+ // Load from configuration
329
+ const persona = this.availablePersonas[personaName];
330
+ if (!persona) {
331
+ throw new Error(`Persona not found: ${personaName}`);
332
+ }
333
+
334
+ // Process and validate persona
335
+ const processed = {
336
+ ...persona,
337
+ loadedAt: new Date(),
338
+ isActive: true
339
+ };
340
+
341
+ // Cache the persona
342
+ this.personaCache.set(personaName, {
343
+ persona: processed,
344
+ timestamp: Date.now()
345
+ });
346
+
347
+ return processed;
348
+ }
349
+
350
+ /**
351
+ * Detect optimal persona for a task
352
+ */
353
+ async detectOptimalPersona(taskContext) {
354
+ if (!this.options.autoDetectionEnabled) {
355
+ return this.currentPersona?.name || 'developer';
356
+ }
357
+
358
+ try {
359
+ // Analyze task
360
+ const analysis = await this.taskAnalyzer.analyzeTask(taskContext);
361
+
362
+ // Score each persona
363
+ const scores = {};
364
+ for (const personaName of Object.keys(this.availablePersonas)) {
365
+ scores[personaName] = await this.scorePersonaFit(personaName, analysis);
366
+ }
367
+
368
+ // Get best match
369
+ const sorted = Object.entries(scores)
370
+ .sort(([,a], [,b]) => b - a);
371
+
372
+ const bestMatch = sorted[0][0];
373
+ const confidence = sorted[0][1];
374
+
375
+ // Only switch if confidence is high enough
376
+ if (confidence > 0.7 && bestMatch !== this.currentPersona?.name) {
377
+ await this.switchPersona(bestMatch, {
378
+ manual: false,
379
+ reason: 'auto_detection',
380
+ confidence
381
+ });
382
+ }
383
+
384
+ return bestMatch;
385
+ } catch (error) {
386
+ this.emit('error', { error, phase: 'persona_detection' });
387
+ return this.currentPersona?.name || 'developer';
388
+ }
389
+ }
390
+
391
+ /**
392
+ * Score how well a persona fits a task
393
+ */
394
+ async scorePersonaFit(personaName, taskAnalysis) {
395
+ const persona = this.availablePersonas[personaName];
396
+ if (!persona) return 0;
397
+
398
+ let score = 0;
399
+ const weights = {
400
+ keywords: 0.4,
401
+ patterns: 0.3,
402
+ context: 0.2,
403
+ history: 0.1
404
+ };
405
+
406
+ // Keyword matching
407
+ const keywordScore = this.calculateKeywordScore(
408
+ persona.contextRules.keywords,
409
+ taskAnalysis.keywords
410
+ );
411
+ score += keywordScore * weights.keywords;
412
+
413
+ // Pattern matching
414
+ const patternScore = taskAnalysis.scores[personaName] || 0;
415
+ score += (patternScore / 100) * weights.patterns;
416
+
417
+ // Context matching
418
+ const contextScore = this.calculateContextScore(persona, taskAnalysis);
419
+ score += contextScore * weights.context;
420
+
421
+ // Historical performance
422
+ const historyScore = await this.calculateHistoryScore(personaName, taskAnalysis);
423
+ score += historyScore * weights.history;
424
+
425
+ return Math.min(score, 1);
426
+ }
427
+
428
+ /**
429
+ * Calculate keyword matching score
430
+ */
431
+ calculateKeywordScore(personaKeywords, taskKeywords) {
432
+ if (!personaKeywords?.length || !taskKeywords?.length) return 0;
433
+
434
+ const matches = taskKeywords.filter(keyword =>
435
+ personaKeywords.some(pk =>
436
+ keyword.toLowerCase().includes(pk.toLowerCase())
437
+ )
438
+ );
439
+
440
+ return matches.length / taskKeywords.length;
441
+ }
442
+
443
+ /**
444
+ * Calculate context matching score
445
+ */
446
+ calculateContextScore(persona, analysis) {
447
+ let score = 0;
448
+ let factors = 0;
449
+
450
+ // File type matching
451
+ if (analysis.recentFiles?.length) {
452
+ const priorityPatterns = persona.contextRules.priority || [];
453
+ const matchingFiles = analysis.recentFiles.filter(file =>
454
+ priorityPatterns.some(pattern =>
455
+ this.matchesPattern(file, pattern)
456
+ )
457
+ );
458
+ score += matchingFiles.length / analysis.recentFiles.length;
459
+ factors++;
460
+ }
461
+
462
+ // Error state bonus for debugger
463
+ if (persona.name === 'debugger' && analysis.errorState?.hasErrors) {
464
+ score += 1;
465
+ factors++;
466
+ }
467
+
468
+ // Git context bonus
469
+ if (persona.name === 'reviewer' && analysis.gitContext?.isPullRequest) {
470
+ score += 1;
471
+ factors++;
472
+ }
473
+
474
+ return factors > 0 ? score / factors : 0;
475
+ }
476
+
477
+ /**
478
+ * Calculate historical performance score
479
+ */
480
+ async calculateHistoryScore(personaName, analysis) {
481
+ if (!this.options.metricsEnabled) return 0.5; // Neutral score
482
+
483
+ const history = await this.metricsCollector.getPersonaHistory(personaName);
484
+ if (!history || history.length === 0) return 0.5;
485
+
486
+ // Find similar tasks in history
487
+ const similarTasks = history.filter(session =>
488
+ this.taskAnalyzer.calculateSimilarity(session.task, analysis) > 0.6
489
+ );
490
+
491
+ if (similarTasks.length === 0) return 0.5;
492
+
493
+ // Calculate average performance
494
+ const avgPerformance = similarTasks.reduce((sum, task) =>
495
+ sum + (task.qualityMetrics?.overallScore || 0.5), 0
496
+ ) / similarTasks.length;
497
+
498
+ return avgPerformance;
499
+ }
500
+
501
+ /**
502
+ * Get current persona
503
+ */
504
+ getCurrentPersona() {
505
+ return this.currentPersona;
506
+ }
507
+
508
+ /**
509
+ * Get persona context rules
510
+ */
511
+ getPersonaContext(personaName) {
512
+ const persona = this.availablePersonas[personaName];
513
+ return persona?.contextRules || null;
514
+ }
515
+
516
+ /**
517
+ * Apply persona rules to content
518
+ */
519
+ async applyPersonaRules(content, personaName) {
520
+ const persona = personaName ?
521
+ this.availablePersonas[personaName] :
522
+ this.currentPersona;
523
+
524
+ if (!persona) {
525
+ throw new Error('No persona specified or active');
526
+ }
527
+
528
+ return await this.contextEngine.filterContent(content, persona);
529
+ }
530
+
531
+ /**
532
+ * Get available personas
533
+ */
534
+ getAvailablePersonas() {
535
+ return Object.keys(this.availablePersonas);
536
+ }
537
+
538
+ /**
539
+ * Check if persona is valid
540
+ */
541
+ isValidPersona(personaName) {
542
+ return personaName in this.availablePersonas;
543
+ }
544
+
545
+ /**
546
+ * Get persona statistics
547
+ */
548
+ async getPersonaStats(personaName) {
549
+ if (!this.options.metricsEnabled) {
550
+ return { message: 'Metrics collection is disabled' };
551
+ }
552
+
553
+ return await this.metricsCollector.getPersonaStats(personaName);
554
+ }
555
+
556
+ /**
557
+ * Generate persona report
558
+ */
559
+ async generateReport(options = {}) {
560
+ if (!this.options.metricsEnabled) {
561
+ return { message: 'Metrics collection is disabled' };
562
+ }
563
+
564
+ const report = await this.metricsCollector.generateReport(options);
565
+
566
+ // Add persona-specific insights
567
+ report.personaInsights = {};
568
+ for (const personaName of this.getAvailablePersonas()) {
569
+ report.personaInsights[personaName] = await this.generatePersonaInsights(
570
+ personaName,
571
+ report.personaAnalysis[personaName]
572
+ );
573
+ }
574
+
575
+ return report;
576
+ }
577
+
578
+ /**
579
+ * Generate insights for a specific persona
580
+ */
581
+ async generatePersonaInsights(personaName, analysis) {
582
+ if (!analysis) return null;
583
+
584
+ const insights = {
585
+ effectiveness: this.calculateEffectiveness(analysis),
586
+ recommendations: [],
587
+ bestPractices: []
588
+ };
589
+
590
+ // Generate recommendations
591
+ if (analysis.tokenEfficiency < 0.5) {
592
+ insights.recommendations.push(
593
+ 'Consider more aggressive context filtering to improve token efficiency'
594
+ );
595
+ }
596
+
597
+ if (analysis.averageCompletionTime > 300000) { // 5 minutes
598
+ insights.recommendations.push(
599
+ 'Tasks are taking longer than expected. Review task complexity or persona fit'
600
+ );
601
+ }
602
+
603
+ // Add best practices based on persona
604
+ const persona = this.availablePersonas[personaName];
605
+ if (persona) {
606
+ insights.bestPractices = this.generateBestPractices(persona, analysis);
607
+ }
608
+
609
+ return insights;
610
+ }
611
+
612
+ /**
613
+ * Calculate persona effectiveness
614
+ */
615
+ calculateEffectiveness(analysis) {
616
+ const weights = {
617
+ completionTime: 0.3,
618
+ qualityScore: 0.4,
619
+ tokenEfficiency: 0.3
620
+ };
621
+
622
+ let score = 0;
623
+
624
+ // Normalize completion time (lower is better)
625
+ const timeScore = Math.max(0, 1 - (analysis.averageCompletionTime / 600000));
626
+ score += timeScore * weights.completionTime;
627
+
628
+ // Quality score (already normalized)
629
+ score += (analysis.averageQualityScore || 0.5) * weights.qualityScore;
630
+
631
+ // Token efficiency (already normalized)
632
+ score += (analysis.tokenEfficiency || 0.5) * weights.tokenEfficiency;
633
+
634
+ return {
635
+ score,
636
+ rating: score > 0.8 ? 'excellent' :
637
+ score > 0.6 ? 'good' :
638
+ score > 0.4 ? 'fair' : 'needs improvement'
639
+ };
640
+ }
641
+
642
+ /**
643
+ * Generate best practices for a persona
644
+ */
645
+ generateBestPractices(persona, analysis) {
646
+ const practices = [];
647
+
648
+ // General best practices
649
+ practices.push(`Use ${persona.name} persona for ${persona.focusAreas.join(', ')}`);
650
+ practices.push(`Recommended tools: ${persona.recommendedTools.join(', ')}`);
651
+
652
+ // Specific recommendations based on analysis
653
+ if (analysis.bestUseCases?.length) {
654
+ practices.push(`Most effective for: ${analysis.bestUseCases.join(', ')}`);
655
+ }
656
+
657
+ return practices;
658
+ }
659
+
660
+ /**
661
+ * Check if pattern matches file path
662
+ */
663
+ matchesPattern(filePath, pattern) {
664
+ // Convert glob pattern to regex
665
+ const regex = pattern
666
+ .replace(/\*\*/g, '.*')
667
+ .replace(/\*/g, '[^/]*')
668
+ .replace(/\?/g, '.');
669
+
670
+ return new RegExp(`^${regex}$`).test(filePath);
671
+ }
672
+
673
+ /**
674
+ * Reset persona system
675
+ */
676
+ async reset() {
677
+ this.currentPersona = null;
678
+ this.personaHistory = [];
679
+ this.personaCache.clear();
680
+ this.lastSwitchTime = null;
681
+
682
+ if (this.options.metricsEnabled) {
683
+ await this.metricsCollector.reset();
684
+ }
685
+
686
+ await this.contextEngine.reset();
687
+
688
+ // Set default persona
689
+ await this.switchPersona('developer', { silent: true });
690
+
691
+ this.emit('reset');
692
+ }
693
+
694
+ /**
695
+ * Cleanup resources
696
+ */
697
+ async cleanup() {
698
+ this.personaCache.clear();
699
+
700
+ if (this.options.metricsEnabled) {
701
+ await this.metricsCollector.cleanup();
702
+ }
703
+
704
+ await this.contextEngine.cleanup();
705
+
706
+ this.removeAllListeners();
707
+ }
708
+ }
709
+
710
+ export default AIPersonaManager;
711
+ export { AIPersonaManager };