hunter-mate 0.1.6 → 0.1.8

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 (261) hide show
  1. package/dist/assets/extension/background/service-worker.js +911 -159
  2. package/dist/assets/extension/build-info.json +1 -0
  3. package/dist/assets/extension/content/index.js +22 -4
  4. package/dist/assets/extension/manifest.json +5 -4
  5. package/dist/assets/extension/offscreen/offscreen.html +8 -0
  6. package/dist/assets/extension/offscreen/offscreen.js +149 -0
  7. package/dist/assets/extension/package.json +12 -4
  8. package/dist/assets/extension/sidepanel/index.css +2 -0
  9. package/dist/assets/extension/sidepanel/index.html +7 -394
  10. package/dist/assets/extension/sidepanel/index.js +53 -923
  11. package/dist/assets/server/app.module.js +12 -1
  12. package/dist/assets/server/app.module.js.map +1 -1
  13. package/dist/assets/server/auth/auth.controller.d.ts +7 -0
  14. package/dist/assets/server/auth/auth.controller.js +20 -0
  15. package/dist/assets/server/auth/auth.controller.js.map +1 -1
  16. package/dist/assets/server/auth/auth.middleware.js +9 -1
  17. package/dist/assets/server/auth/auth.middleware.js.map +1 -1
  18. package/dist/assets/server/auth/auth.service.d.ts +11 -0
  19. package/dist/assets/server/auth/auth.service.js +58 -1
  20. package/dist/assets/server/auth/auth.service.js.map +1 -1
  21. package/dist/assets/server/build-info.json +1 -1
  22. package/dist/assets/server/customer/customer.controller.d.ts +18 -0
  23. package/dist/assets/server/customer/customer.controller.js +81 -0
  24. package/dist/assets/server/customer/customer.controller.js.map +1 -0
  25. package/dist/assets/server/customer/customer.entity.d.ts +17 -0
  26. package/dist/assets/server/customer/customer.entity.js +82 -0
  27. package/dist/assets/server/customer/customer.entity.js.map +1 -0
  28. package/dist/assets/server/customer/customer.module.d.ts +2 -0
  29. package/dist/assets/server/customer/customer.module.js +28 -0
  30. package/dist/assets/server/customer/customer.module.js.map +1 -0
  31. package/dist/assets/server/customer/customer.service.d.ts +36 -0
  32. package/dist/assets/server/customer/customer.service.js +200 -0
  33. package/dist/assets/server/customer/customer.service.js.map +1 -0
  34. package/dist/assets/server/db/schema-validator.service.d.ts +2 -0
  35. package/dist/assets/server/db/schema-validator.service.js +32 -1
  36. package/dist/assets/server/db/schema-validator.service.js.map +1 -1
  37. package/dist/assets/server/db/sqlite.module.d.ts +1 -0
  38. package/dist/assets/server/db/sqlite.module.js +12 -2
  39. package/dist/assets/server/db/sqlite.module.js.map +1 -1
  40. package/dist/assets/server/devops/devops-sink-init.d.ts +1 -14
  41. package/dist/assets/server/devops/devops-sink-init.js +3 -8
  42. package/dist/assets/server/devops/devops-sink-init.js.map +1 -1
  43. package/dist/assets/server/extension/extension-control.controller.d.ts +15 -0
  44. package/dist/assets/server/extension/extension-control.controller.js +42 -2
  45. package/dist/assets/server/extension/extension-control.controller.js.map +1 -1
  46. package/dist/assets/server/extension/extension-control.service.d.ts +14 -1
  47. package/dist/assets/server/extension/extension-control.service.js +65 -2
  48. package/dist/assets/server/extension/extension-control.service.js.map +1 -1
  49. package/dist/assets/server/extraction/adapter.service.d.ts +3 -0
  50. package/dist/assets/server/extraction/adapter.service.js +127 -6
  51. package/dist/assets/server/extraction/adapter.service.js.map +1 -1
  52. package/dist/assets/server/extraction/anomaly-report.service.js +1 -1
  53. package/dist/assets/server/extraction/anomaly-report.service.js.map +1 -1
  54. package/dist/assets/server/extraction/entities/adapter-rule.entity.d.ts +2 -0
  55. package/dist/assets/server/extraction/entities/adapter-rule.entity.js +10 -0
  56. package/dist/assets/server/extraction/entities/adapter-rule.entity.js.map +1 -1
  57. package/dist/assets/server/extraction/extraction-entity.controller.d.ts +21 -3
  58. package/dist/assets/server/extraction/extraction-entity.controller.js +44 -9
  59. package/dist/assets/server/extraction/extraction-entity.controller.js.map +1 -1
  60. package/dist/assets/server/extraction/extraction.module.js +13 -3
  61. package/dist/assets/server/extraction/extraction.module.js.map +1 -1
  62. package/dist/assets/server/extraction/extraction.service.d.ts +4 -1
  63. package/dist/assets/server/extraction/extraction.service.js +59 -4
  64. package/dist/assets/server/extraction/extraction.service.js.map +1 -1
  65. package/dist/assets/server/extraction/harness-overlay.service.d.ts +41 -0
  66. package/dist/assets/server/extraction/harness-overlay.service.js +319 -0
  67. package/dist/assets/server/extraction/harness-overlay.service.js.map +1 -0
  68. package/dist/assets/server/extraction/liepin-extractor.d.ts +1 -0
  69. package/dist/assets/server/extraction/liepin-extractor.js +172 -0
  70. package/dist/assets/server/extraction/liepin-extractor.js.map +1 -0
  71. package/dist/assets/server/extraction/script-rule.js +4 -0
  72. package/dist/assets/server/extraction/script-rule.js.map +1 -1
  73. package/dist/assets/server/governance/action-audit.entity.d.ts +12 -0
  74. package/dist/assets/server/governance/action-audit.entity.js +66 -0
  75. package/dist/assets/server/governance/action-audit.entity.js.map +1 -0
  76. package/dist/assets/server/governance/governance.controller.d.ts +14 -0
  77. package/dist/assets/server/governance/governance.controller.js +77 -0
  78. package/dist/assets/server/governance/governance.controller.js.map +1 -0
  79. package/dist/assets/server/governance/governance.ingester.d.ts +20 -0
  80. package/dist/assets/server/governance/governance.ingester.js +114 -0
  81. package/dist/assets/server/governance/governance.ingester.js.map +1 -0
  82. package/dist/assets/server/governance/governance.module.d.ts +2 -0
  83. package/dist/assets/server/governance/governance.module.js +26 -0
  84. package/dist/assets/server/governance/governance.module.js.map +1 -0
  85. package/dist/assets/server/governance/governance.service.d.ts +114 -0
  86. package/dist/assets/server/governance/governance.service.js +356 -0
  87. package/dist/assets/server/governance/governance.service.js.map +1 -0
  88. package/dist/assets/server/jobcase/jobcase.controller.d.ts +1 -0
  89. package/dist/assets/server/jobcase/jobcase.entity.d.ts +1 -0
  90. package/dist/assets/server/jobcase/jobcase.entity.js +6 -0
  91. package/dist/assets/server/jobcase/jobcase.entity.js.map +1 -1
  92. package/dist/assets/server/jobcase/jobcase.service.d.ts +2 -0
  93. package/dist/assets/server/jobcase/jobcase.service.js +2 -1
  94. package/dist/assets/server/jobcase/jobcase.service.js.map +1 -1
  95. package/dist/assets/server/main.js +1 -0
  96. package/dist/assets/server/main.js.map +1 -1
  97. package/dist/assets/server/package.json +5 -4
  98. package/dist/assets/server/preference/preference.controller.d.ts +14 -0
  99. package/dist/assets/server/preference/preference.controller.js +66 -0
  100. package/dist/assets/server/preference/preference.controller.js.map +1 -0
  101. package/dist/assets/server/preference/preference.entity.d.ts +13 -0
  102. package/dist/assets/server/preference/preference.entity.js +77 -0
  103. package/dist/assets/server/preference/preference.entity.js.map +1 -0
  104. package/dist/assets/server/preference/preference.module.d.ts +2 -0
  105. package/dist/assets/server/preference/preference.module.js +26 -0
  106. package/dist/assets/server/preference/preference.module.js.map +1 -0
  107. package/dist/assets/server/preference/preference.service.d.ts +33 -0
  108. package/dist/assets/server/preference/preference.service.js +122 -0
  109. package/dist/assets/server/preference/preference.service.js.map +1 -0
  110. package/dist/assets/server/recording/recording-event-queue.service.d.ts +26 -0
  111. package/dist/assets/server/recording/recording-event-queue.service.js +115 -0
  112. package/dist/assets/server/recording/recording-event-queue.service.js.map +1 -0
  113. package/dist/assets/server/recording/recording-retention.service.d.ts +38 -0
  114. package/dist/assets/server/recording/recording-retention.service.js +174 -0
  115. package/dist/assets/server/recording/recording-retention.service.js.map +1 -0
  116. package/dist/assets/server/recording/recording-snapshot.service.d.ts +1 -0
  117. package/dist/assets/server/recording/recording-snapshot.service.js +4 -0
  118. package/dist/assets/server/recording/recording-snapshot.service.js.map +1 -1
  119. package/dist/assets/server/recording/recording.controller.d.ts +21 -1
  120. package/dist/assets/server/recording/recording.controller.js +37 -2
  121. package/dist/assets/server/recording/recording.controller.js.map +1 -1
  122. package/dist/assets/server/recording/recording.gateway.js +11 -0
  123. package/dist/assets/server/recording/recording.gateway.js.map +1 -1
  124. package/dist/assets/server/recording/recording.module.js +16 -2
  125. package/dist/assets/server/recording/recording.module.js.map +1 -1
  126. package/dist/assets/server/recording/recording.service.d.ts +10 -1
  127. package/dist/assets/server/recording/recording.service.js +31 -6
  128. package/dist/assets/server/recording/recording.service.js.map +1 -1
  129. package/dist/assets/server/remark/remark.controller.d.ts +1 -1
  130. package/dist/assets/server/remark/remark.controller.js +1 -10
  131. package/dist/assets/server/remark/remark.controller.js.map +1 -1
  132. package/dist/assets/server/remark/remark.entity.d.ts +1 -1
  133. package/dist/assets/server/remark/remark.entity.js.map +1 -1
  134. package/dist/assets/server/site/entities/site-registry.entity.d.ts +1 -1
  135. package/dist/assets/server/site/entities/site-registry.entity.js +1 -1
  136. package/dist/assets/server/site/entities/site-registry.entity.js.map +1 -1
  137. package/dist/assets/server/site/site.controller.d.ts +1 -1
  138. package/dist/assets/server/site/site.service.d.ts +5 -1
  139. package/dist/assets/server/site/site.service.js +13 -0
  140. package/dist/assets/server/site/site.service.js.map +1 -1
  141. package/dist/assets/server/system/system.controller.d.ts +1 -0
  142. package/dist/assets/server/system/system.controller.js +1 -1
  143. package/dist/assets/server/system/system.controller.js.map +1 -1
  144. package/dist/assets/server/system/system.service.d.ts +1 -0
  145. package/dist/assets/server/system/system.service.js +3 -2
  146. package/dist/assets/server/system/system.service.js.map +1 -1
  147. package/dist/cache/db.js +6 -6
  148. package/dist/commands/addons.js +2 -1
  149. package/dist/commands/cache.js +3 -4
  150. package/dist/commands/case.d.ts +67 -0
  151. package/dist/commands/case.js +101 -0
  152. package/dist/commands/config.d.ts +4 -0
  153. package/dist/commands/config.js +8 -1
  154. package/dist/commands/customer.d.ts +25 -0
  155. package/dist/commands/customer.js +137 -0
  156. package/dist/commands/doctor.js +119 -13
  157. package/dist/commands/extension.js +26 -32
  158. package/dist/commands/extras.d.ts +22 -3
  159. package/dist/commands/extras.js +116 -7
  160. package/dist/commands/init.d.ts +1 -1
  161. package/dist/commands/init.js +3 -4
  162. package/dist/commands/issue-env.d.ts +23 -0
  163. package/dist/commands/issue-env.js +101 -0
  164. package/dist/commands/job.d.ts +6 -2
  165. package/dist/commands/job.js +75 -20
  166. package/dist/commands/login.d.ts +19 -0
  167. package/dist/commands/login.js +85 -13
  168. package/dist/commands/migrate.d.ts +32 -0
  169. package/dist/commands/migrate.js +116 -0
  170. package/dist/commands/note.d.ts +3 -0
  171. package/dist/commands/note.js +75 -0
  172. package/dist/commands/ops.js +82 -15
  173. package/dist/commands/preference.d.ts +6 -0
  174. package/dist/commands/preference.js +80 -0
  175. package/dist/commands/record.js +2 -4
  176. package/dist/commands/report.js +2 -4
  177. package/dist/commands/search.js +9 -2
  178. package/dist/commands/server.d.ts +9 -2
  179. package/dist/commands/server.js +118 -19
  180. package/dist/commands/status.d.ts +4 -0
  181. package/dist/commands/status.js +16 -6
  182. package/dist/commands/update.js +8 -9
  183. package/dist/config.d.ts +21 -0
  184. package/dist/config.js +27 -0
  185. package/dist/i18n/locales/en-US.json +19 -1
  186. package/dist/i18n/locales/zh-CN.json +19 -1
  187. package/dist/index.js +52 -2
  188. package/dist/keychain.d.ts +16 -1
  189. package/dist/keychain.js +43 -16
  190. package/dist/logger.js +2 -2
  191. package/dist/updater.d.ts +1 -1
  192. package/dist/updater.js +24 -7
  193. package/dist/utils/command-error.d.ts +11 -0
  194. package/dist/utils/command-error.js +47 -0
  195. package/dist/utils/link.d.ts +18 -0
  196. package/dist/utils/link.js +83 -0
  197. package/dist/utils/proxy-detect.d.ts +20 -0
  198. package/dist/utils/proxy-detect.js +96 -0
  199. package/dist/utils/script-path.d.ts +5 -0
  200. package/dist/utils/script-path.js +27 -0
  201. package/dist/version.js +34 -9
  202. package/dist/watchdog.d.ts +23 -1
  203. package/dist/watchdog.js +97 -6
  204. package/dist/web/dist/404.html +1 -0
  205. package/dist/web/dist/_next/static/WdJr3NhHjlu5xN0qOap1k/_buildManifest.js +1 -0
  206. package/dist/web/dist/_next/static/WdJr3NhHjlu5xN0qOap1k/_ssgManifest.js +1 -0
  207. package/dist/web/dist/_next/static/chunks/166.f30be223f694f8ee.js +1 -0
  208. package/dist/web/dist/_next/static/chunks/1e6d5a0c.0488932e17ecdf24.js +15 -0
  209. package/dist/web/dist/_next/static/chunks/539-5d0e8c5c238c56f8.js +1 -0
  210. package/dist/web/dist/_next/static/chunks/589-d632233641f35681.js +1 -0
  211. package/dist/web/dist/_next/static/chunks/671.3b8e9cc96b25b6ea.js +1 -0
  212. package/dist/web/dist/_next/static/chunks/935-99f57b7d4151d9e7.js +5 -0
  213. package/dist/web/dist/_next/static/chunks/a7067448-96dd4b8457c447e8.js +1 -0
  214. package/dist/web/dist/_next/static/chunks/app/_not-found/page-fdf1a13a7656886a.js +1 -0
  215. package/dist/web/dist/_next/static/chunks/app/auth/verify/page-8e5cff53d6f7d8e1.js +1 -0
  216. package/dist/web/dist/_next/static/chunks/app/companies/page-e38a69e1929d0953.js +1 -0
  217. package/dist/web/dist/_next/static/chunks/app/entity/page-250f8a9b6d91ab19.js +1 -0
  218. package/dist/web/dist/_next/static/chunks/app/jobs/page-6a281776fec065f6.js +1 -0
  219. package/dist/web/dist/_next/static/chunks/app/layout-83e623e973c1693f.js +1 -0
  220. package/dist/web/dist/_next/static/chunks/app/logs/page-d478031d49f7ba00.js +1 -0
  221. package/dist/web/dist/_next/static/chunks/app/matching/jobs/[id]/talents/page-f57f4b7529823601.js +1 -0
  222. package/dist/web/dist/_next/static/chunks/app/matching/portraits/[id]/jobs/page-614d1e62d7b9d215.js +1 -0
  223. package/dist/web/dist/_next/static/chunks/app/page-e3392de08ae81fba.js +1 -0
  224. package/dist/web/dist/_next/static/chunks/app/parselog/page-58d3acece95b4089.js +1 -0
  225. package/dist/web/dist/_next/static/chunks/app/recordings/page-e2e2e3c3a64083fb.js +1 -0
  226. package/dist/web/dist/_next/static/chunks/app/snapshots/[id]/agent-prompt/page-fd3b7d7373b8f8b7.js +1 -0
  227. package/dist/web/dist/_next/static/chunks/app/talents/page-30748338da20d7e0.js +1 -0
  228. package/dist/web/dist/_next/static/chunks/framework-b3a558b17a070965.js +1 -0
  229. package/dist/web/dist/_next/static/chunks/main-5a4e0cd75dd7f04b.js +1 -0
  230. package/dist/web/dist/_next/static/chunks/main-app-80b038a312917d90.js +1 -0
  231. package/dist/web/dist/_next/static/chunks/pages/_app-da7d628f49271ece.js +4 -0
  232. package/dist/web/dist/_next/static/chunks/pages/_error-17756f67e0a11350.js +1 -0
  233. package/dist/web/dist/_next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  234. package/dist/web/dist/_next/static/chunks/webpack-1784baecc6fdcf0b.js +1 -0
  235. package/dist/web/dist/_next/static/css/db881c5b3072b88a.css +3 -0
  236. package/dist/web/dist/_next/static/css/f60d210841fab76b.css +1 -0
  237. package/dist/web/dist/auth/verify.html +1 -0
  238. package/dist/web/dist/auth/verify.txt +8 -0
  239. package/dist/web/dist/companies.html +1 -0
  240. package/dist/web/dist/companies.txt +7 -0
  241. package/dist/web/dist/entity.html +1 -0
  242. package/dist/web/dist/entity.txt +8 -0
  243. package/dist/web/dist/index.html +1 -0
  244. package/dist/web/dist/index.txt +8 -0
  245. package/dist/web/dist/jobs.html +1 -0
  246. package/dist/web/dist/jobs.txt +7 -0
  247. package/dist/web/dist/logs.html +1 -0
  248. package/dist/web/dist/logs.txt +8 -0
  249. package/dist/web/dist/matching/jobs/placeholder/talents.html +1 -0
  250. package/dist/web/dist/matching/jobs/placeholder/talents.txt +8 -0
  251. package/dist/web/dist/matching/portraits/placeholder/jobs.html +1 -0
  252. package/dist/web/dist/matching/portraits/placeholder/jobs.txt +8 -0
  253. package/dist/web/dist/parselog.html +1 -0
  254. package/dist/web/dist/parselog.txt +8 -0
  255. package/dist/web/dist/recordings.html +1 -0
  256. package/dist/web/dist/recordings.txt +8 -0
  257. package/dist/web/dist/snapshots/placeholder/agent-prompt.html +1 -0
  258. package/dist/web/dist/snapshots/placeholder/agent-prompt.txt +8 -0
  259. package/dist/web/dist/talents.html +1 -0
  260. package/dist/web/dist/talents.txt +7 -0
  261. package/package.json +26 -6
@@ -1,400 +1,13 @@
1
1
  <!DOCTYPE html>
2
2
  <html lang="zh-CN">
3
3
  <head>
4
- <meta charset="UTF-8">
5
- <title>HunterMate</title>
6
- <style>
7
- * { box-sizing: border-box; }
8
- html, body { height: 100%; margin: 0; }
9
- body {
10
- font-family: system-ui, -apple-system, sans-serif;
11
- font-size: 13px;
12
- background: #f9fafb;
13
- color: #111827;
14
- display: flex;
15
- flex-direction: column;
16
- min-height: 100vh;
17
- }
18
- /* Header */
19
- .hm-header {
20
- padding: 10px 12px;
21
- border-bottom: 1px solid #e5e7eb;
22
- background: #fff;
23
- position: sticky;
24
- top: 0;
25
- z-index: 10;
26
- }
27
- .hm-header-row {
28
- display: flex;
29
- align-items: center;
30
- justify-content: space-between;
31
- margin-bottom: 6px;
32
- }
33
- .hm-title {
34
- font-size: 15px;
35
- font-weight: 700;
36
- margin: 0;
37
- }
38
- .hm-badge {
39
- font-size: 10px;
40
- padding: 2px 6px;
41
- border-radius: 4px;
42
- font-weight: 500;
43
- }
44
- .hm-recording-indicator {
45
- margin-top: 4px;
46
- font-size: 11px;
47
- color: #dc2626;
48
- display: flex;
49
- align-items: center;
50
- gap: 4px;
51
- }
52
- .hm-recording-dot {
53
- display: inline-block;
54
- width: 6px;
55
- height: 6px;
56
- border-radius: 50%;
57
- background: #ef4444;
58
- animation: hm-pulse 1.5s ease-in-out infinite;
59
- }
60
- @keyframes hm-pulse {
61
- 0%, 100% { opacity: 1; }
62
- 50% { opacity: 0.3; }
63
- }
64
-
65
- /* Current tab URL */
66
- .hm-current-url {
67
- flex: 1;
68
- min-width: 0;
69
- overflow: hidden;
70
- text-overflow: ellipsis;
71
- white-space: nowrap;
72
- font-size: 12px;
73
- color: #111827;
74
- line-height: 1.4;
75
- }
76
-
77
- /* Jump input */
78
- .hm-jump-row {
79
- display: flex;
80
- align-items: center;
81
- gap: 6px;
82
- margin-top: 6px;
83
- }
84
- .hm-jump-input {
85
- flex: 1;
86
- min-width: 0;
87
- padding: 4px 8px;
88
- border: 1px solid #d1d5db;
89
- border-radius: 4px;
90
- font-size: 12px;
91
- font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
92
- }
93
- .hm-jump-input:focus {
94
- border-color: #60a5fa;
95
- outline: none;
96
- }
97
- .hm-jump-btn {
98
- padding: 4px 10px;
99
- background: #2563eb;
100
- color: #fff;
101
- border-radius: 4px;
102
- font-size: 12px;
103
- flex-shrink: 0;
104
- cursor: pointer;
105
- }
106
- .hm-jump-btn:hover {
107
- background: #1d4ed8;
108
- }
109
- .hm-jump-msg {
110
- margin-top: 4px;
111
- font-size: 11px;
112
- line-height: 1.3;
113
- }
114
- .hm-jump-success { color: #16a34a; }
115
- .hm-jump-error { color: #dc2626; }
116
-
117
- /* Status dots */
118
- .hm-footer-left {
119
- display: flex;
120
- align-items: center;
121
- gap: 8px;
122
- min-width: 0;
123
- }
124
- .hm-status-dots {
125
- display: flex;
126
- align-items: center;
127
- gap: 5px;
128
- }
129
- .hm-status-dot {
130
- width: 6px;
131
- height: 6px;
132
- border-radius: 50%;
133
- display: inline-block;
134
- }
135
- .hm-status-dot-online { background: #22c55e; }
136
- .hm-status-dot-offline { background: #ef4444; }
137
- .hm-status-dot-pending { background: #9ca3af; }
138
-
139
- /* Group tag variant */
140
- .hm-tag-group:hover {
141
- background: #faf5ff;
142
- border-color: #d8b4fe;
143
- color: #9333ea;
144
- }
145
- .hm-tag-group.hm-tag-copied {
146
- background: #f3e8fd !important;
147
- border-color: #d8b4fe !important;
148
- color: #7e22ce !important;
149
- }
150
-
151
- .hm-body {
152
- flex: 1;
153
- overflow-y: auto;
154
- padding: 8px 12px;
155
- }
156
- .hm-body::-webkit-scrollbar { width: 6px; }
157
- .hm-body::-webkit-scrollbar-thumb { background: #d1d5db; border-radius: 3px; }
158
-
159
- .hm-section-title {
160
- font-size: 12px;
161
- font-weight: 600;
162
- color: #4b5563;
163
- margin: 10px 0 6px;
164
- display: flex;
165
- align-items: center;
166
- justify-content: space-between;
167
- }
168
- .hm-section-title .hm-refresh {
169
- font-size: 11px;
170
- color: #2563eb;
171
- cursor: pointer;
172
- background: none;
173
- border: none;
174
- padding: 0;
175
- }
176
-
177
- .card { border: 1px solid #e5e7eb; border-radius: 6px; padding: 10px; margin: 8px 0; background: #fff; }
178
- .card h3 { margin: 0 0 8px; font-size: 13px; }
179
- .badge { display: inline-block; padding: 2px 8px; border-radius: 10px; font-size: 11px; font-weight: 600; margin-right: 6px; }
180
- .b-talent { background: #dbeafe; color: #1e40af; }
181
- .b-job { background: #fef3c7; color: #92400e; }
182
- .b-company { background: #d1fae5; color: #065f46; }
183
- .b-list { background: #f3e8fd; color: #6b21a8; }
184
- .b-unknown { background: #f3f4f6; color: #4b5563; }
185
- .b-abort { background: #fee2e2; color: #991b1b; }
186
- .actions { display: flex; gap: 6px; margin-top: 8px; }
187
- button { padding: 6px 10px; cursor: pointer; border: none; border-radius: 4px; font-size: 12px; }
188
- #parseBtn { background: #2563eb; color: white; flex: 1; }
189
- #copyBtn { background: #16a34a; color: white; flex: 1; }
190
- #copyBtn:disabled, #parseBtn:disabled { background: #d1d5db; color: #6b7280; cursor: not-allowed; }
191
- .kv { display: flex; gap: 6px; margin: 3px 0; }
192
- .kv .k { color: #6b7280; min-width: 64px; }
193
- .kv .v { word-break: break-all; }
194
- .entity-item { padding: 6px 4px; border-bottom: 1px solid #f3f4f6; cursor: pointer; }
195
- .entity-item:last-child { border-bottom: none; }
196
- .entity-item .name { font-weight: 600; }
197
- .entity-item .sub { color: #6b7280; font-size: 11px; }
198
- .tabs { display: flex; gap: 4px; margin-bottom: 6px; }
199
- .tabs button { background: #f3f4f6; color: #374151; }
200
- .tabs button.active { background: #2563eb; color: white; }
201
- .site-item { display: flex; align-items: center; justify-content: space-between; gap: 6px; padding: 6px 0; border-bottom: 1px solid #f3f4f6; }
202
- .site-item .dom { font-weight: 600; word-break: break-all; }
203
- .site-item .ev { color: #6b7280; font-size: 11px; }
204
- .site-item button { padding: 3px 8px; font-size: 11px; }
205
- .enable-btn { background: #16a34a; color: white; }
206
- .ignore-btn { background: #d1d5db; color: #374151; }
207
- .empty { color: #6b7280; padding: 6px 0; font-size: 12px; text-align: center; }
208
- .info { font-size: 11px; color: #6b7280; margin-top: 6px; }
209
- .err { color: #dc2626; }
210
- details summary { cursor: pointer; color: #374151; font-weight: 600; font-size: 12px; }
211
-
212
- /* Footer */
213
- .hm-footer {
214
- padding: 8px 12px;
215
- border-top: 1px solid #e5e7eb;
216
- background: #fff;
217
- display: flex;
218
- align-items: center;
219
- justify-content: space-between;
220
- gap: 8px;
221
- }
222
- .hm-footer-version {
223
- font-size: 10px;
224
- color: #6b7280;
225
- min-width: 0;
226
- }
227
- .hm-footer-tags {
228
- display: flex;
229
- align-items: center;
230
- gap: 6px;
231
- flex-shrink: 0;
232
- }
233
- .hm-tag {
234
- font-size: 10px;
235
- padding: 2px 6px;
236
- border-radius: 4px;
237
- border: 1px solid #e5e7eb;
238
- background: #f9fafb;
239
- color: #4b5563;
240
- cursor: pointer;
241
- transition: all 0.15s;
242
- font-family: monospace;
243
- }
244
- .hm-tag:hover {
245
- background: #eff6ff;
246
- border-color: #93c5fd;
247
- color: #2563eb;
248
- }
249
- .hm-tag-copied {
250
- background: #dbeafe !important;
251
- border-color: #93c5fd !important;
252
- color: #1d4ed8 !important;
253
- }
254
-
255
- /* Parse status */
256
- .parse-status {
257
- font-size: 11px;
258
- margin-top: 6px;
259
- padding: 4px 8px;
260
- border-radius: 4px;
261
- display: inline-flex;
262
- align-items: center;
263
- gap: 4px;
264
- }
265
- .parse-status.detecting { background: #f3f4f6; color: #4b5563; }
266
- .parse-status.parsing { background: #dbeafe; color: #1e40af; }
267
- .parse-status.new { background: #d1fae5; color: #065f46; }
268
- .parse-status.stored { background: #fef3c7; color: #92400e; }
269
- .parse-status.failed { background: #fee2e2; color: #991b1b; }
270
- .parse-status .spinner {
271
- width: 10px;
272
- height: 10px;
273
- border: 2px solid currentColor;
274
- border-right-color: transparent;
275
- border-radius: 50%;
276
- animation: hm-spin 1s linear infinite;
277
- }
278
- @keyframes hm-spin { to { transform: rotate(360deg); } }
279
-
280
- /* Tags */
281
- .tag-row { margin-top: 8px; }
282
- .tag-list { display: flex; flex-wrap: wrap; gap: 4px; margin-bottom: 6px; }
283
- .tag-chip {
284
- display: inline-flex;
285
- align-items: center;
286
- gap: 2px;
287
- font-size: 10px;
288
- padding: 2px 6px;
289
- border-radius: 10px;
290
- background: #eff6ff;
291
- color: #1d4ed8;
292
- border: 1px solid #bfdbfe;
293
- }
294
- .tag-chip button {
295
- background: transparent;
296
- border: none;
297
- color: #1d4ed8;
298
- cursor: pointer;
299
- font-size: 11px;
300
- line-height: 1;
301
- padding: 0 2px;
302
- }
303
- .tag-input-row { display: flex; gap: 4px; }
304
- .tag-input {
305
- flex: 1;
306
- min-width: 0;
307
- padding: 4px 8px;
308
- border: 1px solid #d1d5db;
309
- border-radius: 4px;
310
- font-size: 11px;
311
- }
312
- .tag-input:focus { border-color: #60a5fa; outline: none; }
313
- .tag-add-btn {
314
- padding: 4px 8px;
315
- background: #2563eb;
316
- color: #fff;
317
- border-radius: 4px;
318
- font-size: 11px;
319
- cursor: pointer;
320
- }
321
- .entity-item .tag-list { margin-top: 3px; margin-bottom: 0; }
322
- </style>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>HunterMate 猎伴</title>
7
+ <link rel="stylesheet" href="./index.css" />
323
8
  </head>
324
9
  <body>
325
- <header class="hm-header">
326
- <div class="hm-header-row">
327
- <div id="currentUrl" class="hm-current-url" title="">加载中…</div>
328
- </div>
329
- <div class="hm-jump-row">
330
- <input
331
- id="jumpInput"
332
- class="hm-jump-input"
333
- type="text"
334
- placeholder="tab <ID> / group <ID> / 数字,回车跳转"
335
- />
336
- <button id="jumpBtn" class="hm-jump-btn">跳转</button>
337
- </div>
338
- <div id="jumpMsg" class="hm-jump-msg hm-jump-success" style="display:none"></div>
339
- <div id="jumpError" class="hm-jump-msg hm-jump-error" style="display:none"></div>
340
- <div id="recordingIndicator" class="hm-recording-indicator" style="display:none">
341
- <span class="hm-recording-dot"></span>
342
- <span id="recordingText">采集中</span>
343
- </div>
344
- </header>
345
-
346
- <main class="hm-body">
347
- <div class="card" id="pageCard">
348
- <h3>当前页面 <span id="clsBadge" class="badge b-unknown">未识别</span></h3>
349
- <div id="clsDetail" class="empty">等待页面分类…</div>
350
- <div id="parseStatus" class="parse-status detecting" style="display:none"></div>
351
- <div id="entityTags" class="tag-row" style="display:none">
352
- <div class="tag-list" id="entityTagList"></div>
353
- <div class="tag-input-row">
354
- <input id="tagInput" class="tag-input" type="text" placeholder="输入标签,回车添加" />
355
- <button id="tagAddBtn" class="tag-add-btn">添加</button>
356
- </div>
357
- </div>
358
- <div class="actions">
359
- <button id="parseBtn" disabled>解析入库</button>
360
- <button id="copyBtn" disabled>复制给 Agent</button>
361
- </div>
362
- <div id="parseResult" class="info"></div>
363
- </div>
364
-
365
- <div class="card" id="sitesCard" style="display:none">
366
- <h3>发现新招聘站点 <span id="sitesCount" class="badge b-list">0</span></h3>
367
- <div id="sitesList"></div>
368
- </div>
369
-
370
- <div class="card">
371
- <div class="hm-section-title">
372
- <span>最近入库</span>
373
- </div>
374
- <div class="tabs">
375
- <button data-type="talent" class="active">人才</button>
376
- <button data-type="job">职位</button>
377
- <button data-type="company">公司</button>
378
- </div>
379
- <div id="entityList"><div class="empty">加载中…</div></div>
380
- </div>
381
- </main>
382
-
383
- <footer class="hm-footer">
384
- <div class="hm-footer-left">
385
- <div class="hm-status-dots" id="statusDots">
386
- <span id="dotExt" class="hm-status-dot hm-status-dot-pending" title="扩展状态检测中"></span>
387
- <span id="dotServer" class="hm-status-dot hm-status-dot-pending" title="服务状态检测中"></span>
388
- <span id="dotWs" class="hm-status-dot hm-status-dot-pending" title="WS 状态检测中"></span>
389
- </div>
390
- <div id="footerVersion" class="hm-footer-version">v0.0.0</div>
391
- </div>
392
- <div class="hm-footer-tags">
393
- <button id="tabTag" class="hm-tag" style="display:none">tab --</button>
394
- <button id="groupTag" class="hm-tag hm-tag-group" style="display:none">group --</button>
395
- </div>
396
- </footer>
397
-
398
- <script type="module" src="index.js"></script>
10
+ <div id="root"></div>
11
+ <script src="./index.js"></script>
399
12
  </body>
400
- </html>
13
+ </html>