@wirecat/cli-base 0.77.0 → 0.78.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,35 @@ Versions before 0.8.0 are in the [git tags](https://github.com/WireCatLabs/cli-b
8
8
  Every entry says what changed as a caller sees it, why, and what to watch for — the rules are
9
9
  [`docs/dev/CONVENTIONS.md`](docs/dev/CONVENTIONS.md#the-changelog).
10
10
 
11
+ ## 0.78.0 — 05.11.2026
12
+
13
+ ### Added
14
+
15
+ - **`records`, `invoices`, `orders` and `payments` in the resource vocabulary, and `allocate` in the verbs:** memo's
16
+ finance commands (`invoices`, `orders`, `payments`, `records`, `payments allocate`) were listed in its lint baseline
17
+ because the word list lacked them. `unallocate` is not added: taking an allocation back is `payments unlink`.
18
+
19
+ ### Fixed
20
+
21
+ - **`re2js` is pinned to 2.8.7 (Dependabot alert 14, high):** versions 2.2.0 to 2.8.6 match lookbehind in quadratic time,
22
+ a denial of service. Only the dev tool `markdownlint` pulls it in, so no published package changes.
23
+ - **WC-SECR-25's known gaps no longer list drive and gcal:** both take `session start --client-id` and read the
24
+ per-account `google_client_id` key. The key name, shared with mail, is listed as a gap instead: cli-core's
25
+ settings take no dotted key, so it is not `google.client_id`. mail's missing `--client-id` is listed too.
26
+ - **WC-SECR-25 says how WireCat's shipped Google secret is kept: obscured in cli-core's `constants.json`**, revealed by
27
+ the schema, so the plain value is in no source file, commit or gitleaks allowlist. It said the allowlist named it by
28
+ value. Its known gaps now match cli-core 0.566.0 and the CLIs on it: gcal and mail sign in with WireCat's Google
29
+ app, `doctor` reports `source`, and the app is saved with the sign-in.
30
+
31
+ ## 0.77.1 — 05.11.2026
32
+
33
+ ### Added
34
+
35
+ - **`--trimmed` in the flag vocabulary (role `output`): each e-mail's own text, without the quoted earlier mail and
36
+ the signature.** memo's `messages show --trimmed` and `context --trimmed` give the mail-triage agent the thread and
37
+ the sender's earlier mail without what each reply quotes; it is the opposite of `--full`, and a command refuses
38
+ both together. memo can drop its two `option-role` overrides for it.
39
+
11
40
  ## 0.77.0 — 05.11.2026
12
41
 
13
42
  ### Added
@@ -19,4 +19,10 @@ export const MAIL_FLAGS = [
19
19
  type: "switch",
20
20
  meaning: "with --reply-to, an e-mail reply also goes to everyone the message went to",
21
21
  },
22
+ {
23
+ name: "--trimmed",
24
+ role: "output",
25
+ type: "switch",
26
+ meaning: "each e-mail's own text, without the quoted earlier mail and the signature; refused with --full",
27
+ },
22
28
  ];
@@ -149,6 +149,7 @@ const verbs = [
149
149
  // Only when someone asks, never from a matching name: WC-ACCT-11 in docs/standards/accounts.md.
150
150
  ["link", "record that two identities are one person"],
151
151
  ["unlink", "undo a link"],
152
+ ["allocate", "match a payment to the invoice or order it settles, in whole or in part"],
152
153
  ["lookup", "ask the messenger who is behind a phone number"],
153
154
  [
154
155
  "inspect",
@@ -249,6 +250,13 @@ const collections = [
249
250
  "derived records attached to a selected entity, with explicit coverage of included and omitted facets",
250
251
  ],
251
252
  ["organizations", "companies, teams, families or communities"],
253
+ [
254
+ "records",
255
+ "documents of the owner's business, such as an invoice or a receipt, kept with the things they are about",
256
+ ],
257
+ ["invoices", "bills the owner sends or receives, with their amounts and due dates"],
258
+ ["orders", "what a customer asked for and the owner owes or delivers"],
259
+ ["payments", "money that moved in or out, each one matched to the invoices it settles"],
252
260
  [
253
261
  "identities",
254
262
  "ways to reach a person or an organization: an account in one messenger or mailbox, an e-mail address, a phone",
@@ -24,10 +24,11 @@ catalogue and parity manifest stay in cli-core
24
24
 
25
25
  ### Who follows these rules today
26
26
 
27
- WC-CMD-30: cli-core's shared settings declare every shared scalar setting and give `config migrate`, so tg, max, wa,
28
- mail and gcal follow once they take the cli-core release after 0.561.0. Their own settings (max's `serve` and
29
- `transcribe_model`, for example) are not declared yet. drive's first-run file holds them all, but drive's own
30
- `config` has no `migrate` and its writes do not fill the file. zm declares nothing yet.
27
+ WC-CMD-30: every CLI follows on its main branch, as of 2026-11-05, and for the owner from its next release. tg, max,
28
+ wa, mail and gcal take cli-core 0.563.0's shared settings and `config migrate`. max declares `serve` and
29
+ `transcribe_model`, drive `max_text_chars` beside its own `config migrate`, and zm its source and run-log settings in
30
+ its own file. mail's `session start` fills the file it writes. drive's `picture_search` stays undeclared: it is set
31
+ per profile, and only `defaults` is filled.
31
32
 
32
33
  ## Paths and words
33
34
 
@@ -391,25 +391,29 @@ cli-core's layer for Google and Microsoft, a tool's own layer for a provider onl
391
391
  "config" | "constants" | null }`. A null client comes with a one-line reason.
392
392
  - **Desktop.** A sign-in from wirecat-desktop offers WireCat's app, with a "Use my own app" choice that writes the same
393
393
  override as step 2 or 3.
394
- - **A shipped secret** is allowed only where the provider documents the client as public, and the tool's gitleaks
395
- allowlist names it by value ([WC-SECR-17](#wc-secr-17--a-gitleaks-rule-covers-each-secret-shape-a-cli-handles)).
396
- Google's token endpoint refuses a Desktop app client without its secret (tested 2026-11-04), although
394
+ - **A shipped secret** is allowed only where the provider documents the client as public. It is stored obscured in the
395
+ layer's `constants.json` and revealed by the schema (cli-core's `src/constants/obscure.ts`, as rclone does), so
396
+ the plain value is in no source file, commit or gitleaks allowlist, and secret scanners do not report it. That is
397
+ not protection: anyone with the package can reveal it. Google's token endpoint refuses a Desktop app client without
398
+ its secret (tested 2026-11-04), although
397
399
  [Google's guide](https://developers.google.com/identity/protocols/oauth2/native-app) calls desktop apps public
398
- clients that cannot keep secrets. So a Google app ships its id and secret; a Microsoft public client ships its id
399
- only.
400
+ clients that cannot keep secrets. So a Google app ships its id and secret, both obscured; a Microsoft public client
401
+ ships its id only.
400
402
  - **A provider with no WireCat app yet** says so in `doctor` (a null client and its reason) and in its docs, and still
401
403
  keeps the order, the stored app and the report above.
402
404
 
403
405
  - **Why:** an owner should sign in without creating an app first, and still be able to use their own; a token
404
406
  refreshed with a different app than the one that issued it fails.
405
- - **Enforced by:** `cli-core: src/oauth/client-file.test.ts`.
407
+ - **Enforced by:** `cli-core: src/oauth/client-file.test.ts` · `cli-core: src/constants/index.test.ts` ·
408
+ `cli-core: src/oauth/storage.test.ts`.
406
409
  - **Example:** `gcal personal session start` uses WireCat's Google app and `doctor` reports
407
410
  `{ client: "wirecat", source: "constants" }`; with `GCAL_GOOGLE_CLIENT_ID` and `GCAL_GOOGLE_CLIENT_SECRET` set it
408
411
  reports `{ client: "own", source: "env" }`.
409
- - **Exceptions:** known gaps, as of 2026-11-04: mail has no WireCat default for Google; zoom has no WireCat app until
410
- Zoom Marketplace approves one; no tool reads the per-account `google.client_id` key yet; mail's Microsoft key is
411
- named `microsoft_client_id`; `doctor` reports no `source` yet. gcal's default came from a file CI wrote from a
412
- secret; cli-core's `constants.json` replaces it from its next release.
412
+ - **Exceptions:** known gaps, as of 2026-11-05: zoom has no WireCat app until Zoom Marketplace approves one; the
413
+ per-account key is named `google_client_id` in drive, gcal and mail, and `microsoft_client_id` in mail, because
414
+ cli-core's settings take no dotted key outside `permissions.*` and `models.*`; mail takes no `--client-id`; and
415
+ Google has not reviewed WireCat's Google app for Gmail's restricted scope, so a Gmail sign-in with it may be
416
+ refused.
413
417
  - **Applies to:** every CLI that signs in with OAuth, and wirecat-desktop. **Since:** cli-base 0.76.1.
414
418
  **Rulings:** owner, 2026-11-04.
415
419
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wirecat/cli-base",
3
- "version": "0.77.0",
3
+ "version": "0.78.0",
4
4
  "description": "The parts every command line tool needs: output modes, terminal rendering, error model, exit codes, credentials, clocks",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Viacheslav Ptsarev",