@agent-link/server 0.1.23 → 0.1.25
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/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/web/app.js +30 -7
- package/web/style.css +5 -0
package/dist/index.js
CHANGED
|
@@ -17,8 +17,14 @@ const webDir = join(__dirname, '../web');
|
|
|
17
17
|
app.get('/', (_req, res) => {
|
|
18
18
|
res.sendFile(join(webDir, 'landing.html'));
|
|
19
19
|
});
|
|
20
|
-
// Serve static assets from web/
|
|
21
|
-
app.use(express.static(webDir
|
|
20
|
+
// Serve static assets from web/ with no-cache for JS/CSS (ensures updates are picked up)
|
|
21
|
+
app.use(express.static(webDir, {
|
|
22
|
+
setHeaders(res, filePath) {
|
|
23
|
+
if (filePath.endsWith('.js') || filePath.endsWith('.css') || filePath.endsWith('.html')) {
|
|
24
|
+
res.setHeader('Cache-Control', 'no-cache');
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
}));
|
|
22
28
|
// SPA fallback: /s/:sessionId → serve index.html (Vue router handles the rest)
|
|
23
29
|
app.get('/s/:sessionId', (_req, res) => {
|
|
24
30
|
res.sendFile(join(webDir, 'index.html'));
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAE9E,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;AAEtD,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;AACtB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;AACjC,MAAM,GAAG,GAAG,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;AAE5C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAEzC,uBAAuB;AACvB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IACzB,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC;AAEH,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/web/app.js
CHANGED
|
@@ -825,6 +825,12 @@ const App = {
|
|
|
825
825
|
});
|
|
826
826
|
|
|
827
827
|
// ── WebSocket ──
|
|
828
|
+
let reconnectAttempts = 0;
|
|
829
|
+
const MAX_RECONNECT_ATTEMPTS = 50;
|
|
830
|
+
const RECONNECT_BASE_DELAY = 1000;
|
|
831
|
+
const RECONNECT_MAX_DELAY = 15000;
|
|
832
|
+
let reconnectTimer = null;
|
|
833
|
+
|
|
828
834
|
function connect() {
|
|
829
835
|
const sid = getSessionId();
|
|
830
836
|
if (!sid) {
|
|
@@ -833,12 +839,14 @@ const App = {
|
|
|
833
839
|
return;
|
|
834
840
|
}
|
|
835
841
|
sessionId.value = sid;
|
|
842
|
+
status.value = 'Connecting...';
|
|
843
|
+
error.value = '';
|
|
836
844
|
|
|
837
845
|
const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
|
|
838
846
|
const wsUrl = `${protocol}//${window.location.host}/?type=web&sessionId=${sid}`;
|
|
839
847
|
ws = new WebSocket(wsUrl);
|
|
840
848
|
|
|
841
|
-
ws.onopen = () => { error.value = ''; };
|
|
849
|
+
ws.onopen = () => { error.value = ''; reconnectAttempts = 0; };
|
|
842
850
|
|
|
843
851
|
ws.onmessage = (event) => {
|
|
844
852
|
let msg;
|
|
@@ -1035,17 +1043,32 @@ const App = {
|
|
|
1035
1043
|
|
|
1036
1044
|
ws.onclose = () => {
|
|
1037
1045
|
sessionKey = null;
|
|
1038
|
-
|
|
1039
|
-
status.value = 'Disconnected';
|
|
1040
|
-
error.value = 'Connection to server lost.';
|
|
1041
|
-
}
|
|
1046
|
+
const wasConnected = status.value === 'Connected' || status.value === 'Connecting...';
|
|
1042
1047
|
isProcessing.value = false;
|
|
1043
1048
|
isCompacting.value = false;
|
|
1049
|
+
|
|
1050
|
+
if (wasConnected || reconnectAttempts > 0) {
|
|
1051
|
+
scheduleReconnect();
|
|
1052
|
+
}
|
|
1044
1053
|
};
|
|
1045
1054
|
|
|
1046
1055
|
ws.onerror = () => {};
|
|
1047
1056
|
}
|
|
1048
1057
|
|
|
1058
|
+
function scheduleReconnect() {
|
|
1059
|
+
if (reconnectAttempts >= MAX_RECONNECT_ATTEMPTS) {
|
|
1060
|
+
status.value = 'Disconnected';
|
|
1061
|
+
error.value = 'Unable to reconnect. Please refresh the page.';
|
|
1062
|
+
return;
|
|
1063
|
+
}
|
|
1064
|
+
const delay = Math.min(RECONNECT_BASE_DELAY * Math.pow(1.5, reconnectAttempts), RECONNECT_MAX_DELAY);
|
|
1065
|
+
reconnectAttempts++;
|
|
1066
|
+
status.value = 'Reconnecting...';
|
|
1067
|
+
error.value = 'Connection lost. Reconnecting... (attempt ' + reconnectAttempts + ')';
|
|
1068
|
+
if (reconnectTimer) clearTimeout(reconnectTimer);
|
|
1069
|
+
reconnectTimer = setTimeout(() => { reconnectTimer = null; connect(); }, delay);
|
|
1070
|
+
}
|
|
1071
|
+
|
|
1049
1072
|
function handleClaudeOutput(msg) {
|
|
1050
1073
|
const data = msg.data;
|
|
1051
1074
|
if (!data) return;
|
|
@@ -1111,7 +1134,7 @@ const App = {
|
|
|
1111
1134
|
watch(messageCount, () => { nextTick(scheduleHighlight); });
|
|
1112
1135
|
|
|
1113
1136
|
onMounted(() => { connect(); });
|
|
1114
|
-
onUnmounted(() => { if (ws) ws.close(); });
|
|
1137
|
+
onUnmounted(() => { if (reconnectTimer) clearTimeout(reconnectTimer); if (ws) ws.close(); });
|
|
1115
1138
|
|
|
1116
1139
|
return {
|
|
1117
1140
|
status, agentName, hostname, workDir, sessionId, error,
|
|
@@ -1158,7 +1181,7 @@ const App = {
|
|
|
1158
1181
|
</div>
|
|
1159
1182
|
</header>
|
|
1160
1183
|
|
|
1161
|
-
<div v-if="status === 'No Session' || (status !== 'Connected' && status !== 'Connecting...' && messages.length === 0)" class="center-card">
|
|
1184
|
+
<div v-if="status === 'No Session' || (status !== 'Connected' && status !== 'Connecting...' && status !== 'Reconnecting...' && messages.length === 0)" class="center-card">
|
|
1162
1185
|
<div class="status-card">
|
|
1163
1186
|
<p class="status">
|
|
1164
1187
|
<span class="label">Status:</span>
|
package/web/style.css
CHANGED
|
@@ -191,6 +191,11 @@ body {
|
|
|
191
191
|
background: rgba(245, 158, 11, 0.1);
|
|
192
192
|
}
|
|
193
193
|
|
|
194
|
+
.badge.reconnecting\.\.\. {
|
|
195
|
+
color: var(--warning);
|
|
196
|
+
background: rgba(245, 158, 11, 0.1);
|
|
197
|
+
}
|
|
198
|
+
|
|
194
199
|
.badge.waiting {
|
|
195
200
|
color: var(--warning);
|
|
196
201
|
background: rgba(245, 158, 11, 0.1);
|