Adds the data layer for per-item agent prompts. Markdown frontmatter gets an `agent_prompt:` block scalar that survives the importer round-trip (newlines preserved), and `resolveWorkflowPrompt()` walks task → epic → plan → built-in default returning both the resolved string and the source level. Walk is slug-based, not parent_id-based, because the importer leaves parent_id briefly null mid-transaction. tRPC `backlog.getWorkflowPrompt` returns ownOverride + effectivePrompt so future UI can render the override box + preview without two queries. `backlog.updateWorkflowPrompt` is owner/admin-gated (prompts change downstream Cursor/Claude behavior) and audit-logged on every write. UI deferred — apps/web doesn't have a backlog-item detail panel yet; the existing object-detail panel is for the objects table. Follow-up filed at Task-workflow-prompt-task-detail-ui.md. Co-authored-by: Cursor <cursoragent@cursor.com>
40 lines
1.5 KiB
TypeScript
40 lines
1.5 KiB
TypeScript
import { router, createCallerFactory } from "@/server/trpc";
|
|
import { healthRouter } from "@/server/routers/health";
|
|
import { objectsRouter } from "@/server/routers/objects";
|
|
import { propertiesRouter } from "@/server/routers/properties";
|
|
import { relationsRouter } from "@/server/routers/relations";
|
|
import { aiRouter } from "@/server/routers/ai";
|
|
import { templatesRouter } from "@/server/routers/templates";
|
|
import { searchRouter } from "@/server/routers/search";
|
|
import { workspacesRouter } from "@/server/routers/workspaces";
|
|
import { typesRouter } from "@/server/routers/types";
|
|
import { formsRouter } from "@/server/routers/forms";
|
|
import { favoritesRouter } from "@/server/routers/favorites";
|
|
import { identityRouter } from "@/server/routers/identity";
|
|
import { invitesRouter } from "@/server/routers/invites";
|
|
import { auditRouter } from "@/server/routers/audit";
|
|
import { runsRouter } from "@/server/routers/runs";
|
|
import { backlogRouter } from "@/server/routers/backlog";
|
|
|
|
export const appRouter = router({
|
|
health: healthRouter,
|
|
workspaces: workspacesRouter,
|
|
types: typesRouter,
|
|
objects: objectsRouter,
|
|
properties: propertiesRouter,
|
|
relations: relationsRouter,
|
|
ai: aiRouter,
|
|
templates: templatesRouter,
|
|
search: searchRouter,
|
|
forms: formsRouter,
|
|
favorites: favoritesRouter,
|
|
identity: identityRouter,
|
|
invites: invitesRouter,
|
|
audit: auditRouter,
|
|
runs: runsRouter,
|
|
backlog: backlogRouter,
|
|
});
|
|
|
|
export type AppRouter = typeof appRouter;
|
|
|
|
export const createCaller = createCallerFactory(appRouter);
|