- 349b48b:
formatCLI command respects internal format call and passes the exit code to the user. - 57d4d61:
lintCLI command respects internallintcall and passes the exit code to the user.
-
23997e5: Runs
publintas a publish gate inbsh buildand generates types by default- After a successful build,
bsh buildnow runspublint(strict mode) against the emitteddist/and fails on errors — publishing mistakes like missing declaration files or brokenexportstargets are caught at build time instead of at publish. - Type declarations (
.d.mts) are now generated by default; pass--no-dtsto opt out. If yourpackage.jsondeclares types but they aren't emitted, the build now fails. - Entry globs that match nothing now fail with a clear message (
No entry files matched: …) instead of tsdown's opaqueError: undefined Cannot find entry. bsh publintoutput now renders full messages (e.g. whichexportstarget is broken) instead of bare rule codes.
- After a successful build,
-
e4ad9d2: Makes
bshpass its own lint and widens the test fixture API- The shared oxlint config now exempts
*.config.*files and oxlint JS plugins (rules/**) fromimport/no-default-export— config files and plugins legitimately require default exports. Fixture.write()andFixture.append()in@bomb.sh/tools/test-utilsnow accept plain strings (previously typedUint8Array-only, which contradicted the runtime behavior).bsh testraises the default vitesttestTimeoutto 15s — integration tests spawn real oxlint/knip binaries, which can exceed 5s on a loaded machine.- Internal: replaces all
node:pathusage with URL APIs, consolidates the duplicate knip config (package.json#knipwas silently ignored in favor ofknip.jsonc), and throws a codedToolsErrorinstead of a genericError.
- The shared oxlint config now exempts
-
f66e1df: Makes
bsh lint --fixfix far more than it used to--fixnow chainsknip --fixafter oxlint: unused dependencies and devDependencies are removed frompackage.jsonautomatically. Dead-code fixes (unused exports/types) additionally run with--fix --strict; unused files are never deleted automatically. knip fixes respect your knip config — keepignoreDependenciesaccurate, since untraceable deps (e.g. binaries referenced by path) will otherwise be removed.- The stock
no-consolerule is replaced bybombshell-dev/no-console-log, which auto-fixesconsole.log→console.info(semantically neutral in Node — they're the same stdout write). Other unlisted console methods are still flagged but not auto-fixed.
-
74356f7: Scopes the
bombshell-dev/exported-function-asyncandbombshell-dev/require-export-jsdoclint rules to a package's public API surfacebsh lintnow derives the public surface frompackage.json(exports,bin, andmain/module, mappingdist/paths back tosrc/), including conventionalpackages/*/workspace members. These two rules no longer fire on internal modules — only on files consumers can actually import. Packages without a publish surface (apps, examples) are exempt entirely, and wildcard passthrough exports ("./*": "./dist/*") don't designate surface. -
c276677: Restructures
bsh lintoutput and tiers knip's dead-code checks behind--strict- Errors are now always shown in full; warnings collapse to a per-rule count (pass
--warningsto see them). Warnings never affect the exit code, so this keeps actual failures visible. - Adds
--format jsonfor a machine-readable report ({ summary, violations }). Usepnpm -s run lint -- --format jsonto keep stdout clean. - Knip's dead-code issues (unused exports, types, and files) now only run with
--strict— they fire constantly mid-implementation and are only meaningful as a commit-time gate. Dependency hygiene issues (unused dependencies/devDependencies) still always run. - Fixes
tsgosilently type-checking nothing: file arguments made it skip the projecttsconfig(TS5112), so default runs reported zero type errors. Type checking now always runs in project mode and explicit targets filter the report instead. This may surface previously hidden type errors. - Widens the default oxlint target from
./srcto the whole project (gitignored paths likedist/are respected), matching the scope of knip and tsgo. - Turns off
unicorn/consistent-function-scopingandno-underscore-dangle, which fired frequently but were never deliberately enabled. --fixnow only exits non-zero when errors remain (previously any warning failed the run).
- Errors are now always shown in full; warnings collapse to a per-rule count (pass
-
83c20f7: Replaces the stock
max-paramslint rule with a Bombshell-aware versionThe 2-parameter limit (use an options bag beyond that) now only applies to signatures we author. Functions conforming to APIs we don't control are exempt:
overridemethods, members of classes thatextendsorimplements(e.g. Node streams, platform-shaped interfaces), and inline callbacks passed to other functions. -
7a80756: Updates the shared
tsconfig.jsonbaseline for modern Node packagestargetandlibmove fromes2022toes2024, so modern APIs likeArray.prototype.toSortedandPromise.withResolverstype-check without shims.- Adds
"types": ["node"]. Packages must now have@types/nodeinstalled — missing it previously surfaced as dozens ofCannot find name 'process'/'Buffer'(TS2591) errors; now it's a single actionableCannot find type definition file for 'node'(TS2688). Remedy:pnpm add -D @types/node.
-
7fe9353: Updates the
lint,build, andlifecycleskills to match currentbshbehaviorThe lint skill no longer claims publint runs in
pnpm run lint(it gatespnpm run build), documents--strict,--warnings, and--format json, and adds a remedies table mapping common violations to their sanctioned fixes. The lifecycle skill moves the knip dead-code gate (lint --strict) to the PR handoff step.
- 9650d7e: Updates the README to document the
bsh syncandbsh publintcommands and accurately describe howsynclinks agent skills into a project
- 08e749c: Fixes
bsh syncwriting its output into the pnpm store instead of the project root. The project is now resolved from the invocation directory (INIT_CWD, falling back tocwd), soskills/symlinks, theAGENTS.mdsection, and the.gitignoreentries land in the project that ran the command under pnpm's default isolatednode_moduleslayout
- 69fe08c: Fixes declaration file generation so that building with
--dtsnow emits.d.tsfiles viatsgo
-
22f87d0: Fixes the
bsh initcommand—it now points at the directory the template was actually cloned into.init/init .now scaffolds into the current directory in-place and uses the current directory's basename as the project name. -
14e24a8: In some failure or no-op cases, oxlint seems to return output which is not json-parseable even with --json passed. Log output directly in these instances.
-
dd6abfa: Fixes
bsh synccrashing when creating skill symlinks, and makes re-running it safe. It no longer errors or removes already-synced skills.
- 340e898: Fixes errors that caused bsh sync to crash
- 64e9826: Fixes an
EISDIRerror when callingbsh sync
-
fe06180: Add
synccommand to automatically symlink skills to the local project -
e3f5833: Updatess
oxfmtconfig:- Sets
"singleQuote"option totrue - Adds
"*.json", "*.md", "*.yml", "*.jsonc"to"ignorePatterns"option
Updates
formatcommand to include all files by default instead of the./srcdirectoryExtracts
publintfrom thelintcommand into a separate command - Sets
- 747c189: - Fixes
runKnipto correctly handle reported violations- Updates
knipdependency to6.9.0
- Updates
- 81cc9f1: Added "rules" to
package.json#files
- 06a1190: Updates
knipdependency to v6
- Fixes
vitest-ansi-serializerresolution issue
- f9d1c06: Fixes
bsh testconfig issue
- f716864: Fixes a bundling issue with test-utils
- ffba54e: Ignores colocated
*.test.tsfiles in build - ffba54e: Adds automatic
vitestconfig withvitest-ansi-serializer
-
df17b88: Adds skills for coding agents. Eight skills cover the full
bshtoolchain — lifecycle, lint, build, test, format, dev, init, and migration for onboarding an existing project.If you use an AI coding agent, run
pnpm add -D @bomb.sh/toolsthen have your agent runpnpm dlx @tanstack/intent@latest installto load project-specific skills for@bomb.sh/tools.
- Updates
fixture.rootto include trailing slash
- Removes type-only import from bundle
- 0eeee28: Adds support for nested object syntax, dynamic file creation, and better fs bindings to createFixture
- 0945a18: Allows strongly typed
.jsonfiles in fixtures - 0945a18: Use current test name as a prefix for tmpdir in fixture
- Distribute with types
- 9d2c754: Adds
@bomb.sh/tools/test-utilsexport withcreateFixture()
- ccb63b7: Adds
--dtsand--minifyflags tobuildcommand
- 61c3763: Updates
tsdownentrypoint (defaults tosrc)
- 5f43969: Implements
lintcommand usingoxlint,tsgo,knip, andpublint - c3f801b: Adds
buildcommand which usestsdown. Default uses--unbundle, but pass--bundleto create single files.
- cf9b4c3: Updates commands to use the oxfmt, oxlint, publint, tsdown, vitest
- Publishes the changes that were supposed to land in v0.0.7
- 48d96a9: Fixes a bundling issue with
cloudflare:*andbun:*import specifiers
- fe016ca: Fixes an issue when a package.json doesn't have any dependencies
- f1425e7: Fixes issue with import paths
- f51c30b: Fixes externalized dependency bundling and properly handles rewriting for local
.tsmodules
- Updates bundling approach to avoid code duplication
- 4652f97: link to nested local
.binfiles
- fix exports