llm-docs-builder 0.11.0 → 0.13.0
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/.github/workflows/ci.yml +35 -4
- data/.github/workflows/docker.yml +7 -7
- data/.github/workflows/push.yml +3 -3
- data/.gitignore +8 -0
- data/.rubocop.yml +1 -14
- data/.ruby-version +1 -1
- data/.yard-lint.yml +275 -0
- data/CHANGELOG.md +16 -0
- data/Dockerfile +14 -7
- data/Gemfile +1 -1
- data/Gemfile.lock +33 -25
- data/README.md +16 -0
- data/lib/llm_docs_builder/cli.rb +0 -1
- data/lib/llm_docs_builder/config.rb +33 -0
- data/lib/llm_docs_builder/helpers/prune_trailing_unsafe_link_separator.rb +31 -0
- data/lib/llm_docs_builder/helpers/squeeze_blank_lines_outside_fences.rb +71 -0
- data/lib/llm_docs_builder/helpers.rb +9 -0
- data/lib/llm_docs_builder/html_detector.rb +159 -0
- data/lib/llm_docs_builder/html_to_markdown/figure_code_block_renderer.rb +181 -0
- data/lib/llm_docs_builder/html_to_markdown/table_markup_renderer.rb +597 -0
- data/lib/llm_docs_builder/html_to_markdown_converter.rb +826 -0
- data/lib/llm_docs_builder/markdown_transformer.rb +23 -9
- data/lib/llm_docs_builder/output_formatter.rb +1 -1
- data/lib/llm_docs_builder/text_compressor.rb +2 -2
- data/lib/llm_docs_builder/transformers/base_transformer.rb +13 -1
- data/lib/llm_docs_builder/transformers/heading_transformer.rb +19 -7
- data/lib/llm_docs_builder/url_fetcher.rb +18 -0
- data/lib/llm_docs_builder/version.rb +1 -1
- data/lib/llm_docs_builder.rb +10 -0
- data/llm-docs-builder.gemspec +3 -2
- data/package-lock.json +331 -0
- data/package.json +9 -0
- data/renovate.json +22 -9
- metadata +31 -8
- data/AGENTS.md +0 -20
|
@@ -63,9 +63,7 @@ module LlmDocsBuilder
|
|
|
63
63
|
content = heading_transformer.transform(content, options)
|
|
64
64
|
content = compress_content(content) if should_compress?
|
|
65
65
|
content = enhancement_transformer.transform(content, options)
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
content
|
|
66
|
+
whitespace_transformer.transform(content, options)
|
|
69
67
|
end
|
|
70
68
|
|
|
71
69
|
private
|
|
@@ -114,7 +112,7 @@ module LlmDocsBuilder
|
|
|
114
112
|
|
|
115
113
|
# Compress content using TextCompressor
|
|
116
114
|
#
|
|
117
|
-
# @param content [String] content
|
|
115
|
+
# @param content [String] markdown content
|
|
118
116
|
# @return [String] compressed content
|
|
119
117
|
def compress_content(content)
|
|
120
118
|
compressor = TextCompressor.new
|
|
@@ -129,11 +127,27 @@ module LlmDocsBuilder
|
|
|
129
127
|
#
|
|
130
128
|
# @return [String] markdown content to transform
|
|
131
129
|
def load_content
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
130
|
+
content = options[:content] ? options[:content].dup : File.read(file_path)
|
|
131
|
+
snippet = html_detector.detection_snippet(content)
|
|
132
|
+
|
|
133
|
+
return content if html_detector.table_fragment?(snippet)
|
|
134
|
+
return html_to_markdown_converter.convert(content) if html_detector.html_content?(content, snippet)
|
|
135
|
+
|
|
136
|
+
content
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# Memoized HTML to markdown converter
|
|
140
|
+
#
|
|
141
|
+
# @return [HtmlToMarkdownConverter]
|
|
142
|
+
def html_to_markdown_converter
|
|
143
|
+
@html_to_markdown_converter ||= HtmlToMarkdownConverter.new
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# Memoized HTML detector
|
|
147
|
+
#
|
|
148
|
+
# @return [HtmlDetector]
|
|
149
|
+
def html_detector
|
|
150
|
+
@html_detector ||= HtmlDetector.new
|
|
137
151
|
end
|
|
138
152
|
end
|
|
139
153
|
end
|
|
@@ -30,7 +30,7 @@ module LlmDocsBuilder
|
|
|
30
30
|
|
|
31
31
|
# Format number with comma separators for readability
|
|
32
32
|
#
|
|
33
|
-
# @param number [Integer]
|
|
33
|
+
# @param number [Integer] value to format with comma separators
|
|
34
34
|
# @return [String] formatted number with commas
|
|
35
35
|
#
|
|
36
36
|
# @example
|
|
@@ -72,8 +72,8 @@ module LlmDocsBuilder
|
|
|
72
72
|
# Removes common English stopwords that don't carry significant meaning.
|
|
73
73
|
# Preserves code blocks, inline code, and technical terms.
|
|
74
74
|
#
|
|
75
|
-
#
|
|
76
|
-
#
|
|
75
|
+
# @deprecated This is an aggressive optimization that may affect readability.
|
|
76
|
+
# Use with caution and test results carefully.
|
|
77
77
|
#
|
|
78
78
|
# @param content [String] text to process
|
|
79
79
|
# @return [String] text with stopwords removed
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module LlmDocsBuilder
|
|
4
|
+
# Provides content transformation functionality
|
|
5
|
+
#
|
|
6
|
+
# This module contains specialized transformers for modifying markdown content,
|
|
7
|
+
# including cleanup operations, link processing, heading normalization, and
|
|
8
|
+
# content enhancement for AI consumption.
|
|
9
|
+
#
|
|
10
|
+
# @api private
|
|
4
11
|
module Transformers
|
|
5
12
|
# Base module for all transformers
|
|
6
13
|
#
|
|
@@ -11,9 +18,12 @@ module LlmDocsBuilder
|
|
|
11
18
|
module BaseTransformer
|
|
12
19
|
# Transform content
|
|
13
20
|
#
|
|
14
|
-
# @
|
|
21
|
+
# @abstract Subclasses must implement this method and document specific options
|
|
22
|
+
# @param content [String] markdown content
|
|
15
23
|
# @param options [Hash] transformation options
|
|
24
|
+
# @option options [Object] :* options vary by implementation - see specific transformer classes
|
|
16
25
|
# @return [String] transformed content
|
|
26
|
+
# @note Options vary by implementation - see specific transformer classes for supported keys
|
|
17
27
|
def transform(content, options = {})
|
|
18
28
|
raise NotImplementedError, "#{self.class} must implement #transform"
|
|
19
29
|
end
|
|
@@ -21,7 +31,9 @@ module LlmDocsBuilder
|
|
|
21
31
|
# Check if transformation should be applied
|
|
22
32
|
#
|
|
23
33
|
# @param options [Hash] transformation options
|
|
34
|
+
# @option options [Object] :* options vary by implementation - see specific transformer classes
|
|
24
35
|
# @return [Boolean] true if transformation should be applied
|
|
36
|
+
# @note Options vary by implementation - see specific transformer classes for supported keys
|
|
25
37
|
def should_transform?(options)
|
|
26
38
|
true
|
|
27
39
|
end
|
|
@@ -51,24 +51,36 @@ module LlmDocsBuilder
|
|
|
51
51
|
next line if in_code_block
|
|
52
52
|
|
|
53
53
|
# Match markdown headings (1-6 hash symbols followed by space and text)
|
|
54
|
-
|
|
54
|
+
# Supports optional ATX closing hashes (e.g., "## Title ##")
|
|
55
|
+
heading_match = line.match(/^(#+)\s+(.+?)(?:\s+#+)?\s*$/)
|
|
55
56
|
|
|
56
|
-
if heading_match && heading_match[1].
|
|
57
|
-
level = heading_match[1].
|
|
57
|
+
if heading_match && heading_match[1].length.between?(1, 6)
|
|
58
|
+
level = heading_match[1].length
|
|
58
59
|
title = heading_match[2].strip
|
|
59
60
|
|
|
60
61
|
# Update heading stack to current level
|
|
61
62
|
heading_stack = heading_stack[0...level - 1]
|
|
62
|
-
|
|
63
|
+
|
|
64
|
+
# Compute the effective heading level. When same-level headings
|
|
65
|
+
# are nested under a parent (e.g., two consecutive ## headings),
|
|
66
|
+
# the child must receive a deeper markdown level so the output
|
|
67
|
+
# hierarchy is correct.
|
|
68
|
+
effective_level = if heading_stack.empty?
|
|
69
|
+
level
|
|
70
|
+
else
|
|
71
|
+
[heading_stack.last[:effective_level] + 1, level].max
|
|
72
|
+
end
|
|
73
|
+
effective_level = [effective_level, 6].min
|
|
74
|
+
|
|
75
|
+
heading_stack << { title: title, effective_level: effective_level }
|
|
63
76
|
|
|
64
77
|
# Build hierarchical heading
|
|
65
78
|
if level == 1
|
|
66
79
|
# H1 stays as-is (top level)
|
|
67
80
|
line
|
|
68
81
|
else
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
"#{'#' * level} #{hierarchical_title}\n"
|
|
82
|
+
hierarchical_title = heading_stack.map { |e| e[:title] }.join(separator)
|
|
83
|
+
"#{'#' * effective_level} #{hierarchical_title}\n"
|
|
72
84
|
end
|
|
73
85
|
else
|
|
74
86
|
line
|
|
@@ -9,7 +9,10 @@ module LlmDocsBuilder
|
|
|
9
9
|
# Provides common functionality needed by multiple commands (transform, compare)
|
|
10
10
|
# including strict scheme validation, redirect handling and sensible timeouts.
|
|
11
11
|
class UrlFetcher
|
|
12
|
+
# Default user agent string for HTTP requests
|
|
12
13
|
DEFAULT_USER_AGENT = 'llm-docs-builder/1.0 (+https://github.com/mensfeld/llm-docs-builder)'
|
|
14
|
+
|
|
15
|
+
# Maximum number of redirects to follow
|
|
13
16
|
MAX_REDIRECTS = 10
|
|
14
17
|
|
|
15
18
|
# @param user_agent [String] HTTP user agent header value
|
|
@@ -71,6 +74,11 @@ module LlmDocsBuilder
|
|
|
71
74
|
|
|
72
75
|
private
|
|
73
76
|
|
|
77
|
+
# Validate and parse URL string
|
|
78
|
+
#
|
|
79
|
+
# @param url_string [String] URL to validate
|
|
80
|
+
# @return [URI::HTTP, URI::HTTPS] parsed URI
|
|
81
|
+
# @raise [Errors::GenerationError] if URL is invalid or unsupported
|
|
74
82
|
def validate_and_parse_url(url_string)
|
|
75
83
|
uri = URI.parse(url_string)
|
|
76
84
|
|
|
@@ -96,6 +104,12 @@ module LlmDocsBuilder
|
|
|
96
104
|
)
|
|
97
105
|
end
|
|
98
106
|
|
|
107
|
+
# Convert redirect location to absolute URL
|
|
108
|
+
#
|
|
109
|
+
# @param base_uri [URI] base URI
|
|
110
|
+
# @param location [String] redirect location
|
|
111
|
+
# @return [String] absolute redirect URL
|
|
112
|
+
# @raise [Errors::GenerationError] if location is invalid
|
|
99
113
|
def absolute_redirect_url(base_uri, location)
|
|
100
114
|
raise(
|
|
101
115
|
Errors::GenerationError,
|
|
@@ -110,6 +124,10 @@ module LlmDocsBuilder
|
|
|
110
124
|
)
|
|
111
125
|
end
|
|
112
126
|
|
|
127
|
+
# Log redirect if verbose mode enabled
|
|
128
|
+
#
|
|
129
|
+
# @param url [String] redirect URL
|
|
130
|
+
# @return [void]
|
|
113
131
|
def log_redirect(url)
|
|
114
132
|
return unless @verbose
|
|
115
133
|
|
data/lib/llm_docs_builder.rb
CHANGED
|
@@ -4,10 +4,20 @@ require 'zeitwerk'
|
|
|
4
4
|
require 'pathname'
|
|
5
5
|
require 'find'
|
|
6
6
|
|
|
7
|
+
autoload(:Nokogiri, 'nokogiri')
|
|
8
|
+
autoload(:CGI, 'cgi')
|
|
9
|
+
|
|
7
10
|
loader = Zeitwerk::Loader.for_gem
|
|
8
11
|
loader.inflector.inflect('cli' => 'CLI')
|
|
9
12
|
loader.setup
|
|
10
13
|
|
|
14
|
+
# Build and optimize documentation for LLMs
|
|
15
|
+
#
|
|
16
|
+
# This gem provides tools for generating llms.txt files and transforming markdown
|
|
17
|
+
# documentation to be AI-friendly. It can reduce token consumption by 67-95% while
|
|
18
|
+
# preserving essential documentation content.
|
|
19
|
+
#
|
|
20
|
+
# @api public
|
|
11
21
|
module LlmDocsBuilder
|
|
12
22
|
class << self
|
|
13
23
|
# Generates llms.txt from existing markdown documentation
|
data/llm-docs-builder.gemspec
CHANGED
|
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
|
20
20
|
|
|
21
21
|
spec.homepage = 'https://github.com/mensfeld/llm-docs-builder'
|
|
22
22
|
spec.license = 'MIT'
|
|
23
|
-
spec.required_ruby_version = '>= 3.
|
|
23
|
+
spec.required_ruby_version = '>= 3.3'
|
|
24
24
|
|
|
25
25
|
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
|
26
26
|
spec.metadata['homepage_uri'] = spec.homepage
|
|
@@ -35,9 +35,10 @@ Gem::Specification.new do |spec|
|
|
|
35
35
|
spec.executables = spec.files.grep(%r{\Abin/}) { |f| File.basename(f) }
|
|
36
36
|
spec.require_paths = ['lib']
|
|
37
37
|
|
|
38
|
+
spec.add_dependency 'nokogiri', '~> 1.17'
|
|
38
39
|
spec.add_dependency 'zeitwerk', '~> 2.6'
|
|
39
40
|
|
|
40
|
-
spec.add_development_dependency 'bundler'
|
|
41
|
+
spec.add_development_dependency 'bundler'
|
|
41
42
|
spec.add_development_dependency 'rake', '~> 13.0'
|
|
42
43
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
|
43
44
|
spec.add_development_dependency 'rubocop', '~> 1.0'
|
data/package-lock.json
ADDED
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "llm-docs-builder",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"lockfileVersion": 3,
|
|
5
|
+
"requires": true,
|
|
6
|
+
"packages": {
|
|
7
|
+
"": {
|
|
8
|
+
"name": "llm-docs-builder",
|
|
9
|
+
"version": "1.0.0",
|
|
10
|
+
"devDependencies": {
|
|
11
|
+
"lostconf": "0.4.0"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"node_modules/@nodelib/fs.scandir": {
|
|
15
|
+
"version": "2.1.5",
|
|
16
|
+
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
|
|
17
|
+
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
|
|
18
|
+
"dev": true,
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"@nodelib/fs.stat": "2.0.5",
|
|
22
|
+
"run-parallel": "^1.1.9"
|
|
23
|
+
},
|
|
24
|
+
"engines": {
|
|
25
|
+
"node": ">= 8"
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"node_modules/@nodelib/fs.stat": {
|
|
29
|
+
"version": "2.0.5",
|
|
30
|
+
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
|
|
31
|
+
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
|
|
32
|
+
"dev": true,
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"engines": {
|
|
35
|
+
"node": ">= 8"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"node_modules/@nodelib/fs.walk": {
|
|
39
|
+
"version": "1.2.8",
|
|
40
|
+
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
|
|
41
|
+
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
|
|
42
|
+
"dev": true,
|
|
43
|
+
"license": "MIT",
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"@nodelib/fs.scandir": "2.1.5",
|
|
46
|
+
"fastq": "^1.6.0"
|
|
47
|
+
},
|
|
48
|
+
"engines": {
|
|
49
|
+
"node": ">= 8"
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"node_modules/braces": {
|
|
53
|
+
"version": "3.0.3",
|
|
54
|
+
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
|
|
55
|
+
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
|
|
56
|
+
"dev": true,
|
|
57
|
+
"license": "MIT",
|
|
58
|
+
"dependencies": {
|
|
59
|
+
"fill-range": "^7.1.1"
|
|
60
|
+
},
|
|
61
|
+
"engines": {
|
|
62
|
+
"node": ">=8"
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"node_modules/chalk": {
|
|
66
|
+
"version": "5.6.2",
|
|
67
|
+
"resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
|
|
68
|
+
"integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
|
|
69
|
+
"dev": true,
|
|
70
|
+
"license": "MIT",
|
|
71
|
+
"engines": {
|
|
72
|
+
"node": "^12.17.0 || ^14.13 || >=16.0.0"
|
|
73
|
+
},
|
|
74
|
+
"funding": {
|
|
75
|
+
"url": "https://github.com/chalk/chalk?sponsor=1"
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
"node_modules/commander": {
|
|
79
|
+
"version": "12.1.0",
|
|
80
|
+
"resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
|
|
81
|
+
"integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
|
|
82
|
+
"dev": true,
|
|
83
|
+
"license": "MIT",
|
|
84
|
+
"engines": {
|
|
85
|
+
"node": ">=18"
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
"node_modules/fast-glob": {
|
|
89
|
+
"version": "3.3.3",
|
|
90
|
+
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
|
|
91
|
+
"integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
|
|
92
|
+
"dev": true,
|
|
93
|
+
"license": "MIT",
|
|
94
|
+
"dependencies": {
|
|
95
|
+
"@nodelib/fs.stat": "^2.0.2",
|
|
96
|
+
"@nodelib/fs.walk": "^1.2.3",
|
|
97
|
+
"glob-parent": "^5.1.2",
|
|
98
|
+
"merge2": "^1.3.0",
|
|
99
|
+
"micromatch": "^4.0.8"
|
|
100
|
+
},
|
|
101
|
+
"engines": {
|
|
102
|
+
"node": ">=8.6.0"
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
"node_modules/fastq": {
|
|
106
|
+
"version": "1.20.1",
|
|
107
|
+
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
|
|
108
|
+
"integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
|
|
109
|
+
"dev": true,
|
|
110
|
+
"license": "ISC",
|
|
111
|
+
"dependencies": {
|
|
112
|
+
"reusify": "^1.0.4"
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
"node_modules/fill-range": {
|
|
116
|
+
"version": "7.1.1",
|
|
117
|
+
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
|
|
118
|
+
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
|
|
119
|
+
"dev": true,
|
|
120
|
+
"license": "MIT",
|
|
121
|
+
"dependencies": {
|
|
122
|
+
"to-regex-range": "^5.0.1"
|
|
123
|
+
},
|
|
124
|
+
"engines": {
|
|
125
|
+
"node": ">=8"
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
"node_modules/glob-parent": {
|
|
129
|
+
"version": "5.1.2",
|
|
130
|
+
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
|
|
131
|
+
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
|
|
132
|
+
"dev": true,
|
|
133
|
+
"license": "ISC",
|
|
134
|
+
"dependencies": {
|
|
135
|
+
"is-glob": "^4.0.1"
|
|
136
|
+
},
|
|
137
|
+
"engines": {
|
|
138
|
+
"node": ">= 6"
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
"node_modules/is-extglob": {
|
|
142
|
+
"version": "2.1.1",
|
|
143
|
+
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
|
|
144
|
+
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
|
|
145
|
+
"dev": true,
|
|
146
|
+
"license": "MIT",
|
|
147
|
+
"engines": {
|
|
148
|
+
"node": ">=0.10.0"
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
"node_modules/is-glob": {
|
|
152
|
+
"version": "4.0.3",
|
|
153
|
+
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
|
|
154
|
+
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
|
|
155
|
+
"dev": true,
|
|
156
|
+
"license": "MIT",
|
|
157
|
+
"dependencies": {
|
|
158
|
+
"is-extglob": "^2.1.1"
|
|
159
|
+
},
|
|
160
|
+
"engines": {
|
|
161
|
+
"node": ">=0.10.0"
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
"node_modules/is-number": {
|
|
165
|
+
"version": "7.0.0",
|
|
166
|
+
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
|
|
167
|
+
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
|
|
168
|
+
"dev": true,
|
|
169
|
+
"license": "MIT",
|
|
170
|
+
"engines": {
|
|
171
|
+
"node": ">=0.12.0"
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
"node_modules/lostconf": {
|
|
175
|
+
"version": "0.4.0",
|
|
176
|
+
"resolved": "https://registry.npmjs.org/lostconf/-/lostconf-0.4.0.tgz",
|
|
177
|
+
"integrity": "sha512-VNbUnirRU7uESqMHslIRHTcuyx/rr4OZK+L7EQXtYUe5PorBgqBYvPu+6xOr0CoUy4n34NNUKO6BBH6TgwwGTA==",
|
|
178
|
+
"dev": true,
|
|
179
|
+
"license": "MIT",
|
|
180
|
+
"dependencies": {
|
|
181
|
+
"chalk": "^5.3.0",
|
|
182
|
+
"commander": "^12.1.0",
|
|
183
|
+
"fast-glob": "^3.3.2",
|
|
184
|
+
"micromatch": "^4.0.8",
|
|
185
|
+
"smol-toml": "^1.3.0",
|
|
186
|
+
"yaml": "^2.5.0"
|
|
187
|
+
},
|
|
188
|
+
"bin": {
|
|
189
|
+
"lostconf": "dist/cli.js"
|
|
190
|
+
},
|
|
191
|
+
"engines": {
|
|
192
|
+
"node": ">=18.0.0"
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
"node_modules/merge2": {
|
|
196
|
+
"version": "1.4.1",
|
|
197
|
+
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
|
|
198
|
+
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
|
|
199
|
+
"dev": true,
|
|
200
|
+
"license": "MIT",
|
|
201
|
+
"engines": {
|
|
202
|
+
"node": ">= 8"
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
"node_modules/micromatch": {
|
|
206
|
+
"version": "4.0.8",
|
|
207
|
+
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
|
|
208
|
+
"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
|
|
209
|
+
"dev": true,
|
|
210
|
+
"license": "MIT",
|
|
211
|
+
"dependencies": {
|
|
212
|
+
"braces": "^3.0.3",
|
|
213
|
+
"picomatch": "^2.3.1"
|
|
214
|
+
},
|
|
215
|
+
"engines": {
|
|
216
|
+
"node": ">=8.6"
|
|
217
|
+
}
|
|
218
|
+
},
|
|
219
|
+
"node_modules/picomatch": {
|
|
220
|
+
"version": "2.3.2",
|
|
221
|
+
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
|
|
222
|
+
"integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
|
|
223
|
+
"dev": true,
|
|
224
|
+
"license": "MIT",
|
|
225
|
+
"engines": {
|
|
226
|
+
"node": ">=8.6"
|
|
227
|
+
},
|
|
228
|
+
"funding": {
|
|
229
|
+
"url": "https://github.com/sponsors/jonschlinkert"
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
"node_modules/queue-microtask": {
|
|
233
|
+
"version": "1.2.3",
|
|
234
|
+
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
|
|
235
|
+
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
|
|
236
|
+
"dev": true,
|
|
237
|
+
"funding": [
|
|
238
|
+
{
|
|
239
|
+
"type": "github",
|
|
240
|
+
"url": "https://github.com/sponsors/feross"
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
"type": "patreon",
|
|
244
|
+
"url": "https://www.patreon.com/feross"
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"type": "consulting",
|
|
248
|
+
"url": "https://feross.org/support"
|
|
249
|
+
}
|
|
250
|
+
],
|
|
251
|
+
"license": "MIT"
|
|
252
|
+
},
|
|
253
|
+
"node_modules/reusify": {
|
|
254
|
+
"version": "1.1.0",
|
|
255
|
+
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
|
|
256
|
+
"integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
|
|
257
|
+
"dev": true,
|
|
258
|
+
"license": "MIT",
|
|
259
|
+
"engines": {
|
|
260
|
+
"iojs": ">=1.0.0",
|
|
261
|
+
"node": ">=0.10.0"
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
"node_modules/run-parallel": {
|
|
265
|
+
"version": "1.2.0",
|
|
266
|
+
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
|
|
267
|
+
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
|
|
268
|
+
"dev": true,
|
|
269
|
+
"funding": [
|
|
270
|
+
{
|
|
271
|
+
"type": "github",
|
|
272
|
+
"url": "https://github.com/sponsors/feross"
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
"type": "patreon",
|
|
276
|
+
"url": "https://www.patreon.com/feross"
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
"type": "consulting",
|
|
280
|
+
"url": "https://feross.org/support"
|
|
281
|
+
}
|
|
282
|
+
],
|
|
283
|
+
"license": "MIT",
|
|
284
|
+
"dependencies": {
|
|
285
|
+
"queue-microtask": "^1.2.2"
|
|
286
|
+
}
|
|
287
|
+
},
|
|
288
|
+
"node_modules/smol-toml": {
|
|
289
|
+
"version": "1.6.1",
|
|
290
|
+
"resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.1.tgz",
|
|
291
|
+
"integrity": "sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==",
|
|
292
|
+
"dev": true,
|
|
293
|
+
"license": "BSD-3-Clause",
|
|
294
|
+
"engines": {
|
|
295
|
+
"node": ">= 18"
|
|
296
|
+
},
|
|
297
|
+
"funding": {
|
|
298
|
+
"url": "https://github.com/sponsors/cyyynthia"
|
|
299
|
+
}
|
|
300
|
+
},
|
|
301
|
+
"node_modules/to-regex-range": {
|
|
302
|
+
"version": "5.0.1",
|
|
303
|
+
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
|
|
304
|
+
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
|
|
305
|
+
"dev": true,
|
|
306
|
+
"license": "MIT",
|
|
307
|
+
"dependencies": {
|
|
308
|
+
"is-number": "^7.0.0"
|
|
309
|
+
},
|
|
310
|
+
"engines": {
|
|
311
|
+
"node": ">=8.0"
|
|
312
|
+
}
|
|
313
|
+
},
|
|
314
|
+
"node_modules/yaml": {
|
|
315
|
+
"version": "2.8.4",
|
|
316
|
+
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.4.tgz",
|
|
317
|
+
"integrity": "sha512-ml/JPOj9fOQK8RNnWojA67GbZ0ApXAUlN2UQclwv2eVgTgn7O9gg9o7paZWKMp4g0H3nTLtS9LVzhkpOFIKzog==",
|
|
318
|
+
"dev": true,
|
|
319
|
+
"license": "ISC",
|
|
320
|
+
"bin": {
|
|
321
|
+
"yaml": "bin.mjs"
|
|
322
|
+
},
|
|
323
|
+
"engines": {
|
|
324
|
+
"node": ">= 14.6"
|
|
325
|
+
},
|
|
326
|
+
"funding": {
|
|
327
|
+
"url": "https://github.com/sponsors/eemeli"
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
data/package.json
ADDED
data/renovate.json
CHANGED
|
@@ -3,13 +3,18 @@
|
|
|
3
3
|
"extends": [
|
|
4
4
|
"config:recommended"
|
|
5
5
|
],
|
|
6
|
+
"minimumReleaseAge": "7 days",
|
|
7
|
+
"includePaths": [
|
|
8
|
+
".ruby-version",
|
|
9
|
+
"Gemfile",
|
|
10
|
+
"llm-docs-builder.gemspec",
|
|
11
|
+
".github/workflows/**",
|
|
12
|
+
"Dockerfile*",
|
|
13
|
+
"package.json"
|
|
14
|
+
],
|
|
6
15
|
"ignorePaths": [
|
|
7
16
|
"spec/integrations"
|
|
8
17
|
],
|
|
9
|
-
"github-actions": {
|
|
10
|
-
"enabled": true,
|
|
11
|
-
"pinDigests": true
|
|
12
|
-
},
|
|
13
18
|
"packageRules": [
|
|
14
19
|
{
|
|
15
20
|
"matchCategories": [
|
|
@@ -21,13 +26,21 @@
|
|
|
21
26
|
"matchManagers": [
|
|
22
27
|
"github-actions"
|
|
23
28
|
],
|
|
24
|
-
"
|
|
29
|
+
"pinDigests": true
|
|
25
30
|
},
|
|
26
31
|
{
|
|
27
|
-
"
|
|
28
|
-
|
|
32
|
+
"description": "Group ruby/setup-ruby action with ruby version updates",
|
|
33
|
+
"matchPackageNames": [
|
|
34
|
+
"ruby/setup-ruby",
|
|
35
|
+
"ruby"
|
|
29
36
|
],
|
|
30
|
-
"
|
|
37
|
+
"groupName": "ruby setup"
|
|
31
38
|
}
|
|
32
|
-
]
|
|
39
|
+
],
|
|
40
|
+
"labels": [
|
|
41
|
+
"dependencies"
|
|
42
|
+
],
|
|
43
|
+
"lockFileMaintenance": {
|
|
44
|
+
"enabled": true
|
|
45
|
+
}
|
|
33
46
|
}
|