@reconcrap/boss-recommend-mcp 1.3.38 → 2.0.0

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 (85) hide show
  1. package/README.md +53 -33
  2. package/package.json +61 -9
  3. package/skills/boss-recommend-pipeline/SKILL.md +4 -0
  4. package/src/chat-mcp.js +1333 -0
  5. package/src/chat-runtime-config.js +559 -0
  6. package/src/cli.js +1095 -196
  7. package/src/core/browser/index.js +378 -0
  8. package/src/core/capture/index.js +298 -0
  9. package/src/core/cv-acquisition/index.js +219 -0
  10. package/src/core/greet-quota/index.js +54 -0
  11. package/src/core/infinite-list/index.js +459 -0
  12. package/src/core/reporting/legacy-csv.js +332 -0
  13. package/src/core/run/index.js +286 -0
  14. package/src/core/screening/index.js +1166 -0
  15. package/src/core/self-heal/index.js +848 -0
  16. package/src/domains/chat/cards.js +129 -0
  17. package/src/domains/chat/constants.js +183 -0
  18. package/src/domains/chat/detail.js +1369 -0
  19. package/src/domains/chat/index.js +7 -0
  20. package/src/domains/chat/jobs.js +334 -0
  21. package/src/domains/chat/page-guard.js +88 -0
  22. package/src/domains/chat/roots.js +56 -0
  23. package/src/domains/chat/run-service.js +1101 -0
  24. package/src/domains/recommend/actions.js +457 -0
  25. package/src/domains/recommend/cards.js +228 -0
  26. package/src/domains/recommend/constants.js +141 -0
  27. package/src/domains/recommend/detail.js +341 -0
  28. package/src/domains/recommend/filters.js +581 -0
  29. package/src/domains/recommend/index.js +10 -0
  30. package/src/domains/recommend/jobs.js +232 -0
  31. package/src/domains/recommend/refresh.js +204 -0
  32. package/src/domains/recommend/roots.js +78 -0
  33. package/src/domains/recommend/run-service.js +903 -0
  34. package/src/domains/recommend/scopes.js +245 -0
  35. package/src/domains/recruit/actions.js +277 -0
  36. package/src/domains/recruit/cards.js +67 -0
  37. package/src/domains/recruit/constants.js +130 -0
  38. package/src/domains/recruit/detail.js +414 -0
  39. package/src/domains/recruit/index.js +9 -0
  40. package/src/domains/recruit/instruction-parser.js +451 -0
  41. package/src/domains/recruit/refresh.js +40 -0
  42. package/src/domains/recruit/roots.js +68 -0
  43. package/src/domains/recruit/run-service.js +580 -0
  44. package/src/domains/recruit/search.js +1149 -0
  45. package/src/index.js +578 -419
  46. package/src/recommend-mcp.js +1257 -0
  47. package/src/recruit-mcp.js +1035 -0
  48. package/src/adapters.js +0 -3079
  49. package/src/boss-chat.js +0 -1037
  50. package/src/pipeline.js +0 -2249
  51. package/src/recommend-healing-config.js +0 -131
  52. package/src/recommend-healing-rules.json +0 -261
  53. package/src/self-heal.js +0 -2237
  54. package/src/test-adapters-runtime.js +0 -628
  55. package/src/test-boss-chat.js +0 -3196
  56. package/src/test-index-async.js +0 -498
  57. package/src/test-parser.js +0 -742
  58. package/src/test-pipeline.js +0 -2703
  59. package/src/test-run-state.js +0 -152
  60. package/src/test-self-heal.js +0 -224
  61. package/vendor/boss-chat-cli/README.md +0 -134
  62. package/vendor/boss-chat-cli/package.json +0 -53
  63. package/vendor/boss-chat-cli/src/app.js +0 -1501
  64. package/vendor/boss-chat-cli/src/browser/chat-page.js +0 -3562
  65. package/vendor/boss-chat-cli/src/cli.js +0 -1713
  66. package/vendor/boss-chat-cli/src/mcp/server.js +0 -149
  67. package/vendor/boss-chat-cli/src/mcp/tool-runtime.js +0 -193
  68. package/vendor/boss-chat-cli/src/runtime/async-run-state.js +0 -260
  69. package/vendor/boss-chat-cli/src/runtime/interaction.js +0 -102
  70. package/vendor/boss-chat-cli/src/runtime/run-control.js +0 -102
  71. package/vendor/boss-chat-cli/src/services/chrome-client.js +0 -107
  72. package/vendor/boss-chat-cli/src/services/llm.js +0 -1292
  73. package/vendor/boss-chat-cli/src/services/llm.test.js +0 -326
  74. package/vendor/boss-chat-cli/src/services/profile-store.js +0 -173
  75. package/vendor/boss-chat-cli/src/services/report-store.js +0 -317
  76. package/vendor/boss-chat-cli/src/services/resume-capture.js +0 -469
  77. package/vendor/boss-chat-cli/src/services/resume-network.js +0 -727
  78. package/vendor/boss-chat-cli/src/services/state-store.js +0 -90
  79. package/vendor/boss-chat-cli/src/utils/customer-key.js +0 -82
  80. package/vendor/boss-recommend-screen-cli/boss-recommend-screen-cli.cjs +0 -6927
  81. package/vendor/boss-recommend-screen-cli/scripts/capture-full-resume-canvas.cjs +0 -817
  82. package/vendor/boss-recommend-screen-cli/scripts/stitch_resume_chunks.py +0 -141
  83. package/vendor/boss-recommend-screen-cli/test-recoverable-resume-failures.cjs +0 -2294
  84. package/vendor/boss-recommend-search-cli/src/cli.js +0 -1698
  85. package/vendor/boss-recommend-search-cli/src/test-job-selection.js +0 -211
@@ -1,90 +0,0 @@
1
- function createInitialState(profileName) {
2
- return {
3
- version: 1,
4
- profileName,
5
- updatedAt: null,
6
- customers: {},
7
- aliases: {},
8
- };
9
- }
10
-
11
- export class StateStore {
12
- constructor(_baseDir, profileName, _options = {}) {
13
- this.profileName = profileName;
14
- this.state = createInitialState(profileName);
15
- }
16
-
17
- async load() {
18
- // Session-only dedup: each run starts with an empty state and does not persist cross-run history.
19
- this.state = createInitialState(this.profileName);
20
- return this.state;
21
- }
22
-
23
- has(customerKey) {
24
- return Boolean(this.resolveKey(customerKey));
25
- }
26
-
27
- hasAny(customerKeys = []) {
28
- return customerKeys.some((customerKey) => this.has(customerKey));
29
- }
30
-
31
- get(customerKey) {
32
- const resolved = this.resolveKey(customerKey);
33
- return resolved ? this.state.customers[resolved] || null : null;
34
- }
35
-
36
- keys() {
37
- return new Set(Object.keys(this.state.customers));
38
- }
39
-
40
- resolveKey(customerKey) {
41
- if (!customerKey) {
42
- return null;
43
- }
44
- if (this.state.customers[customerKey]) {
45
- return customerKey;
46
- }
47
- return this.state.aliases[customerKey] || null;
48
- }
49
-
50
- async record(customerKey, entry, aliases = []) {
51
- this.state.customers[customerKey] = {
52
- ...entry,
53
- customerKey,
54
- aliases,
55
- updatedAt: new Date().toISOString(),
56
- };
57
- for (const alias of aliases) {
58
- if (alias && alias !== customerKey) {
59
- this.state.aliases[alias] = customerKey;
60
- }
61
- }
62
- this.state.updatedAt = new Date().toISOString();
63
- }
64
-
65
- async persistState() {}
66
- }
67
-
68
- export class NoopStateStore {
69
- async load() {
70
- return { version: 1, customers: {} };
71
- }
72
-
73
- has() {
74
- return false;
75
- }
76
-
77
- hasAny() {
78
- return false;
79
- }
80
-
81
- get() {
82
- return null;
83
- }
84
-
85
- keys() {
86
- return new Set();
87
- }
88
-
89
- async record() {}
90
- }
@@ -1,82 +0,0 @@
1
- import { createHash } from 'node:crypto';
2
-
3
- function normalized(value) {
4
- return String(value || '').replace(/\s+/g, ' ').trim();
5
- }
6
-
7
- function shortHash(parts) {
8
- return createHash('sha1').update(parts.filter(Boolean).join('|')).digest('hex').slice(0, 16);
9
- }
10
-
11
- function collectExplicitIds(customer = {}) {
12
- return [
13
- customer.customerId,
14
- customer.domKey,
15
- customer.listItemKey,
16
- customer.reactKey,
17
- customer.dc,
18
- customer.id,
19
- customer.uid,
20
- customer.geekId,
21
- customer.cardId,
22
- ]
23
- .map(normalized)
24
- .filter(Boolean);
25
- }
26
-
27
- export function createCustomerKey(customer = {}) {
28
- const [explicitId] = collectExplicitIds(customer);
29
-
30
- if (explicitId) {
31
- return `id:${explicitId}`;
32
- }
33
-
34
- const name = normalized(customer.name);
35
- const company = normalized(customer.company);
36
- const educationText = normalized(customer.educationText);
37
- const textSnippet = normalized(customer.textSnippet);
38
-
39
- const stableSeed = [name, company, educationText].filter(Boolean);
40
- const seed = stableSeed.length > 0 ? stableSeed.join('|') : textSnippet;
41
-
42
- if (!seed) {
43
- throw new Error('Cannot create customer key without id or identifying text');
44
- }
45
-
46
- const digest = createHash('sha1').update(seed).digest('hex').slice(0, 16);
47
- return `hash:${digest}`;
48
- }
49
-
50
- export function createCustomerAliases(customer = {}) {
51
- const aliases = new Set();
52
- const name = normalized(customer.name);
53
- const company = normalized(customer.company);
54
- const educationText = normalized(customer.educationText);
55
- const textSnippet = normalized(customer.textSnippet).slice(0, 120);
56
-
57
- for (const explicitId of collectExplicitIds(customer)) {
58
- aliases.add(`id:${explicitId}`);
59
- }
60
-
61
- try {
62
- aliases.add(createCustomerKey(customer));
63
- } catch {}
64
-
65
- if (name && company) {
66
- aliases.add(`nc:${shortHash([name, company])}`);
67
- }
68
- if (name && educationText) {
69
- aliases.add(`ne:${shortHash([name, educationText])}`);
70
- }
71
- if (company && educationText) {
72
- aliases.add(`ce:${shortHash([company, educationText])}`);
73
- }
74
- if (name && company && educationText) {
75
- aliases.add(`nce:${shortHash([name, company, educationText])}`);
76
- }
77
- if (!company && name && textSnippet) {
78
- aliases.add(`ns:${shortHash([name, textSnippet])}`);
79
- }
80
-
81
- return Array.from(aliases);
82
- }