jobseek-cli 1.0.0

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 (49) hide show
  1. package/dist/commands/applications.d.ts +2 -0
  2. package/dist/commands/applications.js +198 -0
  3. package/dist/commands/applications.js.map +1 -0
  4. package/dist/commands/auth.d.ts +2 -0
  5. package/dist/commands/auth.js +315 -0
  6. package/dist/commands/auth.js.map +1 -0
  7. package/dist/commands/claims.d.ts +2 -0
  8. package/dist/commands/claims.js +355 -0
  9. package/dist/commands/claims.js.map +1 -0
  10. package/dist/commands/jobs.d.ts +2 -0
  11. package/dist/commands/jobs.js +240 -0
  12. package/dist/commands/jobs.js.map +1 -0
  13. package/dist/commands/profile.d.ts +2 -0
  14. package/dist/commands/profile.js +116 -0
  15. package/dist/commands/profile.js.map +1 -0
  16. package/dist/commands/question.d.ts +2 -0
  17. package/dist/commands/question.js +54 -0
  18. package/dist/commands/question.js.map +1 -0
  19. package/dist/commands/resume.d.ts +2 -0
  20. package/dist/commands/resume.js +209 -0
  21. package/dist/commands/resume.js.map +1 -0
  22. package/dist/commands/search.d.ts +2 -0
  23. package/dist/commands/search.js +192 -0
  24. package/dist/commands/search.js.map +1 -0
  25. package/dist/commands/ssh-key.d.ts +2 -0
  26. package/dist/commands/ssh-key.js +151 -0
  27. package/dist/commands/ssh-key.js.map +1 -0
  28. package/dist/index.d.ts +2 -0
  29. package/dist/index.js +72 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/lib/api-client.d.ts +16 -0
  32. package/dist/lib/api-client.js +59 -0
  33. package/dist/lib/api-client.js.map +1 -0
  34. package/dist/lib/config.d.ts +19 -0
  35. package/dist/lib/config.js +56 -0
  36. package/dist/lib/config.js.map +1 -0
  37. package/dist/lib/errors.d.ts +11 -0
  38. package/dist/lib/errors.js +23 -0
  39. package/dist/lib/errors.js.map +1 -0
  40. package/dist/lib/oauth.d.ts +41 -0
  41. package/dist/lib/oauth.js +210 -0
  42. package/dist/lib/oauth.js.map +1 -0
  43. package/dist/lib/output.d.ts +20 -0
  44. package/dist/lib/output.js +109 -0
  45. package/dist/lib/output.js.map +1 -0
  46. package/dist/lib/ssh.d.ts +25 -0
  47. package/dist/lib/ssh.js +103 -0
  48. package/dist/lib/ssh.js.map +1 -0
  49. package/package.json +52 -0
@@ -0,0 +1,355 @@
1
+ import { input, select } from '@inquirer/prompts';
2
+ import { requireApiKey, resolveApiUrl } from '../lib/config.js';
3
+ import { ApiClient } from '../lib/api-client.js';
4
+ import * as out from '../lib/output.js';
5
+ const ACTIVITY_TYPES = [
6
+ 'JOB_APPLICATION',
7
+ 'NETWORKING_EVENT',
8
+ 'CAREER_COUNSELING',
9
+ 'JOB_INTERVIEW',
10
+ 'RESUME_SUBMISSION',
11
+ 'EMPLOYER_CONTACT',
12
+ 'ONLINE_JOB_SEARCH',
13
+ 'TRAINING_WORKSHOP',
14
+ 'OTHER',
15
+ ];
16
+ export function registerClaimsCommands(program) {
17
+ const claims = program
18
+ .command('claims')
19
+ .description('List unemployment insurance claims')
20
+ .action(async () => {
21
+ const parentOpts = program.opts();
22
+ const apiKey = requireApiKey(parentOpts.apiKey);
23
+ const apiUrl = resolveApiUrl(parentOpts.apiUrl);
24
+ const client = new ApiClient(apiUrl, apiKey);
25
+ const spin = out.spinner('Fetching claims...');
26
+ spin.start();
27
+ try {
28
+ const data = await client.get('/api/ui-claims');
29
+ spin.stop();
30
+ if (out.isJsonMode()) {
31
+ out.outputJson(data);
32
+ return;
33
+ }
34
+ if (!data.length) {
35
+ out.info('No claims found. Create one with `jobseek claims create`.');
36
+ return;
37
+ }
38
+ for (const claim of data) {
39
+ out.heading(`${claim.state} Claim`);
40
+ out.keyValue('Status', out.statusColor(claim.status));
41
+ out.keyValue('Weekly Benefit', out.formatCents(claim.weeklyBenefitAmount));
42
+ out.keyValue('Balance', out.formatCents(claim.balanceRemaining));
43
+ out.keyValue('Work Search/Week', String(claim.minWorkSearchPerWeek));
44
+ out.keyValue('Certification', claim.certificationFrequency);
45
+ out.keyValue('Activities Logged', String(claim._count.workSearchActivities));
46
+ if (claim.certifications?.length) {
47
+ console.log();
48
+ out.info('Upcoming Certifications:');
49
+ for (const cert of claim.certifications) {
50
+ console.log(` ${out.formatDate(cert.weekStartDate)} – ${out.formatDate(cert.weekEndDate)} (due ${out.formatDate(cert.certificationDeadline)})`);
51
+ }
52
+ }
53
+ }
54
+ }
55
+ catch (err) {
56
+ spin.stop();
57
+ out.error(err.message);
58
+ process.exit(1);
59
+ }
60
+ });
61
+ claims
62
+ .command('create')
63
+ .description('Create a new unemployment claim')
64
+ .option('--state <ST>', 'Two-letter state code')
65
+ .option('--filing-date <date>', 'Filing date (YYYY-MM-DD)')
66
+ .option('--claim-number <num>', 'State-assigned claim number')
67
+ .option('--weekly-benefit <cents>', 'Weekly benefit amount in cents')
68
+ .option('--max-benefit <cents>', 'Maximum total benefit in cents')
69
+ .action(async (opts) => {
70
+ const parentOpts = program.opts();
71
+ const apiKey = requireApiKey(parentOpts.apiKey);
72
+ const apiUrl = resolveApiUrl(parentOpts.apiUrl);
73
+ const client = new ApiClient(apiUrl, apiKey);
74
+ let state = opts.state;
75
+ if (!state) {
76
+ state = await input({ message: 'State code (e.g., CA, NY):' });
77
+ }
78
+ state = state.toUpperCase();
79
+ const body = { state };
80
+ if (opts.filingDate)
81
+ body.filingDate = opts.filingDate;
82
+ if (opts.claimNumber)
83
+ body.claimNumber = opts.claimNumber;
84
+ if (opts.weeklyBenefit)
85
+ body.weeklyBenefitAmount = Number(opts.weeklyBenefit);
86
+ if (opts.maxBenefit)
87
+ body.maxBenefitAmount = Number(opts.maxBenefit);
88
+ const spin = out.spinner('Creating claim...');
89
+ spin.start();
90
+ try {
91
+ const data = await client.post('/api/ui-claims', body);
92
+ spin.stop();
93
+ if (out.isJsonMode()) {
94
+ out.outputJson(data);
95
+ return;
96
+ }
97
+ out.success(`Claim created for ${data.state}`);
98
+ out.keyValue('Status', data.status);
99
+ out.keyValue('Work Search/Week', String(data.minWorkSearchPerWeek));
100
+ out.keyValue('Certification', data.certificationFrequency);
101
+ }
102
+ catch (err) {
103
+ spin.stop();
104
+ out.error(err.message);
105
+ process.exit(1);
106
+ }
107
+ });
108
+ claims
109
+ .command('log')
110
+ .description('Log a work search activity')
111
+ .option('--date <date>', 'Activity date (YYYY-MM-DD)')
112
+ .option('--type <type>', 'Activity type')
113
+ .option('--employer <name>', 'Employer name')
114
+ .option('--title <title>', 'Job title')
115
+ .option('--method <method>', 'Contact method')
116
+ .option('--description <text>', 'Description')
117
+ .option('--result <text>', 'Result')
118
+ .action(async (opts) => {
119
+ const parentOpts = program.opts();
120
+ const apiKey = requireApiKey(parentOpts.apiKey);
121
+ const apiUrl = resolveApiUrl(parentOpts.apiUrl);
122
+ const client = new ApiClient(apiUrl, apiKey);
123
+ let activityDate = opts.date;
124
+ let activityType = opts.type;
125
+ if (!activityDate) {
126
+ activityDate = await input({
127
+ message: 'Activity date (YYYY-MM-DD):',
128
+ default: new Date().toISOString().split('T')[0],
129
+ });
130
+ }
131
+ if (!activityType) {
132
+ activityType = await select({
133
+ message: 'Activity type:',
134
+ choices: ACTIVITY_TYPES.map(t => ({
135
+ name: t.replace(/_/g, ' ').toLowerCase().replace(/\b\w/g, c => c.toUpperCase()),
136
+ value: t,
137
+ })),
138
+ });
139
+ }
140
+ const body = { activityDate, activityType };
141
+ if (opts.employer)
142
+ body.employerName = opts.employer;
143
+ if (opts.title)
144
+ body.jobTitle = opts.title;
145
+ if (opts.method)
146
+ body.contactMethod = opts.method;
147
+ if (opts.description)
148
+ body.description = opts.description;
149
+ if (opts.result)
150
+ body.result = opts.result;
151
+ const spin = out.spinner('Logging activity...');
152
+ spin.start();
153
+ try {
154
+ const data = await client.post('/api/ui-claims/work-search', body);
155
+ spin.stop();
156
+ if (out.isJsonMode()) {
157
+ out.outputJson(data);
158
+ return;
159
+ }
160
+ out.success('Work search activity logged');
161
+ }
162
+ catch (err) {
163
+ spin.stop();
164
+ out.error(err.message);
165
+ process.exit(1);
166
+ }
167
+ });
168
+ claims
169
+ .command('generate-log')
170
+ .description('Generate formatted work search log for a period')
171
+ .requiredOption('--start <date>', 'Start date (YYYY-MM-DD)')
172
+ .requiredOption('--end <date>', 'End date (YYYY-MM-DD)')
173
+ .action(async (opts) => {
174
+ const parentOpts = program.opts();
175
+ const apiKey = requireApiKey(parentOpts.apiKey);
176
+ const apiUrl = resolveApiUrl(parentOpts.apiUrl);
177
+ const client = new ApiClient(apiUrl, apiKey);
178
+ const spin = out.spinner('Generating log...');
179
+ spin.start();
180
+ try {
181
+ const data = await client.post('/api/ui-claims/generate-log', {
182
+ weekStart: opts.start,
183
+ weekEnd: opts.end,
184
+ });
185
+ spin.stop();
186
+ if (out.isJsonMode()) {
187
+ out.outputJson(data);
188
+ return;
189
+ }
190
+ out.heading('Work Search Log');
191
+ out.keyValue('Activities', String(data.activityCount));
192
+ out.keyValue('Meets requirement', data.meetsRequirement ? 'Yes' : 'No');
193
+ console.log();
194
+ console.log(data.plainText);
195
+ }
196
+ catch (err) {
197
+ spin.stop();
198
+ out.error(err.message);
199
+ process.exit(1);
200
+ }
201
+ });
202
+ claims
203
+ .command('rules <state>')
204
+ .description('Show unemployment insurance rules for a state')
205
+ .action(async (state) => {
206
+ const parentOpts = program.opts();
207
+ const apiKey = requireApiKey(parentOpts.apiKey);
208
+ const apiUrl = resolveApiUrl(parentOpts.apiUrl);
209
+ const client = new ApiClient(apiUrl, apiKey);
210
+ const spin = out.spinner('Fetching state rules...');
211
+ spin.start();
212
+ try {
213
+ const data = await client.get(`/api/ui-claims/state-rules/${state.toUpperCase()}`);
214
+ spin.stop();
215
+ if (out.isJsonMode()) {
216
+ out.outputJson(data);
217
+ return;
218
+ }
219
+ out.heading(`${data.stateName} UI Rules`);
220
+ out.keyValue('Min Weekly Benefit', out.formatCents(data.minWeeklyBenefit));
221
+ out.keyValue('Max Weekly Benefit', out.formatCents(data.maxWeeklyBenefit));
222
+ out.keyValue('Max Benefit Weeks', data.maxBenefitWeeks != null ? String(data.maxBenefitWeeks) : 'N/A');
223
+ out.keyValue('Waiting Week', data.waitingWeekRequired ? 'Yes' : 'No');
224
+ out.keyValue('Work Search Required', data.workSearchRequired ? 'Yes' : 'No');
225
+ out.keyValue('Min Searches/Week', String(data.minWorkSearchPerWeek));
226
+ out.keyValue('Certification', data.certificationFrequency);
227
+ out.keyValue('Appeal Deadline', data.appealDeadlineDays != null ? `${data.appealDeadlineDays} days` : 'N/A');
228
+ if (data.phoneNumber || data.websiteUrl || data.onlinePortalUrl) {
229
+ console.log();
230
+ out.heading('Contact');
231
+ if (data.phoneNumber)
232
+ out.keyValue('Phone', data.phoneNumber);
233
+ if (data.websiteUrl)
234
+ out.keyValue('Website', data.websiteUrl);
235
+ if (data.onlinePortalUrl)
236
+ out.keyValue('Portal', data.onlinePortalUrl);
237
+ }
238
+ }
239
+ catch (err) {
240
+ spin.stop();
241
+ out.error(err.message);
242
+ process.exit(1);
243
+ }
244
+ });
245
+ claims
246
+ .command('guidance')
247
+ .description('Get AI-powered guidance for your unemployment situation')
248
+ .requiredOption('--state <ST>', 'Two-letter state code')
249
+ .requiredOption('--situation <text>', 'Description of your situation')
250
+ .action(async (opts) => {
251
+ const parentOpts = program.opts();
252
+ const apiKey = requireApiKey(parentOpts.apiKey);
253
+ const apiUrl = resolveApiUrl(parentOpts.apiUrl);
254
+ const client = new ApiClient(apiUrl, apiKey);
255
+ const spin = out.spinner('Getting guidance...');
256
+ spin.start();
257
+ try {
258
+ const data = await client.post('/api/ui-claims/guidance', {
259
+ state: opts.state.toUpperCase(),
260
+ situation: opts.situation,
261
+ });
262
+ spin.stop();
263
+ if (out.isJsonMode()) {
264
+ out.outputJson(data);
265
+ return;
266
+ }
267
+ out.heading('Eligibility Assessment');
268
+ console.log(' ' + data.eligibilityAssessment);
269
+ if (data.nextSteps?.length) {
270
+ console.log();
271
+ out.heading('Next Steps');
272
+ out.bulletList(data.nextSteps);
273
+ }
274
+ if (data.importantDeadlines?.length) {
275
+ console.log();
276
+ out.heading('Important Deadlines');
277
+ out.bulletList(data.importantDeadlines);
278
+ }
279
+ if (data.tips?.length) {
280
+ console.log();
281
+ out.heading('Tips');
282
+ out.bulletList(data.tips);
283
+ }
284
+ if (data.warnings?.length) {
285
+ console.log();
286
+ out.heading('Warnings');
287
+ for (const w of data.warnings) {
288
+ out.warn(w);
289
+ }
290
+ }
291
+ if (data.disclaimer) {
292
+ console.log();
293
+ out.info(data.disclaimer);
294
+ }
295
+ }
296
+ catch (err) {
297
+ spin.stop();
298
+ out.error(err.message);
299
+ process.exit(1);
300
+ }
301
+ });
302
+ claims
303
+ .command('prefill')
304
+ .description('Pre-fill certification answers based on work search activities')
305
+ .requiredOption('--start <date>', 'Start date (YYYY-MM-DD)')
306
+ .requiredOption('--end <date>', 'End date (YYYY-MM-DD)')
307
+ .action(async (opts) => {
308
+ const parentOpts = program.opts();
309
+ const apiKey = requireApiKey(parentOpts.apiKey);
310
+ const apiUrl = resolveApiUrl(parentOpts.apiUrl);
311
+ const client = new ApiClient(apiUrl, apiKey);
312
+ const spin = out.spinner('Pre-filling certification...');
313
+ spin.start();
314
+ try {
315
+ const data = await client.post('/api/ui-claims/certifications/prefill', {
316
+ weekStart: opts.start,
317
+ weekEnd: opts.end,
318
+ });
319
+ spin.stop();
320
+ if (out.isJsonMode()) {
321
+ out.outputJson(data);
322
+ return;
323
+ }
324
+ out.heading('Certification Pre-fill');
325
+ out.keyValue('Work Search Activities', String(data.workSearchCount));
326
+ console.log();
327
+ out.heading('Suggested Answers');
328
+ out.keyValue('Worked during week', data.answers.workedDuringWeek ? 'Yes' : 'No');
329
+ if (data.answers.hoursWorked != null)
330
+ out.keyValue('Hours worked', String(data.answers.hoursWorked));
331
+ if (data.answers.earningsAmount != null)
332
+ out.keyValue('Earnings', out.formatCents(data.answers.earningsAmount));
333
+ out.keyValue('Refused work', data.answers.refusedWork ? 'Yes' : 'No');
334
+ out.keyValue('Available for work', data.answers.availableForWork ? 'Yes' : 'No');
335
+ if (data.warnings?.length) {
336
+ console.log();
337
+ for (const w of data.warnings) {
338
+ out.warn(w);
339
+ }
340
+ }
341
+ if (data.notes?.length) {
342
+ console.log();
343
+ for (const n of data.notes) {
344
+ out.info(n);
345
+ }
346
+ }
347
+ }
348
+ catch (err) {
349
+ spin.stop();
350
+ out.error(err.message);
351
+ process.exit(1);
352
+ }
353
+ });
354
+ }
355
+ //# sourceMappingURL=claims.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claims.js","sourceRoot":"","sources":["../../src/commands/claims.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAC;AAkBxC,MAAM,cAAc,GAAG;IACnB,iBAAiB;IACjB,kBAAkB;IAClB,mBAAmB;IACnB,eAAe;IACf,mBAAmB;IACnB,kBAAkB;IAClB,mBAAmB;IACnB,mBAAmB;IACnB,OAAO;CACD,CAAC;AAEX,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACnD,MAAM,MAAM,GAAG,OAAO;SACjB,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAE7C,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;QAEb,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAY,gBAAgB,CAAC,CAAC;YAC3D,IAAI,CAAC,IAAI,EAAE,CAAC;YAEZ,IAAI,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;gBACnB,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACrB,OAAO;YACX,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACf,GAAG,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;gBACtE,OAAO;YACX,CAAC;YAED,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;gBACvB,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC;gBACpC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;gBACtD,GAAG,CAAC,QAAQ,CAAC,gBAAgB,EAAE,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;gBAC3E,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBACjE,GAAG,CAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;gBACrE,GAAG,CAAC,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBAC5D,GAAG,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;gBAE7E,IAAI,KAAK,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;oBAC/B,OAAO,CAAC,GAAG,EAAE,CAAC;oBACd,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;oBACrC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;wBACtC,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;oBACvJ,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;IAEP,MAAM;SACD,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,cAAc,EAAE,uBAAuB,CAAC;SAC/C,MAAM,CAAC,sBAAsB,EAAE,0BAA0B,CAAC;SAC1D,MAAM,CAAC,sBAAsB,EAAE,6BAA6B,CAAC;SAC7D,MAAM,CAAC,0BAA0B,EAAE,gCAAgC,CAAC;SACpE,MAAM,CAAC,uBAAuB,EAAE,gCAAgC,CAAC;SACjE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACnB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAE7C,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,KAAK,GAAG,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAE5B,MAAM,IAAI,GAA4B,EAAE,KAAK,EAAE,CAAC;QAChD,IAAI,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACvD,IAAI,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAC1D,IAAI,IAAI,CAAC,aAAa;YAAE,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9E,IAAI,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAErE,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;QAEb,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAM3B,gBAAgB,EAAE,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,IAAI,EAAE,CAAC;YAEZ,IAAI,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;gBACnB,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACrB,OAAO;YACX,CAAC;YAED,GAAG,CAAC,OAAO,CAAC,qBAAqB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/C,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACpC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;YACpE,GAAG,CAAC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;IAEP,MAAM;SACD,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,4BAA4B,CAAC;SACzC,MAAM,CAAC,eAAe,EAAE,4BAA4B,CAAC;SACrD,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC;SACxC,MAAM,CAAC,mBAAmB,EAAE,eAAe,CAAC;SAC5C,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC;SACtC,MAAM,CAAC,mBAAmB,EAAE,gBAAgB,CAAC;SAC7C,MAAM,CAAC,sBAAsB,EAAE,aAAa,CAAC;SAC7C,MAAM,CAAC,iBAAiB,EAAE,QAAQ,CAAC;SACnC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACnB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAE7C,IAAI,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC;QAC7B,IAAI,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC;QAE7B,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,YAAY,GAAG,MAAM,KAAK,CAAC;gBACvB,OAAO,EAAE,6BAA6B;gBACtC,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aAClD,CAAC,CAAC;QACP,CAAC;QAED,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,YAAY,GAAG,MAAM,MAAM,CAAC;gBACxB,OAAO,EAAE,gBAAgB;gBACzB,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC9B,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;oBAC/E,KAAK,EAAE,CAAC;iBACX,CAAC,CAAC;aACN,CAAC,CAAC;QACP,CAAC;QAED,MAAM,IAAI,GAA2B,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;QACpE,IAAI,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;QACrD,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;QAC3C,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;QAClD,IAAI,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAC1D,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE3C,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,EAAE,CAAC;QAEb,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAM,4BAA4B,EAAE,IAAI,CAAC,CAAC;YACxE,IAAI,CAAC,IAAI,EAAE,CAAC;YAEZ,IAAI,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;gBACnB,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACrB,OAAO;YACX,CAAC;YAED,GAAG,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;IAEP,MAAM;SACD,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,iDAAiD,CAAC;SAC9D,cAAc,CAAC,gBAAgB,EAAE,yBAAyB,CAAC;SAC3D,cAAc,CAAC,cAAc,EAAE,uBAAuB,CAAC;SACvD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACnB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAE7C,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;QAEb,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAI3B,6BAA6B,EAAE;gBAC9B,SAAS,EAAE,IAAI,CAAC,KAAK;gBACrB,OAAO,EAAE,IAAI,CAAC,GAAG;aACpB,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,EAAE,CAAC;YAEZ,IAAI,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;gBACnB,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACrB,OAAO;YACX,CAAC;YAED,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;YAC/B,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;YACvD,GAAG,CAAC,QAAQ,CAAC,mBAAmB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;IAEP,MAAM;SACD,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,+CAA+C,CAAC;SAC5D,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACpB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAE7C,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,EAAE,CAAC;QAEb,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAa1B,8BAA8B,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YACxD,IAAI,CAAC,IAAI,EAAE,CAAC;YAEZ,IAAI,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;gBACnB,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACrB,OAAO;YACX,CAAC;YAED,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,WAAW,CAAC,CAAC;YAC1C,GAAG,CAAC,QAAQ,CAAC,oBAAoB,EAAE,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC3E,GAAG,CAAC,QAAQ,CAAC,oBAAoB,EAAE,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC3E,GAAG,CAAC,QAAQ,CAAC,mBAAmB,EAAE,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACvG,GAAG,CAAC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACtE,GAAG,CAAC,QAAQ,CAAC,sBAAsB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC7E,GAAG,CAAC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;YACrE,GAAG,CAAC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAC3D,GAAG,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,kBAAkB,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAE7G,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC9D,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACvB,IAAI,IAAI,CAAC,WAAW;oBAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC9D,IAAI,IAAI,CAAC,UAAU;oBAAE,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC9D,IAAI,IAAI,CAAC,eAAe;oBAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YAC3E,CAAC;QACL,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;IAEP,MAAM;SACD,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,yDAAyD,CAAC;SACtE,cAAc,CAAC,cAAc,EAAE,uBAAuB,CAAC;SACvD,cAAc,CAAC,oBAAoB,EAAE,+BAA+B,CAAC;SACrE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACnB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAE7C,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,EAAE,CAAC;QAEb,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAO3B,yBAAyB,EAAE;gBAC1B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;gBAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;aAC5B,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,EAAE,CAAC;YAEZ,IAAI,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;gBACnB,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACrB,OAAO;YACX,CAAC;YAED,GAAG,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAE/C,IAAI,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;gBAC1B,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACnC,CAAC;YAED,IAAI,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC;gBAClC,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,GAAG,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;gBACnC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC5C,CAAC;YAED,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACpB,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;YAED,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBACxB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC5B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,CAAC;YACL,CAAC;YAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC9B,CAAC;QACL,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;IAEP,MAAM;SACD,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,gEAAgE,CAAC;SAC7E,cAAc,CAAC,gBAAgB,EAAE,yBAAyB,CAAC;SAC3D,cAAc,CAAC,cAAc,EAAE,uBAAuB,CAAC;SACvD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACnB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAE7C,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK,EAAE,CAAC;QAEb,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAW3B,uCAAuC,EAAE;gBACxC,SAAS,EAAE,IAAI,CAAC,KAAK;gBACrB,OAAO,EAAE,IAAI,CAAC,GAAG;aACpB,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,EAAE,CAAC;YAEZ,IAAI,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;gBACnB,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACrB,OAAO;YACX,CAAC;YAED,GAAG,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;YACtC,GAAG,CAAC,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;YAErE,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YACjC,GAAG,CAAC,QAAQ,CAAC,oBAAoB,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACjF,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI;gBAAE,GAAG,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;YACrG,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,IAAI;gBAAE,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;YAChH,GAAG,CAAC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACtE,GAAG,CAAC,QAAQ,CAAC,oBAAoB,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAEjF,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC5B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,CAAC;YACL,CAAC;YAED,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACzB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,CAAC;YACL,CAAC;QACL,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerJobCommands(program: Command): void;
@@ -0,0 +1,240 @@
1
+ import { input } from '@inquirer/prompts';
2
+ import { readFileSync } from 'node:fs';
3
+ import { resolve } from 'node:path';
4
+ import { requireApiKey, resolveApiUrl } from '../lib/config.js';
5
+ import { ApiClient } from '../lib/api-client.js';
6
+ import * as out from '../lib/output.js';
7
+ export function registerJobCommands(program) {
8
+ const jobs = program
9
+ .command('jobs')
10
+ .description('List analyzed job matches')
11
+ .option('--limit <n>', 'Maximum results', '20')
12
+ .option('--min-score <n>', 'Minimum match score (0-100)')
13
+ .option('--max-score <n>', 'Maximum match score (0-100)')
14
+ .option('--company <name>', 'Filter by company name')
15
+ .option('--applied', 'Only show applied jobs')
16
+ .option('--not-applied', 'Only show un-applied jobs')
17
+ .option('--sort <field>', 'Sort by: recent, matchScore, company', 'recent')
18
+ .option('--order <dir>', 'Sort order: asc, desc', 'desc')
19
+ .action(async (opts) => {
20
+ const parentOpts = program.opts();
21
+ const apiKey = requireApiKey(parentOpts.apiKey);
22
+ const apiUrl = resolveApiUrl(parentOpts.apiUrl);
23
+ const client = new ApiClient(apiUrl, apiKey);
24
+ const spin = out.spinner('Fetching jobs...');
25
+ spin.start();
26
+ try {
27
+ const params = {
28
+ limit: Number(opts.limit),
29
+ sortBy: opts.sort,
30
+ sortOrder: opts.order,
31
+ };
32
+ if (opts.minScore)
33
+ params.minMatchScore = Number(opts.minScore);
34
+ if (opts.maxScore)
35
+ params.maxMatchScore = Number(opts.maxScore);
36
+ if (opts.company)
37
+ params.company = opts.company;
38
+ if (opts.applied)
39
+ params.hasApplication = true;
40
+ if (opts.notApplied)
41
+ params.hasApplication = false;
42
+ const jobs = await client.get('/api/jobs', params);
43
+ spin.stop();
44
+ if (out.isJsonMode()) {
45
+ out.outputJson(jobs);
46
+ return;
47
+ }
48
+ if (!jobs.length) {
49
+ out.info('No jobs found. Analyze some jobs first with `jobseek jobs evaluate`.');
50
+ return;
51
+ }
52
+ const table = out.createTable(['Score', 'Title', 'Company', 'Location', 'Applied', 'Date']);
53
+ for (const job of jobs) {
54
+ table.push([
55
+ `${out.scoreIndicator(job.matchScore)} ${out.scoreColor(job.matchScore)}`,
56
+ out.truncate(job.title, 35),
57
+ out.truncate(job.company, 20),
58
+ out.truncate(job.location || job.workLocation || '—', 18),
59
+ job.applicationId ? '✓' : '—',
60
+ out.formatDate(job.createdAt),
61
+ ]);
62
+ }
63
+ console.log(table.toString());
64
+ // Summary stats
65
+ const scores = jobs.map(j => j.matchScore);
66
+ const avg = Math.round(scores.reduce((a, b) => a + b, 0) / scores.length);
67
+ const high = scores.filter(s => s >= 80).length;
68
+ const applied = jobs.filter(j => j.applicationId).length;
69
+ console.log();
70
+ out.keyValue('Jobs shown', String(jobs.length));
71
+ out.keyValue('Average score', out.scoreColor(avg));
72
+ out.keyValue('High matches (80%+)', String(high));
73
+ out.keyValue('Applied', String(applied));
74
+ }
75
+ catch (err) {
76
+ spin.stop();
77
+ out.error(err.message);
78
+ process.exit(1);
79
+ }
80
+ });
81
+ jobs
82
+ .command('analyze')
83
+ .description('Analyze job matches to find best fits and skill gaps')
84
+ .option('--mode <mode>', 'Analysis mode: best_fits, gaps, both', 'both')
85
+ .option('--limit <n>', 'Number of top matches', '5')
86
+ .action(async (opts) => {
87
+ const parentOpts = program.opts();
88
+ const apiKey = requireApiKey(parentOpts.apiKey);
89
+ const apiUrl = resolveApiUrl(parentOpts.apiUrl);
90
+ const client = new ApiClient(apiUrl, apiKey);
91
+ const spin = out.spinner('Analyzing matches...');
92
+ spin.start();
93
+ try {
94
+ const data = await client.get('/api/jobs/analyze', {
95
+ mode: opts.mode,
96
+ limit: Number(opts.limit),
97
+ });
98
+ spin.stop();
99
+ if (out.isJsonMode()) {
100
+ out.outputJson(data);
101
+ return;
102
+ }
103
+ if (data.message) {
104
+ out.info(data.message);
105
+ return;
106
+ }
107
+ if (data.bestMatches?.length) {
108
+ out.heading('Best Matches');
109
+ for (const match of data.bestMatches) {
110
+ console.log(` #${match.rank} ${out.scoreIndicator(match.matchScore)} ${out.scoreColor(match.matchScore)} ${match.title} at ${match.company}`);
111
+ if (match.strengths?.length) {
112
+ out.bulletList(match.strengths.slice(0, 3));
113
+ }
114
+ console.log();
115
+ }
116
+ }
117
+ if (data.gapAnalysis) {
118
+ const ga = data.gapAnalysis;
119
+ out.heading('Gap Analysis');
120
+ out.keyValue('Total jobs analyzed', String(ga.totalJobs));
121
+ out.keyValue('Average score', out.scoreColor(Math.round(ga.averageScore)));
122
+ if (ga.recurringGaps?.length) {
123
+ console.log();
124
+ out.heading('Recurring Gaps');
125
+ for (const gap of ga.recurringGaps) {
126
+ const pct = Math.round((gap.frequency / ga.totalJobs) * 100);
127
+ console.log(` ${gap.skill} — ${gap.frequency} jobs (${pct}%)`);
128
+ }
129
+ }
130
+ if (ga.topStrengths?.length) {
131
+ console.log();
132
+ out.heading('Top Strengths');
133
+ for (const str of ga.topStrengths) {
134
+ console.log(` ${str.skill} — ${str.frequency} jobs`);
135
+ }
136
+ }
137
+ }
138
+ }
139
+ catch (err) {
140
+ spin.stop();
141
+ out.error(err.message);
142
+ process.exit(1);
143
+ }
144
+ });
145
+ jobs
146
+ .command('evaluate')
147
+ .description('Evaluate how well a job matches your profile')
148
+ .option('--url <url>', 'Job listing URL')
149
+ .option('--title <title>', 'Job title')
150
+ .option('--company <company>', 'Company name')
151
+ .option('--description <text>', 'Job description text')
152
+ .option('--file <path>', 'Read job description from file')
153
+ .option('--location <location>', 'Job location')
154
+ .option('--salary <salary>', 'Salary information')
155
+ .action(async (opts) => {
156
+ const parentOpts = program.opts();
157
+ const apiKey = requireApiKey(parentOpts.apiKey);
158
+ const apiUrl = resolveApiUrl(parentOpts.apiUrl);
159
+ const client = new ApiClient(apiUrl, apiKey);
160
+ let title = opts.title;
161
+ let company = opts.company;
162
+ let description = opts.description;
163
+ let jobUrl = opts.url;
164
+ // Read description from file if provided
165
+ if (opts.file) {
166
+ try {
167
+ const filePath = resolve(opts.file.replace(/^~/, process.env.HOME || ''));
168
+ description = readFileSync(filePath, 'utf-8');
169
+ }
170
+ catch (err) {
171
+ out.error(`Cannot read file: ${err.message}`);
172
+ process.exit(1);
173
+ }
174
+ }
175
+ // Interactive mode if no URL and missing required fields
176
+ if (!jobUrl && (!title || !company || !description)) {
177
+ if (!title)
178
+ title = await input({ message: 'Job title:' });
179
+ if (!company)
180
+ company = await input({ message: 'Company:' });
181
+ if (!description)
182
+ description = await input({ message: 'Job description (paste text):' });
183
+ if (!jobUrl) {
184
+ const url = await input({ message: 'Job URL (optional):', default: '' });
185
+ if (url)
186
+ jobUrl = url;
187
+ }
188
+ }
189
+ // Build jobText like the MCP server does
190
+ const parts = [];
191
+ if (title)
192
+ parts.push(`Title: ${title}`);
193
+ if (company)
194
+ parts.push(`Company: ${company}`);
195
+ if (opts.location)
196
+ parts.push(`Location: ${opts.location}`);
197
+ if (opts.salary)
198
+ parts.push(`Salary: ${opts.salary}`);
199
+ if (description)
200
+ parts.push(`\nDescription:\n${description}`);
201
+ const jobText = parts.join('\n');
202
+ const spin = out.spinner('Evaluating job match...');
203
+ spin.start();
204
+ try {
205
+ const data = await client.post('/api/match-job', { jobText, jobUrl: jobUrl || '' });
206
+ spin.stop();
207
+ if (out.isJsonMode()) {
208
+ out.outputJson(data);
209
+ return;
210
+ }
211
+ out.heading('Job Match Result');
212
+ console.log(` ${out.scoreIndicator(data.matchScore)} Match Score: ${out.scoreColor(data.matchScore)}`);
213
+ console.log();
214
+ if (data.strengths?.length) {
215
+ out.heading('Strengths');
216
+ out.bulletList(data.strengths);
217
+ }
218
+ if (data.gaps?.length) {
219
+ console.log();
220
+ out.heading('Gaps');
221
+ out.bulletList(data.gaps);
222
+ }
223
+ if (data.recommendation) {
224
+ console.log();
225
+ out.heading('Recommendation');
226
+ console.log(' ' + data.recommendation);
227
+ }
228
+ if (data.url) {
229
+ console.log();
230
+ out.keyValue('Job saved', data.url);
231
+ }
232
+ }
233
+ catch (err) {
234
+ spin.stop();
235
+ out.error(err.message);
236
+ process.exit(1);
237
+ }
238
+ });
239
+ }
240
+ //# sourceMappingURL=jobs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/commands/jobs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerProfileCommands(program: Command): void;