@@ -9,12 +9,12 @@ import (
99 "os/exec"
1010 "os/signal"
1111 "path/filepath"
12+ "runtime"
1213 "strings"
1314 "syscall"
1415 "time"
1516
1617 "github.com/cli/browser"
17- "github.com/google/uuid"
1818
1919 agentv1 "github.com/kontext-dev/kontext-cli/gen/kontext/agent/v1"
2020 "github.com/kontext-dev/kontext-cli/internal/auth"
@@ -67,7 +67,7 @@ func Start(ctx context.Context, opts Options) error {
6767 Cwd : cwd ,
6868 ClientInfo : map [string ]string {
6969 "name" : "kontext-cli" ,
70- "os" : fmt . Sprintf ( "%s" , os . Getenv ( " GOOS" )) ,
70+ "os" : runtime . GOOS ,
7171 },
7272 })
7373 if err != nil {
@@ -79,13 +79,11 @@ func Start(ctx context.Context, opts Options) error {
7979 sessionID := createResp .SessionId
8080 fmt .Fprintf (os .Stderr , "✓ Session: %s (%s)\n " , createResp .SessionName , sessionID [:8 ])
8181
82- traceID := uuid .New ().String ()
83-
8482 // 4. Start sidecar
8583 sessionDir := filepath .Join (os .TempDir (), "kontext" , sessionID )
8684 os .MkdirAll (sessionDir , 0700 )
8785
88- sc , err := sidecar .New (sessionDir , client , sessionID , traceID , opts .Agent )
86+ sc , err := sidecar .New (sessionDir , client , sessionID , opts .Agent )
8987 if err != nil {
9088 return fmt .Errorf ("sidecar: %w" , err )
9189 }
@@ -123,18 +121,23 @@ func Start(ctx context.Context, opts Options) error {
123121
124122 // 8. Launch agent with hooks
125123 fmt .Fprintf (os .Stderr , "\n Launching %s...\n \n " , opts .Agent )
126- startTime := time .Now ()
127124 agentErr := launchAgentWithSettings (ctx , opts .Agent , env , opts .Args , settingsPath )
128125
129- // 9. Teardown
130- _ = time .Since (startTime )
126+ // 9. Teardown (always runs, even on non-zero agent exit)
131127 endCtx , cancel := context .WithTimeout (context .Background (), 5 * time .Second )
132128 defer cancel ()
133129
134130 _ = client .EndSession (endCtx , sessionID )
135131 fmt .Fprintf (os .Stderr , "\n ✓ Session ended (%s)\n " , sessionID [:8 ])
136132
137133 os .RemoveAll (sessionDir )
134+
135+ // Propagate agent exit code
136+ if agentErr != nil {
137+ if exitErr , ok := agentErr .(* exec.ExitError ); ok {
138+ os .Exit (exitErr .ExitCode ())
139+ }
140+ }
138141 return agentErr
139142}
140143
@@ -158,44 +161,6 @@ func ensureSession(ctx context.Context, issuerURL, clientID string) (*auth.Sessi
158161 return result .Session , nil
159162}
160163
161- // initTemplate interactively creates a .env.kontext on first run.
162- func initTemplate (path string ) error {
163- providers := []struct {
164- Name string
165- EnvVar string
166- Handle string
167- }{
168- {"GitHub" , "GITHUB_TOKEN" , "github" },
169- {"Google Workspace" , "GOOGLE_TOKEN" , "google-workspace" },
170- {"Stripe" , "STRIPE_KEY" , "stripe" },
171- {"Linear" , "LINEAR_API_KEY" , "linear" },
172- {"Slack" , "SLACK_TOKEN" , "slack" },
173- {"PostgreSQL" , "DATABASE_URL" , "postgres" },
174- }
175-
176- fmt .Fprintln (os .Stderr , "\n No .env.kontext found. Which providers does this project need?" )
177- reader := bufio .NewReader (os .Stdin )
178-
179- var lines []string
180- for _ , p := range providers {
181- fmt .Fprintf (os .Stderr , " %s? [y/N] " , p .Name )
182- input , _ := reader .ReadString ('\n' )
183- if strings .TrimSpace (strings .ToLower (input )) == "y" {
184- lines = append (lines , fmt .Sprintf ("%s={{kontext:%s}}" , p .EnvVar , p .Handle ))
185- }
186- }
187-
188- if len (lines ) == 0 {
189- lines = append (lines , "# Add providers: VAR_NAME={{kontext:provider-handle}}" )
190- }
191-
192- if err := os .WriteFile (path , []byte (strings .Join (lines , "\n " )+ "\n " ), 0644 ); err != nil {
193- return fmt .Errorf ("write %s: %w" , path , err )
194- }
195- fmt .Fprintf (os .Stderr , "✓ Wrote %s\n \n " , path )
196- return nil
197- }
198-
199164// resolveCredentials exchanges each template entry for a live credential.
200165func resolveCredentials (ctx context.Context , session * auth.Session , entries []credential.Entry ) ([]credential.Resolved , error ) {
201166 fmt .Fprintln (os .Stderr , "\n Resolving credentials..." )
@@ -279,14 +244,9 @@ func launchAgentWithSettings(_ context.Context, agentName string, env, extraArgs
279244
280245 err = cmd .Wait ()
281246 signal .Stop (sigCh )
247+ close (sigCh )
282248
283- if err != nil {
284- if exitErr , ok := err .(* exec.ExitError ); ok {
285- os .Exit (exitErr .ExitCode ())
286- }
287- return err
288- }
289- return nil
249+ return err
290250}
291251
292252func filterArgs (args []string ) []string {
0 commit comments