@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.
- package/README.md +5 -0
- package/bin/boss-recommend-mcp.js +4 -4
- package/package.json +6 -1
- package/scripts/install-macos.sh +280 -280
- package/scripts/postinstall.cjs +44 -44
- package/skills/boss-chat/README.md +43 -42
- package/skills/boss-chat/SKILL.md +107 -106
- package/skills/boss-recommend-pipeline/README.md +13 -13
- package/skills/boss-recommend-pipeline/SKILL.md +47 -47
- package/skills/boss-recruit-pipeline/README.md +19 -19
- package/skills/boss-recruit-pipeline/SKILL.md +89 -89
- package/src/chat-mcp.js +301 -127
- package/src/chat-runtime-config.js +7 -5
- package/src/core/boss-cards/index.js +199 -199
- package/src/core/browser/index.js +302 -145
- package/src/core/capture/index.js +2930 -1201
- package/src/core/cv-acquisition/index.js +512 -238
- package/src/core/cv-capture-target/index.js +513 -299
- package/src/core/greet-quota/index.js +71 -71
- package/src/core/infinite-list/index.js +31 -31
- package/src/core/reporting/legacy-csv.js +12 -12
- package/src/core/run/detached-launcher.js +305 -0
- package/src/core/run/index.js +109 -55
- package/src/core/run/timing.js +33 -33
- package/src/core/run/windows-detached-worker.ps1 +106 -0
- package/src/core/screening/index.js +2400 -2135
- package/src/core/self-heal/index.js +989 -973
- package/src/core/self-heal/viewport.js +1505 -564
- package/src/detached-worker.js +99 -99
- package/src/domains/chat/action-journal.js +536 -0
- package/src/domains/chat/cards.js +137 -137
- package/src/domains/chat/constants.js +9 -9
- package/src/domains/chat/detail.js +1684 -401
- package/src/domains/chat/index.js +8 -7
- package/src/domains/chat/jobs.js +620 -620
- package/src/domains/chat/page-guard.js +157 -122
- package/src/domains/chat/roots.js +56 -56
- package/src/domains/chat/run-service.js +1801 -760
- package/src/domains/common/account-rights-panel.js +314 -314
- package/src/domains/common/recovery-settle.js +159 -159
- package/src/domains/recommend/actions.js +1219 -472
- package/src/domains/recommend/cards.js +243 -243
- package/src/domains/recommend/colleague-contact.js +1079 -333
- package/src/domains/recommend/constants.js +92 -92
- package/src/domains/recommend/detail.js +4037 -136
- package/src/domains/recommend/filters.js +608 -590
- package/src/domains/recommend/index.js +9 -9
- package/src/domains/recommend/jobs.js +571 -542
- package/src/domains/recommend/location.js +754 -707
- package/src/domains/recommend/refresh.js +677 -392
- package/src/domains/recommend/roots.js +80 -80
- package/src/domains/recommend/run-service.js +4048 -1447
- package/src/domains/recommend/scopes.js +246 -246
- package/src/domains/recruit/actions.js +277 -277
- package/src/domains/recruit/cards.js +74 -74
- package/src/domains/recruit/constants.js +236 -236
- package/src/domains/recruit/detail.js +588 -588
- package/src/domains/recruit/index.js +9 -9
- package/src/domains/recruit/instruction-parser.js +866 -866
- package/src/domains/recruit/refresh.js +45 -45
- package/src/domains/recruit/roots.js +68 -68
- package/src/domains/recruit/run-service.js +1817 -1620
- package/src/domains/recruit/search.js +3229 -3229
- package/src/index.js +16 -1
- package/src/parser.js +1296 -1296
- package/src/recommend-mcp.js +1061 -450
- package/src/recommend-scheduler.js +75 -75
package/src/detached-worker.js
CHANGED
|
@@ -1,99 +1,99 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
markBossChatDetachedWorkerFailed,
|
|
4
|
-
runBossChatDetachedWorker
|
|
5
|
-
} from "./chat-mcp.js";
|
|
6
|
-
import {
|
|
7
|
-
markBossRecruitDetachedWorkerFailed,
|
|
8
|
-
runBossRecruitDetachedWorker
|
|
9
|
-
} from "./recruit-mcp.js";
|
|
10
|
-
|
|
11
|
-
function normalizeText(value) {
|
|
12
|
-
return String(value || "").replace(/\s+/g, " ").trim();
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
function parseArgs(argv = []) {
|
|
16
|
-
const args = {};
|
|
17
|
-
for (let index = 0; index < argv.length; index += 1) {
|
|
18
|
-
const item = argv[index];
|
|
19
|
-
if (item === "--domain") {
|
|
20
|
-
args.domain = normalizeText(argv[index + 1]).toLowerCase();
|
|
21
|
-
index += 1;
|
|
22
|
-
} else if (item === "--run-id") {
|
|
23
|
-
args.runId = normalizeText(argv[index + 1]);
|
|
24
|
-
index += 1;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
return args;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
function markFailed(domain, runId, error, options = {}) {
|
|
31
|
-
if (domain === "chat") {
|
|
32
|
-
return markBossChatDetachedWorkerFailed(runId, error, options);
|
|
33
|
-
}
|
|
34
|
-
if (domain === "recruit") {
|
|
35
|
-
return markBossRecruitDetachedWorkerFailed(runId, error, options);
|
|
36
|
-
}
|
|
37
|
-
return null;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
function installFailureHandlers(domain, runId) {
|
|
41
|
-
let handled = false;
|
|
42
|
-
const failOnce = (error, options = {}) => {
|
|
43
|
-
if (handled) return;
|
|
44
|
-
handled = true;
|
|
45
|
-
try {
|
|
46
|
-
markFailed(domain, runId, error, options);
|
|
47
|
-
} catch (markError) {
|
|
48
|
-
console.error("[boss-recommend-mcp] failed to persist detached worker failure", markError);
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
process.on("uncaughtException", (error) => {
|
|
53
|
-
console.error("[boss-recommend-mcp] detached worker uncaught exception", error);
|
|
54
|
-
failOnce(error, { code: "DETACHED_WORKER_UNCAUGHT_EXCEPTION" });
|
|
55
|
-
process.exit(1);
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
process.on("unhandledRejection", (reason) => {
|
|
59
|
-
console.error("[boss-recommend-mcp] detached worker unhandled rejection", reason);
|
|
60
|
-
const error = reason instanceof Error ? reason : new Error(normalizeText(reason) || "Unhandled promise rejection");
|
|
61
|
-
failOnce(error, { code: "DETACHED_WORKER_UNHANDLED_REJECTION" });
|
|
62
|
-
process.exit(1);
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
for (const signal of ["SIGTERM", "SIGINT", "SIGHUP"]) {
|
|
66
|
-
process.on(signal, () => {
|
|
67
|
-
const error = new Error(`detached ${domain} worker received ${signal}`);
|
|
68
|
-
console.error("[boss-recommend-mcp] detached worker received signal", signal);
|
|
69
|
-
failOnce(error, { code: "DETACHED_WORKER_SIGNAL" });
|
|
70
|
-
const signalExitCodes = { SIGHUP: 129, SIGINT: 130, SIGTERM: 143 };
|
|
71
|
-
process.exit(signalExitCodes[signal] || 1);
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
async function main() {
|
|
77
|
-
const options = parseArgs(process.argv.slice(2));
|
|
78
|
-
if (!options.domain || !options.runId) {
|
|
79
|
-
console.error("[boss-recommend-mcp] detached worker requires --domain and --run-id");
|
|
80
|
-
process.exitCode = 1;
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
installFailureHandlers(options.domain, options.runId);
|
|
84
|
-
const result = options.domain === "chat"
|
|
85
|
-
? await runBossChatDetachedWorker({ runId: options.runId })
|
|
86
|
-
: options.domain === "recruit"
|
|
87
|
-
? await runBossRecruitDetachedWorker({ runId: options.runId })
|
|
88
|
-
: { ok: false, error: `Unsupported detached worker domain: ${options.domain}` };
|
|
89
|
-
if (!result?.ok) {
|
|
90
|
-
process.exitCode = 1;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
await main().catch((error) => {
|
|
95
|
-
const options = parseArgs(process.argv.slice(2));
|
|
96
|
-
console.error("[boss-recommend-mcp] detached worker failed", error);
|
|
97
|
-
markFailed(options.domain, options.runId, error, { code: "DETACHED_WORKER_FAILED" });
|
|
98
|
-
process.exitCode = 1;
|
|
99
|
-
});
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
markBossChatDetachedWorkerFailed,
|
|
4
|
+
runBossChatDetachedWorker
|
|
5
|
+
} from "./chat-mcp.js";
|
|
6
|
+
import {
|
|
7
|
+
markBossRecruitDetachedWorkerFailed,
|
|
8
|
+
runBossRecruitDetachedWorker
|
|
9
|
+
} from "./recruit-mcp.js";
|
|
10
|
+
|
|
11
|
+
function normalizeText(value) {
|
|
12
|
+
return String(value || "").replace(/\s+/g, " ").trim();
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function parseArgs(argv = []) {
|
|
16
|
+
const args = {};
|
|
17
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
18
|
+
const item = argv[index];
|
|
19
|
+
if (item === "--domain") {
|
|
20
|
+
args.domain = normalizeText(argv[index + 1]).toLowerCase();
|
|
21
|
+
index += 1;
|
|
22
|
+
} else if (item === "--run-id") {
|
|
23
|
+
args.runId = normalizeText(argv[index + 1]);
|
|
24
|
+
index += 1;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return args;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function markFailed(domain, runId, error, options = {}) {
|
|
31
|
+
if (domain === "chat") {
|
|
32
|
+
return markBossChatDetachedWorkerFailed(runId, error, options);
|
|
33
|
+
}
|
|
34
|
+
if (domain === "recruit") {
|
|
35
|
+
return markBossRecruitDetachedWorkerFailed(runId, error, options);
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function installFailureHandlers(domain, runId) {
|
|
41
|
+
let handled = false;
|
|
42
|
+
const failOnce = (error, options = {}) => {
|
|
43
|
+
if (handled) return;
|
|
44
|
+
handled = true;
|
|
45
|
+
try {
|
|
46
|
+
markFailed(domain, runId, error, options);
|
|
47
|
+
} catch (markError) {
|
|
48
|
+
console.error("[boss-recommend-mcp] failed to persist detached worker failure", markError);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
process.on("uncaughtException", (error) => {
|
|
53
|
+
console.error("[boss-recommend-mcp] detached worker uncaught exception", error);
|
|
54
|
+
failOnce(error, { code: "DETACHED_WORKER_UNCAUGHT_EXCEPTION" });
|
|
55
|
+
process.exit(1);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
process.on("unhandledRejection", (reason) => {
|
|
59
|
+
console.error("[boss-recommend-mcp] detached worker unhandled rejection", reason);
|
|
60
|
+
const error = reason instanceof Error ? reason : new Error(normalizeText(reason) || "Unhandled promise rejection");
|
|
61
|
+
failOnce(error, { code: "DETACHED_WORKER_UNHANDLED_REJECTION" });
|
|
62
|
+
process.exit(1);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
for (const signal of ["SIGTERM", "SIGINT", "SIGHUP"]) {
|
|
66
|
+
process.on(signal, () => {
|
|
67
|
+
const error = new Error(`detached ${domain} worker received ${signal}`);
|
|
68
|
+
console.error("[boss-recommend-mcp] detached worker received signal", signal);
|
|
69
|
+
failOnce(error, { code: "DETACHED_WORKER_SIGNAL" });
|
|
70
|
+
const signalExitCodes = { SIGHUP: 129, SIGINT: 130, SIGTERM: 143 };
|
|
71
|
+
process.exit(signalExitCodes[signal] || 1);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
async function main() {
|
|
77
|
+
const options = parseArgs(process.argv.slice(2));
|
|
78
|
+
if (!options.domain || !options.runId) {
|
|
79
|
+
console.error("[boss-recommend-mcp] detached worker requires --domain and --run-id");
|
|
80
|
+
process.exitCode = 1;
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
installFailureHandlers(options.domain, options.runId);
|
|
84
|
+
const result = options.domain === "chat"
|
|
85
|
+
? await runBossChatDetachedWorker({ runId: options.runId })
|
|
86
|
+
: options.domain === "recruit"
|
|
87
|
+
? await runBossRecruitDetachedWorker({ runId: options.runId })
|
|
88
|
+
: { ok: false, error: `Unsupported detached worker domain: ${options.domain}` };
|
|
89
|
+
if (!result?.ok) {
|
|
90
|
+
process.exitCode = 1;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
await main().catch((error) => {
|
|
95
|
+
const options = parseArgs(process.argv.slice(2));
|
|
96
|
+
console.error("[boss-recommend-mcp] detached worker failed", error);
|
|
97
|
+
markFailed(options.domain, options.runId, error, { code: "DETACHED_WORKER_FAILED" });
|
|
98
|
+
process.exitCode = 1;
|
|
99
|
+
});
|