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 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
- --job "We are looking for a Senior Python Developer..." \
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 --job "Job description..." --resumes ./resumes/
136
+ hiresquire screen --title "Job Title" --description "Job description..." --resumes ./resumes/
102
137
  ```
103
138
 
104
139
  Options:
105
- - `-j, --job <description>` - Job description (string or @file)
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
- --job "${params.job_description}"
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
- --job "Senior Developer" \
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
- '--job', jobDescription,
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 --job "..." --resumes ./resumes/ --json
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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"}