dsh-crwu-workbench 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 (479) hide show
  1. package/CHANGELOG.md +1516 -0
  2. package/LICENSE +26 -0
  3. package/README.en.md +204 -0
  4. package/README.md +521 -0
  5. package/SECURITY.md +39 -0
  6. package/bin/darwin-arm64/crwu +0 -0
  7. package/bin/darwin-arm64/dws +0 -0
  8. package/bin/darwin-arm64/ossutil +0 -0
  9. package/bin/manifest.json +82 -0
  10. package/bin/win32-x64/crwu.exe +0 -0
  11. package/bin/win32-x64/dws.exe +4 -0
  12. package/bin/win32-x64/ossutil.exe +0 -0
  13. package/common/skills/.synced.json +8 -0
  14. package/common/skills/crwu-dws/SKILL.md +208 -0
  15. package/common/skills/crwu-dws/references/00-/347/233/256/345/275/225/345/277/253/347/205/247schema.md +113 -0
  16. package/common/skills/crwu-dws/references/01-/345/256/241/346/240/270/344/270/213/350/275/275/344/270/216manifest/350/247/204/350/214/203.md +115 -0
  17. package/common/skills/crwu-dws/references/02-/347/274/223/345/255/230/344/270/216/345/205/234/345/272/225/346/237/245/346/211/276/350/247/204/350/214/203.md +119 -0
  18. package/common/skills/crwu-dws/scripts/test_dws_source_contract.py +493 -0
  19. package/common/skills/crwu-h3yun-login/SKILL.md +130 -0
  20. package/common/skills/crwu-h3yun-query/SKILL.md +192 -0
  21. package/config/crwu-workbench.yml +26 -0
  22. package/cordis.patch.yml +46 -0
  23. package/lib/client.js +10346 -0
  24. package/lib/index.js +11584 -0
  25. package/package.json +119 -0
  26. package/scripts/prepare.mjs +59 -0
  27. package/skills/README.md +26 -0
  28. package/skills/crwu/crwu-audit/SKILL.md +152 -0
  29. package/skills/crwu/crwu-audit/references/00-input-and-route-profile.md +232 -0
  30. package/skills/crwu/crwu-audit/references/01-report-id-resolution.md +13 -0
  31. package/skills/crwu/crwu-audit/references/02-scope-classification.md +25 -0
  32. package/skills/crwu/crwu-audit/references/03-asset-classification.md +27 -0
  33. package/skills/crwu/crwu-audit/references/04-business-classification.md +63 -0
  34. package/skills/crwu/crwu-audit/references/05-method-classification.md +66 -0
  35. package/skills/crwu/crwu-audit/references/06-overlay-classification.md +42 -0
  36. package/skills/crwu/crwu-audit/references/07-skill-registry.md +57 -0
  37. package/skills/crwu/crwu-audit/references/08-union-dispatch-rules.md +142 -0
  38. package/skills/crwu/crwu-audit/references/09-review-risk-classification.md +85 -0
  39. package/skills/crwu/crwu-audit/references/10-capability-gap-proposal.md +68 -0
  40. package/skills/crwu/crwu-audit/references/11-html-delivery-spec.md +881 -0
  41. package/skills/crwu/crwu-audit/references/12-leaf-common-contract.md +202 -0
  42. package/skills/crwu/crwu-audit/references/13-dingtalk-result-publish.md +88 -0
  43. package/skills/crwu/crwu-audit/references/14-orchestration-workflow.md +52 -0
  44. package/skills/crwu/crwu-audit/references/99-maintenance.md +62 -0
  45. package/skills/crwu/crwu-audit/scripts/README.md +157 -0
  46. package/skills/crwu/crwu-audit/scripts/audit_delivery.py +2736 -0
  47. package/skills/crwu/crwu-audit/scripts/audit_result.schema.json +1659 -0
  48. package/skills/crwu/crwu-audit/scripts/examples/audit-result.sample.json +739 -0
  49. package/skills/crwu/crwu-audit/scripts/fetch_review_records.py +85 -0
  50. package/skills/crwu/crwu-audit/scripts/media_extract.py +513 -0
  51. package/skills/crwu/crwu-audit/scripts/prepare_materials.py +1252 -0
  52. package/skills/crwu/crwu-audit/scripts/test_audit_delivery.py +1678 -0
  53. package/skills/crwu/crwu-audit/scripts/test_audit_multiaxis_router.py +1339 -0
  54. package/skills/crwu/crwu-audit/scripts/test_fetch_review_records.py +77 -0
  55. package/skills/crwu/crwu-audit/scripts/test_media_extract.py +332 -0
  56. package/skills/crwu/crwu-audit/scripts/test_prepare_materials.py +1081 -0
  57. package/skills/crwu/crwu-audit/template/audit-report.html +435 -0
  58. package/skills/crwu/crwu-audit-asset-asset-group-goodwill/SKILL.md +38 -0
  59. package/skills/crwu/crwu-audit-asset-asset-group-goodwill/references/00-applicability.md +28 -0
  60. package/skills/crwu/crwu-audit-asset-asset-group-goodwill/references/01-kb-assembly.md +31 -0
  61. package/skills/crwu/crwu-audit-asset-asset-group-goodwill/references/02-review-focus.md +21 -0
  62. package/skills/crwu/crwu-audit-asset-asset-group-goodwill/references/03-common-contract.md +202 -0
  63. package/skills/crwu/crwu-audit-asset-debt/SKILL.md +38 -0
  64. package/skills/crwu/crwu-audit-asset-debt/references/00-applicability.md +40 -0
  65. package/skills/crwu/crwu-audit-asset-debt/references/01-kb-assembly.md +41 -0
  66. package/skills/crwu/crwu-audit-asset-debt/references/02-review-focus.md +54 -0
  67. package/skills/crwu/crwu-audit-asset-debt/references/03-common-contract.md +202 -0
  68. package/skills/crwu/crwu-audit-asset-enterprise-value/SKILL.md +38 -0
  69. package/skills/crwu/crwu-audit-asset-enterprise-value/references/00-applicability.md +31 -0
  70. package/skills/crwu/crwu-audit-asset-enterprise-value/references/01-kb-assembly.md +35 -0
  71. package/skills/crwu/crwu-audit-asset-enterprise-value/references/02-review-focus.md +33 -0
  72. package/skills/crwu/crwu-audit-asset-enterprise-value/references/03-common-contract.md +202 -0
  73. package/skills/crwu/crwu-audit-asset-equipment/SKILL.md +38 -0
  74. package/skills/crwu/crwu-audit-asset-equipment/references/00-applicability.md +40 -0
  75. package/skills/crwu/crwu-audit-asset-equipment/references/01-kb-assembly.md +39 -0
  76. package/skills/crwu/crwu-audit-asset-equipment/references/02-review-focus.md +52 -0
  77. package/skills/crwu/crwu-audit-asset-equipment/references/03-common-contract.md +202 -0
  78. package/skills/crwu/crwu-audit-asset-intangible/SKILL.md +38 -0
  79. package/skills/crwu/crwu-audit-asset-intangible/references/00-applicability.md +36 -0
  80. package/skills/crwu/crwu-audit-asset-intangible/references/01-kb-assembly.md +40 -0
  81. package/skills/crwu/crwu-audit-asset-intangible/references/02-review-focus.md +68 -0
  82. package/skills/crwu/crwu-audit-asset-intangible/references/03-common-contract.md +202 -0
  83. package/skills/crwu/crwu-audit-asset-inventory/SKILL.md +38 -0
  84. package/skills/crwu/crwu-audit-asset-inventory/references/00-applicability.md +28 -0
  85. package/skills/crwu/crwu-audit-asset-inventory/references/01-kb-assembly.md +31 -0
  86. package/skills/crwu/crwu-audit-asset-inventory/references/02-review-focus.md +21 -0
  87. package/skills/crwu/crwu-audit-asset-inventory/references/03-common-contract.md +202 -0
  88. package/skills/crwu/crwu-audit-asset-mining-right/SKILL.md +38 -0
  89. package/skills/crwu/crwu-audit-asset-mining-right/references/00-applicability.md +31 -0
  90. package/skills/crwu/crwu-audit-asset-mining-right/references/01-kb-assembly.md +35 -0
  91. package/skills/crwu/crwu-audit-asset-mining-right/references/02-review-focus.md +33 -0
  92. package/skills/crwu/crwu-audit-asset-mining-right/references/03-common-contract.md +202 -0
  93. package/skills/crwu/crwu-audit-asset-other/SKILL.md +38 -0
  94. package/skills/crwu/crwu-audit-asset-other/references/00-applicability.md +28 -0
  95. package/skills/crwu/crwu-audit-asset-other/references/01-kb-assembly.md +31 -0
  96. package/skills/crwu/crwu-audit-asset-other/references/02-review-focus.md +21 -0
  97. package/skills/crwu/crwu-audit-asset-other/references/03-common-contract.md +202 -0
  98. package/skills/crwu/crwu-audit-asset-portfolio/SKILL.md +38 -0
  99. package/skills/crwu/crwu-audit-asset-portfolio/references/00-applicability.md +28 -0
  100. package/skills/crwu/crwu-audit-asset-portfolio/references/01-kb-assembly.md +31 -0
  101. package/skills/crwu/crwu-audit-asset-portfolio/references/02-review-focus.md +21 -0
  102. package/skills/crwu/crwu-audit-asset-portfolio/references/03-common-contract.md +202 -0
  103. package/skills/crwu/crwu-audit-asset-realestate/SKILL.md +38 -0
  104. package/skills/crwu/crwu-audit-asset-realestate/references/00-applicability.md +43 -0
  105. package/skills/crwu/crwu-audit-asset-realestate/references/01-kb-assembly.md +75 -0
  106. package/skills/crwu/crwu-audit-asset-realestate/references/02-review-focus.md +93 -0
  107. package/skills/crwu/crwu-audit-asset-realestate/references/03-common-contract.md +202 -0
  108. package/skills/crwu/crwu-audit-asset-scrap-materials/SKILL.md +38 -0
  109. package/skills/crwu/crwu-audit-asset-scrap-materials/references/00-applicability.md +28 -0
  110. package/skills/crwu/crwu-audit-asset-scrap-materials/references/01-kb-assembly.md +31 -0
  111. package/skills/crwu/crwu-audit-asset-scrap-materials/references/02-review-focus.md +21 -0
  112. package/skills/crwu/crwu-audit-asset-scrap-materials/references/03-common-contract.md +202 -0
  113. package/skills/crwu/crwu-audit-asset-transport-equipment/SKILL.md +38 -0
  114. package/skills/crwu/crwu-audit-asset-transport-equipment/references/00-applicability.md +31 -0
  115. package/skills/crwu/crwu-audit-asset-transport-equipment/references/01-kb-assembly.md +35 -0
  116. package/skills/crwu/crwu-audit-asset-transport-equipment/references/02-review-focus.md +33 -0
  117. package/skills/crwu/crwu-audit-asset-transport-equipment/references/03-common-contract.md +202 -0
  118. package/skills/crwu/crwu-audit-biz-asset-operation/SKILL.md +38 -0
  119. package/skills/crwu/crwu-audit-biz-asset-operation/references/00-applicability.md +30 -0
  120. package/skills/crwu/crwu-audit-biz-asset-operation/references/01-kb-assembly.md +32 -0
  121. package/skills/crwu/crwu-audit-biz-asset-operation/references/02-review-focus.md +42 -0
  122. package/skills/crwu/crwu-audit-biz-asset-operation/references/03-common-contract.md +202 -0
  123. package/skills/crwu/crwu-audit-biz-consulting-review/SKILL.md +38 -0
  124. package/skills/crwu/crwu-audit-biz-consulting-review/references/00-applicability.md +30 -0
  125. package/skills/crwu/crwu-audit-biz-consulting-review/references/01-kb-assembly.md +32 -0
  126. package/skills/crwu/crwu-audit-biz-consulting-review/references/02-review-focus.md +40 -0
  127. package/skills/crwu/crwu-audit-biz-consulting-review/references/03-common-contract.md +202 -0
  128. package/skills/crwu/crwu-audit-biz-financial-reporting/SKILL.md +38 -0
  129. package/skills/crwu/crwu-audit-biz-financial-reporting/references/00-applicability.md +41 -0
  130. package/skills/crwu/crwu-audit-biz-financial-reporting/references/01-kb-assembly.md +40 -0
  131. package/skills/crwu/crwu-audit-biz-financial-reporting/references/02-review-focus.md +64 -0
  132. package/skills/crwu/crwu-audit-biz-financial-reporting/references/03-common-contract.md +202 -0
  133. package/skills/crwu/crwu-audit-biz-financing-debt/SKILL.md +38 -0
  134. package/skills/crwu/crwu-audit-biz-financing-debt/references/00-applicability.md +31 -0
  135. package/skills/crwu/crwu-audit-biz-financing-debt/references/01-kb-assembly.md +34 -0
  136. package/skills/crwu/crwu-audit-biz-financing-debt/references/02-review-focus.md +47 -0
  137. package/skills/crwu/crwu-audit-biz-financing-debt/references/03-common-contract.md +202 -0
  138. package/skills/crwu/crwu-audit-biz-investment-capital/SKILL.md +38 -0
  139. package/skills/crwu/crwu-audit-biz-investment-capital/references/00-applicability.md +31 -0
  140. package/skills/crwu/crwu-audit-biz-investment-capital/references/01-kb-assembly.md +34 -0
  141. package/skills/crwu/crwu-audit-biz-investment-capital/references/02-review-focus.md +47 -0
  142. package/skills/crwu/crwu-audit-biz-investment-capital/references/03-common-contract.md +202 -0
  143. package/skills/crwu/crwu-audit-biz-judicial-liquidation-compensation/SKILL.md +38 -0
  144. package/skills/crwu/crwu-audit-biz-judicial-liquidation-compensation/references/00-applicability.md +30 -0
  145. package/skills/crwu/crwu-audit-biz-judicial-liquidation-compensation/references/01-kb-assembly.md +32 -0
  146. package/skills/crwu/crwu-audit-biz-judicial-liquidation-compensation/references/02-review-focus.md +40 -0
  147. package/skills/crwu/crwu-audit-biz-judicial-liquidation-compensation/references/03-common-contract.md +202 -0
  148. package/skills/crwu/crwu-audit-biz-tax-history/SKILL.md +38 -0
  149. package/skills/crwu/crwu-audit-biz-tax-history/references/00-applicability.md +29 -0
  150. package/skills/crwu/crwu-audit-biz-tax-history/references/01-kb-assembly.md +30 -0
  151. package/skills/crwu/crwu-audit-biz-tax-history/references/02-review-focus.md +33 -0
  152. package/skills/crwu/crwu-audit-biz-tax-history/references/03-common-contract.md +202 -0
  153. package/skills/crwu/crwu-audit-biz-transaction-disposal/SKILL.md +38 -0
  154. package/skills/crwu/crwu-audit-biz-transaction-disposal/references/00-applicability.md +31 -0
  155. package/skills/crwu/crwu-audit-biz-transaction-disposal/references/01-kb-assembly.md +34 -0
  156. package/skills/crwu/crwu-audit-biz-transaction-disposal/references/02-review-focus.md +47 -0
  157. package/skills/crwu/crwu-audit-biz-transaction-disposal/references/03-common-contract.md +202 -0
  158. package/skills/crwu/crwu-audit-datacheck/SKILL.md +59 -0
  159. package/skills/crwu/crwu-audit-datacheck/references/00-KB/350/243/205/351/205/215/350/241/250.md +25 -0
  160. package/skills/crwu/crwu-audit-datacheck/references/01-runtime-and-check-catalog.md +139 -0
  161. package/skills/crwu/crwu-audit-datacheck/scripts/recalc_check.py +521 -0
  162. package/skills/crwu/crwu-audit-datacheck/scripts/test_recalc_check.py +419 -0
  163. package/skills/crwu/crwu-audit-datacheck/scripts/test_skill_self_containment.py +44 -0
  164. package/skills/crwu/crwu-audit-external-data/SKILL.md +73 -0
  165. package/skills/crwu/crwu-audit-external-data/references/00-KB/350/243/205/351/205/215/350/241/250.md +38 -0
  166. package/skills/crwu/crwu-audit-external-data/references/01-connector-access.md +116 -0
  167. package/skills/crwu/crwu-audit-external-data/references/02-verification-workflow.md +78 -0
  168. package/skills/crwu/crwu-audit-external-data/scripts/connector_probe.py +374 -0
  169. package/skills/crwu/crwu-audit-external-data/scripts/test_connector_probe.py +264 -0
  170. package/skills/crwu/crwu-audit-output-filter/SKILL.md +34 -0
  171. package/skills/crwu/crwu-audit-output-filter/references/00-applicability.md +7 -0
  172. package/skills/crwu/crwu-audit-output-filter/references/01-kb-assembly.md +11 -0
  173. package/skills/crwu/crwu-audit-output-filter/references/02-review-focus.md +25 -0
  174. package/skills/crwu/crwu-audit-public-general-standards/SKILL.md +46 -0
  175. package/skills/crwu/crwu-audit-public-general-standards/references/00-applicability.md +41 -0
  176. package/skills/crwu/crwu-audit-public-general-standards/references/01-kb-assembly.md +66 -0
  177. package/skills/crwu/crwu-audit-public-general-standards/references/02-review-focus.md +111 -0
  178. package/skills/crwu/crwu-audit-public-general-standards/references/03-execution-contract.md +89 -0
  179. package/skills/crwu/crwu-dev-audit-optimize/SKILL.md +98 -0
  180. package/skills/crwu/crwu-dev-audit-optimize/references/00-/344/274/230/345/214/226/350/247/204/350/214/203/344/270/216/346/226/207/344/273/266/350/220/275/347/202/271.md +132 -0
  181. package/skills/crwu/crwu-dev-audit-optimize/references/01-/345/217/215/351/246/210/345/256/232/344/275/215/344/270/216/347/224/273/345/203/217/346/265/201/347/250/213.md +108 -0
  182. package/skills/crwu/crwu-dev-audit-optimize/references/02-/346/226/271/346/241/210/346/250/241/346/235/277/344/270/216/347/241/256/350/256/244/351/227/250/347/246/201.md +92 -0
  183. package/skills/crwu/crwu-dev-audit-optimize/references/03-AI/344/272/272/345/267/245/345/267/256/350/267/235/345/210/206/346/236/220/346/265/201/347/250/213.md +95 -0
  184. package/skills/crwu/crwu-dev-audit-optimize/scripts/examples/gap-analysis.sample.json +116 -0
  185. package/skills/crwu/crwu-dev-audit-optimize/scripts/gap_analysis.schema.json +33 -0
  186. package/skills/crwu/crwu-dev-audit-optimize/scripts/gap_analysis_delivery.py +475 -0
  187. package/skills/crwu/crwu-dev-audit-optimize/scripts/test_gap_analysis_delivery.py +855 -0
  188. package/skills/crwu/crwu-dev-audit-optimize/template/NOTICE.echarts.txt +7 -0
  189. package/skills/crwu/crwu-dev-audit-optimize/template/echarts.min.js +45 -0
  190. package/skills/crwu/crwu-dev-audit-optimize/template/gap-analysis-report.html +71 -0
  191. package/skills/crwu/crwu-dev-audit-skill-maintainer/SKILL.md +74 -0
  192. package/skills/crwu/crwu-dev-audit-skill-maintainer/references/00-responsibility-and-modes.md +62 -0
  193. package/skills/crwu/crwu-dev-audit-skill-maintainer/references/01-kb-source-discovery.md +89 -0
  194. package/skills/crwu/crwu-dev-audit-skill-maintainer/references/02-child-skill-contract.md +99 -0
  195. package/skills/crwu/crwu-dev-audit-skill-maintainer/references/03-review-item-execution-contract.md +51 -0
  196. package/skills/crwu/crwu-dev-audit-skill-maintainer/references/04-registry-and-mapping-update.md +73 -0
  197. package/skills/crwu/crwu-dev-audit-skill-maintainer/references/05-validation-and-delivery.md +127 -0
  198. package/skills/crwu/crwu-dev-audit-skill-maintainer/references/06-live-routing-reconciliation.md +136 -0
  199. package/skills/crwu/crwu-dev-audit-skill-maintainer/references/07-kb-skill-map.md +411 -0
  200. package/skills/crwu/crwu-dev-audit-skill-maintainer/scripts/README.md +200 -0
  201. package/skills/crwu/crwu-dev-audit-skill-maintainer/scripts/check_audit_skill_mappings.py +2477 -0
  202. package/skills/crwu/crwu-dev-audit-skill-maintainer/scripts/kb_tool.py +577 -0
  203. package/skills/crwu/crwu-dev-audit-skill-maintainer/scripts/test_audit_skill_maintainer.py +5097 -0
  204. package/skills/dws/LICENSE +178 -0
  205. package/skills/dws/NOTICE +17 -0
  206. package/skills/dws/dingtalk-aisearch/SKILL.md +83 -0
  207. package/skills/dws/dingtalk-aisearch/references/aisearch.md +249 -0
  208. package/skills/dws/dingtalk-aisearch/references/intent-guide.md +15 -0
  209. package/skills/dws/dingtalk-aisearch/references/lite-recipes.md +31 -0
  210. package/skills/dws/dingtalk-aitable/SKILL.md +139 -0
  211. package/skills/dws/dingtalk-aitable/references/06-data-analytics.md +11 -0
  212. package/skills/dws/dingtalk-aitable/references/aitable/aitable-advperm.md +251 -0
  213. package/skills/dws/dingtalk-aitable/references/aitable/aitable-attachment.md +49 -0
  214. package/skills/dws/dingtalk-aitable/references/aitable/aitable-best-practices.md +48 -0
  215. package/skills/dws/dingtalk-aitable/references/aitable/aitable-cell-value.md +346 -0
  216. package/skills/dws/dingtalk-aitable/references/aitable/aitable-dashboard-chart.md +46 -0
  217. package/skills/dws/dingtalk-aitable/references/aitable/aitable-data-analysis-sop.md +131 -0
  218. package/skills/dws/dingtalk-aitable/references/aitable/aitable-datasource.md +272 -0
  219. package/skills/dws/dingtalk-aitable/references/aitable/aitable-error-recovery.md +128 -0
  220. package/skills/dws/dingtalk-aitable/references/aitable/aitable-export-import.md +113 -0
  221. package/skills/dws/dingtalk-aitable/references/aitable/aitable-field-properties.md +238 -0
  222. package/skills/dws/dingtalk-aitable/references/aitable/aitable-field.md +186 -0
  223. package/skills/dws/dingtalk-aitable/references/aitable/aitable-filter-sort.md +135 -0
  224. package/skills/dws/dingtalk-aitable/references/aitable/aitable-form.md +130 -0
  225. package/skills/dws/dingtalk-aitable/references/aitable/aitable-formula-guide.md +224 -0
  226. package/skills/dws/dingtalk-aitable/references/aitable/aitable-primary-doc.md +58 -0
  227. package/skills/dws/dingtalk-aitable/references/aitable/aitable-record-create.md +52 -0
  228. package/skills/dws/dingtalk-aitable/references/aitable/aitable-record-delete.md +20 -0
  229. package/skills/dws/dingtalk-aitable/references/aitable/aitable-record-history.md +97 -0
  230. package/skills/dws/dingtalk-aitable/references/aitable/aitable-record-name-key.md +47 -0
  231. package/skills/dws/dingtalk-aitable/references/aitable/aitable-record-query.md +120 -0
  232. package/skills/dws/dingtalk-aitable/references/aitable/aitable-record-share.md +54 -0
  233. package/skills/dws/dingtalk-aitable/references/aitable/aitable-record-stats.md +59 -0
  234. package/skills/dws/dingtalk-aitable/references/aitable/aitable-record-update.md +66 -0
  235. package/skills/dws/dingtalk-aitable/references/aitable/aitable-record-upsert.md +89 -0
  236. package/skills/dws/dingtalk-aitable/references/aitable/aitable-view-config.md +140 -0
  237. package/skills/dws/dingtalk-aitable/references/aitable/aitable-view-extras.md +195 -0
  238. package/skills/dws/dingtalk-aitable/references/aitable/aitable-view-types.md +95 -0
  239. package/skills/dws/dingtalk-aitable/references/aitable/aitable-workflow.md +384 -0
  240. package/skills/dws/dingtalk-aitable/references/aitable-record-ops.md +80 -0
  241. package/skills/dws/dingtalk-aitable/references/aitable-section.md +30 -0
  242. package/skills/dws/dingtalk-aitable/references/aitable.md +59 -0
  243. package/skills/dws/dingtalk-aitable/references/field-rules.md +17 -0
  244. package/skills/dws/dingtalk-aitable/references/intent-guide.md +17 -0
  245. package/skills/dws/dingtalk-aitable/references/recipes/conventions.md +44 -0
  246. package/skills/dws/dingtalk-aitable/references/url-patterns.md +144 -0
  247. package/skills/dws/dingtalk-aitable/scripts/aitable_export_via_task.py +210 -0
  248. package/skills/dws/dingtalk-aitable/scripts/aitable_import_via_task.py +173 -0
  249. package/skills/dws/dingtalk-aitable/scripts/bulk_add_fields.py +273 -0
  250. package/skills/dws/dingtalk-aitable/scripts/import_records.py +333 -0
  251. package/skills/dws/dingtalk-aitable/scripts/upload_attachment.py +190 -0
  252. package/skills/dws/dingtalk-calendar/SKILL.md +137 -0
  253. package/skills/dws/dingtalk-calendar/references/03-meeting.md +56 -0
  254. package/skills/dws/dingtalk-calendar/references/calendar.md +760 -0
  255. package/skills/dws/dingtalk-calendar/references/intent-guide.md +9 -0
  256. package/skills/dws/dingtalk-calendar/references/lite-recipes.md +25 -0
  257. package/skills/dws/dingtalk-calendar/scripts/calendar_free_slot_finder.py +199 -0
  258. package/skills/dws/dingtalk-calendar/scripts/calendar_schedule_meeting.py +233 -0
  259. package/skills/dws/dingtalk-calendar/scripts/calendar_today_agenda.py +139 -0
  260. package/skills/dws/dingtalk-chat/SKILL.md +127 -0
  261. package/skills/dws/dingtalk-chat/references/01-messaging.md +103 -0
  262. package/skills/dws/dingtalk-chat/references/card/callback.md +10 -0
  263. package/skills/dws/dingtalk-chat/references/card/create.md +27 -0
  264. package/skills/dws/dingtalk-chat/references/card/schema.md +14 -0
  265. package/skills/dws/dingtalk-chat/references/card/update.md +13 -0
  266. package/skills/dws/dingtalk-chat/references/chat/chat-bot.md +187 -0
  267. package/skills/dws/dingtalk-chat/references/chat/chat-conversation.md +165 -0
  268. package/skills/dws/dingtalk-chat/references/chat/group-admin.md +144 -0
  269. package/skills/dws/dingtalk-chat/references/chat/group-discovery.md +121 -0
  270. package/skills/dws/dingtalk-chat/references/chat/message-actions.md +132 -0
  271. package/skills/dws/dingtalk-chat/references/chat/message-media.md +76 -0
  272. package/skills/dws/dingtalk-chat/references/chat/message-query.md +135 -0
  273. package/skills/dws/dingtalk-chat/references/chat/thread.md +46 -0
  274. package/skills/dws/dingtalk-chat/references/chat-emoji-list.md +216 -0
  275. package/skills/dws/dingtalk-chat/references/chat.md +140 -0
  276. package/skills/dws/dingtalk-chat/references/contracts.md +70 -0
  277. package/skills/dws/dingtalk-chat/references/intent-guide.md +56 -0
  278. package/skills/dws/dingtalk-contact/SKILL.md +122 -0
  279. package/skills/dws/dingtalk-contact/references/08-directory.md +51 -0
  280. package/skills/dws/dingtalk-contact/references/contact.md +595 -0
  281. package/skills/dws/dingtalk-contact/references/intent-guide.md +14 -0
  282. package/skills/dws/dingtalk-contact/references/lite-recipes.md +30 -0
  283. package/skills/dws/dingtalk-contact/references/recipes/conventions.md +44 -0
  284. package/skills/dws/dingtalk-contact/scripts/contact_dept_members.py +130 -0
  285. package/skills/dws/dingtalk-doc/SKILL.md +112 -0
  286. package/skills/dws/dingtalk-doc/references/04-document.md +57 -0
  287. package/skills/dws/dingtalk-doc/references/contracts.md +40 -0
  288. package/skills/dws/dingtalk-doc/references/doc/doc-block.md +39 -0
  289. package/skills/dws/dingtalk-doc/references/doc/doc-comment.md +29 -0
  290. package/skills/dws/dingtalk-doc/references/doc/doc-create.md +54 -0
  291. package/skills/dws/dingtalk-doc/references/doc/doc-export.md +30 -0
  292. package/skills/dws/dingtalk-doc/references/doc/doc-import.md +28 -0
  293. package/skills/dws/dingtalk-doc/references/doc/doc-info.md +12 -0
  294. package/skills/dws/dingtalk-doc/references/doc/doc-media.md +46 -0
  295. package/skills/dws/dingtalk-doc/references/doc/doc-read.md +56 -0
  296. package/skills/dws/dingtalk-doc/references/doc/doc-update.md +87 -0
  297. package/skills/dws/dingtalk-doc/references/doc/format/doc-jsonml-cookbook.md +469 -0
  298. package/skills/dws/dingtalk-doc/references/doc/format/doc-jsonml-schema.json +526 -0
  299. package/skills/dws/dingtalk-doc/references/doc/format/doc-jsonml-schema.md +711 -0
  300. package/skills/dws/dingtalk-doc/references/doc/style/doc-create-workflow.md +414 -0
  301. package/skills/dws/dingtalk-doc/references/doc/style/doc-style-guideline.md +404 -0
  302. package/skills/dws/dingtalk-doc/references/doc/style/doc-update-workflow.md +316 -0
  303. package/skills/dws/dingtalk-doc/references/doc.md +82 -0
  304. package/skills/dws/dingtalk-doc/references/intent-guide.md +20 -0
  305. package/skills/dws/dingtalk-drive/SKILL.md +128 -0
  306. package/skills/dws/dingtalk-drive/references/drive.md +126 -0
  307. package/skills/dws/dingtalk-drive/references/folder-sync.md +40 -0
  308. package/skills/dws/dingtalk-drive/references/intent-guide.md +22 -0
  309. package/skills/dws/dingtalk-drive/references/lite-recipes.md +39 -0
  310. package/skills/dws/dingtalk-event/SKILL.md +106 -0
  311. package/skills/dws/dingtalk-event/references/event-im-keys.md +54 -0
  312. package/skills/dws/dingtalk-event/references/event-im-lifecycle.md +35 -0
  313. package/skills/dws/dingtalk-event/references/event-im-operations.md +52 -0
  314. package/skills/dws/dingtalk-event/references/event-im-output.md +39 -0
  315. package/skills/dws/dingtalk-event/references/event-im.md +58 -0
  316. package/skills/dws/dingtalk-event/references/event-oa.md +155 -0
  317. package/skills/dws/dingtalk-event/references/event-todo.md +50 -0
  318. package/skills/dws/dingtalk-event/references/event-voip.md +69 -0
  319. package/skills/dws/dingtalk-mail/SKILL.md +113 -0
  320. package/skills/dws/dingtalk-mail/references/09-mail.md +45 -0
  321. package/skills/dws/dingtalk-mail/references/intent-guide.md +8 -0
  322. package/skills/dws/dingtalk-mail/references/lite-recipes.md +45 -0
  323. package/skills/dws/dingtalk-mail/references/mail.md +1889 -0
  324. package/skills/dws/dingtalk-mail/references/recipes/conventions.md +44 -0
  325. package/skills/dws/dingtalk-mail/scripts/mail_send_with_cc.py +122 -0
  326. package/skills/dws/dingtalk-mail/scripts/mail_unread_summary.py +114 -0
  327. package/skills/dws/dingtalk-minutes/SKILL.md +116 -0
  328. package/skills/dws/dingtalk-minutes/references/07-minutes.md +149 -0
  329. package/skills/dws/dingtalk-minutes/references/10-minutes-speaker-match.md +32 -0
  330. package/skills/dws/dingtalk-minutes/references/11-minutes-speaker-correct.md +40 -0
  331. package/skills/dws/dingtalk-minutes/references/intent-guide.md +79 -0
  332. package/skills/dws/dingtalk-minutes/references/lite-recipes.md +25 -0
  333. package/skills/dws/dingtalk-minutes/references/minutes.md +210 -0
  334. package/skills/dws/dingtalk-minutes/references/recipes/conventions.md +33 -0
  335. package/skills/dws/dingtalk-minutes/scripts/minutes_recent_summary.py +196 -0
  336. package/skills/dws/dingtalk-minutes/scripts/test_minutes_scripts.py +222 -0
  337. package/skills/dws/dingtalk-misc/SKILL.md +55 -0
  338. package/skills/dws/dingtalk-misc/references/05-reporting.md +29 -0
  339. package/skills/dws/dingtalk-misc/references/agoal.md +302 -0
  340. package/skills/dws/dingtalk-misc/references/attendance-intent-guide.md +7 -0
  341. package/skills/dws/dingtalk-misc/references/attendance-report.md +109 -0
  342. package/skills/dws/dingtalk-misc/references/attendance-schedule.md +115 -0
  343. package/skills/dws/dingtalk-misc/references/attendance-vacation.md +129 -0
  344. package/skills/dws/dingtalk-misc/references/attendance.md +149 -0
  345. package/skills/dws/dingtalk-misc/references/dev/app.md +42 -0
  346. package/skills/dws/dingtalk-misc/references/dev/connect.md +108 -0
  347. package/skills/dws/dingtalk-misc/references/dev/credentials.md +26 -0
  348. package/skills/dws/dingtalk-misc/references/dev/dev-index.md +13 -0
  349. package/skills/dws/dingtalk-misc/references/dev/event.md +47 -0
  350. package/skills/dws/dingtalk-misc/references/dev/mcp.md +106 -0
  351. package/skills/dws/dingtalk-misc/references/dev/member.md +19 -0
  352. package/skills/dws/dingtalk-misc/references/dev/permission.md +56 -0
  353. package/skills/dws/dingtalk-misc/references/dev/recipes.md +58 -0
  354. package/skills/dws/dingtalk-misc/references/dev/robot.md +74 -0
  355. package/skills/dws/dingtalk-misc/references/dev/security.md +21 -0
  356. package/skills/dws/dingtalk-misc/references/dev/version.md +99 -0
  357. package/skills/dws/dingtalk-misc/references/dev/webapp.md +22 -0
  358. package/skills/dws/dingtalk-misc/references/devapp.md +148 -0
  359. package/skills/dws/dingtalk-misc/references/devdoc-intent-guide.md +7 -0
  360. package/skills/dws/dingtalk-misc/references/devdoc.md +42 -0
  361. package/skills/dws/dingtalk-misc/references/ding.md +184 -0
  362. package/skills/dws/dingtalk-misc/references/hrbrain.md +67 -0
  363. package/skills/dws/dingtalk-misc/references/live.md +23 -0
  364. package/skills/dws/dingtalk-misc/references/markdown.md +167 -0
  365. package/skills/dws/dingtalk-misc/references/oa/oa-form-components.md +345 -0
  366. package/skills/dws/dingtalk-misc/references/oa/oa-process-nodes.md +374 -0
  367. package/skills/dws/dingtalk-misc/references/oa.md +1014 -0
  368. package/skills/dws/dingtalk-misc/references/openapi-explorer.md +47 -0
  369. package/skills/dws/dingtalk-misc/references/pat.md +52 -0
  370. package/skills/dws/dingtalk-misc/references/profile.md +41 -0
  371. package/skills/dws/dingtalk-misc/references/recruit.md +89 -0
  372. package/skills/dws/dingtalk-misc/references/report-conventions.md +44 -0
  373. package/skills/dws/dingtalk-misc/references/report-intent-guide.md +11 -0
  374. package/skills/dws/dingtalk-misc/references/report-lite-recipes.md +25 -0
  375. package/skills/dws/dingtalk-misc/references/report.md +109 -0
  376. package/skills/dws/dingtalk-misc/references/sheet/sheet-batch-operations.md +104 -0
  377. package/skills/dws/dingtalk-misc/references/sheet/sheet-chart.md +69 -0
  378. package/skills/dws/dingtalk-misc/references/sheet/sheet-comment.md +166 -0
  379. package/skills/dws/dingtalk-misc/references/sheet/sheet-conditional-format.md +59 -0
  380. package/skills/dws/dingtalk-misc/references/sheet/sheet-dimension-operations.md +60 -0
  381. package/skills/dws/dingtalk-misc/references/sheet/sheet-dropdown.md +103 -0
  382. package/skills/dws/dingtalk-misc/references/sheet/sheet-export.md +135 -0
  383. package/skills/dws/dingtalk-misc/references/sheet/sheet-filter-view.md +51 -0
  384. package/skills/dws/dingtalk-misc/references/sheet/sheet-filter.md +181 -0
  385. package/skills/dws/dingtalk-misc/references/sheet/sheet-formula.md +192 -0
  386. package/skills/dws/dingtalk-misc/references/sheet/sheet-import.md +76 -0
  387. package/skills/dws/dingtalk-misc/references/sheet/sheet-media-image.md +263 -0
  388. package/skills/dws/dingtalk-misc/references/sheet/sheet-pivot-table.md +292 -0
  389. package/skills/dws/dingtalk-misc/references/sheet/sheet-range-operations.md +161 -0
  390. package/skills/dws/dingtalk-misc/references/sheet/sheet-read-data.md +60 -0
  391. package/skills/dws/dingtalk-misc/references/sheet/sheet-revision-changeset.md +46 -0
  392. package/skills/dws/dingtalk-misc/references/sheet/sheet-search-replace.md +120 -0
  393. package/skills/dws/dingtalk-misc/references/sheet/sheet-style-format.md +71 -0
  394. package/skills/dws/dingtalk-misc/references/sheet/sheet-version.md +84 -0
  395. package/skills/dws/dingtalk-misc/references/sheet/sheet-workbook.md +59 -0
  396. package/skills/dws/dingtalk-misc/references/sheet/sheet-write-data.md +93 -0
  397. package/skills/dws/dingtalk-misc/references/sheet-conventions.md +44 -0
  398. package/skills/dws/dingtalk-misc/references/sheet-intent-guide.md +12 -0
  399. package/skills/dws/dingtalk-misc/references/sheet.md +166 -0
  400. package/skills/dws/dingtalk-misc/references/skill.md +98 -0
  401. package/skills/dws/dingtalk-misc/references/unsupported-scripts.md +49 -0
  402. package/skills/dws/dingtalk-misc/references/url-patterns.md +144 -0
  403. package/skills/dws/dingtalk-misc/references/whiteboard/compose.md +200 -0
  404. package/skills/dws/dingtalk-misc/references/whiteboard/open-nodes-v1/01-overview.md +57 -0
  405. package/skills/dws/dingtalk-misc/references/whiteboard/open-nodes-v1/02-query.md +288 -0
  406. package/skills/dws/dingtalk-misc/references/whiteboard/open-nodes-v1/03-update.md +249 -0
  407. package/skills/dws/dingtalk-misc/references/whiteboard/open-nodes-v1/04-text-style.md +395 -0
  408. package/skills/dws/dingtalk-misc/references/whiteboard/open-nodes-v1/05-shape-frame-group-connector.md +186 -0
  409. package/skills/dws/dingtalk-misc/references/whiteboard/open-nodes-v1/06-vector-icon-path.md +313 -0
  410. package/skills/dws/dingtalk-misc/references/whiteboard/open-nodes-v1/07-examples-errors-write-support.md +270 -0
  411. package/skills/dws/dingtalk-misc/references/whiteboard/open-nodes-v1/08-catalogs.md +61 -0
  412. package/skills/dws/dingtalk-misc/references/whiteboard/open-nodes-v1.md +54 -0
  413. package/skills/dws/dingtalk-misc/references/whiteboard/replace.md +41 -0
  414. package/skills/dws/dingtalk-misc/references/whiteboard/vector.md +51 -0
  415. package/skills/dws/dingtalk-misc/references/whiteboard.md +115 -0
  416. package/skills/dws/dingtalk-misc/scripts/aiapp_create_and_poll.py +138 -0
  417. package/skills/dws/dingtalk-misc/scripts/attendance_my_record.py +91 -0
  418. package/skills/dws/dingtalk-misc/scripts/attendance_report_checkin.py +440 -0
  419. package/skills/dws/dingtalk-misc/scripts/attendance_report_common.py +1698 -0
  420. package/skills/dws/dingtalk-misc/scripts/attendance_report_daily.py +558 -0
  421. package/skills/dws/dingtalk-misc/scripts/attendance_report_detail.py +809 -0
  422. package/skills/dws/dingtalk-misc/scripts/attendance_report_monthly.py +758 -0
  423. package/skills/dws/dingtalk-misc/scripts/attendance_report_record.py +947 -0
  424. package/skills/dws/dingtalk-misc/scripts/attendance_schedule_export.py +344 -0
  425. package/skills/dws/dingtalk-misc/scripts/attendance_schedule_import.py +498 -0
  426. package/skills/dws/dingtalk-misc/scripts/attendance_team_shift.py +89 -0
  427. package/skills/dws/dingtalk-misc/scripts/attendance_vacation_balance.py +617 -0
  428. package/skills/dws/dingtalk-misc/scripts/finance_daily_cashflow.py +70 -0
  429. package/skills/dws/dingtalk-misc/scripts/finance_expense_flow.py +138 -0
  430. package/skills/dws/dingtalk-misc/scripts/oa_batch_approve.py +158 -0
  431. package/skills/dws/dingtalk-misc/scripts/oa_pending_review.py +132 -0
  432. package/skills/dws/dingtalk-misc/scripts/report_received_today.py +315 -0
  433. package/skills/dws/dingtalk-misc/scripts/yida_custom_page_update.py +401 -0
  434. package/skills/dws/dingtalk-misc/scripts/yida_form_builder.py +526 -0
  435. package/skills/dws/dingtalk-misc/scripts/yida_form_fields.py +315 -0
  436. package/skills/dws/dingtalk-misc/scripts/yida_form_inspector.py +311 -0
  437. package/skills/dws/dingtalk-misc/scripts/yida_form_update.py +185 -0
  438. package/skills/dws/dingtalk-misc/scripts/yida_jsx_pipeline.py +1588 -0
  439. package/skills/dws/dingtalk-misc/scripts/yida_page_compiler.py +1441 -0
  440. package/skills/dws/dingtalk-misc/scripts/yida_page_generate.py +514 -0
  441. package/skills/dws/dingtalk-misc/scripts/yida_page_schema.py +519 -0
  442. package/skills/dws/dingtalk-misc/scripts/yida_page_self_check.py +398 -0
  443. package/skills/dws/dingtalk-misc/scripts/yida_process_flow.py +1478 -0
  444. package/skills/dws/dingtalk-misc/scripts/yida_process_update.py +589 -0
  445. package/skills/dws/dingtalk-misc/scripts/yida_report_builder.py +494 -0
  446. package/skills/dws/dingtalk-misc/scripts/yida_report_charts.py +1434 -0
  447. package/skills/dws/dingtalk-misc/scripts/yida_report_update.py +244 -0
  448. package/skills/dws/dingtalk-misc/scripts/yida_schema_common.py +340 -0
  449. package/skills/dws/dingtalk-shared/SKILL.md +83 -0
  450. package/skills/dws/dingtalk-shared/references/capability-limits.md +31 -0
  451. package/skills/dws/dingtalk-shared/references/channel-login.md +26 -0
  452. package/skills/dws/dingtalk-shared/references/confirmation.md +59 -0
  453. package/skills/dws/dingtalk-shared/references/error-codes.md +155 -0
  454. package/skills/dws/dingtalk-shared/references/global-reference.md +122 -0
  455. package/skills/dws/dingtalk-shared/references/intent-guide.md +537 -0
  456. package/skills/dws/dingtalk-shared/references/recipes/conventions.md +45 -0
  457. package/skills/dws/dingtalk-shared/references/recipes/lite-catalog.md +275 -0
  458. package/skills/dws/dingtalk-shared/references/recipes/meta.md +67 -0
  459. package/skills/dws/dingtalk-shared/references/routing.md +52 -0
  460. package/skills/dws/dingtalk-shared/references/runtime-contract.md +11 -0
  461. package/skills/dws/dingtalk-shared/references/schema-usage.md +88 -0
  462. package/skills/dws/dingtalk-shared/references/url-patterns.md +144 -0
  463. package/skills/dws/dingtalk-shared/references/workflow-routing.md +45 -0
  464. package/skills/dws/dingtalk-todo/SKILL.md +119 -0
  465. package/skills/dws/dingtalk-todo/references/02-task.md +70 -0
  466. package/skills/dws/dingtalk-todo/references/intent-guide.md +15 -0
  467. package/skills/dws/dingtalk-todo/references/lite-recipes.md +68 -0
  468. package/skills/dws/dingtalk-todo/references/recipes/conventions.md +44 -0
  469. package/skills/dws/dingtalk-todo/references/todo.md +517 -0
  470. package/skills/dws/dingtalk-todo/scripts/todo_batch_create.py +354 -0
  471. package/skills/dws/dingtalk-todo/scripts/todo_daily_summary.py +153 -0
  472. package/skills/dws/dingtalk-todo/scripts/todo_overdue_check.py +101 -0
  473. package/skills/dws/dingtalk-wiki/SKILL.md +117 -0
  474. package/skills/dws/dingtalk-wiki/references/intent-guide.md +14 -0
  475. package/skills/dws/dingtalk-wiki/references/lite-recipes.md +44 -0
  476. package/skills/dws/dingtalk-wiki/references/wiki-members.md +32 -0
  477. package/skills/dws/dingtalk-wiki/references/wiki-node-ops.md +46 -0
  478. package/skills/dws/dingtalk-wiki/references/wiki.md +65 -0
  479. package/skills/dws/provenance.json +27 -0
package/README.md ADDED
@@ -0,0 +1,521 @@
1
+ # dsh-crwu-workbench · 中瑞世联工作台
2
+
3
+ [![ci](https://github.com/mmungdong/crwu-ai/actions/workflows/ci.yml/badge.svg)](https://github.com/mmungdong/crwu-ai/actions/workflows/ci.yml)
4
+ [![license](https://img.shields.io/badge/license-internal-lightgrey.svg)](LICENSE)
5
+
6
+ [English](README.en.md) | 中文
7
+
8
+ DeepSeek Harness(DSH)里的**审核工作台**:环境自检 → 从氚云拉「报告审核」待办 → 一次只发起一条
9
+ AI 审核子会话 → 盯住它的运行状态、可随时停止/重启 → 交付件自动上阿里云 OSS → 直接打开云端审核意见。
10
+
11
+ 审核流程本体不在本仓:它由 `crwu-audit` 技能族执行(见「依赖」)。本仓只负责**发起、盯状态、交付件回传**。
12
+
13
+ 源码在 `src/`,构建产物是 `lib/index.js` + `lib/client.js`,按 **DSH 包插件**(npm)分发安装。
14
+ 维护规范见 [`AGENTS.md`](AGENTS.md),迁移历史与逐项记录见 [`PORTING.md`](PORTING.md),安全模型见 [`SECURITY.md`](SECURITY.md)。
15
+
16
+ > 本仓为**内部使用**软件,见 [`LICENSE`](LICENSE);发现安全问题请按 [`SECURITY.md`](SECURITY.md) 私下联系维护者,不要开公开 issue。
17
+
18
+ ---
19
+
20
+ ## 一、只有一条形态:`src/` → `lib/` 包插件
21
+
22
+ | | |
23
+ |---|---|
24
+ | 怎么活 | `dsh plugin --profile <p> add …` 装进 profile,随 profile 启动而加载 |
25
+ | 版本号 | semver(`package.json` / `VERSION` / `CHANGELOG.md` 三处一致,`npm run version:check` 强制) |
26
+ | 重启 DSH 后 | **还在**(这是它相对于旧动态形态的主要好处) |
27
+ | 谁能改 | 任何能跑 `dsh` CLI 的人/agent 都能独立闭环;源码改动由 CI 与 `npm run check` 把关 |
28
+ | 分发 | npm(tag → release workflow);也支持 git 安装与 tarball |
29
+
30
+ **2026-09-20 收尾**:原先并存的动态 Cordis 形态(`legacy/`,在会话里由 agent `cordis_define` +
31
+ `cordis_run` 装配)已**随本轮删除** —— 24 个 RPC 与整个客户端面板都已移植进 `src/` 并逐项验证过,
32
+ 迁移账见 [`PORTING.md`](PORTING.md)。
33
+
34
+ > 动态形态**不能**由 `lib/` 产物代替:`lib/index.js` 是 ESM 具名导出、`lib/client.js` 是
35
+ > `window.__ModuleLoader__` 工厂,都不是 DSH 动态插件需要的沙箱函数体;两者还在注册方式
36
+ > (`harness.handle` vs 同源路由)、客户端传输(`host.call` vs `fetch`)与 React 来源上不同。
37
+ > 这是**有意的**取舍:只维护一条形态,不为一条没有在用的投递路径加第二个构建目标。
38
+
39
+ ### 包形态的验证清单(切换前必须跑完)
40
+
41
+ 第 1~4e 条是**静态 / 本机**检查(1~3 由 `npm run pack:assert`,4 由 `tests/unit/` 下的测试,
42
+ 4b 由 `npm run smoke:built`,4d / 4e 需要装一次后取页面清单或验 tarball);第 5~7 条在真实 DSH 里做:
43
+
44
+ | # | 检查 | 怎么验 | 状态 |
45
+ |---|---|---|---|
46
+ | 1 | 客户端产物是 `window.__ModuleLoader__.load({ id, factory })` 且 id 等于包名 | `npm run pack:assert` | ✅ |
47
+ | 2 | 客户端产物只 require `react` / `react/jsx-runtime`(DSH 模块表只保证这两个) | `npm run pack:assert` | ✅ |
48
+ | 3 | Host 产物是 ESM 且导出 `apply` / `name` / `inject` | `npm run pack:assert` | ✅ |
49
+ | 4 | 25 个操作仍在注册表里(冻结清单:旧形态 24 个 + `ping`),且门面发出的操作都已登记为 ported | `tests/unit/host-package.test.mjs` | ✅ |
50
+ | 4b | **构建产物**能被加载:`lib/index.js` 真的应答 RPC、`lib/client.js` 过 `__ModuleLoader__` 并注册四个槽位 | `npm run smoke:built`(已含在 `npm run check`) | ✅ |
51
+ | 4c | 迁移等价性(旧形态的每个组件 / 槽位 / RPC 调用都有 `src` 落点) | 该测试已随旧形态退休;收尾前它一直是绿的,逐项账见 `PORTING.md` | ✅ 已退休 |
52
+ | 4d | 客户端产物**真的被 DSH 服务并登记进 web 启动清单**(`id` / `url` / `rev` / `inject`) | 装一次后取页面里的 `__DSH_BOOT__` | ✅ |
53
+ | 4e | **npm 分发路径**也能用:把 `npm pack` 的 tarball 装进干净 profile,Host 能应答、客户端产物被登记并服务 | `dsh plugin --profile tgz add ./dsh-crwu-workbench-<ver>.tgz` 后照 4d 验一遍 | ✅ |
54
+ | 5 | 面板在侧栏出现,且标签显示「中瑞世联工作台」 | `node install/browser-check.mjs --url …`(真实浏览器,见下) | ✅ |
55
+ | 6 | 环境信息页能真的探测到平台 / 包内组件 / DSH 运行时 / OSS / 氚云会话 / iFinD | `env` 操作 + 同一脚本在页面上核对 | ✅ |
56
+ | 7a | 报告页能拉到氚云待办 | `pending` 操作 + 同一脚本在页面上核对 | ✅ |
57
+ | 7b | **真的**发起一次审核能起子会话 | 在**顶层会话**里点「AI 审核」 | ⏳ 需人点 |
58
+
59
+ 第 5~7 条需要装一次(下面这套已经在本机跑过,记录见下一节):
60
+
61
+ ```bash
62
+ dsh plugin --profile smoke add . # 独立 profile,不碰 web profile
63
+ DSH_PERMISSION_MODE=danger-full-access dsh --profile smoke --port 3099 --no-open
64
+
65
+ # 第 5 / 6 / 7a 条用真实浏览器自动核对(不用下载 Chromium,用系统里的 Edge):
66
+ mkdir -p /tmp/pw && cd /tmp/pw && npm i playwright-core
67
+ node <仓库>/install/browser-check.mjs \
68
+ --url 'http://127.0.0.1:3099/?token=<起 profile 时打印的 token>' \
69
+ --playwright /tmp/pw/node_modules
70
+ ```
71
+
72
+ ### 真实 DSH 上验到了什么(2026-09-20,本机)
73
+
74
+ 装进独立 `smoke` profile 后,经该实例的同源接口取到的真实应答(应答原文可复现):
75
+
76
+ | 操作 | 观察到的结果 |
77
+ |---|---|
78
+ | `ping` | `{"ok":true,"rev":"pkg-0.0.1"}` —— 说明 `apply()` 在真实 DSH 里跑完并注册了同源路由 |
79
+ | `boot` | `platform=darwin-arm64`、`caseRoot=/Users/mungdong/中瑞世联工作空间`、`source=manifest-workspace` —— 真实 fs 与清单解析 |
80
+ | `env` | 事实分区照旧(`packageIntegrity` / `runtime` / `services` / `delivery` / `external`),**新增 `state`(统一环境模型)**:状态、阻塞项归属(user / admin / system)、通过率(只统计必需项)与能力开关。裸 `python3` 仍不是检查项;**iFinD 是必需项**(`required=true`,未通过即阻塞) |
81
+ | `pending` | `total: 8608`,返回真实氚云待办(项目名、复核级次、当前节点) |
82
+ | `oss-index` | 真实列举 bucket `crwu-workspace` 的 `crwu/audit` 前缀:8 个案例,每个都带 `审核意见.*.html` + `审核结果.*.json`,`truncated: false` |
83
+ | `oss-result` | 读一个真实对象(97KB)并只回摘要(2716 字节):`projectId` / `schemaVersion 1.6` / `stage` / `summary.counts`(13 条问题)全部正确 |
84
+ | `audit-status` | 聚合到真实历史审核记录(`ended` / `endReason` 来自状态文件) |
85
+ | `oss-link` | 对真实对象签名:`https`、host 与对象路径正确(中文名按 URL 编码)、带 `OSSAccessKeyId`/`Expires`/`Signature`;越界 key 被拒。**签名 URL 本体按仓库规则不回显、不落日志** |
86
+ | `audit-stop` / `audit-release` | 没有进行中的审核时:前者明确拒绝(「当前没有正在运行的审核子会话。」),后者是空操作(`released: ""`) |
87
+ | 页面 `__DSH_BOOT__` | 含 `{"id":"dsh-crwu-workbench","url":"/plugins/??dsh-crwu-workbench/client.js&rev=…","inject":[…]}` |
88
+ | 该 bundle | 与仓库 `lib/client.js` **逐字一致**(DSH 只在末尾追加一个 `;`),`id` 正确,只 require `react` / `react/jsx-runtime`,四个槽位名都在 |
89
+
90
+ ### 第 5 / 6 / 7a 条:真实浏览器自动核对
91
+
92
+ `install/browser-check.mjs` 用**真实浏览器**(系统里的 Edge,经 `playwright-core` 的 channel,
93
+ 不下载 Chromium)打开装了插件的页面,点进面板逐页核对。本机实测**全过、控制台零报错**(条数以脚本输出为准):
94
+
95
+ | 核对项 | 观察到的结果 |
96
+ |---|---|
97
+ | 侧栏分组卡 | **一张 Apple 式分组卡**常驻在**左侧栏下方、设置上方**(脚本按几何位置断言:左列 + 下半屏),工作区仍在它上方:卡头是**品牌标记 + 「中瑞世联工作台」+ 版本标签**,卡身是**三行子项** —— 报告评估(标「开发中」)/ 报告审核 / 环境信息,顺序固定。脚本按 `boundingBox` 断言**三行都落在同一张卡的范围内、自上而下排列**(这是「看起来像一个模块」的可观察判据)|
98
+ | 品牌标记 | 侧栏入口与面板头部画的是**用户给的原图描出来的矢量版**(四个色块:三块品牌红 + 一块品牌金),16px 与 22px 都清晰 |
99
+ | 版本标签 | 名字后面标出**跑的是哪一份**:`dev`(本地源码检出,琥珀色)或 `v0.0.4`(装好的包);悬停给形态与构建时间 |
100
+ | 点进面板 | 自检期间是 loading,出结论后**通过就直接落在报告审核**;不通过停在环境信息 |
101
+ | 入口上的环境标记 | 通过 = **绿色对勾**、不通过 = 红点,颜色与自检结论一致,悬停文案给出结论 |
102
+ | 侧栏子项切换模块 | 点卡上的「报告评估」进占位说明、点「环境信息」进环境信息页;点过的子项变成选中态(浅底 + 左侧 3px 强调条)。面板里的**底部模块条已经撤掉**:全页 `.crwu-audit-module` 只有卡上那三行(脚本数出来的),面板与侧栏共用同一份模块状态 |
103
+ | 环境信息页 | 按**"是谁的事"**分四组:顶部紧凑状态卡(结论 + 通过率 + 最近检查时间 + **唯一**主动作)→ **账号连接**(一次性授权 + 氚云扫码 + 钉钉登录 / 设备码)→ **交付与外部数据**(阿里云 AK 表单 + 同花顺 iFinD **API-Key** 表单)→ **工作空间**(就绪时压成一行摘要)→ **开发者诊断**(默认收起,展开为一个可完整复制的信息面板)。员工视野里**不出现**「安装 crwu / dws / ossutil」「装 Python」「改 PATH」这些话;包内路径、清单、sha256、运行时路径、审核根会话只在开发者诊断里 |
104
+ | **未授权** | 授权是「账号连接」里的**第一行**(「同意并继续」),**不再用模态层遮住整页**;未授权时进不去报告审核(Host 侧同样拒绝),但环境页始终可进 |
105
+ | 全局环境门禁 | 所有入口(侧栏子项 / 报告页内跳转 / 环境页「进入报告审核」)走同一个 `navigateModule`:环境不通过时不进入目标页、落到环境页并显示「进入【目标页】前,请先完成环境配置」;检查通过后**只恢复最近一次被拦的目标**,用户中途改去别处就不恢复 |
106
+ | **iFinD API-Key 未通过** | **阻塞项**(2026-09-26 产品口径:iFinD 从可选能力改为必检、必通过项)。没填 / 无效 → 员工重填;无数据权益 → 找管理员;网络超时 → 稍后重试。未通过时 `global` / `auditCore` / `externalData` 三项能力一起关闭,统一导航把受保护页面拦回环境页,提示「进入【报告审核】前,请先完成 iFinD API-Key 验证」 |
107
+ | 全页面没有 `audit-start` | 除了人自己点「AI 审核」,验收脚本全程不发这个操作 |
108
+ | ① 案例根目录 | **只讲插件选定的那个目录**,不拿"当前会话"说事 —— 从哪个工作空间的会话点进来都一样(会话事实在 ⑧ 里如实展示) |
109
+ | 待审核报告页 | 画出真实氚云待办:`共 8610 条`、六列(报告名 / 流水号 / **风险等级** / 人工复核 / 氚云更新时间 / 操作)、真实项目名与流水号、**风险等级徽章 A/B/C**(A 红、B 黄)、复核级次「初审」、行内「已停止 / 已完成·已上云」徽章与「查看会话 / 审核信息 / 本机 HTML」入口;窄列不换行、整表无横向溢出 |
110
+ | AI审核结果页 | 画出 4 个真实云端案例及其 `审核意见.*.html` + `审核结果.*.json` 交付件;**这一页自己的工具条**可以按流水号查交付件(输入 → 「查找」→ 只列那一个流水号;没命中就说「OSS 上没有这个流水号的交付件」;「清空」回到全量且不重新列举 OSS;输入过程不发任何请求)|
111
+ | **「审核信息」右侧抽屉** | 点开一条真实记录:抽屉从右侧滑出(固定贴视口右边、占满高度、带遮罩),渲染出 `项目编号` / `审核时间` / `引擎版本` / `报告版本` / `阶段` / `结论` / `问题总数 13`(高 2 中 9 低 2 待确认 2 未检查 3)/ `复核状态` / `命中率` / `复核计数` / `生成时间`,**不再报「审核结果不是合法 JSON」**(第 26 轮修掉的那个缺陷,这条断言已拿还原后的旧代码证伪);关闭后遮罩一起收掉、列表还在原处 |
112
+ | **加载态** | 翻页与「重新自检」都会出现进度条 + 正文压暗(脚本把这一次请求人为拖慢 3 秒来断言,请求回来后加载态必须收掉) |
113
+ | **翻页不重复列举 OSS** | 点「下一页」:`pending` 真的重取(第 2 页),`oss-index` 次数不变(AGENTS.md §4.4 的硬要求) |
114
+ | **切标签不重复列举 OSS** | 在「待审核报告 / AI审核结果」之间来回切 3 轮,`oss-index` 调用次数 **1 → 1**(AGENTS.md §4.4 的硬要求) |
115
+ | 切回环境信息 | 点侧栏卡上的「环境信息」仍然正常渲染,说明来回切换没有把状态弄坏 |
116
+ | 面板滚动 | 面板自己拥有滚动(正文区 `overflow:auto`,头部不随滚动):环境信息与报告审核两页的长内容都能滚到底,横向零溢出 |
117
+ | 浏览器控制台 | **零报错** |
118
+ | 只读保证 | 全程只发出 `boot env audit-status pending oss-index`(及新增的 iFinD 只读探测 `ifind-probe`),**没有 `audit-start`** |
119
+
120
+ 这个脚本本身也**证伪过**:拿它去跑一个**没装插件**的 profile,它报出唯一一条 FAIL
121
+ (「侧栏出现…入口」超时)、跳过后续依赖阶段、退出码 1,而不是崩掉 —— 所以它不是「跑起来就算过」。
122
+
123
+ **只剩第 7b 条要人点**:点下去会在**真实案例**上跑一次真实审核、往真实工作空间写产物、
124
+ 并可能自动传上真实 OSS。这不是该由我替你点的事,脚本也刻意不去点它。
125
+
126
+ ### 拿真实数据才看得见的两个缺陷(已修)
127
+
128
+ 真实验证的价值就这两条 —— 静态检查和假数据都发现不了:
129
+
130
+ 1. **「审核信息」在读真实对象时必失败**:`ossutil` v1.7.19 把 `<n>(s) elapsed` 无条件写到 **stdout**
131
+ (没有开关能关掉,它连错误也写 stdout),而代码对 `ossutil cat` 的输出直接 `JSON.parse`,
132
+ 于是**每一个**真实案例打开「审核信息」都报「审核结果不是合法 JSON」。旧动态形态也一样中招,
133
+ 属于存量缺陷。现在用 `src/shared/utils/json.ts` 的 `parseJsonLoose`:先严格解析,失败再取
134
+ 第一个配对完整的 JSON 文档(正确处理字符串里的括号与转义,垃圾输入仍然返回 null)。
135
+ 2. **「命令跑不起来」被说成「没装」**:见下面「沙箱模式」。
136
+
137
+ ### 权限:不需要任何启动参数,但**首次必须授权一次**
138
+
139
+ 员工侧**不需要**改启动参数(不需要 `DSH_PERMISSION_MODE`,也不需要动 profile 里的
140
+ `dsh-sandbox-policy`)。但插件要读本机凭据(氚云会话、钉钉登录态),这需要员工**点一次授权**:
141
+
142
+ > 环境信息页「账号连接」里的「同意并继续」—— 授权前进不去报告审核,插件也不可用
143
+ > (**不再用模态层遮住整页**)。
144
+
145
+ - **这是一次性授权、长期有效**:写进工作台状态文件 `~/.dsh/crwu-workbench.json` 的
146
+ `trustCredentials`,重启 profile 后仍然生效。
147
+ - **不授权 = 插件不可用**:环境自检把它算作阻塞项(「进入报告审核」被门禁挡住),
148
+ 并且**不会**谎报「钉钉没登录」——那正是没授权时沙箱读不到钥匙串的假象。
149
+ - **授权之后才谈真假**:凭据类命令才带 `sandboxPolicy: { mode: 'danger-full-access', workspaceRoot }`
150
+ 去拿真结论(已登录 / 未登录 / 未绑定 / 已过期)。
151
+ - **最小权限**:只有确实读本机凭据的命令提权;插件包完整性核对(只 stat 包内文件)、
152
+ `ossutil` 上传/列举、写案例目录、开浏览器等一律走 profile 的默认沙箱。
153
+ - 授权被部署的审批策略拒绝时,界面如实报「本机凭据读取被拦住」,并指回那个开关。
154
+
155
+ `DSH_PERMISSION_MODE=danger-full-access` 只在**开发自测**(§「真实验证」里那个临时 profile)才需要。
156
+
157
+ ### 不需要任何 PATH 配置(2026-09-25 起,且**不要再加回来**)
158
+
159
+ `crwu` / `dws` / `ossutil` 随插件发布在包内 `bin/<平台>/`,插件用**包内绝对路径**经 `ctx.shell`
160
+ 启动它们;审核子代理只调结构化 Tool,从不自己拼命令行。因此:
161
+
162
+ - **不要**把插件的 `bin/<平台>/` 目录 export 进 shell 的 PATH,**不要**往 `~/bin` 或系统目录放副本 ——
163
+ 那只会制造「模型手工拼命令行看起来可用」的假象(绕开沙箱与审批),并在插件升级后指向不存在的路径;
164
+ - **登录也由面板发起**:环境信息页「账号连接」里的「氚云登录」/「钉钉登录」按钮(首次先点
165
+ 「同意并继续」完成插件授权)。插件**不再有**「复制安装提示词」入口(2026-09-26 删除):
166
+ 二进制随包发布、登录与密钥都在界面上填完之后,那段提示词没有运行时用途,只会把员工指去绕路。
167
+ - **iFinD 的 API-Key 也由插件 Host 自己保管**(2026-09-26;界面上一律叫 API-Key,不再叫 SK):
168
+ 早先要求员工把 `auth_token` 写进
169
+ `~/.agents/skills/ifind-finance-data/mcp_config.json` —— 那是**上游技能**的私有文件,既让运行时
170
+ 依赖一个随时会被改写的第三方文件,也把"交给 Agent 代填"变成唯一路径。现在 API-Key 保存在
171
+ 插件状态目录(`<home>/.dsh/crwu-workbench/ifind-credential.json`,0600),员工只在
172
+ 「交付与外部数据」里填一次(界面上叫 **API-Key**)。**每次环境校验都真的取一次 iFinD 数据**
173
+ (`initialize` → `tools/list` → `tools/call`),取到数据才显示「已认证」;认证通过但没取到数据时
174
+ 会明确说「认证通过,但这次没有取到数据」并区分**权益 / 凭据 / 服务不可达**三种原因
175
+ (分别对应"找管理员 / 重填 / 稍后重试")。`describe_tool` 可以取到
176
+ 单个工具的脱敏参数 schema;MCP `protocolVersion` 跟随官方 1.4.0 客户端的 `2025-03-26` 并做显式协商。
177
+ 上游指引里的「把密钥发给 Agent」「SSL 失败用 `curl -k`」「跑 `call.py` / `call-node.js`」
178
+ **一律不采用**。
179
+ - **环境自检也不再碰 PATH**:旧的探针(`command -v crwu|dws|python3|ossutil` + 跑 `--version`)整组删掉,
180
+ 所以「主机 PATH 里有没有这些命令」不再影响自检结论;③ 的运行时只认 **DSH 自带 Python**,
181
+ 系统 `python3` 既不是依赖也不参与判断。
182
+ - 实测(PATH 清成 `/usr/bin:/bin`,三个命令一个都查不到):`./bin/darwin-arm64/crwu version` 与
183
+ `./bin/darwin-arm64/ossutil --version` 照常可用;插件侧的严格解析器(`requireBundledCommand`)、
184
+ 面板用的宽松解析器(`resolveBundledCommand`)与 `resolveOssutil` 都把命令解析到包内绝对路径
185
+ (`resolveOssutil` 已**删掉** PATH 回退,缺失时只说「插件包不完整 / 平台不受支持」)。
186
+
187
+ 静态检查能挡住的是「产物形状不对」;挡不住的是「DSH 到底把 `shell` / `fs` / `subagents`
188
+ 交给我了没有」—— 那是只有装一次才知道的事。
189
+
190
+ ---
191
+
192
+ ## 二、安装
193
+
194
+ 前提:机器上有 DSH(版本对应的 `@deepseek-ai/dsh-*` 见「版本兼容」)。
195
+
196
+ ```bash
197
+ dsh plugin --profile web add dsh-crwu-workbench # 从 npm 取预构建产物,无需接收方构建授权
198
+ # 或:dsh plugin --profile web add ./dsh-crwu-workbench-<version>.tgz
199
+ # 或:dsh plugin --profile web add github:<owner>/<repo> # 拉源码,靠 prepare 构建,pnpm ≥10 需 allowBuilds
200
+ ```
201
+
202
+ 自己打包(在 `crwu-ai` 仓里):`make plugin-pack` → `dist/dsh-crwu-workbench-<version>.tgz`;
203
+ 发布走 tag 触发的 npm 流程(`git tag plugin-v<version>`)。插件**从 npm 安装**
204
+ (`dsh plugin add dsh-crwu-workbench@<version>`)—— 不再往 OSS 传分发包,那个地址谁都能换。
205
+
206
+ 装完**重启该 profile**(插件随 profile 启动加载)。然后:
207
+
208
+ 1. 点**左侧栏底部**(设置上方)常驻的「中瑞世联工作台」;
209
+ 2. 若这一页停在「环境信息」,就把上面那几项配齐:先点「同意并继续」完成插件授权,
210
+ 再在「账号连接」里点「氚云登录」(扫码)与「钉钉登录」(浏览器打不开时用设备码),
211
+ 然后到「交付与外部数据」里填**向管理员获取**的阿里云 AccessKey(iFinD API-Key 同页填写,
212
+ 是必需项,未通过会拦住受保护页面)—— `crwu` / `dws` / `ossutil` 三个命令**随插件自带**,
213
+ 不需要安装;**密钥只在这个页面上填**,不要贴进对话、也不要让 Agent 代填;
214
+ 3. 要发起审核,先在**顶层会话**的会话头点「登记为子会话父级」——审核只允许挂在顶层会话下
215
+ (只挂一层,嵌套会导致状态跟丢)。
216
+
217
+ > **技能随包发布,按层组织**:包里带三层技能 —— `skills/crwu/`(本仓自研 27 个)、
218
+ > `skills/dws/`(上游 `dingtalk-workspace-cli` vendored 的 14 个钉钉技能)、`common/skills/`
219
+ > (公共技能 `crwu-dws` / `crwu-h3yun-*`)。`cordis.patch.yml` 的 `crwu-workbench-skills` 行把
220
+ > **每一层各注册成一个技能根**(DSH 对每个根只扫一层,一层一个根)—— 装完插件就有全部技能,
221
+ > **不需要**再往 `~/.dsh/skills/` 里拷。旧的用户目录副本建议删掉:
222
+ > 插件目录的 rank 比用户目录高,留着只会造成两处漂移(`make skills-install AGENT_DIR=…` 是给
223
+ > 非 DSH 宿主用的)。分层口径与 `dws` 层的升级方式见 [`skills/README.md`](skills/README.md)。
224
+
225
+ > **权限**:不需要任何启动参数;但**首次必须授权一次**(环境信息页「账号连接」里的
226
+ > 「同意并继续」),否则插件读不到氚云会话与钉钉登录态、环境门禁会拦住它。
227
+ > 授权一次长期有效(存在本机状态文件里)。
228
+ > 详见「权限」一节。
229
+
230
+ ### 更新版本
231
+
232
+ ```bash
233
+ dsh plugin --profile web add dsh-crwu-workbench@<version>
234
+ ```
235
+
236
+ 再重启该 profile。安装目录里是预构建产物,更新就是换一份 `lib/` 与 `skills/`(含 `skills/dws/` 那一层)。
237
+
238
+ > **版本号只发一次**:分发走 npm,已发布的版本号不能覆盖 —— 改了内容就要**升版本号**再发,
239
+ > 否则早装和重装的员工会拿到「同一个版本、两份内容」。
240
+
241
+ ### 卸载
242
+
243
+ ```bash
244
+ dsh plugin --profile web remove dsh-crwu-workbench
245
+ ```
246
+
247
+ (旧动态形态的卸载方式 `cordis_undefine` 已随该形态退休;它本来就活不过一次 DSH 重启。)
248
+
249
+ ## 三、统一 YAML 配置
250
+
251
+ [`config/crwu-workbench.yml`](config/crwu-workbench.yml) 是开发、打包与员工 TGZ 运行时的唯一配置源:
252
+
253
+ - `oss.protected` 是审核产物的私有 Bucket,匿名访问应返回 403,上传继续使用员工机器上的 OSS
254
+ 凭据,查看链接默认由 `ossutil` 生成签名 URL;
255
+ - YAML 只保存地址和行为参数,不保存 AccessKey、API-Key 或 STS Token。
256
+
257
+ > **没有 `oss.readonly`**:2026-09-25 起那个匿名只读分发桶整体下掉了(原来装环境清单、安装说明和
258
+ > 插件 TGZ)。现在二进制随插件发布在包内 `bin/<平台>/`,环境清单只有内置一份,插件从 npm 安装 ——
259
+ > 少一个远端数据源就少一条「别人能远程改你机器上的解释权」的通道。
260
+
261
+ 源码开发时 Host 直接读取这份 YAML。要临时验证另一份配置,可在启动 DSH profile 前设置
262
+ `CRWU_CONFIG_FILE=/绝对路径/crwu-workbench.yml`,也可以只在开发用的 Cordis 配置里设置
263
+ `configFile`。不指定时自动寻找插件目录里的 `config/crwu-workbench.yml`。
264
+
265
+ `make plugin-pack` / `npm pack` 会先运行 `npm run config:check`,然后把同一份 YAML 原样放进 TGZ;
266
+ 员工安装后 Host 自动读取包内配置。分发不再需要任何 Bucket 常量 —— 插件从 npm 装。
267
+
268
+ `workspace.caseRoot` 默认留空是有意的:由面板中选定的工作空间决定,而“必须先选工作空间”仍是
269
+ 审核硬门禁。
270
+
271
+ ### 审核子代理挂在哪(审核根会话)
272
+
273
+ 报告审核的子会话不再挂在「你点开面板的那个会话」下面,而是统一挂到一个**审核根会话**上:
274
+
275
+ - 它建在插件选定的**工作空间**里(`cwd = 案例根目录`),是个普通顶层会话,侧栏里归在该工作空间下;
276
+ - 命名 `审核子代理根节点 · MM-DD HH:mm`,见名知义;所有审核子代理都挂在它下面,形成一棵树;
277
+ - 建的时候先跑一句 hello 预检(模型链路 + bash + 沙箱 + cwd),跑不通就不发起审核;
278
+ - 稳定优先:能用就复用;不能用(进程重启 / 换工作空间)就新建一个,旧的树留着;
279
+ - 界面位置:⑧ 运行环境信息里的「审核根会话」。
280
+
281
+ ### ① 案例根目录的三条硬规则
282
+
283
+ 1. **选定后就不动**:用户手动选过的路径(连同 title / id / source)整份落盘、整份恢复。
284
+ 只恢复 `workspacePath` 会让标签从「手动选择」变成「上次选择」、`canAuto` 变 false ——
285
+ 「恢复自动识别」按钮会凭空消失(用户报的「每次进来都变」就是这个)。
286
+ 2. **选过的目录不在了就报错,绝不静默换一个**:`env` 的阻塞项与 `audit-start` 的门禁都会说清
287
+ 是哪一个路径没了,界面给出重选 / 恢复自动识别的出口。静默回落到清单偏好 = 产物写进别的目录。
288
+ 3. **不拿当前会话说事**:卡片只读 `workspacePath` 那一个对象,不看父会话 cwd。
289
+ 会话事实(会话 cwd / 会话所属工作空间)在 ⑧ 运行环境信息里展示。
290
+ 4. 写盘是读-改-写,而**读失败时一律不写**:否则一次 transient 的 stat 失败就会用只有本次补丁的
291
+ 对象覆盖别人的字段(实测把 `workspacePath` 抹掉过)。
292
+
293
+ ## 四、开发工作流
294
+
295
+ ### 四条命令
296
+
297
+ > 本机怎么开发、怎么在真实 DSH 上验、怎么发版,逐步步骤都在 [`AGENTS.md`](AGENTS.md) 第七、八节;
298
+ > 下面只是命令速查。
299
+
300
+ | 命令 | 作用 |
301
+ |---|---|
302
+ | `npm test` | 全部测试:`tests/unit/`(配置、路由、操作表、包清单、Host 与 **Client 半**含 `.tsx`) |
303
+ | `npm run config:check` | 校验唯一 YAML 配置及两个 OSS 边界 |
304
+ | `npm run typecheck` | `tsc --noEmit`(仅 `src/`) |
305
+ | `npm run build` | tsdown 双端打包出 `lib/index.js` + `lib/client.js`(`prepare` 也走它) |
306
+ | `npm run smoke:built` | 用**真的** `lib/index.js` 走一遍同源路由、用真的 `lib/client.js` 过一遍 `__ModuleLoader__` |
307
+ | `npm run check` | 上面几条按顺序跑一遍(`version:check` → `typecheck` → `test` → `build` → `smoke:built`)—— **交付/提 PR 前跑这个** |
308
+ | `npm run version:set 0.0.2` | 改版本号(`package.json` + `VERSION` + lockfile 根版本) |
309
+ | `npm run version:check` | 校验 `package.json` / `VERSION` / `CHANGELOG.md` 版本一致 |
310
+ | `npm run pack:assert` | 核对 `npm pack` 真正打进去的文件清单 + 三条加载契约(发布前必跑;CI 也跑这条) |
311
+ | `npm run pack:assert:strict` | **发布严格模式**:真打一份 tarball、解包后按 `bin/manifest.json` 逐个重算两个平台六个二进制的 size/sha256 |
312
+ | `npm run bin:check` | 装配过 `bin/` 时:按清单重算**最终文件**哈希(内容变了就红,不看大小) |
313
+ | `npm run skills:cli-guard` | 非 vendored 技能的活跃指令里不许出现裸 `crwu`/`dws`/`ossutil`、`which`、`command -v`、`export PATH=`、包内 bin 路径 |
314
+
315
+ CI(`.github/workflows/ci.yml`)在 Ubuntu + Windows × Node 22/24 上跑同一组门禁 ——
316
+ `npm ci` → `version:check` → `typecheck` → `test` → `build` → `pack:assert` → `smoke:built` →
317
+ 断言 `lib/` 两个入口存在且 `lib/client.js` 带 ModuleLoader 包装 ——
318
+ 所以本地漏跑会被挡住。(`version:check` 与 `pack:assert` 是第 30 轮补进 CI 的:此前本地门禁有、CI 没有,「漏跑会被挡住」对这两条并不成立。)
319
+
320
+ - **改代码**:改 `src/`,跑 `npm run check`。任何编辑器 / 任何 agent 都能独立闭环。
321
+ - **让改动生效**:本机调试用 `dsh plugin --profile web add .`(改完要重启 profile);
322
+ 正式分发走 npm(见第五节)。三条分发路径的差别只在「接收方要不要构建授权」:
323
+ npm 装的是预构建产物、不需要;`github:` 与 tarball 走 `prepare` 构建,pnpm ≥10 需要 `allowBuilds`。
324
+
325
+ ### 铁律(踩过的坑)
326
+
327
+ 1. **操作名必须成对**:客户端门面调 `workbench:<op>`,Host 操作表里就必须有 `<op>`。
328
+ `tests/unit/client-rpc-facade.test.mjs` 会**双向**核对门面与操作表;少一个的表现是点下去 404,
329
+ 而界面只显示「未知 op」,很难反查。
330
+ 2. **`ported.done` / `ported.todo` 必须跟着实现走**:`boot` 返回的这两个列表就是面板的自我描述,
331
+ 曾经把没实现的 `clipboard` 列进 `done`,点「复制提示词」直接 404。测试会挡住这种漂移,
332
+ 收尾完成后 `todo` 必须为空。
333
+ 3. **槽位注册不要包 `ctx.effect`**:`ctx.slots.inject(name, () => ctx.slots.register(...))` 必须直接调用。
334
+ Cordis 的 `effect` 只接受「函数 / null / undefined」作为回调返回值,包错一层会让 `apply()` 在
335
+ **激活阶段**抛 `Invalid effect`,表现为「插件装上了但面板不出现」。见 `AGENTS.md` §4.1.2。
336
+ 4. **shell 必须走 `ctx.shell`**:不许 `node:child_process` 绕过 DSH 的沙箱与审批。
337
+ 另外「命令**没跑起来**」(沙箱后端不可用等)与「命令跑完了但结果如此」必须分开报 ——
338
+ 把前者当成「没装」,会让环境自检对一台装好了 Node/Python 的机器报「未安装」。
339
+ 5. **用户可见文案逐条钉住,不许「意思差不多」地重写**:曾经手写改写安装提示词,丢掉了
340
+ 「不要试探连通性」「以清单为硬性约束」两条安全相关指令。现在由逐条断言守着。
341
+ 6. **自研审核链路只走结构化 Tool**(2026-09-25 口径):审核子代理收到的提示词里
342
+ **不再有**插件二进制目录、`export PATH`、裸 `crwu`/`dws`/`ossutil` 命令;它只调用
343
+ `crwu_*` 工具,由插件用**包内绝对路径**经 `ctx.shell` 执行。Tool 不可见或二进制缺失时
344
+ 在创建子代理**之前**就以 `capability gap` 失败 —— 绝不降级成「去 shell 里找命令」。
345
+ 技能侧由 `npm run skills:cli-guard` 守;`skills/dws/**` 是 vendored 兼容层,**不参与**这条链路。
346
+ 7. **自带二进制按内容校验**:只检查「文件在不在、非不空」证明不了员工装到的那份是对的 ——
347
+ 解包、chmod、拷贝任何一步出错都发现不了。`bin/manifest.json` 记最终文件 size + sha256,
348
+ `bin:check` 与 `pack:assert:strict` 都按它重算。
349
+ 10. **报告由 Host 定位,模型不提交 `schemaCode`**(2026-09-25):自动审核启动前,Host 先解析表单
350
+ code(`H3yunFormResolver`,只发现一次、并发共享)、再用 `crwu_audit_case_bootstrap` 按精确
351
+ `objectId` 取一次记录与附件元数据,落成 `<案例目录>/输入快照/`,把路径与 digest 写进指令。
352
+ 子代理因此**不必也不许**重新定位、列记录或翻案例目录;记录类 Tool 的参数里没有 `schemaCode`。
353
+ 11. **Python 只用 DSH 自带的运行时**(2026-09-25):技能脚本的解释器路径来自
354
+ `load_workspace_dependencies`(实例级解析、只缓存成功、失败可在「重新自检」时重试);
355
+ 自动审核启动前解析不出来就不创建子代理;技能正文禁止裸 `python3`、解释器查找与静默降级。
356
+ 不复制 Python 进包、不改 PATH、不做 pip 自动安装。
357
+ 9. **讨论会话只吃远端资料,而且只有一条本机路径**(2026-09-25):两条「与 DeepSeek 讨论」会话
358
+ 都在首轮注入同一段取数规则 —— 唯一的案例目录(`<工作空间>/<流水号>`,与审核链路同一个约定)、
359
+ 用 `crwu_h3yun_file_get` 逐件从远端下载、**每次新建对话都重新下载**、**禁止** `ls`/`find`/`grep`
360
+ 扫本机、不要自己建目录树。不写这段时实测模型会 `ls` + `find` 去猜目录,并把材料下到
361
+ `cases/<流水号>`(错的)。案例目录的拼接只有一份(`shared/utils/case-dir.ts`)。
362
+ 8. **跳到会话只有 `uiWorkspace.openSession` 一条路**(2026-09-25 修「点讨论/复核跳不过去」):
363
+ 客户端 `sessions` 服务上**没有** `open()`,`sessions?.open?.(id)` 是静默 no-op;
364
+ 而会话 face(改名 / 发问)必须经 `sessions.using(id, {source}, op)`(retain)借 ——
365
+ `binding(id)` 对「刚 `create()` 出来、还没被 retain」的会话返回 `undefined`,
366
+ 于是名字没写上、开场也没发出去(表现就是「建不出新对话」)。三条断言由
367
+ `client-assistant.test.mjs` + `client-package.test.mjs` 守着。
368
+
369
+ ---
370
+
371
+ ## 五、npm 发布(包形态的正式分发)
372
+
373
+ 包形态是长期维护的那一半,按 npm 包分发。仓库已配好发布链路,**不要手工 `npm publish`**:
374
+
375
+ ```bash
376
+ npm run version:set 0.0.2 # 改 package.json + VERSION(并同步 lockfile 根版本)
377
+ # 在 CHANGELOG.md 加一节 `## package · 0.0.2 · <日期>`
378
+ npm run check # 本地门禁:version:check + typecheck + test + build + smoke:built
379
+ npm run pack:assert # 核对真正打进 tarball 的文件清单
380
+ git commit -am "release(dsh-crwu-workbench): 0.0.2" && git push
381
+ git tag plugin-v0.0.2 && git push origin plugin-v0.0.2
382
+ ```
383
+
384
+ `plugin-v*` tag 会触发仓根的 [`.github/workflows/release.yml`](../../.github/workflows/release.yml)
385
+ (`v*` 留给仓里的 Go CLI,两条发布线分开):先断言
386
+ **tag 与 `package.json` / `VERSION` 一致**,再跑完整门禁与产物自检,最后发布。
387
+
388
+ **首次发布(引导)必须在本机做,而且不能带 `--provenance`**(2026-09-28 实测):
389
+ `--provenance` 只在受支持的 CI(GitHub Actions 的 OIDC)里成立,本机 provider 是 `null`,
390
+ npm 会直接以 `EUSAGE: Automatic provenance generation not supported for provider: null` 拒绝发布。
391
+ 所以 `publishConfig` 里**不要**写 `provenance: true`(有测试钉住这一点),本机首发用:
392
+
393
+ ```bash
394
+ npm login --registry=https://registry.npmjs.org
395
+ npm run build && npm run check && npm run pack:assert:strict
396
+ npm publish # 不带 --provenance
397
+ ```
398
+
399
+ 首发成功后包就存在了,再到 npm 网页给这个包配 **Trusted Publisher**(repo `mmungdong/crwu-ai`
400
+ + workflow `release.yml`);之后的版本由 CI 用 **OIDC** 发布 —— 不需要任何长期 token,
401
+ npm 会**自动**附带 provenance attestation,`NPM_TOKEN` secret 也可以删掉。
402
+ 也可以在 Actions 里用 `workflow_dispatch` 跑一次 dry-run:只打包与校验,不发。
403
+
404
+ **`prepublishOnly` 会挡住不该发的包**:先 `pack:assert`(缺入口、误打 `tests/`/`install/`
405
+ 一律失败),再 `check`。所以哪怕有人绕过 tag 手工发布,也过不了这两道。
406
+
407
+ **发布目标钉在官方 registry**:`publishConfig.registry = https://registry.npmjs.org`,与 CI 里
408
+ `setup-node` 的 `registry-url` 一致(`tests/unit/host-package.test.mjs` 会核对两者相同)。
409
+ 不钉的话,本机 `~/.npmrc` 若指向镜像(国内开发机常见),手工 `npm publish` 会往镜像上发,
410
+ 而 `--provenance` 在镜像上根本不成立 —— 一条命令同时踩两个坑。装依赖仍然走你的镜像,不受影响。
411
+
412
+ 发之前可以先空跑一次,它会真的跑完 `prepublishOnly` 并打印将要发布的清单(不会上传):
413
+
414
+ ```bash
415
+ npm publish --dry-run # 期望看到:Publishing to https://registry.npmjs.org …(dry-run)
416
+ ```
417
+
418
+ ### npm 分发路径也实测过
419
+
420
+ 不只是「本地能装」——把 `npm pack` 出的 tarball 装进一个干净 profile,DSH 能真正加载它:
421
+
422
+ ```bash
423
+ npm pack
424
+ dsh plugin --profile tgz add ./dsh-crwu-workbench-0.0.1.tgz # 真实接收方路径:装的是 tarball,不是 link:
425
+ DSH_PERMISSION_MODE=danger-full-access dsh --profile tgz --port 3098 --no-open
426
+ ```
427
+
428
+ 实测结果:profile 的 `node_modules/dsh-crwu-workbench` 是一份**拷贝**(不是符号链接),
429
+ `lib/index.js` / `lib/client.js` 与仓库构建产物**逐字一致**,包里**没有 `src/`**;
430
+ `ping` → `pkg-0.0.1`、`env` → `allOk:true`、`oss-result` 读真实对象成功;
431
+ 客户端产物被登记进该 profile 的 web 启动清单(`{"id":"dsh-crwu-workbench","url":"/plugins/??…"}`)
432
+ 并且服务出来的字节与 `lib/client.js` 一致;随包发布的 `scripts/prepare.mjs` 在无 `src/` 时
433
+ 按设计跳过构建并退出 0。
434
+
435
+ ### 一个必须知道的坑:`prepare` 在 npm 安装时也会跑
436
+
437
+ npm 安装**已发布的 tarball** 时也会执行 `prepare`,而 tarball 里只有 `lib/` + 补丁 + 文档
438
+ (没有 `src/`、`tsconfig.json`、`tsdown.config.ts`)。所以:
439
+
440
+ - `prepare` 不能直接写 `tsdown`,也不能指向不随包发布的脚本;
441
+ - 构建入口是 `scripts/prepare.mjs`,它**在 `files` 里**(必须随包发布),逻辑是
442
+ 「源码在 → 构建;源码不在 → 跳过并说明」;
443
+ - 发布路径由 `prepack` → `build:lib --force` 保证真的构建,源码缺失即失败 ——
444
+ 不会发出一个没有 `lib/` 的包。
445
+
446
+ `tests/unit/host-package.test.mjs` 里有一条**真跑 `npm pack` + `npm install` + 导入**的回归测试,
447
+ 专门钉这条路径:上面两个坑都是本地门禁看不出来、只有接收方装包才会炸的。
448
+
449
+ ### 收件人怎么装
450
+
451
+ 三条分发路径(npm / tarball / git)与安装后的操作见 **第二节「安装」**。
452
+
453
+ ### 版本兼容
454
+
455
+ `peerDependencies` 当前锁在 `@deepseek-ai/dsh-*@^0.1.7-rc.2`(与已安装的 DSH 一致,cordis `^4.0.4`)。
456
+ DSH API 仍是 developer preview,升级 DSH 时**必须**同步核对这几个包、重新跑门禁,
457
+ 并在 `CHANGELOG.md` 里写明兼容到哪个 DSH 版本。
458
+
459
+ > **0.1.7 起这条是硬门禁**:DSH 会拿运行时版本与每个 `@deepseek-ai/dsh*` peer 范围比对,
460
+ > 不匹配的 bundle 会被**整包跳过**(记进 `skippedBundles`)—— 症状是「插件装上了、界面里什么都没有」,
461
+ > 而启动日志没有任何报错。判据是 `peerDependencies`,不是 `engines.dsh`。
462
+
463
+ ---
464
+
465
+ ## 六、依赖(不在本仓)
466
+
467
+ - **技能族**:`crwu-audit` 及其资产/业务/公共子技能、`crwu-dws`、`crwu-h3yun-login` 随本插件包发布;
468
+ `dingtalk-*`(`skills/dws/` 层)是随包 vendored 的上游技能。`ifind-finance-data`(上游技能)
469
+ **不是本插件运行时依赖**:iFinD 取数走结构化 Tool `crwu_audit_ifind_query`,API-Key 由插件 Host
470
+ 自己保管在插件状态目录(不读技能目录里的 `mcp_config.json`)。
471
+ - **CLI**:`crwu`(审核编排)、`dws`(钉钉)、`ossutil`(OSS 上传)。
472
+ - **账号**:氚云员工会话(钉钉扫码)、钉钉认证、阿里云 OSS AccessKey、iFinD **API-Key**
473
+ (每次环境校验都会真的取一次 iFinD 数据,取到数据才算验证通过)。
474
+ 凭据分别落在 `~/.dsh/crwu-workbench.json`、`~/.ossutilconfig`(权限 600)与
475
+ `~/.dsh/crwu-workbench/ifind-credential.json`(权限 600),**都不进本仓**;
476
+ 它们只在环境信息页上填写,**不进对话、不由 Agent 代填**。
477
+
478
+ ---
479
+
480
+ ## 七、目录
481
+
482
+ ```
483
+ AGENTS.md DSH 插件架构、目录、代码风格与测试规范
484
+ SECURITY.md 安全模型:插件能碰到什么、凭据在哪、漏洞怎么报
485
+ LICENSE 内部使用授权(不对外分发)
486
+ install/INSTALL-PROMPT.md 「装插件」提示词(把插件装进别人 DSH 时发给对方 agent)
487
+ install/browser-check.mjs 真实浏览器验收(第 5 / 6 / 7a 条判据,见第一节)
488
+ scripts/sync-version.mjs 版本号一致性(npm run version:set / version:check)
489
+ scripts/assert-pack.mjs 发布产物自检(npm run pack:assert / pack:assert:strict)
490
+ scripts/sync-binaries.mjs 装配包内二进制并写 bin/manifest.json(npm run bin:check)
491
+ scripts/bin-manifest.mjs 构建产物清单的读写与哈希判据(装配与发布自检共用)
492
+ scripts/check-skill-cli-guard.mjs 非 vendored 技能的裸 CLI 静态守卫(npm run skills:cli-guard)
493
+ scripts/prepare.mjs 构建入口(prepare / prepack 用;**随包发布**,见第五节)
494
+ src/index.ts Host 轻入口(只做导出与装配)
495
+ src/host/ Host 配置、同源路由、操作与领域模块
496
+ src/client/ Client 装配、API、组件与 feature 模块
497
+ src/shared/ Host / Client 共享的协议常量与纯工具
498
+ tests/unit/ 配置、路由、操作表、包清单,以及 **Client 半**(含 .tsx)单元测试
499
+ tests/helpers/ TSX 加载器 + 注入式 React 渲染器
500
+ cordis.patch.yml 装配补丁
501
+ PORTING.md 从旧动态形态迁移过来的逐项记录(含验证账)
502
+ .github/workflows/ci.yml push/PR 门禁:Ubuntu + Windows × Node 22/24
503
+ (仓根) .github/workflows/ ci.yml(Go + 插件)· release.yml(plugin-v* tag → 校验 + 发布 npm)
504
+ ```
505
+
506
+ `npm pack` 带 `lib/` + 补丁 + 文档 + 三层技能(`skills/crwu/`、`skills/dws/`、`common/skills/`,
507
+ 解包约 5.5MB(450 个文件),技能正文是大头);`install/`、`tests/`、`scripts/`、`src/` 是仓库内部件,
508
+ 不进包 —— `npm run pack:assert` 会核对这一点。
509
+
510
+ **装配过自带二进制时**(`make plugin-bin`)包里还会多 `bin/darwin-arm64/{crwu,dws,ossutil}`、
511
+ `bin/win32-x64/{crwu.exe,dws.exe,ossutil.exe}` 与 `bin/manifest.json`,形态是 **457 个文件 / 约 106MB**。
512
+ 发布链路必须用 `npm run pack:assert:strict`:它会把真实 tarball 解包,按清单逐个重算六个二进制的
513
+ size 与 sha256,并拒绝 `bin/` 下任何未声明的运行残留。
514
+
515
+ DSH 不要求 TypeScript 源码集中在单个文件。`src/` 按领域拆分,构建后只暴露
516
+ `lib/index.js` 与 `lib/client.js` 两个入口。
517
+
518
+ ## 许可
519
+
520
+ 内部使用,**不对外分发**,见 [`LICENSE`](LICENSE)。审核意见属内部材料:云端链接默认走**签名 URL**
521
+ (带 bearer 签名,1 小时),不要改成公开读。
package/SECURITY.md ADDED
@@ -0,0 +1,39 @@
1
+ # 安全说明(SECURITY)
2
+
3
+ 本仓是一个 **DeepSeek Harness(DSH)插件**。按 DSH 的模型,插件是**受信任的 Host 代码**:
4
+ 它在 `dsh` 进程的权限下运行,不在 agent 沙箱里。装一个插件 = 允许它的代码在你的机器上执行。
5
+
6
+ ## 本插件能碰到什么
7
+
8
+ | 能力 | 位置 | 说明 |
9
+ |---|---|---|
10
+ | 执行 shell 命令 | Host | 只会调用 `crwu` / `dws` / `ossutil` 等具名 CLI,且命令白名单写死在 Host |
11
+ | 读写文件 | Host | 案例目录、`~/.ossutilconfig`(权限 600)、技能自己的配置文件 |
12
+ | 发起子代理 | Host | 一次只允许一条审核;只允许挂在顶层会话下(`requireTopLevelParent`) |
13
+ | 访问阿里云 OSS | Host | 只用配置里的 bucket/prefix;`oss-index`、`oss-result`、`oss-link` 都做前缀校验 |
14
+ | 浏览器渲染 | Client | 只渲染面板。Client 半**不得**导入 `node:*`、不得直接读写本地文件 |
15
+
16
+ **绝对不会**发生的事:Token / AccessKey / 签名 URL 不回显、不进日志、不进错误详情、不进前端持久状态;
17
+ `workbench:oss-result` 只返回精简摘要,不把完整证据链塞进列表接口。
18
+
19
+ ## 凭据存放位置
20
+
21
+ 插件自身**不存**任何凭据。运行期依赖的凭据由各自的工具持有:
22
+
23
+ - `~/.ossutilconfig`(600)—— OSS AccessKey,由 `workbench:oss-cred-save` 写入
24
+ - `~/.dsh/…` —— 氚云 / 钉钉会话
25
+ - 技能自己的配置文件 —— iFinD `auth_token`(Host 只回长度,不回显)
26
+
27
+ 这些路径下任何内容都**不进本仓**,也不应贴进对话。
28
+
29
+ ## 报告漏洞
30
+
31
+ 发现以下任一情况,请直接联系仓库维护者,**不要**开公开 issue:
32
+
33
+ - 能把 OSS 读写越出配置的 bucket / prefix;
34
+ - 能让 Client 半执行任意命令或读任意文件;
35
+ - 能在响应体、日志或错误信息里捞到凭据;
36
+ - 能绕过「单条并发」「只挂顶层会话」这类门禁。
37
+
38
+ 报告时请附:DSH 版本、插件形态(`legacy/` 动态还是 `src/` 包)、复现步骤、以及你实际看到的输出。
39
+ **不要**在报告里附带真实 AccessKey、Token 或内部审核材料 —— 用占位符替换。
Binary file
Binary file
Binary file