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,727 +0,0 @@
1
- # aiwf 개발 가이드
2
-
3
- aiwf (AI Workflow Framework)는 Claude Code와 통합된 AIWF 프로젝트 관리 프레임워크를 설치하는 NPM CLI 패키지입니다. 이 문서는 aiwf 프로젝트에 기여하고자 하는 개발자들을 위한 종합적인 개발 환경 설정 및 워크플로우 가이드입니다.
4
-
5
- ## 목차
6
-
7
- 1. [시작하기](#1-시작하기)
8
- 2. [개발 도구 설정](#2-개발-도구-설정)
9
- 3. [개발 워크플로우](#3-개발-워크플로우)
10
- 4. [코딩 표준](#4-코딩-표준)
11
- 5. [테스트 작성](#5-테스트-작성)
12
- 6. [CI/CD 파이프라인](#6-cicd-파이프라인)
13
- 7. [문제 해결](#7-문제-해결)
14
- 8. [기여하기](#8-기여하기)
15
-
16
- ---
17
-
18
- ## 1. 시작하기
19
-
20
- ### 1.1 개발 환경 요구사항
21
-
22
- aiwf 프로젝트 개발을 위해 다음 도구들이 필요합니다:
23
-
24
- - **Node.js**: 14.0.0 이상 (ES 모듈 지원)
25
- - **npm**: Node.js와 함께 설치됨
26
- - **Git**: 버전 관리
27
- - **추천 IDE**: VS Code, Cursor, 또는 Windsurf
28
-
29
- ### 1.2 프로젝트 클론 및 설정
30
-
31
- ```bash
32
- # 1. 리포지토리 클론
33
- git clone https://github.com/moonklabs/aiwf.git
34
- cd aiwf
35
-
36
- # 2. 의존성 설치
37
- npm install
38
-
39
- # 3. 로컬 테스트 실행
40
- node index.js --force
41
-
42
- # 4. 개발 환경 검증
43
- npm test # Jest 테스트 실행 (설정 후)
44
- npm run lint # ESLint 검사 (설정 후)
45
- ```
46
-
47
- ### 1.3 프로젝트 구조 이해
48
-
49
- ```
50
- aiwf/
51
- ├── index.js # 메인 CLI 실행 파일
52
- ├── package.json # NPM 패키지 설정
53
- ├── claude-code/aiwf/ # AIWF 프레임워크 소스
54
- │ ├── .claude/commands/ # Claude Code 커스텀 명령어
55
- │ └── .aiwf/ # 프로젝트 관리 구조
56
- ├── rules/ # IDE별 개발 규칙
57
- │ ├── global/ # 항상 적용되는 규칙
58
- │ └── manual/ # 필요시 적용하는 규칙
59
- ├── docs/ # 프로젝트 문서
60
- ├── tests/ # 테스트 파일 (생성 예정)
61
- └── scripts/ # 빌드/배포 스크립트
62
- ```
63
-
64
- ---
65
-
66
- ## 2. 개발 도구 설정
67
-
68
- ### 2.1 Jest 테스트 프레임워크 설정
69
-
70
- aiwf는 ES 모듈 기반 프로젝트이므로 Jest 설정 시 ES 모듈 지원이 필요합니다.
71
-
72
- #### 설치
73
-
74
- ```bash
75
- npm install --save-dev jest @jest/globals
76
- ```
77
-
78
- #### jest.config.js 설정
79
-
80
- ```javascript
81
- export default {
82
- preset: "jest-esm",
83
- extensionsToTreatAsEsm: [".js"],
84
- globals: {
85
- "ts-jest": {
86
- useESM: true,
87
- },
88
- },
89
- moduleNameMapping: {
90
- "^(\\.{1,2}/.*)\\.js$": "$1",
91
- },
92
- transform: {},
93
- testEnvironment: "node",
94
- collectCoverageFrom: ["index.js", "!node_modules/**", "!coverage/**"],
95
- coverageReporters: ["text", "lcov", "html"],
96
- testMatch: ["<rootDir>/tests/**/*.test.js"],
97
- };
98
- ```
99
-
100
- #### package.json 테스트 스크립트
101
-
102
- ```json
103
- {
104
- "scripts": {
105
- "test": "jest",
106
- "test:watch": "jest --watch",
107
- "test:coverage": "jest --coverage",
108
- "test:ci": "jest --ci --coverage --watchAll=false"
109
- }
110
- }
111
- ```
112
-
113
- ### 2.2 ESLint & Prettier 설정
114
-
115
- 코드 품질과 일관성을 위한 린팅 및 포맷팅 도구 설정입니다.
116
-
117
- #### 설치
118
-
119
- ```bash
120
- npm install --save-dev eslint prettier eslint-config-prettier eslint-plugin-prettier
121
- ```
122
-
123
- #### .eslintrc.json 설정
124
-
125
- ```json
126
- {
127
- "env": {
128
- "es2022": true,
129
- "node": true,
130
- "jest": true
131
- },
132
- "extends": ["eslint:recommended", "prettier"],
133
- "plugins": ["prettier"],
134
- "parserOptions": {
135
- "ecmaVersion": 2022,
136
- "sourceType": "module"
137
- },
138
- "rules": {
139
- "prettier/prettier": "error",
140
- "no-console": "off",
141
- "no-unused-vars": ["error", { "argsIgnorePattern": "^_" }],
142
- "prefer-const": "error",
143
- "no-var": "error"
144
- }
145
- }
146
- ```
147
-
148
- #### .prettierrc 설정
149
-
150
- ```json
151
- {
152
- "semi": true,
153
- "trailingComma": "es5",
154
- "singleQuote": true,
155
- "printWidth": 80,
156
- "tabWidth": 2,
157
- "useTabs": false
158
- }
159
- ```
160
-
161
- #### package.json 린팅 스크립트
162
-
163
- ```json
164
- {
165
- "scripts": {
166
- "lint": "eslint .",
167
- "lint:fix": "eslint . --fix",
168
- "format": "prettier --write ."
169
- }
170
- }
171
- ```
172
-
173
- ### 2.3 IDE 통합 설정
174
-
175
- #### VS Code 설정 (.vscode/settings.json)
176
-
177
- ```json
178
- {
179
- "editor.defaultFormatter": "esbenp.prettier-vscode",
180
- "editor.formatOnSave": true,
181
- "editor.codeActionsOnSave": {
182
- "source.fixAll.eslint": true
183
- },
184
- "eslint.validate": ["javascript"],
185
- "files.associations": {
186
- "*.md": "markdown"
187
- }
188
- }
189
- ```
190
-
191
- ---
192
-
193
- ## 3. 개발 워크플로우
194
-
195
- ### 3.1 Git 브랜치 전략
196
-
197
- aiwf 프로젝트는 Git Flow 기반의 브랜치 전략을 사용합니다:
198
-
199
- - **main**: 프로덕션 준비 코드
200
- - **develop**: 개발용 통합 브랜치
201
- - **feature/**: 기능 개발 브랜치
202
- - **hotfix/**: 긴급 수정 브랜치
203
- - **release/**: 릴리스 준비 브랜치
204
-
205
- #### 기능 개발 워크플로우
206
-
207
- ```bash
208
- # 1. develop 브랜치에서 기능 브랜치 생성
209
- git checkout develop
210
- git pull origin develop
211
- git checkout -b feature/your-feature-name
212
-
213
- # 2. 개발 진행
214
- # 코드 작성 및 테스트
215
-
216
- # 3. 변경사항 커밋
217
- git add .
218
- git commit -m "feat: 새로운 기능 설명"
219
-
220
- # 4. 원격 저장소에 푸시
221
- git push origin feature/your-feature-name
222
-
223
- # 5. Pull Request 생성
224
- # GitHub에서 PR 생성하여 코드 리뷰 요청
225
- ```
226
-
227
- ### 3.2 커밋 메시지 컨벤션
228
-
229
- Conventional Commits 형식을 따릅니다:
230
-
231
- ```
232
- <type>(<scope>): <description>
233
-
234
- [optional body]
235
-
236
- [optional footer]
237
- ```
238
-
239
- #### 커밋 타입
240
-
241
- - **feat**: 새로운 기능 추가
242
- - **fix**: 버그 수정
243
- - **docs**: 문서 변경
244
- - **style**: 코드 포맷팅 변경
245
- - **refactor**: 코드 리팩토링
246
- - **test**: 테스트 추가/수정
247
- - **chore**: 빌드 과정 또는 도구 변경
248
-
249
- #### 예시
250
-
251
- ```bash
252
- feat(cli): GitHub API 에러 처리 개선
253
- fix(installer): 백업 파일 생성 시 타임스탬프 오류 수정
254
- docs(readme): 설치 가이드 업데이트
255
- ```
256
-
257
- ### 3.3 코드 리뷰 프로세스
258
-
259
- 1. **자체 검토**: PR 생성 전 자신의 코드 검토
260
- 2. **테스트 통과**: 모든 테스트가 통과하는지 확인
261
- 3. **린팅 통과**: ESLint 및 Prettier 검사 통과
262
- 4. **PR 생성**: 명확한 제목과 설명으로 PR 생성
263
- 5. **리뷰 대응**: 리뷰어의 피드백에 적극적으로 대응
264
- 6. **승인 후 머지**: 승인 받은 후 squash merge 수행
265
-
266
- ---
267
-
268
- ## 4. 코딩 표준
269
-
270
- ### 4.1 JavaScript/ES6+ 스타일 가이드
271
-
272
- #### 변수 선언
273
-
274
- ```javascript
275
- // 좋음: const 우선 사용
276
- const apiUrl = "https://api.github.com";
277
- let mutableValue = 0;
278
-
279
- // 피하기: var 사용 금지
280
- var oldStyle = "avoid";
281
- ```
282
-
283
- #### 함수 선언
284
-
285
- ```javascript
286
- // 좋음: 화살표 함수 사용
287
- const fetchData = async (url) => {
288
- try {
289
- const response = await fetch(url);
290
- return await response.json();
291
- } catch (error) {
292
- console.error("데이터 가져오기 실패:", error);
293
- throw error;
294
- }
295
- };
296
-
297
- // 좋음: 명시적 함수 선언
298
- function processData(data) {
299
- return data.filter((item) => item.isValid);
300
- }
301
- ```
302
-
303
- #### 객체와 배열
304
-
305
- ```javascript
306
- // 좋음: 구조 분해 할당 사용
307
- const { name, version } = packageJson;
308
- const [first, ...rest] = items;
309
-
310
- // 좋음: 스프레드 연산자 사용
311
- const newObject = { ...existingObject, newProperty: "value" };
312
- const newArray = [...existingArray, newItem];
313
- ```
314
-
315
- ### 4.2 파일 및 디렉토리 명명 규칙
316
-
317
- - **파일명**: kebab-case 또는 camelCase
318
- - `github-api.js`, `fileOperations.js`
319
- - **디렉토리명**: kebab-case
320
- - `test-fixtures/`, `github-api/`
321
- - **상수**: UPPER_SNAKE_CASE
322
- - `const API_BASE_URL = 'https://api.github.com';`
323
-
324
- ### 4.3 주석 및 문서화
325
-
326
- ```javascript
327
- /**
328
- * GitHub API에서 파일 콘텐츠를 가져옵니다.
329
- * @param {string} url - GitHub API URL
330
- * @param {Object} options - 요청 옵션
331
- * @returns {Promise<Object>} API 응답 데이터
332
- * @throws {Error} 네트워크 또는 API 오류 시 발생
333
- */
334
- async function fetchGitHubContent(url, options = {}) {
335
- // 구현 내용...
336
- }
337
-
338
- // 복잡한 로직에 대한 인라인 주석
339
- const backupTimestamp = new Date().toISOString().replace(/[:.]/g, "-");
340
- // ISO 문자열에서 파일명에 사용할 수 없는 문자들을 대시로 변경
341
- ```
342
-
343
- ### 4.4 에러 처리 가이드라인
344
-
345
- ```javascript
346
- // 좋음: 구체적인 에러 처리
347
- try {
348
- const result = await someAsyncOperation();
349
- return result;
350
- } catch (error) {
351
- if (error.code === "ENOENT") {
352
- console.error("파일을 찾을 수 없습니다:", error.path);
353
- } else if (error.code === "EACCES") {
354
- console.error("파일 접근 권한이 없습니다:", error.path);
355
- } else {
356
- console.error("예상치 못한 오류:", error.message);
357
- }
358
-
359
- throw new Error(`작업 실패: ${error.message}`);
360
- }
361
- ```
362
-
363
- ---
364
-
365
- ## 5. 테스트 작성
366
-
367
- ### 5.1 테스트 디렉토리 구조
368
-
369
- ```
370
- tests/
371
- ├── unit/ # 단위 테스트
372
- │ ├── github-api.test.js
373
- │ ├── file-operations.test.js
374
- │ └── cli-interface.test.js
375
- ├── integration/ # 통합 테스트
376
- │ └── installer.test.js
377
- ├── fixtures/ # 테스트 데이터
378
- │ ├── mock-github-response.json
379
- │ └── sample-project-structure/
380
- └── helpers/ # 테스트 헬퍼
381
- ├── test-utils.js
382
- └── mock-setup.js
383
- ```
384
-
385
- ### 5.2 단위 테스트 작성 가이드
386
-
387
- ```javascript
388
- // github-api.test.js
389
- import { jest } from "@jest/globals";
390
- import { fetchGitHubContent } from "../../index.js";
391
-
392
- // 네트워크 호출 모킹
393
- jest.mock("https");
394
-
395
- describe("GitHub API functions", () => {
396
- beforeEach(() => {
397
- jest.clearAllMocks();
398
- });
399
-
400
- describe("fetchGitHubContent", () => {
401
- test("성공적으로 데이터를 가져와야 함", async () => {
402
- // Given
403
- const mockUrl = "https://api.github.com/repos/test/repo";
404
- const mockResponse = { name: "test-repo" };
405
-
406
- // Mock 설정
407
- // ...
408
-
409
- // When
410
- const result = await fetchGitHubContent(mockUrl);
411
-
412
- // Then
413
- expect(result).toEqual(mockResponse);
414
- });
415
-
416
- test("네트워크 오류 시 적절한 에러를 발생시켜야 함", async () => {
417
- // Given & When & Then
418
- await expect(fetchGitHubContent("invalid-url")).rejects.toThrow(
419
- "네트워크 오류"
420
- );
421
- });
422
- });
423
- });
424
- ```
425
-
426
- ### 5.3 통합 테스트 작성 가이드
427
-
428
- ```javascript
429
- // installer.test.js
430
- import fs from "fs/promises";
431
- import path from "path";
432
- import { fileURLToPath } from "url";
433
-
434
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
435
-
436
- describe("Installer Integration Tests", () => {
437
- let tempDir;
438
-
439
- beforeEach(async () => {
440
- // 임시 디렉토리 생성
441
- tempDir = await fs.mkdtemp(path.join(__dirname, "temp-"));
442
- });
443
-
444
- afterEach(async () => {
445
- // 임시 디렉토리 정리
446
- await fs.rm(tempDir, { recursive: true, force: true });
447
- });
448
-
449
- test("전체 설치 프로세스가 정상 동작해야 함", async () => {
450
- // 전체 설치 프로세스 테스트
451
- // ...
452
- });
453
- });
454
- ```
455
-
456
- ### 5.4 테스트 베스트 프랙티스
457
-
458
- 1. **AAA 패턴**: Arrange, Act, Assert 구조 사용
459
- 2. **명확한 테스트명**: 테스트가 무엇을 검증하는지 명확히 표현
460
- 3. **독립성**: 각 테스트는 독립적으로 실행 가능해야 함
461
- 4. **모킹**: 외부 의존성은 적절히 모킹하여 테스트 안정성 확보
462
- 5. **커버리지**: 중요한 비즈니스 로직은 높은 커버리지 유지
463
-
464
- ---
465
-
466
- ## 6. CI/CD 파이프라인
467
-
468
- ### 6.1 GitHub Actions 워크플로우
469
-
470
- aiwf 프로젝트는 GitHub Actions를 사용하여 CI/CD를 구성합니다.
471
-
472
- #### .github/workflows/ci.yml
473
-
474
- ```yaml
475
- name: CI/CD Pipeline
476
-
477
- on:
478
- push:
479
- branches: [main, develop]
480
- pull_request:
481
- branches: [main, develop]
482
-
483
- jobs:
484
- test:
485
- runs-on: ubuntu-latest
486
-
487
- strategy:
488
- matrix:
489
- node-version: [14.x, 16.x, 18.x]
490
-
491
- steps:
492
- - uses: actions/checkout@v3
493
-
494
- - name: Node.js ${{ matrix.node-version }} 설정
495
- uses: actions/setup-node@v3
496
- with:
497
- node-version: ${{ matrix.node-version }}
498
- cache: "npm"
499
-
500
- - name: 의존성 설치
501
- run: npm ci
502
-
503
- - name: 린팅 검사
504
- run: npm run lint
505
-
506
- - name: 테스트 실행
507
- run: npm run test:ci
508
-
509
- - name: 커버리지 업로드
510
- uses: codecov/codecov-action@v3
511
- with:
512
- file: ./coverage/lcov.info
513
-
514
- deploy:
515
- needs: test
516
- runs-on: ubuntu-latest
517
- if: github.ref == 'refs/heads/main'
518
-
519
- steps:
520
- - uses: actions/checkout@v3
521
-
522
- - name: Node.js 설정
523
- uses: actions/setup-node@v3
524
- with:
525
- node-version: "18.x"
526
- registry-url: "https://registry.npmjs.org"
527
-
528
- - name: 의존성 설치
529
- run: npm ci
530
-
531
- - name: NPM 배포
532
- run: npm publish
533
- env:
534
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
535
- ```
536
-
537
- ### 6.2 배포 프로세스
538
-
539
- 1. **자동 배포**: main 브랜치에 머지 시 자동으로 NPM에 배포
540
- 2. **버전 관리**: semantic versioning 사용
541
- 3. **릴리스 노트**: GitHub Releases를 통한 변경사항 문서화
542
-
543
- ### 6.3 모니터링 및 알림
544
-
545
- - **빌드 상태**: GitHub Actions 배지를 통한 빌드 상태 확인
546
- - **커버리지**: Codecov를 통한 테스트 커버리지 모니터링
547
- - **의존성 보안**: Dependabot을 통한 의존성 보안 검사
548
-
549
- ---
550
-
551
- ## 7. 문제 해결
552
-
553
- ### 7.1 일반적인 설치 문제
554
-
555
- #### Node.js 버전 문제
556
-
557
- ```bash
558
- # 문제: Node.js 버전이 14.0.0 미만
559
- # 해결: nvm을 사용하여 적절한 버전 설치
560
- nvm install 18
561
- nvm use 18
562
- ```
563
-
564
- #### 권한 문제
565
-
566
- ```bash
567
- # 문제: npm install 시 권한 오류
568
- # 해결: npm 글로벌 디렉토리 권한 변경
569
- npm config set prefix ~/.npm-global
570
- export PATH=~/.npm-global/bin:$PATH
571
- ```
572
-
573
- ### 7.2 테스트 관련 문제 해결
574
-
575
- #### ES 모듈 관련 오류
576
-
577
- ```javascript
578
- // 문제: Jest에서 ES 모듈을 인식하지 못함
579
- // 해결: jest.config.js에서 ES 모듈 설정 확인
580
-
581
- // package.json에 다음 추가
582
- {
583
- "type": "module",
584
- "jest": {
585
- "preset": "jest-esm"
586
- }
587
- }
588
- ```
589
-
590
- #### 네트워크 테스트 불안정성
591
-
592
- ```javascript
593
- // 문제: GitHub API 호출 테스트가 불안정함
594
- // 해결: 적절한 모킹과 타임아웃 설정
595
-
596
- jest.setTimeout(10000); // 10초 타임아웃
597
-
598
- // 네트워크 호출 모킹
599
- jest.mock("https", () => ({
600
- request: jest.fn(),
601
- }));
602
- ```
603
-
604
- ### 7.3 빌드 및 배포 문제
605
-
606
- #### GitHub Actions 실패
607
-
608
- ```yaml
609
- # 문제: CI 파이프라인에서 테스트 실패
610
- # 해결: 로컬에서 CI 환경과 동일한 조건으로 테스트
611
-
612
- # 로컬에서 CI 테스트 실행
613
- npm run test:ci
614
-
615
- # 환경 변수 확인
616
- env | grep NODE
617
- ```
618
-
619
- ### 7.4 IDE 설정 문제
620
-
621
- #### VS Code에서 ESLint 동작하지 않음
622
-
623
- ```json
624
- // .vscode/settings.json
625
- {
626
- "eslint.workingDirectories": ["./"],
627
- "eslint.validate": ["javascript"]
628
- }
629
- ```
630
-
631
- ---
632
-
633
- ## 8. 기여하기
634
-
635
- ### 8.1 기여 가이드라인
636
-
637
- aiwf 프로젝트에 기여하기 위한 단계별 가이드입니다.
638
-
639
- #### 첫 번째 기여 준비
640
-
641
- 1. **이슈 확인**: GitHub Issues에서 작업할 이슈 선택
642
- 2. **포크 생성**: 개인 계정으로 프로젝트 포크
643
- 3. **로컬 설정**: 개발 환경 설정 및 테스트 실행
644
- 4. **브랜치 생성**: feature/issue-번호-설명 형식으로 브랜치 생성
645
-
646
- #### 코드 작성 가이드
647
-
648
- 1. **코딩 표준 준수**: ESLint 및 Prettier 규칙 따르기
649
- 2. **테스트 작성**: 새로운 기능에 대한 테스트 포함
650
- 3. **문서 업데이트**: 필요시 관련 문서 업데이트
651
- 4. **커밋 메시지**: Conventional Commits 형식 준수
652
-
653
- ### 8.2 코드 리뷰 기준
654
-
655
- #### 리뷰어 체크리스트
656
-
657
- - [ ] 코딩 표준 준수 여부
658
- - [ ] 테스트 커버리지 적절성
659
- - [ ] 에러 처리 적절성
660
- - [ ] 성능 영향 고려
661
- - [ ] 보안 취약점 여부
662
- - [ ] 문서화 완성도
663
-
664
- #### 기여자 체크리스트
665
-
666
- - [ ] 모든 테스트 통과
667
- - [ ] 린팅 검사 통과
668
- - [ ] 브랜치 최신 상태 유지
669
- - [ ] PR 설명 명확히 작성
670
- - [ ] 관련 이슈 링크 포함
671
-
672
- ### 8.3 커뮤니티 가이드라인
673
-
674
- #### 행동강령
675
-
676
- 1. **존중**: 모든 기여자를 존중하고 건설적인 피드백 제공
677
- 2. **포용성**: 다양한 배경의 기여자들을 환영
678
- 3. **투명성**: 의사결정 과정을 투명하게 공유
679
- 4. **협력**: 문제 해결을 위한 협력적 자세 유지
680
-
681
- #### 커뮤니케이션 채널
682
-
683
- - **GitHub Issues**: 버그 리포트 및 기능 요청
684
- - **GitHub Discussions**: 일반적인 토론 및 질문
685
- - **Pull Requests**: 코드 리뷰 및 기술적 논의
686
-
687
- ---
688
-
689
- ## 부록
690
-
691
- ### A. 유용한 명령어
692
-
693
- ```bash
694
- # 프로젝트 초기 설정
695
- npm install
696
- npm run setup # 개발 환경 초기 설정 (구현 예정)
697
-
698
- # 개발 중 자주 사용하는 명령어
699
- npm run dev # 개발 모드 실행
700
- npm test # 테스트 실행
701
- npm run lint # 린팅 검사
702
- npm run format # 코드 포맷팅
703
-
704
- # 배포 관련
705
- npm run build # 프로덕션 빌드
706
- npm run release # 릴리스 준비 (구현 예정)
707
- ```
708
-
709
- ### B. 참고 자료
710
-
711
- - [Node.js 공식 문서](https://nodejs.org/docs/)
712
- - [Jest 공식 문서](https://jestjs.io/docs/getting-started)
713
- - [ESLint 공식 문서](https://eslint.org/docs/user-guide/)
714
- - [Conventional Commits](https://www.conventionalcommits.org/)
715
- - [GitHub Actions 문서](https://docs.github.com/en/actions)
716
-
717
- ### C. 문의 및 지원
718
-
719
- 프로젝트 관련 문의나 지원이 필요한 경우:
720
-
721
- 1. **GitHub Issues**: 버그 리포트 및 기능 요청
722
- 2. **GitHub Discussions**: 일반적인 질문 및 토론
723
- 3. **이메일**: 긴급한 보안 문제 등
724
-
725
- ---
726
-
727
- 이 문서는 aiwf 프로젝트의 발전과 함께 지속적으로 업데이트됩니다. 개선 사항이나 추가할 내용이 있다면 언제든지 기여해 주세요!