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

外贸获客 SDR Xuxchloris/Alex-

DeepSeek Harness
Xuxchloris34 天前有提交已提供中文文档扫描:含敏感能力

DeepSeek Harness 的 SDR 数字员工插件:九阶段外贸获客…

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · platform
装得上吗
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 34 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

缺少 main/exports/bin 入口声明;engines.node 要求 >=24.5.0,不满足 Node 22.19.0;仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

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

✗npm 包alex-trade-assistant(未发布到 npm,仅可源码安装)
✗Node 引擎要求 >=24.5.0 · 基线 Node 22.19 不满足
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明

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

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/29 22:40:21

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 48 处,展示前 45 条)
  • 写入本地文件
    apps/alex/runtime.mjs:29
    chmodSync(path, 0o600);
  • 执行外部命令固定命令
    apps/alex/runtime.mjs:31
    const child = spawn('flock', ['--no-fork', '--exclusive', '--nonblock', '--conflict-exit-code', '73', path, process.execPath, '--input-type=module', '
  • 读取本地文件
    apps/alex/server.mjs:14
    const version = JSON.parse(readFileSync(join(root, 'package.json'), 'utf8')).version;
  • 读取本地文件
    apps/alex/server.mjs:30
    if (!existsSync(directory)) return [];
  • 读取本地文件
    apps/alex/server.mjs:31
    return readdirSync(directory, { withFileTypes: true }).filter(entry => entry.isDirectory()).flatMap(entry => {
  • 读取本地文件
    apps/alex/server.mjs:34
    const manifest = JSON.parse(readFileSync(path, 'utf8'));
  • 写入本地文件
    apps/alex/server.mjs:57
    mkdirSync(dataDir, { recursive: true, mode: 0o700 });
  • 读取密钥环境变量
    apps/alex/server.mjs:62
    let token = options.token || process.env.ALEX_API_TOKEN;
  • 读取本地文件
    apps/alex/server.mjs:64
    if (existsSync(tokenFile)) token = readFileSync(tokenFile, 'utf8').trim();
  • 读取本地文件
    apps/alex/server.mjs:64
    if (existsSync(tokenFile)) token = readFileSync(tokenFile, 'utf8').trim();
  • 写入本地文件
    apps/alex/server.mjs:67
    writeFileSync(tokenFile, token, { mode: 0o600, flag: 'wx' });
  • 读取密钥环境变量
    apps/alex/server.mjs:81
    model: process.env.ALEX_LLM_MODEL || 'deepseek-chat', apiKey: process.env.ALEX_LLM_API_KEY || '',
  • 写入本地文件
    packages/alex-core/index.mjs:85
    if (path !== ':memory:') mkdirSync(dirname(resolve(path)), { recursive: true, mode: 0o700 });
  • 写入本地文件
    packages/alex-core/index.mjs:87
    if (path !== ':memory:') chmodSync(path, 0o600);
  • 写入本地文件
    packages/alex-core/index.mjs:377
    await mkdir(destination, { recursive: true, mode: 0o700 });
  • 写入本地文件
    packages/alex-core/index.mjs:381
    await chmod(databasePath, 0o600);
  • 读取本地文件
    packages/alex-core/index.mjs:392
    const manifest = { schemaVersion: 1, createdAt, workspaceId: this.workspaceId, database: { file, sha256: hash(await readFile(databasePath)) }, counts,
  • 写入本地文件
    packages/alex-core/index.mjs:393
    await writeFile(join(destination, 'manifest.json'), `${JSON.stringify(manifest, null, 2)}\n`, { flag: 'wx', mode: 0o600 });
  • 读取本地文件
    packages/dsh-sdr/lib/domain.js:206
    return { ...clone(DEFAULT_STATE), ...(JSON.parse(await readFile(this.#path, "utf8")) || {}) };
  • 写入本地文件
    packages/dsh-sdr/lib/domain.js:214
    await mkdir(dirname(this.#path), { recursive: true });
  • 写入本地文件
    packages/dsh-sdr/lib/domain.js:216
    await writeFile(temporary, `${JSON.stringify(value, null, 2)}\n`, "utf8");
  • 写入本地文件
    packages/dsh-sdr/lib/domain.js:217
    await rename(temporary, this.#path);
  • 读取本地文件
    packages/dsh-sdr/lib/index.js:23
    return JSON.parse(await readFile(join(path, ".dsh-sdr-managed.json"), "utf8"));
  • 读取本地文件
    packages/dsh-sdr/lib/index.js:34
    await stat(destination);
  • 写入本地文件
    packages/dsh-sdr/lib/index.js:43
    await mkdir(destination, { recursive: true });
  • 写入本地文件
    packages/dsh-sdr/lib/index.js:44
    await copyFile(join(SOURCE_PRESET, "agent.cordis.yml"), join(destination, "agent.cordis.yml"));
  • 写入本地文件
    packages/dsh-sdr/lib/index.js:45
    await copyFile(join(SOURCE_PRESET, "preset.yml"), join(destination, "preset.yml"));
  • 写入本地文件
    packages/dsh-sdr/lib/index.js:46
    await writeFile(join(destination, ".dsh-sdr-managed.json"), `${JSON.stringify({ managedBy: PACKAGE_NAME, package: PACKAGE_NAME, version: VERSION }, nu
  • 请求外部主机dns.google
    services/alex-browser/index.mjs:129
    const response = await fetch(`https://dns.google/resolve?name=${encodeURIComponent(host)}&type=${type}`, { signal: AbortSignal.timeout(8000), redirect
  • 发起网络请求
    services/alex-browser/index.mjs:129
    const response = await fetch(`https://dns.google/resolve?name=${encodeURIComponent(host)}&type=${type}`, { signal: AbortSignal.timeout(8000), redirect
  • 写入本地文件
    services/alex-browser/index.mjs:158
    } else { await mkdir(this.dataDir, { recursive: true }); }
  • 发起网络请求
    services/alex-browser/index.mjs:170
    const request = route.request();
  • 发起网络请求
    services/alex-browser/index.mjs:189
    const response = fetchedResponse = await route.fetch({ url: safeUrl, maxRedirects: 0, timeout: 20000 });
  • 发起网络请求
    services/alex-browser/index.mjs:208
    const request = response.request();
  • 删除本地文件递归
    services/alex-browser/index.mjs:382
    await rm(this.dataDir, { recursive: true, force: true });
  • 读取本地文件
    services/alex-mcp/client.mjs:53
    if ((await stat(path)).size > 4096) throw new AlexGatewayError('invalid_token_file', 'The Alex token file is too large.');
  • 读取本地文件
    services/alex-mcp/client.mjs:54
    value = (await readFile(path, 'utf8')).trim();
  • 发起网络请求
    services/alex-mcp/client.mjs:84
    const request = (origin.protocol === 'https:' ? https : http).request({
  • 发起网络请求
    services/alex-mcp/tools.mjs:70
    return name === 'alex_task_get' ? client.request('GET', path, undefined, { signal })
  • 发起网络请求
    services/alex-mcp/tools.mjs:71
    : client.request('POST', `${path}/${name.slice('alex_task_'.length)}`, {}, { signal });
  • 发起网络请求
    services/alex-mcp/tools.mjs:73
    if (name === 'alex_memory_search') return client.request('GET', `/api/memories?${new URLSearchParams({ query: args.query || '' })}`, undefined, { sign
  • 发起网络请求
    services/alex-mcp/tools.mjs:76
    return client.request('GET', `/api/companies?${query}`, undefined, { signal });
  • 发起网络请求
    services/alex-mcp/tools.mjs:79
    const company = await client.request('GET', `/api/companies/${encodeURIComponent(args.companyId)}`, undefined, { signal });
  • 发起网络请求
    services/alex-mcp/tools.mjs:89
    return client.request(method, path, method === 'POST' ? args : undefined, { authenticated: name !== 'alex_health', signal });
  • 发起网络请求
    services/alex-research/index.mjs:139
    response = await fetch(endpoint, {
扫描于 2026/11/2(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库
涉及外部主机:dns.google

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 九阶段获客SOP
  • 人工审批
  • 客户去重
展开完整介绍(84 字)↓

DeepSeek Harness 的 SDR 数字员工插件:九阶段外贸获客 SOP、结构性人工审批、客户去重、持久化知识检索与审计日志,默认 dry-run 安全演示。

README

由 DeepSeek 最新模型翻译生成
Alex · 智能外贸助手 Alex 是一个可持续迭代的外贸智能体工作台:了解用户的企业和产品,保存长期业务记忆,使用真实浏览器发现和核验客户,留下客户档案、来源证据和任务进度,下次继续时读回历史并查重。 产品、市场和客户类型由用户决定。首次交流收集缺失信息,后续任务读取已存资料;一次任务的临时要求留在该任务里,不自动变成长期偏好。 当前版本 - 本地工作台:企业资料、长期记忆、任务、客户、证据、开发信草稿和人工复核。 - SQLite 持久保存、任务恢复检查点、可靠身份查重;归档客户仍参与查重。 - Chromium 共享会话:智能体导航和研究,用户查看实际画面并接管;接管期间智能体操作被阻止。 - 真实网页研究:浏览搜索来源和实际公司网站,提取公开信息并保存来源;打不开、没有邮箱或数量不足时保留实际结果,不生成演示客户补数。 - 自然语言规划使用配置的 OpenAI 兼容模型;没有凭证时明确显示不可用。明确的结构化条件和真实官网 URL 可用于研究。 - 本地备份、完整性校验和恢复到新目录;Hermes 原生 Python 工具扩展及 Desktop 工作台入口。 这是本地单用户首版。Google Maps 专用适配、授权海关企业交易数据、CRM、邮件/WhatsApp 外发和生产多租户部署尚未实现。
展开完整文档(README 剩余 1 节)
Alex · 智能外贸助手

Alex 是一个可持续迭代的外贸智能体工作台:了解用户的企业和产品,保存长期业务记忆,使用真实浏览器发现和核验客户,留下客户档案、来源证据和任务进度,下次继续时读回历史并查重。

产品、市场和客户类型由用户决定。首次交流收集缺失信息,后续任务读取已存资料;一次任务的临时要求留在该任务里,不自动变成长期偏好。

当前版本

- 本地工作台:企业资料、长期记忆、任务、客户、证据、开发信草稿和人工复核。
- SQLite 持久保存、任务恢复检查点、可靠身份查重;归档客户仍参与查重。
- Chromium 共享会话:智能体导航和研究,用户查看实际画面并接管;接管期间智能体操作被阻止。
- 真实网页研究:浏览搜索来源和实际公司网站,提取公开信息并保存来源;打不开、没有邮箱或数量不足时保留实际结果,不生成演示客户补数。
- 自然语言规划使用配置的 OpenAI 兼容模型;没有凭证时明确显示不可用。明确的结构化条件和真实官网 URL 可用于研究。
- 本地备份、完整性校验和恢复到新目录;Hermes 原生 Python 工具扩展及 Desktop 工作台入口。

这是本地单用户首版。Google Maps 专用适配、授权海关企业交易数据、CRM、邮件/WhatsApp 外发和生产多租户部署尚未实现。来源可访问范围取决于权限、网络和人工登录;不会把贸易统计当作企业交易记录。Hermes 扩展不包含模型审批、发送或获取 token 的工具。

启动

需要 Node.js 24.5+ 和 Chromium。Linux 已有 /usr/bin/chromium 时直接使用;其他位置设置 ALEX_CHROMIUM_PATH。浏览器安装选项及故障排查见安装说明。

npm ci
npm start

打开 http://127.0.0.1:3210。数据默认保存在仓库忽略的 work/alex/,不随 Git 提交。ALEX_DATA_DIR 可指向持久数据盘;应用默认只绑定本机回环地址。

自然语言规划需要在环境设置或本机 .env 中配置 ALEX_LLM_API_KEY。默认 ALEX_LLM_BASE_URL=https://api.deepseek.com/v1、ALEX_LLM_MODEL=deepseek-chat,可替换为兼容模型。请勿把密钥粘贴到对话、记忆或客户档案。

使用流程

1. 告诉 Alex 你的产品、目标市场、客户类型和排除条件;Alex 结合历史资料拟定方案。
2. 执行真实客户研究,查看浏览器和任务记录。已有公司合并证据;打不开或信息不足时显示原因。
3. 核验客户来源,保存草稿并人工复核,导出客户 CSV。当前版本不会发送外部消息。
4. 换会话或重启后读取同一数据目录,继续保存的任务;已归档客户仍能识别。

无需按示例提前限定某个行业。提供已知的真实公司官网也可直接做证据研究;不能用编造网址代替来源发现。

Hermes 扩展

扩展使用 Hermes v2026.9.24 的官方 plugin.yaml + register(ctx) 接口。Python 侧只需标准库;desktop/plugin.js 使用官方 @hermes/plugin-sdk,提供“打开 Alex 工作台”入口。它不是完整 Hermes 桌面分发,也没有重新构建或替换 Hermes。

安装与令牌文件配置见 Hermes 集成说明。业务技能见 skills/alex/SKILL.md。Hermes 工具连接同一本地 Alex 服务,业务数据不依赖 Hermes 聊天上下文。

备份与验证

npm run backup
npm test
python integrations/hermes/test_plugin.py
npm run test:legacy

备份默认写入 work/alex/backups/。恢复命令:

node scripts/alex-backup.mjs restore <backup-directory> <new-empty-data-directory>

停服后由用户检查新目录,再把 ALEX_DATA_DIR 切换到恢复目录。备份应另存到其他磁盘或备份系统;本机副本不能防止整机或磁盘丢失。备份范围与恢复步骤见数据管理。

测试中的受控网页和 HTTP fixture 只验证契约、持久化、恢复和浏览器边界;它们不算真实获客验收。外部网站、模型和付费数据服务的可用性需要在实际部署网络和凭证下验证。

首版验证结果与仍受阻的公网验收见验收记录。

架构与目录

flowchart LR
U[Alex 工作台] --> API[本机 Alex 服务]
H[Hermes 原生扩展] --> API
API --> R[研究与任务恢复]
R --> B[共享 Chromium 浏览器]
R --> L[配置的模型服务]
API --> S[SQLite 业务档案]
S --> BK[备份与完整性校验]
U --> B

apps/alex/ 本地 HTTP 服务和工作台 packages/alex-core/ 记忆、任务、客户、证据、审批与备份 services/alex-browser/ 共享浏览器与接管 services/alex-research/ 真实网页研究与规划 integrations/hermes/ 原生工具、打包技能与 Desktop 入口 skills/alex/ 可复用的外贸业务技能 tests/alex/ 行为与集成验证 packages/dsh-sdr/ 保留的旧 DSH 插件 app/ 保留的旧 Python 项目

新增来源应实现真实提取、保存出处、预算和阻断状态,再加入固定回归场景。多租户、服务端部署和新消息渠道需分别扩展身份隔离、授权与发送幂等,当前本地工作台不宣称具备这些能力。

旧版兼容

原 @xuxchloris/dsh-sdr 插件和 app/ Python 代码保留;旧安装方式见 DSH 插件说明,迁移记录见 docs/迁移方案.md。旧离线演示使用合成数据,不能作为 Alex 真实研究的回退路径。

许可证

MIT。请勿提交 .env、运行数据、浏览器登录状态、真实客户备份或 API key。
预览分享卡片长什么样 ↓Xuxchloris/Alex-
分享 · DeepSeek Harness Hub
Xuxchloris/Alex-

DeepSeek Harness 的 SDR 数字员工插件:九阶段外贸获客…

回到顶部