hunter-mate 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (403) hide show
  1. package/dist/assets/extension/_locales/en_US/messages.json +5 -0
  2. package/dist/assets/extension/_locales/zh_CN/messages.json +5 -0
  3. package/dist/assets/extension/background/service-worker.js +3253 -0
  4. package/dist/assets/extension/content/index.js +13660 -0
  5. package/dist/assets/extension/manifest.json +49 -0
  6. package/dist/assets/extension/package.json +24 -0
  7. package/dist/assets/extension/sidepanel/index.html +400 -0
  8. package/dist/assets/extension/sidepanel/index.js +852 -0
  9. package/dist/assets/server/agent-session/agent-session.controller.d.ts +32 -0
  10. package/dist/assets/server/agent-session/agent-session.controller.js +83 -0
  11. package/dist/assets/server/agent-session/agent-session.controller.js.map +1 -0
  12. package/dist/assets/server/agent-session/agent-session.guard.d.ts +4 -0
  13. package/dist/assets/server/agent-session/agent-session.guard.js +32 -0
  14. package/dist/assets/server/agent-session/agent-session.guard.js.map +1 -0
  15. package/dist/assets/server/agent-session/agent-session.module.d.ts +2 -0
  16. package/dist/assets/server/agent-session/agent-session.module.js +28 -0
  17. package/dist/assets/server/agent-session/agent-session.module.js.map +1 -0
  18. package/dist/assets/server/agent-session/agent-session.service.d.ts +54 -0
  19. package/dist/assets/server/agent-session/agent-session.service.js +431 -0
  20. package/dist/assets/server/agent-session/agent-session.service.js.map +1 -0
  21. package/dist/assets/server/agent-session/agent-session.types.d.ts +56 -0
  22. package/dist/assets/server/agent-session/agent-session.types.js +3 -0
  23. package/dist/assets/server/agent-session/agent-session.types.js.map +1 -0
  24. package/dist/assets/server/agent-session/entities/agent-event.entity.d.ts +12 -0
  25. package/dist/assets/server/agent-session/entities/agent-event.entity.js +73 -0
  26. package/dist/assets/server/agent-session/entities/agent-event.entity.js.map +1 -0
  27. package/dist/assets/server/agent-session/entities/agent-message.entity.d.ts +13 -0
  28. package/dist/assets/server/agent-session/entities/agent-message.entity.js +77 -0
  29. package/dist/assets/server/agent-session/entities/agent-message.entity.js.map +1 -0
  30. package/dist/assets/server/agent-session/entities/agent-session.entity.d.ts +14 -0
  31. package/dist/assets/server/agent-session/entities/agent-session.entity.js +83 -0
  32. package/dist/assets/server/agent-session/entities/agent-session.entity.js.map +1 -0
  33. package/dist/assets/server/app.module.d.ts +4 -0
  34. package/dist/assets/server/app.module.js +125 -0
  35. package/dist/assets/server/app.module.js.map +1 -0
  36. package/dist/assets/server/auth/auth.controller.d.ts +22 -0
  37. package/dist/assets/server/auth/auth.controller.js +88 -0
  38. package/dist/assets/server/auth/auth.controller.js.map +1 -0
  39. package/dist/assets/server/auth/auth.middleware.d.ts +5 -0
  40. package/dist/assets/server/auth/auth.middleware.js +34 -0
  41. package/dist/assets/server/auth/auth.middleware.js.map +1 -0
  42. package/dist/assets/server/auth/auth.module.d.ts +2 -0
  43. package/dist/assets/server/auth/auth.module.js +24 -0
  44. package/dist/assets/server/auth/auth.module.js.map +1 -0
  45. package/dist/assets/server/auth/auth.service.d.ts +30 -0
  46. package/dist/assets/server/auth/auth.service.js +183 -0
  47. package/dist/assets/server/auth/auth.service.js.map +1 -0
  48. package/dist/assets/server/auth/auth.types.d.ts +28 -0
  49. package/dist/assets/server/auth/auth.types.js +3 -0
  50. package/dist/assets/server/auth/auth.types.js.map +1 -0
  51. package/dist/assets/server/build-info.json +4 -0
  52. package/dist/assets/server/common/common.module.d.ts +2 -0
  53. package/dist/assets/server/common/common.module.js +22 -0
  54. package/dist/assets/server/common/common.module.js.map +1 -0
  55. package/dist/assets/server/common/crypto.service.d.ts +11 -0
  56. package/dist/assets/server/common/crypto.service.js +73 -0
  57. package/dist/assets/server/common/crypto.service.js.map +1 -0
  58. package/dist/assets/server/communication/communication-record.entity.d.ts +15 -0
  59. package/dist/assets/server/communication/communication-record.entity.js +80 -0
  60. package/dist/assets/server/communication/communication-record.entity.js.map +1 -0
  61. package/dist/assets/server/communication/communication.controller.d.ts +12 -0
  62. package/dist/assets/server/communication/communication.controller.js +61 -0
  63. package/dist/assets/server/communication/communication.controller.js.map +1 -0
  64. package/dist/assets/server/communication/communication.module.d.ts +2 -0
  65. package/dist/assets/server/communication/communication.module.js +25 -0
  66. package/dist/assets/server/communication/communication.module.js.map +1 -0
  67. package/dist/assets/server/communication/communication.service.d.ts +23 -0
  68. package/dist/assets/server/communication/communication.service.js +51 -0
  69. package/dist/assets/server/communication/communication.service.js.map +1 -0
  70. package/dist/assets/server/db/schema-validator.service.d.ts +25 -0
  71. package/dist/assets/server/db/schema-validator.service.js +107 -0
  72. package/dist/assets/server/db/schema-validator.service.js.map +1 -0
  73. package/dist/assets/server/db/schema-version.entity.d.ts +5 -0
  74. package/dist/assets/server/db/schema-version.entity.js +35 -0
  75. package/dist/assets/server/db/schema-version.entity.js.map +1 -0
  76. package/dist/assets/server/db/sqlite.module.d.ts +2 -0
  77. package/dist/assets/server/db/sqlite.module.js +79 -0
  78. package/dist/assets/server/db/sqlite.module.js.map +1 -0
  79. package/dist/assets/server/devops/devops-sink-init.d.ts +10 -0
  80. package/dist/assets/server/devops/devops-sink-init.js +96 -0
  81. package/dist/assets/server/devops/devops-sink-init.js.map +1 -0
  82. package/dist/assets/server/devops/devops-sink-init.spec.d.ts +1 -0
  83. package/dist/assets/server/devops/devops-sink-init.spec.js +71 -0
  84. package/dist/assets/server/devops/devops-sink-init.spec.js.map +1 -0
  85. package/dist/assets/server/devops/devops-sink.module.d.ts +2 -0
  86. package/dist/assets/server/devops/devops-sink.module.js +22 -0
  87. package/dist/assets/server/devops/devops-sink.module.js.map +1 -0
  88. package/dist/assets/server/extension/extension-control.controller.d.ts +67 -0
  89. package/dist/assets/server/extension/extension-control.controller.js +173 -0
  90. package/dist/assets/server/extension/extension-control.controller.js.map +1 -0
  91. package/dist/assets/server/extension/extension-control.service.d.ts +46 -0
  92. package/dist/assets/server/extension/extension-control.service.js +212 -0
  93. package/dist/assets/server/extension/extension-control.service.js.map +1 -0
  94. package/dist/assets/server/extension/extension-core.module.d.ts +2 -0
  95. package/dist/assets/server/extension/extension-core.module.js +21 -0
  96. package/dist/assets/server/extension/extension-core.module.js.map +1 -0
  97. package/dist/assets/server/extension/extension-version.controller.d.ts +6 -0
  98. package/dist/assets/server/extension/extension-version.controller.js +41 -0
  99. package/dist/assets/server/extension/extension-version.controller.js.map +1 -0
  100. package/dist/assets/server/extension/extension.module.d.ts +2 -0
  101. package/dist/assets/server/extension/extension.module.js +25 -0
  102. package/dist/assets/server/extension/extension.module.js.map +1 -0
  103. package/dist/assets/server/extraction/adapter.service.d.ts +41 -0
  104. package/dist/assets/server/extraction/adapter.service.js +161 -0
  105. package/dist/assets/server/extraction/adapter.service.js.map +1 -0
  106. package/dist/assets/server/extraction/entities/company-profile.entity.d.ts +14 -0
  107. package/dist/assets/server/extraction/entities/company-profile.entity.js +81 -0
  108. package/dist/assets/server/extraction/entities/company-profile.entity.js.map +1 -0
  109. package/dist/assets/server/extraction/entities/job-posting.entity.d.ts +15 -0
  110. package/dist/assets/server/extraction/entities/job-posting.entity.js +86 -0
  111. package/dist/assets/server/extraction/entities/job-posting.entity.js.map +1 -0
  112. package/dist/assets/server/extraction/entities/parse-log.entity.d.ts +15 -0
  113. package/dist/assets/server/extraction/entities/parse-log.entity.js +87 -0
  114. package/dist/assets/server/extraction/entities/parse-log.entity.js.map +1 -0
  115. package/dist/assets/server/extraction/entities/talent-profile.entity.d.ts +15 -0
  116. package/dist/assets/server/extraction/entities/talent-profile.entity.js +86 -0
  117. package/dist/assets/server/extraction/entities/talent-profile.entity.js.map +1 -0
  118. package/dist/assets/server/extraction/extraction-entity.controller.d.ts +100 -0
  119. package/dist/assets/server/extraction/extraction-entity.controller.js +310 -0
  120. package/dist/assets/server/extraction/extraction-entity.controller.js.map +1 -0
  121. package/dist/assets/server/extraction/extraction-rule.controller.d.ts +7 -0
  122. package/dist/assets/server/extraction/extraction-rule.controller.js +48 -0
  123. package/dist/assets/server/extraction/extraction-rule.controller.js.map +1 -0
  124. package/dist/assets/server/extraction/extraction-rule.entity.d.ts +15 -0
  125. package/dist/assets/server/extraction/extraction-rule.entity.js +80 -0
  126. package/dist/assets/server/extraction/extraction-rule.entity.js.map +1 -0
  127. package/dist/assets/server/extraction/extraction-rule.service.d.ts +24 -0
  128. package/dist/assets/server/extraction/extraction-rule.service.js +81 -0
  129. package/dist/assets/server/extraction/extraction-rule.service.js.map +1 -0
  130. package/dist/assets/server/extraction/extraction.module.d.ts +2 -0
  131. package/dist/assets/server/extraction/extraction.module.js +43 -0
  132. package/dist/assets/server/extraction/extraction.module.js.map +1 -0
  133. package/dist/assets/server/extraction/extraction.service.d.ts +62 -0
  134. package/dist/assets/server/extraction/extraction.service.js +347 -0
  135. package/dist/assets/server/extraction/extraction.service.js.map +1 -0
  136. package/dist/assets/server/extraction/script-rule.d.ts +13 -0
  137. package/dist/assets/server/extraction/script-rule.js +45 -0
  138. package/dist/assets/server/extraction/script-rule.js.map +1 -0
  139. package/dist/assets/server/extraction/structured-data.d.ts +7 -0
  140. package/dist/assets/server/extraction/structured-data.js +96 -0
  141. package/dist/assets/server/extraction/structured-data.js.map +1 -0
  142. package/dist/assets/server/hcapi/hcapi.module.d.ts +2 -0
  143. package/dist/assets/server/hcapi/hcapi.module.js +23 -0
  144. package/dist/assets/server/hcapi/hcapi.module.js.map +1 -0
  145. package/dist/assets/server/hcapi/hcapi.service.d.ts +28 -0
  146. package/dist/assets/server/hcapi/hcapi.service.js +81 -0
  147. package/dist/assets/server/hcapi/hcapi.service.js.map +1 -0
  148. package/dist/assets/server/health/health.controller.d.ts +19 -0
  149. package/dist/assets/server/health/health.controller.js +59 -0
  150. package/dist/assets/server/health/health.controller.js.map +1 -0
  151. package/dist/assets/server/jobcase/jobcase.controller.d.ts +12 -0
  152. package/dist/assets/server/jobcase/jobcase.controller.js +61 -0
  153. package/dist/assets/server/jobcase/jobcase.controller.js.map +1 -0
  154. package/dist/assets/server/jobcase/jobcase.entity.d.ts +13 -0
  155. package/dist/assets/server/jobcase/jobcase.entity.js +71 -0
  156. package/dist/assets/server/jobcase/jobcase.entity.js.map +1 -0
  157. package/dist/assets/server/jobcase/jobcase.module.d.ts +2 -0
  158. package/dist/assets/server/jobcase/jobcase.module.js +26 -0
  159. package/dist/assets/server/jobcase/jobcase.module.js.map +1 -0
  160. package/dist/assets/server/jobcase/jobcase.service.d.ts +21 -0
  161. package/dist/assets/server/jobcase/jobcase.service.js +56 -0
  162. package/dist/assets/server/jobcase/jobcase.service.js.map +1 -0
  163. package/dist/assets/server/llm/llm.module.d.ts +2 -0
  164. package/dist/assets/server/llm/llm.module.js +21 -0
  165. package/dist/assets/server/llm/llm.module.js.map +1 -0
  166. package/dist/assets/server/llm/llm.service.d.ts +18 -0
  167. package/dist/assets/server/llm/llm.service.js +65 -0
  168. package/dist/assets/server/llm/llm.service.js.map +1 -0
  169. package/dist/assets/server/main.d.ts +1 -0
  170. package/dist/assets/server/main.js +30 -0
  171. package/dist/assets/server/main.js.map +1 -0
  172. package/dist/assets/server/matching/matching.controller.d.ts +16 -0
  173. package/dist/assets/server/matching/matching.controller.js +97 -0
  174. package/dist/assets/server/matching/matching.controller.js.map +1 -0
  175. package/dist/assets/server/matching/matching.module.d.ts +2 -0
  176. package/dist/assets/server/matching/matching.module.js +36 -0
  177. package/dist/assets/server/matching/matching.module.js.map +1 -0
  178. package/dist/assets/server/matching/matching.service.d.ts +55 -0
  179. package/dist/assets/server/matching/matching.service.js +409 -0
  180. package/dist/assets/server/matching/matching.service.js.map +1 -0
  181. package/dist/assets/server/package.json +57 -0
  182. package/dist/assets/server/parsed-resume/parsed-resume.controller.d.ts +6 -0
  183. package/dist/assets/server/parsed-resume/parsed-resume.controller.js +42 -0
  184. package/dist/assets/server/parsed-resume/parsed-resume.controller.js.map +1 -0
  185. package/dist/assets/server/parsed-resume/parsed-resume.entity.d.ts +124 -0
  186. package/dist/assets/server/parsed-resume/parsed-resume.entity.js +72 -0
  187. package/dist/assets/server/parsed-resume/parsed-resume.entity.js.map +1 -0
  188. package/dist/assets/server/parsed-resume/parsed-resume.module.d.ts +2 -0
  189. package/dist/assets/server/parsed-resume/parsed-resume.module.js +26 -0
  190. package/dist/assets/server/parsed-resume/parsed-resume.module.js.map +1 -0
  191. package/dist/assets/server/parsed-resume/parsed-resume.service.d.ts +10 -0
  192. package/dist/assets/server/parsed-resume/parsed-resume.service.js +45 -0
  193. package/dist/assets/server/parsed-resume/parsed-resume.service.js.map +1 -0
  194. package/dist/assets/server/parsing/parse-error-report.entity.d.ts +11 -0
  195. package/dist/assets/server/parsing/parse-error-report.entity.js +66 -0
  196. package/dist/assets/server/parsing/parse-error-report.entity.js.map +1 -0
  197. package/dist/assets/server/parsing/parsing.controller.d.ts +19 -0
  198. package/dist/assets/server/parsing/parsing.controller.js +97 -0
  199. package/dist/assets/server/parsing/parsing.controller.js.map +1 -0
  200. package/dist/assets/server/parsing/parsing.module.d.ts +2 -0
  201. package/dist/assets/server/parsing/parsing.module.js +38 -0
  202. package/dist/assets/server/parsing/parsing.module.js.map +1 -0
  203. package/dist/assets/server/parsing/parsing.service.d.ts +38 -0
  204. package/dist/assets/server/parsing/parsing.service.js +263 -0
  205. package/dist/assets/server/parsing/parsing.service.js.map +1 -0
  206. package/dist/assets/server/query/fields-meta.controller.d.ts +28 -0
  207. package/dist/assets/server/query/fields-meta.controller.js +57 -0
  208. package/dist/assets/server/query/fields-meta.controller.js.map +1 -0
  209. package/dist/assets/server/query/query-builder.controller.d.ts +11 -0
  210. package/dist/assets/server/query/query-builder.controller.js +40 -0
  211. package/dist/assets/server/query/query-builder.controller.js.map +1 -0
  212. package/dist/assets/server/query/query-builder.service.d.ts +8 -0
  213. package/dist/assets/server/query/query-builder.service.js +41 -0
  214. package/dist/assets/server/query/query-builder.service.js.map +1 -0
  215. package/dist/assets/server/query/query.module.d.ts +2 -0
  216. package/dist/assets/server/query/query.module.js +23 -0
  217. package/dist/assets/server/query/query.module.js.map +1 -0
  218. package/dist/assets/server/recording/entities/recording-event.entity.d.ts +9 -0
  219. package/dist/assets/server/recording/entities/recording-event.entity.js +56 -0
  220. package/dist/assets/server/recording/entities/recording-event.entity.js.map +1 -0
  221. package/dist/assets/server/recording/recording.controller.d.ts +52 -0
  222. package/dist/assets/server/recording/recording.controller.js +73 -0
  223. package/dist/assets/server/recording/recording.controller.js.map +1 -0
  224. package/dist/assets/server/recording/recording.gateway.d.ts +15 -0
  225. package/dist/assets/server/recording/recording.gateway.js +117 -0
  226. package/dist/assets/server/recording/recording.gateway.js.map +1 -0
  227. package/dist/assets/server/recording/recording.module.d.ts +2 -0
  228. package/dist/assets/server/recording/recording.module.js +29 -0
  229. package/dist/assets/server/recording/recording.module.js.map +1 -0
  230. package/dist/assets/server/recording/recording.service.d.ts +59 -0
  231. package/dist/assets/server/recording/recording.service.js +111 -0
  232. package/dist/assets/server/recording/recording.service.js.map +1 -0
  233. package/dist/assets/server/remark/remark.controller.d.ts +21 -0
  234. package/dist/assets/server/remark/remark.controller.js +59 -0
  235. package/dist/assets/server/remark/remark.controller.js.map +1 -0
  236. package/dist/assets/server/remark/remark.entity.d.ts +18 -0
  237. package/dist/assets/server/remark/remark.entity.js +67 -0
  238. package/dist/assets/server/remark/remark.entity.js.map +1 -0
  239. package/dist/assets/server/remark/remark.module.d.ts +2 -0
  240. package/dist/assets/server/remark/remark.module.js +26 -0
  241. package/dist/assets/server/remark/remark.module.js.map +1 -0
  242. package/dist/assets/server/remark/remark.service.d.ts +8 -0
  243. package/dist/assets/server/remark/remark.service.js +39 -0
  244. package/dist/assets/server/remark/remark.service.js.map +1 -0
  245. package/dist/assets/server/report/report.controller.d.ts +18 -0
  246. package/dist/assets/server/report/report.controller.js +41 -0
  247. package/dist/assets/server/report/report.controller.js.map +1 -0
  248. package/dist/assets/server/report/report.module.d.ts +2 -0
  249. package/dist/assets/server/report/report.module.js +24 -0
  250. package/dist/assets/server/report/report.module.js.map +1 -0
  251. package/dist/assets/server/report/report.service.d.ts +23 -0
  252. package/dist/assets/server/report/report.service.js +54 -0
  253. package/dist/assets/server/report/report.service.js.map +1 -0
  254. package/dist/assets/server/rules/rules.controller.d.ts +6 -0
  255. package/dist/assets/server/rules/rules.controller.js +35 -0
  256. package/dist/assets/server/rules/rules.controller.js.map +1 -0
  257. package/dist/assets/server/rules/rules.module.d.ts +2 -0
  258. package/dist/assets/server/rules/rules.module.js +23 -0
  259. package/dist/assets/server/rules/rules.module.js.map +1 -0
  260. package/dist/assets/server/rules/rules.service.d.ts +10 -0
  261. package/dist/assets/server/rules/rules.service.js +26 -0
  262. package/dist/assets/server/rules/rules.service.js.map +1 -0
  263. package/dist/assets/server/search/search.controller.d.ts +6 -0
  264. package/dist/assets/server/search/search.controller.js +53 -0
  265. package/dist/assets/server/search/search.controller.js.map +1 -0
  266. package/dist/assets/server/search/search.module.d.ts +2 -0
  267. package/dist/assets/server/search/search.module.js +24 -0
  268. package/dist/assets/server/search/search.module.js.map +1 -0
  269. package/dist/assets/server/search/search.service.d.ts +6 -0
  270. package/dist/assets/server/search/search.service.js +46 -0
  271. package/dist/assets/server/search/search.service.js.map +1 -0
  272. package/dist/assets/server/sentry.d.ts +3 -0
  273. package/dist/assets/server/sentry.js +10 -0
  274. package/dist/assets/server/sentry.js.map +1 -0
  275. package/dist/assets/server/site/entities/site-registry.entity.d.ts +11 -0
  276. package/dist/assets/server/site/entities/site-registry.entity.js +66 -0
  277. package/dist/assets/server/site/entities/site-registry.entity.js.map +1 -0
  278. package/dist/assets/server/site/site.controller.d.ts +36 -0
  279. package/dist/assets/server/site/site.controller.js +60 -0
  280. package/dist/assets/server/site/site.controller.js.map +1 -0
  281. package/dist/assets/server/site/site.module.d.ts +2 -0
  282. package/dist/assets/server/site/site.module.js +26 -0
  283. package/dist/assets/server/site/site.module.js.map +1 -0
  284. package/dist/assets/server/site/site.service.d.ts +37 -0
  285. package/dist/assets/server/site/site.service.js +134 -0
  286. package/dist/assets/server/site/site.service.js.map +1 -0
  287. package/dist/assets/server/snapshot/raw-snapshot.entity.d.ts +35 -0
  288. package/dist/assets/server/snapshot/raw-snapshot.entity.js +62 -0
  289. package/dist/assets/server/snapshot/raw-snapshot.entity.js.map +1 -0
  290. package/dist/assets/server/snapshot/snapshot.controller.d.ts +18 -0
  291. package/dist/assets/server/snapshot/snapshot.controller.js +76 -0
  292. package/dist/assets/server/snapshot/snapshot.controller.js.map +1 -0
  293. package/dist/assets/server/snapshot/snapshot.module.d.ts +2 -0
  294. package/dist/assets/server/snapshot/snapshot.module.js +26 -0
  295. package/dist/assets/server/snapshot/snapshot.module.js.map +1 -0
  296. package/dist/assets/server/snapshot/snapshot.service.d.ts +10 -0
  297. package/dist/assets/server/snapshot/snapshot.service.js +48 -0
  298. package/dist/assets/server/snapshot/snapshot.service.js.map +1 -0
  299. package/dist/assets/server/system/system.controller.d.ts +39 -0
  300. package/dist/assets/server/system/system.controller.js +93 -0
  301. package/dist/assets/server/system/system.controller.js.map +1 -0
  302. package/dist/assets/server/system/system.module.d.ts +2 -0
  303. package/dist/assets/server/system/system.module.js +26 -0
  304. package/dist/assets/server/system/system.module.js.map +1 -0
  305. package/dist/assets/server/system/system.service.d.ts +86 -0
  306. package/dist/assets/server/system/system.service.js +433 -0
  307. package/dist/assets/server/system/system.service.js.map +1 -0
  308. package/dist/assets/server/talent-fingerprint/fingerprint-match.service.d.ts +28 -0
  309. package/dist/assets/server/talent-fingerprint/fingerprint-match.service.js +186 -0
  310. package/dist/assets/server/talent-fingerprint/fingerprint-match.service.js.map +1 -0
  311. package/dist/assets/server/talent-fingerprint/talent-fingerprint.entity.d.ts +30 -0
  312. package/dist/assets/server/talent-fingerprint/talent-fingerprint.entity.js +55 -0
  313. package/dist/assets/server/talent-fingerprint/talent-fingerprint.entity.js.map +1 -0
  314. package/dist/assets/server/talent-fingerprint/talent-fingerprint.module.d.ts +2 -0
  315. package/dist/assets/server/talent-fingerprint/talent-fingerprint.module.js +25 -0
  316. package/dist/assets/server/talent-fingerprint/talent-fingerprint.module.js.map +1 -0
  317. package/dist/assets/server/talent-fingerprint/talent-fingerprint.service.d.ts +8 -0
  318. package/dist/assets/server/talent-fingerprint/talent-fingerprint.service.js +44 -0
  319. package/dist/assets/server/talent-fingerprint/talent-fingerprint.service.js.map +1 -0
  320. package/dist/assets/server/talent-job-match/talent-job-match.controller.d.ts +6 -0
  321. package/dist/assets/server/talent-job-match/talent-job-match.controller.js +42 -0
  322. package/dist/assets/server/talent-job-match/talent-job-match.controller.js.map +1 -0
  323. package/dist/assets/server/talent-job-match/talent-job-match.entity.d.ts +33 -0
  324. package/dist/assets/server/talent-job-match/talent-job-match.entity.js +73 -0
  325. package/dist/assets/server/talent-job-match/talent-job-match.entity.js.map +1 -0
  326. package/dist/assets/server/talent-job-match/talent-job-match.module.d.ts +2 -0
  327. package/dist/assets/server/talent-job-match/talent-job-match.module.js +26 -0
  328. package/dist/assets/server/talent-job-match/talent-job-match.module.js.map +1 -0
  329. package/dist/assets/server/talent-job-match/talent-job-match.service.d.ts +9 -0
  330. package/dist/assets/server/talent-job-match/talent-job-match.service.js +42 -0
  331. package/dist/assets/server/talent-job-match/talent-job-match.service.js.map +1 -0
  332. package/dist/assets/server/talent-portrait/portrait-merge.service.d.ts +17 -0
  333. package/dist/assets/server/talent-portrait/portrait-merge.service.js +200 -0
  334. package/dist/assets/server/talent-portrait/portrait-merge.service.js.map +1 -0
  335. package/dist/assets/server/talent-portrait/talent-portrait.controller.d.ts +7 -0
  336. package/dist/assets/server/talent-portrait/talent-portrait.controller.js +52 -0
  337. package/dist/assets/server/talent-portrait/talent-portrait.controller.js.map +1 -0
  338. package/dist/assets/server/talent-portrait/talent-portrait.entity.d.ts +91 -0
  339. package/dist/assets/server/talent-portrait/talent-portrait.entity.js +71 -0
  340. package/dist/assets/server/talent-portrait/talent-portrait.entity.js.map +1 -0
  341. package/dist/assets/server/talent-portrait/talent-portrait.module.d.ts +2 -0
  342. package/dist/assets/server/talent-portrait/talent-portrait.module.js +27 -0
  343. package/dist/assets/server/talent-portrait/talent-portrait.module.js.map +1 -0
  344. package/dist/assets/server/talent-portrait/talent-portrait.service.d.ts +10 -0
  345. package/dist/assets/server/talent-portrait/talent-portrait.service.js +46 -0
  346. package/dist/assets/server/talent-portrait/talent-portrait.service.js.map +1 -0
  347. package/dist/assets/server/telemetry/telemetry.module.d.ts +2 -0
  348. package/dist/assets/server/telemetry/telemetry.module.js +24 -0
  349. package/dist/assets/server/telemetry/telemetry.module.js.map +1 -0
  350. package/dist/assets/server/telemetry/telemetry.service.d.ts +29 -0
  351. package/dist/assets/server/telemetry/telemetry.service.js +116 -0
  352. package/dist/assets/server/telemetry/telemetry.service.js.map +1 -0
  353. package/dist/bundled-assets.d.ts +22 -0
  354. package/dist/bundled-assets.js +80 -0
  355. package/dist/cache/db.js +10 -54
  356. package/dist/commands/addons.js +46 -71
  357. package/dist/commands/cache.js +29 -27
  358. package/dist/commands/config.d.ts +1 -1
  359. package/dist/commands/config.js +8 -12
  360. package/dist/commands/doctor.d.ts +0 -1
  361. package/dist/commands/doctor.js +52 -67
  362. package/dist/commands/extension.js +82 -96
  363. package/dist/commands/extras.d.ts +31 -1
  364. package/dist/commands/extras.js +248 -61
  365. package/dist/commands/init.js +18 -46
  366. package/dist/commands/install.js +20 -52
  367. package/dist/commands/job.js +27 -65
  368. package/dist/commands/login.js +50 -37
  369. package/dist/commands/logout.js +8 -12
  370. package/dist/commands/ops.js +94 -67
  371. package/dist/commands/record.js +21 -59
  372. package/dist/commands/report.js +14 -18
  373. package/dist/commands/search.js +14 -21
  374. package/dist/commands/server.d.ts +1 -1
  375. package/dist/commands/server.js +126 -112
  376. package/dist/commands/status.js +23 -27
  377. package/dist/commands/update.js +44 -79
  378. package/dist/config.d.ts +3 -0
  379. package/dist/config.js +12 -46
  380. package/dist/i18n/index.js +5 -11
  381. package/dist/i18n/locales/en-US.json +24 -1
  382. package/dist/i18n/locales/zh-CN.json +24 -1
  383. package/dist/index.cmd +3 -0
  384. package/dist/index.js +83 -98
  385. package/dist/index.ps1 +3 -0
  386. package/dist/keychain.js +9 -44
  387. package/dist/logger.d.ts +7 -0
  388. package/dist/logger.js +80 -0
  389. package/dist/native-check.d.ts +6 -0
  390. package/dist/native-check.js +23 -0
  391. package/dist/sentry.js +4 -8
  392. package/dist/updater.js +15 -52
  393. package/dist/utils/proc.d.ts +35 -0
  394. package/dist/utils/proc.js +81 -0
  395. package/dist/utils/spawn.d.ts +19 -0
  396. package/dist/utils/spawn.js +60 -0
  397. package/dist/version.d.ts +1 -1
  398. package/dist/version.js +183 -81
  399. package/dist/watchdog.d.ts +1 -0
  400. package/dist/watchdog.js +128 -0
  401. package/package.json +5 -4
  402. package/dist/commands/native-check.d.ts +0 -22
  403. package/dist/commands/native-check.js +0 -93
@@ -1,62 +1,22 @@
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.recordCommand = void 0;
40
- exports.runRecordTranscript = runRecordTranscript;
41
- exports.runRecordCall = runRecordCall;
42
- const commander_1 = require("commander");
43
- const fs = __importStar(require("fs"));
44
- const axios_1 = __importDefault(require("axios"));
45
- const uuid_1 = require("uuid");
46
- const config_1 = require("../config");
47
- const keychain_1 = require("../keychain");
48
- const db_1 = require("../cache/db");
49
- async function runRecordTranscript(filePath, options) {
50
- const config = (0, config_1.loadConfig)();
51
- const token = await (0, keychain_1.getToken)();
1
+ import { Command } from 'commander';
2
+ import * as fs from 'fs';
3
+ import axios from 'axios';
4
+ import { v4 as uuidv4 } from 'uuid';
5
+ import { loadConfig } from '../config.js';
6
+ import { getToken } from '../keychain.js';
7
+ import { ensureCacheDir } from '../cache/db.js';
8
+ import { getCliLogger } from '../logger.js';
9
+ export async function runRecordTranscript(filePath, options) {
10
+ const config = loadConfig();
11
+ const token = await getToken();
52
12
  const headers = token ? { Authorization: `UTOKEN ${token}` } : {};
53
13
  if (!fs.existsSync(filePath)) {
54
14
  throw new Error(`文件不存在: ${filePath}`);
55
15
  }
56
16
  const transcript = fs.readFileSync(filePath, 'utf-8');
57
- (0, db_1.ensureCacheDir)();
58
- const res = await axios_1.default.post(`${config.serverUrl}/communication-records`, {
59
- externalId: (0, uuid_1.v4)(),
17
+ ensureCacheDir();
18
+ const res = await axios.post(`${config.serverUrl}/communication-records`, {
19
+ externalId: uuidv4(),
60
20
  type: options.type || 'call',
61
21
  transcript,
62
22
  personId: options.personId ? parseInt(options.personId, 10) : undefined,
@@ -64,12 +24,12 @@ async function runRecordTranscript(filePath, options) {
64
24
  }, { headers, proxy: false });
65
25
  return res.data;
66
26
  }
67
- function runRecordCall(audioFile) {
27
+ export function runRecordCall(audioFile) {
68
28
  return { audioFile, note: 'STT 处理待接入(本地 faster-whisper 或云端 Whisper API)。' };
69
29
  }
70
- exports.recordCommand = new commander_1.Command('record')
30
+ export const recordCommand = new Command('record')
71
31
  .description('沟通记录/录音归档');
72
- exports.recordCommand
32
+ recordCommand
73
33
  .command('transcript <file>')
74
34
  .description('上传转写文本并生成沟通记录草稿')
75
35
  .option('--type <type>', '记录类型(call/wechat/email/audio/meeting)', 'call')
@@ -82,11 +42,13 @@ exports.recordCommand
82
42
  console.log('请使用本地 LLM 对转写文本做 NER/摘要/实体链接后确认归档。');
83
43
  }
84
44
  catch (err) {
85
- console.error('上传失败:', err.response?.data?.message || err.message);
45
+ getCliLogger().error('record:upload-failed', {
46
+ error: err.response?.data?.message || err.message,
47
+ });
86
48
  process.exit(1);
87
49
  }
88
50
  });
89
- exports.recordCommand
51
+ recordCommand
90
52
  .command('call <audioFile>')
91
53
  .description('上传音频文件(MVP 阶段仅保存路径,STT 由本地或云端后续处理)')
92
54
  .action((audioFile) => {
@@ -1,28 +1,22 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.reportCommand = void 0;
7
- exports.runReportSales = runReportSales;
8
- const commander_1 = require("commander");
9
- const axios_1 = __importDefault(require("axios"));
10
- const config_1 = require("../config");
11
- const keychain_1 = require("../keychain");
12
- async function runReportSales(customerId, options) {
13
- const config = (0, config_1.loadConfig)();
14
- const token = await (0, keychain_1.getToken)();
1
+ import { Command } from 'commander';
2
+ import axios from 'axios';
3
+ import { loadConfig } from '../config.js';
4
+ import { getToken } from '../keychain.js';
5
+ import { getCliLogger } from '../logger.js';
6
+ export async function runReportSales(customerId, options) {
7
+ const config = loadConfig();
8
+ const token = await getToken();
15
9
  const headers = token ? { Authorization: `UTOKEN ${token}` } : {};
16
- const res = await axios_1.default.get(`${config.serverUrl}/reports/sales/${encodeURIComponent(customerId)}`, {
10
+ const res = await axios.get(`${config.serverUrl}/reports/sales/${encodeURIComponent(customerId)}`, {
17
11
  headers,
18
12
  params: { name: options.name, industry: options.industry },
19
13
  proxy: false,
20
14
  });
21
15
  return res.data;
22
16
  }
23
- exports.reportCommand = new commander_1.Command('report')
17
+ export const reportCommand = new Command('report')
24
18
  .description('生成报告');
25
- exports.reportCommand
19
+ reportCommand
26
20
  .command('sales <customerId>')
27
21
  .description('生成 BD 销售方案报告')
28
22
  .option('--name <name>', '客户名称')
@@ -48,7 +42,9 @@ exports.reportCommand
48
42
  console.log('> 请使用本地 LLM 基于以上原始数据生成最终销售方案与交付节奏。');
49
43
  }
50
44
  catch (err) {
51
- console.error('生成报告失败:', err.response?.data?.message || err.message);
45
+ getCliLogger().error('report:generate-failed', {
46
+ error: err.response?.data?.message || err.message,
47
+ });
52
48
  process.exit(1);
53
49
  }
54
50
  });
@@ -1,18 +1,11 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.searchCommand = void 0;
7
- exports.runSearch = runSearch;
8
- const commander_1 = require("commander");
9
- const axios_1 = __importDefault(require("axios"));
10
- const config_1 = require("../config");
11
- const keychain_1 = require("../keychain");
12
- const i18n_1 = require("../i18n");
13
- async function runSearch(options) {
14
- const config = (0, config_1.loadConfig)();
15
- const token = await (0, keychain_1.getToken)();
1
+ import { Command } from 'commander';
2
+ import axios from 'axios';
3
+ import { loadConfig } from '../config.js';
4
+ import { getToken } from '../keychain.js';
5
+ import { i18n } from '../i18n/index.js';
6
+ export async function runSearch(options) {
7
+ const config = loadConfig();
8
+ const token = await getToken();
16
9
  const params = {
17
10
  keyword: options.keyword || options.filter,
18
11
  areaId: options.areaId,
@@ -22,24 +15,24 @@ async function runSearch(options) {
22
15
  limit: options.limit || options.top,
23
16
  source: options.source,
24
17
  };
25
- const res = await axios_1.default.get(`${config.serverUrl}/search/talent`, {
18
+ const res = await axios.get(`${config.serverUrl}/search/talent`, {
26
19
  headers: token ? { Authorization: `UTOKEN ${token}` } : {},
27
20
  params,
28
21
  proxy: false,
29
22
  });
30
23
  return res.data;
31
24
  }
32
- exports.searchCommand = new commander_1.Command('search')
33
- .description(i18n_1.i18n.t('search.description'))
34
- .option('--filter <filter>', i18n_1.i18n.t('search.filter'))
25
+ export const searchCommand = new Command('search')
26
+ .description(i18n.t('search.description'))
27
+ .option('--filter <filter>', i18n.t('search.filter'))
35
28
  .option('--keyword <keyword>', '搜索关键词')
36
29
  .option('--areaId <areaId>', '现居地 ID')
37
30
  .option('--postId <postId>', '职位 ID')
38
31
  .option('--nationalityId <nationalityId>', '国籍 ID')
39
32
  .option('--page <n>', '页码', '1')
40
33
  .option('--limit <n>', '每页数量', '10')
41
- .option('--source <sources>', i18n_1.i18n.t('search.source'), 'u_person')
42
- .option('--top <n>', i18n_1.i18n.t('search.top'), '10')
34
+ .option('--source <sources>', i18n.t('search.source'), 'u_person')
35
+ .option('--top <n>', i18n.t('search.top'), '10')
43
36
  .action(async (options) => {
44
37
  const data = await runSearch(options);
45
38
  console.log(JSON.stringify(data, null, 2));
@@ -1,7 +1,7 @@
1
1
  import { Command } from 'commander';
2
2
  declare function tryReadPid(): number | null;
3
3
  export { tryReadPid };
4
- /** 定位 packages/server 包根(dist 优先,ts-node 开发模式兜底);找不到返回 null */
4
+ /** 定位 server 包根(dist 优先,ts-node 开发模式兜底);找不到返回 null */
5
5
  export declare function findServerRoot(): string | null;
6
6
  /** 对应 ChromePilot start: 启动本地 NestJS Server(提供 REST + WebSocket + SPA) */
7
7
  export declare function runStart(opts: {
@@ -1,57 +1,21 @@
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.stopCommand = exports.startCommand = void 0;
37
- exports.tryReadPid = tryReadPid;
38
- exports.findServerRoot = findServerRoot;
39
- exports.runStart = runStart;
40
- exports.runStop = runStop;
41
- const commander_1 = require("commander");
42
- const fs = __importStar(require("fs"));
43
- const path = __importStar(require("path"));
44
- const child_process_1 = require("child_process");
45
- const config_1 = require("../config");
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 { spawn } from 'child_process';
6
+ import { loadConfig, saveConfig } from '../config.js';
7
+ import { killGracefullySync } from '../utils/proc.js';
8
+ import { findBundledAssets } from '../bundled-assets.js';
9
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
46
10
  const PID_FILE = () => path.join(process.env.HUNTER_MATE_HOME || process.env.HOME || process.env.USERPROFILE || '.', '.hunter-mate', 'server.pid');
47
11
  const LOG_FILE = () => PID_FILE().replace(/server\.pid$/, 'server.log');
48
- function tryReadPid() {
12
+ const WATCHDOG_PID_FILE = () => PID_FILE().replace(/server\.pid$/, 'watchdog.pid');
13
+ function tryReadPidFile(file) {
49
14
  try {
50
- const raw = fs.readFileSync(PID_FILE(), 'utf-8').trim();
15
+ const raw = fs.readFileSync(file, 'utf-8').trim();
51
16
  const pid = Number(raw);
52
17
  if (!pid || !Number.isInteger(pid))
53
18
  return null;
54
- // 探测进程是否存活
55
19
  process.kill(pid, 0);
56
20
  return pid;
57
21
  }
@@ -59,26 +23,44 @@ function tryReadPid() {
59
23
  return null;
60
24
  }
61
25
  }
62
- /** 定位 packages/server 包根(dist 优先,ts-node 开发模式兜底);找不到返回 null */
63
- function findServerRoot() {
64
- const candidates = [
65
- // 1) 已构建: CLI 包定位到并列 server 包
26
+ function cleanPidFile(file) {
27
+ try {
28
+ fs.unlinkSync(file);
29
+ }
30
+ catch { /* ignore */ }
31
+ }
32
+ function tryReadPid() {
33
+ const pid = tryReadPidFile(PID_FILE());
34
+ if (pid)
35
+ return pid;
36
+ cleanPidFile(PID_FILE());
37
+ return null;
38
+ }
39
+ export { tryReadPid };
40
+ /** 定位 server 包根(dist 优先,ts-node 开发模式兜底);找不到返回 null */
41
+ export function findServerRoot() {
42
+ // dev/monorepo 模式优先用原始 packages/server,避免复制到 assets 后因 node_modules 解析失败
43
+ const monorepoCandidates = [
66
44
  path.resolve(__dirname, '../../../server/dist/main.js'),
67
- // 2) ts-node 开发模式
68
45
  path.resolve(__dirname, '../../../server/src/main.ts'),
69
46
  ];
70
- for (const c of candidates) {
47
+ for (const c of monorepoCandidates) {
71
48
  if (fs.existsSync(c))
72
49
  return path.dirname(path.dirname(c));
73
50
  }
51
+ // fallback:bundled-assets(npm 安装模式:dist/assets/server/main.js 已存在)
52
+ const bundled = findBundledAssets();
53
+ if (bundled) {
54
+ return path.dirname(bundled.serverEntry);
55
+ }
74
56
  return null;
75
57
  }
76
58
  /** 对应 ChromePilot start: 启动本地 NestJS Server(提供 REST + WebSocket + SPA) */
77
- async function runStart(opts) {
78
- const config = (0, config_1.loadConfig)();
59
+ export async function runStart(opts) {
60
+ const config = loadConfig();
79
61
  const defaultPort = new URL(config.serverUrl).port
80
62
  ? Number(new URL(config.serverUrl).port)
81
- : 34567;
63
+ : 34570;
82
64
  const port = opts.port ?? defaultPort;
83
65
  const host = opts.host ?? '127.0.0.1';
84
66
  const url = `http://${host}:${port}`;
@@ -86,31 +68,38 @@ async function runStart(opts) {
86
68
  if (existing) {
87
69
  // 已在运行: 先做版本一致性检测(磁盘版本 vs 运行版本,server 不一致则自动重启)
88
70
  // 动态 import 避免与 version.ts 的循环依赖(version.ts 静态引入本文件的 runStart/runStop)
89
- const { ensureRuntimeConsistency } = await Promise.resolve().then(() => __importStar(require('../version')));
71
+ const { ensureRuntimeConsistency } = await import('../version.js');
90
72
  const report = await ensureRuntimeConsistency({ force: true });
91
73
  if (report.actions.serverRestart && report.performed.length) {
92
74
  return { started: true, pid: null, url, msg: report.performed.join('; ') };
93
75
  }
94
76
  return { started: false, pid: existing, url, msg: `server already running (pid=${existing})` };
95
77
  }
96
- // server 入口: monorepo 下 packages/server/dist/main.js 或 src/main.ts(开发模式 ts-node)
78
+ // server 入口: bundled 模式下 <cli>/dist/assets/server/main.js;monorepo 下 packages/server/dist/main.js 或 src/main.ts(开发模式 ts-node)
97
79
  const serverRoot = findServerRoot();
98
80
  let entry = null;
99
81
  if (serverRoot) {
100
- const built = path.join(serverRoot, 'dist', 'main.js');
101
- const dev = path.join(serverRoot, 'src', 'main.ts');
102
- if (fs.existsSync(built))
103
- entry = built;
104
- else if (fs.existsSync(dev))
105
- entry = dev;
82
+ const candidates = [
83
+ path.join(serverRoot, 'main.js'),
84
+ path.join(serverRoot, 'dist', 'main.js'),
85
+ path.join(serverRoot, 'src', 'main.ts'),
86
+ ];
87
+ for (const c of candidates) {
88
+ if (fs.existsSync(c)) {
89
+ entry = c;
90
+ break;
91
+ }
92
+ }
106
93
  }
107
94
  if (!entry) {
108
95
  return {
109
96
  started: false,
110
97
  pid: null,
111
98
  url,
112
- msg: `未找到 hunter-mate server 入口 (packages/server/dist|src)。` +
113
- `请先在 hunter-mate monorepo 执行 pnpm --filter @hunter-mate/server build,或单独启动 NestJS server 并把 serverUrl 指向它(hunter-mate config serverUrl ${url})。`,
99
+ msg: `✗ hunter-mate 启动失败:本 npm 包未包含 server 资产。\n` +
100
+ ` - 若你正在 monorepo 开发,先执行 pnpm --filter @hunter-mate/server build 让 server dist 进入 packages/cli/dist/assets/server/。\n` +
101
+ ` - 若你已 npm install -g hunter-mate,完整终端分发包需联系 Hiredchina IT 索要(含 server + Chrome 扩展)。\n` +
102
+ ` - 临时绕过:单独启动 NestJS server,把 serverUrl 指向它(hunter-mate config serverUrl ${url})。`,
114
103
  };
115
104
  }
116
105
  const env = {
@@ -125,7 +114,7 @@ async function runStart(opts) {
125
114
  }
126
115
  let child;
127
116
  if (opts.foreground) {
128
- child = (0, child_process_1.spawn)(process.execPath, [...nodeArgs, entry], {
117
+ child = spawn(process.execPath, [...nodeArgs, entry], {
129
118
  stdio: 'inherit',
130
119
  env,
131
120
  });
@@ -134,56 +123,64 @@ async function runStart(opts) {
134
123
  const logDir = path.dirname(LOG_FILE());
135
124
  if (!fs.existsSync(logDir))
136
125
  fs.mkdirSync(logDir, { recursive: true });
137
- const logStream = fs.createWriteStream(LOG_FILE(), { flags: 'a' });
138
- child = (0, child_process_1.spawn)(process.execPath, [...nodeArgs, entry], {
139
- stdio: ['ignore', 'pipe', 'pipe'],
140
- env,
126
+ // 后台模式由独立 watchdog 进程托管 server,实现崩溃后自动重启
127
+ const watchdogEntry = path.resolve(__dirname, '../watchdog.js');
128
+ if (!fs.existsSync(watchdogEntry)) {
129
+ return {
130
+ started: false,
131
+ pid: null,
132
+ url,
133
+ msg: `✗ 启动失败:找不到 watchdog 入口 ${watchdogEntry},请先执行 pnpm --filter @hunter-mate/cli build`,
134
+ };
135
+ }
136
+ const watchdogEnv = {
137
+ ...process.env,
138
+ HM_SERVER_ENTRY: entry,
139
+ HM_SERVER_LOG: LOG_FILE(),
140
+ HM_SERVER_NODE_ARGS: nodeArgs.join(','),
141
+ PORT: String(port),
142
+ HOST: host,
143
+ };
144
+ const wd = spawn(process.execPath, [watchdogEntry], {
145
+ stdio: 'ignore',
146
+ env: watchdogEnv,
141
147
  detached: true,
148
+ windowsHide: true,
142
149
  });
143
- child.stdout?.pipe(logStream);
144
- child.stderr?.pipe(logStream);
145
- child.unref();
146
- if (child.pid)
147
- fs.writeFileSync(PID_FILE(), String(child.pid));
148
- // 秒死检测:server 若因原生模块 ABI 不匹配/依赖缺失等问题起来即崩,
149
- // 写完 pid 即返回会表现假成功("started" 但实际已死)。
150
- // 轮询最长 4.2s:进程退出 = 读 server.log 尾部输出真实报错;health 可达 = 存活实锤提前放行。
151
- // (NestJS 冷启动可能较慢,进程仍活但 health 未达不算失败,交由上层轮询)
152
- const deadline = Date.now() + 4200;
153
- let died = false;
150
+ wd.unref();
151
+ if (wd.pid)
152
+ fs.writeFileSync(WATCHDOG_PID_FILE(), String(wd.pid));
153
+ // 等待 server health 就绪(最多 8s)
154
+ const deadline = Date.now() + 8000;
155
+ let ready = false;
154
156
  while (Date.now() < deadline) {
155
157
  await new Promise((r) => setTimeout(r, 500));
156
- try {
157
- process.kill(child.pid, 0);
158
- }
159
- catch {
160
- died = true;
161
- break;
162
- }
163
158
  try {
164
159
  const res = await fetch(`${url}/health`, { signal: AbortSignal.timeout(800) });
165
- if (res.ok)
160
+ if (res.ok) {
161
+ ready = true;
166
162
  break;
163
+ }
167
164
  }
168
165
  catch { /* server 尚未监听,继续轮询 */ }
166
+ // watchdog 自身退出说明启动参数/入口有问题
167
+ if (!tryReadPidFile(WATCHDOG_PID_FILE()))
168
+ break;
169
169
  }
170
- if (died) {
170
+ if (!ready) {
171
171
  let tail = '';
172
172
  try {
173
173
  const log = fs.readFileSync(LOG_FILE(), 'utf-8');
174
174
  tail = log.split('\n').slice(-30).join('\n').trim();
175
175
  }
176
176
  catch { /* ignore */ }
177
- try {
178
- fs.unlinkSync(PID_FILE());
179
- }
180
- catch { /* ignore */ }
177
+ cleanPidFile(WATCHDOG_PID_FILE());
181
178
  return {
182
179
  started: false,
183
- pid: null,
180
+ pid: wd.pid ?? null,
184
181
  url,
185
- msg: `✗ server 启动后立即退出(pid=${child.pid}),日志尾部:\n${tail || '(server.log 为空)'}\n` +
186
- `排障: hunter-mate doctor(含原生模块 ABI 自检)或 TROUBLESHOOTING.md#server-启动即崩abi`,
182
+ msg: `✗ server watchdog 启动后未就绪(pid=${wd.pid}),日志尾部:\n${tail || '(server.log 为空)'}\n` +
183
+ `排障: hunter-mate doctor 或 TROUBLESHOOTING.md#server-启动即崩abi`,
187
184
  };
188
185
  }
189
186
  // 持久化: 如果 port 变了就写回 config(避免下次 serverUrl 不对)
@@ -192,28 +189,45 @@ async function runStart(opts) {
192
189
  if (Number(u.port) !== port) {
193
190
  u.port = String(port);
194
191
  u.hostname = host;
195
- (0, config_1.saveConfig)({ serverUrl: u.origin });
192
+ saveConfig({ serverUrl: u.origin });
196
193
  }
197
194
  }
198
195
  catch { /* ignore */ }
199
- return { started: true, pid: child.pid ?? null, url, msg: `server started (pid=${child.pid}) on ${url} — logs: ${LOG_FILE()}` };
196
+ return { started: true, pid: wd.pid ?? null, url, msg: `server watchdog started (pid=${wd.pid}) on ${url} — logs: ${LOG_FILE()}` };
200
197
  }
201
- function runStop() {
198
+ export function runStop() {
199
+ // 优先停止 watchdog,让它去停止子 server
200
+ const wdPid = tryReadPidFile(WATCHDOG_PID_FILE());
201
+ if (wdPid) {
202
+ const ok = killGracefullySync(wdPid);
203
+ cleanPidFile(WATCHDOG_PID_FILE());
204
+ if (ok) {
205
+ // 给 watchdog 一点时间清理 server.pid
206
+ try {
207
+ const pid = tryReadPid();
208
+ if (pid) {
209
+ killGracefullySync(pid);
210
+ cleanPidFile(PID_FILE());
211
+ }
212
+ }
213
+ catch { /* ignore */ }
214
+ return { stopped: true, pid: wdPid, msg: `server watchdog stopped (pid=${wdPid})` };
215
+ }
216
+ }
217
+ // fallback:直接停止 server
202
218
  const pid = tryReadPid();
203
219
  if (!pid)
204
220
  return { stopped: false, pid: null, msg: 'no server.pid found or process dead' };
205
- try {
206
- process.kill(pid, 'SIGTERM');
207
- fs.unlinkSync(PID_FILE());
208
- return { stopped: true, pid, msg: `server stopped (pid=${pid})` };
209
- }
210
- catch (err) {
211
- return { stopped: false, pid, msg: `failed to kill ${pid}: ${err.message}` };
221
+ const ok = killGracefullySync(pid);
222
+ if (!ok) {
223
+ return { stopped: false, pid, msg: `failed to signal ${pid}` };
212
224
  }
225
+ cleanPidFile(PID_FILE());
226
+ return { stopped: true, pid, msg: `server stopped (pid=${pid})` };
213
227
  }
214
- exports.startCommand = new commander_1.Command('start')
228
+ export const startCommand = new Command('start')
215
229
  .description('启动本地 NestJS server(REST + WebSocket + SPA),对应 chromepilot start')
216
- .option('-p, --port <port>', 'server 端口,默认从 config.serverUrl 解析或 34567')
230
+ .option('-p, --port <port>', 'server 端口,默认从 config.serverUrl 解析或 34570')
217
231
  .option('-h, --host <host>', '绑定 host,默认 127.0.0.1', '127.0.0.1')
218
232
  .option('-f, --foreground', '前台运行(默认后台 daemon,写 server.pid + server.log)')
219
233
  .action(async (opts) => {
@@ -222,7 +236,7 @@ exports.startCommand = new commander_1.Command('start')
222
236
  if (!r.started && !r.pid)
223
237
  process.exit(1);
224
238
  });
225
- exports.stopCommand = new commander_1.Command('stop')
239
+ export const stopCommand = new Command('stop')
226
240
  .description('停止本地 server(读 ~/.hunter-mate/server.pid 并 SIGTERM)')
227
241
  .action(() => {
228
242
  const r = runStop();