hunter-mate 0.1.15 → 0.1.17
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/dist/assets/extension/background/service-worker.20261001153649.js +4618 -0
- package/dist/assets/extension/background/service-worker.js +536 -99
- package/dist/assets/extension/build-info.json +1 -1
- package/dist/assets/extension/content/index.js +2 -2
- package/dist/assets/extension/icons/icon128.png +0 -0
- package/dist/assets/extension/manifest.json +7 -3
- package/dist/assets/extension/offscreen/offscreen.html +1 -1
- package/dist/assets/extension/offscreen/offscreen.js +269 -117
- package/dist/assets/extension/package.json +2 -1
- package/dist/assets/extension/sidepanel/index.css +1 -1
- package/dist/assets/extension/sidepanel/index.html +1 -1
- package/dist/assets/extension/sidepanel/index.js +27 -10
- package/dist/assets/server/chunks/chunk-EKKMDS42.mjs +26 -0
- package/dist/assets/server/chunks/chunk-GNM26E3H.mjs +54 -0
- package/dist/assets/server/chunks/chunk-IXYSL3NT.mjs +567 -0
- package/dist/assets/server/chunks/chunk-SAJB6JRK.mjs +14421 -0
- package/dist/assets/server/chunks/chunk-U7FVFSKP.mjs +1565 -0
- package/dist/assets/server/chunks/esm-4U746B76.mjs +29 -0
- package/dist/assets/server/chunks/getMachineId-bsd-L5TFP6QC.mjs +46 -0
- package/dist/assets/server/chunks/getMachineId-darwin-OY4E7LEK.mjs +45 -0
- package/dist/assets/server/chunks/getMachineId-linux-NSVVMJTW.mjs +39 -0
- package/dist/assets/server/chunks/getMachineId-unsupported-WBPZVDKV.mjs +29 -0
- package/dist/assets/server/chunks/getMachineId-win-LGO5ETVN.mjs +48 -0
- package/dist/assets/server/chunks/script-rule-ANR2J7E6.mjs +14 -0
- package/dist/assets/server/main.mjs +302490 -0
- package/dist/index.js +72986 -174
- package/dist/postinstall.js +221 -27
- package/dist/watchdog.js +324 -233
- package/dist/web/dist/404.html +1 -1
- package/dist/web/dist/_next/static/chunks/170-b66b6f731381943e.js +1 -0
- package/dist/web/dist/_next/static/chunks/{589-d632233641f35681.js → 589-5e99e548a0ee6bac.js} +1 -1
- package/dist/web/dist/_next/static/chunks/686-ade57c57a1737818.js +1 -0
- package/dist/web/dist/_next/static/chunks/{935-99f57b7d4151d9e7.js → 935-bb4adb3868af4cd4.js} +2 -2
- package/dist/web/dist/_next/static/chunks/{a7067448-96dd4b8457c447e8.js → a7067448-d3882c7e74c162bf.js} +1 -1
- package/dist/web/dist/_next/static/chunks/app/_not-found/{page-fdf1a13a7656886a.js → page-cf5ab201496f0914.js} +1 -1
- package/dist/web/dist/_next/static/chunks/app/admin/data/page-37e01dad70306bf3.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/auth/verify/page-38fa28a48f76defa.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/companies/page-985002eea5b295d0.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/company/admin/page-8c7ecc92bef09e92.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/entity/{page-250f8a9b6d91ab19.js → page-dc9664fb628e2d08.js} +1 -1
- package/dist/web/dist/_next/static/chunks/app/jobs/page-e39b3e25f0a81254.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/layout-d094dc654772bf32.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/logs/{page-d478031d49f7ba00.js → page-ccc6bb863cf77e56.js} +1 -1
- package/dist/web/dist/_next/static/chunks/app/matching/jobs/[id]/talents/page-936f6190c968d20b.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/matching/portraits/[id]/jobs/page-ea44a2236bd53cae.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/page-41d8e008a9411221.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/parselog/page-3f756bbd580f337e.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/recordings/page-ffd507b12e67f2db.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/resource-usage/page-3b8bd27536a7889a.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/snapshots/[id]/agent-prompt/page-c89b32aa2ef509f5.js +1 -0
- package/dist/web/dist/_next/static/chunks/app/talents/page-8e0b4072df138fa3.js +1 -0
- package/dist/web/dist/_next/static/chunks/{main-app-74b80a6877b21dfc.js → main-app-d053d37cc3b76ace.js} +1 -1
- package/dist/web/dist/_next/static/chunks/{main-5a4e0cd75dd7f04b.js → main-ead3ac50aa4bc931.js} +1 -1
- package/dist/web/dist/_next/static/chunks/pages/{_app-638dc63058a49a9c.js → _app-e11d02a41d9f3cb9.js} +2 -2
- package/dist/web/dist/_next/static/chunks/webpack-cf21e951181fd345.js +1 -0
- package/dist/web/dist/_next/static/css/1dd88e02ef1af7b9.css +3 -0
- package/dist/web/dist/admin/data.html +1 -0
- package/dist/web/dist/admin/data.txt +7 -0
- package/dist/web/dist/auth/verify.html +1 -1
- package/dist/web/dist/auth/verify.txt +3 -3
- package/dist/web/dist/companies.html +1 -1
- package/dist/web/dist/companies.txt +3 -3
- package/dist/web/dist/company/admin.html +1 -0
- package/dist/web/dist/company/admin.txt +7 -0
- package/dist/web/dist/entity.html +1 -1
- package/dist/web/dist/entity.txt +3 -3
- package/dist/web/dist/index.html +1 -1
- package/dist/web/dist/index.txt +3 -3
- package/dist/web/dist/jobs.html +1 -1
- package/dist/web/dist/jobs.txt +7 -6
- package/dist/web/dist/logs.html +1 -1
- package/dist/web/dist/logs.txt +3 -3
- package/dist/web/dist/matching/jobs/placeholder/talents.html +1 -1
- package/dist/web/dist/matching/jobs/placeholder/talents.txt +3 -3
- package/dist/web/dist/matching/portraits/placeholder/jobs.html +1 -1
- package/dist/web/dist/matching/portraits/placeholder/jobs.txt +3 -3
- package/dist/web/dist/parselog.html +1 -1
- package/dist/web/dist/parselog.txt +3 -3
- package/dist/web/dist/recordings.html +1 -1
- package/dist/web/dist/recordings.txt +3 -3
- package/dist/web/dist/resource-usage.html +1 -0
- package/dist/web/dist/resource-usage.txt +8 -0
- package/dist/web/dist/snapshots/placeholder/agent-prompt.html +1 -1
- package/dist/web/dist/snapshots/placeholder/agent-prompt.txt +3 -3
- package/dist/web/dist/talents.html +1 -1
- package/dist/web/dist/talents.txt +3 -3
- package/package.json +18 -15
- package/dist/assets/server/agent-session/agent-session.controller.d.ts +0 -32
- package/dist/assets/server/agent-session/agent-session.controller.js +0 -83
- package/dist/assets/server/agent-session/agent-session.controller.js.map +0 -1
- package/dist/assets/server/agent-session/agent-session.guard.d.ts +0 -4
- package/dist/assets/server/agent-session/agent-session.guard.js +0 -32
- package/dist/assets/server/agent-session/agent-session.guard.js.map +0 -1
- package/dist/assets/server/agent-session/agent-session.module.d.ts +0 -2
- package/dist/assets/server/agent-session/agent-session.module.js +0 -28
- package/dist/assets/server/agent-session/agent-session.module.js.map +0 -1
- package/dist/assets/server/agent-session/agent-session.service.d.ts +0 -54
- package/dist/assets/server/agent-session/agent-session.service.js +0 -431
- package/dist/assets/server/agent-session/agent-session.service.js.map +0 -1
- package/dist/assets/server/agent-session/agent-session.types.d.ts +0 -56
- package/dist/assets/server/agent-session/agent-session.types.js +0 -3
- package/dist/assets/server/agent-session/agent-session.types.js.map +0 -1
- package/dist/assets/server/agent-session/entities/agent-event.entity.d.ts +0 -12
- package/dist/assets/server/agent-session/entities/agent-event.entity.js +0 -73
- package/dist/assets/server/agent-session/entities/agent-event.entity.js.map +0 -1
- package/dist/assets/server/agent-session/entities/agent-message.entity.d.ts +0 -13
- package/dist/assets/server/agent-session/entities/agent-message.entity.js +0 -77
- package/dist/assets/server/agent-session/entities/agent-message.entity.js.map +0 -1
- package/dist/assets/server/agent-session/entities/agent-session.entity.d.ts +0 -14
- package/dist/assets/server/agent-session/entities/agent-session.entity.js +0 -83
- package/dist/assets/server/agent-session/entities/agent-session.entity.js.map +0 -1
- package/dist/assets/server/app.module.d.ts +0 -4
- package/dist/assets/server/app.module.js +0 -141
- package/dist/assets/server/app.module.js.map +0 -1
- package/dist/assets/server/auth/auth.controller.d.ts +0 -43
- package/dist/assets/server/auth/auth.controller.js +0 -127
- package/dist/assets/server/auth/auth.controller.js.map +0 -1
- package/dist/assets/server/auth/auth.middleware.d.ts +0 -5
- package/dist/assets/server/auth/auth.middleware.js +0 -42
- package/dist/assets/server/auth/auth.middleware.js.map +0 -1
- package/dist/assets/server/auth/auth.module.d.ts +0 -2
- package/dist/assets/server/auth/auth.module.js +0 -27
- package/dist/assets/server/auth/auth.module.js.map +0 -1
- package/dist/assets/server/auth/auth.service.d.ts +0 -58
- package/dist/assets/server/auth/auth.service.js +0 -303
- package/dist/assets/server/auth/auth.service.js.map +0 -1
- package/dist/assets/server/auth/auth.types.d.ts +0 -28
- package/dist/assets/server/auth/auth.types.js +0 -3
- package/dist/assets/server/auth/auth.types.js.map +0 -1
- package/dist/assets/server/auth/saas-token.entity.d.ts +0 -7
- package/dist/assets/server/auth/saas-token.entity.js +0 -46
- package/dist/assets/server/auth/saas-token.entity.js.map +0 -1
- package/dist/assets/server/build-info.json +0 -4
- package/dist/assets/server/common/common.module.d.ts +0 -2
- package/dist/assets/server/common/common.module.js +0 -22
- package/dist/assets/server/common/common.module.js.map +0 -1
- package/dist/assets/server/common/crypto.service.d.ts +0 -11
- package/dist/assets/server/common/crypto.service.js +0 -73
- package/dist/assets/server/common/crypto.service.js.map +0 -1
- package/dist/assets/server/communication/communication-record.entity.d.ts +0 -15
- package/dist/assets/server/communication/communication-record.entity.js +0 -80
- package/dist/assets/server/communication/communication-record.entity.js.map +0 -1
- package/dist/assets/server/communication/communication.controller.d.ts +0 -12
- package/dist/assets/server/communication/communication.controller.js +0 -61
- package/dist/assets/server/communication/communication.controller.js.map +0 -1
- package/dist/assets/server/communication/communication.module.d.ts +0 -2
- package/dist/assets/server/communication/communication.module.js +0 -25
- package/dist/assets/server/communication/communication.module.js.map +0 -1
- package/dist/assets/server/communication/communication.service.d.ts +0 -23
- package/dist/assets/server/communication/communication.service.js +0 -51
- package/dist/assets/server/communication/communication.service.js.map +0 -1
- package/dist/assets/server/customer/customer.controller.d.ts +0 -18
- package/dist/assets/server/customer/customer.controller.js +0 -81
- package/dist/assets/server/customer/customer.controller.js.map +0 -1
- package/dist/assets/server/customer/customer.entity.d.ts +0 -17
- package/dist/assets/server/customer/customer.entity.js +0 -82
- package/dist/assets/server/customer/customer.entity.js.map +0 -1
- package/dist/assets/server/customer/customer.module.d.ts +0 -2
- package/dist/assets/server/customer/customer.module.js +0 -28
- package/dist/assets/server/customer/customer.module.js.map +0 -1
- package/dist/assets/server/customer/customer.service.d.ts +0 -36
- package/dist/assets/server/customer/customer.service.js +0 -200
- package/dist/assets/server/customer/customer.service.js.map +0 -1
- package/dist/assets/server/datasync/datasync.module.d.ts +0 -2
- package/dist/assets/server/datasync/datasync.module.js +0 -26
- package/dist/assets/server/datasync/datasync.module.js.map +0 -1
- package/dist/assets/server/datasync/datasync.service.d.ts +0 -50
- package/dist/assets/server/datasync/datasync.service.js +0 -389
- package/dist/assets/server/datasync/datasync.service.js.map +0 -1
- package/dist/assets/server/datasync/entities/sync-conflict.entity.d.ts +0 -10
- package/dist/assets/server/datasync/entities/sync-conflict.entity.js +0 -61
- package/dist/assets/server/datasync/entities/sync-conflict.entity.js.map +0 -1
- package/dist/assets/server/datasync/entities/sync-cursor.entity.d.ts +0 -9
- package/dist/assets/server/datasync/entities/sync-cursor.entity.js +0 -56
- package/dist/assets/server/datasync/entities/sync-cursor.entity.js.map +0 -1
- package/dist/assets/server/datasync/registry.d.ts +0 -8
- package/dist/assets/server/datasync/registry.js +0 -55
- package/dist/assets/server/datasync/registry.js.map +0 -1
- package/dist/assets/server/db/schema-validator.service.d.ts +0 -27
- package/dist/assets/server/db/schema-validator.service.js +0 -138
- package/dist/assets/server/db/schema-validator.service.js.map +0 -1
- package/dist/assets/server/db/schema-version.entity.d.ts +0 -5
- package/dist/assets/server/db/schema-version.entity.js +0 -35
- package/dist/assets/server/db/schema-version.entity.js.map +0 -1
- package/dist/assets/server/db/sqlite.module.d.ts +0 -3
- package/dist/assets/server/db/sqlite.module.js +0 -99
- package/dist/assets/server/db/sqlite.module.js.map +0 -1
- package/dist/assets/server/devops/devops-sink-init.d.ts +0 -10
- package/dist/assets/server/devops/devops-sink-init.js +0 -96
- package/dist/assets/server/devops/devops-sink-init.js.map +0 -1
- package/dist/assets/server/devops/devops-sink-init.spec.d.ts +0 -1
- package/dist/assets/server/devops/devops-sink-init.spec.js +0 -71
- package/dist/assets/server/devops/devops-sink-init.spec.js.map +0 -1
- package/dist/assets/server/devops/devops-sink.module.d.ts +0 -2
- package/dist/assets/server/devops/devops-sink.module.js +0 -22
- package/dist/assets/server/devops/devops-sink.module.js.map +0 -1
- package/dist/assets/server/doctor/doctor.controller.d.ts +0 -13
- package/dist/assets/server/doctor/doctor.controller.js +0 -62
- package/dist/assets/server/doctor/doctor.controller.js.map +0 -1
- package/dist/assets/server/doctor/doctor.module.d.ts +0 -2
- package/dist/assets/server/doctor/doctor.module.js +0 -27
- package/dist/assets/server/doctor/doctor.module.js.map +0 -1
- package/dist/assets/server/doctor/doctor.service.d.ts +0 -15
- package/dist/assets/server/doctor/doctor.service.js +0 -209
- package/dist/assets/server/doctor/doctor.service.js.map +0 -1
- package/dist/assets/server/doctor/doctor.types.d.ts +0 -46
- package/dist/assets/server/doctor/doctor.types.js +0 -3
- package/dist/assets/server/doctor/doctor.types.js.map +0 -1
- package/dist/assets/server/extension/extension-control.controller.d.ts +0 -86
- package/dist/assets/server/extension/extension-control.controller.js +0 -229
- package/dist/assets/server/extension/extension-control.controller.js.map +0 -1
- package/dist/assets/server/extension/extension-control.service.d.ts +0 -59
- package/dist/assets/server/extension/extension-control.service.js +0 -275
- package/dist/assets/server/extension/extension-control.service.js.map +0 -1
- package/dist/assets/server/extension/extension-core.module.d.ts +0 -2
- package/dist/assets/server/extension/extension-core.module.js +0 -21
- package/dist/assets/server/extension/extension-core.module.js.map +0 -1
- package/dist/assets/server/extension/extension-version.controller.d.ts +0 -6
- package/dist/assets/server/extension/extension-version.controller.js +0 -41
- package/dist/assets/server/extension/extension-version.controller.js.map +0 -1
- package/dist/assets/server/extension/extension.module.d.ts +0 -2
- package/dist/assets/server/extension/extension.module.js +0 -26
- package/dist/assets/server/extension/extension.module.js.map +0 -1
- package/dist/assets/server/extraction/adapter.service.d.ts +0 -58
- package/dist/assets/server/extraction/adapter.service.js +0 -396
- package/dist/assets/server/extraction/adapter.service.js.map +0 -1
- package/dist/assets/server/extraction/anomaly-report.service.d.ts +0 -12
- package/dist/assets/server/extraction/anomaly-report.service.js +0 -81
- package/dist/assets/server/extraction/anomaly-report.service.js.map +0 -1
- package/dist/assets/server/extraction/entities/adapter-rule.entity.d.ts +0 -15
- package/dist/assets/server/extraction/entities/adapter-rule.entity.js +0 -81
- package/dist/assets/server/extraction/entities/adapter-rule.entity.js.map +0 -1
- package/dist/assets/server/extraction/entities/company-profile.entity.d.ts +0 -14
- package/dist/assets/server/extraction/entities/company-profile.entity.js +0 -81
- package/dist/assets/server/extraction/entities/company-profile.entity.js.map +0 -1
- package/dist/assets/server/extraction/entities/job-posting.entity.d.ts +0 -15
- package/dist/assets/server/extraction/entities/job-posting.entity.js +0 -86
- package/dist/assets/server/extraction/entities/job-posting.entity.js.map +0 -1
- package/dist/assets/server/extraction/entities/parse-log.entity.d.ts +0 -18
- package/dist/assets/server/extraction/entities/parse-log.entity.js +0 -102
- package/dist/assets/server/extraction/entities/parse-log.entity.js.map +0 -1
- package/dist/assets/server/extraction/entities/talent-profile.entity.d.ts +0 -15
- package/dist/assets/server/extraction/entities/talent-profile.entity.js +0 -86
- package/dist/assets/server/extraction/entities/talent-profile.entity.js.map +0 -1
- package/dist/assets/server/extraction/extraction-entity.controller.d.ts +0 -156
- package/dist/assets/server/extraction/extraction-entity.controller.js +0 -528
- package/dist/assets/server/extraction/extraction-entity.controller.js.map +0 -1
- package/dist/assets/server/extraction/extraction-rule.controller.d.ts +0 -7
- package/dist/assets/server/extraction/extraction-rule.controller.js +0 -48
- package/dist/assets/server/extraction/extraction-rule.controller.js.map +0 -1
- package/dist/assets/server/extraction/extraction-rule.entity.d.ts +0 -15
- package/dist/assets/server/extraction/extraction-rule.entity.js +0 -80
- package/dist/assets/server/extraction/extraction-rule.entity.js.map +0 -1
- package/dist/assets/server/extraction/extraction-rule.service.d.ts +0 -24
- package/dist/assets/server/extraction/extraction-rule.service.js +0 -89
- package/dist/assets/server/extraction/extraction-rule.service.js.map +0 -1
- package/dist/assets/server/extraction/extraction.module.d.ts +0 -2
- package/dist/assets/server/extraction/extraction.module.js +0 -63
- package/dist/assets/server/extraction/extraction.module.js.map +0 -1
- package/dist/assets/server/extraction/extraction.service.d.ts +0 -81
- package/dist/assets/server/extraction/extraction.service.js +0 -488
- package/dist/assets/server/extraction/extraction.service.js.map +0 -1
- package/dist/assets/server/extraction/harness-overlay.service.d.ts +0 -41
- package/dist/assets/server/extraction/harness-overlay.service.js +0 -319
- package/dist/assets/server/extraction/harness-overlay.service.js.map +0 -1
- package/dist/assets/server/extraction/liepin-extractor.d.ts +0 -1
- package/dist/assets/server/extraction/liepin-extractor.js +0 -172
- package/dist/assets/server/extraction/liepin-extractor.js.map +0 -1
- package/dist/assets/server/extraction/linkedin-extractor.d.ts +0 -1
- package/dist/assets/server/extraction/linkedin-extractor.js +0 -244
- package/dist/assets/server/extraction/linkedin-extractor.js.map +0 -1
- package/dist/assets/server/extraction/rrweb-snapshot.utils.d.ts +0 -15
- package/dist/assets/server/extraction/rrweb-snapshot.utils.js +0 -48
- package/dist/assets/server/extraction/rrweb-snapshot.utils.js.map +0 -1
- package/dist/assets/server/extraction/rrweb-snapshot.utils.spec.d.ts +0 -1
- package/dist/assets/server/extraction/rrweb-snapshot.utils.spec.js +0 -60
- package/dist/assets/server/extraction/rrweb-snapshot.utils.spec.js.map +0 -1
- package/dist/assets/server/extraction/script-rule.d.ts +0 -14
- package/dist/assets/server/extraction/script-rule.js +0 -61
- package/dist/assets/server/extraction/script-rule.js.map +0 -1
- package/dist/assets/server/extraction/snapshot-analysis.service.d.ts +0 -23
- package/dist/assets/server/extraction/snapshot-analysis.service.js +0 -147
- package/dist/assets/server/extraction/snapshot-analysis.service.js.map +0 -1
- package/dist/assets/server/extraction/structured-data.d.ts +0 -7
- package/dist/assets/server/extraction/structured-data.js +0 -96
- package/dist/assets/server/extraction/structured-data.js.map +0 -1
- package/dist/assets/server/governance/action-audit.entity.d.ts +0 -12
- package/dist/assets/server/governance/action-audit.entity.js +0 -66
- package/dist/assets/server/governance/action-audit.entity.js.map +0 -1
- package/dist/assets/server/governance/governance.command-recorder.d.ts +0 -17
- package/dist/assets/server/governance/governance.command-recorder.js +0 -98
- package/dist/assets/server/governance/governance.command-recorder.js.map +0 -1
- package/dist/assets/server/governance/governance.controller.d.ts +0 -14
- package/dist/assets/server/governance/governance.controller.js +0 -77
- package/dist/assets/server/governance/governance.controller.js.map +0 -1
- package/dist/assets/server/governance/governance.ingester.d.ts +0 -21
- package/dist/assets/server/governance/governance.ingester.js +0 -117
- package/dist/assets/server/governance/governance.ingester.js.map +0 -1
- package/dist/assets/server/governance/governance.module.d.ts +0 -2
- package/dist/assets/server/governance/governance.module.js +0 -27
- package/dist/assets/server/governance/governance.module.js.map +0 -1
- package/dist/assets/server/governance/governance.service.d.ts +0 -122
- package/dist/assets/server/governance/governance.service.js +0 -398
- package/dist/assets/server/governance/governance.service.js.map +0 -1
- package/dist/assets/server/hcapi/hcapi.module.d.ts +0 -2
- package/dist/assets/server/hcapi/hcapi.module.js +0 -23
- package/dist/assets/server/hcapi/hcapi.module.js.map +0 -1
- package/dist/assets/server/hcapi/hcapi.service.d.ts +0 -28
- package/dist/assets/server/hcapi/hcapi.service.js +0 -81
- package/dist/assets/server/hcapi/hcapi.service.js.map +0 -1
- package/dist/assets/server/health/health.controller.d.ts +0 -19
- package/dist/assets/server/health/health.controller.js +0 -59
- package/dist/assets/server/health/health.controller.js.map +0 -1
- package/dist/assets/server/jobcase/jobcase.controller.d.ts +0 -13
- package/dist/assets/server/jobcase/jobcase.controller.js +0 -61
- package/dist/assets/server/jobcase/jobcase.controller.js.map +0 -1
- package/dist/assets/server/jobcase/jobcase.entity.d.ts +0 -14
- package/dist/assets/server/jobcase/jobcase.entity.js +0 -77
- package/dist/assets/server/jobcase/jobcase.entity.js.map +0 -1
- package/dist/assets/server/jobcase/jobcase.module.d.ts +0 -2
- package/dist/assets/server/jobcase/jobcase.module.js +0 -26
- package/dist/assets/server/jobcase/jobcase.module.js.map +0 -1
- package/dist/assets/server/jobcase/jobcase.service.d.ts +0 -23
- package/dist/assets/server/jobcase/jobcase.service.js +0 -57
- package/dist/assets/server/jobcase/jobcase.service.js.map +0 -1
- package/dist/assets/server/llm/llm.module.d.ts +0 -2
- package/dist/assets/server/llm/llm.module.js +0 -21
- package/dist/assets/server/llm/llm.module.js.map +0 -1
- package/dist/assets/server/llm/llm.service.d.ts +0 -18
- package/dist/assets/server/llm/llm.service.js +0 -65
- package/dist/assets/server/llm/llm.service.js.map +0 -1
- package/dist/assets/server/main.d.ts +0 -1
- package/dist/assets/server/main.js +0 -31
- package/dist/assets/server/main.js.map +0 -1
- package/dist/assets/server/matching/matching.controller.d.ts +0 -16
- package/dist/assets/server/matching/matching.controller.js +0 -97
- package/dist/assets/server/matching/matching.controller.js.map +0 -1
- package/dist/assets/server/matching/matching.module.d.ts +0 -2
- package/dist/assets/server/matching/matching.module.js +0 -36
- package/dist/assets/server/matching/matching.module.js.map +0 -1
- package/dist/assets/server/matching/matching.service.d.ts +0 -55
- package/dist/assets/server/matching/matching.service.js +0 -409
- package/dist/assets/server/matching/matching.service.js.map +0 -1
- package/dist/assets/server/package.json +0 -59
- package/dist/assets/server/parsed-resume/parsed-resume.controller.d.ts +0 -6
- package/dist/assets/server/parsed-resume/parsed-resume.controller.js +0 -42
- package/dist/assets/server/parsed-resume/parsed-resume.controller.js.map +0 -1
- package/dist/assets/server/parsed-resume/parsed-resume.entity.d.ts +0 -124
- package/dist/assets/server/parsed-resume/parsed-resume.entity.js +0 -72
- package/dist/assets/server/parsed-resume/parsed-resume.entity.js.map +0 -1
- package/dist/assets/server/parsed-resume/parsed-resume.module.d.ts +0 -2
- package/dist/assets/server/parsed-resume/parsed-resume.module.js +0 -26
- package/dist/assets/server/parsed-resume/parsed-resume.module.js.map +0 -1
- package/dist/assets/server/parsed-resume/parsed-resume.service.d.ts +0 -10
- package/dist/assets/server/parsed-resume/parsed-resume.service.js +0 -45
- package/dist/assets/server/parsed-resume/parsed-resume.service.js.map +0 -1
- package/dist/assets/server/parsing/parse-error-report.entity.d.ts +0 -11
- package/dist/assets/server/parsing/parse-error-report.entity.js +0 -66
- package/dist/assets/server/parsing/parse-error-report.entity.js.map +0 -1
- package/dist/assets/server/parsing/parsing.controller.d.ts +0 -19
- package/dist/assets/server/parsing/parsing.controller.js +0 -97
- package/dist/assets/server/parsing/parsing.controller.js.map +0 -1
- package/dist/assets/server/parsing/parsing.module.d.ts +0 -2
- package/dist/assets/server/parsing/parsing.module.js +0 -38
- package/dist/assets/server/parsing/parsing.module.js.map +0 -1
- package/dist/assets/server/parsing/parsing.service.d.ts +0 -38
- package/dist/assets/server/parsing/parsing.service.js +0 -263
- package/dist/assets/server/parsing/parsing.service.js.map +0 -1
- package/dist/assets/server/preference/preference.controller.d.ts +0 -14
- package/dist/assets/server/preference/preference.controller.js +0 -66
- package/dist/assets/server/preference/preference.controller.js.map +0 -1
- package/dist/assets/server/preference/preference.entity.d.ts +0 -13
- package/dist/assets/server/preference/preference.entity.js +0 -77
- package/dist/assets/server/preference/preference.entity.js.map +0 -1
- package/dist/assets/server/preference/preference.module.d.ts +0 -2
- package/dist/assets/server/preference/preference.module.js +0 -26
- package/dist/assets/server/preference/preference.module.js.map +0 -1
- package/dist/assets/server/preference/preference.service.d.ts +0 -33
- package/dist/assets/server/preference/preference.service.js +0 -122
- package/dist/assets/server/preference/preference.service.js.map +0 -1
- package/dist/assets/server/query/fields-meta.controller.d.ts +0 -28
- package/dist/assets/server/query/fields-meta.controller.js +0 -57
- package/dist/assets/server/query/fields-meta.controller.js.map +0 -1
- package/dist/assets/server/query/query-builder.controller.d.ts +0 -11
- package/dist/assets/server/query/query-builder.controller.js +0 -40
- package/dist/assets/server/query/query-builder.controller.js.map +0 -1
- package/dist/assets/server/query/query-builder.service.d.ts +0 -8
- package/dist/assets/server/query/query-builder.service.js +0 -41
- package/dist/assets/server/query/query-builder.service.js.map +0 -1
- package/dist/assets/server/query/query.module.d.ts +0 -2
- package/dist/assets/server/query/query.module.js +0 -23
- package/dist/assets/server/query/query.module.js.map +0 -1
- package/dist/assets/server/recording/entities/recording-event.entity.d.ts +0 -9
- package/dist/assets/server/recording/entities/recording-event.entity.js +0 -56
- package/dist/assets/server/recording/entities/recording-event.entity.js.map +0 -1
- package/dist/assets/server/recording/entities/recording-snapshot.entity.d.ts +0 -16
- package/dist/assets/server/recording/entities/recording-snapshot.entity.js +0 -91
- package/dist/assets/server/recording/entities/recording-snapshot.entity.js.map +0 -1
- package/dist/assets/server/recording/recording-event-bus.service.d.ts +0 -4
- package/dist/assets/server/recording/recording-event-bus.service.js +0 -25
- package/dist/assets/server/recording/recording-event-bus.service.js.map +0 -1
- package/dist/assets/server/recording/recording-event-queue.service.d.ts +0 -26
- package/dist/assets/server/recording/recording-event-queue.service.js +0 -115
- package/dist/assets/server/recording/recording-event-queue.service.js.map +0 -1
- package/dist/assets/server/recording/recording-retention.service.d.ts +0 -38
- package/dist/assets/server/recording/recording-retention.service.js +0 -174
- package/dist/assets/server/recording/recording-retention.service.js.map +0 -1
- package/dist/assets/server/recording/recording-snapshot.service.d.ts +0 -14
- package/dist/assets/server/recording/recording-snapshot.service.js +0 -85
- package/dist/assets/server/recording/recording-snapshot.service.js.map +0 -1
- package/dist/assets/server/recording/recording-snapshot.service.spec.d.ts +0 -1
- package/dist/assets/server/recording/recording-snapshot.service.spec.js +0 -65
- package/dist/assets/server/recording/recording-snapshot.service.spec.js.map +0 -1
- package/dist/assets/server/recording/recording.controller.d.ts +0 -74
- package/dist/assets/server/recording/recording.controller.js +0 -112
- package/dist/assets/server/recording/recording.controller.js.map +0 -1
- package/dist/assets/server/recording/recording.gateway.d.ts +0 -15
- package/dist/assets/server/recording/recording.gateway.js +0 -132
- package/dist/assets/server/recording/recording.gateway.js.map +0 -1
- package/dist/assets/server/recording/recording.module.d.ts +0 -2
- package/dist/assets/server/recording/recording.module.js +0 -50
- package/dist/assets/server/recording/recording.module.js.map +0 -1
- package/dist/assets/server/recording/recording.service.d.ts +0 -52
- package/dist/assets/server/recording/recording.service.js +0 -149
- package/dist/assets/server/recording/recording.service.js.map +0 -1
- package/dist/assets/server/remark/remark.controller.d.ts +0 -21
- package/dist/assets/server/remark/remark.controller.js +0 -50
- package/dist/assets/server/remark/remark.controller.js.map +0 -1
- package/dist/assets/server/remark/remark.entity.d.ts +0 -18
- package/dist/assets/server/remark/remark.entity.js +0 -67
- package/dist/assets/server/remark/remark.entity.js.map +0 -1
- package/dist/assets/server/remark/remark.module.d.ts +0 -2
- package/dist/assets/server/remark/remark.module.js +0 -26
- package/dist/assets/server/remark/remark.module.js.map +0 -1
- package/dist/assets/server/remark/remark.service.d.ts +0 -8
- package/dist/assets/server/remark/remark.service.js +0 -39
- package/dist/assets/server/remark/remark.service.js.map +0 -1
- package/dist/assets/server/report/report.controller.d.ts +0 -18
- package/dist/assets/server/report/report.controller.js +0 -41
- package/dist/assets/server/report/report.controller.js.map +0 -1
- package/dist/assets/server/report/report.module.d.ts +0 -2
- package/dist/assets/server/report/report.module.js +0 -24
- package/dist/assets/server/report/report.module.js.map +0 -1
- package/dist/assets/server/report/report.service.d.ts +0 -23
- package/dist/assets/server/report/report.service.js +0 -54
- package/dist/assets/server/report/report.service.js.map +0 -1
- package/dist/assets/server/rules/rules.controller.d.ts +0 -6
- package/dist/assets/server/rules/rules.controller.js +0 -35
- package/dist/assets/server/rules/rules.controller.js.map +0 -1
- package/dist/assets/server/rules/rules.module.d.ts +0 -2
- package/dist/assets/server/rules/rules.module.js +0 -23
- package/dist/assets/server/rules/rules.module.js.map +0 -1
- package/dist/assets/server/rules/rules.service.d.ts +0 -10
- package/dist/assets/server/rules/rules.service.js +0 -26
- package/dist/assets/server/rules/rules.service.js.map +0 -1
- package/dist/assets/server/search/search.controller.d.ts +0 -6
- package/dist/assets/server/search/search.controller.js +0 -53
- package/dist/assets/server/search/search.controller.js.map +0 -1
- package/dist/assets/server/search/search.module.d.ts +0 -2
- package/dist/assets/server/search/search.module.js +0 -24
- package/dist/assets/server/search/search.module.js.map +0 -1
- package/dist/assets/server/search/search.service.d.ts +0 -6
- package/dist/assets/server/search/search.service.js +0 -46
- package/dist/assets/server/search/search.service.js.map +0 -1
- package/dist/assets/server/sentry.d.ts +0 -3
- package/dist/assets/server/sentry.js +0 -10
- package/dist/assets/server/sentry.js.map +0 -1
- package/dist/assets/server/site/entities/site-registry.entity.d.ts +0 -13
- package/dist/assets/server/site/entities/site-registry.entity.js +0 -76
- package/dist/assets/server/site/entities/site-registry.entity.js.map +0 -1
- package/dist/assets/server/site/site.controller.d.ts +0 -38
- package/dist/assets/server/site/site.controller.js +0 -60
- package/dist/assets/server/site/site.controller.js.map +0 -1
- package/dist/assets/server/site/site.module.d.ts +0 -2
- package/dist/assets/server/site/site.module.js +0 -26
- package/dist/assets/server/site/site.module.js.map +0 -1
- package/dist/assets/server/site/site.service.d.ts +0 -42
- package/dist/assets/server/site/site.service.js +0 -154
- package/dist/assets/server/site/site.service.js.map +0 -1
- package/dist/assets/server/snapshot/raw-snapshot.entity.d.ts +0 -35
- package/dist/assets/server/snapshot/raw-snapshot.entity.js +0 -62
- package/dist/assets/server/snapshot/raw-snapshot.entity.js.map +0 -1
- package/dist/assets/server/snapshot/snapshot.controller.d.ts +0 -18
- package/dist/assets/server/snapshot/snapshot.controller.js +0 -76
- package/dist/assets/server/snapshot/snapshot.controller.js.map +0 -1
- package/dist/assets/server/snapshot/snapshot.module.d.ts +0 -2
- package/dist/assets/server/snapshot/snapshot.module.js +0 -26
- package/dist/assets/server/snapshot/snapshot.module.js.map +0 -1
- package/dist/assets/server/snapshot/snapshot.service.d.ts +0 -10
- package/dist/assets/server/snapshot/snapshot.service.js +0 -48
- package/dist/assets/server/snapshot/snapshot.service.js.map +0 -1
- package/dist/assets/server/system/system.controller.d.ts +0 -40
- package/dist/assets/server/system/system.controller.js +0 -93
- package/dist/assets/server/system/system.controller.js.map +0 -1
- package/dist/assets/server/system/system.module.d.ts +0 -2
- package/dist/assets/server/system/system.module.js +0 -26
- package/dist/assets/server/system/system.module.js.map +0 -1
- package/dist/assets/server/system/system.service.d.ts +0 -87
- package/dist/assets/server/system/system.service.js +0 -434
- package/dist/assets/server/system/system.service.js.map +0 -1
- package/dist/assets/server/talent-fingerprint/fingerprint-match.service.d.ts +0 -28
- package/dist/assets/server/talent-fingerprint/fingerprint-match.service.js +0 -186
- package/dist/assets/server/talent-fingerprint/fingerprint-match.service.js.map +0 -1
- package/dist/assets/server/talent-fingerprint/talent-fingerprint.entity.d.ts +0 -30
- package/dist/assets/server/talent-fingerprint/talent-fingerprint.entity.js +0 -55
- package/dist/assets/server/talent-fingerprint/talent-fingerprint.entity.js.map +0 -1
- package/dist/assets/server/talent-fingerprint/talent-fingerprint.module.d.ts +0 -2
- package/dist/assets/server/talent-fingerprint/talent-fingerprint.module.js +0 -25
- package/dist/assets/server/talent-fingerprint/talent-fingerprint.module.js.map +0 -1
- package/dist/assets/server/talent-fingerprint/talent-fingerprint.service.d.ts +0 -8
- package/dist/assets/server/talent-fingerprint/talent-fingerprint.service.js +0 -44
- package/dist/assets/server/talent-fingerprint/talent-fingerprint.service.js.map +0 -1
- package/dist/assets/server/talent-job-match/talent-job-match.controller.d.ts +0 -6
- package/dist/assets/server/talent-job-match/talent-job-match.controller.js +0 -42
- package/dist/assets/server/talent-job-match/talent-job-match.controller.js.map +0 -1
- package/dist/assets/server/talent-job-match/talent-job-match.entity.d.ts +0 -33
- package/dist/assets/server/talent-job-match/talent-job-match.entity.js +0 -73
- package/dist/assets/server/talent-job-match/talent-job-match.entity.js.map +0 -1
- package/dist/assets/server/talent-job-match/talent-job-match.module.d.ts +0 -2
- package/dist/assets/server/talent-job-match/talent-job-match.module.js +0 -26
- package/dist/assets/server/talent-job-match/talent-job-match.module.js.map +0 -1
- package/dist/assets/server/talent-job-match/talent-job-match.service.d.ts +0 -9
- package/dist/assets/server/talent-job-match/talent-job-match.service.js +0 -42
- package/dist/assets/server/talent-job-match/talent-job-match.service.js.map +0 -1
- package/dist/assets/server/talent-portrait/portrait-merge.service.d.ts +0 -17
- package/dist/assets/server/talent-portrait/portrait-merge.service.js +0 -200
- package/dist/assets/server/talent-portrait/portrait-merge.service.js.map +0 -1
- package/dist/assets/server/talent-portrait/talent-portrait.controller.d.ts +0 -7
- package/dist/assets/server/talent-portrait/talent-portrait.controller.js +0 -52
- package/dist/assets/server/talent-portrait/talent-portrait.controller.js.map +0 -1
- package/dist/assets/server/talent-portrait/talent-portrait.entity.d.ts +0 -91
- package/dist/assets/server/talent-portrait/talent-portrait.entity.js +0 -71
- package/dist/assets/server/talent-portrait/talent-portrait.entity.js.map +0 -1
- package/dist/assets/server/talent-portrait/talent-portrait.module.d.ts +0 -2
- package/dist/assets/server/talent-portrait/talent-portrait.module.js +0 -27
- package/dist/assets/server/talent-portrait/talent-portrait.module.js.map +0 -1
- package/dist/assets/server/talent-portrait/talent-portrait.service.d.ts +0 -10
- package/dist/assets/server/talent-portrait/talent-portrait.service.js +0 -46
- package/dist/assets/server/talent-portrait/talent-portrait.service.js.map +0 -1
- package/dist/assets/server/telemetry/telemetry.module.d.ts +0 -2
- package/dist/assets/server/telemetry/telemetry.module.js +0 -24
- package/dist/assets/server/telemetry/telemetry.module.js.map +0 -1
- package/dist/assets/server/telemetry/telemetry.service.d.ts +0 -29
- package/dist/assets/server/telemetry/telemetry.service.js +0 -116
- package/dist/assets/server/telemetry/telemetry.service.js.map +0 -1
- package/dist/auto-doctor.d.ts +0 -8
- package/dist/auto-doctor.js +0 -34
- package/dist/bundled-assets.d.ts +0 -22
- package/dist/bundled-assets.js +0 -80
- package/dist/cache/db.d.ts +0 -7
- package/dist/cache/db.js +0 -61
- package/dist/commands/addons.d.ts +0 -4
- package/dist/commands/addons.js +0 -354
- package/dist/commands/cache.d.ts +0 -8
- package/dist/commands/cache.js +0 -59
- package/dist/commands/case.d.ts +0 -67
- package/dist/commands/case.js +0 -101
- package/dist/commands/config.d.ts +0 -17
- package/dist/commands/config.js +0 -30
- package/dist/commands/customer.d.ts +0 -25
- package/dist/commands/customer.js +0 -137
- package/dist/commands/doctor.d.ts +0 -63
- package/dist/commands/doctor.js +0 -666
- package/dist/commands/extension.d.ts +0 -5
- package/dist/commands/extension.js +0 -420
- package/dist/commands/extras.d.ts +0 -55
- package/dist/commands/extras.js +0 -456
- package/dist/commands/init.d.ts +0 -10
- package/dist/commands/init.js +0 -58
- package/dist/commands/install.d.ts +0 -14
- package/dist/commands/install.js +0 -77
- package/dist/commands/issue-env.d.ts +0 -23
- package/dist/commands/issue-env.js +0 -101
- package/dist/commands/job.d.ts +0 -13
- package/dist/commands/job.js +0 -131
- package/dist/commands/login.d.ts +0 -22
- package/dist/commands/login.js +0 -192
- package/dist/commands/logout.d.ts +0 -3
- package/dist/commands/logout.js +0 -12
- package/dist/commands/migrate.d.ts +0 -32
- package/dist/commands/migrate.js +0 -116
- package/dist/commands/note.d.ts +0 -3
- package/dist/commands/note.js +0 -75
- package/dist/commands/ops.d.ts +0 -6
- package/dist/commands/ops.js +0 -461
- package/dist/commands/preference.d.ts +0 -6
- package/dist/commands/preference.js +0 -80
- package/dist/commands/record.d.ts +0 -12
- package/dist/commands/record.js +0 -56
- package/dist/commands/report.d.ts +0 -7
- package/dist/commands/report.js +0 -48
- package/dist/commands/search.d.ts +0 -14
- package/dist/commands/search.js +0 -46
- package/dist/commands/server.d.ts +0 -35
- package/dist/commands/server.js +0 -471
- package/dist/commands/status.d.ts +0 -24
- package/dist/commands/status.js +0 -98
- package/dist/commands/update.d.ts +0 -8
- package/dist/commands/update.js +0 -125
- package/dist/config.d.ts +0 -67
- package/dist/config.js +0 -121
- package/dist/extension-sync.d.ts +0 -35
- package/dist/extension-sync.js +0 -159
- package/dist/i18n/index.d.ts +0 -7
- package/dist/i18n/index.js +0 -18
- package/dist/i18n/locales/en-US.json +0 -79
- package/dist/i18n/locales/zh-CN.json +0 -79
- package/dist/index.d.ts +0 -2
- package/dist/keychain.d.ts +0 -18
- package/dist/keychain.js +0 -109
- package/dist/logger.d.ts +0 -7
- package/dist/logger.js +0 -80
- package/dist/native-check.d.ts +0 -6
- package/dist/native-check.js +0 -30
- package/dist/postinstall.d.ts +0 -1
- package/dist/sentry.d.ts +0 -4
- package/dist/sentry.js +0 -6
- package/dist/updater.d.ts +0 -119
- package/dist/updater.js +0 -475
- package/dist/utils/artifact-checksum.d.ts +0 -4
- package/dist/utils/artifact-checksum.js +0 -40
- package/dist/utils/command-error.d.ts +0 -11
- package/dist/utils/command-error.js +0 -47
- package/dist/utils/link.d.ts +0 -18
- package/dist/utils/link.js +0 -83
- package/dist/utils/local-http.d.ts +0 -7
- package/dist/utils/local-http.js +0 -30
- package/dist/utils/proc.d.ts +0 -35
- package/dist/utils/proc.js +0 -81
- package/dist/utils/proxy-detect.d.ts +0 -20
- package/dist/utils/proxy-detect.js +0 -96
- package/dist/utils/script-path.d.ts +0 -5
- package/dist/utils/script-path.js +0 -27
- package/dist/utils/spawn.d.ts +0 -19
- package/dist/utils/spawn.js +0 -60
- package/dist/version.d.ts +0 -16
- package/dist/version.js +0 -388
- package/dist/watchdog.d.ts +0 -31
- package/dist/web/dist/_next/static/chunks/539-cd9d7c0ee78f8874.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/auth/verify/page-f13c66b48f7cf13e.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/companies/page-e38a69e1929d0953.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/jobs/page-6a281776fec065f6.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/layout-83e623e973c1693f.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/matching/jobs/[id]/talents/page-cdf1ed0971999f35.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/matching/portraits/[id]/jobs/page-87f04f1d61b94cb2.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/page-affa1ffde089f1dd.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/parselog/page-31d3630d611649f7.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/recordings/page-9cdefceb2bff613f.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/snapshots/[id]/agent-prompt/page-6996f7f221b1a7eb.js +0 -1
- package/dist/web/dist/_next/static/chunks/app/talents/page-30748338da20d7e0.js +0 -1
- package/dist/web/dist/_next/static/chunks/webpack-1784baecc6fdcf0b.js +0 -1
- package/dist/web/dist/_next/static/css/b7097b50a6497650.css +0 -3
- /package/dist/web/dist/_next/static/{hG-sO5oTR0EvAw6sU7EMO → L4ZJv0swR7OTsvB_PaAB4}/_buildManifest.js +0 -0
- /package/dist/web/dist/_next/static/{hG-sO5oTR0EvAw6sU7EMO → L4ZJv0swR7OTsvB_PaAB4}/_ssgManifest.js +0 -0
package/dist/commands/record.js
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
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 { printCommandError } from '../utils/command-error.js';
|
|
9
|
-
export async function runRecordTranscript(filePath, options) {
|
|
10
|
-
const config = loadConfig();
|
|
11
|
-
const token = await getToken();
|
|
12
|
-
const headers = token ? { Authorization: `UTOKEN ${token}` } : {};
|
|
13
|
-
if (!fs.existsSync(filePath)) {
|
|
14
|
-
throw new Error(`文件不存在: ${filePath}`);
|
|
15
|
-
}
|
|
16
|
-
const transcript = fs.readFileSync(filePath, 'utf-8');
|
|
17
|
-
ensureCacheDir();
|
|
18
|
-
const res = await axios.post(`${config.serverUrl}/communication-records`, {
|
|
19
|
-
externalId: uuidv4(),
|
|
20
|
-
type: options.type || 'call',
|
|
21
|
-
transcript,
|
|
22
|
-
personId: options.personId ? parseInt(options.personId, 10) : undefined,
|
|
23
|
-
jobCaseId: options.jobCaseId ? parseInt(options.jobCaseId, 10) : undefined,
|
|
24
|
-
}, { headers, proxy: false });
|
|
25
|
-
return res.data;
|
|
26
|
-
}
|
|
27
|
-
export function runRecordCall(audioFile) {
|
|
28
|
-
return { audioFile, note: 'STT 处理待接入(本地 faster-whisper 或云端 Whisper API)。' };
|
|
29
|
-
}
|
|
30
|
-
export const recordCommand = new Command('record')
|
|
31
|
-
.description('沟通记录/录音归档');
|
|
32
|
-
recordCommand
|
|
33
|
-
.command('transcript <file>')
|
|
34
|
-
.description('上传转写文本并生成沟通记录草稿')
|
|
35
|
-
.option('--type <type>', '记录类型(call/wechat/email/audio/meeting)', 'call')
|
|
36
|
-
.option('--personId <id>', '关联人才 ID')
|
|
37
|
-
.option('--jobCaseId <id>', '关联 JobCase ID')
|
|
38
|
-
.action(async (filePath, options) => {
|
|
39
|
-
try {
|
|
40
|
-
const data = await runRecordTranscript(filePath, options);
|
|
41
|
-
console.log(`已创建沟通记录草稿: ${data.id} (${data.externalId})`);
|
|
42
|
-
console.log('请使用本地 LLM 对转写文本做 NER/摘要/实体链接后确认归档。');
|
|
43
|
-
}
|
|
44
|
-
catch (err) {
|
|
45
|
-
await printCommandError('record:upload-failed', err);
|
|
46
|
-
process.exit(1);
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
recordCommand
|
|
50
|
-
.command('call <audioFile>')
|
|
51
|
-
.description('上传音频文件(MVP 阶段仅保存路径,STT 由本地或云端后续处理)')
|
|
52
|
-
.action((audioFile) => {
|
|
53
|
-
const result = runRecordCall(audioFile);
|
|
54
|
-
console.log(`音频文件已记录: ${result.audioFile}`);
|
|
55
|
-
console.log(result.note);
|
|
56
|
-
});
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
export interface ReportSalesOptions {
|
|
3
|
-
name?: string;
|
|
4
|
-
industry?: string;
|
|
5
|
-
}
|
|
6
|
-
export declare function runReportSales(customerId: string, options: ReportSalesOptions): Promise<any>;
|
|
7
|
-
export declare const reportCommand: Command;
|
package/dist/commands/report.js
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import axios from 'axios';
|
|
3
|
-
import { loadConfig } from '../config.js';
|
|
4
|
-
import { getToken } from '../keychain.js';
|
|
5
|
-
import { printCommandError } from '../utils/command-error.js';
|
|
6
|
-
export async function runReportSales(customerId, options) {
|
|
7
|
-
const config = loadConfig();
|
|
8
|
-
const token = await getToken();
|
|
9
|
-
const headers = token ? { Authorization: `UTOKEN ${token}` } : {};
|
|
10
|
-
const res = await axios.get(`${config.serverUrl}/reports/sales/${encodeURIComponent(customerId)}`, {
|
|
11
|
-
headers,
|
|
12
|
-
params: { name: options.name, industry: options.industry },
|
|
13
|
-
proxy: false,
|
|
14
|
-
});
|
|
15
|
-
return res.data;
|
|
16
|
-
}
|
|
17
|
-
export const reportCommand = new Command('report')
|
|
18
|
-
.description('生成报告');
|
|
19
|
-
reportCommand
|
|
20
|
-
.command('sales <customerId>')
|
|
21
|
-
.description('生成 BD 销售方案报告')
|
|
22
|
-
.option('--name <name>', '客户名称')
|
|
23
|
-
.option('--industry <industry>', '行业')
|
|
24
|
-
.action(async (customerId, options) => {
|
|
25
|
-
try {
|
|
26
|
-
const data = await runReportSales(customerId, options);
|
|
27
|
-
console.log(`# BD 销售方案报告:${data.customerName}`);
|
|
28
|
-
console.log(`\n## 客户信息`);
|
|
29
|
-
console.log(`- 客户 ID: ${data.customerId}`);
|
|
30
|
-
console.log(`- 行业: ${data.industry || '未指定'}`);
|
|
31
|
-
console.log(`\n## 历史相似客户案例`);
|
|
32
|
-
for (const c of data.similarCustomers || []) {
|
|
33
|
-
console.log(`- ${c.name}(${c.industry})成单数:${c.dealCount} — ${c.notes}`);
|
|
34
|
-
}
|
|
35
|
-
console.log(`\n## 可匹配人才池`);
|
|
36
|
-
const pool = data.talentPool || {};
|
|
37
|
-
console.log(`- 总数:${pool.count || 0}`);
|
|
38
|
-
if (pool.error) {
|
|
39
|
-
console.log(`- 人才数据获取失败:${pool.error}`);
|
|
40
|
-
}
|
|
41
|
-
console.log(`\n## 推荐方案`);
|
|
42
|
-
console.log('> 请使用本地 LLM 基于以上原始数据生成最终销售方案与交付节奏。');
|
|
43
|
-
}
|
|
44
|
-
catch (err) {
|
|
45
|
-
await printCommandError('report:generate-failed', err);
|
|
46
|
-
process.exit(1);
|
|
47
|
-
}
|
|
48
|
-
});
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
export interface SearchOptions {
|
|
3
|
-
filter?: string;
|
|
4
|
-
keyword?: string;
|
|
5
|
-
areaId?: string;
|
|
6
|
-
postId?: string;
|
|
7
|
-
nationalityId?: string;
|
|
8
|
-
page?: string;
|
|
9
|
-
limit?: string;
|
|
10
|
-
source?: string;
|
|
11
|
-
top?: string;
|
|
12
|
-
}
|
|
13
|
-
export declare function runSearch(options: SearchOptions): Promise<any>;
|
|
14
|
-
export declare const searchCommand: Command;
|
package/dist/commands/search.js
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
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
|
-
import { printCommandError } from '../utils/command-error.js';
|
|
7
|
-
export async function runSearch(options) {
|
|
8
|
-
const config = loadConfig();
|
|
9
|
-
const token = await getToken();
|
|
10
|
-
const params = {
|
|
11
|
-
keyword: options.keyword || options.filter,
|
|
12
|
-
areaId: options.areaId,
|
|
13
|
-
postId: options.postId,
|
|
14
|
-
nationalityId: options.nationalityId,
|
|
15
|
-
page: options.page,
|
|
16
|
-
limit: options.limit || options.top,
|
|
17
|
-
source: options.source,
|
|
18
|
-
};
|
|
19
|
-
const res = await axios.get(`${config.serverUrl}/search/talent`, {
|
|
20
|
-
headers: token ? { Authorization: `UTOKEN ${token}` } : {},
|
|
21
|
-
params,
|
|
22
|
-
proxy: false,
|
|
23
|
-
});
|
|
24
|
-
return res.data;
|
|
25
|
-
}
|
|
26
|
-
export const searchCommand = new Command('search')
|
|
27
|
-
.description(i18n.t('search.description'))
|
|
28
|
-
.option('--filter <filter>', i18n.t('search.filter'))
|
|
29
|
-
.option('--keyword <keyword>', '搜索关键词')
|
|
30
|
-
.option('--areaId <areaId>', '现居地 ID')
|
|
31
|
-
.option('--postId <postId>', '职位 ID')
|
|
32
|
-
.option('--nationalityId <nationalityId>', '国籍 ID')
|
|
33
|
-
.option('--page <n>', '页码', '1')
|
|
34
|
-
.option('--limit <n>', '每页数量', '10')
|
|
35
|
-
.option('--source <sources>', i18n.t('search.source'), 'u_person')
|
|
36
|
-
.option('--top <n>', i18n.t('search.top'), '10')
|
|
37
|
-
.action(async (options) => {
|
|
38
|
-
try {
|
|
39
|
-
const data = await runSearch(options);
|
|
40
|
-
console.log(JSON.stringify(data, null, 2));
|
|
41
|
-
}
|
|
42
|
-
catch (err) {
|
|
43
|
-
await printCommandError('search:failed', err);
|
|
44
|
-
process.exit(1);
|
|
45
|
-
}
|
|
46
|
-
});
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
type StartLock = 'acquired' | 'busy' | 'stolen';
|
|
3
|
-
/** FID-093:导出供单测覆盖竞态/残留锁语义 */
|
|
4
|
-
export declare function acquireStartLock(): StartLock;
|
|
5
|
-
/**
|
|
6
|
-
* server.log 无界增长曾达 800M+ 挤占用户磁盘(FID-068)。
|
|
7
|
-
* 后台 daemon 启动前按大小轮转:超过 HM_LOG_MAX_BYTES(默认 50MB)时
|
|
8
|
-
* server.log → server.log.1 → …保留最近 LOG_KEEP_FILES 份,最旧丢弃。
|
|
9
|
-
* 纯 fs 实现,Windows 兼容(rename 前先清目标,Windows 不允许覆盖已有文件)。
|
|
10
|
-
*/
|
|
11
|
-
export declare function rotateLogIfNeeded(logFile: string, maxBytes?: number, keep?: number): boolean;
|
|
12
|
-
declare function tryReadPid(): number | null;
|
|
13
|
-
export { tryReadPid };
|
|
14
|
-
/** 定位 server 包根(dist 优先,ts-node 开发模式兜底);找不到返回 null */
|
|
15
|
-
export declare function findServerRoot(): string | null;
|
|
16
|
-
/** 探活:server /health 是否可访问(短超时,永不 throw)。导出供 version.ts 重启编排复核 */
|
|
17
|
-
export declare function probeServerHealth(url: string, timeoutMs?: number): Promise<boolean>;
|
|
18
|
-
/** 对应 ChromePilot start: 启动本地 NestJS Server(提供 REST + WebSocket + SPA) */
|
|
19
|
-
export declare function runStart(opts: {
|
|
20
|
-
port?: number;
|
|
21
|
-
host?: string;
|
|
22
|
-
foreground?: boolean;
|
|
23
|
-
}): Promise<{
|
|
24
|
-
started: boolean;
|
|
25
|
-
pid: number | null;
|
|
26
|
-
url: string;
|
|
27
|
-
msg: string;
|
|
28
|
-
}>;
|
|
29
|
-
export declare function runStop(): Promise<{
|
|
30
|
-
stopped: boolean;
|
|
31
|
-
pid: number | null;
|
|
32
|
-
msg: string;
|
|
33
|
-
}>;
|
|
34
|
-
export declare const startCommand: Command;
|
|
35
|
-
export declare const stopCommand: Command;
|
package/dist/commands/server.js
DELETED
|
@@ -1,471 +0,0 @@
|
|
|
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, resolveDataDir } 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));
|
|
10
|
-
/** server.pid 等运行时文件随数据目录走(FID-071:dataDir 可配置后 server 状态文件一并迁移) */
|
|
11
|
-
const PID_FILE = () => path.join(resolveDataDir(), 'server.pid');
|
|
12
|
-
const LOG_FILE = () => PID_FILE().replace(/server\.pid$/, 'server.log');
|
|
13
|
-
const WATCHDOG_PID_FILE = () => PID_FILE().replace(/server\.pid$/, 'watchdog.pid');
|
|
14
|
-
/**
|
|
15
|
-
* FID-093:启动单飞锁。N 个 CLI 进程并发 auto-start(如多个 agent 同时跑
|
|
16
|
-
* extension 命令)时,旧逻辑各自 spawn watchdog——即便 watchdog 单例加固后
|
|
17
|
-
* 多实例会被拒,也会留下一地被误写的 pid 文件与误导性的"启动失败"输出。
|
|
18
|
-
* 持锁者完成 spawn + health 探测期间,其他进程改为等待并复用结果。
|
|
19
|
-
* 锁残留(持锁进程崩溃)按 mtime 判 stale 抢占。
|
|
20
|
-
*/
|
|
21
|
-
const START_LOCK_FILE = () => path.join(resolveDataDir(), 'server-start.lock');
|
|
22
|
-
const START_LOCK_STALE_MS = 90_000;
|
|
23
|
-
/** FID-093:导出供单测覆盖竞态/残留锁语义 */
|
|
24
|
-
export function acquireStartLock() {
|
|
25
|
-
const write = () => {
|
|
26
|
-
try {
|
|
27
|
-
const fd = fs.openSync(START_LOCK_FILE(), 'wx'); // 原子 O_CREAT|O_EXCL
|
|
28
|
-
try {
|
|
29
|
-
fs.writeFileSync(fd, String(process.pid));
|
|
30
|
-
}
|
|
31
|
-
finally {
|
|
32
|
-
fs.closeSync(fd);
|
|
33
|
-
}
|
|
34
|
-
return true;
|
|
35
|
-
}
|
|
36
|
-
catch {
|
|
37
|
-
return false;
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
if (write())
|
|
41
|
-
return 'acquired';
|
|
42
|
-
try {
|
|
43
|
-
if (Date.now() - fs.statSync(START_LOCK_FILE()).mtimeMs > START_LOCK_STALE_MS) {
|
|
44
|
-
fs.unlinkSync(START_LOCK_FILE());
|
|
45
|
-
if (write())
|
|
46
|
-
return 'stolen';
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
catch { /* 竞态:他人同时清理/占用,让出 */ }
|
|
50
|
-
return 'busy';
|
|
51
|
-
}
|
|
52
|
-
function releaseStartLock() {
|
|
53
|
-
try {
|
|
54
|
-
fs.unlinkSync(START_LOCK_FILE());
|
|
55
|
-
}
|
|
56
|
-
catch { /* ignore */ }
|
|
57
|
-
}
|
|
58
|
-
function watchdogAlive(pid) {
|
|
59
|
-
if (!pid)
|
|
60
|
-
return false;
|
|
61
|
-
try {
|
|
62
|
-
process.kill(pid, 0);
|
|
63
|
-
return true;
|
|
64
|
-
}
|
|
65
|
-
catch {
|
|
66
|
-
return false;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
function tryReadPidFile(file) {
|
|
70
|
-
try {
|
|
71
|
-
const raw = fs.readFileSync(file, 'utf-8').trim();
|
|
72
|
-
const pid = Number(raw);
|
|
73
|
-
if (!pid || !Number.isInteger(pid))
|
|
74
|
-
return null;
|
|
75
|
-
process.kill(pid, 0);
|
|
76
|
-
return pid;
|
|
77
|
-
}
|
|
78
|
-
catch {
|
|
79
|
-
return null;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
function cleanPidFile(file) {
|
|
83
|
-
try {
|
|
84
|
-
fs.unlinkSync(file);
|
|
85
|
-
}
|
|
86
|
-
catch { /* ignore */ }
|
|
87
|
-
}
|
|
88
|
-
const LOG_MAX_BYTES = () => Number(process.env.HM_LOG_MAX_BYTES || 50 * 1024 * 1024);
|
|
89
|
-
const LOG_KEEP_FILES = 3;
|
|
90
|
-
/**
|
|
91
|
-
* server.log 无界增长曾达 800M+ 挤占用户磁盘(FID-068)。
|
|
92
|
-
* 后台 daemon 启动前按大小轮转:超过 HM_LOG_MAX_BYTES(默认 50MB)时
|
|
93
|
-
* server.log → server.log.1 → …保留最近 LOG_KEEP_FILES 份,最旧丢弃。
|
|
94
|
-
* 纯 fs 实现,Windows 兼容(rename 前先清目标,Windows 不允许覆盖已有文件)。
|
|
95
|
-
*/
|
|
96
|
-
export function rotateLogIfNeeded(logFile, maxBytes = LOG_MAX_BYTES(), keep = LOG_KEEP_FILES) {
|
|
97
|
-
try {
|
|
98
|
-
if (!fs.existsSync(logFile))
|
|
99
|
-
return false;
|
|
100
|
-
if (fs.statSync(logFile).size <= maxBytes)
|
|
101
|
-
return false;
|
|
102
|
-
for (let i = keep - 1; i >= 1; i--) {
|
|
103
|
-
const src = `${logFile}.${i}`;
|
|
104
|
-
const dest = `${logFile}.${i + 1}`;
|
|
105
|
-
if (!fs.existsSync(src))
|
|
106
|
-
continue;
|
|
107
|
-
try {
|
|
108
|
-
fs.unlinkSync(dest);
|
|
109
|
-
}
|
|
110
|
-
catch { /* dest 不存在时忽略 */ }
|
|
111
|
-
fs.renameSync(src, dest);
|
|
112
|
-
}
|
|
113
|
-
fs.renameSync(logFile, `${logFile}.1`);
|
|
114
|
-
return true;
|
|
115
|
-
}
|
|
116
|
-
catch {
|
|
117
|
-
return false;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
function tryReadPid() {
|
|
121
|
-
const pid = tryReadPidFile(PID_FILE());
|
|
122
|
-
if (pid)
|
|
123
|
-
return pid;
|
|
124
|
-
cleanPidFile(PID_FILE());
|
|
125
|
-
return null;
|
|
126
|
-
}
|
|
127
|
-
export { tryReadPid };
|
|
128
|
-
/** 定位 server 包根(dist 优先,ts-node 开发模式兜底);找不到返回 null */
|
|
129
|
-
export function findServerRoot() {
|
|
130
|
-
// dev/monorepo 模式优先用原始 packages/server,避免复制到 assets 后因 node_modules 解析失败
|
|
131
|
-
const monorepoCandidates = [
|
|
132
|
-
path.resolve(__dirname, '../../../server/dist/main.js'),
|
|
133
|
-
path.resolve(__dirname, '../../../server/src/main.ts'),
|
|
134
|
-
];
|
|
135
|
-
for (const c of monorepoCandidates) {
|
|
136
|
-
if (fs.existsSync(c))
|
|
137
|
-
return path.dirname(path.dirname(c));
|
|
138
|
-
}
|
|
139
|
-
// fallback:bundled-assets(npm 安装模式:dist/assets/server/main.js 已存在)
|
|
140
|
-
const bundled = findBundledAssets();
|
|
141
|
-
if (bundled) {
|
|
142
|
-
return path.dirname(bundled.serverEntry);
|
|
143
|
-
}
|
|
144
|
-
return null;
|
|
145
|
-
}
|
|
146
|
-
/** 探活:server /health 是否可访问(短超时,永不 throw)。导出供 version.ts 重启编排复核 */
|
|
147
|
-
export async function probeServerHealth(url, timeoutMs = 1500) {
|
|
148
|
-
try {
|
|
149
|
-
const res = await fetch(`${url}/health`, { signal: AbortSignal.timeout(timeoutMs) });
|
|
150
|
-
return res.ok;
|
|
151
|
-
}
|
|
152
|
-
catch {
|
|
153
|
-
return false;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
/** 从 config.serverUrl 解析默认端口(与 runStart 逻辑一致) */
|
|
157
|
-
function defaultPortFromConfig(serverUrl) {
|
|
158
|
-
return new URL(serverUrl).port ? Number(new URL(serverUrl).port) : 34570;
|
|
159
|
-
}
|
|
160
|
-
/** 对应 ChromePilot start: 启动本地 NestJS Server(提供 REST + WebSocket + SPA) */
|
|
161
|
-
export async function runStart(opts) {
|
|
162
|
-
const config = loadConfig();
|
|
163
|
-
const defaultPort = defaultPortFromConfig(config.serverUrl);
|
|
164
|
-
const port = opts.port ?? defaultPort;
|
|
165
|
-
const host = opts.host ?? '127.0.0.1';
|
|
166
|
-
const url = `http://${host}:${port}`;
|
|
167
|
-
// 启动过程中的告警说明(会拼进最终返回 msg,保证用户看得见)
|
|
168
|
-
const notes = [];
|
|
169
|
-
// FID-093 单飞:另一进程正在启动时等待复用,不再并发起 watchdog
|
|
170
|
-
const lock = acquireStartLock();
|
|
171
|
-
if (lock === 'busy') {
|
|
172
|
-
const deadline = Date.now() + 35_000;
|
|
173
|
-
while (Date.now() < deadline) {
|
|
174
|
-
await new Promise((r) => setTimeout(r, 1000));
|
|
175
|
-
if (await probeServerHealth(url)) {
|
|
176
|
-
return {
|
|
177
|
-
started: true,
|
|
178
|
-
pid: null,
|
|
179
|
-
url,
|
|
180
|
-
msg: 'server 已由另一个 hunter-mate 进程启动完成(启动锁被持有,本次复用其结果)',
|
|
181
|
-
};
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
return {
|
|
185
|
-
started: false,
|
|
186
|
-
pid: null,
|
|
187
|
-
url,
|
|
188
|
-
msg: '另一个 hunter-mate 进程持有 server 启动锁,且 35s 内 /health 未就绪。请执行 hunter-mate doctor 排查。',
|
|
189
|
-
};
|
|
190
|
-
}
|
|
191
|
-
if (lock === 'stolen') {
|
|
192
|
-
notes.push('⚠ 检测到残留的 server-start.lock(持有进程疑似崩溃),已按 stale 抢占继续启动');
|
|
193
|
-
}
|
|
194
|
-
try {
|
|
195
|
-
return await runStartLocked(opts, { url, port, host, notes });
|
|
196
|
-
}
|
|
197
|
-
finally {
|
|
198
|
-
releaseStartLock();
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
/** 单飞锁内的实际启动逻辑(锁外逻辑见 runStart) */
|
|
202
|
-
async function runStartLocked(opts, ctx) {
|
|
203
|
-
const { url, port, host, notes } = ctx;
|
|
204
|
-
const config = loadConfig();
|
|
205
|
-
const existing = tryReadPid();
|
|
206
|
-
if (existing) {
|
|
207
|
-
// pid 文件存在 ≠ server 存活。pid 可能被系统中其他进程复用
|
|
208
|
-
// (Windows 现场:残留 node.exe 复用了 pid → 误判 already running,
|
|
209
|
-
// server 实际从未被拉起,日志停在旧时间戳,用户无任何感知)。
|
|
210
|
-
// 因此必须先 /health 探活再决定是否走"已在运行"分支。
|
|
211
|
-
if (await probeServerHealth(url)) {
|
|
212
|
-
// 已在运行: 先做版本一致性检测(磁盘版本 vs 运行版本,server 不一致则自动重启)
|
|
213
|
-
// 动态 import 避免与 version.ts 的循环依赖(version.ts 静态引入本文件的 runStart/runStop)
|
|
214
|
-
const { ensureRuntimeConsistency } = await import('../version.js');
|
|
215
|
-
const report = await ensureRuntimeConsistency({ force: true });
|
|
216
|
-
if (report.actions.serverRestart && report.performed.length) {
|
|
217
|
-
return { started: true, pid: null, url, msg: report.performed.join('; ') };
|
|
218
|
-
}
|
|
219
|
-
return { started: false, pid: existing, url, msg: `server already running (pid=${existing})` };
|
|
220
|
-
}
|
|
221
|
-
// FID-093:探活失败≠server 死了。机器抖动(构建/多实例抢 CPU)会让单次
|
|
222
|
-
// /health 超时,旧逻辑直接当 stale 清文件重拉 → 活 server 被孤儿化,
|
|
223
|
-
// 新实例 EADDRINUSE 崩溃循环(2026-09-10 23:13 实机复现)。先给 grace 窗口
|
|
224
|
-
// 复探:进程仍存活且 /health 恢复 → 按已运行处理,绝不双实例。
|
|
225
|
-
let recovered = false;
|
|
226
|
-
const graceDeadline = Date.now() + 10_000;
|
|
227
|
-
while (Date.now() < graceDeadline) {
|
|
228
|
-
await new Promise((r) => setTimeout(r, 1000));
|
|
229
|
-
const pidAlive = (() => {
|
|
230
|
-
try {
|
|
231
|
-
process.kill(existing, 0);
|
|
232
|
-
return true;
|
|
233
|
-
}
|
|
234
|
-
catch {
|
|
235
|
-
return false;
|
|
236
|
-
}
|
|
237
|
-
})();
|
|
238
|
-
if (!pidAlive)
|
|
239
|
-
break; // 真死了,走正常启动
|
|
240
|
-
if (await probeServerHealth(url)) {
|
|
241
|
-
recovered = true;
|
|
242
|
-
break;
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
if (recovered) {
|
|
246
|
-
return {
|
|
247
|
-
started: false,
|
|
248
|
-
pid: existing,
|
|
249
|
-
url,
|
|
250
|
-
msg: `server already running (pid=${existing}; /health 曾短暂无响应,grace 窗口内恢复,未拉起新实例)`,
|
|
251
|
-
};
|
|
252
|
-
}
|
|
253
|
-
// stale pid:进程号存活但 grace 后仍无响应(疑似僵死或被其他进程复用)。清理后继续启动,
|
|
254
|
-
// 不 kill —— 那个进程可能属于别的程序(误杀 foreign 进程红线);
|
|
255
|
-
// 若它其实占了 34570 端口,新实例会因 EADDRINUSE 显式崩溃退出,不静默。
|
|
256
|
-
notes.push(`⚠ 检测到 stale server.pid (pid=${existing}):该进程存活但 ${url}/health 在 10s grace 窗口内持续无响应,` +
|
|
257
|
-
`疑似 pid 被其他进程复用,已忽略并继续启动`);
|
|
258
|
-
cleanPidFile(PID_FILE());
|
|
259
|
-
}
|
|
260
|
-
// server 入口: bundled 模式下 <cli>/dist/assets/server/main.js;monorepo 下 packages/server/dist/main.js 或 src/main.ts(开发模式 ts-node)
|
|
261
|
-
const serverRoot = findServerRoot();
|
|
262
|
-
let entry = null;
|
|
263
|
-
if (serverRoot) {
|
|
264
|
-
const candidates = [
|
|
265
|
-
path.join(serverRoot, 'main.js'),
|
|
266
|
-
path.join(serverRoot, 'dist', 'main.js'),
|
|
267
|
-
path.join(serverRoot, 'src', 'main.ts'),
|
|
268
|
-
];
|
|
269
|
-
for (const c of candidates) {
|
|
270
|
-
if (fs.existsSync(c)) {
|
|
271
|
-
entry = c;
|
|
272
|
-
break;
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
if (!entry) {
|
|
277
|
-
return {
|
|
278
|
-
started: false,
|
|
279
|
-
pid: null,
|
|
280
|
-
url,
|
|
281
|
-
msg: `✗ hunter-mate 启动失败:本 npm 包未包含 server 资产。\n` +
|
|
282
|
-
` - 若你正在 monorepo 开发,先执行 pnpm --filter @hunter-mate/server build 让 server dist 进入 packages/cli/dist/assets/server/。\n` +
|
|
283
|
-
` - 若你已 npm install -g hunter-mate,完整终端分发包需联系 Hiredchina IT 索要(含 server + Chrome 扩展)。\n` +
|
|
284
|
-
` - 临时绕过:单独启动 NestJS server,把 serverUrl 指向它(hunter-mate config serverUrl ${url})。`,
|
|
285
|
-
};
|
|
286
|
-
}
|
|
287
|
-
const env = {
|
|
288
|
-
...process.env,
|
|
289
|
-
PORT: String(port),
|
|
290
|
-
HOST: host,
|
|
291
|
-
// FID-071: server 所有数据落点(db/备份/runtime.json/artifacts)由 CLI 的数据目录决定
|
|
292
|
-
HM_DATA_DIR: resolveDataDir(),
|
|
293
|
-
};
|
|
294
|
-
const nodeArgs = [];
|
|
295
|
-
if (entry.endsWith('.ts')) {
|
|
296
|
-
// ts-node 模式
|
|
297
|
-
nodeArgs.push('--require', 'ts-node/register');
|
|
298
|
-
}
|
|
299
|
-
let child;
|
|
300
|
-
if (opts.foreground) {
|
|
301
|
-
child = spawn(process.execPath, [...nodeArgs, entry], {
|
|
302
|
-
stdio: 'inherit',
|
|
303
|
-
env,
|
|
304
|
-
});
|
|
305
|
-
return { started: true, pid: child.pid ?? null, url, msg: `server running in foreground (pid=${child.pid}) on ${url}` };
|
|
306
|
-
}
|
|
307
|
-
const logDir = path.dirname(LOG_FILE());
|
|
308
|
-
if (!fs.existsSync(logDir))
|
|
309
|
-
fs.mkdirSync(logDir, { recursive: true });
|
|
310
|
-
// 后台 daemon 启动前轮转 server.log(超 50MB 保留 3 份),防止无界增长挤占磁盘
|
|
311
|
-
rotateLogIfNeeded(LOG_FILE());
|
|
312
|
-
// 后台模式由独立 watchdog 进程托管 server,实现崩溃后自动重启
|
|
313
|
-
const watchdogEntry = path.resolve(__dirname, '../watchdog.js');
|
|
314
|
-
if (!fs.existsSync(watchdogEntry)) {
|
|
315
|
-
return {
|
|
316
|
-
started: false,
|
|
317
|
-
pid: null,
|
|
318
|
-
url,
|
|
319
|
-
msg: `✗ 启动失败:找不到 watchdog 入口 ${watchdogEntry},请先执行 pnpm --filter @hunter-mate/cli build`,
|
|
320
|
-
};
|
|
321
|
-
}
|
|
322
|
-
const watchdogEnv = {
|
|
323
|
-
...process.env,
|
|
324
|
-
HM_SERVER_ENTRY: entry,
|
|
325
|
-
HM_SERVER_LOG: LOG_FILE(),
|
|
326
|
-
HM_SERVER_NODE_ARGS: nodeArgs.join(','),
|
|
327
|
-
HM_DATA_DIR: resolveDataDir(),
|
|
328
|
-
PORT: String(port),
|
|
329
|
-
HOST: host,
|
|
330
|
-
};
|
|
331
|
-
const wd = spawn(process.execPath, [watchdogEntry], {
|
|
332
|
-
stdio: 'ignore',
|
|
333
|
-
env: watchdogEnv,
|
|
334
|
-
detached: true,
|
|
335
|
-
windowsHide: true,
|
|
336
|
-
});
|
|
337
|
-
wd.unref();
|
|
338
|
-
// FID-093:不再由 CLI 覆写 watchdog.pid——watchdog 进程原子自注册(acquireWatchdogLock),
|
|
339
|
-
// 并发启动的败者若覆写会把胜者 pid 覆盖成将死进程,runStop 从此找不到活 watchdog。
|
|
340
|
-
// 就绪探测改为直接探 spawn 出的 watchdog 进程是否存活(比 pid 文件更直接)。
|
|
341
|
-
// 等待 server health 就绪。窗口给足:NestJS 全量路由映射 + TypeORM schema 同步
|
|
342
|
-
// 在慢机/Windows 上实测 10-15s,原 8s 会在 route mapping 阶段误报"未就绪"
|
|
343
|
-
// (server 实际 3 秒后就绪,watchdog 会保活,误报只会误导用户)。
|
|
344
|
-
const probeDeadlineMs = 30_000;
|
|
345
|
-
const deadline = Date.now() + probeDeadlineMs;
|
|
346
|
-
let ready = false;
|
|
347
|
-
while (Date.now() < deadline) {
|
|
348
|
-
await new Promise((r) => setTimeout(r, 500));
|
|
349
|
-
try {
|
|
350
|
-
const res = await fetch(`${url}/health`, { signal: AbortSignal.timeout(800) });
|
|
351
|
-
if (res.ok) {
|
|
352
|
-
ready = true;
|
|
353
|
-
break;
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
catch { /* server 尚未监听,继续轮询 */ }
|
|
357
|
-
// watchdog 自身退出说明启动参数/入口有问题(含单例锁被占,另一 watchdog 在保活)
|
|
358
|
-
if (!watchdogAlive(wd.pid ?? null))
|
|
359
|
-
break;
|
|
360
|
-
}
|
|
361
|
-
if (!ready) {
|
|
362
|
-
let tail = '';
|
|
363
|
-
try {
|
|
364
|
-
const log = fs.readFileSync(LOG_FILE(), 'utf-8');
|
|
365
|
-
tail = log.split('\n').slice(-30).join('\n').trim();
|
|
366
|
-
}
|
|
367
|
-
catch { /* ignore */ }
|
|
368
|
-
cleanPidFile(WATCHDOG_PID_FILE());
|
|
369
|
-
return {
|
|
370
|
-
started: false,
|
|
371
|
-
pid: wd.pid ?? null,
|
|
372
|
-
url,
|
|
373
|
-
msg: (notes.length ? notes.join('\n') + '\n' : '') +
|
|
374
|
-
`✗ server watchdog 启动后 ${probeDeadlineMs / 1000}s 内未就绪(pid=${wd.pid}),日志尾部:\n${tail || '(server.log 为空)'}\n` +
|
|
375
|
-
`排障: hunter-mate doctor 或 TROUBLESHOOTING.md#server-启动即崩abi`,
|
|
376
|
-
};
|
|
377
|
-
}
|
|
378
|
-
// 持久化: 如果 port 变了就写回 config(避免下次 serverUrl 不对)
|
|
379
|
-
try {
|
|
380
|
-
const u = new URL(config.serverUrl);
|
|
381
|
-
if (Number(u.port) !== port) {
|
|
382
|
-
u.port = String(port);
|
|
383
|
-
u.hostname = host;
|
|
384
|
-
saveConfig({ serverUrl: u.origin });
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
catch { /* ignore */ }
|
|
388
|
-
return {
|
|
389
|
-
started: true,
|
|
390
|
-
pid: wd.pid ?? null,
|
|
391
|
-
url,
|
|
392
|
-
msg: (notes.length ? notes.join('\n') + '\n' : '') +
|
|
393
|
-
`server watchdog started (pid=${wd.pid}) on ${url} — logs: ${LOG_FILE()}`,
|
|
394
|
-
};
|
|
395
|
-
}
|
|
396
|
-
export async function runStop() {
|
|
397
|
-
const config = loadConfig();
|
|
398
|
-
const url = `http://127.0.0.1:${defaultPortFromConfig(config.serverUrl)}`;
|
|
399
|
-
// kill 任何进程前先 /health 确认它真的是我们的 server。
|
|
400
|
-
// pid 文件可能被复用(Windows 现场:残留 node.exe 占用 pid),误杀 foreign 进程不可接受。
|
|
401
|
-
const healthy = await probeServerHealth(url);
|
|
402
|
-
// 优先停止 watchdog,让它去停止子 server
|
|
403
|
-
const wdPid = tryReadPidFile(WATCHDOG_PID_FILE());
|
|
404
|
-
if (wdPid) {
|
|
405
|
-
if (!healthy) {
|
|
406
|
-
// server 不响应时不杀 watchdog pid(可能已被其他进程复用)——红线不动;
|
|
407
|
-
// FID-093:也不清 pid 文件——进程可能还活着,清了等于孤儿化注册表,
|
|
408
|
-
// 后续 auto-start 会再拉一个实例造成双 server(EADDRINUSE 崩溃循环)。
|
|
409
|
-
// 文件留在原地,runStart 的 grace 复探会正确处理。
|
|
410
|
-
return {
|
|
411
|
-
stopped: false,
|
|
412
|
-
pid: wdPid,
|
|
413
|
-
msg: `✗ server 无响应(${url}/health 不可达),watchdog pid=${wdPid} 未杀(疑似 stale pid,` +
|
|
414
|
-
`可能已被其他进程复用)。pid 文件保留以便复探;如确认是僵死进程请手工 kill`,
|
|
415
|
-
};
|
|
416
|
-
}
|
|
417
|
-
const ok = killGracefullySync(wdPid);
|
|
418
|
-
cleanPidFile(WATCHDOG_PID_FILE());
|
|
419
|
-
if (ok) {
|
|
420
|
-
// 给 watchdog 一点时间清理 server.pid
|
|
421
|
-
try {
|
|
422
|
-
const pid = tryReadPid();
|
|
423
|
-
if (pid) {
|
|
424
|
-
killGracefullySync(pid);
|
|
425
|
-
cleanPidFile(PID_FILE());
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
catch { /* ignore */ }
|
|
429
|
-
return { stopped: true, pid: wdPid, msg: `server watchdog stopped (pid=${wdPid})` };
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
// fallback:直接停止 server
|
|
433
|
-
const pid = tryReadPid();
|
|
434
|
-
if (!pid)
|
|
435
|
-
return { stopped: false, pid: null, msg: 'no server.pid found or process dead' };
|
|
436
|
-
if (!healthy) {
|
|
437
|
-
// pid 存活但 server 不响应:不 kill(可能复用了别人的 pid)红线不动;
|
|
438
|
-
// FID-093:同样保留 pid 文件(进程可能还活着,清了会孤儿化注册表)
|
|
439
|
-
return {
|
|
440
|
-
stopped: false,
|
|
441
|
-
pid,
|
|
442
|
-
msg: `✗ pid=${pid} 存活但 server 无响应,未发送 kill 信号(疑似 stale pid,` +
|
|
443
|
-
`可能属于其他进程)。pid 文件保留以便复探;如确认是僵死 server 请手工 kill`,
|
|
444
|
-
};
|
|
445
|
-
}
|
|
446
|
-
const ok = killGracefullySync(pid);
|
|
447
|
-
if (!ok) {
|
|
448
|
-
return { stopped: false, pid, msg: `failed to signal ${pid}` };
|
|
449
|
-
}
|
|
450
|
-
cleanPidFile(PID_FILE());
|
|
451
|
-
return { stopped: true, pid, msg: `server stopped (pid=${pid})` };
|
|
452
|
-
}
|
|
453
|
-
export const startCommand = new Command('start')
|
|
454
|
-
.description('启动本地 NestJS server(REST + WebSocket + SPA),对应 chromepilot start')
|
|
455
|
-
.option('-p, --port <port>', 'server 端口,默认从 config.serverUrl 解析或 34570')
|
|
456
|
-
.option('-h, --host <host>', '绑定 host,默认 127.0.0.1', '127.0.0.1')
|
|
457
|
-
.option('-f, --foreground', '前台运行(默认后台 daemon,写 server.pid + server.log)')
|
|
458
|
-
.action(async (opts) => {
|
|
459
|
-
const r = await runStart({ port: opts.port ? Number(opts.port) : undefined, host: opts.host, foreground: opts.foreground });
|
|
460
|
-
console.log(r.msg);
|
|
461
|
-
if (!r.started && !r.pid)
|
|
462
|
-
process.exit(1);
|
|
463
|
-
});
|
|
464
|
-
export const stopCommand = new Command('stop')
|
|
465
|
-
.description('停止本地 server(读 ~/.hunter-mate/server.pid 并 SIGTERM)')
|
|
466
|
-
.action(async () => {
|
|
467
|
-
const r = await runStop();
|
|
468
|
-
console.log(r.msg);
|
|
469
|
-
if (!r.stopped && r.pid)
|
|
470
|
-
process.exit(1);
|
|
471
|
-
});
|