dsh-agent-lines 0.3.0 → 0.3.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/CHANGELOG.en.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  English | [中文](CHANGELOG.md)
4
4
 
5
+ ## 0.3.1 (2026-11-04)
6
+
7
+ - README is now user-first: scenarios and install come first; technical details are later.
8
+ - Added install.sh, which picks the DSH Web profile automatically and verifies agent-lines.
9
+ - The npm 0.3.1 package now carries the same bilingual README and install docs as the public repo.
10
+ - No runtime behavior change; schema remains v6.
11
+
5
12
  ## 0.3.0 (2026-11-04)
6
13
 
7
14
  - Transport seam (`transport: sqlite` default).
package/CHANGELOG.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  [English](CHANGELOG.en.md) | 中文
4
4
 
5
+ ## 0.3.1 (2026-11-04)
6
+
7
+ - README 改为用户优先:先场景、安装和首次使用,技术细节后置;安装/快速开始不再要求手填 profile。
8
+ - 新增 install.sh,自动选择 DSH Web profile,并检查 agent-lines 是否可用。
9
+ - 同步最新双语 README、Pages、安装说明;0.3.1 的 npm 包内文档与公开仓库一致。
10
+ - 无运行时行为变更;schema 仍为 v6。
11
+
5
12
  ## 0.3.0 (2026-11-04)
6
13
 
7
14
  - Transport 接缝(transport: sqlite 默认)。
package/README.en.md CHANGED
@@ -4,79 +4,38 @@ English | [中文](README.md)
4
4
 
5
5
  > Community plugin for DeepSeek Harness. Not an official DeepSeek product.
6
6
 
7
- > **100% vibe-coded.** The architecture, code, tests, and docs were produced in AI agent sessions. It is experimental: review the code and run the integration test before production use.
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 agents. Durable, addressable peer messaging between DSH agent lines. A line is an ordinary DSH Session with a stable label; a DSH process can host one or more lines, and a manager line can create more lines by conversation with `line_create`.
9
+ A drop-in super-agent alternative for DSH.
10
10
 
11
- ## When to use it
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
- ~~~mermaid
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
- 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).
15
+ Use it when:
43
16
 
44
- ## Requirements
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
- - DSH `>=0.2.1-rc.5 <0.3.0`
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
- ```bash
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
- ```bash
59
- dsh plugin --profile <profile> add ./dsh-agent-lines-0.3.0.tgz
60
- ```
61
-
62
- If you do not know the `<profile>`, use the one-command installer (it picks `web`, or the only profile):
63
-
64
- ```bash
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
- ```
29
+ curl -fsSL https://raw.githubusercontent.com/Lencen/dsh-agent-lines/main/install.sh -o install.sh
30
+ bash install.sh
69
31
 
70
- For a manual install, `<profile>` is the **DSH profile name** (the directory under `~/.dsh/profiles/<profile>`), not a line or agent name.
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.
71
33
 
72
- - Existing profile: run `ls ~/.dsh/profiles` and use the real directory name, such as `web` or `headless`.
73
- - Isolated install: use a new name such as `agent-lines`; the command initializes it:
34
+ Offline or when npm is unavailable, use the local tarball:
74
35
 
75
- ```bash
76
- dsh plugin --profile agent-lines add dsh-agent-lines@0.3.0
77
- ```
36
+ bash install.sh ./dsh-agent-lines-0.3.1.tgz
78
37
 
79
- Do not put a line label such as `manager-line` or `research` in `--profile`.
38
+ When it finishes, the script prints the path to the manager config file. Paste the "Manager config" block below into that file once.
80
39
 
81
40
  ### Manager config
82
41
 
@@ -102,35 +61,13 @@ Do not put a line label such as `manager-line` or `research` in `--profile`.
102
61
 
103
62
  Only `createFrom` may call `line_create`. Worker profiles should leave `allowCreate` false.
104
63
 
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
64
  ## Quick start
122
65
 
123
- 1. Install the bundle with <code>dsh plugin --profile &lt;profile&gt; add dsh-agent-lines@0.3.0</code>, or the local tarball (see Install).
124
- 2. Configure one manager line with <code>allowCreate: true</code>, <code>allowClaim: true</code>, and <code>createFrom: manager-line</code>.
125
- 3. Start that profile and open any root Session.
126
- 4. Call <code>line_status</code>. If the current Session is not bound, call <code>line_claim_manager({ confirm: "bind-manager" })</code>; the CLI fallback is:
127
- ~~~bash
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.
66
+ 1. Run the installer above.
67
+ 2. Open the config file printed by the installer and paste the "Manager config" block once.
68
+ 3. Start DSH Web and open any root Session.
69
+ 4. Call line_status; if the Session is not bound, call line_claim_manager({ confirm: "bind-manager" }).
70
+ 5. Say "create the first-use team"; wait for the member lines, then send the first task separately.
134
71
 
135
72
  ## First use: build a development team
136
73
 
@@ -164,30 +101,18 @@ After creation, call line_list to confirm.
164
101
 
165
102
  Actual DSH Web demo profile, generic labels; no internal data.
166
103
 
167
-
168
104
  ## Scenario: one manager, several execution lines
169
105
 
170
- A manager profile exists, but the Session does not have to be pre-bound. Open any root Session and say:
171
-
172
- > You are the manager line. First bind yourself with line_claim_manager, then own task decomposition and scheduling. Create execution lines for frontend, backend, ops, and data; assign work, coordinate them, resolve conflicts, collect results, and summarize.
173
-
174
- What happens next:
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:
106
+ The lead creates the team first; the work comes next.
184
107
 
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.
108
+ 1. The lead creates members by role: research, architecture, UI/UX, development, testing, acceptance, release, operations.
109
+ 2. You give the lead one concrete task, for example "add CSV export to the reports page, with tests and a one-page runbook."
110
+ 3. The lead decomposes it and sends each part to the right member; every message stays local.
111
+ 4. Members receive the task, execute it, acknowledge it, and reply to the lead when needed.
112
+ 5. The lead collects results, resolves disagreements, and aligns the answer.
113
+ 6. You see the lead's summary; each member keeps its own context and message history.
189
114
 
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.
115
+ 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
116
 
192
117
  ## Use
193
118
 
@@ -227,6 +152,31 @@ dsh-agent-lines doctor
227
152
 
228
153
  Use `--db` or `DSH_AGENT_LINES_DB` to point the CLI at the plugin's database.
229
154
 
155
+ ## Transports
156
+
157
+ `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.
158
+
159
+ ## Architecture
160
+
161
+ ~~~mermaid
162
+ flowchart LR
163
+ U[User] --> M[Manager DSH Session]
164
+ M -->|line_create / line_send| P[dsh-agent-lines]
165
+ P --> Q[(SQLite lines.db)]
166
+ P -->|prompt requestId| W1[Worker line Session A]
167
+ P -->|prompt requestId| W2[Worker line Session B]
168
+ W1 -->|line_inbox / line_ack| P
169
+ W2 -->|line_inbox / line_ack| P
170
+ ~~~
171
+
172
+ 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).
173
+
174
+ ## Requirements
175
+
176
+ - DSH `>=0.2.1-rc.5 <0.3.0`
177
+ - Node.js `^22.19.0 || >=24.0.0`
178
+ - A local filesystem for the SQLite database (NFS/CIFS/SMB/FUSE are refused)
179
+
230
180
  ## Workspaces
231
181
 
232
182
  DSH groups Sessions by workspace membership, not by cwd. line_create resolves the
package/README.md CHANGED
@@ -6,77 +6,36 @@
6
6
 
7
7
  > **100% Vibe Coding。** 架构、代码、测试、文档都在 AI agent 会话中完成。它是实验性项目:生产使用前请审阅代码并跑一遍集成测试。
8
8
 
9
- DSH agent 的 super agent 平替插件。给 DSH agent 线(line)用的、可寻址的持久消息层。一条线是一个普通 DSH Session 加一个稳定 label;一个 DSH 进程可以承载多条线,管理线还可以通过 `line_create` 在对话里创建新线。
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
- ~~~mermaid
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
- DSH 适配层负责线身份和“把消息送进 Session”;transport 负责持久消息和跨进程存储。默认是本地 SQLite。公开架构说明:[English](docs/ARCHITECTURE.en.md) | [中文](docs/ARCHITECTURE.md)。
15
+ 如果你遇到这些情况,再考虑安装:
43
16
 
44
- ## 要求
17
+ - 你有一个长期项目,不想每次都从头解释背景;
18
+ - 你希望几个 agent 长期分工,比如调研、架构、开发、测试、发布、运维;
19
+ - 你需要给每个角色一个固定名字,能直接点名派任务;
20
+ - 任务做到一半关掉窗口、重启 DSH,消息和上下文还要在;
21
+ - 你希望一个负责人 agent 自己拆任务、建团队、追进度、收结果,最后向你汇报。
45
22
 
46
- - DSH `>=0.2.1-rc.5 <0.3.0`
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
- ```bash
53
- dsh plugin --profile <profile> add dsh-agent-lines@0.3.0
54
- ```
55
-
56
- 包尚未发布时,用本地 tarball 安装:
27
+ 一条命令安装(推荐,不需要自己找 profile):
57
28
 
58
- ```bash
59
- dsh plugin --profile <profile> add ./dsh-agent-lines-0.3.0.tgz
60
- ```
61
-
62
- 不知道 `<profile>` 是什么,可以直接用一键脚本(自动选 `web`,没有 web 时选唯一 profile):
63
-
64
- ```bash
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
- ```
29
+ curl -fsSL https://raw.githubusercontent.com/Lencen/dsh-agent-lines/main/install.sh -o install.sh
30
+ bash install.sh
69
31
 
70
- 手动安装时,`<profile>` 是 **DSH profile 名**(对应 `~/.dsh/profiles/<profile>`),不是线名,也不是 agent 名。
32
+ 脚本会自动选择 DSH Web 使用的 profile,安装后检查 agent-lines 是否可用;如果判断不了,会列出已有配置并提示你怎么指定。
71
33
 
72
- - 已有 profile:先 `ls ~/.dsh/profiles`,填实际目录名,例如 `web`、`headless`;
73
- - 想隔离安装:用新名字,例如 `agent-lines`,命令会自动初始化:
34
+ 离线或 npm 不可用时,用本地 tarball:
74
35
 
75
- ```bash
76
- dsh plugin --profile agent-lines add dsh-agent-lines@0.3.0
77
- ```
36
+ bash install.sh ./dsh-agent-lines-0.3.1.tgz
78
37
 
79
- 不要把 `manager-line`、`research` 这类线名填进 `--profile`。
38
+ 安装完成后,脚本会打印管理线配置文件的路径。把下面“管理线配置”整段粘贴进去一次即可。
80
39
 
81
40
  ### 管理线配置
82
41
 
@@ -102,35 +61,13 @@ dsh plugin --profile agent-lines add dsh-agent-lines@0.3.0
102
61
 
103
62
  只有 `createFrom` 指定的线能调用 `line_create`。worker profile 不要开 `allowCreate`。
104
63
 
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
64
  ## 快速开始
122
65
 
123
- 1. 安装:<code>dsh plugin --profile &lt;profile&gt; add dsh-agent-lines@0.3.0</code>,或用本地 tarball(见“安装”)。
124
- 2. 配置一条管理线:<code>allowCreate: true</code>、<code>allowClaim: true</code>、<code>createFrom: manager-line</code>。
125
- 3. 启动 profile,打开任意根 Session。
126
- 4. 先调用 <code>line_status</code>。如果当前会话未绑定,调用 <code>line_claim_manager({ confirm: "bind-manager" })</code>;CLI 兜底:
127
- ~~~bash
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 是谁、下一步怎么修。
66
+ 1. 运行上面的安装脚本。
67
+ 2. 按脚本提示打开配置文件,把“管理线配置”整段粘贴进去(只做一次)。
68
+ 3. 启动 DSH Web,打开任意根会话。
69
+ 4. 先调用 line_status;如果当前会话未绑定,调用 line_claim_manager({ confirm: "bind-manager" })。
70
+ 5. 直接说“按首次使用创建团队”,然后等它建好成员线;第一个任务再单独发。
134
71
 
135
72
  ## 首次使用:组建开发团队
136
73
 
@@ -165,30 +102,18 @@ line_create({ label: "ops", role: "运维" })
165
102
 
166
103
  真实 DSH Web 演示 profile、通用 label;不含内部数据。
167
104
 
168
-
169
105
  ## 场景:一个管理线 + 多条执行线
170
106
 
171
- 只要 profile 里有管理线配置,Session 不必预先绑定。打开任意根 Session,直接说:
172
-
173
- > 你是管理线。先用 line_claim_manager 把自己绑定为管理线,然后负责任务拆分与调度。需要建几个任务执行线,由你安排分配任务;你负责协调执行线中的工作内容、裁决纠纷、回收任务结果、汇总、总结、汇报。
174
-
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
- 这是一个“提示词组织模式”,不是插件内置的组织架构:怎么拆任务由管理线模型决定。插件提供的是持久传输和硬约束:
107
+ 负责人先建好团队,后面才是具体任务。
185
108
 
186
- - <code>maxLines</code> 限制建线数量;
187
- - <code>noReply</code>、<code>maxReplyDepth</code> 和默认 self-send 禁止,防止自动回声;
188
- - <code>line_status</code> 诊断 manager 绑定;
189
- - 一个 Session 只能有一个 writer。
109
+ 1. 负责人按角色建立成员:调研、架构、UIUX、开发、测试、验收、发布、运维。
110
+ 2. 你给负责人一个具体任务,例如“给报表页加 CSV 导出,带测试和一页 runbook”。
111
+ 3. 负责人把任务拆开,派给对应的成员;每条消息都会留在本地。
112
+ 4. 成员收到任务、执行、确认收到,需要时回复负责人。
113
+ 5. 负责人收集结果,处理成员之间的分歧,统一口径。
114
+ 6. 你看到负责人的汇总;每个成员保留自己的上下文和消息记录。
190
115
 
191
- 如果管理线没绑定,<code>line_status</code> 会给出修复命令;先调用 <code>line_claim_manager</code>(或 CLI)再跑这个场景。
116
+ 这只是“用提示词组织团队”的方式,不是插件内置的组织架构;怎么拆任务由负责人模型决定。技术细节(消息、状态、工具)在下面的“使用”和“投递语义”。
192
117
 
193
118
  ## 使用
194
119
 
@@ -228,6 +153,31 @@ dsh-agent-lines doctor
228
153
 
229
154
  用 `--db` 或 `DSH_AGENT_LINES_DB` 指向插件同一个数据库。
230
155
 
156
+ ## 传输
157
+
158
+ `transport` 默认 `sqlite`(local-first),也是 0.3 唯一发布的 transport;安装插件不需要 Postgres 或 Python 服务。
159
+
160
+ ## 架构
161
+
162
+ ~~~mermaid
163
+ flowchart LR
164
+ U[用户] --> M[管理线 DSH Session]
165
+ M -->|line_create / line_send| P[dsh-agent-lines]
166
+ P --> Q[(SQLite lines.db)]
167
+ P -->|prompt requestId| W1[前端线 Session]
168
+ P -->|prompt requestId| W2[后端线 Session]
169
+ W1 -->|line_inbox / line_ack| P
170
+ W2 -->|line_inbox / line_ack| P
171
+ ~~~
172
+
173
+ DSH 适配层负责线身份和“把消息送进 Session”;transport 负责持久消息和跨进程存储。默认是本地 SQLite。公开架构说明:[English](docs/ARCHITECTURE.en.md) | [中文](docs/ARCHITECTURE.md)。
174
+
175
+ ## 要求
176
+
177
+ - DSH `>=0.2.1-rc.5 <0.3.0`
178
+ - Node.js `^22.19.0 || >=24.0.0`
179
+ - 本地文件系统(NFS/CIFS/SMB/FUSE 会被拒绝)
180
+
231
181
  ## 工作区
232
182
 
233
183
  DSH 侧边栏按 workspace 的 sessionIds 成员表分组,不是按 cwd。line_create 通过 workspaceRegistry.resolveByPath 找到管理线所属工作区,传 workspaceId,DSH 会在创建时 attachSession,新线就不会落到“未分组”。如果管理线没有 workspace,插件回退 cwd,线仍未分组。
@@ -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.0; use full-disk encryption if needed.
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.0 has no network listener and makes no outbound network calls. It only reads/writes the local DB and calls DSH's in-process `sessionController`.
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.0; SQLite is local.
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.0 the DB is local and trusted; there is no cryptographic sender signature. A local user who can write the DB can forge messages.
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.0 不做静态加密;需要时使用全盘加密。
16
+ - 0.3.x 不做静态加密;需要时使用全盘加密。
17
17
 
18
18
  ## 网络
19
19
 
20
- 0.3.0 没有网络监听,也不发起外部网络请求。它只读写本地 DB,并调用 DSH 进程内的 sessionController。
20
+ 0.3.x 没有网络监听,也不发起外部网络请求。它只读写本地 DB,并调用 DSH 进程内的 sessionController。
21
21
 
22
- 外部 transport 不属于 0.3.0;SQLite 是本地实现。
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.0 的 DB 是本地且受信任的;没有密码学发送方签名。能写 DB 的本地用户可以伪造消息。
36
+ - 0.3.x 的 DB 是本地且受信任的;没有密码学发送方签名。能写 DB 的本地用户可以伪造消息。
37
37
 
38
38
  ## 建线
39
39
 
@@ -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.0">Release</a></nav>
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.1">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 plugin --profile &lt;profile&gt; add dsh-agent-lines@0.3.0</div>
54
+ <div class="install">curl -fsSL https://raw.githubusercontent.com/Lencen/dsh-agent-lines/main/install.sh -o install.sh &amp;&amp; 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.0">Download 0.3.0</a>
57
+ <a class="btn" href="https://github.com/Lencen/dsh-agent-lines/releases/tag/v0.3.1">Download 0.3.1</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.0 · Apache-2.0 · Community plugin for DeepSeek Harness. Not an official DeepSeek product.</footer>
81
+ <footer>dsh-agent-lines 0.3.1 · 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.0">Release</a></nav>
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.1">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 plugin --profile &lt;profile&gt; add dsh-agent-lines@0.3.0</div>
54
+ <div class="install">curl -fsSL https://raw.githubusercontent.com/Lencen/dsh-agent-lines/main/install.sh -o install.sh &amp;&amp; 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.0">下载 0.3.0</a>
57
+ <a class="btn" href="https://github.com/Lencen/dsh-agent-lines/releases/tag/v0.3.1">下载 0.3.1</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.0 · Apache-2.0 · Community plugin for DeepSeek Harness. Not an official DeepSeek product.</footer>
81
+ <footer>dsh-agent-lines 0.3.1 · Apache-2.0 · Community plugin for DeepSeek Harness. Not an official DeepSeek product.</footer>
82
82
  </main>
83
83
  </div>
84
84
  </body>
@@ -50,11 +50,11 @@
50
50
  ]
51
51
  },
52
52
  "dist-tags": {
53
- "latest": "0.3.0"
53
+ "latest": "0.3.1"
54
54
  },
55
55
  "versions": [
56
56
  {
57
- "version": "0.3.0",
57
+ "version": "0.3.1",
58
58
  "publishTimestamp": 1793771000,
59
59
  "source": {
60
60
  "type": "npm"
@@ -50,11 +50,11 @@
50
50
  ]
51
51
  },
52
52
  "dist-tags": {
53
- "latest": "0.3.0"
53
+ "latest": "0.3.1"
54
54
  },
55
55
  "versions": [
56
56
  {
57
- "version": "0.3.0",
57
+ "version": "0.3.1",
58
58
  "publishTimestamp": 1793771000,
59
59
  "source": {
60
60
  "type": "npm"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-agent-lines",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "DSH Agent 的持久、可寻址消息线(社区插件)。",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",