@@ -33,67 +33,69 @@ const serverStart = Effect.acquireRelease(
3333const findAvailablePort = vi . fn ( ( preferred : number ) => Effect . succeed ( preferred ) ) ;
3434
3535// Shared service layer used by this CLI test suite.
36- const testLayer = Layer . mergeAll (
37- Layer . effect (
38- CliConfig ,
39- Effect . sync (
40- ( ) =>
41- ( {
42- cwd : testWorkspaceRoot ,
43- fixPath : Effect . void ,
44- resolveStaticDir : Effect . undefined ,
45- } ) satisfies CliConfigShape ,
36+ const testLayer = Layer . fresh (
37+ Layer . mergeAll (
38+ Layer . effect (
39+ CliConfig ,
40+ Effect . sync (
41+ ( ) =>
42+ ( {
43+ cwd : testWorkspaceRoot ,
44+ fixPath : Effect . void ,
45+ resolveStaticDir : Effect . undefined ,
46+ } ) satisfies CliConfigShape ,
47+ ) ,
4648 ) ,
49+ Layer . succeed ( NetService , {
50+ canListenOnHost : ( ) => Effect . succeed ( true ) ,
51+ isPortAvailableOnLoopback : ( ) => Effect . succeed ( true ) ,
52+ reserveLoopbackPort : ( ) => Effect . succeed ( 0 ) ,
53+ findAvailablePort,
54+ } ) ,
55+ Layer . succeed ( Server , {
56+ start : serverStart ,
57+ stopSignal : Effect . void ,
58+ } satisfies ServerShape ) ,
59+ Layer . succeed ( OpenclawGatewayConfig , {
60+ getSummary : ( ) =>
61+ Effect . succeed ( {
62+ gatewayUrl : null ,
63+ hasSharedSecret : false ,
64+ deviceId : null ,
65+ devicePublicKey : null ,
66+ deviceFingerprint : null ,
67+ hasDeviceToken : false ,
68+ deviceTokenRole : null ,
69+ deviceTokenScopes : [ ] ,
70+ updatedAt : null ,
71+ } ) ,
72+ getStored : ( ) => Effect . succeed ( null ) ,
73+ save : ( ) => Effect . die ( "unexpected openclaw save" ) ,
74+ resolveForConnect : ( ) => Effect . succeed ( null ) ,
75+ saveDeviceToken : ( ) => Effect . void ,
76+ clearDeviceToken : ( ) => Effect . void ,
77+ resetDeviceState : ( ) =>
78+ Effect . succeed ( {
79+ gatewayUrl : null ,
80+ hasSharedSecret : false ,
81+ deviceId : null ,
82+ devicePublicKey : null ,
83+ deviceFingerprint : null ,
84+ hasDeviceToken : false ,
85+ deviceTokenRole : null ,
86+ deviceTokenScopes : [ ] ,
87+ updatedAt : null ,
88+ } ) ,
89+ } ) ,
90+ Layer . succeed ( Open , {
91+ openBrowser : ( _target : string ) => Effect . void ,
92+ openInEditor : ( ) => Effect . void ,
93+ openInFileManager : ( ) => Effect . void ,
94+ revealInFileManager : ( ) => Effect . void ,
95+ } satisfies OpenShape ) ,
96+ FetchHttpClient . layer ,
97+ NodeServices . layer ,
4798 ) ,
48- Layer . succeed ( NetService , {
49- canListenOnHost : ( ) => Effect . succeed ( true ) ,
50- isPortAvailableOnLoopback : ( ) => Effect . succeed ( true ) ,
51- reserveLoopbackPort : ( ) => Effect . succeed ( 0 ) ,
52- findAvailablePort,
53- } ) ,
54- Layer . succeed ( Server , {
55- start : serverStart ,
56- stopSignal : Effect . void ,
57- } satisfies ServerShape ) ,
58- Layer . succeed ( OpenclawGatewayConfig , {
59- getSummary : ( ) =>
60- Effect . succeed ( {
61- gatewayUrl : null ,
62- hasSharedSecret : false ,
63- deviceId : null ,
64- devicePublicKey : null ,
65- deviceFingerprint : null ,
66- hasDeviceToken : false ,
67- deviceTokenRole : null ,
68- deviceTokenScopes : [ ] ,
69- updatedAt : null ,
70- } ) ,
71- getStored : ( ) => Effect . succeed ( null ) ,
72- save : ( ) => Effect . die ( "unexpected openclaw save" ) ,
73- resolveForConnect : ( ) => Effect . succeed ( null ) ,
74- saveDeviceToken : ( ) => Effect . void ,
75- clearDeviceToken : ( ) => Effect . void ,
76- resetDeviceState : ( ) =>
77- Effect . succeed ( {
78- gatewayUrl : null ,
79- hasSharedSecret : false ,
80- deviceId : null ,
81- devicePublicKey : null ,
82- deviceFingerprint : null ,
83- hasDeviceToken : false ,
84- deviceTokenRole : null ,
85- deviceTokenScopes : [ ] ,
86- updatedAt : null ,
87- } ) ,
88- } ) ,
89- Layer . succeed ( Open , {
90- openBrowser : ( _target : string ) => Effect . void ,
91- openInEditor : ( ) => Effect . void ,
92- openInFileManager : ( ) => Effect . void ,
93- revealInFileManager : ( ) => Effect . void ,
94- } satisfies OpenShape ) ,
95- FetchHttpClient . layer ,
96- NodeServices . layer ,
9799) ;
98100
99101const runCli = (
0 commit comments