Files
asepharyana 8c184ccae1 feat: add Citations and WatchlistChat components, integrate with API
- Implemented Citations component to display citation data.
- Created WatchlistDrawer and ChatSidebar components for managing watchlists and AI chat functionality.
- Integrated API calls for watchlist management and chat interactions.
- Updated index.tsx to include new components in the main application layout.
- Added API client in lib/api.ts for structured API interactions.
- Developed Alerts, Dashboard, Portfolio, Routines, Screener, and Report pages with relevant data fetching and UI components.
- Introduced styles in tokens.css for consistent theming across the application.
- Configured TypeScript and Vite for project setup and development.
2026-09-15 12:36:48 +07:00

84 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Architecture
## Layout
```
flowsight/
TODO.md / ROADMAP.md # work tracking (shiro-neko style)
docs/ # specs (this folder) — change before code
backend/ # Go 1.23 module (see TECH-STACK.md)
cmd/server/main.go # entrypoint: HTTP server + scheduler in one process
internal/
config/ # env (SECTORS_API_KEY), credit budget, schedules
sectors/ # SectorsClient + endpoint packages per category
client.go # retry, credit counter, param narrowing defaults
screener.go # companies/, free-float/, taxonomy
company.go # report, segments, quarterly, actions, shareholders
market.go # close/, daily, idx-total, index-daily, movers
brokers.go # registry cache, activity, summary, foreign-flow
events.go # news, filings, suspensions
store/
db.go # database/sql connect + numbered migrations
seed.go # historical-replay fixture loader
cache.go # Redis wrapper + in-memory TTL fallback
agents/ # 7 specialists + synthesizer (see AGENT-SPECS.md)
agent.go # Agent contract: Analyze() -> AgentResult + citations
smart_money.go broker_intel.go sentiment.go fundamental.go
technical.go catalyst.go synthesizer.go
routines/ # 7 routines (see ROUTINES.md)
engine.go # cron dispatch, run recording, delivery, SSE publish
briefing.go # R1 briefing + R2 radar + R3 reversal + R4 insider + R5/R6 countdowns + R7 review
alerts/
rules.go # 6 detection rules over snapshots
evaluate.go # per-cycle evaluation
notify.go # Telegram/Discord webhooks
reports/
report.go # 7-section assembly + citations[] (returns persisted id)
render.go # PDF/HTML/MD/JSON exporters
api/ # chi route handlers (see API.md)
flow.go screen.go routines.go health.go alerts.go
report.go interrogate.go watchlist.go portfolio.go chat.go stream.go
scheduler/ # robfig/cron wiring (ingestion + routines)
web/ # SolidJS 1.9 + Vite 6 + typed CSS
src/
pages/ # Dashboard, Routines, Alerts, Screener, Portfolio, Report
components/ # cards, tables, rotation map, correlation matrix
lib/api.ts # typed backend client + SSE hooks
styles/ # CSS tokens + themes (tokens.css)
backend/tests/
fixtures/ # historical snapshots (one trading week, manifest.json)
seed + agents + rules + evaluate + api + routines + client + accuracy tests
```
## Conventions
- Spec-first: docs/ updated before code; a PR without a doc touch needs a reason.
- Every outbound Sectors call goes through `SectorsClient` (credit counted, sections
explicit, classification combos minimal). No raw HTTP to the API elsewhere.
- Every number in user-visible output carries `{endpoint, snapshot_at}` citation.
Builders that emit numbers without citations fail review.
- Tests: one test file per agent/rule + budget test asserting per-cycle credits ≤ cap
on fixtures. `go vet` + `gofmt` and `tsc` + `vite build` before commit.
## Scheduler
- Ingestion cycle every 30 min, 09:00–16:00 WIB (market hours). Steps in order:
reference cache check → universe sweep → market context → per-watchlist depth →
incremental events → quarterly freshness → rule evaluation → routine dispatch.
- Routine schedules are cron exprs stored per routine row; engine records each run
(started_at, status, payload) for the Routine Manager history view.
## Citation pipeline
1. Ingestion stores raw payload + `snapshot_at` in `snapshots`.
2. Agents/detectors read snapshots, emit values tagged with snapshot IDs.
3. Reports/alerts/briefings serialize `citations[]` alongside values.
4. Frontend renders citation chips (endpoint + time); stale (>1 session) chips are
visually marked.
## SSE design
- `GET /api/stream` (EventSource): channels `agents` (status+scores during runs),
`alerts` (new events), `activity` (feed rows). Heartbeat 15 s; reconnect resumes
from last event ID. No WebSocket — one-directional push is all the UI needs.