@ohos-cpf/3rdloop 0.0.1

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 (389) hide show
  1. package/README.md +425 -0
  2. package/bin/3rdloop.mjs +48 -0
  3. package/lib/cli.js +741 -0
  4. package/lib/config.js +318 -0
  5. package/lib/doctor.js +114 -0
  6. package/lib/exit-codes.js +31 -0
  7. package/lib/opencode.js +156 -0
  8. package/lib/orch.js +427 -0
  9. package/lib/queries.js +264 -0
  10. package/lib/runner.js +979 -0
  11. package/lib/step.js +326 -0
  12. package/lib/ui.js +223 -0
  13. package/lib/workflow.js +291 -0
  14. package/lib/workflows.js +132 -0
  15. package/package.json +50 -0
  16. package/vendor/Server/Agent/SkillSelector/README.md +344 -0
  17. package/vendor/Server/Agent/SkillSelector/core/Agent.js +207 -0
  18. package/vendor/Server/Agent/SkillSelector/index.js +14 -0
  19. package/vendor/Server/Agent/SkillSelector/llm/llmClient.js +313 -0
  20. package/vendor/Server/Agent/SkillSelector/llm/prompts.js +161 -0
  21. package/vendor/Server/Agent/SkillSelector/llm/reactSteps.js +144 -0
  22. package/vendor/Server/Agent/SkillSelector/matcher/fuzzyMatcher.js +433 -0
  23. package/vendor/Server/Agent/SkillSelector/scanner/skillScanner.js +382 -0
  24. package/vendor/Server/Agent/SkillSelector/types.js +63 -0
  25. package/vendor/Server/Agent/SkillSelector/utils/actionWords.js +60 -0
  26. package/vendor/Server/Brain/AnalysisStrategies.js +422 -0
  27. package/vendor/Server/Brain/Brain.js +686 -0
  28. package/vendor/Server/Brain/DecompositionStrategies.js +621 -0
  29. package/vendor/Server/Brain/PlanPersistence.js +196 -0
  30. package/vendor/Server/Brain/SkillExecutor.js +251 -0
  31. package/vendor/Server/Brain/index.js +11 -0
  32. package/vendor/Server/CLI/cli.js +243 -0
  33. package/vendor/Server/CLI/opencode/index.js +804 -0
  34. package/vendor/Server/CLI/opencode.js +5 -0
  35. package/vendor/Server/DbUse/MessageArchive.js +61 -0
  36. package/vendor/Server/DbUse/StorageManager.js +107 -0
  37. package/vendor/Server/DbUse/adapters/BaseAdapter.js +94 -0
  38. package/vendor/Server/DbUse/adapters/FileAdapter.js +138 -0
  39. package/vendor/Server/DbUse/adapters/JsonAdapter.js +138 -0
  40. package/vendor/Server/DbUse/adapters/JsonlAdapter.js +114 -0
  41. package/vendor/Server/DbUse/adapters/SqliteAdapter.js +157 -0
  42. package/vendor/Server/DbUse/index.js +160 -0
  43. package/vendor/Server/DbUse/stores/SessionStore.js +279 -0
  44. package/vendor/Server/DbUse/stores/TaskExecutionStore.js +133 -0
  45. package/vendor/Server/DbUse/stores/TaskRegistryStore.js +262 -0
  46. package/vendor/Server/DbUse/stores/TaskStepStore.js +279 -0
  47. package/vendor/Server/FlexRunner/FlexRunner.js +1759 -0
  48. package/vendor/Server/FlexRunner/index.js +12 -0
  49. package/vendor/Server/Knowledge/KnowledgeImporter.js +523 -0
  50. package/vendor/Server/Knowledge/KnowledgeManager.js +341 -0
  51. package/vendor/Server/Knowledge/index.js +33 -0
  52. package/vendor/Server/LoopEngine/LoopEngine.js +1133 -0
  53. package/vendor/Server/LoopEngine/index.js +11 -0
  54. package/vendor/Server/Orchestrator/Orchestrator.js +1425 -0
  55. package/vendor/Server/Orchestrator/StepNode.js +312 -0
  56. package/vendor/Server/Orchestrator/index.js +13 -0
  57. package/vendor/Server/Routes/controllers/BrainController.js +241 -0
  58. package/vendor/Server/Routes/controllers/FlexRunnerController.js +1125 -0
  59. package/vendor/Server/Routes/controllers/HealthController.js +44 -0
  60. package/vendor/Server/Routes/controllers/KnowledgeImportController.js +355 -0
  61. package/vendor/Server/Routes/controllers/LoopEngineController.js +788 -0
  62. package/vendor/Server/Routes/controllers/OrchestratorController.js +911 -0
  63. package/vendor/Server/Routes/controllers/StatsController.js +57 -0
  64. package/vendor/Server/Routes/controllers/StreamController.js +67 -0
  65. package/vendor/Server/Routes/library/logger.js +179 -0
  66. package/vendor/Server/Routes/library/zipArchive.js +172 -0
  67. package/vendor/Server/Routes/router/Router.js +204 -0
  68. package/vendor/Server/Routes/routes/brain.js +47 -0
  69. package/vendor/Server/Routes/routes/flexrunner.js +72 -0
  70. package/vendor/Server/Routes/routes/health.js +28 -0
  71. package/vendor/Server/Routes/routes/index.js +57 -0
  72. package/vendor/Server/Routes/routes/knowledge.js +55 -0
  73. package/vendor/Server/Routes/routes/loopengine.js +58 -0
  74. package/vendor/Server/Routes/routes/orchestrator.js +61 -0
  75. package/vendor/Server/Routes/routes/registry.js +98 -0
  76. package/vendor/Server/Routes/routes/stats.js +23 -0
  77. package/vendor/Server/Routes/routes/stream.js +30 -0
  78. package/vendor/Server/Routes/server.js +202 -0
  79. package/vendor/Server/Routes/sse/SseHub.js +308 -0
  80. package/vendor/Server/Skills/acceptance-check/SKILL.md +174 -0
  81. package/vendor/Server/Skills/acceptance-check/references/PHASE1_ARTIFACT_COLLECTION.md +52 -0
  82. package/vendor/Server/Skills/acceptance-check/references/PHASE2_CRITERIA_EVALUATION.md +77 -0
  83. package/vendor/Server/Skills/arkts-code-check/SKILL.md +314 -0
  84. package/vendor/Server/Skills/arkts-code-check/references/CODE_CHECK_GUIDE.md +160 -0
  85. package/vendor/Server/Skills/arkts-code-check/references/FILE_TYPE_GUIDE.md +29 -0
  86. package/vendor/Server/Skills/arkts-code-check/references/PHASE1_INFO_COLLECTION.md +222 -0
  87. package/vendor/Server/Skills/arkts-code-check/references/REPORT_TEMPLATE.md +220 -0
  88. package/vendor/Server/Skills/arkts-library-compile-validate/SKILL.md +329 -0
  89. package/vendor/Server/Skills/arkts-library-compile-validate/scripts/build.ps1 +93 -0
  90. package/vendor/Server/Skills/arkts-library-compile-validate/scripts/code-linter.cjs +433 -0
  91. package/vendor/Server/Skills/arkts-library-compile-validate/scripts/migrate.cjs +851 -0
  92. package/vendor/Server/Skills/arkts-library-compile-validate/scripts/ohpm-switch.cjs +789 -0
  93. package/vendor/Server/Skills/arkts-library-demo-code/SKILL.md +291 -0
  94. package/vendor/Server/Skills/arkts-library-demo-code/references/API_SIGNATURE_CHECKS.md +68 -0
  95. package/vendor/Server/Skills/arkts-library-demo-code/references/BUILD_VALIDATION.md +184 -0
  96. package/vendor/Server/Skills/arkts-library-demo-code/references/CODE_STANDARDS.md +337 -0
  97. package/vendor/Server/Skills/arkts-library-demo-code/references/EXAMPLES.md +400 -0
  98. package/vendor/Server/Skills/arkts-library-demo-code/references/SYSTEM_API_LOOKUP.md +99 -0
  99. package/vendor/Server/Skills/arkts-library-demo-code/references/TEMPLATE.md +544 -0
  100. package/vendor/Server/Skills/arkts-library-demo-code/scripts/build.ps1 +93 -0
  101. package/vendor/Server/Skills/arkts-library-demo-code/scripts/code-linter.cjs +433 -0
  102. package/vendor/Server/Skills/arkts-library-demo-code/scripts/migrate.cjs +851 -0
  103. package/vendor/Server/Skills/arkts-library-demo-code/scripts/ohpm-switch.cjs +789 -0
  104. package/vendor/Server/Skills/arkts-library-demo-coverage/SKILL.md +174 -0
  105. package/vendor/Server/Skills/arkts-library-demo-scenario/SKILL.md +321 -0
  106. package/vendor/Server/Skills/arkts-library-demo-scenario/references/EXAMPLES.md +100 -0
  107. package/vendor/Server/Skills/arkts-library-demo-scenario/references/TEMPLATE.md +185 -0
  108. package/vendor/Server/Skills/arkts-library-documentation-quality-check/SKILL.md +234 -0
  109. package/vendor/Server/Skills/arkts-library-documentation-quality-check/assets/REPORT_TEMPLATE.md +103 -0
  110. package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/CHECK_DIMENSIONS.md +89 -0
  111. package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/COMPLIANCE_CHECKLIST.md +62 -0
  112. package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/KB_QUERY_GUIDE.md +108 -0
  113. package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/MCP_TOOL_DISCOVERY.md +124 -0
  114. package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/REPORT_TEMPLATE.md +90 -0
  115. package/vendor/Server/Skills/arkts-library-documentation-quality-check/references/SCORING_FORMULA.md +57 -0
  116. package/vendor/Server/Skills/arkts-library-documentation-quality-check/scripts/validate-skill.cjs +259 -0
  117. package/vendor/Server/Skills/arkts-library-interface-spec/SKILL.md +97 -0
  118. package/vendor/Server/Skills/arkts-library-memory-leak-check/SKILL.md +392 -0
  119. package/vendor/Server/Skills/arkts-library-source-clone/SKILL.md +113 -0
  120. package/vendor/Server/Skills/arkts-library-stability-check/SKILL.md +313 -0
  121. package/vendor/Server/Skills/arkts-library-stability-check/assets/REPORT_TEMPLATE.md +154 -0
  122. package/vendor/Server/Skills/arkts-library-stability-check/references/CHECKLIST.md +166 -0
  123. package/vendor/Server/Skills/arkts-library-stability-check/references/CODE_EXAMPLES.md +309 -0
  124. package/vendor/Server/Skills/arkts-library-stability-check/references/SCORING_RULES.md +90 -0
  125. package/vendor/Server/Skills/arkts-library-stability-check/scripts/validate-skill.cjs +282 -0
  126. package/vendor/Server/Skills/arkts-library-test-coverage-check/SKILL.md +361 -0
  127. package/vendor/Server/Skills/arkts-library-test-coverage-check/assets/REPORT_TEMPLATE.md +146 -0
  128. package/vendor/Server/Skills/arkts-library-test-coverage-check/references/CHECKLIST.md +253 -0
  129. package/vendor/Server/Skills/arkts-library-test-coverage-check/references/MCP_TOOL_USAGE.md +115 -0
  130. package/vendor/Server/Skills/arkts-library-test-coverage-check/scripts/validate-skill.cjs +263 -0
  131. package/vendor/Server/Skills/arkts-library-xts-code/SKILL.md +455 -0
  132. package/vendor/Server/Skills/arkts-library-xts-code/assets/report-template.md +60 -0
  133. package/vendor/Server/Skills/arkts-library-xts-code/references/ACCESS_MODIFIER_PRECHECK.md +76 -0
  134. package/vendor/Server/Skills/arkts-library-xts-code/references/BUILD_VERIFICATION.md +200 -0
  135. package/vendor/Server/Skills/arkts-library-xts-code/references/CODE_STANDARDS.md +519 -0
  136. package/vendor/Server/Skills/arkts-library-xts-code/references/SUBAGENT_PROMPT_TEMPLATE.md +276 -0
  137. package/vendor/Server/Skills/arkts-library-xts-code/references/SYSTEM_API_LOOKUP.md +93 -0
  138. package/vendor/Server/Skills/arkts-library-xts-code/references/XTS_TEMPLATE.md +767 -0
  139. package/vendor/Server/Skills/arkts-library-xts-code/scripts/build.ps1 +93 -0
  140. package/vendor/Server/Skills/arkts-library-xts-code/scripts/code-linter.cjs +433 -0
  141. package/vendor/Server/Skills/arkts-library-xts-code/scripts/migrate.cjs +851 -0
  142. package/vendor/Server/Skills/arkts-library-xts-code/scripts/ohpm-switch.cjs +789 -0
  143. package/vendor/Server/Skills/arkts-library-xts-code/scripts/precheck-access-modifiers.cjs +221 -0
  144. package/vendor/Server/Skills/arkts-library-xts-code-fix/SKILL.md +229 -0
  145. package/vendor/Server/Skills/arkts-library-xts-coverage/SKILL.md +97 -0
  146. package/vendor/Server/Skills/arkts-library-xts-doc/SKILL.md +194 -0
  147. package/vendor/Server/Skills/arkts-library-xts-doc/references/EXAMPLES.md +576 -0
  148. package/vendor/Server/Skills/arkts-library-xts-doc/references/TEMPLATE.md +575 -0
  149. package/vendor/Server/Skills/arkts-library-xts-doc/references/TESTABILITY_GUIDE.md +182 -0
  150. package/vendor/Server/Skills/arkts-library-xts-execution/SKILL.md +491 -0
  151. package/vendor/Server/Skills/arkts-library-xts-execution/references/error-fixing-examples.md +217 -0
  152. package/vendor/Server/Skills/arkts-library-xts-execution/scripts/build.ps1 +93 -0
  153. package/vendor/Server/Skills/arkts-library-xts-execution/scripts/code-linter.cjs +433 -0
  154. package/vendor/Server/Skills/arkts-library-xts-execution/scripts/migrate.cjs +851 -0
  155. package/vendor/Server/Skills/arkts-library-xts-execution/scripts/ohpm-switch.cjs +789 -0
  156. package/vendor/Server/Skills/flutter-code-check/SKILL.md +299 -0
  157. package/vendor/Server/Skills/flutter-code-check/assets/OUTPUT_TEMPLATE.md +312 -0
  158. package/vendor/Server/Skills/flutter-code-check/references/CHECKLIST.md +190 -0
  159. package/vendor/Server/Skills/flutter-code-check/references/PLATFORMS.md +134 -0
  160. package/vendor/Server/Skills/flutter-code-check/scripts/validate-skill.cjs +259 -0
  161. package/vendor/Server/Skills/flutter-interface/README.md +75 -0
  162. package/vendor/Server/Skills/flutter-interface/SKILL.md +291 -0
  163. package/vendor/Server/Skills/flutter-interface/references/EXAMPLES.md +336 -0
  164. package/vendor/Server/Skills/flutter-interface/references/GIT_CLONE_GUIDE.md +190 -0
  165. package/vendor/Server/Skills/flutter-interface/references/SCRIPT_REFERENCE.md +258 -0
  166. package/vendor/Server/Skills/flutter-interface/references/TEMPLATE.md +254 -0
  167. package/vendor/Server/Skills/flutter-library-consistency-check/SKILL.md +518 -0
  168. package/vendor/Server/Skills/flutter-library-consistency-check/references/CHECKLIST.md +382 -0
  169. package/vendor/Server/Skills/flutter-library-consistency-check/references/FUNCTION_COMPARISON_GUIDE.md +342 -0
  170. package/vendor/Server/Skills/flutter-library-consistency-check/references/PLATFORM_LIMITATION_GUIDE.md +71 -0
  171. package/vendor/Server/Skills/flutter-library-documentation-quality-check/SKILL.md +519 -0
  172. package/vendor/Server/Skills/flutter-library-documentation-quality-check/references/CHECKLIST.md +407 -0
  173. package/vendor/Server/Skills/flutter-library-memory-leak-check/SKILL.md +653 -0
  174. package/vendor/Server/Skills/flutter-library-memory-leak-check/references/CHECKLIST.md +397 -0
  175. package/vendor/Server/Skills/flutter-library-stability-check/SKILL.md +745 -0
  176. package/vendor/Server/Skills/flutter-library-stability-check/references/CHECKLIST.md +721 -0
  177. package/vendor/Server/Skills/flutter-library-test-coverage-check/SKILL.md +414 -0
  178. package/vendor/Server/Skills/flutter-library-test-coverage-check/assets/REPORT_TEMPLATE.md +150 -0
  179. package/vendor/Server/Skills/flutter-library-test-coverage-check/references/CHECKLIST.md +304 -0
  180. package/vendor/Server/Skills/flutter-library-test-coverage-check/references/SCORING_RULES.md +265 -0
  181. package/vendor/Server/Skills/flutter-library-test-coverage-check/references/SCRIPT_USAGE.md +286 -0
  182. package/vendor/Server/Skills/knowledge-import/SKILL.md +383 -0
  183. package/vendor/Server/Skills/knowledge-import/references/MCP_TOOL_USAGE.md +165 -0
  184. package/vendor/Server/Skills/knowledge-import/references/SKILL_LOCATOR_GUIDE.md +91 -0
  185. package/vendor/Server/Skills/knowledge-import/references/SKILL_OPTIMIZATION_GUIDE.md +127 -0
  186. package/vendor/Server/Skills/ohos-lib-pr-push/SKILL.md +301 -0
  187. package/vendor/Server/Skills/ohos-lib-pr-push/assets/PR_ISSUE_TEMPLATE.md +105 -0
  188. package/vendor/Server/Skills/ohos-lib-pr-push/references/GITCODE_API.md +127 -0
  189. package/vendor/Server/Skills/ohos-lib-pr-push/scripts/gitcode-api.cjs +208 -0
  190. package/vendor/Server/Skills/rn-code-check/SKILL.md +321 -0
  191. package/vendor/Server/Skills/rn-code-check/references/API-GUIDE.md +235 -0
  192. package/vendor/Server/Skills/rn-code-check/references/CHECKLIST.md +189 -0
  193. package/vendor/Server/Skills/rn-code-check/references/REPORT-TEMPLATE.md +247 -0
  194. package/vendor/Server/Skills/rn-lib-add-example/SKILL.md +198 -0
  195. package/vendor/Server/Skills/rn-lib-add-example/references/APP_RENAME_GUIDE.md +40 -0
  196. package/vendor/Server/Skills/rn-lib-add-example/references/SHELL_ADAPTATION_CHECKLIST.md +78 -0
  197. package/vendor/Server/Skills/rn-lib-add-example/references/TEMPLATE_REPO_GUIDE.md +70 -0
  198. package/vendor/Server/Skills/rn-lib-add-example/references/VERIFICATION_GUIDE.md +47 -0
  199. package/vendor/Server/Skills/rn-lib-add-example/scripts/create-example.cjs +252 -0
  200. package/vendor/Server/Skills/rn-lib-update-doc/SKILL.md +176 -0
  201. package/vendor/Server/Skills/rn-lib-update-doc/config.json +5 -0
  202. package/vendor/Server/Skills/rn-lib-update-doc/references/changelog-template.md +35 -0
  203. package/vendor/Server/Skills/rn-lib-update-doc/references/format-diff.md +137 -0
  204. package/vendor/Server/Skills/rn-lib-update-doc/references/link-registry.json +33 -0
  205. package/vendor/Server/Skills/rn-lib-update-doc/references/model-0.4.2-overview.md +40 -0
  206. package/vendor/Server/Skills/rn-lib-update-doc/references/model-0.4.2.md +429 -0
  207. package/vendor/Server/Skills/rn-lib-update-doc/scripts/detect-readme-format.cjs +105 -0
  208. package/vendor/Server/Skills/rn-lib-update-doc/scripts/find-usage-doc.cjs +90 -0
  209. package/vendor/Server/Skills/rn-lib-update-doc/scripts/link-verify.cjs +213 -0
  210. package/vendor/Server/Skills/rn-lib-update-doc/scripts/normalize-changelog.cjs +73 -0
  211. package/vendor/Server/Skills/rn-lib-update-doc/scripts/normalize-package-meta.cjs +258 -0
  212. package/vendor/Server/Skills/rn-lib-update-doc/scripts/normalize-readme-links.cjs +341 -0
  213. package/vendor/Server/Skills/rn-lib-update-doc/scripts/resolve-usage-docs.cjs +67 -0
  214. package/vendor/Server/Skills/rn-library-consistency-check/SKILL.md +299 -0
  215. package/vendor/Server/Skills/rn-library-consistency-check/assets/REPORT_TEMPLATE.md +293 -0
  216. package/vendor/Server/Skills/rn-library-consistency-check/references/ARKTS_COMPONENT_CHECK_GUIDE.md +857 -0
  217. package/vendor/Server/Skills/rn-library-consistency-check/references/ARKTS_TURBOMODULE_CHECK_GUIDE.md +856 -0
  218. package/vendor/Server/Skills/rn-library-consistency-check/references/CHECKLIST.md +157 -0
  219. package/vendor/Server/Skills/rn-library-consistency-check/references/CPP_COMPONENT_CHECK_GUIDE.md +801 -0
  220. package/vendor/Server/Skills/rn-library-consistency-check/references/CPP_TURBOMODULE_CHECK_GUIDE.md +684 -0
  221. package/vendor/Server/Skills/rn-library-consistency-check/references/FUNCTION_COMPARISON_GUIDE.md +233 -0
  222. package/vendor/Server/Skills/rn-library-consistency-check/references/NATIVE_COMPONENT_IDENTIFICATION.md +1373 -0
  223. package/vendor/Server/Skills/rn-library-consistency-check/references/SCORING_STANDARD.md +220 -0
  224. package/vendor/Server/Skills/rn-library-consistency-check/scripts/validate-skill.py +245 -0
  225. package/vendor/Server/Skills/rn-library-documentation-quality-check/SKILL.md +263 -0
  226. package/vendor/Server/Skills/rn-library-documentation-quality-check/assets/MODEL.md +414 -0
  227. package/vendor/Server/Skills/rn-library-documentation-quality-check/assets/MODEL_en.md +413 -0
  228. package/vendor/Server/Skills/rn-library-documentation-quality-check/assets/REPORT_TEMPLATE.md +311 -0
  229. package/vendor/Server/Skills/rn-library-documentation-quality-check/references/CHECK_CHECKLIST.md +355 -0
  230. package/vendor/Server/Skills/rn-library-documentation-quality-check/references/CROSS_VALIDATION_GUIDE.md +115 -0
  231. package/vendor/Server/Skills/rn-library-documentation-quality-check/references/DOC_COLLECTION_GUIDE.md +139 -0
  232. package/vendor/Server/Skills/rn-library-documentation-quality-check/references/EXAMPLES.md +586 -0
  233. package/vendor/Server/Skills/rn-library-documentation-quality-check/references/GOTCHAS.md +57 -0
  234. package/vendor/Server/Skills/rn-library-documentation-quality-check/scripts/validate-skill.py +259 -0
  235. package/vendor/Server/Skills/rn-library-interface-analyzer/SKILL.md +301 -0
  236. package/vendor/Server/Skills/rn-library-interface-analyzer/assets/REPORT_TEMPLATE.md +148 -0
  237. package/vendor/Server/Skills/rn-library-interface-analyzer/references/DOC_ANNOTATION_GUIDE.md +118 -0
  238. package/vendor/Server/Skills/rn-library-interface-analyzer/references/SCRIPT_USAGE_GUIDE.md +168 -0
  239. package/vendor/Server/Skills/rn-library-interface-analyzer/references/URL_PARSING_RULES.md +176 -0
  240. package/vendor/Server/Skills/rn-library-issue-generalizer/SKILL.md +274 -0
  241. package/vendor/Server/Skills/rn-library-issue-generalizer/assets/case-template.md +45 -0
  242. package/vendor/Server/Skills/rn-library-issue-generalizer/assets/rule-template.md +25 -0
  243. package/vendor/Server/Skills/rn-library-issue-generalizer/references/PR_FETCH_GUIDE.md +61 -0
  244. package/vendor/Server/Skills/rn-library-issue-generalizer/references/RULE_TEMPLATE_GUIDE.md +165 -0
  245. package/vendor/Server/Skills/rn-library-issue-generalizer/scripts/fetch-pr-info.py +239 -0
  246. package/vendor/Server/Skills/rn-library-known-issue-check/SKILL.md +263 -0
  247. package/vendor/Server/Skills/rn-library-known-issue-check/assets/REPORT_TEMPLATE.md +96 -0
  248. package/vendor/Server/Skills/rn-library-known-issue-check/references/COMPLIANCE_CHECKLIST.md +58 -0
  249. package/vendor/Server/Skills/rn-library-known-issue-check/references/INSPECTION_GUIDE.md +99 -0
  250. package/vendor/Server/Skills/rn-library-known-issue-check/references/PRESCREEN_GUIDE.md +64 -0
  251. package/vendor/Server/Skills/rn-library-known-issue-check/references/SOURCE_PREP_GUIDE.md +75 -0
  252. package/vendor/Server/Skills/rn-library-known-issue-check/scripts/validate-known-issue-report.py +164 -0
  253. package/vendor/Server/Skills/rn-library-memory-leak-check/SKILL.md +339 -0
  254. package/vendor/Server/Skills/rn-library-memory-leak-check/assets/REPORT_TEMPLATE.md +83 -0
  255. package/vendor/Server/Skills/rn-library-memory-leak-check/references/CHECKLIST.md +859 -0
  256. package/vendor/Server/Skills/rn-library-memory-leak-check/references/HARMONY_CODE_PATTERNS.md +122 -0
  257. package/vendor/Server/Skills/rn-library-memory-leak-check/scripts/scan_harmony_code.py +279 -0
  258. package/vendor/Server/Skills/rn-library-stability-check/SKILL.md +273 -0
  259. package/vendor/Server/Skills/rn-library-stability-check/assets/REPORT_TEMPLATE.md +129 -0
  260. package/vendor/Server/Skills/rn-library-stability-check/references/CHECKLIST.md +581 -0
  261. package/vendor/Server/Skills/rn-library-stability-check/references/SCORING_RULES.md +138 -0
  262. package/vendor/Server/Skills/rn-library-stability-check/scripts/scan-harmony-code.py +168 -0
  263. package/vendor/Server/Skills/rn-library-test-coverage-check/SKILL.md +506 -0
  264. package/vendor/Server/Skills/rn-library-test-coverage-check/references/CHECKLIST.md +280 -0
  265. package/vendor/Server/Skills/rn-library-test-coverage-check/references/DEMO_LOCATION.md +221 -0
  266. package/vendor/Server/Skills/rn-library-test-coverage-check/references/REPORT_TEMPLATE.md +209 -0
  267. package/vendor/Server/Skills/rn-library-test-coverage-check/references/SCRIPT_USAGE.md +325 -0
  268. package/vendor/Server/Skills/rn-ohos-xts-generator/SKILL.md +279 -0
  269. package/vendor/Server/Skills/rn-ohos-xts-generator/assets/TEST_FILE_TEMPLATES.md +404 -0
  270. package/vendor/Server/Skills/rn-ohos-xts-generator/references/BUILD_TROUBLESHOOTING.md +185 -0
  271. package/vendor/Server/Skills/rn-ohos-xts-generator/references/BUILD_WORKFLOW.md +265 -0
  272. package/vendor/Server/Skills/rn-ohos-xts-generator/references/COMMON_CONFIG.md +189 -0
  273. package/vendor/Server/Skills/rn-ohos-xts-generator/references/CONFIG_GUIDE.md +203 -0
  274. package/vendor/Server/Skills/rn-ohos-xts-generator/references/COVERAGE_ANALYZER.md +147 -0
  275. package/vendor/Server/Skills/rn-ohos-xts-generator/references/DESIGN_DOC_GUIDE.md +148 -0
  276. package/vendor/Server/Skills/rn-ohos-xts-generator/references/GENERATION_FLOW.md +165 -0
  277. package/vendor/Server/Skills/rn-ohos-xts-generator/references/GENERATION_STRATEGY.md +195 -0
  278. package/vendor/Server/Skills/rn-ohos-xts-generator/references/HARMONY_SCANNER.md +249 -0
  279. package/vendor/Server/Skills/rn-ohos-xts-generator/references/JEST_FRAMEWORK.md +235 -0
  280. package/vendor/Server/Skills/rn-ohos-xts-generator/references/PLATFORM_COMPAT.md +161 -0
  281. package/vendor/Server/Skills/rn-ohos-xts-generator/references/RN_TEST_PATTERNS.md +413 -0
  282. package/vendor/Server/Skills/rn-ohos-xts-generator/references/SOURCE_PARSER.md +235 -0
  283. package/vendor/Server/Skills/rn-ohos-xts-generator/references/TEST_CONVENTIONS.md +245 -0
  284. package/vendor/Server/Skills/rn-ohos-xts-generator/references/TROUBLESHOOTING.md +282 -0
  285. package/vendor/Server/Skills/rn-ohos-xts-generator/references/USAGE_GUIDE.md +251 -0
  286. package/vendor/Server/Skills/rnoh-cptf-api-test/SKILL.md +469 -0
  287. package/vendor/Server/Skills/rnoh-cptf-api-test/assets/CPTF_TEST_TEMPLATE.md +310 -0
  288. package/vendor/Server/Skills/rnoh-cptf-api-test/assets/DEMO_PAGE_TEMPLATE.md +303 -0
  289. package/vendor/Server/Skills/rnoh-cptf-api-test/references/CPTF_TEST_GENERATION_GUIDE.md +421 -0
  290. package/vendor/Server/Skills/rnoh-cptf-api-test/references/DEMO_GENERATION_GUIDE.md +358 -0
  291. package/vendor/Server/Skills/rnoh-cptf-api-test/references/QUALITY_CHECKLIST.md +114 -0
  292. package/vendor/Server/Skills/rnoh-cptf-api-test/references/SPEC_PARSING_GUIDE.md +274 -0
  293. package/vendor/Server/Skills/rnoh-cptf-api-test/scripts/validate-rnoh-cptf-api-test.sh +185 -0
  294. package/vendor/Server/Skills/rnoh-cptf-demo-test/SKILL.md +191 -0
  295. package/vendor/Server/Skills/rnoh-cptf-demo-test/assets/TEST_TEMPLATE.md +216 -0
  296. package/vendor/Server/Skills/rnoh-cptf-demo-test/references/CPTF_SETUP.md +107 -0
  297. package/vendor/Server/Skills/rnoh-cptf-demo-test/references/DEMO_ANALYSIS.md +120 -0
  298. package/vendor/Server/Skills/rnoh-cptf-demo-test/scripts/validate-rnoh-cptf-test.sh +108 -0
  299. package/vendor/Server/Skills/rnoh-cptf-test-run/SKILL.md +237 -0
  300. package/vendor/Server/Skills/rnoh-cptf-test-run/references/DEBUG_PLAYBOOK.md +261 -0
  301. package/vendor/Server/Skills/rnoh-cptf-test-run/scripts/validate-run-env.sh +112 -0
  302. package/vendor/Server/Skills/rnoh-lib-code-adapt/SKILL.md +498 -0
  303. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/adapt-checklist.md +270 -0
  304. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/api-migration-checklist.md +164 -0
  305. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/common-compile-errors.md +556 -0
  306. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/deveco-cli-tools.md +459 -0
  307. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/edge-cases.md +65 -0
  308. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/har-tgz-build.md +512 -0
  309. package/vendor/Server/Skills/rnoh-lib-code-adapt/references/version-compat-matrix.md +132 -0
  310. package/vendor/Server/Skills/rnoh-lib-code-adapt/scripts/auto-integrate.sh +424 -0
  311. package/vendor/Server/Skills/rnoh-lib-demo-coverage/SKILL.md +137 -0
  312. package/vendor/Server/Skills/rnoh-lib-demo-create/SKILL.md +306 -0
  313. package/vendor/Server/Skills/rnoh-lib-demo-create/assets/DEMO_PAGE_TEMPLATE.md +485 -0
  314. package/vendor/Server/Skills/rnoh-lib-demo-create/assets/INDEX_TEMPLATE.md +172 -0
  315. package/vendor/Server/Skills/rnoh-lib-demo-create/references/DEMO_CODE_RULES.md +422 -0
  316. package/vendor/Server/Skills/rnoh-lib-demo-create/references/QUALITY_CHECKLIST.md +95 -0
  317. package/vendor/Server/Skills/rnoh-lib-demo-create/references/SOURCE_EXPLORATION.md +169 -0
  318. package/vendor/Server/Skills/rnoh-lib-demo-doc/SKILL.md +554 -0
  319. package/vendor/Server/Skills/rnoh-lib-demo-doc/assets/DEMO_DOC_TEMPLATE.md +106 -0
  320. package/vendor/Server/Skills/rnoh-lib-demo-doc/references/COVERAGE_INCREMENTAL.md +216 -0
  321. package/vendor/Server/Skills/rnoh-lib-demo-doc/references/DEMO_DESIGN_RULES.md +413 -0
  322. package/vendor/Server/Skills/rnoh-lib-demo-doc/references/OUTPUT_FORMAT.md +269 -0
  323. package/vendor/Server/Skills/rnoh-lib-demo-doc/references/QUALITY_CHECKLIST.md +98 -0
  324. package/vendor/Server/Skills/rnoh-lib-func-test/SKILL.md +337 -0
  325. package/vendor/Server/Skills/rnoh-lib-rnt-search/SKILL.md +722 -0
  326. package/vendor/Server/Skills/rnoh-lib-rnt-search/assets/PORT_REPORT_TEMPLATE.md +219 -0
  327. package/vendor/Server/Skills/rnoh-lib-rnt-search/references/DEMO_PORTING_GUIDE.md +345 -0
  328. package/vendor/Server/Skills/rnoh-lib-rnt-search/references/PORT_VERIFICATION.md +269 -0
  329. package/vendor/Server/Skills/rnoh-lib-rnt-search/references/RNT_PROJECT_STRUCTURE.md +173 -0
  330. package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/analyze-demo-deps.cjs +267 -0
  331. package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/detect-rnoh-version.cjs +174 -0
  332. package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/find-rnt-demo.sh +111 -0
  333. package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/port-demo.sh +186 -0
  334. package/vendor/Server/Skills/rnoh-lib-rnt-search/scripts/read-lib-meta.cjs +150 -0
  335. package/vendor/Server/Skills/rnoh-lib-test-align/SKILL.md +296 -0
  336. package/vendor/Server/Skills/rnoh-lib-test-align/references/jest-troubleshooting.md +371 -0
  337. package/vendor/Server/Skills/rnoh-lib-test-align/references/port-test-demo-guide.md +212 -0
  338. package/vendor/Server/Skills/rnoh-lib-test-align/references/runtime-troubleshooting.md +345 -0
  339. package/vendor/Server/Skills/rnoh-lib-test-align/references/unit-test-template.md +223 -0
  340. package/vendor/Server/Skills/rnoh-lib-test-align/scripts/port-test-demo.sh +1053 -0
  341. package/vendor/Server/Skills/rnoh-lib-version-diff/SKILL.md +255 -0
  342. package/vendor/Server/Skills/rnoh-lib-version-diff/references/OHOS_ADAPTATION.md +77 -0
  343. package/vendor/Server/Skills/rnoh-lib-version-diff/references/OHOS_API_LOOKUP.md +224 -0
  344. package/vendor/Server/Skills/rnoh-lib-version-diff/references/script-reference.md +174 -0
  345. package/vendor/Server/Skills/rnoh-lib-version-diff/scripts/detect-upstream-version.js +967 -0
  346. package/vendor/Server/Skills/rnoh-lib-version-diff/scripts/generate-diff.js +1798 -0
  347. package/vendor/Server/Skills/rnoh-lib-version-diff/scripts/package.json +5 -0
  348. package/vendor/Server/Skills/rnoh-lib-version-diff/templates/report-template.md +137 -0
  349. package/vendor/Server/Skills/rnoh-lib-xts-coverage/SKILL.md +145 -0
  350. package/vendor/Server/Skills/skill-generator/SKILL.md +365 -0
  351. package/vendor/Server/Skills/skill-generator/assets/SKILL_TEMPLATE.md +183 -0
  352. package/vendor/Server/Skills/skill-generator/references/COMPLIANCE_CHECKLIST.md +82 -0
  353. package/vendor/Server/Skills/skill-generator/references/KB_QUERY_GUIDE.md +110 -0
  354. package/vendor/Server/Skills/skill-generator/references/MCP_TOOL_DISCOVERY.md +122 -0
  355. package/vendor/Server/Skills/skill-generator/references/SKILL_SPEC.md +121 -0
  356. package/vendor/Server/Skills/skill-generator/scripts/validate-skill.cjs +259 -0
  357. package/vendor/Server/Skills/task-analysis/SKILL.md +234 -0
  358. package/vendor/Server/Skills/task-analysis/assets/OUTPUT_EXAMPLES.md +160 -0
  359. package/vendor/Server/Skills/task-analysis/references/ACCEPTANCE_CRITERIA_GUIDE.md +190 -0
  360. package/vendor/Server/Skills/task-analysis/references/ANALYSIS_SCHEMA.md +224 -0
  361. package/vendor/Server/Skills/task-analysis/references/INTEGRATION_CONTEXT.md +162 -0
  362. package/vendor/Server/Skills/task-analysis/references/LESSONS_LEARNED.md +55 -0
  363. package/vendor/Server/Skills/task-analysis/references/REPLAN_CONTEXT_GUIDE.md +126 -0
  364. package/vendor/Server/Skills/task-analysis/scripts/validate-analysis-output.sh +256 -0
  365. package/vendor/Server/Skills/task-decomposition/SKILL.md +529 -0
  366. package/vendor/Server/Skills/task-decomposition/assets/OUTPUT_EXAMPLES.md +451 -0
  367. package/vendor/Server/Skills/task-decomposition/references/ACCEPTANCE_CRITERIA_GUIDE.md +179 -0
  368. package/vendor/Server/Skills/task-decomposition/references/DEPENDENCY_GRAPH_GUIDE.md +152 -0
  369. package/vendor/Server/Skills/task-decomposition/references/INTEGRATION_CONTEXT.md +175 -0
  370. package/vendor/Server/Skills/task-decomposition/references/REPLAN_CONTEXT_GUIDE.md +195 -0
  371. package/vendor/Server/Skills/task-decomposition/references/TASK_DECOMPOSITION_TEMPLATES.md +226 -0
  372. package/vendor/Server/Skills/task-decomposition/scripts/list-available-skills.cjs +263 -0
  373. package/vendor/Server/Skills/task-decomposition/scripts/skill-blacklist.json +29 -0
  374. package/vendor/Server/Skills/task-decomposition/scripts/validate-decomposition-output.cjs +376 -0
  375. package/vendor/Server/Skills/task-decomposition/scripts/validate-param-consistency.cjs +259 -0
  376. package/vendor/Server/Skills/task-decomposition/scripts/validate-specified-skills.cjs +216 -0
  377. package/vendor/Server/Skills/task-decomposition/scripts/validate-step-graph.cjs +425 -0
  378. package/vendor/Server/Skills/tpc-cpp-check/SKILL.md +427 -0
  379. package/vendor/Server/Skills/tpc-cpp-check/references/CHECKLIST.md +214 -0
  380. package/vendor/Server/Skills/tpc-cpp-check/references/HPKBUILD_GUIDE.md +235 -0
  381. package/vendor/Server/Skills/tpc-cpp-check/references/REPORT_TEMPLATE.md +250 -0
  382. package/vendor/Server/TestCheck/TestCheck.js +775 -0
  383. package/vendor/Server/TestCheck/index.js +11 -0
  384. package/vendor/Server/library/McpToolGuide.js +280 -0
  385. package/vendor/Server/library/StatsService.js +127 -0
  386. package/vendor/Server/library/cstTime.js +16 -0
  387. package/vendor/Server/package.json +17 -0
  388. package/vendor/VERSION +3 -0
  389. package/workflows/pr-check.mjs +106 -0
package/lib/orch.js ADDED
@@ -0,0 +1,427 @@
1
+ /**
2
+ * orch.js —— 编排层命令(Orchestrator 多步骤依赖)
3
+ *
4
+ * 命令:
5
+ * orch run <task-def.json> 加载任务定义 + 启动编排,阻塞到终态
6
+ * orch load <task-def.json> 仅加载任务定义,落盘 orchestration.json 后返回
7
+ * orch start <taskId> 从磁盘恢复 LOADED 状态并启动,阻塞到终态
8
+ * orch progress <taskId> [--loop N] 查询编排进度(磁盘直读 orchestration.json)
9
+ * orch abort|pause|resume <taskId> 控制编排(尽力而为)
10
+ * orch tasks 列出编排任务(仅统计有 orchestration.json 的任务)
11
+ *
12
+ * 与 3rdloop step 的区别:
13
+ * - step 是单步 FlexRunner 直连,不经 Orchestrator
14
+ * - orch 走多步骤依赖编排(loadTask → start),对应 HTTP /api/orchestrator/load|start
15
+ */
16
+
17
+ import fs from 'node:fs';
18
+ import { EXIT } from './exit-codes.js';
19
+
20
+ /**
21
+ * 3rdloop orch 命令二段分发。
22
+ * @returns {Promise<number>}
23
+ */
24
+ export async function cmdOrch({ flags, rest, projectRoot, dataDir, skillDir, jsonMode, quiet, verbose, out, u }) {
25
+ const fRest = flags.rest || [];
26
+ const sub = fRest[0];
27
+ const subRest = fRest.slice(1);
28
+ switch (sub) {
29
+ case 'run':
30
+ return cmdOrchRun({ flags, rest: subRest, projectRoot, dataDir, skillDir, jsonMode, quiet, verbose, out, u });
31
+ case 'load':
32
+ return cmdOrchLoad({ flags, rest: subRest, projectRoot, dataDir, skillDir, jsonMode, quiet, verbose, out, u });
33
+ case 'start':
34
+ return cmdOrchStart({ flags, rest: subRest, projectRoot, dataDir, skillDir, jsonMode, quiet, verbose, out, u });
35
+ case 'progress':
36
+ return cmdOrchProgress({ flags, rest: subRest, dataDir, jsonMode, out, u });
37
+ case 'abort':
38
+ case 'pause':
39
+ case 'resume':
40
+ return cmdOrchControl(sub, { flags, rest: subRest, projectRoot, dataDir, skillDir, jsonMode, out, u });
41
+ case 'tasks':
42
+ return cmdOrchTasks({ flags, rest: subRest, dataDir, jsonMode, out, u });
43
+ default:
44
+ process.stderr.write(`缺少或未知的 orch 子命令: ${sub || '(空)'}\n`);
45
+ process.stderr.write('用法: 3rdloop orch run|load|start|progress|abort|pause|resume|tasks ...\n');
46
+ return EXIT.ERROR;
47
+ }
48
+ }
49
+
50
+ // ─── 位置参数提取 ──────────────────────────────────────────────────────────
51
+
52
+ /** orch 子命令专用 flags(带值),从参数中剔除以提取位置参数。 */
53
+ const ORCH_FLAG_NAMES = ['task-id', 'loop', 'task-dir', 'max-retries', 'input-report'];
54
+
55
+ /**
56
+ * 从参数数组提取位置参数(task-def 文件 / taskId)。
57
+ * 结构与 step.js 的 _positionalArgs 对齐。
58
+ */
59
+ function _positionalArgs(args) {
60
+ const out = [];
61
+ for (let i = 0; i < args.length; i++) {
62
+ const arg = args[i];
63
+ if (arg.startsWith('--')) {
64
+ const name = arg.slice(2);
65
+ if (ORCH_FLAG_NAMES.includes(name)) i++; // 跳过该 flag 的值
66
+ continue;
67
+ }
68
+ out.push(arg);
69
+ }
70
+ return out;
71
+ }
72
+
73
+ function _parseIntFlag(flags, name, def) {
74
+ const idx = flags.rest.indexOf(`--${name}`);
75
+ const raw = idx !== -1 ? flags.rest[idx + 1] : undefined;
76
+ const n = parseInt(raw, 10);
77
+ return Number.isFinite(n) ? n : def;
78
+ }
79
+
80
+ function _stringFlag(flags, name) {
81
+ const idx = flags.rest.indexOf(`--${name}`);
82
+ return idx !== -1 ? flags.rest[idx + 1] : undefined;
83
+ }
84
+
85
+ /** 惰性加载 runner(避免未用到时启动完整引擎)。 */
86
+ function _runner() {
87
+ return import('./runner.js');
88
+ }
89
+
90
+ /** 惰性加载 queries。 */
91
+ function _queries() {
92
+ return import('./queries.js');
93
+ }
94
+
95
+ /** 读取并校验 task-def JSON 文件。 */
96
+ function _readTaskDef(file) {
97
+ if (!file) {
98
+ throw new Error('缺少任务定义文件。用法: 3rdloop orch load <task-def.json>');
99
+ }
100
+ if (!fs.existsSync(file)) {
101
+ throw new Error(`任务定义文件不存在: ${file}`);
102
+ }
103
+ let taskDef;
104
+ try {
105
+ taskDef = JSON.parse(fs.readFileSync(file, 'utf8'));
106
+ } catch (err) {
107
+ throw new Error(`任务定义文件解析失败: ${file}, ${err.message}`);
108
+ }
109
+ if (!taskDef.taskId) {
110
+ throw new Error('task-def 中缺少 taskId');
111
+ }
112
+ if (!Array.isArray(taskDef.steps) || taskDef.steps.length === 0) {
113
+ throw new Error('task-def 中 steps 为必填项且不能为空');
114
+ }
115
+ return taskDef;
116
+ }
117
+
118
+ // ─── run / load ─────────────────────────────────────────────────────────────
119
+
120
+ /** 加载任务定义 + 启动编排,阻塞到终态(推荐入口)。 */
121
+ async function cmdOrchRun({ flags, rest, projectRoot, dataDir, skillDir, jsonMode, quiet, verbose, out, u }) {
122
+ const positional = _positionalArgs(rest);
123
+ const taskDefFile = positional[0];
124
+ let taskDef;
125
+ try {
126
+ taskDef = _readTaskDef(taskDefFile);
127
+ } catch (err) {
128
+ if (jsonMode) out({ ok: false, error: err.message });
129
+ else process.stderr.write(`${err.message}\n`);
130
+ return EXIT.ERROR;
131
+ }
132
+
133
+ if (!quiet && !jsonMode) {
134
+ u.logProgress(`${u.C.cyan}编排任务已提交: ${u.C.reset}${u.C.bold}${taskDef.taskId}${u.C.reset}`);
135
+ u.logProgress(` 任务定义: ${taskDefFile}`);
136
+ u.logProgress(` 步骤数: ${taskDef.steps.length}`);
137
+ if (taskDef.steps.length <= 8) {
138
+ for (const s of taskDef.steps) {
139
+ u.logProgress(` step ${s.stepId}: ${String(s.taskDescription || '').slice(0, 60)}${s.dependId ? ` [依赖 ${s.dependId}]` : ''}`);
140
+ }
141
+ }
142
+ }
143
+
144
+ const r = await _runner();
145
+ const ctx = r.createRunContext({ projectRoot, dataDir, skillDir, cliType: 'opencode', verbose });
146
+
147
+ // 挂载 opencode 生命周期
148
+ const oc = await _ensureOpcodene(ctx, u, jsonMode, out);
149
+ if (!oc) return EXIT.ERROR;
150
+
151
+ // 信号处理
152
+ let interrupted = false;
153
+ const exitHandler = async (sig) => {
154
+ if (interrupted) return;
155
+ interrupted = true;
156
+ try { await r.orchControl(ctx, taskDef.taskId, 'abort'); } catch { /* 忽略 */ }
157
+ await oc.stop();
158
+ process.stderr.write(`\n已中止(${sig})\n`);
159
+ process.exit(sig === 'SIGINT' ? EXIT.SIGINT : EXIT.SIGTERM);
160
+ };
161
+ process.once('SIGINT', () => exitHandler('SIGINT'));
162
+ process.once('SIGTERM', () => exitHandler('SIGTERM'));
163
+
164
+ const started = Date.now();
165
+ try {
166
+ // load + start(阻塞)
167
+ await r.orchLoad(ctx, taskDef);
168
+ const result = await _startAndRender(ctx, r, taskDef.taskId, { jsonMode, quiet, verbose, out, u, started, dataDir });
169
+ return result.passed ? EXIT.OK : EXIT.TASK_FAILED;
170
+ } catch (err) {
171
+ await oc.stop();
172
+ if (jsonMode) out({ ok: false, error: err.message, taskId: taskDef.taskId });
173
+ else process.stderr.write(`\n编排失败: ${err.message}\n`);
174
+ return EXIT.ERROR;
175
+ }
176
+ }
177
+
178
+ /** 仅加载任务定义,落盘 orchestration.json 后返回。 */
179
+ async function cmdOrchLoad({ flags, rest, projectRoot, dataDir, skillDir, jsonMode, quiet, verbose, out, u }) {
180
+ const positional = _positionalArgs(rest);
181
+ const taskDefFile = positional[0];
182
+ let taskDef;
183
+ try {
184
+ taskDef = _readTaskDef(taskDefFile);
185
+ } catch (err) {
186
+ if (jsonMode) out({ ok: false, error: err.message });
187
+ else process.stderr.write(`${err.message}\n`);
188
+ return EXIT.ERROR;
189
+ }
190
+
191
+ const r = await _runner();
192
+ const ctx = r.createRunContext({ projectRoot, dataDir, skillDir, verbose });
193
+ try {
194
+ const res = await r.orchLoad(ctx, taskDef);
195
+ if (!quiet) {
196
+ u.logProgress(`编排任务已加载: ${taskDef.taskId}(步骤 ${taskDef.steps.length})`);
197
+ }
198
+ if (jsonMode) {
199
+ out({ ok: true, taskId: taskDef.taskId, status: 'loaded', stepCount: taskDef.steps.length });
200
+ } else {
201
+ process.stdout.write(`${taskDef.taskId}\n`);
202
+ }
203
+ return EXIT.OK;
204
+ } catch (err) {
205
+ if (jsonMode) out({ ok: false, error: err.message });
206
+ else process.stderr.write(`加载失败: ${err.message}\n`);
207
+ return EXIT.ERROR;
208
+ }
209
+ }
210
+
211
+ // ─── start(从磁盘恢复) ───────────────────────────────────────────────────
212
+
213
+ /** 从磁盘恢复 LOADED 状态并启动编排,阻塞到终态。 */
214
+ async function cmdOrchStart({ flags, rest, projectRoot, dataDir, skillDir, jsonMode, quiet, verbose, out, u }) {
215
+ const positional = _positionalArgs(rest);
216
+ const taskId = positional[0];
217
+ if (!taskId) {
218
+ if (jsonMode) out({ ok: false, error: '缺少 taskId。用法: 3rdloop orch start <taskId>' });
219
+ else process.stderr.write('缺少 taskId。用法: 3rdloop orch start <taskId>\n');
220
+ return EXIT.ERROR;
221
+ }
222
+
223
+ const r = await _runner();
224
+ const ctx = r.createRunContext({ projectRoot, dataDir, skillDir, cliType: 'opencode', verbose });
225
+ const oc = await _ensureOpcodene(ctx, u, jsonMode, out);
226
+ if (!oc) return EXIT.ERROR;
227
+
228
+ let interrupted = false;
229
+ const exitHandler = async (sig) => {
230
+ if (interrupted) return;
231
+ interrupted = true;
232
+ try { await r.orchControl(ctx, taskId, 'abort'); } catch { /* 忽略 */ }
233
+ await oc.stop();
234
+ process.stderr.write(`\n已中止(${sig})\n`);
235
+ process.exit(sig === 'SIGINT' ? EXIT.SIGINT : EXIT.SIGTERM);
236
+ };
237
+ process.once('SIGINT', () => exitHandler('SIGINT'));
238
+ process.once('SIGTERM', () => exitHandler('SIGTERM'));
239
+
240
+ const started = Date.now();
241
+ try {
242
+ const result = await _startAndRender(ctx, r, taskId, { jsonMode, quiet, verbose, out, u, started, dataDir });
243
+ return result.passed ? EXIT.OK : EXIT.TASK_FAILED;
244
+ } catch (err) {
245
+ await oc.stop();
246
+ if (jsonMode) out({ ok: false, error: err.message, taskId });
247
+ else process.stderr.write(`\n编排启动失败: ${err.message}\n`);
248
+ return EXIT.ERROR;
249
+ }
250
+ }
251
+
252
+ /** 调用 orchStart 并渲染进度(run / start 共用)。 */
253
+ async function _startAndRender(ctx, r, taskId, { jsonMode, quiet, verbose, out, u, started, dataDir }) {
254
+ const q = await _queries();
255
+ let prev = null;
256
+ let finished = false;
257
+
258
+ // 后台轮询编排磁盘快照(每次步骤状态变化 Orchestrator 都会 _persistState),
259
+ // diff 渲染中间进度。只有非 --json 模式才打印,避免污染 stdout。
260
+ // 首帧只记录不打印(prev=null 时不输出),避免启动失败(如状态非 LOADED)
261
+ // 时打印误导性的概览行;最终变化由 orchStart 返回后一次性补齐。
262
+ const poll = (async () => {
263
+ if (jsonMode) return;
264
+ while (!finished) {
265
+ const state = q.readOrchestrationState(dataDir, taskId);
266
+ if (state && prev) {
267
+ const lines = u.diffOrchestration(prev, state, { verbose });
268
+ for (const line of lines) u.logProgress(line);
269
+ }
270
+ if (state) prev = state;
271
+ await new Promise(res => setTimeout(res, 3000));
272
+ }
273
+ })();
274
+
275
+ try {
276
+ const result = await r.orchStart(ctx, taskId);
277
+ finished = true;
278
+ await poll;
279
+
280
+ // 补齐首帧到终态的变化行
281
+ if (!jsonMode) {
282
+ const lines = u.diffOrchestration(prev, result.progress, { verbose });
283
+ for (const line of lines) u.logProgress(line);
284
+ }
285
+
286
+ const elapsedSec = ((Date.now() - started) / 1000).toFixed(0);
287
+
288
+ if (jsonMode) {
289
+ out({
290
+ ok: result.passed,
291
+ taskId,
292
+ status: result.status,
293
+ passed: result.passed,
294
+ stats: result.progress.stats || null,
295
+ steps: result.progress.steps || [],
296
+ error: result.error,
297
+ resultPaths: result.resultPaths || [],
298
+ elapsedSec: Number(elapsedSec),
299
+ });
300
+ } else {
301
+ u.logProgress(`\n${result.passed ? u.C.green : u.C.red}编排完成: ${u.C.reset}${result.status}`);
302
+ u.logProgress(` 耗时: ${elapsedSec}s`);
303
+ const stats = result.progress.stats || {};
304
+ u.logProgress(` 步骤: 完成 ${stats.completed || 0} / 失败 ${stats.failed || 0}`);
305
+ if (result.error) u.logProgress(` 错误: ${result.error}`);
306
+ for (const item of result.resultPaths || []) {
307
+ u.logProgress(` 产物 ${item.stepId}: ${item.resultPath}`);
308
+ }
309
+ }
310
+ return result;
311
+ } catch (err) {
312
+ finished = true;
313
+ throw err;
314
+ }
315
+ }
316
+
317
+ // ─── progress ───────────────────────────────────────────────────────────────
318
+
319
+ /** 查询编排进度(磁盘直读 orchestration.json)。 */
320
+ async function cmdOrchProgress({ flags, rest, dataDir, jsonMode, out, u }) {
321
+ const positional = _positionalArgs(rest);
322
+ const taskId = positional[0];
323
+ if (!taskId) {
324
+ if (jsonMode) out({ ok: false, error: '缺少 taskId。用法: 3rdloop orch progress <taskId> [--loop N]' });
325
+ else process.stderr.write('缺少 taskId。用法: 3rdloop orch progress <taskId> [--loop N]\n');
326
+ return EXIT.ERROR;
327
+ }
328
+
329
+ const loop = _parseIntFlag(flags, 'loop', undefined);
330
+ const q = await _queries();
331
+ const state = q.readOrchestrationState(dataDir, taskId, loop);
332
+
333
+ if (!state) {
334
+ if (jsonMode) out({ ok: false, error: '编排任务不存在', taskId, loop: loop ?? null });
335
+ else process.stderr.write(`编排任务不存在: ${taskId}${loop != null ? ` (loop=${loop})` : ''}\n`);
336
+ return EXIT.ERROR;
337
+ }
338
+
339
+ const lines = u.diffOrchestration(null, state, { verbose: false });
340
+ if (jsonMode) {
341
+ // 结构化输出:保持与 HTTP GET /orchestrator/progress 一致形态
342
+ out({ ok: true, taskId, status: state.status, loop: loop ?? null, progress: state });
343
+ return EXIT.OK;
344
+ }
345
+ for (const line of lines) u.logProgress(line);
346
+ // 追加步骤明细
347
+ const steps = state.steps || [];
348
+ for (const s of steps) {
349
+ const icon = s.status === 'completed' ? '✓' : (s.status === 'failed' ? '✗' : (s.status === 'running' ? '▶' : '·'));
350
+ u.logProgress(` ${icon} step ${String(s.stepId).padEnd(4)} ${(s.status || '').padEnd(10)} ${String(s.taskDescription || '').slice(0, 50)}`);
351
+ }
352
+ return EXIT.OK;
353
+ }
354
+
355
+ // ─── 控制 ───────────────────────────────────────────────────────────────────
356
+
357
+ /** 终止 / 暂停 / 恢复编排(尽力而为,跨进程无法中断另一进程运行中的任务)。 */
358
+ async function cmdOrchControl(action, { flags, rest, projectRoot, dataDir, skillDir, jsonMode, out, u }) {
359
+ const positional = _positionalArgs(rest);
360
+ const taskId = positional[0];
361
+ if (!taskId) {
362
+ if (jsonMode) out({ ok: false, error: `缺少 taskId。用法: 3rdloop orch ${action} <taskId>` });
363
+ else process.stderr.write(`缺少 taskId。用法: 3rdloop orch ${action} <taskId>\n`);
364
+ return EXIT.ERROR;
365
+ }
366
+
367
+ const r = await _runner();
368
+ const ctx = r.createRunContext({ projectRoot, dataDir, skillDir, verbose: false });
369
+ const result = await r.orchControl(ctx, taskId, action);
370
+
371
+ if (jsonMode) {
372
+ out({ ok: result.ok, taskId, action, status: result.status, error: result.error });
373
+ } else {
374
+ if (result.ok) {
375
+ process.stderr.write(`编排已${action === 'abort' ? '终止' : (action === 'pause' ? '暂停' : '恢复')}: ${taskId}\n`);
376
+ } else {
377
+ process.stderr.write(`${result.error || `操作 ${action} 未生效(可能未在运行中): ${taskId}`}\n`);
378
+ }
379
+ }
380
+ return result.ok ? EXIT.OK : EXIT.ERROR;
381
+ }
382
+
383
+ // ─── tasks ──────────────────────────────────────────────────────────────────
384
+
385
+ /** 列出编排任务。 */
386
+ async function cmdOrchTasks({ flags, rest, dataDir, jsonMode, out, u }) {
387
+ const q = await _queries();
388
+ const tasks = q.listOrchestrationTasks(dataDir);
389
+
390
+ if (jsonMode) {
391
+ out({ total: tasks.length, tasks });
392
+ return EXIT.OK;
393
+ }
394
+
395
+ if (tasks.length === 0) {
396
+ process.stdout.write('(暂无编排任务)\n');
397
+ return EXIT.OK;
398
+ }
399
+
400
+ process.stdout.write(`共 ${tasks.length} 个编排任务:\n`);
401
+ for (const t of tasks) {
402
+ const icon = t.status === 'completed' ? u.C.green + '✓' + u.C.reset
403
+ : (t.status === 'running') ? u.C.cyan + '▶' + u.C.reset
404
+ : u.C.red + '✗' + u.C.reset;
405
+ const stepInfo = `步骤 ${t.stepCompleted}/${t.stepCount}`;
406
+ process.stdout.write(` ${icon} ${t.taskId.padEnd(40)} ${(t.status || '').padEnd(10)} ${stepInfo.padEnd(12)} ${t.startTime || ''}\n`);
407
+ }
408
+ return EXIT.OK;
409
+ }
410
+
411
+ // ─── 工具 ──────────────────────────────────────────────────────────────────
412
+
413
+ /** 确保 opencode serve 运行(run/start 需要执行环境;load/progress 不需要)。 */
414
+ async function _ensureOpcodene(ctx, u, jsonMode, out) {
415
+ const { OpencodeManager } = await import('./opencode.js');
416
+ const oc = new OpencodeManager({ projectRoot: ctx.projectRoot });
417
+ const ocHealth = await oc.ensureRunning();
418
+ if (!ocHealth.ok) {
419
+ if (jsonMode) out({ ok: false, error: ocHealth.message });
420
+ process.stderr.write(`\n错误: ${ocHealth.message}\n`);
421
+ process.stderr.write('请先启动 opencode serve(项目上一级目录: opencode serve)后重试。\n');
422
+ await oc.stop();
423
+ return null;
424
+ }
425
+ if (ocHealth.spawned) process.stderr.write(`${ocHealth.message}\n`);
426
+ return oc;
427
+ }
package/lib/queries.js ADDED
@@ -0,0 +1,264 @@
1
+ /**
2
+ * queries.js —— 任务状态查询(磁盘直读)
3
+ *
4
+ * 与 runner.js 的区分:
5
+ * runner.js 负责"执行"(提交/运行/中止)
6
+ * queries.js 负责"只读查询"(progress/list/result),不实例化完整引擎,
7
+ * 直接从磁盘读 db/task/{taskId}/ 下的状态文件。
8
+ *
9
+ * 好处:
10
+ * - 查询命令(progress/list/result)不依赖 opencode / LLM / 内存实例,
11
+ * 即使引擎未运行也能查询历史任务。
12
+ * - 与 LoopEngineController.list() 的数据来源一致(loop.json 优先,其次 orchestration.json)。
13
+ */
14
+
15
+ import fs from 'node:fs';
16
+ import path from 'node:path';
17
+
18
+ /**
19
+ * 计算 taskRoot 目录绝对路径。
20
+ * @param {string} dataDir - 数据目录(~/.3lib/<project>/db)
21
+ * @returns {string}
22
+ */
23
+ export function taskDir(dataDir) {
24
+ return path.join(dataDir, 'task');
25
+ }
26
+
27
+ /**
28
+ * 读取单个任务快照(loop.json 优先,其次 orchestration.json)。
29
+ * @returns {object|null}
30
+ */
31
+ export function readTaskState(dataDir, taskId) {
32
+ if (!taskId) return null;
33
+ const taskPath = path.join(taskDir(dataDir), taskId);
34
+ if (!fs.existsSync(taskPath)) return null;
35
+
36
+ const candidates = ['loop.json', 'orchestration.json'];
37
+ for (const file of candidates) {
38
+ const full = path.join(taskPath, file);
39
+ if (fs.existsSync(full)) {
40
+ try {
41
+ const data = JSON.parse(fs.readFileSync(full, 'utf8'));
42
+ if (data) return data;
43
+ } catch { /* 尝试下一个文件 */ }
44
+ }
45
+ }
46
+ return null;
47
+ }
48
+
49
+ /**
50
+ * 列出所有任务快照(按 startTime 降序)。
51
+ *
52
+ * @param {object} opts
53
+ * @param {string} [opts.status] - 按状态过滤
54
+ * @param {number} [opts.limit] - 数量上限
55
+ * @param {string} [opts.olderThan] - 只保留早于该时长的任务(如 '7d')
56
+ * @returns {object[]}
57
+ */
58
+ export function listTasks(dataDir, opts = {}) {
59
+ const tdir = taskDir(dataDir);
60
+ if (!fs.existsSync(tdir)) return [];
61
+
62
+ const entries = fs.readdirSync(tdir, { withFileTypes: true });
63
+ const tasks = [];
64
+
65
+ for (const entry of entries) {
66
+ if (!entry.isDirectory()) continue;
67
+ if (!/^task_/.test(entry.name) && !/^[a-zA-Z0-9_-]{6,}/.test(entry.name)) {
68
+ // 仅接受像 taskId 的目录名,避免混入杂项目录
69
+ }
70
+ const state = readTaskState(dataDir, entry.name);
71
+ if (!state) continue;
72
+
73
+ if (opts.status) {
74
+ const want = String(opts.status).toLowerCase();
75
+ // 兼容别名:running / active → 任一进行中状态(引擎任务级状态是
76
+ // planning/executing/checking,没有 running;running 是步骤/会话级词)
77
+ if (want === 'running' || want === 'active') {
78
+ if (!['planning', 'executing', 'checking'].includes(state.status)) continue;
79
+ } else if (state.status !== want) {
80
+ continue;
81
+ }
82
+ }
83
+
84
+ const item = {
85
+ taskId: state.taskId || entry.name,
86
+ status: state.status || 'idle',
87
+ currentLoop: state.currentLoop ?? state.loopCount ?? 0,
88
+ maxLoops: state.maxLoops ?? 3,
89
+ startTime: state.startTime || null,
90
+ endTime: state.endTime || null,
91
+ passed: state.status === 'passed',
92
+ error: state.error || null,
93
+ isSingleExecution: !!state.isSingleExecution,
94
+ };
95
+
96
+ if (opts.olderThan) {
97
+ const cutoff = _parseOlderThan(opts.olderThan);
98
+ const startMs = _toMs(item.startTime);
99
+ if (startMs >= cutoff) continue; // 不是"早于"则跳过
100
+ }
101
+
102
+ tasks.push(item);
103
+ if (opts.limit && tasks.length >= opts.limit) break;
104
+ }
105
+
106
+ tasks.sort((a, b) => String(b.startTime || '').localeCompare(String(a.startTime || '')));
107
+ return tasks;
108
+ }
109
+
110
+ /**
111
+ * 读取编排任务状态(磁盘直读 orchestration.json / orchestration_loop{N}.json)。
112
+ *
113
+ * 与 readTaskState 的区别:
114
+ * - readTaskState 面向大循环任务快照(loop.json 优先)
115
+ * - readOrchestrationState 面向纯编排任务(3rdloop orch load/start 产物),
116
+ * 可指定轮次读取历史快照
117
+ *
118
+ * @param {string} dataDir - 数据目录
119
+ * @param {string} taskId - 任务 ID
120
+ * @param {number|string} [loop] - 可选,指定读取 orchestration_loop{N}.json(不传读最新)
121
+ * @returns {object|null} 状态对象(不存在/损坏返回 null)
122
+ */
123
+ export function readOrchestrationState(dataDir, taskId, loop) {
124
+ if (!taskId) return null;
125
+ const taskPath = path.join(taskDir(dataDir), taskId);
126
+ if (!fs.existsSync(taskPath)) return null;
127
+
128
+ const candidates = [];
129
+ if (loop != null && loop !== '') {
130
+ candidates.push(`orchestration_loop${loop}.json`);
131
+ }
132
+ candidates.push('orchestration.json');
133
+
134
+ for (const file of candidates) {
135
+ const full = path.join(taskPath, file);
136
+ if (fs.existsSync(full)) {
137
+ try {
138
+ const data = JSON.parse(fs.readFileSync(full, 'utf8'));
139
+ if (data) return data;
140
+ } catch { /* 尝试下一个文件 */ }
141
+ }
142
+ }
143
+ return null;
144
+ }
145
+
146
+ /**
147
+ * 列出所有编排任务(扫描 db/task 下各目录的 orchestration.json)。
148
+ *
149
+ * 供 3rdloop orch tasks 使用:只统计存在 orchestration.json 的目录,
150
+ * 不掺入仅有大循环 loop.json 的任务。
151
+ *
152
+ * @param {string} dataDir - 数据目录
153
+ * @returns {object[]} 按 startTime 降序
154
+ */
155
+ export function listOrchestrationTasks(dataDir) {
156
+ const tdir = taskDir(dataDir);
157
+ if (!fs.existsSync(tdir)) return [];
158
+
159
+ const entries = fs.readdirSync(tdir, { withFileTypes: true });
160
+ const tasks = [];
161
+
162
+ for (const entry of entries) {
163
+ if (!entry.isDirectory()) continue;
164
+ const orchFile = path.join(tdir, entry.name, 'orchestration.json');
165
+ if (!fs.existsSync(orchFile)) continue;
166
+ const state = readOrchestrationState(dataDir, entry.name);
167
+ if (!state) continue;
168
+
169
+ const stats = state.stats || {};
170
+ tasks.push({
171
+ taskId: state.taskId || entry.name,
172
+ status: state.status || 'idle',
173
+ loopCount: state.loopCount ?? 0,
174
+ startTime: state.startTime || null,
175
+ endTime: state.endTime || null,
176
+ error: state.error || null,
177
+ stepCount: Array.isArray(state.steps) ? state.steps.length : stats.total || 0,
178
+ stepCompleted: stats.completed || 0,
179
+ stepFailed: stats.failed || 0,
180
+ });
181
+ }
182
+
183
+ tasks.sort((a, b) => String(b.startTime || '').localeCompare(String(a.startTime || '')));
184
+ return tasks;
185
+ }
186
+
187
+ /**
188
+ * 读取任务最终结果。
189
+ *
190
+ * @param {object} dataDir - 数据目录
191
+ * @param {string} taskId - 任务 ID
192
+ * @param {object} [opts]
193
+ * @param {boolean} [opts.raw] - true 时返回原始 loop.json(含全部轮次详情)
194
+ * @returns {object|null}
195
+ */
196
+ export function readTaskResult(dataDir, taskId, opts = {}) {
197
+ const state = readTaskState(dataDir, taskId);
198
+ if (!state) return null;
199
+
200
+ if (opts.raw) return state;
201
+
202
+ // 精简结果:最终状态 + 各轮审核摘要 + 产物路径
203
+ const rounds = (state.rounds || []).map(r => ({
204
+ loop: r.loop,
205
+ passed: r.passed,
206
+ checkPassed: r.checkPassed != null ? r.checkPassed : null,
207
+ checkSummary: r.checkSummary || null,
208
+ orchestratorStatus: r.orchestratorStatus || null,
209
+ error: r.error || null,
210
+ }));
211
+
212
+ return {
213
+ taskId: state.taskId,
214
+ status: state.status,
215
+ passed: state.status === 'passed',
216
+ currentLoop: state.currentLoop,
217
+ maxLoops: state.maxLoops,
218
+ startTime: state.startTime,
219
+ endTime: state.endTime,
220
+ error: state.error,
221
+ rounds,
222
+ taskDir: state.taskDir,
223
+ };
224
+ }
225
+
226
+ /**
227
+ * 读取步骤级详情(可选增强,用于 -v/result 深挖)。
228
+ * @returns {object[]}
229
+ */
230
+ export function readTaskSteps(dataDir, taskId, loop = 0) {
231
+ const taskPath = path.join(taskDir(dataDir), taskId);
232
+ const files = [
233
+ `orchestration_loop${loop}.json`,
234
+ 'orchestration.json',
235
+ ];
236
+ for (const file of files) {
237
+ const full = path.join(taskPath, file);
238
+ if (fs.existsSync(full)) {
239
+ try {
240
+ const data = JSON.parse(fs.readFileSync(full, 'utf8'));
241
+ if (Array.isArray(data.steps)) return data.steps;
242
+ } catch { /* 继续 */ }
243
+ }
244
+ }
245
+ return [];
246
+ }
247
+
248
+ // ─── 内部工具 ──────────────────────────────────────────────────────────────
249
+
250
+ /** 解析 --older-than 为毫秒时间戳截止线(如 '7d' / '24h')。 */
251
+ function _parseOlderThan(value) {
252
+ const match = String(value).trim().toLowerCase().match(/^(\d+)(d|h|m|s)?$/);
253
+ const num = match ? parseFloat(match[1]) : 0;
254
+ const unit = match?.[2] || 'd';
255
+ const unitMs = { s: 1000, m: 60000, h: 3600000, d: 86400000 }[unit];
256
+ return Date.now() - num * unitMs;
257
+ }
258
+
259
+ /** 将 CST 字符串或时间戳转为 ms。 */
260
+ function _toMs(value) {
261
+ if (!value) return 0;
262
+ const ms = Date.parse(value);
263
+ return Number.isFinite(ms) ? ms : 0;
264
+ }