@ohos-cpf/3rdloop 0.0.2 → 0.0.3
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/README.md +244 -244
- package/bin/3rdloop.mjs +46 -46
- package/lib/cli.js +781 -781
- package/lib/config-cmd.js +451 -451
- package/lib/config.js +318 -318
- package/lib/doctor.js +113 -113
- package/lib/exit-codes.js +30 -30
- package/lib/opencode.js +155 -155
- package/lib/orch.js +426 -426
- package/lib/queries.js +263 -263
- package/lib/step.js +325 -325
- package/lib/ui.js +222 -222
- package/lib/update.js +279 -279
- package/lib/workflow.js +308 -308
- package/lib/workflows.js +131 -131
- package/package.json +50 -50
- package/vendor/Server/Agent/SkillSelector/README.md +343 -343
- package/vendor/Server/Agent/SkillSelector/core/Agent.js +207 -207
- package/vendor/Server/Agent/SkillSelector/index.js +14 -14
- package/vendor/Server/Agent/SkillSelector/llm/llmClient.js +313 -313
- package/vendor/Server/Agent/SkillSelector/llm/prompts.js +161 -161
- package/vendor/Server/Agent/SkillSelector/llm/reactSteps.js +144 -144
- package/vendor/Server/Agent/SkillSelector/matcher/fuzzyMatcher.js +433 -433
- package/vendor/Server/Agent/SkillSelector/scanner/skillScanner.js +382 -382
- package/vendor/Server/Agent/SkillSelector/utils/actionWords.js +59 -59
- package/vendor/Server/Brain/AnalysisStrategies.js +422 -422
- package/vendor/Server/Brain/Brain.js +686 -686
- package/vendor/Server/Brain/DecompositionStrategies.js +621 -621
- package/vendor/Server/Brain/PlanPersistence.js +196 -196
- package/vendor/Server/Brain/SkillExecutor.js +251 -251
- package/vendor/Server/Brain/index.js +11 -11
- package/vendor/Server/CLI/cli.js +275 -275
- package/vendor/Server/CLI/deveco-code/index.js +71 -71
- package/vendor/Server/CLI/deveco-code.js +5 -5
- package/vendor/Server/CLI/opencode/index.js +817 -818
- package/vendor/Server/CLI/opencode.js +5 -5
- package/vendor/Server/DbUse/MessageArchive.js +61 -61
- package/vendor/Server/DbUse/StorageManager.js +107 -107
- package/vendor/Server/DbUse/adapters/BaseAdapter.js +94 -94
- package/vendor/Server/DbUse/adapters/FileAdapter.js +138 -138
- package/vendor/Server/DbUse/adapters/JsonAdapter.js +138 -138
- package/vendor/Server/DbUse/adapters/JsonlAdapter.js +114 -114
- package/vendor/Server/DbUse/adapters/SqliteAdapter.js +157 -157
- package/vendor/Server/DbUse/index.js +160 -160
- package/vendor/Server/DbUse/stores/SessionStore.js +279 -279
- package/vendor/Server/DbUse/stores/TaskExecutionStore.js +133 -133
- package/vendor/Server/DbUse/stores/TaskRegistryStore.js +262 -262
- package/vendor/Server/DbUse/stores/TaskStepStore.js +279 -279
- package/vendor/Server/FlexRunner/FlexRunner.js +1759 -1759
- package/vendor/Server/FlexRunner/index.js +12 -12
- package/vendor/Server/Knowledge/KnowledgeImporter.js +523 -523
- package/vendor/Server/Knowledge/KnowledgeManager.js +341 -341
- package/vendor/Server/Knowledge/index.js +33 -33
- package/vendor/Server/LoopEngine/LoopEngine.js +1133 -1133
- package/vendor/Server/LoopEngine/index.js +11 -11
- package/vendor/Server/Orchestrator/Orchestrator.js +0 -3
- package/vendor/Server/Orchestrator/StepNode.js +312 -312
- package/vendor/Server/Orchestrator/index.js +13 -13
- package/vendor/Server/Routes/controllers/BrainController.js +241 -241
- package/vendor/Server/Routes/controllers/FlexRunnerController.js +1125 -1125
- package/vendor/Server/Routes/controllers/HealthController.js +44 -44
- package/vendor/Server/Routes/controllers/KnowledgeImportController.js +355 -355
- package/vendor/Server/Routes/controllers/LoopEngineController.js +788 -788
- package/vendor/Server/Routes/controllers/StatsController.js +57 -57
- package/vendor/Server/Routes/controllers/StreamController.js +67 -67
- package/vendor/Server/Routes/library/logger.js +179 -179
- package/vendor/Server/Routes/library/zipArchive.js +172 -172
- package/vendor/Server/Routes/router/Router.js +204 -204
- package/vendor/Server/Routes/routes/brain.js +47 -47
- package/vendor/Server/Routes/routes/flexrunner.js +72 -72
- package/vendor/Server/Routes/routes/health.js +28 -28
- package/vendor/Server/Routes/routes/index.js +57 -57
- package/vendor/Server/Routes/routes/knowledge.js +55 -55
- package/vendor/Server/Routes/routes/loopengine.js +58 -58
- package/vendor/Server/Routes/routes/orchestrator.js +61 -61
- package/vendor/Server/Routes/routes/registry.js +97 -97
- package/vendor/Server/Routes/routes/stats.js +23 -23
- package/vendor/Server/Routes/routes/stream.js +30 -30
- package/vendor/Server/Routes/server.js +203 -203
- package/vendor/Server/Routes/sse/SseHub.js +308 -308
- package/vendor/Server/Skills/acceptance-check/SKILL.md +191 -191
- package/vendor/Server/Skills/acceptance-check/references/PHASE1_ARTIFACT_COLLECTION.md +52 -52
- package/vendor/Server/Skills/acceptance-check/references/PHASE2_CRITERIA_EVALUATION.md +77 -77
- package/vendor/Server/Skills/acceptance-check/references/PHASE2_EVIDENCE_VERIFICATION.md +70 -70
- package/vendor/Server/Skills/arkts-code-check/SKILL.md +320 -320
- package/vendor/Server/Skills/arkts-code-check/references/CODE_CHECK_GUIDE.md +210 -210
- package/vendor/Server/Skills/arkts-code-check/references/FILE_TYPE_GUIDE.md +28 -28
- package/vendor/Server/Skills/arkts-code-check/references/PHASE1_INFO_COLLECTION.md +233 -233
- package/vendor/Server/Skills/arkts-code-check/references/REPORT_TEMPLATE.md +219 -219
- package/vendor/Server/Skills/arkts-library-compile-validate/SKILL.md +328 -328
- package/vendor/Server/Skills/arkts-library-compile-validate/scripts/build.ps1 +93 -93
- package/vendor/Server/Skills/arkts-library-compile-validate/scripts/code-linter.cjs +432 -432
- package/vendor/Server/Skills/arkts-library-compile-validate/scripts/migrate.cjs +851 -851
- package/vendor/Server/Skills/arkts-library-compile-validate/scripts/ohpm-switch.cjs +788 -788
- package/vendor/Server/Skills/arkts-library-demo-code/SKILL.md +291 -291
- package/vendor/Server/Skills/arkts-library-demo-code/references/API_SIGNATURE_CHECKS.md +68 -68
- package/vendor/Server/Skills/arkts-library-demo-code/references/BUILD_VALIDATION.md +184 -184
- package/vendor/Server/Skills/arkts-library-demo-code/references/CODE_STANDARDS.md +337 -337
- package/vendor/Server/Skills/arkts-library-demo-code/references/EXAMPLES.md +400 -400
- package/vendor/Server/Skills/arkts-library-demo-code/references/SYSTEM_API_LOOKUP.md +98 -98
- package/vendor/Server/Skills/arkts-library-demo-code/references/TEMPLATE.md +544 -544
- package/vendor/Server/Skills/arkts-library-demo-code/scripts/build.ps1 +93 -93
- package/vendor/Server/Skills/arkts-library-demo-code/scripts/code-linter.cjs +432 -432
- package/vendor/Server/Skills/arkts-library-demo-code/scripts/migrate.cjs +851 -851
- package/vendor/Server/Skills/arkts-library-demo-code/scripts/ohpm-switch.cjs +788 -788
- package/vendor/Server/Skills/arkts-library-demo-coverage/SKILL.md +174 -174
- package/vendor/Server/Skills/arkts-library-demo-scenario/SKILL.md +321 -321
- package/vendor/Server/Skills/arkts-library-demo-scenario/references/EXAMPLES.md +100 -100
- package/vendor/Server/Skills/arkts-library-demo-scenario/references/TEMPLATE.md +185 -185
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/SKILL.md +233 -233
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/assets/REPORT_TEMPLATE.md +102 -102
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/CHECK_DIMENSIONS.md +89 -89
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/COMPLIANCE_CHECKLIST.md +62 -62
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/KB_QUERY_GUIDE.md +107 -107
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/MCP_TOOL_DISCOVERY.md +124 -124
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/REPORT_TEMPLATE.md +90 -90
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/SCORING_FORMULA.md +57 -57
- package/vendor/Server/Skills/arkts-library-documentation-quality-check/scripts/validate-skill.cjs +259 -259
- package/vendor/Server/Skills/arkts-library-interface-spec/SKILL.md +97 -97
- package/vendor/Server/Skills/arkts-library-memory-leak-check/SKILL.md +391 -391
- package/vendor/Server/Skills/arkts-library-source-clone/SKILL.md +113 -113
- package/vendor/Server/Skills/arkts-library-stability-check/SKILL.md +312 -312
- package/vendor/Server/Skills/arkts-library-stability-check/assets/REPORT_TEMPLATE.md +154 -154
- package/vendor/Server/Skills/arkts-library-stability-check/references/CHECKLIST.md +165 -165
- package/vendor/Server/Skills/arkts-library-stability-check/references/CODE_EXAMPLES.md +308 -308
- package/vendor/Server/Skills/arkts-library-stability-check/references/SCORING_RULES.md +90 -90
- package/vendor/Server/Skills/arkts-library-stability-check/scripts/validate-skill.cjs +282 -282
- package/vendor/Server/Skills/arkts-library-test-coverage-check/SKILL.md +360 -360
- package/vendor/Server/Skills/arkts-library-test-coverage-check/assets/REPORT_TEMPLATE.md +145 -145
- package/vendor/Server/Skills/arkts-library-test-coverage-check/references/CHECKLIST.md +252 -252
- package/vendor/Server/Skills/arkts-library-test-coverage-check/references/MCP_TOOL_USAGE.md +114 -114
- package/vendor/Server/Skills/arkts-library-test-coverage-check/scripts/validate-skill.cjs +262 -262
- package/vendor/Server/Skills/arkts-library-xts-code/SKILL.md +455 -455
- package/vendor/Server/Skills/arkts-library-xts-code/assets/report-template.md +60 -60
- package/vendor/Server/Skills/arkts-library-xts-code/references/ACCESS_MODIFIER_PRECHECK.md +76 -76
- package/vendor/Server/Skills/arkts-library-xts-code/references/BUILD_VERIFICATION.md +200 -200
- package/vendor/Server/Skills/arkts-library-xts-code/references/CODE_STANDARDS.md +518 -518
- package/vendor/Server/Skills/arkts-library-xts-code/references/SUBAGENT_PROMPT_TEMPLATE.md +276 -276
- package/vendor/Server/Skills/arkts-library-xts-code/references/SYSTEM_API_LOOKUP.md +92 -92
- package/vendor/Server/Skills/arkts-library-xts-code/references/XTS_TEMPLATE.md +767 -767
- package/vendor/Server/Skills/arkts-library-xts-code/scripts/build.ps1 +93 -93
- package/vendor/Server/Skills/arkts-library-xts-code/scripts/code-linter.cjs +432 -432
- package/vendor/Server/Skills/arkts-library-xts-code/scripts/migrate.cjs +851 -851
- package/vendor/Server/Skills/arkts-library-xts-code/scripts/ohpm-switch.cjs +788 -788
- package/vendor/Server/Skills/arkts-library-xts-code/scripts/precheck-access-modifiers.cjs +221 -221
- package/vendor/Server/Skills/arkts-library-xts-code-fix/SKILL.md +228 -228
- package/vendor/Server/Skills/arkts-library-xts-coverage/SKILL.md +97 -97
- package/vendor/Server/Skills/arkts-library-xts-doc/SKILL.md +194 -194
- package/vendor/Server/Skills/arkts-library-xts-doc/references/EXAMPLES.md +575 -575
- package/vendor/Server/Skills/arkts-library-xts-doc/references/TEMPLATE.md +574 -574
- package/vendor/Server/Skills/arkts-library-xts-doc/references/TESTABILITY_GUIDE.md +182 -182
- package/vendor/Server/Skills/arkts-library-xts-execution/SKILL.md +490 -490
- package/vendor/Server/Skills/arkts-library-xts-execution/references/error-fixing-examples.md +217 -217
- package/vendor/Server/Skills/arkts-library-xts-execution/scripts/build.ps1 +93 -93
- package/vendor/Server/Skills/arkts-library-xts-execution/scripts/code-linter.cjs +432 -432
- package/vendor/Server/Skills/arkts-library-xts-execution/scripts/migrate.cjs +851 -851
- package/vendor/Server/Skills/arkts-library-xts-execution/scripts/ohpm-switch.cjs +788 -788
- package/vendor/Server/Skills/flutter-code-check/SKILL.md +299 -299
- package/vendor/Server/Skills/flutter-code-check/assets/OUTPUT_TEMPLATE.md +311 -311
- package/vendor/Server/Skills/flutter-code-check/references/CHECKLIST.md +190 -190
- package/vendor/Server/Skills/flutter-code-check/references/PLATFORMS.md +133 -133
- package/vendor/Server/Skills/flutter-code-check/scripts/validate-skill.cjs +259 -259
- package/vendor/Server/Skills/flutter-interface/README.md +75 -75
- package/vendor/Server/Skills/flutter-interface/SKILL.md +291 -291
- package/vendor/Server/Skills/flutter-interface/references/EXAMPLES.md +336 -336
- package/vendor/Server/Skills/flutter-interface/references/GIT_CLONE_GUIDE.md +190 -190
- package/vendor/Server/Skills/flutter-interface/references/SCRIPT_REFERENCE.md +258 -258
- package/vendor/Server/Skills/flutter-interface/references/TEMPLATE.md +254 -254
- package/vendor/Server/Skills/flutter-library-consistency-check/SKILL.md +517 -517
- package/vendor/Server/Skills/flutter-library-consistency-check/references/CHECKLIST.md +381 -381
- package/vendor/Server/Skills/flutter-library-consistency-check/references/FUNCTION_COMPARISON_GUIDE.md +341 -341
- package/vendor/Server/Skills/flutter-library-consistency-check/references/PLATFORM_LIMITATION_GUIDE.md +71 -71
- package/vendor/Server/Skills/flutter-library-documentation-quality-check/SKILL.md +518 -518
- package/vendor/Server/Skills/flutter-library-documentation-quality-check/references/CHECKLIST.md +406 -406
- package/vendor/Server/Skills/flutter-library-memory-leak-check/SKILL.md +652 -652
- package/vendor/Server/Skills/flutter-library-memory-leak-check/references/CHECKLIST.md +396 -396
- package/vendor/Server/Skills/flutter-library-stability-check/SKILL.md +744 -744
- package/vendor/Server/Skills/flutter-library-stability-check/references/CHECKLIST.md +720 -720
- package/vendor/Server/Skills/flutter-library-test-coverage-check/SKILL.md +414 -414
- package/vendor/Server/Skills/flutter-library-test-coverage-check/assets/REPORT_TEMPLATE.md +150 -150
- package/vendor/Server/Skills/flutter-library-test-coverage-check/references/CHECKLIST.md +304 -304
- package/vendor/Server/Skills/flutter-library-test-coverage-check/references/SCORING_RULES.md +265 -265
- package/vendor/Server/Skills/flutter-library-test-coverage-check/references/SCRIPT_USAGE.md +286 -286
- package/vendor/Server/Skills/knowledge-import/SKILL.md +383 -383
- package/vendor/Server/Skills/knowledge-import/references/MCP_TOOL_USAGE.md +165 -165
- package/vendor/Server/Skills/knowledge-import/references/SKILL_LOCATOR_GUIDE.md +91 -91
- package/vendor/Server/Skills/knowledge-import/references/SKILL_OPTIMIZATION_GUIDE.md +127 -127
- package/vendor/Server/Skills/ohos-lib-pr-push/SKILL.md +453 -301
- package/vendor/Server/Skills/ohos-lib-pr-push/assets/PR_CHECKLIST.md +151 -0
- package/vendor/Server/Skills/ohos-lib-pr-push/assets/PR_ISSUE_TEMPLATE.md +257 -105
- package/vendor/Server/Skills/ohos-lib-pr-push/references/GITCODE_API.md +191 -127
- package/vendor/Server/Skills/ohos-lib-pr-push/scripts/gitcode-api.cjs +317 -208
- package/vendor/Server/Skills/rn-code-check/SKILL.md +320 -320
- package/vendor/Server/Skills/rn-code-check/references/API-GUIDE.md +234 -234
- package/vendor/Server/Skills/rn-code-check/references/CHECKLIST.md +188 -188
- package/vendor/Server/Skills/rn-code-check/references/REPORT-TEMPLATE.md +246 -246
- package/vendor/Server/Skills/rn-lib-add-example/SKILL.md +198 -198
- package/vendor/Server/Skills/rn-lib-add-example/references/APP_RENAME_GUIDE.md +40 -40
- package/vendor/Server/Skills/rn-lib-add-example/references/SHELL_ADAPTATION_CHECKLIST.md +78 -78
- package/vendor/Server/Skills/rn-lib-add-example/references/TEMPLATE_REPO_GUIDE.md +70 -70
- package/vendor/Server/Skills/rn-lib-add-example/references/VERIFICATION_GUIDE.md +47 -47
- package/vendor/Server/Skills/rn-lib-add-example/scripts/create-example.cjs +252 -252
- package/vendor/Server/Skills/rn-lib-update-doc/SKILL.md +176 -176
- package/vendor/Server/Skills/rn-lib-update-doc/config.json +5 -5
- package/vendor/Server/Skills/rn-lib-update-doc/references/changelog-template.md +35 -35
- package/vendor/Server/Skills/rn-lib-update-doc/references/format-diff.md +137 -137
- package/vendor/Server/Skills/rn-lib-update-doc/references/link-registry.json +33 -33
- package/vendor/Server/Skills/rn-lib-update-doc/references/model-0.4.2-overview.md +40 -40
- package/vendor/Server/Skills/rn-lib-update-doc/references/model-0.4.2.md +429 -429
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/detect-readme-format.cjs +105 -105
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/find-usage-doc.cjs +90 -90
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/link-verify.cjs +213 -213
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/normalize-changelog.cjs +73 -73
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/normalize-package-meta.cjs +258 -258
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/normalize-readme-links.cjs +341 -341
- package/vendor/Server/Skills/rn-lib-update-doc/scripts/resolve-usage-docs.cjs +67 -67
- package/vendor/Server/Skills/rn-library-consistency-check/SKILL.md +299 -299
- package/vendor/Server/Skills/rn-library-consistency-check/assets/REPORT_TEMPLATE.md +293 -293
- package/vendor/Server/Skills/rn-library-consistency-check/references/ARKTS_COMPONENT_CHECK_GUIDE.md +857 -857
- package/vendor/Server/Skills/rn-library-consistency-check/references/ARKTS_TURBOMODULE_CHECK_GUIDE.md +856 -856
- package/vendor/Server/Skills/rn-library-consistency-check/references/CHECKLIST.md +157 -157
- package/vendor/Server/Skills/rn-library-consistency-check/references/CPP_COMPONENT_CHECK_GUIDE.md +801 -801
- package/vendor/Server/Skills/rn-library-consistency-check/references/CPP_TURBOMODULE_CHECK_GUIDE.md +683 -683
- package/vendor/Server/Skills/rn-library-consistency-check/references/FUNCTION_COMPARISON_GUIDE.md +233 -233
- package/vendor/Server/Skills/rn-library-consistency-check/references/NATIVE_COMPONENT_IDENTIFICATION.md +1373 -1373
- package/vendor/Server/Skills/rn-library-consistency-check/references/SCORING_STANDARD.md +220 -220
- package/vendor/Server/Skills/rn-library-consistency-check/scripts/validate-skill.py +245 -245
- package/vendor/Server/Skills/rn-library-documentation-quality-check/SKILL.md +263 -263
- package/vendor/Server/Skills/rn-library-documentation-quality-check/assets/MODEL.md +414 -414
- package/vendor/Server/Skills/rn-library-documentation-quality-check/assets/MODEL_en.md +413 -413
- package/vendor/Server/Skills/rn-library-documentation-quality-check/assets/REPORT_TEMPLATE.md +311 -311
- package/vendor/Server/Skills/rn-library-documentation-quality-check/references/CHECK_CHECKLIST.md +355 -355
- package/vendor/Server/Skills/rn-library-documentation-quality-check/references/CROSS_VALIDATION_GUIDE.md +115 -115
- package/vendor/Server/Skills/rn-library-documentation-quality-check/references/DOC_COLLECTION_GUIDE.md +139 -139
- package/vendor/Server/Skills/rn-library-documentation-quality-check/references/EXAMPLES.md +586 -586
- package/vendor/Server/Skills/rn-library-documentation-quality-check/references/GOTCHAS.md +57 -57
- package/vendor/Server/Skills/rn-library-documentation-quality-check/scripts/validate-skill.py +259 -259
- package/vendor/Server/Skills/rn-library-interface-analyzer/SKILL.md +301 -301
- package/vendor/Server/Skills/rn-library-interface-analyzer/assets/REPORT_TEMPLATE.md +148 -148
- package/vendor/Server/Skills/rn-library-interface-analyzer/references/DOC_ANNOTATION_GUIDE.md +118 -118
- package/vendor/Server/Skills/rn-library-interface-analyzer/references/SCRIPT_USAGE_GUIDE.md +168 -168
- package/vendor/Server/Skills/rn-library-interface-analyzer/references/URL_PARSING_RULES.md +176 -176
- package/vendor/Server/Skills/rn-library-issue-generalizer/SKILL.md +274 -274
- package/vendor/Server/Skills/rn-library-issue-generalizer/assets/case-template.md +45 -45
- package/vendor/Server/Skills/rn-library-issue-generalizer/assets/rule-template.md +25 -25
- package/vendor/Server/Skills/rn-library-issue-generalizer/references/PR_FETCH_GUIDE.md +61 -61
- package/vendor/Server/Skills/rn-library-issue-generalizer/references/RULE_TEMPLATE_GUIDE.md +165 -165
- package/vendor/Server/Skills/rn-library-issue-generalizer/scripts/fetch-pr-info.py +239 -239
- package/vendor/Server/Skills/rn-library-known-issue-check/SKILL.md +263 -263
- package/vendor/Server/Skills/rn-library-known-issue-check/assets/REPORT_TEMPLATE.md +96 -96
- package/vendor/Server/Skills/rn-library-known-issue-check/references/COMPLIANCE_CHECKLIST.md +57 -57
- package/vendor/Server/Skills/rn-library-known-issue-check/references/INSPECTION_GUIDE.md +99 -99
- package/vendor/Server/Skills/rn-library-known-issue-check/references/PRESCREEN_GUIDE.md +64 -64
- package/vendor/Server/Skills/rn-library-known-issue-check/references/SOURCE_PREP_GUIDE.md +74 -74
- package/vendor/Server/Skills/rn-library-known-issue-check/scripts/validate-known-issue-report.py +164 -164
- package/vendor/Server/Skills/rn-library-memory-leak-check/SKILL.md +356 -339
- package/vendor/Server/Skills/rn-library-memory-leak-check/assets/REPORT_TEMPLATE.md +85 -83
- package/vendor/Server/Skills/rn-library-memory-leak-check/references/CHECKLIST.md +905 -859
- package/vendor/Server/Skills/rn-library-memory-leak-check/references/HARMONY_CODE_PATTERNS.md +124 -122
- package/vendor/Server/Skills/rn-library-memory-leak-check/scripts/scan_harmony_code.py +287 -279
- package/vendor/Server/Skills/rn-library-stability-check/SKILL.md +273 -273
- package/vendor/Server/Skills/rn-library-stability-check/assets/REPORT_TEMPLATE.md +129 -129
- package/vendor/Server/Skills/rn-library-stability-check/references/CHECKLIST.md +581 -581
- package/vendor/Server/Skills/rn-library-stability-check/references/SCORING_RULES.md +138 -138
- package/vendor/Server/Skills/rn-library-stability-check/scripts/scan-harmony-code.py +168 -168
- package/vendor/Server/Skills/rn-library-test-coverage-check/SKILL.md +526 -506
- package/vendor/Server/Skills/rn-library-test-coverage-check/references/CHECKLIST.md +321 -280
- package/vendor/Server/Skills/rn-library-test-coverage-check/references/DEMO_LOCATION.md +221 -221
- package/vendor/Server/Skills/rn-library-test-coverage-check/references/REPORT_TEMPLATE.md +220 -209
- package/vendor/Server/Skills/rn-library-test-coverage-check/references/SCRIPT_USAGE.md +325 -325
- package/vendor/Server/Skills/rn-ohos-xts-generator/SKILL.md +279 -279
- package/vendor/Server/Skills/rn-ohos-xts-generator/assets/TEST_FILE_TEMPLATES.md +404 -404
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/BUILD_TROUBLESHOOTING.md +185 -185
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/BUILD_WORKFLOW.md +265 -265
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/COMMON_CONFIG.md +189 -189
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/CONFIG_GUIDE.md +203 -203
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/COVERAGE_ANALYZER.md +147 -147
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/DESIGN_DOC_GUIDE.md +148 -148
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/GENERATION_FLOW.md +165 -165
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/GENERATION_STRATEGY.md +195 -195
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/HARMONY_SCANNER.md +249 -249
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/JEST_FRAMEWORK.md +235 -235
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/PLATFORM_COMPAT.md +161 -161
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/RN_TEST_PATTERNS.md +413 -413
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/SOURCE_PARSER.md +235 -235
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/TEST_CONVENTIONS.md +245 -245
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/TROUBLESHOOTING.md +282 -282
- package/vendor/Server/Skills/rn-ohos-xts-generator/references/USAGE_GUIDE.md +251 -251
- package/vendor/Server/Skills/rnoh-cptf-api-test/SKILL.md +469 -469
- package/vendor/Server/Skills/rnoh-cptf-api-test/assets/CPTF_TEST_TEMPLATE.md +310 -310
- package/vendor/Server/Skills/rnoh-cptf-api-test/assets/DEMO_PAGE_TEMPLATE.md +303 -303
- package/vendor/Server/Skills/rnoh-cptf-api-test/references/CPTF_TEST_GENERATION_GUIDE.md +421 -421
- package/vendor/Server/Skills/rnoh-cptf-api-test/references/DEMO_GENERATION_GUIDE.md +358 -358
- package/vendor/Server/Skills/rnoh-cptf-api-test/references/QUALITY_CHECKLIST.md +114 -114
- package/vendor/Server/Skills/rnoh-cptf-api-test/references/SPEC_PARSING_GUIDE.md +274 -274
- package/vendor/Server/Skills/rnoh-cptf-api-test/scripts/validate-rnoh-cptf-api-test.sh +185 -185
- package/vendor/Server/Skills/rnoh-cptf-demo-test/SKILL.md +191 -191
- package/vendor/Server/Skills/rnoh-cptf-demo-test/assets/TEST_TEMPLATE.md +216 -216
- package/vendor/Server/Skills/rnoh-cptf-demo-test/references/CPTF_SETUP.md +107 -107
- package/vendor/Server/Skills/rnoh-cptf-demo-test/references/DEMO_ANALYSIS.md +120 -120
- package/vendor/Server/Skills/rnoh-cptf-demo-test/scripts/validate-rnoh-cptf-test.sh +108 -108
- package/vendor/Server/Skills/rnoh-cptf-test-run/SKILL.md +237 -237
- package/vendor/Server/Skills/rnoh-cptf-test-run/references/DEBUG_PLAYBOOK.md +261 -261
- package/vendor/Server/Skills/rnoh-cptf-test-run/scripts/validate-run-env.sh +112 -112
- package/vendor/Server/Skills/rnoh-lib-code-adapt/SKILL.md +497 -497
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/adapt-checklist.md +270 -270
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/api-migration-checklist.md +164 -164
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/common-compile-errors.md +556 -556
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/deveco-cli-tools.md +459 -459
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/edge-cases.md +65 -65
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/har-tgz-build.md +512 -512
- package/vendor/Server/Skills/rnoh-lib-code-adapt/references/version-compat-matrix.md +132 -132
- package/vendor/Server/Skills/rnoh-lib-code-adapt/scripts/auto-integrate.sh +424 -424
- package/vendor/Server/Skills/rnoh-lib-demo-coverage/SKILL.md +137 -137
- package/vendor/Server/Skills/rnoh-lib-demo-create/SKILL.md +306 -306
- package/vendor/Server/Skills/rnoh-lib-demo-create/assets/DEMO_PAGE_TEMPLATE.md +485 -485
- package/vendor/Server/Skills/rnoh-lib-demo-create/assets/INDEX_TEMPLATE.md +172 -172
- package/vendor/Server/Skills/rnoh-lib-demo-create/references/DEMO_CODE_RULES.md +422 -422
- package/vendor/Server/Skills/rnoh-lib-demo-create/references/QUALITY_CHECKLIST.md +95 -95
- package/vendor/Server/Skills/rnoh-lib-demo-create/references/SOURCE_EXPLORATION.md +169 -169
- package/vendor/Server/Skills/rnoh-lib-demo-doc/SKILL.md +554 -554
- package/vendor/Server/Skills/rnoh-lib-demo-doc/assets/DEMO_DOC_TEMPLATE.md +106 -106
- package/vendor/Server/Skills/rnoh-lib-demo-doc/references/COVERAGE_INCREMENTAL.md +216 -216
- package/vendor/Server/Skills/rnoh-lib-demo-doc/references/DEMO_DESIGN_RULES.md +413 -413
- package/vendor/Server/Skills/rnoh-lib-demo-doc/references/OUTPUT_FORMAT.md +269 -269
- package/vendor/Server/Skills/rnoh-lib-demo-doc/references/QUALITY_CHECKLIST.md +98 -98
- package/vendor/Server/Skills/rnoh-lib-func-test/SKILL.md +337 -337
- package/vendor/Server/Skills/rnoh-lib-rnt-search/SKILL.md +722 -722
- package/vendor/Server/Skills/rnoh-lib-rnt-search/assets/PORT_REPORT_TEMPLATE.md +219 -219
- package/vendor/Server/Skills/rnoh-lib-rnt-search/references/DEMO_PORTING_GUIDE.md +345 -345
- package/vendor/Server/Skills/rnoh-lib-rnt-search/references/PORT_VERIFICATION.md +269 -269
- package/vendor/Server/Skills/rnoh-lib-rnt-search/references/RNT_PROJECT_STRUCTURE.md +173 -173
- package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/analyze-demo-deps.cjs +267 -267
- package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/detect-rnoh-version.cjs +174 -174
- package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/find-rnt-demo.sh +111 -111
- package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/port-demo.sh +186 -186
- package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/read-lib-meta.cjs +150 -150
- package/vendor/Server/Skills/rnoh-lib-test-align/SKILL.md +296 -296
- package/vendor/Server/Skills/rnoh-lib-test-align/references/jest-troubleshooting.md +371 -371
- package/vendor/Server/Skills/rnoh-lib-test-align/references/port-test-demo-guide.md +212 -212
- package/vendor/Server/Skills/rnoh-lib-test-align/references/runtime-troubleshooting.md +345 -345
- package/vendor/Server/Skills/rnoh-lib-test-align/references/unit-test-template.md +223 -223
- package/vendor/Server/Skills/rnoh-lib-test-align/scripts/port-test-demo.sh +1053 -1053
- package/vendor/Server/Skills/rnoh-lib-version-diff/SKILL.md +295 -255
- package/vendor/Server/Skills/rnoh-lib-version-diff/references/OHOS_ADAPTATION.md +82 -77
- package/vendor/Server/Skills/rnoh-lib-version-diff/references/OHOS_API_LOOKUP.md +224 -224
- package/vendor/Server/Skills/rnoh-lib-version-diff/references/script-reference.md +175 -174
- package/vendor/Server/Skills/rnoh-lib-version-diff/scripts/detect-upstream-version.js +967 -967
- package/vendor/Server/Skills/rnoh-lib-version-diff/scripts/generate-diff.js +1798 -1798
- package/vendor/Server/Skills/rnoh-lib-version-diff/scripts/package.json +5 -5
- package/vendor/Server/Skills/rnoh-lib-version-diff/templates/report-template.md +180 -137
- package/vendor/Server/Skills/rnoh-lib-xts-coverage/SKILL.md +145 -145
- package/vendor/Server/Skills/skill-generator/SKILL.md +365 -365
- package/vendor/Server/Skills/skill-generator/assets/SKILL_TEMPLATE.md +183 -183
- package/vendor/Server/Skills/skill-generator/references/COMPLIANCE_CHECKLIST.md +82 -82
- package/vendor/Server/Skills/skill-generator/references/KB_QUERY_GUIDE.md +110 -110
- package/vendor/Server/Skills/skill-generator/references/MCP_TOOL_DISCOVERY.md +122 -122
- package/vendor/Server/Skills/skill-generator/references/SKILL_SPEC.md +121 -121
- package/vendor/Server/Skills/skill-generator/scripts/validate-skill.cjs +259 -259
- package/vendor/Server/Skills/task-analysis/SKILL.md +234 -234
- package/vendor/Server/Skills/task-analysis/assets/OUTPUT_EXAMPLES.md +160 -160
- package/vendor/Server/Skills/task-analysis/references/ACCEPTANCE_CRITERIA_GUIDE.md +190 -190
- package/vendor/Server/Skills/task-analysis/references/ANALYSIS_SCHEMA.md +224 -224
- package/vendor/Server/Skills/task-analysis/references/INTEGRATION_CONTEXT.md +162 -162
- package/vendor/Server/Skills/task-analysis/references/LESSONS_LEARNED.md +55 -55
- package/vendor/Server/Skills/task-analysis/references/REPLAN_CONTEXT_GUIDE.md +126 -126
- package/vendor/Server/Skills/task-analysis/scripts/validate-analysis-output.sh +256 -256
- package/vendor/Server/Skills/task-decomposition/SKILL.md +528 -528
- package/vendor/Server/Skills/task-decomposition/assets/OUTPUT_EXAMPLES.md +451 -451
- package/vendor/Server/Skills/task-decomposition/references/ACCEPTANCE_CRITERIA_GUIDE.md +179 -179
- package/vendor/Server/Skills/task-decomposition/references/DEPENDENCY_GRAPH_GUIDE.md +152 -152
- package/vendor/Server/Skills/task-decomposition/references/INTEGRATION_CONTEXT.md +175 -175
- package/vendor/Server/Skills/task-decomposition/references/REPLAN_CONTEXT_GUIDE.md +195 -195
- package/vendor/Server/Skills/task-decomposition/references/TASK_DECOMPOSITION_TEMPLATES.md +226 -226
- package/vendor/Server/Skills/task-decomposition/scripts/list-available-skills.cjs +263 -263
- package/vendor/Server/Skills/task-decomposition/scripts/skill-blacklist.json +29 -29
- package/vendor/Server/Skills/task-decomposition/scripts/validate-decomposition-output.cjs +376 -376
- package/vendor/Server/Skills/task-decomposition/scripts/validate-param-consistency.cjs +259 -259
- package/vendor/Server/Skills/task-decomposition/scripts/validate-specified-skills.cjs +216 -216
- package/vendor/Server/Skills/task-decomposition/scripts/validate-step-graph.cjs +424 -424
- package/vendor/Server/Skills/tpc-cpp-check/SKILL.md +427 -427
- package/vendor/Server/Skills/tpc-cpp-check/references/CHECKLIST.md +214 -214
- package/vendor/Server/Skills/tpc-cpp-check/references/HPKBUILD_GUIDE.md +235 -235
- package/vendor/Server/Skills/tpc-cpp-check/references/REPORT_TEMPLATE.md +250 -250
- package/vendor/Server/TestCheck/TestCheck.js +775 -775
- package/vendor/Server/TestCheck/index.js +11 -11
- package/vendor/Server/library/McpToolGuide.js +280 -280
- package/vendor/Server/library/StatsService.js +126 -126
- package/vendor/Server/library/cstTime.js +16 -16
- package/vendor/VERSION +3 -3
- package/workflows/pr-check.mjs +105 -105
- package/workflows/pr-push.mjs +192 -192
- package/vendor/Server/Agent/SkillSelector/types.js +0 -63
|
@@ -1,161 +1,161 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* prompts.js — ReAct 各推理步骤的 Prompt 模板
|
|
3
|
-
*
|
|
4
|
-
* 设计原则:
|
|
5
|
-
* - 只存放纯文本模板与占位符替换逻辑,不含任何业务编排
|
|
6
|
-
* - 所有 LLM 调用统一要求 JSON 输出,便于程序解析
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
// ─── Reason #1:任务拆解 Prompt ──────────────────────────────────────────────
|
|
10
|
-
// 输入:具体任务(task)。输出:keywords / intent / constraints / techStack / whenToUse
|
|
11
|
-
const TASK_ANALYSIS_PROMPT = `你是一个任务分析助手。请分析下面的"具体事项",拆解出用于后续 SKILL 模糊匹配的关键信息。
|
|
12
|
-
|
|
13
|
-
具体事项:
|
|
14
|
-
"""
|
|
15
|
-
{{TASK}}
|
|
16
|
-
"""
|
|
17
|
-
|
|
18
|
-
【关键词提取规则】
|
|
19
|
-
1. keywords 必须包含至少一个"动作类型/阶段"词(动词类),如:准出审核、验收测试、验收检查、可行性分析、代码生成、代码修复、文档生成、迁移移植、扫描检视、聚合汇总、执行检视。这类词决定匹配哪个动作型 SKILL,不可丢失。
|
|
20
|
-
2. 当任务描述很长时,优先保留开头的动作意图词,不要被后续技术细节(库列表、API 名、文件路径)淹没。
|
|
21
|
-
3. keywords 须兼顾"动作类词"与"领域/产出物特征词"两类,共 5-10 个,全部小写。动作类词(如"扫描、检视、生成")与领域/产出物词(如"接口规格、接口签名、方法签名、方法级接口、导出链、覆盖率、xts、demo")分开,不要混为一谈。
|
|
22
|
-
4. intent 必须以动词开头并点明动作类型(如"准出审核""验收""汇总"),不要只描述技术目标。
|
|
23
|
-
5. 必须保留任务中决定"产出物类型 / SKILL 归属"的领域短语,作为领域/产出物特征词写入 keywords,不能只保留泛化动作词或技术名词。这类词如:接口规格、接口签名、方法签名、方法级接口、导出链、覆盖率、XTS、Demo 等。它们代表任务的真实交付物,是区分高度相似 SKILL 的关键。若任务包含此类短语,务必原样写入 keywords。
|
|
24
|
-
|
|
25
|
-
【whenToUse 提取规则】
|
|
26
|
-
6. whenToUse 必须直接识别并提取任务描述中的"触发场景/前置条件"表述,格式与候选 SKILL 的 useWhen("use when..."、"当...时调用")保持一致,便于逐词/逐句语义比对。
|
|
27
|
-
- 优先从任务原文中定位触发语境词,如"当...时"、"use when"、"对...进行"、"针对..."、"输入是..."等,把其后跟随的场景/对象原样提取为一句话。
|
|
28
|
-
- 若任务没有显式触发语境词,则依据任务的输入类型归纳触发场景(是"已有产物/JSON/MD/报告"、"源码/仓库"、"待检视的代码差异",还是其它)。
|
|
29
|
-
- 只描述"什么输入/什么场景下触发本任务",不要在此重复技术细节、库列表或输出形式。
|
|
30
|
-
- 例:任务含"对 PR 的差异做代码检视" → whenToUse="对代码差异进行检视"
|
|
31
|
-
- 例:任务含"获取仓库源码并分析目录结构" → whenToUse="分析仓库源码目录结构"
|
|
32
|
-
7. 若任务明确属于某类专属触发场景(如 PR 检视),whenToUse 必须原样体现该场景特征词(如"PR");不得引入任务中不存在的场景特征,避免与 SKILL 的 useWhen 误判为一致。
|
|
33
|
-
|
|
34
|
-
【techStack 提取规则】
|
|
35
|
-
8. techStack 提取禁止主观猜测仓库语言。当任务描述包含 gitcode/gitee 等仓库 URL 时,不得仅凭库名联想其语言(如 opencsv 联想成 Java);若任务未明确说明语言,techStack 只填任务中明确出现的语言/技术名词,必要时留空,交由后续执行阶段通过 gitcode 仓库语言 API 确认。
|
|
36
|
-
|
|
37
|
-
【示例】
|
|
38
|
-
输入:"对 libcurl 鸿蒙化产物进行准出审核,对照验收标准判断是否满足..."
|
|
39
|
-
正确输出:{"intent":"准出审核 libcurl 鸿蒙化产物是否满足验收标准","keywords":["准出审核","验收测试","验收检查","libcurl","鸿蒙化","arkts"],"whenToUse":"对任务执行产物做准出验收审核"}
|
|
40
|
-
错误输出(丢失动作词):{"intent":"分析 libcurl 鸿蒙化结果","keywords":["libcurl","鸿蒙化","arkts","harmonyos"]}
|
|
41
|
-
|
|
42
|
-
输入:"XTS 测试执行失败,根据失败报告修复已生成的测试代码使其通过编译执行..."
|
|
43
|
-
正确输出:{"intent":"修复已生成的 XTS 测试代码使其通过编译执行","keywords":["代码修复","修复","测试","xts","test.ets","编译","执行"],"whenToUse":"修复已有测试代码产物使其通过编译执行"}
|
|
44
|
-
错误输出(误判为生成):{"intent":"生成 XTS 测试代码","keywords":["代码生成","测试","xts","test.ets"]}
|
|
45
|
-
|
|
46
|
-
输入:"克隆 FastBle 源仓库,解析所有 ArkTS/TypeScript 源文件提取对外公开的方法级接口(导出类名、方法名、参数列表、返回值类型、访问修饰符),输出方法级接口规格文档(api-spec.md)"
|
|
47
|
-
正确输出:{"intent":"扫描源码提取方法级接口规格并输出文档","keywords":["接口规格","接口签名","方法签名","方法级接口","扫描","文档生成","arkts","typescript","fastble"],"whenToUse":"从源码提取方法级接口规格时"}
|
|
48
|
-
错误输出(丢失领域词):{"intent":"扫描源码并输出文档","keywords":["扫描检视","文档生成","arkts","typescript","fastble"]}
|
|
49
|
-
|
|
50
|
-
请严格输出如下 JSON(不要输出任何额外文字、不要用 markdown 代码围栏):
|
|
51
|
-
{
|
|
52
|
-
"intent": "以动词开头,一句话概括任务目标,须点明动作类型",
|
|
53
|
-
"keywords": ["5-10个关键词,小写,须同时包含动作类词(至少1个)与领域/产出物特征词"],
|
|
54
|
-
"constraints": ["任务约束或前置条件,如语言、平台、输出形式等"],
|
|
55
|
-
"techStack": ["涉及的技术栈或语言,如 C++、ArkTS、Flutter、React Native 等;仅填任务中明确出现的语言,禁止凭仓库 URL 指向的库名猜测语言,仓库语言由执行阶段调用 gitcode API 确认"],
|
|
56
|
-
"whenToUse": "直接提取任务中的触发场景/前置条件表述(如\"对代码差异进行检视\"),格式对齐 SKILL 的 useWhen"
|
|
57
|
-
}`;
|
|
58
|
-
|
|
59
|
-
// ─── Reason #2:SKILL 排序 Prompt ─────────────────────────────────────────────
|
|
60
|
-
// 输入:具体任务 + 任务拆解 + top5 候选 SKILL。输出:ranked 排序列表 + bestId
|
|
61
|
-
// 采用规则化评分:4 个维度(意图40/技术栈30/约束20/关键词10)+ 硬否决规则
|
|
62
|
-
// 解决"语言不匹配仍给高分"的不稳定问题
|
|
63
|
-
const SKILL_RANKING_PROMPT = `你是一个严格的 SKILL 评分专家。下面给出一个具体事项、它的任务拆解,以及若干候选 SKILL。请按下方评分规则对每个候选打分并排序。
|
|
64
|
-
|
|
65
|
-
【具体事项】
|
|
66
|
-
{{TASK}}
|
|
67
|
-
|
|
68
|
-
【任务拆解】
|
|
69
|
-
{{ANALYSIS}}
|
|
70
|
-
|
|
71
|
-
【候选 SKILL 列表】
|
|
72
|
-
{{CANDIDATES}}
|
|
73
|
-
|
|
74
|
-
【任务触发场景(whenToUse)】
|
|
75
|
-
{{WHEN_TO_USE}}
|
|
76
|
-
|
|
77
|
-
═══════════════════════════════════════════
|
|
78
|
-
评分规则(总分 100,分 4 个维度)
|
|
79
|
-
═══════════════════════════════════════════
|
|
80
|
-
|
|
81
|
-
维度一|意图契合度(满分 40)
|
|
82
|
-
- 40 分:SKILL 的核心动作与任务动作完全一致(如任务"汇总报告",SKILL 正是"聚合多份报告")
|
|
83
|
-
- 25-35 分:动作相关但不完全一致(如同为分析类,但偏编译验证而非可行性)
|
|
84
|
-
- 10-20 分:仅输出物相似但动作不同(如任务"汇总检视结果",SKILL 是"执行检视"——都产出报告,但动作不同)
|
|
85
|
-
- 0-5 分:SKILL 功能与任务意图无关
|
|
86
|
-
|
|
87
|
-
维度二|技术栈匹配(满分 30)
|
|
88
|
-
- 30 分:SKILL 的 language 与任务 techStack 完全一致(如任务 C++、SKILL C/C++)
|
|
89
|
-
- 15-25 分:技术栈同属一大类但不完全一致(如 C 与 C++、ArkTS 与 TS)
|
|
90
|
-
- 0-5 分:技术栈不匹配(如任务要 Go、SKILL 是 C/C++;任务要 Java、SKILL 是 Flutter)
|
|
91
|
-
|
|
92
|
-
维度三|约束满足度(满分 20)
|
|
93
|
-
- 20 分:输出形式、前置条件等约束全部满足
|
|
94
|
-
- 10-15 分:部分约束满足
|
|
95
|
-
- 0-5 分:约束基本不满足
|
|
96
|
-
|
|
97
|
-
维度四|关键词命中(满分 10)
|
|
98
|
-
- 10 分:任务关键词大量命中 name/description
|
|
99
|
-
- 5 分:部分命中
|
|
100
|
-
- 0 分:几乎不命中
|
|
101
|
-
|
|
102
|
-
═══════════════════════════════════════════
|
|
103
|
-
硬性否决规则(必须严格执行,不得通融)
|
|
104
|
-
═══════════════════════════════════════════
|
|
105
|
-
1. useWhen 触发场景冲突 → 【总分上限 10】
|
|
106
|
-
判定方式:对比"任务 whenToUse"与候选 SKILL 的 "useWhen"(该技能何时该调用)是否语义一致
|
|
107
|
-
- 若候选 SKILL 声明了 useWhen,且任务的 whenToUse 与该 useWhen 描述的触发场景冲突,则判死
|
|
108
|
-
- 关键判据:任务的输入/触发场景与 SKILL 的前置输入类型不同
|
|
109
|
-
(例A:任务 whenToUse="分析仓库源码目录结构",SKILL useWhen="对 Pull Request 的代码差异进行检视" → 任务无 PR 意图但 SKILL 仅用于 PR → 冲突,总分不得 > 10)
|
|
110
|
-
(例B:任务 whenToUse="对代码差异进行检视",SKILL useWhen 含 PR → 一致,不触发本规则)
|
|
111
|
-
- 若候选 SKILL 的 useWhen 为空(未声明),则不触发本规则,按其它规则评分
|
|
112
|
-
2. 技术栈/语言不匹配 → 维度二计 0-5 分,且【总分上限 50】
|
|
113
|
-
(例:任务要 Go 开源库迁移,SKILL 的 language 是 C/C++ → 总分不得 > 50)
|
|
114
|
-
- **判定依据仅以任务拆解的 techStack(ANALYSIS 中的 techStack 字段)为准**。只有当 techStack 明确给出了某语言,且与该 SKILL 的 language 明确冲突时,才触发本硬否决。
|
|
115
|
-
- **techStack 为空 / 未明确语言时,禁止凭任务原文中的库名或常识推断语言**(如见到 "opencsv" 就臆断为 Java)。此时视为语言未指明,不触发语言硬否决,按其它维度正常评分。
|
|
116
|
-
- 不得把 SKILL 的 language 反向当作任务语言来推断匹配与否。
|
|
117
|
-
3. SKILL 功能阶段与任务意图不同 → 维度一上限 15 分
|
|
118
|
-
(例:任务要"可行性分析",SKILL 是"执行移植动作")
|
|
119
|
-
4. 严禁仅因"意图看起来契合"就给高分;当任务 techStack 明确指明语言且与 SKILL 语言冲突时,语言不匹配是硬伤,必须压低总分
|
|
120
|
-
5. 动作类型不一致 → 维度一(意图)上限 15 分,且【总分上限 45】
|
|
121
|
-
判定方式:对比任务的"核心动作动词"与 SKILL 的"核心动作动词"
|
|
122
|
-
- 任务动作是"汇总/聚合/合并/整理已有结果/文件" → SKILL 动作也必须是"汇总/聚合"类
|
|
123
|
-
- 任务动作是"汇总已有结果",SKILL 动作是"执行检视/扫描/分析源码" → 动作类型不一致,触发本规则
|
|
124
|
-
- 关键判据:任务的输入是已有产物(JSON/MD/报告文件),SKILL 的输入是源码/仓库 → 输入类型不同即动作类型不同
|
|
125
|
-
(例:任务"汇总 compliance-review.json 和 logic-review.json 生成总报告",SKILL 是"对源码进行编码质量检视" → 总分不得 > 45)
|
|
126
|
-
|
|
127
|
-
请严格输出如下 JSON(不要输出任何额外文字、不要用 markdown 代码围栏):
|
|
128
|
-
{
|
|
129
|
-
"bestId": "最佳 SKILL 的 id(即候选列表中的 dirName;若全部低分也填分数最高的)",
|
|
130
|
-
"ranked": [
|
|
131
|
-
{
|
|
132
|
-
"id": "SKILL 的 dirName",
|
|
133
|
-
"score": 0,
|
|
134
|
-
"dimensions": { "intent": 0, "techStack": 0, "constraint": 0, "keyword": 0 },
|
|
135
|
-
"reason": "一句话说明各维度得分依据,须点明是否触发硬否决"
|
|
136
|
-
}
|
|
137
|
-
]
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
要求:
|
|
141
|
-
- ranked 数组按 score 从高到低排序,且必须包含全部候选 SKILL
|
|
142
|
-
- score 必须等于 dimensions 各项之和
|
|
143
|
-
- dimensions 四个 key 必须齐全(intent/techStack/constraint/keyword)
|
|
144
|
-
- 若候选 SKILL 声明了 useWhen 且与任务 whenToUse 触发场景冲突,务必先触发硬否决规则 1
|
|
145
|
-
- 若候选 SKILL 的 language 与任务 techStack 不匹配,务必触发硬否决规则 2;但若任务 techStack 为空/未明确,不得凭库名推断语言,不触发规则 2
|
|
146
|
-
- 若任务输入是已有产物(JSON/MD/报告)而 SKILL 输入是源码/仓库,务必触发硬否决规则 5`;
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
* 简单模板替换:把 {{KEY}} 替换为 params[KEY]
|
|
150
|
-
* @param {string} template
|
|
151
|
-
* @param {Record<string, string>} params
|
|
152
|
-
* @returns {string}
|
|
153
|
-
*/
|
|
154
|
-
export function renderTemplate(template, params) {
|
|
155
|
-
return template.replace(/\{\{(\w+)\}\}/g, (_, key) =>
|
|
156
|
-
Object.prototype.hasOwnProperty.call(params, key) ? String(params[key]) : ''
|
|
157
|
-
);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
export { TASK_ANALYSIS_PROMPT, SKILL_RANKING_PROMPT };
|
|
161
|
-
export default { TASK_ANALYSIS_PROMPT, SKILL_RANKING_PROMPT, renderTemplate };
|
|
1
|
+
/**
|
|
2
|
+
* prompts.js — ReAct 各推理步骤的 Prompt 模板
|
|
3
|
+
*
|
|
4
|
+
* 设计原则:
|
|
5
|
+
* - 只存放纯文本模板与占位符替换逻辑,不含任何业务编排
|
|
6
|
+
* - 所有 LLM 调用统一要求 JSON 输出,便于程序解析
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
// ─── Reason #1:任务拆解 Prompt ──────────────────────────────────────────────
|
|
10
|
+
// 输入:具体任务(task)。输出:keywords / intent / constraints / techStack / whenToUse
|
|
11
|
+
const TASK_ANALYSIS_PROMPT = `你是一个任务分析助手。请分析下面的"具体事项",拆解出用于后续 SKILL 模糊匹配的关键信息。
|
|
12
|
+
|
|
13
|
+
具体事项:
|
|
14
|
+
"""
|
|
15
|
+
{{TASK}}
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
【关键词提取规则】
|
|
19
|
+
1. keywords 必须包含至少一个"动作类型/阶段"词(动词类),如:准出审核、验收测试、验收检查、可行性分析、代码生成、代码修复、文档生成、迁移移植、扫描检视、聚合汇总、执行检视。这类词决定匹配哪个动作型 SKILL,不可丢失。
|
|
20
|
+
2. 当任务描述很长时,优先保留开头的动作意图词,不要被后续技术细节(库列表、API 名、文件路径)淹没。
|
|
21
|
+
3. keywords 须兼顾"动作类词"与"领域/产出物特征词"两类,共 5-10 个,全部小写。动作类词(如"扫描、检视、生成")与领域/产出物词(如"接口规格、接口签名、方法签名、方法级接口、导出链、覆盖率、xts、demo")分开,不要混为一谈。
|
|
22
|
+
4. intent 必须以动词开头并点明动作类型(如"准出审核""验收""汇总"),不要只描述技术目标。
|
|
23
|
+
5. 必须保留任务中决定"产出物类型 / SKILL 归属"的领域短语,作为领域/产出物特征词写入 keywords,不能只保留泛化动作词或技术名词。这类词如:接口规格、接口签名、方法签名、方法级接口、导出链、覆盖率、XTS、Demo 等。它们代表任务的真实交付物,是区分高度相似 SKILL 的关键。若任务包含此类短语,务必原样写入 keywords。
|
|
24
|
+
|
|
25
|
+
【whenToUse 提取规则】
|
|
26
|
+
6. whenToUse 必须直接识别并提取任务描述中的"触发场景/前置条件"表述,格式与候选 SKILL 的 useWhen("use when..."、"当...时调用")保持一致,便于逐词/逐句语义比对。
|
|
27
|
+
- 优先从任务原文中定位触发语境词,如"当...时"、"use when"、"对...进行"、"针对..."、"输入是..."等,把其后跟随的场景/对象原样提取为一句话。
|
|
28
|
+
- 若任务没有显式触发语境词,则依据任务的输入类型归纳触发场景(是"已有产物/JSON/MD/报告"、"源码/仓库"、"待检视的代码差异",还是其它)。
|
|
29
|
+
- 只描述"什么输入/什么场景下触发本任务",不要在此重复技术细节、库列表或输出形式。
|
|
30
|
+
- 例:任务含"对 PR 的差异做代码检视" → whenToUse="对代码差异进行检视"
|
|
31
|
+
- 例:任务含"获取仓库源码并分析目录结构" → whenToUse="分析仓库源码目录结构"
|
|
32
|
+
7. 若任务明确属于某类专属触发场景(如 PR 检视),whenToUse 必须原样体现该场景特征词(如"PR");不得引入任务中不存在的场景特征,避免与 SKILL 的 useWhen 误判为一致。
|
|
33
|
+
|
|
34
|
+
【techStack 提取规则】
|
|
35
|
+
8. techStack 提取禁止主观猜测仓库语言。当任务描述包含 gitcode/gitee 等仓库 URL 时,不得仅凭库名联想其语言(如 opencsv 联想成 Java);若任务未明确说明语言,techStack 只填任务中明确出现的语言/技术名词,必要时留空,交由后续执行阶段通过 gitcode 仓库语言 API 确认。
|
|
36
|
+
|
|
37
|
+
【示例】
|
|
38
|
+
输入:"对 libcurl 鸿蒙化产物进行准出审核,对照验收标准判断是否满足..."
|
|
39
|
+
正确输出:{"intent":"准出审核 libcurl 鸿蒙化产物是否满足验收标准","keywords":["准出审核","验收测试","验收检查","libcurl","鸿蒙化","arkts"],"whenToUse":"对任务执行产物做准出验收审核"}
|
|
40
|
+
错误输出(丢失动作词):{"intent":"分析 libcurl 鸿蒙化结果","keywords":["libcurl","鸿蒙化","arkts","harmonyos"]}
|
|
41
|
+
|
|
42
|
+
输入:"XTS 测试执行失败,根据失败报告修复已生成的测试代码使其通过编译执行..."
|
|
43
|
+
正确输出:{"intent":"修复已生成的 XTS 测试代码使其通过编译执行","keywords":["代码修复","修复","测试","xts","test.ets","编译","执行"],"whenToUse":"修复已有测试代码产物使其通过编译执行"}
|
|
44
|
+
错误输出(误判为生成):{"intent":"生成 XTS 测试代码","keywords":["代码生成","测试","xts","test.ets"]}
|
|
45
|
+
|
|
46
|
+
输入:"克隆 FastBle 源仓库,解析所有 ArkTS/TypeScript 源文件提取对外公开的方法级接口(导出类名、方法名、参数列表、返回值类型、访问修饰符),输出方法级接口规格文档(api-spec.md)"
|
|
47
|
+
正确输出:{"intent":"扫描源码提取方法级接口规格并输出文档","keywords":["接口规格","接口签名","方法签名","方法级接口","扫描","文档生成","arkts","typescript","fastble"],"whenToUse":"从源码提取方法级接口规格时"}
|
|
48
|
+
错误输出(丢失领域词):{"intent":"扫描源码并输出文档","keywords":["扫描检视","文档生成","arkts","typescript","fastble"]}
|
|
49
|
+
|
|
50
|
+
请严格输出如下 JSON(不要输出任何额外文字、不要用 markdown 代码围栏):
|
|
51
|
+
{
|
|
52
|
+
"intent": "以动词开头,一句话概括任务目标,须点明动作类型",
|
|
53
|
+
"keywords": ["5-10个关键词,小写,须同时包含动作类词(至少1个)与领域/产出物特征词"],
|
|
54
|
+
"constraints": ["任务约束或前置条件,如语言、平台、输出形式等"],
|
|
55
|
+
"techStack": ["涉及的技术栈或语言,如 C++、ArkTS、Flutter、React Native 等;仅填任务中明确出现的语言,禁止凭仓库 URL 指向的库名猜测语言,仓库语言由执行阶段调用 gitcode API 确认"],
|
|
56
|
+
"whenToUse": "直接提取任务中的触发场景/前置条件表述(如\"对代码差异进行检视\"),格式对齐 SKILL 的 useWhen"
|
|
57
|
+
}`;
|
|
58
|
+
|
|
59
|
+
// ─── Reason #2:SKILL 排序 Prompt ─────────────────────────────────────────────
|
|
60
|
+
// 输入:具体任务 + 任务拆解 + top5 候选 SKILL。输出:ranked 排序列表 + bestId
|
|
61
|
+
// 采用规则化评分:4 个维度(意图40/技术栈30/约束20/关键词10)+ 硬否决规则
|
|
62
|
+
// 解决"语言不匹配仍给高分"的不稳定问题
|
|
63
|
+
const SKILL_RANKING_PROMPT = `你是一个严格的 SKILL 评分专家。下面给出一个具体事项、它的任务拆解,以及若干候选 SKILL。请按下方评分规则对每个候选打分并排序。
|
|
64
|
+
|
|
65
|
+
【具体事项】
|
|
66
|
+
{{TASK}}
|
|
67
|
+
|
|
68
|
+
【任务拆解】
|
|
69
|
+
{{ANALYSIS}}
|
|
70
|
+
|
|
71
|
+
【候选 SKILL 列表】
|
|
72
|
+
{{CANDIDATES}}
|
|
73
|
+
|
|
74
|
+
【任务触发场景(whenToUse)】
|
|
75
|
+
{{WHEN_TO_USE}}
|
|
76
|
+
|
|
77
|
+
═══════════════════════════════════════════
|
|
78
|
+
评分规则(总分 100,分 4 个维度)
|
|
79
|
+
═══════════════════════════════════════════
|
|
80
|
+
|
|
81
|
+
维度一|意图契合度(满分 40)
|
|
82
|
+
- 40 分:SKILL 的核心动作与任务动作完全一致(如任务"汇总报告",SKILL 正是"聚合多份报告")
|
|
83
|
+
- 25-35 分:动作相关但不完全一致(如同为分析类,但偏编译验证而非可行性)
|
|
84
|
+
- 10-20 分:仅输出物相似但动作不同(如任务"汇总检视结果",SKILL 是"执行检视"——都产出报告,但动作不同)
|
|
85
|
+
- 0-5 分:SKILL 功能与任务意图无关
|
|
86
|
+
|
|
87
|
+
维度二|技术栈匹配(满分 30)
|
|
88
|
+
- 30 分:SKILL 的 language 与任务 techStack 完全一致(如任务 C++、SKILL C/C++)
|
|
89
|
+
- 15-25 分:技术栈同属一大类但不完全一致(如 C 与 C++、ArkTS 与 TS)
|
|
90
|
+
- 0-5 分:技术栈不匹配(如任务要 Go、SKILL 是 C/C++;任务要 Java、SKILL 是 Flutter)
|
|
91
|
+
|
|
92
|
+
维度三|约束满足度(满分 20)
|
|
93
|
+
- 20 分:输出形式、前置条件等约束全部满足
|
|
94
|
+
- 10-15 分:部分约束满足
|
|
95
|
+
- 0-5 分:约束基本不满足
|
|
96
|
+
|
|
97
|
+
维度四|关键词命中(满分 10)
|
|
98
|
+
- 10 分:任务关键词大量命中 name/description
|
|
99
|
+
- 5 分:部分命中
|
|
100
|
+
- 0 分:几乎不命中
|
|
101
|
+
|
|
102
|
+
═══════════════════════════════════════════
|
|
103
|
+
硬性否决规则(必须严格执行,不得通融)
|
|
104
|
+
═══════════════════════════════════════════
|
|
105
|
+
1. useWhen 触发场景冲突 → 【总分上限 10】
|
|
106
|
+
判定方式:对比"任务 whenToUse"与候选 SKILL 的 "useWhen"(该技能何时该调用)是否语义一致
|
|
107
|
+
- 若候选 SKILL 声明了 useWhen,且任务的 whenToUse 与该 useWhen 描述的触发场景冲突,则判死
|
|
108
|
+
- 关键判据:任务的输入/触发场景与 SKILL 的前置输入类型不同
|
|
109
|
+
(例A:任务 whenToUse="分析仓库源码目录结构",SKILL useWhen="对 Pull Request 的代码差异进行检视" → 任务无 PR 意图但 SKILL 仅用于 PR → 冲突,总分不得 > 10)
|
|
110
|
+
(例B:任务 whenToUse="对代码差异进行检视",SKILL useWhen 含 PR → 一致,不触发本规则)
|
|
111
|
+
- 若候选 SKILL 的 useWhen 为空(未声明),则不触发本规则,按其它规则评分
|
|
112
|
+
2. 技术栈/语言不匹配 → 维度二计 0-5 分,且【总分上限 50】
|
|
113
|
+
(例:任务要 Go 开源库迁移,SKILL 的 language 是 C/C++ → 总分不得 > 50)
|
|
114
|
+
- **判定依据仅以任务拆解的 techStack(ANALYSIS 中的 techStack 字段)为准**。只有当 techStack 明确给出了某语言,且与该 SKILL 的 language 明确冲突时,才触发本硬否决。
|
|
115
|
+
- **techStack 为空 / 未明确语言时,禁止凭任务原文中的库名或常识推断语言**(如见到 "opencsv" 就臆断为 Java)。此时视为语言未指明,不触发语言硬否决,按其它维度正常评分。
|
|
116
|
+
- 不得把 SKILL 的 language 反向当作任务语言来推断匹配与否。
|
|
117
|
+
3. SKILL 功能阶段与任务意图不同 → 维度一上限 15 分
|
|
118
|
+
(例:任务要"可行性分析",SKILL 是"执行移植动作")
|
|
119
|
+
4. 严禁仅因"意图看起来契合"就给高分;当任务 techStack 明确指明语言且与 SKILL 语言冲突时,语言不匹配是硬伤,必须压低总分
|
|
120
|
+
5. 动作类型不一致 → 维度一(意图)上限 15 分,且【总分上限 45】
|
|
121
|
+
判定方式:对比任务的"核心动作动词"与 SKILL 的"核心动作动词"
|
|
122
|
+
- 任务动作是"汇总/聚合/合并/整理已有结果/文件" → SKILL 动作也必须是"汇总/聚合"类
|
|
123
|
+
- 任务动作是"汇总已有结果",SKILL 动作是"执行检视/扫描/分析源码" → 动作类型不一致,触发本规则
|
|
124
|
+
- 关键判据:任务的输入是已有产物(JSON/MD/报告文件),SKILL 的输入是源码/仓库 → 输入类型不同即动作类型不同
|
|
125
|
+
(例:任务"汇总 compliance-review.json 和 logic-review.json 生成总报告",SKILL 是"对源码进行编码质量检视" → 总分不得 > 45)
|
|
126
|
+
|
|
127
|
+
请严格输出如下 JSON(不要输出任何额外文字、不要用 markdown 代码围栏):
|
|
128
|
+
{
|
|
129
|
+
"bestId": "最佳 SKILL 的 id(即候选列表中的 dirName;若全部低分也填分数最高的)",
|
|
130
|
+
"ranked": [
|
|
131
|
+
{
|
|
132
|
+
"id": "SKILL 的 dirName",
|
|
133
|
+
"score": 0,
|
|
134
|
+
"dimensions": { "intent": 0, "techStack": 0, "constraint": 0, "keyword": 0 },
|
|
135
|
+
"reason": "一句话说明各维度得分依据,须点明是否触发硬否决"
|
|
136
|
+
}
|
|
137
|
+
]
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
要求:
|
|
141
|
+
- ranked 数组按 score 从高到低排序,且必须包含全部候选 SKILL
|
|
142
|
+
- score 必须等于 dimensions 各项之和
|
|
143
|
+
- dimensions 四个 key 必须齐全(intent/techStack/constraint/keyword)
|
|
144
|
+
- 若候选 SKILL 声明了 useWhen 且与任务 whenToUse 触发场景冲突,务必先触发硬否决规则 1
|
|
145
|
+
- 若候选 SKILL 的 language 与任务 techStack 不匹配,务必触发硬否决规则 2;但若任务 techStack 为空/未明确,不得凭库名推断语言,不触发规则 2
|
|
146
|
+
- 若任务输入是已有产物(JSON/MD/报告)而 SKILL 输入是源码/仓库,务必触发硬否决规则 5`;
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* 简单模板替换:把 {{KEY}} 替换为 params[KEY]
|
|
150
|
+
* @param {string} template
|
|
151
|
+
* @param {Record<string, string>} params
|
|
152
|
+
* @returns {string}
|
|
153
|
+
*/
|
|
154
|
+
export function renderTemplate(template, params) {
|
|
155
|
+
return template.replace(/\{\{(\w+)\}\}/g, (_, key) =>
|
|
156
|
+
Object.prototype.hasOwnProperty.call(params, key) ? String(params[key]) : ''
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export { TASK_ANALYSIS_PROMPT, SKILL_RANKING_PROMPT };
|
|
161
|
+
export default { TASK_ANALYSIS_PROMPT, SKILL_RANKING_PROMPT, renderTemplate };
|
|
@@ -1,144 +1,144 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* reactSteps.js — ReAct 两个推理步骤的封装
|
|
3
|
-
*
|
|
4
|
-
* 职责:
|
|
5
|
-
* - Reason #1 analyzeTask:调用 LLM 拆解任务,产出 TaskAnalysis(喂给模糊匹配)
|
|
6
|
-
* - Reason #2 rankSkills :调用 LLM 对 top5 候选 SKILL 评分排序,产出 RankResult
|
|
7
|
-
*
|
|
8
|
-
* 设计原则:
|
|
9
|
-
* - 高内聚:两个推理步骤的 prompt 构建 + JSON 解析集中于此
|
|
10
|
-
* - 低耦合:只依赖 llmClient + prompts,不依赖 Agent 编排
|
|
11
|
-
* - 纯函数式:每个步骤都是 (llm, input) -> output,无副作用
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
import { TASK_ANALYSIS_PROMPT, SKILL_RANKING_PROMPT, renderTemplate } from './prompts.js';
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Reason #1:任务拆解
|
|
18
|
-
* @param {object} llm - LLMClient 实例(需提供 chatJSON)
|
|
19
|
-
* @param {string} task - 具体事项
|
|
20
|
-
* @returns {Promise<object>} TaskAnalysis: { intent, keywords[], constraints[], techStack[], whenToUse }
|
|
21
|
-
*/
|
|
22
|
-
export async function analyzeTask(llm, task) {
|
|
23
|
-
if (!task) throw new Error('analyzeTask: task 不能为空');
|
|
24
|
-
|
|
25
|
-
const prompt = renderTemplate(TASK_ANALYSIS_PROMPT, { TASK: task });
|
|
26
|
-
const result = await llm.chatJSON(prompt);
|
|
27
|
-
|
|
28
|
-
// 归整数组字段,避免 LLM 漏字段或返回非数组
|
|
29
|
-
return {
|
|
30
|
-
intent: typeof result.intent === 'string' ? result.intent : '',
|
|
31
|
-
keywords: _toArray(result.keywords),
|
|
32
|
-
constraints: _toArray(result.constraints),
|
|
33
|
-
techStack: _toArray(result.techStack),
|
|
34
|
-
whenToUse: typeof result.whenToUse === 'string' ? result.whenToUse : '',
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Reason #2:SKILL 排序
|
|
40
|
-
* @param {object} llm - LLMClient 实例
|
|
41
|
-
* @param {string} task - 具体事项
|
|
42
|
-
* @param {object} analysis - analyzeTask 产出的 TaskAnalysis
|
|
43
|
-
* @param {Array} candidates - 模糊匹配召回的候选 [{ skill, score }] 或 SkillMeta[]
|
|
44
|
-
* @returns {Promise<object>} RankResult: { bestId, ranked: [{ id, score, reason }] }
|
|
45
|
-
*/
|
|
46
|
-
export async function rankSkills(llm, task, analysis, candidates) {
|
|
47
|
-
if (!candidates || candidates.length === 0) {
|
|
48
|
-
throw new Error('rankSkills: 候选 SKILL 列表为空');
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// 统一候选项结构为 { skill: SkillMeta, score }
|
|
52
|
-
const normalized = candidates.map((c, i) => {
|
|
53
|
-
const skill = c.skill || c;
|
|
54
|
-
return {
|
|
55
|
-
skill,
|
|
56
|
-
score: typeof c.score === 'number' ? c.score : 0,
|
|
57
|
-
index: i,
|
|
58
|
-
};
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
// 把候选项渲染成 LLM 可读的简表(不传整个 SKILL.md,避免 token 爆炸)
|
|
62
|
-
const candidatesText = normalized
|
|
63
|
-
.map(({ skill, index }) => {
|
|
64
|
-
const fields = [
|
|
65
|
-
`id: ${skill.dirName}`,
|
|
66
|
-
`name: ${skill.name || ''}`,
|
|
67
|
-
`description: ${skill.description || ''}`,
|
|
68
|
-
`useWhen: ${skill.useWhen || '(无)'}`,
|
|
69
|
-
`category: ${skill.category || ''}`,
|
|
70
|
-
`language: ${skill.language || ''}`,
|
|
71
|
-
].filter(Boolean);
|
|
72
|
-
return `[#${index}] ${fields.join(' | ')}`;
|
|
73
|
-
})
|
|
74
|
-
.join('\n');
|
|
75
|
-
|
|
76
|
-
const analysisText = JSON.stringify(analysis, null, 2);
|
|
77
|
-
const prompt = renderTemplate(SKILL_RANKING_PROMPT, {
|
|
78
|
-
TASK: task,
|
|
79
|
-
ANALYSIS: analysisText,
|
|
80
|
-
WHEN_TO_USE: analysis?.whenToUse || '(未拆解出触发场景)',
|
|
81
|
-
CANDIDATES: candidatesText,
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
const result = await llm.chatJSON(prompt);
|
|
85
|
-
|
|
86
|
-
// 归整 ranked(对象数组,不能用 _toArray —— 那是给字符串数组用的)
|
|
87
|
-
// 对 LLM 可能用到的字段名做容错:ranked / results / list / rankings
|
|
88
|
-
const rawRanked = result.ranked || result.results || result.list || result.rankings;
|
|
89
|
-
const ranked = Array.isArray(rawRanked)
|
|
90
|
-
? rawRanked
|
|
91
|
-
.filter((r) => r && typeof r === 'object')
|
|
92
|
-
.map((r) => {
|
|
93
|
-
// 解析 dimensions 分项分(容错:缺失或字段不全时为空对象)
|
|
94
|
-
const rawDims = (r.dimensions && typeof r.dimensions === 'object') ? r.dimensions : {};
|
|
95
|
-
const dimensions = {
|
|
96
|
-
intent: _numOr0(rawDims.intent),
|
|
97
|
-
techStack: _numOr0(rawDims.techStack),
|
|
98
|
-
constraint: _numOr0(rawDims.constraint),
|
|
99
|
-
keyword: _numOr0(rawDims.keyword),
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
// score 容错:缺失时用 dimensions 之和回填,保证总有分
|
|
103
|
-
let score = typeof r.score === 'number' ? r.score
|
|
104
|
-
: (dimensions.intent + dimensions.techStack + dimensions.constraint + dimensions.keyword);
|
|
105
|
-
if (typeof score !== 'number') score = 0;
|
|
106
|
-
|
|
107
|
-
return {
|
|
108
|
-
id: typeof r.id === 'string'
|
|
109
|
-
? r.id
|
|
110
|
-
: (typeof r.id === 'number' ? String(r.id)
|
|
111
|
-
: (typeof r.dirName === 'string' ? r.dirName : '')),
|
|
112
|
-
score,
|
|
113
|
-
dimensions,
|
|
114
|
-
reason: typeof r.reason === 'string' ? r.reason : '',
|
|
115
|
-
};
|
|
116
|
-
})
|
|
117
|
-
.filter((r) => r.id)
|
|
118
|
-
: [];
|
|
119
|
-
|
|
120
|
-
// bestId 也做字段名容错:bestId / best / best_id / id
|
|
121
|
-
const bestId = result.bestId || result.best || result.best_id || result.id
|
|
122
|
-
|| (ranked[0] && ranked[0].id);
|
|
123
|
-
return { bestId, ranked };
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// ─── 内部工具 ──────────────────────────────────────────────────────────────
|
|
127
|
-
/** 把字符串/数组规整为字符串数组(仅用于 keywords/constraints/techStack) */
|
|
128
|
-
function _toArray(v) {
|
|
129
|
-
if (Array.isArray(v)) return v.map((x) => String(x));
|
|
130
|
-
if (v == null) return [];
|
|
131
|
-
return [String(v)];
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/** 把可能缺失/非数的值规整为 number(缺失或非数返回 0) */
|
|
135
|
-
function _numOr0(v) {
|
|
136
|
-
if (typeof v === 'number') return Number.isFinite(v) ? v : 0;
|
|
137
|
-
if (typeof v === 'string') {
|
|
138
|
-
const n = Number(v);
|
|
139
|
-
return Number.isFinite(n) ? n : 0;
|
|
140
|
-
}
|
|
141
|
-
return 0;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
export default { analyzeTask, rankSkills };
|
|
1
|
+
/**
|
|
2
|
+
* reactSteps.js — ReAct 两个推理步骤的封装
|
|
3
|
+
*
|
|
4
|
+
* 职责:
|
|
5
|
+
* - Reason #1 analyzeTask:调用 LLM 拆解任务,产出 TaskAnalysis(喂给模糊匹配)
|
|
6
|
+
* - Reason #2 rankSkills :调用 LLM 对 top5 候选 SKILL 评分排序,产出 RankResult
|
|
7
|
+
*
|
|
8
|
+
* 设计原则:
|
|
9
|
+
* - 高内聚:两个推理步骤的 prompt 构建 + JSON 解析集中于此
|
|
10
|
+
* - 低耦合:只依赖 llmClient + prompts,不依赖 Agent 编排
|
|
11
|
+
* - 纯函数式:每个步骤都是 (llm, input) -> output,无副作用
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { TASK_ANALYSIS_PROMPT, SKILL_RANKING_PROMPT, renderTemplate } from './prompts.js';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Reason #1:任务拆解
|
|
18
|
+
* @param {object} llm - LLMClient 实例(需提供 chatJSON)
|
|
19
|
+
* @param {string} task - 具体事项
|
|
20
|
+
* @returns {Promise<object>} TaskAnalysis: { intent, keywords[], constraints[], techStack[], whenToUse }
|
|
21
|
+
*/
|
|
22
|
+
export async function analyzeTask(llm, task) {
|
|
23
|
+
if (!task) throw new Error('analyzeTask: task 不能为空');
|
|
24
|
+
|
|
25
|
+
const prompt = renderTemplate(TASK_ANALYSIS_PROMPT, { TASK: task });
|
|
26
|
+
const result = await llm.chatJSON(prompt);
|
|
27
|
+
|
|
28
|
+
// 归整数组字段,避免 LLM 漏字段或返回非数组
|
|
29
|
+
return {
|
|
30
|
+
intent: typeof result.intent === 'string' ? result.intent : '',
|
|
31
|
+
keywords: _toArray(result.keywords),
|
|
32
|
+
constraints: _toArray(result.constraints),
|
|
33
|
+
techStack: _toArray(result.techStack),
|
|
34
|
+
whenToUse: typeof result.whenToUse === 'string' ? result.whenToUse : '',
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Reason #2:SKILL 排序
|
|
40
|
+
* @param {object} llm - LLMClient 实例
|
|
41
|
+
* @param {string} task - 具体事项
|
|
42
|
+
* @param {object} analysis - analyzeTask 产出的 TaskAnalysis
|
|
43
|
+
* @param {Array} candidates - 模糊匹配召回的候选 [{ skill, score }] 或 SkillMeta[]
|
|
44
|
+
* @returns {Promise<object>} RankResult: { bestId, ranked: [{ id, score, reason }] }
|
|
45
|
+
*/
|
|
46
|
+
export async function rankSkills(llm, task, analysis, candidates) {
|
|
47
|
+
if (!candidates || candidates.length === 0) {
|
|
48
|
+
throw new Error('rankSkills: 候选 SKILL 列表为空');
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// 统一候选项结构为 { skill: SkillMeta, score }
|
|
52
|
+
const normalized = candidates.map((c, i) => {
|
|
53
|
+
const skill = c.skill || c;
|
|
54
|
+
return {
|
|
55
|
+
skill,
|
|
56
|
+
score: typeof c.score === 'number' ? c.score : 0,
|
|
57
|
+
index: i,
|
|
58
|
+
};
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
// 把候选项渲染成 LLM 可读的简表(不传整个 SKILL.md,避免 token 爆炸)
|
|
62
|
+
const candidatesText = normalized
|
|
63
|
+
.map(({ skill, index }) => {
|
|
64
|
+
const fields = [
|
|
65
|
+
`id: ${skill.dirName}`,
|
|
66
|
+
`name: ${skill.name || ''}`,
|
|
67
|
+
`description: ${skill.description || ''}`,
|
|
68
|
+
`useWhen: ${skill.useWhen || '(无)'}`,
|
|
69
|
+
`category: ${skill.category || ''}`,
|
|
70
|
+
`language: ${skill.language || ''}`,
|
|
71
|
+
].filter(Boolean);
|
|
72
|
+
return `[#${index}] ${fields.join(' | ')}`;
|
|
73
|
+
})
|
|
74
|
+
.join('\n');
|
|
75
|
+
|
|
76
|
+
const analysisText = JSON.stringify(analysis, null, 2);
|
|
77
|
+
const prompt = renderTemplate(SKILL_RANKING_PROMPT, {
|
|
78
|
+
TASK: task,
|
|
79
|
+
ANALYSIS: analysisText,
|
|
80
|
+
WHEN_TO_USE: analysis?.whenToUse || '(未拆解出触发场景)',
|
|
81
|
+
CANDIDATES: candidatesText,
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
const result = await llm.chatJSON(prompt);
|
|
85
|
+
|
|
86
|
+
// 归整 ranked(对象数组,不能用 _toArray —— 那是给字符串数组用的)
|
|
87
|
+
// 对 LLM 可能用到的字段名做容错:ranked / results / list / rankings
|
|
88
|
+
const rawRanked = result.ranked || result.results || result.list || result.rankings;
|
|
89
|
+
const ranked = Array.isArray(rawRanked)
|
|
90
|
+
? rawRanked
|
|
91
|
+
.filter((r) => r && typeof r === 'object')
|
|
92
|
+
.map((r) => {
|
|
93
|
+
// 解析 dimensions 分项分(容错:缺失或字段不全时为空对象)
|
|
94
|
+
const rawDims = (r.dimensions && typeof r.dimensions === 'object') ? r.dimensions : {};
|
|
95
|
+
const dimensions = {
|
|
96
|
+
intent: _numOr0(rawDims.intent),
|
|
97
|
+
techStack: _numOr0(rawDims.techStack),
|
|
98
|
+
constraint: _numOr0(rawDims.constraint),
|
|
99
|
+
keyword: _numOr0(rawDims.keyword),
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
// score 容错:缺失时用 dimensions 之和回填,保证总有分
|
|
103
|
+
let score = typeof r.score === 'number' ? r.score
|
|
104
|
+
: (dimensions.intent + dimensions.techStack + dimensions.constraint + dimensions.keyword);
|
|
105
|
+
if (typeof score !== 'number') score = 0;
|
|
106
|
+
|
|
107
|
+
return {
|
|
108
|
+
id: typeof r.id === 'string'
|
|
109
|
+
? r.id
|
|
110
|
+
: (typeof r.id === 'number' ? String(r.id)
|
|
111
|
+
: (typeof r.dirName === 'string' ? r.dirName : '')),
|
|
112
|
+
score,
|
|
113
|
+
dimensions,
|
|
114
|
+
reason: typeof r.reason === 'string' ? r.reason : '',
|
|
115
|
+
};
|
|
116
|
+
})
|
|
117
|
+
.filter((r) => r.id)
|
|
118
|
+
: [];
|
|
119
|
+
|
|
120
|
+
// bestId 也做字段名容错:bestId / best / best_id / id
|
|
121
|
+
const bestId = result.bestId || result.best || result.best_id || result.id
|
|
122
|
+
|| (ranked[0] && ranked[0].id);
|
|
123
|
+
return { bestId, ranked };
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// ─── 内部工具 ──────────────────────────────────────────────────────────────
|
|
127
|
+
/** 把字符串/数组规整为字符串数组(仅用于 keywords/constraints/techStack) */
|
|
128
|
+
function _toArray(v) {
|
|
129
|
+
if (Array.isArray(v)) return v.map((x) => String(x));
|
|
130
|
+
if (v == null) return [];
|
|
131
|
+
return [String(v)];
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/** 把可能缺失/非数的值规整为 number(缺失或非数返回 0) */
|
|
135
|
+
function _numOr0(v) {
|
|
136
|
+
if (typeof v === 'number') return Number.isFinite(v) ? v : 0;
|
|
137
|
+
if (typeof v === 'string') {
|
|
138
|
+
const n = Number(v);
|
|
139
|
+
return Number.isFinite(n) ? n : 0;
|
|
140
|
+
}
|
|
141
|
+
return 0;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export default { analyzeTask, rankSkills };
|