job-pro 0.8.1 → 0.8.2
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/dist/index.js +111 -67
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -51,81 +51,72 @@ import * as webank from "./webank.js";
|
|
|
51
51
|
import * as horizonrobotics from "./horizonrobotics.js";
|
|
52
52
|
import * as cambricon from "./cambricon.js";
|
|
53
53
|
import { memoryList, memoryGet, memorySet, memoryEvent, memoryClear, } from "./memory.js";
|
|
54
|
-
const VERSION = "0.8.
|
|
54
|
+
const VERSION = "0.8.2";
|
|
55
|
+
const COMPANIES = [
|
|
56
|
+
{ key: "tencent", family: "Bespoke", source: "join.qq.com", label: "Tencent / 腾讯" },
|
|
57
|
+
{ key: "bytedance", family: "Bespoke", source: "jobs.bytedance.com", label: "ByteDance / 字节跳动" },
|
|
58
|
+
{ key: "alibaba", family: "Bespoke", source: "campus-talent.alibaba.com", label: "Alibaba / 阿里巴巴" },
|
|
59
|
+
{ key: "meituan", family: "Bespoke", source: "zhaopin.meituan.com", label: "Meituan / 美团" },
|
|
60
|
+
{ key: "xiaohongshu", family: "Bespoke", source: "job.xiaohongshu.com", label: "Xiaohongshu / 小红书" },
|
|
61
|
+
{ key: "jd", family: "Bespoke", source: "campus.jd.com", label: "JD / 京东" },
|
|
62
|
+
{ key: "kuaishou", family: "Bespoke", source: "campus.kuaishou.cn", label: "Kuaishou / 快手" },
|
|
63
|
+
{ key: "baidu", family: "Bespoke", source: "talent.baidu.com", label: "Baidu / 百度" },
|
|
64
|
+
{ key: "netease", family: "Bespoke", source: "hr.163.com", label: "NetEase / 网易" },
|
|
65
|
+
{ key: "didi", family: "Bespoke", source: "talent.didiglobal.com", label: "Didi / 滴滴" },
|
|
66
|
+
{ key: "bilibili", family: "Bespoke", source: "jobs.bilibili.com", label: "Bilibili / 哔哩哔哩" },
|
|
67
|
+
{ key: "pdd", family: "Bespoke", source: "careers.pinduoduo.com", label: "PDD / 拼多多" },
|
|
68
|
+
{ key: "huawei", family: "Bespoke", source: "career.huawei.com", label: "Huawei / 华为" },
|
|
69
|
+
{ key: "weibo", family: "Bespoke", source: "career.sina.com.cn", label: "Weibo / 微博" },
|
|
70
|
+
{ key: "mihoyo", family: "Bespoke", source: "ats.openout.mihoyo.com", label: "miHoYo / 米哈游" },
|
|
71
|
+
{ key: "pingan", family: "Bespoke", source: "campus.pingan.com", label: "Ping An / 平安" },
|
|
72
|
+
{ key: "trip", family: "Bespoke", source: "careers.ctrip.com", label: "Trip.com / 携程" },
|
|
73
|
+
{ key: "unitree", family: "Bespoke", source: "www.unitree.com", label: "Unitree / 宇树科技" },
|
|
74
|
+
{ key: "byd", family: "Bespoke", source: "job.byd.com", label: "BYD / 比亚迪" },
|
|
75
|
+
{ key: "antgroup", family: "Bespoke", source: "hrcareersweb.antgroup.com", label: "Ant Group / 蚂蚁集团" },
|
|
76
|
+
{ key: "liauto", family: "Bespoke", source: "www.lixiang.com", label: "Li Auto / 理想汽车" },
|
|
77
|
+
{ key: "sf", family: "Bespoke", source: "campus.sf-express.com", label: "SF Express / 顺丰" },
|
|
78
|
+
{ key: "oppo", family: "Bespoke", source: "careers.oppo.com", label: "OPPO" },
|
|
79
|
+
{ key: "xiaomi", family: "Feishu", source: "xiaomi.jobs.f.mioffice.cn", label: "Xiaomi / 小米" },
|
|
80
|
+
{ key: "nio", family: "Feishu", source: "nio.jobs.feishu.cn", label: "NIO / 蔚来" },
|
|
81
|
+
{ key: "minimax", family: "Feishu", source: "vrfi1sk8a0.jobs.feishu.cn", label: "MiniMax" },
|
|
82
|
+
{ key: "moonshot", family: "Moka", source: "app.mokahr.com/moonshot", label: "Moonshot / 月之暗面" },
|
|
83
|
+
{ key: "zhipu", family: "Feishu", source: "zhipu-ai.jobs.feishu.cn", label: "Zhipu / 智谱AI" },
|
|
84
|
+
{ key: "iqiyi", family: "Feishu", source: "careers.iqiyi.com", label: "iQIYI / 爱奇艺" },
|
|
85
|
+
{ key: "agibot", family: "Feishu", source: "agirobot.jobs.feishu.cn", label: "Agibot / 智元机器人" },
|
|
86
|
+
{ key: "lilith", family: "Feishu", source: "lilithgames.jobs.feishu.cn", label: "Lilith Games / 莉莉丝 — needs local Chrome" },
|
|
87
|
+
{ key: "zerooneai", family: "Feishu", source: "01ai.jobs.feishu.cn", label: "01.AI / 零一万物" },
|
|
88
|
+
{ key: "baichuan", family: "Feishu", source: "cq6qe6bvfr6.jobs.feishu.cn", label: "Baichuan / 百川智能" },
|
|
89
|
+
{ key: "sensetime", family: "Beisen Wecruit", source: "hr.sensetime.com", label: "SenseTime / 商汤" },
|
|
90
|
+
{ key: "horizonrobotics", family: "Beisen Wecruit", source: "wecruit.hotjob.cn", label: "Horizon Robotics / 地平线" },
|
|
91
|
+
{ key: "vivo", family: "Beisen iTalent", source: "vivo.zhiye.com", label: "vivo" },
|
|
92
|
+
{ key: "iflytek", family: "Beisen iTalent", source: "iflytek.zhiye.com", label: "iFlytek / 科大讯飞" },
|
|
93
|
+
{ key: "megvii", family: "Moka", source: "app.mokahr.com/megviihr", label: "Megvii / 旷视" },
|
|
94
|
+
{ key: "deepseek", family: "Moka", source: "app.mokahr.com/high-flyer", label: "DeepSeek / 深度求索" },
|
|
95
|
+
{ key: "galaxyuniversal", family: "Moka", source: "app.mokahr.com/yinhetongyong", label: "Galaxy Universal / 银河通用" },
|
|
96
|
+
{ key: "stepfun", family: "Moka", source: "app.mokahr.com/step", label: "StepFun / 阶跃星辰" },
|
|
97
|
+
{ key: "cambricon", family: "Moka", source: "app.mokahr.com/cambricon", label: "Cambricon / 寒武纪" },
|
|
98
|
+
{ key: "geely", family: "Moka", source: "app.mokahr.com/geely", label: "Geely / 吉利" },
|
|
99
|
+
{ key: "xpeng", family: "Greenhouse / Lever (intl arm)", source: "boards.greenhouse.io/xpengmotors", label: "XPeng / 小鹏汽车 — US AI" },
|
|
100
|
+
{ key: "weride", family: "Greenhouse / Lever (intl arm)", source: "jobs.lever.co/weride", label: "WeRide / 文远知行 — US / 广州" },
|
|
101
|
+
{ key: "hoyoverse", family: "Greenhouse / Lever (intl arm)", source: "boards.greenhouse.io/hoyoverse", label: "HoYoverse / 米哈游国际" },
|
|
102
|
+
{ key: "hikvision", family: "Liepin (third-party)", source: "api-c.liepin.com", label: "Hikvision / 海康威视" },
|
|
103
|
+
{ key: "cicc", family: "Liepin (third-party)", source: "api-c.liepin.com", label: "CICC / 中金" },
|
|
104
|
+
{ key: "cainiao", family: "Liepin (third-party)", source: "api-c.liepin.com", label: "Cainiao / 菜鸟" },
|
|
105
|
+
{ key: "webank", family: "Liepin (third-party)", source: "api-c.liepin.com", label: "WeBank / 微众银行" },
|
|
106
|
+
];
|
|
55
107
|
const HELP = `
|
|
56
108
|
job-pro — query Chinese big-tech campus recruiting from your terminal
|
|
57
109
|
(job.ha7ch.com)
|
|
58
110
|
|
|
59
111
|
USAGE
|
|
60
112
|
job-pro <company> <verb> [options]
|
|
113
|
+
job-pro list [--compact] list all 50 companies + source family
|
|
61
114
|
job-pro --version
|
|
62
115
|
job-pro help
|
|
63
116
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
tencent join.qq.com (Tencent / 腾讯)
|
|
68
|
-
bytedance jobs.bytedance.com (ByteDance / 字节跳动)
|
|
69
|
-
alibaba campus-talent.alibaba.com (Alibaba / 阿里巴巴)
|
|
70
|
-
meituan zhaopin.meituan.com (Meituan / 美团)
|
|
71
|
-
xiaohongshu job.xiaohongshu.com (Xiaohongshu / 小红书)
|
|
72
|
-
jd campus.jd.com (JD / 京东)
|
|
73
|
-
kuaishou campus.kuaishou.cn (Kuaishou / 快手)
|
|
74
|
-
baidu talent.baidu.com (Baidu / 百度)
|
|
75
|
-
netease hr.163.com (NetEase / 网易)
|
|
76
|
-
didi talent.didiglobal.com (Didi / 滴滴)
|
|
77
|
-
bilibili jobs.bilibili.com (Bilibili / 哔哩哔哩)
|
|
78
|
-
pdd careers.pinduoduo.com (PDD / 拼多多)
|
|
79
|
-
huawei career.huawei.com (Huawei / 华为)
|
|
80
|
-
weibo career.sina.com.cn (Weibo / 微博)
|
|
81
|
-
mihoyo ats.openout.mihoyo.com (miHoYo / 米哈游)
|
|
82
|
-
pingan campus.pingan.com (Ping An / 平安)
|
|
83
|
-
trip careers.ctrip.com (Trip.com / 携程)
|
|
84
|
-
unitree www.unitree.com (Unitree / 宇树科技)
|
|
85
|
-
byd job.byd.com (BYD / 比亚迪)
|
|
86
|
-
antgroup hrcareersweb.antgroup.com (Ant Group / 蚂蚁集团)
|
|
87
|
-
liauto www.lixiang.com (Li Auto / 理想汽车)
|
|
88
|
-
zerooneai 01ai.jobs.feishu.cn (01.AI / 零一万物)
|
|
89
|
-
baichuan cq6qe6bvfr6.jobs.feishu.cn (Baichuan / 百川智能)
|
|
90
|
-
sf campus.sf-express.com (SF Express / 顺丰)
|
|
91
|
-
oppo careers.oppo.com (OPPO)
|
|
92
|
-
|
|
93
|
-
Feishu Recruiting (ATSX)
|
|
94
|
-
xiaomi xiaomi.jobs.f.mioffice.cn (Xiaomi / 小米)
|
|
95
|
-
nio nio.jobs.feishu.cn (NIO / 蔚来)
|
|
96
|
-
minimax vrfi1sk8a0.jobs.feishu.cn (MiniMax)
|
|
97
|
-
moonshot moonshot.jobs.feishu.cn (Moonshot / 月之暗面)
|
|
98
|
-
zhipu zhipu-ai.jobs.feishu.cn (Zhipu / 智谱AI)
|
|
99
|
-
iqiyi careers.iqiyi.com (iQIYI / 爱奇艺)
|
|
100
|
-
agibot agirobot.jobs.feishu.cn (Agibot / 智元机器人)
|
|
101
|
-
lilith lilithgames.jobs.feishu.cn (Lilith Games / 莉莉丝 — needs local Chrome)
|
|
102
|
-
|
|
103
|
-
Beisen Wecruit
|
|
104
|
-
sensetime hr.sensetime.com (SenseTime / 商汤)
|
|
105
|
-
horizonrobotics wecruit.hotjob.cn (Horizon Robotics / 地平线)
|
|
106
|
-
|
|
107
|
-
Beisen iTalent (zhiye)
|
|
108
|
-
vivo vivo.zhiye.com (vivo)
|
|
109
|
-
iflytek iflytek.zhiye.com (iFlytek / 科大讯飞)
|
|
110
|
-
|
|
111
|
-
Moka (app.mokahr.com)
|
|
112
|
-
megvii app.mokahr.com/megviihr (Megvii / 旷视)
|
|
113
|
-
deepseek app.mokahr.com/high-flyer (DeepSeek / 深度求索)
|
|
114
|
-
galaxyuniversal app.mokahr.com/yinhetongyong (Galaxy Universal / 银河通用)
|
|
115
|
-
stepfun app.mokahr.com/step (StepFun / 阶跃星辰)
|
|
116
|
-
cambricon app.mokahr.com/cambricon (Cambricon / 寒武纪)
|
|
117
|
-
geely app.mokahr.com/geely (Geely / 吉利)
|
|
118
|
-
|
|
119
|
-
Greenhouse / Lever (international arm only)
|
|
120
|
-
xpeng boards.greenhouse.io/xpengmotors (XPeng / 小鹏汽车 — US AI)
|
|
121
|
-
weride jobs.lever.co/weride (WeRide / 文远知行 — US / 广州)
|
|
122
|
-
hoyoverse boards.greenhouse.io/hoyoverse (HoYoverse / 米哈游国际)
|
|
123
|
-
|
|
124
|
-
Third-party (Liepin aggregator — no canonical public feed exists)
|
|
125
|
-
hikvision api-c.liepin.com (Hikvision / 海康威视)
|
|
126
|
-
cicc api-c.liepin.com (CICC / 中金)
|
|
127
|
-
cainiao api-c.liepin.com (Cainiao / 菜鸟)
|
|
128
|
-
webank api-c.liepin.com (WeBank / 微众银行)
|
|
117
|
+
50 companies, all live. Run \`job-pro list\` for the full table grouped
|
|
118
|
+
by ATS family (Bespoke / Feishu / Beisen Wecruit / Beisen iTalent / Moka
|
|
119
|
+
/ Greenhouse-Lever / Liepin). Coverage summary at job.ha7ch.com.
|
|
129
120
|
|
|
130
121
|
VERBS (same surface for every company)
|
|
131
122
|
search <kw> search openings (free text)
|
|
@@ -409,6 +400,53 @@ async function runCompany(adapter, company, rawArgs) {
|
|
|
409
400
|
}
|
|
410
401
|
die(`unknown verb: ${verb}. Try \`job-pro help\`.`);
|
|
411
402
|
}
|
|
403
|
+
function printCompanyList(compact) {
|
|
404
|
+
// Validate the directory still matches the ADAPTERS map. If a company
|
|
405
|
+
// appears in only one place, treat it as a bug.
|
|
406
|
+
const adapterKeys = new Set(Object.keys(ADAPTERS));
|
|
407
|
+
const dirKeys = new Set(COMPANIES.map((c) => c.key));
|
|
408
|
+
const missingInDir = [...adapterKeys].filter((k) => !dirKeys.has(k));
|
|
409
|
+
const missingInAdapters = [...dirKeys].filter((k) => !adapterKeys.has(k));
|
|
410
|
+
if (missingInDir.length || missingInAdapters.length) {
|
|
411
|
+
console.error("INTERNAL: COMPANIES directory diverged from ADAPTERS map.\n" +
|
|
412
|
+
(missingInDir.length ? ` missing from directory: ${missingInDir.join(", ")}\n` : "") +
|
|
413
|
+
(missingInAdapters.length ? ` missing from adapters: ${missingInAdapters.join(", ")}\n` : ""));
|
|
414
|
+
}
|
|
415
|
+
if (compact) {
|
|
416
|
+
// Machine-readable: emit a JSON array of { key, family, source, label }.
|
|
417
|
+
console.log(JSON.stringify(COMPANIES));
|
|
418
|
+
return;
|
|
419
|
+
}
|
|
420
|
+
// Human-readable: group by family, fixed-width left column.
|
|
421
|
+
const byFamily = new Map();
|
|
422
|
+
for (const c of COMPANIES) {
|
|
423
|
+
if (!byFamily.has(c.family))
|
|
424
|
+
byFamily.set(c.family, []);
|
|
425
|
+
byFamily.get(c.family).push(c);
|
|
426
|
+
}
|
|
427
|
+
const order = [
|
|
428
|
+
"Bespoke",
|
|
429
|
+
"Feishu",
|
|
430
|
+
"Beisen Wecruit",
|
|
431
|
+
"Beisen iTalent",
|
|
432
|
+
"Moka",
|
|
433
|
+
"Greenhouse / Lever (intl arm)",
|
|
434
|
+
"Liepin (third-party)",
|
|
435
|
+
];
|
|
436
|
+
const keyWidth = Math.max(...COMPANIES.map((c) => c.key.length));
|
|
437
|
+
const srcWidth = Math.max(...COMPANIES.map((c) => c.source.length));
|
|
438
|
+
console.log(`job-pro — 50 companies, all live. ATS-family breakdown:`);
|
|
439
|
+
for (const family of order) {
|
|
440
|
+
const entries = byFamily.get(family);
|
|
441
|
+
if (!entries)
|
|
442
|
+
continue;
|
|
443
|
+
console.log(`\n${family} (${entries.length})`);
|
|
444
|
+
for (const c of entries) {
|
|
445
|
+
console.log(` ${c.key.padEnd(keyWidth)} ${c.source.padEnd(srcWidth)} ${c.label}`);
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
console.log(`\nTotal: ${COMPANIES.length}. Run \`job-pro <key> search "…"\` against any of them.`);
|
|
449
|
+
}
|
|
412
450
|
async function main() {
|
|
413
451
|
const args = process.argv.slice(2);
|
|
414
452
|
const cmd = args[0];
|
|
@@ -420,12 +458,18 @@ async function main() {
|
|
|
420
458
|
console.log(VERSION);
|
|
421
459
|
return;
|
|
422
460
|
}
|
|
461
|
+
if (cmd === "list" || cmd === "companies") {
|
|
462
|
+
const compact = args.includes("--compact");
|
|
463
|
+
printCompanyList(compact);
|
|
464
|
+
return;
|
|
465
|
+
}
|
|
423
466
|
const adapter = ADAPTERS[cmd];
|
|
424
467
|
if (adapter) {
|
|
425
468
|
await runCompany(adapter, cmd, args.slice(1));
|
|
426
469
|
return;
|
|
427
470
|
}
|
|
428
|
-
die(`unknown company: ${cmd}.
|
|
471
|
+
die(`unknown company: ${cmd}. Try \`job-pro list\` for the full list, ` +
|
|
472
|
+
`or \`job-pro help\` for usage.`);
|
|
429
473
|
}
|
|
430
474
|
main().catch((err) => {
|
|
431
475
|
console.error("Error:", err instanceof Error ? err.message : err);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "job-pro",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.2",
|
|
4
4
|
"description": "Query Chinese big-tech campus recruiting from your terminal. 50 companies, all 50 live. 46 via each company's own API; the 4 with no public canonical feed (Hikvision, CICC, Cainiao, WeBank) surfaced via Liepin as a clearly-labeled third-party fallback. No signup, no token, no server.",
|
|
5
5
|
"homepage": "https://job.ha7ch.com",
|
|
6
6
|
"repository": "https://github.com/HA7CH/job-pro",
|