11import { fileURLToPath } from "node:url" ;
22import { beforeEach , describe , expect , it , vi } from "vitest" ;
33
4- const { createTerminalPilotGroupMock, realpathMock, runCLIMock, terminalPilotGroupMock } =
5- vi . hoisted ( ( ) => ( {
6- createTerminalPilotGroupMock : vi . fn ( ) ,
7- realpathMock : vi . fn < ( path : string ) => Promise < string > > ( ) ,
8- runCLIMock : vi . fn < ( ) => Promise < void > > ( ) ,
9- terminalPilotGroupMock : { name : "terminal-pilot" }
10- } ) ) ;
4+ const {
5+ createDaemonTerminalPilotRuntimeMock,
6+ createTerminalPilotGroupMock,
7+ daemonRuntimeMock,
8+ realpathMock,
9+ runCLIMock,
10+ runTerminalPilotDaemonMock,
11+ terminalPilotGroupMock
12+ } = vi . hoisted ( ( ) => ( {
13+ createDaemonTerminalPilotRuntimeMock : vi . fn ( ) ,
14+ createTerminalPilotGroupMock : vi . fn ( ) ,
15+ daemonRuntimeMock : { kind : "daemon-runtime" } ,
16+ realpathMock : vi . fn < ( path : string ) => Promise < string > > ( ) ,
17+ runCLIMock : vi . fn < ( ) => Promise < void > > ( ) ,
18+ runTerminalPilotDaemonMock : vi . fn < ( ) => Promise < void > > ( ) ,
19+ terminalPilotGroupMock : { name : "terminal-pilot" }
20+ } ) ) ;
1121
1222const originalArgv = [ ...process . argv ] ;
1323const cliPath = fileURLToPath ( new URL ( "./cli.ts" , import . meta. url ) ) ;
@@ -17,6 +27,9 @@ const cliOptions = {
1727 output : true ,
1828 verbose : true ,
1929 yes : true
30+ } ,
31+ services : {
32+ terminalPilotRuntime : daemonRuntimeMock
2033 }
2134} ;
2235
@@ -32,6 +45,12 @@ vi.mock("./commands/index.js", () => ({
3245 createTerminalPilotGroup : createTerminalPilotGroupMock
3346} ) ) ;
3447
48+ vi . mock ( "./commands/daemon-runtime.js" , ( ) => ( {
49+ createDaemonTerminalPilotRuntime : createDaemonTerminalPilotRuntimeMock ,
50+ isTerminalPilotDaemonArgv : ( argv : string [ ] ) => argv [ 2 ] === "__daemon" ,
51+ runTerminalPilotDaemon : runTerminalPilotDaemonMock
52+ } ) ) ;
53+
3554describe ( "terminal-pilot CLI entry point" , ( ) => {
3655 beforeEach ( async ( ) => {
3756 const { resetTheme } = await import ( "toolcraft/design" ) ;
@@ -40,6 +59,8 @@ describe("terminal-pilot CLI entry point", () => {
4059 realpathMock . mockReset ( ) ;
4160 realpathMock . mockImplementation ( async ( target ) => target ) ;
4261 createTerminalPilotGroupMock . mockReset ( ) . mockReturnValue ( terminalPilotGroupMock ) ;
62+ createDaemonTerminalPilotRuntimeMock . mockReset ( ) . mockReturnValue ( daemonRuntimeMock ) ;
63+ runTerminalPilotDaemonMock . mockReset ( ) . mockResolvedValue ( undefined ) ;
4364 runCLIMock . mockReset ( ) ;
4465 runCLIMock . mockResolvedValue ( undefined ) ;
4566 vi . resetModules ( ) ;
@@ -116,4 +137,13 @@ describe("terminal-pilot CLI entry point", () => {
116137 ] ) ;
117138 expect ( process . argv ) . toEqual ( originalArgv ) ;
118139 } ) ;
140+
141+ it ( "runs the hidden daemon entry point without invoking toolcraft" , async ( ) => {
142+ const { main } = await import ( "./cli.js" ) ;
143+
144+ await main ( [ "node" , "terminal-pilot" , "__daemon" ] ) ;
145+
146+ expect ( runTerminalPilotDaemonMock ) . toHaveBeenCalledOnce ( ) ;
147+ expect ( runCLIMock ) . not . toHaveBeenCalled ( ) ;
148+ } ) ;
119149} ) ;
0 commit comments