hiresquire-cli 1.1.0 → 1.2.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/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
 
@@ -87,6 +112,13 @@ hiresquire results --job 123
87
112
  | [`candidate`](#candidate) | Get candidate details |
88
113
  | [`set-status`](#set-status) | Update candidate status |
89
114
  | [`schema`](#schema) | Get API schema |
115
+ | [`whoami`](#whoami) | Verify API token and get profile/balance info |
116
+ | [`agent-keys`](#agent-keys) | Manage agent-specific API keys |
117
+ | [`credits`](#credits) | Manage prepaid credits (balance, checkout, auto-reload) |
118
+ | [`calendar`](#calendar) | Manage calendar connections (Calendly, Cal.com) |
119
+ | [`interviews`](#interviews) | Manage and schedule interviews |
120
+ | [`meetings`](#meetings) | Generate meeting links (Zoom, Google Meet) |
121
+ | [`estimate`](#estimate) | Estimate screening costs |
90
122
 
91
123
  ### init
92
124
 
@@ -114,7 +146,7 @@ Options:
114
146
  - `-t, --title <title>` - Job posting title (required)
115
147
  - `-d, --description <description>` - Job description (string or @file) (required)
116
148
  - `-r, --resumes <paths>` - Resume files or directory (comma-separated or @file)
117
- - `-l, --leniency <1-10>` - Screening leniency (1=strict, 10=loose), default: 5
149
+ - `-l, --leniency <1-10>` - Screening leniency (1=loose, 10=strict), default: 5
118
150
  - `-w, --webhook <url>` - Webhook URL for notifications
119
151
  - `--watch` - Poll for completion and show results
120
152
  - `--min-score <number>` - Minimum score threshold (0-100)
@@ -195,6 +227,37 @@ Options:
195
227
  - `-l, --leniency <number>` - Default leniency level
196
228
  - `--clear` - Clear all configuration
197
229
 
230
+ ### credits
231
+
232
+ Manage prepaid credits:
233
+
234
+ ```bash
235
+ # Check current balance
236
+ hiresquire credits balance
237
+
238
+ # List available credit packs
239
+ hiresquire credits list-packs
240
+
241
+ # Create checkout session
242
+ hiresquire credits checkout --pack pouch
243
+
244
+ # View transaction history
245
+ hiresquire credits transactions
246
+
247
+ # Enable auto-reload (when balance drops below threshold)
248
+ hiresquire credits auto-reload-enable --threshold 10 --amount 25 --payment-method-id pm_12345
249
+
250
+ # Disable auto-reload
251
+ hiresquire credits auto-reload-disable
252
+ ```
253
+
254
+ Options:
255
+ - `-a, --action <action>` - Action: balance, list-packs, checkout, transactions, auto-reload-enable, auto-reload-disable
256
+ - `-p, --pack <pack>` - Credit pack: pouch, satchel, chest
257
+ - `--threshold <number>` - Auto-reload threshold in dollars
258
+ - `--amount <number>` - Amount to reload each time
259
+ - `--payment-method-id <id>` - Stripe payment method ID
260
+
198
261
  ## Agent Integration Examples
199
262
 
200
263
  ### OpenClaw
package/dist/api.d.ts ADDED
@@ -0,0 +1,267 @@
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
+ * Create a checkout session for credit purchase
231
+ */
232
+ createCheckoutSession(params: {
233
+ pack?: string;
234
+ amount?: number;
235
+ success_url?: string;
236
+ cancel_url?: string;
237
+ }): Promise<any>;
238
+ /**
239
+ * Proxy MCP JSON-RPC requests to the server
240
+ */
241
+ mcpProxy(payload: any): Promise<any>;
242
+ /**
243
+ * Regenerate an agent API key
244
+ */
245
+ regenerateAgentKey(id: number): Promise<any>;
246
+ }
247
+ /**
248
+ * Create API client from config
249
+ */
250
+ export declare function createApiClient(config: Config): ApiClient;
251
+ /**
252
+ * Create API client from token
253
+ */
254
+ export declare function createApiClientFromToken(token: string, baseUrl?: string): ApiClient;
255
+ /**
256
+ * Read resume from file path (async - supports PDF, DOCX, DOC, TXT, MD)
257
+ */
258
+ export declare function readResumeFromFile(filePath: string): Promise<Resume>;
259
+ /**
260
+ * Read resumes from directory (async)
261
+ */
262
+ export declare function readResumesFromDirectory(dirPath: string, currentCount?: number): Promise<Resume[]>;
263
+ /**
264
+ * Read multiple resume files (async)
265
+ */
266
+ export declare function readResumesFromPaths(paths: string[]): Promise<Resume[]>;
267
+ //# 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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"}