@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.
Files changed (393) hide show
  1. package/README.md +244 -244
  2. package/bin/3rdloop.mjs +46 -46
  3. package/lib/cli.js +781 -781
  4. package/lib/config-cmd.js +451 -451
  5. package/lib/config.js +318 -318
  6. package/lib/doctor.js +113 -113
  7. package/lib/exit-codes.js +30 -30
  8. package/lib/opencode.js +155 -155
  9. package/lib/orch.js +426 -426
  10. package/lib/queries.js +263 -263
  11. package/lib/step.js +325 -325
  12. package/lib/ui.js +222 -222
  13. package/lib/update.js +279 -279
  14. package/lib/workflow.js +308 -308
  15. package/lib/workflows.js +131 -131
  16. package/package.json +50 -50
  17. package/vendor/Server/Agent/SkillSelector/README.md +343 -343
  18. package/vendor/Server/Agent/SkillSelector/core/Agent.js +207 -207
  19. package/vendor/Server/Agent/SkillSelector/index.js +14 -14
  20. package/vendor/Server/Agent/SkillSelector/llm/llmClient.js +313 -313
  21. package/vendor/Server/Agent/SkillSelector/llm/prompts.js +161 -161
  22. package/vendor/Server/Agent/SkillSelector/llm/reactSteps.js +144 -144
  23. package/vendor/Server/Agent/SkillSelector/matcher/fuzzyMatcher.js +433 -433
  24. package/vendor/Server/Agent/SkillSelector/scanner/skillScanner.js +382 -382
  25. package/vendor/Server/Agent/SkillSelector/utils/actionWords.js +59 -59
  26. package/vendor/Server/Brain/AnalysisStrategies.js +422 -422
  27. package/vendor/Server/Brain/Brain.js +686 -686
  28. package/vendor/Server/Brain/DecompositionStrategies.js +621 -621
  29. package/vendor/Server/Brain/PlanPersistence.js +196 -196
  30. package/vendor/Server/Brain/SkillExecutor.js +251 -251
  31. package/vendor/Server/Brain/index.js +11 -11
  32. package/vendor/Server/CLI/cli.js +275 -275
  33. package/vendor/Server/CLI/deveco-code/index.js +71 -71
  34. package/vendor/Server/CLI/deveco-code.js +5 -5
  35. package/vendor/Server/CLI/opencode/index.js +817 -818
  36. package/vendor/Server/CLI/opencode.js +5 -5
  37. package/vendor/Server/DbUse/MessageArchive.js +61 -61
  38. package/vendor/Server/DbUse/StorageManager.js +107 -107
  39. package/vendor/Server/DbUse/adapters/BaseAdapter.js +94 -94
  40. package/vendor/Server/DbUse/adapters/FileAdapter.js +138 -138
  41. package/vendor/Server/DbUse/adapters/JsonAdapter.js +138 -138
  42. package/vendor/Server/DbUse/adapters/JsonlAdapter.js +114 -114
  43. package/vendor/Server/DbUse/adapters/SqliteAdapter.js +157 -157
  44. package/vendor/Server/DbUse/index.js +160 -160
  45. package/vendor/Server/DbUse/stores/SessionStore.js +279 -279
  46. package/vendor/Server/DbUse/stores/TaskExecutionStore.js +133 -133
  47. package/vendor/Server/DbUse/stores/TaskRegistryStore.js +262 -262
  48. package/vendor/Server/DbUse/stores/TaskStepStore.js +279 -279
  49. package/vendor/Server/FlexRunner/FlexRunner.js +1759 -1759
  50. package/vendor/Server/FlexRunner/index.js +12 -12
  51. package/vendor/Server/Knowledge/KnowledgeImporter.js +523 -523
  52. package/vendor/Server/Knowledge/KnowledgeManager.js +341 -341
  53. package/vendor/Server/Knowledge/index.js +33 -33
  54. package/vendor/Server/LoopEngine/LoopEngine.js +1133 -1133
  55. package/vendor/Server/LoopEngine/index.js +11 -11
  56. package/vendor/Server/Orchestrator/Orchestrator.js +0 -3
  57. package/vendor/Server/Orchestrator/StepNode.js +312 -312
  58. package/vendor/Server/Orchestrator/index.js +13 -13
  59. package/vendor/Server/Routes/controllers/BrainController.js +241 -241
  60. package/vendor/Server/Routes/controllers/FlexRunnerController.js +1125 -1125
  61. package/vendor/Server/Routes/controllers/HealthController.js +44 -44
  62. package/vendor/Server/Routes/controllers/KnowledgeImportController.js +355 -355
  63. package/vendor/Server/Routes/controllers/LoopEngineController.js +788 -788
  64. package/vendor/Server/Routes/controllers/StatsController.js +57 -57
  65. package/vendor/Server/Routes/controllers/StreamController.js +67 -67
  66. package/vendor/Server/Routes/library/logger.js +179 -179
  67. package/vendor/Server/Routes/library/zipArchive.js +172 -172
  68. package/vendor/Server/Routes/router/Router.js +204 -204
  69. package/vendor/Server/Routes/routes/brain.js +47 -47
  70. package/vendor/Server/Routes/routes/flexrunner.js +72 -72
  71. package/vendor/Server/Routes/routes/health.js +28 -28
  72. package/vendor/Server/Routes/routes/index.js +57 -57
  73. package/vendor/Server/Routes/routes/knowledge.js +55 -55
  74. package/vendor/Server/Routes/routes/loopengine.js +58 -58
  75. package/vendor/Server/Routes/routes/orchestrator.js +61 -61
  76. package/vendor/Server/Routes/routes/registry.js +97 -97
  77. package/vendor/Server/Routes/routes/stats.js +23 -23
  78. package/vendor/Server/Routes/routes/stream.js +30 -30
  79. package/vendor/Server/Routes/server.js +203 -203
  80. package/vendor/Server/Routes/sse/SseHub.js +308 -308
  81. package/vendor/Server/Skills/acceptance-check/SKILL.md +191 -191
  82. package/vendor/Server/Skills/acceptance-check/references/PHASE1_ARTIFACT_COLLECTION.md +52 -52
  83. package/vendor/Server/Skills/acceptance-check/references/PHASE2_CRITERIA_EVALUATION.md +77 -77
  84. package/vendor/Server/Skills/acceptance-check/references/PHASE2_EVIDENCE_VERIFICATION.md +70 -70
  85. package/vendor/Server/Skills/arkts-code-check/SKILL.md +320 -320
  86. package/vendor/Server/Skills/arkts-code-check/references/CODE_CHECK_GUIDE.md +210 -210
  87. package/vendor/Server/Skills/arkts-code-check/references/FILE_TYPE_GUIDE.md +28 -28
  88. package/vendor/Server/Skills/arkts-code-check/references/PHASE1_INFO_COLLECTION.md +233 -233
  89. package/vendor/Server/Skills/arkts-code-check/references/REPORT_TEMPLATE.md +219 -219
  90. package/vendor/Server/Skills/arkts-library-compile-validate/SKILL.md +328 -328
  91. package/vendor/Server/Skills/arkts-library-compile-validate/scripts/build.ps1 +93 -93
  92. package/vendor/Server/Skills/arkts-library-compile-validate/scripts/code-linter.cjs +432 -432
  93. package/vendor/Server/Skills/arkts-library-compile-validate/scripts/migrate.cjs +851 -851
  94. package/vendor/Server/Skills/arkts-library-compile-validate/scripts/ohpm-switch.cjs +788 -788
  95. package/vendor/Server/Skills/arkts-library-demo-code/SKILL.md +291 -291
  96. package/vendor/Server/Skills/arkts-library-demo-code/references/API_SIGNATURE_CHECKS.md +68 -68
  97. package/vendor/Server/Skills/arkts-library-demo-code/references/BUILD_VALIDATION.md +184 -184
  98. package/vendor/Server/Skills/arkts-library-demo-code/references/CODE_STANDARDS.md +337 -337
  99. package/vendor/Server/Skills/arkts-library-demo-code/references/EXAMPLES.md +400 -400
  100. package/vendor/Server/Skills/arkts-library-demo-code/references/SYSTEM_API_LOOKUP.md +98 -98
  101. package/vendor/Server/Skills/arkts-library-demo-code/references/TEMPLATE.md +544 -544
  102. package/vendor/Server/Skills/arkts-library-demo-code/scripts/build.ps1 +93 -93
  103. package/vendor/Server/Skills/arkts-library-demo-code/scripts/code-linter.cjs +432 -432
  104. package/vendor/Server/Skills/arkts-library-demo-code/scripts/migrate.cjs +851 -851
  105. package/vendor/Server/Skills/arkts-library-demo-code/scripts/ohpm-switch.cjs +788 -788
  106. package/vendor/Server/Skills/arkts-library-demo-coverage/SKILL.md +174 -174
  107. package/vendor/Server/Skills/arkts-library-demo-scenario/SKILL.md +321 -321
  108. package/vendor/Server/Skills/arkts-library-demo-scenario/references/EXAMPLES.md +100 -100
  109. package/vendor/Server/Skills/arkts-library-demo-scenario/references/TEMPLATE.md +185 -185
  110. package/vendor/Server/Skills/arkts-library-documentation-quality-check/SKILL.md +233 -233
  111. package/vendor/Server/Skills/arkts-library-documentation-quality-check/assets/REPORT_TEMPLATE.md +102 -102
  112. package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/CHECK_DIMENSIONS.md +89 -89
  113. package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/COMPLIANCE_CHECKLIST.md +62 -62
  114. package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/KB_QUERY_GUIDE.md +107 -107
  115. package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/MCP_TOOL_DISCOVERY.md +124 -124
  116. package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/REPORT_TEMPLATE.md +90 -90
  117. package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/SCORING_FORMULA.md +57 -57
  118. package/vendor/Server/Skills/arkts-library-documentation-quality-check/scripts/validate-skill.cjs +259 -259
  119. package/vendor/Server/Skills/arkts-library-interface-spec/SKILL.md +97 -97
  120. package/vendor/Server/Skills/arkts-library-memory-leak-check/SKILL.md +391 -391
  121. package/vendor/Server/Skills/arkts-library-source-clone/SKILL.md +113 -113
  122. package/vendor/Server/Skills/arkts-library-stability-check/SKILL.md +312 -312
  123. package/vendor/Server/Skills/arkts-library-stability-check/assets/REPORT_TEMPLATE.md +154 -154
  124. package/vendor/Server/Skills/arkts-library-stability-check/references/CHECKLIST.md +165 -165
  125. package/vendor/Server/Skills/arkts-library-stability-check/references/CODE_EXAMPLES.md +308 -308
  126. package/vendor/Server/Skills/arkts-library-stability-check/references/SCORING_RULES.md +90 -90
  127. package/vendor/Server/Skills/arkts-library-stability-check/scripts/validate-skill.cjs +282 -282
  128. package/vendor/Server/Skills/arkts-library-test-coverage-check/SKILL.md +360 -360
  129. package/vendor/Server/Skills/arkts-library-test-coverage-check/assets/REPORT_TEMPLATE.md +145 -145
  130. package/vendor/Server/Skills/arkts-library-test-coverage-check/references/CHECKLIST.md +252 -252
  131. package/vendor/Server/Skills/arkts-library-test-coverage-check/references/MCP_TOOL_USAGE.md +114 -114
  132. package/vendor/Server/Skills/arkts-library-test-coverage-check/scripts/validate-skill.cjs +262 -262
  133. package/vendor/Server/Skills/arkts-library-xts-code/SKILL.md +455 -455
  134. package/vendor/Server/Skills/arkts-library-xts-code/assets/report-template.md +60 -60
  135. package/vendor/Server/Skills/arkts-library-xts-code/references/ACCESS_MODIFIER_PRECHECK.md +76 -76
  136. package/vendor/Server/Skills/arkts-library-xts-code/references/BUILD_VERIFICATION.md +200 -200
  137. package/vendor/Server/Skills/arkts-library-xts-code/references/CODE_STANDARDS.md +518 -518
  138. package/vendor/Server/Skills/arkts-library-xts-code/references/SUBAGENT_PROMPT_TEMPLATE.md +276 -276
  139. package/vendor/Server/Skills/arkts-library-xts-code/references/SYSTEM_API_LOOKUP.md +92 -92
  140. package/vendor/Server/Skills/arkts-library-xts-code/references/XTS_TEMPLATE.md +767 -767
  141. package/vendor/Server/Skills/arkts-library-xts-code/scripts/build.ps1 +93 -93
  142. package/vendor/Server/Skills/arkts-library-xts-code/scripts/code-linter.cjs +432 -432
  143. package/vendor/Server/Skills/arkts-library-xts-code/scripts/migrate.cjs +851 -851
  144. package/vendor/Server/Skills/arkts-library-xts-code/scripts/ohpm-switch.cjs +788 -788
  145. package/vendor/Server/Skills/arkts-library-xts-code/scripts/precheck-access-modifiers.cjs +221 -221
  146. package/vendor/Server/Skills/arkts-library-xts-code-fix/SKILL.md +228 -228
  147. package/vendor/Server/Skills/arkts-library-xts-coverage/SKILL.md +97 -97
  148. package/vendor/Server/Skills/arkts-library-xts-doc/SKILL.md +194 -194
  149. package/vendor/Server/Skills/arkts-library-xts-doc/references/EXAMPLES.md +575 -575
  150. package/vendor/Server/Skills/arkts-library-xts-doc/references/TEMPLATE.md +574 -574
  151. package/vendor/Server/Skills/arkts-library-xts-doc/references/TESTABILITY_GUIDE.md +182 -182
  152. package/vendor/Server/Skills/arkts-library-xts-execution/SKILL.md +490 -490
  153. package/vendor/Server/Skills/arkts-library-xts-execution/references/error-fixing-examples.md +217 -217
  154. package/vendor/Server/Skills/arkts-library-xts-execution/scripts/build.ps1 +93 -93
  155. package/vendor/Server/Skills/arkts-library-xts-execution/scripts/code-linter.cjs +432 -432
  156. package/vendor/Server/Skills/arkts-library-xts-execution/scripts/migrate.cjs +851 -851
  157. package/vendor/Server/Skills/arkts-library-xts-execution/scripts/ohpm-switch.cjs +788 -788
  158. package/vendor/Server/Skills/flutter-code-check/SKILL.md +299 -299
  159. package/vendor/Server/Skills/flutter-code-check/assets/OUTPUT_TEMPLATE.md +311 -311
  160. package/vendor/Server/Skills/flutter-code-check/references/CHECKLIST.md +190 -190
  161. package/vendor/Server/Skills/flutter-code-check/references/PLATFORMS.md +133 -133
  162. package/vendor/Server/Skills/flutter-code-check/scripts/validate-skill.cjs +259 -259
  163. package/vendor/Server/Skills/flutter-interface/README.md +75 -75
  164. package/vendor/Server/Skills/flutter-interface/SKILL.md +291 -291
  165. package/vendor/Server/Skills/flutter-interface/references/EXAMPLES.md +336 -336
  166. package/vendor/Server/Skills/flutter-interface/references/GIT_CLONE_GUIDE.md +190 -190
  167. package/vendor/Server/Skills/flutter-interface/references/SCRIPT_REFERENCE.md +258 -258
  168. package/vendor/Server/Skills/flutter-interface/references/TEMPLATE.md +254 -254
  169. package/vendor/Server/Skills/flutter-library-consistency-check/SKILL.md +517 -517
  170. package/vendor/Server/Skills/flutter-library-consistency-check/references/CHECKLIST.md +381 -381
  171. package/vendor/Server/Skills/flutter-library-consistency-check/references/FUNCTION_COMPARISON_GUIDE.md +341 -341
  172. package/vendor/Server/Skills/flutter-library-consistency-check/references/PLATFORM_LIMITATION_GUIDE.md +71 -71
  173. package/vendor/Server/Skills/flutter-library-documentation-quality-check/SKILL.md +518 -518
  174. package/vendor/Server/Skills/flutter-library-documentation-quality-check/references/CHECKLIST.md +406 -406
  175. package/vendor/Server/Skills/flutter-library-memory-leak-check/SKILL.md +652 -652
  176. package/vendor/Server/Skills/flutter-library-memory-leak-check/references/CHECKLIST.md +396 -396
  177. package/vendor/Server/Skills/flutter-library-stability-check/SKILL.md +744 -744
  178. package/vendor/Server/Skills/flutter-library-stability-check/references/CHECKLIST.md +720 -720
  179. package/vendor/Server/Skills/flutter-library-test-coverage-check/SKILL.md +414 -414
  180. package/vendor/Server/Skills/flutter-library-test-coverage-check/assets/REPORT_TEMPLATE.md +150 -150
  181. package/vendor/Server/Skills/flutter-library-test-coverage-check/references/CHECKLIST.md +304 -304
  182. package/vendor/Server/Skills/flutter-library-test-coverage-check/references/SCORING_RULES.md +265 -265
  183. package/vendor/Server/Skills/flutter-library-test-coverage-check/references/SCRIPT_USAGE.md +286 -286
  184. package/vendor/Server/Skills/knowledge-import/SKILL.md +383 -383
  185. package/vendor/Server/Skills/knowledge-import/references/MCP_TOOL_USAGE.md +165 -165
  186. package/vendor/Server/Skills/knowledge-import/references/SKILL_LOCATOR_GUIDE.md +91 -91
  187. package/vendor/Server/Skills/knowledge-import/references/SKILL_OPTIMIZATION_GUIDE.md +127 -127
  188. package/vendor/Server/Skills/ohos-lib-pr-push/SKILL.md +453 -301
  189. package/vendor/Server/Skills/ohos-lib-pr-push/assets/PR_CHECKLIST.md +151 -0
  190. package/vendor/Server/Skills/ohos-lib-pr-push/assets/PR_ISSUE_TEMPLATE.md +257 -105
  191. package/vendor/Server/Skills/ohos-lib-pr-push/references/GITCODE_API.md +191 -127
  192. package/vendor/Server/Skills/ohos-lib-pr-push/scripts/gitcode-api.cjs +317 -208
  193. package/vendor/Server/Skills/rn-code-check/SKILL.md +320 -320
  194. package/vendor/Server/Skills/rn-code-check/references/API-GUIDE.md +234 -234
  195. package/vendor/Server/Skills/rn-code-check/references/CHECKLIST.md +188 -188
  196. package/vendor/Server/Skills/rn-code-check/references/REPORT-TEMPLATE.md +246 -246
  197. package/vendor/Server/Skills/rn-lib-add-example/SKILL.md +198 -198
  198. package/vendor/Server/Skills/rn-lib-add-example/references/APP_RENAME_GUIDE.md +40 -40
  199. package/vendor/Server/Skills/rn-lib-add-example/references/SHELL_ADAPTATION_CHECKLIST.md +78 -78
  200. package/vendor/Server/Skills/rn-lib-add-example/references/TEMPLATE_REPO_GUIDE.md +70 -70
  201. package/vendor/Server/Skills/rn-lib-add-example/references/VERIFICATION_GUIDE.md +47 -47
  202. package/vendor/Server/Skills/rn-lib-add-example/scripts/create-example.cjs +252 -252
  203. package/vendor/Server/Skills/rn-lib-update-doc/SKILL.md +176 -176
  204. package/vendor/Server/Skills/rn-lib-update-doc/config.json +5 -5
  205. package/vendor/Server/Skills/rn-lib-update-doc/references/changelog-template.md +35 -35
  206. package/vendor/Server/Skills/rn-lib-update-doc/references/format-diff.md +137 -137
  207. package/vendor/Server/Skills/rn-lib-update-doc/references/link-registry.json +33 -33
  208. package/vendor/Server/Skills/rn-lib-update-doc/references/model-0.4.2-overview.md +40 -40
  209. package/vendor/Server/Skills/rn-lib-update-doc/references/model-0.4.2.md +429 -429
  210. package/vendor/Server/Skills/rn-lib-update-doc/scripts/detect-readme-format.cjs +105 -105
  211. package/vendor/Server/Skills/rn-lib-update-doc/scripts/find-usage-doc.cjs +90 -90
  212. package/vendor/Server/Skills/rn-lib-update-doc/scripts/link-verify.cjs +213 -213
  213. package/vendor/Server/Skills/rn-lib-update-doc/scripts/normalize-changelog.cjs +73 -73
  214. package/vendor/Server/Skills/rn-lib-update-doc/scripts/normalize-package-meta.cjs +258 -258
  215. package/vendor/Server/Skills/rn-lib-update-doc/scripts/normalize-readme-links.cjs +341 -341
  216. package/vendor/Server/Skills/rn-lib-update-doc/scripts/resolve-usage-docs.cjs +67 -67
  217. package/vendor/Server/Skills/rn-library-consistency-check/SKILL.md +299 -299
  218. package/vendor/Server/Skills/rn-library-consistency-check/assets/REPORT_TEMPLATE.md +293 -293
  219. package/vendor/Server/Skills/rn-library-consistency-check/references/ARKTS_COMPONENT_CHECK_GUIDE.md +857 -857
  220. package/vendor/Server/Skills/rn-library-consistency-check/references/ARKTS_TURBOMODULE_CHECK_GUIDE.md +856 -856
  221. package/vendor/Server/Skills/rn-library-consistency-check/references/CHECKLIST.md +157 -157
  222. package/vendor/Server/Skills/rn-library-consistency-check/references/CPP_COMPONENT_CHECK_GUIDE.md +801 -801
  223. package/vendor/Server/Skills/rn-library-consistency-check/references/CPP_TURBOMODULE_CHECK_GUIDE.md +683 -683
  224. package/vendor/Server/Skills/rn-library-consistency-check/references/FUNCTION_COMPARISON_GUIDE.md +233 -233
  225. package/vendor/Server/Skills/rn-library-consistency-check/references/NATIVE_COMPONENT_IDENTIFICATION.md +1373 -1373
  226. package/vendor/Server/Skills/rn-library-consistency-check/references/SCORING_STANDARD.md +220 -220
  227. package/vendor/Server/Skills/rn-library-consistency-check/scripts/validate-skill.py +245 -245
  228. package/vendor/Server/Skills/rn-library-documentation-quality-check/SKILL.md +263 -263
  229. package/vendor/Server/Skills/rn-library-documentation-quality-check/assets/MODEL.md +414 -414
  230. package/vendor/Server/Skills/rn-library-documentation-quality-check/assets/MODEL_en.md +413 -413
  231. package/vendor/Server/Skills/rn-library-documentation-quality-check/assets/REPORT_TEMPLATE.md +311 -311
  232. package/vendor/Server/Skills/rn-library-documentation-quality-check/references/CHECK_CHECKLIST.md +355 -355
  233. package/vendor/Server/Skills/rn-library-documentation-quality-check/references/CROSS_VALIDATION_GUIDE.md +115 -115
  234. package/vendor/Server/Skills/rn-library-documentation-quality-check/references/DOC_COLLECTION_GUIDE.md +139 -139
  235. package/vendor/Server/Skills/rn-library-documentation-quality-check/references/EXAMPLES.md +586 -586
  236. package/vendor/Server/Skills/rn-library-documentation-quality-check/references/GOTCHAS.md +57 -57
  237. package/vendor/Server/Skills/rn-library-documentation-quality-check/scripts/validate-skill.py +259 -259
  238. package/vendor/Server/Skills/rn-library-interface-analyzer/SKILL.md +301 -301
  239. package/vendor/Server/Skills/rn-library-interface-analyzer/assets/REPORT_TEMPLATE.md +148 -148
  240. package/vendor/Server/Skills/rn-library-interface-analyzer/references/DOC_ANNOTATION_GUIDE.md +118 -118
  241. package/vendor/Server/Skills/rn-library-interface-analyzer/references/SCRIPT_USAGE_GUIDE.md +168 -168
  242. package/vendor/Server/Skills/rn-library-interface-analyzer/references/URL_PARSING_RULES.md +176 -176
  243. package/vendor/Server/Skills/rn-library-issue-generalizer/SKILL.md +274 -274
  244. package/vendor/Server/Skills/rn-library-issue-generalizer/assets/case-template.md +45 -45
  245. package/vendor/Server/Skills/rn-library-issue-generalizer/assets/rule-template.md +25 -25
  246. package/vendor/Server/Skills/rn-library-issue-generalizer/references/PR_FETCH_GUIDE.md +61 -61
  247. package/vendor/Server/Skills/rn-library-issue-generalizer/references/RULE_TEMPLATE_GUIDE.md +165 -165
  248. package/vendor/Server/Skills/rn-library-issue-generalizer/scripts/fetch-pr-info.py +239 -239
  249. package/vendor/Server/Skills/rn-library-known-issue-check/SKILL.md +263 -263
  250. package/vendor/Server/Skills/rn-library-known-issue-check/assets/REPORT_TEMPLATE.md +96 -96
  251. package/vendor/Server/Skills/rn-library-known-issue-check/references/COMPLIANCE_CHECKLIST.md +57 -57
  252. package/vendor/Server/Skills/rn-library-known-issue-check/references/INSPECTION_GUIDE.md +99 -99
  253. package/vendor/Server/Skills/rn-library-known-issue-check/references/PRESCREEN_GUIDE.md +64 -64
  254. package/vendor/Server/Skills/rn-library-known-issue-check/references/SOURCE_PREP_GUIDE.md +74 -74
  255. package/vendor/Server/Skills/rn-library-known-issue-check/scripts/validate-known-issue-report.py +164 -164
  256. package/vendor/Server/Skills/rn-library-memory-leak-check/SKILL.md +356 -339
  257. package/vendor/Server/Skills/rn-library-memory-leak-check/assets/REPORT_TEMPLATE.md +85 -83
  258. package/vendor/Server/Skills/rn-library-memory-leak-check/references/CHECKLIST.md +905 -859
  259. package/vendor/Server/Skills/rn-library-memory-leak-check/references/HARMONY_CODE_PATTERNS.md +124 -122
  260. package/vendor/Server/Skills/rn-library-memory-leak-check/scripts/scan_harmony_code.py +287 -279
  261. package/vendor/Server/Skills/rn-library-stability-check/SKILL.md +273 -273
  262. package/vendor/Server/Skills/rn-library-stability-check/assets/REPORT_TEMPLATE.md +129 -129
  263. package/vendor/Server/Skills/rn-library-stability-check/references/CHECKLIST.md +581 -581
  264. package/vendor/Server/Skills/rn-library-stability-check/references/SCORING_RULES.md +138 -138
  265. package/vendor/Server/Skills/rn-library-stability-check/scripts/scan-harmony-code.py +168 -168
  266. package/vendor/Server/Skills/rn-library-test-coverage-check/SKILL.md +526 -506
  267. package/vendor/Server/Skills/rn-library-test-coverage-check/references/CHECKLIST.md +321 -280
  268. package/vendor/Server/Skills/rn-library-test-coverage-check/references/DEMO_LOCATION.md +221 -221
  269. package/vendor/Server/Skills/rn-library-test-coverage-check/references/REPORT_TEMPLATE.md +220 -209
  270. package/vendor/Server/Skills/rn-library-test-coverage-check/references/SCRIPT_USAGE.md +325 -325
  271. package/vendor/Server/Skills/rn-ohos-xts-generator/SKILL.md +279 -279
  272. package/vendor/Server/Skills/rn-ohos-xts-generator/assets/TEST_FILE_TEMPLATES.md +404 -404
  273. package/vendor/Server/Skills/rn-ohos-xts-generator/references/BUILD_TROUBLESHOOTING.md +185 -185
  274. package/vendor/Server/Skills/rn-ohos-xts-generator/references/BUILD_WORKFLOW.md +265 -265
  275. package/vendor/Server/Skills/rn-ohos-xts-generator/references/COMMON_CONFIG.md +189 -189
  276. package/vendor/Server/Skills/rn-ohos-xts-generator/references/CONFIG_GUIDE.md +203 -203
  277. package/vendor/Server/Skills/rn-ohos-xts-generator/references/COVERAGE_ANALYZER.md +147 -147
  278. package/vendor/Server/Skills/rn-ohos-xts-generator/references/DESIGN_DOC_GUIDE.md +148 -148
  279. package/vendor/Server/Skills/rn-ohos-xts-generator/references/GENERATION_FLOW.md +165 -165
  280. package/vendor/Server/Skills/rn-ohos-xts-generator/references/GENERATION_STRATEGY.md +195 -195
  281. package/vendor/Server/Skills/rn-ohos-xts-generator/references/HARMONY_SCANNER.md +249 -249
  282. package/vendor/Server/Skills/rn-ohos-xts-generator/references/JEST_FRAMEWORK.md +235 -235
  283. package/vendor/Server/Skills/rn-ohos-xts-generator/references/PLATFORM_COMPAT.md +161 -161
  284. package/vendor/Server/Skills/rn-ohos-xts-generator/references/RN_TEST_PATTERNS.md +413 -413
  285. package/vendor/Server/Skills/rn-ohos-xts-generator/references/SOURCE_PARSER.md +235 -235
  286. package/vendor/Server/Skills/rn-ohos-xts-generator/references/TEST_CONVENTIONS.md +245 -245
  287. package/vendor/Server/Skills/rn-ohos-xts-generator/references/TROUBLESHOOTING.md +282 -282
  288. package/vendor/Server/Skills/rn-ohos-xts-generator/references/USAGE_GUIDE.md +251 -251
  289. package/vendor/Server/Skills/rnoh-cptf-api-test/SKILL.md +469 -469
  290. package/vendor/Server/Skills/rnoh-cptf-api-test/assets/CPTF_TEST_TEMPLATE.md +310 -310
  291. package/vendor/Server/Skills/rnoh-cptf-api-test/assets/DEMO_PAGE_TEMPLATE.md +303 -303
  292. package/vendor/Server/Skills/rnoh-cptf-api-test/references/CPTF_TEST_GENERATION_GUIDE.md +421 -421
  293. package/vendor/Server/Skills/rnoh-cptf-api-test/references/DEMO_GENERATION_GUIDE.md +358 -358
  294. package/vendor/Server/Skills/rnoh-cptf-api-test/references/QUALITY_CHECKLIST.md +114 -114
  295. package/vendor/Server/Skills/rnoh-cptf-api-test/references/SPEC_PARSING_GUIDE.md +274 -274
  296. package/vendor/Server/Skills/rnoh-cptf-api-test/scripts/validate-rnoh-cptf-api-test.sh +185 -185
  297. package/vendor/Server/Skills/rnoh-cptf-demo-test/SKILL.md +191 -191
  298. package/vendor/Server/Skills/rnoh-cptf-demo-test/assets/TEST_TEMPLATE.md +216 -216
  299. package/vendor/Server/Skills/rnoh-cptf-demo-test/references/CPTF_SETUP.md +107 -107
  300. package/vendor/Server/Skills/rnoh-cptf-demo-test/references/DEMO_ANALYSIS.md +120 -120
  301. package/vendor/Server/Skills/rnoh-cptf-demo-test/scripts/validate-rnoh-cptf-test.sh +108 -108
  302. package/vendor/Server/Skills/rnoh-cptf-test-run/SKILL.md +237 -237
  303. package/vendor/Server/Skills/rnoh-cptf-test-run/references/DEBUG_PLAYBOOK.md +261 -261
  304. package/vendor/Server/Skills/rnoh-cptf-test-run/scripts/validate-run-env.sh +112 -112
  305. package/vendor/Server/Skills/rnoh-lib-code-adapt/SKILL.md +497 -497
  306. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/adapt-checklist.md +270 -270
  307. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/api-migration-checklist.md +164 -164
  308. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/common-compile-errors.md +556 -556
  309. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/deveco-cli-tools.md +459 -459
  310. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/edge-cases.md +65 -65
  311. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/har-tgz-build.md +512 -512
  312. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/version-compat-matrix.md +132 -132
  313. package/vendor/Server/Skills/rnoh-lib-code-adapt/scripts/auto-integrate.sh +424 -424
  314. package/vendor/Server/Skills/rnoh-lib-demo-coverage/SKILL.md +137 -137
  315. package/vendor/Server/Skills/rnoh-lib-demo-create/SKILL.md +306 -306
  316. package/vendor/Server/Skills/rnoh-lib-demo-create/assets/DEMO_PAGE_TEMPLATE.md +485 -485
  317. package/vendor/Server/Skills/rnoh-lib-demo-create/assets/INDEX_TEMPLATE.md +172 -172
  318. package/vendor/Server/Skills/rnoh-lib-demo-create/references/DEMO_CODE_RULES.md +422 -422
  319. package/vendor/Server/Skills/rnoh-lib-demo-create/references/QUALITY_CHECKLIST.md +95 -95
  320. package/vendor/Server/Skills/rnoh-lib-demo-create/references/SOURCE_EXPLORATION.md +169 -169
  321. package/vendor/Server/Skills/rnoh-lib-demo-doc/SKILL.md +554 -554
  322. package/vendor/Server/Skills/rnoh-lib-demo-doc/assets/DEMO_DOC_TEMPLATE.md +106 -106
  323. package/vendor/Server/Skills/rnoh-lib-demo-doc/references/COVERAGE_INCREMENTAL.md +216 -216
  324. package/vendor/Server/Skills/rnoh-lib-demo-doc/references/DEMO_DESIGN_RULES.md +413 -413
  325. package/vendor/Server/Skills/rnoh-lib-demo-doc/references/OUTPUT_FORMAT.md +269 -269
  326. package/vendor/Server/Skills/rnoh-lib-demo-doc/references/QUALITY_CHECKLIST.md +98 -98
  327. package/vendor/Server/Skills/rnoh-lib-func-test/SKILL.md +337 -337
  328. package/vendor/Server/Skills/rnoh-lib-rnt-search/SKILL.md +722 -722
  329. package/vendor/Server/Skills/rnoh-lib-rnt-search/assets/PORT_REPORT_TEMPLATE.md +219 -219
  330. package/vendor/Server/Skills/rnoh-lib-rnt-search/references/DEMO_PORTING_GUIDE.md +345 -345
  331. package/vendor/Server/Skills/rnoh-lib-rnt-search/references/PORT_VERIFICATION.md +269 -269
  332. package/vendor/Server/Skills/rnoh-lib-rnt-search/references/RNT_PROJECT_STRUCTURE.md +173 -173
  333. package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/analyze-demo-deps.cjs +267 -267
  334. package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/detect-rnoh-version.cjs +174 -174
  335. package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/find-rnt-demo.sh +111 -111
  336. package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/port-demo.sh +186 -186
  337. package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/read-lib-meta.cjs +150 -150
  338. package/vendor/Server/Skills/rnoh-lib-test-align/SKILL.md +296 -296
  339. package/vendor/Server/Skills/rnoh-lib-test-align/references/jest-troubleshooting.md +371 -371
  340. package/vendor/Server/Skills/rnoh-lib-test-align/references/port-test-demo-guide.md +212 -212
  341. package/vendor/Server/Skills/rnoh-lib-test-align/references/runtime-troubleshooting.md +345 -345
  342. package/vendor/Server/Skills/rnoh-lib-test-align/references/unit-test-template.md +223 -223
  343. package/vendor/Server/Skills/rnoh-lib-test-align/scripts/port-test-demo.sh +1053 -1053
  344. package/vendor/Server/Skills/rnoh-lib-version-diff/SKILL.md +295 -255
  345. package/vendor/Server/Skills/rnoh-lib-version-diff/references/OHOS_ADAPTATION.md +82 -77
  346. package/vendor/Server/Skills/rnoh-lib-version-diff/references/OHOS_API_LOOKUP.md +224 -224
  347. package/vendor/Server/Skills/rnoh-lib-version-diff/references/script-reference.md +175 -174
  348. package/vendor/Server/Skills/rnoh-lib-version-diff/scripts/detect-upstream-version.js +967 -967
  349. package/vendor/Server/Skills/rnoh-lib-version-diff/scripts/generate-diff.js +1798 -1798
  350. package/vendor/Server/Skills/rnoh-lib-version-diff/scripts/package.json +5 -5
  351. package/vendor/Server/Skills/rnoh-lib-version-diff/templates/report-template.md +180 -137
  352. package/vendor/Server/Skills/rnoh-lib-xts-coverage/SKILL.md +145 -145
  353. package/vendor/Server/Skills/skill-generator/SKILL.md +365 -365
  354. package/vendor/Server/Skills/skill-generator/assets/SKILL_TEMPLATE.md +183 -183
  355. package/vendor/Server/Skills/skill-generator/references/COMPLIANCE_CHECKLIST.md +82 -82
  356. package/vendor/Server/Skills/skill-generator/references/KB_QUERY_GUIDE.md +110 -110
  357. package/vendor/Server/Skills/skill-generator/references/MCP_TOOL_DISCOVERY.md +122 -122
  358. package/vendor/Server/Skills/skill-generator/references/SKILL_SPEC.md +121 -121
  359. package/vendor/Server/Skills/skill-generator/scripts/validate-skill.cjs +259 -259
  360. package/vendor/Server/Skills/task-analysis/SKILL.md +234 -234
  361. package/vendor/Server/Skills/task-analysis/assets/OUTPUT_EXAMPLES.md +160 -160
  362. package/vendor/Server/Skills/task-analysis/references/ACCEPTANCE_CRITERIA_GUIDE.md +190 -190
  363. package/vendor/Server/Skills/task-analysis/references/ANALYSIS_SCHEMA.md +224 -224
  364. package/vendor/Server/Skills/task-analysis/references/INTEGRATION_CONTEXT.md +162 -162
  365. package/vendor/Server/Skills/task-analysis/references/LESSONS_LEARNED.md +55 -55
  366. package/vendor/Server/Skills/task-analysis/references/REPLAN_CONTEXT_GUIDE.md +126 -126
  367. package/vendor/Server/Skills/task-analysis/scripts/validate-analysis-output.sh +256 -256
  368. package/vendor/Server/Skills/task-decomposition/SKILL.md +528 -528
  369. package/vendor/Server/Skills/task-decomposition/assets/OUTPUT_EXAMPLES.md +451 -451
  370. package/vendor/Server/Skills/task-decomposition/references/ACCEPTANCE_CRITERIA_GUIDE.md +179 -179
  371. package/vendor/Server/Skills/task-decomposition/references/DEPENDENCY_GRAPH_GUIDE.md +152 -152
  372. package/vendor/Server/Skills/task-decomposition/references/INTEGRATION_CONTEXT.md +175 -175
  373. package/vendor/Server/Skills/task-decomposition/references/REPLAN_CONTEXT_GUIDE.md +195 -195
  374. package/vendor/Server/Skills/task-decomposition/references/TASK_DECOMPOSITION_TEMPLATES.md +226 -226
  375. package/vendor/Server/Skills/task-decomposition/scripts/list-available-skills.cjs +263 -263
  376. package/vendor/Server/Skills/task-decomposition/scripts/skill-blacklist.json +29 -29
  377. package/vendor/Server/Skills/task-decomposition/scripts/validate-decomposition-output.cjs +376 -376
  378. package/vendor/Server/Skills/task-decomposition/scripts/validate-param-consistency.cjs +259 -259
  379. package/vendor/Server/Skills/task-decomposition/scripts/validate-specified-skills.cjs +216 -216
  380. package/vendor/Server/Skills/task-decomposition/scripts/validate-step-graph.cjs +424 -424
  381. package/vendor/Server/Skills/tpc-cpp-check/SKILL.md +427 -427
  382. package/vendor/Server/Skills/tpc-cpp-check/references/CHECKLIST.md +214 -214
  383. package/vendor/Server/Skills/tpc-cpp-check/references/HPKBUILD_GUIDE.md +235 -235
  384. package/vendor/Server/Skills/tpc-cpp-check/references/REPORT_TEMPLATE.md +250 -250
  385. package/vendor/Server/TestCheck/TestCheck.js +775 -775
  386. package/vendor/Server/TestCheck/index.js +11 -11
  387. package/vendor/Server/library/McpToolGuide.js +280 -280
  388. package/vendor/Server/library/StatsService.js +126 -126
  389. package/vendor/Server/library/cstTime.js +16 -16
  390. package/vendor/VERSION +3 -3
  391. package/workflows/pr-check.mjs +105 -105
  392. package/workflows/pr-push.mjs +192 -192
  393. 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 };