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