Hermes Agent与pulsar编辑器进行协同开发的配置修复方法汇总

› 社区话题 › AI Agent与自动化 › Hermes Agent与pulsar编辑器进行协同开发的配置修复方法汇总

57

标签: 

正在查看 1 条回复
  • 作者
    帖子
    • #134689

      追光
      参与者

      Pulsar + Hermes Agent 本地 AI 开发环境搭建完全指南:从零配置到踩坑修复,一篇搞定 Pulsar 编辑器 + Hermes Agent + 本地 LLM 的完整联动方案。

      Pulsar Editor <–ACP/stdio–> Hermes Agent <–OpenAI API–> LM Studio / Ollama
      (JSON-RPC 2.0) (Python 3.11+) (Local LLM)

      组件
      职责
      技术栈
      Pulsar
      代码编辑器,Atom 的社区继承者
      Electron + Node.js
      Pulsar ACP Agent
      Pulsar 插件,实现 ACP 客户端协议
      TypeScript (bundled JS)
      Hermes Agent
      AI 代理框架,支持多 Provider、工具调用、MCP
      Python 3.11+
      ACP
      编辑器与 AI Agent 之间的通信协议
      JSON-RPC 2.0 over stdio
      LM Studio / Ollama
      本地 LLM 推理服务
      OpenAI Compatible API

      在pulsar编辑器中配置 Pulsar ACP Agent配置Pulsar config的完整配置文件参考

      "*":
      "pulsar-acp-agent":
      activeAgentId: "hermes"
      agents:
      hermes:
      name: "Hermes Agent"
      command: "/Users/xbaby/.local/bin/hermes acp"
      version: 1

      检查 ACP 模式是否可用

      hermes acp --check

      预期输出:Hermes ACP check OK

      确认 hermes 二进制路径

      which hermes

      例如:/Users/xbaby/.local/bin/hermes

      测试模型连通性

      hermes chat -q "say hello" --oneshot

      查看 Hermes ACP 日志:

      ~/.local/bin/hermes acp 2>&1 | tee /tmp/hermes-acp.log

      模拟 Pulsar 的 initialize 请求:

      echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":1,"clientCapabilities":{"fs":{"readTextFile":true,"writeTextFile":true},"terminal":true},"clientInfo":{"name":"test","version":"1.0"}}}' | \
      ~/.local/bin/hermes acp 2>/dev/null | head -1 | python3 -m json.tool

      hermes 官方的启动文件存在缺陷,修复方法在官方 plist 的 EnvironmentVariables 中显式注入 PYTHONPATH:

      <key>PYTHONPATH</key>
      <string>/Users/xbaby/.hermes/hermes-agent</string>

      由于 hermes update / hermes gateway install 会覆盖 plist,为了将来更新升级仍然能够修复,我特意写了一个自动化修复脚本,创建一个可移植的修复sh脚本:

      #!/bin/bash
      # fix-hermes-plist.sh — 可放在任意位置运行
      set -e
      
      HERMES_HOME="${HERMES_HOME:-$HOME/.hermes}"
      PLIST="$HOME/Library/LaunchAgents/ai.hermes.gateway.plist"
      HERMES_SRC="$HERMES_HOME/hermes-agent"
      
      if [ ! -f "$PLIST" ]; then
          echo "❌ plist not found. Run: hermes gateway install"; exit 1
      fi
      
      if grep -q "<key>PYTHONPATH</key>" "$PLIST"; then
          echo "✅ PYTHONPATH already present"
      else
          python3 - "$PLIST" "$HERMES_SRC" << 'PYEOF'
      import sys, re
      with open(sys.argv[1]) as f: content = f.read()
      pattern = r'(<key>HERMES_SUPERVISED_CHILD</key>\s*<string>1</string>)'
      replacement = r'\1\n        <key>PYTHONPATH</key>\n        <string>' + sys.argv[2] + r'</string>'
      new = re.sub(pattern, replacement, content)
      if new == content: print("⚠️ Insert point not found"); sys.exit(1)
      with open(sys.argv[1], 'w') as f: f.write(new)
      print("✅ PYTHONPATH injected")
      PYEOF
      fi
      
      launchctl bootout gui/501 "$PLIST" 2>/dev/null || true
      sleep 2
      launchctl bootstrap gui/501 "$PLIST"
      echo "🎉 Done"

      运行方式:

      hermes update && ./fix-hermes-plist.sh

      然后重新加载即可修复

      launchctl bootout gui/501 ~/Library/LaunchAgents/ai.hermes.gateway.plist
      sleep 2
      launchctl bootstrap gui/501 ~/Library/LaunchAgents/ai.hermes.gateway.plist

      1、 🔴 错误:Startup failed — “Open a project folder before starting the agent”

      原因:Pulsar ACP Agent 需要一个打开的项目文件夹作为工作目录(Working Directory),用于限制文件读写范围。
      修复:File → Open Folder… 打开你的项目目录,然后点击 Restart。

      源码依据(main.js → AgentSession.cwd()):

      cwd() {
        const paths = atom.project.getPaths();
        if (paths && paths.length > 0) {
          const cwd = paths[0];
          if (path.isAbsolute(cwd)) return cwd;
          throw new Error("Project folder must be an absolute path: " + cwd);
        }
        throw new Error("Open a project folder before starting the agent.");
      }

      2 🔴 错误:Startup failed — “Internal error”(Conda 环境问题)

      原因:Pulsar 作为 macOS GUI 应用启动子进程时,不会继承终端的 Conda 环境和 shell 配置(.zshrc、.bash_profile)。导致 hermes 命令找不到正确的 Python 解释器和依赖。
      症状:终端中 hermes acp –check 正常,但 Pulsar 中报 Internal error。
      修复方案 A:使用绝对路径(最简单)

      确保 config.cson 中的 command 使用 hermes 的绝对路径:

      command: "/Users/xbaby/.local/bin/hermes acp"

      3,🔴 错误:Model context window below minimum 64,000

      原因:Hermes Agent 在初始化时检查模型的上下文窗口大小,硬性要求 ≥ 64K tokens。这是因为 Agent 模式需要加载大量系统提示、工具定义和会话历史。

      修复方法:去后端部署llm大模型的配置里面设置上下文窗口,必要大于64K tokens。

    • #134691

      追光
      参与者

      4、 🔴 错误:”The configured agent does not support embedded context”

      原因:Hermes Agent 在 initialize 响应中声明的 promptCapabilities 只包含 image=True,缺少 embedded_context=True。Pulsar ACP Agent 插件在发送文件附件前会检查此能力声明。
      源码依据(server.py → HermesACPAgent.initialize()):

      问题的核心依然在于 Hermes Agent 没有向 Pulsar 声明它支持 embeddedContext。

      使用方式

      附加当前文件:右键编辑器 → “Add Active File to ACP Prompt”
      附加选中代码:选中文本 → 右键 → “Add Selection to ACP Prompt”
      附加图片:点击输入框旁的 “+” 按钮 → “Image”(需要 Agent 支持 image capability)
      拖拽图片:直接拖拽 PNG/JPEG/GIF/WebP 到输入区域(≤5MB)

      以下是去除所有包装脚本干扰后的最终纯净版修复方案:

      1. 核心修复:修改 Hermes 能力声明

      这是唯一需要做的代码修改。Pulsar 插件 (main.js) 在初始化时会检查 init.agentCapabilities.promptCapabilities.embeddedContext。如果为 false(默认值),它就会禁止附加文件。

      操作步骤:

      1. 打开文件:

      pulsar /Users/xbaby/.hermes/hermes-agent/acpadapter/server.py

      2. 找到 initialize 方法(大约在文件中后部),定位到 AgentCapabilities 的构建部分。

      3. 修改代码:
      将:

      promptcapabilities=PromptCapabilities(image=True),

      改为:

      promptcapabilities=PromptCapabilities(image=True, embeddedcontext=True),

      我在修改后,根据经验写了这个terminal修复命令,可以不打开文件就完成修复:

      cp ~/.hermes/hermes-agent/acp_adapter/server.py \
         ~/.hermes/hermes-agent/acp_adapter/server.py.bak
      
      sed -i '' 's/PromptCapabilities(image=True)/PromptCapabilities(image=True, embedded_context=True)/g' \
         ~/.hermes/hermes-agent/acp_adapter/server.py
      
      grep -n "embedded_context" ~/.hermes/hermes-agent/acp_adapter/server.py

      4. 保存文件。

      2. 配置 Pulsar (纯净版)

      既然不需要包装脚本,直接使用 Hermes 的绝对路径即可。Pulsar 的 cross-spawn 库能够处理绝对路径。

      操作步骤:

      1. 打开 Pulsar 配置 (Cmd+Shift+P – Pulsar ACP Agent: Edit Agents)。
      2. 确保配置如下(不要包含任何 .sh 脚本或 bash -c):

      \"pulsar-acp-agent\":
      activeAgentId: \"hermes\"
      agents:
      hermes:
      name: \"Hermes Agent\"
      command: \"/Users/xbaby/.local/bin/hermes acp\"
      version: 1

      注意:如果 /Users/xbaby/.local/bin/hermes 是一个 Python 脚本(通常带有 !/usr/bin/env python shebang),macOS 的 spawn 可以直接执行它。如果 Pulsar 报错说找不到文件或权限不足,请确保该文件有执行权限 (chmod +x /Users/xbaby/.local/bin/hermes)。

      3. 重启与验证

      1. 完全退出 Pulsar (Cmd+Q) 并重新打开。
      2. 打开你的项目文件夹。
      3. 按 Ctrl+Alt+A 启动面板。
      4. 点击 Restart 按钮(这会强制重新进行 ACP 握手,获取新的 capabilities)。
      5. 点击 More… 查看 Capabilities,确认 embeddedContext 显示为 true。
      6. 尝试右键文件 – Add Active File to ACP Prompt。

正在查看 1 条回复
  • 在下方一键注册,登录后就可以回复啦。