diff options
| author | Peter Stone <thepeterstone@gmail.com> | 2026-03-18 07:24:31 +0000 |
|---|---|---|
| committer | Peter Stone <thepeterstone@gmail.com> | 2026-03-18 07:55:27 +0000 |
| commit | e1be377c851f1e7ce594fa3de6c429354bcedcce (patch) | |
| tree | d67c9d1460d8a419cb8235cfe547aee800095a90 /internal/executor/helpers.go | |
| parent | 86842903e4cae3a60b9732797cfc5dccddcc22e5 (diff) | |
fix: address round 3 review feedback for container execution
- Fix push failure swallowing and ensure workspace preservation on push error
- Fix wrong session ID in --resume flag and BlockedError
- Implement safer shell quoting for instructions in buildInnerCmd
- Capture and propagate actual Claude session ID from stream init message
- Clean up redundant image resolution and stale TODOs
- Mark ADR-005 as Superseded
- Consolidate RepositoryURL to Task level (removed from AgentConfig)
- Add unit test for session ID extraction in parseStream
Diffstat (limited to 'internal/executor/helpers.go')
| -rw-r--r-- | internal/executor/helpers.go | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/internal/executor/helpers.go b/internal/executor/helpers.go index 5ffde8e..36cd050 100644 --- a/internal/executor/helpers.go +++ b/internal/executor/helpers.go @@ -24,12 +24,13 @@ func (e *BlockedError) Error() string { return fmt.Sprintf("task blocked: %s", e // (costUSD, error). error is non-nil if the stream signals task failure: // - result message has is_error:true // - a tool_result was denied due to missing permissions -func parseStream(r io.Reader, w io.Writer, logger *slog.Logger) (float64, error) { +func parseStream(r io.Reader, w io.Writer, logger *slog.Logger) (float64, string, error) { tee := io.TeeReader(r, w) scanner := bufio.NewScanner(tee) scanner.Buffer(make([]byte, 1024*1024), 1024*1024) // 1MB buffer for large lines var totalCost float64 + var sessionID string var streamErr error for scanner.Scan() { @@ -41,6 +42,12 @@ func parseStream(r io.Reader, w io.Writer, logger *slog.Logger) (float64, error) msgType, _ := msg["type"].(string) switch msgType { + case "system": + if subtype, ok := msg["subtype"].(string); ok && subtype == "init" { + if sid, ok := msg["session_id"].(string); ok { + sessionID = sid + } + } case "rate_limit_event": if info, ok := msg["rate_limit_info"].(map[string]interface{}); ok { status, _ := info["status"].(string) @@ -81,7 +88,7 @@ func parseStream(r io.Reader, w io.Writer, logger *slog.Logger) (float64, error) } } - return totalCost, streamErr + return totalCost, sessionID, streamErr } // permissionDenialError inspects a "user" stream message for tool_result entries |
