@rwendell/dossier 0.1.2 → 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 (57) hide show
  1. package/README.md +91 -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/commands/tailor.js +2 -2
  20. package/dist/cli/commands/tailor.js.map +1 -1
  21. package/dist/cli/index.js +2 -0
  22. package/dist/cli/index.js.map +1 -1
  23. package/dist/config/paths.d.ts +10 -1
  24. package/dist/config/paths.js +25 -6
  25. package/dist/config/paths.js.map +1 -1
  26. package/dist/job/last.d.ts +10 -0
  27. package/dist/job/last.js +80 -0
  28. package/dist/job/last.js.map +1 -0
  29. package/dist/projects/rank.d.ts +9 -0
  30. package/dist/projects/rank.js +33 -15
  31. package/dist/projects/rank.js.map +1 -1
  32. package/dist/projects/store.d.ts +5 -0
  33. package/dist/projects/store.js +12 -1
  34. package/dist/projects/store.js.map +1 -1
  35. package/dist/proposal/run.js +2 -0
  36. package/dist/proposal/run.js.map +1 -1
  37. package/dist/resume/find.d.ts +2 -0
  38. package/dist/resume/find.js +13 -3
  39. package/dist/resume/find.js.map +1 -1
  40. package/dist/resume/fonts.d.ts +31 -0
  41. package/dist/resume/fonts.js +124 -0
  42. package/dist/resume/fonts.js.map +1 -0
  43. package/dist/resume/one-page.js +5 -3
  44. package/dist/resume/one-page.js.map +1 -1
  45. package/dist/resume/render.d.ts +5 -1
  46. package/dist/resume/render.js +44 -25
  47. package/dist/resume/render.js.map +1 -1
  48. package/dist/resume/run.js +29 -18
  49. package/dist/resume/run.js.map +1 -1
  50. package/dist/upwork/profile.js +3 -3
  51. package/dist/upwork/profile.js.map +1 -1
  52. package/dist/util/open-file.d.ts +24 -0
  53. package/dist/util/open-file.js +140 -14
  54. package/dist/util/open-file.js.map +1 -1
  55. package/dist/verify/run.js +30 -14
  56. package/dist/verify/run.js.map +1 -1
  57. 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
@@ -188,20 +198,61 @@ print layout and automatically trimmed (highlights, projects, skills, summary)
188
198
  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
- Outputs default to the current directory:
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
+
207
+ Tailoring never fetches a freelance profile on its own. Identity, contact
208
+ details, and location come from `career.yml` and `career.private.yml`. Pass
209
+ `--profile <url>` only when you explicitly want to enrich the basics from a
210
+ public profile.
211
+
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:
192
233
 
193
234
  ```text
194
- ./resume-<slug>.json
195
- ./resume-<slug>.trace.json
196
235
  ./resume-<slug>.pdf
197
236
  ```
198
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
+
199
249
  ## Sync project metadata
200
250
 
201
251
  Project candidates come from GitHub/org repos and local `~/projects` checkouts.
202
252
  Sync them into the cache:
203
253
 
204
254
  ```bash
255
+ dossier sync # same as `sync all`
205
256
  dossier sync github # requires gh auth login
206
257
  dossier sync local # scans ~/projects
207
258
  dossier sync all
@@ -215,16 +266,25 @@ records READMEs, manifests, languages, local commit subjects, and remote URLs.
215
266
  tooling does not rank itself as a portfolio project. Add them to
216
267
  `local.include` in `career.yml` if you want them included.
217
268
 
218
- Candidate ranking is keyword overlap against the job description. Metadata
219
- matches (name, description, topics, languages, local commits) are weighted more
220
- than README matches, and only projects with at least one match are selected.
221
- 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.
222
279
 
223
280
  ```bash
224
281
  dossier score job.md
225
282
  dossier score job.md --limit 20
226
283
  ```
227
284
 
285
+ Each line shows the total score followed by `strong:` (structural) and `readme:`
286
+ (prose-only) matches.
287
+
228
288
  `proposal`, `answer`, and `tailor` automatically use cached candidates when
229
289
  present. Run a sync after adding repositories or changing READMEs.
230
290
 
@@ -240,10 +300,18 @@ dossier proposal job.md --profile 'https://www.upwork.com/freelancers/~...'
240
300
  ## Answer an application question
241
301
 
242
302
  ```bash
243
- 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
244
306
  dossier answer job.md -q question.txt --hint 'Emphasize the Kafka work'
245
307
  ```
246
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
+
247
315
  Answers are written to `./answer-<slug>.<question>.md` and `.json`, and copied
248
316
  to the clipboard by default.
249
317
 
@@ -257,17 +325,18 @@ Outputs default to the current directory:
257
325
  Use `--out ~/Documents/proposals` to write elsewhere and `--name` to keep
258
326
  variants.
259
327
 
260
- If `resume-<slug>.json` and `resume-<slug>.trace.json` are present in the
261
- output directory (for example, from `dossier tailor`), `proposal` and `answer`
262
- 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.
263
330
 
264
331
  Public Upwork `/jobs/...` URLs use the headless Chrome fallback. Saved-jobs
265
332
  modal URLs (`/nx/search/jobs/saved/details/...`) and search URLs need your
266
333
  logged-in session and are rejected. If Upwork shows a Cloudflare check, save the
267
334
  job text to a file and pass that instead.
268
335
 
269
- The public profile is cached for 24 hours; `--refresh` fetches it again.
270
- `--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.
271
340
 
272
341
  ## Verify and clean
273
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":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAuBhD,MAAM,CAAC,MAAM,aAAa,GAAsC;IAC9D,OAAO,EAAE,gBAAgB;IACzB,QAAQ,EAAE,qEAAqE;IAC/E,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK;SACF,UAAU,CAAC,OAAO,EAAE;QACnB,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,uCAAuC;KAClD,CAAC;SACD,MAAM,CAAC,UAAU,EAAE;QAClB,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,uBAAuB;KAClC,CAAC;SACD,MAAM,CAAC,KAAK,EAAE;QACb,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,+CAA+C;KAC1D,CAAC;SACD,MAAM,CAAC,MAAM,EAAE;QACd,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,wBAAwB;KACnC,CAAC;SACD,MAAM,CAAC,QAAQ,EAAE;QAChB,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,6BAA6B;KACxC,CAAC;SACD,MAAM,CAAC,SAAS,EAAE;QACjB,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,wCAAwC;KACnD,CAAC;SACD,MAAM,CAAC,YAAY,EAAE;QACpB,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,uCAAuC;QACjD,OAAO,EAAE,KAAK;KACf,CAAC;SACD,MAAM,CAAC,MAAM,EAAE;QACd,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,2CAA2C;KACtD,CAAC;SACD,MAAM,CAAC,OAAO,EAAE;QACf,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,oBAAoB;KAC/B,CAAC;SACD,MAAM,CAAC,SAAS,EAAE;QACjB,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,yBAAyB;KACpC,CAAC;SACD,MAAM,CAAC,KAAK,EAAE;QACb,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,2CAA2C;KACtD,CAAC;SACD,MAAM,CAAC,aAAa,EAAE;QACrB,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,oCAAoC;KAC/C,CAAC;SACD,MAAM,CAAC,UAAU,EAAE;QAClB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,CAAU;QAC1D,QAAQ,EAAE,gBAAgB;KAC3B,CAAC;SACD,MAAM,CAAC,OAAO,EAAE;QACf,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,wCAAwC;KACnD,CAAC;SACD,MAAM,CAAC,SAAS,EAAE;QACjB,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,iCAAiC;KAC5C,CAAC;SACD,MAAM,CAAC,SAAS,EAAE;QACjB,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,mCAAmC;QAC7C,OAAO,EAAE,KAAK;KACf,CAAC;SACD,MAAM,CAAC,SAAS,EAAE;QACjB,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,yCAAyC;QACnD,OAAO,EAAE,KAAK;KACf,CAAC;SACD,MAAM,CAAC,OAAO,EAAE;QACf,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,yCAAyC;QACnD,OAAO,EAAE,KAAK;KACf,CAAC;IACN,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,SAAS,CAAC;YACd,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EACL,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS;YAChE,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
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