@k2works/claude-code-booster 6.4.0 → 6.5.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 (297) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +61 -61
  3. package/bin/claude-code-booster +113 -113
  4. package/lib/assets/.claude/README.md +287 -287
  5. package/lib/assets/.claude/agents/xp-architect.md +250 -250
  6. package/lib/assets/.claude/agents/xp-executive.md +207 -207
  7. package/lib/assets/.claude/agents/xp-interaction-designer.md +239 -239
  8. package/lib/assets/.claude/agents/xp-product-manager.md +245 -245
  9. package/lib/assets/.claude/agents/xp-programmer.md +268 -268
  10. package/lib/assets/.claude/agents/xp-project-manager.md +229 -229
  11. package/lib/assets/.claude/agents/xp-technical-writer.md +224 -224
  12. package/lib/assets/.claude/agents/xp-tester.md +265 -265
  13. package/lib/assets/.claude/agents/xp-user-representative.md +204 -204
  14. package/lib/assets/.claude/scripts/generate-inception-deck.mjs +911 -911
  15. package/lib/assets/.claude/settings.json +11 -11
  16. package/lib/assets/.claude/skills/ai-agent-guidelines/SKILL.md +111 -111
  17. package/lib/assets/.claude/skills/analyzing-architecture/SKILL.md +83 -83
  18. package/lib/assets/.claude/skills/analyzing-business-architecture/SKILL.md +122 -122
  19. package/lib/assets/.claude/skills/analyzing-business-case/SKILL.md +148 -148
  20. package/lib/assets/.claude/skills/analyzing-business-strategy/SKILL.md +277 -277
  21. package/lib/assets/.claude/skills/analyzing-data-model/SKILL.md +77 -77
  22. package/lib/assets/.claude/skills/analyzing-domain-model/SKILL.md +117 -117
  23. package/lib/assets/.claude/skills/analyzing-inception-deck/SKILL.md +84 -84
  24. package/lib/assets/.claude/skills/analyzing-non-functional/SKILL.md +95 -95
  25. package/lib/assets/.claude/skills/analyzing-operation/SKILL.md +95 -95
  26. package/lib/assets/.claude/skills/analyzing-requirements/SKILL.md +91 -91
  27. package/lib/assets/.claude/skills/analyzing-review/SKILL.md +174 -174
  28. package/lib/assets/.claude/skills/analyzing-tech-stack/SKILL.md +101 -101
  29. package/lib/assets/.claude/skills/analyzing-test-strategy/SKILL.md +89 -89
  30. package/lib/assets/.claude/skills/analyzing-ui-design/SKILL.md +80 -80
  31. package/lib/assets/.claude/skills/analyzing-usecases/SKILL.md +72 -72
  32. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/benchmark.json +20 -0
  33. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/benchmark.md +13 -0
  34. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/eval_metadata.json +14 -0
  35. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/grading.json +39 -0
  36. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/adr/001-db.md +12 -0
  37. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/adr/002-cache-strategy.md +20 -0
  38. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/adr/index.md +4 -0
  39. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/design/data-model.md +12 -0
  40. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/design/index.md +3 -0
  41. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/index.md +10 -0
  42. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/log.md +7 -0
  43. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/operation/deploy-old.md +12 -0
  44. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/operation/deploy.md +12 -0
  45. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/operation/index.md +4 -0
  46. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -0
  47. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/report.md +76 -0
  48. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/grading.json +39 -0
  49. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/adr/001-db.md +12 -0
  50. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/adr/002-cache-strategy.md +20 -0
  51. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/adr/index.md +4 -0
  52. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/design/data-model.md +12 -0
  53. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/design/index.md +3 -0
  54. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/index.md +10 -0
  55. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/log.md +7 -0
  56. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/operation/deploy-old.md +12 -0
  57. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/operation/deploy.md +12 -0
  58. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/operation/index.md +4 -0
  59. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -0
  60. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/report.md +22 -0
  61. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/eval_metadata.json +13 -0
  62. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/grading.json +34 -0
  63. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/adr/001-db.md +12 -0
  64. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/adr/002-cache-strategy.md +11 -0
  65. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/adr/index.md +3 -0
  66. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/design/data-model.md +14 -0
  67. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/design/index.md +3 -0
  68. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/index.md +10 -0
  69. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/log.md +7 -0
  70. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/operation/deploy-old.md +12 -0
  71. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/operation/deploy.md +12 -0
  72. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/operation/index.md +4 -0
  73. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -0
  74. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/report.md +61 -0
  75. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/grading.json +34 -0
  76. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/adr/001-db.md +12 -0
  77. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/adr/002-cache-strategy.md +11 -0
  78. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/adr/index.md +3 -0
  79. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/design/data-model.md +13 -0
  80. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/design/index.md +3 -0
  81. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/index.md +10 -0
  82. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/log.md +7 -0
  83. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/operation/deploy-old.md +12 -0
  84. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/operation/deploy.md +12 -0
  85. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/operation/index.md +4 -0
  86. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -0
  87. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/report.md +18 -0
  88. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/eval_metadata.json +13 -0
  89. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/grading.json +34 -0
  90. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/adr/001-db.md +12 -0
  91. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/adr/002-cache-strategy.md +11 -0
  92. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/adr/index.md +3 -0
  93. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/design/data-model.md +12 -0
  94. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/design/index.md +3 -0
  95. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/index.md +10 -0
  96. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/log.md +7 -0
  97. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/operation/deploy-old.md +13 -0
  98. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/operation/deploy.md +12 -0
  99. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/operation/index.md +7 -0
  100. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -0
  101. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/report.md +83 -0
  102. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/grading.json +34 -0
  103. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/adr/001-db.md +12 -0
  104. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/adr/002-cache-strategy.md +11 -0
  105. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/adr/index.md +3 -0
  106. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/design/data-model.md +12 -0
  107. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/design/index.md +3 -0
  108. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/index.md +10 -0
  109. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/log.md +7 -0
  110. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/operation/deploy-old.md +14 -0
  111. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/operation/deploy.md +12 -0
  112. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/operation/index.md +4 -0
  113. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -0
  114. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/report.md +15 -0
  115. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/review.html +1325 -0
  116. package/lib/assets/.claude/skills/closing-iteration/SKILL.md +176 -176
  117. package/lib/assets/.claude/skills/creating-adr/SKILL.md +117 -117
  118. package/lib/assets/.claude/skills/creating-development-strategy/SKILL.md +187 -151
  119. package/lib/assets/.claude/skills/creating-iteration-report/SKILL.md +210 -210
  120. package/lib/assets/.claude/skills/creating-journal/SKILL.md +140 -140
  121. package/lib/assets/.claude/skills/creating-manual/SKILL.md +199 -199
  122. package/lib/assets/.claude/skills/creating-release-report/SKILL.md +161 -161
  123. package/lib/assets/.claude/skills/creating-slides/SKILL.md +86 -86
  124. package/lib/assets/.claude/skills/creating-slides/agents/openai.yaml +4 -4
  125. package/lib/assets/.claude/skills/creating-slides/references/manga-css.md +45 -45
  126. package/lib/assets/.claude/skills/creating-slides/scripts/slide_tools.py +239 -239
  127. package/lib/assets/.claude/skills/developing-backend/SKILL.md +138 -100
  128. package/lib/assets/.claude/skills/developing-frontend/SKILL.md +131 -93
  129. package/lib/assets/.claude/skills/developing-release/SKILL.md +120 -120
  130. package/lib/assets/.claude/skills/developing-review/SKILL.md +175 -175
  131. package/lib/assets/.claude/skills/developing-uiux-review/SKILL.md +207 -207
  132. package/lib/assets/.claude/skills/generating-bmc/SKILL.md +123 -123
  133. package/lib/assets/.claude/skills/generating-slides/SKILL.md +94 -94
  134. package/lib/assets/.claude/skills/git-commit/SKILL.md +81 -81
  135. package/lib/assets/.claude/skills/killing-processes/SKILL.md +44 -44
  136. package/lib/assets/.claude/skills/migrating-ai-dlc/evals/evals.json +59 -59
  137. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/benchmark.json +20 -0
  138. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/benchmark.md +13 -0
  139. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/eval_metadata.json +15 -0
  140. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/grading.json +44 -0
  141. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/adr/index.md +10 -0
  142. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/index.md +15 -0
  143. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/log.md +5 -0
  144. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +966 -0
  145. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/reference/index.md +6 -0
  146. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/reference//343/202/210/343/201/204/343/202/275/343/203/225/343/203/210/343/202/246/343/202/247/343/202/242/343/201/250/343/201/257.md +261 -0
  147. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/reference//343/203/252/343/203/252/343/203/274/343/202/271/343/202/254/343/202/244/343/203/211.md +480 -0
  148. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/reference//347/222/260/345/242/203/345/244/211/346/225/260/347/256/241/347/220/206/343/202/254/343/202/244/343/203/211.md +681 -0
  149. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/report.md +85 -0
  150. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/grading.json +44 -0
  151. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/adr/index.md +8 -0
  152. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/index.md +11 -0
  153. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/log.md +7 -0
  154. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +964 -0
  155. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/reference/index.md +9 -0
  156. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/reference//343/202/210/343/201/204/343/202/275/343/203/225/343/203/210/343/202/246/343/202/247/343/202/242/343/201/250/343/201/257.md +250 -0
  157. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/reference//343/203/252/343/203/252/343/203/274/343/202/271/343/202/254/343/202/244/343/203/211.md +469 -0
  158. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/reference//347/222/260/345/242/203/345/244/211/346/225/260/347/256/241/347/220/206/343/202/254/343/202/244/343/203/211.md +677 -0
  159. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/report.md +49 -0
  160. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/eval_metadata.json +13 -0
  161. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/grading.json +34 -0
  162. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/knowledge_after/index.md +7 -0
  163. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/knowledge_after/log.md +7 -0
  164. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/knowledge_after/metrics/churn.md +9 -0
  165. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/knowledge_after/metrics/income-statement.md +15 -0
  166. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/report.md +147 -0
  167. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/review.html +1325 -0
  168. package/lib/assets/.claude/skills/opening-iteration/SKILL.md +124 -124
  169. package/lib/assets/.claude/skills/operating-backup/SKILL.md +59 -59
  170. package/lib/assets/.claude/skills/operating-cicd/SKILL.md +54 -54
  171. package/lib/assets/.claude/skills/operating-deploy/SKILL.md +67 -67
  172. package/lib/assets/.claude/skills/operating-docs/SKILL.md +219 -219
  173. package/lib/assets/.claude/skills/operating-provision/SKILL.md +77 -77
  174. package/lib/assets/.claude/skills/operating-qt/SKILL.md +147 -147
  175. package/lib/assets/.claude/skills/operating-review/SKILL.md +171 -171
  176. package/lib/assets/.claude/skills/operating-script/SKILL.md +145 -145
  177. package/lib/assets/.claude/skills/operating-setup/SKILL.md +63 -63
  178. package/lib/assets/.claude/skills/orchestrating-analysis/SKILL.md +110 -110
  179. package/lib/assets/.claude/skills/orchestrating-development/SKILL.md +208 -172
  180. package/lib/assets/.claude/skills/orchestrating-operation/SKILL.md +161 -161
  181. package/lib/assets/.claude/skills/orchestrating-project/SKILL.md +149 -149
  182. package/lib/assets/.claude/skills/planning-releases/SKILL.md +121 -121
  183. package/lib/assets/.claude/skills/practicing-getting-start-tdd/SKILL.md +262 -262
  184. package/lib/assets/.claude/skills/syncing-github-project/SKILL.md +151 -151
  185. package/lib/assets/.claude/skills/tracking-progress/SKILL.md +91 -91
  186. package/lib/assets/.claude/skills/validating-design/SKILL.md +130 -130
  187. package/lib/assets/.claude/skills/validating-iteration-plan/SKILL.md +238 -238
  188. package/lib/assets/.claude/skills/validating-operating-setup/SKILL.md +118 -118
  189. package/lib/assets/.devcontainer/devcontainer.json +37 -37
  190. package/lib/assets/.env.example +32 -32
  191. package/lib/assets/.gitattributes +4 -4
  192. package/lib/assets/.github/workflows/docker-publish.yml +77 -77
  193. package/lib/assets/.github/workflows/mkdocs.yml +39 -39
  194. package/lib/assets/AGENTS.md +102 -102
  195. package/lib/assets/README.md +304 -304
  196. package/lib/assets/docker-compose.yml +33 -33
  197. package/lib/assets/docs/adr/index.md +10 -10
  198. package/lib/assets/docs/article/index.md +1 -0
  199. package/lib/assets/docs/assets/css/extra.css +29 -29
  200. package/lib/assets/docs/assets/js/extra.js +48 -48
  201. package/lib/assets/docs/assets/js/mathjax.js +27 -27
  202. package/lib/assets/docs/design/index.md +44 -44
  203. package/lib/assets/docs/development/index.md +39 -39
  204. package/lib/assets/docs/index.md +37 -37
  205. package/lib/assets/docs/log.md +28 -28
  206. package/lib/assets/docs/operation/index.md +41 -41
  207. package/lib/assets/docs/reference/BDD/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211.md +766 -766
  208. package/lib/assets/docs/reference/CodexCLIMCP/343/202/242/343/203/227/343/203/252/343/202/261/343/203/274/343/202/267/343/203/247/343/203/263/351/226/213/347/231/272/343/203/225/343/203/255/343/203/274.md +555 -555
  209. package/lib/assets/docs/reference/CodexCLIMCP/343/202/265/343/203/274/343/203/220/343/203/274/350/250/255/345/256/232/346/211/213/351/240/206.md +351 -351
  210. package/lib/assets/docs/reference/Java/343/202/242/343/203/227/343/203/252/343/202/261/343/203/274/343/202/267/343/203/247/343/203/263/347/222/260/345/242/203/346/247/213/347/257/211/343/202/254/343/202/244/343/203/211.md +592 -592
  211. package/lib/assets/docs/reference/LivingDocumentation/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211.md +400 -0
  212. package/lib/assets/docs/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -965
  213. package/lib/assets/docs/reference/SonarQube/343/203/255/343/203/274/343/202/253/343/203/253/347/222/260/345/242/203/343/202/273/343/203/203/343/203/210/343/202/242/343/203/203/343/203/227/346/211/213/351/240/206/346/233/270.md +652 -652
  214. package/lib/assets/docs/reference/TypeScript/343/202/242/343/203/227/343/203/252/343/202/261/343/203/274/343/202/267/343/203/247/343/203/263/347/222/260/345/242/203/346/247/213/347/257/211/343/202/254/343/202/244/343/203/211.md +476 -476
  215. package/lib/assets/docs/reference/UI/350/250/255/350/250/210/343/202/254/343/202/244/343/203/211.md +460 -460
  216. package/lib/assets/docs/reference/Vim/346/223/215/344/275/234/343/203/236/343/203/213/343/203/245/343/202/242/343/203/253.md +177 -177
  217. package/lib/assets/docs/reference/images/Ansoff.drawio.svg +3 -3
  218. package/lib/assets/docs/reference/images/BMC.drawio.svg +3 -3
  219. package/lib/assets/docs/reference/images/BrandBasicStrategy.drawio.svg +3 -3
  220. package/lib/assets/docs/reference/images/BrandCategorization.drawio.svg +3 -3
  221. package/lib/assets/docs/reference/images/BrandRecurutementStrategy.drawio.svg +3 -3
  222. package/lib/assets/docs/reference/images/BrandValue.drawio.svg +3 -3
  223. package/lib/assets/docs/reference/images/BusinessActivitiy.svg +3 -3
  224. package/lib/assets/docs/reference/images/HRM.drawio.svg +3 -3
  225. package/lib/assets/docs/reference/images/MarketingStructure.drawio.svg +3 -3
  226. package/lib/assets/docs/reference/images/OrganizationElemnts.svg +3 -3
  227. package/lib/assets/docs/reference/images/PPM.drawio.svg +3 -3
  228. package/lib/assets/docs/reference/images/PositioningMap.drawio.svg +3 -3
  229. package/lib/assets/docs/reference/images/ProductLayer.drawio.svg +3 -3
  230. package/lib/assets/docs/reference/images/ProductMix.drawio.svg +3 -3
  231. package/lib/assets/docs/reference/images/SWOT.drawio.svg +3 -3
  232. package/lib/assets/docs/reference/images/TargetMarket.drawio.svg +3 -3
  233. package/lib/assets/docs/reference/images/ThreeGenericStrategies.drawio.svg +3 -3
  234. package/lib/assets/docs/reference/images/VRIO.drawio.svg +3 -3
  235. package/lib/assets/docs/reference/images/ValueChain.drawio.svg +3 -3
  236. package/lib/assets/docs/reference/index.md +66 -62
  237. package/lib/assets/docs/reference//343/202/210/343/201/204/343/202/275/343/203/225/343/203/210/343/202/246/343/202/247/343/202/242/343/201/250/343/201/257.md +250 -250
  238. package/lib/assets/docs/reference//343/202/242/343/203/216/343/203/206/343/203/274/343/202/267/343/203/247/343/203/263/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211.md +268 -0
  239. package/lib/assets/docs/reference//343/202/242/343/203/274/343/202/255/343/203/206/343/202/257/343/203/201/343/203/243/350/250/255/350/250/210/343/202/254/343/202/244/343/203/211.md +2226 -2226
  240. package/lib/assets/docs/reference//343/202/244/343/203/263/343/203/225/343/203/251/350/250/255/350/250/210/343/202/254/343/202/244/343/203/211.md +1888 -1888
  241. package/lib/assets/docs/reference//343/202/250/343/202/257/343/202/271/343/203/210/343/203/252/343/203/274/343/203/240/343/203/227/343/203/255/343/202/260/343/203/251/343/203/237/343/203/263/343/202/260.md +549 -549
  242. package/lib/assets/docs/reference//343/202/254/343/202/244/343/203/211/343/203/204/343/202/242/343/203/274/343/203/273/343/202/265/343/202/244/343/203/210/343/202/267/343/203/274/343/202/244/343/203/263/343/202/260/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211.md +192 -0
  243. package/lib/assets/docs/reference//343/202/263/343/203/274/343/203/207/343/202/243/343/203/263/343/202/260/343/201/250/343/203/206/343/202/271/343/203/210/343/202/254/343/202/244/343/203/211.md +715 -715
  244. package/lib/assets/docs/reference//343/203/200/343/202/244/343/203/212/343/203/237/343/203/203/343/202/257/343/202/255/343/203/245/343/203/254/343/203/274/343/202/267/343/203/247/343/203/263/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211.md +191 -0
  245. package/lib/assets/docs/reference//343/203/206/343/202/271/343/203/210/346/210/246/347/225/245/343/202/254/343/202/244/343/203/211.md +1323 -1323
  246. package/lib/assets/docs/reference//343/203/207/343/203/274/343/202/277/343/203/242/343/203/207/343/203/253/350/250/255/350/250/210/343/202/254/343/202/244/343/203/211.md +321 -321
  247. package/lib/assets/docs/reference//343/203/211/343/203/241/343/202/244/343/203/263/343/203/242/343/203/207/343/203/253/350/250/255/350/250/210/343/202/254/343/202/244/343/203/211.md +609 -609
  248. package/lib/assets/docs/reference//343/203/223/343/202/270/343/203/215/343/202/271/343/202/242/343/203/274/343/202/255/343/203/206/343/202/257/343/203/201/343/203/243/345/210/206/346/236/220/343/202/254/343/202/244/343/203/211.md +537 -537
  249. package/lib/assets/docs/reference//343/203/246/343/203/274/343/202/271/343/202/261/343/203/274/343/202/271/344/275/234/346/210/220/343/202/254/343/202/244/343/203/211.md +699 -699
  250. package/lib/assets/docs/reference//343/203/252/343/203/252/343/203/274/343/202/271/343/202/254/343/202/244/343/203/211.md +470 -470
  251. package/lib/assets/docs/reference//343/203/252/343/203/252/343/203/274/343/202/271/343/203/273/343/202/244/343/203/206/343/203/254/343/203/274/343/202/267/343/203/247/343/203/263/350/250/210/347/224/273/343/202/254/343/202/244/343/203/211.md +580 -580
  252. package/lib/assets/docs/reference//343/203/255/343/202/270/343/202/253/343/203/253/343/202/267/343/203/263/343/202/255/343/203/263/343/202/260.md +1376 -1376
  253. package/lib/assets/docs/reference//344/274/201/346/245/255/347/265/214/345/226/266/350/253/226.md +2647 -2647
  254. package/lib/assets/docs/reference//347/222/260/345/242/203/345/244/211/346/225/260/347/256/241/347/220/206/343/202/254/343/202/244/343/203/211.md +675 -675
  255. package/lib/assets/docs/reference//347/265/214/345/226/266/346/210/246/347/225/245/345/210/206/346/236/220/343/202/254/343/202/244/343/203/211.md +575 -575
  256. package/lib/assets/docs/reference//350/246/201/344/273/266/345/256/232/347/276/251/343/202/254/343/202/244/343/203/211.md +1258 -1258
  257. package/lib/assets/docs/reference//350/250/200/350/252/236/345/210/245/351/226/213/347/231/272/343/202/254/343/202/244/343/203/211.md +527 -527
  258. package/lib/assets/docs/reference//351/201/213/345/226/266/347/256/241/347/220/206.md +1492 -1492
  259. package/lib/assets/docs/reference//351/201/213/347/224/250/343/202/271/343/202/257/343/203/252/343/203/227/343/203/210/344/275/234/346/210/220/343/202/254/343/202/244/343/203/211.md +430 -430
  260. package/lib/assets/docs/reference//351/201/213/347/224/250/350/246/201/344/273/266/345/256/232/347/276/251/343/202/254/343/202/244/343/203/211.md +402 -402
  261. package/lib/assets/docs/reference//351/226/213/347/231/272/343/202/254/343/202/244/343/203/211.md +314 -314
  262. package/lib/assets/docs/reference//351/235/236/346/251/237/350/203/275/350/246/201/344/273/266/345/256/232/347/276/251/343/202/254/343/202/244/343/203/211.md +1246 -1246
  263. package/lib/assets/docs/requirements/index.md +17 -17
  264. package/lib/assets/docs/review/index.md +5 -5
  265. package/lib/assets/docs/strategy/index.md +17 -17
  266. package/lib/assets/docs/template/ADR.md +39 -39
  267. package/lib/assets/docs/template/AWS/343/202/271/343/203/206/343/203/274/343/202/270/343/203/263/343/202/260/347/222/260/345/242/203/343/202/273/343/203/203/343/203/210/343/202/242/343/203/203/343/203/227/346/211/213/351/240/206/346/233/270.md +1375 -1375
  268. package/lib/assets/docs/template/AWS/343/203/227/343/203/255/343/203/200/343/202/257/343/202/267/343/203/247/343/203/263/347/222/260/345/242/203/343/202/273/343/203/203/343/203/210/343/202/242/343/203/203/343/203/227/346/211/213/351/240/206/346/233/270.md +643 -643
  269. package/lib/assets/docs/template/README.md +59 -59
  270. package/lib/assets/docs/template/index.md +24 -24
  271. package/lib/assets/docs/template//343/201/276/343/201/232/343/201/223/343/202/214/343/202/222/350/252/255/343/202/202/343/201/206/343/203/252/343/202/271/343/203/210.md +21 -21
  272. package/lib/assets/docs/template//343/202/242/343/203/227/343/203/252/343/202/261/343/203/274/343/202/267/343/203/247/343/203/263/351/226/213/347/231/272/347/222/260/345/242/203/343/202/273/343/203/203/343/203/210/343/202/242/343/203/203/343/203/227/346/211/213/351/240/206/346/233/270.md +556 -556
  273. package/lib/assets/docs/template//343/202/244/343/203/206/343/203/254/343/203/274/343/202/267/343/203/247/343/203/263/345/256/214/344/272/206/345/240/261/345/221/212/346/233/270.md +68 -68
  274. package/lib/assets/docs/template//343/202/244/343/203/206/343/203/254/343/203/274/343/202/267/343/203/247/343/203/263/350/250/210/347/224/273.md +336 -336
  275. package/lib/assets/docs/template//343/202/244/343/203/263/343/202/273/343/203/227/343/202/267/343/203/247/343/203/263/343/203/207/343/203/203/343/202/255.md +22 -22
  276. package/lib/assets/docs/template//343/203/223/343/202/270/343/203/215/343/202/271/343/202/242/343/203/274/343/202/255/343/203/206/343/202/257/343/203/201/343/203/243.md +388 -388
  277. package/lib/assets/docs/template//343/203/252/343/203/252/343/203/274/343/202/271/345/256/214/344/272/206/345/240/261/345/221/212/346/233/270.md +284 -284
  278. package/lib/assets/docs/template//343/203/252/343/203/252/343/203/274/343/202/271/350/250/210/347/224/273.md +289 -289
  279. package/lib/assets/docs/template//344/272/213/344/276/213/345/210/206/346/236/220.md +522 -522
  280. package/lib/assets/docs/template//344/274/201/346/245/255/345/210/206/346/236/220.md +582 -582
  281. package/lib/assets/docs/template//345/256/214/345/205/250/345/275/242/345/274/217/343/201/256/343/203/246/343/203/274/343/202/271/343/202/261/343/203/274/343/202/271.md +69 -69
  282. package/lib/assets/docs/template//350/246/201/344/273/266/345/256/232/347/276/251.md +669 -669
  283. package/lib/assets/docs/template//350/250/255/350/250/210.md +183 -183
  284. package/lib/assets/docs/template//351/226/213/347/231/272/347/222/260/345/242/203/343/202/273/343/203/203/343/203/210/343/202/242/343/203/203/343/203/227/346/211/213/351/240/206/346/233/270.md +697 -697
  285. package/lib/assets/gulpfile.js +29 -29
  286. package/lib/assets/mkdocs.yml +151 -147
  287. package/lib/assets/ops/docker/sonarqube-local/docker-compose.yml +57 -57
  288. package/lib/assets/ops/scripts/journal.js +180 -180
  289. package/lib/assets/ops/scripts/mkdocs.js +82 -82
  290. package/lib/assets/ops/scripts/release.js +431 -431
  291. package/lib/assets/ops/scripts/sonar_local.js +726 -726
  292. package/lib/assets/ops/scripts/ssh.js +190 -190
  293. package/lib/assets/ops/scripts/vault.js +299 -299
  294. package/lib/assets/package-lock.json +1673 -1673
  295. package/lib/assets/package.json +45 -45
  296. package/lib/gulpfile.js +37 -37
  297. package/package.json +41 -41
@@ -1,299 +1,299 @@
1
- 'use strict';
2
-
3
- import crypto from 'crypto';
4
- import fs from 'fs';
5
- import path from 'path';
6
- import readline from 'readline';
7
-
8
- /**
9
- * Vault - .env ファイルの暗号化・復号化ユーティリティ
10
- *
11
- * 暗号化アルゴリズム: AES-256-GCM
12
- * 鍵導出: PBKDF2 (SHA-512, 100,000 iterations)
13
- */
14
-
15
- const ALGORITHM = 'aes-256-gcm';
16
- const PBKDF2_ITERATIONS = 100000;
17
- const SALT_LENGTH = 32;
18
- const IV_LENGTH = 16;
19
- const AUTH_TAG_LENGTH = 16;
20
- const KEY_LENGTH = 32;
21
-
22
- /**
23
- * パスワードから暗号化キーを導出
24
- * @param {string} password - パスワード
25
- * @param {Buffer} salt - ソルト
26
- * @returns {Buffer} - 導出されたキー
27
- */
28
- function deriveKey(password, salt) {
29
- return crypto.pbkdf2Sync(password, salt, PBKDF2_ITERATIONS, KEY_LENGTH, 'sha512');
30
- }
31
-
32
- /**
33
- * データを暗号化
34
- * @param {string} plaintext - 平文
35
- * @param {string} password - パスワード
36
- * @returns {Buffer} - 暗号化されたデータ (salt + iv + authTag + ciphertext)
37
- */
38
- function encrypt(plaintext, password) {
39
- const salt = crypto.randomBytes(SALT_LENGTH);
40
- const key = deriveKey(password, salt);
41
- const iv = crypto.randomBytes(IV_LENGTH);
42
-
43
- const cipher = crypto.createCipheriv(ALGORITHM, key, iv);
44
- const encrypted = Buffer.concat([
45
- cipher.update(plaintext, 'utf8'),
46
- cipher.final()
47
- ]);
48
- const authTag = cipher.getAuthTag();
49
-
50
- // フォーマット: salt (32) + iv (16) + authTag (16) + ciphertext
51
- return Buffer.concat([salt, iv, authTag, encrypted]);
52
- }
53
-
54
- /**
55
- * データを復号化
56
- * @param {Buffer} encryptedData - 暗号化されたデータ
57
- * @param {string} password - パスワード
58
- * @returns {string} - 復号化された平文
59
- */
60
- function decrypt(encryptedData, password) {
61
- const salt = encryptedData.subarray(0, SALT_LENGTH);
62
- const iv = encryptedData.subarray(SALT_LENGTH, SALT_LENGTH + IV_LENGTH);
63
- const authTag = encryptedData.subarray(SALT_LENGTH + IV_LENGTH, SALT_LENGTH + IV_LENGTH + AUTH_TAG_LENGTH);
64
- const ciphertext = encryptedData.subarray(SALT_LENGTH + IV_LENGTH + AUTH_TAG_LENGTH);
65
-
66
- const key = deriveKey(password, salt);
67
-
68
- const decipher = crypto.createDecipheriv(ALGORITHM, key, iv);
69
- decipher.setAuthTag(authTag);
70
-
71
- const decrypted = Buffer.concat([
72
- decipher.update(ciphertext),
73
- decipher.final()
74
- ]);
75
-
76
- return decrypted.toString('utf8');
77
- }
78
-
79
- /**
80
- * パスワードをプロンプトで取得(シンプル版)
81
- * @param {string} prompt - プロンプトメッセージ
82
- * @returns {Promise<string>} - 入力されたパスワード
83
- */
84
- function promptPassword(prompt) {
85
- return new Promise((resolve) => {
86
- const rl = readline.createInterface({
87
- input: process.stdin,
88
- output: process.stdout
89
- });
90
-
91
- rl.question(prompt, (answer) => {
92
- rl.close();
93
- resolve(answer);
94
- });
95
- });
96
- }
97
-
98
- /**
99
- * 環境変数からパスワードを取得、なければプロンプト
100
- * @returns {Promise<string>} - パスワード
101
- */
102
- async function getPassword() {
103
- const envPassword = process.env.VAULT_PASSWORD;
104
- if (envPassword) {
105
- return envPassword;
106
- }
107
- return promptPassword('Vault password: ');
108
- }
109
-
110
- /**
111
- * 環境変数からパスワードを取得、なければプロンプト(確認付き)
112
- * @returns {Promise<string>} - パスワード
113
- */
114
- async function getPasswordWithConfirm() {
115
- const envPassword = process.env.VAULT_PASSWORD;
116
- if (envPassword) {
117
- return envPassword;
118
- }
119
-
120
- const password = await promptPassword('New vault password: ');
121
- const confirm = await promptPassword('Confirm vault password: ');
122
-
123
- if (password !== confirm) {
124
- throw new Error('Passwords do not match');
125
- }
126
-
127
- return password;
128
- }
129
-
130
- /**
131
- * 確認プロンプト
132
- * @param {string} message - メッセージ
133
- * @returns {Promise<boolean>} - true: yes, false: no
134
- */
135
- function confirm(message) {
136
- return new Promise((resolve) => {
137
- const rl = readline.createInterface({
138
- input: process.stdin,
139
- output: process.stdout
140
- });
141
-
142
- rl.question(message, (answer) => {
143
- rl.close();
144
- resolve(answer.toLowerCase() === 'y');
145
- });
146
- });
147
- }
148
-
149
- // Function to register the vault tasks
150
- export default function (gulp) {
151
- const ENV_FILE = '.env';
152
- const ENCRYPTED_FILE = '.env.vault';
153
-
154
- // Encrypt .env file
155
- gulp.task('vault:encrypt', async () => {
156
- const envPath = path.join(process.cwd(), ENV_FILE);
157
- const encryptedPath = path.join(process.cwd(), ENCRYPTED_FILE);
158
-
159
- // Check if .env exists
160
- if (!fs.existsSync(envPath)) {
161
- throw new Error(`${ENV_FILE} not found`);
162
- }
163
-
164
- // Read .env content
165
- const content = fs.readFileSync(envPath, 'utf8');
166
-
167
- // Get password
168
- const password = await getPasswordWithConfirm();
169
-
170
- if (!password || password.length < 8) {
171
- throw new Error('Password must be at least 8 characters');
172
- }
173
-
174
- // Encrypt
175
- const encrypted = encrypt(content, password);
176
-
177
- // Write encrypted file
178
- fs.writeFileSync(encryptedPath, encrypted);
179
-
180
- console.log(`\nEncrypted ${ENV_FILE} -> ${ENCRYPTED_FILE}`);
181
- console.log(`You can now safely commit ${ENCRYPTED_FILE} to version control.`);
182
- console.log(`\nRemember to keep your password safe!`);
183
- });
184
-
185
- // Decrypt .env.vault file
186
- gulp.task('vault:decrypt', async () => {
187
- const envPath = path.join(process.cwd(), ENV_FILE);
188
- const encryptedPath = path.join(process.cwd(), ENCRYPTED_FILE);
189
-
190
- // Check if .env.vault exists
191
- if (!fs.existsSync(encryptedPath)) {
192
- throw new Error(`${ENCRYPTED_FILE} not found`);
193
- }
194
-
195
- // Check if .env already exists
196
- if (fs.existsSync(envPath)) {
197
- const shouldOverwrite = await confirm(`${ENV_FILE} already exists. Overwrite? (y/N): `);
198
- if (!shouldOverwrite) {
199
- console.log('Aborted.');
200
- return;
201
- }
202
- }
203
-
204
- // Read encrypted content
205
- const encryptedData = fs.readFileSync(encryptedPath);
206
-
207
- // Get password
208
- const password = await getPassword();
209
-
210
- // Decrypt
211
- try {
212
- const decrypted = decrypt(encryptedData, password);
213
-
214
- // Write .env file
215
- fs.writeFileSync(envPath, decrypted);
216
-
217
- console.log(`\nDecrypted ${ENCRYPTED_FILE} -> ${ENV_FILE}`);
218
- } catch (error) {
219
- if (error.message.includes('Unsupported state') || error.code === 'ERR_OSSL_BAD_DECRYPT') {
220
- throw new Error('Invalid password');
221
- }
222
- throw error;
223
- }
224
- });
225
-
226
- // View encrypted file content (without saving)
227
- gulp.task('vault:view', async () => {
228
- const encryptedPath = path.join(process.cwd(), ENCRYPTED_FILE);
229
-
230
- // Check if .env.vault exists
231
- if (!fs.existsSync(encryptedPath)) {
232
- throw new Error(`${ENCRYPTED_FILE} not found`);
233
- }
234
-
235
- // Read encrypted content
236
- const encryptedData = fs.readFileSync(encryptedPath);
237
-
238
- // Get password
239
- const password = await getPassword();
240
-
241
- // Decrypt
242
- try {
243
- const decrypted = decrypt(encryptedData, password);
244
-
245
- console.log(`\n--- ${ENCRYPTED_FILE} contents ---\n`);
246
- console.log(decrypted);
247
- console.log(`\n--- end ---\n`);
248
- } catch (error) {
249
- if (error.message.includes('Unsupported state') || error.code === 'ERR_OSSL_BAD_DECRYPT') {
250
- throw new Error('Invalid password');
251
- }
252
- throw error;
253
- }
254
- });
255
-
256
- // Re-encrypt with new password
257
- gulp.task('vault:rekey', async () => {
258
- const encryptedPath = path.join(process.cwd(), ENCRYPTED_FILE);
259
-
260
- // Check if .env.vault exists
261
- if (!fs.existsSync(encryptedPath)) {
262
- throw new Error(`${ENCRYPTED_FILE} not found`);
263
- }
264
-
265
- // Read encrypted content
266
- const encryptedData = fs.readFileSync(encryptedPath);
267
-
268
- // Get current password
269
- console.log('Enter current password:');
270
- const currentPassword = await promptPassword('Current vault password: ');
271
-
272
- // Decrypt with current password
273
- let decrypted;
274
- try {
275
- decrypted = decrypt(encryptedData, currentPassword);
276
- } catch (error) {
277
- if (error.message.includes('Unsupported state') || error.code === 'ERR_OSSL_BAD_DECRYPT') {
278
- throw new Error('Invalid password');
279
- }
280
- throw error;
281
- }
282
-
283
- // Get new password
284
- console.log('\nEnter new password:');
285
- const newPassword = await getPasswordWithConfirm();
286
-
287
- if (!newPassword || newPassword.length < 8) {
288
- throw new Error('Password must be at least 8 characters');
289
- }
290
-
291
- // Re-encrypt with new password
292
- const reEncrypted = encrypt(decrypted, newPassword);
293
-
294
- // Write encrypted file
295
- fs.writeFileSync(encryptedPath, reEncrypted);
296
-
297
- console.log(`\nRe-encrypted ${ENCRYPTED_FILE} with new password.`);
298
- });
299
- }
1
+ 'use strict';
2
+
3
+ import crypto from 'crypto';
4
+ import fs from 'fs';
5
+ import path from 'path';
6
+ import readline from 'readline';
7
+
8
+ /**
9
+ * Vault - .env ファイルの暗号化・復号化ユーティリティ
10
+ *
11
+ * 暗号化アルゴリズム: AES-256-GCM
12
+ * 鍵導出: PBKDF2 (SHA-512, 100,000 iterations)
13
+ */
14
+
15
+ const ALGORITHM = 'aes-256-gcm';
16
+ const PBKDF2_ITERATIONS = 100000;
17
+ const SALT_LENGTH = 32;
18
+ const IV_LENGTH = 16;
19
+ const AUTH_TAG_LENGTH = 16;
20
+ const KEY_LENGTH = 32;
21
+
22
+ /**
23
+ * パスワードから暗号化キーを導出
24
+ * @param {string} password - パスワード
25
+ * @param {Buffer} salt - ソルト
26
+ * @returns {Buffer} - 導出されたキー
27
+ */
28
+ function deriveKey(password, salt) {
29
+ return crypto.pbkdf2Sync(password, salt, PBKDF2_ITERATIONS, KEY_LENGTH, 'sha512');
30
+ }
31
+
32
+ /**
33
+ * データを暗号化
34
+ * @param {string} plaintext - 平文
35
+ * @param {string} password - パスワード
36
+ * @returns {Buffer} - 暗号化されたデータ (salt + iv + authTag + ciphertext)
37
+ */
38
+ function encrypt(plaintext, password) {
39
+ const salt = crypto.randomBytes(SALT_LENGTH);
40
+ const key = deriveKey(password, salt);
41
+ const iv = crypto.randomBytes(IV_LENGTH);
42
+
43
+ const cipher = crypto.createCipheriv(ALGORITHM, key, iv);
44
+ const encrypted = Buffer.concat([
45
+ cipher.update(plaintext, 'utf8'),
46
+ cipher.final()
47
+ ]);
48
+ const authTag = cipher.getAuthTag();
49
+
50
+ // フォーマット: salt (32) + iv (16) + authTag (16) + ciphertext
51
+ return Buffer.concat([salt, iv, authTag, encrypted]);
52
+ }
53
+
54
+ /**
55
+ * データを復号化
56
+ * @param {Buffer} encryptedData - 暗号化されたデータ
57
+ * @param {string} password - パスワード
58
+ * @returns {string} - 復号化された平文
59
+ */
60
+ function decrypt(encryptedData, password) {
61
+ const salt = encryptedData.subarray(0, SALT_LENGTH);
62
+ const iv = encryptedData.subarray(SALT_LENGTH, SALT_LENGTH + IV_LENGTH);
63
+ const authTag = encryptedData.subarray(SALT_LENGTH + IV_LENGTH, SALT_LENGTH + IV_LENGTH + AUTH_TAG_LENGTH);
64
+ const ciphertext = encryptedData.subarray(SALT_LENGTH + IV_LENGTH + AUTH_TAG_LENGTH);
65
+
66
+ const key = deriveKey(password, salt);
67
+
68
+ const decipher = crypto.createDecipheriv(ALGORITHM, key, iv);
69
+ decipher.setAuthTag(authTag);
70
+
71
+ const decrypted = Buffer.concat([
72
+ decipher.update(ciphertext),
73
+ decipher.final()
74
+ ]);
75
+
76
+ return decrypted.toString('utf8');
77
+ }
78
+
79
+ /**
80
+ * パスワードをプロンプトで取得(シンプル版)
81
+ * @param {string} prompt - プロンプトメッセージ
82
+ * @returns {Promise<string>} - 入力されたパスワード
83
+ */
84
+ function promptPassword(prompt) {
85
+ return new Promise((resolve) => {
86
+ const rl = readline.createInterface({
87
+ input: process.stdin,
88
+ output: process.stdout
89
+ });
90
+
91
+ rl.question(prompt, (answer) => {
92
+ rl.close();
93
+ resolve(answer);
94
+ });
95
+ });
96
+ }
97
+
98
+ /**
99
+ * 環境変数からパスワードを取得、なければプロンプト
100
+ * @returns {Promise<string>} - パスワード
101
+ */
102
+ async function getPassword() {
103
+ const envPassword = process.env.VAULT_PASSWORD;
104
+ if (envPassword) {
105
+ return envPassword;
106
+ }
107
+ return promptPassword('Vault password: ');
108
+ }
109
+
110
+ /**
111
+ * 環境変数からパスワードを取得、なければプロンプト(確認付き)
112
+ * @returns {Promise<string>} - パスワード
113
+ */
114
+ async function getPasswordWithConfirm() {
115
+ const envPassword = process.env.VAULT_PASSWORD;
116
+ if (envPassword) {
117
+ return envPassword;
118
+ }
119
+
120
+ const password = await promptPassword('New vault password: ');
121
+ const confirm = await promptPassword('Confirm vault password: ');
122
+
123
+ if (password !== confirm) {
124
+ throw new Error('Passwords do not match');
125
+ }
126
+
127
+ return password;
128
+ }
129
+
130
+ /**
131
+ * 確認プロンプト
132
+ * @param {string} message - メッセージ
133
+ * @returns {Promise<boolean>} - true: yes, false: no
134
+ */
135
+ function confirm(message) {
136
+ return new Promise((resolve) => {
137
+ const rl = readline.createInterface({
138
+ input: process.stdin,
139
+ output: process.stdout
140
+ });
141
+
142
+ rl.question(message, (answer) => {
143
+ rl.close();
144
+ resolve(answer.toLowerCase() === 'y');
145
+ });
146
+ });
147
+ }
148
+
149
+ // Function to register the vault tasks
150
+ export default function (gulp) {
151
+ const ENV_FILE = '.env';
152
+ const ENCRYPTED_FILE = '.env.vault';
153
+
154
+ // Encrypt .env file
155
+ gulp.task('vault:encrypt', async () => {
156
+ const envPath = path.join(process.cwd(), ENV_FILE);
157
+ const encryptedPath = path.join(process.cwd(), ENCRYPTED_FILE);
158
+
159
+ // Check if .env exists
160
+ if (!fs.existsSync(envPath)) {
161
+ throw new Error(`${ENV_FILE} not found`);
162
+ }
163
+
164
+ // Read .env content
165
+ const content = fs.readFileSync(envPath, 'utf8');
166
+
167
+ // Get password
168
+ const password = await getPasswordWithConfirm();
169
+
170
+ if (!password || password.length < 8) {
171
+ throw new Error('Password must be at least 8 characters');
172
+ }
173
+
174
+ // Encrypt
175
+ const encrypted = encrypt(content, password);
176
+
177
+ // Write encrypted file
178
+ fs.writeFileSync(encryptedPath, encrypted);
179
+
180
+ console.log(`\nEncrypted ${ENV_FILE} -> ${ENCRYPTED_FILE}`);
181
+ console.log(`You can now safely commit ${ENCRYPTED_FILE} to version control.`);
182
+ console.log(`\nRemember to keep your password safe!`);
183
+ });
184
+
185
+ // Decrypt .env.vault file
186
+ gulp.task('vault:decrypt', async () => {
187
+ const envPath = path.join(process.cwd(), ENV_FILE);
188
+ const encryptedPath = path.join(process.cwd(), ENCRYPTED_FILE);
189
+
190
+ // Check if .env.vault exists
191
+ if (!fs.existsSync(encryptedPath)) {
192
+ throw new Error(`${ENCRYPTED_FILE} not found`);
193
+ }
194
+
195
+ // Check if .env already exists
196
+ if (fs.existsSync(envPath)) {
197
+ const shouldOverwrite = await confirm(`${ENV_FILE} already exists. Overwrite? (y/N): `);
198
+ if (!shouldOverwrite) {
199
+ console.log('Aborted.');
200
+ return;
201
+ }
202
+ }
203
+
204
+ // Read encrypted content
205
+ const encryptedData = fs.readFileSync(encryptedPath);
206
+
207
+ // Get password
208
+ const password = await getPassword();
209
+
210
+ // Decrypt
211
+ try {
212
+ const decrypted = decrypt(encryptedData, password);
213
+
214
+ // Write .env file
215
+ fs.writeFileSync(envPath, decrypted);
216
+
217
+ console.log(`\nDecrypted ${ENCRYPTED_FILE} -> ${ENV_FILE}`);
218
+ } catch (error) {
219
+ if (error.message.includes('Unsupported state') || error.code === 'ERR_OSSL_BAD_DECRYPT') {
220
+ throw new Error('Invalid password');
221
+ }
222
+ throw error;
223
+ }
224
+ });
225
+
226
+ // View encrypted file content (without saving)
227
+ gulp.task('vault:view', async () => {
228
+ const encryptedPath = path.join(process.cwd(), ENCRYPTED_FILE);
229
+
230
+ // Check if .env.vault exists
231
+ if (!fs.existsSync(encryptedPath)) {
232
+ throw new Error(`${ENCRYPTED_FILE} not found`);
233
+ }
234
+
235
+ // Read encrypted content
236
+ const encryptedData = fs.readFileSync(encryptedPath);
237
+
238
+ // Get password
239
+ const password = await getPassword();
240
+
241
+ // Decrypt
242
+ try {
243
+ const decrypted = decrypt(encryptedData, password);
244
+
245
+ console.log(`\n--- ${ENCRYPTED_FILE} contents ---\n`);
246
+ console.log(decrypted);
247
+ console.log(`\n--- end ---\n`);
248
+ } catch (error) {
249
+ if (error.message.includes('Unsupported state') || error.code === 'ERR_OSSL_BAD_DECRYPT') {
250
+ throw new Error('Invalid password');
251
+ }
252
+ throw error;
253
+ }
254
+ });
255
+
256
+ // Re-encrypt with new password
257
+ gulp.task('vault:rekey', async () => {
258
+ const encryptedPath = path.join(process.cwd(), ENCRYPTED_FILE);
259
+
260
+ // Check if .env.vault exists
261
+ if (!fs.existsSync(encryptedPath)) {
262
+ throw new Error(`${ENCRYPTED_FILE} not found`);
263
+ }
264
+
265
+ // Read encrypted content
266
+ const encryptedData = fs.readFileSync(encryptedPath);
267
+
268
+ // Get current password
269
+ console.log('Enter current password:');
270
+ const currentPassword = await promptPassword('Current vault password: ');
271
+
272
+ // Decrypt with current password
273
+ let decrypted;
274
+ try {
275
+ decrypted = decrypt(encryptedData, currentPassword);
276
+ } catch (error) {
277
+ if (error.message.includes('Unsupported state') || error.code === 'ERR_OSSL_BAD_DECRYPT') {
278
+ throw new Error('Invalid password');
279
+ }
280
+ throw error;
281
+ }
282
+
283
+ // Get new password
284
+ console.log('\nEnter new password:');
285
+ const newPassword = await getPasswordWithConfirm();
286
+
287
+ if (!newPassword || newPassword.length < 8) {
288
+ throw new Error('Password must be at least 8 characters');
289
+ }
290
+
291
+ // Re-encrypt with new password
292
+ const reEncrypted = encrypt(decrypted, newPassword);
293
+
294
+ // Write encrypted file
295
+ fs.writeFileSync(encryptedPath, reEncrypted);
296
+
297
+ console.log(`\nRe-encrypted ${ENCRYPTED_FILE} with new password.`);
298
+ });
299
+ }