dodo-mcp 1.0.2 → 1.0.3
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 +31 -18
- package/dist/cli/main.js +63 -66
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/menu.js +9 -16
- package/dist/cli/menu.js.map +1 -1
- package/dist/config/globalConfig.js +23 -1
- package/dist/config/globalConfig.js.map +1 -1
- package/dist/config/stateImport.js +2 -2
- package/dist/config/stateImport.js.map +1 -1
- package/dist/config/tunnelConfig.js +2 -3
- package/dist/config/tunnelConfig.js.map +1 -1
- package/dist/server/appServer.js +38 -26
- package/dist/server/appServer.js.map +1 -1
- package/dist/server/configUi/app.js +35 -58
- package/dist/server/configUi/index.html +21 -22
- package/dist/server/localConfig.js +50 -63
- package/dist/server/localConfig.js.map +1 -1
- package/dist/tunnel/control.js +4 -6
- package/dist/tunnel/control.js.map +1 -1
- package/dist/tunnel/credentials.js +5 -19
- package/dist/tunnel/credentials.js.map +1 -1
- package/dist/tunnel/runtime.js +3 -4
- package/dist/tunnel/runtime.js.map +1 -1
- package/dist/tunnel/supervisor.js +8 -10
- package/dist/tunnel/supervisor.js.map +1 -1
- package/docs/AI_PROVIDERS.md +1 -1
- package/docs/ARCHITECTURE.md +14 -14
- package/docs/COMPATIBILITY.md +6 -2
- package/docs/MANUAL_ACCEPTANCE.md +21 -16
- package/docs/RELEASE_1.0.0.md +3 -0
- package/docs/RELEASE_1.0.3.md +57 -0
- package/docs/RELEASE_NOTES.md +19 -0
- package/docs/SECURITY.md +20 -10
- package/docs/TEST_REPORT.md +33 -1
- package/docs/TUNNEL.md +102 -80
- package/docs/WINDOWS.md +1 -1
- package/docs/adr/031-owner-selected-tunnel-supervision.md +8 -2
- package/docs/adr/044-global-launcher-and-cli-menu.md +3 -3
- package/docs/adr/047-temporary-remote-config.md +4 -4
- package/docs/adr/048-persistent-connection-mode.md +58 -0
- package/docs/adr/README.md +1 -0
- package/package.json +2 -1
- package/schemas/global-config.schema.json +6 -12
package/dist/server/appServer.js
CHANGED
|
@@ -8,7 +8,7 @@ import { createMcpHandler, McpServer } from '@modelcontextprotocol/server';
|
|
|
8
8
|
import { toNodeHandler } from '@modelcontextprotocol/node';
|
|
9
9
|
import { DodoError } from '../errors.js';
|
|
10
10
|
import { ensureConfigDir, ipcSocketPath, resolveConfigDir, statePaths } from '../config/paths.js';
|
|
11
|
-
import {
|
|
11
|
+
import { validatePublicUrl } from '../config/globalConfig.js';
|
|
12
12
|
import { loadOrCreateJwks, loadOrCreateCookieKeys } from '../auth/keys.js';
|
|
13
13
|
import { buildProvider } from '../auth/provider.js';
|
|
14
14
|
import { buildTokenVerifier } from '../auth/verifier.js';
|
|
@@ -25,6 +25,7 @@ import { attachOptionalServices } from './optionalServices.js';
|
|
|
25
25
|
import { createWorkspaceHost } from './workspaceHost.js';
|
|
26
26
|
import { startLocalConfig } from './localConfig.js';
|
|
27
27
|
import { DODO_VERSION } from './version.js';
|
|
28
|
+
import { osCredentialAvailability, osTunnelCredentialRef, storeOsTunnelCredentialValue } from '../tunnel/credentials.js';
|
|
28
29
|
import { RemoteConfigGateway } from './remoteConfig.js';
|
|
29
30
|
export { DODO_VERSION };
|
|
30
31
|
/**
|
|
@@ -95,17 +96,31 @@ export async function startServer(opts) {
|
|
|
95
96
|
// Assigned once the IPC resources exist; closures below read it per request.
|
|
96
97
|
const hostRef = { host: undefined };
|
|
97
98
|
const active = () => (hostRef.host ? hostRef.host.current() : ws0);
|
|
98
|
-
// ----
|
|
99
|
-
const
|
|
99
|
+
// ---- selected endpoint / auth mode ------------------------------------
|
|
100
|
+
const port = opts.portOverride ?? config.port;
|
|
101
|
+
const connectionMode = opts.connectionMode ?? config.tunnel.connectionMode;
|
|
102
|
+
const publicUrlRaw = connectionMode === 'local'
|
|
103
|
+
// A dynamic port is useful for internal fixtures but cannot be a stable
|
|
104
|
+
// OAuth issuer before listen completes, so that low-level mode stays locked.
|
|
105
|
+
// The product CLI rejects port 0 for Local mode before reaching this layer.
|
|
106
|
+
? port === 0 ? undefined : `http://127.0.0.1:${port}`
|
|
107
|
+
: opts.publicUrlOverride ?? config.publicUrl;
|
|
100
108
|
let locked = true;
|
|
101
109
|
let issuer = null;
|
|
102
110
|
let resourceUrl = null;
|
|
103
111
|
if (publicUrlRaw !== undefined) {
|
|
104
|
-
const url = validatePublicUrl(publicUrlRaw, config.dangerouslyAllowInsecurePublicUrl);
|
|
112
|
+
const url = validatePublicUrl(publicUrlRaw, config.dangerouslyAllowInsecurePublicUrl || connectionMode === 'local');
|
|
105
113
|
issuer = url.origin;
|
|
106
114
|
resourceUrl = `${issuer}/mcp`;
|
|
107
115
|
locked = false;
|
|
108
116
|
}
|
|
117
|
+
if (opts.remoteConfig && connectionMode !== 'tunnel') {
|
|
118
|
+
await ws0.shutdownServices();
|
|
119
|
+
installDb.close();
|
|
120
|
+
throw new DodoError('CONFLICT', 'Remote Config is available only while DODO connection mode is tunnel', {
|
|
121
|
+
recovery: 'run dodo tunnel configure --tunnel --os-credential --public-url https://your-host, restart DODO, then run dodo --web',
|
|
122
|
+
});
|
|
123
|
+
}
|
|
109
124
|
if (opts.remoteConfig && !issuer) {
|
|
110
125
|
await ws0.shutdownServices();
|
|
111
126
|
installDb.close();
|
|
@@ -130,7 +145,7 @@ export async function startServer(opts) {
|
|
|
130
145
|
// This router is inert (404) until the local owner explicitly opens a
|
|
131
146
|
// bounded lease. It is mounted before OAuth's provider callback so the
|
|
132
147
|
// temporary /config namespace can be reached through the same tunnel.
|
|
133
|
-
const remoteConfigGateway = issuer
|
|
148
|
+
const remoteConfigGateway = issuer && connectionMode === 'tunnel'
|
|
134
149
|
? new RemoteConfigGateway(issuer, opts.remoteConfigLeaseMs)
|
|
135
150
|
: undefined;
|
|
136
151
|
remoteConfigGateway?.mount(app);
|
|
@@ -268,7 +283,6 @@ export async function startServer(opts) {
|
|
|
268
283
|
res.status(404).setHeader('Cache-Control', 'no-store').json({ error: 'not_found' });
|
|
269
284
|
});
|
|
270
285
|
// ---- listen ------------------------------------------------------------
|
|
271
|
-
const port = opts.portOverride ?? config.port;
|
|
272
286
|
const httpServer = http.createServer(app);
|
|
273
287
|
httpServer.requestTimeout = 120_000;
|
|
274
288
|
httpServer.headersTimeout = 30_000;
|
|
@@ -297,31 +311,20 @@ export async function startServer(opts) {
|
|
|
297
311
|
});
|
|
298
312
|
}
|
|
299
313
|
// ---- private IPC (per workspace) ---------------------------------------
|
|
300
|
-
const transportInfo = () => ({ kind: 'http', port: actualPort, locked, publicUrl: issuer });
|
|
314
|
+
const transportInfo = () => ({ kind: 'http', port: actualPort, locked, publicUrl: issuer, connectionMode });
|
|
301
315
|
let remoteConfigReady = false;
|
|
302
316
|
const remoteConfigControl = remoteConfigGateway ? {
|
|
303
317
|
open: async (args) => {
|
|
304
318
|
if (!remoteConfigReady)
|
|
305
319
|
throw new DodoError('NOT_SUPPORTED', 'Remote Config requires the loopback Local Config server');
|
|
306
320
|
const keys = Object.keys(args);
|
|
307
|
-
if (keys.
|
|
321
|
+
if (keys.length > 0) {
|
|
308
322
|
throw new DodoError('INVALID_INPUT', 'Remote Config open request contains an unsupported field');
|
|
309
323
|
}
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
if (typeof token === 'string' && token.length > 0) {
|
|
315
|
-
if (!opts.tunnelRuntime)
|
|
316
|
-
throw new DodoError('NOT_SUPPORTED', 'this DODO process cannot own a Cloudflare Tunnel');
|
|
317
|
-
if (!opts.tunnelRuntime.status().running) {
|
|
318
|
-
const latest = loadGlobalConfig(paths.configFile);
|
|
319
|
-
if (!issuer || latest.publicUrl !== issuer) {
|
|
320
|
-
throw new DodoError('CONFLICT', 'restart DODO after configuring the public HTTPS origin before opening Remote Config');
|
|
321
|
-
}
|
|
322
|
-
const transient = GlobalConfigSchema.parse({ ...latest, tunnel: { ...latest.tunnel, mode: 'managed' } });
|
|
323
|
-
await opts.tunnelRuntime.start(transient, token);
|
|
324
|
-
}
|
|
324
|
+
if (!opts.tunnelRuntime?.status().running) {
|
|
325
|
+
throw new DodoError('CONFLICT', 'the configured DODO Tunnel is not running', {
|
|
326
|
+
recovery: 'restart DODO in tunnel mode and inspect dodo tunnel doctor if startup fails',
|
|
327
|
+
});
|
|
325
328
|
}
|
|
326
329
|
return remoteConfigGateway.open();
|
|
327
330
|
},
|
|
@@ -402,6 +405,14 @@ export async function startServer(opts) {
|
|
|
402
405
|
runMode: runMode ?? null,
|
|
403
406
|
workspaceSelected: () => workspaceSelected,
|
|
404
407
|
...(opts.tunnelRuntime ? { tunnelRuntime: opts.tunnelRuntime } : {}),
|
|
408
|
+
tunnelCredentialStore: {
|
|
409
|
+
...osCredentialAvailability(),
|
|
410
|
+
store: async (token) => {
|
|
411
|
+
const ref = osTunnelCredentialRef(configDir);
|
|
412
|
+
await storeOsTunnelCredentialValue(ref, token);
|
|
413
|
+
return ref;
|
|
414
|
+
},
|
|
415
|
+
},
|
|
405
416
|
log,
|
|
406
417
|
});
|
|
407
418
|
installation.ai.settings.ports.push(Number(new URL(localConfig.url).port));
|
|
@@ -458,11 +469,11 @@ export async function startServer(opts) {
|
|
|
458
469
|
`DODO ${DODO_VERSION} | foreground`,
|
|
459
470
|
workspaceSelected ? `Workspace: ${rootInfo.root}` : 'Workspace: (ยังไม่ได้เลือก — เพิ่มหรือเลือกใน Local Config / dodo --cli)',
|
|
460
471
|
workspaceSelected ? `Workspace ID: ${workspaceId} | epoch: ${epoch}` : 'Workspace ID: (ยังไม่สร้าง context สำหรับ AI)',
|
|
461
|
-
`MCP:
|
|
462
|
-
|
|
472
|
+
`MCP: ${issuer}/mcp (${connectionMode})`,
|
|
473
|
+
connectionMode === 'tunnel' ? `Local upstream: http://127.0.0.1:${actualPort}/mcp` : 'Tunnel: disabled by owner selection',
|
|
463
474
|
!workspaceSelected ? 'Auth: OAuth installation login available; project access remains denied until owner ACL assignment' : locked ? 'Auth: LOCKED / setup required — all tool access refused' : `Auth: OAuth enabled | Policy: ${services.trustMode()}`,
|
|
464
475
|
workspaceSelected ? `Exec: ${services.trustMode() === 'trusted' ? 'allowed by trusted mode (OS-user privileges!)' : 'local approval required'} | OS sandbox: ${config.commandSandbox === 'off' ? 'NOT enabled' : `${config.commandSandbox} (adapter: ${services.jobs ? 'configured' : 'n/a'})`}` : 'Exec: disabled until a workspace is selected',
|
|
465
|
-
'Tunnel:
|
|
476
|
+
connectionMode === 'tunnel' ? 'Tunnel: DODO-owned; starts and stops with this process' : 'Connection: local only',
|
|
466
477
|
`State: ${configDir}${configDirEnvVar ? ` (from ${configDirEnvVar})` : configDirSource === 'env' ? ' (from explicit environment override)' : ''}`,
|
|
467
478
|
];
|
|
468
479
|
if (localConfig)
|
|
@@ -489,6 +500,7 @@ export async function startServer(opts) {
|
|
|
489
500
|
port: actualPort,
|
|
490
501
|
locked,
|
|
491
502
|
publicUrl: issuer,
|
|
503
|
+
connectionMode,
|
|
492
504
|
get ipcPath() {
|
|
493
505
|
return ipcSocketPath(configDir, theHost.current().workspaceId);
|
|
494
506
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appServer.js","sourceRoot":"","sources":["../../src/server/appServer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"appServer.js","sourceRoot":"","sources":["../../src/server/appServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -217,9 +217,9 @@
|
|
|
217
217
|
// chips
|
|
218
218
|
const c = s.connection || {};
|
|
219
219
|
if (c.workspaceSelected === false) setChip('chip-mcp', 'warn', '⚠', 'เปิดอยู่ แต่รอเจ้าของเลือก workspace');
|
|
220
|
-
else if (c.
|
|
220
|
+
else if (c.activeMcpUrl) setChip('chip-mcp', s.state === 'switching' ? 'busy' : 'ok', s.state === 'switching' ? '⟳' : '●', s.state === 'switching' ? 'กำลังสลับ workspace' : `${c.connectionMode === 'tunnel' ? 'Tunnel' : 'Local'} · ${c.activeMcpUrl.replace(/^https?:\/\//, '')}`);
|
|
221
221
|
else setChip('chip-mcp', 'warn', '○', 'ไม่มี HTTP listener ใน entry นี้');
|
|
222
|
-
if (c.oauthConfigured === true) setChip('chip-oauth', 'ok', '●', `เปิดใช้ · ${c.activePublicUrl}`);
|
|
222
|
+
if (c.oauthConfigured === true) setChip('chip-oauth', 'ok', '●', `เปิดใช้ · ${c.activePublicUrl || c.activeMcpUrl}`);
|
|
223
223
|
else if (c.oauthConfigured === false) setChip('chip-oauth', 'warn', '⚠', 'LOCKED — ยังไม่ตั้ง public URL');
|
|
224
224
|
else setChip('chip-oauth', 'idle', '○', 'ไม่เกี่ยวกับ entry นี้');
|
|
225
225
|
const remaining = (c.expiresAt || 0) - Date.now();
|
|
@@ -322,6 +322,8 @@
|
|
|
322
322
|
}
|
|
323
323
|
|
|
324
324
|
// connection
|
|
325
|
+
$('conn-active').textContent = c.activeMcpUrl || 'ไม่มีใน entry นี้';
|
|
326
|
+
$('conn-active-copy').disabled = !c.activeMcpUrl;
|
|
325
327
|
$('conn-local').textContent = c.mcpLocalUrl || 'ไม่มีใน entry นี้';
|
|
326
328
|
$('conn-local-copy').disabled = !c.mcpLocalUrl;
|
|
327
329
|
$('conn-public').textContent = c.mcpPublicUrl || (c.publicUrl ? `${c.publicUrl}/mcp (หลัง restart)` : 'ยังไม่ตั้งค่า');
|
|
@@ -330,7 +332,7 @@
|
|
|
330
332
|
const oauth = $('conn-oauth');
|
|
331
333
|
oauth.replaceChildren();
|
|
332
334
|
const ob = document.createElement('span');
|
|
333
|
-
if (c.oauthConfigured === true) { ob.className = 'badge ok'; ob.textContent = '● เปิดใช้'; oauth.append(ob, document.createTextNode(` issuer ${c.
|
|
335
|
+
if (c.oauthConfigured === true) { ob.className = 'badge ok'; ob.textContent = '● เปิดใช้'; oauth.append(ob, document.createTextNode(` issuer ${(c.activeMcpUrl || '').replace(/\/mcp$/, '')}`)); }
|
|
334
336
|
else if (c.oauthConfigured === false) { ob.className = 'badge warn'; ob.textContent = '⚠ LOCKED'; oauth.append(ob, document.createTextNode(' ยังไม่มี public URL — MCP ปฏิเสธทุก tool call จนกว่าจะตั้งค่าและ restart')); }
|
|
335
337
|
else { ob.className = 'badge'; ob.textContent = '○ ไม่เกี่ยวกับ entry นี้'; oauth.append(ob); }
|
|
336
338
|
const originInput = $('conn-origin');
|
|
@@ -340,17 +342,24 @@
|
|
|
340
342
|
$('conn-restart').hidden = !c.restartRequired;
|
|
341
343
|
cardState('conn', 'ready');
|
|
342
344
|
|
|
343
|
-
// Tunnel state contains
|
|
344
|
-
//
|
|
345
|
+
// Tunnel state contains only a credential-presence flag. The password
|
|
346
|
+
// input is write-only and cleared after every save attempt.
|
|
345
347
|
const tunnel = s.tunnel || {};
|
|
346
|
-
const serverFormSig = JSON.stringify([
|
|
347
|
-
const
|
|
348
|
+
const serverFormSig = JSON.stringify([tunnel.connectionMode || 'local', Number(tunnel.metricsPort || 21732), Number(tunnel.maxRestarts ?? 2)]);
|
|
349
|
+
const browserMode = document.querySelector('input[name="connectionMode"]:checked');
|
|
350
|
+
const browserFormSig = JSON.stringify([browserMode ? browserMode.value : 'local', Number($('tunnel-metrics').value), Number($('tunnel-restarts').value)]);
|
|
348
351
|
const tunnelDirty = !force && lastTunnelFormSig !== null && browserFormSig !== lastTunnelFormSig;
|
|
349
352
|
if (!tunnelDirty) {
|
|
350
|
-
$('tunnel-
|
|
353
|
+
$('tunnel-mode-local').checked = tunnel.connectionMode !== 'tunnel';
|
|
354
|
+
$('tunnel-mode-tunnel').checked = tunnel.connectionMode === 'tunnel';
|
|
351
355
|
$('tunnel-metrics').value = String(tunnel.metricsPort || 21732);
|
|
352
356
|
$('tunnel-restarts').value = String(tunnel.maxRestarts ?? 2);
|
|
353
357
|
}
|
|
358
|
+
$('tunnel-credential').textContent = tunnel.credentialConfigured
|
|
359
|
+
? `● มี credential แล้ว (${tunnel.credentialStorage}; ไม่แสดงค่า)`
|
|
360
|
+
: tunnel.credentialStore && tunnel.credentialStore.available
|
|
361
|
+
? `○ ยังไม่มี credential · พร้อมบันทึกใน ${tunnel.credentialStore.provider}`
|
|
362
|
+
: `✕ credential store ใช้ไม่ได้${tunnel.credentialStore && tunnel.credentialStore.provider ? ` (${tunnel.credentialStore.provider})` : ''}`;
|
|
354
363
|
lastTunnelFormSig = serverFormSig;
|
|
355
364
|
const tunnelRuntime = tunnel.runtime || {};
|
|
356
365
|
const currentTunnel = tunnelRuntime.current;
|
|
@@ -361,11 +370,9 @@
|
|
|
361
370
|
$('tunnel-badge').className = 'badge warn';
|
|
362
371
|
$('tunnel-badge').textContent = `◌ Tunnel ${currentTunnel.phase || 'กำลังเริ่ม'}`;
|
|
363
372
|
} else {
|
|
364
|
-
$('tunnel-badge').className = tunnel.
|
|
365
|
-
$('tunnel-badge').textContent = tunnel.
|
|
373
|
+
$('tunnel-badge').className = tunnel.connectionMode === 'tunnel' ? 'badge warn' : 'badge';
|
|
374
|
+
$('tunnel-badge').textContent = tunnel.connectionMode === 'tunnel' ? '◌ เลือก Tunnel · ต้อง restart' : '● ใช้ Local';
|
|
366
375
|
}
|
|
367
|
-
$('tunnel-session-start').disabled = tunnelRuntime.available !== true || Boolean(currentTunnel && currentTunnel.running);
|
|
368
|
-
$('tunnel-session-stop').disabled = tunnelRuntime.available !== true || !Boolean(currentTunnel && currentTunnel.running);
|
|
369
376
|
|
|
370
377
|
// clients
|
|
371
378
|
$('clients-root').textContent = w ? w.root : 'ยังไม่ได้เลือกโปรเจกต์';
|
|
@@ -877,74 +884,44 @@
|
|
|
877
884
|
});
|
|
878
885
|
});
|
|
879
886
|
$('conn-local-copy').addEventListener('click', (ev) => copyText(state && state.connection ? state.connection.mcpLocalUrl : '', ev.currentTarget));
|
|
887
|
+
$('conn-active-copy').addEventListener('click', (ev) => copyText(state && state.connection ? state.connection.activeMcpUrl : '', ev.currentTarget));
|
|
880
888
|
$('conn-public-copy').addEventListener('click', (ev) => {
|
|
881
889
|
const c = state && state.connection;
|
|
882
890
|
copyText(c ? (c.mcpPublicUrl || (c.publicUrl ? `${c.publicUrl}/mcp` : '')) : '', ev.currentTarget);
|
|
883
891
|
});
|
|
884
892
|
|
|
885
893
|
// ---- Cloudflare Tunnel ----
|
|
886
|
-
$('tunnel-session-form').addEventListener('submit', (ev) => {
|
|
887
|
-
ev.preventDefault();
|
|
888
|
-
const tokenInput = $('tunnel-session-token');
|
|
889
|
-
const errorElement = $('tunnel-session-error');
|
|
890
|
-
const tokenValue = tokenInput.value.trim();
|
|
891
|
-
errorElement.hidden = true;
|
|
892
|
-
tokenInput.removeAttribute('aria-invalid');
|
|
893
|
-
if (tokenValue.length < 20) {
|
|
894
|
-
errorElement.textContent = '✕ กรอก Cloudflare Tunnel token ที่ถูกต้อง';
|
|
895
|
-
errorElement.hidden = false;
|
|
896
|
-
tokenInput.setAttribute('aria-invalid', 'true');
|
|
897
|
-
tokenInput.focus();
|
|
898
|
-
return;
|
|
899
|
-
}
|
|
900
|
-
withBusy($('tunnel-session-start'), 'กำลังเปิด…', async () => {
|
|
901
|
-
try {
|
|
902
|
-
const result = await api('tunnel/session/start', { token: tokenValue });
|
|
903
|
-
tokenInput.value = '';
|
|
904
|
-
notify('success', result.status && result.status.connected
|
|
905
|
-
? 'Tunnel เชื่อมต่อแล้วสำหรับ DODO process นี้'
|
|
906
|
-
: 'เริ่ม Tunnel แล้ว กำลังตรวจ readiness');
|
|
907
|
-
await refresh(true);
|
|
908
|
-
} catch (error) {
|
|
909
|
-
tokenInput.value = '';
|
|
910
|
-
errorElement.textContent = `✕ ${error.message}`;
|
|
911
|
-
errorElement.hidden = false;
|
|
912
|
-
notify('error', 'เปิด Tunnel ไม่สำเร็จ');
|
|
913
|
-
}
|
|
914
|
-
});
|
|
915
|
-
});
|
|
916
|
-
|
|
917
|
-
$('tunnel-session-stop').addEventListener('click', () => withBusy($('tunnel-session-stop'), 'กำลังหยุด…', async () => {
|
|
918
|
-
try {
|
|
919
|
-
await api('tunnel/session/stop', {});
|
|
920
|
-
$('tunnel-session-token').value = '';
|
|
921
|
-
notify('success', 'หยุด Tunnel ที่ DODO process นี้เป็นเจ้าของแล้ว');
|
|
922
|
-
await refresh(true);
|
|
923
|
-
} catch (error) {
|
|
924
|
-
notify('error', `หยุด Tunnel ไม่สำเร็จ: ${error.message}`);
|
|
925
|
-
}
|
|
926
|
-
}));
|
|
927
|
-
|
|
928
894
|
$('tunnel-form').addEventListener('submit', (ev) => {
|
|
929
895
|
ev.preventDefault();
|
|
930
896
|
const errorElement = $('tunnel-error');
|
|
931
897
|
errorElement.hidden = true;
|
|
932
898
|
const metricsPort = Number($('tunnel-metrics').value);
|
|
933
899
|
const maxRestarts = Number($('tunnel-restarts').value);
|
|
900
|
+
const connectionMode = document.querySelector('input[name="connectionMode"]:checked')?.value || 'local';
|
|
901
|
+
const tokenInput = $('tunnel-token');
|
|
902
|
+
const token = tokenInput.value.trim();
|
|
934
903
|
if (!Number.isSafeInteger(metricsPort) || metricsPort < 1024 || metricsPort > 65535 || !Number.isSafeInteger(maxRestarts) || maxRestarts < 0 || maxRestarts > 5) {
|
|
935
904
|
errorElement.textContent = '✕ Metrics port ต้องอยู่ระหว่าง 1024–65535 และ restart ต้องอยู่ระหว่าง 0–5';
|
|
936
905
|
errorElement.hidden = false;
|
|
937
906
|
return;
|
|
938
907
|
}
|
|
908
|
+
if (token && token.length < 20) {
|
|
909
|
+
errorElement.textContent = '✕ Tunnel token สั้นเกินไป';
|
|
910
|
+
errorElement.hidden = false;
|
|
911
|
+
tokenInput.focus();
|
|
912
|
+
return;
|
|
913
|
+
}
|
|
939
914
|
withBusy($('tunnel-save'), 'กำลังบันทึก…', async () => {
|
|
940
915
|
try {
|
|
941
|
-
const body = {
|
|
916
|
+
const body = { connectionMode, metricsPort, maxRestarts, ...(token ? { token } : {}) };
|
|
942
917
|
const result = await api('tunnel/config', body);
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
918
|
+
tokenInput.value = '';
|
|
919
|
+
notify('info', result.connectionMode === 'tunnel'
|
|
920
|
+
? 'บันทึกแล้ว — restart DODO เพื่อใช้ Tunnel เป็น MCP endpoint หลัก'
|
|
921
|
+
: 'บันทึกแล้ว — restart DODO เพื่อใช้ Local MCP เท่านั้น');
|
|
946
922
|
await refresh(true);
|
|
947
923
|
} catch (error) {
|
|
924
|
+
tokenInput.value = '';
|
|
948
925
|
errorElement.textContent = `✕ ${error.message}`;
|
|
949
926
|
errorElement.hidden = false;
|
|
950
927
|
notify('error', 'บันทึก Tunnel ไม่สำเร็จ');
|
|
@@ -249,7 +249,9 @@
|
|
|
249
249
|
<div class="card-state" id="conn-loading">กำลังโหลด…</div>
|
|
250
250
|
<div class="card-body" id="conn-body" hidden>
|
|
251
251
|
<div class="kv">
|
|
252
|
-
<div class="k">
|
|
252
|
+
<div class="k">Active MCP URL</div>
|
|
253
|
+
<div class="v path-row"><code id="conn-active" class="path">…</code><button type="button" class="btn small" id="conn-active-copy" aria-label="คัดลอก Active MCP URL">คัดลอก</button></div>
|
|
254
|
+
<div class="k">Local upstream</div>
|
|
253
255
|
<div class="v path-row"><code id="conn-local" class="path">…</code><button type="button" class="btn small" id="conn-local-copy" aria-label="คัดลอก Local MCP URL">คัดลอก</button></div>
|
|
254
256
|
<div class="k">Public MCP URL <button type="button" class="help-tip" data-tip="URL ที่ AI ฝั่งเว็บใช้เชื่อมต่อผ่าน tunnel ของคุณ ต้องเป็น HTTPS origin ที่ชี้มาที่พอร์ต MCP เท่านั้น ห้ามชี้มาที่หน้า Local Config" aria-label="คำอธิบาย: public URL">?</button></div>
|
|
255
257
|
<div class="v path-row"><code id="conn-public" class="path">…</code><button type="button" class="btn small" id="conn-public-copy" aria-label="คัดลอก Public MCP URL">คัดลอก</button></div>
|
|
@@ -277,32 +279,29 @@
|
|
|
277
279
|
</section>
|
|
278
280
|
|
|
279
281
|
<section class="card" id="card-tunnel" aria-labelledby="h-tunnel">
|
|
280
|
-
<div class="card-head"><h2 id="h-tunnel"
|
|
281
|
-
<form id="tunnel-session-form" class="form" novalidate>
|
|
282
|
-
<label for="tunnel-session-token">Temporary Tunnel token</label>
|
|
283
|
-
<input id="tunnel-session-token" name="token" type="password" autocomplete="off" spellcheck="false" maxlength="8192" placeholder="ใช้กับ DODO process นี้เท่านั้น" aria-describedby="tunnel-session-help tunnel-session-error">
|
|
284
|
-
<p class="help" id="tunnel-session-help">เริ่มทันที ไม่บันทึกลงเครื่อง และ tunnel หยุดพร้อม DODO</p>
|
|
285
|
-
<p class="error" id="tunnel-session-error" role="alert" hidden></p>
|
|
286
|
-
<div class="actions">
|
|
287
|
-
<button type="submit" class="btn primary" id="tunnel-session-start">เปิด Tunnel รอบนี้</button>
|
|
288
|
-
<button type="button" class="btn danger-outline" id="tunnel-session-stop">หยุด Tunnel รอบนี้</button>
|
|
289
|
-
</div>
|
|
290
|
-
</form>
|
|
291
|
-
<details class="details">
|
|
292
|
-
<summary>การเริ่มอัตโนมัติและค่าขั้นสูง</summary>
|
|
282
|
+
<div class="card-head"><h2 id="h-tunnel">การเชื่อมต่อ MCP <button type="button" class="help-tip" data-tip="เลือกได้หนึ่งโหมดต่อ DODO installation: Local หรือ DODO Tunnel เมื่อเลือก Tunnel ระบบจะเริ่มและหยุด cloudflared พร้อม DODO ทุกครั้ง" aria-label="คำอธิบาย: connection mode">?</button></h2><span class="badge" id="tunnel-badge">กำลังตรวจ…</span></div>
|
|
293
283
|
<form id="tunnel-form" class="form" novalidate>
|
|
294
|
-
<
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
<label
|
|
298
|
-
|
|
299
|
-
</
|
|
284
|
+
<fieldset>
|
|
285
|
+
<legend>โหมดที่ใช้เมื่อเปิด DODO</legend>
|
|
286
|
+
<label class="check"><input id="tunnel-mode-local" name="connectionMode" type="radio" value="local"><span><b>Local</b><small>AI ในเครื่องใช้ <code>127.0.0.1:21730/mcp</code> และ DODO ไม่เปิด Tunnel</small></span></label>
|
|
287
|
+
<label class="check"><input id="tunnel-mode-tunnel" name="connectionMode" type="radio" value="tunnel"><span><b>DODO Tunnel</b><small>ใช้ public origin เป็น MCP URL หลัก และเริ่ม cloudflared พร้อม DODO ทุกครั้ง</small></span></label>
|
|
288
|
+
</fieldset>
|
|
289
|
+
<label for="tunnel-token">Cloudflare Tunnel token</label>
|
|
290
|
+
<input id="tunnel-token" name="token" type="password" autocomplete="new-password" spellcheck="false" maxlength="8192" placeholder="เว้นว่างเพื่อใช้ credential ที่บันทึกไว้" aria-describedby="tunnel-credential tunnel-error">
|
|
291
|
+
<p class="help" id="tunnel-credential">กำลังตรวจ credential store…</p>
|
|
292
|
+
<p class="help">Token เป็น write-only และเก็บใน Keychain/Credential Manager/Secret Service เท่านั้น หน้าเว็บจะไม่อ่านค่ากลับมา</p>
|
|
293
|
+
<details class="details">
|
|
294
|
+
<summary>ค่าขั้นสูง</summary>
|
|
295
|
+
<div class="two-col">
|
|
296
|
+
<label>Metrics port<input id="tunnel-metrics" type="number" min="1024" max="65535" inputmode="numeric"></label>
|
|
297
|
+
<label>จำนวน restart สูงสุด<input id="tunnel-restarts" type="number" min="0" max="5" inputmode="numeric"></label>
|
|
298
|
+
</div>
|
|
299
|
+
</details>
|
|
300
300
|
<p class="error" id="tunnel-error" role="alert" hidden></p>
|
|
301
301
|
<div class="actions">
|
|
302
|
-
<button type="submit" class="btn primary" id="tunnel-save"
|
|
302
|
+
<button type="submit" class="btn primary" id="tunnel-save">บันทึกโหมดการเชื่อมต่อ</button>
|
|
303
303
|
</div>
|
|
304
304
|
</form>
|
|
305
|
-
</details>
|
|
306
305
|
</section>
|
|
307
306
|
|
|
308
307
|
<section class="card" id="card-desktop" aria-labelledby="h-desktop">
|