Files
rohitg00__agentmemory/iii-config.yaml
T
Rohit Ghumare e2d8e70041 feat: viewer UI redesign with real-time streaming (#10)
* feat: viewer UI redesign with real-time streaming and newsprint design

Redesigned the agentmemory viewer with a newsprint-inspired design system
and added real-time live updates via iii-engine StreamModule.

Viewer UI:
- Newsprint design with Playfair Display / Lora / Inter typography
- Dashboard with semantic memory, procedural memory, consolidation status
- Knowledge graph with curved edges, node shapes, legend, search, tooltips
- Visual vertical timeline with alternating cards and type filter chips
- Activity tab with GitHub-style heatmap, type breakdown, activity feed
- Profile, Sessions, Audit, Memories tabs

Real-time streaming:
- Fixed stream event propagation (engine uses exact group_id matching)
- Added viewer broadcast group for cross-session live updates
- Switched from blocking trigger to fire-and-forget triggerVoid
- Viewer subscribes to 'viewer' group, handles create/update events

New files:
- iii-config.yaml: engine config with StreamModule, PubSub, Otel
- src/viewer/server.ts: standalone viewer HTTP server on port 3113

API additions:
- GET /agentmemory/memories endpoint with ?latest=true filter
- Viewer file resolution with multiple candidate paths

* fix: address review findings — CORS, 404 status, validation, cleanup

- Restrict CORS allowed_origins to local dev origins instead of wildcard
- Return 404 instead of 200 when viewer HTML file is not found
- Add /agentmemory/viewer path to standalone viewer server routing
- Validate sessionId in session/end handler before KV operations
- Clear stale graph nodes/edges before writing rebuilt data
- Capture viewer server and close gracefully on shutdown

* fix: dynamic CORS origin validation and memNode property accumulation

Replace static CORS wildcard with dynamic corsHeaders(req) that validates
the request Origin against an allowlist. Pass req to all json() call sites.
Change memNode.properties from scalar memoryId/memoryType to array-based
memoryIds/memoryTypes to prevent overwrite when multiple memories map to
the same graph node.
2026-03-04 04:38:59 +00:00

52 lines
1.2 KiB
YAML

modules:
- class: modules::state::StateModule
config:
adapter:
class: modules::state::adapters::KvStore
config:
store_method: file_based
file_path: ./data/state_store.db
- class: modules::api::RestApiModule
config:
port: 3111
host: 127.0.0.1
default_timeout: 180000
cors:
allowed_origins: ["http://localhost:3111", "http://localhost:3113", "http://127.0.0.1:3111", "http://127.0.0.1:3113"]
allowed_methods: [GET, POST, PUT, DELETE, OPTIONS]
- class: modules::queue::QueueModule
config:
adapter:
class: modules::queue::BuiltinQueueAdapter
- class: modules::pubsub::PubSubModule
config:
adapter:
class: modules::pubsub::LocalAdapter
- class: modules::cron::CronModule
config:
adapter:
class: modules::cron::KvCronAdapter
- class: modules::stream::StreamModule
config:
port: 3112
host: 127.0.0.1
- class: modules::observability::OtelModule
config:
enabled: true
service_name: agentmemory
exporter: memory
logs_enabled: true
- class: modules::shell::ExecModule
config:
watch:
- src/**/*.ts
exec:
- node dist/index.mjs