@reconcrap/boss-recommend-mcp 2.1.23 → 2.1.25

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.
Files changed (67) hide show
  1. package/README.md +5 -0
  2. package/bin/boss-recommend-mcp.js +4 -4
  3. package/package.json +6 -1
  4. package/scripts/install-macos.sh +280 -280
  5. package/scripts/postinstall.cjs +44 -44
  6. package/skills/boss-chat/README.md +43 -42
  7. package/skills/boss-chat/SKILL.md +107 -106
  8. package/skills/boss-recommend-pipeline/README.md +13 -13
  9. package/skills/boss-recommend-pipeline/SKILL.md +47 -47
  10. package/skills/boss-recruit-pipeline/README.md +19 -19
  11. package/skills/boss-recruit-pipeline/SKILL.md +89 -89
  12. package/src/chat-mcp.js +301 -127
  13. package/src/chat-runtime-config.js +7 -5
  14. package/src/core/boss-cards/index.js +199 -199
  15. package/src/core/browser/index.js +302 -145
  16. package/src/core/capture/index.js +2930 -1201
  17. package/src/core/cv-acquisition/index.js +512 -238
  18. package/src/core/cv-capture-target/index.js +513 -299
  19. package/src/core/greet-quota/index.js +71 -71
  20. package/src/core/infinite-list/index.js +31 -31
  21. package/src/core/reporting/legacy-csv.js +12 -12
  22. package/src/core/run/detached-launcher.js +305 -0
  23. package/src/core/run/index.js +109 -55
  24. package/src/core/run/timing.js +33 -33
  25. package/src/core/run/windows-detached-worker.ps1 +106 -0
  26. package/src/core/screening/index.js +2400 -2135
  27. package/src/core/self-heal/index.js +989 -973
  28. package/src/core/self-heal/viewport.js +1505 -564
  29. package/src/detached-worker.js +99 -99
  30. package/src/domains/chat/action-journal.js +536 -0
  31. package/src/domains/chat/cards.js +137 -137
  32. package/src/domains/chat/constants.js +9 -9
  33. package/src/domains/chat/detail.js +1684 -401
  34. package/src/domains/chat/index.js +8 -7
  35. package/src/domains/chat/jobs.js +620 -620
  36. package/src/domains/chat/page-guard.js +157 -122
  37. package/src/domains/chat/roots.js +56 -56
  38. package/src/domains/chat/run-service.js +1801 -760
  39. package/src/domains/common/account-rights-panel.js +314 -314
  40. package/src/domains/common/recovery-settle.js +159 -159
  41. package/src/domains/recommend/actions.js +1219 -472
  42. package/src/domains/recommend/cards.js +243 -243
  43. package/src/domains/recommend/colleague-contact.js +1079 -333
  44. package/src/domains/recommend/constants.js +92 -92
  45. package/src/domains/recommend/detail.js +4037 -136
  46. package/src/domains/recommend/filters.js +608 -590
  47. package/src/domains/recommend/index.js +9 -9
  48. package/src/domains/recommend/jobs.js +571 -542
  49. package/src/domains/recommend/location.js +754 -707
  50. package/src/domains/recommend/refresh.js +677 -392
  51. package/src/domains/recommend/roots.js +80 -80
  52. package/src/domains/recommend/run-service.js +4048 -1447
  53. package/src/domains/recommend/scopes.js +246 -246
  54. package/src/domains/recruit/actions.js +277 -277
  55. package/src/domains/recruit/cards.js +74 -74
  56. package/src/domains/recruit/constants.js +236 -236
  57. package/src/domains/recruit/detail.js +588 -588
  58. package/src/domains/recruit/index.js +9 -9
  59. package/src/domains/recruit/instruction-parser.js +866 -866
  60. package/src/domains/recruit/refresh.js +45 -45
  61. package/src/domains/recruit/roots.js +68 -68
  62. package/src/domains/recruit/run-service.js +1817 -1620
  63. package/src/domains/recruit/search.js +3229 -3229
  64. package/src/index.js +16 -1
  65. package/src/parser.js +1296 -1296
  66. package/src/recommend-mcp.js +1061 -450
  67. package/src/recommend-scheduler.js +75 -75
@@ -11,17 +11,17 @@ import {
11
11
  startRecommendPipelineRunTool
12
12
  } from "./recommend-mcp.js";
13
13
 
14
- const SCHEDULE_WORKER_FLAG = "--schedule-worker";
15
- const SCHEDULE_ID_FLAG = "--schedule-id";
16
- const TERMINAL_SCHEDULE_STATES = new Set(["completed", "failed", "canceled"]);
17
- const TERMINAL_RUN_STATES = new Set(["completed", "failed", "canceled"]);
18
- const SCHEDULE_FORBIDDEN_DEBUG_FIELDS = Object.freeze([
19
- "debug_test_mode",
20
- "allow_debug_test_mode",
21
- "debug_force_list_end_after_processed",
22
- "debug_force_context_recovery_after_processed",
23
- "debug_force_cdp_reconnect_after_processed"
24
- ]);
14
+ const SCHEDULE_WORKER_FLAG = "--schedule-worker";
15
+ const SCHEDULE_ID_FLAG = "--schedule-id";
16
+ const TERMINAL_SCHEDULE_STATES = new Set(["completed", "failed", "canceled"]);
17
+ const TERMINAL_RUN_STATES = new Set(["completed", "failed", "canceled"]);
18
+ const SCHEDULE_FORBIDDEN_DEBUG_FIELDS = Object.freeze([
19
+ "debug_test_mode",
20
+ "allow_debug_test_mode",
21
+ "debug_force_list_end_after_processed",
22
+ "debug_force_context_recovery_after_processed",
23
+ "debug_force_cdp_reconnect_after_processed"
24
+ ]);
25
25
 
26
26
  let spawnProcessImpl = spawn;
27
27
 
@@ -29,58 +29,58 @@ function normalizeText(value) {
29
29
  return String(value || "").replace(/\s+/g, " ").trim();
30
30
  }
31
31
 
32
- function clonePlain(value, fallback = null) {
32
+ function clonePlain(value, fallback = null) {
33
33
  try {
34
34
  return value === undefined ? fallback : JSON.parse(JSON.stringify(value));
35
35
  } catch {
36
36
  return fallback;
37
37
  }
38
- }
39
-
40
- function hasOwn(source, key) {
41
- return Boolean(source && Object.prototype.hasOwnProperty.call(source, key));
42
- }
43
-
44
- function collectScheduledRecommendDebugOptions(args = {}) {
45
- const options = [];
46
- for (const field of SCHEDULE_FORBIDDEN_DEBUG_FIELDS) {
47
- if (hasOwn(args, field)) options.push(field);
48
- }
49
-
50
- const screeningMode = normalizeText(args.screening_mode || args.screeningMode).toLowerCase();
51
- if (["deterministic", "local", "local_scorer"].includes(screeningMode)) {
52
- options.push(`screening_mode=${screeningMode}`);
53
- }
54
- if (args.use_llm === false || args.useLlm === false) {
55
- options.push("use_llm=false");
56
- }
57
- if (args.allow_card_only_screening === true || args.allowCardOnlyScreening === true) {
58
- options.push("allow_card_only_screening");
59
- }
60
- const detailLimit = Number.parseInt(String(args.detail_limit ?? args.detailLimit ?? ""), 10);
61
- if (Number.isFinite(detailLimit) && detailLimit === 0) options.push("detail_limit=0");
62
- if (args.no_filter === true || args.noFilter === true) options.push("no_filter");
63
- if (args.filter_enabled === false || args.filterEnabled === false) options.push("filter_enabled=false");
64
- if (args.dry_run_post_action === true || args.dryRunPostAction === true) {
65
- options.push("dry_run_post_action");
66
- }
67
- if (args.dry_run === true || args.dryRun === true) options.push("dry_run");
68
-
69
- const requestedPostAction = normalizeText(
70
- args.overrides?.post_action
71
- ?? args.confirmation?.post_action_value
72
- ?? args.post_action
73
- ?? args.postAction
74
- ).toLowerCase();
75
- if (
76
- requestedPostAction
77
- && requestedPostAction !== "none"
78
- && (args.execute_post_action === false || args.executePostAction === false)
79
- ) {
80
- options.push("execute_post_action=false");
81
- }
82
- return Array.from(new Set(options));
83
- }
38
+ }
39
+
40
+ function hasOwn(source, key) {
41
+ return Boolean(source && Object.prototype.hasOwnProperty.call(source, key));
42
+ }
43
+
44
+ function collectScheduledRecommendDebugOptions(args = {}) {
45
+ const options = [];
46
+ for (const field of SCHEDULE_FORBIDDEN_DEBUG_FIELDS) {
47
+ if (hasOwn(args, field)) options.push(field);
48
+ }
49
+
50
+ const screeningMode = normalizeText(args.screening_mode || args.screeningMode).toLowerCase();
51
+ if (["deterministic", "local", "local_scorer"].includes(screeningMode)) {
52
+ options.push(`screening_mode=${screeningMode}`);
53
+ }
54
+ if (args.use_llm === false || args.useLlm === false) {
55
+ options.push("use_llm=false");
56
+ }
57
+ if (args.allow_card_only_screening === true || args.allowCardOnlyScreening === true) {
58
+ options.push("allow_card_only_screening");
59
+ }
60
+ const detailLimit = Number.parseInt(String(args.detail_limit ?? args.detailLimit ?? ""), 10);
61
+ if (Number.isFinite(detailLimit) && detailLimit === 0) options.push("detail_limit=0");
62
+ if (args.no_filter === true || args.noFilter === true) options.push("no_filter");
63
+ if (args.filter_enabled === false || args.filterEnabled === false) options.push("filter_enabled=false");
64
+ if (args.dry_run_post_action === true || args.dryRunPostAction === true) {
65
+ options.push("dry_run_post_action");
66
+ }
67
+ if (args.dry_run === true || args.dryRun === true) options.push("dry_run");
68
+
69
+ const requestedPostAction = normalizeText(
70
+ args.overrides?.post_action
71
+ ?? args.confirmation?.post_action_value
72
+ ?? args.post_action
73
+ ?? args.postAction
74
+ ).toLowerCase();
75
+ if (
76
+ requestedPostAction
77
+ && requestedPostAction !== "none"
78
+ && (args.execute_post_action === false || args.executePostAction === false)
79
+ ) {
80
+ options.push("execute_post_action=false");
81
+ }
82
+ return Array.from(new Set(options));
83
+ }
84
84
 
85
85
  function nowIso() {
86
86
  return new Date().toISOString();
@@ -281,23 +281,23 @@ function launchScheduleWorker(scheduleId) {
281
281
  };
282
282
  }
283
283
 
284
- export async function scheduleRecommendPipelineRunTool({ workspaceRoot = "", args = {} } = {}) {
285
- const runArgs = stripScheduleArgs(args);
286
- const forbiddenDebugOptions = collectScheduledRecommendDebugOptions(runArgs);
287
- if (forbiddenDebugOptions.length) {
288
- return {
289
- status: "FAILED",
290
- schedule_created: false,
291
- cron_ready: false,
292
- error: {
293
- code: "RECOMMEND_SCHEDULE_DEBUG_OPTIONS_FORBIDDEN",
294
- message: `Recommend schedules cannot contain diagnostic-only run options: ${forbiddenDebugOptions.join(", ")}`,
295
- retryable: false
296
- },
297
- forbidden_debug_options: forbiddenDebugOptions
298
- };
299
- }
300
- const prepared = prepareRecommendPipelineRunTool({ workspaceRoot, args: runArgs });
284
+ export async function scheduleRecommendPipelineRunTool({ workspaceRoot = "", args = {} } = {}) {
285
+ const runArgs = stripScheduleArgs(args);
286
+ const forbiddenDebugOptions = collectScheduledRecommendDebugOptions(runArgs);
287
+ if (forbiddenDebugOptions.length) {
288
+ return {
289
+ status: "FAILED",
290
+ schedule_created: false,
291
+ cron_ready: false,
292
+ error: {
293
+ code: "RECOMMEND_SCHEDULE_DEBUG_OPTIONS_FORBIDDEN",
294
+ message: `Recommend schedules cannot contain diagnostic-only run options: ${forbiddenDebugOptions.join(", ")}`,
295
+ retryable: false
296
+ },
297
+ forbidden_debug_options: forbiddenDebugOptions
298
+ };
299
+ }
300
+ const prepared = prepareRecommendPipelineRunTool({ workspaceRoot, args: runArgs });
301
301
  if (prepared.status !== "READY" || prepared.cron_ready !== true) {
302
302
  return {
303
303
  ...prepared,