@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.
- package/README.md +53 -33
- package/package.json +61 -9
- package/skills/boss-recommend-pipeline/SKILL.md +4 -0
- package/src/chat-mcp.js +1333 -0
- package/src/chat-runtime-config.js +559 -0
- package/src/cli.js +1095 -196
- package/src/core/browser/index.js +378 -0
- package/src/core/capture/index.js +298 -0
- package/src/core/cv-acquisition/index.js +219 -0
- package/src/core/greet-quota/index.js +54 -0
- package/src/core/infinite-list/index.js +459 -0
- package/src/core/reporting/legacy-csv.js +332 -0
- package/src/core/run/index.js +286 -0
- package/src/core/screening/index.js +1166 -0
- package/src/core/self-heal/index.js +848 -0
- package/src/domains/chat/cards.js +129 -0
- package/src/domains/chat/constants.js +183 -0
- package/src/domains/chat/detail.js +1369 -0
- package/src/domains/chat/index.js +7 -0
- package/src/domains/chat/jobs.js +334 -0
- package/src/domains/chat/page-guard.js +88 -0
- package/src/domains/chat/roots.js +56 -0
- package/src/domains/chat/run-service.js +1101 -0
- package/src/domains/recommend/actions.js +457 -0
- package/src/domains/recommend/cards.js +228 -0
- package/src/domains/recommend/constants.js +141 -0
- package/src/domains/recommend/detail.js +341 -0
- package/src/domains/recommend/filters.js +581 -0
- package/src/domains/recommend/index.js +10 -0
- package/src/domains/recommend/jobs.js +232 -0
- package/src/domains/recommend/refresh.js +204 -0
- package/src/domains/recommend/roots.js +78 -0
- package/src/domains/recommend/run-service.js +903 -0
- package/src/domains/recommend/scopes.js +245 -0
- package/src/domains/recruit/actions.js +277 -0
- package/src/domains/recruit/cards.js +67 -0
- package/src/domains/recruit/constants.js +130 -0
- package/src/domains/recruit/detail.js +414 -0
- package/src/domains/recruit/index.js +9 -0
- package/src/domains/recruit/instruction-parser.js +451 -0
- package/src/domains/recruit/refresh.js +40 -0
- package/src/domains/recruit/roots.js +68 -0
- package/src/domains/recruit/run-service.js +580 -0
- package/src/domains/recruit/search.js +1149 -0
- package/src/index.js +578 -419
- package/src/recommend-mcp.js +1257 -0
- package/src/recruit-mcp.js +1035 -0
- package/src/adapters.js +0 -3079
- package/src/boss-chat.js +0 -1037
- package/src/pipeline.js +0 -2249
- package/src/recommend-healing-config.js +0 -131
- package/src/recommend-healing-rules.json +0 -261
- package/src/self-heal.js +0 -2237
- package/src/test-adapters-runtime.js +0 -628
- package/src/test-boss-chat.js +0 -3196
- package/src/test-index-async.js +0 -498
- package/src/test-parser.js +0 -742
- package/src/test-pipeline.js +0 -2703
- package/src/test-run-state.js +0 -152
- package/src/test-self-heal.js +0 -224
- package/vendor/boss-chat-cli/README.md +0 -134
- package/vendor/boss-chat-cli/package.json +0 -53
- package/vendor/boss-chat-cli/src/app.js +0 -1501
- package/vendor/boss-chat-cli/src/browser/chat-page.js +0 -3562
- package/vendor/boss-chat-cli/src/cli.js +0 -1713
- package/vendor/boss-chat-cli/src/mcp/server.js +0 -149
- package/vendor/boss-chat-cli/src/mcp/tool-runtime.js +0 -193
- package/vendor/boss-chat-cli/src/runtime/async-run-state.js +0 -260
- package/vendor/boss-chat-cli/src/runtime/interaction.js +0 -102
- package/vendor/boss-chat-cli/src/runtime/run-control.js +0 -102
- package/vendor/boss-chat-cli/src/services/chrome-client.js +0 -107
- package/vendor/boss-chat-cli/src/services/llm.js +0 -1292
- package/vendor/boss-chat-cli/src/services/llm.test.js +0 -326
- package/vendor/boss-chat-cli/src/services/profile-store.js +0 -173
- package/vendor/boss-chat-cli/src/services/report-store.js +0 -317
- package/vendor/boss-chat-cli/src/services/resume-capture.js +0 -469
- package/vendor/boss-chat-cli/src/services/resume-network.js +0 -727
- package/vendor/boss-chat-cli/src/services/state-store.js +0 -90
- package/vendor/boss-chat-cli/src/utils/customer-key.js +0 -82
- package/vendor/boss-recommend-screen-cli/boss-recommend-screen-cli.cjs +0 -6927
- package/vendor/boss-recommend-screen-cli/scripts/capture-full-resume-canvas.cjs +0 -817
- package/vendor/boss-recommend-screen-cli/scripts/stitch_resume_chunks.py +0 -141
- package/vendor/boss-recommend-screen-cli/test-recoverable-resume-failures.cjs +0 -2294
- package/vendor/boss-recommend-search-cli/src/cli.js +0 -1698
- 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
|
-
}
|