dsh-dev-workbench 0.3.0 → 0.4.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.md CHANGED
@@ -1,10 +1,11 @@
1
1
  # 智能工作台 · DSH Dev Workbench
2
2
 
3
- DeepSeek Harness 原生插件,把消息跟进、研发任务、多 AI 对话、开发调试和知识检索放在同一个工作入口。复用 Harness 已配置的模型、会话和工具,从日常沟通中整理事项,带着工程与来源上下文继续处理,再把确认过的结论沉淀为知识。
3
+ DeepSeek Harness 原生插件,把 AI 助手、消息跟进、研发任务、多 AI 对话、开发调试和知识检索放在同一个工作入口。复用 Harness 已配置的模型、会话和工具,从日常沟通中整理事项,带着工程与来源上下文继续处理,再把确认过的结论沉淀为知识。
4
4
 
5
- - **办公跟进**:今日简报、待办与待回复、云之家连接、持续消息识别和日报周报。
5
+ - **AI 助手**:在统一会话中读取消息识别、资讯、知识和事项上下文,结合规则与 AI 处理操作,保留进度、结果及确认回执。
6
+ - **办公跟进**:今日简报、待办与待回复、云之家会话阅读、持续消息识别和日报周报。
6
7
  - **研发协作**:Linky 工作项、本地工程、专属 Harness 会话、测试与独立审查。
7
- - **分析与复用**:多 AI 统一提问、开发工具与数据查询、历史搜索和带来源的知识问答。
8
+ - **分析与复用**:多 AI 统一提问、开发工具与数据查询、全局本地搜索,以及按空间和项目隔离的本地知识检索。
8
9
 
9
10
  [源码仓库](https://github.com/LongerWu2026/dsh-dev-workbench) · [版本与下载](https://github.com/LongerWu2026/dsh-dev-workbench/releases) · [npm](https://www.npmjs.com/package/dsh-dev-workbench) · [问题反馈](https://github.com/LongerWu2026/dsh-dev-workbench/issues)
10
11
 
@@ -21,7 +22,7 @@ DeepSeek Harness 原生插件,把消息跟进、研发任务、多 AI 对话
21
22
  通过 npm 安装下列版本;若 registry 或镜像暂未同步,可使用下一节的 GitHub 预构建包。
22
23
 
23
24
  ```sh
24
- dsh plugin --profile desktop add dsh-dev-workbench@0.3.0
25
+ dsh plugin --profile desktop add dsh-dev-workbench@0.4.2
25
26
  ```
26
27
 
27
28
  将 `desktop` 替换为实际宿主使用的 profile。使用指定版本便于核对安装结果;桌面端也可使用应用自己的插件管理入口。
@@ -31,7 +32,7 @@ dsh plugin --profile desktop add dsh-dev-workbench@0.3.0
31
32
  从 [Releases](https://github.com/LongerWu2026/dsh-dev-workbench/releases) 下载 `dsh-dev-workbench-<版本>.tgz`,或直接安装:
32
33
 
33
34
  ```sh
34
- dsh plugin --profile desktop add https://github.com/LongerWu2026/dsh-dev-workbench/releases/download/v0.3.0/dsh-dev-workbench-0.3.0.tgz
35
+ dsh plugin --profile desktop add https://github.com/LongerWu2026/dsh-dev-workbench/releases/download/v0.4.2/dsh-dev-workbench-0.4.2.tgz
35
36
  ```
36
37
 
37
38
  升级后按宿主机制重载插件组件或重启 Harness,再打开侧栏「智能工作台」。只刷新页面不会重新注册新增 Host 接口;遇到 `/api/workbench/...` 返回 404,先重载插件组件。升级前建议备份工作台数据,位置见下文。
@@ -40,8 +41,9 @@ dsh plugin --profile desktop add https://github.com/LongerWu2026/dsh-dev-workben
40
41
 
41
42
  1. 打开「更多 → 连接与设置」,按需要配置连接器、项目和 AI。AI 主开关、自动登记及普通定时运行分别配置,新安装默认关闭;AI 使用宿主已配置模型及其用量。
42
43
  2. 需要消息跟进时,在云之家连接器中点击「安装」和「登录授权」,在官方浏览器页面完成授权,再点击「重新检测」。连接成功后开始同步和提取;无需为 CLI 安装再次重启 Harness。
43
- 3. 在「今日简报」查看待办、待回复、日程与 AI 动态;进入来源详情核对消息后处理。点一次提取可按每批最多 50 条持续执行,在状态栏查看剩余数量、失败或暂停原因。
44
- 4. 需要研发辅助时,进入「研发任务」连接 Linky,选择本人工作项和工程,再确认测试命令。需要多 AI 问答时,进入「多 AI 对话」,在各厂商内嵌官网完成登录并选择发送对象。
44
+ 3. 在「今日简报」查看待办、待回复、日程与 AI 动态;点击「刷新全部内容」同步消息、日历和资讯,待办与待回复也可单独刷新。打开进度查看各阶段、识别数量及失败原因;进入来源详情核对消息后处理。
45
+ 4. 打开顶部「AI 助手」,选择消息识别、AI 资讯、知识助手或已有工作会话。也可从单条待办、待回复或研发事项进入,继续对应上下文;添加资料和切换会话不会自动发送。
46
+ 5. 需要研发辅助时,进入「研发任务」连接 Linky,选择本人工作项和工程,再确认测试命令。需要多 AI 问答时,进入「多 AI 对话」,在各厂商内嵌官网完成登录并选择发送对象。
45
47
 
46
48
  各模块可独立使用;使用工具箱不要求先连接云之家或 Linky。窄窗口放不下的导航入口自动收进「更多」。
47
49
 
@@ -49,45 +51,73 @@ dsh plugin --profile desktop add https://github.com/LongerWu2026/dsh-dev-workben
49
51
 
50
52
  | 模块 | 可以做什么 |
51
53
  | --- | --- |
52
- | 今日简报 | 聚合待办与待回复、查看会议和提醒、关注 AI 动态、复制工作简报,持续查看提取进度 |
54
+ | 今日简报 | 聚合待办、待回复与日程,查看本轮资讯概览;全局或局部刷新并查看分步进度 |
55
+ | AI 助手 | 侧栏管理系统及事项会话,支持历史、附件、引用事项、规则/AI 指令卡片及真实执行回执 |
53
56
  | 研发任务 | 读取 Linky 本人需求、用户故事和缺陷,关联工程、原生工作区和开发会话,组织分析、开发、测试、独立审查与人工确认 |
54
- | 智能办公 | 批量准备回复草稿、生成日报周报和待办方案,保留产物与执行记录,按需开启忙碌自动回复 |
57
+ | 办公工具(AI 助手内) | 生成日报周报、批量回复草稿和待办方案,恢复既有产物,在聊天中查看自动回复设置 |
55
58
  | 任务中心与待回复 | 独立管理交付与回复责任,支持搜索、筛选、状态切换、来源回查和确认后回复 |
56
- | AI 资讯 | 使用宿主联网能力或可选 RSS 发现资讯,读取原文、生成摘要,按时间及关注主题组织 |
57
- | 知识空间 | 保存候选知识、人工审核、限定项目和账号范围,检索原文并显示版本、行号与引用 |
59
+ | AI 资讯 | 联网与 RSS 采集、读取原文、生成摘要和本轮概览,展开同批资讯或查看完整目录 |
60
+ | 知识空间 | 人工审核资料,按空间和项目隔离;关键词与可选本地语义检索,返回原文、版本、行号和引用 |
58
61
  | 多 AI 对话 | 同一问题发给选定厂商,逐轮切换查看回答,管理附件和本地历史,将选中回答保存为候选知识 |
59
- | 工作搜索 | 在工作台记录中查找任务、回复、资料与问答,回到对应内容继续处理 |
62
+ | 全局搜索 | 顶部搜索图标或 Cmd/Ctrl+K 查询已保存的待办、知识、资讯与消息,预览正文并回到原事项;快速查询不联网 |
60
63
  | 开发工具箱 | 数据连接、JSON、Diff、HTTP/MCP 调试、日志、SQL、正则、类型生成及常用转换工具 |
61
64
  | 研发协作 | 管理本地工程、启动命令,联动 VS Code、IDEA 和终端,查看运行日志 |
62
65
 
66
+ ### AI 助手与办公工具
67
+
68
+ 顶部「AI 助手」提供完整聊天页:消息识别、AI 资讯和知识助手有固定系统入口;待办、待回复、研发事项及自由对话按真实对象关联独立会话。会话支持搜索、置顶、历史选择及折叠,切换时保留各自草稿。打开、刷新或恢复历史只读取已有记录,首次发送或明确新建时才按需创建原生 Harness 会话。
69
+
70
+ - **上下文连续**:单条事项进入对应会话,默认恢复原绑定;展示事项来源、原生会话和工作区,研发主会话与审查会话分别管理。
71
+ - **结果可追溯**:消息识别和资讯时间线关联真实后台输入、结果、错误及持久作业;已提取的待办、待回复可以查看来源并回到原事项修正。
72
+ - **指令与确认**:明确、单一的常用操作优先由规则处理,其他请求交给 AI;卡片区分识别来源、执行结果和失败原因。发送回复、知识修改或删除等操作沿用目标预览和确认约束,重新理解指令不会重复执行旧操作。
73
+ - **附件与引用**:可选择、拖放或粘贴资料,发送前预览、移除或重试;引用事项最多 8 项。选择附件只更新草稿,点击发送后才通过当前原生会话上传。文件可读性和图片理解取决于宿主服务及模型能力,失败保留草稿。
74
+ - **办公主题**:从助手工具中选择日报、周报、批量回复草稿或待办方案;相同主题可恢复既有成果,查看和采纳草稿不会自动对外发送。原「智能办公」入口转入助手,旧记录保留。
75
+
76
+ 原生会话、附件和身份能力依赖宿主实际提供的服务;不可用时显示原因。升级后须重载插件 Host 和客户端,才能使用新增接口。详见[AI 助手介绍](docs/ASSISTANT-HUB-2026-11-01.md)、[附件与引用](docs/ASSISTANT-ATTACHMENTS-IDENTITY-2026-11-01.md)、[事项与原生会话绑定](docs/ASSISTANT-NATIVE-BINDING-2026-11-01.md)和[办公主题](docs/ASSISTANT-COMPACT-WORKSPACE-2026-11-01.md)。
77
+
63
78
  ### 消息提取、待办与回复
64
79
 
65
80
  消息按组织、账号、会话和原消息去重,保留来源及北京时间。聚焦未读消息、@本人、@全员及明确关联已有事项的跟进,普通已读聊天不会全量交给 AI。只采集和处理插件安装日期(北京时间)起的消息;升级、恢复与导入保留本机安装日期。
66
81
 
67
- 私聊未读先登记回复义务,识别为具体事项后转为待办;群消息需符合 @ 等处理规则。已读、确认收到和实际完成是不同状态,聊天不会自动完成或取消待办,人工确认字段受到保护。首页聚合存在明确关联的事项,完成待办和处理回复仍分别操作。
82
+ 私聊未读先进入收件箱和识别队列,AI 明确需要回复后才登记回复义务,具体业务事项生成待办;群消息需要结构化 @本人或 @全员,并经 AI 判断存在对应义务。已读、确认收到和实际完成是不同状态,聊天不会自动完成或取消待办,人工确认字段受到保护。首页聚合存在明确关联的事项,完成待办和处理回复仍分别操作。
68
83
 
69
84
  提取采用持久化队列:每批最多 50 条,点击一次持续处理,显示累计、剩余、失败及自动重试时间。临时失败按规则恢复,达到上限则明确暂停;重启恢复进度,成功内容不重复识别。普通自动同步在北京时间 **09:00–21:00 每五分钟**运行,包含 21:00;手动同步不受此时段限制。后台任务依赖 Harness 进程运行。
70
85
 
71
86
  人工回复先编辑、核对并确认发送,生成、保存和复制草稿不会发送消息。可选的「忙碌自动回复」默认关闭:主动开启后,仅对本次忙碌期间的新未读私聊发送一次告知,每个会话每周期最多一次;成功告知后仍保留人工答复义务。该模式在 Harness 运行期间额外每分钟检查,关闭停止新告知,账号变化后需重新启用。详见[消息分流规则](docs/MESSAGE-ROUTING-RULES-2026-10-29.md)、[连续识别](docs/CONTINUOUS-ANALYSIS-2026-10-30.md)和[忙碌回复](docs/BUSY-PRIVATE-REPLY-2026-10-31.md)。
72
87
 
88
+ 打开未读会话可在工作台阅读消息,上滚按批加载历史;完整展示未读后保存本地「工作台已读」。这不会清除云之家客户端红点,也不代表已回复或已完成待办。私聊本人真实答复可结清此前同轮问题,对方后续新问题仍独立保留;群聊仍要求明确引用原消息。详见[会话阅读](docs/CONVERSATION-READER-2026-11-02.md)、[回复分流](docs/REPLY-TRIAGE-2026-11-02.md)和[刷新说明](docs/WORKSPACE-REFRESH-2026-11-02.md)。
89
+
73
90
  ### Linky 研发任务
74
91
 
75
92
  - 登录后查看本人需求、用户故事与缺陷,按空间、类型、状态筛选,打开完整描述并继续已有研发过程。
76
93
  - 将工作项与本地工程、原生 Harness 工作区及专属会话关联。满足条件的干净 Git 根仓库可建立独立 worktree;普通目录或已有改动等情形使用所选目录,保留原有内容。
77
94
  - 确认工程与测试命令后启动分析、开发、真实测试和独立 AI 审查。测试未配置、执行失败或模型异常会暂停;可补充要求并继续原会话。
95
+ - 绑定研发主会话可查询、修改当前 Linky 工作项标题、描述和业务状态,按真实流转及必填字段提交并回读核对;业务状态与本地开发执行状态分别展示,未核实的操作不自动重放。详见[工作项修改](docs/DEVELOPMENT-ISSUE-EDITING-2026-11-02.md)。
78
96
  - 人工审查展示差异、测试退出码及审查意见。批准绑定当前代码内容,后续变化会使批准失效。批准与向 Linky 回写评论分别确认,评论回写不会代替代码提交、合并或发布。
79
97
  - npm 包包含 `harness-linky` CLI,可将 Linky 的 Codex 协议入口适配到官方 Harness ACP;配置及权限边界见[实施说明](docs/LINKY-DEVELOPMENT-IMPLEMENTATION-2026-10-31.md)。
80
98
 
81
99
  页面使用方式及工程选择见[研发任务说明](docs/DEVELOPMENT-UX-2026-10-31.md)。完整真实业务修复与回写仍需用户在实际工作项中验证,隔离测试不代表业务已完成。
82
100
 
101
+ ### 全局搜索
102
+
103
+ 点击顶部搜索图标或按 Cmd/Ctrl+K,在同一个弹窗中筛选并查找已保存的待办、知识、资讯和消息。可查看完整正文、打开原事项,或把当前结果交给对应助手会话继续处理。快速搜索只查本地记录,不把输入发送给企业 CLI 或互联网服务;联网搜索入口只预填可编辑指令,明确发送后才执行。详见[全局搜索说明](docs/GLOBAL-WORK-SEARCH-2026-11-03.md)。
104
+
83
105
  ### 多 AI 对话与历史
84
106
 
85
107
  内嵌 Kimi、智谱清言、豆包、元宝和千问,ChatGPT 可选。统一输入问题,选择发送厂商,每轮通过厂商标签查看回答;各厂商保持自己的官网会话,新厂商不会自动继承其他厂商的历史上下文。
86
108
 
109
+ 新增回答支持增量展示和 Markdown 排版,保留表格、代码语言及文件树结构;复制、导出和保存知识使用完整已采集正文。官网更新仍通过 DOM 观察获取,历史中已丢失的格式不会自动复原。各厂商的登录状态可单独检查,遇到登录或验证码由用户在官网完成。
110
+
87
111
  支持选择、粘贴和拖入图片或文档,发送前预览和移除。每次最多 5 个附件,单文件 10 MB、合计 20 MB;历史仅保留附件元数据,刷新后需重选原文件。回答可保存、搜索、重命名、归档或放入本地回收站,选中内容可加入候选知识。恢复采集只读取回答;仅明确未提交的厂商可由用户点击补发,提交结果不确定时不自动重发。
88
112
 
89
113
  登录、验证码、站点繁忙及附件格式受各厂商规则约束。**跨 Harness 重启的网页登录持久化需要另行适配宿主扩展,安装本插件不会自动修改桌面应用**;普通原版宿主不保证这一能力。详见[聊天与补发](docs/WEB-AI-CHAT-REDESIGN-2026-10-30.md)、[历史管理](docs/WEB-AI-LOCAL-HISTORY-2026-10-29.md)、[真实站点验证](docs/WEB-AI-LIVE-ACCEPTANCE-2026-10-30.md)及[可选 rc.5 宿主扩展](host-integration/rc5/README.md)。
90
114
 
115
+ ### 本地知识检索与范围隔离
116
+
117
+ 默认使用关键词检索;可在「知识空间 → 本地语义检索」中按需下载并启用本地模型。固定版本的 BGE-small-zh-v1.5 INT8 与 WASM 运行时合计约 47 MB,逐文件校验大小与 SHA-256,模型不捆绑进插件包。无需安装 Python 或 Ollama,下载完成后向量计算在本地 Worker 中执行,空闲时自动释放;模型未就绪或索引过多时回退关键词检索。
118
+
119
+ 当前项目检索同项目与同空间公共资料,其他空间、其他项目不会自动纳入;个人通用知识需明确允许跨空间复用。已确认且有效的资料可自动增量索引,原文回读校验资料版本和引用范围。这里的范围隔离用于个人本地工作台,不提供多人服务的成员权限认证。PDF、Word 和图片未解析时不会被当作已入库正文。详见[本地 RAG 与知识空间](docs/LOCAL-KNOWLEDGE-RAG-2026-11-02.md)。
120
+
91
121
  ### 开发工具与数据查询
92
122
 
93
123
  工具箱按工具展示输入和结果,可搜索、筛选并在当前页面保留切换前的输入。JSON 支持格式化、树形查看和路径复制;Diff 支持文本和 JSON 结构对比;HTTP 调试支持导入基础 cURL,导入本身不发送请求;另有 MCP Streamable HTTP 调试、日志筛选、正则、Cron、SQL 格式化、类型生成、YAML/CSV 转换等工具。AI 辅助需显式点击,沿用宿主助手。
@@ -100,7 +130,7 @@ dsh plugin --profile desktop add https://github.com/LongerWu2026/dsh-dev-workben
100
130
 
101
131
  回答和办公产物先保存为候选知识,经人工审核后参与默认检索。检索按项目、账号、有效期和归档状态过滤,默认采用本地中文分词、分块与 BM25 排序,回答携带实际使用的原文、版本及行号。可选远程 Embedding 需要 HTTPS,HTTP 仅允许本机回环地址;不安全地址会在发送凭据和正文前被阻断,并保留本地检索。
102
132
 
103
- 智能办公将工作记录组织为回复草稿、日报周报和待办方案,产物及执行状态可追踪。模型输出仍需人工核验,未命中资料时不会把未读取的链接当作依据。详见[知识检索与引用](docs/KNOWLEDGE-RETRIEVAL-IMPLEMENTATION-2026-10-28.md)及[办公流程](docs/AGENT-WORKFLOWS-IMPLEMENTATION-2026-10-28.md)。
133
+ AI 助手的办公工具将工作记录组织为回复草稿、日报周报和待办方案,产物及执行状态可追踪。模型输出仍需人工核验,未命中资料时不会把未读取的链接当作依据。详见[知识检索与引用](docs/KNOWLEDGE-RETRIEVAL-IMPLEMENTATION-2026-10-28.md)及[办公流程](docs/AGENT-WORKFLOWS-IMPLEMENTATION-2026-10-28.md)。
104
134
 
105
135
  ## 数据、权限与备份
106
136
 
@@ -112,15 +142,17 @@ dsh plugin --profile desktop add https://github.com/LongerWu2026/dsh-dev-workben
112
142
  | 业务状态备份 | `backups/` |
113
143
  | 数据连接非密码配置 | `data-connections.json` |
114
144
  | 研发配置、任务和适配器记录 | `development/` |
145
+ | 助手会话索引、事项绑定、操作与轮次回执 | `assistant-*.json` |
115
146
  | 托管云之家 CLI | `tools/yunzhijia/` |
147
+ | 本地语义模型、运行时与派生向量索引 | `knowledge-engine/` |
116
148
 
117
- 迁移工具提供预检、备份、关联检查、合并或替换。**现有业务导出不会包含独立的 `development/`,备份研发记录时须一并保存该目录。** 模型凭据、厂商登录状态和原生 Harness 会话另行管理。
149
+ 迁移工具提供预检、备份、关联检查、合并或替换。**现有业务导出不会包含独立的 `development/`,备份研发记录时须一并保存该目录。助手会话索引及回执保存在独立的 `assistant-*.json` 中,现有业务导出不包含这些文件;需要保留助手归属时也应一并备份。** 模型凭据、厂商登录状态和原生 Harness 会话另行管理。
118
150
 
119
151
  连接器需要对应账号授权;AI 请求使用宿主配置的模型;主动发送、开启忙碌告知、研发执行和回写均应按页面要求操作。源码和 npm 包不包含本机截图、原始观测日志或账号数据,相关验收材料保存在本地忽略目录中。
120
152
 
121
153
  ## 开发与验证
122
154
 
123
- 源码采用 TypeScript 和 React/TSX:`src/host.ts` 为 Host 入口,`src/client.ts` 为 Client 入口,`src/shared/` 维护共享契约,`src/cli/harness-linky.ts` 为 CLI 入口。构建生成 `index.js`、`client.js` 和 `bin/harness-linky.mjs`;不要直接编辑生成文件。模块职责见[源码导航](src/README.md)。
155
+ 源码采用 TypeScript 和 React/TSX:`src/host.ts` 为 Host 入口,`src/client.ts` 为 Client 入口,`src/shared/` 维护共享契约,`src/cli/harness-linky.ts` 为 CLI 入口。构建生成 `index.js`、`client.js`、`bin/harness-linky.mjs` 和 `bin/knowledge-embedding-worker.mjs`;不要直接编辑生成文件。模块职责见[源码导航](src/README.md)。
124
156
 
125
157
  ```sh
126
158
  pnpm install --frozen-lockfile
@@ -145,6 +177,7 @@ dsh plugin --profile desktop add .
145
177
 
146
178
  | 文档 | 内容 |
147
179
  | --- | --- |
180
+ | [AI 助手](docs/ASSISTANT-HUB-2026-11-01.md) | 统一入口、系统历史、事项会话和执行回执 |
148
181
  | [研发任务](docs/DEVELOPMENT-UX-2026-10-31.md) | Linky 工作项、工程、会话、测试和人工审查 |
149
182
  | [多 AI 对话](docs/WEB-AI-CHAT-REDESIGN-2026-10-30.md) | 聊天布局、逐厂商状态、附件与补发规则 |
150
183
  | [今日简报](docs/BRIEF-OVERVIEW-2026-10-30.md) | 待办与回复聚合、日程和资讯入口 |
@@ -230,3 +230,176 @@ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
230
230
  OTHER DEALINGS IN THE SOFTWARE.
231
231
 
232
232
  For more information, please refer to <http://unlicense.org>
233
+
234
+
235
+ Optional downloaded local embedding components (not bundled into client.js/index.js):
236
+ - Hugging Face Transformers.js 3.8.1: Apache-2.0, https://github.com/huggingface/transformers.js
237
+ - ONNX Runtime Web (WASM build distributed with Transformers.js): MIT, https://github.com/microsoft/onnxruntime
238
+ - BAAI/bge-small-zh-v1.5 and Xenova ONNX conversion: MIT, https://huggingface.co/BAAI/bge-small-zh-v1.5 and https://huggingface.co/Xenova/bge-small-zh-v1.5
239
+ Assets are downloaded from their official published locations at fixed versions and verified against SHA-256. The plugin's worker adapts the official browser build to a local-only filesystem transport; pretrained weights are not modified.
240
+
241
+
242
+ --- Multi AI Markdown rendering ---
243
+
244
+ Bundled component: markdown-it 15.0.3
245
+ License: MIT
246
+ Copyright (c) 2014 Vitaly Puzrin, Alex Kocharin.
247
+
248
+ Permission is hereby granted, free of charge, to any person
249
+ obtaining a copy of this software and associated documentation
250
+ files (the "Software"), to deal in the Software without
251
+ restriction, including without limitation the rights to use,
252
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
253
+ copies of the Software, and to permit persons to whom the
254
+ Software is furnished to do so, subject to the following
255
+ conditions:
256
+
257
+ The above copyright notice and this permission notice shall be
258
+ included in all copies or substantial portions of the Software.
259
+
260
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
261
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
262
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
263
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
264
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
265
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
266
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
267
+ OTHER DEALINGS IN THE SOFTWARE.
268
+
269
+
270
+ Bundled component: entities 8.1.0
271
+ License: BSD-2-Clause
272
+ Copyright (c) Felix Böhm
273
+ All rights reserved.
274
+
275
+ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
276
+
277
+ Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
278
+
279
+ Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
280
+
281
+ THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS,
282
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
283
+
284
+
285
+ Bundled component: linkify-it 6.1.0
286
+ License: MIT
287
+ Copyright (c) 2015 Vitaly Puzrin.
288
+
289
+ Permission is hereby granted, free of charge, to any person
290
+ obtaining a copy of this software and associated documentation
291
+ files (the "Software"), to deal in the Software without
292
+ restriction, including without limitation the rights to use,
293
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
294
+ copies of the Software, and to permit persons to whom the
295
+ Software is furnished to do so, subject to the following
296
+ conditions:
297
+
298
+ The above copyright notice and this permission notice shall be
299
+ included in all copies or substantial portions of the Software.
300
+
301
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
302
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
303
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
304
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
305
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
306
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
307
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
308
+ OTHER DEALINGS IN THE SOFTWARE.
309
+
310
+
311
+ Bundled component: mdurl 2.1.0
312
+ License: MIT
313
+ Copyright (c) 2015 Vitaly Puzrin, Alex Kocharin.
314
+
315
+ Permission is hereby granted, free of charge, to any person
316
+ obtaining a copy of this software and associated documentation
317
+ files (the "Software"), to deal in the Software without
318
+ restriction, including without limitation the rights to use,
319
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
320
+ copies of the Software, and to permit persons to whom the
321
+ Software is furnished to do so, subject to the following
322
+ conditions:
323
+
324
+ The above copyright notice and this permission notice shall be
325
+ included in all copies or substantial portions of the Software.
326
+
327
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
328
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
329
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
330
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
331
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
332
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
333
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
334
+ OTHER DEALINGS IN THE SOFTWARE.
335
+
336
+ --------------------------------------------------------------------------------
337
+
338
+ .parse() is based on Joyent's node.js `url` code:
339
+
340
+ Copyright Joyent, Inc. and other Node contributors. All rights reserved.
341
+ Permission is hereby granted, free of charge, to any person obtaining a copy
342
+ of this software and associated documentation files (the "Software"), to
343
+ deal in the Software without restriction, including without limitation the
344
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
345
+ sell copies of the Software, and to permit persons to whom the Software is
346
+ furnished to do so, subject to the following conditions:
347
+
348
+ The above copyright notice and this permission notice shall be included in
349
+ all copies or substantial portions of the Software.
350
+
351
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
352
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
353
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
354
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
355
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
356
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
357
+ IN THE SOFTWARE.
358
+
359
+
360
+ Bundled component: punycode.js 2.3.1
361
+ License: MIT
362
+ Copyright Mathias Bynens <https://mathiasbynens.be/>
363
+
364
+ Permission is hereby granted, free of charge, to any person obtaining
365
+ a copy of this software and associated documentation files (the
366
+ "Software"), to deal in the Software without restriction, including
367
+ without limitation the rights to use, copy, modify, merge, publish,
368
+ distribute, sublicense, and/or sell copies of the Software, and to
369
+ permit persons to whom the Software is furnished to do so, subject to
370
+ the following conditions:
371
+
372
+ The above copyright notice and this permission notice shall be
373
+ included in all copies or substantial portions of the Software.
374
+
375
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
376
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
377
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
378
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
379
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
380
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
381
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
382
+
383
+
384
+ Bundled component: uc.micro 3.0.0
385
+ License: MIT
386
+ Copyright Mathias Bynens <https://mathiasbynens.be/>
387
+
388
+ Permission is hereby granted, free of charge, to any person obtaining
389
+ a copy of this software and associated documentation files (the
390
+ "Software"), to deal in the Software without restriction, including
391
+ without limitation the rights to use, copy, modify, merge, publish,
392
+ distribute, sublicense, and/or sell copies of the Software, and to
393
+ permit persons to whom the Software is furnished to do so, subject to
394
+ the following conditions:
395
+
396
+ The above copyright notice and this permission notice shall be
397
+ included in all copies or substantial portions of the Software.
398
+
399
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
400
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
401
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
402
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
403
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
404
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
405
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,48 @@
1
+ // src/host/knowledge/embedding-worker.ts
2
+ import { parentPort, workerData } from "node:worker_threads";
3
+ import { readFile } from "node:fs/promises";
4
+ import { resolve, sep } from "node:path";
5
+ import { fileURLToPath, pathToFileURL } from "node:url";
6
+ var root = resolve(workerData.root);
7
+ var port = parentPort;
8
+ var pipeline;
9
+ async function initialize() {
10
+ const nodeProcess = globalThis.process;
11
+ Object.assign(globalThis, { self: globalThis, location: { href: pathToFileURL(resolve(root, "runtime/transformers.min.js")).href } });
12
+ let lib;
13
+ try {
14
+ globalThis.process = void 0;
15
+ lib = await import(pathToFileURL(resolve(root, "runtime/transformers.min.js")).href);
16
+ } finally {
17
+ globalThis.process = nodeProcess;
18
+ }
19
+ lib.env.allowRemoteModels = false;
20
+ lib.env.allowLocalModels = true;
21
+ lib.env.useBrowserCache = false;
22
+ lib.env.useFSCache = false;
23
+ lib.env.localModelPath = "http://workbench-model.local/";
24
+ Object.assign(lib.env.backends.onnx.wasm, { numThreads: 1, proxy: false, wasmPaths: pathToFileURL(resolve(root, "runtime") + sep).href });
25
+ globalThis.fetch = async (input) => {
26
+ const url = String(input), local = url.startsWith("http://workbench-model.local/") ? resolve(root, "models", decodeURIComponent(new URL(url).pathname).slice(1)) : url.startsWith("file:") ? fileURLToPath(url) : "";
27
+ if (!local || !resolve(local).startsWith(root + sep)) throw Error("本地向量运行时拒绝外部请求");
28
+ try {
29
+ return new Response(new Uint8Array(await readFile(local)));
30
+ } catch {
31
+ return new Response("", { status: 404 });
32
+ }
33
+ };
34
+ pipeline = await lib.pipeline("feature-extraction", "bge-small-zh", { device: "wasm", dtype: "q8" });
35
+ }
36
+ var ready = initialize();
37
+ port.on("message", async (message) => {
38
+ try {
39
+ await ready;
40
+ if (!Array.isArray(message.texts) || message.texts.length > 8 || message.texts.some((text) => typeof text !== "string" || text.length > 8e3)) throw Error("向量输入超过批次限制");
41
+ const texts = message.texts.map((text) => message.query ? "为这个句子生成表示以用于检索相关文章:" + text : text);
42
+ const output = await pipeline(texts, { pooling: "cls", normalize: true, truncation: true, max_length: 512 });
43
+ port.postMessage({ id: message.id, vectors: output.tolist(), rss: process.memoryUsage().rss });
44
+ } catch (error) {
45
+ port.postMessage({ id: message.id, error: String(error.message || error).slice(0, 300) });
46
+ }
47
+ });
48
+ ready.catch((error) => port.postMessage({ fatal: String(error.message || error).slice(0, 300) }));