@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.
- package/README.md +91 -22
- package/dist/answer/run.d.ts +0 -1
- package/dist/answer/run.js +32 -28
- package/dist/answer/run.js.map +1 -1
- package/dist/cli/commands/answer.d.ts +1 -2
- package/dist/cli/commands/answer.js +17 -11
- package/dist/cli/commands/answer.js.map +1 -1
- package/dist/cli/commands/doctor.js +11 -0
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/fonts.d.ts +8 -0
- package/dist/cli/commands/fonts.js +61 -0
- package/dist/cli/commands/fonts.js.map +1 -0
- package/dist/cli/commands/paths.js +3 -2
- package/dist/cli/commands/paths.js.map +1 -1
- package/dist/cli/commands/score.js +13 -1
- package/dist/cli/commands/score.js.map +1 -1
- package/dist/cli/commands/sync.js +6 -7
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/commands/tailor.js +2 -2
- package/dist/cli/commands/tailor.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/config/paths.d.ts +10 -1
- package/dist/config/paths.js +25 -6
- package/dist/config/paths.js.map +1 -1
- package/dist/job/last.d.ts +10 -0
- package/dist/job/last.js +80 -0
- package/dist/job/last.js.map +1 -0
- package/dist/projects/rank.d.ts +9 -0
- package/dist/projects/rank.js +33 -15
- package/dist/projects/rank.js.map +1 -1
- package/dist/projects/store.d.ts +5 -0
- package/dist/projects/store.js +12 -1
- package/dist/projects/store.js.map +1 -1
- package/dist/proposal/run.js +2 -0
- package/dist/proposal/run.js.map +1 -1
- package/dist/resume/find.d.ts +2 -0
- package/dist/resume/find.js +13 -3
- package/dist/resume/find.js.map +1 -1
- package/dist/resume/fonts.d.ts +31 -0
- package/dist/resume/fonts.js +124 -0
- package/dist/resume/fonts.js.map +1 -0
- package/dist/resume/one-page.js +5 -3
- package/dist/resume/one-page.js.map +1 -1
- package/dist/resume/render.d.ts +5 -1
- package/dist/resume/render.js +44 -25
- package/dist/resume/render.js.map +1 -1
- package/dist/resume/run.js +29 -18
- package/dist/resume/run.js.map +1 -1
- package/dist/upwork/profile.js +3 -3
- package/dist/upwork/profile.js.map +1 -1
- package/dist/util/open-file.d.ts +24 -0
- package/dist/util/open-file.js +140 -14
- package/dist/util/open-file.js.map +1 -1
- package/dist/verify/run.js +30 -14
- package/dist/verify/run.js.map +1 -1
- 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
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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
|
|
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
|
-
|
|
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.
|
|
219
|
-
matches (name, description, topics, languages, local commits) are weighted
|
|
220
|
-
than README matches
|
|
221
|
-
|
|
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
|
|
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
|
|
261
|
-
|
|
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
|
-
|
|
270
|
-
`--
|
|
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
|
|
package/dist/answer/run.d.ts
CHANGED
package/dist/answer/run.js
CHANGED
|
@@ -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
|
-
|
|
26
|
-
|
|
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 (
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
|
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
|
package/dist/answer/run.js.map
CHANGED
|
@@ -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
|
|
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: '
|
|
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: '
|
|
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":"
|
|
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,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 {
|
|
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,
|
|
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
|
-
|
|
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
|