* fix: specify TS_NODE_PROJECT for dev:server script ts-node/register resolves tsconfig from the entry file upward, finding the root solution-style tsconfig.json (no compilerOptions). This causes target to default to ES3, breaking MapIterator spread syntax (TS2802). Set TS_NODE_PROJECT env var to point to the server tsconfig which targets ES2024. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add token usage tracking, context display, and dynamic context length - Intercept SSE proxy to capture run.completed events and persist token usage (input_tokens, output_tokens) per session to SQLite/JSON store - Display context usage bar in ChatInput showing used/total/remaining tokens - Resolve actual context length from Hermes models_dev_cache.json based on the active profile's default model (fallback 200K), with 5min in-memory cache - Move sessions-db.ts to db/hermes/ for unified database layer - Add usage store with SQLite + JSON fallback (auto-migration via ensureTable) - Fix proxy SSE path regex to match rewritten upstream path - Fix route ordering: /sessions/usage before /sessions/:id to avoid 404 - Fetch per-session usage on session enter instead of batch - Add unit tests for usage-store, db index, and proxy SSE interception Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
17 lines
888 B
TypeScript
17 lines
888 B
TypeScript
import Router from '@koa/router'
|
|
import * as ctrl from '../../controllers/hermes/sessions'
|
|
|
|
export const sessionRoutes = new Router()
|
|
|
|
sessionRoutes.get('/api/hermes/sessions/conversations', ctrl.listConversations)
|
|
sessionRoutes.get('/api/hermes/sessions/conversations/:id/messages', ctrl.getConversationMessages)
|
|
sessionRoutes.get('/api/hermes/sessions', ctrl.list)
|
|
sessionRoutes.get('/api/hermes/search/sessions', ctrl.search)
|
|
sessionRoutes.get('/api/hermes/sessions/search', ctrl.search)
|
|
sessionRoutes.get('/api/hermes/sessions/usage', ctrl.usageBatch)
|
|
sessionRoutes.get('/api/hermes/sessions/context-length', ctrl.contextLength)
|
|
sessionRoutes.get('/api/hermes/sessions/:id', ctrl.get)
|
|
sessionRoutes.get('/api/hermes/sessions/:id/usage', ctrl.usageSingle)
|
|
sessionRoutes.delete('/api/hermes/sessions/:id', ctrl.remove)
|
|
sessionRoutes.post('/api/hermes/sessions/:id/rename', ctrl.rename)
|