aiwf 0.3.23 → 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.
- package/.claude-plugin/marketplace.json +146 -0
- package/CHANGELOG.md +49 -1
- package/README.ko.md +118 -309
- package/README.md +68 -254
- package/docs/modernization/BROWNFIELD-GREENFIELD.ko.md +105 -0
- package/docs/modernization/CLAUDE-PLAN-REVIEW-2026-10-03.ko.md +77 -0
- package/docs/modernization/CLI-PRODUCTIVITY-REVIEWED-2026-10-03.ko.md +177 -0
- package/docs/modernization/CLI-PRODUCTIVITY.ko.md +193 -0
- package/docs/modernization/CORE-PACKAGE-PLAN.md +7 -0
- package/docs/modernization/DEEP-REVERSE-ENGINEERING.ko.md +88 -0
- package/docs/modernization/DELEGATION-OPTIONAL.ko.md +57 -0
- package/docs/modernization/DIRECTION.ko.md +56 -0
- package/docs/modernization/FULL-TEST-2026-10-03.md +49 -0
- package/docs/modernization/LEGACY-REMOVAL-PLAN.md +9 -0
- package/docs/modernization/PILOT-RESULT-2026-10-03.ko.md +85 -0
- package/docs/modernization/PILOT-UC-001.ko.md +79 -0
- package/docs/modernization/PLAN.md +28 -0
- package/docs/modernization/SKILLS.ko.md +105 -0
- package/docs/modernization/SPRINTABLE.ko.md +47 -0
- package/docs/modernization/SYNC-DOCS-VALIDATION-2026-10-04.ko.md +38 -0
- package/docs/modernization/VALIDATION.md +79 -0
- package/docs/modernization/evidence/example-review-packet.json +115 -0
- package/docs/modernization/evidence/example-spec-pin.json +48 -0
- package/docs/modernization/evidence/full-test-20261003/claude-lint.md +22 -0
- package/docs/modernization/evidence/full-test-20261003/claude-review-retry.md +56 -0
- package/docs/modernization/evidence/full-test-20261003/codex-review-packet.json +159 -0
- package/docs/modernization/evidence/full-test-20261003/src/expense.mjs +40 -0
- package/docs/modernization/evidence/full-test-20261003/summary.json +106 -0
- package/docs/modernization/evidence/full-test-20261003/tests/expense.test.mjs +61 -0
- package/docs/modernization/evidence/local-pilot-20261003/README.ko.md +40 -0
- package/docs/modernization/evidence/local-pilot-20261003/execution.json +1055 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/dependencies.json +24 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/dependencies.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/dependencies.stdout.txt +5 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/docs.json +24 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/docs.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/docs.stdout.txt +6 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/example.json +24 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/example.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/example.stdout.txt +5 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/local-docs.json +24 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/local-docs.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/local-docs.stdout.txt +6 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/node.json +23 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/node.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/node.stdout.txt +535 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/provenance.json +24 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/provenance.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/provenance.stdout.txt +5 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/readme-replay.json +24 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/readme-replay.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/readme-replay.stdout.txt +273 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/upstream.json +24 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/upstream.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/maintenance/upstream.stdout.txt +7 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/archive-service.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/archive-service.stdout.txt +148 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/archive-structure.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/archive-structure.stdout.txt +9 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-check.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-check.stdout.txt +67 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-evidence.json +34 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-packet.json +128 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-packet.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-packet.stdout.txt +128 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-pin.json +54 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-pin.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-pin.stdout.txt +60 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-readback.json +15 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-service.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-service.stdout.txt +82 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-structure.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/baseline-structure.stdout.txt +9 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/changed-check.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/changed-check.stdout.txt +79 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/changed-packet-refused.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/changed-packet-refused.stdout.txt +7 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/changed-pin-refresh.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/changed-pin-refresh.stdout.txt +66 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/changed-pin.json +60 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/changed-structure.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/changed-structure.stdout.txt +9 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-check.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-check.stdout.txt +73 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-evidence.json +34 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-packet.json +134 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-packet.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-packet.stdout.txt +134 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-readback.json +15 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-service.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-service.stdout.txt +148 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-structure.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/final-structure.stdout.txt +9 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/node-version.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/node-version.stdout.txt +1 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/python-version.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/python-version.stdout.txt +1 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/red-evidence.json +34 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/red-packet.json +134 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/red-packet.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/red-packet.stdout.txt +134 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/red-readback.json +15 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/red-service.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/red-service.stdout.txt +266 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/red-structure.stderr.txt +0 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/artifacts/red-structure.stdout.txt +9 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/docs/entity_model.md +33 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/docs/glossary.md +9 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/docs/plans/UC-001.md +20 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/docs/requirements.md +10 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/docs/test_cases/TC-001-submit-expense.md +37 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/docs/test_cases/TC-002-description-limit.md +42 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/docs/use_cases/UC-001-submit-expense.md +76 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/docs/use_cases.puml +12 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/docs/vision.md +21 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/src/expense.mjs +48 -0
- package/docs/modernization/evidence/local-pilot-20261003/project/tests/expense.test.mjs +116 -0
- package/docs/modernization/evidence/local-pilot-20261003/scope.json +31 -0
- package/docs/modernization/reviews/2026-10-03-claude-cli/CONTRACTS.ko.md +122 -0
- package/docs/modernization/reviews/2026-10-03-claude-cli/DIRECTION.ko.md +84 -0
- package/examples/spec-workflow/README.md +54 -0
- package/examples/spec-workflow/docs/entity_model.md +33 -0
- package/examples/spec-workflow/docs/glossary.md +9 -0
- package/examples/spec-workflow/docs/requirements.md +10 -0
- package/examples/spec-workflow/docs/test_cases/TC-001-submit-expense.md +37 -0
- package/examples/spec-workflow/docs/use_cases/UC-001-submit-expense.md +63 -0
- package/examples/spec-workflow/docs/use_cases.puml +12 -0
- package/examples/spec-workflow/docs/vision.md +21 -0
- package/package.json +37 -105
- package/plugins/aiwf-angular-jpa/.claude-plugin/plugin.json +11 -0
- package/plugins/aiwf-angular-jpa/LICENSE +201 -0
- package/plugins/aiwf-angular-jpa/NOTICE +16 -0
- package/plugins/aiwf-angular-jpa/README.md +54 -0
- package/plugins/aiwf-angular-jpa/UPSTREAM.json +35 -0
- package/plugins/aiwf-angular-jpa/agents/uc-coverage.md +263 -0
- package/plugins/aiwf-angular-jpa/rules/mcp-servers.md +64 -0
- package/plugins/aiwf-angular-jpa/skills/coverage-check/SKILL.md +190 -0
- package/plugins/aiwf-angular-jpa/skills/flyway-migration/SKILL.md +119 -0
- package/plugins/aiwf-angular-jpa/skills/implement/SKILL.md +528 -0
- package/plugins/aiwf-angular-jpa/skills/implement/references/module-layout.md +95 -0
- package/plugins/aiwf-angular-jpa/skills/playwright-test/SKILL.md +360 -0
- package/plugins/aiwf-angular-jpa/skills/spring-boot-test/SKILL.md +504 -0
- package/plugins/aiwf-angular-jpa/skills/vitest-test/SKILL.md +309 -0
- package/plugins/aiwf-blazor-dotnet/.claude-plugin/plugin.json +11 -0
- package/plugins/aiwf-blazor-dotnet/LICENSE +201 -0
- package/plugins/aiwf-blazor-dotnet/NOTICE +16 -0
- package/plugins/aiwf-blazor-dotnet/README.md +53 -0
- package/plugins/aiwf-blazor-dotnet/UPSTREAM.json +31 -0
- package/plugins/aiwf-blazor-dotnet/rules/mcp-servers.md +25 -0
- package/plugins/aiwf-blazor-dotnet/skills/bunit-test/SKILL.md +110 -0
- package/plugins/aiwf-blazor-dotnet/skills/dotnet-test/SKILL.md +108 -0
- package/plugins/aiwf-blazor-dotnet/skills/ef-migration/SKILL.md +43 -0
- package/plugins/aiwf-blazor-dotnet/skills/implement/SKILL.md +149 -0
- package/plugins/aiwf-blazor-dotnet/skills/playwright-test/SKILL.md +130 -0
- package/plugins/aiwf-core/.claude-plugin/plugin.json +11 -0
- package/plugins/aiwf-core/LICENSE +201 -0
- package/plugins/aiwf-core/NOTICE +20 -0
- package/plugins/aiwf-core/README.md +38 -0
- package/plugins/aiwf-core/UPSTREAM.json +50 -0
- package/plugins/aiwf-core/skills/entity-model/SKILL.md +160 -0
- package/plugins/aiwf-core/skills/entity-model/references/REFERENCE.md +36 -0
- package/plugins/aiwf-core/skills/requirements/SKILL.md +157 -0
- package/plugins/aiwf-core/skills/requirements/references/REFERENCE.md +70 -0
- package/plugins/aiwf-core/skills/requirements/references/glossary.md +7 -0
- package/plugins/aiwf-core/skills/reverse-engineer/SKILL.md +509 -0
- package/plugins/aiwf-core/skills/reverse-engineer/references/stack-signals.md +210 -0
- package/plugins/aiwf-core/skills/spec-review/SKILL.md +197 -0
- package/plugins/aiwf-core/skills/spec-review/references/lint-codes.md +63 -0
- package/plugins/aiwf-core/skills/spec-review/references/review-checklist.md +189 -0
- package/plugins/aiwf-core/skills/spec-review/scripts/spec_lint.py +1216 -0
- package/plugins/aiwf-core/skills/test-case/SKILL.md +138 -0
- package/plugins/aiwf-core/skills/test-case/references/example-process.bpmn +118 -0
- package/plugins/aiwf-core/skills/test-case/references/example.md +38 -0
- package/plugins/aiwf-core/skills/test-case/references/test-case.md +35 -0
- package/plugins/aiwf-core/skills/test-case/scripts/bpmn_paths.py +542 -0
- package/plugins/aiwf-core/skills/use-case-diagram/SKILL.md +99 -0
- package/plugins/aiwf-core/skills/use-case-spec/SKILL.md +257 -0
- package/plugins/aiwf-core/skills/use-case-spec/references/clarify-checklist.md +70 -0
- package/plugins/aiwf-core/skills/use-case-spec/references/example.md +88 -0
- package/plugins/aiwf-core/skills/use-case-spec/references/format-spec.md +246 -0
- package/plugins/aiwf-core/skills/use-case-spec/references/use-case.md +50 -0
- package/plugins/aiwf-core/skills/use-case-spec/scripts/validate_use_case.py +941 -0
- package/plugins/aiwf-delegate-claude/.claude-plugin/plugin.json +9 -0
- package/plugins/aiwf-delegate-claude/LICENSE +21 -0
- package/plugins/aiwf-delegate-claude/NOTICE +4 -0
- package/plugins/aiwf-delegate-claude/README.md +10 -0
- package/plugins/aiwf-delegate-claude/plugin.json +13 -0
- package/plugins/aiwf-delegate-claude/skills/delegate-claude/LICENSE +21 -0
- package/plugins/aiwf-delegate-claude/skills/delegate-claude/NOTICE +4 -0
- package/plugins/aiwf-delegate-claude/skills/delegate-claude/SKILL.md +49 -0
- package/plugins/aiwf-delegate-claude/skills/delegate-claude/agents/openai.yaml +2 -0
- package/plugins/aiwf-delegate-codex/.claude-plugin/plugin.json +9 -0
- package/plugins/aiwf-delegate-codex/LICENSE +21 -0
- package/plugins/aiwf-delegate-codex/NOTICE +4 -0
- package/plugins/aiwf-delegate-codex/README.md +10 -0
- package/plugins/aiwf-delegate-codex/plugin.json +13 -0
- package/plugins/aiwf-delegate-codex/skills/delegate-codex/LICENSE +21 -0
- package/plugins/aiwf-delegate-codex/skills/delegate-codex/NOTICE +4 -0
- package/plugins/aiwf-delegate-codex/skills/delegate-codex/SKILL.md +47 -0
- package/plugins/aiwf-delegate-codex/skills/delegate-codex/agents/openai.yaml +2 -0
- package/plugins/aiwf-nestjs-nextjs/.claude-plugin/plugin.json +11 -0
- package/plugins/aiwf-nestjs-nextjs/LICENSE +201 -0
- package/plugins/aiwf-nestjs-nextjs/NOTICE +16 -0
- package/plugins/aiwf-nestjs-nextjs/README.md +53 -0
- package/plugins/aiwf-nestjs-nextjs/UPSTREAM.json +32 -0
- package/plugins/aiwf-nestjs-nextjs/rules/mcp-servers.md +59 -0
- package/plugins/aiwf-nestjs-nextjs/skills/drizzle-migration/SKILL.md +222 -0
- package/plugins/aiwf-nestjs-nextjs/skills/implement/SKILL.md +393 -0
- package/plugins/aiwf-nestjs-nextjs/skills/implement/references/project-layout.md +158 -0
- package/plugins/aiwf-nestjs-nextjs/skills/nest-test/SKILL.md +300 -0
- package/plugins/aiwf-nestjs-nextjs/skills/playwright-test/SKILL.md +245 -0
- package/plugins/aiwf-nestjs-nextjs/skills/react-test/SKILL.md +217 -0
- package/plugins/aiwf-spec/.claude-plugin/plugin.json +9 -0
- package/plugins/aiwf-spec/LICENSE +201 -0
- package/plugins/aiwf-spec/NOTICE +20 -0
- package/plugins/aiwf-spec/README.md +36 -0
- package/plugins/aiwf-spec/skills/sync-docs/SKILL.md +47 -0
- package/plugins/aiwf-spec/skills/workflow/SKILL.md +42 -0
- package/plugins/aiwf-vaadin-jooq/.claude-plugin/plugin.json +11 -0
- package/plugins/aiwf-vaadin-jooq/LICENSE +201 -0
- package/plugins/aiwf-vaadin-jooq/NOTICE +16 -0
- package/plugins/aiwf-vaadin-jooq/README.md +56 -0
- package/plugins/aiwf-vaadin-jooq/UPSTREAM.json +43 -0
- package/plugins/aiwf-vaadin-jooq/agents/uc-coverage.md +260 -0
- package/plugins/aiwf-vaadin-jooq/rules/mcp-servers.md +44 -0
- package/plugins/aiwf-vaadin-jooq/skills/browserless-test/SKILL.md +407 -0
- package/plugins/aiwf-vaadin-jooq/skills/browserless-test/references/UC001ManagePersonsTest.java +111 -0
- package/plugins/aiwf-vaadin-jooq/skills/coverage-check/SKILL.md +190 -0
- package/plugins/aiwf-vaadin-jooq/skills/flyway-migration/SKILL.md +70 -0
- package/plugins/aiwf-vaadin-jooq/skills/hilla-test/SKILL.md +350 -0
- package/plugins/aiwf-vaadin-jooq/skills/hilla-test/references/UC001ManagePersonsServiceTest.java +81 -0
- package/plugins/aiwf-vaadin-jooq/skills/hilla-test/references/UC001ManagePersonsViewTest.tsx +87 -0
- package/plugins/aiwf-vaadin-jooq/skills/implement/SKILL.md +196 -0
- package/plugins/aiwf-vaadin-jooq/skills/implement-hilla/SKILL.md +216 -0
- package/plugins/aiwf-vaadin-jooq/skills/karibu-test/SKILL.md +298 -0
- package/plugins/aiwf-vaadin-jooq/skills/karibu-test/references/UC001ManagePersonsTest.java +93 -0
- package/plugins/aiwf-vaadin-jooq/skills/playwright-test/SKILL.md +237 -0
- package/plugins/aiwf-vaadin-jooq/skills/playwright-test/references/ExampleViewIT.java +143 -0
- package/plugins/aiwf-vaadin-jooq/skills/playwright-test/references/TC001CustomerOnboardingIT.java +144 -0
- package/plugins/aiwf-vaadin-jooq/skills/playwright-test/references/dramafinder-api.md +190 -0
- package/scripts/check-dependencies.js +26 -96
- package/scripts/install-spec-skills.mjs +126 -0
- package/scripts/validate-spec-plugin.mjs +145 -0
- package/src/cli/spec-cli.js +292 -0
- package/src/lib/spec-workflow.js +982 -0
- package/docs/ADR_MANAGEMENT_GUIDE.ko.md +0 -602
- package/docs/ADR_MANAGEMENT_GUIDE.md +0 -602
- package/docs/AI-WORKFLOW.ko.md +0 -299
- package/docs/AI-WORKFLOW.md +0 -401
- package/docs/API_REFERENCE_FULL.ko.md +0 -1135
- package/docs/API_REFERENCE_FULL.md +0 -1135
- package/docs/ARCHITECTURE.ko.md +0 -314
- package/docs/ARCHITECTURE.md +0 -314
- package/docs/CLI_USAGE_GUIDE.ko.md +0 -634
- package/docs/CLI_USAGE_GUIDE.md +0 -640
- package/docs/CODE_CLEANUP_GUIDE.ko.md +0 -415
- package/docs/CODE_CLEANUP_GUIDE.md +0 -415
- package/docs/COMMANDS_GUIDE.ko.md +0 -1037
- package/docs/COMMANDS_GUIDE.md +0 -1037
- package/docs/CONTRIBUTING.ko.md +0 -408
- package/docs/CONTRIBUTING.md +0 -408
- package/docs/DEVELOPMENT_GUIDE.ko.md +0 -440
- package/docs/DEVELOPMENT_GUIDE.md +0 -727
- package/docs/EXAMPLES.ko.md +0 -695
- package/docs/EXAMPLES.md +0 -693
- package/docs/GETTING_STARTED.ko.md +0 -219
- package/docs/GETTING_STARTED.md +0 -476
- package/docs/MODULE_MANAGEMENT_GUIDE.ko.md +0 -289
- package/docs/MODULE_MANAGEMENT_GUIDE.md +0 -289
- package/docs/PERFORMANCE_ARCHITECTURE.md +0 -494
- package/docs/PERFORMANCE_GUIDELINES.ko.md +0 -388
- package/docs/PERFORMANCE_GUIDELINES.md +0 -553
- package/docs/PRD.ko.md +0 -148
- package/docs/PRD.md +0 -150
- package/docs/ROADMAP_v0.4.0.md +0 -286
- package/docs/STATE_MANAGEMENT_GUIDE.ko.md +0 -278
- package/docs/STATE_MANAGEMENT_GUIDE.md +0 -278
- package/docs/TROUBLESHOOTING.ko.md +0 -366
- package/docs/TROUBLESHOOTING.md +0 -722
- package/docs/VALIDATOR_API.ko.md +0 -324
- package/docs/VALIDATOR_API.md +0 -324
- package/docs/YOLO_SYSTEM_GUIDE.ko.md +0 -542
- package/docs/YOLO_SYSTEM_GUIDE.md +0 -542
- package/docs/designs/AI_PERSONA_SYSTEM_DESIGN.md +0 -516
- package/docs/designs/API_DOCUMENTATION.md +0 -932
- package/docs/designs/API_REFERENCE.md +0 -979
- package/docs/designs/Enhanced_Installation_Flow_Design.md +0 -498
- package/docs/designs/aiwf-metadata-system-prd.md +0 -127
- package/docs/designs/offline-template-cache.md +0 -323
- package/docs/designs/persona-aware-compression.md +0 -168
- package/docs/guides/ai-personas-guide-ko.md +0 -239
- package/docs/guides/ai-personas-guide.md +0 -239
- package/docs/guides/checkpoint-system-guide-ko.md +0 -356
- package/docs/guides/checkpoint-system-guide.md +0 -356
- package/docs/guides/context-compression-guide-ko.md +0 -313
- package/docs/guides/context-compression-guide.md +0 -313
- package/docs/guides/independent-sprint-guide-ko.md +0 -321
- package/docs/guides/independent-sprint-guide.md +0 -321
- package/rules/global/aiwf-code-style-guide.md +0 -30
- package/rules/global/aiwf-coding-principles.md +0 -33
- package/rules/global/aiwf-development-process.md +0 -41
- package/rules/global/aiwf-global-rules.md +0 -84
- package/rules/manual/aiwf-generate-plan-docs.md +0 -280
- package/scripts/run-integration-tests.js +0 -317
- package/scripts/update-file-lists.js +0 -267
- package/scripts/validate-commands.js +0 -254
- package/src/cli/index.js +0 -184
- package/src/commands/sprint-independent.js +0 -393
- package/src/commands/state.js +0 -1164
- package/src/commands/yolo-config.js +0 -502
- package/src/config/file-lists.js +0 -147
- package/src/config/yolo-config-template.yaml +0 -168
- package/src/lib/backup-manager.js +0 -271
- package/src/lib/file-downloader.js +0 -304
- package/src/lib/installer.js +0 -1270
- package/src/lib/rollback-manager.js +0 -418
- package/src/lib/validator.js +0 -376
- package/src/utils/checkpoint-manager.js +0 -435
- package/src/utils/language-utils.js +0 -331
- package/src/utils/messages.js +0 -190
- package/src/utils/paths.js +0 -112
|
@@ -1,553 +0,0 @@
|
|
|
1
|
-
# AIWF 성능 가이드라인
|
|
2
|
-
|
|
3
|
-
## 개요
|
|
4
|
-
|
|
5
|
-
이 문서는 AIWF 프로젝트에서 최적의 성능을 얻기 위한 가이드라인과 모범 사례를 제공합니다. 개발자들이 성능을 고려한 코드를 작성하고 시스템을 효율적으로 운영할 수 있도록 돕습니다.
|
|
6
|
-
|
|
7
|
-
## 1. GitHub API 사용 최적화
|
|
8
|
-
|
|
9
|
-
### 1.1 캐싱 전략
|
|
10
|
-
|
|
11
|
-
#### 기본 캐싱 사용법
|
|
12
|
-
|
|
13
|
-
```javascript
|
|
14
|
-
import { GitHubAPICache, OptimizedGitHubClient } from './lib/cache-system.js';
|
|
15
|
-
|
|
16
|
-
// 캐시 시스템 초기화
|
|
17
|
-
const githubClient = new OptimizedGitHubClient();
|
|
18
|
-
await githubClient.init();
|
|
19
|
-
|
|
20
|
-
// 자동 캐싱과 함께 API 호출
|
|
21
|
-
const repoData = await githubClient.cachedFetch('https://api.github.com/repos/user/repo');
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
#### 캐시 설정 최적화
|
|
25
|
-
|
|
26
|
-
```javascript
|
|
27
|
-
// 환경별 캐시 설정
|
|
28
|
-
const cacheOptions = {
|
|
29
|
-
cacheDir: process.env.NODE_ENV === 'production' ? '.aiwf/cache' : '.aiwf/cache-dev',
|
|
30
|
-
ttl: process.env.NODE_ENV === 'production' ? 300000 : 60000 // 프로덕션: 5분, 개발: 1분
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
const client = new OptimizedGitHubClient('https://api.github.com', cacheOptions);
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
### 1.2 배치 처리
|
|
37
|
-
|
|
38
|
-
#### 여러 API 호출 최적화
|
|
39
|
-
|
|
40
|
-
```javascript
|
|
41
|
-
// 순차 호출 (비효율적)
|
|
42
|
-
const repos = [];
|
|
43
|
-
for (const repoName of repoNames) {
|
|
44
|
-
repos.push(await client.cachedFetch(`/repos/user/${repoName}`));
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// 배치 처리 (효율적)
|
|
48
|
-
const urls = repoNames.map(name => `/repos/user/${name}`);
|
|
49
|
-
const results = await client.batchRequest(urls, { batchSize: 10 });
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### 1.3 Rate Limiting 대응
|
|
53
|
-
|
|
54
|
-
```javascript
|
|
55
|
-
// Rate Limiter 커스터마이징
|
|
56
|
-
class CustomRateLimiter extends RateLimiter {
|
|
57
|
-
constructor() {
|
|
58
|
-
super(60, 60000); // 분당 60개 요청
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
async waitForNext() {
|
|
62
|
-
// GitHub API 헤더에서 남은 요청 수 확인
|
|
63
|
-
const remaining = this.getRemainingRequests();
|
|
64
|
-
if (remaining < 10) {
|
|
65
|
-
// 남은 요청이 적으면 더 오래 대기
|
|
66
|
-
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
return super.waitForNext();
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
## 2. 파일 시스템 작업 최적화
|
|
75
|
-
|
|
76
|
-
### 2.1 배치 처리 활용
|
|
77
|
-
|
|
78
|
-
#### 단일 파일 작업 (비효율적)
|
|
79
|
-
|
|
80
|
-
```javascript
|
|
81
|
-
// 비효율적인 방법
|
|
82
|
-
for (const filePath of filePaths) {
|
|
83
|
-
const content = await fs.readFile(filePath, 'utf8');
|
|
84
|
-
await processFile(content);
|
|
85
|
-
}
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
#### 배치 처리 (효율적)
|
|
89
|
-
|
|
90
|
-
```javascript
|
|
91
|
-
import { FileBatchProcessor, FileUtils } from './lib/file-batch-processor.js';
|
|
92
|
-
|
|
93
|
-
// 효율적인 방법
|
|
94
|
-
const processor = new FileBatchProcessor({
|
|
95
|
-
maxConcurrency: 5,
|
|
96
|
-
batchSize: 20
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
const results = await FileUtils.readMultipleFiles(filePaths, processor);
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
### 2.2 큰 파일 처리
|
|
103
|
-
|
|
104
|
-
#### 스트리밍 처리
|
|
105
|
-
|
|
106
|
-
```javascript
|
|
107
|
-
// 큰 파일은 자동으로 스트리밍 처리됨 (10MB 이상)
|
|
108
|
-
const processor = new FileBatchProcessor();
|
|
109
|
-
|
|
110
|
-
// 큰 파일 읽기 - 자동으로 스트리밍 사용
|
|
111
|
-
const content = await processor.addReadOperation('/path/to/large/file.txt');
|
|
112
|
-
|
|
113
|
-
// 큰 파일 쓰기 - 자동으로 스트리밍 사용
|
|
114
|
-
await processor.addWriteOperation('/path/to/output.txt', largeContent);
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
### 2.3 메모리 효율적인 파일 복사
|
|
118
|
-
|
|
119
|
-
```javascript
|
|
120
|
-
// 메모리 효율적인 파일 복사
|
|
121
|
-
const fileMappings = {
|
|
122
|
-
'/source/file1.txt': '/dest/file1.txt',
|
|
123
|
-
'/source/file2.txt': '/dest/file2.txt'
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
const results = await FileUtils.copyMultipleFiles(fileMappings, processor);
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
## 3. 메모리 사용량 최적화
|
|
130
|
-
|
|
131
|
-
### 3.1 메모리 프로파일링
|
|
132
|
-
|
|
133
|
-
#### 기본 프로파일링
|
|
134
|
-
|
|
135
|
-
```javascript
|
|
136
|
-
import { MemoryProfiler } from './lib/memory-profiler.js';
|
|
137
|
-
|
|
138
|
-
const profiler = new MemoryProfiler({
|
|
139
|
-
samplingInterval: 1000, // 1초마다 샘플링
|
|
140
|
-
heapThreshold: 100 * 1024 * 1024 // 100MB 임계값
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
// 프로파일링 시작
|
|
144
|
-
profiler.startProfiling();
|
|
145
|
-
|
|
146
|
-
// 작업 실행
|
|
147
|
-
await performWorkload();
|
|
148
|
-
|
|
149
|
-
// 프로파일링 중지 및 보고서 생성
|
|
150
|
-
profiler.stopProfiling();
|
|
151
|
-
const report = profiler.generateReport();
|
|
152
|
-
console.log('메모리 사용량 보고서:', report);
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
#### 스냅샷 비교
|
|
156
|
-
|
|
157
|
-
```javascript
|
|
158
|
-
// 작업 전후 메모리 사용량 비교
|
|
159
|
-
profiler.createSnapshot('before-operation');
|
|
160
|
-
|
|
161
|
-
// 메모리 집약적인 작업
|
|
162
|
-
await processLargeDataset();
|
|
163
|
-
|
|
164
|
-
profiler.createSnapshot('after-operation');
|
|
165
|
-
|
|
166
|
-
// 메모리 변화 분석
|
|
167
|
-
const comparison = profiler.compareSnapshots('before-operation', 'after-operation');
|
|
168
|
-
console.log('메모리 변화:', comparison.memoryDiff);
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
### 3.2 메모리 누수 방지
|
|
172
|
-
|
|
173
|
-
#### 객체 추적
|
|
174
|
-
|
|
175
|
-
```javascript
|
|
176
|
-
// 객체 생성/소멸 추적
|
|
177
|
-
const leakDetector = profiler.objectLeakDetector;
|
|
178
|
-
leakDetector.startTracking();
|
|
179
|
-
|
|
180
|
-
// 객체 생성 추적
|
|
181
|
-
leakDetector.trackObject('MyClass', 'create');
|
|
182
|
-
|
|
183
|
-
// 객체 소멸 추적
|
|
184
|
-
leakDetector.trackObject('MyClass', 'destroy');
|
|
185
|
-
|
|
186
|
-
// 누수 의심 객체 확인
|
|
187
|
-
const leaking = leakDetector.findLeakingObjects(1000);
|
|
188
|
-
if (leaking.length > 0) {
|
|
189
|
-
console.warn('메모리 누수 의심 객체:', leaking);
|
|
190
|
-
}
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
#### 가비지 컬렉션 최적화
|
|
194
|
-
|
|
195
|
-
```javascript
|
|
196
|
-
// 메모리 정리 필요 시 강제 GC 실행
|
|
197
|
-
const gcResult = profiler.forceGarbageCollection();
|
|
198
|
-
if (gcResult) {
|
|
199
|
-
console.log('GC로 해제된 메모리:', gcResult.freed);
|
|
200
|
-
}
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
### 3.3 메모리 최적화 제안 활용
|
|
204
|
-
|
|
205
|
-
```javascript
|
|
206
|
-
import { MemoryOptimizer } from './lib/memory-profiler.js';
|
|
207
|
-
|
|
208
|
-
// 대용량 파일 처리 최적화
|
|
209
|
-
const fileOptimization = await MemoryOptimizer.optimizeForLargeFiles('/path/to/large/file');
|
|
210
|
-
if (fileOptimization.recommendation === 'streaming') {
|
|
211
|
-
// 스트리밍 처리 사용
|
|
212
|
-
console.log('스트리밍 처리 권장:', fileOptimization.reason);
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
// 데이터 구조 최적화
|
|
216
|
-
const dataOptimization = MemoryOptimizer.optimizeDataStructures(largeArray);
|
|
217
|
-
if (dataOptimization.recommendation !== 'Current data structure is optimal') {
|
|
218
|
-
console.log('데이터 구조 최적화 제안:', dataOptimization);
|
|
219
|
-
}
|
|
220
|
-
```
|
|
221
|
-
|
|
222
|
-
## 4. 성능 벤치마킹
|
|
223
|
-
|
|
224
|
-
### 4.1 기본 벤치마크 실행
|
|
225
|
-
|
|
226
|
-
```javascript
|
|
227
|
-
import { PerformanceBenchmark, BenchmarkSuites } from './lib/performance-benchmark.js';
|
|
228
|
-
|
|
229
|
-
const benchmark = new PerformanceBenchmark({
|
|
230
|
-
iterations: 100,
|
|
231
|
-
warmupIterations: 10,
|
|
232
|
-
memoryProfiling: true
|
|
233
|
-
});
|
|
234
|
-
|
|
235
|
-
// 사전 정의된 테스트 스위트 실행
|
|
236
|
-
const fileOpsSuite = BenchmarkSuites.fileOperations();
|
|
237
|
-
const results = await benchmark.run(fileOpsSuite);
|
|
238
|
-
|
|
239
|
-
console.log('벤치마크 결과:', results.summary);
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
### 4.2 커스텀 벤치마크 작성
|
|
243
|
-
|
|
244
|
-
```javascript
|
|
245
|
-
// 커스텀 테스트 스위트 정의
|
|
246
|
-
const customSuite = {
|
|
247
|
-
name: 'Custom Performance Tests',
|
|
248
|
-
tests: [
|
|
249
|
-
{
|
|
250
|
-
name: 'Data Processing Performance',
|
|
251
|
-
fn: async () => {
|
|
252
|
-
const startTime = performance.now();
|
|
253
|
-
await processData(testData);
|
|
254
|
-
const endTime = performance.now();
|
|
255
|
-
return { duration: endTime - startTime };
|
|
256
|
-
}
|
|
257
|
-
},
|
|
258
|
-
{
|
|
259
|
-
name: 'Cache Hit Performance',
|
|
260
|
-
fn: async () => {
|
|
261
|
-
const cache = new GitHubAPICache();
|
|
262
|
-
await cache.init();
|
|
263
|
-
|
|
264
|
-
// 캐시에 데이터 저장
|
|
265
|
-
await cache.set('test-key', testData);
|
|
266
|
-
|
|
267
|
-
const startTime = performance.now();
|
|
268
|
-
const result = await cache.get('test-key');
|
|
269
|
-
const endTime = performance.now();
|
|
270
|
-
|
|
271
|
-
return { duration: endTime - startTime, throughput: 1 };
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
]
|
|
275
|
-
};
|
|
276
|
-
|
|
277
|
-
const customResults = await benchmark.run(customSuite);
|
|
278
|
-
```
|
|
279
|
-
|
|
280
|
-
### 4.3 부하 테스트
|
|
281
|
-
|
|
282
|
-
```javascript
|
|
283
|
-
// API 엔드포인트 부하 테스트
|
|
284
|
-
const loadTestResult = await benchmark.runLoadTest({
|
|
285
|
-
name: 'GitHub API Load Test',
|
|
286
|
-
target: 'https://api.github.com/repos/user/repo',
|
|
287
|
-
duration: 60000, // 1분
|
|
288
|
-
concurrency: 10, // 동시 10개 요청
|
|
289
|
-
rampUp: 5000 // 5초에 걸쳐 점진적 증가
|
|
290
|
-
});
|
|
291
|
-
|
|
292
|
-
console.log('부하 테스트 결과:', loadTestResult.metrics);
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
### 4.4 성능 회귀 감지
|
|
296
|
-
|
|
297
|
-
```javascript
|
|
298
|
-
// 이전 결과와 비교하여 성능 회귀 감지
|
|
299
|
-
const currentResult = await benchmark.run(testSuite);
|
|
300
|
-
const baselineResult = loadBaselineResults(); // 기준 결과 로드
|
|
301
|
-
|
|
302
|
-
const regression = benchmark.detectPerformanceRegression(currentResult, baselineResult);
|
|
303
|
-
if (regression.detected) {
|
|
304
|
-
console.error('성능 회귀 감지:', regression.issues);
|
|
305
|
-
} else {
|
|
306
|
-
console.log('성능 개선:', regression.improvements);
|
|
307
|
-
}
|
|
308
|
-
```
|
|
309
|
-
|
|
310
|
-
## 5. 통합 성능 최적화 워크플로우
|
|
311
|
-
|
|
312
|
-
### 5.1 전체 최적화 프로세스
|
|
313
|
-
|
|
314
|
-
```javascript
|
|
315
|
-
async function optimizeApplicationPerformance() {
|
|
316
|
-
// 1. 메모리 프로파일링 시작
|
|
317
|
-
const profiler = new MemoryProfiler();
|
|
318
|
-
profiler.startProfiling();
|
|
319
|
-
|
|
320
|
-
// 2. GitHub API 캐싱 설정
|
|
321
|
-
const githubClient = new OptimizedGitHubClient();
|
|
322
|
-
await githubClient.init();
|
|
323
|
-
|
|
324
|
-
// 3. 파일 배치 처리 설정
|
|
325
|
-
const fileProcessor = new FileBatchProcessor({
|
|
326
|
-
maxConcurrency: 5,
|
|
327
|
-
batchSize: 20
|
|
328
|
-
});
|
|
329
|
-
|
|
330
|
-
// 4. 성능 벤치마크 실행
|
|
331
|
-
const benchmark = new PerformanceBenchmark({
|
|
332
|
-
iterations: 50,
|
|
333
|
-
memoryProfiling: true
|
|
334
|
-
});
|
|
335
|
-
|
|
336
|
-
const suites = [
|
|
337
|
-
BenchmarkSuites.fileOperations(),
|
|
338
|
-
BenchmarkSuites.memoryOperations(),
|
|
339
|
-
BenchmarkSuites.githubAPICache()
|
|
340
|
-
];
|
|
341
|
-
|
|
342
|
-
const results = await Promise.all(
|
|
343
|
-
suites.map(suite => benchmark.run(suite))
|
|
344
|
-
);
|
|
345
|
-
|
|
346
|
-
// 5. 결과 분석 및 보고서 생성
|
|
347
|
-
profiler.stopProfiling();
|
|
348
|
-
const memoryReport = profiler.generateReport();
|
|
349
|
-
const suggestions = profiler.getOptimizationSuggestions();
|
|
350
|
-
|
|
351
|
-
// 6. 보고서 저장
|
|
352
|
-
await benchmark.saveReport('./performance-report.json');
|
|
353
|
-
await benchmark.generateHTMLReport('./performance-report.html');
|
|
354
|
-
await profiler.saveReport('./memory-report.json');
|
|
355
|
-
|
|
356
|
-
return {
|
|
357
|
-
performanceResults: results,
|
|
358
|
-
memoryReport,
|
|
359
|
-
suggestions,
|
|
360
|
-
githubStats: githubClient.getStats(),
|
|
361
|
-
fileProcessorStats: fileProcessor.getStats()
|
|
362
|
-
};
|
|
363
|
-
}
|
|
364
|
-
```
|
|
365
|
-
|
|
366
|
-
### 5.2 CI/CD 통합
|
|
367
|
-
|
|
368
|
-
```javascript
|
|
369
|
-
// CI/CD 파이프라인에서 성능 테스트 실행
|
|
370
|
-
async function runPerformanceTests() {
|
|
371
|
-
const benchmark = new PerformanceBenchmark();
|
|
372
|
-
const results = await benchmark.run(BenchmarkSuites.fileOperations());
|
|
373
|
-
|
|
374
|
-
// 성능 기준 확인
|
|
375
|
-
const avgDuration = results.summary.averageDuration;
|
|
376
|
-
const threshold = 1000; // 1초
|
|
377
|
-
|
|
378
|
-
if (avgDuration > threshold) {
|
|
379
|
-
throw new Error(`Performance regression detected: ${avgDuration}ms > ${threshold}ms`);
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
console.log('✅ Performance tests passed');
|
|
383
|
-
return results;
|
|
384
|
-
}
|
|
385
|
-
```
|
|
386
|
-
|
|
387
|
-
## 6. 모니터링 및 경고
|
|
388
|
-
|
|
389
|
-
### 6.1 실시간 모니터링 설정
|
|
390
|
-
|
|
391
|
-
```javascript
|
|
392
|
-
// 프로덕션 환경에서 실시간 모니터링
|
|
393
|
-
const productionProfiler = new MemoryProfiler({
|
|
394
|
-
samplingInterval: 5000, // 5초마다
|
|
395
|
-
heapThreshold: 500 * 1024 * 1024, // 500MB
|
|
396
|
-
alertCallback: (alerts) => {
|
|
397
|
-
// 알림 시스템으로 경고 전송
|
|
398
|
-
alerts.forEach(alert => {
|
|
399
|
-
sendAlert(`Memory Alert: ${alert.type}`, alert);
|
|
400
|
-
});
|
|
401
|
-
}
|
|
402
|
-
});
|
|
403
|
-
|
|
404
|
-
productionProfiler.startProfiling();
|
|
405
|
-
```
|
|
406
|
-
|
|
407
|
-
### 6.2 성능 대시보드
|
|
408
|
-
|
|
409
|
-
```javascript
|
|
410
|
-
// 성능 메트릭 대시보드용 데이터 생성
|
|
411
|
-
function generateDashboardData() {
|
|
412
|
-
return {
|
|
413
|
-
timestamp: Date.now(),
|
|
414
|
-
memory: process.memoryUsage(),
|
|
415
|
-
cache: githubClient.getStats(),
|
|
416
|
-
fileProcessor: fileProcessor.getStats(),
|
|
417
|
-
uptime: process.uptime()
|
|
418
|
-
};
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
// 주기적으로 대시보드 데이터 업데이트
|
|
422
|
-
setInterval(() => {
|
|
423
|
-
const dashboardData = generateDashboardData();
|
|
424
|
-
updateDashboard(dashboardData);
|
|
425
|
-
}, 30000); // 30초마다
|
|
426
|
-
```
|
|
427
|
-
|
|
428
|
-
## 7. 환경별 설정 가이드
|
|
429
|
-
|
|
430
|
-
### 7.1 개발 환경
|
|
431
|
-
|
|
432
|
-
```javascript
|
|
433
|
-
const developmentConfig = {
|
|
434
|
-
github: {
|
|
435
|
-
cacheDir: '.aiwf/cache-dev',
|
|
436
|
-
ttl: 60000, // 1분
|
|
437
|
-
rateLimitPerMinute: 30
|
|
438
|
-
},
|
|
439
|
-
fileProcessor: {
|
|
440
|
-
maxConcurrency: 2,
|
|
441
|
-
batchSize: 10
|
|
442
|
-
},
|
|
443
|
-
memoryProfiler: {
|
|
444
|
-
samplingInterval: 2000, // 2초
|
|
445
|
-
alertThreshold: 100 * 1024 * 1024 // 100MB
|
|
446
|
-
}
|
|
447
|
-
};
|
|
448
|
-
```
|
|
449
|
-
|
|
450
|
-
### 7.2 프로덕션 환경
|
|
451
|
-
|
|
452
|
-
```javascript
|
|
453
|
-
const productionConfig = {
|
|
454
|
-
github: {
|
|
455
|
-
cacheDir: '.aiwf/cache',
|
|
456
|
-
ttl: 300000, // 5분
|
|
457
|
-
rateLimitPerMinute: 60
|
|
458
|
-
},
|
|
459
|
-
fileProcessor: {
|
|
460
|
-
maxConcurrency: 10,
|
|
461
|
-
batchSize: 50
|
|
462
|
-
},
|
|
463
|
-
memoryProfiler: {
|
|
464
|
-
samplingInterval: 5000, // 5초
|
|
465
|
-
alertThreshold: 500 * 1024 * 1024 // 500MB
|
|
466
|
-
}
|
|
467
|
-
};
|
|
468
|
-
```
|
|
469
|
-
|
|
470
|
-
## 8. 문제 해결 가이드
|
|
471
|
-
|
|
472
|
-
### 8.1 메모리 사용량 급증
|
|
473
|
-
|
|
474
|
-
```javascript
|
|
475
|
-
// 메모리 사용량이 급증하는 경우
|
|
476
|
-
if (currentMemoryUsage > threshold) {
|
|
477
|
-
// 1. 강제 가비지 컬렉션
|
|
478
|
-
const gcResult = profiler.forceGarbageCollection();
|
|
479
|
-
|
|
480
|
-
// 2. 캐시 정리
|
|
481
|
-
await githubClient.cleanup();
|
|
482
|
-
|
|
483
|
-
// 3. 임시 파일 정리
|
|
484
|
-
await MemoryOptimizer.cleanupTemporaryFiles();
|
|
485
|
-
|
|
486
|
-
// 4. 배치 처리 큐 정리
|
|
487
|
-
fileProcessor.clearQueue();
|
|
488
|
-
}
|
|
489
|
-
```
|
|
490
|
-
|
|
491
|
-
### 8.2 GitHub API Rate Limit 초과
|
|
492
|
-
|
|
493
|
-
```javascript
|
|
494
|
-
// Rate limit 초과 시 대응
|
|
495
|
-
client.on('rateLimit', async (resetTime) => {
|
|
496
|
-
console.log(`Rate limit exceeded. Waiting until ${new Date(resetTime)}`);
|
|
497
|
-
|
|
498
|
-
// 캐시된 데이터 우선 사용
|
|
499
|
-
const cachedData = await cache.get(url);
|
|
500
|
-
if (cachedData) {
|
|
501
|
-
return cachedData;
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
// Reset 시간까지 대기
|
|
505
|
-
const waitTime = resetTime - Date.now();
|
|
506
|
-
await new Promise(resolve => setTimeout(resolve, waitTime));
|
|
507
|
-
});
|
|
508
|
-
```
|
|
509
|
-
|
|
510
|
-
### 8.3 파일 시스템 성능 저하
|
|
511
|
-
|
|
512
|
-
```javascript
|
|
513
|
-
// 파일 시스템 성능 저하 시
|
|
514
|
-
if (fileProcessor.getStats().averageProcessingTime > 5000) { // 5초 이상
|
|
515
|
-
// 1. 동시성 감소
|
|
516
|
-
fileProcessor.maxConcurrency = Math.max(1, fileProcessor.maxConcurrency / 2);
|
|
517
|
-
|
|
518
|
-
// 2. 배치 크기 감소
|
|
519
|
-
fileProcessor.batchSize = Math.max(5, fileProcessor.batchSize / 2);
|
|
520
|
-
|
|
521
|
-
// 3. 임시 파일 정리
|
|
522
|
-
await MemoryOptimizer.cleanupTemporaryFiles();
|
|
523
|
-
}
|
|
524
|
-
```
|
|
525
|
-
|
|
526
|
-
## 9. 베스트 프랙티스
|
|
527
|
-
|
|
528
|
-
### 9.1 코드 레벨 최적화
|
|
529
|
-
|
|
530
|
-
1. **비동기 처리 활용**: Promise.all() 대신 Promise.allSettled() 사용
|
|
531
|
-
2. **메모리 효율적인 데이터 구조**: 큰 데이터셋에는 Map/Set 사용
|
|
532
|
-
3. **스트리밍 처리**: 큰 파일은 항상 스트림으로 처리
|
|
533
|
-
4. **캐시 우선 사용**: API 호출 전 항상 캐시 확인
|
|
534
|
-
|
|
535
|
-
### 9.2 아키텍처 레벨 최적화
|
|
536
|
-
|
|
537
|
-
1. **배치 처리 우선**: 개별 작업보다 배치 처리 사용
|
|
538
|
-
2. **적절한 캐시 TTL**: 데이터 성격에 맞는 TTL 설정
|
|
539
|
-
3. **동시성 제어**: 시스템 리소스에 맞는 동시성 수준 설정
|
|
540
|
-
4. **모니터링 필수**: 프로덕션에서 항상 성능 모니터링
|
|
541
|
-
|
|
542
|
-
### 9.3 운영 레벨 최적화
|
|
543
|
-
|
|
544
|
-
1. **정기적인 정리**: 캐시, 로그, 임시 파일 정기 정리
|
|
545
|
-
2. **성능 기준 설정**: 명확한 성능 SLA 정의
|
|
546
|
-
3. **알림 시스템**: 성능 저하 시 즉시 알림
|
|
547
|
-
4. **지속적인 개선**: 정기적인 성능 벤치마크 실행
|
|
548
|
-
|
|
549
|
-
## 결론
|
|
550
|
-
|
|
551
|
-
AIWF의 성능 최적화는 GitHub API 캐싱, 파일 배치 처리, 메모리 관리, 성능 벤치마킹의 4가지 핵심 영역에서 이루어집니다. 이 가이드라인을 따라 구현하면 대규모 프로젝트에서도 안정적이고 효율적인 성능을 유지할 수 있습니다.
|
|
552
|
-
|
|
553
|
-
성능 최적화는 지속적인 과정이므로, 정기적인 모니터링과 벤치마킹을 통해 시스템을 개선해 나가는 것이 중요합니다.
|
package/docs/PRD.ko.md
DELETED
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
# AIWF - AI 워크플로우 프레임워크
|
|
2
|
-
|
|
3
|
-
_버전: 0.3.0_
|
|
4
|
-
|
|
5
|
-
## 개요
|
|
6
|
-
|
|
7
|
-
모든 프로젝트에 AIWF (AI 워크플로우 프레임워크)를 설치하기 위한 포괄적인 `npx` 실행 가능 커맨드 라인 도구입니다. AI 지원 프로젝트 관리를 위한 구조화된 디렉토리 레이아웃과 커맨드 라인 도구를 제공하며, 다국어(영어 및 한국어)를 완벽하게 지원합니다.
|
|
8
|
-
|
|
9
|
-
## 핵심 기능
|
|
10
|
-
|
|
11
|
-
### 설치 명령어
|
|
12
|
-
|
|
13
|
-
이 도구는 `npx`를 통해 실행됩니다:
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
npx aiwf # 대화형 언어 선택
|
|
17
|
-
npx aiwf --force # 프롬프트 건너뛰기 (기본값: 한국어)
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
### 주요 특징
|
|
21
|
-
|
|
22
|
-
1. **다국어 지원**:
|
|
23
|
-
- 대화형 언어 선택 (영어/한국어)
|
|
24
|
-
- 언어별 명령어 파일 및 문서
|
|
25
|
-
- 현지화된 사용자 인터페이스 및 메시지
|
|
26
|
-
|
|
27
|
-
2. **디렉토리 구조 생성**:
|
|
28
|
-
- 문서, 요구사항, 스프린트 등을 위한 표준화된 하위 디렉토리를 포함하는 `.aiwf/` 디렉토리를 초기화합니다
|
|
29
|
-
- 사용자 지정 Claude 명령어를 위한 `.claude/commands/aiwf/` 디렉토리를 설정합니다
|
|
30
|
-
- Cursor 및 Windsurf용 IDE별 규칙을 구성합니다
|
|
31
|
-
|
|
32
|
-
3. **GitHub에서 파일 가져오기**:
|
|
33
|
-
- GitHub의 `aiwf/aiwf` 리포지토리에서 최신 프레임워크 파일을 다운로드합니다
|
|
34
|
-
- `claude-code/aiwf/ko/` 또는 `claude-code/aiwf/en/`에서 언어별 파일을 가져옵니다
|
|
35
|
-
- 명령어, 문서 템플릿, 프로젝트 매니페스트를 설치합니다
|
|
36
|
-
|
|
37
|
-
4. **기존 설치 처리**:
|
|
38
|
-
- AIWF 프레임워크가 이미 존재하는지 감지합니다
|
|
39
|
-
- 사용자에게 **업데이트**, **건너뛰기**, 또는 **취소**를 요청합니다
|
|
40
|
-
- 업데이트 프로세스는 사용자가 생성한 파일(작업, 스프린트)을 보존하면서 명령어 스크립트와 `CLAUDE.md` 문서를 업데이트합니다
|
|
41
|
-
- 덮어쓴 파일은 타임스탬프가 포함된 `.bak` 확장자로 자동 백업합니다
|
|
42
|
-
|
|
43
|
-
5. **IDE 통합**:
|
|
44
|
-
- Cursor IDE용 규칙을 자동으로 변환하고 설치합니다 (`.mdc` 형식)
|
|
45
|
-
- 일반 마크다운 규칙으로 Windsurf IDE를 지원합니다
|
|
46
|
-
- Claude Code와의 원활한 통합
|
|
47
|
-
|
|
48
|
-
## 기술적 접근 방식
|
|
49
|
-
|
|
50
|
-
- **Node.js 스크립트**: Node.js로 구축된 단일 실행 스크립트입니다.
|
|
51
|
-
- **의존성**: 커맨드 라인 인터페이스를 향상시키기 위해 외부 라이브러리를 사용합니다:
|
|
52
|
-
- `commander`: 커맨드 라인 인수 구문 분석용.
|
|
53
|
-
- `ora`: 로딩 스피너 표시용.
|
|
54
|
-
- `prompts`: 대화형 사용자 프롬프트용.
|
|
55
|
-
- `chalk`: 콘솔 출력에 색상 추가용.
|
|
56
|
-
- **GitHub Fetching**: GitHub API를 사용하여 디렉토리 내용을 나열하고, `raw.githubusercontent.com` 소스에서 직접 파일을 다운로드합니다.
|
|
57
|
-
|
|
58
|
-
## 설치 흐름
|
|
59
|
-
|
|
60
|
-
1. 환영 메시지가 표시됩니다
|
|
61
|
-
2. 언어 선택 프롬프트 (영어/한국어) - `--force` 플래그 사용 시 제외
|
|
62
|
-
3. 스크립트가 기존 설치를 확인합니다
|
|
63
|
-
4. 설치가 존재하면 사용자에게 작업(업데이트, 건너뛰기, 취소)을 선택하라는 메시지를 표시합니다
|
|
64
|
-
5. 진행 시, 스피너가 GitHub에서 파일을 가져오는 중임을 나타냅니다
|
|
65
|
-
6. 선택한 언어에 따라 필요한 디렉토리 구조가 생성됩니다
|
|
66
|
-
7. 언어별 디렉토리에서 프레임워크 파일(매니페스트, 템플릿, 문서, 명령어)이 다운로드됩니다
|
|
67
|
-
8. IDE 규칙이 처리되고 설치됩니다 (Cursor/Windsurf)
|
|
68
|
-
9. 시작을 위한 다음 단계와 함께 성공 메시지가 표시됩니다
|
|
69
|
-
10. 단계가 실패하면 오류 메시지가 표시되고 가능한 경우 백업에서 기존 파일이 복원됩니다
|
|
70
|
-
|
|
71
|
-
## 생성되는 파일 구조
|
|
72
|
-
|
|
73
|
-
설치 프로그램은 프로젝트에 다음 구조를 생성합니다:
|
|
74
|
-
|
|
75
|
-
```
|
|
76
|
-
your_project/
|
|
77
|
-
├── .aiwf/ # AIWF 프로젝트 관리 구조
|
|
78
|
-
│ ├── 00_PROJECT_MANIFEST.md # 중앙 프로젝트 추적
|
|
79
|
-
│ ├── 01_PROJECT_DOCS/ # 프로젝트 문서
|
|
80
|
-
│ │ └── ARCHITECTURE.md # 시스템 아키텍처 문서
|
|
81
|
-
│ ├── 02_REQUIREMENTS/ # 마일스톤 기반 요구사항
|
|
82
|
-
│ │ └── M01_*/ # 마일스톤 폴더
|
|
83
|
-
│ ├── 03_SPRINTS/ # 스프린트 실행 폴더
|
|
84
|
-
│ │ └── S01_*/ # 태스크가 포함된 스프린트 폴더
|
|
85
|
-
│ ├── 04_GENERAL_TASKS/ # 스프린트 외 태스크
|
|
86
|
-
│ ├── 98_PROMPTS/ # 유용한 프롬프트
|
|
87
|
-
│ └── 99_TEMPLATES/ # 문서 템플릿
|
|
88
|
-
├── .claude/commands/aiwf/ # Claude Code 사용자 정의 명령어
|
|
89
|
-
│ ├── initialize.md # 프로젝트 초기화
|
|
90
|
-
│ ├── prime_context.md # 컨텍스트 로딩
|
|
91
|
-
│ ├── aiwf_create_milestone_plan.md # 마일스톤 계획
|
|
92
|
-
│ ├── create_sprints_from_milestone.md # 스프린트 생성
|
|
93
|
-
│ ├── do_task.md # 태스크 실행
|
|
94
|
-
│ ├── commit.md # Git 커밋 워크플로우
|
|
95
|
-
│ ├── yolo.md # 자율 실행
|
|
96
|
-
│ └── ... (20개 이상의 추가 명령어)
|
|
97
|
-
├── .cursor/rules/ # Cursor IDE 통합 (감지된 경우)
|
|
98
|
-
│ ├── code-style-guide.mdc
|
|
99
|
-
│ ├── coding-principles.mdc
|
|
100
|
-
│ └── ... (변환된 규칙)
|
|
101
|
-
└── .windsurf/rules/ # Windsurf IDE 통합 (감지된 경우)
|
|
102
|
-
├── code-style-guide.md
|
|
103
|
-
├── coding-principles.md
|
|
104
|
-
└── ... (일반 마크다운 규칙)
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
## 상세 기능
|
|
108
|
-
|
|
109
|
-
### 다국어 지원
|
|
110
|
-
- **언어 선택**: 설치 중 대화형 프롬프트
|
|
111
|
-
- **지원 언어**: 영어 및 한국어
|
|
112
|
-
- **언어별 파일**: 선택한 언어에 따라 명령어와 문서가 설치됨
|
|
113
|
-
- **기본값**: `--force` 플래그 사용 시 한국어로 기본 설정
|
|
114
|
-
|
|
115
|
-
### 명령어 시스템
|
|
116
|
-
이 프레임워크는 AI 지원 개발을 위한 25개 이상의 전문 명령어를 포함합니다:
|
|
117
|
-
- **설정**: `initialize`, `prime`, `prime_context`
|
|
118
|
-
- **계획**: `aiwf_create_milestone_plan`, `aiwf_create_sprints_from_milestone`, `aiwf_create_sprint_tasks`
|
|
119
|
-
- **개발**: `do_task`, `commit`, `test`, `code_review`
|
|
120
|
-
- **자동화**: `yolo` (자율 태스크 실행)
|
|
121
|
-
- **GitHub 통합**: `issue_create`, `pr_create`
|
|
122
|
-
- **분석**: `ultrathink_*`, `mermaid`, `project_review`
|
|
123
|
-
|
|
124
|
-
### IDE 통합
|
|
125
|
-
- **Cursor IDE**: 프론트매터가 포함된 `.mdc` 형식으로 규칙 변환
|
|
126
|
-
- **Windsurf IDE**: 일반 마크다운 형식 사용
|
|
127
|
-
- **Claude Code**: 사용자 정의 명령어와의 네이티브 통합
|
|
128
|
-
|
|
129
|
-
## 현재 상태 (v0.3.0)
|
|
130
|
-
|
|
131
|
-
### 완료된 기능
|
|
132
|
-
- ✅ NPM 패키지 배포 (`npx aiwf`)
|
|
133
|
-
- ✅ 다국어 지원 (한국어/영어)
|
|
134
|
-
- ✅ IDE 통합 (Cursor, Windsurf)
|
|
135
|
-
- ✅ 25개 이상의 Claude Code 명령어
|
|
136
|
-
- ✅ 백업/복원 메커니즘
|
|
137
|
-
- ✅ GitHub API 통합
|
|
138
|
-
|
|
139
|
-
### 알려진 이슈
|
|
140
|
-
- `update_docs` 명령어 파일 누락 (`aiwf_docs.md`만 존재)
|
|
141
|
-
- GitHub 저장소 URL이 `aiwf/aiwf`로 통일됨
|
|
142
|
-
|
|
143
|
-
### 로드맵
|
|
144
|
-
- [ ] 오프라인 설치 옵션
|
|
145
|
-
- [ ] 추가 언어 지원
|
|
146
|
-
- [ ] VS Code 확장
|
|
147
|
-
- [ ] 향상된 프로젝트 템플릿
|
|
148
|
-
- [ ] 사용자 정의 명령어를 위한 커뮤니티 마켓플레이스
|