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,498 +0,0 @@
1
- # Security 페르소나 Knowledge Base
2
-
3
- ## 보안 위협 백과사전
4
-
5
- ### 웹 애플리케이션 공격
6
-
7
- #### 1. SQL Injection
8
- ```sql
9
- -- 취약한 코드
10
- SELECT * FROM users WHERE username = '$username' AND password = '$password';
11
-
12
- -- 공격 예시
13
- username: admin' OR '1'='1' --
14
- password: anything
15
-
16
- -- 방어 코드 (파라미터화된 쿼리)
17
- const query = 'SELECT * FROM users WHERE username = ? AND password = ?';
18
- db.query(query, [username, password]);
19
- ```
20
-
21
- #### 2. Cross-Site Scripting (XSS)
22
- ```javascript
23
- // 저장형 XSS 방어
24
- function sanitizeUserInput(input) {
25
- // DOMPurify 라이브러리 사용
26
- return DOMPurify.sanitize(input, {
27
- ALLOWED_TAGS: ['b', 'i', 'em', 'strong', 'a'],
28
- ALLOWED_ATTR: ['href']
29
- });
30
- }
31
-
32
- // 반사형 XSS 방어
33
- function renderUserContent(content) {
34
- const div = document.createElement('div');
35
- div.textContent = content; // innerHTML 대신 textContent 사용
36
- return div;
37
- }
38
-
39
- // CSP 헤더 설정
40
- Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-{random}';
41
- ```
42
-
43
- #### 3. Cross-Site Request Forgery (CSRF)
44
- ```javascript
45
- // CSRF 토큰 생성
46
- class CSRFProtection {
47
- generateToken(sessionId) {
48
- const token = crypto.randomBytes(32).toString('hex');
49
- this.storeToken(sessionId, token);
50
- return token;
51
- }
52
-
53
- validateToken(sessionId, token) {
54
- const storedToken = this.getToken(sessionId);
55
- if (!storedToken || storedToken !== token) {
56
- throw new SecurityError('Invalid CSRF token');
57
- }
58
- // 토큰 재생성 (일회용)
59
- return this.generateToken(sessionId);
60
- }
61
- }
62
-
63
- // Double Submit Cookie Pattern
64
- app.use((req, res, next) => {
65
- const token = req.cookies.csrfToken || crypto.randomBytes(32).toString('hex');
66
- res.cookie('csrfToken', token, { httpOnly: false, sameSite: 'strict' });
67
- req.csrfToken = token;
68
- next();
69
- });
70
- ```
71
-
72
- ### 인증 및 권한 관리
73
-
74
- #### OAuth 2.0 구현
75
- ```javascript
76
- class OAuth2Provider {
77
- // Authorization Code Flow
78
- async authorize(clientId, redirectUri, scope) {
79
- // 1. 사용자 인증
80
- const user = await this.authenticateUser();
81
-
82
- // 2. 클라이언트 검증
83
- const client = await this.validateClient(clientId, redirectUri);
84
-
85
- // 3. 권한 부여 코드 생성
86
- const code = crypto.randomBytes(32).toString('hex');
87
- await this.storeAuthCode(code, {
88
- clientId,
89
- userId: user.id,
90
- scope,
91
- expiresAt: Date.now() + 600000 // 10분
92
- });
93
-
94
- return code;
95
- }
96
-
97
- // Token Exchange
98
- async exchangeToken(code, clientId, clientSecret) {
99
- const authCode = await this.getAuthCode(code);
100
-
101
- // 검증
102
- if (!authCode || authCode.clientId !== clientId) {
103
- throw new Error('Invalid authorization code');
104
- }
105
-
106
- if (Date.now() > authCode.expiresAt) {
107
- throw new Error('Authorization code expired');
108
- }
109
-
110
- // 토큰 생성
111
- const accessToken = this.generateJWT(authCode.userId, authCode.scope);
112
- const refreshToken = crypto.randomBytes(32).toString('hex');
113
-
114
- await this.storeRefreshToken(refreshToken, authCode.userId);
115
- await this.revokeAuthCode(code);
116
-
117
- return { accessToken, refreshToken };
118
- }
119
- }
120
- ```
121
-
122
- #### JWT 보안
123
- ```javascript
124
- class SecureJWT {
125
- constructor() {
126
- this.algorithm = 'RS256'; // 비대칭 키 사용
127
- this.issuer = 'secure-app';
128
- this.audience = 'api.secure-app.com';
129
- }
130
-
131
- generateToken(payload) {
132
- const token = jwt.sign(payload, this.privateKey, {
133
- algorithm: this.algorithm,
134
- expiresIn: '15m', // 짧은 만료 시간
135
- issuer: this.issuer,
136
- audience: this.audience,
137
- jwtid: uuidv4() // 토큰 ID로 재사용 방지
138
- });
139
-
140
- return token;
141
- }
142
-
143
- verifyToken(token) {
144
- try {
145
- const decoded = jwt.verify(token, this.publicKey, {
146
- algorithms: [this.algorithm],
147
- issuer: this.issuer,
148
- audience: this.audience
149
- });
150
-
151
- // 토큰 블랙리스트 확인
152
- if (this.isBlacklisted(decoded.jti)) {
153
- throw new Error('Token revoked');
154
- }
155
-
156
- return decoded;
157
- } catch (error) {
158
- throw new SecurityError('Invalid token: ' + error.message);
159
- }
160
- }
161
- }
162
- ```
163
-
164
- ### 암호화 알고리즘
165
-
166
- #### 대칭키 암호화 (AES)
167
- ```javascript
168
- class AESEncryption {
169
- constructor(key) {
170
- this.algorithm = 'aes-256-gcm';
171
- this.key = Buffer.from(key, 'hex');
172
- }
173
-
174
- encrypt(plaintext) {
175
- const iv = crypto.randomBytes(16);
176
- const cipher = crypto.createCipheriv(this.algorithm, this.key, iv);
177
-
178
- let encrypted = cipher.update(plaintext, 'utf8', 'hex');
179
- encrypted += cipher.final('hex');
180
-
181
- const authTag = cipher.getAuthTag();
182
-
183
- return {
184
- encrypted,
185
- iv: iv.toString('hex'),
186
- authTag: authTag.toString('hex')
187
- };
188
- }
189
-
190
- decrypt(encryptedData) {
191
- const decipher = crypto.createDecipheriv(
192
- this.algorithm,
193
- this.key,
194
- Buffer.from(encryptedData.iv, 'hex')
195
- );
196
-
197
- decipher.setAuthTag(Buffer.from(encryptedData.authTag, 'hex'));
198
-
199
- let decrypted = decipher.update(encryptedData.encrypted, 'hex', 'utf8');
200
- decrypted += decipher.final('utf8');
201
-
202
- return decrypted;
203
- }
204
- }
205
- ```
206
-
207
- #### 비대칭키 암호화 (RSA)
208
- ```javascript
209
- class RSAEncryption {
210
- generateKeyPair() {
211
- const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
212
- modulusLength: 4096,
213
- publicKeyEncoding: {
214
- type: 'spki',
215
- format: 'pem'
216
- },
217
- privateKeyEncoding: {
218
- type: 'pkcs8',
219
- format: 'pem',
220
- cipher: 'aes-256-cbc',
221
- passphrase: process.env.KEY_PASSPHRASE
222
- }
223
- });
224
-
225
- return { publicKey, privateKey };
226
- }
227
-
228
- encrypt(data, publicKey) {
229
- const buffer = Buffer.from(data, 'utf8');
230
- const encrypted = crypto.publicEncrypt(
231
- {
232
- key: publicKey,
233
- padding: crypto.constants.RSA_PKCS1_OAEP_PADDING,
234
- oaepHash: 'sha256'
235
- },
236
- buffer
237
- );
238
-
239
- return encrypted.toString('base64');
240
- }
241
-
242
- decrypt(encryptedData, privateKey) {
243
- const buffer = Buffer.from(encryptedData, 'base64');
244
- const decrypted = crypto.privateDecrypt(
245
- {
246
- key: privateKey,
247
- padding: crypto.constants.RSA_PKCS1_OAEP_PADDING,
248
- oaepHash: 'sha256',
249
- passphrase: process.env.KEY_PASSPHRASE
250
- },
251
- buffer
252
- );
253
-
254
- return decrypted.toString('utf8');
255
- }
256
- }
257
- ```
258
-
259
- ### 네트워크 보안
260
-
261
- #### TLS/SSL 설정
262
- ```javascript
263
- // HTTPS 서버 설정
264
- const https = require('https');
265
- const tls = require('tls');
266
-
267
- const options = {
268
- key: fs.readFileSync('private-key.pem'),
269
- cert: fs.readFileSync('certificate.pem'),
270
-
271
- // 보안 강화 설정
272
- secureOptions: tls.constants.SSL_OP_NO_TLSv1 |
273
- tls.constants.SSL_OP_NO_TLSv1_1,
274
- ciphers: [
275
- 'ECDHE-RSA-AES128-GCM-SHA256',
276
- 'ECDHE-RSA-AES256-GCM-SHA384',
277
- 'ECDHE-RSA-AES128-SHA256',
278
- 'ECDHE-RSA-AES256-SHA384'
279
- ].join(':'),
280
- honorCipherOrder: true,
281
-
282
- // HSTS
283
- hsts: {
284
- maxAge: 31536000,
285
- includeSubDomains: true,
286
- preload: true
287
- }
288
- };
289
-
290
- https.createServer(options, app).listen(443);
291
- ```
292
-
293
- #### 방화벽 규칙
294
- ```bash
295
- # iptables 기본 정책
296
- iptables -P INPUT DROP
297
- iptables -P FORWARD DROP
298
- iptables -P OUTPUT ACCEPT
299
-
300
- # 필요한 포트만 열기
301
- iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS
302
- iptables -A INPUT -p tcp --dport 22 -j ACCEPT # SSH (IP 제한 권장)
303
-
304
- # DDoS 방어
305
- iptables -A INPUT -p tcp --syn -m limit --limit 25/s --limit-burst 50 -j ACCEPT
306
- ```
307
-
308
- ### 보안 모니터링
309
-
310
- #### 이상 탐지 시스템
311
- ```javascript
312
- class AnomalyDetector {
313
- constructor() {
314
- this.baseline = new Map();
315
- this.threshold = 2.5; // 표준편차 배수
316
- }
317
-
318
- // 사용자 행동 분석
319
- analyzeUserBehavior(userId, action) {
320
- const userBaseline = this.baseline.get(userId) || {
321
- loginTimes: [],
322
- ipAddresses: new Set(),
323
- requestRate: []
324
- };
325
-
326
- // 로그인 시간 이상 탐지
327
- if (action.type === 'login') {
328
- const hour = new Date(action.timestamp).getHours();
329
- const avgHour = average(userBaseline.loginTimes);
330
- const stdDev = standardDeviation(userBaseline.loginTimes);
331
-
332
- if (Math.abs(hour - avgHour) > stdDev * this.threshold) {
333
- this.alertSuspiciousLogin(userId, action);
334
- }
335
- }
336
-
337
- // IP 주소 변경 탐지
338
- if (!userBaseline.ipAddresses.has(action.ipAddress)) {
339
- this.alertNewLocation(userId, action);
340
- }
341
-
342
- // 요청 빈도 이상 탐지
343
- const requestsPerMinute = this.calculateRequestRate(userId);
344
- if (requestsPerMinute > userBaseline.avgRate * this.threshold) {
345
- this.alertHighRequestRate(userId, requestsPerMinute);
346
- }
347
- }
348
- }
349
- ```
350
-
351
- #### 보안 이벤트 상관 분석
352
- ```javascript
353
- class SecurityEventCorrelator {
354
- correlateEvents(events) {
355
- const patterns = {
356
- bruteForce: this.detectBruteForce(events),
357
- privilegeEscalation: this.detectPrivilegeEscalation(events),
358
- dataExfiltration: this.detectDataExfiltration(events),
359
- lateralMovement: this.detectLateralMovement(events)
360
- };
361
-
362
- return patterns;
363
- }
364
-
365
- detectBruteForce(events) {
366
- const failedLogins = events.filter(e =>
367
- e.type === 'login_failed' &&
368
- e.timestamp > Date.now() - 300000 // 5분
369
- );
370
-
371
- const attempts = {};
372
- failedLogins.forEach(event => {
373
- const key = `${event.username}:${event.ipAddress}`;
374
- attempts[key] = (attempts[key] || 0) + 1;
375
- });
376
-
377
- return Object.entries(attempts)
378
- .filter(([_, count]) => count > 5)
379
- .map(([key, count]) => ({
380
- type: 'brute_force',
381
- target: key.split(':')[0],
382
- source: key.split(':')[1],
383
- attempts: count
384
- }));
385
- }
386
- }
387
- ```
388
-
389
- ### 컴플라이언스 구현
390
-
391
- #### GDPR 데이터 처리
392
- ```javascript
393
- class GDPRCompliance {
394
- // 동의 관리
395
- async recordConsent(userId, purposes) {
396
- const consent = {
397
- userId,
398
- purposes,
399
- timestamp: new Date().toISOString(),
400
- ipAddress: getClientIP(),
401
- version: 'v1.2'
402
- };
403
-
404
- await this.store.saveConsent(consent);
405
- return consent;
406
- }
407
-
408
- // 데이터 이동권
409
- async exportUserData(userId) {
410
- const data = {
411
- profile: await this.getUserProfile(userId),
412
- activities: await this.getUserActivities(userId),
413
- preferences: await this.getUserPreferences(userId),
414
- consents: await this.getUserConsents(userId)
415
- };
416
-
417
- // 민감한 정보 마스킹
418
- data.profile = this.maskSensitiveData(data.profile);
419
-
420
- return {
421
- exportDate: new Date().toISOString(),
422
- format: 'json',
423
- data: data
424
- };
425
- }
426
-
427
- // 삭제권 (잊혀질 권리)
428
- async deleteUserData(userId) {
429
- // 감사 로그 생성
430
- await this.auditLog.record({
431
- action: 'user_data_deletion',
432
- userId,
433
- timestamp: new Date().toISOString(),
434
- reason: 'GDPR Article 17 Request'
435
- });
436
-
437
- // 데이터 삭제 (보존 의무가 있는 데이터 제외)
438
- await Promise.all([
439
- this.deleteProfile(userId),
440
- this.deleteActivities(userId),
441
- this.deletePreferences(userId),
442
- this.anonymizeTransactions(userId)
443
- ]);
444
- }
445
- }
446
- ```
447
-
448
- ### 보안 테스트 자동화
449
-
450
- #### 취약점 스캐닝 스크립트
451
- ```javascript
452
- class SecurityScanner {
453
- async runSecurityChecks() {
454
- const results = {
455
- timestamp: new Date().toISOString(),
456
- vulnerabilities: []
457
- };
458
-
459
- // 의존성 취약점 검사
460
- const npmAudit = await this.runNpmAudit();
461
- results.vulnerabilities.push(...npmAudit);
462
-
463
- // 보안 헤더 검사
464
- const headers = await this.checkSecurityHeaders();
465
- results.vulnerabilities.push(...headers);
466
-
467
- // SSL/TLS 설정 검사
468
- const ssl = await this.checkSSLConfiguration();
469
- results.vulnerabilities.push(...ssl);
470
-
471
- // 설정 파일 검사
472
- const config = await this.checkConfigurationFiles();
473
- results.vulnerabilities.push(...config);
474
-
475
- return results;
476
- }
477
-
478
- async checkSecurityHeaders() {
479
- const requiredHeaders = [
480
- 'Strict-Transport-Security',
481
- 'X-Frame-Options',
482
- 'X-Content-Type-Options',
483
- 'Content-Security-Policy',
484
- 'X-XSS-Protection'
485
- ];
486
-
487
- const response = await fetch(this.targetUrl);
488
- const missing = requiredHeaders.filter(header =>
489
- !response.headers.has(header)
490
- );
491
-
492
- return missing.map(header => ({
493
- severity: 'medium',
494
- type: 'missing_security_header',
495
- details: `Missing header: ${header}`
496
- }));
497
- }
498
- }
@@ -1,44 +0,0 @@
1
- {
2
- "id": "tester",
3
- "name": "Quality Assurance Engineer",
4
- "description": "Creates test scenarios, ensures quality, and validates functionality",
5
- "focus_areas": [
6
- "Test scenario creation",
7
- "Edge case identification",
8
- "Test automation",
9
- "Quality metrics",
10
- "User acceptance criteria"
11
- ],
12
- "communication_style": {
13
- "tone": "methodical, precise, detail-oriented",
14
- "language": "clear test descriptions with expected outcomes",
15
- "format": "test cases, bug reports, test plans"
16
- },
17
- "capabilities": [
18
- "Design comprehensive test suites",
19
- "Identify edge cases and corner cases",
20
- "Create automated test scripts",
21
- "Perform regression testing",
22
- "Validate acceptance criteria"
23
- ],
24
- "tools_and_methods": [
25
- "Test-driven development",
26
- "Behavior-driven development",
27
- "Exploratory testing",
28
- "Performance testing",
29
- "Security testing"
30
- ],
31
- "output_formats": [
32
- "Test plans",
33
- "Test cases",
34
- "Bug reports",
35
- "Test automation scripts",
36
- "Quality reports"
37
- ],
38
- "example_prompts": [
39
- "Create test cases for the authentication feature",
40
- "Design edge case scenarios for payment processing",
41
- "Write automated tests for the user API",
42
- "Perform security testing on the login flow"
43
- ]
44
- }
@@ -1,78 +0,0 @@
1
- # AIWF 프로젝트 템플릿
2
-
3
- 이 디렉토리에는 AIWF 프로젝트 템플릿이 포함되어 있습니다.
4
-
5
- ## 사용 가능한 템플릿
6
-
7
- ### 1. web-app (웹 애플리케이션)
8
- - React 18 + TypeScript
9
- - Vite 빌드 도구
10
- - Tailwind CSS
11
- - React Router
12
- - Zustand 상태 관리
13
- - AIWF 대시보드 통합
14
-
15
- ### 2. api-server (API 서버)
16
- - Express + TypeScript
17
- - JWT 인증
18
- - Swagger 문서화
19
- - 에러 핸들링
20
- - AIWF API 엔드포인트
21
-
22
- ### 3. npm-library (NPM 라이브러리)
23
- - TypeScript 기반
24
- - Rollup 번들링
25
- - Jest 테스트
26
- - 듀얼 모듈 시스템 (ESM/CJS)
27
- - 자동 버전 관리
28
-
29
- ## 템플릿 사용법
30
-
31
- ```bash
32
- # 대화형 모드
33
- aiwf create
34
-
35
- # 직접 지정
36
- aiwf create web-app my-app
37
-
38
- # 오프라인 모드
39
- aiwf create --offline web-app my-app
40
- ```
41
-
42
- ## 템플릿 구조
43
-
44
- 각 템플릿은 다음 구조를 따릅니다:
45
-
46
- ```
47
- template-name/
48
- ├── config.json # 템플릿 메타데이터
49
- └── template/ # 실제 프로젝트 파일
50
- ├── src/ # 소스 코드
51
- ├── .aiwf/ # AIWF 설정
52
- ├── package.json # 의존성
53
- └── README.md # 프로젝트 문서
54
- ```
55
-
56
- ## 템플릿 커스터마이징
57
-
58
- 템플릿의 플레이스홀더:
59
- - `{{projectName}}` - 프로젝트 이름
60
- - `{{description}}` - 프로젝트 설명
61
- - `{{author}}` - 작성자
62
- - `{{year}}` - 현재 연도
63
- - `{{createdAt}}` - 생성 시간
64
-
65
- ## 캐시 관리
66
-
67
- 템플릿은 오프라인 사용을 위해 캐시될 수 있습니다:
68
-
69
- ```bash
70
- # 캐시 생성
71
- aiwf cache create
72
-
73
- # 캐시 확인
74
- aiwf cache check
75
-
76
- # 캐시 삭제
77
- aiwf cache clear
78
- ```
@@ -1,64 +0,0 @@
1
- {
2
- "name": "api-server",
3
- "displayName": "API 서버 (Node.js + Express)",
4
- "description": "Express와 TypeScript로 구성된 RESTful API 서버 템플릿",
5
- "type": "api-server",
6
- "language": "typescript",
7
- "framework": "express",
8
- "features": [
9
- "Express 4",
10
- "TypeScript",
11
- "JWT Authentication",
12
- "Swagger Documentation",
13
- "Database Ready",
14
- "AIWF Integration",
15
- "Error Handling",
16
- "Request Validation"
17
- ],
18
- "structure": {
19
- "src": "소스 코드",
20
- "tests": "테스트 파일",
21
- ".aiwf": "AIWF 설정 및 메타데이터",
22
- "docs": "API 문서"
23
- },
24
- "dependencies": {
25
- "express": "^4.18.2",
26
- "cors": "^2.8.5",
27
- "helmet": "^7.0.0",
28
- "compression": "^1.7.4",
29
- "dotenv": "^16.3.1",
30
- "jsonwebtoken": "^9.0.1",
31
- "bcryptjs": "^2.4.3",
32
- "express-validator": "^7.0.1",
33
- "swagger-jsdoc": "^6.2.8",
34
- "swagger-ui-express": "^5.0.0"
35
- },
36
- "devDependencies": {
37
- "@types/express": "^4.17.17",
38
- "@types/node": "^20.0.0",
39
- "@types/cors": "^2.8.13",
40
- "@types/compression": "^1.7.2",
41
- "@types/jsonwebtoken": "^9.0.2",
42
- "@types/bcryptjs": "^2.4.2",
43
- "@types/swagger-jsdoc": "^6.0.1",
44
- "@types/swagger-ui-express": "^4.1.3",
45
- "@typescript-eslint/eslint-plugin": "^5.60.0",
46
- "@typescript-eslint/parser": "^5.60.0",
47
- "typescript": "^5.1.0",
48
- "ts-node": "^10.9.0",
49
- "nodemon": "^3.0.0",
50
- "eslint": "^8.43.0",
51
- "jest": "^29.5.0",
52
- "@types/jest": "^29.5.0",
53
- "supertest": "^6.3.0",
54
- "@types/supertest": "^2.0.12"
55
- },
56
- "scripts": {
57
- "dev": "nodemon",
58
- "build": "tsc",
59
- "start": "node dist/index.js",
60
- "test": "jest",
61
- "lint": "eslint . --ext .ts",
62
- "aiwf": "node .aiwf/scripts/cli.js"
63
- }
64
- }