hunter-mate 0.1.2 → 0.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.
Files changed (448) hide show
  1. package/LICENSE +21 -0
  2. package/dist/assets/extension/_locales/en_US/messages.json +5 -0
  3. package/dist/assets/extension/_locales/zh_CN/messages.json +5 -0
  4. package/dist/assets/extension/background/service-worker.js +3342 -0
  5. package/dist/assets/extension/content/index.js +13765 -0
  6. package/dist/assets/extension/manifest.json +47 -0
  7. package/dist/assets/extension/package.json +24 -0
  8. package/dist/assets/extension/sidepanel/index.html +400 -0
  9. package/dist/assets/extension/sidepanel/index.js +926 -0
  10. package/dist/assets/server/agent-session/agent-session.controller.d.ts +32 -0
  11. package/dist/assets/server/agent-session/agent-session.controller.js +83 -0
  12. package/dist/assets/server/agent-session/agent-session.controller.js.map +1 -0
  13. package/dist/assets/server/agent-session/agent-session.guard.d.ts +4 -0
  14. package/dist/assets/server/agent-session/agent-session.guard.js +32 -0
  15. package/dist/assets/server/agent-session/agent-session.guard.js.map +1 -0
  16. package/dist/assets/server/agent-session/agent-session.module.d.ts +2 -0
  17. package/dist/assets/server/agent-session/agent-session.module.js +28 -0
  18. package/dist/assets/server/agent-session/agent-session.module.js.map +1 -0
  19. package/dist/assets/server/agent-session/agent-session.service.d.ts +54 -0
  20. package/dist/assets/server/agent-session/agent-session.service.js +431 -0
  21. package/dist/assets/server/agent-session/agent-session.service.js.map +1 -0
  22. package/dist/assets/server/agent-session/agent-session.types.d.ts +56 -0
  23. package/dist/assets/server/agent-session/agent-session.types.js +3 -0
  24. package/dist/assets/server/agent-session/agent-session.types.js.map +1 -0
  25. package/dist/assets/server/agent-session/entities/agent-event.entity.d.ts +12 -0
  26. package/dist/assets/server/agent-session/entities/agent-event.entity.js +73 -0
  27. package/dist/assets/server/agent-session/entities/agent-event.entity.js.map +1 -0
  28. package/dist/assets/server/agent-session/entities/agent-message.entity.d.ts +13 -0
  29. package/dist/assets/server/agent-session/entities/agent-message.entity.js +77 -0
  30. package/dist/assets/server/agent-session/entities/agent-message.entity.js.map +1 -0
  31. package/dist/assets/server/agent-session/entities/agent-session.entity.d.ts +14 -0
  32. package/dist/assets/server/agent-session/entities/agent-session.entity.js +83 -0
  33. package/dist/assets/server/agent-session/entities/agent-session.entity.js.map +1 -0
  34. package/dist/assets/server/app.module.d.ts +4 -0
  35. package/dist/assets/server/app.module.js +127 -0
  36. package/dist/assets/server/app.module.js.map +1 -0
  37. package/dist/assets/server/auth/auth.controller.d.ts +22 -0
  38. package/dist/assets/server/auth/auth.controller.js +88 -0
  39. package/dist/assets/server/auth/auth.controller.js.map +1 -0
  40. package/dist/assets/server/auth/auth.middleware.d.ts +5 -0
  41. package/dist/assets/server/auth/auth.middleware.js +34 -0
  42. package/dist/assets/server/auth/auth.middleware.js.map +1 -0
  43. package/dist/assets/server/auth/auth.module.d.ts +2 -0
  44. package/dist/assets/server/auth/auth.module.js +24 -0
  45. package/dist/assets/server/auth/auth.module.js.map +1 -0
  46. package/dist/assets/server/auth/auth.service.d.ts +30 -0
  47. package/dist/assets/server/auth/auth.service.js +183 -0
  48. package/dist/assets/server/auth/auth.service.js.map +1 -0
  49. package/dist/assets/server/auth/auth.types.d.ts +28 -0
  50. package/dist/assets/server/auth/auth.types.js +3 -0
  51. package/dist/assets/server/auth/auth.types.js.map +1 -0
  52. package/dist/assets/server/build-info.json +4 -0
  53. package/dist/assets/server/common/common.module.d.ts +2 -0
  54. package/dist/assets/server/common/common.module.js +22 -0
  55. package/dist/assets/server/common/common.module.js.map +1 -0
  56. package/dist/assets/server/common/crypto.service.d.ts +11 -0
  57. package/dist/assets/server/common/crypto.service.js +73 -0
  58. package/dist/assets/server/common/crypto.service.js.map +1 -0
  59. package/dist/assets/server/communication/communication-record.entity.d.ts +15 -0
  60. package/dist/assets/server/communication/communication-record.entity.js +80 -0
  61. package/dist/assets/server/communication/communication-record.entity.js.map +1 -0
  62. package/dist/assets/server/communication/communication.controller.d.ts +12 -0
  63. package/dist/assets/server/communication/communication.controller.js +61 -0
  64. package/dist/assets/server/communication/communication.controller.js.map +1 -0
  65. package/dist/assets/server/communication/communication.module.d.ts +2 -0
  66. package/dist/assets/server/communication/communication.module.js +25 -0
  67. package/dist/assets/server/communication/communication.module.js.map +1 -0
  68. package/dist/assets/server/communication/communication.service.d.ts +23 -0
  69. package/dist/assets/server/communication/communication.service.js +51 -0
  70. package/dist/assets/server/communication/communication.service.js.map +1 -0
  71. package/dist/assets/server/db/schema-validator.service.d.ts +25 -0
  72. package/dist/assets/server/db/schema-validator.service.js +107 -0
  73. package/dist/assets/server/db/schema-validator.service.js.map +1 -0
  74. package/dist/assets/server/db/schema-version.entity.d.ts +5 -0
  75. package/dist/assets/server/db/schema-version.entity.js +35 -0
  76. package/dist/assets/server/db/schema-version.entity.js.map +1 -0
  77. package/dist/assets/server/db/sqlite.module.d.ts +2 -0
  78. package/dist/assets/server/db/sqlite.module.js +83 -0
  79. package/dist/assets/server/db/sqlite.module.js.map +1 -0
  80. package/dist/assets/server/devops/devops-sink-init.d.ts +23 -0
  81. package/dist/assets/server/devops/devops-sink-init.js +101 -0
  82. package/dist/assets/server/devops/devops-sink-init.js.map +1 -0
  83. package/dist/assets/server/devops/devops-sink-init.spec.d.ts +1 -0
  84. package/dist/assets/server/devops/devops-sink-init.spec.js +71 -0
  85. package/dist/assets/server/devops/devops-sink-init.spec.js.map +1 -0
  86. package/dist/assets/server/devops/devops-sink.module.d.ts +2 -0
  87. package/dist/assets/server/devops/devops-sink.module.js +22 -0
  88. package/dist/assets/server/devops/devops-sink.module.js.map +1 -0
  89. package/dist/assets/server/doctor/doctor.controller.d.ts +13 -0
  90. package/dist/assets/server/doctor/doctor.controller.js +62 -0
  91. package/dist/assets/server/doctor/doctor.controller.js.map +1 -0
  92. package/dist/assets/server/doctor/doctor.module.d.ts +2 -0
  93. package/dist/assets/server/doctor/doctor.module.js +27 -0
  94. package/dist/assets/server/doctor/doctor.module.js.map +1 -0
  95. package/dist/assets/server/doctor/doctor.service.d.ts +15 -0
  96. package/dist/assets/server/doctor/doctor.service.js +209 -0
  97. package/dist/assets/server/doctor/doctor.service.js.map +1 -0
  98. package/dist/assets/server/doctor/doctor.types.d.ts +46 -0
  99. package/dist/assets/server/doctor/doctor.types.js +3 -0
  100. package/dist/assets/server/doctor/doctor.types.js.map +1 -0
  101. package/dist/assets/server/extension/extension-control.controller.d.ts +67 -0
  102. package/dist/assets/server/extension/extension-control.controller.js +173 -0
  103. package/dist/assets/server/extension/extension-control.controller.js.map +1 -0
  104. package/dist/assets/server/extension/extension-control.service.d.ts +46 -0
  105. package/dist/assets/server/extension/extension-control.service.js +212 -0
  106. package/dist/assets/server/extension/extension-control.service.js.map +1 -0
  107. package/dist/assets/server/extension/extension-core.module.d.ts +2 -0
  108. package/dist/assets/server/extension/extension-core.module.js +21 -0
  109. package/dist/assets/server/extension/extension-core.module.js.map +1 -0
  110. package/dist/assets/server/extension/extension-version.controller.d.ts +6 -0
  111. package/dist/assets/server/extension/extension-version.controller.js +41 -0
  112. package/dist/assets/server/extension/extension-version.controller.js.map +1 -0
  113. package/dist/assets/server/extension/extension.module.d.ts +2 -0
  114. package/dist/assets/server/extension/extension.module.js +25 -0
  115. package/dist/assets/server/extension/extension.module.js.map +1 -0
  116. package/dist/assets/server/extraction/adapter.service.d.ts +55 -0
  117. package/dist/assets/server/extraction/adapter.service.js +275 -0
  118. package/dist/assets/server/extraction/adapter.service.js.map +1 -0
  119. package/dist/assets/server/extraction/anomaly-report.service.d.ts +12 -0
  120. package/dist/assets/server/extraction/anomaly-report.service.js +81 -0
  121. package/dist/assets/server/extraction/anomaly-report.service.js.map +1 -0
  122. package/dist/assets/server/extraction/entities/adapter-rule.entity.d.ts +13 -0
  123. package/dist/assets/server/extraction/entities/adapter-rule.entity.js +71 -0
  124. package/dist/assets/server/extraction/entities/adapter-rule.entity.js.map +1 -0
  125. package/dist/assets/server/extraction/entities/company-profile.entity.d.ts +14 -0
  126. package/dist/assets/server/extraction/entities/company-profile.entity.js +81 -0
  127. package/dist/assets/server/extraction/entities/company-profile.entity.js.map +1 -0
  128. package/dist/assets/server/extraction/entities/job-posting.entity.d.ts +15 -0
  129. package/dist/assets/server/extraction/entities/job-posting.entity.js +86 -0
  130. package/dist/assets/server/extraction/entities/job-posting.entity.js.map +1 -0
  131. package/dist/assets/server/extraction/entities/parse-log.entity.d.ts +18 -0
  132. package/dist/assets/server/extraction/entities/parse-log.entity.js +102 -0
  133. package/dist/assets/server/extraction/entities/parse-log.entity.js.map +1 -0
  134. package/dist/assets/server/extraction/entities/talent-profile.entity.d.ts +15 -0
  135. package/dist/assets/server/extraction/entities/talent-profile.entity.js +86 -0
  136. package/dist/assets/server/extraction/entities/talent-profile.entity.js.map +1 -0
  137. package/dist/assets/server/extraction/extraction-entity.controller.d.ts +138 -0
  138. package/dist/assets/server/extraction/extraction-entity.controller.js +493 -0
  139. package/dist/assets/server/extraction/extraction-entity.controller.js.map +1 -0
  140. package/dist/assets/server/extraction/extraction-rule.controller.d.ts +7 -0
  141. package/dist/assets/server/extraction/extraction-rule.controller.js +48 -0
  142. package/dist/assets/server/extraction/extraction-rule.controller.js.map +1 -0
  143. package/dist/assets/server/extraction/extraction-rule.entity.d.ts +15 -0
  144. package/dist/assets/server/extraction/extraction-rule.entity.js +80 -0
  145. package/dist/assets/server/extraction/extraction-rule.entity.js.map +1 -0
  146. package/dist/assets/server/extraction/extraction-rule.service.d.ts +24 -0
  147. package/dist/assets/server/extraction/extraction-rule.service.js +89 -0
  148. package/dist/assets/server/extraction/extraction-rule.service.js.map +1 -0
  149. package/dist/assets/server/extraction/extraction.module.d.ts +2 -0
  150. package/dist/assets/server/extraction/extraction.module.js +53 -0
  151. package/dist/assets/server/extraction/extraction.module.js.map +1 -0
  152. package/dist/assets/server/extraction/extraction.service.d.ts +78 -0
  153. package/dist/assets/server/extraction/extraction.service.js +430 -0
  154. package/dist/assets/server/extraction/extraction.service.js.map +1 -0
  155. package/dist/assets/server/extraction/linkedin-extractor.d.ts +1 -0
  156. package/dist/assets/server/extraction/linkedin-extractor.js +244 -0
  157. package/dist/assets/server/extraction/linkedin-extractor.js.map +1 -0
  158. package/dist/assets/server/extraction/rrweb-snapshot.utils.d.ts +15 -0
  159. package/dist/assets/server/extraction/rrweb-snapshot.utils.js +48 -0
  160. package/dist/assets/server/extraction/rrweb-snapshot.utils.js.map +1 -0
  161. package/dist/assets/server/extraction/rrweb-snapshot.utils.spec.d.ts +1 -0
  162. package/dist/assets/server/extraction/rrweb-snapshot.utils.spec.js +60 -0
  163. package/dist/assets/server/extraction/rrweb-snapshot.utils.spec.js.map +1 -0
  164. package/dist/assets/server/extraction/script-rule.d.ts +14 -0
  165. package/dist/assets/server/extraction/script-rule.js +49 -0
  166. package/dist/assets/server/extraction/script-rule.js.map +1 -0
  167. package/dist/assets/server/extraction/snapshot-analysis.service.d.ts +23 -0
  168. package/dist/assets/server/extraction/snapshot-analysis.service.js +147 -0
  169. package/dist/assets/server/extraction/snapshot-analysis.service.js.map +1 -0
  170. package/dist/assets/server/extraction/structured-data.d.ts +7 -0
  171. package/dist/assets/server/extraction/structured-data.js +96 -0
  172. package/dist/assets/server/extraction/structured-data.js.map +1 -0
  173. package/dist/assets/server/hcapi/hcapi.module.d.ts +2 -0
  174. package/dist/assets/server/hcapi/hcapi.module.js +23 -0
  175. package/dist/assets/server/hcapi/hcapi.module.js.map +1 -0
  176. package/dist/assets/server/hcapi/hcapi.service.d.ts +28 -0
  177. package/dist/assets/server/hcapi/hcapi.service.js +81 -0
  178. package/dist/assets/server/hcapi/hcapi.service.js.map +1 -0
  179. package/dist/assets/server/health/health.controller.d.ts +19 -0
  180. package/dist/assets/server/health/health.controller.js +59 -0
  181. package/dist/assets/server/health/health.controller.js.map +1 -0
  182. package/dist/assets/server/jobcase/jobcase.controller.d.ts +12 -0
  183. package/dist/assets/server/jobcase/jobcase.controller.js +61 -0
  184. package/dist/assets/server/jobcase/jobcase.controller.js.map +1 -0
  185. package/dist/assets/server/jobcase/jobcase.entity.d.ts +13 -0
  186. package/dist/assets/server/jobcase/jobcase.entity.js +71 -0
  187. package/dist/assets/server/jobcase/jobcase.entity.js.map +1 -0
  188. package/dist/assets/server/jobcase/jobcase.module.d.ts +2 -0
  189. package/dist/assets/server/jobcase/jobcase.module.js +26 -0
  190. package/dist/assets/server/jobcase/jobcase.module.js.map +1 -0
  191. package/dist/assets/server/jobcase/jobcase.service.d.ts +21 -0
  192. package/dist/assets/server/jobcase/jobcase.service.js +56 -0
  193. package/dist/assets/server/jobcase/jobcase.service.js.map +1 -0
  194. package/dist/assets/server/llm/llm.module.d.ts +2 -0
  195. package/dist/assets/server/llm/llm.module.js +21 -0
  196. package/dist/assets/server/llm/llm.module.js.map +1 -0
  197. package/dist/assets/server/llm/llm.service.d.ts +18 -0
  198. package/dist/assets/server/llm/llm.service.js +65 -0
  199. package/dist/assets/server/llm/llm.service.js.map +1 -0
  200. package/dist/assets/server/main.d.ts +1 -0
  201. package/dist/assets/server/main.js +30 -0
  202. package/dist/assets/server/main.js.map +1 -0
  203. package/dist/assets/server/matching/matching.controller.d.ts +16 -0
  204. package/dist/assets/server/matching/matching.controller.js +97 -0
  205. package/dist/assets/server/matching/matching.controller.js.map +1 -0
  206. package/dist/assets/server/matching/matching.module.d.ts +2 -0
  207. package/dist/assets/server/matching/matching.module.js +36 -0
  208. package/dist/assets/server/matching/matching.module.js.map +1 -0
  209. package/dist/assets/server/matching/matching.service.d.ts +55 -0
  210. package/dist/assets/server/matching/matching.service.js +409 -0
  211. package/dist/assets/server/matching/matching.service.js.map +1 -0
  212. package/dist/assets/server/package.json +57 -0
  213. package/dist/assets/server/parsed-resume/parsed-resume.controller.d.ts +6 -0
  214. package/dist/assets/server/parsed-resume/parsed-resume.controller.js +42 -0
  215. package/dist/assets/server/parsed-resume/parsed-resume.controller.js.map +1 -0
  216. package/dist/assets/server/parsed-resume/parsed-resume.entity.d.ts +124 -0
  217. package/dist/assets/server/parsed-resume/parsed-resume.entity.js +72 -0
  218. package/dist/assets/server/parsed-resume/parsed-resume.entity.js.map +1 -0
  219. package/dist/assets/server/parsed-resume/parsed-resume.module.d.ts +2 -0
  220. package/dist/assets/server/parsed-resume/parsed-resume.module.js +26 -0
  221. package/dist/assets/server/parsed-resume/parsed-resume.module.js.map +1 -0
  222. package/dist/assets/server/parsed-resume/parsed-resume.service.d.ts +10 -0
  223. package/dist/assets/server/parsed-resume/parsed-resume.service.js +45 -0
  224. package/dist/assets/server/parsed-resume/parsed-resume.service.js.map +1 -0
  225. package/dist/assets/server/parsing/parse-error-report.entity.d.ts +11 -0
  226. package/dist/assets/server/parsing/parse-error-report.entity.js +66 -0
  227. package/dist/assets/server/parsing/parse-error-report.entity.js.map +1 -0
  228. package/dist/assets/server/parsing/parsing.controller.d.ts +19 -0
  229. package/dist/assets/server/parsing/parsing.controller.js +97 -0
  230. package/dist/assets/server/parsing/parsing.controller.js.map +1 -0
  231. package/dist/assets/server/parsing/parsing.module.d.ts +2 -0
  232. package/dist/assets/server/parsing/parsing.module.js +38 -0
  233. package/dist/assets/server/parsing/parsing.module.js.map +1 -0
  234. package/dist/assets/server/parsing/parsing.service.d.ts +38 -0
  235. package/dist/assets/server/parsing/parsing.service.js +263 -0
  236. package/dist/assets/server/parsing/parsing.service.js.map +1 -0
  237. package/dist/assets/server/query/fields-meta.controller.d.ts +28 -0
  238. package/dist/assets/server/query/fields-meta.controller.js +57 -0
  239. package/dist/assets/server/query/fields-meta.controller.js.map +1 -0
  240. package/dist/assets/server/query/query-builder.controller.d.ts +11 -0
  241. package/dist/assets/server/query/query-builder.controller.js +40 -0
  242. package/dist/assets/server/query/query-builder.controller.js.map +1 -0
  243. package/dist/assets/server/query/query-builder.service.d.ts +8 -0
  244. package/dist/assets/server/query/query-builder.service.js +41 -0
  245. package/dist/assets/server/query/query-builder.service.js.map +1 -0
  246. package/dist/assets/server/query/query.module.d.ts +2 -0
  247. package/dist/assets/server/query/query.module.js +23 -0
  248. package/dist/assets/server/query/query.module.js.map +1 -0
  249. package/dist/assets/server/recording/entities/recording-event.entity.d.ts +9 -0
  250. package/dist/assets/server/recording/entities/recording-event.entity.js +56 -0
  251. package/dist/assets/server/recording/entities/recording-event.entity.js.map +1 -0
  252. package/dist/assets/server/recording/entities/recording-snapshot.entity.d.ts +16 -0
  253. package/dist/assets/server/recording/entities/recording-snapshot.entity.js +91 -0
  254. package/dist/assets/server/recording/entities/recording-snapshot.entity.js.map +1 -0
  255. package/dist/assets/server/recording/recording-event-bus.service.d.ts +4 -0
  256. package/dist/assets/server/recording/recording-event-bus.service.js +25 -0
  257. package/dist/assets/server/recording/recording-event-bus.service.js.map +1 -0
  258. package/dist/assets/server/recording/recording-snapshot.service.d.ts +13 -0
  259. package/dist/assets/server/recording/recording-snapshot.service.js +81 -0
  260. package/dist/assets/server/recording/recording-snapshot.service.js.map +1 -0
  261. package/dist/assets/server/recording/recording-snapshot.service.spec.d.ts +1 -0
  262. package/dist/assets/server/recording/recording-snapshot.service.spec.js +65 -0
  263. package/dist/assets/server/recording/recording-snapshot.service.spec.js.map +1 -0
  264. package/dist/assets/server/recording/recording.controller.d.ts +54 -0
  265. package/dist/assets/server/recording/recording.controller.js +77 -0
  266. package/dist/assets/server/recording/recording.controller.js.map +1 -0
  267. package/dist/assets/server/recording/recording.gateway.d.ts +15 -0
  268. package/dist/assets/server/recording/recording.gateway.js +117 -0
  269. package/dist/assets/server/recording/recording.gateway.js.map +1 -0
  270. package/dist/assets/server/recording/recording.module.d.ts +2 -0
  271. package/dist/assets/server/recording/recording.module.js +36 -0
  272. package/dist/assets/server/recording/recording.module.js.map +1 -0
  273. package/dist/assets/server/recording/recording.service.d.ts +43 -0
  274. package/dist/assets/server/recording/recording.service.js +124 -0
  275. package/dist/assets/server/recording/recording.service.js.map +1 -0
  276. package/dist/assets/server/remark/remark.controller.d.ts +21 -0
  277. package/dist/assets/server/remark/remark.controller.js +59 -0
  278. package/dist/assets/server/remark/remark.controller.js.map +1 -0
  279. package/dist/assets/server/remark/remark.entity.d.ts +18 -0
  280. package/dist/assets/server/remark/remark.entity.js +67 -0
  281. package/dist/assets/server/remark/remark.entity.js.map +1 -0
  282. package/dist/assets/server/remark/remark.module.d.ts +2 -0
  283. package/dist/assets/server/remark/remark.module.js +26 -0
  284. package/dist/assets/server/remark/remark.module.js.map +1 -0
  285. package/dist/assets/server/remark/remark.service.d.ts +8 -0
  286. package/dist/assets/server/remark/remark.service.js +39 -0
  287. package/dist/assets/server/remark/remark.service.js.map +1 -0
  288. package/dist/assets/server/report/report.controller.d.ts +18 -0
  289. package/dist/assets/server/report/report.controller.js +41 -0
  290. package/dist/assets/server/report/report.controller.js.map +1 -0
  291. package/dist/assets/server/report/report.module.d.ts +2 -0
  292. package/dist/assets/server/report/report.module.js +24 -0
  293. package/dist/assets/server/report/report.module.js.map +1 -0
  294. package/dist/assets/server/report/report.service.d.ts +23 -0
  295. package/dist/assets/server/report/report.service.js +54 -0
  296. package/dist/assets/server/report/report.service.js.map +1 -0
  297. package/dist/assets/server/rules/rules.controller.d.ts +6 -0
  298. package/dist/assets/server/rules/rules.controller.js +35 -0
  299. package/dist/assets/server/rules/rules.controller.js.map +1 -0
  300. package/dist/assets/server/rules/rules.module.d.ts +2 -0
  301. package/dist/assets/server/rules/rules.module.js +23 -0
  302. package/dist/assets/server/rules/rules.module.js.map +1 -0
  303. package/dist/assets/server/rules/rules.service.d.ts +10 -0
  304. package/dist/assets/server/rules/rules.service.js +26 -0
  305. package/dist/assets/server/rules/rules.service.js.map +1 -0
  306. package/dist/assets/server/search/search.controller.d.ts +6 -0
  307. package/dist/assets/server/search/search.controller.js +53 -0
  308. package/dist/assets/server/search/search.controller.js.map +1 -0
  309. package/dist/assets/server/search/search.module.d.ts +2 -0
  310. package/dist/assets/server/search/search.module.js +24 -0
  311. package/dist/assets/server/search/search.module.js.map +1 -0
  312. package/dist/assets/server/search/search.service.d.ts +6 -0
  313. package/dist/assets/server/search/search.service.js +46 -0
  314. package/dist/assets/server/search/search.service.js.map +1 -0
  315. package/dist/assets/server/sentry.d.ts +3 -0
  316. package/dist/assets/server/sentry.js +10 -0
  317. package/dist/assets/server/sentry.js.map +1 -0
  318. package/dist/assets/server/site/entities/site-registry.entity.d.ts +13 -0
  319. package/dist/assets/server/site/entities/site-registry.entity.js +76 -0
  320. package/dist/assets/server/site/entities/site-registry.entity.js.map +1 -0
  321. package/dist/assets/server/site/site.controller.d.ts +38 -0
  322. package/dist/assets/server/site/site.controller.js +60 -0
  323. package/dist/assets/server/site/site.controller.js.map +1 -0
  324. package/dist/assets/server/site/site.module.d.ts +2 -0
  325. package/dist/assets/server/site/site.module.js +26 -0
  326. package/dist/assets/server/site/site.module.js.map +1 -0
  327. package/dist/assets/server/site/site.service.d.ts +38 -0
  328. package/dist/assets/server/site/site.service.js +141 -0
  329. package/dist/assets/server/site/site.service.js.map +1 -0
  330. package/dist/assets/server/snapshot/raw-snapshot.entity.d.ts +35 -0
  331. package/dist/assets/server/snapshot/raw-snapshot.entity.js +62 -0
  332. package/dist/assets/server/snapshot/raw-snapshot.entity.js.map +1 -0
  333. package/dist/assets/server/snapshot/snapshot.controller.d.ts +18 -0
  334. package/dist/assets/server/snapshot/snapshot.controller.js +76 -0
  335. package/dist/assets/server/snapshot/snapshot.controller.js.map +1 -0
  336. package/dist/assets/server/snapshot/snapshot.module.d.ts +2 -0
  337. package/dist/assets/server/snapshot/snapshot.module.js +26 -0
  338. package/dist/assets/server/snapshot/snapshot.module.js.map +1 -0
  339. package/dist/assets/server/snapshot/snapshot.service.d.ts +10 -0
  340. package/dist/assets/server/snapshot/snapshot.service.js +48 -0
  341. package/dist/assets/server/snapshot/snapshot.service.js.map +1 -0
  342. package/dist/assets/server/system/system.controller.d.ts +39 -0
  343. package/dist/assets/server/system/system.controller.js +93 -0
  344. package/dist/assets/server/system/system.controller.js.map +1 -0
  345. package/dist/assets/server/system/system.module.d.ts +2 -0
  346. package/dist/assets/server/system/system.module.js +26 -0
  347. package/dist/assets/server/system/system.module.js.map +1 -0
  348. package/dist/assets/server/system/system.service.d.ts +86 -0
  349. package/dist/assets/server/system/system.service.js +433 -0
  350. package/dist/assets/server/system/system.service.js.map +1 -0
  351. package/dist/assets/server/talent-fingerprint/fingerprint-match.service.d.ts +28 -0
  352. package/dist/assets/server/talent-fingerprint/fingerprint-match.service.js +186 -0
  353. package/dist/assets/server/talent-fingerprint/fingerprint-match.service.js.map +1 -0
  354. package/dist/assets/server/talent-fingerprint/talent-fingerprint.entity.d.ts +30 -0
  355. package/dist/assets/server/talent-fingerprint/talent-fingerprint.entity.js +55 -0
  356. package/dist/assets/server/talent-fingerprint/talent-fingerprint.entity.js.map +1 -0
  357. package/dist/assets/server/talent-fingerprint/talent-fingerprint.module.d.ts +2 -0
  358. package/dist/assets/server/talent-fingerprint/talent-fingerprint.module.js +25 -0
  359. package/dist/assets/server/talent-fingerprint/talent-fingerprint.module.js.map +1 -0
  360. package/dist/assets/server/talent-fingerprint/talent-fingerprint.service.d.ts +8 -0
  361. package/dist/assets/server/talent-fingerprint/talent-fingerprint.service.js +44 -0
  362. package/dist/assets/server/talent-fingerprint/talent-fingerprint.service.js.map +1 -0
  363. package/dist/assets/server/talent-job-match/talent-job-match.controller.d.ts +6 -0
  364. package/dist/assets/server/talent-job-match/talent-job-match.controller.js +42 -0
  365. package/dist/assets/server/talent-job-match/talent-job-match.controller.js.map +1 -0
  366. package/dist/assets/server/talent-job-match/talent-job-match.entity.d.ts +33 -0
  367. package/dist/assets/server/talent-job-match/talent-job-match.entity.js +73 -0
  368. package/dist/assets/server/talent-job-match/talent-job-match.entity.js.map +1 -0
  369. package/dist/assets/server/talent-job-match/talent-job-match.module.d.ts +2 -0
  370. package/dist/assets/server/talent-job-match/talent-job-match.module.js +26 -0
  371. package/dist/assets/server/talent-job-match/talent-job-match.module.js.map +1 -0
  372. package/dist/assets/server/talent-job-match/talent-job-match.service.d.ts +9 -0
  373. package/dist/assets/server/talent-job-match/talent-job-match.service.js +42 -0
  374. package/dist/assets/server/talent-job-match/talent-job-match.service.js.map +1 -0
  375. package/dist/assets/server/talent-portrait/portrait-merge.service.d.ts +17 -0
  376. package/dist/assets/server/talent-portrait/portrait-merge.service.js +200 -0
  377. package/dist/assets/server/talent-portrait/portrait-merge.service.js.map +1 -0
  378. package/dist/assets/server/talent-portrait/talent-portrait.controller.d.ts +7 -0
  379. package/dist/assets/server/talent-portrait/talent-portrait.controller.js +52 -0
  380. package/dist/assets/server/talent-portrait/talent-portrait.controller.js.map +1 -0
  381. package/dist/assets/server/talent-portrait/talent-portrait.entity.d.ts +91 -0
  382. package/dist/assets/server/talent-portrait/talent-portrait.entity.js +71 -0
  383. package/dist/assets/server/talent-portrait/talent-portrait.entity.js.map +1 -0
  384. package/dist/assets/server/talent-portrait/talent-portrait.module.d.ts +2 -0
  385. package/dist/assets/server/talent-portrait/talent-portrait.module.js +27 -0
  386. package/dist/assets/server/talent-portrait/talent-portrait.module.js.map +1 -0
  387. package/dist/assets/server/talent-portrait/talent-portrait.service.d.ts +10 -0
  388. package/dist/assets/server/talent-portrait/talent-portrait.service.js +46 -0
  389. package/dist/assets/server/talent-portrait/talent-portrait.service.js.map +1 -0
  390. package/dist/assets/server/telemetry/telemetry.module.d.ts +2 -0
  391. package/dist/assets/server/telemetry/telemetry.module.js +24 -0
  392. package/dist/assets/server/telemetry/telemetry.module.js.map +1 -0
  393. package/dist/assets/server/telemetry/telemetry.service.d.ts +29 -0
  394. package/dist/assets/server/telemetry/telemetry.service.js +116 -0
  395. package/dist/assets/server/telemetry/telemetry.service.js.map +1 -0
  396. package/dist/auto-doctor.d.ts +8 -0
  397. package/dist/auto-doctor.js +34 -0
  398. package/dist/bundled-assets.d.ts +22 -0
  399. package/dist/bundled-assets.js +80 -0
  400. package/dist/cache/db.js +10 -54
  401. package/dist/commands/addons.js +46 -71
  402. package/dist/commands/cache.js +29 -27
  403. package/dist/commands/config.d.ts +1 -1
  404. package/dist/commands/config.js +8 -12
  405. package/dist/commands/doctor.d.ts +38 -1
  406. package/dist/commands/doctor.js +214 -74
  407. package/dist/commands/extension.js +84 -98
  408. package/dist/commands/extras.d.ts +32 -2
  409. package/dist/commands/extras.js +252 -64
  410. package/dist/commands/init.js +18 -46
  411. package/dist/commands/install.js +31 -60
  412. package/dist/commands/job.js +27 -65
  413. package/dist/commands/login.js +50 -37
  414. package/dist/commands/logout.js +8 -12
  415. package/dist/commands/ops.js +94 -67
  416. package/dist/commands/record.js +21 -59
  417. package/dist/commands/report.js +14 -18
  418. package/dist/commands/search.js +14 -21
  419. package/dist/commands/server.d.ts +1 -1
  420. package/dist/commands/server.js +126 -112
  421. package/dist/commands/status.js +23 -27
  422. package/dist/commands/update.js +44 -79
  423. package/dist/config.d.ts +3 -0
  424. package/dist/config.js +12 -46
  425. package/dist/i18n/index.js +5 -11
  426. package/dist/i18n/locales/en-US.json +24 -1
  427. package/dist/i18n/locales/zh-CN.json +24 -1
  428. package/dist/index.cmd +3 -0
  429. package/dist/index.js +90 -98
  430. package/dist/index.ps1 +3 -0
  431. package/dist/keychain.js +9 -44
  432. package/dist/logger.d.ts +7 -0
  433. package/dist/logger.js +80 -0
  434. package/dist/native-check.d.ts +6 -0
  435. package/dist/native-check.js +23 -0
  436. package/dist/sentry.js +4 -8
  437. package/dist/updater.js +15 -52
  438. package/dist/utils/proc.d.ts +35 -0
  439. package/dist/utils/proc.js +81 -0
  440. package/dist/utils/spawn.d.ts +19 -0
  441. package/dist/utils/spawn.js +60 -0
  442. package/dist/version.d.ts +1 -1
  443. package/dist/version.js +183 -81
  444. package/dist/watchdog.d.ts +1 -0
  445. package/dist/watchdog.js +128 -0
  446. package/package.json +7 -6
  447. package/dist/commands/native-check.d.ts +0 -22
  448. package/dist/commands/native-check.js +0 -93
@@ -1,51 +1,15 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.doctorCommand = void 0;
40
- exports.runDoctor = runDoctor;
41
- const commander_1 = require("commander");
42
- const axios_1 = __importDefault(require("axios"));
43
- const config_1 = require("../config");
44
- const init_1 = require("./init");
45
- const server_1 = require("./server");
46
- const install_1 = require("./install");
47
- const extension_1 = require("./extension");
48
- const native_check_1 = require("./native-check");
1
+ import { Command } from 'commander';
2
+ import axios from 'axios';
3
+ import * as fs from 'fs';
4
+ import * as path from 'path';
5
+ import { loadConfig } from '../config.js';
6
+ import { runInit } from './init.js';
7
+ import { runStart } from './server.js';
8
+ import { runInstall } from './install.js';
9
+ import { runExtensionCheck } from './extension.js';
10
+ import { checkNativeModules } from '../native-check.js';
11
+ import { getCliLogger } from '../logger.js';
12
+ import { getToken } from '../keychain.js';
49
13
  const B = {
50
14
  reset: '\x1b[0m',
51
15
  bold: '\x1b[1m',
@@ -55,14 +19,40 @@ const B = {
55
19
  cyan: '\x1b[36m',
56
20
  magenta: '\x1b[35m',
57
21
  };
22
+ /**
23
+ * 调用 server /doctor/run 统一入口。
24
+ * 失败时返回 null,调用方决定如何处理。
25
+ */
26
+ export async function runDoctorChecks(opts) {
27
+ const config = loadConfig();
28
+ const token = await getToken().catch(() => undefined);
29
+ const checks = opts.checks && opts.checks.length ? opts.checks : undefined;
30
+ const timeout = opts.timeout ?? 60_000;
31
+ try {
32
+ const { data } = await axios.post(`${config.serverUrl}/doctor/run`, {
33
+ checks,
34
+ mode: opts.fix ? 'repair' : 'check',
35
+ dryRun: opts.dryRun === true,
36
+ }, {
37
+ timeout,
38
+ headers: token ? { Authorization: `UTOKEN ${token}` } : {},
39
+ });
40
+ return data;
41
+ }
42
+ catch (e) {
43
+ const message = e?.response?.data?.message || e.message || String(e);
44
+ getCliLogger().warn('doctor:checks:failed', { error: message, fix: opts.fix, checks });
45
+ return null;
46
+ }
47
+ }
58
48
  /** 对应 ChromePilot doctor: 全链路健康检查 — 带 auto-heal, 无感启动 server/安装扩展 */
59
- async function runDoctor(opts) {
49
+ export async function runDoctor(opts) {
60
50
  const checks = [];
61
51
  const hints = [];
62
52
  const healed = [];
63
53
  const actions = [];
64
54
  const autoHeal = opts.autoHeal !== false; // default true
65
- const interactive = opts.interactive !== false; // default true
55
+ const fix = opts.fix === true;
66
56
  // ── Banner (human 模式) ──
67
57
  if (!opts.json) {
68
58
  console.log(`\n${B.bold}${B.cyan}╭─────────────────────────────────────────────╮${B.reset}`);
@@ -72,23 +62,21 @@ async function runDoctor(opts) {
72
62
  // ── 1) 目录 & token ──
73
63
  let initResult = null;
74
64
  try {
75
- initResult = (0, init_1.runInit)();
65
+ initResult = runInit();
76
66
  checks.push({ key: 'home_dir', status: 'ok', detail: initResult.dir });
77
67
  }
78
68
  catch (e) {
79
69
  checks.push({ key: 'home_dir', status: 'fail', detail: e.message });
80
70
  if (autoHeal && !opts.json) {
81
71
  console.log(`${B.yellow}⚠ 基础目录缺失, hunter-mate 正在自动创建...${B.reset}`);
82
- initResult = (0, init_1.runInit)(true);
72
+ initResult = runInit(true);
83
73
  checks.push({ key: 'home_dir_auto_init', status: 'ok', detail: '已自动创建 ~/.hunter-mate 目录结构' });
84
74
  healed.push('init_dirs');
85
75
  }
86
76
  }
87
77
  if (!initResult)
88
- initResult = (0, init_1.runInit)();
78
+ initResult = runInit();
89
79
  // ── 2) 扩展安装检测 + 自动安装 ──
90
- const fs = require('fs');
91
- const path = require('path');
92
80
  const manifestPath = path.join(initResult.extensionDir, 'manifest.json');
93
81
  let extInstalled = fs.existsSync(manifestPath);
94
82
  if (extInstalled) {
@@ -100,7 +88,7 @@ async function runDoctor(opts) {
100
88
  if (!opts.json) {
101
89
  console.log(`${B.yellow}⚠ 扩展尚未安装, hunter-mate 正在自动执行 install...${B.reset}`);
102
90
  }
103
- const r = (0, install_1.runInstall)(initResult.extensionDir);
91
+ const r = runInstall(initResult.extensionDir);
104
92
  if (r.source) {
105
93
  checks.push({ key: 'extension_auto_install', status: 'ok', detail: `已从 ${r.source} 复制 ${r.copied} 个文件到 ${r.target}` });
106
94
  healed.push('install_extension');
@@ -118,7 +106,7 @@ async function runDoctor(opts) {
118
106
  // ── 2.5) 原生模块 ABI 自检(server 启动前置闸) ──
119
107
  // better-sqlite3 按 node ABI 绑定;不匹配时 server 起来即崩且报错被后台 spawn 吞掉。
120
108
  // 放在自动启动之前:fail 就不浪费 8s 去启动必然崩的 server。
121
- const native = (0, native_check_1.checkNativeModules)();
109
+ const native = checkNativeModules();
122
110
  for (const m of native.modules) {
123
111
  if (m.status === 'skip') {
124
112
  checks.push({ key: `native_${m.module}`, status: 'skip', detail: m.detail });
@@ -131,7 +119,7 @@ async function runDoctor(opts) {
131
119
  });
132
120
  }
133
121
  // ── 3) Server 自动启动(原生模块 fail 时跳过) ──
134
- const config = (0, config_1.loadConfig)();
122
+ const config = loadConfig();
135
123
  let serverUp = false;
136
124
  if (!native.ok) {
137
125
  checks.push({ key: 'server', status: 'skip', detail: '原生模块检查未通过,跳过自动启动(修好 ABI 后重跑 doctor)' });
@@ -139,7 +127,7 @@ async function runDoctor(opts) {
139
127
  }
140
128
  else {
141
129
  try {
142
- const r = await axios_1.default.get(`${config.serverUrl}/health`, { timeout: 3000 });
130
+ const r = await axios.get(`${config.serverUrl}/health`, { timeout: 3000 });
143
131
  serverUp = true;
144
132
  checks.push({ key: 'server', status: 'ok', detail: `${config.serverUrl} (HTTP ${r.status})` });
145
133
  }
@@ -149,12 +137,12 @@ async function runDoctor(opts) {
149
137
  if (!opts.json) {
150
138
  console.log(`${B.yellow}⚠ Server 未运行, hunter-mate 正在后台自动启动...${B.reset}`);
151
139
  }
152
- const r = await (0, server_1.runStart)({ foreground: false });
140
+ const r = await runStart({ foreground: false });
153
141
  // 等待 server 真正就绪(最多 8s)
154
142
  for (let i = 0; i < 16; i++) {
155
143
  await new Promise((resolve) => setTimeout(resolve, 500));
156
144
  try {
157
- await axios_1.default.get(`${config.serverUrl}/health`, { timeout: 2000 });
145
+ await axios.get(`${config.serverUrl}/health`, { timeout: 2000 });
158
146
  serverUp = true;
159
147
  break;
160
148
  }
@@ -180,11 +168,31 @@ async function runDoctor(opts) {
180
168
  }
181
169
  }
182
170
  } // native.ok
183
- // ── 4) 扩展 WebSocket 连通 ──
171
+ // ── 4) 数据库 schema 健康 ──
172
+ if (serverUp) {
173
+ try {
174
+ const r = await axios.get(`${config.serverUrl}/health/db`, { timeout: 3000 });
175
+ checks.push({
176
+ key: 'db_schema',
177
+ status: r.data.status === 'ok' ? 'ok' : 'warn',
178
+ detail: JSON.stringify(r.data),
179
+ });
180
+ if (r.data.status !== 'ok') {
181
+ hints.push('数据库 schema 异常,server 已尝试自动修复,请检查 server.log');
182
+ }
183
+ }
184
+ catch (e) {
185
+ checks.push({ key: 'db_schema', status: 'warn', detail: `无法检查 schema: ${e.message}` });
186
+ }
187
+ }
188
+ else {
189
+ checks.push({ key: 'db_schema', status: 'skip', detail: 'server 未运行,跳过 schema 检查' });
190
+ }
191
+ // ── 5) 扩展 WebSocket 连通 ──
184
192
  let extConnected = false;
185
193
  try {
186
194
  if (serverUp) {
187
- await (0, extension_1.runExtensionCheck)(5000);
195
+ await runExtensionCheck(5000);
188
196
  extConnected = true;
189
197
  checks.push({ key: 'extension_ws', status: 'ok', detail: '扩展已连接, WebSocket 通道就绪' });
190
198
  }
@@ -198,12 +206,12 @@ async function runDoctor(opts) {
198
206
  // autoHeal: 尝试打开扩展所在目录 + chrome://extensions
199
207
  if (autoHeal) {
200
208
  try {
201
- const { default: open } = await Promise.resolve().then(() => __importStar(require('open')));
209
+ const { default: open } = await import('open');
202
210
  if (extInstalled) {
203
211
  if (!opts.json) {
204
212
  console.log(`${B.magenta}→ hunter-mate 正在为你打开扩展所在目录...${B.reset}`);
205
213
  }
206
- open(initResult.extensionDir).catch(() => { });
214
+ open(path.dirname(initResult.extensionDir)).catch(() => { });
207
215
  healed.push('open_ext_dir');
208
216
  }
209
217
  if (!opts.json) {
@@ -217,7 +225,7 @@ async function runDoctor(opts) {
217
225
  }
218
226
  // ── 5) 登录态(不强制) ──
219
227
  try {
220
- const { getToken } = await Promise.resolve().then(() => __importStar(require('../keychain')));
228
+ const { getToken } = await import('../keychain.js');
221
229
  const token = await getToken();
222
230
  checks.push({
223
231
  key: 'auth',
@@ -230,10 +238,45 @@ async function runDoctor(opts) {
230
238
  catch (e) {
231
239
  checks.push({ key: 'auth', status: 'skip', detail: `跳过(keychain 读取失败): ${e.message}` });
232
240
  }
241
+ // ── 6) 数据面 doctor checks ──
242
+ let data = null;
243
+ if (serverUp) {
244
+ if (!opts.json) {
245
+ console.log(`\n${B.bold}${B.cyan}→ 正在运行数据面检查${fix ? ' (repair 模式)' : ' (只读 check 模式)'}...${B.reset}`);
246
+ }
247
+ data = await runDoctorChecks({
248
+ fix,
249
+ checks: opts.checks,
250
+ json: opts.json,
251
+ timeout: 120_000,
252
+ });
253
+ if (data) {
254
+ for (const c of data.checks) {
255
+ const status = c.ok ? 'ok' : c.severity === 'error' ? 'fail' : 'warn';
256
+ checks.push({
257
+ key: `data_${c.id}`,
258
+ status,
259
+ detail: c.message || c.description,
260
+ });
261
+ }
262
+ }
263
+ else {
264
+ checks.push({ key: 'data_doctor', status: 'warn', detail: '无法连接 /doctor/run (server 可能尚未就绪)' });
265
+ }
266
+ }
267
+ else {
268
+ checks.push({ key: 'data_doctor', status: 'skip', detail: 'server 未运行,跳过数据面检查' });
269
+ }
233
270
  // ── Summary ──
234
271
  const anyFail = checks.some((c) => c.status === 'fail');
235
272
  const anyWarn = checks.some((c) => c.status === 'warn');
236
273
  const summary = anyFail ? 'fail' : anyWarn ? 'warn' : 'pass';
274
+ getCliLogger().info('doctor:done', {
275
+ summary,
276
+ failedCount: checks.filter((c) => c.status === 'fail').length,
277
+ warnCount: checks.filter((c) => c.status === 'warn').length,
278
+ healed: healed.length,
279
+ });
237
280
  // ── human output ──
238
281
  if (!opts.json) {
239
282
  if (healed.length) {
@@ -260,7 +303,7 @@ async function runDoctor(opts) {
260
303
  console.log(`\n${B.bold}${B.red}✗ 环境未就绪, 请按上方引导完成修复后重试。${B.reset}\n`);
261
304
  }
262
305
  }
263
- return { summary, checks, hints, healed, actions };
306
+ return { summary, checks, hints, healed, actions, data };
264
307
  }
265
308
  /** 友好中文引导 — 当环境不完备时给用户清晰的操作步骤 */
266
309
  function showFriendlyGuide(extInstalled, extConnected, serverUp, healed, extDir) {
@@ -274,21 +317,24 @@ function showFriendlyGuide(extInstalled, extConnected, serverUp, healed, extDir)
274
317
  console.log(` hunter-mate 已尝试自动启动。若持续失败请手动执行:`);
275
318
  console.log(` ${B.bold}hunter-mate start -f${B.reset} (前台模式可看日志)\n`);
276
319
  }
320
+ const extParentDir = path.dirname(extDir);
321
+ const extFolderName = path.basename(extDir);
277
322
  if (!extInstalled) {
278
323
  console.log(`${B.bold}${B.yellow}⚠ Hunter Mate Chrome 扩展尚未安装${B.reset}`);
279
324
  console.log(` 步骤: hunter-mate 已自动把扩展文件复制到:`);
280
325
  console.log(` ${B.cyan}${extDir}${B.reset}`);
326
+ console.log(` 并已打开扩展所在目录: ${B.cyan}${extParentDir}${B.reset}`);
281
327
  console.log(` ${B.bold}接下来需要你手动在 Chrome 中加载(Chrome 安全策略限制命令行自动化):${B.reset}`);
282
328
  console.log(` ${B.magenta}① 在 Chrome 地址栏输入:${B.reset} chrome://extensions`);
283
329
  console.log(` ${B.magenta}② 打开右上角「开发者模式」开关${B.reset}`);
284
- console.log(` ${B.magenta}③ 点击「加载已解压的扩展程序」${B.reset}`);
285
- console.log(` ${B.magenta}④ 选择上面的目录:${B.reset} ${B.cyan}${extDir}${B.reset}`);
286
- console.log(` ${B.magenta}⑤ Chrome 工具栏应出现 Hunter Mate 图标${B.reset}\n`);
330
+ console.log(` ${B.magenta}③ 把 ${B.bold}${extFolderName}${B.reset} 文件夹拖到 chrome://extensions 页面里${B.reset}`);
331
+ console.log(` (也可以点击「加载已解压的扩展程序」后选择 ${B.cyan}${extDir}${B.reset})`);
332
+ console.log(` ${B.magenta}④ Chrome 工具栏应出现 Hunter Mate 图标,侧栏显示「已连接」${B.reset}\n`);
287
333
  }
288
334
  if (extInstalled && !extConnected) {
289
335
  console.log(`${B.bold}${B.yellow}⚠ 扩展已安装但尚未连接到 Server${B.reset}`);
290
336
  console.log(` hunter-mate 已自动帮你打开了:`);
291
- console.log(` · 扩展所在目录: ${B.cyan}${extDir}${B.reset}`);
337
+ console.log(` · 扩展所在目录: ${B.cyan}${extParentDir}${B.reset}`);
292
338
  console.log(` · Chrome 扩展管理页: ${B.cyan}chrome://extensions${B.reset}`);
293
339
  console.log(` ${B.bold}请确认以下几点:${B.reset}`);
294
340
  console.log(` ${B.magenta}① 扩展已在 chrome://extensions 中「已开启」${B.reset} (灰色开关变蓝色)`);
@@ -312,21 +358,115 @@ function showFriendlyGuide(extInstalled, extConnected, serverUp, healed, extDir)
312
358
  }
313
359
  console.log(`${B.bold}${B.cyan}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${B.reset}\n`);
314
360
  }
315
- exports.doctorCommand = new commander_1.Command('doctor')
361
+ export const doctorCommand = new Command('doctor')
316
362
  .description('全链路自检 + 自动修复(对应 chromepilot doctor): 自动启动 server、安装扩展、打开目录引导')
317
363
  .option('--json', '仅以 JSON 输出检查结果与建议(跳过引导文案)')
318
- .option('--open-extension-folder', '扩展未连接时自动打开扩展所在文件夹')
319
364
  .option('--no-auto-heal', '禁用自动修复(仅检查并给出建议, 不自动启动/安装)')
320
365
  .option('--no-interactive', '无交互模式(不打印友好引导, 仅输出结构化结果)')
366
+ .option('--fix', '执行可修复的数据检查(默认只读 check)')
367
+ .option('--checks <ids>', '只跑指定检查,逗号分隔(如 linkedin-dupes)', (val) => val.split(',').map((s) => s.trim()).filter(Boolean))
368
+ .option('--list', '列出 server 上注册的数据检查项')
321
369
  .action(async (opts) => {
370
+ if (opts.list) {
371
+ const config = loadConfig();
372
+ try {
373
+ const { data } = await axios.get(`${config.serverUrl}/doctor/checks`, { timeout: 10_000 });
374
+ if (opts.json) {
375
+ console.log(JSON.stringify(data, null, 2));
376
+ }
377
+ else {
378
+ console.log(`\n${B.bold}${B.cyan}已注册 Doctor 检查项:${B.reset}`);
379
+ for (const c of data) {
380
+ const fixTag = c.fixable ? `${B.green}[可修复]${B.reset}` : `${B.yellow}[只读]${B.reset}`;
381
+ console.log(` ${fixTag} ${B.bold}${c.id}${B.reset} (${c.severity})`);
382
+ console.log(` ${c.name}`);
383
+ console.log(` ${c.description}`);
384
+ }
385
+ }
386
+ process.exit(0);
387
+ }
388
+ catch (e) {
389
+ const message = e?.response?.data?.message || e.message || String(e);
390
+ getCliLogger().error('doctor:list failed', { message });
391
+ if (opts.json) {
392
+ console.log(JSON.stringify({ error: message }, null, 2));
393
+ }
394
+ else {
395
+ console.log(`${B.red}获取检查列表失败:${B.reset} ${message}`);
396
+ }
397
+ process.exit(1);
398
+ }
399
+ return;
400
+ }
322
401
  const r = await runDoctor({
323
402
  json: opts.json,
324
- openExtensionFolder: opts.openExtensionFolder,
325
403
  autoHeal: opts.autoHeal !== false,
326
404
  interactive: opts.interactive !== false,
405
+ fix: opts.fix === true,
406
+ checks: opts.checks,
327
407
  });
328
408
  if (opts.json) {
329
409
  console.log(JSON.stringify(r, null, 2));
330
410
  }
331
411
  process.exit(r.summary === 'fail' ? 1 : 0);
332
412
  });
413
+ export const repairLinkedInDupesCommand = new Command('repair-linkedin-dupes')
414
+ .description('修复 LinkedIn /in/<slug>/details/... 子页产生的重复 talent 数据')
415
+ .option('--dry-run', '仅预览,不真正合并/删除')
416
+ .option('--json', '仅输出 JSON 结果')
417
+ .action(async (opts) => {
418
+ const data = await runDoctorChecks({
419
+ fix: true,
420
+ checks: ['linkedin-dupes'],
421
+ dryRun: opts.dryRun === true,
422
+ json: opts.json,
423
+ timeout: 120_000,
424
+ });
425
+ if (!data) {
426
+ const message = '无法连接 server /doctor/run, 请确认 server 已启动';
427
+ getCliLogger().error('repair-linkedin-dupes failed', { message });
428
+ if (opts.json) {
429
+ console.log(JSON.stringify({ error: message }, null, 2));
430
+ }
431
+ else {
432
+ console.log(`修复失败: ${message}`);
433
+ }
434
+ process.exit(1);
435
+ }
436
+ const c = data.checks.find((x) => x.id === 'linkedin-dupes');
437
+ const details = c?.details || {};
438
+ const compat = {
439
+ dryRun: data.dryRun,
440
+ totalCandidates: details.totalCandidates ?? 0,
441
+ duplicateGroups: details.duplicateGroups ?? 0,
442
+ repairedCount: data.repaired?.length ?? 0,
443
+ merged: data.repaired ?? [],
444
+ summary: data.summary,
445
+ };
446
+ if (opts.json) {
447
+ console.log(JSON.stringify({ ...compat, raw: data }, null, 2));
448
+ }
449
+ else {
450
+ const B = {
451
+ reset: '\x1b[0m',
452
+ bold: '\x1b[1m',
453
+ green: '\x1b[32m',
454
+ yellow: '\x1b[33m',
455
+ cyan: '\x1b[36m',
456
+ };
457
+ console.log(`\n${B.bold}${B.cyan}LinkedIn 重复 talent 修复结果${B.reset}`);
458
+ console.log(` 模式: ${data.dryRun ? B.yellow + 'dry-run' + B.reset : B.green + '正式修复' + B.reset}`);
459
+ console.log(` LinkedIn talent 总数: ${compat.totalCandidates}`);
460
+ console.log(` 归一组数: ${compat.duplicateGroups}`);
461
+ console.log(` 需合并组数: ${compat.repairedCount}`);
462
+ if (compat.merged.length) {
463
+ console.log(`\n${B.bold}合并详情:${B.reset}`);
464
+ for (const m of compat.merged) {
465
+ console.log(` • master #${m.masterId} ← ${m.removedIds.map((id) => `#${id}`).join(', ')}`);
466
+ console.log(` ${m.sourceUrl}`);
467
+ }
468
+ }
469
+ }
470
+ process.exit(0);
471
+ });
472
+ doctorCommand.addCommand(repairLinkedInDupesCommand);