@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
@@ -0,0 +1,5 @@
1
+ /**
2
+ * OpenCodeCLI 快捷导出
3
+ * 方便通过 import OpenCodeCLI from './cli/opencode.js' 引用
4
+ */
5
+ export { default } from './opencode/index.js';
@@ -0,0 +1,61 @@
1
+ import StorageManager from './StorageManager.js';
2
+ import SessionStore from './stores/SessionStore.js';
3
+
4
+ /**
5
+ * MessageArchive —— Session 对话消息存档服务(兼容门面)
6
+ *
7
+ * ⚠️ 本类现为 SessionStore 的薄代理,保留原构造签名与方法,使现有 CLI 适配器
8
+ * (OpenCodeCLI)的 `new MessageArchive()` 与 `this.archive.*`
9
+ * 调用无需任何改动即可工作。
10
+ *
11
+ * 实际逻辑已迁入 stores/SessionStore.js,存储细节下沉到 adapters/ 层。
12
+ * 新代码请直接使用 StorageManager + SessionStore(见 index.js 导出)。
13
+ *
14
+ * 原有存储布局保持不变:
15
+ * db/Session/
16
+ * ├── <sessionId>.jsonl # 消息流(append-only)
17
+ * └── <sessionId>.meta.json # 元信息
18
+ */
19
+ class MessageArchive {
20
+ /**
21
+ * @param {object} [options]
22
+ * @param {string} [options.baseDir] - 存档根目录(绝对路径)。默认相对本项目推导。
23
+ * @param {number} [options.stallThresholdMs] - 判定"卡死/停滞"的阈值,默认 5 分钟
24
+ * @param {StorageManager} [options.manager] - 已有的 StorageManager(复用根目录与实例缓存)
25
+ */
26
+ constructor(options = {}) {
27
+ const stallThresholdMs = options.stallThresholdMs ?? 5 * 60 * 1000;
28
+
29
+ // 复用传入的 manager,或自建一个(rootDir 兼容旧的 baseDir 指向 db/Session 的情形)
30
+ let manager = options.manager;
31
+ if (!manager) {
32
+ manager = new StorageManager(
33
+ options.baseDir
34
+ ? { rootDir: options.baseDir }
35
+ : {}
36
+ );
37
+ }
38
+
39
+ // 通过 manager 获取 Session 子域的 jsonl / json 适配器
40
+ this._store = new SessionStore({
41
+ jsonl: manager.jsonl('Session'),
42
+ json: manager.json('Session'),
43
+ stallThresholdMs
44
+ });
45
+ }
46
+
47
+ // ─── 代理到 SessionStore,保持原方法签名 ──────────────────────────────────
48
+
49
+ async readMeta(sessionId) { return this._store.readMeta(sessionId); }
50
+ async writeMeta(sessionId, meta) { return this._store.writeMeta(sessionId, meta); }
51
+ async patchMeta(sessionId, patch) { return this._store.patchMeta(sessionId, patch); }
52
+ async appendMessage(sessionId, message, opts) { return this._store.appendMessage(sessionId, message, opts); }
53
+ async appendMessages(sessionId, messages) { return this._store.appendMessages(sessionId, messages); }
54
+ async readMessages(sessionId) { return this._store.readMessages(sessionId); }
55
+ async readLastMessage(sessionId) { return this._store.readLastMessage(sessionId); }
56
+ async listSessions() { return this._store.listSessions(); }
57
+ async recordCheck(sessionId, current) { return this._store.recordCheck(sessionId, current); }
58
+ async deleteSession(sessionId) { return this._store.deleteSession(sessionId); }
59
+ }
60
+
61
+ export default MessageArchive;
@@ -0,0 +1,107 @@
1
+ import { join, dirname } from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
+
4
+ import JsonAdapter from './adapters/JsonAdapter.js';
5
+ import JsonlAdapter from './adapters/JsonlAdapter.js';
6
+ import SqliteAdapter from './adapters/SqliteAdapter.js';
7
+ import FileAdapter from './adapters/FileAdapter.js';
8
+
9
+ /**
10
+ * StorageManager —— 统一存储管理器
11
+ *
12
+ * 职责:
13
+ * 1. 集中解析存储根目录(db/),所有适配器共享同一根,避免路径散落。
14
+ * 2. 按子域(subDir)创建并缓存适配器实例,同一子域复用同一实例。
15
+ * 3. 提供工厂方法 get(type, subDir),对上层 Store 屏蔽适配器构造细节。
16
+ * 4. 统一生命周期管理(closeAll)。
17
+ *
18
+ * 分层关系:
19
+ * ┌─────────────────────────────────────────────┐
20
+ * │ Store 层 (SessionStore / TaskStepStore) │ 业务语义
21
+ * ├─────────────────────────────────────────────┤
22
+ * │ StorageManager │ 工厂/注册表/根目录
23
+ * ├─────────────────────────────────────────────┤
24
+ * │ Adapter 层 (Json/Jsonl/Sqlite/File) │ 存储格式实现
25
+ * └─────────────────────────────────────────────┘
26
+ *
27
+ * 扩展方式:
28
+ * - 新增存储格式:实现 BaseAdapter 子类 → 注册到 _ADAPTERS → Manager 自动可用
29
+ * - 新增业务存储:实现 Store,依赖 Manager.get() 获取适配器,不感知格式
30
+ */
31
+ class StorageManager {
32
+ /**
33
+ * @param {object} [options]
34
+ * @param {string} [options.rootDir] - 存储根目录绝对路径。默认 workspace 根下 db/
35
+ */
36
+ constructor(options = {}) {
37
+ if (options.rootDir) {
38
+ this.rootDir = options.rootDir;
39
+ } else {
40
+ // 本文件 (Server/DbUse/) 上溯 3 层到 workspace 根 → db/
41
+ const here = dirname(fileURLToPath(import.meta.url));
42
+ this.rootDir = join(here, '..', '..', '..', 'db');
43
+ }
44
+ /** @type {Map<string, import('./adapters/BaseAdapter.js').default>} */
45
+ this._instances = new Map();
46
+ }
47
+
48
+ static get _ADAPTERS() {
49
+ return {
50
+ json: JsonAdapter,
51
+ jsonl: JsonlAdapter,
52
+ sqlite: SqliteAdapter,
53
+ file: FileAdapter
54
+ };
55
+ }
56
+
57
+ /**
58
+ * 获取(或创建)指定类型与子域的适配器实例。
59
+ * 同一 (type, subDir) 复用同一实例。
60
+ *
61
+ * @param {'json'|'jsonl'|'sqlite'|'file'} type - 适配器类型
62
+ * @param {string} subDir - 根目录下的子域(如 'Session'、'TaskStep'、'Artifacts')
63
+ * @param {object} [adapterOpts] - 传递给适配器的额外选项
64
+ * @returns {import('./adapters/BaseAdapter.js').default}
65
+ */
66
+ get(type, subDir, adapterOpts = {}) {
67
+ const AdapterClass = StorageManager._ADAPTERS[type];
68
+ if (!AdapterClass) {
69
+ throw new Error(
70
+ `未知的存储类型: "${type}",可选: ${Object.keys(StorageManager._ADAPTERS).join(', ')}`
71
+ );
72
+ }
73
+ const cacheKey = `${type}:${subDir}`;
74
+ let instance = this._instances.get(cacheKey);
75
+ if (!instance) {
76
+ instance = new AdapterClass({
77
+ baseDir: this.rootDir,
78
+ subDir,
79
+ ...adapterOpts
80
+ });
81
+ this._instances.set(cacheKey, instance);
82
+ }
83
+ return instance;
84
+ }
85
+
86
+ /** 便捷方法 */
87
+ json(subDir, opts) { return this.get('json', subDir, opts); }
88
+ jsonl(subDir, opts) { return this.get('jsonl', subDir, opts); }
89
+ sqlite(subDir, opts) { return this.get('sqlite', subDir, opts); }
90
+ file(subDir, opts) { return this.get('file', subDir, opts); }
91
+
92
+ /**
93
+ * 关闭所有适配器(释放数据库连接等)。
94
+ */
95
+ async closeAll() {
96
+ const tasks = [];
97
+ for (const instance of this._instances.values()) {
98
+ if (typeof instance.close === 'function') {
99
+ tasks.push(Promise.resolve(instance.close()).catch(() => {}));
100
+ }
101
+ }
102
+ await Promise.all(tasks);
103
+ this._instances.clear();
104
+ }
105
+ }
106
+
107
+ export default StorageManager;
@@ -0,0 +1,94 @@
1
+ import { promises as fs } from 'node:fs';
2
+ import { join, dirname } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+
5
+ /**
6
+ * BaseAdapter —— 所有存储适配器的抽象基类
7
+ *
8
+ * 职责:
9
+ * 1. 统一根目录解析(相对路径 → 绝对路径)。
10
+ * 2. 提供目录确保、路径拼接工具方法。
11
+ * 3. 声明子类必须实现的接口契约(子类不实现则抛 NotImplemented)。
12
+ *
13
+ * 设计原则:
14
+ * - 高内聚:每种存储格式(JSON/JSONL/SQLite/File)的读写细节封装在各自适配器。
15
+ * - 低耦合:Store 层只依赖适配器接口,不感知具体格式;适配器之间互不依赖。
16
+ * - 可扩展:新增存储格式只需新增一个 Adapter 子类,无需改动 Store 与 Manager。
17
+ */
18
+ class BaseAdapter {
19
+ /**
20
+ * @param {object} options
21
+ * @param {string} [options.baseDir] - 该适配器的工作根目录(绝对路径)
22
+ * @param {string} [options.subDir] - 根目录下的子目录名(如 'Session'、'TaskStep')
23
+ */
24
+ constructor(options = {}) {
25
+ this.subDir = options.subDir || '';
26
+ if (options.baseDir) {
27
+ this.baseDir = options.baseDir;
28
+ } else {
29
+ // 默认:本文件 (Server/DbUse/adapters/) 上溯 4 层到 workspace 根 → db/
30
+ const here = dirname(fileURLToPath(import.meta.url));
31
+ this.baseDir = join(here, '..', '..', '..', '..', 'db');
32
+ }
33
+ this.rootDir = this.subDir ? join(this.baseDir, this.subDir) : this.baseDir;
34
+ this._ensureDirPromise = null;
35
+ }
36
+
37
+ // ─── 工具方法 ──────────────────────────────────────────────────────────────
38
+
39
+ /**
40
+ * 确保工作目录存在(幂等,并发安全)。
41
+ * @returns {Promise<string>} 目录绝对路径
42
+ */
43
+ async ensureDir() {
44
+ if (!this._ensureDirPromise) {
45
+ this._ensureDirPromise = fs.mkdir(this.rootDir, { recursive: true }).then(() => {
46
+ this._ensureDirPromise = null;
47
+ return this.rootDir;
48
+ }).catch(err => {
49
+ this._ensureDirPromise = null;
50
+ throw err;
51
+ });
52
+ }
53
+ return this._ensureDirPromise;
54
+ }
55
+
56
+ /** 拼接工作目录下的路径 */
57
+ path(...segments) {
58
+ return join(this.rootDir, ...segments);
59
+ }
60
+
61
+ /** 同步版路径拼接(供 SQLite 等 sync 场景使用) */
62
+ pathSync(...segments) {
63
+ return join(this.rootDir, ...segments);
64
+ }
65
+
66
+ // ─── 子类必须实现的接口契约 ────────────────────────────────────────────────
67
+ // 以下方法默认抛出 NotImplementedError,子类按需覆盖。
68
+
69
+ async read(/* key */) {
70
+ throw new Error(`${this.constructor.name}.read() 未实现`);
71
+ }
72
+
73
+ async write(/* key, data */) {
74
+ throw new Error(`${this.constructor.name}.write() 未实现`);
75
+ }
76
+
77
+ async delete(/* key */) {
78
+ throw new Error(`${this.constructor.name}.delete() 未实现`);
79
+ }
80
+
81
+ async list() {
82
+ throw new Error(`${this.constructor.name}.list() 未实现`);
83
+ }
84
+
85
+ /**
86
+ * 返回适配器类型标识,用于日志与注册表。
87
+ * @returns {string}
88
+ */
89
+ get type() {
90
+ return 'base';
91
+ }
92
+ }
93
+
94
+ export default BaseAdapter;
@@ -0,0 +1,138 @@
1
+ import { promises as fs } from 'node:fs';
2
+ import { dirname, join } from 'node:path';
3
+ import BaseAdapter from './BaseAdapter.js';
4
+
5
+ /**
6
+ * FileAdapter —— 原始文件读写适配器
7
+ *
8
+ * 用途:任务的文件创建/产物落盘、二进制内容、非结构化文本等。
9
+ * 与 JsonAdapter/JsonlAdapter 的区别:不做 JSON 序列化,原样写入/读取。
10
+ *
11
+ * 提供:
12
+ * - writeFile(key, content) / readFile(key) 文本或 Buffer
13
+ * - createFile(key, content) 仅在不存在时创建
14
+ * - appendFile(key, content) 追加
15
+ * - exists(key) / stat(key) 元信息
16
+ * - list(pattern) 列举文件
17
+ */
18
+ class FileAdapter extends BaseAdapter {
19
+ constructor(options = {}) {
20
+ super(options);
21
+ this._defaultExt = options.defaultExt || '';
22
+ }
23
+
24
+ get type() {
25
+ return 'file';
26
+ }
27
+
28
+ _file(key) {
29
+ // key 即相对 rootDir 的文件路径(可含子目录与扩展名)
30
+ return this.path(key);
31
+ }
32
+
33
+ /**
34
+ * 写入文件(覆盖)。
35
+ * @param {string} key
36
+ * @param {string|Buffer} content
37
+ * @param {object} [opts]
38
+ * @param {boolean} [opts.binary] - 是否二进制
39
+ */
40
+ async write(key, content, opts = {}) {
41
+ await this.ensureDir();
42
+ const file = this._file(key);
43
+ await fs.mkdir(dirname(file), { recursive: true });
44
+ await fs.writeFile(file, content, opts.binary ? null : 'utf8');
45
+ return key;
46
+ }
47
+
48
+ /** readFile 别名,对齐接口 */
49
+ async read(key, opts = {}) {
50
+ return this.readFile(key, opts);
51
+ }
52
+
53
+ async readFile(key, opts = {}) {
54
+ try {
55
+ return await fs.readFile(this._file(key), opts.binary ? null : 'utf8');
56
+ } catch (err) {
57
+ if (err.code === 'ENOENT') return null;
58
+ throw err;
59
+ }
60
+ }
61
+
62
+ /**
63
+ * 仅当文件不存在时创建(原子性:O_EXCL)。
64
+ * @returns {Promise<boolean>} 是否实际创建
65
+ */
66
+ async createFile(key, content = '', opts = {}) {
67
+ await this.ensureDir();
68
+ const file = this._file(key);
69
+ await fs.mkdir(dirname(file), { recursive: true });
70
+ try {
71
+ // 'wx' 标志:存在则失败
72
+ const handle = await fs.open(file, 'wx');
73
+ await handle.writeFile(content, opts.binary ? null : 'utf8');
74
+ await handle.close();
75
+ return true;
76
+ } catch (err) {
77
+ if (err.code === 'EEXIST') return false;
78
+ throw err;
79
+ }
80
+ }
81
+
82
+ async appendFile(key, content, opts = {}) {
83
+ await this.ensureDir();
84
+ const file = this._file(key);
85
+ await fs.mkdir(dirname(file), { recursive: true });
86
+ await fs.appendFile(file, content, opts.binary ? null : 'utf8');
87
+ return key;
88
+ }
89
+
90
+ async exists(key) {
91
+ try {
92
+ await fs.access(this._file(key));
93
+ return true;
94
+ } catch {
95
+ return false;
96
+ }
97
+ }
98
+
99
+ async stat(key) {
100
+ try {
101
+ return await fs.stat(this._file(key));
102
+ } catch (err) {
103
+ if (err.code === 'ENOENT') return null;
104
+ throw err;
105
+ }
106
+ }
107
+
108
+ async delete(key) {
109
+ try {
110
+ await fs.unlink(this._file(key));
111
+ return true;
112
+ } catch (err) {
113
+ if (err.code === 'ENOENT') return false;
114
+ throw err;
115
+ }
116
+ }
117
+
118
+ /**
119
+ * 列举目录下的文件名(不含目录)。pattern 为简单前缀过滤。
120
+ * @param {string} [pattern]
121
+ * @returns {Promise<Array<string>>}
122
+ */
123
+ async list(pattern) {
124
+ await this.ensureDir();
125
+ try {
126
+ const entries = await fs.readdir(this.rootDir, { withFileTypes: true });
127
+ return entries
128
+ .filter(e => e.isFile())
129
+ .map(e => e.name)
130
+ .filter(name => !pattern || name.startsWith(pattern));
131
+ } catch (err) {
132
+ if (err.code === 'ENOENT') return [];
133
+ throw err;
134
+ }
135
+ }
136
+ }
137
+
138
+ export default FileAdapter;
@@ -0,0 +1,138 @@
1
+ import { promises as fs } from 'node:fs';
2
+ import { dirname, join } from 'node:path';
3
+ import { randomBytes } from 'node:crypto';
4
+ import BaseAdapter from './BaseAdapter.js';
5
+
6
+ /**
7
+ * JsonAdapter —— JSON 文件存储适配器
8
+ *
9
+ * 用途:存储结构化的小型文档(meta、配置、任务快照),整文件读写。
10
+ * 一个 key 对应一个 `<key>.json` 文件,内容为 JSON 对象。
11
+ *
12
+ * 适用场景:元信息、步骤状态、单文档存档。
13
+ * 不适用:高频追加的消息流(请用 JsonlAdapter)或大量记录(请用 SqliteAdapter)。
14
+ */
15
+ class JsonAdapter extends BaseAdapter {
16
+ constructor(options = {}) {
17
+ super(options);
18
+ this._ext = options.ext || '.json';
19
+ }
20
+
21
+ get type() {
22
+ return 'json';
23
+ }
24
+
25
+ _file(key) {
26
+ // key 允许含子目录,自动创建
27
+ return this.path(`${key}${this._ext}`);
28
+ }
29
+
30
+ async read(key) {
31
+ try {
32
+ const raw = await fs.readFile(this._file(key), 'utf8');
33
+ return JSON.parse(raw);
34
+ } catch (err) {
35
+ if (err.code === 'ENOENT') return null;
36
+ throw err;
37
+ }
38
+ }
39
+
40
+ async write(key, data) {
41
+ await this.ensureDir();
42
+ const file = this._file(key);
43
+ // 确保子目录存在
44
+ await fs.mkdir(dirname(file), { recursive: true });
45
+ // 原子写入:先写临时文件,再 rename 覆盖目标文件。
46
+ // 避免并发 writeFile 直接截断目标文件时,另一路仍在写尾部,
47
+ // 产生 JSON 尾部拼接垃圾(如 orchestration.json 损坏场景)。
48
+ // rename 在同一文件系统内是原子的,读端要么看到旧文件要么看到完整新文件。
49
+ const tmp = `${file}.${randomBytes(6).toString('hex')}.tmp`;
50
+ try {
51
+ await fs.writeFile(tmp, JSON.stringify(data, null, 2), 'utf8');
52
+ await fs.rename(tmp, file);
53
+ } catch (err) {
54
+ // 出错时清理临时文件,避免残留
55
+ await fs.unlink(tmp).catch(() => {});
56
+ throw err;
57
+ }
58
+ return data;
59
+ }
60
+
61
+ async delete(key) {
62
+ try {
63
+ await fs.unlink(this._file(key));
64
+ return true;
65
+ } catch (err) {
66
+ if (err.code === 'ENOENT') return false;
67
+ throw err;
68
+ }
69
+ }
70
+
71
+ /**
72
+ * 列举 JSON 文件。
73
+ *
74
+ * @param {string} [prefix] - 可选的子目录前缀(如 'task-001/stepid_'),
75
+ * 传入时递归列举该前缀下的文件,key 含子目录路径。
76
+ * 不传时列举根目录下的文件。
77
+ * @returns {Promise<Array<{key: string, data: object}>>}
78
+ */
79
+ async list(prefix) {
80
+ await this.ensureDir();
81
+
82
+ if (prefix) {
83
+ // 子目录模式:在 rootDir/prefix 的父目录下递归查找匹配文件
84
+ const dir = dirname(this.path(prefix));
85
+ const files = await this._readdirRecursive(dir);
86
+ const result = [];
87
+ for (const file of files) {
88
+ if (!file.endsWith(this._ext)) continue;
89
+ // 从 rootDir 开始的相对路径(去掉扩展名)作为 key
90
+ const rel = file.slice(this.rootDir.length + 1, -this._ext.length);
91
+ if (!rel.startsWith(prefix)) continue;
92
+ const data = await this.read(rel);
93
+ if (data != null) result.push({ key: rel, data });
94
+ }
95
+ return result;
96
+ }
97
+
98
+ // 根目录模式
99
+ const entries = await fs.readdir(this.rootDir, { withFileTypes: true });
100
+ const result = [];
101
+ for (const e of entries) {
102
+ if (e.isFile() && e.name.endsWith(this._ext)) {
103
+ const key = e.name.slice(0, -this._ext.length);
104
+ const data = await this.read(key);
105
+ if (data != null) result.push({ key, data });
106
+ }
107
+ }
108
+ return result;
109
+ }
110
+
111
+ /**
112
+ * 递归读取目录下所有文件路径。
113
+ * @param {string} dir
114
+ * @returns {Promise<string[]>}
115
+ * @private
116
+ */
117
+ async _readdirRecursive(dir) {
118
+ let entries;
119
+ try {
120
+ entries = await fs.readdir(dir, { withFileTypes: true });
121
+ } catch (err) {
122
+ if (err.code === 'ENOENT') return [];
123
+ throw err;
124
+ }
125
+ const files = [];
126
+ for (const e of entries) {
127
+ const full = join(dir, e.name);
128
+ if (e.isDirectory()) {
129
+ files.push(...await this._readdirRecursive(full));
130
+ } else if (e.isFile()) {
131
+ files.push(full);
132
+ }
133
+ }
134
+ return files;
135
+ }
136
+ }
137
+
138
+ export default JsonAdapter;
@@ -0,0 +1,114 @@
1
+ import { promises as fs } from 'node:fs';
2
+ import { dirname } from 'node:path';
3
+ import BaseAdapter from './BaseAdapter.js';
4
+
5
+ /**
6
+ * JsonlAdapter —— JSONL 流式追加存储适配器
7
+ *
8
+ * 用途:append-only 消息流、事件日志等高频追加场景。
9
+ * 一个 key 对应一个 `<key>.jsonl` 文件,每行一条 JSON。
10
+ *
11
+ * 优势:
12
+ * - 追加写入 O(1),无需读改写整文件
13
+ * - 天然增量,便于按行读取/流式处理
14
+ * - 单文件损坏只影响该 key
15
+ */
16
+ class JsonlAdapter extends BaseAdapter {
17
+ constructor(options = {}) {
18
+ super(options);
19
+ this._ext = options.ext || '.jsonl';
20
+ }
21
+
22
+ get type() {
23
+ return 'jsonl';
24
+ }
25
+
26
+ _file(key) {
27
+ return this.path(`${key}${this._ext}`);
28
+ }
29
+
30
+ /**
31
+ * 追加一条记录。
32
+ * @param {string} key
33
+ * @param {object} record
34
+ * @returns {Promise<object>} 实际写入的记录
35
+ */
36
+ async append(key, record) {
37
+ await this.ensureDir();
38
+ const file = this._file(key);
39
+ await fs.mkdir(dirname(file), { recursive: true });
40
+ const line = JSON.stringify(record) + '\n';
41
+ await fs.appendFile(file, line, 'utf8');
42
+ return record;
43
+ }
44
+
45
+ /**
46
+ * 批量追加。
47
+ * @param {string} key
48
+ * @param {Array<object>} records
49
+ * @returns {Promise<number>} 实际写入条数
50
+ */
51
+ async appendBatch(key, records) {
52
+ await this.ensureDir();
53
+ const file = this._file(key);
54
+ await fs.mkdir(dirname(file), { recursive: true });
55
+ const content = records.map(r => JSON.stringify(r)).join('\n') + (records.length ? '\n' : '');
56
+ if (content) await fs.appendFile(file, content, 'utf8');
57
+ return records.length;
58
+ }
59
+
60
+ /**
61
+ * 读取全部记录(按行顺序)。
62
+ * @param {string} key
63
+ * @returns {Promise<Array<object>>}
64
+ */
65
+ async read(key) {
66
+ try {
67
+ const raw = await fs.readFile(this._file(key), 'utf8');
68
+ const lines = raw.split('\n').filter(Boolean);
69
+ const out = [];
70
+ for (const line of lines) {
71
+ try { out.push(JSON.parse(line)); }
72
+ catch { /* 跳过损坏行 */ }
73
+ }
74
+ return out;
75
+ } catch (err) {
76
+ if (err.code === 'ENOENT') return [];
77
+ throw err;
78
+ }
79
+ }
80
+
81
+ /**
82
+ * 读取最后一条记录(高效:从尾部读取)。
83
+ * @param {string} key
84
+ * @returns {Promise<object|null>}
85
+ */
86
+ async readLast(key) {
87
+ const records = await this.read(key);
88
+ return records.length > 0 ? records[records.length - 1] : null;
89
+ }
90
+
91
+ async delete(key) {
92
+ try {
93
+ await fs.unlink(this._file(key));
94
+ return true;
95
+ } catch (err) {
96
+ if (err.code === 'ENOENT') return false;
97
+ throw err;
98
+ }
99
+ }
100
+
101
+ async list() {
102
+ await this.ensureDir();
103
+ const entries = await fs.readdir(this.rootDir, { withFileTypes: true });
104
+ const result = [];
105
+ for (const e of entries) {
106
+ if (e.isFile() && e.name.endsWith(this._ext)) {
107
+ result.push(e.name.slice(0, -this._ext.length));
108
+ }
109
+ }
110
+ return result;
111
+ }
112
+ }
113
+
114
+ export default JsonlAdapter;