@mseep/anything-analyzer 3.6.50

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 (172) hide show
  1. package/.codeartsdoer/.codebaseignore +0 -0
  2. package/.codeartsdoer/AGENTS.md +12 -0
  3. package/.github/workflows/build.yml +146 -0
  4. package/README.en.md +264 -0
  5. package/README.md +276 -0
  6. package/RELEASE_NOTES.md +16 -0
  7. package/USAGE.md +490 -0
  8. package/color-preview-r3.html +414 -0
  9. package/color-preview.html +414 -0
  10. package/dev-app-update.yml +3 -0
  11. package/electron-builder.yml +36 -0
  12. package/electron.vite.config.ts +40 -0
  13. package/package.json +53 -0
  14. package/report-2026-04-13-copilot-claude-sonnet-4.6.md +955 -0
  15. package/resources/doloffer-logo.png +0 -0
  16. package/resources/entitlements.mac.plist +12 -0
  17. package/resources/icon.ico +0 -0
  18. package/resources/icon.png +0 -0
  19. package/src/main/ai/ai-analyzer.ts +517 -0
  20. package/src/main/ai/crypto-script-extractor.ts +206 -0
  21. package/src/main/ai/data-assembler.ts +205 -0
  22. package/src/main/ai/llm-router.ts +1120 -0
  23. package/src/main/ai/prompt-builder.ts +349 -0
  24. package/src/main/ai/scene-detector.ts +302 -0
  25. package/src/main/capture/capture-engine.ts +130 -0
  26. package/src/main/capture/interaction-recorder.ts +171 -0
  27. package/src/main/capture/js-injector.ts +57 -0
  28. package/src/main/capture/replay-engine.ts +256 -0
  29. package/src/main/capture/storage-collector.ts +76 -0
  30. package/src/main/cdp/cdp-manager.ts +233 -0
  31. package/src/main/db/database.ts +41 -0
  32. package/src/main/db/migrations.ts +235 -0
  33. package/src/main/db/repositories.ts +574 -0
  34. package/src/main/fingerprint/http-spoofing.ts +48 -0
  35. package/src/main/fingerprint/presets.ts +173 -0
  36. package/src/main/fingerprint/profile-generator.ts +115 -0
  37. package/src/main/fingerprint/profile-store.ts +52 -0
  38. package/src/main/index.ts +260 -0
  39. package/src/main/ipc.ts +856 -0
  40. package/src/main/logger.ts +42 -0
  41. package/src/main/mcp/mcp-config.ts +66 -0
  42. package/src/main/mcp/mcp-manager.ts +155 -0
  43. package/src/main/mcp/mcp-server.ts +1038 -0
  44. package/src/main/prompt-templates.ts +170 -0
  45. package/src/main/proxy/ca-manager.ts +204 -0
  46. package/src/main/proxy/cert-download-page.ts +171 -0
  47. package/src/main/proxy/cert-installer.ts +242 -0
  48. package/src/main/proxy/mitm-proxy-config.ts +37 -0
  49. package/src/main/proxy/mitm-proxy-server.ts +1085 -0
  50. package/src/main/proxy/system-proxy.ts +248 -0
  51. package/src/main/session/session-manager.ts +724 -0
  52. package/src/main/tab-manager.ts +582 -0
  53. package/src/main/updater.ts +111 -0
  54. package/src/main/window.ts +235 -0
  55. package/src/preload/hook-script.ts +270 -0
  56. package/src/preload/index.ts +211 -0
  57. package/src/preload/interaction-hook.ts +286 -0
  58. package/src/preload/stealth-script.ts +302 -0
  59. package/src/preload/target-preload.ts +15 -0
  60. package/src/renderer/App.tsx +656 -0
  61. package/src/renderer/components/AiLogDetail.tsx +173 -0
  62. package/src/renderer/components/AiLogList.tsx +101 -0
  63. package/src/renderer/components/AiLogView.module.css +364 -0
  64. package/src/renderer/components/AiLogView.tsx +86 -0
  65. package/src/renderer/components/AnalyzeBar.module.css +79 -0
  66. package/src/renderer/components/AnalyzeBar.tsx +104 -0
  67. package/src/renderer/components/BrowserPanel.module.css +67 -0
  68. package/src/renderer/components/BrowserPanel.tsx +90 -0
  69. package/src/renderer/components/ControlBar.module.css +47 -0
  70. package/src/renderer/components/ControlBar.tsx +205 -0
  71. package/src/renderer/components/HookLog.tsx +132 -0
  72. package/src/renderer/components/InteractionLog.tsx +183 -0
  73. package/src/renderer/components/MCPServerModal.tsx +427 -0
  74. package/src/renderer/components/PromptTemplateModal.tsx +254 -0
  75. package/src/renderer/components/ReportView.module.css +413 -0
  76. package/src/renderer/components/ReportView.tsx +429 -0
  77. package/src/renderer/components/RequestDetail.module.css +191 -0
  78. package/src/renderer/components/RequestDetail.tsx +202 -0
  79. package/src/renderer/components/RequestLog.module.css +69 -0
  80. package/src/renderer/components/RequestLog.tsx +208 -0
  81. package/src/renderer/components/SessionList.module.css +245 -0
  82. package/src/renderer/components/SessionList.tsx +247 -0
  83. package/src/renderer/components/SettingsModal.tsx +100 -0
  84. package/src/renderer/components/StatusBar.module.css +44 -0
  85. package/src/renderer/components/StatusBar.tsx +102 -0
  86. package/src/renderer/components/StorageView.module.css +41 -0
  87. package/src/renderer/components/StorageView.tsx +178 -0
  88. package/src/renderer/components/TabBar.module.css +88 -0
  89. package/src/renderer/components/TabBar.tsx +70 -0
  90. package/src/renderer/components/Titlebar.module.css +254 -0
  91. package/src/renderer/components/Titlebar.tsx +169 -0
  92. package/src/renderer/components/settings/FingerprintSection.tsx +198 -0
  93. package/src/renderer/components/settings/GeneralSection.tsx +164 -0
  94. package/src/renderer/components/settings/LLMSection.tsx +148 -0
  95. package/src/renderer/components/settings/MCPServerSection.tsx +136 -0
  96. package/src/renderer/components/settings/MitmProxySection.tsx +320 -0
  97. package/src/renderer/components/settings/ProxySection.tsx +110 -0
  98. package/src/renderer/css-modules.d.ts +4 -0
  99. package/src/renderer/hooks/useCapture.ts +383 -0
  100. package/src/renderer/hooks/useConfirm.tsx +91 -0
  101. package/src/renderer/hooks/useSession.ts +136 -0
  102. package/src/renderer/hooks/useTabs.ts +103 -0
  103. package/src/renderer/i18n/en.ts +167 -0
  104. package/src/renderer/i18n/index.ts +47 -0
  105. package/src/renderer/i18n/zh.ts +170 -0
  106. package/src/renderer/index.html +12 -0
  107. package/src/renderer/main.tsx +15 -0
  108. package/src/renderer/styles/global.css +144 -0
  109. package/src/renderer/styles/themes/ayu-dark.css +59 -0
  110. package/src/renderer/styles/themes/catppuccin.css +59 -0
  111. package/src/renderer/styles/themes/discord.css +59 -0
  112. package/src/renderer/styles/themes/dracula.css +59 -0
  113. package/src/renderer/styles/themes/github-dark.css +59 -0
  114. package/src/renderer/styles/themes/gruvbox.css +59 -0
  115. package/src/renderer/styles/themes/index.css +11 -0
  116. package/src/renderer/styles/themes/light.css +59 -0
  117. package/src/renderer/styles/themes/nord.css +59 -0
  118. package/src/renderer/styles/themes/one-dark.css +59 -0
  119. package/src/renderer/styles/themes/tokyo-night.css +59 -0
  120. package/src/renderer/styles/tokens.css +137 -0
  121. package/src/renderer/theme.ts +31 -0
  122. package/src/renderer/ui/Badge.module.css +38 -0
  123. package/src/renderer/ui/Badge.tsx +36 -0
  124. package/src/renderer/ui/Button.module.css +142 -0
  125. package/src/renderer/ui/Button.tsx +46 -0
  126. package/src/renderer/ui/Collapse.module.css +49 -0
  127. package/src/renderer/ui/Collapse.tsx +57 -0
  128. package/src/renderer/ui/CopyableBlock.module.css +56 -0
  129. package/src/renderer/ui/CopyableBlock.tsx +42 -0
  130. package/src/renderer/ui/Empty.module.css +19 -0
  131. package/src/renderer/ui/Empty.tsx +34 -0
  132. package/src/renderer/ui/Icons.tsx +346 -0
  133. package/src/renderer/ui/Input.module.css +103 -0
  134. package/src/renderer/ui/Input.tsx +94 -0
  135. package/src/renderer/ui/InputNumber.module.css +68 -0
  136. package/src/renderer/ui/InputNumber.tsx +104 -0
  137. package/src/renderer/ui/Modal.module.css +83 -0
  138. package/src/renderer/ui/Modal.tsx +67 -0
  139. package/src/renderer/ui/Popconfirm.module.css +73 -0
  140. package/src/renderer/ui/Popconfirm.tsx +74 -0
  141. package/src/renderer/ui/Progress.module.css +35 -0
  142. package/src/renderer/ui/Progress.tsx +30 -0
  143. package/src/renderer/ui/Select.module.css +91 -0
  144. package/src/renderer/ui/Select.tsx +100 -0
  145. package/src/renderer/ui/Spinner.module.css +44 -0
  146. package/src/renderer/ui/Spinner.tsx +27 -0
  147. package/src/renderer/ui/Switch.module.css +39 -0
  148. package/src/renderer/ui/Switch.tsx +43 -0
  149. package/src/renderer/ui/Tabs.module.css +76 -0
  150. package/src/renderer/ui/Tabs.tsx +53 -0
  151. package/src/renderer/ui/Tag.module.css +66 -0
  152. package/src/renderer/ui/Tag.tsx +47 -0
  153. package/src/renderer/ui/Timeline.module.css +42 -0
  154. package/src/renderer/ui/Timeline.tsx +29 -0
  155. package/src/renderer/ui/Toast.module.css +99 -0
  156. package/src/renderer/ui/Toast.tsx +90 -0
  157. package/src/renderer/ui/Tooltip.module.css +26 -0
  158. package/src/renderer/ui/Tooltip.tsx +23 -0
  159. package/src/renderer/ui/VirtualTable.module.css +230 -0
  160. package/src/renderer/ui/VirtualTable.tsx +416 -0
  161. package/src/renderer/ui/index.ts +55 -0
  162. package/src/shared/types.ts +695 -0
  163. package/tests/main/ai/crypto-script-extractor.test.ts +281 -0
  164. package/tests/main/ai/llm-router.test.ts +1537 -0
  165. package/tests/main/ai/prompt-builder.test.ts +178 -0
  166. package/tests/main/ai/scene-detector.test.ts +212 -0
  167. package/tests/main/db/migrations.test.ts +134 -0
  168. package/tests/main/release-workflow.test.ts +59 -0
  169. package/tsconfig.json +7 -0
  170. package/tsconfig.node.json +23 -0
  171. package/tsconfig.web.json +24 -0
  172. package/vitest.config.ts +13 -0
@@ -0,0 +1,413 @@
1
+ .reportContainer {
2
+ display: flex;
3
+ height: 100%;
4
+ overflow: hidden;
5
+ }
6
+
7
+ /* Left: main report area */
8
+ .reportMain {
9
+ flex: 1;
10
+ display: flex;
11
+ flex-direction: column;
12
+ min-width: 0;
13
+ }
14
+
15
+ /* Toolbar */
16
+ .reportToolbar {
17
+ height: 38px;
18
+ background: var(--color-bar);
19
+ border-bottom: 1px solid var(--color-border);
20
+ display: flex;
21
+ align-items: center;
22
+ padding: 0 16px;
23
+ gap: 10px;
24
+ flex-shrink: 0;
25
+ }
26
+
27
+ .toolLabel {
28
+ font-size: var(--font-size-3xs);
29
+ color: var(--text-label);
30
+ letter-spacing: 1px;
31
+ text-transform: uppercase;
32
+ }
33
+
34
+ .toolBtn {
35
+ padding: 4px 10px;
36
+ border-radius: 5px;
37
+ font-size: var(--font-size-3xs);
38
+ color: var(--text-secondary);
39
+ background: var(--color-surface);
40
+ border: 1px solid var(--color-border-subtle);
41
+ cursor: pointer;
42
+ font-family: var(--font-sans);
43
+ transition: border-color var(--transition-fast), color var(--transition-fast);
44
+ }
45
+
46
+ .toolBtn:hover {
47
+ border-color: var(--color-border-hover);
48
+ color: var(--text-primary);
49
+ }
50
+
51
+ .toolBtnPrimary {
52
+ composes: toolBtn;
53
+ background: var(--color-accent-bg);
54
+ color: var(--color-accent);
55
+ border-color: var(--color-accent-border);
56
+ }
57
+
58
+ .toolSpacer {
59
+ flex: 1;
60
+ }
61
+
62
+ /* Report content scrollable area */
63
+ .reportBody {
64
+ flex: 1;
65
+ overflow: auto;
66
+ min-height: 0;
67
+ padding: 24px 32px;
68
+ }
69
+
70
+ .reportScroll {
71
+ max-width: var(--report-max-width);
72
+ margin: 0 auto;
73
+ }
74
+
75
+ /* Report header */
76
+ .reportHeader {
77
+ display: flex;
78
+ justify-content: space-between;
79
+ align-items: center;
80
+ margin-bottom: var(--space-md);
81
+ }
82
+
83
+ .reportTitle {
84
+ margin: 0;
85
+ font-size: var(--font-size-lg);
86
+ font-weight: 600;
87
+ color: var(--text-primary);
88
+ display: flex;
89
+ align-items: center;
90
+ }
91
+
92
+ /* Metadata */
93
+ .metaRow {
94
+ font-size: var(--font-size-3xs);
95
+ color: var(--text-muted);
96
+ margin-bottom: 20px;
97
+ display: flex;
98
+ gap: 16px;
99
+ }
100
+
101
+ /* Metadata grid */
102
+ .metaGrid {
103
+ display: grid;
104
+ grid-template-columns: auto 1fr auto 1fr;
105
+ gap: 6px 16px;
106
+ margin-bottom: var(--space-lg);
107
+ padding: var(--space-md);
108
+ background: var(--color-surface);
109
+ border-radius: var(--radius-button);
110
+ border: 1px solid var(--color-border-subtle);
111
+ font-size: var(--font-size-xs);
112
+ }
113
+
114
+ .metaLabel {
115
+ color: var(--text-muted);
116
+ font-weight: 500;
117
+ }
118
+
119
+ .metaValue {
120
+ color: var(--text-secondary);
121
+ font-family: var(--font-mono);
122
+ }
123
+
124
+ /* Streaming display */
125
+ .streamingContainer {
126
+ padding: var(--space-lg);
127
+ overflow: auto;
128
+ background: var(--color-surface);
129
+ border-radius: var(--radius-input);
130
+ border: 1px solid var(--color-border-subtle);
131
+ min-height: 120px;
132
+ }
133
+
134
+ .cursor {
135
+ display: inline-block;
136
+ width: 8px;
137
+ height: 16px;
138
+ background: var(--color-info);
139
+ animation: blink 1s step-end infinite;
140
+ vertical-align: text-bottom;
141
+ margin-left: 2px;
142
+ }
143
+
144
+ @keyframes blink {
145
+ 50% { opacity: 0; }
146
+ }
147
+
148
+ /* Analyzing state */
149
+ .analyzingHeader {
150
+ display: flex;
151
+ align-items: center;
152
+ margin-bottom: var(--space-lg);
153
+ gap: var(--space-sm);
154
+ color: var(--color-accent);
155
+ font-size: var(--font-size-sm);
156
+ padding: 10px 14px;
157
+ background: var(--color-accent-bg);
158
+ border-radius: var(--radius-button);
159
+ border: 1px solid var(--color-accent-border);
160
+ }
161
+
162
+ .preparingState {
163
+ text-align: center;
164
+ padding: var(--space-4xl);
165
+ color: var(--text-muted);
166
+ }
167
+
168
+ /* Empty state */
169
+ .emptyState {
170
+ display: flex;
171
+ flex-direction: column;
172
+ align-items: center;
173
+ justify-content: center;
174
+ height: 100%;
175
+ min-height: 200px;
176
+ gap: var(--space-lg);
177
+ }
178
+
179
+ /* Error alert */
180
+ .errorAlert {
181
+ width: 80%;
182
+ max-width: 500px;
183
+ padding: var(--space-md);
184
+ background: var(--color-error-bg);
185
+ border-left: 3px solid var(--color-error);
186
+ border-radius: var(--radius-button);
187
+ margin-bottom: var(--space-sm);
188
+ }
189
+
190
+ .errorTitle {
191
+ font-size: var(--font-size-sm);
192
+ font-weight: 600;
193
+ color: var(--color-error);
194
+ margin-bottom: 4px;
195
+ }
196
+
197
+ .errorDesc {
198
+ font-size: var(--font-size-xs);
199
+ color: var(--text-secondary);
200
+ word-break: break-all;
201
+ }
202
+
203
+ /* Chat messages */
204
+ .chatMsg {
205
+ margin-top: var(--space-md);
206
+ padding: var(--space-sm) var(--space-md);
207
+ border-radius: var(--radius-input);
208
+ }
209
+
210
+ .chatMsgUser {
211
+ background: var(--color-info-bg);
212
+ border-left: 3px solid var(--color-info);
213
+ }
214
+
215
+ .chatMsgAi {
216
+ background: var(--color-surface);
217
+ border-left: 3px solid var(--color-success);
218
+ }
219
+
220
+ /* Chat section */
221
+ .chatSection {
222
+ border-top: 1px solid var(--color-border);
223
+ background: var(--color-bar);
224
+ flex-shrink: 0;
225
+ }
226
+
227
+ .chatSuggestions {
228
+ padding: 10px 16px;
229
+ display: flex;
230
+ gap: 6px;
231
+ flex-wrap: wrap;
232
+ border-bottom: 1px solid var(--color-border);
233
+ }
234
+
235
+ .chatChip {
236
+ padding: 5px 12px;
237
+ border-radius: 16px;
238
+ font-size: var(--font-size-3xs);
239
+ color: var(--text-secondary);
240
+ background: var(--color-surface);
241
+ border: 1px solid var(--color-border-subtle);
242
+ cursor: pointer;
243
+ transition: border-color var(--transition-fast), color var(--transition-fast);
244
+ font-family: var(--font-sans);
245
+ }
246
+
247
+ .chatChip:hover {
248
+ border-color: var(--color-border-hover);
249
+ color: var(--text-primary);
250
+ }
251
+
252
+ .chatChip:disabled {
253
+ opacity: 0.5;
254
+ cursor: not-allowed;
255
+ }
256
+
257
+ .chatInputBar {
258
+ height: 48px;
259
+ display: flex;
260
+ align-items: center;
261
+ padding: 0 16px;
262
+ gap: 10px;
263
+ }
264
+
265
+ .chatInput {
266
+ flex: 1;
267
+ height: 32px;
268
+ background: var(--color-surface);
269
+ border: 1px solid var(--color-border-subtle);
270
+ border-radius: 8px;
271
+ padding: 0 12px;
272
+ font-size: var(--font-size-2xs);
273
+ color: var(--text-secondary);
274
+ font-family: var(--font-sans);
275
+ outline: none;
276
+ }
277
+
278
+ .chatInput:focus {
279
+ border-color: var(--color-border-hover);
280
+ }
281
+
282
+ .chatInput::placeholder {
283
+ color: var(--text-disabled);
284
+ }
285
+
286
+ .chatSend {
287
+ width: 32px;
288
+ height: 32px;
289
+ border-radius: 8px;
290
+ background: var(--text-primary);
291
+ color: var(--color-base);
292
+ display: flex;
293
+ align-items: center;
294
+ justify-content: center;
295
+ font-size: 13px;
296
+ cursor: pointer;
297
+ border: none;
298
+ font-family: var(--font-sans);
299
+ transition: opacity var(--transition-fast);
300
+ }
301
+
302
+ .chatSend:hover {
303
+ opacity: 0.9;
304
+ }
305
+
306
+ .chatSend:disabled {
307
+ opacity: 0.4;
308
+ cursor: not-allowed;
309
+ }
310
+
311
+ /* Deprecated: kept for backward compat */
312
+ .quickChips {
313
+ display: flex;
314
+ gap: 6px;
315
+ margin-bottom: var(--space-sm);
316
+ flex-wrap: wrap;
317
+ }
318
+
319
+ .chatInputRow {
320
+ display: flex;
321
+ gap: var(--space-sm);
322
+ }
323
+
324
+ .chatInputArea {
325
+ flex-shrink: 0;
326
+ border-top: 1px solid var(--color-border);
327
+ padding-top: 10px;
328
+ margin-top: var(--space-sm);
329
+ }
330
+
331
+ /* Right: context panel */
332
+ .reportContext {
333
+ width: var(--report-context-width);
334
+ border-left: 1px solid var(--color-border);
335
+ background: var(--color-sidebar);
336
+ display: flex;
337
+ flex-direction: column;
338
+ overflow-y: auto;
339
+ flex-shrink: 0;
340
+ }
341
+
342
+ .contextHeader {
343
+ padding: 12px 14px;
344
+ font-size: var(--font-size-3xs);
345
+ color: var(--text-muted);
346
+ letter-spacing: 1px;
347
+ text-transform: uppercase;
348
+ border-bottom: 1px solid var(--color-border);
349
+ }
350
+
351
+ .contextSection {
352
+ padding: 10px 14px;
353
+ border-bottom: 1px solid var(--color-border-subtle);
354
+ }
355
+
356
+ .contextLabel {
357
+ font-size: var(--font-size-3xs);
358
+ color: var(--text-label);
359
+ letter-spacing: 1px;
360
+ text-transform: uppercase;
361
+ margin-bottom: 6px;
362
+ }
363
+
364
+ .contextItem {
365
+ font-size: var(--font-size-3xs);
366
+ color: var(--text-muted);
367
+ padding: 3px 0;
368
+ display: flex;
369
+ align-items: center;
370
+ gap: 6px;
371
+ }
372
+
373
+ .contextDot {
374
+ width: 4px;
375
+ height: 4px;
376
+ border-radius: 50%;
377
+ flex-shrink: 0;
378
+ }
379
+
380
+ .contextEndpoint {
381
+ font-family: var(--font-mono);
382
+ font-size: var(--font-size-3xs);
383
+ color: var(--text-secondary);
384
+ padding: 4px 8px;
385
+ background: var(--color-surface);
386
+ border-radius: 4px;
387
+ margin: 3px 0;
388
+ display: flex;
389
+ align-items: center;
390
+ gap: 6px;
391
+ }
392
+
393
+ .contextMethod {
394
+ font-size: var(--font-size-3xs);
395
+ font-weight: 600;
396
+ }
397
+
398
+ .contextPath {
399
+ flex: 1;
400
+ color: var(--text-muted);
401
+ overflow: hidden;
402
+ text-overflow: ellipsis;
403
+ white-space: nowrap;
404
+ }
405
+
406
+ .contextClickable {
407
+ cursor: pointer;
408
+ transition: color var(--transition-fast);
409
+ }
410
+
411
+ .contextClickable:hover {
412
+ color: var(--text-secondary);
413
+ }