@ohos-cpf/3rdloop 0.0.8 → 0.0.10

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 (220) hide show
  1. package/README.md +43 -0
  2. package/lib/cli.js +38 -5
  3. package/lib/doctor.js +111 -10
  4. package/lib/knowledge.js +440 -0
  5. package/lib/mcp.js +498 -0
  6. package/package.json +6 -2
  7. package/vendor/Archive/data/.index/meta.json +7 -0
  8. package/vendor/Archive/data/.index/search.db +0 -0
  9. package/vendor/Archive/data/docs/experiences/arkts-check-tool-pitfalls-baseline-comparison.md +13 -0
  10. package/vendor/Archive/data/docs/experiences/arkts-deep-path-import-recognition.md +31 -0
  11. package/vendor/Archive/data/docs/experiences/arkts-demo-coverage-entry-file-case-mismatch.md +25 -0
  12. package/vendor/Archive/data/docs/experiences/arkts-demo-coverage-import-trailing-slash.md +20 -0
  13. package/vendor/Archive/data/docs/experiences/arkts-library-source-files-may-be-ts.md +18 -0
  14. package/vendor/Archive/data/docs/experiences/arkts-typedarray-buffer-interface-cast-compile-fixes.md +36 -0
  15. package/vendor/Archive/data/docs/experiences/arkts-xts-compile-error-clustering-fix.md +24 -0
  16. package/vendor/Archive/data/docs/experiences/arkts-xts-doc-expected-value-runtime-probe.md +35 -0
  17. package/vendor/Archive/data/docs/experiences/arkts-xts-fixture-rawfile-testability-injection.md +33 -0
  18. package/vendor/Archive/data/docs/experiences/code-linter-chinese-comment-false-positive.md +16 -0
  19. package/vendor/Archive/data/docs/experiences/esobject-new-expression-variable-tracking.md +33 -0
  20. package/vendor/Archive/data/docs/experiences/filesystem-case-sensitivity-module-resolution.md +31 -0
  21. package/vendor/Archive/data/docs/experiences/gitcode-clone-redirect-warning-normal.md +13 -0
  22. package/vendor/Archive/data/docs/experiences/kn_msgvq1w585ec8319.md +77 -0
  23. package/vendor/Archive/data/docs/experiences/kn_msovnm6rd46de72c.md +98 -0
  24. package/vendor/Archive/data/docs/experiences/kn_mspt8vntfe708576.md +87 -0
  25. package/vendor/Archive/data/docs/experiences/kn_mspu1ei77adbbb48.md +133 -0
  26. package/vendor/Archive/data/docs/experiences/kn_mspubgak8d30bfce.md +128 -0
  27. package/vendor/Archive/data/docs/experiences/kn_mspug2de3cb1f7c3.md +115 -0
  28. package/vendor/Archive/data/docs/experiences/kn_skill_opt_001.md +38 -0
  29. package/vendor/Archive/data/docs/experiences/loop-artifacts-verification-evidence-triangle.md +19 -0
  30. package/vendor/Archive/data/docs/experiences/macos-bash-replace-build-ps1.md +19 -0
  31. package/vendor/Archive/data/docs/experiences/macos-bsd-diff-q-illegal-option.md +15 -0
  32. package/vendor/Archive/data/docs/experiences/migrate-cjs-compatible-api-version-map-limit.md +17 -0
  33. package/vendor/Archive/data/docs/experiences/mp3agic-arkts-library-behavior-quirks.md +21 -0
  34. package/vendor/Archive/data/docs/experiences/ohos-face-detection-scan-api-mapping.md +15 -0
  35. package/vendor/Archive/data/docs/experiences/pr-metadata-and-diff-integrity-verification.md +12 -0
  36. package/vendor/Archive/data/docs/experiences/rn-coverage-index-signature-pseudo-member-false-negative.md +32 -0
  37. package/vendor/Archive/data/docs/experiences/rn-memory-check-severity-calibration.md +21 -0
  38. package/vendor/Archive/data/docs/experiences/rn-platform-specific-api-exclusion-evidence.md +24 -0
  39. package/vendor/Archive/data/docs/experiences/rn-upstream-version-diff-pitfalls.md +17 -0
  40. package/vendor/Archive/data/docs/experiences/rn-version-gap-risk-rating-rules.md +13 -0
  41. package/vendor/Archive/data/docs/experiences/rn-view-lib-native-contract-diff-fabric-spec.md +16 -0
  42. package/vendor/Archive/data/docs/experiences/rnoh-adapter-package-version-field-semantics.md +18 -0
  43. package/vendor/Archive/data/docs/experiences/rnoh-arkts-sqlite-rows-array-format.md +18 -0
  44. package/vendor/Archive/data/docs/experiences/rnoh-dependency-residue-scan-strategy.md +18 -0
  45. package/vendor/Archive/data/docs/experiences/rnoh-example-local-lib-dep-use-tgz.md +53 -0
  46. package/vendor/Archive/data/docs/experiences/rnoh-example-prereserve-rntesterlist.md +17 -0
  47. package/vendor/Archive/data/docs/experiences/rnoh-example-template-compatiblesdkversion-upgrade.md +29 -0
  48. package/vendor/Archive/data/docs/experiences/rnoh-example-turbomodule-shell-adaptation-checklist.md +41 -0
  49. package/vendor/Archive/data/docs/experiences/rnoh-mcp-build-project-tool-risk.md +18 -0
  50. package/vendor/Archive/data/docs/experiences/rnoh-npm-devdependencies-version-precheck.md +29 -0
  51. package/vendor/Archive/data/docs/experiences/rnoh-repo-baseline-version-verification.md +13 -0
  52. package/vendor/Archive/data/docs/experiences/rnoh-repo-upstream-directory-mapping.md +18 -0
  53. package/vendor/Archive/data/docs/experiences/rnoh-stateless-library-zero-leak-verification.md +31 -0
  54. package/vendor/Archive/data/docs/experiences/rnoh-template-npmrc-credential-removal.md +15 -0
  55. package/vendor/Archive/data/docs/experiences/rnoh-turbomodule-codegen-wiring-verification.md +19 -0
  56. package/vendor/Archive/data/docs/experiences/rnoh-turbomodule-cpp-methodmap-compatibility-check.md +20 -0
  57. package/vendor/Archive/data/docs/experiences/scenario-doc-vs-source-signature-diff-four-patterns.md +24 -0
  58. package/vendor/Archive/data/docs/experiences/static-analysis-grep-cross-validation.md +29 -0
  59. package/vendor/Archive/demo.js +489 -0
  60. package/vendor/Archive/index.js +43 -0
  61. package/vendor/Archive/package.json +16 -0
  62. package/vendor/Archive/src/constants.js +83 -0
  63. package/vendor/Archive/src/data/stopwords.txt +110 -0
  64. package/vendor/Archive/src/data/synonyms.json +25 -0
  65. package/vendor/Archive/src/data/terms.txt +59 -0
  66. package/vendor/Archive/src/db/sqlite-backend.js +312 -0
  67. package/vendor/Archive/src/db/sqlite-schema.js +64 -0
  68. package/vendor/Archive/src/engine.js +501 -0
  69. package/vendor/Archive/src/index/index-manager.js +203 -0
  70. package/vendor/Archive/src/index/index-state.js +94 -0
  71. package/vendor/Archive/src/index/search-text-builder.js +106 -0
  72. package/vendor/Archive/src/index.js +22 -0
  73. package/vendor/Archive/src/parser/api-identifiers.js +121 -0
  74. package/vendor/Archive/src/parser/api-suffixes.js +48 -0
  75. package/vendor/Archive/src/parser/heading-normalize.js +40 -0
  76. package/vendor/Archive/src/parser/markdown-splitter.js +215 -0
  77. package/vendor/Archive/src/search/catalog-routing.js +87 -0
  78. package/vendor/Archive/src/search/fts-search.js +289 -0
  79. package/vendor/Archive/src/search/query-normalizer.js +159 -0
  80. package/vendor/Archive/src/search/query-rewriter.js +72 -0
  81. package/vendor/Archive/src/search/search-engine.js +72 -0
  82. package/vendor/Archive/src/search/snippet.js +64 -0
  83. package/vendor/Archive/src/store/dir-store.js +103 -0
  84. package/vendor/Archive/src/store/doc-store.js +36 -0
  85. package/vendor/Archive/src/tokenizer/lexicon.js +151 -0
  86. package/vendor/Archive/src/tokenizer/tokenizer.js +167 -0
  87. package/vendor/Archive/src/types.js +86 -0
  88. package/vendor/Archive/src/utils/hash.js +16 -0
  89. package/vendor/Archive/src/utils/lock.js +73 -0
  90. package/vendor/Archive/src/utils/path-safety.js +96 -0
  91. package/vendor/Archive/src/utils/paths.js +39 -0
  92. package/vendor/BadCase/rn/INDEX.md +127 -0
  93. package/vendor/BadCase/rn/cases/KI-001-webview/350/247/206/351/242/221/346/227/240/346/263/225/346/250/252/345/261/217.md +52 -0
  94. package/vendor/BadCase/rn/cases/KI-002-fastImage/347/203/255/346/233/264/346/226/260/345/233/276/347/211/207/345/244/261/350/264/245.md +37 -0
  95. package/vendor/BadCase/rn/cases/KI-003-wechat/347/274/251/347/225/245/345/233/276/346/234/254/345/234/260/345/233/276/347/211/207.md +62 -0
  96. package/vendor/BadCase/rn/cases/KI-004-wechat/345/233/236/350/260/203/346/227/266/345/272/217.md +47 -0
  97. package/vendor/BadCase/rn/cases/KI-005-geolocation/345/257/274/345/205/245/350/267/257/345/276/204/345/220/216/347/274/200.md +31 -0
  98. package/vendor/BadCase/rn/cases/KI-006-SmartRefreshLayout/346/231/272/350/203/275/346/214/207/351/222/210/345/264/251/346/272/203.md +55 -0
  99. package/vendor/BadCase/rn/cases/KI-007-orientation-locker/344/274/240/346/204/237/345/231/250/345/210/235/345/247/213/345/214/226.md +58 -0
  100. package/vendor/BadCase/rn/cases/KI-008-orientation-locker/344/274/240/346/204/237/345/231/250/345/274/225/347/224/250/350/256/241/346/225/260.md +47 -0
  101. package/vendor/BadCase/rn/cases/KI-009-pager-view/345/265/214/345/245/227/346/273/221/345/212/250.md +38 -0
  102. package/vendor/BadCase/rn/cases/KI-010-screens/346/211/213/345/212/277/345/206/262/347/252/201.md +48 -0
  103. package/vendor/BadCase/rn/cases/KI-011-spring-scrollview/346/211/213/345/212/277/351/207/215/345/244/215/347/273/221/345/256/232.md +49 -0
  104. package/vendor/BadCase/rn/cases/KI-012-qr-camera/346/250/252/345/261/217/351/200/202/351/205/215.md +59 -0
  105. package/vendor/BadCase/rn/cases/KI-013-webview/346/267/261/350/211/262/346/250/241/345/274/217/350/203/214/346/231/257/350/211/262.md +37 -0
  106. package/vendor/BadCase/rn/cases/KI-014-amap-geolocation/345/233/236/350/260/203/347/274/272/345/244/261.md +42 -0
  107. package/vendor/BadCase/rn/cases/KI-015-reanimated/350/277/220/350/241/214/346/227/266/346/236/220/346/236/204/345/264/251/346/272/203.md +54 -0
  108. package/vendor/BadCase/rn/cases/KI-016-fs/346/226/207/344/273/266/350/257/273/345/217/226/347/274/226/347/240/201.md +58 -0
  109. package/vendor/BadCase/rn/cases/KI-017-blob-util/345/217/202/346/225/260/347/274/226/347/240/201/351/224/231/350/257/257.md +39 -0
  110. package/vendor/BadCase/rn/cases/KI-018-modal/345/274/271/347/252/227/351/227/252/347/203/201.md +53 -0
  111. package/vendor/BadCase/rn/cases/KI-019-code-push/351/207/215/345/220/257/351/200/273/350/276/221/345/244/261/346/225/210.md +79 -0
  112. package/vendor/BadCase/rn/cases/KI-020-netinfo/346/225/217/346/204/237/344/277/241/346/201/257/346/263/204/351/234/262.md +60 -0
  113. package/vendor/BadCase/rn/cases/KI-021-video/346/234/254/345/234/260/350/247/206/351/242/221/346/222/255/346/224/276/345/274/202/345/270/270.md +79 -0
  114. package/vendor/BadCase/rn/cases/KI-022-audio-recorder-player/346/236/232/344/270/276/347/274/272/345/244/261.md +38 -0
  115. package/vendor/BadCase/rn/cases/KI-023-svg/346/270/220/345/217/230/347/273/247/346/211/277/345/244/261/346/225/210.md +62 -0
  116. package/vendor/BadCase/rn/generalization-log.md +55 -0
  117. package/vendor/BadCase/rn/pr-info/rntpc_react-native-SmartRefreshLayout-32.json +328 -0
  118. package/vendor/BadCase/rn/pr-info/rntpc_react-native-SmartRefreshLayout-32.md +382 -0
  119. package/vendor/BadCase/rn/pr-info/rntpc_react-native-amap-geolocation-27.json +1351 -0
  120. package/vendor/BadCase/rn/pr-info/rntpc_react-native-amap-geolocation-27.md +1176 -0
  121. package/vendor/BadCase/rn/pr-info/rntpc_react-native-audio-recorder-player-22.json +538 -0
  122. package/vendor/BadCase/rn/pr-info/rntpc_react-native-audio-recorder-player-22.md +1488 -0
  123. package/vendor/BadCase/rn/pr-info/rntpc_react-native-blob-util-23.json +211 -0
  124. package/vendor/BadCase/rn/pr-info/rntpc_react-native-blob-util-23.md +35 -0
  125. package/vendor/BadCase/rn/pr-info/rntpc_react-native-code-push-17.json +2048 -0
  126. package/vendor/BadCase/rn/pr-info/rntpc_react-native-code-push-17.md +3866 -0
  127. package/vendor/BadCase/rn/pr-info/rntpc_react-native-fast-image-102.json +198 -0
  128. package/vendor/BadCase/rn/pr-info/rntpc_react-native-fast-image-102.md +40 -0
  129. package/vendor/BadCase/rn/pr-info/rntpc_react-native-fs-38.json +751 -0
  130. package/vendor/BadCase/rn/pr-info/rntpc_react-native-fs-38.md +883 -0
  131. package/vendor/BadCase/rn/pr-info/rntpc_react-native-geolocation-24.json +1544 -0
  132. package/vendor/BadCase/rn/pr-info/rntpc_react-native-geolocation-24.md +2598 -0
  133. package/vendor/BadCase/rn/pr-info/rntpc_react-native-modal-20.json +246 -0
  134. package/vendor/BadCase/rn/pr-info/rntpc_react-native-modal-20.md +554 -0
  135. package/vendor/BadCase/rn/pr-info/rntpc_react-native-netinfo-31.json +211 -0
  136. package/vendor/BadCase/rn/pr-info/rntpc_react-native-netinfo-31.md +54 -0
  137. package/vendor/BadCase/rn/pr-info/rntpc_react-native-orientation-locker-45.json +1626 -0
  138. package/vendor/BadCase/rn/pr-info/rntpc_react-native-orientation-locker-45.md +2213 -0
  139. package/vendor/BadCase/rn/pr-info/rntpc_react-native-orientation-locker-51.json +208 -0
  140. package/vendor/BadCase/rn/pr-info/rntpc_react-native-orientation-locker-51.md +77 -0
  141. package/vendor/BadCase/rn/pr-info/rntpc_react-native-pager-view-32.json +377 -0
  142. package/vendor/BadCase/rn/pr-info/rntpc_react-native-pager-view-32.md +174 -0
  143. package/vendor/BadCase/rn/pr-info/rntpc_react-native-qr-decode-image-camera-37.json +232 -0
  144. package/vendor/BadCase/rn/pr-info/rntpc_react-native-qr-decode-image-camera-37.md +194 -0
  145. package/vendor/BadCase/rn/pr-info/rntpc_react-native-reanimated-82.json +198 -0
  146. package/vendor/BadCase/rn/pr-info/rntpc_react-native-reanimated-82.md +67 -0
  147. package/vendor/BadCase/rn/pr-info/rntpc_react-native-screens-87.json +198 -0
  148. package/vendor/BadCase/rn/pr-info/rntpc_react-native-screens-87.md +38 -0
  149. package/vendor/BadCase/rn/pr-info/rntpc_react-native-screens-93.json +208 -0
  150. package/vendor/BadCase/rn/pr-info/rntpc_react-native-screens-93.md +34 -0
  151. package/vendor/BadCase/rn/pr-info/rntpc_react-native-spring-scrollview-38.json +222 -0
  152. package/vendor/BadCase/rn/pr-info/rntpc_react-native-spring-scrollview-38.md +56 -0
  153. package/vendor/BadCase/rn/pr-info/rntpc_react-native-svg-117.json +463 -0
  154. package/vendor/BadCase/rn/pr-info/rntpc_react-native-svg-117.md +383 -0
  155. package/vendor/BadCase/rn/pr-info/rntpc_react-native-video-66.json +464 -0
  156. package/vendor/BadCase/rn/pr-info/rntpc_react-native-video-66.md +565 -0
  157. package/vendor/BadCase/rn/pr-info/rntpc_react-native-webview-112.json +198 -0
  158. package/vendor/BadCase/rn/pr-info/rntpc_react-native-webview-112.md +47 -0
  159. package/vendor/BadCase/rn/pr-info/rntpc_react-native-webview-121.json +232 -0
  160. package/vendor/BadCase/rn/pr-info/rntpc_react-native-webview-121.md +422 -0
  161. package/vendor/BadCase/rn/pr-info/rntpc_react-native-wechat-lib-15.json +295 -0
  162. package/vendor/BadCase/rn/pr-info/rntpc_react-native-wechat-lib-15.md +1038 -0
  163. package/vendor/BadCase/rn/rules/R-01-/345/205/250/345/261/217/347/252/227/345/217/243/347/212/266/346/200/201/347/256/241/347/220/206/345/256/214/346/225/264/346/200/247.md +20 -0
  164. package/vendor/BadCase/rn/rules/R-02-/350/265/204/346/272/220URI/345/275/242/346/200/201/345/210/206/346/224/257/350/246/206/347/233/226.md +21 -0
  165. package/vendor/BadCase/rn/rules/R-03-/351/231/204/345/261/236/346/223/215/344/275/234/345/244/261/350/264/245/351/230/273/346/226/255/344/270/273/346/265/201/347/250/213.md +20 -0
  166. package/vendor/BadCase/rn/rules/R-04-/345/274/202/346/255/245/345/233/236/350/260/203/346/263/250/345/206/214/346/227/266/345/272/217.md +20 -0
  167. package/vendor/BadCase/rn/rules/R-05-/346/250/241/345/235/227/345/257/274/345/205/245/350/267/257/345/276/204/350/247/204/350/214/203.md +19 -0
  168. package/vendor/BadCase/rn/rules/R-06-/344/274/240/346/204/237/345/231/250/347/241/254/344/273/266/346/235/203/351/231/220/346/214/211/351/234/200/350/216/267/345/217/226.md +21 -0
  169. package/vendor/BadCase/rn/rules/R-07-/346/231/272/350/203/275/346/214/207/351/222/210/347/224/237/345/221/275/345/221/250/346/234/237/347/256/241/347/220/206.md +20 -0
  170. package/vendor/BadCase/rn/rules/R-08-/346/211/213/345/212/277/344/272/213/344/273/266/346/263/250/345/206/214/344/270/216/345/206/262/347/252/201/345/244/204/347/220/206.md +22 -0
  171. package/vendor/BadCase/rn/rules/R-09-/346/250/252/347/253/226/345/261/217/345/244/232/345/275/242/346/200/201/345/270/203/345/261/200/351/200/202/351/205/215.md +20 -0
  172. package/vendor/BadCase/rn/rules/R-10-/346/267/261/350/211/262/346/250/241/345/274/217/344/270/273/351/242/230/351/242/234/350/211/262/351/200/202/351/205/215.md +19 -0
  173. package/vendor/BadCase/rn/rules/R-11-/346/216/245/345/217/243/345/233/236/350/260/203/345/256/236/347/216/260/345/256/214/346/225/264/346/200/247.md +20 -0
  174. package/vendor/BadCase/rn/rules/R-12-/345/216/237/347/224/237/350/277/220/350/241/214/346/227/266/350/265/204/346/272/220/346/236/220/346/236/204/346/227/266/345/272/217.md +20 -0
  175. package/vendor/BadCase/rn/rules/R-13-/346/226/207/344/273/266/346/225/260/346/215/256/347/274/226/347/240/201/344/270/216/346/240/274/345/274/217/345/205/274/345/256/271.md +21 -0
  176. package/vendor/BadCase/rn/rules/R-14-/345/212/250/347/224/273/345/210/235/345/247/213/345/214/226/346/227/266/345/272/217/344/270/216/347/212/266/346/200/201/345/220/214/346/255/245.md +20 -0
  177. package/vendor/BadCase/rn/rules/R-15-/347/212/266/346/200/201/346/214/201/344/271/205/345/214/226/344/270/216/351/207/215/345/220/257/351/200/273/350/276/221/344/270/200/350/207/264/346/200/247.md +20 -0
  178. package/vendor/BadCase/rn/rules/R-16-/346/225/217/346/204/237/344/277/241/346/201/257/346/227/245/345/277/227/346/263/204/351/234/262.md +19 -0
  179. package/vendor/BadCase/rn/rules/R-17-/345/252/222/344/275/223/350/265/204/346/272/220/347/224/237/345/221/275/345/221/250/346/234/237/344/270/216/351/224/231/350/257/257/345/244/204/347/220/206.md +21 -0
  180. package/vendor/BadCase/rn/rules/R-18-/350/203/275/345/212/233/346/236/232/344/270/276/351/205/215/347/275/256/345/256/214/346/225/264/346/200/247.md +19 -0
  181. package/vendor/BadCase/rn/rules/R-19-/345/233/276/345/275/242/346/270/262/346/237/223/345/261/236/346/200/247/347/273/247/346/211/277/344/270/216/351/207/215/347/275/256.md +19 -0
  182. package/vendor/MCP/README.md +490 -0
  183. package/vendor/MCP/config.json +29 -0
  184. package/vendor/MCP/package.json +23 -0
  185. package/vendor/MCP/scripts/analyze-demo-coverage.cjs +1203 -0
  186. package/vendor/MCP/scripts/analyze-xts-coverage.cjs +1245 -0
  187. package/vendor/MCP/scripts/deveco_docs.js +247 -0
  188. package/vendor/MCP/scripts/extract-interfaces.cjs +1487 -0
  189. package/vendor/MCP/scripts/flutter-analyze-demo-coverage.cjs +666 -0
  190. package/vendor/MCP/scripts/flutter-analyze-xts-coverage.cjs +684 -0
  191. package/vendor/MCP/scripts/flutter-extract-interfaces.cjs +1251 -0
  192. package/vendor/MCP/scripts/flutter-render-spec-doc.cjs +351 -0
  193. package/vendor/MCP/scripts/render-spec-doc.cjs +347 -0
  194. package/vendor/MCP/scripts/rn-analyze-demo-coverage.cjs +645 -0
  195. package/vendor/MCP/scripts/rn-analyze-test-coverage.cjs +614 -0
  196. package/vendor/MCP/scripts/rn-extract-interfaces.cjs +1462 -0
  197. package/vendor/MCP/scripts/rn-render-spec-doc.cjs +327 -0
  198. package/vendor/MCP/scripts/rn-scan-exports.cjs +1336 -0
  199. package/vendor/MCP/src/client/MCPClientPool.js +220 -0
  200. package/vendor/MCP/src/config/ConfigLoader.js +189 -0
  201. package/vendor/MCP/src/executor/ScriptExecutor.js +110 -0
  202. package/vendor/MCP/src/gateway/Gateway.js +451 -0
  203. package/vendor/MCP/src/index.js +87 -0
  204. package/vendor/MCP/src/library/KBToolProvider.js +229 -0
  205. package/vendor/MCP/src/library/logger.js +60 -0
  206. package/vendor/MCP/src/registry/ScriptRegistry.js +238 -0
  207. package/vendor/MCP/src/registry/ToolRegistry.js +111 -0
  208. package/vendor/MCP/src/types.js +115 -0
  209. package/vendor/Server/Skills/arkts-library-test-coverage-check/references/MCP_TOOL_USAGE.md +4 -2
  210. package/vendor/Server/Skills/arkts-library-xts-coverage/SKILL.md +3 -3
  211. package/vendor/Server/Skills/knowledge-import/SKILL.md +1 -1
  212. package/vendor/Server/Skills/knowledge-import/references/MCP_TOOL_USAGE.md +12 -4
  213. package/vendor/Server/Skills/ohos-lib-pr-push/SKILL.md +5 -4
  214. package/vendor/Server/Skills/rn-library-issue-generalizer/SKILL.md +2 -2
  215. package/vendor/Server/Skills/rn-library-known-issue-check/SKILL.md +2 -2
  216. package/vendor/Server/Skills/rnoh-lib-demo-coverage/SKILL.md +1 -2
  217. package/vendor/Server/Skills/rnoh-lib-test-align/references/port-test-demo-guide.md +1 -1
  218. package/vendor/Server/Skills/rnoh-lib-xts-coverage/SKILL.md +1 -2
  219. package/vendor/Server/package.json +5 -1
  220. package/vendor/VERSION +3 -3
package/README.md CHANGED
@@ -165,6 +165,49 @@ npm i -g @ohos-cpf/3rdloop
165
165
  3rdloop serve remove-ext <扩展名> # 移除已安装扩展
166
166
  ```
167
167
 
168
+ ### 场景六:MCP Gateway 装配(kb 检索 / 覆盖率脚本等 AI 工具)
169
+
170
+ npm 包内置 MCP Gateway(`vendor/MCP`)、知识库检索引擎(`vendor/Archive`)与已知问题知识库种子(`vendor/BadCase`)。opencode / deveco-code serve 需要在**全局配置**注册 Gateway 才会在启动时自动 spawn:
171
+
172
+ ```bash
173
+ 3rdloop doctor # 推荐:环境自检,检测到未装配时自动完成装配(幂等)
174
+ 3rdloop mcp status # 查看注册状态与数据目录
175
+ 3rdloop mcp install # 显式装配/重装(doctor 自动装配的底层命令,可单独使用)
176
+ 3rdloop mcp uninstall # 仅移除注册(用户数据保留)
177
+
178
+ # 可选参数
179
+ 3rdloop doctor --no-fix # 仅诊断,不做任何修改
180
+ 3rdloop mcp install --cli opencode # 只注册到 opencode(--cli deveco | opencode | all)
181
+ 3rdloop mcp install --force # 重置用户级配置为包内默认
182
+ ```
183
+
184
+ 装配效果:
185
+
186
+ - `~/.3lib/3rdloop/mcp/config.json` — 用户级 Gateway 配置(脚本/引擎指向包内,随包更新获得新版本)
187
+ - `~/.3lib/3rdloop/kb-data/` — 本地知识库数据(`kb_add_document` / `kb_search` 工具,跨版本更新不丢失)
188
+ - `~/.3lib/3rdloop/BadCase/` — 已知问题知识库副本(RN 检视 SKILL 消费;泛化 SKILL 的写入落在此处,不污染包目录)
189
+ - 装配后**重启 serve**,AI 会话即可调用全部 MCP 工具(kb 检索、覆盖率分析脚本、下游知识库等)
190
+
191
+ > SKILL 中的分析脚本(如 `analyze-xts-coverage.cjs`)通过 `{{skillDir}}/../../../MCP/scripts/` 相对路径调用,npm 安装态与仓库开发态一致,无需额外配置。装配通常无需手动执行——`3rdloop doctor`(README 快速上手第一步)会自动完成;`run/submit` 等任务命令的预检若发现未装配,仅在 stderr 提示一行(不修改任何文件)。
192
+
193
+ ### 场景七:知识回收(把沉淀的知识打包发给维护者)
194
+
195
+ 任务执行会在本机沉淀知识(kb 文档、BadCase 规则、经验索引)。这些知识默认只在你机器上;想贡献给社区/团队,打包发给维护者即可:
196
+
197
+ ```bash
198
+ # 用户侧:打包(纯本地操作,不上传任何数据)
199
+ 3rdloop knowledge export # → ./3rdloop-knowledge-<日期>-<主机名>.zip
200
+ 3rdloop knowledge export --since 2026-09-01 # 只打包该日期后新增的
201
+ 3rdloop knowledge export --note "mp3agic 批次" # 附备注
202
+
203
+ # 维护者侧:收到 zip 后合入(先预演再落位)
204
+ 3rdloop knowledge import <zip> --dry-run # 预览将新增/冲突的文件
205
+ 3rdloop knowledge import <zip> # 落位到本地 kb-data 与 BadCase
206
+ 3rdloop knowledge import <zip> --allow-overwrite # 覆盖同名文件
207
+ ```
208
+
209
+ 包内容:kb 结构化知识文档 + BadCase 规则/案例 + 经验索引清单(仅人工评估参考)。zip 为标准格式(可用系统 unzip 自查内容);不含检索索引(导入后自动重建)。维护者审核后可把精选内容合入仓库 `Archive/data` 与 `BadCase/`,随 npm 版本分发给所有用户。
210
+
168
211
  更多进阶用法(任务管理、`step` 单步执行、`orch` 自定义编排、工作流注册等),见仓库 `cli/README_DEVELOP.md` 或 `3rdloop <子命令> --help`。
169
212
 
170
213
 
package/lib/cli.js CHANGED
@@ -108,7 +108,7 @@ export async function runCli(argv) {
108
108
  return cmdVersion(jsonMode);
109
109
 
110
110
  case 'doctor':
111
- return cmdDoctor({ projectRoot, skillDir, dataDir, quiet });
111
+ return cmdDoctor({ projectRoot, skillDir, dataDir, user3libHome, quiet, rest });
112
112
 
113
113
  case 'run':
114
114
  return cmdRun({ flags, rest, projectRoot, dataDir, skillDir, jsonMode, quiet, verbose, out, u });
@@ -143,8 +143,14 @@ export async function runCli(argv) {
143
143
  case 'config':
144
144
  return cmdConfig({ flags, rest, projectRoot, user3libHome, jsonMode, out });
145
145
 
146
+ case 'mcp':
147
+ return cmdMcpImpl({ rest, user3libHome, jsonMode });
148
+
149
+ case 'knowledge':
150
+ return cmdKnowledgeImpl({ rest, user3libHome, dataDir, jsonMode });
151
+
146
152
  case 'serve':
147
- return cmdServe({ flags, rest, jsonMode, dataDir, user3libHome });
153
+ return cmdServe({ rest, jsonMode, dataDir, user3libHome });
148
154
 
149
155
  case 'update':
150
156
  return cmdUpdate({ flags, rest, jsonMode, out });
@@ -173,9 +179,10 @@ function cmdVersion(jsonMode) {
173
179
 
174
180
  // ─── doctor ───────────────────────────────────────────────────────
175
181
 
176
- async function cmdDoctor({ projectRoot, skillDir, dataDir, quiet }) {
182
+ async function cmdDoctor({ projectRoot, skillDir, dataDir, user3libHome, quiet, rest = [] }) {
177
183
  const { runDoctor } = await import('./doctor.js');
178
- const { ok } = await runDoctor({ projectRoot, skillDir, dataDir, quiet });
184
+ const fix = !rest.includes('--no-fix');
185
+ const { ok } = await runDoctor({ projectRoot, skillDir, dataDir, user3libHome, quiet, fix });
179
186
  return ok ? EXIT.OK : EXIT.ERROR;
180
187
  }
181
188
 
@@ -224,6 +231,26 @@ async function cmdConfig({ flags, rest, projectRoot, user3libHome, jsonMode, out
224
231
  return cmdConfigImpl({ projectRoot, user3libHome, jsonMode, out, rest });
225
232
  }
226
233
 
234
+ // ─── mcp(MCP Gateway 装配)────────────────────────────────────────
235
+
236
+ /**
237
+ * 3rdloop mcp 命令二段分发(转发到 lib/mcp.js)。
238
+ */
239
+ async function cmdMcpImpl({ rest, user3libHome, jsonMode }) {
240
+ const { cmdMcp } = await import('./mcp.js');
241
+ return cmdMcp({ rest, user3libHome, jsonMode });
242
+ }
243
+
244
+ // ─── knowledge(知识打包回收)──────────────────────────────────────
245
+
246
+ /**
247
+ * 3rdloop knowledge 命令二段分发(转发到 lib/knowledge.js)。
248
+ */
249
+ async function cmdKnowledgeImpl({ rest, user3libHome, dataDir, jsonMode }) {
250
+ const { cmdKnowledge } = await import('./knowledge.js');
251
+ return cmdKnowledge({ rest, user3libHome, dataDir, jsonMode });
252
+ }
253
+
227
254
  // ─── update(自更新)─────────────────────────────────────────────
228
255
 
229
256
  async function cmdUpdate({ flags, rest, jsonMode, out }) {
@@ -667,12 +694,18 @@ function printHelp() {
667
694
  3rdloop workflows 列出已注册的固定编排工作流
668
695
  3rdloop run <工作流名> [--flag <值> ...] 以固定编排执行工作流(阻塞到终态)
669
696
  3rdloop config list|get|set|unset ... 配置 .env 配置项(默认读写 ~/.3lib/.env)
697
+ 3rdloop mcp install [--cli opencode|deveco|all] 装配 MCP Gateway(注册到 AI CLI +
698
+ 种子复制知识库数据/BadCase 到 ~/.3lib/3rdloop/,npm 安装态必需)
699
+ 3rdloop mcp uninstall|status 移除注册 / 查看装配状态
700
+ 3rdloop knowledge export [--since <date>] [--note <text>]
701
+ 打包本地知识(kb 文档 + BadCase)为 zip 发给维护者回收
702
+ 3rdloop knowledge import <zip> [--dry-run] 维护者合入收到的知识包
670
703
  3rdloop serve [--port N] [--web-port N] 启动 Server 后端 + Web 前端(同时启动)
671
704
  [--web-root <dir>] [--ext-root <dir>] [--ext <name,...>] [--no-ext] [--open]
672
705
  3rdloop serve install-ext <dir> 安装扩展(tag/issue/prcheck 等二级功能)
673
706
  3rdloop serve list-ext | remove-ext <name> 扩展管理
674
707
  3rdloop update [--check] [--yes] [--registry <url>] 自更新到 npm 最新版
675
- 3rdloop doctor 环境自检
708
+ 3rdloop doctor [--no-fix] 环境自检(默认自动装配 MCP Gateway;--no-fix 仅诊断)
676
709
  3rdloop version 版本信息
677
710
 
678
711
  工作流机制:
package/lib/doctor.js CHANGED
@@ -63,14 +63,16 @@ async function probeServe(baseUrl) {
63
63
 
64
64
  /**
65
65
  * 收集全部检查项(doctor 与 precheckEnv 共用)。
66
- * 每项:{ name, passed, detail, fix }——fix 为不通过时的修复提示。
66
+ * 每项:{ name, passed, detail, fix, warning? }——fix 为不通过时的修复提示;
67
+ * warning: true 的项仅 doctor 展示提示,不参与 precheckEnv 阻断(MCP 等增强能力缺失不阻断核心引擎)。
67
68
  * @param {object} opts
68
69
  * @param {string} opts.projectRoot
69
70
  * @param {string} opts.skillDir
70
71
  * @param {string} opts.dataDir
71
- * @returns {Promise<Array<{name: string, passed: boolean, detail?: string, fix?: string}>>}
72
+ * @param {string} [opts.user3libHome] - ~/.3lib(MCP 装配检查用;缺省按 ~ 推导)
73
+ * @returns {Promise<Array<{name: string, passed: boolean, detail?: string, fix?: string, warning?: boolean}>>}
72
74
  */
73
- async function collectChecks({ projectRoot, skillDir, dataDir }) {
75
+ async function collectChecks({ projectRoot, skillDir, dataDir, user3libHome = '' }) {
74
76
  const checks = [];
75
77
 
76
78
  // 1. Node.js 版本
@@ -161,30 +163,120 @@ async function collectChecks({ projectRoot, skillDir, dataDir }) {
161
163
  fix: `端口 ${cliCfg.port} 被异常进程占用,请清理后重试(lsof -i :${cliCfg.port} 定位 / 任务管理器结束进程)`,
162
164
  });
163
165
 
166
+ // 8. MCP Gateway 装配(警告级:不阻断核心引擎,仅影响 kb 工具/脚本工具/知识库检索)
167
+ // AI CLI 全局配置中 mcp-gateway 已注册且指向存在的入口脚本 → 通过
168
+ const mcpCheck = await checkMcpRegistration(cliType);
169
+ checks.push({ warning: true, ...mcpCheck });
170
+
164
171
  return checks;
165
172
  }
166
173
 
174
+ /**
175
+ * 检查 MCP Gateway 是否已装配(AI CLI 全局配置注册 + 入口脚本存在)。
176
+ * 宽容实现:不 import lib/mcp.js 的完整装配(避免 doctor 依赖装配状态本身),
177
+ * 仅读配置文件判断。
178
+ */
179
+ async function checkMcpRegistration(cliType) {
180
+ const home = process.env['HOME'] || process.env['USERPROFILE'] || '';
181
+ const configRoot = process.env['XDG_CONFIG_HOME'] || path.join(home, '.config');
182
+ const files = [
183
+ path.join(configRoot, 'opencode', 'opencode.json'),
184
+ path.join(configRoot, 'deveco', 'deveco.jsonc'),
185
+ ];
186
+ const details = [];
187
+ let anyRegistered = false;
188
+ for (const file of files) {
189
+ const label = path.basename(path.dirname(file));
190
+ if (!fs.existsSync(file)) {
191
+ details.push(`${label}: 未注册`);
192
+ continue;
193
+ }
194
+ try {
195
+ const raw = fs.readFileSync(file, 'utf8');
196
+ const json = JSON.parse(_stripJsoncComments(raw));
197
+ const entry = json?.mcp?.['mcp-gateway'];
198
+ if (!entry) {
199
+ details.push(`${label}: 未注册`);
200
+ continue;
201
+ }
202
+ // 入口脚本存在性(command 数组第 2 个元素)
203
+ const entryPath = Array.isArray(entry.command) ? entry.command[1] : null;
204
+ if (entryPath && fs.existsSync(entryPath)) {
205
+ details.push(`${label}: 已注册`);
206
+ anyRegistered = true;
207
+ } else {
208
+ details.push(`${label}: 已注册但入口脚本不存在(${entryPath || '未配置'})`);
209
+ }
210
+ } catch {
211
+ details.push(`${label}: 配置解析失败`);
212
+ }
213
+ }
214
+ return {
215
+ name: 'MCP Gateway 装配',
216
+ passed: anyRegistered,
217
+ detail: details.join(';'),
218
+ fix: '3rdloop doctor(自动装配)或 3rdloop mcp install(kb 检索/脚本工具/知识库检索需要)',
219
+ };
220
+ }
221
+
222
+ /** 剥离 JSONC 注释(// 行注释与 /* 块注释)。 */
223
+ function _stripJsoncComments(raw) {
224
+ return raw
225
+ .replace(/\/\*[\s\S]*?\*\//g, '')
226
+ .replace(/(^|[^:"'\\])\/\/.*$/gm, '$1');
227
+ }
228
+
167
229
  /**
168
230
  * 执行环境自检(3rdloop doctor 命令实现)。
169
231
  *
232
+ * 默认自动修复(fix=true):MCP Gateway 未装配时自动执行装配(等价 3rdloop mcp install,
233
+ * 幂等可重跑);--no-fix 仅诊断不修改任何文件。
234
+ *
170
235
  * @param {object} opts
171
236
  * @param {string} opts.projectRoot
172
237
  * @param {string} opts.skillDir
173
238
  * @param {string} opts.dataDir
239
+ * @param {string} [opts.user3libHome] - ~/.3lib(自动装配目标)
174
240
  * @param {boolean} [opts.quiet] - 静默模式(不打印表格,仅返回结果)
241
+ * @param {boolean} [opts.fix] - 自动修复开关(默认 true)
175
242
  * @returns {Promise<{ ok: boolean, checks: Array<{name: string, passed: boolean, detail?: string, fix?: string}> }>}
176
243
  */
177
244
  export async function runDoctor(opts = {}) {
178
- const checks = await collectChecks(opts);
245
+ const { fix = true } = opts;
246
+ let checks = await collectChecks(opts);
179
247
 
180
- // 汇总
181
- const ok = checks.every(c => c.passed);
248
+ // ── 自动修复:MCP Gateway 未装配 → 自动执行装配并复查 ──
249
+ if (fix) {
250
+ const mcpIdx = checks.findIndex(c => c.name === 'MCP Gateway 装配' && !c.passed);
251
+ if (mcpIdx !== -1) {
252
+ if (!opts.quiet) {
253
+ process.stderr.write(`\n${C.yellow}检测到 MCP Gateway 未装配,正在自动装配(3rdloop mcp install)...${C.reset}\n`);
254
+ }
255
+ try {
256
+ const { mcpInstall } = await import('./mcp.js');
257
+ const code = await mcpInstall({ user3libHome: opts.user3libHome || '', rest: [], jsonMode: false });
258
+ if (code === 0) {
259
+ const recheck = await checkMcpRegistration();
260
+ checks[mcpIdx] = { warning: true, ...recheck };
261
+ } else {
262
+ checks[mcpIdx].detail += ';自动装配失败,请手动执行 3rdloop mcp install 查看报错';
263
+ }
264
+ } catch (err) {
265
+ checks[mcpIdx].detail += `;自动装配异常: ${err.message}`;
266
+ }
267
+ }
268
+ }
269
+
270
+ // 汇总:warning 项不参与通过判定(提示性)
271
+ const ok = checks.every(c => c.passed || c.warning);
182
272
 
183
- // 打印(失败项附加修复提示)
273
+ // 打印(失败项附加修复提示;警告项用 ⚠ 标记)
184
274
  if (!opts.quiet) {
185
275
  process.stderr.write(`\n${C.bold}3rdloop doctor 环境自检${C.reset}${C.gray}(AI CLI: ${resolveCliType()})${C.reset}\n`);
186
276
  for (const c of checks) {
187
- const icon = c.passed ? `${C.green}✓${C.reset}` : `${C.red}✗${C.reset}`;
277
+ const icon = c.passed
278
+ ? `${C.green}✓${C.reset}`
279
+ : (c.warning ? `${C.yellow}⚠${C.reset}` : `${C.red}✗${C.reset}`);
188
280
  process.stderr.write(` ${icon} ${c.name}`);
189
281
  if (c.detail) process.stderr.write(` ${C.gray}${c.detail}${C.reset}`);
190
282
  process.stderr.write('\n');
@@ -202,7 +294,9 @@ export async function runDoctor(opts = {}) {
202
294
  *
203
295
  * 与 doctor 同一检查集,语义差异:
204
296
  * - serve 未运行不算失败(执行命令时会自动拉起;端口异常仍算失败)
205
- * - 轻量:仅文件/PATH/端口探测,不拉起任何进程、不触引擎
297
+ * - 轻量:仅文件/PATH/端口探测,不拉起任何进程、不触引擎、**不改任何文件**
298
+ * (MCP 装配等修复动作只在 3rdloop doctor 中执行,任务命令保持无副作用)
299
+ * - MCP 未装配为警告级:不阻断,仅 stderr 提示一行
206
300
  *
207
301
  * @param {object} opts - { projectRoot, skillDir, dataDir }(与 runDoctor 相同)
208
302
  * @returns {Promise<{ ok: boolean, failures: Array<{name: string, detail?: string, fix?: string}> }>}
@@ -210,8 +304,15 @@ export async function runDoctor(opts = {}) {
210
304
  export async function precheckEnv(opts = {}) {
211
305
  const checks = await collectChecks(opts);
212
306
  const failures = checks
213
- .filter(c => !c.passed)
307
+ .filter(c => !c.passed && !c.warning)
214
308
  .map(({ name, detail, fix }) => ({ name, detail, fix }));
309
+
310
+ // 警告级提示(不阻断):MCP 未装配时提醒一次
311
+ const mcpWarn = checks.find(c => c.name === 'MCP Gateway 装配' && !c.passed);
312
+ if (mcpWarn) {
313
+ process.stderr.write(`提示: MCP Gateway 未装配(kb 检索/脚本工具不可用),运行 ${C.cyan}3rdloop doctor${C.reset} 可自动装配\n`);
314
+ }
315
+
215
316
  return { ok: failures.length === 0, failures };
216
317
  }
217
318