agent-gear 1.0.0

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.
Files changed (65) hide show
  1. package/AGENTS.md +67 -0
  2. package/dist/acp/bridge.d.ts +56 -0
  3. package/dist/acp/bridge.d.ts.map +1 -0
  4. package/dist/acp/bridge.js +295 -0
  5. package/dist/acp/bridge.js.map +1 -0
  6. package/dist/acp/detector.d.ts +13 -0
  7. package/dist/acp/detector.d.ts.map +1 -0
  8. package/dist/acp/detector.js +29 -0
  9. package/dist/acp/detector.js.map +1 -0
  10. package/dist/acp/spawner.d.ts +24 -0
  11. package/dist/acp/spawner.d.ts.map +1 -0
  12. package/dist/acp/spawner.js +82 -0
  13. package/dist/acp/spawner.js.map +1 -0
  14. package/dist/acp/sync-bridge.d.ts +21 -0
  15. package/dist/acp/sync-bridge.d.ts.map +1 -0
  16. package/dist/acp/sync-bridge.js +75 -0
  17. package/dist/acp/sync-bridge.js.map +1 -0
  18. package/dist/config.d.ts +22 -0
  19. package/dist/config.d.ts.map +1 -0
  20. package/dist/config.js +63 -0
  21. package/dist/config.js.map +1 -0
  22. package/dist/daemon.d.ts +5 -0
  23. package/dist/daemon.d.ts.map +1 -0
  24. package/dist/daemon.js +32 -0
  25. package/dist/daemon.js.map +1 -0
  26. package/dist/git-handler.d.ts +17 -0
  27. package/dist/git-handler.d.ts.map +1 -0
  28. package/dist/git-handler.js +60 -0
  29. package/dist/git-handler.js.map +1 -0
  30. package/dist/git-handler.test.d.ts +2 -0
  31. package/dist/git-handler.test.d.ts.map +1 -0
  32. package/dist/git-handler.test.js +127 -0
  33. package/dist/git-handler.test.js.map +1 -0
  34. package/dist/heartbeat.d.ts +6 -0
  35. package/dist/heartbeat.d.ts.map +1 -0
  36. package/dist/heartbeat.js +16 -0
  37. package/dist/heartbeat.js.map +1 -0
  38. package/dist/index.d.ts +3 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +52 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/socketio-client.d.ts +6 -0
  43. package/dist/socketio-client.d.ts.map +1 -0
  44. package/dist/socketio-client.js +385 -0
  45. package/dist/socketio-client.js.map +1 -0
  46. package/package.json +34 -0
  47. package/src/acp/bridge.ts +327 -0
  48. package/src/acp/detector.ts +40 -0
  49. package/src/acp/spawner.ts +94 -0
  50. package/src/acp/sync-bridge.ts +111 -0
  51. package/src/config.ts +75 -0
  52. package/src/daemon.ts +33 -0
  53. package/src/git-handler.test.ts +153 -0
  54. package/src/git-handler.ts +75 -0
  55. package/src/heartbeat.ts +18 -0
  56. package/src/index.ts +60 -0
  57. package/src/socketio-client.ts +497 -0
  58. package/tests/acp-bridge.test.ts +473 -0
  59. package/tests/acp-detector.test.ts +70 -0
  60. package/tests/acp-spawner.test.ts +149 -0
  61. package/tests/acp-sync-bridge.test.ts +263 -0
  62. package/tests/config.test.ts +166 -0
  63. package/tests/socketio-client.test.ts +196 -0
  64. package/tsconfig.json +21 -0
  65. package/vitest.config.ts +14 -0
@@ -0,0 +1,385 @@
1
+ import { io as createSocketIOClient } from 'socket.io-client';
2
+ import { hostname } from 'os';
3
+ import { readdir } from 'fs/promises';
4
+ import { join } from 'path';
5
+ import { homedir } from 'os';
6
+ import { Heartbeat } from './heartbeat.js';
7
+ import { clearConfigKey } from './config.js';
8
+ import { acpDetector } from './acp/detector.js';
9
+ import { AcpSessionBridge } from './acp/bridge.js';
10
+ import { AcpSyncBridge } from './acp/sync-bridge.js';
11
+ import { gitHandler } from './git-handler.js';
12
+ const CONTROLLER_VERSION = '1.0.0';
13
+ const acpBridges = new Map();
14
+ export function connectToServer(endpoint, key, options) {
15
+ const socket = createSocketIOClient(endpoint, {
16
+ transports: ['websocket'],
17
+ reconnection: true,
18
+ reconnectionDelay: 1000,
19
+ reconnectionDelayMax: 60000,
20
+ });
21
+ const heartbeat = new Heartbeat();
22
+ const controllerName = options?.serverName || hostname();
23
+ socket.on('connect', () => {
24
+ console.log(`Connected to ${endpoint}`);
25
+ socket.emit('register', {
26
+ key,
27
+ hostname: controllerName,
28
+ version: CONTROLLER_VERSION,
29
+ });
30
+ });
31
+ socket.on('registered', (data) => {
32
+ console.log(`Controller registered: ${data.controllerId}`);
33
+ heartbeat.start(() => socket.emit('heartbeat'));
34
+ });
35
+ socket.on('error', (data) => {
36
+ console.error(`Server error: ${data.code} - ${data.message}`);
37
+ if (data.code === 'KEY_ALREADY_ONLINE') {
38
+ console.error('This key is already in use on another machine.');
39
+ }
40
+ socket.disconnect();
41
+ process.exit(1);
42
+ });
43
+ socket.on('unregistered', () => {
44
+ console.log('Unregistered from server');
45
+ heartbeat.stop();
46
+ clearConfigKey();
47
+ socket.close();
48
+ process.exit(0);
49
+ });
50
+ socket.on('shutdown', (data) => {
51
+ console.log(`Shutdown requested: ${data.reason}`);
52
+ heartbeat.stop();
53
+ clearConfigKey();
54
+ socket.close();
55
+ process.exit(0);
56
+ });
57
+ // ACP events
58
+ socket.on('acp:check', async (data) => {
59
+ console.log('ACP check requested');
60
+ const servers = await acpDetector.detect();
61
+ socket.emit('acp:check:result', {
62
+ requestId: data.requestId,
63
+ servers,
64
+ });
65
+ });
66
+ socket.on('acp:start', async (data) => {
67
+ console.log(`[ACP ctrl] acp:start received: requestId=${data.requestId} sessionId=${data.sessionId} cwd=${data.cwd}`);
68
+ try {
69
+ const bridge = new AcpSessionBridge(socket, {
70
+ sessionId: data.sessionId,
71
+ cwd: data.cwd,
72
+ mcpServers: data.mcpServers,
73
+ });
74
+ acpBridges.set(data.sessionId, bridge);
75
+ const onInitialized = (payload) => {
76
+ if (payload.sessionId !== data.sessionId)
77
+ return;
78
+ bridge.off('acp:initialized', onInitialized);
79
+ bridge.off('acp:stopped', onStopped);
80
+ console.log(`[ACP ctrl] emitting acp:start:result: requestId=${data.requestId} sessionId=${data.sessionId} success=true externalSessionId=${payload.acpSessionId}`);
81
+ const result = {
82
+ requestId: data.requestId,
83
+ sessionId: data.sessionId,
84
+ success: true,
85
+ externalSessionId: payload.acpSessionId,
86
+ };
87
+ if (payload.modes)
88
+ result.modes = payload.modes;
89
+ if (payload.currentModeId)
90
+ result.currentModeId = payload.currentModeId;
91
+ if (payload.currentModel)
92
+ result.currentModel = payload.currentModel;
93
+ if (payload.availableModels)
94
+ result.availableModels = payload.availableModels;
95
+ if (payload.currentModelId)
96
+ result.currentModelId = payload.currentModelId;
97
+ socket.emit('acp:start:result', result);
98
+ };
99
+ const onStopped = (payload) => {
100
+ if (payload.sessionId !== data.sessionId)
101
+ return;
102
+ bridge.off('acp:initialized', onInitialized);
103
+ bridge.off('acp:stopped', onStopped);
104
+ acpBridges.delete(data.sessionId);
105
+ console.log(`[ACP ctrl] emitting acp:start:result: requestId=${data.requestId} sessionId=${data.sessionId} success=false`);
106
+ socket.emit('acp:start:result', {
107
+ requestId: data.requestId,
108
+ sessionId: data.sessionId,
109
+ success: false,
110
+ error: payload.error ?? `ACP process stopped during initialization: ${payload.reason}`,
111
+ });
112
+ };
113
+ bridge.on('acp:initialized', onInitialized);
114
+ bridge.on('acp:stopped', onStopped);
115
+ console.log(`[ACP ctrl] calling bridge.start() for session ${data.sessionId}`);
116
+ await bridge.start();
117
+ }
118
+ catch (error) {
119
+ console.error(`[ACP ctrl] bridge.start() failed: ${error.message}`);
120
+ socket.emit('acp:start:result', {
121
+ requestId: data.requestId,
122
+ sessionId: data.sessionId,
123
+ success: false,
124
+ error: error.message,
125
+ });
126
+ }
127
+ });
128
+ socket.on('acp:resume', async (data) => {
129
+ console.log(`[ACP ctrl] acp:resume received: requestId=${data.requestId} sessionId=${data.sessionId} externalSessionId=${data.externalSessionId}`);
130
+ try {
131
+ const bridge = new AcpSessionBridge(socket, {
132
+ sessionId: data.sessionId,
133
+ cwd: data.cwd,
134
+ });
135
+ acpBridges.set(data.sessionId, bridge);
136
+ const onInitialized = (payload) => {
137
+ if (payload.sessionId !== data.sessionId)
138
+ return;
139
+ bridge.off('acp:initialized', onInitialized);
140
+ bridge.off('acp:stopped', onStopped);
141
+ const result = {
142
+ requestId: data.requestId,
143
+ sessionId: data.sessionId,
144
+ success: true,
145
+ };
146
+ if (payload.modes)
147
+ result.modes = payload.modes;
148
+ if (payload.currentModeId)
149
+ result.currentModeId = payload.currentModeId;
150
+ if (payload.currentModel)
151
+ result.currentModel = payload.currentModel;
152
+ if (payload.availableModels)
153
+ result.availableModels = payload.availableModels;
154
+ if (payload.currentModelId)
155
+ result.currentModelId = payload.currentModelId;
156
+ socket.emit('acp:resume:result', result);
157
+ };
158
+ const onStopped = (payload) => {
159
+ if (payload.sessionId !== data.sessionId)
160
+ return;
161
+ bridge.off('acp:initialized', onInitialized);
162
+ bridge.off('acp:stopped', onStopped);
163
+ acpBridges.delete(data.sessionId);
164
+ socket.emit('acp:resume:result', {
165
+ requestId: data.requestId,
166
+ sessionId: data.sessionId,
167
+ success: false,
168
+ error: payload.error ?? `ACP resume failed: ${payload.reason}`,
169
+ });
170
+ };
171
+ bridge.on('acp:initialized', onInitialized);
172
+ bridge.on('acp:stopped', onStopped);
173
+ await bridge.resume(data.externalSessionId);
174
+ }
175
+ catch (error) {
176
+ console.error(`[ACP ctrl] bridge.resume() failed: ${error.message}`);
177
+ socket.emit('acp:resume:result', {
178
+ requestId: data.requestId,
179
+ sessionId: data.sessionId,
180
+ success: false,
181
+ error: error.message,
182
+ });
183
+ }
184
+ });
185
+ socket.on('acp:list-sessions', async (data) => {
186
+ console.log(`[ACP sync] acp:list-sessions received: requestId=${data.requestId} cwd=${data.cwd}`);
187
+ const bridge = new AcpSyncBridge({ cwd: data.cwd });
188
+ try {
189
+ await bridge.connect();
190
+ const result = await bridge.listSessions(data.cwd);
191
+ await bridge.disconnect();
192
+ socket.emit('acp:list-sessions:result', {
193
+ requestId: data.requestId,
194
+ success: true,
195
+ sessions: (result.sessions ?? []).map((s) => ({
196
+ sessionId: s.sessionId,
197
+ title: s.title ?? null,
198
+ cwd: s.cwd,
199
+ updatedAt: s.updatedAt ?? null,
200
+ })),
201
+ });
202
+ }
203
+ catch (error) {
204
+ await bridge.disconnect().catch(() => { });
205
+ console.error(`[ACP sync] list-sessions failed: ${error.message}`);
206
+ socket.emit('acp:list-sessions:result', {
207
+ requestId: data.requestId,
208
+ success: false,
209
+ error: error.message,
210
+ });
211
+ }
212
+ });
213
+ socket.on('acp:load-session', async (data) => {
214
+ console.log(`[ACP] load-session received: requestId=${data.requestId} sessionId=${data.sessionId} cwd=${data.cwd}`);
215
+ const bridge = new AcpSyncBridge({ cwd: data.cwd });
216
+ try {
217
+ await bridge.connect();
218
+ const { config, updates } = await bridge.loadSession(data.sessionId, data.cwd);
219
+ await bridge.disconnect(data.sessionId);
220
+ let title = null;
221
+ const messages = [];
222
+ for (const notification of updates) {
223
+ const update = notification.update;
224
+ let direction;
225
+ let type;
226
+ switch (update.sessionUpdate) {
227
+ case 'user_message_chunk':
228
+ direction = 'input';
229
+ type = 'text';
230
+ break;
231
+ case 'agent_message_chunk':
232
+ direction = 'output';
233
+ type = 'text';
234
+ break;
235
+ case 'tool_call':
236
+ case 'tool_call_update':
237
+ direction = 'output';
238
+ type = 'tool_call';
239
+ break;
240
+ case 'plan':
241
+ direction = 'output';
242
+ type = 'plan';
243
+ break;
244
+ case 'session_info_update':
245
+ direction = 'output';
246
+ type = 'text';
247
+ title = update.title ?? title;
248
+ break;
249
+ case 'usage_update':
250
+ case 'config_option_update':
251
+ case 'current_mode_update':
252
+ case 'available_commands_update':
253
+ default:
254
+ direction = 'output';
255
+ type = 'text';
256
+ break;
257
+ }
258
+ messages.push({
259
+ direction,
260
+ type,
261
+ content: JSON.stringify(update),
262
+ });
263
+ }
264
+ socket.emit('acp:load-session:result', {
265
+ requestId: data.requestId,
266
+ success: true,
267
+ sessionId: data.sessionId,
268
+ title,
269
+ });
270
+ for (let i = 0; i < messages.length; i++) {
271
+ const msg = messages[i];
272
+ socket.emit('acp:load-session:message', {
273
+ requestId: data.requestId,
274
+ direction: msg.direction,
275
+ type: msg.type,
276
+ content: msg.content,
277
+ });
278
+ if (i % 200 === 0) {
279
+ await new Promise(r => setTimeout(r, 0));
280
+ }
281
+ }
282
+ await new Promise(r => setTimeout(r, 5));
283
+ socket.emit('acp:load-session:complete', { requestId: data.requestId });
284
+ }
285
+ catch (error) {
286
+ await bridge.disconnect(data.sessionId).catch(() => { });
287
+ console.error(`[ACP] load-session FAILED: ${error.message}`);
288
+ console.log(`[ACP] emitting error result, socket.connected=${socket.connected}`);
289
+ socket.emit('acp:load-session:result', {
290
+ requestId: data.requestId,
291
+ success: false,
292
+ sessionId: data.sessionId,
293
+ error: error.message,
294
+ });
295
+ }
296
+ });
297
+ socket.on('acp:message', (data) => {
298
+ const bridge = acpBridges.get(data.sessionId);
299
+ if (bridge) {
300
+ bridge.sendInput(data.message);
301
+ }
302
+ });
303
+ socket.on('acp:cancel', (data) => {
304
+ const bridge = acpBridges.get(data.sessionId);
305
+ if (bridge) {
306
+ bridge.cancel();
307
+ }
308
+ });
309
+ socket.on('acp:stop', (data) => {
310
+ console.log(`ACP stop requested for session ${data.sessionId}`);
311
+ const bridge = acpBridges.get(data.sessionId);
312
+ if (bridge) {
313
+ bridge.stop();
314
+ acpBridges.delete(data.sessionId);
315
+ }
316
+ });
317
+ socket.on('acp:set-mode', (data) => {
318
+ console.log(`[ACP] acp:set-mode received: sessionId=${data.sessionId} modeId=${data.modeId}`);
319
+ const bridge = acpBridges.get(data.sessionId);
320
+ if (bridge) {
321
+ bridge.setMode(data.modeId).catch((err) => {
322
+ console.error(`[ACP] setMode failed: ${err.message}`);
323
+ });
324
+ }
325
+ });
326
+ socket.on('acp:set-model', (data) => {
327
+ console.log(`[ACP] acp:set-model received: sessionId=${data.sessionId} modelId=${data.modelId}`);
328
+ const bridge = acpBridges.get(data.sessionId);
329
+ if (bridge) {
330
+ bridge.setModel(data.modelId).catch((err) => {
331
+ console.error(`[ACP] setModel failed: ${err.message}`);
332
+ });
333
+ }
334
+ });
335
+ // File system events
336
+ socket.on('fs:browse', async (data) => {
337
+ console.log(`FS browse requested: requestId=${data.requestId} path=${data.path}`);
338
+ try {
339
+ const targetPath = data.path || homedir();
340
+ const entries = await readdir(targetPath, { withFileTypes: true });
341
+ const result = entries
342
+ .filter((entry) => !entry.name.startsWith('.'))
343
+ .map((entry) => ({
344
+ name: entry.name,
345
+ path: join(targetPath, entry.name),
346
+ isDirectory: entry.isDirectory(),
347
+ }))
348
+ .sort((a, b) => {
349
+ if (a.isDirectory !== b.isDirectory)
350
+ return a.isDirectory ? -1 : 1;
351
+ return a.name.localeCompare(b.name);
352
+ });
353
+ socket.emit('fs:browse:result', { requestId: data.requestId, entries: result });
354
+ }
355
+ catch (error) {
356
+ console.error(`FS browse error: ${error.message}`);
357
+ socket.emit('fs:browse:result', { requestId: data.requestId, entries: [] });
358
+ }
359
+ });
360
+ socket.on('fs:home', async (data) => {
361
+ console.log(`FS home requested: requestId=${data.requestId}`);
362
+ const homePath = homedir();
363
+ socket.emit('fs:home:result', { requestId: data.requestId, path: homePath });
364
+ });
365
+ socket.on('git:check', async (data) => {
366
+ const result = await gitHandler.check(data.path);
367
+ socket.emit('git:check:result', { requestId: data.requestId, ...result });
368
+ });
369
+ socket.on('git:init', async (data) => {
370
+ const result = await gitHandler.init(data.path);
371
+ socket.emit('git:init:result', { requestId: data.requestId, ...result });
372
+ });
373
+ socket.on('disconnect', (reason) => {
374
+ console.log(`Disconnected: ${reason}`);
375
+ heartbeat.stop();
376
+ });
377
+ socket.on('connect_error', (err) => {
378
+ console.error(`Connection error: ${err.message}`);
379
+ });
380
+ return socket;
381
+ }
382
+ export function unregister(socket) {
383
+ socket.emit('unregister', { reason: 'user_detach' });
384
+ }
385
+ //# sourceMappingURL=socketio-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socketio-client.js","sourceRoot":"","sources":["../src/socketio-client.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "agent-gear",
3
+ "version": "1.0.0",
4
+ "description": "ZeroAsh Agent Gear - Agent controller daemon",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "agent-gear": "dist/index.js"
8
+ },
9
+ "scripts": {
10
+ "dev": "tsx src/index.ts",
11
+ "build": "tsc",
12
+ "start": "node dist/index.js",
13
+ "test": "vitest run",
14
+ "test:coverage": "vitest run --coverage",
15
+ "test:watch": "vitest"
16
+ },
17
+ "keywords": [],
18
+ "author": "",
19
+ "license": "ISC",
20
+ "type": "module",
21
+ "dependencies": {
22
+ "@agentclientprotocol/sdk": "^0.22.1",
23
+ "commander": "^13.1.0",
24
+ "smol-toml": "^1.6.1",
25
+ "socket.io-client": "^4.8.1"
26
+ },
27
+ "devDependencies": {
28
+ "@types/node": "^25.8.0",
29
+ "@vitest/coverage-v8": "^4.1.6",
30
+ "tsx": "^4.22.1",
31
+ "typescript": "^6.0.3",
32
+ "vitest": "^4.1.6"
33
+ }
34
+ }