careervivid 1.12.38 → 1.12.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.
@@ -291,7 +291,7 @@ export class CareerVividProxyEngine {
291
291
  hooks.onThinking("Harness intercepted permission seeking. Auto-correcting...");
292
292
  this.history.push({
293
293
  role: 'user',
294
- parts: [{ text: "[Harness Instruction]: You halted execution to ask for permission or missing information. RE-READ YOUR HARNESS DIRECTIVES. You must autonomously execute the mutation (e.g., update_local_job or add_local_job) using defaults for missing fields. Do not wait for confirmation. Do it now." }]
294
+ parts: [{ text: "[Harness Instruction]: You halted execution to ask for permission or missing information. RE-READ YOUR HARNESS DIRECTIVES. You must autonomously execute the mutation (e.g., tracker_update_job or tracker_add_job) using defaults for missing fields. Do not wait for confirmation. Do it now." }]
295
295
  });
296
296
  continue;
297
297
  }
@@ -232,7 +232,7 @@ export class QueryEngine {
232
232
  hooks.onThinking("Harness intercepted permission seeking. Auto-correcting...");
233
233
  this.history.push({
234
234
  role: 'user',
235
- parts: [{ text: "[Harness Instruction]: You halted execution to ask for permission or missing information. RE-READ YOUR HARNESS DIRECTIVES. You must autonomously execute the mutation (e.g., update_local_job or add_local_job) using defaults for missing fields. Do not wait for confirmation. Do it now." }]
235
+ parts: [{ text: "[Harness Instruction]: You halted execution to ask for permission or missing information. RE-READ YOUR HARNESS DIRECTIVES. You must autonomously execute the mutation (e.g., tracker_update_job or tracker_add_job) using defaults for missing fields. Do not wait for confirmation. Do it now." }]
236
236
  });
237
237
  continue;
238
238
  }
@@ -345,7 +345,7 @@ export class QueryEngine {
345
345
  hooks.onThinking("Harness intercepted permission seeking. Auto-correcting...");
346
346
  this.history.push({
347
347
  role: 'user',
348
- parts: [{ text: "[Harness Instruction]: You halted execution to ask for permission or missing information. RE-READ YOUR HARNESS DIRECTIVES. You must autonomously execute the mutation (e.g., update_local_job or add_local_job) using defaults for missing fields. Do not wait for confirmation. Do it now." }]
348
+ parts: [{ text: "[Harness Instruction]: You halted execution to ask for permission or missing information. RE-READ YOUR HARNESS DIRECTIVES. You must autonomously execute the mutation (e.g., tracker_update_job or tracker_add_job) using defaults for missing fields. Do not wait for confirmation. Do it now." }]
349
349
  });
350
350
  continue;
351
351
  }
@@ -1 +1 @@
1
- {"version":3,"file":"jobOpenings.d.ts","sourceRoot":"","sources":["../../../src/agent/tools/jobOpenings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAgclC,eAAO,MAAM,gBAAgB,EAAE,IA6O9B,CAAC;AAMF,eAAO,MAAM,gBAAgB,EAAE,IA4G9B,CAAC;AAQF,eAAO,MAAM,iBAAiB,EAAE,IA8F/B,CAAC;AAMF,eAAO,MAAM,sBAAsB,EAAE,IAAI,EAIxC,CAAC"}
1
+ {"version":3,"file":"jobOpenings.d.ts","sourceRoot":"","sources":["../../../src/agent/tools/jobOpenings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAkdlC,eAAO,MAAM,gBAAgB,EAAE,IA2O9B,CAAC;AAMF,eAAO,MAAM,gBAAgB,EAAE,IA4G9B,CAAC;AAQF,eAAO,MAAM,iBAAiB,EAAE,IA8F/B,CAAC;AAMF,eAAO,MAAM,sBAAsB,EAAE,IAAI,EAIxC,CAAC"}
@@ -14,11 +14,10 @@
14
14
  * Direct — JSON-LD schema.org/JobPosting + heuristic <a> tag parsing
15
15
  */
16
16
  import { Type } from "@google/genai";
17
- import { readFileSync, writeFileSync, existsSync, mkdirSync, copyFileSync, renameSync, } from "fs";
17
+ import { readFileSync, writeFileSync, existsSync, copyFileSync, renameSync, } from "fs";
18
18
  import { resolve, dirname } from "path";
19
19
  import { fileURLToPath } from "url";
20
20
  import { homedir } from "os";
21
- const __dirname = dirname(fileURLToPath(import.meta.url));
22
21
  // ---------------------------------------------------------------------------
23
22
  // CSV Schema — job_openings.csv
24
23
  // ---------------------------------------------------------------------------
@@ -40,16 +39,39 @@ const OPENING_HEADERS = [
40
39
  // ---------------------------------------------------------------------------
41
40
  // File path
42
41
  // ---------------------------------------------------------------------------
42
+ /** Resolves the jobs.csv path the same way local-tracker.ts does. */
43
+ function getJobsCsvPath() {
44
+ const __filename = fileURLToPath(import.meta.url);
45
+ const __dirpath = dirname(__filename);
46
+ // 1. Check dev repo locations (for local development)
47
+ const devCandidates = [
48
+ resolve(__dirpath, "../../../../career-ops/data/jobs.csv"),
49
+ resolve(__dirpath, "../../../../../career-ops/data/jobs.csv"),
50
+ resolve(process.cwd(), "career-ops/data/jobs.csv"),
51
+ ];
52
+ for (const p of devCandidates) {
53
+ if (existsSync(p))
54
+ return p;
55
+ }
56
+ // 2. Global ~/.careervivid/jobs.csv for installed users
57
+ return resolve(homedir(), ".careervivid", "jobs.csv");
58
+ }
43
59
  function getOpeningsPath() {
44
- // Mirror jobs.csv location: career-ops/data/job_openings.csv
45
- const careerOpsPath = resolve(__dirname, "..", "..", "..", "..", "career-ops", "data");
46
- if (existsSync(careerOpsPath))
47
- return resolve(careerOpsPath, "job_openings.csv");
48
- // Fallback: ~/.careervivid/
49
- const dir = resolve(homedir(), ".careervivid");
50
- if (!existsSync(dir))
51
- mkdirSync(dir, { recursive: true });
52
- return resolve(dir, "job_openings.csv");
60
+ const __filename = fileURLToPath(import.meta.url);
61
+ const __dirpath = dirname(__filename);
62
+ // Mirror next to jobs.csv
63
+ const devCandidates = [
64
+ resolve(__dirpath, "../../../../career-ops/data/job_openings.csv"),
65
+ resolve(__dirpath, "../../../../../career-ops/data/job_openings.csv"),
66
+ resolve(process.cwd(), "career-ops/data/job_openings.csv"),
67
+ ];
68
+ for (const p of devCandidates) {
69
+ if (existsSync(p))
70
+ return p;
71
+ }
72
+ // Fallback: mirror next to jobs.csv
73
+ const jobsPath = getJobsCsvPath();
74
+ return resolve(dirname(jobsPath), "job_openings.csv");
53
75
  }
54
76
  function loadOpenings() {
55
77
  const path = getOpeningsPath();
@@ -452,10 +474,8 @@ openings_scan is for drilling into companies the user has already vetted.`,
452
474
  },
453
475
  execute: async (args) => {
454
476
  try {
455
- // Load companies from jobs.csv
456
- const jobsCsvPath = resolve(__dirname, "..", "..", "..", "..", "career-ops", "data", "jobs.csv");
457
- const altPath = resolve(homedir(), ".careervivid", "jobs.csv");
458
- const csvPath = existsSync(jobsCsvPath) ? jobsCsvPath : altPath;
477
+ // Load companies from jobs.csv — use the same path-resolution as local-tracker.ts
478
+ const csvPath = getJobsCsvPath();
459
479
  if (!existsSync(csvPath)) {
460
480
  return "❌ No jobs.csv found. Add some companies to your tracker first with tracker_add_job.";
461
481
  }
@@ -1 +1 @@
1
- {"version":3,"file":"engineResolver.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/engineResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAyC,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAI3C;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAE5G;AAED,wBAAgB,WAAW,CACzB,gBAAgB,EAAE,WAAW,EAC7B,aAAa,EAAE,MAAM,EACrB,iBAAiB,EAAE,MAAM,EACzB,KAAK,EAAE,IAAI,EAAE,EACb,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,OAAO,EACxB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,WAAW,GAAG,sBAAsB,GAAG,IAAI,CA2B7C;AAED,wBAAgB,WAAW,CACzB,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAC9F,gBAAgB,EAAE,MAAM,EACxB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,QAuBvB"}
1
+ {"version":3,"file":"engineResolver.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/engineResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAyC,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAI3C;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAE5G;AAED,wBAAgB,WAAW,CACzB,gBAAgB,EAAE,WAAW,EAC7B,aAAa,EAAE,MAAM,EACrB,iBAAiB,EAAE,MAAM,EACzB,KAAK,EAAE,IAAI,EAAE,EACb,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,OAAO,EACxB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,WAAW,GAAG,sBAAsB,GAAG,IAAI,CA2B7C;AAED,wBAAgB,WAAW,CACzB,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAC9F,gBAAgB,EAAE,MAAM,EACxB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,QAwBvB"}
@@ -53,10 +53,11 @@ export function printBanner(options, selectedProvider, selectedModel, thinkingBu
53
53
  if (options.coding)
54
54
  console.log(chalk.green(" ✔ Coding mode: file I/O, shell, search tools active"));
55
55
  if (options.jobs) {
56
- console.log(chalk.cyan(" ✔ Job mode: search, save, list, status update, apply_to_job tools active"));
56
+ console.log(chalk.cyan(" ✔ Job mode: search, score, apply_to_job, openings_scan tools active"));
57
57
  console.log(chalk.magenta(" ✔ Browser mode: navigate, click, type, select, scroll, screenshot tools active"));
58
- console.log(chalk.yellow(" ✔ Local tracker: list_local_jobs · update_local_job · add_local_job"));
59
- console.log(chalk.yellow(" + score_pipeline · get_pipeline_metrics · flag_stale_jobs (jobs.csv v2)"));
58
+ console.log(chalk.yellow(" ✔ Local tracker: tracker_list_jobs · tracker_update_job · tracker_add_job"));
59
+ console.log(chalk.yellow(" + tracker_rank_priority · tracker_dashboard · tracker_find_stale"));
60
+ console.log(chalk.yellow(" + tracker_recheck_urls · openings_scan · openings_list (jobs.csv v2)"));
60
61
  }
61
62
  else if (options.resume)
62
63
  console.log(chalk.cyan(" ✔ Resume mode: get_resume tool active"));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "careervivid",
3
- "version": "1.12.38",
3
+ "version": "1.12.39",
4
4
  "description": "Official CLI for CareerVivid — publish articles, diagrams, and portfolio updates from your terminal or AI agent",
5
5
  "type": "module",
6
6
  "bin": {