@michengai/dsh-agency-agents 1.0.17 → 1.0.18

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 CHANGED
@@ -6,6 +6,13 @@ This file records features and upgrade boundaries. npm and GitHub Releases remai
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ ## 1.0.18 - 2026-10-13
10
+
11
+ - Native team member cards show each expert's localized name on both the current and previous host card layouts. Task titles and owner identifiers stay unchanged.
12
+ - The lead card shows the expert team name when a task title exactly matches that team. If the match is missing or ambiguous, the card stays `lead`.
13
+ - Stopping the parent session now stops subagents started by this plugin instead of waiting for them to finish.
14
+ - The plugin supports the host's newer subagent start API and still works with the previous API.
15
+
9
16
  ## 1.0.17 - 2026-10-12
10
17
 
11
18
  - Synchronized the latest experts from upstream `agency-agents` and `agency-agents-zh`, expanding the bundled roster to 331 specialists.
@@ -6,6 +6,13 @@
6
6
 
7
7
  ## 未发布
8
8
 
9
+ ## 1.0.18 - 2026-10-13
10
+
11
+ - 原生团队成员卡片会显示专家的本地化名称,并兼容宿主当前和上一版卡片结构。任务标题和 Owner 标识保持原样。
12
+ - lead 卡片会在任务标题与专家团名称精确匹配时显示该团队名。无法匹配或对应多个团队时,仍显示 `lead`。
13
+ - 停止父会话时,本插件启动的子代理会立即结束,不再等到子代理自己跑完。
14
+ - 兼容宿主新的子代理启动接口,同时保留旧接口。
15
+
9
16
  ## 1.0.17 - 2026-10-12
10
17
 
11
18
  - 同步英文原版(agency-agents)与中文版(agency-agents-zh)最新专家库,内置专家扩充至 331 位。
package/README.md CHANGED
@@ -69,7 +69,7 @@ Retain `list_experts`, `summon_expert`, and `summon_experts`. Add `list_expert_t
69
69
  - Team configuration lives in the host `agency-agents` settings namespace. Keep drafts on edit conflicts and review the latest configuration. Disabling or deleting teams does not disable experts or delete historical conversations.
70
70
  - Experts cannot summon further experts or automatically add analysis rounds. Cancellation prevents queued starts; completed results and failures are reported separately.
71
71
 
72
- > This README describes version 1.0.17; npm and GitHub Releases determine publication status. See the [changelog](CHANGELOG.md) for the full changes and [release notes](RELEASE_NOTES.md) for the bilingual release description. Upgrades retain expert settings. Back up settings before downgrading because older versions do not support teams.
72
+ > This README describes version 1.0.18; npm and GitHub Releases determine publication status. See the [changelog](CHANGELOG.md) for the full changes and [release notes](RELEASE_NOTES.md) for the bilingual release description. Upgrades retain expert settings. Back up settings before downgrading because older versions do not support teams.
73
73
  ## Screenshots
74
74
 
75
75
  The screenshots below show the 1.0.0 interface in Chinese. Experts and expert teams share the same settings page.
package/README.zh-CN.md CHANGED
@@ -69,7 +69,7 @@
69
69
  - 团队配置保存在宿主 `agency-agents` 命名空间。编辑冲突保留草稿并提示核对最新配置;停用或删除团队不会停用专家,也不会删除历史会话。
70
70
  - 专家不得继续召唤专家或自动追加分析轮次。取消会停止未启动任务;已有结果和失败原因分别报告。
71
71
 
72
- > 本 README 描述 1.0.17,正式发行以 npm 和 GitHub Releases 为准。完整改动见[更新日志](CHANGELOG.zh-CN.md),双语版本说明见[发行说明](RELEASE_NOTES.md)。升级保留已有专家配置;回退旧版前先备份设置,旧版不具备团队功能。
72
+ > 本 README 描述 1.0.18,正式发行以 npm 和 GitHub Releases 为准。完整改动见[更新日志](CHANGELOG.zh-CN.md),双语版本说明见[发行说明](RELEASE_NOTES.md)。升级保留已有专家配置;回退旧版前先备份设置,旧版不具备团队功能。
73
73
  ## 界面预览
74
74
 
75
75
  以下为 1.0.0 中文界面截图,专家与专家团共用同一个设置页面。
package/RELEASE_NOTES.md CHANGED
@@ -1,15 +1,17 @@
1
1
  ## 中文说明
2
2
 
3
- - 同步英文原版(agency-agents)与中文版(agency-agents-zh)最新专家库,内置专家扩充至 331 位。
4
- - 新增 9 位英文原版专家并提供中文翻译:ATS 简历校验架构师、国内网络架构工程师、PDF 引擎架构师、平台工程师、ServiceNow 平台导师、通用文档编译器架构师、开发者社区建设专家、开发者体验工程师、专注音乐架构师。
5
- - 新增 1 位中文版特有专家并补充纯英文定义:搜索增长编排器。
3
+ - 原生团队成员卡片会显示专家的本地化名称,并兼容宿主当前和上一版卡片结构。任务标题和 Owner 标识保持原样。
4
+ - lead 卡片会在任务标题与专家团名称精确匹配时显示该团队名。无法匹配或对应多个团队时,仍显示 `lead`。
5
+ - 停止父会话时,本插件启动的子代理会立即结束,不再等到子代理自己跑完。
6
+ - 兼容宿主新的子代理启动接口,同时保留旧接口。
6
7
 
7
8
  ---
8
9
 
9
10
  ## English
10
11
 
11
- - Synchronized the latest experts from upstream `agency-agents` and `agency-agents-zh`, expanding the bundled roster to 331 specialists.
12
- - Added 9 upstream experts with complete Chinese translations: ATS Validator Architect, China Network Engineer, PDF Engine Architect, Platform Engineer, ServiceNow Developer & Mentor, Universal Document Compiler, Developer Community Builder, DX Engineer, and Focus Music Architect.
13
- - Added 1 Chinese edition specialist with complete English persona: Search Growth Orchestrator.
12
+ - Native team member cards show each expert's localized name on both the current and previous host card layouts. Task titles and owner identifiers stay unchanged.
13
+ - The lead card shows the expert team name when a task title exactly matches that team. If the match is missing or ambiguous, the card stays `lead`.
14
+ - Stopping the parent session now stops subagents started by this plugin instead of waiting for them to finish.
15
+ - The plugin supports the host's newer subagent start API and still works with the previous API.
14
16
 
15
17
 
package/lib/client.js CHANGED
@@ -429,7 +429,7 @@ Output
429
429
  Provide conclusions, evidence and actionable next steps. Do not invent facts.`},DE={...TE,"discovery.search":`搜索名称、领域或关键词`,"discovery.refine":`仅显示最相关的 8 位专家,请补充关键词缩小范围。`,"discovery.working":`正在处理…`,"discovery.exampleFailed":`专家已选择,但示例未能填入,请直接输入任务。`,"discovery.conflict":`名称冲突`,"discovery.enableSelect":`启用并选择`,"discovery.noResults":`没有匹配的专家,请尝试其他关键词。`,"discovery.empty":`暂无已启用专家,输入关键词查找。`,"discovery.enabledInsertFailed":`专家已启用,但未能插入标签,请重试选择。`,"settings.nav":`专家`,"settings.title":`专家`,"settings.loading":`正在加载专家…`,"settings.viewProject":`GitHub`,"settings.feedback":`问题反馈`,"settings.enabled":`已启用`,"settings.disabled":`已停用`,"settings.filter.source":`来源`,"settings.filter.category":`分类`,"settings.filter.status":`状态`,"settings.filter.allStatuses":`全部状态`,"settings.filter.allSources":`全部来源`,"settings.filter.allCategories":`全部分类`,"settings.search":`搜索`,"settings.search.placeholder":`搜索专家、职责或领域`,"settings.search.clear":`清除搜索`,"settings.viewPrompt":`查看`,"settings.copyPrompt":`复制`,"settings.viewPromptTitle":`查看提示词`,"settings.copyPromptTitle":`复制提示词`,"settings.copySuccess":`已复制`,"settings.promptTitle":`{name} 的提示词`,"settings.promptClose":`关闭`,"error.promptCopy":`无法复制提示词,请检查浏览器剪贴板权限。`,"settings.empty":`没有匹配的专家。试试其他关键词,或切换到「{all}」。`,"settings.empty.reset":`清除筛选`,"error.conflict":`配置已被其他窗口修改。`,"error.conflict.refreshed":`配置已被其他窗口修改,已为您刷新。`,"error.conflict.refreshFailed":`配置已被其他窗口修改,但刷新失败,请手动刷新。`,"error.insertFailed":`未能插入专家标签,请重试。`,"btn.refresh":`刷新`,"summary.total.one":`位专家`,"summary.total.other":`位专家`,"summary.enabledPrefix":`已启用`,"button.title":`召唤专家`,"division.academic":gv.academic,"division.company":gv.company,"division.design":gv.design,"division.engineering":gv.engineering,"division.finance":gv.finance,"division.game-development":gv[`game-development`],"division.gis":gv.gis,"division.healthcare":gv.healthcare,"division.hr":gv.hr,"division.legal":gv.legal,"division.marketing":gv.marketing,"division.paid-media":gv[`paid-media`],"division.product":gv.product,"division.project-management":gv[`project-management`],"division.research":gv.research,"division.sales":gv.sales,"division.security":gv.security,"division.spatial-computing":gv[`spatial-computing`],"division.specialized":gv.specialized,"division.support":gv.support,"division.supply-chain":gv[`supply-chain`],"division.testing":gv.testing},OE={...EE,"discovery.search":`Search names, fields or keywords`,"discovery.refine":`Showing the 8 most relevant experts. Add keywords to narrow the results.`,"discovery.working":`Working…`,"discovery.exampleFailed":`The expert is selected, but the example could not be inserted. Please enter your task.`,"discovery.conflict":`Name conflict`,"discovery.enableSelect":`Enable and select`,"discovery.noResults":`No matching experts. Try a different keyword.`,"discovery.empty":`No enabled experts yet. Type a keyword to find one.`,"discovery.enabledInsertFailed":`The expert is enabled, but its reference could not be inserted. Try selecting it again.`,"settings.nav":`Experts`,"settings.title":`Experts`,"settings.loading":`Loading experts…`,"settings.viewProject":`GitHub`,"settings.feedback":`Issues`,"settings.enabled":`Enabled`,"settings.disabled":`Disabled`,"settings.filter.source":`Source`,"settings.filter.category":`Category`,"settings.filter.status":`Status`,"settings.filter.allStatuses":`All statuses`,"settings.filter.allSources":`All sources`,"settings.filter.allCategories":`All categories`,"settings.search":`Search`,"settings.search.placeholder":`Search experts, roles, or domains`,"settings.search.clear":`Clear search`,"settings.viewPrompt":`View`,"settings.copyPrompt":`Copy`,"settings.viewPromptTitle":`View prompt`,"settings.copyPromptTitle":`Copy prompt`,"settings.copySuccess":`Copied`,"settings.promptTitle":`Prompt for {name}`,"settings.promptClose":`Close`,"error.promptCopy":`Could not copy the prompt. Check browser clipboard permissions.`,"settings.empty":`No matching experts. Try another keyword, or switch to {all}.`,"settings.empty.reset":`Clear filters`,"error.conflict":`Settings were changed in another window.`,"error.conflict.refreshed":`Settings were changed in another window and have been refreshed.`,"error.conflict.refreshFailed":`Settings were changed in another window, but refresh failed. Please refresh manually.`,"error.insertFailed":`The expert reference could not be inserted. Please try again.`,"btn.refresh":`Refresh`,"summary.total.one":`expert`,"summary.total.other":`experts`,"summary.enabledPrefix":`Enabled`,"button.title":`Summon expert`,"division.academic":_v.academic,"division.company":_v.company,"division.design":_v.design,"division.engineering":_v.engineering,"division.finance":_v.finance,"division.game-development":_v[`game-development`],"division.gis":_v.gis,"division.healthcare":_v.healthcare,"division.hr":_v.hr,"division.legal":_v.legal,"division.marketing":_v.marketing,"division.paid-media":_v[`paid-media`],"division.product":_v.product,"division.project-management":_v[`project-management`],"division.research":_v.research,"division.sales":_v.sales,"division.security":_v.security,"division.spatial-computing":_v[`spatial-computing`],"division.specialized":_v.specialized,"division.support":_v.support,"division.supply-chain":_v[`supply-chain`],"division.testing":_v.testing},kE=`🧩`,AE=/^custom-[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/u,jE=new Intl.Segmenter(void 0,{granularity:`grapheme`});function ME(e){return e.length<=32&&[...jE.segment(e)].length===1&&/\p{Extended_Pictographic}|\p{Regional_Indicator}|\p{Emoji_Presentation}|[0-9#*]\uFE0F?\u20E3/u.test(e)}let NE=aw().trim().min(1).max(40).refine(e=>!/[@\r\n\u0000-\u001f\u007f]/u.test(e)),PE=zw({slug:aw().regex(AE).optional(),name:NE,description:aw().trim().min(1).max(160),division:aw().regex(/^[a-z][a-z0-9-]{0,63}$/u),emoji:aw().default(kE).transform(e=>{let t=e.trim();return t!==``&&ME(t)?t:kE}),avatar:Dw().int().min(0).max(35).default(0),prompt:aw().trim().min(1).max(2e4)}).strict(),FE=PE.extend({slug:aw().regex(AE),deleted:jw().optional(),wasEnabled:jw().optional()}),IE=zw({experts:Lw(zw({slug:aw(),name:aw(),nameEn:aw(),description:aw(),descriptionEn:aw(),emoji:aw(),division:aw(),divisionZh:aw(),conflict:jw().optional(),custom:jw().default(!1),avatar:Dw().int().min(0).max(35).optional()})),enabled:Lw(aw()),revision:Dw().int().min(0)}),LE=FE.omit({deleted:!0,wasEnabled:!0}),RE={invalid:[`请检查名称、简介、分类和提示词。`,`Check the name, description, category and prompt.`],duplicate:[`专家名称已被使用,请换一个名称。`,`This expert name is already in use. Choose another name.`],unavailable:[`所选专家不存在、已删除或名称冲突,请刷新后重新选择。`,`An expert is missing, deleted or has a name conflict. Refresh and choose again.`],missing:[`自定义专家不存在或已删除,请刷新后重试。`,`The custom expert is missing or deleted. Refresh and try again.`],readonly:[`内置或外部目录专家不可直接编辑,请复制为自定义专家。`,`Built-in and external experts are read-only. Create a custom copy instead.`],division:[`请选择有效的专家分类。`,`Choose a valid expert category.`],limit:[`自定义专家数量已达到上限(200 位),请先删除不再使用的专家。`,`The limit of 200 custom experts has been reached. Delete an unused expert first.`],conflict:[`专家配置已被其他窗口修改,请刷新后重试。`,`Expert settings were changed in another window. Refresh and try again.`]};function zE(e,t){return Error(RE[e][+(t===`en`)])}let BE=Lw(aw()),VE=zw({enabled:BE,revision:Dw().int().min(0)}),HE=zw({prompt:aw()});function UE(e,t){return{mode:`strict`,typeSymbol:e,create:()=>t,schema:t}}function WE(e,t,n){return{name:e,wire:e,source:`json`,codec:UE(t,n)}}function GE(e,t){return{id:`@michengai/dsh-agency-agents#agencyAgents/${e}`,service:`agencyAgents`,namespace:`agencyAgents`,method:e,invocation:{kind:`direct`},parameters:t,result:UE(`AgencyAgentsCatalog`,IE)}}let KE=WE(`expectedRevision`,`number`,Dw().int().min(0)),qE=WE(`slug`,`string`,aw().regex(AE)),JE={package:`@michengai/dsh-agency-agents`,descriptors:[...[{method:`getTeams`,parameters:[]},{method:`saveTeam`,parameters:[WE(`team`,`ExpertTeamInput`,OT),WE(`enabled`,`boolean`,jw()),KE]},{method:`setTeamEnabled`,parameters:[WE(`id`,`string`,aw().min(1).max(128)),WE(`enabled`,`boolean`,jw()),KE]},{method:`deleteTeam`,parameters:[WE(`id`,`string`,aw().min(1).max(128)),KE]}].map(({method:e,parameters:t})=>({id:`@michengai/dsh-agency-agents#agencyAgents/${e}`,service:`agencyAgents`,namespace:`agencyAgents`,method:e,invocation:{kind:`direct`},parameters:t,result:UE(`AgencyTeamsSnapshot`,jT)})),GE(`getCatalog`,[]),GE(`saveCustomExpert`,[WE(`expert`,`CustomExpertInput`,PE),WE(`enabled`,`boolean`,jw()),KE]),GE(`deleteCustomExpert`,[qE,KE]),{id:`@michengai/dsh-agency-agents#agencyAgents/getCustomExpert`,service:`agencyAgents`,namespace:`agencyAgents`,method:`getCustomExpert`,invocation:{kind:`direct`},parameters:[qE],result:UE(`CustomExpertInput`,LE)},{id:`@michengai/dsh-agency-agents#agencyAgents/getEnabled`,service:`agencyAgents`,namespace:`agencyAgents`,method:`getEnabled`,invocation:{kind:`direct`},parameters:[],result:UE(`AgencyAgentsEnabledState`,VE)},{id:`@michengai/dsh-agency-agents#agencyAgents/setEnabled`,service:`agencyAgents`,namespace:`agencyAgents`,method:`setEnabled`,invocation:{kind:`direct`},parameters:[WE(`enabled`,`string[]`,BE),WE(`expectedRevision`,`number`,Dw().int().min(0))],result:UE(`AgencyAgentsEnabledState`,VE)},{id:`@michengai/dsh-agency-agents#agencyAgents/getPrompt`,service:`agencyAgents`,namespace:`agencyAgents`,method:`getPrompt`,invocation:{kind:`direct`},parameters:[WE(`slug`,`string`,aw().min(1).max(128)),WE(`division`,`string`,aw().min(1).max(64))],result:UE(`AgencyAgentsPrompt`,HE)}]},YE=`michengai-plugin-update-ui`,XE={check:`检查更新`,update:`更新`,close:`关闭`,recheck:`重新检查`,auto:`自动更新`,updating:`正在更新…`,copy:`复制命令`,copied:`已复制`,copyFailed:`复制失败`,checking:`正在检查更新…`,latest:`已是最新版本`,found:`发现新版本`,failed:`检查更新失败,请稍后重试。`,current:`运行版本`,latestLabel:`最新版本`,profile:`目标 profile`,unknown:`未知`,manual:`手工更新`,manualHint:`自动更新失败时,可在当前 DSH 终端执行以下命令,完成后重启 DSH Web。`,manualHintDesktop:`自动更新失败时,请先完全退出 DSH Desktop,再用 Desktop 自带的 dsh 执行以下命令。普通 dsh 会拒绝 desktop profile。`,intro:`仅检查并更新当前插件,不会联动安装其他插件。`,restart:`更新完成,请重启 DSH Web。`,restartDesktop:`更新完成,请完全退出并重新打开 DSH Desktop。`,restarting:`更新完成,正在重启 DSH Desktop…`,unavailable:`当前环境不支持自动更新,请使用手工更新命令。`},ZE={check:`Check for updates`,update:`Update`,close:`Close`,recheck:`Check again`,auto:`Update automatically`,updating:`Updating…`,copy:`Copy command`,copied:`Copied`,copyFailed:`Copy failed`,checking:`Checking for updates…`,latest:`You are up to date`,found:`New version available`,failed:`Could not check for updates. Try again later.`,current:`Running version`,latestLabel:`Latest version`,profile:`Target profile`,unknown:`Unknown`,manual:`Manual update`,manualHint:`If automatic update fails, run this command in the current DSH terminal, then restart DSH Web.`,manualHintDesktop:`If automatic update fails, fully quit DSH Desktop, then run this command with Desktop's own dsh. A regular dsh rejects the desktop profile.`,intro:`Only this plugin is checked and updated. Other plugins are not changed.`,restart:`Update complete. Restart DSH Web.`,restartDesktop:`Update complete. Fully quit and reopen DSH Desktop.`,restarting:`Update complete. Restarting DSH Desktop…`,unavailable:`Automatic update is unavailable. Use the manual command.`};function QE(e){let t=p.default.useRef(null);return p.default.useLayoutEffect(()=>{t.current?.replaceChildren(e.node)},[e.node]),p.default.createElement(`span`,{ref:t,className:`mpi-icon`,"aria-hidden":!0})}function $E(){let e=document.documentElement.lang.toLowerCase(),t=document.querySelector(`[role="dialog"]`)?.textContent??``;return e.startsWith(`en`)||t.includes(`Settings`)&&!t.includes(`设置`)?ZE:XE}function eD(){if(document.getElementById(YE)!==null)return;let e=document.createElement(`style`);e.id=YE,e.textContent=`
430
430
  .mpi-version{margin-left:8px;color:var(--dsw-alias-label-tertiary);font-family:inherit;font-size:12px;font-weight:500;line-height:18px;letter-spacing:0;white-space:nowrap;vertical-align:baseline}.mpi-check-host{display:inline-flex;align-items:center}.mpi-icon{display:inline-flex;flex:0 0 auto;width:16px;height:16px;align-items:center;justify-content:center;pointer-events:none}.mpi-icon svg{display:block;width:16px;height:16px}
431
431
  .mpi-intro{margin:0 0 16px;color:var(--dsw-alias-label-secondary);font-size:13px;line-height:20px}.mpi-meta{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:8px 18px;margin:0 0 16px;font-size:12px;line-height:18px}.mpi-meta dt{color:var(--dsw-alias-label-secondary)}.mpi-meta dd{margin:0}.mpi-mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.mpi-latest{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 10px}.mpi-status{font-size:13px;font-weight:600;line-height:18px}.mpi-status[data-kind=error]{color:var(--dsw-alias-state-error-primary)}.mpi-status[data-kind=success]{color:var(--dsw-alias-state-success-primary)}.mpi-status[data-kind=update]{color:#e8b15a !important}.mpi-manual{border-top:1px solid var(--dsw-alias-border-l2);padding-top:16px}.mpi-manual h3{margin:0 0 6px;font-size:14px;line-height:20px}.mpi-manual p{margin:0 0 10px;color:var(--dsw-alias-label-secondary);font-size:12px;line-height:18px}.mpi-command{display:flex;align-items:flex-start;gap:8px;border:1px solid var(--dsw-alias-border-l2);border-radius:7px;padding:10px;background:var(--dsw-alias-bg-layer-3,var(--dsw-specific-menu-item-hover))}.mpi-command code{min-width:0;flex:1;overflow:visible;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:12px;line-height:18px;white-space:pre-wrap;overflow-wrap:anywhere}@media(max-width:560px){.mpi-meta{grid-template-columns:1fr;gap:2px}.mpi-meta dd{margin-bottom:6px}}
432
- `,(document.head??document.documentElement).append(e)}function tD(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.packageName==`string`&&typeof t.currentVersion==`string`&&typeof t.updateAvailable==`boolean`&&typeof t.profileName==`string`&&typeof t.canAutoUpdate==`boolean`&&typeof t.latestCheckFailed==`boolean`&&(t.latestVersion===void 0||typeof t.latestVersion==`string`)}async function nD(e,t,n){let r=n===void 0?{}:{signal:n},i=await fetch(e,t===`GET`?{cache:`no-store`,...r}:{method:`POST`,headers:{"content-type":`application/json`,"x-michengai-plugin-update":`1`},body:`{}`,...r}),a=await i.json();if(!i.ok||!tD(a))throw Error(typeof a.error==`string`?a.error:$E().failed);return a}function rD(e,t,n){return`dsh plugin${e.trim()===``?``:` --profile ${e.trim()}`} add ${t}@${n} --registry=https://registry.npmjs.org/`}function iD(e){let t=$E(),[n,r]=p.default.useState(e.initial),[i,a]=p.default.useState(e.initial===void 0?t.checking:``),[o,s]=p.default.useState(``),[c,l]=p.default.useState(!1),[u,d]=p.default.useState(t.copy),f=e=>{if(e===void 0){a(t.checking),s(``);return}if(e.latestCheckFailed){a(t.failed),s(`error`);return}if(!e.canAutoUpdate&&e.updateAvailable){a(t.unavailable),s(`update`);return}if(e.updateAvailable){a(`${t.found}: v${e.latestVersion??t.unknown}`),s(`update`);return}a(t.latest),s(`success`)},m=async()=>{if(!c){l(!0),a(t.checking),s(``);try{let t=await e.refresh();r(t),e.onPayload(t),f(t)}catch(e){a(e instanceof Error?e.message:t.failed),s(`error`)}finally{l(!1)}}},h=async()=>{if(!c){l(!0),a(t.updating),s(``);try{let n=await e.update();r(n),e.onPayload(n),f(n),a(n.autoReload===!0?t.restarting:n.profileName===`desktop`?t.restartDesktop:t.restart),s(`success`)}catch(e){a(e instanceof Error?e.message:t.failed),s(`error`)}finally{l(!1)}}};p.default.useEffect(()=>{m()},[]),fv(!0,e.onClose);let g=rD(n?.profileName??``,e.packageName,n?.latestVersion??`latest`),_=n===void 0?t.unknown:`v${n.currentVersion}`,v=n?.latestVersion===void 0?t.unknown:`v${n.latestVersion}`;return p.default.createElement(ev,{locale:ov()},p.default.createElement(W_,{open:!0,keyboard:!1,className:`mpi-dialog`,width:680,zIndex:1200,title:`${e.name} ${t.update}`,onCancel:e.onClose,footer:[p.default.createElement(V_,{key:`check`,disabled:c,onClick:()=>{m()}},t.recheck),p.default.createElement(V_,{key:`update`,type:`primary`,disabled:c||n?.canAutoUpdate!==!0||n.updateAvailable!==!0,loading:c,onClick:()=>{h()}},t.auto)]},p.default.createElement(`p`,{className:`mpi-intro`},t.intro),p.default.createElement(`dl`,{className:`mpi-meta`},p.default.createElement(`dt`,null,t.current),p.default.createElement(`dd`,null,p.default.createElement(`span`,{className:`mpi-mono`},_)),p.default.createElement(`dt`,null,t.latestLabel),p.default.createElement(`dd`,{className:`mpi-latest`},p.default.createElement(`span`,{className:`mpi-mono`},v),p.default.createElement(`span`,{className:`mpi-status`,role:`status`,"data-kind":o,...o===`update`?{style:{color:`#e8b15a`}}:{}},i)),p.default.createElement(`dt`,null,t.profile),p.default.createElement(`dd`,null,p.default.createElement(`span`,{className:`mpi-mono`},n?.profileName??t.unknown))),c?p.default.createElement(G_,{percent:100,showInfo:!1,status:`active`}):null,p.default.createElement(`section`,{className:`mpi-manual`},p.default.createElement(`h3`,null,t.manual),p.default.createElement(`p`,null,n?.profileName===`desktop`?t.manualHintDesktop:t.manualHint),p.default.createElement(`div`,{className:`mpi-command`},p.default.createElement(`code`,null,g),p.default.createElement(V_,{onClick:()=>{navigator.clipboard?.writeText(g).then(()=>{d(t.copied),setTimeout(()=>d(t.copy),1400)}).catch(()=>d(t.copyFailed))}},u)))))}function aD(e){if(typeof document>`u`||document.body===null)return()=>{};eD();let t=new AbortController,n,r,i,a,o,s,c,l=()=>{o?.unmount(),o=void 0,a=void 0,s=void 0},u=()=>{if(o===void 0)return;s??=e.createIcon(`refresh`);let t=s;o.render(p.default.createElement(ev,{locale:ov()},p.default.createElement(V_,{size:`small`,shape:`default`,onClick:g,icon:p.default.createElement(QE,{node:t})},p.default.createElement(`span`,{"data-mpi-label":``},$E().check))))},d=()=>{let t=document.querySelector(e.titleRowSelector);if(t===null)return;let r=t.querySelector(`h1,h2`);if(r!==null&&n!==void 0){let t=r.querySelector(`.mpi-version[data-package="${e.packageName}"]`);t===null&&(t=document.createElement(`span`),t.className=`mpi-version`,t.dataset.package=e.packageName,r.append(t));let i=`v${n.currentVersion}`;t.textContent!==i&&(t.textContent=i)}a!==void 0&&!a.isConnected&&l();let i=t.querySelector(e.linksSelector);if(i===null)return;let s=i.querySelector(`[data-mpi-check="${e.packageName}"]`);if(s!==null){let e=s.querySelector(`[data-mpi-label]`);(e===null||e.textContent!==$E().check)&&u();return}let c=document.createElement(`span`);c.dataset.mpiCheck=e.packageName,c.className=`mpi-check-host`,i.append(c),a=c,o=(0,m.createRoot)(c),u()},f=async()=>(n=await nD(e.endpoint,`GET`,t.signal),d(),n),h=()=>{i?.unmount(),i=void 0,r?.remove(),r=void 0};function g(){h();let a=document.createElement(`div`);a.className=`mpi-dialog-root`,document.body.append(a);let o=(0,m.createRoot)(a);r=a,i=o,o.render(p.default.createElement(iD,{name:av()===`en`?e.enName:e.zhName,packageName:e.packageName,initial:n,refresh:()=>f(),update:()=>nD(e.endpoint,`POST`,t.signal),onPayload:e=>{n=e,d()},onClose:h}))}let _=new MutationObserver(()=>{c===void 0&&(c=window.requestAnimationFrame(()=>{c=void 0,d()}))});return _.observe(document.body,{childList:!0,subtree:!0}),d(),f().catch(()=>{}),()=>{t.abort(),_.disconnect(),h(),l(),c!==void 0&&window.cancelAnimationFrame(c),document.querySelectorAll(`[data-mpi-check="${e.packageName}"],.mpi-version[data-package="${e.packageName}"]`).forEach(e=>e.remove())}}async function oD(e,t,n){let r=await e.getCatalog();if(!r.ok)throw Error(r.error.message);if(t===void 0||!r.value.experts.some(e=>e.slug===t&&e.custom))return{catalog:r.value};let i=await e.getCustomExpert(t);if(!i.ok)throw Error(i.error.message);let a=await e.getCatalog();if(!a.ok)throw Error(a.error.message);if(r.value.revision!==a.value.revision)throw zE(`conflict`,n);return{catalog:a.value,expert:i.value}}function sD(e,t,n){if(n&&e.expert===void 0)throw Error(`No current expert to load`);let{slug:r,...i}=t;return{expert:n?e.expert:e.expert===void 0?i:t,enabled:e.expert?.slug!==void 0&&e.catalog.enabled.includes(e.expert.slug),revision:e.catalog.revision}}let cD=p.default.createElement;function lD(e){let[t,n]=p.default.useState(()=>({...e.expert,name:e.expert?.name??``,description:e.expert?.description??``,division:e.expert?.division??`specialized`,prompt:e.expert?.prompt??``,emoji:e.expert?.emoji||`🧩`,avatar:e.expert?.avatar??0})),[r,i]=p.default.useState(t),[a,o]=p.default.useState(e.revision),[s,c]=p.default.useState(e.enabled),[l,u]=p.default.useState(!1),[d,f]=p.default.useState(null),[m,h]=p.default.useState(!1),g=p.default.useRef(!1),[_,v]=p.default.useState(null),[y,b]=p.default.useState(!1),x=p.default.useRef(null),S=()=>{g.current||(JSON.stringify(r)===JSON.stringify(t)?e.onClose():b(!0))};fv(!0,()=>{y?b(!1):S()});let C=(e,t)=>{i(n=>({...n,[e]:t})),v(null)},w=()=>{g.current||(g.current=!0,h(!0),f(null),oD(e.remote,r.slug,e.locale).then(f).catch(e=>v(e instanceof Error?e.message:String(e))).finally(()=>{g.current=!1,h(!1)}))},T=e=>{if(d===null)return;let t=sD(d,r,e);i({...t.expert,emoji:t.expert.emoji??`🧩`,avatar:t.expert.avatar??0}),d.expert!==void 0&&n(PE.parse(d.expert)),o(t.revision),c(t.enabled),f(null),u(!1),v(null)},E=t=>{if(g.current||l||x.current?.reportValidity()!==!0)return;let n=PE.safeParse(r);if(!n.success){v(e.t(`custom.invalid`));return}g.current=!0,h(!0),v(null),e.remote.saveCustomExpert(n.data,t,a).then(t=>{if(!t.ok)throw Error(t.error.message);e.onSaved(t.value)}).catch(t=>{let n=t instanceof Error?t.message:String(t),r=/changed since it was read|其他窗口|another window/iu.test(n);u(r),r&&f(null),v(r?e.t(`custom.conflict`):n)}).finally(()=>{g.current=!1,h(!1)})},D=(t,n,r=!1)=>cD(`label`,{className:`aag-custom-field`},cD(`span`,null,t,r?cD(`small`,null,e.t(`custom.required`)):null),n);return cD(U_,{open:!0,keyboard:!1,placement:`right`,size:`min(560px, 100vw)`,destroyOnHidden:!0,rootClassName:`aag-editor-drawer`,styles:{body:{padding:0}},title:e.t(r.slug?`custom.edit`:`custom.new`),onClose:()=>{y?b(!1):S()}},cD(`form`,{ref:x,className:`aag-custom-body`,onSubmit:e=>e.preventDefault(),inert:y?``:void 0},cD(`p`,{className:`aag-editor-intro`},e.t(`custom.intro`)),cD(`fieldset`,{className:`aag-custom-avatars`,disabled:m},cD(`legend`,null,e.t(`custom.avatar`)),tE.map((t,n)=>cD(`button`,{key:t,type:`button`,"aria-label":`${e.t(`custom.avatar`)} ${n+1}`,"aria-pressed":r.avatar===n,className:r.avatar===n?`is-selected`:``,onClick:()=>i(e=>({...e,avatar:n}))},cD(`img`,{src:t,width:36,height:36,alt:``,loading:`lazy`})))),D(e.t(`custom.name`),((t,n,i)=>cD(z_,{value:r[t],maxLength:i,required:!0,disabled:m,"aria-label":n,onChange:e=>C(t,e.currentTarget.value),...t===`name`?{placeholder:e.t(`custom.namePlaceholder`)}:{}}))(`name`,e.t(`custom.name`),40),!0),D(e.t(`custom.description`),cD(z_.TextArea,{value:r.description,rows:2,maxLength:160,required:!0,disabled:m,"aria-label":e.t(`custom.description`),placeholder:e.t(`custom.descriptionPlaceholder`),onChange:e=>C(`description`,e.currentTarget.value)}),!0),cD(`div`,{className:`aag-custom-field`},cD(`label`,{htmlFor:`aag-custom-division`},e.t(`custom.division`)),cD(HT,{id:`aag-custom-division`,value:r.division,disabled:m,label:e.t(`custom.division`),onChange:e=>C(`division`,e),options:e.divisions.map(t=>({value:t,label:(e.locale===`en`?_v:gv)[t]??t}))})),cD(`div`,{className:`aag-custom-prompt-head`},cD(`label`,{htmlFor:`aag-custom-prompt`},e.t(`custom.prompt`)),r.prompt===``?cD(V_,{disabled:m,onClick:()=>C(`prompt`,e.t(`custom.templateText`))},e.t(`custom.template`)):null),cD(z_.TextArea,{id:`aag-custom-prompt`,className:`aag-custom-prompt`,value:r.prompt,rows:8,required:!0,maxLength:2e4,disabled:m,"aria-label":e.t(`custom.prompt`),placeholder:e.t(`custom.promptPlaceholder`),onChange:e=>C(`prompt`,e.currentTarget.value)}),_===null?null:cD(`div`,{className:`aag-error`,role:`alert`},_),l?cD(`section`,{className:`aag-custom-review`},cD(V_,{disabled:m,onClick:w},e.t(`custom.reviewLatest`)),d===null?null:cD(p.default.Fragment,null,cD(`h4`,null,e.t(`custom.latestContent`)),d.expert===void 0?cD(`p`,null,e.t(r.slug?`custom.reviewDeleted`:`custom.reviewNew`)):cD(p.default.Fragment,null,cD(`p`,null,d.expert.name),cD(`p`,null,d.expert.description),cD(`p`,null,e.locale===`zh`?gv[d.expert.division]??d.expert.division:_v[d.expert.division]??d.expert.division),cD(`img`,{src:tE[d.expert.avatar??0],width:36,height:36,alt:e.t(`custom.avatar`)}),cD(z_.TextArea,{readOnly:!0,value:d.expert.prompt,"aria-label":e.t(`custom.latestContent`),rows:8})),cD(`p`,null,e.t(`custom.reviewHint`)),cD(`div`,{className:`aag-custom-review-actions`},cD(V_,{disabled:m,onClick:()=>T(!1)},e.t(r.slug&&d.expert===void 0?`custom.continueAsNew`:`custom.keepDraft`)),d.expert===void 0?null:cD(V_,{disabled:m,onClick:()=>T(!0)},e.t(`custom.useLatest`))))):null),cD(pv,{editing:!!r.slug,busy:m,blocked:l,inert:y,help:e.t(`custom.enableHint`),cancelLabel:e.t(`custom.cancel`),saveLabel:e.t(`custom.save`),primaryLabel:e.t(m?`custom.saving`:r.slug?`custom.saveChanges`:`custom.saveEnable`),close:S,save:()=>E(!1),primary:()=>E(!r.slug||s)}),y?cD(hv,{title:e.t(`custom.discardTitle`),cancelLabel:e.t(`custom.keep`),confirmLabel:e.t(`custom.discard`),close:()=>b(!1),confirm:e.onClose},cD(`p`,null,e.t(`custom.discardTitle`))):null)}function uD(e){return cD(hv,{title:e.t(`custom.deleteTitle`),busy:e.busy,error:e.error,cancelLabel:e.t(`custom.cancel`),confirmLabel:e.t(`custom.delete`),close:e.close,confirm:e.confirm},cD(`p`,null,e.name),cD(`p`,{className:`aag-note`},e.t(`custom.deleteHint`)))}function dD(e,t){let n=new Map,r=new WeakMap,i=new Map,a=!1,o=0,s=()=>{let e=!1;for(let[e]of n)e.isConnected||n.delete(e);for(let t of document.querySelectorAll(`[class$="_roster"] > button > span[class$="_memberText"] > span:first-child`)){let a=t.firstChild;if(!(a instanceof Text)||t.childNodes.length!==1)continue;let o=n.get(a),s=o&&a.data===o.shown?o.original:a.data;if(!/^agency-[a-z0-9-]+-[0-9a-f]{10}$/u.test(s)){n.delete(a);continue}r.get(a)!==s&&(r.set(a,s),e=!0);let c=i.get(s)??s;n.set(a,{original:s,shown:c}),a.data!==c&&(a.data=c)}return e},c=async()=>{let n=++o;try{let t=await e();if(a||n!==o)return;i=t,s()}catch(e){!a&&n===o&&t(e)}},l=new MutationObserver(()=>{s()&&c()});return l.observe(document.body,{childList:!0,subtree:!0,characterData:!0}),s()&&c(),{refresh:c,dispose(){a=!0,l.disconnect();for(let[e,t]of n)e.data===t.shown&&(e.data=t.original);n.clear()}}}let fD=`@michengai/dsh-agency-agents`,pD=`agency`,mD=1600,hD={refresh:[`M13.5 5.5V2.5m0 0h-3m3 0-2.1 2.1A5.5 5.5 0 1 0 13.2 12`],download:[`M8 2v8m0 0 3-3m-3 3-3-3M3 13v2h10v-2`],copy:[`M5 5h8v8H5z`,`M3 3h8`],close:[`m4 4 8 8M12 4 4 12`]};function gD(e){let t=document.createElement(`span`),n=document.createElementNS(`http://www.w3.org/2000/svg`,`svg`);n.setAttribute(`viewBox`,`0 0 16 16`),n.setAttribute(`width`,`16`),n.setAttribute(`height`,`16`),n.setAttribute(`fill`,`none`),n.setAttribute(`stroke`,`currentColor`),n.setAttribute(`stroke-width`,`1.5`),n.setAttribute(`stroke-linecap`,`round`),n.setAttribute(`stroke-linejoin`,`round`),n.setAttribute(`aria-hidden`,`true`);for(let t of hD[e]){let e=document.createElementNS(`http://www.w3.org/2000/svg`,`path`);e.setAttribute(`d`,t),n.append(e)}return t.append(n),t}function _D(e,...t){let{size:n=24,strokeWidth:r=2,...i}=e;return p.default.createElement(`svg`,{...i,viewBox:`0 0 24 24`,width:n,height:n,fill:`none`,stroke:`currentColor`,strokeWidth:r,strokeLinecap:`round`,strokeLinejoin:`round`,focusable:!1},...t)}function vD(e){return _D(e,p.default.createElement(`rect`,{x:9,y:9,width:13,height:13,rx:2}),p.default.createElement(`path`,{d:`M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1`}))}function yD(e){return _D(e,p.default.createElement(`path`,{d:`M2.06 12a10.7 10.7 0 0 1 19.88 0 10.7 10.7 0 0 1-19.88 0`}),p.default.createElement(`circle`,{cx:12,cy:12,r:3}))}function bD(e){return _D(e,p.default.createElement(`circle`,{cx:11,cy:11,r:8}),p.default.createElement(`path`,{d:`m21 21-4.3-4.3`}))}let xD=[{href:`https://github.com/MichengAI/dsh-agency-agents`,labelKey:`settings.viewProject`,icon:`github`},{href:`https://github.com/MichengAI/dsh-agency-agents/issues`,labelKey:`settings.feedback`,icon:`feedback`}],SD=[`company`,`design`,`engineering`,`finance`,`game-development`,`gis`,`healthcare`,`hr`,`legal`,`marketing`,`paid-media`,`product`,`project-management`,`research`,`sales`,`security`,`spatial-computing`,`specialized`,`support`,`testing`,`supply-chain`,`academic`],CD={development:new Set([`engineering`,`game-development`,`gis`,`security`,`spatial-computing`,`testing`]),design:new Set([`design`]),product:new Set([`company`,`hr`,`product`,`project-management`,`sales`,`supply-chain`,`support`]),research:new Set([`academic`,`finance`,`healthcare`,`legal`,`research`]),writing:new Set([`marketing`,`paid-media`,`specialized`])},wD=SE.map(e=>({slug:e.slug,name:vv[e.slug]??e.nameEn,nameEn:e.nameEn,emoji:e.emoji,division:e.division,divisionZh:gv[e.division]??e.division,divisionEn:_v[e.division]??e.division,description:e.description,descriptionEn:e.descriptionEn})).sort((e,t)=>e.division.localeCompare(t.division)||e.slug.localeCompare(t.slug));function TD(e,t,n){let r=n===`en`?e.nameEn:e.name,i=n===`en`?t.nameEn:t.name;return r.localeCompare(i,n===`en`?`en`:`zh`)}function ED(e,t){let n=new Map;for(let t of e){let e=n.get(t.division)??[];e.push(t),n.set(t.division,e)}return[...new Set([...SD,...n.keys()])].filter(e=>n.has(e)).map(e=>({division:e,divisionZh:gv[e]??e,experts:(n.get(e)??[]).slice().sort((e,n)=>TD(e,n,t))}))}function DD(e){return e.normalize(`NFKC`).trim().replace(/\s+/gu,` `).toLowerCase()}function OD(e,t){let n=DD(t);if(n===``)return!0;let r=[...e.slug.startsWith(`custom-`)?[]:[e.slug],e.name,e.nameEn,e.division,e.divisionZh,e.divisionEn,e.description,e.descriptionEn].map(DD);return n.split(` `).every(e=>r.some(t=>/^[a-z0-9]+$/u.test(e)?(t.match(/[a-z0-9]+/gu)??[]).some(t=>e.length<=2?t===e:t.startsWith(e)):t.includes(e)))}function kD(e,t){let n=t.division??``;return e.filter(e=>(n===``||e.division===n)&&OD(e,t.query??``))}function AD(){return[``,...SD]}function jD(e,t){let n=[],r=[];for(let i of e)t.has(i.slug)?n.push(i):r.push(i);return[...n,...r]}function MD(e,t){let n=new Map(t.map((e,t)=>[e,t]));return e.slice().sort((e,t)=>(n.get(e.slug)??2**53-1)-(n.get(t.slug)??2**53-1))}function ND(e,t){if(t<=0)return 0;let n=2166136261;for(let t=0;t<e.length;t+=1)n=Math.imul(n^e.charCodeAt(t),16777619);return(n>>>0)%t}let PD={development:[1,5,9,10,11,12,13,14,15,16,17,18],writing:[3,7,19,20,21,22,23,24],product:[0,8,25,26,27,28],research:[2,4,29,30,31,32],design:[6,33,34,35]},FD=Object.values(PD).flat();function ID(e){return Object.entries(CD).find(([,t])=>t.has(e))?.[0]}function LD(e,t){return`${t}\u0000${e}`}let RD=new Map;for(let[e,t]of Object.entries(PD))wD.filter(t=>CD[e].has(t.division)).slice().sort((e,t)=>e.slug.localeCompare(t.slug,`en`)).forEach((e,n)=>{RD.set(LD(e.slug,e.division),t[n%t.length]??0)});function zD(e,t){let n=RD.get(LD(e,t));if(n!==void 0)return n;let r=ID(t),i=r===void 0?FD:PD[r];return i[ND(e,i.length)]??0}function BD(e,t){return t===`en`?e.nameEn:e.name}function VD(e,t){return t===`en`?e.nameEn:e.name}function HD(e){let t=e.custom?e.avatar??0:zD(e.slug,e.division);return tE[t]??tE[0]}function UD(e,t,n){let r=wD.find(t=>t.slug===e);return r===void 0?t:BD(r,n)}function WD(e){return`@${e.trim().replace(/^@+/,``)}`}function GD(e){return`${WD(e)}\u00A0`}function KD(e,t,n){return e.filter(e=>t.has(e.slug)).map(e=>n===`en`?e.nameEn:e.name)}function qD(e,t){return(t===`en`?_v:gv)[e]??e}function JD(e){return`${fD}:${e}`}function YD(e,t){let n=t===`en`?e.nameEn:e.name;return{source:JD(e.division),ref:e.slug,label:n,appearance:`session`,clipboardText:GD(n)}}function XD(e,t,n=wD){let r=n.find(t=>t.slug===e);return r===void 0?t===`en`?`@Removed expert (please reselect)\xA0`:`@已移除专家(请重新选择)\xA0`:GD(BD(r,t))}function ZD(e,t){return t===`en`&&e.descriptionEn!==``?e.descriptionEn:e.description}let QD=SD.map(e=>JD(e)).map(e=>`[role="listbox"] div[data-source=${JSON.stringify(e)}] ~ button`).map(e=>`${e} span:last-child`).join(`,`),$D=`.aag-btn-wrap{position:relative;order:1;display:inline-flex;flex:0 0 auto}.aag-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:28px;padding:0 8px;white-space:nowrap;border:none;border-radius:24px;background:transparent;color:var(--dsw-alias-label-secondary);font-size:13px;line-height:20px;font-weight:500;cursor:pointer}.aag-btn:hover,.aag-btn[aria-expanded="true"]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.aag-btn:focus-visible{outline:2px solid var(--dsw-alias-label-secondary);outline-offset:2px}.aag-btn>svg{flex:none}.aag-menu{position:absolute;bottom:calc(100% + 4px);left:0;box-sizing:border-box;padding:4px;display:flex;flex-direction:column;gap:0;width:300px;max-width:360px;max-height:calc(100dvh - 24px);overflow-y:auto;border:0;border-radius:20px;background:var(--dsw-specific-menu);backdrop-filter:var(--dsw-menu-backdrop-filter);box-shadow:var(--dsw-elevation-prominent);z-index:10000}.aag-menu[data-placement="below"]{top:calc(100% + 4px);bottom:auto}.aag-menu-title{padding:8px 10px;font-size:12px;line-height:16px;color:var(--dsw-alias-label-tertiary)}.aag-menu-item{display:flex;align-items:center;gap:8px;width:100%;min-height:40px;padding:8px 10px;border:none;border-radius:10px;background:transparent;cursor:pointer;text-align:left;font-size:14px;line-height:22px;color:var(--dsw-alias-label-primary);box-sizing:border-box}.aag-menu-item:hover{background:var(--dsw-alias-interactive-bg-hover)}.aag-menu-empty{padding:8px 10px;color:var(--dsw-alias-label-secondary);font-size:13px}`,eO=`
432
+ `,(document.head??document.documentElement).append(e)}function tD(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.packageName==`string`&&typeof t.currentVersion==`string`&&typeof t.updateAvailable==`boolean`&&typeof t.profileName==`string`&&typeof t.canAutoUpdate==`boolean`&&typeof t.latestCheckFailed==`boolean`&&(t.latestVersion===void 0||typeof t.latestVersion==`string`)}async function nD(e,t,n){let r=n===void 0?{}:{signal:n},i=await fetch(e,t===`GET`?{cache:`no-store`,...r}:{method:`POST`,headers:{"content-type":`application/json`,"x-michengai-plugin-update":`1`},body:`{}`,...r}),a=await i.json();if(!i.ok||!tD(a))throw Error(typeof a.error==`string`?a.error:$E().failed);return a}function rD(e,t,n){return`dsh plugin${e.trim()===``?``:` --profile ${e.trim()}`} add ${t}@${n} --registry=https://registry.npmjs.org/`}function iD(e){let t=$E(),[n,r]=p.default.useState(e.initial),[i,a]=p.default.useState(e.initial===void 0?t.checking:``),[o,s]=p.default.useState(``),[c,l]=p.default.useState(!1),[u,d]=p.default.useState(t.copy),f=e=>{if(e===void 0){a(t.checking),s(``);return}if(e.latestCheckFailed){a(t.failed),s(`error`);return}if(!e.canAutoUpdate&&e.updateAvailable){a(t.unavailable),s(`update`);return}if(e.updateAvailable){a(`${t.found}: v${e.latestVersion??t.unknown}`),s(`update`);return}a(t.latest),s(`success`)},m=async()=>{if(!c){l(!0),a(t.checking),s(``);try{let t=await e.refresh();r(t),e.onPayload(t),f(t)}catch(e){a(e instanceof Error?e.message:t.failed),s(`error`)}finally{l(!1)}}},h=async()=>{if(!c){l(!0),a(t.updating),s(``);try{let n=await e.update();r(n),e.onPayload(n),f(n),a(n.autoReload===!0?t.restarting:n.profileName===`desktop`?t.restartDesktop:t.restart),s(`success`)}catch(e){a(e instanceof Error?e.message:t.failed),s(`error`)}finally{l(!1)}}};p.default.useEffect(()=>{m()},[]),fv(!0,e.onClose);let g=rD(n?.profileName??``,e.packageName,n?.latestVersion??`latest`),_=n===void 0?t.unknown:`v${n.currentVersion}`,v=n?.latestVersion===void 0?t.unknown:`v${n.latestVersion}`;return p.default.createElement(ev,{locale:ov()},p.default.createElement(W_,{open:!0,keyboard:!1,className:`mpi-dialog`,width:680,zIndex:1200,title:`${e.name} ${t.update}`,onCancel:e.onClose,footer:[p.default.createElement(V_,{key:`check`,disabled:c,onClick:()=>{m()}},t.recheck),p.default.createElement(V_,{key:`update`,type:`primary`,disabled:c||n?.canAutoUpdate!==!0||n.updateAvailable!==!0,loading:c,onClick:()=>{h()}},t.auto)]},p.default.createElement(`p`,{className:`mpi-intro`},t.intro),p.default.createElement(`dl`,{className:`mpi-meta`},p.default.createElement(`dt`,null,t.current),p.default.createElement(`dd`,null,p.default.createElement(`span`,{className:`mpi-mono`},_)),p.default.createElement(`dt`,null,t.latestLabel),p.default.createElement(`dd`,{className:`mpi-latest`},p.default.createElement(`span`,{className:`mpi-mono`},v),p.default.createElement(`span`,{className:`mpi-status`,role:`status`,"data-kind":o,...o===`update`?{style:{color:`#e8b15a`}}:{}},i)),p.default.createElement(`dt`,null,t.profile),p.default.createElement(`dd`,null,p.default.createElement(`span`,{className:`mpi-mono`},n?.profileName??t.unknown))),c?p.default.createElement(G_,{percent:100,showInfo:!1,status:`active`}):null,p.default.createElement(`section`,{className:`mpi-manual`},p.default.createElement(`h3`,null,t.manual),p.default.createElement(`p`,null,n?.profileName===`desktop`?t.manualHintDesktop:t.manualHint),p.default.createElement(`div`,{className:`mpi-command`},p.default.createElement(`code`,null,g),p.default.createElement(V_,{onClick:()=>{navigator.clipboard?.writeText(g).then(()=>{d(t.copied),setTimeout(()=>d(t.copy),1400)}).catch(()=>d(t.copyFailed))}},u)))))}function aD(e){if(typeof document>`u`||document.body===null)return()=>{};eD();let t=new AbortController,n,r,i,a,o,s,c,l=()=>{o?.unmount(),o=void 0,a=void 0,s=void 0},u=()=>{if(o===void 0)return;s??=e.createIcon(`refresh`);let t=s;o.render(p.default.createElement(ev,{locale:ov()},p.default.createElement(V_,{size:`small`,shape:`default`,onClick:g,icon:p.default.createElement(QE,{node:t})},p.default.createElement(`span`,{"data-mpi-label":``},$E().check))))},d=()=>{let t=document.querySelector(e.titleRowSelector);if(t===null)return;let r=t.querySelector(`h1,h2`);if(r!==null&&n!==void 0){let t=r.querySelector(`.mpi-version[data-package="${e.packageName}"]`);t===null&&(t=document.createElement(`span`),t.className=`mpi-version`,t.dataset.package=e.packageName,r.append(t));let i=`v${n.currentVersion}`;t.textContent!==i&&(t.textContent=i)}a!==void 0&&!a.isConnected&&l();let i=t.querySelector(e.linksSelector);if(i===null)return;let s=i.querySelector(`[data-mpi-check="${e.packageName}"]`);if(s!==null){let e=s.querySelector(`[data-mpi-label]`);(e===null||e.textContent!==$E().check)&&u();return}let c=document.createElement(`span`);c.dataset.mpiCheck=e.packageName,c.className=`mpi-check-host`,i.append(c),a=c,o=(0,m.createRoot)(c),u()},f=async()=>(n=await nD(e.endpoint,`GET`,t.signal),d(),n),h=()=>{i?.unmount(),i=void 0,r?.remove(),r=void 0};function g(){h();let a=document.createElement(`div`);a.className=`mpi-dialog-root`,document.body.append(a);let o=(0,m.createRoot)(a);r=a,i=o,o.render(p.default.createElement(iD,{name:av()===`en`?e.enName:e.zhName,packageName:e.packageName,initial:n,refresh:()=>f(),update:()=>nD(e.endpoint,`POST`,t.signal),onPayload:e=>{n=e,d()},onClose:h}))}let _=new MutationObserver(()=>{c===void 0&&(c=window.requestAnimationFrame(()=>{c=void 0,d()}))});return _.observe(document.body,{childList:!0,subtree:!0}),d(),f().catch(()=>{}),()=>{t.abort(),_.disconnect(),h(),l(),c!==void 0&&window.cancelAnimationFrame(c),document.querySelectorAll(`[data-mpi-check="${e.packageName}"],.mpi-version[data-package="${e.packageName}"]`).forEach(e=>e.remove())}}async function oD(e,t,n){let r=await e.getCatalog();if(!r.ok)throw Error(r.error.message);if(t===void 0||!r.value.experts.some(e=>e.slug===t&&e.custom))return{catalog:r.value};let i=await e.getCustomExpert(t);if(!i.ok)throw Error(i.error.message);let a=await e.getCatalog();if(!a.ok)throw Error(a.error.message);if(r.value.revision!==a.value.revision)throw zE(`conflict`,n);return{catalog:a.value,expert:i.value}}function sD(e,t,n){if(n&&e.expert===void 0)throw Error(`No current expert to load`);let{slug:r,...i}=t;return{expert:n?e.expert:e.expert===void 0?i:t,enabled:e.expert?.slug!==void 0&&e.catalog.enabled.includes(e.expert.slug),revision:e.catalog.revision}}let cD=p.default.createElement;function lD(e){let[t,n]=p.default.useState(()=>({...e.expert,name:e.expert?.name??``,description:e.expert?.description??``,division:e.expert?.division??`specialized`,prompt:e.expert?.prompt??``,emoji:e.expert?.emoji||`🧩`,avatar:e.expert?.avatar??0})),[r,i]=p.default.useState(t),[a,o]=p.default.useState(e.revision),[s,c]=p.default.useState(e.enabled),[l,u]=p.default.useState(!1),[d,f]=p.default.useState(null),[m,h]=p.default.useState(!1),g=p.default.useRef(!1),[_,v]=p.default.useState(null),[y,b]=p.default.useState(!1),x=p.default.useRef(null),S=()=>{g.current||(JSON.stringify(r)===JSON.stringify(t)?e.onClose():b(!0))};fv(!0,()=>{y?b(!1):S()});let C=(e,t)=>{i(n=>({...n,[e]:t})),v(null)},w=()=>{g.current||(g.current=!0,h(!0),f(null),oD(e.remote,r.slug,e.locale).then(f).catch(e=>v(e instanceof Error?e.message:String(e))).finally(()=>{g.current=!1,h(!1)}))},T=e=>{if(d===null)return;let t=sD(d,r,e);i({...t.expert,emoji:t.expert.emoji??`🧩`,avatar:t.expert.avatar??0}),d.expert!==void 0&&n(PE.parse(d.expert)),o(t.revision),c(t.enabled),f(null),u(!1),v(null)},E=t=>{if(g.current||l||x.current?.reportValidity()!==!0)return;let n=PE.safeParse(r);if(!n.success){v(e.t(`custom.invalid`));return}g.current=!0,h(!0),v(null),e.remote.saveCustomExpert(n.data,t,a).then(t=>{if(!t.ok)throw Error(t.error.message);e.onSaved(t.value)}).catch(t=>{let n=t instanceof Error?t.message:String(t),r=/changed since it was read|其他窗口|another window/iu.test(n);u(r),r&&f(null),v(r?e.t(`custom.conflict`):n)}).finally(()=>{g.current=!1,h(!1)})},D=(t,n,r=!1)=>cD(`label`,{className:`aag-custom-field`},cD(`span`,null,t,r?cD(`small`,null,e.t(`custom.required`)):null),n);return cD(U_,{open:!0,keyboard:!1,placement:`right`,size:`min(560px, 100vw)`,destroyOnHidden:!0,rootClassName:`aag-editor-drawer`,styles:{body:{padding:0}},title:e.t(r.slug?`custom.edit`:`custom.new`),onClose:()=>{y?b(!1):S()}},cD(`form`,{ref:x,className:`aag-custom-body`,onSubmit:e=>e.preventDefault(),inert:y?``:void 0},cD(`p`,{className:`aag-editor-intro`},e.t(`custom.intro`)),cD(`fieldset`,{className:`aag-custom-avatars`,disabled:m},cD(`legend`,null,e.t(`custom.avatar`)),tE.map((t,n)=>cD(`button`,{key:t,type:`button`,"aria-label":`${e.t(`custom.avatar`)} ${n+1}`,"aria-pressed":r.avatar===n,className:r.avatar===n?`is-selected`:``,onClick:()=>i(e=>({...e,avatar:n}))},cD(`img`,{src:t,width:36,height:36,alt:``,loading:`lazy`})))),D(e.t(`custom.name`),((t,n,i)=>cD(z_,{value:r[t],maxLength:i,required:!0,disabled:m,"aria-label":n,onChange:e=>C(t,e.currentTarget.value),...t===`name`?{placeholder:e.t(`custom.namePlaceholder`)}:{}}))(`name`,e.t(`custom.name`),40),!0),D(e.t(`custom.description`),cD(z_.TextArea,{value:r.description,rows:2,maxLength:160,required:!0,disabled:m,"aria-label":e.t(`custom.description`),placeholder:e.t(`custom.descriptionPlaceholder`),onChange:e=>C(`description`,e.currentTarget.value)}),!0),cD(`div`,{className:`aag-custom-field`},cD(`label`,{htmlFor:`aag-custom-division`},e.t(`custom.division`)),cD(HT,{id:`aag-custom-division`,value:r.division,disabled:m,label:e.t(`custom.division`),onChange:e=>C(`division`,e),options:e.divisions.map(t=>({value:t,label:(e.locale===`en`?_v:gv)[t]??t}))})),cD(`div`,{className:`aag-custom-prompt-head`},cD(`label`,{htmlFor:`aag-custom-prompt`},e.t(`custom.prompt`)),r.prompt===``?cD(V_,{disabled:m,onClick:()=>C(`prompt`,e.t(`custom.templateText`))},e.t(`custom.template`)):null),cD(z_.TextArea,{id:`aag-custom-prompt`,className:`aag-custom-prompt`,value:r.prompt,rows:8,required:!0,maxLength:2e4,disabled:m,"aria-label":e.t(`custom.prompt`),placeholder:e.t(`custom.promptPlaceholder`),onChange:e=>C(`prompt`,e.currentTarget.value)}),_===null?null:cD(`div`,{className:`aag-error`,role:`alert`},_),l?cD(`section`,{className:`aag-custom-review`},cD(V_,{disabled:m,onClick:w},e.t(`custom.reviewLatest`)),d===null?null:cD(p.default.Fragment,null,cD(`h4`,null,e.t(`custom.latestContent`)),d.expert===void 0?cD(`p`,null,e.t(r.slug?`custom.reviewDeleted`:`custom.reviewNew`)):cD(p.default.Fragment,null,cD(`p`,null,d.expert.name),cD(`p`,null,d.expert.description),cD(`p`,null,e.locale===`zh`?gv[d.expert.division]??d.expert.division:_v[d.expert.division]??d.expert.division),cD(`img`,{src:tE[d.expert.avatar??0],width:36,height:36,alt:e.t(`custom.avatar`)}),cD(z_.TextArea,{readOnly:!0,value:d.expert.prompt,"aria-label":e.t(`custom.latestContent`),rows:8})),cD(`p`,null,e.t(`custom.reviewHint`)),cD(`div`,{className:`aag-custom-review-actions`},cD(V_,{disabled:m,onClick:()=>T(!1)},e.t(r.slug&&d.expert===void 0?`custom.continueAsNew`:`custom.keepDraft`)),d.expert===void 0?null:cD(V_,{disabled:m,onClick:()=>T(!0)},e.t(`custom.useLatest`))))):null),cD(pv,{editing:!!r.slug,busy:m,blocked:l,inert:y,help:e.t(`custom.enableHint`),cancelLabel:e.t(`custom.cancel`),saveLabel:e.t(`custom.save`),primaryLabel:e.t(m?`custom.saving`:r.slug?`custom.saveChanges`:`custom.saveEnable`),close:S,save:()=>E(!1),primary:()=>E(!r.slug||s)}),y?cD(hv,{title:e.t(`custom.discardTitle`),cancelLabel:e.t(`custom.keep`),confirmLabel:e.t(`custom.discard`),close:()=>b(!1),confirm:e.onClose},cD(`p`,null,e.t(`custom.discardTitle`))):null)}function uD(e){return cD(hv,{title:e.t(`custom.deleteTitle`),busy:e.busy,error:e.error,cancelLabel:e.t(`custom.cancel`),confirmLabel:e.t(`custom.delete`),close:e.close,confirm:e.confirm},cD(`p`,null,e.name),cD(`p`,{className:`aag-note`},e.t(`custom.deleteHint`)))}function dD(e,t){let n=[`[class$="_roster"] > button > [class$="_memberText"] > span:first-child`,`[class$="_roster"] > button > [class$="_memberText"] > [class$="_memberName"] > [class$="_memberNameText"]`],r=new Map,i=new WeakMap,a=new Map,o=[],s=!1,c=0,l=()=>{let e=new Set;for(let t of document.querySelectorAll(`[class$="_taskTitle"] > strong`)){let n=t.textContent?.trim();if(n)for(let t of o)t.names.some(e=>n.startsWith(e)&&/^\s*[::]/u.test(n.slice(e.length)))&&e.add(t.label)}return e.size===1?e.values().next().value:void 0},u=()=>{let e=!1,t=l();for(let[e]of r)e.isConnected||r.delete(e);let o=new Set;for(let s of n)for(let n of document.querySelectorAll(s))if(!o.has(n)){o.add(n);for(let o of n.childNodes){if(!(o instanceof Text))continue;let n=r.get(o),s=n&&o.data===n.shown?n.original:o.data;if(s.trim()===`lead`||n?.original.trim()===`lead`){let a=n?.original.trim()===`lead`?n.original:s;i.get(o)!==a&&(i.set(o,a),e=!0);let c=t?a.replace(/^(\s*)lead(\s*)$/u,(e,n,r)=>`${n}${t}${r}`):a;r.set(o,{original:a,shown:c}),o.data!==c&&(o.data=c);continue}let c=s.match(/(agency-[a-z0-9-]+-[0-9a-f]{10})/u);if(!c){n&&r.delete(o);continue}let l=s;i.get(o)!==l&&(i.set(o,l),e=!0);let u=c[1],d=a.get(u),f=d?l.replace(u,d):l;r.set(o,{original:l,shown:f}),o.data!==f&&(o.data=f)}}return e},d=async()=>{let n=++c;try{let t=await e();if(s||n!==c)return;`members`in t?(a=t.members,o=t.teams):(a=t,o=[]),u()}catch(e){!s&&n===c&&t(e)}},f=new MutationObserver(()=>{u()&&d()});return f.observe(document.body,{childList:!0,subtree:!0,characterData:!0}),u()&&d(),{refresh:d,dispose(){s=!0,f.disconnect();for(let[e,t]of r)e.data===t.shown&&(e.data=t.original);r.clear()}}}let fD=`@michengai/dsh-agency-agents`,pD=`agency`,mD=1600,hD={refresh:[`M13.5 5.5V2.5m0 0h-3m3 0-2.1 2.1A5.5 5.5 0 1 0 13.2 12`],download:[`M8 2v8m0 0 3-3m-3 3-3-3M3 13v2h10v-2`],copy:[`M5 5h8v8H5z`,`M3 3h8`],close:[`m4 4 8 8M12 4 4 12`]};function gD(e){let t=document.createElement(`span`),n=document.createElementNS(`http://www.w3.org/2000/svg`,`svg`);n.setAttribute(`viewBox`,`0 0 16 16`),n.setAttribute(`width`,`16`),n.setAttribute(`height`,`16`),n.setAttribute(`fill`,`none`),n.setAttribute(`stroke`,`currentColor`),n.setAttribute(`stroke-width`,`1.5`),n.setAttribute(`stroke-linecap`,`round`),n.setAttribute(`stroke-linejoin`,`round`),n.setAttribute(`aria-hidden`,`true`);for(let t of hD[e]){let e=document.createElementNS(`http://www.w3.org/2000/svg`,`path`);e.setAttribute(`d`,t),n.append(e)}return t.append(n),t}function _D(e,...t){let{size:n=24,strokeWidth:r=2,...i}=e;return p.default.createElement(`svg`,{...i,viewBox:`0 0 24 24`,width:n,height:n,fill:`none`,stroke:`currentColor`,strokeWidth:r,strokeLinecap:`round`,strokeLinejoin:`round`,focusable:!1},...t)}function vD(e){return _D(e,p.default.createElement(`rect`,{x:9,y:9,width:13,height:13,rx:2}),p.default.createElement(`path`,{d:`M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1`}))}function yD(e){return _D(e,p.default.createElement(`path`,{d:`M2.06 12a10.7 10.7 0 0 1 19.88 0 10.7 10.7 0 0 1-19.88 0`}),p.default.createElement(`circle`,{cx:12,cy:12,r:3}))}function bD(e){return _D(e,p.default.createElement(`circle`,{cx:11,cy:11,r:8}),p.default.createElement(`path`,{d:`m21 21-4.3-4.3`}))}let xD=[{href:`https://github.com/MichengAI/dsh-agency-agents`,labelKey:`settings.viewProject`,icon:`github`},{href:`https://github.com/MichengAI/dsh-agency-agents/issues`,labelKey:`settings.feedback`,icon:`feedback`}],SD=[`company`,`design`,`engineering`,`finance`,`game-development`,`gis`,`healthcare`,`hr`,`legal`,`marketing`,`paid-media`,`product`,`project-management`,`research`,`sales`,`security`,`spatial-computing`,`specialized`,`support`,`testing`,`supply-chain`,`academic`],CD={development:new Set([`engineering`,`game-development`,`gis`,`security`,`spatial-computing`,`testing`]),design:new Set([`design`]),product:new Set([`company`,`hr`,`product`,`project-management`,`sales`,`supply-chain`,`support`]),research:new Set([`academic`,`finance`,`healthcare`,`legal`,`research`]),writing:new Set([`marketing`,`paid-media`,`specialized`])},wD=SE.map(e=>({slug:e.slug,name:vv[e.slug]??e.nameEn,nameEn:e.nameEn,emoji:e.emoji,division:e.division,divisionZh:gv[e.division]??e.division,divisionEn:_v[e.division]??e.division,description:e.description,descriptionEn:e.descriptionEn})).sort((e,t)=>e.division.localeCompare(t.division)||e.slug.localeCompare(t.slug));function TD(e,t,n){let r=n===`en`?e.nameEn:e.name,i=n===`en`?t.nameEn:t.name;return r.localeCompare(i,n===`en`?`en`:`zh`)}function ED(e,t){let n=new Map;for(let t of e){let e=n.get(t.division)??[];e.push(t),n.set(t.division,e)}return[...new Set([...SD,...n.keys()])].filter(e=>n.has(e)).map(e=>({division:e,divisionZh:gv[e]??e,experts:(n.get(e)??[]).slice().sort((e,n)=>TD(e,n,t))}))}function DD(e){return e.normalize(`NFKC`).trim().replace(/\s+/gu,` `).toLowerCase()}function OD(e,t){let n=DD(t);if(n===``)return!0;let r=[...e.slug.startsWith(`custom-`)?[]:[e.slug],e.name,e.nameEn,e.division,e.divisionZh,e.divisionEn,e.description,e.descriptionEn].map(DD);return n.split(` `).every(e=>r.some(t=>/^[a-z0-9]+$/u.test(e)?(t.match(/[a-z0-9]+/gu)??[]).some(t=>e.length<=2?t===e:t.startsWith(e)):t.includes(e)))}function kD(e,t){let n=t.division??``;return e.filter(e=>(n===``||e.division===n)&&OD(e,t.query??``))}function AD(){return[``,...SD]}function jD(e,t){let n=[],r=[];for(let i of e)t.has(i.slug)?n.push(i):r.push(i);return[...n,...r]}function MD(e,t){let n=new Map(t.map((e,t)=>[e,t]));return e.slice().sort((e,t)=>(n.get(e.slug)??2**53-1)-(n.get(t.slug)??2**53-1))}function ND(e,t){if(t<=0)return 0;let n=2166136261;for(let t=0;t<e.length;t+=1)n=Math.imul(n^e.charCodeAt(t),16777619);return(n>>>0)%t}let PD={development:[1,5,9,10,11,12,13,14,15,16,17,18],writing:[3,7,19,20,21,22,23,24],product:[0,8,25,26,27,28],research:[2,4,29,30,31,32],design:[6,33,34,35]},FD=Object.values(PD).flat();function ID(e){return Object.entries(CD).find(([,t])=>t.has(e))?.[0]}function LD(e,t){return`${t}\u0000${e}`}let RD=new Map;for(let[e,t]of Object.entries(PD))wD.filter(t=>CD[e].has(t.division)).slice().sort((e,t)=>e.slug.localeCompare(t.slug,`en`)).forEach((e,n)=>{RD.set(LD(e.slug,e.division),t[n%t.length]??0)});function zD(e,t){let n=RD.get(LD(e,t));if(n!==void 0)return n;let r=ID(t),i=r===void 0?FD:PD[r];return i[ND(e,i.length)]??0}function BD(e,t){return t===`en`?e.nameEn:e.name}function VD(e,t){return t===`en`?e.nameEn:e.name}function HD(e){let t=e.custom?e.avatar??0:zD(e.slug,e.division);return tE[t]??tE[0]}function UD(e,t,n){let r=wD.find(t=>t.slug===e);return r===void 0?t:BD(r,n)}function WD(e){return`@${e.trim().replace(/^@+/,``)}`}function GD(e){return`${WD(e)}\u00A0`}function KD(e,t,n){return e.filter(e=>t.has(e.slug)).map(e=>n===`en`?e.nameEn:e.name)}function qD(e,t){return(t===`en`?_v:gv)[e]??e}function JD(e){return`${fD}:${e}`}function YD(e,t){let n=t===`en`?e.nameEn:e.name;return{source:JD(e.division),ref:e.slug,label:n,appearance:`session`,clipboardText:GD(n)}}function XD(e,t,n=wD){let r=n.find(t=>t.slug===e);return r===void 0?t===`en`?`@Removed expert (please reselect)\xA0`:`@已移除专家(请重新选择)\xA0`:GD(BD(r,t))}function ZD(e,t){return t===`en`&&e.descriptionEn!==``?e.descriptionEn:e.description}let QD=SD.map(e=>JD(e)).map(e=>`[role="listbox"] div[data-source=${JSON.stringify(e)}] ~ button`).map(e=>`${e} span:last-child`).join(`,`),$D=`.aag-btn-wrap{position:relative;order:1;display:inline-flex;flex:0 0 auto}.aag-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:28px;padding:0 8px;white-space:nowrap;border:none;border-radius:24px;background:transparent;color:var(--dsw-alias-label-secondary);font-size:13px;line-height:20px;font-weight:500;cursor:pointer}.aag-btn:hover,.aag-btn[aria-expanded="true"]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.aag-btn:focus-visible{outline:2px solid var(--dsw-alias-label-secondary);outline-offset:2px}.aag-btn>svg{flex:none}.aag-menu{position:absolute;bottom:calc(100% + 4px);left:0;box-sizing:border-box;padding:4px;display:flex;flex-direction:column;gap:0;width:300px;max-width:360px;max-height:calc(100dvh - 24px);overflow-y:auto;border:0;border-radius:20px;background:var(--dsw-specific-menu);backdrop-filter:var(--dsw-menu-backdrop-filter);box-shadow:var(--dsw-elevation-prominent);z-index:10000}.aag-menu[data-placement="below"]{top:calc(100% + 4px);bottom:auto}.aag-menu-title{padding:8px 10px;font-size:12px;line-height:16px;color:var(--dsw-alias-label-tertiary)}.aag-menu-item{display:flex;align-items:center;gap:8px;width:100%;min-height:40px;padding:8px 10px;border:none;border-radius:10px;background:transparent;cursor:pointer;text-align:left;font-size:14px;line-height:22px;color:var(--dsw-alias-label-primary);box-sizing:border-box}.aag-menu-item:hover{background:var(--dsw-alias-interactive-bg-hover)}.aag-menu-empty{padding:8px 10px;color:var(--dsw-alias-label-secondary);font-size:13px}`,eO=`
433
433
  .aag-section{box-sizing:border-box;display:flex;min-width:0;max-width:760px;width:100%;margin:0 auto;flex-direction:column;gap:16px;padding:0 0 32px;color:var(--dsw-alias-label-primary)}
434
434
  .aag-toolbar{display:flex;align-items:flex-start;gap:16px;padding-bottom:12px}
435
435
  .aag-title-row{display:flex;align-items:center;gap:8px;min-width:0}.aag-settings-links{display:flex;align-items:center;gap:4px;flex-wrap:wrap}
@@ -594,4 +594,4 @@ Provide conclusions, evidence and actionable next steps. Do not invent facts.`},
594
594
  .aag-custom-review-actions{display:flex;flex-wrap:wrap;gap:8px}
595
595
  .aag-custom-review p{overflow-wrap:anywhere}
596
596
  @media(max-width:560px){.aag-custom-body{padding:16px}.aag-custom-footer{padding:14px 16px 20px}.aag-custom-prompt-head{flex-wrap:wrap}}
597
- `,document.head.appendChild(e),()=>{e.remove()}},`agency-agents: style`),e.effect(()=>e.locale.register(pD,{zh:DE,en:OE}),`agency-agents: dictionaries`),e.effect(()=>aD({endpoint:`/api/michengai/dsh-agency-agents/update`,packageName:`@michengai/dsh-agency-agents`,titleRowSelector:`.aag-title-row`,linksSelector:`.aag-settings-links`,zhName:`专家`,enName:`Experts`,createIcon:gD}),`agency-agents: plugin update ui`);let t=e.locale.bind(pD),n=()=>e.locale.getSnapshot().active===`en`?`en`:`zh`,r=await e.remote.$mount(JE),i=e.get(`remote.agencyAgents`);if(i===void 0)throw Error(Lv(n(),`agency-agents Remote 挂载后不可用`));let a,o=new Set,s=e=>{if(!(a!==void 0&&a.size===e.size&&[...e].every(e=>a?.has(e)===!0))){a=new Set(e);for(let e of o)e()}},c=()=>{aO(i).then(e=>s(e.enabled)).catch(e=>console.warn(`[agency-agents] 名册刷新失败:`,e))};e.effect(()=>Sv(i,()=>{s(xv(i).enabled);for(let e of o)e()}),`agency-agents: catalog changes`),typeof i.getTeams==`function`&&Fv(i).catch(e=>console.warn(`[agency-agents] 专家团预加载失败:`,e)),await aO(i).catch(e=>console.warn(`[agency-agents] 初始名册读取失败,设置页可重试:`,e)),e.effect(()=>{let t=dD(async()=>{if(!i.getTeams)return new Map;let e=i,t=jv(e)??await Fv(e),r=xv(i).experts;return new Map(Object.entries(t.nativeMembers??{}).flatMap(([e,t])=>{let i=r.find(e=>e.slug===t&&!e.conflict);return i?[[e,BD(i,n())]]:[]}))},e=>console.warn(`[agency-agents] 原生成员显示名读取失败:`,e)),r=e.locale.subscribe(()=>{t.refresh()}),a=Sv(i,()=>{t.refresh()});return()=>{r(),a(),t.dispose()}},`agency-agents: native member names`);let l=t=>hO(e.sessions,t,e=>e.get(`conversation`)),u=(r,a,o,s)=>{if(r===void 0)return!1;let c=e.sessions,l=mO(c,o),u=l===void 0?void 0:c.scope?.(l)??c.binding?.(l)?.ctx,d=xv(i).experts.find(e=>e.slug===a.ref),f=d===void 0?void 0:wE(d,n());return vO({state:r.state,insertReference:(e,t)=>r.insertReference(e,t),insertText:(e,t)=>u?.bail(u,`slash/input-insert-text`,{text:e,span:t})===!0,notify:(e,t)=>r.notify?.(e,t)},a,f,s,t(`discovery.exampleFailed`))},d=[],f=async(t,r,i,a,o)=>{if(!t)return!1;d=[...d.filter(e=>e.id!==r.id),r];let s=e.sessions,c=mO(s,a),l=c===void 0?void 0:s.scope?.(c)??s.binding?.(c)?.ctx;return yE({state:t.state,insertReference:(e,n)=>t.insertReference(e,n),insertText:(e,t)=>l?.bail(l,`slash/input-insert-text`,{text:e,span:t})===!0,notify:(e,n)=>t.notify?.(e,n)},r,i,o,n())},m=e=>{let t=()=>l(e);return{prepareTeamSelection:()=>{let n=t();return(r,i)=>n!==void 0&&t()===n&&f(n,r,i,e)},insertReference:n=>u(t(),n,e),prepareInsertion:()=>{let n=t();return r=>n!==void 0&&t()===n&&u(n,r,e)}}};e.slots.inject(`settings.section`,()=>e.slots.register({name:`settings.section`,id:`agency-agents`,order:16,label:()=>t(`settings.nav`),locale:pD,icon:`expert`},e=>p.default.createElement(TO,{...e,remote:i,getActive:n,onEnabledChange:s,prepareTeamSelection:m().prepareTeamSelection}))),e.slots.inject(`conversation.input.left`,()=>e.slots.register({name:`conversation.input.left`,id:`agency-agents`,order:0,locale:pD,inject:m},e=>p.default.createElement(bO,{...e,remote:i,getActive:n,onEnabledChange:s})));let h=r=>{let p=[];try{let m=i;typeof m.getTeams==`function`&&p.push(e.inputTriggers.registerSource({trigger:`@`,name:_E,order:99,candidates:async(e,t)=>{let n=jv(m),i=n??await Fv(m);return n&&Fv(m).catch(e=>console.warn(`[agency-agents] 专家团刷新失败:`,e)),d=i.teams.map(e=>RT(e,r)),d.filter(e=>i.enabledTeams.includes(e.id)&&`${e.name} ${e.description}`.toLowerCase().includes(String(t.query??``).toLowerCase())).map(e=>({name:`${e.name} · ${Lv(r,`专家团`)}`,hint:e.id,section:Lv(r,`专家团`)}))},onPick:e=>{let t=d.find(t=>t.id===e.candidate.hint);if(!t)return;let n=l(e.session.sessionId);return n?(f(n,t,void 0,e.session.sessionId,e.span).catch(e=>n.notify?.(`error`,e instanceof Error?e.message:Lv(r,`操作失败。`))),`handled`):{insert:vE(t,r)}},codec:{clipboardText:e=>Lv(r,`@专家团:{0}\xA0`,[d.find(t=>t.id===e)?.name??Lv(r,`已移除团队(请重新选择)`)]),serialize:async e=>{let[t,n]=await Promise.all([Fv(m),fE(m.getCatalog())]);d=t.teams.map(e=>RT(e,r));let i=d.find(t=>t.id===e);if(!i||!t.enabledTeams.includes(e)||i.members.some(e=>!n.enabled.includes(e.expertSlug)||!n.experts.some(t=>t.slug===e.expertSlug&&!t.conflict)))throw Error(Lv(r,`团队已停用或成员失效,请修复后再发送。`));return Lv(r,`@专家团:{0}\xA0`,[i.name])}}}));let h=[...new Set([...SD,...xv(i).experts.map(e=>e.division)])];for(let[r,d]of h.entries()){let f={trigger:`@`,name:JD(d),order:100+r,showGroupTitle:!1,candidates:async(e,t)=>{let r=await aO(i).catch(()=>void 0);if(r===void 0)return[];let a=r.enabled;s(a);let o=String(t.query??``).toLowerCase();return r.experts.filter(e=>e.division===d&&a.has(e.slug)&&(o===``||OD(e,o))).map(e=>({name:VD(e,n()),hint:e.slug,section:qD(d,n())}))},onPick:e=>{let t=e.candidate.hint??``,r=xv(i).experts.find(e=>e.slug===t&&xv(i).enabled.has(t));if(r===void 0)return;let a=YD(r,n()),o=l(e.session.sessionId);return o===void 0?{insert:a}:u(o,a,e.session.sessionId,e.span)?`handled`:void 0},...r===0?{warm:()=>c()}:{},lexicon:()=>a===void 0?void 0:KD(xv(i).experts.filter(e=>e.division===d),a,n()),subscribeLexicon:(e,t)=>(o.add(t),()=>{o.delete(t)}),codec:{clipboardText:e=>XD(e,n(),xv(i).experts),serialize:async e=>{let r=await aO(i);if(!r.experts.some(t=>t.slug===e)||!r.enabled.has(e))throw Error(t(`custom.unavailable`));return XD(e,n(),r.experts)}}};p.push(e.inputTriggers.registerSource(f))}}catch(e){for(let e of p.reverse())e();throw e}return()=>{for(let e of p.reverse())e()}};return e.effect(()=>{let t=n(),r=h(t),i=e.locale.subscribe(()=>{let e=n();if(e!==t){r();try{r=h(e),t=e}catch(e){r=h(t),console.error(`[agency-agents] @ 菜单分组语言切换失败,已恢复原语言来源:`,e)}}});return()=>{i(),r()}},`agency-agents: @ menu sources`),()=>{r()}}return n.AgencySettingsPanel=TO,n.AgentsButton=bO,n.CARD_SETTINGS_CSS=tO,n.COMPOSER_CSS=$D,n.COPY_PROMPT_FEEDBACK_MS=mD,n.CSS=nO,n.EXPERT_AVATAR_POOL_INDEXES=PD,n.SETTINGS_CSS=eO,n.SETTINGS_GITHUB_LINKS=xD,n.apply=DO,n.buildExpertMentionLexicon=KD,n.buildExpertReference=YD,n.compareExpertName=TD,n.createPluginUpdateIcon=gD,n.expertAvatarIndex=ND,n.expertAvatarIndexForDivision=zD,n.expertDetectText=gO,n.expertDivisionFilterValues=AD,n.expertMentionFromReference=XD,n.filterExperts=kD,n.formatExpertMention=WD,n.formatExpertMentionInsertion=GD,n.inject=EO,n.inputTriggerCandidateName=VD,n.inputTriggerPickName=UD,n.inputTriggerSourceId=JD,n.inputTriggerSourceName=qD,n.insertExpertReference=vO,n.insertSelectedExpert=yO,n.keepComposerFocus=fO,n.matchExpertQuery=OD,n.normalizeExpertQuery=DD,n.resolveExpertMenuPosition=pO,n.resolveReferenceInsertionTarget=hO,n.resolveTargetSessionId=mO,n.sortExpertsByEnabled=jD,n.sortExpertsByOrder=MD,n.writeEnabled=oO,n.writeErrorKey=rO,n.writeErrorMessage=iO,t.exports}});
597
+ `,document.head.appendChild(e),()=>{e.remove()}},`agency-agents: style`),e.effect(()=>e.locale.register(pD,{zh:DE,en:OE}),`agency-agents: dictionaries`),e.effect(()=>aD({endpoint:`/api/michengai/dsh-agency-agents/update`,packageName:`@michengai/dsh-agency-agents`,titleRowSelector:`.aag-title-row`,linksSelector:`.aag-settings-links`,zhName:`专家`,enName:`Experts`,createIcon:gD}),`agency-agents: plugin update ui`);let t=e.locale.bind(pD),n=()=>e.locale.getSnapshot().active===`en`?`en`:`zh`,r=await e.remote.$mount(JE),i=e.get(`remote.agencyAgents`);if(i===void 0)throw Error(Lv(n(),`agency-agents Remote 挂载后不可用`));let a,o=new Set,s=e=>{if(!(a!==void 0&&a.size===e.size&&[...e].every(e=>a?.has(e)===!0))){a=new Set(e);for(let e of o)e()}},c=()=>{aO(i).then(e=>s(e.enabled)).catch(e=>console.warn(`[agency-agents] 名册刷新失败:`,e))};e.effect(()=>Sv(i,()=>{s(xv(i).enabled);for(let e of o)e()}),`agency-agents: catalog changes`),typeof i.getTeams==`function`&&Fv(i).catch(e=>console.warn(`[agency-agents] 专家团预加载失败:`,e)),await aO(i).catch(e=>console.warn(`[agency-agents] 初始名册读取失败,设置页可重试:`,e)),e.effect(()=>{let t=dD(async()=>{if(!i.getTeams)return new Map;let e=i,t=jv(e)??await Fv(e),r=xv(i).experts,a=n();return{members:new Map(Object.entries(t.nativeMembers??{}).flatMap(([e,t])=>{let n=r.find(e=>e.slug===t&&!e.conflict);return n?[[e,BD(n,a)]]:[]})),teams:t.teams.map(e=>({names:[...new Set([e.name,RT(e,a).name])],label:RT(e,a).name}))}},e=>console.warn(`[agency-agents] 原生成员显示名读取失败:`,e)),r=e.locale.subscribe(()=>{t.refresh()}),a=Sv(i,()=>{t.refresh()});return()=>{r(),a(),t.dispose()}},`agency-agents: native member names`);let l=t=>hO(e.sessions,t,e=>e.get(`conversation`)),u=(r,a,o,s)=>{if(r===void 0)return!1;let c=e.sessions,l=mO(c,o),u=l===void 0?void 0:c.scope?.(l)??c.binding?.(l)?.ctx,d=xv(i).experts.find(e=>e.slug===a.ref),f=d===void 0?void 0:wE(d,n());return vO({state:r.state,insertReference:(e,t)=>r.insertReference(e,t),insertText:(e,t)=>u?.bail(u,`slash/input-insert-text`,{text:e,span:t})===!0,notify:(e,t)=>r.notify?.(e,t)},a,f,s,t(`discovery.exampleFailed`))},d=[],f=async(t,r,i,a,o)=>{if(!t)return!1;d=[...d.filter(e=>e.id!==r.id),r];let s=e.sessions,c=mO(s,a),l=c===void 0?void 0:s.scope?.(c)??s.binding?.(c)?.ctx;return yE({state:t.state,insertReference:(e,n)=>t.insertReference(e,n),insertText:(e,t)=>l?.bail(l,`slash/input-insert-text`,{text:e,span:t})===!0,notify:(e,n)=>t.notify?.(e,n)},r,i,o,n())},m=e=>{let t=()=>l(e);return{prepareTeamSelection:()=>{let n=t();return(r,i)=>n!==void 0&&t()===n&&f(n,r,i,e)},insertReference:n=>u(t(),n,e),prepareInsertion:()=>{let n=t();return r=>n!==void 0&&t()===n&&u(n,r,e)}}};e.slots.inject(`settings.section`,()=>e.slots.register({name:`settings.section`,id:`agency-agents`,order:16,label:()=>t(`settings.nav`),locale:pD,icon:`expert`},e=>p.default.createElement(TO,{...e,remote:i,getActive:n,onEnabledChange:s,prepareTeamSelection:m().prepareTeamSelection}))),e.slots.inject(`conversation.input.left`,()=>e.slots.register({name:`conversation.input.left`,id:`agency-agents`,order:0,locale:pD,inject:m},e=>p.default.createElement(bO,{...e,remote:i,getActive:n,onEnabledChange:s})));let h=r=>{let p=[];try{let m=i;typeof m.getTeams==`function`&&p.push(e.inputTriggers.registerSource({trigger:`@`,name:_E,order:99,candidates:async(e,t)=>{let n=jv(m),i=n??await Fv(m);return n&&Fv(m).catch(e=>console.warn(`[agency-agents] 专家团刷新失败:`,e)),d=i.teams.map(e=>RT(e,r)),d.filter(e=>i.enabledTeams.includes(e.id)&&`${e.name} ${e.description}`.toLowerCase().includes(String(t.query??``).toLowerCase())).map(e=>({name:`${e.name} · ${Lv(r,`专家团`)}`,hint:e.id,section:Lv(r,`专家团`)}))},onPick:e=>{let t=d.find(t=>t.id===e.candidate.hint);if(!t)return;let n=l(e.session.sessionId);return n?(f(n,t,void 0,e.session.sessionId,e.span).catch(e=>n.notify?.(`error`,e instanceof Error?e.message:Lv(r,`操作失败。`))),`handled`):{insert:vE(t,r)}},codec:{clipboardText:e=>Lv(r,`@专家团:{0}\xA0`,[d.find(t=>t.id===e)?.name??Lv(r,`已移除团队(请重新选择)`)]),serialize:async e=>{let[t,n]=await Promise.all([Fv(m),fE(m.getCatalog())]);d=t.teams.map(e=>RT(e,r));let i=d.find(t=>t.id===e);if(!i||!t.enabledTeams.includes(e)||i.members.some(e=>!n.enabled.includes(e.expertSlug)||!n.experts.some(t=>t.slug===e.expertSlug&&!t.conflict)))throw Error(Lv(r,`团队已停用或成员失效,请修复后再发送。`));return Lv(r,`@专家团:{0}\xA0`,[i.name])}}}));let h=[...new Set([...SD,...xv(i).experts.map(e=>e.division)])];for(let[r,d]of h.entries()){let f={trigger:`@`,name:JD(d),order:100+r,showGroupTitle:!1,candidates:async(e,t)=>{let r=await aO(i).catch(()=>void 0);if(r===void 0)return[];let a=r.enabled;s(a);let o=String(t.query??``).toLowerCase();return r.experts.filter(e=>e.division===d&&a.has(e.slug)&&(o===``||OD(e,o))).map(e=>({name:VD(e,n()),hint:e.slug,section:qD(d,n())}))},onPick:e=>{let t=e.candidate.hint??``,r=xv(i).experts.find(e=>e.slug===t&&xv(i).enabled.has(t));if(r===void 0)return;let a=YD(r,n()),o=l(e.session.sessionId);return o===void 0?{insert:a}:u(o,a,e.session.sessionId,e.span)?`handled`:void 0},...r===0?{warm:()=>c()}:{},lexicon:()=>a===void 0?void 0:KD(xv(i).experts.filter(e=>e.division===d),a,n()),subscribeLexicon:(e,t)=>(o.add(t),()=>{o.delete(t)}),codec:{clipboardText:e=>XD(e,n(),xv(i).experts),serialize:async e=>{let r=await aO(i);if(!r.experts.some(t=>t.slug===e)||!r.enabled.has(e))throw Error(t(`custom.unavailable`));return XD(e,n(),r.experts)}}};p.push(e.inputTriggers.registerSource(f))}}catch(e){for(let e of p.reverse())e();throw e}return()=>{for(let e of p.reverse())e()}};return e.effect(()=>{let t=n(),r=h(t),i=e.locale.subscribe(()=>{let e=n();if(e!==t){r();try{r=h(e),t=e}catch(e){r=h(t),console.error(`[agency-agents] @ 菜单分组语言切换失败,已恢复原语言来源:`,e)}}});return()=>{i(),r()}},`agency-agents: @ menu sources`),()=>{r()}}return n.AgencySettingsPanel=TO,n.AgentsButton=bO,n.CARD_SETTINGS_CSS=tO,n.COMPOSER_CSS=$D,n.COPY_PROMPT_FEEDBACK_MS=mD,n.CSS=nO,n.EXPERT_AVATAR_POOL_INDEXES=PD,n.SETTINGS_CSS=eO,n.SETTINGS_GITHUB_LINKS=xD,n.apply=DO,n.buildExpertMentionLexicon=KD,n.buildExpertReference=YD,n.compareExpertName=TD,n.createPluginUpdateIcon=gD,n.expertAvatarIndex=ND,n.expertAvatarIndexForDivision=zD,n.expertDetectText=gO,n.expertDivisionFilterValues=AD,n.expertMentionFromReference=XD,n.filterExperts=kD,n.formatExpertMention=WD,n.formatExpertMentionInsertion=GD,n.inject=EO,n.inputTriggerCandidateName=VD,n.inputTriggerPickName=UD,n.inputTriggerSourceId=JD,n.inputTriggerSourceName=qD,n.insertExpertReference=vO,n.insertSelectedExpert=yO,n.keepComposerFocus=fO,n.matchExpertQuery=OD,n.normalizeExpertQuery=DD,n.resolveExpertMenuPosition=pO,n.resolveReferenceInsertionTarget=hO,n.resolveTargetSessionId=mO,n.sortExpertsByEnabled=jD,n.sortExpertsByOrder=MD,n.writeEnabled=oO,n.writeErrorKey=rO,n.writeErrorMessage=iO,t.exports}});
package/lib/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import { C as unquote, P as ZH_NAME, S as truncate, _ as resolveCatalogRoot, a as SUMMON_EXPERTS_MAX, b as stripBom, c as createAgencyPersonaSource, d as loadCatalog, f as mapPool, g as readLocalizedExpertPrompt, h as readExpertPrompt, i as SUMMON_EXPERTS_CONCURRENCY, l as inject, m as parseFrontmatter, n as Config, o as SUMMON_TASK_MAX_CHARS, p as name, r as DEFAULT_DIVISIONS, s as apply, t as AGENCY_PERSONA_SERVICE, u as liveSchemaField, v as resolveExpert, w as validateSummonSpecs, x as toSummonItemResult, y as sanitize } from "./src-BpLLZoAU.js";
1
+ import { C as unquote, P as ZH_NAME, S as truncate, _ as resolveCatalogRoot, a as SUMMON_EXPERTS_MAX, b as stripBom, c as createAgencyPersonaSource, d as loadCatalog, f as mapPool, g as readLocalizedExpertPrompt, h as readExpertPrompt, i as SUMMON_EXPERTS_CONCURRENCY, l as inject, m as parseFrontmatter, n as Config, o as SUMMON_TASK_MAX_CHARS, p as name, r as DEFAULT_DIVISIONS, s as apply, t as AGENCY_PERSONA_SERVICE, u as liveSchemaField, v as resolveExpert, w as validateSummonSpecs, x as toSummonItemResult, y as sanitize } from "./src-DhS1geoQ.js";
2
2
  export { AGENCY_PERSONA_SERVICE, Config, DEFAULT_DIVISIONS, SUMMON_EXPERTS_CONCURRENCY, SUMMON_EXPERTS_MAX, SUMMON_TASK_MAX_CHARS, ZH_NAME, apply, createAgencyPersonaSource, inject, liveSchemaField, loadCatalog, mapPool, name, parseFrontmatter, readExpertPrompt, readLocalizedExpertPrompt, resolveCatalogRoot, resolveExpert, sanitize, stripBom, toSummonItemResult, truncate, unquote, validateSummonSpecs };
package/lib/remote.js CHANGED
@@ -1,4 +1,4 @@
1
- import { A as CUSTOM_EXPERT_SLUG, D as readHostLocale, E as formatHost, F as AGENCY_TEAM_SERVICE, I as teamInputSchema, L as teamSnapshotSchema, M as customExpertInputSchema, N as expertEditSchema, O as settingsNamespaceCompat, R as teamText, T as nativeTeamMemberName, g as readLocalizedExpertPrompt, h as readExpertPrompt, j as catalogSnapshotSchema, k as AGENCY_LIBRARY_SERVICE, t as AGENCY_PERSONA_SERVICE } from "./src-BpLLZoAU.js";
1
+ import { A as CUSTOM_EXPERT_SLUG, D as readHostLocale, E as formatHost, F as AGENCY_TEAM_SERVICE, I as teamInputSchema, L as teamSnapshotSchema, M as customExpertInputSchema, N as expertEditSchema, O as settingsNamespaceCompat, R as teamText, T as nativeTeamMemberName, g as readLocalizedExpertPrompt, h as readExpertPrompt, j as catalogSnapshotSchema, k as AGENCY_LIBRARY_SERVICE, t as AGENCY_PERSONA_SERVICE } from "./src-DhS1geoQ.js";
2
2
  import { z } from "zod";
3
3
  import { Remote, TypertRemoteService } from "@deepseek-ai/dsh-typert-protocol";
4
4
  //#region src/remote-contract.ts
@@ -1874,6 +1874,7 @@ const zhHost = {
1874
1874
  "error.maxDepth": "agency-agents 配置 maxDepth 必须是正安全整数",
1875
1875
  "error.settingsMissing": "agency-agents 设置区尚未注册",
1876
1876
  "error.settingsLiveUnsupported": "当前 DSH settings 服务不支持 installSection,且 agency-agents 配置没有可实时更新的字段。",
1877
+ "error.subagentsUnavailable": "当前宿主 subagents 服务未提供可用的子代理启动方法 (start / startActivation)。",
1877
1878
  "error.personaSourceUnavailable": "专家提示词服务尚未就绪,请稍后重试。",
1878
1879
  "list.empty": "暂无可用专家。",
1879
1880
  "list.emptyDivision": "没有匹配分区 \"{division}\" 的专家。",
@@ -1910,6 +1911,7 @@ const enHost = {
1910
1911
  "error.maxDepth": "agency-agents config maxDepth must be a positive safe integer",
1911
1912
  "error.settingsMissing": "agency-agents settings section is not registered",
1912
1913
  "error.settingsLiveUnsupported": "This DSH settings service has no installSection, and the agency-agents config has no live-updating fields.",
1914
+ "error.subagentsUnavailable": "The host subagents service has no available launch method (start / startActivation).",
1913
1915
  "error.personaSourceUnavailable": "The expert prompt service is not ready. Try again shortly.",
1914
1916
  "list.empty": "No experts available.",
1915
1917
  "list.emptyDivision": "No experts matched division \"{division}\".",
@@ -3315,6 +3317,57 @@ function apply(ctx, config) {
3315
3317
  };
3316
3318
  }
3317
3319
  }));
3320
+ async function awaitSubagentRun(run, signal) {
3321
+ let disposal;
3322
+ const dispose = () => {
3323
+ if (disposal === void 0) try {
3324
+ disposal = run.dispose();
3325
+ } catch (error) {
3326
+ disposal = Promise.reject(error);
3327
+ }
3328
+ return disposal;
3329
+ };
3330
+ if (signal === void 0) try {
3331
+ return await run.result;
3332
+ } finally {
3333
+ await dispose();
3334
+ }
3335
+ let rejectAborted;
3336
+ const aborted = new Promise((_resolve, reject) => {
3337
+ rejectAborted = reject;
3338
+ });
3339
+ const onAbort = () => {
3340
+ dispose().catch(() => void 0);
3341
+ rejectAborted(signal.reason ?? /* @__PURE__ */ new Error());
3342
+ };
3343
+ signal.addEventListener("abort", onAbort, { once: true });
3344
+ try {
3345
+ if (signal.aborted) {
3346
+ onAbort();
3347
+ await dispose();
3348
+ throw signal.reason ?? /* @__PURE__ */ new Error();
3349
+ }
3350
+ return await Promise.race([run.result, aborted]);
3351
+ } finally {
3352
+ signal.removeEventListener("abort", onAbort);
3353
+ await dispose();
3354
+ }
3355
+ }
3356
+ async function startSubagentRun(providerName, options) {
3357
+ const service = ctx.subagents;
3358
+ if (typeof service.start === "function") return service.start(providerName, options);
3359
+ if (typeof service.startActivation === "function") {
3360
+ const { label, signal, ...request } = options;
3361
+ return service.startActivation({
3362
+ provider: providerName,
3363
+ label: label ?? providerName,
3364
+ request,
3365
+ signal,
3366
+ delivery: "caller"
3367
+ });
3368
+ }
3369
+ throw new Error(formatHost(activeLocale(), "error.subagentsUnavailable"));
3370
+ }
3318
3371
  async function runExpert(query, task, exec) {
3319
3372
  const locale = activeLocale();
3320
3373
  const taskText = normalizeTask(task, locale);
@@ -3327,7 +3380,7 @@ function apply(ctx, config) {
3327
3380
  const expert = resolveExpert((await library.catalog()).experts.filter((expert) => !expert.conflict), query, locale);
3328
3381
  if (!enabledSet().has(expert.slug)) throw new Error(formatHost(locale, "error.expertDisabled", { name: localizedExpertName(expert, locale) }));
3329
3382
  const { prompt: persona } = await personaSource.getPrompt(expert.slug, expert.division, locale);
3330
- const run = await ctx.subagents.start(config.provider, {
3383
+ const result = await awaitSubagentRun(await startSubagentRun(config.provider, {
3331
3384
  label: localizedExpertName(expert, locale),
3332
3385
  prompt: [{
3333
3386
  type: "text",
@@ -3345,24 +3398,19 @@ function apply(ctx, config) {
3345
3398
  ] },
3346
3399
  ...maxDepth === void 0 ? {} : { maxDepth },
3347
3400
  signal: exec.signal
3348
- });
3349
- try {
3350
- const result = await run.result;
3351
- const text = textBlocks(result.output);
3352
- if (result.stopReason !== "completed") {
3353
- const detail = text.length > 0 ? formatHost(locale, "error.partialOutput", { text }) : "";
3354
- throw new Error(formatHost(locale, "error.expertRun", {
3355
- reason: result.stopReason,
3356
- detail
3357
- }));
3358
- }
3359
- return {
3360
- expert: localizedExpertName(expert, locale),
3361
- answer: text
3362
- };
3363
- } finally {
3364
- await run.dispose();
3401
+ }), exec.signal);
3402
+ const text = textBlocks(result.output);
3403
+ if (result.stopReason !== "completed") {
3404
+ const detail = text.length > 0 ? formatHost(locale, "error.partialOutput", { text }) : "";
3405
+ throw new Error(formatHost(locale, "error.expertRun", {
3406
+ reason: result.stopReason,
3407
+ detail
3408
+ }));
3365
3409
  }
3410
+ return {
3411
+ expert: localizedExpertName(expert, locale),
3412
+ answer: text
3413
+ };
3366
3414
  }
3367
3415
  ctx.tools.register(defineTool({
3368
3416
  name: "summon_expert",
@@ -3554,7 +3602,7 @@ function apply(ctx, config) {
3554
3602
  enabled: catalog.enabled,
3555
3603
  task: String(args.task ?? ""),
3556
3604
  revision: snapshot.revision,
3557
- signal: exec.signal ?? new AbortController().signal,
3605
+ signal: exec.signal,
3558
3606
  agent: exec.agent,
3559
3607
  service: engine.service,
3560
3608
  provider: config.provider,
@@ -3578,7 +3626,7 @@ function apply(ctx, config) {
3578
3626
  readPersona: async (expert) => (await personaSource.getPrompt(expert.slug, expert.division, locale)).prompt,
3579
3627
  run: async (member) => {
3580
3628
  exec.signal?.throwIfAborted();
3581
- const run = await ctx.subagents.start(config.provider, {
3629
+ const value = await awaitSubagentRun(await startSubagentRun(config.provider, {
3582
3630
  label: member.name,
3583
3631
  parent: exec.agent,
3584
3632
  prompt: [{
@@ -3596,14 +3644,9 @@ function apply(ctx, config) {
3596
3644
  ] },
3597
3645
  ...maxDepth === void 0 ? {} : { maxDepth },
3598
3646
  signal: exec.signal
3599
- });
3600
- try {
3601
- const value = await run.result;
3602
- if (value.stopReason !== "completed") throw new Error(teamTx("成员未完成:{0}。{1}", [value.stopReason, textBlocks(value.output)]));
3603
- return textBlocks(value.output);
3604
- } finally {
3605
- await run.dispose();
3606
- }
3647
+ }), exec.signal);
3648
+ if (value.stopReason !== "completed") throw new Error(teamTx("成员未完成:{0}。{1}", [value.stopReason, textBlocks(value.output)]));
3649
+ return textBlocks(value.output);
3607
3650
  }
3608
3651
  });
3609
3652
  return { report: JSON.stringify({
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@michengai/dsh-agency-agents",
3
3
  "description": "DSH Agency Agents — 为 DeepSeek Harness 提供 331 名可召唤的专业智能体 · 331 summonable domain experts for DeepSeek Harness",
4
- "version": "1.0.17",
4
+ "version": "1.0.18",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@11.22.0",
7
7
  "engines": {