@nanmicoder/dsh-agent-teams 0.1.16-rc.3 → 0.1.17-rc.1

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.
@@ -7,6 +7,9 @@ import { SubagentError } from '@deepseek-ai/dsh-subagent';
7
7
  * Source: packages/subagent/subagent/src/internal.ts at dsh-v0.1.2-rc.1.
8
8
  */
9
9
  const hostPromptQueue = Symbol.for('dsh.subagent.queuePrompt');
10
+ // 0.1.5 keeps queueHostSubagentPrompt but replaces its symbol with this
11
+ // delivery-mode-aware implementation (packages/subagent/subagent/src/internal.ts).
12
+ const hostPromptDeliver = Symbol.for('dsh.subagent.deliverPrompt');
10
13
  function boundary(runtime) {
11
14
  return runtime;
12
15
  }
@@ -30,10 +33,14 @@ export function installContinuableMemberSetup(ctx, setup) {
30
33
  // Upstream owns this registration with this.ctx.effect. Cordis resolves
31
34
  // that ctx to the accessing plugin, so its disposal revokes installations
32
35
  // even while the subagents service and child Agents remain live.
33
- runtime.registerContinuableSetup.call(ctx.subagents, setup);
36
+ runtime.registerContinuableSetup.call(ctx.subagents, (childCtx) => {
37
+ if (childCtx.agent === undefined)
38
+ return unsupported('legacy setup lacks child Agent');
39
+ return setup(childCtx, childCtx.agent);
40
+ });
34
41
  return;
35
42
  }
36
- if (typeof runtime[hostPromptQueue] !== 'function' || typeof runtime.sendMessage !== 'function') {
43
+ if ((typeof runtime[hostPromptQueue] !== 'function' && typeof runtime[hostPromptDeliver] !== 'function') || typeof runtime.sendMessage !== 'function') {
37
44
  return unsupported('missing continuable setup and modern host queue');
38
45
  }
39
46
  const installed = new WeakSet();
@@ -45,7 +52,7 @@ export function installContinuableMemberSetup(ctx, setup) {
45
52
  // Deliberately synchronous: awaiting here loses the first-request race.
46
53
  let teardown;
47
54
  try {
48
- teardown = setup(agent.ctx);
55
+ teardown = setup(agent.ctx, agent);
49
56
  }
50
57
  catch (error) {
51
58
  // session-start is a notification: Harness logs a thrown listener and
@@ -90,6 +97,9 @@ export async function queueMemberPrompt(runtime, parent, childId, content, signa
90
97
  if (typeof host.followup === 'function') {
91
98
  return host.followup.call(runtime, parent, childId, content, { source, signal });
92
99
  }
100
+ const deliver = host[hostPromptDeliver];
101
+ if (typeof deliver === 'function')
102
+ return deliver.call(runtime, parent, childId, content, source, signal, 'queue');
93
103
  const queue = host[hostPromptQueue];
94
104
  if (typeof queue !== 'function')
95
105
  return unsupported('missing host FIFO delivery');
@@ -101,14 +111,16 @@ export function guardSubagentDelivery(ctx, isRetired) {
101
111
  const host = boundary(runtime);
102
112
  const legacy = host.followup;
103
113
  const queue = host[hostPromptQueue];
114
+ const deliver = host[hostPromptDeliver];
104
115
  const send = host.sendMessage;
105
- if (typeof legacy !== 'function' && (typeof queue !== 'function' || typeof send !== 'function')) {
116
+ if (typeof legacy !== 'function' && ((typeof queue !== 'function' && typeof deliver !== 'function') || typeof send !== 'function')) {
106
117
  return unsupported('cannot install complete retired-member guard');
107
118
  }
108
119
  ctx.effect(() => {
109
120
  const descriptors = new Map([
110
121
  ['followup', Object.getOwnPropertyDescriptor(host, 'followup')],
111
122
  [hostPromptQueue, Object.getOwnPropertyDescriptor(host, hostPromptQueue)],
123
+ [hostPromptDeliver, Object.getOwnPropertyDescriptor(host, hostPromptDeliver)],
112
124
  ['sendMessage', Object.getOwnPropertyDescriptor(host, 'sendMessage')],
113
125
  ]);
114
126
  let active = true;
@@ -129,10 +141,16 @@ export function guardSubagentDelivery(ctx, isRetired) {
129
141
  await check(sender, targetId);
130
142
  return send.call(runtime, sender, targetId, content, options);
131
143
  };
144
+ const guardedDeliver = async (parent, childId, content, source, signal, delivery) => {
145
+ await check(parent, childId);
146
+ return deliver.call(runtime, parent, childId, content, source, signal, delivery);
147
+ };
132
148
  if (typeof legacy === 'function')
133
149
  host.followup = guardedLegacy;
134
150
  if (typeof queue === 'function')
135
151
  host[hostPromptQueue] = guardedQueue;
152
+ if (typeof deliver === 'function')
153
+ host[hostPromptDeliver] = guardedDeliver;
136
154
  if (typeof send === 'function')
137
155
  host.sendMessage = guardedSend;
138
156
  // Cordis wraps method reads in fresh Proxies. Compare the actual own
@@ -152,6 +170,8 @@ export function guardSubagentDelivery(ctx, isRetired) {
152
170
  restore('followup', guardedLegacy);
153
171
  if (typeof queue === 'function')
154
172
  restore(hostPromptQueue, guardedQueue);
173
+ if (typeof deliver === 'function')
174
+ restore(hostPromptDeliver, guardedDeliver);
155
175
  if (typeof send === 'function')
156
176
  restore('sendMessage', guardedSend);
157
177
  };
package/lib/members.js CHANGED
@@ -263,10 +263,7 @@ export async function resolveMemberLlmSelection(ctx, captain, request, signal) {
263
263
  */
264
264
  export function installMemberSelectionRuntime(ctx, stateDir, onFailureSettled) {
265
265
  const pending = new Map();
266
- installContinuableMemberSetup(ctx, (childCtx) => {
267
- const child = childCtx.agent;
268
- if (child === undefined)
269
- return () => undefined;
266
+ installContinuableMemberSetup(ctx, (childCtx, child) => {
270
267
  const descriptor = foldSubagentDescriptor(sessionOwnEvents(child.session));
271
268
  if (descriptor?.mode !== 'continuable' || !descriptor.label.startsWith(MEMBER_LABEL_PREFIX)) {
272
269
  return () => undefined;
@@ -25,8 +25,9 @@ import type { SessionListState } from '@deepseek-ai/dsh-api-session-controller/c
25
25
  * snapshots and historic card summaries are only shown while their captain
26
26
  * session is the one currently open. */
27
27
  export type ActivityPanelProps = {
28
+ readonly conversationVisible?: boolean;
28
29
  readonly sessionsList: ObservableSnapshot<SessionListState>;
29
30
  readonly modelDirectories: ModelDirectoryResolver;
30
31
  readonly openMember: (parentId: SessionId, childId: SessionId) => void;
31
32
  } & PropsLocale<'agentTeams'>;
32
- export declare function ActivityPanel({ sessionsList, modelDirectories, openMember, t }: ActivityPanelProps): import("react").JSX.Element | null;
33
+ export declare function ActivityPanel({ sessionsList, modelDirectories, openMember, t, conversationVisible }: ActivityPanelProps): import("react").JSX.Element | null;
@@ -12,12 +12,18 @@ export interface AgentTeamsSessionNavigator {
12
12
  /** Reuse an address already retained by the client runtime when available. */
13
13
  subagentAddress?(id: SessionId): SubagentAddress | undefined;
14
14
  }
15
+ /** Main-panel navigation added in Harness 0.1.5; older layouts omit these actions. */
16
+ export interface AgentTeamsLayoutNavigator {
17
+ selectPanel?(panelId: null): void;
18
+ beginNavigation?(): AbortSignal;
19
+ }
15
20
  /**
16
21
  * Open one member's persisted transcript.
17
22
  *
18
23
  * Harness rc.8 intentionally removed cold subagents from the ordinary session
19
24
  * list. They must first be rediscovered in their parent's catalog, then opened
20
25
  * with the exact parent/child/mode address. Older runtimes have only `open()`;
21
- * the fallback preserves the plugin's rc.6 peer range.
26
+ * the fallback preserves ordinary-session navigation. New layouts also select
27
+ * the Conversation panel and cancel catalog refreshes superseded by navigation.
22
28
  */
23
- export declare function openAgentTeamMember(sessions: AgentTeamsSessionNavigator, parentSessionId: SessionId, childSessionId: SessionId): Promise<'subagent' | 'session'>;
29
+ export declare function openAgentTeamMember(sessions: AgentTeamsSessionNavigator, parentSessionId: SessionId, childSessionId: SessionId, layout?: AgentTeamsLayoutNavigator): Promise<'subagent' | 'session' | 'cancelled'>;
@@ -1,16 +1,17 @@
1
1
  /**
2
- * The audited Harness 0.1.2 subagent boundary. Keep version-specific shapes
2
+ * The audited Harness 0.1.2 / 0.1.5 subagent boundary. Keep version-specific shapes
3
3
  * here: API presence alone is not a promise of support for future versions.
4
4
  *
5
5
  * Alpha.2 owns followup/registerContinuableSetup; Alpha.5 and rc.1 own a
6
- * host-only FIFO queue and synchronous agent/session-start. Their public
6
+ * host-only FIFO queue; 0.1.5 uses a queue/steer deliverer. Both emit
7
+ * synchronous agent/session-start with the explicit Agent. Their public
7
8
  * sendMessage instead steers a running Agent and must never carry team jobs.
8
9
  */
9
10
  import type { Context } from '@deepseek-ai/cordis';
10
11
  import type { Agent } from '@deepseek-ai/dsh-agent';
11
12
  import type { ContentBlock, MessageId } from '@deepseek-ai/dsh-llm';
12
13
  import type { Session, SessionEvent, SessionId } from '@deepseek-ai/dsh-session';
13
- type Setup = (childCtx: Context) => () => void;
14
+ type Setup = (childCtx: Context, child: Agent) => () => void;
14
15
  /** Read child-owned history, excluding any descriptor inherited from a parent. */
15
16
  export declare function sessionOwnEvents(session: Session): readonly SessionEvent[];
16
17
  /** Install before the first request, including cold resume, with HMR cleanup. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nanmicoder/dsh-agent-teams",
3
- "version": "0.1.16-rc.3",
3
+ "version": "0.1.17-rc.1",
4
4
  "description": "AgentTeams for DeepSeek Harness: multi-agent team collaboration (captain, members, tasks with dependencies, messaging) driven by natural language, with a tree monitor in the web GUI",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
@@ -81,27 +81,27 @@
81
81
  },
82
82
  "peerDependencies": {
83
83
  "@deepseek-ai/cordis": "^4.0.2",
84
- "@deepseek-ai/dsh-agent": "0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
85
- "@deepseek-ai/dsh-api-session-controller": "0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
86
- "@deepseek-ai/dsh-client-connection": "0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
87
- "@deepseek-ai/dsh-client-locale": "0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
88
- "@deepseek-ai/dsh-client-store": "0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
89
- "@deepseek-ai/dsh-client-ui-chat": "0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
90
- "@deepseek-ai/dsh-client-ui-conversation": "0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
91
- "@deepseek-ai/dsh-client-ui-layout": "0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
92
- "@deepseek-ai/dsh-client-ui-model-selection": "0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
93
- "@deepseek-ai/dsh-client-ui-primitives": "0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
94
- "@deepseek-ai/dsh-client-ui-renderer": "0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
95
- "@deepseek-ai/dsh-client-ui-session": "0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
96
- "@deepseek-ai/dsh-client-ui-slots": "0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
97
- "@deepseek-ai/dsh-commands": "0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
98
- "@deepseek-ai/dsh-llm": "0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
99
- "@deepseek-ai/dsh-session": "0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
100
- "@deepseek-ai/dsh-session-projection": "0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
101
- "@deepseek-ai/dsh-subagent": "0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
102
- "@deepseek-ai/dsh-system-prompt": "0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
103
- "@deepseek-ai/dsh-tools": "0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
104
- "@deepseek-ai/dsh-util-values": "0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
84
+ "@deepseek-ai/dsh-agent": "0.1.5-rc.1 || 0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
85
+ "@deepseek-ai/dsh-api-session-controller": "0.1.5-rc.1 || 0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
86
+ "@deepseek-ai/dsh-client-connection": "0.1.5-rc.1 || 0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
87
+ "@deepseek-ai/dsh-client-locale": "0.1.5-rc.1 || 0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
88
+ "@deepseek-ai/dsh-client-store": "0.1.5-rc.1 || 0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
89
+ "@deepseek-ai/dsh-client-ui-chat": "0.1.5-rc.1 || 0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
90
+ "@deepseek-ai/dsh-client-ui-conversation": "0.1.5-rc.1 || 0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
91
+ "@deepseek-ai/dsh-client-ui-layout": "0.1.5-rc.1 || 0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
92
+ "@deepseek-ai/dsh-client-ui-model-selection": "0.1.5-rc.1 || 0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
93
+ "@deepseek-ai/dsh-client-ui-primitives": "0.1.5-rc.1 || 0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
94
+ "@deepseek-ai/dsh-client-ui-renderer": "0.1.5-rc.1 || 0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
95
+ "@deepseek-ai/dsh-client-ui-session": "0.1.5-rc.1 || 0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
96
+ "@deepseek-ai/dsh-client-ui-slots": "0.1.5-rc.1 || 0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
97
+ "@deepseek-ai/dsh-commands": "0.1.5-rc.1 || 0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
98
+ "@deepseek-ai/dsh-llm": "0.1.5-rc.1 || 0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
99
+ "@deepseek-ai/dsh-session": "0.1.5-rc.1 || 0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
100
+ "@deepseek-ai/dsh-session-projection": "0.1.5-rc.1 || 0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
101
+ "@deepseek-ai/dsh-subagent": "0.1.5-rc.1 || 0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
102
+ "@deepseek-ai/dsh-system-prompt": "0.1.5-rc.1 || 0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
103
+ "@deepseek-ai/dsh-tools": "0.1.5-rc.1 || 0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
104
+ "@deepseek-ai/dsh-util-values": "0.1.5-rc.1 || 0.1.2-rc.1 || 0.1.2-alpha.5 || 0.1.2-alpha.2",
105
105
  "@deepseek-ai/schemastery": "^3.18.2",
106
106
  "react": "^18.2.0"
107
107
  },
@@ -181,30 +181,30 @@
181
181
  },
182
182
  "devDependencies": {
183
183
  "@deepseek-ai/cordis": "^4.0.2",
184
- "@deepseek-ai/dsh": "0.1.2-rc.1",
185
- "@deepseek-ai/dsh-agent": "0.1.2-rc.1",
186
- "@deepseek-ai/dsh-api-session-controller": "0.1.2-rc.1",
187
- "@deepseek-ai/dsh-client-connection": "0.1.2-rc.1",
188
- "@deepseek-ai/dsh-client-locale": "0.1.2-rc.1",
189
- "@deepseek-ai/dsh-client-store": "0.1.2-rc.1",
190
- "@deepseek-ai/dsh-client-ui-chat": "0.1.2-rc.1",
191
- "@deepseek-ai/dsh-client-ui-conversation": "0.1.2-rc.1",
192
- "@deepseek-ai/dsh-client-ui-layout": "0.1.2-rc.1",
193
- "@deepseek-ai/dsh-client-ui-model-selection": "0.1.2-rc.1",
194
- "@deepseek-ai/dsh-client-ui-primitives": "0.1.2-rc.1",
195
- "@deepseek-ai/dsh-client-ui-renderer": "0.1.2-rc.1",
196
- "@deepseek-ai/dsh-client-ui-session": "0.1.2-rc.1",
197
- "@deepseek-ai/dsh-client-ui-slots": "0.1.2-rc.1",
198
- "@deepseek-ai/dsh-commands": "0.1.2-rc.1",
199
- "@deepseek-ai/dsh-llm": "0.1.2-rc.1",
200
- "@deepseek-ai/dsh-llm-retry": "0.1.2-rc.1",
201
- "@deepseek-ai/dsh-session": "0.1.2-rc.1",
202
- "@deepseek-ai/dsh-session-projection": "0.1.2-rc.1",
203
- "@deepseek-ai/dsh-subagent": "0.1.2-rc.1",
204
- "@deepseek-ai/dsh-system-prompt": "0.1.2-rc.1",
205
- "@deepseek-ai/dsh-tools": "0.1.2-rc.1",
206
- "@deepseek-ai/dsh-util-values": "0.1.2-rc.1",
207
- "@deepseek-ai/dsh-workspace": "0.1.2-rc.1",
184
+ "@deepseek-ai/dsh": "0.1.5-rc.1",
185
+ "@deepseek-ai/dsh-agent": "0.1.5-rc.1",
186
+ "@deepseek-ai/dsh-api-session-controller": "0.1.5-rc.1",
187
+ "@deepseek-ai/dsh-client-connection": "0.1.5-rc.1",
188
+ "@deepseek-ai/dsh-client-locale": "0.1.5-rc.1",
189
+ "@deepseek-ai/dsh-client-store": "0.1.5-rc.1",
190
+ "@deepseek-ai/dsh-client-ui-chat": "0.1.5-rc.1",
191
+ "@deepseek-ai/dsh-client-ui-conversation": "0.1.5-rc.1",
192
+ "@deepseek-ai/dsh-client-ui-layout": "0.1.5-rc.1",
193
+ "@deepseek-ai/dsh-client-ui-model-selection": "0.1.5-rc.1",
194
+ "@deepseek-ai/dsh-client-ui-primitives": "0.1.5-rc.1",
195
+ "@deepseek-ai/dsh-client-ui-renderer": "0.1.5-rc.1",
196
+ "@deepseek-ai/dsh-client-ui-session": "0.1.5-rc.1",
197
+ "@deepseek-ai/dsh-client-ui-slots": "0.1.5-rc.1",
198
+ "@deepseek-ai/dsh-commands": "0.1.5-rc.1",
199
+ "@deepseek-ai/dsh-llm": "0.1.5-rc.1",
200
+ "@deepseek-ai/dsh-llm-retry": "0.1.5-rc.1",
201
+ "@deepseek-ai/dsh-session": "0.1.5-rc.1",
202
+ "@deepseek-ai/dsh-session-projection": "0.1.5-rc.1",
203
+ "@deepseek-ai/dsh-subagent": "0.1.5-rc.1",
204
+ "@deepseek-ai/dsh-system-prompt": "0.1.5-rc.1",
205
+ "@deepseek-ai/dsh-tools": "0.1.5-rc.1",
206
+ "@deepseek-ai/dsh-util-values": "0.1.5-rc.1",
207
+ "@deepseek-ai/dsh-workspace": "0.1.5-rc.1",
208
208
  "@deepseek-ai/schemastery": "^3.18.2",
209
209
  "@types/node": "^24.13.3",
210
210
  "@types/react": "~18.3.1",
@@ -222,11 +222,13 @@
222
222
  "build": "node scripts/clean-build.mjs && tsc -p tsconfig.json && tsc -p tsconfig.client.json && tsdown",
223
223
  "typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.client.json --noEmit",
224
224
  "sync:skill": "node scripts/sync-skill.mjs",
225
+ "update:skills": "node scripts/update-skills.mjs",
226
+ "test:skills-updater": "node --test scripts/update-skills.test.mjs",
225
227
  "verify:skill": "node scripts/sync-skill.mjs --check",
226
228
  "verify": "node scripts/verify.mjs && node scripts/fallback-tdd.mjs && node scripts/member-failure-tdd.mjs && node scripts/quality-gates-tdd.mjs && node scripts/lifecycle-verify.mjs && node scripts/stress-verify.mjs && pnpm verify:web-routes && pnpm verify:release && pnpm verify:skill && pnpm verify:harness-contract && pnpm verify:http-body && pnpm verify:compatibility && pnpm verify:capabilities",
227
229
  "verify:web-routes": "node scripts/web-routes-verify.mjs",
228
230
  "verify:release": "node --test scripts/release-metadata.test.mjs",
229
- "verify:harness-contract": "node scripts/harness-compat-tdd.mjs && node scripts/lifecycle-verify.mjs --modern-harness && node scripts/member-failure-tdd.mjs --modern-harness",
231
+ "verify:harness-contract": "node scripts/harness-compat-tdd.mjs && node scripts/lifecycle-verify.mjs --modern-harness && node scripts/member-failure-tdd.mjs --modern-harness && node scripts/lifecycle-verify.mjs --delivery-harness && node scripts/member-failure-tdd.mjs --delivery-harness",
230
232
  "verify:compatibility": "node scripts/compatibility.mjs && node --test scripts/compatibility.test.mjs && node scripts/doctor.mjs",
231
233
  "verify:http-body": "node --test scripts/http-body.test.mjs",
232
234
  "doctor": "node scripts/doctor.mjs",
@@ -0,0 +1,20 @@
1
+ # v0.1.17-rc.1 — Harness 0.1.5 support
2
+
3
+ npm channel: `next`. Recommended host: DeepSeek Harness `0.1.5-rc.1`.
4
+
5
+ - Adapt member wakeups to the new `deliverPrompt` contract with explicit queue delivery. Shutdown guards cover both queue and steer and restore host methods on disposal.
6
+ - Pass the child Agent explicitly during initialization, preserving model routes, reasoning effort, fallback, and failure handling after `Context.agent` removal.
7
+ - Return member navigation to Conversation, cancel superseded navigation, hide the activity overlay on global panels, and focus the new rich-text composer when returning to chat.
8
+ - Pin and inspect the complete `0.1.5-rc.1` dependency closure. Retain exact support for `0.1.2-rc.1`, `0.1.2-alpha.5`, and `0.1.2-alpha.2`.
9
+ - Update the vendored maintenance skills to upstream `ecab245c6c1831c51b0240aca13573b94a6e525e`, with a reviewed-commit updater.
10
+
11
+ Install the exact release:
12
+
13
+ ```sh
14
+ npm install --global @deepseek-ai/dsh@0.1.5-rc.1
15
+ dsh plugin --profile web add --save-exact @nanmicoder/dsh-agent-teams@0.1.17-rc.1
16
+ ```
17
+
18
+ Restart Harness and refresh the browser after installation.
19
+
20
+ Historical sessions whose team data was deleted without an archive do not yet support full panel reconstruction from logs. Runtime, artifact, and real-model browser evidence is recorded in `docs/releases/v0.1.17-rc.1/README.md` in the repository. Upgrading the global CLI does not change a Desktop application's embedded core. Keep old session data when upgrading; sharing writable session storage across host versions is not a supported downgrade procedure.