@aia-matrix/llms-txt-validator 0.0.0-stage → 1.0.1

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.
package/CHANGELOG.md ADDED
@@ -0,0 +1,16 @@
1
+ # Changelog
2
+
3
+ ## 1.0.1 — 2026-10-10
4
+
5
+ - README: quick start for the GitHub Action and CLI; CI, npm, and license badges.
6
+ - Development: CI now also tests on macOS.
7
+ - No changes to validation behavior.
8
+
9
+ ## 1.0.0 — 2026-10-09
10
+
11
+ - CLI, Node.js library, and bundled GitHub Action with a Node 24 runtime, job summary, and `url`, `fail-on`, `max-links`, and `timeout` inputs.
12
+ - llms.txt v2 format checks for H1, optional summary, sections, and file lists, accepting any bullet style, wrapped notes, and link titles.
13
+ - Linked-resource checks for HTTP 200 and resource type, using HEAD with GET fallback; same-origin-only discovery checks for Markdown versions, alternate/describedby relations, and scoped llms.txt files.
14
+ - `pass`, `info`, `warn`, and `fail` result levels; exit codes 0, 1, and 2; stable JSON report schema 1.0.
15
+ - Network safeguards with timeouts, redirect and response-size limits, five concurrent requests, descriptive error codes, and proxy/custom-CA guidance.
16
+ - Local format-only validation with no telemetry.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Polygons Media LLC
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,168 @@
1
- # Temporary Holding Version
1
+ # llms.txt Validator
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ [![CI](https://github.com/aiamatrix/llms-txt-validator/actions/workflows/ci.yml/badge.svg)](https://github.com/aiamatrix/llms-txt-validator/actions/workflows/ci.yml) [![npm](https://img.shields.io/npm/v/@aia-matrix/llms-txt-validator)](https://www.npmjs.com/package/@aia-matrix/llms-txt-validator) [![License: MIT](https://img.shields.io/github/license/aiamatrix/llms-txt-validator)](LICENSE)
4
+
5
+ A standalone CLI, Node.js library, and GitHub Action for checking the [llms.txt v2 proposal](https://llmstxt.org/) and its [August 2026 changes](https://llmstxt.org/changes.html).
6
+
7
+ ## Quick start
8
+
9
+ ### GitHub Action
10
+
11
+ ```yaml
12
+ - uses: aiamatrix/llms-txt-validator@v1
13
+ with:
14
+ url: https://example.com
15
+ ```
16
+
17
+ ### Command line
18
+
19
+ ```sh
20
+ npx @aia-matrix/llms-txt-validator https://example.com
21
+ ```
22
+
23
+ ## Example output
24
+
25
+ Excerpt from `node dist/cli.js tests/fixtures/good/basic.txt`, with resource URLs and specification references omitted.
26
+
27
+ ```text
28
+ INFO file.size: llms.txt is 113 B (guidance: 50 KiB or less; not a spec requirement).
29
+ PASS format.h1: File must begin with exactly one nonempty H1.
30
+ PASS format.heading-levels: Only H1 and H2 headings are allowed.
31
+ PASS format.section.1: Each H2 section must contain nonempty link-list items.
32
+ PASS format.summary-order: Summary precedes the non-heading preamble.
33
+ INFO network.skipped: Format-only mode: network, discovery and scope checks were not performed.
34
+
35
+ Summary: 4 pass, 2 info, 0 warn, 0 fail
36
+ Get a full AI-readiness report: https://aiamatrix.com
37
+ ```
38
+
39
+ Maintained by Polygons Media LLC, San Rafael, California. Contact: contact@aiamatrix.com. Product website: https://aiamatrix.com.
40
+
41
+ This tool checks file structure and selected publication signals. It does not measure the AIA Score or guarantee AI citations, rankings, retrieval, or traffic. No telemetry is collected. Remote validation sends requests only to the submitted site and linked resources, with Markdown/HTML counterpart and applicable llms.txt probes limited to the root index’s origin.
42
+
43
+ ## Install and run
44
+
45
+ Requires Node.js 22 or newer.
46
+
47
+ The npm package is published as `@aia-matrix/llms-txt-validator`; the GitHub repository and Action use `aiamatrix/llms-txt-validator`.
48
+
49
+ ```sh
50
+ npx @aia-matrix/llms-txt-validator ./public/llms.txt
51
+ npx @aia-matrix/llms-txt-validator ./public/llms.txt --no-network --json
52
+ ```
53
+
54
+ From source (use Node.js 22.13+ for development; Node 24 is recommended):
55
+
56
+ ```sh
57
+ npm ci
58
+ npm run build
59
+ node dist/cli.js https://example.com
60
+ ```
61
+
62
+ | Option | Default | Meaning |
63
+ | ----------------------- | ------- | --------------------------------------------------------------------------------------- |
64
+ | `--json` | off | JSON only, without the product-report line |
65
+ | `--max-links <n>` | 50 | Maximum unique llms.txt link targets across all discovered indexes; nonnegative integer |
66
+ | `--timeout <ms>` | 10000 | Timeout for each request, including its redirects and response body |
67
+ | `--fail-on error\|warn` | error | Make failures, or failures and warnings, exit with code 1 |
68
+ | `--no-network` | off | Format-only local validation; a remote URL with this flag is a tool error |
69
+ | `--help` | off | Show usage |
70
+ | `--version` | off | Show package version |
71
+
72
+ Local files always receive format-only validation. Their linked files, discovery relations, and scopes are not checked, regardless of the flag. A `network.skipped` result identifies this limitation. Website URLs use `/llms.txt`; a path such as `https://example.com/docs/` uses `/docs/llms.txt`.
73
+
74
+ Exit codes: **0** means no findings at the configured failure threshold; **1** means validation findings reached that threshold; **2** means a tool error such as invalid arguments or an unreadable local file. A remote resource failure is a validation failure, not a tool error. Warnings may exist with exit code 0. Informational results never affect exit codes.
75
+
76
+ ## What it checks
77
+
78
+ | Check | Failure or warning | Reference |
79
+ | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | ---------------------------------------------------------- |
80
+ | HTTP 200, plain/Markdown content type, non-HTML body | Failure | [Proposal](https://llmstxt.org/#proposal) |
81
+ | Exactly one initial H1; only H1/H2 headings | Failure | [Format](https://llmstxt.org/#format) |
82
+ | Optional summary before non-heading preamble | Warning | [Format](https://llmstxt.org/#format) |
83
+ | H2 sections contain nonempty Markdown link lists; all bullet markers, titles, balanced URL parentheses and wrapped notes are accepted | Empty sections or items without links fail; prose or item arrangement warns | [Format](https://llmstxt.org/#format) |
84
+ | Linked resources return 200, HEAD with GET fallback | Failure | [Proposal](https://llmstxt.org/#proposal) |
85
+ | Linked resource is HTML or lacks a plain/Markdown type | Warning | [Proposal](https://llmstxt.org/#proposal) |
86
+ | Same-page Markdown version exists, appended or replaced `.md`, directory `index.md` or `index.html.md` | Warning | [Proposal](https://llmstxt.org/#proposal) |
87
+ | HTML alternate and describedby relations; Markdown describedby relation | Warning | [Proposal](https://llmstxt.org/#proposal) |
88
+ | Scoped indexes and most-specific applicable describedby relation | Invalid existing index fails; unavailable probes warn | [Format](https://llmstxt.org/#format) |
89
+ | File size and local format-only mode | Oversize warns; size within the limit and skipped networking are informational | [Proposal](https://llmstxt.org/#proposal) |
90
+ | Link limit reached or HTML counterpart not located | Coverage warning | [Proposal](https://llmstxt.org/#proposal) |
91
+ | `Optional` section | Ordinary section; never omitted | [Changes](https://llmstxt.org/changes.html#v2-august-2026) |
92
+
93
+ The parser accepts a UTF-8 BOM, relative URLs, CRLF, a title-only file, and Markdown lists with any bullet marker. File-list items start with a link and may include a link title, balanced parentheses in the URL, and notes after a colon that wrap across lines. Introductory prose under an H2 and a summary after the preamble produce warnings. Links are extracted even from items that warn.
94
+
95
+ ## Node.js library
96
+
97
+ ```ts
98
+ import { validate, exitCode } from "@aia-matrix/llms-txt-validator";
99
+ const report = await validate("https://example.com", {
100
+ maxLinks: 50,
101
+ timeout: 10000,
102
+ network: true,
103
+ });
104
+ console.log(report.summary);
105
+ process.exitCode = exitCode(report, "error");
106
+ ```
107
+
108
+ `validate(target, options)` returns a report; `checkFormat(text, url)` returns format results and parsed links without HTTP. `exitCode(report, failOn)` applies the output policy. These exports share the CLI implementation.
109
+
110
+ ## GitHub Action
111
+
112
+ ```yaml
113
+ - uses: aiamatrix/llms-txt-validator@v1
114
+ with:
115
+ url: https://example.com
116
+ fail-on: error
117
+ max-links: "50"
118
+ timeout: "10000"
119
+ ```
120
+
121
+ The bundled JavaScript Action requires no dependency installation by the consuming workflow and writes a job summary. See [the example workflow](examples/validate-website.yml). `@v1` follows the latest 1.x release. Pinning an audited commit SHA is the most secure option. Supply trusted URLs; validation fetches URLs found in the submitted file.
122
+
123
+ ## JSON schema (version 1.0)
124
+
125
+ A successful tool invocation emits exactly these top-level fields:
126
+
127
+ ```json
128
+ {
129
+ "version": "1.0",
130
+ "url": "https://example.com/llms.txt",
131
+ "checkedAt": "2026-10-08T00:00:00.000Z",
132
+ "summary": { "pass": 1, "info": 0, "warn": 0, "fail": 0 },
133
+ "results": [
134
+ {
135
+ "id": "file.http",
136
+ "status": "pass",
137
+ "message": "llms.txt returned HTTP 200.",
138
+ "specRef": "https://llmstxt.org/#proposal",
139
+ "url": "https://example.com/llms.txt"
140
+ }
141
+ ]
142
+ }
143
+ ```
144
+
145
+ `version` is the report-schema version, not the npm version. `checkedAt` is an ISO-8601 UTC timestamp. Summary values are nonnegative integer result counts. Results contain `id`, `status`, `message`, `specRef`, and `url`; statuses are `pass`, `info`, `warn`, or `fail`. IDs identify check categories and can recur for different resources. `format.section.N` numbers sections within one index. Results are sorted by URL, ID, and message. Do not parse human messages as an API. Local targets use `file:` URLs.
146
+
147
+ Tool errors in JSON mode use `{"version":"1.0","error":{"message":"..."}}` and exit code 2. They do not emit a validation report or the product-report line. Help and version options print their requested text.
148
+
149
+ ## Network behavior and limitations
150
+
151
+ Node's built-in fetch ignores HTTP_PROXY and HTTPS_PROXY by default. On Node 24+, set `NODE_USE_ENV_PROXY=1` to use environment proxy settings. For a custom certificate authority, set `NODE_EXTRA_CA_CERTS` to the path of its PEM certificate file before starting Node.
152
+
153
+ - External origins receive only linked-resource HTTP and resource-type checks. Discovery, Markdown-version, HTML-counterpart, and scope checks apply only to resources on the root llms.txt origin.
154
+ - At most five link-validation tasks run concurrently. Ancillary requests within each task are sequential. Responses are cached per method and URL.
155
+ - User-Agent: `aiamatrix-llms-txt-validator/1.0.0 (+https://github.com/aiamatrix/llms-txt-validator)`.
156
+ - Redirect loops and chains beyond ten redirects fail. Response bodies are capped at 2 MiB for resource safety.
157
+ - There is no sitemap crawl, JavaScript execution, content truth verification, permission audit, or guaranteed detection of every scoped file. Scoped candidates are probed only along checked resource paths. HTTP 404/410 means an optional scope is absent; other unsuccessful probes report incomplete coverage.
158
+ - The link budget applies to index-linked resources; counterpart and scope probes can add requests. There is no total-site coverage claim. The tool does not read robots.txt, so run it only against resources you are permitted to request.
159
+ - Matching HTML counterparts is heuristic when the file URL does not uniquely identify its original page. Text/plain is accepted, but the tool does not prove that a text resource is semantically useful Markdown.
160
+ - Network access can reach local/private addresses if a supplied or linked URL points there. Use trusted inputs and an isolated runner with appropriate outbound network restrictions for untrusted sites.
161
+
162
+ ## Contributing
163
+
164
+ See [CONTRIBUTING.md](CONTRIBUTING.md), [SECURITY.md](SECURITY.md), and [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md). Release instructions are in CONTRIBUTING.md.
165
+
166
+ ## License
167
+
168
+ MIT © 2026 Polygons Media LLC.
@@ -0,0 +1,204 @@
1
+ # Bundled third-party licenses
2
+
3
+ The GitHub Action bundle includes these dependencies. The project itself is MIT-licensed.
4
+
5
+ ## entities
6
+
7
+ ```text
8
+ Copyright (c) Felix Böhm
9
+ All rights reserved.
10
+
11
+ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
12
+
13
+ Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
14
+
15
+ Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
16
+
17
+ THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS,
18
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
19
+
20
+ ```
21
+
22
+ ## linkify-it
23
+
24
+ ```text
25
+ Copyright (c) 2015 Vitaly Puzrin.
26
+
27
+ Permission is hereby granted, free of charge, to any person
28
+ obtaining a copy of this software and associated documentation
29
+ files (the "Software"), to deal in the Software without
30
+ restriction, including without limitation the rights to use,
31
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
32
+ copies of the Software, and to permit persons to whom the
33
+ Software is furnished to do so, subject to the following
34
+ conditions:
35
+
36
+ The above copyright notice and this permission notice shall be
37
+ included in all copies or substantial portions of the Software.
38
+
39
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
40
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
41
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
42
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
43
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
44
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
45
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
46
+ OTHER DEALINGS IN THE SOFTWARE.
47
+
48
+ ```
49
+
50
+ ## markdown-it
51
+
52
+ ```text
53
+ Copyright (c) 2014 Vitaly Puzrin, Alex Kocharin.
54
+
55
+ Permission is hereby granted, free of charge, to any person
56
+ obtaining a copy of this software and associated documentation
57
+ files (the "Software"), to deal in the Software without
58
+ restriction, including without limitation the rights to use,
59
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
60
+ copies of the Software, and to permit persons to whom the
61
+ Software is furnished to do so, subject to the following
62
+ conditions:
63
+
64
+ The above copyright notice and this permission notice shall be
65
+ included in all copies or substantial portions of the Software.
66
+
67
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
68
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
69
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
70
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
71
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
72
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
73
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
74
+ OTHER DEALINGS IN THE SOFTWARE.
75
+
76
+ ```
77
+
78
+ ## mdurl
79
+
80
+ ```text
81
+ Copyright (c) 2015 Vitaly Puzrin, Alex Kocharin.
82
+
83
+ Permission is hereby granted, free of charge, to any person
84
+ obtaining a copy of this software and associated documentation
85
+ files (the "Software"), to deal in the Software without
86
+ restriction, including without limitation the rights to use,
87
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
88
+ copies of the Software, and to permit persons to whom the
89
+ Software is furnished to do so, subject to the following
90
+ conditions:
91
+
92
+ The above copyright notice and this permission notice shall be
93
+ included in all copies or substantial portions of the Software.
94
+
95
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
96
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
97
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
98
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
99
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
100
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
101
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
102
+ OTHER DEALINGS IN THE SOFTWARE.
103
+
104
+ --------------------------------------------------------------------------------
105
+
106
+ .parse() is based on Joyent's node.js `url` code:
107
+
108
+ Copyright Joyent, Inc. and other Node contributors. All rights reserved.
109
+ Permission is hereby granted, free of charge, to any person obtaining a copy
110
+ of this software and associated documentation files (the "Software"), to
111
+ deal in the Software without restriction, including without limitation the
112
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
113
+ sell copies of the Software, and to permit persons to whom the Software is
114
+ furnished to do so, subject to the following conditions:
115
+
116
+ The above copyright notice and this permission notice shall be included in
117
+ all copies or substantial portions of the Software.
118
+
119
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
120
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
121
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
122
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
123
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
124
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
125
+ IN THE SOFTWARE.
126
+
127
+ ```
128
+
129
+ ## parse5
130
+
131
+ ```text
132
+ Copyright (c) 2013-2019 Ivan Nikulin (ifaaan@gmail.com, https://github.com/inikulin)
133
+
134
+ Permission is hereby granted, free of charge, to any person obtaining a copy
135
+ of this software and associated documentation files (the "Software"), to deal
136
+ in the Software without restriction, including without limitation the rights
137
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
138
+ copies of the Software, and to permit persons to whom the Software is
139
+ furnished to do so, subject to the following conditions:
140
+
141
+ The above copyright notice and this permission notice shall be included in
142
+ all copies or substantial portions of the Software.
143
+
144
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
145
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
146
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
147
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
148
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
149
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
150
+ THE SOFTWARE.
151
+
152
+ ```
153
+
154
+ ## punycode.js
155
+
156
+ ```text
157
+ Copyright Mathias Bynens <https://mathiasbynens.be/>
158
+
159
+ Permission is hereby granted, free of charge, to any person obtaining
160
+ a copy of this software and associated documentation files (the
161
+ "Software"), to deal in the Software without restriction, including
162
+ without limitation the rights to use, copy, modify, merge, publish,
163
+ distribute, sublicense, and/or sell copies of the Software, and to
164
+ permit persons to whom the Software is furnished to do so, subject to
165
+ the following conditions:
166
+
167
+ The above copyright notice and this permission notice shall be
168
+ included in all copies or substantial portions of the Software.
169
+
170
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
171
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
172
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
173
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
174
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
175
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
176
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
177
+
178
+ ```
179
+
180
+ ## uc.micro
181
+
182
+ ```text
183
+ Copyright Mathias Bynens <https://mathiasbynens.be/>
184
+
185
+ Permission is hereby granted, free of charge, to any person obtaining
186
+ a copy of this software and associated documentation files (the
187
+ "Software"), to deal in the Software without restriction, including
188
+ without limitation the rights to use, copy, modify, merge, publish,
189
+ distribute, sublicense, and/or sell copies of the Software, and to
190
+ permit persons to whom the Software is furnished to do so, subject to
191
+ the following conditions:
192
+
193
+ The above copyright notice and this permission notice shall be
194
+ included in all copies or substantial portions of the Software.
195
+
196
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
197
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
198
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
199
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
200
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
201
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
202
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
203
+
204
+ ```