react-native-debug-toolkit 3.1.3 → 3.1.4
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 +4 -2
- package/README.zh-CN.md +4 -2
- package/lib/commonjs/core/DebugToolkit.js +118 -97
- package/lib/commonjs/core/DebugToolkit.js.map +1 -1
- package/lib/commonjs/core/initialize.js +4 -4
- package/lib/commonjs/core/initialize.js.map +1 -1
- package/lib/commonjs/features/environment/index.js +22 -24
- package/lib/commonjs/features/environment/index.js.map +1 -1
- package/lib/commonjs/features/network/index.js +25 -47
- package/lib/commonjs/features/network/index.js.map +1 -1
- package/lib/commonjs/features/network/networkInterceptor.js +3 -3
- package/lib/commonjs/features/network/networkInterceptor.js.map +1 -1
- package/lib/commonjs/index.js +0 -30
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/utils/DaemonClient.js +13 -51
- package/lib/commonjs/utils/DaemonClient.js.map +1 -1
- package/lib/commonjs/utils/createChannelFeature.js +8 -1
- package/lib/commonjs/utils/createChannelFeature.js.map +1 -1
- package/lib/commonjs/utils/deviceReport.js +2 -1
- package/lib/commonjs/utils/deviceReport.js.map +1 -1
- package/lib/commonjs/utils/urlRewriter.js +15 -0
- package/lib/commonjs/utils/urlRewriter.js.map +1 -0
- package/lib/module/core/DebugToolkit.js +117 -96
- package/lib/module/core/DebugToolkit.js.map +1 -1
- package/lib/module/core/initialize.js +6 -7
- package/lib/module/core/initialize.js.map +1 -1
- package/lib/module/features/environment/index.js +22 -24
- package/lib/module/features/environment/index.js.map +1 -1
- package/lib/module/features/network/index.js +25 -46
- package/lib/module/features/network/index.js.map +1 -1
- package/lib/module/features/network/networkInterceptor.js +3 -3
- package/lib/module/features/network/networkInterceptor.js.map +1 -1
- package/lib/module/index.js +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils/DaemonClient.js +14 -42
- package/lib/module/utils/DaemonClient.js.map +1 -1
- package/lib/module/utils/createChannelFeature.js +8 -1
- package/lib/module/utils/createChannelFeature.js.map +1 -1
- package/lib/module/utils/deviceReport.js +3 -2
- package/lib/module/utils/deviceReport.js.map +1 -1
- package/lib/module/utils/urlRewriter.js +10 -0
- package/lib/module/utils/urlRewriter.js.map +1 -0
- package/lib/typescript/src/core/DebugToolkit.d.ts +23 -10
- package/lib/typescript/src/core/DebugToolkit.d.ts.map +1 -1
- package/lib/typescript/src/core/initialize.d.ts.map +1 -1
- package/lib/typescript/src/features/environment/index.d.ts.map +1 -1
- package/lib/typescript/src/features/network/index.d.ts +3 -3
- package/lib/typescript/src/features/network/index.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +2 -2
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/types/feature.d.ts +5 -0
- package/lib/typescript/src/types/feature.d.ts.map +1 -1
- package/lib/typescript/src/types/index.d.ts +1 -1
- package/lib/typescript/src/types/index.d.ts.map +1 -1
- package/lib/typescript/src/utils/DaemonClient.d.ts +4 -11
- package/lib/typescript/src/utils/DaemonClient.d.ts.map +1 -1
- package/lib/typescript/src/utils/createChannelFeature.d.ts +4 -0
- package/lib/typescript/src/utils/createChannelFeature.d.ts.map +1 -1
- package/lib/typescript/src/utils/deviceReport.d.ts +4 -1
- package/lib/typescript/src/utils/deviceReport.d.ts.map +1 -1
- package/lib/typescript/src/utils/urlRewriter.d.ts +5 -0
- package/lib/typescript/src/utils/urlRewriter.d.ts.map +1 -0
- package/node/daemon/src/console/console.html +94 -15
- package/node/daemon/src/server.js +32 -2
- package/node/mcp/src/logs.js +15 -4
- package/node/mcp/src/tools.js +4 -2
- package/package.json +1 -1
- package/src/core/DebugToolkit.tsx +119 -105
- package/src/core/initialize.ts +7 -8
- package/src/features/environment/index.ts +25 -27
- package/src/features/network/index.ts +30 -52
- package/src/features/network/networkInterceptor.ts +3 -3
- package/src/index.ts +3 -8
- package/src/types/feature.ts +6 -0
- package/src/types/index.ts +1 -0
- package/src/utils/DaemonClient.ts +14 -56
- package/src/utils/createChannelFeature.ts +12 -1
- package/src/utils/deviceReport.ts +5 -3
- package/src/utils/urlRewriter.ts +11 -0
- package/lib/commonjs/utils/urlRewriterRegistry.js +0 -14
- package/lib/commonjs/utils/urlRewriterRegistry.js.map +0 -1
- package/lib/module/utils/urlRewriterRegistry.js +0 -10
- package/lib/module/utils/urlRewriterRegistry.js.map +0 -1
- package/lib/typescript/src/utils/urlRewriterRegistry.d.ts +0 -7
- package/lib/typescript/src/utils/urlRewriterRegistry.d.ts.map +0 -1
- package/src/utils/urlRewriterRegistry.ts +0 -10
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { FeatureDataProvider } from '../types';
|
|
1
2
|
import { type DebugDeviceReport, type DebugDeviceReportOptions } from './deviceReport';
|
|
2
3
|
export type DaemonConnectionMode = 'simulator' | 'device';
|
|
3
4
|
export interface DaemonSettings {
|
|
@@ -83,6 +84,7 @@ export declare function normalizeDaemonSettings(settings: DaemonSettings): {
|
|
|
83
84
|
export interface DaemonClientOptions {
|
|
84
85
|
fetch?: FetchLike;
|
|
85
86
|
AbortController?: AbortControllerCtor;
|
|
87
|
+
featureProvider: FeatureDataProvider;
|
|
86
88
|
onEndpointDetected?: (url: string) => void;
|
|
87
89
|
}
|
|
88
90
|
export declare class DaemonClient {
|
|
@@ -91,9 +93,10 @@ export declare class DaemonClient {
|
|
|
91
93
|
private _stream;
|
|
92
94
|
private _fetch;
|
|
93
95
|
private _AbortController;
|
|
96
|
+
private _featureProvider;
|
|
94
97
|
private _onEndpointDetected;
|
|
95
98
|
private _restorePromise;
|
|
96
|
-
constructor(options
|
|
99
|
+
constructor(options: DaemonClientOptions);
|
|
97
100
|
getSettings(): DaemonSettings;
|
|
98
101
|
configure(settings: DaemonSettings): void;
|
|
99
102
|
checkConnection(options?: DaemonConnectionOptions): Promise<DaemonConnectionResult>;
|
|
@@ -126,16 +129,6 @@ export declare class DaemonClient {
|
|
|
126
129
|
private enqueueSendDelta;
|
|
127
130
|
}
|
|
128
131
|
export declare const daemonClient: DaemonClient;
|
|
129
|
-
export declare function loadDaemonSettings(): Promise<DaemonSettings>;
|
|
130
|
-
export declare function saveDaemonSettings(settings: DaemonSettings): Promise<void>;
|
|
131
|
-
export declare function loadDaemonStreamingEnabled(): Promise<boolean | null>;
|
|
132
|
-
export declare function saveDaemonStreamingEnabled(enabled: boolean): Promise<void>;
|
|
133
|
-
export declare function startStreaming(options?: StreamToDaemonOptions): void;
|
|
134
|
-
export declare function stopStreaming(): void;
|
|
135
|
-
export declare function isStreaming(): boolean;
|
|
136
|
-
export declare function checkDaemonConnection(options?: DaemonConnectionOptions): Promise<DaemonConnectionResult>;
|
|
137
|
-
export declare function reportDebugDeviceToDaemon(options?: ReportToDaemonOptions): Promise<ReportResult>;
|
|
138
|
-
export declare function restoreDaemonStreaming(): Promise<void>;
|
|
139
132
|
export declare function _resetDaemonClientForTesting(): void;
|
|
140
133
|
export {};
|
|
141
134
|
//# sourceMappingURL=DaemonClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DaemonClient.d.ts","sourceRoot":"","sources":["../../../../src/utils/DaemonClient.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"DaemonClient.d.ts","sourceRoot":"","sources":["../../../../src/utils/DaemonClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,5 +23,9 @@ export declare function createChannelFeature<TPayload, TEntry extends {
|
|
|
23
23
|
renderContent?: ComponentType<DebugFeatureRenderProps<TEntry[]>>;
|
|
24
24
|
maxLogs?: number;
|
|
25
25
|
persist?: ChannelFeaturePersistConfig<TEntry>;
|
|
26
|
+
/** Return null to skip, or the (possibly modified) payload to proceed. */
|
|
27
|
+
beforePush?: (payload: TPayload) => TPayload | null;
|
|
28
|
+
/** Called after channel subscription in setup. Return a cleanup function. */
|
|
29
|
+
onSetup?: () => (() => void) | void;
|
|
26
30
|
}): DebugFeature<TEntry[]>;
|
|
27
31
|
//# sourceMappingURL=createChannelFeature.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createChannelFeature.d.ts","sourceRoot":"","sources":["../../../../src/utils/createChannelFeature.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAwB,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAC5F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAMzD,MAAM,WAAW,2BAA2B,CAAC,MAAM;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;CACxC;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,SAAS;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,EAC3E,UAAU,EAAE,MAAM,YAAY,CAAC,QAAQ,CAAC,EACxC,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,KAAK,MAAM,EAClD,OAAO,EAAE;IACP,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,aAAa,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,2BAA2B,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"createChannelFeature.d.ts","sourceRoot":"","sources":["../../../../src/utils/createChannelFeature.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAwB,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAC5F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAMzD,MAAM,WAAW,2BAA2B,CAAC,MAAM;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;CACxC;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,SAAS;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,EAC3E,UAAU,EAAE,MAAM,YAAY,CAAC,QAAQ,CAAC,EACxC,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,KAAK,MAAM,EAClD,OAAO,EAAE;IACP,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,aAAa,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,2BAA2B,CAAC,MAAM,CAAC,CAAC;IAC9C,0EAA0E;IAC1E,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,QAAQ,GAAG,IAAI,CAAC;IACpD,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;CACrC,GACA,YAAY,CAAC,MAAM,EAAE,CAAC,CAqDxB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { FeatureDataProvider } from '../types';
|
|
1
2
|
export interface DebugDeviceReportOptions {
|
|
2
3
|
maxPerType?: number;
|
|
3
4
|
maxBodyBytes?: number;
|
|
@@ -14,5 +15,7 @@ export interface DebugDeviceReport {
|
|
|
14
15
|
device: DeviceInfo;
|
|
15
16
|
logs: Record<string, unknown[] | undefined>;
|
|
16
17
|
}
|
|
17
|
-
export declare function createDebugDeviceReport(options?: DebugDeviceReportOptions
|
|
18
|
+
export declare function createDebugDeviceReport(options?: DebugDeviceReportOptions & {
|
|
19
|
+
featureProvider?: FeatureDataProvider;
|
|
20
|
+
}): DebugDeviceReport;
|
|
18
21
|
//# sourceMappingURL=deviceReport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deviceReport.d.ts","sourceRoot":"","sources":["../../../../src/utils/deviceReport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deviceReport.d.ts","sourceRoot":"","sources":["../../../../src/utils/deviceReport.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAOpD,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC,CAAC;CAC7C;AAuID,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,wBAAwB,GAAG;IAAE,eAAe,CAAC,EAAE,mBAAmB,CAAA;CAAO,GACjF,iBAAiB,CAwCnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urlRewriter.d.ts","sourceRoot":"","sources":["../../../../src/utils/urlRewriter.ts"],"names":[],"mappings":"AAAA,KAAK,WAAW,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;AAI3C,wBAAgB,cAAc,IAAI,WAAW,GAAG,IAAI,CAEnD;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAEjE"}
|
|
@@ -421,6 +421,33 @@ header h1 span{color:var(--text3);font-weight:400}
|
|
|
421
421
|
padding:12px 14px;border-bottom:1px solid rgba(30,45,74,.5);
|
|
422
422
|
display:flex;align-items:center;gap:10px;
|
|
423
423
|
}
|
|
424
|
+
.network-meta-line{
|
|
425
|
+
padding:6px 14px;border-bottom:1px solid rgba(30,45,74,.5);
|
|
426
|
+
font-family:var(--font-mono);font-size:10px;color:var(--text3);
|
|
427
|
+
display:flex;gap:10px;flex-wrap:wrap;
|
|
428
|
+
}
|
|
429
|
+
.network-meta-line span{white-space:nowrap}
|
|
430
|
+
|
|
431
|
+
/* Collapsible sections */
|
|
432
|
+
.collapse-section{border:1px solid var(--border);border-radius:var(--radius);background:rgba(8,12,22,.35);overflow:hidden;margin-bottom:0}
|
|
433
|
+
.collapse-header{
|
|
434
|
+
display:flex;align-items:center;justify-content:space-between;
|
|
435
|
+
padding:7px 12px;border-bottom:1px solid var(--border);
|
|
436
|
+
background:rgba(0,229,255,.03);cursor:pointer;user-select:none;
|
|
437
|
+
}
|
|
438
|
+
.collapse-header:hover{background:rgba(0,229,255,.06)}
|
|
439
|
+
.collapse-header-left{display:flex;align-items:center;gap:6px}
|
|
440
|
+
.collapse-arrow{
|
|
441
|
+
font-size:9px;color:var(--text3);transition:transform .2s;display:inline-block;
|
|
442
|
+
}
|
|
443
|
+
.collapse-arrow.open{transform:rotate(90deg)}
|
|
444
|
+
.collapse-title{
|
|
445
|
+
font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;
|
|
446
|
+
color:var(--cyan);font-family:var(--font-mono);
|
|
447
|
+
}
|
|
448
|
+
.collapse-body{display:none;padding:0}
|
|
449
|
+
.collapse-body.open{display:block}
|
|
450
|
+
.section-body-inner{padding:4px 0}
|
|
424
451
|
.method-badge{
|
|
425
452
|
font-family:var(--font-mono);font-size:11px;font-weight:700;
|
|
426
453
|
padding:3px 10px;border-radius:3px;letter-spacing:.04em;
|
|
@@ -819,6 +846,34 @@ mark{
|
|
|
819
846
|
return renderSection(title, renderValue(object), object);
|
|
820
847
|
}
|
|
821
848
|
|
|
849
|
+
function renderCollapsibleSection(title, content, dataForCopy, collapsed) {
|
|
850
|
+
var id = 'ns-' + Math.random().toString(36).slice(2,8);
|
|
851
|
+
var isOpen = !collapsed;
|
|
852
|
+
var copyAttr = dataForCopy !== undefined
|
|
853
|
+
? ' data-copy="' + escapeHtml(typeof dataForCopy === 'string' ? dataForCopy : JSON.stringify(dataForCopy)) + '"'
|
|
854
|
+
: '';
|
|
855
|
+
var html = '<div class="collapse-section">';
|
|
856
|
+
html += '<div class="collapse-header" onclick="toggleNetworkSection(\'' + id + '\')">';
|
|
857
|
+
html += '<div class="collapse-header-left">';
|
|
858
|
+
html += '<span class="collapse-arrow' + (isOpen ? ' open' : '') + '" id="arrow-' + id + '">▶</span>';
|
|
859
|
+
html += '<span class="collapse-title">' + escapeHtml(title) + '</span>';
|
|
860
|
+
html += '</div>';
|
|
861
|
+
html += '<button class="detail-section-copy" onclick="event.stopPropagation();copySectionData(this)" title="Copy section"' + copyAttr + '>⎘</button>';
|
|
862
|
+
html += '</div>';
|
|
863
|
+
html += '<div class="collapse-body' + (isOpen ? ' open' : '') + '" id="' + id + '">';
|
|
864
|
+
html += '<div class="section-body-inner">' + content + '</div>';
|
|
865
|
+
html += '</div></div>';
|
|
866
|
+
return html;
|
|
867
|
+
}
|
|
868
|
+
|
|
869
|
+
window.toggleNetworkSection = function(id) {
|
|
870
|
+
var body = document.getElementById(id);
|
|
871
|
+
var arrow = document.getElementById('arrow-' + id);
|
|
872
|
+
if (!body) return;
|
|
873
|
+
body.classList.toggle('open');
|
|
874
|
+
if (arrow) arrow.classList.toggle('open');
|
|
875
|
+
};
|
|
876
|
+
|
|
822
877
|
function renderConsoleDetails(entry) {
|
|
823
878
|
var messages = Array.isArray(entry.data) ? entry.data : [entry.data];
|
|
824
879
|
return renderSection('Console', renderRows([
|
|
@@ -835,30 +890,53 @@ mark{
|
|
|
835
890
|
var method = (request.method || 'GET').toUpperCase();
|
|
836
891
|
var methodClass = 'method-' + method.toLowerCase();
|
|
837
892
|
|
|
838
|
-
|
|
893
|
+
// Hero - always visible
|
|
894
|
+
var html = '<div class="network-hero"><span class="method-badge ' + methodClass + '">' + escapeHtml(method) + '</span>' +
|
|
839
895
|
'<span class="network-url">' + escapeHtml(request.url || '-') + '</span></div>';
|
|
840
896
|
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
if (
|
|
897
|
+
// Compact meta line - always visible
|
|
898
|
+
var metaParts = [];
|
|
899
|
+
if (response && response.status !== undefined) {
|
|
900
|
+
metaParts.push(response.status + (response.statusText ? ' ' + response.statusText : ''));
|
|
901
|
+
}
|
|
902
|
+
if (entry.duration !== undefined) metaParts.push(entry.duration + 'ms');
|
|
903
|
+
if (entry.timestamp) metaParts.push(formatTimeShort(new Date(entry.timestamp).toISOString()));
|
|
904
|
+
if (metaParts.length) {
|
|
905
|
+
html += '<div class="network-meta-line">' + metaParts.map(function(p) { return '<span>' + escapeHtml(p) + '</span>'; }).join('') + '</div>';
|
|
906
|
+
}
|
|
847
907
|
|
|
848
|
-
|
|
908
|
+
// Request Body - EXPANDED by default, always visible
|
|
909
|
+
var reqBodyContent = request.body
|
|
910
|
+
? renderValue(request.body)
|
|
911
|
+
: '<span class="value-pill" style="color:var(--text3)">No request body</span>';
|
|
912
|
+
html += renderCollapsibleSection('Request Body', reqBodyContent, request.body || null, false);
|
|
849
913
|
|
|
914
|
+
// Response Data - EXPANDED by default, always visible
|
|
850
915
|
if (response) {
|
|
851
|
-
var
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
if (response.headers) resRows.push(['Headers', response.headers]);
|
|
856
|
-
if (response.data) resRows.push(['Data', response.data]);
|
|
857
|
-
html += renderSection('Response', renderRows(resRows), response);
|
|
916
|
+
var resDataContent = response.data != null
|
|
917
|
+
? renderValue(response.data)
|
|
918
|
+
: '<span class="value-pill" style="color:var(--text3)">No response body</span>';
|
|
919
|
+
html += renderCollapsibleSection('Response Data', resDataContent, response.data || null, false);
|
|
858
920
|
}
|
|
921
|
+
|
|
922
|
+
// Error - always visible if present
|
|
859
923
|
if (entry.error) {
|
|
860
924
|
html += renderSection('Error', renderValue(entry.error), entry.error);
|
|
861
925
|
}
|
|
926
|
+
|
|
927
|
+
// Everything below is COLLAPSED by default
|
|
928
|
+
var reqHeadersContent = request.headers
|
|
929
|
+
? renderValue(request.headers)
|
|
930
|
+
: '<span class="value-pill" style="color:var(--text3)">No headers</span>';
|
|
931
|
+
html += renderCollapsibleSection('Request Headers', reqHeadersContent, request.headers || null, true);
|
|
932
|
+
|
|
933
|
+
if (response) {
|
|
934
|
+
var resHeadersContent = response.headers
|
|
935
|
+
? renderValue(response.headers)
|
|
936
|
+
: '<span class="value-pill" style="color:var(--text3)">No headers</span>';
|
|
937
|
+
html += renderCollapsibleSection('Response Headers', resHeadersContent, response.headers || null, true);
|
|
938
|
+
}
|
|
939
|
+
|
|
862
940
|
return html;
|
|
863
941
|
}
|
|
864
942
|
|
|
@@ -1058,6 +1136,7 @@ mark{
|
|
|
1058
1136
|
html += renderCurlPanel('Curl this device', [
|
|
1059
1137
|
curlCommand('/devices/' + encodeURIComponent(deviceId)),
|
|
1060
1138
|
curlCommand('/devices/' + encodeURIComponent(deviceId) + '/logs?limit=200'),
|
|
1139
|
+
curlCommand('/devices/' + encodeURIComponent(deviceId) + '/logs?limit=200&includeBodies=true'),
|
|
1061
1140
|
curlCommand('/devices/' + encodeURIComponent(deviceId) + '/logs?type=network&failedOnly=true&limit=50'),
|
|
1062
1141
|
curlCommand('/devices/' + encodeURIComponent(deviceId) + '/logs?type=console&limit=200'),
|
|
1063
1142
|
]);
|
|
@@ -140,6 +140,25 @@ function toDevicePayload(deviceLog) {
|
|
|
140
140
|
};
|
|
141
141
|
}
|
|
142
142
|
|
|
143
|
+
function stripBodies(value, parentKey) {
|
|
144
|
+
if (Array.isArray(value)) {
|
|
145
|
+
return value.map((item) => stripBodies(item, parentKey));
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
if (!value || typeof value !== 'object') {
|
|
149
|
+
return value;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return Object.entries(value).reduce((acc, [key, child]) => {
|
|
153
|
+
const normalizedKey = key.toLowerCase();
|
|
154
|
+
if (normalizedKey === 'body' || (parentKey === 'response' && normalizedKey === 'data')) {
|
|
155
|
+
return acc;
|
|
156
|
+
}
|
|
157
|
+
acc[key] = stripBodies(child, normalizedKey);
|
|
158
|
+
return acc;
|
|
159
|
+
}, {});
|
|
160
|
+
}
|
|
161
|
+
|
|
143
162
|
function selectLogs(deviceLog, searchParams) {
|
|
144
163
|
if (!deviceLog) {
|
|
145
164
|
return [];
|
|
@@ -150,6 +169,8 @@ function selectLogs(deviceLog, searchParams) {
|
|
|
150
169
|
const limit = Number.isFinite(limitParam) && limitParam > 0
|
|
151
170
|
? Math.min(Math.floor(limitParam), 500)
|
|
152
171
|
: 50;
|
|
172
|
+
const entryId = searchParams.get('entryId');
|
|
173
|
+
const includeBodies = entryId ? true : searchParams.get('includeBodies') === 'true';
|
|
153
174
|
const failedOnly = searchParams.get('failedOnly') === 'true';
|
|
154
175
|
const logs = deviceLog.report.logs || {};
|
|
155
176
|
|
|
@@ -160,7 +181,12 @@ function selectLogs(deviceLog, searchParams) {
|
|
|
160
181
|
entries = Object.values(logs).flatMap((value) => Array.isArray(value) ? value : []);
|
|
161
182
|
}
|
|
162
183
|
|
|
163
|
-
if (
|
|
184
|
+
if (entryId) {
|
|
185
|
+
entries = entries.filter((entry) => (
|
|
186
|
+
entry && typeof entry === 'object' &&
|
|
187
|
+
(entry.id === entryId || entry.id === Number(entryId))
|
|
188
|
+
));
|
|
189
|
+
} else if (failedOnly) {
|
|
164
190
|
entries = entries.filter((entry) => (
|
|
165
191
|
entry &&
|
|
166
192
|
typeof entry === 'object' &&
|
|
@@ -173,7 +199,11 @@ function selectLogs(deviceLog, searchParams) {
|
|
|
173
199
|
));
|
|
174
200
|
}
|
|
175
201
|
|
|
176
|
-
|
|
202
|
+
if (!entryId) {
|
|
203
|
+
entries = entries.slice(-limit);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
return includeBodies ? entries : entries.map(stripBodies);
|
|
177
207
|
}
|
|
178
208
|
|
|
179
209
|
function broadcastSSE(clients, eventType, deviceLog, delta) {
|
package/node/mcp/src/logs.js
CHANGED
|
@@ -40,7 +40,8 @@ function selectLogs(report, options = {}) {
|
|
|
40
40
|
const limit = Number.isFinite(options.limit) && options.limit > 0
|
|
41
41
|
? Math.min(Math.floor(options.limit), 200)
|
|
42
42
|
: 50;
|
|
43
|
-
const
|
|
43
|
+
const entryId = options.entryId;
|
|
44
|
+
const includeBodies = entryId ? true : options.includeBodies === true;
|
|
44
45
|
const failedOnly = options.failedOnly === true;
|
|
45
46
|
|
|
46
47
|
let entries;
|
|
@@ -54,11 +55,18 @@ function selectLogs(report, options = {}) {
|
|
|
54
55
|
));
|
|
55
56
|
}
|
|
56
57
|
|
|
57
|
-
if (
|
|
58
|
+
if (entryId) {
|
|
59
|
+
entries = entries.filter((item) => {
|
|
60
|
+
const e = item.entry || item;
|
|
61
|
+
return e.id === entryId || e.id === Number(entryId);
|
|
62
|
+
});
|
|
63
|
+
} else if (failedOnly) {
|
|
58
64
|
entries = entries.filter((item) => isFailedLog(item.entry || item));
|
|
59
65
|
}
|
|
60
66
|
|
|
61
|
-
|
|
67
|
+
if (!entryId) {
|
|
68
|
+
entries = entries.slice(-limit);
|
|
69
|
+
}
|
|
62
70
|
|
|
63
71
|
if (logType) {
|
|
64
72
|
return includeBodies ? entries : entries.map(stripBodies);
|
|
@@ -72,6 +80,8 @@ function selectLogs(report, options = {}) {
|
|
|
72
80
|
|
|
73
81
|
function createToolPayload(device, options = {}) {
|
|
74
82
|
const report = device.report || { version: 2, logs: {} };
|
|
83
|
+
const entryId = options.entryId;
|
|
84
|
+
const includeBodies = entryId ? true : options.includeBodies === true;
|
|
75
85
|
const logs = selectLogs(report, options);
|
|
76
86
|
|
|
77
87
|
return {
|
|
@@ -81,7 +91,8 @@ function createToolPayload(device, options = {}) {
|
|
|
81
91
|
lastSeenAt: device.lastSeenAt,
|
|
82
92
|
logType: options.logType || 'all',
|
|
83
93
|
failedOnly: options.failedOnly === true,
|
|
84
|
-
includeBodies
|
|
94
|
+
includeBodies,
|
|
95
|
+
entryId: entryId || undefined,
|
|
85
96
|
count: logs.length,
|
|
86
97
|
logs,
|
|
87
98
|
};
|
package/node/mcp/src/tools.js
CHANGED
|
@@ -5,7 +5,7 @@ const { KNOWN_LOG_TYPES, createToolPayload } = require('./logs');
|
|
|
5
5
|
|
|
6
6
|
const getAppLogsTool = {
|
|
7
7
|
name: 'get_app_logs',
|
|
8
|
-
description: 'Read React Native Debug Toolkit logs from the local daemon. Tip: if you have shell access, curl http://127.0.0.1:3799/devices/latest is more efficient.',
|
|
8
|
+
description: 'Read React Native Debug Toolkit logs from the local daemon. Bodies are excluded by default to reduce token usage; set includeBodies=true or pass an entryId to fetch details. Tip: if you have shell access, curl http://127.0.0.1:3799/devices/latest/logs?includeBodies=true is more efficient.',
|
|
9
9
|
inputSchema: {
|
|
10
10
|
type: 'object',
|
|
11
11
|
properties: {
|
|
@@ -16,7 +16,8 @@ const getAppLogsTool = {
|
|
|
16
16
|
},
|
|
17
17
|
limit: { type: 'number', default: 50 },
|
|
18
18
|
failedOnly: { type: 'boolean', default: false },
|
|
19
|
-
includeBodies: { type: 'boolean', default:
|
|
19
|
+
includeBodies: { type: 'boolean', default: false },
|
|
20
|
+
entryId: { type: 'string', description: 'Fetch a single entry by ID; forces includeBodies=true' },
|
|
20
21
|
},
|
|
21
22
|
},
|
|
22
23
|
};
|
|
@@ -66,6 +67,7 @@ async function callTool(name, args = {}, context = {}) {
|
|
|
66
67
|
limit: args.limit,
|
|
67
68
|
failedOnly: args.failedOnly,
|
|
68
69
|
includeBodies: args.includeBodies,
|
|
70
|
+
entryId: args.entryId,
|
|
69
71
|
});
|
|
70
72
|
} catch (error) {
|
|
71
73
|
return {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-debug-toolkit",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.4",
|
|
4
4
|
"description": "A local-first React Native debugging bridge with in-app logs, desktop daemon, Web Console, HTTP API, and MCP support",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|