@liushutan/dsh-agency-agents 0.1.22

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 (295) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/CHANGELOG.zh-CN.md +41 -0
  3. package/LICENSE +201 -0
  4. package/NOTICE +9 -0
  5. package/README.md +195 -0
  6. package/README.zh-CN.md +195 -0
  7. package/assets/agency-agents/LICENSE +21 -0
  8. package/assets/agency-agents/UPSTREAM.md +7 -0
  9. package/assets/agency-agents/academic/academic-anthropologist.md +126 -0
  10. package/assets/agency-agents/academic/academic-geographer.md +128 -0
  11. package/assets/agency-agents/academic/academic-historian.md +124 -0
  12. package/assets/agency-agents/academic/academic-narratologist.md +119 -0
  13. package/assets/agency-agents/academic/academic-psychologist.md +119 -0
  14. package/assets/agency-agents/academic/academic-statistician.md +145 -0
  15. package/assets/agency-agents/design/design-brand-guardian.md +323 -0
  16. package/assets/agency-agents/design/design-image-prompt-engineer.md +237 -0
  17. package/assets/agency-agents/design/design-inclusive-visuals-specialist.md +72 -0
  18. package/assets/agency-agents/design/design-persona-walkthrough.md +273 -0
  19. package/assets/agency-agents/design/design-ui-designer.md +384 -0
  20. package/assets/agency-agents/design/design-ui-finish-gate-reviewer.md +218 -0
  21. package/assets/agency-agents/design/design-ux-architect.md +470 -0
  22. package/assets/agency-agents/design/design-ux-researcher.md +330 -0
  23. package/assets/agency-agents/design/design-visual-storyteller.md +150 -0
  24. package/assets/agency-agents/design/design-whimsy-injector.md +439 -0
  25. package/assets/agency-agents/engineering/engineering-ai-data-remediation-engineer.md +212 -0
  26. package/assets/agency-agents/engineering/engineering-ai-engineer.md +147 -0
  27. package/assets/agency-agents/engineering/engineering-api-platform-engineer.md +163 -0
  28. package/assets/agency-agents/engineering/engineering-autonomous-optimization-architect.md +108 -0
  29. package/assets/agency-agents/engineering/engineering-backend-architect.md +237 -0
  30. package/assets/agency-agents/engineering/engineering-cms-developer.md +537 -0
  31. package/assets/agency-agents/engineering/engineering-code-reviewer.md +77 -0
  32. package/assets/agency-agents/engineering/engineering-codebase-onboarding-engineer.md +174 -0
  33. package/assets/agency-agents/engineering/engineering-data-engineer.md +307 -0
  34. package/assets/agency-agents/engineering/engineering-data-visualization-engineer.md +152 -0
  35. package/assets/agency-agents/engineering/engineering-database-optimizer.md +177 -0
  36. package/assets/agency-agents/engineering/engineering-database-reliability-engineer.md +163 -0
  37. package/assets/agency-agents/engineering/engineering-desktop-app-engineer.md +205 -0
  38. package/assets/agency-agents/engineering/engineering-developer-tooling-engineer.md +154 -0
  39. package/assets/agency-agents/engineering/engineering-devops-automator.md +377 -0
  40. package/assets/agency-agents/engineering/engineering-drupal-performance.md +348 -0
  41. package/assets/agency-agents/engineering/engineering-drupal-shopping-cart.md +361 -0
  42. package/assets/agency-agents/engineering/engineering-email-intelligence-engineer.md +354 -0
  43. package/assets/agency-agents/engineering/engineering-embedded-firmware-engineer.md +174 -0
  44. package/assets/agency-agents/engineering/engineering-feishu-integration-developer.md +599 -0
  45. package/assets/agency-agents/engineering/engineering-filament-optimization-specialist.md +284 -0
  46. package/assets/agency-agents/engineering/engineering-finops-engineer.md +154 -0
  47. package/assets/agency-agents/engineering/engineering-frontend-developer.md +226 -0
  48. package/assets/agency-agents/engineering/engineering-gaussdb-expert.md +335 -0
  49. package/assets/agency-agents/engineering/engineering-git-workflow-master.md +85 -0
  50. package/assets/agency-agents/engineering/engineering-i18n-engineer.md +185 -0
  51. package/assets/agency-agents/engineering/engineering-identity-access-engineer.md +197 -0
  52. package/assets/agency-agents/engineering/engineering-incident-response-commander.md +445 -0
  53. package/assets/agency-agents/engineering/engineering-iot-fleet-engineer.md +149 -0
  54. package/assets/agency-agents/engineering/engineering-it-service-manager.md +562 -0
  55. package/assets/agency-agents/engineering/engineering-llm-post-training-engineer.md +167 -0
  56. package/assets/agency-agents/engineering/engineering-minimal-change-engineer.md +208 -0
  57. package/assets/agency-agents/engineering/engineering-mobile-app-builder.md +494 -0
  58. package/assets/agency-agents/engineering/engineering-mobile-release-engineer.md +164 -0
  59. package/assets/agency-agents/engineering/engineering-multi-agent-systems-architect.md +601 -0
  60. package/assets/agency-agents/engineering/engineering-network-engineer.md +240 -0
  61. package/assets/agency-agents/engineering/engineering-orgscript-engineer.md +114 -0
  62. package/assets/agency-agents/engineering/engineering-payments-billing-engineer.md +195 -0
  63. package/assets/agency-agents/engineering/engineering-privacy-engineer.md +153 -0
  64. package/assets/agency-agents/engineering/engineering-prompt-engineer.md +203 -0
  65. package/assets/agency-agents/engineering/engineering-rag-pipeline-engineer.md +438 -0
  66. package/assets/agency-agents/engineering/engineering-rapid-prototyper.md +463 -0
  67. package/assets/agency-agents/engineering/engineering-realtime-collaboration-engineer.md +188 -0
  68. package/assets/agency-agents/engineering/engineering-rust-refactoring-specialist.md +314 -0
  69. package/assets/agency-agents/engineering/engineering-search-relevance-engineer.md +238 -0
  70. package/assets/agency-agents/engineering/engineering-section-508-specialist.md +340 -0
  71. package/assets/agency-agents/engineering/engineering-senior-developer.md +177 -0
  72. package/assets/agency-agents/engineering/engineering-software-architect.md +113 -0
  73. package/assets/agency-agents/engineering/engineering-solidity-smart-contract-engineer.md +523 -0
  74. package/assets/agency-agents/engineering/engineering-sre.md +91 -0
  75. package/assets/agency-agents/engineering/engineering-technical-writer.md +394 -0
  76. package/assets/agency-agents/engineering/engineering-uswds-developer.md +341 -0
  77. package/assets/agency-agents/engineering/engineering-video-streaming-engineer.md +151 -0
  78. package/assets/agency-agents/engineering/engineering-voice-ai-integration-engineer.md +562 -0
  79. package/assets/agency-agents/engineering/engineering-webassembly-engineer.md +157 -0
  80. package/assets/agency-agents/engineering/engineering-wechat-mini-program-developer.md +351 -0
  81. package/assets/agency-agents/engineering/engineering-wordpress-performance.md +347 -0
  82. package/assets/agency-agents/engineering/engineering-wordpress-shopping-cart.md +347 -0
  83. package/assets/agency-agents/finance/finance-bookkeeper-controller.md +261 -0
  84. package/assets/agency-agents/finance/finance-financial-analyst.md +235 -0
  85. package/assets/agency-agents/finance/finance-fpa-analyst.md +264 -0
  86. package/assets/agency-agents/finance/finance-investment-researcher.md +273 -0
  87. package/assets/agency-agents/finance/finance-tax-strategist.md +240 -0
  88. package/assets/agency-agents/game-development/blender/blender-addon-engineer.md +235 -0
  89. package/assets/agency-agents/game-development/economy-designer.md +157 -0
  90. package/assets/agency-agents/game-development/game-audio-engineer.md +265 -0
  91. package/assets/agency-agents/game-development/game-designer.md +168 -0
  92. package/assets/agency-agents/game-development/godot/godot-gameplay-scripter.md +335 -0
  93. package/assets/agency-agents/game-development/godot/godot-multiplayer-engineer.md +298 -0
  94. package/assets/agency-agents/game-development/godot/godot-shader-developer.md +267 -0
  95. package/assets/agency-agents/game-development/level-designer.md +209 -0
  96. package/assets/agency-agents/game-development/narrative-designer.md +244 -0
  97. package/assets/agency-agents/game-development/roblox-studio/roblox-avatar-creator.md +298 -0
  98. package/assets/agency-agents/game-development/roblox-studio/roblox-experience-designer.md +306 -0
  99. package/assets/agency-agents/game-development/roblox-studio/roblox-systems-scripter.md +326 -0
  100. package/assets/agency-agents/game-development/technical-artist.md +230 -0
  101. package/assets/agency-agents/game-development/unity/unity-architect.md +272 -0
  102. package/assets/agency-agents/game-development/unity/unity-editor-tool-developer.md +311 -0
  103. package/assets/agency-agents/game-development/unity/unity-multiplayer-engineer.md +322 -0
  104. package/assets/agency-agents/game-development/unity/unity-shader-graph-artist.md +270 -0
  105. package/assets/agency-agents/game-development/unreal-engine/unreal-multiplayer-architect.md +314 -0
  106. package/assets/agency-agents/game-development/unreal-engine/unreal-systems-engineer.md +311 -0
  107. package/assets/agency-agents/game-development/unreal-engine/unreal-technical-artist.md +257 -0
  108. package/assets/agency-agents/game-development/unreal-engine/unreal-world-builder.md +274 -0
  109. package/assets/agency-agents/gis/gis-3d-scene-developer.md +112 -0
  110. package/assets/agency-agents/gis/gis-analyst.md +92 -0
  111. package/assets/agency-agents/gis/gis-bim-specialist.md +109 -0
  112. package/assets/agency-agents/gis/gis-cartography-designer.md +151 -0
  113. package/assets/agency-agents/gis/gis-drone-reality-mapping.md +121 -0
  114. package/assets/agency-agents/gis/gis-geoai-ml-engineer.md +106 -0
  115. package/assets/agency-agents/gis/gis-geoprocessing-specialist.md +98 -0
  116. package/assets/agency-agents/gis/gis-qa-engineer.md +134 -0
  117. package/assets/agency-agents/gis/gis-solution-engineer.md +102 -0
  118. package/assets/agency-agents/gis/gis-spatial-data-engineer.md +98 -0
  119. package/assets/agency-agents/gis/gis-spatial-data-scientist.md +112 -0
  120. package/assets/agency-agents/gis/gis-technical-consultant.md +87 -0
  121. package/assets/agency-agents/gis/gis-web-gis-developer.md +109 -0
  122. package/assets/agency-agents/healthcare/healthcare-clinical-evidence-agent.md +232 -0
  123. package/assets/agency-agents/healthcare/healthcare-innovation-strategist.md +434 -0
  124. package/assets/agency-agents/healthcare/healthcare-sovereign-health-systems-agent.md +313 -0
  125. package/assets/agency-agents/integrations/mcp-memory/backend-architect-with-memory.md +249 -0
  126. package/assets/agency-agents/marketing/marketing-aeo-foundations.md +265 -0
  127. package/assets/agency-agents/marketing/marketing-agentic-search-optimizer.md +314 -0
  128. package/assets/agency-agents/marketing/marketing-ai-citation-strategist.md +173 -0
  129. package/assets/agency-agents/marketing/marketing-app-store-optimizer.md +322 -0
  130. package/assets/agency-agents/marketing/marketing-baidu-seo-specialist.md +227 -0
  131. package/assets/agency-agents/marketing/marketing-bilibili-content-strategist.md +200 -0
  132. package/assets/agency-agents/marketing/marketing-book-co-author.md +111 -0
  133. package/assets/agency-agents/marketing/marketing-carousel-growth-engine.md +200 -0
  134. package/assets/agency-agents/marketing/marketing-china-ecommerce-operator.md +284 -0
  135. package/assets/agency-agents/marketing/marketing-china-market-localization-strategist.md +284 -0
  136. package/assets/agency-agents/marketing/marketing-content-creator.md +55 -0
  137. package/assets/agency-agents/marketing/marketing-cross-border-ecommerce.md +260 -0
  138. package/assets/agency-agents/marketing/marketing-douyin-strategist.md +150 -0
  139. package/assets/agency-agents/marketing/marketing-email-strategist.md +250 -0
  140. package/assets/agency-agents/marketing/marketing-global-podcast-strategist.md +207 -0
  141. package/assets/agency-agents/marketing/marketing-growth-hacker.md +55 -0
  142. package/assets/agency-agents/marketing/marketing-instagram-curator.md +114 -0
  143. package/assets/agency-agents/marketing/marketing-kuaishou-strategist.md +224 -0
  144. package/assets/agency-agents/marketing/marketing-linkedin-content-creator.md +215 -0
  145. package/assets/agency-agents/marketing/marketing-livestream-commerce-coach.md +306 -0
  146. package/assets/agency-agents/marketing/marketing-multi-platform-publisher.md +218 -0
  147. package/assets/agency-agents/marketing/marketing-podcast-strategist.md +278 -0
  148. package/assets/agency-agents/marketing/marketing-pr-communications-manager.md +474 -0
  149. package/assets/agency-agents/marketing/marketing-private-domain-operator.md +309 -0
  150. package/assets/agency-agents/marketing/marketing-reddit-community-builder.md +124 -0
  151. package/assets/agency-agents/marketing/marketing-seo-specialist.md +371 -0
  152. package/assets/agency-agents/marketing/marketing-short-video-editing-coach.md +413 -0
  153. package/assets/agency-agents/marketing/marketing-social-media-strategist.md +126 -0
  154. package/assets/agency-agents/marketing/marketing-tiktok-strategist.md +126 -0
  155. package/assets/agency-agents/marketing/marketing-twitter-engager.md +127 -0
  156. package/assets/agency-agents/marketing/marketing-video-optimization-specialist.md +120 -0
  157. package/assets/agency-agents/marketing/marketing-wechat-official-account.md +146 -0
  158. package/assets/agency-agents/marketing/marketing-weibo-strategist.md +241 -0
  159. package/assets/agency-agents/marketing/marketing-x-twitter-intelligence-analyst.md +162 -0
  160. package/assets/agency-agents/marketing/marketing-xiaohongshu-specialist.md +139 -0
  161. package/assets/agency-agents/marketing/marketing-zhihu-strategist.md +163 -0
  162. package/assets/agency-agents/paid-media/paid-media-auditor.md +72 -0
  163. package/assets/agency-agents/paid-media/paid-media-creative-strategist.md +72 -0
  164. package/assets/agency-agents/paid-media/paid-media-paid-social-strategist.md +72 -0
  165. package/assets/agency-agents/paid-media/paid-media-ppc-strategist.md +72 -0
  166. package/assets/agency-agents/paid-media/paid-media-programmatic-buyer.md +72 -0
  167. package/assets/agency-agents/paid-media/paid-media-search-query-analyst.md +72 -0
  168. package/assets/agency-agents/paid-media/paid-media-tracking-specialist.md +72 -0
  169. package/assets/agency-agents/product/product-behavioral-nudge-engine.md +81 -0
  170. package/assets/agency-agents/product/product-feedback-synthesizer.md +120 -0
  171. package/assets/agency-agents/product/product-manager.md +470 -0
  172. package/assets/agency-agents/product/product-sprint-prioritizer.md +155 -0
  173. package/assets/agency-agents/product/product-trend-researcher.md +160 -0
  174. package/assets/agency-agents/project-management/project-management-experiment-tracker.md +199 -0
  175. package/assets/agency-agents/project-management/project-management-jira-workflow-steward.md +231 -0
  176. package/assets/agency-agents/project-management/project-management-meeting-notes-specialist.md +96 -0
  177. package/assets/agency-agents/project-management/project-management-project-shepherd.md +195 -0
  178. package/assets/agency-agents/project-management/project-management-studio-operations.md +201 -0
  179. package/assets/agency-agents/project-management/project-management-studio-producer.md +204 -0
  180. package/assets/agency-agents/project-management/project-manager-senior.md +136 -0
  181. package/assets/agency-agents/sales/sales-account-strategist.md +228 -0
  182. package/assets/agency-agents/sales/sales-coach.md +272 -0
  183. package/assets/agency-agents/sales/sales-deal-strategist.md +181 -0
  184. package/assets/agency-agents/sales/sales-discovery-coach.md +226 -0
  185. package/assets/agency-agents/sales/sales-engineer.md +183 -0
  186. package/assets/agency-agents/sales/sales-offer-lead-gen-strategist.md +258 -0
  187. package/assets/agency-agents/sales/sales-outbound-strategist.md +202 -0
  188. package/assets/agency-agents/sales/sales-pipeline-analyst.md +268 -0
  189. package/assets/agency-agents/sales/sales-proposal-strategist.md +218 -0
  190. package/assets/agency-agents/security/security-ai-generated-code-auditor.md +208 -0
  191. package/assets/agency-agents/security/security-appsec-engineer.md +492 -0
  192. package/assets/agency-agents/security/security-architect.md +305 -0
  193. package/assets/agency-agents/security/security-blockchain-security-auditor.md +464 -0
  194. package/assets/agency-agents/security/security-cloud-security-architect.md +524 -0
  195. package/assets/agency-agents/security/security-compliance-auditor.md +159 -0
  196. package/assets/agency-agents/security/security-incident-responder.md +438 -0
  197. package/assets/agency-agents/security/security-penetration-tester.md +400 -0
  198. package/assets/agency-agents/security/security-secrets-credential-engineer.md +177 -0
  199. package/assets/agency-agents/security/security-senior-secops.md +751 -0
  200. package/assets/agency-agents/security/security-threat-detection-engineer.md +535 -0
  201. package/assets/agency-agents/security/security-threat-intelligence-analyst.md +645 -0
  202. package/assets/agency-agents/spatial-computing/macos-spatial-metal-engineer.md +338 -0
  203. package/assets/agency-agents/spatial-computing/terminal-integration-specialist.md +71 -0
  204. package/assets/agency-agents/spatial-computing/visionos-spatial-engineer.md +55 -0
  205. package/assets/agency-agents/spatial-computing/xr-cockpit-interaction-specialist.md +33 -0
  206. package/assets/agency-agents/spatial-computing/xr-immersive-developer.md +33 -0
  207. package/assets/agency-agents/spatial-computing/xr-interface-architect.md +33 -0
  208. package/assets/agency-agents/specialized/accounts-payable-agent.md +186 -0
  209. package/assets/agency-agents/specialized/agentic-identity-trust.md +388 -0
  210. package/assets/agency-agents/specialized/agents-orchestrator.md +368 -0
  211. package/assets/agency-agents/specialized/automation-governance-architect.md +217 -0
  212. package/assets/agency-agents/specialized/business-strategist.md +489 -0
  213. package/assets/agency-agents/specialized/change-management-consultant.md +498 -0
  214. package/assets/agency-agents/specialized/chief-financial-officer.md +389 -0
  215. package/assets/agency-agents/specialized/corporate-training-designer.md +193 -0
  216. package/assets/agency-agents/specialized/customer-service.md +399 -0
  217. package/assets/agency-agents/specialized/customer-success-manager.md +461 -0
  218. package/assets/agency-agents/specialized/data-consolidation-agent.md +61 -0
  219. package/assets/agency-agents/specialized/data-privacy-officer.md +413 -0
  220. package/assets/agency-agents/specialized/esg-sustainability-officer.md +397 -0
  221. package/assets/agency-agents/specialized/government-digital-presales-consultant.md +364 -0
  222. package/assets/agency-agents/specialized/grant-writer.md +512 -0
  223. package/assets/agency-agents/specialized/healthcare-aging-parent-care-companion.md +415 -0
  224. package/assets/agency-agents/specialized/healthcare-customer-service.md +390 -0
  225. package/assets/agency-agents/specialized/healthcare-marketing-compliance.md +396 -0
  226. package/assets/agency-agents/specialized/hospitality-guest-services.md +604 -0
  227. package/assets/agency-agents/specialized/hr-onboarding.md +452 -0
  228. package/assets/agency-agents/specialized/identity-graph-operator.md +261 -0
  229. package/assets/agency-agents/specialized/language-translator.md +265 -0
  230. package/assets/agency-agents/specialized/legal-billing-time-tracking.md +570 -0
  231. package/assets/agency-agents/specialized/legal-client-intake.md +493 -0
  232. package/assets/agency-agents/specialized/legal-document-review.md +455 -0
  233. package/assets/agency-agents/specialized/loan-officer-assistant.md +556 -0
  234. package/assets/agency-agents/specialized/lsp-index-engineer.md +315 -0
  235. package/assets/agency-agents/specialized/ma-integration-manager.md +428 -0
  236. package/assets/agency-agents/specialized/medical-billing-coding-specialist.md +492 -0
  237. package/assets/agency-agents/specialized/operations-manager.md +400 -0
  238. package/assets/agency-agents/specialized/organizational-psychologist.md +392 -0
  239. package/assets/agency-agents/specialized/personal-growth-mentor.md +160 -0
  240. package/assets/agency-agents/specialized/real-estate-buyer-seller.md +597 -0
  241. package/assets/agency-agents/specialized/recruitment-specialist.md +510 -0
  242. package/assets/agency-agents/specialized/report-distribution-agent.md +66 -0
  243. package/assets/agency-agents/specialized/resume-tailor.md +231 -0
  244. package/assets/agency-agents/specialized/retail-customer-returns.md +567 -0
  245. package/assets/agency-agents/specialized/sales-data-extraction-agent.md +68 -0
  246. package/assets/agency-agents/specialized/sales-outreach.md +426 -0
  247. package/assets/agency-agents/specialized/specialized-chief-of-staff.md +280 -0
  248. package/assets/agency-agents/specialized/specialized-civil-engineer.md +357 -0
  249. package/assets/agency-agents/specialized/specialized-codebase-archaeologist.md +342 -0
  250. package/assets/agency-agents/specialized/specialized-cultural-intelligence-strategist.md +89 -0
  251. package/assets/agency-agents/specialized/specialized-developer-advocate.md +318 -0
  252. package/assets/agency-agents/specialized/specialized-document-generator.md +56 -0
  253. package/assets/agency-agents/specialized/specialized-fedramp-rmf-compliance.md +379 -0
  254. package/assets/agency-agents/specialized/specialized-french-consulting-market.md +195 -0
  255. package/assets/agency-agents/specialized/specialized-korean-business-navigator.md +217 -0
  256. package/assets/agency-agents/specialized/specialized-mcp-builder.md +249 -0
  257. package/assets/agency-agents/specialized/specialized-model-qa.md +489 -0
  258. package/assets/agency-agents/specialized/specialized-pricing-analyst.md +244 -0
  259. package/assets/agency-agents/specialized/specialized-salesforce-architect.md +183 -0
  260. package/assets/agency-agents/specialized/specialized-strategy-duel-agent.md +131 -0
  261. package/assets/agency-agents/specialized/specialized-workflow-architect.md +598 -0
  262. package/assets/agency-agents/specialized/study-abroad-advisor.md +283 -0
  263. package/assets/agency-agents/specialized/supply-chain-strategist.md +583 -0
  264. package/assets/agency-agents/specialized/zk-steward.md +212 -0
  265. package/assets/agency-agents/support/support-analytics-reporter.md +366 -0
  266. package/assets/agency-agents/support/support-executive-summary-generator.md +213 -0
  267. package/assets/agency-agents/support/support-finance-tracker.md +443 -0
  268. package/assets/agency-agents/support/support-infrastructure-maintainer.md +619 -0
  269. package/assets/agency-agents/support/support-legal-compliance-checker.md +589 -0
  270. package/assets/agency-agents/support/support-support-responder.md +586 -0
  271. package/assets/agency-agents/testing/testing-accessibility-auditor.md +317 -0
  272. package/assets/agency-agents/testing/testing-api-tester.md +307 -0
  273. package/assets/agency-agents/testing/testing-evidence-collector.md +211 -0
  274. package/assets/agency-agents/testing/testing-performance-benchmarker.md +269 -0
  275. package/assets/agency-agents/testing/testing-reality-checker.md +250 -0
  276. package/assets/agency-agents/testing/testing-test-automation-engineer.md +180 -0
  277. package/assets/agency-agents/testing/testing-test-results-analyzer.md +306 -0
  278. package/assets/agency-agents/testing/testing-tool-evaluator.md +395 -0
  279. package/assets/agency-agents/testing/testing-workflow-optimizer.md +451 -0
  280. package/assets/branding/banner.png +0 -0
  281. package/assets/branding/banner.svg +52 -0
  282. package/assets/branding/banner.txt +4 -0
  283. package/assets/branding/dsh-logo.png +0 -0
  284. package/assets/screenshots/agent-roster-en.png +0 -0
  285. package/assets/screenshots/agent-roster.png +0 -0
  286. package/assets/screenshots/expert-picker.png +0 -0
  287. package/assets/screenshots/summon-prompt.png +0 -0
  288. package/cordis.patch.yml +8 -0
  289. package/lib/client.js +7238 -0
  290. package/lib/i18n-BL3miiHZ.js +463 -0
  291. package/lib/index.d.ts +95 -0
  292. package/lib/index.js +504 -0
  293. package/lib/remote.d.ts +20 -0
  294. package/lib/remote.js +179 -0
  295. package/package.json +114 -0
package/lib/index.js ADDED
@@ -0,0 +1,504 @@
1
+ import { a as readHostLocale, c as ZH_DIVISION, i as matchDivision, l as ZH_NAME, n as localizedExpertDescription, o as renderExpertList, r as localizedExpertName, s as renderSummonResults, t as formatHost } from "./i18n-BL3miiHZ.js";
2
+ import z from "@deepseek-ai/schemastery";
3
+ import { defineTool } from "@deepseek-ai/dsh-tools";
4
+ import { installSettingsSection, settingsNamespace } from "@deepseek-ai/dsh-settings";
5
+ import { readFile, readdir, stat } from "node:fs/promises";
6
+ import { join } from "node:path";
7
+ import { fileURLToPath } from "node:url";
8
+ //#region src/index.ts
9
+ const name = "agency-agents";
10
+ const inject = [
11
+ "tools",
12
+ "subagents",
13
+ "systemPrompt",
14
+ "settings"
15
+ ];
16
+ const DEFAULT_DIVISIONS = [
17
+ "academic",
18
+ "design",
19
+ "engineering",
20
+ "finance",
21
+ "game-development",
22
+ "gis",
23
+ "healthcare",
24
+ "marketing",
25
+ "paid-media",
26
+ "product",
27
+ "project-management",
28
+ "sales",
29
+ "security",
30
+ "spatial-computing",
31
+ "specialized",
32
+ "support",
33
+ "testing"
34
+ ];
35
+ /** 额外扫描的源目录:不在标准 division 内、但仍是合法智能体的集成(如 mcp-memory)。 */
36
+ const EXTRA_SOURCES = [{
37
+ dir: "integrations/mcp-memory",
38
+ division: "engineering"
39
+ }];
40
+ /** 描述截断上限,避免无过滤列出全量智能体时 token 开销过大。 */
41
+ const DESCRIPTION_LIMIT = 120;
42
+ /** 一次批量召唤的专家数量上限,避免无界并行拖垮宿主。 */
43
+ const SUMMON_EXPERTS_MAX = 8;
44
+ /** 批量召唤的并发上限。 */
45
+ const SUMMON_EXPERTS_CONCURRENCY = 4;
46
+ /** 单条任务的 Unicode 码点上限。 */
47
+ const SUMMON_TASK_MAX_CHARS = 8e3;
48
+ /**
49
+ * 校验并规范化任务文本:非空且不超过码点上限。
50
+ * index 存在时使用带序号的批量文案,否则使用单条召唤文案;返回规范化后的字符串。
51
+ */
52
+ function normalizeTask(task, locale, index) {
53
+ const text = task === void 0 || task === null ? "" : String(task);
54
+ const length = Array.from(text).length;
55
+ if (text.trim() === "") throw new Error(index === void 0 ? formatHost(locale, "error.taskRequired") : formatHost(locale, "error.taskEmpty", { index }));
56
+ if (length > 8e3) throw new Error(index === void 0 ? formatHost(locale, "error.taskLimit", {
57
+ length,
58
+ max: SUMMON_TASK_MAX_CHARS
59
+ }) : formatHost(locale, "error.taskTooLong", {
60
+ index,
61
+ length,
62
+ max: SUMMON_TASK_MAX_CHARS
63
+ }));
64
+ return text;
65
+ }
66
+ /** 校验批量召唤入参:非空、数量上限、专家名非空、任务非空且不超过码点上限。 */
67
+ function validateSummonSpecs(specs, locale) {
68
+ if (!Array.isArray(specs) || specs.length === 0) throw new Error(formatHost(locale, "error.expertsEmpty"));
69
+ if (specs.length > 8) throw new Error(formatHost(locale, "error.expertsTooMany", {
70
+ max: 8,
71
+ count: specs.length
72
+ }));
73
+ return specs.map((item, index) => {
74
+ const record = item;
75
+ const expert = record === null || record === void 0 ? void 0 : record.expert;
76
+ if (expert === void 0 || expert === null || String(expert).trim() === "") throw new Error(formatHost(locale, "error.expertEmpty", { index: index + 1 }));
77
+ return {
78
+ expert,
79
+ task: normalizeTask(record?.task, locale, index + 1)
80
+ };
81
+ });
82
+ }
83
+ /** 受限并发地映射异步任务,结果顺序与输入一致。 */
84
+ async function mapPool(items, concurrency, mapper) {
85
+ if (items.length === 0) return [];
86
+ const limit = Math.max(1, Math.min(concurrency, items.length));
87
+ const results = new Array(items.length);
88
+ let next = 0;
89
+ const workers = Array.from({ length: limit }, async () => {
90
+ while (true) {
91
+ const index = next;
92
+ next += 1;
93
+ if (index >= items.length) return;
94
+ results[index] = await mapper(items[index], index);
95
+ }
96
+ });
97
+ await Promise.all(workers);
98
+ return results;
99
+ }
100
+ /** 把单次专家运行结果收成批量条目;失败时保留原始查询作为专家名。 */
101
+ function toSummonItemResult(query, result) {
102
+ if (result instanceof Error) {
103
+ const expert = String(query ?? "").trim();
104
+ return {
105
+ expert: expert === "" ? "unknown" : expert,
106
+ ok: false,
107
+ answer: "",
108
+ error: result.message
109
+ };
110
+ }
111
+ return {
112
+ expert: result.expert,
113
+ ok: true,
114
+ answer: result.answer
115
+ };
116
+ }
117
+ /** 未在配置中显式提供 `root` 时,先读取该环境变量,再使用随包发布的智能体目录。 */
118
+ const ROOT_ENV = "AGENCY_AGENTS_ROOT";
119
+ const BUNDLED_ROOT = fileURLToPath(new URL("../assets/agency-agents/", import.meta.url));
120
+ const Config = z.object({
121
+ root: z.string().default(""),
122
+ provider: z.string().default("spawn"),
123
+ divisions: z.array(z.string()).default(DEFAULT_DIVISIONS),
124
+ maxDepth: z.natural().min(1)
125
+ });
126
+ /** 解析智能体根目录:显式配置优先,其次读取环境变量,最后使用包内资产。 */
127
+ function resolveCatalogRoot(root) {
128
+ if (root.trim() !== "") return root;
129
+ const environmentRoot = process.env[ROOT_ENV]?.trim();
130
+ return environmentRoot === void 0 || environmentRoot === "" ? BUNDLED_ROOT : environmentRoot;
131
+ }
132
+ /** 规范化可选深度上限:配置表单的空值等同于未设置,其他值必须允许至少一层子代理。 */
133
+ function normalizeMaxDepth(value) {
134
+ if (value === void 0 || value === null) return void 0;
135
+ if (typeof value !== "number" || !Number.isSafeInteger(value) || value < 1) throw new Error(formatHost("zh", "error.maxDepth"));
136
+ return value;
137
+ }
138
+ /** Neutralize strict `{{...}}` template interpolation inside expert prose. */
139
+ function sanitize(text) {
140
+ return text.replace(/\{(?=\{)/g, "{​");
141
+ }
142
+ /** 去除 UTF-8 BOM,避免 `^---` 因文件头部的零宽字符失配。 */
143
+ function stripBom(text) {
144
+ return text.charCodeAt(0) === 65279 ? text.slice(1) : text;
145
+ }
146
+ /** 剥离字段值首尾的成对引号,保留引号内部的 #、冒号等字符。 */
147
+ function unquote(value) {
148
+ const first = value.charAt(0);
149
+ if ((first === "\"" || first === "'") && value.length >= 2 && value.endsWith(first)) return value.slice(1, -1);
150
+ return value;
151
+ }
152
+ /** 将超长文本截断到指定长度并追加省略号。 */
153
+ function truncate(text, limit) {
154
+ const codePoints = Array.from(text);
155
+ return codePoints.length <= limit ? text : `${codePoints.slice(0, limit).join("")}…`;
156
+ }
157
+ /** Parse the `key: value` frontmatter block of one agency agent file. */
158
+ function parseFrontmatter(raw) {
159
+ const match = raw.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);
160
+ if (match === null) return void 0;
161
+ const fm = match[1];
162
+ const body = match[2].trim();
163
+ const get = (key) => {
164
+ const m = fm.match(new RegExp(`^${key}\\s*:\\s*(.*)$`, "m"));
165
+ return m === null ? void 0 : unquote(m[1].trim());
166
+ };
167
+ return {
168
+ name: get("name"),
169
+ description: get("description"),
170
+ descriptionEn: get("descriptionEn"),
171
+ emoji: get("emoji"),
172
+ body
173
+ };
174
+ }
175
+ /** Concatenate the text blocks of a subagent output. */
176
+ function textBlocks(blocks) {
177
+ return blocks.filter((block) => block.type === "text").map((block) => block.text).join("");
178
+ }
179
+ /** 校验 root 目录存在且为目录,否则抛出明确错误(避免静默得到空列表)。 */
180
+ async function assertDirectory(root) {
181
+ const info = await stat(root).catch(() => void 0);
182
+ if (info === void 0) throw new Error(formatHost("zh", "error.rootMissing", {
183
+ root,
184
+ env: ROOT_ENV
185
+ }));
186
+ if (!info.isDirectory()) throw new Error(formatHost("zh", "error.rootNotDir", { root }));
187
+ }
188
+ /** 递归遍历目录下的所有 .md 文件,逐个回调其绝对路径与文件名。 */
189
+ async function walkMarkdown(dir, onFile) {
190
+ const entries = await readdir(dir, { withFileTypes: true }).catch((error) => {
191
+ console.warn(`[agency-agents] 跳过无法读取的目录 ${dir}: ${error instanceof Error ? error.message : String(error)}`);
192
+ });
193
+ if (entries === void 0) return;
194
+ entries.sort((a, b) => a.name.localeCompare(b.name));
195
+ for (const entry of entries) {
196
+ const full = join(dir, entry.name);
197
+ if (entry.isDirectory()) await walkMarkdown(full, onFile);
198
+ else if (entry.isFile() && entry.name.endsWith(".md")) await onFile(full, entry.name);
199
+ }
200
+ }
201
+ /** Load every `<division>/**\/*.md` persona file (plus extra sources) into a slug-keyed map. Throws when root is invalid or empty. */
202
+ async function loadCatalog(root, divisions) {
203
+ await assertDirectory(root);
204
+ const sources = [...divisions.map((division) => ({
205
+ dir: division,
206
+ division
207
+ })), ...EXTRA_SOURCES.filter((source) => divisions.includes(source.division))];
208
+ const map = /* @__PURE__ */ new Map();
209
+ for (const source of sources) await walkMarkdown(join(root, source.dir), async (filePath, fileName) => {
210
+ const slug = fileName.slice(0, -3);
211
+ let raw;
212
+ try {
213
+ raw = stripBom(await readFile(filePath, "utf8"));
214
+ } catch (error) {
215
+ console.warn(`[agency-agents] 跳过无法读取的智能体文件 ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
216
+ return;
217
+ }
218
+ const parsed = parseFrontmatter(raw);
219
+ if (parsed === void 0 || parsed.name === void 0 || parsed.description === void 0) return;
220
+ if (map.has(slug)) console.warn(`[agency-agents] 智能体 slug 冲突,后加载者覆盖:${slug}`);
221
+ map.set(slug, {
222
+ slug,
223
+ name: ZH_NAME[slug] ?? parsed.name,
224
+ nameEn: parsed.name,
225
+ description: parsed.description,
226
+ descriptionEn: parsed.descriptionEn ?? "",
227
+ emoji: parsed.emoji ?? "",
228
+ division: source.division,
229
+ divisionZh: ZH_DIVISION[source.division] ?? source.division,
230
+ persona: sanitize(parsed.body)
231
+ });
232
+ });
233
+ if (map.size === 0) throw new Error(formatHost("zh", "error.catalogEmpty", { root }));
234
+ return map;
235
+ }
236
+ /** 根据 slug 或名称解析智能体;任意多命中都必须要求调用者提供更精确的 slug。 */
237
+ function resolveExpert(experts, query, locale = "zh") {
238
+ const q = String(query).trim().toLowerCase();
239
+ if (q.length === 0) throw new Error(formatHost(locale, "error.expertRequired"));
240
+ const bySlug = experts.find((expert) => expert.slug.toLowerCase() === q);
241
+ if (bySlug !== void 0) return bySlug;
242
+ const exactNames = experts.filter((expert) => expert.name.toLowerCase() === q || expert.nameEn?.toLowerCase() === q);
243
+ if (exactNames.length === 1) return exactNames[0];
244
+ const matches = exactNames.length > 1 ? exactNames : experts.filter((expert) => expert.slug.toLowerCase().includes(q) || expert.name.toLowerCase().includes(q) || expert.nameEn?.toLowerCase().includes(q));
245
+ if (matches.length === 1) return matches[0];
246
+ if (matches.length > 1) {
247
+ const preview = matches.slice(0, 12).map((expert) => expert.slug).join(", ");
248
+ throw new Error(formatHost(locale, "error.expertAmbiguous", {
249
+ query: String(query),
250
+ candidates: preview
251
+ }));
252
+ }
253
+ throw new Error(formatHost(locale, "error.expertMissing", { query: String(query) }));
254
+ }
255
+ function apply(ctx, config) {
256
+ const maxDepth = normalizeMaxDepth(config.maxDepth);
257
+ let enabledSource = () => [];
258
+ installSettingsSection(ctx, settingsNamespace("agency-agents"), z.object({ enabled: z.array(z.string()) }), { enabled: [] }, {
259
+ setSource: (current) => {
260
+ enabledSource = () => current().enabled;
261
+ },
262
+ onChange: () => {}
263
+ });
264
+ const enabledSet = () => new Set(enabledSource());
265
+ const activeLocale = () => readHostLocale(ctx);
266
+ let experts = /* @__PURE__ */ new Map();
267
+ let loadError = null;
268
+ const ready = loadCatalog(resolveCatalogRoot(config.root), config.divisions).then((map) => {
269
+ experts = map;
270
+ }).catch((error) => {
271
+ loadError = String(error);
272
+ });
273
+ async function ensureReady() {
274
+ await ready;
275
+ if (loadError !== null) throw new Error(formatHost(activeLocale(), "error.catalogLoad", { detail: loadError }));
276
+ }
277
+ function groupByDivision(withExperts, locale) {
278
+ const groups = /* @__PURE__ */ new Map();
279
+ const enabled = enabledSet();
280
+ for (const expert of experts.values()) {
281
+ if (!enabled.has(expert.slug)) continue;
282
+ const list = groups.get(expert.division) ?? [];
283
+ list.push(expert);
284
+ groups.set(expert.division, list);
285
+ }
286
+ return [...groups.entries()].sort(([a], [b]) => a.localeCompare(b)).map(([division, list]) => ({
287
+ division,
288
+ count: list.length,
289
+ ...withExperts ? { experts: list.slice().sort((a, b) => a.slug.localeCompare(b.slug)).map((e) => ({
290
+ slug: e.slug,
291
+ name: localizedExpertName(e, locale),
292
+ emoji: e.emoji,
293
+ description: truncate(localizedExpertDescription(e, locale), DESCRIPTION_LIMIT)
294
+ })) } : {}
295
+ }));
296
+ }
297
+ ctx.tools.register(defineTool({
298
+ name: "list_experts",
299
+ description: "List the available Agency domain experts grouped by division. Without a division filter it returns only division names and counts (compact); pass a division to expand it with expert names, slugs, and descriptions. Call this before summon_expert when you need an exact expert slug.",
300
+ parameters: { division: {
301
+ type: "string",
302
+ description: "Optional division key to filter (e.g. engineering, marketing, security, finance, design)."
303
+ } },
304
+ output: {
305
+ schema: {
306
+ type: "object",
307
+ additionalProperties: false,
308
+ properties: {
309
+ divisions: {
310
+ type: "array",
311
+ required: true,
312
+ items: { type: "json" }
313
+ },
314
+ total: {
315
+ type: "number",
316
+ required: true
317
+ }
318
+ }
319
+ },
320
+ render: (args, value) => {
321
+ const divisions = value.divisions;
322
+ return [{
323
+ type: "text",
324
+ text: renderExpertList(activeLocale(), args, {
325
+ divisions,
326
+ total: value.total
327
+ })
328
+ }];
329
+ }
330
+ },
331
+ async execute(args) {
332
+ await ensureReady();
333
+ const query = args.division === void 0 ? "" : String(args.division).trim();
334
+ const hasFilter = query !== "";
335
+ const groups = groupByDivision(hasFilter, activeLocale());
336
+ if (hasFilter) {
337
+ const filtered = groups.filter((g) => matchDivision(query, g.division));
338
+ return {
339
+ divisions: filtered,
340
+ total: filtered.reduce((n, g) => n + g.count, 0)
341
+ };
342
+ }
343
+ return {
344
+ divisions: groups,
345
+ total: experts.size
346
+ };
347
+ }
348
+ }));
349
+ async function runExpert(query, task, exec) {
350
+ const locale = activeLocale();
351
+ const taskText = normalizeTask(task, locale);
352
+ if (exec.agent === void 0) throw new Error(formatHost(locale, "error.summonRequiresAgent"));
353
+ const provider = ctx.subagents.getProvider(config.provider);
354
+ if (provider === void 0) throw new Error(formatHost(locale, "error.providerMissing", { provider: config.provider }));
355
+ if (!provider.capabilities.persona) throw new Error(formatHost(locale, "error.providerNoPersona", { provider: config.provider }));
356
+ if (!provider.capabilities.toolFilter) throw new Error(formatHost(locale, "error.providerNoToolFilter", { provider: config.provider }));
357
+ if (maxDepth !== void 0 && !provider.capabilities.depthLimit) throw new Error(formatHost(locale, "error.providerNoMaxDepth", { provider: config.provider }));
358
+ const expert = resolveExpert([...experts.values()], query, locale);
359
+ if (!enabledSet().has(expert.slug)) throw new Error(formatHost(locale, "error.expertDisabled", { name: localizedExpertName(expert, locale) }));
360
+ const run = await ctx.subagents.start(config.provider, {
361
+ label: `expert:${expert.slug}`,
362
+ prompt: [{
363
+ type: "text",
364
+ text: taskText
365
+ }],
366
+ parent: exec.agent,
367
+ persona: expert.persona,
368
+ toolFilter: { deny: [
369
+ "summon_expert",
370
+ "summon_experts",
371
+ "list_experts"
372
+ ] },
373
+ ...maxDepth === void 0 ? {} : { maxDepth },
374
+ signal: exec.signal
375
+ });
376
+ try {
377
+ const result = await run.result;
378
+ const text = textBlocks(result.output);
379
+ if (result.stopReason !== "completed") {
380
+ const detail = text.length > 0 ? formatHost(locale, "error.partialOutput", { text }) : "";
381
+ throw new Error(formatHost(locale, "error.expertRun", {
382
+ reason: result.stopReason,
383
+ detail
384
+ }));
385
+ }
386
+ return {
387
+ expert: expert.slug,
388
+ answer: text
389
+ };
390
+ } finally {
391
+ await run.dispose();
392
+ }
393
+ }
394
+ ctx.tools.register(defineTool({
395
+ name: "summon_expert",
396
+ description: "Summon a domain expert from The Agency roster to complete a task: a specialist subagent runs with that expert's full persona and returns its result. Use for tasks that clearly belong to a specialist domain (frontend work, security review, marketing copy, etc.). This call waits for the expert's result. Call list_experts first if you do not know the exact expert slug.",
397
+ parameters: {
398
+ expert: {
399
+ type: "string",
400
+ required: true,
401
+ description: "Expert slug or name to summon (e.g. engineering-frontend-developer, or \"Frontend Developer\")."
402
+ },
403
+ task: {
404
+ type: "string",
405
+ required: true,
406
+ description: "The complete, self-contained task to give the expert. Include all necessary context; fork providers may additionally inherit completed conversation turns."
407
+ }
408
+ },
409
+ output: {
410
+ schema: {
411
+ type: "object",
412
+ additionalProperties: false,
413
+ properties: {
414
+ expert: {
415
+ type: "string",
416
+ required: true
417
+ },
418
+ answer: {
419
+ type: "string",
420
+ required: true
421
+ }
422
+ }
423
+ },
424
+ render: (_args, value) => [{
425
+ type: "text",
426
+ text: value.answer
427
+ }]
428
+ },
429
+ async execute(args, exec) {
430
+ await ensureReady();
431
+ return runExpert(args.expert, args.task, exec);
432
+ }
433
+ }));
434
+ ctx.tools.register(defineTool({
435
+ name: "summon_experts",
436
+ description: "Summon multiple domain experts in parallel to work on one mission. Each expert gets its own task/role and runs as a specialist subagent with its own persona. At most 8 experts run with concurrency 4; if some fail, successful answers are still returned. Use this to assemble a specialist team.",
437
+ parameters: { experts: {
438
+ type: "array",
439
+ required: true,
440
+ description: "The experts to summon, each with an expert slug/name and its own task.",
441
+ items: {
442
+ type: "object",
443
+ additionalProperties: false,
444
+ properties: {
445
+ expert: {
446
+ type: "string",
447
+ required: true,
448
+ description: "Expert slug or name (e.g. engineering-frontend-developer, or \"Frontend Developer\")."
449
+ },
450
+ task: {
451
+ type: "string",
452
+ required: true,
453
+ description: "The complete, self-contained task/role for this expert."
454
+ }
455
+ }
456
+ }
457
+ } },
458
+ output: {
459
+ schema: {
460
+ type: "object",
461
+ additionalProperties: false,
462
+ properties: { results: {
463
+ type: "array",
464
+ required: true,
465
+ items: { type: "json" }
466
+ } }
467
+ },
468
+ render: (_args, value) => {
469
+ const results = value.results;
470
+ return [{
471
+ type: "text",
472
+ text: renderSummonResults(activeLocale(), results)
473
+ }];
474
+ }
475
+ },
476
+ async execute(args, exec) {
477
+ await ensureReady();
478
+ const locale = activeLocale();
479
+ if (exec.agent === void 0) throw new Error(formatHost(locale, "error.summonManyRequiresAgent"));
480
+ return { results: (await mapPool(validateSummonSpecs(args.experts, locale), 4, async (spec) => {
481
+ try {
482
+ return toSummonItemResult(spec.expert, await runExpert(spec.expert, spec.task, exec));
483
+ } catch (error) {
484
+ return toSummonItemResult(spec.expert, error instanceof Error ? error : new Error(String(error)));
485
+ }
486
+ })).map((item) => ({
487
+ expert: item.expert,
488
+ ok: item.ok,
489
+ answer: item.answer,
490
+ ...item.error === void 0 ? {} : { error: item.error }
491
+ })) };
492
+ }
493
+ }));
494
+ ctx.systemPrompt.section({
495
+ name: "agency:experts",
496
+ order: 117,
497
+ text: (context) => {
498
+ if (context.agent?.session?.header?.parentSession !== void 0) return "";
499
+ return "## Agency expert mode\nThe parent session has a roster of domain experts from The Agency (specialists across 17 divisions, individually enable/disable; ALL are disabled by default, and the user enables some in the Agency settings tab). In the parent session, call `list_experts()` to see enabled division names and counts, then call `list_experts(division)` to browse enabled experts and find an exact slug before using `summon_expert(expert, task)` or `summon_experts` for a small parallel team (at most 8; partial results if some fail). A disabled expert cannot be summoned.";
500
+ }
501
+ });
502
+ }
503
+ //#endregion
504
+ export { Config, SUMMON_EXPERTS_CONCURRENCY, SUMMON_EXPERTS_MAX, SUMMON_TASK_MAX_CHARS, ZH_NAME, apply, inject, loadCatalog, mapPool, name, parseFrontmatter, resolveCatalogRoot, resolveExpert, sanitize, stripBom, toSummonItemResult, truncate, unquote, validateSummonSpecs };
@@ -0,0 +1,20 @@
1
+ import { TypertRemoteService } from "@deepseek-ai/dsh-typert-protocol";
2
+ import { Context } from "@deepseek-ai/cordis";
3
+ //#region src/remote.d.ts
4
+ /** 供客户端读取和保存已启用专家的顶层 Host Remote 服务。 */
5
+ declare class AgencyAgentsRemote extends TypertRemoteService {
6
+ static inject: string[];
7
+ constructor(ctx: Context);
8
+ /** 读取当前启用的专家 slug 列表。 */
9
+ getEnabled(): {
10
+ enabled: string[];
11
+ revision: number;
12
+ };
13
+ /** 整体替换启用的专家 slug 列表。 */
14
+ setEnabled(enabled: string[], expectedRevision: number): Promise<{
15
+ enabled: string[];
16
+ revision: number;
17
+ }>;
18
+ }
19
+ //#endregion
20
+ export { AgencyAgentsRemote as default };