aiwf 0.3.22 → 0.4.0

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 (456) hide show
  1. package/.claude-plugin/marketplace.json +146 -0
  2. package/CHANGELOG.md +49 -1
  3. package/README.ko.md +118 -309
  4. package/README.md +68 -254
  5. package/docs/modernization/BROWNFIELD-GREENFIELD.ko.md +105 -0
  6. package/docs/modernization/CLAUDE-PLAN-REVIEW-2026-10-03.ko.md +77 -0
  7. package/docs/modernization/CLI-PRODUCTIVITY-REVIEWED-2026-10-03.ko.md +177 -0
  8. package/docs/modernization/CLI-PRODUCTIVITY.ko.md +193 -0
  9. package/docs/modernization/CORE-PACKAGE-PLAN.md +7 -0
  10. package/docs/modernization/DEEP-REVERSE-ENGINEERING.ko.md +88 -0
  11. package/docs/modernization/DELEGATION-OPTIONAL.ko.md +57 -0
  12. package/docs/modernization/DIRECTION.ko.md +56 -0
  13. package/docs/modernization/FULL-TEST-2026-10-03.md +49 -0
  14. package/docs/modernization/LEGACY-REMOVAL-PLAN.md +9 -0
  15. package/docs/modernization/PILOT-RESULT-2026-10-03.ko.md +85 -0
  16. package/docs/modernization/PILOT-UC-001.ko.md +79 -0
  17. package/docs/modernization/PLAN.md +28 -0
  18. package/docs/modernization/SKILLS.ko.md +105 -0
  19. package/docs/modernization/SPRINTABLE.ko.md +47 -0
  20. package/docs/modernization/SYNC-DOCS-VALIDATION-2026-10-04.ko.md +38 -0
  21. package/docs/modernization/VALIDATION.md +79 -0
  22. package/docs/modernization/evidence/example-review-packet.json +115 -0
  23. package/docs/modernization/evidence/example-spec-pin.json +48 -0
  24. package/docs/modernization/evidence/full-test-20261003/claude-lint.md +22 -0
  25. package/docs/modernization/evidence/full-test-20261003/claude-review-retry.md +56 -0
  26. package/docs/modernization/evidence/full-test-20261003/codex-review-packet.json +159 -0
  27. package/docs/modernization/evidence/full-test-20261003/src/expense.mjs +40 -0
  28. package/docs/modernization/evidence/full-test-20261003/summary.json +106 -0
  29. package/docs/modernization/evidence/full-test-20261003/tests/expense.test.mjs +61 -0
  30. package/docs/modernization/evidence/local-pilot-20261003/README.ko.md +40 -0
  31. package/docs/modernization/evidence/local-pilot-20261003/execution.json +1055 -0
  32. package/docs/modernization/evidence/local-pilot-20261003/maintenance/dependencies.json +24 -0
  33. package/docs/modernization/evidence/local-pilot-20261003/maintenance/dependencies.stderr.txt +0 -0
  34. package/docs/modernization/evidence/local-pilot-20261003/maintenance/dependencies.stdout.txt +5 -0
  35. package/docs/modernization/evidence/local-pilot-20261003/maintenance/docs.json +24 -0
  36. package/docs/modernization/evidence/local-pilot-20261003/maintenance/docs.stderr.txt +0 -0
  37. package/docs/modernization/evidence/local-pilot-20261003/maintenance/docs.stdout.txt +6 -0
  38. package/docs/modernization/evidence/local-pilot-20261003/maintenance/example.json +24 -0
  39. package/docs/modernization/evidence/local-pilot-20261003/maintenance/example.stderr.txt +0 -0
  40. package/docs/modernization/evidence/local-pilot-20261003/maintenance/example.stdout.txt +5 -0
  41. package/docs/modernization/evidence/local-pilot-20261003/maintenance/local-docs.json +24 -0
  42. package/docs/modernization/evidence/local-pilot-20261003/maintenance/local-docs.stderr.txt +0 -0
  43. package/docs/modernization/evidence/local-pilot-20261003/maintenance/local-docs.stdout.txt +6 -0
  44. package/docs/modernization/evidence/local-pilot-20261003/maintenance/node.json +23 -0
  45. package/docs/modernization/evidence/local-pilot-20261003/maintenance/node.stderr.txt +0 -0
  46. package/docs/modernization/evidence/local-pilot-20261003/maintenance/node.stdout.txt +535 -0
  47. package/docs/modernization/evidence/local-pilot-20261003/maintenance/provenance.json +24 -0
  48. package/docs/modernization/evidence/local-pilot-20261003/maintenance/provenance.stderr.txt +0 -0
  49. package/docs/modernization/evidence/local-pilot-20261003/maintenance/provenance.stdout.txt +5 -0
  50. package/docs/modernization/evidence/local-pilot-20261003/maintenance/readme-replay.json +24 -0
  51. package/docs/modernization/evidence/local-pilot-20261003/maintenance/readme-replay.stderr.txt +0 -0
  52. package/docs/modernization/evidence/local-pilot-20261003/maintenance/readme-replay.stdout.txt +273 -0
  53. package/docs/modernization/evidence/local-pilot-20261003/maintenance/upstream.json +24 -0
  54. package/docs/modernization/evidence/local-pilot-20261003/maintenance/upstream.stderr.txt +0 -0
  55. package/docs/modernization/evidence/local-pilot-20261003/maintenance/upstream.stdout.txt +7 -0
  56. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/archive-service.stderr.txt +0 -0
  57. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/archive-service.stdout.txt +148 -0
  58. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/archive-structure.stderr.txt +0 -0
  59. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/archive-structure.stdout.txt +9 -0
  60. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-check.stderr.txt +0 -0
  61. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-check.stdout.txt +67 -0
  62. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-evidence.json +34 -0
  63. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-packet.json +128 -0
  64. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-packet.stderr.txt +0 -0
  65. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-packet.stdout.txt +128 -0
  66. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-pin.json +54 -0
  67. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-pin.stderr.txt +0 -0
  68. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-pin.stdout.txt +60 -0
  69. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-readback.json +15 -0
  70. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-service.stderr.txt +0 -0
  71. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-service.stdout.txt +82 -0
  72. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-structure.stderr.txt +0 -0
  73. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-structure.stdout.txt +9 -0
  74. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/changed-check.stderr.txt +0 -0
  75. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/changed-check.stdout.txt +79 -0
  76. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/changed-packet-refused.stderr.txt +0 -0
  77. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/changed-packet-refused.stdout.txt +7 -0
  78. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/changed-pin-refresh.stderr.txt +0 -0
  79. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/changed-pin-refresh.stdout.txt +66 -0
  80. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/changed-pin.json +60 -0
  81. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/changed-structure.stderr.txt +0 -0
  82. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/changed-structure.stdout.txt +9 -0
  83. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-check.stderr.txt +0 -0
  84. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-check.stdout.txt +73 -0
  85. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-evidence.json +34 -0
  86. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-packet.json +134 -0
  87. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-packet.stderr.txt +0 -0
  88. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-packet.stdout.txt +134 -0
  89. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-readback.json +15 -0
  90. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-service.stderr.txt +0 -0
  91. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-service.stdout.txt +148 -0
  92. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-structure.stderr.txt +0 -0
  93. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-structure.stdout.txt +9 -0
  94. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/node-version.stderr.txt +0 -0
  95. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/node-version.stdout.txt +1 -0
  96. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/python-version.stderr.txt +0 -0
  97. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/python-version.stdout.txt +1 -0
  98. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/red-evidence.json +34 -0
  99. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/red-packet.json +134 -0
  100. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/red-packet.stderr.txt +0 -0
  101. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/red-packet.stdout.txt +134 -0
  102. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/red-readback.json +15 -0
  103. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/red-service.stderr.txt +0 -0
  104. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/red-service.stdout.txt +266 -0
  105. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/red-structure.stderr.txt +0 -0
  106. package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/red-structure.stdout.txt +9 -0
  107. package/docs/modernization/evidence/local-pilot-20261003/project/docs/entity_model.md +33 -0
  108. package/docs/modernization/evidence/local-pilot-20261003/project/docs/glossary.md +9 -0
  109. package/docs/modernization/evidence/local-pilot-20261003/project/docs/plans/UC-001.md +20 -0
  110. package/docs/modernization/evidence/local-pilot-20261003/project/docs/requirements.md +10 -0
  111. package/docs/modernization/evidence/local-pilot-20261003/project/docs/test_cases/TC-001-submit-expense.md +37 -0
  112. package/docs/modernization/evidence/local-pilot-20261003/project/docs/test_cases/TC-002-description-limit.md +42 -0
  113. package/docs/modernization/evidence/local-pilot-20261003/project/docs/use_cases/UC-001-submit-expense.md +76 -0
  114. package/docs/modernization/evidence/local-pilot-20261003/project/docs/use_cases.puml +12 -0
  115. package/docs/modernization/evidence/local-pilot-20261003/project/docs/vision.md +21 -0
  116. package/docs/modernization/evidence/local-pilot-20261003/project/src/expense.mjs +48 -0
  117. package/docs/modernization/evidence/local-pilot-20261003/project/tests/expense.test.mjs +116 -0
  118. package/docs/modernization/evidence/local-pilot-20261003/scope.json +31 -0
  119. package/docs/modernization/reviews/2026-10-03-claude-cli/CONTRACTS.ko.md +122 -0
  120. package/docs/modernization/reviews/2026-10-03-claude-cli/DIRECTION.ko.md +84 -0
  121. package/examples/spec-workflow/README.md +54 -0
  122. package/examples/spec-workflow/docs/entity_model.md +33 -0
  123. package/examples/spec-workflow/docs/glossary.md +9 -0
  124. package/examples/spec-workflow/docs/requirements.md +10 -0
  125. package/examples/spec-workflow/docs/test_cases/TC-001-submit-expense.md +37 -0
  126. package/examples/spec-workflow/docs/use_cases/UC-001-submit-expense.md +63 -0
  127. package/examples/spec-workflow/docs/use_cases.puml +12 -0
  128. package/examples/spec-workflow/docs/vision.md +21 -0
  129. package/package.json +37 -104
  130. package/plugins/aiwf-angular-jpa/.claude-plugin/plugin.json +11 -0
  131. package/plugins/aiwf-angular-jpa/LICENSE +201 -0
  132. package/plugins/aiwf-angular-jpa/NOTICE +16 -0
  133. package/plugins/aiwf-angular-jpa/README.md +54 -0
  134. package/plugins/aiwf-angular-jpa/UPSTREAM.json +35 -0
  135. package/plugins/aiwf-angular-jpa/agents/uc-coverage.md +263 -0
  136. package/plugins/aiwf-angular-jpa/rules/mcp-servers.md +64 -0
  137. package/plugins/aiwf-angular-jpa/skills/coverage-check/SKILL.md +190 -0
  138. package/plugins/aiwf-angular-jpa/skills/flyway-migration/SKILL.md +119 -0
  139. package/plugins/aiwf-angular-jpa/skills/implement/SKILL.md +528 -0
  140. package/plugins/aiwf-angular-jpa/skills/implement/references/module-layout.md +95 -0
  141. package/plugins/aiwf-angular-jpa/skills/playwright-test/SKILL.md +360 -0
  142. package/plugins/aiwf-angular-jpa/skills/spring-boot-test/SKILL.md +504 -0
  143. package/plugins/aiwf-angular-jpa/skills/vitest-test/SKILL.md +309 -0
  144. package/plugins/aiwf-blazor-dotnet/.claude-plugin/plugin.json +11 -0
  145. package/plugins/aiwf-blazor-dotnet/LICENSE +201 -0
  146. package/plugins/aiwf-blazor-dotnet/NOTICE +16 -0
  147. package/plugins/aiwf-blazor-dotnet/README.md +53 -0
  148. package/plugins/aiwf-blazor-dotnet/UPSTREAM.json +31 -0
  149. package/plugins/aiwf-blazor-dotnet/rules/mcp-servers.md +25 -0
  150. package/plugins/aiwf-blazor-dotnet/skills/bunit-test/SKILL.md +110 -0
  151. package/plugins/aiwf-blazor-dotnet/skills/dotnet-test/SKILL.md +108 -0
  152. package/plugins/aiwf-blazor-dotnet/skills/ef-migration/SKILL.md +43 -0
  153. package/plugins/aiwf-blazor-dotnet/skills/implement/SKILL.md +149 -0
  154. package/plugins/aiwf-blazor-dotnet/skills/playwright-test/SKILL.md +130 -0
  155. package/plugins/aiwf-core/.claude-plugin/plugin.json +11 -0
  156. package/plugins/aiwf-core/LICENSE +201 -0
  157. package/plugins/aiwf-core/NOTICE +20 -0
  158. package/plugins/aiwf-core/README.md +38 -0
  159. package/plugins/aiwf-core/UPSTREAM.json +50 -0
  160. package/plugins/aiwf-core/skills/entity-model/SKILL.md +160 -0
  161. package/plugins/aiwf-core/skills/entity-model/references/REFERENCE.md +36 -0
  162. package/plugins/aiwf-core/skills/requirements/SKILL.md +157 -0
  163. package/plugins/aiwf-core/skills/requirements/references/REFERENCE.md +70 -0
  164. package/plugins/aiwf-core/skills/requirements/references/glossary.md +7 -0
  165. package/plugins/aiwf-core/skills/reverse-engineer/SKILL.md +509 -0
  166. package/plugins/aiwf-core/skills/reverse-engineer/references/stack-signals.md +210 -0
  167. package/plugins/aiwf-core/skills/spec-review/SKILL.md +197 -0
  168. package/plugins/aiwf-core/skills/spec-review/references/lint-codes.md +63 -0
  169. package/plugins/aiwf-core/skills/spec-review/references/review-checklist.md +189 -0
  170. package/plugins/aiwf-core/skills/spec-review/scripts/spec_lint.py +1216 -0
  171. package/plugins/aiwf-core/skills/test-case/SKILL.md +138 -0
  172. package/plugins/aiwf-core/skills/test-case/references/example-process.bpmn +118 -0
  173. package/plugins/aiwf-core/skills/test-case/references/example.md +38 -0
  174. package/plugins/aiwf-core/skills/test-case/references/test-case.md +35 -0
  175. package/plugins/aiwf-core/skills/test-case/scripts/bpmn_paths.py +542 -0
  176. package/plugins/aiwf-core/skills/use-case-diagram/SKILL.md +99 -0
  177. package/plugins/aiwf-core/skills/use-case-spec/SKILL.md +257 -0
  178. package/plugins/aiwf-core/skills/use-case-spec/references/clarify-checklist.md +70 -0
  179. package/plugins/aiwf-core/skills/use-case-spec/references/example.md +88 -0
  180. package/plugins/aiwf-core/skills/use-case-spec/references/format-spec.md +246 -0
  181. package/plugins/aiwf-core/skills/use-case-spec/references/use-case.md +50 -0
  182. package/plugins/aiwf-core/skills/use-case-spec/scripts/validate_use_case.py +941 -0
  183. package/plugins/aiwf-delegate-claude/.claude-plugin/plugin.json +9 -0
  184. package/{src/lib/resources/templates/npm-library/template → plugins/aiwf-delegate-claude}/LICENSE +2 -2
  185. package/plugins/aiwf-delegate-claude/NOTICE +4 -0
  186. package/plugins/aiwf-delegate-claude/README.md +10 -0
  187. package/plugins/aiwf-delegate-claude/plugin.json +13 -0
  188. package/plugins/aiwf-delegate-claude/skills/delegate-claude/LICENSE +21 -0
  189. package/plugins/aiwf-delegate-claude/skills/delegate-claude/NOTICE +4 -0
  190. package/plugins/aiwf-delegate-claude/skills/delegate-claude/SKILL.md +49 -0
  191. package/plugins/aiwf-delegate-claude/skills/delegate-claude/agents/openai.yaml +2 -0
  192. package/plugins/aiwf-delegate-codex/.claude-plugin/plugin.json +9 -0
  193. package/plugins/aiwf-delegate-codex/LICENSE +21 -0
  194. package/plugins/aiwf-delegate-codex/NOTICE +4 -0
  195. package/plugins/aiwf-delegate-codex/README.md +10 -0
  196. package/plugins/aiwf-delegate-codex/plugin.json +13 -0
  197. package/plugins/aiwf-delegate-codex/skills/delegate-codex/LICENSE +21 -0
  198. package/plugins/aiwf-delegate-codex/skills/delegate-codex/NOTICE +4 -0
  199. package/plugins/aiwf-delegate-codex/skills/delegate-codex/SKILL.md +47 -0
  200. package/plugins/aiwf-delegate-codex/skills/delegate-codex/agents/openai.yaml +2 -0
  201. package/plugins/aiwf-nestjs-nextjs/.claude-plugin/plugin.json +11 -0
  202. package/plugins/aiwf-nestjs-nextjs/LICENSE +201 -0
  203. package/plugins/aiwf-nestjs-nextjs/NOTICE +16 -0
  204. package/plugins/aiwf-nestjs-nextjs/README.md +53 -0
  205. package/plugins/aiwf-nestjs-nextjs/UPSTREAM.json +32 -0
  206. package/plugins/aiwf-nestjs-nextjs/rules/mcp-servers.md +59 -0
  207. package/plugins/aiwf-nestjs-nextjs/skills/drizzle-migration/SKILL.md +222 -0
  208. package/plugins/aiwf-nestjs-nextjs/skills/implement/SKILL.md +393 -0
  209. package/plugins/aiwf-nestjs-nextjs/skills/implement/references/project-layout.md +158 -0
  210. package/plugins/aiwf-nestjs-nextjs/skills/nest-test/SKILL.md +300 -0
  211. package/plugins/aiwf-nestjs-nextjs/skills/playwright-test/SKILL.md +245 -0
  212. package/plugins/aiwf-nestjs-nextjs/skills/react-test/SKILL.md +217 -0
  213. package/plugins/aiwf-spec/.claude-plugin/plugin.json +9 -0
  214. package/plugins/aiwf-spec/LICENSE +201 -0
  215. package/plugins/aiwf-spec/NOTICE +20 -0
  216. package/plugins/aiwf-spec/README.md +36 -0
  217. package/plugins/aiwf-spec/skills/sync-docs/SKILL.md +47 -0
  218. package/plugins/aiwf-spec/skills/workflow/SKILL.md +42 -0
  219. package/plugins/aiwf-vaadin-jooq/.claude-plugin/plugin.json +11 -0
  220. package/plugins/aiwf-vaadin-jooq/LICENSE +201 -0
  221. package/plugins/aiwf-vaadin-jooq/NOTICE +16 -0
  222. package/plugins/aiwf-vaadin-jooq/README.md +56 -0
  223. package/plugins/aiwf-vaadin-jooq/UPSTREAM.json +43 -0
  224. package/plugins/aiwf-vaadin-jooq/agents/uc-coverage.md +260 -0
  225. package/plugins/aiwf-vaadin-jooq/rules/mcp-servers.md +44 -0
  226. package/plugins/aiwf-vaadin-jooq/skills/browserless-test/SKILL.md +407 -0
  227. package/plugins/aiwf-vaadin-jooq/skills/browserless-test/references/UC001ManagePersonsTest.java +111 -0
  228. package/plugins/aiwf-vaadin-jooq/skills/coverage-check/SKILL.md +190 -0
  229. package/plugins/aiwf-vaadin-jooq/skills/flyway-migration/SKILL.md +70 -0
  230. package/plugins/aiwf-vaadin-jooq/skills/hilla-test/SKILL.md +350 -0
  231. package/plugins/aiwf-vaadin-jooq/skills/hilla-test/references/UC001ManagePersonsServiceTest.java +81 -0
  232. package/plugins/aiwf-vaadin-jooq/skills/hilla-test/references/UC001ManagePersonsViewTest.tsx +87 -0
  233. package/plugins/aiwf-vaadin-jooq/skills/implement/SKILL.md +196 -0
  234. package/plugins/aiwf-vaadin-jooq/skills/implement-hilla/SKILL.md +216 -0
  235. package/plugins/aiwf-vaadin-jooq/skills/karibu-test/SKILL.md +298 -0
  236. package/plugins/aiwf-vaadin-jooq/skills/karibu-test/references/UC001ManagePersonsTest.java +93 -0
  237. package/plugins/aiwf-vaadin-jooq/skills/playwright-test/SKILL.md +237 -0
  238. package/plugins/aiwf-vaadin-jooq/skills/playwright-test/references/ExampleViewIT.java +143 -0
  239. package/plugins/aiwf-vaadin-jooq/skills/playwright-test/references/TC001CustomerOnboardingIT.java +144 -0
  240. package/plugins/aiwf-vaadin-jooq/skills/playwright-test/references/dramafinder-api.md +190 -0
  241. package/scripts/check-dependencies.js +26 -96
  242. package/scripts/install-spec-skills.mjs +126 -0
  243. package/scripts/validate-spec-plugin.mjs +145 -0
  244. package/src/cli/spec-cli.js +292 -0
  245. package/src/lib/spec-workflow.js +982 -0
  246. package/docs/ADR_MANAGEMENT_GUIDE.ko.md +0 -602
  247. package/docs/ADR_MANAGEMENT_GUIDE.md +0 -602
  248. package/docs/AI-WORKFLOW.ko.md +0 -299
  249. package/docs/AI-WORKFLOW.md +0 -401
  250. package/docs/API_REFERENCE_FULL.ko.md +0 -1135
  251. package/docs/API_REFERENCE_FULL.md +0 -1135
  252. package/docs/ARCHITECTURE.ko.md +0 -314
  253. package/docs/ARCHITECTURE.md +0 -314
  254. package/docs/CLI_USAGE_GUIDE.ko.md +0 -634
  255. package/docs/CLI_USAGE_GUIDE.md +0 -640
  256. package/docs/CODE_CLEANUP_GUIDE.ko.md +0 -415
  257. package/docs/CODE_CLEANUP_GUIDE.md +0 -415
  258. package/docs/COMMANDS_GUIDE.ko.md +0 -1037
  259. package/docs/COMMANDS_GUIDE.md +0 -1037
  260. package/docs/CONTRIBUTING.ko.md +0 -408
  261. package/docs/CONTRIBUTING.md +0 -408
  262. package/docs/DEVELOPMENT_GUIDE.ko.md +0 -440
  263. package/docs/DEVELOPMENT_GUIDE.md +0 -727
  264. package/docs/EXAMPLES.ko.md +0 -695
  265. package/docs/EXAMPLES.md +0 -693
  266. package/docs/GETTING_STARTED.ko.md +0 -219
  267. package/docs/GETTING_STARTED.md +0 -476
  268. package/docs/MODULE_MANAGEMENT_GUIDE.ko.md +0 -289
  269. package/docs/MODULE_MANAGEMENT_GUIDE.md +0 -289
  270. package/docs/PERFORMANCE_ARCHITECTURE.md +0 -494
  271. package/docs/PERFORMANCE_GUIDELINES.ko.md +0 -388
  272. package/docs/PERFORMANCE_GUIDELINES.md +0 -553
  273. package/docs/PRD.ko.md +0 -148
  274. package/docs/PRD.md +0 -150
  275. package/docs/ROADMAP_v0.4.0.md +0 -286
  276. package/docs/STATE_MANAGEMENT_GUIDE.ko.md +0 -278
  277. package/docs/STATE_MANAGEMENT_GUIDE.md +0 -278
  278. package/docs/TROUBLESHOOTING.ko.md +0 -366
  279. package/docs/TROUBLESHOOTING.md +0 -722
  280. package/docs/VALIDATOR_API.ko.md +0 -324
  281. package/docs/VALIDATOR_API.md +0 -324
  282. package/docs/YOLO_SYSTEM_GUIDE.ko.md +0 -542
  283. package/docs/YOLO_SYSTEM_GUIDE.md +0 -542
  284. package/docs/designs/AI_PERSONA_SYSTEM_DESIGN.md +0 -516
  285. package/docs/designs/API_DOCUMENTATION.md +0 -932
  286. package/docs/designs/API_REFERENCE.md +0 -979
  287. package/docs/designs/Enhanced_Installation_Flow_Design.md +0 -498
  288. package/docs/designs/aiwf-metadata-system-prd.md +0 -127
  289. package/docs/designs/offline-template-cache.md +0 -323
  290. package/docs/designs/persona-aware-compression.md +0 -168
  291. package/docs/guides/ai-personas-guide-ko.md +0 -239
  292. package/docs/guides/ai-personas-guide.md +0 -239
  293. package/docs/guides/checkpoint-system-guide-ko.md +0 -356
  294. package/docs/guides/checkpoint-system-guide.md +0 -356
  295. package/docs/guides/context-compression-guide-ko.md +0 -313
  296. package/docs/guides/context-compression-guide.md +0 -313
  297. package/docs/guides/independent-sprint-guide-ko.md +0 -321
  298. package/docs/guides/independent-sprint-guide.md +0 -321
  299. package/rules/global/aiwf-code-style-guide.md +0 -30
  300. package/rules/global/aiwf-coding-principles.md +0 -33
  301. package/rules/global/aiwf-development-process.md +0 -41
  302. package/rules/global/aiwf-global-rules.md +0 -84
  303. package/rules/manual/aiwf-generate-plan-docs.md +0 -280
  304. package/scripts/run-integration-tests.js +0 -317
  305. package/scripts/update-file-lists.js +0 -267
  306. package/scripts/validate-commands.js +0 -254
  307. package/src/DEPENDENCY_MAP.md +0 -90
  308. package/src/cli/cache-cli.js +0 -459
  309. package/src/cli/checkpoint-cli.js +0 -417
  310. package/src/cli/index.js +0 -481
  311. package/src/cli/language-cli.js +0 -286
  312. package/src/cli/sprint-cli.js +0 -287
  313. package/src/commands/ai-tool.js +0 -383
  314. package/src/commands/compress.js +0 -60
  315. package/src/commands/create-project.js +0 -160
  316. package/src/commands/evaluate.js +0 -459
  317. package/src/commands/persona.js +0 -309
  318. package/src/commands/sprint-independent.js +0 -393
  319. package/src/commands/sprint-task.js +0 -262
  320. package/src/commands/state.js +0 -1164
  321. package/src/commands/token.js +0 -312
  322. package/src/commands/yolo-config.js +0 -502
  323. package/src/config/file-lists.js +0 -147
  324. package/src/config/yolo-config-template.yaml +0 -168
  325. package/src/lib/ai-persona-manager.js +0 -711
  326. package/src/lib/backup-manager.js +0 -271
  327. package/src/lib/cache-system.js +0 -332
  328. package/src/lib/context-engine.js +0 -568
  329. package/src/lib/file-downloader.js +0 -304
  330. package/src/lib/github-integration.js +0 -402
  331. package/src/lib/installer.js +0 -1066
  332. package/src/lib/memory-profiler.js +0 -471
  333. package/src/lib/metrics-collector.js +0 -885
  334. package/src/lib/offline-detector.js +0 -386
  335. package/src/lib/resource-loader-enhanced.js +0 -399
  336. package/src/lib/resource-loader.js +0 -250
  337. package/src/lib/resources/commands/ai-persona.js +0 -602
  338. package/src/lib/resources/commands/compress-context.js +0 -389
  339. package/src/lib/resources/commands/evaluate.js +0 -246
  340. package/src/lib/resources/commands/persona-context-apply.js +0 -562
  341. package/src/lib/resources/commands/token-tracking.js +0 -443
  342. package/src/lib/resources/config/commit-patterns.js +0 -103
  343. package/src/lib/resources/config/language.json +0 -6
  344. package/src/lib/resources/personas/PERSONA_INDEX.md +0 -57
  345. package/src/lib/resources/personas/analyst.json +0 -44
  346. package/src/lib/resources/personas/architect/best_practices.md +0 -136
  347. package/src/lib/resources/personas/architect/knowledge_base.md +0 -377
  348. package/src/lib/resources/personas/architect.json +0 -44
  349. package/src/lib/resources/personas/backend/best_practices.md +0 -766
  350. package/src/lib/resources/personas/backend/knowledge_base.md +0 -1070
  351. package/src/lib/resources/personas/data_analyst/best_practices.md +0 -594
  352. package/src/lib/resources/personas/data_analyst/knowledge_base.md +0 -1057
  353. package/src/lib/resources/personas/developer.json +0 -44
  354. package/src/lib/resources/personas/developer.md +0 -37
  355. package/src/lib/resources/personas/evaluation_criteria.json +0 -137
  356. package/src/lib/resources/personas/frontend/best_practices.md +0 -445
  357. package/src/lib/resources/personas/frontend/knowledge_base.md +0 -729
  358. package/src/lib/resources/personas/persona-index.json +0 -31
  359. package/src/lib/resources/personas/reviewer.json +0 -44
  360. package/src/lib/resources/personas/security/best_practices.md +0 -307
  361. package/src/lib/resources/personas/security/knowledge_base.md +0 -498
  362. package/src/lib/resources/personas/tester.json +0 -44
  363. package/src/lib/resources/templates/README.md +0 -78
  364. package/src/lib/resources/templates/api-server/config.json +0 -64
  365. package/src/lib/resources/templates/api-server/template/.aiwf/config.json +0 -56
  366. package/src/lib/resources/templates/api-server/template/.aiwf/feature-ledger.json +0 -42
  367. package/src/lib/resources/templates/api-server/template/.aiwf/personas/backend-engineer.json +0 -40
  368. package/src/lib/resources/templates/api-server/template/.aiwf/scripts/cli.js +0 -111
  369. package/src/lib/resources/templates/api-server/template/.env.example +0 -29
  370. package/src/lib/resources/templates/api-server/template/.eslintrc.json +0 -23
  371. package/src/lib/resources/templates/api-server/template/README.md +0 -171
  372. package/src/lib/resources/templates/api-server/template/jest.config.js +0 -26
  373. package/src/lib/resources/templates/api-server/template/nodemon.json +0 -9
  374. package/src/lib/resources/templates/api-server/template/package.json +0 -61
  375. package/src/lib/resources/templates/api-server/template/src/app.ts +0 -60
  376. package/src/lib/resources/templates/api-server/template/src/config/swagger.ts +0 -38
  377. package/src/lib/resources/templates/api-server/template/src/controllers/aiwfController.ts +0 -54
  378. package/src/lib/resources/templates/api-server/template/src/controllers/authController.ts +0 -128
  379. package/src/lib/resources/templates/api-server/template/src/controllers/statusController.ts +0 -28
  380. package/src/lib/resources/templates/api-server/template/src/index.ts +0 -28
  381. package/src/lib/resources/templates/api-server/template/src/middleware/aiwfMiddleware.ts +0 -50
  382. package/src/lib/resources/templates/api-server/template/src/middleware/authMiddleware.ts +0 -41
  383. package/src/lib/resources/templates/api-server/template/src/middleware/errorHandler.ts +0 -42
  384. package/src/lib/resources/templates/api-server/template/src/middleware/notFoundHandler.ts +0 -14
  385. package/src/lib/resources/templates/api-server/template/src/middleware/requestLogger.ts +0 -20
  386. package/src/lib/resources/templates/api-server/template/src/routes/aiwf.ts +0 -31
  387. package/src/lib/resources/templates/api-server/template/src/routes/index.ts +0 -13
  388. package/src/lib/resources/templates/api-server/template/src/routes/v1/index.ts +0 -67
  389. package/src/lib/resources/templates/api-server/template/src/utils/logger.ts +0 -37
  390. package/src/lib/resources/templates/api-server/template/tests/app.test.ts +0 -40
  391. package/src/lib/resources/templates/api-server/template/tsconfig.json +0 -43
  392. package/src/lib/resources/templates/npm-library/config.json +0 -61
  393. package/src/lib/resources/templates/npm-library/template/README.md +0 -201
  394. package/src/lib/resources/templates/npm-library/template/package.json +0 -78
  395. package/src/lib/resources/templates/web-app/config.json +0 -53
  396. package/src/lib/resources/templates/web-app/template/.aiwf/config.json +0 -54
  397. package/src/lib/resources/templates/web-app/template/.aiwf/feature-ledger.json +0 -37
  398. package/src/lib/resources/templates/web-app/template/.aiwf/personas/fullstack-developer.json +0 -40
  399. package/src/lib/resources/templates/web-app/template/.aiwf/scripts/cli.js +0 -110
  400. package/src/lib/resources/templates/web-app/template/.eslintrc.cjs +0 -20
  401. package/src/lib/resources/templates/web-app/template/README.md +0 -151
  402. package/src/lib/resources/templates/web-app/template/index.html +0 -14
  403. package/src/lib/resources/templates/web-app/template/package.json +0 -44
  404. package/src/lib/resources/templates/web-app/template/postcss.config.js +0 -6
  405. package/src/lib/resources/templates/web-app/template/public/vite.svg +0 -1
  406. package/src/lib/resources/templates/web-app/template/src/App.tsx +0 -21
  407. package/src/lib/resources/templates/web-app/template/src/components/Layout.tsx +0 -57
  408. package/src/lib/resources/templates/web-app/template/src/components/aiwf/ContextStatus.tsx +0 -107
  409. package/src/lib/resources/templates/web-app/template/src/components/aiwf/TokenUsage.tsx +0 -71
  410. package/src/lib/resources/templates/web-app/template/src/index.css +0 -60
  411. package/src/lib/resources/templates/web-app/template/src/main.tsx +0 -10
  412. package/src/lib/resources/templates/web-app/template/src/pages/AiwfDashboard.tsx +0 -57
  413. package/src/lib/resources/templates/web-app/template/src/pages/HomePage.tsx +0 -89
  414. package/src/lib/resources/templates/web-app/template/src/pages/NotFound.tsx +0 -25
  415. package/src/lib/resources/templates/web-app/template/src/stores/aiwfStore.ts +0 -126
  416. package/src/lib/resources/templates/web-app/template/src/types/global.d.ts +0 -9
  417. package/src/lib/resources/templates/web-app/template/src/vite-env.d.ts +0 -1
  418. package/src/lib/resources/templates/web-app/template/tailwind.config.js +0 -30
  419. package/src/lib/resources/templates/web-app/template/tsconfig.json +0 -37
  420. package/src/lib/resources/templates/web-app/template/tsconfig.node.json +0 -10
  421. package/src/lib/resources/templates/web-app/template/vite.config.ts +0 -23
  422. package/src/lib/resources/utils/background-monitor.js +0 -223
  423. package/src/lib/resources/utils/compression-metrics.js +0 -1031
  424. package/src/lib/resources/utils/compression-strategies.js +0 -557
  425. package/src/lib/resources/utils/content-normalizer.js +0 -455
  426. package/src/lib/resources/utils/context-compressor.js +0 -583
  427. package/src/lib/resources/utils/context-rule-parser.js +0 -180
  428. package/src/lib/resources/utils/context-token-monitor.js +0 -463
  429. package/src/lib/resources/utils/context-update-manager.js +0 -502
  430. package/src/lib/resources/utils/git-utils.js +0 -220
  431. package/src/lib/resources/utils/importance-classifier.js +0 -645
  432. package/src/lib/resources/utils/information-filter.js +0 -710
  433. package/src/lib/resources/utils/persona-aware-compressor.js +0 -598
  434. package/src/lib/resources/utils/prompt-injector.js +0 -242
  435. package/src/lib/resources/utils/simplified-evaluator.js +0 -119
  436. package/src/lib/resources/utils/text-summarizer.js +0 -492
  437. package/src/lib/resources/utils/token-counter.js +0 -177
  438. package/src/lib/resources/utils/token-monitor.js +0 -484
  439. package/src/lib/resources/utils/token-reporter.js +0 -452
  440. package/src/lib/resources/utils/token-storage.js +0 -433
  441. package/src/lib/resources/utils/token-tracker.js +0 -283
  442. package/src/lib/rollback-manager.js +0 -418
  443. package/src/lib/state/priority-calculator.js +0 -217
  444. package/src/lib/state/state-index.js +0 -155
  445. package/src/lib/state/task-scanner.js +0 -328
  446. package/src/lib/task-analyzer.js +0 -599
  447. package/src/lib/template-cache-system.js +0 -559
  448. package/src/lib/template-downloader.js +0 -467
  449. package/src/lib/template-version-manager.js +0 -491
  450. package/src/lib/token-optimizer.js +0 -517
  451. package/src/lib/validator.js +0 -376
  452. package/src/utils/checkpoint-manager.js +0 -435
  453. package/src/utils/engineering-guard.js +0 -399
  454. package/src/utils/language-utils.js +0 -331
  455. package/src/utils/messages.js +0 -166
  456. package/src/utils/paths.js +0 -112
@@ -1,711 +0,0 @@
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 };