@rwendell/dossier 0.1.3 → 0.1.14

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 (55) hide show
  1. package/README.md +85 -22
  2. package/dist/answer/run.d.ts +0 -1
  3. package/dist/answer/run.js +32 -28
  4. package/dist/answer/run.js.map +1 -1
  5. package/dist/cli/commands/answer.d.ts +1 -2
  6. package/dist/cli/commands/answer.js +17 -11
  7. package/dist/cli/commands/answer.js.map +1 -1
  8. package/dist/cli/commands/doctor.js +11 -0
  9. package/dist/cli/commands/doctor.js.map +1 -1
  10. package/dist/cli/commands/fonts.d.ts +8 -0
  11. package/dist/cli/commands/fonts.js +61 -0
  12. package/dist/cli/commands/fonts.js.map +1 -0
  13. package/dist/cli/commands/paths.js +3 -2
  14. package/dist/cli/commands/paths.js.map +1 -1
  15. package/dist/cli/commands/score.js +13 -1
  16. package/dist/cli/commands/score.js.map +1 -1
  17. package/dist/cli/commands/sync.js +6 -7
  18. package/dist/cli/commands/sync.js.map +1 -1
  19. package/dist/cli/index.js +2 -0
  20. package/dist/cli/index.js.map +1 -1
  21. package/dist/config/paths.d.ts +10 -1
  22. package/dist/config/paths.js +25 -6
  23. package/dist/config/paths.js.map +1 -1
  24. package/dist/job/last.d.ts +10 -0
  25. package/dist/job/last.js +80 -0
  26. package/dist/job/last.js.map +1 -0
  27. package/dist/projects/rank.d.ts +9 -0
  28. package/dist/projects/rank.js +33 -15
  29. package/dist/projects/rank.js.map +1 -1
  30. package/dist/projects/store.d.ts +5 -0
  31. package/dist/projects/store.js +12 -1
  32. package/dist/projects/store.js.map +1 -1
  33. package/dist/proposal/run.js +2 -0
  34. package/dist/proposal/run.js.map +1 -1
  35. package/dist/resume/find.d.ts +2 -0
  36. package/dist/resume/find.js +13 -3
  37. package/dist/resume/find.js.map +1 -1
  38. package/dist/resume/fonts.d.ts +31 -0
  39. package/dist/resume/fonts.js +124 -0
  40. package/dist/resume/fonts.js.map +1 -0
  41. package/dist/resume/one-page.js +5 -3
  42. package/dist/resume/one-page.js.map +1 -1
  43. package/dist/resume/render.d.ts +5 -1
  44. package/dist/resume/render.js +44 -25
  45. package/dist/resume/render.js.map +1 -1
  46. package/dist/resume/run.js +25 -10
  47. package/dist/resume/run.js.map +1 -1
  48. package/dist/upwork/profile.js +3 -3
  49. package/dist/upwork/profile.js.map +1 -1
  50. package/dist/util/open-file.d.ts +24 -0
  51. package/dist/util/open-file.js +140 -14
  52. package/dist/util/open-file.js.map +1 -1
  53. package/dist/verify/run.js +30 -14
  54. package/dist/verify/run.js.map +1 -1
  55. package/package.json +1 -1
package/README.md CHANGED
@@ -26,8 +26,9 @@ Requirements:
26
26
 
27
27
  - Node.js 20+
28
28
  - `opencode` on `PATH` for model calls
29
- - Chrome for Upwork page/profile fetching (Puppeteer downloads one)
29
+ - Chrome for rendering and Upwork page/profile fetching (Puppeteer downloads one)
30
30
  - `gh` only when GitHub sync is added later
31
+ - a system serif font, or let `dossier` download a fallback (see below)
31
32
 
32
33
  ## Data layout
33
34
 
@@ -45,19 +46,28 @@ Requirements:
45
46
  freelance/profile-*.json # cached public freelance profile
46
47
  github.json # synced GitHub/org repos
47
48
  local-projects.json # scanned ~/projects
48
-
49
- ~/.local/state/dossier/logs/
50
- *.prompt.txt # --debug prompts
51
- *.opencode-output.jsonl # raw model output on failures or --debug
49
+ fonts/ # fallback serif, downloaded on demand
50
+ logs/ # diagnostics, see below
51
+ tailor/<slug>/ # scratch HTML used for PDF measurement
52
+ last-job.json # most recent job, reused by `dossier answer`
53
+ precursors/resume-*.json # JSON Resume each PDF was rendered from
54
+ traces/resume-*.trace.json # evidence trace for each tailored resume
52
55
  ```
53
56
 
54
57
  Dossier agents are project-local to its runtime directory. OpenCode is invoked
55
58
  with that directory as its working directory, so `dossier-*` agents do not
56
59
  appear in your global OpenCode TUI.
57
60
 
58
- Diagnostics never land in the output directory. Raw model output and debug
59
- prompts go to the XDG state directory above (`DOSSIER_STATE_HOME` overrides it),
60
- and the error message prints the exact path.
61
+ Intermediate files never land in the output directory:
62
+
63
+ ```text
64
+ <cache>/logs/*.prompt.txt # --debug prompts
65
+ <cache>/logs/*.opencode-output.jsonl # raw model output on failures or --debug
66
+ <cache>/tailor/<slug>/measure.html # layout measurement scratch file
67
+ ```
68
+
69
+ They follow the cache location and are removed by `dossier clean`. The error
70
+ message prints the exact path.
61
71
 
62
72
  Cache location is mode-aware:
63
73
 
@@ -180,7 +190,7 @@ dossier tailor 'https://www.upwork.com/jobs/...'
180
190
  dossier tailor job.md --out ~/Documents/resumes
181
191
  dossier tailor --generic
182
192
  dossier tailor # no job source -> generic resume
183
- dossier tailor job.md --no-render # JSON + trace only
193
+ dossier tailor job.md --no-render # skip the PDF; write the JSON to the cache
184
194
  ```
185
195
 
186
196
  The PDF is rendered with `resumed` and the configured theme. It is measured in
@@ -189,25 +199,60 @@ until it fits on one page, then filled from unused fact-bank achievements when
189
199
  it is too sparse. The PDF opens when the run finishes. Disable that with
190
200
  `--no-open` or `--open=false`, or set `output.open: false` in `config.yml`.
191
201
 
202
+ On WSL the PDF is handed to the Windows default handler (`wslview`, then
203
+ PowerShell `Start-Process`, then `cmd /c start`). Shell aliases and functions,
204
+ such as a fish `open` wrapper, are not visible to spawned processes, so dossier
205
+ never relies on them.
206
+
192
207
  Tailoring never fetches a freelance profile on its own. Identity, contact
193
208
  details, and location come from `career.yml` and `career.private.yml`. Pass
194
209
  `--profile <url>` only when you explicitly want to enrich the basics from a
195
210
  public profile.
196
211
 
197
- Outputs default to the current directory:
212
+ ### PDF fonts
213
+
214
+ Themes ask for a specific font family. On a minimal Linux install (or a fresh
215
+ WSL image) fontconfig can resolve even `serif` to a symbol font, which makes
216
+ every PDF render as Greek/symbol glyphs. Dossier checks the rendered font and,
217
+ when it resolves to a symbol font, downloads a metric-compatible serif
218
+ (Tinos, OFL) into `~/.cache/dossier/fonts` once and uses it for the PDF.
219
+
220
+ ```bash
221
+ dossier fonts # show the system font and fallback status
222
+ dossier fonts --install # download the fallback now
223
+ dossier fonts --force # download it again
224
+ ```
225
+
226
+ Installing a real serif font is preferable and keeps the theme's intended look:
227
+
228
+ ```bash
229
+ sudo apt install fonts-liberation # Debian/Ubuntu/WSL
230
+ ```
231
+
232
+ The PDF is the deliverable:
198
233
 
199
234
  ```text
200
- ./resume-<slug>.json
201
- ./resume-<slug>.trace.json
202
235
  ./resume-<slug>.pdf
203
236
  ```
204
237
 
238
+ The JSON Resume and its evidence trace are precursors, not deliverables, so they
239
+ are kept in the cache:
240
+
241
+ ```text
242
+ <cache>/precursors/resume-<slug>.json
243
+ <cache>/traces/resume-<slug>.trace.json
244
+ ```
245
+
246
+ `dossier verify` and the proposal/answer reuse logic find both by resume
247
+ filename. `dossier clean` removes them with the rest of the cache.
248
+
205
249
  ## Sync project metadata
206
250
 
207
251
  Project candidates come from GitHub/org repos and local `~/projects` checkouts.
208
252
  Sync them into the cache:
209
253
 
210
254
  ```bash
255
+ dossier sync # same as `sync all`
211
256
  dossier sync github # requires gh auth login
212
257
  dossier sync local # scans ~/projects
213
258
  dossier sync all
@@ -221,16 +266,25 @@ records READMEs, manifests, languages, local commit subjects, and remote URLs.
221
266
  tooling does not rank itself as a portfolio project. Add them to
222
267
  `local.include` in `career.yml` if you want them included.
223
268
 
224
- Candidate ranking is keyword overlap against the job description. Metadata
225
- matches (name, description, topics, languages, local commits) are weighted more
226
- than README matches, and only projects with at least one match are selected.
227
- Inspect the ranking without calling a model:
269
+ Candidate ranking is keyword overlap against the job description. Structural
270
+ matches (name, description, topics, languages, local commits) are weighted much
271
+ more than README matches. A project needs at least one structural match to be
272
+ used as a candidate; README-only matches are shown by `score` but skipped,
273
+ because prose overlap is usually incidental.
274
+
275
+ `score` explains the ranking; it is retrieval, not selection. The first `--limit`
276
+ candidates are handed to the model, which chooses the two or three that actually
277
+ support the job's requirements. A high score alone does not mean a project is
278
+ relevant.
228
279
 
229
280
  ```bash
230
281
  dossier score job.md
231
282
  dossier score job.md --limit 20
232
283
  ```
233
284
 
285
+ Each line shows the total score followed by `strong:` (structural) and `readme:`
286
+ (prose-only) matches.
287
+
234
288
  `proposal`, `answer`, and `tailor` automatically use cached candidates when
235
289
  present. Run a sync after adding repositories or changing READMEs.
236
290
 
@@ -246,10 +300,18 @@ dossier proposal job.md --profile 'https://www.upwork.com/freelancers/~...'
246
300
  ## Answer an application question
247
301
 
248
302
  ```bash
249
- dossier answer job.md -q 'Why is this role a good fit?'
303
+ dossier answer -q 'Why is this role a good fit?' # uses the last job
304
+ dossier answer 'Why is this role a good fit?' # same, positional
305
+ dossier answer job.md -q 'Why is this role a good fit?' # explicit job
250
306
  dossier answer job.md -q question.txt --hint 'Emphasize the Kafka work'
251
307
  ```
252
308
 
309
+ With no job argument, `answer` reuses the most recent job from `dossier tailor`
310
+ or `dossier proposal` (`<cache>/last-job.json`). If that file is missing, it
311
+ reconstructs the job from the newest tailored resume in the precursor cache. With one positional and no
312
+ `-q`, the positional is treated as the question. A positional that is a URL or
313
+ an existing file is treated as the job source, so a question is required then.
314
+
253
315
  Answers are written to `./answer-<slug>.<question>.md` and `.json`, and copied
254
316
  to the clipboard by default.
255
317
 
@@ -263,17 +325,18 @@ Outputs default to the current directory:
263
325
  Use `--out ~/Documents/proposals` to write elsewhere and `--name` to keep
264
326
  variants.
265
327
 
266
- If `resume-<slug>.json` and `resume-<slug>.trace.json` are present in the
267
- output directory (for example, from `dossier tailor`), `proposal` and `answer`
268
- use them as the primary framing automatically.
328
+ If a tailored resume for the same slug exists in the precursor cache (with its
329
+ trace), `proposal` and `answer` use it as the primary framing automatically.
269
330
 
270
331
  Public Upwork `/jobs/...` URLs use the headless Chrome fallback. Saved-jobs
271
332
  modal URLs (`/nx/search/jobs/saved/details/...`) and search URLs need your
272
333
  logged-in session and are rejected. If Upwork shows a Cloudflare check, save the
273
334
  job text to a file and pass that instead.
274
335
 
275
- The public profile is cached for 24 hours; `--refresh` fetches it again.
276
- `--no-profile` ignores `profile.url` from `freelance.yml`.
336
+ Only `proposal` reads a public profile, and only from `profile.url` in
337
+ `freelance.yml` or an explicit `--profile`. The profile is cached indefinitely
338
+ because scraping Upwork is fragile; `--refresh` fetches it again. `tailor` and
339
+ `answer` never fetch one unless you pass `--profile` yourself.
277
340
 
278
341
  ## Verify and clean
279
342
 
@@ -8,7 +8,6 @@ export interface AnswerRunOptions {
8
8
  description?: string;
9
9
  client?: string;
10
10
  profile?: string;
11
- noProfile?: boolean;
12
11
  question: string;
13
12
  hint?: string[];
14
13
  provider?: string;
@@ -6,6 +6,7 @@ import { loadConfig } from '../config/config.js';
6
6
  import { displayPath, getRuntimeDir, resolveOutputDir, } from '../config/paths.js';
7
7
  import { verifyAnswer, } from '../evidence/verify.js';
8
8
  import { readJobInput } from '../job/input.js';
9
+ import { loadLastJob } from '../job/last.js';
9
10
  import { prepareAgents } from '../llm/agents.js';
10
11
  import { LlmError, runAgent } from '../llm/providers.js';
11
12
  import { hasProjectCache, loadCandidates, } from '../projects/store.js';
@@ -13,35 +14,22 @@ import { findTailoredResume } from '../resume/find.js';
13
14
  import { slugify } from '../util/slug.js';
14
15
  import { writeRunLog } from '../util/run-log.js';
15
16
  import { applyProfileToCareer, loadUpworkProfile, mapProfilePortfolio, } from '../upwork/profile.js';
16
- import { loadFreelanceConfig } from '../upwork/settings.js';
17
17
  import { buildAnswerPrompt } from './prompt.js';
18
18
  export async function runAnswer(options) {
19
19
  const { config } = loadConfig();
20
- const { config: freelanceConfig } = loadFreelanceConfig();
21
20
  const question = readTextInput(options.question);
22
21
  if (!question) {
23
22
  throw new Error('Provide a question with -q "<text>" or -q question.txt.');
24
23
  }
25
- const configuredProfileUrl = typeof freelanceConfig.profile === 'string'
26
- ? freelanceConfig.profile
27
- : freelanceConfig.profile?.url;
28
- const profileUrl = options.profile ||
29
- (!options.noProfile ? configuredProfileUrl : '') ||
30
- '';
24
+ // Answers are not freelance-specific: only fetch a profile when one is
25
+ // passed explicitly.
31
26
  let profile = null;
32
- if (profileUrl) {
33
- try {
34
- profile = await loadUpworkProfile(profileUrl, {
35
- refresh: options.refresh,
36
- log: (message) => console.log(`dossier: ${message}`),
37
- warn: (message) => console.warn(`dossier: ${message}`),
38
- });
39
- }
40
- catch (error) {
41
- if (options.profile)
42
- throw error;
43
- console.warn(`dossier: could not load configured Upwork profile: ${error.message}`);
44
- }
27
+ if (options.profile) {
28
+ profile = await loadUpworkProfile(options.profile, {
29
+ refresh: options.refresh,
30
+ log: (message) => console.log(`dossier: ${message}`),
31
+ warn: (message) => console.warn(`dossier: ${message}`),
32
+ });
45
33
  }
46
34
  const { career } = loadCareer();
47
35
  if (profile)
@@ -53,13 +41,7 @@ export async function runAnswer(options) {
53
41
  }
54
42
  const hint = readHints(options.hint);
55
43
  const client = readTextInput(options.client);
56
- const job = await readJobInput({
57
- input: options.input,
58
- title: options.title,
59
- company: options.company,
60
- url: options.url,
61
- description: options.description,
62
- });
44
+ const job = await resolveJob(options);
63
45
  if (!job.title) {
64
46
  throw new Error('Could not determine a job title. Pass --title, or use a job URL/file with a title.');
65
47
  }
@@ -267,4 +249,26 @@ function truncate(value, length) {
267
249
  const text = String(value).replace(/\s+/g, ' ').trim();
268
250
  return text.length > length ? `${text.slice(0, length - 1)}…` : text;
269
251
  }
252
+ async function resolveJob(options) {
253
+ const hasJobSource = Boolean(options.input ||
254
+ options.description ||
255
+ options.url ||
256
+ options.title ||
257
+ options.company);
258
+ if (!hasJobSource) {
259
+ const last = loadLastJob();
260
+ if (!last) {
261
+ throw new Error('No job given and no recent job cached. Run `dossier tailor <job>` first, or pass a job URL/file.');
262
+ }
263
+ console.log(`dossier: using last job ${last.company ? `${last.company} — ` : ''}${last.title}`);
264
+ return last;
265
+ }
266
+ return readJobInput({
267
+ input: options.input,
268
+ title: options.title,
269
+ company: options.company,
270
+ url: options.url,
271
+ description: options.description,
272
+ });
273
+ }
270
274
  //# sourceMappingURL=run.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/answer/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/answer/run.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { CommandModule } from 'yargs';
2
2
  interface AnswerArgs {
3
3
  input?: string;
4
- question: string;
4
+ question?: string;
5
5
  out?: string;
6
6
  name?: string;
7
7
  title?: string;
@@ -10,7 +10,6 @@ interface AnswerArgs {
10
10
  description?: string;
11
11
  client?: string;
12
12
  profile?: string;
13
- noProfile?: boolean;
14
13
  hint?: string[];
15
14
  provider?: string;
16
15
  model?: string;
@@ -1,3 +1,5 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
1
3
  import { runAnswer } from '../../answer/run.js';
2
4
  export const answerCommand = {
3
5
  command: 'answer [input]',
@@ -5,12 +7,11 @@ export const answerCommand = {
5
7
  builder: (yargs) => yargs
6
8
  .positional('input', {
7
9
  type: 'string',
8
- describe: 'Job URL, job file, or job description',
10
+ describe: 'Question, or a job URL/file when --question is also given',
9
11
  })
10
12
  .option('question', {
11
13
  alias: 'q',
12
14
  type: 'string',
13
- demandOption: true,
14
15
  describe: 'Question text or file',
15
16
  })
16
17
  .option('out', {
@@ -27,12 +28,7 @@ export const answerCommand = {
27
28
  })
28
29
  .option('profile', {
29
30
  type: 'string',
30
- describe: 'Public Upwork profile URL for defaults',
31
- })
32
- .option('no-profile', {
33
- type: 'boolean',
34
- describe: 'Ignore profile.url from freelance.yml',
35
- default: false,
31
+ describe: 'Explicit public Upwork profile URL (opt-in)',
36
32
  })
37
33
  .option('hint', {
38
34
  alias: 'H',
@@ -85,9 +81,15 @@ export const answerCommand = {
85
81
  default: false,
86
82
  }),
87
83
  handler: async (argv) => {
84
+ // With one positional and no --question, the positional is the question.
85
+ // Otherwise the positional is the job source.
86
+ const positionalIsQuestion = !argv.question && argv.input && !looksLikeJobSource(argv.input);
87
+ if (!argv.question && argv.input && !positionalIsQuestion) {
88
+ throw new Error('Pass the question with -q "<text>" when the positional input is a job URL or file.');
89
+ }
88
90
  await runAnswer({
89
- input: argv.input,
90
- question: argv.question,
91
+ input: positionalIsQuestion ? undefined : argv.input,
92
+ question: argv.question ?? (positionalIsQuestion ? argv.input : ''),
91
93
  out: argv.out,
92
94
  name: argv.name,
93
95
  title: argv.title,
@@ -96,7 +98,6 @@ export const answerCommand = {
96
98
  description: argv.description,
97
99
  client: argv.client,
98
100
  profile: argv.profile,
99
- noProfile: argv.noProfile,
100
101
  hint: argv.hint,
101
102
  provider: argv.provider,
102
103
  model: argv.model,
@@ -107,4 +108,9 @@ export const answerCommand = {
107
108
  });
108
109
  },
109
110
  };
111
+ function looksLikeJobSource(value) {
112
+ if (/^https?:\/\//i.test(value))
113
+ return true;
114
+ return existsSync(resolve(process.cwd(), value));
115
+ }
110
116
  //# sourceMappingURL=answer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"answer.js","sourceRoot":"","sources":["../../../src/cli/commands/answer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"answer.js","sourceRoot":"","sources":["../../../src/cli/commands/answer.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { spawnSync } from 'node:child_process';
2
2
  import { existsSync, readdirSync } from 'node:fs';
3
3
  import { careerFile, configFile, dataDir, getAgentsDir, getCacheDir, getCacheMode, getCacheSource, getGithubCacheFile, getLocalProjectsCacheFile, privateCareerFile, freelanceFile, } from '../../config/paths.js';
4
4
  import { loadConfig } from '../../config/config.js';
5
+ import { fallbackFontsInstalled, getFontDir, isSymbolFont, systemSerif, } from '../../resume/fonts.js';
5
6
  import { loadFreelanceConfig } from '../../upwork/settings.js';
6
7
  export const doctorCommand = {
7
8
  command: 'doctor',
@@ -46,6 +47,16 @@ export const doctorCommand = {
46
47
  catch (error) {
47
48
  check('chrome', false, error.message, false);
48
49
  }
50
+ if (process.platform === 'linux') {
51
+ const serif = systemSerif();
52
+ const usable = serif ? !isSymbolFont(serif) : false;
53
+ const installed = fallbackFontsInstalled();
54
+ check('pdf fonts', usable || installed, usable
55
+ ? `${serif} (system)`
56
+ : installed
57
+ ? `fallback font (${getFontDir()})`
58
+ : `${serif ?? 'no serif'} resolves to a symbol font; run \`dossier fonts --install\``, false);
59
+ }
49
60
  console.log(`${'info'.padEnd(8)} ${'provider'.padEnd(18)} ${config.provider}`);
50
61
  console.log(`${'info'.padEnd(8)} ${'cache mode'.padEnd(18)} ${getCacheMode()} (${getCacheSource()})`);
51
62
  const freelance = loadFreelanceConfig();
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { CommandModule } from 'yargs';
2
+ interface FontsArgs {
3
+ install?: boolean;
4
+ force?: boolean;
5
+ json?: boolean;
6
+ }
7
+ export declare const fontsCommand: CommandModule<object, FontsArgs>;
8
+ export {};
@@ -0,0 +1,61 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { FONT_ASSETS, ensureFallbackFonts, fallbackFontsInstalled, fallbackFontSize, getFontDir, isSymbolFont, removeFallbackFonts, systemSerif, } from '../../resume/fonts.js';
4
+ export const fontsCommand = {
5
+ command: 'fonts',
6
+ describe: 'Check or install the PDF fallback font',
7
+ builder: (yargs) => yargs
8
+ .option('install', {
9
+ type: 'boolean',
10
+ describe: 'Download the fallback font if it is missing',
11
+ default: false,
12
+ })
13
+ .option('force', {
14
+ type: 'boolean',
15
+ describe: 'Download the fallback font again',
16
+ default: false,
17
+ })
18
+ .option('json', {
19
+ type: 'boolean',
20
+ describe: 'Print JSON',
21
+ default: false,
22
+ }),
23
+ handler: async (argv) => {
24
+ const dir = getFontDir();
25
+ const serif = systemSerif();
26
+ const unusable = Boolean(serif && isSymbolFont(serif));
27
+ if (argv.force)
28
+ removeFallbackFonts();
29
+ if (argv.force || (argv.install && !fallbackFontsInstalled())) {
30
+ await ensureFallbackFonts((message) => console.log(`dossier: ${message}`));
31
+ console.log(`dossier: fallback font installed in ${dir}`);
32
+ }
33
+ const installed = fallbackFontsInstalled();
34
+ const report = {
35
+ systemSerif: serif,
36
+ systemSerifUsable: serif ? !unusable : null,
37
+ fallbackDir: dir,
38
+ fallbackInstalled: installed,
39
+ fallbackBytes: fallbackFontSize(),
40
+ files: FONT_ASSETS.map((asset) => ({
41
+ file: asset.file,
42
+ present: existsSync(join(dir, asset.file)),
43
+ })),
44
+ };
45
+ if (argv.json) {
46
+ console.log(JSON.stringify(report, null, 2));
47
+ return;
48
+ }
49
+ console.log(`${'serif'.padEnd(18)} ${serif ?? 'unknown'}${unusable ? ' (symbol font)' : ''}`);
50
+ console.log(`${'fallback dir'.padEnd(18)} ${dir}`);
51
+ console.log(`${'fallback font'.padEnd(18)} ${installed
52
+ ? `installed (${Math.round(report.fallbackBytes / 1024)} KiB)`
53
+ : 'not installed'}`);
54
+ if (unusable && !installed) {
55
+ console.log('');
56
+ console.log('This system resolves serif text to a symbol font, so PDFs render as symbols.');
57
+ console.log('Run `dossier fonts --install` or install a serif font.');
58
+ }
59
+ },
60
+ };
61
+ //# sourceMappingURL=fonts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fonts.js","sourceRoot":"","sources":["../../../src/cli/commands/fonts.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { loadConfig } from '../../config/config.js';
2
- import { careerFile, configDir, configFile, dataDir, getCacheDir, getCacheMode, getCacheSource, getLogDir, getProfileCacheDir, getRuntimeDir, freelanceFile, resolveOutputDir, stateDir, } from '../../config/paths.js';
2
+ import { getFontDir } from '../../resume/fonts.js';
3
+ import { careerFile, configDir, configFile, dataDir, getCacheDir, getCacheMode, getCacheSource, getLogDir, getProfileCacheDir, getRuntimeDir, freelanceFile, resolveOutputDir, } from '../../config/paths.js';
3
4
  export const pathsCommand = {
4
5
  command: 'paths',
5
6
  describe: 'Print the resolved data, config, cache, and output paths',
@@ -23,8 +24,8 @@ export const pathsCommand = {
23
24
  config: configDir,
24
25
  configFile,
25
26
  cache: getCacheDir(),
26
- state: stateDir,
27
27
  logs: getLogDir(),
28
+ fonts: getFontDir(),
28
29
  runtime: getRuntimeDir(),
29
30
  profileCache: getProfileCacheDir(),
30
31
  career: careerFile,
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/cli/commands/paths.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EACL,UAAU,EACV,SAAS,EACT,UAAU,EACV,OAAO,EACP,WAAW,EACX,YAAY,EACZ,cAAc,EACd,SAAS,EACT,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAO/B,MAAM,CAAC,MAAM,YAAY,GAAqC;IAC5D,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE,0DAA0D;IACpE,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK;SACF,MAAM,CAAC,MAAM,EAAE;QACd,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,KAAK;KACf,CAAC;SACD,MAAM,CAAC,KAAK,EAAE;QACb,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,+BAA+B;KAC1C,CAAC;IACN,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QAChB,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG;YACZ,IAAI,EAAE,YAAY,EAAE;YACpB,WAAW,EAAE,cAAc,EAAE;YAC7B,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,SAAS;YACjB,UAAU;YACV,KAAK,EAAE,WAAW,EAAE;YACpB,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,SAAS,EAAE;YACjB,OAAO,EAAE,aAAa,EAAE;YACxB,YAAY,EAAE,kBAAkB,EAAE;YAClC,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,aAAa;YACxB,MAAM;SACP,CAAC;QAEF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../src/cli/commands/paths.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EACL,UAAU,EACV,SAAS,EACT,UAAU,EACV,OAAO,EACP,WAAW,EACX,YAAY,EACZ,cAAc,EACd,SAAS,EACT,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAO/B,MAAM,CAAC,MAAM,YAAY,GAAqC;IAC5D,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE,0DAA0D;IACpE,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK;SACF,MAAM,CAAC,MAAM,EAAE;QACd,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,KAAK;KACf,CAAC;SACD,MAAM,CAAC,KAAK,EAAE;QACb,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,+BAA+B;KAC1C,CAAC;IACN,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QAChB,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG;YACZ,IAAI,EAAE,YAAY,EAAE;YACpB,WAAW,EAAE,cAAc,EAAE;YAC7B,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,SAAS;YACjB,UAAU;YACV,KAAK,EAAE,WAAW,EAAE;YACpB,IAAI,EAAE,SAAS,EAAE;YACjB,KAAK,EAAE,UAAU,EAAE;YACnB,OAAO,EAAE,aAAa,EAAE;YACxB,YAAY,EAAE,kBAAkB,EAAE;YAClC,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,aAAa;YACxB,MAAM;SACP,CAAC;QAEF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -51,8 +51,20 @@ export const scoreCommand = {
51
51
  ('fullName' in repo && repo.fullName
52
52
  ? `github:${repo.fullName}`
53
53
  : `github:${repo.name}`);
54
- console.log(`${String(entry.score).padStart(3)} ${evidence} ${entry.matched.length > 0 ? entry.matched.join(', ') : '(no keyword matches)'}`);
54
+ const strong = entry.matchedStrong.join(', ');
55
+ const weak = entry.matchedWeak.join(', ');
56
+ const detail = entry.matched.length === 0
57
+ ? '(no keyword matches)'
58
+ : [
59
+ strong ? `strong: ${strong}` : '',
60
+ weak ? `readme: ${weak}` : '',
61
+ ]
62
+ .filter(Boolean)
63
+ .join(' | ');
64
+ console.log(`${String(entry.score).padStart(3)} ${evidence} ${detail}`);
55
65
  }
66
+ console.log('');
67
+ console.log('dossier: only candidates with a structural match are used; README-only matches are listed but skipped');
56
68
  },
57
69
  };
58
70
  //# sourceMappingURL=score.js.map