agentgui 1.0.876 → 1.0.878

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## [Unreleased] - add Hermes Agent (Nous Research) as ACP-compatible agent
2
+
3
+ - lib/agent-discovery.js BINARIES: detect `hermes` CLI in PATH (icon 'h', protocol 'acp')
4
+ - lib/claude-runner-agents.js: register hermes with `hermes acp` entry and shared acpProtocolHandler. Uses stdio JSON-RPC transport (matches hermes-agent's `acp_adapter.entry` which routes stdout to ACP and stderr to logs).
5
+ - test.js: regression case asserting hermes registration shape (buildArgs/protocol/features).
6
+ - Install with: `curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash` then `pip install 'hermes-agent[acp]'` (or included in `[all]` / `[termux]` extras).
7
+
1
8
  ## [Unreleased] - GUI a11y pass
2
9
 
3
10
  - index.html: remove `maximum-scale=1.0` and `user-scalable=no` from viewport (WCAG 1.4.4 — low-vision users need pinch-zoom)
@@ -19,6 +19,7 @@ const BINARIES = [
19
19
  { cmd: 'mistral-vibe', id: 'mistral', name: 'Mistral Vibe', icon: 'M', protocol: 'acp' },
20
20
  { cmd: 'kiro', id: 'kiro', name: 'Kiro CLI', icon: 'k', protocol: 'acp' },
21
21
  { cmd: 'fast-agent', id: 'fast-agent', name: 'fast-agent', icon: 'F', protocol: 'acp' },
22
+ { cmd: 'hermes', id: 'hermes', name: 'Hermes Agent', icon: 'h', protocol: 'acp' },
22
23
  ];
23
24
 
24
25
  const CLI_WRAPPERS = [
@@ -102,3 +102,4 @@ registry.register({ id: 'mistral', name: 'Mistral Vibe', command: 'mistral-vibe'
102
102
  registry.register({ id: 'kiro', name: 'Kiro CLI', command: 'kiro', protocol: 'acp', supportsStdin: false, supportedFeatures: ['streaming', 'resume', 'acp-protocol'], buildArgs: () => ['acp'], protocolHandler: acpProtocolHandler });
103
103
  registry.register({ id: 'fast-agent', name: 'fast-agent', command: 'fast-agent', protocol: 'acp', supportsStdin: false, supportedFeatures: ['streaming', 'resume', 'acp-protocol'], buildArgs: () => ['acp'], protocolHandler: acpProtocolHandler });
104
104
  registry.register({ id: 'kilo', name: 'Kilo CLI', command: 'kilo', protocol: 'acp', supportsStdin: false, npxPackage: '@kilocode/cli', supportedFeatures: ['streaming', 'resume', 'acp-protocol', 'models'], buildArgs: () => ['acp'], protocolHandler: acpProtocolHandler });
105
+ registry.register({ id: 'hermes', name: 'Hermes Agent', command: 'hermes', protocol: 'acp', supportsStdin: false, supportedFeatures: ['streaming', 'resume', 'acp-protocol'], buildArgs: () => ['acp'], protocolHandler: acpProtocolHandler });
@@ -84,6 +84,8 @@ export function register(router, deps) {
84
84
  const agent = discoveredAgents.find(x => x.id === p.id);
85
85
  if (agent?.protocol === 'acp') {
86
86
  models = await queryModels(p.id);
87
+ } else if (agent?.protocol === 'cli-wrapper' && agent.acpId) {
88
+ models = await queryModels(agent.acpId);
87
89
  }
88
90
  }
89
91
  if (models.length > 0) modelCache.set(p.id, { models, ts: Date.now() });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentgui",
3
- "version": "1.0.876",
3
+ "version": "1.0.878",
4
4
  "description": "Multi-agent ACP client with real-time communication",
5
5
  "type": "module",
6
6
  "main": "electron/main.js",
package/static/app.js CHANGED
@@ -88,6 +88,7 @@ const BASE_URL = window.__BASE_URL || '';
88
88
  try {
89
89
  const base = window.__BASE_URL || '';
90
90
  const resp = await fetch(`${base}/api/conversations/archived`);
91
+ if (!resp.ok) throw new Error('HTTP ' + resp.status + ': ' + await resp.text());
91
92
  const { conversations } = await resp.json();
92
93
  if (!conversations || conversations.length === 0) {
93
94
  window.UIDialog?.alert('No archived conversations', 'Archived');
@@ -91,10 +91,14 @@ Object.assign(ConversationManager.prototype, {
91
91
  const startPath = this.folderBrowser.cwdPath || '~';
92
92
  this.folderBrowser.currentPath = startPath;
93
93
  this.folderBrowser.modal.classList.add('visible');
94
+ this.folderBrowser.modal.classList.add('open');
94
95
  this.loadFolders(startPath);
95
96
  },
96
97
 
97
- closeFolderBrowser() { this.folderBrowser.modal?.classList.remove('visible'); },
98
+ closeFolderBrowser() {
99
+ this.folderBrowser.modal?.classList.remove('visible');
100
+ this.folderBrowser.modal?.classList.remove('open');
101
+ },
98
102
 
99
103
  async loadFolders(dirPath) {
100
104
  this.folderBrowser.currentPath = dirPath;
package/test.js CHANGED
@@ -167,5 +167,16 @@ section('workflow-plugin: deps only list active plugins', async () => {
167
167
  assert.equal(typeof wp.default.init, 'function');
168
168
  });
169
169
 
170
+ section('agent-registry: hermes registered as stdio ACP', async () => {
171
+ const { registry } = await import('./lib/claude-runner-agents.js');
172
+ assert.ok(registry.has('hermes'));
173
+ const h = registry.get('hermes');
174
+ assert.equal(h.name, 'Hermes Agent');
175
+ assert.equal(h.command, 'hermes');
176
+ assert.equal(h.protocol, 'acp');
177
+ assert.deepEqual(h.buildArgs(), ['acp']);
178
+ assert.ok(h.supportedFeatures.includes('acp-protocol'));
179
+ });
180
+
170
181
  console.log(`\n${passed} passed, ${failed} failed`);
171
182
  process.exit(failed === 0 ? 0 : 1);