Commit Graph

260 Commits

Author SHA1 Message Date
76b26ead55 rescue: WS heartbeat ping + commitment tracking from stale PRs (#415)
## What
Manually integrated unique code from two stale PRs that were **not** superseded by merged work.

### PR #399 (kimi/issue-362) — WebSocket heartbeat ping
- 15-second ping loop detects dead iPad/Safari connections
- `_heartbeat()` coroutine launched as background task per WS client
- `ping_task` properly cancelled on disconnect

### PR #408 (kimi/issue-322) — Conversation commitment tracking
- Regex extraction of commitments from Timmy replies (`I'll` / `I will` / `Let me`)
- `_record_commitments()` stores with dedup + cap at 10
- `_tick_commitments()` increments message counter per commitment
- `_build_commitment_context()` surfaces overdue commitments as grounding context
- Wired into `_bark_and_broadcast()` and `_generate_bark()`
- Public API: `get_commitments()`, `close_commitment()`, `reset_commitments()`

### Tests
22 new tests covering both features: extraction, recording, dedup, caps, tick/context, integration, heartbeat ping, dead connection handling.

---
This PR rescues unique code from stale PRs #399 and #408. The other two stale PRs (#402, #411) were already superseded by merged work and should be closed.

Co-authored-by: Perplexity Computer <perplexity@tower.dev>
Reviewed-on: http://localhost:3000/rockachopa/Timmy-time-dashboard/pulls/415
Co-authored-by: Perplexity Computer <perplexity@tower.local>
Co-committed-by: Perplexity Computer <perplexity@tower.local>
2026-03-19 03:22:44 -04:00
4b617cfcd0 fix: deep focus mode — single-problem context for Timmy (#409)
Co-authored-by: Kimi Agent <kimi@timmy.local>
Co-committed-by: Kimi Agent <kimi@timmy.local>
2026-03-19 02:54:19 -04:00
b67dbe922f fix: conversation grounding to prevent topic drift in Workshop (#406)
Co-authored-by: Kimi Agent <kimi@timmy.local>
Co-committed-by: Kimi Agent <kimi@timmy.local>
2026-03-19 02:39:15 -04:00
3571d528ad feat: Workshop Phase 1 — State Schema v1 (#404)
Co-authored-by: Kimi Agent <kimi@timmy.local>
Co-committed-by: Kimi Agent <kimi@timmy.local>
2026-03-19 02:24:13 -04:00
e89aef41bc [loop-cycle-392] refactor: DRY broadcast + bark error logging (#397, #398) (#400) 2026-03-19 02:01:58 -04:00
86224d042d feat: Workshop Phase 4 — visitor chat via WebSocket bark engine (#394)
Co-authored-by: Kimi Agent <kimi@timmy.local>
Co-committed-by: Kimi Agent <kimi@timmy.local>
2026-03-19 01:54:06 -04:00
f9d8509c15 fix: send world state snapshot on WS client connect (#390)
Co-authored-by: Kimi Agent <kimi@timmy.local>
Co-committed-by: Kimi Agent <kimi@timmy.local>
2026-03-19 01:28:57 -04:00
858264be0d fix: deprecate ~/.tower/timmy-state.txt — consolidate on presence.json (#388)
Co-authored-by: Kimi Agent <kimi@timmy.local>
Co-committed-by: Kimi Agent <kimi@timmy.local>
2026-03-19 01:18:52 -04:00
da43421d4e feat: broadcast Timmy state changes via WS relay (#380)
Co-authored-by: Kimi Agent <kimi@timmy.local>
Co-committed-by: Kimi Agent <kimi@timmy.local>
2026-03-19 00:25:11 -04:00
19e7e61c92 [loop-cycle] refactor: DRY PRESENCE_FILE — single source of truth in workshop_state (#381) (#382) 2026-03-18 22:33:06 -04:00
b7573432cc fix: watch presence.json and broadcast state via WS (#379)
Co-authored-by: Kimi Agent <kimi@timmy.local>
Co-committed-by: Kimi Agent <kimi@timmy.local>
2026-03-18 22:22:02 -04:00
3108971bd5 [loop-cycle-155] feat: GET /api/world/state — Workshop bootstrap endpoint (#373) (#378) 2026-03-18 22:13:49 -04:00
864be20dde feat: Workshop state heartbeat for presence.json (#377)
Co-authored-by: Kimi Agent <kimi@timmy.local>
Co-committed-by: Kimi Agent <kimi@timmy.local>
2026-03-18 22:07:32 -04:00
c1f939ef22 fix: add update_gitea_avatar capability (#368)
Co-authored-by: Kimi Agent <kimi@timmy.local>
Co-committed-by: Kimi Agent <kimi@timmy.local>
2026-03-18 22:04:57 -04:00
c1af9e3905 [loop-cycle-154] refactor: extract _annotate_confidence helper — DRY 3x duplication (#369) (#376) 2026-03-18 22:01:51 -04:00
996ccec170 feat: Pip the Familiar — behavioral state machine (#367)
Co-authored-by: Kimi Agent <kimi@timmy.local>
Co-committed-by: Kimi Agent <kimi@timmy.local>
2026-03-18 21:50:36 -04:00
560aed78c3 fix: add cognitive state as observable signal for Matrix avatar (#358)
Co-authored-by: Kimi Agent <kimi@timmy.local>
Co-committed-by: Kimi Agent <kimi@timmy.local>
2026-03-18 21:37:17 -04:00
db7220db5a test: add unit tests for memory/unified.py (#353)
Co-authored-by: Kimi Agent <kimi@timmy.local>
Co-committed-by: Kimi Agent <kimi@timmy.local>
2026-03-18 21:23:03 -04:00
ae10ea782d fix: remove duplicate agent loader test file (#354)
Co-authored-by: Kimi Agent <kimi@timmy.local>
Co-committed-by: Kimi Agent <kimi@timmy.local>
2026-03-18 21:23:00 -04:00
4afc5daffb test: add unit tests for agents/loader.py (#349)
Co-authored-by: Kimi Agent <kimi@timmy.local>
Co-committed-by: Kimi Agent <kimi@timmy.local>
2026-03-18 21:13:01 -04:00
4aa86ff1cb [loop-cycle-150] test: add 22 unit tests for agents/base.py — BaseAgent and SubAgent (#350) 2026-03-18 21:10:08 -04:00
11357ffdb4 test: add comprehensive unit tests for agentic_loop.py (#345)
Co-authored-by: Kimi Agent <kimi@timmy.local>
Co-committed-by: Kimi Agent <kimi@timmy.local>
2026-03-18 20:54:02 -04:00
fcbb2b848b test: add unit tests for jot_note and log_decision artifact tools (#341)
Co-authored-by: Kimi Agent <kimi@timmy.local>
Co-committed-by: Kimi Agent <kimi@timmy.local>
2026-03-18 20:47:38 -04:00
22e0d2d4b3 [loop-cycle-66] fix: replace language-model with inference-backend in error messages (#334) 2026-03-18 20:27:06 -04:00
bfd924fe74 [loop-cycle-65] feat: scaffold three-phase loop skeleton (#324) (#330) 2026-03-18 20:11:02 -04:00
844923b16b [loop-cycle-65] fix: validate file paths before filing thinking-engine issues (#327) (#329) 2026-03-18 20:07:19 -04:00
9a21a4b0ff feat: SensoryEvent model + SensoryBus dispatcher (#318)
Co-authored-by: Kimi Agent <kimi@timmy.local>
Co-committed-by: Kimi Agent <kimi@timmy.local>
2026-03-18 19:02:12 -04:00
ab71c71036 feat: time adapter — circadian awareness for Timmy (#315)
Co-authored-by: Kimi Agent <kimi@timmy.local>
Co-committed-by: Kimi Agent <kimi@timmy.local>
2026-03-18 18:47:09 -04:00
39939270b7 fix: Gitea webhook adapter — normalize events to sensory bus (#309)
Co-authored-by: Kimi Agent <kimi@timmy.local>
Co-committed-by: Kimi Agent <kimi@timmy.local>
2026-03-18 18:37:01 -04:00
234187c091 fix: add periodic memory status checks during thought tracking (#311)
Co-authored-by: Kimi Agent <kimi@timmy.local>
Co-committed-by: Kimi Agent <kimi@timmy.local>
2026-03-18 18:26:53 -04:00
f4106452d2 feat: implement v1 API endpoints for iPad app (#312)
Co-authored-by: manus <manus@timmy.local>
Co-committed-by: manus <manus@timmy.local>
2026-03-18 18:20:14 -04:00
f5a570c56d fix: add real-time data disclaimer to welcome message (#304) 2026-03-18 16:56:21 -04:00
rockachopa
96e7961a0e fix: make confidence visible to users when below 0.7 threshold (#259)
Co-authored-by: rockachopa <alexpaynex@gmail.com>
Co-committed-by: rockachopa <alexpaynex@gmail.com>
2026-03-15 19:36:52 -04:00
bcbdc7d7cb feat: add thought_search tool for querying Timmy's thinking history (#260)
Co-authored-by: Kimi Agent <kimi@timmy.local>
Co-committed-by: Kimi Agent <kimi@timmy.local>
2026-03-15 19:35:58 -04:00
80aba0bf6d [loop-cycle-63] feat: session_history tool — Timmy searches past conversations (#251) (#258) 2026-03-15 15:11:43 -04:00
dd34dc064f [loop-cycle-62] fix: MEMORY.md corruption and hot memory staleness (#252) (#256) 2026-03-15 15:01:19 -04:00
7bc355eed6 [loop-cycle-61] fix: strip think tags and harden fact parsing (#237) (#254) 2026-03-15 14:50:09 -04:00
f9911c002c [loop-cycle-60] fix: retry with backoff on Ollama GPU contention (#70) (#238) 2026-03-15 14:28:47 -04:00
7f656fcf22 [loop-cycle-59] feat: gematria computation tool (#234) (#235) 2026-03-15 14:14:38 -04:00
8c63dabd9d [loop-cycle-57] fix: wire confidence estimation into chat flow (#231) (#232) 2026-03-15 13:58:35 -04:00
a50af74ea2 [loop-cycle-56] fix: resolve 5 lint errors on main (#203) (#224) 2026-03-15 13:40:40 -04:00
b4cb3e9975 [loop-cycle-54] refactor: consolidate three memory stores into single table (#37) (#223) 2026-03-15 13:33:24 -04:00
4a68f6cb8b [loop-cycle-53] refactor: break circular imports between packages (#164) (#193) 2026-03-15 12:52:18 -04:00
b3840238cb [loop-cycle-52] feat: response audit trail with inputs, confidence, errors (#144) (#191) 2026-03-15 12:34:48 -04:00
96c7e6deae [loop-cycle-52] fix: remove all qwen3.5 references (#182) (#190) 2026-03-15 12:34:21 -04:00
766add6415 [loop-cycle-52] test: comprehensive session_logger.py coverage (#175) (#187) 2026-03-15 12:26:50 -04:00
e8dd065ad7 [loop-cycle-51] perf: mock subprocess in slow introspection test (#172) (#184) 2026-03-15 12:17:50 -04:00
5b57bf3dd0 [loop-cycle-50] fix: agent retry uses exponential backoff instead of fixed 1s delay (#174) (#181) 2026-03-15 12:08:30 -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
ca01ce62ad [loop-cycle-49] fix: mock _warmup_model in agent tests to prevent Ollama network calls (#159) (#177) 2026-03-15 11:46:20 -04:00