dsh-agent-lines 0.3.0 → 0.3.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/CHANGELOG.en.md +14 -0
- package/CHANGELOG.md +14 -0
- package/CODE_OF_CONDUCT.en.md +0 -0
- package/CODE_OF_CONDUCT.md +0 -0
- package/CONTRIBUTING.en.md +0 -0
- package/CONTRIBUTING.md +0 -0
- package/LICENSE +0 -0
- package/NOTICE +0 -0
- package/README.en.md +58 -106
- package/README.md +57 -105
- package/SECURITY.en.md +0 -0
- package/SECURITY.md +0 -0
- package/cordis.patch.yml +0 -0
- package/docs/ARCHITECTURE.en.md +0 -0
- package/docs/ARCHITECTURE.md +0 -0
- package/docs/DEPLOY.en.md +0 -0
- package/docs/DEPLOY.md +0 -0
- package/docs/PROTOCOL.en.md +0 -0
- package/docs/PROTOCOL.md +0 -0
- package/docs/SECURITY.en.md +4 -4
- package/docs/SECURITY.md +4 -4
- package/docs/assets/first-use.gif +0 -0
- package/docs/en/index.html +4 -4
- package/docs/index.html +4 -4
- package/docs/market-index.json +2 -2
- package/examples/market-index.json +2 -2
- package/lib/delivery.js +0 -0
- package/lib/index.js +17 -8
- package/lib/prompt.js +0 -0
- package/lib/protocol.js +0 -0
- package/lib/store.js +4 -1
- package/lib/tools.js +4 -3
- package/lib/transport.js +0 -0
- package/package.json +1 -1
- package/docs/assets/social-preview.png +0 -0
package/CHANGELOG.en.md
CHANGED
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
English | [中文](CHANGELOG.md)
|
|
4
4
|
|
|
5
|
+
## 0.3.2 (2026-11-04)
|
|
6
|
+
|
|
7
|
+
- Zero-config bootstrap: with no plugin config, start one unbound manager line; a root Session can call line_claim_manager to bind itself.
|
|
8
|
+
- Default DB path follows DSH_HOME; without it, still ~/.dsh/agent-lines/lines.db.
|
|
9
|
+
- README now requires a DSH Web restart after install/update; explicit manager/worker config is optional.
|
|
10
|
+
- No schema change; remains v6.
|
|
11
|
+
|
|
12
|
+
## 0.3.1 (2026-11-04)
|
|
13
|
+
|
|
14
|
+
- README is now user-first: scenarios and install come first; technical details are later.
|
|
15
|
+
- Added install.sh, which picks the DSH Web profile automatically and verifies agent-lines.
|
|
16
|
+
- The npm 0.3.1 package now carries the same bilingual README and install docs as the public repo.
|
|
17
|
+
- No runtime behavior change; schema remains v6.
|
|
18
|
+
|
|
5
19
|
## 0.3.0 (2026-11-04)
|
|
6
20
|
|
|
7
21
|
- Transport seam (`transport: sqlite` default).
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
[English](CHANGELOG.en.md) | 中文
|
|
4
4
|
|
|
5
|
+
## 0.3.2 (2026-11-04)
|
|
6
|
+
|
|
7
|
+
- 零配置启动:没有 plugin config 时自动启动一条未绑定 manager,根会话可调用 line_claim_manager 自己绑定。
|
|
8
|
+
- 默认 DB 路径跟随 DSH_HOME;未设置时仍为 ~/.dsh/agent-lines/lines.db。
|
|
9
|
+
- README 明确:安装或更新后必须重启 DSH Web;显式 manager/worker 配置变为可选。
|
|
10
|
+
- 无 schema 变化,仍为 v6。
|
|
11
|
+
|
|
12
|
+
## 0.3.1 (2026-11-04)
|
|
13
|
+
|
|
14
|
+
- README 改为用户优先:先场景、安装和首次使用,技术细节后置;安装/快速开始不再要求手填 profile。
|
|
15
|
+
- 新增 install.sh,自动选择 DSH Web profile,并检查 agent-lines 是否可用。
|
|
16
|
+
- 同步最新双语 README、Pages、安装说明;0.3.1 的 npm 包内文档与公开仓库一致。
|
|
17
|
+
- 无运行时行为变更;schema 仍为 v6。
|
|
18
|
+
|
|
5
19
|
## 0.3.0 (2026-11-04)
|
|
6
20
|
|
|
7
21
|
- Transport 接缝(transport: sqlite 默认)。
|
package/CODE_OF_CONDUCT.en.md
CHANGED
|
File without changes
|
package/CODE_OF_CONDUCT.md
CHANGED
|
File without changes
|
package/CONTRIBUTING.en.md
CHANGED
|
File without changes
|
package/CONTRIBUTING.md
CHANGED
|
File without changes
|
package/LICENSE
CHANGED
|
File without changes
|
package/NOTICE
CHANGED
|
File without changes
|
package/README.en.md
CHANGED
|
@@ -4,81 +4,42 @@ English | [中文](README.md)
|
|
|
4
4
|
|
|
5
5
|
> Community plugin for DeepSeek Harness. Not an official DeepSeek product.
|
|
6
6
|
|
|
7
|
-
> **100%
|
|
7
|
+
> **100% Vibe Coding.** The architecture, code, tests, and docs were produced in AI agent sessions. It is experimental: review the code and run an integration test before production use.
|
|
8
8
|
|
|
9
|
-
A drop-in super-agent alternative for DSH
|
|
9
|
+
A drop-in super-agent alternative for DSH.
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
Use built-in **subagents / Agent Teams** when all workers are children of one session in one DSH process. That is simpler and needs no plugin.
|
|
14
|
-
|
|
15
|
-
Use **dsh-agent-lines** when you need:
|
|
16
|
-
|
|
17
|
-
- named lines that are addressable as `agent#line`;
|
|
18
|
-
- lines that can be independent DSH Sessions with their own context and lifetime;
|
|
19
|
-
- a durable inbox that survives a receiver restart;
|
|
20
|
-
- several DSH processes on one machine sharing one line database;
|
|
21
|
-
- a manager line that creates worker lines by natural-language request.
|
|
22
|
-
|
|
23
|
-
The plugin is a transport + light provisioning layer, not a task orchestrator. Handover (moving a line to a new Session and switching routing) is **not** implemented.
|
|
24
|
-
|
|
25
|
-
## Transports
|
|
26
|
-
|
|
27
|
-
`transport` defaults to `sqlite` (local-first) and is the only transport shipped in 0.3. Installing the plugin never requires Postgres or a Python service.
|
|
28
|
-
|
|
29
|
-
## Architecture
|
|
11
|
+
Stop reopening sessions and copying context by hand. Give one lead agent a long-lived team: each member has a name and a role, messages survive restarts, and the lead collects and reports the results.
|
|
30
12
|
|
|
31
|
-
|
|
32
|
-
flowchart LR
|
|
33
|
-
U[User] --> M[Manager DSH Session]
|
|
34
|
-
M -->|line_create / line_send| P[dsh-agent-lines]
|
|
35
|
-
P --> Q[(SQLite lines.db)]
|
|
36
|
-
P -->|prompt requestId| W1[Worker line Session A]
|
|
37
|
-
P -->|prompt requestId| W2[Worker line Session B]
|
|
38
|
-
W1 -->|line_inbox / line_ack| P
|
|
39
|
-
W2 -->|line_inbox / line_ack| P
|
|
40
|
-
~~~
|
|
13
|
+
## When to use it
|
|
41
14
|
|
|
42
|
-
|
|
15
|
+
Use it when:
|
|
43
16
|
|
|
44
|
-
|
|
17
|
+
- You have a long-running project and do not want to re-explain the background every time.
|
|
18
|
+
- You want several agents to keep stable roles: research, architecture, UI/UX, development, testing, release, and operations.
|
|
19
|
+
- You need a fixed name for each role, so you can assign work directly.
|
|
20
|
+
- Work must survive closing a window or restarting DSH: messages and context should still be there.
|
|
21
|
+
- You want one lead agent to decompose work, create the team, track progress, collect results, and report back.
|
|
45
22
|
|
|
46
|
-
|
|
47
|
-
- Node.js `^22.19.0 || >=24.0.0`
|
|
48
|
-
- A local filesystem for the SQLite database (NFS/CIFS/SMB/FUSE are refused)
|
|
23
|
+
If you only need temporary child tasks inside one session, use DSH subagents / Agent Teams; you do not need this plugin.
|
|
49
24
|
|
|
50
25
|
## Install
|
|
51
26
|
|
|
52
|
-
|
|
53
|
-
dsh plugin --profile <profile> add dsh-agent-lines@0.3.0
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
Until the package is published, install the local tarball:
|
|
27
|
+
One-command install (recommended; no need to find a profile):
|
|
57
28
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
If you do not know the `<profile>`, use the one-command installer (it picks `web`, or the only profile):
|
|
29
|
+
curl -fsSL https://raw.githubusercontent.com/Lencen/dsh-agent-lines/main/install.sh -o install.sh
|
|
30
|
+
bash install.sh
|
|
63
31
|
|
|
64
|
-
|
|
65
|
-
curl -fsSL https://raw.githubusercontent.com/Lencen/dsh-agent-lines/main/install.sh -o install.sh
|
|
66
|
-
bash install.sh
|
|
67
|
-
# if npm is not published: bash install.sh ./dsh-agent-lines-0.3.0.tgz
|
|
68
|
-
```
|
|
32
|
+
The script picks the DSH Web profile, installs the plugin, and verifies agent-lines. If it cannot decide, it lists existing profiles and tells you how to specify one.
|
|
69
33
|
|
|
70
|
-
|
|
34
|
+
**Restart DSH Web after install or update.** A running process does not load new plugin code. With no plugin config the plugin starts in zero-config mode: one unbound manager line, and a root Session can call line_claim_manager to bind itself. The explicit "Manager config" block is optional, for a fixed manager/worker setup.
|
|
71
35
|
|
|
72
|
-
|
|
73
|
-
- Isolated install: use a new name such as `agent-lines`; the command initializes it:
|
|
36
|
+
Offline or when npm is unavailable, use the local tarball:
|
|
74
37
|
|
|
75
|
-
|
|
76
|
-
dsh plugin --profile agent-lines add dsh-agent-lines@0.3.0
|
|
77
|
-
```
|
|
38
|
+
bash install.sh ./dsh-agent-lines-0.3.2.tgz
|
|
78
39
|
|
|
79
|
-
|
|
40
|
+
After install and restart, it works without a config. When you want a fixed manager/worker setup, paste the "Manager config" block below into the file printed by the installer.
|
|
80
41
|
|
|
81
|
-
### Manager config
|
|
42
|
+
### Manager config (optional)
|
|
82
43
|
|
|
83
44
|
```yaml
|
|
84
45
|
- id: agent-lines
|
|
@@ -102,35 +63,13 @@ Do not put a line label such as `manager-line` or `research` in `--profile`.
|
|
|
102
63
|
|
|
103
64
|
Only `createFrom` may call `line_create`. Worker profiles should leave `allowCreate` false.
|
|
104
65
|
|
|
105
|
-
### Worker profile
|
|
106
|
-
|
|
107
|
-
```yaml
|
|
108
|
-
- id: agent-lines
|
|
109
|
-
name: dsh-agent-lines
|
|
110
|
-
config:
|
|
111
|
-
agentId: agent-demo
|
|
112
|
-
dbPath: /home/me/.dsh/agent-lines/lines.db
|
|
113
|
-
lines:
|
|
114
|
-
- label: frontend-line
|
|
115
|
-
sessionId: session-lines-frontend
|
|
116
|
-
role: 前端
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
The legacy single-line form `line: frontend-line` + `sessionId: ...` is still accepted.
|
|
120
|
-
|
|
121
66
|
## Quick start
|
|
122
67
|
|
|
123
|
-
1.
|
|
124
|
-
2.
|
|
125
|
-
3.
|
|
126
|
-
4. Call
|
|
127
|
-
|
|
128
|
-
dsh-agent-lines claim --agent agent-demo --line manager-line --session "$DSH_SESSION_ID"
|
|
129
|
-
~~~
|
|
130
|
-
5. Tell the manager: "Create frontend-line, backend-line and ops-line, then send each a short hello."
|
|
131
|
-
6. Worker lines can be separate profiles pointing at the same <code>dbPath</code>, or lines created inside the manager process.
|
|
132
|
-
|
|
133
|
-
The first thing to check on any new Session is <code>line_status</code>: it explains whether the Session is bound, who the manager is, and what to do next.
|
|
68
|
+
1. Run the installer above.
|
|
69
|
+
2. **Restart DSH Web** so the plugin is loaded.
|
|
70
|
+
3. Open any root Session. The zero-config path needs no YAML.
|
|
71
|
+
4. Call line_status; if the Session is not bound, call line_claim_manager({ confirm: "bind-manager" }).
|
|
72
|
+
5. Say "create the first-use team"; wait for the member lines, then send the first task separately.
|
|
134
73
|
|
|
135
74
|
## First use: build a development team
|
|
136
75
|
|
|
@@ -164,30 +103,18 @@ After creation, call line_list to confirm.
|
|
|
164
103
|
|
|
165
104
|
Actual DSH Web demo profile, generic labels; no internal data.
|
|
166
105
|
|
|
167
|
-
|
|
168
106
|
## Scenario: one manager, several execution lines
|
|
169
107
|
|
|
170
|
-
|
|
108
|
+
The lead creates the team first; the work comes next.
|
|
171
109
|
|
|
172
|
-
|
|
110
|
+
1. The lead creates members by role: research, architecture, UI/UX, development, testing, acceptance, release, operations.
|
|
111
|
+
2. You give the lead one concrete task, for example "add CSV export to the reports page, with tests and a one-page runbook."
|
|
112
|
+
3. The lead decomposes it and sends each part to the right member; every message stays local.
|
|
113
|
+
4. Members receive the task, execute it, acknowledge it, and reply to the lead when needed.
|
|
114
|
+
5. The lead collects results, resolves disagreements, and aligns the answer.
|
|
115
|
+
6. You see the lead's summary; each member keeps its own context and message history.
|
|
173
116
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
1. The manager calls <code>line_create</code> for each execution line and <code>line_list</code> to confirm them.
|
|
177
|
-
2. The user gives a task, for example: "Add CSV export to the reports page, with tests and a short runbook."
|
|
178
|
-
3. The manager decomposes it and calls <code>line_send</code> to the relevant lines. Each message is persisted in SQLite.
|
|
179
|
-
4. Each worker calls <code>line_inbox</code>, does its part, calls <code>line_ack</code>, and may reply with <code>line_send</code>.
|
|
180
|
-
5. The manager collects results, resolves a disagreement (for example, frontend and backend disagree on the response shape), and writes the summary.
|
|
181
|
-
6. The user sees the manager summary; the worker Sessions keep their own context and message history.
|
|
182
|
-
|
|
183
|
-
This is a prompt pattern, not a built-in org chart: the manager model decides how to split work. The plugin supplies the durable transport and hard guards:
|
|
184
|
-
|
|
185
|
-
- <code>maxLines</code> bounds creation;
|
|
186
|
-
- <code>noReply</code>, <code>maxReplyDepth</code>, and self-send blocking stop automatic echo;
|
|
187
|
-
- <code>line_status</code> diagnoses a missing manager binding;
|
|
188
|
-
- one Session has one writer.
|
|
189
|
-
|
|
190
|
-
If the manager is not bound, <code>line_status</code> returns the repair command; call <code>line_claim_manager</code> (or the CLI) before the scenario.
|
|
117
|
+
This is a prompt-driven team pattern, not a built-in org chart: the lead model decides how to split work. Technical details are in "Use" and "Delivery semantics" below.
|
|
191
118
|
|
|
192
119
|
## Use
|
|
193
120
|
|
|
@@ -227,6 +154,31 @@ dsh-agent-lines doctor
|
|
|
227
154
|
|
|
228
155
|
Use `--db` or `DSH_AGENT_LINES_DB` to point the CLI at the plugin's database.
|
|
229
156
|
|
|
157
|
+
## Transports
|
|
158
|
+
|
|
159
|
+
`transport` defaults to `sqlite` (local-first) and is the only transport shipped in 0.3. Installing the plugin never requires Postgres or a Python service.
|
|
160
|
+
|
|
161
|
+
## Architecture
|
|
162
|
+
|
|
163
|
+
~~~mermaid
|
|
164
|
+
flowchart LR
|
|
165
|
+
U[User] --> M[Manager DSH Session]
|
|
166
|
+
M -->|line_create / line_send| P[dsh-agent-lines]
|
|
167
|
+
P --> Q[(SQLite lines.db)]
|
|
168
|
+
P -->|prompt requestId| W1[Worker line Session A]
|
|
169
|
+
P -->|prompt requestId| W2[Worker line Session B]
|
|
170
|
+
W1 -->|line_inbox / line_ack| P
|
|
171
|
+
W2 -->|line_inbox / line_ack| P
|
|
172
|
+
~~~
|
|
173
|
+
|
|
174
|
+
The DSH adapter owns line identity and delivery into a Session; the transport owns durable messages and cross-process storage. The default transport is local SQLite. Public architecture: [English](docs/ARCHITECTURE.en.md) | [中文](docs/ARCHITECTURE.md).
|
|
175
|
+
|
|
176
|
+
## Requirements
|
|
177
|
+
|
|
178
|
+
- DSH `>=0.2.1-rc.5 <0.3.0`
|
|
179
|
+
- Node.js `^22.19.0 || >=24.0.0`
|
|
180
|
+
- A local filesystem for the SQLite database (NFS/CIFS/SMB/FUSE are refused)
|
|
181
|
+
|
|
230
182
|
## Workspaces
|
|
231
183
|
|
|
232
184
|
DSH groups Sessions by workspace membership, not by cwd. line_create resolves the
|
package/README.md
CHANGED
|
@@ -6,79 +6,40 @@
|
|
|
6
6
|
|
|
7
7
|
> **100% Vibe Coding。** 架构、代码、测试、文档都在 AI agent 会话中完成。它是实验性项目:生产使用前请审阅代码并跑一遍集成测试。
|
|
8
8
|
|
|
9
|
-
DSH
|
|
9
|
+
DSH 的 super agent 平替插件。
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
如果所有 worker 都是同一个 DSH 进程里、同一个父 Agent 的子任务,**优先用内置 subagent / Agent Teams**;更简单,不需要插件。
|
|
14
|
-
|
|
15
|
-
需要下面这些时再用 **dsh-agent-lines**:
|
|
16
|
-
|
|
17
|
-
- 线要能按 `agent#line` 寻址;
|
|
18
|
-
- 线是独立 DSH Session,有自己的上下文和生命周期;
|
|
19
|
-
- 收件箱要能跨接收方重启存活;
|
|
20
|
-
- 同机多个 DSH 进程共享一个线数据库;
|
|
21
|
-
- 管理线通过自然语言让模型创建 worker 线。
|
|
22
|
-
|
|
23
|
-
插件只做传输 + 轻量建线,不做任务编排。**交接(handover)没有实现**。
|
|
24
|
-
|
|
25
|
-
## 传输
|
|
26
|
-
|
|
27
|
-
`transport` 默认 `sqlite`(local-first),也是 0.3 唯一发布的 transport;安装插件不需要 Postgres 或 Python 服务。
|
|
28
|
-
|
|
29
|
-
## 架构
|
|
11
|
+
你不用每次新开会话、手动把背景复制给几个 agent。让一个负责人 agent 带一支长期协作的团队:每个成员有名字、各负责一块,任务和消息不会丢,结果由负责人汇总给你。
|
|
30
12
|
|
|
31
|
-
|
|
32
|
-
flowchart LR
|
|
33
|
-
U[用户] --> M[管理线 DSH Session]
|
|
34
|
-
M -->|line_create / line_send| P[dsh-agent-lines]
|
|
35
|
-
P --> Q[(SQLite lines.db)]
|
|
36
|
-
P -->|prompt requestId| W1[前端线 Session]
|
|
37
|
-
P -->|prompt requestId| W2[后端线 Session]
|
|
38
|
-
W1 -->|line_inbox / line_ack| P
|
|
39
|
-
W2 -->|line_inbox / line_ack| P
|
|
40
|
-
~~~
|
|
13
|
+
## 什么时候用
|
|
41
14
|
|
|
42
|
-
|
|
15
|
+
如果你遇到这些情况,再考虑安装:
|
|
43
16
|
|
|
44
|
-
|
|
17
|
+
- 你有一个长期项目,不想每次都从头解释背景;
|
|
18
|
+
- 你希望几个 agent 长期分工,比如调研、架构、开发、测试、发布、运维;
|
|
19
|
+
- 你需要给每个角色一个固定名字,能直接点名派任务;
|
|
20
|
+
- 任务做到一半关掉窗口、重启 DSH,消息和上下文还要在;
|
|
21
|
+
- 你希望一个负责人 agent 自己拆任务、建团队、追进度、收结果,最后向你汇报。
|
|
45
22
|
|
|
46
|
-
|
|
47
|
-
- Node.js `^22.19.0 || >=24.0.0`
|
|
48
|
-
- 本地文件系统(NFS/CIFS/SMB/FUSE 会被拒绝)
|
|
23
|
+
如果只是同一次会话里的临时子任务,直接用 DSH 内置的 subagent / Agent Teams,不需要这个插件。
|
|
49
24
|
|
|
50
25
|
## 安装
|
|
51
26
|
|
|
52
|
-
|
|
53
|
-
dsh plugin --profile <profile> add dsh-agent-lines@0.3.0
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
包尚未发布时,用本地 tarball 安装:
|
|
27
|
+
一条命令安装(推荐,不需要自己找 profile):
|
|
57
28
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
不知道 `<profile>` 是什么,可以直接用一键脚本(自动选 `web`,没有 web 时选唯一 profile):
|
|
29
|
+
curl -fsSL https://raw.githubusercontent.com/Lencen/dsh-agent-lines/main/install.sh -o install.sh
|
|
30
|
+
bash install.sh
|
|
63
31
|
|
|
64
|
-
|
|
65
|
-
curl -fsSL https://raw.githubusercontent.com/Lencen/dsh-agent-lines/main/install.sh -o install.sh
|
|
66
|
-
bash install.sh
|
|
67
|
-
# npm 未发布时:bash install.sh ./dsh-agent-lines-0.3.0.tgz
|
|
68
|
-
```
|
|
32
|
+
脚本会自动选择 DSH Web 使用的 profile,安装后检查 agent-lines 是否可用;如果判断不了,会列出已有配置并提示你怎么指定。
|
|
69
33
|
|
|
70
|
-
|
|
34
|
+
**安装或更新后必须重启 DSH Web。** 运行中的进程不会加载新插件代码。插件没有 config 时走零配置:启动一条未绑定 manager,根会话可以调用 line_claim_manager 自己绑定。显式“管理线配置”是可选的,用于固定 manager/worker。
|
|
71
35
|
|
|
72
|
-
|
|
73
|
-
- 想隔离安装:用新名字,例如 `agent-lines`,命令会自动初始化:
|
|
36
|
+
离线或 npm 不可用时,用本地 tarball:
|
|
74
37
|
|
|
75
|
-
|
|
76
|
-
dsh plugin --profile agent-lines add dsh-agent-lines@0.3.0
|
|
77
|
-
```
|
|
38
|
+
bash install.sh ./dsh-agent-lines-0.3.2.tgz
|
|
78
39
|
|
|
79
|
-
|
|
40
|
+
安装并重启后,不写配置也可以直接使用;需要固定管理线/worker 时,再把下面“管理线配置”粘贴到脚本打印的配置文件。
|
|
80
41
|
|
|
81
|
-
###
|
|
42
|
+
### 管理线配置(可选)
|
|
82
43
|
|
|
83
44
|
```yaml
|
|
84
45
|
- id: agent-lines
|
|
@@ -102,35 +63,13 @@ dsh plugin --profile agent-lines add dsh-agent-lines@0.3.0
|
|
|
102
63
|
|
|
103
64
|
只有 `createFrom` 指定的线能调用 `line_create`。worker profile 不要开 `allowCreate`。
|
|
104
65
|
|
|
105
|
-
### Worker profile
|
|
106
|
-
|
|
107
|
-
```yaml
|
|
108
|
-
- id: agent-lines
|
|
109
|
-
name: dsh-agent-lines
|
|
110
|
-
config:
|
|
111
|
-
agentId: agent-demo
|
|
112
|
-
dbPath: /home/me/.dsh/agent-lines/lines.db
|
|
113
|
-
lines:
|
|
114
|
-
- label: frontend-line
|
|
115
|
-
sessionId: session-lines-frontend
|
|
116
|
-
role: 前端
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
旧的单线写法 `line: frontend-line` + `sessionId: ...` 仍然兼容。
|
|
120
|
-
|
|
121
66
|
## 快速开始
|
|
122
67
|
|
|
123
|
-
1.
|
|
124
|
-
2.
|
|
125
|
-
3.
|
|
126
|
-
4. 先调用
|
|
127
|
-
|
|
128
|
-
dsh-agent-lines claim --agent agent-demo --line manager-line --session "$DSH_SESSION_ID"
|
|
129
|
-
~~~
|
|
130
|
-
5. 对管理线说:“创建 frontend-line、backend-line、ops-line,然后分别发一条 hello。”
|
|
131
|
-
6. worker 可以是独立 profile(共享同一个 <code>dbPath</code>),也可以是管理线进程内创建的线。
|
|
132
|
-
|
|
133
|
-
任何新会话先看 <code>line_status</code>:它会告诉你是否绑定、manager 是谁、下一步怎么修。
|
|
68
|
+
1. 运行上面的安装脚本。
|
|
69
|
+
2. **重启 DSH Web**,让插件加载。
|
|
70
|
+
3. 打开任意根会话。零配置路径不需要改 YAML。
|
|
71
|
+
4. 先调用 line_status;如果当前会话未绑定,调用 line_claim_manager({ confirm: "bind-manager" })。
|
|
72
|
+
5. 直接说“按首次使用创建团队”,然后等它建好成员线;第一个任务再单独发。
|
|
134
73
|
|
|
135
74
|
## 首次使用:组建开发团队
|
|
136
75
|
|
|
@@ -165,30 +104,18 @@ line_create({ label: "ops", role: "运维" })
|
|
|
165
104
|
|
|
166
105
|
真实 DSH Web 演示 profile、通用 label;不含内部数据。
|
|
167
106
|
|
|
168
|
-
|
|
169
107
|
## 场景:一个管理线 + 多条执行线
|
|
170
108
|
|
|
171
|
-
|
|
109
|
+
负责人先建好团队,后面才是具体任务。
|
|
172
110
|
|
|
173
|
-
|
|
111
|
+
1. 负责人按角色建立成员:调研、架构、UIUX、开发、测试、验收、发布、运维。
|
|
112
|
+
2. 你给负责人一个具体任务,例如“给报表页加 CSV 导出,带测试和一页 runbook”。
|
|
113
|
+
3. 负责人把任务拆开,派给对应的成员;每条消息都会留在本地。
|
|
114
|
+
4. 成员收到任务、执行、确认收到,需要时回复负责人。
|
|
115
|
+
5. 负责人收集结果,处理成员之间的分歧,统一口径。
|
|
116
|
+
6. 你看到负责人的汇总;每个成员保留自己的上下文和消息记录。
|
|
174
117
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
1. 管理线调用 <code>line_create</code> 创建前端线、后端线、运维线、数据线,再用 <code>line_list</code> 确认。
|
|
178
|
-
2. 用户给一个具体任务,例如:“给报表页加 CSV 导出,带测试和一页 runbook。”
|
|
179
|
-
3. 管理线拆解后,用 <code>line_send</code> 发给对应执行线;消息落 SQLite。
|
|
180
|
-
4. 执行线用 <code>line_inbox</code> 收任务、执行、<code>line_ack</code> 确认,需要时用 <code>line_send</code> 回复。
|
|
181
|
-
5. 管理线收集结果;如果前端和后端对接口结构有分歧,管理线裁决并统一口径。
|
|
182
|
-
6. 管理线汇总、总结、汇报;各执行线保留自己的上下文和消息历史。
|
|
183
|
-
|
|
184
|
-
这是一个“提示词组织模式”,不是插件内置的组织架构:怎么拆任务由管理线模型决定。插件提供的是持久传输和硬约束:
|
|
185
|
-
|
|
186
|
-
- <code>maxLines</code> 限制建线数量;
|
|
187
|
-
- <code>noReply</code>、<code>maxReplyDepth</code> 和默认 self-send 禁止,防止自动回声;
|
|
188
|
-
- <code>line_status</code> 诊断 manager 绑定;
|
|
189
|
-
- 一个 Session 只能有一个 writer。
|
|
190
|
-
|
|
191
|
-
如果管理线没绑定,<code>line_status</code> 会给出修复命令;先调用 <code>line_claim_manager</code>(或 CLI)再跑这个场景。
|
|
118
|
+
这只是“用提示词组织团队”的方式,不是插件内置的组织架构;怎么拆任务由负责人模型决定。技术细节(消息、状态、工具)在下面的“使用”和“投递语义”。
|
|
192
119
|
|
|
193
120
|
## 使用
|
|
194
121
|
|
|
@@ -228,6 +155,31 @@ dsh-agent-lines doctor
|
|
|
228
155
|
|
|
229
156
|
用 `--db` 或 `DSH_AGENT_LINES_DB` 指向插件同一个数据库。
|
|
230
157
|
|
|
158
|
+
## 传输
|
|
159
|
+
|
|
160
|
+
`transport` 默认 `sqlite`(local-first),也是 0.3 唯一发布的 transport;安装插件不需要 Postgres 或 Python 服务。
|
|
161
|
+
|
|
162
|
+
## 架构
|
|
163
|
+
|
|
164
|
+
~~~mermaid
|
|
165
|
+
flowchart LR
|
|
166
|
+
U[用户] --> M[管理线 DSH Session]
|
|
167
|
+
M -->|line_create / line_send| P[dsh-agent-lines]
|
|
168
|
+
P --> Q[(SQLite lines.db)]
|
|
169
|
+
P -->|prompt requestId| W1[前端线 Session]
|
|
170
|
+
P -->|prompt requestId| W2[后端线 Session]
|
|
171
|
+
W1 -->|line_inbox / line_ack| P
|
|
172
|
+
W2 -->|line_inbox / line_ack| P
|
|
173
|
+
~~~
|
|
174
|
+
|
|
175
|
+
DSH 适配层负责线身份和“把消息送进 Session”;transport 负责持久消息和跨进程存储。默认是本地 SQLite。公开架构说明:[English](docs/ARCHITECTURE.en.md) | [中文](docs/ARCHITECTURE.md)。
|
|
176
|
+
|
|
177
|
+
## 要求
|
|
178
|
+
|
|
179
|
+
- DSH `>=0.2.1-rc.5 <0.3.0`
|
|
180
|
+
- Node.js `^22.19.0 || >=24.0.0`
|
|
181
|
+
- 本地文件系统(NFS/CIFS/SMB/FUSE 会被拒绝)
|
|
182
|
+
|
|
231
183
|
## 工作区
|
|
232
184
|
|
|
233
185
|
DSH 侧边栏按 workspace 的 sessionIds 成员表分组,不是按 cwd。line_create 通过 workspaceRegistry.resolveByPath 找到管理线所属工作区,传 workspaceId,DSH 会在创建时 attachSession,新线就不会落到“未分组”。如果管理线没有 workspace,插件回退 cwd,线仍未分组。
|
package/SECURITY.en.md
CHANGED
|
File without changes
|
package/SECURITY.md
CHANGED
|
File without changes
|
package/cordis.patch.yml
CHANGED
|
File without changes
|
package/docs/ARCHITECTURE.en.md
CHANGED
|
File without changes
|
package/docs/ARCHITECTURE.md
CHANGED
|
File without changes
|
package/docs/DEPLOY.en.md
CHANGED
|
File without changes
|
package/docs/DEPLOY.md
CHANGED
|
File without changes
|
package/docs/PROTOCOL.en.md
CHANGED
|
File without changes
|
package/docs/PROTOCOL.md
CHANGED
|
File without changes
|
package/docs/SECURITY.en.md
CHANGED
|
@@ -13,13 +13,13 @@ Only install packages whose source you have reviewed. This is a community plugin
|
|
|
13
13
|
- Default transport is a local SQLite file.
|
|
14
14
|
- The parent directory is created with mode `0700`; the database is chmod `0600`.
|
|
15
15
|
- The DB contains message bodies, line names, Session ids, and delivery metadata. Treat it as sensitive operational data.
|
|
16
|
-
- No encryption at rest in 0.3.
|
|
16
|
+
- No encryption at rest in 0.3.x; use full-disk encryption if needed.
|
|
17
17
|
|
|
18
18
|
## Network
|
|
19
19
|
|
|
20
|
-
0.3.
|
|
20
|
+
0.3.x has no network listener and makes no outbound network calls. It only reads/writes the local DB and calls DSH's in-process `sessionController`.
|
|
21
21
|
|
|
22
|
-
External transports are not part of 0.3.
|
|
22
|
+
External transports are not part of 0.3.x; SQLite is local.
|
|
23
23
|
|
|
24
24
|
## Peer content
|
|
25
25
|
|
|
@@ -33,7 +33,7 @@ The model is told to evaluate peer messages before acting. This is a prompt-leve
|
|
|
33
33
|
|
|
34
34
|
- The sender identity is the line registered in the local DB, not a field supplied by the model.
|
|
35
35
|
- The tool layer rejects calls from a Session this process does not serve (`LINE_WRONG_SESSION`).
|
|
36
|
-
- In 0.3.
|
|
36
|
+
- In 0.3.x the DB is local and trusted; there is no cryptographic sender signature. A local user who can write the DB can forge messages.
|
|
37
37
|
|
|
38
38
|
## Line creation
|
|
39
39
|
|
package/docs/SECURITY.md
CHANGED
|
@@ -13,13 +13,13 @@ dsh-agent-lines 是 DSH Host 插件,运行在 DSH 进程内,拥有该进程
|
|
|
13
13
|
- 默认传输是本地 SQLite 文件。
|
|
14
14
|
- 父目录权限 0700;数据库权限 0600。
|
|
15
15
|
- 数据库包含消息正文、线名、Session id 和投递元数据,按敏感运维数据处理。
|
|
16
|
-
- 0.3.
|
|
16
|
+
- 0.3.x 不做静态加密;需要时使用全盘加密。
|
|
17
17
|
|
|
18
18
|
## 网络
|
|
19
19
|
|
|
20
|
-
0.3.
|
|
20
|
+
0.3.x 没有网络监听,也不发起外部网络请求。它只读写本地 DB,并调用 DSH 进程内的 sessionController。
|
|
21
21
|
|
|
22
|
-
外部 transport 不属于 0.3.
|
|
22
|
+
外部 transport 不属于 0.3.x;SQLite 是本地实现。
|
|
23
23
|
|
|
24
24
|
## 对端内容
|
|
25
25
|
|
|
@@ -33,7 +33,7 @@ dsh-agent-lines 是 DSH Host 插件,运行在 DSH 进程内,拥有该进程
|
|
|
33
33
|
|
|
34
34
|
- 发送方身份来自本地 DB 注册的线,不是模型自己填的字段。
|
|
35
35
|
- 工具层会拒绝当前进程不服务的 Session 调用(LINE_WRONG_SESSION)。
|
|
36
|
-
- 0.3.
|
|
36
|
+
- 0.3.x 的 DB 是本地且受信任的;没有密码学发送方签名。能写 DB 的本地用户可以伪造消息。
|
|
37
37
|
|
|
38
38
|
## 建线
|
|
39
39
|
|
|
File without changes
|
package/docs/en/index.html
CHANGED
|
@@ -43,7 +43,7 @@ footer{padding:34px 0 48px;color:var(--muted);font-size:12px}
|
|
|
43
43
|
<div class="wrap">
|
|
44
44
|
<header>
|
|
45
45
|
<a class="brand" href="../"><span class="mark"></span>dsh-agent-lines</a>
|
|
46
|
-
<nav><a href="../">中文</a><a href="https://github.com/Lencen/dsh-agent-lines">GitHub</a><a href="https://github.com/Lencen/dsh-agent-lines/releases/tag/v0.3.
|
|
46
|
+
<nav><a href="../">中文</a><a href="https://github.com/Lencen/dsh-agent-lines">GitHub</a><a href="https://github.com/Lencen/dsh-agent-lines/releases/tag/v0.3.2">Release</a></nav>
|
|
47
47
|
</header>
|
|
48
48
|
<main>
|
|
49
49
|
<section class="hero" style="border:0;padding-bottom:22px">
|
|
@@ -51,10 +51,10 @@ footer{padding:34px 0 48px;color:var(--muted);font-size:12px}
|
|
|
51
51
|
<div class="kicker">Community plugin · Apache-2.0</div>
|
|
52
52
|
<h1>Durable lines<br><span>for DSH agents</span></h1>
|
|
53
53
|
<p class="lead">One manager, several execution lines. Each line is an ordinary DSH Session with its own context and durable inbox. Messages live in local SQLite, shared across processes, with no network service.</p>
|
|
54
|
-
<div class="install">dsh
|
|
54
|
+
<div class="install">curl -fsSL https://raw.githubusercontent.com/Lencen/dsh-agent-lines/main/install.sh -o install.sh && bash install.sh</div>
|
|
55
55
|
<div class="actions">
|
|
56
56
|
<a class="btn primary" href="https://github.com/Lencen/dsh-agent-lines">GitHub repository</a>
|
|
57
|
-
<a class="btn" href="https://github.com/Lencen/dsh-agent-lines/releases/tag/v0.3.
|
|
57
|
+
<a class="btn" href="https://github.com/Lencen/dsh-agent-lines/releases/tag/v0.3.2">Download 0.3.2</a>
|
|
58
58
|
</div>
|
|
59
59
|
</div>
|
|
60
60
|
<div class="shot">
|
|
@@ -78,7 +78,7 @@ research / architecture / uiux / dev / test / acceptance / release / ops
|
|
|
78
78
|
Then call line_list and wait for my first task.</pre>
|
|
79
79
|
<p style="color:var(--muted);font-size:14px">Full docs, protocol, and limits: <a href="https://github.com/Lencen/dsh-agent-lines">README</a>. Community plugin, not an official DeepSeek product.</p>
|
|
80
80
|
</section>
|
|
81
|
-
<footer>dsh-agent-lines 0.3.
|
|
81
|
+
<footer>dsh-agent-lines 0.3.2 · Apache-2.0 · Community plugin for DeepSeek Harness. Not an official DeepSeek product.</footer>
|
|
82
82
|
</main>
|
|
83
83
|
</div>
|
|
84
84
|
</body>
|
package/docs/index.html
CHANGED
|
@@ -43,7 +43,7 @@ footer{padding:34px 0 48px;color:var(--muted);font-size:12px}
|
|
|
43
43
|
<div class="wrap">
|
|
44
44
|
<header>
|
|
45
45
|
<a class="brand" href="./"><span class="mark"></span>dsh-agent-lines</a>
|
|
46
|
-
<nav><a href="en/index.html">English</a><a href="https://github.com/Lencen/dsh-agent-lines">GitHub</a><a href="https://github.com/Lencen/dsh-agent-lines/releases/tag/v0.3.
|
|
46
|
+
<nav><a href="en/index.html">English</a><a href="https://github.com/Lencen/dsh-agent-lines">GitHub</a><a href="https://github.com/Lencen/dsh-agent-lines/releases/tag/v0.3.2">Release</a></nav>
|
|
47
47
|
</header>
|
|
48
48
|
<main>
|
|
49
49
|
<section class="hero" style="border:0;padding-bottom:22px">
|
|
@@ -51,10 +51,10 @@ footer{padding:34px 0 48px;color:var(--muted);font-size:12px}
|
|
|
51
51
|
<div class="kicker">Community plugin · Apache-2.0</div>
|
|
52
52
|
<h1>给 DSH Agent 的<br><span>持久消息线</span></h1>
|
|
53
53
|
<p class="lead">一个管理线,多条执行线。每条线是普通 DSH Session,有独立上下文和持久收件箱;消息落本地 SQLite,跨进程共享,不依赖网络服务。</p>
|
|
54
|
-
<div class="install">dsh
|
|
54
|
+
<div class="install">curl -fsSL https://raw.githubusercontent.com/Lencen/dsh-agent-lines/main/install.sh -o install.sh && bash install.sh</div>
|
|
55
55
|
<div class="actions">
|
|
56
56
|
<a class="btn primary" href="https://github.com/Lencen/dsh-agent-lines">GitHub 仓库</a>
|
|
57
|
-
<a class="btn" href="https://github.com/Lencen/dsh-agent-lines/releases/tag/v0.3.
|
|
57
|
+
<a class="btn" href="https://github.com/Lencen/dsh-agent-lines/releases/tag/v0.3.2">下载 0.3.2</a>
|
|
58
58
|
</div>
|
|
59
59
|
</div>
|
|
60
60
|
<div class="shot">
|
|
@@ -78,7 +78,7 @@ research / architecture / uiux / dev / test / acceptance / release / ops
|
|
|
78
78
|
创建后用 line_list 确认,然后待命。</pre>
|
|
79
79
|
<p style="color:var(--muted);font-size:14px">完整说明、协议和限制见 <a href="https://github.com/Lencen/dsh-agent-lines">README</a>。社区插件,不是 DeepSeek 官方产品。</p>
|
|
80
80
|
</section>
|
|
81
|
-
<footer>dsh-agent-lines 0.3.
|
|
81
|
+
<footer>dsh-agent-lines 0.3.2 · Apache-2.0 · Community plugin for DeepSeek Harness. Not an official DeepSeek product.</footer>
|
|
82
82
|
</main>
|
|
83
83
|
</div>
|
|
84
84
|
</body>
|
package/docs/market-index.json
CHANGED
package/lib/delivery.js
CHANGED
|
File without changes
|
package/lib/index.js
CHANGED
|
@@ -40,20 +40,25 @@ function normalizeLine(entry, agentId, index) {
|
|
|
40
40
|
/** Validate and normalize plugin config. Exported for tests and the CLI. */
|
|
41
41
|
export function normalizeConfig(raw = {}) {
|
|
42
42
|
if (raw === null || typeof raw !== 'object') throw new LineError('LINE_INVALID_CONFIG', 'Plugin config must be an object')
|
|
43
|
-
const agentId = validateAgentId(raw.agentId)
|
|
44
43
|
const legacy = raw.line !== undefined && raw.sessionId !== undefined
|
|
45
44
|
? [{ label: raw.line, sessionId: raw.sessionId }]
|
|
46
45
|
: []
|
|
47
46
|
const rawLines = Array.isArray(raw.lines) ? raw.lines : legacy
|
|
48
|
-
|
|
49
|
-
const
|
|
47
|
+
const zeroConfig = rawLines.length === 0 && raw.lines === undefined && raw.line === undefined
|
|
48
|
+
const agentId = raw.agentId === undefined && zeroConfig
|
|
49
|
+
? 'agent-lines'
|
|
50
|
+
: validateAgentId(raw.agentId)
|
|
51
|
+
if (rawLines.length === 0 && !zeroConfig) throw new LineError('LINE_INVALID_CONFIG', 'At least one line is required (lines[] or line/sessionId)')
|
|
52
|
+
const lines = zeroConfig
|
|
53
|
+
? [{ agentId, label: 'manager', sessionId: '', lineId: lineId(agentId, 'manager'), role: null }]
|
|
54
|
+
: rawLines.map((entry, index) => normalizeLine(entry, agentId, index))
|
|
50
55
|
const labels = new Set()
|
|
51
56
|
const sessions = new Set()
|
|
52
57
|
for (const line of lines) {
|
|
53
58
|
if (labels.has(line.label)) throw new LineError('LINE_INVALID_CONFIG', `Duplicate line label: ${line.label}`)
|
|
54
|
-
if (sessions.has(line.sessionId)) throw new LineError('LINE_INVALID_CONFIG', `Duplicate sessionId: ${line.sessionId}`)
|
|
59
|
+
if (line.sessionId !== '' && sessions.has(line.sessionId)) throw new LineError('LINE_INVALID_CONFIG', `Duplicate sessionId: ${line.sessionId}`)
|
|
55
60
|
labels.add(line.label)
|
|
56
|
-
sessions.add(line.sessionId)
|
|
61
|
+
if (line.sessionId !== '') sessions.add(line.sessionId)
|
|
57
62
|
}
|
|
58
63
|
const createFrom = raw.createFrom === undefined ? lines[0].label : validateLineLabel(raw.createFrom)
|
|
59
64
|
if (!labels.has(createFrom)) throw new LineError('LINE_INVALID_CONFIG', `createFrom must name a configured line: ${createFrom}`)
|
|
@@ -66,9 +71,9 @@ export function normalizeConfig(raw = {}) {
|
|
|
66
71
|
transport,
|
|
67
72
|
lines,
|
|
68
73
|
createFrom,
|
|
69
|
-
maxLines: integer(raw.maxLines, 16, { min: lines.length, max: 256 }),
|
|
70
|
-
allowCreate: raw.allowCreate === true,
|
|
71
|
-
allowClaim: raw.allowClaim === true,
|
|
74
|
+
maxLines: integer(raw.maxLines, 16, { min: Math.max(1, lines.length), max: 256 }),
|
|
75
|
+
allowCreate: raw.allowCreate === undefined ? zeroConfig : raw.allowCreate === true,
|
|
76
|
+
allowClaim: raw.allowClaim === undefined ? zeroConfig : raw.allowClaim === true,
|
|
72
77
|
allowSelfSend: raw.allowSelfSend === true,
|
|
73
78
|
dedupeWindowMs: integer(raw.dedupeWindowMs, 5_000, { min: 0, max: 3_600_000 }),
|
|
74
79
|
maxReplyDepth: integer(raw.maxReplyDepth, 8, { min: 1, max: 100 }),
|
|
@@ -344,6 +349,10 @@ export async function apply(ctx, rawConfig) {
|
|
|
344
349
|
startupLines.push(effective)
|
|
345
350
|
}
|
|
346
351
|
for (const def of startupLines) {
|
|
352
|
+
if (def.sessionId === '') {
|
|
353
|
+
ctx.logger?.info?.('agent-lines: manager %s is unbound; waiting for claim', def.label)
|
|
354
|
+
continue
|
|
355
|
+
}
|
|
347
356
|
if (!(await sessionExists(def.sessionId))) {
|
|
348
357
|
ctx.logger?.warn?.('agent-lines: Session %s for line %s is missing; line stays unbound until claimed', def.sessionId, def.label)
|
|
349
358
|
lineDefs.set(def.sessionId, { ...def, missing: true })
|
package/lib/prompt.js
CHANGED
|
File without changes
|
package/lib/protocol.js
CHANGED
|
File without changes
|
package/lib/store.js
CHANGED
|
@@ -101,7 +101,10 @@ PRAGMA user_version = 6;
|
|
|
101
101
|
`
|
|
102
102
|
|
|
103
103
|
export function defaultDbPath() {
|
|
104
|
-
|
|
104
|
+
const home = process.env.DSH_HOME === undefined || process.env.DSH_HOME.trim() === ''
|
|
105
|
+
? resolve(homedir(), '.dsh')
|
|
106
|
+
: resolve(process.env.DSH_HOME)
|
|
107
|
+
return resolve(home, 'agent-lines', 'lines.db')
|
|
105
108
|
}
|
|
106
109
|
|
|
107
110
|
function expandHome(path) {
|
package/lib/tools.js
CHANGED
|
@@ -59,6 +59,7 @@ export function registerStatusTool(ctx, { config, store, lineDefs }) {
|
|
|
59
59
|
const managerConfig = config.lines.find(line => line.label === config.createFrom)
|
|
60
60
|
const managerDef = [...lineDefs.values()].find(line => line.label === config.createFrom)
|
|
61
61
|
const managerSessionId = (managerDef ?? managerConfig)?.sessionId
|
|
62
|
+
const effectiveManagerSessionId = managerSessionId === undefined || managerSessionId === '' ? undefined : managerSessionId
|
|
62
63
|
const persistence = ctx.get?.('sessionPersistence')
|
|
63
64
|
|
|
64
65
|
const sessionState = async (sessionId) => {
|
|
@@ -71,12 +72,12 @@ export function registerStatusTool(ctx, { config, store, lineDefs }) {
|
|
|
71
72
|
return { live, persisted }
|
|
72
73
|
}
|
|
73
74
|
|
|
74
|
-
const manager =
|
|
75
|
+
const manager = effectiveManagerSessionId === undefined
|
|
75
76
|
? null
|
|
76
77
|
: {
|
|
77
78
|
label: config.createFrom,
|
|
78
|
-
sessionId:
|
|
79
|
-
...(await sessionState(
|
|
79
|
+
sessionId: effectiveManagerSessionId,
|
|
80
|
+
...(await sessionState(effectiveManagerSessionId)),
|
|
80
81
|
lease: store.listLines().find(line => line.label === config.createFrom)?.lease ?? null,
|
|
81
82
|
}
|
|
82
83
|
const lines = store.listLines().map(line => ({
|
package/lib/transport.js
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
Binary file
|