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,72 +1,100 @@
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;
1
+ import { Command } from 'commander';
2
+ import WebSocket from 'ws';
3
+ import * as readline from 'readline';
4
+ import { loadConfig } from '../config.js';
5
+ import axios from 'axios';
6
+ import * as fs from 'fs';
7
+ import * as path from 'path';
8
+ import { runInit } from './init.js';
9
+ import { runStop, tryReadPid } from './server.js';
10
+ import { i18n } from '../i18n/index.js';
11
+ import { getCliLogger } from '../logger.js';
12
+ /**
13
+ * 通知所有已连接扩展 reload(自愈主链路):
14
+ * 1) 优先 HTTP POST /system/broadcast-extension(返回明确 broadcast 计数和错误)
15
+ * 2) Fallback: 直连 WS /ws 发 {type:'broadcast', payload:{type:'reload'}}(兼容旧 server 无 HTTP 端点)
16
+ */
17
+ export async function runReload(timeoutMs = 5000) {
18
+ const config = loadConfig();
19
+ // ---------- 1) HTTP 优先(POST /system/broadcast-extension) ----------
20
+ try {
21
+ const res = await axios.post(`${config.serverUrl}/system/broadcast-extension`, { payload: { type: 'reload' } }, { timeout: timeoutMs, proxy: false });
22
+ const body = (res.data ?? {});
23
+ const broadcast = typeof body.broadcast === 'number' ? body.broadcast : 0;
24
+ const errors = Array.isArray(body.errors) ? body.errors : [];
25
+ if (broadcast > 0) {
26
+ return {
27
+ broadcast,
28
+ errors,
29
+ msg: `reload 广播已通过 HTTP 通道发送给 ${broadcast} 个扩展实例:200ms 后每个实例会自动调 chrome.runtime.reload(),Chrome 将重新读取磁盘上的扩展文件。`,
30
+ };
31
+ }
32
+ if (errors.length) {
33
+ return {
34
+ broadcast: 0,
35
+ errors,
36
+ msg: `HTTP 广播 0 个成功;错误: ${errors.map((e) => `${e.extensionId}:${e.error}`).join('; ')}。请在 chrome://extensions/ 点 HunterMate「重新加载」按钮。`,
37
+ };
38
+ }
39
+ // broadcast=0 且无错误 = 没有扩展连接(虽然 HTTP 通了)
40
+ return {
41
+ broadcast: 0,
42
+ msg: '本地 server 运行正常,但当前无已连接的 HunterMate 扩展。请启动 Chrome 并确认扩展已启用/加载;也可到 chrome://extensions/ 手动点刷新图标。',
24
43
  };
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.openExtCommand = exports.reloadCommand = void 0;
40
- exports.runReload = runReload;
41
- exports.runOpenExt = runOpenExt;
42
- const commander_1 = require("commander");
43
- const ws_1 = __importDefault(require("ws"));
44
- const config_1 = require("../config");
45
- const fs = __importStar(require("fs"));
46
- const init_1 = require("./init");
47
- /** 对应 ChromePilot reload: 通过 WS 向所有已连接扩展广播 {type: 'reload'} */
48
- function runReload(timeoutMs = 5000) {
49
- const config = (0, config_1.loadConfig)();
44
+ }
45
+ catch (e) {
46
+ // HTTP 不通(server 版本 < 新增 broadcast-extension 端点)→ 退回 WS 方式
47
+ }
48
+ // ---------- 2) Fallback: WS 广播方式(兼容旧 server) ----------
50
49
  const wsUrl = config.serverUrl.replace(/^http/, 'ws') + '/ws';
51
- const ws = new ws_1.default(wsUrl);
50
+ const ws = new WebSocket(wsUrl);
52
51
  return new Promise((resolve, reject) => {
53
52
  const timer = setTimeout(() => {
54
53
  ws.terminate();
55
54
  reject(new Error('reload timeout — is server running? Try `hunter-mate start`.'));
56
55
  }, timeoutMs);
57
56
  ws.on('open', () => {
58
- // 以特殊 client 身份发广播消息
59
57
  ws.send(JSON.stringify({ type: 'broadcast', payload: { type: 'reload' } }));
60
- // 服务器未实现 broadcast 路由时也当作 OK(由扩展端自己实现 ws.onmessage 监听),
61
- // 给用户一个可预期的输出,说明下一步
58
+ const onMsg = (raw) => {
59
+ try {
60
+ const data = JSON.parse(raw.toString());
61
+ if (data.type === 'broadcast_ack') {
62
+ clearTimeout(timer);
63
+ ws.removeAllListeners();
64
+ ws.close();
65
+ const count = typeof data.broadcast === 'number' ? data.broadcast : 1;
66
+ const errors = Array.isArray(data.errors) ? data.errors : [];
67
+ if (count > 0) {
68
+ resolve({
69
+ broadcast: count,
70
+ errors,
71
+ msg: `reload 广播已通过 WS 通道发送给 ${count} 个扩展实例:200ms 后每个实例会自动调 chrome.runtime.reload()。`,
72
+ });
73
+ }
74
+ else {
75
+ resolve({
76
+ broadcast: 0,
77
+ errors,
78
+ msg: `WS 通道广播返回 0:${errors.length ? errors.map((e) => `${e.extensionId}:${e.error}`).join('; ') : '无已连接扩展'}。请手动 chrome://extensions 刷新。`,
79
+ });
80
+ }
81
+ }
82
+ }
83
+ catch {
84
+ /* ignore non-JSON / non-ack */
85
+ }
86
+ };
87
+ ws.on('message', onMsg);
88
+ // 300ms 后没收到 broadcast_ack → 当成功(兼容老 server 不回 ack 的情况)
62
89
  setTimeout(() => {
63
90
  clearTimeout(timer);
91
+ ws.removeAllListeners();
64
92
  ws.close();
65
93
  resolve({
66
94
  broadcast: 1,
67
- msg: 'reload 广播已发送。若扩展端已实现 reload 处理器,所有 Chrome 实例中的 Hunter Mate 扩展会自动重载;否则请在 chrome://extensions 点击刷新按钮。',
95
+ msg: 'WS 通道 broadcast 已发送(未收到 ack,兼容旧 server):若扩展端已实现 reload 处理器,所有 Chrome 实例中的 HunterMate 扩展会自动重载;否则请在 chrome://extensions 点击刷新按钮。',
68
96
  });
69
- }, 300);
97
+ }, 600);
70
98
  });
71
99
  ws.on('error', (e) => {
72
100
  clearTimeout(timer);
@@ -74,22 +102,25 @@ function runReload(timeoutMs = 5000) {
74
102
  });
75
103
  });
76
104
  }
77
- /** 对应 ChromePilot open-ext / open-extension-folder: 打开 ~/.hunter-mate/extension */
78
- async function runOpenExt(target) {
79
- const init = (0, init_1.runInit)();
80
- const dir = target ?? init.extensionDir;
105
+ /** 对应 ChromePilot open-ext / open-extension-folder: 打开扩展所在目录(~/.hunter-mate),方便拖到 chrome://extensions */
106
+ export async function runOpenExt(target) {
107
+ const init = runInit();
108
+ // 默认打开父目录,让用户能把 extension 文件夹拖进 Chrome;--target 可覆盖
109
+ const dir = target ?? path.dirname(init.extensionDir);
81
110
  if (!fs.existsSync(dir))
82
111
  fs.mkdirSync(dir, { recursive: true });
83
112
  try {
84
- const { default: open } = await Promise.resolve().then(() => __importStar(require('open')));
113
+ const { default: open } = await import('open');
85
114
  await open(dir);
86
115
  }
87
116
  catch (e) {
88
- console.warn(`open(3) not available: ${e.message}. 请手动打开: ${dir}`);
117
+ getCliLogger().warn('extras:open-failed', {
118
+ hint: `open(3) not available: ${e.message}. 请手动打开: ${dir}`,
119
+ });
89
120
  }
90
121
  return dir;
91
122
  }
92
- exports.reloadCommand = new commander_1.Command('reload')
123
+ export const reloadCommand = new Command('reload')
93
124
  .description('通知所有已连接的 Chrome 扩展重新加载(对应 chromepilot reload)')
94
125
  .action(async () => {
95
126
  try {
@@ -97,15 +128,172 @@ exports.reloadCommand = new commander_1.Command('reload')
97
128
  console.log(r.msg);
98
129
  }
99
130
  catch (e) {
100
- console.error(`reload error: ${e.message}`);
131
+ getCliLogger().error('extras:reload-failed', { error: e.message });
101
132
  process.exit(1);
102
133
  }
103
134
  });
104
- exports.openExtCommand = new commander_1.Command('open-extension-folder')
135
+ export const openExtCommand = new Command('open-extension-folder')
105
136
  .alias('open-ext')
106
- .description('打开 ~/.hunter-mate/extension 文件夹,方便拖到 chrome://extensions 加载(对应 chromepilot open-ext)')
137
+ .description('打开扩展所在目录(~/.hunter-mate),方便把 extension 文件夹拖到 chrome://extensions 加载(对应 chromepilot open-ext)')
107
138
  .option('-t, --target <dir>', '指定自定义扩展目录')
108
139
  .action(async (opts) => {
109
140
  const dir = await runOpenExt(opts.target);
110
141
  console.log(`extension folder: ${dir}`);
111
142
  });
143
+ // ---------------------------------------------------------------------------
144
+ // purge — 彻底清理本地 hunter-mate 数据
145
+ // ---------------------------------------------------------------------------
146
+ const HM_ROOT = () => path.join(process.env.HUNTER_MATE_HOME || process.env.HOME || process.env.USERPROFILE || '.', '.hunter-mate');
147
+ /** 交互式二次确认 */
148
+ function confirmPrompt(question) {
149
+ return new Promise((resolve) => {
150
+ // 非 TTY 环境(如管道/CI)当作未确认,需要 --force
151
+ if (!process.stdin.isTTY)
152
+ return resolve(false);
153
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
154
+ rl.question(question, (ans) => {
155
+ rl.close();
156
+ const a = ans.trim().toLowerCase();
157
+ resolve(a === 'y' || a === 'yes');
158
+ });
159
+ });
160
+ }
161
+ /** 递归目录大小统计(用于展示将要删除的数据量) */
162
+ function dirSize(dir) {
163
+ let files = 0;
164
+ let bytes = 0;
165
+ if (!fs.existsSync(dir))
166
+ return { files: 0, bytes: 0 };
167
+ const walk = (d) => {
168
+ for (const ent of fs.readdirSync(d, { withFileTypes: true })) {
169
+ const full = path.join(d, ent.name);
170
+ if (ent.isDirectory())
171
+ walk(full);
172
+ else if (ent.isFile()) {
173
+ files++;
174
+ try {
175
+ bytes += fs.statSync(full).size;
176
+ }
177
+ catch { }
178
+ }
179
+ }
180
+ };
181
+ try {
182
+ walk(dir);
183
+ }
184
+ catch { }
185
+ return { files, bytes };
186
+ }
187
+ function humanSize(bytes) {
188
+ if (bytes < 1024)
189
+ return `${bytes} B`;
190
+ if (bytes < 1024 * 1024)
191
+ return `${(bytes / 1024).toFixed(1)} KB`;
192
+ if (bytes < 1024 * 1024 * 1024)
193
+ return `${(bytes / 1024 / 1024).toFixed(1)} MB`;
194
+ return `${(bytes / 1024 / 1024 / 1024).toFixed(2)} GB`;
195
+ }
196
+ /**
197
+ * 彻底清理本地 hunter-mate:
198
+ * 1. 停止本地 server(若运行中)
199
+ * 2. 删除整个 ~/.hunter-mate 目录(含 config、token、cache DB、插件、skill、trace、日志、pid 等)
200
+ */
201
+ export async function runPurge(opts) {
202
+ const root = HM_ROOT();
203
+ const exists = fs.existsSync(root);
204
+ // 1) 预检查:数据规模展示
205
+ let info = { files: 0, bytes: 0 };
206
+ if (exists)
207
+ info = dirSize(root);
208
+ const livePid = tryReadPid();
209
+ // 2) 二次确认(--force 或非交互跳过)
210
+ if (!opts.force) {
211
+ console.log([
212
+ i18n.t('purge.preview.title'),
213
+ ` ${i18n.t('purge.preview.root')}: ${root}`,
214
+ ` ${i18n.t('purge.preview.exists')}: ${exists ? i18n.t('purge.preview.yes') : i18n.t('purge.preview.no')}`,
215
+ exists
216
+ ? ` ${i18n.t('purge.preview.size')}: ${info.files} ${i18n.t('purge.preview.files')} / ${humanSize(info.bytes)}`
217
+ : '',
218
+ livePid
219
+ ? ` ${i18n.t('purge.preview.running')}: pid=${livePid} (${i18n.t('purge.preview.willStop')})`
220
+ : '',
221
+ '',
222
+ i18n.t('purge.preview.includes'),
223
+ ` - server.pid / server.log / runtime.json`,
224
+ ` - token.json / config.json (${i18n.t('purge.preview.loginLost')})`,
225
+ ` - cache.sqlite (job_cases / communication_records / search_history)`,
226
+ ` - plugins/ skills/ memory.json externals.json`,
227
+ ` - sessions/*.trace.jsonl recordings/ extension/`,
228
+ '',
229
+ ].filter(Boolean).join('\n'));
230
+ const ok = await confirmPrompt(i18n.t('purge.confirm.prompt'));
231
+ if (!ok) {
232
+ return {
233
+ ok: false,
234
+ skipped: true,
235
+ root,
236
+ serverStopped: null,
237
+ msg: i18n.t('purge.confirm.cancelled'),
238
+ };
239
+ }
240
+ }
241
+ // 3) 停止 server(先于目录删除,避免 server 还在写日志导致删不干净)
242
+ let serverStopResult = null;
243
+ if (livePid || exists && fs.existsSync(path.join(root, 'server.pid'))) {
244
+ serverStopResult = runStop();
245
+ }
246
+ // 4) 删除目录
247
+ let removedFiles = info.files;
248
+ let removedBytes = info.bytes;
249
+ if (exists) {
250
+ try {
251
+ // 再扫一遍,防止 stop 过程中又有新文件
252
+ const post = dirSize(root);
253
+ removedFiles = Math.max(removedFiles, post.files);
254
+ removedBytes = Math.max(removedBytes, post.bytes);
255
+ fs.rmSync(root, { recursive: true, force: true });
256
+ }
257
+ catch (err) {
258
+ return {
259
+ ok: false,
260
+ root,
261
+ serverStopped: serverStopResult,
262
+ msg: `${i18n.t('purge.error.rmFailed')}: ${err.message}`,
263
+ };
264
+ }
265
+ }
266
+ return {
267
+ ok: true,
268
+ root,
269
+ serverStopped: serverStopResult,
270
+ removedFiles,
271
+ removedBytes,
272
+ msg: exists
273
+ ? [
274
+ i18n.t('purge.done.title'),
275
+ ` ${i18n.t('purge.done.root')}: ${root}`,
276
+ ` ${i18n.t('purge.done.removed')}: ${removedFiles} ${i18n.t('purge.preview.files')} / ${humanSize(removedBytes)}`,
277
+ serverStopResult?.stopped
278
+ ? ` ${i18n.t('purge.done.server')}: ${serverStopResult.msg}`
279
+ : serverStopResult
280
+ ? ` ${i18n.t('purge.done.server')}: ${serverStopResult.msg}`
281
+ : '',
282
+ ` ${i18n.t('purge.done.next')}: \`hunter-mate init\``,
283
+ ].filter(Boolean).join('\n')
284
+ : `${i18n.t('purge.done.nothing')} (${root} ${i18n.t('purge.preview.noExist')})`,
285
+ };
286
+ }
287
+ export const purgeCommand = new Command('purge')
288
+ .alias('reset')
289
+ .alias('uninstall')
290
+ .description(i18n.t('purge.description'))
291
+ .option('-y, --force', i18n.t('purge.forceOption'))
292
+ .action(async (opts) => {
293
+ const r = await runPurge({ force: !!opts.force });
294
+ console.log(r.msg);
295
+ if (!r.ok && !r.skipped)
296
+ process.exit(1);
297
+ if (r.skipped)
298
+ process.exit(2);
299
+ });
@@ -1,53 +1,17 @@
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
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.initCommand = void 0;
37
- exports.runInit = runInit;
38
- const commander_1 = require("commander");
39
- const fs = __importStar(require("fs"));
40
- const path = __importStar(require("path"));
41
- const config_1 = require("../config");
1
+ import { Command } from 'commander';
2
+ import * as fs from 'fs';
3
+ import * as path from 'path';
4
+ import { ensureConfigDir, loadConfig, saveConfig } from '../config.js';
5
+ import { getCliLogger } from '../logger.js';
42
6
  /** 对应 ChromePilot init: 创建 ~/.hunter-mate 目录、SQLite、初始 token */
43
- function runInit(force = false) {
7
+ export function runInit(force = false) {
44
8
  const HOME = process.env.HUNTER_MATE_HOME || process.env.HOME || process.env.USERPROFILE || '.';
45
9
  const ROOT = path.join(HOME, '.hunter-mate');
46
10
  const EXT_DIR = path.join(ROOT, 'extension');
47
11
  const DB_FILE = path.join(ROOT, 'hunter-mate.db');
48
12
  const SESSIONS_DIR = path.join(ROOT, 'sessions');
49
13
  const TOKEN_FILE = path.join(ROOT, 'token');
50
- (0, config_1.ensureConfigDir)();
14
+ ensureConfigDir();
51
15
  for (const d of [ROOT, EXT_DIR, SESSIONS_DIR]) {
52
16
  if (!fs.existsSync(d))
53
17
  fs.mkdirSync(d, { recursive: true });
@@ -63,21 +27,29 @@ function runInit(force = false) {
63
27
  Math.random().toString(36).slice(2, 10) +
64
28
  Math.random().toString(36).slice(2, 10) +
65
29
  Date.now().toString(36);
30
+ // POSIX 上 mode 0o600 强制 owner-only;Windows NTFS 上 mode bit 被忽略,
31
+ // 由 %USERPROFILE%\.hunter-mate 目录的 ACL 兜底(默认仅当前用户可访问)。
32
+ // 真正安全的 Windows 路径是 keytar → Windows Credential Manager(见 keychain.ts)。
66
33
  fs.writeFileSync(TOKEN_FILE, token, { mode: 0o600 });
67
34
  }
68
35
  else {
69
36
  token = fs.readFileSync(TOKEN_FILE, 'utf-8').trim();
70
37
  }
71
38
  // 保证 serverUrl 默认值落到 config(首次)
72
- (0, config_1.loadConfig)();
73
- void config_1.saveConfig;
39
+ loadConfig();
40
+ void saveConfig;
74
41
  return { dir: ROOT, extensionDir: EXT_DIR, dbFile: DB_FILE, sessionsDir: SESSIONS_DIR, token };
75
42
  }
76
- exports.initCommand = new commander_1.Command('init')
43
+ export const initCommand = new Command('init')
77
44
  .description('创建 ~/.hunter-mate 目录、SQLite 数据库文件、初始 token(对应 chromepilot init)')
78
45
  .option('-f, --force', '强制重建 token')
79
46
  .action((opts) => {
80
47
  const r = runInit(opts.force);
48
+ getCliLogger().info('init:done', {
49
+ dir: r.dir,
50
+ dbFile: r.dbFile,
51
+ force: !!opts.force,
52
+ });
81
53
  console.log(`hunter-mate init OK:`);
82
54
  console.log(` dir: ${r.dir}`);
83
55
  console.log(` extension: ${r.extensionDir} (用 \`hunter-mate install\` 写入扩展 dist)`);
@@ -1,49 +1,17 @@
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
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.installCommand = void 0;
37
- exports.runInstall = runInstall;
38
- exports.showInstallGuide = showInstallGuide;
39
- const commander_1 = require("commander");
40
- const fs = __importStar(require("fs"));
41
- const path = __importStar(require("path"));
42
- const init_1 = require("./init");
1
+ import { Command } from 'commander';
2
+ import * as fs from 'fs';
3
+ import * as path from 'path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { runInit } from './init.js';
6
+ import { findBundledAssets } from '../bundled-assets.js';
7
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
43
8
  /** 对应 ChromePilot install: 把内置 extension dist 复制到 ~/.hunter-mate/extension */
44
9
  function resolveBuiltinExtensionDist() {
45
- // 约定: monorepo 中 extension dist 与 CLI 包并列 packages/extension/dist
46
- // 单包发布时则 fallback 到 CLI 包内的 bundled-extension/
10
+ // 优先 bundled-assets(npm 安装模式:dist/assets/extension 已存在)
11
+ const bundled = findBundledAssets();
12
+ if (bundled)
13
+ return bundled.extensionDir;
14
+ // fallback:monorepo 并列路径(老 hunter-mate 开发模式)
47
15
  const candidates = [
48
16
  path.resolve(__dirname, '../../../extension/dist'), // monorepo: packages/cli/dist/commands -> packages/extension/dist
49
17
  path.resolve(__dirname, '../../bundled-extension'), // bundled
@@ -53,8 +21,8 @@ function resolveBuiltinExtensionDist() {
53
21
  return c;
54
22
  return null;
55
23
  }
56
- function runInstall(target) {
57
- const init = (0, init_1.runInit)();
24
+ export function runInstall(target) {
25
+ const init = runInit();
58
26
  const targetDir = target ?? init.extensionDir;
59
27
  if (!fs.existsSync(targetDir))
60
28
  fs.mkdirSync(targetDir, { recursive: true });
@@ -83,42 +51,45 @@ const B = {
83
51
  green: '\x1b[32m', yellow: '\x1b[33m', red: '\x1b[31m', cyan: '\x1b[36m', magenta: '\x1b[35m',
84
52
  };
85
53
  /** 友好引导: 告诉用户如何在 Chrome 中加载 Hunter Mate 扩展 */
86
- function showInstallGuide(extDir) {
54
+ export function showInstallGuide(extDir) {
55
+ const parentDir = path.dirname(extDir);
56
+ const folderName = path.basename(extDir);
87
57
  console.log(`\n${B.bold}${B.cyan}━━━━━━━━━━━━━━━━━━━━━━━━━━ Hunter Mate 扩展安装指引 ━━━━━━━━━━━━━━━━━━━━━━━━━━${B.reset}`);
88
58
  console.log(`\n${B.bold}扩展文件已经准备好:${B.reset}`);
89
- console.log(` ${B.cyan}${extDir}${B.reset}`);
90
- console.log(`\n${B.bold}请按以下 5 步在 Chrome 中加载(约 30 秒):${B.reset}\n`);
59
+ console.log(` 扩展文件夹: ${B.cyan}${extDir}${B.reset}`);
60
+ console.log(` 已为你打开: ${B.cyan}${parentDir}${B.reset}`);
61
+ console.log(`\n${B.bold}请按以下 4 步在 Chrome 中加载(约 30 秒):${B.reset}\n`);
91
62
  console.log(` ${B.magenta}①${B.reset} 打开 Chrome, 地址栏输入: ${B.cyan}chrome://extensions${B.reset}`);
92
63
  console.log(` (hunter-mate 已帮你自动打开了这个页面)`);
93
64
  console.log(` ${B.magenta}②${B.reset} 右上角打开「${B.bold}开发者模式${B.reset}」开关`);
94
- console.log(` ${B.magenta}③${B.reset} 点击「${B.bold}加载已解压的扩展程序${B.reset}」按钮`);
95
- console.log(` ${B.magenta}④${B.reset} 在文件选择框中选择目录: ${B.cyan}${extDir}${B.reset}`);
96
- console.log(` ${B.magenta}⑤${B.reset} Chrome 工具栏应出现 Hunter Mate 🤝 图标\n`);
65
+ console.log(` ${B.magenta}③${B.reset} 把文件夹 ${B.bold}${folderName}${B.reset} 拖到 chrome://extensions 页面里`);
66
+ console.log(` (也可以点击「加载已解压的扩展程序」后选择 ${B.cyan}${extDir}${B.reset})`);
67
+ console.log(` ${B.magenta}④${B.reset} Chrome 工具栏应出现 Hunter Mate 🤝 图标,侧栏显示「已连接」\n`);
97
68
  console.log(`${B.bold}${B.yellow}常见问题:${B.reset}`);
98
69
  console.log(` · 没看到「加载已解压的扩展程序」? → 先开启「开发者模式」开关`);
99
70
  console.log(` · 加载后图标灰显? → 点击图标确认侧栏显示「已连接」`);
100
71
  console.log(` · 扩展报权限错误? → chrome://extensions → Hunter Mate → 详情 → 允许访问所有网站`);
101
72
  console.log(`\n${B.bold}${B.cyan}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${B.reset}\n`);
102
73
  }
103
- exports.installCommand = new commander_1.Command('install')
104
- .description('把内置 extension dist 复制到 ~/.hunter-mate/extension(对应 chromepilot install)。完成后自动打开目录并给出中文引导。')
74
+ export const installCommand = new Command('install')
75
+ .description('把内置 extension dist 复制到 ~/.hunter-mate/extension(对应 chromepilot install)。完成后自动打开扩展所在目录(~/.hunter-mate)并给出中文引导,方便把 extension 文件夹拖到 chrome://extensions。')
105
76
  .option('-t, --target <dir>', '目标目录,默认 ~/.hunter-mate/extension')
106
77
  .option('--no-open', '不自动打开扩展所在目录')
107
78
  .action(async (opts) => {
108
79
  const r = runInstall(opts.target);
109
80
  if (!r.source) {
110
- console.log(`${B.yellow}⚠ 未找到内置 extension dist(本仓库 packages/extension 尚未构建)。${B.reset}\n` +
111
- ` 请先在 hunter-mate monorepo 执行:\n` +
112
- ` ${B.bold}pnpm --filter @hunter-mate/extension build${B.reset}\n` +
81
+ console.log(`${B.yellow}⚠ hunter-mate 找不到内置 extension dist。${B.reset}\n` +
82
+ ` - 若你正在 monorepo 开发:执行 ${B.bold}pnpm --filter @hunter-mate/extension build${B.reset} 后重试。\n` +
83
+ ` - 若你已 ${B.bold}npm install -g hunter-mate${B.reset}:本 npm 包未含 extension 资产,完整终端分发包(含 extension)需联系 Hiredchina IT 索要。\n` +
113
84
  ` 目标目录已准备好: ${B.cyan}${r.target}${B.reset}`);
114
85
  return;
115
86
  }
116
87
  console.log(`${B.green}✓ hunter-mate install OK: ${r.copied} files${B.reset} → ${B.cyan}${r.target}${B.reset}`);
117
- // 自动打开目录 + 引导
88
+ // 自动打开扩展所在目录(父目录),方便用户把 extension 文件夹拖到 chrome://extensions
118
89
  if (opts.open !== false) {
119
90
  try {
120
- const { default: open } = await Promise.resolve().then(() => __importStar(require('open')));
121
- open(r.target).catch(() => { });
91
+ const { default: open } = await import('open');
92
+ open(path.dirname(r.target)).catch(() => { });
122
93
  }
123
94
  catch { }
124
95
  }