拓冰建站拓冰建站
首页 / 资讯中心 / 正文

context-mode 接入 JetBrains Copilot 完整指南:MCP 工具路由、Hook 沙箱与会话持久化

context-mode 接入 JetBrains Copilot 完整指南MCP 工具路由、Hook 沙箱与会话持久化【免费下载链接】context-modeContext window optimization for AI coding agents. Sandboxes tool output (98% reduction), persists session memory, and enforces routing across 17 platforms via MCP hooks.项目地址: https://gitcode.com/GitHub_Trending/cl/context-mode本文是一份面向 JetBrains IDEIntelliJ IDEA、WebStorm、PyCharm、GoLand、Rider、CLion 等用户的技术指南讲解如何在 JetBrains 的 GitHub Copilot 插件中接入 context-mode通过 Settings UI 注册 MCP 服务器、用 setup 命令写入.github/hooks/context-mode.json钩子配置实现工具调用路由强制、工具输出沙箱约 98% 上下文压缩以及跨会话记忆持久化。读完本文你将掌握从零配置、诊断验证到故障排查的完整实战流程并理解 JetBrains Copilot 与 VS Code Copilot 共享的 hook 线协议及其底层实现原理。前置条件在开始之前请确认以下环境就绪Node.js 18—— 验证方式node --version。context-mode 的 MCP 服务器与 hook 分发器都以 Node 运行时为基础。任意 JetBrains IDE—— IntelliJ IDEA、WebStorm、PyCharm、GoLand、Rider、CLion 等均可。GitHub Copilot 插件 v1.5.57—— 通过Settings Plugins Marketplace搜索 GitHub Copilot 安装。JetBrains 侧的 MCP 与 hook 支持依赖该插件版本低于此版本将无法正常注册服务器。另外推荐先做全局安装这样context-mode二进制会进入 PATH后续 MCP 命令、hook 命令与doctor/upgrade等工具命令都能直接解析npm install -g context-mode从 docs/platform-support.md 可以看到JetBrains Copilot 属于JSON stdin/stdouthook 范式平台MCP 服务器层 100% 可移植、无需适配器只有 hook 层需要平台专属适配器。MCP 配置通过 Settings UI 注册服务器JetBrains 与多数 CLI 工具不同——它通过 IDE 的 Settings UI 配置 MCP 服务器而不是编辑配置文件。这也是 JetBrains 适配器在 doctor 诊断中无法通过 CLI 检查 MCP 注册状态的根本原因见下文源码分析。操作步骤打开你的 JetBrains IDE。进入Settings Tools AI Assistant Model Context Protocol (MCP)。点击Add Server按以下内容填写Name:context-modeCommand:npxArgs:-y context-mode点击OK保存。如果已执行过全局安装也可以把 Command 直接设为context-modeArgs 留空这样会启动更快且不依赖网络拉取。仓库内附带的 MCP 参考配置见 configs/jetbrains-copilot/mcp.json其内容如下可作为你在其他支持文件式配置的场景下的对照{ servers: { context-mode: { command: context-mode } } }注意JetBrains 的 MCP 服务器命名约定与 VS Code Copilot 一致暴露出来的工具名带f1e_前缀而非 Claude Code 的mcp__server__tool格式适配层已对此做了归一化处理。Hook 安装一条命令写入项目钩子注册完 MCP 服务器后还需要安装 hook让 context-mode 能在工具调用前后、上下文压缩与会话启动等时机介入。使用自动化安装命令npx context-modelatest setup --adapter jetbrains-copilot该命令会在项目根目录创建.github/hooks/context-mode.json内容如下{ hooks: { PreToolUse: [ { type: command, command: context-mode hook jetbrains-copilot pretooluse } ], PostToolUse: [ { type: command, command: context-mode hook jetbrains-copilot posttooluse } ], PreCompact: [ { type: command, command: context-mode hook jetbrains-copilot precompact } ], SessionStart: [ { type: command, command: context-mode hook jetbrains-copilot sessionstart } ] } }仓库中对应的完整 hook 配置参考见 configs/jetbrains-copilot/hooks.json与上面结构一致。四个 hook 的职责Hook 事件触发时机核心作用PreToolUse工具执行前路由决策放行、改写参数、重定向到ctx_*沙箱工具或直接拒绝PostToolUse工具完成后捕获工具输出与字节量写入会话数据库上下文占用统计PreCompact上下文压缩前保存会话快照供下次会话恢复SessionStart会话启动/恢复/压缩时注入跨会话记忆恢复之前的工作上下文hook 命令为什么是context-mode hook platform event从 src/adapters/jetbrains-copilot/hooks.ts 的源码可以看到buildHookCommand始终输出 CLI 分发器形式return context-mode hook jetbrains-copilot ${hookType.toLowerCase()};采用 CLI 分发器而不是直接指向node ./node_modules/...的脚本路径有四个实际好处依据 docs/platform-support.md 的 CLI Hook Dispatcher 一节任意目录下都能工作无需每个项目单独npm install一次全局安装服务所有项目context-mode upgrade可以原地升级 hook 实现配置文件中命令字符串短小、跨机器可移植。另外.github/hooks/context-mode.json是随仓库提交、团队共享的配置文件若在命令里嵌入process.execPath或绝对 pluginRoot 路径会泄露本机信息并破坏跨机器移植性因此必须使用可移植的context-mode hook ...形式见 copilot-base.ts 中的设计说明。JetBrains Copilot 与 VS Code Copilot 共享同一套 hook 线协议详见 src/adapters/copilot-base.ts 的类注释因此 JetBrains 侧也支持以下额外的 PascalCase 事件Stop智能体回合结束、SubagentStart、SubagentStop。但注意一个关键限制matcher 会被解析但被忽略——所有 hook 会对所有工具触发无法按工具名精确匹配源码注释明确标注了这一点。hook 响应格式hookSpecificOutput 包装与 Claude Code 的扁平响应不同JetBrains Copilot同 VS Code Copilot要求 hook 响应包在hookSpecificOutput包装器内并携带hookEventName。以参数改写为例{ hookSpecificOutput: { hookEventName: PreToolUse, updatedInput: { ...: ... } } }该格式由 copilot-base.ts 中的formatPreToolUseResponse生成拒绝工具时返回顶层permissionDecision: denyreason改写参数时返回上述包装结构注入上下文时在hookSpecificOutput内放additionalContext。会话 ID 字段则是 camelCase 的sessionId不是 Claude Code 的session_id。升级保持版本最新两种升级方式context-mode upgrade或在 Copilot 聊天会话中直接输入ctx upgrade。升级会从 GitHub 拉取最新版本、重新构建并重新配置所有已注册平台的 hookMCP 服务器与 hook 分发器共用同一个全局二进制升级后立即生效。验证doctor 与 stats运行诊断命令确认一切正常context-mode doctor或在 Copilot 聊天会话中输入ctx doctor。所有检查项都应显示[x]。doctor 会校验运行时、hook 注册、FTS5 全文检索、MCP 注册状态。还可以在聊天会话中输入ctx stats查看上下文节省量、调用次数与会话统计——这正是工具输出沙箱效果的量化体现未路由的原始命令单次可能向上下文倾倒约 56 KB 输出见下文路由规则而通过ctx_*沙箱工具处理后只保留 stdout 摘要。doctor 对 JetBrains 的两个特殊警告从 src/adapters/jetbrains-copilot/index.ts 源码可见JetBrains 适配器的诊断有两个平台特性MCP 注册不可 CLI 检查checkPluginRegistration()返回warn状态因为 MCP 配置存在 IDE Settings UI 中Settings Tools GitHub Copilot MCP不是项目内可读取的文件。修复建议是到 UI 中人工确认存在 context-mode 服务器条目。hook 校验只检查必需项validateHooks()强制校验PreToolUse与SessionStart源码中REQUIRED_HOOKS定义缺失时提示运行context-mode upgrade修复同时提示 hook 包装脚本应解析到pluginRoot/hooks/jetbrains-copilot/*.mjs。深入原理JetBrains 适配器源码解析JetBrains 平台适配器定义在 src/adapters/jetbrains-copilot/index.ts继承自CopilotBaseAdapter两者共享同一套解析parse与格式化format逻辑仅在平台差异处覆写会话 ID 提取优先级extractSessionIdhook 输入中的sessionId字段camelCase环境变量JETBRAINS_CLIENT_ID生成jetbrains-id环境变量IDEA_HOME生成idea-pid兜底pid-ppid。项目目录解析getProjectDir优先IDEA_INITIAL_DIRECTORY其次CLAUDE_PROJECT_DIR最后process.cwd()。这也解释了 hook 脚本 hooks/jetbrains-copilot/pretooluse.mjs 中为什么把process.env.IDEA_INITIAL_DIRECTORY || process.env.CLAUDE_PROJECT_DIR作为项目目录传入路由核心。配置目录getConfigDir()返回projectDir/.github指令文件为copilot-instructions.md与 VS Code Copilot 同位置即.github/copilot-instructions.md。会话存储适配器构造时传入[.config, JetBrains]作为会话目录段按 src/adapters/base.ts 的getSessionDir()逻辑会话数据库默认落在~/.config/JetBrains/context-mode/sessions/除非设置了上下文目录覆盖。hook 执行链以 PreToolUse 为例hooks/jetbrains-copilot/pretooluse.mjs 的执行链是读取 stdin JSON →parseStdin归一化 → 调用routePreToolUse做路由决策工具名、参数、项目目录、平台标识、会话 ID 全部参与→formatDecision按 JetBrains 线协议格式化响应 → 输出到 stdout。PostToolUse、PreCompact、SessionStart三个 hook 脚本hooks/jetbrains-copilot/ 目录下走同样的瘦包装模式复用共享的路由核心不掺入 Claude Code 专属逻辑。对应的适配器测试见 tests/adapters/jetbrains-copilot.test.ts其中验证了IDEA_INITIAL_DIRECTORY项目目录解析、hook 命令格式为context-mode hook jetbrains-copilot event等行为。路由规则让模型先思考代码再调用工具JetBrains Copilot 与 VS Code Copilot 一样读取项目根的.github/copilot-instructions.md见 configs/jetbrains-copilot/copilot-instructions.md。这份路由规则是软约束 hook 硬执行的配套规则文件让模型偏好使用沙箱工具而 PreToolUse hook 在模型违反规则时强制拦截。规则的核心思想也是 98% 上下文缩减的来源Think in Code分析/统计/过滤/搜索/解析/转换数据时用ctx_execute(language, code)写代码、只console.log答案而不是把原始数据读进上下文。一段脚本代替十次工具调用。BLOCKED 清单curl/wget、内联 HTTPfetch(http、requests.get(等、WebFetch/fetch 全部拦截改用ctx_fetch_and_index(url, source)ctx_search(queries)。REDIRECTED 清单终端命令超过 20 行输出时改用ctx_batch_execute(commands, queries)读文件做分析时改用ctx_execute_file(path, language, code)读文件准备编辑时才用原生read_file。工具选择顺序ctx_search查记忆 →ctx_batch_execute批量收集 →ctx_search追问 →ctx_execute/ctx_execute_file处理 →ctx_fetch_and_index抓取网页 →ctx_index入库。会话连续性技能、角色、决策在整个会话中保持压缩/清空后知识库与统计保留用ctx_search(sort: timeline)在恢复会话时先检索再提问。ctx 命令映射ctx stats→ctx_stats工具ctx doctor→ctx_doctor工具并执行其返回的 shell 命令ctx upgrade→ctx_upgradectx purge→ctx_purge清除知识库需 confirm。故障排查MCP 服务器无法连接确认 Node.js 18 在 PATH 中node --version。添加 MCP 服务器后重启 JetBrains IDE。到 Settings Tools AI Assistant MCP 确认 context-mode 显示绿色状态指示。Hook 不触发确认项目根存在.github/hooks/context-mode.json。JetBrains Copilot 从.github/hooks/读取 hook——与 VS Code Copilot 位置完全相同。重新运行npx context-modelatest setup --adapter jetbrains-copilot重新生成 hook 配置。context-mode: command not found全局安装npm install -g context-mode。验证which context-mode能返回路径。若使用npx确保 npx 在 IDE 的 PATH 中JetBrains 从 IDE 启动的子进程可能不继承 shell 的 PATH 配置需在 IDE 中补充。工具可见但路由未被强制Hook 以编程方式强制执行路由没有 hook 时模型仍能调用 context-mode 工具但不会被重定向去优先使用它们。确保 hook 配置文件位于.github/hooks/context-mode.json不是.github/hooks.json——这是两类平台配置位置最容易混淆的点。会话连续性不工作确认四个 hookPreToolUse、PostToolUse、PreCompact、SessionStart都已配置。运行ctx doctor检查 hook 注册状态。小结JetBrains Copilot 接入 context-mode 的完整链路可以概括为三步Settings UI 注册 MCP 服务器提供ctx_*沙箱与记忆工具→setup 命令写入.github/hooks/context-mode.json四个 hook 实现路由强制、输出捕获、压缩快照与会话恢复→doctor/stats 验证确认运行时、hook、FTS5 与 MCP 全部就绪。由于 JetBrains Copilot 与 VS Code Copilot 共享 hook 线协议与配置目录熟悉任意一方都能快速迁移而其配置在 UI、hook 在项目文件的双轨模式则是排障时最需要牢记的平台特性。【免费下载链接】context-modeContext window optimization for AI coding agents. Sandboxes tool output (98% reduction), persists session memory, and enforces routing across 17 platforms via MCP hooks.项目地址: https://gitcode.com/GitHub_Trending/cl/context-mode创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门