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 +7 -0
- package/lib/agent-discovery.js +1 -0
- package/lib/claude-runner-agents.js +1 -0
- package/lib/ws-handlers-session.js +2 -0
- package/package.json +1 -1
- package/static/app.js +1 -0
- package/static/js/conv-sidebar-actions.js +5 -1
- package/test.js +11 -0
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)
|
package/lib/agent-discovery.js
CHANGED
|
@@ -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
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() {
|
|
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);
|