tide-commander 1.217.0 → 1.218.0
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/CHANGELOG.md +18 -0
- package/dist/assets/{AudioPlayer-wYzUPbI7.js → AudioPlayer-BU35uTDo.js} +1 -1
- package/dist/assets/{BossLogsModal-CmZNDIpu.js → BossLogsModal-D49SwElp.js} +1 -1
- package/dist/assets/{BossSpawnModal-DtVfSG5G.js → BossSpawnModal-Bgk7exUu.js} +1 -1
- package/dist/assets/{ControlsModal-C0tQf4xy.js → ControlsModal-DgTDBUCe.js} +1 -1
- package/dist/assets/{DockerLogsModal-DL_eRO-m.js → DockerLogsModal-C183oCfD.js} +1 -1
- package/dist/assets/{EmbeddedEditor-DAr7_QUH.js → EmbeddedEditor-ClzdWo_U.js} +1 -1
- package/dist/assets/{FcStdViewer-MDGJiz2T.js → FcStdViewer-59S072wF.js} +1 -1
- package/dist/assets/{GcodeViewer-BHVydtrp.js → GcodeViewer-DReIiHNj.js} +1 -1
- package/dist/assets/{GlbViewer-Bwr_Tayz.js → GlbViewer-D2pSoe0t.js} +1 -1
- package/dist/assets/{GmailOAuthSetup-D_uF2cyB.js → GmailOAuthSetup-DKlrbd-z.js} +1 -1
- package/dist/assets/{GoogleOAuthSetup-BCmzQl5e.js → GoogleOAuthSetup-BrZMful8.js} +1 -1
- package/dist/assets/{IframeModal-CQmCu_P4.js → IframeModal-eHhpdAUr.js} +1 -1
- package/dist/assets/{IntegrationsPanel-BmRLC7dz.js → IntegrationsPanel-Ch_7Mixq.js} +2 -2
- package/dist/assets/{LogViewerModal-CrnaI78u.js → LogViewerModal-CHQHQhmq.js} +1 -1
- package/dist/assets/{MonitoringModal-C6J4g3Jf.js → MonitoringModal-CfNXUJeT.js} +1 -1
- package/dist/assets/{PM2LogsModal-Ds3dRnuE.js → PM2LogsModal-CnjSHdiK.js} +1 -1
- package/dist/assets/{PluginsPanel-BWG2NKdJ.js → PluginsPanel-DiN979jU.js} +1 -1
- package/dist/assets/{RestoreArchivedAreaModal-BNccBE4Z.js → RestoreArchivedAreaModal-BpEjAVuV.js} +1 -1
- package/dist/assets/{Scene2DCanvas-CPvMvm9m.js → Scene2DCanvas-BOZhpvt1.js} +1 -1
- package/dist/assets/{SceneManager-lb8uiOCO.js → SceneManager-DWKXzRqi.js} +1 -1
- package/dist/assets/{SkillsPanel-BTO2Ow7t.js → SkillsPanel-Dc_S8gzp.js} +1 -1
- package/dist/assets/{SlackMultiInstanceSetup-Da_GWe5W.js → SlackMultiInstanceSetup-CWXANgYs.js} +1 -1
- package/dist/assets/{SpawnModal-JbFRYxZa.js → SpawnModal-CbYA9pn9.js} +1 -1
- package/dist/assets/{StatisticsModal-ChSnL5yu.js → StatisticsModal-DKkoc51h.js} +1 -1
- package/dist/assets/{StlViewer-BFr-I14v.js → StlViewer-DqpLp63P.js} +1 -1
- package/dist/assets/{SubordinateAssignmentModal-DchdwFLE.js → SubordinateAssignmentModal-BYQOXqH2.js} +1 -1
- package/dist/assets/{ThreeAreaSelector-D18G4udc.js → ThreeAreaSelector-DbvsMWLv.js} +1 -1
- package/dist/assets/{ThreeViewShortcuts-vNiMNFPJ.js → ThreeViewShortcuts-D3xDKZDg.js} +1 -1
- package/dist/assets/{TriggerManagerPanel-DjpLl7cf.js → TriggerManagerPanel-BIEiiB0F.js} +1 -1
- package/dist/assets/{VideoPlayer-Drj9r9Dx.js → VideoPlayer-CZ2icmjn.js} +1 -1
- package/dist/assets/{WorkflowEditorPanel-DLwkYQ8M.js → WorkflowEditorPanel-B2L4VASD.js} +1 -1
- package/dist/assets/{abnfDiagram-VRR7QNED-BVuUyMTx.js → abnfDiagram-VRR7QNED-ryySwhVB.js} +1 -1
- package/dist/assets/{arc-_phD079o.js → arc-TgqX_heu.js} +1 -1
- package/dist/assets/{architectureDiagram-ZJ3FMSHR-B7fAK4WF.js → architectureDiagram-ZJ3FMSHR-CBvaslRl.js} +1 -1
- package/dist/assets/{area-logos-RCA-q_Vf.js → area-logos-D4VAmxJY.js} +1 -1
- package/dist/assets/{blockDiagram-677ZJIJ3-C-OlY0-3.js → blockDiagram-677ZJIJ3-CjqntcUt.js} +1 -1
- package/dist/assets/{c4Diagram-LMCZKHZV-DrwXTZgK.js → c4Diagram-LMCZKHZV-JOcgicYy.js} +1 -1
- package/dist/assets/channel-4Acwen4U.js +1 -0
- package/dist/assets/{chunk-2Q5K7J3B-DCcJNg3d.js → chunk-2Q5K7J3B-Bpe3_0eg.js} +1 -1
- package/dist/assets/{chunk-32BRIVSS-CZZkOSIs.js → chunk-32BRIVSS-Bzixr9TC.js} +1 -1
- package/dist/assets/{chunk-5VM5RSS4-BCFrP-q5.js → chunk-5VM5RSS4-k5-E-nAB.js} +1 -1
- package/dist/assets/{chunk-EX3LRPZG-Bjnq5732.js → chunk-EX3LRPZG-BRhp3Q-r.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-CPjRN_WZ.js → chunk-JWPE2WC7-BNXpKFbW.js} +1 -1
- package/dist/assets/{chunk-MOJQB5TN-B6jVWpSe.js → chunk-MOJQB5TN-M1rwnbfN.js} +1 -1
- package/dist/assets/{chunk-RYQCIY6F-0QrHhHTV.js → chunk-RYQCIY6F-DICAsMV6.js} +1 -1
- package/dist/assets/{chunk-V7JOEXUC-DwLSEIop.js → chunk-V7JOEXUC-Cl3na5KS.js} +1 -1
- package/dist/assets/{chunk-VR4S4FIN-R-sa6MjG.js → chunk-VR4S4FIN-C1i0aRRM.js} +1 -1
- package/dist/assets/{chunk-XXDRQBXY-FuYmcHPd.js → chunk-XXDRQBXY-B9ncDDik.js} +1 -1
- package/dist/assets/classDiagram-OUVF2IWQ-ChFbWxiV.js +1 -0
- package/dist/assets/classDiagram-v2-EOCWNBFH-ChFbWxiV.js +1 -0
- package/dist/assets/{cose-bilkent-JH36ORCC-CvD5NdQ_.js → cose-bilkent-JH36ORCC-BgJ0QFpw.js} +1 -1
- package/dist/assets/{cynefin-VYW2F7L2-C8_VnooS.js → cynefin-VYW2F7L2-BSrO1EZm.js} +1 -1
- package/dist/assets/{cynefinDiagram-TSTJHNR4-SD_F8ul6.js → cynefinDiagram-TSTJHNR4-DxG0EKrw.js} +1 -1
- package/dist/assets/{dagre-VKFMJZFB-Cpeo3cpw.js → dagre-VKFMJZFB-BFcAu0KK.js} +1 -1
- package/dist/assets/{diagram-FQU43EPY-DsBnlRvM.js → diagram-FQU43EPY-MjLThK-e.js} +1 -1
- package/dist/assets/{diagram-G47NLZAW-BHMRe5db.js → diagram-G47NLZAW-30PERw4M.js} +1 -1
- package/dist/assets/{diagram-NH7WQ7WH-D8Rm6qlg.js → diagram-NH7WQ7WH-_o5yBpv1.js} +1 -1
- package/dist/assets/{diagram-OA4YK3LP-C4Svb0Zw.js → diagram-OA4YK3LP-DWzw17M1.js} +1 -1
- package/dist/assets/{diagram-WEI45ONY-BbFXrI2b.js → diagram-WEI45ONY-DUiBSsAu.js} +1 -1
- package/dist/assets/{ebnfDiagram-CCIWWBDH-CCBonTYH.js → ebnfDiagram-CCIWWBDH-BvfeLGVP.js} +1 -1
- package/dist/assets/{erDiagram-Q63AITRT-CGGw9uIx.js → erDiagram-Q63AITRT-CcGVeI78.js} +1 -1
- package/dist/assets/{flowDiagram-23GEKE2U-DWxHXzyo.js → flowDiagram-23GEKE2U-BaxQK1yy.js} +1 -1
- package/dist/assets/{ganttDiagram-NO4QXBWP-D74TSIvX.js → ganttDiagram-NO4QXBWP-BoagKKM_.js} +1 -1
- package/dist/assets/{gitGraphDiagram-IHSO6WYX-Cwv5rBxw.js → gitGraphDiagram-IHSO6WYX-CK3MKH5Y.js} +1 -1
- package/dist/assets/{index-B9rURqfo.js → index-BppBZhor.js} +1 -1
- package/dist/assets/{index-DW1gJ5Cs.js → index-BujRjFVV.js} +1 -1
- package/dist/assets/{index-BMXP1Yd8.js → index-CqgOl9zs.js} +3 -3
- package/dist/assets/{index-6lLWOBQK.js → index-DL7aFkI7.js} +1 -1
- package/dist/assets/{index-s33Ke8oj.js → index-DN6BcPrZ.js} +2 -2
- package/dist/assets/{index-DrIXfMcD.js → index-DmNqcx5v.js} +1 -1
- package/dist/assets/{index-BZztJf0b.js → index-SXH56b-h.js} +1 -1
- package/dist/assets/{index-DOcVAWbZ.js → index-fgJgEGu1.js} +1 -1
- package/dist/assets/{index-D-5PhYjN.js → index-qu-MNx34.js} +1 -1
- package/dist/assets/{infoDiagram-FWYZ7A6U-VSfMHDx9.js → infoDiagram-FWYZ7A6U-CFZJVVEZ.js} +1 -1
- package/dist/assets/{ishikawaDiagram-FXEZZL3T-CgWr16Qr.js → ishikawaDiagram-FXEZZL3T-B4jxlj5i.js} +1 -1
- package/dist/assets/{journeyDiagram-5HDEW3XC-Bv4ioJyG.js → journeyDiagram-5HDEW3XC-Di36Ke2R.js} +1 -1
- package/dist/assets/{kanban-definition-HUTT4EX6-DsUoZOQz.js → kanban-definition-HUTT4EX6-CfXuNtGm.js} +1 -1
- package/dist/assets/{linear-_3oDVafz.js → linear-kPN9OpYx.js} +1 -1
- package/dist/assets/{main-BKRg0DBA.js → main-9sJvXBYL.js} +160 -160
- package/dist/assets/{mermaid.core-spKo10MG.js → mermaid.core-BsJb1sx5.js} +4 -4
- package/dist/assets/{mindmap-definition-LN4V7U3C-C6uCJ4IN.js → mindmap-definition-LN4V7U3C-CmKQGyB-.js} +1 -1
- package/dist/assets/{pegDiagram-2B236MQR-BTIBB-Uw.js → pegDiagram-2B236MQR-CyT-8HHi.js} +1 -1
- package/dist/assets/{pieDiagram-ENE6RG2P-D7oP-ve7.js → pieDiagram-ENE6RG2P-ieekGcPa.js} +1 -1
- package/dist/assets/{quadrantDiagram-ABIIQ3AL-BfmcdARc.js → quadrantDiagram-ABIIQ3AL-CbWWbNLu.js} +1 -1
- package/dist/assets/{railroadDiagram-RFXS5EU6-CplgjUu4.js → railroadDiagram-RFXS5EU6-nRTVDuI2.js} +1 -1
- package/dist/assets/{requirementDiagram-TGXJPOKE-BiRTuy5B.js → requirementDiagram-TGXJPOKE-Da3qeFmb.js} +1 -1
- package/dist/assets/{sankeyDiagram-HTMAVEWB-C81HtBjy.js → sankeyDiagram-HTMAVEWB-CJctgFYp.js} +1 -1
- package/dist/assets/{sequenceDiagram-DBY2YBRQ-DFhPtqpN.js → sequenceDiagram-DBY2YBRQ-Bgo3ZLPq.js} +1 -1
- package/dist/assets/{sizeCapture-X5ZJPWSS-BkT4qJkY.js → sizeCapture-X5ZJPWSS-BYkiTkB_.js} +1 -1
- package/dist/assets/{stateDiagram-2N3HPSRC-CKvn1pfo.js → stateDiagram-2N3HPSRC-BbE4biWs.js} +1 -1
- package/dist/assets/stateDiagram-v2-6OUMAXLB-Bgw_r9Hj.js +1 -0
- package/dist/assets/{swimlanes-5IMT3BWC-D5WhCwkM.js → swimlanes-5IMT3BWC-Dia74-W4.js} +2 -2
- package/dist/assets/swimlanesDiagram-G3AALYLV-Bz9zuVSZ.js +8 -0
- package/dist/assets/{timeline-definition-FHXFAJF6-B-UTX_B8.js → timeline-definition-FHXFAJF6-BnpoOi8A.js} +1 -1
- package/dist/assets/{vennDiagram-L72KCM5P-DelObiCK.js → vennDiagram-L72KCM5P-B1qV_n6b.js} +1 -1
- package/dist/assets/{wardleyDiagram-EHGQE667-DCWJdXij.js → wardleyDiagram-EHGQE667-Ct40RXD2.js} +1 -1
- package/dist/assets/{web-C2DocoQz.js → web-C8vsfWIm.js} +1 -1
- package/dist/assets/{web-BOFBvPGv.js → web-D_9GMKcH.js} +1 -1
- package/dist/assets/{web-qtcj3i0F.js → web-DmbfztKE.js} +1 -1
- package/dist/assets/{xychartDiagram-FW5EYKEG-CzbE79ZQ.js → xychartDiagram-FW5EYKEG-BCIYfB3k.js} +1 -1
- package/dist/build-info.json +1 -1
- package/dist/index.html +1 -1
- package/dist/src/packages/server/app.js +8 -0
- package/dist/src/packages/server/index.js +8 -0
- package/dist/src/packages/server/integrations/slack/slack-polling-client.js +42 -3
- package/dist/src/packages/server/pi/backend.js +1 -0
- package/dist/src/packages/server/services/plugin-shell-command-service.js +22 -4
- package/dist/src/packages/server/services/pm2-service.js +21 -4
- package/dist/src/packages/server/utils/java-home.js +83 -0
- package/dist/src/packages/server/websocket/handler.js +16 -3
- package/dist/src/packages/shared/agent-types.js +5 -0
- package/package.json +2 -2
- package/scripts/dev-server.mjs +69 -0
- package/dist/assets/channel-BWg1ErwG.js +0 -1
- package/dist/assets/classDiagram-OUVF2IWQ-Cdy8Clus.js +0 -1
- package/dist/assets/classDiagram-v2-EOCWNBFH-Cdy8Clus.js +0 -1
- package/dist/assets/stateDiagram-v2-6OUMAXLB-blzdlH4v.js +0 -1
- package/dist/assets/swimlanesDiagram-G3AALYLV-BiOWb3s9.js +0 -8
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JAVA_HOME repair.
|
|
3
|
+
*
|
|
4
|
+
* A dangling JAVA_HOME (the JDK it points to was removed on upgrade) makes
|
|
5
|
+
* every Maven/Gradle build crash on boot with "JAVA_HOME is not defined
|
|
6
|
+
* correctly". Under PM2 that turned into a restart storm (~90/s) that filled
|
|
7
|
+
* pm2.log with tens of GB. Tide inherits its env into every building and
|
|
8
|
+
* agent shell, so we sanitise it once at boot and again when spawning PM2.
|
|
9
|
+
*/
|
|
10
|
+
import { existsSync, readdirSync, readlinkSync } from 'node:fs';
|
|
11
|
+
import { execFileSync } from 'node:child_process';
|
|
12
|
+
import path from 'node:path';
|
|
13
|
+
function hasJavaBinary(home) {
|
|
14
|
+
if (!home)
|
|
15
|
+
return false;
|
|
16
|
+
return existsSync(path.join(home, 'bin', 'java')) || existsSync(path.join(home, 'bin', 'java.exe'));
|
|
17
|
+
}
|
|
18
|
+
/** Candidate JDK roots, most specific first. Only existing, runnable ones are returned. */
|
|
19
|
+
function discoverJavaHomes() {
|
|
20
|
+
const found = [];
|
|
21
|
+
const push = (candidate) => {
|
|
22
|
+
if (candidate && hasJavaBinary(candidate) && !found.includes(candidate))
|
|
23
|
+
found.push(candidate);
|
|
24
|
+
};
|
|
25
|
+
// Linux alternatives (Fedora/RHEL: java_sdk; Debian: java resolves to .../bin/java)
|
|
26
|
+
for (const link of ['/etc/alternatives/java_sdk', '/etc/alternatives/java_home']) {
|
|
27
|
+
try {
|
|
28
|
+
push(readlinkSync(link));
|
|
29
|
+
}
|
|
30
|
+
catch { /* not present */ }
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
const javaBin = readlinkSync('/etc/alternatives/java');
|
|
34
|
+
push(path.resolve(path.dirname(javaBin), '..'));
|
|
35
|
+
}
|
|
36
|
+
catch { /* not present */ }
|
|
37
|
+
// macOS
|
|
38
|
+
if (process.platform === 'darwin') {
|
|
39
|
+
try {
|
|
40
|
+
push(execFileSync('/usr/libexec/java_home', { encoding: 'utf8', timeout: 3000 }).trim());
|
|
41
|
+
}
|
|
42
|
+
catch { /* no JDK registered */ }
|
|
43
|
+
}
|
|
44
|
+
// Common install roots
|
|
45
|
+
for (const root of ['/usr/lib/jvm', '/usr/local/lib/jvm', '/opt/java', '/Library/Java/JavaVirtualMachines']) {
|
|
46
|
+
let entries = [];
|
|
47
|
+
try {
|
|
48
|
+
entries = readdirSync(root);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
for (const entry of entries.sort().reverse()) {
|
|
54
|
+
push(path.join(root, entry));
|
|
55
|
+
push(path.join(root, entry, 'Contents', 'Home'));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return found;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Return a JAVA_HOME that actually contains bin/java: the configured one when
|
|
62
|
+
* valid, otherwise the best discovered JDK, otherwise null.
|
|
63
|
+
*/
|
|
64
|
+
export function resolveJavaHome(configured = process.env.JAVA_HOME) {
|
|
65
|
+
if (hasJavaBinary(configured))
|
|
66
|
+
return configured;
|
|
67
|
+
return discoverJavaHomes()[0] ?? null;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Repair process.env.JAVA_HOME in place when it points at a JDK that no longer
|
|
71
|
+
* exists. Returns a description of what changed (for logging) or null.
|
|
72
|
+
*/
|
|
73
|
+
export function repairProcessJavaHome() {
|
|
74
|
+
const configured = process.env.JAVA_HOME;
|
|
75
|
+
if (!configured || hasJavaBinary(configured))
|
|
76
|
+
return null;
|
|
77
|
+
const replacement = resolveJavaHome(undefined);
|
|
78
|
+
if (replacement)
|
|
79
|
+
process.env.JAVA_HOME = replacement;
|
|
80
|
+
else
|
|
81
|
+
delete process.env.JAVA_HOME;
|
|
82
|
+
return { from: configured, to: replacement };
|
|
83
|
+
}
|
|
@@ -329,7 +329,11 @@ export function init(server) {
|
|
|
329
329
|
if (notifyOnly) {
|
|
330
330
|
ws.__tcNotifyOnly = true;
|
|
331
331
|
}
|
|
332
|
-
|
|
332
|
+
const clientInfo = ws.__tcClient;
|
|
333
|
+
const clientLabel = clientInfo
|
|
334
|
+
? `from ${clientInfo.ip || '?'} origin=${clientInfo.origin || 'no-origin'} ua="${clientInfo.userAgent.slice(0, 60)}"`
|
|
335
|
+
: 'from unknown';
|
|
336
|
+
log.log(`${notifyOnly ? 'Notification-only client' : 'Client'} connected (total: ${clients.size}) ${clientLabel}`);
|
|
333
337
|
if (!notifyOnly) {
|
|
334
338
|
// Send initial state immediately – status sync runs in background
|
|
335
339
|
// server_time goes FIRST: clients use it to align their clock with the
|
|
@@ -420,11 +424,20 @@ export function init(server) {
|
|
|
420
424
|
log.error('Invalid message:', err, dataStr.substring(0, 100));
|
|
421
425
|
}
|
|
422
426
|
});
|
|
423
|
-
|
|
427
|
+
// Close code + reason + lifetime name the WHY: 1000/1001 with a reason is
|
|
428
|
+
// the client (unload, zombie kill, superseded), 1005/1006 without one is
|
|
429
|
+
// the transport dying underneath (network, proxy, sleeping device).
|
|
430
|
+
const connectedAtMs = Date.now();
|
|
431
|
+
ws.on('error', (err) => {
|
|
432
|
+
log.warn(`Client socket error ${clientLabel}: ${err instanceof Error ? err.message : String(err)}`);
|
|
433
|
+
});
|
|
434
|
+
ws.on('close', (code, reasonBuf) => {
|
|
424
435
|
clients.delete(ws);
|
|
425
436
|
setWsClientsCount(clients.size);
|
|
426
437
|
gitWatchService.removeSocket(ws);
|
|
427
|
-
|
|
438
|
+
const reason = reasonBuf?.toString() || '';
|
|
439
|
+
const lifeSec = Math.round((Date.now() - connectedAtMs) / 1000);
|
|
440
|
+
log.log(`Client disconnected (remaining: ${clients.size}) code=${code}${reason ? ` reason="${reason}"` : ''} after ${lifeSec}s ${clientLabel}`);
|
|
428
441
|
});
|
|
429
442
|
// Background sync – refreshes agent status after initial data is sent.
|
|
430
443
|
// Any status flip it performs goes through agentService.updateAgent, whose
|
|
@@ -112,6 +112,11 @@ export const CODEX_REASONING_EFFORTS = {
|
|
|
112
112
|
xhigh: { label: 'X-High', description: 'Extra-high reasoning, slowest', icon: '🧠' },
|
|
113
113
|
};
|
|
114
114
|
export const CODEX_MODELS = {
|
|
115
|
+
'gpt-6-astra': {
|
|
116
|
+
label: 'GPT-6 Astra',
|
|
117
|
+
description: 'GPT-6 Astra — OpenAI frontier model (Sep 2026)',
|
|
118
|
+
icon: '✨',
|
|
119
|
+
},
|
|
115
120
|
'gpt-5.6-luna': {
|
|
116
121
|
label: 'GPT-5.6 Luna',
|
|
117
122
|
description: 'GPT-5.6 Luna model',
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tide-commander",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.218.0",
|
|
4
4
|
"description": "Visual multi-agent orchestrator and manager for Claude Code with 3D/2D interface",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"scripts": {
|
|
21
21
|
"dev": "concurrently \"bun run dev:client\" \"bun run dev:server\"",
|
|
22
22
|
"dev:client": "vite",
|
|
23
|
-
"dev:server": "
|
|
23
|
+
"dev:server": "node scripts/dev-server.mjs",
|
|
24
24
|
"docs:dev": "npm --prefix src/packages/landing run dev",
|
|
25
25
|
"docs:build": "npm --prefix src/packages/landing run build",
|
|
26
26
|
"docs:preview": "npm --prefix src/packages/landing run preview",
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Dev server launcher for `npm run dev:server`.
|
|
3
|
+
//
|
|
4
|
+
// `tsx watch` restarts the API on a change to ANY module the process has
|
|
5
|
+
// imported. External plugins (plugins/state.json `sourcePath`, loaded by the
|
|
6
|
+
// plugin manager through a dynamic import()) count, so editing a plugin's
|
|
7
|
+
// server.mjs in a sibling checkout restarted the whole commander: live exec
|
|
8
|
+
// registries, agent streams and WebSocket clients all dropped. This wrapper
|
|
9
|
+
// excludes every installed plugin root from the watcher. Plugins re-import
|
|
10
|
+
// with an mtime cache-bust on POST /api/plugins/:id/disable + /enable.
|
|
11
|
+
//
|
|
12
|
+
// Only relative --exclude patterns work: tsx hands them to chokidar, which
|
|
13
|
+
// matches against absolute paths, so `**/*.mjs` silently matches nothing.
|
|
14
|
+
import { spawn } from 'node:child_process';
|
|
15
|
+
import fs from 'node:fs';
|
|
16
|
+
import os from 'node:os';
|
|
17
|
+
import path from 'node:path';
|
|
18
|
+
import { fileURLToPath } from 'node:url';
|
|
19
|
+
|
|
20
|
+
const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
|
|
21
|
+
const dataDir = path.join(
|
|
22
|
+
process.env.XDG_DATA_HOME || path.join(os.homedir(), '.local', 'share'),
|
|
23
|
+
'tide-commander',
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
function installedPluginRoots() {
|
|
27
|
+
try {
|
|
28
|
+
const raw = fs.readFileSync(path.join(dataDir, 'plugins', 'state.json'), 'utf8');
|
|
29
|
+
const state = JSON.parse(raw);
|
|
30
|
+
const roots = [];
|
|
31
|
+
for (const entry of state.installed ?? []) {
|
|
32
|
+
if (typeof entry?.sourcePath !== 'string') continue;
|
|
33
|
+
let root = entry.sourcePath;
|
|
34
|
+
try { root = fs.realpathSync(root); } catch { /* keep as configured */ }
|
|
35
|
+
// A plugin living inside the repo is normal source; leave it watched.
|
|
36
|
+
const rel = path.relative(repoRoot, root);
|
|
37
|
+
if (!rel || (!rel.startsWith('..') && !path.isAbsolute(rel))) continue;
|
|
38
|
+
roots.push(rel);
|
|
39
|
+
}
|
|
40
|
+
return roots;
|
|
41
|
+
} catch {
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const excludes = installedPluginRoots();
|
|
47
|
+
const args = ['watch', '--clear-screen=false'];
|
|
48
|
+
for (const rel of excludes) args.push('--exclude', path.join(rel, '**'));
|
|
49
|
+
args.push('src/packages/server/index.ts');
|
|
50
|
+
|
|
51
|
+
if (excludes.length > 0) {
|
|
52
|
+
console.log(`[dev-server] excluding ${excludes.length} external plugin root(s) from tsx watch: ${excludes.join(', ')}`);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (process.env.DEV_SERVER_PRINT_ARGS) {
|
|
56
|
+
console.log(JSON.stringify(args));
|
|
57
|
+
process.exit(0);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const tsxBin = path.join(repoRoot, 'node_modules', '.bin', process.platform === 'win32' ? 'tsx.cmd' : 'tsx');
|
|
61
|
+
const child = spawn(tsxBin, args, { cwd: repoRoot, stdio: 'inherit', shell: process.platform === 'win32' });
|
|
62
|
+
|
|
63
|
+
for (const signal of ['SIGINT', 'SIGTERM', 'SIGHUP']) {
|
|
64
|
+
process.on(signal, () => { child.kill(signal); });
|
|
65
|
+
}
|
|
66
|
+
child.on('exit', (code, signal) => {
|
|
67
|
+
if (signal) process.kill(process.pid, signal);
|
|
68
|
+
process.exit(code ?? 0);
|
|
69
|
+
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{U as a,C as n}from"./mermaid.core-spKo10MG.js";const t=(r,o)=>a.lang.round(n.parse(r)[o]);export{t as c};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as a,c as s,a as e,C as t}from"./chunk-V7JOEXUC-DwLSEIop.js";import{_ as i}from"./mermaid.core-spKo10MG.js";import"./chunk-5VM5RSS4-BCFrP-q5.js";import"./chunk-XXDRQBXY-FuYmcHPd.js";import"./chunk-VR4S4FIN-R-sa6MjG.js";import"./chunk-32BRIVSS-CZZkOSIs.js";import"./main-BKRg0DBA.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-DSCAlQQW.js";var b={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{b as diagram};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as a,c as s,a as e,C as t}from"./chunk-V7JOEXUC-DwLSEIop.js";import{_ as i}from"./mermaid.core-spKo10MG.js";import"./chunk-5VM5RSS4-BCFrP-q5.js";import"./chunk-XXDRQBXY-FuYmcHPd.js";import"./chunk-VR4S4FIN-R-sa6MjG.js";import"./chunk-32BRIVSS-CZZkOSIs.js";import"./main-BKRg0DBA.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-DSCAlQQW.js";var b={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{b as diagram};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as r,b as e,a,S as s}from"./chunk-EX3LRPZG-Bjnq5732.js";import{_ as i}from"./mermaid.core-spKo10MG.js";import"./chunk-XXDRQBXY-FuYmcHPd.js";import"./chunk-VR4S4FIN-R-sa6MjG.js";import"./chunk-32BRIVSS-CZZkOSIs.js";import"./main-BKRg0DBA.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-DSCAlQQW.js";var b={parser:a,get db(){return new s(2)},renderer:e,styles:r,init:i(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")};export{b as diagram};
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import{c as r,s as e}from"./flowDiagram-23GEKE2U-DWxHXzyo.js";import{_ as a}from"./mermaid.core-spKo10MG.js";import"./chunk-5VM5RSS4-BCFrP-q5.js";import"./chunk-XXDRQBXY-FuYmcHPd.js";import"./chunk-VR4S4FIN-R-sa6MjG.js";import"./chunk-32BRIVSS-CZZkOSIs.js";import"./channel-BWg1ErwG.js";import"./main-BKRg0DBA.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-DSCAlQQW.js";var o=a(t=>`${e(t)}
|
|
2
|
-
.swimlane.cluster rect {
|
|
3
|
-
stroke: ${t.clusterBorder} !important;
|
|
4
|
-
}
|
|
5
|
-
[data-look="neo"].cluster rect {
|
|
6
|
-
filter: none;
|
|
7
|
-
}
|
|
8
|
-
`,"getStyles"),m=o,_=r({defaultLayout:"swimlane",styles:m});export{_ as diagram};
|