@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.
- package/README.md +12 -9
- package/README_ZH.md +11 -9
- package/compatibility.json +17 -4
- package/lib/client/ActivityPanel.js +4 -4
- package/lib/client/index.js +9 -3
- package/lib/client/session-navigation.js +8 -2
- package/lib/client.js +24 -14
- package/lib/client.js.map +1 -1
- package/lib/harness-compat.js +24 -4
- package/lib/members.js +1 -4
- package/lib/types/client/ActivityPanel.d.ts +2 -1
- package/lib/types/client/session-navigation.d.ts +8 -2
- package/lib/types/harness-compat.d.ts +4 -3
- package/package.json +49 -47
- package/release-notes/v0.1.17-rc.1.md +20 -0
package/lib/harness-compat.js
CHANGED
|
@@ -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,
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
185
|
-
"@deepseek-ai/dsh-agent": "0.1.
|
|
186
|
-
"@deepseek-ai/dsh-api-session-controller": "0.1.
|
|
187
|
-
"@deepseek-ai/dsh-client-connection": "0.1.
|
|
188
|
-
"@deepseek-ai/dsh-client-locale": "0.1.
|
|
189
|
-
"@deepseek-ai/dsh-client-store": "0.1.
|
|
190
|
-
"@deepseek-ai/dsh-client-ui-chat": "0.1.
|
|
191
|
-
"@deepseek-ai/dsh-client-ui-conversation": "0.1.
|
|
192
|
-
"@deepseek-ai/dsh-client-ui-layout": "0.1.
|
|
193
|
-
"@deepseek-ai/dsh-client-ui-model-selection": "0.1.
|
|
194
|
-
"@deepseek-ai/dsh-client-ui-primitives": "0.1.
|
|
195
|
-
"@deepseek-ai/dsh-client-ui-renderer": "0.1.
|
|
196
|
-
"@deepseek-ai/dsh-client-ui-session": "0.1.
|
|
197
|
-
"@deepseek-ai/dsh-client-ui-slots": "0.1.
|
|
198
|
-
"@deepseek-ai/dsh-commands": "0.1.
|
|
199
|
-
"@deepseek-ai/dsh-llm": "0.1.
|
|
200
|
-
"@deepseek-ai/dsh-llm-retry": "0.1.
|
|
201
|
-
"@deepseek-ai/dsh-session": "0.1.
|
|
202
|
-
"@deepseek-ai/dsh-session-projection": "0.1.
|
|
203
|
-
"@deepseek-ai/dsh-subagent": "0.1.
|
|
204
|
-
"@deepseek-ai/dsh-system-prompt": "0.1.
|
|
205
|
-
"@deepseek-ai/dsh-tools": "0.1.
|
|
206
|
-
"@deepseek-ai/dsh-util-values": "0.1.
|
|
207
|
-
"@deepseek-ai/dsh-workspace": "0.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.
|