context-loader 1.3.3__tar.gz → 1.3.4__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.
- {context_loader-1.3.3 → context_loader-1.3.4}/PKG-INFO +49 -19
- {context_loader-1.3.3 → context_loader-1.3.4}/README.md +47 -17
- {context_loader-1.3.3 → context_loader-1.3.4}/context_loader/__init__.py +1 -1
- {context_loader-1.3.3 → context_loader-1.3.4}/pyproject.toml +2 -2
- {context_loader-1.3.3 → context_loader-1.3.4}/pyproject.toml.orig +2 -2
- {context_loader-1.3.3 → context_loader-1.3.4}/tool_cli_contract.json +1 -1
- {context_loader-1.3.3 → context_loader-1.3.4}/LICENSE +0 -0
- {context_loader-1.3.3 → context_loader-1.3.4}/context_loader/application.py +0 -0
- {context_loader-1.3.3 → context_loader-1.3.4}/context_loader/cli.py +0 -0
- {context_loader-1.3.3 → context_loader-1.3.4}/context_loader/collect.py +0 -0
- {context_loader-1.3.3 → context_loader-1.3.4}/context_loader/filesystem.py +0 -0
- {context_loader-1.3.3 → context_loader-1.3.4}/context_loader/git.py +0 -0
- {context_loader-1.3.3 → context_loader-1.3.4}/context_loader/model.py +0 -0
- {context_loader-1.3.3 → context_loader-1.3.4}/context_loader/render.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: context-loader
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.4
|
|
4
4
|
Summary: Render deterministic local Git context for any executor
|
|
5
5
|
License: Apache License
|
|
6
6
|
Version 2.0, January 2004
|
|
@@ -204,7 +204,7 @@ License: Apache License
|
|
|
204
204
|
See the License for the specific language governing permissions and
|
|
205
205
|
limitations under the License.
|
|
206
206
|
|
|
207
|
-
Requires-Python: >=3.12, <3.
|
|
207
|
+
Requires-Python: >=3.12, <3.15
|
|
208
208
|
Project-URL: Repository, https://github.com/xuanheng-tech/context-loader
|
|
209
209
|
Project-URL: Issues, https://github.com/xuanheng-tech/context-loader/issues
|
|
210
210
|
Description-Content-Type: text/markdown
|
|
@@ -219,14 +219,14 @@ Python standard library.
|
|
|
219
219
|
|
|
220
220
|
## Open-source quick start
|
|
221
221
|
|
|
222
|
-
Current stable release: **1.3.
|
|
222
|
+
Current stable release: **1.3.4**. Local CLI for coding-agent workflows; renders deterministic Markdown or JSON.
|
|
223
223
|
|
|
224
224
|
```bash
|
|
225
|
-
uv tool install 'context-loader==1.3.
|
|
225
|
+
uv tool install 'context-loader==1.3.4'
|
|
226
226
|
```
|
|
227
227
|
|
|
228
228
|
```bash
|
|
229
|
-
pip install 'context-loader==1.3.
|
|
229
|
+
pip install 'context-loader==1.3.4'
|
|
230
230
|
```
|
|
231
231
|
|
|
232
232
|
```bash
|
|
@@ -239,21 +239,21 @@ project-context --repo /path/to/repo --format json
|
|
|
239
239
|
|
|
240
240
|
## Install
|
|
241
241
|
|
|
242
|
-
Source version: `1.3.
|
|
242
|
+
Source version: `1.3.4`. Install its matching published release or an exact source commit.
|
|
243
243
|
|
|
244
244
|
Install via `uv`:
|
|
245
245
|
|
|
246
246
|
```bash
|
|
247
|
-
uv tool install 'context-loader==1.3.
|
|
247
|
+
uv tool install 'context-loader==1.3.4'
|
|
248
248
|
```
|
|
249
249
|
|
|
250
250
|
Install via `pip`:
|
|
251
251
|
|
|
252
252
|
```bash
|
|
253
|
-
pip install 'context-loader==1.3.
|
|
253
|
+
pip install 'context-loader==1.3.4'
|
|
254
254
|
```
|
|
255
255
|
|
|
256
|
-
For development or source-based installs tracking current repository (`1.3.
|
|
256
|
+
For development or source-based installs tracking current repository (`1.3.4`):
|
|
257
257
|
|
|
258
258
|
```bash
|
|
259
259
|
uv tool install git+https://github.com/xuanheng-tech/context-loader.git
|
|
@@ -279,7 +279,7 @@ part of either distribution; run them from a checkout of the matching tag.
|
|
|
279
279
|
|
|
280
280
|
## Platform and Runtime Requirements
|
|
281
281
|
|
|
282
|
-
- **Python**: Python 3.12 (`>=3.12,<3.
|
|
282
|
+
- **Python**: Python 3.12–3.14 (`>=3.12,<3.15`). Runtime code uses only the Python standard library with zero runtime dependencies.
|
|
283
283
|
- **Git**: Requires the standard `git` CLI at the fixed absolute path `/usr/bin/git`. The
|
|
284
284
|
executable is never resolved through `PATH`, so an installation elsewhere is not used and
|
|
285
285
|
every invocation fails with exit `1`. Git runs with a sanitized environment that ignores
|
|
@@ -350,7 +350,7 @@ set differs, as described under “Compact model consumption”. The declared co
|
|
|
350
350
|
"schema_version": 3,
|
|
351
351
|
"tool": {
|
|
352
352
|
"name": "context-loader",
|
|
353
|
-
"version": "1.3.
|
|
353
|
+
"version": "1.3.4"
|
|
354
354
|
},
|
|
355
355
|
"repository": {
|
|
356
356
|
"requested_path": "/canonical/requested/path",
|
|
@@ -470,7 +470,7 @@ although 1.1.0 added the top-level `statuses` key. From release 1.2.0 onward eac
|
|
|
470
470
|
names exactly one key set, and a new number is issued whenever a key set would otherwise be reused.
|
|
471
471
|
|
|
472
472
|
The JSON schema version and package version are independent: this build emits `schema_version` `3`
|
|
473
|
-
for `--format json` and `4` for `--format json-compact`, while `tool.version` is `1.3.
|
|
473
|
+
for `--format json` and `4` for `--format json-compact`, while `tool.version` is `1.3.4`. Version 1
|
|
474
474
|
and 2 are the exact shapes already published in release 1.2.0 and are never reused: because
|
|
475
475
|
`nested_context` changes the default document's key set, version 3 names the current full-document
|
|
476
476
|
key set and version 4 names the compact projection.
|
|
@@ -639,7 +639,7 @@ or candidate-file content.
|
|
|
639
639
|
|
|
640
640
|
## Not Included
|
|
641
641
|
|
|
642
|
-
Version 1.3.
|
|
642
|
+
Version 1.3.4 does not provide AI summaries, project-type detection, loading or transport of
|
|
643
643
|
nested `AGENTS.md` contents (the JSON `nested_context` field reports bounded existence only),
|
|
644
644
|
Memory retrieval, semantic ranking, ignore-rule parsing, plugins, profiles, caches, databases,
|
|
645
645
|
network services, MCP, daemons, GUIs, CI/CD, telemetry, or automatic updates.
|
|
@@ -652,16 +652,43 @@ Run the complete local check:
|
|
|
652
652
|
just check
|
|
653
653
|
```
|
|
654
654
|
|
|
655
|
+
The shared check also builds a wheel and installs it into a fresh virtual environment. Package
|
|
656
|
+
acceptance runs the installed CLI outside the source checkout, checking deterministic agreement
|
|
657
|
+
between all three formats, linked worktrees, and safe failures. Build and installation run offline
|
|
658
|
+
using the backend cache populated by `uv run --frozen`; the tests use only disposable repositories.
|
|
659
|
+
Git deadline regressions verify that silent, streaming, and stdout-closed child processes are
|
|
660
|
+
terminated and reaped, and that a timeout leaves CLI stdout empty.
|
|
661
|
+
|
|
655
662
|
The lockfile uses public PyPI artifact URLs; no organization mirror or local Renovate preset
|
|
656
663
|
is needed. Renovate keeps scheduled, rate-limited updates and manual merges using a public
|
|
657
|
-
recommended preset plus the repository's explicit settings.
|
|
658
|
-
|
|
664
|
+
recommended preset plus the repository's explicit settings. The GitHub quality gate runs on
|
|
665
|
+
Python 3.12.13, 3.13.13 and 3.14.5; the Gitea root-runner gate and release builds use 3.12.13.
|
|
666
|
+
Other interpreter/platform combinations require validation before widening the supported range.
|
|
659
667
|
|
|
660
668
|
Git test fixtures discard inherited `GIT_*` routing/configuration before creating repositories.
|
|
661
|
-
Permission-sensitive tests must run as a non-root user. Gitea uses `just ci-check
|
|
662
|
-
|
|
663
|
-
`
|
|
664
|
-
|
|
669
|
+
Permission-sensitive tests must run as a non-root user. Gitea uses `just ci-check`, which installs
|
|
670
|
+
Python 3.12.13 without user-level executable links and keeps its interpreter/cache under
|
|
671
|
+
`$RUNNER_TEMP/context-loader-ci` (or ignored `.ci-runtime/context-loader-ci` locally).
|
|
672
|
+
Non-root runners execute directly; root containers transfer ownership of that runtime and the
|
|
673
|
+
checkout, then use `runuser` with an existing account named by `CONTEXT_LOADER_CI_USER` (default
|
|
674
|
+
`ubuntu`). That account must be able to execute the installed `uv` and `just`; it does not need
|
|
675
|
+
access to `/root` or a root-owned Python/cache. No `sudo` dependency is required for this CI step.
|
|
676
|
+
|
|
677
|
+
### Performance baseline
|
|
678
|
+
|
|
679
|
+
On Linux with GNU `/usr/bin/time`, measure an explicit installed CLI using an existing empty
|
|
680
|
+
scratch directory:
|
|
681
|
+
|
|
682
|
+
```bash
|
|
683
|
+
python scripts/benchmark.py --cli /absolute/path/to/project-context --scratch /absolute/empty/scratch
|
|
684
|
+
```
|
|
685
|
+
|
|
686
|
+
The opt-in benchmark creates only synthetic repositories under that directory and reports median
|
|
687
|
+
elapsed time, peak RSS (KiB) and JSON-compact output bytes over five runs. It checks identical output
|
|
688
|
+
between runs and covers 1,000 AGENTS headings, a 5,000-file directory, and 1,000 untracked files.
|
|
689
|
+
Keep the CLI version, scratch path, interpreter and machine comparable when comparing runs;
|
|
690
|
+
measurements are observations, not timing thresholds in CI. Retain or remove the scratch directory
|
|
691
|
+
through your own temporary-resource workflow after inspection.
|
|
665
692
|
|
|
666
693
|
## Version maintenance
|
|
667
694
|
|
|
@@ -687,6 +714,9 @@ For environments that permit direct public reads but share an exhausted proxy qu
|
|
|
687
714
|
set the Gitea Actions repository variable `RELEASE_PUBLIC_API_DIRECT=true`. The record
|
|
688
715
|
step appends only public GitHub API/PyPI hosts to the existing proxy bypass lists. Without
|
|
689
716
|
this explicit option, the workflow uses its inherited proxy settings.
|
|
717
|
+
Both existing bypass lists and an explicit `*` wildcard are preserved. Public HTTPS GET
|
|
718
|
+
transport failures get at most three attempts within the existing total retry budget;
|
|
719
|
+
API writes stop on transport failure so their outcome can be verified before retrying.
|
|
690
720
|
|
|
691
721
|
Release checks use Python 3.12, Git, and the runner's existing OpenSSL CLI. They compare downloaded
|
|
692
722
|
PyPI file bytes, metadata and SHA-256, plus the publisher/tag/commit claims in PyPI's HTTPS-served
|
|
@@ -8,14 +8,14 @@ Python standard library.
|
|
|
8
8
|
|
|
9
9
|
## Open-source quick start
|
|
10
10
|
|
|
11
|
-
Current stable release: **1.3.
|
|
11
|
+
Current stable release: **1.3.4**. Local CLI for coding-agent workflows; renders deterministic Markdown or JSON.
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
uv tool install 'context-loader==1.3.
|
|
14
|
+
uv tool install 'context-loader==1.3.4'
|
|
15
15
|
```
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
|
-
pip install 'context-loader==1.3.
|
|
18
|
+
pip install 'context-loader==1.3.4'
|
|
19
19
|
```
|
|
20
20
|
|
|
21
21
|
```bash
|
|
@@ -28,21 +28,21 @@ project-context --repo /path/to/repo --format json
|
|
|
28
28
|
|
|
29
29
|
## Install
|
|
30
30
|
|
|
31
|
-
Source version: `1.3.
|
|
31
|
+
Source version: `1.3.4`. Install its matching published release or an exact source commit.
|
|
32
32
|
|
|
33
33
|
Install via `uv`:
|
|
34
34
|
|
|
35
35
|
```bash
|
|
36
|
-
uv tool install 'context-loader==1.3.
|
|
36
|
+
uv tool install 'context-loader==1.3.4'
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
Install via `pip`:
|
|
40
40
|
|
|
41
41
|
```bash
|
|
42
|
-
pip install 'context-loader==1.3.
|
|
42
|
+
pip install 'context-loader==1.3.4'
|
|
43
43
|
```
|
|
44
44
|
|
|
45
|
-
For development or source-based installs tracking current repository (`1.3.
|
|
45
|
+
For development or source-based installs tracking current repository (`1.3.4`):
|
|
46
46
|
|
|
47
47
|
```bash
|
|
48
48
|
uv tool install git+https://github.com/xuanheng-tech/context-loader.git
|
|
@@ -68,7 +68,7 @@ part of either distribution; run them from a checkout of the matching tag.
|
|
|
68
68
|
|
|
69
69
|
## Platform and Runtime Requirements
|
|
70
70
|
|
|
71
|
-
- **Python**: Python 3.12 (`>=3.12,<3.
|
|
71
|
+
- **Python**: Python 3.12–3.14 (`>=3.12,<3.15`). Runtime code uses only the Python standard library with zero runtime dependencies.
|
|
72
72
|
- **Git**: Requires the standard `git` CLI at the fixed absolute path `/usr/bin/git`. The
|
|
73
73
|
executable is never resolved through `PATH`, so an installation elsewhere is not used and
|
|
74
74
|
every invocation fails with exit `1`. Git runs with a sanitized environment that ignores
|
|
@@ -139,7 +139,7 @@ set differs, as described under “Compact model consumption”. The declared co
|
|
|
139
139
|
"schema_version": 3,
|
|
140
140
|
"tool": {
|
|
141
141
|
"name": "context-loader",
|
|
142
|
-
"version": "1.3.
|
|
142
|
+
"version": "1.3.4"
|
|
143
143
|
},
|
|
144
144
|
"repository": {
|
|
145
145
|
"requested_path": "/canonical/requested/path",
|
|
@@ -259,7 +259,7 @@ although 1.1.0 added the top-level `statuses` key. From release 1.2.0 onward eac
|
|
|
259
259
|
names exactly one key set, and a new number is issued whenever a key set would otherwise be reused.
|
|
260
260
|
|
|
261
261
|
The JSON schema version and package version are independent: this build emits `schema_version` `3`
|
|
262
|
-
for `--format json` and `4` for `--format json-compact`, while `tool.version` is `1.3.
|
|
262
|
+
for `--format json` and `4` for `--format json-compact`, while `tool.version` is `1.3.4`. Version 1
|
|
263
263
|
and 2 are the exact shapes already published in release 1.2.0 and are never reused: because
|
|
264
264
|
`nested_context` changes the default document's key set, version 3 names the current full-document
|
|
265
265
|
key set and version 4 names the compact projection.
|
|
@@ -428,7 +428,7 @@ or candidate-file content.
|
|
|
428
428
|
|
|
429
429
|
## Not Included
|
|
430
430
|
|
|
431
|
-
Version 1.3.
|
|
431
|
+
Version 1.3.4 does not provide AI summaries, project-type detection, loading or transport of
|
|
432
432
|
nested `AGENTS.md` contents (the JSON `nested_context` field reports bounded existence only),
|
|
433
433
|
Memory retrieval, semantic ranking, ignore-rule parsing, plugins, profiles, caches, databases,
|
|
434
434
|
network services, MCP, daemons, GUIs, CI/CD, telemetry, or automatic updates.
|
|
@@ -441,16 +441,43 @@ Run the complete local check:
|
|
|
441
441
|
just check
|
|
442
442
|
```
|
|
443
443
|
|
|
444
|
+
The shared check also builds a wheel and installs it into a fresh virtual environment. Package
|
|
445
|
+
acceptance runs the installed CLI outside the source checkout, checking deterministic agreement
|
|
446
|
+
between all three formats, linked worktrees, and safe failures. Build and installation run offline
|
|
447
|
+
using the backend cache populated by `uv run --frozen`; the tests use only disposable repositories.
|
|
448
|
+
Git deadline regressions verify that silent, streaming, and stdout-closed child processes are
|
|
449
|
+
terminated and reaped, and that a timeout leaves CLI stdout empty.
|
|
450
|
+
|
|
444
451
|
The lockfile uses public PyPI artifact URLs; no organization mirror or local Renovate preset
|
|
445
452
|
is needed. Renovate keeps scheduled, rate-limited updates and manual merges using a public
|
|
446
|
-
recommended preset plus the repository's explicit settings.
|
|
447
|
-
|
|
453
|
+
recommended preset plus the repository's explicit settings. The GitHub quality gate runs on
|
|
454
|
+
Python 3.12.13, 3.13.13 and 3.14.5; the Gitea root-runner gate and release builds use 3.12.13.
|
|
455
|
+
Other interpreter/platform combinations require validation before widening the supported range.
|
|
448
456
|
|
|
449
457
|
Git test fixtures discard inherited `GIT_*` routing/configuration before creating repositories.
|
|
450
|
-
Permission-sensitive tests must run as a non-root user. Gitea uses `just ci-check
|
|
451
|
-
|
|
452
|
-
`
|
|
453
|
-
|
|
458
|
+
Permission-sensitive tests must run as a non-root user. Gitea uses `just ci-check`, which installs
|
|
459
|
+
Python 3.12.13 without user-level executable links and keeps its interpreter/cache under
|
|
460
|
+
`$RUNNER_TEMP/context-loader-ci` (or ignored `.ci-runtime/context-loader-ci` locally).
|
|
461
|
+
Non-root runners execute directly; root containers transfer ownership of that runtime and the
|
|
462
|
+
checkout, then use `runuser` with an existing account named by `CONTEXT_LOADER_CI_USER` (default
|
|
463
|
+
`ubuntu`). That account must be able to execute the installed `uv` and `just`; it does not need
|
|
464
|
+
access to `/root` or a root-owned Python/cache. No `sudo` dependency is required for this CI step.
|
|
465
|
+
|
|
466
|
+
### Performance baseline
|
|
467
|
+
|
|
468
|
+
On Linux with GNU `/usr/bin/time`, measure an explicit installed CLI using an existing empty
|
|
469
|
+
scratch directory:
|
|
470
|
+
|
|
471
|
+
```bash
|
|
472
|
+
python scripts/benchmark.py --cli /absolute/path/to/project-context --scratch /absolute/empty/scratch
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
The opt-in benchmark creates only synthetic repositories under that directory and reports median
|
|
476
|
+
elapsed time, peak RSS (KiB) and JSON-compact output bytes over five runs. It checks identical output
|
|
477
|
+
between runs and covers 1,000 AGENTS headings, a 5,000-file directory, and 1,000 untracked files.
|
|
478
|
+
Keep the CLI version, scratch path, interpreter and machine comparable when comparing runs;
|
|
479
|
+
measurements are observations, not timing thresholds in CI. Retain or remove the scratch directory
|
|
480
|
+
through your own temporary-resource workflow after inspection.
|
|
454
481
|
|
|
455
482
|
## Version maintenance
|
|
456
483
|
|
|
@@ -476,6 +503,9 @@ For environments that permit direct public reads but share an exhausted proxy qu
|
|
|
476
503
|
set the Gitea Actions repository variable `RELEASE_PUBLIC_API_DIRECT=true`. The record
|
|
477
504
|
step appends only public GitHub API/PyPI hosts to the existing proxy bypass lists. Without
|
|
478
505
|
this explicit option, the workflow uses its inherited proxy settings.
|
|
506
|
+
Both existing bypass lists and an explicit `*` wildcard are preserved. Public HTTPS GET
|
|
507
|
+
transport failures get at most three attempts within the existing total retry budget;
|
|
508
|
+
API writes stop on transport failure so their outcome can be verified before retrying.
|
|
479
509
|
|
|
480
510
|
Release checks use Python 3.12, Git, and the runner's existing OpenSSL CLI. They compare downloaded
|
|
481
511
|
PyPI file bytes, metadata and SHA-256, plus the publisher/tag/commit claims in PyPI's HTTPS-served
|
|
@@ -4,10 +4,10 @@ build-backend = "uv_build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "context-loader"
|
|
7
|
-
version = "1.3.
|
|
7
|
+
version = "1.3.4"
|
|
8
8
|
description = "Render deterministic local Git context for any executor"
|
|
9
9
|
readme = "README.md"
|
|
10
|
-
requires-python = ">=3.12,<3.
|
|
10
|
+
requires-python = ">=3.12,<3.15"
|
|
11
11
|
dependencies = []
|
|
12
12
|
|
|
13
13
|
[project.license]
|
|
@@ -4,11 +4,11 @@ build-backend = "uv_build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "context-loader"
|
|
7
|
-
version = "1.3.
|
|
7
|
+
version = "1.3.4"
|
|
8
8
|
description = "Render deterministic local Git context for any executor"
|
|
9
9
|
license = { file = "LICENSE" }
|
|
10
10
|
readme = "README.md"
|
|
11
|
-
requires-python = ">=3.12,<3.
|
|
11
|
+
requires-python = ">=3.12,<3.15"
|
|
12
12
|
dependencies = []
|
|
13
13
|
|
|
14
14
|
[project.scripts]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|