495c1ac2bd
[claude] Fix 27 ruff lint errors blocking all pushes ( #1149 ) ( #1153 )
...
Co-authored-by: Claude (Opus 4.6) <claude@hermes.local >
Co-committed-by: Claude (Opus 4.6) <claude@hermes.local >
2026-03-23 19:06:11 +00:00
1c1bfb6407
[claude] Hermes health monitor — system resources + model management ( #1073 ) ( #1133 )
...
Co-authored-by: Claude (Opus 4.6) <claude@hermes.local >
Co-committed-by: Claude (Opus 4.6) <claude@hermes.local >
2026-03-23 18:36:06 +00:00
05e1196ea4
[gemini] feat: add coverage and duration strictness to pytest ( #934 ) ( #1140 )
...
Co-authored-by: Google Gemini <gemini@hermes.local >
Co-committed-by: Google Gemini <gemini@hermes.local >
2026-03-23 18:36:01 +00:00
e8b3d59041
[gemini] feat: Add Claude API fallback tier to cascade.py ( #980 ) ( #1119 )
...
Co-authored-by: Google Gemini <gemini@hermes.local >
Co-committed-by: Google Gemini <gemini@hermes.local >
2026-03-23 18:21:18 +00:00
510d890eb2
[claude] Wire QuotaMonitor.select_model() into cascade router ( #1106 ) ( #1113 )
2026-03-23 18:13:17 +00:00
f2a277f7b5
[claude] Add vllm-mlx as high-performance local inference backend ( #1069 ) ( #1089 )
...
Co-authored-by: Claude (Opus 4.6) <claude@hermes.local >
Co-committed-by: Claude (Opus 4.6) <claude@hermes.local >
2026-03-23 15:34:13 +00:00
48f667c76b
[claude] Integrate Claude Quota Monitor + Metabolic Protocol into cascade router ( #1075 ) ( #1086 )
2026-03-23 15:18:11 +00:00
af0963a8c7
[loop-cycle-1] refactor: break up run_agentic_loop ( #531 ) ( #1084 )
2026-03-23 15:06:59 +00:00
7f875398fc
[claude] Add sovereignty metrics tracking + dashboard panel ( #981 ) ( #1083 )
2026-03-23 14:09:03 +00:00
1697e55cdb
[claude] Add content moderation pipeline (Llama Guard + game-context prompts) ( #1056 ) ( #1059 )
2026-03-23 02:14:42 +00:00
45bde4df58
[claude] Add agent performance regression benchmark suite ( #1015 ) ( #1053 )
2026-03-22 23:55:27 +00:00
1fa5cff5dc
[kimi] Fix GITEA_API configuration in triage scripts ( #951 ) ( #994 )
2026-03-22 22:28:23 +00:00
bebbe442b4
feat: WorldInterface + Heartbeat v2 ( #871 , #872 ) ( #900 )
...
Co-authored-by: Perplexity Computer <perplexity@tower.local >
Co-committed-by: Perplexity Computer <perplexity@tower.local >
2026-03-22 13:44:49 +00:00
2ab6539564
[kimi] Add ConnectionPool class with unit tests ( #769 ) ( #830 )
2026-03-21 22:02:08 +00:00
65df56414a
[kimi] Add visitor_state message handler ( #670 ) ( #699 )
...
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-21 18:08:53 +00:00
f7404f67ec
[kimi] Add system_status message producer ( #681 ) ( #743 )
2026-03-21 15:13:01 +00:00
5f4580f98d
[kimi] Add matrix config loader utility ( #680 ) ( #742 )
2026-03-21 15:05:06 +00:00
ada0774ca6
[kimi] Add Pip familiar state to agent_state messages ( #676 ) ( #738 )
2026-03-21 14:37:39 +00:00
646eaefa3e
[kimi] Add produce_thought() to stream thinking to Matrix ( #672 ) ( #734 )
2026-03-21 14:09:19 +00:00
2fa5b23c0c
[kimi] Add bark message producer for Matrix bark messages ( #671 ) ( #732 )
2026-03-21 14:01:42 +00:00
62bde03f9e
[kimi] feat: add agent_state message producer ( #669 ) ( #698 )
2026-03-21 13:46:10 +00:00
3474eeb4eb
[kimi] refactor: extract presence state serializer from workshop heartbeat ( #668 ) ( #697 )
2026-03-21 13:41:42 +00:00
e92e151dc3
[kimi] refactor: extract WebSocket message types into shared protocol module ( #667 ) ( #696 )
2026-03-21 13:37:28 +00:00
d2a5866650
[loop-cycle-1] fix: use config for xAI base URL ( #647 ) ( #655 )
2026-03-20 22:47:05 +00:00
2381d0b6d0
refactor: break up _create_bug_report — extract helpers ( #645 )
...
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-20 22:03:40 +00:00
03ad2027a4
refactor: break up _load_config into helpers ( #656 )
...
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-20 17:48:08 -04:00
2bfc44ea1b
[loop-cycle-1] refactor: extract _try_prune helper and fix f-string logging ( #653 ) ( #657 )
2026-03-20 17:44:32 -04:00
84302aedac
fix: pass max_tokens to Ollama provider in cascade router ( #622 )
...
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-20 16:27:24 -04:00
f3b3d1e648
[loop-cycle-1658] feat: provider health history endpoint ( #457 ) ( #611 )
2026-03-20 16:09:20 -04:00
7ad0ee17b6
refactor: break up shell.py::run() into helpers ( #551 )
...
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 21:04:10 -04:00
b331aa6139
refactor: break up capture_error() into testable helpers ( #523 )
...
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 20:03:28 -04:00
cd3dc5d989
refactor: break up CascadeRouter.complete() into focused helpers ( #510 )
...
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 19:24:36 -04:00
e4de539bf3
fix: extract ollama_url normalization into shared utility ( #508 )
...
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 19:18:22 -04:00
9ceffd61d1
[loop-cycle-544] fix: use settings.ollama_url fallback in _call_ollama ( #490 ) ( #498 )
2026-03-19 16:18:39 -04:00
d70e4f810a
fix: use settings.ollama_url instead of hardcoded fallback in cascade router ( #491 )
...
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 16:02:20 -04:00
15eb7c3b45
[loop-cycle-538] refactor: remove dead airllm provider from cascade router ( #459 ) ( #481 )
2026-03-19 15:44:10 -04:00
0ae00af3f8
fix: remove AirLLM config settings from config.py ( #475 )
...
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 15:24:43 -04:00
3df526f6ef
[loop-cycle-2] feat: hot-reload providers.yaml without restart ( #458 ) ( #470 )
2026-03-19 15:11:40 -04:00
4a68f6cb8b
[loop-cycle-53] refactor: break circular imports between packages ( #164 ) ( #193 )
2026-03-15 12:52:18 -04:00
96c7e6deae
[loop-cycle-52] fix: remove all qwen3.5 references ( #182 ) ( #190 )
2026-03-15 12:34:21 -04:00
bcd6d7e321
[loop-cycle-50] refactor: replace bare sqlite3.connect() with context managers batch 2 ( #157 ) ( #180 )
2026-03-15 11:58:43 -04:00
5aea8be223
[loop-cycle-47] refactor: replace bare sqlite3.connect() with context managers ( #148 ) ( #155 )
2026-03-15 11:05:39 -04:00
d2c51763d0
[loop-cycle-43] refactor: remove 1035 lines of dead code ( #136 ) ( #146 )
2026-03-15 10:10:12 -04:00
16b31b30cb
fix: shell hand returncode bug, delete worthless python-exec test ( #140 )
...
- Fixed `proc.returncode or 0` bug that masked non-zero exit codes
- Deleted test_run_python_expression — Timmy does not run python, test was environment-dependent garbage
- Fixed test_run_nonzero_exit to use `ls` on nonexistent path instead of sys.executable
1515 passed, 76.7% coverage.
Co-authored-by: Kimi Agent <kimi@timmy.local >
Reviewed-on: http://localhost:3000/rockachopa/Timmy-time-dashboard/pulls/140
Co-authored-by: hermes <hermes@timmy.local >
Co-committed-by: hermes <hermes@timmy.local >
2026-03-15 09:56:50 -04:00
fdc5b861ca
fix: replace 59 bare except clauses with proper logging ( #25 )
...
All `except Exception:` now catch as `except Exception as exc:` with
appropriate logging (warning for critical paths, debug for graceful degradation).
Added logger setup to 4 files that lacked it:
- src/timmy/memory/vector_store.py
- src/dashboard/middleware/csrf.py
- src/dashboard/middleware/security_headers.py
- src/spark/memory.py
31 files changed across timmy core, dashboard, infrastructure, integrations.
Zero bare excepts remain. 1340 tests passing.
2026-03-14 19:07:14 -04:00
efb1feafc9
fix: replace print() with proper logging ( #29 , #51 )
2026-03-14 15:01:34 -04:00
2f623826bd
cleanup: delete dead modules — ~7,900 lines removed
...
Closes #22 , Closes #23
Deleted: brain/, swarm/, openfang/, paperclip/, cascade_adapter,
memory_migrate, agents/timmy.py, dead routes + all corresponding tests.
Updated pyproject.toml, app.py, loop_qa.py for removed imports.
2026-03-14 09:49:24 -04:00
Trip T
78167675f2
feat: replace custom Gitea client with MCP servers
...
Replace the bespoke GiteaHand httpx client and tools_gitea.py wrappers
with official MCP tool servers (gitea-mcp + filesystem MCP), wired into
Agno via MCPTools. Switch all session functions to async (arun/acontinue_run)
so MCP tools auto-connect. Delete ~1070 lines of custom Gitea code.
- Create src/timmy/mcp_tools.py with MCP factories + standalone issue bridge
- Wire MCPTools into agent.py tool list (Gitea + filesystem)
- Switch session.py chat/chat_with_tools/continue_chat to async
- Update all callers (dashboard routes, Discord vendor, CLI, thinking engine)
- Add gitea_token fallback from ~/.config/gitea/token
- Add MCP session cleanup to app shutdown hook
- Update tool_safety.py for MCP tool names
- 11 new tests, all 1417 passing, coverage 74.2%
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-12 21:40:32 -04:00
Trip T
350e6f54ff
fix: prevent "Event loop is closed" on repeated Gitea API calls
...
The httpx AsyncClient was cached across asyncio.run() boundaries.
Each asyncio.run() creates and closes a new event loop, leaving the
cached client's connections on a dead loop. Second+ calls would fail
with "Event loop is closed".
Fix: create a fresh client per request and close it in a finally block.
No more cross-loop client reuse.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-12 20:40:39 -04:00
Trip T
7163b15300
feat: add Gitea issue creation — Timmy's self-improvement channel
...
Give Timmy the ability to file Gitea issues when he notices bugs,
stale state, or improvement opportunities in his own codebase.
Components:
- GiteaHand async API client (infrastructure/hands/gitea.py)
- Token auth with ~/.config/gitea/token fallback
- Create/list/close issues, dedup by title similarity
- Graceful degradation when Gitea unreachable
- Tool functions (timmy/tools_gitea.py)
- create_gitea_issue: file issues with dedup + work order bridge
- list_gitea_issues: check existing backlog
- Classified as SAFE (no confirmation needed)
- Thinking post-hook (_maybe_file_issues in thinking.py)
- Every 20 thoughts, LLM classifies recent thoughts for actionable items
- Auto-files bugs/improvements to Gitea with dedup
- Bridges to local work order system for dashboard tracking
- Config: gitea_url, gitea_token, gitea_repo, gitea_enabled,
gitea_timeout, thinking_issue_every
All 1426 tests pass, 74.17% coverage.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-12 18:36:06 -04:00