@@ -23,11 +23,18 @@ func (ClaudeRuntime) Name() string { return "claude" }
2323
2424func (ClaudeRuntime ) ConfigDir () string { return sandbox .SandboxClaudeConfig }
2525
26- func (ClaudeRuntime ) EnvExports () []string {
27- return []string {fmt .Sprintf ("export CLAUDE_CONFIG_DIR=%s" , sandbox .SandboxClaudeConfig )}
26+ func (ClaudeRuntime ) WorkspaceDir () string { return sandbox .SandboxWorkspace }
27+
28+ func (r ClaudeRuntime ) EnvExports () []string {
29+ return []string {fmt .Sprintf ("export CLAUDE_CONFIG_DIR=%s" , r .ConfigDir ())}
2830}
2931
3032func (r ClaudeRuntime ) Bootstrap (input BootstrapInput ) error {
33+ agentPath := input .AgentPath ()
34+ if agentPath == "" {
35+ return fmt .Errorf ("agent path is required" )
36+ }
37+
3138 sandboxName := input .SandboxName ()
3239 configDir := r .ConfigDir ()
3340
@@ -37,21 +44,30 @@ func (r ClaudeRuntime) Bootstrap(input BootstrapInput) error {
3744 return fmt .Errorf ("creating runtime config dirs: %w" , err )
3845 }
3946
40- if err := sandbox .Upload (sandboxName , input . AgentPath () ,
47+ if err := sandbox .Upload (sandboxName , agentPath ,
4148 fmt .Sprintf ("%s/agents/" , configDir )); err != nil {
4249 return fmt .Errorf ("copying agent definition: %w" , err )
4350 }
4451
4552 for _ , skillPath := range input .SkillDirs () {
53+ if skillPath == "" {
54+ continue
55+ }
4656 if err := sandbox .Upload (sandboxName , skillPath ,
4757 fmt .Sprintf ("%s/skills/" , configDir )); err != nil {
4858 return fmt .Errorf ("copying skill %q: %w" , skillPath , err )
4959 }
5060 fmt .Fprintf (os .Stderr , "Skill %q: uploaded to sandbox\n " , filepath .Base (skillPath ))
5161 }
5262
53- if len (input .PluginDirs ()) > 0 {
54- if err := bootstrapPlugins (sandboxName , configDir , input .PluginDirs ()); err != nil {
63+ var pluginDirs []string
64+ for _ , p := range input .PluginDirs () {
65+ if p != "" {
66+ pluginDirs = append (pluginDirs , p )
67+ }
68+ }
69+ if len (pluginDirs ) > 0 {
70+ if err := bootstrapPlugins (sandboxName , configDir , pluginDirs ); err != nil {
5571 return fmt .Errorf ("bootstrapping plugins: %w" , err )
5672 }
5773 }
@@ -72,7 +88,7 @@ func (ClaudeRuntime) Run(params RunParams, printer *ui.Printer, start time.Time,
7288 defer cancel ()
7389
7490 if parseErr := progressParser (stdout , printer , start , metrics ); parseErr != nil {
75- fmt .Fprintf (os .Stderr , " progress parser: %v\n " , SanitizeOutput (parseErr .Error ()))
91+ fmt .Fprintf (os .Stderr , " progress parser: %v\n " , sanitizeOutput (parseErr .Error ()))
7692 cancel ()
7793 io .Copy (io .Discard , stdout )
7894 }
@@ -90,14 +106,13 @@ func (ClaudeRuntime) Run(params RunParams, printer *ui.Printer, start time.Time,
90106 return exitCode , nil
91107}
92108
93- func (ClaudeRuntime ) ClearIterationArtifacts (sandboxName string ) error {
94- clearCmd := fmt .Sprintf ("rm -rf %s/output/* %s/*.jsonl" ,
95- sandbox .SandboxWorkspace , sandbox .SandboxClaudeConfig )
109+ func (r ClaudeRuntime ) ClearIterationArtifacts (sandboxName string ) error {
110+ clearCmd := fmt .Sprintf ("rm -rf %s/output/* %s/*.jsonl" , r .WorkspaceDir (), r .ConfigDir ())
96111 _ , _ , _ , err := sandbox .Exec (sandboxName , clearCmd , 10 * time .Second )
97112 return err
98113}
99114
100- func (ClaudeRuntime ) ExtractTranscripts (sandboxName , agentLabel , outputDir string ) error {
115+ func (r ClaudeRuntime ) ExtractTranscripts (sandboxName , agentLabel , outputDir string ) error {
101116 if err := os .MkdirAll (outputDir , 0o755 ); err != nil {
102117 return fmt .Errorf ("creating output dir: %w" , err )
103118 }
@@ -108,7 +123,7 @@ func (ClaudeRuntime) ExtractTranscripts(sandboxName, agentLabel, outputDir strin
108123 }
109124 defer root .Close ()
110125
111- configDir := sandbox . SandboxClaudeConfig
126+ configDir := r . ConfigDir ()
112127 stdout , _ , _ , err := sandbox .Exec (sandboxName ,
113128 fmt .Sprintf ("find %s -name '*.jsonl' 2>/dev/null || true" , configDir ),
114129 10 * time .Second ,
@@ -149,11 +164,11 @@ func (ClaudeRuntime) ExtractTranscripts(sandboxName, agentLabel, outputDir strin
149164 return nil
150165}
151166
152- func (ClaudeRuntime ) ExtractDebugLog (sandboxName , localPath , debug string ) error {
167+ func (r ClaudeRuntime ) ExtractDebugLog (sandboxName , localPath , debug string ) error {
153168 if debug == "" {
154169 return nil
155170 }
156- remotePath := sandbox . SandboxWorkspace + "/" + claudeDebugLog
171+ remotePath := r . WorkspaceDir () + "/" + claudeDebugLog
157172 return sandbox .DownloadFile (sandboxName , remotePath , localPath )
158173}
159174
0 commit comments