dsh-connect 0.2.0 → 0.5.2
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 +197 -0
- package/lib/binding.d.ts +51 -0
- package/lib/binding.d.ts.map +1 -1
- package/lib/binding.js +71 -3
- package/lib/binding.js.map +1 -1
- package/lib/commands.d.ts +18 -1
- package/lib/commands.d.ts.map +1 -1
- package/lib/commands.js +66 -25
- package/lib/commands.js.map +1 -1
- package/lib/i18n.d.ts +233 -0
- package/lib/i18n.d.ts.map +1 -0
- package/lib/i18n.js +469 -0
- package/lib/i18n.js.map +1 -0
- package/lib/index.d.ts +39 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +14 -2
- package/lib/index.js.map +1 -1
- package/lib/interaction.d.ts +96 -0
- package/lib/interaction.d.ts.map +1 -0
- package/lib/interaction.js +389 -0
- package/lib/interaction.js.map +1 -0
- package/lib/runner.d.ts +201 -1
- package/lib/runner.d.ts.map +1 -1
- package/lib/runner.js +1506 -170
- package/lib/runner.js.map +1 -1
- package/lib/service.d.ts +19 -0
- package/lib/service.d.ts.map +1 -1
- package/lib/service.js +128 -2
- package/lib/service.js.map +1 -1
- package/lib/types.d.ts +38 -0
- package/lib/types.d.ts.map +1 -1
- package/package.json +58 -49
- package/LICENSE +0 -21
package/lib/runner.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { Context } from "@deepseek-ai/cordis";
|
|
|
2
2
|
import { type Session, type SessionEvent } from "@deepseek-ai/dsh-session";
|
|
3
3
|
import type { ChannelAdapter, InboundMessage, TurnOutcome } from "./types.js";
|
|
4
4
|
import type { BindingStore } from "./binding.js";
|
|
5
|
+
import { type Language } from "./i18n.js";
|
|
5
6
|
export interface ConnectConfig {
|
|
6
7
|
/** Agent preset id composed into each session; `undefined` = roster default. */
|
|
7
8
|
agentPreset?: string;
|
|
@@ -9,19 +10,87 @@ export interface ConnectConfig {
|
|
|
9
10
|
workDir?: string;
|
|
10
11
|
/** Optional workspace directories offered by the `/dir` chooser. */
|
|
11
12
|
workspaces?: string[];
|
|
13
|
+
/** Vision-capable model used to describe images when the main model can't. */
|
|
14
|
+
visionModel?: {
|
|
15
|
+
provider: string;
|
|
16
|
+
model: string;
|
|
17
|
+
};
|
|
18
|
+
/** User-facing message language: `zh` (default) or `en`. */
|
|
19
|
+
language?: Language;
|
|
12
20
|
allowUsers?: string[];
|
|
13
21
|
allowChats?: string[];
|
|
14
22
|
stateDir?: string;
|
|
23
|
+
/** Automatically create Web mirror for new sessions (default: true). */
|
|
24
|
+
autoMirror?: boolean;
|
|
25
|
+
/** Liveness heartbeat interval ms for the streaming card; 0 disables it (default: 60000). */
|
|
26
|
+
streamHeartbeatMs?: number;
|
|
27
|
+
/** Default notification level for streaming replies (default: `important`). */
|
|
28
|
+
notifyLevel?: NotifyLevel;
|
|
29
|
+
/** Proactive progress-notice interval ms: when a turn goes silent for this long, a standalone status card is sent (default: 300000 = 5 min; 0 disables). */
|
|
30
|
+
progressTimeoutMs?: number;
|
|
15
31
|
}
|
|
16
32
|
export interface ResolvedConnectConfig {
|
|
17
33
|
agentPreset?: string;
|
|
18
34
|
workDir?: string;
|
|
19
35
|
workspaces: string[];
|
|
36
|
+
visionModel?: {
|
|
37
|
+
provider: string;
|
|
38
|
+
model: string;
|
|
39
|
+
};
|
|
40
|
+
language: Language;
|
|
20
41
|
allowUsers: string[];
|
|
21
42
|
allowChats: string[];
|
|
22
43
|
stateDir?: string;
|
|
44
|
+
autoMirror: boolean;
|
|
45
|
+
streamHeartbeatMs: number;
|
|
46
|
+
notifyLevel: NotifyLevel;
|
|
47
|
+
progressTimeoutMs: number;
|
|
23
48
|
}
|
|
24
49
|
export declare function resolveConnectConfig(config: ConnectConfig): ResolvedConnectConfig;
|
|
50
|
+
/** Per-turn streaming assembly state mutated by {@link applyStreamChunk}. */
|
|
51
|
+
export interface StreamState {
|
|
52
|
+
chunks: {
|
|
53
|
+
push(text: string): void;
|
|
54
|
+
};
|
|
55
|
+
lastText: string;
|
|
56
|
+
reasoning: boolean;
|
|
57
|
+
hintPushed: boolean;
|
|
58
|
+
lastIndex: number | undefined;
|
|
59
|
+
pushedAny: boolean;
|
|
60
|
+
lastPushAt: number;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* How much of the agent's live progress the streaming card shows.
|
|
64
|
+
* - `full` — everything: reasoning text, tool calls, heartbeats, answer.
|
|
65
|
+
* - `important` — key milestones only: thinking hint, tool calls, heartbeats, answer (no reasoning text).
|
|
66
|
+
* - `result` — only the final answer.
|
|
67
|
+
*/
|
|
68
|
+
export type NotifyLevel = "full" | "important" | "result";
|
|
69
|
+
/** One assistant chunk event of interest to the streaming bridge. */
|
|
70
|
+
export interface StreamChunkLike {
|
|
71
|
+
type: string;
|
|
72
|
+
index?: number;
|
|
73
|
+
text?: string;
|
|
74
|
+
block?: {
|
|
75
|
+
type?: string;
|
|
76
|
+
text?: string;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
export declare function applyStreamChunk(state: StreamState, thinkingHint: string, chunk: StreamChunkLike, level?: NotifyLevel): void;
|
|
80
|
+
/**
|
|
81
|
+
* Push a localized tool-call status line into the streaming queue so long
|
|
82
|
+
* tool-execution stretches stay visibly alive (the Web GUI shows tool calls;
|
|
83
|
+
* the chat card should too). Ends the reasoning phase and drops the block
|
|
84
|
+
* index so the next content block gets its own separator instead of stacking
|
|
85
|
+
* one on top of the tool line's own blank lines.
|
|
86
|
+
* @param state - the turn's mutable assembly state.
|
|
87
|
+
* @param label - the localized status line, e.g. "🔧 调用工具 `pwsh` — …".
|
|
88
|
+
*/
|
|
89
|
+
export declare function applyToolCall(state: StreamState, label: string): void;
|
|
90
|
+
/** Pull a short human summary out of a tool call's `arguments` JSON (whitespace folded to one line). */
|
|
91
|
+
export declare function toolCallSummary(argumentsJson: unknown): string | undefined;
|
|
92
|
+
/** Pull the first question's text out of an `ask_user_question` arguments JSON (whitespace folded to one line). */
|
|
93
|
+
export declare function questionTextOf(argumentsJson: unknown): string;
|
|
25
94
|
export declare function summarizeTurn(events: readonly SessionEvent[], firstSeq: number): TurnOutcome;
|
|
26
95
|
export declare class AgentRunner {
|
|
27
96
|
private readonly ctx;
|
|
@@ -31,6 +100,7 @@ export declare class AgentRunner {
|
|
|
31
100
|
private readonly chatType;
|
|
32
101
|
private readonly adapter;
|
|
33
102
|
private readonly bindings;
|
|
103
|
+
private readonly adapters?;
|
|
34
104
|
private readonly queue;
|
|
35
105
|
private running;
|
|
36
106
|
private agent?;
|
|
@@ -39,7 +109,14 @@ export declare class AgentRunner {
|
|
|
39
109
|
private workDir;
|
|
40
110
|
private streamEnabled;
|
|
41
111
|
private summaryEnabled;
|
|
42
|
-
|
|
112
|
+
private language;
|
|
113
|
+
private notifyLevel;
|
|
114
|
+
private progressTimeoutMs;
|
|
115
|
+
private t;
|
|
116
|
+
constructor(ctx: Context, config: ResolvedConnectConfig, channel: string, chatKey: string, chatType: "p2p" | "group", adapter: ChannelAdapter, bindings: BindingStore, adapters?: Map<string, ChannelAdapter> | undefined);
|
|
117
|
+
private menuTitle;
|
|
118
|
+
private rootMenuSections;
|
|
119
|
+
private reasonLabel;
|
|
43
120
|
/** Prefer the user's first DSH workspace over the process cwd as default. */
|
|
44
121
|
private resolveDefaultWorkDir;
|
|
45
122
|
enqueue(msg: InboundMessage): void;
|
|
@@ -49,18 +126,70 @@ export declare class AgentRunner {
|
|
|
49
126
|
private drain;
|
|
50
127
|
private runTurn;
|
|
51
128
|
private ensureAgent;
|
|
129
|
+
/**
|
|
130
|
+
* Attach a session to the DSH workspace matching its work directory so the
|
|
131
|
+
* Web GUI groups it under the same workspace the Feishu side uses.
|
|
132
|
+
* Best-effort: without a workspace registry this is a no-op.
|
|
133
|
+
*/
|
|
134
|
+
private attachToWorkspace;
|
|
52
135
|
private get agents();
|
|
53
136
|
private get sessions();
|
|
54
137
|
private defaultSelection;
|
|
138
|
+
/**
|
|
139
|
+
* Compose the preset-only agent setup.
|
|
140
|
+
*
|
|
141
|
+
* Deliberately does NOT install a static model selection on the agent. The
|
|
142
|
+
* DSH Web GUI switches models through the host api-proxy's session-scoped
|
|
143
|
+
* selection (`selectionFor` + `installModelSelection`), which is installed
|
|
144
|
+
* lazily when a session's model directory is loaded and wins the
|
|
145
|
+
* `agent/request` waterfall. A static selection captured here at create /
|
|
146
|
+
* resume time would take precedence over that and silently pin every request
|
|
147
|
+
* to the default model captured at composition — so a model the user picks
|
|
148
|
+
* in the Web GUI would appear to succeed (the seat and `session.models`
|
|
149
|
+
* report it) while the actual LLM requests keep using the old default.
|
|
150
|
+
* The default model still seeds the agent through `agentOptions` in
|
|
151
|
+
* `ensureAgent`, which `buildRequest` uses as its fallback route.
|
|
152
|
+
*/
|
|
55
153
|
private composeSetup;
|
|
154
|
+
/** Agents this runner has already attached a `session/event` listener to. */
|
|
155
|
+
private readonly watchedAgents;
|
|
56
156
|
private watchAgent;
|
|
57
157
|
private driveAgent;
|
|
158
|
+
/**
|
|
159
|
+
* Build the user content for one inbound message. When the message carries
|
|
160
|
+
* images, either pass them directly to the main model (if it supports
|
|
161
|
+
* vision) or run a vision sub-task with a capable model and inject its
|
|
162
|
+
* description as text — so a text-only main model never stalls on images.
|
|
163
|
+
*/
|
|
164
|
+
private buildUserContent;
|
|
165
|
+
/** Copy images into `<workDir>/.dsh-connect-images` so the agent's tools can reach them. */
|
|
166
|
+
private stageImages;
|
|
167
|
+
/** Copy non-image attachments into `<workDir>/.dsh-connect-files` so the agent's tools can reach them. */
|
|
168
|
+
private stageFiles;
|
|
169
|
+
private imageBlocks;
|
|
170
|
+
private describeImages;
|
|
171
|
+
private modelSupportsVision;
|
|
172
|
+
private findVisionModel;
|
|
173
|
+
private log;
|
|
58
174
|
private readTodos;
|
|
59
175
|
private touchBinding;
|
|
60
176
|
private sendSummary;
|
|
177
|
+
/** Context-window usage at or above this percentage suggests compaction. */
|
|
178
|
+
private static readonly COMPACT_THRESHOLD_PCT;
|
|
179
|
+
/**
|
|
180
|
+
* Send a compact task-end card: the model used, input/output tokens, elapsed
|
|
181
|
+
* time, and whether compaction is advisable given context-window usage.
|
|
182
|
+
*/
|
|
183
|
+
private sendTurnStats;
|
|
61
184
|
private handleCommand;
|
|
62
185
|
private disposeAgent;
|
|
63
186
|
private recordSession;
|
|
187
|
+
/**
|
|
188
|
+
* Automatically create a Web mirror for the session.
|
|
189
|
+
* This enables DSH Web GUI to view and interact with the conversation
|
|
190
|
+
* without requiring manual `/mirror` command.
|
|
191
|
+
*/
|
|
192
|
+
private autoCreateWebMirror;
|
|
64
193
|
private newChat;
|
|
65
194
|
private clearChat;
|
|
66
195
|
private switchTo;
|
|
@@ -68,6 +197,8 @@ export declare class AgentRunner {
|
|
|
68
197
|
private openMenu;
|
|
69
198
|
private menuItems;
|
|
70
199
|
private showStatus;
|
|
200
|
+
/** Extract the most recent turn's completion info from session events. */
|
|
201
|
+
private getLastTurnInfo;
|
|
71
202
|
private showTasks;
|
|
72
203
|
private showSettings;
|
|
73
204
|
private modelMenuItems;
|
|
@@ -75,11 +206,80 @@ export declare class AgentRunner {
|
|
|
75
206
|
private setModel;
|
|
76
207
|
private reasoningMenuItems;
|
|
77
208
|
private setReasoning;
|
|
209
|
+
/** Switch the user-facing language for this chat, persisted in its binding. */
|
|
210
|
+
private setLanguage;
|
|
211
|
+
/**
|
|
212
|
+
* Switch the notification level for this chat (persisted in its binding and
|
|
213
|
+
* effective immediately for the next streaming reply).
|
|
214
|
+
*/
|
|
215
|
+
private setNotifyLevel;
|
|
216
|
+
/** Show the three-level notification picker (used by the `/notify` command). */
|
|
217
|
+
private openNotifyPicker;
|
|
218
|
+
/**
|
|
219
|
+
* Switch the proactive progress-notice interval for this chat (persisted in
|
|
220
|
+
* its binding and effective for the next turn; 0 disables the watchdog).
|
|
221
|
+
*/
|
|
222
|
+
private setProgressTimeout;
|
|
223
|
+
/** Show the progress-interval picker (used by the `/progress` command). */
|
|
224
|
+
private openProgressPicker;
|
|
78
225
|
private showPlugins;
|
|
79
226
|
private createWorkspace;
|
|
80
227
|
private compact;
|
|
81
228
|
private showHistory;
|
|
82
229
|
private showGoals;
|
|
230
|
+
private goalPhaseLabel;
|
|
231
|
+
private showSchedule;
|
|
83
232
|
private showAllWorkspaces;
|
|
233
|
+
/**
|
|
234
|
+
* Create or show Web mirror session for this chat.
|
|
235
|
+
* The mirror shares the same DSH session but enforces mutual exclusion:
|
|
236
|
+
* when Feishu is executing a task, Web is read-only, and vice versa.
|
|
237
|
+
*/
|
|
238
|
+
private handleMirror;
|
|
239
|
+
/**
|
|
240
|
+
* Manually release session lock.
|
|
241
|
+
*/
|
|
242
|
+
private handleUnlock;
|
|
243
|
+
/**
|
|
244
|
+
* Renew the current session lock timeout.
|
|
245
|
+
* Extends the lock by another full timeout period from now.
|
|
246
|
+
*/
|
|
247
|
+
private handleRenewLock;
|
|
248
|
+
/**
|
|
249
|
+
* Export conversation history to Markdown or PDF.
|
|
250
|
+
*/
|
|
251
|
+
private handleExport;
|
|
252
|
+
/**
|
|
253
|
+
* Generate Markdown representation of the conversation history.
|
|
254
|
+
*/
|
|
255
|
+
private generateMarkdown;
|
|
256
|
+
/**
|
|
257
|
+
* Check if the current channel has write access to the session.
|
|
258
|
+
* Returns true if allowed to send messages, false if read-only.
|
|
259
|
+
*/
|
|
260
|
+
private canWrite;
|
|
261
|
+
/**
|
|
262
|
+
* Acquire session lock for the given channel.
|
|
263
|
+
* Returns true if lock acquired, false if already locked by another channel.
|
|
264
|
+
*/
|
|
265
|
+
private acquireLock;
|
|
266
|
+
/**
|
|
267
|
+
* Queue a message for later execution when lock is released.
|
|
268
|
+
* Returns the position in queue.
|
|
269
|
+
*/
|
|
270
|
+
private queueMessage;
|
|
271
|
+
/**
|
|
272
|
+
* Process all queued messages after lock release.
|
|
273
|
+
* Re-enqueues them into the runner's message queue for actual execution.
|
|
274
|
+
*/
|
|
275
|
+
private processQueuedMessages;
|
|
276
|
+
/** Release session lock. */
|
|
277
|
+
private releaseLock;
|
|
278
|
+
/** Check if lock has timed out. */
|
|
279
|
+
private isLockTimedOut;
|
|
280
|
+
/** Check and release timed-out locks. */
|
|
281
|
+
private checkAndReleaseTimeoutLock;
|
|
282
|
+
/** Release a timed-out lock and notify. */
|
|
283
|
+
private releaseTimeoutLock;
|
|
84
284
|
}
|
|
85
285
|
//# sourceMappingURL=runner.d.ts.map
|
package/lib/runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|