@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 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.
@@ -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 ready-to-use workbench, download [DSH Codex Desktop](https://github.com/MichengAI/dsh-codex-desktop/releases). If you already use [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness), install any of these eight plugins individually. The desktop app includes all eight.
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
- | [IM Connect](https://github.com/MichengAI/dsh-im-connect) | Send tasks and receive replies through your usual messenger |
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
- | [Agency Agents](https://github.com/MichengAI/dsh-agency-agents) | Choose and summon specialists for your task |
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 /simplify to improve code within your Git changes |
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 RC versions: `0.1.0-rc.8`, `0.1.1-rc.2`, `0.1.2-rc.1`, `0.1.5-rc.1`, and `0.1.5-rc.2`. The host is supplied by your existing CLI or Desktop installation; the plugin does not install another copy. Future RC versions require separate compatibility validation.
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
- 想直接使用完整工作台,可下载 [DSH Codex Desktop](https://github.com/MichengAI/dsh-codex-desktop/releases);已有 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) 环境,可按需独立安装以下 8 个自研插件。桌面端已随附这些插件。
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
- | [IM Connect](https://github.com/MichengAI/dsh-im-connect) | 从微信、飞书、钉钉等消息平台下任务、收回复 |
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
- | [Agency Agents](https://github.com/MichengAI/dsh-agency-agents) | 按任务选择并召唤专业角色 |
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) | 用 /simplify 整理 Git 改动范围内的代码 |
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 RC 版本:`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`。主程序由现有 CLI 或 Desktop 提供,插件不会另行安装;后续 RC 需另行验证兼容性。
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
- name: "expectedRevision",
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
- name: "expert",
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
- name: "enabled",
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
- name: "slug",
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 ?? sessions.list?.getSnapshot().current;
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 ?? sessions.list?.getSnapshot().current;
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
- name: "expectedRevision",
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
- name: "expert",
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
- name: "enabled",
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
- name: "slug",
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.42",
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.5-rc.2",
115
- "@deepseek-ai/dsh-api-remotes": "0.1.5-rc.2",
116
- "@deepseek-ai/dsh-attachment": "0.1.5-rc.2",
117
- "@deepseek-ai/dsh-brand": "0.1.5-rc.2",
118
- "@deepseek-ai/dsh-client-connection": "0.1.5-rc.2",
119
- "@deepseek-ai/dsh-client-locale": "0.1.5-rc.2",
120
- "@deepseek-ai/dsh-client-ui-conversation": "0.1.5-rc.2",
121
- "@deepseek-ai/dsh-client-ui-input-trigger": "0.1.5-rc.2",
122
- "@deepseek-ai/dsh-client-ui-settings": "0.1.5-rc.2",
123
- "@deepseek-ai/dsh-client-ui-slots": "0.1.5-rc.2",
124
- "@deepseek-ai/dsh-code-runtime": "0.1.5-rc.2",
125
- "@deepseek-ai/dsh-host-webserver": "0.1.5-rc.2",
126
- "@deepseek-ai/dsh-invariants": "0.1.5-rc.2",
127
- "@deepseek-ai/dsh-llm": "0.1.5-rc.2",
128
- "@deepseek-ai/dsh-scope": "0.1.5-rc.2",
129
- "@deepseek-ai/dsh-session": "0.1.5-rc.2",
130
- "@deepseek-ai/dsh-session-projection": "0.1.5-rc.2",
131
- "@deepseek-ai/dsh-settings": "0.1.5-rc.2",
132
- "@deepseek-ai/dsh-subagent": "0.1.5-rc.2",
133
- "@deepseek-ai/dsh-system-prompt": "0.1.5-rc.2",
134
- "@deepseek-ai/dsh-tools": "0.1.5-rc.2",
135
- "@deepseek-ai/dsh-typert-protocol": "0.1.5-rc.2",
136
- "@deepseek-ai/dsh-typert-registry": "0.1.5-rc.2",
137
- "@deepseek-ai/dsh-user-approval": "0.1.5-rc.2",
138
- "@deepseek-ai/dsh-util-time": "0.1.5-rc.2",
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",