job-pro 0.8.0 → 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 -53
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -51,67 +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
|
-
alibaba campus-talent.alibaba.com (Alibaba / 阿里巴巴)
|
|
68
|
-
meituan zhaopin.meituan.com (Meituan / 美团)
|
|
69
|
-
xiaohongshu job.xiaohongshu.com (Xiaohongshu / 小红书)
|
|
70
|
-
jd campus.jd.com (JD / 京东)
|
|
71
|
-
kuaishou campus.kuaishou.cn (Kuaishou / 快手)
|
|
72
|
-
xiaomi xiaomi.jobs.f.mioffice.cn (Xiaomi / 小米 — Feishu ATSX)
|
|
73
|
-
baidu talent.baidu.com (Baidu / 百度)
|
|
74
|
-
netease hr.163.com (NetEase / 网易)
|
|
75
|
-
didi talent.didiglobal.com (Didi / 滴滴 — mixed campus+social)
|
|
76
|
-
bilibili jobs.bilibili.com (Bilibili / 哔哩哔哩)
|
|
77
|
-
pdd careers.pinduoduo.com (PDD / 拼多多 — notices only, jobs need auth)
|
|
78
|
-
nio nio.jobs.feishu.cn (NIO / 蔚来 — Feishu ATSX)
|
|
79
|
-
minimax vrfi1sk8a0.jobs.feishu.cn (MiniMax — Feishu ATSX)
|
|
80
|
-
huawei career.huawei.com (Huawei / 华为)
|
|
81
|
-
weibo career.sina.com.cn (Weibo / 微博 — auth-gated, limited)
|
|
82
|
-
mihoyo campus.mihoyo.com (miHoYo / 米哈游 — SPA, limited)
|
|
83
|
-
pingan campus.pingan.com (Ping An / 平安 — unified group)
|
|
84
|
-
sensetime hr.sensetime.com (SenseTime / 商汤 — auth-gated, limited)
|
|
85
|
-
trip careers.ctrip.com (Trip.com / 携程)
|
|
86
|
-
unitree www.unitree.com (Unitree / 宇树科技 — robotics)
|
|
87
|
-
byd job.byd.com (BYD / 比亚迪 — JWT-gated, limited)
|
|
88
|
-
antgroup talent.antgroup.com (Ant Group / 蚂蚁集团 — OAuth-gated, limited)
|
|
89
|
-
liauto www.lixiang.com (Li Auto / 理想汽车)
|
|
90
|
-
moonshot moonshot.jobs.feishu.cn (Moonshot / 月之暗面 — Feishu, 0 jobs)
|
|
91
|
-
zhipu zhipu-ai.jobs.feishu.cn (Zhipu / 智谱AI — Feishu, social)
|
|
92
|
-
hikvision hr.hikvision.com (Hikvision / 海康威视 — geo-blocked, limited)
|
|
93
|
-
iqiyi careers.iqiyi.com (iQIYI / 爱奇艺 — Feishu ATSX)
|
|
94
|
-
megvii joinus.megvii.com (Megvii / 旷视 — Moka-gated, limited)
|
|
95
|
-
lilith jobs.lilith.com (Lilith Games / 莉莉丝 — DNS-blocked, limited)
|
|
96
|
-
agibot agirobot.jobs.feishu.cn (Agibot / 智元机器人 — Feishu, 661 jobs)
|
|
97
|
-
deepseek www.deepseek.com (DeepSeek / 深度求索 — Moka-gated, limited)
|
|
98
|
-
zerooneai www.01.ai (01.AI / 零一万物 — limited)
|
|
99
|
-
galaxyuniversal galbot.com (Galaxy Universal / 银河通用 — Moka-gated, limited)
|
|
100
|
-
stepfun stepfun.com (StepFun / 阶跃星辰 — Moka-gated, limited)
|
|
101
|
-
cicc cicc.com (CICC / 中金 — geo-blocked, limited)
|
|
102
|
-
baichuan www.baichuan-ai.com (Baichuan / 百川智能 — no public API, limited)
|
|
103
|
-
xpeng boards.greenhouse.io (XPeng / 小鹏汽车 — Greenhouse, US AI center)
|
|
104
|
-
weride jobs.lever.co/weride (WeRide / 文远知行 — Lever)
|
|
105
|
-
hoyoverse boards.greenhouse.io (HoYoverse / 米哈游国际 — Greenhouse)
|
|
106
|
-
iflytek campus.iflytek.com (iFlytek / 科大讯飞 — iTalent-gated, limited)
|
|
107
|
-
oppo careers.oppo.com (OPPO — bespoke 500, limited)
|
|
108
|
-
vivo hr.vivo.com (vivo — BPM-gated, limited)
|
|
109
|
-
sf campus.sf-express.com (SF Express / 顺丰 — captcha-gated, limited)
|
|
110
|
-
cainiao cainiao.com (Cainiao / 菜鸟 — DNS-blocked, limited)
|
|
111
|
-
geely geely.com (Geely / 吉利汽车 — DNS-blocked, limited)
|
|
112
|
-
webank webank.com (WeBank / 微众银行 — WeChat-only, limited)
|
|
113
|
-
horizonrobotics app.mokahr.com (Horizon Robotics / 地平线 — Moka-gated, limited)
|
|
114
|
-
cambricon cambricon.com (Cambricon / 寒武纪 — DNS-blocked, limited)
|
|
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.
|
|
115
120
|
|
|
116
121
|
VERBS (same surface for every company)
|
|
117
122
|
search <kw> search openings (free text)
|
|
@@ -395,6 +400,53 @@ async function runCompany(adapter, company, rawArgs) {
|
|
|
395
400
|
}
|
|
396
401
|
die(`unknown verb: ${verb}. Try \`job-pro help\`.`);
|
|
397
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
|
+
}
|
|
398
450
|
async function main() {
|
|
399
451
|
const args = process.argv.slice(2);
|
|
400
452
|
const cmd = args[0];
|
|
@@ -406,12 +458,18 @@ async function main() {
|
|
|
406
458
|
console.log(VERSION);
|
|
407
459
|
return;
|
|
408
460
|
}
|
|
461
|
+
if (cmd === "list" || cmd === "companies") {
|
|
462
|
+
const compact = args.includes("--compact");
|
|
463
|
+
printCompanyList(compact);
|
|
464
|
+
return;
|
|
465
|
+
}
|
|
409
466
|
const adapter = ADAPTERS[cmd];
|
|
410
467
|
if (adapter) {
|
|
411
468
|
await runCompany(adapter, cmd, args.slice(1));
|
|
412
469
|
return;
|
|
413
470
|
}
|
|
414
|
-
die(`unknown company: ${cmd}.
|
|
471
|
+
die(`unknown company: ${cmd}. Try \`job-pro list\` for the full list, ` +
|
|
472
|
+
`or \`job-pro help\` for usage.`);
|
|
415
473
|
}
|
|
416
474
|
main().catch((err) => {
|
|
417
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",
|