@curviate/cli 0.9.0 → 0.11.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.
package/CHANGELOG.md CHANGED
@@ -8,6 +8,40 @@ a new command or flag is a minor; a breaking command/flag/exit-code change is a
8
8
 
9
9
  ## [Unreleased]
10
10
 
11
+ ## [0.11.0] - 2026-07-04
12
+
13
+ ### Added
14
+
15
+ - **Safe credential entry** for `account link` / `account reconnect` / `account update` — env-var fallbacks (an explicit flag always wins over its env var), `--password-stdin` / `--li-at-stdin` flags to read a secret from stdin, and a masked TTY prompt with a non-TTY fail-fast when a credential is required but not supplied any other way. A 5-way conflict matrix rejects supplying the same credential through more than one channel. The four secret-bearing flags carry a shell-history/`ps`-visibility warning, and `--preview` masks credential values instead of ever rendering them in cleartext.
16
+ - **Guided checkpoint follow-through** on `account link` / `account reconnect`. A `202 checkpoint_required` response now resolves in-process on an interactive TTY — code prompt, retry loop on a `422`, chained-challenge follow-through, a codeless mobile-app-approval poll sub-loop, and a resend hint — instead of just printing the envelope. A non-interactive session (either stream not a TTY, or `--no-interactive`) still prints the envelope and exits with the new `12` (`AUTH_NEEDED`) code — a pending checkpoint, not an error.
17
+ - **`account checkpoint poll --wait`** — an adaptive-cadence loop (1000ms, then 1500ms for 30s, then 3000ms) that blocks until the checkpoint resolves (exit `0`), expires/fails (exit `9`), or the wait window elapses while still pending (exit `12`, still resolvable later). `--wait` is off by default (the single-poll behavior is unchanged). `--timeout <ms>` overrides the wall-clock bound (default: the checkpoint's own expiry) and fails fast at exit `2` on a non-numeric value, before any call. `checkpoint submit`'s one-shot path also now detects a chained `checkpoint_required` response and exits `12` instead of rendering it as a plain success.
18
+ - **`account checkpoint resend --checkpoint <id>`** — re-sends the pending challenge notification, mirroring `checkpoint submit` / `poll` (body-addressed, `WRITE_SINGLE_FLAGS`, `--preview` supported, no `--code` since there's nothing to submit). Exits `0` on any `200` regardless of the response's `resent` boolean — `false` is an honest answer, not a command failure.
19
+ - **`account connect-link` browser handoff.** The command now completes the hosted-link round trip instead of only minting a URL: on an interactive TTY it auto-opens the URL and waits on the same adaptive cadence as `checkpoint poll --wait` for the account to connect (resolved → prints the connected account and exits `0`; expired/failed → exit `9`; wait window elapses while still pending → exit `12`). A non-interactive session (non-TTY, or `--no-interactive`) never opens a browser and never blocks — it prints the URL, a relay instruction, and the `session_id`, then returns immediately.
20
+ - **`account connect-session poll --session <id>`** — the standalone counterpart to the above: a single poll by default (prints the body, exits `0` regardless of status), or the same adaptive wait loop with `--wait`. `--open`/`--no-open` and `--wait`/`--no-wait` are TTY-adaptive; `--timeout <ms>` overrides the wait bound (default: time remaining to the session's own expiry).
21
+ - Pagination flags (`--limit`/`--cursor`/`--all`/`--max-pages`) are now suppressed on the 8 `account` subcommands that mutate or resolve exactly one resource (`link`, `connect-link`, `reconnect`, `refresh`, `update`, `disconnect`, `checkpoint submit`, `checkpoint poll`) — they had no meaning on a one-row response. `account list` is unaffected. `link` / `reconnect` help text gains a one-line note about the checkpoint-required path.
22
+ - SDK-parity manifest (`test/parity.test.ts`) gains `account checkpoint resend` → `accounts.resendCheckpoint` and `account connect-session poll` → `accounts.getConnectSession` — both were held back pending the SDK's own `0.11.0` regen; the manifest and the SDK method count both move from 82 to 84.
23
+
24
+ ### Fixed
25
+
26
+ - **Flag-dispatch bug:** the unknown-flag check always stripped a leading `no-` prefix before matching against the declared-flag set, so a flag literally declared with that prefix (e.g. `--no-interactive`) was misread as negating an undeclared name and rejected as unknown on every invocation. The full declared name is now checked first; the `no-` strip is only a fallback for citty's own implicit negation of an undeclared `no-*` flag.
27
+
28
+ ### Changed
29
+
30
+ - `@curviate/sdk` dependency bumped to `^0.11.0`.
31
+
32
+ ## [0.10.0] - 2026-07-03
33
+
34
+ ### Added
35
+
36
+ - `job get <url|id>` — a new top-level `job` command retrieving one public LinkedIn job posting's full detail. Accepts a job URL (`https://www.linkedin.com/jobs/view/<id>`) or a bare numeric id — a job URL is resolved to its numeric id client-side; anything else passes through and the API is the final validator. Slim-default output: `object`, `id`, `title`, `company`, `company_id`, `location`, `state`, `applicants_counter`, `published_at`, `description` — `description` stays in the default output since retrieving it is the point of the command. Pass `--verbose` for the full response (adds `cost`, `created_at`, `hiring_team`). An unknown job id exits with the not-found exit code. This is a read command — `--preview` is a usage error, matching every other single-object read.
37
+ - `recruiter job get <url|id>` — the Recruiter-lens sibling of `job get`, joining the existing `recruiter job` command group. Retrieves any public job posting (not only postings you manage) — unlike `recruiter jobs`, which lists your own. Same URL/id resolution and slim/verbose projection as the top-level command; requires the Recruiter add-on tier (exit `5` without it).
38
+ - README gained a new numbered example chaining `search jobs` into `job get`, and a "Get any public job posting through the Recruiter lens" example in the Recruiter section.
39
+
40
+ ### Changed
41
+
42
+ - `@curviate/sdk` dependency bumped to `^0.10.0`.
43
+ - `recruiter job get --help` does not advertise `--limit`/`--cursor`/`--all`/`--max-pages` — a single-object read, consistent with the other Recruiter single-reads (`profile`, `project`, `applicant`). `--fields` and `--verbose` are unchanged and available.
44
+
11
45
  ## [0.9.0] - 2026-07-03
12
46
 
13
47
  ### Added
package/README.md CHANGED
@@ -158,6 +158,20 @@ curviate account list --all --json \
158
158
  > accounts.csv
159
159
  ```
160
160
 
161
+ ### 7. Search jobs, then fetch full detail on the top result
162
+
163
+ `job get` accepts either a job URL or the bare numeric id — including the `job_urn` field a
164
+ job-search result already returns:
165
+
166
+ ```bash
167
+ curviate search jobs --keywords "founding engineer" --location "Berlin" --account acc_1 --json \
168
+ | jq -r '.items[0].job_urn' \
169
+ | xargs -I{} curviate job get {} --account acc_1 --json
170
+
171
+ # A pasted job URL works identically:
172
+ curviate job get "https://www.linkedin.com/jobs/view/4428113858" --account acc_1
173
+ ```
174
+
161
175
  ## Sales Navigator
162
176
 
163
177
  Sales Navigator commands (`curviate sales-nav ...`) require an account with the Sales Navigator
@@ -327,6 +341,19 @@ curviate recruiter message new \
327
341
  "Hi — I came across your profile and think you'd be a great fit for a role we're hiring for."
328
342
  ```
329
343
 
344
+ ### 10. Get any public job posting through the Recruiter lens
345
+
346
+ Unlike `recruiter jobs` (which lists postings you manage), `recruiter job get` retrieves the full
347
+ detail of *any* public LinkedIn job posting — the Recruiter-seated counterpart to the top-level
348
+ `job get` command:
349
+
350
+ ```bash
351
+ curviate recruiter job get "https://www.linkedin.com/jobs/view/4428113858" --account acc_1 --json
352
+
353
+ # Bare numeric id works identically:
354
+ curviate recruiter job get 4428113858 --account acc_1 --verbose
355
+ ```
356
+
330
357
  ## Exit codes
331
358
 
332
359
  | Code | Meaning |