career-compass-mcp 2.2.0 → 2.4.0

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 (66) hide show
  1. package/README.md +99 -12
  2. package/build/bin/cli.d.ts.map +1 -1
  3. package/build/bin/cli.js +85 -9
  4. package/build/bin/cli.js.map +1 -1
  5. package/build/src/dashboard-lite/render.d.ts +11 -11
  6. package/build/src/dashboard-lite/render.d.ts.map +1 -1
  7. package/build/src/dashboard-lite/render.js +139 -52
  8. package/build/src/dashboard-lite/render.js.map +1 -1
  9. package/build/src/dashboard-lite/server.d.ts +23 -7
  10. package/build/src/dashboard-lite/server.d.ts.map +1 -1
  11. package/build/src/dashboard-lite/server.js +106 -5
  12. package/build/src/dashboard-lite/server.js.map +1 -1
  13. package/build/src/empty-state.d.ts +16 -0
  14. package/build/src/empty-state.d.ts.map +1 -0
  15. package/build/src/empty-state.js +31 -0
  16. package/build/src/empty-state.js.map +1 -0
  17. package/build/src/pipeline-stats.d.ts +59 -0
  18. package/build/src/pipeline-stats.d.ts.map +1 -0
  19. package/build/src/pipeline-stats.js +66 -0
  20. package/build/src/pipeline-stats.js.map +1 -0
  21. package/build/src/sample-data.d.ts +49 -0
  22. package/build/src/sample-data.d.ts.map +1 -0
  23. package/build/src/sample-data.js +234 -0
  24. package/build/src/sample-data.js.map +1 -0
  25. package/build/src/schemas/career-schema.d.ts +15 -4
  26. package/build/src/schemas/career-schema.d.ts.map +1 -1
  27. package/build/src/schemas/career-schema.js +36 -2
  28. package/build/src/schemas/career-schema.js.map +1 -1
  29. package/build/src/server.d.ts +14 -1
  30. package/build/src/server.d.ts.map +1 -1
  31. package/build/src/server.js +4 -1
  32. package/build/src/server.js.map +1 -1
  33. package/build/src/storage/file-store.d.ts +25 -0
  34. package/build/src/storage/file-store.d.ts.map +1 -1
  35. package/build/src/storage/file-store.js +91 -6
  36. package/build/src/storage/file-store.js.map +1 -1
  37. package/build/src/tools/career-kb.d.ts +2 -0
  38. package/build/src/tools/career-kb.d.ts.map +1 -1
  39. package/build/src/tools/career-kb.js +155 -12
  40. package/build/src/tools/career-kb.js.map +1 -1
  41. package/build/src/tools/doctor.d.ts +115 -0
  42. package/build/src/tools/doctor.d.ts.map +1 -0
  43. package/build/src/tools/doctor.js +549 -0
  44. package/build/src/tools/doctor.js.map +1 -0
  45. package/build/src/tools/interview.d.ts.map +1 -1
  46. package/build/src/tools/interview.js +208 -1
  47. package/build/src/tools/interview.js.map +1 -1
  48. package/build/src/tools/opportunity.d.ts.map +1 -1
  49. package/build/src/tools/opportunity.js +103 -23
  50. package/build/src/tools/opportunity.js.map +1 -1
  51. package/build/src/tools/pipeline.d.ts +23 -1
  52. package/build/src/tools/pipeline.d.ts.map +1 -1
  53. package/build/src/tools/pipeline.js +111 -18
  54. package/build/src/tools/pipeline.js.map +1 -1
  55. package/build/src/tools/resume.d.ts.map +1 -1
  56. package/build/src/tools/resume.js +3 -2
  57. package/build/src/tools/resume.js.map +1 -1
  58. package/build/src/types/tool-args.d.ts +4 -1
  59. package/build/src/types/tool-args.d.ts.map +1 -1
  60. package/build/src/version.d.ts +9 -0
  61. package/build/src/version.d.ts.map +1 -1
  62. package/build/src/version.js +10 -1
  63. package/build/src/version.js.map +1 -1
  64. package/data/example/career/journal.yaml +4 -4
  65. package/data/example/pipeline/applications.yaml +66 -66
  66. package/package.json +5 -2
package/README.md CHANGED
@@ -84,7 +84,9 @@ files on your own disk** and never leaves it.
84
84
  - **Never committed to git:** `.gitignore` excludes `data/career/` and `data/pipeline/`, so
85
85
  the only career data in this repo is the fictional sample under `data/example/` (meet Alex
86
86
  Rivera). Read it, edit it, delete it — it's all just files you own.
87
- - **No account, no cloud sync, no telemetry.** Nothing phones home.
87
+ - **No account, no cloud sync, no telemetry.** The one request the package ever makes is
88
+ `check_setup`'s optional version check against the public npm registry, which carries
89
+ nothing about you or your data — see [Privacy Policy](#privacy-policy).
88
90
  - **What ships in the package:** only the MCP server code and a small set of **fictional
89
91
  example files** (`data/example/` — the "Alex Rivera" persona). There is no real career
90
92
  data in the published package, and none can be — the package and your data live in
@@ -142,7 +144,14 @@ Open Claude and say:
142
144
  Claude will:
143
145
  - Extract your work history, achievements, and skills into structured YAML
144
146
  - Ask clarifying questions about gaps or unclear metrics
145
- - Save everything to your `CAREER_DATA_PATH`
147
+ - Call `save_career_section` once per section to write it to your `CAREER_DATA_PATH`
148
+
149
+ `save_career_section` is the step where your data actually lands on disk — it is
150
+ the only tool that writes the Career KB. It saves one section at a time
151
+ (`profile`, `experience`, `skills`, `education`, `projects`, `testimonials`),
152
+ validates against the schema before touching the file, and keeps the previous
153
+ version as a timestamped `.bak`. Because it replaces a section wholesale, your
154
+ host will ask you to confirm each write; approving them is what fills the KB.
146
155
 
147
156
  That's it. From there, every tool has full context on who you are.
148
157
 
@@ -165,7 +174,7 @@ Career Compass stores all data as YAML files under `CAREER_DATA_PATH` (default `
165
174
  └── applications.yaml # all job applications
166
175
  ```
167
176
 
168
- This is your single source of truth — built once, enriched over time, read by every tool. You never need to edit these files by hand: use `ingest_document` to add data by pasting documents, or just ask Claude to update specific sections.
177
+ This is your single source of truth — built once, enriched over time, read by every tool. You never need to edit these files by hand: paste a document and ask Claude to save it, and it will extract the structure and write it with `save_career_section`. (`ingest_document` reads a document and pulls achievements out of it, but never writes — `save_career_section` is what puts them on disk.)
169
178
 
170
179
  See [`data/example/`](data/example/) in this repo for a fully populated sample (the fictional Alex Rivera).
171
180
 
@@ -205,7 +214,7 @@ cd dashboard && npm install && cd .. # dashboard deps (its own package.json)
205
214
  npm run build
206
215
 
207
216
  # Try it with the bundled Alex Rivera sample (no setup, ~1 minute):
208
- CAREER_DATA_PATH=data/example npm run dashboard
217
+ npm run dashboard -- --sample
209
218
  ```
210
219
 
211
220
  This opens the dashboard at `http://localhost:3141` (or the next available port). Point
@@ -226,13 +235,20 @@ every request**, so a browser refresh always reflects the current state of `~/.c
226
235
  > `dashboard` reports that no dashboard is available.
227
236
 
228
237
  ```bash
229
- # Ships in the package - no clone, no build:
230
- npx -y career-compass-mcp dashboard --lite
238
+ # Try it with the bundled Alex Rivera sample - no clone, no build, no setup:
239
+ npx -y career-compass-mcp dashboard --lite --sample
231
240
 
232
- # Or try it against the bundled Alex Rivera sample:
233
- CAREER_DATA_PATH=data/example npx -y career-compass-mcp dashboard --lite
241
+ # Or against your own data (CAREER_DATA_PATH, or ~/.career-compass if unset):
242
+ npx -y career-compass-mcp dashboard --lite
234
243
  ```
235
244
 
245
+ `--sample` (alias `--demo`) resolves the demo *inside the installed package*, wherever npx
246
+ put it, so it works from any directory and on any shell. The sample is a **read-only
247
+ demo**: its dates are shifted to sit around today each time it is read, so the pipeline
248
+ always looks like a live search, and Career Compass refuses to write into it. Drop the flag
249
+ — and point `CAREER_DATA_PATH` at your own folder, or leave it unset for
250
+ `~/.career-compass` — before saving anything.
251
+
236
252
  Plain `career-compass-mcp dashboard` uses the full dashboard when it's been built and falls back
237
253
  to the lite one otherwise. Data never leaves your machine - the page has no external assets and
238
254
  makes no network calls. Clicking a card copies a ready-to-paste prompt for Claude (in Cowork, the
@@ -243,11 +259,16 @@ same board is available as a live artifact that dispatches the prompt straight i
243
259
  ## Privacy Policy
244
260
 
245
261
  Career Compass runs entirely on your own computer. There is no account, no cloud sync, and
246
- no telemetry — the software makes no outbound network requests of its own.
262
+ no telemetry. The whole package makes exactly one outbound network request: `check_setup`
263
+ asks the public npm registry whether a newer version has been released. It is an
264
+ unauthenticated GET for the package name — nothing about you or your data goes with it —
265
+ and calling `check_setup` with `checkForUpdates: false` never constructs the request at all.
247
266
 
248
267
  - **What it handles:** the career history, job pipeline, and pasted documents you give it.
249
268
  - **Where it's stored:** plain YAML in the directory you set via `CAREER_DATA_PATH`
250
- (default `~/.career-compass/`), plus timestamped `.bak` copies of previous versions.
269
+ (default `~/.career-compass/`), plus timestamped `.bak` copies of previous versions
270
+ (the five most recent per file are kept; older ones are pruned on the next write —
271
+ backups you make by hand are never touched).
251
272
  - **Who else sees it:** only the MCP client you connect (e.g. Claude Desktop), and through
252
273
  it your model provider, under *their* policy — and only for the requests you make.
253
274
  Career Compass sends nothing anywhere on its own.
@@ -265,20 +286,23 @@ published at https://benskamps.github.io/career-compass-mcp/privacy
265
286
 
266
287
  | Tool | What it does |
267
288
  |------|-------------|
268
- | `explore_opportunity` | Analyzes a job posting against your Career KB — fit score, matched strengths, gaps, talking points, day-in-the-life, red flags |
289
+ | `explore_opportunity` | Analyzes a job posting against your Career KB **and your stated preferences** — salary band, remote, relocation, notice period. Returns a fit score, an explicit compensation and location check, matched strengths, gaps, talking points, day-in-the-life, red flags. Pass `sourceFitLabel` ("LinkedIn: strong match") and it will explicitly agree or disagree with the job board, in both directions |
269
290
  | `research_company` | Builds an intelligence brief: product, culture, funding, interview process, strategic fit |
270
291
  | `tailor_resume` | Generates an ATS-optimized, tailored resume from your KB — standard, federal, academic, or functional formats |
271
292
  | `generate_cover_letter` | Writes a personalized cover letter with your actual achievements woven in |
272
293
  | `format_for_ats` | Reformats resume content for specific ATS systems: Workday, Greenhouse, Lever, LinkedIn, iCIMS, Taleo |
273
294
  | `pipeline_view` | Reads the pipeline — list, funnel stats, what needs attention, or one application by id. Read-only, so it runs without a permission prompt |
274
- | `pipeline_add` | Adds one job application to the pipeline |
295
+ | `pipeline_add` | Adds one job application to the pipeline. Takes an optional starting `status` (defaults to `applied`); unknown statuses are rejected with a did-you-mean suggestion |
275
296
  | `pipeline_update` | Updates one application — status, notes, follow-up date, a contact, or an interview round |
276
297
  | `classify_email` | Classifies a job-search email and extracts contacts, dates, and suggested pipeline updates |
277
298
  | `prepare_interview` | Full interview prep: opening pitch, STAR stories, likely questions, company alignment, questions to ask |
299
+ | `interview_arc` | Mid-process projection: reconstructs the arc so far from your recorded rounds and journal signals, then projects what the **next** round will probe — ground already covered, threads the last interview left open, gaps nobody has tested yet, and ranked likely questions |
278
300
  | `evaluate_offer` | Breaks down total comp, compares to market, builds negotiation strategy, drafts counter scripts |
279
301
  | `ingest_document` | Extracts achievements from any document: performance review, award email, LinkedIn recommendation, project summary |
280
302
  | `generate_rejection_response` | Drafts a graceful response that keeps the door open and maintains the relationship |
281
303
  | `capture_insight` | Appends a dated signal to your career journal — fit signals, interview insights, offer reflections, rejection patterns, skill evidence, wins — which later resume, interview, and fit prompts read back |
304
+ | `save_career_section` | Writes one section of your Career KB to disk as plain YAML — this is how the KB gets populated. Replaces the whole section; the previous version is kept as a `.bak` |
305
+ | `check_setup` | Health-checks the install in one pass — version vs. the current npm release, data directory, which Career KB sections are filled, whether the pipeline parses, leftover temp files, dashboard status — each finding with the one command that fixes it. Read-only. Run it first when anything seems off |
282
306
 
283
307
  ## Resources
284
308
 
@@ -315,6 +339,69 @@ Power-user shortcuts (appear in Claude's prompt menu):
315
339
 
316
340
  ---
317
341
 
342
+ ## Upgrading
343
+
344
+ **If something is behaving strangely, start here:**
345
+
346
+ > **"Run the Career Compass setup check."**
347
+
348
+ That calls `check_setup`, which reports your installed version against the current npm
349
+ release, whether your data directory exists and is writable, which Career KB sections are
350
+ filled in, whether your pipeline file parses, any leftover temp files, and whether the
351
+ dashboard is running — each with the one command that fixes it. It is read-only and usually
352
+ answers the question before you have to debug anything.
353
+
354
+ It is also the fastest way to find out you are simply on an old version, which is the most
355
+ common cause of "this feels rough around the edges."
356
+
357
+ Your career data is never touched by an upgrade. It lives in `CAREER_DATA_PATH`, not in the
358
+ package, and older data directories keep working — sections added by later releases are
359
+ created when you first write them.
360
+
361
+ ### Claude Desktop (`.mcpb` bundle)
362
+
363
+ The bundle does not self-update. Download the current `.mcpb` from the
364
+ [Releases page](https://github.com/benskamps/career-compass-mcp/releases), then in Claude
365
+ Desktop go to **Settings → Extensions**, remove the installed Career Compass extension, and
366
+ install the new file. Restart Claude Desktop.
367
+
368
+ Your settings — including `CAREER_DATA_PATH` — are re-entered on install, so note the path
369
+ before you remove the old one. `check_setup` prints it.
370
+
371
+ ### npx (the config in Quick Start)
372
+
373
+ `npx -y career-compass-mcp` resolves the latest published version, but npx caches, so a
374
+ stale copy can persist. To force the current one:
375
+
376
+ ```bash
377
+ npx -y career-compass-mcp@latest --version
378
+ ```
379
+
380
+ Then restart your MCP client. If the version still lags, clear the npx cache with
381
+ `npm cache clean --force` and try again.
382
+
383
+ ### Global npm install
384
+
385
+ ```bash
386
+ npm install -g career-compass-mcp@latest
387
+ career-compass-mcp --version
388
+ ```
389
+
390
+ Restart your MCP client afterward — it keeps the old server process alive until it does.
391
+
392
+ ### From source
393
+
394
+ ```bash
395
+ git pull
396
+ npm install
397
+ npm run build:mcp # or `npm run build` for the full Next.js dashboard too
398
+ ```
399
+
400
+ Restart your MCP client. A source checkout will normally report itself as *ahead* of npm in
401
+ `check_setup`; that is expected, not drift.
402
+
403
+ ---
404
+
318
405
  ## Building from Source
319
406
 
320
407
  ```bash
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":";AAaA;;;;GAIG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":";AAkBA;;;;GAIG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,CAAC"}
package/build/bin/cli.js CHANGED
@@ -1,10 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import { homedir } from "os";
3
- import { join } from "path";
3
+ import { join, resolve } from "path";
4
4
  import { existsSync, mkdirSync } from "fs";
5
5
  import { createServer as createNetServer } from "net";
6
6
  import { spawn } from "child_process";
7
7
  import { fileURLToPath } from "url";
8
+ /** The dashboard binds loopback and nothing else. Declared here because this
9
+ * file executes top-level: findPort() runs during module evaluation, so a
10
+ * const declared further down is still in its temporal dead zone. */
11
+ const LOOPBACK = "127.0.0.1";
8
12
  const args = process.argv.slice(2);
9
13
  // ─── Version ─────────────────────────────────────────────────────────────────
10
14
  const __cliDir = fileURLToPath(new URL(".", import.meta.url));
@@ -14,6 +18,7 @@ const __cliDir = fileURLToPath(new URL(".", import.meta.url));
14
18
  * cli-version.test.ts exercises it directly.
15
19
  */
16
20
  import { readPkgVersion } from "../src/version.js";
21
+ import { bundledSampleDir } from "../src/sample-data.js";
17
22
  export { readPkgVersion };
18
23
  const pkgVersion = readPkgVersion(__cliDir);
19
24
  if (args.includes("--version") || args.includes("-v")) {
@@ -28,6 +33,7 @@ career-compass-mcp v${pkgVersion}
28
33
  Usage:
29
34
  career-compass-mcp Run MCP server (stdio)
30
35
  career-compass-mcp dashboard Open web dashboard (full if built, else lite)
36
+ career-compass-mcp dashboard --sample Open the bundled Alex Rivera demo
31
37
  career-compass-mcp dashboard --lite Force the zero-build lite dashboard
32
38
  career-compass-mcp dashboard --port 3000 Specify port (default: 3141)
33
39
  career-compass-mcp dashboard --no-open Start without opening browser
@@ -35,9 +41,13 @@ Usage:
35
41
  Options:
36
42
  -h, --help Show this help message
37
43
  -v, --version Show version number
44
+ --sample Serve the bundled read-only demo (alias: --demo).
45
+ Ignores CAREER_DATA_PATH; writes nothing.
38
46
  --lite Use the built-in zero-build dashboard (no Next.js build needed)
39
47
  --port <number> Dashboard port (default: 3141)
40
48
  --no-open Don't auto-open browser
49
+
50
+ Your data folder is CAREER_DATA_PATH, or ~/.career-compass when that is unset.
41
51
  `);
42
52
  process.exit(0);
43
53
  }
@@ -60,12 +70,8 @@ else {
60
70
  }
61
71
  const noOpen = args.includes("--no-open");
62
72
  const forceLite = args.includes("--lite");
63
- // Resolve data path
64
- const dataPath = process.env.CAREER_DATA_PATH ?? join(homedir(), ".career-compass");
65
- if (!existsSync(dataPath)) {
66
- mkdirSync(join(dataPath, "career"), { recursive: true });
67
- mkdirSync(join(dataPath, "pipeline"), { recursive: true });
68
- }
73
+ const useSample = args.includes("--sample") || args.includes("--demo");
74
+ const dataPath = resolveDataPath(useSample);
69
75
  // Find available port
70
76
  const port = await findPort(requestedPort);
71
77
  // Resolve standalone server path
@@ -119,13 +125,22 @@ else {
119
125
  process.on("SIGTERM", shutdown);
120
126
  }
121
127
  }
128
+ /**
129
+ * Find a free port, probing the exact address the dashboard will bind.
130
+ *
131
+ * `listen(port)` with no host binds every interface, which is the wrong test in
132
+ * two ways: it can call a port free when something already holds it on
133
+ * 127.0.0.1, and for the moment it is open it accepts connections from the
134
+ * network — on a tool whose entire promise is that nothing leaves the machine.
135
+ * Probe loopback, bind loopback.
136
+ */
122
137
  function findPort(preferred) {
123
138
  return new Promise((resolve) => {
124
139
  const server = createNetServer();
125
- server.listen(preferred, () => { server.close(() => resolve(preferred)); });
140
+ server.listen(preferred, LOOPBACK, () => { server.close(() => resolve(preferred)); });
126
141
  server.on("error", () => {
127
142
  const fallback = createNetServer();
128
- fallback.listen(0, () => {
143
+ fallback.listen(0, LOOPBACK, () => {
129
144
  const addr = fallback.address();
130
145
  const port = typeof addr === "object" && addr ? addr.port : 0;
131
146
  fallback.close(() => resolve(port));
@@ -133,6 +148,67 @@ function findPort(preferred) {
133
148
  });
134
149
  });
135
150
  }
151
+ function ensureDataDirs(dir) {
152
+ mkdirSync(join(dir, "career"), { recursive: true });
153
+ mkdirSync(join(dir, "pipeline"), { recursive: true });
154
+ }
155
+ /**
156
+ * Decide which folder the dashboard serves, and refuse the one case that used
157
+ * to fail silently.
158
+ *
159
+ * The README's own demo line was `CAREER_DATA_PATH=data/example npx -y
160
+ * career-compass-mcp dashboard --lite`. That path is relative, and npx runs it
161
+ * from wherever the user happens to be standing — so unless they were inside a
162
+ * clone of this repo it resolved to a folder that did not exist, which this
163
+ * function's predecessor then created. The result was an empty dashboard, a
164
+ * stray `./data/example/` left in their working directory, and no indication
165
+ * that either had happened. `--sample` is the flag that command actually
166
+ * wanted: it resolves the demo inside the installed package, wherever npx put
167
+ * it.
168
+ *
169
+ * A missing CAREER_DATA_PATH is now refused rather than conjured. Creating a
170
+ * directory the user did not ask for is the more surprising of the two
171
+ * behaviours — the default `~/.career-compass` is still created without
172
+ * ceremony, because that one *is* what they asked for by not choosing.
173
+ */
174
+ function resolveDataPath(useSample) {
175
+ if (useSample) {
176
+ const sample = bundledSampleDir();
177
+ if (!sample) {
178
+ console.error("Error: --sample serves the bundled demo (data/example/), which is missing from this install.");
179
+ console.error("Reinstall the package, or drop --sample and point CAREER_DATA_PATH at your own folder.");
180
+ process.exit(1);
181
+ }
182
+ console.error(`Serving the bundled Alex Rivera demo — read-only, nothing is written:\n ${sample}`);
183
+ return sample;
184
+ }
185
+ const configured = process.env.CAREER_DATA_PATH;
186
+ if (!configured) {
187
+ const fallback = join(homedir(), ".career-compass");
188
+ ensureDataDirs(fallback);
189
+ return fallback;
190
+ }
191
+ const abs = resolve(configured);
192
+ if (!existsSync(abs)) {
193
+ console.error(`Error: CAREER_DATA_PATH points at a folder that does not exist:\n ${abs}`);
194
+ if (abs !== configured) {
195
+ console.error(` (resolved from "${configured}" against ${process.cwd()})`);
196
+ }
197
+ console.error("");
198
+ console.error("Nothing was created: an empty folder here would open an empty dashboard and");
199
+ console.error("leave a stray directory behind. One of these is probably what you meant:");
200
+ console.error("");
201
+ console.error(" To see the bundled demo:");
202
+ console.error(" career-compass-mcp dashboard --sample");
203
+ console.error(" To use your own data in the default folder (~/.career-compass):");
204
+ console.error(" clear CAREER_DATA_PATH from your environment");
205
+ console.error(" To really use this folder:");
206
+ console.error(` mkdir "${abs}"`);
207
+ process.exit(1);
208
+ }
209
+ ensureDataDirs(abs);
210
+ return abs;
211
+ }
136
212
  function openBrowser(url) {
137
213
  const cmd = process.platform === "win32" ? "start" : process.platform === "darwin" ? "open" : "xdg-open";
138
214
  spawn(cmd, [url], { shell: true, stdio: "ignore", detached: true }).unref();
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":"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"}
@@ -6,16 +6,16 @@ interface NextAction {
6
6
  }
7
7
  /** Derive next actions from follow-up dates, upcoming interviews, and expiring offers. */
8
8
  export declare function deriveNextActions(apps: Application[], today?: Date): NextAction[];
9
- export interface PipelineStats {
10
- total: number;
11
- active: number;
12
- inConversation: number;
13
- offers: number;
14
- responseRate: number;
15
- ghostRate: number;
16
- }
17
- export declare function computeStats(apps: Application[]): PipelineStats;
18
- /** Render the full self-contained HTML document. */
19
- export declare function renderLiteDashboard(pipeline: Pipeline): string;
9
+ /**
10
+ * Render the full self-contained HTML document.
11
+ *
12
+ * `dataDir` is passed in rather than read here so this module stays free of the
13
+ * store (and of node-only APIs — the Next dashboard imports from this tree).
14
+ * When it is absent the footer simply does not name a folder, which is the one
15
+ * honest thing to say without knowing it: the footer used to print
16
+ * `~/.career-compass` unconditionally, so anyone running with CAREER_DATA_PATH
17
+ * set was told their data was somewhere it wasn't.
18
+ */
19
+ export declare function renderLiteDashboard(pipeline: Pipeline, dataDir?: string): string;
20
20
  export {};
21
21
  //# sourceMappingURL=render.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/dashboard-lite/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAqB,MAAM,6BAA6B,CAAC;AAmC5F,UAAU,UAAU;IAAG,GAAG,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;CAAE;AAE/F,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,KAAK,OAAa,GAAG,UAAU,EAAE,CAwBvF;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IACtE,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;CACzC;AACD,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,aAAa,CAa/D;AAkBD,oDAAoD;AACpD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAuI9D"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/dashboard-lite/render.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAqB,MAAM,6BAA6B,CAAC;AA2D5F,UAAU,UAAU;IAAG,GAAG,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;CAAE;AAE/F,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,KAAK,OAAa,GAAG,UAAU,EAAE,CAwCvF;AAmBD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CA6LhF"}