dsh-agy-provider
DSH model provider for the locally authenticated AGY CLI: Gemini/Claude model discovery, independent reasoning effort, DSH-owned tools, bounded context and tool-result handling, and Windows-safe streaming. Report problems in GitHub Issues: https://github.com/darkings/dsh-agy-provider/issues.
Install
dsh plugin --profile web add dsh-agy-provider
Sandbox test
This plugin has not been tested yet. Submit a test →
README
dsh-agy-provider
[简体中文](README.md) · [English](README.en.md)
把本机已经登录的 AGY CLI 暴露为 DSH 的模型 Provider。
它的核心用途是:让 DSH 继续使用 AGY 账号中的模型和额度,同时保留 DSH 的对话、Session、Web/headless 运行方式。Provider 不直接调用 Google Gemini API,也不保存 OAuth 凭据;认证和模型选择由本机 agy 负责,0.6.x legacy 工具由 AGY 执行,0.7.0 DSH-owned bridge 的实际工具执行由 DSH ToolRuntime 负责。
项目状态
0.10.0 已完成开发,正在发布到 npm。 0.10.0 在 0.9.0 的设置面板、工作区无感化和模型/推理强度分离基础上,加入 optimized full 上下文预算、确定性工具结果淘汰、脱敏诊断和 Windows 无控制台 launcher;默认仍为 sessionMode: full。
0.7.0 / 0.8.0 已合并:v0.7.0 → b94fa32(latest=0.7.0 已发布)、v0.8.0 → b7c9a45 已合入主线。0.7.0 起 dsh-owned 为 bundle 默认(DSH Session/ToolRuntime/sandbox/approval 接管项目与权限)。
0.10.0 的公开能力重点是:
- 上下文与工具安全:DSH-owned structured prompt 固定 56 KiB fail-closed 上限,超限返回
AGY_INPUT_TOO_LARGE;压缩后可恢复,工具结果按整段淘汰,避免历史前缀漂移。 - 性能与观测:稳定前缀、canonical tool schema、step usage 口径和 fingerprint 诊断提升缓存资格与可观测性;不把后端
cacheRead命中率当作保证。
- DSH 设置面板:
Config全量zh-CN/eni18n(schemastery.i18n),registerConfigurableProviders(settingsNs dsh-agy-provider)+registerModelDiscovery,模型为多选勾选列表,推理强度为独立下拉。 - 工作区无感:
dsh-owned下废弃workspaceRoot(.deprecated(),面板隐藏,resolveAgyAgentRuntime强制undefined),工具请求走 DSH Sessionheader.cwd + workspaceRegistry + sandboxPolicy自动校验;纯文本无需 workspace,工具无 workspace 时返回DSH_WORKSPACE_MISMATCH可操作错误。 - 模型与推理强度分离:
gemini-3.7-flash为 base,reasoningEffort: low|medium|high独立选择;listModels仅返回 base 并带reasoning.efforts,旧-high/-medium/-low后缀自动兼容并DEPRECATED_MODEL_EFFORT_SUFFIX警告。 - 模型可见性:
visibleModels: string[]空=全部,非空仅显示勾选的 base,未勾选显式请求仍兼容。 - 保持 0.7.0 的 DSH-owned 工具桥、Agent presets、doctor v5(
profileSchemaVersion: 4)、零重试、quota-free 诊断与跨平台门禁;imageInput: experimental已打通受限多模态闭环。
图片输入为受限 experimental bridge:开启后公开 inputModalities: ['text', 'image'],通过独立 dsh-agy-image-view Agent 读取临时暂存图片。已在 DSH Desktop 完成真实像素回答、同会话追问、失败格式和清理验证;它仍不是无条件的生产级图片能力。
工作方式
~~~text
用户 / DSH Web / DSH headless
│
▼
dsh-agy-provider
├─ DSH LlmAdapter
├─ Prompt / Stream 映射
├─ Session / Conversation 映射
├─ Model discovery / retry / telemetry
└─ Agent 与 workspace 安全边界
│
▼
agy --output-format stream-json
│
▼
AGY 账号额度、模型和 Agent 工具
~~~
Provider 使用 spawn(executable, args) 启动 AGY,不经过 shell 拼接命令。AGY 输出按行增量解析,再转换为 DSH 的文本、usage、finish 和稳定错误事件。
0.6.0 已实现
1. 文本 Provider 与进程边界
- 将 DSH system prompt/messages 确定性序列化为 AGY Prompt。
- 将 step_update.text_delta 和 result.response 映射为 DSH 文本流。
- 支持超时、取消、退出码、解析错误、输出上限和进程树清理。
- 日志只保留 request/session/usage/事件计数等白名单字段;失败时可追加启动阶段、稳定错误码、输出行号/长度和短哈希,不记录 Prompt、响应正文、stderr 原文、凭据或完整本机路径。
2. Session、模型和 reasoning effort
- 默认 sessionMode: full:每轮发送完整 DSH 历史,行为最容易审计。
- 可选 sessionMode: resume:使用 AGY conversation_id 发送增量消息;恢复失败会降级为完整历史。
- 同一 DSH Session 串行,不同 Session 可以并发。
- 默认通过 agy models 做 quota-free 动态发现,支持 TTL、single-flight、缓存和静态 fallback。
- 请求级 reasoningEffort 支持 low、medium、high,以独立 --effort 参数传给 AGY;未指定时不设置隐式值。
3. 工具所有权与权限边界
项目明确只允许一个工具执行者:
- 程序化 Provider 默认 toolPolicy: reject,收到 DSH tool schema 时返回 UNSUPPORTED_TOOLS。
- 已发布的 0.6.1 DSH bundle 默认使用 toolPolicy: agy-owned;0.7.0 开发分支已切换为 toolPolicy: dsh-owned,DSH schema 经过 bounded contract 交给 AGY 生成调用,实际执行仍由 DSH ToolRuntime 完成。
- 发生权限请求时返回 PERMISSION_REQUIRED 并终止请求,不自动批准,不使用 --dangerously-skip-permissions。
4. Agent capability presets 与读写能力
随包提供三档 Agent 模板:
preset · 已允许能力 · 默认行为
tool-free · 纯文本推理 · 不访问工作区
read-only · find_by_name、grep_search、view_file、list_dir · 只读工作区
workspace-write · 上述只读工具 + multi_replace_file_content、replace_file_content、write_to_file · 仅显式工作区内写入
workspace-write 已经实现,但必须同时配置一个存在且非文件系统根目录的 workspaceRoot。它不包含 shell、网络、浏览器、MCP、subagent 或权限跳过。
项目不会把未验证的 glob 工具名写进公开契约。需要文件搜索时使用 AGY 已验证的 find_by_name、grep_search 和 list_dir。
模板安装默认只预览,不写入文件:
~~~powershell
npx dsh-agy-provider agents list
npx dsh-agy-provider agents install read-only --dir "$HOME/.gemini/config/agents"
npx dsh-agy-provider agents install read-only --dir "$HOME/.gemini/config/agents" --apply
~~~
已有模板默认拒绝覆盖;需要保留旧文件时显式增加 --backup。
5. Doctor v3 与安全诊断(0.7.0)
发布包提供 profile-aware doctor:
~~~powershell
npx dsh-agy-provider doctor --profile web --json
~~~
0.7.0 源码中的 doctor 输出 profileSchemaVersion: 3,审计 provider、model、Agent、retry、purpose route、workspace、image、DSH context probe 状态和 DSH-owned bridge capability。它会区分 dump timeout、非零退出和解析失败,并对 agy-owned 输出 deprecated warning;profile doctor 只读,不把静态 dump 伪装成 live Session。
运行时 API diagnoseDshContext() 会只返回 session/workspace/sandbox/permission/approval 的可用性、allowlisted 权限模式和稳定 issue code,例如 DSH_SESSION_UNKNOWN、DSH_WORKSPACE_MISMATCH,不会返回路径、Session ID、Prompt 或工具参数。telemetry 只保留 permissionPreset、sandboxMode、approvalPolicy、toolSchemaCount、toolCallCount 和 bridge outcome。
doctor 只执行 agy --version、agy agents、agy models 和 DSH config dump,不发送模型 Prompt,不执行工具,quotaUsed 固定为 false。
6. 图片输入实验边界
imageInput: experimental 已支持:
- 通过可选 DSH AttachmentStore 读取图片。
- 对 PNG/JPEG/WebP/GIF 做 MIME、字节数和数量限制。
- 每个请求使用随机临时 staging 目录,并在成功、失败和取消时清理。
- 图片请求强制使用独立
dsh-agy-image-viewAgent,并且只允许view_file读取本次请求精确暂存的图片路径。 - 图片请求使用 one-shot;AGY 的内部
view_file生命周期只在上述窄白名单内放行,DSH 工具仍由 DSH ToolRuntime 所有。
开启 imageInput: experimental 后 listModels() 返回文本+图片输入能力;关闭时仍为纯文本。未知 custom Agent 不会获得图片读取权限。
7. 质量门禁
- npm run verify:typecheck、158 个测试和 pack dry-run。
- npm run benchmark:Parser、serializer、limiter 的无额度基线。
- npm run smoke:dsh:self-contained:隔离 DSH Web/headless plugin-add、doctor 和 Mock response。
- GitHub Actions:Provider Node.js 20/22/24 × Windows/Ubuntu/macOS,DSH 原生 Node 22/24 × Windows/Ubuntu/macOS,并包含 self-contained smoke。
- 公共 CI、doctor、benchmark 和 Mock smoke 均不调用真实 AGY 模型。
当前能力矩阵
能力 · 当前状态 · 默认值
DSH 文本对话 · 已实现 · 开启(profile bundle)
AGY 额度/认证 · 已实现 · 由本机 AGY 管理
动态模型发现 · 已实现 · modelDiscovery: auto
reasoning effort · 已实现 · low/medium/high 不设隐式值,DSH 独
…(truncated)
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::10,最后更新 2026-08-24