@ait-co/devtools 0.1.128 → 0.1.131
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/dist/{attach-orchestrator-CPMQWkGV.js → attach-orchestrator-BiaYiNOr.js} +34 -107
- package/dist/attach-orchestrator-BiaYiNOr.js.map +1 -0
- package/dist/{attach-orchestrator-RhOdO3DS.js → attach-orchestrator-Cjdhir2U.js} +31 -13
- package/dist/{attach-orchestrator-RhOdO3DS.js.map → attach-orchestrator-Cjdhir2U.js.map} +1 -1
- package/dist/{attach-orchestrator-CpE0dMew.js → attach-orchestrator-ca34r46y.js} +33 -106
- package/dist/attach-orchestrator-ca34r46y.js.map +1 -0
- package/dist/{bundle-Cb3GFuw6.d.ts → bundle-BKqyhEK9.d.ts} +1 -1
- package/dist/{bundle-Cb3GFuw6.d.ts.map → bundle-BKqyhEK9.d.ts.map} +1 -1
- package/dist/{capture-B1zfGyTo.d.ts → capture-ltuV0gZa.d.ts} +1 -1
- package/dist/{capture-B1zfGyTo.d.ts.map → capture-ltuV0gZa.d.ts.map} +1 -1
- package/dist/{cdp-connection-Dxw_EY8s.d.ts → cdp-connection-D7AYQck2.d.ts} +1 -1
- package/dist/{cdp-connection-Dxw_EY8s.d.ts.map → cdp-connection-D7AYQck2.d.ts.map} +1 -1
- package/dist/{cell-D0dJSGHi.js → cell-Bi8MAPA8.js} +11 -7
- package/dist/cell-Bi8MAPA8.js.map +1 -0
- package/dist/{cell-Ba9lCI3B.js → cell-Cw4fVOl2.js} +11 -7
- package/dist/cell-Cw4fVOl2.js.map +1 -0
- package/dist/{cell-CX92lDI0.js → cell-rr6gL9AT.js} +11 -7
- package/dist/cell-rr6gL9AT.js.map +1 -0
- package/dist/debug-server-BSbfnFR5.js +436 -0
- package/dist/debug-server-BSbfnFR5.js.map +1 -0
- package/dist/debug-server-CD4zYBq4.js +379 -0
- package/dist/{debug-server-BzzNkETg.js.map → debug-server-CD4zYBq4.js.map} +1 -1
- package/dist/{debug-server-Dctc9GAh.js → debug-server-qRSRG7YZ.js} +68 -65
- package/dist/debug-server-qRSRG7YZ.js.map +1 -0
- package/dist/in-app/auto.js +15 -0
- package/dist/in-app/auto.js.map +1 -1
- package/dist/in-app/index.d.ts +27 -0
- package/dist/in-app/index.d.ts.map +1 -1
- package/dist/in-app/index.js +15 -0
- package/dist/in-app/index.js.map +1 -1
- package/dist/log-CUik_tHp.js +95 -0
- package/dist/log-CUik_tHp.js.map +1 -0
- package/dist/mcp/cli.js +1272 -1111
- package/dist/mcp/cli.js.map +1 -1
- package/dist/mcp/server.js +1 -1
- package/dist/panel/index.js +11 -1
- package/dist/panel/index.js.map +1 -1
- package/dist/{pool-DBLKNeRC.d.ts → pool-BaSCZALv.d.ts} +12 -4
- package/dist/{pool-DBLKNeRC.d.ts.map → pool-BaSCZALv.d.ts.map} +1 -1
- package/dist/{qr-http-server-Bo8LMOJQ.js → qr-http-server-BdNGPRoL.js} +76 -6
- package/dist/qr-http-server-BdNGPRoL.js.map +1 -0
- package/dist/{qr-http-server-CrGohOwC.js → qr-http-server-Bq9zR7-z.js} +76 -6
- package/dist/qr-http-server-Bq9zR7-z.js.map +1 -0
- package/dist/{qr-http-server-Bt_RAxFn.cjs → qr-http-server-BxoRp2w7.cjs} +76 -6
- package/dist/qr-http-server-BxoRp2w7.cjs.map +1 -0
- package/dist/{qr-http-server-DM2R25jP.cjs → qr-http-server-CV6TA9ZN.cjs} +76 -6
- package/dist/qr-http-server-CV6TA9ZN.cjs.map +1 -0
- package/dist/{qr-http-server-s1iW_5VQ.js → qr-http-server-DCbjORFa.js} +76 -6
- package/dist/qr-http-server-DCbjORFa.js.map +1 -0
- package/dist/{qr-http-server-BH0UFeUn.js → qr-http-server-cKbciY5k.js} +76 -6
- package/dist/qr-http-server-cKbciY5k.js.map +1 -0
- package/dist/{relay-factory-Dug7W6Ao.js → relay-factory-Cloog1jb.js} +34 -14
- package/dist/relay-factory-Cloog1jb.js.map +1 -0
- package/dist/{relay-secret-store-DKxs7zwq.js → relay-secret-store-DzxDsK6S.js} +1 -1
- package/dist/{relay-secret-store-DKxs7zwq.js.map → relay-secret-store-DzxDsK6S.js.map} +1 -1
- package/dist/{relay-url-store-xmUuTjXA.js → relay-url-store-D3rY-GJJ.js} +2 -2
- package/dist/{relay-url-store-xmUuTjXA.js.map → relay-url-store-D3rY-GJJ.js.map} +1 -1
- package/dist/{debug-server-BzzNkETg.js → relay-worker-CCAHLC4a.js} +220 -350
- package/dist/relay-worker-CCAHLC4a.js.map +1 -0
- package/dist/{relay-worker-TReZtzGl.d.ts → relay-worker-o0M2ndyJ.d.ts} +7 -7
- package/dist/relay-worker-o0M2ndyJ.d.ts.map +1 -0
- package/dist/{runtime-ozyPnRbU.d.ts → runtime-9xhN9pr8.d.ts} +1 -1
- package/dist/{runtime-ozyPnRbU.d.ts.map → runtime-9xhN9pr8.d.ts.map} +1 -1
- package/dist/test-runner/bin.js +744 -25
- package/dist/test-runner/bin.js.map +1 -1
- package/dist/test-runner/bundle.d.ts +1 -1
- package/dist/test-runner/capture.d.ts +1 -1
- package/dist/test-runner/config.d.ts +15 -9
- package/dist/test-runner/config.d.ts.map +1 -1
- package/dist/test-runner/config.js +1 -1
- package/dist/test-runner/pool.d.ts +1 -1
- package/dist/test-runner/pool.js +1 -1
- package/dist/test-runner/pool.js.map +1 -1
- package/dist/test-runner/relay-factory.d.ts +23 -9
- package/dist/test-runner/relay-factory.d.ts.map +1 -1
- package/dist/test-runner/relay-factory.js +32 -12
- package/dist/test-runner/relay-factory.js.map +1 -1
- package/dist/test-runner/relay-worker.d.ts +1 -1
- package/dist/test-runner/relay-worker.js +1 -187
- package/dist/test-runner/report.d.ts +3 -3
- package/dist/test-runner/rpc.d.ts +2 -2
- package/dist/test-runner/runtime.d.ts +1 -1
- package/dist/test-runner/task-graph.d.ts +1 -1
- package/dist/{tunnel-DyEV6WwL.cjs → tunnel-B2UCKAc7.cjs} +4 -3
- package/dist/{tunnel-DyEV6WwL.cjs.map → tunnel-B2UCKAc7.cjs.map} +1 -1
- package/dist/{tunnel-BFwOSwT4.js → tunnel-C-rQ34dM.js} +4 -3
- package/dist/{tunnel-BFwOSwT4.js.map → tunnel-C-rQ34dM.js.map} +1 -1
- package/dist/unplugin/index.cjs +1 -1
- package/dist/unplugin/index.js +1 -1
- package/dist/unplugin/tunnel.cjs +3 -2
- package/dist/unplugin/tunnel.cjs.map +1 -1
- package/dist/unplugin/tunnel.d.cts.map +1 -1
- package/dist/unplugin/tunnel.d.ts.map +1 -1
- package/dist/unplugin/tunnel.js +3 -2
- package/dist/unplugin/tunnel.js.map +1 -1
- package/package.json +1 -1
- package/dist/attach-orchestrator-CPMQWkGV.js.map +0 -1
- package/dist/attach-orchestrator-CpE0dMew.js.map +0 -1
- package/dist/cell-Ba9lCI3B.js.map +0 -1
- package/dist/cell-CX92lDI0.js.map +0 -1
- package/dist/cell-D0dJSGHi.js.map +0 -1
- package/dist/debug-server-1dhDA3aw.js +0 -980
- package/dist/debug-server-1dhDA3aw.js.map +0 -1
- package/dist/debug-server-Dctc9GAh.js.map +0 -1
- package/dist/qr-http-server-BH0UFeUn.js.map +0 -1
- package/dist/qr-http-server-Bo8LMOJQ.js.map +0 -1
- package/dist/qr-http-server-Bt_RAxFn.cjs.map +0 -1
- package/dist/qr-http-server-CrGohOwC.js.map +0 -1
- package/dist/qr-http-server-DM2R25jP.cjs.map +0 -1
- package/dist/qr-http-server-s1iW_5VQ.js.map +0 -1
- package/dist/relay-factory-Dug7W6Ao.js.map +0 -1
- package/dist/relay-worker-TReZtzGl.d.ts.map +0 -1
- package/dist/test-runner/relay-worker.js.map +0 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { r as generateTotp } from "./totp-DvOYkYim.js";
|
|
3
|
+
import { r as logInfo } from "./test-runner/bin.js";
|
|
3
4
|
import { randomBytes } from "node:crypto";
|
|
4
5
|
import { Tunnel, bin, install } from "cloudflared";
|
|
5
6
|
//#region src/mcp/deeplink.ts
|
|
@@ -245,98 +246,6 @@ function classifyToolError(err, toolName, isLocal = false) {
|
|
|
245
246
|
return mcpError(`${toolName} 실패: ${message}\nlist_pages로 미니앱이 relay에 attach됐는지 확인하세요.`);
|
|
246
247
|
}
|
|
247
248
|
//#endregion
|
|
248
|
-
//#region src/mcp/log.ts
|
|
249
|
-
/**
|
|
250
|
-
* Allowed field keys that may pass through to a log line.
|
|
251
|
-
* Unknown keys are dropped. Values are still redact-scanned.
|
|
252
|
-
*/
|
|
253
|
-
const ALLOWED_KEYS = new Set([
|
|
254
|
-
"ts",
|
|
255
|
-
"level",
|
|
256
|
-
"event",
|
|
257
|
-
"msg",
|
|
258
|
-
"port",
|
|
259
|
-
"totpEnabled",
|
|
260
|
-
"env",
|
|
261
|
-
"tool",
|
|
262
|
-
"deploymentId",
|
|
263
|
-
"errorKind",
|
|
264
|
-
"reason",
|
|
265
|
-
"prevTargetId",
|
|
266
|
-
"mode",
|
|
267
|
-
"fileCount",
|
|
268
|
-
"passed",
|
|
269
|
-
"failed",
|
|
270
|
-
"skipped"
|
|
271
|
-
]);
|
|
272
|
-
/**
|
|
273
|
-
* Patterns that match secret values.
|
|
274
|
-
* Match order matters — more-specific patterns first.
|
|
275
|
-
*
|
|
276
|
-
* #268 redact script covers: relay=wss://…, at=<TOTP>, _deploymentId=<uuid>.
|
|
277
|
-
* Here we extend to in-process value-level patterns used in server logs.
|
|
278
|
-
*/
|
|
279
|
-
const SECRET_PATTERNS = [
|
|
280
|
-
/^\d{6}$/,
|
|
281
|
-
/^(aitcc_|AITCC_)/i,
|
|
282
|
-
/^[A-Za-z0-9_-]+=.{4,}/,
|
|
283
|
-
/^wss:\/\//,
|
|
284
|
-
/(?:^|[?&])at=[A-Z0-9]{6}/i
|
|
285
|
-
];
|
|
286
|
-
/**
|
|
287
|
-
* Returns `true` when the string value matches any known-secret pattern.
|
|
288
|
-
* Only string values are tested — numbers/booleans are always safe.
|
|
289
|
-
*/
|
|
290
|
-
function isSecretValue(value) {
|
|
291
|
-
return SECRET_PATTERNS.some((re) => re.test(value));
|
|
292
|
-
}
|
|
293
|
-
/**
|
|
294
|
-
* Redacts a single scalar value.
|
|
295
|
-
* - strings: return "***" if the value matches a secret pattern.
|
|
296
|
-
* - other: return as-is.
|
|
297
|
-
*/
|
|
298
|
-
function redactValue(value) {
|
|
299
|
-
if (typeof value === "string" && isSecretValue(value)) return "***";
|
|
300
|
-
return value;
|
|
301
|
-
}
|
|
302
|
-
/**
|
|
303
|
-
* Builds a safe log payload from raw fields.
|
|
304
|
-
*
|
|
305
|
-
* - Only keys in `ALLOWED_KEYS` are included.
|
|
306
|
-
* - String values are scanned for secret patterns and replaced with "***".
|
|
307
|
-
* - `ts` and `level` and `event` are always included (they are injected by the
|
|
308
|
-
* logger functions below, not by callers).
|
|
309
|
-
*/
|
|
310
|
-
function buildPayload(level, event, fields) {
|
|
311
|
-
const out = {
|
|
312
|
-
ts: (/* @__PURE__ */ new Date()).toISOString(),
|
|
313
|
-
level,
|
|
314
|
-
event
|
|
315
|
-
};
|
|
316
|
-
for (const [key, value] of Object.entries(fields)) {
|
|
317
|
-
if (!ALLOWED_KEYS.has(key)) continue;
|
|
318
|
-
if (key === "ts" || key === "level" || key === "event") continue;
|
|
319
|
-
out[key] = redactValue(value);
|
|
320
|
-
}
|
|
321
|
-
return out;
|
|
322
|
-
}
|
|
323
|
-
/**
|
|
324
|
-
* Writes a single JSON log line to stderr.
|
|
325
|
-
* MCP stdio transport uses stdout; all diagnostics go to stderr.
|
|
326
|
-
*/
|
|
327
|
-
function writeLog(level, event, fields = {}) {
|
|
328
|
-
const payload = buildPayload(level, event, fields);
|
|
329
|
-
process.stderr.write(`${JSON.stringify(payload)}\n`);
|
|
330
|
-
}
|
|
331
|
-
/** Log an informational structured event. */
|
|
332
|
-
function logInfo(event, fields = {}) {
|
|
333
|
-
writeLog("info", event, fields);
|
|
334
|
-
}
|
|
335
|
-
/** Log an error structured event. */
|
|
336
|
-
function logError(event, fields = {}) {
|
|
337
|
-
writeLog("error", event, fields);
|
|
338
|
-
}
|
|
339
|
-
//#endregion
|
|
340
249
|
//#region src/mcp/sdk-signatures.ts
|
|
341
250
|
function isObject(v) {
|
|
342
251
|
return typeof v === "object" && v !== null && !Array.isArray(v);
|
|
@@ -1717,34 +1626,52 @@ async function renderAndMaybeWait(deps, prep, waitForAttach, callTimeoutMs, conn
|
|
|
1717
1626
|
}, null, 2)}\n\n${qr}`);
|
|
1718
1627
|
}
|
|
1719
1628
|
/**
|
|
1720
|
-
* Builds a self-contained IIFE DOM expression that renders a
|
|
1721
|
-
* "Debugger Connected" badge on the bottom-left of
|
|
1629
|
+
* Builds a self-contained IIFE DOM expression that renders a LIVE
|
|
1630
|
+
* "Debugger Connected" / "Debugger Disconnected" badge on the bottom-left of
|
|
1631
|
+
* the phone screen (#730).
|
|
1722
1632
|
*
|
|
1723
1633
|
* **Pure function** — returns a JS expression string; does NOT inject it.
|
|
1724
1634
|
* Injection is performed by {@link injectDebugIndicator} in `cell.ts`.
|
|
1725
1635
|
*
|
|
1726
1636
|
* The expression, when evaluated on the page, does the following:
|
|
1727
|
-
* 1.
|
|
1728
|
-
*
|
|
1729
|
-
*
|
|
1730
|
-
*
|
|
1731
|
-
*
|
|
1732
|
-
*
|
|
1637
|
+
* 1. Idempotent controller — a single `window.__ait_indicator` controller
|
|
1638
|
+
* object is created once (keyed on its presence, not on the DOM node).
|
|
1639
|
+
* Re-injection (e.g. explicit disconnect notice from `close()`) UPDATES
|
|
1640
|
+
* the existing badge's state/label in place — it never duplicates the
|
|
1641
|
+
* `<div>` or stacks a second observer.
|
|
1642
|
+
* 2. Renders a fixed-position `<div id="__ait_debug_indicator">` at the
|
|
1643
|
+
* bottom-left, accounting for safe-area insets. Background/text flip
|
|
1644
|
+
* between the attached (red) and disconnected (grey) visuals.
|
|
1645
|
+
* 3. A `pointerdown` listener dismisses (hides) the badge on tap — dismiss
|
|
1646
|
+
* is NON-terminal: a later state transition un-dismisses it, so a
|
|
1647
|
+
* genuine disconnect after a dismissed tap is still visible.
|
|
1648
|
+
* 4. Observes relay-socket lifecycle WITHOUT opening any new connection:
|
|
1649
|
+
* - Preferred path: if the in-app module (`src/in-app/attach.ts`) has
|
|
1650
|
+
* already installed its relay-WS observer (`window.__ait_relay_ws_observed`),
|
|
1651
|
+
* subscribe to the `ait:relay-ws-state` CustomEvent it broadcasts.
|
|
1652
|
+
* - Fallback path: wrap `window.WebSocket` in a `Proxy` and match dials
|
|
1653
|
+
* by PATHNAME SHAPE only (`/target/`) — never by host/wss value — so a
|
|
1654
|
+
* bare CDP-injected badge (no in-app bundle) still reacts to the
|
|
1655
|
+
* chii target socket's own open/close lifecycle.
|
|
1733
1656
|
*
|
|
1734
1657
|
* The expression intentionally contains NO relay URLs, wss addresses, TOTP
|
|
1735
|
-
* codes, or any other secrets. It is pure DOM UI text only.
|
|
1658
|
+
* codes, or any other secrets. It is pure DOM UI text + enum state only.
|
|
1736
1659
|
*
|
|
1737
1660
|
* SECRET-HANDLING: this expression contains no secrets, relay URLs, wss
|
|
1738
|
-
* addresses, or TOTP codes whatsoever — DOM label text
|
|
1661
|
+
* addresses, or TOTP codes whatsoever — DOM label text + a structural
|
|
1662
|
+
* pathname match (`/target/`) only.
|
|
1739
1663
|
*
|
|
1740
|
-
* @param opts.label -
|
|
1664
|
+
* @param opts.label - Attached-state badge text (default: `'Debugger Connected'`).
|
|
1665
|
+
* @param opts.disconnectedLabel - Disconnected-state badge text (default: `'Debugger Disconnected'`).
|
|
1666
|
+
* @param opts.state - Initial/forced state for THIS injection call (default: `'attached'`).
|
|
1741
1667
|
* @returns A JS expression string suitable for `Runtime.evaluate`.
|
|
1742
1668
|
*/
|
|
1743
1669
|
function buildIndicatorExpression(opts) {
|
|
1744
1670
|
const label = opts?.label ?? "Debugger Connected";
|
|
1745
|
-
|
|
1671
|
+
const disconnectedLabel = opts?.disconnectedLabel ?? "Debugger Disconnected";
|
|
1672
|
+
return `(() => {var W = window;function render(c) {if (c.dismissed) { c.el.style.display = 'none'; return; }c.el.style.display = 'block';var up = c.state !== 'disconnected';c.el.style.background = up ? '#e5484d' : '#8a8f98';c.el.textContent = up ? ${JSON.stringify(label)} : ${JSON.stringify(disconnectedLabel)};}function setState(c, next) { c.state = next; c.dismissed = false; render(c); }var c = W.__ait_indicator;if (!c) {var el = document.createElement('div');el.id = '__ait_debug_indicator';el.style.cssText = ['position:fixed','left:max(12px,calc(env(safe-area-inset-left,0px) + 8px))','bottom:max(12px,calc(env(safe-area-inset-bottom,0px) + 8px))','z-index:2147483647','color:#fff','font:bold 11px/1 system-ui,sans-serif','padding:5px 9px','border-radius:6px','pointer-events:auto','user-select:none',].join(';');document.body.appendChild(el);c = { el: el, state: 'attached', dismissed: false };el.addEventListener('pointerdown', function () { c.dismissed = true; render(c); }, { passive: true });W.__ait_indicator = c;if (W.__ait_relay_ws_observed) {W.addEventListener('ait:relay-ws-state', function (e) {setState(c, e.detail && e.detail.state === 'open' ? 'attached' : 'disconnected');});} else {try {var Native = W.WebSocket;W.WebSocket = new Proxy(Native, {construct: function (t, a) {var ws = Reflect.construct(t, a);try {var u = new URL(String(a[0]), location.href);if (/\\/target\\//.test(u.pathname)) {ws.addEventListener('open', function () { setState(c, 'attached'); });ws.addEventListener('close', function () { setState(c, 'disconnected'); });ws.addEventListener('error', function () { setState(c, 'disconnected'); });}} catch (_) {}return ws;},});} catch (_) {}}}setState(c, ${JSON.stringify(opts?.state ?? "attached")});})()`;
|
|
1746
1673
|
}
|
|
1747
1674
|
//#endregion
|
|
1748
|
-
export { RELAY_SANDBOX_STALE_PAGE_MS, START_ATTACH_REMINT_THRESHOLD_MS, START_ATTACH_SEGMENT_MS, startTunnelHealthProbe as a, buildIndicatorExpression, extractDeploymentId, startQuickTunnel as i, isSandboxPageFresh, mintAttachUrl, makeTunnelStatus as n,
|
|
1675
|
+
export { RELAY_SANDBOX_STALE_PAGE_MS, START_ATTACH_REMINT_THRESHOLD_MS, START_ATTACH_SEGMENT_MS, startTunnelHealthProbe as a, buildIndicatorExpression, extractDeploymentId, startQuickTunnel as i, isSandboxPageFresh, mintAttachUrl, makeTunnelStatus as n, prepareAttach, printAttachBanner as r, renderAndMaybeWait, generateAttachToken as t };
|
|
1749
1676
|
|
|
1750
|
-
//# sourceMappingURL=attach-orchestrator-
|
|
1677
|
+
//# sourceMappingURL=attach-orchestrator-ca34r46y.js.map
|