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,602 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * AI 페르소나 명령어 (한국어)
5
- * 다양한 개발 작업을 위한 AI 행동 페르소나 관리
6
- */
7
-
8
- import { AIPersonaManager } from '../../ai-persona-manager.js';
9
- import { getBackgroundMonitor } from '../utils/background-monitor.js';
10
- import path from 'path';
11
- import chalk from 'chalk';
12
-
13
- // 전역 페르소나 매니저 인스턴스
14
- let personaManager = null;
15
-
16
- /**
17
- * 페르소나 매니저 인스턴스 가져오기 또는 생성
18
- */
19
- async function getPersonaManager() {
20
- if (!personaManager) {
21
- personaManager = new AIPersonaManager({
22
- personaConfigPath: path.join(process.cwd(), '.aiwf', 'personas'),
23
- metricsPath: path.join(process.cwd(), '.aiwf', 'metrics'),
24
- metricsEnabled: true,
25
- autoDetectionEnabled: true
26
- });
27
-
28
- await personaManager.init();
29
- }
30
-
31
- return personaManager;
32
- }
33
-
34
- /**
35
- * 페르소나 상태 포맷팅
36
- */
37
- function formatPersonaStatus(persona, metrics) {
38
- const lines = [];
39
-
40
- lines.push(chalk.cyan('🎭 AI 페르소나 상태'));
41
- lines.push(chalk.gray('━'.repeat(50)));
42
- lines.push(`현재 페르소나: ${chalk.yellow(persona.name)}`);
43
- lines.push(`설명: ${getKoreanDescription(persona.name)}`);
44
-
45
- if (persona.behaviors?.length) {
46
- lines.push('\n주요 동작:');
47
- getKoreanBehaviors(persona.name).forEach(behavior => {
48
- lines.push(` • ${behavior}`);
49
- });
50
- }
51
-
52
- if (persona.recommendedTools?.length) {
53
- lines.push(`\n권장 도구: ${persona.recommendedTools.join(', ')}`);
54
- }
55
-
56
- if (metrics && metrics.duration !== undefined) {
57
- lines.push('\n현재 세션:');
58
- lines.push(` 진행 시간: ${Math.round(metrics.duration / 1000)}초`);
59
- lines.push(` 상호작용: ${metrics.interactions}회`);
60
- lines.push(` 토큰 사용량: ${metrics.tokenUsage.current}`);
61
- }
62
-
63
- return lines.join('\n');
64
- }
65
-
66
- /**
67
- * 페르소나 리포트 포맷팅
68
- */
69
- function formatPersonaReport(report) {
70
- const lines = [];
71
-
72
- lines.push(chalk.cyan('📊 AI 페르소나 성능 리포트'));
73
- lines.push(chalk.gray('━'.repeat(50)));
74
- lines.push(`생성 시간: ${new Date(report.generatedAt).toLocaleString('ko-KR')}`);
75
- lines.push(`기간: ${getKoreanTimeRange(report.timeRange)}`);
76
-
77
- // 요약
78
- lines.push('\n' + chalk.yellow('요약:'));
79
- lines.push(`총 세션 수: ${report.summary.totalSessions}`);
80
- lines.push(`평균 완료 시간: ${Math.round(report.summary.averageCompletionTime / 1000)}초`);
81
-
82
- // 페르소나 사용량
83
- if (report.summary.personaUsage) {
84
- lines.push('\n' + chalk.yellow('페르소나 사용량:'));
85
- Object.entries(report.summary.personaUsage).forEach(([persona, stats]) => {
86
- lines.push(` ${getKoreanPersonaName(persona)}: ${stats.count}회 (${stats.percentage.toFixed(1)}%)`);
87
- });
88
- }
89
-
90
- // 품질 트렌드
91
- if (report.summary.qualityTrend) {
92
- lines.push('\n' + chalk.yellow('품질 트렌드:'));
93
- lines.push(` 추세: ${getKoreanTrend(report.summary.qualityTrend.trend)}`);
94
- if (report.summary.qualityTrend.averageScore) {
95
- lines.push(` 평균 점수: ${(report.summary.qualityTrend.averageScore * 100).toFixed(1)}%`);
96
- }
97
- }
98
-
99
- // 페르소나 분석
100
- if (report.personaAnalysis) {
101
- lines.push('\n' + chalk.yellow('페르소나 성능:'));
102
- Object.entries(report.personaAnalysis).forEach(([persona, analysis]) => {
103
- lines.push(`\n ${chalk.green(getKoreanPersonaName(persona))}:`);
104
- lines.push(` 세션 수: ${analysis.sessionCount}`);
105
- lines.push(` 완료율: ${(analysis.completionRate * 100).toFixed(1)}%`);
106
- lines.push(` 평균 품질: ${(analysis.averageQualityScore * 100).toFixed(1)}%`);
107
- lines.push(` 토큰 효율성: ${(analysis.tokenEfficiency * 100).toFixed(1)}%`);
108
-
109
- if (analysis.bestUseCases?.length) {
110
- lines.push(` 최적 사용 사례: ${analysis.bestUseCases.join(', ')}`);
111
- }
112
- });
113
- }
114
-
115
- // 권장사항
116
- if (report.recommendations?.length) {
117
- lines.push('\n' + chalk.yellow('권장사항:'));
118
- report.recommendations.forEach(rec => {
119
- const icon = rec.priority === 'high' ? '🔴' : '🟡';
120
- lines.push(` ${icon} ${translateRecommendation(rec.message)}`);
121
- });
122
- }
123
-
124
- return lines.join('\n');
125
- }
126
-
127
- /**
128
- * 한국어 번역 헬퍼 함수들
129
- */
130
- function getKoreanPersonaName(persona) {
131
- const names = {
132
- architect: '아키텍트',
133
- security: '보안 전문가',
134
- frontend: '프론트엔드 전문가',
135
- backend: '백엔드 전문가',
136
- data_analyst: '데이터 분석가'
137
- };
138
- return names[persona] || persona;
139
- }
140
-
141
- function getKoreanDescription(persona) {
142
- const descriptions = {
143
- architect: '시스템 설계 및 아키텍처',
144
- security: '보안 취약점 분석 및 방어',
145
- frontend: 'UI/UX 및 프론트엔드 개발',
146
- backend: 'API 설계 및 백엔드 개발',
147
- data_analyst: '데이터 분석 및 인사이트 도출'
148
- };
149
- return descriptions[persona] || '';
150
- }
151
-
152
- function getKoreanBehaviors(persona) {
153
- const behaviors = {
154
- architect: [
155
- '큰 그림과 전체 시스템 구조에 집중',
156
- '확장성과 유지보수성 우선시',
157
- '디자인 패턴과 아키텍처 원칙 적용',
158
- '통합 지점과 인터페이스 고려'
159
- ],
160
- security: [
161
- 'OWASP Top 10 기준 보안 취약점 분석',
162
- '위험 기반 접근으로 우선순위 설정',
163
- '공격 시나리오 구성 및 방어 전략 수립',
164
- '최소 권한 원칙과 다층 보안 적용'
165
- ],
166
- frontend: [
167
- '사용자 경험과 인터페이스 최적화',
168
- '성능과 접근성을 고려한 구현',
169
- '반응형 디자인과 크로스 브라우저 호환성',
170
- '컴포넌트 재사용성과 유지보수성'
171
- ],
172
- backend: [
173
- 'API 설계와 데이터베이스 최적화',
174
- '확장 가능한 서버 아키텍처 구축',
175
- '캐싱 전략과 성능 튜닝',
176
- '비동기 처리와 트랜잭션 관리'
177
- ],
178
- data_analyst: [
179
- '데이터 패턴과 트렌드 분석',
180
- '통계적 검증과 가설 검정',
181
- '시각화와 대시보드 설계',
182
- '예측 모델 구축과 평가'
183
- ]
184
- };
185
- return behaviors[persona] || [];
186
- }
187
-
188
- function getKoreanTimeRange(range) {
189
- const ranges = {
190
- hour: '1시간',
191
- day: '1일',
192
- week: '1주일',
193
- month: '1개월',
194
- all: '전체'
195
- };
196
- return ranges[range] || range;
197
- }
198
-
199
- function getKoreanTrend(trend) {
200
- const trends = {
201
- improving: '개선 중',
202
- declining: '하락 중',
203
- stable: '안정적',
204
- insufficient_data: '데이터 부족'
205
- };
206
- return trends[trend] || trend;
207
- }
208
-
209
- function translateRecommendation(message) {
210
- // 간단한 권장사항 번역
211
- if (message.includes('Consider using')) {
212
- return message.replace('Consider using', '다음 페르소나 사용을 고려하세요:');
213
- }
214
- if (message.includes('has low quality scores')) {
215
- return message.replace('tasks have low quality scores', '작업의 품질 점수가 낮습니다');
216
- }
217
- if (message.includes('has high error rate')) {
218
- return message.replace('has high error rate', '오류율이 높습니다');
219
- }
220
- return message;
221
- }
222
-
223
- /**
224
- * 명령어 핸들러
225
- */
226
- export const commands = {
227
- /**
228
- * 특정 페르소나로 전환
229
- */
230
- '/프로젝트:aiwf:ai_페르소나:전환': async (args) => {
231
- const personaName = args[0];
232
-
233
- if (!personaName) {
234
- return chalk.red('오류: 페르소나 이름을 지정하세요 (architect, debugger, reviewer, documenter, optimizer, developer)');
235
- }
236
-
237
- try {
238
- const manager = await getPersonaManager();
239
-
240
- if (!manager.isValidPersona(personaName)) {
241
- return chalk.red(`오류: 잘못된 페르소나 '${personaName}'. 사용 가능한 페르소나: ${manager.getAvailablePersonas().join(', ')}`);
242
- }
243
-
244
- await manager.switchPersona(personaName, { manual: true });
245
-
246
- // 백그라운드 모니터 초기화 (비차단)
247
- const monitor = getBackgroundMonitor();
248
- monitor.initialize().catch(() => {}); // 에러 무시
249
-
250
- return chalk.green(`✅ ${getKoreanPersonaName(personaName)} 페르소나로 전환했습니다`);
251
- } catch (error) {
252
- return chalk.red(`오류: ${error.message}`);
253
- }
254
- },
255
-
256
- /**
257
- * 특정 페르소나 단축키
258
- */
259
- '/프로젝트:aiwf:ai_페르소나:아키텍트': async () => {
260
- return commands['/프로젝트:aiwf:ai_페르소나:전환'](['architect']);
261
- },
262
-
263
- '/프로젝트:aiwf:ai_페르소나:디버거': async () => {
264
- return commands['/프로젝트:aiwf:ai_페르소나:전환'](['debugger']);
265
- },
266
-
267
- '/프로젝트:aiwf:ai_페르소나:리뷰어': async () => {
268
- return commands['/프로젝트:aiwf:ai_페르소나:전환'](['reviewer']);
269
- },
270
-
271
- '/프로젝트:aiwf:ai_페르소나:문서화전문가': async () => {
272
- return commands['/프로젝트:aiwf:ai_페르소나:전환'](['documenter']);
273
- },
274
-
275
- '/프로젝트:aiwf:ai_페르소나:최적화전문가': async () => {
276
- return commands['/프로젝트:aiwf:ai_페르소나:전환'](['optimizer']);
277
- },
278
-
279
- '/프로젝트:aiwf:ai_페르소나:개발자': async () => {
280
- return commands['/프로젝트:aiwf:ai_페르소나:전환'](['developer']);
281
- },
282
-
283
- /**
284
- * 자동 감지 활성화/비활성화
285
- */
286
- '/프로젝트:aiwf:ai_페르소나:자동': async (args) => {
287
- const enabled = args[0] !== 'false' && args[0] !== '끄기';
288
-
289
- try {
290
- const manager = await getPersonaManager();
291
- manager.options.autoDetectionEnabled = enabled;
292
-
293
- return chalk.green(`✅ 자동 감지가 ${enabled ? '활성화' : '비활성화'}되었습니다`);
294
- } catch (error) {
295
- return chalk.red(`오류: ${error.message}`);
296
- }
297
- },
298
-
299
- /**
300
- * 현재 페르소나 상태 표시
301
- */
302
- '/프로젝트:aiwf:ai_페르소나:상태': async () => {
303
- try {
304
- const manager = await getPersonaManager();
305
- const current = manager.getCurrentPersona();
306
-
307
- if (!current) {
308
- return chalk.yellow('현재 활성화된 페르소나가 없습니다');
309
- }
310
-
311
- const metrics = await manager.metricsCollector.getCurrentSessionMetrics();
312
-
313
- return formatPersonaStatus(current, metrics);
314
- } catch (error) {
315
- return chalk.red(`오류: ${error.message}`);
316
- }
317
- },
318
-
319
- /**
320
- * 페르소나 성능 리포트 생성
321
- */
322
- '/프로젝트:aiwf:ai_페르소나:리포트': async (args) => {
323
- const timeRange = args[0] || 'all';
324
-
325
- try {
326
- const manager = await getPersonaManager();
327
- const report = await manager.generateReport({ timeRange });
328
-
329
- return formatPersonaReport(report);
330
- } catch (error) {
331
- return chalk.red(`오류: ${error.message}`);
332
- }
333
- },
334
-
335
- /**
336
- * 사용 가능한 페르소나 목록
337
- */
338
- '/프로젝트:aiwf:ai_페르소나:목록': async () => {
339
- try {
340
- const manager = await getPersonaManager();
341
- const personas = manager.getAvailablePersonas();
342
- const current = manager.getCurrentPersona();
343
-
344
- const lines = [];
345
- lines.push(chalk.cyan('🎭 사용 가능한 AI 페르소나'));
346
- lines.push(chalk.gray('━'.repeat(50)));
347
-
348
- for (const personaName of personas) {
349
- const isCurrent = current?.name === personaName;
350
-
351
- lines.push(`\n${isCurrent ? '▶ ' : ' '}${chalk.yellow(getKoreanPersonaName(personaName))}${isCurrent ? ' (현재)' : ''}`);
352
- lines.push(` ${getKoreanDescription(personaName)}`);
353
-
354
- const persona = manager.availablePersonas[personaName];
355
- if (persona.focusAreas?.length) {
356
- lines.push(` 주요 영역: ${persona.focusAreas.slice(0, 3).join(', ')}`);
357
- }
358
- }
359
-
360
- lines.push('\n' + chalk.gray('/프로젝트:aiwf:ai_페르소나:전환 <이름> 명령으로 페르소나를 변경하세요'));
361
-
362
- return lines.join('\n');
363
- } catch (error) {
364
- return chalk.red(`오류: ${error.message}`);
365
- }
366
- },
367
-
368
- /**
369
- * 페르소나 통계 조회
370
- */
371
- '/프로젝트:aiwf:ai_페르소나:통계': async (args) => {
372
- const personaName = args[0];
373
-
374
- try {
375
- const manager = await getPersonaManager();
376
-
377
- if (personaName && !manager.isValidPersona(personaName)) {
378
- return chalk.red(`오류: 잘못된 페르소나 '${personaName}'`);
379
- }
380
-
381
- const targetPersona = personaName || manager.getCurrentPersona()?.name;
382
-
383
- if (!targetPersona) {
384
- return chalk.yellow('지정된 페르소나가 없거나 활성화된 페르소나가 없습니다');
385
- }
386
-
387
- const stats = await manager.getPersonaStats(targetPersona);
388
-
389
- if (stats.message) {
390
- return chalk.yellow(stats.message);
391
- }
392
-
393
- const lines = [];
394
- lines.push(chalk.cyan(`📊 ${getKoreanPersonaName(targetPersona)} 페르소나 통계`));
395
- lines.push(chalk.gray('━'.repeat(50)));
396
- lines.push(`총 세션 수: ${stats.totalSessions}`);
397
- lines.push(`완료율: ${(stats.completionRate * 100).toFixed(1)}%`);
398
- lines.push(`평균 진행 시간: ${Math.round(stats.averageDuration / 1000)}초`);
399
- lines.push(`평균 토큰 사용: ${Math.round(stats.averageTokens)}`);
400
- lines.push(`오류율: 세션당 ${stats.errorRate.toFixed(2)}회`);
401
- lines.push(`평균 품질: ${(stats.averageQualityScore * 100).toFixed(1)}%`);
402
-
403
- if (stats.taskDistribution && Object.keys(stats.taskDistribution).length > 0) {
404
- lines.push('\n작업 분포:');
405
- Object.entries(stats.taskDistribution).forEach(([task, count]) => {
406
- lines.push(` ${task}: ${count}`);
407
- });
408
- }
409
-
410
- return lines.join('\n');
411
- } catch (error) {
412
- return chalk.red(`오류: ${error.message}`);
413
- }
414
- },
415
-
416
- /**
417
- * 페르소나 시스템 리셋
418
- */
419
- '/프로젝트:aiwf:ai_페르소나:리셋': async () => {
420
- try {
421
- const manager = await getPersonaManager();
422
- await manager.reset();
423
-
424
- return chalk.green('✅ 페르소나 시스템이 기본값(개발자)으로 리셋되었습니다');
425
- } catch (error) {
426
- return chalk.red(`오류: ${error.message}`);
427
- }
428
- },
429
-
430
- /**
431
- * 현재 작업에 최적인 페르소나 감지
432
- */
433
- '/프로젝트:aiwf:ai_페르소나:감지': async (args) => {
434
- const command = args.join(' ');
435
-
436
- if (!command) {
437
- return chalk.red('오류: 작업 설명을 입력하세요');
438
- }
439
-
440
- try {
441
- const manager = await getPersonaManager();
442
-
443
- const taskContext = {
444
- command,
445
- description: command
446
- };
447
-
448
- const optimal = await manager.detectOptimalPersona(taskContext);
449
-
450
- const lines = [];
451
- lines.push(chalk.cyan('🔍 페르소나 감지 결과'));
452
- lines.push(chalk.gray('━'.repeat(50)));
453
- lines.push(`작업: "${command}"`);
454
- lines.push(`권장 페르소나: ${chalk.yellow(getKoreanPersonaName(optimal))}`);
455
-
456
- const persona = manager.availablePersonas[optimal];
457
- if (persona) {
458
- lines.push(`\n이유: ${getKoreanDescription(optimal)}`);
459
- lines.push(`주요 영역: ${persona.focusAreas.join(', ')}`);
460
- }
461
-
462
- lines.push('\n' + chalk.gray('/프로젝트:aiwf:ai_페르소나:전환 ' + optimal + ' 명령으로 활성화하세요'));
463
-
464
- return lines.join('\n');
465
- } catch (error) {
466
- return chalk.red(`오류: ${error.message}`);
467
- }
468
- }
469
- };
470
-
471
- // 테스트를 위한 export
472
- export { getPersonaManager };
473
-
474
- // 명령행 인자 처리 함수
475
- async function handlePersonaCommand(personaName) {
476
- try {
477
- const fs = await import('fs');
478
-
479
- // 기본 모드인 경우
480
- if (personaName === 'default') {
481
- // .aiwf 디렉토리에서 실행되는 경우 상위 디렉토리로 이동
482
- const baseDir = process.cwd().endsWith('.aiwf') ? path.dirname(process.cwd()) : process.cwd();
483
- const statusPath = path.join(baseDir, '.aiwf', 'current_persona.json');
484
- const status = {
485
- active: false,
486
- persona: null,
487
- activatedAt: null,
488
- contextRules: null,
489
- description: null
490
- };
491
-
492
- fs.writeFileSync(statusPath, JSON.stringify(status, null, 2));
493
-
494
- console.log(chalk.cyan('🎭 기본 모드로 복원 완료'));
495
- console.log(chalk.gray('모든 페르소나 컨텍스트가 해제되었습니다'));
496
- return;
497
- }
498
-
499
- // 유효한 페르소나인지 확인
500
- const validPersonas = ['architect', 'security', 'frontend', 'backend', 'data_analyst'];
501
- if (!validPersonas.includes(personaName)) {
502
- console.log(chalk.red(`❌ 잘못된 페르소나: ${personaName}`));
503
- console.log(chalk.yellow('사용 가능한 페르소나: ' + validPersonas.join(', ')));
504
- return;
505
- }
506
-
507
- // .aiwf 디렉토리에서 실행되는 경우 상위 디렉토리로 이동
508
- const baseDir = process.cwd().endsWith('.aiwf') ? path.dirname(process.cwd()) : process.cwd();
509
-
510
- // 컨텍스트 규칙 로드
511
- const contextRulesPath = path.join(baseDir, '.aiwf', '07_AI_PERSONAS', personaName, 'context_rules.md');
512
- let contextRules = null;
513
-
514
- if (fs.existsSync(contextRulesPath)) {
515
- contextRules = fs.readFileSync(contextRulesPath, 'utf8');
516
- }
517
-
518
- // 현재 페르소나 상태 저장
519
- const statusPath = path.join(baseDir, '.aiwf', 'current_persona.json');
520
- const status = {
521
- active: true,
522
- persona: personaName,
523
- activatedAt: new Date().toISOString(),
524
- contextRules: contextRules,
525
- description: getKoreanDescription(personaName)
526
- };
527
-
528
- fs.writeFileSync(statusPath, JSON.stringify(status, null, 2));
529
-
530
- console.log(chalk.cyan('🎭 AI 페르소나 활성화 완료'));
531
- console.log(chalk.yellow(`현재 페르소나: ${getKoreanPersonaName(personaName)}`));
532
- console.log(chalk.gray(`전문 분야: ${getKoreanDescription(personaName)}`));
533
-
534
- if (contextRules) {
535
- console.log(chalk.green('✅ 페르소나 컨텍스트 규칙이 적용되었습니다'));
536
- console.log(chalk.blue('📋 주요 동작 특성:'));
537
- getKoreanBehaviors(personaName).forEach(behavior => {
538
- console.log(chalk.blue(` • ${behavior}`));
539
- });
540
- }
541
-
542
- console.log(chalk.yellow('\n💡 이제 Claude Code가 ' + getKoreanPersonaName(personaName) + ' 모드로 동작합니다!'));
543
- console.log(chalk.gray('페르소나 상태 확인: node ai-persona.js status'));
544
-
545
- } catch (error) {
546
- console.log(chalk.red(`❌ 오류: ${error.message}`));
547
- }
548
- }
549
-
550
- // 직접 실행 시 명령줄 인자 처리
551
- if (import.meta.url === `file://${process.argv[1]}`) {
552
- const command = process.argv[2];
553
- const args = process.argv.slice(3);
554
-
555
- // 새로운 5개 페르소나 명령어 처리
556
- const validPersonas = ['architect', 'security', 'frontend', 'backend', 'data_analyst'];
557
-
558
- if (validPersonas.includes(command)) {
559
- handlePersonaCommand(command);
560
- } else if (command === 'status') {
561
- try {
562
- const fs = await import('fs');
563
- const baseDir = process.cwd().endsWith('.aiwf') ? path.dirname(process.cwd()) : process.cwd();
564
- const statusPath = path.join(baseDir, '.aiwf', 'current_persona.json');
565
-
566
- if (fs.existsSync(statusPath)) {
567
- const status = JSON.parse(fs.readFileSync(statusPath, 'utf8'));
568
-
569
- if (status.active) {
570
- console.log(chalk.cyan('🎭 현재 페르소나 상태'));
571
- console.log(chalk.gray('━'.repeat(50)));
572
- console.log(chalk.yellow(`활성 페르소나: ${getKoreanPersonaName(status.persona)}`));
573
- console.log(chalk.gray(`전문 분야: ${status.description}`));
574
- console.log(chalk.blue(`활성화 시간: ${new Date(status.activatedAt).toLocaleString('ko-KR')}`));
575
-
576
- console.log('\n📋 주요 동작 특성:');
577
- getKoreanBehaviors(status.persona).forEach(behavior => {
578
- console.log(chalk.blue(` • ${behavior}`));
579
- });
580
- } else {
581
- console.log(chalk.gray('🎭 현재 기본 모드입니다'));
582
- console.log(chalk.yellow('사용 가능한 페르소나: architect, security, frontend, backend, data_analyst'));
583
- }
584
- } else {
585
- console.log(chalk.gray('🎭 페르소나가 활성화되지 않았습니다'));
586
- console.log(chalk.yellow('사용 가능한 페르소나: architect, security, frontend, backend, data_analyst'));
587
- }
588
- } catch (error) {
589
- console.log(chalk.red(`❌ 상태 확인 오류: ${error.message}`));
590
- }
591
- } else if (command === 'default') {
592
- handlePersonaCommand('default');
593
- } else if (commands[command]) {
594
- commands[command](args)
595
- .then(console.log)
596
- .catch(console.error);
597
- } else {
598
- console.error('알 수 없는 명령어:', command);
599
- console.log('사용 가능한 페르소나: ' + validPersonas.join(', '));
600
- console.log('기타 명령어: status, default');
601
- }
602
- }