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,599 +0,0 @@
1
- /**
2
- * Task Analyzer
3
- * Analyzes tasks to determine the optimal AI persona
4
- */
5
-
6
- import fs from 'fs/promises';
7
- import path from 'path';
8
- import { EventEmitter } from 'events';
9
- import { execSync } from 'child_process';
10
-
11
- class TaskAnalyzer extends EventEmitter {
12
- constructor(options = {}) {
13
- super();
14
-
15
- this.options = {
16
- recentFileLimit: options.recentFileLimit || 10,
17
- keywordWeight: options.keywordWeight || 0.4,
18
- patternWeight: options.patternWeight || 0.3,
19
- contextWeight: options.contextWeight || 0.2,
20
- historyWeight: options.historyWeight || 0.1,
21
- ...options
22
- };
23
-
24
- // Pattern definitions for each persona
25
- this.patterns = {
26
- architect: {
27
- keywords: [
28
- 'design', 'architect', 'structure', 'system', 'scalab',
29
- 'interface', 'api', 'contract', 'schema', 'pattern',
30
- 'module', 'component', 'integration', 'dependency'
31
- ],
32
- filePatterns: ['*.md', '*.yml', '*.yaml', 'architecture/**', 'design/**'],
33
- contextIndicators: ['creating new feature', 'planning', 'designing']
34
- },
35
-
36
- debugger: {
37
- keywords: [
38
- 'bug', 'error', 'fix', 'issue', 'problem', 'debug',
39
- 'trace', 'stack', 'exception', 'fail', 'crash',
40
- 'investigate', 'diagnose', 'troubleshoot'
41
- ],
42
- filePatterns: ['*.log', '*.test.*', 'test/**', 'debug/**'],
43
- contextIndicators: ['error in', 'not working', 'broken', 'failing']
44
- },
45
-
46
- reviewer: {
47
- keywords: [
48
- 'review', 'audit', 'check', 'quality', 'standard',
49
- 'security', 'vulnerability', 'smell', 'refactor',
50
- 'improve', 'optimize', 'clean', 'lint'
51
- ],
52
- filePatterns: ['*.js', '*.ts', '*.py', 'src/**', 'lib/**'],
53
- contextIndicators: ['review code', 'check quality', 'pull request']
54
- },
55
-
56
- documenter: {
57
- keywords: [
58
- 'document', 'docs', 'readme', 'guide', 'tutorial',
59
- 'explain', 'describe', 'comment', 'annotation',
60
- 'example', 'usage', 'api', 'reference'
61
- ],
62
- filePatterns: ['*.md', 'README*', 'docs/**', 'examples/**'],
63
- contextIndicators: ['write documentation', 'explain', 'document']
64
- },
65
-
66
- optimizer: {
67
- keywords: [
68
- 'optimiz', 'performance', 'speed', 'efficient',
69
- 'benchmark', 'profile', 'memory', 'token',
70
- 'slow', 'bottleneck', 'improve', 'fast'
71
- ],
72
- filePatterns: ['*.bench.*', 'benchmark/**', 'perf/**'],
73
- contextIndicators: ['optimize', 'improve performance', 'too slow']
74
- },
75
-
76
- developer: {
77
- keywords: [
78
- 'implement', 'create', 'build', 'develop',
79
- 'add', 'feature', 'function', 'code',
80
- 'write', 'make', 'new', 'update'
81
- ],
82
- filePatterns: ['*.js', '*.ts', '*.py', 'src/**', 'lib/**'],
83
- contextIndicators: ['implement', 'create', 'build', 'add feature']
84
- }
85
- };
86
-
87
- // Compile regex patterns
88
- this.compiledPatterns = {};
89
- for (const [persona, config] of Object.entries(this.patterns)) {
90
- this.compiledPatterns[persona] = {
91
- keywordRegex: new RegExp(config.keywords.join('|'), 'i'),
92
- contextRegex: new RegExp(config.contextIndicators.join('|'), 'i')
93
- };
94
- }
95
- }
96
-
97
- /**
98
- * Analyze a task to determine characteristics
99
- */
100
- async analyzeTask(taskContext) {
101
- const analysis = {
102
- command: taskContext.command || '',
103
- description: taskContext.description || '',
104
- recentFiles: await this.getRecentFiles(),
105
- keywords: this.extractKeywords(taskContext),
106
- gitContext: await this.getGitContext(),
107
- errorState: await this.checkErrorState(),
108
- fileTypes: await this.analyzeFileTypes(),
109
- scores: {},
110
- timestamp: new Date()
111
- };
112
-
113
- // Calculate scores for each persona
114
- for (const personaName of Object.keys(this.patterns)) {
115
- analysis.scores[personaName] = await this.calculatePersonaScore(
116
- personaName,
117
- analysis
118
- );
119
- }
120
-
121
- // Determine primary task type
122
- analysis.primaryType = this.determinePrimaryType(analysis.scores);
123
-
124
- this.emit('taskAnalyzed', analysis);
125
- return analysis;
126
- }
127
-
128
- /**
129
- * Extract keywords from task context
130
- */
131
- extractKeywords(taskContext) {
132
- const text = `${taskContext.command || ''} ${taskContext.description || ''}`;
133
-
134
- // Split into words and filter
135
- const words = text
136
- .toLowerCase()
137
- .split(/\s+/)
138
- .filter(word => word.length > 2)
139
- .filter(word => !this.isStopWord(word));
140
-
141
- // Find matching keywords for any persona
142
- const keywords = [];
143
- for (const [persona, config] of Object.entries(this.patterns)) {
144
- for (const keyword of config.keywords) {
145
- if (words.some(word => word.includes(keyword))) {
146
- keywords.push(keyword);
147
- }
148
- }
149
- }
150
-
151
- return [...new Set(keywords)]; // Remove duplicates
152
- }
153
-
154
- /**
155
- * Check if word is a stop word
156
- */
157
- isStopWord(word) {
158
- const stopWords = [
159
- 'the', 'is', 'at', 'which', 'on', 'and', 'a', 'an',
160
- 'as', 'are', 'been', 'by', 'for', 'from', 'has', 'have',
161
- 'in', 'it', 'of', 'or', 'that', 'to', 'was', 'will', 'with'
162
- ];
163
- return stopWords.includes(word);
164
- }
165
-
166
- /**
167
- * Get recently modified files
168
- */
169
- async getRecentFiles() {
170
- try {
171
- // Use git to get recently modified files
172
- const output = execSync(
173
- `git log --name-only --pretty=format: -${this.options.recentFileLimit} | sort | uniq | grep -v '^$'`,
174
- { encoding: 'utf-8', cwd: process.cwd() }
175
- );
176
-
177
- return output
178
- .split('\n')
179
- .filter(file => file.trim())
180
- .slice(0, this.options.recentFileLimit);
181
- } catch (error) {
182
- // Fallback to file system scan
183
- return await this.scanRecentFiles();
184
- }
185
- }
186
-
187
- /**
188
- * Scan file system for recent files
189
- */
190
- async scanRecentFiles() {
191
- const files = [];
192
- const now = Date.now();
193
- const maxAge = 7 * 24 * 60 * 60 * 1000; // 7 days
194
-
195
- async function scan(dir, level = 0) {
196
- if (level > 3) return; // Max depth
197
-
198
- try {
199
- const entries = await fs.readdir(dir, { withFileTypes: true });
200
-
201
- for (const entry of entries) {
202
- if (entry.name.startsWith('.') || entry.name === 'node_modules') {
203
- continue;
204
- }
205
-
206
- const fullPath = path.join(dir, entry.name);
207
-
208
- if (entry.isDirectory()) {
209
- await scan(fullPath, level + 1);
210
- } else {
211
- const stats = await fs.stat(fullPath);
212
- if (now - stats.mtime.getTime() < maxAge) {
213
- files.push({
214
- path: path.relative(process.cwd(), fullPath),
215
- modified: stats.mtime
216
- });
217
- }
218
- }
219
- }
220
- } catch (error) {
221
- // Ignore errors
222
- }
223
- }
224
-
225
- await scan(process.cwd());
226
-
227
- // Sort by modification time and return paths
228
- return files
229
- .sort((a, b) => b.modified - a.modified)
230
- .slice(0, this.options.recentFileLimit)
231
- .map(f => f.path);
232
- }
233
-
234
- /**
235
- * Get git context
236
- */
237
- async getGitContext() {
238
- const context = {
239
- branch: null,
240
- isPullRequest: false,
241
- hasUncommittedChanges: false,
242
- recentCommitTypes: []
243
- };
244
-
245
- try {
246
- // Get current branch
247
- context.branch = execSync('git branch --show-current', {
248
- encoding: 'utf-8'
249
- }).trim();
250
-
251
- // Check if PR branch
252
- context.isPullRequest = context.branch.includes('feature/') ||
253
- context.branch.includes('fix/') ||
254
- context.branch.includes('pr/');
255
-
256
- // Check for uncommitted changes
257
- const status = execSync('git status --porcelain', {
258
- encoding: 'utf-8'
259
- });
260
- context.hasUncommittedChanges = status.trim().length > 0;
261
-
262
- // Get recent commit types
263
- const commits = execSync('git log --pretty=format:%s -10', {
264
- encoding: 'utf-8'
265
- }).split('\n');
266
-
267
- context.recentCommitTypes = commits
268
- .map(msg => {
269
- const match = msg.match(/^(\w+)(\(.*?\))?:/);
270
- return match ? match[1] : null;
271
- })
272
- .filter(Boolean);
273
- } catch (error) {
274
- // Git not available or not a git repo
275
- }
276
-
277
- return context;
278
- }
279
-
280
- /**
281
- * Check for error state
282
- */
283
- async checkErrorState() {
284
- const errorState = {
285
- hasErrors: false,
286
- errorFiles: [],
287
- testFailures: false
288
- };
289
-
290
- try {
291
- // Check for error logs
292
- const errorLogPatterns = ['error.log', 'errors.log', '*.error.log'];
293
- for (const pattern of errorLogPatterns) {
294
- try {
295
- const files = await this.findFiles(pattern);
296
- if (files.length > 0) {
297
- errorState.hasErrors = true;
298
- errorState.errorFiles.push(...files);
299
- }
300
- } catch (error) {
301
- // Ignore
302
- }
303
- }
304
-
305
- // Check test status
306
- try {
307
- execSync('npm test -- --passWithNoTests', {
308
- encoding: 'utf-8',
309
- stdio: 'pipe'
310
- });
311
- } catch (error) {
312
- errorState.testFailures = true;
313
- errorState.hasErrors = true;
314
- }
315
- } catch (error) {
316
- // Ignore errors in error checking
317
- }
318
-
319
- return errorState;
320
- }
321
-
322
- /**
323
- * Analyze file types in project
324
- */
325
- async analyzeFileTypes() {
326
- const fileTypes = {
327
- hasTests: false,
328
- hasDocumentation: false,
329
- hasConfiguration: false,
330
- primaryLanguage: null,
331
- frameworks: []
332
- };
333
-
334
- try {
335
- // Check for test files
336
- fileTypes.hasTests = await this.checkFileExists(['*.test.*', '*.spec.*', 'test/**']);
337
-
338
- // Check for documentation
339
- fileTypes.hasDocumentation = await this.checkFileExists(['*.md', 'docs/**']);
340
-
341
- // Check for configuration
342
- fileTypes.hasConfiguration = await this.checkFileExists(['*.config.*', '*.json', '*.yml']);
343
-
344
- // Determine primary language
345
- const languages = {
346
- javascript: await this.countFiles(['*.js', '*.jsx']),
347
- typescript: await this.countFiles(['*.ts', '*.tsx']),
348
- python: await this.countFiles(['*.py']),
349
- java: await this.countFiles(['*.java'])
350
- };
351
-
352
- fileTypes.primaryLanguage = Object.entries(languages)
353
- .sort(([,a], [,b]) => b - a)[0][0];
354
-
355
- // Detect frameworks
356
- if (await this.checkFileExists('package.json')) {
357
- try {
358
- const pkg = JSON.parse(
359
- await fs.readFile(path.join(process.cwd(), 'package.json'), 'utf-8')
360
- );
361
-
362
- const deps = { ...pkg.dependencies, ...pkg.devDependencies };
363
-
364
- if (deps.react) fileTypes.frameworks.push('react');
365
- if (deps.vue) fileTypes.frameworks.push('vue');
366
- if (deps.angular) fileTypes.frameworks.push('angular');
367
- if (deps.express) fileTypes.frameworks.push('express');
368
- if (deps.next) fileTypes.frameworks.push('nextjs');
369
- } catch (error) {
370
- // Ignore
371
- }
372
- }
373
- } catch (error) {
374
- // Ignore errors
375
- }
376
-
377
- return fileTypes;
378
- }
379
-
380
- /**
381
- * Calculate score for a specific persona
382
- */
383
- async calculatePersonaScore(personaName, analysis) {
384
- const config = this.patterns[personaName];
385
- const compiled = this.compiledPatterns[personaName];
386
-
387
- let score = 0;
388
-
389
- // Keyword matching in command/description
390
- const text = `${analysis.command} ${analysis.description}`.toLowerCase();
391
- const keywordMatches = (text.match(compiled.keywordRegex) || []).length;
392
- score += keywordMatches * 10;
393
-
394
- // Context indicator matching
395
- if (compiled.contextRegex.test(text)) {
396
- score += 20;
397
- }
398
-
399
- // File pattern matching
400
- if (analysis.recentFiles?.length) {
401
- const matchingFiles = analysis.recentFiles.filter(file =>
402
- config.filePatterns.some(pattern => this.matchesFilePattern(file, pattern))
403
- );
404
- score += (matchingFiles.length / analysis.recentFiles.length) * 30;
405
- }
406
-
407
- // Special context bonuses
408
- score += this.applyContextBonuses(personaName, analysis);
409
-
410
- return Math.min(score, 100); // Cap at 100
411
- }
412
-
413
- /**
414
- * Apply context-specific bonuses
415
- */
416
- applyContextBonuses(personaName, analysis) {
417
- let bonus = 0;
418
-
419
- switch (personaName) {
420
- case 'debugger':
421
- if (analysis.errorState?.hasErrors) bonus += 30;
422
- if (analysis.errorState?.testFailures) bonus += 20;
423
- if (analysis.gitContext?.recentCommitTypes.includes('fix')) bonus += 10;
424
- break;
425
-
426
- case 'reviewer':
427
- if (analysis.gitContext?.isPullRequest) bonus += 25;
428
- if (analysis.command?.includes('review')) bonus += 20;
429
- break;
430
-
431
- case 'architect':
432
- if (analysis.command?.includes('design')) bonus += 20;
433
- if (analysis.fileTypes?.hasConfiguration) bonus += 10;
434
- if (!analysis.fileTypes?.hasTests) bonus += 15; // Early stage project
435
- break;
436
-
437
- case 'documenter':
438
- if (analysis.fileTypes?.hasDocumentation) bonus += 15;
439
- if (analysis.command?.includes('document')) bonus += 25;
440
- break;
441
-
442
- case 'optimizer':
443
- if (analysis.command?.includes('slow')) bonus += 20;
444
- if (analysis.command?.includes('performance')) bonus += 25;
445
- break;
446
- }
447
-
448
- return bonus;
449
- }
450
-
451
- /**
452
- * Determine primary task type from scores
453
- */
454
- determinePrimaryType(scores) {
455
- const sorted = Object.entries(scores)
456
- .sort(([,a], [,b]) => b - a);
457
-
458
- // If top score is significantly higher, return it
459
- if (sorted[0][1] > sorted[1][1] * 1.5) {
460
- return sorted[0][0];
461
- }
462
-
463
- // Otherwise, consider it mixed and return developer
464
- return 'developer';
465
- }
466
-
467
- /**
468
- * Calculate similarity between two tasks
469
- */
470
- calculateSimilarity(task1, task2) {
471
- if (!task1 || !task2) return 0;
472
-
473
- // Extract features from both tasks
474
- const features1 = this.extractTaskFeatures(task1);
475
- const features2 = this.extractTaskFeatures(task2);
476
-
477
- // Calculate Jaccard similarity
478
- const intersection = features1.filter(f => features2.includes(f));
479
- const union = [...new Set([...features1, ...features2])];
480
-
481
- return union.length > 0 ? intersection.length / union.length : 0;
482
- }
483
-
484
- /**
485
- * Extract features from a task for similarity comparison
486
- */
487
- extractTaskFeatures(task) {
488
- const features = [];
489
-
490
- // Add keywords
491
- if (task.keywords) {
492
- features.push(...task.keywords);
493
- }
494
-
495
- // Add primary type
496
- if (task.primaryType) {
497
- features.push(`type:${task.primaryType}`);
498
- }
499
-
500
- // Add file types
501
- if (task.fileTypes) {
502
- if (task.fileTypes.primaryLanguage) {
503
- features.push(`lang:${task.fileTypes.primaryLanguage}`);
504
- }
505
- if (task.fileTypes.frameworks) {
506
- task.fileTypes.frameworks.forEach(fw =>
507
- features.push(`framework:${fw}`)
508
- );
509
- }
510
- }
511
-
512
- return features;
513
- }
514
-
515
- /**
516
- * Check if file exists matching patterns
517
- */
518
- async checkFileExists(patterns) {
519
- for (const pattern of (Array.isArray(patterns) ? patterns : [patterns])) {
520
- const files = await this.findFiles(pattern);
521
- if (files.length > 0) return true;
522
- }
523
- return false;
524
- }
525
-
526
- /**
527
- * Count files matching patterns
528
- */
529
- async countFiles(patterns) {
530
- let count = 0;
531
- for (const pattern of (Array.isArray(patterns) ? patterns : [patterns])) {
532
- const files = await this.findFiles(pattern);
533
- count += files.length;
534
- }
535
- return count;
536
- }
537
-
538
- /**
539
- * Find files matching a pattern
540
- */
541
- async findFiles(pattern, dir = process.cwd(), results = []) {
542
- try {
543
- const entries = await fs.readdir(dir, { withFileTypes: true });
544
-
545
- for (const entry of entries) {
546
- if (entry.name.startsWith('.') || entry.name === 'node_modules') {
547
- continue;
548
- }
549
-
550
- const fullPath = path.join(dir, entry.name);
551
-
552
- if (entry.isDirectory() && pattern.includes('**')) {
553
- await this.findFiles(pattern, fullPath, results);
554
- } else if (entry.isFile() && this.matchesFilePattern(entry.name, pattern)) {
555
- results.push(path.relative(process.cwd(), fullPath));
556
- }
557
- }
558
- } catch (error) {
559
- // Ignore errors
560
- }
561
-
562
- return results;
563
- }
564
-
565
- /**
566
- * Check if file matches pattern
567
- */
568
- matchesFilePattern(file, pattern) {
569
- // Simple glob pattern matching
570
- const regex = pattern
571
- .replace(/\*\*/g, '.*')
572
- .replace(/\*/g, '[^/]*')
573
- .replace(/\?/g, '.')
574
- .replace(/\./g, '\\.');
575
-
576
- return new RegExp(regex).test(file);
577
- }
578
-
579
- /**
580
- * Get task analysis for a command
581
- */
582
- async analyzeCommand(command) {
583
- return await this.analyzeTask({
584
- command,
585
- description: '',
586
- timestamp: new Date()
587
- });
588
- }
589
-
590
- /**
591
- * Cleanup resources
592
- */
593
- cleanup() {
594
- this.removeAllListeners();
595
- }
596
- }
597
-
598
- export default TaskAnalyzer;
599
- export { TaskAnalyzer };