compose 0.1.5 → 0.1.7
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/config/prompts/task.txt +2 -0
- data/config/prompts/verify.txt +4 -1
- data/lib/compose/edit_processor.rb +4 -2
- data/lib/compose/file_processor.rb +38 -7
- data/lib/compose/version.rb +1 -1
- metadata +58 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 3ac262b371cf1ff49a50e94ea83aaf75e7867564341c3bd3bff024c77831c2b4
         | 
| 4 | 
            +
              data.tar.gz: 8577e99ba4dc26f7cd96a40589bb4c75cca3394e6e3302d8d43c9786df4633dd
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 5db9243359a8045ca48620bb0fb9f5dc0876fe763c01f0e3fba2cf46467b1feffc42d69afd35857aa1398b0977a8d0478fef6a338c847b0ef43651a934b386f3
         | 
| 7 | 
            +
              data.tar.gz: 3e4de964ef36267bf768eba57c09d58e7037ae17e7313e61b068bb4611bb688ef914757b805a20d3ba7e4cc2a07f156d31bcb6270a0aebbca29a7708e2aa08a1
         | 
    
        data/config/prompts/task.txt
    CHANGED
    
    | @@ -7,6 +7,8 @@ Facts: | |
| 7 7 | 
             
            2. Leave toLine empty for additions.
         | 
| 8 8 | 
             
            3. Make sure the code snippet in the edit is complete. Feel free to make multiple edits, avoid repeating existing code if you can.
         | 
| 9 9 | 
             
            4. Ensure the line numbers are accurate. Feel free to repeat existing code from previous or after lines to be sure.
         | 
| 10 | 
            +
            5. When adding new code to the end of a file, make sure to repeat the last
         | 
| 11 | 
            +
               line of the file in the edit before adding a new line.
         | 
| 10 12 |  | 
| 11 13 | 
             
            ```json
         | 
| 12 14 | 
             
            {
         | 
    
        data/config/prompts/verify.txt
    CHANGED
    
    | @@ -10,7 +10,10 @@ Verify this change: | |
| 10 10 | 
             
            {{CHANGE}}
         | 
| 11 11 | 
             
            ```
         | 
| 12 12 |  | 
| 13 | 
            -
            and make sure it's needed and it's only replacing the correct lines, or adding | 
| 13 | 
            +
            and make sure it's needed and it's only replacing the correct lines, or adding
         | 
| 14 | 
            +
            the code to the correct place. Feel free to change additions to replacements
         | 
| 15 | 
            +
            or vice versa, fix atLine, fromLineNumber, toLineNumber if they would produce
         | 
| 16 | 
            +
            duplicated code lines, `or skip edits if they're not needed.
         | 
| 14 17 | 
             
            Return only the fixed change object following this JSON spec:
         | 
| 15 18 |  | 
| 16 19 | 
             
            ```json
         | 
| @@ -86,7 +86,7 @@ module Compose | |
| 86 86 |  | 
| 87 87 | 
             
                  case edit[:change][:type]
         | 
| 88 88 | 
             
                  when 'addition'
         | 
| 89 | 
            -
                    new_content.insert(edit[:change][:atLine] - 1, edit[:code])
         | 
| 89 | 
            +
                    new_content.insert(edit[:change][:atLine] - 1, edit[:code].split("\n").map { |line| line + "\n" })
         | 
| 90 90 | 
             
                  when 'replacement'
         | 
| 91 91 | 
             
                    new_content[edit[:change][:fromLineNumber] - 1..edit[:change][:toLineNumber] - 1] = edit[:code].split("\n").map { |line| line + "\n" }
         | 
| 92 92 | 
             
                  end
         | 
| @@ -109,7 +109,7 @@ module Compose | |
| 109 109 | 
             
                      case edit[:change][:type]
         | 
| 110 110 | 
             
                      when 'addition'
         | 
| 111 111 | 
             
                        adjusted_line = edit[:change][:atLine] + line_offset
         | 
| 112 | 
            -
                        content.insert(adjusted_line - 1, edit[:code])
         | 
| 112 | 
            +
                        content.insert(adjusted_line - 1, edit[:code].split("\n").map { |line| line + "\n" })
         | 
| 113 113 | 
             
                        line_offset += edit[:code].count("\n") + 1
         | 
| 114 114 | 
             
                      when 'replacement'
         | 
| 115 115 | 
             
                        from_line = edit[:change][:fromLineNumber] + line_offset
         | 
| @@ -121,6 +121,8 @@ module Compose | |
| 121 121 | 
             
                      end
         | 
| 122 122 | 
             
                    end
         | 
| 123 123 |  | 
| 124 | 
            +
                    content = content.flatten
         | 
| 125 | 
            +
             | 
| 124 126 | 
             
                    FileUtils.mkdir_p(File.dirname(filename))
         | 
| 125 127 | 
             
                    File.write(filename, content.join)
         | 
| 126 128 | 
             
                    puts "Applied changes to #{filename}".green
         | 
| @@ -2,6 +2,11 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            require 'find'
         | 
| 4 4 | 
             
            require 'pathname'
         | 
| 5 | 
            +
            require 'httparty'
         | 
| 6 | 
            +
            require 'nokogiri'
         | 
| 7 | 
            +
            require 'reverse_markdown'
         | 
| 8 | 
            +
            require 'digest/md5'
         | 
| 9 | 
            +
            require 'fileutils'
         | 
| 5 10 |  | 
| 6 11 | 
             
            module Compose
         | 
| 7 12 | 
             
              class FileProcessor
         | 
| @@ -25,21 +30,19 @@ module Compose | |
| 25 30 | 
             
                  @files = {}
         | 
| 26 31 |  | 
| 27 32 | 
             
                  input_files.each do |input|
         | 
| 28 | 
            -
                    if  | 
| 33 | 
            +
                    if input.start_with?('http://', 'https://')
         | 
| 34 | 
            +
                      @files[input] = process_url(input)
         | 
| 35 | 
            +
                    elsif File.directory?(input)
         | 
| 29 36 | 
             
                      find_files_in_directory(input).each do |file|
         | 
| 30 | 
            -
                        @files[File.expand_path(file)] =  | 
| 37 | 
            +
                        @files[File.expand_path(file)] = FileProcessor.load_file(file, include_imports: include_imports)
         | 
| 31 38 | 
             
                      end
         | 
| 32 39 | 
             
                    elsif File.file?(input)
         | 
| 33 | 
            -
                      @files[File.expand_path(input)] =  | 
| 40 | 
            +
                      @files[File.expand_path(input)] = FileProcessor.load_file(file, include_imports: include_imports)
         | 
| 34 41 | 
             
                    else
         | 
| 35 42 | 
             
                      puts "Skipping invalid input: #{input}".yellow
         | 
| 36 43 | 
             
                    end
         | 
| 37 44 | 
             
                  end
         | 
| 38 45 |  | 
| 39 | 
            -
                  @files.each do |file, _|
         | 
| 40 | 
            -
                    @files[file] = FileProcessor.load_file(file, include_imports: include_imports)
         | 
| 41 | 
            -
                  end
         | 
| 42 | 
            -
             | 
| 43 46 | 
             
                  self
         | 
| 44 47 | 
             
                end
         | 
| 45 48 |  | 
| @@ -97,5 +100,33 @@ module Compose | |
| 97 100 | 
             
                rescue
         | 
| 98 101 | 
             
                  false
         | 
| 99 102 | 
             
                end
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                def process_url(url)
         | 
| 105 | 
            +
                  cached_file = File.join(ENV['HOME'], '.compose', 'cache', Digest::MD5.hexdigest(url))
         | 
| 106 | 
            +
                  content = if File.exist?(cached_file)
         | 
| 107 | 
            +
                              File.read(cached_file)
         | 
| 108 | 
            +
                            else
         | 
| 109 | 
            +
                              content = fetch_and_convert_url(url)
         | 
| 110 | 
            +
                              return if content.nil?
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                              FileUtils.mkdir_p(File.dirname(cached_file))
         | 
| 113 | 
            +
                              File.write(cached_file, content)
         | 
| 114 | 
            +
                              content
         | 
| 115 | 
            +
                            end
         | 
| 116 | 
            +
                  return if content.nil?
         | 
| 117 | 
            +
             | 
| 118 | 
            +
                  "<url src='#{url}'>\n#{content}\n</url>"
         | 
| 119 | 
            +
                end
         | 
| 120 | 
            +
             | 
| 121 | 
            +
                def fetch_and_convert_url(url)
         | 
| 122 | 
            +
                  response = HTTParty.get(url, follow_redirects: true)
         | 
| 123 | 
            +
                  return nil if response.code != 200
         | 
| 124 | 
            +
             | 
| 125 | 
            +
                  doc = Nokogiri::HTML(response.body)
         | 
| 126 | 
            +
                  doc.search('script, style').remove
         | 
| 127 | 
            +
                  parsed_markdown = ReverseMarkdown.convert(doc.to_html, unknown_tags: :bypass)
         | 
| 128 | 
            +
                  normalized_markdown = parsed_markdown.gsub(/\s+/, ' ').strip
         | 
| 129 | 
            +
                  normalized_markdown
         | 
| 130 | 
            +
                end
         | 
| 100 131 | 
             
              end
         | 
| 101 132 | 
             
            end
         | 
    
        data/lib/compose/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: compose
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.7
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Dreaming Tulpa
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2024-09- | 
| 11 | 
            +
            date: 2024-09-12 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: ruby-openai
         | 
| @@ -164,6 +164,62 @@ dependencies: | |
| 164 164 | 
             
                - - ">="
         | 
| 165 165 | 
             
                  - !ruby/object:Gem::Version
         | 
| 166 166 | 
             
                    version: '0'
         | 
| 167 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 168 | 
            +
              name: httparty
         | 
| 169 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 170 | 
            +
                requirements:
         | 
| 171 | 
            +
                - - ">="
         | 
| 172 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 173 | 
            +
                    version: '0'
         | 
| 174 | 
            +
              type: :runtime
         | 
| 175 | 
            +
              prerelease: false
         | 
| 176 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 177 | 
            +
                requirements:
         | 
| 178 | 
            +
                - - ">="
         | 
| 179 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 180 | 
            +
                    version: '0'
         | 
| 181 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 182 | 
            +
              name: nokogiri
         | 
| 183 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 184 | 
            +
                requirements:
         | 
| 185 | 
            +
                - - ">="
         | 
| 186 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 187 | 
            +
                    version: '0'
         | 
| 188 | 
            +
              type: :runtime
         | 
| 189 | 
            +
              prerelease: false
         | 
| 190 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 191 | 
            +
                requirements:
         | 
| 192 | 
            +
                - - ">="
         | 
| 193 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 194 | 
            +
                    version: '0'
         | 
| 195 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 196 | 
            +
              name: reverse_markdown
         | 
| 197 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 198 | 
            +
                requirements:
         | 
| 199 | 
            +
                - - ">="
         | 
| 200 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 201 | 
            +
                    version: '0'
         | 
| 202 | 
            +
              type: :runtime
         | 
| 203 | 
            +
              prerelease: false
         | 
| 204 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 205 | 
            +
                requirements:
         | 
| 206 | 
            +
                - - ">="
         | 
| 207 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 208 | 
            +
                    version: '0'
         | 
| 209 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 210 | 
            +
              name: digest
         | 
| 211 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 212 | 
            +
                requirements:
         | 
| 213 | 
            +
                - - ">="
         | 
| 214 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 215 | 
            +
                    version: '0'
         | 
| 216 | 
            +
              type: :runtime
         | 
| 217 | 
            +
              prerelease: false
         | 
| 218 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 219 | 
            +
                requirements:
         | 
| 220 | 
            +
                - - ">="
         | 
| 221 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 222 | 
            +
                    version: '0'
         | 
| 167 223 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 168 224 | 
             
              name: bundler
         | 
| 169 225 | 
             
              requirement: !ruby/object:Gem::Requirement
         |