init commit

This commit is contained in:
2026-02-17 00:23:25 -05:00
commit 79b6a5e225
25 changed files with 1648 additions and 0 deletions
+12
View File
@@ -0,0 +1,12 @@
{:paths ["src" "resources"]
:deps {org.clojure/clojure {:mvn/version "1.12.0"}
http-kit/http-kit {:mvn/version "2.8.0"}
metosin/reitit {:mvn/version "0.7.2"}
ring/ring-core {:mvn/version "1.13.0"}
ajet/chat-shared {:local/root "../shared"}}
:aliases
{:run {:main-opts ["-m" "ajet.chat.tui-sm.core"]}
:dev {:extra-paths ["dev"]
:extra-deps {nrepl/nrepl {:mvn/version "1.3.0"}
cider/cider-nrepl {:mvn/version "0.50.2"}
refactor-nrepl/refactor-nrepl {:mvn/version "3.10.0"}}}}}
+28
View File
@@ -0,0 +1,28 @@
# TUI Session Manager Plan
## Overview
Server-side session manager for terminal clients (CLI + TUI).
Holds live SSE connections, delivers real-time events.
## Stack
- http-kit (HTTP server + SSE)
- reitit (routing) + Ring middleware
- NATS (via shared/) for event pub/sub — no direct PG connection
- Reads data from API (internal HTTP calls)
## Responsibilities
- Manage live SSE connections for terminal clients
- Subscribe to NATS for real-time events (messages, presence, typing)
- Publish ephemeral events (typing indicators) to NATS — no API round-trip
- Fetch full data from API when notification contains only IDs
- Sits behind auth gateway (all requests pre-authenticated)
## TODO
- [ ] http-kit server setup with SSE
- [ ] Connection tracking (atom of connected SSE clients)
- [ ] HTTP POST endpoints for client→server signals (typing indicators)
- [ ] NATS subscription for chat events
- [ ] NATS publish for typing indicators
- [x] Internal API client for data fetches — `ajet.chat.shared.api-client` in shared/
- [ ] Event filtering: deliver only relevant events per client
- [ ] Presence batching: buffer heartbeat events, flush 1x/min
+5
View File
@@ -0,0 +1,5 @@
(ns ajet.chat.tui-sm.core
"TUI session manager — http-kit WebSocket/SSE for terminal clients.")
(defn -main [& _args]
(println "ajet-chat TUI session manager starting..."))