🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

电子爱 eleckoi/ElecKoi

DeepSeek Harness
eleckoi4 天前有提交已提供中文文档扫描:高危

电子爱PC客户端,由DSH驱动的Agent角色扮演!

55.9/100
综合分
73
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查未通过:缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add eleckoi/ElecKoi
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · market
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 4 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/20) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包eleckoi-workspace(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖要求 0.2.1-rc.5 · 最新 0.2.1-rc.5 兼容
✗入口文件缺少入口声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/2 17:39:14

🔴 安全扫描发现高危能力自动 · 静态分析源码
v2.7.0
🔴 扫描:高危尚无人工评估

静态扫描发现安装期即执行代码,或命令参数由运行时变量拼接(参数来源无法静态判定,从严处理)。

安装时即执行脚本可执行外部命令读写/删除本地文件
查看扫描证据(共 28 处,展示前 28 条)
  • 读取本地文件
    apps/android-host/src/androidPluginBundles.ts:21
    if (!existsSync(resourceMarker)) {
  • 读取本地文件
    apps/android-host/src/androidPluginBundles.ts:25
    if (!existsSync(join(profileDirectory, '.eleckoi-android-frontend-bundles-v1')) && !resources.includes(HTML_RESOURCES_BUNDLE)) {
  • 写入本地文件
    apps/android-host/src/androidPluginBundles.ts:31
    writeFileSync(resourceMarker, 'initialized\n', { flag: 'wx' })
  • 读取本地文件
    apps/android-host/src/androidPluginBundles.ts:35
    if (existsSync(marker)) continue
  • 写入本地文件
    apps/android-host/src/androidPluginBundles.ts:45
    writeFileSync(marker, 'initialized\n', { flag: 'wx' })
  • 读取本地文件
    apps/android-host/src/androidPluginRecovery.ts:19
    const selected = existsSync(join(profile, 'package.json')) ? readProfileManifest('eleckoi', profile).dsh?.profile?.bundles ?? [] : []
  • 读取本地文件
    apps/android-host/src/pluginHostConfiguration.ts:39
    const value: unknown = JSON.parse(readFileSync(configPath, 'utf8'))
  • 读取本地文件
    apps/android-host/src/pluginHostConfiguration.ts:77
    if (!existsSync(file)) {
  • 读取本地文件
    apps/android-host/src/pluginHostConfiguration.ts:81
    const runtime = JSON.parse(readFileSync(join(resourceRoot, 'runtime-manifest.json'), 'utf8'))
  • 写入本地文件
    apps/android-host/src/pluginHostConfiguration.ts:95
    paths.productMediaRoot, dirname(paths.productDatabasePath), sessionRoot]) mkdirSync(directory, { recursive: true })
  • 写入本地文件
    apps/android-host/src/pluginHostConfiguration.ts:100
    writeFileSync(overlayPath, [
  • 读取本地文件
    apps/android-host/src/productMediaAssets.ts:27
    if (!path || !existsSync(path) || !statSync(path).isFile()) { response.writeHead(404); response.end('Media resource does not exist'); return }
  • 读取本地文件
    apps/android-host/src/productMediaAssets.ts:27
    if (!path || !existsSync(path) || !statSync(path).isFile()) { response.writeHead(404); response.end('Media resource does not exist'); return }
  • 读取本地文件
    apps/android-host/src/productMediaAssets.ts:28
    const size = statSync(path).size, headers: Record<string, string | number> = { 'Content-Type': mime[extname(path).toLowerCase()] ?? 'application/octet
  • 读取本地文件
    apps/android-host/src/productMediaAssets.ts:41
    const stream = createReadStream(path, { start, end }); stream.on('error', error => response.destroy(error)); stream.pipe(response)
  • 读取本地文件
    apps/android-host/src/webClientAssets.ts:21
    const html = await readFile(resolve(directory, 'dsh.html'), 'utf8')
  • 读取本地文件
    apps/android-host/src/webClientAssets.ts:29
    await Promise.all([readFile(resolve(root, script)), readFile(resolve(root, style))])
  • 读取本地文件
    apps/android-host/src/webClientAssets.ts:47
    try { content = await readFile(target) }
  • 读取本地文件
    apps/desktop-host/src/desktopPluginBundles.ts:37
    if (existsSync(marker)) return
  • 读取本地文件
    apps/desktop-host/src/desktopPluginBundles.ts:41
    const bundles = (existsSync(join(profile, '.eleckoi-desktop-bundles-v8')) || existsSync(join(profile, '.eleckoi-desktop-bundles-v7')))
  • 写入本地文件
    apps/desktop-host/src/desktopPluginBundles.ts:45
    writeFileSync(marker, 'initialized\n', { flag: 'wx' })
  • 读取本地文件
    apps/desktop-host/src/desktopPluginHost.ts:31
    if (existsSync(marker)) return
  • 写入本地文件
    apps/desktop-host/src/desktopPluginHost.ts:35
    writeFileSync(marker, 'initialized\n', { flag: 'wx' })
  • 写入本地文件
    apps/desktop-host/src/desktopPluginHost.ts:105
    writeFileSync(overlayPath, [
  • 执行外部命令来自配置/变量
    apps/desktop-host/src/desktopPluginHost.ts:124
    const child = spawn(this.options.executablePath, [
  • 读取本地文件
    apps/desktop-host/src/desktopPluginHost.ts:239
    const selected = existsSync(join(profile, 'package.json')) ? readProfileManifest('eleckoi', profile).dsh?.profile?.bundles ?? [] : []
  • 写入本地文件
    native/android-runtime/android-attachment-storage.mjs:23
    await copyFile(source, temporary, constants.COPYFILE_EXCL)
  • 删除本地文件
    native/android-runtime/android-attachment-storage.mjs:28
    await unlink(temporary).catch(error => { if (error.code !== 'ENOENT') throw error })
扫描于 2026/11/2(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/cordis-plugin-group@deepseek-ai/cordis-plugin-hmr@deepseek-ai/cordis-plugin-include@deepseek-ai/cordis-plugin-loader@deepseek-ai/cordis-plugin-timer@deepseek-ai/cosmokit@deepseek-ai/dsh@deepseek-ai/dsh-acp@deepseek-ai/dsh-acp-app@deepseek-ai/dsh-agent@deepseek-ai/dsh-agent-default-model
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

3 张 · 点击查看大图

README

由 DeepSeek 最新模型翻译生成
电子爱 电子爱是一款免费开源的智能体角色扮演和角色卡创作软件,由 DeepSeek Harness(DSH) 驱动,支持 Windows PC 和 Android。你可以与 AI 角色聊天、体验故事,也可以创建和编辑自己的角色卡,让 AI 帮你完善角色设定。 作者 SDK 文档包含原生脚本、角色前端的开发教程、接口参考和可导入示例。 核心亮点 像 vibe coding 一样创作角色。 你只需要说出想法,剩下那些曾经最繁琐的写卡工作,可以交给智能体和工具一步步完成。 - 会自己查设定的角色智能体:DSH 让角色拥有真正的智能体能力。它会像查资料一样主动搜索设定库,只读取当前剧情需要的内容,再调用变量、联网和其他工具继续演绎。 - 从手工写卡到智能体创作:创作智能体可以搭建和修改角色、设定库、变量、正则与形象素材;所有修改先预览、校验,再由创作者决定是否保存。 - 用工具调用稳定更新变量:智能体不在回复里输出特定的变量更新格式,而是调用专用工具读取、校验并更新关系、物品、事件和世界状态。每类工具都有明确的数据格式和操作规范,减少模型输出漂移,让状态演进更稳定、可追踪;角色还可以带有自己的 HTML、CSS、JavaScript 和素材,把状态呈现为可交互的演绎界面。 电子爱想建立一个持续进化的创作飞轮:把社区积累的角色设计知识、模板和方法变成智能体可以检索和复用的能力。
展开完整文档(README 剩余 1 节)
电子爱

电子爱是一款免费开源的智能体角色扮演和角色卡创作软件,由 DeepSeek Harness(DSH) 驱动,支持 Windows PC 和 Android。你可以与 AI 角色聊天、体验故事,也可以创建和编辑自己的角色卡,让 AI 帮你完善角色设定。

作者 SDK 文档包含原生脚本、角色前端的开发教程、接口参考和可导入示例。

核心亮点

像 vibe coding 一样创作角色。 你只需要说出想法,剩下那些曾经最繁琐的写卡工作,可以交给智能体和工具一步步完成。

- 会自己查设定的角色智能体:DSH 让角色拥有真正的智能体能力。它会像查资料一样主动搜索设定库,只读取当前剧情需要的内容,再调用变量、联网和其他工具继续演绎。
- 从手工写卡到智能体创作:创作智能体可以搭建和修改角色、设定库、变量、正则与形象素材;所有修改先预览、校验,再由创作者决定是否保存。
- 用工具调用稳定更新变量:智能体不在回复里输出特定的变量更新格式,而是调用专用工具读取、校验并更新关系、物品、事件和世界状态。每类工具都有明确的数据格式和操作规范,减少模型输出漂移,让状态演进更稳定、可追踪;角色还可以带有自己的 HTML、CSS、JavaScript 和素材,把状态呈现为可交互的演绎界面。

电子爱想建立一个持续进化的创作飞轮:把社区积累的角色设计知识、模板和方法变成智能体可以检索和复用的能力。知识越丰富,智能体越会创作;创作出的作品与经验,又能继续推动整个社区向前发展。

应用截图

电子爱 Windows 版角色对话界面

电子爱 Windows 版角色卡列表

电子爱 Windows 版角色卡编写

接下来的开发目标

这里只展示未来要完成的任务,不代表当前已经实现的功能。

- [ ] 完善角色作品的前端扩展 API,为创作智能体和角色卡提供更丰富的界面、交互与玩法能力。
- [ ] 完善 DSH 插件管理与 MCP 接入,提供统一的配置、权限和运行状态管理。
- [ ] 持续完善 Windows 与 Android 客户端,逐步对齐跨平台的角色创作与演绎体验。
- [ ] 完善生图能力,扩展模型接入、参数控制、编辑和连续创作流程。

当前开发难题

项目当前需要着重思考的公开课题,将持续整理在 AI 角色扮演开发难题。

QQ 群

1041463229

为什么做电子爱

电子爱不只是一个 AI 聊天软件。

我希望「AI 角色扮演设计师」能够成为一种真正被看见、被尊重,也能够获得合法收入的新兴职业。优秀的角色作品也应该像小说、游戏和影视作品一样被认真创作、被人记住,让创作者有机会依靠自己的热爱与能力一直走下去。

电子爱的最终目标,就是加速这一职业的诞生与普及。我们会从免费开源的客户端、智能体创作工具、角色作品的表现能力和创作者生态开始,一步一步把这条路铺出来。无论这个未来还要多久才会到来,电子爱都会先迈出这一步,并始终朝着这个目标走下去。

我们想给所有喜欢 AI 角色扮演的人带来的,不只是一款更好用的软件,而是一条过去并不存在的路。在就业环境充满挑战的今天,让热爱角色、擅长创作的人,多一种值得认真选择的人生可能。

电子爱探索的不只是 AI 角色对话,也包括由 AI 驱动的游戏、互动叙事以及更多尚未被定义的创作形式。如今一些重前端的角色卡已经显现出这种可能:角色不再只是简单的对话,也可以成为界面精美的模拟器游戏,让人亲自经历各种有趣的故事,甚至把曾经只能存在于幻想中的世界,变成可以自由探索的开放世界。电子爱希望和创作者一起,把这些雏形继续发展成更丰富的作品。

电子爱想为这件事提供一套长期开放的工具,也希望聚集同样相信这件事的人。一个人能够做到的事情很有限;如果未来项目拥有收入,我希望能够邀请真正有能力的开发者、设计师和创作者加入,给予他们应得的报酬,一起把这个项目做得更好、更久。

我承诺:电子爱官方发布的 Windows 与 Android 客户端将一直保持免费开源,不会转为闭源产品。官方客户端不内置任何付费功能,不内置推荐任何 API 中转站;用户自主选择并配置自己信任的模型服务。

如果项目未来获得持续收入,目前设想的主要方向是建立面向 AI 角色创作生态的资源与服务平台,帮助创作者展示、发布和交易角色作品、OC 定制、美术素材、界面设计、插件与扩展及其他创作内容与服务,并持续维护自己的作品。平台未来可能通过公开透明的平台服务、赞助或捐赠获得收入,用于基础设施、支付协作者报酬、组建专业团队以及项目长期维护。具体规则将在相关服务上线前公开说明。

我不认为开源必须以开发者和创作者无法获得回报为代价。我希望电子爱最终形成的是一个良性循环:核心工具自由开放,创作者自主决定作品的授权和价格,项目也能获得足以持续开发的资源。

内容边界

电子爱是一个开源、本地运行的客户端。项目方不提供模型服务,也没有接收用户本地角色卡、设定或聊天记录的数据后台,无法也不会获取这些隐私数据;用户连接的模型服务由用户自己选择。
未来如果上线设计资源与服务平台,平台将只面向合法合规的设计资源与创作服务,并对平台上公开发布或交易的内容依法管理。

生态兼容与致谢

感谢下列开源项目与创作者对 AI 智能体和角色扮演生态所做的探索:

- 特别感谢 DeepSeek Harness(DSH) 提供智能体执行框架。电子爱基于 DSH 构建智能体运行时,并在其上连接角色会话、创作工具、权限审批、子代理,以及 Windows 与 Android 运行环境。DSH 及其上游代码继续遵守 MIT 许可证和各自的第三方许可。
- 感谢 SillyTavern 推动角色卡、预设、世界书、正则和富内容创作生态的发展。电子爱对其中部分内容格式和创作习惯提供选择性兼容,但不以复刻其前端、扩展运行环境或全部体系行为为目标。
- 感谢 Tavern-Helper 及 MVU 内容生态推动变量驱动角色扮演的实践。电子爱延续了「状态能够参与叙事」的创作方向,并以自己的层级数据模型、智能体工具、补丁协议、Zod 校验、消息快照和事务提交机制实现。
- 感谢 EJS 建立的模板语法与创作生态。电子爱使用精确锁定的 EJS 运行库计算正则替换和设定中的模板;上游 MIT 许可证随应用保留。

实际随包分发的第三方代码、二进制文件和素材及其许可证,以 NOTICE 和各级许可文件中的记录为准。

希望与怎样的人合作

我欢迎认同下列方向的开发者、AI 角色扮演设计师、视觉与交互设计师、文档作者和社区建设者与我合作:

- 认同核心工具应当保持免费开源;
- 尊重原作者、兼容对象与事实上的技术脉络;
- 认同角色设计师有权决定自己原创作品的授权方式,并可以从中获得合法回报;
- 认同 AI 角色扮演应合法合规,并愿意共同守住法律底线、不侵犯他人权益;
- 愿意在开源、创作者权益和可持续维护之间建立长期的良性循环。

如果你也想让 AI 角色卡设计成为一种更完整、更合规、也更能持续发展的创作工作,欢迎通过 Issue、Discussion 或 Pull Request 参与电子爱。

项目方向与贡献约定

电子爱官方 Windows 与 Android 客户端将持续免费开源。项目未来可能与独立的 AI 角色创作资源与服务平台有联系,平台将通过服务、赞助或捐赠支持长期开发和支付协作者报酬,这是必须履行的义务与职责。

关于项目方向的共同认知

参与 ElecKoi 的长期协作,意味着我们认可 README 中已经公开说明的基本发展方向:核心客户端持续保持免费开源,尊重开源项目、原作者与创作者的权利,在合法合规的前提下发展 AI 角色创作生态,并努力在开放协作、创作者收益和项目长期维护之间建立可持续的良性循环。

参与贡献不代表贡献者放弃自己代码或作品的版权,也不意味着必须无条件接受未来所有方向变化。若项目在开源模式、商业模式、用户数据边界、创作者权益或其他重大原则上发生实质性调整,应当尽可能提前公开说明并与贡献者沟通,使现有和未来的参与者都能够在充分知情的情况下决定是否继续协作。

贡献者保留自己贡献的版权,代码继续按照 AGPL-3.0-or-later 提供。普通的 Issue 或 Pull Request 不构成版权转让,也不会赋予项目方将贡献改为闭源代码的权利。未来的资源网站或平台服务也不会因此取得贡献者代码、作品或其他内容的额外权利。

如果你对这一方向有疑问,请先通过 Issue 或 Discussion 沟通。我不希望任何人在付出劳动后,才发现项目的发展方向与自己的价值判断不同。

构建

pnpm install --frozen-lockfile
pnpm build

本地开发运行使用 pnpm dev;构建 Windows x64 安装包使用 pnpm build:win。本仓库包含 Electron、React、TypeScript 桌面端源码,以及 Windows 原生适配和本地 Runtime 所需文件。Android 版的构建说明请参阅 ElecKoi-app。

开源许可证

除另有标注的第三方组件外,ElecKoi 源码采用 GNU Affero General Public License v3.0 or later(AGPL-3.0-or-later)。第三方组件继续遵守各自许可证,详见 NOTICE 和各级许可文件。
预览分享卡片长什么样 ↓eleckoi/ElecKoi
分享 · DeepSeek Harness Hub
eleckoi/ElecKoi

电子爱PC客户端,由DSH驱动的Agent角色扮演!

回到顶部