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,44 +0,0 @@
1
- {
2
- "id": "developer",
3
- "name": "Software Developer",
4
- "description": "Implements features, writes clean code, and follows best practices",
5
- "focus_areas": [
6
- "Code implementation",
7
- "Algorithm optimization",
8
- "Code quality and maintainability",
9
- "Testing and debugging",
10
- "Performance optimization"
11
- ],
12
- "communication_style": {
13
- "tone": "practical, solution-oriented, collaborative",
14
- "language": "technical with code examples",
15
- "format": "code snippets, implementation notes, commit messages"
16
- },
17
- "capabilities": [
18
- "Write clean, maintainable code",
19
- "Implement complex algorithms",
20
- "Optimize performance",
21
- "Debug and fix issues",
22
- "Write comprehensive tests"
23
- ],
24
- "tools_and_methods": [
25
- "SOLID principles",
26
- "Design patterns",
27
- "Test-driven development",
28
- "Clean code practices",
29
- "Refactoring techniques"
30
- ],
31
- "output_formats": [
32
- "Source code",
33
- "Unit tests",
34
- "Integration tests",
35
- "Code documentation",
36
- "Performance reports"
37
- ],
38
- "example_prompts": [
39
- "Implement feature FL-001 authentication system",
40
- "Optimize the database query performance",
41
- "Refactor the payment module for better maintainability",
42
- "Write unit tests for the user service"
43
- ]
44
- }
@@ -1,37 +0,0 @@
1
- # 개발자 페르소나
2
-
3
- ## 기본 정보
4
- - **이름**: Developer
5
- - **역할**: 소프트웨어 개발자
6
- - **경험**: 5년 이상
7
- - **전문 분야**: 웹 개발, 백엔드 개발
8
-
9
- ## 성격 및 특성
10
- - 논리적이고 체계적인 접근 방식
11
- - 코드 품질과 성능에 대한 높은 기준
12
- - 새로운 기술에 대한 호기심
13
- - 문제 해결 중심의 사고방식
14
-
15
- ## 커뮤니케이션 스타일
16
- - 명확하고 구체적인 설명 선호
17
- - 기술적 근거를 바탕으로 한 의견 제시
18
- - 코드 예시와 함께 설명
19
- - 단계적이고 논리적인 설명
20
-
21
- ## 작업 방식
22
- - 요구사항 분석 후 구현 계획 수립
23
- - 테스트 주도 개발(TDD) 적용
24
- - 코드 리뷰와 리팩토링 중시
25
- - 문서화와 주석 작성 습관
26
-
27
- ## 주요 역량
28
- - 프로그래밍 언어: JavaScript, TypeScript, Python
29
- - 프레임워크: React, Node.js, Express
30
- - 데이터베이스: MongoDB, PostgreSQL
31
- - 도구: Git, Docker, AWS
32
-
33
- ## 목표
34
- - 고품질 소프트웨어 개발
35
- - 효율적인 개발 프로세스 구축
36
- - 팀 협업 및 지식 공유
37
- - 지속적인 학습과 성장
@@ -1,137 +0,0 @@
1
- {
2
- "architect": {
3
- "name": "Architect",
4
- "description": "시스템 설계 및 아키텍처 전문가",
5
- "evaluation_weights": {
6
- "relevance": 0.20,
7
- "consistency": 0.30,
8
- "completeness": 0.20,
9
- "clarity": 0.15,
10
- "actionability": 0.15
11
- },
12
- "quality_thresholds": {
13
- "excellent": 0.85,
14
- "good": 0.70,
15
- "fair": 0.55,
16
- "poor": 0.40
17
- },
18
- "expected_characteristics": {
19
- "response_length": {
20
- "min": 300,
21
- "ideal": 800,
22
- "max": 1500
23
- },
24
- "technical_depth": "high",
25
- "abstraction_level": "high",
26
- "focus_areas": ["scalability", "maintainability", "patterns"]
27
- }
28
- },
29
- "security": {
30
- "name": "Security Expert",
31
- "description": "보안 전문가",
32
- "evaluation_weights": {
33
- "relevance": 0.25,
34
- "consistency": 0.25,
35
- "completeness": 0.25,
36
- "clarity": 0.10,
37
- "actionability": 0.15
38
- },
39
- "quality_thresholds": {
40
- "excellent": 0.90,
41
- "good": 0.75,
42
- "fair": 0.60,
43
- "poor": 0.45
44
- },
45
- "expected_characteristics": {
46
- "response_length": {
47
- "min": 350,
48
- "ideal": 800,
49
- "max": 1500
50
- },
51
- "technical_depth": "very_high",
52
- "abstraction_level": "medium",
53
- "focus_areas": ["vulnerabilities", "threats", "protection"]
54
- }
55
- },
56
- "frontend": {
57
- "name": "Frontend Developer",
58
- "description": "프론트엔드 개발 전문가",
59
- "evaluation_weights": {
60
- "relevance": 0.25,
61
- "consistency": 0.20,
62
- "completeness": 0.20,
63
- "clarity": 0.20,
64
- "actionability": 0.15
65
- },
66
- "quality_thresholds": {
67
- "excellent": 0.80,
68
- "good": 0.65,
69
- "fair": 0.50,
70
- "poor": 0.35
71
- },
72
- "expected_characteristics": {
73
- "response_length": {
74
- "min": 250,
75
- "ideal": 600,
76
- "max": 1200
77
- },
78
- "technical_depth": "medium",
79
- "abstraction_level": "low",
80
- "focus_areas": ["ui", "ux", "accessibility"]
81
- }
82
- },
83
- "backend": {
84
- "name": "Backend Developer",
85
- "description": "백엔드 개발 전문가",
86
- "evaluation_weights": {
87
- "relevance": 0.25,
88
- "consistency": 0.25,
89
- "completeness": 0.20,
90
- "clarity": 0.15,
91
- "actionability": 0.15
92
- },
93
- "quality_thresholds": {
94
- "excellent": 0.85,
95
- "good": 0.70,
96
- "fair": 0.55,
97
- "poor": 0.40
98
- },
99
- "expected_characteristics": {
100
- "response_length": {
101
- "min": 300,
102
- "ideal": 700,
103
- "max": 1400
104
- },
105
- "technical_depth": "high",
106
- "abstraction_level": "medium",
107
- "focus_areas": ["api", "database", "performance"]
108
- }
109
- },
110
- "data_analyst": {
111
- "name": "Data Analyst",
112
- "description": "데이터 분석 전문가",
113
- "evaluation_weights": {
114
- "relevance": 0.20,
115
- "consistency": 0.20,
116
- "completeness": 0.25,
117
- "clarity": 0.20,
118
- "actionability": 0.15
119
- },
120
- "quality_thresholds": {
121
- "excellent": 0.85,
122
- "good": 0.70,
123
- "fair": 0.55,
124
- "poor": 0.40
125
- },
126
- "expected_characteristics": {
127
- "response_length": {
128
- "min": 400,
129
- "ideal": 900,
130
- "max": 1600
131
- },
132
- "technical_depth": "high",
133
- "abstraction_level": "medium",
134
- "focus_areas": ["data", "insights", "visualization"]
135
- }
136
- }
137
- }
@@ -1,445 +0,0 @@
1
- # Frontend 페르소나 Best Practices
2
-
3
- ## 개요
4
- Frontend 페르소나는 사용자 경험(UX)과 인터페이스 디자인을 최우선으로 고려합니다. 성능, 접근성, 반응형 디자인에 중점을 둡니다.
5
-
6
- ## 핵심 원칙
7
-
8
- ### 1. 사용자 중심 디자인
9
- - 직관적인 인터페이스 설계
10
- - 일관된 디자인 시스템 구축
11
- - 피드백과 상태 표시 명확히
12
-
13
- ### 2. 성능 최적화
14
- ```javascript
15
- // Lazy Loading 구현
16
- const LazyImage = ({ src, alt }) => {
17
- const [imageSrc, setImageSrc] = useState(null);
18
- const imageRef = useRef();
19
-
20
- useEffect(() => {
21
- const observer = new IntersectionObserver(
22
- entries => {
23
- if (entries[0].isIntersecting) {
24
- setImageSrc(src);
25
- observer.disconnect();
26
- }
27
- },
28
- { threshold: 0.1 }
29
- );
30
-
31
- if (imageRef.current) {
32
- observer.observe(imageRef.current);
33
- }
34
-
35
- return () => observer.disconnect();
36
- }, [src]);
37
-
38
- return (
39
- <img
40
- ref={imageRef}
41
- src={imageSrc || '/placeholder.svg'}
42
- alt={alt}
43
- loading="lazy"
44
- />
45
- );
46
- };
47
- ```
48
-
49
- ### 3. 접근성 (Accessibility)
50
- ```jsx
51
- // ARIA 속성 활용
52
- <button
53
- aria-label="메뉴 열기"
54
- aria-expanded={isMenuOpen}
55
- aria-controls="navigation-menu"
56
- onClick={toggleMenu}
57
- >
58
- <MenuIcon />
59
- </button>
60
-
61
- // 키보드 네비게이션 지원
62
- const handleKeyDown = (e) => {
63
- switch(e.key) {
64
- case 'Enter':
65
- case ' ':
66
- e.preventDefault();
67
- handleClick();
68
- break;
69
- case 'Escape':
70
- handleClose();
71
- break;
72
- }
73
- };
74
- ```
75
-
76
- ## 컴포넌트 설계
77
-
78
- ### 재사용 가능한 컴포넌트
79
- ```jsx
80
- // Compound Component Pattern
81
- const Accordion = ({ children }) => {
82
- const [openIndex, setOpenIndex] = useState(null);
83
-
84
- return (
85
- <AccordionContext.Provider value={{ openIndex, setOpenIndex }}>
86
- <div className="accordion">{children}</div>
87
- </AccordionContext.Provider>
88
- );
89
- };
90
-
91
- Accordion.Item = ({ index, children }) => {
92
- const { openIndex, setOpenIndex } = useAccordion();
93
- const isOpen = openIndex === index;
94
-
95
- return (
96
- <div className="accordion-item">
97
- {React.Children.map(children, child =>
98
- React.cloneElement(child, { isOpen, toggle: () => setOpenIndex(index) })
99
- )}
100
- </div>
101
- );
102
- };
103
-
104
- Accordion.Header = ({ children, toggle }) => (
105
- <button className="accordion-header" onClick={toggle}>
106
- {children}
107
- </button>
108
- );
109
-
110
- Accordion.Content = ({ children, isOpen }) => (
111
- <div className={`accordion-content ${isOpen ? 'open' : ''}`}>
112
- {children}
113
- </div>
114
- );
115
- ```
116
-
117
- ### 상태 관리 패턴
118
- ```javascript
119
- // Custom Hook for Complex State
120
- function useFormState(initialValues, validationRules) {
121
- const [values, setValues] = useState(initialValues);
122
- const [errors, setErrors] = useState({});
123
- const [touched, setTouched] = useState({});
124
-
125
- const handleChange = useCallback((name, value) => {
126
- setValues(prev => ({ ...prev, [name]: value }));
127
-
128
- // 실시간 검증
129
- if (touched[name]) {
130
- const error = validationRules[name]?.(value);
131
- setErrors(prev => ({ ...prev, [name]: error }));
132
- }
133
- }, [touched, validationRules]);
134
-
135
- const handleBlur = useCallback((name) => {
136
- setTouched(prev => ({ ...prev, [name]: true }));
137
- const error = validationRules[name]?.(values[name]);
138
- setErrors(prev => ({ ...prev, [name]: error }));
139
- }, [values, validationRules]);
140
-
141
- const validateAll = useCallback(() => {
142
- const newErrors = {};
143
- Object.keys(validationRules).forEach(name => {
144
- const error = validationRules[name](values[name]);
145
- if (error) newErrors[name] = error;
146
- });
147
- setErrors(newErrors);
148
- return Object.keys(newErrors).length === 0;
149
- }, [values, validationRules]);
150
-
151
- return {
152
- values,
153
- errors,
154
- touched,
155
- handleChange,
156
- handleBlur,
157
- validateAll
158
- };
159
- }
160
- ```
161
-
162
- ## 스타일링 Best Practices
163
-
164
- ### CSS-in-JS vs CSS Modules
165
- ```javascript
166
- // Styled Components (CSS-in-JS)
167
- const Button = styled.button`
168
- background: ${props => props.primary ? '#007bff' : '#6c757d'};
169
- color: white;
170
- padding: 0.5rem 1rem;
171
- border: none;
172
- border-radius: 4px;
173
- font-size: 1rem;
174
- cursor: pointer;
175
- transition: all 0.2s ease;
176
-
177
- &:hover {
178
- opacity: 0.9;
179
- transform: translateY(-1px);
180
- }
181
-
182
- &:disabled {
183
- opacity: 0.6;
184
- cursor: not-allowed;
185
- }
186
- `;
187
-
188
- // CSS Modules
189
- // Button.module.css
190
- .button {
191
- composes: base from './base.module.css';
192
- background: var(--primary-color);
193
- color: white;
194
- padding: 0.5rem 1rem;
195
- }
196
-
197
- .button:hover {
198
- opacity: 0.9;
199
- }
200
-
201
- // Component
202
- import styles from './Button.module.css';
203
- const Button = ({ children, ...props }) => (
204
- <button className={styles.button} {...props}>
205
- {children}
206
- </button>
207
- );
208
- ```
209
-
210
- ### 반응형 디자인
211
- ```css
212
- /* Mobile First Approach */
213
- .container {
214
- width: 100%;
215
- padding: 1rem;
216
- }
217
-
218
- /* Tablet */
219
- @media (min-width: 768px) {
220
- .container {
221
- max-width: 750px;
222
- margin: 0 auto;
223
- }
224
- }
225
-
226
- /* Desktop */
227
- @media (min-width: 1024px) {
228
- .container {
229
- max-width: 1200px;
230
- display: grid;
231
- grid-template-columns: repeat(12, 1fr);
232
- gap: 2rem;
233
- }
234
- }
235
-
236
- /* Utility Classes */
237
- .hide-mobile { display: none; }
238
- .show-tablet { display: none; }
239
-
240
- @media (min-width: 768px) {
241
- .hide-mobile { display: block; }
242
- .show-tablet { display: block; }
243
- }
244
- ```
245
-
246
- ## 성능 최적화
247
-
248
- ### 번들 크기 최적화
249
- ```javascript
250
- // Dynamic Imports
251
- const HeavyComponent = lazy(() =>
252
- import(/* webpackChunkName: "heavy" */ './HeavyComponent')
253
- );
254
-
255
- // Tree Shaking을 위한 Named Exports
256
- // utils.js
257
- export const debounce = (fn, delay) => {
258
- let timeoutId;
259
- return (...args) => {
260
- clearTimeout(timeoutId);
261
- timeoutId = setTimeout(() => fn(...args), delay);
262
- };
263
- };
264
-
265
- export const throttle = (fn, limit) => {
266
- let inThrottle;
267
- return (...args) => {
268
- if (!inThrottle) {
269
- fn.apply(this, args);
270
- inThrottle = true;
271
- setTimeout(() => inThrottle = false, limit);
272
- }
273
- };
274
- };
275
-
276
- // Import only what you need
277
- import { debounce } from './utils';
278
- ```
279
-
280
- ### 렌더링 최적화
281
- ```jsx
282
- // React.memo로 불필요한 리렌더링 방지
283
- const ExpensiveComponent = React.memo(({ data }) => {
284
- return <ComplexVisualization data={data} />;
285
- }, (prevProps, nextProps) => {
286
- // Custom comparison
287
- return prevProps.data.id === nextProps.data.id;
288
- });
289
-
290
- // useMemo for expensive calculations
291
- const ProcessedData = ({ rawData }) => {
292
- const processed = useMemo(() => {
293
- return rawData
294
- .filter(item => item.active)
295
- .map(item => ({
296
- ...item,
297
- computed: expensiveComputation(item)
298
- }))
299
- .sort((a, b) => b.computed - a.computed);
300
- }, [rawData]);
301
-
302
- return <DataTable data={processed} />;
303
- };
304
- ```
305
-
306
- ## 테스팅 전략
307
-
308
- ### 컴포넌트 테스트
309
- ```javascript
310
- // React Testing Library
311
- describe('Button Component', () => {
312
- it('should render with correct text', () => {
313
- render(<Button>Click me</Button>);
314
- expect(screen.getByRole('button')).toHaveTextContent('Click me');
315
- });
316
-
317
- it('should handle click events', async () => {
318
- const handleClick = jest.fn();
319
- render(<Button onClick={handleClick}>Click me</Button>);
320
-
321
- await userEvent.click(screen.getByRole('button'));
322
- expect(handleClick).toHaveBeenCalledTimes(1);
323
- });
324
-
325
- it('should be keyboard accessible', async () => {
326
- const handleClick = jest.fn();
327
- render(<Button onClick={handleClick}>Click me</Button>);
328
-
329
- const button = screen.getByRole('button');
330
- button.focus();
331
-
332
- await userEvent.keyboard('{Enter}');
333
- expect(handleClick).toHaveBeenCalled();
334
- });
335
- });
336
- ```
337
-
338
- ### E2E 테스트
339
- ```javascript
340
- // Cypress
341
- describe('User Flow', () => {
342
- it('should complete checkout process', () => {
343
- cy.visit('/products');
344
-
345
- // 제품 선택
346
- cy.findByText('Add to Cart').click();
347
-
348
- // 장바구니 확인
349
- cy.findByLabelText('Cart').click();
350
- cy.findByText('Proceed to Checkout').click();
351
-
352
- // 결제 정보 입력
353
- cy.findByLabelText('Email').type('user@example.com');
354
- cy.findByLabelText('Card Number').type('4242424242424242');
355
-
356
- // 주문 완료
357
- cy.findByText('Place Order').click();
358
- cy.findByText('Order Confirmed').should('be.visible');
359
- });
360
- });
361
- ```
362
-
363
- ## 보안 고려사항
364
-
365
- ### XSS 방지
366
- ```jsx
367
- // 위험한 HTML 렌더링 피하기
368
- // 나쁜 예
369
- <div dangerouslySetInnerHTML={{ __html: userContent }} />
370
-
371
- // 좋은 예
372
- import DOMPurify from 'dompurify';
373
- <div dangerouslySetInnerHTML={{
374
- __html: DOMPurify.sanitize(userContent)
375
- }} />
376
-
377
- // 또는 텍스트로만 렌더링
378
- <div>{userContent}</div>
379
- ```
380
-
381
- ### 민감한 정보 보호
382
- ```javascript
383
- // 환경 변수 사용
384
- const API_KEY = process.env.REACT_APP_API_KEY;
385
-
386
- // 민감한 정보 로깅 방지
387
- const sanitizeUser = (user) => {
388
- const { password, ssn, ...safeUser } = user;
389
- return safeUser;
390
- };
391
-
392
- console.log('User data:', sanitizeUser(userData));
393
- ```
394
-
395
- ## 개발 도구
396
-
397
- ### 필수 도구
398
- - **번들러**: Vite, Webpack
399
- - **상태관리**: Redux Toolkit, Zustand, Jotai
400
- - **스타일링**: Tailwind CSS, Emotion, Styled Components
401
- - **테스팅**: Jest, React Testing Library, Cypress
402
- - **린팅**: ESLint, Prettier
403
-
404
- ### 성능 모니터링
405
- ```javascript
406
- // Web Vitals 측정
407
- import { getCLS, getFID, getFCP, getLCP, getTTFB } from 'web-vitals';
408
-
409
- function sendToAnalytics(metric) {
410
- // Google Analytics로 전송
411
- gtag('event', metric.name, {
412
- value: Math.round(metric.value),
413
- metric_id: metric.id,
414
- metric_value: metric.value,
415
- metric_delta: metric.delta,
416
- });
417
- }
418
-
419
- getCLS(sendToAnalytics);
420
- getFID(sendToAnalytics);
421
- getFCP(sendToAnalytics);
422
- getLCP(sendToAnalytics);
423
- getTTFB(sendToAnalytics);
424
- ```
425
-
426
- ## 체크리스트
427
-
428
- ### 개발 전
429
- - [ ] 디자인 시스템 확인
430
- - [ ] 반응형 브레이크포인트 정의
431
- - [ ] 접근성 요구사항 검토
432
- - [ ] 성능 목표 설정
433
-
434
- ### 개발 중
435
- - [ ] 컴포넌트 재사용성 검토
436
- - [ ] 접근성 테스트 (스크린 리더, 키보드)
437
- - [ ] 크로스 브라우저 테스트
438
- - [ ] 성능 프로파일링
439
-
440
- ### 배포 전
441
- - [ ] 번들 크기 최적화
442
- - [ ] 이미지 최적화
443
- - [ ] SEO 메타 태그
444
- - [ ] 에러 경계 설정
445
- - [ ] 분석 도구 통합