@@ -177,11 +177,40 @@ export default class Serve extends Command {
177177
178178 // If the user's config is a bare defineStack() and OBJECTSTACK_MODE is
179179 // set (or config.bootMode is set), build the full project/cloud/
180- // standalone stack via @objectstack /service-cloud.
180+ // standalone stack via @objectstack /service-cloud. The package is
181+ // resolved by walking up node_modules from the user's cwd, so it
182+ // picks up the consumer's installation regardless of where the CLI
183+ // itself lives.
181184 if ( shouldBootWithLibrary ( config ) ) {
182185 try {
183- const cloudModName = '@objectstack/service-cloud' ;
184- const cloudMod : any = await import ( cloudModName ) ;
186+ const { pathToFileURL } = await import ( 'node:url' ) ;
187+ let dir = process . cwd ( ) ;
188+ let cloudPkgDir : string | null = null ;
189+ // Walk upward from cwd looking for node_modules/@objectstack /service-cloud
190+ while ( true ) {
191+ const candidate = path . join ( dir , 'node_modules' , '@objectstack' , 'service-cloud' ) ;
192+ if ( fs . existsSync ( path . join ( candidate , 'package.json' ) ) ) {
193+ cloudPkgDir = candidate ;
194+ break ;
195+ }
196+ const parent = path . dirname ( dir ) ;
197+ if ( parent === dir ) break ;
198+ dir = parent ;
199+ }
200+ if ( ! cloudPkgDir ) {
201+ throw new Error ( '@objectstack/service-cloud not found in any node_modules from cwd upward' ) ;
202+ }
203+ const pkg = JSON . parse (
204+ fs . readFileSync ( path . join ( cloudPkgDir , 'package.json' ) , 'utf8' ) ,
205+ ) ;
206+ const entry =
207+ pkg . exports ?. [ '.' ] ?. import ??
208+ pkg . exports ?. [ '.' ] ?. default ??
209+ pkg . module ??
210+ pkg . main ??
211+ 'dist/index.js' ;
212+ const cloudEntry = path . join ( cloudPkgDir , entry ) ;
213+ const cloudMod : any = await import ( pathToFileURL ( cloudEntry ) . href ) ;
185214 const bootResult = await cloudMod . createBootStack ( {
186215 mode : config . bootMode ,
187216 project : config . project ,
@@ -191,7 +220,7 @@ export default class Serve extends Command {
191220 config = bootResult as any ;
192221 } catch ( err ) {
193222 console . error (
194- 'OBJECTSTACK_MODE is set but @objectstack/service-cloud is not installed .' ,
223+ 'OBJECTSTACK_MODE is set but @objectstack/service-cloud cannot be loaded .' ,
195224 'Install it with: pnpm add @objectstack/service-cloud' ,
196225 ) ;
197226 throw err ;
0 commit comments