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,309 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * AI 페르소나 명령어
5
- * AI 행동 페르소나 관리 및 전환
6
- */
7
-
8
- import { AIPersonaManager } from '../lib/ai-persona-manager.js';
9
- import { ResourceLoader } from '../lib/resource-loader.js';
10
- import path from 'path';
11
- import chalk from 'chalk';
12
- import { fileURLToPath } from 'url';
13
- import { dirname } from 'path';
14
-
15
- const __filename = fileURLToPath(import.meta.url);
16
- const __dirname = dirname(__filename);
17
-
18
- class PersonaCommand {
19
- constructor() {
20
- this.personaManager = null;
21
- this.resourceLoader = new ResourceLoader();
22
- }
23
-
24
- /**
25
- * 페르소나 매니저 초기화
26
- */
27
- async initPersonaManager() {
28
- if (!this.personaManager) {
29
- // 사용자 디렉토리 초기화
30
- await this.resourceLoader.initUserDirectory();
31
-
32
- this.personaManager = new AIPersonaManager({
33
- personaConfigPath: path.join(process.cwd(), '.aiwf', 'personas'),
34
- metricsPath: path.join(process.cwd(), '.aiwf', 'metrics'),
35
- metricsEnabled: true,
36
- autoDetectionEnabled: true,
37
- resourceLoader: this.resourceLoader
38
- });
39
-
40
- await this.personaManager.init();
41
- }
42
-
43
- return this.personaManager;
44
- }
45
-
46
- /**
47
- * 페르소나 상태 표시
48
- */
49
- async showStatus() {
50
- try {
51
- // 파일에서 현재 페르소나 읽기
52
- const fs = await import('fs/promises');
53
- const path = await import('path');
54
- const personaFile = path.join(process.cwd(), '.aiwf', 'personas', 'current.json');
55
-
56
- try {
57
- const content = await fs.readFile(personaFile, 'utf-8');
58
- const currentPersona = JSON.parse(content);
59
-
60
- console.log(chalk.cyan('🎭 현재 AI 페르소나 상태'));
61
- console.log(chalk.gray('-'.repeat(50)));
62
- console.log(`현재 페르소나: ${chalk.yellow(currentPersona.name)}`);
63
- console.log(`설명: ${currentPersona.description}`);
64
- console.log(`활성화 시간: ${new Date(currentPersona.activatedAt).toLocaleString('ko-KR')}`);
65
-
66
- const behaviors = this.getKoreanBehaviors(currentPersona.name);
67
- if (behaviors.length > 0) {
68
- console.log('\n주요 동작:');
69
- behaviors.forEach(behavior => {
70
- console.log(` • ${behavior}`);
71
- });
72
- }
73
-
74
- console.log(chalk.gray('\n' + '-'.repeat(50)));
75
- console.log(chalk.green('✅ 페르소나가 활성화되어 있습니다.'));
76
-
77
- } catch (fileError) {
78
- console.log(chalk.yellow('⚠️ 현재 활성화된 페르소나가 없습니다.'));
79
- console.log(chalk.gray('사용 가능한 페르소나 목록을 보려면: aiwf persona list'));
80
- console.log(chalk.gray('페르소나를 설정하려면: aiwf persona set <페르소나명>'));
81
- }
82
-
83
- } catch (error) {
84
- console.error(chalk.red('❌ 페르소나 상태 확인 중 오류가 발생했습니다:'), error.message);
85
- console.error(error.stack);
86
- }
87
- }
88
-
89
- /**
90
- * 페르소나 목록 표시
91
- */
92
- async listPersonas() {
93
- try {
94
- console.log(chalk.cyan('🎭 사용 가능한 AI 페르소나'));
95
- console.log(chalk.gray('-'.repeat(50)));
96
-
97
- // ResourceLoader를 사용하여 페르소나 목록 가져오기
98
- try {
99
- const personas = await this.resourceLoader.listPersonas();
100
-
101
- for (const personaName of personas) {
102
- try {
103
- const persona = await this.resourceLoader.loadPersona(personaName);
104
- const displayName = chalk.yellow(personaName);
105
- const description = persona.description || '설명 없음';
106
- console.log(` ${displayName} - ${description}`);
107
- } catch (error) {
108
- // 개별 페르소나 로드 실패 시 건너뛰기
109
- console.log(` ${chalk.yellow(personaName)} - ${chalk.gray('(로드 실패)')}`);
110
- }
111
- }
112
- } catch (error) {
113
- // 페르소나 목록 가져오기 실패 시 기본 목록 표시
114
- const defaultPersonas = [
115
- { name: 'architect', description: '시스템 설계 및 아키텍처 전문가' },
116
- { name: 'developer', description: '일반 개발자 (기본값)' },
117
- { name: 'reviewer', description: '코드 리뷰 및 품질 관리 전문가' },
118
- { name: 'analyst', description: '비즈니스 분석가' },
119
- { name: 'tester', description: '테스트 엔지니어' }
120
- ];
121
-
122
- defaultPersonas.forEach(persona => {
123
- const displayName = chalk.yellow(persona.name);
124
- console.log(` ${displayName} - ${persona.description}`);
125
- });
126
- }
127
-
128
- console.log(chalk.gray('\n' + '-'.repeat(50)));
129
- console.log(chalk.gray('사용법: aiwf persona set <페르소나명>'));
130
-
131
- } catch (error) {
132
- console.error(chalk.red('❌ 페르소나 목록 조회 중 오류가 발생했습니다:'), error.message);
133
- console.error(error.stack);
134
- }
135
- }
136
-
137
- /**
138
- * 페르소나 전환
139
- */
140
- async setPersona(personaName) {
141
- if (!personaName) {
142
- console.error(chalk.red('❌ 페르소나 이름을 지정해주세요.'));
143
- console.log(chalk.gray('사용법: aiwf persona set <페르소나명>'));
144
- console.log(chalk.gray('사용 가능한 페르소나: aiwf persona list'));
145
- return;
146
- }
147
-
148
- try {
149
- // 유효한 페르소나인지 확인
150
- const validPersonas = ['architect', 'developer', 'reviewer', 'debugger', 'optimizer', 'security', 'documenter'];
151
-
152
- if (!validPersonas.includes(personaName)) {
153
- console.error(chalk.red(`❌ 페르소나 '${personaName}'를 찾을 수 없습니다.`));
154
- console.log(chalk.gray('사용 가능한 페르소나: aiwf persona list'));
155
- return;
156
- }
157
-
158
- // 간단한 페르소나 설정 (파일 기반)
159
- const fs = await import('fs/promises');
160
- const path = await import('path');
161
- const personaDir = path.join(process.cwd(), '.aiwf', 'personas');
162
-
163
- // 디렉토리 생성
164
- await fs.mkdir(personaDir, { recursive: true });
165
-
166
- // 현재 페르소나 저장
167
- const personaConfig = {
168
- name: personaName,
169
- description: this.getKoreanDescription(personaName),
170
- activatedAt: new Date().toISOString()
171
- };
172
-
173
- await fs.writeFile(
174
- path.join(personaDir, 'current.json'),
175
- JSON.stringify(personaConfig, null, 2)
176
- );
177
-
178
- console.log(chalk.green('🎭 AI 페르소나 활성화 완료'));
179
- console.log(chalk.gray('-'.repeat(50)));
180
- console.log(`현재 페르소나: ${chalk.yellow(personaName)}`);
181
- console.log(`전문 분야: ${this.getKoreanDescription(personaName)}`);
182
- console.log(chalk.gray('-'.repeat(50)));
183
- console.log(chalk.green('✅ 페르소나가 성공적으로 활성화되었습니다.'));
184
-
185
- } catch (error) {
186
- console.error(chalk.red('❌ 페르소나 전환 중 오류가 발생했습니다:'), error.message);
187
- console.error(error.stack);
188
- }
189
- }
190
-
191
- /**
192
- * 페르소나 리셋
193
- */
194
- async resetPersona() {
195
- try {
196
- // 기본 페르소나(developer)로 리셋
197
- await this.setPersona('developer');
198
- console.log(chalk.green('🔄 페르소나가 기본값(developer)으로 리셋되었습니다.'));
199
-
200
- } catch (error) {
201
- console.error(chalk.red('❌ 페르소나 리셋 중 오류가 발생했습니다:'), error.message);
202
- console.error(error.stack);
203
- }
204
- }
205
-
206
- /**
207
- * 명령어 실행
208
- */
209
- async execute(args) {
210
- const [subcommand, ...restArgs] = args;
211
-
212
- switch (subcommand) {
213
- case 'status':
214
- await this.showStatus();
215
- break;
216
- case 'list':
217
- await this.listPersonas();
218
- break;
219
- case 'set':
220
- await this.setPersona(restArgs[0]);
221
- break;
222
- case 'reset':
223
- await this.resetPersona();
224
- break;
225
- default:
226
- this.showHelp();
227
- break;
228
- }
229
- }
230
-
231
- /**
232
- * 도움말 표시
233
- */
234
- showHelp() {
235
- console.log(chalk.cyan('🎭 AIWF 페르소나 관리'));
236
- console.log(chalk.gray('-'.repeat(50)));
237
- console.log('사용법: aiwf persona <명령어> [옵션]');
238
- console.log('');
239
- console.log('명령어:');
240
- console.log(' status 현재 페르소나 상태 표시');
241
- console.log(' list 사용 가능한 페르소나 목록');
242
- console.log(' set <페르소나명> 특정 페르소나로 전환');
243
- console.log(' reset 기본 페르소나로 리셋');
244
- console.log('');
245
- console.log('예시:');
246
- console.log(' aiwf persona status');
247
- console.log(' aiwf persona list');
248
- console.log(' aiwf persona set architect');
249
- console.log(' aiwf persona reset');
250
- }
251
-
252
- /**
253
- * 한국어 설명 가져오기
254
- */
255
- getKoreanDescription(persona) {
256
- const descriptions = {
257
- architect: '시스템 설계 및 아키텍처 전문가',
258
- developer: '일반 개발자 (기본값)',
259
- reviewer: '코드 리뷰 및 품질 관리 전문가',
260
- debugger: '디버깅 및 문제 해결 전문가',
261
- optimizer: '성능 최적화 전문가',
262
- security: '보안 및 취약점 분석 전문가',
263
- devops: 'DevOps 및 인프라 관리 전문가',
264
- tester: '테스트 및 QA 전문가',
265
- documenter: '문서화 및 기술 작성 전문가',
266
- mentor: '멘토링 및 교육 전문가'
267
- };
268
-
269
- return descriptions[persona] || '설명 없음';
270
- }
271
-
272
- /**
273
- * 한국어 동작 설명 가져오기
274
- */
275
- getKoreanBehaviors(persona) {
276
- const behaviors = {
277
- architect: [
278
- '큰 그림과 전체 시스템 구조에 집중',
279
- '확장성과 유지보수성 우선시',
280
- '디자인 패턴과 아키텍처 원칙 적용',
281
- '통합 지점과 인터페이스 고려'
282
- ],
283
- developer: [
284
- '실용적이고 효율적인 코드 작성',
285
- '베스트 프랙티스 적용',
286
- '가독성과 유지보수성 중시'
287
- ],
288
- reviewer: [
289
- '코드 품질과 표준 준수 확인',
290
- '잠재적 버그와 개선점 식별',
291
- '성능과 보안 측면 검토'
292
- ],
293
- debugger: [
294
- '문제의 근본 원인 분석',
295
- '체계적인 디버깅 접근',
296
- '재현 가능한 테스트 케이스 생성'
297
- ],
298
- optimizer: [
299
- '성능 병목 지점 식별',
300
- '메모리 사용량 최적화',
301
- '알고리즘 효율성 개선'
302
- ]
303
- };
304
-
305
- return behaviors[persona] || ['기본 동작'];
306
- }
307
- }
308
-
309
- export default PersonaCommand;
@@ -1,393 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * 독립 스프린트 생성 명령어
5
- * 마일스톤 없이 독립적으로 실행 가능한 스프린트를 생성
6
- * YOLO 모드의 핵심 기능
7
- */
8
-
9
- import fs from 'fs/promises';
10
- import path from 'path';
11
- import chalk from 'chalk';
12
- import ora from 'ora';
13
- import prompts from 'prompts';
14
- import { execSync } from 'child_process';
15
-
16
- // 프로젝트 루트에서 .aiwf 디렉토리 찾기
17
- async function findProjectRoot(startDir = process.cwd()) {
18
- let currentDir = startDir;
19
-
20
- while (currentDir !== path.parse(currentDir).root) {
21
- try {
22
- const aiwfPath = path.join(currentDir, '.aiwf');
23
- await fs.access(aiwfPath);
24
- return currentDir;
25
- } catch {
26
- currentDir = path.dirname(currentDir);
27
- }
28
- }
29
-
30
- throw new Error('.aiwf 디렉토리를 찾을 수 없습니다. AIWF 프로젝트 내에서 실행해주세요.');
31
- }
32
-
33
- // 다음 스프린트 ID 생성
34
- async function getNextSprintId(projectRoot) {
35
- const sprintsDir = path.join(projectRoot, '.aiwf', '03_SPRINTS');
36
-
37
- try {
38
- await fs.access(sprintsDir);
39
- } catch {
40
- await fs.mkdir(sprintsDir, { recursive: true });
41
- return 'S01';
42
- }
43
-
44
- const entries = await fs.readdir(sprintsDir);
45
- const sprintDirs = entries.filter(entry => entry.match(/^S\d+_/));
46
-
47
- if (sprintDirs.length === 0) {
48
- return 'S01';
49
- }
50
-
51
- const numbers = sprintDirs.map(dir => {
52
- const match = dir.match(/^S(\d+)_/);
53
- return match ? parseInt(match[1]) : 0;
54
- });
55
-
56
- const maxNumber = Math.max(...numbers);
57
- return `S${String(maxNumber + 1).padStart(2, '0')}`;
58
- }
59
-
60
- // README에서 TODO 추출
61
- async function extractTodosFromReadme(projectRoot) {
62
- const readmePaths = [
63
- path.join(projectRoot, 'README.md'),
64
- path.join(projectRoot, 'readme.md'),
65
- path.join(projectRoot, 'README.ko.md')
66
- ];
67
-
68
- for (const readmePath of readmePaths) {
69
- try {
70
- const content = await fs.readFile(readmePath, 'utf-8');
71
-
72
- // TODO, Features, 기능, 할 일 등의 섹션 찾기
73
- const todoPatterns = [
74
- /## (?:TODO|To Do|할 일|Tasks?)[\s\S]*?(?=##|$)/gi,
75
- /## (?:Features?|기능)[\s\S]*?(?=##|$)/gi,
76
- /- \[ \] .+/g
77
- ];
78
-
79
- const todos = [];
80
- for (const pattern of todoPatterns) {
81
- const matches = content.match(pattern);
82
- if (matches) {
83
- matches.forEach(match => {
84
- const todoItems = match.match(/- \[ \] (.+)/g);
85
- if (todoItems) {
86
- todoItems.forEach(item => {
87
- const task = item.replace(/- \[ \] /, '').trim();
88
- todos.push(task);
89
- });
90
- }
91
- });
92
- }
93
- }
94
-
95
- if (todos.length > 0) {
96
- return todos;
97
- }
98
- } catch {
99
- // 파일이 없으면 다음 경로 시도
100
- continue;
101
- }
102
- }
103
-
104
- return [];
105
- }
106
-
107
- // GitHub 이슈에서 정보 추출
108
- async function extractFromGitHubIssue(issueNumber) {
109
- try {
110
- // gh CLI 사용
111
- const issueData = execSync(`gh issue view ${issueNumber} --json title,body`, { encoding: 'utf8' });
112
- const issue = JSON.parse(issueData);
113
-
114
- const tasks = [];
115
- const title = issue.title;
116
-
117
- // 이슈 본문에서 체크리스트 추출
118
- if (issue.body) {
119
- const checklistItems = issue.body.match(/- \[ \] (.+)/g);
120
- if (checklistItems) {
121
- checklistItems.forEach(item => {
122
- const task = item.replace(/- \[ \] /, '').trim();
123
- tasks.push(task);
124
- });
125
- }
126
- }
127
-
128
- return { title, tasks };
129
- } catch (error) {
130
- throw new Error(`GitHub 이슈 #${issueNumber}를 가져올 수 없습니다: ${error.message}`);
131
- }
132
- }
133
-
134
- // 스프린트 디렉토리 생성
135
- async function createSprintDirectory(projectRoot, sprintId, sprintName) {
136
- const dirName = `${sprintId}_${sprintName.toLowerCase().replace(/\s+/g, '_').replace(/[^a-z0-9_가-힣]/g, '')}`;
137
- const sprintPath = path.join(projectRoot, '.aiwf', '03_SPRINTS', dirName);
138
-
139
- await fs.mkdir(sprintPath, { recursive: true });
140
- return { sprintPath, dirName };
141
- }
142
-
143
- // 스프린트 메타 파일 생성
144
- async function createSprintMeta(sprintPath, sprintId, sprintName, options) {
145
- const timestamp = new Date().toISOString().slice(0, 10);
146
-
147
- const content = `# ${sprintId} - ${sprintName}
148
-
149
- **타입**: 독립 스프린트
150
- **생성일**: ${timestamp}
151
- **상태**: active
152
- **마일스톤**: ${options.milestone || 'N/A (독립 스프린트)'}
153
-
154
- ## 개요
155
-
156
- ${options.description || '이 스프린트는 마일스톤과 독립적으로 실행되는 작업 단위입니다.'}
157
-
158
- ## 목표
159
-
160
- ${options.goals ? options.goals.map(g => `- ${g}`).join('\n') : '- 요구사항 충족\n- 최소 기능 구현\n- 빠른 완성'}
161
-
162
- ## 범위
163
-
164
- ${options.scope || '이 스프린트의 범위는 명시된 태스크로 제한됩니다. 오버엔지니어링을 피하고 핵심 기능에 집중합니다.'}
165
-
166
- ## YOLO 설정
167
-
168
- \`\`\`yaml
169
- engineering_level: ${options.engineeringLevel || 'minimal'}
170
- focus_rules:
171
- - requirement_first
172
- - simple_solution
173
- - no_gold_plating
174
- - stay_on_track
175
- \`\`\`
176
-
177
- ## 태스크 목록
178
-
179
- ${options.tasks ? options.tasks.map((t, i) => `- [ ] T${String(i + 1).padStart(2, '0')}: ${t} - 상태: pending`).join('\n') : '(태스크가 자동으로 추가됩니다)'}
180
-
181
- ## 진행 상황
182
-
183
- - **계획됨**: ${options.tasks ? options.tasks.length : 0}
184
- - **진행 중**: 0
185
- - **완료됨**: 0
186
- - **전체 진행률**: 0%
187
-
188
- ## 노트
189
-
190
- - 이 스프린트는 YOLO 모드로 실행하기에 최적화되어 있습니다.
191
- - \`/project:aiwf:yolo ${sprintId}\`로 전체 스프린트를 자동 실행할 수 있습니다.
192
- `;
193
-
194
- const metaPath = path.join(sprintPath, `${sprintId}_sprint_meta.md`);
195
- await fs.writeFile(metaPath, content);
196
- return metaPath;
197
- }
198
-
199
- // 태스크 파일들 생성
200
- async function createTaskFiles(sprintPath, sprintId, tasks) {
201
- const createdTasks = [];
202
-
203
- for (let i = 0; i < tasks.length; i++) {
204
- const taskNumber = `T${String(i + 1).padStart(2, '0')}`;
205
- const taskTitle = tasks[i];
206
- const fileName = `${taskNumber}_${sprintId}_${taskTitle.toLowerCase().replace(/\s+/g, '_').replace(/[^a-z0-9_가-힣]/g, '')}.md`;
207
- const filePath = path.join(sprintPath, fileName);
208
-
209
- const content = `# ${taskNumber}: ${taskTitle}
210
-
211
- **스프린트**: ${sprintId}
212
- **생성일**: ${new Date().toISOString().slice(0, 16).replace('T', ' ')}
213
- **상태**: pending
214
- **우선순위**: high
215
- **예상 시간**: TBD
216
-
217
- ## 개요
218
-
219
- ${taskTitle}를 구현합니다.
220
-
221
- ## 요구사항
222
-
223
- - [ ] 핵심 기능 구현
224
- - [ ] 기본적인 테스트
225
- - [ ] 필수 문서화
226
-
227
- ## 승인 기준
228
-
229
- - [ ] 요구사항 충족
230
- - [ ] 정상 작동 확인
231
- - [ ] 코드 품질 기준 충족
232
-
233
- ## 구현 노트
234
-
235
- - 가장 간단한 해결책 우선
236
- - 기존 코드 재사용
237
- - 오버엔지니어링 방지
238
- `;
239
-
240
- await fs.writeFile(filePath, content);
241
- createdTasks.push({ taskNumber, fileName, taskTitle });
242
- }
243
-
244
- return createdTasks;
245
- }
246
-
247
- // 메인 함수: 독립 스프린트 생성
248
- export async function createIndependentSprint(options = {}) {
249
- const spinner = ora('독립 스프린트 생성 중...').start();
250
-
251
- try {
252
- const projectRoot = await findProjectRoot();
253
- const sprintId = await getNextSprintId(projectRoot);
254
-
255
- let sprintName = options.name;
256
- let tasks = options.tasks || [];
257
- let description = options.description;
258
- let engineeringLevel = options.minimal ? 'minimal' : options.engineeringLevel || 'minimal';
259
-
260
- // README에서 TODO 추출
261
- if (options.fromReadme) {
262
- spinner.text = 'README에서 TODO 추출 중...';
263
- const todos = await extractTodosFromReadme(projectRoot);
264
- if (todos.length > 0) {
265
- tasks = todos;
266
- sprintName = sprintName || 'README TODO 구현';
267
- description = 'README에서 추출한 TODO 항목들을 구현합니다.';
268
- } else {
269
- spinner.warn('README에서 TODO를 찾을 수 없습니다.');
270
- }
271
- }
272
-
273
- // GitHub 이슈에서 추출
274
- if (options.fromIssue) {
275
- spinner.text = `GitHub 이슈 #${options.fromIssue} 로딩 중...`;
276
- const issueData = await extractFromGitHubIssue(options.fromIssue);
277
- sprintName = sprintName || issueData.title;
278
- tasks = issueData.tasks.length > 0 ? issueData.tasks : [`이슈 #${options.fromIssue} 구현`];
279
- description = `GitHub 이슈 #${options.fromIssue}: ${issueData.title}`;
280
- }
281
-
282
- // 대화형 입력
283
- if (!sprintName || tasks.length === 0) {
284
- spinner.stop();
285
-
286
- const response = await prompts([
287
- {
288
- type: !sprintName ? 'text' : null,
289
- name: 'name',
290
- message: '스프린트 이름:',
291
- initial: '빠른 프로토타입'
292
- },
293
- {
294
- type: tasks.length === 0 ? 'text' : null,
295
- name: 'goal',
296
- message: '주요 목표 (한 줄로):',
297
- initial: '핵심 기능 구현'
298
- }
299
- ]);
300
-
301
- sprintName = sprintName || response.name;
302
- if (response.goal && tasks.length === 0) {
303
- tasks = [response.goal];
304
- }
305
-
306
- spinner.start();
307
- }
308
-
309
- // 스프린트 디렉토리 생성
310
- spinner.text = '스프린트 디렉토리 생성 중...';
311
- const { sprintPath, dirName } = await createSprintDirectory(projectRoot, sprintId, sprintName);
312
-
313
- // 스프린트 메타 파일 생성
314
- spinner.text = '스프린트 메타 파일 생성 중...';
315
- await createSprintMeta(sprintPath, sprintId, sprintName, {
316
- description,
317
- goals: options.goals || [`${sprintName} 완성`],
318
- scope: options.scope,
319
- engineeringLevel,
320
- tasks,
321
- milestone: null
322
- });
323
-
324
- // 태스크 파일 생성
325
- if (tasks.length > 0) {
326
- spinner.text = '태스크 파일 생성 중...';
327
- await createTaskFiles(sprintPath, sprintId, tasks);
328
- }
329
-
330
- spinner.succeed('독립 스프린트 생성 완료!');
331
-
332
- // 성공 메시지
333
- console.log('\n' + chalk.green('✅ 독립 스프린트 생성 완료!'));
334
- console.log('\n📁 스프린트: ' + chalk.cyan(dirName));
335
- console.log('🆔 ID: ' + chalk.yellow(sprintId));
336
- console.log('📝 이름: ' + chalk.yellow(sprintName));
337
- console.log('🎯 태스크: ' + chalk.blue(`${tasks.length}개`));
338
- console.log('🔧 엔지니어링 레벨: ' + chalk.magenta(engineeringLevel));
339
-
340
- console.log('\n' + chalk.bold('🚀 다음 단계:'));
341
- console.log(`1. ${chalk.cyan(`/project:aiwf:yolo ${sprintId}`)}로 전체 스프린트 실행`);
342
- console.log(`2. ${chalk.cyan(`/project:aiwf:yolo ${sprintId} --minimal`)}로 최소 구현 모드 실행`);
343
- console.log(`3. ${chalk.cyan(`aiwf sprint-task ${sprintId} "새 태스크"`)}로 태스크 추가`);
344
-
345
- console.log('\n💡 팁: 이 스프린트는 마일스톤과 독립적으로 실행됩니다!');
346
-
347
- return { success: true, sprintId, sprintPath, tasks: tasks.length };
348
-
349
- } catch (error) {
350
- spinner.fail(`독립 스프린트 생성 실패: ${error.message}`);
351
- throw error;
352
- }
353
- }
354
-
355
- // CLI 실행
356
- if (import.meta.url === `file://${process.argv[1]}`) {
357
- const args = process.argv.slice(2);
358
-
359
- const options = {
360
- name: null,
361
- fromReadme: false,
362
- fromIssue: null,
363
- minimal: false,
364
- engineeringLevel: 'minimal'
365
- };
366
-
367
- // 인자 파싱
368
- for (let i = 0; i < args.length; i++) {
369
- const arg = args[i];
370
-
371
- if (arg === '--from-readme') {
372
- options.fromReadme = true;
373
- } else if (arg === '--from-issue' && args[i + 1]) {
374
- options.fromIssue = args[++i];
375
- } else if (arg === '--minimal') {
376
- options.minimal = true;
377
- options.engineeringLevel = 'minimal';
378
- } else if (arg === '--balanced') {
379
- options.engineeringLevel = 'balanced';
380
- } else if (arg === '--complete') {
381
- options.engineeringLevel = 'complete';
382
- } else if (!options.name) {
383
- options.name = arg;
384
- }
385
- }
386
-
387
- createIndependentSprint(options).catch(error => {
388
- console.error(chalk.red(`오류: ${error.message}`));
389
- process.exit(1);
390
- });
391
- }
392
-
393
- export default createIndependentSprint;