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/version.js
DELETED
|
@@ -1,388 +0,0 @@
|
|
|
1
|
-
import * as fs from 'fs';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
import { fileURLToPath } from 'node:url';
|
|
4
|
-
import axios from 'axios';
|
|
5
|
-
import chalk from 'chalk';
|
|
6
|
-
import { loadConfig, resolveDataDir } from './config.js';
|
|
7
|
-
import { runStop, runStart, tryReadPid, findServerRoot, probeServerHealth } from './commands/server.js';
|
|
8
|
-
import { runReload } from './commands/extras.js';
|
|
9
|
-
import { dirChecksum } from './utils/artifact-checksum.js';
|
|
10
|
-
import { compareExtensionArtifacts, syncExtensionArtifacts } from './extension-sync.js';
|
|
11
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
12
|
-
const __dirname = path.dirname(__filename);
|
|
13
|
-
const ROOT = resolveDataDir;
|
|
14
|
-
const PLUGINS_DIR = () => path.join(ROOT(), 'plugins');
|
|
15
|
-
const EXTENSION_MANIFEST = () => path.join(ROOT(), 'extension', 'manifest.json');
|
|
16
|
-
const EXTENSION_DIR = () => path.join(ROOT(), 'extension');
|
|
17
|
-
const RUNTIME_FILE = () => path.join(ROOT(), 'runtime.json');
|
|
18
|
-
const LAST_CHECK_FILE = () => path.join(ROOT(), '.last-consistency-check');
|
|
19
|
-
// D5(R3 定案):extension reload 广播边沿触发 —— 同一 checksum 只广播一次。
|
|
20
|
-
// 原逻辑只要 disk≠bootSnapshot 每次 CLI 调用都广播,dev 频繁构建态下
|
|
21
|
-
// 每个命令都杀死在途长命令(linkedin search 分钟级编排反复横死)。
|
|
22
|
-
const LAST_EXT_RELOAD_BROADCAST_FILE = () => path.join(ROOT(), '.last-ext-reload-broadcast');
|
|
23
|
-
const CHECK_THROTTLE_MS = 60_000;
|
|
24
|
-
// ---------------------------------------------------------------------------
|
|
25
|
-
// 三层指纹工具(version + checksum + mtime/linked)— 与 chromepilot version-manager / server SystemService 算法完全等价
|
|
26
|
-
// ---------------------------------------------------------------------------
|
|
27
|
-
function readJson(file) {
|
|
28
|
-
try {
|
|
29
|
-
return JSON.parse(fs.readFileSync(file, 'utf-8'));
|
|
30
|
-
}
|
|
31
|
-
catch {
|
|
32
|
-
return null;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
/** 递归目录 SHA-1(文件名+内容)+ 最新 mtime — 与 server SystemService.dirChecksum 字节等价 */
|
|
36
|
-
function inspectArtifact(dir, versionSource) {
|
|
37
|
-
if (!fs.existsSync(dir))
|
|
38
|
-
return null;
|
|
39
|
-
const { checksum, latestMtimeMs } = dirChecksum(dir);
|
|
40
|
-
let linked = false;
|
|
41
|
-
try {
|
|
42
|
-
linked = fs.lstatSync(dir).isSymbolicLink();
|
|
43
|
-
}
|
|
44
|
-
catch { /* ignore */ }
|
|
45
|
-
return {
|
|
46
|
-
version: versionSource?.version ?? '0.0.0',
|
|
47
|
-
checksum,
|
|
48
|
-
latestMtimeMs,
|
|
49
|
-
linked,
|
|
50
|
-
rootDir: dir,
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
function resolveLinked(extensionInstallDir, serverEntryPath) {
|
|
54
|
-
function resolve(target) {
|
|
55
|
-
if (!fs.existsSync(target))
|
|
56
|
-
return { linked: false, source: null, target };
|
|
57
|
-
try {
|
|
58
|
-
if (fs.lstatSync(target).isSymbolicLink()) {
|
|
59
|
-
return { linked: true, source: fs.realpathSync(target), target };
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
catch { /* ignore */ }
|
|
63
|
-
return { linked: false, source: null, target };
|
|
64
|
-
}
|
|
65
|
-
return {
|
|
66
|
-
extension: resolve(extensionInstallDir),
|
|
67
|
-
serverEntry: resolve(serverEntryPath),
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
/** 扫描 CLI 侧(磁盘 SSOT)的 server + extension 两份三层指纹 */
|
|
71
|
-
function computeLocalArtifacts(cliInstalled) {
|
|
72
|
-
// Server 产物(dist 目录): findServerRoot 返回 packages/server 包根,dist 是其子目录
|
|
73
|
-
let serverArtifact = null;
|
|
74
|
-
const serverRoot = findServerRoot();
|
|
75
|
-
if (serverRoot) {
|
|
76
|
-
const distCandidates = [path.join(serverRoot, 'dist'), serverRoot];
|
|
77
|
-
let serverDist = '';
|
|
78
|
-
for (const c of distCandidates) {
|
|
79
|
-
if (fs.existsSync(path.join(c, 'main.js')) || fs.existsSync(path.join(c, 'index.js'))) {
|
|
80
|
-
serverDist = c;
|
|
81
|
-
break;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
if (serverDist) {
|
|
85
|
-
const pkg = readJson(path.join(serverRoot, 'package.json'));
|
|
86
|
-
serverArtifact = inspectArtifact(serverDist, pkg ?? { version: cliInstalled.server ?? '0.0.0' });
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
// Extension 产物(~/.hunter-mate/extension)
|
|
90
|
-
const extManifest = readJson(EXTENSION_MANIFEST());
|
|
91
|
-
const extensionArtifact = inspectArtifact(EXTENSION_DIR(), extManifest ?? { version: cliInstalled.extension ?? '0.0.0' });
|
|
92
|
-
// Linked 判断
|
|
93
|
-
const serverEntry = serverArtifact
|
|
94
|
-
? (fs.existsSync(path.join(serverArtifact.rootDir, 'main.js')) ? path.join(serverArtifact.rootDir, 'main.js') : path.join(serverArtifact.rootDir, 'index.js'))
|
|
95
|
-
: __filename;
|
|
96
|
-
const linked = resolveLinked(EXTENSION_DIR(), serverEntry);
|
|
97
|
-
return { server: serverArtifact, extension: extensionArtifact, linked };
|
|
98
|
-
}
|
|
99
|
-
// ---------------------------------------------------------------------------
|
|
100
|
-
// 磁盘版本读取(SSOT)
|
|
101
|
-
// ---------------------------------------------------------------------------
|
|
102
|
-
export function readInstalledVersions() {
|
|
103
|
-
// CLI 自身: src/version.ts 与 dist/version.js 的上一级都是包根
|
|
104
|
-
const cliPkg = readJson(path.join(__dirname, '..', 'package.json'));
|
|
105
|
-
const cli = cliPkg?.version ?? '0.0.0';
|
|
106
|
-
// Server: 定位 packages/server 包根(与 start 命令同一套候选逻辑)
|
|
107
|
-
let server = null;
|
|
108
|
-
const serverRoot = findServerRoot();
|
|
109
|
-
if (serverRoot) {
|
|
110
|
-
const pkg = readJson(path.join(serverRoot, 'package.json'));
|
|
111
|
-
server = pkg?.version ?? null;
|
|
112
|
-
}
|
|
113
|
-
// 浏览器扩展(init/install 写入 ~/.hunter-mate/extension)
|
|
114
|
-
const manifest = readJson(EXTENSION_MANIFEST());
|
|
115
|
-
const extension = manifest?.version;
|
|
116
|
-
// 插件
|
|
117
|
-
const plugins = {};
|
|
118
|
-
const dir = PLUGINS_DIR();
|
|
119
|
-
if (fs.existsSync(dir)) {
|
|
120
|
-
for (const name of fs.readdirSync(dir)) {
|
|
121
|
-
const pkg = readJson(path.join(dir, name, 'package.json'));
|
|
122
|
-
if (pkg?.version)
|
|
123
|
-
plugins[name] = pkg.version;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
const base = { cli, server, extension, plugins };
|
|
127
|
-
// 三层指纹(CLI 磁盘侧计算;对比时拿 live.bootArtifacts 比)
|
|
128
|
-
base.artifacts = computeLocalArtifacts({ server, extension });
|
|
129
|
-
return base;
|
|
130
|
-
}
|
|
131
|
-
export function readRuntimeStateFile() {
|
|
132
|
-
return readJson(RUNTIME_FILE());
|
|
133
|
-
}
|
|
134
|
-
// ---------------------------------------------------------------------------
|
|
135
|
-
// live 运行中版本(来自 server /system/versions)
|
|
136
|
-
// ---------------------------------------------------------------------------
|
|
137
|
-
export async function fetchLiveVersions(timeoutMs = 3000) {
|
|
138
|
-
const config = loadConfig();
|
|
139
|
-
try {
|
|
140
|
-
const res = await axios.get(`${config.serverUrl}/system/versions`, {
|
|
141
|
-
timeout: timeoutMs,
|
|
142
|
-
proxy: false,
|
|
143
|
-
});
|
|
144
|
-
return res.data;
|
|
145
|
-
}
|
|
146
|
-
catch {
|
|
147
|
-
return null;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
// ---------------------------------------------------------------------------
|
|
151
|
-
// 一致性决策(纯函数,便于测试)— 三层指纹:version → checksum → linked_stale
|
|
152
|
-
// ---------------------------------------------------------------------------
|
|
153
|
-
export function decideConsistencyActions(installed, live) {
|
|
154
|
-
const actions = {
|
|
155
|
-
serverRestart: false,
|
|
156
|
-
pluginsReload: [],
|
|
157
|
-
extensionReload: false,
|
|
158
|
-
};
|
|
159
|
-
if (!live)
|
|
160
|
-
return actions;
|
|
161
|
-
const local = installed.artifacts ?? null;
|
|
162
|
-
const boot = live.bootArtifacts ?? null;
|
|
163
|
-
// ==================== server: 三层 ====================
|
|
164
|
-
if (installed.server !== null &&
|
|
165
|
-
live.server.version !== installed.server) {
|
|
166
|
-
actions.serverRestart = true;
|
|
167
|
-
actions.serverReason = `running=${live.server.version} disk=${installed.server} (version_mismatch)`;
|
|
168
|
-
}
|
|
169
|
-
else if (live.server.needsRestart) {
|
|
170
|
-
actions.serverRestart = true;
|
|
171
|
-
actions.serverReason = 'server self-check marked needsRestart';
|
|
172
|
-
}
|
|
173
|
-
else if (!actions.serverRestart &&
|
|
174
|
-
local?.server?.checksum &&
|
|
175
|
-
boot?.server?.checksum &&
|
|
176
|
-
local.server.checksum !== boot.server.checksum) {
|
|
177
|
-
actions.serverRestart = true;
|
|
178
|
-
actions.serverReason = 'server 产物 checksum 与启动快照不一致(本地重新构建过)(checksum_mismatch)';
|
|
179
|
-
}
|
|
180
|
-
else if (!actions.serverRestart &&
|
|
181
|
-
boot?.linked?.serverEntry.linked === true &&
|
|
182
|
-
local?.server?.latestMtimeMs &&
|
|
183
|
-
live.server.latestMtimeMs &&
|
|
184
|
-
local.server.latestMtimeMs > live.server.latestMtimeMs) {
|
|
185
|
-
actions.serverRestart = true;
|
|
186
|
-
actions.serverReason = `server 软链模式下磁盘最新 mtime(${new Date(local.server.latestMtimeMs).toISOString()}) 新于启动快照(linked_stale)`;
|
|
187
|
-
}
|
|
188
|
-
// ==================== 插件: 磁盘版本 vs 已加载版本(保留单层逻辑) ====================
|
|
189
|
-
const names = new Set([
|
|
190
|
-
...Object.keys(installed.plugins),
|
|
191
|
-
...Object.keys(live.plugins),
|
|
192
|
-
]);
|
|
193
|
-
for (const name of names) {
|
|
194
|
-
if (installed.plugins[name] !== live.plugins[name]) {
|
|
195
|
-
actions.pluginsReload.push(name);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
// ==================== extension: 三层 ====================
|
|
199
|
-
const extVerDiff = installed.extension
|
|
200
|
-
&& live.extensions.length > 0
|
|
201
|
-
&& live.extensions.some((e) => e.version !== installed.extension);
|
|
202
|
-
const anyExtConnected = live.extensions.length > 0;
|
|
203
|
-
if (extVerDiff) {
|
|
204
|
-
actions.extensionReload = true;
|
|
205
|
-
actions.extensionReason = `running extension versions=[${[...new Set(live.extensions.map((e) => e.version))].join('/')}] != disk=${installed.extension} (version_mismatch)`;
|
|
206
|
-
}
|
|
207
|
-
else if (!actions.extensionReload &&
|
|
208
|
-
anyExtConnected &&
|
|
209
|
-
local?.extension?.checksum &&
|
|
210
|
-
boot?.extension?.checksum &&
|
|
211
|
-
local.extension.checksum !== boot.extension.checksum) {
|
|
212
|
-
actions.extensionReload = true;
|
|
213
|
-
actions.extensionReason = 'extension 产物 checksum 与启动快照不一致(改了 manifest/TS/HTML 但未改 package.json 版本)(checksum_mismatch)';
|
|
214
|
-
}
|
|
215
|
-
else if (!actions.extensionReload &&
|
|
216
|
-
anyExtConnected &&
|
|
217
|
-
boot?.linked?.extension.linked === true &&
|
|
218
|
-
local?.extension?.latestMtimeMs &&
|
|
219
|
-
boot?.extension?.latestMtimeMs &&
|
|
220
|
-
local.extension.latestMtimeMs > boot.extension.latestMtimeMs) {
|
|
221
|
-
actions.extensionReload = true;
|
|
222
|
-
actions.extensionReason = `extension 软链模式下磁盘最新 mtime(${new Date(local.extension.latestMtimeMs).toISOString()}) 新于启动快照(linked_stale)`;
|
|
223
|
-
}
|
|
224
|
-
return actions;
|
|
225
|
-
}
|
|
226
|
-
export async function ensureRuntimeConsistency(opts = {}) {
|
|
227
|
-
const performed = [];
|
|
228
|
-
const noOp = (reason) => ({
|
|
229
|
-
checked: false,
|
|
230
|
-
reason,
|
|
231
|
-
actions: { serverRestart: false, pluginsReload: [], extensionReload: false },
|
|
232
|
-
performed,
|
|
233
|
-
});
|
|
234
|
-
// 节流: 60s 内不重复检测(force 跳过)
|
|
235
|
-
if (!opts.force && !shouldCheckNow())
|
|
236
|
-
return noOp('throttled');
|
|
237
|
-
// server 是否在跑的判定:
|
|
238
|
-
// 1) CLI 管理的 pid 文件存活 → 走完整检测
|
|
239
|
-
// 2) pid 缺失(用户手动 node dist/main.js 起的 / 旧版 CLI 起的)→
|
|
240
|
-
// 本地地址做快速 HTTP 探测(ECONNREFUSED 即时返回,不拖慢命令);远程地址维持 pid 闸门
|
|
241
|
-
let live = null;
|
|
242
|
-
const config = loadConfig();
|
|
243
|
-
const isLocal = /\/\/(localhost|127\.0\.0\.1|\[::1\])/i.test(config.serverUrl);
|
|
244
|
-
if (tryReadPid()) {
|
|
245
|
-
live = await fetchLiveVersions();
|
|
246
|
-
}
|
|
247
|
-
else if (isLocal) {
|
|
248
|
-
live = await fetchLiveVersions(1200);
|
|
249
|
-
}
|
|
250
|
-
else {
|
|
251
|
-
return noOp('server not running (no pid file)');
|
|
252
|
-
}
|
|
253
|
-
if (!live) {
|
|
254
|
-
markChecked();
|
|
255
|
-
return noOp('server not running');
|
|
256
|
-
}
|
|
257
|
-
const installed = readInstalledVersions();
|
|
258
|
-
const actions = decideConsistencyActions(installed, live);
|
|
259
|
-
// Issue #23:npm 升级 CLI 后 ~/.hunter-mate/extension 还是旧构建——
|
|
260
|
-
// 上面的三层指纹比对的是"运行中扩展 vs ~/.hunter-mate 磁盘",二者同为旧版
|
|
261
|
-
// 所以误判一致。这里以 CLI 包内置产物(dist/assets/extension)为上游 SSOT
|
|
262
|
-
// 按 checksum 比对,不一致先同步产物,再按需补 reload 广播。
|
|
263
|
-
const bundledCmp = compareExtensionArtifacts();
|
|
264
|
-
if (bundledCmp.stale) {
|
|
265
|
-
const sync = syncExtensionArtifacts();
|
|
266
|
-
if (sync.synced) {
|
|
267
|
-
performed.push(`extension artifacts synced: ${sync.fromVersion ?? '?'} → ${sync.toVersion ?? '?'}`
|
|
268
|
-
+ ` (copied=${sync.copied}, removed=${sync.removed}, reason=bundled_mismatch)`);
|
|
269
|
-
// 磁盘刚被刷新,重新计算 installed 指纹,供下面 broadcast 的边沿触发判据用
|
|
270
|
-
installed.artifacts = computeLocalArtifacts({
|
|
271
|
-
server: installed.server,
|
|
272
|
-
extension: sync.toVersion ?? installed.extension,
|
|
273
|
-
});
|
|
274
|
-
}
|
|
275
|
-
else {
|
|
276
|
-
performed.push(`extension artifacts sync SKIPPED: ${sync.reason}`);
|
|
277
|
-
}
|
|
278
|
-
if (live.extensions.length > 0 && !actions.extensionReload) {
|
|
279
|
-
actions.extensionReload = true;
|
|
280
|
-
actions.extensionReason = `CLI 内置扩展产物与 ~/.hunter-mate/extension 不一致`
|
|
281
|
-
+ `(bundled ${bundledCmp.sourceVersion} vs installed ${bundledCmp.targetVersion}),已先同步产物(bundled_mismatch)`;
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
// 1) 插件热重载
|
|
285
|
-
if (actions.pluginsReload.length) {
|
|
286
|
-
try {
|
|
287
|
-
await axios.post(`${config.serverUrl}/system/reload-plugins`, { reason: `cli-consistency: ${actions.pluginsReload.join(',')}` }, { timeout: 5000, proxy: false });
|
|
288
|
-
performed.push(`plugins reloaded: ${actions.pluginsReload
|
|
289
|
-
.map((n) => `${n} ${live.plugins[n] ?? '-'}→${installed.plugins[n] ?? '?'}`)
|
|
290
|
-
.join(', ')}`);
|
|
291
|
-
}
|
|
292
|
-
catch (err) {
|
|
293
|
-
performed.push(`plugins reload FAILED: ${err.message}`);
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
// 2) server 重启(stop + start)
|
|
297
|
-
if (actions.serverRestart) {
|
|
298
|
-
try {
|
|
299
|
-
const stopped = await runStop();
|
|
300
|
-
// FID-093:runStop 在 /health 探活失败时走 red-line 不杀(进程可能还活着,
|
|
301
|
-
// 只是探活被机器抖动打断)。此时绝不能盲启新实例——双 server 抢端口会
|
|
302
|
-
// EADDRINUSE 崩溃循环(2026-09-10 23:13 实机复现)。停后复核:进程仍存活
|
|
303
|
-
// 且 /health 恢复 → 视为重启完成(跳过 start);真死了才拉新。
|
|
304
|
-
let stillUp = false;
|
|
305
|
-
if (!stopped.stopped && stopped.pid) {
|
|
306
|
-
const deadline = Date.now() + 10_000;
|
|
307
|
-
while (Date.now() < deadline) {
|
|
308
|
-
await new Promise((r) => setTimeout(r, 1000));
|
|
309
|
-
if (await probeServerHealth(`${config.serverUrl}`)) {
|
|
310
|
-
stillUp = true;
|
|
311
|
-
break;
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
if (stillUp) {
|
|
316
|
-
performed.push(`server restart skipped (${actions.serverReason}): runStop 因健康探活失败未杀旧进程,red-line 保护生效;复核期内 /health 已恢复,旧 server 仍在服务,拉起新实例会造成双实例`);
|
|
317
|
-
}
|
|
318
|
-
else {
|
|
319
|
-
const r = await runStart({});
|
|
320
|
-
performed.push(r.started
|
|
321
|
-
? `server restarted (${actions.serverReason}) — new pid=${r.pid}`
|
|
322
|
-
: `server restart FAILED: ${r.msg}`);
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
catch (err) {
|
|
326
|
-
performed.push(`server restart FAILED: ${err.message}`);
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
// 3) 浏览器扩展 reload 广播(D5: checksum 边沿触发,同值不重播)
|
|
330
|
-
if (actions.extensionReload) {
|
|
331
|
-
const currentChecksum = installed.artifacts?.extension?.checksum ?? '';
|
|
332
|
-
let lastBroadcast = '';
|
|
333
|
-
try {
|
|
334
|
-
lastBroadcast = fs.readFileSync(LAST_EXT_RELOAD_BROADCAST_FILE(), 'utf8').trim();
|
|
335
|
-
}
|
|
336
|
-
catch {
|
|
337
|
-
/* 首次 */
|
|
338
|
-
}
|
|
339
|
-
if (currentChecksum && lastBroadcast === currentChecksum) {
|
|
340
|
-
performed.push(`extension reload skipped (checksum 已广播过, D5 边沿去重): ${actions.extensionReason}`);
|
|
341
|
-
}
|
|
342
|
-
else {
|
|
343
|
-
try {
|
|
344
|
-
const r = await runReload(3000);
|
|
345
|
-
performed.push(`extension reload broadcast: ${actions.extensionReason ?? 'version mismatch'} — broadcast=${r.broadcast}, msg=${r.msg}`);
|
|
346
|
-
if (currentChecksum) {
|
|
347
|
-
try {
|
|
348
|
-
fs.mkdirSync(ROOT(), { recursive: true });
|
|
349
|
-
fs.writeFileSync(LAST_EXT_RELOAD_BROADCAST_FILE(), currentChecksum);
|
|
350
|
-
}
|
|
351
|
-
catch {
|
|
352
|
-
/* 尽力 */
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
catch (e) {
|
|
357
|
-
performed.push(`extension reload FAILED: ${e.message}. Tip: chrome://extensions → 点 HunterMate 卡片的刷新图标`);
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
markChecked();
|
|
362
|
-
if (opts.verbose && performed.length) {
|
|
363
|
-
for (const line of performed)
|
|
364
|
-
console.log(chalk.gray(` [auto-update] ${line}`));
|
|
365
|
-
}
|
|
366
|
-
return { checked: true, actions, performed };
|
|
367
|
-
}
|
|
368
|
-
// ---------------------------------------------------------------------------
|
|
369
|
-
// 节流
|
|
370
|
-
// ---------------------------------------------------------------------------
|
|
371
|
-
export function shouldCheckNow() {
|
|
372
|
-
try {
|
|
373
|
-
const stat = fs.statSync(LAST_CHECK_FILE());
|
|
374
|
-
return Date.now() - stat.mtimeMs > CHECK_THROTTLE_MS;
|
|
375
|
-
}
|
|
376
|
-
catch {
|
|
377
|
-
return true;
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
function markChecked() {
|
|
381
|
-
try {
|
|
382
|
-
fs.mkdirSync(ROOT(), { recursive: true });
|
|
383
|
-
fs.writeFileSync(LAST_CHECK_FILE(), String(Date.now()));
|
|
384
|
-
}
|
|
385
|
-
catch {
|
|
386
|
-
/* 尽力 */
|
|
387
|
-
}
|
|
388
|
-
}
|
package/dist/watchdog.d.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* server 活性探针(FID-057 #17-A3):子进程不退但假活(事件循环被拖死)时,
|
|
3
|
-
* exit 监听永远等不到触发。探针定时 GET /health,连续失败达到阈值判定假活,
|
|
4
|
-
* 由 watchdog kill 子进程走正常重启路径。
|
|
5
|
-
*/
|
|
6
|
-
export declare class LivenessProbe {
|
|
7
|
-
private readonly opts;
|
|
8
|
-
private failCount;
|
|
9
|
-
private timer;
|
|
10
|
-
constructor(opts: {
|
|
11
|
-
healthUrl: string;
|
|
12
|
-
intervalMs: number;
|
|
13
|
-
threshold: number;
|
|
14
|
-
onFailure: (lastError: string) => void;
|
|
15
|
-
/** 可注入的探测实现(测试用),默认 HTTP GET /health */
|
|
16
|
-
check?: (url: string) => Promise<void>;
|
|
17
|
-
});
|
|
18
|
-
private doCheck;
|
|
19
|
-
/** 立即探测一次并更新失败计数;达到阈值时回调 onFailure 并清零 */
|
|
20
|
-
checkNow(): Promise<void>;
|
|
21
|
-
start(): void;
|
|
22
|
-
stop(): void;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* 原子占用 watchdog 单例锁(O_CREAT|O_EXCL,跨平台同语义)。
|
|
26
|
-
* 背景:旧实现 tryReadPid + writePid 分两步(check-then-write 竞态),并发 auto-start
|
|
27
|
-
* 曾产生 5+ 个常驻 watchdog,各自拉起 server 子进程抢同一端口/SQLite →
|
|
28
|
-
* database is locked → 全体 exit(1) → 指数退避重启风暴(server-crash.log 8.5 万行)。
|
|
29
|
-
* 持有者崩溃残留锁时按 mtime 判 stale 抢占(崩溃的 watchdog 不会自己清锁)。
|
|
30
|
-
*/
|
|
31
|
-
export declare function acquireWatchdogLock(file: string, staleMs?: number): boolean;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="41908b8f-f55a-4a65-9b91-577c7fc48ad3",e._sentryDebugIdIdentifier="sentry-dbid-41908b8f-f55a-4a65-9b91-577c7fc48ad3")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[539],{5539:function(e,t,r){Promise.resolve().then(r.bind(r,8441))},7473:function(e,t,r){"use strict";var n=r(8321);r.o(n,"useParams")&&r.d(t,{useParams:function(){return n.useParams}}),r.o(n,"usePathname")&&r.d(t,{usePathname:function(){return n.usePathname}}),r.o(n,"useRouter")&&r.d(t,{useRouter:function(){return n.useRouter}}),r.o(n,"useSearchParams")&&r.d(t,{useSearchParams:function(){return n.useSearchParams}})},8441:function(e,t,r){"use strict";r.d(t,{EntityListPage:function(){return j}});var n=r(2835),s=r(635),a=r(7473),l=r(4431),c=r(7202),i=r(4518),o=r(3718),u=r(9036),d=r(8448);function x(e){let{value:t}=e;if(null===t)return(0,n.jsx)("span",{className:"italic text-gray-400",children:"null"});if(void 0===t)return(0,n.jsx)("span",{className:"italic text-gray-400",children:"undefined"});switch(typeof t){case"string":return(0,n.jsxs)("span",{className:"break-all text-red-700",children:['"',t,'"']});case"number":return(0,n.jsx)("span",{className:"text-emerald-700",children:String(t)});case"boolean":return(0,n.jsx)("span",{className:"text-blue-700",children:String(t)});default:return(0,n.jsx)("span",{className:"text-gray-700",children:String(t)})}}function m(e){let{name:t}=e;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("span",{className:"text-indigo-700",children:['"',t,'"']}),(0,n.jsx)("span",{className:"text-gray-500",children:": "})]})}function h(e){let{name:t,value:r,depth:a}=e,[l,c]=(0,s.useState)(a<2);if(!("object"==typeof r&&null!==r&&!Array.isArray(r))&&!Array.isArray(r))return(0,n.jsxs)("div",{className:"min-w-0",children:[null!==t?(0,n.jsx)(m,{name:t}):null,(0,n.jsx)(x,{value:r})]});let i=Array.isArray(r),o=i?r.map((e,t)=>[String(t),e]):Object.entries(r),u=i?"]":"}",d=o.length;return(0,n.jsxs)("div",{children:[(0,n.jsxs)("div",{className:"group flex cursor-pointer select-none items-baseline rounded hover:bg-gray-100",onClick:()=>c(e=>!e),role:"button","aria-expanded":l,children:[(0,n.jsx)("span",{className:"mr-0.5 inline-block w-4 shrink-0 text-center text-gray-400",children:d>0?l?"▾":"▸":""}),null!==t?(0,n.jsx)(m,{name:t}):null,(0,n.jsx)("span",{className:"text-gray-700",children:i?"[":"{"}),l?null:(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("span",{className:"mx-1 rounded bg-gray-100 px-1 text-gray-400 group-hover:bg-gray-200",children:i?"".concat(d," 项"):"".concat(d," 键")}),(0,n.jsx)("span",{className:"text-gray-700",children:u})]})]}),l?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"ml-[7px] border-l border-gray-200 pl-3",children:o.map(e=>{let[t,r]=e;return(0,n.jsx)(h,{name:i?null:t,value:r,depth:a+1},t)})}),(0,n.jsx)("div",{className:"pl-5 text-gray-700",children:u})]}):null]})}function f(e){let{data:t}=e;return null==t?(0,n.jsx)("div",{className:"text-xs text-gray-400",children:"(无数据)"}):(0,n.jsx)("div",{className:"max-h-[32rem] overflow-auto rounded bg-gray-50 p-3 font-mono text-xs leading-5",children:(0,n.jsx)(h,{name:null,value:t,depth:0})})}let g={talent:"人才",job:"职位",company:"公司"},b={talent:"bg-blue-50 text-blue-700",job:"bg-yellow-50 text-yellow-700",company:"bg-green-50 text-green-700"};function p(e){var t,r,a,l,c,i;let{type:o,entity:u,sources:x}=e,[m,h]=(0,s.useState)(x.length?String(x[0].id):""),p="talent"===o?null!==(t=u.name)&&void 0!==t?t:"(未命名)":"job"===o?null!==(r=u.title)&&void 0!==r?r:"(未命名职位)":null!==(a=u.name)&&void 0!==a?a:"(未命名)",y="talent"===o?u.headline:"job"===o?u.company:"",v=x.find(e=>String(e.id)===m)||x[0];return(0,n.jsxs)("div",{className:"w-full",children:[(0,n.jsxs)("header",{className:"mb-6",children:[(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[(0,n.jsx)("h1",{className:"text-2xl font-bold text-gray-900",children:p}),(0,n.jsx)("span",{className:"rounded px-2 py-0.5 text-xs ".concat(null!==(l=b[o])&&void 0!==l?l:"bg-gray-100 text-gray-600"),children:null!==(c=g[o])&&void 0!==c?c:o}),(0,n.jsx)("span",{className:"rounded bg-gray-100 px-2 py-0.5 text-xs text-gray-600",children:u.source})]}),y?(0,n.jsx)("p",{className:"mt-1 text-gray-600",children:y}):null]}),(0,n.jsxs)("section",{className:"rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,n.jsx)("h2",{className:"mb-3 text-lg font-semibold",children:"解析来源"}),v?(0,n.jsxs)("div",{className:"space-y-3",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"text-sm text-gray-500",children:"当前来源页面"}),(0,n.jsx)("a",{href:v.sourceUrl,target:"_blank",rel:"noreferrer",className:"break-all text-sm text-blue-600 hover:underline",children:v.sourceUrl}),v.hasSnapshot?(0,n.jsx)("span",{className:"ml-2 rounded bg-green-50 px-1.5 py-0.5 text-xs text-green-700",children:"有录制快照"}):null]}),x.length>1?(0,n.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[(0,n.jsx)("label",{className:"text-sm text-gray-600",children:"历史来源:"}),(0,n.jsx)("select",{value:m,onChange:e=>h(e.target.value),className:"rounded border border-gray-300 px-2 py-1 text-sm",children:x.map(e=>(0,n.jsxs)("option",{value:e.id,children:[e.domain," \xb7 ",(0,d.d3)(e.createdAt)]},e.id))}),(0,n.jsx)("a",{href:v.sourceUrl,target:"_blank",rel:"noreferrer",className:"rounded bg-blue-600 px-3 py-1 text-sm text-white hover:bg-blue-700",children:"打开该来源页面"})]}):null]}):(0,n.jsx)("div",{className:"text-sm text-gray-500",children:"暂无解析来源记录"})]}),(0,n.jsxs)("section",{className:"mt-4 rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,n.jsx)("h2",{className:"mb-3 text-lg font-semibold",children:"原始数据"}),(0,n.jsx)(f,{data:null!==(i=u.extracted)&&void 0!==i?i:u.raw})]})]})}function y(e){let t=new URLSearchParams;Object.entries(e).forEach(e=>{let[r,n]=e;n&&t.set(r,n)});let r=t.toString();return r?"?".concat(r):""}function v(e){let{type:t,label:r,titleField:x,subtitleField:m}=e,h=(0,a.useRouter)(),f=(0,a.usePathname)(),g=(0,a.useSearchParams)(),b=g.get("id")||"",v=(0,s.useMemo)(()=>({q:g.get("q")||"",status:"",from:g.get("from")||"",to:g.get("to")||""}),[g]),[j,N]=(0,s.useState)([]),[w,S]=(0,s.useState)(null),[k,E]=(0,s.useState)(!0),[C,P]=(0,s.useState)(!1),[q,R]=(0,s.useState)(0),L=(0,s.useCallback)(e=>{var t,r;let n=null!==(t=e.filters)&&void 0!==t?t:v,s=y({id:null!==(r=e.id)&&void 0!==r?r:b,q:n.q,from:n.from,to:n.to});h.replace("".concat(f).concat(s))},[v,b,f,h]),_=(0,s.useCallback)(()=>{R(e=>e+1)},[]),A=(0,s.useCallback)(()=>{if(j.length)return j[0].updatedAt},[j]);(0,s.useEffect)(()=>{E(!0);let e=y({q:v.q,from:v.from,to:v.to});(0,l.r)("/entities?type=".concat(t,"&limit=50").concat(e.replace("?","&"))).then(e=>{var t;N(null!==(t=null==e?void 0:e.items)&&void 0!==t?t:[]),E(!1)})},[t,v.q,v.from,v.to,q]),(0,s.useEffect)(()=>{if(!b){S(null);return}P(!0),Promise.all([(0,l.r)("/entities/".concat(t,"/").concat(b)),(0,l.r)("/entities/".concat(t,"/").concat(b,"/sources"))]).then(e=>{let[t,r]=e;if(t){var n;S({entity:t.entity,sources:null!==(n=null==r?void 0:r.items)&&void 0!==n?n:[]})}else S(null);P(!1)})},[t,b]);let I=(0,s.useMemo)(()=>j.map(e=>{var t;let r=null!==(t=e[x])&&void 0!==t?t:"(未命名)",s=m?e[m]:"";return{id:String(e.id),content:(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"font-medium text-gray-900",children:r}),s?(0,n.jsx)("div",{className:"text-xs text-gray-500",children:s}):null,(0,n.jsxs)("div",{className:"mt-0.5 flex items-center gap-2 text-xs text-gray-400",children:[(0,n.jsx)("span",{children:e.source}),(0,n.jsx)("span",{children:"\xb7"}),(0,n.jsx)("span",{children:(0,d.d3)(e.updatedAt)})]})]})}}),[j,x,m]),U=b?C?(0,n.jsx)("div",{className:"flex h-full items-center justify-center text-gray-400",children:"加载中…"}):w?(0,n.jsx)(p,{type:t,entity:w.entity,sources:w.sources}):(0,n.jsxs)("div",{className:"flex h-full items-center justify-center text-red-500",children:["未找到该",r]}):(0,n.jsxs)("div",{className:"flex h-full items-center justify-center text-gray-400",children:["请在左侧选择一条",r,"查看详情"]});return(0,n.jsx)(i.m,{filterBar:(0,n.jsxs)("div",{className:"border-b border-gray-200 bg-white",children:[(0,n.jsx)(c.f,{value:v,onChange:e=>L({filters:e})}),(0,n.jsx)(u.Y,{pollUrl:"/entities/count?type=".concat(t),getLatestTimestamp:A,onRefresh:_,label:r})]}),listPanel:(0,n.jsx)(o.L,{items:I,selectedId:b,onSelect:e=>L({id:e}),loading:k,emptyText:"暂无".concat(r,"数据")}),detailPanel:U})}function j(e){return(0,n.jsx)(s.Suspense,{fallback:(0,n.jsx)("div",{className:"p-6 text-gray-500",children:"加载中…"}),children:(0,n.jsx)(v,{...e})})}},7202:function(e,t,r){"use strict";r.d(t,{f:function(){return a}});var n=r(2835),s=r(635);function a(e){let{value:t,showStatus:r,statusOptions:a,onChange:l}=e,[c,i]=(0,s.useState)(t);return(0,s.useEffect)(()=>{i(t)},[t.q,t.status,t.from,t.to]),(0,s.useEffect)(()=>{let e=setTimeout(()=>{(c.q!==t.q||c.status!==t.status||c.from!==t.from||c.to!==t.to)&&l(c)},300);return()=>clearTimeout(e)},[c.q,c.status,c.from,c.to]),(0,n.jsxs)("div",{className:"space-y-2 border-b border-gray-200 bg-white p-3",children:[(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsxs)("div",{className:"relative flex-1",children:[(0,n.jsx)("input",{type:"text",value:c.q,onChange:e=>i(t=>({...t,q:e.target.value})),placeholder:"搜索关键词...",className:"w-full rounded border border-gray-300 px-2 py-1.5 pr-8 text-sm outline-none focus:border-blue-500"}),(0,n.jsx)("button",{type:"button",onClick:()=>l({q:"",status:"",from:"",to:""}),title:"重置筛选",className:"absolute right-1 top-1/2 -translate-y-1/2 rounded p-1 text-gray-400 hover:bg-gray-100 hover:text-gray-600 disabled:opacity-30",disabled:!c.q&&!c.status&&!c.from&&!c.to,children:(0,n.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-4 w-4",viewBox:"0 0 20 20",fill:"currentColor",children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"})})})]}),r?(0,n.jsxs)("select",{value:c.status,onChange:e=>i(t=>({...t,status:e.target.value})),className:"rounded border border-gray-300 px-2 py-1.5 text-sm outline-none focus:border-blue-500",children:[(0,n.jsx)("option",{value:"",children:"全部状态"}),(a||[]).map(e=>(0,n.jsx)("option",{value:e.value,children:e.label},e.value))]}):null]}),(0,n.jsxs)("div",{className:"flex items-center gap-2",children:[(0,n.jsx)("input",{type:"date",value:c.from,onChange:e=>i(t=>({...t,from:e.target.value})),className:"rounded border border-gray-300 px-2 py-1.5 text-sm outline-none focus:border-blue-500"}),(0,n.jsx)("span",{className:"text-sm text-gray-400",children:"-"}),(0,n.jsx)("input",{type:"date",value:c.to,onChange:e=>i(t=>({...t,to:e.target.value})),className:"rounded border border-gray-300 px-2 py-1.5 text-sm outline-none focus:border-blue-500"})]})]})}},4518:function(e,t,r){"use strict";r.d(t,{m:function(){return s}});var n=r(2835);function s(e){let{filterBar:t,listPanel:r,detailPanel:s}=e;return(0,n.jsxs)("div",{className:"flex h-full",children:[(0,n.jsxs)("div",{className:"flex w-80 flex-col border-r border-gray-200 bg-white",children:[t,r]}),(0,n.jsx)("div",{className:"flex-1 overflow-auto bg-gray-50 p-6",children:s})]})}},3718:function(e,t,r){"use strict";r.d(t,{L:function(){return s}});var n=r(2835);function s(e){let{items:t,selectedId:r,onSelect:s,loading:a,emptyText:l="暂无数据"}=e;return(0,n.jsx)("div",{className:"flex-1 overflow-auto",children:a?(0,n.jsx)("div",{className:"p-4 text-center text-sm text-gray-400",children:"加载中…"}):0===t.length?(0,n.jsx)("div",{className:"p-4 text-center text-sm text-gray-400",children:l}):(0,n.jsx)("ul",{className:"divide-y divide-gray-100",children:t.map(e=>(0,n.jsx)("li",{role:"button",tabIndex:0,onClick:()=>s(e.id),onKeyDown:t=>{("Enter"===t.key||" "===t.key)&&s(e.id)},className:"cursor-pointer px-3 py-2 text-sm transition-colors ".concat(r===e.id?"bg-blue-50":"hover:bg-gray-50"),children:e.content},e.id))})})}},9036:function(e,t,r){"use strict";r.d(t,{Y:function(){return l}});var n=r(2835),s=r(635),a=r(4431);function l(e){let{pollUrl:t,intervalMs:r=5e3,onRefresh:l,getLatestTimestamp:c,label:i="新数据"}=e,[o,u]=(0,s.useState)(0),[d,x]=(0,s.useState)(!1),m=(0,s.useRef)(void 0);return((0,s.useEffect)(()=>{let e=()=>x(document.hidden);return document.addEventListener("visibilitychange",e),()=>document.removeEventListener("visibilitychange",e)},[]),(0,s.useEffect)(()=>{m.current=c(),u(0)},[c]),(0,s.useEffect)(()=>{if(d)return;let e=async()=>{var e;let r=m.current;if(!r)return;let n=t.includes("?")?"&":"?",s=await (0,a.r)("".concat(t).concat(n,"since=").concat(encodeURIComponent(r))).catch(()=>null),l=null!==(e=null==s?void 0:s.count)&&void 0!==e?e:0;u(e=>Math.max(e,l))};e();let n=setInterval(e,r);return()=>clearInterval(n)},[t,r,d]),o<=0)?null:(0,n.jsxs)("button",{type:"button",onClick:()=>{u(0),l()},className:"w-full bg-blue-50 px-3 py-2 text-center text-sm text-blue-700 hover:bg-blue-100 active:bg-blue-200",children:["有 ",o," 条",i,",点击刷新"]})}},8448:function(e,t,r){"use strict";function n(e){return e?("string"==typeof e?new Date(e):e).toLocaleString("zh-CN",{hour12:!1}):""}r.d(t,{d3:function(){return n}})},4431:function(e,t,r){"use strict";r.d(t,{O:function(){return s},r:function(){return l}});var n=r(529);function s(){return n.env.HUNTER_MATE_SERVER_URL||""}let a=s();async function l(e,t){try{let r=await fetch("".concat(a).concat(e),{cache:"no-store",...t});if(!r.ok)return null;return await r.json()}catch(e){return null}}}}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="86e26750-2315-4c8c-96b3-0e3803655f3a",e._sentryDebugIdIdentifier="sentry-dbid-86e26750-2315-4c8c-96b3-0e3803655f3a")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[937],{4116:function(e,t,a){Promise.resolve().then(a.bind(a,1332))},7473:function(e,t,a){"use strict";var s=a(8321);a.o(s,"useParams")&&a.d(t,{useParams:function(){return s.useParams}}),a.o(s,"usePathname")&&a.d(t,{usePathname:function(){return s.usePathname}}),a.o(s,"useRouter")&&a.d(t,{useRouter:function(){return s.useRouter}}),a.o(s,"useSearchParams")&&a.d(t,{useSearchParams:function(){return s.useSearchParams}})},1332:function(e,t,a){"use strict";a.d(t,{default:function(){return i}});var s=a(2835),n=a(635),r=a(7473);function i(){let e=(0,r.useSearchParams)().get("user_code")||"",[t,a]=(0,n.useState)(!0),[i,d]=(0,n.useState)({loggedIn:!1}),[o,l]=(0,n.useState)(""),[c,u]=(0,n.useState)(""),[m,h]=(0,n.useState)(0),[g,f]=(0,n.useState)(!1),[x,b]=(0,n.useState)(""),[p,y]=(0,n.useState)(!1),j=(0,n.useRef)();(0,n.useEffect)(()=>(fetch("/auth/session").then(e=>e.ok?e.json():{loggedIn:!1}).then(e=>d((null==e?void 0:e.loggedIn)?e:{loggedIn:!1})).catch(()=>d({loggedIn:!1})).finally(()=>a(!1)),()=>{j.current&&clearInterval(j.current)}),[]);let w=()=>{h(60),j.current=setInterval(()=>{h(e=>(e<=1&&j.current&&clearInterval(j.current),Math.max(0,e-1)))},1e3)},N=async()=>{if(!o.trim()){b("请输入邮箱");return}f(!0),b("");try{let e=await fetch("/auth/email/send-code",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:o.trim()})}),t=await e.json().catch(()=>({}));if(!e.ok)throw Error(t.message||t.error||"发送失败,请稍后重试");w()}catch(e){b(e.message)}finally{f(!1)}},v=async t=>{let a=await fetch("/auth/approve",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({userCode:e,token:t})}),s=await a.json().catch(()=>({}));if(!a.ok||!s.ok)throw Error(s.error||s.message||"授权失败");y(!0)},k=async e=>{e.preventDefault(),f(!0),b("");try{let e=await fetch("/auth/email/verify",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:o.trim(),code:c.trim()})}),t=await e.json().catch(()=>({}));if(!e.ok||!t.access_token)throw Error(t.message||t.error||"验证码错误");await v(t.access_token)}catch(e){b(e.message)}finally{f(!1)}},S=async()=>{f(!0),b("");try{await v(i.token)}catch(e){d({loggedIn:!1}),b("".concat(e.message,";请用邮箱验证码登录"))}finally{f(!1)}};return t?(0,s.jsx)("main",{className:"flex min-h-screen items-center justify-center p-4",children:(0,s.jsx)("div",{className:"w-full max-w-md rounded-lg bg-white p-8 text-center text-gray-500 shadow",children:"正在检查登录状态..."})}):(0,s.jsx)("main",{className:"flex min-h-screen items-center justify-center p-4",children:(0,s.jsxs)("div",{className:"w-full max-w-md rounded-lg bg-white p-8 shadow",children:[(0,s.jsx)("h1",{className:"mb-2 text-2xl font-bold",children:"HunterMate 设备授权"}),(0,s.jsxs)("p",{className:"mb-6 text-gray-600",children:["用户码:",(0,s.jsx)("span",{className:"font-mono text-lg font-semibold text-indigo-600",children:e})]}),p?(0,s.jsx)("div",{className:"rounded bg-green-50 p-4 text-green-700",children:"授权成功,请回到 CLI 继续操作。"}):i.loggedIn?(0,s.jsxs)("div",{className:"space-y-4",children:[(0,s.jsxs)("div",{className:"rounded bg-indigo-50 p-4 text-sm text-indigo-700",children:["当前已登录:",(0,s.jsx)("span",{className:"font-medium",children:i.email}),"(检测到本机已完成邮箱验证码登录)"]}),x&&(0,s.jsx)("div",{className:"rounded bg-red-50 p-3 text-sm text-red-700",children:x}),(0,s.jsx)("button",{onClick:S,disabled:g,className:"w-full rounded bg-indigo-600 px-4 py-2 font-medium text-white hover:bg-indigo-700 disabled:opacity-50",children:g?"处理中...":"确认授权"}),(0,s.jsx)("button",{onClick:()=>d({loggedIn:!1}),className:"w-full text-sm text-gray-400 underline",children:"不是本人?改用邮箱验证码登录"})]}):(0,s.jsxs)("form",{onSubmit:k,className:"space-y-4",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"mb-1 block text-sm font-medium",children:"邮箱"}),(0,s.jsx)("input",{type:"email",value:o,onChange:e=>l(e.target.value),required:!0,className:"w-full rounded border border-gray-300 p-2"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"mb-1 block text-sm font-medium",children:"验证码"}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)("input",{type:"text",inputMode:"numeric",pattern:"\\d{6}",maxLength:6,value:c,onChange:e=>u(e.target.value),required:!0,placeholder:"6 位数字",className:"w-full rounded border border-gray-300 p-2"}),(0,s.jsx)("button",{type:"button",onClick:N,disabled:g||m>0,className:"shrink-0 rounded border border-indigo-600 px-3 py-2 text-sm text-indigo-600 disabled:border-gray-300 disabled:text-gray-400",children:m>0?"".concat(m,"s 后重发"):"发送验证码"})]})]}),x&&(0,s.jsx)("div",{className:"rounded bg-red-50 p-3 text-sm text-red-700",children:x}),(0,s.jsx)("button",{type:"submit",disabled:g,className:"w-full rounded bg-indigo-600 px-4 py-2 font-medium text-white hover:bg-indigo-700 disabled:opacity-50",children:g?"处理中...":"登录并授权"})]})]})})}}},function(e){e.O(0,[400,935,744],function(){return e(e.s=4116)}),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="fb7aa44e-1c1f-4922-a5a2-881a4fc8faba",e._sentryDebugIdIdentifier="sentry-dbid-fb7aa44e-1c1f-4922-a5a2-881a4fc8faba")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[964],{},function(e){e.O(0,[539,400,935,744],function(){return e(e.s=5539)}),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="93019800-9b79-48ab-8f7a-488f96a7f7ee",e._sentryDebugIdIdentifier="sentry-dbid-93019800-9b79-48ab-8f7a-488f96a7f7ee")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[109],{},function(e){e.O(0,[539,400,935,744],function(){return e(e.s=5539)}),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},r=(new e.Error).stack;r&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[r]="3bff89d3-665b-435a-ad27-d0679df4a9f9",e._sentryDebugIdIdentifier="sentry-dbid-3bff89d3-665b-435a-ad27-d0679df4a9f9")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[185],{3128:function(e,r,n){Promise.resolve().then(n.t.bind(n,1115,23)),Promise.resolve().then(n.bind(n,4798))},7473:function(e,r,n){"use strict";var s=n(8321);n.o(s,"useParams")&&n.d(r,{useParams:function(){return s.useParams}}),n.o(s,"usePathname")&&n.d(r,{usePathname:function(){return s.usePathname}}),n.o(s,"useRouter")&&n.d(r,{useRouter:function(){return s.useRouter}}),n.o(s,"useSearchParams")&&n.d(r,{useSearchParams:function(){return s.useSearchParams}})},4798:function(e,r,n){"use strict";n.d(r,{SystemSidebar:function(){return o}});var s=n(2835),a=n(5589),t=n(7473);let u=[{href:"/",label:"仪表盘",icon:"\uD83D\uDCCA"},{href:"/talents",label:"人才",icon:"\uD83D\uDC64"},{href:"/jobs",label:"职位",icon:"\uD83D\uDCBC"},{href:"/companies",label:"公司",icon:"\uD83C\uDFE2"},{href:"/parselog",label:"解析日志",icon:"\uD83D\uDCCB"},{href:"/recordings",label:"录制",icon:"\uD83D\uDD34"}];function o(){let e=(0,t.usePathname)()||"/";return(0,s.jsxs)("aside",{className:"flex h-screen w-56 flex-col border-r border-gray-200 bg-white",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2 border-b border-gray-200 px-4 py-3",children:[(0,s.jsx)("span",{className:"text-xl",children:"\uD83E\uDD1D"}),(0,s.jsx)("span",{className:"font-semibold text-gray-900",children:"HunterMate"})]}),(0,s.jsx)("nav",{className:"flex-1 overflow-auto py-3",children:u.map(r=>{let n=e===r.href||e.startsWith("".concat(r.href,"/"));return(0,s.jsxs)(a.default,{href:r.href,className:"mx-2 flex items-center gap-3 rounded-lg px-3 py-2 text-sm transition-colors ".concat(n?"bg-blue-50 text-blue-700":"text-gray-600 hover:bg-gray-50 hover:text-gray-900"),children:[(0,s.jsx)("span",{className:"text-base",children:r.icon}),r.label]},r.href)})})]})}},1115:function(){}},function(e){e.O(0,[24,589,400,935,744],function(){return e(e.s=3128)}),_N_E=e.O()}]);
|
package/dist/web/dist/_next/static/chunks/app/matching/jobs/[id]/talents/page-cdf1ed0971999f35.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="0add38ef-b150-45de-b475-fb187d167694",e._sentryDebugIdIdentifier="sentry-dbid-0add38ef-b150-45de-b475-fb187d167694")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[234],{866:function(e,n,t){Promise.resolve().then(t.bind(t,4762))},7473:function(e,n,t){"use strict";var r=t(8321);t.o(r,"useParams")&&t.d(n,{useParams:function(){return r.useParams}}),t.o(r,"usePathname")&&t.d(n,{usePathname:function(){return r.usePathname}}),t.o(r,"useRouter")&&t.d(n,{useRouter:function(){return r.useRouter}}),t.o(r,"useSearchParams")&&t.d(n,{useSearchParams:function(){return r.useSearchParams}})},4762:function(e,n,t){"use strict";t.d(n,{default:function(){return a}});var r=t(2835),o=t(635),s=t(7473),i=t(4431);function a(){let e=(0,s.useParams)().id,[n,t]=(0,o.useState)([]),[a,d]=(0,o.useState)(!1),[u,c]=(0,o.useState)(null);async function l(){d(!0),c(null);try{let n=await fetch("".concat((0,i.O)(),"/matching/jobs/").concat(e,"/talents"));if(!n.ok)throw Error("HTTP ".concat(n.status));t(await n.json())}catch(e){c(e.message)}finally{d(!1)}}return(0,r.jsxs)("div",{style:{padding:24,maxWidth:900,margin:"0 auto"},children:[(0,r.jsxs)("h1",{children:["职位 ",e," 的推荐人才"]}),(0,r.jsx)("button",{onClick:l,disabled:a,children:a?"计算中...":"刷新匹配"}),u&&(0,r.jsx)("div",{style:{color:"red",marginTop:12},children:u}),(0,r.jsx)("div",{style:{marginTop:16},children:n.map(e=>{var n,t,o,s,i,a,d;return(0,r.jsxs)("div",{style:{border:"1px solid #ddd",borderRadius:8,padding:16,marginBottom:12},children:[(0,r.jsxs)("div",{style:{fontWeight:"bold"},children:["人才 ID: ",e.portraitId.slice(0,8)," — 综合分 ",null===(n=e.scores)||void 0===n?void 0:n.overall]}),(0,r.jsxs)("div",{style:{fontSize:13,color:"#555",marginTop:4},children:["技能 ",null===(t=e.scores)||void 0===t?void 0:t.skill," | 经验 ",null===(o=e.scores)||void 0===o?void 0:o.experience," | 行业 ",null===(s=e.scores)||void 0===s?void 0:s.industry," | 地点 ",null===(i=e.scores)||void 0===i?void 0:i.location," | 薪酬 ",null===(a=e.scores)||void 0===a?void 0:a.salary]}),(null===(d=e.recommendation)||void 0===d?void 0:d.aiReason)&&(0,r.jsx)("pre",{style:{marginTop:8,background:"#f5f5f5",padding:12,borderRadius:4,whiteSpace:"pre-wrap"},children:e.recommendation.aiReason})]},e.id)})})]})}},4431:function(e,n,t){"use strict";t.d(n,{O:function(){return o},r:function(){return i}});var r=t(529);function o(){return r.env.HUNTER_MATE_SERVER_URL||""}let s=o();async function i(e,n){try{let t=await fetch("".concat(s).concat(e),{cache:"no-store",...n});if(!t.ok)return null;return await t.json()}catch(e){return null}}}},function(e){e.O(0,[400,935,744],function(){return e(e.s=866)}),_N_E=e.O()}]);
|
package/dist/web/dist/_next/static/chunks/app/matching/portraits/[id]/jobs/page-87f04f1d61b94cb2.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="33066fb3-8603-4b3f-bc2a-9e1acc3e1d0c",e._sentryDebugIdIdentifier="sentry-dbid-33066fb3-8603-4b3f-bc2a-9e1acc3e1d0c")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[977],{8166:function(e,n,r){Promise.resolve().then(r.bind(r,1261))},7473:function(e,n,r){"use strict";var t=r(8321);r.o(t,"useParams")&&r.d(n,{useParams:function(){return t.useParams}}),r.o(t,"usePathname")&&r.d(n,{usePathname:function(){return t.usePathname}}),r.o(t,"useRouter")&&r.d(n,{useRouter:function(){return t.useRouter}}),r.o(t,"useSearchParams")&&r.d(n,{useSearchParams:function(){return t.useSearchParams}})},1261:function(e,n,r){"use strict";r.d(n,{default:function(){return a}});var t=r(2835),o=r(635),s=r(7473),i=r(4431);function a(){let e=(0,s.useParams)().id,[n,r]=(0,o.useState)([]),[a,c]=(0,o.useState)(!1),[u,d]=(0,o.useState)(null);async function l(){c(!0),d(null);try{let n=await fetch("".concat((0,i.O)(),"/matching/portraits/").concat(e,"/jobs"));if(!n.ok)throw Error("HTTP ".concat(n.status));r(await n.json())}catch(e){d(e.message)}finally{c(!1)}}return(0,t.jsxs)("div",{style:{padding:24,maxWidth:900,margin:"0 auto"},children:[(0,t.jsxs)("h1",{children:["人才 ",e.slice(0,8)," 的推荐职位"]}),(0,t.jsx)("button",{onClick:l,disabled:a,children:a?"计算中...":"刷新匹配"}),u&&(0,t.jsx)("div",{style:{color:"red",marginTop:12},children:u}),(0,t.jsx)("div",{style:{marginTop:16},children:n.map(e=>{var n,r,o,s,i,a,c;return(0,t.jsxs)("div",{style:{border:"1px solid #ddd",borderRadius:8,padding:16,marginBottom:12},children:[(0,t.jsxs)("div",{style:{fontWeight:"bold"},children:["职位 ID: ",e.jobCaseId," — 综合分 ",null===(n=e.scores)||void 0===n?void 0:n.overall]}),(0,t.jsxs)("div",{style:{fontSize:13,color:"#555",marginTop:4},children:["技能 ",null===(r=e.scores)||void 0===r?void 0:r.skill," | 经验 ",null===(o=e.scores)||void 0===o?void 0:o.experience," | 行业 ",null===(s=e.scores)||void 0===s?void 0:s.industry," | 地点 ",null===(i=e.scores)||void 0===i?void 0:i.location," | 薪酬 ",null===(a=e.scores)||void 0===a?void 0:a.salary]}),(null===(c=e.recommendation)||void 0===c?void 0:c.aiReason)&&(0,t.jsx)("pre",{style:{marginTop:8,background:"#f5f5f5",padding:12,borderRadius:4,whiteSpace:"pre-wrap"},children:e.recommendation.aiReason})]},e.id)})})]})}},4431:function(e,n,r){"use strict";r.d(n,{O:function(){return o},r:function(){return i}});var t=r(529);function o(){return t.env.HUNTER_MATE_SERVER_URL||""}let s=o();async function i(e,n){try{let r=await fetch("".concat(s).concat(e),{cache:"no-store",...n});if(!r.ok)return null;return await r.json()}catch(e){return null}}}},function(e){e.O(0,[400,935,744],function(){return e(e.s=8166)}),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="9b41c884-0480-440a-b389-aacd3319a3e1",e._sentryDebugIdIdentifier="sentry-dbid-9b41c884-0480-440a-b389-aacd3319a3e1")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[931],{4947:function(e,t,n){Promise.resolve().then(n.bind(n,9145))},9145:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return c}});var l=n(2835),r=n(635),a=n(5589),o=n(4431),s=n(8448);let i=(0,o.O)();function c(){var e,t,n,c,u;let[d,f]=(0,r.useState)({}),[h,b]=(0,r.useState)(0),[m,v]=(0,r.useState)(null),[g,y]=(0,r.useState)(""),p=(0,r.useCallback)(async()=>{var e,t,n,l,r,a,i;let[c,u,d,h,m]=await Promise.all([(0,o.r)("/entities?type=talent&limit=1"),(0,o.r)("/entities?type=job&limit=1"),(0,o.r)("/entities?type=company&limit=1"),(0,o.r)("/parse-log?limit=1"),(0,o.r)("/api/recordings?limit=1")]);v(!!(c||u||d||h||m)),f({talent:null!==(t=null==c?void 0:c.total)&&void 0!==t?t:0,job:null!==(n=null==u?void 0:u.total)&&void 0!==n?n:0,company:null!==(l=null==d?void 0:d.total)&&void 0!==l?l:0,parseLog:null!==(r=null==h?void 0:h.total)&&void 0!==r?r:0,recording:null!==(a=null==m?void 0:null===(e=m.sessions)||void 0===e?void 0:e.length)&&void 0!==a?a:0}),b(null!==(i=null==h?void 0:h.abnormal)&&void 0!==i?i:0),y((0,s.d3)(new Date().toISOString()))},[]);(0,r.useEffect)(()=>{p()},[p]);let x=[{key:"talent",label:"人才",href:"/talents",count:null!==(e=d.talent)&&void 0!==e?e:0},{key:"job",label:"职位",href:"/jobs",count:null!==(t=d.job)&&void 0!==t?t:0},{key:"company",label:"公司",href:"/companies",count:null!==(n=d.company)&&void 0!==n?n:0},{key:"parseLog",label:"解析日志",href:"/parselog",count:null!==(c=d.parseLog)&&void 0!==c?c:0,abnormal:h},{key:"recording",label:"录制会话",href:"/recordings",count:null!==(u=d.recording)&&void 0!==u?u:0}];return(0,l.jsxs)("div",{className:"h-full overflow-auto p-6",children:[(0,l.jsxs)("header",{className:"mb-6",children:[(0,l.jsx)("h1",{className:"text-2xl font-bold",children:"HunterMate 仪表盘"}),(0,l.jsxs)("p",{className:"mt-1 text-sm text-gray-500",children:["server: ",i," \xb7"," ",(0,l.jsx)("span",{className:m?"text-green-600":"text-red-600",children:null===m?"检测中…":m?"在线":"离线"}),g?" \xb7 刷新于 ".concat(g):""]})]}),(0,l.jsx)("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:x.map(e=>(0,l.jsxs)(a.default,{href:e.href,className:"rounded-lg border border-gray-200 bg-white p-5 shadow-sm transition-shadow hover:shadow-md",children:[(0,l.jsxs)("div",{className:"flex items-center justify-between",children:[(0,l.jsx)("span",{className:"text-gray-500",children:e.label}),(0,l.jsx)("span",{className:"text-2xl font-bold text-gray-900",children:e.count})]}),e.abnormal?(0,l.jsxs)("div",{className:"mt-2 text-sm text-red-600",children:["异常 ",e.abnormal]}):null]},e.key))})]})}},8448:function(e,t,n){"use strict";function l(e){return e?("string"==typeof e?new Date(e):e).toLocaleString("zh-CN",{hour12:!1}):""}n.d(t,{d3:function(){return l}})},4431:function(e,t,n){"use strict";n.d(t,{O:function(){return r},r:function(){return o}});var l=n(529);function r(){return l.env.HUNTER_MATE_SERVER_URL||""}let a=r();async function o(e,t){try{let n=await fetch("".concat(a).concat(e),{cache:"no-store",...t});if(!n.ok)return null;return await n.json()}catch(e){return null}}}},function(e){e.O(0,[589,400,935,744],function(){return e(e.s=4947)}),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="3c5f2677-9e6e-496a-b47c-2b079bf720fc",e._sentryDebugIdIdentifier="sentry-dbid-3c5f2677-9e6e-496a-b47c-2b079bf720fc")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[788],{793:function(e,t,s){Promise.resolve().then(s.bind(s,4895))},7473:function(e,t,s){"use strict";var r=s(8321);s.o(r,"useParams")&&s.d(t,{useParams:function(){return r.useParams}}),s.o(r,"usePathname")&&s.d(t,{usePathname:function(){return r.usePathname}}),s.o(r,"useRouter")&&s.d(t,{useRouter:function(){return r.useRouter}}),s.o(r,"useSearchParams")&&s.d(t,{useSearchParams:function(){return r.useSearchParams}})},4895:function(e,t,s){"use strict";s.r(t),s.d(t,{default:function(){return y}});var r=s(2835),n=s(635),a=s(7473),l=s(4431),o=s(7202),c=s(4518),i=s(3718),u=s(9036),d=s(5589),x=s(8448);let m={ok:"正常",empty:"关键字段为空","no-snapshot":"缺快照","no-rule":"无规则"},f={ok:"bg-green-50 text-green-700",empty:"bg-yellow-50 text-yellow-700","no-snapshot":"bg-red-50 text-red-700","no-rule":"bg-gray-100 text-gray-600"};function h(e){var t,s;let{item:n}=e;return(0,r.jsxs)("div",{className:"mx-auto max-w-4xl",children:[(0,r.jsx)(d.default,{href:"/parselog",className:"text-sm text-blue-600 hover:underline",children:"← 返回解析日志列表"}),(0,r.jsxs)("header",{className:"mt-4 mb-6",children:[(0,r.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[(0,r.jsxs)("h1",{className:"text-2xl font-bold text-gray-900",children:["解析记录 #",n.id]}),(0,r.jsx)("span",{className:"rounded px-2 py-0.5 text-xs ".concat(f[n.status]),children:null!==(s=m[n.status])&&void 0!==s?s:n.status}),n.hasSnapshot?(0,r.jsx)("span",{className:"rounded bg-green-50 px-2 py-0.5 text-xs text-green-700",children:"有录制快照"}):null]}),(0,r.jsxs)("p",{className:"mt-1 text-sm text-gray-500",children:[n.domain," \xb7 ",n.pageClass," \xb7 ",(0,x.d3)(n.createdAt)]})]}),(0,r.jsxs)("section",{className:"rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,r.jsx)("h2",{className:"mb-3 text-lg font-semibold",children:"来源"}),(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsxs)("div",{className:"text-sm",children:[(0,r.jsx)("span",{className:"text-gray-500",children:"sessionId: "}),(0,r.jsx)("span",{className:"font-mono",children:n.sessionId})]}),(0,r.jsx)("a",{href:n.sourceUrl,target:"_blank",rel:"noreferrer",className:"break-all text-sm text-blue-600 hover:underline",children:n.sourceUrl}),n.entityId?(0,r.jsxs)("div",{className:"pt-2",children:[(0,r.jsx)("span",{className:"text-sm text-gray-500",children:"关联实体: "}),(0,r.jsxs)(d.default,{href:"/".concat(n.pageClass,"s?id=").concat(n.entityId),className:"text-sm text-blue-600 hover:underline",children:["#",n.entityId," (",n.pageClass,")"]})]}):null]})]}),n.extractedFields?(0,r.jsxs)("section",{className:"mt-4 rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,r.jsx)("h2",{className:"mb-3 text-lg font-semibold",children:"提取字段"}),(0,r.jsx)("pre",{className:"max-h-96 overflow-auto rounded bg-gray-50 p-3 text-xs text-gray-700",children:JSON.stringify(n.extractedFields,null,2)})]}):null,(null===(t=n.missingFields)||void 0===t?void 0:t.length)?(0,r.jsxs)("section",{className:"mt-4 rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,r.jsx)("h2",{className:"mb-3 text-lg font-semibold",children:"缺失字段(疑似站点改版)"}),(0,r.jsx)("ul",{className:"list-inside list-disc text-sm text-gray-700",children:n.missingFields.map(e=>(0,r.jsx)("li",{children:e},e))})]}):null]})}let g=[{value:"ok",label:"正常"},{value:"empty",label:"关键字段为空"},{value:"no-snapshot",label:"缺快照"},{value:"no-rule",label:"无规则"}],b={ok:"bg-green-50 text-green-700",empty:"bg-yellow-50 text-yellow-700","no-snapshot":"bg-red-50 text-red-700","no-rule":"bg-gray-100 text-gray-600"};function p(e){let t=new URLSearchParams;Object.entries(e).forEach(e=>{let[s,r]=e;r&&t.set(s,r)});let s=t.toString();return s?"?".concat(s):""}function v(){let e=(0,a.useRouter)(),t=(0,a.usePathname)(),s=(0,a.useSearchParams)(),d=s.get("id")||"",m=(0,n.useMemo)(()=>({q:s.get("q")||"",status:s.get("status")||"",from:s.get("from")||"",to:s.get("to")||""}),[s]),[f,v]=(0,n.useState)(null),[y,j]=(0,n.useState)(null),[N,w]=(0,n.useState)(!0),[S,k]=(0,n.useState)(!1),[C,E]=(0,n.useState)(0),q=(0,n.useCallback)(s=>{var r,n;let a=null!==(r=s.filters)&&void 0!==r?r:m,l=p({id:null!==(n=s.id)&&void 0!==n?n:d,q:a.q,status:a.status,from:a.from,to:a.to});e.replace("".concat(t).concat(l))},[m,d,t,e]),I=(0,n.useCallback)(()=>{E(e=>e+1)},[]),P=(0,n.useCallback)(()=>{let e=null==f?void 0:f.items[0];return null==e?void 0:e.createdAt},[f]);(0,n.useEffect)(()=>{w(!0);let e=p({q:m.q,status:m.status,from:m.from,to:m.to});(0,l.r)("/parse-log?limit=200".concat(e.replace("?","&"))).then(e=>{v(e),w(!1)})},[m.q,m.status,m.from,m.to,C]),(0,n.useEffect)(()=>{if(!d){j(null);return}k(!0),(0,l.r)("/parse-log/".concat(d)).then(e=>{j(e),k(!1)})},[d]);let R=(0,n.useMemo)(()=>{var e;return(null!==(e=null==f?void 0:f.items)&&void 0!==e?e:[]).map(e=>({id:String(e.id),content:(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{className:"rounded px-1.5 py-0.5 text-xs ".concat(b[e.status]),children:e.status}),(0,r.jsx)("span",{className:"text-xs text-gray-500",children:e.pageClass})]}),(0,r.jsx)("div",{className:"mt-0.5 text-sm font-medium text-gray-900",children:e.domain}),(0,r.jsx)("div",{className:"text-xs text-gray-400",children:(0,x.d3)(e.createdAt)})]})}))},[f]),_=d?S?(0,r.jsx)("div",{className:"flex h-full items-center justify-center text-gray-400",children:"加载中…"}):y?(0,r.jsx)(h,{item:y}):(0,r.jsx)("div",{className:"flex h-full items-center justify-center text-red-500",children:"未找到该解析日志"}):(0,r.jsx)("div",{className:"flex h-full items-center justify-center text-gray-400",children:"请在左侧选择一条解析日志查看详情"});return(0,r.jsx)(c.m,{filterBar:(0,r.jsxs)("div",{className:"border-b border-gray-200 bg-white",children:[(0,r.jsx)(o.f,{value:m,showStatus:!0,statusOptions:g,onChange:e=>q({filters:e})}),f?(0,r.jsxs)("div",{className:"flex items-center justify-between px-3 pb-2 text-xs text-gray-500",children:[(0,r.jsxs)("span",{children:["共 ",f.total," 条"]}),f.abnormal>0?(0,r.jsxs)("span",{className:"rounded bg-red-50 px-1.5 py-0.5 text-red-700",children:["异常 ",f.abnormal]}):null]}):null,(0,r.jsx)(u.Y,{pollUrl:"/parse-log/count",getLatestTimestamp:P,onRefresh:I,label:"解析日志"})]}),listPanel:(0,r.jsx)(i.L,{items:R,selectedId:d,onSelect:e=>q({id:e}),loading:N,emptyText:"暂无解析日志"}),detailPanel:_})}function y(){return(0,r.jsx)(n.Suspense,{fallback:(0,r.jsx)("div",{className:"p-6 text-gray-500",children:"加载中…"}),children:(0,r.jsx)(v,{})})}},7202:function(e,t,s){"use strict";s.d(t,{f:function(){return a}});var r=s(2835),n=s(635);function a(e){let{value:t,showStatus:s,statusOptions:a,onChange:l}=e,[o,c]=(0,n.useState)(t);return(0,n.useEffect)(()=>{c(t)},[t.q,t.status,t.from,t.to]),(0,n.useEffect)(()=>{let e=setTimeout(()=>{(o.q!==t.q||o.status!==t.status||o.from!==t.from||o.to!==t.to)&&l(o)},300);return()=>clearTimeout(e)},[o.q,o.status,o.from,o.to]),(0,r.jsxs)("div",{className:"space-y-2 border-b border-gray-200 bg-white p-3",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsxs)("div",{className:"relative flex-1",children:[(0,r.jsx)("input",{type:"text",value:o.q,onChange:e=>c(t=>({...t,q:e.target.value})),placeholder:"搜索关键词...",className:"w-full rounded border border-gray-300 px-2 py-1.5 pr-8 text-sm outline-none focus:border-blue-500"}),(0,r.jsx)("button",{type:"button",onClick:()=>l({q:"",status:"",from:"",to:""}),title:"重置筛选",className:"absolute right-1 top-1/2 -translate-y-1/2 rounded p-1 text-gray-400 hover:bg-gray-100 hover:text-gray-600 disabled:opacity-30",disabled:!o.q&&!o.status&&!o.from&&!o.to,children:(0,r.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-4 w-4",viewBox:"0 0 20 20",fill:"currentColor",children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"})})})]}),s?(0,r.jsxs)("select",{value:o.status,onChange:e=>c(t=>({...t,status:e.target.value})),className:"rounded border border-gray-300 px-2 py-1.5 text-sm outline-none focus:border-blue-500",children:[(0,r.jsx)("option",{value:"",children:"全部状态"}),(a||[]).map(e=>(0,r.jsx)("option",{value:e.value,children:e.label},e.value))]}):null]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("input",{type:"date",value:o.from,onChange:e=>c(t=>({...t,from:e.target.value})),className:"rounded border border-gray-300 px-2 py-1.5 text-sm outline-none focus:border-blue-500"}),(0,r.jsx)("span",{className:"text-sm text-gray-400",children:"-"}),(0,r.jsx)("input",{type:"date",value:o.to,onChange:e=>c(t=>({...t,to:e.target.value})),className:"rounded border border-gray-300 px-2 py-1.5 text-sm outline-none focus:border-blue-500"})]})]})}},4518:function(e,t,s){"use strict";s.d(t,{m:function(){return n}});var r=s(2835);function n(e){let{filterBar:t,listPanel:s,detailPanel:n}=e;return(0,r.jsxs)("div",{className:"flex h-full",children:[(0,r.jsxs)("div",{className:"flex w-80 flex-col border-r border-gray-200 bg-white",children:[t,s]}),(0,r.jsx)("div",{className:"flex-1 overflow-auto bg-gray-50 p-6",children:n})]})}},3718:function(e,t,s){"use strict";s.d(t,{L:function(){return n}});var r=s(2835);function n(e){let{items:t,selectedId:s,onSelect:n,loading:a,emptyText:l="暂无数据"}=e;return(0,r.jsx)("div",{className:"flex-1 overflow-auto",children:a?(0,r.jsx)("div",{className:"p-4 text-center text-sm text-gray-400",children:"加载中…"}):0===t.length?(0,r.jsx)("div",{className:"p-4 text-center text-sm text-gray-400",children:l}):(0,r.jsx)("ul",{className:"divide-y divide-gray-100",children:t.map(e=>(0,r.jsx)("li",{role:"button",tabIndex:0,onClick:()=>n(e.id),onKeyDown:t=>{("Enter"===t.key||" "===t.key)&&n(e.id)},className:"cursor-pointer px-3 py-2 text-sm transition-colors ".concat(s===e.id?"bg-blue-50":"hover:bg-gray-50"),children:e.content},e.id))})})}},9036:function(e,t,s){"use strict";s.d(t,{Y:function(){return l}});var r=s(2835),n=s(635),a=s(4431);function l(e){let{pollUrl:t,intervalMs:s=5e3,onRefresh:l,getLatestTimestamp:o,label:c="新数据"}=e,[i,u]=(0,n.useState)(0),[d,x]=(0,n.useState)(!1),m=(0,n.useRef)(void 0);return((0,n.useEffect)(()=>{let e=()=>x(document.hidden);return document.addEventListener("visibilitychange",e),()=>document.removeEventListener("visibilitychange",e)},[]),(0,n.useEffect)(()=>{m.current=o(),u(0)},[o]),(0,n.useEffect)(()=>{if(d)return;let e=async()=>{var e;let s=m.current;if(!s)return;let r=t.includes("?")?"&":"?",n=await (0,a.r)("".concat(t).concat(r,"since=").concat(encodeURIComponent(s))).catch(()=>null),l=null!==(e=null==n?void 0:n.count)&&void 0!==e?e:0;u(e=>Math.max(e,l))};e();let r=setInterval(e,s);return()=>clearInterval(r)},[t,s,d]),i<=0)?null:(0,r.jsxs)("button",{type:"button",onClick:()=>{u(0),l()},className:"w-full bg-blue-50 px-3 py-2 text-center text-sm text-blue-700 hover:bg-blue-100 active:bg-blue-200",children:["有 ",i," 条",c,",点击刷新"]})}},8448:function(e,t,s){"use strict";function r(e){return e?("string"==typeof e?new Date(e):e).toLocaleString("zh-CN",{hour12:!1}):""}s.d(t,{d3:function(){return r}})},4431:function(e,t,s){"use strict";s.d(t,{O:function(){return n},r:function(){return l}});var r=s(529);function n(){return r.env.HUNTER_MATE_SERVER_URL||""}let a=n();async function l(e,t){try{let s=await fetch("".concat(a).concat(e),{cache:"no-store",...t});if(!s.ok)return null;return await s.json()}catch(e){return null}}}},function(e){e.O(0,[589,400,935,744],function(){return e(e.s=793)}),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="716ea284-96d0-4cd5-a354-214e7ca36e43",e._sentryDebugIdIdentifier="sentry-dbid-716ea284-96d0-4cd5-a354-214e7ca36e43")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[370],{1428:function(e,t,s){Promise.resolve().then(s.bind(s,6297))},7473:function(e,t,s){"use strict";var r=s(8321);s.o(r,"useParams")&&s.d(t,{useParams:function(){return r.useParams}}),s.o(r,"usePathname")&&s.d(t,{usePathname:function(){return r.usePathname}}),s.o(r,"useRouter")&&s.d(t,{useRouter:function(){return r.useRouter}}),s.o(r,"useSearchParams")&&s.d(t,{useSearchParams:function(){return r.useSearchParams}})},6297:function(e,t,s){"use strict";s.r(t),s.d(t,{default:function(){return R}});var r=s(2835),n=s(635),l=s(7473),a=s(4431),i=s(7202),d=s(4518),o=s(8448);function c(e){var t,s,n,l,a;let{sessionId:i,eventCount:d,sourceUrl:c,startedAt:u,lastEventAt:x,summary:m}=e,v=[{label:"rrweb",value:null!==(t=null==m?void 0:m.rrwebCount)&&void 0!==t?t:0},{label:"network",value:null!==(s=null==m?void 0:m.networkCount)&&void 0!==s?s:0},{label:"console",value:null!==(n=null==m?void 0:m.consoleCount)&&void 0!==n?n:0},{label:"简历",value:null!==(l=null==m?void 0:m.resumeCount)&&void 0!==l?l:0},{label:"操作",value:null!==(a=null==m?void 0:m.actionCount)&&void 0!==a?a:0}].filter(e=>e.value>0);return(0,r.jsxs)("section",{className:"rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,r.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-sm text-gray-500",children:"事件数"}),(0,r.jsx)("div",{className:"text-lg font-semibold",children:d})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-sm text-gray-500",children:"来源页面"}),c?(0,r.jsx)("a",{href:c,target:"_blank",rel:"noreferrer",className:"break-all text-sm text-blue-600 hover:underline",children:c}):(0,r.jsx)("div",{className:"text-sm text-gray-400",children:"-"})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-sm text-gray-500",children:"开始时间"}),(0,r.jsx)("div",{className:"text-sm",children:(0,o.d3)(u)})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-sm text-gray-500",children:"最近事件"}),(0,r.jsx)("div",{className:"text-sm",children:(0,o.d3)(x)})]})]}),v.length>0?(0,r.jsx)("div",{className:"mt-3 flex flex-wrap gap-2 border-t border-gray-100 pt-3",children:v.map(e=>(0,r.jsxs)("span",{className:"rounded bg-gray-100 px-2 py-1 text-xs text-gray-700",children:[e.label,": ",e.value]},e.label))}):null,(0,r.jsx)("div",{className:"mt-3 border-t border-gray-100 pt-3",children:(0,r.jsx)("div",{className:"font-mono text-xs text-gray-400",children:i})})]})}let u={rrweb:"rrweb",network:"network",console:"console",resume:"简历",action:"操作"},x={rrweb:"bg-purple-100 text-purple-700",network:"bg-blue-100 text-blue-700",console:"bg-yellow-100 text-yellow-700",resume:"bg-green-100 text-green-700",action:"bg-gray-100 text-gray-700"};function m(e){var t,s;let{type:n}=e,l=null!==(t=u[n])&&void 0!==t?t:n,a=null!==(s=x[n])&&void 0!==s?s:"bg-gray-100 text-gray-600";return(0,r.jsx)("span",{className:"inline-flex items-center rounded px-2 py-0.5 text-xs font-medium ".concat(a),children:l})}let v=["rrweb","network","console","resume","action"];function h(e){let{events:t,selectedEventId:s,onSelectEvent:l}=e,[a,i]=(0,n.useState)("all"),d=(0,n.useMemo)(()=>{let e=[...t].sort((e,t)=>new Date(e.createdAt).getTime()-new Date(t.createdAt).getTime());return"all"===a?e:e.filter(e=>e.eventType===a)},[t,a]);return(0,r.jsxs)("section",{className:"rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,r.jsxs)("div",{className:"mb-4 flex flex-wrap items-center gap-2",children:[(0,r.jsx)("button",{type:"button",onClick:()=>i("all"),className:"rounded px-2 py-1 text-xs ".concat("all"===a?"bg-gray-800 text-white":"border border-gray-300 text-gray-600 hover:bg-gray-50"),children:"全部"}),v.map(e=>(0,r.jsx)("button",{type:"button",onClick:()=>i(e),className:"rounded px-2 py-1 text-xs ".concat(a===e?"bg-gray-800 text-white":"border border-gray-300 text-gray-600 hover:bg-gray-50"),children:(0,r.jsx)(m,{type:e})},e))]}),(0,r.jsx)("div",{className:"max-h-96 overflow-auto",children:0===d.length?(0,r.jsx)("div",{className:"py-8 text-center text-sm text-gray-400",children:"暂无事件"}):(0,r.jsx)("ul",{className:"space-y-1",children:d.map((e,t)=>{var n;return(0,r.jsxs)("li",{role:l?"button":void 0,tabIndex:l?0:void 0,onClick:()=>null==l?void 0:l(e),onKeyDown:t=>{("Enter"===t.key||" "===t.key)&&(null==l||l(e))},className:"flex items-start gap-3 rounded p-2 text-sm ".concat(l?"cursor-pointer hover:bg-gray-50":""," ").concat(s===e.id?"bg-blue-50":""),children:[(0,r.jsx)(m,{type:e.eventType}),(0,r.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,r.jsx)("div",{className:"truncate text-gray-900",children:function(e){var t,s,r,n,l,a,i;let{eventType:d,payload:o}=e;switch(d){case"rrweb":return"rrweb ".concat(null!==(t=null==o?void 0:o.type)&&void 0!==t?t:"event");case"network":return"".concat(null!==(s=null==o?void 0:o.method)&&void 0!==s?s:"GET"," ").concat(null!==(r=null==o?void 0:o.url)&&void 0!==r?r:"?");case"console":return"[".concat(null!==(l=null==o?void 0:o.level)&&void 0!==l?l:"log","] ").concat(String(null!==(a=null==o?void 0:null===(n=o.args)||void 0===n?void 0:n[0])&&void 0!==a?a:""));case"resume":return"简历提取事件";case"action":return null!==(i=null==o?void 0:o.action)&&void 0!==i?i:"操作事件";default:return d}}(e)}),(0,r.jsx)("div",{className:"text-xs text-gray-400",children:(0,o.d3)(e.createdAt)})]})]},null!==(n=e.id)&&void 0!==n?n:t)})})})]})}function g(e){let{data:t}=e;return(0,r.jsx)("pre",{className:"max-h-64 overflow-auto rounded bg-gray-50 p-3 text-xs text-gray-700",children:JSON.stringify(t,null,2)})}function f(e){var t;let{event:s}=e,n=s.payload,l=(null==n?void 0:n.type)===2?"全量快照":(null==n?void 0:n.type)===3?"增量":"类型 ".concat(null!==(t=null==n?void 0:n.type)&&void 0!==t?t:"?");return(0,r.jsxs)("div",{className:"space-y-3",children:[(0,r.jsxs)("div",{className:"text-sm text-gray-500",children:["rrweb ",l," \xb7 ",s.sourceUrl?(0,r.jsx)("a",{href:s.sourceUrl,target:"_blank",rel:"noreferrer",className:"text-blue-600 hover:underline",children:s.sourceUrl}):"来源未知"]}),(0,r.jsx)("div",{className:"rounded border border-purple-100 bg-purple-50 p-3 text-sm text-purple-700",children:"rrweb-player 完整回放将在后续迭代接入,当前可查看下方原始 JSON。"}),(0,r.jsx)(g,{data:s.payload})]})}function b(e){var t,s,n,l;let{event:a}=e,i=a.payload;return(0,r.jsxs)("div",{className:"space-y-3",children:[(0,r.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-xs text-gray-500",children:"Method"}),(0,r.jsx)("div",{className:"text-sm font-medium",children:null!==(t=null==i?void 0:i.method)&&void 0!==t?t:"?"})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-xs text-gray-500",children:"Status"}),(0,r.jsx)("div",{className:"text-sm font-medium",children:null!==(s=null==i?void 0:i.status)&&void 0!==s?s:"?"})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-xs text-gray-500",children:"MIME"}),(0,r.jsx)("div",{className:"text-sm font-medium",children:null!==(n=null==i?void 0:i.mimeType)&&void 0!==n?n:"?"})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-xs text-gray-500",children:"Size"}),(0,r.jsx)("div",{className:"text-sm font-medium",children:null!==(l=null==i?void 0:i.size)&&void 0!==l?l:"?"})]})]}),(null==i?void 0:i.url)?(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-xs text-gray-500",children:"URL"}),(0,r.jsx)("a",{href:i.url,target:"_blank",rel:"noreferrer",className:"break-all text-sm text-blue-600 hover:underline",children:i.url})]}):null,(0,r.jsx)(g,{data:a.payload})]})}function y(e){var t,s,n,l;let{event:a}=e,i=a.payload,d=null!==(n=({error:"text-red-600",warn:"text-yellow-600",info:"text-blue-600",debug:"text-gray-500",log:"text-gray-700"})[null!==(s=null==i?void 0:i.level)&&void 0!==s?s:"log"])&&void 0!==n?n:"text-gray-700";return(0,r.jsxs)("div",{className:"space-y-3",children:[(0,r.jsxs)("div",{className:"text-sm",children:["Level: ",(0,r.jsx)("span",{className:"font-medium ".concat(d),children:null!==(l=null==i?void 0:i.level)&&void 0!==l?l:"log"})]}),(null==i?void 0:null===(t=i.args)||void 0===t?void 0:t.length)?(0,r.jsx)("div",{className:"space-y-2",children:i.args.map((e,t)=>(0,r.jsx)(g,{data:e},t))}):(0,r.jsx)(g,{data:a.payload})]})}function p(e){var t;let{event:s}=e,n=s.payload;return(0,r.jsxs)("div",{className:"space-y-3",children:[(0,r.jsx)("div",{className:"text-sm font-medium",children:null!==(t=null==n?void 0:n.title)&&void 0!==t?t:"简历提取事件"}),(null==n?void 0:n.source)?(0,r.jsxs)("div",{className:"text-xs text-gray-500",children:["来源: ",(0,r.jsx)("a",{href:n.source,target:"_blank",rel:"noreferrer",className:"text-blue-600 hover:underline",children:n.source})]}):null,(null==n?void 0:n.fields)?(0,r.jsx)(g,{data:n.fields}):(0,r.jsx)(g,{data:s.payload})]})}function j(e){var t;let{event:s}=e,n=s.payload;return(0,r.jsxs)("div",{className:"space-y-3",children:[(0,r.jsx)("div",{className:"text-sm font-medium",children:null!==(t=null==n?void 0:n.action)&&void 0!==t?t:"操作事件"}),(0,r.jsx)(g,{data:s.payload})]})}function N(e){let t,{event:s}=e,[l,a]=(0,n.useState)(!1);switch(s.eventType){case"rrweb":t=(0,r.jsx)(f,{event:s});break;case"network":t=(0,r.jsx)(b,{event:s});break;case"console":t=(0,r.jsx)(y,{event:s});break;case"resume":t=(0,r.jsx)(p,{event:s});break;case"action":t=(0,r.jsx)(j,{event:s});break;default:t=(0,r.jsx)(g,{data:s.payload})}return(0,r.jsxs)("section",{className:"rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,r.jsxs)("div",{className:"mb-3 flex items-center justify-between",children:[(0,r.jsx)("h2",{className:"text-lg font-semibold",children:"事件详情"}),(0,r.jsx)("button",{type:"button",onClick:()=>a(e=>!e),className:"rounded border border-gray-300 px-3 py-1 text-sm hover:bg-gray-50",children:l?"收起原始 JSON":"查看原始 JSON"})]}),t,l?(0,r.jsx)("div",{className:"mt-3",children:(0,r.jsx)(g,{data:s})}):null]})}function w(e){let{sessionId:t}=e,[s,l]=(0,n.useState)("idle"),[i,d]=(0,n.useState)(null),[o,c]=(0,n.useState)("");async function u(){l("loading"),c("");try{let e=await (0,a.r)("/api/recordings/".concat(encodeURIComponent(t),"/parse"),{method:"POST"});if(null===e){l("error"),c("解析请求失败,请检查 server 日志");return}d(e),l("success")}catch(e){l("error"),c(e instanceof Error?e.message:String(e))}}let x=i&&"object"==typeof i&&"entity"in i&&i.entity&&"object"==typeof i.entity&&"id"in i.entity&&"type"in i.entity?"/entity?type=".concat(encodeURIComponent(String(i.entity.type)),"&id=").concat(encodeURIComponent(String(i.entity.id))):null;return(0,r.jsxs)("section",{className:"rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsx)("h2",{className:"text-lg font-semibold",children:"解析"}),(0,r.jsx)("button",{type:"button",onClick:u,disabled:"loading"===s,className:"rounded bg-blue-600 px-4 py-2 text-sm font-medium text-white hover:bg-blue-700 disabled:opacity-50",children:"loading"===s?"解析中…":"触发解析"})]}),"success"===s?(0,r.jsxs)("div",{className:"mt-3 rounded border border-green-200 bg-green-50 p-3 text-sm text-green-700",children:[(0,r.jsx)("div",{children:"解析成功 ✅"}),x?(0,r.jsx)("a",{href:x,className:"mt-1 inline-block text-blue-600 hover:underline",children:"查看解析结果 →"}):null]}):null,"error"===s?(0,r.jsxs)("div",{className:"mt-3 rounded border border-red-200 bg-red-50 p-3 text-sm text-red-700",children:[(0,r.jsx)("div",{children:"解析失败"}),o?(0,r.jsx)("div",{className:"mt-1",children:o}):null]}):null]})}function k(e){let{events:t}=e,l=(0,n.useRef)(null),[a,i]=(0,n.useState)(!1);return((0,n.useEffect)(()=>{let e;if(!l.current||0===t.length)return;let r=!1;return async function(){let n=await Promise.all([s.e(131),s.e(671)]).then(s.bind(s,5841));await Promise.all([s.e(608),s.e(166)]).then(s.t.bind(s,166,23)),!r&&l.current&&(e=new(n.default||n)({target:l.current,props:{events:t}}),i(!0))}(),()=>{var t;r=!0,null==e||null===(t=e.$destroy)||void 0===t||t.call(e),l.current&&(l.current.innerHTML="")}},[t]),0===t.length)?(0,r.jsx)("div",{className:"rounded border border-gray-200 bg-white p-4 shadow-sm text-sm text-gray-500",children:"暂无 rrweb 回放事件"}):(0,r.jsxs)("div",{className:"rounded border border-gray-200 bg-white p-4 shadow-sm",children:[(0,r.jsx)("div",{ref:l,className:"w-full"}),a?null:(0,r.jsx)("div",{className:"text-sm text-gray-500",children:"播放器加载中…"})]})}function S(e){let{data:t}=e,s=(0,l.useSearchParams)().get("eventId"),[a,i]=(0,n.useState)(null),[d,o]=(0,n.useState)(!1);(0,n.useEffect)(()=>{if(!s||!t.events.length){i(null);return}let e=Number(s),r=t.events.find(t=>t.id===e);i(null!=r?r:null)},[s,t.events]);let u=t.events.filter(e=>"rrweb"===e.eventType).map(e=>e.payload);return(0,r.jsxs)("div",{className:"mx-auto max-w-4xl",children:[(0,r.jsx)("header",{className:"mb-6",children:(0,r.jsx)("h1",{className:"text-2xl font-bold text-gray-900",children:"录制会话"})}),(0,r.jsx)(c,{sessionId:t.sessionId,eventCount:t.eventCount,sourceUrl:t.sourceUrl,startedAt:t.startedAt,lastEventAt:t.lastEventAt,summary:t.summary}),(0,r.jsx)("div",{className:"mt-4",children:(0,r.jsx)(k,{events:u})}),(0,r.jsx)("div",{className:"mt-4",children:(0,r.jsx)(w,{sessionId:t.sessionId})}),(0,r.jsx)("div",{className:"mt-4",children:(0,r.jsx)(h,{events:t.events,selectedEventId:null==a?void 0:a.id,onSelectEvent:i})}),a?(0,r.jsx)("div",{className:"mt-4",children:(0,r.jsx)(N,{event:a})}):null,(0,r.jsxs)("section",{className:"mt-4 rounded-lg border border-gray-200 bg-white p-5 shadow-sm",children:[(0,r.jsxs)("div",{className:"mb-3 flex items-center justify-between",children:[(0,r.jsx)("h2",{className:"text-lg font-semibold",children:"原始事件 JSON"}),(0,r.jsx)("button",{type:"button",onClick:()=>o(e=>!e),className:"rounded border border-gray-300 px-3 py-1 text-sm hover:bg-gray-50",children:d?"收起":"展开"})]}),d?(0,r.jsx)("pre",{className:"max-h-96 overflow-auto rounded bg-gray-50 p-3 text-xs text-gray-700",children:JSON.stringify(t.events,null,2)}):(0,r.jsxs)("div",{className:"text-sm text-gray-500",children:["共 ",t.events.length," 条事件,点击展开查看原始 JSON"]})]})]})}var I=s(3718);function C(e){let{session:t}=e;return(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"font-mono text-xs text-gray-500",children:t.sessionId}),(0,r.jsxs)("div",{className:"flex items-center gap-2 text-sm font-medium text-gray-900",children:[(0,r.jsxs)("span",{children:[t.eventCount," 事件"]}),"number"==typeof t.tabId?(0,r.jsxs)("span",{className:"rounded bg-gray-100 px-1.5 py-0.5 text-xs text-gray-600",children:["tab #",t.tabId]}):null]}),t.sourceUrl?(0,r.jsx)("div",{className:"truncate text-xs text-blue-600",children:t.sourceUrl}):null,(0,r.jsx)("div",{className:"text-xs text-gray-400",children:(0,o.d3)(t.lastEventAt)})]})}function E(e){let{sessions:t,selectedId:s,onSelect:n,loading:l}=e,a=t.map(e=>({id:e.sessionId,content:(0,r.jsx)(C,{session:e})}));return(0,r.jsx)(I.L,{items:a,selectedId:s,onSelect:n,loading:l,emptyText:"暂无录制会话"})}function L(e){let t=new URLSearchParams;Object.entries(e).forEach(e=>{let[s,r]=e;r&&t.set(s,r)});let s=t.toString();return s?"?".concat(s):""}function P(){var e,t,s,o;let c=(0,l.useRouter)(),u=(0,l.usePathname)(),x=(0,l.useSearchParams)(),m=x.get("sessionId")||"",v=(0,n.useMemo)(()=>({q:x.get("q")||"",status:"",from:x.get("from")||"",to:x.get("to")||""}),[x]),[h,g]=(0,n.useState)([]),[f,b]=(0,n.useState)(null),[y,p]=(0,n.useState)(!0),[j,N]=(0,n.useState)(!1),w=(0,n.useCallback)(e=>{var t,s;let r=null!==(t=e.filters)&&void 0!==t?t:v,n=L({sessionId:null!==(s=e.sessionId)&&void 0!==s?s:m,q:r.q,from:r.from,to:r.to});c.replace("".concat(u).concat(n))},[v,m,u,c]),k=(0,n.useCallback)(e=>{(null==e?void 0:e.withLoading)&&p(!0);let t=L({q:v.q,from:v.from,to:v.to});(0,a.r)("/api/recordings?limit=200".concat(t.replace("?","&"))).then(t=>{g(e=>{var s;return function(e,t){let s=new Map(e.map(e=>[e.sessionId,e]));return t.map(e=>{let t=s.get(e.sessionId);return t&&t.eventCount===e.eventCount&&t.lastEventAt===e.lastEventAt&&t.tabId===e.tabId?t:{...e}})}(e,null!==(s=null==t?void 0:t.sessions)&&void 0!==s?s:[])}),(null==e?void 0:e.withLoading)&&p(!1)})},[v.q,v.from,v.to]),I=(0,n.useCallback)(e=>{if(!m){b(null);return}(null==e?void 0:e.withLoading)&&N(!0),(0,a.r)("/api/recordings/".concat(encodeURIComponent(m))).then(t=>{b(t),(null==e?void 0:e.withLoading)&&N(!1)})},[m]);(0,n.useEffect)(()=>{k({withLoading:!0})},[k]),(0,n.useEffect)(()=>{let e=setInterval(()=>k({withLoading:!1}),3e3);return()=>clearInterval(e)},[k]),(0,n.useEffect)(()=>{I({withLoading:!0})},[I]),(0,n.useEffect)(()=>{let e=setInterval(()=>I({withLoading:!1}),3e3);return()=>clearInterval(e)},[I]);let C=(0,r.jsx)(E,{sessions:h,selectedId:m,onSelect:e=>w({sessionId:e}),loading:y}),P=m?j?(0,r.jsx)("div",{className:"flex h-full items-center justify-center text-gray-400",children:"加载中…"}):f?(0,r.jsx)(S,{data:{sessionId:f.sessionId,eventCount:f.eventCount,sourceUrl:null!==(o=null===(e=h.find(e=>e.sessionId===m))||void 0===e?void 0:e.sourceUrl)&&void 0!==o?o:null,startedAt:(null===(t=f.events[0])||void 0===t?void 0:t.createdAt)||"",lastEventAt:(null===(s=f.events[f.events.length-1])||void 0===s?void 0:s.createdAt)||"",events:f.events}}):(0,r.jsx)("div",{className:"flex h-full items-center justify-center text-red-500",children:"未找到该录制会话"}):(0,r.jsx)("div",{className:"flex h-full items-center justify-center text-gray-400",children:"请在左侧选择一个录制会话查看详情"});return(0,r.jsx)(d.m,{filterBar:(0,r.jsx)(i.f,{value:v,onChange:e=>w({filters:e})}),listPanel:C,detailPanel:P})}function R(){return(0,r.jsx)(n.Suspense,{fallback:(0,r.jsx)("div",{className:"p-6 text-gray-500",children:"加载中…"}),children:(0,r.jsx)(P,{})})}},7202:function(e,t,s){"use strict";s.d(t,{f:function(){return l}});var r=s(2835),n=s(635);function l(e){let{value:t,showStatus:s,statusOptions:l,onChange:a}=e,[i,d]=(0,n.useState)(t);return(0,n.useEffect)(()=>{d(t)},[t.q,t.status,t.from,t.to]),(0,n.useEffect)(()=>{let e=setTimeout(()=>{(i.q!==t.q||i.status!==t.status||i.from!==t.from||i.to!==t.to)&&a(i)},300);return()=>clearTimeout(e)},[i.q,i.status,i.from,i.to]),(0,r.jsxs)("div",{className:"space-y-2 border-b border-gray-200 bg-white p-3",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsxs)("div",{className:"relative flex-1",children:[(0,r.jsx)("input",{type:"text",value:i.q,onChange:e=>d(t=>({...t,q:e.target.value})),placeholder:"搜索关键词...",className:"w-full rounded border border-gray-300 px-2 py-1.5 pr-8 text-sm outline-none focus:border-blue-500"}),(0,r.jsx)("button",{type:"button",onClick:()=>a({q:"",status:"",from:"",to:""}),title:"重置筛选",className:"absolute right-1 top-1/2 -translate-y-1/2 rounded p-1 text-gray-400 hover:bg-gray-100 hover:text-gray-600 disabled:opacity-30",disabled:!i.q&&!i.status&&!i.from&&!i.to,children:(0,r.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-4 w-4",viewBox:"0 0 20 20",fill:"currentColor",children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"})})})]}),s?(0,r.jsxs)("select",{value:i.status,onChange:e=>d(t=>({...t,status:e.target.value})),className:"rounded border border-gray-300 px-2 py-1.5 text-sm outline-none focus:border-blue-500",children:[(0,r.jsx)("option",{value:"",children:"全部状态"}),(l||[]).map(e=>(0,r.jsx)("option",{value:e.value,children:e.label},e.value))]}):null]}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("input",{type:"date",value:i.from,onChange:e=>d(t=>({...t,from:e.target.value})),className:"rounded border border-gray-300 px-2 py-1.5 text-sm outline-none focus:border-blue-500"}),(0,r.jsx)("span",{className:"text-sm text-gray-400",children:"-"}),(0,r.jsx)("input",{type:"date",value:i.to,onChange:e=>d(t=>({...t,to:e.target.value})),className:"rounded border border-gray-300 px-2 py-1.5 text-sm outline-none focus:border-blue-500"})]})]})}},4518:function(e,t,s){"use strict";s.d(t,{m:function(){return n}});var r=s(2835);function n(e){let{filterBar:t,listPanel:s,detailPanel:n}=e;return(0,r.jsxs)("div",{className:"flex h-full",children:[(0,r.jsxs)("div",{className:"flex w-80 flex-col border-r border-gray-200 bg-white",children:[t,s]}),(0,r.jsx)("div",{className:"flex-1 overflow-auto bg-gray-50 p-6",children:n})]})}},3718:function(e,t,s){"use strict";s.d(t,{L:function(){return n}});var r=s(2835);function n(e){let{items:t,selectedId:s,onSelect:n,loading:l,emptyText:a="暂无数据"}=e;return(0,r.jsx)("div",{className:"flex-1 overflow-auto",children:l?(0,r.jsx)("div",{className:"p-4 text-center text-sm text-gray-400",children:"加载中…"}):0===t.length?(0,r.jsx)("div",{className:"p-4 text-center text-sm text-gray-400",children:a}):(0,r.jsx)("ul",{className:"divide-y divide-gray-100",children:t.map(e=>(0,r.jsx)("li",{role:"button",tabIndex:0,onClick:()=>n(e.id),onKeyDown:t=>{("Enter"===t.key||" "===t.key)&&n(e.id)},className:"cursor-pointer px-3 py-2 text-sm transition-colors ".concat(s===e.id?"bg-blue-50":"hover:bg-gray-50"),children:e.content},e.id))})})}},8448:function(e,t,s){"use strict";function r(e){return e?("string"==typeof e?new Date(e):e).toLocaleString("zh-CN",{hour12:!1}):""}s.d(t,{d3:function(){return r}})},4431:function(e,t,s){"use strict";s.d(t,{O:function(){return n},r:function(){return a}});var r=s(529);function n(){return r.env.HUNTER_MATE_SERVER_URL||""}let l=n();async function a(e,t){try{let s=await fetch("".concat(l).concat(e),{cache:"no-store",...t});if(!s.ok)return null;return await s.json()}catch(e){return null}}}},function(e){e.O(0,[400,935,744],function(){return e(e.s=1428)}),_N_E=e.O()}]);
|
package/dist/web/dist/_next/static/chunks/app/snapshots/[id]/agent-prompt/page-6996f7f221b1a7eb.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="4001f009-b34d-42e6-9c7c-a94bdb0c91de",e._sentryDebugIdIdentifier="sentry-dbid-4001f009-b34d-42e6-9c7c-a94bdb0c91de")}catch(e){}}(),(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[325],{1765:function(e,n,t){Promise.resolve().then(t.bind(t,4492))},7473:function(e,n,t){"use strict";var r=t(8321);t.o(r,"useParams")&&t.d(n,{useParams:function(){return r.useParams}}),t.o(r,"usePathname")&&t.d(n,{usePathname:function(){return r.usePathname}}),t.o(r,"useRouter")&&t.d(n,{useRouter:function(){return r.useRouter}}),t.o(r,"useSearchParams")&&t.d(n,{useSearchParams:function(){return r.useSearchParams}})},4492:function(e,n,t){"use strict";t.d(n,{default:function(){return c}});var r=t(2835),a=t(635),s=t(7473),u=t(4431);function c(){let e=(0,s.useParams)().id,[n,t]=(0,a.useState)(null),[c,o]=(0,a.useState)(!1),[i,d]=(0,a.useState)(!1),[l,f]=(0,a.useState)(null);async function h(){o(!0),f(null);try{let n=await fetch("".concat((0,u.O)(),"/parsing/snapshots/").concat(e,"/agent-prompt"));if(!n.ok)throw Error("HTTP ".concat(n.status));let r=await n.json();t(r.prompt)}catch(e){f(e.message)}finally{o(!1)}}async function p(){n&&(await navigator.clipboard.writeText(n),d(!0),setTimeout(()=>d(!1),2e3))}return(0,r.jsxs)("div",{style:{padding:24,maxWidth:800,margin:"0 auto"},children:[(0,r.jsx)("h1",{children:"Agent 解析 Prompt"}),(0,r.jsxs)("p",{children:["Snapshot ID: ",e]}),(0,r.jsx)("button",{onClick:h,disabled:c,children:c?"加载中...":"生成 Prompt"}),l&&(0,r.jsx)("div",{style:{color:"red",marginTop:12},children:l}),n&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("button",{onClick:p,style:{marginLeft:12},children:i?"已复制 ✅":"复制到剪贴板"}),(0,r.jsx)("pre",{style:{marginTop:16,padding:16,background:"#f5f5f5",borderRadius:8,whiteSpace:"pre-wrap",wordBreak:"break-word"},children:n})]})]})}},4431:function(e,n,t){"use strict";t.d(n,{O:function(){return a},r:function(){return u}});var r=t(529);function a(){return r.env.HUNTER_MATE_SERVER_URL||""}let s=a();async function u(e,n){try{let t=await fetch("".concat(s).concat(e),{cache:"no-store",...n});if(!t.ok)return null;return await t.json()}catch(e){return null}}}},function(e){e.O(0,[400,935,744],function(){return e(e.s=1765)}),_N_E=e.O()}]);
|