@getkrafter/resume-toolkit 1.0.4 → 1.0.5

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getkrafter/resume-toolkit",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "description": "Deterministic resume scoring, ATS keyword matching, and AI-powered resume tailoring",
5
5
  "type": "module",
6
6
  "exports": {
@@ -69,9 +69,11 @@ You do NOT need to do this manually. The `score_resume` MCP tool handles parsing
69
69
 
70
70
  ---
71
71
 
72
- ## Step 5 — Call the Scoring Tool
72
+ ## Step 5 — Score the Resume
73
73
 
74
- **Standard path** (pasted text or file):
74
+ Choose the method that matches your environment:
75
+
76
+ **Option A — MCP tools available** (user has the MCP server configured):
75
77
 
76
78
  Call the `score_resume` MCP tool:
77
79
  ```json
@@ -81,9 +83,7 @@ Call the `score_resume` MCP tool:
81
83
  }
82
84
  ```
83
85
 
84
- **Krafter path** (user selected a Krafter resume):
85
-
86
- Call the `score_krafter_resume` MCP tool:
86
+ Or for Krafter resumes, call `score_krafter_resume`:
87
87
  ```json
88
88
  {
89
89
  "id": "<the resume ID from list_resumes>",
@@ -91,6 +91,30 @@ Call the `score_krafter_resume` MCP tool:
91
91
  }
92
92
  ```
93
93
 
94
+ **Option B — No MCP server** (skill installed without MCP):
95
+
96
+ Run this inline script to score the resume. Replace the `resumeText` and `jdText` values with the actual content:
97
+
98
+ ```bash
99
+ node --input-type=module -e "
100
+ import { scoreResume, scoreATS } from '@getkrafter/resume-toolkit';
101
+
102
+ const resumeText = process.env.RESUME_TEXT;
103
+ const jdText = process.env.JD_TEXT || '';
104
+
105
+ const lines = resumeText.split('\n');
106
+ const bullets = lines.filter(l => /^\s*[-*•]|\d+[.)]/.test(l)).map(l => l.replace(/^\s*[-*•]\s*|\d+[.)]\s*/, '').trim());
107
+ const sections = lines.filter(l => l.trim().length < 50 && l.trim().length > 0 && !(/^\s*[-*•]|\d+[.)]/.test(l)) && (l.trim() === l.trim().toUpperCase() || /^[A-Z][a-z]/.test(l.trim()))).map(l => l.trim().toLowerCase());
108
+
109
+ const result = scoreResume({ rawText: resumeText, bullets, sections }, jdText || undefined);
110
+ console.log(JSON.stringify(result, null, 2));
111
+ " <<< ""
112
+ ```
113
+
114
+ Pass `RESUME_TEXT` and `JD_TEXT` as environment variables containing the resume and job description text. Parse the JSON output and present results per Step 6.
115
+
116
+ If `@getkrafter/resume-toolkit` is not installed as a dependency, install it first: `npm install @getkrafter/resume-toolkit`
117
+
94
118
  ---
95
119
 
96
120
  ## Step 6 — Present the Results
@@ -56,27 +56,39 @@ transformation internally via `toResumeData`.
56
56
 
57
57
  ### Step 4 -- Run Scoring Tools
58
58
 
59
- Run **both** scoring tools to get the full picture:
59
+ Run **both** scoring tools to get the full picture. Choose the method that matches your environment:
60
60
 
61
- **For pasted/file resumes:**
61
+ **Option A — MCP tools available** (user has the MCP server configured):
62
62
 
63
- 1. `score_ats` with `{ resumeText, jdText }` -- returns `ATSResult` with:
64
- - `score` (0-100)
65
- - `matched` keywords (array)
66
- - `missing` keywords (array)
67
- - `details.bigramsMatched`, `details.unigramsMatched`, `details.bigramsMissing`, `details.unigramsMissing`
63
+ For pasted/file resumes:
64
+ 1. `score_ats` with `{ resumeText, jdText }` -- returns `ATSResult` with `score`, `matched`, `missing`, and `details` breakdown.
65
+ 2. `score_resume` with `{ resumeText, jdText }` -- returns `ResumeScore` with `total`, `mode`, `breakdown`, `ats`, and `flags`.
68
66
 
69
- 2. `score_resume` with `{ resumeText, jdText }` -- returns `ResumeScore` with:
70
- - `total` (0-100)
71
- - `mode` ("with-jd")
72
- - `breakdown` per dimension (quantification, verbStrength, ats, bulletStructure, sectionCompleteness)
73
- - `ats` (embedded ATSResult)
74
- - `flags` (diagnostic messages)
67
+ For Krafter resumes:
68
+ 1. `score_krafter_resume` with `{ id, jdText }` -- returns the full `ResumeScore` including the embedded `ATSResult`.
75
69
 
76
- **For Krafter resumes:**
70
+ **Option B — No MCP server** (skill installed without MCP):
77
71
 
78
- 1. `score_krafter_resume` with `{ id, jdText }` -- returns the full `ResumeScore` including the embedded `ATSResult`.
79
- 2. Optionally also call `score_ats` directly if you need the standalone ATS breakdown.
72
+ Run this inline script. Pass `RESUME_TEXT` and `JD_TEXT` as environment variables:
73
+
74
+ ```bash
75
+ node --input-type=module -e "
76
+ import { scoreResume, scoreATS } from '@getkrafter/resume-toolkit';
77
+
78
+ const resumeText = process.env.RESUME_TEXT;
79
+ const jdText = process.env.JD_TEXT;
80
+
81
+ const lines = resumeText.split('\n');
82
+ const bullets = lines.filter(l => /^\s*[-*•]|\d+[.)]/.test(l)).map(l => l.replace(/^\s*[-*•]\s*|\d+[.)]\s*/, '').trim());
83
+ const sections = lines.filter(l => l.trim().length < 50 && l.trim().length > 0 && !(/^\s*[-*•]|\d+[.)]/.test(l)) && (l.trim() === l.trim().toUpperCase() || /^[A-Z][a-z]/.test(l.trim()))).map(l => l.trim().toLowerCase());
84
+
85
+ const atsResult = scoreATS(resumeText, jdText);
86
+ const scoreResult = scoreResume({ rawText: resumeText, bullets, sections }, jdText);
87
+ console.log(JSON.stringify({ atsResult, scoreResult }, null, 2));
88
+ " <<< ""
89
+ ```
90
+
91
+ If `@getkrafter/resume-toolkit` is not installed, run `npm install @getkrafter/resume-toolkit` first. Parse the JSON output and continue to Step 5.
80
92
 
81
93
  ### Step 5 -- Gap Analysis
82
94