@wangmo-bit/ds-link 0.0.0-stage → 0.8.18

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.
Files changed (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +134 -2
  3. package/TESTING.md +59 -0
  4. package/THIRD_PARTY_NOTICES.md +313 -0
  5. package/assets/icon.svg +7 -0
  6. package/cordis.patch.yml +3 -0
  7. package/dist/client.js +6012 -0
  8. package/package.json +102 -4
  9. package/src/core/constants.js +188 -0
  10. package/src/core/downgrade.js +80 -0
  11. package/src/core/engine.js +4669 -0
  12. package/src/core/errors.js +51 -0
  13. package/src/core/ledger.js +1174 -0
  14. package/src/core/migration.js +741 -0
  15. package/src/core/render.js +61 -0
  16. package/src/core/settings.js +147 -0
  17. package/src/core/validation.js +454 -0
  18. package/src/host/adapter.js +1152 -0
  19. package/src/host/connection.js +113 -0
  20. package/src/host/entry-0.2.0.js +13 -0
  21. package/src/host/entry-0.3.0.js +13 -0
  22. package/src/host/entry-0.4.0.js +13 -0
  23. package/src/host/entry-0.8.10.js +13 -0
  24. package/src/host/entry-0.8.11.js +13 -0
  25. package/src/host/entry-0.8.12.js +13 -0
  26. package/src/host/entry-0.8.13.js +13 -0
  27. package/src/host/entry-0.8.14.js +13 -0
  28. package/src/host/entry-0.8.15.js +13 -0
  29. package/src/host/entry-0.8.16-pre.1.js +13 -0
  30. package/src/host/entry-0.8.16-pre.2.js +13 -0
  31. package/src/host/entry-0.8.16-pre.3.js +13 -0
  32. package/src/host/entry-0.8.16-pre.4.js +13 -0
  33. package/src/host/entry-0.8.16-pre.5.js +13 -0
  34. package/src/host/entry-0.8.18.js +13 -0
  35. package/src/host/entry-0.8.5.js +13 -0
  36. package/src/host/entry-0.8.6.js +13 -0
  37. package/src/host/entry-0.8.7.js +13 -0
  38. package/src/host/entry-0.8.8.js +13 -0
  39. package/src/host/entry-0.8.9.js +13 -0
  40. package/src/host/index.js +74 -0
  41. package/src/host/plugin.js +403 -0
  42. package/src/host/prompt.js +22 -0
  43. package/src/host/tools.js +312 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Wangmo-bit
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,135 @@
1
- # Temporary Holding Version
1
+ # DS-link
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ **Let the sessions you already have in DSH work together.**
4
+
5
+ English · [简体中文](README_ZH.md)
6
+
7
+ ![License: MIT](https://img.shields.io/badge/license-MIT-587561?style=flat-square) ![Node.js 24](https://img.shields.io/badge/Node.js-24-587561?style=flat-square)
8
+
9
+ You already have development, product and research sessions. DS-link lets them exchange messages, ask for help and receive explicit replies. You no longer have to carry questions and answers between chat windows, and you do not need to build a separate bot team.
10
+
11
+ > **Install:** `dsh plugin --profile <your-profile> add @wangmo-bit/ds-link@0.8.18`. You can also download the same package from the [GitHub release](https://github.com/Wangmo-bit/DS-link/releases/tag/v0.8.18). Installing does not restart the Host or apply the optional bridge.
12
+
13
+ ![Bubble mode: Development consults Product discussion and continues with the answer](docs/assets/bubble-en.png)
14
+
15
+ *The images use fictional content and a synthetic interface, not real conversations or an end-to-end validation recording.*
16
+
17
+ ## What it does
18
+
19
+ **DS-link connects registered sessions on the same DSH host.** Workspaces may differ; computers, team networks and public-network Agents are not connected.
20
+
21
+ Tell your development session:
22
+
23
+ > Ask Product discussion whether the first version should start with weekly-report export or search. Then continue.
24
+
25
+ It finds the product session and sends a request. After an explicit reply, you continue in the development session instead of carrying the question and answer between windows yourself.
26
+
27
+ - **Use existing sessions:** discover registered ordinary sessions across workspaces, or ask to create a new session with its first task.
28
+ - **Separate notifications from requests:** tell another session something, or ask it for a reply explicitly linked to your request.
29
+ - **Inspect the exchange:** look at messages and delivery evidence. Host acceptance, context receipt and an explicit reply are different facts; none proves the work is done.
30
+
31
+ ![Synthetic collaboration sequence: send a question, receive a message, bring back a result](docs/assets/flow-en.gif)
32
+
33
+ You ask in natural language and the Agent calls tools. The panel holds settings and records, **not a manual message-sending form**. A model may still misunderstand scope or fail to coordinate; review important results. See [first use](docs/quickstart.en.md).
34
+
35
+ ## Two display modes
36
+
37
+ ### Bubble mode: read the result, without the noise
38
+
39
+ For everyday conversation, delegation and reading results when you do not want to watch every execution step.
40
+
41
+ - Clear message bodies; long replies are not additionally clipped.
42
+ - Reasoning and tool bodies stay out of the timeline; elapsed time and thought/tool counts occupy one line.
43
+ - Lightweight message capsules open the exchange on demand.
44
+ - Small Agent hints show only participants and states that can be confirmed; dispatch is not completion.
45
+ - A failed turn has a short status first, with details on demand; questions and approvals that need you are never hidden.
46
+
47
+ ### Card mode: keep the process, inspect the details
48
+
49
+ For troubleshooting, checking execution, or when you prefer DSH's native presentation.
50
+
51
+ - Keeps the Host's reasoning, tool bodies and original actions.
52
+ - Organizes messages as cards with clear sender, recipient and subject.
53
+ - Expands message bodies and technical details on demand instead of showing everything at once.
54
+
55
+ ![The same collaboration in card mode: message cards and process](docs/assets/card-en.png)
56
+
57
+ **Switching changes presentation, not conversation content, communication ability or permissions.** The preference is stored in the current browser and site only. Full bubble flow and Agent hints require a matching Host bridge; installing the plugin alone does not guarantee the full effect. Card mode does not need the bridge. See [installation](docs/installation.en.md).
58
+
59
+ ## Small details in the chat
60
+
61
+ - **Quote reply:** the hollow quote icon after copy under an assistant message; click it to insert the quote into the composer, then write your reply. It never sends automatically. Bodies longer than 1200 Unicode characters insert an opening excerpt with a marker; a selected fragment can also use the Host's "quote text".
62
+ - **Agent hints:** show which Agents can be confirmed for this turn, without mixing running, done and unconfirmed; internal parent/child Agent messages do not crowd the main conversation capsules.
63
+ - **Actions stay with the message:** copy, quote, feedback, branch and information stay next to the message, following the Host action row's visibility rules without taking over reading space.
64
+
65
+ ![Quote inserted into the composer; the composer area is a synthetic illustration](docs/assets/quote-en.png)
66
+
67
+ A quote carries text, **not a permanent message link or a "reply only to this" hard constraint**; it helps the model understand what you refer to, and does not replace your explicit instruction.
68
+
69
+ ## Settings
70
+
71
+ Everyday communication has five settings: **enable, pause new delivery, delivery channels, reply wait time, completed-body retention days**. Start with the defaults and change them when needed.
72
+
73
+ - Pausing queues new messages; it does not stop work other sessions already started.
74
+ - The channel count limits message delivery, not model concurrency.
75
+ - A reply timeout is marked; it does not resend or cancel work.
76
+ - Retention cleans up the plugin's own completed bodies, not the Host's original chat.
77
+
78
+ Display mode and "my bubble display name" are separate browser-local preferences; the name does not become sender identity or permission. See [settings](docs/settings.en.md).
79
+
80
+ <details>
81
+ <summary>See the settings page</summary>
82
+
83
+ ![A synthetic demonstration of the real settings component; defaults are 3 channels, 30 minutes, 30 days](docs/assets/settings-en.png)
84
+
85
+ </details>
86
+
87
+ ## Install
88
+
89
+ Requires Node.js 24, DSH and pnpm; verified environments are primarily Linux Web. For the first install, use an isolated profile and back up the target profile's `package.json`, `pnpm-lock.yaml` and `cordis.patch.yml`.
90
+
91
+ ```sh
92
+ dsh plugin --profile <your-profile> add @wangmo-bit/ds-link@0.8.18
93
+ ```
94
+
95
+ You can also download the `.tgz` from the [GitHub release](https://github.com/Wangmo-bit/DS-link/releases/tag/v0.8.18), or build from source:
96
+
97
+ ```sh
98
+ git clone https://github.com/Wangmo-bit/DS-link.git
99
+ cd DS-link
100
+ npm ci
101
+ npm run build
102
+ mkdir -p output
103
+ npm pack --pack-destination ./output
104
+ dsh plugin --profile <your-profile> add /absolute/path/to/wangmo-bit-ds-link-VERSION.tgz
105
+ ```
106
+
107
+ **Installing the plugin and modifying the Host are separate actions.** These commands do not apply the bridge or restart anything. The package is `@wangmo-bit/ds-link`; existing `session_link_*` tools and data identifiers remain compatible. See [installation and migration](docs/installation.en.md#renaming-an-existing-installation).
108
+
109
+ ## Boundaries and privacy
110
+
111
+ - The message ledger stays in the local DSH data directory, not a separate cloud messaging service. Sent content still enters the receiving session and may reach its model provider.
112
+ - Cross-session history tools can read bounded text from registered ordinary and archived sessions according to permissions, **with no per-target consent switch**. Low intrusion does not mean no privacy impact.
113
+ - Messages, quotes and file paths from other sessions are context, not authorization for sensitive operations, and do not grant the receiver more permissions.
114
+ - It is not an automatic task-taking or task-management system, and it does not guarantee that more sessions will use fewer model credits.
115
+ - Known limits include Host adaptation, Agent attribution evidence, chain-control UI and cross-version rollback; see [known issues](docs/known-issues.en.md).
116
+
117
+ See the [security model](docs/security-model.md) (in Chinese); report vulnerabilities privately through [security reporting](SECURITY.en.md).
118
+
119
+ ## Docs and feedback
120
+
121
+ | I want to… | Go to |
122
+ | --- | --- |
123
+ | Start using / adjust settings | [Quickstart](docs/quickstart.en.md) · [Settings](docs/settings.en.md) |
124
+ | Install / troubleshoot / understand limits | [Installation](docs/installation.en.md) · [Known issues](docs/known-issues.en.md) |
125
+ | Understand design choices | [Philosophy](docs/philosophy.md) · [Architecture](docs/architecture.md) (in Chinese) |
126
+ | Report a problem / contribute | [Issues](https://github.com/Wangmo-bit/DS-link/issues/new/choose) · [Contributing](CONTRIBUTING.en.md) · [Testing](TESTING.md) |
127
+
128
+ Concrete scenarios and problem reports are welcome; you never need to provide private conversations or full configuration files.
129
+
130
+ ## Acknowledgments and license
131
+
132
+ - [DS-Bot](https://github.com/Fei2411/DS-Bot): a public design reference for collaboration and chat presentation.
133
+ - [Claude](https://claude.com/): where the author first experienced this kind of collaboration, and an early inspiration for DS-link.
134
+
135
+ Project-owned code uses [MIT](LICENSE). Third-party material, dependencies and Host-bridge licensing are documented in [notices](THIRD_PARTY_NOTICES.md); demonstration assets in [asset notes](ASSETS.md). This is an independent community plugin, not an official DeepSeek product, and it is not endorsed by DeepSeek. Your providers bill model usage; check important actions and results yourself.
package/TESTING.md ADDED
@@ -0,0 +1,59 @@
1
+ # 测试与验证 / Testing
2
+
3
+ [贡献说明](CONTRIBUTING.md) · [English contribution guide](CONTRIBUTING.en.md)
4
+
5
+ ## 先隔离,再测试
6
+
7
+ 测试包含固定 `/tmp/dsh-session-link-*` 路径、子进程、文件删除、锁竞争和 chmod 故障注入。不要在日用宿主的共享 `/tmp` 上运行完整套件。仅设置 TMPDIR 或换用户不够;root 还会绕过权限故障。
8
+
9
+ `npm test` 现在先检查 **Linux、非 root、独立挂载到 `/tmp` 的 tmpfs**,不满足就退出,避免误清理。按下面方式在一次性容器中运行:
10
+
11
+ ```sh
12
+ docker build -f scripts/test.Dockerfile -t session-link-check .
13
+ docker run --rm --network=none --read-only --user=node \
14
+ --cap-drop=ALL --security-opt=no-new-privileges \
15
+ --pids-limit=512 --memory=3g --cpus=4 \
16
+ --tmpfs /tmp:rw,nosuid,nodev,exec,size=1g,mode=1777 \
17
+ session-link-check
18
+ ```
19
+
20
+ 镜像构建阶段 `npm ci` 需要访问依赖源;测试运行阶段断网、只读根文件系统,源码/依赖复制到 tmpfs 后才测试、构建和核对包清单。退出即销毁所有测试数据。固定 Node 24 镜像 digest 见 Dockerfile;不是启动新的 DSH 服务。
21
+
22
+ `npm test` 用 `scripts/run-tests.mjs` 发现 test 和 scripts 的测试,包括 rc.1 桥接与安装器,不再手写容易漏挂的长列表。新增脚本子目录如需被发现,须修改 runner 的白名单。安装器测试使用合成前后像;它的隔离环境变量由经过守卫的 runner 设置。
23
+
24
+ ## 哪些测试依赖实际 Host
25
+
26
+ 上述镜像在构建时用 `scripts/prepare-host-fixtures.mjs` 获取并核验三份固定公开 SDK bundle,运行时只读使用;因此 CI 配方可以覆盖这些集成用例。直接运行源码而未提供夹具时,下列用例会明确跳过,不能把跳过算成兼容通过:
27
+
28
+ | 环境变量 | 需要的文件 / 范围 |
29
+ | --- | --- |
30
+ | `DSH_CHAT_FLOW_CLIENT` | 精确 rc.5 chat bundle,用于旧桥接用例 |
31
+ | `DSH_CHAT_RC1_CLIENT` | 原始 DSH `0.2.2-rc.1` chat bundle;精确 SHA 校验、桥生成和一次性前缀安装器验收 |
32
+ | `DSH_CLIENT_CONVERSATION` | 对应版本 conversation bundle;真实 dispatcher 的 4 个集成用例 |
33
+ | `DSH_CHAT_CLIENT` | 旧滚动补丁需要的精确 client artifact(具体入口以测试源码为准) |
34
+
35
+ 只读挂载相应公开 SDK 夹具进测试容器并设置变量,禁止挂载生产 profile 或真实会话。桥接测试只修改 `/tmp` 中专门创建的假安装前缀,不改系统 DSH。不同历史测试的实际变量名以源码为准,不伪造环境使 skip 变 pass。
36
+
37
+ ## 按改动选择证据
38
+
39
+ - 协议/存储:幂等、显式 reply、暂停、unknown、超时、旧数据迁移、锁与恢复。
40
+ - 客户端:气泡/卡片两条路径、作者身份、附件、审批、引用、操作行、Agent 归属与滚动。
41
+ - Host 维护:精确前后像、版本拒绝、备份、并发写入、原子替换、失败证据和重试。
42
+ - 包与文档:`npm run build` 后 `npm run check:public -- --pack`。检查是有限规则,不代替全历史人工审计。
43
+
44
+ UI 的 React/合成用例不是实际模型、图片上传、浏览器全部时序或真实权限验证。代码中保留原生动作也不等于已点过。应分别报告通过、失败、跳过和未运行。
45
+
46
+ ## 演示素材不是验收录像
47
+
48
+ ```sh
49
+ npm ci
50
+ # 若尚无浏览器,开发者可自行安装与 playwright-core 匹配的 Chromium。
51
+ # 或通过 CHROMIUM_PATH 显式指定一个已有浏览器。
52
+ npm run docs:assets
53
+ ```
54
+
55
+ 离线组件演示不连接 DSH、不读取 DSH_HOME、不发送消息,只有虚构会话和标注的宿主替身。生成说明和可选 GIF 工具见 [ASSETS](ASSETS.md)。生成素材本身不证明真正的跨会话调用或生产可用。
56
+
57
+ ## English summary
58
+
59
+ The full suite mutates files, uses fixed /tmp names and starts subprocesses. Run it only in the documented disposable, non-root Linux container with a private tmpfs mounted at /tmp; TMPDIR alone is not isolation. The default runner refuses unsafe environments. Dependencies are fetched during image build, then tests/build/pack run offline. Optional Host SDK tests skip explicitly unless exact read-only fixtures are supplied. Synthetic UI images are presentation fixtures, not end-to-end, live-model, permission or production-installation evidence.
@@ -0,0 +1,313 @@
1
+ # Third-party notices
2
+
3
+ This repository is an independent implementation, but it is **not third-party-free**. Some material is derived from, or embeds paths from, other projects. Project-owned code and documentation are MIT; the third-party material below keeps its own license and is not relicensed by this project.
4
+
5
+ ## DeepSeek Harness (DSH) — MIT
6
+
7
+ The plugin integrates with DeepSeek Harness public Host APIs. The optional Host bubble bridge in `scripts/dsh-web-flow-bridge-rc1.mjs` / `scripts/install-host-flow-bridge-rc1.mjs` derives from, and patches, the exact-version DSH Web Chat client bundle. It is source-only maintenance tooling, not part of the plugin package, and is never installed automatically.
8
+
9
+ The DSH license below is reproduced from the locally installed `@deepseek-ai/dsh` package (`LICENSE`, checked 2026-11-08). The derived bridge material carries the same copyright and permission notice.
10
+
11
+ ```text
12
+ MIT License
13
+
14
+ Copyright (c) 2026 DeepSeek
15
+
16
+ Permission is hereby granted, free of charge, to any person obtaining a copy
17
+ of this software and associated documentation files (the "Software"), to deal
18
+ in the Software without restriction, including without limitation the rights
19
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
20
+ copies of the Software, and to permit persons to whom the Software is
21
+ furnished to do so, subject to the following conditions:
22
+
23
+ The above copyright notice and this permission notice shall be included in all
24
+ copies or substantial portions of the Software.
25
+
26
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
27
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
28
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
29
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
30
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
31
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32
+ SOFTWARE.
33
+ ```
34
+
35
+ ## Lucide — ISC (quote icon)
36
+
37
+ The one-click quote icon in `src/client/message-quote-action.jsx` is the Lucide `quote` icon path. The Lucide license below is reproduced from <https://lucide.dev/license> (checked 2026-11-08).
38
+
39
+ ```text
40
+ ISC License
41
+
42
+ Copyright (c) 2026 Lucide Icons and Contributors
43
+
44
+ Permission to use, copy, modify, and/or distribute this software for any
45
+ purpose with or without fee is hereby granted, provided that the above
46
+ copyright notice and this permission notice appear in all copies.
47
+
48
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
49
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
50
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
51
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
52
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
53
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
54
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
55
+ ```
56
+
57
+ ## Feather-derived icon — MIT
58
+
59
+ The sidebar `link` icon in `src/client/index.jsx` is a Feather-derived icon path (distributed through Lucide's Feather-derived icon set). The Feather MIT license below is reproduced from the same Lucide license page (checked 2026-11-08).
60
+
61
+ ```text
62
+ The MIT License (MIT)
63
+
64
+ Copyright (c) 2013-present Cole Bemis
65
+
66
+ Permission is hereby granted, free of charge, to any person obtaining a copy
67
+ of this software and associated documentation files (the "Software"), to deal
68
+ in the Software without restriction, including without limitation the rights
69
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
70
+ copies of the Software, and to permit persons to whom the Software is
71
+ furnished to do so, subject to the following conditions:
72
+
73
+ The above copyright notice and this permission notice shall be included in all
74
+ copies or substantial portions of the Software.
75
+
76
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
77
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
78
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
79
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
80
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
81
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
82
+ SOFTWARE.
83
+ ```
84
+
85
+ ## DS-Bot adapted fold/preview helpers — Apache-2.0
86
+
87
+ The long-message fold/preview helpers in `src/client/chat-skin-model.mjs` are adapted from DS-Bot's `ds-bot/src/client/fold.js` (Apache-2.0), Copyright 2026 Fei2411 and DS Bot contributors. The adaptation covers the scanning/preview helpers (`moreThanLines`, `firstLines`, `cutAtLine`, `openFence`, and the preview/fence behavior); they were changed to measure length in Unicode code points instead of UTF-16 code units and to return an independent view-model contract (`shouldFold`, `folded`, `preview`, `text`, `totalChars`) instead of the original hook/rendering structure. The current bubble presentation does not fold long messages; the adapted helper module remains in the client source and is carried through the client build path. The project as a whole remains MIT; this adapted material is Apache-2.0 and is not relicensed as MIT.
88
+
89
+ This is an engineering attribution, not a legal audit or a claim that every lineage detail has been independently cleared. The full Apache License 2.0 text is reproduced at the end of this file. The DS-Bot attribution notice relevant to this source is retained:
90
+
91
+ ```text
92
+ DS Bot
93
+ Copyright 2026 Fei2411 and the DS Bot contributors
94
+
95
+ This product is licensed under the Apache License, Version 2.0 (see LICENSE).
96
+ ```
97
+
98
+ ## Other design references
99
+
100
+ - **DS-Bot** (<https://github.com/Fei2411/DS-Bot>, Apache-2.0): apart from the adapted fold/preview helpers above, the collaboration and chat-presentation design was informed by public documentation. No DS-Bot runtime, Bot roster, server logic, avatars or artwork is bundled here, and this project does not relicense any DS-Bot material.
101
+ - **dsh-go** (<https://github.com/ccch1mneyyy/dsh-go>): documentation and open-source preparation reference only; no code or artwork is copied here.
102
+
103
+ ## Development dependencies and Host peers
104
+
105
+ Development dependencies such as React, React DOM, esbuild and playwright-core are used for building and testing only. They keep their own licenses, are not part of the plugin's published file set, and are not relicensed by this project's MIT license.
106
+
107
+ Host peer dependencies (`@deepseek-ai/dsh-llm`, `@deepseek-ai/cordis`, `@deepseek-ai/schemastery`, and React peers) are provided by their authors and are not vendored here. Refer to their packages for the applicable license and notice texts.
108
+
109
+ ## Apache License 2.0 (DS-Bot adapted material)
110
+
111
+ ```text
112
+ Apache License
113
+ Version 2.0, January 2004
114
+ http://www.apache.org/licenses/
115
+
116
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
117
+
118
+ 1. Definitions.
119
+
120
+ "License" shall mean the terms and conditions for use, reproduction,
121
+ and distribution as defined by Sections 1 through 9 of this document.
122
+
123
+ "Licensor" shall mean the copyright owner or entity authorized by
124
+ the copyright owner that is granting the License.
125
+
126
+ "Legal Entity" shall mean the union of the acting entity and all
127
+ other entities that control, are controlled by, or are under common
128
+ control with that entity. For the purposes of this definition,
129
+ "control" means (i) the power, direct or indirect, to cause the
130
+ direction or management of such entity, whether by contract or
131
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
132
+ outstanding shares, or (iii) beneficial ownership of such entity.
133
+
134
+ "You" (or "Your") shall mean an individual or Legal Entity
135
+ exercising permissions granted by this License.
136
+
137
+ "Source" form shall mean the preferred form for making modifications,
138
+ including but not limited to software source code, documentation
139
+ source, and configuration files.
140
+
141
+ "Object" form shall mean any form resulting from mechanical
142
+ transformation or translation of a Source form, including but
143
+ not limited to compiled object code, generated documentation,
144
+ and conversions to other media types.
145
+
146
+ "Work" shall mean the work of authorship, whether in Source or
147
+ Object form, made available under the License, as indicated by a
148
+ copyright notice that is included in or attached to the work
149
+ (an example is provided in the Appendix below).
150
+
151
+ "Derivative Works" shall mean any work, whether in Source or Object
152
+ form, that is based on (or derived from) the Work and for which the
153
+ editorial revisions, annotations, elaborations, or other modifications
154
+ represent, as a whole, an original work of authorship. For the purposes
155
+ of this License, Derivative Works shall not include works that remain
156
+ separable from, or merely link (or bind by name) to the interfaces of,
157
+ the Work and Derivative Works thereof.
158
+
159
+ "Contribution" shall mean any work of authorship, including
160
+ the original version of the Work and any modifications or additions
161
+ to that Work or Derivative Works thereof, that is intentionally
162
+ submitted to Licensor for inclusion in the Work by the copyright owner
163
+ or by an individual or Legal Entity authorized to submit on behalf of
164
+ the copyright owner. For the purposes of this definition, "submitted"
165
+ means any form of electronic, verbal, or written communication sent
166
+ to the Licensor or its representatives, including but not limited to
167
+ communication on electronic mailing lists, source code control systems,
168
+ and issue tracking systems that are managed by, or on behalf of, the
169
+ Licensor for the purpose of discussing and improving the Work, but
170
+ excluding communication that is conspicuously marked or otherwise
171
+ designated in writing by the copyright owner as "Not a Contribution."
172
+
173
+ "Contributor" shall mean Licensor and any individual or Legal Entity
174
+ on behalf of whom a Contribution has been received by Licensor and
175
+ subsequently incorporated within the Work.
176
+
177
+ 2. Grant of Copyright License. Subject to the terms and conditions of
178
+ this License, each Contributor hereby grants to You a perpetual,
179
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
180
+ copyright license to reproduce, prepare Derivative Works of,
181
+ publicly display, publicly perform, sublicense, and distribute the
182
+ Work and such Derivative Works in Source or Object form.
183
+
184
+ 3. Grant of Patent License. Subject to the terms and conditions of
185
+ this License, each Contributor hereby grants to You a perpetual,
186
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
187
+ (except as stated in this section) patent license to make, have made,
188
+ use, offer to sell, sell, import, and otherwise transfer the Work,
189
+ where such license applies only to those patent claims licensable
190
+ by such Contributor that are necessarily infringed by their
191
+ Contribution(s) alone or by combination of their Contribution(s)
192
+ with the Work to which such Contribution(s) was submitted. If You
193
+ institute patent litigation against any entity (including a
194
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
195
+ or a Contribution incorporated within the Work constitutes direct
196
+ or contributory patent infringement, then any patent licenses
197
+ granted to You under this License for that Work shall terminate
198
+ as of the date such litigation is filed.
199
+
200
+ 4. Redistribution. You may reproduce and distribute copies of the
201
+ Work or Derivative Works thereof in any medium, with or without
202
+ modifications, and in Source or Object form, provided that You
203
+ meet the following conditions:
204
+
205
+ (a) You must give any other recipients of the Work or
206
+ Derivative Works a copy of this License; and
207
+
208
+ (b) You must cause any modified files to carry prominent notices
209
+ stating that You changed the files; and
210
+
211
+ (c) You must retain, in the Source form of any Derivative Works
212
+ that You distribute, all copyright, patent, trademark, and
213
+ attribution notices from the Source form of the Work,
214
+ excluding those notices that do not pertain to any part of
215
+ the Derivative Works; and
216
+
217
+ (d) If the Work includes a "NOTICE" text file as part of its
218
+ distribution, then any Derivative Works that You distribute must
219
+ include a readable copy of the attribution notices contained
220
+ within such NOTICE file, excluding those notices that do not
221
+ pertain to any part of the Derivative Works, in at least one
222
+ of the following places: within a NOTICE text file distributed
223
+ as part of the Derivative Works; within the Source form or
224
+ documentation, if provided along with the Derivative Works; or,
225
+ within a display generated by the Derivative Works, if and
226
+ wherever such third-party notices normally appear. The contents
227
+ of the NOTICE file are for informational purposes only and
228
+ do not modify the License. You may add Your own attribution
229
+ notices within Derivative Works that You distribute, alongside
230
+ or as an addendum to the NOTICE text from the Work, provided
231
+ that such additional attribution notices cannot be construed
232
+ as modifying the License.
233
+
234
+ You may add Your own copyright statement to Your modifications and
235
+ may provide additional or different license terms and conditions
236
+ for use, reproduction, or distribution of Your modifications, or
237
+ for any such Derivative Works as a whole, provided Your use,
238
+ reproduction, and distribution of the Work otherwise complies with
239
+ the conditions stated in this License.
240
+
241
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
242
+ any Contribution intentionally submitted for inclusion in the Work
243
+ by You to the Licensor shall be under the terms and conditions of
244
+ this License, without any additional terms or conditions.
245
+ Notwithstanding the above, nothing herein shall supersede or modify
246
+ the terms of any separate license agreement you may have executed
247
+ with Licensor regarding such Contributions.
248
+
249
+ 6. Trademarks. This License does not grant permission to use the trade
250
+ names, trademarks, service marks, or product names of the Licensor,
251
+ except as required for reasonable and customary use in describing the
252
+ origin of the Work and reproducing the content of the NOTICE file.
253
+
254
+ 7. Disclaimer of Warranty. Unless required by applicable law or
255
+ agreed to in writing, Licensor provides the Work (and each
256
+ Contributor provides its Contributions) on an "AS IS" BASIS,
257
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
258
+ implied, including, without limitation, any warranties or conditions
259
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
260
+ PARTICULAR PURPOSE. You are solely responsible for determining the
261
+ appropriateness of using or redistributing the Work and assume any
262
+ risks associated with Your exercise of permissions under this License.
263
+
264
+ 8. Limitation of Liability. In no event and under no legal theory,
265
+ whether in tort (including negligence), contract, or otherwise,
266
+ unless required by applicable law (such as deliberate and grossly
267
+ negligent acts) or agreed to in writing, shall any Contributor be
268
+ liable to You for damages, including any direct, indirect, special,
269
+ incidental, or consequential damages of any character arising as a
270
+ result of this License or out of the use or inability to use the
271
+ Work (including but not limited to damages for loss of goodwill,
272
+ work stoppage, computer failure or malfunction, or any and all
273
+ other commercial damages or losses), even if such Contributor
274
+ has been advised of the possibility of such damages.
275
+
276
+ 9. Accepting Warranty or Additional Liability. While redistributing
277
+ the Work or Derivative Works thereof, You may choose to offer,
278
+ and charge a fee for, acceptance of support, warranty, indemnity,
279
+ or other liability obligations and/or rights consistent with this
280
+ License. However, in accepting such obligations, You may act only
281
+ on Your own behalf and on Your sole responsibility, not on behalf
282
+ of any other Contributor, and only if You agree to indemnify,
283
+ defend, and hold each Contributor harmless for any liability
284
+ incurred by, or claims asserted against, such Contributor by reason
285
+ of your accepting any such warranty or additional liability.
286
+
287
+ END OF TERMS AND CONDITIONS
288
+
289
+ APPENDIX: How to apply the Apache License to your work.
290
+
291
+ To apply the Apache License to your work, attach the following
292
+ boilerplate notice, with the fields enclosed by brackets "[]"
293
+ replaced with your own identifying information. (Don't include
294
+ the brackets!) The text should be enclosed in the appropriate
295
+ comment syntax for the file format. We also recommend that a
296
+ file or class name and description of purpose be included on the
297
+ same "printed page" as the copyright notice for easier
298
+ identification within third-party archives.
299
+
300
+ Copyright [yyyy] [name of copyright owner]
301
+
302
+ Licensed under the Apache License, Version 2.0 (the "License");
303
+ you may not use this file except in compliance with the License.
304
+ You may obtain a copy of the License at
305
+
306
+ http://www.apache.org/licenses/LICENSE-2.0
307
+
308
+ Unless required by applicable law or agreed to in writing, software
309
+ distributed under the License is distributed on an "AS IS" BASIS,
310
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
311
+ See the License for the specific language governing permissions and
312
+ limitations under the License.
313
+ ```
@@ -0,0 +1,7 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="会话互通">
2
+ <rect width="64" height="64" rx="14" fill="#e9edf9"/>
3
+ <g fill="none" stroke="#33499f" stroke-width="3.4" stroke-linecap="round" stroke-linejoin="round">
4
+ <path d="M21 16h11a5 5 0 0 1 5 5v5a5 5 0 0 1-5 5h-10l-6 5V21a5 5 0 0 1 5-5Z"/>
5
+ <path fill="#e9edf9" d="M31 26h12a5 5 0 0 1 5 5v16l-6-5H31a5 5 0 0 1-5-5v-6a5 5 0 0 1 5-5Z"/>
6
+ </g>
7
+ </svg>
@@ -0,0 +1,3 @@
1
+ - insert:
2
+ - id: session-link-runtime-0-8-18
3
+ name: '@wangmo-bit/ds-link'