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

AT 远程终端 xwamt/at-terminal-dsh

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

DeepSeek Harness 原生 SSH 终端与 SFTP 工作区,带直连智能体工具和安全沙箱。

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

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

该插件未发布到 npm,按作者文档从 GitHub 源安装即可(静态检查只覆盖 npm 路径,不代表插件不可用)。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add xwamt/at-terminal-dsh
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
dsh 原生插件 · dev
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 12 天前
档位由哪些信号合成

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

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

仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

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

✗npm 包@at-series/dsh-at-terminal(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

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

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

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

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

可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 66 处,展示前 47 条)
  • 读取本地文件
    dsh/index.js:63
    const pkg = JSON.parse(readFileSync(new URL('./package.json', import.meta.url), 'utf8'))
  • 发起网络请求
    dsh/client.js:454
    let response = await fetch(`${CHANNEL_PREFIX}/rpc`, {
  • 发起网络请求
    dsh/client.js:516
    fetch(`${CHANNEL_PREFIX}/rpc`, {
  • 发起网络请求
    dsh/client.js:594
    fetch(`${CHANNEL_PREFIX}/rpc`, {
  • 写入剪贴板
    dsh/client.js:3954
    let target = `${text(server.username)}@${text(server.host)}:${count(server.port)}`, write = typeof navigator < "u" ? navigator.clipboard?.writeText(ta
  • 写入剪贴板
    dsh/client.js:5239
    let write = typeof navigator < "u" ? navigator.clipboard?.writeText(path) : void 0;
  • 写入剪贴板
    dsh/client.js:6434
    typeof clipboard?.writeText == "function" && (clipboard.writeText(payload), setCopied(!0), typeof window < "u" && window.setTimeout(() => setCopied(!1
  • 写入剪贴板
    dsh/client.js:7319
    typeof navigator > "u" || navigator.clipboard?.writeText(JSON.stringify(audits, null, 2));
  • 写入本地文件
    dsh/channel.js:619
    appendFile(CLIENT_DIAGNOSTIC_FILE, line, { encoding: 'utf8' }).catch(() => undefined)
  • 执行外部命令固定命令
    dsh/locale.js:53
    const raw = execFileSync('defaults', ['read', '-g', 'AppleLocale'], {
  • 读取本地文件
    dsh/locale.js:105
    const parsed = JSON.parse(readFileSync(file, 'utf8'))
  • 读取本地文件
    dsh/host.bundle.js:111
    var t2 = fs.readFileSync(e);
  • 读取本地文件
    dsh/host.bundle.js:115
    var r2 = fs.readFileSync(e, t2 ? void 0 : "utf8");
  • 发起网络请求
    dsh/host.bundle.js:139
    var t2 = await fetch(e, { credentials: "same-origin" });
  • 发起网络请求
    dsh/host.bundle.js:214
    var s = fetch(t2, { credentials: "same-origin" }), n = await WebAssembly.instantiateStreaming(s, r2);
  • 读取本地文件
    dsh/host.bundle.js:879
    return await qe(r2), r2;
  • 读取本地文件
    dsh/host.bundle.js:923
    return r2 instanceof Uint8Array ? r2 : We(r2);
  • 发起网络请求
    dsh/host.bundle.js:1478
    let d3 = await fetch(t2);
  • 读取本地文件
    dsh/host.bundle.js:13824
    let content = await readFile(server.privateKeyPath);
  • 写入本地文件
    dsh/host.bundle.js:13872
    await mkdir(options.privateKeyDirectory, { recursive: !0 });
  • 写入本地文件
    dsh/host.bundle.js:13877
    await writeFile(privateKeyPath, item.privateKeyContent, { mode: 384 }), server = { ...server, privateKeyPath }, summary.privateKeysWritten += 1;
  • 写入本地文件
    dsh/host.bundle.js:14565
    async mkdir(path) {
  • 读取本地文件
    dsh/host.bundle.js:14641
    async readFile(remotePath, maxBytes, serverId, offset = 0) {
  • 写入本地文件
    dsh/host.bundle.js:14658
    async writeFile(path, content, serverId) {
  • 写入本地文件
    dsh/host.bundle.js:15070
    async mkdir(path) {
  • 写入本地文件
    dsh/host.bundle.js:15201
    await mkdirLocal(localDir, { recursive: !0 });
  • 发起网络请求
    dsh/host.bundle.js:19250
    return await approval.request({
  • 发起网络请求
    dsh/host.bundle.js:19276
    return await approval.request({
  • 读取剪贴板
    dsh/client.xterm.js:8373
    return isMac ? !event.metaKey || event.ctrlKey || event.altKey || event.shiftKey ? !0 : key === "c" ? (event.preventDefault(), terminal.hasSelection()
  • 写入剪贴板
    dsh/client.xterm.js:8373
    return isMac ? !event.metaKey || event.ctrlKey || event.altKey || event.shiftKey ? !0 : key === "c" ? (event.preventDefault(), terminal.hasSelection()
  • 读取剪贴板
    dsh/client.xterm.js:8907
    readText: () => navigator.clipboard?.readText() ?? Promise.resolve(""),
  • 写入剪贴板
    dsh/client.xterm.js:8908
    writeText: (value) => navigator.clipboard?.writeText(value) ?? Promise.resolve()
  • 读取本地文件
    dsh/esbuild.dsh.mjs:287
    onDisk = readFileSync(outfile, 'utf8');
  • 读取本地文件
    dsh/esbuild.dsh.mjs:337
    if (!existsSync(join(BUNDLE_DIR, 'policy-assets', 'tree-sitter-bash.wasm'))) {
  • 写入本地文件
    dsh/esbuild.dsh.mjs:346
    writeFileSync(target.outfile, built, 'utf8');
  • 写入本地文件
    src/agent/AgentAuditLog.ts:43
    mkdir(path: string, options: { recursive: true }): Promise<unknown>;
  • 写入本地文件
    src/agent/AgentAuditLog.ts:44
    appendFile(path: string, data: string, encoding: 'utf8'): Promise<void>;
  • 读取本地文件
    src/policy-runtime/index.ts:15
    ? async (asset) => readFile(join(assetDirectory, asset.fileName))
  • 读取本地文件
    src/sftp/SftpSession.ts:305
    const realPath = await realpathLocal(expandLocalHome(localPath));
  • 读取本地文件
    src/sftp/SftpSession.ts:306
    const stats = await statLocal(realPath);
  • 写入本地文件
    src/sftp/SftpSession.ts:366
    await mkdirLocal(localDir, { recursive: true });
  • 写入本地文件
    src/sftp/SftpSession.ts:375
    await mkdirLocal(localPath, { recursive: true });
  • 读取本地文件
    src/sftp/SftpSession.ts:784
    const entries = await readdirLocal(current.local, { withFileTypes: true });
  • 读取本地文件
    src/sftp/SftpSession.ts:792
    const { size } = await statLocal(localPath);
  • 读取本地文件
    src/ssh/SshConnectionConfig.ts:118
    privateKey: await readFile(server.privateKeyPath, 'utf8'),
  • 读取剪贴板
    webview/terminal/index.ts:65
    readText: () => navigator.clipboard?.readText() ?? Promise.resolve(''),
  • 写入剪贴板
    webview/terminal/index.ts:66
    writeText: (value) => navigator.clipboard?.writeText(value) ?? Promise.resolve()
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库

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

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

功能亮点

  • SSH终端
  • SFTP工作区
  • 安全沙箱

README

由 DeepSeek 最新模型翻译生成
AT Terminal MCP 中文文档 AT Terminal MCP 是 AT Terminal 的 MCP 增强版。它保留基础版的 SSH 终端、SFTP 文件管理和远程文件本地编辑能力,并通过共享 AT Series MCP hub 向 Kiro、Cursor、Continue 等 Agent 暴露远程命令和 SFTP 工具。 IDE MCP 配置里只有 AT Series 这一条入口(运行 ~/.at-series/mcp/hub.js),不再安装 per-plugin mcp-server.js,也不再贡献 languageModelTools。详见 ADR-005。 如果你只需要 SSH/SFTP 功能,请安装基础版 AT Terminal。如果你需要让 IDE Agent 调用远程命令或远程文件工具,请安装 AT Terminal MCP。 文档入口 - 功能介绍 - 使用教程 - Continue MCP 配置示例 - Agent skill 指南 工作方式 MCP hub 不直接读取 AT Terminal 的密码、私钥或服务器配置。实际调用链是: 1. AT Terminal MCP 扩展在 VS Code、Kiro、Cursor 等兼容 IDE 中启动。
展开完整文档(README 剩余 1 节)
AT Terminal MCP 中文文档

AT Terminal MCP 是 AT Terminal 的 MCP 增强版。它保留基础版的 SSH 终端、SFTP 文件管理和远程文件本地编辑能力,并通过共享 AT Series MCP hub 向 Kiro、Cursor、Continue 等 Agent 暴露远程命令和 SFTP 工具。

IDE MCP 配置里只有 AT Series 这一条入口(运行 ~/.at-series/mcp/hub.js),不再安装 per-plugin mcp-server.js,也不再贡献 languageModelTools。详见 ADR-005。

如果你只需要 SSH/SFTP 功能,请安装基础版 AT Terminal。如果你需要让 IDE Agent 调用远程命令或远程文件工具,请安装 AT Terminal MCP。

文档入口

- 功能介绍
- 使用教程
- Continue MCP 配置示例
- Agent skill 指南

工作方式

MCP hub 不直接读取 AT Terminal 的密码、私钥或服务器配置。实际调用链是:

1. AT Terminal MCP 扩展在 VS Code、Kiro、Cursor 等兼容 IDE 中启动。
2. 扩展启动本地 localhost bridge,并发布到 ~/.at-series 注册表。
3. 扩展将打包的 dist/hub.js 选举到 ~/.at-series/mcp/hub.js。
4. MCP Client 通过 node ~/.at-series/mcp/hub.js 启动共享 AT Series MCP server。
5. Hub 连接回本地 bridge。
6. 扩展使用已有的 AT Terminal 配置、SecretStorage、主机指纹校验和确认弹窗执行工具调用。

因此,使用 MCP 工具前,需要保持安装了 AT Terminal MCP 的 IDE 窗口处于运行状态,并激活过扩展。

核心能力

- SSH 服务器管理、密码/私钥认证、主机指纹确认和变更阻断。
- SSH 终端标签页。
- SFTP 浏览、上传、下载、拖拽上传、创建、重命名、删除、复制路径和预览。
- 远程文件本地编辑,并在保存时同步回远程路径。
- 面向 Kiro、Cursor、Continue 等 MCP Client 的共享 AT Series hub。
- 远程命令确认、SFTP 写入授权、只读工具不暴露密码或私钥。有限信任依赖 npm 精确版本 @at-series/command-policy@0.1.0(禁止 ^),接口见该包 docs/api.md。
- 加密资产导入导出,用于迁移 SSH 服务器配置。
预览分享卡片长什么样 ↓xwamt/at-terminal-dsh
分享 · DeepSeek Harness Hub
xwamt/at-terminal-dsh

DeepSeek Harness 原生 SSH 终端与 SFTP 工作区,带直连智能体工具和安全沙箱。

回到顶部