tether-sdk 0.0.2__tar.gz → 0.0.3__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.
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/PKG-INFO +1 -1
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/docs/release-notes.md +17 -5
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tests/test_tether.py +1 -1
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tether/__init__.py +1 -1
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/.github/workflows/ci.yml +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/.github/workflows/delivery.yml +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/.github/workflows/docs.yml +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/.gitignore +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/AGENTS.md +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/LICENSE +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/README.md +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/docs/architecture.md +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/docs/benchmarks.md +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/docs/extending.md +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/docs/index.md +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/docs/javascripts/mathjax.js +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/docs/reference/context-and-store.md +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/docs/reference/harness.md +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/docs/reference/index.md +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/docs/reference/multiplexer-and-decorator.md +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/docs/reference/providers.md +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/docs/reference/sandbox-and-skills.md +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/docs/reference/tools.md +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/docs/releasing.md +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/docs/tutorial/built-in-tools.md +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/docs/tutorial/cli-and-headless.md +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/docs/tutorial/index.md +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/docs/tutorial/multi-agent.md +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/docs/tutorial/sdk-and-custom-tools.md +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/docs/tutorial/security-and-sandbox.md +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/docs/tutorial/skills.md +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/mkdocs.yml +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/pyproject.toml +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/skills/researcher/SKILL.md +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tests/__init__.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tests/conftest.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tests/providers/__init__.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tests/providers/test_anthropic.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tests/providers/test_base.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tests/providers/test_ollama.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tests/providers/test_openai.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tests/test_cli.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tests/test_context.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tests/test_decorator.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tests/test_harness.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tests/test_integration.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tests/test_multiplexer.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tests/test_sandbox.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tests/test_skills.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tests/test_store.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tests/tools/__init__.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tests/tools/test_agent.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tests/tools/test_bash.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tests/tools/test_done.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tests/tools/test_edit.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tests/tools/test_mem.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tests/tools/test_web.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tether/cli.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tether/context.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tether/decorator.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tether/harness.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tether/multiplexer.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tether/providers/__init__.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tether/providers/anthropic.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tether/providers/base.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tether/providers/ollama.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tether/providers/openai.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tether/sandbox.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tether/skills.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tether/store.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tether/tools/__init__.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tether/tools/agent.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tether/tools/bash.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tether/tools/done.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tether/tools/edit.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tether/tools/mem.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/tether/tools/web.py +0 -0
- {tether_sdk-0.0.2 → tether_sdk-0.0.3}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: tether-sdk
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.3
|
|
4
4
|
Summary: General-purpose, headless-first LLM-Native micro-harness for small language models
|
|
5
5
|
Project-URL: Homepage, https://github.com/igormcsouza/tether
|
|
6
6
|
Project-URL: Repository, https://github.com/igormcsouza/tether
|
|
@@ -1,14 +1,26 @@
|
|
|
1
1
|
# Release Notes
|
|
2
2
|
|
|
3
|
-
## v0.0.
|
|
3
|
+
## v0.0.3 (2026-10-17)
|
|
4
4
|
|
|
5
5
|
### Architectural & Performance Upgrades
|
|
6
|
-
- **Head + Tail L1 Active Observation Elision (`tether/context.py`)**: Oversized active observations (`> 2,400 chars`) are deterministically elided in L1 working memory to their first 900 chars + last 900 chars with a pointer to `mem recall` / `mem search`, preserving full outputs in SQLite FTS5.
|
|
6
|
+
- **Head + Tail L1 Active Observation Elision (`tether/context.py`)**: Oversized active observations (`> 2,400 chars`) are deterministically elided in L1 working memory to their first 900 chars (headers/command summary) + last 900 chars (stack trace/exit code) with a pointer to `mem recall` / `mem search`, preserving full outputs in SQLite FTS5.
|
|
7
7
|
- **Deterministic Loop-Stall Breaker (`tether/harness.py`)**: Consecutive identical `(cmd, stdin)` calls from small 8B/9B models are intercepted before tool execution and answered with a deterministic `[LOOP DETECTED]` recovery nudge.
|
|
8
8
|
- **100% KV-Cache Prefix Immutability Across Pins (`tether/context.py`, `tether/providers/anthropic.py`)**: `[PINNED MEMORY]` is attached to the tail message after window trimming so earlier turn messages remain 100% byte-identical when pins change; added Anthropic ephemeral `cache_control` breakpoints.
|
|
9
|
-
- **Persistent Connection Pooling & Thread-Local SQLite WAL (`tether/providers/*`, `tether/store.py`)**: Reuses persistent `httpx.AsyncClient` instances across turns and caches thread-local SQLite WAL connections with
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
- **Persistent Connection Pooling & Thread-Local SQLite WAL (`tether/providers/*`, `tether/store.py`)**: Reuses persistent `httpx.AsyncClient` instances across turns and caches thread-local SQLite WAL connections with `PRAGMA temp_store=MEMORY;` and 128 MB `mmap_size`.
|
|
10
|
+
|
|
11
|
+
### Packaging, Documentation & CI
|
|
12
|
+
- **PyPI Trusted Publishing (`tether-sdk`)**: Published on PyPI as `tether-sdk` (`pip install tether-sdk` / `uv add tether-sdk`) with automated OIDC delivery (`.github/workflows/delivery.yml`).
|
|
13
|
+
- **Flattened Package Layout**: Moved `tether/` to the repository root (removing `src/`).
|
|
14
|
+
- **MkDocs Documentation Site**: Added full documentation, tutorials, literature review, and `mkdocstrings` API reference at `https://igormcsouza.github.io/tether/` (`.github/workflows/docs.yml`).
|
|
15
|
+
- **Modular Test Suite & 100% Coverage CI Gate**: Split unit tests into 20 per-module test files under `tests/` and added `.github/workflows/ci.yml` enforcing `ruff`, `mypy`, `mkdocs build --strict`, and `pytest --cov=tether --cov-fail-under=100`.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## v0.0.2 (2026-10-17)
|
|
20
|
+
|
|
21
|
+
### SDK Provider Extensibility & Literature Grounding
|
|
22
|
+
- **Custom SDK Provider Registry (`register_provider`)**: Added `register_provider(prefix, factory)` in `tether.providers` so SDK consumers can route `<prefix>/<model>` identifiers through custom gateways, local inference engines, or test transports.
|
|
23
|
+
- **Literature Grounding**: Documented architectural alignment with Maia et al. (2026), Wang et al. (*CodeAct*, ICML 2024), Yang et al. (*SWE-agent*, NeurIPS 2024), and Packer et al. (*MemGPT*, 2023).
|
|
12
24
|
|
|
13
25
|
---
|
|
14
26
|
|
|
@@ -7,6 +7,6 @@ import tether
|
|
|
7
7
|
|
|
8
8
|
def test_version_and_public_exports() -> None:
|
|
9
9
|
"""Verify package __version__ and public SDK symbols."""
|
|
10
|
-
assert tether.__version__ == "0.0.
|
|
10
|
+
assert tether.__version__ == "0.0.3"
|
|
11
11
|
for symbol in tether.__all__:
|
|
12
12
|
assert hasattr(tether, symbol)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|