@michengai/dsh-agency-agents 0.1.42 → 0.1.44
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 +10 -0
- package/CHANGELOG.zh-CN.md +10 -0
- package/README.md +9 -6
- package/README.zh-CN.md +9 -6
- package/lib/client.js +46 -108
- package/lib/remote.js +31 -103
- package/package.json +44 -42
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,16 @@
|
|
|
4
4
|
|
|
5
5
|
The five most recent published versions are listed below.
|
|
6
6
|
|
|
7
|
+
## 0.1.44 - 2026-09-18
|
|
8
|
+
|
|
9
|
+
- Add compatibility with DSH `0.1.6-alpha.2` while retaining support for previously supported versions.
|
|
10
|
+
- Keep Remote mounting on both alpha.1 and alpha.2 hosts, and resolve the current chat session after `sessions.list.current` was removed.
|
|
11
|
+
- Stop flashing the loading state under the expert search box when the roster is already cached.
|
|
12
|
+
|
|
13
|
+
## 0.1.43 - 2026-09-16
|
|
14
|
+
|
|
15
|
+
- Add compatibility with DSH `0.1.6-alpha.1` while retaining support for previously supported RC versions.
|
|
16
|
+
|
|
7
17
|
## 0.1.42 - 2026-09-13
|
|
8
18
|
|
|
9
19
|
- Choose experts from a compact category and emoji list, retaining the original category and localized-name order, with English prefix search to find and enable disabled experts. The `@` shortcut continues to show enabled experts.
|
package/CHANGELOG.zh-CN.md
CHANGED
|
@@ -4,6 +4,16 @@
|
|
|
4
4
|
|
|
5
5
|
以下记录最近发布的五个版本。
|
|
6
6
|
|
|
7
|
+
## 0.1.44 - 2026-09-18
|
|
8
|
+
|
|
9
|
+
- 新增对 DSH `0.1.6-alpha.2` 的兼容支持,保留已支持的旧版本。
|
|
10
|
+
- Remote 同时带上 `create()` 与 `schema`,可在 alpha.1 / alpha.2 挂载;官方去掉 `sessions.list.current` 后改按 mainView 定位当前会话。
|
|
11
|
+
- 修复点「专家」时搜索框下闪一下「正在处理…」。
|
|
12
|
+
|
|
13
|
+
## 0.1.43 - 2026-09-16
|
|
14
|
+
|
|
15
|
+
- 新增对 DSH `0.1.6-alpha.1` 的兼容支持,保留已支持的旧 RC 版本。
|
|
16
|
+
|
|
7
17
|
## 0.1.42 - 2026-09-13
|
|
8
18
|
|
|
9
19
|
- 在紧凑的分类与 Emoji 列表中选择专家,保留原分区及名称排序,搜索支持英文词首匹配并可查找、启用未启用专家;保留 `@` 对已启用专家的快捷选择。
|
package/README.md
CHANGED
|
@@ -45,18 +45,21 @@ The localized expert name is inserted as a short tag; write the complete task ne
|
|
|
45
45
|
|
|
46
46
|
## DSH product ecosystem
|
|
47
47
|
|
|
48
|
-
For a
|
|
48
|
+
For a desktop workbench, download [DSH Codex Desktop](https://github.com/MichengAI/dsh-codex-desktop/releases). Existing [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) installations can add plugins as needed by following each project's README. Below are 11 first-party plugins; consult the corresponding desktop release notes and bundled catalog for what that version includes.
|
|
49
49
|
|
|
50
50
|
| Plugin | What you can do |
|
|
51
51
|
| --- | --- |
|
|
52
52
|
| [Codex UI](https://github.com/MichengAI/dsh-codex-ui) | Organize projects and conversations, search tasks, and navigate chat turns |
|
|
53
|
-
| [
|
|
54
|
-
| [Automation](https://github.com/MichengAI/dsh-automation) | Schedule tasks and review each run |
|
|
53
|
+
| [Agency Agents](https://github.com/MichengAI/dsh-agency-agents) | Choose and summon specialists for your task |
|
|
55
54
|
| [Skills Manager](https://github.com/MichengAI/dsh-skills-manager) | Find, enable, create, and import local skills |
|
|
56
55
|
| [Archive Manager](https://github.com/MichengAI/dsh-archive-manager) | Search, restore, or clean up archived conversations |
|
|
57
|
-
| [
|
|
56
|
+
| [IM Connect](https://github.com/MichengAI/dsh-im-connect) | Send tasks and receive replies through messaging platforms |
|
|
57
|
+
| [Automation](https://github.com/MichengAI/dsh-automation) | Schedule tasks and review each run |
|
|
58
58
|
| [BTW](https://github.com/MichengAI/dsh-btw) | Ask side questions without interrupting the main task |
|
|
59
|
-
| [Simplify](https://github.com/MichengAI/dsh-simplify) | Use
|
|
59
|
+
| [Simplify](https://github.com/MichengAI/dsh-simplify) | Use `/simplify` to improve code within your Git changes |
|
|
60
|
+
| [PUA](https://github.com/MichengAI/dsh-pua) | Guide the Agent to try new approaches after failures, investigate causes, and verify results before completion |
|
|
61
|
+
| [Code Review](https://github.com/MichengAI/dsh-code-review) | Use `/review` to request an independent Agent code review and receive the report in the current conversation |
|
|
62
|
+
| [Codex Pet](https://github.com/MichengAI/dsh-codex-pet) | View conversation notifications and respond to tool approvals and questions through a desktop pet |
|
|
60
63
|
|
|
61
64
|
## Prerequisites
|
|
62
65
|
|
|
@@ -70,7 +73,7 @@ DSH `dsh.client.inject` controls browser module loading order. Missing graph ent
|
|
|
70
73
|
|
|
71
74
|
## Installation
|
|
72
75
|
|
|
73
|
-
Supported DeepSeek Harness
|
|
76
|
+
Supported DeepSeek Harness versions: `0.1.0-rc.8`, `0.1.1-rc.2`, `0.1.2-rc.1`, `0.1.5-rc.1`, `0.1.5-rc.2`, `0.1.6-alpha.1`, and `0.1.6-alpha.2`. 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.
|
|
74
77
|
|
|
75
78
|
The installation commands below use the official npm registry.
|
|
76
79
|
|
package/README.zh-CN.md
CHANGED
|
@@ -45,18 +45,21 @@
|
|
|
45
45
|
|
|
46
46
|
## DSH 产品生态
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
想使用桌面工作台,可下载 [DSH Codex Desktop](https://github.com/MichengAI/dsh-codex-desktop/releases);已有 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) 环境,可按各项目 README 按需安装。以下列出 11 个自研插件;桌面端实际随附范围以对应版本的发行说明和内置清单为准。
|
|
49
49
|
|
|
50
50
|
| 插件 | 你可以用它做什么 |
|
|
51
51
|
| --- | --- |
|
|
52
52
|
| [Codex UI](https://github.com/MichengAI/dsh-codex-ui) | 整理项目与会话、搜索任务、跳转对话轮次 |
|
|
53
|
-
| [
|
|
54
|
-
| [Automation](https://github.com/MichengAI/dsh-automation) | 按计划执行任务,查看每次运行的结果 |
|
|
53
|
+
| [Agency Agents](https://github.com/MichengAI/dsh-agency-agents) | 按任务选择并召唤专业角色 |
|
|
55
54
|
| [Skills Manager](https://github.com/MichengAI/dsh-skills-manager) | 统一查找、启停、创建和导入本机技能 |
|
|
56
55
|
| [Archive Manager](https://github.com/MichengAI/dsh-archive-manager) | 搜索、恢复或清理已归档会话 |
|
|
57
|
-
| [
|
|
56
|
+
| [IM Connect](https://github.com/MichengAI/dsh-im-connect) | 从消息平台下任务、收回复 |
|
|
57
|
+
| [Automation](https://github.com/MichengAI/dsh-automation) | 按计划执行任务,查看每次运行的结果 |
|
|
58
58
|
| [BTW](https://github.com/MichengAI/dsh-btw) | 在当前上下文中临时旁问,不打断主任务 |
|
|
59
|
-
| [Simplify](https://github.com/MichengAI/dsh-simplify) | 用
|
|
59
|
+
| [Simplify](https://github.com/MichengAI/dsh-simplify) | 用 `/simplify` 整理 Git 改动范围内的代码 |
|
|
60
|
+
| [PUA](https://github.com/MichengAI/dsh-pua) | 引导 Agent 在失败时换方法、查原因,并在完成前验证结果 |
|
|
61
|
+
| [Code Review](https://github.com/MichengAI/dsh-code-review) | 用 `/review` 发起独立 Agent 代码审查,在当前会话接收报告 |
|
|
62
|
+
| [Codex Pet](https://github.com/MichengAI/dsh-codex-pet) | 通过桌面宠物查看会话提醒、处理工具审批和问题回答 |
|
|
60
63
|
|
|
61
64
|
## 前置条件
|
|
62
65
|
|
|
@@ -70,7 +73,7 @@ DSH 的 `dsh.client.inject` 声明浏览器模块的加载顺序;宿主模块
|
|
|
70
73
|
|
|
71
74
|
## 安装
|
|
72
75
|
|
|
73
|
-
支持的 DeepSeek Harness
|
|
76
|
+
支持的 DeepSeek Harness 版本:`0.1.0-rc.8`、`0.1.1-rc.2`、`0.1.2-rc.1`、`0.1.5-rc.1`、`0.1.5-rc.2`、`0.1.6-alpha.1`、`0.1.6-alpha.2`。主程序由现有 CLI 或 Desktop 提供,插件不会另行安装;后续宿主版本需另行验证兼容性。
|
|
74
77
|
|
|
75
78
|
以下安装命令使用官方 npm 源。
|
|
76
79
|
|
package/lib/client.js
CHANGED
|
@@ -232,8 +232,8 @@ window.__ModuleLoader__.load({
|
|
|
232
232
|
onChange: (event) => props.onQuery(event.target.value)
|
|
233
233
|
})), react.default.createElement("div", {
|
|
234
234
|
className: "aag-discovery-results",
|
|
235
|
-
"aria-busy": props.busy
|
|
236
|
-
}, props.busy ? react.default.createElement("p", {
|
|
235
|
+
"aria-busy": props.busy && props.experts.length === 0
|
|
236
|
+
}, props.busy && props.experts.length === 0 ? react.default.createElement("p", {
|
|
237
237
|
className: "aag-menu-empty",
|
|
238
238
|
role: "status"
|
|
239
239
|
}, props.t("discovery.working")) : null, !props.busy && props.experts.length === 0 ? react.default.createElement("p", {
|
|
@@ -7610,6 +7610,26 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7610
7610
|
revision: number().int().min(0)
|
|
7611
7611
|
});
|
|
7612
7612
|
const expertPromptSchema = object({ prompt: string() });
|
|
7613
|
+
/**
|
|
7614
|
+
* alpha.1 及更早宿主读 `codec.schema.parse`;alpha.2 只接受 `codec.create()`。
|
|
7615
|
+
* 两套字段一起带上,才能在同一 peer 范围内挂载 Remote。
|
|
7616
|
+
*/
|
|
7617
|
+
function strictCodec(typeSymbol, schema) {
|
|
7618
|
+
return {
|
|
7619
|
+
mode: "strict",
|
|
7620
|
+
typeSymbol,
|
|
7621
|
+
create: () => schema,
|
|
7622
|
+
schema
|
|
7623
|
+
};
|
|
7624
|
+
}
|
|
7625
|
+
function jsonParameter(name, typeSymbol, schema) {
|
|
7626
|
+
return {
|
|
7627
|
+
name,
|
|
7628
|
+
wire: name,
|
|
7629
|
+
source: "json",
|
|
7630
|
+
codec: strictCodec(typeSymbol, schema)
|
|
7631
|
+
};
|
|
7632
|
+
}
|
|
7613
7633
|
/** 新接口仍沿用宿主 Typert 严格参数校验与既有鉴权入口。 */
|
|
7614
7634
|
function catalogMethod(method, parameters) {
|
|
7615
7635
|
return {
|
|
@@ -7619,33 +7639,11 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7619
7639
|
method,
|
|
7620
7640
|
invocation: { kind: "direct" },
|
|
7621
7641
|
parameters,
|
|
7622
|
-
result:
|
|
7623
|
-
mode: "strict",
|
|
7624
|
-
typeSymbol: "AgencyAgentsCatalog",
|
|
7625
|
-
schema: catalogSnapshotSchema
|
|
7626
|
-
}
|
|
7642
|
+
result: strictCodec("AgencyAgentsCatalog", catalogSnapshotSchema)
|
|
7627
7643
|
};
|
|
7628
7644
|
}
|
|
7629
|
-
const revisionParameter =
|
|
7630
|
-
|
|
7631
|
-
wire: "expectedRevision",
|
|
7632
|
-
source: "json",
|
|
7633
|
-
codec: {
|
|
7634
|
-
mode: "strict",
|
|
7635
|
-
typeSymbol: "number",
|
|
7636
|
-
schema: number().int().min(0)
|
|
7637
|
-
}
|
|
7638
|
-
};
|
|
7639
|
-
const customSlugParameter = {
|
|
7640
|
-
name: "slug",
|
|
7641
|
-
wire: "slug",
|
|
7642
|
-
source: "json",
|
|
7643
|
-
codec: {
|
|
7644
|
-
mode: "strict",
|
|
7645
|
-
typeSymbol: "string",
|
|
7646
|
-
schema: string().regex(CUSTOM_EXPERT_SLUG)
|
|
7647
|
-
}
|
|
7648
|
-
};
|
|
7645
|
+
const revisionParameter = jsonParameter("expectedRevision", "number", number().int().min(0));
|
|
7646
|
+
const customSlugParameter = jsonParameter("slug", "string", string().regex(CUSTOM_EXPERT_SLUG));
|
|
7649
7647
|
//#endregion
|
|
7650
7648
|
//#region src/client/remote.ts
|
|
7651
7649
|
const TYPERT_REMOTE = {
|
|
@@ -7653,26 +7651,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7653
7651
|
descriptors: [
|
|
7654
7652
|
catalogMethod("getCatalog", []),
|
|
7655
7653
|
catalogMethod("saveCustomExpert", [
|
|
7656
|
-
|
|
7657
|
-
|
|
7658
|
-
wire: "expert",
|
|
7659
|
-
source: "json",
|
|
7660
|
-
codec: {
|
|
7661
|
-
mode: "strict",
|
|
7662
|
-
typeSymbol: "CustomExpertInput",
|
|
7663
|
-
schema: customExpertInputSchema
|
|
7664
|
-
}
|
|
7665
|
-
},
|
|
7666
|
-
{
|
|
7667
|
-
name: "enabled",
|
|
7668
|
-
wire: "enabled",
|
|
7669
|
-
source: "json",
|
|
7670
|
-
codec: {
|
|
7671
|
-
mode: "strict",
|
|
7672
|
-
typeSymbol: "boolean",
|
|
7673
|
-
schema: boolean()
|
|
7674
|
-
}
|
|
7675
|
-
},
|
|
7654
|
+
jsonParameter("expert", "CustomExpertInput", customExpertInputSchema),
|
|
7655
|
+
jsonParameter("enabled", "boolean", boolean()),
|
|
7676
7656
|
revisionParameter
|
|
7677
7657
|
]),
|
|
7678
7658
|
catalogMethod("deleteCustomExpert", [customSlugParameter, revisionParameter]),
|
|
@@ -7683,11 +7663,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7683
7663
|
method: "getCustomExpert",
|
|
7684
7664
|
invocation: { kind: "direct" },
|
|
7685
7665
|
parameters: [customSlugParameter],
|
|
7686
|
-
result:
|
|
7687
|
-
mode: "strict",
|
|
7688
|
-
typeSymbol: "CustomExpertInput",
|
|
7689
|
-
schema: expertEditSchema
|
|
7690
|
-
}
|
|
7666
|
+
result: strictCodec("CustomExpertInput", expertEditSchema)
|
|
7691
7667
|
},
|
|
7692
7668
|
{
|
|
7693
7669
|
id: "@michengai/dsh-agency-agents#agencyAgents/getEnabled",
|
|
@@ -7696,11 +7672,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7696
7672
|
method: "getEnabled",
|
|
7697
7673
|
invocation: { kind: "direct" },
|
|
7698
7674
|
parameters: [],
|
|
7699
|
-
result:
|
|
7700
|
-
mode: "strict",
|
|
7701
|
-
typeSymbol: "AgencyAgentsEnabledState",
|
|
7702
|
-
schema: enabledStateSchema
|
|
7703
|
-
}
|
|
7675
|
+
result: strictCodec("AgencyAgentsEnabledState", enabledStateSchema)
|
|
7704
7676
|
},
|
|
7705
7677
|
{
|
|
7706
7678
|
id: "@michengai/dsh-agency-agents#agencyAgents/setEnabled",
|
|
@@ -7708,30 +7680,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7708
7680
|
namespace: "agencyAgents",
|
|
7709
7681
|
method: "setEnabled",
|
|
7710
7682
|
invocation: { kind: "direct" },
|
|
7711
|
-
parameters: [
|
|
7712
|
-
|
|
7713
|
-
wire: "enabled",
|
|
7714
|
-
source: "json",
|
|
7715
|
-
codec: {
|
|
7716
|
-
mode: "strict",
|
|
7717
|
-
typeSymbol: "string[]",
|
|
7718
|
-
schema: enabledArraySchema
|
|
7719
|
-
}
|
|
7720
|
-
}, {
|
|
7721
|
-
name: "expectedRevision",
|
|
7722
|
-
wire: "expectedRevision",
|
|
7723
|
-
source: "json",
|
|
7724
|
-
codec: {
|
|
7725
|
-
mode: "strict",
|
|
7726
|
-
typeSymbol: "number",
|
|
7727
|
-
schema: number().int().min(0)
|
|
7728
|
-
}
|
|
7729
|
-
}],
|
|
7730
|
-
result: {
|
|
7731
|
-
mode: "strict",
|
|
7732
|
-
typeSymbol: "AgencyAgentsEnabledState",
|
|
7733
|
-
schema: enabledStateSchema
|
|
7734
|
-
}
|
|
7683
|
+
parameters: [jsonParameter("enabled", "string[]", enabledArraySchema), jsonParameter("expectedRevision", "number", number().int().min(0))],
|
|
7684
|
+
result: strictCodec("AgencyAgentsEnabledState", enabledStateSchema)
|
|
7735
7685
|
},
|
|
7736
7686
|
{
|
|
7737
7687
|
id: "@michengai/dsh-agency-agents#agencyAgents/getPrompt",
|
|
@@ -7739,30 +7689,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
7739
7689
|
namespace: "agencyAgents",
|
|
7740
7690
|
method: "getPrompt",
|
|
7741
7691
|
invocation: { kind: "direct" },
|
|
7742
|
-
parameters: [
|
|
7743
|
-
|
|
7744
|
-
wire: "slug",
|
|
7745
|
-
source: "json",
|
|
7746
|
-
codec: {
|
|
7747
|
-
mode: "strict",
|
|
7748
|
-
typeSymbol: "string",
|
|
7749
|
-
schema: string().min(1).max(128)
|
|
7750
|
-
}
|
|
7751
|
-
}, {
|
|
7752
|
-
name: "division",
|
|
7753
|
-
wire: "division",
|
|
7754
|
-
source: "json",
|
|
7755
|
-
codec: {
|
|
7756
|
-
mode: "strict",
|
|
7757
|
-
typeSymbol: "string",
|
|
7758
|
-
schema: string().min(1).max(64)
|
|
7759
|
-
}
|
|
7760
|
-
}],
|
|
7761
|
-
result: {
|
|
7762
|
-
mode: "strict",
|
|
7763
|
-
typeSymbol: "AgencyAgentsPrompt",
|
|
7764
|
-
schema: expertPromptSchema
|
|
7765
|
-
}
|
|
7692
|
+
parameters: [jsonParameter("slug", "string", string().min(1).max(128)), jsonParameter("division", "string", string().min(1).max(64))],
|
|
7693
|
+
result: strictCodec("AgencyAgentsPrompt", expertPromptSchema)
|
|
7766
7694
|
}
|
|
7767
7695
|
]
|
|
7768
7696
|
};
|
|
@@ -9048,8 +8976,17 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9048
8976
|
maxHeight: below
|
|
9049
8977
|
};
|
|
9050
8978
|
}
|
|
8979
|
+
/** slot 未给 sessionId 时:先认旧宿主的 `current`,再按官方主视图 retain 反查。 */
|
|
8980
|
+
function resolveTargetSessionId(sessions, sessionId) {
|
|
8981
|
+
if (sessionId !== void 0) return sessionId;
|
|
8982
|
+
const snapshot = sessions.list?.getSnapshot();
|
|
8983
|
+
if (snapshot?.current !== void 0) return snapshot.current;
|
|
8984
|
+
if (snapshot?.byId === void 0) return void 0;
|
|
8985
|
+
const match = Object.entries(snapshot.byId).find(([, session]) => (session.retainedBy?.mainView ?? 0) > 0);
|
|
8986
|
+
return match === void 0 ? void 0 : match[1].id ?? match[0];
|
|
8987
|
+
}
|
|
9051
8988
|
function resolveReferenceInsertionTarget(sessions, sessionId, getConversation) {
|
|
9052
|
-
const targetSessionId = sessionId
|
|
8989
|
+
const targetSessionId = resolveTargetSessionId(sessions, sessionId);
|
|
9053
8990
|
if (targetSessionId === void 0) return void 0;
|
|
9054
8991
|
const actx = sessions.scope?.(targetSessionId) ?? sessions.binding?.(targetSessionId)?.ctx;
|
|
9055
8992
|
return actx === void 0 ? void 0 : getConversation?.(actx)?.input.for(actx);
|
|
@@ -9177,7 +9114,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9177
9114
|
if (working.current) return;
|
|
9178
9115
|
const request = epoch.current;
|
|
9179
9116
|
setInsertError(null);
|
|
9180
|
-
setBusy(true);
|
|
9117
|
+
if (catalog.experts.length === 0) setBusy(true);
|
|
9181
9118
|
working.current = true;
|
|
9182
9119
|
readEnabled(props.remote).then((current) => {
|
|
9183
9120
|
if (request !== epoch.current) return;
|
|
@@ -9802,7 +9739,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9802
9739
|
const insertTask = (current, reference, sessionId, span) => {
|
|
9803
9740
|
if (current === void 0) return false;
|
|
9804
9741
|
const sessions = ctx.sessions;
|
|
9805
|
-
const id = sessionId
|
|
9742
|
+
const id = resolveTargetSessionId(sessions, sessionId);
|
|
9806
9743
|
const actx = id === void 0 ? void 0 : sessions.scope?.(id) ?? sessions.binding?.(id)?.ctx;
|
|
9807
9744
|
const expert = catalogState(remote).experts.find((item) => item.slug === reference.ref);
|
|
9808
9745
|
const example = expert === void 0 ? void 0 : expertTaskExample(expert, getActive());
|
|
@@ -9964,6 +9901,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
9964
9901
|
exports.normalizeExpertQuery = normalizeExpertQuery;
|
|
9965
9902
|
exports.resolveExpertMenuPosition = resolveExpertMenuPosition;
|
|
9966
9903
|
exports.resolveReferenceInsertionTarget = resolveReferenceInsertionTarget;
|
|
9904
|
+
exports.resolveTargetSessionId = resolveTargetSessionId;
|
|
9967
9905
|
exports.sortExpertsByEnabled = sortExpertsByEnabled;
|
|
9968
9906
|
exports.sortExpertsByOrder = sortExpertsByOrder;
|
|
9969
9907
|
exports.writeEnabled = writeEnabled;
|
package/lib/remote.js
CHANGED
|
@@ -8,6 +8,26 @@ const enabledStateSchema = z.object({
|
|
|
8
8
|
revision: z.number().int().min(0)
|
|
9
9
|
});
|
|
10
10
|
const expertPromptSchema = z.object({ prompt: z.string() });
|
|
11
|
+
/**
|
|
12
|
+
* alpha.1 及更早宿主读 `codec.schema.parse`;alpha.2 只接受 `codec.create()`。
|
|
13
|
+
* 两套字段一起带上,才能在同一 peer 范围内挂载 Remote。
|
|
14
|
+
*/
|
|
15
|
+
function strictCodec(typeSymbol, schema) {
|
|
16
|
+
return {
|
|
17
|
+
mode: "strict",
|
|
18
|
+
typeSymbol,
|
|
19
|
+
create: () => schema,
|
|
20
|
+
schema
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function jsonParameter(name, typeSymbol, schema) {
|
|
24
|
+
return {
|
|
25
|
+
name,
|
|
26
|
+
wire: name,
|
|
27
|
+
source: "json",
|
|
28
|
+
codec: strictCodec(typeSymbol, schema)
|
|
29
|
+
};
|
|
30
|
+
}
|
|
11
31
|
/** 新接口仍沿用宿主 Typert 严格参数校验与既有鉴权入口。 */
|
|
12
32
|
function catalogMethod(method, parameters) {
|
|
13
33
|
return {
|
|
@@ -17,57 +37,17 @@ function catalogMethod(method, parameters) {
|
|
|
17
37
|
method,
|
|
18
38
|
invocation: { kind: "direct" },
|
|
19
39
|
parameters,
|
|
20
|
-
result:
|
|
21
|
-
mode: "strict",
|
|
22
|
-
typeSymbol: "AgencyAgentsCatalog",
|
|
23
|
-
schema: catalogSnapshotSchema
|
|
24
|
-
}
|
|
40
|
+
result: strictCodec("AgencyAgentsCatalog", catalogSnapshotSchema)
|
|
25
41
|
};
|
|
26
42
|
}
|
|
27
|
-
const revisionParameter =
|
|
28
|
-
|
|
29
|
-
wire: "expectedRevision",
|
|
30
|
-
source: "json",
|
|
31
|
-
codec: {
|
|
32
|
-
mode: "strict",
|
|
33
|
-
typeSymbol: "number",
|
|
34
|
-
schema: z.number().int().min(0)
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
const customSlugParameter = {
|
|
38
|
-
name: "slug",
|
|
39
|
-
wire: "slug",
|
|
40
|
-
source: "json",
|
|
41
|
-
codec: {
|
|
42
|
-
mode: "strict",
|
|
43
|
-
typeSymbol: "string",
|
|
44
|
-
schema: z.string().regex(CUSTOM_EXPERT_SLUG)
|
|
45
|
-
}
|
|
46
|
-
};
|
|
43
|
+
const revisionParameter = jsonParameter("expectedRevision", "number", z.number().int().min(0));
|
|
44
|
+
const customSlugParameter = jsonParameter("slug", "string", z.string().regex(CUSTOM_EXPERT_SLUG));
|
|
47
45
|
/** Host 与 Client 共用的专家启用状态 Remote 严格契约。 */
|
|
48
46
|
const AGENCY_AGENTS_DESCRIPTORS = [
|
|
49
47
|
catalogMethod("getCatalog", []),
|
|
50
48
|
catalogMethod("saveCustomExpert", [
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
wire: "expert",
|
|
54
|
-
source: "json",
|
|
55
|
-
codec: {
|
|
56
|
-
mode: "strict",
|
|
57
|
-
typeSymbol: "CustomExpertInput",
|
|
58
|
-
schema: customExpertInputSchema
|
|
59
|
-
}
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
name: "enabled",
|
|
63
|
-
wire: "enabled",
|
|
64
|
-
source: "json",
|
|
65
|
-
codec: {
|
|
66
|
-
mode: "strict",
|
|
67
|
-
typeSymbol: "boolean",
|
|
68
|
-
schema: z.boolean()
|
|
69
|
-
}
|
|
70
|
-
},
|
|
49
|
+
jsonParameter("expert", "CustomExpertInput", customExpertInputSchema),
|
|
50
|
+
jsonParameter("enabled", "boolean", z.boolean()),
|
|
71
51
|
revisionParameter
|
|
72
52
|
]),
|
|
73
53
|
catalogMethod("deleteCustomExpert", [customSlugParameter, revisionParameter]),
|
|
@@ -78,11 +58,7 @@ const AGENCY_AGENTS_DESCRIPTORS = [
|
|
|
78
58
|
method: "getCustomExpert",
|
|
79
59
|
invocation: { kind: "direct" },
|
|
80
60
|
parameters: [customSlugParameter],
|
|
81
|
-
result:
|
|
82
|
-
mode: "strict",
|
|
83
|
-
typeSymbol: "CustomExpertInput",
|
|
84
|
-
schema: expertEditSchema
|
|
85
|
-
}
|
|
61
|
+
result: strictCodec("CustomExpertInput", expertEditSchema)
|
|
86
62
|
},
|
|
87
63
|
{
|
|
88
64
|
id: "@michengai/dsh-agency-agents#agencyAgents/getEnabled",
|
|
@@ -91,11 +67,7 @@ const AGENCY_AGENTS_DESCRIPTORS = [
|
|
|
91
67
|
method: "getEnabled",
|
|
92
68
|
invocation: { kind: "direct" },
|
|
93
69
|
parameters: [],
|
|
94
|
-
result:
|
|
95
|
-
mode: "strict",
|
|
96
|
-
typeSymbol: "AgencyAgentsEnabledState",
|
|
97
|
-
schema: enabledStateSchema
|
|
98
|
-
}
|
|
70
|
+
result: strictCodec("AgencyAgentsEnabledState", enabledStateSchema)
|
|
99
71
|
},
|
|
100
72
|
{
|
|
101
73
|
id: "@michengai/dsh-agency-agents#agencyAgents/setEnabled",
|
|
@@ -103,30 +75,8 @@ const AGENCY_AGENTS_DESCRIPTORS = [
|
|
|
103
75
|
namespace: "agencyAgents",
|
|
104
76
|
method: "setEnabled",
|
|
105
77
|
invocation: { kind: "direct" },
|
|
106
|
-
parameters: [
|
|
107
|
-
|
|
108
|
-
wire: "enabled",
|
|
109
|
-
source: "json",
|
|
110
|
-
codec: {
|
|
111
|
-
mode: "strict",
|
|
112
|
-
typeSymbol: "string[]",
|
|
113
|
-
schema: enabledArraySchema
|
|
114
|
-
}
|
|
115
|
-
}, {
|
|
116
|
-
name: "expectedRevision",
|
|
117
|
-
wire: "expectedRevision",
|
|
118
|
-
source: "json",
|
|
119
|
-
codec: {
|
|
120
|
-
mode: "strict",
|
|
121
|
-
typeSymbol: "number",
|
|
122
|
-
schema: z.number().int().min(0)
|
|
123
|
-
}
|
|
124
|
-
}],
|
|
125
|
-
result: {
|
|
126
|
-
mode: "strict",
|
|
127
|
-
typeSymbol: "AgencyAgentsEnabledState",
|
|
128
|
-
schema: enabledStateSchema
|
|
129
|
-
}
|
|
78
|
+
parameters: [jsonParameter("enabled", "string[]", enabledArraySchema), jsonParameter("expectedRevision", "number", z.number().int().min(0))],
|
|
79
|
+
result: strictCodec("AgencyAgentsEnabledState", enabledStateSchema)
|
|
130
80
|
},
|
|
131
81
|
{
|
|
132
82
|
id: "@michengai/dsh-agency-agents#agencyAgents/getPrompt",
|
|
@@ -134,30 +84,8 @@ const AGENCY_AGENTS_DESCRIPTORS = [
|
|
|
134
84
|
namespace: "agencyAgents",
|
|
135
85
|
method: "getPrompt",
|
|
136
86
|
invocation: { kind: "direct" },
|
|
137
|
-
parameters: [
|
|
138
|
-
|
|
139
|
-
wire: "slug",
|
|
140
|
-
source: "json",
|
|
141
|
-
codec: {
|
|
142
|
-
mode: "strict",
|
|
143
|
-
typeSymbol: "string",
|
|
144
|
-
schema: z.string().min(1).max(128)
|
|
145
|
-
}
|
|
146
|
-
}, {
|
|
147
|
-
name: "division",
|
|
148
|
-
wire: "division",
|
|
149
|
-
source: "json",
|
|
150
|
-
codec: {
|
|
151
|
-
mode: "strict",
|
|
152
|
-
typeSymbol: "string",
|
|
153
|
-
schema: z.string().min(1).max(64)
|
|
154
|
-
}
|
|
155
|
-
}],
|
|
156
|
-
result: {
|
|
157
|
-
mode: "strict",
|
|
158
|
-
typeSymbol: "AgencyAgentsPrompt",
|
|
159
|
-
schema: expertPromptSchema
|
|
160
|
-
}
|
|
87
|
+
parameters: [jsonParameter("slug", "string", z.string().min(1).max(128)), jsonParameter("division", "string", z.string().min(1).max(64))],
|
|
88
|
+
result: strictCodec("AgencyAgentsPrompt", expertPromptSchema)
|
|
161
89
|
}
|
|
162
90
|
];
|
|
163
91
|
//#endregion
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@michengai/dsh-agency-agents",
|
|
3
3
|
"description": "Agency Experts — a summonable domain-expert roster for DSH (expert mode)",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.44",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "pnpm@11.22.0",
|
|
7
7
|
"engines": {
|
|
@@ -78,23 +78,23 @@
|
|
|
78
78
|
},
|
|
79
79
|
"peerDependencies": {
|
|
80
80
|
"@deepseek-ai/cordis": "^4.0.1",
|
|
81
|
-
"@deepseek-ai/dsh": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2",
|
|
82
|
-
"@deepseek-ai/dsh-api-remotes": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2",
|
|
83
|
-
"@deepseek-ai/dsh-client-connection": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2",
|
|
84
|
-
"@deepseek-ai/dsh-client-locale": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2",
|
|
81
|
+
"@deepseek-ai/dsh": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2",
|
|
82
|
+
"@deepseek-ai/dsh-api-remotes": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2",
|
|
83
|
+
"@deepseek-ai/dsh-client-connection": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2",
|
|
84
|
+
"@deepseek-ai/dsh-client-locale": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2",
|
|
85
85
|
"@deepseek-ai/dsh-client-runtime": "0.1.0-rc.8 || 0.1.1-rc.2",
|
|
86
|
-
"@deepseek-ai/dsh-client-ui-conversation": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2",
|
|
87
|
-
"@deepseek-ai/dsh-client-ui-input-trigger": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2",
|
|
88
|
-
"@deepseek-ai/dsh-client-ui-settings": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2",
|
|
89
|
-
"@deepseek-ai/dsh-client-ui-slots": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2",
|
|
90
|
-
"@deepseek-ai/dsh-host-webserver": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2",
|
|
91
|
-
"@deepseek-ai/dsh-llm": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2",
|
|
92
|
-
"@deepseek-ai/dsh-settings": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2",
|
|
93
|
-
"@deepseek-ai/dsh-subagent": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2",
|
|
94
|
-
"@deepseek-ai/dsh-system-prompt": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2",
|
|
95
|
-
"@deepseek-ai/dsh-tools": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2",
|
|
96
|
-
"@deepseek-ai/dsh-typert-protocol": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2",
|
|
97
|
-
"@deepseek-ai/dsh-typert-registry": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2",
|
|
86
|
+
"@deepseek-ai/dsh-client-ui-conversation": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2",
|
|
87
|
+
"@deepseek-ai/dsh-client-ui-input-trigger": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2",
|
|
88
|
+
"@deepseek-ai/dsh-client-ui-settings": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2",
|
|
89
|
+
"@deepseek-ai/dsh-client-ui-slots": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2",
|
|
90
|
+
"@deepseek-ai/dsh-host-webserver": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2",
|
|
91
|
+
"@deepseek-ai/dsh-llm": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2",
|
|
92
|
+
"@deepseek-ai/dsh-settings": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2",
|
|
93
|
+
"@deepseek-ai/dsh-subagent": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2",
|
|
94
|
+
"@deepseek-ai/dsh-system-prompt": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2",
|
|
95
|
+
"@deepseek-ai/dsh-tools": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2",
|
|
96
|
+
"@deepseek-ai/dsh-typert-protocol": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2",
|
|
97
|
+
"@deepseek-ai/dsh-typert-registry": "0.1.0-rc.8 || 0.1.1-rc.2 || 0.1.2-rc.1 || 0.1.5-rc.1 || 0.1.5-rc.2 || 0.1.6-alpha.1 || 0.1.6-alpha.2",
|
|
98
98
|
"@deepseek-ai/schemastery": "^3.18.1",
|
|
99
99
|
"react": "^18.2.0"
|
|
100
100
|
},
|
|
@@ -111,31 +111,33 @@
|
|
|
111
111
|
},
|
|
112
112
|
"devDependencies": {
|
|
113
113
|
"@deepseek-ai/cordis": "^4.0.2",
|
|
114
|
-
"@deepseek-ai/dsh-agent": "0.1.
|
|
115
|
-
"@deepseek-ai/dsh-api-remotes": "0.1.
|
|
116
|
-
"@deepseek-ai/dsh-attachment": "0.1.
|
|
117
|
-
"@deepseek-ai/dsh-brand": "0.1.
|
|
118
|
-
"@deepseek-ai/dsh-client-connection": "0.1.
|
|
119
|
-
"@deepseek-ai/dsh-client-locale": "0.1.
|
|
120
|
-
"@deepseek-ai/dsh-client-ui-conversation": "0.1.
|
|
121
|
-
"@deepseek-ai/dsh-client-ui-input-trigger": "0.1.
|
|
122
|
-
"@deepseek-ai/dsh-client-ui-settings": "0.1.
|
|
123
|
-
"@deepseek-ai/dsh-client-ui-slots": "0.1.
|
|
124
|
-
"@deepseek-ai/dsh-
|
|
125
|
-
"@deepseek-ai/dsh-
|
|
126
|
-
"@deepseek-ai/dsh-
|
|
127
|
-
"@deepseek-ai/dsh-
|
|
128
|
-
"@deepseek-ai/dsh-
|
|
129
|
-
"@deepseek-ai/dsh-
|
|
130
|
-
"@deepseek-ai/dsh-
|
|
131
|
-
"@deepseek-ai/dsh-
|
|
132
|
-
"@deepseek-ai/dsh-
|
|
133
|
-
"@deepseek-ai/dsh-
|
|
134
|
-
"@deepseek-ai/dsh-
|
|
135
|
-
"@deepseek-ai/dsh-
|
|
136
|
-
"@deepseek-ai/dsh-
|
|
137
|
-
"@deepseek-ai/dsh-
|
|
138
|
-
"@deepseek-ai/dsh-
|
|
114
|
+
"@deepseek-ai/dsh-agent": "0.1.6-alpha.2",
|
|
115
|
+
"@deepseek-ai/dsh-api-remotes": "0.1.6-alpha.2",
|
|
116
|
+
"@deepseek-ai/dsh-attachment": "0.1.6-alpha.2",
|
|
117
|
+
"@deepseek-ai/dsh-brand": "0.1.6-alpha.2",
|
|
118
|
+
"@deepseek-ai/dsh-client-connection": "0.1.6-alpha.2",
|
|
119
|
+
"@deepseek-ai/dsh-client-locale": "0.1.6-alpha.2",
|
|
120
|
+
"@deepseek-ai/dsh-client-ui-conversation": "0.1.6-alpha.2",
|
|
121
|
+
"@deepseek-ai/dsh-client-ui-input-trigger": "0.1.6-alpha.2",
|
|
122
|
+
"@deepseek-ai/dsh-client-ui-settings": "0.1.6-alpha.2",
|
|
123
|
+
"@deepseek-ai/dsh-client-ui-slots": "0.1.6-alpha.2",
|
|
124
|
+
"@deepseek-ai/dsh-host-webserver": "0.1.6-alpha.2",
|
|
125
|
+
"@deepseek-ai/dsh-invariants": "0.1.6-alpha.2",
|
|
126
|
+
"@deepseek-ai/dsh-llm": "0.1.6-alpha.2",
|
|
127
|
+
"@deepseek-ai/dsh-ptc-runtime": "0.1.6-alpha.2",
|
|
128
|
+
"@deepseek-ai/dsh-sandbox": "0.1.6-alpha.2",
|
|
129
|
+
"@deepseek-ai/dsh-sandbox-policy": "0.1.6-alpha.2",
|
|
130
|
+
"@deepseek-ai/dsh-scope": "0.1.6-alpha.2",
|
|
131
|
+
"@deepseek-ai/dsh-session": "0.1.6-alpha.2",
|
|
132
|
+
"@deepseek-ai/dsh-session-projection": "0.1.6-alpha.2",
|
|
133
|
+
"@deepseek-ai/dsh-settings": "0.1.6-alpha.2",
|
|
134
|
+
"@deepseek-ai/dsh-subagent": "0.1.6-alpha.2",
|
|
135
|
+
"@deepseek-ai/dsh-system-prompt": "0.1.6-alpha.2",
|
|
136
|
+
"@deepseek-ai/dsh-tools": "0.1.6-alpha.2",
|
|
137
|
+
"@deepseek-ai/dsh-typert-protocol": "0.1.6-alpha.2",
|
|
138
|
+
"@deepseek-ai/dsh-typert-registry": "0.1.6-alpha.2",
|
|
139
|
+
"@deepseek-ai/dsh-user-approval": "0.1.6-alpha.2",
|
|
140
|
+
"@deepseek-ai/dsh-util-time": "0.1.6-alpha.2",
|
|
139
141
|
"@deepseek-ai/schemastery": "^3.18.2",
|
|
140
142
|
"@playwright/test": "1.63.0",
|
|
141
143
|
"@types/node": "^22.20.0",
|