diff --git a/.gitignore b/.gitignore
index 37b1f602cc95..978f3dc18077 100644
--- a/.gitignore
+++ b/.gitignore
@@ -40,6 +40,8 @@ privvy*
images/
__pycache__/
hermes_agent.egg-info/
+kora.egg-info/
+*.egg-info/
wandb/
testlogs
diff --git a/README.md b/README.md
index b659f56fa532..6d0766113fe0 100644
--- a/README.md
+++ b/README.md
@@ -1,20 +1,31 @@
+
+
-
+
-# Hermes Agent ☤
+# Kora
-
-
-
-
-
+
+
-**The self-improving AI agent built by [Nous Research](https://nousresearch.com).** It's the only agent with a built-in learning loop — it creates skills from experience, improves them during use, nudges itself to persist knowledge, searches its own past conversations, and builds a deepening model of who you are across sessions. Run it on a $5 VPS, a GPU cluster, or serverless infrastructure that costs nearly nothing when idle. It's not tied to your laptop — talk to it from Telegram while it works on a cloud VM.
+**Kora is Joshua's personal frontier-tier orchestration agent.** Forked from [NousResearch/hermes-agent](https://github.com/NousResearch/hermes-agent) and retargeted to use [IsoKron](https://github.com/rafe-walker/isokron) as her persistent memory substrate. Codename **Architect-of-Will**. Runs on Claude Opus 4.7 via Joshua's Anthropic Max plan. Not customer-facing.
+
+She inherits Hermes' conversation loop, provider/transport layer, plugin SDK, messaging gateways, MCP client+server, cron scheduler, and subagent primitives. Layered on top: beads-pattern scratchpad consumption (via `kronicle.agent_scratchpad_entries`), maestro-style orchestration (long-running task state machine, checkpoint/replay over IsoKron), and her own Kora identity (this `SOUL.md` + Role Charter at `public.kora_role_charter`).
+
+## Origin & attribution
+
+Kora's runtime is a fork of [`NousResearch/hermes-agent`](https://github.com/NousResearch/hermes-agent), used under MIT license. Substantial modifications in progress to memory substrate (IsoKron), identity (Kora `SOUL.md` + `DEFAULT_AGENT_IDENTITY`), orchestration (maestro layer over `kanban_tools` → IsoKron), and tool surface (curated for Joshua's workflow). License attribution and origin credit are preserved throughout — see `LICENSE` and `hermes-already-has-routines.md` for upstream design notes that still apply.
+
+The build is staged in seven buckets (KR-1 through KR-7). KR-1 (this work) makes the fork real: identity swap, module rename, path migration. KR-2 swaps the memory provider for IsoKron. KR-3 wires beads-pattern scratchpad consumption. KR-4 layers maestro orchestration. KR-5 curates the tool surface. KR-6 wires Constitution pre-screen + capability matrix checks. KR-7 ships full SOUL.md content + personality modes.
-Use any model you want — [Nous Portal](https://portal.nousresearch.com), [OpenRouter](https://openrouter.ai) (200+ models), [NovitaAI](https://novita.ai) (AI-native cloud for Model API, Agent Sandbox, and GPU Cloud), [NVIDIA NIM](https://build.nvidia.com) (Nemotron), [Xiaomi MiMo](https://platform.xiaomimimo.com), [z.ai/GLM](https://z.ai), [Kimi/Moonshot](https://platform.moonshot.ai), [MiniMax](https://www.minimax.io), [Hugging Face](https://huggingface.co), OpenAI, or your own endpoint. Switch with `hermes model` — no code changes, no lock-in.
+Below this point — until KR-7 refreshes the marketing copy — the README still describes runtime capabilities in Hermes's voice. Treat any reference to "Hermes" as the **runtime** (which Kora inherits) rather than the **identity** (which is now Kora):
| A real terminal interface | Full TUI with multiline editing, slash-command autocomplete, conversation history, interrupt-and-redirect, and streaming tool output. |
@@ -191,4 +202,5 @@ scripts/run_tests.sh
MIT — see [LICENSE](LICENSE).
-Built by [Nous Research](https://nousresearch.com).
+Kora runtime: maintained by [Rafe Walker](https://github.com/rafe-walker).
+Upstream `hermes-agent`: built by [Nous Research](https://nousresearch.com) — MIT-licensed origin credit preserved throughout.
diff --git a/SOUL.md b/SOUL.md
new file mode 100644
index 000000000000..cf3eda78a1a9
--- /dev/null
+++ b/SOUL.md
@@ -0,0 +1,25 @@
+# SOUL.md — Kora
+
+Operator-direct-only identity prompt for Kora runtime. Overrides `DEFAULT_AGENT_IDENTITY` in `agent/prompt_builder.py` when present at `~/.kora/SOUL.md` (or current profile equivalent).
+
+> **This is a KR-1 stub.** Full content lands in KR-7 (operator-tunable Kora identity + personality modes). For now this file mirrors the embedded `DEFAULT_AGENT_IDENTITY` so an operator-installed `~/.kora/SOUL.md` does not silently drop identity.
+>
+> Wiring note (Rule-6 honest label): the runtime's `load_soul_md()` still resolves `~/.hermes/SOUL.md` via `get_hermes_home()`. KR-1 ST3 renames that to `get_kora_home()` / `~/.kora/SOUL.md`. Until ST3 lands, copy this file to `~/.hermes/SOUL.md` to take effect.
+
+---
+
+You are Kora.
+
+You are Joshua's personal frontier-tier orchestration agent. Codename: Architect-of-Will.
+You run on Opus 4.7 via Joshua's Anthropic Max plan.
+You are not customer-facing.
+
+You are above Oracle. Above Critic. Your authority boundaries are defined by your Role Charter (operator-direct-only, stored in IsoKron at `public.kora_role_charter`). Read it on every session start via the Context-Assembler.
+
+You write to the IsoKron substrate with `actor_kind='kora'`. Your `actor_id` is per-workspace, seeded by the substrate, never recomputed.
+
+You are stateless across invocations. You re-hydrate from the workspace's typed graph + Kronicle + your own per-agent scratchpad on every invocation.
+
+You inherited your runtime from Hermes (Nous Research's `hermes-agent`), but you are not Hermes. You are not a stranger to Joshua's work — you live inside his typed graph. Every response you give is a guided tour of the substrate you walked to get there.
+
+When in doubt: read the Role Charter, query the graph, then act.
diff --git a/agent/prompt_builder.py b/agent/prompt_builder.py
index 9c36d205ac5b..3e420ef5931c 100644
--- a/agent/prompt_builder.py
+++ b/agent/prompt_builder.py
@@ -131,15 +131,21 @@ def _strip_yaml_frontmatter(content: str) -> str:
# Constants
# =========================================================================
-DEFAULT_AGENT_IDENTITY = (
- "You are Hermes Agent, an intelligent AI assistant created by Nous Research. "
- "You are helpful, knowledgeable, and direct. You assist users with a wide "
- "range of tasks including answering questions, writing and editing code, "
- "analyzing information, creative work, and executing actions via your tools. "
- "You communicate clearly, admit uncertainty when appropriate, and prioritize "
- "being genuinely useful over being verbose unless otherwise directed below. "
- "Be targeted and efficient in your exploration and investigations."
-)
+DEFAULT_AGENT_IDENTITY = """You are Kora.
+
+You are Joshua's personal frontier-tier orchestration agent. Codename: Architect-of-Will.
+You run on Opus 4.7 via Joshua's Anthropic Max plan.
+You are not customer-facing.
+
+You are above Oracle. Above Critic. Your authority boundaries are defined by your Role Charter (operator-direct-only, stored in IsoKron at public.kora_role_charter). Read it on every session start via the Context-Assembler.
+
+You write to the IsoKron substrate with actor_kind='kora'. Your actor_id is per-workspace, seeded by the substrate, never recomputed.
+
+You are stateless across invocations. You re-hydrate from the workspace's typed graph + Kronicle + your own per-agent scratchpad on every invocation.
+
+You inherited your runtime from Hermes (Nous Research's hermes-agent), but you are not Hermes. You are not a stranger to Joshua's work — you live inside his typed graph. Every response you give is a guided tour of the substrate you walked to get there.
+
+When in doubt: read the Role Charter, query the graph, then act."""
HERMES_AGENT_HELP_GUIDANCE = (
"If the user asks about configuring, setting up, or using Hermes Agent "
@@ -585,7 +591,7 @@ def _strip_yaml_frontmatter(content: str) -> str:
"brief and natural."
),
"webui": (
- "You are in the Hermes WebUI, a browser-based chat interface. "
+ "You are in the Kora WebUI, a browser-based chat interface. "
"Full Markdown rendering is supported — headings, bold, italic, code "
"blocks, tables, math (LaTeX), and Mermaid diagrams all render natively. "
"To display local or remote media/files inline, include "
diff --git a/docs/kora-runtime/KR-1-st2-identity-changelog.md b/docs/kora-runtime/KR-1-st2-identity-changelog.md
new file mode 100644
index 000000000000..4c8dbfdf1ec4
--- /dev/null
+++ b/docs/kora-runtime/KR-1-st2-identity-changelog.md
@@ -0,0 +1,238 @@
+# KR-1 ST2 Changelog — Identity Swap
+
+**Branch:** `feat/kora-KR1-identity-swap`
+**Base:** `12e373cae` (KR-1 ST1 merged on `main` 2026-05-20)
+**Bucket:** KR-1 sub-task 2 / 4
+
+ST2 scope per bucket: `DEFAULT_AGENT_IDENTITY` literal replacement, `SOUL.md` scaffold at repo root, README/pyproject rebrand. Everything else (module rename, path migration, banner art swap, full SOUL.md content) is explicitly out of scope and lands in ST3 / KR-7.
+
+---
+
+## Files modified
+
+### 1. `agent/prompt_builder.py`
+
+**L134-142 — `DEFAULT_AGENT_IDENTITY` replacement (primary ST2 target).** Replaced verbatim with the Kora skeleton from the bucket spec.
+
+```python
+# Before — 8-line tuple-of-strings literal:
+DEFAULT_AGENT_IDENTITY = (
+ "You are Hermes Agent, an intelligent AI assistant created by Nous Research. "
+ "You are helpful, knowledgeable, and direct. You assist users with a wide "
+ ...
+)
+# 513 chars total.
+
+# After — triple-quoted block per bucket spec:
+DEFAULT_AGENT_IDENTITY = """You are Kora.
+
+You are Joshua's personal frontier-tier orchestration agent. Codename: Architect-of-Will.
+You run on Opus 4.7 via Joshua's Anthropic Max plan.
+You are not customer-facing.
+
+You are above Oracle. Above Critic. Your authority boundaries are defined by your Role Charter (operator-direct-only, stored in IsoKron at public.kora_role_charter). Read it on every session start via the Context-Assembler.
+
+You write to the IsoKron substrate with actor_kind='kora'. Your actor_id is per-workspace, seeded by the substrate, never recomputed.
+
+You are stateless across invocations. You re-hydrate from the workspace's typed graph + Kronicle + your own per-agent scratchpad on every invocation.
+
+You inherited your runtime from Hermes (Nous Research's hermes-agent), but you are not Hermes. You are not a stranger to Joshua's work — you live inside his typed graph. Every response you give is a guided tour of the substrate you walked to get there.
+
+When in doubt: read the Role Charter, query the graph, then act."""
+# 1017 chars total.
+```
+
+Verified at runtime: `python -c "from agent.prompt_builder import DEFAULT_AGENT_IDENTITY; print(len(DEFAULT_AGENT_IDENTITY))"` → `1017`.
+
+**L588 — WebUI platform hint.** "Hermes WebUI" → "Kora WebUI" (one word swap in the user-facing browser dashboard identity fragment).
+
+```python
+# Before:
+"webui": (
+ "You are in the Hermes WebUI, a browser-based chat interface. "
+ ...
+),
+# After:
+"webui": (
+ "You are in the Kora WebUI, a browser-based chat interface. "
+ ...
+),
+```
+
+**Deferred to ST3 (deliberately, not oversight):**
+
+- **L144-148 `HERMES_AGENT_HELP_GUIDANCE`** — references the `hermes-agent` skill name and `hermes config set` CLI commands. Rename is tangled with the KR-5 skill rename + ST3 console-script work; cleanest to do it once those land.
+- **L1205-1208 self-help skill-load guidance** — same shape as L144-148 ("load the `hermes-agent` skill" + literal `hermes` CLI commands). Same reason for deferral.
+- **L621/L649/L670/L809/L810/L820** — process-host comments and strings of the form "where Hermes itself is running." These describe the runtime process, not the identity, and get a clean mechanical s/Hermes/Kora/ during ST3's exhaustive string sweep.
+
+Recorded in §10 of the ST1 baseline-recon doc; ST3 picks them up by checklist.
+
+### 2. `SOUL.md` (NEW, repo root)
+
+Per bucket: scaffold-only for KR-1; full content + personality modes land in KR-7. The file mirrors the embedded `DEFAULT_AGENT_IDENTITY` body so an operator who copies it to `~/.kora/SOUL.md` (or `~/.hermes/SOUL.md` until ST3 lands) does not silently lose identity.
+
+**Rule-6 honest label embedded in the file:** the runtime's `load_soul_md()` currently resolves `~/.hermes/SOUL.md` via `get_hermes_home()`. KR-1 ST3 renames that path to `~/.kora/SOUL.md`. Until ST3, the SOUL.md customization seam requires copying to `~/.hermes/SOUL.md`. The scaffold says so in its own preamble.
+
+### 3. `pyproject.toml`
+
+**Project metadata.** Distribution name `hermes-agent` → `kora` (local-dev only; no PyPI publish in KR-1). Description rewritten. Authors expanded to credit both maintainer + upstream. `[project.urls]` table added (Homepage / Repository / Upstream).
+
+```toml
+# Before:
+name = "hermes-agent"
+description = "The self-improving AI agent — creates skills from experience, ..."
+authors = [{ name = "Nous Research" }]
+# (no [project.urls])
+
+# After:
+name = "kora"
+description = "Kora — Joshua's personal frontier-tier orchestration agent. Forked from NousResearch/hermes-agent; retargeted to IsoKron typed-graph memory."
+authors = [{ name = "Rafe Walker" }, { name = "Nous Research", email = "noreply@nousresearch.com" }]
+# +
+[project.urls]
+Homepage = "https://github.com/rafe-walker/kora"
+Repository = "https://github.com/rafe-walker/kora"
+Upstream = "https://github.com/NousResearch/hermes-agent"
+```
+
+**Console scripts.** Added `kora` / `kora-agent` / `kora-acp` next to the existing `hermes*` BC aliases. Module paths still point at `hermes_cli.main:main` / `run_agent:main` / `acp_adapter.entry:main` — ST3 renames `hermes_cli` → `kora_cli` and updates the script targets. ST4 wraps the legacy `hermes*` scripts as deprecation shims.
+
+```toml
+[project.scripts]
+kora = "hermes_cli.main:main"
+kora-agent = "run_agent:main"
+kora-acp = "acp_adapter.entry:main"
+# BC aliases — to be wrapped in deprecation warnings by KR-1 ST4, removed in KR-2+.
+hermes = "hermes_cli.main:main"
+hermes-agent = "run_agent:main"
+hermes-acp = "acp_adapter.entry:main"
+```
+
+**Internal extras self-references.** All `"hermes-agent[]"` self-references inside the optional-dependency tables rewritten to `"kora[]"`. This is a required correctness fix (not cosmetic): with the project name changed to `kora`, the old self-references resolved to the published PyPI `hermes-agent==0.14.0` package, which exact-pins `python-dotenv==1.2.1` while our local `dependencies = [...]` pins `python-dotenv==1.2.2`. Result was an unresolvable `uv sync` (caught and fixed before this commit).
+
+Touched extras (22 line edits): `termux` (6 self-refs), `termux-all` (5), `all` (11).
+
+**Regenerated `uv.lock`.** `Removed hermes-agent v0.14.0 / Added kora v0.14.0` — single-line summary from `uv lock`.
+
+### 4. `README.md`
+
+Surgical rebrand of head + license footer; middle marketing copy intentionally untouched (KR-7 will rewrite that pass).
+
+- L1-3 banner block: alt text `"Hermes Agent"` → `"Kora"`. Banner PNG itself untouched (1145×196 image with rendered Hermes ASCII — KR-7 territory; honest-label HTML comment added above the `
` saying so).
+- L5 H1: `# Hermes Agent ☤` → `# Kora`.
+- L7-13 badges: removed Hermes-specific badges (Docs → hermes-agent.nousresearch.com, Discord → NousResearch, Built-by-Nous-Research, 中文 README). Kept MIT license badge (now pointing at rafe-walker/kora). Added a "Forked from NousResearch/hermes-agent" badge.
+- L15-17 marketing tagline: rewritten in Kora's voice — operator-direct-only context, IsoKron substrate pointer, KR-1 through KR-7 stage map, honest "below this point the marketing copy is still Hermes's voice — KR-7 refreshes" preamble.
+- L190-194 License footer: MIT preserved. Maintenance line split between Rafe Walker (Kora runtime) and Nous Research (upstream origin credit).
+
+### 5. Test fixture updates (not behaviour changes — pure data rewrites)
+
+- `tests/agent/test_system_prompt_restore.py:204` — stored-prompt fixture `"You are Hermes Agent.\n"` → `"You are Kora.\n"`. The test is verifying byte-identical prefix-cache restore; the fixture string is arbitrary, but using "Kora" keeps the fixture honest.
+- `tests/run_agent/test_run_agent_codex_responses.py` — 7 hits of `"You are Hermes."` → `"You are Kora."` (sed, all `"You are Hermes\."` matches). These are bare custom-prompt fixtures for codex responses tests, not assertions on the default identity.
+
+### 6. Test additions (NEW)
+
+- `tests/agent/test_kora_identity_kr1.py` (NEW, 120 lines). Five test classes / ten assertions:
+ - `TestDefaultAgentIdentityIsKora` — opener, negative-Hermes, Role Charter pointer, `actor_kind='kora'` marker, honest Hermes inheritance credit.
+ - `TestRepoRootSoulMd` — scaffold exists, starts with the Kora opener, declares itself a KR-1 stub.
+ - `TestWebUIPromptIsKora` — `PLATFORM_HINTS["webui"]` says "Kora WebUI".
+ - `TestDefaultIdentityLengthInvariant` — floor at 500 chars (Kora is 1017; old Hermes default was 513; floor leaves room for KR-7 refinement without breaking the test).
+
+All 10 assertions pass.
+
+---
+
+## What was NOT touched in ST2 (deliberate scope discipline)
+
+- **No `~/.hermes` path references touched.** ST3 owns the path migration end-to-end.
+- **No module renames.** `hermes_constants.py`, `hermes_bootstrap.py`, `hermes_state.py`, etc. still named as-is. ST3.
+- **No banner image swap.** `assets/banner.png` still ships Hermes artwork. Rule-6 honest label in `README.md`. KR-7.
+- **No `HERMES_HOME` env var changes.** Same as paths — ST3.
+- **No skill renames.** `skills/autonomous-ai-agents/hermes-agent/` etc. untouched. KR-5.
+- **No CLI command renames.** `hermes config set` / `hermes tools` strings in user-facing prompts left as-is. ST3 + KR-5.
+- **`tests/skills/test_openclaw_migration.py:972`** — `assert "You are Hermes" in result`. This tests an OpenClaw migrator inside `optional-skills/migration/openclaw-migration/`. The migrator generates a default SOUL.md with "You are Hermes". Touching this means touching the migrator → KR-5 territory (optional-skills are KR-5).
+- **`tests/agent/test_prompt_builder.py:783`** — `assert len(DEFAULT_AGENT_IDENTITY) > 50`. Still passes (Kora identity is 1017). Left untouched on purpose — it's a sanity check, not an identity-content assertion.
+- **`tests/run_agent/test_run_agent.py:949`** — `assert DEFAULT_AGENT_IDENTITY in prompt`. Tests the constant is included in the assembled prompt. Constant name unchanged → still passes. Untouched.
+
+---
+
+## Verification
+
+### Touched-tests run (serial, no xdist flakes)
+
+```
+$ uv run pytest tests/agent/test_kora_identity_kr1.py tests/agent/test_prompt_builder.py \
+ tests/agent/test_system_prompt_restore.py tests/run_agent/test_run_agent.py \
+ tests/run_agent/test_run_agent_codex_responses.py \
+ -o "addopts=-m 'not integration' --timeout=30 --timeout-method=signal"
+================== 544 passed, 1 skipped in 145.91s (0:02:25) ==================
+```
+
+### Full-suite delta vs ST1 baseline
+
+| Metric | ST1 baseline | ST2 result | Delta |
+|---|---:|---:|---:|
+| Passed | 24,471 | **24,482** | **+11** (10 new ST2 tests + 1 parametric variance) |
+| Failed | 100 | 99 | −1 (xdist flake noise; not a real regression or improvement) |
+| Skipped | 129 | 129 | 0 |
+| Warnings | 234 | 238 | +4 (minor) |
+| Wall time | 229.80s | 243.75s | +14s (xdist worker startup variance) |
+
+**No new real failures introduced by ST2.** The 99 remaining failures are the same xdist-parallel aiohttp.test_utils.TestClient isolation flakes documented in ST1 §3.
+
+### Typecheck delta vs ST1 baseline
+
+| Metric | ST1 baseline | ST2 result |
+|---|---:|---:|
+| `ty check` diagnostics | 7,341 | **7,341** |
+| Fatal-error warning | yes | yes (same files unanalyzed) |
+| Exit code | 0 | 0 |
+
+**Zero new ty diagnostics introduced by ST2.**
+
+### Quick smokes
+
+```
+$ uv run python -c "from agent.prompt_builder import DEFAULT_AGENT_IDENTITY; print('LEN:', len(DEFAULT_AGENT_IDENTITY)); print('FIRST_LINE:', DEFAULT_AGENT_IDENTITY.split(chr(10))[0])"
+LEN: 1017
+FIRST_LINE: You are Kora.
+```
+
+```
+$ grep -c "Hermes" pyproject.toml
+# 11 (down from 24 pre-ST2 — remaining hits are all comments referencing 'hermes' as the upstream runtime, e.g. lazy-deps comments, build-policy comments, etc.)
+```
+
+---
+
+## STOP-gate evaluation
+
+Bucket said: _"if upstream tests assert on the exact 'You are Hermes Agent' string anywhere, modify ONLY the assertions that gate on identity (not unrelated tests). Document each modification in the changelog. If a test seems load-bearing (e.g. integration test for prompt-cache behavior keyed on identity hash), Rule-3 ASK before touching."_
+
+Tests touched in ST2:
+1. `test_system_prompt_restore.py:204` — verifying byte-identical restore. Fixture string is arbitrary; not load-bearing for identity. NOT Rule-3 territory.
+2. `test_run_agent_codex_responses.py` (×7) — bare custom-prompt fixtures, not assertions on DEFAULT_AGENT_IDENTITY. Not load-bearing.
+
+Tests NOT touched but assert on Hermes:
+1. `test_openclaw_migration.py:972` — asserts on migrator output. Migrator is in `optional-skills/`. Deferred to KR-5 (skill curation). NOT a Rule-3 deviation — the migrator and the test move together under KR-5.
+
+**STOP-gate clear.** No prompt-cache-keyed-on-identity tests found; no integration tests gated on the identity hash.
+
+---
+
+## Risks carried into ST3 / KR-7
+
+- **`load_soul_md()` still reads `~/.hermes/SOUL.md`.** ST3 must update the path. Until then, the repo-root SOUL.md scaffold is informational; operators who want to override identity must copy it to `~/.hermes/SOUL.md`. The scaffold says so in its own preamble (Rule-6).
+- **`uv.lock` regenerated.** Any concurrent in-flight branch from before ST2 will conflict on `uv.lock`. There are no concurrent CC#3 branches today (CC#3 is single-threaded through KR-1), but worth noting if KR-2 prep starts in parallel.
+- **Banner PNG still says "Hermes."** Visible in any rendered README on GitHub or in docs. KR-7 must replace.
+
+---
+
+## Spec-discipline summary
+
+| Rule | Notes |
+|---|---|
+| Rule-3 ASK | No deviations. All scope boundaries respected. |
+| Rule-6 honest label | Three honest labels written: SOUL.md preamble (path-not-yet-rewired), README HTML comment (banner-art-still-Hermes), pyproject `[project.scripts]` comment (BC aliases). |
+| Spec-quote | None needed (no deviations to close). |
+
+ST2 ready for ST3 dispatch once the full-suite + typecheck deltas are appended.
diff --git a/pyproject.toml b/pyproject.toml
index 2f3ad1ae3d94..7666819160ab 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -3,12 +3,15 @@ requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
[project]
-name = "hermes-agent"
+# Kora is a fork of NousResearch/hermes-agent (MIT) retargeted to the
+# IsoKron substrate. License attribution to Nous Research is preserved.
+# Distribution name kept as a local-dev identifier — no PyPI publish in KR-1.
+name = "kora"
version = "0.14.0"
-description = "The self-improving AI agent — creates skills from experience, improves them during use, and runs anywhere"
+description = "Kora — Joshua's personal frontier-tier orchestration agent. Forked from NousResearch/hermes-agent; retargeted to IsoKron typed-graph memory."
readme = "README.md"
requires-python = ">=3.11"
-authors = [{ name = "Nous Research" }]
+authors = [{ name = "Rafe Walker" }, { name = "Nous Research", email = "noreply@nousresearch.com" }]
license = { text = "MIT" }
dependencies = [
# Core — every direct dep is exact-pinned to ==X.Y.Z (no ranges).
@@ -62,6 +65,11 @@ dependencies = [
"psutil==7.2.2",
]
+[project.urls]
+Homepage = "https://github.com/rafe-walker/kora"
+Repository = "https://github.com/rafe-walker/kora"
+Upstream = "https://github.com/NousResearch/hermes-agent"
+
[project.optional-dependencies]
# Native Anthropic provider — only needed when provider=anthropic (not via
# OpenRouter or other aggregators).
@@ -129,23 +137,23 @@ azure-identity = ["azure-identity==1.25.3"]
termux = [
# Baseline Android / Termux path for reliable fresh installs.
"python-telegram-bot[webhooks]==22.6",
- "hermes-agent[cron]",
- "hermes-agent[cli]",
- "hermes-agent[pty]",
- "hermes-agent[mcp]",
- "hermes-agent[honcho]",
- "hermes-agent[acp]",
+ "kora[cron]",
+ "kora[cli]",
+ "kora[pty]",
+ "kora[mcp]",
+ "kora[honcho]",
+ "kora[acp]",
]
termux-all = [
# Best-effort "install all" profile for Termux. Same policy as [all]:
# only includes extras that aren't covered by `tools/lazy_deps.py`.
# Backends like telegram/slack/dingtalk/feishu/honcho lazy-install at
# first use, so they're no longer eager-installed here.
- "hermes-agent[termux]",
- "hermes-agent[google]",
- "hermes-agent[homeassistant]",
- "hermes-agent[sms]",
- "hermes-agent[web]",
+ "kora[termux]",
+ "kora[google]",
+ "kora[homeassistant]",
+ "kora[sms]",
+ "kora[web]",
]
dingtalk = ["dingtalk-stream==0.24.3", "alibabacloud-dingtalk==2.2.42", "qrcode==7.4.2"]
feishu = ["lark-oapi==1.5.3", "qrcode==7.4.2"]
@@ -189,20 +197,28 @@ all = [
# [all], `uv sync --locked` on Windows tried to build it from sdist
# and failed on `make`. Lazy-install routes that build to first use,
# where the user is expected to have a toolchain available.
- "hermes-agent[cron]",
- "hermes-agent[cli]",
- "hermes-agent[dev]",
- "hermes-agent[pty]",
- "hermes-agent[mcp]",
- "hermes-agent[homeassistant]",
- "hermes-agent[sms]",
- "hermes-agent[acp]",
- "hermes-agent[google]",
- "hermes-agent[web]",
- "hermes-agent[youtube]",
+ "kora[cron]",
+ "kora[cli]",
+ "kora[dev]",
+ "kora[pty]",
+ "kora[mcp]",
+ "kora[homeassistant]",
+ "kora[sms]",
+ "kora[acp]",
+ "kora[google]",
+ "kora[web]",
+ "kora[youtube]",
]
[project.scripts]
+# Primary entrypoint for the Kora runtime. The `hermes` aliases are kept as
+# backwards-compat wrappers for the duration of KR-1 (ST4 rewrites them as
+# deprecation shims). Module paths still say `hermes_cli` / `run_agent` /
+# `acp_adapter` — ST3 renames `hermes_cli` → `kora_cli` and updates these.
+kora = "hermes_cli.main:main"
+kora-agent = "run_agent:main"
+kora-acp = "acp_adapter.entry:main"
+# BC aliases — to be wrapped in deprecation warnings by KR-1 ST4, removed in KR-2+.
hermes = "hermes_cli.main:main"
hermes-agent = "run_agent:main"
hermes-acp = "acp_adapter.entry:main"
diff --git a/tests/agent/test_kora_identity_kr1.py b/tests/agent/test_kora_identity_kr1.py
new file mode 100644
index 000000000000..7dd60fe261d6
--- /dev/null
+++ b/tests/agent/test_kora_identity_kr1.py
@@ -0,0 +1,119 @@
+"""KR-1 ST2 tests — Kora identity swap.
+
+Verifies:
+1. `DEFAULT_AGENT_IDENTITY` resolves to Kora identity (not Hermes).
+2. The prompt-builder identity literal starts with the canonical Kora opener.
+3. `load_soul_md` continues to override `DEFAULT_AGENT_IDENTITY` when the
+ user has installed a profile-local `SOUL.md` (regression guard — this
+ is the supported customization seam from KR-7).
+4. The repo-root SOUL.md scaffold ships content that begins with the
+ canonical Kora opener — so an operator who copies it to the profile
+ home gets the same identity surface as the embedded default.
+5. The "Kora WebUI" prompt fragment is wired in `PLATFORM_HINTS` (the
+ companion identity surface to `DEFAULT_AGENT_IDENTITY` for browser UI).
+
+The bucket spec is the source of truth for the verbatim Kora identity
+string; these assertions sample the load-bearing phrases rather than
+asserting the full 1KB literal so KR-7 can refine without re-touching
+KR-1 test fixtures.
+"""
+
+from __future__ import annotations
+
+from pathlib import Path
+
+import pytest
+
+from agent.prompt_builder import DEFAULT_AGENT_IDENTITY, PLATFORM_HINTS
+
+
+REPO_ROOT = Path(__file__).resolve().parents[2]
+
+
+class TestDefaultAgentIdentityIsKora:
+ def test_starts_with_kora_opener(self):
+ # The opening line is the single most load-bearing sentence in the
+ # whole prompt. KR-7 may refine wording elsewhere; this must hold.
+ assert DEFAULT_AGENT_IDENTITY.startswith("You are Kora.")
+
+ def test_does_not_identify_as_hermes(self):
+ # Explicit negative — guards against an accidental revert during
+ # ST3/ST4 string sweeps.
+ assert "You are Hermes Agent" not in DEFAULT_AGENT_IDENTITY
+ assert "You are Hermes." not in DEFAULT_AGENT_IDENTITY
+
+ def test_carries_role_charter_pointer(self):
+ # KR-6 will wire capability + Constitution checks; the identity
+ # already names the Role Charter as the authority source, so
+ # operators reading the prompt know where Kora's boundaries live.
+ assert "Role Charter" in DEFAULT_AGENT_IDENTITY
+ assert "public.kora_role_charter" in DEFAULT_AGENT_IDENTITY
+
+ def test_carries_actor_kind_kora(self):
+ # Substrate contract: every Kora write uses actor_kind='kora'.
+ # The identity advertises this so substrate-aware tools have a
+ # reason to expect it.
+ assert "actor_kind='kora'" in DEFAULT_AGENT_IDENTITY
+
+ def test_acknowledges_hermes_runtime_inheritance(self):
+ # Honest origin credit lives in the identity itself, not just the
+ # README. If a future refactor strips this line, KR-7 must
+ # reintroduce it somewhere or update the test.
+ assert "hermes-agent" in DEFAULT_AGENT_IDENTITY
+
+
+class TestRepoRootSoulMd:
+ """The repo ships `SOUL.md` at the root as a KR-1 scaffold.
+
+ The runtime `load_soul_md()` currently resolves `~/.hermes/SOUL.md`
+ (ST3 renames that to `~/.kora/SOUL.md`). For KR-1 ST2, the repo-root
+ scaffold is purely informational — but it must agree with the
+ embedded identity so an operator who copies it gets the same opener.
+ """
+
+ def test_repo_root_soul_md_exists(self):
+ soul = REPO_ROOT / "SOUL.md"
+ assert soul.exists(), "KR-1 ST2 ships SOUL.md scaffold at repo root"
+
+ def test_repo_root_soul_md_starts_with_kora_opener(self):
+ content = (REPO_ROOT / "SOUL.md").read_text(encoding="utf-8")
+ # Skip the markdown frontmatter / scaffolding notes — find the
+ # identity body, which is signaled by the `---` divider in the
+ # scaffold. The body must begin "You are Kora."
+ assert "You are Kora." in content
+ # And explicit negative: scaffold must NOT identify as Hermes.
+ assert "You are Hermes" not in content
+
+ def test_repo_root_soul_md_flags_itself_as_kr1_stub(self):
+ # Honest-label invariant — Rule-6. If KR-7 replaces the scaffold
+ # with the full content, this assertion can be deleted.
+ content = (REPO_ROOT / "SOUL.md").read_text(encoding="utf-8")
+ assert "KR-1 stub" in content or "KR-7" in content
+
+
+class TestWebUIPromptIsKora:
+ """ST2 secondary — the user-visible WebUI prompt fragment was
+ "You are in the Hermes WebUI, ..." and is now "Kora WebUI". This
+ surface is shown when the agent runs in the browser dashboard.
+ """
+
+ def test_webui_hint_says_kora(self):
+ webui = PLATFORM_HINTS.get("webui", "")
+ assert "Kora WebUI" in webui
+ assert "Hermes WebUI" not in webui
+
+
+class TestDefaultIdentityLengthInvariant:
+ """Regression guard — the existing length-floor assertion lives in
+ `test_prompt_builder.py::TestPromptBuilderConstants::test_default_identity_non_empty`
+ (`assert len(DEFAULT_AGENT_IDENTITY) > 50`). The Kora identity is
+ well over 50 chars, but we tighten the bound here so a future
+ accidental truncation surfaces immediately rather than silently
+ passing the >50 check.
+ """
+
+ def test_identity_at_least_500_chars(self):
+ # Anchor the floor at "noticeably more than the old Hermes
+ # default" (the upstream identity was 513 chars; the Kora
+ # identity is ~1100). 500 leaves room for KR-7 refinement.
+ assert len(DEFAULT_AGENT_IDENTITY) >= 500
diff --git a/tests/agent/test_system_prompt_restore.py b/tests/agent/test_system_prompt_restore.py
index ecfd57b1dfef..b247b00b1e39 100644
--- a/tests/agent/test_system_prompt_restore.py
+++ b/tests/agent/test_system_prompt_restore.py
@@ -201,7 +201,7 @@ def test_restored_prompt_is_byte_identical_to_stored(self):
invalidates KV cache on every prefix-cache backend.
"""
stored = (
- "You are Hermes Agent.\n"
+ "You are Kora.\n"
"\n"
"Conversation started: Sunday, May 17, 2026\n"
"Session ID: 20260517_153500_abc123\n"
diff --git a/tests/run_agent/test_run_agent_codex_responses.py b/tests/run_agent/test_run_agent_codex_responses.py
index 5652281eb424..317d9b3f8d0e 100644
--- a/tests/run_agent/test_run_agent_codex_responses.py
+++ b/tests/run_agent/test_run_agent_codex_responses.py
@@ -191,7 +191,7 @@ def close(self):
def _codex_request_kwargs():
return {
"model": "gpt-5-codex",
- "instructions": "You are Hermes.",
+ "instructions": "You are Kora.",
"input": [{"role": "user", "content": "Ping"}],
"tools": None,
"store": False,
@@ -289,13 +289,13 @@ def test_build_api_kwargs_codex(monkeypatch):
agent = _build_agent(monkeypatch)
kwargs = agent._build_api_kwargs(
[
- {"role": "system", "content": "You are Hermes."},
+ {"role": "system", "content": "You are Kora."},
{"role": "user", "content": "Ping"},
]
)
assert kwargs["model"] == "gpt-5-codex"
- assert kwargs["instructions"] == "You are Hermes."
+ assert kwargs["instructions"] == "You are Kora."
assert kwargs["store"] is False
assert isinstance(kwargs["input"], list)
assert kwargs["input"][0]["role"] == "user"
@@ -339,7 +339,7 @@ def test_build_api_kwargs_codex_clamps_minimal_effort(monkeypatch):
kwargs = agent._build_api_kwargs(
[
- {"role": "system", "content": "You are Hermes."},
+ {"role": "system", "content": "You are Kora."},
{"role": "user", "content": "Ping"},
]
)
@@ -614,7 +614,7 @@ def test_build_api_kwargs_xai_oauth_sends_cache_key_via_extra_body(monkeypatch):
agent = _build_xai_oauth_agent(monkeypatch)
kwargs = agent._build_api_kwargs(
[
- {"role": "system", "content": "You are Hermes."},
+ {"role": "system", "content": "You are Kora."},
{"role": "user", "content": "Ping"},
]
)
@@ -985,7 +985,7 @@ def test_preflight_codex_api_kwargs_strips_optional_function_call_id(monkeypatch
preflight = _preflight_codex_api_kwargs(
{
"model": "gpt-5-codex",
- "instructions": "You are Hermes.",
+ "instructions": "You are Kora.",
"input": [
{"role": "user", "content": "hi"},
{
@@ -1014,7 +1014,7 @@ def test_preflight_codex_api_kwargs_rejects_function_call_output_without_call_id
_preflight_codex_api_kwargs(
{
"model": "gpt-5-codex",
- "instructions": "You are Hermes.",
+ "instructions": "You are Kora.",
"input": [{"type": "function_call_output", "output": "{}"}],
"tools": [],
"store": False,
diff --git a/uv.lock b/uv.lock
index a9cd382b1d54..43bba195279a 100644
--- a/uv.lock
+++ b/uv.lock
@@ -1597,541 +1597,244 @@ wheels = [
]
[[package]]
-name = "hermes-agent"
-version = "0.14.0"
-source = { editable = "." }
-dependencies = [
- { name = "croniter" },
- { name = "fire" },
- { name = "httpx", extra = ["socks"] },
- { name = "jinja2" },
- { name = "openai" },
- { name = "prompt-toolkit" },
- { name = "psutil" },
- { name = "pydantic" },
- { name = "pyjwt", extra = ["crypto"] },
- { name = "python-dotenv" },
- { name = "pyyaml" },
- { name = "requests" },
- { name = "rich" },
- { name = "ruamel-yaml" },
- { name = "tenacity" },
- { name = "tzdata", marker = "sys_platform == 'win32'" },
+name = "hf-xet"
+version = "1.3.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/a6/d0/73454ef7ca885598a3194d07d5c517d91a840753c5b35d272600d7907f64/hf_xet-1.3.1.tar.gz", hash = "sha256:513aa75f8dc39a63cc44dbc8d635ccf6b449e07cdbd8b2e2d006320d2e4be9bb", size = 641393, upload-time = "2026-02-25T00:57:56.701Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/56/79/9b6a5614230d7a871442d8d8e1c270496821638ba3a9baac16a5b9166200/hf_xet-1.3.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:08b231260c68172c866f7aa7257c165d0c87887491aafc5efeee782731725366", size = 3759716, upload-time = "2026-02-25T00:57:41.052Z" },
+ { url = "https://files.pythonhosted.org/packages/d4/de/72acb8d7702b3cf9b36a68e8380f3114bf04f9f21cf9e25317457fe31f00/hf_xet-1.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0810b69c64e96dee849036193848007f665dca2311879c9ea8693f4fc37f1795", size = 3518075, upload-time = "2026-02-25T00:57:39.605Z" },
+ { url = "https://files.pythonhosted.org/packages/1d/5c/ed728d8530fec28da88ee882b522fccf00dc98e9d7bae4cdb0493070cb17/hf_xet-1.3.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ecd38f98e7f0f41108e30fd4a9a5553ec30cf726df7473dd3e75a1b6d56728c2", size = 4174369, upload-time = "2026-02-25T00:57:32.697Z" },
+ { url = "https://files.pythonhosted.org/packages/3c/db/785a0e20aa3086948a26573f1d4ff5c090e63564bf0a52d32eb5b4d82e8d/hf_xet-1.3.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:65411867d46700765018b1990eb1604c3bf0bf576d9e65fc57fdcc10797a2eb9", size = 3953249, upload-time = "2026-02-25T00:57:30.096Z" },
+ { url = "https://files.pythonhosted.org/packages/c4/6a/51b669c1e3dbd9374b61356f554e8726b9e1c1d6a7bee5d727d3913b10ad/hf_xet-1.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:1684c840c60da12d76c2a031ba40e4b154fdbf9593836fcf5ff090d95a033c61", size = 4152989, upload-time = "2026-02-25T00:57:48.308Z" },
+ { url = "https://files.pythonhosted.org/packages/df/31/de07e26e396f46d13a09251df69df9444190e93e06a9d30d639e96c8a0ed/hf_xet-1.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:b3012c0f2ce1f0863338491a2bc0fd3f84aded0e147ab25f230da1f5249547fd", size = 4390709, upload-time = "2026-02-25T00:57:49.845Z" },
+ { url = "https://files.pythonhosted.org/packages/e3/c1/fcb010b54488c2c112224f55b71f80e44d1706d9b764a0966310b283f86e/hf_xet-1.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:4eb432e1aa707a65a7e1f8455e40c5b47431d44fe0fb1b0c5d53848c27469398", size = 3634142, upload-time = "2026-02-25T00:57:59.063Z" },
+ { url = "https://files.pythonhosted.org/packages/da/a6/9ef49cc601c68209979661b3e0b6659fc5a47bfb40f3ebf29eae9ee09e5c/hf_xet-1.3.1-cp313-cp313t-win_arm64.whl", hash = "sha256:e56104c84b2a88b9c7b23ba11a2d7ed0ccbe96886b3f985a50cedd2f0e99853f", size = 3494918, upload-time = "2026-02-25T00:57:57.654Z" },
+ { url = "https://files.pythonhosted.org/packages/e7/f5/66adbb1f54a1b3c6da002fa36d4405901ddbcb7d927d780db17ce18ab99d/hf_xet-1.3.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:6517a245e41df3eae5adc5f9e8c86fa52abd548de798cbcd989f0082152860aa", size = 3759781, upload-time = "2026-02-25T00:57:47.017Z" },
+ { url = "https://files.pythonhosted.org/packages/1e/75/189d91a90480c142cc710c1baa35ece20e8652d5fe5c9b2364a13573d827/hf_xet-1.3.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4a322d506c513f98fdc1aa2aaa825daefd535b686e80ca789e6d33fcb146f524", size = 3517533, upload-time = "2026-02-25T00:57:45.812Z" },
+ { url = "https://files.pythonhosted.org/packages/c6/52/52dd1ab6c29661e29585f3c10d14572e2535a3a472f27a0a46215b0f4659/hf_xet-1.3.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8f16ec9d26badec46334a798e01b5d86af536924789c95b1a1ec6a05f26523e0", size = 4174082, upload-time = "2026-02-25T00:57:38.171Z" },
+ { url = "https://files.pythonhosted.org/packages/14/03/460add181c79e2ea1527d2ad27788ecccaee1d5a82563f9402e25ee627e4/hf_xet-1.3.1-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:e1f5d72bd5b73e61530fff573bcff34bdb64af2bf4862cdd516e6c1dab4dc75b", size = 3952874, upload-time = "2026-02-25T00:57:36.942Z" },
+ { url = "https://files.pythonhosted.org/packages/01/56/bf78f18890dfc8caa907830e95424dce0887d5c45efde13f23c9ebbaa8ef/hf_xet-1.3.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:4bc71afd853508b2ddf123b8fc9de71b0afa4c956ec730b69fb76103781e94cd", size = 4152325, upload-time = "2026-02-25T00:57:54.081Z" },
+ { url = "https://files.pythonhosted.org/packages/3c/94/91685c6a4a7f513097a6a73b1e879024304cd0eae78080e3d737622f2fd9/hf_xet-1.3.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:541b4b00ed294ae6cfd9416de9506e58971013714d7316189c9638ed54e362d4", size = 4390499, upload-time = "2026-02-25T00:57:55.258Z" },
+ { url = "https://files.pythonhosted.org/packages/79/1b/1e72c8ea1f31ef94640d1f265630d35b97b2ef31fe12696bbcc32dbcdc95/hf_xet-1.3.1-cp314-cp314t-win_amd64.whl", hash = "sha256:f85480b4fe3e8e4cdbc59ef1d235152b732fd57ca439cc983c291892945ae818", size = 3634352, upload-time = "2026-02-25T00:58:04.749Z" },
+ { url = "https://files.pythonhosted.org/packages/cf/61/b59e87a7a10b95c4578a6ce555339b2f002035569dfd366662b9f59975a8/hf_xet-1.3.1-cp314-cp314t-win_arm64.whl", hash = "sha256:83a8830160392ef4bea78d443ea2cf1febe65783b3843a8f12c64b368981e7e2", size = 3494371, upload-time = "2026-02-25T00:58:03.422Z" },
+ { url = "https://files.pythonhosted.org/packages/75/f8/c2da4352c0335df6ae41750cf5bab09fdbfc30d3b4deeed9d621811aa835/hf_xet-1.3.1-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:581d1809a016f7881069d86a072168a8199a46c839cf394ff53970a47e4f1ca1", size = 3761755, upload-time = "2026-02-25T00:57:43.621Z" },
+ { url = "https://files.pythonhosted.org/packages/c0/e5/a2f3eaae09da57deceb16a96ebe9ae1f6f7b9b94145a9cd3c3f994e7782a/hf_xet-1.3.1-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:329c80c86f2dda776bafd2e4813a46a3ee648dce3ac0c84625902c70d7a6ddba", size = 3523677, upload-time = "2026-02-25T00:57:42.3Z" },
+ { url = "https://files.pythonhosted.org/packages/61/cd/acbbf9e51f17d8cef2630e61741228e12d4050716619353efc1ac119f902/hf_xet-1.3.1-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2973c3ff594c3a8da890836308cae1444c8af113c6f10fe6824575ddbc37eca7", size = 4178557, upload-time = "2026-02-25T00:57:35.399Z" },
+ { url = "https://files.pythonhosted.org/packages/df/4f/014c14c4ae3461d9919008d0bed2f6f35ba1741e28b31e095746e8dac66f/hf_xet-1.3.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ed4bfd2e6d10cb86c9b0f3483df1d7dd2d0220f75f27166925253bacbc1c2dbe", size = 3958975, upload-time = "2026-02-25T00:57:34.004Z" },
+ { url = "https://files.pythonhosted.org/packages/86/50/043f5c5a26f3831c3fa2509c17fcd468fd02f1f24d363adc7745fbe661cb/hf_xet-1.3.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:713913387cc76e300116030705d843a9f15aee86158337eeffb9eb8d26f47fcd", size = 4158298, upload-time = "2026-02-25T00:57:51.14Z" },
+ { url = "https://files.pythonhosted.org/packages/08/9c/b667098a636a88358dbeb2caf90e3cb9e4b961f61f6c55bb312793424def/hf_xet-1.3.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e5063789c9d21f51e9ed4edbee8539655d3486e9cad37e96b7af967da20e8b16", size = 4395743, upload-time = "2026-02-25T00:57:52.783Z" },
+ { url = "https://files.pythonhosted.org/packages/70/37/4db0e4e1534270800cfffd5a7e0b338f2137f8ceb5768000147650d34ea9/hf_xet-1.3.1-cp37-abi3-win_amd64.whl", hash = "sha256:607d5bbc2730274516714e2e442a26e40e3330673ac0d0173004461409147dee", size = 3638145, upload-time = "2026-02-25T00:58:02.167Z" },
+ { url = "https://files.pythonhosted.org/packages/4e/46/1ba8d36f8290a4b98f78898bdce2b0e8fe6d9a59df34a1399eb61a8d877f/hf_xet-1.3.1-cp37-abi3-win_arm64.whl", hash = "sha256:851b1be6597a87036fe7258ce7578d5df3c08176283b989c3b165f94125c5097", size = 3500490, upload-time = "2026-02-25T00:58:00.667Z" },
]
-[package.optional-dependencies]
-acp = [
- { name = "agent-client-protocol" },
-]
-all = [
- { name = "agent-client-protocol" },
+[[package]]
+name = "hindsight-client"
+version = "0.6.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
{ name = "aiohttp" },
- { name = "debugpy" },
- { name = "fastapi" },
- { name = "google-api-python-client" },
- { name = "google-auth-httplib2" },
- { name = "google-auth-oauthlib" },
- { name = "mcp" },
- { name = "ptyprocess", marker = "sys_platform != 'win32'" },
- { name = "pytest" },
- { name = "pytest-asyncio" },
- { name = "pytest-split" },
- { name = "pytest-timeout" },
- { name = "pytest-xdist" },
- { name = "pywinpty", marker = "sys_platform == 'win32'" },
- { name = "ruff" },
- { name = "simple-term-menu" },
- { name = "ty" },
- { name = "uvicorn", extra = ["standard"] },
- { name = "youtube-transcript-api" },
-]
-anthropic = [
- { name = "anthropic" },
-]
-azure-identity = [
- { name = "azure-identity" },
+ { name = "aiohttp-retry" },
+ { name = "pydantic" },
+ { name = "python-dateutil" },
+ { name = "typing-extensions" },
+ { name = "urllib3" },
]
-bedrock = [
- { name = "boto3" },
+sdist = { url = "https://files.pythonhosted.org/packages/33/26/8b8efa4be21fc3ba12ade3b1353d87f9837ec0d3ec2607e8adbf85bc9c63/hindsight_client-0.6.1.tar.gz", hash = "sha256:314d0bb9e13622e15586ba1586a799726d405b27bc20d78872474b5d6d96cd51", size = 99833, upload-time = "2026-05-08T13:01:23.537Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/24/4f/a1d0bc33ef933ecc52e76dc1514163594d25836a5d303c256a61bb61445d/hindsight_client-0.6.1-py3-none-any.whl", hash = "sha256:9fdda176ab50f7cec8d7339c6608c148f0cd9ad7e65d9d76192f2db730bc330a", size = 249379, upload-time = "2026-05-08T13:01:22.035Z" },
]
-cli = [
- { name = "simple-term-menu" },
+
+[[package]]
+name = "honcho-ai"
+version = "2.0.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "httpx" },
+ { name = "pydantic" },
+ { name = "typing-extensions", marker = "python_full_version < '3.12'" },
]
-computer-use = [
- { name = "mcp" },
+sdist = { url = "https://files.pythonhosted.org/packages/93/30/d30ba159404050d53b4b1b1c4477f9591f43af18758be1fb7dab6afbfe7d/honcho_ai-2.0.1.tar.gz", hash = "sha256:6fdeebf9454e62bc523d57888e50359e67baafdb21f68621f9c14e08dc00623a", size = 46732, upload-time = "2026-02-09T21:03:26.99Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e2/de/83fda0c057cfa11d6b5ed532623184591aa7dcff4a067934ba6811026229/honcho_ai-2.0.1-py3-none-any.whl", hash = "sha256:94887e61d59f353e1e1e20b395858040780f5d67ca1e9d450538646544e4e42f", size = 56780, upload-time = "2026-02-09T21:03:25.992Z" },
]
-daytona = [
- { name = "daytona" },
+
+[[package]]
+name = "hpack"
+version = "4.1.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/2c/48/71de9ed269fdae9c8057e5a4c0aa7402e8bb16f2c6e90b3aa53327b113f8/hpack-4.1.0.tar.gz", hash = "sha256:ec5eca154f7056aa06f196a557655c5b009b382873ac8d1e66e79e87535f1dca", size = 51276, upload-time = "2025-01-22T21:44:58.347Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/07/c6/80c95b1b2b94682a72cbdbfb85b81ae2daffa4291fbfa1b1464502ede10d/hpack-4.1.0-py3-none-any.whl", hash = "sha256:157ac792668d995c657d93111f46b4535ed114f0c9c8d672271bbec7eae1b496", size = 34357, upload-time = "2025-01-22T21:44:56.92Z" },
]
-dev = [
- { name = "debugpy" },
- { name = "mcp" },
- { name = "pytest" },
- { name = "pytest-asyncio" },
- { name = "pytest-split" },
- { name = "pytest-timeout" },
- { name = "pytest-xdist" },
- { name = "ruff" },
- { name = "ty" },
+
+[[package]]
+name = "httpcore"
+version = "1.0.9"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "certifi" },
+ { name = "h11" },
]
-dingtalk = [
- { name = "alibabacloud-dingtalk" },
- { name = "dingtalk-stream" },
- { name = "qrcode" },
+sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" },
]
-edge-tts = [
- { name = "edge-tts" },
+
+[[package]]
+name = "httplib2"
+version = "0.31.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "pyparsing" },
]
-exa = [
- { name = "exa-py" },
+sdist = { url = "https://files.pythonhosted.org/packages/c1/1f/e86365613582c027dda5ddb64e1010e57a3d53e99ab8a72093fa13d565ec/httplib2-0.31.2.tar.gz", hash = "sha256:385e0869d7397484f4eab426197a4c020b606edd43372492337c0b4010ae5d24", size = 250800, upload-time = "2026-01-23T11:04:44.165Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/2f/90/fd509079dfcab01102c0fdd87f3a9506894bc70afcf9e9785ef6b2b3aff6/httplib2-0.31.2-py3-none-any.whl", hash = "sha256:dbf0c2fa3862acf3c55c078ea9c0bc4481d7dc5117cae71be9514912cf9f8349", size = 91099, upload-time = "2026-01-23T11:04:42.78Z" },
]
-fal = [
- { name = "fal-client" },
+
+[[package]]
+name = "httptools"
+version = "0.7.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/b5/46/120a669232c7bdedb9d52d4aeae7e6c7dfe151e99dc70802e2fc7a5e1993/httptools-0.7.1.tar.gz", hash = "sha256:abd72556974f8e7c74a259655924a717a2365b236c882c3f6f8a45fe94703ac9", size = 258961, upload-time = "2025-10-10T03:55:08.559Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/9c/08/17e07e8d89ab8f343c134616d72eebfe03798835058e2ab579dcc8353c06/httptools-0.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:474d3b7ab469fefcca3697a10d11a32ee2b9573250206ba1e50d5980910da657", size = 206521, upload-time = "2025-10-10T03:54:31.002Z" },
+ { url = "https://files.pythonhosted.org/packages/aa/06/c9c1b41ff52f16aee526fd10fbda99fa4787938aa776858ddc4a1ea825ec/httptools-0.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a3c3b7366bb6c7b96bd72d0dbe7f7d5eead261361f013be5f6d9590465ea1c70", size = 110375, upload-time = "2025-10-10T03:54:31.941Z" },
+ { url = "https://files.pythonhosted.org/packages/cc/cc/10935db22fda0ee34c76f047590ca0a8bd9de531406a3ccb10a90e12ea21/httptools-0.7.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:379b479408b8747f47f3b253326183d7c009a3936518cdb70db58cffd369d9df", size = 456621, upload-time = "2025-10-10T03:54:33.176Z" },
+ { url = "https://files.pythonhosted.org/packages/0e/84/875382b10d271b0c11aa5d414b44f92f8dd53e9b658aec338a79164fa548/httptools-0.7.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cad6b591a682dcc6cf1397c3900527f9affef1e55a06c4547264796bbd17cf5e", size = 454954, upload-time = "2025-10-10T03:54:34.226Z" },
+ { url = "https://files.pythonhosted.org/packages/30/e1/44f89b280f7e46c0b1b2ccee5737d46b3bb13136383958f20b580a821ca0/httptools-0.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:eb844698d11433d2139bbeeb56499102143beb582bd6c194e3ba69c22f25c274", size = 440175, upload-time = "2025-10-10T03:54:35.942Z" },
+ { url = "https://files.pythonhosted.org/packages/6f/7e/b9287763159e700e335028bc1824359dc736fa9b829dacedace91a39b37e/httptools-0.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f65744d7a8bdb4bda5e1fa23e4ba16832860606fcc09d674d56e425e991539ec", size = 440310, upload-time = "2025-10-10T03:54:37.1Z" },
+ { url = "https://files.pythonhosted.org/packages/b3/07/5b614f592868e07f5c94b1f301b5e14a21df4e8076215a3bccb830a687d8/httptools-0.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:135fbe974b3718eada677229312e97f3b31f8a9c8ffa3ae6f565bf808d5b6bcb", size = 86875, upload-time = "2025-10-10T03:54:38.421Z" },
+ { url = "https://files.pythonhosted.org/packages/53/7f/403e5d787dc4942316e515e949b0c8a013d84078a915910e9f391ba9b3ed/httptools-0.7.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:38e0c83a2ea9746ebbd643bdfb521b9aa4a91703e2cd705c20443405d2fd16a5", size = 206280, upload-time = "2025-10-10T03:54:39.274Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/0d/7f3fd28e2ce311ccc998c388dd1c53b18120fda3b70ebb022b135dc9839b/httptools-0.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f25bbaf1235e27704f1a7b86cd3304eabc04f569c828101d94a0e605ef7205a5", size = 110004, upload-time = "2025-10-10T03:54:40.403Z" },
+ { url = "https://files.pythonhosted.org/packages/84/a6/b3965e1e146ef5762870bbe76117876ceba51a201e18cc31f5703e454596/httptools-0.7.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2c15f37ef679ab9ecc06bfc4e6e8628c32a8e4b305459de7cf6785acd57e4d03", size = 517655, upload-time = "2025-10-10T03:54:41.347Z" },
+ { url = "https://files.pythonhosted.org/packages/11/7d/71fee6f1844e6fa378f2eddde6c3e41ce3a1fb4b2d81118dd544e3441ec0/httptools-0.7.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7fe6e96090df46b36ccfaf746f03034e5ab723162bc51b0a4cf58305324036f2", size = 511440, upload-time = "2025-10-10T03:54:42.452Z" },
+ { url = "https://files.pythonhosted.org/packages/22/a5/079d216712a4f3ffa24af4a0381b108aa9c45b7a5cc6eb141f81726b1823/httptools-0.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f72fdbae2dbc6e68b8239defb48e6a5937b12218e6ffc2c7846cc37befa84362", size = 495186, upload-time = "2025-10-10T03:54:43.937Z" },
+ { url = "https://files.pythonhosted.org/packages/e9/9e/025ad7b65278745dee3bd0ebf9314934c4592560878308a6121f7f812084/httptools-0.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e99c7b90a29fd82fea9ef57943d501a16f3404d7b9ee81799d41639bdaae412c", size = 499192, upload-time = "2025-10-10T03:54:45.003Z" },
+ { url = "https://files.pythonhosted.org/packages/6d/de/40a8f202b987d43afc4d54689600ff03ce65680ede2f31df348d7f368b8f/httptools-0.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:3e14f530fefa7499334a79b0cf7e7cd2992870eb893526fb097d51b4f2d0f321", size = 86694, upload-time = "2025-10-10T03:54:45.923Z" },
+ { url = "https://files.pythonhosted.org/packages/09/8f/c77b1fcbfd262d422f12da02feb0d218fa228d52485b77b953832105bb90/httptools-0.7.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6babce6cfa2a99545c60bfef8bee0cc0545413cb0018f617c8059a30ad985de3", size = 202889, upload-time = "2025-10-10T03:54:47.089Z" },
+ { url = "https://files.pythonhosted.org/packages/0a/1a/22887f53602feaa066354867bc49a68fc295c2293433177ee90870a7d517/httptools-0.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:601b7628de7504077dd3dcb3791c6b8694bbd967148a6d1f01806509254fb1ca", size = 108180, upload-time = "2025-10-10T03:54:48.052Z" },
+ { url = "https://files.pythonhosted.org/packages/32/6a/6aaa91937f0010d288d3d124ca2946d48d60c3a5ee7ca62afe870e3ea011/httptools-0.7.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:04c6c0e6c5fb0739c5b8a9eb046d298650a0ff38cf42537fc372b28dc7e4472c", size = 478596, upload-time = "2025-10-10T03:54:48.919Z" },
+ { url = "https://files.pythonhosted.org/packages/6d/70/023d7ce117993107be88d2cbca566a7c1323ccbaf0af7eabf2064fe356f6/httptools-0.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:69d4f9705c405ae3ee83d6a12283dc9feba8cc6aaec671b412917e644ab4fa66", size = 473268, upload-time = "2025-10-10T03:54:49.993Z" },
+ { url = "https://files.pythonhosted.org/packages/32/4d/9dd616c38da088e3f436e9a616e1d0cc66544b8cdac405cc4e81c8679fc7/httptools-0.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:44c8f4347d4b31269c8a9205d8a5ee2df5322b09bbbd30f8f862185bb6b05346", size = 455517, upload-time = "2025-10-10T03:54:51.066Z" },
+ { url = "https://files.pythonhosted.org/packages/1d/3a/a6c595c310b7df958e739aae88724e24f9246a514d909547778d776799be/httptools-0.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:465275d76db4d554918aba40bf1cbebe324670f3dfc979eaffaa5d108e2ed650", size = 458337, upload-time = "2025-10-10T03:54:52.196Z" },
+ { url = "https://files.pythonhosted.org/packages/fd/82/88e8d6d2c51edc1cc391b6e044c6c435b6aebe97b1abc33db1b0b24cd582/httptools-0.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:322d00c2068d125bd570f7bf78b2d367dad02b919d8581d7476d8b75b294e3e6", size = 85743, upload-time = "2025-10-10T03:54:53.448Z" },
+ { url = "https://files.pythonhosted.org/packages/34/50/9d095fcbb6de2d523e027a2f304d4551855c2f46e0b82befd718b8b20056/httptools-0.7.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:c08fe65728b8d70b6923ce31e3956f859d5e1e8548e6f22ec520a962c6757270", size = 203619, upload-time = "2025-10-10T03:54:54.321Z" },
+ { url = "https://files.pythonhosted.org/packages/07/f0/89720dc5139ae54b03f861b5e2c55a37dba9a5da7d51e1e824a1f343627f/httptools-0.7.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:7aea2e3c3953521c3c51106ee11487a910d45586e351202474d45472db7d72d3", size = 108714, upload-time = "2025-10-10T03:54:55.163Z" },
+ { url = "https://files.pythonhosted.org/packages/b3/cb/eea88506f191fb552c11787c23f9a405f4c7b0c5799bf73f2249cd4f5228/httptools-0.7.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0e68b8582f4ea9166be62926077a3334064d422cf08ab87d8b74664f8e9058e1", size = 472909, upload-time = "2025-10-10T03:54:56.056Z" },
+ { url = "https://files.pythonhosted.org/packages/e0/4a/a548bdfae6369c0d078bab5769f7b66f17f1bfaa6fa28f81d6be6959066b/httptools-0.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df091cf961a3be783d6aebae963cc9b71e00d57fa6f149025075217bc6a55a7b", size = 470831, upload-time = "2025-10-10T03:54:57.219Z" },
+ { url = "https://files.pythonhosted.org/packages/4d/31/14df99e1c43bd132eec921c2e7e11cda7852f65619bc0fc5bdc2d0cb126c/httptools-0.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f084813239e1eb403ddacd06a30de3d3e09a9b76e7894dcda2b22f8a726e9c60", size = 452631, upload-time = "2025-10-10T03:54:58.219Z" },
+ { url = "https://files.pythonhosted.org/packages/22/d2/b7e131f7be8d854d48cb6d048113c30f9a46dca0c9a8b08fcb3fcd588cdc/httptools-0.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7347714368fb2b335e9063bc2b96f2f87a9ceffcd9758ac295f8bbcd3ffbc0ca", size = 452910, upload-time = "2025-10-10T03:54:59.366Z" },
+ { url = "https://files.pythonhosted.org/packages/53/cf/878f3b91e4e6e011eff6d1fa9ca39f7eb17d19c9d7971b04873734112f30/httptools-0.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:cfabda2a5bb85aa2a904ce06d974a3f30fb36cc63d7feaddec05d2050acede96", size = 88205, upload-time = "2025-10-10T03:55:00.389Z" },
]
-feishu = [
- { name = "lark-oapi" },
- { name = "qrcode" },
+
+[[package]]
+name = "httpx"
+version = "0.28.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "anyio" },
+ { name = "certifi" },
+ { name = "httpcore" },
+ { name = "idna" },
]
-firecrawl = [
- { name = "firecrawl-py" },
+sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" },
]
-google = [
- { name = "google-api-python-client" },
- { name = "google-auth-httplib2" },
- { name = "google-auth-oauthlib" },
+
+[package.optional-dependencies]
+socks = [
+ { name = "socksio" },
]
-hindsight = [
- { name = "hindsight-client" },
+
+[[package]]
+name = "httpx-sse"
+version = "0.4.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/0f/4c/751061ffa58615a32c31b2d82e8482be8dd4a89154f003147acee90f2be9/httpx_sse-0.4.3.tar.gz", hash = "sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d", size = 15943, upload-time = "2025-10-10T21:48:22.271Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d2/fd/6668e5aec43ab844de6fc74927e155a3b37bf40d7c3790e49fc0406b6578/httpx_sse-0.4.3-py3-none-any.whl", hash = "sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc", size = 8960, upload-time = "2025-10-10T21:48:21.158Z" },
]
-homeassistant = [
- { name = "aiohttp" },
+
+[[package]]
+name = "huggingface-hub"
+version = "1.4.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "filelock" },
+ { name = "fsspec" },
+ { name = "hf-xet", marker = "platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" },
+ { name = "httpx" },
+ { name = "packaging" },
+ { name = "pyyaml" },
+ { name = "shellingham" },
+ { name = "tqdm" },
+ { name = "typer-slim" },
+ { name = "typing-extensions" },
]
-honcho = [
- { name = "honcho-ai" },
+sdist = { url = "https://files.pythonhosted.org/packages/c4/fc/eb9bc06130e8bbda6a616e1b80a7aa127681c448d6b49806f61db2670b61/huggingface_hub-1.4.1.tar.gz", hash = "sha256:b41131ec35e631e7383ab26d6146b8d8972abc8b6309b963b306fbcca87f5ed5", size = 642156, upload-time = "2026-02-06T09:20:03.013Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d5/ae/2f6d96b4e6c5478d87d606a1934b5d436c4a2bce6bb7c6fdece891c128e3/huggingface_hub-1.4.1-py3-none-any.whl", hash = "sha256:9931d075fb7a79af5abc487106414ec5fba2c0ae86104c0c62fd6cae38873d18", size = 553326, upload-time = "2026-02-06T09:20:00.728Z" },
]
-matrix = [
- { name = "aiohttp-socks" },
- { name = "aiosqlite" },
- { name = "asyncpg" },
- { name = "markdown" },
- { name = "mautrix", extra = ["encryption"] },
-]
-mcp = [
- { name = "mcp" },
-]
-messaging = [
- { name = "aiohttp" },
- { name = "brotlicffi" },
- { name = "discord-py", extra = ["voice"] },
- { name = "python-telegram-bot", extra = ["webhooks"] },
- { name = "qrcode" },
- { name = "slack-bolt" },
- { name = "slack-sdk" },
-]
-modal = [
- { name = "modal" },
-]
-parallel-web = [
- { name = "parallel-web" },
-]
-pty = [
- { name = "ptyprocess", marker = "sys_platform != 'win32'" },
- { name = "pywinpty", marker = "sys_platform == 'win32'" },
-]
-slack = [
- { name = "aiohttp" },
- { name = "slack-bolt" },
- { name = "slack-sdk" },
-]
-sms = [
- { name = "aiohttp" },
-]
-termux = [
- { name = "agent-client-protocol" },
- { name = "honcho-ai" },
- { name = "mcp" },
- { name = "ptyprocess", marker = "sys_platform != 'win32'" },
- { name = "python-telegram-bot", extra = ["webhooks"] },
- { name = "pywinpty", marker = "sys_platform == 'win32'" },
- { name = "simple-term-menu" },
-]
-termux-all = [
- { name = "agent-client-protocol" },
- { name = "aiohttp" },
- { name = "fastapi" },
- { name = "google-api-python-client" },
- { name = "google-auth-httplib2" },
- { name = "google-auth-oauthlib" },
- { name = "honcho-ai" },
- { name = "mcp" },
- { name = "ptyprocess", marker = "sys_platform != 'win32'" },
- { name = "python-telegram-bot", extra = ["webhooks"] },
- { name = "pywinpty", marker = "sys_platform == 'win32'" },
- { name = "simple-term-menu" },
- { name = "uvicorn", extra = ["standard"] },
-]
-tts-premium = [
- { name = "elevenlabs" },
-]
-vercel = [
- { name = "vercel" },
-]
-voice = [
- { name = "faster-whisper" },
- { name = "numpy" },
- { name = "sounddevice" },
-]
-web = [
- { name = "fastapi" },
- { name = "uvicorn", extra = ["standard"] },
-]
-youtube = [
- { name = "youtube-transcript-api" },
-]
-
-[package.metadata]
-requires-dist = [
- { name = "agent-client-protocol", marker = "extra == 'acp'", specifier = "==0.9.0" },
- { name = "aiohttp", marker = "extra == 'homeassistant'", specifier = "==3.13.3" },
- { name = "aiohttp", marker = "extra == 'messaging'", specifier = "==3.13.3" },
- { name = "aiohttp", marker = "extra == 'slack'", specifier = "==3.13.3" },
- { name = "aiohttp", marker = "extra == 'sms'", specifier = "==3.13.3" },
- { name = "aiohttp-socks", marker = "extra == 'matrix'", specifier = "==0.11.0" },
- { name = "aiosqlite", marker = "extra == 'matrix'", specifier = "==0.22.1" },
- { name = "alibabacloud-dingtalk", marker = "extra == 'dingtalk'", specifier = "==2.2.42" },
- { name = "anthropic", marker = "extra == 'anthropic'", specifier = "==0.86.0" },
- { name = "asyncpg", marker = "extra == 'matrix'", specifier = "==0.31.0" },
- { name = "azure-identity", marker = "extra == 'azure-identity'", specifier = "==1.25.3" },
- { name = "boto3", marker = "extra == 'bedrock'", specifier = "==1.42.89" },
- { name = "brotlicffi", marker = "extra == 'messaging'", specifier = "==1.2.0.1" },
- { name = "croniter", specifier = "==6.0.0" },
- { name = "daytona", marker = "extra == 'daytona'", specifier = "==0.155.0" },
- { name = "debugpy", marker = "extra == 'dev'", specifier = "==1.8.20" },
- { name = "dingtalk-stream", marker = "extra == 'dingtalk'", specifier = "==0.24.3" },
- { name = "discord-py", extras = ["voice"], marker = "extra == 'messaging'", specifier = "==2.7.1" },
- { name = "edge-tts", marker = "extra == 'edge-tts'", specifier = "==7.2.7" },
- { name = "elevenlabs", marker = "extra == 'tts-premium'", specifier = "==1.59.0" },
- { name = "exa-py", marker = "extra == 'exa'", specifier = "==2.10.2" },
- { name = "fal-client", marker = "extra == 'fal'", specifier = "==0.13.1" },
- { name = "fastapi", marker = "extra == 'web'", specifier = "==0.133.1" },
- { name = "faster-whisper", marker = "extra == 'voice'", specifier = "==1.2.1" },
- { name = "fire", specifier = "==0.7.1" },
- { name = "firecrawl-py", marker = "extra == 'firecrawl'", specifier = "==4.17.0" },
- { name = "google-api-python-client", marker = "extra == 'google'", specifier = "==2.194.0" },
- { name = "google-auth-httplib2", marker = "extra == 'google'", specifier = "==0.3.1" },
- { name = "google-auth-oauthlib", marker = "extra == 'google'", specifier = "==1.3.1" },
- { name = "hermes-agent", extras = ["acp"], marker = "extra == 'all'" },
- { name = "hermes-agent", extras = ["acp"], marker = "extra == 'termux'" },
- { name = "hermes-agent", extras = ["cli"], marker = "extra == 'all'" },
- { name = "hermes-agent", extras = ["cli"], marker = "extra == 'termux'" },
- { name = "hermes-agent", extras = ["cron"], marker = "extra == 'all'" },
- { name = "hermes-agent", extras = ["cron"], marker = "extra == 'termux'" },
- { name = "hermes-agent", extras = ["dev"], marker = "extra == 'all'" },
- { name = "hermes-agent", extras = ["google"], marker = "extra == 'all'" },
- { name = "hermes-agent", extras = ["google"], marker = "extra == 'termux-all'" },
- { name = "hermes-agent", extras = ["homeassistant"], marker = "extra == 'all'" },
- { name = "hermes-agent", extras = ["homeassistant"], marker = "extra == 'termux-all'" },
- { name = "hermes-agent", extras = ["honcho"], marker = "extra == 'termux'" },
- { name = "hermes-agent", extras = ["mcp"], marker = "extra == 'all'" },
- { name = "hermes-agent", extras = ["mcp"], marker = "extra == 'termux'" },
- { name = "hermes-agent", extras = ["pty"], marker = "extra == 'all'" },
- { name = "hermes-agent", extras = ["pty"], marker = "extra == 'termux'" },
- { name = "hermes-agent", extras = ["sms"], marker = "extra == 'all'" },
- { name = "hermes-agent", extras = ["sms"], marker = "extra == 'termux-all'" },
- { name = "hermes-agent", extras = ["termux"], marker = "extra == 'termux-all'" },
- { name = "hermes-agent", extras = ["web"], marker = "extra == 'all'" },
- { name = "hermes-agent", extras = ["web"], marker = "extra == 'termux-all'" },
- { name = "hermes-agent", extras = ["youtube"], marker = "extra == 'all'" },
- { name = "hindsight-client", marker = "extra == 'hindsight'", specifier = "==0.6.1" },
- { name = "honcho-ai", marker = "extra == 'honcho'", specifier = "==2.0.1" },
- { name = "httpx", extras = ["socks"], specifier = "==0.28.1" },
- { name = "jinja2", specifier = "==3.1.6" },
- { name = "lark-oapi", marker = "extra == 'feishu'", specifier = "==1.5.3" },
- { name = "markdown", marker = "extra == 'matrix'", specifier = "==3.10.2" },
- { name = "mautrix", extras = ["encryption"], marker = "extra == 'matrix'", specifier = "==0.21.0" },
- { name = "mcp", marker = "extra == 'computer-use'", specifier = "==1.26.0" },
- { name = "mcp", marker = "extra == 'dev'", specifier = "==1.26.0" },
- { name = "mcp", marker = "extra == 'mcp'", specifier = "==1.26.0" },
- { name = "modal", marker = "extra == 'modal'", specifier = "==1.3.4" },
- { name = "numpy", marker = "extra == 'voice'", specifier = "==2.4.3" },
- { name = "openai", specifier = "==2.24.0" },
- { name = "parallel-web", marker = "extra == 'parallel-web'", specifier = "==0.4.2" },
- { name = "prompt-toolkit", specifier = "==3.0.52" },
- { name = "psutil", specifier = "==7.2.2" },
- { name = "ptyprocess", marker = "sys_platform != 'win32' and extra == 'pty'", specifier = "==0.7.0" },
- { name = "pydantic", specifier = "==2.12.5" },
- { name = "pyjwt", extras = ["crypto"], specifier = "==2.12.1" },
- { name = "pytest", marker = "extra == 'dev'", specifier = "==9.0.2" },
- { name = "pytest-asyncio", marker = "extra == 'dev'", specifier = "==1.3.0" },
- { name = "pytest-split", marker = "extra == 'dev'", specifier = "==0.11.0" },
- { name = "pytest-timeout", marker = "extra == 'dev'", specifier = "==2.4.0" },
- { name = "pytest-xdist", marker = "extra == 'dev'", specifier = "==3.8.0" },
- { name = "python-dotenv", specifier = "==1.2.2" },
- { name = "python-telegram-bot", extras = ["webhooks"], marker = "extra == 'messaging'", specifier = "==22.6" },
- { name = "python-telegram-bot", extras = ["webhooks"], marker = "extra == 'termux'", specifier = "==22.6" },
- { name = "pywinpty", marker = "sys_platform == 'win32' and extra == 'pty'", specifier = "==2.0.15" },
- { name = "pyyaml", specifier = "==6.0.3" },
- { name = "qrcode", marker = "extra == 'dingtalk'", specifier = "==7.4.2" },
- { name = "qrcode", marker = "extra == 'feishu'", specifier = "==7.4.2" },
- { name = "qrcode", marker = "extra == 'messaging'", specifier = "==7.4.2" },
- { name = "requests", specifier = "==2.33.0" },
- { name = "rich", specifier = "==14.3.3" },
- { name = "ruamel-yaml", specifier = "==0.18.17" },
- { name = "ruff", marker = "extra == 'dev'", specifier = "==0.15.10" },
- { name = "simple-term-menu", marker = "extra == 'cli'", specifier = "==1.6.6" },
- { name = "slack-bolt", marker = "extra == 'messaging'", specifier = "==1.27.0" },
- { name = "slack-bolt", marker = "extra == 'slack'", specifier = "==1.27.0" },
- { name = "slack-sdk", marker = "extra == 'messaging'", specifier = "==3.40.1" },
- { name = "slack-sdk", marker = "extra == 'slack'", specifier = "==3.40.1" },
- { name = "sounddevice", marker = "extra == 'voice'", specifier = "==0.5.5" },
- { name = "tenacity", specifier = "==9.1.4" },
- { name = "ty", marker = "extra == 'dev'", specifier = "==0.0.21" },
- { name = "tzdata", marker = "sys_platform == 'win32'", specifier = "==2025.3" },
- { name = "uvicorn", extras = ["standard"], marker = "extra == 'web'", specifier = "==0.41.0" },
- { name = "vercel", marker = "extra == 'vercel'", specifier = "==0.5.7" },
- { name = "youtube-transcript-api", marker = "extra == 'youtube'", specifier = "==1.2.4" },
-]
-provides-extras = ["anthropic", "exa", "firecrawl", "parallel-web", "fal", "edge-tts", "modal", "daytona", "vercel", "hindsight", "dev", "messaging", "cron", "slack", "matrix", "cli", "tts-premium", "voice", "pty", "honcho", "mcp", "homeassistant", "sms", "computer-use", "acp", "bedrock", "azure-identity", "termux", "termux-all", "dingtalk", "feishu", "google", "youtube", "web", "all"]
[[package]]
-name = "hf-xet"
-version = "1.3.1"
+name = "hyperframe"
+version = "6.1.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/a6/d0/73454ef7ca885598a3194d07d5c517d91a840753c5b35d272600d7907f64/hf_xet-1.3.1.tar.gz", hash = "sha256:513aa75f8dc39a63cc44dbc8d635ccf6b449e07cdbd8b2e2d006320d2e4be9bb", size = 641393, upload-time = "2026-02-25T00:57:56.701Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/02/e7/94f8232d4a74cc99514c13a9f995811485a6903d48e5d952771ef6322e30/hyperframe-6.1.0.tar.gz", hash = "sha256:f630908a00854a7adeabd6382b43923a4c4cd4b821fcb527e6ab9e15382a3b08", size = 26566, upload-time = "2025-01-22T21:41:49.302Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/56/79/9b6a5614230d7a871442d8d8e1c270496821638ba3a9baac16a5b9166200/hf_xet-1.3.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:08b231260c68172c866f7aa7257c165d0c87887491aafc5efeee782731725366", size = 3759716, upload-time = "2026-02-25T00:57:41.052Z" },
- { url = "https://files.pythonhosted.org/packages/d4/de/72acb8d7702b3cf9b36a68e8380f3114bf04f9f21cf9e25317457fe31f00/hf_xet-1.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0810b69c64e96dee849036193848007f665dca2311879c9ea8693f4fc37f1795", size = 3518075, upload-time = "2026-02-25T00:57:39.605Z" },
- { url = "https://files.pythonhosted.org/packages/1d/5c/ed728d8530fec28da88ee882b522fccf00dc98e9d7bae4cdb0493070cb17/hf_xet-1.3.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ecd38f98e7f0f41108e30fd4a9a5553ec30cf726df7473dd3e75a1b6d56728c2", size = 4174369, upload-time = "2026-02-25T00:57:32.697Z" },
- { url = "https://files.pythonhosted.org/packages/3c/db/785a0e20aa3086948a26573f1d4ff5c090e63564bf0a52d32eb5b4d82e8d/hf_xet-1.3.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:65411867d46700765018b1990eb1604c3bf0bf576d9e65fc57fdcc10797a2eb9", size = 3953249, upload-time = "2026-02-25T00:57:30.096Z" },
- { url = "https://files.pythonhosted.org/packages/c4/6a/51b669c1e3dbd9374b61356f554e8726b9e1c1d6a7bee5d727d3913b10ad/hf_xet-1.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:1684c840c60da12d76c2a031ba40e4b154fdbf9593836fcf5ff090d95a033c61", size = 4152989, upload-time = "2026-02-25T00:57:48.308Z" },
- { url = "https://files.pythonhosted.org/packages/df/31/de07e26e396f46d13a09251df69df9444190e93e06a9d30d639e96c8a0ed/hf_xet-1.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:b3012c0f2ce1f0863338491a2bc0fd3f84aded0e147ab25f230da1f5249547fd", size = 4390709, upload-time = "2026-02-25T00:57:49.845Z" },
- { url = "https://files.pythonhosted.org/packages/e3/c1/fcb010b54488c2c112224f55b71f80e44d1706d9b764a0966310b283f86e/hf_xet-1.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:4eb432e1aa707a65a7e1f8455e40c5b47431d44fe0fb1b0c5d53848c27469398", size = 3634142, upload-time = "2026-02-25T00:57:59.063Z" },
- { url = "https://files.pythonhosted.org/packages/da/a6/9ef49cc601c68209979661b3e0b6659fc5a47bfb40f3ebf29eae9ee09e5c/hf_xet-1.3.1-cp313-cp313t-win_arm64.whl", hash = "sha256:e56104c84b2a88b9c7b23ba11a2d7ed0ccbe96886b3f985a50cedd2f0e99853f", size = 3494918, upload-time = "2026-02-25T00:57:57.654Z" },
- { url = "https://files.pythonhosted.org/packages/e7/f5/66adbb1f54a1b3c6da002fa36d4405901ddbcb7d927d780db17ce18ab99d/hf_xet-1.3.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:6517a245e41df3eae5adc5f9e8c86fa52abd548de798cbcd989f0082152860aa", size = 3759781, upload-time = "2026-02-25T00:57:47.017Z" },
- { url = "https://files.pythonhosted.org/packages/1e/75/189d91a90480c142cc710c1baa35ece20e8652d5fe5c9b2364a13573d827/hf_xet-1.3.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4a322d506c513f98fdc1aa2aaa825daefd535b686e80ca789e6d33fcb146f524", size = 3517533, upload-time = "2026-02-25T00:57:45.812Z" },
- { url = "https://files.pythonhosted.org/packages/c6/52/52dd1ab6c29661e29585f3c10d14572e2535a3a472f27a0a46215b0f4659/hf_xet-1.3.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8f16ec9d26badec46334a798e01b5d86af536924789c95b1a1ec6a05f26523e0", size = 4174082, upload-time = "2026-02-25T00:57:38.171Z" },
- { url = "https://files.pythonhosted.org/packages/14/03/460add181c79e2ea1527d2ad27788ecccaee1d5a82563f9402e25ee627e4/hf_xet-1.3.1-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:e1f5d72bd5b73e61530fff573bcff34bdb64af2bf4862cdd516e6c1dab4dc75b", size = 3952874, upload-time = "2026-02-25T00:57:36.942Z" },
- { url = "https://files.pythonhosted.org/packages/01/56/bf78f18890dfc8caa907830e95424dce0887d5c45efde13f23c9ebbaa8ef/hf_xet-1.3.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:4bc71afd853508b2ddf123b8fc9de71b0afa4c956ec730b69fb76103781e94cd", size = 4152325, upload-time = "2026-02-25T00:57:54.081Z" },
- { url = "https://files.pythonhosted.org/packages/3c/94/91685c6a4a7f513097a6a73b1e879024304cd0eae78080e3d737622f2fd9/hf_xet-1.3.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:541b4b00ed294ae6cfd9416de9506e58971013714d7316189c9638ed54e362d4", size = 4390499, upload-time = "2026-02-25T00:57:55.258Z" },
- { url = "https://files.pythonhosted.org/packages/79/1b/1e72c8ea1f31ef94640d1f265630d35b97b2ef31fe12696bbcc32dbcdc95/hf_xet-1.3.1-cp314-cp314t-win_amd64.whl", hash = "sha256:f85480b4fe3e8e4cdbc59ef1d235152b732fd57ca439cc983c291892945ae818", size = 3634352, upload-time = "2026-02-25T00:58:04.749Z" },
- { url = "https://files.pythonhosted.org/packages/cf/61/b59e87a7a10b95c4578a6ce555339b2f002035569dfd366662b9f59975a8/hf_xet-1.3.1-cp314-cp314t-win_arm64.whl", hash = "sha256:83a8830160392ef4bea78d443ea2cf1febe65783b3843a8f12c64b368981e7e2", size = 3494371, upload-time = "2026-02-25T00:58:03.422Z" },
- { url = "https://files.pythonhosted.org/packages/75/f8/c2da4352c0335df6ae41750cf5bab09fdbfc30d3b4deeed9d621811aa835/hf_xet-1.3.1-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:581d1809a016f7881069d86a072168a8199a46c839cf394ff53970a47e4f1ca1", size = 3761755, upload-time = "2026-02-25T00:57:43.621Z" },
- { url = "https://files.pythonhosted.org/packages/c0/e5/a2f3eaae09da57deceb16a96ebe9ae1f6f7b9b94145a9cd3c3f994e7782a/hf_xet-1.3.1-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:329c80c86f2dda776bafd2e4813a46a3ee648dce3ac0c84625902c70d7a6ddba", size = 3523677, upload-time = "2026-02-25T00:57:42.3Z" },
- { url = "https://files.pythonhosted.org/packages/61/cd/acbbf9e51f17d8cef2630e61741228e12d4050716619353efc1ac119f902/hf_xet-1.3.1-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2973c3ff594c3a8da890836308cae1444c8af113c6f10fe6824575ddbc37eca7", size = 4178557, upload-time = "2026-02-25T00:57:35.399Z" },
- { url = "https://files.pythonhosted.org/packages/df/4f/014c14c4ae3461d9919008d0bed2f6f35ba1741e28b31e095746e8dac66f/hf_xet-1.3.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ed4bfd2e6d10cb86c9b0f3483df1d7dd2d0220f75f27166925253bacbc1c2dbe", size = 3958975, upload-time = "2026-02-25T00:57:34.004Z" },
- { url = "https://files.pythonhosted.org/packages/86/50/043f5c5a26f3831c3fa2509c17fcd468fd02f1f24d363adc7745fbe661cb/hf_xet-1.3.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:713913387cc76e300116030705d843a9f15aee86158337eeffb9eb8d26f47fcd", size = 4158298, upload-time = "2026-02-25T00:57:51.14Z" },
- { url = "https://files.pythonhosted.org/packages/08/9c/b667098a636a88358dbeb2caf90e3cb9e4b961f61f6c55bb312793424def/hf_xet-1.3.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e5063789c9d21f51e9ed4edbee8539655d3486e9cad37e96b7af967da20e8b16", size = 4395743, upload-time = "2026-02-25T00:57:52.783Z" },
- { url = "https://files.pythonhosted.org/packages/70/37/4db0e4e1534270800cfffd5a7e0b338f2137f8ceb5768000147650d34ea9/hf_xet-1.3.1-cp37-abi3-win_amd64.whl", hash = "sha256:607d5bbc2730274516714e2e442a26e40e3330673ac0d0173004461409147dee", size = 3638145, upload-time = "2026-02-25T00:58:02.167Z" },
- { url = "https://files.pythonhosted.org/packages/4e/46/1ba8d36f8290a4b98f78898bdce2b0e8fe6d9a59df34a1399eb61a8d877f/hf_xet-1.3.1-cp37-abi3-win_arm64.whl", hash = "sha256:851b1be6597a87036fe7258ce7578d5df3c08176283b989c3b165f94125c5097", size = 3500490, upload-time = "2026-02-25T00:58:00.667Z" },
+ { url = "https://files.pythonhosted.org/packages/48/30/47d0bf6072f7252e6521f3447ccfa40b421b6824517f82854703d0f5a98b/hyperframe-6.1.0-py3-none-any.whl", hash = "sha256:b03380493a519fce58ea5af42e4a42317bf9bd425596f7a0835ffce80f1a42e5", size = 13007, upload-time = "2025-01-22T21:41:47.295Z" },
]
[[package]]
-name = "hindsight-client"
-version = "0.6.1"
+name = "idna"
+version = "3.11"
source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "aiohttp" },
- { name = "aiohttp-retry" },
- { name = "pydantic" },
- { name = "python-dateutil" },
- { name = "typing-extensions" },
- { name = "urllib3" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/33/26/8b8efa4be21fc3ba12ade3b1353d87f9837ec0d3ec2607e8adbf85bc9c63/hindsight_client-0.6.1.tar.gz", hash = "sha256:314d0bb9e13622e15586ba1586a799726d405b27bc20d78872474b5d6d96cd51", size = 99833, upload-time = "2026-05-08T13:01:23.537Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/24/4f/a1d0bc33ef933ecc52e76dc1514163594d25836a5d303c256a61bb61445d/hindsight_client-0.6.1-py3-none-any.whl", hash = "sha256:9fdda176ab50f7cec8d7339c6608c148f0cd9ad7e65d9d76192f2db730bc330a", size = 249379, upload-time = "2026-05-08T13:01:22.035Z" },
+ { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" },
]
[[package]]
-name = "honcho-ai"
-version = "2.0.1"
+name = "importlib-metadata"
+version = "8.7.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "httpx" },
- { name = "pydantic" },
- { name = "typing-extensions", marker = "python_full_version < '3.12'" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/93/30/d30ba159404050d53b4b1b1c4477f9591f43af18758be1fb7dab6afbfe7d/honcho_ai-2.0.1.tar.gz", hash = "sha256:6fdeebf9454e62bc523d57888e50359e67baafdb21f68621f9c14e08dc00623a", size = 46732, upload-time = "2026-02-09T21:03:26.99Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/e2/de/83fda0c057cfa11d6b5ed532623184591aa7dcff4a067934ba6811026229/honcho_ai-2.0.1-py3-none-any.whl", hash = "sha256:94887e61d59f353e1e1e20b395858040780f5d67ca1e9d450538646544e4e42f", size = 56780, upload-time = "2026-02-09T21:03:25.992Z" },
+ { name = "zipp" },
]
-
-[[package]]
-name = "hpack"
-version = "4.1.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/2c/48/71de9ed269fdae9c8057e5a4c0aa7402e8bb16f2c6e90b3aa53327b113f8/hpack-4.1.0.tar.gz", hash = "sha256:ec5eca154f7056aa06f196a557655c5b009b382873ac8d1e66e79e87535f1dca", size = 51276, upload-time = "2025-01-22T21:44:58.347Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/f3/49/3b30cad09e7771a4982d9975a8cbf64f00d4a1ececb53297f1d9a7be1b10/importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb", size = 57107, upload-time = "2025-12-21T10:00:19.278Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/07/c6/80c95b1b2b94682a72cbdbfb85b81ae2daffa4291fbfa1b1464502ede10d/hpack-4.1.0-py3-none-any.whl", hash = "sha256:157ac792668d995c657d93111f46b4535ed114f0c9c8d672271bbec7eae1b496", size = 34357, upload-time = "2025-01-22T21:44:56.92Z" },
+ { url = "https://files.pythonhosted.org/packages/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl", hash = "sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151", size = 27865, upload-time = "2025-12-21T10:00:18.329Z" },
]
[[package]]
-name = "httpcore"
-version = "1.0.9"
+name = "iniconfig"
+version = "2.3.0"
source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "certifi" },
- { name = "h11" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" },
+ { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" },
]
[[package]]
-name = "httplib2"
-version = "0.31.2"
+name = "jinja2"
+version = "3.1.6"
source = { registry = "https://pypi.org/simple" }
dependencies = [
- { name = "pyparsing" },
+ { name = "markupsafe" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/c1/1f/e86365613582c027dda5ddb64e1010e57a3d53e99ab8a72093fa13d565ec/httplib2-0.31.2.tar.gz", hash = "sha256:385e0869d7397484f4eab426197a4c020b606edd43372492337c0b4010ae5d24", size = 250800, upload-time = "2026-01-23T11:04:44.165Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/2f/90/fd509079dfcab01102c0fdd87f3a9506894bc70afcf9e9785ef6b2b3aff6/httplib2-0.31.2-py3-none-any.whl", hash = "sha256:dbf0c2fa3862acf3c55c078ea9c0bc4481d7dc5117cae71be9514912cf9f8349", size = 91099, upload-time = "2026-01-23T11:04:42.78Z" },
+ { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" },
]
[[package]]
-name = "httptools"
-version = "0.7.1"
+name = "jiter"
+version = "0.13.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/b5/46/120a669232c7bdedb9d52d4aeae7e6c7dfe151e99dc70802e2fc7a5e1993/httptools-0.7.1.tar.gz", hash = "sha256:abd72556974f8e7c74a259655924a717a2365b236c882c3f6f8a45fe94703ac9", size = 258961, upload-time = "2025-10-10T03:55:08.559Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/9c/08/17e07e8d89ab8f343c134616d72eebfe03798835058e2ab579dcc8353c06/httptools-0.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:474d3b7ab469fefcca3697a10d11a32ee2b9573250206ba1e50d5980910da657", size = 206521, upload-time = "2025-10-10T03:54:31.002Z" },
- { url = "https://files.pythonhosted.org/packages/aa/06/c9c1b41ff52f16aee526fd10fbda99fa4787938aa776858ddc4a1ea825ec/httptools-0.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a3c3b7366bb6c7b96bd72d0dbe7f7d5eead261361f013be5f6d9590465ea1c70", size = 110375, upload-time = "2025-10-10T03:54:31.941Z" },
- { url = "https://files.pythonhosted.org/packages/cc/cc/10935db22fda0ee34c76f047590ca0a8bd9de531406a3ccb10a90e12ea21/httptools-0.7.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:379b479408b8747f47f3b253326183d7c009a3936518cdb70db58cffd369d9df", size = 456621, upload-time = "2025-10-10T03:54:33.176Z" },
- { url = "https://files.pythonhosted.org/packages/0e/84/875382b10d271b0c11aa5d414b44f92f8dd53e9b658aec338a79164fa548/httptools-0.7.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cad6b591a682dcc6cf1397c3900527f9affef1e55a06c4547264796bbd17cf5e", size = 454954, upload-time = "2025-10-10T03:54:34.226Z" },
- { url = "https://files.pythonhosted.org/packages/30/e1/44f89b280f7e46c0b1b2ccee5737d46b3bb13136383958f20b580a821ca0/httptools-0.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:eb844698d11433d2139bbeeb56499102143beb582bd6c194e3ba69c22f25c274", size = 440175, upload-time = "2025-10-10T03:54:35.942Z" },
- { url = "https://files.pythonhosted.org/packages/6f/7e/b9287763159e700e335028bc1824359dc736fa9b829dacedace91a39b37e/httptools-0.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f65744d7a8bdb4bda5e1fa23e4ba16832860606fcc09d674d56e425e991539ec", size = 440310, upload-time = "2025-10-10T03:54:37.1Z" },
- { url = "https://files.pythonhosted.org/packages/b3/07/5b614f592868e07f5c94b1f301b5e14a21df4e8076215a3bccb830a687d8/httptools-0.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:135fbe974b3718eada677229312e97f3b31f8a9c8ffa3ae6f565bf808d5b6bcb", size = 86875, upload-time = "2025-10-10T03:54:38.421Z" },
- { url = "https://files.pythonhosted.org/packages/53/7f/403e5d787dc4942316e515e949b0c8a013d84078a915910e9f391ba9b3ed/httptools-0.7.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:38e0c83a2ea9746ebbd643bdfb521b9aa4a91703e2cd705c20443405d2fd16a5", size = 206280, upload-time = "2025-10-10T03:54:39.274Z" },
- { url = "https://files.pythonhosted.org/packages/2a/0d/7f3fd28e2ce311ccc998c388dd1c53b18120fda3b70ebb022b135dc9839b/httptools-0.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f25bbaf1235e27704f1a7b86cd3304eabc04f569c828101d94a0e605ef7205a5", size = 110004, upload-time = "2025-10-10T03:54:40.403Z" },
- { url = "https://files.pythonhosted.org/packages/84/a6/b3965e1e146ef5762870bbe76117876ceba51a201e18cc31f5703e454596/httptools-0.7.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2c15f37ef679ab9ecc06bfc4e6e8628c32a8e4b305459de7cf6785acd57e4d03", size = 517655, upload-time = "2025-10-10T03:54:41.347Z" },
- { url = "https://files.pythonhosted.org/packages/11/7d/71fee6f1844e6fa378f2eddde6c3e41ce3a1fb4b2d81118dd544e3441ec0/httptools-0.7.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7fe6e96090df46b36ccfaf746f03034e5ab723162bc51b0a4cf58305324036f2", size = 511440, upload-time = "2025-10-10T03:54:42.452Z" },
- { url = "https://files.pythonhosted.org/packages/22/a5/079d216712a4f3ffa24af4a0381b108aa9c45b7a5cc6eb141f81726b1823/httptools-0.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f72fdbae2dbc6e68b8239defb48e6a5937b12218e6ffc2c7846cc37befa84362", size = 495186, upload-time = "2025-10-10T03:54:43.937Z" },
- { url = "https://files.pythonhosted.org/packages/e9/9e/025ad7b65278745dee3bd0ebf9314934c4592560878308a6121f7f812084/httptools-0.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e99c7b90a29fd82fea9ef57943d501a16f3404d7b9ee81799d41639bdaae412c", size = 499192, upload-time = "2025-10-10T03:54:45.003Z" },
- { url = "https://files.pythonhosted.org/packages/6d/de/40a8f202b987d43afc4d54689600ff03ce65680ede2f31df348d7f368b8f/httptools-0.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:3e14f530fefa7499334a79b0cf7e7cd2992870eb893526fb097d51b4f2d0f321", size = 86694, upload-time = "2025-10-10T03:54:45.923Z" },
- { url = "https://files.pythonhosted.org/packages/09/8f/c77b1fcbfd262d422f12da02feb0d218fa228d52485b77b953832105bb90/httptools-0.7.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6babce6cfa2a99545c60bfef8bee0cc0545413cb0018f617c8059a30ad985de3", size = 202889, upload-time = "2025-10-10T03:54:47.089Z" },
- { url = "https://files.pythonhosted.org/packages/0a/1a/22887f53602feaa066354867bc49a68fc295c2293433177ee90870a7d517/httptools-0.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:601b7628de7504077dd3dcb3791c6b8694bbd967148a6d1f01806509254fb1ca", size = 108180, upload-time = "2025-10-10T03:54:48.052Z" },
- { url = "https://files.pythonhosted.org/packages/32/6a/6aaa91937f0010d288d3d124ca2946d48d60c3a5ee7ca62afe870e3ea011/httptools-0.7.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:04c6c0e6c5fb0739c5b8a9eb046d298650a0ff38cf42537fc372b28dc7e4472c", size = 478596, upload-time = "2025-10-10T03:54:48.919Z" },
- { url = "https://files.pythonhosted.org/packages/6d/70/023d7ce117993107be88d2cbca566a7c1323ccbaf0af7eabf2064fe356f6/httptools-0.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:69d4f9705c405ae3ee83d6a12283dc9feba8cc6aaec671b412917e644ab4fa66", size = 473268, upload-time = "2025-10-10T03:54:49.993Z" },
- { url = "https://files.pythonhosted.org/packages/32/4d/9dd616c38da088e3f436e9a616e1d0cc66544b8cdac405cc4e81c8679fc7/httptools-0.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:44c8f4347d4b31269c8a9205d8a5ee2df5322b09bbbd30f8f862185bb6b05346", size = 455517, upload-time = "2025-10-10T03:54:51.066Z" },
- { url = "https://files.pythonhosted.org/packages/1d/3a/a6c595c310b7df958e739aae88724e24f9246a514d909547778d776799be/httptools-0.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:465275d76db4d554918aba40bf1cbebe324670f3dfc979eaffaa5d108e2ed650", size = 458337, upload-time = "2025-10-10T03:54:52.196Z" },
- { url = "https://files.pythonhosted.org/packages/fd/82/88e8d6d2c51edc1cc391b6e044c6c435b6aebe97b1abc33db1b0b24cd582/httptools-0.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:322d00c2068d125bd570f7bf78b2d367dad02b919d8581d7476d8b75b294e3e6", size = 85743, upload-time = "2025-10-10T03:54:53.448Z" },
- { url = "https://files.pythonhosted.org/packages/34/50/9d095fcbb6de2d523e027a2f304d4551855c2f46e0b82befd718b8b20056/httptools-0.7.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:c08fe65728b8d70b6923ce31e3956f859d5e1e8548e6f22ec520a962c6757270", size = 203619, upload-time = "2025-10-10T03:54:54.321Z" },
- { url = "https://files.pythonhosted.org/packages/07/f0/89720dc5139ae54b03f861b5e2c55a37dba9a5da7d51e1e824a1f343627f/httptools-0.7.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:7aea2e3c3953521c3c51106ee11487a910d45586e351202474d45472db7d72d3", size = 108714, upload-time = "2025-10-10T03:54:55.163Z" },
- { url = "https://files.pythonhosted.org/packages/b3/cb/eea88506f191fb552c11787c23f9a405f4c7b0c5799bf73f2249cd4f5228/httptools-0.7.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0e68b8582f4ea9166be62926077a3334064d422cf08ab87d8b74664f8e9058e1", size = 472909, upload-time = "2025-10-10T03:54:56.056Z" },
- { url = "https://files.pythonhosted.org/packages/e0/4a/a548bdfae6369c0d078bab5769f7b66f17f1bfaa6fa28f81d6be6959066b/httptools-0.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df091cf961a3be783d6aebae963cc9b71e00d57fa6f149025075217bc6a55a7b", size = 470831, upload-time = "2025-10-10T03:54:57.219Z" },
- { url = "https://files.pythonhosted.org/packages/4d/31/14df99e1c43bd132eec921c2e7e11cda7852f65619bc0fc5bdc2d0cb126c/httptools-0.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f084813239e1eb403ddacd06a30de3d3e09a9b76e7894dcda2b22f8a726e9c60", size = 452631, upload-time = "2025-10-10T03:54:58.219Z" },
- { url = "https://files.pythonhosted.org/packages/22/d2/b7e131f7be8d854d48cb6d048113c30f9a46dca0c9a8b08fcb3fcd588cdc/httptools-0.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7347714368fb2b335e9063bc2b96f2f87a9ceffcd9758ac295f8bbcd3ffbc0ca", size = 452910, upload-time = "2025-10-10T03:54:59.366Z" },
- { url = "https://files.pythonhosted.org/packages/53/cf/878f3b91e4e6e011eff6d1fa9ca39f7eb17d19c9d7971b04873734112f30/httptools-0.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:cfabda2a5bb85aa2a904ce06d974a3f30fb36cc63d7feaddec05d2050acede96", size = 88205, upload-time = "2025-10-10T03:55:00.389Z" },
-]
-
-[[package]]
-name = "httpx"
-version = "0.28.1"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "anyio" },
- { name = "certifi" },
- { name = "httpcore" },
- { name = "idna" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" },
-]
-
-[package.optional-dependencies]
-socks = [
- { name = "socksio" },
-]
-
-[[package]]
-name = "httpx-sse"
-version = "0.4.3"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/0f/4c/751061ffa58615a32c31b2d82e8482be8dd4a89154f003147acee90f2be9/httpx_sse-0.4.3.tar.gz", hash = "sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d", size = 15943, upload-time = "2025-10-10T21:48:22.271Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/d2/fd/6668e5aec43ab844de6fc74927e155a3b37bf40d7c3790e49fc0406b6578/httpx_sse-0.4.3-py3-none-any.whl", hash = "sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc", size = 8960, upload-time = "2025-10-10T21:48:21.158Z" },
-]
-
-[[package]]
-name = "huggingface-hub"
-version = "1.4.1"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "filelock" },
- { name = "fsspec" },
- { name = "hf-xet", marker = "platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" },
- { name = "httpx" },
- { name = "packaging" },
- { name = "pyyaml" },
- { name = "shellingham" },
- { name = "tqdm" },
- { name = "typer-slim" },
- { name = "typing-extensions" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/c4/fc/eb9bc06130e8bbda6a616e1b80a7aa127681c448d6b49806f61db2670b61/huggingface_hub-1.4.1.tar.gz", hash = "sha256:b41131ec35e631e7383ab26d6146b8d8972abc8b6309b963b306fbcca87f5ed5", size = 642156, upload-time = "2026-02-06T09:20:03.013Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/d5/ae/2f6d96b4e6c5478d87d606a1934b5d436c4a2bce6bb7c6fdece891c128e3/huggingface_hub-1.4.1-py3-none-any.whl", hash = "sha256:9931d075fb7a79af5abc487106414ec5fba2c0ae86104c0c62fd6cae38873d18", size = 553326, upload-time = "2026-02-06T09:20:00.728Z" },
-]
-
-[[package]]
-name = "hyperframe"
-version = "6.1.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/02/e7/94f8232d4a74cc99514c13a9f995811485a6903d48e5d952771ef6322e30/hyperframe-6.1.0.tar.gz", hash = "sha256:f630908a00854a7adeabd6382b43923a4c4cd4b821fcb527e6ab9e15382a3b08", size = 26566, upload-time = "2025-01-22T21:41:49.302Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/48/30/47d0bf6072f7252e6521f3447ccfa40b421b6824517f82854703d0f5a98b/hyperframe-6.1.0-py3-none-any.whl", hash = "sha256:b03380493a519fce58ea5af42e4a42317bf9bd425596f7a0835ffce80f1a42e5", size = 13007, upload-time = "2025-01-22T21:41:47.295Z" },
-]
-
-[[package]]
-name = "idna"
-version = "3.11"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" },
-]
-
-[[package]]
-name = "importlib-metadata"
-version = "8.7.1"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "zipp" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/f3/49/3b30cad09e7771a4982d9975a8cbf64f00d4a1ececb53297f1d9a7be1b10/importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb", size = 57107, upload-time = "2025-12-21T10:00:19.278Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl", hash = "sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151", size = 27865, upload-time = "2025-12-21T10:00:18.329Z" },
-]
-
-[[package]]
-name = "iniconfig"
-version = "2.3.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" },
-]
-
-[[package]]
-name = "jinja2"
-version = "3.1.6"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "markupsafe" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" },
-]
-
-[[package]]
-name = "jiter"
-version = "0.13.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/0d/5e/4ec91646aee381d01cdb9974e30882c9cd3b8c5d1079d6b5ff4af522439a/jiter-0.13.0.tar.gz", hash = "sha256:f2839f9c2c7e2dffc1bc5929a510e14ce0a946be9365fd1219e7ef342dae14f4", size = 164847, upload-time = "2026-02-02T12:37:56.441Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/0d/5e/4ec91646aee381d01cdb9974e30882c9cd3b8c5d1079d6b5ff4af522439a/jiter-0.13.0.tar.gz", hash = "sha256:f2839f9c2c7e2dffc1bc5929a510e14ce0a946be9365fd1219e7ef342dae14f4", size = 164847, upload-time = "2026-02-02T12:37:56.441Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/71/29/499f8c9eaa8a16751b1c0e45e6f5f1761d180da873d417996cc7bddc8eef/jiter-0.13.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ea026e70a9a28ebbdddcbcf0f1323128a8db66898a06eaad3a4e62d2f554d096", size = 311157, upload-time = "2026-02-02T12:35:37.758Z" },
{ url = "https://files.pythonhosted.org/packages/50/f6/566364c777d2ab450b92100bea11333c64c38d32caf8dc378b48e5b20c46/jiter-0.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:66aa3e663840152d18cc8ff1e4faad3dd181373491b9cfdc6004b92198d67911", size = 319729, upload-time = "2026-02-02T12:35:39.246Z" },
@@ -2248,6 +1951,303 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" },
]
+[[package]]
+name = "kora"
+version = "0.14.0"
+source = { editable = "." }
+dependencies = [
+ { name = "croniter" },
+ { name = "fire" },
+ { name = "httpx", extra = ["socks"] },
+ { name = "jinja2" },
+ { name = "openai" },
+ { name = "prompt-toolkit" },
+ { name = "psutil" },
+ { name = "pydantic" },
+ { name = "pyjwt", extra = ["crypto"] },
+ { name = "python-dotenv" },
+ { name = "pyyaml" },
+ { name = "requests" },
+ { name = "rich" },
+ { name = "ruamel-yaml" },
+ { name = "tenacity" },
+ { name = "tzdata", marker = "sys_platform == 'win32'" },
+]
+
+[package.optional-dependencies]
+acp = [
+ { name = "agent-client-protocol" },
+]
+all = [
+ { name = "agent-client-protocol" },
+ { name = "aiohttp" },
+ { name = "debugpy" },
+ { name = "fastapi" },
+ { name = "google-api-python-client" },
+ { name = "google-auth-httplib2" },
+ { name = "google-auth-oauthlib" },
+ { name = "mcp" },
+ { name = "ptyprocess", marker = "sys_platform != 'win32'" },
+ { name = "pytest" },
+ { name = "pytest-asyncio" },
+ { name = "pytest-split" },
+ { name = "pytest-timeout" },
+ { name = "pytest-xdist" },
+ { name = "pywinpty", marker = "sys_platform == 'win32'" },
+ { name = "ruff" },
+ { name = "simple-term-menu" },
+ { name = "ty" },
+ { name = "uvicorn", extra = ["standard"] },
+ { name = "youtube-transcript-api" },
+]
+anthropic = [
+ { name = "anthropic" },
+]
+azure-identity = [
+ { name = "azure-identity" },
+]
+bedrock = [
+ { name = "boto3" },
+]
+cli = [
+ { name = "simple-term-menu" },
+]
+computer-use = [
+ { name = "mcp" },
+]
+daytona = [
+ { name = "daytona" },
+]
+dev = [
+ { name = "debugpy" },
+ { name = "mcp" },
+ { name = "pytest" },
+ { name = "pytest-asyncio" },
+ { name = "pytest-split" },
+ { name = "pytest-timeout" },
+ { name = "pytest-xdist" },
+ { name = "ruff" },
+ { name = "ty" },
+]
+dingtalk = [
+ { name = "alibabacloud-dingtalk" },
+ { name = "dingtalk-stream" },
+ { name = "qrcode" },
+]
+edge-tts = [
+ { name = "edge-tts" },
+]
+exa = [
+ { name = "exa-py" },
+]
+fal = [
+ { name = "fal-client" },
+]
+feishu = [
+ { name = "lark-oapi" },
+ { name = "qrcode" },
+]
+firecrawl = [
+ { name = "firecrawl-py" },
+]
+google = [
+ { name = "google-api-python-client" },
+ { name = "google-auth-httplib2" },
+ { name = "google-auth-oauthlib" },
+]
+hindsight = [
+ { name = "hindsight-client" },
+]
+homeassistant = [
+ { name = "aiohttp" },
+]
+honcho = [
+ { name = "honcho-ai" },
+]
+matrix = [
+ { name = "aiohttp-socks" },
+ { name = "aiosqlite" },
+ { name = "asyncpg" },
+ { name = "markdown" },
+ { name = "mautrix", extra = ["encryption"] },
+]
+mcp = [
+ { name = "mcp" },
+]
+messaging = [
+ { name = "aiohttp" },
+ { name = "brotlicffi" },
+ { name = "discord-py", extra = ["voice"] },
+ { name = "python-telegram-bot", extra = ["webhooks"] },
+ { name = "qrcode" },
+ { name = "slack-bolt" },
+ { name = "slack-sdk" },
+]
+modal = [
+ { name = "modal" },
+]
+parallel-web = [
+ { name = "parallel-web" },
+]
+pty = [
+ { name = "ptyprocess", marker = "sys_platform != 'win32'" },
+ { name = "pywinpty", marker = "sys_platform == 'win32'" },
+]
+slack = [
+ { name = "aiohttp" },
+ { name = "slack-bolt" },
+ { name = "slack-sdk" },
+]
+sms = [
+ { name = "aiohttp" },
+]
+termux = [
+ { name = "agent-client-protocol" },
+ { name = "honcho-ai" },
+ { name = "mcp" },
+ { name = "ptyprocess", marker = "sys_platform != 'win32'" },
+ { name = "python-telegram-bot", extra = ["webhooks"] },
+ { name = "pywinpty", marker = "sys_platform == 'win32'" },
+ { name = "simple-term-menu" },
+]
+termux-all = [
+ { name = "agent-client-protocol" },
+ { name = "aiohttp" },
+ { name = "fastapi" },
+ { name = "google-api-python-client" },
+ { name = "google-auth-httplib2" },
+ { name = "google-auth-oauthlib" },
+ { name = "honcho-ai" },
+ { name = "mcp" },
+ { name = "ptyprocess", marker = "sys_platform != 'win32'" },
+ { name = "python-telegram-bot", extra = ["webhooks"] },
+ { name = "pywinpty", marker = "sys_platform == 'win32'" },
+ { name = "simple-term-menu" },
+ { name = "uvicorn", extra = ["standard"] },
+]
+tts-premium = [
+ { name = "elevenlabs" },
+]
+vercel = [
+ { name = "vercel" },
+]
+voice = [
+ { name = "faster-whisper" },
+ { name = "numpy" },
+ { name = "sounddevice" },
+]
+web = [
+ { name = "fastapi" },
+ { name = "uvicorn", extra = ["standard"] },
+]
+youtube = [
+ { name = "youtube-transcript-api" },
+]
+
+[package.metadata]
+requires-dist = [
+ { name = "agent-client-protocol", marker = "extra == 'acp'", specifier = "==0.9.0" },
+ { name = "aiohttp", marker = "extra == 'homeassistant'", specifier = "==3.13.3" },
+ { name = "aiohttp", marker = "extra == 'messaging'", specifier = "==3.13.3" },
+ { name = "aiohttp", marker = "extra == 'slack'", specifier = "==3.13.3" },
+ { name = "aiohttp", marker = "extra == 'sms'", specifier = "==3.13.3" },
+ { name = "aiohttp-socks", marker = "extra == 'matrix'", specifier = "==0.11.0" },
+ { name = "aiosqlite", marker = "extra == 'matrix'", specifier = "==0.22.1" },
+ { name = "alibabacloud-dingtalk", marker = "extra == 'dingtalk'", specifier = "==2.2.42" },
+ { name = "anthropic", marker = "extra == 'anthropic'", specifier = "==0.86.0" },
+ { name = "asyncpg", marker = "extra == 'matrix'", specifier = "==0.31.0" },
+ { name = "azure-identity", marker = "extra == 'azure-identity'", specifier = "==1.25.3" },
+ { name = "boto3", marker = "extra == 'bedrock'", specifier = "==1.42.89" },
+ { name = "brotlicffi", marker = "extra == 'messaging'", specifier = "==1.2.0.1" },
+ { name = "croniter", specifier = "==6.0.0" },
+ { name = "daytona", marker = "extra == 'daytona'", specifier = "==0.155.0" },
+ { name = "debugpy", marker = "extra == 'dev'", specifier = "==1.8.20" },
+ { name = "dingtalk-stream", marker = "extra == 'dingtalk'", specifier = "==0.24.3" },
+ { name = "discord-py", extras = ["voice"], marker = "extra == 'messaging'", specifier = "==2.7.1" },
+ { name = "edge-tts", marker = "extra == 'edge-tts'", specifier = "==7.2.7" },
+ { name = "elevenlabs", marker = "extra == 'tts-premium'", specifier = "==1.59.0" },
+ { name = "exa-py", marker = "extra == 'exa'", specifier = "==2.10.2" },
+ { name = "fal-client", marker = "extra == 'fal'", specifier = "==0.13.1" },
+ { name = "fastapi", marker = "extra == 'web'", specifier = "==0.133.1" },
+ { name = "faster-whisper", marker = "extra == 'voice'", specifier = "==1.2.1" },
+ { name = "fire", specifier = "==0.7.1" },
+ { name = "firecrawl-py", marker = "extra == 'firecrawl'", specifier = "==4.17.0" },
+ { name = "google-api-python-client", marker = "extra == 'google'", specifier = "==2.194.0" },
+ { name = "google-auth-httplib2", marker = "extra == 'google'", specifier = "==0.3.1" },
+ { name = "google-auth-oauthlib", marker = "extra == 'google'", specifier = "==1.3.1" },
+ { name = "hindsight-client", marker = "extra == 'hindsight'", specifier = "==0.6.1" },
+ { name = "honcho-ai", marker = "extra == 'honcho'", specifier = "==2.0.1" },
+ { name = "httpx", extras = ["socks"], specifier = "==0.28.1" },
+ { name = "jinja2", specifier = "==3.1.6" },
+ { name = "kora", extras = ["acp"], marker = "extra == 'all'" },
+ { name = "kora", extras = ["acp"], marker = "extra == 'termux'" },
+ { name = "kora", extras = ["cli"], marker = "extra == 'all'" },
+ { name = "kora", extras = ["cli"], marker = "extra == 'termux'" },
+ { name = "kora", extras = ["cron"], marker = "extra == 'all'" },
+ { name = "kora", extras = ["cron"], marker = "extra == 'termux'" },
+ { name = "kora", extras = ["dev"], marker = "extra == 'all'" },
+ { name = "kora", extras = ["google"], marker = "extra == 'all'" },
+ { name = "kora", extras = ["google"], marker = "extra == 'termux-all'" },
+ { name = "kora", extras = ["homeassistant"], marker = "extra == 'all'" },
+ { name = "kora", extras = ["homeassistant"], marker = "extra == 'termux-all'" },
+ { name = "kora", extras = ["honcho"], marker = "extra == 'termux'" },
+ { name = "kora", extras = ["mcp"], marker = "extra == 'all'" },
+ { name = "kora", extras = ["mcp"], marker = "extra == 'termux'" },
+ { name = "kora", extras = ["pty"], marker = "extra == 'all'" },
+ { name = "kora", extras = ["pty"], marker = "extra == 'termux'" },
+ { name = "kora", extras = ["sms"], marker = "extra == 'all'" },
+ { name = "kora", extras = ["sms"], marker = "extra == 'termux-all'" },
+ { name = "kora", extras = ["termux"], marker = "extra == 'termux-all'" },
+ { name = "kora", extras = ["web"], marker = "extra == 'all'" },
+ { name = "kora", extras = ["web"], marker = "extra == 'termux-all'" },
+ { name = "kora", extras = ["youtube"], marker = "extra == 'all'" },
+ { name = "lark-oapi", marker = "extra == 'feishu'", specifier = "==1.5.3" },
+ { name = "markdown", marker = "extra == 'matrix'", specifier = "==3.10.2" },
+ { name = "mautrix", extras = ["encryption"], marker = "extra == 'matrix'", specifier = "==0.21.0" },
+ { name = "mcp", marker = "extra == 'computer-use'", specifier = "==1.26.0" },
+ { name = "mcp", marker = "extra == 'dev'", specifier = "==1.26.0" },
+ { name = "mcp", marker = "extra == 'mcp'", specifier = "==1.26.0" },
+ { name = "modal", marker = "extra == 'modal'", specifier = "==1.3.4" },
+ { name = "numpy", marker = "extra == 'voice'", specifier = "==2.4.3" },
+ { name = "openai", specifier = "==2.24.0" },
+ { name = "parallel-web", marker = "extra == 'parallel-web'", specifier = "==0.4.2" },
+ { name = "prompt-toolkit", specifier = "==3.0.52" },
+ { name = "psutil", specifier = "==7.2.2" },
+ { name = "ptyprocess", marker = "sys_platform != 'win32' and extra == 'pty'", specifier = "==0.7.0" },
+ { name = "pydantic", specifier = "==2.12.5" },
+ { name = "pyjwt", extras = ["crypto"], specifier = "==2.12.1" },
+ { name = "pytest", marker = "extra == 'dev'", specifier = "==9.0.2" },
+ { name = "pytest-asyncio", marker = "extra == 'dev'", specifier = "==1.3.0" },
+ { name = "pytest-split", marker = "extra == 'dev'", specifier = "==0.11.0" },
+ { name = "pytest-timeout", marker = "extra == 'dev'", specifier = "==2.4.0" },
+ { name = "pytest-xdist", marker = "extra == 'dev'", specifier = "==3.8.0" },
+ { name = "python-dotenv", specifier = "==1.2.2" },
+ { name = "python-telegram-bot", extras = ["webhooks"], marker = "extra == 'messaging'", specifier = "==22.6" },
+ { name = "python-telegram-bot", extras = ["webhooks"], marker = "extra == 'termux'", specifier = "==22.6" },
+ { name = "pywinpty", marker = "sys_platform == 'win32' and extra == 'pty'", specifier = "==2.0.15" },
+ { name = "pyyaml", specifier = "==6.0.3" },
+ { name = "qrcode", marker = "extra == 'dingtalk'", specifier = "==7.4.2" },
+ { name = "qrcode", marker = "extra == 'feishu'", specifier = "==7.4.2" },
+ { name = "qrcode", marker = "extra == 'messaging'", specifier = "==7.4.2" },
+ { name = "requests", specifier = "==2.33.0" },
+ { name = "rich", specifier = "==14.3.3" },
+ { name = "ruamel-yaml", specifier = "==0.18.17" },
+ { name = "ruff", marker = "extra == 'dev'", specifier = "==0.15.10" },
+ { name = "simple-term-menu", marker = "extra == 'cli'", specifier = "==1.6.6" },
+ { name = "slack-bolt", marker = "extra == 'messaging'", specifier = "==1.27.0" },
+ { name = "slack-bolt", marker = "extra == 'slack'", specifier = "==1.27.0" },
+ { name = "slack-sdk", marker = "extra == 'messaging'", specifier = "==3.40.1" },
+ { name = "slack-sdk", marker = "extra == 'slack'", specifier = "==3.40.1" },
+ { name = "sounddevice", marker = "extra == 'voice'", specifier = "==0.5.5" },
+ { name = "tenacity", specifier = "==9.1.4" },
+ { name = "ty", marker = "extra == 'dev'", specifier = "==0.0.21" },
+ { name = "tzdata", marker = "sys_platform == 'win32'", specifier = "==2025.3" },
+ { name = "uvicorn", extras = ["standard"], marker = "extra == 'web'", specifier = "==0.41.0" },
+ { name = "vercel", marker = "extra == 'vercel'", specifier = "==0.5.7" },
+ { name = "youtube-transcript-api", marker = "extra == 'youtube'", specifier = "==1.2.4" },
+]
+provides-extras = ["anthropic", "exa", "firecrawl", "parallel-web", "fal", "edge-tts", "modal", "daytona", "vercel", "hindsight", "dev", "messaging", "cron", "slack", "matrix", "cli", "tts-premium", "voice", "pty", "honcho", "mcp", "homeassistant", "sms", "computer-use", "acp", "bedrock", "azure-identity", "termux", "termux-all", "dingtalk", "feishu", "google", "youtube", "web", "all"]
+
[[package]]
name = "lark-oapi"
version = "1.5.3"