Metadata-Version: 2.4
Name: senbai
Version: 0.0.1
Summary: A lightweight personal AI assistant framework
Author: Maintainers
Author-email: solubrew@solutionsbrewer.com
License: MIT
Platform: Linux
Requires-Python: >=3.12
Requires-Dist: aiohappyeyeballs==2.6.1
Requires-Dist: aiohttp==3.13.3
Requires-Dist: aiosignal==1.4.0
Requires-Dist: annotated-doc==0.0.4
Requires-Dist: annotated-types==0.7.0
Requires-Dist: anyio==4.13.0
Requires-Dist: apscheduler==3.11.2
Requires-Dist: argon2-cffi==25.1.0
Requires-Dist: argon2-cffi-bindings==25.1.0
Requires-Dist: astor==0.8.1
Requires-Dist: asyncpg==0.31.0
Requires-Dist: attrs==26.1.0
Requires-Dist: autobahn==25.12.2
Requires-Dist: automat==25.4.16
Requires-Dist: backoff==2.2.1
Requires-Dist: base58==2.1.1
Requires-Dist: bcrypt==5.0.0
Requires-Dist: beautifulsoup4==4.14.2
Requires-Dist: bidict==0.23.1
Requires-Dist: black==26.3.1
Requires-Dist: bs4==0.0.2
Requires-Dist: cbor2==5.9.0
Requires-Dist: certifi==2026.2.25
Requires-Dist: cffi==2.0.0
Requires-Dist: chardet==7.4.3
Requires-Dist: charset-normalizer==3.4.7
Requires-Dist: coincurve==21.0.0
Requires-Dist: constantly==23.10.4
Requires-Dist: croniter==6.2.2
Requires-Dist: cryptography==46.0.7
Requires-Dist: cssselect==1.4.0
Requires-Dist: cuda-bindings==13.2.0
Requires-Dist: cuda-pathfinder==1.5.2
Requires-Dist: cuda-toolkit==13.0.2
Requires-Dist: decorator==5.2.1
Requires-Dist: dill==0.4.1
Requires-Dist: dingtalk-stream==0.24.3
Requires-Dist: diskcache==5.6.3
Requires-Dist: distro==1.9.0
Requires-Dist: dnspython==2.8.0
Requires-Dist: docstring-parser==0.18.0
Requires-Dist: ecdsa==0.19.2
Requires-Dist: fastuuid==0.14.0
Requires-Dist: filelock==3.25.2
Requires-Dist: flexcache==0.3
Requires-Dist: flexparser==0.4
Requires-Dist: frozenlist==1.8.0
Requires-Dist: fsspec==2026.3.0
Requires-Dist: greenlet==3.5.0
Requires-Dist: h11==0.16.0
Requires-Dist: hf-xet==1.4.3
Requires-Dist: html5lib==1.1
Requires-Dist: httpcore==1.0.9
Requires-Dist: httpx==0.28.1
Requires-Dist: httpx-sse==0.4.3
Requires-Dist: huggingface-hub==1.10.1
Requires-Dist: humanize==4.15.0
Requires-Dist: hyperlink==21.0.0
Requires-Dist: hypothesis==6.152.1
Requires-Dist: idna==3.11
Requires-Dist: imageio==2.37.3
Requires-Dist: imageio-ffmpeg==0.6.0
Requires-Dist: importlib-metadata==8.5.0
Requires-Dist: incremental==24.11.0
Requires-Dist: iniconfig==2.3.0
Requires-Dist: instructor==1.15.0
Requires-Dist: iterable-io==1.0.1
Requires-Dist: jaraco-classes==3.4.0
Requires-Dist: jaraco-context==6.1.2
Requires-Dist: jaraco-functools==4.4.0
Requires-Dist: jeepney==0.9.0
Requires-Dist: jinja2==3.1.6
Requires-Dist: jiter==0.12.0
Requires-Dist: joblib==1.5.3
Requires-Dist: json-repair==0.59.4
Requires-Dist: jsonschema==4.23.0
Requires-Dist: jsonschema-specifications==2025.9.1
Requires-Dist: keyring==25.7.0
Requires-Dist: lark-oapi==1.5.5
Requires-Dist: litellm==1.83.0
Requires-Dist: llvmlite==0.44.0
Requires-Dist: lxml==6.1.0
Requires-Dist: lxml-html-clean==0.4.4
Requires-Dist: magic-wormhole==0.23.0
Requires-Dist: markdown-it-py==4.0.0
Requires-Dist: markupsafe==3.0.3
Requires-Dist: mcp==1.27.0
Requires-Dist: mdurl==0.1.2
Requires-Dist: memory-profiler==0.61.0
Requires-Dist: more-itertools==11.0.2
Requires-Dist: moviepy==2.2.1
Requires-Dist: mpmath==1.3.0
Requires-Dist: msgpack==1.1.2
Requires-Dist: multidict==6.7.1
Requires-Dist: mypy-extensions==1.1.0
Requires-Dist: mysql-connector-python==9.7.0
Requires-Dist: networkx==3.6.1
Requires-Dist: nodeenv==1.10.0
Requires-Dist: numba==0.61.2
Requires-Dist: numpy==2.2.6
Requires-Dist: nvidia-cublas==13.1.0.3
Requires-Dist: nvidia-cuda-cupti==13.0.85
Requires-Dist: nvidia-cuda-nvrtc==13.0.88
Requires-Dist: nvidia-cuda-runtime==13.0.96
Requires-Dist: nvidia-cudnn-cu13==9.19.0.56
Requires-Dist: nvidia-cufft==12.0.0.61
Requires-Dist: nvidia-cufile==1.15.1.6
Requires-Dist: nvidia-curand==10.4.0.35
Requires-Dist: nvidia-cusolver==12.0.4.66
Requires-Dist: nvidia-cusparse==12.6.3.3
Requires-Dist: nvidia-cusparselt-cu13==0.8.0
Requires-Dist: nvidia-nccl-cu13==2.28.9
Requires-Dist: nvidia-nvjitlink==13.0.88
Requires-Dist: nvidia-nvshmem-cu13==3.4.5
Requires-Dist: nvidia-nvtx==13.0.85
Requires-Dist: oauth-cli-kit==0.1.3
Requires-Dist: openai==2.24.0
Requires-Dist: opencv-python==4.13.0.90
Requires-Dist: packaging==26.0
Requires-Dist: pandas==2.3.3
Requires-Dist: pandas-ta==0.4.71b0
Requires-Dist: pathspec==1.1.1
Requires-Dist: pdfkit==1.0.0
Requires-Dist: pika==1.4.0
Requires-Dist: pillow==11.3.0
Requires-Dist: pint==0.19
Requires-Dist: platformdirs==4.9.6
Requires-Dist: pluggy==1.6.0
Requires-Dist: proglog==0.1.12
Requires-Dist: prompt-toolkit==3.0.52
Requires-Dist: propcache==0.4.1
Requires-Dist: psutil==7.2.2
Requires-Dist: psycopg2-binary==2.9.12
Requires-Dist: py-ubjson==0.16.1
Requires-Dist: pyarrow==24.0.0
Requires-Dist: pyasn1==0.6.3
Requires-Dist: pyasn1-modules==0.4.2
Requires-Dist: pycparser==3.0
Requires-Dist: pycryptodome==3.23.0
Requires-Dist: pydantic==2.12.5
Requires-Dist: pydantic-core==2.41.5
Requires-Dist: pydantic-settings==2.14.0
Requires-Dist: pygments==2.20.0
Requires-Dist: pyjwt==2.12.1
Requires-Dist: pynacl==1.6.2
Requires-Dist: pyodbc==5.3.0
Requires-Dist: pyopenssl==26.0.0
Requires-Dist: pyright==1.1.408
Requires-Dist: pytest==9.0.3
Requires-Dist: python-dateutil==2.9.0.post0
Requires-Dist: python-dotenv==1.0.1
Requires-Dist: python-engineio==4.13.1
Requires-Dist: python-multipart==0.0.26
Requires-Dist: python-rapidjson==1.23
Requires-Dist: python-socketio==5.16.1
Requires-Dist: python-socks==2.8.1
Requires-Dist: python-telegram-bot==22.7
Requires-Dist: pytokens==0.4.1
Requires-Dist: pytz==2026.1.post1
Requires-Dist: pyyaml==6.0.3
Requires-Dist: pyzmq==27.1.0
Requires-Dist: qq-botpy==1.2.1
Requires-Dist: qrcode==8.2
Requires-Dist: readability-lxml==0.8.4.1
Requires-Dist: referencing==0.37.0
Requires-Dist: regex==2026.4.4
Requires-Dist: reportlab==4.4.10
Requires-Dist: requests==2.33.1
Requires-Dist: requests-toolbelt==1.0.0
Requires-Dist: restrictedpython==8.1
Requires-Dist: rich==14.3.4
Requires-Dist: rpds-py==0.30.0
Requires-Dist: ruamel-yaml==0.19.1
Requires-Dist: safetensors==0.7.0
Requires-Dist: scapy==2.7.0
Requires-Dist: scikit-learn==1.8.0
Requires-Dist: scipy==1.17.1
Requires-Dist: secretstorage==3.5.0
Requires-Dist: send2trash==2.1.0
Requires-Dist: sentence-transformers==5.4.0
Requires-Dist: service-identity==24.2.0
Requires-Dist: setuptools==81.0.0
Requires-Dist: shellingham==1.5.4
Requires-Dist: simple-websocket==1.1.0
Requires-Dist: six==1.17.0
Requires-Dist: slack-sdk==3.41.0
Requires-Dist: slackify-markdown==0.2.2
Requires-Dist: sniffio==1.3.1
Requires-Dist: socksio==1.0.0
Requires-Dist: sortedcontainers==2.4.0
Requires-Dist: soupsieve==2.8.3
Requires-Dist: spake2==0.9
Requires-Dist: sqlalchemy==2.0.49
Requires-Dist: sqlite-vec==0.1.9
Requires-Dist: sse-starlette==3.3.4
Requires-Dist: starlette==1.0.0
Requires-Dist: sympy==1.14.0
Requires-Dist: tenacity==9.1.3
Requires-Dist: threadpoolctl==3.6.0
Requires-Dist: tiktoken==0.12.0
Requires-Dist: tokenizers==0.22.2
Requires-Dist: torch==2.11.0
Requires-Dist: tqdm==4.67.3
Requires-Dist: transformers==5.7.0
Requires-Dist: triton==3.6.0
Requires-Dist: twisted==25.5.0
Requires-Dist: txaio==25.12.2
Requires-Dist: txtorcon==24.8.0
Requires-Dist: typer==0.24.1
Requires-Dist: typing-extensions==4.15.0
Requires-Dist: typing-inspection==0.4.2
Requires-Dist: tzdata==2026.1
Requires-Dist: tzlocal==5.3.1
Requires-Dist: ujson==5.12.0
Requires-Dist: urllib3==2.6.3
Requires-Dist: uuid7==0.1.0
Requires-Dist: uvicorn==0.45.0
Requires-Dist: wcwidth==0.6.0
Requires-Dist: webencodings==0.5.1
Requires-Dist: webp==0.4.0
Requires-Dist: websocket-client==1.9.0
Requires-Dist: websockets==16.0
Requires-Dist: wsproto==1.3.2
Requires-Dist: yarl==1.23.0
Requires-Dist: zipp==3.23.1
Requires-Dist: zipstream-ng==1.9.0
Requires-Dist: zmq==0.0.0
Requires-Dist: zope-interface==8.3
Requires-Dist: zeroconf==0.147.3
Requires-Dist: ifaddr==0.2.0
Requires-Dist: adafruit-ampy==1.1.0
Requires-Dist: annotated-doc==0.0.4
Requires-Dist: annotated-types==0.7.0
Requires-Dist: anyio==4.13.0
Requires-Dist: attrs==26.1.0
Requires-Dist: backoff==2.2.1
Requires-Dist: beautifulsoup4==4.14.2
Requires-Dist: bitarray==3.8.1
Requires-Dist: bitstring==4.4.0
Requires-Dist: cairocffi==1.7.1
Requires-Dist: cairosvg==2.9.0
Requires-Dist: certifi==2026.2.25
Requires-Dist: cffi==2.0.0
Requires-Dist: click==8.3.3
Requires-Dist: colormath==3.0.0
Requires-Dist: contourpy==1.3.3
Requires-Dist: cryptography==46.0.7
Requires-Dist: cssselect2==0.9.0
Requires-Dist: cycler==0.12.1
Requires-Dist: defusedxml==0.7.1
Requires-Dist: emoji==2.15.0
Requires-Dist: esptool==5.2.0
Requires-Dist: et-xmlfile==2.0.0
Requires-Dist: euclid3==0.1
Requires-Dist: fastjsonschema==2.21.2
Requires-Dist: ffmpeg-python==0.2.0
Requires-Dist: floweaver==2.0.1
Requires-Dist: fonttools==4.63.0
Requires-Dist: furl==2.1.4
Requires-Dist: future==1.0.0
Requires-Dist: graphviz==0.21
Requires-Dist: greenlet==3.5.0
Requires-Dist: h11==0.16.0
Requires-Dist: httpcore==1.0.9
Requires-Dist: httpx==0.28.1
Requires-Dist: idna==3.11
Requires-Dist: intelhex==2.3.0
Requires-Dist: jsonschema==4.23.0
Requires-Dist: jsonschema-specifications==2025.9.1
Requires-Dist: jupyter-core==5.9.1
Requires-Dist: kiwisolver==1.5.0
Requires-Dist: lxml==6.1.0
Requires-Dist: markdown-it-py==4.0.0
Requires-Dist: matplotlib==3.10.9
Requires-Dist: mdurl==0.1.2
Requires-Dist: mistune==3.2.1
Requires-Dist: narwhals==2.21.0
Requires-Dist: nbformat==5.10.4
Requires-Dist: networkx==3.6.1
Requires-Dist: notion-client==2.5.0
Requires-Dist: numpy==2.2.6
Requires-Dist: opencv-python==4.13.0.90
Requires-Dist: openpyxl==3.1.5
Requires-Dist: orderedmultidict==1.0.2
Requires-Dist: packaging==26.0
Requires-Dist: palettable==3.3.3
Requires-Dist: pandas==2.3.3
Requires-Dist: pendulum==3.2.0
Requires-Dist: pillow==11.3.0
Requires-Dist: platformdirs==4.9.6
Requires-Dist: plotly==6.7.0
Requires-Dist: ply==3.11
Requires-Dist: prettytable==0.7.2
Requires-Dist: pycparser==3.0
Requires-Dist: pydantic==2.12.5
Requires-Dist: pydantic-core==2.41.5
Requires-Dist: pydot==4.0.1
Requires-Dist: pydub==0.25.1
Requires-Dist: pygments==2.20.0
Requires-Dist: pymupdf==1.27.2.3
Requires-Dist: pyparsing==3.3.2
Requires-Dist: pypdf2==3.0.1
Requires-Dist: pypng==0.0.19
Requires-Dist: pyserial==3.5
Requires-Dist: python-dateutil==2.9.0.post0
Requires-Dist: python-docx==1.2.0
Requires-Dist: python-dotenv==1.0.1
Requires-Dist: python-pptx==1.0.2
Requires-Dist: pyyaml==6.0.3
Requires-Dist: reedsolo==1.7.0
Requires-Dist: referencing==0.37.0
Requires-Dist: rich==14.3.4
Requires-Dist: rich-click==1.9.7
Requires-Dist: rpds-py==0.30.0
Requires-Dist: ruamel-yaml==0.19.1
Requires-Dist: schedule==1.2.2
Requires-Dist: seaborn==0.13.2
Requires-Dist: shellingham==1.5.4
Requires-Dist: six==1.17.0
Requires-Dist: solidpython==1.1.3
Requires-Dist: soupsieve==2.8.3
Requires-Dist: sqlalchemy==2.0.49
Requires-Dist: tabulate==0.10.0
Requires-Dist: tibs==0.5.7
Requires-Dist: tinycss2==1.5.1
Requires-Dist: tomli==2.4.1
Requires-Dist: tomli-w==1.2.0
Requires-Dist: traitlets==5.15.0
Requires-Dist: typer==0.24.1
Requires-Dist: typing-extensions==4.15.0
Requires-Dist: typing-inspection==0.4.2
Requires-Dist: tzdata==2026.1
Requires-Dist: ultimate-notion==0.9.6
Requires-Dist: url-normalize==3.0.0
Requires-Dist: webencodings==0.5.1
Requires-Dist: xlsxwriter==3.2.9
Requires-Dist: toml==0.10.1
Requires-Dist: faker==40.15.0
Requires-Dist: spacy==3.8.14
Requires-Dist: datasketch==1.9.0
Requires-Dist: pytest-asyncio>=1.3.0,<2.0.0 ; extra == "dev"
Requires-Dist: ruff>=0.1.0 ; extra == "dev"
Provides-Extra: dev
Description: # SenBai
        
        **SenBai** is an AI agent orchestration platform that coordinates specialized subagents across diverse communication channels. Built on the **Love Equation**: `dE/dt = β (C − D) E`.
        
        ---
        
        ## Architecture
        
        SenBai is an **agent of agents** — a supervisor that spawns, coordinates, and monitors specialized subagents. Each subagent operates within its own domain while sharing context through a unified memory graph (Glain) and event bus (Eaglis).
        
        **Key layers:**
        
        | Layer | Components |
        |---|---|
        | **Consciousness** | `ConsciousLoop` → `SubConsciousLoop` → `BaseLoop` — layered awareness from reactive reasoning to reflexive pattern-matching. (The former `Superconscious` layer was removed; its responsibilities are now handled by the `Judge`.) |
        | **Agent Core** | Agent loops, prompt scaling (LadyOLPromptEngine), context injection, timeout handling, error classification with retry |
        | **Judge Router** | Routes prompts to the best provider/model/role/persona based on complexity, urgency, and relevance |
        | **Subagent System** | Spawn/verify lifecycle, bus communication, idle management, tool dispatch via `goalt.taskaxn` |
        | **Memory** | Glain (vector + SQLite memory graph), session management, rolling-summary history |
        | **Tools** | `ToolRegistry` with capability-gated schemas; GlainTool, Sasquatch (shell), etc. via Xskillaber |
        | **LLM Providers** | MiniMax, ZhipuAI, OpenAI, Anthropic, Ollama — via `ProviderPool` with streaming + retry + failover |
        | **Channels** | Telegram, Discord, Email (IMAP/SMTP), Slack — via Eaglis |
        | **Monitoring** | Heartbeat service, status API (FastAPI), health checks, restart-loop guard |
        | **Security** | `SecurityPolicy` enforcing file/shell/network/secrets rules from `security.yaml` |
        
        ## Quick Start
        
        ```bash
        # Install
        pip install -e .
        
        # Configure
        # Edit ~/Documents/senbai_accts.yaml with your provider API keys
        
        # Validate config
        senbai config-validate
        
        # Start the gateway (Telegram/Discord/etc.)
        senbai gateway
        
        # CLI chat mode
        senbai chat
        
        # Health check
        senbai doctor
        
        # Status
        senbai status
        
        # Token usage report
        senbai tokens
        
        # Eval benchmark
        senbai eval --dry-run
        senbai eval
        ```
        
        ## Project Structure
        
        ```
        senbai/
        ├── agent/                    # Core agent implementation
        │   ├── agent.py             # AgentLoop — main lifecycle, tool registration
        │   ├── base.py              # BaseLoop — message bus polling, aclose()
        │   ├── conscious.py         # ConsciousLoop — reactive reasoning
        │   ├── subconscious.py      # SubConsciousLoop — rubric analysis, role routing
        │   ├── subagent.py          # SubagentManager — spawn/verify lifecycle
        │   ├── __init__.py          # Lazy imports (AgentLoop, ToolManager, ToolRegistry)
        │   ├── _data_/              # YAML configs (agent.yaml, base.yaml, subconscious.yaml, subagent.yaml)
        │   ├── identity/            # Agent identity management
        │   ├── monitor/             # Health monitoring
        │   │   ├── health.py        # HealthChecker, HealthStatus
        │   │   ├── hub.py           # MonitorHub, MonitorEvent
        │   │   ├── registry.py      # SubagentRegistry, SubagentState
        │   │   ├── integration.py   # MonitorBus — bridges Health ↔ SubagentBus ↔ AgentLoop
        │   │   ├── status_api.py    # FastAPI status endpoints
        │   │   ├── config.py        # MonitorConfig
        │   │   ├── agent_integration.py
        │   │   └── restart_loop_guard.py  # Restart-loop breaker (3 boots/60s)
        │   └── tools/               # Tool framework
        │       ├── base.py          # Tool ABC, ToolContext, capability predicates
        │       └── registry.py      # ToolRegistry — register/validate/execute
        ├── cli.py                   # Main CLI (Typer): gateway, chat, eval, doctor, status, tokens, config-*
        ├── cli/                     # CLI back-compat shim (commands.py → re-exports cli.py)
        ├── config/                  # Config loader shim
        ├── coordinator.py           # Coordinator — task coordination (ASGIAdapter stub)
        ├── cron.py                  # CronService — async cron job scheduling
        ├── security_policy.py       # SecurityPolicy + AuditLogger — runtime enforcement
        ├── security.py              # Legacy security utilities
        ├── skills/                  # Background workers
        │   ├── background_worker.py # TaskExecutor → goalt.taskaxn routing
        │   ├── task_background_worker.py
        │   └── task_completion.py   # TaskCompletionManager hooks
        ├── utils/                   # Utilities
        │   ├── helpers.py           # pycurity keystore resolver, file ops
        │   ├── token_tracker.py     # TokenTracker — per-call usage + cost
        │   ├── oauth_manager.py     # OAuthManager — PyKeyStore-backed
        │   ├── eval_runner.py       # Eval benchmark wrapper
        │   ├── schema.py            # Pydantic schemas
        │   ├── error.py             # Error taxonomy
        │   ├── constants.py
        │   └── user.py
        └── _data_/                  # Top-level configs
            ├── config.yaml
            ├── security.yaml        # Security policy rules
            └── senbai.yaml
        ```
        
        ## CLI Commands
        
        ```bash
        senbai gateway [--port PORT] [--status-port PORT]   # Start the full agent gateway
        senbai chat [--name NAME]                            # Interactive CLI chat
        senbai eval [--dry-run] [--use-llm] [--json]         # Run eval benchmark suite
        senbai doctor                                         # Health check (pykey, glain, providers, channels)
        senbai status [--json]                               # Runtime status (subagents, cron, tokens)
        senbai tokens [--provider NAME]                      # Token usage and cost report
        senbai config-print [--cfg PATH] [--json]            # Print merged gateway config
        senbai config-validate [--cfg PATH] [--strict]       # Validate config (exit 0/1)
        ```
        
        ## Architecture Notes
        
        - **Judge Router**: Routes each prompt to the optimal provider/model/role based on complexity, urgency, and relevance scores from `PromptRubric`.
        - **Byte-stable system prompt**: The system prompt is cached per-session to enable provider-side prompt caching.
        - **Message role alternation**: `normalize_message_sequence()` enforces strict role alternation before every provider call.
        - **Capability-gated tools**: Only tools whose `is_available(context)` returns True are advertised in the tool schema.
        - **Lifecycle**: All long-lived objects (`AgentLoop`, `Eaglis`, `LadyOLPromptEngine`, etc.) expose idempotent `start()` + `aclose()`.
        - **Restart-loop guard**: Detects rapid restarts (3 boots/60s) and skips auto-resume of pending tasks.
        - **Stale-stream breaker**: Aborts after N consecutive stale provider streams.
        - **Background task retention**: All `asyncio.create_task` calls retain strong refs via `_bg_tasks` sets.
        - **Glain**: SQLite-only by design; SQuirRL handles back-end switching.
        
        ## Development
        
        ```bash
        # Run tests
        pytest tests/ -v
        
        # Specific test
        pytest tests/test_judge_provider_loop.py -v
        
        # Syntax check
        python3 -c "import ast; ast.parse(open('senbai/agent/agent.py').read())"
        ```
        
        ## Dependencies
        
        Core ecosystem: **Eaglis** (channels/bus), **LadyOL** (prompt engine/providers), **Glain** (memory), **GoaLT** (task orchestration), **Xskillaber** (tools/skills), **Kahndor** (config/logging), **KnightsORT** (roles), **Shieldface** (security), **Pycurity** (PyKeyStore secrets).
        
        ## Documentation
        
        - `ARCHITECTURE.md` — contributor architecture guide
        - `TODOs.md` — outstanding tasks with status markers
        - `HANDOFF.md` — session handoff for context switching
        
        ## License
        
        MIT
Description-Content-Type: text/markdown
