react-native-debug-toolkit 3.0.0 → 3.1.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.
Files changed (83) hide show
  1. package/README.md +115 -97
  2. package/README.zh-CN.md +113 -95
  3. package/lib/commonjs/core/initialize.js +5 -0
  4. package/lib/commonjs/core/initialize.js.map +1 -1
  5. package/lib/commonjs/index.js +23 -26
  6. package/lib/commonjs/index.js.map +1 -1
  7. package/lib/commonjs/ui/panel/StreamingSettingsModal.js +24 -58
  8. package/lib/commonjs/ui/panel/StreamingSettingsModal.js.map +1 -1
  9. package/lib/commonjs/utils/DaemonClient.js +721 -0
  10. package/lib/commonjs/utils/DaemonClient.js.map +1 -0
  11. package/lib/commonjs/utils/{sessionReport.js → deviceReport.js} +3 -3
  12. package/lib/commonjs/utils/deviceReport.js.map +1 -0
  13. package/lib/module/core/initialize.js +6 -0
  14. package/lib/module/core/initialize.js.map +1 -1
  15. package/lib/module/index.js +3 -5
  16. package/lib/module/index.js.map +1 -1
  17. package/lib/module/ui/panel/StreamingSettingsModal.js +21 -55
  18. package/lib/module/ui/panel/StreamingSettingsModal.js.map +1 -1
  19. package/lib/module/utils/DaemonClient.js +703 -0
  20. package/lib/module/utils/DaemonClient.js.map +1 -0
  21. package/lib/module/utils/{sessionReport.js → deviceReport.js} +2 -2
  22. package/lib/module/utils/deviceReport.js.map +1 -0
  23. package/lib/typescript/src/core/initialize.d.ts.map +1 -1
  24. package/lib/typescript/src/index.d.ts +5 -10
  25. package/lib/typescript/src/index.d.ts.map +1 -1
  26. package/lib/typescript/src/ui/panel/StreamingSettingsModal.d.ts.map +1 -1
  27. package/lib/typescript/src/utils/DaemonClient.d.ts +141 -0
  28. package/lib/typescript/src/utils/DaemonClient.d.ts.map +1 -0
  29. package/lib/typescript/src/utils/{sessionReport.d.ts → deviceReport.d.ts} +4 -4
  30. package/lib/typescript/src/utils/deviceReport.d.ts.map +1 -0
  31. package/node/daemon/src/cli.js +9 -2
  32. package/node/daemon/src/console/console.html +1052 -249
  33. package/node/daemon/src/constants.js +6 -0
  34. package/node/daemon/src/server.js +205 -123
  35. package/node/daemon/src/store.js +122 -45
  36. package/node/mcp/src/daemonClient.js +6 -6
  37. package/node/mcp/src/index.js +2 -2
  38. package/node/mcp/src/logs.js +5 -4
  39. package/node/mcp/src/tools.js +16 -16
  40. package/package.json +2 -2
  41. package/src/core/initialize.ts +8 -0
  42. package/src/index.ts +18 -10
  43. package/src/ui/panel/StreamingSettingsModal.tsx +25 -63
  44. package/src/utils/DaemonClient.ts +887 -0
  45. package/src/utils/{sessionReport.ts → deviceReport.ts} +6 -6
  46. package/lib/commonjs/utils/autoDetectDaemon.js +0 -141
  47. package/lib/commonjs/utils/autoDetectDaemon.js.map +0 -1
  48. package/lib/commonjs/utils/daemonConnection.js +0 -81
  49. package/lib/commonjs/utils/daemonConnection.js.map +0 -1
  50. package/lib/commonjs/utils/daemonSettings.js +0 -110
  51. package/lib/commonjs/utils/daemonSettings.js.map +0 -1
  52. package/lib/commonjs/utils/reportToDaemon.js +0 -112
  53. package/lib/commonjs/utils/reportToDaemon.js.map +0 -1
  54. package/lib/commonjs/utils/sessionReport.js.map +0 -1
  55. package/lib/commonjs/utils/streamToDaemon.js +0 -334
  56. package/lib/commonjs/utils/streamToDaemon.js.map +0 -1
  57. package/lib/module/utils/autoDetectDaemon.js +0 -136
  58. package/lib/module/utils/autoDetectDaemon.js.map +0 -1
  59. package/lib/module/utils/daemonConnection.js +0 -77
  60. package/lib/module/utils/daemonConnection.js.map +0 -1
  61. package/lib/module/utils/daemonSettings.js +0 -102
  62. package/lib/module/utils/daemonSettings.js.map +0 -1
  63. package/lib/module/utils/reportToDaemon.js +0 -105
  64. package/lib/module/utils/reportToDaemon.js.map +0 -1
  65. package/lib/module/utils/sessionReport.js.map +0 -1
  66. package/lib/module/utils/streamToDaemon.js +0 -328
  67. package/lib/module/utils/streamToDaemon.js.map +0 -1
  68. package/lib/typescript/src/utils/autoDetectDaemon.d.ts +0 -15
  69. package/lib/typescript/src/utils/autoDetectDaemon.d.ts.map +0 -1
  70. package/lib/typescript/src/utils/daemonConnection.d.ts +0 -18
  71. package/lib/typescript/src/utils/daemonConnection.d.ts.map +0 -1
  72. package/lib/typescript/src/utils/daemonSettings.d.ts +0 -19
  73. package/lib/typescript/src/utils/daemonSettings.d.ts.map +0 -1
  74. package/lib/typescript/src/utils/reportToDaemon.d.ts +0 -34
  75. package/lib/typescript/src/utils/reportToDaemon.d.ts.map +0 -1
  76. package/lib/typescript/src/utils/sessionReport.d.ts.map +0 -1
  77. package/lib/typescript/src/utils/streamToDaemon.d.ts +0 -23
  78. package/lib/typescript/src/utils/streamToDaemon.d.ts.map +0 -1
  79. package/src/utils/autoDetectDaemon.ts +0 -175
  80. package/src/utils/daemonConnection.ts +0 -133
  81. package/src/utils/daemonSettings.ts +0 -134
  82. package/src/utils/reportToDaemon.ts +0 -172
  83. package/src/utils/streamToDaemon.ts +0 -419
package/README.md CHANGED
@@ -1,51 +1,47 @@
1
1
  # React Native Debug Toolkit
2
2
 
3
- [中文文档](README.zh-CN.md)
3
+ [中文](README.zh-CN.md)
4
4
 
5
- A dev-only floating debug panel for React Native inspect network, console, state, navigation and more, right on your device.
5
+ Dev-only React Native inspector with a local log bridge.
6
6
 
7
- > Zero impact on production builds (`__DEV__` only).
7
+ It shows app logs on device, then can send the same device log stream to a local daemon for browser, curl, scripts, or MCP.
8
8
 
9
- ## Preview
9
+ ## Model
10
10
 
11
- ![demo](demo.gif)
12
- ## Features
11
+ ```text
12
+ RN App logs -> Debug Panel -> local daemon -> Web Console / HTTP / MCP
13
+ ```
13
14
 
14
- - **Network** — Auto-intercepts React Native XHR transport, including fetch and axios in the default adapter, inspect requests & responses, copy as cURL
15
- - **Console** — Capture `console.log / info / warn / error`
16
- - **Zustand** — Log state transitions via middleware
17
- - **Navigation** — Track route changes
18
- - **Track** — Record custom analytics events
19
- - **Environment** — Switch API hosts on the fly
20
- - **Clipboard** — Paste text and copy to computer
21
- - **Log Persistence** — Network, Console, Track logs survive app restarts (requires AsyncStorage)
15
+ Captured logs:
22
16
 
23
- ## Installation
17
+ - Network
18
+ - Console
19
+ - Navigation
20
+ - Track
21
+ - Zustand
24
22
 
25
- ```bash
26
- npm install react-native-debug-toolkit
27
- ```
23
+ The CLI daemon persists device logs to `~/.react-native-debug-toolkit/daemon-devices.json`.
24
+ Use `DELETE /devices` to clear stored logs.
28
25
 
29
- Optional — clipboard copy support:
26
+ ## Install
30
27
 
31
28
  ```bash
32
- npm install @react-native-clipboard/clipboard
29
+ npm install react-native-debug-toolkit
33
30
  ```
34
31
 
35
- Optional — FAB position & last tab persistence:
32
+ Optional:
36
33
 
37
34
  ```bash
35
+ npm install @react-native-clipboard/clipboard
38
36
  npm install @react-native-async-storage/async-storage
39
37
  ```
40
38
 
41
- Without AsyncStorage these features degrade gracefully to in-memory state.
42
-
43
- ## Quick Start
39
+ ## App Usage
44
40
 
45
41
  ```tsx
46
42
  import { DebugView } from 'react-native-debug-toolkit';
47
43
 
48
- function App() {
44
+ export function App() {
49
45
  return (
50
46
  <DebugView>
51
47
  <AppContent />
@@ -54,11 +50,9 @@ function App() {
54
50
  }
55
51
  ```
56
52
 
57
- A floating debug button appears in dev mode. Tap to open the panel, tap × or swipe down to close.
58
-
59
- Network, console, navigation, zustand, track, and clipboard are enabled by default. Network capture hooks React Native's XHR transport, so fetch and axios requests using the default adapter are captured automatically.
53
+ Open app in dev mode. Tap `DBG`.
60
54
 
61
- Disable specific features:
55
+ Disable features:
62
56
 
63
57
  ```tsx
64
58
  <DebugView features={{ clipboard: false, zustand: false }}>
@@ -66,102 +60,126 @@ Disable specific features:
66
60
  </DebugView>
67
61
  ```
68
62
 
69
- ## Common Patterns
70
-
71
- ### Navigation Tracking
63
+ Navigation tracking:
72
64
 
73
65
  ```tsx
74
- import { useRef } from 'react';
75
- import { DebugView } from 'react-native-debug-toolkit';
76
- import { NavigationContainer } from '@react-navigation/native';
77
-
78
- function App() {
79
- const navRef = useRef(null);
80
- return (
81
- <DebugView navigationRef={navRef}>
82
- <NavigationContainer ref={navRef}>
83
- <AppContent />
84
- </NavigationContainer>
85
- </DebugView>
86
- );
87
- }
66
+ <DebugView navigationRef={navigationRef}>
67
+ <NavigationContainer ref={navigationRef}>
68
+ <AppContent />
69
+ </NavigationContainer>
70
+ </DebugView>
88
71
  ```
89
72
 
90
- ### Environment Switching
73
+ Zustand:
91
74
 
92
75
  ```tsx
93
- <DebugView
94
- environments={[
95
- { id: 'dev', label: 'Dev', host: 'dev-api.example.com', color: '#34C759' },
96
- { id: 'prod', label: 'Prod', host: 'api.example.com', color: '#FF3B30' },
97
- ]}
98
- >
99
- <AppContent />
100
- </DebugView>
76
+ import { zustandLogMiddleware } from 'react-native-debug-toolkit';
101
77
  ```
102
78
 
103
- ### Zustand Middleware
79
+ Track:
104
80
 
105
81
  ```tsx
106
- import { zustandLogMiddleware } from 'react-native-debug-toolkit';
82
+ import { addTrackLog } from 'react-native-debug-toolkit';
107
83
 
108
- const useStore = create(
109
- zustandLogMiddleware((set) => ({
110
- count: 0,
111
- increment: () => set((s) => ({ count: s.count + 1 }), false, 'increment'),
112
- // ↑ merge ↑ action name (shown in debug panel)
113
- }))
114
- );
84
+ addTrackLog({ eventName: 'button_click' });
115
85
  ```
116
86
 
117
- ### Custom Events
87
+ ## Desktop Logs
118
88
 
119
- ```tsx
120
- import { addTrackLog } from 'react-native-debug-toolkit';
89
+ Start daemon:
121
90
 
122
- addTrackLog({ eventName: 'button_click', buttonId: 'submit' });
91
+ ```bash
92
+ npx debug-toolkit --daemon-only
123
93
  ```
124
94
 
125
- ### Network Options
95
+ The default device log store is `~/.react-native-debug-toolkit/daemon-devices.json`.
96
+ Override it with `--store /path/to/devices.json` or `DEBUG_TOOLKIT_DAEMON_STORE`.
126
97
 
127
- React Native fetch and axios traffic is captured automatically through the XHR transport layer.
98
+ Open:
128
99
 
129
- ```tsx
130
- <DebugView
131
- features={{
132
- network: {
133
- maxLogs: 100,
134
- blacklist: ['/analytics', /\/healthcheck$/],
135
- },
136
- }}
137
- >
138
- <AppContent />
139
- </DebugView>
100
+ ```text
101
+ http://127.0.0.1:3799/console
140
102
  ```
141
103
 
142
- ## Imperative API
104
+ In app: Debug Panel -> gear -> `Send Once` or `Start Live Sync`.
143
105
 
144
- For programmatic control outside React (notifications, deep links, dev-only buttons):
106
+ Endpoints:
145
107
 
146
- ```tsx
147
- import { DebugToolkit } from 'react-native-debug-toolkit';
108
+ | Runtime | Endpoint |
109
+ | --- | --- |
110
+ | iOS simulator | `http://localhost:3799` |
111
+ | Android emulator | `http://10.0.2.2:3799` |
112
+ | Real device | `http://<mac-ip>:3799` |
113
+
114
+ Real device rule: phone browser must open `http://<mac-ip>:3799/health`. If not, check firewall, Wi-Fi isolation, VPN, and cleartext HTTP.
115
+
116
+ ## HTTP
117
+
118
+ ```bash
119
+ BASE=http://127.0.0.1:3799
120
+
121
+ curl "$BASE/health"
122
+ curl "$BASE/devices"
123
+ curl "$BASE/devices/latest"
148
124
 
149
- DebugToolkit.openPanel();
150
- DebugToolkit.clearAll();
151
- DebugToolkit.showLauncher();
152
- DebugToolkit.hideLauncher();
125
+ DEVICE_ID=$(curl -s "$BASE/devices" | node -e "let s='';process.stdin.on('data',d=>s+=d).on('end',()=>console.log((JSON.parse(s).devices||[])[0]?.deviceId||''))")
126
+
127
+ curl "$BASE/devices/$DEVICE_ID"
128
+ curl "$BASE/devices/$DEVICE_ID/logs?limit=100"
129
+ curl "$BASE/devices/$DEVICE_ID/logs?type=network&failedOnly=true&limit=50"
130
+ curl "$BASE/devices/$DEVICE_ID/logs?type=console&limit=100"
131
+ curl -X DELETE "$BASE/devices"
132
+ ```
133
+
134
+ Main endpoints:
135
+
136
+ ```text
137
+ GET /health
138
+ POST /report
139
+ POST /ingest
140
+ GET /devices
141
+ GET /devices/latest
142
+ GET /devices/:deviceId
143
+ GET /devices/:deviceId/logs
144
+ DELETE /devices
145
+ GET /events
146
+ GET /console
153
147
  ```
154
148
 
155
- Full API: `DebugToolkit` is a singleton with `openPanel`, `closePanel`, `togglePanel`, `clearAll`, `showLauncher`, `hideLauncher`, `addFeature`, `removeFeature`, `destroy`, `features`, `panelOpen`. See TypeScript types for details.
149
+ ## MCP
150
+
151
+ ```bash
152
+ claude mcp add debug-toolkit -- npx debug-toolkit
153
+ ```
154
+
155
+ Tools:
156
+
157
+ - `list_app_devices`
158
+ - `get_app_logs`
159
+
160
+ Use curl when shell is available.
161
+
162
+ ## Exports
163
+
164
+ - `DebugView`
165
+ - `DebugToolkit`
166
+ - `initializeDebugToolkit`
167
+ - `createDebugDeviceReport`
168
+ - `checkDaemonConnection`
169
+ - `reportDebugDeviceToDaemon`
170
+ - `startStreaming`
171
+ - `stopStreaming`
172
+ - `isStreaming`
173
+ - `autoDetectDaemonIp`
174
+ - feature factories and types
156
175
 
157
- ## Peer Dependencies
176
+ ## Boundaries
158
177
 
159
- | Package | Version | Required |
160
- |---------|---------|----------|
161
- | react | >= 18.0.0 | Yes |
162
- | react-native | >= 0.72.0 | Yes |
163
- | @react-native-clipboard/clipboard | >= 1.0.0 | No |
164
- | @react-native-async-storage/async-storage | >= 1.0.0 | No |
178
+ - Dev tool, not production monitoring.
179
+ - Local daemon, not cloud replay.
180
+ - Network logs are observed traffic, not auth/token analysis.
181
+ - No default redaction.
182
+ - Not a React Native DevTools replacement.
165
183
 
166
184
  ## License
167
185
 
package/README.zh-CN.md CHANGED
@@ -2,23 +2,26 @@
2
2
 
3
3
  [English](README.md)
4
4
 
5
- 一个仅用于开发的 React Native 浮动调试面板 在设备上直接查看网络请求、控制台日志、状态变化、导航事件等。
5
+ React Native 开发期调试面板 + 本地日志桥。
6
6
 
7
- > 生产环境零影响(仅在 `__DEV__` 模式下运行)。
7
+ 它能在 App 内看日志,也能把同一台设备的日志流发到本机 daemon,供浏览器、curl、脚本、MCP 读取。
8
8
 
9
- ## 预览
9
+ ## 模型
10
10
 
11
- ![demo](demo.gif)
12
- ## 功能
11
+ ```text
12
+ RN App logs -> Debug Panel -> local daemon -> Web Console / HTTP / MCP
13
+ ```
14
+
15
+ 采集:
16
+
17
+ - Network
18
+ - Console
19
+ - Navigation
20
+ - Track
21
+ - Zustand
13
22
 
14
- - **Network** 自动拦截 React Native XHR 传输层,默认覆盖 fetch 和使用默认 adapter 的 axios,可查看请求与响应并复制为 cURL
15
- - **Console** — 捕获 `console.log / info / warn / error`
16
- - **Zustand** — 通过中间件记录状态变化
17
- - **Navigation** — 追踪路由切换
18
- - **Track** — 记录自定义埋点事件
19
- - **Environment** — 运行时切换 API 环境
20
- - **Clipboard** — 粘贴文本并复制到电脑
21
- - **日志持久化** — Network、Console、Track 日志在应用重启后保留(需要 AsyncStorage)
23
+ CLI daemon 默认把设备日志持久化到 `~/.react-native-debug-toolkit/daemon-devices.json`。
24
+ `DELETE /devices` 清空已存日志。
22
25
 
23
26
  ## 安装
24
27
 
@@ -26,26 +29,19 @@
26
29
  npm install react-native-debug-toolkit
27
30
  ```
28
31
 
29
- 可选 — 剪贴板复制支持:
32
+ 可选:
30
33
 
31
34
  ```bash
32
35
  npm install @react-native-clipboard/clipboard
33
- ```
34
-
35
- 可选 — FAB 位置与上次 Tab 持久化:
36
-
37
- ```bash
38
36
  npm install @react-native-async-storage/async-storage
39
37
  ```
40
38
 
41
- 未安装 AsyncStorage 时,这些功能会优雅降级为内存态。
42
-
43
- ## 快速开始
39
+ ## App 接入
44
40
 
45
41
  ```tsx
46
42
  import { DebugView } from 'react-native-debug-toolkit';
47
43
 
48
- function App() {
44
+ export function App() {
49
45
  return (
50
46
  <DebugView>
51
47
  <AppContent />
@@ -54,11 +50,9 @@ function App() {
54
50
  }
55
51
  ```
56
52
 
57
- 开发模式下出现浮动调试按钮。点击打开面板,点击 × 或下滑关闭。
58
-
59
- 网络、控制台、导航、Zustand、埋点和剪贴板默认启用。Network 会拦截 React Native 的 XHR 传输层,因此使用默认 adapter 的 fetch 和 axios 请求会自动被捕获。
53
+ 开发模式打开 App。点击 `DBG`。
60
54
 
61
- 禁用特定功能:
55
+ 禁用功能:
62
56
 
63
57
  ```tsx
64
58
  <DebugView features={{ clipboard: false, zustand: false }}>
@@ -66,102 +60,126 @@ function App() {
66
60
  </DebugView>
67
61
  ```
68
62
 
69
- ## 常用模式
70
-
71
- ### 导航追踪
63
+ 导航追踪:
72
64
 
73
65
  ```tsx
74
- import { useRef } from 'react';
75
- import { DebugView } from 'react-native-debug-toolkit';
76
- import { NavigationContainer } from '@react-navigation/native';
77
-
78
- function App() {
79
- const navRef = useRef(null);
80
- return (
81
- <DebugView navigationRef={navRef}>
82
- <NavigationContainer ref={navRef}>
83
- <AppContent />
84
- </NavigationContainer>
85
- </DebugView>
86
- );
87
- }
66
+ <DebugView navigationRef={navigationRef}>
67
+ <NavigationContainer ref={navigationRef}>
68
+ <AppContent />
69
+ </NavigationContainer>
70
+ </DebugView>
88
71
  ```
89
72
 
90
- ### 环境切换
73
+ Zustand:
91
74
 
92
75
  ```tsx
93
- <DebugView
94
- environments={[
95
- { id: 'dev', label: 'Dev', host: 'dev-api.example.com', color: '#34C759' },
96
- { id: 'prod', label: 'Prod', host: 'api.example.com', color: '#FF3B30' },
97
- ]}
98
- >
99
- <AppContent />
100
- </DebugView>
76
+ import { zustandLogMiddleware } from 'react-native-debug-toolkit';
101
77
  ```
102
78
 
103
- ### Zustand 中间件
79
+ Track:
104
80
 
105
81
  ```tsx
106
- import { zustandLogMiddleware } from 'react-native-debug-toolkit';
82
+ import { addTrackLog } from 'react-native-debug-toolkit';
107
83
 
108
- const useStore = create(
109
- zustandLogMiddleware((set) => ({
110
- count: 0,
111
- increment: () => set((s) => ({ count: s.count + 1 }), false, 'increment'),
112
- // ↑ merge ↑ action 名称(显示在调试面板)
113
- }))
114
- );
84
+ addTrackLog({ eventName: 'button_click' });
115
85
  ```
116
86
 
117
- ### 自定义事件
87
+ ## Desktop Logs
118
88
 
119
- ```tsx
120
- import { addTrackLog } from 'react-native-debug-toolkit';
89
+ 启动 daemon:
121
90
 
122
- addTrackLog({ eventName: 'button_click', buttonId: 'submit' });
91
+ ```bash
92
+ npx debug-toolkit --daemon-only
123
93
  ```
124
94
 
125
- ### 网络配置
95
+ 默认设备日志存储文件:`~/.react-native-debug-toolkit/daemon-devices.json`。
96
+ 可用 `--store /path/to/devices.json` 或 `DEBUG_TOOLKIT_DAEMON_STORE` 覆盖。
126
97
 
127
- React Native fetch 和 axios 流量会通过 XHR 传输层自动捕获。
98
+ 打开:
128
99
 
129
- ```tsx
130
- <DebugView
131
- features={{
132
- network: {
133
- maxLogs: 100,
134
- blacklist: ['/analytics', /\/healthcheck$/],
135
- },
136
- }}
137
- >
138
- <AppContent />
139
- </DebugView>
100
+ ```text
101
+ http://127.0.0.1:3799/console
140
102
  ```
141
103
 
142
- ## 命令式 API
104
+ App 内:Debug Panel -> 齿轮 -> `Send Once` 或 `Start Live Sync`。
143
105
 
144
- 用于 React 外部的编程控制(通知、深度链接、开发专用按钮):
106
+ Endpoint:
145
107
 
146
- ```tsx
147
- import { DebugToolkit } from 'react-native-debug-toolkit';
108
+ | 运行时 | Endpoint |
109
+ | --- | --- |
110
+ | iOS simulator | `http://localhost:3799` |
111
+ | Android emulator | `http://10.0.2.2:3799` |
112
+ | 真机 | `http://<mac-ip>:3799` |
113
+
114
+ 真机规则:手机浏览器必须能打开 `http://<mac-ip>:3799/health`。打不开就查防火墙、Wi-Fi 隔离、VPN、明文 HTTP。
115
+
116
+ ## HTTP
117
+
118
+ ```bash
119
+ BASE=http://127.0.0.1:3799
120
+
121
+ curl "$BASE/health"
122
+ curl "$BASE/devices"
123
+ curl "$BASE/devices/latest"
148
124
 
149
- DebugToolkit.openPanel();
150
- DebugToolkit.clearAll();
151
- DebugToolkit.showLauncher();
152
- DebugToolkit.hideLauncher();
125
+ DEVICE_ID=$(curl -s "$BASE/devices" | node -e "let s='';process.stdin.on('data',d=>s+=d).on('end',()=>console.log((JSON.parse(s).devices||[])[0]?.deviceId||''))")
126
+
127
+ curl "$BASE/devices/$DEVICE_ID"
128
+ curl "$BASE/devices/$DEVICE_ID/logs?limit=100"
129
+ curl "$BASE/devices/$DEVICE_ID/logs?type=network&failedOnly=true&limit=50"
130
+ curl "$BASE/devices/$DEVICE_ID/logs?type=console&limit=100"
131
+ curl -X DELETE "$BASE/devices"
132
+ ```
133
+
134
+ 主要端点:
135
+
136
+ ```text
137
+ GET /health
138
+ POST /report
139
+ POST /ingest
140
+ GET /devices
141
+ GET /devices/latest
142
+ GET /devices/:deviceId
143
+ GET /devices/:deviceId/logs
144
+ DELETE /devices
145
+ GET /events
146
+ GET /console
153
147
  ```
154
148
 
155
- 完整 API:`DebugToolkit` 是单例,提供 `openPanel`、`closePanel`、`togglePanel`、`clearAll`、`showLauncher`、`hideLauncher`、`addFeature`、`removeFeature`、`destroy`、`features`、`panelOpen`。详见 TypeScript 类型定义。
149
+ ## MCP
150
+
151
+ ```bash
152
+ claude mcp add debug-toolkit -- npx debug-toolkit
153
+ ```
154
+
155
+ 工具:
156
+
157
+ - `list_app_devices`
158
+ - `get_app_logs`
159
+
160
+ 有 shell 时优先 curl。
161
+
162
+ ## 导出
163
+
164
+ - `DebugView`
165
+ - `DebugToolkit`
166
+ - `initializeDebugToolkit`
167
+ - `createDebugDeviceReport`
168
+ - `checkDaemonConnection`
169
+ - `reportDebugDeviceToDaemon`
170
+ - `startStreaming`
171
+ - `stopStreaming`
172
+ - `isStreaming`
173
+ - `autoDetectDaemonIp`
174
+ - feature factories and types
156
175
 
157
- ## 对等依赖
176
+ ## 边界
158
177
 
159
- | 包 | 版本 | 必需 |
160
- |----|------|------|
161
- | react | >= 18.0.0 | 是 |
162
- | react-native | >= 0.72.0 | 是 |
163
- | @react-native-clipboard/clipboard | >= 1.0.0 | 否 |
164
- | @react-native-async-storage/async-storage | >= 1.0.0 | 否 |
178
+ - 开发工具,不是生产监控。
179
+ - 本地 daemon,不是云 replay。
180
+ - Network 日志只是监测流量,不做 auth/token 分析。
181
+ - 不默认脱敏。
182
+ - 不替代 React Native DevTools。
165
183
 
166
184
  ## 许可证
167
185
 
@@ -12,7 +12,11 @@ var _navigation = require("../features/navigation");
12
12
  var _track = require("../features/track");
13
13
  var _environment = require("../features/environment");
14
14
  var _clipboard = require("../features/clipboard");
15
+ var _DaemonClient = require("../utils/DaemonClient");
15
16
  const isDebugMode = __DEV__;
17
+ _DaemonClient.daemonClient.setEndpointDetector(url => {
18
+ (0, _network._addDaemonEndpointToNetworkBlacklist)(url);
19
+ });
16
20
 
17
21
  /** Feature-specific configuration map */
18
22
 
@@ -75,6 +79,7 @@ function initializeDebugToolkit(options) {
75
79
  } else {
76
80
  _DebugToolkit.DebugToolkit.hideLauncher();
77
81
  }
82
+ (0, _DaemonClient.restoreDaemonStreaming)().catch(() => {});
78
83
  return _DebugToolkit.DebugToolkit;
79
84
  } catch (error) {
80
85
  console.error('[DebugToolkit] Initialization failed:', error);
@@ -1 +1 @@
1
- {"version":3,"names":["_DebugToolkit","require","_network","_console","_zustand","_navigation","_track","_environment","_clipboard","isDebugMode","__DEV__","featureRegistry","network","createNetworkFeature","console","createConsoleLogFeature","zustand","createZustandLogFeature","navigation","createNavigationLogFeature","track","createTrackFeature","environment","createEnvironmentFeature","clipboard","createClipboardFeature","DEFAULT_FEATURES","resolveFeatureConfigs","configs","features","entries","Object","name","config","creator","warn","undefined","push","resolveDefaultFeatures","map","initializeDebugToolkit","options","enabled","resolvedFeatures","DebugToolkit","setEnabled","reset","replaceFeatures","hasFeatures","showLauncher","hideLauncher","error"],"sourceRoot":"../../../src","sources":["core/initialize.ts"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAEA,IAAAE,QAAA,GAAAF,OAAA;AAEA,IAAAG,QAAA,GAAAH,OAAA;AAEA,IAAAI,WAAA,GAAAJ,OAAA;AAEA,IAAAK,MAAA,GAAAL,OAAA;AAEA,IAAAM,YAAA,GAAAN,OAAA;AACA,IAAAO,UAAA,GAAAP,OAAA;AAGA,MAAMQ,WAAW,GAAGC,OAAO;;AAE3B;;AAgBA;AACA;AACA;AACA,MAAMC,eAA8E,GAAG;EACrFC,OAAO,EAAEC,6BAAoB;EAC7BC,OAAO,EAAEC,gCAAuB;EAChCC,OAAO,EAAEC,gCAAuB;EAChCC,UAAU,EAAEC,sCAA0B;EACtCC,KAAK,EAAEC,yBAAkB;EACzBC,WAAW,EAAEC,qCAAwB;EACrCC,SAAS,EAAEC;AACb,CAAC;AAED,MAAMC,gBAAsC,GAAG,CAC7C,SAAS,EACT,SAAS,EACT,YAAY,EACZ,SAAS,EACT,OAAO,EACP,WAAW,CACZ;AAED,SAASC,qBAAqBA,CAACC,OAAuB,EAAqB;EACzE,MAAMC,QAA2B,GAAG,EAAE;EACtC,MAAMC,OAAO,GAAGC,MAAM,CAACD,OAAO,CAACF,OAAO,CAAoC;EAE1E,KAAK,MAAM,CAACI,IAAI,EAAEC,MAAM,CAAC,IAAIH,OAAO,EAAE;IACpC,IAAIG,MAAM,KAAK,KAAK,EAAE;IAEtB,MAAMC,OAAO,GAAGvB,eAAe,CAACqB,IAAI,CAAC;IACrC,IAAI,CAACE,OAAO,EAAE;MACZpB,OAAO,CAACqB,IAAI,CAAC,oCAAoCH,IAAI,GAAG,CAAC;MACzD;IACF;IAEA,IAAIC,MAAM,KAAK,IAAI,IAAIA,MAAM,KAAKG,SAAS,EAAE;MAC3CP,QAAQ,CAACQ,IAAI,CAACH,OAAO,CAAC,CAAC,CAAC;IAC1B,CAAC,MAAM,IAAI,OAAOD,MAAM,KAAK,QAAQ,EAAE;MACrCJ,QAAQ,CAACQ,IAAI,CAACH,OAAO,CAACD,MAAiC,CAAC,CAAC;IAC3D;EACF;EAEA,OAAOJ,QAAQ;AACjB;AAEA,SAASS,sBAAsBA,CAAA,EAAsB;EACnD,OAAOZ,gBAAgB,CAACa,GAAG,CAAEP,IAAI,IAAKrB,eAAe,CAACqB,IAAI,CAAC,CAAE,CAAC,CAAC;AACjE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASQ,sBAAsBA,CACpCC,OAA2B,EACN;EACrB,MAAMC,OAAO,GAAGD,OAAO,EAAEC,OAAO,IAAIjC,WAAW;EAE/C,MAAMkC,gBAAgB,GAAGF,OAAO,EAAEZ,QAAQ,GACtCF,qBAAqB,CAACc,OAAO,CAACZ,QAAQ,CAAC,GACvCS,sBAAsB,CAAC,CAAC;EAE5B,IAAI;IACFM,0BAAY,CAACC,UAAU,CAACH,OAAO,CAAC;IAEhC,IAAI,CAACA,OAAO,EAAE;MACZE,0BAAY,CAACE,KAAK,CAAC,CAAC;MACpB,OAAOF,0BAAY;IACrB;IAEAA,0BAAY,CAACG,eAAe,CAACJ,gBAAgB,CAAC;IAE9C,IAAIC,0BAAY,CAACI,WAAW,CAAC,CAAC,EAAE;MAC9BJ,0BAAY,CAACK,YAAY,CAAC,CAAC;IAC7B,CAAC,MAAM;MACLL,0BAAY,CAACM,YAAY,CAAC,CAAC;IAC7B;IAEA,OAAON,0BAAY;EACrB,CAAC,CAAC,OAAOO,KAAK,EAAE;IACdrC,OAAO,CAACqC,KAAK,CAAC,uCAAuC,EAAEA,KAAK,CAAC;IAC7D,OAAOP,0BAAY;EACrB;AACF","ignoreList":[]}
1
+ {"version":3,"names":["_DebugToolkit","require","_network","_console","_zustand","_navigation","_track","_environment","_clipboard","_DaemonClient","isDebugMode","__DEV__","daemonClient","setEndpointDetector","url","_addDaemonEndpointToNetworkBlacklist","featureRegistry","network","createNetworkFeature","console","createConsoleLogFeature","zustand","createZustandLogFeature","navigation","createNavigationLogFeature","track","createTrackFeature","environment","createEnvironmentFeature","clipboard","createClipboardFeature","DEFAULT_FEATURES","resolveFeatureConfigs","configs","features","entries","Object","name","config","creator","warn","undefined","push","resolveDefaultFeatures","map","initializeDebugToolkit","options","enabled","resolvedFeatures","DebugToolkit","setEnabled","reset","replaceFeatures","hasFeatures","showLauncher","hideLauncher","restoreDaemonStreaming","catch","error"],"sourceRoot":"../../../src","sources":["core/initialize.ts"],"mappings":"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","ignoreList":[]}