@michengai/dsh-agency-agents 1.0.17 → 1.0.19

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,20 @@ This file records features and upgrade boundaries. npm and GitHub Releases remai
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ ## 1.0.19 - 2026-10-15
10
+
11
+ - Support DSH `0.2.1-alpha.3` while retaining all existing supported versions; pin development `@deepseek-ai/dsh*` dependencies to host `0.2.1-alpha.3` and Cordis to `4.0.5-alpha.2`.
12
+ - Drop removed host package `@deepseek-ai/dsh-invariants` from development dependencies (gone since alpha.1).
13
+ - Adapt the subagent breaking change: start-time `persona` / `toolFilter` are gone on DSH 0.2.1-alpha.3+; use `startActivation` with `delivery: 'caller'`, and restore expert persona plus delegated-tool denylist on the child's `agent/created` via a scoped persona section and `tools.restrict`. Older hosts that still expose `ctx.subagents.start` keep the previous start-time fields.
14
+ - Agent Team continues to use `sendMessage` direct delivery.
15
+
16
+ ## 1.0.18 - 2026-10-13
17
+
18
+ - 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.
19
+ - 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`.
20
+ - Stopping the parent session now stops subagents started by this plugin instead of waiting for them to finish.
21
+ - The plugin supports the host's newer subagent start API and still works with the previous API.
22
+
9
23
  ## 1.0.17 - 2026-10-12
10
24
 
11
25
  - Synchronized the latest experts from upstream `agency-agents` and `agency-agents-zh`, expanding the bundled roster to 331 specialists.
@@ -6,6 +6,20 @@
6
6
 
7
7
  ## 未发布
8
8
 
9
+ ## 1.0.19 - 2026-10-15
10
+
11
+ - 支持 DSH `0.2.1-alpha.3`,继续兼容既有已支持版本;开发依赖中的 `@deepseek-ai/dsh*` 对齐宿主 `0.2.1-alpha.3`,Cordis 对齐 `4.0.5-alpha.2`。
12
+ - 从开发依赖中移除宿主已删除的 `@deepseek-ai/dsh-invariants`(自 alpha.1 起不再提供)。
13
+ - 适配子 Agent 破坏性变更:DSH 0.2.1-alpha.3+ 已移除启动期 `persona` / `toolFilter`;改走 `startActivation`(`delivery: 'caller'`),并在子 Agent `agent/created` 时以 scoped persona 与 `tools.restrict` 恢复专家人格与委派工具黑名单。仍提供 `ctx.subagents.start` 的旧宿主保持原启动期字段。
14
+ - Agent Team 仍通过 `sendMessage` 直投。
15
+
16
+ ## 1.0.18 - 2026-10-13
17
+
18
+ - 原生团队成员卡片会显示专家的本地化名称,并兼容宿主当前和上一版卡片结构。任务标题和 Owner 标识保持原样。
19
+ - lead 卡片会在任务标题与专家团名称精确匹配时显示该团队名。无法匹配或对应多个团队时,仍显示 `lead`。
20
+ - 停止父会话时,本插件启动的子代理会立即结束,不再等到子代理自己跑完。
21
+ - 兼容宿主新的子代理启动接口,同时保留旧接口。
22
+
9
23
  ## 1.0.17 - 2026-10-12
10
24
 
11
25
  - 同步英文原版(agency-agents)与中文版(agency-agents-zh)最新专家库,内置专家扩充至 331 位。
package/README.md CHANGED
@@ -15,7 +15,7 @@
15
15
  [![npm package](https://img.shields.io/npm/v/%40michengai%2Fdsh-agency-agents.svg?label=npm%20package)](https://www.npmjs.com/package/@michengai/dsh-agency-agents)
16
16
  [![npm downloads](https://img.shields.io/npm/dt/%40michengai%2Fdsh-agency-agents.svg?label=npm%20downloads)](https://www.npmjs.com/package/@michengai/dsh-agency-agents)
17
17
  [![DSH Web Plugin](https://img.shields.io/badge/DSH%20Web-Plugin-0f766e.svg)](https://github.com/MichengAI/dsh-agency-agents)
18
- [![DSH supported through 0.2.1-alpha.2](https://img.shields.io/badge/DSH-up%20to%200.2.1--alpha.2-2563eb.svg)](#prerequisites)
18
+ [![DSH supported through 0.2.1-alpha.3](https://img.shields.io/badge/DSH-up%20to%200.2.1--alpha.3-2563eb.svg)](#prerequisites)
19
19
  </div>
20
20
 
21
21
  > DSH Agency Agents is a community-maintained DeepSeek Harness (DSH) plugin, not an official DeepSeek AI product.
@@ -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.19; 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.
@@ -120,7 +120,7 @@ DSH `dsh.client.inject` controls browser module loading order. Missing graph ent
120
120
 
121
121
  ## Installation
122
122
 
123
- Supported DeepSeek Harness versions: `0.1.2-rc.1`, `0.1.5-rc.1`, `0.1.5-rc.2`, `0.1.5-rc.3`, `0.1.7-rc.1`, `0.1.7-rc.2`, `0.2.0-rc.1`, `0.2.0-rc.2`、`0.2.1-alpha.2`, and `0.2.1-alpha.2`. Older alpha releases (0.1.6/0.1.7) are not supported. The host is supplied by your existing CLI or Desktop installation; the plugin does not install another copy. Future host versions require separate compatibility validation.
123
+ Supported DeepSeek Harness versions: `0.1.2-rc.1`, `0.1.5-rc.1`, `0.1.5-rc.2`, `0.1.5-rc.3`, `0.1.7-rc.1`, `0.1.7-rc.2`, `0.2.0-rc.1`, `0.2.0-rc.2`, `0.2.1-alpha.2`, and `0.2.1-alpha.3`. Older alpha releases (0.1.6/0.1.7) are not supported. The host is supplied by your existing CLI or Desktop installation; the plugin does not install another copy. Future host versions require separate compatibility validation.
124
124
 
125
125
  The installation commands below use the official npm registry.
126
126
 
package/README.zh-CN.md CHANGED
@@ -15,7 +15,7 @@
15
15
  [![npm package](https://img.shields.io/npm/v/%40michengai%2Fdsh-agency-agents.svg?label=npm%20package)](https://www.npmjs.com/package/@michengai/dsh-agency-agents)
16
16
  [![npm 下载量](https://img.shields.io/npm/dt/%40michengai%2Fdsh-agency-agents.svg?label=npm%20%E4%B8%8B%E8%BD%BD%E9%87%8F)](https://www.npmjs.com/package/@michengai/dsh-agency-agents)
17
17
  [![DSH Web Plugin](https://img.shields.io/badge/DSH%20Web-Plugin-0f766e.svg)](https://github.com/MichengAI/dsh-agency-agents)
18
- [![DSH 支持至 0.2.1-alpha.2](https://img.shields.io/badge/DSH-up%20to%200.2.1--alpha.2-2563eb.svg)](#前置条件)
18
+ [![DSH 支持至 0.2.1-alpha.3](https://img.shields.io/badge/DSH-up%20to%200.2.1--alpha.3-2563eb.svg)](#前置条件)
19
19
  </div>
20
20
 
21
21
  > DSH Agency Agents 是社区维护的 DeepSeek Harness(DSH)插件,并非 DeepSeek AI 官方产品。
@@ -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.19,正式发行以 npm 和 GitHub Releases 为准。完整改动见[更新日志](CHANGELOG.zh-CN.md),双语版本说明见[发行说明](RELEASE_NOTES.md)。升级保留已有专家配置;回退旧版前先备份设置,旧版不具备团队功能。
73
73
  ## 界面预览
74
74
 
75
75
  以下为 1.0.0 中文界面截图,专家与专家团共用同一个设置页面。
@@ -120,7 +120,7 @@ DSH 的 `dsh.client.inject` 声明浏览器模块的加载顺序;宿主模块
120
120
 
121
121
  ## 安装
122
122
 
123
- 支持的 DeepSeek Harness 版本:`0.1.2-rc.1`、`0.1.5-rc.1`、`0.1.5-rc.2`、`0.1.5-rc.3`、`0.1.7-rc.1`、`0.1.7-rc.2`、`0.2.0-rc.1`、`0.2.0-rc.2`、`0.2.1-alpha.2`。不再支持旧版 Alpha(0.1.6/0.1.7)。主程序由现有 CLI 或 Desktop 提供,插件不会另行安装;后续宿主版本需另行验证兼容性。
123
+ 支持的 DeepSeek Harness 版本:`0.1.2-rc.1`、`0.1.5-rc.1`、`0.1.5-rc.2`、`0.1.5-rc.3`、`0.1.7-rc.1`、`0.1.7-rc.2`、`0.2.0-rc.1`、`0.2.0-rc.2`、`0.2.1-alpha.2`、`0.2.1-alpha.3`。不再支持旧版 Alpha(0.1.6/0.1.7)。主程序由现有 CLI 或 Desktop 提供,插件不会另行安装;后续宿主版本需另行验证兼容性。
124
124
 
125
125
  以下安装命令使用官方 npm 源。
126
126
 
package/RELEASE_NOTES.md CHANGED
@@ -1,15 +1,15 @@
1
1
  ## 中文说明
2
2
 
3
- - 同步英文原版(agency-agents)与中文版(agency-agents-zh)最新专家库,内置专家扩充至 331 位。
4
- - 新增 9 位英文原版专家并提供中文翻译:ATS 简历校验架构师、国内网络架构工程师、PDF 引擎架构师、平台工程师、ServiceNow 平台导师、通用文档编译器架构师、开发者社区建设专家、开发者体验工程师、专注音乐架构师。
5
- - 新增 1 位中文版特有专家并补充纯英文定义:搜索增长编排器。
3
+ - 支持 DSH `0.2.1-alpha.3`,继续兼容既有已支持版本;开发依赖中的 `@deepseek-ai/dsh*` 对齐宿主 `0.2.1-alpha.3`,Cordis 对齐 `4.0.5-alpha.2`。
4
+ - 从开发依赖中移除宿主已删除的 `@deepseek-ai/dsh-invariants`(自 alpha.1 起不再提供)。
5
+ - 适配子 Agent 破坏性变更:DSH 0.2.1-alpha.3+ 已移除启动期 `persona` / `toolFilter`;改走 `startActivation`(`delivery: 'caller'`),并在子 Agent `agent/created` 时以 scoped persona 与 `tools.restrict` 恢复专家人格与委派工具黑名单。仍提供 `ctx.subagents.start` 的旧宿主保持原启动期字段。
6
+ - Agent Team 仍通过 `sendMessage` 直投。
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.
14
-
15
-
12
+ - Support DSH `0.2.1-alpha.3` while retaining all existing supported versions; pin development `@deepseek-ai/dsh*` dependencies to host `0.2.1-alpha.3` and Cordis to `4.0.5-alpha.2`.
13
+ - Drop removed host package `@deepseek-ai/dsh-invariants` from development dependencies (gone since alpha.1).
14
+ - Adapt the subagent breaking change: start-time `persona` / `toolFilter` are gone on DSH 0.2.1-alpha.3+; use `startActivation` with `delivery: 'caller'`, and restore expert persona plus delegated-tool denylist on the child's `agent/created` via a scoped persona section and `tools.restrict`. Older hosts that still expose `ctx.subagents.start` keep the previous start-time fields.
15
+ - Agent Team continues to use `sendMessage` direct delivery.
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}});
@@ -55,7 +55,7 @@ interface Expert {
55
55
  interface Config {
56
56
  /** Directory holding the `division/*.md` persona files. */
57
57
  root: string;
58
- /** `ctx.subagents` provider name (default `spawn`; `fork` also supports `persona`). */
58
+ /** `ctx.subagents` provider name (default `spawn`). */
59
59
  provider: string;
60
60
  /** Division directory names to scan under `root`. */
61
61
  divisions: string[];
package/lib/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { C as stripBom, D as validateSummonSpecs, E as unquote, O as ZH_NAME, S as sanitize, T as truncate, _ as parseFrontmatter, a as SUMMON_EXPERTS_CONCURRENCY, b as resolveCatalogRoot, c as SummonExpertItemResult, d as createAgencyPersonaSource, f as inject, g as name, h as mapPool, i as DEFAULT_DIVISIONS, l as SummonExpertSpec, m as loadCatalog, n as AgencyPersonaSource, o as SUMMON_EXPERTS_MAX, p as liveSchemaField, r as Config, s as SUMMON_TASK_MAX_CHARS, t as AGENCY_PERSONA_SERVICE, u as apply, v as readExpertPrompt, w as toSummonItemResult, x as resolveExpert, y as readLocalizedExpertPrompt } from "./index-ii_RbYV_.js";
1
+ import { C as stripBom, D as validateSummonSpecs, E as unquote, O as ZH_NAME, S as sanitize, T as truncate, _ as parseFrontmatter, a as SUMMON_EXPERTS_CONCURRENCY, b as resolveCatalogRoot, c as SummonExpertItemResult, d as createAgencyPersonaSource, f as inject, g as name, h as mapPool, i as DEFAULT_DIVISIONS, l as SummonExpertSpec, m as loadCatalog, n as AgencyPersonaSource, o as SUMMON_EXPERTS_MAX, p as liveSchemaField, r as Config, s as SUMMON_TASK_MAX_CHARS, t as AGENCY_PERSONA_SERVICE, u as apply, v as readExpertPrompt, w as toSummonItemResult, x as resolveExpert, y as readLocalizedExpertPrompt } from "./index-DYBxMSk_.js";
2
2
  export { AGENCY_PERSONA_SERVICE, AgencyPersonaSource, Config, DEFAULT_DIVISIONS, SUMMON_EXPERTS_CONCURRENCY, SUMMON_EXPERTS_MAX, SUMMON_TASK_MAX_CHARS, SummonExpertItemResult, SummonExpertSpec, ZH_NAME, apply, createAgencyPersonaSource, inject, liveSchemaField, loadCatalog, mapPool, name, parseFrontmatter, readExpertPrompt, readLocalizedExpertPrompt, resolveCatalogRoot, resolveExpert, sanitize, stripBom, toSummonItemResult, truncate, unquote, validateSummonSpecs };
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-uXWOANVF.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.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { v as readExpertPrompt, y as readLocalizedExpertPrompt } from "./index-ii_RbYV_.js";
1
+ import { v as readExpertPrompt, y as readLocalizedExpertPrompt } from "./index-DYBxMSk_.js";
2
2
  import { z } from "zod";
3
3
  import { TypertRemoteService } from "@deepseek-ai/dsh-typert-protocol";
4
4
  import { Context } from "@deepseek-ai/cordis";
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-uXWOANVF.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
@@ -7,6 +7,8 @@ import { open, readFile, readdir, stat } from "node:fs/promises";
7
7
  import { basename, delimiter, dirname, isAbsolute, join, relative, resolve } from "node:path";
8
8
  import schema from "@deepseek-ai/schemastery";
9
9
  import { defineTool } from "@deepseek-ai/dsh-tools";
10
+ import { SessionId } from "@deepseek-ai/dsh-session";
11
+ import { PERSONA_PREFIX_SECTION } from "@deepseek-ai/dsh-system-prompt";
10
12
  import { fileURLToPath } from "node:url";
11
13
  import { TextDecoder } from "node:util";
12
14
  import { spawn } from "node:child_process";
@@ -1874,6 +1876,7 @@ const zhHost = {
1874
1876
  "error.maxDepth": "agency-agents 配置 maxDepth 必须是正安全整数",
1875
1877
  "error.settingsMissing": "agency-agents 设置区尚未注册",
1876
1878
  "error.settingsLiveUnsupported": "当前 DSH settings 服务不支持 installSection,且 agency-agents 配置没有可实时更新的字段。",
1879
+ "error.subagentsUnavailable": "当前宿主 subagents 服务未提供可用的子代理启动方法 (start / startActivation)。",
1877
1880
  "error.personaSourceUnavailable": "专家提示词服务尚未就绪,请稍后重试。",
1878
1881
  "list.empty": "暂无可用专家。",
1879
1882
  "list.emptyDivision": "没有匹配分区 \"{division}\" 的专家。",
@@ -1910,6 +1913,7 @@ const enHost = {
1910
1913
  "error.maxDepth": "agency-agents config maxDepth must be a positive safe integer",
1911
1914
  "error.settingsMissing": "agency-agents settings section is not registered",
1912
1915
  "error.settingsLiveUnsupported": "This DSH settings service has no installSection, and the agency-agents config has no live-updating fields.",
1916
+ "error.subagentsUnavailable": "The host subagents service has no available launch method (start / startActivation).",
1913
1917
  "error.personaSourceUnavailable": "The expert prompt service is not ready. Try again shortly.",
1914
1918
  "list.empty": "No experts available.",
1915
1919
  "list.emptyDivision": "No experts matched division \"{division}\".",
@@ -3315,19 +3319,102 @@ function apply(ctx, config) {
3315
3319
  };
3316
3320
  }
3317
3321
  }));
3322
+ async function awaitSubagentRun(run, signal) {
3323
+ let disposal;
3324
+ const dispose = () => {
3325
+ if (disposal === void 0) try {
3326
+ disposal = run.dispose();
3327
+ } catch (error) {
3328
+ disposal = Promise.reject(error);
3329
+ }
3330
+ return disposal;
3331
+ };
3332
+ if (signal === void 0) try {
3333
+ return await run.result;
3334
+ } finally {
3335
+ await dispose();
3336
+ }
3337
+ let rejectAborted;
3338
+ const aborted = new Promise((_resolve, reject) => {
3339
+ rejectAborted = reject;
3340
+ });
3341
+ const onAbort = () => {
3342
+ dispose().catch(() => void 0);
3343
+ rejectAborted(signal.reason ?? /* @__PURE__ */ new Error());
3344
+ };
3345
+ signal.addEventListener("abort", onAbort, { once: true });
3346
+ try {
3347
+ if (signal.aborted) {
3348
+ onAbort();
3349
+ await dispose();
3350
+ throw signal.reason ?? /* @__PURE__ */ new Error();
3351
+ }
3352
+ return await Promise.race([run.result, aborted]);
3353
+ } finally {
3354
+ signal.removeEventListener("abort", onAbort);
3355
+ await dispose();
3356
+ }
3357
+ }
3358
+ async function startSubagentRun(providerName, options) {
3359
+ const { persona, toolFilter, label, signal, prompt, parent, maxDepth } = options;
3360
+ const service = ctx.subagents;
3361
+ const runSignal = signal ?? new AbortController().signal;
3362
+ if (typeof service.start === "function") return service.start(providerName, {
3363
+ label,
3364
+ prompt,
3365
+ parent,
3366
+ signal: runSignal,
3367
+ ...maxDepth === void 0 ? {} : { maxDepth },
3368
+ persona,
3369
+ toolFilter
3370
+ });
3371
+ if (typeof service.startActivation === "function") {
3372
+ const childId = SessionId(randomUUID());
3373
+ const stopCreated = ctx.on("agent/created", (event) => {
3374
+ if (event.agent.id !== childId) return void 0;
3375
+ const childCtx = event.agent.ctx;
3376
+ if (childCtx.systemPrompt) childCtx.systemPrompt.section({
3377
+ name: PERSONA_PREFIX_SECTION,
3378
+ order: childCtx.systemPrompt.getSectionOrder("DEPLOYMENT_PERSONA_PREFIX"),
3379
+ text: persona
3380
+ });
3381
+ if (childCtx.tools) childCtx.tools.restrict(toolFilter);
3382
+ });
3383
+ try {
3384
+ return await service.startActivation({
3385
+ provider: providerName,
3386
+ label: label ?? providerName,
3387
+ childId,
3388
+ request: {
3389
+ parent,
3390
+ prompt,
3391
+ ...maxDepth === void 0 ? {} : { maxDepth }
3392
+ },
3393
+ signal: runSignal,
3394
+ delivery: "caller"
3395
+ });
3396
+ } finally {
3397
+ stopCreated();
3398
+ }
3399
+ }
3400
+ throw new Error(formatHost(activeLocale(), "error.subagentsUnavailable"));
3401
+ }
3318
3402
  async function runExpert(query, task, exec) {
3319
3403
  const locale = activeLocale();
3320
3404
  const taskText = normalizeTask(task, locale);
3321
3405
  if (exec.agent === void 0) throw new Error(formatHost(locale, "error.summonRequiresAgent"));
3322
3406
  const provider = ctx.subagents.getProvider(config.provider);
3323
3407
  if (provider === void 0) throw new Error(formatHost(locale, "error.providerMissing", { provider: config.provider }));
3324
- if (!provider.capabilities.persona) throw new Error(formatHost(locale, "error.providerNoPersona", { provider: config.provider }));
3325
- if (!provider.capabilities.toolFilter) throw new Error(formatHost(locale, "error.providerNoToolFilter", { provider: config.provider }));
3326
- if (maxDepth !== void 0 && !provider.capabilities.depthLimit) throw new Error(formatHost(locale, "error.providerNoMaxDepth", { provider: config.provider }));
3408
+ const caps = provider.capabilities;
3409
+ if (caps.persona !== void 0 || caps.toolFilter !== void 0) {
3410
+ if (!caps.persona) throw new Error(formatHost(locale, "error.providerNoPersona", { provider: config.provider }));
3411
+ if (!caps.toolFilter) throw new Error(formatHost(locale, "error.providerNoToolFilter", { provider: config.provider }));
3412
+ }
3413
+ if (maxDepth !== void 0 && !caps.depthLimit) throw new Error(formatHost(locale, "error.providerNoMaxDepth", { provider: config.provider }));
3327
3414
  const expert = resolveExpert((await library.catalog()).experts.filter((expert) => !expert.conflict), query, locale);
3328
3415
  if (!enabledSet().has(expert.slug)) throw new Error(formatHost(locale, "error.expertDisabled", { name: localizedExpertName(expert, locale) }));
3329
3416
  const { prompt: persona } = await personaSource.getPrompt(expert.slug, expert.division, locale);
3330
- const run = await ctx.subagents.start(config.provider, {
3417
+ const result = await awaitSubagentRun(await startSubagentRun(config.provider, {
3331
3418
  label: localizedExpertName(expert, locale),
3332
3419
  prompt: [{
3333
3420
  type: "text",
@@ -3345,24 +3432,19 @@ function apply(ctx, config) {
3345
3432
  ] },
3346
3433
  ...maxDepth === void 0 ? {} : { maxDepth },
3347
3434
  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();
3435
+ }), exec.signal);
3436
+ const text = textBlocks(result.output);
3437
+ if (result.stopReason !== "completed") {
3438
+ const detail = text.length > 0 ? formatHost(locale, "error.partialOutput", { text }) : "";
3439
+ throw new Error(formatHost(locale, "error.expertRun", {
3440
+ reason: result.stopReason,
3441
+ detail
3442
+ }));
3365
3443
  }
3444
+ return {
3445
+ expert: localizedExpertName(expert, locale),
3446
+ answer: text
3447
+ };
3366
3448
  }
3367
3449
  ctx.tools.register(defineTool({
3368
3450
  name: "summon_expert",
@@ -3554,7 +3636,7 @@ function apply(ctx, config) {
3554
3636
  enabled: catalog.enabled,
3555
3637
  task: String(args.task ?? ""),
3556
3638
  revision: snapshot.revision,
3557
- signal: exec.signal ?? new AbortController().signal,
3639
+ signal: exec.signal,
3558
3640
  agent: exec.agent,
3559
3641
  service: engine.service,
3560
3642
  provider: config.provider,
@@ -3566,7 +3648,9 @@ function apply(ctx, config) {
3566
3648
  }) };
3567
3649
  }
3568
3650
  const provider = ctx.subagents.getProvider(config.provider);
3569
- if (!provider?.capabilities.persona || !provider.capabilities.toolFilter || maxDepth !== void 0 && !provider.capabilities.depthLimit) throw new Error(teamTx("当前子代理服务不支持专家团所需的身份、工具过滤或深度限制。"));
3651
+ const teamCaps = provider?.capabilities;
3652
+ const legacyTeamCaps = teamCaps !== void 0 && (teamCaps.persona !== void 0 || teamCaps.toolFilter !== void 0);
3653
+ if (!provider || legacyTeamCaps && (!teamCaps?.persona || !teamCaps.toolFilter) || maxDepth !== void 0 && !teamCaps?.depthLimit) throw new Error(teamTx("当前子代理服务不支持专家团所需的身份、工具过滤或深度限制。"));
3570
3654
  const result = await executeTeam({
3571
3655
  team,
3572
3656
  locale,
@@ -3578,7 +3662,7 @@ function apply(ctx, config) {
3578
3662
  readPersona: async (expert) => (await personaSource.getPrompt(expert.slug, expert.division, locale)).prompt,
3579
3663
  run: async (member) => {
3580
3664
  exec.signal?.throwIfAborted();
3581
- const run = await ctx.subagents.start(config.provider, {
3665
+ const value = await awaitSubagentRun(await startSubagentRun(config.provider, {
3582
3666
  label: member.name,
3583
3667
  parent: exec.agent,
3584
3668
  prompt: [{
@@ -3596,14 +3680,9 @@ function apply(ctx, config) {
3596
3680
  ] },
3597
3681
  ...maxDepth === void 0 ? {} : { maxDepth },
3598
3682
  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
- }
3683
+ }), exec.signal);
3684
+ if (value.stopReason !== "completed") throw new Error(teamTx("成员未完成:{0}。{1}", [value.stopReason, textBlocks(value.output)]));
3685
+ return textBlocks(value.output);
3607
3686
  }
3608
3687
  });
3609
3688
  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.19",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@11.22.0",
7
7
  "engines": {
@@ -79,25 +79,26 @@
79
79
  "registry": "https://registry.npmjs.org/"
80
80
  },
81
81
  "peerDependencies": {
82
- "@deepseek-ai/cordis": "^4.0.1",
83
- "@deepseek-ai/dsh": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2",
84
- "@deepseek-ai/dsh-api-remotes": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2",
85
- "@deepseek-ai/dsh-client-connection": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2",
86
- "@deepseek-ai/dsh-client-locale": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2",
87
- "@deepseek-ai/dsh-client-ui-conversation": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2",
88
- "@deepseek-ai/dsh-client-ui-input-trigger": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2",
89
- "@deepseek-ai/dsh-client-ui-settings": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2",
90
- "@deepseek-ai/dsh-client-ui-slots": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2",
91
- "@deepseek-ai/dsh-host-webserver": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2",
92
- "@deepseek-ai/dsh-llm": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2",
93
- "@deepseek-ai/dsh-settings": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2",
94
- "@deepseek-ai/dsh-subagent": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2",
95
- "@deepseek-ai/dsh-system-prompt": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2",
96
- "@deepseek-ai/dsh-tools": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2",
97
- "@deepseek-ai/dsh-typert-protocol": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2",
98
- "@deepseek-ai/dsh-typert-registry": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2",
82
+ "@deepseek-ai/cordis": ">=4.0.1 <5.0.0 || 4.0.5-alpha.1 || 4.0.5-alpha.2",
83
+ "@deepseek-ai/dsh": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2 || 0.2.1-alpha.3",
84
+ "@deepseek-ai/dsh-api-remotes": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2 || 0.2.1-alpha.3",
85
+ "@deepseek-ai/dsh-client-connection": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2 || 0.2.1-alpha.3",
86
+ "@deepseek-ai/dsh-client-locale": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2 || 0.2.1-alpha.3",
87
+ "@deepseek-ai/dsh-client-ui-conversation": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2 || 0.2.1-alpha.3",
88
+ "@deepseek-ai/dsh-client-ui-input-trigger": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2 || 0.2.1-alpha.3",
89
+ "@deepseek-ai/dsh-client-ui-settings": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2 || 0.2.1-alpha.3",
90
+ "@deepseek-ai/dsh-client-ui-slots": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2 || 0.2.1-alpha.3",
91
+ "@deepseek-ai/dsh-host-webserver": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2 || 0.2.1-alpha.3",
92
+ "@deepseek-ai/dsh-llm": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2 || 0.2.1-alpha.3",
93
+ "@deepseek-ai/dsh-settings": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2 || 0.2.1-alpha.3",
94
+ "@deepseek-ai/dsh-subagent": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2 || 0.2.1-alpha.3",
95
+ "@deepseek-ai/dsh-system-prompt": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2 || 0.2.1-alpha.3",
96
+ "@deepseek-ai/dsh-tools": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2 || 0.2.1-alpha.3",
97
+ "@deepseek-ai/dsh-typert-protocol": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2 || 0.2.1-alpha.3",
98
+ "@deepseek-ai/dsh-typert-registry": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2 || 0.2.1-alpha.3",
99
99
  "@deepseek-ai/schemastery": "^3.18.1",
100
- "react": "^18.2.0"
100
+ "react": "^18.2.0",
101
+ "@deepseek-ai/dsh-session": "0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.5-rc.3 || 0.1.7-rc.1 || 0.1.7-rc.2 || 0.2.0-rc.1 || 0.2.0-rc.2 || 0.2.1-alpha.2 || 0.2.1-alpha.3"
101
102
  },
102
103
  "peerDependenciesMeta": {
103
104
  "@deepseek-ai/dsh": {
@@ -108,34 +109,33 @@
108
109
  "zod": "^4.4.3"
109
110
  },
110
111
  "devDependencies": {
111
- "@deepseek-ai/cordis": "4.0.4",
112
- "@deepseek-ai/dsh-agent": "0.2.0-rc.2",
113
- "@deepseek-ai/dsh-api-remotes": "0.2.0-rc.2",
114
- "@deepseek-ai/dsh-attachment": "0.2.0-rc.2",
115
- "@deepseek-ai/dsh-brand": "0.2.0-rc.2",
116
- "@deepseek-ai/dsh-client-connection": "0.2.0-rc.2",
117
- "@deepseek-ai/dsh-client-locale": "0.2.0-rc.2",
118
- "@deepseek-ai/dsh-client-ui-conversation": "0.2.0-rc.2",
119
- "@deepseek-ai/dsh-client-ui-input-trigger": "0.2.0-rc.2",
120
- "@deepseek-ai/dsh-client-ui-settings": "0.2.0-rc.2",
121
- "@deepseek-ai/dsh-client-ui-slots": "0.2.0-rc.2",
122
- "@deepseek-ai/dsh-host-webserver": "0.2.0-rc.2",
123
- "@deepseek-ai/dsh-invariants": "0.2.0-rc.2",
124
- "@deepseek-ai/dsh-llm": "0.2.0-rc.2",
125
- "@deepseek-ai/dsh-ptc-runtime": "0.2.0-rc.2",
126
- "@deepseek-ai/dsh-sandbox": "0.2.0-rc.2",
127
- "@deepseek-ai/dsh-sandbox-policy": "0.2.0-rc.2",
128
- "@deepseek-ai/dsh-scope": "0.2.0-rc.2",
129
- "@deepseek-ai/dsh-session": "0.2.0-rc.2",
130
- "@deepseek-ai/dsh-session-projection": "0.2.0-rc.2",
131
- "@deepseek-ai/dsh-settings": "0.2.0-rc.2",
132
- "@deepseek-ai/dsh-subagent": "0.2.0-rc.2",
133
- "@deepseek-ai/dsh-system-prompt": "0.2.0-rc.2",
134
- "@deepseek-ai/dsh-tools": "0.2.0-rc.2",
135
- "@deepseek-ai/dsh-typert-protocol": "0.2.0-rc.2",
136
- "@deepseek-ai/dsh-typert-registry": "0.2.0-rc.2",
137
- "@deepseek-ai/dsh-user-approval": "0.2.0-rc.2",
138
- "@deepseek-ai/dsh-util-time": "0.2.0-rc.2",
112
+ "@deepseek-ai/cordis": "4.0.5-alpha.2",
113
+ "@deepseek-ai/dsh-agent": "0.2.1-alpha.3",
114
+ "@deepseek-ai/dsh-api-remotes": "0.2.1-alpha.3",
115
+ "@deepseek-ai/dsh-attachment": "0.2.1-alpha.3",
116
+ "@deepseek-ai/dsh-brand": "0.2.1-alpha.3",
117
+ "@deepseek-ai/dsh-client-connection": "0.2.1-alpha.3",
118
+ "@deepseek-ai/dsh-client-locale": "0.2.1-alpha.3",
119
+ "@deepseek-ai/dsh-client-ui-conversation": "0.2.1-alpha.3",
120
+ "@deepseek-ai/dsh-client-ui-input-trigger": "0.2.1-alpha.3",
121
+ "@deepseek-ai/dsh-client-ui-settings": "0.2.1-alpha.3",
122
+ "@deepseek-ai/dsh-client-ui-slots": "0.2.1-alpha.3",
123
+ "@deepseek-ai/dsh-host-webserver": "0.2.1-alpha.3",
124
+ "@deepseek-ai/dsh-llm": "0.2.1-alpha.3",
125
+ "@deepseek-ai/dsh-ptc-runtime": "0.2.1-alpha.3",
126
+ "@deepseek-ai/dsh-sandbox": "0.2.1-alpha.3",
127
+ "@deepseek-ai/dsh-sandbox-policy": "0.2.1-alpha.3",
128
+ "@deepseek-ai/dsh-scope": "0.2.1-alpha.3",
129
+ "@deepseek-ai/dsh-session": "0.2.1-alpha.3",
130
+ "@deepseek-ai/dsh-session-projection": "0.2.1-alpha.3",
131
+ "@deepseek-ai/dsh-settings": "0.2.1-alpha.3",
132
+ "@deepseek-ai/dsh-subagent": "0.2.1-alpha.3",
133
+ "@deepseek-ai/dsh-system-prompt": "0.2.1-alpha.3",
134
+ "@deepseek-ai/dsh-tools": "0.2.1-alpha.3",
135
+ "@deepseek-ai/dsh-typert-protocol": "0.2.1-alpha.3",
136
+ "@deepseek-ai/dsh-typert-registry": "0.2.1-alpha.3",
137
+ "@deepseek-ai/dsh-user-approval": "0.2.1-alpha.3",
138
+ "@deepseek-ai/dsh-util-time": "0.2.1-alpha.3",
139
139
  "@deepseek-ai/schemastery": "3.18.4",
140
140
  "@playwright/test": "1.63.0",
141
141
  "@tabler/icons-react": "^3.47.0",