@ait-co/devtools 0.1.102 → 0.1.104
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.en.md +10 -37
- package/README.md +10 -37
- package/dist/{chii-relay-CUS9FJKB.js → chii-relay-DkTOopRj.js} +1 -1
- package/dist/{chii-relay-CUS9FJKB.js.map → chii-relay-DkTOopRj.js.map} +1 -1
- package/dist/{chii-relay-BVVTS3tE.cjs → chii-relay-P6SKmB1g.cjs} +1 -1
- package/dist/{chii-relay-BVVTS3tE.cjs.map → chii-relay-P6SKmB1g.cjs.map} +1 -1
- package/dist/{deeplink-D1HXJ2YG.js → deeplink-B5-Hxu0Q.js} +1 -1
- package/dist/{deeplink-D1HXJ2YG.js.map → deeplink-B5-Hxu0Q.js.map} +1 -1
- package/dist/{deeplink-DDOe0FQl.cjs → deeplink-BzdbA1gV.cjs} +1 -1
- package/dist/{deeplink-DDOe0FQl.cjs.map → deeplink-BzdbA1gV.cjs.map} +1 -1
- package/dist/{devtools-opener-XpwL3fZ9.js → devtools-opener-B8nxrxqu.js} +2 -12
- package/dist/{devtools-opener-XpwL3fZ9.js.map → devtools-opener-B8nxrxqu.js.map} +1 -1
- package/dist/{devtools-opener-mDgeg_MX.cjs → devtools-opener-iv1OwfJN.cjs} +1 -1
- package/dist/{devtools-opener-mDgeg_MX.cjs.map → devtools-opener-iv1OwfJN.cjs.map} +1 -1
- package/dist/mcp/cli.js +33 -61
- package/dist/mcp/cli.js.map +1 -1
- package/dist/mcp/server.js +2 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/panel/index.js +5 -751
- package/dist/panel/index.js.map +1 -1
- package/dist/{qr-http-server-B7DsRdN1.cjs → qr-http-server-A9vld8r7.cjs} +23 -55
- package/dist/qr-http-server-A9vld8r7.cjs.map +1 -0
- package/dist/{qr-http-server-DI3A6f5L.js → qr-http-server-D4EAA7Il.js} +23 -55
- package/dist/qr-http-server-D4EAA7Il.js.map +1 -0
- package/dist/{qr-http-server-Dqb3GQju.cjs → qr-http-server-Dj3Z0NHi.cjs} +23 -55
- package/dist/qr-http-server-Dj3Z0NHi.cjs.map +1 -0
- package/dist/{qr-http-server-CK-ZT_pC.js → qr-http-server-HzdCLU8s.js} +23 -55
- package/dist/qr-http-server-HzdCLU8s.js.map +1 -0
- package/dist/{relay-secret-store-DKuoAJmA.js → relay-secret-store-Bns5rndt.js} +2 -2
- package/dist/{relay-secret-store-DKuoAJmA.js.map → relay-secret-store-Bns5rndt.js.map} +1 -1
- package/dist/{relay-secret-store-CqDaaFW1.cjs → relay-secret-store-I5q2Wvvv.cjs} +2 -2
- package/dist/{relay-secret-store-CqDaaFW1.cjs.map → relay-secret-store-I5q2Wvvv.cjs.map} +1 -1
- package/dist/{relay-url-store-CIZlFBkR.cjs → relay-url-store-CvmnevcO.cjs} +2 -2
- package/dist/{relay-url-store-CIZlFBkR.cjs.map → relay-url-store-CvmnevcO.cjs.map} +1 -1
- package/dist/{relay-url-store-DASEZiT9.js → relay-url-store-DJHZjk8o.js} +2 -2
- package/dist/{relay-url-store-DASEZiT9.js.map → relay-url-store-DJHZjk8o.js.map} +1 -1
- package/dist/{totp-D9fjaVak.cjs → totp-CNw0w89F.cjs} +1 -1
- package/dist/{totp-D9fjaVak.cjs.map → totp-CNw0w89F.cjs.map} +1 -1
- package/dist/{totp-CauHjkdE.js → totp-DYdP9N3o.js} +1 -1
- package/dist/{totp-CauHjkdE.js.map → totp-DYdP9N3o.js.map} +1 -1
- package/dist/{tunnel-CepDBgEc.js → tunnel-BmDcTrnU.js} +6 -6
- package/dist/{tunnel-CepDBgEc.js.map → tunnel-BmDcTrnU.js.map} +1 -1
- package/dist/{tunnel-D0QnxKsF.cjs → tunnel-RB5zB8IK.cjs} +6 -6
- package/dist/{tunnel-D0QnxKsF.cjs.map → tunnel-RB5zB8IK.cjs.map} +1 -1
- package/dist/unplugin/index.cjs +5 -90
- package/dist/unplugin/index.cjs.map +1 -1
- package/dist/unplugin/index.d.cts.map +1 -1
- package/dist/unplugin/index.d.ts.map +1 -1
- package/dist/unplugin/index.js +5 -90
- package/dist/unplugin/index.js.map +1 -1
- package/dist/unplugin/tunnel.cjs +1 -1
- package/dist/unplugin/tunnel.js +1 -1
- package/package.json +1 -1
- package/dist/machine-state-Chg_6SPq.js +0 -188
- package/dist/machine-state-Chg_6SPq.js.map +0 -1
- package/dist/machine-state-DOUweFsJ.cjs +0 -216
- package/dist/machine-state-DOUweFsJ.cjs.map +0 -1
- package/dist/qr-http-server-B7DsRdN1.cjs.map +0 -1
- package/dist/qr-http-server-CK-ZT_pC.js.map +0 -1
- package/dist/qr-http-server-DI3A6f5L.js.map +0 -1
- package/dist/qr-http-server-Dqb3GQju.cjs.map +0 -1
package/dist/mcp/cli.js
CHANGED
|
@@ -2034,11 +2034,6 @@ const en = {
|
|
|
2034
2034
|
"panel.tab.analytics": "Analytics",
|
|
2035
2035
|
"panel.tab.storage": "Storage",
|
|
2036
2036
|
"common.readOnly": "Read-only — mock responses are controlled at build time.",
|
|
2037
|
-
"toast.consent.title": "Send anonymous usage stats?",
|
|
2038
|
-
"toast.consent.body": "We collect anonymous events only, to improve the tool. You can turn this off anytime in the Environment tab.",
|
|
2039
|
-
"toast.consent.learnMore": "Learn more",
|
|
2040
|
-
"toast.consent.accept": "Yes, send",
|
|
2041
|
-
"toast.consent.deny": "No, thanks",
|
|
2042
2037
|
"env.section.platform": "Platform",
|
|
2043
2038
|
"env.row.os": "OS",
|
|
2044
2039
|
"env.row.appVersion": "App Version",
|
|
@@ -2055,27 +2050,6 @@ const en = {
|
|
|
2055
2050
|
"env.value.iosSwipeGesture.enabled": "enabled",
|
|
2056
2051
|
"env.value.iosSwipeGesture.disabled": "disabled",
|
|
2057
2052
|
"env.hint.iosSwipeGesture": "Last value passed to setIosSwipeGestureEnabled. Switching Environment to toss lets a toss-gated guard toggle this.",
|
|
2058
|
-
"env.telemetry.section": "Telemetry",
|
|
2059
|
-
"env.telemetry.t0Row": "Anonymous usage signal (Tier 0)",
|
|
2060
|
-
"env.telemetry.t0On": "On",
|
|
2061
|
-
"env.telemetry.t0Off": "Off",
|
|
2062
|
-
"env.telemetry.t0TurnOn": "Turn on",
|
|
2063
|
-
"env.telemetry.t0TurnOff": "Turn off",
|
|
2064
|
-
"env.telemetry.t0Desc": "Version + date only, no PII. Once per day. Helps improve the package.",
|
|
2065
|
-
"env.telemetry.row": "Extended telemetry (Tier 1)",
|
|
2066
|
-
"env.telemetry.on": "On",
|
|
2067
|
-
"env.telemetry.off": "Off",
|
|
2068
|
-
"env.telemetry.turnOn": "Turn on",
|
|
2069
|
-
"env.telemetry.turnOff": "Turn off",
|
|
2070
|
-
"env.telemetry.anonIdLabel": "anon_id: {value}",
|
|
2071
|
-
"env.telemetry.anonIdNotSet": "(not yet set)",
|
|
2072
|
-
"env.telemetry.anonIdCopyTitle": "Click to copy full anon_id",
|
|
2073
|
-
"env.telemetry.deleteBtn": "Delete my data",
|
|
2074
|
-
"env.telemetry.deleting": "Deleting…",
|
|
2075
|
-
"env.telemetry.deleted": "Deleted",
|
|
2076
|
-
"env.telemetry.deleteFailedRetry": "Delete failed (please retry)",
|
|
2077
|
-
"env.telemetry.deleteFailed": "Delete failed",
|
|
2078
|
-
"env.telemetry.privacyLink": "Privacy policy →",
|
|
2079
2053
|
"env.section.language": "Language",
|
|
2080
2054
|
"env.language.row": "Language",
|
|
2081
2055
|
"env.language.ko": "한국어",
|
|
@@ -2190,6 +2164,7 @@ const en = {
|
|
|
2190
2164
|
"dashboard.tunnel.down": "Disconnected",
|
|
2191
2165
|
"dashboard.attach.section": "Attach QR",
|
|
2192
2166
|
"dashboard.attach.hint": "Call the build_attach_url MCP tool to show the QR here.",
|
|
2167
|
+
"dashboard.attach.tunnelDown": "Relay disconnected — this QR is no longer valid. Restart the relay, then regenerate the QR.",
|
|
2193
2168
|
"dashboard.pages.section": "Connected Pages",
|
|
2194
2169
|
"dashboard.pages.empty": "No attached pages",
|
|
2195
2170
|
"dashboard.url.copy": "Copy",
|
|
@@ -2296,11 +2271,6 @@ const tables = {
|
|
|
2296
2271
|
"panel.tab.analytics": "Analytics",
|
|
2297
2272
|
"panel.tab.storage": "Storage",
|
|
2298
2273
|
"common.readOnly": "읽기 전용 — mock 응답은 빌드 타임에 고정됩니다.",
|
|
2299
|
-
"toast.consent.title": "익명 사용 통계를 보낼까요?",
|
|
2300
|
-
"toast.consent.body": "도구 개선을 위해 익명 이벤트만 수집해요. 언제든 환경 탭에서 끌 수 있어요.",
|
|
2301
|
-
"toast.consent.learnMore": "더 알아보기",
|
|
2302
|
-
"toast.consent.accept": "네, 보낼게요",
|
|
2303
|
-
"toast.consent.deny": "아니요",
|
|
2304
2274
|
"env.section.platform": "Platform",
|
|
2305
2275
|
"env.row.os": "OS",
|
|
2306
2276
|
"env.row.appVersion": "App Version",
|
|
@@ -2317,27 +2287,6 @@ const tables = {
|
|
|
2317
2287
|
"env.value.iosSwipeGesture.enabled": "enabled",
|
|
2318
2288
|
"env.value.iosSwipeGesture.disabled": "disabled",
|
|
2319
2289
|
"env.hint.iosSwipeGesture": "setIosSwipeGestureEnabled의 마지막 호출값. Environment를 toss로 바꾸면 toss-gated 가드가 이 값을 토글합니다.",
|
|
2320
|
-
"env.telemetry.section": "Telemetry",
|
|
2321
|
-
"env.telemetry.t0Row": "익명 사용 신호 (Tier 0)",
|
|
2322
|
-
"env.telemetry.t0On": "On",
|
|
2323
|
-
"env.telemetry.t0Off": "Off",
|
|
2324
|
-
"env.telemetry.t0TurnOn": "Turn on",
|
|
2325
|
-
"env.telemetry.t0TurnOff": "Turn off",
|
|
2326
|
-
"env.telemetry.t0Desc": "버전·날짜만 수집, PII 없음. 하루 1회. 패키지 개선에 사용됩니다.",
|
|
2327
|
-
"env.telemetry.row": "확장 텔레메트리 (Tier 1)",
|
|
2328
|
-
"env.telemetry.on": "On",
|
|
2329
|
-
"env.telemetry.off": "Off",
|
|
2330
|
-
"env.telemetry.turnOn": "Turn on",
|
|
2331
|
-
"env.telemetry.turnOff": "Turn off",
|
|
2332
|
-
"env.telemetry.anonIdLabel": "anon_id: {value}",
|
|
2333
|
-
"env.telemetry.anonIdNotSet": "(not yet set)",
|
|
2334
|
-
"env.telemetry.anonIdCopyTitle": "전체 anon_id 복사",
|
|
2335
|
-
"env.telemetry.deleteBtn": "내 데이터 삭제",
|
|
2336
|
-
"env.telemetry.deleting": "삭제 중…",
|
|
2337
|
-
"env.telemetry.deleted": "삭제 완료",
|
|
2338
|
-
"env.telemetry.deleteFailedRetry": "삭제 실패 (다시 시도해주세요)",
|
|
2339
|
-
"env.telemetry.deleteFailed": "삭제 실패",
|
|
2340
|
-
"env.telemetry.privacyLink": "개인정보 처리방침 →",
|
|
2341
2290
|
"env.section.language": "Language",
|
|
2342
2291
|
"env.language.row": "Language",
|
|
2343
2292
|
"env.language.ko": "한국어",
|
|
@@ -2452,6 +2401,7 @@ const tables = {
|
|
|
2452
2401
|
"dashboard.tunnel.down": "끊어짐",
|
|
2453
2402
|
"dashboard.attach.section": "Attach QR",
|
|
2454
2403
|
"dashboard.attach.hint": "build_attach_url MCP tool을 호출하면 QR이 여기에 표시됩니다.",
|
|
2404
|
+
"dashboard.attach.tunnelDown": "relay 연결이 끊겼습니다 — 이 QR은 더 이상 유효하지 않습니다. relay를 재시작한 뒤 QR을 다시 생성하세요.",
|
|
2455
2405
|
"dashboard.pages.section": "연결된 Pages",
|
|
2456
2406
|
"dashboard.pages.empty": "attach된 페이지 없음",
|
|
2457
2407
|
"dashboard.url.copy": "복사",
|
|
@@ -2605,6 +2555,7 @@ img.qr {
|
|
|
2605
2555
|
}
|
|
2606
2556
|
.copy-btn:hover { background: #30363d; }
|
|
2607
2557
|
.hint { font-size: 0.85rem; opacity: 0.5; margin: 0.25rem 0 0; }
|
|
2558
|
+
.hint.error { color: #f85149; opacity: 1; font-weight: 600; }
|
|
2608
2559
|
.inspector-link {
|
|
2609
2560
|
display: inline-block; margin-top: 0.5rem;
|
|
2610
2561
|
padding: 0.45rem 1rem; border-radius: 6px;
|
|
@@ -2647,6 +2598,8 @@ img.qr {
|
|
|
2647
2598
|
display: block; margin: 0 auto;
|
|
2648
2599
|
}
|
|
2649
2600
|
section { width: 100%; max-width: 480px; }
|
|
2601
|
+
.hint { font-size: 0.85rem; opacity: 0.5; margin: 0.25rem 0 0; }
|
|
2602
|
+
.hint.error { color: #f85149; opacity: 1; font-weight: 600; }
|
|
2650
2603
|
h2 { font-size: 1rem; font-weight: 600; color: #e6edf3; margin: 0 0 0.5rem; }
|
|
2651
2604
|
ol, ul { margin: 0; padding-left: 1.25rem; }
|
|
2652
2605
|
li { margin-bottom: 0.4rem; font-size: 0.9rem; line-height: 1.5; }
|
|
@@ -2705,6 +2658,8 @@ img.qr {
|
|
|
2705
2658
|
display: block; margin: 0 auto;
|
|
2706
2659
|
}
|
|
2707
2660
|
section { width: 100%; max-width: 480px; }
|
|
2661
|
+
.hint { font-size: 0.85rem; opacity: 0.5; margin: 0.25rem 0 0; }
|
|
2662
|
+
.hint.error { color: #f85149; opacity: 1; font-weight: 600; }
|
|
2708
2663
|
h2 { font-size: 1rem; font-weight: 600; color: #e6edf3; margin: 0 0 0.5rem; }
|
|
2709
2664
|
ol, ul { margin: 0; padding-left: 1.25rem; }
|
|
2710
2665
|
li { margin-bottom: 0.4rem; font-size: 0.9rem; line-height: 1.5; }
|
|
@@ -2781,6 +2736,7 @@ img.qr {
|
|
|
2781
2736
|
}
|
|
2782
2737
|
.copy-btn:hover { background: #30363d; }
|
|
2783
2738
|
.hint { font-size: 0.85rem; opacity: 0.5; margin: 0.25rem 0 0; }
|
|
2739
|
+
.hint.error { color: #f85149; opacity: 1; font-weight: 600; }
|
|
2784
2740
|
.inspector-link {
|
|
2785
2741
|
display: inline-block; margin-top: 0.5rem;
|
|
2786
2742
|
padding: 0.45rem 1rem; border-radius: 6px;
|
|
@@ -2823,6 +2779,8 @@ img.qr {
|
|
|
2823
2779
|
display: block; margin: 0 auto;
|
|
2824
2780
|
}
|
|
2825
2781
|
section { width: 100%; max-width: 480px; }
|
|
2782
|
+
.hint { font-size: 0.85rem; opacity: 0.5; margin: 0.25rem 0 0; }
|
|
2783
|
+
.hint.error { color: #f85149; opacity: 1; font-weight: 600; }
|
|
2826
2784
|
h2 { font-size: 1rem; font-weight: 600; color: #e6edf3; margin: 0 0 0.5rem; }
|
|
2827
2785
|
ol, ul { margin: 0; padding-left: 1.25rem; }
|
|
2828
2786
|
li { margin-bottom: 0.4rem; font-size: 0.9rem; line-height: 1.5; }
|
|
@@ -2881,6 +2839,8 @@ img.qr {
|
|
|
2881
2839
|
display: block; margin: 0 auto;
|
|
2882
2840
|
}
|
|
2883
2841
|
section { width: 100%; max-width: 480px; }
|
|
2842
|
+
.hint { font-size: 0.85rem; opacity: 0.5; margin: 0.25rem 0 0; }
|
|
2843
|
+
.hint.error { color: #f85149; opacity: 1; font-weight: 600; }
|
|
2884
2844
|
h2 { font-size: 1rem; font-weight: 600; color: #e6edf3; margin: 0 0 0.5rem; }
|
|
2885
2845
|
ol, ul { margin: 0; padding-left: 1.25rem; }
|
|
2886
2846
|
li { margin-bottom: 0.4rem; font-size: 0.9rem; line-height: 1.5; }
|
|
@@ -3009,7 +2969,8 @@ function buildDashboardHtml(state, qrDataUrl, locale, path = "/", params = new U
|
|
|
3009
2969
|
const tunnelStatus = state.tunnel.up ? s("dashboard.tunnel.up") : s("dashboard.tunnel.down");
|
|
3010
2970
|
const tunnelClass = state.tunnel.up ? "status-up" : "status-down";
|
|
3011
2971
|
let attachSection;
|
|
3012
|
-
if (
|
|
2972
|
+
if (!state.tunnel.up) attachSection = `<p class="hint error">${escapeHtml(s("dashboard.attach.tunnelDown"))}</p>`;
|
|
2973
|
+
else if (qrDataUrl && state.attachUrl) {
|
|
3013
2974
|
const safeAttachUrl = escapeHtml(state.attachUrl);
|
|
3014
2975
|
const copyLabel = escapeHtml(s("dashboard.url.copy"));
|
|
3015
2976
|
attachSection = `<img class="qr" src="${qrDataUrl}" alt="attach QR" /><div class="url-row"><p class="url-box" id="url-box">${safeAttachUrl}</p><button class="copy-btn" id="copy-btn" type="button" aria-label="${copyLabel}">${copyLabel}</button></div>`;
|
|
@@ -3026,6 +2987,7 @@ function buildDashboardHtml(state, qrDataUrl, locale, path = "/", params = new U
|
|
|
3026
2987
|
tunnelDown: JSON.stringify(s("dashboard.tunnel.down")),
|
|
3027
2988
|
pagesEmpty: JSON.stringify(s("dashboard.pages.empty")),
|
|
3028
2989
|
attachHint: JSON.stringify(s("dashboard.attach.hint")),
|
|
2990
|
+
attachTunnelDown: JSON.stringify(s("dashboard.attach.tunnelDown")),
|
|
3029
2991
|
copyLabel: JSON.stringify(s("dashboard.url.copy")),
|
|
3030
2992
|
copiedLabel: JSON.stringify(s("dashboard.url.copied")),
|
|
3031
2993
|
inspectorOpenLabel: JSON.stringify(s("dashboard.inspector.open")),
|
|
@@ -3069,6 +3031,7 @@ function buildSseScript(strings) {
|
|
|
3069
3031
|
var TUNNEL_DOWN = ${strings.tunnelDown};
|
|
3070
3032
|
var PAGES_EMPTY = ${strings.pagesEmpty};
|
|
3071
3033
|
var ATTACH_HINT = ${strings.attachHint};
|
|
3034
|
+
var ATTACH_TUNNEL_DOWN = ${strings.attachTunnelDown};
|
|
3072
3035
|
var COPY_LABEL = ${strings.copyLabel};
|
|
3073
3036
|
var COPIED_LABEL = ${strings.copiedLabel};
|
|
3074
3037
|
var INSPECTOR_OPEN_LABEL = ${strings.inspectorOpenLabel};
|
|
@@ -3158,9 +3121,13 @@ function buildSseScript(strings) {
|
|
|
3158
3121
|
}
|
|
3159
3122
|
// attachUrl QR + url-box 갱신
|
|
3160
3123
|
// SECRET-HANDLING: URL 값을 로그로 출력하지 않는다.
|
|
3124
|
+
// 터널이 죽으면(s.tunnel.up=false) attachUrl이 남아 있어도 QR을
|
|
3125
|
+
// 그리지 않고 에러 상태로 교체한다 — 죽은 QR이 스캔되는 것을 막는다(#631).
|
|
3161
3126
|
var sec = document.getElementById('attach-section');
|
|
3162
3127
|
if (sec) {
|
|
3163
|
-
if (s.
|
|
3128
|
+
if (!(s.tunnel && s.tunnel.up)) {
|
|
3129
|
+
sec.innerHTML = '<p class=\\"hint error\\">' + ATTACH_TUNNEL_DOWN + '</p>';
|
|
3130
|
+
} else if (s.attachUrl) {
|
|
3164
3131
|
var encoded = encodeURIComponent(s.attachUrl);
|
|
3165
3132
|
var safeUrl = String(s.attachUrl).slice(0, 2000).replace(/[<>&"']/g, function (c) { return '&#' + c.charCodeAt(0) + ';'; });
|
|
3166
3133
|
${isDashboard ? `// dashboard: #attach-section innerHTML 전체 교체 (img + url-row).
|
|
@@ -3248,6 +3215,7 @@ function buildAttachHtml(qrDataUrl, safeLabel, safeAttachUrl, locale, path = "/a
|
|
|
3248
3215
|
tunnelDown: JSON.stringify(s("dashboard.tunnel.down")),
|
|
3249
3216
|
pagesEmpty: JSON.stringify(s("dashboard.pages.empty")),
|
|
3250
3217
|
attachHint: JSON.stringify(s("dashboard.attach.hint")),
|
|
3218
|
+
attachTunnelDown: JSON.stringify(s("dashboard.attach.tunnelDown")),
|
|
3251
3219
|
copyLabel: JSON.stringify(s("dashboard.url.copy")),
|
|
3252
3220
|
copiedLabel: JSON.stringify(s("dashboard.url.copied")),
|
|
3253
3221
|
inspectorOpenLabel: JSON.stringify(s("dashboard.inspector.open")),
|
|
@@ -3974,7 +3942,7 @@ const DEBUG_TOOL_DEFINITIONS = [
|
|
|
3974
3942
|
},
|
|
3975
3943
|
{
|
|
3976
3944
|
name: "AIT.getSdkCallHistory",
|
|
3977
|
-
description: "Returns the recent Apps
|
|
3945
|
+
description: "Returns the recent Apps in Toss SDK call trace (method, args, result/error, timestamp) that raw CDP cannot observe. Read-only. Use to confirm an SDK call fired and how it resolved (e.g. a saveBase64Data permission regression).",
|
|
3978
3946
|
inputSchema: {
|
|
3979
3947
|
type: "object",
|
|
3980
3948
|
properties: {},
|
|
@@ -4865,7 +4833,7 @@ async function readMcpSdkVersion() {
|
|
|
4865
4833
|
* some test environments that skip the build step).
|
|
4866
4834
|
*/
|
|
4867
4835
|
function readDevtoolsVersion() {
|
|
4868
|
-
return "0.1.
|
|
4836
|
+
return "0.1.104";
|
|
4869
4837
|
}
|
|
4870
4838
|
/**
|
|
4871
4839
|
* Derives the next recommended action from a completed diagnostics snapshot.
|
|
@@ -5457,7 +5425,7 @@ function createDebugServer(deps) {
|
|
|
5457
5425
|
const collector = collectorDep ?? new InMemoryDiagnosticsCollector();
|
|
5458
5426
|
const server = new Server({
|
|
5459
5427
|
name: "ait-debug",
|
|
5460
|
-
version: "0.1.
|
|
5428
|
+
version: "0.1.104"
|
|
5461
5429
|
}, { capabilities: { tools: { listChanged: true } } });
|
|
5462
5430
|
server.setRequestHandler(ListToolsRequestSchema, () => {
|
|
5463
5431
|
const conn = router.active;
|
|
@@ -6241,6 +6209,7 @@ async function bootRelayFamily(options = {}) {
|
|
|
6241
6209
|
onPermanentDrop: (droppedAt) => {
|
|
6242
6210
|
tunnelStatus = makeTunnelStatus(false, null, droppedAt, 3);
|
|
6243
6211
|
logError("tunnel.down", { msg: `tunnel permanently dropped (${droppedAt}). Restart: npx @ait-co/devtools devtools-mcp` });
|
|
6212
|
+
options.onTunnelDown?.();
|
|
6244
6213
|
}
|
|
6245
6214
|
});
|
|
6246
6215
|
return printAttachBanner({
|
|
@@ -6602,7 +6571,8 @@ async function runDebugServer(options = {}) {
|
|
|
6602
6571
|
activeTunnelChildPid = pid;
|
|
6603
6572
|
lockHandle.updateTunnelChildPid(pid);
|
|
6604
6573
|
},
|
|
6605
|
-
onAuthReject: () => diagnosticsCollector.recordAuthReject()
|
|
6574
|
+
onAuthReject: () => diagnosticsCollector.recordAuthReject(),
|
|
6575
|
+
onTunnelDown: () => qrServer?.notifyStateChange()
|
|
6606
6576
|
}),
|
|
6607
6577
|
diagnosticsCollector,
|
|
6608
6578
|
devtoolsOpener,
|
|
@@ -6815,7 +6785,8 @@ async function runLocalDebugServer(options = {}) {
|
|
|
6815
6785
|
activeTunnelChildPid = pid;
|
|
6816
6786
|
lockHandle.updateTunnelChildPid(pid);
|
|
6817
6787
|
},
|
|
6818
|
-
onAuthReject: () => diagnosticsCollector.recordAuthReject()
|
|
6788
|
+
onAuthReject: () => diagnosticsCollector.recordAuthReject(),
|
|
6789
|
+
onTunnelDown: () => qrServer?.notifyStateChange()
|
|
6819
6790
|
}),
|
|
6820
6791
|
diagnosticsCollector,
|
|
6821
6792
|
devtoolsOpener,
|
|
@@ -7011,7 +6982,8 @@ async function runMobileDebugServer(options = {}) {
|
|
|
7011
6982
|
activeTunnelChildPid = pid;
|
|
7012
6983
|
lockHandle.updateTunnelChildPid(pid);
|
|
7013
6984
|
},
|
|
7014
|
-
onAuthReject: () => diagnosticsCollector.recordAuthReject()
|
|
6985
|
+
onAuthReject: () => diagnosticsCollector.recordAuthReject(),
|
|
6986
|
+
onTunnelDown: () => qrServer?.notifyStateChange()
|
|
7015
6987
|
}),
|
|
7016
6988
|
diagnosticsCollector,
|
|
7017
6989
|
devtoolsOpener,
|
|
@@ -7591,7 +7563,7 @@ function createDevServer(deps = {}) {
|
|
|
7591
7563
|
const aitSource = deps.aitSource ?? new HttpAitSource({ stateEndpoint });
|
|
7592
7564
|
const server = new Server({
|
|
7593
7565
|
name: "ait-devtools",
|
|
7594
|
-
version: "0.1.
|
|
7566
|
+
version: "0.1.104"
|
|
7595
7567
|
}, { capabilities: { tools: {} } });
|
|
7596
7568
|
server.setRequestHandler(ListToolsRequestSchema, () => ({ tools: DEV_TOOL_DEFINITIONS.map((tool) => ({ ...tool })) }));
|
|
7597
7569
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|