@weibaohui/experts-management 0.1.2 → 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/README.md CHANGED
@@ -3,7 +3,9 @@
3
3
  [![DSH plugin](https://img.shields.io/badge/dsh-plugin-green)](https://github.com/topics/dsh-plugin)
4
4
  [![npm version](https://img.shields.io/npm/v/@weibaohui/experts-management)](https://www.npmjs.com/package/@weibaohui/experts-management)
5
5
 
6
- **专家市场插件**:管理 ntd 格式的专家与专家团队(单个专家 / 多人团队),浏览安装 50+ 内置专家;每个专家注册为「仅用户可调用」的技能,在对话输入框输入 `/expert-名称` 即可以该专家的身份执行任务。
6
+ **专家市场插件**:管理 ntd 格式的专家与专家团队(单个专家 / 多人团队),浏览安装 50+ 内置专家;每个专家注册为「仅用户可调用」的技能,在对话输入框输入 `/expert-名称`(或点 composer 工具行的「+专家」按钮)即可以该专家的身份执行任务。
7
+
8
+ ![专家市场:从市场浏览安装到 composer +专家注入](docs/demo.gif)
7
9
 
8
10
  ## 核心功能
9
11
 
package/client/bundle.js CHANGED
@@ -132,6 +132,7 @@ window.__ModuleLoader__.load({
132
132
  loadFailed: '加载失败',
133
133
  noDescription: '暂无描述',
134
134
  avatarLoadFailed: '头像加载失败',
135
+ menuGroup: '专家',
135
136
  pickExpert: '+专家',
136
137
  pickExpertTitle: '选择一位专家,以该专家的身份执行本条任务',
137
138
  }
@@ -196,6 +197,7 @@ window.__ModuleLoader__.load({
196
197
  loadFailed: 'Load failed',
197
198
  noDescription: 'No description',
198
199
  avatarLoadFailed: 'Avatar failed to load',
200
+ menuGroup: 'Experts',
199
201
  pickExpert: '+ Expert',
200
202
  pickExpertTitle: 'Pick an expert to handle this message in their persona',
201
203
  }
@@ -321,8 +323,10 @@ window.__ModuleLoader__.load({
321
323
  return expertRoster
322
324
  }
323
325
 
324
- /** InputTriggerSource(ui-skill 同构):pick 落 `/expert-<name> ` 字面量,宿主手势边界注入角色。 */
325
- function makeExpertSource() {
326
+ /** InputTriggerSource(ui-skill 同构):pick 落 `/expert-<name> ` 字面量,宿主手势边界注入角色。
327
+ * 候选声明 section 取代源标题行——slash.menu 命名空间已被宿主注册,无法叠加本地化。 */
328
+ function makeExpertSource(t) {
329
+ const tt = t || ((key) => EN[key] ?? key)
326
330
  return {
327
331
  trigger: '/',
328
332
  name: EXPERT_SOURCE_NAME,
@@ -331,6 +335,7 @@ window.__ModuleLoader__.load({
331
335
  const rows = (await fetchRoster()) || []
332
336
  if (signal && signal.aborted) return []
333
337
  return rows.filter((r) => r.name.startsWith(String(query || ''))).slice(0, 80)
338
+ .map((r) => ({ ...r, section: tt('menuGroup') }))
334
339
  },
335
340
  warm() { void fetchRoster() },
336
341
  lexicon() {
@@ -720,7 +725,7 @@ window.__ModuleLoader__.load({
720
725
  ctx.inject(['inputTriggers', 'sessions'], (scope) => {
721
726
  composerScope = scope
722
727
  if (scope && scope.inputTriggers && typeof scope.inputTriggers.registerSource === 'function') {
723
- ctx.effect(() => scope.inputTriggers.registerSource(makeExpertSource()), 'experts-management: expert trigger source')
728
+ ctx.effect(() => scope.inputTriggers.registerSource(makeExpertSource(t)), 'experts-management: expert trigger source')
724
729
  }
725
730
  })
726
731
  }
package/client/index.js CHANGED
@@ -122,6 +122,7 @@ const ZH = {
122
122
  loadFailed: '加载失败',
123
123
  noDescription: '暂无描述',
124
124
  avatarLoadFailed: '头像加载失败',
125
+ menuGroup: '专家',
125
126
  pickExpert: '+专家',
126
127
  pickExpertTitle: '选择一位专家,以该专家的身份执行本条任务',
127
128
  }
@@ -186,6 +187,7 @@ const EN = {
186
187
  loadFailed: 'Load failed',
187
188
  noDescription: 'No description',
188
189
  avatarLoadFailed: 'Avatar failed to load',
190
+ menuGroup: 'Experts',
189
191
  pickExpert: '+ Expert',
190
192
  pickExpertTitle: 'Pick an expert to handle this message in their persona',
191
193
  }
@@ -311,8 +313,10 @@ async function fetchRoster(force) {
311
313
  return expertRoster
312
314
  }
313
315
 
314
- /** InputTriggerSource(ui-skill 同构):pick 落 `/expert-<name> ` 字面量,宿主手势边界注入角色。 */
315
- function makeExpertSource() {
316
+ /** InputTriggerSource(ui-skill 同构):pick 落 `/expert-<name> ` 字面量,宿主手势边界注入角色。
317
+ * 候选声明 section 取代源标题行——slash.menu 命名空间已被宿主注册,无法叠加本地化。 */
318
+ function makeExpertSource(t) {
319
+ const tt = t || ((key) => EN[key] ?? key)
316
320
  return {
317
321
  trigger: '/',
318
322
  name: EXPERT_SOURCE_NAME,
@@ -321,6 +325,7 @@ function makeExpertSource() {
321
325
  const rows = (await fetchRoster()) || []
322
326
  if (signal && signal.aborted) return []
323
327
  return rows.filter((r) => r.name.startsWith(String(query || ''))).slice(0, 80)
328
+ .map((r) => ({ ...r, section: tt('menuGroup') }))
324
329
  },
325
330
  warm() { void fetchRoster() },
326
331
  lexicon() {
@@ -710,7 +715,7 @@ module.exports = {
710
715
  ctx.inject(['inputTriggers', 'sessions'], (scope) => {
711
716
  composerScope = scope
712
717
  if (scope && scope.inputTriggers && typeof scope.inputTriggers.registerSource === 'function') {
713
- ctx.effect(() => scope.inputTriggers.registerSource(makeExpertSource()), 'experts-management: expert trigger source')
718
+ ctx.effect(() => scope.inputTriggers.registerSource(makeExpertSource(t)), 'experts-management: expert trigger source')
714
719
  }
715
720
  })
716
721
  }
package/docs/demo.gif ADDED
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@weibaohui/experts-management",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "dsh 插件 · 专家市场:管理 ntd 格式的专家与专家团队(plugin.json + Agent MD + 技能集),浏览/安装 50+ 内置专家市场;每个专家注册为「仅用户可调用」的技能,在对话输入框用 /expert-名称 即可以该专家的身份执行任务(宿主确定性注入角色定义与技能清单,不占用模型目录 token)。",
5
5
  "license": "MIT",
6
6
  "keywords": [