ultraclaude-agent 0.0.17 → 0.0.18

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.
@@ -86,6 +86,15 @@ vi.mock('../src/usage-sync.js', () => ({
86
86
  }),
87
87
  }));
88
88
 
89
+ // Mock socket-client
90
+ vi.mock('../src/socket-client.js', () => ({
91
+ init: vi.fn(),
92
+ addAccount: vi.fn(),
93
+ removeAccount: vi.fn(),
94
+ disconnectAll: vi.fn(),
95
+ getConnectedUserIds: vi.fn().mockReturnValue([]),
96
+ }));
97
+
89
98
  // Mock logger
90
99
  vi.mock('../src/logger.js', () => ({
91
100
  logger: {
@@ -84,6 +84,15 @@ vi.mock('../src/usage-sync.js', () => ({
84
84
  }),
85
85
  }));
86
86
 
87
+ // Mock socket-client
88
+ vi.mock('../src/socket-client.js', () => ({
89
+ init: vi.fn(),
90
+ addAccount: vi.fn(),
91
+ removeAccount: vi.fn(),
92
+ disconnectAll: vi.fn(),
93
+ getConnectedUserIds: vi.fn().mockReturnValue([]),
94
+ }));
95
+
87
96
  // Mock logger
88
97
  vi.mock('../src/logger.js', () => ({
89
98
  logger: {
@@ -0,0 +1,210 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+
3
+ // Mock socket.io-client
4
+ const mockOn = vi.fn().mockReturnThis();
5
+ const mockDisconnect = vi.fn().mockReturnThis();
6
+ const mockSocket = {
7
+ on: mockOn,
8
+ disconnect: mockDisconnect,
9
+ id: 'mock-socket-id',
10
+ connected: true,
11
+ };
12
+ const mockIo = vi.fn().mockReturnValue(mockSocket);
13
+
14
+ vi.mock('socket.io-client', () => ({
15
+ io: (...args: unknown[]) => mockIo(...args),
16
+ }));
17
+
18
+ // Mock logger
19
+ vi.mock('../src/logger.js', () => ({
20
+ logger: {
21
+ child: () => ({
22
+ info: vi.fn(),
23
+ warn: vi.fn(),
24
+ error: vi.fn(),
25
+ debug: vi.fn(),
26
+ }),
27
+ info: vi.fn(),
28
+ warn: vi.fn(),
29
+ error: vi.fn(),
30
+ debug: vi.fn(),
31
+ },
32
+ }));
33
+
34
+ describe('socket-client', () => {
35
+ beforeEach(() => {
36
+ vi.clearAllMocks();
37
+ // Each test gets a fresh socket mock
38
+ mockIo.mockReturnValue({
39
+ on: mockOn,
40
+ disconnect: mockDisconnect,
41
+ id: 'mock-socket-id',
42
+ connected: true,
43
+ });
44
+ });
45
+
46
+ // Re-import module fresh for each describe block to reset module state
47
+ async function loadModule() {
48
+ vi.resetModules();
49
+ return import('../src/socket-client.js');
50
+ }
51
+
52
+ describe('init', () => {
53
+ it('creates one socket per credential entry', async () => {
54
+ const mod = await loadModule();
55
+ const creds = new Map([
56
+ ['user-1', { apiKey: 'key-1' }],
57
+ ['user-2', { apiKey: 'key-2' }],
58
+ ]);
59
+
60
+ mod.init('http://localhost:3000', creds);
61
+
62
+ expect(mockIo).toHaveBeenCalledTimes(2);
63
+ expect(mockIo).toHaveBeenCalledWith('http://localhost:3000', {
64
+ transports: ['websocket'],
65
+ path: '/socket.io',
66
+ auth: { token: 'key-1' },
67
+ forceNew: true,
68
+ });
69
+ expect(mockIo).toHaveBeenCalledWith('http://localhost:3000', {
70
+ transports: ['websocket'],
71
+ path: '/socket.io',
72
+ auth: { token: 'key-2' },
73
+ forceNew: true,
74
+ });
75
+ });
76
+
77
+ it('is idempotent — disconnects existing sockets before creating new ones', async () => {
78
+ const mod = await loadModule();
79
+
80
+ // First init
81
+ mod.init('http://localhost:3000', new Map([['user-1', { apiKey: 'key-1' }]]));
82
+ expect(mockIo).toHaveBeenCalledTimes(1);
83
+
84
+ // Second init — should disconnect first socket, then create new one
85
+ mod.init('http://localhost:3000', new Map([['user-1', { apiKey: 'key-new' }]]));
86
+ expect(mockDisconnect).toHaveBeenCalled();
87
+ expect(mockIo).toHaveBeenCalledTimes(2);
88
+ });
89
+
90
+ it('registers connect, disconnect, and connect_error handlers', async () => {
91
+ const mod = await loadModule();
92
+ mod.init('http://localhost:3000', new Map([['user-1', { apiKey: 'key-1' }]]));
93
+
94
+ const registeredEvents = mockOn.mock.calls.map((call: unknown[]) => call[0]);
95
+ expect(registeredEvents).toContain('connect');
96
+ expect(registeredEvents).toContain('disconnect');
97
+ expect(registeredEvents).toContain('connect_error');
98
+ });
99
+ });
100
+
101
+ describe('addAccount', () => {
102
+ it('creates a new connection', async () => {
103
+ const mod = await loadModule();
104
+ mod.addAccount('http://localhost:3000', 'user-1', 'key-1');
105
+
106
+ expect(mockIo).toHaveBeenCalledTimes(1);
107
+ expect(mockIo).toHaveBeenCalledWith('http://localhost:3000', {
108
+ transports: ['websocket'],
109
+ path: '/socket.io',
110
+ auth: { token: 'key-1' },
111
+ forceNew: true,
112
+ });
113
+ expect(mod.getConnectedUserIds()).toEqual(['user-1']);
114
+ });
115
+
116
+ it('disconnects existing socket before replacing with new one', async () => {
117
+ const firstSocket = {
118
+ on: vi.fn().mockReturnThis(),
119
+ disconnect: vi.fn().mockReturnThis(),
120
+ id: 'first-socket',
121
+ connected: true,
122
+ };
123
+ const secondSocket = {
124
+ on: vi.fn().mockReturnThis(),
125
+ disconnect: vi.fn().mockReturnThis(),
126
+ id: 'second-socket',
127
+ connected: true,
128
+ };
129
+ mockIo.mockReturnValueOnce(firstSocket).mockReturnValueOnce(secondSocket);
130
+
131
+ const mod = await loadModule();
132
+ mod.addAccount('http://localhost:3000', 'user-1', 'key-1');
133
+ mod.addAccount('http://localhost:3000', 'user-1', 'key-new');
134
+
135
+ expect(firstSocket.disconnect).toHaveBeenCalled();
136
+ expect(mockIo).toHaveBeenCalledTimes(2);
137
+ expect(mod.getConnectedUserIds()).toEqual(['user-1']);
138
+ });
139
+ });
140
+
141
+ describe('removeAccount', () => {
142
+ it('disconnects and removes socket', async () => {
143
+ const socket = {
144
+ on: vi.fn().mockReturnThis(),
145
+ disconnect: vi.fn().mockReturnThis(),
146
+ id: 'socket-1',
147
+ connected: true,
148
+ };
149
+ mockIo.mockReturnValue(socket);
150
+
151
+ const mod = await loadModule();
152
+ mod.addAccount('http://localhost:3000', 'user-1', 'key-1');
153
+ expect(mod.getConnectedUserIds()).toEqual(['user-1']);
154
+
155
+ mod.removeAccount('user-1');
156
+ expect(socket.disconnect).toHaveBeenCalled();
157
+ expect(mod.getConnectedUserIds()).toEqual([]);
158
+ });
159
+
160
+ it('is a no-op for unknown userId', async () => {
161
+ const mod = await loadModule();
162
+ mod.removeAccount('nonexistent');
163
+ expect(mod.getConnectedUserIds()).toEqual([]);
164
+ });
165
+ });
166
+
167
+ describe('disconnectAll', () => {
168
+ it('disconnects all sockets and clears the map', async () => {
169
+ const socket1 = {
170
+ on: vi.fn().mockReturnThis(),
171
+ disconnect: vi.fn().mockReturnThis(),
172
+ id: 'socket-1',
173
+ };
174
+ const socket2 = {
175
+ on: vi.fn().mockReturnThis(),
176
+ disconnect: vi.fn().mockReturnThis(),
177
+ id: 'socket-2',
178
+ };
179
+ mockIo.mockReturnValueOnce(socket1).mockReturnValueOnce(socket2);
180
+
181
+ const mod = await loadModule();
182
+ mod.addAccount('http://localhost:3000', 'user-1', 'key-1');
183
+ mod.addAccount('http://localhost:3000', 'user-2', 'key-2');
184
+ expect(mod.getConnectedUserIds()).toHaveLength(2);
185
+
186
+ mod.disconnectAll();
187
+ expect(socket1.disconnect).toHaveBeenCalled();
188
+ expect(socket2.disconnect).toHaveBeenCalled();
189
+ expect(mod.getConnectedUserIds()).toEqual([]);
190
+ });
191
+ });
192
+
193
+ describe('getConnectedUserIds', () => {
194
+ it('returns empty array when no sockets exist', async () => {
195
+ const mod = await loadModule();
196
+ expect(mod.getConnectedUserIds()).toEqual([]);
197
+ });
198
+
199
+ it('returns all user IDs with active socket entries', async () => {
200
+ const mod = await loadModule();
201
+ mod.addAccount('http://localhost:3000', 'user-1', 'key-1');
202
+ mod.addAccount('http://localhost:3000', 'user-2', 'key-2');
203
+
204
+ const ids = mod.getConnectedUserIds();
205
+ expect(ids).toHaveLength(2);
206
+ expect(ids).toContain('user-1');
207
+ expect(ids).toContain('user-2');
208
+ });
209
+ });
210
+ });
@@ -0,0 +1,242 @@
1
+ /**
2
+ * B-001 regression test: Section reordering triggers sync push with updated positions.
3
+ *
4
+ * When sections are reordered in a markdown file (positions change but content stays
5
+ * the same), the diff logic must detect the position change and push the updated sections.
6
+ */
7
+
8
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
9
+ import { join } from 'node:path';
10
+ import { mkdtemp, writeFile, mkdir, rm } from 'node:fs/promises';
11
+ import { tmpdir } from 'node:os';
12
+
13
+ // Mock fetch globally
14
+ const mockFetch = vi.fn();
15
+ vi.stubGlobal('fetch', mockFetch);
16
+
17
+ // Mock config module
18
+ vi.mock('../src/config.js', () => ({
19
+ loadCredentials: vi.fn().mockResolvedValue({
20
+ apiKey: 'test-api-key',
21
+ userId: 'test-user',
22
+ serverUrl: 'http://localhost:3000',
23
+ }),
24
+ getServerUrl: vi.fn().mockReturnValue('http://localhost:3000'),
25
+ getProjectId: vi.fn().mockResolvedValue('test-project-id'),
26
+ writeProjectId: vi.fn().mockResolvedValue(undefined),
27
+ paths: {
28
+ claudeProjects: '/tmp/test-claude-projects',
29
+ projectIdFile: '.claude/ultra/project-id',
30
+ oldConfigDir: '/tmp/test-old-config',
31
+ },
32
+ }));
33
+
34
+ // Mock logger
35
+ vi.mock('../src/logger.js', () => ({
36
+ logger: {
37
+ child: () => ({
38
+ info: vi.fn(),
39
+ warn: vi.fn(),
40
+ error: vi.fn(),
41
+ debug: vi.fn(),
42
+ }),
43
+ info: vi.fn(),
44
+ warn: vi.fn(),
45
+ error: vi.fn(),
46
+ debug: vi.fn(),
47
+ },
48
+ }));
49
+
50
+ const testCreds = { apiKey: 'test-api-key', userId: 'test-user', serverUrl: 'http://localhost:3000' };
51
+
52
+ describe('B-001 regression — section reordering triggers sync push', () => {
53
+ let tempDir: string;
54
+
55
+ beforeEach(async () => {
56
+ vi.resetModules();
57
+ mockFetch.mockReset();
58
+ tempDir = await mkdtemp(join(tmpdir(), 'agent-reorder-test-'));
59
+ await mkdir(join(tempDir, 'documentation'), { recursive: true });
60
+ });
61
+
62
+ afterEach(async () => {
63
+ await rm(tempDir, { recursive: true, force: true });
64
+ });
65
+
66
+ it('pushes sections with updated positions when sections are reordered', async () => {
67
+ const { syncMarkdownFile } = await import('../src/sync.js');
68
+
69
+ const filePath = join(tempDir, 'documentation', 'test.md');
70
+
71
+ // Step 1: Initial push with sections A, B, C at positions 0, 1, 2
72
+ const initialContent = '# A\n\nContent A.\n\n# B\n\nContent B.\n\n# C\n\nContent C.';
73
+ await writeFile(filePath, initialContent);
74
+
75
+ // First call pushes all sections (cache is empty)
76
+ mockFetch.mockResolvedValueOnce({
77
+ ok: true,
78
+ json: async () => ({ data: { upserted: 3 } }),
79
+ });
80
+
81
+ const firstCount = await syncMarkdownFile('test-project-id', tempDir, filePath, testCreds);
82
+ expect(firstCount).toBe(3);
83
+
84
+ // Verify positions in first push
85
+ const firstPostCall = mockFetch.mock.calls.find(
86
+ (call: unknown[]) =>
87
+ (call[1] as { method: string }).method === 'POST' &&
88
+ (call[0] as string).includes('/api/sync/sections'),
89
+ );
90
+ expect(firstPostCall).toBeDefined();
91
+ const firstBody = JSON.parse((firstPostCall![1] as { body: string }).body);
92
+ expect(firstBody.sections).toHaveLength(3);
93
+ expect(firstBody.sections[0].slug).toBe('a');
94
+ expect(firstBody.sections[0].position).toBe(0);
95
+ expect(firstBody.sections[1].slug).toBe('b');
96
+ expect(firstBody.sections[1].position).toBe(1);
97
+ expect(firstBody.sections[2].slug).toBe('c');
98
+ expect(firstBody.sections[2].position).toBe(2);
99
+
100
+ mockFetch.mockReset();
101
+
102
+ // Step 2: Reorder sections to B, A, C (same content, different positions)
103
+ const reorderedContent = '# B\n\nContent B.\n\n# A\n\nContent A.\n\n# C\n\nContent C.';
104
+ await writeFile(filePath, reorderedContent);
105
+
106
+ mockFetch.mockResolvedValueOnce({
107
+ ok: true,
108
+ json: async () => ({ data: { upserted: 2 } }),
109
+ });
110
+
111
+ const secondCount = await syncMarkdownFile('test-project-id', tempDir, filePath, testCreds);
112
+
113
+ // Step 3: Assert the second call pushes sections with updated positions
114
+ // B moved from position 1 → 0, A moved from position 0 → 1
115
+ // C stayed at position 2 — should NOT be pushed
116
+ expect(secondCount).toBe(2);
117
+
118
+ const secondPostCall = mockFetch.mock.calls.find(
119
+ (call: unknown[]) =>
120
+ (call[1] as { method: string }).method === 'POST' &&
121
+ (call[0] as string).includes('/api/sync/sections'),
122
+ );
123
+ expect(secondPostCall).toBeDefined();
124
+ const secondBody = JSON.parse((secondPostCall![1] as { body: string }).body);
125
+
126
+ // Only A and B should be pushed (position changed), not C
127
+ expect(secondBody.sections).toHaveLength(2);
128
+
129
+ const pushedSlugs = secondBody.sections.map((s: { slug: string }) => s.slug).sort();
130
+ expect(pushedSlugs).toEqual(['a', 'b']);
131
+
132
+ // Verify the pushed positions are correct
133
+ const sectionA = secondBody.sections.find((s: { slug: string }) => s.slug === 'a');
134
+ const sectionB = secondBody.sections.find((s: { slug: string }) => s.slug === 'b');
135
+ expect(sectionB.position).toBe(0); // B is now first
136
+ expect(sectionA.position).toBe(1); // A is now second
137
+ });
138
+
139
+ it('does not push sections when neither content nor position changed', async () => {
140
+ const { syncMarkdownFile } = await import('../src/sync.js');
141
+
142
+ const filePath = join(tempDir, 'documentation', 'test.md');
143
+ const content = '# A\n\nContent A.\n\n# B\n\nContent B.';
144
+ await writeFile(filePath, content);
145
+
146
+ // First push
147
+ mockFetch.mockResolvedValueOnce({
148
+ ok: true,
149
+ json: async () => ({ data: { upserted: 2 } }),
150
+ });
151
+ await syncMarkdownFile('test-project-id', tempDir, filePath, testCreds);
152
+ mockFetch.mockReset();
153
+
154
+ // Second push — same content, same order
155
+ const secondCount = await syncMarkdownFile('test-project-id', tempDir, filePath, testCreds);
156
+
157
+ // No sections changed — no POST should be made
158
+ expect(secondCount).toBe(0);
159
+ expect(mockFetch).not.toHaveBeenCalled();
160
+ });
161
+
162
+ it('manifest load → first sync (no push, positions populated) → reorder detected', async () => {
163
+ // This is the critical B-001 scenario:
164
+ // 1. Daemon starts, loads manifest (hashes only, no positions)
165
+ // 2. First sync: content unchanged → no push, but positions must be populated
166
+ // 3. User reorders sections → position change detected → push triggered
167
+
168
+ const filePath = join(tempDir, 'documentation', 'test.md');
169
+ const content = '# A\n\nContent A.\n\n# B\n\nContent B.';
170
+ await writeFile(filePath, content);
171
+
172
+ // Step 0: Compute real content hashes by doing a throwaway sync in an isolated module
173
+ vi.resetModules();
174
+ const probe = await import('../src/sync.js');
175
+ mockFetch.mockResolvedValueOnce({
176
+ ok: true,
177
+ json: async () => ({ data: { upserted: 2 } }),
178
+ });
179
+ await probe.syncMarkdownFile('test-project-id', tempDir, filePath, testCreds);
180
+ const probeCall = mockFetch.mock.calls.find(
181
+ (call: unknown[]) =>
182
+ (call[1] as { method: string }).method === 'POST' &&
183
+ (call[0] as string).includes('/api/sync/sections'),
184
+ );
185
+ const probeBody = JSON.parse((probeCall![1] as { body: string }).body);
186
+ const hashA = probeBody.sections.find((s: { slug: string }) => s.slug === 'a').content_hash;
187
+ const hashB = probeBody.sections.find((s: { slug: string }) => s.slug === 'b').content_hash;
188
+
189
+ // Step 1: Fresh daemon startup — load manifest with real hashes
190
+ mockFetch.mockReset();
191
+ vi.resetModules();
192
+ const fresh = await import('../src/sync.js');
193
+
194
+ mockFetch.mockResolvedValueOnce({
195
+ ok: true,
196
+ json: async () => ({
197
+ data: {
198
+ files: {
199
+ 'test.md': {
200
+ hash: null,
201
+ sections: { a: hashA, b: hashB },
202
+ },
203
+ },
204
+ },
205
+ }),
206
+ });
207
+ await fresh.loadManifestIntoCache('test-project-id', testCreds);
208
+ mockFetch.mockReset();
209
+
210
+ // Step 2: First sync — hashes match manifest, no push expected.
211
+ // But positions must be populated so future reorders are detectable.
212
+ const firstCount = await fresh.syncMarkdownFile('test-project-id', tempDir, filePath, testCreds);
213
+ expect(firstCount).toBe(0);
214
+ expect(mockFetch).not.toHaveBeenCalled();
215
+
216
+ // Step 3: Reorder sections (B, A) — same content, different positions
217
+ const reordered = '# B\n\nContent B.\n\n# A\n\nContent A.';
218
+ await writeFile(filePath, reordered);
219
+
220
+ mockFetch.mockResolvedValueOnce({
221
+ ok: true,
222
+ json: async () => ({ data: { upserted: 2 } }),
223
+ });
224
+
225
+ const reorderCount = await fresh.syncMarkdownFile('test-project-id', tempDir, filePath, testCreds);
226
+
227
+ // Both sections must be pushed — positions changed
228
+ expect(reorderCount).toBe(2);
229
+
230
+ const postCall = mockFetch.mock.calls.find(
231
+ (call: unknown[]) =>
232
+ (call[1] as { method: string }).method === 'POST' &&
233
+ (call[0] as string).includes('/api/sync/sections'),
234
+ );
235
+ expect(postCall).toBeDefined();
236
+ const body = JSON.parse((postCall![1] as { body: string }).body);
237
+ const sectionA = body.sections.find((s: { slug: string }) => s.slug === 'a');
238
+ const sectionB = body.sections.find((s: { slug: string }) => s.slug === 'b');
239
+ expect(sectionB.position).toBe(0); // B moved to first
240
+ expect(sectionA.position).toBe(1); // A moved to second
241
+ });
242
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AA6BA,OAAO,EAAW,KAAK,MAAM,EAAyB,MAAM,sBAAsB,CAAC;AAkBnF;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CA6BpD;AAYD,uFAAuF;AACvF,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAGnG;AAED,wBAAgB,oBAAoB,IAAI,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAE5E;AAED,KAAK,gBAAgB,GAAG,eAAe,GAAG,aAAa,GAAG,iBAAiB,CAAC;AAE5E;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAqG3E;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CA+ChD;AA2KD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/C,QAAQ,EAAE,mBAAmB,EAAE,CAAC;CACjC;AAsBD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAqD/E;AAID,UAAU,UAAU;IAClB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CAiBxD"}
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAW,KAAK,MAAM,EAAyB,MAAM,sBAAsB,CAAC;AAkBnF;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CA6BpD;AAYD,uFAAuF;AACvF,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAGnG;AAED,wBAAgB,oBAAoB,IAAI,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAE5E;AAED,KAAK,gBAAgB,GAAG,eAAe,GAAG,aAAa,GAAG,iBAAiB,CAAC;AAE5E;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAwG3E;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAkDhD;AA0LD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/C,QAAQ,EAAE,mBAAmB,EAAE,CAAC;CACjC;AAsBD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAqD/E;AAID,UAAU,UAAU;IAClB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CAiBxD"}
package/dist/daemon.js CHANGED
@@ -10,6 +10,7 @@ import { startProjectWatcher } from './watcher.js';
10
10
  import { createProjectOnServer, initialSync, fetchManifest, stopSync, pushVersionMetadata } from './sync.js';
11
11
  import { startUsageWatcher } from './usage-sync.js';
12
12
  import { startStatusLoop, readStatusFile, removeStatusFile } from './status.js';
13
+ import * as socketClient from './socket-client.js';
13
14
  import { logger } from './logger.js';
14
15
  import { ok, err } from '@ultra-claude/shared';
15
16
  /**
@@ -97,6 +98,8 @@ export async function startDaemon() {
97
98
  }
98
99
  activeCredentials = allCreds;
99
100
  log.info({ serverUrl, accountCount: allCreds.size }, 'Loaded accounts');
101
+ // Connect Socket.IO clients for agent presence signaling
102
+ socketClient.init(serverUrl, allCreds);
100
103
  running = true;
101
104
  daemonStartedAt = new Date().toISOString();
102
105
  await writePid(serverUrl);
@@ -193,6 +196,8 @@ export async function stopDaemon() {
193
196
  const closePromises = Array.from(activeWatchers.values()).map((w) => w.close());
194
197
  await Promise.all(closePromises);
195
198
  activeWatchers.clear();
199
+ // Disconnect presence sockets before stopping sync
200
+ socketClient.disconnectAll();
196
201
  stopSync();
197
202
  if (activeServerUrl) {
198
203
  await removePid(activeServerUrl);
@@ -317,6 +322,19 @@ async function reconcileWatchers() {
317
322
  await stopDaemon();
318
323
  return;
319
324
  }
325
+ // Reconcile presence sockets: diff current sockets against fresh credentials
326
+ const oldSocketUserIds = new Set(socketClient.getConnectedUserIds());
327
+ const newUserIds = new Set(freshCreds.keys());
328
+ for (const userId of oldSocketUserIds) {
329
+ if (!newUserIds.has(userId)) {
330
+ socketClient.removeAccount(userId);
331
+ }
332
+ }
333
+ for (const [userId, creds] of freshCreds) {
334
+ if (!oldSocketUserIds.has(userId)) {
335
+ socketClient.addAccount(serverUrl, userId, creds.apiKey);
336
+ }
337
+ }
320
338
  activeCredentials = freshCreds;
321
339
  const registry = await loadRegistry();
322
340
  const registryPaths = new Set(registry.projects.map((p) => p.path));
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Initialize socket connections for all accounts.
3
+ * Idempotent — disconnects existing sockets before creating new ones.
4
+ */
5
+ export declare function init(serverUrl: string, credentials: Map<string, {
6
+ apiKey: string;
7
+ }>): void;
8
+ /**
9
+ * Connect a new socket for an account. Safe to call if already connected —
10
+ * disconnects the old socket first.
11
+ */
12
+ export declare function addAccount(serverUrl: string, userId: string, apiKey: string): void;
13
+ /**
14
+ * Disconnect and remove a socket for an account.
15
+ * socket.disconnect() sets reason to 'io client disconnect' — no auto-reconnect.
16
+ */
17
+ export declare function removeAccount(userId: string): void;
18
+ /**
19
+ * Disconnect all sockets. Used during daemon shutdown.
20
+ */
21
+ export declare function disconnectAll(): void;
22
+ /**
23
+ * Get the set of user IDs with active socket entries.
24
+ * Used by reconcileWatchers() to diff against fresh credentials.
25
+ */
26
+ export declare function getConnectedUserIds(): string[];
27
+ //# sourceMappingURL=socket-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket-client.d.ts","sourceRoot":"","sources":["../src/socket-client.ts"],"names":[],"mappings":"AAaA;;;GAGG;AACH,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CAQ1F;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAkClF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAOlD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAMpC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAE9C"}
@@ -0,0 +1,84 @@
1
+ // Socket.IO client manager — maintains one socket per dashboard account for presence signaling.
2
+ // The dashboard server's isAgentConnected() checks for sockets with authType === 'api_key'
3
+ // in the user:{userId} room. This module provides the client-side connections that make
4
+ // that check return true while the agent daemon is running.
5
+ import { io } from 'socket.io-client';
6
+ import { logger } from './logger.js';
7
+ const log = logger.child({ module: 'socket-client' });
8
+ // Module-level state (matches daemon.ts singleton pattern)
9
+ const sockets = new Map();
10
+ /**
11
+ * Initialize socket connections for all accounts.
12
+ * Idempotent — disconnects existing sockets before creating new ones.
13
+ */
14
+ export function init(serverUrl, credentials) {
15
+ disconnectAll();
16
+ for (const [userId, creds] of credentials) {
17
+ addAccount(serverUrl, userId, creds.apiKey);
18
+ }
19
+ log.info({ accountCount: credentials.size }, 'Socket client initialized');
20
+ }
21
+ /**
22
+ * Connect a new socket for an account. Safe to call if already connected —
23
+ * disconnects the old socket first.
24
+ */
25
+ export function addAccount(serverUrl, userId, apiKey) {
26
+ const existing = sockets.get(userId);
27
+ if (existing) {
28
+ existing.disconnect();
29
+ sockets.delete(userId);
30
+ }
31
+ // forceNew: true prevents Manager sharing across accounts — each account gets
32
+ // its own WebSocket connection with its own auth credentials.
33
+ // socket.io-client handles reconnection with exponential backoff automatically
34
+ // (reconnection: true is the default). This is the correct approach for a daemon
35
+ // that should maintain presence through server restarts and network interruptions.
36
+ const socket = io(serverUrl, {
37
+ transports: ['websocket'],
38
+ path: '/socket.io',
39
+ auth: { token: apiKey },
40
+ forceNew: true,
41
+ });
42
+ // Register event handlers at the top level (not inside 'connect') to avoid
43
+ // accumulating duplicate listeners on reconnect.
44
+ socket.on('connect', () => {
45
+ log.info({ userId, socketId: socket.id }, 'Socket connected');
46
+ });
47
+ socket.on('disconnect', (reason) => {
48
+ log.info({ userId, reason }, 'Socket disconnected');
49
+ });
50
+ socket.on('connect_error', (error) => {
51
+ log.warn({ userId, err: error }, 'Socket connection error');
52
+ });
53
+ sockets.set(userId, socket);
54
+ }
55
+ /**
56
+ * Disconnect and remove a socket for an account.
57
+ * socket.disconnect() sets reason to 'io client disconnect' — no auto-reconnect.
58
+ */
59
+ export function removeAccount(userId) {
60
+ const socket = sockets.get(userId);
61
+ if (socket) {
62
+ socket.disconnect();
63
+ sockets.delete(userId);
64
+ log.info({ userId }, 'Socket removed');
65
+ }
66
+ }
67
+ /**
68
+ * Disconnect all sockets. Used during daemon shutdown.
69
+ */
70
+ export function disconnectAll() {
71
+ for (const [userId, socket] of sockets) {
72
+ socket.disconnect();
73
+ log.debug({ userId }, 'Socket disconnected during cleanup');
74
+ }
75
+ sockets.clear();
76
+ }
77
+ /**
78
+ * Get the set of user IDs with active socket entries.
79
+ * Used by reconcileWatchers() to diff against fresh credentials.
80
+ */
81
+ export function getConnectedUserIds() {
82
+ return Array.from(sockets.keys());
83
+ }
84
+ //# sourceMappingURL=socket-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket-client.js","sourceRoot":"","sources":["../src/socket-client.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,2FAA2F;AAC3F,wFAAwF;AACxF,4DAA4D;AAE5D,OAAO,EAAE,EAAE,EAAe,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;AAEtD,2DAA2D;AAC3D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE1C;;;GAGG;AACH,MAAM,UAAU,IAAI,CAAC,SAAiB,EAAE,WAA4C;IAClF,aAAa,EAAE,CAAC;IAEhB,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC;QAC1C,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE,2BAA2B,CAAC,CAAC;AAC5E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,SAAiB,EAAE,MAAc,EAAE,MAAc;IAC1E,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IAED,8EAA8E;IAC9E,8DAA8D;IAC9D,+EAA+E;IAC/E,iFAAiF;IACjF,mFAAmF;IACnF,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,EAAE;QAC3B,UAAU,EAAE,CAAC,WAAW,CAAC;QACzB,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;QACvB,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IAEH,2EAA2E;IAC3E,iDAAiD;IACjD,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACxB,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,kBAAkB,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE;QACjC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE;QACnC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,yBAAyB,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,UAAU,EAAE,CAAC;QACpB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvB,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACvC,MAAM,CAAC,UAAU,EAAE,CAAC;QACpB,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,oCAAoC,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AACpC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}
package/dist/sync.js CHANGED
@@ -14,7 +14,7 @@ let retryTimer = null;
14
14
  function getOrCreateState(projectId) {
15
15
  let state = projectStates.get(projectId);
16
16
  if (!state) {
17
- state = { sectionHashes: new Map(), fileHashes: new Map(), needsManifestResync: false };
17
+ state = { sectionHashes: new Map(), sectionPositions: new Map(), fileHashes: new Map(), needsManifestResync: false };
18
18
  projectStates.set(projectId, state);
19
19
  }
20
20
  return state;
@@ -87,6 +87,7 @@ export async function loadManifestIntoCache(projectId, credentials) {
87
87
  return;
88
88
  }
89
89
  state.sectionHashes.clear();
90
+ state.sectionPositions.clear();
90
91
  for (const entry of result.data) {
91
92
  state.sectionHashes.set(`${entry.filePath}#${entry.headingSlug}`, entry.contentHash);
92
93
  }
@@ -117,8 +118,10 @@ export async function syncMarkdownFile(projectId, projectPath, absoluteFilePath,
117
118
  for (const section of sections) {
118
119
  const key = `${relativePath}#${section.slug}`;
119
120
  currentSlugs.add(key);
120
- const cached = state.sectionHashes.get(key);
121
- if (cached !== section.contentHash) {
121
+ const cachedHash = state.sectionHashes.get(key);
122
+ const cachedPos = state.sectionPositions.get(key);
123
+ const posChanged = cachedPos !== undefined && cachedPos !== section.position;
124
+ if (cachedHash !== section.contentHash || posChanged) {
122
125
  changedSections.push(section);
123
126
  }
124
127
  }
@@ -129,6 +132,11 @@ export async function syncMarkdownFile(projectId, projectPath, absoluteFilePath,
129
132
  removedSlugs.push(key.split('#')[1]);
130
133
  }
131
134
  }
135
+ // Always update positions from current file parse so position-only reorders
136
+ // are detectable on next diff (positions aren't in the manifest).
137
+ for (const section of sections) {
138
+ state.sectionPositions.set(`${relativePath}#${section.slug}`, section.position);
139
+ }
132
140
  if (changedSections.length === 0 && removedSlugs.length === 0) {
133
141
  log.debug('No section changes detected');
134
142
  return 0;
@@ -164,12 +172,13 @@ export async function syncMarkdownFile(projectId, projectPath, absoluteFilePath,
164
172
  enqueue({ type: 'sections', projectId, filePath: relativePath, payload: JSON.stringify(payload), idempotencyKey, credentials });
165
173
  return 0;
166
174
  }
167
- // Update cache
175
+ // Update hash cache (positions already updated before early-return check)
168
176
  for (const section of changedSections) {
169
177
  state.sectionHashes.set(`${relativePath}#${section.slug}`, section.contentHash);
170
178
  }
171
179
  for (const slug of removedSlugs) {
172
180
  state.sectionHashes.delete(`${relativePath}#${slug}`);
181
+ state.sectionPositions.delete(`${relativePath}#${slug}`);
173
182
  }
174
183
  log.info({ changed: changedSections.length, removed: removedSlugs.length }, 'Sections pushed');
175
184
  return changedSections.length;
@@ -329,10 +338,11 @@ export async function deleteFiles(projectId, projectPath, absoluteFilePaths, cre
329
338
  const state = getOrCreateState(projectId);
330
339
  for (const relPath of relativePaths) {
331
340
  state.fileHashes.delete(relPath);
332
- // Clear section hashes for this file
341
+ // Clear section hashes and positions for this file
333
342
  for (const key of state.sectionHashes.keys()) {
334
343
  if (key.startsWith(`${relPath}#`)) {
335
344
  state.sectionHashes.delete(key);
345
+ state.sectionPositions.delete(key);
336
346
  }
337
347
  }
338
348
  }
package/dist/sync.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ultraclaude-agent",
3
- "version": "0.0.17",
3
+ "version": "0.0.18",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "ultraclaude-agent": "./dist/cli.js"
@@ -25,6 +25,7 @@
25
25
  "pino": "^10.3.1",
26
26
  "pino-pretty": "^13.1.3",
27
27
  "remark-parse": "^11.0.0",
28
+ "socket.io-client": "^4.8.3",
28
29
  "unified": "^11.0.5",
29
30
  "zod": "^4.3.6"
30
31
  },
package/src/daemon.ts CHANGED
@@ -26,6 +26,7 @@ import { startProjectWatcher, type ProjectWatcher } from './watcher.js';
26
26
  import { createProjectOnServer, initialSync, fetchManifest, stopSync, pushVersionMetadata } from './sync.js';
27
27
  import { startUsageWatcher, type UsageWatcher } from './usage-sync.js';
28
28
  import { startStatusLoop, readStatusFile, removeStatusFile, type StatusLoop, type StatusFileData } from './status.js';
29
+ import * as socketClient from './socket-client.js';
29
30
  import { logger } from './logger.js';
30
31
  import { ok, err, type Result, type AgentCredentials } from '@ultra-claude/shared';
31
32
  import type { ProjectRegistryEntry } from '@ultra-claude/shared';
@@ -140,6 +141,9 @@ export async function startDaemon(): Promise<Result<void, StartDaemonError>> {
140
141
  activeCredentials = allCreds;
141
142
  log.info({ serverUrl, accountCount: allCreds.size }, 'Loaded accounts');
142
143
 
144
+ // Connect Socket.IO clients for agent presence signaling
145
+ socketClient.init(serverUrl, allCreds);
146
+
143
147
  running = true;
144
148
  daemonStartedAt = new Date().toISOString();
145
149
  await writePid(serverUrl);
@@ -254,6 +258,9 @@ export async function stopDaemon(): Promise<void> {
254
258
  await Promise.all(closePromises);
255
259
  activeWatchers.clear();
256
260
 
261
+ // Disconnect presence sockets before stopping sync
262
+ socketClient.disconnectAll();
263
+
257
264
  stopSync();
258
265
 
259
266
  if (activeServerUrl) {
@@ -398,6 +405,21 @@ async function reconcileWatchers(): Promise<void> {
398
405
  return;
399
406
  }
400
407
 
408
+ // Reconcile presence sockets: diff current sockets against fresh credentials
409
+ const oldSocketUserIds = new Set(socketClient.getConnectedUserIds());
410
+ const newUserIds = new Set(freshCreds.keys());
411
+
412
+ for (const userId of oldSocketUserIds) {
413
+ if (!newUserIds.has(userId)) {
414
+ socketClient.removeAccount(userId);
415
+ }
416
+ }
417
+ for (const [userId, creds] of freshCreds) {
418
+ if (!oldSocketUserIds.has(userId)) {
419
+ socketClient.addAccount(serverUrl, userId, creds.apiKey);
420
+ }
421
+ }
422
+
401
423
  activeCredentials = freshCreds;
402
424
 
403
425
  const registry = await loadRegistry();
@@ -0,0 +1,98 @@
1
+ // Socket.IO client manager — maintains one socket per dashboard account for presence signaling.
2
+ // The dashboard server's isAgentConnected() checks for sockets with authType === 'api_key'
3
+ // in the user:{userId} room. This module provides the client-side connections that make
4
+ // that check return true while the agent daemon is running.
5
+
6
+ import { io, type Socket } from 'socket.io-client';
7
+ import { logger } from './logger.js';
8
+
9
+ const log = logger.child({ module: 'socket-client' });
10
+
11
+ // Module-level state (matches daemon.ts singleton pattern)
12
+ const sockets = new Map<string, Socket>();
13
+
14
+ /**
15
+ * Initialize socket connections for all accounts.
16
+ * Idempotent — disconnects existing sockets before creating new ones.
17
+ */
18
+ export function init(serverUrl: string, credentials: Map<string, { apiKey: string }>): void {
19
+ disconnectAll();
20
+
21
+ for (const [userId, creds] of credentials) {
22
+ addAccount(serverUrl, userId, creds.apiKey);
23
+ }
24
+
25
+ log.info({ accountCount: credentials.size }, 'Socket client initialized');
26
+ }
27
+
28
+ /**
29
+ * Connect a new socket for an account. Safe to call if already connected —
30
+ * disconnects the old socket first.
31
+ */
32
+ export function addAccount(serverUrl: string, userId: string, apiKey: string): void {
33
+ const existing = sockets.get(userId);
34
+ if (existing) {
35
+ existing.disconnect();
36
+ sockets.delete(userId);
37
+ }
38
+
39
+ // forceNew: true prevents Manager sharing across accounts — each account gets
40
+ // its own WebSocket connection with its own auth credentials.
41
+ // socket.io-client handles reconnection with exponential backoff automatically
42
+ // (reconnection: true is the default). This is the correct approach for a daemon
43
+ // that should maintain presence through server restarts and network interruptions.
44
+ const socket = io(serverUrl, {
45
+ transports: ['websocket'],
46
+ path: '/socket.io',
47
+ auth: { token: apiKey },
48
+ forceNew: true,
49
+ });
50
+
51
+ // Register event handlers at the top level (not inside 'connect') to avoid
52
+ // accumulating duplicate listeners on reconnect.
53
+ socket.on('connect', () => {
54
+ log.info({ userId, socketId: socket.id }, 'Socket connected');
55
+ });
56
+
57
+ socket.on('disconnect', (reason) => {
58
+ log.info({ userId, reason }, 'Socket disconnected');
59
+ });
60
+
61
+ socket.on('connect_error', (error) => {
62
+ log.warn({ userId, err: error }, 'Socket connection error');
63
+ });
64
+
65
+ sockets.set(userId, socket);
66
+ }
67
+
68
+ /**
69
+ * Disconnect and remove a socket for an account.
70
+ * socket.disconnect() sets reason to 'io client disconnect' — no auto-reconnect.
71
+ */
72
+ export function removeAccount(userId: string): void {
73
+ const socket = sockets.get(userId);
74
+ if (socket) {
75
+ socket.disconnect();
76
+ sockets.delete(userId);
77
+ log.info({ userId }, 'Socket removed');
78
+ }
79
+ }
80
+
81
+ /**
82
+ * Disconnect all sockets. Used during daemon shutdown.
83
+ */
84
+ export function disconnectAll(): void {
85
+ for (const [userId, socket] of sockets) {
86
+ socket.disconnect();
87
+ log.debug({ userId }, 'Socket disconnected during cleanup');
88
+ }
89
+ sockets.clear();
90
+ }
91
+
92
+ /**
93
+ * Get the set of user IDs with active socket entries.
94
+ * Used by reconcileWatchers() to diff against fresh credentials.
95
+ */
96
+ export function getConnectedUserIds(): string[] {
97
+ return Array.from(sockets.keys());
98
+ }
package/src/sync.ts CHANGED
@@ -33,6 +33,8 @@ interface QueueItem {
33
33
  interface ProjectSyncState {
34
34
  /** Map of "relativePath#slug" → contentHash for last-pushed sections */
35
35
  sectionHashes: Map<string, string>;
36
+ /** Map of "relativePath#slug" → position for last-synced sections (populated after first real sync) */
37
+ sectionPositions: Map<string, number>;
36
38
  /** Map of relativePath → contentHash for last-pushed files */
37
39
  fileHashes: Map<string, string>;
38
40
  needsManifestResync: boolean;
@@ -47,7 +49,7 @@ let retryTimer: ReturnType<typeof setInterval> | null = null;
47
49
  function getOrCreateState(projectId: string): ProjectSyncState {
48
50
  let state = projectStates.get(projectId);
49
51
  if (!state) {
50
- state = { sectionHashes: new Map(), fileHashes: new Map(), needsManifestResync: false };
52
+ state = { sectionHashes: new Map(), sectionPositions: new Map(), fileHashes: new Map(), needsManifestResync: false };
51
53
  projectStates.set(projectId, state);
52
54
  }
53
55
  return state;
@@ -151,6 +153,7 @@ export async function loadManifestIntoCache(projectId: string, credentials: Agen
151
153
  }
152
154
 
153
155
  state.sectionHashes.clear();
156
+ state.sectionPositions.clear();
154
157
  for (const entry of result.data) {
155
158
  state.sectionHashes.set(`${entry.filePath}#${entry.headingSlug}`, entry.contentHash);
156
159
  }
@@ -193,8 +196,10 @@ export async function syncMarkdownFile(
193
196
  for (const section of sections) {
194
197
  const key = `${relativePath}#${section.slug}`;
195
198
  currentSlugs.add(key);
196
- const cached = state.sectionHashes.get(key);
197
- if (cached !== section.contentHash) {
199
+ const cachedHash = state.sectionHashes.get(key);
200
+ const cachedPos = state.sectionPositions.get(key);
201
+ const posChanged = cachedPos !== undefined && cachedPos !== section.position;
202
+ if (cachedHash !== section.contentHash || posChanged) {
198
203
  changedSections.push(section);
199
204
  }
200
205
  }
@@ -207,6 +212,12 @@ export async function syncMarkdownFile(
207
212
  }
208
213
  }
209
214
 
215
+ // Always update positions from current file parse so position-only reorders
216
+ // are detectable on next diff (positions aren't in the manifest).
217
+ for (const section of sections) {
218
+ state.sectionPositions.set(`${relativePath}#${section.slug}`, section.position);
219
+ }
220
+
210
221
  if (changedSections.length === 0 && removedSlugs.length === 0) {
211
222
  log.debug('No section changes detected');
212
223
  return 0;
@@ -248,12 +259,13 @@ export async function syncMarkdownFile(
248
259
  return 0;
249
260
  }
250
261
 
251
- // Update cache
262
+ // Update hash cache (positions already updated before early-return check)
252
263
  for (const section of changedSections) {
253
264
  state.sectionHashes.set(`${relativePath}#${section.slug}`, section.contentHash);
254
265
  }
255
266
  for (const slug of removedSlugs) {
256
267
  state.sectionHashes.delete(`${relativePath}#${slug}`);
268
+ state.sectionPositions.delete(`${relativePath}#${slug}`);
257
269
  }
258
270
 
259
271
  log.info({ changed: changedSections.length, removed: removedSlugs.length }, 'Sections pushed');
@@ -478,10 +490,11 @@ export async function deleteFiles(
478
490
  const state = getOrCreateState(projectId);
479
491
  for (const relPath of relativePaths) {
480
492
  state.fileHashes.delete(relPath);
481
- // Clear section hashes for this file
493
+ // Clear section hashes and positions for this file
482
494
  for (const key of state.sectionHashes.keys()) {
483
495
  if (key.startsWith(`${relPath}#`)) {
484
496
  state.sectionHashes.delete(key);
497
+ state.sectionPositions.delete(key);
485
498
  }
486
499
  }
487
500
  }