- 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)
25 lines
806 B
TypeScript
25 lines
806 B
TypeScript
import { defineAction } from "@agent-native/core/action";
|
|
import { and, eq } from "@agent-native/core/db/schema";
|
|
import { z } from "zod";
|
|
|
|
import { getDb } from "../server/db/index.js";
|
|
import { stocks } from "../server/db/schema.js";
|
|
|
|
export default defineAction({
|
|
description: "Delete a stock listing by id.",
|
|
schema: z.object({
|
|
id: z.string().describe("Stock listing id"),
|
|
}),
|
|
http: { method: "DELETE" },
|
|
run: async (args, ctx) => {
|
|
if (!ctx?.userEmail) throw new Error("Authentication required.");
|
|
const db = getDb();
|
|
const deleted = await db
|
|
.delete(stocks)
|
|
.where(and(eq(stocks.id, args.id), eq(stocks.ownerEmail, ctx.userEmail)))
|
|
.returning();
|
|
if (!deleted[0]) throw new Error("Stock not found.");
|
|
return { deleted: true, id: args.id };
|
|
},
|
|
});
|