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.
- package/LICENSE +21 -0
- package/dist/assets/extension/_locales/en_US/messages.json +5 -0
- package/dist/assets/extension/_locales/zh_CN/messages.json +5 -0
- package/dist/assets/extension/background/service-worker.js +3342 -0
- package/dist/assets/extension/content/index.js +13765 -0
- package/dist/assets/extension/manifest.json +47 -0
- package/dist/assets/extension/package.json +24 -0
- package/dist/assets/extension/sidepanel/index.html +400 -0
- package/dist/assets/extension/sidepanel/index.js +926 -0
- package/dist/assets/server/agent-session/agent-session.controller.d.ts +32 -0
- package/dist/assets/server/agent-session/agent-session.controller.js +83 -0
- package/dist/assets/server/agent-session/agent-session.controller.js.map +1 -0
- package/dist/assets/server/agent-session/agent-session.guard.d.ts +4 -0
- package/dist/assets/server/agent-session/agent-session.guard.js +32 -0
- package/dist/assets/server/agent-session/agent-session.guard.js.map +1 -0
- package/dist/assets/server/agent-session/agent-session.module.d.ts +2 -0
- package/dist/assets/server/agent-session/agent-session.module.js +28 -0
- package/dist/assets/server/agent-session/agent-session.module.js.map +1 -0
- package/dist/assets/server/agent-session/agent-session.service.d.ts +54 -0
- package/dist/assets/server/agent-session/agent-session.service.js +431 -0
- package/dist/assets/server/agent-session/agent-session.service.js.map +1 -0
- package/dist/assets/server/agent-session/agent-session.types.d.ts +56 -0
- package/dist/assets/server/agent-session/agent-session.types.js +3 -0
- package/dist/assets/server/agent-session/agent-session.types.js.map +1 -0
- package/dist/assets/server/agent-session/entities/agent-event.entity.d.ts +12 -0
- package/dist/assets/server/agent-session/entities/agent-event.entity.js +73 -0
- package/dist/assets/server/agent-session/entities/agent-event.entity.js.map +1 -0
- package/dist/assets/server/agent-session/entities/agent-message.entity.d.ts +13 -0
- package/dist/assets/server/agent-session/entities/agent-message.entity.js +77 -0
- package/dist/assets/server/agent-session/entities/agent-message.entity.js.map +1 -0
- package/dist/assets/server/agent-session/entities/agent-session.entity.d.ts +14 -0
- package/dist/assets/server/agent-session/entities/agent-session.entity.js +83 -0
- package/dist/assets/server/agent-session/entities/agent-session.entity.js.map +1 -0
- package/dist/assets/server/app.module.d.ts +4 -0
- package/dist/assets/server/app.module.js +127 -0
- package/dist/assets/server/app.module.js.map +1 -0
- package/dist/assets/server/auth/auth.controller.d.ts +22 -0
- package/dist/assets/server/auth/auth.controller.js +88 -0
- package/dist/assets/server/auth/auth.controller.js.map +1 -0
- package/dist/assets/server/auth/auth.middleware.d.ts +5 -0
- package/dist/assets/server/auth/auth.middleware.js +34 -0
- package/dist/assets/server/auth/auth.middleware.js.map +1 -0
- package/dist/assets/server/auth/auth.module.d.ts +2 -0
- package/dist/assets/server/auth/auth.module.js +24 -0
- package/dist/assets/server/auth/auth.module.js.map +1 -0
- package/dist/assets/server/auth/auth.service.d.ts +30 -0
- package/dist/assets/server/auth/auth.service.js +183 -0
- package/dist/assets/server/auth/auth.service.js.map +1 -0
- package/dist/assets/server/auth/auth.types.d.ts +28 -0
- package/dist/assets/server/auth/auth.types.js +3 -0
- package/dist/assets/server/auth/auth.types.js.map +1 -0
- package/dist/assets/server/build-info.json +4 -0
- package/dist/assets/server/common/common.module.d.ts +2 -0
- package/dist/assets/server/common/common.module.js +22 -0
- package/dist/assets/server/common/common.module.js.map +1 -0
- package/dist/assets/server/common/crypto.service.d.ts +11 -0
- package/dist/assets/server/common/crypto.service.js +73 -0
- package/dist/assets/server/common/crypto.service.js.map +1 -0
- package/dist/assets/server/communication/communication-record.entity.d.ts +15 -0
- package/dist/assets/server/communication/communication-record.entity.js +80 -0
- package/dist/assets/server/communication/communication-record.entity.js.map +1 -0
- package/dist/assets/server/communication/communication.controller.d.ts +12 -0
- package/dist/assets/server/communication/communication.controller.js +61 -0
- package/dist/assets/server/communication/communication.controller.js.map +1 -0
- package/dist/assets/server/communication/communication.module.d.ts +2 -0
- package/dist/assets/server/communication/communication.module.js +25 -0
- package/dist/assets/server/communication/communication.module.js.map +1 -0
- package/dist/assets/server/communication/communication.service.d.ts +23 -0
- package/dist/assets/server/communication/communication.service.js +51 -0
- package/dist/assets/server/communication/communication.service.js.map +1 -0
- package/dist/assets/server/db/schema-validator.service.d.ts +25 -0
- package/dist/assets/server/db/schema-validator.service.js +107 -0
- package/dist/assets/server/db/schema-validator.service.js.map +1 -0
- package/dist/assets/server/db/schema-version.entity.d.ts +5 -0
- package/dist/assets/server/db/schema-version.entity.js +35 -0
- package/dist/assets/server/db/schema-version.entity.js.map +1 -0
- package/dist/assets/server/db/sqlite.module.d.ts +2 -0
- package/dist/assets/server/db/sqlite.module.js +83 -0
- package/dist/assets/server/db/sqlite.module.js.map +1 -0
- package/dist/assets/server/devops/devops-sink-init.d.ts +23 -0
- package/dist/assets/server/devops/devops-sink-init.js +101 -0
- package/dist/assets/server/devops/devops-sink-init.js.map +1 -0
- package/dist/assets/server/devops/devops-sink-init.spec.d.ts +1 -0
- package/dist/assets/server/devops/devops-sink-init.spec.js +71 -0
- package/dist/assets/server/devops/devops-sink-init.spec.js.map +1 -0
- package/dist/assets/server/devops/devops-sink.module.d.ts +2 -0
- package/dist/assets/server/devops/devops-sink.module.js +22 -0
- package/dist/assets/server/devops/devops-sink.module.js.map +1 -0
- package/dist/assets/server/doctor/doctor.controller.d.ts +13 -0
- package/dist/assets/server/doctor/doctor.controller.js +62 -0
- package/dist/assets/server/doctor/doctor.controller.js.map +1 -0
- package/dist/assets/server/doctor/doctor.module.d.ts +2 -0
- package/dist/assets/server/doctor/doctor.module.js +27 -0
- package/dist/assets/server/doctor/doctor.module.js.map +1 -0
- package/dist/assets/server/doctor/doctor.service.d.ts +15 -0
- package/dist/assets/server/doctor/doctor.service.js +209 -0
- package/dist/assets/server/doctor/doctor.service.js.map +1 -0
- package/dist/assets/server/doctor/doctor.types.d.ts +46 -0
- package/dist/assets/server/doctor/doctor.types.js +3 -0
- package/dist/assets/server/doctor/doctor.types.js.map +1 -0
- package/dist/assets/server/extension/extension-control.controller.d.ts +67 -0
- package/dist/assets/server/extension/extension-control.controller.js +173 -0
- package/dist/assets/server/extension/extension-control.controller.js.map +1 -0
- package/dist/assets/server/extension/extension-control.service.d.ts +46 -0
- package/dist/assets/server/extension/extension-control.service.js +212 -0
- package/dist/assets/server/extension/extension-control.service.js.map +1 -0
- package/dist/assets/server/extension/extension-core.module.d.ts +2 -0
- package/dist/assets/server/extension/extension-core.module.js +21 -0
- package/dist/assets/server/extension/extension-core.module.js.map +1 -0
- package/dist/assets/server/extension/extension-version.controller.d.ts +6 -0
- package/dist/assets/server/extension/extension-version.controller.js +41 -0
- package/dist/assets/server/extension/extension-version.controller.js.map +1 -0
- package/dist/assets/server/extension/extension.module.d.ts +2 -0
- package/dist/assets/server/extension/extension.module.js +25 -0
- package/dist/assets/server/extension/extension.module.js.map +1 -0
- package/dist/assets/server/extraction/adapter.service.d.ts +55 -0
- package/dist/assets/server/extraction/adapter.service.js +275 -0
- package/dist/assets/server/extraction/adapter.service.js.map +1 -0
- package/dist/assets/server/extraction/anomaly-report.service.d.ts +12 -0
- package/dist/assets/server/extraction/anomaly-report.service.js +81 -0
- package/dist/assets/server/extraction/anomaly-report.service.js.map +1 -0
- package/dist/assets/server/extraction/entities/adapter-rule.entity.d.ts +13 -0
- package/dist/assets/server/extraction/entities/adapter-rule.entity.js +71 -0
- package/dist/assets/server/extraction/entities/adapter-rule.entity.js.map +1 -0
- package/dist/assets/server/extraction/entities/company-profile.entity.d.ts +14 -0
- package/dist/assets/server/extraction/entities/company-profile.entity.js +81 -0
- package/dist/assets/server/extraction/entities/company-profile.entity.js.map +1 -0
- package/dist/assets/server/extraction/entities/job-posting.entity.d.ts +15 -0
- package/dist/assets/server/extraction/entities/job-posting.entity.js +86 -0
- package/dist/assets/server/extraction/entities/job-posting.entity.js.map +1 -0
- package/dist/assets/server/extraction/entities/parse-log.entity.d.ts +18 -0
- package/dist/assets/server/extraction/entities/parse-log.entity.js +102 -0
- package/dist/assets/server/extraction/entities/parse-log.entity.js.map +1 -0
- package/dist/assets/server/extraction/entities/talent-profile.entity.d.ts +15 -0
- package/dist/assets/server/extraction/entities/talent-profile.entity.js +86 -0
- package/dist/assets/server/extraction/entities/talent-profile.entity.js.map +1 -0
- package/dist/assets/server/extraction/extraction-entity.controller.d.ts +138 -0
- package/dist/assets/server/extraction/extraction-entity.controller.js +493 -0
- package/dist/assets/server/extraction/extraction-entity.controller.js.map +1 -0
- package/dist/assets/server/extraction/extraction-rule.controller.d.ts +7 -0
- package/dist/assets/server/extraction/extraction-rule.controller.js +48 -0
- package/dist/assets/server/extraction/extraction-rule.controller.js.map +1 -0
- package/dist/assets/server/extraction/extraction-rule.entity.d.ts +15 -0
- package/dist/assets/server/extraction/extraction-rule.entity.js +80 -0
- package/dist/assets/server/extraction/extraction-rule.entity.js.map +1 -0
- package/dist/assets/server/extraction/extraction-rule.service.d.ts +24 -0
- package/dist/assets/server/extraction/extraction-rule.service.js +89 -0
- package/dist/assets/server/extraction/extraction-rule.service.js.map +1 -0
- package/dist/assets/server/extraction/extraction.module.d.ts +2 -0
- package/dist/assets/server/extraction/extraction.module.js +53 -0
- package/dist/assets/server/extraction/extraction.module.js.map +1 -0
- package/dist/assets/server/extraction/extraction.service.d.ts +78 -0
- package/dist/assets/server/extraction/extraction.service.js +430 -0
- package/dist/assets/server/extraction/extraction.service.js.map +1 -0
- package/dist/assets/server/extraction/linkedin-extractor.d.ts +1 -0
- package/dist/assets/server/extraction/linkedin-extractor.js +244 -0
- package/dist/assets/server/extraction/linkedin-extractor.js.map +1 -0
- package/dist/assets/server/extraction/rrweb-snapshot.utils.d.ts +15 -0
- package/dist/assets/server/extraction/rrweb-snapshot.utils.js +48 -0
- package/dist/assets/server/extraction/rrweb-snapshot.utils.js.map +1 -0
- package/dist/assets/server/extraction/rrweb-snapshot.utils.spec.d.ts +1 -0
- package/dist/assets/server/extraction/rrweb-snapshot.utils.spec.js +60 -0
- package/dist/assets/server/extraction/rrweb-snapshot.utils.spec.js.map +1 -0
- package/dist/assets/server/extraction/script-rule.d.ts +14 -0
- package/dist/assets/server/extraction/script-rule.js +49 -0
- package/dist/assets/server/extraction/script-rule.js.map +1 -0
- package/dist/assets/server/extraction/snapshot-analysis.service.d.ts +23 -0
- package/dist/assets/server/extraction/snapshot-analysis.service.js +147 -0
- package/dist/assets/server/extraction/snapshot-analysis.service.js.map +1 -0
- package/dist/assets/server/extraction/structured-data.d.ts +7 -0
- package/dist/assets/server/extraction/structured-data.js +96 -0
- package/dist/assets/server/extraction/structured-data.js.map +1 -0
- package/dist/assets/server/hcapi/hcapi.module.d.ts +2 -0
- package/dist/assets/server/hcapi/hcapi.module.js +23 -0
- package/dist/assets/server/hcapi/hcapi.module.js.map +1 -0
- package/dist/assets/server/hcapi/hcapi.service.d.ts +28 -0
- package/dist/assets/server/hcapi/hcapi.service.js +81 -0
- package/dist/assets/server/hcapi/hcapi.service.js.map +1 -0
- package/dist/assets/server/health/health.controller.d.ts +19 -0
- package/dist/assets/server/health/health.controller.js +59 -0
- package/dist/assets/server/health/health.controller.js.map +1 -0
- package/dist/assets/server/jobcase/jobcase.controller.d.ts +12 -0
- package/dist/assets/server/jobcase/jobcase.controller.js +61 -0
- package/dist/assets/server/jobcase/jobcase.controller.js.map +1 -0
- package/dist/assets/server/jobcase/jobcase.entity.d.ts +13 -0
- package/dist/assets/server/jobcase/jobcase.entity.js +71 -0
- package/dist/assets/server/jobcase/jobcase.entity.js.map +1 -0
- package/dist/assets/server/jobcase/jobcase.module.d.ts +2 -0
- package/dist/assets/server/jobcase/jobcase.module.js +26 -0
- package/dist/assets/server/jobcase/jobcase.module.js.map +1 -0
- package/dist/assets/server/jobcase/jobcase.service.d.ts +21 -0
- package/dist/assets/server/jobcase/jobcase.service.js +56 -0
- package/dist/assets/server/jobcase/jobcase.service.js.map +1 -0
- package/dist/assets/server/llm/llm.module.d.ts +2 -0
- package/dist/assets/server/llm/llm.module.js +21 -0
- package/dist/assets/server/llm/llm.module.js.map +1 -0
- package/dist/assets/server/llm/llm.service.d.ts +18 -0
- package/dist/assets/server/llm/llm.service.js +65 -0
- package/dist/assets/server/llm/llm.service.js.map +1 -0
- package/dist/assets/server/main.d.ts +1 -0
- package/dist/assets/server/main.js +30 -0
- package/dist/assets/server/main.js.map +1 -0
- package/dist/assets/server/matching/matching.controller.d.ts +16 -0
- package/dist/assets/server/matching/matching.controller.js +97 -0
- package/dist/assets/server/matching/matching.controller.js.map +1 -0
- package/dist/assets/server/matching/matching.module.d.ts +2 -0
- package/dist/assets/server/matching/matching.module.js +36 -0
- package/dist/assets/server/matching/matching.module.js.map +1 -0
- package/dist/assets/server/matching/matching.service.d.ts +55 -0
- package/dist/assets/server/matching/matching.service.js +409 -0
- package/dist/assets/server/matching/matching.service.js.map +1 -0
- package/dist/assets/server/package.json +57 -0
- package/dist/assets/server/parsed-resume/parsed-resume.controller.d.ts +6 -0
- package/dist/assets/server/parsed-resume/parsed-resume.controller.js +42 -0
- package/dist/assets/server/parsed-resume/parsed-resume.controller.js.map +1 -0
- package/dist/assets/server/parsed-resume/parsed-resume.entity.d.ts +124 -0
- package/dist/assets/server/parsed-resume/parsed-resume.entity.js +72 -0
- package/dist/assets/server/parsed-resume/parsed-resume.entity.js.map +1 -0
- package/dist/assets/server/parsed-resume/parsed-resume.module.d.ts +2 -0
- package/dist/assets/server/parsed-resume/parsed-resume.module.js +26 -0
- package/dist/assets/server/parsed-resume/parsed-resume.module.js.map +1 -0
- package/dist/assets/server/parsed-resume/parsed-resume.service.d.ts +10 -0
- package/dist/assets/server/parsed-resume/parsed-resume.service.js +45 -0
- package/dist/assets/server/parsed-resume/parsed-resume.service.js.map +1 -0
- package/dist/assets/server/parsing/parse-error-report.entity.d.ts +11 -0
- package/dist/assets/server/parsing/parse-error-report.entity.js +66 -0
- package/dist/assets/server/parsing/parse-error-report.entity.js.map +1 -0
- package/dist/assets/server/parsing/parsing.controller.d.ts +19 -0
- package/dist/assets/server/parsing/parsing.controller.js +97 -0
- package/dist/assets/server/parsing/parsing.controller.js.map +1 -0
- package/dist/assets/server/parsing/parsing.module.d.ts +2 -0
- package/dist/assets/server/parsing/parsing.module.js +38 -0
- package/dist/assets/server/parsing/parsing.module.js.map +1 -0
- package/dist/assets/server/parsing/parsing.service.d.ts +38 -0
- package/dist/assets/server/parsing/parsing.service.js +263 -0
- package/dist/assets/server/parsing/parsing.service.js.map +1 -0
- package/dist/assets/server/query/fields-meta.controller.d.ts +28 -0
- package/dist/assets/server/query/fields-meta.controller.js +57 -0
- package/dist/assets/server/query/fields-meta.controller.js.map +1 -0
- package/dist/assets/server/query/query-builder.controller.d.ts +11 -0
- package/dist/assets/server/query/query-builder.controller.js +40 -0
- package/dist/assets/server/query/query-builder.controller.js.map +1 -0
- package/dist/assets/server/query/query-builder.service.d.ts +8 -0
- package/dist/assets/server/query/query-builder.service.js +41 -0
- package/dist/assets/server/query/query-builder.service.js.map +1 -0
- package/dist/assets/server/query/query.module.d.ts +2 -0
- package/dist/assets/server/query/query.module.js +23 -0
- package/dist/assets/server/query/query.module.js.map +1 -0
- package/dist/assets/server/recording/entities/recording-event.entity.d.ts +9 -0
- package/dist/assets/server/recording/entities/recording-event.entity.js +56 -0
- package/dist/assets/server/recording/entities/recording-event.entity.js.map +1 -0
- package/dist/assets/server/recording/entities/recording-snapshot.entity.d.ts +16 -0
- package/dist/assets/server/recording/entities/recording-snapshot.entity.js +91 -0
- package/dist/assets/server/recording/entities/recording-snapshot.entity.js.map +1 -0
- package/dist/assets/server/recording/recording-event-bus.service.d.ts +4 -0
- package/dist/assets/server/recording/recording-event-bus.service.js +25 -0
- package/dist/assets/server/recording/recording-event-bus.service.js.map +1 -0
- package/dist/assets/server/recording/recording-snapshot.service.d.ts +13 -0
- package/dist/assets/server/recording/recording-snapshot.service.js +81 -0
- package/dist/assets/server/recording/recording-snapshot.service.js.map +1 -0
- package/dist/assets/server/recording/recording-snapshot.service.spec.d.ts +1 -0
- package/dist/assets/server/recording/recording-snapshot.service.spec.js +65 -0
- package/dist/assets/server/recording/recording-snapshot.service.spec.js.map +1 -0
- package/dist/assets/server/recording/recording.controller.d.ts +54 -0
- package/dist/assets/server/recording/recording.controller.js +77 -0
- package/dist/assets/server/recording/recording.controller.js.map +1 -0
- package/dist/assets/server/recording/recording.gateway.d.ts +15 -0
- package/dist/assets/server/recording/recording.gateway.js +117 -0
- package/dist/assets/server/recording/recording.gateway.js.map +1 -0
- package/dist/assets/server/recording/recording.module.d.ts +2 -0
- package/dist/assets/server/recording/recording.module.js +36 -0
- package/dist/assets/server/recording/recording.module.js.map +1 -0
- package/dist/assets/server/recording/recording.service.d.ts +43 -0
- package/dist/assets/server/recording/recording.service.js +124 -0
- package/dist/assets/server/recording/recording.service.js.map +1 -0
- package/dist/assets/server/remark/remark.controller.d.ts +21 -0
- package/dist/assets/server/remark/remark.controller.js +59 -0
- package/dist/assets/server/remark/remark.controller.js.map +1 -0
- package/dist/assets/server/remark/remark.entity.d.ts +18 -0
- package/dist/assets/server/remark/remark.entity.js +67 -0
- package/dist/assets/server/remark/remark.entity.js.map +1 -0
- package/dist/assets/server/remark/remark.module.d.ts +2 -0
- package/dist/assets/server/remark/remark.module.js +26 -0
- package/dist/assets/server/remark/remark.module.js.map +1 -0
- package/dist/assets/server/remark/remark.service.d.ts +8 -0
- package/dist/assets/server/remark/remark.service.js +39 -0
- package/dist/assets/server/remark/remark.service.js.map +1 -0
- package/dist/assets/server/report/report.controller.d.ts +18 -0
- package/dist/assets/server/report/report.controller.js +41 -0
- package/dist/assets/server/report/report.controller.js.map +1 -0
- package/dist/assets/server/report/report.module.d.ts +2 -0
- package/dist/assets/server/report/report.module.js +24 -0
- package/dist/assets/server/report/report.module.js.map +1 -0
- package/dist/assets/server/report/report.service.d.ts +23 -0
- package/dist/assets/server/report/report.service.js +54 -0
- package/dist/assets/server/report/report.service.js.map +1 -0
- package/dist/assets/server/rules/rules.controller.d.ts +6 -0
- package/dist/assets/server/rules/rules.controller.js +35 -0
- package/dist/assets/server/rules/rules.controller.js.map +1 -0
- package/dist/assets/server/rules/rules.module.d.ts +2 -0
- package/dist/assets/server/rules/rules.module.js +23 -0
- package/dist/assets/server/rules/rules.module.js.map +1 -0
- package/dist/assets/server/rules/rules.service.d.ts +10 -0
- package/dist/assets/server/rules/rules.service.js +26 -0
- package/dist/assets/server/rules/rules.service.js.map +1 -0
- package/dist/assets/server/search/search.controller.d.ts +6 -0
- package/dist/assets/server/search/search.controller.js +53 -0
- package/dist/assets/server/search/search.controller.js.map +1 -0
- package/dist/assets/server/search/search.module.d.ts +2 -0
- package/dist/assets/server/search/search.module.js +24 -0
- package/dist/assets/server/search/search.module.js.map +1 -0
- package/dist/assets/server/search/search.service.d.ts +6 -0
- package/dist/assets/server/search/search.service.js +46 -0
- package/dist/assets/server/search/search.service.js.map +1 -0
- package/dist/assets/server/sentry.d.ts +3 -0
- package/dist/assets/server/sentry.js +10 -0
- package/dist/assets/server/sentry.js.map +1 -0
- package/dist/assets/server/site/entities/site-registry.entity.d.ts +13 -0
- package/dist/assets/server/site/entities/site-registry.entity.js +76 -0
- package/dist/assets/server/site/entities/site-registry.entity.js.map +1 -0
- package/dist/assets/server/site/site.controller.d.ts +38 -0
- package/dist/assets/server/site/site.controller.js +60 -0
- package/dist/assets/server/site/site.controller.js.map +1 -0
- package/dist/assets/server/site/site.module.d.ts +2 -0
- package/dist/assets/server/site/site.module.js +26 -0
- package/dist/assets/server/site/site.module.js.map +1 -0
- package/dist/assets/server/site/site.service.d.ts +38 -0
- package/dist/assets/server/site/site.service.js +141 -0
- package/dist/assets/server/site/site.service.js.map +1 -0
- package/dist/assets/server/snapshot/raw-snapshot.entity.d.ts +35 -0
- package/dist/assets/server/snapshot/raw-snapshot.entity.js +62 -0
- package/dist/assets/server/snapshot/raw-snapshot.entity.js.map +1 -0
- package/dist/assets/server/snapshot/snapshot.controller.d.ts +18 -0
- package/dist/assets/server/snapshot/snapshot.controller.js +76 -0
- package/dist/assets/server/snapshot/snapshot.controller.js.map +1 -0
- package/dist/assets/server/snapshot/snapshot.module.d.ts +2 -0
- package/dist/assets/server/snapshot/snapshot.module.js +26 -0
- package/dist/assets/server/snapshot/snapshot.module.js.map +1 -0
- package/dist/assets/server/snapshot/snapshot.service.d.ts +10 -0
- package/dist/assets/server/snapshot/snapshot.service.js +48 -0
- package/dist/assets/server/snapshot/snapshot.service.js.map +1 -0
- package/dist/assets/server/system/system.controller.d.ts +39 -0
- package/dist/assets/server/system/system.controller.js +93 -0
- package/dist/assets/server/system/system.controller.js.map +1 -0
- package/dist/assets/server/system/system.module.d.ts +2 -0
- package/dist/assets/server/system/system.module.js +26 -0
- package/dist/assets/server/system/system.module.js.map +1 -0
- package/dist/assets/server/system/system.service.d.ts +86 -0
- package/dist/assets/server/system/system.service.js +433 -0
- package/dist/assets/server/system/system.service.js.map +1 -0
- package/dist/assets/server/talent-fingerprint/fingerprint-match.service.d.ts +28 -0
- package/dist/assets/server/talent-fingerprint/fingerprint-match.service.js +186 -0
- package/dist/assets/server/talent-fingerprint/fingerprint-match.service.js.map +1 -0
- package/dist/assets/server/talent-fingerprint/talent-fingerprint.entity.d.ts +30 -0
- package/dist/assets/server/talent-fingerprint/talent-fingerprint.entity.js +55 -0
- package/dist/assets/server/talent-fingerprint/talent-fingerprint.entity.js.map +1 -0
- package/dist/assets/server/talent-fingerprint/talent-fingerprint.module.d.ts +2 -0
- package/dist/assets/server/talent-fingerprint/talent-fingerprint.module.js +25 -0
- package/dist/assets/server/talent-fingerprint/talent-fingerprint.module.js.map +1 -0
- package/dist/assets/server/talent-fingerprint/talent-fingerprint.service.d.ts +8 -0
- package/dist/assets/server/talent-fingerprint/talent-fingerprint.service.js +44 -0
- package/dist/assets/server/talent-fingerprint/talent-fingerprint.service.js.map +1 -0
- package/dist/assets/server/talent-job-match/talent-job-match.controller.d.ts +6 -0
- package/dist/assets/server/talent-job-match/talent-job-match.controller.js +42 -0
- package/dist/assets/server/talent-job-match/talent-job-match.controller.js.map +1 -0
- package/dist/assets/server/talent-job-match/talent-job-match.entity.d.ts +33 -0
- package/dist/assets/server/talent-job-match/talent-job-match.entity.js +73 -0
- package/dist/assets/server/talent-job-match/talent-job-match.entity.js.map +1 -0
- package/dist/assets/server/talent-job-match/talent-job-match.module.d.ts +2 -0
- package/dist/assets/server/talent-job-match/talent-job-match.module.js +26 -0
- package/dist/assets/server/talent-job-match/talent-job-match.module.js.map +1 -0
- package/dist/assets/server/talent-job-match/talent-job-match.service.d.ts +9 -0
- package/dist/assets/server/talent-job-match/talent-job-match.service.js +42 -0
- package/dist/assets/server/talent-job-match/talent-job-match.service.js.map +1 -0
- package/dist/assets/server/talent-portrait/portrait-merge.service.d.ts +17 -0
- package/dist/assets/server/talent-portrait/portrait-merge.service.js +200 -0
- package/dist/assets/server/talent-portrait/portrait-merge.service.js.map +1 -0
- package/dist/assets/server/talent-portrait/talent-portrait.controller.d.ts +7 -0
- package/dist/assets/server/talent-portrait/talent-portrait.controller.js +52 -0
- package/dist/assets/server/talent-portrait/talent-portrait.controller.js.map +1 -0
- package/dist/assets/server/talent-portrait/talent-portrait.entity.d.ts +91 -0
- package/dist/assets/server/talent-portrait/talent-portrait.entity.js +71 -0
- package/dist/assets/server/talent-portrait/talent-portrait.entity.js.map +1 -0
- package/dist/assets/server/talent-portrait/talent-portrait.module.d.ts +2 -0
- package/dist/assets/server/talent-portrait/talent-portrait.module.js +27 -0
- package/dist/assets/server/talent-portrait/talent-portrait.module.js.map +1 -0
- package/dist/assets/server/talent-portrait/talent-portrait.service.d.ts +10 -0
- package/dist/assets/server/talent-portrait/talent-portrait.service.js +46 -0
- package/dist/assets/server/talent-portrait/talent-portrait.service.js.map +1 -0
- package/dist/assets/server/telemetry/telemetry.module.d.ts +2 -0
- package/dist/assets/server/telemetry/telemetry.module.js +24 -0
- package/dist/assets/server/telemetry/telemetry.module.js.map +1 -0
- package/dist/assets/server/telemetry/telemetry.service.d.ts +29 -0
- package/dist/assets/server/telemetry/telemetry.service.js +116 -0
- package/dist/assets/server/telemetry/telemetry.service.js.map +1 -0
- package/dist/auto-doctor.d.ts +8 -0
- package/dist/auto-doctor.js +34 -0
- package/dist/bundled-assets.d.ts +22 -0
- package/dist/bundled-assets.js +80 -0
- package/dist/cache/db.js +10 -54
- package/dist/commands/addons.js +46 -71
- package/dist/commands/cache.js +29 -27
- package/dist/commands/config.d.ts +1 -1
- package/dist/commands/config.js +8 -12
- package/dist/commands/doctor.d.ts +38 -1
- package/dist/commands/doctor.js +214 -74
- package/dist/commands/extension.js +84 -98
- package/dist/commands/extras.d.ts +32 -2
- package/dist/commands/extras.js +252 -64
- package/dist/commands/init.js +18 -46
- package/dist/commands/install.js +31 -60
- package/dist/commands/job.js +27 -65
- package/dist/commands/login.js +50 -37
- package/dist/commands/logout.js +8 -12
- package/dist/commands/ops.js +94 -67
- package/dist/commands/record.js +21 -59
- package/dist/commands/report.js +14 -18
- package/dist/commands/search.js +14 -21
- package/dist/commands/server.d.ts +1 -1
- package/dist/commands/server.js +126 -112
- package/dist/commands/status.js +23 -27
- package/dist/commands/update.js +44 -79
- package/dist/config.d.ts +3 -0
- package/dist/config.js +12 -46
- package/dist/i18n/index.js +5 -11
- package/dist/i18n/locales/en-US.json +24 -1
- package/dist/i18n/locales/zh-CN.json +24 -1
- package/dist/index.cmd +3 -0
- package/dist/index.js +90 -98
- package/dist/index.ps1 +3 -0
- package/dist/keychain.js +9 -44
- package/dist/logger.d.ts +7 -0
- package/dist/logger.js +80 -0
- package/dist/native-check.d.ts +6 -0
- package/dist/native-check.js +23 -0
- package/dist/sentry.js +4 -8
- package/dist/updater.js +15 -52
- package/dist/utils/proc.d.ts +35 -0
- package/dist/utils/proc.js +81 -0
- package/dist/utils/spawn.d.ts +19 -0
- package/dist/utils/spawn.js +60 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +183 -81
- package/dist/watchdog.d.ts +1 -0
- package/dist/watchdog.js +128 -0
- package/package.json +7 -6
- package/dist/commands/native-check.d.ts +0 -22
- package/dist/commands/native-check.js +0 -93
package/dist/commands/record.js
CHANGED
|
@@ -1,62 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
|
|
58
|
-
const res = await
|
|
59
|
-
externalId: (
|
|
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
|
-
|
|
30
|
+
export const recordCommand = new Command('record')
|
|
71
31
|
.description('沟通记录/录音归档');
|
|
72
|
-
|
|
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
|
-
|
|
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
|
-
|
|
51
|
+
recordCommand
|
|
90
52
|
.command('call <audioFile>')
|
|
91
53
|
.description('上传音频文件(MVP 阶段仅保存路径,STT 由本地或云端后续处理)')
|
|
92
54
|
.action((audioFile) => {
|
package/dist/commands/report.js
CHANGED
|
@@ -1,28 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
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
|
|
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
|
-
|
|
17
|
+
export const reportCommand = new Command('report')
|
|
24
18
|
.description('生成报告');
|
|
25
|
-
|
|
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
|
-
|
|
45
|
+
getCliLogger().error('report:generate-failed', {
|
|
46
|
+
error: err.response?.data?.message || err.message,
|
|
47
|
+
});
|
|
52
48
|
process.exit(1);
|
|
53
49
|
}
|
|
54
50
|
});
|
package/dist/commands/search.js
CHANGED
|
@@ -1,18 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
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
|
|
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
|
-
|
|
33
|
-
.description(
|
|
34
|
-
.option('--filter <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>',
|
|
42
|
-
.option('--top <n>',
|
|
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
|
-
/** 定位
|
|
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: {
|
package/dist/commands/server.js
CHANGED
|
@@ -1,57 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
-
|
|
12
|
+
const WATCHDOG_PID_FILE = () => PID_FILE().replace(/server\.pid$/, 'watchdog.pid');
|
|
13
|
+
function tryReadPidFile(file) {
|
|
49
14
|
try {
|
|
50
|
-
const raw = fs.readFileSync(
|
|
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
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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
|
|
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 =
|
|
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
|
-
:
|
|
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
|
|
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
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
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:
|
|
113
|
-
|
|
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 =
|
|
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
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
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
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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 (
|
|
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
|
-
|
|
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
|
|
186
|
-
`排障: hunter-mate doctor
|
|
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
|
-
|
|
192
|
+
saveConfig({ serverUrl: u.origin });
|
|
196
193
|
}
|
|
197
194
|
}
|
|
198
195
|
catch { /* ignore */ }
|
|
199
|
-
return { started: true, pid:
|
|
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
|
-
|
|
206
|
-
|
|
207
|
-
|
|
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
|
-
|
|
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 解析或
|
|
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
|
-
|
|
239
|
+
export const stopCommand = new Command('stop')
|
|
226
240
|
.description('停止本地 server(读 ~/.hunter-mate/server.pid 并 SIGTERM)')
|
|
227
241
|
.action(() => {
|
|
228
242
|
const r = runStop();
|