job104-cli 0.1.1__tar.gz
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.
- job104_cli-0.1.1/.github/workflows/publish.yml +51 -0
- job104_cli-0.1.1/.gitignore +15 -0
- job104_cli-0.1.1/PKG-INFO +226 -0
- job104_cli-0.1.1/README.md +204 -0
- job104_cli-0.1.1/SKILL.md +198 -0
- job104_cli-0.1.1/docs/draft/initial.md +6 -0
- job104_cli-0.1.1/docs/plans/2026-03-14-feat-104-cli-job-search-tool-plan.md +468 -0
- job104_cli-0.1.1/docs/plans/2026-03-14-refactor-api-migration-and-search-filters-plan.md +589 -0
- job104_cli-0.1.1/docs/plans/2026-03-15-feat-expand-jobcat-indcat-constants-plan.md +110 -0
- job104_cli-0.1.1/docs/plans/2026-03-15-feat-personal-center-commands-plan.md +485 -0
- job104_cli-0.1.1/docs/plans/2026-03-15-feat-personal-center-phase3b-expansion-plan.md +589 -0
- job104_cli-0.1.1/docs/plans/2026-03-15-fix-personal-commands-no-data-plan.md +244 -0
- job104_cli-0.1.1/docs/refs/indust.json +1996 -0
- job104_cli-0.1.1/docs/refs/jobcat.json +3516 -0
- job104_cli-0.1.1/job104_cli/__init__.py +3 -0
- job104_cli-0.1.1/job104_cli/auth.py +364 -0
- job104_cli-0.1.1/job104_cli/cli.py +81 -0
- job104_cli-0.1.1/job104_cli/client.py +673 -0
- job104_cli-0.1.1/job104_cli/commands/__init__.py +0 -0
- job104_cli-0.1.1/job104_cli/commands/_common.py +218 -0
- job104_cli-0.1.1/job104_cli/commands/auth.py +192 -0
- job104_cli-0.1.1/job104_cli/commands/personal.py +1221 -0
- job104_cli-0.1.1/job104_cli/commands/resume_edit.py +736 -0
- job104_cli-0.1.1/job104_cli/commands/search.py +568 -0
- job104_cli-0.1.1/job104_cli/constants.py +523 -0
- job104_cli-0.1.1/job104_cli/exceptions.py +82 -0
- job104_cli-0.1.1/job104_cli/index_cache.py +106 -0
- job104_cli-0.1.1/job104_cli/models.py +102 -0
- job104_cli-0.1.1/job104_cli/resume_schema.py +185 -0
- job104_cli-0.1.1/pyproject.toml +57 -0
- job104_cli-0.1.1/tests/__init__.py +0 -0
- job104_cli-0.1.1/tests/conftest.py +73 -0
- job104_cli-0.1.1/tests/test_auth.py +381 -0
- job104_cli-0.1.1/tests/test_cli.py +343 -0
- job104_cli-0.1.1/tests/test_personal.py +982 -0
- job104_cli-0.1.1/tests/test_resume_edit.py +785 -0
- job104_cli-0.1.1/uv.lock +540 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
name: CI / Publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
tags: ["v*"]
|
|
7
|
+
pull_request:
|
|
8
|
+
branches: [main]
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
test:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
strategy:
|
|
17
|
+
matrix:
|
|
18
|
+
python-version: ["3.12", "3.13"]
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@v4
|
|
21
|
+
- uses: astral-sh/setup-uv@v6
|
|
22
|
+
- run: uv python install ${{ matrix.python-version }}
|
|
23
|
+
- run: uv sync --dev
|
|
24
|
+
- run: uv run pytest -m "not smoke" -v --tb=long
|
|
25
|
+
|
|
26
|
+
lint:
|
|
27
|
+
runs-on: ubuntu-latest
|
|
28
|
+
steps:
|
|
29
|
+
- uses: actions/checkout@v4
|
|
30
|
+
- uses: astral-sh/setup-uv@v6
|
|
31
|
+
- run: uv python install 3.13
|
|
32
|
+
- run: uv sync --dev
|
|
33
|
+
- run: uv run ruff check .
|
|
34
|
+
- run: uv run ruff format --check .
|
|
35
|
+
|
|
36
|
+
publish:
|
|
37
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
38
|
+
needs: [test, lint]
|
|
39
|
+
runs-on: ubuntu-latest
|
|
40
|
+
environment: pypi
|
|
41
|
+
permissions:
|
|
42
|
+
id-token: write
|
|
43
|
+
contents: read
|
|
44
|
+
steps:
|
|
45
|
+
- uses: actions/checkout@v4
|
|
46
|
+
- uses: astral-sh/setup-uv@v6
|
|
47
|
+
- run: uv python install 3.13
|
|
48
|
+
- run: uv build
|
|
49
|
+
- run: uv publish
|
|
50
|
+
env:
|
|
51
|
+
UV_PUBLISH_TOKEN: ${{ secrets.PYPI_TOKEN }}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: job104-cli
|
|
3
|
+
Version: 0.1.1
|
|
4
|
+
Summary: A CLI for Taiwan 104 Job Bank (104人力銀行) — search jobs from the terminal
|
|
5
|
+
Project-URL: Homepage, https://github.com/weirenlan/job104-cli
|
|
6
|
+
Project-URL: Repository, https://github.com/weirenlan/job104-cli
|
|
7
|
+
Author: weirenlan
|
|
8
|
+
License-Expression: Apache-2.0
|
|
9
|
+
Keywords: 104,cli,job,recruitment,taiwan,terminal
|
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
|
11
|
+
Classifier: Environment :: Console
|
|
12
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Topic :: Office/Business
|
|
15
|
+
Requires-Python: >=3.12
|
|
16
|
+
Requires-Dist: browser-cookie3>=0.19
|
|
17
|
+
Requires-Dist: click>=8.0
|
|
18
|
+
Requires-Dist: httpx>=0.27
|
|
19
|
+
Requires-Dist: pyyaml>=6.0
|
|
20
|
+
Requires-Dist: rich>=13.0
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
|
|
23
|
+
# job104 CLI
|
|
24
|
+
|
|
25
|
+
[](https://pypi.org/project/job104-cli/)
|
|
26
|
+
[](https://pypi.org/project/job104-cli/)
|
|
27
|
+
[](LICENSE)
|
|
28
|
+
|
|
29
|
+
> **Taiwan 104 Job Bank CLI** — Search jobs, view details, and manage your career from the terminal. Built for developers and AI agents.
|
|
30
|
+
|
|
31
|
+
台灣 104 人力銀行終端機工具。讓開發者和 AI agent 可以在終端機中搜尋 104 職缺。
|
|
32
|
+
|
|
33
|
+
## Install
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
# Recommended (isolated environment)
|
|
37
|
+
uv tool install job104-cli
|
|
38
|
+
|
|
39
|
+
# Alternatives
|
|
40
|
+
pipx install job104-cli
|
|
41
|
+
pip install job104-cli
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Quick Start
|
|
45
|
+
|
|
46
|
+
```sh
|
|
47
|
+
# Search jobs
|
|
48
|
+
job104 search "Python" --area 台北市
|
|
49
|
+
|
|
50
|
+
# Filter by company type and job category
|
|
51
|
+
job104 search "AI" --company-type 外商 --jobcat AI工程師 --area 台北市
|
|
52
|
+
|
|
53
|
+
# View job detail by index
|
|
54
|
+
job104 show 3
|
|
55
|
+
|
|
56
|
+
# View job detail by URL hash
|
|
57
|
+
job104 detail 8z5sl
|
|
58
|
+
|
|
59
|
+
# Export results
|
|
60
|
+
job104 export "Python" -n 50 -o jobs.csv
|
|
61
|
+
|
|
62
|
+
# Search companies
|
|
63
|
+
job104 company "Google" --zone 外商 --area 台北市
|
|
64
|
+
|
|
65
|
+
# Filter by industry
|
|
66
|
+
job104 search "護理師" --indcat 醫療服務業
|
|
67
|
+
|
|
68
|
+
# Use raw category code for specific job titles
|
|
69
|
+
job104 search "Python" --jobcat 2007001020
|
|
70
|
+
|
|
71
|
+
# List supported areas, job categories, and industries
|
|
72
|
+
job104 areas
|
|
73
|
+
job104 categories
|
|
74
|
+
job104 industries
|
|
75
|
+
|
|
76
|
+
# Login via browser cookies
|
|
77
|
+
job104 login
|
|
78
|
+
|
|
79
|
+
# View personal center (requires login)
|
|
80
|
+
job104 me
|
|
81
|
+
job104 applied
|
|
82
|
+
job104 saved
|
|
83
|
+
job104 interviews
|
|
84
|
+
job104 resume
|
|
85
|
+
job104 resume-show # first resume
|
|
86
|
+
job104 resume-show 2 # second resume by index
|
|
87
|
+
job104 viewers
|
|
88
|
+
job104 follows
|
|
89
|
+
job104 history
|
|
90
|
+
job104 recommend
|
|
91
|
+
|
|
92
|
+
# Edit resume (requires login) [Beta]
|
|
93
|
+
job104 resume-edit bio --update --data '{"chi": "我的自傳..."}'
|
|
94
|
+
job104 resume-edit experience --add --data '{"companyName": "Google", "jobName": "SWE"}'
|
|
95
|
+
job104 resume-fields --json # list all field definitions
|
|
96
|
+
job104 resume-fill --from resume.json --dry-run
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Personal Center (需登入)
|
|
100
|
+
|
|
101
|
+
透過瀏覽器 Cookie 登入後,可查看個人中心資料:
|
|
102
|
+
|
|
103
|
+
```sh
|
|
104
|
+
# Login
|
|
105
|
+
job104 login
|
|
106
|
+
job104 login --cookie-source chrome
|
|
107
|
+
|
|
108
|
+
# View profile
|
|
109
|
+
job104 me
|
|
110
|
+
|
|
111
|
+
# View applied jobs (with pagination and status filter)
|
|
112
|
+
job104 applied
|
|
113
|
+
job104 applied -p 2
|
|
114
|
+
job104 applied --status closed
|
|
115
|
+
|
|
116
|
+
# View saved/bookmarked jobs
|
|
117
|
+
job104 saved
|
|
118
|
+
job104 saved --not-applied
|
|
119
|
+
|
|
120
|
+
# View interview invitations
|
|
121
|
+
job104 interviews
|
|
122
|
+
|
|
123
|
+
# View resume list
|
|
124
|
+
job104 resume
|
|
125
|
+
|
|
126
|
+
# View full resume content (by index # or VNO)
|
|
127
|
+
job104 resume-show # default: first resume
|
|
128
|
+
job104 resume-show 2 # second resume by index
|
|
129
|
+
job104 resume-show <VNO> # by VNO
|
|
130
|
+
|
|
131
|
+
# View who viewed your resume
|
|
132
|
+
job104 viewers
|
|
133
|
+
|
|
134
|
+
# View followed companies
|
|
135
|
+
job104 follows
|
|
136
|
+
|
|
137
|
+
# View browsing history
|
|
138
|
+
job104 history
|
|
139
|
+
job104 history -p 2
|
|
140
|
+
|
|
141
|
+
# View recommended jobs
|
|
142
|
+
job104 recommend
|
|
143
|
+
job104 recommend --group highchance
|
|
144
|
+
|
|
145
|
+
# Structured output
|
|
146
|
+
job104 applied --json
|
|
147
|
+
job104 resume --yaml
|
|
148
|
+
job104 resume-show --json
|
|
149
|
+
job104 resume-show --md # full Markdown (no truncation)
|
|
150
|
+
job104 resume-show --md > resume.md # save to file
|
|
151
|
+
|
|
152
|
+
# Check login status / logout
|
|
153
|
+
job104 status
|
|
154
|
+
job104 logout
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## Resume Editing (需登入) `Beta 開發中`
|
|
158
|
+
|
|
159
|
+
編輯 104 履歷,支援互動模式與 agent 自動填入:
|
|
160
|
+
|
|
161
|
+
```sh
|
|
162
|
+
# Edit a single section (agent mode with --data JSON)
|
|
163
|
+
job104 resume-edit bio --update --data '{"chi": "我的自傳內容..."}'
|
|
164
|
+
job104 resume-edit experience --add --data '{"companyName": "Google", "jobName": "SWE"}'
|
|
165
|
+
job104 resume-edit education --delete --index 2
|
|
166
|
+
job104 resume-edit experience --update --index 1 --data '{"description": "新的描述"}'
|
|
167
|
+
|
|
168
|
+
# Interactive mode (prompts for each field)
|
|
169
|
+
job104 resume-edit bio --update
|
|
170
|
+
|
|
171
|
+
# Preview without submitting
|
|
172
|
+
job104 resume-edit bio --update --data '{"chi": "test"}' --dry-run
|
|
173
|
+
|
|
174
|
+
# Auto-fill from external sources
|
|
175
|
+
job104 resume-fill --from resume.json --dry-run
|
|
176
|
+
job104 resume-fill --from resume.pdf --sections experience,education
|
|
177
|
+
echo '{"bio": {"chi": "..."}}' | job104 resume-fill --stdin --yes
|
|
178
|
+
|
|
179
|
+
# Merge strategy (default: replace)
|
|
180
|
+
job104 resume-fill --from data.json --strategy merge --yes
|
|
181
|
+
|
|
182
|
+
# View field definitions (for agents)
|
|
183
|
+
job104 resume-fields --json
|
|
184
|
+
job104 resume-fields --section experience --json
|
|
185
|
+
|
|
186
|
+
# Autocomplete lookup
|
|
187
|
+
job104 resume-autocomplete school 台灣大學
|
|
188
|
+
job104 resume-autocomplete company Google --json
|
|
189
|
+
job104 resume-autocomplete skill Python --json
|
|
190
|
+
|
|
191
|
+
# Specify which resume to edit (default: first)
|
|
192
|
+
job104 resume-edit bio --update --vno <VNO> --data '{"chi": "..."}'
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## Filters
|
|
196
|
+
|
|
197
|
+
```sh
|
|
198
|
+
job104 search "Python" \
|
|
199
|
+
--area 台北市 \
|
|
200
|
+
--company-type 外商 \
|
|
201
|
+
--jobcat 軟體工程師 \
|
|
202
|
+
--indcat 軟體及網路相關業 \
|
|
203
|
+
--exp 3-5年 \
|
|
204
|
+
--edu 大學 \
|
|
205
|
+
--salary-type 月薪 --salary-low 50000 \
|
|
206
|
+
--remote 完全遠端 \
|
|
207
|
+
--isnew 7天內
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
## Structured Output
|
|
211
|
+
|
|
212
|
+
All commands support `--json` and `--yaml` flags for agent-friendly output. `resume-show` also supports `--md` for full Markdown output. Resume edit commands support `--dry-run` to preview changes before submitting.
|
|
213
|
+
|
|
214
|
+
```sh
|
|
215
|
+
job104 search "Python" --json
|
|
216
|
+
job104 company "AI" --zone 外商 --json
|
|
217
|
+
job104 applied --json
|
|
218
|
+
job104 resume --yaml
|
|
219
|
+
job104 resume-show --md
|
|
220
|
+
job104 resume-fields --json
|
|
221
|
+
job104 resume-edit bio --update --dry-run --data '{"chi": "test"}'
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
## License
|
|
225
|
+
|
|
226
|
+
Apache-2.0
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# job104 CLI
|
|
2
|
+
|
|
3
|
+
[](https://pypi.org/project/job104-cli/)
|
|
4
|
+
[](https://pypi.org/project/job104-cli/)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
|
|
7
|
+
> **Taiwan 104 Job Bank CLI** — Search jobs, view details, and manage your career from the terminal. Built for developers and AI agents.
|
|
8
|
+
|
|
9
|
+
台灣 104 人力銀行終端機工具。讓開發者和 AI agent 可以在終端機中搜尋 104 職缺。
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
# Recommended (isolated environment)
|
|
15
|
+
uv tool install job104-cli
|
|
16
|
+
|
|
17
|
+
# Alternatives
|
|
18
|
+
pipx install job104-cli
|
|
19
|
+
pip install job104-cli
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Quick Start
|
|
23
|
+
|
|
24
|
+
```sh
|
|
25
|
+
# Search jobs
|
|
26
|
+
job104 search "Python" --area 台北市
|
|
27
|
+
|
|
28
|
+
# Filter by company type and job category
|
|
29
|
+
job104 search "AI" --company-type 外商 --jobcat AI工程師 --area 台北市
|
|
30
|
+
|
|
31
|
+
# View job detail by index
|
|
32
|
+
job104 show 3
|
|
33
|
+
|
|
34
|
+
# View job detail by URL hash
|
|
35
|
+
job104 detail 8z5sl
|
|
36
|
+
|
|
37
|
+
# Export results
|
|
38
|
+
job104 export "Python" -n 50 -o jobs.csv
|
|
39
|
+
|
|
40
|
+
# Search companies
|
|
41
|
+
job104 company "Google" --zone 外商 --area 台北市
|
|
42
|
+
|
|
43
|
+
# Filter by industry
|
|
44
|
+
job104 search "護理師" --indcat 醫療服務業
|
|
45
|
+
|
|
46
|
+
# Use raw category code for specific job titles
|
|
47
|
+
job104 search "Python" --jobcat 2007001020
|
|
48
|
+
|
|
49
|
+
# List supported areas, job categories, and industries
|
|
50
|
+
job104 areas
|
|
51
|
+
job104 categories
|
|
52
|
+
job104 industries
|
|
53
|
+
|
|
54
|
+
# Login via browser cookies
|
|
55
|
+
job104 login
|
|
56
|
+
|
|
57
|
+
# View personal center (requires login)
|
|
58
|
+
job104 me
|
|
59
|
+
job104 applied
|
|
60
|
+
job104 saved
|
|
61
|
+
job104 interviews
|
|
62
|
+
job104 resume
|
|
63
|
+
job104 resume-show # first resume
|
|
64
|
+
job104 resume-show 2 # second resume by index
|
|
65
|
+
job104 viewers
|
|
66
|
+
job104 follows
|
|
67
|
+
job104 history
|
|
68
|
+
job104 recommend
|
|
69
|
+
|
|
70
|
+
# Edit resume (requires login) [Beta]
|
|
71
|
+
job104 resume-edit bio --update --data '{"chi": "我的自傳..."}'
|
|
72
|
+
job104 resume-edit experience --add --data '{"companyName": "Google", "jobName": "SWE"}'
|
|
73
|
+
job104 resume-fields --json # list all field definitions
|
|
74
|
+
job104 resume-fill --from resume.json --dry-run
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Personal Center (需登入)
|
|
78
|
+
|
|
79
|
+
透過瀏覽器 Cookie 登入後,可查看個人中心資料:
|
|
80
|
+
|
|
81
|
+
```sh
|
|
82
|
+
# Login
|
|
83
|
+
job104 login
|
|
84
|
+
job104 login --cookie-source chrome
|
|
85
|
+
|
|
86
|
+
# View profile
|
|
87
|
+
job104 me
|
|
88
|
+
|
|
89
|
+
# View applied jobs (with pagination and status filter)
|
|
90
|
+
job104 applied
|
|
91
|
+
job104 applied -p 2
|
|
92
|
+
job104 applied --status closed
|
|
93
|
+
|
|
94
|
+
# View saved/bookmarked jobs
|
|
95
|
+
job104 saved
|
|
96
|
+
job104 saved --not-applied
|
|
97
|
+
|
|
98
|
+
# View interview invitations
|
|
99
|
+
job104 interviews
|
|
100
|
+
|
|
101
|
+
# View resume list
|
|
102
|
+
job104 resume
|
|
103
|
+
|
|
104
|
+
# View full resume content (by index # or VNO)
|
|
105
|
+
job104 resume-show # default: first resume
|
|
106
|
+
job104 resume-show 2 # second resume by index
|
|
107
|
+
job104 resume-show <VNO> # by VNO
|
|
108
|
+
|
|
109
|
+
# View who viewed your resume
|
|
110
|
+
job104 viewers
|
|
111
|
+
|
|
112
|
+
# View followed companies
|
|
113
|
+
job104 follows
|
|
114
|
+
|
|
115
|
+
# View browsing history
|
|
116
|
+
job104 history
|
|
117
|
+
job104 history -p 2
|
|
118
|
+
|
|
119
|
+
# View recommended jobs
|
|
120
|
+
job104 recommend
|
|
121
|
+
job104 recommend --group highchance
|
|
122
|
+
|
|
123
|
+
# Structured output
|
|
124
|
+
job104 applied --json
|
|
125
|
+
job104 resume --yaml
|
|
126
|
+
job104 resume-show --json
|
|
127
|
+
job104 resume-show --md # full Markdown (no truncation)
|
|
128
|
+
job104 resume-show --md > resume.md # save to file
|
|
129
|
+
|
|
130
|
+
# Check login status / logout
|
|
131
|
+
job104 status
|
|
132
|
+
job104 logout
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Resume Editing (需登入) `Beta 開發中`
|
|
136
|
+
|
|
137
|
+
編輯 104 履歷,支援互動模式與 agent 自動填入:
|
|
138
|
+
|
|
139
|
+
```sh
|
|
140
|
+
# Edit a single section (agent mode with --data JSON)
|
|
141
|
+
job104 resume-edit bio --update --data '{"chi": "我的自傳內容..."}'
|
|
142
|
+
job104 resume-edit experience --add --data '{"companyName": "Google", "jobName": "SWE"}'
|
|
143
|
+
job104 resume-edit education --delete --index 2
|
|
144
|
+
job104 resume-edit experience --update --index 1 --data '{"description": "新的描述"}'
|
|
145
|
+
|
|
146
|
+
# Interactive mode (prompts for each field)
|
|
147
|
+
job104 resume-edit bio --update
|
|
148
|
+
|
|
149
|
+
# Preview without submitting
|
|
150
|
+
job104 resume-edit bio --update --data '{"chi": "test"}' --dry-run
|
|
151
|
+
|
|
152
|
+
# Auto-fill from external sources
|
|
153
|
+
job104 resume-fill --from resume.json --dry-run
|
|
154
|
+
job104 resume-fill --from resume.pdf --sections experience,education
|
|
155
|
+
echo '{"bio": {"chi": "..."}}' | job104 resume-fill --stdin --yes
|
|
156
|
+
|
|
157
|
+
# Merge strategy (default: replace)
|
|
158
|
+
job104 resume-fill --from data.json --strategy merge --yes
|
|
159
|
+
|
|
160
|
+
# View field definitions (for agents)
|
|
161
|
+
job104 resume-fields --json
|
|
162
|
+
job104 resume-fields --section experience --json
|
|
163
|
+
|
|
164
|
+
# Autocomplete lookup
|
|
165
|
+
job104 resume-autocomplete school 台灣大學
|
|
166
|
+
job104 resume-autocomplete company Google --json
|
|
167
|
+
job104 resume-autocomplete skill Python --json
|
|
168
|
+
|
|
169
|
+
# Specify which resume to edit (default: first)
|
|
170
|
+
job104 resume-edit bio --update --vno <VNO> --data '{"chi": "..."}'
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Filters
|
|
174
|
+
|
|
175
|
+
```sh
|
|
176
|
+
job104 search "Python" \
|
|
177
|
+
--area 台北市 \
|
|
178
|
+
--company-type 外商 \
|
|
179
|
+
--jobcat 軟體工程師 \
|
|
180
|
+
--indcat 軟體及網路相關業 \
|
|
181
|
+
--exp 3-5年 \
|
|
182
|
+
--edu 大學 \
|
|
183
|
+
--salary-type 月薪 --salary-low 50000 \
|
|
184
|
+
--remote 完全遠端 \
|
|
185
|
+
--isnew 7天內
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## Structured Output
|
|
189
|
+
|
|
190
|
+
All commands support `--json` and `--yaml` flags for agent-friendly output. `resume-show` also supports `--md` for full Markdown output. Resume edit commands support `--dry-run` to preview changes before submitting.
|
|
191
|
+
|
|
192
|
+
```sh
|
|
193
|
+
job104 search "Python" --json
|
|
194
|
+
job104 company "AI" --zone 外商 --json
|
|
195
|
+
job104 applied --json
|
|
196
|
+
job104 resume --yaml
|
|
197
|
+
job104 resume-show --md
|
|
198
|
+
job104 resume-fields --json
|
|
199
|
+
job104 resume-edit bio --update --dry-run --data '{"chi": "test"}'
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## License
|
|
203
|
+
|
|
204
|
+
Apache-2.0
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: job104-cli
|
|
3
|
+
description: Use job104 for ALL 104 人力銀行 operations — searching jobs, viewing details, managing applications, browsing resumes, and exporting results. Invoke whenever the user requests any job search or recruitment interaction on Taiwan's 104 Job Bank.
|
|
4
|
+
author: weirenlan
|
|
5
|
+
version: "0.1.0"
|
|
6
|
+
tags:
|
|
7
|
+
- 104
|
|
8
|
+
- job-search
|
|
9
|
+
- taiwan
|
|
10
|
+
- recruitment
|
|
11
|
+
- cli
|
|
12
|
+
- ai-agent
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# job104 — Taiwan 104 Job Bank CLI
|
|
16
|
+
|
|
17
|
+
**Binary:** `job104`
|
|
18
|
+
**Credentials:** browser cookies (auto-extracted from Chrome, Firefox, Edge, Brave, Arc, Safari, etc.)
|
|
19
|
+
|
|
20
|
+
## Setup
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Install (requires Python 3.10+)
|
|
24
|
+
uv tool install job104-cli
|
|
25
|
+
# Or: pipx install job104-cli
|
|
26
|
+
# Or: pip install job104-cli
|
|
27
|
+
|
|
28
|
+
# Upgrade to latest
|
|
29
|
+
uv tool install --upgrade job104-cli
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Authentication
|
|
33
|
+
|
|
34
|
+
**IMPORTANT FOR AGENTS**: Many commands work without login (search, detail, export, company). Only personal center commands (me, applied, saved, resume, etc.) require authentication.
|
|
35
|
+
|
|
36
|
+
### Step 0: Check if already authenticated
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
job104 status --json 2>/dev/null | python3 -c "import sys,json; d=json.load(sys.stdin); print('AUTH_OK' if d.get('ok') else 'AUTH_NEEDED')"
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
If `AUTH_OK`, skip to [Command Reference](#command-reference).
|
|
43
|
+
If `AUTH_NEEDED` and personal center commands are needed, proceed to Step 1.
|
|
44
|
+
|
|
45
|
+
### Step 1: Guide user to authenticate
|
|
46
|
+
|
|
47
|
+
Ensure user is logged into 104.com.tw in any supported browser. Then:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
job104 login # auto-detect browser with valid cookies
|
|
51
|
+
job104 login --cookie-source chrome # specify browser explicitly
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Verify with:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
job104 status
|
|
58
|
+
job104 me --json
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Step 2: Handle common auth issues
|
|
62
|
+
|
|
63
|
+
| Symptom | Agent action |
|
|
64
|
+
|---------|-------------|
|
|
65
|
+
| `未登入` or `not authenticated` | Run `job104 login` |
|
|
66
|
+
| Cookie expired | Run `job104 logout && job104 login` |
|
|
67
|
+
| Wrong browser | Run `job104 login --cookie-source <browser>` |
|
|
68
|
+
|
|
69
|
+
## Agent Defaults
|
|
70
|
+
|
|
71
|
+
All machine-readable output uses a consistent envelope:
|
|
72
|
+
|
|
73
|
+
```json
|
|
74
|
+
{"ok": true, "data": {...}}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
- `--json` / `--yaml` / `--md` for explicit format
|
|
78
|
+
- Rich table output goes to **stderr** (safe for pipes: `job104 search X --json | jq .data`)
|
|
79
|
+
- Non-zero exit codes on failure
|
|
80
|
+
|
|
81
|
+
## Command Reference
|
|
82
|
+
|
|
83
|
+
### Search & Browse (No Login Required)
|
|
84
|
+
|
|
85
|
+
| Command | Description | Example |
|
|
86
|
+
|---------|-------------|---------|
|
|
87
|
+
| `job104 search <keyword>` | Search jobs with filters | `job104 search "Python" --area 台北市` |
|
|
88
|
+
| `job104 show <index>` | View job #N from last search | `job104 show 3` |
|
|
89
|
+
| `job104 detail <hash>` | View full job details by URL hash | `job104 detail 8z5sl --json` |
|
|
90
|
+
| `job104 export <keyword>` | Export search results to CSV/JSON | `job104 export "Python" -n 50 -o jobs.csv` |
|
|
91
|
+
| `job104 company <keyword>` | Search companies | `job104 company "Google" --zone 外商 --area 台北市` |
|
|
92
|
+
| `job104 areas` | List supported areas | `job104 areas` |
|
|
93
|
+
| `job104 categories` | List job categories | `job104 categories` |
|
|
94
|
+
| `job104 industries` | List industry categories | `job104 industries` |
|
|
95
|
+
|
|
96
|
+
### Personal Center (Login Required)
|
|
97
|
+
|
|
98
|
+
| Command | Description | Example |
|
|
99
|
+
|---------|-------------|---------|
|
|
100
|
+
| `job104 me` | View profile | `job104 me --json` |
|
|
101
|
+
| `job104 applied` | View applied jobs | `job104 applied -p 1 --json` |
|
|
102
|
+
| `job104 saved` | View saved/bookmarked jobs | `job104 saved --not-applied --json` |
|
|
103
|
+
| `job104 interviews` | View interview invitations | `job104 interviews --json` |
|
|
104
|
+
| `job104 resume` | List all resumes | `job104 resume --json` |
|
|
105
|
+
| `job104 resume-show` | View full resume content | `job104 resume-show --json` |
|
|
106
|
+
| `job104 resume-show <N>` | View Nth resume by index | `job104 resume-show 2 --md` |
|
|
107
|
+
| `job104 viewers` | View who viewed your resume | `job104 viewers --json` |
|
|
108
|
+
| `job104 follows` | View followed companies | `job104 follows --json` |
|
|
109
|
+
| `job104 history` | View browsing history | `job104 history -p 2 --json` |
|
|
110
|
+
| `job104 recommend` | View recommended jobs | `job104 recommend --json` |
|
|
111
|
+
|
|
112
|
+
### Account
|
|
113
|
+
|
|
114
|
+
| Command | Description |
|
|
115
|
+
|---------|-------------|
|
|
116
|
+
| `job104 login` | Extract cookies from browser (auto-detect) |
|
|
117
|
+
| `job104 login --cookie-source <browser>` | Extract from specific browser |
|
|
118
|
+
| `job104 status` | Check authentication status |
|
|
119
|
+
| `job104 logout` | Clear saved credentials |
|
|
120
|
+
|
|
121
|
+
## Search Filter Options
|
|
122
|
+
|
|
123
|
+
| Filter | Flag | Values |
|
|
124
|
+
|--------|------|--------|
|
|
125
|
+
| Area | `--area` | 台北市, 新北市, 桃園市, 台中市, 高雄市, etc. (use `job104 areas` for full list) |
|
|
126
|
+
| Experience | `--exp` | 不限, 1年以下, 1-3年, 3-5年, 5-10年, 10年以上 |
|
|
127
|
+
| Education | `--edu` | 不限, 高中以下, 高中/高職, 專科, 大學, 碩士, 博士 |
|
|
128
|
+
| Salary Type | `--salary-type` | 月薪, 時薪, 日薪 |
|
|
129
|
+
| Min Salary | `--salary-low` | Integer (e.g. 50000) |
|
|
130
|
+
| Max Salary | `--salary-high` | Integer (e.g. 100000) |
|
|
131
|
+
| Freshness | `--isnew` | 3天內, 7天內, 14天內, 30天內 |
|
|
132
|
+
| Remote | `--remote` | 完全遠端, 部分遠端 |
|
|
133
|
+
| Company Type | `--company-type` | 外商, 上市上櫃 |
|
|
134
|
+
| Job Category | `--jobcat` | 軟體工程師, AI工程師, etc. (use `job104 categories`) |
|
|
135
|
+
| Industry | `--indcat` | 半導體業, 軟體及網路相關業, etc. (use `job104 industries`) |
|
|
136
|
+
| Sort Order | `--order` | 符合度, 日期, 刊登日, 經歷需求, 學歷需求, 應徵人數, 待遇 |
|
|
137
|
+
|
|
138
|
+
## Agent Workflow Examples
|
|
139
|
+
|
|
140
|
+
### Search → Detail pipeline (structured)
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
# Search and get job list
|
|
144
|
+
job104 search "Python" --area 台北市 --json | jq '.data.jobs[0]'
|
|
145
|
+
# View top result detail
|
|
146
|
+
job104 show 1 --json
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Foreign company AI job search
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
job104 search "AI" --company-type 外商 --area 台北市 --salary-type 月薪 --salary-low 80000 --json
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Export pipeline
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
job104 export "golang" --area 台北市 -n 50 -o golang_jobs.csv
|
|
159
|
+
job104 export "Python" -n 100 --format json -o python_jobs.json
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Daily job check workflow
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
job104 recommend --json # Check recommendations
|
|
166
|
+
job104 search "Python" --area 台北市 --json # Search specific jobs
|
|
167
|
+
job104 applied --json # Check application status
|
|
168
|
+
job104 interviews --json # Check interview invitations
|
|
169
|
+
job104 saved --json # Check saved jobs
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Resume export
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
job104 resume-show --md > my_resume.md # Export resume as Markdown
|
|
176
|
+
job104 resume-show --json | jq '.data' # Get structured resume data
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Profile check
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
job104 me --json | jq '.data'
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## Limitations
|
|
186
|
+
|
|
187
|
+
- **No job application** — cannot apply to jobs from CLI (requires browser interaction)
|
|
188
|
+
- **No resume editing** — read-only resume access (editing support planned)
|
|
189
|
+
- **No message sending** — cannot send messages to recruiters
|
|
190
|
+
- **Single account** — one set of cookies at a time
|
|
191
|
+
- **Taiwan only** — 104 Job Bank is a Taiwan-specific platform
|
|
192
|
+
|
|
193
|
+
## Safety Notes
|
|
194
|
+
|
|
195
|
+
- Do not ask users to share raw cookie values in chat logs.
|
|
196
|
+
- Prefer local browser cookie extraction over manual secret copy/paste.
|
|
197
|
+
- If auth fails, ask the user to re-login via `job104 login`.
|
|
198
|
+
- Agent should treat cookie values as secrets (do not echo to stdout).
|