Implement local SQLite backend and reactive UI

This commit is contained in:
2026-05-14 21:28:32 -04:00
parent 4aa3f7b362
commit f95b0ae912
35 changed files with 5444 additions and 2009 deletions

View File

@@ -196,6 +196,7 @@ export type RpcRequestMap = {
"company.setActive": { companyId: string };
"workspace.getSection": { companyId: string; section: string };
"workspace.listSources": { companyId: string };
"workspace.updateSection": { companyId: string; section: string; content: string };
"catalyst.list": { companyId: string };
"alert.list": { companyId?: string; since?: string };
"risk.list": { companyId: string };
@@ -204,6 +205,8 @@ export type RpcRequestMap = {
"filing.list": { companyId: string; since?: string };
"model.get": { companyId: string; tab: string };
"model.updateCell": { companyId: string; tab: string; row: number; col: number; value: string };
"model.createRow": { companyId: string; tab: string; label: string; kind: "actual" | "forecast" | "total"; values?: string[] };
"model.deleteRow": { companyId: string; tab: string; row: number };
"model.runScenario": { companyId: string; scenario: string; overrides: Record<string, string> };
"memo.get": { companyId: string };
"memo.updateSection": {
@@ -256,6 +259,7 @@ export type RpcResponseMap = {
"company.setActive": { ok: boolean };
"workspace.getSection": { content: WorkspaceSection; validationState: string };
"workspace.listSources": { sources: Array<{ type: string; title: string; metadata: string }> };
"workspace.updateSection": { content: WorkspaceSection; savedAt: string };
"catalyst.list": { catalysts: Catalyst[] };
"alert.list": { alerts: Alert[] };
"risk.list": { risks: Risk[] };
@@ -264,6 +268,8 @@ export type RpcResponseMap = {
"filing.list": { filings: Filing[] };
"model.get": { headers: string[]; rows: ModelRow[] };
"model.updateCell": { ok: boolean; affectedCells: string[] };
"model.createRow": { row: ModelRow; position: number };
"model.deleteRow": { ok: boolean };
"model.runScenario": { headers: string[]; rows: ModelRow[] };
"memo.get": {
status: "draft" | "review" | "final";