跳到主要内容

dsh-prompt-for-me

已验证

dsh-prompt-for-me · v0.4.0 · MIT · Web 界面

Context-aware next-message suggestions for the DeepSeek Harness composer, always reviewed by the user before sending.

安装

dsh plugin add dsh-prompt-for-me

dsh --profile default --dump-config 确认 layer 已生效 —— 参见安装指南

源码

标签

说明文档

Prompt for Me(Prompt 嘴替)

English

Prompt for Me 会根据 DeepSeek Harness 中有界的会话历史和本地建议交互,推测你下一句可能想说什么。它只把建议写入输入框,绝不会代替你发送。

功能

  • 只在输入框操作区增加一个 Sparkles 按钮。
  • 全流程使用同一个 Trigger:点击按钮,或按 Mod+Shift+Space
  • 每次有效 Trigger 只生成一条建议;完整 NDJSON 行通过校验后立即进入输入框。
  • 下一次请求会携带本轮已经跳过的建议,并要求模型不得重复或改写复述它们。
  • 快速连续 Trigger 会被合并,快捷键长按产生的按键连发会被忽略;一次输入连发最多只推进一条建议。
  • 本轮最多保留 10 条已经跳过的建议,连续 Trigger 不会让请求无限增长。
  • 建议只写入草稿。你可以按 Enter 发送、先编辑、全部删除,或继续 Trigger。
  • 不绕过 Harness 权限审批、不调用工具、不自动发送消息。

安装

推荐安装 Release 中已经构建好的 tarball,不需要执行构建脚本:

dsh plugin --profile web add https://github.com/ChuanTianML/prompt-for-me/releases/download/v0.4.0/dsh-prompt-for-me-0.4.0.tgz

安装后重启 dsh web

也可以安装固定 Git 标签:

dsh plugin --profile web add github:ChuanTianML/prompt-for-me#v0.4.0

使用 pnpm 10 从 Git 安装时,可能需要在 Web profile 的 pnpm-workspace.yaml 中为 allowBuilds 添加 dsh-prompt-for-me: true,然后重新运行命令。prepare 脚本只复制 checkout 中的 Host 文件并包装 Client factory,不会下载任何内容。

更新或卸载:

dsh plugin --profile web update dsh-prompt-for-me
dsh plugin --profile web remove dsh-prompt-for-me

模型和 API Key

插件在 Harness Host 上调用 ctx.llm。默认优先复用当前会话的 provider/model,没有时使用 Harness 默认模型,因此使用的就是 DeepSeek Harness 已配置的 API Key。浏览器拿不到也不会读取这个 Key,插件没有单独的 Key。

如需固定辅助模型,可在 cordis.patch.yml 或更高优先级的 profile patch 中同时配置:

- id: prompt-for-me
  name: dsh-prompt-for-me
  config:
    provider: deepseek-official
    model: deepseek-chat

数据与隐私

每次生成建议时,Host 可能把下列有界文本发送给当前选择的模型提供方:

  • 当前草稿;
  • 当前会话最近 3 轮真人用户/助手文本;
  • 当前会话中已发送的建议编辑、原样接受和拒绝记录;
  • 来自最多 20 个历史会话的手写提示词和建议交互原始样本;
  • 本轮最多 10 条已经跳过的建议,用于让模型避免重复或改写复述。

当前草稿和最近 3 轮决定当前任务、意图和消息内容;当前会话反馈只调整眼前的表达;跨会话记忆只能影响长期的风格、详略和工作流偏好。手写提示词和编辑后发送的建议权重高于原样接受,拒绝记录只作为较弱的负向信号。编辑建议后再次 Trigger 会拒绝原建议,但不会把尚未发送的编辑结果当成正向偏好。

Harness 会把工作区指令、运行时上下文和 Skill 列表记录为用户角色事件;插件会从会话轮次和偏好记忆中排除这些非真人来源。如果草稿与真人会话均为空,插件会在调用模型前停止生成。

常见 API Key、token、password 和 Bearer token 会在模型调用前替换为 [REDACTED_SECRET]。插件不会收集附件、工具参数、文件、凭证或二进制内容;没有分析上报服务,只会调用 Harness 已选择的模型路由。

交互记录只保存在当前浏览器 localStoragedsh.prompt-for-me.outcomes.v2,每条包含会话 ID、最终动作、来源以及相关的原文/最终文本。V1 记录会自动迁移,原记录不会删除。可在浏览器控制台同时清除两个版本:

localStorage.removeItem('dsh.prompt-for-me.outcomes.v1')
localStorage.removeItem('dsh.prompt-for-me.outcomes.v2')

DeepSeek Harness 0.1.0-rc.6 尚未提供下游插件注册自定义持久化 session event 的公开接口。因此独立版不会把辅助模型请求和建议结果追加到 Harness session log;强行写入会导致原版运行时无法重新读取会话。这是独立版与实验性仓库内实现的主要差异,待官方开放事件注册接口后再补齐。

生成 RPC 使用 NDJSON。每条候选只有在完整并通过校验后才会进入输入框;模型的半截 token 和不完整 JSON 不会写入草稿。鼠标悬停在 Sparkles 按钮上时,只显示当前动作和快捷键,例如“生成下一句(⌘⇧Space)”或“换一条(⌘⇧Space)”。

辅助请求始终使用 off reasoning。模型收到一段系统指令,以及一条包含 currentcurrentSessionFeedbackuserPreferenceMemorycurrentCycleSkipped 的 JSON 用户消息;不会收到工具定义或附件。

Host 在内存中保留最近 50 条隐私安全的性能记录,并把每条记录以 prompt-for-me metrics 写入日志。记录包含模型路由、各类文本的字节数/条数、历史读取和输入组装耗时、首个模型增量/reasoning/text 的时间、建议到达时间、模型与请求总耗时,以及提供方返回的 token usage;不包含提示词、候选或交互结果正文。可查询当前进程:

curl -sS -X POST -H 'content-type: application/json' \
  -d '{"method":"metrics"}' \
  http://127.0.0.1:3080/dsh-prompt-for-me/rpc

配置

所有生成限制均可在 cordis.patch.yml 中配置:

字段 默认值 含义
maxCandidateBytes 4096 单条建议 UTF-8 上限。
maxDraftBytes 32768 草稿或编辑结果 UTF-8 上限。
maxCurrentCycleSkipped 10 作为下一次 Trigger 强负向上下文保留的已跳过建议数。
maxCurrentCycleSkippedBytes 16384 当前周期已跳过建议共享的 JSON 预算。
maxCurrentTurns 3 保留的当前会话最近轮数。
maxCurrentContextBytes 16384 最近会话轮次的 JSON 预算。
maxCurrentFeedbackBytes 4096 当前会话建议反馈的 JSON 预算。
maxPreferenceMemoryBytes 8192 跨会话偏好记忆的 JSON 预算。
maxHistorySessions 20 检查的历史会话数。
maxManualPrompts 8 保留的历史手写提示词数。
maxEditedSuggestions 6 每个反馈层保留的建议编辑对数。
maxAcceptedExact 6 每个反馈层保留的原样接受数。
maxRejectedSuggestions 4 每个反馈层保留的弱拒绝信号数。
maxLocalOutcomes 50 浏览器本地交互记录上限。
maxLocalOutcomesBytes 131072 浏览器本地记录及其 RPC 副本共享的 JSON 预算。
maxOutputTokens 2048 辅助模型输出预算。
timeoutMs 30000 辅助模型调用超时。
shortcut Mod+Shift+Space 跨平台 Trigger,也可设为 disabled

开发

需要 Node.js 22.19 或更高版本。

npm run check

该命令会重新构建 Host/Client 静态产物、运行 Node 测试,并检查 npm 包内容。

License

MIT