nterminal 1.3.3 → 1.3.5
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/bin/nterminal.js +8 -3
- package/dist/client/assets/MarkdownPreview-BIrwUAaa.js +1 -0
- package/dist/client/assets/TranscriptMarkdownBody-CI0ztvMX.js +3 -0
- package/dist/client/assets/{index-DDCpqDNb.js → index-EN8ngMgv.js} +1 -1
- package/dist/client/assets/index-JQJ1Eet1.js +58 -0
- package/dist/client/assets/index-xkL4h3qt.css +1 -0
- package/dist/client/index.html +2 -2
- package/dist/scripts/hooks.js +83 -0
- package/dist/scripts/hooks.js.map +1 -0
- package/dist/server/accounts/accountService.d.ts +23 -1
- package/dist/server/accounts/accountService.js +235 -103
- package/dist/server/accounts/accountService.js.map +1 -1
- package/dist/server/accounts/providerRequests.d.ts +12 -0
- package/dist/server/accounts/providerRequests.js +159 -0
- package/dist/server/accounts/providerRequests.js.map +1 -0
- package/dist/server/agent/agentRoutes.js +11 -0
- package/dist/server/agent/agentRoutes.js.map +1 -1
- package/dist/server/hooks/helperJournal.d.ts +16 -0
- package/dist/server/hooks/helperJournal.js +74 -0
- package/dist/server/hooks/helperJournal.js.map +1 -0
- package/dist/server/hooks/hookBinding.d.ts +39 -0
- package/dist/server/hooks/hookBinding.js +91 -0
- package/dist/server/hooks/hookBinding.js.map +1 -0
- package/dist/server/hooks/hookFiles.d.ts +24 -0
- package/dist/server/hooks/hookFiles.js +160 -0
- package/dist/server/hooks/hookFiles.js.map +1 -0
- package/dist/server/hooks/hookInstallation.d.ts +79 -0
- package/dist/server/hooks/hookInstallation.js +978 -0
- package/dist/server/hooks/hookInstallation.js.map +1 -0
- package/dist/server/hooks/hookProcess.d.ts +5 -0
- package/dist/server/hooks/hookProcess.js +85 -0
- package/dist/server/hooks/hookProcess.js.map +1 -0
- package/dist/server/hooks/hookReceiver.d.ts +66 -0
- package/dist/server/hooks/hookReceiver.js +549 -0
- package/dist/server/hooks/hookReceiver.js.map +1 -0
- package/dist/server/hooks/lifecycle.d.ts +40 -0
- package/dist/server/hooks/lifecycle.js +200 -0
- package/dist/server/hooks/lifecycle.js.map +1 -0
- package/dist/server/hooks/publicationLock.d.ts +3 -0
- package/dist/server/hooks/publicationLock.js +137 -0
- package/dist/server/hooks/publicationLock.js.map +1 -0
- package/dist/server/hooks/verifiedLock.d.ts +24 -0
- package/dist/server/hooks/verifiedLock.js +207 -0
- package/dist/server/hooks/verifiedLock.js.map +1 -0
- package/dist/server/http.d.ts +4 -0
- package/dist/server/http.js +6 -0
- package/dist/server/http.js.map +1 -1
- package/dist/server/index.js +69 -2
- package/dist/server/index.js.map +1 -1
- package/dist/server/notifications/agentCompletionMonitor.d.ts +16 -1
- package/dist/server/notifications/agentCompletionMonitor.js +261 -47
- package/dist/server/notifications/agentCompletionMonitor.js.map +1 -1
- package/dist/server/notifications/completionNotificationRouter.d.ts +2 -0
- package/dist/server/notifications/completionNotificationRouter.js +9 -0
- package/dist/server/notifications/completionNotificationRouter.js.map +1 -1
- package/dist/server/routes/accountRoutes.js +11 -0
- package/dist/server/routes/accountRoutes.js.map +1 -1
- package/dist/server/routes/activityRoutes.d.ts +13 -0
- package/dist/server/routes/activityRoutes.js +165 -0
- package/dist/server/routes/activityRoutes.js.map +1 -0
- package/dist/server/routes/agentManagementRoutes.js +8 -1
- package/dist/server/routes/agentManagementRoutes.js.map +1 -1
- package/dist/server/routes/hookRoutes.d.ts +16 -0
- package/dist/server/routes/hookRoutes.js +77 -0
- package/dist/server/routes/hookRoutes.js.map +1 -0
- package/dist/server/routes/terminalRoutes.js +4 -0
- package/dist/server/routes/terminalRoutes.js.map +1 -1
- package/dist/server/routes/transcriptQuery.d.ts +2 -1
- package/dist/server/routes/transcriptQuery.js +3 -1
- package/dist/server/routes/transcriptQuery.js.map +1 -1
- package/dist/server/terminal/PtyAdapter.d.ts +18 -0
- package/dist/server/terminal/PtyAdapter.js.map +1 -1
- package/dist/server/terminal/TerminalManager.d.ts +61 -0
- package/dist/server/terminal/TerminalManager.js +665 -12
- package/dist/server/terminal/TerminalManager.js.map +1 -1
- package/dist/server/terminal/TmuxPtyAdapter.d.ts +14 -2
- package/dist/server/terminal/TmuxPtyAdapter.js +104 -16
- package/dist/server/terminal/TmuxPtyAdapter.js.map +1 -1
- package/dist/server/terminal/activityChannel.d.ts +57 -0
- package/dist/server/terminal/activityChannel.js +166 -0
- package/dist/server/terminal/activityChannel.js.map +1 -0
- package/dist/server/terminal/agentTranscriptStatus.d.ts +12 -0
- package/dist/server/terminal/agentTranscriptStatus.js +78 -7
- package/dist/server/terminal/agentTranscriptStatus.js.map +1 -1
- package/dist/server/terminal/codexTranscriptSource.d.ts +2 -0
- package/dist/server/terminal/codexTranscriptSource.js +53 -46
- package/dist/server/terminal/codexTranscriptSource.js.map +1 -1
- package/dist/server/terminal/subagentSources.js +2 -1
- package/dist/server/terminal/subagentSources.js.map +1 -1
- package/dist/server/terminal/transcriptHeader.d.ts +85 -0
- package/dist/server/terminal/transcriptHeader.js +376 -0
- package/dist/server/terminal/transcriptHeader.js.map +1 -0
- package/dist/server/terminal/transcriptHistory.d.ts +16 -2
- package/dist/server/terminal/transcriptHistory.js +120 -21
- package/dist/server/terminal/transcriptHistory.js.map +1 -1
- package/dist/server/terminal/transcriptStore.d.ts +6 -0
- package/dist/server/terminal/transcriptStore.js +222 -26
- package/dist/server/terminal/transcriptStore.js.map +1 -1
- package/dist/shared/activityProbe.d.ts +10 -0
- package/dist/shared/activityProbe.js +24 -0
- package/dist/shared/activityProbe.js.map +1 -0
- package/dist/shared/protocol.d.ts +45 -0
- package/dist/shared/protocol.js.map +1 -1
- package/dist/shared/types.d.ts +9 -1
- package/docs/features.md +10 -0
- package/docs/provider-hooks.md +287 -0
- package/docs/terminal-history.md +10 -0
- package/package.json +2 -1
- package/scripts/nterminal-hook.cjs +171 -0
- package/scripts/nterminalctl +26 -2
- package/dist/client/assets/MarkdownPreview-CWK2qIZp.js +0 -1
- package/dist/client/assets/TranscriptMarkdownBody-Ddi-rw6X.js +0 -3
- package/dist/client/assets/index-CcAQThtj.js +0 -56
- package/dist/client/assets/index-DTTX24tu.css +0 -1
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import WebSocket from 'ws';
|
|
2
|
+
import { activityMaxMessageBytes, activityMaxTerminals, parseActivityFrame, validActivityTerminal } from '../terminal/activityChannel.js';
|
|
1
3
|
const defaultIntervalMs = 5_000;
|
|
2
4
|
const defaultTimeoutMs = 2_500;
|
|
3
5
|
const defaultMaxBackoffMs = 60_000;
|
|
@@ -11,9 +13,14 @@ export class AgentCompletionMonitor {
|
|
|
11
13
|
maxConcurrentAgents;
|
|
12
14
|
now;
|
|
13
15
|
resolveAgent;
|
|
16
|
+
onActivity;
|
|
17
|
+
onRemoveAgent;
|
|
18
|
+
createWebSocket;
|
|
14
19
|
states = new Map();
|
|
15
20
|
timer = null;
|
|
16
21
|
inflight = false;
|
|
22
|
+
disposed = false;
|
|
23
|
+
notifications = 0;
|
|
17
24
|
constructor(store, router, options = {}) {
|
|
18
25
|
this.store = store;
|
|
19
26
|
this.router = router;
|
|
@@ -23,92 +30,272 @@ export class AgentCompletionMonitor {
|
|
|
23
30
|
this.maxConcurrentAgents = Math.max(1, Math.floor(options.maxConcurrentAgents ?? defaultMaxConcurrentAgents));
|
|
24
31
|
this.now = options.now ?? Date.now;
|
|
25
32
|
this.resolveAgent = options.resolveAgent ?? ((agent) => agent.url ? { ...agent, url: agent.url } : null);
|
|
33
|
+
this.onActivity = options.onActivity ?? (() => { });
|
|
34
|
+
this.onRemoveAgent = options.onRemoveAgent ?? (() => { });
|
|
35
|
+
this.createWebSocket = options.createWebSocket ?? ((url, settings) => new WebSocket(url, settings));
|
|
26
36
|
}
|
|
27
37
|
start() {
|
|
28
|
-
if (this.timer)
|
|
38
|
+
if (this.timer || this.disposed)
|
|
29
39
|
return;
|
|
30
|
-
|
|
40
|
+
const tick = () => {
|
|
31
41
|
if (this.inflight)
|
|
32
42
|
return;
|
|
33
43
|
this.inflight = true;
|
|
34
|
-
void this.pollOnce().finally(() => {
|
|
44
|
+
void this.pollOnce().catch(() => { }).finally(() => {
|
|
35
45
|
this.inflight = false;
|
|
36
46
|
});
|
|
37
|
-
}
|
|
47
|
+
};
|
|
48
|
+
this.timer = setInterval(tick, Math.min(1000, this.intervalMs));
|
|
38
49
|
this.timer.unref?.();
|
|
50
|
+
tick();
|
|
39
51
|
}
|
|
40
52
|
dispose() {
|
|
53
|
+
this.disposed = true;
|
|
41
54
|
if (this.timer) {
|
|
42
55
|
clearInterval(this.timer);
|
|
43
56
|
this.timer = null;
|
|
44
57
|
}
|
|
58
|
+
for (const state of this.states.values())
|
|
59
|
+
this.disconnect(state);
|
|
60
|
+
this.states.clear();
|
|
45
61
|
}
|
|
46
62
|
async pollOnce() {
|
|
63
|
+
if (this.disposed)
|
|
64
|
+
return;
|
|
47
65
|
const state = await this.store.read();
|
|
66
|
+
if (this.disposed)
|
|
67
|
+
return;
|
|
48
68
|
const knownAgentIds = new Set(state.agents.map((agent) => agent.id));
|
|
49
69
|
for (const agentId of [...this.states.keys()]) {
|
|
50
70
|
if (!knownAgentIds.has(agentId)) {
|
|
71
|
+
this.disconnect(this.states.get(agentId));
|
|
51
72
|
this.states.delete(agentId);
|
|
73
|
+
this.onRemoveAgent(agentId);
|
|
52
74
|
}
|
|
53
75
|
}
|
|
54
|
-
const
|
|
55
|
-
const agents = state.agents.filter((agent) => (this.states.get(agent.id)?.nextAttemptAt ?? 0) <= now);
|
|
76
|
+
const agents = state.agents;
|
|
56
77
|
for (let index = 0; index < agents.length; index += this.maxConcurrentAgents) {
|
|
57
|
-
|
|
78
|
+
if (this.disposed)
|
|
79
|
+
return;
|
|
80
|
+
await Promise.allSettled(agents.slice(index, index + this.maxConcurrentAgents).map((agent) => this.visitAgent(agent)));
|
|
58
81
|
}
|
|
59
82
|
}
|
|
60
|
-
async
|
|
83
|
+
async visitAgent(agent) {
|
|
61
84
|
const monitorState = this.stateFor(agent.id);
|
|
62
|
-
|
|
85
|
+
const resolved = this.resolveAgent(agent);
|
|
86
|
+
const endpoint = resolved ? JSON.stringify([resolved.url, resolved.token]) : null;
|
|
87
|
+
if (endpoint !== monitorState.endpoint) {
|
|
88
|
+
this.disconnect(monitorState);
|
|
89
|
+
monitorState.endpoint = endpoint;
|
|
90
|
+
monitorState.mode = 'websocket';
|
|
91
|
+
monitorState.nextAttemptAt = 0;
|
|
92
|
+
monitorState.failures = 0;
|
|
93
|
+
}
|
|
94
|
+
if (monitorState.socket) {
|
|
95
|
+
if (this.now() - monitorState.lastSeenAt > 75_000) {
|
|
96
|
+
this.disconnect(monitorState);
|
|
97
|
+
this.failed(monitorState);
|
|
98
|
+
}
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
if (monitorState.nextAttemptAt > this.now())
|
|
102
|
+
return;
|
|
103
|
+
if (!resolved) {
|
|
104
|
+
this.failed(monitorState);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (monitorState.mode === 'poll' && this.now() >= monitorState.probeAt)
|
|
108
|
+
monitorState.mode = 'websocket';
|
|
109
|
+
if (monitorState.mode === 'websocket')
|
|
110
|
+
await this.connectAgent(resolved, monitorState);
|
|
111
|
+
if (this.disposed || monitorState.mode !== 'poll' || monitorState.nextAttemptAt > this.now())
|
|
112
|
+
return;
|
|
63
113
|
try {
|
|
64
|
-
const
|
|
65
|
-
if (
|
|
66
|
-
|
|
67
|
-
|
|
114
|
+
const terminals = await fetchAgentTerminals(resolved, this.timeoutMs);
|
|
115
|
+
if (this.disposed || this.states.get(agent.id) !== monitorState || monitorState.endpoint !== endpoint)
|
|
116
|
+
return;
|
|
117
|
+
const present = new Set(terminals.map(terminal => terminal.id));
|
|
118
|
+
for (const [id, previous] of monitorState.terminals) {
|
|
119
|
+
if (!present.has(id))
|
|
120
|
+
terminals.push({ ...previous.summary, status: 'exited' });
|
|
121
|
+
}
|
|
122
|
+
await this.applyActivity(agent.id, monitorState, terminals, !monitorState.seeded);
|
|
68
123
|
monitorState.failures = 0;
|
|
69
|
-
monitorState.nextAttemptAt =
|
|
124
|
+
monitorState.nextAttemptAt = this.now() + this.intervalMs;
|
|
70
125
|
}
|
|
71
126
|
catch {
|
|
72
|
-
monitorState
|
|
73
|
-
|
|
74
|
-
|
|
127
|
+
this.failed(monitorState);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
connectAgent(agent, state) {
|
|
131
|
+
return new Promise(resolve => {
|
|
132
|
+
let socket;
|
|
133
|
+
const requestedCursor = state.cursor;
|
|
134
|
+
try {
|
|
135
|
+
const url = new URL(`${agent.url.replace(/\/$/, '')}/api/agent/activity/ws`);
|
|
136
|
+
url.protocol = url.protocol === 'https:' ? 'wss:' : 'ws:';
|
|
137
|
+
if (requestedCursor)
|
|
138
|
+
url.searchParams.set('cursor', requestedCursor);
|
|
139
|
+
socket = this.createWebSocket(url.toString(), {
|
|
140
|
+
headers: { Authorization: `Bearer ${agent.token}` }, handshakeTimeout: this.timeoutMs,
|
|
141
|
+
maxPayload: activityMaxMessageBytes, followRedirects: false
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
this.failed(state);
|
|
146
|
+
resolve();
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
state.socket = socket;
|
|
150
|
+
state.seeded = requestedCursor !== undefined;
|
|
151
|
+
state.lastSeenAt = this.now();
|
|
152
|
+
let ready = false;
|
|
153
|
+
let sawSnapshot = false;
|
|
154
|
+
const current = () => !this.disposed && this.states.get(agent.id) === state && state.socket === socket;
|
|
155
|
+
const deadline = setTimeout(() => { if (current())
|
|
156
|
+
socket.terminate(); }, this.timeoutMs);
|
|
157
|
+
deadline.unref();
|
|
158
|
+
const finish = () => { clearTimeout(deadline); resolve(); };
|
|
159
|
+
socket.on('message', (data, binary) => {
|
|
160
|
+
if (!current())
|
|
161
|
+
return;
|
|
162
|
+
try {
|
|
163
|
+
const text = data.toString();
|
|
164
|
+
if (binary || Buffer.byteLength(text) > activityMaxMessageBytes)
|
|
165
|
+
throw new Error('invalid activity frame');
|
|
166
|
+
const message = parseActivityFrame(JSON.parse(text));
|
|
167
|
+
if (message?.type === 'activity.ready') {
|
|
168
|
+
if (ready || (message.mode === 'resume' ? !requestedCursor : !sawSnapshot))
|
|
169
|
+
throw new Error('invalid activity acknowledgement');
|
|
170
|
+
ready = true;
|
|
171
|
+
state.cursor = message.cursor;
|
|
172
|
+
state.seeded = true;
|
|
173
|
+
state.lastSeenAt = this.now();
|
|
174
|
+
state.failures = 0;
|
|
175
|
+
state.nextAttemptAt = 0;
|
|
176
|
+
finish();
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
if (!message || message.agentId !== null || (!state.seeded && !message.initial))
|
|
180
|
+
throw new Error('invalid activity snapshot');
|
|
181
|
+
if (message.initial)
|
|
182
|
+
sawSnapshot = true;
|
|
183
|
+
else if (!message.cursor)
|
|
184
|
+
throw new Error('activity cursor required');
|
|
185
|
+
state.lastSeenAt = this.now();
|
|
186
|
+
state.failures = 0;
|
|
187
|
+
state.nextAttemptAt = 0;
|
|
188
|
+
void this.applyActivity(agent.id, state, message.terminals, message.initial).catch(() => {
|
|
189
|
+
if (current())
|
|
190
|
+
socket.terminate();
|
|
191
|
+
});
|
|
192
|
+
if (ready || (!sawSnapshot && requestedCursor))
|
|
193
|
+
state.cursor = message.cursor;
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
socket.terminate();
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
socket.on('ping', () => { if (current())
|
|
200
|
+
state.lastSeenAt = this.now(); });
|
|
201
|
+
socket.on('pong', () => { if (current())
|
|
202
|
+
state.lastSeenAt = this.now(); });
|
|
203
|
+
socket.on('unexpected-response', (_request, response) => {
|
|
204
|
+
if (current() && [404, 405, 501].includes(response.statusCode ?? 0)) {
|
|
205
|
+
state.mode = 'poll';
|
|
206
|
+
state.probeAt = this.now() + 5 * 60_000;
|
|
207
|
+
state.nextAttemptAt = 0;
|
|
208
|
+
}
|
|
209
|
+
response.destroy();
|
|
210
|
+
socket.terminate();
|
|
211
|
+
});
|
|
212
|
+
socket.on('error', () => { if (current())
|
|
213
|
+
socket.terminate(); });
|
|
214
|
+
socket.once('close', () => {
|
|
215
|
+
if (current()) {
|
|
216
|
+
state.socket = null;
|
|
217
|
+
state.seeded = false;
|
|
218
|
+
if (state.mode !== 'poll')
|
|
219
|
+
this.failed(state);
|
|
220
|
+
}
|
|
221
|
+
finish();
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
applyActivity(agentId, state, terminals, initial) {
|
|
226
|
+
if (initial) {
|
|
227
|
+
state.terminals.clear();
|
|
228
|
+
state.summaryBytes = 0;
|
|
75
229
|
}
|
|
76
|
-
|
|
230
|
+
state.seeded = true;
|
|
231
|
+
const accepted = [];
|
|
232
|
+
const notifications = [];
|
|
77
233
|
for (const terminal of terminals) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
234
|
+
const previous = state.terminals.get(terminal.id);
|
|
235
|
+
const revision = terminal.agentStatus?.revision;
|
|
236
|
+
if (!initial && previous?.revision !== undefined && revision !== undefined && revision < previous.revision
|
|
237
|
+
&& previous.epoch === terminal.agentStatus?.epoch
|
|
238
|
+
&& previous.provider === terminal.agentStatus?.provider
|
|
239
|
+
&& !agentSessionChanged(previous.agentSessionId, terminal.agentStatus?.sessionId ?? null))
|
|
81
240
|
continue;
|
|
82
|
-
|
|
83
|
-
|
|
241
|
+
accepted.push(terminal);
|
|
242
|
+
if (!previous && terminal.status === 'running' && state.terminals.size >= activityMaxTerminals)
|
|
243
|
+
throw new Error('activity terminal limit');
|
|
84
244
|
const next = nextTerminalActivityState(terminal, previous);
|
|
85
|
-
|
|
86
|
-
if (
|
|
87
|
-
|
|
245
|
+
const summaryBytes = state.summaryBytes - (previous?.bytes ?? 0) + (terminal.status === 'running' ? next.bytes : 0);
|
|
246
|
+
if (summaryBytes > activityMaxMessageBytes)
|
|
247
|
+
throw new Error('activity state too large');
|
|
248
|
+
state.summaryBytes = summaryBytes;
|
|
249
|
+
state.terminals.set(terminal.id, next);
|
|
250
|
+
const fromHook = terminal.agentStatus?.source === 'hook';
|
|
251
|
+
const completion = fromHook ? terminal.agentStatus?.completion : undefined;
|
|
252
|
+
const completionKey = completion ? JSON.stringify([terminal.id, completion.id]) : null;
|
|
253
|
+
const duplicate = completionKey !== null && state.completionIds.has(completionKey);
|
|
254
|
+
const completed = !initial && (fromHook ? completion && !duplicate : previous && shouldNotifyAgentCompletion(previous, terminal));
|
|
255
|
+
if (completed && this.notifications >= 128)
|
|
256
|
+
throw new Error('activity notification backlog');
|
|
257
|
+
if (completionKey !== null) {
|
|
258
|
+
state.completionIds.add(completionKey);
|
|
259
|
+
if (state.completionIds.size > 4096)
|
|
260
|
+
state.completionIds.delete(state.completionIds.values().next().value);
|
|
88
261
|
}
|
|
89
|
-
if (
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
agentId
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
if (!seenTerminalIds.has(terminalId)) {
|
|
104
|
-
monitorState.terminals.delete(terminalId);
|
|
262
|
+
if (completed) {
|
|
263
|
+
this.notifications++;
|
|
264
|
+
notifications.push(Promise.resolve().then(() => {
|
|
265
|
+
if (this.disposed || this.states.get(agentId) !== state)
|
|
266
|
+
return;
|
|
267
|
+
return this.router.notifyCompletion({
|
|
268
|
+
agentId, terminalId: terminal.id, terminalTitle: terminal.title,
|
|
269
|
+
...(terminal.agentStatus?.provider ? { provider: terminal.agentStatus.provider } : {}),
|
|
270
|
+
outcome: completion?.outcome ?? (terminal.agentStatus?.state === 'stopped' ? 'stopped' : 'finished'),
|
|
271
|
+
...(completion ? { completionId: completion.id, occurredAt: completion.occurredAt } : {}),
|
|
272
|
+
commandName: previous?.currentCommand ?? terminal.currentCommand ?? null
|
|
273
|
+
});
|
|
274
|
+
}).catch(() => { }).finally(() => { this.notifications--; }));
|
|
275
|
+
state.terminals.set(terminal.id, { ...next, sawAgentWorking: false, sawBusy: false });
|
|
105
276
|
}
|
|
277
|
+
if (terminal.status !== 'running')
|
|
278
|
+
state.terminals.delete(terminal.id);
|
|
106
279
|
}
|
|
280
|
+
if (initial || accepted.length)
|
|
281
|
+
this.onActivity(agentId, accepted, initial);
|
|
282
|
+
return Promise.allSettled(notifications).then(() => { });
|
|
283
|
+
}
|
|
284
|
+
failed(state) {
|
|
285
|
+
state.failures++;
|
|
286
|
+
state.nextAttemptAt = this.now() + Math.min(this.maxBackoffMs, this.intervalMs * 2 ** Math.min(5, state.failures - 1));
|
|
287
|
+
}
|
|
288
|
+
disconnect(state) {
|
|
289
|
+
const socket = state.socket;
|
|
290
|
+
state.socket = null;
|
|
291
|
+
state.seeded = false;
|
|
292
|
+
socket?.terminate();
|
|
107
293
|
}
|
|
108
294
|
stateFor(agentId) {
|
|
109
295
|
let state = this.states.get(agentId);
|
|
110
296
|
if (!state) {
|
|
111
|
-
state = { terminals: new Map(), failures: 0, nextAttemptAt: 0
|
|
297
|
+
state = { terminals: new Map(), failures: 0, nextAttemptAt: 0, socket: null, endpoint: null,
|
|
298
|
+
mode: 'websocket', probeAt: 0, seeded: false, lastSeenAt: 0, completionIds: new Set(), cursor: undefined, summaryBytes: 0 };
|
|
112
299
|
this.states.set(agentId, state);
|
|
113
300
|
}
|
|
114
301
|
return state;
|
|
@@ -121,14 +308,35 @@ async function fetchAgentTerminals(agent, timeoutMs) {
|
|
|
121
308
|
signal: AbortSignal.timeout(timeoutMs)
|
|
122
309
|
});
|
|
123
310
|
if (!response.ok) {
|
|
311
|
+
await response.body?.cancel();
|
|
124
312
|
throw new Error('agent_unreachable');
|
|
125
313
|
}
|
|
126
314
|
const contentType = response.headers.get('content-type') ?? '';
|
|
127
315
|
if (!contentType.includes('application/json')) {
|
|
316
|
+
await response.body?.cancel();
|
|
128
317
|
throw new Error('agent_unexpected_response');
|
|
129
318
|
}
|
|
130
|
-
const
|
|
131
|
-
if (!
|
|
319
|
+
const reader = response.body?.getReader();
|
|
320
|
+
if (!reader)
|
|
321
|
+
throw new Error('agent_invalid_response');
|
|
322
|
+
let bytes = 0;
|
|
323
|
+
const chunks = [];
|
|
324
|
+
try {
|
|
325
|
+
while (true) {
|
|
326
|
+
const chunk = await reader.read();
|
|
327
|
+
if (chunk.done)
|
|
328
|
+
break;
|
|
329
|
+
bytes += chunk.value.byteLength;
|
|
330
|
+
if (bytes > activityMaxMessageBytes)
|
|
331
|
+
throw new Error('agent_response_too_large');
|
|
332
|
+
chunks.push(chunk.value);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
finally {
|
|
336
|
+
await reader.cancel().catch(() => { });
|
|
337
|
+
}
|
|
338
|
+
const body = JSON.parse(Buffer.concat(chunks).toString());
|
|
339
|
+
if (!Array.isArray(body.terminals) || body.terminals.length > activityMaxTerminals || !body.terminals.every(validActivityTerminal)) {
|
|
132
340
|
throw new Error('agent_invalid_response');
|
|
133
341
|
}
|
|
134
342
|
return body.terminals;
|
|
@@ -139,7 +347,8 @@ function nextTerminalActivityState(terminal, previous) {
|
|
|
139
347
|
const commandChanged = previous && previous.currentCommand !== (terminal.currentCommand ?? null);
|
|
140
348
|
const providerChanged = previous && previous.provider !== provider;
|
|
141
349
|
const sessionChanged = previous && agentSessionChanged(previous.agentSessionId, agentSessionId);
|
|
142
|
-
const
|
|
350
|
+
const epochChanged = previous && previous.epoch !== terminal.agentStatus?.epoch;
|
|
351
|
+
const reset = commandChanged || providerChanged || sessionChanged || epochChanged;
|
|
143
352
|
const trackedAgentSessionId = agentSessionId ?? (commandChanged || providerChanged ? null : (previous?.agentSessionId ?? null));
|
|
144
353
|
return {
|
|
145
354
|
terminalId: terminal.id,
|
|
@@ -148,7 +357,11 @@ function nextTerminalActivityState(terminal, previous) {
|
|
|
148
357
|
currentCommand: terminal.currentCommand ?? null,
|
|
149
358
|
provider,
|
|
150
359
|
agentSessionId: trackedAgentSessionId,
|
|
151
|
-
agentState: terminal.agentStatus?.state ?? null
|
|
360
|
+
agentState: terminal.agentStatus?.state ?? null,
|
|
361
|
+
revision: terminal.agentStatus?.revision,
|
|
362
|
+
epoch: terminal.agentStatus?.epoch,
|
|
363
|
+
summary: terminal,
|
|
364
|
+
bytes: Buffer.byteLength(JSON.stringify(terminal))
|
|
152
365
|
};
|
|
153
366
|
}
|
|
154
367
|
function shouldNotifyAgentCompletion(previous, terminal) {
|
|
@@ -156,6 +369,7 @@ function shouldNotifyAgentCompletion(previous, terminal) {
|
|
|
156
369
|
const completed = terminal.agentStatus.state === 'done' || terminal.agentStatus.state === 'stopped';
|
|
157
370
|
const sameAgent = previous.currentCommand === (terminal.currentCommand ?? null) &&
|
|
158
371
|
previous.provider === terminal.agentStatus.provider &&
|
|
372
|
+
previous.epoch === terminal.agentStatus.epoch &&
|
|
159
373
|
!agentSessionChanged(previous.agentSessionId, terminal.agentStatus.sessionId ?? null);
|
|
160
374
|
return sameAgent && completed && (previous.sawAgentWorking || (previous.agentState === 'unknown' && previous.sawBusy));
|
|
161
375
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentCompletionMonitor.js","sourceRoot":"","sources":["../../../src/server/notifications/agentCompletionMonitor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agentCompletionMonitor.js","sourceRoot":"","sources":["../../../src/server/notifications/agentCompletionMonitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ export interface TerminalCompletionEvent {
|
|
|
10
10
|
outcome: TerminalCompletionOutcome;
|
|
11
11
|
commandName?: string | null;
|
|
12
12
|
occurredAt?: string;
|
|
13
|
+
completionId?: string;
|
|
13
14
|
}
|
|
14
15
|
export interface CompletionNotificationRouterOptions {
|
|
15
16
|
now?: () => number;
|
|
@@ -22,6 +23,7 @@ export declare class CompletionNotificationRouter {
|
|
|
22
23
|
private readonly now;
|
|
23
24
|
private readonly coalesceWindowMs;
|
|
24
25
|
private readonly recentTags;
|
|
26
|
+
private readonly completionIds;
|
|
25
27
|
constructor(store: FileStore, pushService: PushNotificationService, presence: ClientPresenceTracker, options?: CompletionNotificationRouterOptions);
|
|
26
28
|
notifyCompletion(event: TerminalCompletionEvent): Promise<void>;
|
|
27
29
|
private reserveCoalesceTag;
|
|
@@ -8,6 +8,7 @@ export class CompletionNotificationRouter {
|
|
|
8
8
|
now;
|
|
9
9
|
coalesceWindowMs;
|
|
10
10
|
recentTags = new Map();
|
|
11
|
+
completionIds = new Set();
|
|
11
12
|
constructor(store, pushService, presence, options = {}) {
|
|
12
13
|
this.store = store;
|
|
13
14
|
this.pushService = pushService;
|
|
@@ -16,6 +17,14 @@ export class CompletionNotificationRouter {
|
|
|
16
17
|
this.coalesceWindowMs = options.coalesceWindowMs ?? defaultCoalesceWindowMs;
|
|
17
18
|
}
|
|
18
19
|
async notifyCompletion(event) {
|
|
20
|
+
if (event.completionId) {
|
|
21
|
+
const identity = `${event.agentId ?? MAIN_SERVER_ID}:${event.completionId}`;
|
|
22
|
+
if (this.completionIds.has(identity))
|
|
23
|
+
return;
|
|
24
|
+
this.completionIds.add(identity);
|
|
25
|
+
while (this.completionIds.size > 4096)
|
|
26
|
+
this.completionIds.delete(this.completionIds.values().next().value);
|
|
27
|
+
}
|
|
19
28
|
const tag = completionTag(event);
|
|
20
29
|
const state = await this.store.read();
|
|
21
30
|
const targets = selectPushTargets(state.pushSubscriptions, this.presence);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completionNotificationRouter.js","sourceRoot":"","sources":["../../../src/server/notifications/completionNotificationRouter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAgC,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"completionNotificationRouter.js","sourceRoot":"","sources":["../../../src/server/notifications/completionNotificationRouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,17 @@ export async function registerAccountRoutes(app, config, services) {
|
|
|
7
7
|
return reply;
|
|
8
8
|
return services.accountService.status();
|
|
9
9
|
});
|
|
10
|
+
app.post('/api/accounts/:provider/usage', { preHandler: (request, reply) => requireAllowedOrigin(config, request, reply) }, async (request, reply) => {
|
|
11
|
+
if (!await authenticateTerminalRequest(services.authService, request, reply))
|
|
12
|
+
return reply;
|
|
13
|
+
if (config.previewMode)
|
|
14
|
+
return reply.code(403).send({ error: 'preview_mode' });
|
|
15
|
+
const provider = parseProvider(request.params.provider, reply);
|
|
16
|
+
if (!provider)
|
|
17
|
+
return reply;
|
|
18
|
+
reply.header('Cache-Control', 'no-store');
|
|
19
|
+
return handle(reply, () => services.accountService.usage(provider));
|
|
20
|
+
});
|
|
10
21
|
app.post('/api/accounts/:provider/select', { preHandler: (request, reply) => requireAllowedOrigin(config, request, reply) }, async (request, reply) => {
|
|
11
22
|
if (!await authenticateTerminalRequest(services.authService, request, reply))
|
|
12
23
|
return reply;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accountRoutes.js","sourceRoot":"","sources":["../../../src/server/routes/accountRoutes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"accountRoutes.js","sourceRoot":"","sources":["../../../src/server/routes/accountRoutes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { FastifyInstance } from 'fastify';
|
|
2
|
+
import WebSocket from 'ws';
|
|
3
|
+
import type { AppConfig } from '../config.js';
|
|
4
|
+
import type { AuthService } from '../auth/authService.js';
|
|
5
|
+
import type { AuthenticatedSocketRegistration, AuthenticatedSocketRegistry } from './authenticatedSocketRegistry.js';
|
|
6
|
+
import { type TerminalActivityChannel } from '../terminal/activityChannel.js';
|
|
7
|
+
export interface ActivityRouteServices {
|
|
8
|
+
authService: AuthService;
|
|
9
|
+
activityChannel: TerminalActivityChannel;
|
|
10
|
+
}
|
|
11
|
+
export declare function registerActivityRoutes(app: FastifyInstance, config: AppConfig, services: ActivityRouteServices, authenticatedSockets: AuthenticatedSocketRegistry): Promise<void>;
|
|
12
|
+
/** Read-only transport: no PTY attachment, input, layout, or focus operations. */
|
|
13
|
+
export declare function serveActivitySocket(socket: WebSocket, channel: TerminalActivityChannel, localOnly?: boolean, registration?: AuthenticatedSocketRegistration, cursor?: string): () => void;
|