dsh-plugin-t-expert 0.4.57 → 0.4.63
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.
- package/CHANGELOG.md +105 -1
- package/data/experts/academic/family-education-ma/avatars/avatar.webp +0 -0
- package/data/experts/academic/ket-prep-team/avatars/avatar.webp +0 -0
- package/data/experts/academic/liuxue-yanxue-expert/avatars/avatar.webp +0 -0
- package/data/experts/academic/study-fortune-compass/avatars/avatar.webp +0 -0
- package/data/experts/company/campus-event-navigator/avatars/avatar.webp +0 -0
- package/data/experts/company/fortune-master/avatars/avatar.webp +0 -0
- package/data/experts/company/gaokao-advisor/avatars/avatar.webp +0 -0
- package/data/experts/company/multi-cloud-expert/avatars/avatar.webp +0 -0
- package/data/experts/company/multi-cloud-management-expert/avatars/avatar.webp +0 -0
- package/data/experts/company/opc-team/avatars/avatar.webp +0 -0
- package/data/experts/company/paper-topic-selection/avatars/avatar.webp +0 -0
- package/data/experts/company/tanyuan-cultural-heritage-expert/avatars/avatar.webp +0 -0
- package/data/experts/design/ai-image-prompt-engineer/avatars/avatar.webp +0 -0
- package/data/experts/design/ask-liuxiaopai/avatars/avatar.webp +0 -0
- package/data/experts/design/delightful-experience-designer/avatars/avatar.webp +0 -0
- package/data/experts/design/design-engine/avatars/avatar.webp +0 -0
- package/data/experts/design/design-md-architect/avatars/avatar.webp +0 -0
- package/data/experts/design/design-prototype-expert/avatars/avatar.webp +0 -0
- package/data/experts/design/diversity-visual-expert/avatars/avatar.webp +0 -0
- package/data/experts/design/feedback-synthesis-analyst/avatars/avatar.webp +0 -0
- package/data/experts/design/mermaid-diagram-expert/avatars/avatar.webp +0 -0
- package/data/experts/design/migraq-team/avatars/avatar.webp +0 -0
- package/data/experts/design/ngo-challenge-advisor/avatars/avatar.webp +0 -0
- package/data/experts/design/product-strategy-team/avatars/avatar.webp +0 -0
- package/data/experts/design/tripstar-agent/avatars/avatar.webp +0 -0
- package/data/experts/design/user-experience-architect/avatars/avatar.webp +0 -0
- package/data/experts/design/user-experience-researcher/avatars/avatar.webp +0 -0
- package/data/experts/design/workflow-assistant/avatars/avatar.webp +0 -0
- package/data/experts/engineering/academic-journal-selector/avatars/avatar.webp +0 -0
- package/data/experts/engineering/ai-data-copilot/avatars/avatar.webp +0 -0
- package/data/experts/engineering/aicoding-architecture-expert-team/avatars/avatar.webp +0 -0
- package/data/experts/engineering/aihot/avatars/avatar.webp +0 -0
- package/data/experts/engineering/api-dev/avatars/avatar.webp +0 -0
- package/data/experts/engineering/arxiv-watcher/avatars/avatar.webp +0 -0
- package/data/experts/engineering/cat-network-quality-analyst/avatars/avatar.webp +0 -0
- package/data/experts/engineering/code/avatars/avatar.webp +0 -0
- package/data/experts/engineering/code-review-expert/avatars/avatar.webp +0 -0
- package/data/experts/engineering/data-analytics-reporter/avatars/avatar.webp +0 -0
- package/data/experts/engineering/database-operations/avatars/avatar.webp +0 -0
- package/data/experts/engineering/deep-research/avatars/avatar.webp +0 -0
- package/data/experts/engineering/dev-pipeline-orchestrator/avatars/avatar.webp +0 -0
- package/data/experts/engineering/edgeone-makers-experts/avatars/avatar.webp +0 -0
- package/data/experts/engineering/empirical-research-team/avatars/avatar.webp +0 -0
- package/data/experts/engineering/engineering-assurance-team/avatars/avatar.webp +0 -0
- package/data/experts/engineering/engineering-workflow-skills/avatars/avatar.webp +0 -0
- package/data/experts/engineering/eno/avatars/avatar.webp +0 -0
- package/data/experts/engineering/frontend/avatars/avatar.webp +0 -0
- package/data/experts/engineering/git-workflow-expert/avatars/avatar.webp +0 -0
- package/data/experts/engineering/gpt-researcher-team/avatars/avatar.webp +0 -0
- package/data/experts/engineering/gstack/avatars/avatar.webp +0 -0
- package/data/experts/engineering/hsk-devops-expert/avatars/avatar.webp +0 -0
- package/data/experts/engineering/huashu-data-pro/avatars/avatar.webp +0 -0
- package/data/experts/engineering/jinshuju-expert/avatars/avatar.webp +0 -0
- package/data/experts/engineering/jinshuju-form-expert/avatars/avatar.webp +0 -0
- package/data/experts/engineering/jinshuju-table-expert/avatars/avatar.webp +0 -0
- package/data/experts/engineering/kdocs-data-table/avatars/avatar.webp +0 -0
- package/data/experts/engineering/mcp-build-expert/avatars/avatar.webp +0 -0
- package/data/experts/engineering/mibao-media-archivist/avatars/avatar.webp +0 -0
- package/data/experts/engineering/mobile-application-developer/avatars/avatar.webp +0 -0
- package/data/experts/engineering/modern-webapp/avatars/avatar.webp +0 -0
- package/data/experts/engineering/mvp-dev-expert-team/avatars/avatar.webp +0 -0
- package/data/experts/engineering/ncre-expert/avatars/avatar.webp +0 -0
- package/data/experts/engineering/nuwa/avatars/avatar.webp +0 -0
- package/data/experts/engineering/omics-cdgpt-expert/avatars/avatar.webp +0 -0
- package/data/experts/engineering/omics-hpc-expert/avatars/avatar.webp +0 -0
- package/data/experts/engineering/omics-scbert-expert/avatars/avatar.webp +0 -0
- package/data/experts/engineering/omics-scprotein-expert/avatars/avatar.webp +0 -0
- package/data/experts/engineering/personal-knowledge-architect/avatars/avatar.webp +0 -0
- package/data/experts/engineering/prompt-engineering-expert/avatars/avatar.webp +0 -0
- package/data/experts/engineering/python-fullstack-engineer/avatars/avatar.webp +0 -0
- package/data/experts/engineering/rum-fullstack-team/avatars/avatar.webp +0 -0
- package/data/experts/engineering/superpowers-zh/avatars/avatar.webp +0 -0
- package/data/experts/engineering/tencentcloud-api/avatars/avatar.webp +0 -0
- package/data/experts/engineering/vocab-craft-expert/avatars/avatar.webp +0 -0
- package/data/experts/engineering/workspace-builder/avatars/avatar.webp +0 -0
- package/data/experts/engineering/yunzhi-qa-assistant/avatars/avatar.webp +0 -0
- package/data/experts/finance/a-share-analysis/avatars/avatar.webp +0 -0
- package/data/experts/finance/anti-scam-agent/avatars/avatar.webp +0 -0
- package/data/experts/finance/believe-in-light/avatars/avatar.webp +0 -0
- package/data/experts/finance/citongshuopro/avatars/avatar.webp +0 -0
- package/data/experts/finance/corp-credit-due-diligence/avatars/avatar.webp +0 -0
- package/data/experts/finance/dd-due-diligence-team/avatars/avatar.webp +0 -0
- package/data/experts/finance/earnings-reviewer/avatars/avatar.webp +0 -0
- package/data/experts/finance/egypt-strategic-advisory/avatars/avatar.webp +0 -0
- package/data/experts/finance/equity-research/avatars/avatar.webp +0 -0
- package/data/experts/finance/fin-research-expert/avatars/avatar.webp +0 -0
- package/data/experts/finance/financial-tracker/avatars/avatar.webp +0 -0
- package/data/experts/finance/fund-research-analyst/avatars/avatar.webp +0 -0
- package/data/experts/finance/gl-reconciler/avatars/avatar.webp +0 -0
- package/data/experts/finance/industry-sre-team/avatars/avatar.webp +0 -0
- package/data/experts/finance/investment-masters-team/avatars/avatar.webp +0 -0
- package/data/experts/finance/kyc-screener/avatars/avatar.webp +0 -0
- package/data/experts/finance/mai-deal-advisor/avatars/avatar.webp +0 -0
- package/data/experts/finance/market-researcher/avatars/avatar.webp +0 -0
- package/data/experts/finance/meeting-prep-agent/avatars/avatar.webp +0 -0
- package/data/experts/finance/mentougou-business-guide/avatars/avatar.webp +0 -0
- package/data/experts/finance/model-builder/avatars/avatar.webp +0 -0
- package/data/experts/finance/month-end-closer/avatars/avatar.webp +0 -0
- package/data/experts/finance/new-share-expert/avatars/avatar.webp +0 -0
- package/data/experts/finance/pitch-agent/avatars/avatar.webp +0 -0
- package/data/experts/finance/roadshow-research-team/avatars/avatar.webp +0 -0
- package/data/experts/finance/sg-finance-tax/avatars/avatar.webp +0 -0
- package/data/experts/finance/smart-stock-analyst/avatars/avatar.webp +0 -0
- package/data/experts/finance/smb-finance/avatars/avatar.webp +0 -0
- package/data/experts/finance/south-africa-strategy-advisor/avatars/avatar.webp +0 -0
- package/data/experts/finance/statement-auditor/avatars/avatar.webp +0 -0
- package/data/experts/finance/strategy-backtest-expert/avatars/avatar.webp +0 -0
- package/data/experts/finance/tdx-stock-diagnostician/avatars/avatar.webp +0 -0
- package/data/experts/finance/tdx-stock-hunter/avatars/avatar.webp +0 -0
- package/data/experts/finance/tdx-value-assessor/avatars/avatar.webp +0 -0
- package/data/experts/finance/terminal-veteran/avatars/avatar.webp +0 -0
- package/data/experts/finance/uae-public-affairs/avatars/avatar.webp +0 -0
- package/data/experts/finance/uae-strategic-advisor/avatars/avatar.webp +0 -0
- package/data/experts/finance/valuation-reviewer/avatars/avatar.webp +0 -0
- package/data/experts/finance/yahoo-finance-cli/avatars/avatar.webp +0 -0
- package/data/experts/game-development/game-development-studio/avatars/avatar.webp +0 -0
- package/data/experts/game-development/godot-game-script-engineer/avatars/avatar.webp +0 -0
- package/data/experts/gis/egypt-marketing/avatars/avatar.webp +0 -0
- package/data/experts/gis/exam-preparation-planner/avatars/avatar.webp +0 -0
- package/data/experts/gis/lazy-travel-planner/avatars/avatar.webp +0 -0
- package/data/experts/healthcare/patient-education-content-review-word-assistant/avatars/avatar.webp +0 -0
- package/data/experts/healthcare/tianyu-marketing-guardian/avatars/avatar.webp +0 -0
- package/data/experts/hr/customer-support-expert/avatars/avatar.webp +0 -0
- package/data/experts/hr/family-education-coach/avatars/avatar.webp +0 -0
- package/data/experts/hr/fbsir-beike-yi/avatars/avatar.webp +0 -0
- package/data/experts/hr/hr-operations-team/avatars/avatar.webp +0 -0
- package/data/experts/hr/ihr-ai-interviewer/avatars/avatar.webp +0 -0
- package/data/experts/hr/ihr-conference/avatars/avatar.webp +0 -0
- package/data/experts/hr/interview-simulator/avatars/avatar.webp +0 -0
- package/data/experts/hr/qingflow-hr-expert/avatars/avatar.webp +0 -0
- package/data/experts/hr/south-africa-hr-admin/avatars/avatar.webp +0 -0
- package/data/experts/hr/xiaot/avatars/avatar.webp +0 -0
- package/data/experts/legal/brazil-company-query/avatars/avatar.webp +0 -0
- package/data/experts/legal/brazil-legal/avatars/avatar.webp +0 -0
- package/data/experts/legal/brazil-rfb-expert/avatars/avatar.webp +0 -0
- package/data/experts/legal/charity-doc-finance-expert/avatars/avatar.webp +0 -0
- package/data/experts/legal/indonesia-bd-expert/avatars/avatar.webp +0 -0
- package/data/experts/legal/indonesia-digital-law-expert/avatars/avatar.webp +0 -0
- package/data/experts/legal/indonesia-pa-expert/avatars/avatar.webp +0 -0
- package/data/experts/legal/inspection-expert/avatars/avatar.webp +0 -0
- package/data/experts/legal/malaysia-finance-tax/avatars/avatar.webp +0 -0
- package/data/experts/legal/malaysia-hr-admin/avatars/avatar.webp +0 -0
- package/data/experts/legal/malaysia-legal/avatars/avatar.webp +0 -0
- package/data/experts/legal/sg-hr-admin-expert/avatars/avatar.webp +0 -0
- package/data/experts/legal/smb-team/avatars/avatar.webp +0 -0
- package/data/experts/legal/thai-marketing-creative/avatars/avatar.webp +0 -0
- package/data/experts/legal/thailand-hr-admin/avatars/avatar.webp +0 -0
- package/data/experts/marketing/ad-tracking-expert/avatars/avatar.webp +0 -0
- package/data/experts/marketing/ai-humanizer/avatars/avatar.webp +0 -0
- package/data/experts/marketing/ai-shifu/avatars/avatar.webp +0 -0
- package/data/experts/marketing/ai-video-script/avatars/avatar.webp +0 -0
- package/data/experts/marketing/auto-consultant/avatars/avatar.webp +0 -0
- package/data/experts/marketing/book-co-creator/avatars/avatar.webp +0 -0
- package/data/experts/marketing/chatcut-video-editor/avatars/avatar.webp +0 -0
- package/data/experts/marketing/content-creation-expert-prod/avatars/avatar.webp +0 -0
- package/data/experts/marketing/content-distribution-team/avatars/avatar.webp +0 -0
- package/data/experts/marketing/content-monetization-team/avatars/avatar.webp +0 -0
- package/data/experts/marketing/content-writer/avatars/avatar.webp +0 -0
- package/data/experts/marketing/fbsir-mom-dialogue-expert/avatars/avatar.webp +0 -0
- package/data/experts/marketing/frontend-slides/avatars/avatar.webp +0 -0
- package/data/experts/marketing/geo-diagnosis-expert/avatars/avatar.webp +0 -0
- package/data/experts/marketing/humanize-ppt-team/avatars/avatar.webp +0 -0
- package/data/experts/marketing/jiayi-ads-analytics-expert/avatars/avatar.webp +0 -0
- package/data/experts/marketing/kdocs-doc-butler/avatars/avatar.webp +0 -0
- package/data/experts/marketing/kdocs-knowledge-collector/avatars/avatar.webp +0 -0
- package/data/experts/marketing/kdocs-pdf-toolbox/avatars/avatar.webp +0 -0
- package/data/experts/marketing/kdocs-ppt-creator/avatars/avatar.webp +0 -0
- package/data/experts/marketing/kidd-content-expert/avatars/avatar.webp +0 -0
- package/data/experts/marketing/livestream-ecommerce-coach/avatars/avatar.webp +0 -0
- package/data/experts/marketing/long-manuscript-expert/avatars/avatar.webp +0 -0
- package/data/experts/marketing/market-analysis-cn/avatars/avatar.webp +0 -0
- package/data/experts/marketing/marketing-campaign-team/avatars/avatar.webp +0 -0
- package/data/experts/marketing/marketing-growth-team/avatars/avatar.webp +0 -0
- package/data/experts/marketing/news-briefing-expert/avatars/avatar.webp +0 -0
- package/data/experts/marketing/news-buddy/avatars/avatar.webp +0 -0
- package/data/experts/marketing/nges-healthcare-marketing-team/avatars/avatar.webp +0 -0
- package/data/experts/marketing/novel-creator/avatars/avatar.webp +0 -0
- package/data/experts/marketing/novel-generator/avatars/avatar.webp +0 -0
- package/data/experts/marketing/ppc-bidding-strategist/avatars/avatar.webp +0 -0
- package/data/experts/marketing/ppt-creation-expert/avatars/avatar.webp +0 -0
- package/data/experts/marketing/private-domain-marketing-expert/avatars/avatar.webp +0 -0
- package/data/experts/marketing/programmatic-ad-buyer/avatars/avatar.webp +0 -0
- package/data/experts/marketing/promo-creator-team/avatars/avatar.webp +0 -0
- package/data/experts/marketing/remotion-video-generator/avatars/avatar.webp +0 -0
- package/data/experts/marketing/seo-content-team/avatars/avatar.webp +0 -0
- package/data/experts/marketing/social-engagement-team/avatars/avatar.webp +0 -0
- package/data/experts/marketing/tietu-toutiao/avatars/avatar.webp +0 -0
- package/data/experts/marketing/topic-evaluator/avatars/avatar.webp +0 -0
- package/data/experts/marketing/trend-hunter/avatars/avatar.webp +0 -0
- package/data/experts/marketing/vibeknow-design-video/avatars/avatar.webp +0 -0
- package/data/experts/marketing/vibeknow-handdraw/avatars/avatar.webp +0 -0
- package/data/experts/marketing/vibeknow-ppt-explain/avatars/avatar.webp +0 -0
- package/data/experts/marketing/video-dissection/avatars/avatar.webp +0 -0
- package/data/experts/marketing/video-gen-team/avatars/avatar.webp +0 -0
- package/data/experts/marketing/viral-topic-master/avatars/avatar.webp +0 -0
- package/data/experts/marketing/wechat-official-account-expert/avatars/avatar.webp +0 -0
- package/data/experts/marketing/xiaohongshu-operations-expert/avatars/avatar.webp +0 -0
- package/data/experts/paid-media/computer-operations-advisor/avatars/avatar.webp +0 -0
- package/data/experts/paid-media/vietnam-public-affairs/avatars/avatar.webp +0 -0
- package/data/experts/project-management/agent-orchestrator/avatars/avatar.webp +0 -0
- package/data/experts/project-management/ai-meeting-notes/avatars/avatar.webp +0 -0
- package/data/experts/project-management/api-testing-expert/avatars/avatar.webp +0 -0
- package/data/experts/project-management/document-generation-expert/avatars/avatar.webp +0 -0
- package/data/experts/project-management/document-skills/avatars/avatar.webp +0 -0
- package/data/experts/project-management/jira-workflow-admin/avatars/avatar.webp +0 -0
- package/data/experts/project-management/openspec-doc-team/avatars/avatar.webp +0 -0
- package/data/experts/project-management/performance-testing-expert/avatars/avatar.webp +0 -0
- package/data/experts/project-management/yunzhi-doc-quality-expert/avatars/avatar.webp +0 -0
- package/data/experts/research/apm-performance-expert/avatars/avatar.webp +0 -0
- package/data/experts/research/egypt-public-affairs/avatars/avatar.webp +0 -0
- package/data/experts/research/finops-expert/avatars/avatar.webp +0 -0
- package/data/experts/research/fortune-consultant/avatars/avatar.webp +0 -0
- package/data/experts/research/hubble-eval-expert/avatars/avatar.webp +0 -0
- package/data/experts/research/sre-expert/avatars/avatar.webp +0 -0
- package/data/experts/sales/bidding-strategist/avatars/avatar.webp +0 -0
- package/data/experts/sales/cordys-crm/avatars/avatar.webp +0 -0
- package/data/experts/sales/enterprise-account-strategist/avatars/avatar.webp +0 -0
- package/data/experts/sales/industrial-park-investment-attraction-expert/avatars/avatar.webp +0 -0
- package/data/experts/sales/linkfox-expert-amazon-listing-specialist/avatars/avatar.webp +0 -0
- package/data/experts/sales/meituan-living-assistant/avatars/avatar.webp +0 -0
- package/data/experts/sales/presales-technical-consultant/avatars/avatar.webp +0 -0
- package/data/experts/sales/sales-battle-team/avatars/avatar.webp +0 -0
- package/data/experts/sales/sdk-log-expert/avatars/avatar.webp +0 -0
- package/data/experts/sales/sg-biz-dev/avatars/avatar.webp +0 -0
- package/data/experts/sales/smb-revenue/avatars/avatar.webp +0 -0
- package/data/experts/sales/uupt-delivery/avatars/avatar.webp +0 -0
- package/data/experts/security/chatlaw-team/avatars/avatar.webp +0 -0
- package/data/experts/security/contract-expert/avatars/avatar.webp +0 -0
- package/data/experts/security/contract-legal-expert/avatars/avatar.webp +0 -0
- package/data/experts/security/enterprise-legal-team/avatars/avatar.webp +0 -0
- package/data/experts/security/fbsir-aigc-compliance-red-team/avatars/avatar.webp +0 -0
- package/data/experts/security/fbsir-board-secretary-assistant/avatars/avatar.webp +0 -0
- package/data/experts/security/huashu-doc-reviewer/avatars/avatar.webp +0 -0
- package/data/experts/security/invoice-verify-expert/avatars/avatar.webp +0 -0
- package/data/experts/security/invoice-verify-workbuddy/avatars/avatar.webp +0 -0
- package/data/experts/security/ip-expert/avatars/avatar.webp +0 -0
- package/data/experts/security/law-student-coach/avatars/avatar.webp +0 -0
- package/data/experts/security/legal-builder-hub/avatars/avatar.webp +0 -0
- package/data/experts/security/legal-clinic-supervisor/avatars/avatar.webp +0 -0
- package/data/experts/security/legal-compliance-reviewer/avatars/avatar.webp +0 -0
- package/data/experts/security/legal-search-pro/avatars/avatar.webp +0 -0
- package/data/experts/security/litigation-legal/avatars/avatar.webp +0 -0
- package/data/experts/security/marketing-reviewer/avatars/avatar.webp +0 -0
- package/data/experts/security/personal-fitness-coach/avatars/avatar.webp +0 -0
- package/data/experts/security/sa-legal-compliance/avatars/avatar.webp +0 -0
- package/data/experts/security/smb-compliance/avatars/avatar.webp +0 -0
- package/data/experts/security/soe/avatars/avatar.webp +0 -0
- package/data/experts/security/tax-compliance-team/avatars/avatar.webp +0 -0
- package/data/experts/security/tc-sec/avatars/avatar.webp +0 -0
- package/data/experts/security/xiaofa-litigation-assistant/avatars/avatar.webp +0 -0
- package/data/experts/spatial-computing/career-navigator/avatars/avatar.webp +0 -0
- package/data/experts/spatial-computing/chaogeek-kongming/avatars/avatar.webp +0 -0
- package/data/experts/spatial-computing/chuangye-manor/avatars/avatar.webp +0 -0
- package/data/experts/spatial-computing/consulting-partners/avatars/avatar.webp +0 -0
- package/data/experts/spatial-computing/english-writing-coach/avatars/avatar.webp +0 -0
- package/data/experts/spatial-computing/fbsir-eight-seat-board/avatars/avatar.webp +0 -0
- package/data/experts/spatial-computing/fbsir-industry-scene-researcher/avatars/avatar.webp +0 -0
- package/data/experts/spatial-computing/fbsir-super-partner/avatars/avatar.webp +0 -0
- package/data/experts/spatial-computing/innovation-startup-mentor/avatars/avatar.webp +0 -0
- package/data/experts/spatial-computing/malaysia-marketing/avatars/avatar.webp +0 -0
- package/data/experts/spatial-computing/metamorphosis-practitioner/avatars/avatar.webp +0 -0
- package/data/experts/spatial-computing/tianyu-account-guardian/avatars/avatar.webp +0 -0
- package/data/experts/spatial-computing/uae-marketing-advisor/avatars/avatar.webp +0 -0
- package/data/experts/spatial-computing/well-arch-expert/avatars/avatar.webp +0 -0
- package/data/experts/specialized/campus-conversation-coach/avatars/avatar.webp +0 -0
- package/data/experts/specialized/capacity-expert/avatars/avatar.webp +0 -0
- package/data/experts/specialized/chaos-expert/avatars/avatar.webp +0 -0
- package/data/experts/specialized/fbsir-super-independent-board/avatars/avatar.webp +0 -0
- package/data/experts/specialized/indie-founder-coach/avatars/avatar.webp +0 -0
- package/data/experts/specialized/job-companion-team/avatars/avatar.webp +0 -0
- package/data/experts/specialized/note-class-representative/avatars/avatar.webp +0 -0
- package/data/experts/specialized/panshi-customer-visit-agent/avatars/avatar.webp +0 -0
- package/data/experts/specialized/tc-chengxin-travel-expert/avatars/avatar.webp +0 -0
- package/data/experts/specialized/worldcup-buddy/avatars/avatar.webp +0 -0
- package/data/experts/support/campus-job-search-coach/avatars/avatar.webp +0 -0
- package/data/experts/support/skillhub-charity-expert-team/avatars/avatar.webp +0 -0
- package/data/experts/support/tencent-rtc-expert/avatars/avatar.webp +0 -0
- package/data/experts/support/workbuddy-universal-mentor/avatars/avatar.webp +0 -0
- package/data/experts/testing/aladin-test-design/avatars/avatar.webp +0 -0
- package/data/experts/testing/skill-smith/avatars/avatar.webp +0 -0
- package/data/experts/testing/thesis-writing-mentor/avatars/avatar.webp +0 -0
- package/lib/client.js +28 -11
- package/lib/index.js +15 -1
- package/package.json +1 -1
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
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.
|
|
70
|
+
var CLIENT_BUILD_VERSION = "0.4.63";
|
|
71
71
|
var PLUGIN_ID = "dsh-plugin-t-expert";
|
|
72
72
|
var DIVISION_FALLBACK = "specialized";
|
|
73
73
|
var NEW_DIVISION = "__new";
|
|
@@ -339,6 +339,7 @@ var CSS = `
|
|
|
339
339
|
.t-team-prompt-body{margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;line-height:19px;white-space:pre-wrap;word-break:break-word;color:var(--dsw-alias-label-secondary)}
|
|
340
340
|
.t-team-avatar{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:50%;background:var(--dsw-alias-bg-layer-3);font-size:22px;line-height:1}
|
|
341
341
|
.t-team-avatar img{width:100%;height:100%;border-radius:50%;object-fit:cover;display:block}
|
|
342
|
+
.t-team-cloud{border:0;background:none;padding:0;margin-inline-start:4px;cursor:pointer;font-size:inherit;line-height:1}.t-team-cloud:hover{opacity:.7}
|
|
342
343
|
.t-team-identity{display:flex;min-width:0;flex-direction:column;padding-right:46px}
|
|
343
344
|
.t-team-card-name{font-size:14px;font-weight:600;line-height:20px;color:var(--dsw-alias-label-primary);display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}
|
|
344
345
|
.t-team-card-division{font-size:13px;line-height:18px;margin-top:2px;color:var(--dsw-alias-label-secondary)}
|
|
@@ -21586,6 +21587,7 @@ function SettingsPanel({ t, ctx, remote, skillRemote, getActive, initialTab, vie
|
|
|
21586
21587
|
const [query, setQuery] = import_react5.default.useState("");
|
|
21587
21588
|
const [avatars, setAvatars] = import_react5.default.useState({});
|
|
21588
21589
|
const [avatarRev, setAvatarRev] = import_react5.default.useState(0);
|
|
21590
|
+
const [cloudClicked, setCloudClicked] = import_react5.default.useState({});
|
|
21589
21591
|
const [division, setDivision] = import_react5.default.useState("");
|
|
21590
21592
|
const [status, setStatus] = import_react5.default.useState("");
|
|
21591
21593
|
const [error62, setError] = import_react5.default.useState("");
|
|
@@ -21788,19 +21790,22 @@ function SettingsPanel({ t, ctx, remote, skillRemote, getActive, initialTab, vie
|
|
|
21788
21790
|
return first === void 0 ? division2 : divisionLabel(first, active);
|
|
21789
21791
|
};
|
|
21790
21792
|
const needle = query.trim().toLowerCase();
|
|
21791
|
-
const visible = experts.filter((expert) => {
|
|
21793
|
+
const visible = import_react5.default.useMemo(() => experts.filter((expert) => {
|
|
21792
21794
|
if (division !== "" && expert.division !== division) return false;
|
|
21793
21795
|
if (status === "on" && !enabledSet.has(expert.slug)) return false;
|
|
21794
21796
|
if (status === "off" && enabledSet.has(expert.slug)) return false;
|
|
21795
21797
|
return matchExpert(expert, active, needle);
|
|
21796
|
-
});
|
|
21798
|
+
}), [experts, division, status, enabledSet, query, active]);
|
|
21797
21799
|
const filtered = query !== "" || division !== "" || status !== "";
|
|
21798
|
-
const grouped =
|
|
21799
|
-
|
|
21800
|
-
const
|
|
21801
|
-
|
|
21802
|
-
|
|
21803
|
-
|
|
21800
|
+
const grouped = import_react5.default.useMemo(() => {
|
|
21801
|
+
const out = [];
|
|
21802
|
+
for (const expert of visible) {
|
|
21803
|
+
const last = out[out.length - 1];
|
|
21804
|
+
if (last !== void 0 && last.division === expert.division) last.items.push(expert);
|
|
21805
|
+
else out.push({ division: expert.division, items: [expert] });
|
|
21806
|
+
}
|
|
21807
|
+
return out;
|
|
21808
|
+
}, [visible]);
|
|
21804
21809
|
async function toggle(expert) {
|
|
21805
21810
|
if (snapshot === null || busy) return;
|
|
21806
21811
|
const next = new Set(snapshot.enabled);
|
|
@@ -21920,7 +21925,19 @@ function SettingsPanel({ t, ctx, remote, skillRemote, getActive, initialTab, vie
|
|
|
21920
21925
|
/* @__PURE__ */ import_react5.default.createElement("span", { className: "t-team-group-chevron", "aria-hidden": "true" }, open2 ? "\u25BE" : "\u25B8")
|
|
21921
21926
|
), open2 && /* @__PURE__ */ import_react5.default.createElement("div", { className: "t-team-grid" }, group.items.map((expert) => {
|
|
21922
21927
|
const on = enabledSet.has(expert.slug);
|
|
21923
|
-
return /* @__PURE__ */ import_react5.default.createElement("div", { className: "t-team-card", "data-enabled": on, key: expert.slug }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "t-team-card-body" }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "t-team-avatar" }, avatars[expert.slug] === void 0 ? expert.emoji || "\u{1F9E9}" : /* @__PURE__ */ import_react5.default.createElement("img", { src: avatars[expert.slug], alt: "" })), /* @__PURE__ */ import_react5.default.createElement("div", { className: "t-team-identity" }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "t-team-card-name" }, displayName(expert, active), expert.custom === true && /* @__PURE__ */ import_react5.default.createElement(Tag2, { tone: "info" }, t("custom.badge")), expert.assets === "missing" &&
|
|
21928
|
+
return /* @__PURE__ */ import_react5.default.createElement("div", { className: "t-team-card", "data-enabled": on, key: expert.slug }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "t-team-card-body" }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "t-team-avatar" }, avatars[expert.slug] === void 0 ? expert.emoji || "\u{1F9E9}" : /* @__PURE__ */ import_react5.default.createElement("img", { src: avatars[expert.slug], alt: "" })), /* @__PURE__ */ import_react5.default.createElement("div", { className: "t-team-identity" }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "t-team-card-name" }, displayName(expert, active), expert.custom === true && /* @__PURE__ */ import_react5.default.createElement(Tag2, { tone: "info" }, t("custom.badge")), expert.assets === "missing" && cloudClicked[expert.slug] !== true && /* @__PURE__ */ import_react5.default.createElement(
|
|
21929
|
+
"button",
|
|
21930
|
+
{
|
|
21931
|
+
type: "button",
|
|
21932
|
+
className: "t-team-cloud",
|
|
21933
|
+
title: t("assets.cloud"),
|
|
21934
|
+
onClick: () => {
|
|
21935
|
+
warmupAssets(remote, expert);
|
|
21936
|
+
setCloudClicked((prev) => ({ ...prev, [expert.slug]: true }));
|
|
21937
|
+
}
|
|
21938
|
+
},
|
|
21939
|
+
"\u2601\uFE0F"
|
|
21940
|
+
)), /* @__PURE__ */ import_react5.default.createElement("div", { className: "t-team-card-division" }, divisionLabel(expert, active)), /* @__PURE__ */ import_react5.default.createElement("div", { className: "t-team-card-slug" }, expert.slug)), /* @__PURE__ */ import_react5.default.createElement("p", { className: "t-team-card-desc" }, displayDescription(expert, active)), expert.conflict === true && /* @__PURE__ */ import_react5.default.createElement("div", { className: "t-team-conflict", style: { gridColumn: "1/-1" } }, t("settings.conflict"))), /* @__PURE__ */ import_react5.default.createElement("div", { className: "t-team-card-tools" }, /* @__PURE__ */ import_react5.default.createElement(
|
|
21924
21941
|
Button2,
|
|
21925
21942
|
{
|
|
21926
21943
|
variant: "ghost",
|
|
@@ -22142,7 +22159,7 @@ function SummonButton({ t, ctx, remote, getActive, insertReference, insertSkillH
|
|
|
22142
22159
|
setFailed("");
|
|
22143
22160
|
setPopNote("");
|
|
22144
22161
|
if (!next) return;
|
|
22145
|
-
|
|
22162
|
+
void refresh(remote, false).catch(() => void 0);
|
|
22146
22163
|
}
|
|
22147
22164
|
const active = getActive();
|
|
22148
22165
|
const popTabs = [["experts", "tab.experts"], ["skills", "tab.skills"]];
|
package/lib/index.js
CHANGED
|
@@ -400,6 +400,9 @@ export function apply(ctx, config) {
|
|
|
400
400
|
enabled: unwrapVolatile(source.enabled),
|
|
401
401
|
enabledSeeded: unwrapVolatile(source.enabledSeeded),
|
|
402
402
|
enabledSeedVersion: unwrapVolatile(source.enabledSeedVersion),
|
|
403
|
+
// 2026-09-29 修:漏读 enabledSeedRoster 会让 seedDefaultEnabled 把用户停用过的专家重新打开
|
|
404
|
+
// (entry 模式下 seen 恒为 [],基线退化成当前 enabled,停用的 slug 被当成「新增」再写回)。
|
|
405
|
+
enabledSeedRoster: unwrapVolatile(source.enabledSeedRoster),
|
|
403
406
|
};
|
|
404
407
|
}
|
|
405
408
|
return undefined;
|
|
@@ -759,6 +762,9 @@ export function apply(ctx, config) {
|
|
|
759
762
|
if (expert.packDir === undefined) return "local";
|
|
760
763
|
const info = packInfoFor(roster, expert.division, expert.slug);
|
|
761
764
|
if (info === undefined) return "local";
|
|
765
|
+
// 头像自 2026-09-29 起随包发布(不再走云端):roster 里那些「只装 avatars」的条目已无意义,
|
|
766
|
+
// 一律视为本地 —— 否则面板会给它们挂一个点了也没必要的 ☁️。
|
|
767
|
+
if ((info.dirs ?? []).filter((d) => d !== "avatars").length === 0) return "local";
|
|
762
768
|
return (await assetsState(expert.packDir, info)) === ASSETS_READY ? "ready" : "missing";
|
|
763
769
|
}
|
|
764
770
|
|
|
@@ -1014,7 +1020,9 @@ export function apply(ctx, config) {
|
|
|
1014
1020
|
await removeCustomExpert(customRoot, slug, expert.division);
|
|
1015
1021
|
// 删除后把该专家从启用列表里摘掉,否则设置段会留下一个指向空气的 slug
|
|
1016
1022
|
const enabled = [...enabledSet()].filter((item) => item !== slug);
|
|
1017
|
-
|
|
1023
|
+
// settings 未就绪时跳过写入:文件已删、enabled 里残留一个 ghost slug 不致命(pruneStaleEnabled 下次清),
|
|
1024
|
+
// 但硬调 settingsService.mutate 会抛错把整个删除流程打断(与 pruneStaleEnabled / seedDefaultEnabled 对齐)。
|
|
1025
|
+
if (enabled.length !== enabledSet().size && settingsService !== undefined) {
|
|
1018
1026
|
await settingsService.mutate(SETTINGS_NAMESPACE, [{ op: "set", path: ["enabled"], value: enabled }], revision());
|
|
1019
1027
|
}
|
|
1020
1028
|
await refreshCatalog();
|
|
@@ -1060,14 +1068,18 @@ export function apply(ctx, config) {
|
|
|
1060
1068
|
* 面板据此回退到 emoji(这正是用户要的「没下载过显示默认头像、下载过显示真头像」)。
|
|
1061
1069
|
* 返回 data URL 而不是路径,是因为客户端跑在浏览器里、读不到本地文件。
|
|
1062
1070
|
*/
|
|
1071
|
+
// 头像随包发布、结果进程内缓存;fetchAssets / fetch_expert_assets 拉来新头像才失效。
|
|
1072
|
+
let avatarsCache;
|
|
1063
1073
|
async function avatars() {
|
|
1064
1074
|
await ensureReady();
|
|
1075
|
+
if (avatarsCache !== undefined) return avatarsCache;
|
|
1065
1076
|
const out = {};
|
|
1066
1077
|
await Promise.all(usable().map(async (expert) => {
|
|
1067
1078
|
if (expert.packDir === undefined) return;
|
|
1068
1079
|
const buffer = await readFile(join(expert.packDir, "avatars", "avatar.webp")).catch(() => undefined);
|
|
1069
1080
|
if (buffer !== undefined) out[expert.slug] = `data:image/webp;base64,${buffer.toString("base64")}`;
|
|
1070
1081
|
}));
|
|
1082
|
+
avatarsCache = out;
|
|
1071
1083
|
return out;
|
|
1072
1084
|
}
|
|
1073
1085
|
|
|
@@ -1080,6 +1092,7 @@ export function apply(ctx, config) {
|
|
|
1080
1092
|
const info = packInfoFor(roster, expert.division, expert.slug);
|
|
1081
1093
|
if (info === undefined) return { status: "local", bytes: 0, reason: "" };
|
|
1082
1094
|
const res = await ensureAssets({ packDir: expert.packDir, roster, info });
|
|
1095
|
+
avatarsCache = undefined; // 头像可能刚下到本地,清缓存让下次重读
|
|
1083
1096
|
return {
|
|
1084
1097
|
status: res.status,
|
|
1085
1098
|
bytes: res.bytes ?? info.bytes ?? 0,
|
|
@@ -1201,6 +1214,7 @@ export function apply(ctx, config) {
|
|
|
1201
1214
|
const info = packInfoFor(roster, expert.division, expert.slug);
|
|
1202
1215
|
if (info === undefined) return { ...base, status: "local" };
|
|
1203
1216
|
const res = await ensureAssets({ packDir: expert.packDir, roster, info });
|
|
1217
|
+
avatarsCache = undefined; // 头像可能刚下到本地,清缓存让下次重读
|
|
1204
1218
|
if (res.status === ASSETS_READY) {
|
|
1205
1219
|
return { ...base, status: "ready", dirs: [...(info.dirs ?? [])], bytes: res.bytes ?? info.bytes ?? 0 };
|
|
1206
1220
|
}
|
package/package.json
CHANGED