@bensandee/tooling 0.75.0 → 0.77.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bensandee/tooling",
3
- "version": "0.75.0",
3
+ "version": "0.77.0",
4
4
  "description": "CLI tool to bootstrap and maintain standardized TypeScript project tooling",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -31,28 +31,29 @@
31
31
  },
32
32
  "dependencies": {
33
33
  "@bensandee/common": "0.1.4",
34
- "@clack/prompts": "^1.7.0",
34
+ "@clack/prompts": "^1.8.1",
35
35
  "citty": "^0.2.2",
36
- "dependency-cruiser": "^18.2.0",
36
+ "cross-spawn": "^7.0.6",
37
+ "dependency-cruiser": "^18.3.1",
37
38
  "json5": "^2.2.3",
38
39
  "jsonc-parser": "^3.3.1",
39
40
  "picomatch": "^4.0.7",
40
- "yaml": "^2.9.0",
41
- "zod": "^4.4.3"
41
+ "yaml": "^2.9.1",
42
+ "zod": "^4.6.5"
42
43
  },
43
44
  "devDependencies": {
44
- "@bensandee/claude-hooks": "0.11.8",
45
- "@bensandee/config": "0.14.2",
46
- "@bensandee/forgejo": "0.3.0",
47
- "@changesets/cli": "3.0.1",
48
- "@release-it/bumper": "8.0.0",
49
- "@types/node": "24.13.3",
45
+ "@bensandee/claude-hooks": "0.11.10",
46
+ "@bensandee/forgejo": "0.4.1",
47
+ "@changesets/cli": "3.0.3",
48
+ "@release-it/bumper": "8.0.1",
49
+ "@types/cross-spawn": "6.0.6",
50
+ "@types/node": "24.13.5",
50
51
  "@types/picomatch": "4.0.3",
51
- "commit-and-tag-version": "13.1.2",
52
- "oxfmt": "0.65.0",
53
- "prettier": "3.9.6",
54
- "release-it": "21.0.2",
55
- "tsdown": "0.22.14"
52
+ "commit-and-tag-version": "13.2.1",
53
+ "oxfmt": "0.68.0",
54
+ "prettier": "3.9.8",
55
+ "release-it": "21.1.0",
56
+ "tsdown": "0.23.0"
56
57
  },
57
58
  "scripts": {
58
59
  "build": "tsdown",
@@ -228,6 +228,30 @@
228
228
  "additionalProperties": false
229
229
  }
230
230
  },
231
+ "versionStamp": {
232
+ "description": "Files release:assets stamps with the release version before building assets, and verifies afterward. For a repo whose released artifact carries its version somewhere other than package.json (e.g. a WordPress theme's style.css Version: header). Fails loudly when a file's prefix/suffix does not match exactly one line.",
233
+ "type": "array",
234
+ "items": {
235
+ "type": "object",
236
+ "properties": {
237
+ "file": {
238
+ "type": "string",
239
+ "description": "Path to the file whose version line release:assets stamps, relative to the project root"
240
+ },
241
+ "prefix": {
242
+ "type": "string",
243
+ "minLength": 1,
244
+ "description": "Literal string (never a pattern) the target line must start with. Not a regex -- read the output line straight off prefix + version + suffix"
245
+ },
246
+ "suffix": {
247
+ "description": "Literal string (never a pattern) the target line must end with (default: none)",
248
+ "type": "string"
249
+ }
250
+ },
251
+ "required": ["file", "prefix"],
252
+ "additionalProperties": false
253
+ }
254
+ },
231
255
  "postReleaseHook": {
232
256
  "description": "Override the post-release hook command (default: POST to POST_RELEASE_HOOK_URL with HMAC-SHA256 auth)",
233
257
  "type": "string"
@@ -270,7 +294,7 @@
270
294
  "maximum": 100
271
295
  },
272
296
  "gateOnPullRequests": {
273
- "description": "Run coverage on PR builds too (default: false; deferred follow-up)",
297
+ "description": "When true, checks:run's automatic coverage mode collects coverage on every branch instead of only the default branch, so pull-request and feature-branch runs also produce coverage/coverage-summary.json. An explicit --no-coverage still wins. Coverage recording and history stay default-branch-only. (default: false)",
274
298
  "type": "boolean"
275
299
  },
276
300
  "include": {
@@ -385,6 +409,22 @@
385
409
  },
386
410
  "additionalProperties": false
387
411
  },
412
+ "egress": {
413
+ "description": "Egress-audit history configuration, consumed by the bst-agent egress:* commands. There is no enabled key: egress:summary and egress:check read the transcripts root unconditionally, so history: 'none' is the only off-switch, and it disables egress:record alone.",
414
+ "type": "object",
415
+ "properties": {
416
+ "history": {
417
+ "description": "How egress-audit history is persisted. \"orphan-branch\" (default) has `bst-agent egress:record` append one JSON line per record to `historyBranch`; \"none\" turns off `egress:record` (it prints a disabled notice and exits 0). Unlike `health.history`, there is no `enabled` key gating `egress:summary` / `egress:check` themselves -- those read the current transcripts root unconditionally, so `history: \"none\"` is the only off-switch this block has.",
418
+ "type": "string",
419
+ "enum": ["orphan-branch", "none"]
420
+ },
421
+ "historyBranch": {
422
+ "description": "Orphan branch name for egress-audit history (default \"bst/egress-metrics\"). Separate from `coverage.historyBranch` and `health.historyBranch` and must not share a branch with either.",
423
+ "type": "string"
424
+ }
425
+ },
426
+ "additionalProperties": false
427
+ },
388
428
  "ascii": {
389
429
  "description": "ASCII-only gate (bst ascii:check) configuration. Opt-in: set enabled true to scan tracked text files for curated non-ASCII offenders (curly quotes, ellipsis, dashes, box-drawing) and report a suggested ASCII replacement for each hit.",
390
430
  "type": "object",
@@ -413,6 +453,13 @@
413
453
  "items": {
414
454
  "type": "string"
415
455
  }
456
+ },
457
+ "treatAsProse": {
458
+ "description": "Path globs (matched the same way as exclude) whose files --fix classifies as prose wholesale regardless of extension, flattening rather than flagging. The opt-back-in for an extension with no dedicated lexical-context classifier where blind flattening is known safe. No built-in defaults.",
459
+ "type": "array",
460
+ "items": {
461
+ "type": "string"
462
+ }
416
463
  }
417
464
  },
418
465
  "additionalProperties": false
@@ -550,7 +597,7 @@
550
597
  "type": "object",
551
598
  "properties": {
552
599
  "autonomy": {
553
- "description": "Opt into interior autonomy (default false). When a phase's latest rationale reports readiness \"ready\" with an empty openQuestions[] and the review phase is clean, the agent applies the existing plan -> implement -> review -> park-at-mergeable advance itself instead of parking for a human. Never applies to the design/spec gate or the final merge from the mergeable terminal -- those always wait on a human. Also arms the trunk-red detector: when this repo's default branch combined status settles red, the agent files a tracking issue naming the failing checks and labels it agent/spec, starting the fix through the ordinary spec/plan/implement/review pipeline.",
600
+ "description": "Opt into interior autonomy (default false). When a phase's latest rationale reports readiness \"ready\" with an empty openQuestions[] and the review phase is clean, the agent applies the existing plan -> implement -> review -> park-at-mergeable advance itself instead of parking for a human. Never applies to the design/spec gate or the final merge from the mergeable terminal -- those always wait on a human. Also arms the trunk-red detector: when this repo's default branch combined status settles red, the agent files a tracking issue naming the failing checks and labels it agent/spec, starting the fix through the ordinary spec/plan/implement/review pipeline. It also closes that issue, with a comment, if the default branch recovers on its own before a human acts on it.",
554
601
  "type": "boolean"
555
602
  },
556
603
  "preRunRebase": {
@@ -596,7 +643,7 @@
596
643
  "maximum": 9007199254740991
597
644
  },
598
645
  "exclude": {
599
- "description": "Branch-name globs added to bst branch:prune's built-in never-touch list (main, changeset-release/*, renovate/*, bst/coverage-metrics, bst/health-metrics, anything with an open PR or protected). Additive only -- there is no key that removes a built-in entry.",
646
+ "description": "Branch-name globs added to bst branch:prune's built-in never-touch list (main, changeset-release/*, renovate/*, bst/coverage-metrics, bst/health-metrics, bst/egress-metrics, anything with an open PR or protected). Additive only -- there is no key that removes a built-in entry.",
600
647
  "type": "array",
601
648
  "items": {
602
649
  "type": "string"