22-ai-00/dsh-enhanced--plugins-traex-acp-provider2

@dsh-enhanced/traex-acp-provider

Use a local TraeX coding agent as a DeepSeek Harness model provider over ACP.

包名
@dsh-enhanced/traex-acp-provider
版本
0.1.28
许可证
MIT
最近更新
2026年9月12日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:22-ai-00/dsh-enhanced#bb3fb924f1bdb946901614b8b848ac3a1d60c642&path:plugins/traex-acp-provider

配置

完整配置如下。Cordis config 会整段替换,覆盖时请保留仍需使用的字段:

- id: dsh-enhanced-traex-acp-provider
  name: '@dsh-enhanced/traex-acp-provider'
  config:
    enabled: true
    command: traex
    cwd: !!js dshHomePath('assistant-workspace')
    models: [default]
    timeoutMs: 600000
    authProbeTimeoutMs: 10000
    maxAuthProbeBytes: 32768
    killGraceMs: 3000
    maxMessageBytes: 262144
    maxProtocolBytes: 16777216
    maxProtocolMessages: 10000
    maxOutputBytes: 2097152
    maxStderrBytes: 32768
    maxPromptBytes: 4194304
    extraEnvNames: []
    logDiagnostics: false
  • enabled 默认 false;只在完成本机兼容性与登录检查后显式开启。
  • command 是单个可执行文件名或绝对路径;插件固定参数数组并使用 shell: false,不接受 shell 片段。
  • cwd 是 ACP session/new 允许使用的工作目录;bundle 默认使用 $DSH_HOME/assistant-workspace,与标准 Delivery 默认值一致。相对路径按 DSH 进程启动目录解析。每个带 prompt 的普通对话调用必须是深冻结的 DSH Agent Loop 请求:同模块 marker 可直接验证;包被源码 link 或 DSH 在 adapter 边界复制请求时,则由 Host agents 服务核对仍在运行的精确 Agent、registry/session 对象身份,并从 live Session 的 header 与 derived messages 重建请求,只容许 0.1.2-rc.1 forAdapter() 删除跨 route replayState。随后插件用同一 live Session 的 header cwd,与配置 cwd 分别 realpath 后要求完全相等。缺失、过期、伪造、辅助/嵌套调用、请求变形、cwd mismatch 或 symlink escape 都会在 traex login status 和 ACP 启动前以 LOCAL_SESSION_CWD_REQUIRED 拒绝;ACP 收到的是 canonical live-session cwd。Cordis config 是整段替换,手工覆盖时不要意外删掉 bundle 的 cwd;若改用其他目录,还要把创建该会话的 Delivery defaultWorkspace 改为同一 realpath。
  • listModels 在缓存为空、过期或只有不完整的普通 stream 观察时,会通过当前 adapter 的 probeReadiness 执行 traex login status 和无 prompt 的 ACP discovery。它固定使用配置 cwd、read-only sandbox、ask-for-approval=never,不携带消息内容,不声明文件/terminal capability,并拒绝 permission request。并发查询 single-flight;完整目录在短 TTL 内复用,过期后刷新。发现失败时 /model 不会整体失败,而是安全回退到 models 配置别名,并只记录固定、无错误原文的诊断。
  • resolveModel 仍然 不认证、不启动子进程,只读取配置与当前短 TTL 内存缓存,保证 Agent Loop 的 prepareCall 路径 process-free。真实 stream 不信任该展示缓存;它继续要求 live session + canonical cwd,并以自己新建 ACP session 的目录重新权威校验模型与 effort。
  • 部署工具仍可在启用 route 前显式调用包导出的 probeTraexReadiness,主动验证本机登录和完整目录;调用完成后应 shutdown 临时 adapter。adapter shutdown 会 abort 尚未完成的目录发现、清除 single-flight 引用与缓存。
  • models 是实时 ACP 目录以外需要额外展示的非权威别名列表,默认只有 default。它不是执行允许列表;每次请求都会在新的 ACP 会话里重新验证具体模型,模型不可用时失败且不会静默换模型。若 DSH 已放行的 effort 在新会话的 selector 中消失,transport 会保留当前模型并使用该会话的默认档位,绝不重放 prompt。
  • timeoutMs 覆盖握手、建会话和整轮 prompt。取消或超时时先发 ACP session/cancelSIGINT,等待 killGraceMs 后升级为 SIGKILL,再等待一个等长窗口确认 close。仍未关闭时以 teardown=failed 错误结算,保留原始 abort/timeout 分类,并继续跟踪迟到的 close;不会伪称已完成回收。
  • authProbeTimeoutMs / maxAuthProbeBytes 限制每次 live-session 调用以及显式 readiness probe 的 traex login statusauthProbeTimeoutMs 同时作为 listModels 的 auth + discovery 整体短时限,目录查询不会沿用生成请求默认 10 分钟的 timeoutMs。当前 TraeX 可能把精确文本 Logged in using Trae 单独写入 stdout 或 stderr,这两种形式都会被接受,混合输出、ChatGPT、API key、access token、未登录与未知输出全部拒绝。
  • maxMessageBytes 限制单条 NDJSON,maxProtocolBytes / maxProtocolMessages 限制整轮 ACP 输入,maxOutputBytes 限制助手文本;字节限制均按 UTF-8 计算。
  • maxPromptBytes 限制序列化后的 DSH 请求,默认 4 MiB。prompt 通过 ACP session/prompt 的文本块经 stdin 发送,不作为 argv 元素,因此这里不存在操作系统命令行长度限制;该上限只用于约束本机内存与 NDJSON 帧膨胀。真正的上下文边界由 TraeX 侧模型窗口决定。超限时在握手前失败,返回 DSH 标准的 CONTEXT_WINDOW_EXCEEDED,prompt 确定未进入 ACP 流;长对话若需要更大值可直接调高本项。
  • extraEnvNames 只允许填写要从 DSH 启动环境继承的变量名,配置中不能写变量值或 secret。
  • API key/token、Authorization/private-key/database credential 以及 OpenAI/Codex 等 provider endpoint 变量,即使列入 extraEnvNames 也会被硬排除;代理 URL 中的 userinfo 会被删除,无法安全解析的含 @ 代理值会被拒绝。
  • logDiagnostics 默认为 false,此时对 stderr 只记录“TraeX 写入 stderr”;启用后仅记录经过常见 token/key/邮箱规则脱敏的有界尾部,仍不适合输出业务秘密。独立于该开关,插件始终会在每次请求结算时记录一条无凭据的生命周期诊断(阶段、prompt 是否提交、结果分类、teardown 状态、能可靠测得的毫秒级延迟指标,以及 ACP 返回时的纯数值 usage 快照),成功走 debug、非成功走 info;并在观测到模型目录时只记录模型数量。这些行不含 prompt、stderr 原文、认证凭据或任何 model id 原文;usage 快照可能包含 ACP 报告的 token 数量,但不会映射或转发为 DSH TokenUsage