refactor: migrate from Bun.Glob to npm glob package

Replace Bun.Glob usage with a new Glob utility wrapper around the npm 'glob' package.
This moves us off Bun-specific APIs toward standard Node.js compatible solutions.

Changes:
- Add new src/util/glob.ts utility module with scan(), scanSync(), and match()
- Default include option is 'file' (only returns files, not directories)
- Add symlink option (default: false) to control symlink following
- Migrate all 12 files using Bun.Glob to use the new Glob utility
- Add comprehensive tests for the glob utility

Breaking changes:
- Removed support for include: 'dir' option (use include: 'all' and filter manually)
- symlink now defaults to false (was true in most Bun.Glob usages)

Files migrated:
- src/util/log.ts
- src/util/filesystem.ts
- src/tool/truncation.ts
- src/session/instruction.ts
- src/storage/json-migration.ts
- src/storage/storage.ts
- src/project/project.ts
- src/cli/cmd/tui/context/theme.tsx
- src/config/config.ts
- src/tool/registry.ts
- src/skill/skill.ts
- src/file/ignore.ts
This commit is contained in:
Dax Raad
2026-02-19 12:34:18 -05:00
parent 56dda4c98c
commit 3c21735b35
17 changed files with 231 additions and 127 deletions
+5 -7
View File
@@ -5,6 +5,7 @@ import { realpathSync } from "fs"
import { dirname, join, relative } from "path"
import { Readable } from "stream"
import { pipeline } from "stream/promises"
import { Glob } from "./glob"
export namespace Filesystem {
// Fast sync version for metadata checks
@@ -156,16 +157,13 @@ export namespace Filesystem {
const result = []
while (true) {
try {
const glob = new Bun.Glob(pattern)
for await (const match of glob.scan({
const matches = await Glob.scan(pattern, {
cwd: current,
absolute: true,
onlyFiles: true,
followSymlinks: true,
include: "file",
dot: true,
})) {
result.push(match)
}
})
result.push(...matches)
} catch {
// Skip invalid glob patterns
}