dsh-baton-mcp 0.5.3 → 0.5.5
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.zh-CN.md +4 -0
- package/host/package.json +2 -2
- package/package.json +1 -1
- package/server.json +2 -2
- package/src/server.mjs +16 -16
package/README.zh-CN.md
CHANGED
|
@@ -10,6 +10,10 @@
|
|
|
10
10
|
macOS · Windows(<a href="WINDOWS.md">说明</a>)· 不用装 Node.js · 零依赖 · MIT
|
|
11
11
|
</p>
|
|
12
12
|
|
|
13
|
+
Claude Code 和 Codex 各派一个任务给 DeepSeek Harness,它的子代理用 1 小时 41 分搭出了这条雨夜街道(40 秒,建议开声音):
|
|
14
|
+
|
|
15
|
+
https://github.com/user-attachments/assets/ed931637-acb3-4c16-8c52-72298ea90485
|
|
16
|
+
|
|
13
17
|
<p align="center">
|
|
14
18
|
<img src="./assets/readme/zh/features.svg" width="100%" alt="新建工作区和对话、续接指定对话、界面实时可见并标明发送方、完成即唤醒、不用另配 key、macOS 和 Windows 零依赖">
|
|
15
19
|
</p>
|
package/host/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-baton-host",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.5",
|
|
4
4
|
"description": "DeepSeek Harness plugin for dsh-baton: adding it is the whole install. Switched on, it registers the dsh-baton MCP server for Claude Code and Codex, then takes the baton over a local, owner-only control socket, runs it in a specific session through the host's own session controller, and hands the result back when the turn is done.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"LICENSE"
|
|
21
21
|
],
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"dsh-baton-mcp": "0.5.
|
|
23
|
+
"dsh-baton-mcp": "0.5.5"
|
|
24
24
|
},
|
|
25
25
|
"license": "MIT",
|
|
26
26
|
"dsh": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-baton-mcp",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.5",
|
|
4
4
|
"mcpName": "io.github.JialaoLiu/dsh-baton",
|
|
5
5
|
"description": "Pass the baton from Claude Code, Codex or any MCP client to a local DeepSeek Harness: an MCP server that hands off tasks, continues a specific session, shows the run live in Harness and hands the result back when it is done.",
|
|
6
6
|
"type": "module",
|
package/server.json
CHANGED
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
"url": "https://github.com/JialaoLiu/dsh-baton",
|
|
8
8
|
"source": "github"
|
|
9
9
|
},
|
|
10
|
-
"version": "0.5.
|
|
10
|
+
"version": "0.5.5",
|
|
11
11
|
"packages": [
|
|
12
12
|
{
|
|
13
13
|
"registryType": "npm",
|
|
14
14
|
"identifier": "dsh-baton-mcp",
|
|
15
|
-
"version": "0.5.
|
|
15
|
+
"version": "0.5.5",
|
|
16
16
|
"transport": {
|
|
17
17
|
"type": "stdio"
|
|
18
18
|
}
|
package/src/server.mjs
CHANGED
|
@@ -73,26 +73,26 @@ async function waitInChunks({ run_id }, progress) {
|
|
|
73
73
|
const TOOLS = [
|
|
74
74
|
{
|
|
75
75
|
name: 'dsh_list_workspaces',
|
|
76
|
-
description: 'List the workspaces (project folders)
|
|
76
|
+
description: 'List the workspaces (project folders) in the DeepSeek Harness sidebar, each with id, path, title and session_count. Use it to pick a workspace_id for dsh_send or dsh_rename_workspace; to add a folder use dsh_create_workspace, to find sessions use dsh_list_sessions. Read-only. Needs the dsh-baton-host plugin.',
|
|
77
77
|
inputSchema: { type: 'object', properties: {} },
|
|
78
78
|
run: () => core.api.workspaces(),
|
|
79
79
|
},
|
|
80
80
|
{
|
|
81
81
|
name: 'dsh_create_workspace',
|
|
82
|
-
description: 'Register a folder as a workspace in the DeepSeek Harness sidebar (creates the folder unless create_dir is false). Idempotent: an already registered folder returns its existing workspace. Needs the dsh-baton-host plugin.',
|
|
82
|
+
description: 'Register a folder as a workspace in the DeepSeek Harness sidebar (creates the folder unless create_dir is false). Idempotent: an already registered folder returns its existing workspace. Returns id, path, title and created (false when it already existed). dsh_send with a cwd registers the folder by itself, so call this only to add a workspace without starting a session; to list workspaces use dsh_list_workspaces. Needs the dsh-baton-host plugin.',
|
|
83
83
|
inputSchema: { type: 'object', required: ['path'], properties: { path: str('Absolute folder path (~ allowed)'), title: str('Sidebar title; defaults to the folder name'), create_dir: { type: 'boolean', description: 'Create the folder if missing', default: true } } },
|
|
84
84
|
run: (a) => core.api.create_workspace(a),
|
|
85
85
|
},
|
|
86
86
|
{
|
|
87
87
|
name: 'dsh_list_sessions',
|
|
88
|
-
description: `List saved DeepSeek Harness sessions, newest first,
|
|
89
|
-
inputSchema: { type: 'object', properties: { cwd: str('Only sessions of this workspace folder'), query: str('
|
|
88
|
+
description: `List saved DeepSeek Harness sessions, newest first: session_id, title, cwd, updated_at, running, and bridge_runs (active dsh-baton run ids). Use it to find the session_id for dsh_send, dsh_read_session or dsh_session_activity. There is no paging: the list stops at limit, so to see older sessions raise limit or narrow it with cwd or query. Read-only. ${ARCHIVED}`,
|
|
89
|
+
inputSchema: { type: 'object', properties: { cwd: str('Only sessions of this workspace folder'), query: str('Case-insensitive text to match in title, folder or session id'), limit: int('Max sessions returned', 20), include_subagents: { type: 'boolean', description: 'Also list sub-agent sessions', default: false } } },
|
|
90
90
|
run: (a) => core.api.list_sessions(a),
|
|
91
91
|
},
|
|
92
92
|
{
|
|
93
93
|
name: 'dsh_read_session',
|
|
94
|
-
description: 'Read the
|
|
95
|
-
inputSchema: { type: 'object', required: ['session_id'], properties: { session_id: str('Session id, e.g. session-…'), last: int('How many recent messages', 10) } },
|
|
94
|
+
description: 'Read the visible conversation of one session to catch up before continuing it: returns title, cwd, total_messages and the last messages, each with role (user or assistant), time, text and the names of tools the assistant called (tool output is not included). Read-only. For the reply of a run you started use dsh_wait or dsh_status instead; for what the session is doing right now use dsh_session_activity.',
|
|
95
|
+
inputSchema: { type: 'object', required: ['session_id'], properties: { session_id: str('Session id from dsh_list_sessions, e.g. session-…'), last: int('How many of the most recent messages to return; total_messages tells how many there are', 10) } },
|
|
96
96
|
run: (a) => core.api.read_session(a),
|
|
97
97
|
},
|
|
98
98
|
{
|
|
@@ -125,32 +125,32 @@ const TOOLS = [
|
|
|
125
125
|
},
|
|
126
126
|
{
|
|
127
127
|
name: 'dsh_rename_session',
|
|
128
|
-
description: '
|
|
129
|
-
inputSchema: { type: 'object', required: ['session_id', 'title'], properties: { session_id: str('Session id'), title: str('New title') } },
|
|
128
|
+
description: 'Set the title of one DeepSeek Harness session, as shown in the sidebar. Only the title changes; the conversation and any running turn are untouched. Can be called again at any time to change it back or to something else. Returns session_id and the saved title. To rename a workspace (project folder) use dsh_rename_workspace instead.',
|
|
129
|
+
inputSchema: { type: 'object', required: ['session_id', 'title'], properties: { session_id: str('Session id from dsh_list_sessions'), title: str('New title; surrounding spaces are trimmed and it must not be empty') } },
|
|
130
130
|
run: (a) => core.api.rename_session(a),
|
|
131
131
|
},
|
|
132
132
|
{
|
|
133
133
|
name: 'dsh_rename_workspace',
|
|
134
|
-
description: '
|
|
135
|
-
inputSchema: { type: 'object', required: ['title'], properties: { workspace_id: str('Workspace id'), path: str('Workspace folder'), title: str('New title') } },
|
|
134
|
+
description: 'Set the sidebar title of a DeepSeek Harness workspace; the folder on disk is not moved or renamed. Identify it by workspace_id or path. Can be called again to change it back. Returns id, path and the saved title. To rename a single session use dsh_rename_session instead.',
|
|
135
|
+
inputSchema: { type: 'object', required: ['title'], properties: { workspace_id: str('Workspace id from dsh_list_workspaces'), path: str('Workspace folder, used when workspace_id is not given'), title: str('New title; surrounding spaces are trimmed and it must not be empty') } },
|
|
136
136
|
run: (a) => core.api.rename_workspace(a),
|
|
137
137
|
},
|
|
138
138
|
{
|
|
139
139
|
name: 'dsh_session_activity',
|
|
140
|
-
description: 'What a session is doing right now: its running turn, sub-agents
|
|
141
|
-
inputSchema: { type: 'object', required: ['session_id'], properties: { session_id: str('Session id') } },
|
|
140
|
+
description: 'What a session is doing right now: returns busy, activity (its running turn, sub-agents at any depth, background jobs and reminders) and bridge_runs (active dsh-baton runs). Read-only. Check it before dsh_send to a session that might be busy, or before dsh_cancel. For the progress of one run use dsh_status; for past messages use dsh_read_session.',
|
|
141
|
+
inputSchema: { type: 'object', required: ['session_id'], properties: { session_id: str('Session id from dsh_list_sessions') } },
|
|
142
142
|
run: (a) => core.api.activity(a),
|
|
143
143
|
},
|
|
144
144
|
{
|
|
145
145
|
name: 'dsh_cancel',
|
|
146
|
-
description: 'Stop everything a session is doing (running turn, sub-agents, background jobs), by run_id or session_id. Messages still waiting in the queue are not removed.',
|
|
147
|
-
inputSchema: { type: 'object', properties: { run_id: str('Run id'), session_id: str('Session id
|
|
146
|
+
description: 'Stop everything a session is doing (running turn, sub-agents, background jobs, reminders), by run_id or session_id; the session itself is kept. It retries a few times until the session is quiet, then returns session_id, run (when run_id was given), attempts, still_busy, activity (whatever is still going) and queued_runs. Messages still waiting in the queue are not removed. Safe to repeat: on an idle session it does nothing and returns still_busy: false. Use dsh_session_activity first to see what would be stopped.',
|
|
147
|
+
inputSchema: { type: 'object', properties: { run_id: str('Run id from dsh_send; stops the session that run belongs to'), session_id: str('Session id, to stop work dsh-baton did not start') } },
|
|
148
148
|
run: (a) => core.api.cancel(a),
|
|
149
149
|
},
|
|
150
150
|
{
|
|
151
151
|
name: 'dsh_list_runs',
|
|
152
|
-
description: 'List recent runs
|
|
153
|
-
inputSchema: { type: 'object', properties: { limit: int('Max runs', 10) } },
|
|
152
|
+
description: 'List recent runs sent through dsh_send (the latest 100 are kept), newest first, each with run_id, session_id, state, started_at, ended_at, message_preview, final_text and error. Use it to recover a run_id you lost or to review past hand-overs. Read-only. For one run in detail use dsh_status; to wait for one use dsh_wait; for sessions use dsh_list_sessions.',
|
|
153
|
+
inputSchema: { type: 'object', properties: { limit: int('Max runs returned', 10) } },
|
|
154
154
|
run: (a) => core.api.list_runs(a),
|
|
155
155
|
},
|
|
156
156
|
]
|