kimi
9acc0150f1
fix: auto-detect issue number from git branch in cycle_retro
...
Tests / lint (pull_request) Successful in 3s
Tests / test (pull_request) Successful in 1m21s
When --issue is not provided, cycle_retro.py now parses the current
git branch name (e.g. kimi/issue-492) to extract the issue number.
This prevents all retro records from having issue=null when the
caller omits the flag.
Fixes #492
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-19 16:16:43 -04:00
b6d0b5f999
feat: epoch turnover notation for loopstat cycles ⟳WW.D:NNN ( #496 )
Tests / lint (push) Successful in 3s
Tests / test (push) Has been cancelled
2026-03-19 16:12:10 -04:00
d70e4f810a
fix: use settings.ollama_url instead of hardcoded fallback in cascade router ( #491 )
...
Tests / lint (push) Successful in 3s
Tests / test (push) Successful in 1m20s
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 16:02:20 -04:00
7f20742fcf
fix: replace hardcoded secret placeholder in CSRF middleware docstring ( #488 )
...
Tests / lint (push) Successful in 4s
Tests / test (push) Successful in 1m11s
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 15:52:29 -04:00
15eb7c3b45
[loop-cycle-538] refactor: remove dead airllm provider from cascade router ( #459 ) ( #481 )
Tests / lint (push) Successful in 3s
Tests / test (push) Successful in 1m28s
2026-03-19 15:44:10 -04:00
dbc2fd5b0f
[loop-cycle-536] fix: validate_startup checks CORS wildcard in production ( #472 ) ( #478 )
Tests / lint (push) Successful in 2s
Tests / test (push) Successful in 1m21s
2026-03-19 15:29:26 -04:00
3c3aca57f1
[loop-cycle-535] perf: cache Timmy agent at startup ( #471 ) ( #476 )
...
Tests / lint (push) Successful in 2s
Tests / test (push) Has been cancelled
## What
Cache the Timmy agent instance at app startup (in lifespan) instead of creating a new one per `/serve/chat` request.
## Changes
- `src/timmy_serve/app.py`: Create agent in lifespan, store in `app.state.timmy`
- `tests/timmy/test_timmy_serve_app.py`: Updated tests for lifespan-based caching, added `test_agent_cached_at_startup`
2085 unit tests pass. 2102 pre-push tests pass. 78.5% coverage.
Closes #471
Co-authored-by: Timmy <timmy@timmytime.ai >
Reviewed-on: http://localhost:3000/rockachopa/Timmy-time-dashboard/pulls/476
Co-authored-by: Timmy Time <timmy@Alexanderwhitestone.ai >
Co-committed-by: Timmy Time <timmy@Alexanderwhitestone.ai >
2026-03-19 15:28:57 -04:00
0ae00af3f8
fix: remove AirLLM config settings from config.py ( #475 )
...
Tests / lint (push) Successful in 4s
Tests / test (push) Successful in 1m18s
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 )
Tests / lint (push) Failing after 3s
Tests / test (push) Has been skipped
2026-03-19 15:11:40 -04:00
50aaf60db2
[loop-cycle-2] fix: strip CORS wildcards in production ( #462 ) ( #469 )
Tests / lint (push) Successful in 3s
Tests / test (push) Successful in 1m1s
2026-03-19 15:05:27 -04:00
a751be3038
fix: default CORS origins to localhost instead of wildcard ( #467 )
...
Tests / lint (push) Successful in 4s
Tests / test (push) Successful in 2m19s
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 14:57:36 -04:00
92594ea588
[loop-cycle] feat: implement source distinction in system prompts ( #463 ) ( #464 )
Tests / lint (push) Successful in 3s
Tests / test (push) Successful in 1m28s
2026-03-19 14:49:31 -04:00
12582ab593
fix: stabilize flaky test_uses_model_when_available ( #456 )
...
Tests / lint (push) Successful in 3s
Tests / test (push) Successful in 1m25s
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 14:39:33 -04:00
72c3a0a989
fix: integration tests for agentic loop WS broadcasts ( #452 )
...
Tests / lint (push) Successful in 4s
Tests / test (push) Successful in 1m8s
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 14:30:00 -04:00
de089cec7f
[loop-cycle-524] fix: remove numpy test dependency in test_memory_embeddings ( #451 )
Tests / lint (push) Successful in 2s
Tests / test (push) Successful in 1m38s
2026-03-19 14:22:13 -04:00
3590c1689e
fix: make _get_loop_agent singleton thread-safe ( #449 )
...
Tests / lint (push) Successful in 3s
Tests / test (push) Failing after 1m20s
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 14:18:27 -04:00
2161c32ae8
fix: add unit tests for agentic_loop.py ( #421 ) ( #447 )
...
Tests / lint (push) Successful in 2s
Tests / test (push) Failing after 1m12s
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 14:13:50 -04:00
98b1142820
[loop-cycle-522] test: add unit tests for agentic_loop.py ( #421 ) ( #441 )
Tests / lint (push) Successful in 3s
Tests / test (push) Failing after 1m5s
2026-03-19 14:10:16 -04:00
1d79a36bd8
fix: add unit tests for memory/embeddings.py ( #437 )
...
Tests / lint (push) Successful in 3s
Tests / test (push) Failing after 1m5s
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 11:12:46 -04:00
cce311dbb8
[loop-cycle] test: add unit tests for briefing.py ( #422 ) ( #438 )
Tests / lint (push) Successful in 7s
Tests / test (push) Successful in 1m15s
2026-03-19 10:50:21 -04:00
3cde310c78
fix: idle detection + exponential backoff for dev loop ( #435 )
...
Tests / lint (push) Successful in 4s
Tests / test (push) Successful in 1m7s
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 10:36:39 -04:00
cdb1a7546b
fix: add workshop props — bookshelf, candles, crystal ball glow ( #429 )
...
Tests / lint (push) Successful in 4s
Tests / test (push) Successful in 1m31s
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 10:29:18 -04:00
a31c929770
fix: add unit tests for tools.py ( #428 )
...
Tests / lint (push) Successful in 4s
Tests / test (push) Successful in 1m19s
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 10:17:36 -04:00
3afb62afb7
fix: add self_reflect tool for past behavior review ( #417 )
...
Tests / lint (push) Successful in 4s
Tests / test (push) Successful in 1m2s
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 09:39:14 -04:00
332fa373b8
fix: wire cognitive state to sensory bus (presence loop) ( #414 )
...
Tests / lint (push) Failing after 17m22s
Tests / test (push) Has been skipped
## Summary
- CognitiveTracker.update() now emits `cognitive_state_changed` events to the SensoryBus
- WorkshopHeartbeat (and other subscribers) react immediately to mood/engagement changes
- Closes the sense → memory → react loop described in the Workshop architecture
- Fire-and-forget emission — never blocks the chat response path
- Gracefully skips when no event loop is running (sync contexts/tests)
## Test plan
- [x] 3 new tests: event emission, mood change tracking, graceful skip without loop
- [x] All 1935 unit tests pass
- [x] Lint + format clean
Fixes #222
Co-authored-by: kimi <kimi@localhost>
Reviewed-on: http://localhost:3000/rockachopa/Timmy-time-dashboard/pulls/414
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 03:23:03 -04:00
76b26ead55
rescue: WS heartbeat ping + commitment tracking from stale PRs ( #415 )
...
Tests / lint (push) Has been cancelled
Tests / test (push) Has been cancelled
## 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
63e4542f31
fix: serve AlexanderWhitestone.com as static site ( #416 )
...
Tests / test (push) Has been cancelled
Tests / lint (push) Has been cancelled
Replace auth-gated dashboard proxy with static file serving for The Wizard's Tower — two rooms (Workshop + Scrolls), no auth, no tracking, proper caching headers for 3D assets and RSS feed.
Fixes #211
Co-authored-by: kimi <kimi@localhost>
Reviewed-on: http://localhost:3000/rockachopa/Timmy-time-dashboard/pulls/416
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 03:22:23 -04:00
9b8ad3629a
fix: wire Pip familiar into Workshop state pipeline ( #412 )
...
Tests / lint (push) Successful in 4s
Tests / test (push) Successful in 1m14s
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 03:09:22 -04:00
4b617cfcd0
fix: deep focus mode — single-problem context for Timmy ( #409 )
...
Tests / lint (push) Successful in 4s
Tests / test (push) Successful in 1m10s
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 )
...
Tests / lint (push) Successful in 3s
Tests / test (push) Successful in 56s
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 )
...
Tests / lint (push) Successful in 3s
Tests / test (push) Successful in 57s
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 02:24:13 -04:00
ab3546ae4b
feat: Workshop Phase 2 — Scene MVP (Three.js room) ( #401 )
...
Tests / lint (push) Successful in 4s
Tests / test (push) Successful in 1m1s
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 02:14:09 -04:00
e89aef41bc
[loop-cycle-392] refactor: DRY broadcast + bark error logging ( #397 , #398 ) ( #400 )
Tests / lint (push) Successful in 4s
Tests / test (push) Successful in 1m27s
2026-03-19 02:01:58 -04:00
86224d042d
feat: Workshop Phase 4 — visitor chat via WebSocket bark engine ( #394 )
...
Tests / lint (push) Successful in 5s
Tests / test (push) Successful in 1m27s
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 01:54:06 -04:00
2209ac82d2
fix: canonically connect the Tower to the Workshop ( #392 )
...
Tests / lint (push) Successful in 3s
Tests / test (push) Successful in 1m14s
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 01:38:59 -04:00
f9d8509c15
fix: send world state snapshot on WS client connect ( #390 )
...
Tests / lint (push) Successful in 4s
Tests / test (push) Successful in 1m4s
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 )
...
Tests / lint (push) Successful in 3s
Tests / test (push) Successful in 1m8s
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 01:18:52 -04:00
3c10da489b
fix: enhance tox dev environment (port, banner, reload) ( #386 )
...
Tests / lint (push) Successful in 3s
Tests / test (push) Successful in 1m9s
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 01:08:49 -04:00
da43421d4e
feat: broadcast Timmy state changes via WS relay ( #380 )
...
Tests / lint (push) Successful in 3s
Tests / test (push) Successful in 54s
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-19 00:25:11 -04:00
aa4f1de138
fix: DRY PRESENCE_FILE — single source of truth ( #383 )
...
Tests / lint (push) Successful in 7s
Tests / test (push) Successful in 1m13s
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-18 22:38:40 -04:00
19e7e61c92
[loop-cycle] refactor: DRY PRESENCE_FILE — single source of truth in workshop_state ( #381 ) ( #382 )
Tests / lint (push) Successful in 4s
Tests / test (push) Successful in 1m14s
2026-03-18 22:33:06 -04:00
b7573432cc
fix: watch presence.json and broadcast state via WS ( #379 )
...
Tests / lint (push) Successful in 4s
Tests / test (push) Successful in 1m26s
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 )
Tests / lint (push) Successful in 3s
Tests / test (push) Successful in 1m29s
2026-03-18 22:13:49 -04:00
864be20dde
feat: Workshop state heartbeat for presence.json ( #377 )
...
Tests / lint (push) Successful in 3s
Tests / test (push) Successful in 1m58s
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 )
...
Tests / lint (push) Successful in 6s
Tests / test (push) Successful in 1m46s
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 )
Tests / lint (push) Successful in 4s
Tests / test (push) Successful in 1m35s
2026-03-18 22:01:51 -04:00
996ccec170
feat: Pip the Familiar — behavioral state machine ( #367 )
...
Tests / lint (push) Successful in 5s
Tests / test (push) Successful in 1m32s
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 )
...
Tests / lint (push) Successful in 2s
Tests / test (push) Successful in 1m11s
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-18 21:37:17 -04:00
c7198b1254
[loop-cycle-152] feat: define canonical presence schema for Workshop ( #265 ) ( #359 )
Tests / lint (push) Successful in 2s
Tests / test (push) Has been cancelled
2026-03-18 21:36:06 -04:00
43efb01c51
fix: remove duplicate agent loader test file ( #356 )
...
Tests / lint (push) Successful in 3s
Tests / test (push) Successful in 1m27s
Co-authored-by: Kimi Agent <kimi@timmy.local >
Co-committed-by: Kimi Agent <kimi@timmy.local >
2026-03-18 21:28:10 -04:00