From ef88f37b9d7335de7e286bbd65220ffe50ec4ac5 Mon Sep 17 00:00:00 2001 From: Jarvis Date: Sat, 4 Apr 2026 20:36:18 -0500 Subject: [PATCH] fix(mosaic): resolve framework scripts via import.meta.url Previously, resolveTool() used createRequire + req.resolve('@mosaic/mosaic/package.json') to locate the bundled framework directory. The published package.json only exports the root '.' subpath, so Node throws ERR_PACKAGE_PATH_NOT_EXPORTED for './package.json'. The catch block silently swallowed this error and fell through to the MOSAIC_HOME fallback path (~/.config/mosaic/tools/_scripts/mosaic-doctor), which does not exist on a user's machine, causing every framework-delegated subcommand (doctor, coord, etc.) to fail with '[mosaic] Script not found'. Two-layer fix: 1. Replace the createRequire approach with import.meta.url-based resolution. The built file lives at dist/commands/launch.js, so ../../framework/tools/... always resolves to the bundled framework directory regardless of how the package exports field is configured. This is layout-stable for both the published package and local dev. 2. Add './package.json' and './framework/*' subpath exports to package.json as belt-and- suspenders, keeping subpath access working for any future caller. Bump version to 0.0.18. Co-Authored-By: Claude Sonnet 4.6 --- packages/mosaic/package.json | 6 ++++-- packages/mosaic/src/commands/launch.ts | 14 +++++--------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/packages/mosaic/package.json b/packages/mosaic/package.json index 40dd1c5..d4ee0d4 100644 --- a/packages/mosaic/package.json +++ b/packages/mosaic/package.json @@ -1,6 +1,6 @@ { "name": "@mosaic/mosaic", - "version": "0.0.17", + "version": "0.0.18", "repository": { "type": "git", "url": "https://git.mosaicstack.dev/mosaic/mosaic-stack.git", @@ -18,7 +18,9 @@ ".": { "types": "./dist/index.d.ts", "default": "./dist/index.js" - } + }, + "./package.json": "./package.json", + "./framework/*": "./framework/*" }, "scripts": { "build": "tsc", diff --git a/packages/mosaic/src/commands/launch.ts b/packages/mosaic/src/commands/launch.ts index 1c8a57c..8183a0a 100644 --- a/packages/mosaic/src/commands/launch.ts +++ b/packages/mosaic/src/commands/launch.ts @@ -7,9 +7,9 @@ import { execFileSync, execSync, spawnSync } from 'node:child_process'; import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync, rmSync } from 'node:fs'; -import { createRequire } from 'node:module'; import { homedir } from 'node:os'; import { join, dirname } from 'node:path'; +import { fileURLToPath } from 'node:url'; import type { Command } from 'commander'; const MOSAIC_HOME = process.env['MOSAIC_HOME'] ?? join(homedir(), '.config', 'mosaic'); @@ -498,14 +498,10 @@ function delegateToScript(scriptPath: string, args: string[], env?: Record