agentless-mcp 0.1.0__tar.gz

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.
Files changed (59) hide show
  1. agentless_mcp-0.1.0/LICENSE +21 -0
  2. agentless_mcp-0.1.0/NOTICE +53 -0
  3. agentless_mcp-0.1.0/PKG-INFO +162 -0
  4. agentless_mcp-0.1.0/README.md +133 -0
  5. agentless_mcp-0.1.0/pyproject.toml +320 -0
  6. agentless_mcp-0.1.0/src/agentless_mcp/__init__.py +1 -0
  7. agentless_mcp-0.1.0/src/agentless_mcp/__main__.py +6 -0
  8. agentless_mcp-0.1.0/src/agentless_mcp/adapters/__init__.py +1 -0
  9. agentless_mcp-0.1.0/src/agentless_mcp/adapters/cli/__init__.py +1 -0
  10. agentless_mcp-0.1.0/src/agentless_mcp/adapters/cli/formatting.py +78 -0
  11. agentless_mcp-0.1.0/src/agentless_mcp/adapters/cli/main.py +1424 -0
  12. agentless_mcp-0.1.0/src/agentless_mcp/adapters/mcp/__init__.py +1 -0
  13. agentless_mcp-0.1.0/src/agentless_mcp/adapters/mcp/annotations.py +31 -0
  14. agentless_mcp-0.1.0/src/agentless_mcp/adapters/mcp/server.py +605 -0
  15. agentless_mcp-0.1.0/src/agentless_mcp/application/__init__.py +1 -0
  16. agentless_mcp-0.1.0/src/agentless_mcp/application/envelope.py +241 -0
  17. agentless_mcp-0.1.0/src/agentless_mcp/application/graph_service.py +528 -0
  18. agentless_mcp-0.1.0/src/agentless_mcp/application/lint_service.py +181 -0
  19. agentless_mcp-0.1.0/src/agentless_mcp/application/map_service.py +383 -0
  20. agentless_mcp-0.1.0/src/agentless_mcp/application/patch_service.py +409 -0
  21. agentless_mcp-0.1.0/src/agentless_mcp/application/render.py +791 -0
  22. agentless_mcp-0.1.0/src/agentless_mcp/application/repo_context.py +108 -0
  23. agentless_mcp-0.1.0/src/agentless_mcp/application/symbol_service.py +595 -0
  24. agentless_mcp-0.1.0/src/agentless_mcp/application/validate_service.py +826 -0
  25. agentless_mcp-0.1.0/src/agentless_mcp/application/view_service.py +207 -0
  26. agentless_mcp-0.1.0/src/agentless_mcp/bootstrap.py +153 -0
  27. agentless_mcp-0.1.0/src/agentless_mcp/core/__init__.py +1 -0
  28. agentless_mcp-0.1.0/src/agentless_mcp/core/cache.py +1086 -0
  29. agentless_mcp-0.1.0/src/agentless_mcp/core/communities.py +339 -0
  30. agentless_mcp-0.1.0/src/agentless_mcp/core/extractor.py +1993 -0
  31. agentless_mcp-0.1.0/src/agentless_mcp/core/gitinfo.py +147 -0
  32. agentless_mcp-0.1.0/src/agentless_mcp/core/grammars.py +314 -0
  33. agentless_mcp-0.1.0/src/agentless_mcp/core/graph.py +301 -0
  34. agentless_mcp-0.1.0/src/agentless_mcp/core/imports.py +20 -0
  35. agentless_mcp-0.1.0/src/agentless_mcp/core/locs.py +307 -0
  36. agentless_mcp-0.1.0/src/agentless_mcp/core/mermaid.py +357 -0
  37. agentless_mcp-0.1.0/src/agentless_mcp/core/normalize.py +237 -0
  38. agentless_mcp-0.1.0/src/agentless_mcp/core/patches.py +588 -0
  39. agentless_mcp-0.1.0/src/agentless_mcp/core/patchlint.py +1761 -0
  40. agentless_mcp-0.1.0/src/agentless_mcp/core/projectconfig.py +334 -0
  41. agentless_mcp-0.1.0/src/agentless_mcp/core/refs.py +246 -0
  42. agentless_mcp-0.1.0/src/agentless_mcp/core/resolve.py +776 -0
  43. agentless_mcp-0.1.0/src/agentless_mcp/core/sandbox.py +436 -0
  44. agentless_mcp-0.1.0/src/agentless_mcp/core/skeleton.py +304 -0
  45. agentless_mcp-0.1.0/src/agentless_mcp/core/slices.py +164 -0
  46. agentless_mcp-0.1.0/src/agentless_mcp/core/symbols.py +279 -0
  47. agentless_mcp-0.1.0/src/agentless_mcp/core/treewalk.py +245 -0
  48. agentless_mcp-0.1.0/src/agentless_mcp/core/vote.py +295 -0
  49. agentless_mcp-0.1.0/src/agentless_mcp/prompts/__init__.py +107 -0
  50. agentless_mcp-0.1.0/src/agentless_mcp/prompts/envelope.json +13 -0
  51. agentless_mcp-0.1.0/src/agentless_mcp/prompts/loader.py +94 -0
  52. agentless_mcp-0.1.0/src/agentless_mcp/prompts/messages.json +16 -0
  53. agentless_mcp-0.1.0/src/agentless_mcp/prompts/tool_descriptions.json +13 -0
  54. agentless_mcp-0.1.0/src/agentless_mcp/util/__init__.py +1 -0
  55. agentless_mcp-0.1.0/src/agentless_mcp/util/errors.py +43 -0
  56. agentless_mcp-0.1.0/src/agentless_mcp/util/filelock.py +104 -0
  57. agentless_mcp-0.1.0/src/agentless_mcp/util/fslimits.py +211 -0
  58. agentless_mcp-0.1.0/src/agentless_mcp/util/platforms.py +21 -0
  59. agentless_mcp-0.1.0/src/agentless_mcp/util/tokens.py +44 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Dallas
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.
@@ -0,0 +1,53 @@
1
+ agentless-mcp
2
+ Copyright (c) 2026 Dallas
3
+
4
+ This product includes software derived from Agentless
5
+ (https://github.com/OpenAutoCoder/Agentless), which is distributed under the
6
+ MIT License.
7
+
8
+ The following parts of this package are ports or adaptations of Agentless
9
+ code, rewritten for this package's value objects and error handling but
10
+ keeping the upstream semantics:
11
+
12
+ * src/agentless_mcp/core/slices.py
13
+ line wrapping and interval merging, from Agentless
14
+ agentless/util/preprocess_data.py
15
+
16
+ * src/agentless_mcp/core/locs.py
17
+ the location grammar and its transfer onto extracted symbols, from
18
+ Agentless agentless/util/preprocess_data.py
19
+ (transfer_arb_locs_to_locs)
20
+
21
+ * src/agentless_mcp/core/patches.py
22
+ the SEARCH/REPLACE edit format and its parser, from Agentless
23
+ agentless/util/postprocess_data.py
24
+
25
+ * src/agentless_mcp/core/vote.py
26
+ the candidate filter ladder and the majority-vote ranking key, from
27
+ Agentless agentless/repair/rerank.py
28
+
29
+ Upstream license, reproduced in full:
30
+
31
+ ------------------------------------------------------------------------------
32
+ MIT License
33
+
34
+ Copyright (c) 2024 OpenAutoCoder
35
+
36
+ Permission is hereby granted, free of charge, to any person obtaining a copy
37
+ of this software and associated documentation files (the "Software"), to deal
38
+ in the Software without restriction, including without limitation the rights
39
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
40
+ copies of the Software, and to permit persons to whom the Software is
41
+ furnished to do so, subject to the following conditions:
42
+
43
+ The above copyright notice and this permission notice shall be included in all
44
+ copies or substantial portions of the Software.
45
+
46
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
47
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
48
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
49
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
50
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
51
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
52
+ SOFTWARE.
53
+ ------------------------------------------------------------------------------
@@ -0,0 +1,162 @@
1
+ Metadata-Version: 2.4
2
+ Name: agentless-mcp
3
+ Version: 0.1.0
4
+ Summary: Model-free tree-sitter repo-map, localization and patch-validation machinery for agents
5
+ Author: Dallas
6
+ Author-email: Dallas <dmarlow@tuta.io>
7
+ License-Expression: MIT
8
+ License-File: LICENSE
9
+ License-File: NOTICE
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Topic :: Software Development
18
+ Classifier: Topic :: Software Development :: Quality Assurance
19
+ Requires-Dist: tree-sitter>=0.25,<0.27
20
+ Requires-Dist: tree-sitter-language-pack==1.14.3
21
+ Requires-Dist: fastmcp>=2.14 ; extra == 'mcp'
22
+ Requires-Dist: mcp>=1.29 ; extra == 'mcp'
23
+ Requires-Dist: tiktoken>=0.9 ; extra == 'tokens'
24
+ Requires-Python: >=3.10
25
+ Project-URL: Repository, https://github.com/dmarlow-personal/agentless-mcp
26
+ Provides-Extra: mcp
27
+ Provides-Extra: tokens
28
+ Description-Content-Type: text/markdown
29
+
30
+ # agentless-mcp
31
+
32
+ `agentless-mcp` is model-free structural machinery for coding agents: an
33
+ on-demand tree-sitter repo map at any zoom level (directory tree, skeleton,
34
+ line slice), symbol and reference lookup for bug localization, and
35
+ deterministic patch parsing, syntax-checking and candidate validation. It
36
+ never calls a language model — the calling agent supplies all the reasoning,
37
+ and this tool supplies the parsing, ranking, containment and verification it
38
+ would otherwise improvise. It ships as a CLI any agent can invoke over Bash and
39
+ as a thin stdio MCP server over the same core.
40
+
41
+ ## Install
42
+
43
+ Today, from git:
44
+
45
+ ```
46
+ uv tool install git+https://github.com/dmarlow-personal/agentless-mcp
47
+ agentless-mcp warmup
48
+ ```
49
+
50
+ Add the `mcp` extra for the stdio server
51
+ (`uv tool install "agentless-mcp[mcp] @ git+..."`). A PyPI release will follow;
52
+ until then the git URL is the install route.
53
+
54
+ ## Status
55
+
56
+ Phases 1 through 6 are in. The CLI and the stdio MCP server are both live over
57
+ one set of application services: repository map, directory tree, skeleton,
58
+ slice, symbol lookup, symbol expansion, fan-in, location resolution, and the
59
+ resolved-graph views — `explain` (one symbol's tiered fan-in and fan-out),
60
+ `path` (shortest resolved path between two symbols) and `cycles` (module-level
61
+ import cycles). The write side — SEARCH/REPLACE patch parsing, syntax
62
+ checking, worktree-isolated apply, candidate validation and the
63
+ equivalence-clustered vote — is CLI-only and never exposed over MCP.
64
+
65
+ Reference resolution is deterministic and model-free: a name is bound to its
66
+ candidate definitions through the file's own imports and its own definitions,
67
+ and every edge carries the discrete evidence tier behind it (same-file,
68
+ resolved-via-import, unique, name-only-ambiguous). The graph is assembled in
69
+ memory on every call from the current tree — nothing about it is stored, and
70
+ there is no watcher.
71
+
72
+ Parsing happens on demand by default; `agentless-mcp index` builds a
73
+ per-repository SQLite cache under `$XDG_CACHE_HOME/agentless-mcp/` (never
74
+ inside the analyzed repository) holding symbols, imports and references for
75
+ files whose sha256 has not moved. Every answer's receipt names the cache
76
+ generation and whether it is still the repository's own, and `--no-cache` /
77
+ `no_cache: true` forces on-demand parsing.
78
+
79
+ A repository may declare its own defaults in an optional `.agentless-mcp.json`
80
+ at its root (map budget, max files, granularity, docstrings, stoplist
81
+ additions, and a `test_cmd` that only the CLI's `validate` will use, only when
82
+ the invocation named none of its own, and only after printing it). The file is
83
+ repository content: every value is schema-checked and bounded, no key is
84
+ path-typed, and unknown keys are warnings in the response envelope rather than
85
+ errors.
86
+
87
+ Start with [docs/agent-guide.md](docs/agent-guide.md): it is the usage guide
88
+ written for the agent that will call this.
89
+
90
+ ## Development
91
+
92
+ ```
93
+ uv sync --extra mcp
94
+ uv run agentless-mcp warmup
95
+ uv run pre-commit run --all-files
96
+ uv run pytest
97
+ ```
98
+
99
+ `uv run pre-commit run --all-files` is the gate — it is a strict superset of
100
+ running ruff by hand (it adds ruff-format, mypy strict, codespell,
101
+ import-linter and deptry).
102
+
103
+ ## Windows support
104
+
105
+ Linux and macOS are the supported platforms: they are what the test suite runs
106
+ on, and every guarantee below is asserted there. Windows is **documented best
107
+ effort** — the POSIX-only calls have Windows paths, there is no Windows CI, and
108
+ nothing here has been executed on Windows.
109
+
110
+ Covered:
111
+
112
+ - The whole read surface. Map, tree, skeleton, slice, symbol lookup, fan-in and
113
+ location resolution are pure parsing and path arithmetic, and paths go
114
+ through `pathlib` with repository-relative results normalized to forward
115
+ slashes.
116
+ - The tag cache, including its single-writer discipline. The index lock is
117
+ `fcntl.flock` on POSIX and `msvcrt.locking` on Windows, selected in
118
+ `util/filelock.py`; both are non-blocking, so a second concurrent index run
119
+ is refused rather than queued on either platform.
120
+ - Patch parsing, syntax checking and the equivalence key.
121
+
122
+ Not covered, and the difference is real:
123
+
124
+ - **The timeout guarantee is weaker.** On POSIX a timed-out test command has
125
+ its whole process group killed (SIGTERM, then SIGKILL), so anything it
126
+ spawned dies with it. On Windows the child is created with
127
+ `CREATE_NEW_PROCESS_GROUP` and then `terminate()`/`kill()` is sent to the
128
+ leader only: **grandchildren can survive a timeout**. If your test command
129
+ starts a server, expect to clean it up yourself.
130
+ - **No Windows CI.** The platform dispatch is unit-tested on Linux; the
131
+ Windows system calls themselves are not exercised anywhere.
132
+ - Anything depending on `git worktree` behaves as the local git does; it has
133
+ not been exercised on Windows filesystems.
134
+
135
+ ## Security
136
+
137
+ The tool's posture toward an analyzed repository is **read-only and
138
+ path-confined**: the MCP surface exposes read tools only, patch application and
139
+ test execution are CLI-side and default to an isolated git worktree, and no
140
+ cache or scratch state is written inside the repository under analysis.
141
+
142
+ One supply-chain caveat is worth stating up front. Grammars come from
143
+ `tree-sitter-language-pack`, which downloads a prebuilt platform bundle on first
144
+ use. Those bundles are SHA-256 verified against a release manifest, and a
145
+ mismatch is a hard failure — but the manifest itself (`parsers.json`) is
146
+ HTTPS-trusted rather than cryptographically signed. We accept that risk under
147
+ exact release-version pinning: `tree-sitter` and `tree-sitter-language-pack` are
148
+ pinned as a unit and move only through a reviewed bump. Fetching is confined to
149
+ an explicit warmup step, and both the manifest URL and the cache directory are
150
+ overridable for mirrored or air-gapped installs. See
151
+ [docs/supply-chain-audit.md](docs/supply-chain-audit.md) for the full audit.
152
+
153
+ ## License
154
+
155
+ MIT — see [LICENSE](LICENSE).
156
+
157
+ Parts of this package are derived from
158
+ [Agentless](https://github.com/OpenAutoCoder/Agentless) (MIT, Copyright (c)
159
+ 2024 OpenAutoCoder): the line-slice primitives, the location grammar, the
160
+ SEARCH/REPLACE edit format and its parser, and the candidate filter ladder and
161
+ vote key. [NOTICE](NOTICE) names each file and reproduces the upstream
162
+ license.
@@ -0,0 +1,133 @@
1
+ # agentless-mcp
2
+
3
+ `agentless-mcp` is model-free structural machinery for coding agents: an
4
+ on-demand tree-sitter repo map at any zoom level (directory tree, skeleton,
5
+ line slice), symbol and reference lookup for bug localization, and
6
+ deterministic patch parsing, syntax-checking and candidate validation. It
7
+ never calls a language model — the calling agent supplies all the reasoning,
8
+ and this tool supplies the parsing, ranking, containment and verification it
9
+ would otherwise improvise. It ships as a CLI any agent can invoke over Bash and
10
+ as a thin stdio MCP server over the same core.
11
+
12
+ ## Install
13
+
14
+ Today, from git:
15
+
16
+ ```
17
+ uv tool install git+https://github.com/dmarlow-personal/agentless-mcp
18
+ agentless-mcp warmup
19
+ ```
20
+
21
+ Add the `mcp` extra for the stdio server
22
+ (`uv tool install "agentless-mcp[mcp] @ git+..."`). A PyPI release will follow;
23
+ until then the git URL is the install route.
24
+
25
+ ## Status
26
+
27
+ Phases 1 through 6 are in. The CLI and the stdio MCP server are both live over
28
+ one set of application services: repository map, directory tree, skeleton,
29
+ slice, symbol lookup, symbol expansion, fan-in, location resolution, and the
30
+ resolved-graph views — `explain` (one symbol's tiered fan-in and fan-out),
31
+ `path` (shortest resolved path between two symbols) and `cycles` (module-level
32
+ import cycles). The write side — SEARCH/REPLACE patch parsing, syntax
33
+ checking, worktree-isolated apply, candidate validation and the
34
+ equivalence-clustered vote — is CLI-only and never exposed over MCP.
35
+
36
+ Reference resolution is deterministic and model-free: a name is bound to its
37
+ candidate definitions through the file's own imports and its own definitions,
38
+ and every edge carries the discrete evidence tier behind it (same-file,
39
+ resolved-via-import, unique, name-only-ambiguous). The graph is assembled in
40
+ memory on every call from the current tree — nothing about it is stored, and
41
+ there is no watcher.
42
+
43
+ Parsing happens on demand by default; `agentless-mcp index` builds a
44
+ per-repository SQLite cache under `$XDG_CACHE_HOME/agentless-mcp/` (never
45
+ inside the analyzed repository) holding symbols, imports and references for
46
+ files whose sha256 has not moved. Every answer's receipt names the cache
47
+ generation and whether it is still the repository's own, and `--no-cache` /
48
+ `no_cache: true` forces on-demand parsing.
49
+
50
+ A repository may declare its own defaults in an optional `.agentless-mcp.json`
51
+ at its root (map budget, max files, granularity, docstrings, stoplist
52
+ additions, and a `test_cmd` that only the CLI's `validate` will use, only when
53
+ the invocation named none of its own, and only after printing it). The file is
54
+ repository content: every value is schema-checked and bounded, no key is
55
+ path-typed, and unknown keys are warnings in the response envelope rather than
56
+ errors.
57
+
58
+ Start with [docs/agent-guide.md](docs/agent-guide.md): it is the usage guide
59
+ written for the agent that will call this.
60
+
61
+ ## Development
62
+
63
+ ```
64
+ uv sync --extra mcp
65
+ uv run agentless-mcp warmup
66
+ uv run pre-commit run --all-files
67
+ uv run pytest
68
+ ```
69
+
70
+ `uv run pre-commit run --all-files` is the gate — it is a strict superset of
71
+ running ruff by hand (it adds ruff-format, mypy strict, codespell,
72
+ import-linter and deptry).
73
+
74
+ ## Windows support
75
+
76
+ Linux and macOS are the supported platforms: they are what the test suite runs
77
+ on, and every guarantee below is asserted there. Windows is **documented best
78
+ effort** — the POSIX-only calls have Windows paths, there is no Windows CI, and
79
+ nothing here has been executed on Windows.
80
+
81
+ Covered:
82
+
83
+ - The whole read surface. Map, tree, skeleton, slice, symbol lookup, fan-in and
84
+ location resolution are pure parsing and path arithmetic, and paths go
85
+ through `pathlib` with repository-relative results normalized to forward
86
+ slashes.
87
+ - The tag cache, including its single-writer discipline. The index lock is
88
+ `fcntl.flock` on POSIX and `msvcrt.locking` on Windows, selected in
89
+ `util/filelock.py`; both are non-blocking, so a second concurrent index run
90
+ is refused rather than queued on either platform.
91
+ - Patch parsing, syntax checking and the equivalence key.
92
+
93
+ Not covered, and the difference is real:
94
+
95
+ - **The timeout guarantee is weaker.** On POSIX a timed-out test command has
96
+ its whole process group killed (SIGTERM, then SIGKILL), so anything it
97
+ spawned dies with it. On Windows the child is created with
98
+ `CREATE_NEW_PROCESS_GROUP` and then `terminate()`/`kill()` is sent to the
99
+ leader only: **grandchildren can survive a timeout**. If your test command
100
+ starts a server, expect to clean it up yourself.
101
+ - **No Windows CI.** The platform dispatch is unit-tested on Linux; the
102
+ Windows system calls themselves are not exercised anywhere.
103
+ - Anything depending on `git worktree` behaves as the local git does; it has
104
+ not been exercised on Windows filesystems.
105
+
106
+ ## Security
107
+
108
+ The tool's posture toward an analyzed repository is **read-only and
109
+ path-confined**: the MCP surface exposes read tools only, patch application and
110
+ test execution are CLI-side and default to an isolated git worktree, and no
111
+ cache or scratch state is written inside the repository under analysis.
112
+
113
+ One supply-chain caveat is worth stating up front. Grammars come from
114
+ `tree-sitter-language-pack`, which downloads a prebuilt platform bundle on first
115
+ use. Those bundles are SHA-256 verified against a release manifest, and a
116
+ mismatch is a hard failure — but the manifest itself (`parsers.json`) is
117
+ HTTPS-trusted rather than cryptographically signed. We accept that risk under
118
+ exact release-version pinning: `tree-sitter` and `tree-sitter-language-pack` are
119
+ pinned as a unit and move only through a reviewed bump. Fetching is confined to
120
+ an explicit warmup step, and both the manifest URL and the cache directory are
121
+ overridable for mirrored or air-gapped installs. See
122
+ [docs/supply-chain-audit.md](docs/supply-chain-audit.md) for the full audit.
123
+
124
+ ## License
125
+
126
+ MIT — see [LICENSE](LICENSE).
127
+
128
+ Parts of this package are derived from
129
+ [Agentless](https://github.com/OpenAutoCoder/Agentless) (MIT, Copyright (c)
130
+ 2024 OpenAutoCoder): the line-slice primitives, the location grammar, the
131
+ SEARCH/REPLACE edit format and its parser, and the candidate filter ladder and
132
+ vote key. [NOTICE](NOTICE) names each file and reproduces the upstream
133
+ license.