Mshir0/context-graph-deepseek-harness0

dsh-context-graph

Native Context Graph and budget-aware context injection plugin for DeepSeek Harness

包名
dsh-context-graph
版本
0.10.0
许可证
MIT
最近更新
2026年8月17日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:Mshir0/context-graph-deepseek-harness

在 DSH 中使用

插件注册以下模型可调用工具:

  • context_graph_scan:分析当前 Session workspace,初始化 .context/ 并返回关系漂移建议。
  • context_graph_get:读取 Context Graph。
  • context_graph_save:保存用户确认后的完整 Graph JSON。
  • context_graph_add_node / context_graph_add_edge:保存单个已确认的 Context Node 或手工关系。
  • context_extract:从单条用户或 AI 消息提取可追溯的 Task、Requirement、Constraint、Decision 或 Issue Proposal;仅在 apply=true 时保存。
  • context_detect_conflicts:检查尚未通过 supersedes 解决的潜在结构化上下文冲突。
  • context_select:为当前 DSH Session 指定目标模块以及临时加入/排除项。
  • context_session_config:仅为当前 DSH Session 设置自动注入开关、单轮预算、上下文复用和临时包含/排除;不改写图谱或代码。
  • context_compile:预览 token 预算下最终会注入的上下文。
  • context_request:按 Functional、实现模块或符号请求受硬预算限制的接口、实现、测试或文档上下文。
  • context_audit:读取当前 Session 最近一次 Context Firewall 决策、五段 Token 审计、验证结果和 Session Surface 放置动作。
  • context_git_summary:读取当前 workspace 的相关 Git 状态和历史。
  • functional_infer:从当前有效的实现模块生成待确认的功能节点、功能关系和多对多实现映射;仅在 apply=true 时保存。再次确认会恢复证据仍成立的 AUTO 节点并替换其稳定映射,已删除实现和 MANUAL 所有权不会被自动覆盖。
  • functional_map_implementation:手动保存功能节点到实现节点的映射,不修改源码。
  • functional_merge / functional_split:调整功能节点粒度,不修改源码或文件路径。
  • dependency_discover_modules:只读发现 Python、C、C++ 模块、符号和可选变更文件的增量事实。
  • dependency_analyze_module / dependency_analyze_dependencies:读取模块关系、接口与证据。
  • dependency_find_callers / dependency_find_callees / dependency_find_related_modules:查询调用与直接模块关系。
  • dependency_extract_interface:读取函数和类的输入、输出与定义证据。
  • dependency_propose_context_edges / dependency_check_consistency:生成非绑定 Edge 建议,并检查缺失、陈旧和被用户保护的关系;不会写入 Graph。
  • dependency_validate_relationship / dependency_detect_changes:验证单条 Edge,或比较保留的前一次事实 JSON 与当前代码关系。

autoInject 开启时,插件会在每次 agent/pre-step

  1. agent.session.header.cwd 获取当前工程,不接受模型任意选择宿主路径。
  2. 根据当前用户任务和 Session 的 context_select 状态确定目标模块。
  3. 编译目标源码、结构化记忆、最小依赖接口和相关 Git 历史。
  4. 生成包含 Raw / Candidate / Selected / Excluded / Final Token 统计的 Context Manifest,并执行发送前验证。
  5. firewallMode: enforce 下通过 DSH Session Surface 将历史表面替换为当前精选快照;已有历史无法可靠替换时阻止本轮,而不是静默追加。
  6. 在官方最终 llm/stream 边界校验完整消息列表与快照指纹,并限制 system + messages + tools + output reserve 的保守 Token 估值;超出 requestTokenBudget 时阻止发送。
  7. 使用 context_audit 保留允许或阻止原因、验证结果、完整 Payload 指纹和 Surface 动作;相同任务和上下文仍会复用去重。

普通对话不要求必须能推断出 Context Graph 目标。若本轮目标无法推断或项目扫描暂时失败,插件会在仍可替换 Session Surface 时发送一个不含项目图谱内容的 context.none 快照,不会因为 agent/pre-stepreject 丢失用户输入;只有取消请求、无法安全替换已有历史或明确验证冲突时才会阻止发送。

如果目标模块无法可靠推断,插件不会猜测或加载全工程;Agent 可调用 context_select 明确目标。

本轮用户输入中的明确上下文排除指令(例如“修改 ASR,不要加载 Speaker”)会被保守解析为仅对本轮生效的 Force Exclude,并从目标候选中移除。只接受带有加载、包含、注入、读取等明确动作的否定语句或直接的“排除/Exclude”命令;同名语义节点无法唯一确定时会阻断并要求用户选择精确节点,不会猜测。

firewallMode: enforce 下关闭某个会话的 autoInject,只会关闭图谱内容注入,不会恢复旧历史:插件仍用一个不含项目图谱内容的空快照替换 Session Surface,并继续执行最终请求审计。若希望完全停用边界控制,需要在插件配置中显式使用 firewallMode: off

Bundle 配置

默认配置位于 cordis.patch.yml

- insert:
    - id: context-graph
      name: dsh-context-graph
      config:
        tokenBudget: 6000
        requestTokenBudget: 512000
        outputReserveTokens: 256000
        tokenSafetyRatio: 1.15
        allowedInstructionPlugins: []
        autoScan: true
        autoInject: true
        firewallMode: enforce
        webUi: true

firewallMode: enforce 依赖 DSH 0.1.0-rc.6 的 Runtime Context suppression API;缺少该能力时插件会拒绝启用 enforce,而不会假装已裁剪最终请求。firewallMode: audit 不调用 Runtime Context suppression,也不替换 Session Surface;它只把标记为 audit 的编译快照放入当前 step,并报告最终请求中仍存在的历史或动态上下文。默认不接受其他插件注入的 instruction 消息;确有可信静态插件需要时,可通过 allowedInstructionPlugins 显式列出其插件 ID。

用户可在自己的 profile 或 $DSH_HOME/cordis.patch.yml 中按 id: context-graph 覆盖整行配置。