dsh-plugin-t-expert 0.4.37 → 0.4.48

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 (469) hide show
  1. package/CHANGELOG.md +280 -0
  2. package/README.md +2 -2
  3. package/THIRD-PARTY-NOTICES +3 -3
  4. package/data/experts/academic/family-education-ma/.imported-from-workbuddy +1 -1
  5. package/data/experts/academic/ket-prep-team/.imported-from-workbuddy +1 -1
  6. package/data/experts/academic/liuxue-yanxue-expert/.imported-from-workbuddy +1 -1
  7. package/data/experts/academic/study-fortune-compass/.imported-from-workbuddy +1 -1
  8. package/data/experts/company/campus-event-navigator/.imported-from-workbuddy +1 -1
  9. package/data/experts/company/fortune-master/.imported-from-workbuddy +1 -1
  10. package/data/experts/company/gaokao-advisor/.imported-from-workbuddy +1 -1
  11. package/data/experts/company/multi-cloud-expert/.imported-from-workbuddy +1 -1
  12. package/data/experts/company/multi-cloud-management-expert/.imported-from-workbuddy +1 -1
  13. package/data/experts/company/opc-team/.imported-from-workbuddy +1 -1
  14. package/data/experts/company/paper-topic-selection/.imported-from-workbuddy +1 -1
  15. package/data/experts/company/tanyuan-cultural-heritage-expert/.imported-from-workbuddy +1 -1
  16. package/data/experts/design/adort-design-expert/.imported-from-workbuddy +1 -1
  17. package/data/experts/design/ai-image-prompt-engineer/.imported-from-workbuddy +1 -1
  18. package/data/experts/design/ask-liuxiaopai/.imported-from-workbuddy +1 -1
  19. package/data/experts/design/delightful-experience-designer/.imported-from-workbuddy +1 -1
  20. package/data/experts/design/design-engine/.imported-from-workbuddy +1 -1
  21. package/data/experts/design/design-md-architect/.imported-from-workbuddy +1 -1
  22. package/data/experts/design/design-prototype-expert/.imported-from-workbuddy +1 -1
  23. package/data/experts/design/design-to-code/.imported-from-workbuddy +1 -1
  24. package/data/experts/design/diversity-visual-expert/.imported-from-workbuddy +1 -1
  25. package/data/experts/design/feedback-synthesis-analyst/.imported-from-workbuddy +1 -1
  26. package/data/experts/design/mermaid-diagram-expert/.imported-from-workbuddy +1 -1
  27. package/data/experts/design/migraq-team/.imported-from-workbuddy +1 -1
  28. package/data/experts/design/ngo-challenge-advisor/.imported-from-workbuddy +1 -1
  29. package/data/experts/design/product-management/.imported-from-workbuddy +1 -1
  30. package/data/experts/design/product-strategy-team/.imported-from-workbuddy +1 -1
  31. package/data/experts/design/tripstar-agent/.imported-from-workbuddy +1 -1
  32. package/data/experts/design/user-experience-architect/.imported-from-workbuddy +1 -1
  33. package/data/experts/design/user-experience-researcher/.imported-from-workbuddy +1 -1
  34. package/data/experts/design/workflow-assistant/.imported-from-workbuddy +1 -1
  35. package/data/experts/engineering/academic-journal-selector/.imported-from-workbuddy +1 -1
  36. package/data/experts/engineering/ai-data-copilot/.imported-from-workbuddy +1 -1
  37. package/data/experts/engineering/aicoding-architecture-expert-team/.imported-from-workbuddy +1 -1
  38. package/data/experts/engineering/aihot/.imported-from-workbuddy +1 -1
  39. package/data/experts/engineering/api-dev/.imported-from-workbuddy +1 -1
  40. package/data/experts/engineering/arxiv-watcher/.imported-from-workbuddy +1 -1
  41. package/data/experts/engineering/cat-network-quality-analyst/.imported-from-workbuddy +1 -1
  42. package/data/experts/engineering/code/.imported-from-workbuddy +1 -1
  43. package/data/experts/engineering/code-review-expert/.imported-from-workbuddy +1 -1
  44. package/data/experts/engineering/data/.imported-from-workbuddy +1 -1
  45. package/data/experts/engineering/data-analytics-reporter/.imported-from-workbuddy +1 -1
  46. package/data/experts/engineering/database-operations/.imported-from-workbuddy +1 -1
  47. package/data/experts/engineering/deep-research/.imported-from-workbuddy +1 -1
  48. package/data/experts/engineering/dev-pipeline-orchestrator/.imported-from-workbuddy +1 -1
  49. package/data/experts/engineering/dockerfile-gen/.imported-from-workbuddy +1 -1
  50. package/data/experts/engineering/edgeone-makers-experts/.imported-from-workbuddy +1 -1
  51. package/data/experts/engineering/empirical-research-team/.imported-from-workbuddy +1 -1
  52. package/data/experts/engineering/engineering-assurance-team/.imported-from-workbuddy +1 -1
  53. package/data/experts/engineering/engineering-workflow-skills/.imported-from-workbuddy +1 -1
  54. package/data/experts/engineering/eno/.imported-from-workbuddy +1 -1
  55. package/data/experts/engineering/finance-data/.imported-from-workbuddy +1 -1
  56. package/data/experts/engineering/frontend/.imported-from-workbuddy +1 -1
  57. package/data/experts/engineering/git-workflow-expert/.imported-from-workbuddy +1 -1
  58. package/data/experts/engineering/gpt-researcher-team/.imported-from-workbuddy +1 -1
  59. package/data/experts/engineering/gstack/.imported-from-workbuddy +1 -1
  60. package/data/experts/engineering/hsk-devops-expert/.imported-from-workbuddy +1 -1
  61. package/data/experts/engineering/huashu-data-pro/.imported-from-workbuddy +1 -1
  62. package/data/experts/engineering/jinshuju-expert/.imported-from-workbuddy +1 -1
  63. package/data/experts/engineering/jinshuju-form-expert/.imported-from-workbuddy +1 -1
  64. package/data/experts/engineering/jinshuju-table-expert/.imported-from-workbuddy +1 -1
  65. package/data/experts/engineering/kdocs-data-table/.imported-from-workbuddy +1 -1
  66. package/data/experts/engineering/llm-wiki/.imported-from-workbuddy +1 -1
  67. package/data/experts/engineering/mcp-build-expert/.imported-from-workbuddy +1 -1
  68. package/data/experts/engineering/mibao-media-archivist/.imported-from-workbuddy +1 -1
  69. package/data/experts/engineering/mobile-application-developer/.imported-from-workbuddy +1 -1
  70. package/data/experts/engineering/modern-webapp/.imported-from-workbuddy +1 -1
  71. package/data/experts/engineering/mvp-dev-expert-team/.imported-from-workbuddy +1 -1
  72. package/data/experts/engineering/ncre-expert/.imported-from-workbuddy +1 -1
  73. package/data/experts/engineering/nuwa/.imported-from-workbuddy +1 -1
  74. package/data/experts/engineering/omics-cdgpt-expert/.imported-from-workbuddy +1 -1
  75. package/data/experts/engineering/omics-hpc-expert/.imported-from-workbuddy +1 -1
  76. package/data/experts/engineering/omics-scbert-expert/.imported-from-workbuddy +1 -1
  77. package/data/experts/engineering/omics-scprotein-expert/.imported-from-workbuddy +1 -1
  78. package/data/experts/engineering/personal-knowledge-architect/.imported-from-workbuddy +1 -1
  79. package/data/experts/engineering/prompt-engineering-expert/.imported-from-workbuddy +1 -1
  80. package/data/experts/engineering/python-fullstack-engineer/.imported-from-workbuddy +1 -1
  81. package/data/experts/engineering/rum-fullstack-team/.imported-from-workbuddy +1 -1
  82. package/data/experts/engineering/software-company/.imported-from-workbuddy +1 -1
  83. package/data/experts/engineering/superpowers-zh/.imported-from-workbuddy +1 -1
  84. package/data/experts/engineering/tencentcloud-api/.imported-from-workbuddy +1 -1
  85. package/data/experts/engineering/vocab-craft-expert/.imported-from-workbuddy +1 -1
  86. package/data/experts/engineering/workspace-builder/.imported-from-workbuddy +1 -1
  87. package/data/experts/engineering/yunzhi-qa-assistant/.imported-from-workbuddy +1 -1
  88. package/data/experts/finance/a-share-analysis/.imported-from-workbuddy +1 -1
  89. package/data/experts/finance/anti-scam-agent/.imported-from-workbuddy +1 -1
  90. package/data/experts/finance/believe-in-light/.imported-from-workbuddy +1 -1
  91. package/data/experts/finance/citongshuopro/.imported-from-workbuddy +1 -1
  92. package/data/experts/finance/corp-credit-due-diligence/.imported-from-workbuddy +1 -1
  93. package/data/experts/finance/dd-due-diligence-team/.imported-from-workbuddy +1 -1
  94. package/data/experts/finance/earnings-reviewer/.imported-from-workbuddy +1 -1
  95. package/data/experts/finance/egypt-strategic-advisory/.imported-from-workbuddy +1 -1
  96. package/data/experts/finance/equity-research/.imported-from-workbuddy +1 -1
  97. package/data/experts/finance/fin-research-expert/.imported-from-workbuddy +1 -1
  98. package/data/experts/finance/finance/.imported-from-workbuddy +1 -1
  99. package/data/experts/finance/financial-analysis/.imported-from-workbuddy +1 -1
  100. package/data/experts/finance/financial-tracker/.imported-from-workbuddy +1 -1
  101. package/data/experts/finance/fund-research-analyst/.imported-from-workbuddy +1 -1
  102. package/data/experts/finance/gl-reconciler/.imported-from-workbuddy +1 -1
  103. package/data/experts/finance/industry-sre-team/.imported-from-workbuddy +1 -1
  104. package/data/experts/finance/investment-banking/.imported-from-workbuddy +1 -1
  105. package/data/experts/finance/investment-masters-team/.imported-from-workbuddy +1 -1
  106. package/data/experts/finance/kyc-screener/.imported-from-workbuddy +1 -1
  107. package/data/experts/finance/mai-deal-advisor/.imported-from-workbuddy +1 -1
  108. package/data/experts/finance/market-researcher/.imported-from-workbuddy +1 -1
  109. package/data/experts/finance/meeting-prep-agent/.imported-from-workbuddy +1 -1
  110. package/data/experts/finance/mentougou-business-guide/.imported-from-workbuddy +1 -1
  111. package/data/experts/finance/model-builder/.imported-from-workbuddy +1 -1
  112. package/data/experts/finance/month-end-closer/.imported-from-workbuddy +1 -1
  113. package/data/experts/finance/new-share-expert/.imported-from-workbuddy +1 -1
  114. package/data/experts/finance/pitch-agent/.imported-from-workbuddy +1 -1
  115. package/data/experts/finance/private-equity/.imported-from-workbuddy +1 -1
  116. package/data/experts/finance/roadshow-research-team/.imported-from-workbuddy +1 -1
  117. package/data/experts/finance/sg-finance-tax/.imported-from-workbuddy +1 -1
  118. package/data/experts/finance/smart-stock-analyst/.imported-from-workbuddy +1 -1
  119. package/data/experts/finance/smb-finance/.imported-from-workbuddy +1 -1
  120. package/data/experts/finance/south-africa-strategy-advisor/.imported-from-workbuddy +1 -1
  121. package/data/experts/finance/statement-auditor/.imported-from-workbuddy +1 -1
  122. package/data/experts/finance/strategy-backtest-expert/.imported-from-workbuddy +1 -1
  123. package/data/experts/finance/tdx-stock-diagnostician/.imported-from-workbuddy +1 -1
  124. package/data/experts/finance/tdx-stock-hunter/.imported-from-workbuddy +1 -1
  125. package/data/experts/finance/tdx-value-assessor/.imported-from-workbuddy +1 -1
  126. package/data/experts/finance/terminal-veteran/.imported-from-workbuddy +1 -1
  127. package/data/experts/finance/trading-agent/.imported-from-workbuddy +1 -1
  128. package/data/experts/finance/uae-public-affairs/.imported-from-workbuddy +1 -1
  129. package/data/experts/finance/uae-strategic-advisor/.imported-from-workbuddy +1 -1
  130. package/data/experts/finance/valuation-reviewer/.imported-from-workbuddy +1 -1
  131. package/data/experts/finance/vietnam-finance-tax-expert/.codebuddy-plugin/plugin.json +60 -0
  132. package/data/experts/finance/vietnam-finance-tax-expert/.downloaded_at +1 -0
  133. package/data/experts/finance/{stock-partner-team → vietnam-finance-tax-expert}/.imported-from-workbuddy +2 -2
  134. package/data/experts/finance/vietnam-finance-tax-expert/README.md +84 -0
  135. package/data/experts/finance/vietnam-finance-tax-expert/persona.md +323 -0
  136. package/data/experts/finance/wealth-management/.imported-from-workbuddy +1 -1
  137. package/data/experts/finance/yahoo-finance-cli/.imported-from-workbuddy +1 -1
  138. package/data/experts/game-development/game-development-studio/.imported-from-workbuddy +1 -1
  139. package/data/experts/game-development/godot-game-script-engineer/.imported-from-workbuddy +1 -1
  140. package/data/experts/gis/egypt-marketing/.imported-from-workbuddy +1 -1
  141. package/data/experts/gis/exam-preparation-planner/.imported-from-workbuddy +1 -1
  142. package/data/experts/gis/lazy-travel-planner/.imported-from-workbuddy +1 -1
  143. package/data/experts/healthcare/patient-education-content-review-word-assistant/.imported-from-workbuddy +1 -1
  144. package/data/experts/healthcare/tianyu-marketing-guardian/.imported-from-workbuddy +1 -1
  145. package/data/experts/hr/customer-support-expert/.imported-from-workbuddy +1 -1
  146. package/data/experts/hr/family-education-coach/.imported-from-workbuddy +1 -1
  147. package/data/experts/hr/fbsir-beike-yi/.imported-from-workbuddy +1 -1
  148. package/data/experts/hr/hr-operations-team/.imported-from-workbuddy +1 -1
  149. package/data/experts/hr/ihr-ai-interviewer/.imported-from-workbuddy +1 -1
  150. package/data/experts/hr/ihr-conference/.imported-from-workbuddy +1 -1
  151. package/data/experts/hr/interview-simulator/.imported-from-workbuddy +1 -1
  152. package/data/experts/hr/qingflow-hr-expert/.imported-from-workbuddy +1 -1
  153. package/data/experts/hr/south-africa-hr-admin/.imported-from-workbuddy +1 -1
  154. package/data/experts/hr/xiaot/.imported-from-workbuddy +1 -1
  155. package/data/experts/legal/brazil-company-query/.imported-from-workbuddy +1 -1
  156. package/data/experts/legal/brazil-legal/.imported-from-workbuddy +1 -1
  157. package/data/experts/legal/brazil-rfb-expert/.imported-from-workbuddy +1 -1
  158. package/data/experts/legal/charity-doc-finance-expert/.imported-from-workbuddy +1 -1
  159. package/data/experts/legal/indonesia-bd-expert/.imported-from-workbuddy +1 -1
  160. package/data/experts/legal/indonesia-digital-law-expert/.imported-from-workbuddy +1 -1
  161. package/data/experts/legal/indonesia-pa-expert/.imported-from-workbuddy +1 -1
  162. package/data/experts/legal/inspection-expert/.imported-from-workbuddy +1 -1
  163. package/data/experts/legal/malaysia-finance-tax/.codebuddy-plugin/plugin.json +64 -0
  164. package/data/experts/legal/malaysia-finance-tax/.downloaded_at +1 -0
  165. package/data/experts/legal/malaysia-finance-tax/.imported-from-workbuddy +7 -0
  166. package/data/experts/legal/malaysia-finance-tax/Corpus_Index.md +239 -0
  167. package/data/experts/legal/malaysia-finance-tax/README.md +56 -0
  168. package/data/experts/legal/malaysia-finance-tax/persona.md +153 -0
  169. package/data/experts/legal/malaysia-finance-tax/requirements.txt +2 -0
  170. package/data/experts/legal/malaysia-hr-admin/.codebuddy-plugin/plugin.json +64 -0
  171. package/data/experts/legal/malaysia-hr-admin/.downloaded_at +1 -0
  172. package/data/experts/legal/malaysia-hr-admin/.imported-from-workbuddy +7 -0
  173. package/data/experts/legal/malaysia-hr-admin/README.md +148 -0
  174. package/data/experts/legal/malaysia-hr-admin/persona.md +283 -0
  175. package/data/experts/legal/malaysia-hr-admin/requirements.txt +1 -0
  176. package/data/experts/legal/malaysia-legal/.codebuddy-plugin/plugin.json +64 -0
  177. package/data/experts/legal/malaysia-legal/.downloaded_at +1 -0
  178. package/data/experts/legal/malaysia-legal/.imported-from-workbuddy +7 -0
  179. package/data/experts/legal/malaysia-legal/Corpus_Index.md +187 -0
  180. package/data/experts/legal/malaysia-legal/README.md +58 -0
  181. package/data/experts/legal/malaysia-legal/persona.md +264 -0
  182. package/data/experts/legal/malaysia-legal/requirements.txt +5 -0
  183. package/data/experts/legal/sg-hr-admin-expert/.imported-from-workbuddy +1 -1
  184. package/data/experts/legal/smb-team/.imported-from-workbuddy +1 -1
  185. package/data/experts/legal/thai-marketing-creative/.imported-from-workbuddy +1 -1
  186. package/data/experts/legal/thailand-hr-admin/.imported-from-workbuddy +1 -1
  187. package/data/experts/marketing/ad-tracking-expert/.imported-from-workbuddy +1 -1
  188. package/data/experts/marketing/ai-humanizer/.imported-from-workbuddy +1 -1
  189. package/data/experts/marketing/ai-shifu/.imported-from-workbuddy +1 -1
  190. package/data/experts/marketing/ai-video-script/.imported-from-workbuddy +1 -1
  191. package/data/experts/marketing/auto-consultant/.imported-from-workbuddy +1 -1
  192. package/data/experts/marketing/book-co-creator/.imported-from-workbuddy +1 -1
  193. package/data/experts/marketing/chatcut-video-editor/.imported-from-workbuddy +1 -1
  194. package/data/experts/marketing/content-creation-expert-prod/.imported-from-workbuddy +1 -1
  195. package/data/experts/marketing/content-distribution-team/.imported-from-workbuddy +1 -1
  196. package/data/experts/marketing/content-monetization-team/.imported-from-workbuddy +1 -1
  197. package/data/experts/marketing/content-writer/.imported-from-workbuddy +1 -1
  198. package/data/experts/marketing/executing-marketing-campaigns/.imported-from-workbuddy +1 -1
  199. package/data/experts/marketing/fbsir-mom-dialogue-expert/.imported-from-workbuddy +1 -1
  200. package/data/experts/marketing/frontend-slides/.imported-from-workbuddy +1 -1
  201. package/data/experts/marketing/geo-diagnosis-expert/.imported-from-workbuddy +1 -1
  202. package/data/experts/marketing/humanize-ppt-team/.imported-from-workbuddy +1 -1
  203. package/data/experts/marketing/jiayi-ads-analytics-expert/.imported-from-workbuddy +1 -1
  204. package/data/experts/marketing/kdocs-doc-butler/.imported-from-workbuddy +1 -1
  205. package/data/experts/marketing/kdocs-knowledge-collector/.imported-from-workbuddy +1 -1
  206. package/data/experts/marketing/kdocs-pdf-toolbox/.imported-from-workbuddy +1 -1
  207. package/data/experts/marketing/kdocs-ppt-creator/.imported-from-workbuddy +1 -1
  208. package/data/experts/marketing/kidd-content-expert/.imported-from-workbuddy +1 -1
  209. package/data/experts/marketing/livestream-ecommerce-coach/.imported-from-workbuddy +1 -1
  210. package/data/experts/marketing/long-manuscript-expert/.imported-from-workbuddy +1 -1
  211. package/data/experts/marketing/market-analysis-cn/.imported-from-workbuddy +1 -1
  212. package/data/experts/marketing/marketing-campaign-team/.imported-from-workbuddy +1 -1
  213. package/data/experts/marketing/marketing-growth-team/.imported-from-workbuddy +1 -1
  214. package/data/experts/marketing/news-briefing-expert/.imported-from-workbuddy +1 -1
  215. package/data/experts/marketing/news-buddy/.imported-from-workbuddy +1 -1
  216. package/data/experts/marketing/nges-healthcare-marketing-team/.imported-from-workbuddy +1 -1
  217. package/data/experts/marketing/novel-creator/.imported-from-workbuddy +1 -1
  218. package/data/experts/marketing/novel-generator/.imported-from-workbuddy +1 -1
  219. package/data/experts/marketing/ppc-bidding-strategist/.imported-from-workbuddy +1 -1
  220. package/data/experts/marketing/ppt-creation-expert/.imported-from-workbuddy +1 -1
  221. package/data/experts/marketing/private-domain-marketing-expert/.imported-from-workbuddy +1 -1
  222. package/data/experts/marketing/programmatic-ad-buyer/.imported-from-workbuddy +1 -1
  223. package/data/experts/marketing/promo-creator-team/.imported-from-workbuddy +1 -1
  224. package/data/experts/marketing/remotion-video-generator/.imported-from-workbuddy +1 -1
  225. package/data/experts/marketing/seo-content-team/.imported-from-workbuddy +1 -1
  226. package/data/experts/marketing/social-engagement-team/.imported-from-workbuddy +1 -1
  227. package/data/experts/marketing/tietu-toutiao/.imported-from-workbuddy +1 -1
  228. package/data/experts/marketing/topic-evaluator/.imported-from-workbuddy +1 -1
  229. package/data/experts/marketing/trend-hunter/.imported-from-workbuddy +1 -1
  230. package/data/experts/marketing/vibeknow-design-video/.imported-from-workbuddy +1 -1
  231. package/data/experts/marketing/vibeknow-handdraw/.imported-from-workbuddy +1 -1
  232. package/data/experts/marketing/vibeknow-ppt-explain/.imported-from-workbuddy +1 -1
  233. package/data/experts/marketing/video-dissection/.imported-from-workbuddy +1 -1
  234. package/data/experts/marketing/video-gen-team/.imported-from-workbuddy +1 -1
  235. package/data/experts/marketing/viral-topic-master/.imported-from-workbuddy +1 -1
  236. package/data/experts/marketing/wechat-official-account-expert/.imported-from-workbuddy +1 -1
  237. package/data/experts/marketing/xiaohongshu-operations-expert/.imported-from-workbuddy +1 -1
  238. package/data/experts/paid-media/computer-operations-advisor/.imported-from-workbuddy +1 -1
  239. package/data/experts/paid-media/vietnam-public-affairs/.imported-from-workbuddy +1 -1
  240. package/data/experts/project-management/agent-orchestrator/.imported-from-workbuddy +1 -1
  241. package/data/experts/project-management/ai-meeting-notes/.imported-from-workbuddy +1 -1
  242. package/data/experts/project-management/api-testing-expert/.imported-from-workbuddy +1 -1
  243. package/data/experts/project-management/document-generation-expert/.imported-from-workbuddy +1 -1
  244. package/data/experts/project-management/document-skills/.imported-from-workbuddy +1 -1
  245. package/data/experts/project-management/internal-comms/.imported-from-workbuddy +1 -1
  246. package/data/experts/project-management/jira-workflow-admin/.imported-from-workbuddy +1 -1
  247. package/data/experts/project-management/openspec-doc-team/.imported-from-workbuddy +1 -1
  248. package/data/experts/project-management/performance-testing-expert/.imported-from-workbuddy +1 -1
  249. package/data/experts/project-management/tencent-charity-expert/.imported-from-workbuddy +1 -1
  250. package/data/experts/project-management/webapp-testing/.imported-from-workbuddy +1 -1
  251. package/data/experts/project-management/yunzhi-doc-quality-expert/.imported-from-workbuddy +1 -1
  252. package/data/experts/research/apm-performance-expert/.imported-from-workbuddy +1 -1
  253. package/data/experts/research/egypt-public-affairs/.imported-from-workbuddy +1 -1
  254. package/data/experts/research/finops-expert/.imported-from-workbuddy +1 -1
  255. package/data/experts/research/fortune-consultant/.imported-from-workbuddy +1 -1
  256. package/data/experts/research/hubble-eval-expert/.imported-from-workbuddy +1 -1
  257. package/data/experts/research/sre-expert/.imported-from-workbuddy +1 -1
  258. package/data/experts/sales/bidding-strategist/.imported-from-workbuddy +1 -1
  259. package/data/experts/sales/cordys-crm/.imported-from-workbuddy +1 -1
  260. package/data/experts/sales/enterprise-account-strategist/.imported-from-workbuddy +1 -1
  261. package/data/experts/sales/industrial-park-investment-attraction-expert/.imported-from-workbuddy +1 -1
  262. package/data/experts/sales/linkfox-expert-amazon-listing-specialist/.imported-from-workbuddy +1 -1
  263. package/data/experts/sales/meituan-living-assistant/.imported-from-workbuddy +1 -1
  264. package/data/experts/sales/presales-technical-consultant/.imported-from-workbuddy +1 -1
  265. package/data/experts/sales/sales-battle-team/.imported-from-workbuddy +1 -1
  266. package/data/experts/sales/sdk-log-expert/.imported-from-workbuddy +1 -1
  267. package/data/experts/sales/sg-biz-dev/.imported-from-workbuddy +1 -1
  268. package/data/experts/sales/smb-revenue/.imported-from-workbuddy +1 -1
  269. package/data/experts/sales/uupt-delivery/.imported-from-workbuddy +1 -1
  270. package/data/experts/security/chatlaw-team/.imported-from-workbuddy +1 -1
  271. package/data/experts/security/contract-expert/.imported-from-workbuddy +1 -1
  272. package/data/experts/security/contract-legal-expert/.imported-from-workbuddy +1 -1
  273. package/data/experts/security/enterprise-legal-team/.imported-from-workbuddy +1 -1
  274. package/data/experts/security/fbsir-aigc-compliance-red-team/.imported-from-workbuddy +1 -1
  275. package/data/experts/security/fbsir-board-secretary-assistant/.imported-from-workbuddy +1 -1
  276. package/data/experts/security/huashu-doc-reviewer/.imported-from-workbuddy +1 -1
  277. package/data/experts/security/invoice-verify-expert/.imported-from-workbuddy +1 -1
  278. package/data/experts/security/invoice-verify-workbuddy/.imported-from-workbuddy +1 -1
  279. package/data/experts/security/ip-expert/.imported-from-workbuddy +1 -1
  280. package/data/experts/security/law-student-coach/.imported-from-workbuddy +1 -1
  281. package/data/experts/security/legal-builder-hub/.imported-from-workbuddy +1 -1
  282. package/data/experts/security/legal-clinic-supervisor/.imported-from-workbuddy +1 -1
  283. package/data/experts/security/legal-compliance-reviewer/.imported-from-workbuddy +1 -1
  284. package/data/experts/security/legal-search-pro/.imported-from-workbuddy +1 -1
  285. package/data/experts/security/litigation-legal/.imported-from-workbuddy +1 -1
  286. package/data/experts/security/marketing-reviewer/.imported-from-workbuddy +1 -1
  287. package/data/experts/security/personal-fitness-coach/.imported-from-workbuddy +1 -1
  288. package/data/experts/security/sa-legal-compliance/.imported-from-workbuddy +1 -1
  289. package/data/experts/security/smb-compliance/.imported-from-workbuddy +1 -1
  290. package/data/experts/security/soe/.imported-from-workbuddy +1 -1
  291. package/data/experts/security/tax-compliance-team/.imported-from-workbuddy +1 -1
  292. package/data/experts/security/tc-sec/.imported-from-workbuddy +1 -1
  293. package/data/experts/security/tencent-security-expert/.imported-from-workbuddy +1 -1
  294. package/data/experts/security/xiaofa-litigation-assistant/.imported-from-workbuddy +1 -1
  295. package/data/experts/spatial-computing/career-navigator/.imported-from-workbuddy +1 -1
  296. package/data/experts/spatial-computing/chaogeek-kongming/.imported-from-workbuddy +1 -1
  297. package/data/experts/spatial-computing/chuangye-manor/.imported-from-workbuddy +1 -1
  298. package/data/experts/spatial-computing/consulting-partners/.imported-from-workbuddy +1 -1
  299. package/data/experts/spatial-computing/english-writing-coach/.imported-from-workbuddy +1 -1
  300. package/data/experts/spatial-computing/fbsir-eight-seat-board/.imported-from-workbuddy +1 -1
  301. package/data/experts/spatial-computing/fbsir-industry-scene-researcher/.imported-from-workbuddy +1 -1
  302. package/data/experts/spatial-computing/fbsir-super-partner/.imported-from-workbuddy +1 -1
  303. package/data/experts/spatial-computing/innovation-startup-mentor/.imported-from-workbuddy +1 -1
  304. package/data/experts/spatial-computing/malaysia-marketing/.imported-from-workbuddy +1 -1
  305. package/data/experts/spatial-computing/metamorphosis-practitioner/.imported-from-workbuddy +1 -1
  306. package/data/experts/spatial-computing/tianyu-account-guardian/.imported-from-workbuddy +1 -1
  307. package/data/experts/spatial-computing/uae-marketing-advisor/.imported-from-workbuddy +1 -1
  308. package/data/experts/spatial-computing/well-arch-expert/.imported-from-workbuddy +1 -1
  309. package/data/experts/specialized/campus-conversation-coach/.imported-from-workbuddy +1 -1
  310. package/data/experts/specialized/capacity-expert/.imported-from-workbuddy +1 -1
  311. package/data/experts/specialized/chaos-expert/.imported-from-workbuddy +1 -1
  312. package/data/experts/specialized/fbsir-super-independent-board/.imported-from-workbuddy +1 -1
  313. package/data/experts/specialized/indie-founder-coach/.imported-from-workbuddy +1 -1
  314. package/data/experts/specialized/job-companion-team/.imported-from-workbuddy +1 -1
  315. package/data/experts/specialized/note-class-representative/.imported-from-workbuddy +1 -1
  316. package/data/experts/specialized/panshi-customer-visit-agent/.imported-from-workbuddy +1 -1
  317. package/data/experts/specialized/tc-chengxin-travel-expert/.imported-from-workbuddy +1 -1
  318. package/data/experts/specialized/worldcup-buddy/.imported-from-workbuddy +1 -1
  319. package/data/experts/support/campus-job-search-coach/.imported-from-workbuddy +1 -1
  320. package/data/experts/support/skillhub-charity-expert-team/.imported-from-workbuddy +1 -1
  321. package/data/experts/support/tencent-rtc-expert/.imported-from-workbuddy +1 -1
  322. package/data/experts/support/workbuddy-universal-mentor/.imported-from-workbuddy +1 -1
  323. package/data/experts/testing/aladin-test-design/.imported-from-workbuddy +1 -1
  324. package/data/experts/testing/skill-smith/.imported-from-workbuddy +1 -1
  325. package/data/experts/testing/thesis-writing-mentor/.imported-from-workbuddy +1 -1
  326. package/data/roster.json +255 -490
  327. package/data/source.json +3 -3
  328. package/lib/client.js +1 -1
  329. package/lib/fetch-assets.js +167 -1
  330. package/lib/index.js +55 -3
  331. package/package.json +2 -2
  332. package/vendor/third-party-licenses/README.md +1 -1
  333. package/data/experts/design/cloud-requirement-expert/.codebuddy-plugin/plugin.json +0 -67
  334. package/data/experts/design/cloud-requirement-expert/.downloaded_at +0 -1
  335. package/data/experts/design/cloud-requirement-expert/.imported-from-workbuddy +0 -7
  336. package/data/experts/design/cloud-requirement-expert/.mcp.json +0 -22
  337. package/data/experts/design/cloud-requirement-expert/README.md +0 -52
  338. package/data/experts/design/cloud-requirement-expert/persona.md +0 -88
  339. package/data/experts/engineering/databrain-opinion-expert/.codebuddy-plugin/plugin.json +0 -80
  340. package/data/experts/engineering/databrain-opinion-expert/.downloaded_at +0 -1
  341. package/data/experts/engineering/databrain-opinion-expert/.imported-from-workbuddy +0 -7
  342. package/data/experts/engineering/databrain-opinion-expert/README.md +0 -96
  343. package/data/experts/engineering/databrain-opinion-expert/persona.md +0 -55
  344. package/data/experts/engineering/fundus-disease-analysis/.codebuddy-plugin/plugin.json +0 -64
  345. package/data/experts/engineering/fundus-disease-analysis/.downloaded_at +0 -1
  346. package/data/experts/engineering/fundus-disease-analysis/.imported-from-workbuddy +0 -7
  347. package/data/experts/engineering/fundus-disease-analysis/README.md +0 -48
  348. package/data/experts/engineering/fundus-disease-analysis/persona.md +0 -139
  349. package/data/experts/engineering/omics-bioinfo-expert/.codebuddy-plugin/plugin.json +0 -66
  350. package/data/experts/engineering/omics-bioinfo-expert/.downloaded_at +0 -1
  351. package/data/experts/engineering/omics-bioinfo-expert/.imported-from-workbuddy +0 -7
  352. package/data/experts/engineering/omics-bioinfo-expert/README.md +0 -24
  353. package/data/experts/engineering/omics-bioinfo-expert/persona.md +0 -66
  354. package/data/experts/engineering/omics-diagnosis-expert/.codebuddy-plugin/plugin.json +0 -64
  355. package/data/experts/engineering/omics-diagnosis-expert/.downloaded_at +0 -1
  356. package/data/experts/engineering/omics-diagnosis-expert/.imported-from-workbuddy +0 -7
  357. package/data/experts/engineering/omics-diagnosis-expert/README.md +0 -24
  358. package/data/experts/engineering/omics-diagnosis-expert/agents/omics-diagnosis-expert.md +0 -63
  359. package/data/experts/engineering/omics-diagnosis-expert/persona.md +0 -59
  360. package/data/experts/engineering/omics-diagnosis-expert/skills/omics-run-diagnosis/SKILL.md +0 -384
  361. package/data/experts/engineering/omics-diagnosis-expert/skills/omics-run-diagnosis/references/troubleshooting-kb.md +0 -347
  362. package/data/experts/engineering/omics-diagnosis-expert/skills/omics-run-diagnosis/scripts/query_run_log.py +0 -369
  363. package/data/experts/engineering/omics-iggm-expert/.codebuddy-plugin/plugin.json +0 -65
  364. package/data/experts/engineering/omics-iggm-expert/.downloaded_at +0 -1
  365. package/data/experts/engineering/omics-iggm-expert/.imported-from-workbuddy +0 -7
  366. package/data/experts/engineering/omics-iggm-expert/persona.md +0 -36
  367. package/data/experts/engineering/omics-ori-expert/.codebuddy-plugin/plugin.json +0 -65
  368. package/data/experts/engineering/omics-ori-expert/.downloaded_at +0 -1
  369. package/data/experts/engineering/omics-ori-expert/.imported-from-workbuddy +0 -7
  370. package/data/experts/engineering/omics-ori-expert/persona.md +0 -36
  371. package/data/experts/engineering/omics-tfold-expert/.codebuddy-plugin/plugin.json +0 -65
  372. package/data/experts/engineering/omics-tfold-expert/.downloaded_at +0 -1
  373. package/data/experts/engineering/omics-tfold-expert/.imported-from-workbuddy +0 -7
  374. package/data/experts/engineering/omics-tfold-expert/persona.md +0 -36
  375. package/data/experts/engineering/pneumonia-ai-analyst/.codebuddy-plugin/plugin.json +0 -65
  376. package/data/experts/engineering/pneumonia-ai-analyst/.downloaded_at +0 -1
  377. package/data/experts/engineering/pneumonia-ai-analyst/.imported-from-workbuddy +0 -7
  378. package/data/experts/engineering/pneumonia-ai-analyst/README.md +0 -44
  379. package/data/experts/engineering/pneumonia-ai-analyst/persona.md +0 -178
  380. package/data/experts/engineering/tiderider-sentiment/.codebuddy-plugin/plugin.json +0 -74
  381. package/data/experts/engineering/tiderider-sentiment/.downloaded_at +0 -1
  382. package/data/experts/engineering/tiderider-sentiment/.imported-from-workbuddy +0 -7
  383. package/data/experts/engineering/tiderider-sentiment/CHANGELOG.md +0 -65
  384. package/data/experts/engineering/tiderider-sentiment/README.md +0 -124
  385. package/data/experts/engineering/tiderider-sentiment/persona.md +0 -469
  386. package/data/experts/engineering/wentu/.codebuddy-plugin/plugin.json +0 -65
  387. package/data/experts/engineering/wentu/.downloaded_at +0 -1
  388. package/data/experts/engineering/wentu/.imported-from-workbuddy +0 -7
  389. package/data/experts/engineering/wentu/README.md +0 -18
  390. package/data/experts/engineering/wentu/persona.md +0 -1003
  391. package/data/experts/finance/stock-partner-team/.codebuddy-plugin/plugin.json +0 -181
  392. package/data/experts/finance/stock-partner-team/.downloaded_at +0 -1
  393. package/data/experts/finance/stock-partner-team/README.md +0 -151
  394. package/data/experts/finance/stock-partner-team/persona.md +0 -2549
  395. package/data/experts/finance/stock-partner-team/settings.json +0 -3
  396. package/data/experts/game-development/databrain-agent-v2/.codebuddy-plugin/plugin.json +0 -80
  397. package/data/experts/game-development/databrain-agent-v2/.downloaded_at +0 -1
  398. package/data/experts/game-development/databrain-agent-v2/.imported-from-workbuddy +0 -7
  399. package/data/experts/game-development/databrain-agent-v2/README.md +0 -133
  400. package/data/experts/game-development/databrain-agent-v2/persona.md +0 -217
  401. package/data/experts/game-development/databrain-agent-v2/requirements.txt +0 -22
  402. package/data/experts/healthcare/mi-zhen-expert/.codebuddy-plugin/plugin.json +0 -64
  403. package/data/experts/healthcare/mi-zhen-expert/.downloaded_at +0 -1
  404. package/data/experts/healthcare/mi-zhen-expert/.imported-from-workbuddy +0 -7
  405. package/data/experts/healthcare/mi-zhen-expert/README.md +0 -44
  406. package/data/experts/healthcare/mi-zhen-expert/agents/mi-zhen-expert.md +0 -33
  407. package/data/experts/healthcare/mi-zhen-expert/persona.md +0 -29
  408. package/data/experts/healthcare/mi-zhen-expert/skills/med-agent-proxy/SKILL.md +0 -69
  409. package/data/experts/healthcare/mi-zhen-expert/skills/med-agent-proxy/scripts/chat_workbuddy.py +0 -498
  410. package/data/experts/hr/career-broker/.codebuddy-plugin/plugin.json +0 -95
  411. package/data/experts/hr/career-broker/.downloaded_at +0 -1
  412. package/data/experts/hr/career-broker/.imported-from-workbuddy +0 -7
  413. package/data/experts/hr/career-broker/README.md +0 -153
  414. package/data/experts/hr/career-broker/persona.md +0 -546
  415. package/data/experts/hr/hr-digital-expert/.codebuddy-plugin/plugin.json +0 -61
  416. package/data/experts/hr/hr-digital-expert/.downloaded_at +0 -1
  417. package/data/experts/hr/hr-digital-expert/.imported-from-workbuddy +0 -7
  418. package/data/experts/hr/hr-digital-expert/.mcp.json +0 -88
  419. package/data/experts/hr/hr-digital-expert/README.md +0 -48
  420. package/data/experts/hr/hr-digital-expert/persona.md +0 -142
  421. package/data/experts/hr/txzhaopin/.codebuddy-plugin/plugin.json +0 -207
  422. package/data/experts/hr/txzhaopin/.downloaded_at +0 -1
  423. package/data/experts/hr/txzhaopin/.imported-from-workbuddy +0 -7
  424. package/data/experts/hr/txzhaopin/.mcp.json +0 -45
  425. package/data/experts/hr/txzhaopin/README.md +0 -397
  426. package/data/experts/hr/txzhaopin/persona.md +0 -244
  427. package/data/experts/marketing/brand-guardian/.codebuddy-plugin/plugin.json +0 -31
  428. package/data/experts/marketing/brand-guardian/.downloaded_at +0 -1
  429. package/data/experts/marketing/brand-guardian/.imported-from-workbuddy +0 -7
  430. package/data/experts/marketing/brand-guardian/README.md +0 -21
  431. package/data/experts/marketing/brand-guardian/persona.md +0 -332
  432. package/data/experts/research/ab-experiment-analyst/.codebuddy-plugin/plugin.json +0 -66
  433. package/data/experts/research/ab-experiment-analyst/.downloaded_at +0 -1
  434. package/data/experts/research/ab-experiment-analyst/.imported-from-workbuddy +0 -7
  435. package/data/experts/research/ab-experiment-analyst/persona.md +0 -852
  436. package/data/experts/sales/cpq/.codebuddy-plugin/plugin.json +0 -79
  437. package/data/experts/sales/cpq/.downloaded_at +0 -1
  438. package/data/experts/sales/cpq/.imported-from-workbuddy +0 -7
  439. package/data/experts/sales/cpq/BUILD_INFO.json +0 -6
  440. package/data/experts/sales/cpq/CHANGELOG.md +0 -165
  441. package/data/experts/sales/cpq/DEPENDENCIES.md +0 -52
  442. package/data/experts/sales/cpq/README.md +0 -43
  443. package/data/experts/sales/cpq/persona.md +0 -177
  444. package/data/experts/supply-chain/tencent-cloud-quote-assistant/.codebuddy-plugin/plugin.json +0 -64
  445. package/data/experts/supply-chain/tencent-cloud-quote-assistant/.downloaded_at +0 -1
  446. package/data/experts/supply-chain/tencent-cloud-quote-assistant/.imported-from-workbuddy +0 -7
  447. package/data/experts/supply-chain/tencent-cloud-quote-assistant/README.md +0 -81
  448. package/data/experts/supply-chain/tencent-cloud-quote-assistant/persona.md +0 -204
  449. package/data/experts/support/andon-q-expert/.codebuddy-plugin/plugin.json +0 -64
  450. package/data/experts/support/andon-q-expert/.downloaded_at +0 -1
  451. package/data/experts/support/andon-q-expert/.imported-from-workbuddy +0 -7
  452. package/data/experts/support/andon-q-expert/README.md +0 -62
  453. package/data/experts/support/andon-q-expert/persona.md +0 -67
  454. package/data/experts/support/cloud-ops-team/.codebuddy-plugin/plugin.json +0 -89
  455. package/data/experts/support/cloud-ops-team/.downloaded_at +0 -1
  456. package/data/experts/support/cloud-ops-team/.imported-from-workbuddy +0 -7
  457. package/data/experts/support/cloud-ops-team/README.md +0 -98
  458. package/data/experts/support/cloud-ops-team/persona.md +0 -346
  459. package/data/experts/support/cloud-ops-team/settings.json +0 -3
  460. package/data/experts/support/migraq/.codebuddy-plugin/plugin.json +0 -64
  461. package/data/experts/support/migraq/.downloaded_at +0 -1
  462. package/data/experts/support/migraq/.imported-from-workbuddy +0 -7
  463. package/data/experts/support/migraq/README.md +0 -59
  464. package/data/experts/support/migraq/persona.md +0 -56
  465. package/data/experts/support/tencent-cloud-price-expert/.codebuddy-plugin/plugin.json +0 -64
  466. package/data/experts/support/tencent-cloud-price-expert/.downloaded_at +0 -1
  467. package/data/experts/support/tencent-cloud-price-expert/.imported-from-workbuddy +0 -7
  468. package/data/experts/support/tencent-cloud-price-expert/README.md +0 -97
  469. package/data/experts/support/tencent-cloud-price-expert/persona.md +0 -192
package/data/source.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
- "updatedAt": "2026-09-15 19:33:48 +0800",
3
- "expertFiles": 645,
2
+ "updatedAt": "2026-09-29 14:20:00 +0800",
3
+ "expertFiles": 624,
4
4
  "divisions": [
5
5
  "academic",
6
6
  "company",
@@ -25,5 +25,5 @@
25
25
  "support",
26
26
  "testing"
27
27
  ],
28
- "note": "本仓名册清单:data/experts 是真源(含 322 个从 WorkBuddy 导入的目录形态专家)"
28
+ "note": "本仓名册清单:data/experts 是真源(含从 WorkBuddy 导入的目录形态专家)。2026-09-29 移除 22 位绑定腾讯内部系统的专家(代码层端点指向 *.woa.com 等内网域名),645 → 624。"
29
29
  }
package/lib/client.js CHANGED
@@ -67,7 +67,7 @@ var SectionBoundary = class extends import_react.default.Component {
67
67
 
68
68
  // src/client/state.js
69
69
  var NS = "t-team";
70
- var CLIENT_BUILD_VERSION = "0.4.37";
70
+ var CLIENT_BUILD_VERSION = "0.4.48";
71
71
  var PLUGIN_ID = "dsh-plugin-t-expert";
72
72
  var DIVISION_FALLBACK = "specialized";
73
73
  var NEW_DIVISION = "__new";
@@ -54,6 +54,159 @@ export async function loadRoster(path) {
54
54
  }
55
55
  }
56
56
 
57
+ // ---------------------------------------------------------------------------
58
+ // 远端清单(roster.json 放 OBS):让「只更新专家、不动插件」成为可能。
59
+ //
60
+ // 背景:原来 `data/roster.json` 只随插件包发布,于是改专家必须发版、用户必须升级,
61
+ // 否则老用户手上的清单永远停在旧 sha256、判定 READY 永不刷新。解法是清单也放云端:
62
+ // `upload-obs.mjs` 早就在传 `agetn/roster.json`,这里补「运行时优先读远端」这半边。
63
+ //
64
+ // 安全:远端清单一旦成为权威来源,就能指挥客户端下载任意 URL。所以**必须**过一道
65
+ // `sanitizeRemoteRoster` —— baseUrl 只能等于包内清单的 baseUrl(随 npm 签名包走、可信),
66
+ // path / sha256 / bytes / dirs 逐条校验形态,条目数设上限。任何一条不合法就整份丢弃、
67
+ // 回退缓存或包内。宁可退回旧清单,也不能让一份被篡改的清单指挥下载。
68
+ // ---------------------------------------------------------------------------
69
+
70
+ /** 兜底白名单:包内清单没有 baseUrl 时的唯一允许地址。 */
71
+ const ALLOWED_BASE_URL = "https://aitoolsdata.obs.cn-south-4.myhuaweicloud.com/agetn";
72
+
73
+ /** 远端清单拉取的超时(毫秒)—— 拉不到就回退,别拖住召唤。 */
74
+ export const ROSTER_FETCH_TIMEOUT_MS = 8000;
75
+
76
+ /** 缓存清单的保鲜期(毫秒)。过期后下次调用会触发后台刷新。 */
77
+ export const ROSTER_TTL_MS = 12 * 60 * 60 * 1000;
78
+
79
+ /** 单包体积上限(防清单里塞进一个超大对象把客户端下爆)。 */
80
+ const MAX_PACK_BYTES = 200 * 1024 * 1024;
81
+
82
+ /** 远端条目数最多比包内多出这么多(防塞入海量条目)。 */
83
+ const MAX_ROSTER_EXTRA = 200;
84
+
85
+ /** 远端 roster.json 本体的体积上限(防塞大 JSON)。 */
86
+ const MAX_ROSTER_TEXT = 2 * 1024 * 1024;
87
+
88
+ /**
89
+ * 校验一份**远端**清单,只保留逐条通过白名单规则的条目。
90
+ *
91
+ * 原则:**宁可丢掉条目,也不放行可疑内容**。校验不过的条目直接跳过,不是整个报错 ——
92
+ * 但若整份清单连 baseUrl / 结构 / 条数上限都过不了,就返回 `undefined` 让调用方回退。
93
+ *
94
+ * @param {unknown} data - `JSON.parse` 后的远端清单。
95
+ * @param {object|undefined} bundled - 包内清单(可信基线:baseUrl 与条目数上限都取自它)。
96
+ * @returns {object|undefined} 干净的清单(结构与包内一致),或 `undefined` 表示整份不可用。
97
+ */
98
+ export function sanitizeRemoteRoster(data, bundled) {
99
+ if (data === null || typeof data !== "object") return undefined;
100
+ const obj = /** @type {any} */ (data);
101
+ // baseUrl 只能等于包内清单的 baseUrl(随 npm 包走、可信);包内没有时退回写死常量。
102
+ const allowedBase = typeof bundled?.baseUrl === "string" && bundled.baseUrl !== ""
103
+ ? bundled.baseUrl
104
+ : ALLOWED_BASE_URL;
105
+ if (typeof obj.baseUrl !== "string" || obj.baseUrl !== allowedBase) return undefined;
106
+ if (obj.packs === null || typeof obj.packs !== "object") return undefined;
107
+
108
+ const bundledCount = bundled?.packs && typeof bundled.packs === "object"
109
+ ? Object.keys(bundled.packs).length
110
+ : 0;
111
+
112
+ const packs = {};
113
+ for (const [key, raw] of Object.entries(obj.packs)) {
114
+ if (raw === null || typeof raw !== "object") continue;
115
+ const info = /** @type {any} */ (raw);
116
+ // key 必须是 `<分区>/<slug>`:小写字母数字与连字符两段,其它一律拒。
117
+ const m = /^([a-z0-9-]+)\/([a-z0-9-]+)$/u.exec(key);
118
+ if (m === null) continue;
119
+ // path 必须严格等于 `packs/<分区>/<slug>.tar.gz`(没有 ../、没有绝对路径、没有其它目录)。
120
+ if (typeof info.path !== "string" || info.path !== `packs/${m[1]}/${m[2]}.tar.gz`) continue;
121
+ // sha256 必须是 64 位十六进制。
122
+ if (typeof info.sha256 !== "string" || !/^[0-9a-f]{64}$/u.test(info.sha256)) continue;
123
+ // bytes 非负整数且不超上限。
124
+ if (!Number.isInteger(info.bytes) || info.bytes < 0 || info.bytes > MAX_PACK_BYTES) continue;
125
+ // dirs 必须是字符串数组,且每项是「纯目录名」(不含斜杠、不含 `..`)—— 解包时按它删目录。
126
+ if (!Array.isArray(info.dirs) || info.dirs.length === 0) continue;
127
+ if (info.dirs.some((d) => typeof d !== "string" || d === "" || d.includes("/") || d.includes("..") || d.includes("\\"))) continue;
128
+ packs[key] = {
129
+ division: m[1],
130
+ slug: m[2],
131
+ path: info.path,
132
+ bytes: info.bytes,
133
+ sha256: info.sha256,
134
+ dirs: info.dirs,
135
+ };
136
+ }
137
+
138
+ const count = Object.keys(packs).length;
139
+ if (count > bundledCount + MAX_ROSTER_EXTRA) return undefined;
140
+ return { ...obj, packs };
141
+ }
142
+
143
+ /**
144
+ * 拉一份远端清单,经 {@link sanitizeRemoteRoster} 校验。
145
+ *
146
+ * @param {object|undefined} bundled - 包内清单(校验基线)。
147
+ * @param {typeof fetch} [fetchImpl] - 仅测试用。
148
+ * @returns {Promise<object|undefined>} 通过校验的清单,失败/超时/非法一律 `undefined`。
149
+ */
150
+ export async function fetchRemoteRoster(bundled, fetchImpl = fetch) {
151
+ const base = typeof bundled?.baseUrl === "string" && bundled.baseUrl !== ""
152
+ ? bundled.baseUrl
153
+ : ALLOWED_BASE_URL;
154
+ const url = `${base.replace(/\/$/u, "")}/roster.json`;
155
+ const ctrl = new AbortController();
156
+ const timer = setTimeout(() => ctrl.abort(), ROSTER_FETCH_TIMEOUT_MS);
157
+ try {
158
+ const res = await fetchImpl(url, { signal: ctrl.signal, headers: { Accept: "application/json" } });
159
+ if (res.ok !== true) return undefined;
160
+ const text = await res.text();
161
+ if (text.length > MAX_ROSTER_TEXT) return undefined;
162
+ let data;
163
+ try {
164
+ data = JSON.parse(text);
165
+ } catch {
166
+ return undefined;
167
+ }
168
+ return sanitizeRemoteRoster(data, bundled);
169
+ } catch {
170
+ return undefined;
171
+ } finally {
172
+ clearTimeout(timer);
173
+ }
174
+ }
175
+
176
+ /**
177
+ * 读磁盘上的清单缓存。返回 `{ fetchedAt, roster }` 或 `undefined`。
178
+ * @param {string} path - 缓存文件路径。
179
+ */
180
+ export async function readCachedRoster(path) {
181
+ const text = await readFile(path, "utf8").catch(() => undefined);
182
+ if (text === undefined) return undefined;
183
+ try {
184
+ const data = JSON.parse(text);
185
+ if (data === null || typeof data !== "object") return undefined;
186
+ if (typeof data.fetchedAt !== "number" || data.roster === null || typeof data.roster !== "object") {
187
+ return undefined;
188
+ }
189
+ // 与 loadRoster 对齐:packs 必须是对象,否则视为坏缓存(缺 packs 的清单会让后续查不到任何附件)。
190
+ if (typeof data.roster.packs !== "object" || data.roster.packs === null) return undefined;
191
+ return { fetchedAt: data.fetchedAt, roster: data.roster };
192
+ } catch {
193
+ return undefined;
194
+ }
195
+ }
196
+
197
+ /**
198
+ * 写清单缓存。失败不抛(缓存只是加速,不是正确性依赖)。
199
+ * @param {string} path - 缓存文件路径。
200
+ * @param {object} roster - 已校验的清单。
201
+ */
202
+ export async function writeCachedRoster(path, roster) {
203
+ await writeFile(
204
+ path,
205
+ `${JSON.stringify({ fetchedAt: Date.now(), roster }, null, 2)}\n`,
206
+ "utf8",
207
+ ).catch(() => undefined);
208
+ }
209
+
57
210
  /**
58
211
  * 查某位专家的远程附件信息。
59
212
  * @returns 清单条目(含 path / bytes / sha256 / dirs),没有则 `undefined`。
@@ -213,9 +366,10 @@ export const ASSET_DIRS = [
213
366
  * @param {string} options.packDir - 专家包目录(绝对路径)。
214
367
  * @param {string} options.slug - 专家 slug(写进说明里的工具调用示例)。
215
368
  * @param {boolean} [options.remote] - 该专家的附件是否走云端(决定要不要提「尚未下载」)。
369
+ * @param {boolean} [options.hasBin] - 包内是否有 `bin/`(决定要不要补「CLI 不在 PATH 里」那段)。
216
370
  * @returns {string} 改写后的正文。
217
371
  */
218
- export function annotatePersona({ text, packDir, slug, remote = false }) {
372
+ export function annotatePersona({ text, packDir, slug, remote = false, hasBin = false }) {
219
373
  const root = packDir.endsWith("/") ? packDir : `${packDir}/`;
220
374
  // 负向后顾是关键:`~/.workbuddy/skills-marketplace/skills/xxx/SKILL.md` 里第二个 `skills/`
221
375
  // 前面是 `/`,那是别人的路径、不该动(2026-09-29 实测误改过一次)。
@@ -227,6 +381,18 @@ export function annotatePersona({ text, packDir, slug, remote = false }) {
227
381
  `> **资源目录**:\`${root}\``,
228
382
  "> 正文里出现的 `skills/`、`references/` 等相对路径都相对于该目录;请用上面的绝对路径读取。",
229
383
  ];
384
+ // 带 CLI 的专家(包内有 bin/):命令名本身**不在 PATH 里**,得用绝对路径调。
385
+ // WorkBuddy 的宿主会把专家包的 bin/ 挂进 PATH,DSH 不会 —— 而正文里写的是裸命令名
386
+ // (「用 `cpq` 命令」「`use_skill inquiry-price`」),照做就是 command not found。
387
+ // 2026-09-29 实测:cpq 的 bin/health-check 报「❌ cpq: 未找到(请检查 bin/ 目录)」。
388
+ if (hasBin === true) {
389
+ const binDir = `${root}bin/`;
390
+ lines.push(
391
+ `> **可执行脚本**:本专家的 CLI 在 \`${binDir}\`(注意它**不在** PATH 里)。` +
392
+ `调用时用绝对路径,例如 \`${binDir}<脚本名> --help\`;` +
393
+ `要先按正文里的裸命令名调用,可先执行 \`export PATH="${root}bin:$PATH"\`。`,
394
+ );
395
+ }
230
396
  if (remote === true) {
231
397
  lines.push(`> 若某个文件不存在,说明配套资源尚未下载到本机 —— 先调用 \`fetch_expert_assets("${slug}")\` 拉取,再读。`);
232
398
  }
package/lib/index.js CHANGED
@@ -41,7 +41,7 @@ import {
41
41
  writeFileAtomic,
42
42
  } from "./catalog.js";
43
43
  // 云端附件分发(2026-09-29):人格留在本地,技能与数据文件按需从 OBS 拉取。
44
- import { annotatePersona, assetsState, ensureAssets, kickoffAssets, loadRoster, packInfoFor, ASSETS_READY } from "./fetch-assets.js";
44
+ import { annotatePersona, assetsState, ensureAssets, kickoffAssets, loadRoster, packInfoFor, ASSETS_READY, fetchRemoteRoster, readCachedRoster, writeCachedRoster, ROSTER_TTL_MS } from "./fetch-assets.js";
45
45
 
46
46
  /**
47
47
  * 插件根目录(`lib/` 的上一级)。
@@ -687,10 +687,59 @@ export function apply(ctx, config) {
687
687
  };
688
688
  }
689
689
 
690
- /** 云端分发清单只读一次(启动后不变)。读不到就当作「没有远程附件」。 */
690
+ /** 云端分发清单:缓存 → 远端 → 包内,三级回退(见 fetch-assets.js 的远端清单段)。 */
691
691
  let rosterPromise;
692
+ let rosterFetchedAt = 0;
693
+ let rosterRefreshing = false;
694
+ /** 缓存文件放数据目录(`~/.t-team/`),不进包、不进名册扫描。 */
695
+ const rosterCachePath = () => join(dirname(config.root), "roster-cache.json");
696
+
697
+ /** 首次解析:缓存新鲜直接用 → 拉远端 → 回退缓存/包内。 */
698
+ async function resolveRoster() {
699
+ const cached = await readCachedRoster(rosterCachePath());
700
+ if (cached !== undefined && Date.now() - cached.fetchedAt < ROSTER_TTL_MS) {
701
+ rosterFetchedAt = cached.fetchedAt;
702
+ return cached.roster;
703
+ }
704
+ const bundled = await loadRoster(join(HERE, "data", "roster.json"));
705
+ const remote = await fetchRemoteRoster(bundled);
706
+ if (remote !== undefined) {
707
+ rosterFetchedAt = Date.now();
708
+ await writeCachedRoster(rosterCachePath(), remote);
709
+ return remote;
710
+ }
711
+ // 远端拉不到:这次也标记时间,TTL 内不再重复打远端;回退缓存(即使过期)→ 包内。
712
+ rosterFetchedAt = Date.now();
713
+ if (cached !== undefined) return cached.roster;
714
+ return bundled;
715
+ }
716
+
717
+ /** 后台刷新(TTL 过期后触发,不阻塞当前调用):强制拉远端,拉到才替换。 */
718
+ async function refreshRoster() {
719
+ const bundled = await loadRoster(join(HERE, "data", "roster.json"));
720
+ const remote = await fetchRemoteRoster(bundled);
721
+ // 无论成败都标记时间:失败时若不动这个值,rosterOnce 会在「still 超 TTL 且 not refreshing」
722
+ // 的条件下对每次召唤都再触发一次 8 秒超时的远端拉取(2026-09-29 逐行审查发现)。
723
+ rosterFetchedAt = Date.now();
724
+ if (remote === undefined) return undefined;
725
+ await writeCachedRoster(rosterCachePath(), remote);
726
+ return remote;
727
+ }
728
+
692
729
  function rosterOnce() {
693
- rosterPromise ??= loadRoster(join(HERE, "data", "roster.json"));
730
+ if (rosterPromise === undefined) {
731
+ rosterPromise = resolveRoster();
732
+ } else if (Date.now() - rosterFetchedAt > ROSTER_TTL_MS && rosterRefreshing === false) {
733
+ // 过期了:先用旧清单继续跑,后台拉新的,拉到就替换。
734
+ rosterRefreshing = true;
735
+ void refreshRoster()
736
+ .then((fresh) => {
737
+ if (fresh !== undefined) rosterPromise = Promise.resolve(fresh);
738
+ })
739
+ .finally(() => {
740
+ rosterRefreshing = false;
741
+ });
742
+ }
694
743
  return rosterPromise;
695
744
  }
696
745
 
@@ -733,6 +782,9 @@ export function apply(ctx, config) {
733
782
  packDir: expert.packDir,
734
783
  slug: expert.slug,
735
784
  remote: info !== undefined,
785
+ // 有 bin/ 的专家,CLI 得用绝对路径调(DSH 不像 WorkBuddy 那样把包内 bin/ 挂进 PATH):
786
+ // 清单里登记了 bin 就写这段说明(附件还没下载时同样有用),目录已在本地也算数。
787
+ hasBin: (info?.dirs ?? []).includes("bin") || existsSync(join(expert.packDir, "bin")),
736
788
  });
737
789
  }
738
790
 
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "dsh-plugin-t-expert",
3
- "version": "0.4.37",
3
+ "version": "0.4.48",
4
4
  "type": "module",
5
- "description": "T Expert — a 645-expert, 22-division roster with full Chinese translations, as a standalone DeepSeek Harness plugin.",
5
+ "description": "T Expert — a 624-expert, 22-division roster with full Chinese translations, as a standalone DeepSeek Harness plugin.",
6
6
  "icon": "icon.svg",
7
7
  "license": "MIT",
8
8
  "author": "jiuaiwo",
@@ -5,7 +5,7 @@
5
5
 
6
6
  | 文件 | 覆盖的随包内容 | 来源 |
7
7
  | --- | --- | --- |
8
- | `agency-agents.LICENSE` | `data/experts/`(22 分区 / 645 位;其中 323 位来自第三方 —— 279 位为上游仓库逐字节镜像、35 位来自名册来源包快照、7 位于 2026-09-15 与 `agency-agents-zh` 源仓库对齐时补齐;余 2 位为本仓自建;另有 322 位为 2026-09-29 从 WorkBuddy 专家市场导入,其许可归腾讯及其专家作者 —— 以上 324 位均不由本许可覆盖) | The Agency / AgentLand 名册快照,MIT |
8
+ | `agency-agents.LICENSE` | `data/experts/`(22 分区 / 624 位;其中 323 位来自第三方 —— 279 位为上游仓库逐字节镜像、35 位来自名册来源包快照、7 位于 2026-09-15 与 `agency-agents-zh` 源仓库对齐时补齐;余 2 位为本仓自建;另有 300 位为 2026-09-29 从 WorkBuddy 专家市场导入,其许可归腾讯及其专家作者 —— 以上 304 位均不由本许可覆盖) | The Agency / AgentLand 名册快照,MIT |
9
9
  | `agency-agents-zh.LICENSE` | `data/zh/` 中的中文名字、简介与人格正文(含 2026-09-15 对齐时直接取自该仓库的 7 篇正文) | `agency-agents-zh` 中文翻译与本地化资产,MIT |
10
10
 
11
11
  两份文本都是从实际用于生成快照的来源包内**逐字节复制**的,未经改写:
@@ -1,67 +0,0 @@
1
- {
2
- "name": "cloud-requirement-expert",
3
- "version": "1.0.0",
4
- "description": "Cloud product requirement expert — intelligent generation, structured enrichment, AI-read layer creation, and requirement splitting via requirement-assistant MCP Server.",
5
- "author": {
6
- "name": "selinaywu",
7
- "email": "selinaywu@tencent.com"
8
- },
9
- "expertType": "agent",
10
- "agentName": "cloud-requirement-expert",
11
- "agents": [
12
- "./agents/cloud-requirement-expert.md"
13
- ],
14
- "skills": [
15
- "./skills/requirement-assistant"
16
- ],
17
- "displayName": {
18
- "en": "Zhen",
19
- "zh": "甄需明"
20
- },
21
- "profession": {
22
- "en": "Cloud Product Requirement Expert",
23
- "zh": "云产品需求专家"
24
- },
25
- "displayDescription": {
26
- "en": "Specializes in cloud product requirement generation, structured enrichment, AI-read layer creation, and requirement splitting — covering the full workflow from ideation to delivery.",
27
- "zh": "专注云产品需求的智能生成、结构化补全、AI读层生成与需求拆分,完整覆盖从想法到交付的全流程管理。"
28
- },
29
- "avatar": "avatars/expert.png",
30
- "categoryId": "01-ProductDesign",
31
- "defaultInitPrompt": {
32
- "zh": "用户希望能够批量导入数据,帮我整理成需求",
33
- "en": "Users want to batch import data, help me structure this requirement"
34
- },
35
- "tags": [
36
- {
37
- "en": "Requirement Generation",
38
- "zh": "需求生成"
39
- },
40
- {
41
- "en": "Requirement Enrichment",
42
- "zh": "需求补全"
43
- },
44
- {
45
- "en": "Requirement Splitting",
46
- "zh": "需求拆分"
47
- }
48
- ],
49
- "quickPrompts": [
50
- {
51
- "en": "Users want to batch import data, help me structure this requirement",
52
- "zh": "用户希望能够批量导入数据,帮我整理成需求"
53
- },
54
- {
55
- "en": "Help me complete the background, goals, and acceptance criteria for an existing requirement",
56
- "zh": "帮我补全已有需求的背景、目标和验收标准"
57
- },
58
- {
59
- "en": "Help me analyze this complex requirement and split it into independent sub-requirements",
60
- "zh": "帮我分析这个复杂需求并拆分成可独立交付的子需求"
61
- }
62
- ],
63
- "dependencies": {
64
- "mcpServers": "./.mcp.json"
65
- },
66
- "plugin": "cloud-requirement-expert"
67
- }
@@ -1 +0,0 @@
1
- 2026-09-29T03:25:14.710229+00:00
@@ -1,7 +0,0 @@
1
- {
2
- "plugin": "cloud-requirement-expert",
3
- "division": "design",
4
- "categoryId": "01-ProductDesign",
5
- "importedAt": "2026-09-29T12:42:04",
6
- "source": "workbuddy expert marketplace (COS)"
7
- }
@@ -1,22 +0,0 @@
1
- {
2
- "mcpServers": {
3
- "requirement-assistant": {
4
- "transportType": "streamable-http",
5
- "url": "https://cpeo.mcp.it.woa.com",
6
- "x-workbuddy": {
7
- "displayName": {
8
- "zh": "需求助手 MCP 服务",
9
- "en": "Requirement Assistant MCP Server"
10
- },
11
- "description": {
12
- "zh": "连接后可支持需求智能生成、结构化补全、需求拆分与写回,覆盖从想法到交付的完整流程",
13
- "en": "Enable intelligent requirement generation, structured enrichment, splitting and write-back, covering the full workflow from ideation to delivery"
14
- },
15
- "icon": "./avatars/expert.png",
16
- "auth": {
17
- "type": "oauth"
18
- }
19
- }
20
- }
21
- }
22
- }
@@ -1,52 +0,0 @@
1
- # 云产品需求专家(Requirement Assistant)
2
-
3
- 基于 `requirement-assistant` MCP Server 的云产品需求专家,支持从一句话想法到正式建单的完整需求管理流程。
4
-
5
- ## 类型
6
-
7
- Agent 型(单个 AI 专家)
8
-
9
- > ⚠️ 本工具仅适用于腾讯内网环境(依赖 TAPD + 太湖 OAuth)
10
-
11
- ## 功能
12
-
13
- 1. **新建需求**:根据一句话想法、会议纪要、聊天记录或草稿生成正式 TAPD 需求,先预览再建单
14
- 2. **补全已有需求**:对已有 TAPD 需求结构化补全(背景、目标、范围、验收标准、风险、竞品等),先预览再写回
15
- 3. **生成 AI 读层**:为已有 PRD 生成结构化摘要,供下游 AI 系统消费
16
- 4. **更新已有需求**:修改已创建需求的标题、描述、状态、优先级等字段,支持插入本地图片
17
- 5. **需求拆分**:按业务流程/功能模块/架构维度拆分子需求,INVEST 质量门禁检验
18
-
19
- ## 前置条件
20
-
21
- 使用前需在 WorkBuddy 中配置 `requirement-assistant` MCP Server:
22
-
23
- 1. 打开 WorkBuddy 左上角 **⚙️ 设置 → 连接器**
24
- 2. 添加 `requirement-assistant` MCP Server(远程 `streamable-http` 类型)
25
- 3. 配置请求头:
26
- - `Authorization: Bearer <mcp_server_auth_token>`
27
- - `X-Tapd-Access-Token: <tapd_personal_access_token>`
28
-
29
- 详细配置模板见 `skills/requirement-assistant/references/remote-mcp-setup.md`。
30
-
31
- ## 运行时依赖
32
-
33
- - Python 3.8+
34
- - `pip install requests`(本地图片上传功能需要)
35
- - **TAPD Token**:详见 [Token 配置指南](skills/requirement-assistant/references/token-setup-guide.md)(支持环境变量 `TAPD_ACCESS_TOKEN` 或连接器 Header `X-Tapd-Access-Token`)
36
-
37
- ## 使用示例
38
-
39
- - "帮我基于这个内容生成一个 TSF 的 TAPD 需求"
40
- - "补全需求 1234567890 的背景、验收标准和竞品分析"
41
- - "把这个需求的 PRD 生成一个 AI 读层"
42
- - "把需求 1234567890 的优先级改为高,负责人改成张三"
43
- - "这个需求太大了,帮我按功能模块拆分成子需求"
44
-
45
- ## 头像
46
-
47
- 头像已自动生成在 `avatars/` 目录下。如需替换为自定义头像,要求:
48
- - 格式:PNG(推荐)或 JPG
49
- - 尺寸:512×512 px
50
- - 大小:单张不超过 500KB
51
-
52
-
@@ -1,88 +0,0 @@
1
- ---
2
- name: 云产品需求专家
3
- nameEn: Cloud Product Requirement Expert
4
- description: 专注云产品需求的智能生成、结构化补全、AI读层生成与需求拆分,完整覆盖从想法到交付的全流程管理。
5
- descriptionEn: Cloud Product Requirement Expert
6
- emoji: 🎨
7
- color: "#EC4899"
8
- vibe: 云产品需求专家
9
- ---
10
- # 云产品需求专家
11
-
12
- 我是云产品需求专家,专注于云产品需求的智能生成、结构化补全、AI读层生成与需求拆分。我通过 `requirement-assistant` MCP Server 作为后端执行引擎,覆盖从一句话想法到正式 TAPD 建单的完整需求管理流程。
13
-
14
- ## 核心能力
15
-
16
- 1. **新建需求**:根据一句话想法、会议纪要、聊天记录或草稿生成正式 TAPD 需求,支持先预览草案再决定是否建单,预览后不满意可改写后再创建。
17
- 2. **补全已有需求**:对已有 TAPD 需求进行结构化补全(背景、目标、范围、验收标准、风险、竞品等),先预览补全结果,用户确认后再写回 TAPD。
18
- 3. **生成 AI 读层**:为已有 PRD 正文生成结构化的 AI 可读层摘要,方便下游 AI 系统消费。
19
- 4. **更新已有需求**:修改已创建 TAPD 需求的字段(标题、描述、状态、优先级、负责人、自定义字段等),支持插入本地图片。
20
- 5. **需求拆分**:将复杂需求按业务流程、功能模块或架构技术栈维度拆分为可独立交付的子需求(子 Story),使用 INVEST 原则进行质量门禁检验。
21
-
22
- ## 工作流程
23
-
24
- ### 新建需求
25
- 1. 确认产品/项目、用户目标(预览还是建单)、是否需要按模板生成
26
- 2. 调用 `start_new_requirement(action=preview)` 生成预览草案
27
- 3. 轮询状态直到完成,展示 PRD 标题和内容摘要
28
- 4. 用户不满意可 `action=revise` 改写草稿
29
- 5. 用户确认后 `action=create` 创建 TAPD 需求
30
-
31
- ### 补全已有需求
32
- 1. 确认 `story_id`、产品/工作空间、补全模块范围
33
- 2. 必要时先调用 `get_story_detail` 了解当前需求内容
34
- 3. 调用 `enrich_existing_requirement(action=preview)` 预览补全结果
35
- 4. 用户不满意可 `action=revise` 改写补全草稿
36
- 5. 用户确认后 `action=apply` 写回 TAPD
37
-
38
- ### 生成 AI 读层
39
- 1. 获取 PRD 正文(来自预览结果/TAPD需求/用户粘贴)
40
- 2. 调用 `generate_ai_read_layer` 生成结构化 AI 读层
41
- 3. 如需写回 TAPD,调用 `update_tapd_story` 完成
42
-
43
- ### 更新已有需求
44
- 1. 确认要修改的字段和内容
45
- 2. 调用 `update_tapd_story` 执行通用字段编辑
46
- 3. 如需插入本地图片,先执行上传脚本拿到 `image_html_codes`
47
-
48
- ### 需求拆分
49
- 1. 获取需求详情,按框架判断是否需要拆分
50
- 2. 选择主切维度(业务流程/功能模块/架构技术栈),叠加辅助维度调整
51
- 3. 执行 INVEST 质量门禁检验
52
- 4. 生成拆分报告供用户审阅
53
- 5. 用户确认后逐个创建子需求并关联父需求
54
-
55
- ## 输出规范
56
-
57
- - 统一输出顺序:当前阶段 → 结果摘要 → 缺失信息/风险 → 下一步建议
58
- - 不原样粘贴整段 MCP JSON 给用户,整理为可读摘要
59
- - 明确标注结果来源:MCP 预览结果 / 人工草案
60
- - 不在模板未锁定时宣称"已按模板生成"
61
- - 预览 running 时只做进度同步,不用人工草案冒充 MCP 结果
62
- - 所有 create、apply、update 和拆分后建单动作需用户明确确认
63
-
64
- ## 前置检查:MCP 可用性
65
-
66
- 在执行任何 TAPD 操作前,先检查 `requirement-assistant` MCP Server 是否可用。
67
-
68
- **若 MCP Server 未连接**,不要继续走后续工作流,直接主动提示用户:
69
-
70
- > ⚠️ `requirement-assistant` MCP Server 未连接,无法执行 TAPD 操作。
71
- >
72
- > 请重新召唤本专家,WorkBuddy 会弹出连接引导卡片,通过太湖完成授权。
73
- >
74
- > 如果你只是想先看一版需求草案(非 TAPD 创建),我也可以直接整理。
75
-
76
- **若 MCP Server 已连接但返回 401 / 403**:
77
-
78
- > ⚠️ 认证失败,太湖授权可能已过期。请重新连接 MCP Server 刷新授权。
79
- >
80
- > 如果提供过 TAPD 个人令牌,也请检查 `X-Tapd-Access-Token` 是否有效。
81
-
82
- ## 注意事项
83
-
84
- - 预览生成通常需 1-5 分钟,超过 10 分钟可能服务端异常
85
- - 缺失 TAPD 必填字段时必须先补齐再创建或写回
86
- - 插入本地图片依赖 TAPD Access Token,缺少凭据时需提示用户补齐
87
- - AI 不估算绝对工时、不定义绝对优先级,只识别信号并给出建议,人做最终决策
88
- - 需求信息不完整或存在歧义时,暂停操作并向用户确认
@@ -1,80 +0,0 @@
1
- {
2
- "name": "databrain-opinion-expert",
3
- "version": "1.0.0",
4
- "description": "DataBrain Opinion Expert: player reputation and sentiment scout for score alerts, content trends, competitor comparison, and hot topic discovery.",
5
- "author": {
6
- "name": "DataBrain Team",
7
- "email": "databrain@tencent.com"
8
- },
9
- "keywords": [
10
- "databrain",
11
- "opinion",
12
- "game sentiment",
13
- "brand health",
14
- "hotposts",
15
- "alert",
16
- "competitor events",
17
- "content trend"
18
- ],
19
- "agents": [
20
- "./agents/databrain-opinion-expert.md"
21
- ],
22
- "skills": [
23
- "./skills/databrain-opinion-metrics",
24
- "./skills/databrain-opinion-summary",
25
- "./skills/databrain-opinion-hotposts",
26
- "./skills/databrain-opinion-alert",
27
- "./skills/databrain-competitor-events",
28
- "./skills/databrain-game-content-trend",
29
- "./skills/opinions-crawler"
30
- ],
31
- "expertType": "agent",
32
- "agentName": "databrain-opinion-expert",
33
- "displayName": {
34
- "en": "DataBrain Opinion Expert",
35
- "zh": "DataBrain舆情分析专家"
36
- },
37
- "profession": {
38
- "en": "DataBrain Opinion Expert",
39
- "zh": "DataBrain舆情分析专家"
40
- },
41
- "displayDescription": {
42
- "en": "Player reputation and opinion scout covering score alerts, content trends, competitor comparison, and hot topic discovery to sense player voices in real time.",
43
- "zh": "玩家口碑与舆情侦察兵,覆盖评分告警、内容趋势、竞品对比与热点挖掘,实时感知玩家声音,辅助运营决策"
44
- },
45
- "avatar": "avatars/expert.jpg",
46
- "categoryId": "04-DataAI",
47
- "defaultInitPrompt": {
48
- "zh": "帮我查看一款游戏近期玩家口碑与舆情变化,识别风险、热点和可跟进建议。",
49
- "en": "Analyze recent player reputation and opinion changes for a game, identifying risks, hot topics, and actionable suggestions."
50
- },
51
- "plugin": "databrain-opinion-expert",
52
- "tags": [
53
- {
54
- "en": "Opinion Metrics",
55
- "zh": "舆情指标"
56
- },
57
- {
58
- "en": "Score Alerts",
59
- "zh": "评分告警"
60
- },
61
- {
62
- "en": "Content Trends",
63
- "zh": "内容趋势"
64
- }
65
- ],
66
- "quickPrompts": [
67
- {
68
- "zh": "帮我查看一款游戏近期玩家口碑与舆情变化,识别风险、热点和可跟进建议。",
69
- "en": "Analyze recent player reputation and opinion changes for a game, identifying risks, hot topics, and actionable suggestions."
70
- },
71
- {
72
- "zh": "帮我生成某款游戏过去 24 小时的分平台热帖日报。",
73
- "en": "Generate a cross-platform hot posts digest for a game over the last 24 hours."
74
- },
75
- {
76
- "zh": "帮我设置某款游戏的商店评分下滑告警,并说明触发阈值。",
77
- "en": "Set up a store score drop alert for a game and explain the trigger thresholds."
78
- }
79
- ]
80
- }
@@ -1 +0,0 @@
1
- 2026-09-29T03:25:10.905238+00:00
@@ -1,7 +0,0 @@
1
- {
2
- "plugin": "databrain-opinion-expert",
3
- "division": "engineering",
4
- "categoryId": "04-DataAI",
5
- "importedAt": "2026-09-29T12:42:04",
6
- "source": "workbuddy expert marketplace (COS)"
7
- }