tide-commander 1.199.0 → 1.199.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/assets/{AudioPlayer-CusBq3ON.js → AudioPlayer-XaWiU7f4.js} +1 -1
  3. package/dist/assets/{BossLogsModal-B1PLdne_.js → BossLogsModal-1tI-leZQ.js} +1 -1
  4. package/dist/assets/{BossSpawnModal-DQN_2lzh.js → BossSpawnModal-CRoChH0J.js} +1 -1
  5. package/dist/assets/{ControlsModal-D4JsU4VU.js → ControlsModal-Cu7kwhct.js} +1 -1
  6. package/dist/assets/{DockerLogsModal-BuCiJ02l.js → DockerLogsModal-DFAiOsWH.js} +1 -1
  7. package/dist/assets/{EmbeddedEditor-CBaRvdh1.js → EmbeddedEditor-hnSknX5L.js} +1 -1
  8. package/dist/assets/{FcStdViewer-CpJhmVIt.js → FcStdViewer-B_cbRz1w.js} +1 -1
  9. package/dist/assets/{GcodeViewer-B8BHZMmG.js → GcodeViewer-CFgwEZ6g.js} +1 -1
  10. package/dist/assets/{GlbViewer-DdVYw2Jh.js → GlbViewer-14WSSXX7.js} +1 -1
  11. package/dist/assets/{GmailOAuthSetup-Cj0r8z52.js → GmailOAuthSetup-waw2142C.js} +1 -1
  12. package/dist/assets/{GoogleOAuthSetup-BO0udRUZ.js → GoogleOAuthSetup-Bo59grtp.js} +1 -1
  13. package/dist/assets/{IframeModal-CecB4A27.js → IframeModal-B3M77grB.js} +1 -1
  14. package/dist/assets/{IntegrationsPanel-BVnzRrTb.js → IntegrationsPanel-BLHrC0GX.js} +2 -2
  15. package/dist/assets/{LogViewerModal-CNbfgDQK.js → LogViewerModal-CitlmDgQ.js} +1 -1
  16. package/dist/assets/{MonitoringModal-CUXXMqLv.js → MonitoringModal-BcKOCSRM.js} +1 -1
  17. package/dist/assets/{OrbitControls-DS7gPhsZ.js → OrbitControls-ANLmgNeR.js} +1 -1
  18. package/dist/assets/{PM2LogsModal-DFAuRDwm.js → PM2LogsModal-DrHpuMNf.js} +1 -1
  19. package/dist/assets/{RestoreArchivedAreaModal-DT5-U0A8.js → RestoreArchivedAreaModal-DcD3vdUJ.js} +1 -1
  20. package/dist/assets/{Scene2DCanvas-DqakJMdS.js → Scene2DCanvas-DKUcFYZW.js} +1 -1
  21. package/dist/assets/SceneManager-DPojKMM-.js +104 -0
  22. package/dist/assets/{SkillsPanel-1hYjREqo.js → SkillsPanel-CUW0prbh.js} +1 -1
  23. package/dist/assets/{SlackMultiInstanceSetup-C6EtUfP8.js → SlackMultiInstanceSetup-YFYeZ94t.js} +1 -1
  24. package/dist/assets/{SpawnModal-BmMZFOUj.js → SpawnModal-DPvq-R5b.js} +1 -1
  25. package/dist/assets/{StatisticsModal-mmqE6JaF.js → StatisticsModal-Dt-Hof51.js} +1 -1
  26. package/dist/assets/{StlViewer-D0XChi1U.js → StlViewer-GyyomEax.js} +1 -1
  27. package/dist/assets/{SubordinateAssignmentModal-CBISWK7c.js → SubordinateAssignmentModal-ahzGBjr4.js} +1 -1
  28. package/dist/assets/{ThreeAreaSelector-C_7zwy_Q.js → ThreeAreaSelector-Bj_mL6NG.js} +1 -1
  29. package/dist/assets/{ThreeViewShortcuts-DZZmjQAV.js → ThreeViewShortcuts-CKtE3yZV.js} +1 -1
  30. package/dist/assets/{TriggerManagerPanel-Bwd5-VGg.js → TriggerManagerPanel-DtdbOk9B.js} +1 -1
  31. package/dist/assets/{VideoPlayer-BuFPsPNu.js → VideoPlayer-Crq-MwPS.js} +1 -1
  32. package/dist/assets/{WorkflowEditorPanel-DxQfrs71.js → WorkflowEditorPanel-CitR9Em3.js} +1 -1
  33. package/dist/assets/{abnfDiagram-VRR7QNED-AhR0vtDs.js → abnfDiagram-VRR7QNED-QFcuJYPe.js} +1 -1
  34. package/dist/assets/{arc-CTR1mrNz.js → arc-CLuSzQ4E.js} +1 -1
  35. package/dist/assets/{architectureDiagram-ZJ3FMSHR-DrsB_-NW.js → architectureDiagram-ZJ3FMSHR-DlhVck93.js} +1 -1
  36. package/dist/assets/{area-logos-D_dodLqh.js → area-logos-DYARiYqI.js} +1 -1
  37. package/dist/assets/{blockDiagram-677ZJIJ3-Bf6BktPD.js → blockDiagram-677ZJIJ3-CJwOmsfj.js} +1 -1
  38. package/dist/assets/{c4Diagram-LMCZKHZV--UrsSHrg.js → c4Diagram-LMCZKHZV-OsgCNPWJ.js} +1 -1
  39. package/dist/assets/channel-cpl_NpAy.js +1 -0
  40. package/dist/assets/{chunk-2Q5K7J3B-DajcrDU0.js → chunk-2Q5K7J3B-KG-L7vvm.js} +1 -1
  41. package/dist/assets/{chunk-32BRIVSS-BoJToPN6.js → chunk-32BRIVSS-BXGbqO9v.js} +1 -1
  42. package/dist/assets/{chunk-5VM5RSS4-CWyIsEjs.js → chunk-5VM5RSS4-BWXkm8f0.js} +1 -1
  43. package/dist/assets/{chunk-EX3LRPZG-BxQt59EY.js → chunk-EX3LRPZG-7-8ulJ19.js} +1 -1
  44. package/dist/assets/{chunk-JWPE2WC7-CcltxnxE.js → chunk-JWPE2WC7-mkwFN5xu.js} +1 -1
  45. package/dist/assets/{chunk-MOJQB5TN-CoFz0cis.js → chunk-MOJQB5TN-WEfWznKE.js} +1 -1
  46. package/dist/assets/{chunk-RYQCIY6F-CqD5SIAs.js → chunk-RYQCIY6F-ByP5odu4.js} +1 -1
  47. package/dist/assets/{chunk-V7JOEXUC-B38vYRK3.js → chunk-V7JOEXUC-yWHmp1L1.js} +1 -1
  48. package/dist/assets/{chunk-VR4S4FIN-CVwpBl0T.js → chunk-VR4S4FIN-DHbZaHzt.js} +1 -1
  49. package/dist/assets/{chunk-XXDRQBXY-DznOU5hd.js → chunk-XXDRQBXY-SNa-Wh3U.js} +1 -1
  50. package/dist/assets/classDiagram-OUVF2IWQ-D_lsO4mm.js +1 -0
  51. package/dist/assets/classDiagram-v2-EOCWNBFH-D_lsO4mm.js +1 -0
  52. package/dist/assets/{cose-bilkent-JH36ORCC-B1uTqWwQ.js → cose-bilkent-JH36ORCC-CyxHYUhP.js} +1 -1
  53. package/dist/assets/{cynefin-VYW2F7L2-DgpqdGRT.js → cynefin-VYW2F7L2-BvwjSDiQ.js} +1 -1
  54. package/dist/assets/{cynefinDiagram-TSTJHNR4-Ld74Dvow.js → cynefinDiagram-TSTJHNR4-C8doInhn.js} +1 -1
  55. package/dist/assets/{dagre-VKFMJZFB-DAp2Br8X.js → dagre-VKFMJZFB-BNDcupek.js} +1 -1
  56. package/dist/assets/{diagram-FQU43EPY-CaMUb0eE.js → diagram-FQU43EPY-Bst0bBnQ.js} +1 -1
  57. package/dist/assets/{diagram-G47NLZAW-kTOq861A.js → diagram-G47NLZAW-CfEv0aTY.js} +1 -1
  58. package/dist/assets/{diagram-NH7WQ7WH-LWZrE7zu.js → diagram-NH7WQ7WH-B7MYvWXL.js} +1 -1
  59. package/dist/assets/{diagram-OA4YK3LP-Csm-frID.js → diagram-OA4YK3LP-BIzII0d2.js} +1 -1
  60. package/dist/assets/{diagram-WEI45ONY-BconZEMM.js → diagram-WEI45ONY-D5yd1HWr.js} +1 -1
  61. package/dist/assets/{ebnfDiagram-CCIWWBDH-Cr5xwAgl.js → ebnfDiagram-CCIWWBDH-gyhVYUos.js} +1 -1
  62. package/dist/assets/{erDiagram-Q63AITRT-76P2E9Q6.js → erDiagram-Q63AITRT-Duz-DwfE.js} +1 -1
  63. package/dist/assets/{flowDiagram-23GEKE2U-CciJAjTA.js → flowDiagram-23GEKE2U-CrnARkmw.js} +1 -1
  64. package/dist/assets/{ganttDiagram-NO4QXBWP-D7VgBp68.js → ganttDiagram-NO4QXBWP-D6cBteIN.js} +1 -1
  65. package/dist/assets/{gitGraphDiagram-IHSO6WYX-CxICR8Bg.js → gitGraphDiagram-IHSO6WYX-CMHfr_lR.js} +1 -1
  66. package/dist/assets/{index-Cd53q1WZ.js → index-2427ATYD.js} +3 -3
  67. package/dist/assets/{index-lQifR7XC.js → index-B1vOCcI-.js} +1 -1
  68. package/dist/assets/index-B5wHDczA.js +2 -0
  69. package/dist/assets/{index-BNsHVfai.js → index-CbMtvQTH.js} +1 -1
  70. package/dist/assets/{index-DzzLdCr9.js → index-D5O_0aq9.js} +1 -1
  71. package/dist/assets/{index-Bfmfqbw7.js → index-D5pIRxFm.js} +1 -1
  72. package/dist/assets/index-DJKuwqJG.js +2 -0
  73. package/dist/assets/{index-Dc4yP2fA.js → index-DeqoOoo6.js} +3 -3
  74. package/dist/assets/{index-Z0bYekBH.js → index-fiC5OXgR.js} +1 -1
  75. package/dist/assets/{infoDiagram-FWYZ7A6U-h-R7gGrP.js → infoDiagram-FWYZ7A6U-Mvk2Mpp3.js} +1 -1
  76. package/dist/assets/{ishikawaDiagram-FXEZZL3T-D1RbbiMz.js → ishikawaDiagram-FXEZZL3T-DXsaNDYg.js} +1 -1
  77. package/dist/assets/{journeyDiagram-5HDEW3XC-BnNUbZMI.js → journeyDiagram-5HDEW3XC-6QlK8xHN.js} +1 -1
  78. package/dist/assets/{kanban-definition-HUTT4EX6-kX3kneLI.js → kanban-definition-HUTT4EX6-D5EeRs07.js} +1 -1
  79. package/dist/assets/{linear-DC5X1tTJ.js → linear-D_aP9MD5.js} +1 -1
  80. package/dist/assets/main-B2ZLroL1.css +1 -0
  81. package/dist/assets/{main-Bb9H5jmt.js → main-Dk3qq80S.js} +156 -156
  82. package/dist/assets/{mermaid.core-BE33DHym.js → mermaid.core-CEculPxD.js} +4 -4
  83. package/dist/assets/{mindmap-definition-LN4V7U3C-CY3A4tSH.js → mindmap-definition-LN4V7U3C-Vjj9vgEN.js} +1 -1
  84. package/dist/assets/{pegDiagram-2B236MQR-B99ZSEym.js → pegDiagram-2B236MQR-B-AwbaoO.js} +1 -1
  85. package/dist/assets/{pieDiagram-ENE6RG2P-7PsmMteT.js → pieDiagram-ENE6RG2P-D5o1UYPK.js} +1 -1
  86. package/dist/assets/{quadrantDiagram-ABIIQ3AL-DjShiKUv.js → quadrantDiagram-ABIIQ3AL-Bl_Rbmz-.js} +1 -1
  87. package/dist/assets/{railroadDiagram-RFXS5EU6-B6KuCiHH.js → railroadDiagram-RFXS5EU6-CW-qy1dp.js} +1 -1
  88. package/dist/assets/{requirementDiagram-TGXJPOKE-k_7TCScw.js → requirementDiagram-TGXJPOKE-DGUQpy3K.js} +1 -1
  89. package/dist/assets/{sankeyDiagram-HTMAVEWB-D2YbTfpK.js → sankeyDiagram-HTMAVEWB-CUlWZH9G.js} +1 -1
  90. package/dist/assets/{sequenceDiagram-DBY2YBRQ-CuYh53OC.js → sequenceDiagram-DBY2YBRQ-CeDVJrbJ.js} +1 -1
  91. package/dist/assets/{sizeCapture-X5ZJPWSS-D4_qcFkr.js → sizeCapture-X5ZJPWSS-BGSL3ofq.js} +1 -1
  92. package/dist/assets/{stateDiagram-2N3HPSRC-DO9QVMBT.js → stateDiagram-2N3HPSRC-9A8tAPIu.js} +1 -1
  93. package/dist/assets/stateDiagram-v2-6OUMAXLB-DzVFFq0g.js +1 -0
  94. package/dist/assets/{swimlanes-5IMT3BWC-gMS-z6zh.js → swimlanes-5IMT3BWC-CipRR1uk.js} +2 -2
  95. package/dist/assets/swimlanesDiagram-G3AALYLV-XDQw-C4e.js +8 -0
  96. package/dist/assets/{timeline-definition-FHXFAJF6-CUmQCwOG.js → timeline-definition-FHXFAJF6-IgrCsFe-.js} +1 -1
  97. package/dist/assets/{vendor-three-CBPuP1jE.js → vendor-three-DYBBrXTx.js} +1 -1
  98. package/dist/assets/{vennDiagram-L72KCM5P-CIP-5b8u.js → vennDiagram-L72KCM5P-okSGsDy3.js} +1 -1
  99. package/dist/assets/{wardleyDiagram-EHGQE667-DlQqKMjr.js → wardleyDiagram-EHGQE667-G0RLggUt.js} +1 -1
  100. package/dist/assets/{web-DmAaMs-2.js → web-B5BfOO5C.js} +1 -1
  101. package/dist/assets/{web-D42BXPx5.js → web-BPOqvnJL.js} +1 -1
  102. package/dist/assets/{web-DVkGXGfI.js → web-Q8DwQW0W.js} +1 -1
  103. package/dist/assets/{xychartDiagram-FW5EYKEG-CekYCp3d.js → xychartDiagram-FW5EYKEG-DtVJEFyI.js} +1 -1
  104. package/dist/build-info.json +1 -1
  105. package/dist/index.html +3 -3
  106. package/dist/src/packages/server/app.js +26 -1
  107. package/dist/src/packages/server/claude/backend.js +5 -4
  108. package/dist/src/packages/server/claude/runner/stdout-pipeline.js +29 -30
  109. package/dist/src/packages/server/claude/runner/watchdog.js +2 -1
  110. package/dist/src/packages/server/claude/session-loader.js +141 -81
  111. package/dist/src/packages/server/data/index.js +35 -2
  112. package/dist/src/packages/server/routes/perf.js +50 -39
  113. package/dist/src/packages/server/services/git-watch-service.js +14 -2
  114. package/dist/src/packages/server/services/runtime-service.js +85 -39
  115. package/dist/src/packages/server/websocket/handler.js +33 -8
  116. package/dist/src/packages/server/websocket/listeners/runtime-listeners.js +5 -2
  117. package/package.json +3 -1
  118. package/dist/assets/SceneManager-htGN7YfA.js +0 -104
  119. package/dist/assets/channel-BkokQZXi.js +0 -1
  120. package/dist/assets/classDiagram-OUVF2IWQ-DibSrtP1.js +0 -1
  121. package/dist/assets/classDiagram-v2-EOCWNBFH-DibSrtP1.js +0 -1
  122. package/dist/assets/index-C8zT43_7.js +0 -2
  123. package/dist/assets/index-WhxnTPGa.js +0 -2
  124. package/dist/assets/main-CSv15YYo.css +0 -1
  125. package/dist/assets/stateDiagram-v2-6OUMAXLB-CekJ4qac.js +0 -1
  126. package/dist/assets/swimlanesDiagram-G3AALYLV-CfPVdXRk.js +0 -8
@@ -257,7 +257,14 @@ export function attachServer(server, wss) {
257
257
  if (pathname === '/ws') {
258
258
  // Auth check (verifyClient is not used in noServer mode)
259
259
  if (isAuthEnabled() && !validateWebSocketAuth(request)) {
260
- log.log('[WS] Connection rejected: invalid or missing auth token');
260
+ // Name the client: a stale tab / extension / device retrying every few
261
+ // seconds without a token is otherwise impossible to identify from the log.
262
+ const forwardedFor = request.headers['x-forwarded-for'];
263
+ const remote = (Array.isArray(forwardedFor) ? forwardedFor[0] : forwardedFor?.split(',')[0]?.trim())
264
+ || request.socket.remoteAddress || 'unknown';
265
+ const origin = request.headers.origin || 'no-origin';
266
+ const userAgent = (request.headers['user-agent'] || 'no-ua').slice(0, 80);
267
+ log.log(`[WS] Connection rejected: invalid or missing auth token (from ${remote}, origin=${origin}, ua="${userAgent}")`);
261
268
  socket.write('HTTP/1.1 401 Unauthorized\r\n\r\n');
262
269
  socket.destroy();
263
270
  return;
@@ -273,7 +280,24 @@ export function init(server) {
273
280
  // Use noServer mode so we can manually route upgrade events.
274
281
  // This allows the terminal proxy to handle /api/terminal/*/ws upgrades
275
282
  // without the main WSS intercepting and rejecting them.
276
- const wss = new WebSocketServer({ noServer: true });
283
+ // permessage-deflate, negotiated per client (browsers and the Android
284
+ // WebView support it; clients that don't simply get uncompressed frames).
285
+ // Only frames >= 8 KB are compressed: streaming deltas/events stay cheap,
286
+ // while the connect handshake — agents_update (~365 KB with 180 agents),
287
+ // skills_update (~400 KB), custom_agent_classes_update (~140 KB) — shrinks
288
+ // 5-8x, which is what a phone re-downloads on every resume/reconnect.
289
+ // No context takeover keeps per-connection zlib memory flat. Escape hatch:
290
+ // TIDE_WS_COMPRESSION=0.
291
+ const wsCompression = process.env.TIDE_WS_COMPRESSION === '0'
292
+ ? false
293
+ : {
294
+ threshold: 8 * 1024,
295
+ serverNoContextTakeover: true,
296
+ clientNoContextTakeover: true,
297
+ zlibDeflateOptions: { level: 3 },
298
+ concurrencyLimit: 4,
299
+ };
300
+ const wss = new WebSocketServer({ noServer: true, perMessageDeflate: wsCompression });
277
301
  attachServer(server, wss);
278
302
  wss.on('connection', (ws, request) => {
279
303
  clients.add(ws);
@@ -370,13 +394,14 @@ export function init(server) {
370
394
  gitWatchService.removeSocket(ws);
371
395
  log.log(`Client disconnected (remaining: ${clients.size})`);
372
396
  });
373
- // Background sync – refreshes agent status after initial data is sent
397
+ // Background sync – refreshes agent status after initial data is sent.
398
+ // Any status flip it performs goes through agentService.updateAgent, whose
399
+ // 'updated' listener already broadcasts a per-agent `agent_updated` to this
400
+ // (now registered) socket — so no second full `agents_update` is needed.
401
+ // That resend was ~365 KB per connection with 180 agents, and on the
402
+ // client it triggered a full store.setAgents + another tool-history fetch.
374
403
  if (!notifyOnly) {
375
- runtimeService.syncAllAgentStatus().then(() => {
376
- if (ws.readyState === WebSocket.OPEN) {
377
- ws.send(JSON.stringify({ type: 'agents_update', payload: agentService.getAllAgents() }));
378
- }
379
- }).catch(() => { });
404
+ runtimeService.syncAllAgentStatus().catch(() => { });
380
405
  // PM2 polling pauses while no clients are connected — run one poll now
381
406
  // so building status badges are fresh for this client.
382
407
  buildingService.triggerPM2StatusPoll();
@@ -428,8 +428,11 @@ export function setupRuntimeListeners(ctx) {
428
428
  });
429
429
  });
430
430
  runtimeService.on('output', (agentId, text, isStreaming, subagentName, uuid, outputMeta) => {
431
- const textPreview = text.slice(0, 80).replace(/\n/g, '\\n');
432
- log.log(`[OUTPUT] agent=${agentId.slice(0, 4)} streaming=${isStreaming} text="${textPreview}" uuid=${uuid || 'none'}`);
431
+ if (process.env.DEBUG) {
432
+ // Per-chunk trace (one line per streaming delta) — debug only.
433
+ const textPreview = text.slice(0, 80).replace(/\n/g, '\\n');
434
+ log.debug(`[OUTPUT] agent=${agentId.slice(0, 4)} streaming=${isStreaming} text="${textPreview}" uuid=${uuid || 'none'}`);
435
+ }
433
436
  const payload = {
434
437
  agentId,
435
438
  text,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tide-commander",
3
- "version": "1.199.0",
3
+ "version": "1.199.2",
4
4
  "description": "Visual multi-agent orchestrator and manager for Claude Code with 3D/2D interface",
5
5
  "repository": {
6
6
  "type": "git",
@@ -77,6 +77,7 @@
77
77
  "archiver": "^7.0.1",
78
78
  "better-sqlite3": "^12.8.0",
79
79
  "codemirror": "^6.0.2",
80
+ "compression": "^1.8.1",
80
81
  "cors": "^2.8.5",
81
82
  "docxtemplater": "^3.68.3",
82
83
  "dotenv": "^17.2.3",
@@ -118,6 +119,7 @@
118
119
  "@capacitor/cli": "^8.3.0",
119
120
  "@capacitor/core": "^8.1.0",
120
121
  "@types/archiver": "^7.0.0",
122
+ "@types/compression": "^1.8.1",
121
123
  "@types/cors": "^2.8.19",
122
124
  "@types/express": "^5.0.6",
123
125
  "@types/node": "^25.0.9",