hiresquire-cli 1.0.0 → 1.2.1
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 +82 -9
- package/dist/api.d.ts +250 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +689 -0
- package/dist/api.js.map +1 -0
- package/dist/config.d.ts +49 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +195 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1370 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +353 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +49 -0
- package/dist/types.js.map +1 -0
- package/package.json +73 -57
package/README.md
CHANGED
|
@@ -15,6 +15,31 @@ HireSquire CLI enables AI agents and developers to screen candidates directly fr
|
|
|
15
15
|
- 📄 **JSON Output**: Machine-readable output for automation
|
|
16
16
|
- ⚙️ **Config Management**: Easy API token setup and storage
|
|
17
17
|
- 🔗 **Webhook Support**: Conditional webhooks for automated workflows
|
|
18
|
+
- 📄 **Resume Parsing**: Supports PDF, DOCX, DOC, TXT, and Markdown files
|
|
19
|
+
|
|
20
|
+
## Supported Resume Formats
|
|
21
|
+
|
|
22
|
+
The CLI automatically detects and parses the following resume formats:
|
|
23
|
+
|
|
24
|
+
| Format | Extension | Parser |
|
|
25
|
+
|--------|-----------|--------|
|
|
26
|
+
| PDF | `.pdf` | pdf-parse |
|
|
27
|
+
| Word DOCX | `.docx` | officeparser |
|
|
28
|
+
| Word DOC | `.doc` | officeparser |
|
|
29
|
+
| Plain Text | `.txt` | Native |
|
|
30
|
+
| Markdown | `.md` | Native |
|
|
31
|
+
|
|
32
|
+
No manual conversion needed - just point to your resume files or directory!
|
|
33
|
+
|
|
34
|
+
### Installation Notes
|
|
35
|
+
|
|
36
|
+
When installing from source, the parser dependencies will be included automatically:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
npm install -g hiresquire-cli
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The parsers are pure JavaScript with no native dependencies, making them suitable for all environments including Docker containers.
|
|
18
43
|
|
|
19
44
|
## Installation
|
|
20
45
|
|
|
@@ -57,7 +82,8 @@ export HIRESQUIRE_API_TOKEN=your_token_here
|
|
|
57
82
|
|
|
58
83
|
```bash
|
|
59
84
|
hiresquire screen \
|
|
60
|
-
--
|
|
85
|
+
--title "Senior Python Developer" \
|
|
86
|
+
--description "We are looking for a Senior Python Developer..." \
|
|
61
87
|
--resumes ./resumes/
|
|
62
88
|
```
|
|
63
89
|
|
|
@@ -78,6 +104,15 @@ hiresquire results --job 123
|
|
|
78
104
|
| [`status`](#status) | Check job status |
|
|
79
105
|
| [`email`](#email) | Generate an email for a candidate |
|
|
80
106
|
| [`configure`](#configure) | Update configuration settings |
|
|
107
|
+
| [`cancel`](#cancel) | Cancel a running job |
|
|
108
|
+
| [`compare`](#compare) | Compare candidates side-by-side |
|
|
109
|
+
| [`outcome`](#outcome) | Report hiring outcome |
|
|
110
|
+
| [`webhook-test`](#webhook-test) | Test a webhook endpoint |
|
|
111
|
+
| [`rate-limit`](#rate-limit) | Check API rate limit status |
|
|
112
|
+
| [`candidate`](#candidate) | Get candidate details |
|
|
113
|
+
| [`set-status`](#set-status) | Update candidate status |
|
|
114
|
+
| [`schema`](#schema) | Get API schema |
|
|
115
|
+
| [`credits`](#credits) | Manage prepaid credits (balance, checkout, auto-reload) |
|
|
81
116
|
|
|
82
117
|
### init
|
|
83
118
|
|
|
@@ -98,11 +133,12 @@ Options:
|
|
|
98
133
|
Submit a candidate screening job:
|
|
99
134
|
|
|
100
135
|
```bash
|
|
101
|
-
hiresquire screen --
|
|
136
|
+
hiresquire screen --title "Job Title" --description "Job description..." --resumes ./resumes/
|
|
102
137
|
```
|
|
103
138
|
|
|
104
139
|
Options:
|
|
105
|
-
- `-
|
|
140
|
+
- `-t, --title <title>` - Job posting title (required)
|
|
141
|
+
- `-d, --description <description>` - Job description (string or @file) (required)
|
|
106
142
|
- `-r, --resumes <paths>` - Resume files or directory (comma-separated or @file)
|
|
107
143
|
- `-l, --leniency <1-10>` - Screening leniency (1=strict, 10=loose), default: 5
|
|
108
144
|
- `-w, --webhook <url>` - Webhook URL for notifications
|
|
@@ -185,6 +221,37 @@ Options:
|
|
|
185
221
|
- `-l, --leniency <number>` - Default leniency level
|
|
186
222
|
- `--clear` - Clear all configuration
|
|
187
223
|
|
|
224
|
+
### credits
|
|
225
|
+
|
|
226
|
+
Manage prepaid credits:
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
# Check current balance
|
|
230
|
+
hiresquire credits balance
|
|
231
|
+
|
|
232
|
+
# List available credit packs
|
|
233
|
+
hiresquire credits list-packs
|
|
234
|
+
|
|
235
|
+
# Create checkout session
|
|
236
|
+
hiresquire credits checkout --pack pouch
|
|
237
|
+
|
|
238
|
+
# View transaction history
|
|
239
|
+
hiresquire credits transactions
|
|
240
|
+
|
|
241
|
+
# Enable auto-reload (when balance drops below threshold)
|
|
242
|
+
hiresquire credits auto-reload-enable --threshold 10 --amount 25 --payment-method-id pm_12345
|
|
243
|
+
|
|
244
|
+
# Disable auto-reload
|
|
245
|
+
hiresquire credits auto-reload-disable
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
Options:
|
|
249
|
+
- `-a, --action <action>` - Action: balance, list-packs, checkout, transactions, auto-reload-enable, auto-reload-disable
|
|
250
|
+
- `-p, --pack <pack>` - Credit pack: pouch, satchel, chest
|
|
251
|
+
- `--threshold <number>` - Auto-reload threshold in dollars
|
|
252
|
+
- `--amount <number>` - Amount to reload each time
|
|
253
|
+
- `--payment-method-id <id>` - Stripe payment method ID
|
|
254
|
+
|
|
188
255
|
## Agent Integration Examples
|
|
189
256
|
|
|
190
257
|
### OpenClaw
|
|
@@ -199,15 +266,17 @@ OpenClaw (`https://openclaw.ai/`) can execute CLI commands directly:
|
|
|
199
266
|
parameters: {
|
|
200
267
|
type: "object",
|
|
201
268
|
properties: {
|
|
269
|
+
job_title: { type: "string" },
|
|
202
270
|
job_description: { type: "string" },
|
|
203
271
|
resumes_path: { type: "string" },
|
|
204
272
|
min_score: { type: "number", minimum: 0, maximum: 100 }
|
|
205
273
|
},
|
|
206
|
-
required: ["job_description", "resumes_path"]
|
|
274
|
+
required: ["job_title", "job_description", "resumes_path"]
|
|
207
275
|
},
|
|
208
276
|
execute: async (params) => {
|
|
209
277
|
const { stdout } = await exec(`npx hiresquire-cli screen
|
|
210
|
-
--
|
|
278
|
+
--title "${params.job_title}"
|
|
279
|
+
--description "${params.job_description}"
|
|
211
280
|
--resumes ${params.resumes_path}
|
|
212
281
|
--json`);
|
|
213
282
|
return JSON.parse(stdout);
|
|
@@ -220,7 +289,8 @@ OpenClaw (`https://openclaw.ai/`) can execute CLI commands directly:
|
|
|
220
289
|
```bash
|
|
221
290
|
# Screen candidates
|
|
222
291
|
npx hiresquire-cli screen \
|
|
223
|
-
--
|
|
292
|
+
--title "Senior Developer" \
|
|
293
|
+
--description "We are looking for a Senior Developer..." \
|
|
224
294
|
--resumes ./resumes/ \
|
|
225
295
|
--json
|
|
226
296
|
```
|
|
@@ -230,12 +300,13 @@ npx hiresquire-cli screen \
|
|
|
230
300
|
```javascript
|
|
231
301
|
const { spawn } = require('child_process');
|
|
232
302
|
|
|
233
|
-
function screenCandidates(jobDescription, resumePath) {
|
|
303
|
+
function screenCandidates(jobTitle, jobDescription, resumePath) {
|
|
234
304
|
return new Promise((resolve, reject) => {
|
|
235
305
|
const process = spawn('npx', [
|
|
236
306
|
'hiresquire-cli',
|
|
237
307
|
'screen',
|
|
238
|
-
'--
|
|
308
|
+
'--title', jobTitle,
|
|
309
|
+
'--description', jobDescription,
|
|
239
310
|
'--resumes', resumePath,
|
|
240
311
|
'--json'
|
|
241
312
|
]);
|
|
@@ -266,7 +337,7 @@ function screenCandidates(jobDescription, resumePath) {
|
|
|
266
337
|
All commands support `--json` flag for machine-readable output:
|
|
267
338
|
|
|
268
339
|
```bash
|
|
269
|
-
hiresquire screen --
|
|
340
|
+
hiresquire screen --title "Job Title" --description "Job description..." --resumes ./resumes/ --json
|
|
270
341
|
```
|
|
271
342
|
|
|
272
343
|
```json
|
|
@@ -291,6 +362,8 @@ Configuration is stored in `~/.hiresquire/config.json`:
|
|
|
291
362
|
}
|
|
292
363
|
```
|
|
293
364
|
|
|
365
|
+
> **Security Warning**: The API token is stored in plain text. On shared systems, consider using environment variables instead: `export HIRESQUIRE_API_TOKEN=your_token_here`
|
|
366
|
+
|
|
294
367
|
## Development
|
|
295
368
|
|
|
296
369
|
```bash
|
package/dist/api.d.ts
ADDED
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HireSquire CLI - API Client
|
|
3
|
+
*
|
|
4
|
+
* HTTP client for interacting with the HireSquire API
|
|
5
|
+
* Handles authentication, request/response typing, and error handling
|
|
6
|
+
*/
|
|
7
|
+
import { Config, CreateJobParams, CreateJobResponse, JobStatusResponse, ResultsResponse, JobsListResponse, EmailParams, EmailResponse, Resume, CalendarConnection, CreateCalendarConnectionParams, Interview, CreateInterviewParams, MeetingLinkResponse, AvailableSlotsResponse } from './types';
|
|
8
|
+
export declare class ApiClient {
|
|
9
|
+
private client;
|
|
10
|
+
private config;
|
|
11
|
+
constructor(config: Config);
|
|
12
|
+
private shouldRetryRequest;
|
|
13
|
+
private handleError;
|
|
14
|
+
/**
|
|
15
|
+
* Generic GET request
|
|
16
|
+
*/
|
|
17
|
+
get<T = any>(url: string, config?: any): Promise<{
|
|
18
|
+
data: T;
|
|
19
|
+
}>;
|
|
20
|
+
/**
|
|
21
|
+
* Generic POST request
|
|
22
|
+
*/
|
|
23
|
+
post<T = any>(url: string, data?: any, config?: any): Promise<{
|
|
24
|
+
data: T;
|
|
25
|
+
}>;
|
|
26
|
+
/**
|
|
27
|
+
* Generic PUT request
|
|
28
|
+
*/
|
|
29
|
+
put<T = any>(url: string, data?: any, config?: any): Promise<{
|
|
30
|
+
data: T;
|
|
31
|
+
}>;
|
|
32
|
+
/**
|
|
33
|
+
* Generic DELETE request
|
|
34
|
+
*/
|
|
35
|
+
delete<T = any>(url: string, config?: any): Promise<{
|
|
36
|
+
data: T;
|
|
37
|
+
}>;
|
|
38
|
+
/**
|
|
39
|
+
* Create a new screening job
|
|
40
|
+
*/
|
|
41
|
+
createJob(params: CreateJobParams): Promise<CreateJobResponse>;
|
|
42
|
+
/**
|
|
43
|
+
* Upload a ZIP file containing resumes to create a new screening job
|
|
44
|
+
*/
|
|
45
|
+
uploadZip(params: Omit<CreateJobParams, 'resumes'> & {
|
|
46
|
+
zipPath: string;
|
|
47
|
+
}): Promise<CreateJobResponse>;
|
|
48
|
+
/**
|
|
49
|
+
* Get job status
|
|
50
|
+
*/
|
|
51
|
+
getJobStatus(jobId: number): Promise<JobStatusResponse>;
|
|
52
|
+
/**
|
|
53
|
+
* Get job results
|
|
54
|
+
*/
|
|
55
|
+
getResults(jobId: number, options?: {
|
|
56
|
+
min_score?: number;
|
|
57
|
+
only_top_n?: number;
|
|
58
|
+
}): Promise<ResultsResponse>;
|
|
59
|
+
/**
|
|
60
|
+
* List all jobs
|
|
61
|
+
*/
|
|
62
|
+
listJobs(options?: {
|
|
63
|
+
status?: string;
|
|
64
|
+
page?: number;
|
|
65
|
+
per_page?: number;
|
|
66
|
+
}): Promise<JobsListResponse>;
|
|
67
|
+
/**
|
|
68
|
+
* Generate an email for a candidate
|
|
69
|
+
*/
|
|
70
|
+
generateEmail(params: EmailParams): Promise<EmailResponse>;
|
|
71
|
+
/**
|
|
72
|
+
* Poll for job completion
|
|
73
|
+
*/
|
|
74
|
+
pollForCompletion(jobId: number, options?: {
|
|
75
|
+
interval?: number;
|
|
76
|
+
timeout?: number;
|
|
77
|
+
onProgress?: (status: JobStatusResponse) => void;
|
|
78
|
+
}): Promise<JobStatusResponse>;
|
|
79
|
+
/**
|
|
80
|
+
* Sleep for specified milliseconds
|
|
81
|
+
*/
|
|
82
|
+
private sleep;
|
|
83
|
+
/**
|
|
84
|
+
* Test API connection
|
|
85
|
+
*/
|
|
86
|
+
testConnection(): Promise<boolean>;
|
|
87
|
+
/**
|
|
88
|
+
* Get current config
|
|
89
|
+
*/
|
|
90
|
+
getConfig(): Config;
|
|
91
|
+
/**
|
|
92
|
+
* Cancel a running job
|
|
93
|
+
*/
|
|
94
|
+
cancelJob(jobId: number): Promise<{
|
|
95
|
+
job_id: number;
|
|
96
|
+
status: string;
|
|
97
|
+
message: string;
|
|
98
|
+
}>;
|
|
99
|
+
/**
|
|
100
|
+
* Compare multiple candidates side-by-side
|
|
101
|
+
*/
|
|
102
|
+
compareCandidates(jobId: number, candidateIds: number[]): Promise<{
|
|
103
|
+
job_id: number;
|
|
104
|
+
candidates: Array<{
|
|
105
|
+
id: number;
|
|
106
|
+
name: string;
|
|
107
|
+
score: number;
|
|
108
|
+
summary: string;
|
|
109
|
+
}>;
|
|
110
|
+
comparison: {
|
|
111
|
+
top_candidate: string;
|
|
112
|
+
score_diff: number;
|
|
113
|
+
};
|
|
114
|
+
}>;
|
|
115
|
+
/**
|
|
116
|
+
* Report hiring outcome to improve AI accuracy
|
|
117
|
+
*/
|
|
118
|
+
reportOutcome(jobId: number, candidateId: number, outcome: 'hired' | 'rejected' | 'withdrawn'): Promise<{
|
|
119
|
+
success: boolean;
|
|
120
|
+
message: string;
|
|
121
|
+
}>;
|
|
122
|
+
/**
|
|
123
|
+
* Test a webhook endpoint
|
|
124
|
+
*/
|
|
125
|
+
testWebhook(webhookUrl: string): Promise<{
|
|
126
|
+
success: boolean;
|
|
127
|
+
message: string;
|
|
128
|
+
response_code?: number;
|
|
129
|
+
}>;
|
|
130
|
+
/**
|
|
131
|
+
* Get current rate limit status
|
|
132
|
+
*/
|
|
133
|
+
getRateLimit(): Promise<{
|
|
134
|
+
limit: number;
|
|
135
|
+
remaining: number;
|
|
136
|
+
reset_at: string;
|
|
137
|
+
reset_in_seconds: number;
|
|
138
|
+
}>;
|
|
139
|
+
/**
|
|
140
|
+
* Get a specific candidate
|
|
141
|
+
*/
|
|
142
|
+
getCandidate(candidateId: number): Promise<any>;
|
|
143
|
+
/**
|
|
144
|
+
* Update candidate status
|
|
145
|
+
*/
|
|
146
|
+
updateCandidateStatus(candidateId: number, status: 'pending' | 'shortlisted' | 'rejected' | 'interviewed' | 'offered' | 'hired'): Promise<{
|
|
147
|
+
success: boolean;
|
|
148
|
+
candidate: any;
|
|
149
|
+
}>;
|
|
150
|
+
/**
|
|
151
|
+
* Get API schema for discovery
|
|
152
|
+
*/
|
|
153
|
+
getSchema(): Promise<any>;
|
|
154
|
+
/**
|
|
155
|
+
* List calendar connections
|
|
156
|
+
*/
|
|
157
|
+
listCalendarConnections(): Promise<{
|
|
158
|
+
success: boolean;
|
|
159
|
+
data: CalendarConnection[];
|
|
160
|
+
}>;
|
|
161
|
+
/**
|
|
162
|
+
* Create a calendar connection
|
|
163
|
+
*/
|
|
164
|
+
createCalendarConnection(params: CreateCalendarConnectionParams): Promise<{
|
|
165
|
+
success: boolean;
|
|
166
|
+
data: CalendarConnection;
|
|
167
|
+
message: string;
|
|
168
|
+
}>;
|
|
169
|
+
/**
|
|
170
|
+
* Delete a calendar connection
|
|
171
|
+
*/
|
|
172
|
+
deleteCalendarConnection(id: number): Promise<{
|
|
173
|
+
success: boolean;
|
|
174
|
+
message: string;
|
|
175
|
+
}>;
|
|
176
|
+
/**
|
|
177
|
+
* Get available slots from calendar
|
|
178
|
+
*/
|
|
179
|
+
getAvailableSlots(params: {
|
|
180
|
+
provider: string;
|
|
181
|
+
date: string;
|
|
182
|
+
duration?: number;
|
|
183
|
+
}): Promise<AvailableSlotsResponse>;
|
|
184
|
+
/**
|
|
185
|
+
* List interviews
|
|
186
|
+
*/
|
|
187
|
+
listInterviews(jobId?: number): Promise<{
|
|
188
|
+
success: boolean;
|
|
189
|
+
data: Interview[];
|
|
190
|
+
}>;
|
|
191
|
+
/**
|
|
192
|
+
* Create an interview
|
|
193
|
+
*/
|
|
194
|
+
createInterview(params: CreateInterviewParams): Promise<{
|
|
195
|
+
success: boolean;
|
|
196
|
+
data: Interview;
|
|
197
|
+
message: string;
|
|
198
|
+
}>;
|
|
199
|
+
/**
|
|
200
|
+
* Show a specific interview
|
|
201
|
+
*/
|
|
202
|
+
showInterview(id: number): Promise<{
|
|
203
|
+
success: boolean;
|
|
204
|
+
data: Interview;
|
|
205
|
+
}>;
|
|
206
|
+
/**
|
|
207
|
+
* Update an interview
|
|
208
|
+
*/
|
|
209
|
+
updateInterview(id: number, params: Partial<CreateInterviewParams>): Promise<{
|
|
210
|
+
success: boolean;
|
|
211
|
+
data: Interview;
|
|
212
|
+
message: string;
|
|
213
|
+
}>;
|
|
214
|
+
/**
|
|
215
|
+
* Delete/cancel an interview
|
|
216
|
+
*/
|
|
217
|
+
deleteInterview(id: number): Promise<{
|
|
218
|
+
success: boolean;
|
|
219
|
+
message: string;
|
|
220
|
+
}>;
|
|
221
|
+
/**
|
|
222
|
+
* Generate a meeting link
|
|
223
|
+
*/
|
|
224
|
+
generateMeetingLink(params: {
|
|
225
|
+
provider: string;
|
|
226
|
+
topic: string;
|
|
227
|
+
duration?: number;
|
|
228
|
+
}): Promise<MeetingLinkResponse>;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Create API client from config
|
|
232
|
+
*/
|
|
233
|
+
export declare function createApiClient(config: Config): ApiClient;
|
|
234
|
+
/**
|
|
235
|
+
* Create API client from token
|
|
236
|
+
*/
|
|
237
|
+
export declare function createApiClientFromToken(token: string, baseUrl?: string): ApiClient;
|
|
238
|
+
/**
|
|
239
|
+
* Read resume from file path (async - supports PDF, DOCX, DOC, TXT, MD)
|
|
240
|
+
*/
|
|
241
|
+
export declare function readResumeFromFile(filePath: string): Promise<Resume>;
|
|
242
|
+
/**
|
|
243
|
+
* Read resumes from directory (async)
|
|
244
|
+
*/
|
|
245
|
+
export declare function readResumesFromDirectory(dirPath: string, currentCount?: number): Promise<Resume[]>;
|
|
246
|
+
/**
|
|
247
|
+
* Read multiple resume files (async)
|
|
248
|
+
*/
|
|
249
|
+
export declare function readResumesFromPaths(paths: string[]): Promise<Resume[]>;
|
|
250
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|