huntr-cli 1.0.9

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.
Files changed (117) hide show
  1. package/.env.example +7 -0
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +43 -0
  3. package/.github/ISSUE_TEMPLATE/config.yml +8 -0
  4. package/.github/ISSUE_TEMPLATE/feature_request.md +29 -0
  5. package/.github/labels.json +92 -0
  6. package/.github/pull_request_template.md +64 -0
  7. package/.github/workflows/ci.yml +87 -0
  8. package/.github/workflows/labels.yml +27 -0
  9. package/.github/workflows/manual-publish.yml +105 -0
  10. package/.github/workflows/publish.yml +57 -0
  11. package/.github/workflows/release.yml +124 -0
  12. package/.github/workflows/security-audit.yml +44 -0
  13. package/.husky/pre-commit +12 -0
  14. package/.husky/pre-push +27 -0
  15. package/.lintstagedrc.json +3 -0
  16. package/AGENTS.md +449 -0
  17. package/CHANGELOG.md +38 -0
  18. package/CHANGES.md +259 -0
  19. package/LICENSE +15 -0
  20. package/PUBLISHING.md +191 -0
  21. package/README.md +385 -0
  22. package/ROADMAP.md +158 -0
  23. package/SETUP-COMPLETE.md +446 -0
  24. package/WORKFLOW-SUMMARY.md +368 -0
  25. package/completions/_huntr +168 -0
  26. package/completions/huntr.1 +266 -0
  27. package/completions/huntr.bash +91 -0
  28. package/dist/api/client.d.ts +14 -0
  29. package/dist/api/client.d.ts.map +1 -0
  30. package/dist/api/client.js +74 -0
  31. package/dist/api/client.js.map +1 -0
  32. package/dist/api/personal/activities.d.ts +20 -0
  33. package/dist/api/personal/activities.d.ts.map +1 -0
  34. package/dist/api/personal/activities.js +50 -0
  35. package/dist/api/personal/activities.js.map +1 -0
  36. package/dist/api/personal/boards.d.ts +9 -0
  37. package/dist/api/personal/boards.d.ts.map +1 -0
  38. package/dist/api/personal/boards.js +16 -0
  39. package/dist/api/personal/boards.js.map +1 -0
  40. package/dist/api/personal/index.d.ts +17 -0
  41. package/dist/api/personal/index.d.ts.map +1 -0
  42. package/dist/api/personal/index.js +37 -0
  43. package/dist/api/personal/index.js.map +1 -0
  44. package/dist/api/personal/jobs.d.ts +13 -0
  45. package/dist/api/personal/jobs.d.ts.map +1 -0
  46. package/dist/api/personal/jobs.js +31 -0
  47. package/dist/api/personal/jobs.js.map +1 -0
  48. package/dist/api/personal/user.d.ts +8 -0
  49. package/dist/api/personal/user.d.ts.map +1 -0
  50. package/dist/api/personal/user.js +13 -0
  51. package/dist/api/personal/user.js.map +1 -0
  52. package/dist/cli.d.ts +3 -0
  53. package/dist/cli.d.ts.map +1 -0
  54. package/dist/cli.js +501 -0
  55. package/dist/cli.js.map +1 -0
  56. package/dist/commands/capture-session.d.ts +10 -0
  57. package/dist/commands/capture-session.d.ts.map +1 -0
  58. package/dist/commands/capture-session.js +478 -0
  59. package/dist/commands/capture-session.js.map +1 -0
  60. package/dist/config/clerk-session-manager.d.ts +44 -0
  61. package/dist/config/clerk-session-manager.d.ts.map +1 -0
  62. package/dist/config/clerk-session-manager.js +232 -0
  63. package/dist/config/clerk-session-manager.js.map +1 -0
  64. package/dist/config/config-manager.d.ts +15 -0
  65. package/dist/config/config-manager.d.ts.map +1 -0
  66. package/dist/config/config-manager.js +51 -0
  67. package/dist/config/config-manager.js.map +1 -0
  68. package/dist/config/keychain-manager.d.ts +6 -0
  69. package/dist/config/keychain-manager.d.ts.map +1 -0
  70. package/dist/config/keychain-manager.js +37 -0
  71. package/dist/config/keychain-manager.js.map +1 -0
  72. package/dist/config/token-capture.d.ts +11 -0
  73. package/dist/config/token-capture.d.ts.map +1 -0
  74. package/dist/config/token-capture.js +252 -0
  75. package/dist/config/token-capture.js.map +1 -0
  76. package/dist/config/token-manager.d.ts +38 -0
  77. package/dist/config/token-manager.d.ts.map +1 -0
  78. package/dist/config/token-manager.js +153 -0
  79. package/dist/config/token-manager.js.map +1 -0
  80. package/dist/lib/list-options.d.ts +69 -0
  81. package/dist/lib/list-options.d.ts.map +1 -0
  82. package/dist/lib/list-options.js +299 -0
  83. package/dist/lib/list-options.js.map +1 -0
  84. package/dist/types/personal.d.ts +113 -0
  85. package/dist/types/personal.d.ts.map +1 -0
  86. package/dist/types/personal.js +4 -0
  87. package/dist/types/personal.js.map +1 -0
  88. package/docs/AUTOMATIC-PUBLISHING.md +520 -0
  89. package/docs/CHANGELOG-AUTOMATION.md +418 -0
  90. package/docs/CI-CD-SETUP.md +582 -0
  91. package/docs/DEV-SETUP.md +512 -0
  92. package/docs/ENHANCEMENT-PLAN.md +204 -0
  93. package/docs/ENTITY-TYPES.md +462 -0
  94. package/docs/GITHUB-ACTIONS-GUIDE.md +367 -0
  95. package/docs/NPM-PUBLISHING.md +324 -0
  96. package/docs/OUTPUT-EXAMPLES.md +414 -0
  97. package/docs/OUTPUT-FORMATS.md +299 -0
  98. package/docs/TESTING.md +216 -0
  99. package/eslint.config.js +68 -0
  100. package/package.json +64 -0
  101. package/src/api/client.ts +88 -0
  102. package/src/api/personal/activities.ts +66 -0
  103. package/src/api/personal/boards.ts +14 -0
  104. package/src/api/personal/index.ts +25 -0
  105. package/src/api/personal/jobs.ts +33 -0
  106. package/src/api/personal/user.ts +10 -0
  107. package/src/cli.ts +487 -0
  108. package/src/commands/capture-session.ts +582 -0
  109. package/src/config/clerk-session-manager.ts +263 -0
  110. package/src/config/config-manager.ts +56 -0
  111. package/src/config/keychain-manager.ts +30 -0
  112. package/src/config/token-capture.ts +233 -0
  113. package/src/config/token-manager.ts +139 -0
  114. package/src/lib/list-options.ts +370 -0
  115. package/src/types/personal.ts +114 -0
  116. package/tests/example.test.ts +130 -0
  117. package/tsconfig.json +19 -0
@@ -0,0 +1,414 @@
1
+ # Output Format Examples and Usage Guide
2
+
3
+ This document provides practical examples for using huntr-cli's output formatting capabilities, including the new `--fields` parameter and PDF/Excel export formats.
4
+
5
+ ## Field Selection with `--fields`
6
+
7
+ All list commands support the `--fields` parameter to select specific columns:
8
+
9
+ ### Example: Boards with Custom Fields
10
+
11
+ ```bash
12
+ # Default: all fields (ID, Name, Created)
13
+ huntr boards list
14
+
15
+ # Only ID and Name
16
+ huntr boards list --fields ID,Name
17
+
18
+ # Only Name
19
+ huntr boards list --fields Name
20
+ ```
21
+
22
+ **Output with `--fields ID,Name`:**
23
+ ```
24
+ ID Name
25
+ 68bf9e33f871e5004a5eb58e My Job Search
26
+ 7c2d8e44g982f6115b6fc69f Secondary Board
27
+ ```
28
+
29
+ ### Example: Jobs with Field Selection
30
+
31
+ ```bash
32
+ # Default: ID, Title, URL, Created
33
+ huntr jobs list <board-id>
34
+
35
+ # Only Title and URL
36
+ huntr jobs list <board-id> --fields Title,URL
37
+
38
+ # Only Title
39
+ huntr jobs list <board-id> --fields Title
40
+ ```
41
+
42
+ **Output with `--fields Title,URL`:**
43
+ ```
44
+ Title URL
45
+ Senior Engineer at TechCorp https://techs.jobs/engineer
46
+ Product Manager at StartupXYZ https://jobs.com/pm-role
47
+ ```
48
+
49
+ ### Example: Activities with Field Selection
50
+
51
+ ```bash
52
+ # Default: Date, Type, Company, Job, Status
53
+ huntr activities list <board-id>
54
+
55
+ # Only Type, Company, and Status
56
+ huntr activities list <board-id> --fields Type,Company,Status
57
+
58
+ # Date and Company for quick reference
59
+ huntr activities list <board-id> --fields Date,Company
60
+ ```
61
+
62
+ **Available fields for activities:**
63
+ - `Date` — When the activity occurred
64
+ - `Type` — Action type (e.g., JOB_MOVED, NOTE_CREATED)
65
+ - `Company` — Company name
66
+ - `Job` — Job title (truncated to 40 chars)
67
+ - `Status` — List the job was moved to
68
+
69
+ ---
70
+
71
+ ## Output Formats
72
+
73
+ ### Table Format (Default)
74
+
75
+ ```bash
76
+ huntr jobs list <board-id>
77
+ ```
78
+
79
+ **Output:**
80
+ ```
81
+ ID Title URL Created
82
+ job_001 Senior Engineer at TechCorp https://techs.jobs/engineer 1/20/2024
83
+ job_002 Product Manager at StartupXYZ https://jobs.com/pm-role 1/18/2024
84
+ ```
85
+
86
+ **With field selection:**
87
+ ```bash
88
+ huntr jobs list <board-id> --fields Title,URL
89
+ ```
90
+
91
+ **Output:**
92
+ ```
93
+ Title URL
94
+ Senior Engineer at TechCorp https://techs.jobs/engineer
95
+ Product Manager at StartupXYZ https://jobs.com/pm-role
96
+ ```
97
+
98
+ ### JSON Format
99
+
100
+ ```bash
101
+ huntr jobs list <board-id> --format json
102
+ ```
103
+
104
+ **Output:**
105
+ ```json
106
+ [
107
+ {
108
+ "ID": "job_001",
109
+ "Title": "Senior Engineer at TechCorp",
110
+ "URL": "https://techs.jobs/engineer",
111
+ "Created": "1/20/2024"
112
+ },
113
+ {
114
+ "ID": "job_002",
115
+ "Title": "Product Manager at StartupXYZ",
116
+ "URL": "https://jobs.com/pm-role",
117
+ "Created": "1/18/2024"
118
+ }
119
+ ]
120
+ ```
121
+
122
+ **With field selection:**
123
+ ```bash
124
+ huntr jobs list <board-id> --format json --fields Title,URL
125
+ ```
126
+
127
+ **Output:**
128
+ ```json
129
+ [
130
+ {
131
+ "Title": "Senior Engineer at TechCorp",
132
+ "URL": "https://techs.jobs/engineer"
133
+ },
134
+ {
135
+ "Title": "Product Manager at StartupXYZ",
136
+ "URL": "https://jobs.com/pm-role"
137
+ }
138
+ ]
139
+ ```
140
+
141
+ ### CSV Format
142
+
143
+ ```bash
144
+ huntr jobs list <board-id> --format csv
145
+ ```
146
+
147
+ **Output:**
148
+ ```
149
+ ID,Title,URL,Created
150
+ job_001,Senior Engineer at TechCorp,https://techs.jobs/engineer,1/20/2024
151
+ job_002,Product Manager at StartupXYZ,https://jobs.com/pm-role,1/18/2024
152
+ ```
153
+
154
+ **With field selection:**
155
+ ```bash
156
+ huntr jobs list <board-id> --format csv --fields Title,URL
157
+ ```
158
+
159
+ **Output:**
160
+ ```
161
+ Title,URL
162
+ Senior Engineer at TechCorp,https://techs.jobs/engineer
163
+ Product Manager at StartupXYZ,https://jobs.com/pm-role
164
+ ```
165
+
166
+ **Save to file:**
167
+ ```bash
168
+ huntr jobs list <board-id> --format csv > jobs.csv
169
+ huntr activities list <board-id> --days 7 --format csv > week-activities.csv
170
+ ```
171
+
172
+ ### PDF Format
173
+
174
+ ```bash
175
+ huntr jobs list <board-id> --format pdf > jobs.pdf
176
+ ```
177
+
178
+ Creates a professional PDF with:
179
+ - Column headers (bold white text on blue background)
180
+ - Alternate row shading for readability
181
+ - Auto-sized columns
182
+ - Metadata (generation date)
183
+ - Footer with "huntr-cli" branding
184
+
185
+ **With field selection:**
186
+ ```bash
187
+ huntr activities list <board-id> --days 7 --format pdf --fields Date,Type,Company > week-activities.pdf
188
+ ```
189
+
190
+ **Open PDF:**
191
+ ```bash
192
+ # macOS
193
+ huntr jobs list <board-id> --format pdf | open -f -a Preview
194
+
195
+ # Linux
196
+ huntr jobs list <board-id> --format pdf > jobs.pdf && xdg-open jobs.pdf
197
+
198
+ # Windows
199
+ huntr jobs list <board-id> --format pdf > jobs.pdf && start jobs.pdf
200
+ ```
201
+
202
+ ### Excel Format
203
+
204
+ ```bash
205
+ huntr jobs list <board-id> --format excel > jobs.xlsx
206
+ ```
207
+
208
+ Creates an Excel workbook with:
209
+ - Bold blue header row
210
+ - Auto-adjusted column widths (max 50 chars)
211
+ - Professional formatting
212
+ - Landscape orientation
213
+ - Sheet name based on entity type
214
+
215
+ **With field selection:**
216
+ ```bash
217
+ huntr activities list <board-id> --days 7 --format excel --fields Date,Type,Company,Status > week-activities.xlsx
218
+ ```
219
+
220
+ **Open Excel:**
221
+ ```bash
222
+ # macOS
223
+ huntr jobs list <board-id> --format excel | open -f -a "Microsoft Excel"
224
+
225
+ # Windows
226
+ huntr jobs list <board-id> --format excel > jobs.xlsx && start jobs.xlsx
227
+
228
+ # Linux (LibreOffice)
229
+ huntr jobs list <board-id> --format excel > jobs.xlsx && libreoffice jobs.xlsx
230
+ ```
231
+
232
+ ---
233
+
234
+ ## Practical Examples
235
+
236
+ ### Example 1: Export Activities for Reporting
237
+
238
+ Export the past week of activities as Excel for a manager report:
239
+
240
+ ```bash
241
+ huntr activities list <board-id> --days 7 --format excel --fields Date,Type,Company,Job,Status > report.xlsx
242
+ ```
243
+
244
+ ### Example 2: Quick CSV for Spreadsheet Import
245
+
246
+ Get a CSV of all jobs for import into Google Sheets:
247
+
248
+ ```bash
249
+ huntr jobs list <board-id> --format csv --fields Title,URL,Created > import.csv
250
+ ```
251
+
252
+ Then in Google Sheets: File → Import → Upload → import.csv
253
+
254
+ ### Example 3: List Jobs Without URLs
255
+
256
+ If you just want to see job titles and creation dates:
257
+
258
+ ```bash
259
+ huntr jobs list <board-id> --format table --fields Title,Created
260
+ ```
261
+
262
+ ### Example 4: Parse Activities with jq
263
+
264
+ Combine JSON output with jq for programmatic access:
265
+
266
+ ```bash
267
+ # Get all companies from activities
268
+ huntr activities list <board-id> --days 30 --format json | jq '.[].Company'
269
+
270
+ # Get activities for a specific company
271
+ huntr activities list <board-id> --days 30 --format json | jq 'map(select(.Company == "TechCorp"))'
272
+
273
+ # Count activities by type
274
+ huntr activities list <board-id> --days 30 --format json | jq 'group_by(.Type) | map({type: .[0].Type, count: length})'
275
+ ```
276
+
277
+ ### Example 5: Pipe to Mail
278
+
279
+ Email a PDF report of this week's activities:
280
+
281
+ ```bash
282
+ huntr activities list <board-id> --days 7 --format pdf \
283
+ | mail -s "Weekly Job Search Report" your-email@example.com -a "Content-Type: application/pdf"
284
+ ```
285
+
286
+ ### Example 6: Automated Backup
287
+
288
+ Create a daily backup of all activities as CSV:
289
+
290
+ ```bash
291
+ #!/bin/bash
292
+ BOARD_ID="68bf9e33f871e5004a5eb58e"
293
+ DATE=$(date +%Y-%m-%d)
294
+ huntr activities list $BOARD_ID --format csv > "backup-activities-${DATE}.csv"
295
+ ```
296
+
297
+ Add to crontab to run daily:
298
+
299
+ ```bash
300
+ 0 2 * * * /path/to/backup-activities.sh
301
+ ```
302
+
303
+ ---
304
+
305
+ ## Field Reference
306
+
307
+ ### Boards List
308
+ - `ID` — Unique board identifier
309
+ - `Name` — Board name (or "N/A")
310
+ - `Created` — Creation date (MM/DD/YYYY)
311
+
312
+ ### Jobs List
313
+ - `ID` — Unique job identifier
314
+ - `Title` — Job title
315
+ - `URL` — Job posting URL (or "N/A")
316
+ - `Created` — Creation date (MM/DD/YYYY)
317
+
318
+ ### Activities List
319
+ - `Date` — Activity timestamp (YYYY-MM-DDTHH:MM format)
320
+ - `Type` — Action type (e.g., JOB_MOVED, NOTE_CREATED, JOB_APPLICATION)
321
+ - `Company` — Company name (empty string if not available)
322
+ - `Job` — Job title, truncated to 40 characters
323
+ - `Status` — Board list name the job was moved to (empty if not applicable)
324
+
325
+ ---
326
+
327
+ ## Error Handling
328
+
329
+ ### Invalid Field Name
330
+
331
+ ```bash
332
+ $ huntr jobs list <board-id> --fields Title,InvalidField
333
+ Error: Unknown field(s): InvalidField
334
+ Available fields: ID, Title, URL, Created
335
+ ```
336
+
337
+ ### Invalid Format
338
+
339
+ ```bash
340
+ $ huntr jobs list <board-id> --format doc
341
+ Error: Invalid format: doc. Must be table, json, csv, pdf, or excel.
342
+ ```
343
+
344
+ ### Missing Dependencies
345
+
346
+ If PDF or Excel format is used without dependencies installed:
347
+
348
+ ```bash
349
+ $ huntr jobs list <board-id> --format pdf
350
+ Error: PDF format requires the pdfkit package. Install with: npm install pdfkit
351
+ ```
352
+
353
+ *This shouldn't happen if installed via npm, but mentioned for reference.*
354
+
355
+ ---
356
+
357
+ ## Tips and Best Practices
358
+
359
+ 1. **Default behavior unchanged** — Running a command without `--format` or `--fields` works exactly as before
360
+ 2. **Field order matters** — Fields are output in the order specified: `--fields Company,Job,Date`
361
+ 3. **Case-sensitive** — Field names must match exactly: `Company`, not `company`
362
+ 4. **All formats have headers** — Table, CSV, PDF, and Excel all include column headers
363
+ 5. **CSV is RFC 4180** — Proper escaping for quotes and commas
364
+ 6. **PDF is single-page** — May wrap text if many columns; use `--fields` to reduce
365
+ 7. **Excel auto-fits columns** — Column widths auto-adjust up to 50 characters
366
+ 8. **Piping works** — Use `> filename` to save output to file
367
+
368
+ ---
369
+
370
+ ## Combining with Other Tools
371
+
372
+ ### Bash
373
+
374
+ ```bash
375
+ # Count rows
376
+ huntr jobs list <board-id> --format csv | wc -l
377
+
378
+ # Filter by URL
379
+ huntr jobs list <board-id> --format csv | grep "github.com"
380
+
381
+ # Sort by creation date
382
+ huntr activities list <board-id> --format csv | sort -t',' -k1
383
+ ```
384
+
385
+ ### Shell Scripts
386
+
387
+ ```bash
388
+ #!/bin/bash
389
+ BOARD="${1:-default-board-id}"
390
+ DAYS="${2:-7}"
391
+
392
+ echo "=== Weekly Summary ==="
393
+ huntr activities list "$BOARD" --days "$DAYS" --format json | jq length
394
+ echo "activities found"
395
+
396
+ echo "=== Top Companies ==="
397
+ huntr activities list "$BOARD" --days "$DAYS" --format json \
398
+ | jq -r '.[].Company' | sort | uniq -c | sort -rn
399
+ ```
400
+
401
+ ### Make
402
+
403
+ ```Makefile
404
+ export-jobs:
405
+ huntr jobs list <board-id> --format excel --fields Title,URL > jobs.xlsx
406
+
407
+ report-week:
408
+ huntr activities list <board-id> --days 7 --format pdf > report.pdf
409
+
410
+ backup:
411
+ huntr boards list --format csv > backup-boards.csv
412
+ huntr jobs list <board-id> --format csv > backup-jobs.csv
413
+ huntr activities list <board-id> --format csv > backup-activities.csv
414
+ ```
@@ -0,0 +1,299 @@
1
+ # Output Formats and Field Reference
2
+
3
+ This document explains what fields are included in each output format (table, JSON, CSV, and planned PDF/Excel) for each huntr-cli command.
4
+
5
+ ## Current Output Structure
6
+
7
+ ### `me` — User Profile
8
+
9
+ **Available formats:** Table (text), JSON only
10
+
11
+ **Text output (default):**
12
+ ```
13
+ Name: John Doe
14
+ Email: john@example.com
15
+ ID: user_123
16
+ ```
17
+
18
+ **JSON output:**
19
+ ```json
20
+ {
21
+ "id": "user_123",
22
+ "_id": "507f1f77bcf86cd799439011",
23
+ "email": "john@example.com",
24
+ "givenName": "John",
25
+ "familyName": "Doe",
26
+ "firstName": "John",
27
+ "lastName": "Doe",
28
+ "createdAt": "2024-01-15T10:30:00Z"
29
+ }
30
+ ```
31
+
32
+ **Note:** This command doesn't support `--format` flag (text output is default, use `--json` for JSON).
33
+
34
+ ---
35
+
36
+ ### `boards list` — All Boards
37
+
38
+ **Fields included:** ID, Name, Created
39
+
40
+ **Table output:**
41
+ ```
42
+ ID Name Created
43
+ 68bf9e33f871e5004a5eb58e My Job Search 1/15/2024
44
+ 7c2d8e44g982f6115b6fc69f Secondary Board 2/20/2024
45
+ ```
46
+
47
+ **JSON output:**
48
+ ```json
49
+ [
50
+ {
51
+ "ID": "68bf9e33f871e5004a5eb58e",
52
+ "Name": "My Job Search",
53
+ "Created": "1/15/2024"
54
+ }
55
+ ]
56
+ ```
57
+
58
+ **CSV output:**
59
+ ```
60
+ ID,Name,Created
61
+ 68bf9e33f871e5004a5eb58e,My Job Search,1/15/2024
62
+ ```
63
+
64
+ ---
65
+
66
+ ### `boards get <board-id>` — Single Board Details
67
+
68
+ **Available formats:** Table (text), JSON only
69
+
70
+ **Text output (default):**
71
+ ```
72
+ Board: My Job Search
73
+ ID: 68bf9e33f871e5004a5eb58e
74
+ Created: 1/15/2024 10:30 AM
75
+
76
+ Lists:
77
+ - Active Leads
78
+ - Interviewing
79
+ - Offers
80
+ ```
81
+
82
+ **JSON output:**
83
+ ```json
84
+ {
85
+ "id": "68bf9e33f871e5004a5eb58e",
86
+ "_id": "507f1f77bcf86cd799439011",
87
+ "name": "My Job Search",
88
+ "createdAt": "2024-01-15T10:30:00Z",
89
+ "updatedAt": "2024-02-20T15:45:00Z",
90
+ "lists": [
91
+ {
92
+ "id": "list_1",
93
+ "_id": "507f1f77bcf86cd799439012",
94
+ "name": "Active Leads",
95
+ "order": 1
96
+ }
97
+ ]
98
+ }
99
+ ```
100
+
101
+ ---
102
+
103
+ ### `jobs list <board-id>` — All Jobs on a Board
104
+
105
+ **Fields included:** ID, Title, URL, Created
106
+
107
+ **Table output:**
108
+ ```
109
+ ID Title URL Created
110
+ job_001 Senior Engineer at TechCorp https://techs.jobs/engineer 1/20/2024
111
+ job_002 Product Manager at StartupXYZ https://jobs.com/pm-role 1/18/2024
112
+ ```
113
+
114
+ **JSON output:**
115
+ ```json
116
+ [
117
+ {
118
+ "ID": "job_001",
119
+ "Title": "Senior Engineer at TechCorp",
120
+ "URL": "https://techs.jobs/engineer",
121
+ "Created": "1/20/2024"
122
+ }
123
+ ]
124
+ ```
125
+
126
+ **CSV output:**
127
+ ```
128
+ ID,Title,URL,Created
129
+ job_001,Senior Engineer at TechCorp,https://techs.jobs/engineer,1/20/2024
130
+ ```
131
+
132
+ ---
133
+
134
+ ### `jobs get <board-id> <job-id>` — Single Job Details
135
+
136
+ **Available formats:** Table (text), JSON only
137
+
138
+ **Text output (default):**
139
+ ```
140
+ Job Details:
141
+ Title: Senior Engineer at TechCorp
142
+ URL: https://techs.jobs/engineer
143
+ Location: San Francisco, CA
144
+ Salary: 120000 - 150000 USD
145
+ Created: 1/20/2024 2:15 PM
146
+ ```
147
+
148
+ **JSON output:**
149
+ ```json
150
+ {
151
+ "_id": "507f1f77bcf86cd799439011",
152
+ "id": "job_001",
153
+ "title": "Senior Engineer at TechCorp",
154
+ "url": "https://techs.jobs/engineer",
155
+ "rootDomain": "techs.jobs",
156
+ "htmlDescription": "...",
157
+ "_company": "company_1",
158
+ "_list": "list_1",
159
+ "_board": "board_1",
160
+ "_activities": ["action_1", "action_2"],
161
+ "_notes": ["note_1"],
162
+ "salary": {
163
+ "min": 120000,
164
+ "max": 150000,
165
+ "currency": "USD"
166
+ },
167
+ "location": {
168
+ "address": "San Francisco, CA",
169
+ "name": "San Francisco",
170
+ "lat": "37.7749",
171
+ "lng": "-122.4194"
172
+ },
173
+ "createdAt": "2024-01-20T14:15:00Z",
174
+ "updatedAt": "2024-02-15T10:00:00Z",
175
+ "lastMovedAt": "2024-02-18T09:30:00Z"
176
+ }
177
+ ```
178
+
179
+ ---
180
+
181
+ ### `activities list <board-id>` — Activity Log
182
+
183
+ **Fields included:** Date, Type, Company, Job, Status
184
+
185
+ **Supported options:**
186
+ - `--days <n>` — Filter to last N days
187
+ - `--types <types>` — Comma-separated action types (e.g., `JOB_MOVED,NOTE_CREATED`)
188
+
189
+ **Table output:**
190
+ ```
191
+ Date Type Company Job Status
192
+ 2024-02-20T15:00 JOB_MOVED TechCorp Senior Engineer at TechCorp Interviewing
193
+ 2024-02-18T10:30 NOTE_CREATED StartupXYZ Product Manager at StartupXYZ Active Leads
194
+ 2024-02-15T14:15 JOB_APPLICATION Google Staff Engineer - Infrastructure Applied
195
+ ```
196
+
197
+ **JSON output:**
198
+ ```json
199
+ [
200
+ {
201
+ "Date": "2024-02-20T15:00",
202
+ "Type": "JOB_MOVED",
203
+ "Company": "TechCorp",
204
+ "Job": "Senior Engineer at TechCorp",
205
+ "Status": "Interviewing"
206
+ }
207
+ ]
208
+ ```
209
+
210
+ **CSV output:**
211
+ ```
212
+ Date,Type,Company,Job,Status
213
+ 2024-02-20T15:00,JOB_MOVED,TechCorp,Senior Engineer at TechCorp,Interviewing
214
+ ```
215
+
216
+ ---
217
+
218
+ ### `activities week-csv <board-id>` — Last 7 Days as CSV
219
+
220
+ **Fields included:** Date, Action, Company, Job Title, Status, Job URL
221
+
222
+ **Output (CSV only):**
223
+ ```
224
+ Date,Action,Company,Job Title,Status,Job URL
225
+ 2024-02-20,JOB_MOVED,TechCorp,Senior Engineer at TechCorp,Interviewing,https://techs.jobs/engineer
226
+ ```
227
+
228
+ ---
229
+
230
+ ## Planned Enhancements
231
+
232
+ ### `--fields` Parameter
233
+
234
+ All list commands (`boards list`, `jobs list`, `activities list`) will support a `--fields` parameter to select specific columns:
235
+
236
+ ```bash
237
+ # Default: all fields
238
+ huntr boards list
239
+
240
+ # Specific fields
241
+ huntr boards list --fields ID,Name
242
+ huntr jobs list <board-id> --fields Title,URL
243
+ huntr activities list <board-id> --fields Date,Type,Company
244
+ ```
245
+
246
+ **Behavior:**
247
+ - If `--fields` is not provided, all default fields are included
248
+ - Fields are case-sensitive and match the column headers exactly
249
+ - Invalid field names will raise an error with available options
250
+
251
+ ### PDF Output Format
252
+
253
+ New `--format pdf` option for list commands:
254
+
255
+ ```bash
256
+ huntr activities list <board-id> --days 7 --format pdf > activities.pdf
257
+ ```
258
+
259
+ **Details:**
260
+ - Includes all selected fields (or default fields if `--fields` not specified)
261
+ - Column headers always included
262
+ - Professional formatting with borders
263
+ - Metadata: command, date, board ID
264
+
265
+ ### Excel Output Format
266
+
267
+ New `--format excel` option for list commands:
268
+
269
+ ```bash
270
+ huntr jobs list <board-id> --format excel > jobs.xlsx
271
+ ```
272
+
273
+ **Details:**
274
+ - Column headers always included
275
+ - Auto-adjusted column widths
276
+ - Professional cell formatting
277
+ - One sheet per entity type
278
+
279
+ ---
280
+
281
+ ## Summary: Which Formats Include Headers
282
+
283
+ | Format | Headers | Notes |
284
+ |--------|---------|-------|
285
+ | **Table** | ✅ Yes | Always shown as first row with divider |
286
+ | **JSON** | N/A | JSON object keys are self-documenting |
287
+ | **CSV** | ✅ Yes | RFC 4180 compliant with proper escaping |
288
+ | **PDF** | ✅ Yes | Professional header row |
289
+ | **Excel** | ✅ Yes | Excel header row with formatting |
290
+
291
+ ---
292
+
293
+ ## Implementation Notes
294
+
295
+ - **Field Selection:** The `--fields` parameter works with all output formats
296
+ - **Validation:** Invalid field names are caught early with helpful error messages
297
+ - **Default Fields:** Each command has sensible defaults (e.g., activities default to Date, Type, Company, Job, Status)
298
+ - **CSV Escaping:** Already implemented using RFC 4180 standards
299
+ - **Date Formatting:** Dates are formatted consistently across all formats