@deepseek-ai/dsh-terminal 0.1.1-rc.2 → 0.1.2-alpha.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.i18n.yaml CHANGED
@@ -2,5 +2,5 @@
2
2
  # side as of the last confirmed-consistent state. Both languages carry equal authority;
3
3
  # after editing either side, bring the other along and re-record with:
4
4
  # pnpm run verify-translation-pairing --write packages/terminal/terminal/README.md
5
- README.md: e8959a1128575a00285a9d3b1165569d2dfbdc04
6
- README.zh.md: 16a24ad94ea07f27927a9ac30fc026b13e084874
5
+ README.md: ee55f854899692d28fae12e77ed9ecb235176019
6
+ README.zh.md: 62147523c419470e1fcd231ccbb17da7ba07871e
package/README.md CHANGED
@@ -1,24 +1,114 @@
1
+ ---
2
+ description: "Persistent terminal sessions for deployments and consumers choosing, composing, or extending the owner-scoped ctx.terminals service."
3
+ kind: "package-reference"
4
+ ---
5
+
1
6
  # @deepseek-ai/dsh-terminal
2
7
 
3
8
  English | [中文](README.zh.md)
4
9
 
5
- Owner-scoped persistent PTY seam. `TerminalSessionService` registers as `ctx.terminals`, mints opaque session ids, routes creation through named backends, fences every operation to the exact live `Agent`, and awaits backend quiescence when that agent or the service disposes.
10
+ ## Summary
11
+
12
+ `dsh-terminal` provides persistent, owner-scoped terminal sessions to the harness: a session keeps shell or REPL state across tool calls, and every operation is fenced to the exact agent that created it. It provides the `ctx.terminals` service, which mints opaque session ids, routes session creation through registered backends, and waits for quiescent cleanup when an owner or the service disposes. It defines no terminal mechanics itself: backends such as the shipped `dsh-terminal-bash` own spawning and readiness, and the model-facing tools in `dsh-tool-terminal` own presentation. Sessions are process-local: they do not survive a harness restart.
13
+
14
+ ## Table of Contents
15
+
16
+ - [Use this package](#use-this-package)
17
+ - [Understand the implementation](#understand-the-implementation)
18
+ - [Further Exploration](#further-exploration)
19
+ - [Model Experience](#model-experience)
20
+ - [Known Limitations and Deferred Work](#known-limitations-and-deferred-work)
21
+ - [Dev Note](#dev-note)
22
+
23
+ -----
24
+
25
+ <a id="use-this-package"></a>
26
+ ## Use this package
27
+
28
+ Mount `@deepseek-ai/dsh-terminal` whenever a composition needs terminal sessions whose state survives across tool calls. The service alone does nothing useful: pair it with a backend such as `@deepseek-ai/dsh-terminal-bash` and a tool package such as `@deepseek-ai/dsh-tool-terminal`, and load all three in one composition.
29
+
30
+ ### When to choose it
31
+
32
+ Choose persistent terminals for work whose state lives in the terminal rather than a file: stepping a debugger, exploring in a Python or Node REPL, or returning to a shell after interrupting its foreground command. Choose the one-shot bash, read, write, and edit tools for bounded operations — they keep stronger validation, approval, output-bound, and replay contracts. Sessions are process-local: they disappear when the harness process exits, so durable work belongs in files or another persistent system.
33
+
34
+ ### Composition
35
+
36
+ Load the session service together with a backend and a tool package:
37
+
38
+ ```yaml
39
+ - name: '@deepseek-ai/dsh-terminal'
40
+ - name: '@deepseek-ai/dsh-terminal-bash'
41
+ - name: '@deepseek-ai/dsh-tool-terminal'
42
+ ```
43
+
44
+ A backend provides one stable type — the shipped shell backend provides `shell` — and the tools open sessions by that type. The shell backend additionally requires the sandbox, sandbox-policy, and subprocess providers; see its [README](../terminal-bash/README.md) for the full composition.
45
+
46
+ ### What sessions give you
47
+
48
+ Once a session exists, consumers can open a session and receive its id and bounded startup output, send text (optionally submitting Enter) and wait until the shell is ready again or the send times out, read bounded retained output, deliver one allowed signal to the foreground process group, close a session and wait for its process tree to end, and list the sessions a caller owns. Exactly one send can be active per session at a time; a second send fails until the first settles.
49
+
50
+ ### Ownership and isolation
51
+
52
+ Every session is owned by the exact agent that opened it. Operations that name a session are rejected when the caller is not that agent, so the model cannot reach another agent's terminal even if it learns the id. An optional session `name` is owner-local display metadata — labels such as `main` or `gdb` — and is unique only within its owner.
53
+
54
+ ### Observable outcomes and failures
55
+
56
+ A successful open returns the session id, type, pid when the backend has one, status, and a bounded startup message. Sends settle with a wait reason: `stdin_read` (the shell is waiting for input), `inferred_idle` (output silence), `timeout`, or `session_exit` (the top-level shell exited). Failures carry stable machine-routable codes: a missing backend type (`NO_BACKEND`), an unknown session (`NO_SESSION`), another agent's session (`FOREIGN_SESSION`), a second concurrent send (`SEND_ACTIVE`), or an owner that is no longer live (`OWNER_NOT_LIVE`). Backend setup failures reject the open before anything is published, and a failed cleanup rejects the close rather than claiming success.
57
+
58
+ -----
59
+
60
+ <a id="understand-the-implementation"></a>
61
+ ## Understand the implementation
62
+
63
+ <details>
64
+ <summary>Implementation internals — click to expand</summary>
65
+
66
+ This section explains the design behind the service and points at the code that realizes it; the observable behavior is covered in [Use this package](#use-this-package).
6
67
 
7
- ## Contract
68
+ ### Design concept
8
69
 
9
- - Backends register one stable `type` and return an unpublished `TerminalBackendSession`; failed or cancelled setup must clean partial resources, and a failed cleanup rejects with `TerminalBackendCleanupError` so the registry can retain it across cancellation.
10
- - Spawn cancellation preserves the caller's exact abort reason. Service disposal and owner loss remain distinct machine-routable failures after backend setup.
11
- - Owner and service disposal abort unpublished setup through a service-owned signal and await backend settlement plus rollback before returning.
12
- - A rollback-close or backend-reported startup cleanup failure rejects the disposing lifecycle instead of claiming quiescence. Caller-triggered cancellation still receives its exact reason; lifecycle-triggered rollback failure also rejects the pending spawn.
13
- - A backend cleanup failure that follows caller cancellation remains owner activity until owner or service disposal consumes and reports it, so lifecycle policy cannot mistake failed cleanup for quiescence.
14
- - `hasOwnerActivity(owner)` spans unpublished setup through final close, so lifecycle policy can fence the exact owner without a publication race.
15
- - A successful spawn publishes one `TerminalSessionId`. The optional `name` is owner-local display metadata, never authority.
16
- - One session accepts at most one live send operation. Reads and signals may observe it; another send fails until the operation settles.
17
- - `TerminalSendResult.waitReason` and `sessionStatus` are independent. `session_exit` describes the top-level PTY process, not an arbitrary foreground command.
18
- - `kill()` and disposal resolve only after the backend's captured process tree is quiescent. A cleanup failure rejects instead of claiming success and clears the matching backend and registry fences so a later close can retry without disturbing a newer attempt.
70
+ The service owns everything except terminal mechanics: session identity, publication, authorization, and cleanup. Backends own how a session starts, detects readiness, retains output, and shuts down; the service publishes a session only after backend setup succeeds. The split keeps one registry usable with different terminal substrates.
19
71
 
20
- The seam contains no `node-pty`, sandbox, tool-schema, prompt, task, or terminal-rendering policy. Implementations own terminal mechanics; consumers own model presentation and optional background-job registration.
72
+ ### Source map
21
73
 
74
+ | File | Role |
75
+ |---|---|
76
+ | [`src/index.ts`](src/index.ts) | `TerminalSessionService`: backend registry, spawn/send/read/signal/kill/list, owner cleanups, disposal |
77
+ | [`src/types.ts`](src/types.ts) | Shared contracts: backend interface, session types, wait reasons, signal set, error codes |
78
+ | [`src/invariant.ts`](src/invariant.ts) | Invariant companion (no runtime invariant; the registries are private mutable state) |
79
+
80
+ ### Data model and lifecycle
81
+
82
+ Each published session is a record of its id, owner, optional name, backend type, and backend session, plus the one active send. Unpublished spawns are tracked per owner as reservations with a service-owned abort signal. Disposal aborts pending spawns, awaits their settlement and rollback, then closes every owned session and awaits quiescence before running owner detachers; a cleanup failure rejects the lifecycle instead of claiming success.
83
+
84
+ ### Ownership and cleanup rules
85
+
86
+ - Fencing uses the exact `Agent` object: `hasOwnerActivity(owner)` spans unpublished setup through final close with no publication gap, so lifecycle policy can fence the owner precisely.
87
+ - A backend that cannot clean partial startup resources rejects with `TerminalBackendCleanupError`; the service retains that failure as tracked owner activity until owner or service disposal consumes and reports it.
88
+ - Caller cancellation keeps its exact `AbortSignal.reason`; `kill()` and disposal resolve only after the backend's captured process tree is quiescent.
89
+
90
+ ### Send reservation
91
+
92
+ The service reserves a session synchronously for one active send before returning the operation, including before a background job id becomes visible; a second send fails with `SEND_ACTIVE`, so output and cancellation never cross operation ownership.
93
+
94
+ </details>
95
+
96
+ -----
97
+
98
+ <a id="further-exploration"></a>
99
+ ## Further Exploration
100
+
101
+ Read these pages when the package-level contract is not enough. They move from the shared terminal model to the shipped backend, the tools, and the design evidence.
102
+
103
+ - [Terminal subsystem reference](../../../docs/subsystems/terminal.md) — shared types, backend and session contracts, and the generated `ctx.terminals` surface.
104
+ - [terminal/ package map](../README.md) — the three-package family and how it composes.
105
+ - [terminal-bash backend](../terminal-bash/README.md) — the shipped shell backend that provides the `shell` type.
106
+ - [tool-terminal tools](../tool-terminal/README.md) — the six model-facing tools that operate sessions.
107
+ - [Persistent PTY Agent Note](../../../.agents/notes/implemented/feature/2026-07-16-persistent-pty-sessions.md) — design rationale, alternatives, and deferred boundaries.
108
+
109
+ -----
110
+
111
+ <a id="model-experience"></a>
22
112
  ## Model Experience
23
113
 
24
114
  ### Indirect consumer
@@ -33,9 +123,30 @@ None directly. Live session state stays process-local until a consumer returns a
33
123
 
34
124
  #### KV Cache effect
35
125
 
36
- No direct invalidation; the named consumer owns request-prefix changes.
126
+ No direct invalidation; `@deepseek-ai/dsh-tool-terminal` owns request-prefix changes.
37
127
 
38
128
  ## Known Limitations and Deferred Work
39
129
 
40
- - Sessions are process-local and are not restored after a harness restart.
41
- - Cross-agent sharing is intentionally absent; a future shared-session design needs a separate authority contract.
130
+ <a id="known-limitations-and-deferred-work"></a>
131
+
132
+
133
+ These limits define when the service is a poor fit. They are current package constraints, not a task backlog.
134
+
135
+ - **Process-local sessions** — sessions and raw scrollback live only in this process and do not survive a harness restart; durable work must be committed to files or another persistent system.
136
+ - **No cross-agent sharing** — sessions are intentionally single-owner, with no path to share or transfer a session.
137
+ - **No declarative auto-start** — sessions are created only during agent tool calls.
138
+
139
+ <a id="dev-note"></a>
140
+ ### Dev Note
141
+
142
+ <details>
143
+ <summary>Working context for maintainers — click to expand</summary>
144
+
145
+ This Dev Note is working context for maintainers and is explicitly non-authoritative: shipped behavior, limits, and accepted rationale live in the sections above, the package code, and the linked Agent Notes.
146
+
147
+ #### Undecided directions
148
+
149
+ - A shared-session design would need a separate authority contract.
150
+ - A declarative auto-start feature would compose through unpublished agent setup.
151
+
152
+ </details>
package/README.zh.md CHANGED
@@ -1,41 +1,152 @@
1
+ ---
2
+ description: "面向部署方与消费方的持久终端会话说明,用于选择、组合或扩展限定所有者范围的 ctx.terminals 服务。"
3
+ kind: "package-reference"
4
+ ---
5
+
1
6
  # @deepseek-ai/dsh-terminal
2
7
 
3
8
  [English](README.md) | 中文
4
9
 
5
- 限定所有者范围的持久 PTY seam。`TerminalSessionService` 注册为 `ctx.terminals`,生成不透明的会话 id,通过具名后端路由创建操作,将每个操作限制在完全相同的活跃 `Agent` 内,并在该 agent(智能体)或服务 dispose(资源释放)时等待后端完全停稳。
10
+ ## 概述
11
+
12
+ `dsh-terminal` 为 harness 提供持久且限定所有者范围的终端会话:会话让 shell 或 REPL 状态跨工具调用存活,且每个操作都被限制在创建它的那个确切 agent(智能体)内。本包提供 `ctx.terminals` 服务,负责生成不透明的会话 id、通过已注册的后端路由会话创建,并在所有者或服务 dispose(资源释放)时等待完全停稳的清理。它本身不定义任何终端机制:`dsh-terminal-bash` 之类的后端负责启动与就绪检测,`dsh-tool-terminal` 中的面向模型工具负责呈现。会话只存在于进程本地:harness 重启后不会恢复。
13
+
14
+ ## 目录
15
+
16
+ - [使用本包](#use-this-package)
17
+ - [理解实现](#understand-the-implementation)
18
+ - [进一步探索](#further-exploration)
19
+ - [模型体验](#model-experience)
20
+ - [已知限制与延期工作](#known-limitations-and-deferred-work)
21
+ - [开发备注](#dev-note)
22
+
23
+ -----
24
+
25
+ <a id="use-this-package"></a>
26
+ ## 使用本包
27
+
28
+ 当组合需要状态跨工具调用存活的终端会话时,挂载 `@deepseek-ai/dsh-terminal`。单独的服务本身没有用处:请与 `@deepseek-ai/dsh-terminal-bash` 之类的后端、`@deepseek-ai/dsh-tool-terminal` 之类的工具包配对,并在同一个组合中一起加载。
29
+
30
+ ### 何时选择
31
+
32
+ 当工作状态存在于终端而非文件时,选择持久终端:逐步调试 gdb、在 Python 或 Node REPL 中探索,或中断前台命令后回到 shell。对于有界操作,请选择单次 bash、read、write 与 edit 工具——它们保留更强的校验、审批、输出上限与回放约定。会话只存在于进程本地:harness 进程退出时它们会消失,因此需要持久的工作应写入文件或其他持久系统。
33
+
34
+ ### 组合方式
35
+
36
+ 将会话服务与后端、工具包一起加载:
37
+
38
+ ```yaml
39
+ - name: '@deepseek-ai/dsh-terminal'
40
+ - name: '@deepseek-ai/dsh-terminal-bash'
41
+ - name: '@deepseek-ai/dsh-tool-terminal'
42
+ ```
43
+
44
+ 后端提供一个稳定类型——随附的 shell 后端提供 `shell`——工具按该类型打开会话。shell 后端还额外要求沙箱、沙箱策略与子进程提供方;完整组合见其 [README](../terminal-bash/README.zh.md)。
45
+
46
+ ### 会话能做什么
47
+
48
+ 会话存在后,消费方可以:打开会话并获得其 id 与有界启动输出;发送文本(可选地提交 Enter)并等待 shell 再次就绪或发送超时;读取有界保留输出;向前台进程组投递一个允许的信号;关闭会话并等待其进程树结束;以及列出调用方拥有的会话。每个会话同一时间最多有一个活跃发送;第二次发送会失败,直到第一次结算。
49
+
50
+ ### 所有权与隔离
51
+
52
+ 每个会话都由打开它的确切 agent 拥有。凡是指名会话的操作,只要调用方不是该 agent 就会被拒绝,因此即使模型获知另一个 agent 的 id,也无法操作其终端。可选的会话 `name` 是所有者本地的显示元数据——例如 `main` 或 `gdb` 这样的标签——并且只在所有者范围内唯一。
53
+
54
+ ### 可观察结果与失败
55
+
56
+ 成功打开会返回会话 id、类型、后端存在时的 pid、状态与有界启动消息。发送以等待原因结算:`stdin_read`(shell 正在等待输入)、`inferred_idle`(输出静默)、`timeout` 或 `session_exit`(顶层 shell 已退出)。失败携带稳定的机器可路由错误码:后端类型缺失(`NO_BACKEND`)、会话未知(`NO_SESSION`)、属于其他 agent 的会话(`FOREIGN_SESSION`)、并发第二次发送(`SEND_ACTIVE`),或所有者不再存活(`OWNER_NOT_LIVE`)。后端设置失败会在发布任何内容之前拒绝打开;清理失败会拒绝关闭,而不是声称成功。
57
+
58
+ -----
59
+
60
+ <a id="understand-the-implementation"></a>
61
+ ## 理解实现
62
+
63
+ <details>
64
+ <summary>实现细节——点击展开</summary>
65
+
66
+ 本节解释服务背后的设计并指出实现它们的代码位置;可观察行为已在[使用本包](#use-this-package)中说明。
6
67
 
7
- ## 约定
68
+ ### 设计理念
8
69
 
9
- - 后端注册一个稳定的 `type`,并返回尚未发布的 `TerminalBackendSession`;失败或取消的设置过程必须清理部分资源。若清理失败,则以 `TerminalBackendCleanupError` 拒绝,使注册表能在取消后继续保留该清理失败。
10
- - spawn 取消会保留调用方提供的确切中止原因。后端设置完成后,服务 dispose 与所有者消失仍分别对应可供机器路由的不同失败。
11
- - 所有者与服务的 dispose 会通过服务持有的信号中止尚未发布的设置,并等待后端结算和回滚后才返回。
12
- - 如果回滚关闭失败,或后端报告启动清理失败,dispose 生命周期会以拒绝结束,不会声称已经完全停稳。调用方触发的取消仍收到其确切原因;生命周期触发的回滚失败也会拒绝待完成的 spawn。
13
- - 调用方取消后发生的后端清理失败仍算作所有者活动,直到所有者或服务 dispose 并消费、报告该失败,避免生命周期策略把失败的清理误判为完全停稳。
14
- - `hasOwnerActivity(owner)` 覆盖从尚未发布的设置到最终关闭的全过程,使生命周期策略能精确限制对应所有者,不受发布竞态影响。
15
- - 成功的 spawn 会发布一个 `TerminalSessionId`。可选的 `name` 只是所有者本地的显示元数据,绝不代表权限。
16
- - 一个会话最多接受一个活跃的发送操作。读取和信号操作可以观察该发送;在当前操作结算前,另一项发送会失败。
17
- - `TerminalSendResult.waitReason` 与 `sessionStatus` 相互独立。`session_exit` 描述顶层 PTY 进程,而不是任意前台命令。
18
- - `kill()` 与 dispose 只会在后端捕获的进程树完全停稳后完成。清理失败会以拒绝结束,而非声称成功;同时它会清除匹配的后端和注册表限制,使后续关闭能够重试,且不会干扰较新的尝试。
70
+ 服务拥有终端机制以外的一切:会话身份、发布、授权与清理。后端负责会话如何启动、检测就绪、保留输出与关闭;服务只在后端设置成功后发布会话。这个拆分让同一个注册表可用于不同的终端基底。
19
71
 
20
- seam 不包含 `node-pty`、沙箱、工具 schema、提示词、任务或终端渲染策略。实现负责终端机制;消费方负责模型呈现和可选的后台任务注册。
72
+ ### 源码地图
21
73
 
74
+ | 文件 | 职责 |
75
+ |---|---|
76
+ | [`src/index.ts`](src/index.ts) | `TerminalSessionService`:后端注册表、spawn/send/read/signal/kill/list、所有者清理与 dispose |
77
+ | [`src/types.ts`](src/types.ts) | 共享约定:后端接口、会话类型、等待原因、信号集合、错误码 |
78
+ | [`src/invariant.ts`](src/invariant.ts) | 不变式伴生插件(无运行时不变式;注册表是私有可变状态) |
79
+
80
+ ### 数据模型与生命周期
81
+
82
+ 每个已发布会话是一条记录,包含其 id、所有者、可选名称、后端类型、后端会话,以及当前唯一的活跃发送。未发布的 spawn 按所有者以预留形式跟踪,并持有服务拥有的中止信号。dispose 会中止待完成的 spawn、等待其结算与回滚,然后关闭每个拥有的会话并等待完全停稳,最后运行所有者分离器;清理失败会拒绝生命周期,而不是声称成功。
83
+
84
+ ### 所有权与清理规则
85
+
86
+ - 限制基于确切的 `Agent` 对象:`hasOwnerActivity(owner)` 覆盖从尚未发布的设置到最终关闭的全过程,没有发布竞态,因此生命周期策略可以精确限制所有者。
87
+ - 无法清理部分启动资源的后端会以 `TerminalBackendCleanupError` 拒绝;服务会将该失败保留为受跟踪的所有者活动,直到所有者或服务 dispose 消费并报告它。
88
+ - 调用方取消保留其确切的 `AbortSignal.reason`;`kill()` 与 dispose 只在后端捕获的进程树完全停稳后完成。
89
+
90
+ ### 发送预留
91
+
92
+ 服务在返回操作之前同步为一个活跃发送预留会话,包括在后台 job id 可见之前;第二次发送会以 `SEND_ACTIVE` 失败,因此输出与取消永远不会跨操作所有权。
93
+
94
+ </details>
95
+
96
+ -----
97
+
98
+ <a id="further-exploration"></a>
99
+ ## 进一步探索
100
+
101
+ 当包级约定不够用时阅读以下页面。它们从共享终端模型进入随附后端、工具与设计证据。
102
+
103
+ - [终端子系统参考](../../../docs/subsystems/terminal.zh.md)——共享类型、后端与会话约定,以及生成的 `ctx.terminals` 接口面。
104
+ - [terminal/ 包映射](../README.zh.md)——三包家族及其组合方式。
105
+ - [terminal-bash 后端](../terminal-bash/README.zh.md)——提供 `shell` 类型的随附 shell 后端。
106
+ - [tool-terminal 工具](../tool-terminal/README.zh.md)——操作会话的 6 个面向模型工具。
107
+ - [持久 PTY Agent Note](../../../.agents/notes/implemented/feature/2026-07-16-persistent-pty-sessions.zh.md)——设计理由、备选方案与暂缓边界。
108
+
109
+ -----
110
+
111
+ <a id="model-experience"></a>
22
112
  ## 模型体验
23
113
 
24
114
  ### 间接消费方
25
115
 
26
- #### 模型看到的内容
116
+ #### 模型看到什么
27
117
 
28
- 没有直接可见内容。此包不注册提示词或工具;可见 schema 和结果文本由 `@deepseek-ai/dsh-tool-terminal` 负责。
118
+ 没有直接可见内容。此包不注册提示词或工具;可见 schema 与结果文本由 `@deepseek-ai/dsh-tool-terminal` 负责。
29
119
 
30
120
  #### Token 影响
31
121
 
32
- 没有直接影响。活跃会话状态会保留在进程本地,直到消费方返回有界结果。
122
+ 没有直接影响。活跃会话状态保留在进程本地,直到消费方返回有界结果。
33
123
 
34
124
  #### KV Cache 影响
35
125
 
36
- 不会直接失效;请求前缀变更由上述消费方负责。
126
+ 不会直接失效;请求前缀变更由 `@deepseek-ai/dsh-tool-terminal` 负责。
127
+
128
+ ## 已知限制与延期工作
129
+
130
+ <a id="known-limitations-and-deferred-work"></a>
131
+
132
+
133
+ 这些限制说明服务何时不合适。它们是当前包约束,不是任务积压。
134
+
135
+ - **进程本地会话**——会话与原始 scrollback 只存在于本进程中,harness 重启后不会恢复;需要持久的工作必须写入文件或其他持久系统。
136
+ - **不支持跨 agent 共享**——会话有意保持单一所有者,没有共享或转移会话的途径。
137
+ - **没有声明式自动启动**——会话只在 agent 工具调用期间创建。
138
+
139
+ <a id="dev-note"></a>
140
+ ### 开发备注
141
+
142
+ <details>
143
+ <summary>维护者的工作上下文——点击展开</summary>
144
+
145
+ 本开发备注是维护者的工作上下文,明确不具权威性:已交付的行为、限制与既定理由以本文档上文、包代码与所链接的 Agent Note 为准。
146
+
147
+ #### 未决方向
37
148
 
38
- ## 已知限制与暂缓事项
149
+ - 共享会话设计需要独立的权限约定。
150
+ - 声明式自动启动功能需要通过尚未发布的 agent 设置组合而成。
39
151
 
40
- - 会话只存在于进程本地,harness 重启后不会恢复。
41
- - 系统有意不支持跨 agent 共享;未来的共享会话设计需要独立的权限约定。
152
+ </details>
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-terminal",
3
3
  "description": "Persistent PTY session seam for the DeepSeek Harness — owner-scoped ids, backend registry, interactive sends, reads, signals, and awaited cleanup",
4
- "version": "0.1.1-rc.2",
4
+ "version": "0.1.2-alpha.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -32,16 +32,16 @@
32
32
  ],
33
33
  "license": "MIT",
34
34
  "peerDependencies": {
35
- "@deepseek-ai/dsh-agent": "^0.1.1-rc.2",
36
- "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2",
37
- "@deepseek-ai/cordis": "^4.0.1",
38
- "@deepseek-ai/dsh-brand": "^0.1.1-rc.2"
35
+ "@deepseek-ai/dsh-agent": "^0.1.2-alpha.2",
36
+ "@deepseek-ai/dsh-invariants": "^0.1.2-alpha.2",
37
+ "@deepseek-ai/dsh-brand": "^0.1.2-alpha.2",
38
+ "@deepseek-ai/cordis": "^4.0.2"
39
39
  },
40
40
  "devDependencies": {
41
- "@deepseek-ai/dsh-agent": "^0.1.1-rc.2",
42
- "@deepseek-ai/dsh-brand": "^0.1.1-rc.2",
43
- "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2",
44
- "@deepseek-ai/dsh-session": "^0.1.1-rc.2",
45
- "@deepseek-ai/cordis": "^4.0.1"
41
+ "@deepseek-ai/dsh-agent": "^0.1.2-alpha.2",
42
+ "@deepseek-ai/dsh-brand": "^0.1.2-alpha.2",
43
+ "@deepseek-ai/dsh-invariants": "^0.1.2-alpha.2",
44
+ "@deepseek-ai/dsh-session": "^0.1.2-alpha.2",
45
+ "@deepseek-ai/cordis": "^4.0.2"
46
46
  }
47
47
  }