aiwf 0.3.7 → 0.3.8
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/.aiwf/00_PROJECT_MANIFEST.md +226 -2
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/S03_M02_sprint_meta.md +112 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T01_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T02_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T03_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T04_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T05_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T06_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T07_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T08_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T09_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T100_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T101_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T102_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T103_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T104_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T105_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T106_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T107_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T108_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T109_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T10_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T110_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T111_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T112_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T11_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T12_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T13_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T14_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T15_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T16_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T17_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T18_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T19_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T20_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T21_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T22_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T23_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T24_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T25_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T26_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T27_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T28_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T29_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T30_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T31_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T32_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T33_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T34_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T35_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T36_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T37_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T38_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T39_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T40_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T41_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T42_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T43_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T44_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T45_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T46_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T47_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T48_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T49_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T50_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T51_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T52_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T53_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T54_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T55_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T56_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T57_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T58_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T59_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T60_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T61_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T62_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T63_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T64_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T65_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T66_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T67_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T68_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T69_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T70_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T71_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T72_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T73_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T74_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T75_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T76_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T77_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T78_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T79_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T80_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T81_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T82_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T83_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T84_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T85_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T86_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T87_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T88_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T89_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T90_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T91_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T92_S03_task_with_special_characters.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T93_S03_test.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T94_S03_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T95_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T96_S03_next_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T97_S03_new_test_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T98_S03_first_task.md +39 -0
- package/.aiwf/03_SPRINTS/S03_M02_ecosystem_integration/T99_S03_test_task.md +39 -0
- package/.aiwf/test-results-s02.json +5 -5
- package/.claude/commands/aiwf/aiwf_compress_aggressive_persona.md +3 -15
- package/.claude/commands/aiwf/aiwf_compress_minimal_persona.md +2 -15
- package/.claude/commands/aiwf/aiwf_compress_stats.md +2 -51
- package/.claude/commands/aiwf/aiwf_compress_with_persona.md +5 -18
- package/.claude/commands/aiwf/aiwf_create_feature_ledger.md +1 -1
- package/.claude/commands/aiwf/aiwf_default_mode.md +1 -1
- package/.claude/commands/aiwf/aiwf_evaluate.md +3 -16
- package/.claude/commands/aiwf/aiwf_get_feature_details.md +1 -1
- package/.claude/commands/aiwf/aiwf_link_feature_to_milestone.md +1 -1
- package/.claude/commands/aiwf/aiwf_list_features.md +1 -1
- package/.claude/commands/aiwf/aiwf_switch_language.md +48 -120
- package/.claude/commands/aiwf/aiwf_update_feature_status.md +1 -1
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_aggressive_persona.md +2 -2
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_minimal_persona.md +2 -2
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_stats.md +10 -47
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_compress_with_persona.md +2 -2
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_create_feature_ledger.md +1 -1
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_default_mode.md +1 -1
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_evaluate.md +2 -2
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_get_feature_details.md +1 -1
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_link_feature_to_milestone.md +1 -1
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_list_features.md +1 -1
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_architect.md +1 -1
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_backend.md +1 -1
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_data_analyst.md +1 -1
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_frontend.md +1 -1
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_security.md +1 -1
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_persona_status.md +1 -1
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_update_feature_status.md +1 -1
- package/package.json +1 -1
- package/src/cli/index.js +174 -0
- package/src/commands/compress.js +60 -0
- package/src/commands/create-project.js +23 -17
- package/src/commands/evaluate.js +459 -0
- package/src/commands/feature.js +365 -0
- package/src/commands/persona.js +37 -16
- package/src/commands/token.js +312 -0
- package/src/lib/resource-loader.js +250 -0
- package/src/lib/resources/commands/ai-persona.js +602 -0
- package/src/lib/resources/commands/compress-context.js +389 -0
- package/src/lib/resources/commands/evaluate.js +246 -0
- package/src/lib/resources/commands/feature-ledger.js +565 -0
- package/src/lib/resources/commands/feature_commit_report.js +370 -0
- package/src/lib/resources/commands/persona-context-apply.js +562 -0
- package/src/lib/resources/commands/scan_git_history.js +234 -0
- package/src/lib/resources/commands/sync_feature_commits.js +154 -0
- package/src/lib/resources/commands/token-tracking.js +443 -0
- package/src/lib/resources/config/commit-patterns.js +103 -0
- package/src/lib/resources/config/language.json +6 -0
- package/src/lib/resources/personas/PERSONA_INDEX.md +57 -0
- package/src/lib/resources/personas/analyst.json +44 -0
- package/src/lib/resources/personas/architect/best_practices.md +136 -0
- package/src/lib/resources/personas/architect/knowledge_base.md +377 -0
- package/src/lib/resources/personas/architect.json +44 -0
- package/src/lib/resources/personas/backend/best_practices.md +766 -0
- package/src/lib/resources/personas/backend/knowledge_base.md +1070 -0
- package/src/lib/resources/personas/data_analyst/best_practices.md +594 -0
- package/src/lib/resources/personas/data_analyst/knowledge_base.md +1057 -0
- package/src/lib/resources/personas/developer.json +44 -0
- package/src/lib/resources/personas/developer.md +37 -0
- package/src/lib/resources/personas/evaluation_criteria.json +137 -0
- package/src/lib/resources/personas/frontend/best_practices.md +445 -0
- package/src/lib/resources/personas/frontend/knowledge_base.md +729 -0
- package/src/lib/resources/personas/persona-index.json +31 -0
- package/src/lib/resources/personas/reviewer.json +44 -0
- package/src/lib/resources/personas/security/best_practices.md +307 -0
- package/src/lib/resources/personas/security/knowledge_base.md +498 -0
- package/src/lib/resources/personas/tester.json +44 -0
- package/src/lib/resources/templates/README.md +78 -0
- package/src/lib/resources/templates/api-server/config.json +64 -0
- package/src/lib/resources/templates/api-server/template/.aiwf/config.json +56 -0
- package/src/lib/resources/templates/api-server/template/.aiwf/feature-ledger.json +42 -0
- package/src/lib/resources/templates/api-server/template/.aiwf/personas/backend-engineer.json +40 -0
- package/src/lib/resources/templates/api-server/template/.aiwf/scripts/cli.js +111 -0
- package/src/lib/resources/templates/api-server/template/.env.example +29 -0
- package/src/lib/resources/templates/api-server/template/.eslintrc.json +23 -0
- package/src/lib/resources/templates/api-server/template/README.md +171 -0
- package/src/lib/resources/templates/api-server/template/jest.config.js +26 -0
- package/src/lib/resources/templates/api-server/template/nodemon.json +9 -0
- package/src/lib/resources/templates/api-server/template/package.json +61 -0
- package/src/lib/resources/templates/api-server/template/src/app.ts +60 -0
- package/src/lib/resources/templates/api-server/template/src/config/swagger.ts +38 -0
- package/src/lib/resources/templates/api-server/template/src/controllers/aiwfController.ts +68 -0
- package/src/lib/resources/templates/api-server/template/src/controllers/authController.ts +128 -0
- package/src/lib/resources/templates/api-server/template/src/controllers/statusController.ts +28 -0
- package/src/lib/resources/templates/api-server/template/src/index.ts +28 -0
- package/src/lib/resources/templates/api-server/template/src/middleware/aiwfMiddleware.ts +50 -0
- package/src/lib/resources/templates/api-server/template/src/middleware/authMiddleware.ts +41 -0
- package/src/lib/resources/templates/api-server/template/src/middleware/errorHandler.ts +42 -0
- package/src/lib/resources/templates/api-server/template/src/middleware/notFoundHandler.ts +14 -0
- package/src/lib/resources/templates/api-server/template/src/middleware/requestLogger.ts +20 -0
- package/src/lib/resources/templates/api-server/template/src/routes/aiwf.ts +42 -0
- package/src/lib/resources/templates/api-server/template/src/routes/index.ts +13 -0
- package/src/lib/resources/templates/api-server/template/src/routes/v1/index.ts +67 -0
- package/src/lib/resources/templates/api-server/template/src/utils/logger.ts +37 -0
- package/src/lib/resources/templates/api-server/template/tests/app.test.ts +40 -0
- package/src/lib/resources/templates/api-server/template/tsconfig.json +43 -0
- package/src/lib/resources/templates/npm-library/config.json +61 -0
- package/src/lib/resources/templates/npm-library/template/LICENSE +21 -0
- package/src/lib/resources/templates/npm-library/template/README.md +201 -0
- package/src/lib/resources/templates/npm-library/template/package.json +78 -0
- package/src/lib/resources/templates/web-app/config.json +53 -0
- package/src/lib/resources/templates/web-app/template/.aiwf/config.json +54 -0
- package/src/lib/resources/templates/web-app/template/.aiwf/feature-ledger.json +37 -0
- package/src/lib/resources/templates/web-app/template/.aiwf/personas/fullstack-developer.json +40 -0
- package/src/lib/resources/templates/web-app/template/.aiwf/scripts/cli.js +110 -0
- package/src/lib/resources/templates/web-app/template/.eslintrc.cjs +20 -0
- package/src/lib/resources/templates/web-app/template/README.md +151 -0
- package/src/lib/resources/templates/web-app/template/index.html +14 -0
- package/src/lib/resources/templates/web-app/template/package.json +44 -0
- package/src/lib/resources/templates/web-app/template/postcss.config.js +6 -0
- package/src/lib/resources/templates/web-app/template/public/vite.svg +1 -0
- package/src/lib/resources/templates/web-app/template/src/App.tsx +21 -0
- package/src/lib/resources/templates/web-app/template/src/components/Layout.tsx +57 -0
- package/src/lib/resources/templates/web-app/template/src/components/aiwf/ContextStatus.tsx +107 -0
- package/src/lib/resources/templates/web-app/template/src/components/aiwf/FeatureLedger.tsx +93 -0
- package/src/lib/resources/templates/web-app/template/src/components/aiwf/TokenUsage.tsx +71 -0
- package/src/lib/resources/templates/web-app/template/src/index.css +60 -0
- package/src/lib/resources/templates/web-app/template/src/main.tsx +10 -0
- package/src/lib/resources/templates/web-app/template/src/pages/AiwfDashboard.tsx +60 -0
- package/src/lib/resources/templates/web-app/template/src/pages/HomePage.tsx +89 -0
- package/src/lib/resources/templates/web-app/template/src/pages/NotFound.tsx +25 -0
- package/src/lib/resources/templates/web-app/template/src/stores/aiwfStore.ts +126 -0
- package/src/lib/resources/templates/web-app/template/src/types/global.d.ts +9 -0
- package/src/lib/resources/templates/web-app/template/src/vite-env.d.ts +1 -0
- package/src/lib/resources/templates/web-app/template/tailwind.config.js +30 -0
- package/src/lib/resources/templates/web-app/template/tsconfig.json +37 -0
- package/src/lib/resources/templates/web-app/template/tsconfig.node.json +10 -0
- package/src/lib/resources/templates/web-app/template/vite.config.ts +23 -0
- package/src/lib/resources/utils/background-monitor.js +223 -0
- package/src/lib/resources/utils/compression-metrics.js +1031 -0
- package/src/lib/resources/utils/compression-strategies.js +557 -0
- package/src/lib/resources/utils/content-normalizer.js +455 -0
- package/src/lib/resources/utils/context-compressor.js +583 -0
- package/src/lib/resources/utils/context-rule-parser.js +180 -0
- package/src/lib/resources/utils/context-token-monitor.js +463 -0
- package/src/lib/resources/utils/context-update-manager.js +502 -0
- package/src/lib/resources/utils/feature-updater.js +271 -0
- package/src/lib/resources/utils/git-utils.js +220 -0
- package/src/lib/resources/utils/importance-classifier.js +645 -0
- package/src/lib/resources/utils/information-filter.js +710 -0
- package/src/lib/resources/utils/persona-aware-compressor.js +598 -0
- package/src/lib/resources/utils/prompt-injector.js +242 -0
- package/src/lib/resources/utils/simplified-evaluator.js +119 -0
- package/src/lib/resources/utils/text-summarizer.js +492 -0
- package/src/lib/resources/utils/token-counter.js +177 -0
- package/src/lib/resources/utils/token-monitor.js +484 -0
- package/src/lib/resources/utils/token-reporter.js +453 -0
- package/src/lib/resources/utils/token-storage.js +433 -0
- package/src/lib/resources/utils/token-tracker.js +283 -0
- package/claude-code/aiwf/ko/.claude/commands/aiwf/aiwf_switch_language.md +0 -160
- /package/claude-code/aiwf/ko/.claude/commands/aiwf/{aiwf_update_docs_kr.md → aiwf_update_docs.md} +0 -0
|
@@ -12,8 +12,8 @@ const path = require('path');
|
|
|
12
12
|
const cwd = path.join(process.cwd(), '.aiwf');
|
|
13
13
|
const args = process.argv.slice(2); // 추가 인자 전달
|
|
14
14
|
|
|
15
|
-
const proc = spawn('
|
|
16
|
-
'
|
|
15
|
+
const proc = spawn('aiwf', [
|
|
16
|
+
'evaluate',
|
|
17
17
|
...args
|
|
18
18
|
], { cwd, stdio: 'inherit' });
|
|
19
19
|
|
package/package.json
CHANGED
package/src/cli/index.js
CHANGED
|
@@ -7,6 +7,11 @@ import AIToolCommand from '../commands/ai-tool.js';
|
|
|
7
7
|
import PersonaCommand from '../commands/persona.js';
|
|
8
8
|
import { CacheCLI } from './cache-cli.js';
|
|
9
9
|
import { addTaskToSprint } from '../commands/sprint-task.js';
|
|
10
|
+
import CompressCommand from '../commands/compress.js';
|
|
11
|
+
import FeatureCommand from '../commands/feature.js';
|
|
12
|
+
import TokenCommand from '../commands/token.js';
|
|
13
|
+
import EvaluateCommand from '../commands/evaluate.js';
|
|
14
|
+
import { createProject } from '../commands/create-project.js';
|
|
10
15
|
|
|
11
16
|
// Parse version from package.json
|
|
12
17
|
import { readFileSync } from 'fs';
|
|
@@ -217,5 +222,174 @@ program
|
|
|
217
222
|
}
|
|
218
223
|
});
|
|
219
224
|
|
|
225
|
+
// Create project command
|
|
226
|
+
program
|
|
227
|
+
.command('create-project')
|
|
228
|
+
.alias('create')
|
|
229
|
+
.description('Create a new AIWF project / 새 AIWF 프로젝트 생성')
|
|
230
|
+
.action(async () => {
|
|
231
|
+
try {
|
|
232
|
+
await createProject();
|
|
233
|
+
} catch (error) {
|
|
234
|
+
console.error(chalk.red(`오류: ${error.message}`));
|
|
235
|
+
process.exit(1);
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
// Context compression command
|
|
240
|
+
program
|
|
241
|
+
.command('compress [mode] [path]')
|
|
242
|
+
.description('Compress context for token optimization / 토큰 최적화를 위한 컨텍스트 압축')
|
|
243
|
+
.option('--persona, -p', 'Enable persona-aware compression / 페르소나 인식 압축 활성화')
|
|
244
|
+
.action(async (mode, path, options) => {
|
|
245
|
+
const compressCmd = new CompressCommand();
|
|
246
|
+
const args = [];
|
|
247
|
+
if (mode) args.push(mode);
|
|
248
|
+
if (path) args.push(path);
|
|
249
|
+
if (options.persona) args.push('--persona');
|
|
250
|
+
await compressCmd.execute(args);
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
// Feature ledger management commands
|
|
254
|
+
const feature = program.command('feature');
|
|
255
|
+
feature.description('Manage feature development tracking / 기능 개발 추적 관리');
|
|
256
|
+
|
|
257
|
+
feature
|
|
258
|
+
.command('list')
|
|
259
|
+
.alias('ls')
|
|
260
|
+
.description('List all features / 모든 기능 목록')
|
|
261
|
+
.action(async () => {
|
|
262
|
+
const featureCmd = new FeatureCommand();
|
|
263
|
+
await featureCmd.execute(['list']);
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
feature
|
|
267
|
+
.command('create <name> [description...]')
|
|
268
|
+
.alias('add')
|
|
269
|
+
.description('Create a new feature / 새 기능 생성')
|
|
270
|
+
.action(async (name, description) => {
|
|
271
|
+
const featureCmd = new FeatureCommand();
|
|
272
|
+
const args = ['create', name];
|
|
273
|
+
if (description) args.push(...description);
|
|
274
|
+
await featureCmd.execute(args);
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
feature
|
|
278
|
+
.command('update <featureId> <status>')
|
|
279
|
+
.description('Update feature status / 기능 상태 업데이트')
|
|
280
|
+
.action(async (featureId, status) => {
|
|
281
|
+
const featureCmd = new FeatureCommand();
|
|
282
|
+
await featureCmd.execute(['update', featureId, status]);
|
|
283
|
+
});
|
|
284
|
+
|
|
285
|
+
feature
|
|
286
|
+
.command('status [featureId]')
|
|
287
|
+
.description('Show feature status / 기능 상태 표시')
|
|
288
|
+
.action(async (featureId) => {
|
|
289
|
+
const featureCmd = new FeatureCommand();
|
|
290
|
+
const args = ['status'];
|
|
291
|
+
if (featureId) args.push(featureId);
|
|
292
|
+
await featureCmd.execute(args);
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
feature
|
|
296
|
+
.command('sync')
|
|
297
|
+
.description('Sync with git commits / Git 커밋과 동기화')
|
|
298
|
+
.action(async () => {
|
|
299
|
+
const featureCmd = new FeatureCommand();
|
|
300
|
+
await featureCmd.execute(['sync']);
|
|
301
|
+
});
|
|
302
|
+
|
|
303
|
+
// Token tracking commands
|
|
304
|
+
const token = program.command('token');
|
|
305
|
+
token.description('Manage token usage tracking / 토큰 사용량 추적 관리');
|
|
306
|
+
|
|
307
|
+
token
|
|
308
|
+
.command('status')
|
|
309
|
+
.alias('s')
|
|
310
|
+
.description('Show token usage status / 토큰 사용 현황 표시')
|
|
311
|
+
.action(async () => {
|
|
312
|
+
const tokenCmd = new TokenCommand();
|
|
313
|
+
await tokenCmd.execute(['status']);
|
|
314
|
+
});
|
|
315
|
+
|
|
316
|
+
token
|
|
317
|
+
.command('report [period]')
|
|
318
|
+
.description('Generate usage report / 사용 리포트 생성')
|
|
319
|
+
.action(async (period) => {
|
|
320
|
+
const tokenCmd = new TokenCommand();
|
|
321
|
+
const args = ['report'];
|
|
322
|
+
if (period) args.push(period);
|
|
323
|
+
await tokenCmd.execute(args);
|
|
324
|
+
});
|
|
325
|
+
|
|
326
|
+
token
|
|
327
|
+
.command('track <input> <output>')
|
|
328
|
+
.description('Manually track token usage / 토큰 사용량 수동 기록')
|
|
329
|
+
.action(async (input, output) => {
|
|
330
|
+
const tokenCmd = new TokenCommand();
|
|
331
|
+
await tokenCmd.execute(['track', input, output]);
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
token
|
|
335
|
+
.command('limit <type> <value>')
|
|
336
|
+
.description('Set usage limits / 사용 한도 설정')
|
|
337
|
+
.action(async (type, value) => {
|
|
338
|
+
const tokenCmd = new TokenCommand();
|
|
339
|
+
await tokenCmd.execute(['limit', type, value]);
|
|
340
|
+
});
|
|
341
|
+
|
|
342
|
+
token
|
|
343
|
+
.command('reset')
|
|
344
|
+
.description('Reset tracking data / 추적 데이터 초기화')
|
|
345
|
+
.action(async () => {
|
|
346
|
+
const tokenCmd = new TokenCommand();
|
|
347
|
+
await tokenCmd.execute(['reset']);
|
|
348
|
+
});
|
|
349
|
+
|
|
350
|
+
// Evaluation commands
|
|
351
|
+
const evaluate = program.command('evaluate');
|
|
352
|
+
evaluate.description('Evaluate AI responses and code quality / AI 응답 및 코드 품질 평가');
|
|
353
|
+
|
|
354
|
+
evaluate
|
|
355
|
+
.command('response <file>')
|
|
356
|
+
.description('Evaluate AI response quality / AI 응답 품질 평가')
|
|
357
|
+
.action(async (file) => {
|
|
358
|
+
const evaluateCmd = new EvaluateCommand();
|
|
359
|
+
await evaluateCmd.execute(['response', file]);
|
|
360
|
+
});
|
|
361
|
+
|
|
362
|
+
evaluate
|
|
363
|
+
.command('code <file>')
|
|
364
|
+
.description('Evaluate code quality / 코드 품질 평가')
|
|
365
|
+
.action(async (file) => {
|
|
366
|
+
const evaluateCmd = new EvaluateCommand();
|
|
367
|
+
await evaluateCmd.execute(['code', file]);
|
|
368
|
+
});
|
|
369
|
+
|
|
370
|
+
evaluate
|
|
371
|
+
.command('persona <file> <persona>')
|
|
372
|
+
.description('Evaluate persona appropriateness / 페르소나 적합성 평가')
|
|
373
|
+
.action(async (file, persona) => {
|
|
374
|
+
const evaluateCmd = new EvaluateCommand();
|
|
375
|
+
await evaluateCmd.execute(['persona', file, persona]);
|
|
376
|
+
});
|
|
377
|
+
|
|
378
|
+
evaluate
|
|
379
|
+
.command('report')
|
|
380
|
+
.description('Generate evaluation report / 평가 리포트 생성')
|
|
381
|
+
.action(async () => {
|
|
382
|
+
const evaluateCmd = new EvaluateCommand();
|
|
383
|
+
await evaluateCmd.execute(['report']);
|
|
384
|
+
});
|
|
385
|
+
|
|
386
|
+
evaluate
|
|
387
|
+
.command('criteria')
|
|
388
|
+
.description('Show evaluation criteria / 평가 기준 표시')
|
|
389
|
+
.action(async () => {
|
|
390
|
+
const evaluateCmd = new EvaluateCommand();
|
|
391
|
+
await evaluateCmd.execute(['criteria']);
|
|
392
|
+
});
|
|
393
|
+
|
|
220
394
|
// Parse command line arguments
|
|
221
395
|
program.parse(process.argv);
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* AIWF 컨텍스트 압축 명령어
|
|
5
|
+
* 대용량 컨텍스트를 효율적으로 압축하여 토큰 사용량 감소
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { ResourceLoader } from '../lib/resource-loader.js';
|
|
9
|
+
import chalk from 'chalk';
|
|
10
|
+
|
|
11
|
+
class CompressCommand {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.resourceLoader = new ResourceLoader();
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* 압축 명령어 실행
|
|
18
|
+
*/
|
|
19
|
+
async execute(args) {
|
|
20
|
+
try {
|
|
21
|
+
// compress-context 모듈 동적 로드
|
|
22
|
+
const compressModule = await this.resourceLoader.loadUtil('compress-context.js');
|
|
23
|
+
const executeCompressContext = compressModule.executeCompressContext || compressModule.default;
|
|
24
|
+
|
|
25
|
+
if (typeof executeCompressContext !== 'function') {
|
|
26
|
+
throw new Error('compress-context 모듈을 로드할 수 없습니다.');
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// 실행
|
|
30
|
+
await executeCompressContext(args);
|
|
31
|
+
|
|
32
|
+
} catch (error) {
|
|
33
|
+
console.error(chalk.red('❌ 압축 실행 중 오류가 발생했습니다:'), error.message);
|
|
34
|
+
this.showHelp();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* 도움말 표시
|
|
40
|
+
*/
|
|
41
|
+
showHelp() {
|
|
42
|
+
console.log(chalk.cyan('\n🗜️ AIWF 컨텍스트 압축'));
|
|
43
|
+
console.log(chalk.gray('-'.repeat(50)));
|
|
44
|
+
console.log('사용법: aiwf compress [옵션] [경로]');
|
|
45
|
+
console.log('');
|
|
46
|
+
console.log('옵션:');
|
|
47
|
+
console.log(' aggressive 공격적 압축 (50-70% 토큰 감소)');
|
|
48
|
+
console.log(' balanced 균형잡힌 압축 (30-50% 토큰 감소) [기본값]');
|
|
49
|
+
console.log(' minimal 최소 압축 (10-30% 토큰 감소)');
|
|
50
|
+
console.log(' --persona 페르소나 인식 압축 활성화');
|
|
51
|
+
console.log('');
|
|
52
|
+
console.log('예시:');
|
|
53
|
+
console.log(' aiwf compress # 기본 압축');
|
|
54
|
+
console.log(' aiwf compress aggressive # 공격적 압축');
|
|
55
|
+
console.log(' aiwf compress --persona balanced # 페르소나 인식 압축');
|
|
56
|
+
console.log(' aiwf compress .aiwf # 특정 경로 압축');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export default CompressCommand;
|
|
@@ -6,28 +6,33 @@ import { fileURLToPath } from 'url';
|
|
|
6
6
|
import prompts from 'prompts';
|
|
7
7
|
import chalk from 'chalk';
|
|
8
8
|
import ora from 'ora';
|
|
9
|
+
import { ResourceLoader } from '../lib/resource-loader.js';
|
|
9
10
|
|
|
10
11
|
const __filename = fileURLToPath(import.meta.url);
|
|
11
12
|
const __dirname = path.dirname(__filename);
|
|
12
|
-
|
|
13
|
+
|
|
14
|
+
// ResourceLoader를 사용하여 템플릿 관리
|
|
15
|
+
const resourceLoader = new ResourceLoader();
|
|
13
16
|
|
|
14
17
|
async function createProject() {
|
|
15
18
|
console.log(chalk.cyan('\n🚀 AIWF 프로젝트 생성기\n'));
|
|
16
19
|
|
|
17
|
-
//
|
|
18
|
-
const templates =
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
|
|
20
|
+
// ResourceLoader를 사용하여 템플릿 찾기
|
|
21
|
+
const templates = await resourceLoader.listTemplates();
|
|
22
|
+
|
|
23
|
+
const templateConfigs = [];
|
|
24
|
+
for (const template of templates) {
|
|
25
|
+
try {
|
|
26
|
+
const config = await resourceLoader.loadTemplateConfig(template);
|
|
27
|
+
templateConfigs.push({
|
|
28
|
+
value: template,
|
|
29
|
+
title: config.displayName,
|
|
30
|
+
description: config.description
|
|
31
|
+
});
|
|
32
|
+
} catch (error) {
|
|
33
|
+
console.error(`템플릿 ${template} 로드 실패:`, error.message);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
31
36
|
|
|
32
37
|
const questions = [
|
|
33
38
|
{
|
|
@@ -85,7 +90,8 @@ async function createProject() {
|
|
|
85
90
|
const spinner = ora('프로젝트 생성 중...').start();
|
|
86
91
|
|
|
87
92
|
try {
|
|
88
|
-
|
|
93
|
+
// ResourceLoader를 사용하여 템플릿 경로 가져오기
|
|
94
|
+
const templatePath = await resourceLoader.getTemplatePath(answers.template);
|
|
89
95
|
const targetPath = path.resolve(answers.directory);
|
|
90
96
|
|
|
91
97
|
// 템플릿 복사
|
|
@@ -144,7 +150,7 @@ async function replacePlaceholders(dir, replacements) {
|
|
|
144
150
|
}
|
|
145
151
|
|
|
146
152
|
// CLI 실행
|
|
147
|
-
if (
|
|
153
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
148
154
|
createProject().catch(error => {
|
|
149
155
|
console.error(chalk.red('오류:', error.message));
|
|
150
156
|
process.exit(1);
|