careervivid 2.1.38 → 2.1.39

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 (36) hide show
  1. package/dist/agent/Tool.d.ts +1 -1
  2. package/dist/agent/Tool.d.ts.map +1 -1
  3. package/dist/agent/tools/interview.d.ts.map +1 -1
  4. package/dist/agent/tools/interview.js +5 -2
  5. package/dist/agent/tools/urlVerifier.d.ts +1 -0
  6. package/dist/agent/tools/urlVerifier.d.ts.map +1 -1
  7. package/dist/agent/tools/urlVerifier.js +294 -86
  8. package/dist/api.d.ts +7 -0
  9. package/dist/api.d.ts.map +1 -1
  10. package/dist/api.js +4 -0
  11. package/dist/apply/browser.d.ts +5 -0
  12. package/dist/apply/browser.d.ts.map +1 -1
  13. package/dist/apply/browser.js +1 -1
  14. package/dist/commands/agent/configurator.d.ts.map +1 -1
  15. package/dist/commands/agent/configurator.js +14 -0
  16. package/dist/commands/agent/index.d.ts.map +1 -1
  17. package/dist/commands/agent/index.js +3 -0
  18. package/dist/commands/agent/repl/engineLoop.d.ts.map +1 -1
  19. package/dist/commands/agent/repl/engineLoop.js +121 -116
  20. package/dist/commands/agent/repl/input.d.ts +2 -7
  21. package/dist/commands/agent/repl/input.d.ts.map +1 -1
  22. package/dist/commands/agent/repl/input.js +226 -17
  23. package/dist/commands/agent/repl.d.ts +3 -0
  24. package/dist/commands/agent/repl.d.ts.map +1 -1
  25. package/dist/commands/agent/repl.js +28 -1
  26. package/dist/commands/apply.d.ts.map +1 -1
  27. package/dist/commands/apply.js +24 -5
  28. package/dist/commands/auth.d.ts.map +1 -1
  29. package/dist/commands/auth.js +5 -4
  30. package/dist/commands/interview.d.ts.map +1 -1
  31. package/dist/commands/interview.js +76 -27
  32. package/dist/commands/jobs.d.ts.map +1 -1
  33. package/dist/commands/jobs.js +147 -4
  34. package/dist/commands/resumes.js +6 -6
  35. package/dist/index.js +4 -2
  36. package/package.json +1 -1
@@ -27,7 +27,7 @@ export interface Tool<P = any, R = any> {
27
27
  * @param params Validated arguments from the LLM.
28
28
  * @returns Resolves with JSON-serializable outputs or string.
29
29
  */
30
- execute: (params: P) => Promise<R>;
30
+ execute: (params: P, context?: any) => Promise<R>;
31
31
  }
32
32
  /**
33
33
  * Converts a Tool definition into a format accepted by @google/genai tool arrays.
@@ -1 +1 @@
1
- {"version":3,"file":"Tool.d.ts","sourceRoot":"","sources":["../../src/agent/Tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,cAAc,CAAC;IAC3B;;OAEG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;OAIG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,CAUlD"}
1
+ {"version":3,"file":"Tool.d.ts","sourceRoot":"","sources":["../../src/agent/Tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,cAAc,CAAC;IAC3B;;OAEG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;OAIG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CACnD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,GAAG,CAUlD"}
@@ -1 +1 @@
1
- {"version":3,"file":"interview.d.ts","sourceRoot":"","sources":["../../../src/agent/tools/interview.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAoFlC,eAAO,MAAM,kBAAkB,EAAE,IAqEhC,CAAC;AAIF,eAAO,MAAM,mBAAmB,EAAE,IAAI,EAAoD,CAAC"}
1
+ {"version":3,"file":"interview.d.ts","sourceRoot":"","sources":["../../../src/agent/tools/interview.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAyFlC,eAAO,MAAM,kBAAkB,EAAE,IAqEhC,CAAC;AAIF,eAAO,MAAM,mBAAmB,EAAE,IAAI,EAAoD,CAAC"}
@@ -24,6 +24,9 @@ async function runInterview(args) {
24
24
  "interview",
25
25
  "--role", args.role,
26
26
  ];
27
+ if (args.model) {
28
+ argv.push("--model", args.model);
29
+ }
27
30
  if (args.mode === "text")
28
31
  argv.push("--text");
29
32
  if (args.questions && args.questions > 0) {
@@ -133,8 +136,8 @@ DEFAULTS:
133
136
  required: ["role"],
134
137
  },
135
138
  requiresConfirmation: false,
136
- execute: async (args) => {
137
- return runInterview(args);
139
+ execute: async (args, currentModel) => {
140
+ return runInterview({ ...args, model: currentModel });
138
141
  },
139
142
  };
140
143
  import { FetchInterviewContextTool } from "./fetchInterviewContext.js";
@@ -15,6 +15,7 @@
15
15
  * 5. ATS legitimacy — is it on a known ATS (Ashby, Greenhouse, Lever, etc.)?
16
16
  */
17
17
  import { Tool } from "../Tool.js";
18
+ export declare function isGenericJobLanding(url: string): boolean;
18
19
  export interface UrlVerificationResult {
19
20
  url: string;
20
21
  ok: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"urlVerifier.d.ts","sourceRoot":"","sources":["../../../src/agent/tools/urlVerifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AA8ClC,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA6K3E;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EAAE,GACb,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAalC;AAID,eAAO,MAAM,aAAa,EAAE,IAkD3B,CAAC;AAIF,eAAO,MAAM,uBAAuB,EAAE,IAiDrC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,IAAI,EAGxC,CAAC"}
1
+ {"version":3,"file":"urlVerifier.d.ts","sourceRoot":"","sources":["../../../src/agent/tools/urlVerifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAqFlC,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAsBxD;AA8CD,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAmDD;;;GAGG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA4P3E;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EAAE,GACb,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAalC;AAID,eAAO,MAAM,aAAa,EAAE,IAkD3B,CAAC;AAIF,eAAO,MAAM,uBAAuB,EAAE,IAiDrC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,IAAI,EAGxC,CAAC"}
@@ -15,7 +15,9 @@
15
15
  * 5. ATS legitimacy — is it on a known ATS (Ashby, Greenhouse, Lever, etc.)?
16
16
  */
17
17
  import { Type } from "@google/genai";
18
- // ── Known ATS domains that are always trustworthy ─────────────────────────────
18
+ import { getChromeBinaryPath } from "../../apply/browser.js";
19
+ import { chromium } from "playwright-core";
20
+ // ── Known ATS domains that still need direct-job validation ───────────────────
19
21
  const TRUSTED_ATS_DOMAINS = [
20
22
  "greenhouse.io",
21
23
  "lever.co",
@@ -51,11 +53,154 @@ const TRUSTED_ATS_DOMAINS = [
51
53
  const SUSPICIOUS_PATTERNS = [
52
54
  /localhost/i,
53
55
  /127\.0\.0\./,
56
+ /^https?:\/\/0\.0\.0\.0/i,
57
+ /^https?:\/\/\[?::1\]?/i,
54
58
  /example\.(com|org|net)/i,
55
59
  /test\.(com|org)/i,
56
60
  /careers\.(io|app|xyz|online|site|info|biz)$/i, // generic TLDs on "careers" domains
57
61
  /jobs\.(io|app|xyz|online|site|info|biz)$/i,
58
62
  ];
63
+ const APPLY_PATTERNS = [
64
+ /\bapply\b/i,
65
+ /\bapply now\b/i,
66
+ /\bapply for this job\b/i,
67
+ /\bsubmit application\b/i,
68
+ /\bstart application\b/i,
69
+ /\beasy apply\b/i,
70
+ ];
71
+ const EXPIRED_CONTENT_PATTERNS = [
72
+ /job (is )?no longer available/i,
73
+ /job.*no longer open/i,
74
+ /position has been filled/i,
75
+ /this job has expired/i,
76
+ /job posting has expired/i,
77
+ /no longer accepting applications/i,
78
+ /this (position|role|job) (is )?no longer/i,
79
+ /this job (listing )?is closed/i,
80
+ /job (listing )?not found/i,
81
+ /the job you are looking for is no longer open/i,
82
+ ];
83
+ const JOB_SIGNALS = [
84
+ "apply", "job description", "responsibilities", "requirements",
85
+ "qualifications", "salary", "full-time", "part-time", "remote",
86
+ "position", "role", "candidate", "experience", "interview",
87
+ "benefits", "compensation", "jobposting", "about the role",
88
+ "what you'll do", "what you will do",
89
+ ];
90
+ function normalizePath(pathname) {
91
+ const cleaned = pathname.replace(/\/+$/, "");
92
+ return cleaned || "/";
93
+ }
94
+ export function isGenericJobLanding(url) {
95
+ try {
96
+ const parsed = new URL(url);
97
+ const path = normalizePath(parsed.pathname.toLowerCase());
98
+ const hasJobQuery = ["gh_jid", "jobid", "job_id", "jid", "currentjobid"].some((key) => parsed.searchParams.has(key));
99
+ if (hasJobQuery)
100
+ return false;
101
+ const host = parsed.hostname.toLowerCase();
102
+ const segments = path.split("/").filter(Boolean);
103
+ if (["/", "/careers", "/career", "/jobs", "/job", "/jobs/search", "/search"].includes(path)) {
104
+ return true;
105
+ }
106
+ if (host === "jobs.ashbyhq.com" && segments.length <= 1)
107
+ return true;
108
+ if (host === "jobs.lever.co" && segments.length <= 1)
109
+ return true;
110
+ if (host.includes("greenhouse.io") && segments.length <= 1)
111
+ return true;
112
+ return false;
113
+ }
114
+ catch {
115
+ return false;
116
+ }
117
+ }
118
+ function isJobSpecificUrl(url) {
119
+ try {
120
+ const parsed = new URL(url);
121
+ const path = normalizePath(parsed.pathname.toLowerCase());
122
+ const host = parsed.hostname.toLowerCase();
123
+ if (["gh_jid", "jobid", "job_id", "jid", "currentjobid"].some((key) => parsed.searchParams.has(key))) {
124
+ return true;
125
+ }
126
+ if (host === "jobs.ashbyhq.com") {
127
+ return /^\/[^/]+\/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}(\/application)?$/.test(path);
128
+ }
129
+ if (host === "jobs.lever.co")
130
+ return /^\/[^/]+\/[^/]+/.test(path);
131
+ if (host.includes("greenhouse.io"))
132
+ return /\/jobs?\/\d+/.test(path);
133
+ return /\/apply\/|\/jobs?\/\d+|\/job-postings?\//.test(path);
134
+ }
135
+ catch {
136
+ return false;
137
+ }
138
+ }
139
+ function stripHtml(html) {
140
+ return html
141
+ .replace(/<script[\s\S]*?<\/script>/gi, " ")
142
+ .replace(/<style[\s\S]*?<\/style>/gi, " ")
143
+ .replace(/<[^>]+>/g, " ")
144
+ .replace(/&nbsp;/g, " ")
145
+ .replace(/&amp;/g, "&")
146
+ .replace(/\s+/g, " ")
147
+ .trim();
148
+ }
149
+ async function fetchBodyText(url, signal) {
150
+ const bodyRes = await fetch(url, {
151
+ method: "GET",
152
+ redirect: "follow",
153
+ signal,
154
+ headers: {
155
+ "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
156
+ "Accept": "text/html,application/xhtml+xml",
157
+ },
158
+ });
159
+ return stripHtml(await bodyRes.text());
160
+ }
161
+ /**
162
+ * Playwright browser fallback verifier for JS-heavy job application sites.
163
+ */
164
+ async function verifyUrlWithPlaywright(url) {
165
+ const executablePath = getChromeBinaryPath();
166
+ if (!executablePath) {
167
+ return { ok: false, reason: "Local Chrome binary not found." };
168
+ }
169
+ let browser;
170
+ try {
171
+ browser = await chromium.launch({
172
+ executablePath,
173
+ headless: true,
174
+ args: ["--no-sandbox", "--disable-dev-shm-usage"]
175
+ });
176
+ const context = await browser.newContext({
177
+ userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
178
+ });
179
+ const page = await context.newPage();
180
+ const response = await page.goto(url, { waitUntil: "networkidle", timeout: 10000 });
181
+ const finalUrl = page.url();
182
+ const status = response ? response.status() : 200;
183
+ const html = await page.content();
184
+ const bodyText = stripHtml(html);
185
+ return {
186
+ ok: true,
187
+ status,
188
+ finalUrl,
189
+ bodyText,
190
+ };
191
+ }
192
+ catch (err) {
193
+ return {
194
+ ok: false,
195
+ reason: err.message,
196
+ };
197
+ }
198
+ finally {
199
+ if (browser) {
200
+ await browser.close().catch(() => { });
201
+ }
202
+ }
203
+ }
59
204
  /**
60
205
  * Verify a single URL is reachable and looks like a legitimate job posting.
61
206
  * Uses harness-engineering thinking: emulate a real user clicking the link.
@@ -90,9 +235,105 @@ export async function verifyUrl(url) {
90
235
  }
91
236
  // ── 3. Trusted ATS domain shortcut ───────────────────────────────────────
92
237
  const isTrustedAts = TRUSTED_ATS_DOMAINS.some((d) => parsed.hostname.includes(d) || url.includes(d));
93
- // ── 4. HTTP reachability (HEAD GET fallback) ────────────────────────────
238
+ // Helper to evaluate text body and url
239
+ const evaluateContent = (status, finalUrl, bodyText, redirected) => {
240
+ if (status === 404) {
241
+ return {
242
+ ok: false,
243
+ reason: `❌ Page not found (404) — this job posting may have been removed or the URL is incorrect.`,
244
+ };
245
+ }
246
+ if (status === 403 || status === 401) {
247
+ return {
248
+ ok: false,
249
+ reason: `⚠️ Page requires authentication (${status}) — link may be valid but access restricted.`,
250
+ fallback: true,
251
+ };
252
+ }
253
+ if (status >= 500) {
254
+ return {
255
+ ok: false,
256
+ reason: `❌ Server error (${status}) — the job site is having issues. Try again later.`,
257
+ fallback: true,
258
+ };
259
+ }
260
+ if (redirected && isGenericJobLanding(finalUrl)) {
261
+ return {
262
+ ok: false,
263
+ reason: `❌ URL redirects to a generic jobs page (${finalUrl}) — job posting likely no longer exists.`,
264
+ warning: "This job posting may have been removed.",
265
+ };
266
+ }
267
+ if (isGenericJobLanding(finalUrl)) {
268
+ return {
269
+ ok: false,
270
+ reason: `❌ URL points to a generic careers/jobs page (${finalUrl}), not a specific apply page.`,
271
+ warning: "Use a direct job posting URL before applying.",
272
+ };
273
+ }
274
+ const lowerBody = bodyText.toLowerCase();
275
+ if (lowerBody && EXPIRED_CONTENT_PATTERNS.some((pattern) => pattern.test(lowerBody))) {
276
+ return {
277
+ ok: false,
278
+ reason: "❌ Apply page says the job is closed, unavailable, or not found.",
279
+ };
280
+ }
281
+ const signalCount = lowerBody
282
+ ? JOB_SIGNALS.filter((signal) => lowerBody.includes(signal)).length
283
+ : 0;
284
+ const hasApplyAction = lowerBody ? APPLY_PATTERNS.some((pattern) => pattern.test(lowerBody)) : false;
285
+ if (isTrustedAts && !isJobSpecificUrl(finalUrl)) {
286
+ return {
287
+ ok: false,
288
+ reason: `❌ Trusted ATS URL is not a specific job posting (${finalUrl}).`,
289
+ };
290
+ }
291
+ if (isTrustedAts &&
292
+ isJobSpecificUrl(finalUrl) &&
293
+ /^jobs you need to enable javascript to run this app\.?$/i.test(lowerBody)) {
294
+ return {
295
+ ok: false,
296
+ reason: "❌ ATS page loaded a generic jobs shell, not a specific job posting.",
297
+ fallback: true,
298
+ };
299
+ }
300
+ if (lowerBody.includes("enable javascript") ||
301
+ lowerBody.includes("javascript is required") ||
302
+ lowerBody.length < 300) {
303
+ return {
304
+ ok: false,
305
+ reason: "❌ Static HTML requires JavaScript or is sparse.",
306
+ fallback: true,
307
+ };
308
+ }
309
+ if (lowerBody && isJobSpecificUrl(finalUrl) && !isTrustedAts && !hasApplyAction && signalCount < 2) {
310
+ return {
311
+ ok: false,
312
+ reason: "❌ Page loaded, but it does not expose a job description or apply action.",
313
+ fallback: true,
314
+ };
315
+ }
316
+ let contentWarning;
317
+ if (lowerBody && isTrustedAts && isJobSpecificUrl(finalUrl) && !hasApplyAction && signalCount < 2) {
318
+ contentWarning = "Static HTML is sparse, but the URL is a specific trusted ATS posting. Browser verification may still be needed before submission.";
319
+ }
320
+ if (lowerBody && !isTrustedAts && signalCount < 2) {
321
+ contentWarning = `Page at ${finalUrl || url} lacks typical job-posting keywords — may redirect to homepage or be an error page.`;
322
+ }
323
+ const verdict = isTrustedAts
324
+ ? `✅ Verified — reachable on trusted ATS (${parsed.hostname})`
325
+ : `✅ Reachable (status ${status})${redirected ? ` → redirected to ${finalUrl}` : ""}`;
326
+ return {
327
+ ok: true,
328
+ reason: verdict,
329
+ warning: contentWarning,
330
+ };
331
+ };
332
+ // Try fast fetch first
94
333
  const controller = new AbortController();
95
334
  const timeout = setTimeout(() => controller.abort(), 8000); // 8s timeout
335
+ let fetchResult = null;
336
+ let needsFallback = false;
96
337
  try {
97
338
  let res;
98
339
  let finalUrl = url;
@@ -121,100 +362,67 @@ export async function verifyUrl(url) {
121
362
  }
122
363
  const status = res.status;
123
364
  const redirected = finalUrl !== url;
124
- // ── 5. Content sanity — did we land on a real page? ────────────────────
125
- if (status === 404) {
126
- return {
127
- url, ok: false, status, finalUrl, isTrustedAts, redirected,
128
- reason: `❌ Page not found (404) — this job posting may have been removed or the URL is incorrect.`,
129
- };
130
- }
131
- if (status === 403 || status === 401) {
132
- // Could be a valid page behind auth — treat as uncertain but not broken
133
- return {
134
- url, ok: true, status, finalUrl, isTrustedAts, redirected,
135
- reason: `⚠️ Page requires authentication (${status}) — link may be valid but access restricted.`,
136
- warning: "User may need to log in to view this posting.",
137
- };
138
- }
139
- if (status >= 500) {
140
- return {
141
- url, ok: false, status, finalUrl, isTrustedAts, redirected,
142
- reason: `❌ Server error (${status}) — the job site is having issues. Try again later.`,
143
- };
144
- }
145
- // Check if we got redirected to a homepage (common when job is removed)
146
- if (redirected) {
147
- const finalParsed = new URL(finalUrl);
148
- const landedOnHomepage = finalParsed.pathname === "/" ||
149
- finalParsed.pathname === "" ||
150
- finalParsed.pathname === "/careers" ||
151
- finalParsed.pathname === "/jobs";
152
- if (landedOnHomepage && !isTrustedAts) {
153
- return {
154
- url, ok: false, status, finalUrl, isTrustedAts, redirected,
155
- reason: `❌ URL redirects to homepage (${finalUrl}) — job posting likely no longer exists.`,
156
- warning: "This job posting may have been removed.",
157
- };
158
- }
159
- }
365
+ let bodyText = "";
160
366
  if (status >= 200 && status < 400) {
161
- let contentWarning;
162
- // ── 5. Content sanity — does the page look like a job posting? ────────
163
- // Only run for non-ATS URLs (ATS pages are always jobs, GET-ing them is slow)
164
- if (!isTrustedAts && res.bodyUsed === false) {
165
- try {
166
- // Re-fetch with GET to get body (HEAD gives no body)
167
- const bodyRes = await fetch(url, {
168
- method: "GET",
169
- redirect: "follow",
170
- signal: controller.signal,
171
- headers: {
172
- "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
173
- },
174
- });
175
- const body = (await bodyRes.text()).toLowerCase();
176
- const JOB_SIGNALS = [
177
- "apply", "job description", "responsibilities", "requirements",
178
- "qualifications", "salary", "full-time", "part-time", "remote",
179
- "position", "role", "candidate", "experience", "interview",
180
- "benefits", "compensation",
181
- ];
182
- const signalCount = JOB_SIGNALS.filter(s => body.includes(s)).length;
183
- if (signalCount < 2) {
184
- contentWarning = `Page at ${finalUrl || url} lacks typical job-posting keywords — may redirect to homepage or be an error page.`;
185
- }
186
- }
187
- catch {
188
- // Content check failed (timeout, etc.) — don't block on this
189
- }
367
+ try {
368
+ bodyText = await fetchBodyText(finalUrl, controller.signal);
190
369
  }
191
- const verdict = isTrustedAts
192
- ? `✅ Verified reachable on trusted ATS (${parsed.hostname})`
193
- : `✅ Reachable (status ${status})${redirected ? ` → redirected to ${finalUrl}` : ""}`;
194
- return {
195
- url, ok: true, status, finalUrl, isTrustedAts, redirected,
196
- reason: verdict,
197
- warning: contentWarning,
370
+ catch {
371
+ // failed reading body text
372
+ }
373
+ }
374
+ const evaluation = evaluateContent(status, finalUrl, bodyText, redirected);
375
+ if (evaluation.fallback) {
376
+ needsFallback = true;
377
+ }
378
+ else {
379
+ fetchResult = {
380
+ url,
381
+ ok: evaluation.ok,
382
+ status,
383
+ finalUrl,
384
+ isTrustedAts,
385
+ redirected,
386
+ reason: evaluation.reason,
387
+ warning: evaluation.warning,
198
388
  };
199
389
  }
200
- return {
201
- url, ok: false, status, finalUrl, isTrustedAts, redirected,
202
- reason: `❌ Unexpected HTTP status: ${status}`,
203
- };
204
390
  }
205
391
  catch (err) {
206
- const msg = err instanceof Error ? err.message : String(err);
207
- const isTimeout = msg.includes("abort") || msg.includes("timeout");
208
- return {
209
- url, ok: false, isTrustedAts, redirected: false,
210
- reason: isTimeout
211
- ? `❌ Connection timed out (>8s) — site may be down or the URL is unreachable.`
212
- : `❌ Network error: ${msg}`,
213
- };
392
+ needsFallback = true;
214
393
  }
215
394
  finally {
216
395
  clearTimeout(timeout);
217
396
  }
397
+ if (needsFallback) {
398
+ // Run Playwright fallback
399
+ const pwResult = await verifyUrlWithPlaywright(url);
400
+ if (pwResult.ok && pwResult.status !== undefined && pwResult.finalUrl !== undefined && pwResult.bodyText !== undefined) {
401
+ const redirected = pwResult.finalUrl !== url;
402
+ const evaluation = evaluateContent(pwResult.status, pwResult.finalUrl, pwResult.bodyText, redirected);
403
+ return {
404
+ url,
405
+ ok: evaluation.ok,
406
+ status: pwResult.status,
407
+ finalUrl: pwResult.finalUrl,
408
+ isTrustedAts,
409
+ redirected,
410
+ reason: evaluation.ok ? `✅ Verified via headless browser: ${evaluation.reason}` : evaluation.reason,
411
+ warning: evaluation.warning,
412
+ };
413
+ }
414
+ else {
415
+ // Playwright failed or was not available, return failure reason or fast fetch error
416
+ return {
417
+ url,
418
+ ok: false,
419
+ isTrustedAts,
420
+ redirected: false,
421
+ reason: pwResult.reason || `❌ Connection failed or timed out — site may be down or unreachable.`,
422
+ };
423
+ }
424
+ }
425
+ return fetchResult;
218
426
  }
219
427
  /**
220
428
  * Verify a batch of URLs in parallel (max 5 concurrent).
package/dist/api.d.ts CHANGED
@@ -194,6 +194,13 @@ export declare function jobsList(status?: ApplicationStatus): Promise<{
194
194
  jobs: JobTrackerItem[];
195
195
  total: number;
196
196
  } | ApiError>;
197
+ /** Delete a job entry from the user's tracker */
198
+ export declare function jobsDelete(payload: {
199
+ jobId: string;
200
+ }): Promise<{
201
+ success: boolean;
202
+ message: string;
203
+ } | ApiError>;
197
204
  export interface ApplyFormField {
198
205
  label: string;
199
206
  type: string;
package/dist/api.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
package/dist/api.js CHANGED
@@ -234,6 +234,10 @@ export async function jobsList(status) {
234
234
  params.status = status;
235
235
  return cfRequest("GET", "cliJobsList", undefined, Object.keys(params).length ? params : undefined);
236
236
  }
237
+ /** Delete a job entry from the user's tracker */
238
+ export async function jobsDelete(payload) {
239
+ return cfRequest("POST", "cliJobsDelete", payload);
240
+ }
237
241
  /**
238
242
  * Call the generateApplyAnswers Cloud Function to get AI-tailored answers
239
243
  * for all form fields in a job application.
@@ -20,6 +20,11 @@
20
20
  * via page.goto(). The browser starts at about:blank.
21
21
  */
22
22
  import { type BrowserContext, type Page } from "playwright-core";
23
+ /**
24
+ * Locate the real Chrome binary for best ATS compatibility.
25
+ * Falls back to Playwright's bundled Chromium if Chrome is not installed.
26
+ */
27
+ export declare function getChromeBinaryPath(): string | undefined;
23
28
  /** Type text into a field with random per-character delay (30–120ms) */
24
29
  export declare function humanType(page: Page, selector: string, text: string): Promise<void>;
25
30
  /** Random delay between actions (simulates reading / thinking) */
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/apply/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAY,KAAK,cAAc,EAAE,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAsE3E,wEAAwE;AACxE,wBAAsB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMzF;AAED,kEAAkE;AAClE,wBAAsB,UAAU,CAAC,KAAK,SAAM,EAAE,KAAK,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAGzE;AAID,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6EAA6E;IAC7E,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,6EAA6E;IAC7E,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,wEAAwE;IACxE,sBAAsB,EAAE,OAAO,CAAC;CACjC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,GAAE,oBAAyB,GAAG,OAAO,CAAC,YAAY,CAAC,CAmEhG;AAKD,wBAAgB,eAAe,IAAI,OAAO,CAEzC"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/apply/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAY,KAAK,cAAc,EAAE,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAkB3E;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,SAAS,CAwBxD;AAwBD,wEAAwE;AACxE,wBAAsB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMzF;AAED,kEAAkE;AAClE,wBAAsB,UAAU,CAAC,KAAK,SAAM,EAAE,KAAK,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAGzE;AAID,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6EAA6E;IAC7E,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,6EAA6E;IAC7E,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,wEAAwE;IACxE,sBAAsB,EAAE,OAAO,CAAC;CACjC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,GAAE,oBAAyB,GAAG,OAAO,CAAC,YAAY,CAAC,CAmEhG;AAKD,wBAAgB,eAAe,IAAI,OAAO,CAEzC"}
@@ -39,7 +39,7 @@ function getAutomationProfileDir() {
39
39
  * Locate the real Chrome binary for best ATS compatibility.
40
40
  * Falls back to Playwright's bundled Chromium if Chrome is not installed.
41
41
  */
42
- function getChromeBinaryPath() {
42
+ export function getChromeBinaryPath() {
43
43
  if (process.platform === "darwin") {
44
44
  const candidates = [
45
45
  "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
@@ -1 +1 @@
1
- {"version":3,"file":"configurator.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/configurator.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0D,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAI3G,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIpD,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;GAmBrB,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;GA+BtB,CAAC;AAEF,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAsEpD;AAED,wBAAsB,mBAAmB,CAAC,OAAO,GAAE,GAAQ,GAAG,OAAO,CAAC;IACpE,gBAAgB,EAAE,WAAW,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC,CAiKD"}
1
+ {"version":3,"file":"configurator.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/configurator.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0D,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAI3G,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMpD,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;GA+BrB,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;GA+BtB,CAAC;AAEF,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAsEpD;AAED,wBAAsB,mBAAmB,CAAC,OAAO,GAAE,GAAQ,GAAG,OAAO,CAAC;IACpE,gBAAgB,EAAE,WAAW,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC,CAiKD"}
@@ -6,14 +6,28 @@ export const MODEL_CREDIT_COST = {
6
6
  "gemini-2.5-flash-lite": 0.5,
7
7
  "gemini-2.5-flash": 1,
8
8
  "gemini-2.5-pro": 2,
9
+ "gemini-3.1-flash-lite": 0.75,
10
+ "gemini-3.5-flash": 1.5,
9
11
  };
10
12
  export const CV_MODELS = [
13
+ {
14
+ name: `⚡ gemini-3.5-flash ${chalk.gray("[1.5 credits/turn — latest]")}`,
15
+ value: "gemini-3.5-flash",
16
+ cost: 1.5,
17
+ careerVivid: true,
18
+ },
11
19
  {
12
20
  name: `⚡ gemini-2.5-flash ${chalk.gray("[1 credit/turn — default]")}`,
13
21
  value: "gemini-2.5-flash",
14
22
  cost: 1,
15
23
  careerVivid: true,
16
24
  },
25
+ {
26
+ name: `🚀 gemini-3.1-flash-lite ${chalk.gray("[0.75 credit/turn]")}`,
27
+ value: "gemini-3.1-flash-lite",
28
+ cost: 0.75,
29
+ careerVivid: true,
30
+ },
17
31
  {
18
32
  name: `🚀 gemini-2.5-flash-lite ${chalk.gray("[0.5 credit/turn — fastest]")}`,
19
33
  value: "gemini-2.5-flash-lite",
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QAqJpD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QAwJpD"}
@@ -13,6 +13,9 @@ export function registerAgentCommand(program) {
13
13
  .command("agent")
14
14
  .description("Start an interactive autonomous AI agent in your terminal.")
15
15
  .option("--coding", "Enable full coding tool suite (file I/O, shell, search).")
16
+ .option("--prompt <prompt>", "Execute a single prompt/task directly.")
17
+ .option("--once", "Exit immediately after executing the first agent turn.")
18
+ .option("--no-menu", "Bypass the interactive selection menu.")
16
19
  .option("--resume", "Add resume tools — load and discuss your CareerVivid resume.")
17
20
  .option("--jobs", "Add job-hunting tools (default — enabled automatically).")
18
21
  .option("--flash", "Use gemini-2.5-flash (fast, 1 credit/turn).")
@@ -1 +1 @@
1
- {"version":3,"file":"engineLoop.d.ts","sourceRoot":"","sources":["../../../../src/commands/agent/repl/engineLoop.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAA8B,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAElF,OAAO,EAA4B,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAc/E,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,WAAW,GAAG,sBAAsB,GAAG,IAAI,CAAC;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,WAAW,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,GAAG,EAAE,CAAC;IAClB,KAAK,EAAE,GAAG,EAAE,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACxE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6K3E"}
1
+ {"version":3,"file":"engineLoop.d.ts","sourceRoot":"","sources":["../../../../src/commands/agent/repl/engineLoop.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAA8B,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAElF,OAAO,EAA4B,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAc/E,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,WAAW,GAAG,sBAAsB,GAAG,IAAI,CAAC;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,WAAW,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,GAAG,EAAE,CAAC;IAClB,KAAK,EAAE,GAAG,EAAE,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACxE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAiL3E"}