@ohos-cpf/3rdloop 0.0.2 → 0.0.4
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 +290 -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,422 +1,422 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AnalysisStrategies —— 任务分析策略(CLI 优先 + LLM fallback)
|
|
3
|
-
*
|
|
4
|
-
* 职责:
|
|
5
|
-
* - 通过 CLI 执行 task-analysis SKILL(opencode 路径)
|
|
6
|
-
* - CLI 不可用时降级为直接 LLM 调用
|
|
7
|
-
* - 支持首轮分析和重规划场景的上下文分析
|
|
8
|
-
* - 规范化分析结果
|
|
9
|
-
*
|
|
10
|
-
* 设计原则:
|
|
11
|
-
* - 持有 llm + skillExecutor 引用,不持有 Brain 的业务状态
|
|
12
|
-
* - 所有方法接收纯参数,返回规范化的分析对象
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
import path from 'node:path';
|
|
16
|
-
import fs from 'node:fs';
|
|
17
|
-
|
|
18
|
-
export class AnalysisStrategies {
|
|
19
|
-
/**
|
|
20
|
-
* @param {object} deps
|
|
21
|
-
* @param {object} deps.llm - LLMClient 实例
|
|
22
|
-
* @param {object} deps.skillExecutor - SkillExecutor 实例
|
|
23
|
-
*/
|
|
24
|
-
constructor({ llm, skillExecutor }) {
|
|
25
|
-
this.llm = llm;
|
|
26
|
-
this.skillExecutor = skillExecutor;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
// ─── 步骤摘要格式化(重规划共用) ────────────────────────────────
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* 格式化上一轮步骤执行摘要,供重规划 prompt 注入。
|
|
33
|
-
*
|
|
34
|
-
* 将 completedSteps / failedSteps / pendingSteps 格式化为可读文本,
|
|
35
|
-
* 使 LLM 能理解哪些工作已完成、产物在哪里、哪些步骤失败需重做。
|
|
36
|
-
*
|
|
37
|
-
* @param {object} context - 重规划上下文
|
|
38
|
-
* @returns {string} 格式化后的步骤摘要文本
|
|
39
|
-
* @private
|
|
40
|
-
*/
|
|
41
|
-
_formatPrevStepsSummary(context) {
|
|
42
|
-
const { completedSteps = [], failedSteps = [], pendingSteps = [], satisfiedCriteria = [] } = context;
|
|
43
|
-
|
|
44
|
-
const parts = [];
|
|
45
|
-
|
|
46
|
-
// 已满足的验收标准
|
|
47
|
-
if (satisfiedCriteria.length > 0) {
|
|
48
|
-
parts.push(`### 已满足的验收标准(${satisfiedCriteria.length} 条)`);
|
|
49
|
-
parts.push(satisfiedCriteria.map(c =>
|
|
50
|
-
` - [${c.id || c.criterionId}] ${c.criterion || c.criterionText || ''} ✓`
|
|
51
|
-
).join('\n'));
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// 已完成的步骤
|
|
55
|
-
if (completedSteps.length > 0) {
|
|
56
|
-
parts.push(`### 已完成的步骤(${completedSteps.length} 个,无需重做)`);
|
|
57
|
-
parts.push(completedSteps.map(s =>
|
|
58
|
-
` - 步骤${s.stepId}: ${s.taskDescription.slice(0, 120)}` +
|
|
59
|
-
(s.resultPath ? `\n 产物: ${s.resultPath}` : '')
|
|
60
|
-
).join('\n'));
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// 失败的步骤
|
|
64
|
-
if (failedSteps.length > 0) {
|
|
65
|
-
parts.push(`### 失败的步骤(${failedSteps.length} 个,需重点修复)`);
|
|
66
|
-
parts.push(failedSteps.map(s =>
|
|
67
|
-
` - 步骤${s.stepId}: ${s.taskDescription.slice(0, 120)}` +
|
|
68
|
-
(s.error ? `\n 失败原因: ${s.error}` : '') +
|
|
69
|
-
(s.resultPath ? `\n 产物: ${s.resultPath}` : '')
|
|
70
|
-
).join('\n'));
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// 未执行的步骤
|
|
74
|
-
if (pendingSteps.length > 0) {
|
|
75
|
-
parts.push(`### 未执行的步骤(${pendingSteps.length} 个)`);
|
|
76
|
-
parts.push(pendingSteps.map(s =>
|
|
77
|
-
` - 步骤${s.stepId}: ${s.taskDescription.slice(0, 120)}`
|
|
78
|
-
).join('\n'));
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
return parts.length > 0 ? parts.join('\n') : '(无步骤执行信息)';
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// ─── 首轮分析 ──────────────────────────────────────────────────────
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* 分析任务意图 — 通过 CLI 执行 task-analysis SKILL 提取任务关键信息 + 生成验收标准
|
|
88
|
-
*
|
|
89
|
-
* 调用路径:Brain → 构建 prompt → opencode CLI → task-analysis SKILL → 结果文件
|
|
90
|
-
*
|
|
91
|
-
* 如果用户提供了验收标准,SKILL 会基于用户标准进行细化和补充;
|
|
92
|
-
* 如果用户未提供,SKILL 会根据任务描述自动生成合理的验收标准。
|
|
93
|
-
*
|
|
94
|
-
* CLI 不可用时降级为直接 LLM 调用(fallback)。
|
|
95
|
-
*
|
|
96
|
-
* @param {string} taskDescription
|
|
97
|
-
* @param {string} [userCriteria] - 用户提供的验收标准(自然语言)
|
|
98
|
-
* @param {object} [execCtx] - CLI 执行上下文
|
|
99
|
-
* @param {string} [execCtx.taskId] - 任务 ID(用于构建结果文件路径)
|
|
100
|
-
* @param {string} [execCtx.taskDir] - 工作目录(Session cwd)
|
|
101
|
-
* @param {string} [execCtx.skillDir] - SKILL 根目录
|
|
102
|
-
* @param {number} [execCtx.loopCount] - 循环轮次(默认 0)
|
|
103
|
-
* @param {object} [execCtx.abortSignal] - 终止信号 { isAborted, onSessionCreated }(LoopEngine 注入)
|
|
104
|
-
* @returns {Promise<{analysis: object, sessionId: string|null}>} analysis 包含 intent/domain/keywords 等,sessionId 为 opencode 会话 ID(LLM fallback 时为 null)
|
|
105
|
-
*/
|
|
106
|
-
async analyzeTask(taskDescription, userCriteria = '', execCtx = {}) {
|
|
107
|
-
const { taskId, taskDir, skillDir, loopCount = 0, abortSignal } = execCtx;
|
|
108
|
-
|
|
109
|
-
// ── 尝试通过 CLI 执行 task-analysis SKILL ──
|
|
110
|
-
if (taskId && taskDir && skillDir) {
|
|
111
|
-
try {
|
|
112
|
-
return await this._analyzeViaCLI(taskDescription, userCriteria, {
|
|
113
|
-
taskId, taskDir, skillDir, loopCount, abortSignal
|
|
114
|
-
});
|
|
115
|
-
} catch (err) {
|
|
116
|
-
// 终止错误必须向上抛(降级为 LLM 会绕过终止语义,继续消耗 LLM 调用)
|
|
117
|
-
if (err && err.name === 'SkillAbortedError') throw err;
|
|
118
|
-
console.warn(`[Brain] CLI 执行 task-analysis SKILL 失败,降级为 LLM 直接调用: ${err.message}`);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// ── Fallback:直接 LLM 调用(无 sessionId) ──
|
|
123
|
-
const analysis = await this._analyzeViaLLM(taskDescription, userCriteria);
|
|
124
|
-
return { analysis, sessionId: null };
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* 通过 CLI 执行 task-analysis SKILL。
|
|
129
|
-
*
|
|
130
|
-
* @param {string} taskDescription
|
|
131
|
-
* @param {string} userCriteria
|
|
132
|
-
* @param {object} ctx - { taskId, taskDir, skillDir, loopCount }
|
|
133
|
-
* @returns {Promise<object>}
|
|
134
|
-
* @private
|
|
135
|
-
*/
|
|
136
|
-
async _analyzeViaCLI(taskDescription, userCriteria, ctx) {
|
|
137
|
-
const { taskId, taskDir, skillDir, loopCount, abortSignal } = ctx;
|
|
138
|
-
const analysisSkillDir = path.join(skillDir, 'task-analysis');
|
|
139
|
-
const resultFilePath = path.join(taskDir, `brain_analysis_loop${loopCount}.json`);
|
|
140
|
-
|
|
141
|
-
// 构建上下文段落
|
|
142
|
-
const contextSections = [
|
|
143
|
-
`## 任务描述\n${taskDescription}`,
|
|
144
|
-
userCriteria.trim()
|
|
145
|
-
? `## 用户提供的验收标准\n${userCriteria.trim()}`
|
|
146
|
-
: `## 验收标准\n用户未提供验收标准,请根据任务描述自动生成合理的验收标准,确保每条标准具体、可验证。`
|
|
147
|
-
];
|
|
148
|
-
|
|
149
|
-
const title = `brain|task=${taskId}|analyze|loop=${loopCount}`;
|
|
150
|
-
const { success, json, sessionId } = await this.skillExecutor.invokeSkill(
|
|
151
|
-
analysisSkillDir, taskDir, resultFilePath, title, contextSections, abortSignal
|
|
152
|
-
);
|
|
153
|
-
|
|
154
|
-
if (!success || !json) {
|
|
155
|
-
throw new Error('task-analysis SKILL 执行失败或结果解析为空');
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
return { analysis: this.normalizeAnalysis(json), sessionId: sessionId || null };
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Fallback:直接通过 LLM 分析任务。
|
|
163
|
-
*
|
|
164
|
-
* @param {string} taskDescription
|
|
165
|
-
* @param {string} userCriteria
|
|
166
|
-
* @returns {Promise<object>}
|
|
167
|
-
* @private
|
|
168
|
-
*/
|
|
169
|
-
async _analyzeViaLLM(taskDescription, userCriteria) {
|
|
170
|
-
const criteriaSection = userCriteria.trim()
|
|
171
|
-
? `\n## 用户提供的验收标准\n${userCriteria.trim()}\n\n请基于以上用户标准进行细化、补充和结构化,确保验收标准具体、可验证。`
|
|
172
|
-
: `\n## 验收标准\n用户未提供验收标准,请根据任务描述自动生成合理的验收标准,确保每条标准具体、可验证。`;
|
|
173
|
-
|
|
174
|
-
const prompt = `你是一个任务分析助手。请分析以下任务描述,提取关键信息并生成验收标准。
|
|
175
|
-
|
|
176
|
-
## 任务描述
|
|
177
|
-
${taskDescription}
|
|
178
|
-
${criteriaSection}
|
|
179
|
-
|
|
180
|
-
## 输出要求
|
|
181
|
-
请以 JSON 格式返回,包含以下字段:
|
|
182
|
-
{
|
|
183
|
-
"intent": "任务的核心意图(一句话概括)",
|
|
184
|
-
"domain": "任务所属领域(如 harmonyos-porting、code-quality、documentation 等)",
|
|
185
|
-
"keywords": ["关键词1", "关键词2", "..."],
|
|
186
|
-
"constraints": ["约束条件1", "约束条件2", "..."],
|
|
187
|
-
"techStack": ["涉及的技术栈1", "..."],
|
|
188
|
-
"complexity": "low|medium|high",
|
|
189
|
-
"estimatedSteps": 3,
|
|
190
|
-
"acceptanceCriteria": [
|
|
191
|
-
{
|
|
192
|
-
"id": "ac1",
|
|
193
|
-
"criterion": "具体的验收标准描述",
|
|
194
|
-
"type": "output|quality|performance|compliance",
|
|
195
|
-
"verification": "如何验证该标准是否满足(如检查文件是否存在、内容是否符合格式等)"
|
|
196
|
-
}
|
|
197
|
-
]
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
### 验收标准说明
|
|
201
|
-
- 每条标准必须**具体且可验证**,避免模糊描述
|
|
202
|
-
- type 分类:output(产物检查)、quality(质量要求)、performance(性能指标)、compliance(合规性)
|
|
203
|
-
- verification 描述验证方式:如检查文件、执行命令、人工审查等
|
|
204
|
-
- 验收标准数量通常 3-8 条,覆盖任务的关键产出和质量要求
|
|
205
|
-
|
|
206
|
-
注意:只返回 JSON,不要包含其他文字。`;
|
|
207
|
-
|
|
208
|
-
const result = await this.llm.chatJSON(prompt, { maxTokens: 2048 });
|
|
209
|
-
return this.normalizeAnalysis(result);
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
// ─── 重规划分析 ────────────────────────────────────────────────────
|
|
213
|
-
|
|
214
|
-
/**
|
|
215
|
-
* 带上下文重新分析任务 — 在重规划时调用,融入上轮审核失败信息。
|
|
216
|
-
*
|
|
217
|
-
* 通过 CLI 执行 task-analysis SKILL,将失败上下文作为 context 传入。
|
|
218
|
-
* CLI 不可用时降级为直接 LLM 调用(fallback)。
|
|
219
|
-
*
|
|
220
|
-
* @param {string} taskDescription
|
|
221
|
-
* @param {string} userCriteria
|
|
222
|
-
* @param {object} context - 重规划上下文
|
|
223
|
-
* @param {Array} context.failedCriteria - 上轮未满足的验收标准
|
|
224
|
-
* @param {Array} context.improvementSuggestions - 上轮改进建议
|
|
225
|
-
* @param {string} context.prevCheckSummary - 上轮审核摘要
|
|
226
|
-
* @param {string} context.prevOrchStatus - 上轮编排状态
|
|
227
|
-
* @param {number} context.loopCount - 当前循环轮次
|
|
228
|
-
* @param {object} [execCtx] - CLI 执行上下文 { taskId, taskDir, skillDir, abortSignal }
|
|
229
|
-
* @returns {Promise<{analysis: object, sessionId: string|null}>}
|
|
230
|
-
*/
|
|
231
|
-
async analyzeTaskWithContext(taskDescription, userCriteria, context, execCtx = {}) {
|
|
232
|
-
const { taskId, taskDir, skillDir, abortSignal } = execCtx;
|
|
233
|
-
|
|
234
|
-
// ── 尝试通过 CLI 执行 task-analysis SKILL(带重规划上下文) ──
|
|
235
|
-
if (taskId && taskDir && skillDir) {
|
|
236
|
-
try {
|
|
237
|
-
return await this._analyzeWithContextViaCLI(
|
|
238
|
-
taskDescription, userCriteria, context, { taskId, taskDir, skillDir, abortSignal }
|
|
239
|
-
);
|
|
240
|
-
} catch (err) {
|
|
241
|
-
// 终止错误必须向上抛(降级为 LLM 会绕过终止语义)
|
|
242
|
-
if (err && err.name === 'SkillAbortedError') throw err;
|
|
243
|
-
console.warn(`[Brain] CLI 执行 task-analysis SKILL(重规划)失败,降级为 LLM 直接调用: ${err.message}`);
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
// ── Fallback:直接 LLM 调用(无 sessionId) ──
|
|
248
|
-
const analysis = await this._analyzeWithContextViaLLM(taskDescription, userCriteria, context);
|
|
249
|
-
return { analysis, sessionId: null };
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
/**
|
|
253
|
-
* 通过 CLI 执行 task-analysis SKILL(重规划模式)。
|
|
254
|
-
*
|
|
255
|
-
* @param {string} taskDescription
|
|
256
|
-
* @param {string} userCriteria
|
|
257
|
-
* @param {object} context - 重规划上下文
|
|
258
|
-
* @param {object} ctx - { taskId, taskDir, skillDir }
|
|
259
|
-
* @returns {Promise<object>}
|
|
260
|
-
* @private
|
|
261
|
-
*/
|
|
262
|
-
async _analyzeWithContextViaCLI(taskDescription, userCriteria, context, ctx) {
|
|
263
|
-
const { taskId, taskDir, skillDir, abortSignal } = ctx;
|
|
264
|
-
const { failedCriteria, improvementSuggestions, prevCheckSummary, prevOrchStatus, loopCount } = context;
|
|
265
|
-
const analysisSkillDir = path.join(skillDir, 'task-analysis');
|
|
266
|
-
const resultFilePath = path.join(taskDir, `brain_analysis_loop${loopCount}.json`);
|
|
267
|
-
|
|
268
|
-
const failedText = failedCriteria.length > 0
|
|
269
|
-
? failedCriteria.map(c => ` - [${c.id || c.criterionId}] ${c.criterion || c.criterionText || ''} → 原因: ${c.reason || c.evidence || '未满足'}`).join('\n')
|
|
270
|
-
: '(无具体未满足标准信息)';
|
|
271
|
-
|
|
272
|
-
const suggestionText = improvementSuggestions.length > 0
|
|
273
|
-
? improvementSuggestions.map((s, i) => ` ${i + 1}. ${s}`).join('\n')
|
|
274
|
-
: '(无具体改进建议)';
|
|
275
|
-
|
|
276
|
-
// 格式化上一轮步骤执行摘要(已完成步骤 + 失败步骤 + 产物路径)
|
|
277
|
-
const prevStepsText = this._formatPrevStepsSummary(context);
|
|
278
|
-
|
|
279
|
-
const contextSections = [
|
|
280
|
-
`## 任务描述\n${taskDescription}`,
|
|
281
|
-
userCriteria.trim()
|
|
282
|
-
? `## 用户提供的验收标准\n${userCriteria.trim()}`
|
|
283
|
-
: `## 验收标准\n请根据任务描述自动生成合理的验收标准。`,
|
|
284
|
-
`## 重规划上下文\n当前是第 ${loopCount} 轮重规划,上一轮执行后准出审核未通过。`,
|
|
285
|
-
`## 上一轮审核摘要\n${prevCheckSummary || '(无摘要)'}`,
|
|
286
|
-
`## 上一轮编排状态\n${prevOrchStatus || 'unknown'}`,
|
|
287
|
-
`## 上一轮步骤执行详情\n${prevStepsText}`,
|
|
288
|
-
`## 未满足的验收标准\n${failedText}`,
|
|
289
|
-
`## 改进建议\n${suggestionText}`,
|
|
290
|
-
`## 重分析要求\n1. 保持原始任务目标不变\n2. 已完成的步骤和已满足的验收标准无需重复分析,重点分析未满足标准的失败原因\n3. 调整验收标准的验证方式,使其更明确\n4. 如有必要,补充新的验收标准\n5. 考虑改进建议中的方向\n6. 生成 failureAnalysis 和 adjustmentStrategy 字段,adjustmentStrategy 中应说明哪些已完成步骤可复用、哪些需要新增或修改`
|
|
291
|
-
];
|
|
292
|
-
|
|
293
|
-
const title = `brain|task=${taskId}|reanalyze|loop=${loopCount}`;
|
|
294
|
-
const { success, json, sessionId } = await this.skillExecutor.invokeSkill(
|
|
295
|
-
analysisSkillDir, taskDir, resultFilePath, title, contextSections, abortSignal
|
|
296
|
-
);
|
|
297
|
-
|
|
298
|
-
if (!success || !json) {
|
|
299
|
-
throw new Error('task-analysis SKILL(重规划)执行失败或结果解析为空');
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
return { analysis: this.normalizeAnalysis(json), sessionId: sessionId || null };
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
/**
|
|
306
|
-
* Fallback:直接通过 LLM 分析任务(重规划模式)。
|
|
307
|
-
*
|
|
308
|
-
* @param {string} taskDescription
|
|
309
|
-
* @param {string} userCriteria
|
|
310
|
-
* @param {object} context
|
|
311
|
-
* @returns {Promise<object>}
|
|
312
|
-
* @private
|
|
313
|
-
*/
|
|
314
|
-
async _analyzeWithContextViaLLM(taskDescription, userCriteria, context) {
|
|
315
|
-
const { failedCriteria, improvementSuggestions, prevCheckSummary, prevOrchStatus, loopCount } = context;
|
|
316
|
-
|
|
317
|
-
const failedText = failedCriteria.length > 0
|
|
318
|
-
? failedCriteria.map(c => ` - [${c.id || c.criterionId}] ${c.criterion || c.criterionText || ''} → 原因: ${c.reason || c.evidence || '未满足'}`).join('\n')
|
|
319
|
-
: '(无具体未满足标准信息)';
|
|
320
|
-
|
|
321
|
-
const suggestionText = improvementSuggestions.length > 0
|
|
322
|
-
? improvementSuggestions.map((s, i) => ` ${i + 1}. ${s}`).join('\n')
|
|
323
|
-
: '(无具体改进建议)';
|
|
324
|
-
|
|
325
|
-
// 格式化上一轮步骤执行摘要(已完成步骤 + 失败步骤 + 产物路径)
|
|
326
|
-
const prevStepsText = this._formatPrevStepsSummary(context);
|
|
327
|
-
|
|
328
|
-
const criteriaSection = userCriteria.trim()
|
|
329
|
-
? `\n## 用户提供的验收标准\n${userCriteria.trim()}\n\n请基于以上用户标准进行细化、补充和结构化。`
|
|
330
|
-
: `\n## 验收标准\n请根据任务描述自动生成合理的验收标准。`;
|
|
331
|
-
|
|
332
|
-
const prompt = `你是一个任务分析助手。当前是第 ${loopCount} 轮重规划,上一轮执行后准出审核未通过,需要重新分析任务并调整策略。
|
|
333
|
-
|
|
334
|
-
## 原始任务描述
|
|
335
|
-
${taskDescription}
|
|
336
|
-
${criteriaSection}
|
|
337
|
-
|
|
338
|
-
## 上一轮审核失败信息
|
|
339
|
-
|
|
340
|
-
### 审核摘要
|
|
341
|
-
${prevCheckSummary || '(无摘要)'}
|
|
342
|
-
|
|
343
|
-
### 上一轮编排状态
|
|
344
|
-
${prevOrchStatus || 'unknown'}
|
|
345
|
-
|
|
346
|
-
### 上一轮步骤执行详情
|
|
347
|
-
${prevStepsText}
|
|
348
|
-
|
|
349
|
-
### 未满足的验收标准
|
|
350
|
-
${failedText}
|
|
351
|
-
|
|
352
|
-
### 改进建议
|
|
353
|
-
${suggestionText}
|
|
354
|
-
|
|
355
|
-
## 重分析要求
|
|
356
|
-
1. 保持原始任务目标不变
|
|
357
|
-
2. 已完成的步骤和已满足的验收标准无需重复分析,重点分析未满足标准的失败原因
|
|
358
|
-
3. 调整验收标准的验证方式,使其更明确
|
|
359
|
-
4. 如有必要,补充新的验收标准
|
|
360
|
-
5. 考虑改进建议中的方向
|
|
361
|
-
6. adjustmentStrategy 中应说明哪些已完成步骤可复用、哪些需要新增或修改
|
|
362
|
-
|
|
363
|
-
## 输出要求
|
|
364
|
-
请以 JSON 格式返回,包含以下字段:
|
|
365
|
-
{
|
|
366
|
-
"intent": "任务的核心意图(一句话概括)",
|
|
367
|
-
"domain": "任务所属领域",
|
|
368
|
-
"keywords": ["关键词1", "..."],
|
|
369
|
-
"constraints": ["约束条件1", "..."],
|
|
370
|
-
"techStack": ["技术栈1", "..."],
|
|
371
|
-
"complexity": "low|medium|high",
|
|
372
|
-
"estimatedSteps": 3,
|
|
373
|
-
"acceptanceCriteria": [
|
|
374
|
-
{
|
|
375
|
-
"id": "ac1",
|
|
376
|
-
"criterion": "具体的验收标准描述",
|
|
377
|
-
"type": "output|quality|performance|compliance",
|
|
378
|
-
"verification": "如何验证该标准是否满足"
|
|
379
|
-
}
|
|
380
|
-
],
|
|
381
|
-
"failureAnalysis": "对上一轮失败原因的分析总结",
|
|
382
|
-
"adjustmentStrategy": "本轮的调整策略说明"
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
注意:只返回 JSON,不要包含其他文字。`;
|
|
386
|
-
|
|
387
|
-
const result = await this.llm.chatJSON(prompt, { maxTokens: 2048 });
|
|
388
|
-
return this.normalizeAnalysis(result);
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
// ─── 规范化 ────────────────────────────────────────────────────────
|
|
392
|
-
|
|
393
|
-
/**
|
|
394
|
-
* 规范化分析结果。
|
|
395
|
-
*
|
|
396
|
-
* @param {object} result - LLM 或 SKILL 返回的原始分析结果
|
|
397
|
-
* @returns {object}
|
|
398
|
-
*/
|
|
399
|
-
normalizeAnalysis(result) {
|
|
400
|
-
return {
|
|
401
|
-
intent: result.intent || '',
|
|
402
|
-
domain: result.domain || 'general',
|
|
403
|
-
keywords: Array.isArray(result.keywords) ? result.keywords : [],
|
|
404
|
-
constraints: Array.isArray(result.constraints) ? result.constraints : [],
|
|
405
|
-
techStack: Array.isArray(result.techStack) ? result.techStack : [],
|
|
406
|
-
complexity: result.complexity || 'medium',
|
|
407
|
-
estimatedSteps: result.estimatedSteps || 3,
|
|
408
|
-
acceptanceCriteria: Array.isArray(result.acceptanceCriteria)
|
|
409
|
-
? result.acceptanceCriteria.map((c, idx) => ({
|
|
410
|
-
id: c.id || `ac${idx + 1}`,
|
|
411
|
-
criterion: c.criterion || '',
|
|
412
|
-
type: c.type || 'output',
|
|
413
|
-
verification: c.verification || ''
|
|
414
|
-
})).filter(c => c.criterion)
|
|
415
|
-
: [],
|
|
416
|
-
failureAnalysis: result.failureAnalysis || '',
|
|
417
|
-
adjustmentStrategy: result.adjustmentStrategy || ''
|
|
418
|
-
};
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
export default AnalysisStrategies;
|
|
1
|
+
/**
|
|
2
|
+
* AnalysisStrategies —— 任务分析策略(CLI 优先 + LLM fallback)
|
|
3
|
+
*
|
|
4
|
+
* 职责:
|
|
5
|
+
* - 通过 CLI 执行 task-analysis SKILL(opencode 路径)
|
|
6
|
+
* - CLI 不可用时降级为直接 LLM 调用
|
|
7
|
+
* - 支持首轮分析和重规划场景的上下文分析
|
|
8
|
+
* - 规范化分析结果
|
|
9
|
+
*
|
|
10
|
+
* 设计原则:
|
|
11
|
+
* - 持有 llm + skillExecutor 引用,不持有 Brain 的业务状态
|
|
12
|
+
* - 所有方法接收纯参数,返回规范化的分析对象
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import path from 'node:path';
|
|
16
|
+
import fs from 'node:fs';
|
|
17
|
+
|
|
18
|
+
export class AnalysisStrategies {
|
|
19
|
+
/**
|
|
20
|
+
* @param {object} deps
|
|
21
|
+
* @param {object} deps.llm - LLMClient 实例
|
|
22
|
+
* @param {object} deps.skillExecutor - SkillExecutor 实例
|
|
23
|
+
*/
|
|
24
|
+
constructor({ llm, skillExecutor }) {
|
|
25
|
+
this.llm = llm;
|
|
26
|
+
this.skillExecutor = skillExecutor;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// ─── 步骤摘要格式化(重规划共用) ────────────────────────────────
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* 格式化上一轮步骤执行摘要,供重规划 prompt 注入。
|
|
33
|
+
*
|
|
34
|
+
* 将 completedSteps / failedSteps / pendingSteps 格式化为可读文本,
|
|
35
|
+
* 使 LLM 能理解哪些工作已完成、产物在哪里、哪些步骤失败需重做。
|
|
36
|
+
*
|
|
37
|
+
* @param {object} context - 重规划上下文
|
|
38
|
+
* @returns {string} 格式化后的步骤摘要文本
|
|
39
|
+
* @private
|
|
40
|
+
*/
|
|
41
|
+
_formatPrevStepsSummary(context) {
|
|
42
|
+
const { completedSteps = [], failedSteps = [], pendingSteps = [], satisfiedCriteria = [] } = context;
|
|
43
|
+
|
|
44
|
+
const parts = [];
|
|
45
|
+
|
|
46
|
+
// 已满足的验收标准
|
|
47
|
+
if (satisfiedCriteria.length > 0) {
|
|
48
|
+
parts.push(`### 已满足的验收标准(${satisfiedCriteria.length} 条)`);
|
|
49
|
+
parts.push(satisfiedCriteria.map(c =>
|
|
50
|
+
` - [${c.id || c.criterionId}] ${c.criterion || c.criterionText || ''} ✓`
|
|
51
|
+
).join('\n'));
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// 已完成的步骤
|
|
55
|
+
if (completedSteps.length > 0) {
|
|
56
|
+
parts.push(`### 已完成的步骤(${completedSteps.length} 个,无需重做)`);
|
|
57
|
+
parts.push(completedSteps.map(s =>
|
|
58
|
+
` - 步骤${s.stepId}: ${s.taskDescription.slice(0, 120)}` +
|
|
59
|
+
(s.resultPath ? `\n 产物: ${s.resultPath}` : '')
|
|
60
|
+
).join('\n'));
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// 失败的步骤
|
|
64
|
+
if (failedSteps.length > 0) {
|
|
65
|
+
parts.push(`### 失败的步骤(${failedSteps.length} 个,需重点修复)`);
|
|
66
|
+
parts.push(failedSteps.map(s =>
|
|
67
|
+
` - 步骤${s.stepId}: ${s.taskDescription.slice(0, 120)}` +
|
|
68
|
+
(s.error ? `\n 失败原因: ${s.error}` : '') +
|
|
69
|
+
(s.resultPath ? `\n 产物: ${s.resultPath}` : '')
|
|
70
|
+
).join('\n'));
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// 未执行的步骤
|
|
74
|
+
if (pendingSteps.length > 0) {
|
|
75
|
+
parts.push(`### 未执行的步骤(${pendingSteps.length} 个)`);
|
|
76
|
+
parts.push(pendingSteps.map(s =>
|
|
77
|
+
` - 步骤${s.stepId}: ${s.taskDescription.slice(0, 120)}`
|
|
78
|
+
).join('\n'));
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return parts.length > 0 ? parts.join('\n') : '(无步骤执行信息)';
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// ─── 首轮分析 ──────────────────────────────────────────────────────
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* 分析任务意图 — 通过 CLI 执行 task-analysis SKILL 提取任务关键信息 + 生成验收标准
|
|
88
|
+
*
|
|
89
|
+
* 调用路径:Brain → 构建 prompt → opencode CLI → task-analysis SKILL → 结果文件
|
|
90
|
+
*
|
|
91
|
+
* 如果用户提供了验收标准,SKILL 会基于用户标准进行细化和补充;
|
|
92
|
+
* 如果用户未提供,SKILL 会根据任务描述自动生成合理的验收标准。
|
|
93
|
+
*
|
|
94
|
+
* CLI 不可用时降级为直接 LLM 调用(fallback)。
|
|
95
|
+
*
|
|
96
|
+
* @param {string} taskDescription
|
|
97
|
+
* @param {string} [userCriteria] - 用户提供的验收标准(自然语言)
|
|
98
|
+
* @param {object} [execCtx] - CLI 执行上下文
|
|
99
|
+
* @param {string} [execCtx.taskId] - 任务 ID(用于构建结果文件路径)
|
|
100
|
+
* @param {string} [execCtx.taskDir] - 工作目录(Session cwd)
|
|
101
|
+
* @param {string} [execCtx.skillDir] - SKILL 根目录
|
|
102
|
+
* @param {number} [execCtx.loopCount] - 循环轮次(默认 0)
|
|
103
|
+
* @param {object} [execCtx.abortSignal] - 终止信号 { isAborted, onSessionCreated }(LoopEngine 注入)
|
|
104
|
+
* @returns {Promise<{analysis: object, sessionId: string|null}>} analysis 包含 intent/domain/keywords 等,sessionId 为 opencode 会话 ID(LLM fallback 时为 null)
|
|
105
|
+
*/
|
|
106
|
+
async analyzeTask(taskDescription, userCriteria = '', execCtx = {}) {
|
|
107
|
+
const { taskId, taskDir, skillDir, loopCount = 0, abortSignal } = execCtx;
|
|
108
|
+
|
|
109
|
+
// ── 尝试通过 CLI 执行 task-analysis SKILL ──
|
|
110
|
+
if (taskId && taskDir && skillDir) {
|
|
111
|
+
try {
|
|
112
|
+
return await this._analyzeViaCLI(taskDescription, userCriteria, {
|
|
113
|
+
taskId, taskDir, skillDir, loopCount, abortSignal
|
|
114
|
+
});
|
|
115
|
+
} catch (err) {
|
|
116
|
+
// 终止错误必须向上抛(降级为 LLM 会绕过终止语义,继续消耗 LLM 调用)
|
|
117
|
+
if (err && err.name === 'SkillAbortedError') throw err;
|
|
118
|
+
console.warn(`[Brain] CLI 执行 task-analysis SKILL 失败,降级为 LLM 直接调用: ${err.message}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// ── Fallback:直接 LLM 调用(无 sessionId) ──
|
|
123
|
+
const analysis = await this._analyzeViaLLM(taskDescription, userCriteria);
|
|
124
|
+
return { analysis, sessionId: null };
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* 通过 CLI 执行 task-analysis SKILL。
|
|
129
|
+
*
|
|
130
|
+
* @param {string} taskDescription
|
|
131
|
+
* @param {string} userCriteria
|
|
132
|
+
* @param {object} ctx - { taskId, taskDir, skillDir, loopCount }
|
|
133
|
+
* @returns {Promise<object>}
|
|
134
|
+
* @private
|
|
135
|
+
*/
|
|
136
|
+
async _analyzeViaCLI(taskDescription, userCriteria, ctx) {
|
|
137
|
+
const { taskId, taskDir, skillDir, loopCount, abortSignal } = ctx;
|
|
138
|
+
const analysisSkillDir = path.join(skillDir, 'task-analysis');
|
|
139
|
+
const resultFilePath = path.join(taskDir, `brain_analysis_loop${loopCount}.json`);
|
|
140
|
+
|
|
141
|
+
// 构建上下文段落
|
|
142
|
+
const contextSections = [
|
|
143
|
+
`## 任务描述\n${taskDescription}`,
|
|
144
|
+
userCriteria.trim()
|
|
145
|
+
? `## 用户提供的验收标准\n${userCriteria.trim()}`
|
|
146
|
+
: `## 验收标准\n用户未提供验收标准,请根据任务描述自动生成合理的验收标准,确保每条标准具体、可验证。`
|
|
147
|
+
];
|
|
148
|
+
|
|
149
|
+
const title = `brain|task=${taskId}|analyze|loop=${loopCount}`;
|
|
150
|
+
const { success, json, sessionId } = await this.skillExecutor.invokeSkill(
|
|
151
|
+
analysisSkillDir, taskDir, resultFilePath, title, contextSections, abortSignal
|
|
152
|
+
);
|
|
153
|
+
|
|
154
|
+
if (!success || !json) {
|
|
155
|
+
throw new Error('task-analysis SKILL 执行失败或结果解析为空');
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
return { analysis: this.normalizeAnalysis(json), sessionId: sessionId || null };
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Fallback:直接通过 LLM 分析任务。
|
|
163
|
+
*
|
|
164
|
+
* @param {string} taskDescription
|
|
165
|
+
* @param {string} userCriteria
|
|
166
|
+
* @returns {Promise<object>}
|
|
167
|
+
* @private
|
|
168
|
+
*/
|
|
169
|
+
async _analyzeViaLLM(taskDescription, userCriteria) {
|
|
170
|
+
const criteriaSection = userCriteria.trim()
|
|
171
|
+
? `\n## 用户提供的验收标准\n${userCriteria.trim()}\n\n请基于以上用户标准进行细化、补充和结构化,确保验收标准具体、可验证。`
|
|
172
|
+
: `\n## 验收标准\n用户未提供验收标准,请根据任务描述自动生成合理的验收标准,确保每条标准具体、可验证。`;
|
|
173
|
+
|
|
174
|
+
const prompt = `你是一个任务分析助手。请分析以下任务描述,提取关键信息并生成验收标准。
|
|
175
|
+
|
|
176
|
+
## 任务描述
|
|
177
|
+
${taskDescription}
|
|
178
|
+
${criteriaSection}
|
|
179
|
+
|
|
180
|
+
## 输出要求
|
|
181
|
+
请以 JSON 格式返回,包含以下字段:
|
|
182
|
+
{
|
|
183
|
+
"intent": "任务的核心意图(一句话概括)",
|
|
184
|
+
"domain": "任务所属领域(如 harmonyos-porting、code-quality、documentation 等)",
|
|
185
|
+
"keywords": ["关键词1", "关键词2", "..."],
|
|
186
|
+
"constraints": ["约束条件1", "约束条件2", "..."],
|
|
187
|
+
"techStack": ["涉及的技术栈1", "..."],
|
|
188
|
+
"complexity": "low|medium|high",
|
|
189
|
+
"estimatedSteps": 3,
|
|
190
|
+
"acceptanceCriteria": [
|
|
191
|
+
{
|
|
192
|
+
"id": "ac1",
|
|
193
|
+
"criterion": "具体的验收标准描述",
|
|
194
|
+
"type": "output|quality|performance|compliance",
|
|
195
|
+
"verification": "如何验证该标准是否满足(如检查文件是否存在、内容是否符合格式等)"
|
|
196
|
+
}
|
|
197
|
+
]
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
### 验收标准说明
|
|
201
|
+
- 每条标准必须**具体且可验证**,避免模糊描述
|
|
202
|
+
- type 分类:output(产物检查)、quality(质量要求)、performance(性能指标)、compliance(合规性)
|
|
203
|
+
- verification 描述验证方式:如检查文件、执行命令、人工审查等
|
|
204
|
+
- 验收标准数量通常 3-8 条,覆盖任务的关键产出和质量要求
|
|
205
|
+
|
|
206
|
+
注意:只返回 JSON,不要包含其他文字。`;
|
|
207
|
+
|
|
208
|
+
const result = await this.llm.chatJSON(prompt, { maxTokens: 2048 });
|
|
209
|
+
return this.normalizeAnalysis(result);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// ─── 重规划分析 ────────────────────────────────────────────────────
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* 带上下文重新分析任务 — 在重规划时调用,融入上轮审核失败信息。
|
|
216
|
+
*
|
|
217
|
+
* 通过 CLI 执行 task-analysis SKILL,将失败上下文作为 context 传入。
|
|
218
|
+
* CLI 不可用时降级为直接 LLM 调用(fallback)。
|
|
219
|
+
*
|
|
220
|
+
* @param {string} taskDescription
|
|
221
|
+
* @param {string} userCriteria
|
|
222
|
+
* @param {object} context - 重规划上下文
|
|
223
|
+
* @param {Array} context.failedCriteria - 上轮未满足的验收标准
|
|
224
|
+
* @param {Array} context.improvementSuggestions - 上轮改进建议
|
|
225
|
+
* @param {string} context.prevCheckSummary - 上轮审核摘要
|
|
226
|
+
* @param {string} context.prevOrchStatus - 上轮编排状态
|
|
227
|
+
* @param {number} context.loopCount - 当前循环轮次
|
|
228
|
+
* @param {object} [execCtx] - CLI 执行上下文 { taskId, taskDir, skillDir, abortSignal }
|
|
229
|
+
* @returns {Promise<{analysis: object, sessionId: string|null}>}
|
|
230
|
+
*/
|
|
231
|
+
async analyzeTaskWithContext(taskDescription, userCriteria, context, execCtx = {}) {
|
|
232
|
+
const { taskId, taskDir, skillDir, abortSignal } = execCtx;
|
|
233
|
+
|
|
234
|
+
// ── 尝试通过 CLI 执行 task-analysis SKILL(带重规划上下文) ──
|
|
235
|
+
if (taskId && taskDir && skillDir) {
|
|
236
|
+
try {
|
|
237
|
+
return await this._analyzeWithContextViaCLI(
|
|
238
|
+
taskDescription, userCriteria, context, { taskId, taskDir, skillDir, abortSignal }
|
|
239
|
+
);
|
|
240
|
+
} catch (err) {
|
|
241
|
+
// 终止错误必须向上抛(降级为 LLM 会绕过终止语义)
|
|
242
|
+
if (err && err.name === 'SkillAbortedError') throw err;
|
|
243
|
+
console.warn(`[Brain] CLI 执行 task-analysis SKILL(重规划)失败,降级为 LLM 直接调用: ${err.message}`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// ── Fallback:直接 LLM 调用(无 sessionId) ──
|
|
248
|
+
const analysis = await this._analyzeWithContextViaLLM(taskDescription, userCriteria, context);
|
|
249
|
+
return { analysis, sessionId: null };
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* 通过 CLI 执行 task-analysis SKILL(重规划模式)。
|
|
254
|
+
*
|
|
255
|
+
* @param {string} taskDescription
|
|
256
|
+
* @param {string} userCriteria
|
|
257
|
+
* @param {object} context - 重规划上下文
|
|
258
|
+
* @param {object} ctx - { taskId, taskDir, skillDir }
|
|
259
|
+
* @returns {Promise<object>}
|
|
260
|
+
* @private
|
|
261
|
+
*/
|
|
262
|
+
async _analyzeWithContextViaCLI(taskDescription, userCriteria, context, ctx) {
|
|
263
|
+
const { taskId, taskDir, skillDir, abortSignal } = ctx;
|
|
264
|
+
const { failedCriteria, improvementSuggestions, prevCheckSummary, prevOrchStatus, loopCount } = context;
|
|
265
|
+
const analysisSkillDir = path.join(skillDir, 'task-analysis');
|
|
266
|
+
const resultFilePath = path.join(taskDir, `brain_analysis_loop${loopCount}.json`);
|
|
267
|
+
|
|
268
|
+
const failedText = failedCriteria.length > 0
|
|
269
|
+
? failedCriteria.map(c => ` - [${c.id || c.criterionId}] ${c.criterion || c.criterionText || ''} → 原因: ${c.reason || c.evidence || '未满足'}`).join('\n')
|
|
270
|
+
: '(无具体未满足标准信息)';
|
|
271
|
+
|
|
272
|
+
const suggestionText = improvementSuggestions.length > 0
|
|
273
|
+
? improvementSuggestions.map((s, i) => ` ${i + 1}. ${s}`).join('\n')
|
|
274
|
+
: '(无具体改进建议)';
|
|
275
|
+
|
|
276
|
+
// 格式化上一轮步骤执行摘要(已完成步骤 + 失败步骤 + 产物路径)
|
|
277
|
+
const prevStepsText = this._formatPrevStepsSummary(context);
|
|
278
|
+
|
|
279
|
+
const contextSections = [
|
|
280
|
+
`## 任务描述\n${taskDescription}`,
|
|
281
|
+
userCriteria.trim()
|
|
282
|
+
? `## 用户提供的验收标准\n${userCriteria.trim()}`
|
|
283
|
+
: `## 验收标准\n请根据任务描述自动生成合理的验收标准。`,
|
|
284
|
+
`## 重规划上下文\n当前是第 ${loopCount} 轮重规划,上一轮执行后准出审核未通过。`,
|
|
285
|
+
`## 上一轮审核摘要\n${prevCheckSummary || '(无摘要)'}`,
|
|
286
|
+
`## 上一轮编排状态\n${prevOrchStatus || 'unknown'}`,
|
|
287
|
+
`## 上一轮步骤执行详情\n${prevStepsText}`,
|
|
288
|
+
`## 未满足的验收标准\n${failedText}`,
|
|
289
|
+
`## 改进建议\n${suggestionText}`,
|
|
290
|
+
`## 重分析要求\n1. 保持原始任务目标不变\n2. 已完成的步骤和已满足的验收标准无需重复分析,重点分析未满足标准的失败原因\n3. 调整验收标准的验证方式,使其更明确\n4. 如有必要,补充新的验收标准\n5. 考虑改进建议中的方向\n6. 生成 failureAnalysis 和 adjustmentStrategy 字段,adjustmentStrategy 中应说明哪些已完成步骤可复用、哪些需要新增或修改`
|
|
291
|
+
];
|
|
292
|
+
|
|
293
|
+
const title = `brain|task=${taskId}|reanalyze|loop=${loopCount}`;
|
|
294
|
+
const { success, json, sessionId } = await this.skillExecutor.invokeSkill(
|
|
295
|
+
analysisSkillDir, taskDir, resultFilePath, title, contextSections, abortSignal
|
|
296
|
+
);
|
|
297
|
+
|
|
298
|
+
if (!success || !json) {
|
|
299
|
+
throw new Error('task-analysis SKILL(重规划)执行失败或结果解析为空');
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
return { analysis: this.normalizeAnalysis(json), sessionId: sessionId || null };
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* Fallback:直接通过 LLM 分析任务(重规划模式)。
|
|
307
|
+
*
|
|
308
|
+
* @param {string} taskDescription
|
|
309
|
+
* @param {string} userCriteria
|
|
310
|
+
* @param {object} context
|
|
311
|
+
* @returns {Promise<object>}
|
|
312
|
+
* @private
|
|
313
|
+
*/
|
|
314
|
+
async _analyzeWithContextViaLLM(taskDescription, userCriteria, context) {
|
|
315
|
+
const { failedCriteria, improvementSuggestions, prevCheckSummary, prevOrchStatus, loopCount } = context;
|
|
316
|
+
|
|
317
|
+
const failedText = failedCriteria.length > 0
|
|
318
|
+
? failedCriteria.map(c => ` - [${c.id || c.criterionId}] ${c.criterion || c.criterionText || ''} → 原因: ${c.reason || c.evidence || '未满足'}`).join('\n')
|
|
319
|
+
: '(无具体未满足标准信息)';
|
|
320
|
+
|
|
321
|
+
const suggestionText = improvementSuggestions.length > 0
|
|
322
|
+
? improvementSuggestions.map((s, i) => ` ${i + 1}. ${s}`).join('\n')
|
|
323
|
+
: '(无具体改进建议)';
|
|
324
|
+
|
|
325
|
+
// 格式化上一轮步骤执行摘要(已完成步骤 + 失败步骤 + 产物路径)
|
|
326
|
+
const prevStepsText = this._formatPrevStepsSummary(context);
|
|
327
|
+
|
|
328
|
+
const criteriaSection = userCriteria.trim()
|
|
329
|
+
? `\n## 用户提供的验收标准\n${userCriteria.trim()}\n\n请基于以上用户标准进行细化、补充和结构化。`
|
|
330
|
+
: `\n## 验收标准\n请根据任务描述自动生成合理的验收标准。`;
|
|
331
|
+
|
|
332
|
+
const prompt = `你是一个任务分析助手。当前是第 ${loopCount} 轮重规划,上一轮执行后准出审核未通过,需要重新分析任务并调整策略。
|
|
333
|
+
|
|
334
|
+
## 原始任务描述
|
|
335
|
+
${taskDescription}
|
|
336
|
+
${criteriaSection}
|
|
337
|
+
|
|
338
|
+
## 上一轮审核失败信息
|
|
339
|
+
|
|
340
|
+
### 审核摘要
|
|
341
|
+
${prevCheckSummary || '(无摘要)'}
|
|
342
|
+
|
|
343
|
+
### 上一轮编排状态
|
|
344
|
+
${prevOrchStatus || 'unknown'}
|
|
345
|
+
|
|
346
|
+
### 上一轮步骤执行详情
|
|
347
|
+
${prevStepsText}
|
|
348
|
+
|
|
349
|
+
### 未满足的验收标准
|
|
350
|
+
${failedText}
|
|
351
|
+
|
|
352
|
+
### 改进建议
|
|
353
|
+
${suggestionText}
|
|
354
|
+
|
|
355
|
+
## 重分析要求
|
|
356
|
+
1. 保持原始任务目标不变
|
|
357
|
+
2. 已完成的步骤和已满足的验收标准无需重复分析,重点分析未满足标准的失败原因
|
|
358
|
+
3. 调整验收标准的验证方式,使其更明确
|
|
359
|
+
4. 如有必要,补充新的验收标准
|
|
360
|
+
5. 考虑改进建议中的方向
|
|
361
|
+
6. adjustmentStrategy 中应说明哪些已完成步骤可复用、哪些需要新增或修改
|
|
362
|
+
|
|
363
|
+
## 输出要求
|
|
364
|
+
请以 JSON 格式返回,包含以下字段:
|
|
365
|
+
{
|
|
366
|
+
"intent": "任务的核心意图(一句话概括)",
|
|
367
|
+
"domain": "任务所属领域",
|
|
368
|
+
"keywords": ["关键词1", "..."],
|
|
369
|
+
"constraints": ["约束条件1", "..."],
|
|
370
|
+
"techStack": ["技术栈1", "..."],
|
|
371
|
+
"complexity": "low|medium|high",
|
|
372
|
+
"estimatedSteps": 3,
|
|
373
|
+
"acceptanceCriteria": [
|
|
374
|
+
{
|
|
375
|
+
"id": "ac1",
|
|
376
|
+
"criterion": "具体的验收标准描述",
|
|
377
|
+
"type": "output|quality|performance|compliance",
|
|
378
|
+
"verification": "如何验证该标准是否满足"
|
|
379
|
+
}
|
|
380
|
+
],
|
|
381
|
+
"failureAnalysis": "对上一轮失败原因的分析总结",
|
|
382
|
+
"adjustmentStrategy": "本轮的调整策略说明"
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
注意:只返回 JSON,不要包含其他文字。`;
|
|
386
|
+
|
|
387
|
+
const result = await this.llm.chatJSON(prompt, { maxTokens: 2048 });
|
|
388
|
+
return this.normalizeAnalysis(result);
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
// ─── 规范化 ────────────────────────────────────────────────────────
|
|
392
|
+
|
|
393
|
+
/**
|
|
394
|
+
* 规范化分析结果。
|
|
395
|
+
*
|
|
396
|
+
* @param {object} result - LLM 或 SKILL 返回的原始分析结果
|
|
397
|
+
* @returns {object}
|
|
398
|
+
*/
|
|
399
|
+
normalizeAnalysis(result) {
|
|
400
|
+
return {
|
|
401
|
+
intent: result.intent || '',
|
|
402
|
+
domain: result.domain || 'general',
|
|
403
|
+
keywords: Array.isArray(result.keywords) ? result.keywords : [],
|
|
404
|
+
constraints: Array.isArray(result.constraints) ? result.constraints : [],
|
|
405
|
+
techStack: Array.isArray(result.techStack) ? result.techStack : [],
|
|
406
|
+
complexity: result.complexity || 'medium',
|
|
407
|
+
estimatedSteps: result.estimatedSteps || 3,
|
|
408
|
+
acceptanceCriteria: Array.isArray(result.acceptanceCriteria)
|
|
409
|
+
? result.acceptanceCriteria.map((c, idx) => ({
|
|
410
|
+
id: c.id || `ac${idx + 1}`,
|
|
411
|
+
criterion: c.criterion || '',
|
|
412
|
+
type: c.type || 'output',
|
|
413
|
+
verification: c.verification || ''
|
|
414
|
+
})).filter(c => c.criterion)
|
|
415
|
+
: [],
|
|
416
|
+
failureAnalysis: result.failureAnalysis || '',
|
|
417
|
+
adjustmentStrategy: result.adjustmentStrategy || ''
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
export default AnalysisStrategies;
|