Add minimal stock listing app: actions, Postgres schema, stocks page, Claude Agent SDK harness

- 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)
This commit is contained in:
exe.dev user
2026-07-29 12:18:14 +00:00
parent 138d195e4c
commit e859245867
25 changed files with 14804 additions and 10 deletions
+22
View File
@@ -0,0 +1,22 @@
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;