careervivid 1.12.22 → 1.12.24

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.
@@ -1 +1 @@
1
- {"version":3,"file":"local-tracker.d.ts","sourceRoot":"","sources":["../../../src/agent/tools/local-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AA+JlC,eAAO,MAAM,iBAAiB,EAAE,IA8H/B,CAAC;AAMF,eAAO,MAAM,kBAAkB,EAAE,IA2HhC,CAAC;AAMF,eAAO,MAAM,eAAe,EAAE,IAmG7B,CAAC;AAMF,eAAO,MAAM,iBAAiB,EAAE,IA2F/B,CAAC;AAMF,eAAO,MAAM,sBAAsB,EAAE,IA+GpC,CAAC;AAMF,eAAO,MAAM,iBAAiB,EAAE,IAoE/B,CAAC;AAMF,eAAO,MAAM,uBAAuB,EAAE,IAAI,EAOzC,CAAC"}
1
+ {"version":3,"file":"local-tracker.d.ts","sourceRoot":"","sources":["../../../src/agent/tools/local-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAwKlC,eAAO,MAAM,iBAAiB,EAAE,IA8H/B,CAAC;AAMF,eAAO,MAAM,kBAAkB,EAAE,IA2HhC,CAAC;AAMF,eAAO,MAAM,eAAe,EAAE,IAmG7B,CAAC;AAMF,eAAO,MAAM,iBAAiB,EAAE,IA2F/B,CAAC;AAMF,eAAO,MAAM,sBAAsB,EAAE,IA+GpC,CAAC;AAMF,eAAO,MAAM,iBAAiB,EAAE,IAoE/B,CAAC;AAMF,eAAO,MAAM,uBAAuB,EAAE,IAAI,EAOzC,CAAC"}
@@ -19,25 +19,28 @@
19
19
  * flag_stale_jobs → surface companies with no recent activity
20
20
  */
21
21
  import { Type } from "@google/genai";
22
- import { readFileSync, writeFileSync, existsSync } from "fs";
22
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
23
23
  import { resolve, dirname } from "path";
24
24
  import { fileURLToPath } from "url";
25
+ import { homedir } from "os";
25
26
  // ---------------------------------------------------------------------------
26
27
  // CSV path resolution
27
28
  // ---------------------------------------------------------------------------
28
29
  function getCsvPath() {
29
30
  const __filename = fileURLToPath(import.meta.url);
30
31
  const __dirname = dirname(__filename);
31
- const candidates = [
32
+ // 1. Check dev repo locations first (for existing users/contributors)
33
+ const devCandidates = [
32
34
  resolve(__dirname, "../../../../career-ops/data/jobs.csv"),
33
35
  resolve(__dirname, "../../../../../career-ops/data/jobs.csv"),
34
36
  resolve(process.cwd(), "career-ops/data/jobs.csv"),
35
37
  ];
36
- for (const p of candidates) {
38
+ for (const p of devCandidates) {
37
39
  if (existsSync(p))
38
40
  return p;
39
41
  }
40
- return resolve(process.cwd(), "career-ops/data/jobs.csv");
42
+ // 2. Global user data directory (~/.careervivid/jobs.csv) for external/installed users
43
+ return resolve(homedir(), ".careervivid", "jobs.csv");
41
44
  }
42
45
  // ---------------------------------------------------------------------------
43
46
  // Schema v2
@@ -112,7 +115,12 @@ function serializeCsv(rows) {
112
115
  function loadCsv() {
113
116
  const path = getCsvPath();
114
117
  if (!existsSync(path)) {
115
- throw new Error(`jobs.csv not found at ${path}. Run from the careervivid repo root.`);
118
+ // Auto-bootstrap: create parent directory + empty CSV with headers
119
+ const dir = resolve(path, "..");
120
+ mkdirSync(dir, { recursive: true });
121
+ writeFileSync(path, HEADERS.join(",") + "\n", "utf-8");
122
+ console.log(`\nšŸ“‹ Created your job tracker at: ${path}`);
123
+ console.log(` Add jobs with cv agent, or edit the CSV directly.\n`);
116
124
  }
117
125
  const raw = readFileSync(path, "utf-8");
118
126
  return { rows: parseCsv(raw), path };
@@ -1 +1 @@
1
- {"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/repl.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,EAA4B,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAI7E,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,GAAE,MAAM,GAAG,IAAW,QAwBtF;AAED,wBAAsB,OAAO,CAC3B,MAAM,EAAE,WAAW,GAAG,sBAAsB,GAAG,IAAI,EACnD,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,EAC9K,gBAAgB,EAAE,WAAW,EAC7B,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,iBAAiB,EAAE,MAAM,EACzB,KAAK,EAAE,GAAG,EAAE,GACX,OAAO,CAAC,IAAI,CAAC,CA6Zf"}
1
+ {"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/repl.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,EAA4B,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAI7E,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,GAAE,MAAM,GAAG,IAAW,QAwBtF;AAED,wBAAsB,OAAO,CAC3B,MAAM,EAAE,WAAW,GAAG,sBAAsB,GAAG,IAAI,EACnD,OAAO,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,EAC9K,gBAAgB,EAAE,WAAW,EAC7B,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,iBAAiB,EAAE,MAAM,EACzB,KAAK,EAAE,GAAG,EAAE,GACX,OAAO,CAAC,IAAI,CAAC,CA+bf"}
@@ -196,9 +196,43 @@ export async function askLoop(engine, options, selectedProvider, selectedModel,
196
196
  let currentSpinner = null;
197
197
  let trustAllCommands = false;
198
198
  let trustAllWrites = false;
199
+ // Map internal tool names to user-friendly labels
200
+ const TOOL_LABELS = {
201
+ list_directory: "šŸ” Scanning workspace...",
202
+ read_file: "šŸ“– Reading file...",
203
+ run_command: "āš™ļø Running command...",
204
+ write_file: "āœļø Writing file...",
205
+ patch_file: "āœļø Patching file...",
206
+ list_local_jobs: "šŸ“Š Checking job pipeline...",
207
+ add_local_job: "āž• Adding job to pipeline...",
208
+ update_local_job: "šŸ”„ Updating job record...",
209
+ score_pipeline: "šŸ“ˆ Scoring pipeline...",
210
+ get_pipeline_metrics: "šŸ“Š Fetching pipeline metrics...",
211
+ flag_stale_jobs: "🚩 Checking stale jobs...",
212
+ list_cover_letters: "šŸ“„ Loading cover letters...",
213
+ get_cover_letter: "šŸ“„ Reading cover letter...",
214
+ save_cover_letter: "šŸ’¾ Saving cover letter...",
215
+ delete_cover_letter: "šŸ—‘ļø Deleting cover letter...",
216
+ browser_navigate: "🌐 Navigating to page...",
217
+ browser_click: "šŸ–±ļø Clicking element...",
218
+ browser_type: "āŒØļø Typing input...",
219
+ browser_state: "🌐 Reading browser state...",
220
+ browser_screenshot: "šŸ“ø Taking screenshot...",
221
+ browser_scroll: "šŸ“œ Scrolling page...",
222
+ browser_wait: "ā³ Waiting...",
223
+ browser_close: "šŸ”’ Closing browser...",
224
+ browser_select: "šŸ–±ļø Selecting option...",
225
+ search_jobs: "šŸ” Searching jobs...",
226
+ get_resume: "šŸ“„ Loading resume...",
227
+ list_resumes: "šŸ“„ Loading resumes...",
228
+ get_profile: "šŸ‘¤ Loading profile...",
229
+ };
199
230
  const handleToolCall = async (name, args) => {
200
- console.log(chalk.yellow(`\nšŸ› ļø Tool: ${chalk.bold(name)}`));
201
- console.log(chalk.dim(` Args: ${JSON.stringify(args, null, 2)}`));
231
+ // Show a clean, user-friendly label — never show raw args
232
+ const label = TOOL_LABELS[name] ?? `āš™ļø Working...`;
233
+ process.stdout.write(chalk.dim(`
234
+ ${label}
235
+ `));
202
236
  if (name === "run_command") {
203
237
  if (trustAllCommands || isSafeCommand(args.command)) {
204
238
  return true;
@@ -265,11 +299,10 @@ export async function askLoop(engine, options, selectedProvider, selectedModel,
265
299
  };
266
300
  const handleToolResult = (name, result) => {
267
301
  if (currentSpinner) {
268
- currentSpinner.succeed(`Finished ${chalk.bold(name)}`);
302
+ currentSpinner.succeed(chalk.dim(`Done`));
269
303
  currentSpinner = null;
270
304
  }
271
- const preview = typeof result === "string" ? result.substring(0, 120) : JSON.stringify(result).substring(0, 120);
272
- console.log(chalk.dim(` āœ… ${name}: ${preview}${preview.length >= 120 ? "…" : ""}\n`));
305
+ // Suppress raw output — the agent will summarize it in natural language
273
306
  };
274
307
  if (engine) {
275
308
  sessionTurns++;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "careervivid",
3
- "version": "1.12.22",
3
+ "version": "1.12.24",
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": {
@@ -45,6 +45,15 @@
45
45
  "engines": {
46
46
  "node": ">=20.0.0"
47
47
  },
48
+ "overrides": {
49
+ "braces": "3.0.3",
50
+ "cross-spawn": "7.0.6",
51
+ "cookie": "0.7.2",
52
+ "ajv": "^6.12.6",
53
+ "micromatch": "^4.0.8",
54
+ "ws": ">=7.5.10",
55
+ "axios": ">=1.7.4"
56
+ },
48
57
  "keywords": [
49
58
  "careervivid",
50
59
  "cli",