careervivid 1.12.17 → 1.12.20

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.
@@ -0,0 +1,3 @@
1
+ import { Tool } from "../Tool.js";
2
+ export declare const ALL_COVERLETTER_TOOLS: Tool<any, any>[];
3
+ //# sourceMappingURL=coverLetter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coverLetter.d.ts","sourceRoot":"","sources":["../../../src/agent/tools/coverLetter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAgGlC,eAAO,MAAM,qBAAqB,kBAGjC,CAAC"}
@@ -0,0 +1,91 @@
1
+ import { Type } from "@google/genai";
2
+ import chalk from "chalk";
3
+ import { generateCoverLetter, listCoverLetters, resumesList } from "../../api.js";
4
+ function getLinkUrl(path) {
5
+ const isDev = process.env.NODE_ENV === "development" || process.env.CV_API_URL?.includes("localhost");
6
+ return isDev ? `http://localhost:3000${path}` : `https://careervivid.app${path}`;
7
+ }
8
+ const generateCoverLetterTool = {
9
+ name: "generate_cover_letter",
10
+ description: "Generates a highly tailored cover letter based on a user's resume and a specific job description. This saves the cover letter privately in their account (it does NOT publish it as an article).",
11
+ parameters: {
12
+ type: Type.OBJECT,
13
+ properties: {
14
+ jobTitle: { type: Type.STRING, description: "The job title to tailor the cover letter for" },
15
+ companyName: { type: Type.STRING, description: "The company name to tailor the cover letter for" },
16
+ jobDescription: { type: Type.STRING, description: "The job description to tailor the cover letter against" },
17
+ resumeId: { type: Type.STRING, description: "Optional IDEAL resume ID to use. If omitted, it will pick their most recently updated resume." }
18
+ },
19
+ required: ["jobTitle", "companyName", "jobDescription"]
20
+ },
21
+ execute: async (args) => {
22
+ try {
23
+ console.log(chalk.blue(`\nGenerating cover letter for ${args.jobTitle} at ${args.companyName}...`));
24
+ let currentResumeId = args.resumeId;
25
+ if (!currentResumeId) {
26
+ const resumesRes = await resumesList();
27
+ if ("isError" in resumesRes) {
28
+ return `Failed to fetch user's resumes: ${resumesRes.message}`;
29
+ }
30
+ const resumes = resumesRes.resumes;
31
+ if (!resumes || resumes.length === 0) {
32
+ return "User has no resumes in CareerVivid. They must upload one first.";
33
+ }
34
+ currentResumeId = resumes[0].id;
35
+ }
36
+ const res = await generateCoverLetter({
37
+ resumeId: currentResumeId,
38
+ jobTitle: args.jobTitle,
39
+ companyName: args.companyName,
40
+ jobDescription: args.jobDescription
41
+ });
42
+ if ("isError" in res) {
43
+ return `Failed to generate cover letter: ${res.message}`;
44
+ }
45
+ const coverLetter = res.coverLetter;
46
+ const dashboardUrl = getLinkUrl("/dashboard/jobs");
47
+ return `✅ Successfully generated a cover letter for ${args.jobTitle} at ${args.companyName}.
48
+ It has been privately saved to the user's account.
49
+
50
+ Instruct the user they can view it in their dashboard under "Application Materials":
51
+ ${dashboardUrl}
52
+
53
+ Here is a preview of the content:
54
+ ${coverLetter.content ? coverLetter.content.substring(0, 500) + '...' : ''}`;
55
+ }
56
+ catch (err) {
57
+ return `Error generating cover letter: ${err.message}`;
58
+ }
59
+ }
60
+ };
61
+ const listCoverLettersTool = {
62
+ name: "list_cover_letters",
63
+ description: "Lists all cover letters generated by the user recently.",
64
+ parameters: {
65
+ type: Type.OBJECT,
66
+ properties: {
67
+ jobId: { type: Type.STRING, description: "Filter by a specific job ID" }
68
+ }
69
+ },
70
+ execute: async (args) => {
71
+ try {
72
+ const res = await listCoverLetters(args.jobId);
73
+ if ("isError" in res) {
74
+ return `Failed to list cover letters: ${res.message}`;
75
+ }
76
+ const letters = res.coverLetters;
77
+ if (letters.length === 0) {
78
+ return "No cover letters found. You can generate one using generate_cover_letter.";
79
+ }
80
+ const format = letters.map(c => `ID: ${c.id}\nTitle: ${c.jobTitle} at ${c.companyName}\nDate: ${c.createdAt}`).join("\n\n");
81
+ return `Found ${res.total} cover letter(s):\n\n${format}`;
82
+ }
83
+ catch (err) {
84
+ return `Error listing cover letters: ${err.message}`;
85
+ }
86
+ }
87
+ };
88
+ export const ALL_COVERLETTER_TOOLS = [
89
+ generateCoverLetterTool,
90
+ listCoverLettersTool
91
+ ];
@@ -0,0 +1,7 @@
1
+ import { Tool } from "../Tool.js";
2
+ export declare const ListPortfoliosTool: Tool;
3
+ export declare const InitPortfolioTool: Tool;
4
+ export declare const UpdatePortfolioHeroTool: Tool;
5
+ export declare const UpdatePortfolioProjectsTool: Tool;
6
+ export declare const ALL_PORTFOLIO_TOOLS: Tool[];
7
+ //# sourceMappingURL=portfolio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portfolio.d.ts","sourceRoot":"","sources":["../../../src/agent/tools/portfolio.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAclC,eAAO,MAAM,kBAAkB,EAAE,IA4BhC,CAAC;AAMF,eAAO,MAAM,iBAAiB,EAAE,IAkC/B,CAAC;AAMF,eAAO,MAAM,uBAAuB,EAAE,IA+DrC,CAAC;AAMF,eAAO,MAAM,2BAA2B,EAAE,IAiEzC,CAAC;AAMF,eAAO,MAAM,mBAAmB,EAAE,IAAI,EAKrC,CAAC"}
@@ -0,0 +1,186 @@
1
+ import { Type } from "@google/genai";
2
+ import { initPortfolio, portfolioList, updatePortfolioHero, updatePortfolioProjects, isApiError, } from "../../api.js";
3
+ // ---------------------------------------------------------------------------
4
+ // Tool: list_portfolios
5
+ // ---------------------------------------------------------------------------
6
+ export const ListPortfoliosTool = {
7
+ name: "list_portfolios",
8
+ description: `List all portfolios the user has on CareerVivid.
9
+ Use this first when the user asks to update, view, or manage their portfolio.
10
+ Returns portfolio IDs and live URLs so the agent can call update_portfolio_hero
11
+ or update_portfolio_projects with the correct portfolioId.`,
12
+ parameters: {
13
+ type: Type.OBJECT,
14
+ properties: {},
15
+ },
16
+ execute: async () => {
17
+ const result = await portfolioList();
18
+ if (isApiError(result)) {
19
+ return `❌ Could not fetch portfolios: ${result.message}`;
20
+ }
21
+ const list = result.portfolios ?? [];
22
+ if (list.length === 0) {
23
+ return `You have no portfolios yet. Use init_portfolio to create one.`;
24
+ }
25
+ const lines = list.map((p, i) => `${i + 1}. "${p.title}" [ID: ${p.id}]\n 🔗 ${p.url}\n Updated: ${p.updatedAt ? new Date(p.updatedAt).toLocaleDateString() : "Unknown"}`);
26
+ return `You have ${list.length} portfolio(s) on CareerVivid:\n\n${lines.join("\n\n")}`;
27
+ },
28
+ };
29
+ // ---------------------------------------------------------------------------
30
+ // Tool: init_portfolio
31
+ // ---------------------------------------------------------------------------
32
+ export const InitPortfolioTool = {
33
+ name: "init_portfolio",
34
+ description: `Create a new portfolio on CareerVivid.
35
+ Use this when the user asks to create a new portfolio or has none yet.
36
+ Returns the portfolioId and a live URL where the portfolio can be viewed.`,
37
+ parameters: {
38
+ type: Type.OBJECT,
39
+ properties: {
40
+ title: {
41
+ type: Type.STRING,
42
+ description: "Title for the portfolio, e.g. 'Jiawen Zhu — Full-Stack Engineer'",
43
+ },
44
+ templateId: {
45
+ type: Type.STRING,
46
+ description: "Optional template ID (e.g. 'software_engineer', 'minimal').",
47
+ },
48
+ },
49
+ required: ["title"],
50
+ },
51
+ execute: async (args) => {
52
+ const result = await initPortfolio(args.title, args.templateId);
53
+ if (isApiError(result)) {
54
+ return `❌ Failed to create portfolio: ${result.message}`;
55
+ }
56
+ return [
57
+ `✅ Portfolio created: "${args.title}"`,
58
+ `Portfolio ID: ${result.portfolioId}`,
59
+ `🔗 Live URL: ${result.url}`,
60
+ ``,
61
+ `Next: call update_portfolio_hero or update_portfolio_projects with portfolioId="${result.portfolioId}".`,
62
+ ].join("\n");
63
+ },
64
+ };
65
+ // ---------------------------------------------------------------------------
66
+ // Tool: update_portfolio_hero
67
+ // ---------------------------------------------------------------------------
68
+ export const UpdatePortfolioHeroTool = {
69
+ name: "update_portfolio_hero",
70
+ description: `Update the hero / header section of the user's live CareerVivid portfolio.
71
+ Call list_portfolios first to get the correct portfolioId.
72
+ Use this to set the headline, bio, avatar, social links, and CTA button.`,
73
+ parameters: {
74
+ type: Type.OBJECT,
75
+ properties: {
76
+ portfolioId: {
77
+ type: Type.STRING,
78
+ description: "ID of the portfolio to update. Get from list_portfolios.",
79
+ },
80
+ headline: { type: Type.STRING, description: "Main hero headline (job title / positioning)." },
81
+ subheadline: { type: Type.STRING, description: "Subtitle shown below the headline." },
82
+ bio: { type: Type.STRING, description: "Short bio / about text (2-4 sentences)." },
83
+ avatarUrl: { type: Type.STRING, description: "URL to the user's profile photo." },
84
+ ctaLabel: { type: Type.STRING, description: "Primary CTA button text." },
85
+ ctaUrl: { type: Type.STRING, description: "Primary CTA button URL." },
86
+ linkedin: { type: Type.STRING, description: "LinkedIn profile URL." },
87
+ github: { type: Type.STRING, description: "GitHub profile URL." },
88
+ website: { type: Type.STRING, description: "Personal website URL." },
89
+ },
90
+ required: ["portfolioId"],
91
+ },
92
+ execute: async (args) => {
93
+ const { portfolioId, ...rest } = args;
94
+ const hero = {};
95
+ if (rest.headline)
96
+ hero.headline = rest.headline;
97
+ if (rest.subheadline)
98
+ hero.subheadline = rest.subheadline;
99
+ if (rest.bio)
100
+ hero.bio = rest.bio;
101
+ if (rest.avatarUrl)
102
+ hero.avatarUrl = rest.avatarUrl;
103
+ if (rest.ctaLabel)
104
+ hero.ctaLabel = rest.ctaLabel;
105
+ if (rest.ctaUrl)
106
+ hero.ctaUrl = rest.ctaUrl;
107
+ const socialLinks = {};
108
+ if (rest.linkedin)
109
+ socialLinks.linkedin = rest.linkedin;
110
+ if (rest.github)
111
+ socialLinks.github = rest.github;
112
+ if (rest.website)
113
+ socialLinks.website = rest.website;
114
+ if (Object.keys(socialLinks).length > 0)
115
+ hero.socialLinks = socialLinks;
116
+ const result = await updatePortfolioHero(portfolioId, hero);
117
+ if (isApiError(result)) {
118
+ return `❌ Failed to update portfolio hero: ${result.message}`;
119
+ }
120
+ return [
121
+ `✅ Portfolio hero updated!`,
122
+ `Changed: ${Object.keys(hero).join(", ")}`,
123
+ `🔗 View live: https://careervivid.app/portfolio/${portfolioId}`,
124
+ ].join("\n");
125
+ },
126
+ };
127
+ // ---------------------------------------------------------------------------
128
+ // Tool: update_portfolio_projects
129
+ // ---------------------------------------------------------------------------
130
+ export const UpdatePortfolioProjectsTool = {
131
+ name: "update_portfolio_projects",
132
+ description: `Update the projects / experience section of the user's live CareerVivid portfolio.
133
+ Call list_portfolios first to get the correct portfolioId.
134
+ Each project needs at minimum a title and description.`,
135
+ parameters: {
136
+ type: Type.OBJECT,
137
+ properties: {
138
+ portfolioId: {
139
+ type: Type.STRING,
140
+ description: "ID of the portfolio to update. Get from list_portfolios.",
141
+ },
142
+ projects: {
143
+ type: Type.ARRAY,
144
+ description: "Array of project/experience objects.",
145
+ items: {
146
+ type: Type.OBJECT,
147
+ properties: {
148
+ title: { type: Type.STRING },
149
+ description: { type: Type.STRING },
150
+ company: { type: Type.STRING },
151
+ url: { type: Type.STRING },
152
+ startDate: { type: Type.STRING },
153
+ endDate: { type: Type.STRING },
154
+ tags: { type: Type.ARRAY, items: { type: Type.STRING } },
155
+ },
156
+ required: ["title", "description"],
157
+ },
158
+ },
159
+ techStack: {
160
+ type: Type.ARRAY,
161
+ description: "Global skills/tech stack badges for the portfolio.",
162
+ items: { type: Type.STRING },
163
+ },
164
+ },
165
+ required: ["portfolioId", "projects"],
166
+ },
167
+ execute: async (args) => {
168
+ const result = await updatePortfolioProjects(args.portfolioId, args.projects, args.techStack);
169
+ if (isApiError(result)) {
170
+ return `❌ Failed to update portfolio projects: ${result.message}`;
171
+ }
172
+ return [
173
+ `✅ Portfolio updated with ${args.projects.length} project(s)!`,
174
+ `🔗 View live: https://careervivid.app/portfolio/${args.portfolioId}`,
175
+ ].join("\n");
176
+ },
177
+ };
178
+ // ---------------------------------------------------------------------------
179
+ // All portfolio tools bundle
180
+ // ---------------------------------------------------------------------------
181
+ export const ALL_PORTFOLIO_TOOLS = [
182
+ ListPortfoliosTool,
183
+ InitPortfolioTool,
184
+ UpdatePortfolioHeroTool,
185
+ UpdatePortfolioProjectsTool,
186
+ ];
package/dist/api.d.ts CHANGED
@@ -60,6 +60,14 @@ export declare function initPortfolio(title?: string, templateId?: string): Prom
60
60
  portfolioId: string;
61
61
  url: string;
62
62
  } | ApiError>;
63
+ export declare function portfolioList(): Promise<{
64
+ portfolios: {
65
+ id: string;
66
+ title: string;
67
+ url: string;
68
+ updatedAt: string | null;
69
+ }[];
70
+ } | ApiError>;
63
71
  export declare function updatePortfolioProjects(portfolioId: string, projects: any[], techStack?: string[]): Promise<{
64
72
  success: boolean;
65
73
  message: string;
@@ -207,4 +215,26 @@ export declare function getApplyAnswers(payload: {
207
215
  fields: ApplyFormField[];
208
216
  generateCoverLetter?: boolean;
209
217
  }): Promise<ApplyAnswerResult | ApiError>;
218
+ export interface CoverLetter {
219
+ id: string;
220
+ jobTitle: string;
221
+ companyName: string;
222
+ createdAt?: string;
223
+ content?: string;
224
+ }
225
+ /** Generate and save a new cover letter natively */
226
+ export declare function generateCoverLetter(payload: {
227
+ resumeId: string;
228
+ jobTitle: string;
229
+ companyName: string;
230
+ jobDescription: string;
231
+ }): Promise<{
232
+ success: boolean;
233
+ coverLetter: CoverLetter;
234
+ } | ApiError>;
235
+ /** List previously generated cover letters */
236
+ export declare function listCoverLetters(jobId?: string): Promise<{
237
+ coverLetters: CoverLetter[];
238
+ total: number;
239
+ } | ApiError>;
210
240
  //# sourceMappingURL=api.d.ts.map
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
@@ -139,6 +139,9 @@ export async function pingAuth() {
139
139
  export async function initPortfolio(title, templateId) {
140
140
  return apiRequest("POST", "portfolio/init", { title, templateId });
141
141
  }
142
+ export async function portfolioList() {
143
+ return apiRequest("GET", "portfolio/list");
144
+ }
142
145
  export async function updatePortfolioProjects(portfolioId, projects, techStack) {
143
146
  return apiRequest("PATCH", "portfolio/projects", { portfolioId, projects, techStack });
144
147
  }
@@ -234,3 +237,14 @@ export async function jobsList(status) {
234
237
  export async function getApplyAnswers(payload) {
235
238
  return cfRequest("POST", "generateApplyAnswers", payload);
236
239
  }
240
+ /** Generate and save a new cover letter natively */
241
+ export async function generateCoverLetter(payload) {
242
+ return cfRequest("POST", "cliCoverLetterCreate", payload);
243
+ }
244
+ /** List previously generated cover letters */
245
+ export async function listCoverLetters(jobId) {
246
+ const params = {};
247
+ if (jobId)
248
+ params.jobId = jobId;
249
+ return cfRequest("GET", "cliCoverLettersList", undefined, Object.keys(params).length ? params : undefined);
250
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"toolRegistry.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/toolRegistry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAqO3C,wBAAgB,QAAQ,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,EAAE,CA4BhG"}
1
+ {"version":3,"file":"toolRegistry.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/toolRegistry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAuO3C,wBAAgB,QAAQ,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,EAAE,CA2ChG"}
@@ -4,6 +4,8 @@ import { ALL_JOB_TOOLS } from "../../agent/tools/jobs.js";
4
4
  import { ALL_BROWSER_TOOLS } from "../../agent/tools/browser.js";
5
5
  import { ALL_LOCAL_TRACKER_TOOLS } from "../../agent/tools/local-tracker.js";
6
6
  import { ALL_URL_VERIFIER_TOOLS } from "../../agent/tools/urlVerifier.js";
7
+ import { ALL_PORTFOLIO_TOOLS } from "../../agent/tools/portfolio.js";
8
+ import { ALL_COVERLETTER_TOOLS } from "../../agent/tools/coverLetter.js";
7
9
  import { publishSingleFile } from "../publish.js";
8
10
  // ── Publish tools ─────────────────────────────────────────────────────────────
9
11
  const PublishArticleTool = {
@@ -212,8 +214,9 @@ IMPORTANT: Always call get_resume first to load the current content, then call t
212
214
  // ── All resume tools for cv agent --resume ────────────────────────────────────
213
215
  const RESUME_TOOLS = ALL_JOB_TOOLS.filter((t) => ["get_resume", "list_resumes", "tailor_resume", "delete_resume"].includes(t.name));
214
216
  export function getTools(options) {
215
- const tools = [...ALL_CODING_TOOLS, PublishArticleTool, GenerateDiagramTool];
216
217
  if (options.jobs) {
218
+ // Jobs mode: all job tools + browser + tracker + url verifier + publish
219
+ const tools = [PublishArticleTool, GenerateDiagramTool];
217
220
  for (const t of ALL_JOB_TOOLS) {
218
221
  if (!tools.find((x) => x.name === t.name))
219
222
  tools.push(t);
@@ -230,17 +233,33 @@ export function getTools(options) {
230
233
  if (!tools.find((x) => x.name === t.name))
231
234
  tools.push(t);
232
235
  }
236
+ for (const t of ALL_COVERLETTER_TOOLS) {
237
+ if (!tools.find((x) => x.name === t.name))
238
+ tools.push(t);
239
+ }
240
+ return tools;
233
241
  }
234
- else if (options.resume) {
235
- // Full resume CRUD: get, list, set fields, tailor, delete
242
+ if (options.resume) {
243
+ // Resume mode: resume CRUD + portfolio API tools
244
+ // NOTE: NO coding/file-system tools — prevents agent editing local source files.
245
+ const tools = [PublishArticleTool, GenerateDiagramTool];
236
246
  for (const t of RESUME_TOOLS) {
237
247
  if (!tools.find((x) => x.name === t.name))
238
248
  tools.push(t);
239
249
  }
240
- // Add the surgical field-update tool
241
250
  if (!tools.find((x) => x.name === "set_resume_fields")) {
242
251
  tools.push(SetResumeFieldsTool);
243
252
  }
253
+ for (const t of ALL_PORTFOLIO_TOOLS) {
254
+ if (!tools.find((x) => x.name === t.name))
255
+ tools.push(t);
256
+ }
257
+ for (const t of ALL_COVERLETTER_TOOLS) {
258
+ if (!tools.find((x) => x.name === t.name))
259
+ tools.push(t);
260
+ }
261
+ return tools;
244
262
  }
245
- return tools;
263
+ // Default coding mode: file system + publish tools
264
+ return [...ALL_CODING_TOOLS, PublishArticleTool, GenerateDiagramTool, ...ALL_COVERLETTER_TOOLS];
246
265
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "careervivid",
3
- "version": "1.12.17",
3
+ "version": "1.12.20",
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": {