- Add stocks table (server/db) with list/get/add/update/delete actions, scoped per user, backing both the chat agent and the /stocks UI via useActionQuery/useActionMutation - Add mobile-first /stocks page (shadcn table/cards, watchlist, search) and wire it into the sidebar, navigation state, and view-screen context - Install the platform's Claude Agent SDK harness (server/plugins, server/routes/api/claude-agent) so the app agent runs on the platform's own Claude subscription instead of the Builder.io gateway; fix the vendored turn.post.ts route to resolve the session and wrap it in runWithRequestContext, since custom /api/ routes aren't auto-wrapped in request context the way /_agent-native/actions/* are - Add shadcn table/badge/dialog/select components (Tabler icons, not lucide)
23 lines
877 B
TypeScript
23 lines
877 B
TypeScript
import { integer, now, real, table, text } from "@agent-native/core/db/schema";
|
|
|
|
export const stocks = table("stocks", {
|
|
id: text("id").primaryKey(),
|
|
symbol: text("symbol").notNull(),
|
|
companyName: text("company_name").notNull(),
|
|
exchange: text("exchange").notNull().default("NASDAQ"),
|
|
sector: text("sector"),
|
|
currency: text("currency").notNull().default("USD"),
|
|
price: real("price").notNull().default(0),
|
|
changePercent: real("change_percent").notNull().default(0),
|
|
marketCap: integer("market_cap"),
|
|
watchlisted: integer("watchlisted", { mode: "boolean" })
|
|
.notNull()
|
|
.default(false),
|
|
ownerEmail: text("owner_email").notNull(),
|
|
createdAt: text("created_at").notNull().default(now()),
|
|
updatedAt: text("updated_at").notNull().default(now()),
|
|
});
|
|
|
|
export type Stock = typeof stocks.$inferSelect;
|
|
export type NewStock = typeof stocks.$inferInsert;
|