claude-agent-sdk 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +22 -0
- data/lib/claude_agent_sdk/subprocess_cli_transport.rb +23 -21
- data/lib/claude_agent_sdk/version.rb +1 -1
- metadata +1 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: d5f1881eb9fa20f805736f864736977c80f839d88042b3ba6e36ac23f7550548
         | 
| 4 | 
            +
              data.tar.gz: 2ccee5ba2a1d59d312737eac4a36464cd15a160c3989b4a5d663ef49c7962b9e
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 23cb7eff0c9f6a48ba1599c793cdabef7f8f98524c0a6eaf07abbb62407e4363a6e0d63f5764b1383ae8297b389a7db042ed9670a5e43c6d5e263321a42f9361
         | 
| 7 | 
            +
              data.tar.gz: fa7e760167ff757870f54c6f0175f25bb3d9480843053ae82d9a95c82c6dd29ad478f3901496c72a2bc74cdca1d596db25ddaef09a724df3743005fec907ca94
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -5,6 +5,28 @@ All notable changes to this project will be documented in this file. | |
| 5 5 | 
             
            The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
         | 
| 6 6 | 
             
            and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
         | 
| 7 7 |  | 
| 8 | 
            +
            ## [0.1.2] - 2025-10-14
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            ### Fixed
         | 
| 11 | 
            +
            - **Critical:** Replaced `Async::Process` with Ruby's built-in `Open3` for subprocess management
         | 
| 12 | 
            +
            - Fixed "uninitialized constant Async::Process" error that prevented the gem from working
         | 
| 13 | 
            +
            - Process management now uses standard Ruby threads instead of async tasks
         | 
| 14 | 
            +
            - All 86 tests passing
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            ## [0.1.1] - 2025-10-14
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            ### Fixed
         | 
| 19 | 
            +
            - Added `~/.claude/local/claude` to CLI search paths to detect Claude Code in its default installation location
         | 
| 20 | 
            +
            - Fixed issue where SDK couldn't find Claude Code when accessed via shell alias
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            ### Added
         | 
| 23 | 
            +
            - Comprehensive test suite with 86 passing tests
         | 
| 24 | 
            +
            - Test documentation in spec/README.md
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            ### Changed
         | 
| 27 | 
            +
            - Marked as unofficial SDK in README and gemspec
         | 
| 28 | 
            +
            - Updated repository URLs to reflect community-maintained status
         | 
| 29 | 
            +
             | 
| 8 30 | 
             
            ## [0.1.0] - 2025-10-14
         | 
| 9 31 |  | 
| 10 32 | 
             
            ### Added
         | 
| @@ -35,6 +35,7 @@ module ClaudeAgentSDK | |
| 35 35 |  | 
| 36 36 | 
             
                  # Try common locations
         | 
| 37 37 | 
             
                  locations = [
         | 
| 38 | 
            +
                    File.join(Dir.home, '.claude/local/claude'),  # Claude Code default install location
         | 
| 38 39 | 
             
                    File.join(Dir.home, '.npm-global/bin/claude'),
         | 
| 39 40 | 
             
                    '/usr/local/bin/claude',
         | 
| 40 41 | 
             
                    File.join(Dir.home, '.local/bin/claude'),
         | 
| @@ -161,23 +162,14 @@ module ClaudeAgentSDK | |
| 161 162 | 
             
                  should_pipe_stderr = @options.stderr || @options.extra_args.key?('debug-to-stderr')
         | 
| 162 163 |  | 
| 163 164 | 
             
                  begin
         | 
| 164 | 
            -
                    # Start process
         | 
| 165 | 
            -
                     | 
| 166 | 
            -
                      *cmd,
         | 
| 167 | 
            -
                      stdin: :pipe,
         | 
| 168 | 
            -
                      stdout: :pipe,
         | 
| 169 | 
            -
                      stderr: should_pipe_stderr ? :pipe : nil,
         | 
| 170 | 
            -
                      chdir: @cwd&.to_s,
         | 
| 171 | 
            -
                      env: process_env
         | 
| 172 | 
            -
                    )
         | 
| 165 | 
            +
                    # Start process using Open3
         | 
| 166 | 
            +
                    opts = { chdir: @cwd&.to_s }.compact
         | 
| 173 167 |  | 
| 174 | 
            -
                    @stdout  | 
| 175 | 
            -
                    @stdin = @process.stdin if @is_streaming
         | 
| 168 | 
            +
                    @stdin, @stdout, @stderr, @process = Open3.popen3(process_env, *cmd, opts)
         | 
| 176 169 |  | 
| 177 170 | 
             
                    # Handle stderr if piped
         | 
| 178 | 
            -
                    if should_pipe_stderr && @ | 
| 179 | 
            -
                      @ | 
| 180 | 
            -
                      @stderr_task = Async do
         | 
| 171 | 
            +
                    if should_pipe_stderr && @stderr
         | 
| 172 | 
            +
                      @stderr_task = Thread.new do
         | 
| 181 173 | 
             
                        handle_stderr
         | 
| 182 174 | 
             
                      rescue StandardError
         | 
| 183 175 | 
             
                        # Ignore errors during stderr reading
         | 
| @@ -185,7 +177,8 @@ module ClaudeAgentSDK | |
| 185 177 | 
             
                    end
         | 
| 186 178 |  | 
| 187 179 | 
             
                    # Close stdin for non-streaming mode
         | 
| 188 | 
            -
                    @ | 
| 180 | 
            +
                    @stdin.close unless @is_streaming
         | 
| 181 | 
            +
                    @stdin = nil unless @is_streaming
         | 
| 189 182 |  | 
| 190 183 | 
             
                    @ready = true
         | 
| 191 184 | 
             
                  rescue Errno::ENOENT => e
         | 
| @@ -222,8 +215,11 @@ module ClaudeAgentSDK | |
| 222 215 | 
             
                  @ready = false
         | 
| 223 216 | 
             
                  return unless @process
         | 
| 224 217 |  | 
| 225 | 
            -
                  #  | 
| 226 | 
            -
                  @stderr_task&. | 
| 218 | 
            +
                  # Kill stderr thread
         | 
| 219 | 
            +
                  if @stderr_task&.alive?
         | 
| 220 | 
            +
                    @stderr_task.kill
         | 
| 221 | 
            +
                    @stderr_task.join(1) rescue nil
         | 
| 222 | 
            +
                  end
         | 
| 227 223 |  | 
| 228 224 | 
             
                  # Close streams
         | 
| 229 225 | 
             
                  begin
         | 
| @@ -231,6 +227,11 @@ module ClaudeAgentSDK | |
| 231 227 | 
             
                  rescue StandardError
         | 
| 232 228 | 
             
                    # Ignore
         | 
| 233 229 | 
             
                  end
         | 
| 230 | 
            +
                  begin
         | 
| 231 | 
            +
                    @stdout&.close
         | 
| 232 | 
            +
                  rescue StandardError
         | 
| 233 | 
            +
                    # Ignore
         | 
| 234 | 
            +
                  end
         | 
| 234 235 | 
             
                  begin
         | 
| 235 236 | 
             
                    @stderr&.close
         | 
| 236 237 | 
             
                  rescue StandardError
         | 
| @@ -239,8 +240,8 @@ module ClaudeAgentSDK | |
| 239 240 |  | 
| 240 241 | 
             
                  # Terminate process
         | 
| 241 242 | 
             
                  begin
         | 
| 242 | 
            -
                    @process. | 
| 243 | 
            -
                    @process. | 
| 243 | 
            +
                    Process.kill('TERM', @process.pid) if @process.alive?
         | 
| 244 | 
            +
                    @process.value
         | 
| 244 245 | 
             
                  rescue StandardError
         | 
| 245 246 | 
             
                    # Ignore
         | 
| 246 247 | 
             
                  end
         | 
| @@ -249,12 +250,13 @@ module ClaudeAgentSDK | |
| 249 250 | 
             
                  @stdout = nil
         | 
| 250 251 | 
             
                  @stdin = nil
         | 
| 251 252 | 
             
                  @stderr = nil
         | 
| 253 | 
            +
                  @stderr_task = nil
         | 
| 252 254 | 
             
                  @exit_error = nil
         | 
| 253 255 | 
             
                end
         | 
| 254 256 |  | 
| 255 257 | 
             
                def write(data)
         | 
| 256 258 | 
             
                  raise CLIConnectionError, 'ProcessTransport is not ready for writing' unless @ready && @stdin
         | 
| 257 | 
            -
                  raise CLIConnectionError, "Cannot write to terminated process" if @process &&  | 
| 259 | 
            +
                  raise CLIConnectionError, "Cannot write to terminated process" if @process && !@process.alive?
         | 
| 258 260 |  | 
| 259 261 | 
             
                  raise CLIConnectionError, "Cannot write to process that exited with error: #{@exit_error}" if @exit_error
         | 
| 260 262 |  | 
| @@ -325,7 +327,7 @@ module ClaudeAgentSDK | |
| 325 327 | 
             
                  end
         | 
| 326 328 |  | 
| 327 329 | 
             
                  # Check process completion
         | 
| 328 | 
            -
                  status = @process. | 
| 330 | 
            +
                  status = @process.value
         | 
| 329 331 | 
             
                  returncode = status.exitstatus
         | 
| 330 332 |  | 
| 331 333 | 
             
                  if returncode && returncode != 0
         |