@reconcrap/boss-recommend-mcp 2.0.11 → 2.0.13

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.
@@ -24,6 +24,29 @@ export const RECRUIT_NO_DATA_SELECTORS = Object.freeze([
24
24
  '[class*="empty"]'
25
25
  ]);
26
26
 
27
+ export const RECRUIT_BOTTOM_MARKER_SELECTORS = Object.freeze([
28
+ ".finished-wrap",
29
+ ".load-tips",
30
+ ".tip-nodata",
31
+ ".empty-tip",
32
+ ".empty-text",
33
+ ".no-data",
34
+ "[class*=\"finished\"]",
35
+ "[class*=\"load-tips\"]",
36
+ "[class*=\"empty\"]"
37
+ ]);
38
+
39
+ export const RECRUIT_BOTTOM_REFRESH_SELECTORS = Object.freeze([
40
+ ".finished-wrap .btn-refresh",
41
+ ".finished-wrap .btn",
42
+ ".no-data-refresh .btn-refresh",
43
+ ".no-data-refresh .btn",
44
+ "[class*=\"refresh\"]",
45
+ "[ka*=\"refresh\"]",
46
+ "button",
47
+ "a"
48
+ ]);
49
+
27
50
  export const RECRUIT_SEARCH_SELECTORS = Object.freeze({
28
51
  keywordInput: [
29
52
  "input.search-input",
@@ -19,6 +19,7 @@ import {
19
19
  import {
20
20
  compactInfiniteListState,
21
21
  createInfiniteListState,
22
+ detectInfiniteListBottomMarker,
22
23
  getNextInfiniteListCandidate,
23
24
  markInfiniteListCandidateProcessed,
24
25
  resetInfiniteListForRefreshRound
@@ -49,6 +50,10 @@ import {
49
50
  } from "./search.js";
50
51
  import { refreshRecruitSearchAtEnd } from "./refresh.js";
51
52
  import { getRecruitRoots } from "./roots.js";
53
+ import {
54
+ RECRUIT_BOTTOM_MARKER_SELECTORS,
55
+ RECRUIT_BOTTOM_REFRESH_SELECTORS
56
+ } from "./constants.js";
52
57
 
53
58
  function compactScreening(screening) {
54
59
  return {
@@ -144,9 +149,9 @@ export async function runRecruitWorkflow({
144
149
  imageWheelDeltaY = 650,
145
150
  cvAcquisitionMode = "unknown",
146
151
  listMaxScrolls = 20,
147
- listStableSignatureLimit = 2,
152
+ listStableSignatureLimit = 5,
148
153
  listWheelDeltaY = 850,
149
- listSettleMs = 1200,
154
+ listSettleMs = 2200,
150
155
  listFallbackPoint = null,
151
156
  refreshOnEnd = true,
152
157
  maxRefreshRounds = 2,
@@ -298,6 +303,13 @@ export async function runRecruitWorkflow({
298
303
  visible_index: visibleIndex,
299
304
  search_params: normalizedSearchParams
300
305
  }
306
+ }),
307
+ detectBottomMarker: async ({ scrollAttempt = 0, signature = {} } = {}) => detectInfiniteListBottomMarker(client, {
308
+ rootNodeId: rootState?.iframe?.documentNodeId,
309
+ markerSelectors: RECRUIT_BOTTOM_MARKER_SELECTORS,
310
+ refreshSelectors: RECRUIT_BOTTOM_REFRESH_SELECTORS,
311
+ textScanSelectors: scrollAttempt > 0 || (signature?.stable_signature_count || 0) >= 2 ? undefined : [],
312
+ maxTextScanNodes: 500
301
313
  })
302
314
  }));
303
315
  if (!nextCandidateResult.ok) {
@@ -438,6 +450,9 @@ export async function runRecruitWorkflow({
438
450
  maxScreenshots: maxImagePages,
439
451
  wheelDeltaY: imageWheelDeltaY,
440
452
  settleMs: 350,
453
+ scrollMethod: "dom-anchor-fallback-input",
454
+ stepTimeoutMs: 45000,
455
+ totalTimeoutMs: 90000,
441
456
  duplicateStopCount: 1,
442
457
  skipDuplicateScreenshots: true,
443
458
  composeForLlm: true,
@@ -625,9 +640,9 @@ export function createRecruitRunService({
625
640
  imageWheelDeltaY = 650,
626
641
  cvAcquisitionMode = "unknown",
627
642
  listMaxScrolls = 20,
628
- listStableSignatureLimit = 2,
643
+ listStableSignatureLimit = 5,
629
644
  listWheelDeltaY = 850,
630
- listSettleMs = 1200,
645
+ listSettleMs = 2200,
631
646
  listFallbackPoint = null,
632
647
  refreshOnEnd = true,
633
648
  maxRefreshRounds = 2,