@chenkai114/dsh-team-admin 0.1.3 → 0.1.4

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chenkai114/dsh-team-admin",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "description": "DSH 插件:GUI 管理任意会话的智能体团队 —— 查看成员、删除角色并清理其持久会话(进回收站,可恢复)",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
package/src/dismiss.mjs CHANGED
@@ -148,7 +148,30 @@ async function stopMember(ctx, { leadSessionId, memberId, timeoutMs, logSystem }
148
148
  }
149
149
 
150
150
  /**
151
- * 删除一个团队成员:停会话 → 子会话目录进回收站 → 写墓碑。
151
+ * 释放一个子会话的 Activation 注册:宿主 GUI 的子智能体选择器按注册列表渲染,
152
+ * 只删会话文件不会摘掉该条目(点进去报 subagent/not-found)。
153
+ * 宿主没有该方法、Lead Agent 不在线或释放失败都只记日志——删除本身已经生效。
154
+ * @param {object} ctx - 宿主上下文。
155
+ * @param {{leadSessionId: string, memberId: string, logSystem: (line: string) => void}} request - 根会话、成员、日志函数。
156
+ * @returns {Promise<void>} 释放结束(失败已吞并记录)。
157
+ */
158
+ async function releaseActivation(ctx, { leadSessionId, memberId, logSystem }) {
159
+ const subagents = service(ctx, 'subagents')
160
+ if (subagents === undefined || typeof subagents.drainChildren !== 'function') return
161
+ const leadAgent = liveAgent(ctx, leadSessionId)
162
+ if (leadAgent === undefined) {
163
+ logSystem('[team-admin] 无法释放 ' + memberId + ' 的子会话激活:Lead Agent 未加载')
164
+ return
165
+ }
166
+ try {
167
+ await subagents.drainChildren(leadAgent, [memberId])
168
+ } catch (error) {
169
+ logSystem('[team-admin] 释放子会话激活 ' + memberId + ' 失败:' + String(error?.message ?? error))
170
+ }
171
+ }
172
+
173
+ /**
174
+ * 删除一个团队成员:停会话 → 子会话目录进回收站 → 释放子会话激活 → 写墓碑。
152
175
  * @param {object} ctx - 宿主上下文(sessionPersistence / agents / subagents 均可选)。
153
176
  * @param {{sessionId: string, name: string, deleteSession?: boolean}} request - 根会话、成员名、是否清理子会话(默认 true)。
154
177
  * @param {{store?: object, now?: number|(() => number), logSystem?: (line: string) => void, interruptTimeoutMs?: number}} [options]
@@ -235,6 +258,9 @@ export async function dismissMember(ctx, request, options = {}) {
235
258
  }
236
259
  }
237
260
 
261
+ // 移动成功后释放该子会话的 Activation 注册;失败只记日志,删除与墓碑照常。
262
+ if (sessionDeleted) await releaseActivation(ctx, { leadSessionId: sessionId, memberId, logSystem })
263
+
238
264
  const record = await store.record(sessionId, memberId, {
239
265
  name: isRecord(member) && typeof member.name === 'string' ? member.name : name,
240
266
  dismissedAt: stamp,
package/src/index.js CHANGED
@@ -17,7 +17,7 @@ const DATA_DIR_ENV = 'DSH_TEAM_ADMIN_DATA_DIR'
17
17
  /** 路由前缀:webServer 只支持 exact/prefix 注册。 */
18
18
  const ROUTE_PREFIX = '/api/team-admin'
19
19
  /** 与 package.json 版本保持一致(发布前由测试校验)。 */
20
- const PLUGIN_VERSION = '0.1.3'
20
+ const PLUGIN_VERSION = '0.1.4'
21
21
 
22
22
  /**
23
23
  * 解析插件数据目录。