fifony 0.1.47 → 0.1.48
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/README.md +78 -0
- package/app/dist/assets/CommandPalette-CZDG20HW.js +1 -0
- package/app/dist/assets/{KeyboardShortcutsHelp-CqEFfGcE.js → KeyboardShortcutsHelp-TYhQc4aA.js} +1 -1
- package/app/dist/assets/OnboardingWizard-CQ9YmVIT.js +1 -0
- package/app/dist/assets/agents.lazy-CgakDm_P.js +1 -0
- package/app/dist/assets/analytics.lazy-C0rw3sov.js +1 -0
- package/app/dist/assets/{createLucideIcon-luywpIq4.js → createLucideIcon-B3bah5lk.js} +1 -1
- package/app/dist/assets/hooks-CNPue7d7.js +1 -0
- package/app/dist/assets/index-B8XCmr0-.css +1 -0
- package/app/dist/assets/index-Dfn02uW3.js +47 -0
- package/app/dist/assets/index.lazy-JdqhBwPd.js +44 -0
- package/app/dist/assets/services-CHpVij2M.css +1 -0
- package/app/dist/assets/services.lazy-BShKUCOt.js +12 -0
- package/app/dist/assets/vendor-X6HTElZW.js +9 -0
- package/app/dist/assets/viz-Dsh_q2DK.js +4 -0
- package/app/dist/index.html +5 -4
- package/app/dist/service-worker.js +32 -1
- package/dist/agent/run-local.js +89 -76
- package/dist/{agent-DFSFG6DG.js → agent-DJ4SCNBZ.js} +22 -17
- package/dist/{analytics-broadcaster-O4AE3RUK.js → analytics-broadcaster-INNYWHDJ.js} +25 -20
- package/dist/approve-plan.command-WE2CO3H2.js +21 -0
- package/dist/{chunk-HOIOVUHI.js → chunk-5M7PBFMZ.js} +8 -6
- package/dist/chunk-7R7XFXJM.js +1247 -0
- package/dist/{chunk-2PRRKBG6.js → chunk-A4P2MYJF.js} +22 -9
- package/dist/chunk-AFOV3ZAF.js +722 -0
- package/dist/chunk-AFP36N23.js +134 -0
- package/dist/{chunk-AAZKYWOY.js → chunk-AFYKGVSP.js} +103 -8
- package/dist/chunk-APJOZXRP.js +737 -0
- package/dist/chunk-DLSPRIQL.js +241 -0
- package/dist/{chunk-5AMWD66T.js → chunk-EDIPHR5B.js} +6 -4
- package/dist/{chunk-K36BWMUV.js → chunk-JU3MF3MW.js} +2526 -736
- package/dist/{chunk-7TXZYZR5.js → chunk-N5HCNY4O.js} +7 -5
- package/dist/{chunk-JRLWLZOD.js → chunk-NKMZYPIS.js} +31 -23
- package/dist/{chunk-PI7Y77R3.js → chunk-OFIVTM2E.js} +17 -7
- package/dist/{chunk-QH6VCTET.js → chunk-RCSJFMQG.js} +909 -98
- package/dist/{chunk-AAVROEQC.js → chunk-UR7T7IA6.js} +253 -349
- package/dist/{chunk-QHISYRXJ.js → chunk-VOYLU3MI.js} +57 -3
- package/dist/{chunk-EBCSQFPR.js → chunk-W5IULOWV.js} +2 -3
- package/dist/chunk-X37RNTWU.js +193 -0
- package/dist/{chunk-PACI3T4I.js → chunk-XY2APMDE.js} +13 -5
- package/dist/chunk-Z6ZWNWWR.js +34 -0
- package/dist/cli.js +45 -17
- package/dist/constants-AAP7ZGCX.js +124 -0
- package/dist/create-issue.command-SX3AXXIC.js +29 -0
- package/dist/fsm-agent-JGV22WK4.js +59 -0
- package/dist/{fsm-issue-EHTSKMFN.js → fsm-issue-LHIJM5VB.js} +12 -8
- package/dist/{fsm-service-7O4AJG2R.js → fsm-service-GGDKUTWS.js} +13 -4
- package/dist/{helpers-ON2S7UEF.js → helpers-AENVYEZJ.js} +6 -2
- package/dist/{issue-log-broadcaster-FZGVEEIX.js → issue-log-broadcaster-QQWM7LOV.js} +29 -18
- package/dist/{issues-3YNNTB4U.js → issues-RXFKKSXB.js} +10 -7
- package/dist/{log-analyzer-EIX6R6PP.js → log-analyzer-4LNXQISY.js} +30 -20
- package/dist/{logger-IFLXTQPS.js → logger-4F6ATWNA.js} +2 -1
- package/dist/mcp/server.js +6 -2
- package/dist/merge-workspace.command-ZNGIZC4O.js +29 -0
- package/dist/{parallel-executor-DWESCNX3.js → parallel-executor-OL5CB33L.js} +78 -19
- package/dist/{pid-manager-UBWXVSMD.js → pid-manager-EDT4DHAU.js} +2 -1
- package/dist/queue-workers-NSKIIMQ2.js +43 -0
- package/dist/replan-issue.command-73PETERX.js +21 -0
- package/dist/retry-issue.command-DIDP4OCS.js +21 -0
- package/dist/reverse-proxy-server-QSS3H4UH.js +97 -0
- package/dist/scheduler-5YORYECF.js +37 -0
- package/dist/service-log-broadcaster-JIUP2L3D.js +21 -0
- package/dist/{settings-SOTIS6ZD.js → settings-ZNDXYL46.js} +34 -23
- package/dist/settings.resource-OKUHXICJ.js +35 -0
- package/dist/{store-S3NAYZ3S.js → store-P3ACO6YA.js} +22 -17
- package/dist/telemetry-KVUFHDQS.js +828 -0
- package/dist/template-variants-HEPLYKMP.js +24 -0
- package/dist/trace-bundle-IJOV7IWH.js +41 -0
- package/dist/{web-push-QCTLS7EJ.js → web-push-X2LLMQ4M.js} +2 -1
- package/dist/websocket-Q2TUCIC2.js +103 -0
- package/dist/{workspace-OS7GPMCN.js → workspace-TDX3NJCX.js} +10 -6
- package/package.json +12 -9
- package/app/dist/assets/CommandPalette-CL8p78lG.js +0 -1
- package/app/dist/assets/OnboardingWizard-BmI50ZUv.js +0 -1
- package/app/dist/assets/analytics.lazy-CXGjZabc.js +0 -1
- package/app/dist/assets/index-CEaccpYh.js +0 -96
- package/app/dist/assets/index-CzzWGzux.css +0 -1
- package/app/dist/assets/vendor-uqBx3VSC.js +0 -9
- package/dist/approve-plan.command-QGQZZXTQ.js +0 -17
- package/dist/chunk-N4KFNX2G.js +0 -370
- package/dist/chunk-VM5QAYP5.js +0 -404
- package/dist/create-issue.command-VAKYRECC.js +0 -24
- package/dist/merge-workspace.command-T2NIGR4M.js +0 -24
- package/dist/queue-workers-V57BYXAY.js +0 -38
- package/dist/replan-issue.command-2GQ3QXCR.js +0 -17
- package/dist/retry-issue.command-GJBUUYDJ.js +0 -17
- package/dist/scheduler-KYILMWLD.js +0 -32
- package/dist/settings.resource-JMD3JQOS.js +0 -30
- package/dist/websocket-T2Y3BY4B.js +0 -61
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
approvePlanCommand
|
|
3
|
-
} from "./chunk-HOIOVUHI.js";
|
|
4
|
-
import "./chunk-7TXZYZR5.js";
|
|
5
|
-
import "./chunk-JRLWLZOD.js";
|
|
6
|
-
import "./chunk-QH6VCTET.js";
|
|
7
|
-
import "./chunk-2PRRKBG6.js";
|
|
8
|
-
import "./chunk-PI7Y77R3.js";
|
|
9
|
-
import "./chunk-QHISYRXJ.js";
|
|
10
|
-
import "./chunk-EBCSQFPR.js";
|
|
11
|
-
import "./chunk-AAZKYWOY.js";
|
|
12
|
-
import "./chunk-VM5QAYP5.js";
|
|
13
|
-
import "./chunk-PXTIWKLQ.js";
|
|
14
|
-
export {
|
|
15
|
-
approvePlanCommand
|
|
16
|
-
};
|
|
17
|
-
//# sourceMappingURL=approve-plan.command-QGQZZXTQ.js.map
|
package/dist/chunk-N4KFNX2G.js
DELETED
|
@@ -1,370 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
serviceLogPath
|
|
3
|
-
} from "./chunk-AAVROEQC.js";
|
|
4
|
-
import {
|
|
5
|
-
computeMetrics
|
|
6
|
-
} from "./chunk-QHISYRXJ.js";
|
|
7
|
-
import {
|
|
8
|
-
STATE_ROOT,
|
|
9
|
-
now
|
|
10
|
-
} from "./chunk-VM5QAYP5.js";
|
|
11
|
-
import {
|
|
12
|
-
logger
|
|
13
|
-
} from "./chunk-PXTIWKLQ.js";
|
|
14
|
-
|
|
15
|
-
// src/persistence/plugins/service-log-broadcaster.ts
|
|
16
|
-
import {
|
|
17
|
-
closeSync,
|
|
18
|
-
existsSync,
|
|
19
|
-
openSync,
|
|
20
|
-
readSync,
|
|
21
|
-
statSync,
|
|
22
|
-
watch
|
|
23
|
-
} from "fs";
|
|
24
|
-
var MAX_CHUNK_BYTES = 16384;
|
|
25
|
-
var active = /* @__PURE__ */ new Map();
|
|
26
|
-
function readNewBytes(logPath, position) {
|
|
27
|
-
try {
|
|
28
|
-
const size = statSync(logPath).size;
|
|
29
|
-
if (size <= position) return null;
|
|
30
|
-
const toRead = Math.min(size - position, MAX_CHUNK_BYTES);
|
|
31
|
-
const buf = Buffer.alloc(toRead);
|
|
32
|
-
const fd = openSync(logPath, "r");
|
|
33
|
-
const n = readSync(fd, buf, 0, toRead, position);
|
|
34
|
-
closeSync(fd);
|
|
35
|
-
if (n <= 0) return null;
|
|
36
|
-
return { chunk: buf.slice(0, n).toString("utf8"), newPosition: position + n };
|
|
37
|
-
} catch {
|
|
38
|
-
return null;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
function startServiceLogBroadcasting(id, fifonyDir) {
|
|
42
|
-
stopServiceLogBroadcasting(id);
|
|
43
|
-
const logPath = serviceLogPath(fifonyDir, id);
|
|
44
|
-
if (!existsSync(logPath)) return;
|
|
45
|
-
const entry = { watcher: null, position: 0 };
|
|
46
|
-
const flush = () => {
|
|
47
|
-
if (serviceLogRoomSize(id) === 0) return;
|
|
48
|
-
try {
|
|
49
|
-
const size = statSync(logPath).size;
|
|
50
|
-
if (size < entry.position) entry.position = 0;
|
|
51
|
-
} catch {
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
const result = readNewBytes(logPath, entry.position);
|
|
55
|
-
if (!result) return;
|
|
56
|
-
entry.position = result.newPosition;
|
|
57
|
-
sendToServiceLogRoom(id, JSON.stringify({ type: "service:log", id, chunk: result.chunk }));
|
|
58
|
-
};
|
|
59
|
-
try {
|
|
60
|
-
const watcher = watch(logPath, { persistent: false }, flush);
|
|
61
|
-
watcher.on("error", () => active.delete(id));
|
|
62
|
-
entry.watcher = watcher;
|
|
63
|
-
active.set(id, entry);
|
|
64
|
-
logger.debug({ id }, "[ServiceLogBroadcaster] Started");
|
|
65
|
-
flush();
|
|
66
|
-
} catch (err) {
|
|
67
|
-
logger.debug({ err, id }, "[ServiceLogBroadcaster] Could not watch log file");
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
function stopServiceLogBroadcasting(id) {
|
|
71
|
-
const entry = active.get(id);
|
|
72
|
-
if (!entry) return;
|
|
73
|
-
try {
|
|
74
|
-
entry.watcher.close();
|
|
75
|
-
} catch {
|
|
76
|
-
}
|
|
77
|
-
active.delete(id);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// src/routes/websocket.ts
|
|
81
|
-
var wsClients = /* @__PURE__ */ new Map();
|
|
82
|
-
var broadcastSeq = 0;
|
|
83
|
-
var lastBroadcastIssueSnapshot = /* @__PURE__ */ new Map();
|
|
84
|
-
var serviceLogRooms = /* @__PURE__ */ new Map();
|
|
85
|
-
function subscribeServiceLogRoom(socketId, serviceId) {
|
|
86
|
-
if (!serviceLogRooms.has(serviceId)) serviceLogRooms.set(serviceId, /* @__PURE__ */ new Set());
|
|
87
|
-
serviceLogRooms.get(serviceId).add(socketId);
|
|
88
|
-
}
|
|
89
|
-
function unsubscribeServiceLogRoom(socketId, serviceId) {
|
|
90
|
-
serviceLogRooms.get(serviceId)?.delete(socketId);
|
|
91
|
-
}
|
|
92
|
-
var analyticsRooms = /* @__PURE__ */ new Map();
|
|
93
|
-
var analyticsOnSubscribeFn = null;
|
|
94
|
-
function setAnalyticsOnSubscribeFn(fn) {
|
|
95
|
-
analyticsOnSubscribeFn = fn;
|
|
96
|
-
}
|
|
97
|
-
function subscribeAnalyticsRoom(socketId, topic) {
|
|
98
|
-
if (!analyticsRooms.has(topic)) analyticsRooms.set(topic, /* @__PURE__ */ new Set());
|
|
99
|
-
analyticsRooms.get(topic).add(socketId);
|
|
100
|
-
analyticsOnSubscribeFn?.(socketId, topic);
|
|
101
|
-
}
|
|
102
|
-
function unsubscribeAnalyticsRoom(socketId, topic) {
|
|
103
|
-
analyticsRooms.get(topic)?.delete(socketId);
|
|
104
|
-
}
|
|
105
|
-
function analyticsRoomHasSubscribers(topic) {
|
|
106
|
-
return (analyticsRooms.get(topic)?.size ?? 0) > 0;
|
|
107
|
-
}
|
|
108
|
-
function sendToAnalyticsRoom(topic, data) {
|
|
109
|
-
const room = analyticsRooms.get(topic);
|
|
110
|
-
if (!room || room.size === 0) return;
|
|
111
|
-
const msg = JSON.stringify({ type: "analytics:update", topic, data });
|
|
112
|
-
for (const socketId of [...room]) {
|
|
113
|
-
const send = wsClients.get(socketId);
|
|
114
|
-
if (!send) {
|
|
115
|
-
room.delete(socketId);
|
|
116
|
-
continue;
|
|
117
|
-
}
|
|
118
|
-
try {
|
|
119
|
-
send(msg);
|
|
120
|
-
} catch {
|
|
121
|
-
wsClients.delete(socketId);
|
|
122
|
-
room.delete(socketId);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
var issueLogRooms = /* @__PURE__ */ new Map();
|
|
127
|
-
function subscribeIssueLogRoom(socketId, issueId) {
|
|
128
|
-
if (!issueLogRooms.has(issueId)) issueLogRooms.set(issueId, /* @__PURE__ */ new Set());
|
|
129
|
-
issueLogRooms.get(issueId).add(socketId);
|
|
130
|
-
}
|
|
131
|
-
function unsubscribeIssueLogRoom(socketId, issueId) {
|
|
132
|
-
issueLogRooms.get(issueId)?.delete(socketId);
|
|
133
|
-
}
|
|
134
|
-
function issueLogRoomSize(issueId) {
|
|
135
|
-
return issueLogRooms.get(issueId)?.size ?? 0;
|
|
136
|
-
}
|
|
137
|
-
function sendToIssueLogRoom(issueId, data) {
|
|
138
|
-
const room = issueLogRooms.get(issueId);
|
|
139
|
-
if (!room || room.size === 0) return;
|
|
140
|
-
for (const socketId of [...room]) {
|
|
141
|
-
const send = wsClients.get(socketId);
|
|
142
|
-
if (!send) {
|
|
143
|
-
room.delete(socketId);
|
|
144
|
-
continue;
|
|
145
|
-
}
|
|
146
|
-
try {
|
|
147
|
-
send(data);
|
|
148
|
-
} catch {
|
|
149
|
-
wsClients.delete(socketId);
|
|
150
|
-
room.delete(socketId);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
var meshRoom = /* @__PURE__ */ new Set();
|
|
155
|
-
function subscribeMeshRoom(socketId) {
|
|
156
|
-
meshRoom.add(socketId);
|
|
157
|
-
}
|
|
158
|
-
function unsubscribeMeshRoom(socketId) {
|
|
159
|
-
meshRoom.delete(socketId);
|
|
160
|
-
}
|
|
161
|
-
function sendToMeshRoom(data) {
|
|
162
|
-
if (meshRoom.size === 0) return;
|
|
163
|
-
const msg = JSON.stringify(data);
|
|
164
|
-
for (const socketId of [...meshRoom]) {
|
|
165
|
-
const send = wsClients.get(socketId);
|
|
166
|
-
if (!send) {
|
|
167
|
-
meshRoom.delete(socketId);
|
|
168
|
-
continue;
|
|
169
|
-
}
|
|
170
|
-
try {
|
|
171
|
-
send(msg);
|
|
172
|
-
} catch {
|
|
173
|
-
wsClients.delete(socketId);
|
|
174
|
-
meshRoom.delete(socketId);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
function meshRoomHasSubscribers() {
|
|
179
|
-
return meshRoom.size > 0;
|
|
180
|
-
}
|
|
181
|
-
function unsubscribeFromAllRooms(socketId) {
|
|
182
|
-
for (const room of serviceLogRooms.values()) room.delete(socketId);
|
|
183
|
-
for (const room of analyticsRooms.values()) room.delete(socketId);
|
|
184
|
-
for (const room of issueLogRooms.values()) room.delete(socketId);
|
|
185
|
-
meshRoom.delete(socketId);
|
|
186
|
-
}
|
|
187
|
-
function serviceLogRoomSize(serviceId) {
|
|
188
|
-
return serviceLogRooms.get(serviceId)?.size ?? 0;
|
|
189
|
-
}
|
|
190
|
-
function sendToServiceLogRoom(serviceId, data) {
|
|
191
|
-
const room = serviceLogRooms.get(serviceId);
|
|
192
|
-
if (!room || room.size === 0) return;
|
|
193
|
-
for (const socketId of [...room]) {
|
|
194
|
-
const send = wsClients.get(socketId);
|
|
195
|
-
if (!send) {
|
|
196
|
-
room.delete(socketId);
|
|
197
|
-
continue;
|
|
198
|
-
}
|
|
199
|
-
try {
|
|
200
|
-
send(data);
|
|
201
|
-
} catch {
|
|
202
|
-
wsClients.delete(socketId);
|
|
203
|
-
room.delete(socketId);
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
function sendToAllClients(data) {
|
|
208
|
-
for (const [socketId, send] of [...wsClients]) {
|
|
209
|
-
try {
|
|
210
|
-
send(data);
|
|
211
|
-
} catch (error) {
|
|
212
|
-
logger.debug(`WebSocket send failed for ${socketId}, removing (remaining: ${wsClients.size - 1}): ${String(error)}`);
|
|
213
|
-
wsClients.delete(socketId);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
function broadcastIssueTransition(issue) {
|
|
218
|
-
if (wsClients.size === 0) return;
|
|
219
|
-
const data = JSON.stringify({
|
|
220
|
-
type: "issue:transition",
|
|
221
|
-
id: issue.id,
|
|
222
|
-
state: issue.state,
|
|
223
|
-
issue
|
|
224
|
-
});
|
|
225
|
-
sendToAllClients(data);
|
|
226
|
-
}
|
|
227
|
-
function broadcastToWebSocketClients(message) {
|
|
228
|
-
if (wsClients.size === 0) return;
|
|
229
|
-
broadcastSeq++;
|
|
230
|
-
logger.debug({ seq: broadcastSeq, type: message.type, clientCount: wsClients.size }, "[WebSocket] Broadcasting state update");
|
|
231
|
-
const issues = message.issues;
|
|
232
|
-
if (issues && lastBroadcastIssueSnapshot.size > 0) {
|
|
233
|
-
const currentIds = /* @__PURE__ */ new Set();
|
|
234
|
-
const changedIssues = [];
|
|
235
|
-
for (const issue of issues) {
|
|
236
|
-
const id = issue.id;
|
|
237
|
-
currentIds.add(id);
|
|
238
|
-
const serialized = JSON.stringify(issue);
|
|
239
|
-
if (lastBroadcastIssueSnapshot.get(id) !== serialized) {
|
|
240
|
-
changedIssues.push(issue);
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
const removedIds = [];
|
|
244
|
-
for (const prevId of lastBroadcastIssueSnapshot.keys()) {
|
|
245
|
-
if (!currentIds.has(prevId)) {
|
|
246
|
-
removedIds.push(prevId);
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
lastBroadcastIssueSnapshot = new Map(
|
|
250
|
-
issues.map((issue) => [issue.id, JSON.stringify(issue)])
|
|
251
|
-
);
|
|
252
|
-
if (changedIssues.length < issues.length / 2 || changedIssues.length <= 3) {
|
|
253
|
-
const delta = {
|
|
254
|
-
type: "state:delta",
|
|
255
|
-
seq: broadcastSeq,
|
|
256
|
-
metrics: message.metrics,
|
|
257
|
-
milestones: message.milestones,
|
|
258
|
-
updatedAt: message.updatedAt,
|
|
259
|
-
issuesDelta: changedIssues,
|
|
260
|
-
issuesRemoved: removedIds,
|
|
261
|
-
events: message.events
|
|
262
|
-
};
|
|
263
|
-
sendToAllClients(JSON.stringify(delta));
|
|
264
|
-
return;
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
if (issues) {
|
|
268
|
-
lastBroadcastIssueSnapshot = new Map(
|
|
269
|
-
issues.map((issue) => [issue.id, JSON.stringify(issue)])
|
|
270
|
-
);
|
|
271
|
-
}
|
|
272
|
-
sendToAllClients(JSON.stringify({
|
|
273
|
-
...message,
|
|
274
|
-
seq: broadcastSeq
|
|
275
|
-
}));
|
|
276
|
-
}
|
|
277
|
-
function makeWebSocketConfig(state) {
|
|
278
|
-
return {
|
|
279
|
-
enabled: true,
|
|
280
|
-
path: "/ws",
|
|
281
|
-
maxPayloadBytes: 512e3,
|
|
282
|
-
onConnection: (socketId, send) => {
|
|
283
|
-
wsClients.set(socketId, send);
|
|
284
|
-
logger.debug(`WebSocket client connected: ${socketId} (total: ${wsClients.size})`);
|
|
285
|
-
try {
|
|
286
|
-
send(JSON.stringify({
|
|
287
|
-
type: "connected",
|
|
288
|
-
seq: broadcastSeq,
|
|
289
|
-
timestamp: now(),
|
|
290
|
-
metrics: computeMetrics(state.issues),
|
|
291
|
-
milestones: state.milestones,
|
|
292
|
-
issues: state.issues,
|
|
293
|
-
events: state.events.slice(0, 50)
|
|
294
|
-
}));
|
|
295
|
-
} catch (error) {
|
|
296
|
-
logger.debug(`WebSocket initial send failed for ${socketId}: ${String(error)}`);
|
|
297
|
-
}
|
|
298
|
-
},
|
|
299
|
-
onMessage: (socketId, message, send) => {
|
|
300
|
-
try {
|
|
301
|
-
const msg = JSON.parse(typeof message === "string" ? message : message.toString("utf8"));
|
|
302
|
-
if (msg.type === "ping") {
|
|
303
|
-
send(JSON.stringify({ type: "pong", timestamp: now() }));
|
|
304
|
-
} else if (msg.type === "service:log:subscribe" && typeof msg.id === "string") {
|
|
305
|
-
subscribeServiceLogRoom(socketId, msg.id);
|
|
306
|
-
startServiceLogBroadcasting(msg.id, STATE_ROOT);
|
|
307
|
-
logger.debug({ socketId, serviceId: msg.id }, "[WebSocket] Subscribed to service log room");
|
|
308
|
-
} else if (msg.type === "service:log:unsubscribe" && typeof msg.id === "string") {
|
|
309
|
-
unsubscribeServiceLogRoom(socketId, msg.id);
|
|
310
|
-
logger.debug({ socketId, serviceId: msg.id }, "[WebSocket] Unsubscribed from service log room");
|
|
311
|
-
} else if (msg.type === "analytics:subscribe" && typeof msg.topic === "string") {
|
|
312
|
-
subscribeAnalyticsRoom(socketId, msg.topic);
|
|
313
|
-
logger.debug({ socketId, topic: msg.topic }, "[WebSocket] Subscribed to analytics room");
|
|
314
|
-
} else if (msg.type === "analytics:unsubscribe" && typeof msg.topic === "string") {
|
|
315
|
-
unsubscribeAnalyticsRoom(socketId, msg.topic);
|
|
316
|
-
logger.debug({ socketId, topic: msg.topic }, "[WebSocket] Unsubscribed from analytics room");
|
|
317
|
-
} else if (msg.type === "issue:log:subscribe" && typeof msg.id === "string") {
|
|
318
|
-
subscribeIssueLogRoom(socketId, msg.id);
|
|
319
|
-
logger.debug({ socketId, issueId: msg.id }, "[WebSocket] Subscribed to issue log room");
|
|
320
|
-
} else if (msg.type === "issue:log:unsubscribe" && typeof msg.id === "string") {
|
|
321
|
-
unsubscribeIssueLogRoom(socketId, msg.id);
|
|
322
|
-
logger.debug({ socketId, issueId: msg.id }, "[WebSocket] Unsubscribed from issue log room");
|
|
323
|
-
} else if (msg.type === "mesh:subscribe") {
|
|
324
|
-
subscribeMeshRoom(socketId);
|
|
325
|
-
logger.debug({ socketId }, "[WebSocket] Subscribed to mesh traffic room");
|
|
326
|
-
} else if (msg.type === "mesh:unsubscribe") {
|
|
327
|
-
unsubscribeMeshRoom(socketId);
|
|
328
|
-
logger.debug({ socketId }, "[WebSocket] Unsubscribed from mesh traffic room");
|
|
329
|
-
}
|
|
330
|
-
} catch {
|
|
331
|
-
}
|
|
332
|
-
},
|
|
333
|
-
onClose: (socketId) => {
|
|
334
|
-
wsClients.delete(socketId);
|
|
335
|
-
unsubscribeFromAllRooms(socketId);
|
|
336
|
-
logger.debug(`WebSocket client disconnected: ${socketId} (total: ${wsClients.size})`);
|
|
337
|
-
}
|
|
338
|
-
};
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
export {
|
|
342
|
-
startServiceLogBroadcasting,
|
|
343
|
-
stopServiceLogBroadcasting,
|
|
344
|
-
wsClients,
|
|
345
|
-
broadcastSeq,
|
|
346
|
-
lastBroadcastIssueSnapshot,
|
|
347
|
-
subscribeServiceLogRoom,
|
|
348
|
-
unsubscribeServiceLogRoom,
|
|
349
|
-
setAnalyticsOnSubscribeFn,
|
|
350
|
-
subscribeAnalyticsRoom,
|
|
351
|
-
unsubscribeAnalyticsRoom,
|
|
352
|
-
analyticsRoomHasSubscribers,
|
|
353
|
-
sendToAnalyticsRoom,
|
|
354
|
-
subscribeIssueLogRoom,
|
|
355
|
-
unsubscribeIssueLogRoom,
|
|
356
|
-
issueLogRoomSize,
|
|
357
|
-
sendToIssueLogRoom,
|
|
358
|
-
subscribeMeshRoom,
|
|
359
|
-
unsubscribeMeshRoom,
|
|
360
|
-
sendToMeshRoom,
|
|
361
|
-
meshRoomHasSubscribers,
|
|
362
|
-
unsubscribeFromAllRooms,
|
|
363
|
-
serviceLogRoomSize,
|
|
364
|
-
sendToServiceLogRoom,
|
|
365
|
-
sendToAllClients,
|
|
366
|
-
broadcastIssueTransition,
|
|
367
|
-
broadcastToWebSocketClients,
|
|
368
|
-
makeWebSocketConfig
|
|
369
|
-
};
|
|
370
|
-
//# sourceMappingURL=chunk-N4KFNX2G.js.map
|