@@ -10,7 +10,6 @@ import (
10
10
"fmt"
11
11
"io"
12
12
"log/slog"
13
- "net/url"
14
13
"os"
15
14
"os/exec"
16
15
"path/filepath"
@@ -34,49 +33,27 @@ type GPTScript struct {
34
33
35
34
func NewGPTScript (opts ... GlobalOptions ) (* GPTScript , error ) {
36
35
opt := completeGlobalOptions (opts ... )
37
- lock .Lock ()
38
- defer lock .Unlock ()
39
- gptscriptCount ++
40
-
41
- if serverURL == "" {
42
- serverURL = opt .URL
43
- if serverURL == "" {
44
- serverURL = os .Getenv ("GPTSCRIPT_URL" )
45
- }
46
- }
47
-
48
36
if opt .Env == nil {
49
37
opt .Env = os .Environ ()
50
38
}
51
39
52
40
opt .Env = append (opt .Env , opt .toEnv ()... )
53
41
54
- if serverProcessCancel == nil && os .Getenv ("GPTSCRIPT_URL" ) == "" {
55
- if serverURL != "" {
56
- u , err := url .Parse (serverURL )
57
- if err != nil {
58
- return nil , fmt .Errorf ("failed to parse server URL: %w" , err )
59
- }
42
+ lock .Lock ()
43
+ defer lock .Unlock ()
44
+ gptscriptCount ++
60
45
61
- // If the server URL has a path, then this implies that the server is already running.
62
- // In that case, we don't need to start the server.
63
- if u .Path != "" && u .Path != "/" {
64
- opt .URL = serverURL
65
- if ! strings .HasPrefix (opt .URL , "http://" ) && ! strings .HasPrefix (opt .URL , "https://" ) {
66
- opt .URL = "http://" + opt .URL
67
- }
68
-
69
- opt .Env = append (opt .Env , "GPTSCRIPT_URL=" + opt .URL )
70
- return & GPTScript {
71
- globalOpts : opt ,
72
- }, nil
73
- }
74
- }
46
+ startSDK := serverProcess == nil && serverURL == "" && opt .URL == ""
47
+ if serverURL == "" {
48
+ serverURL = os .Getenv ("GPTSCRIPT_URL" )
49
+ startSDK = startSDK && serverURL == ""
50
+ }
75
51
52
+ if startSDK {
76
53
ctx , cancel := context .WithCancel (context .Background ())
77
54
in , _ := io .Pipe ()
78
55
79
- serverProcess = exec .CommandContext (ctx , getCommand (), "sys.sdkserver" , "--listen-address" , strings . TrimPrefix ( serverURL , "http://" ) )
56
+ serverProcess = exec .CommandContext (ctx , getCommand (), "sys.sdkserver" , "--listen-address" , "127.0.0.1:0" )
80
57
serverProcess .Env = opt .Env [:]
81
58
82
59
serverProcess .Stdin = in
@@ -118,13 +95,23 @@ func NewGPTScript(opts ...GlobalOptions) (*GPTScript, error) {
118
95
serverURL = strings .TrimSpace (serverURL )
119
96
}
120
97
121
- opt .URL = serverURL
98
+ if opt .URL == "" {
99
+ opt .URL = serverURL
100
+ }
101
+
122
102
if ! strings .HasPrefix (opt .URL , "http://" ) && ! strings .HasPrefix (opt .URL , "https://" ) {
123
103
opt .URL = "http://" + opt .URL
124
104
}
125
105
126
106
opt .Env = append (opt .Env , "GPTSCRIPT_URL=" + opt .URL )
127
107
108
+ if opt .Token == "" {
109
+ opt .Token = os .Getenv ("GPTSCRIPT_TOKEN" )
110
+ }
111
+ if opt .Token != "" {
112
+ opt .Env = append (opt .Env , "GPTSCRIPT_TOKEN=" + opt .Token )
113
+ }
114
+
128
115
return & GPTScript {
129
116
globalOpts : opt ,
130
117
}, nil
0 commit comments