feat(11-05): add spawnArchitect tRPC procedures
- Add spawnArchitectDiscuss for context-gathering mode - Add spawnArchitectBreakdown for phase decomposition mode - Both procedures validate initiative exists before spawning - Use comprehensive prompts from agent/prompts module
This commit is contained in:
@@ -16,6 +16,7 @@ import type { PhaseRepository } from '../db/repositories/phase-repository.js';
|
||||
import type { DispatchManager } from '../dispatch/types.js';
|
||||
import type { CoordinationManager } from '../coordination/types.js';
|
||||
import type { Phase } from '../db/schema.js';
|
||||
import { buildDiscussPrompt, buildBreakdownPrompt } from '../agent/prompts.js';
|
||||
|
||||
/**
|
||||
* Initialize tRPC with our context type.
|
||||
@@ -839,6 +840,74 @@ export const appRouter = router({
|
||||
}
|
||||
return created;
|
||||
}),
|
||||
|
||||
// ===========================================================================
|
||||
// Architect Spawn Procedures
|
||||
// ===========================================================================
|
||||
|
||||
/**
|
||||
* Spawn architect in discuss mode.
|
||||
* Uses comprehensive discuss prompt to gather context from user.
|
||||
*/
|
||||
spawnArchitectDiscuss: publicProcedure
|
||||
.input(z.object({
|
||||
name: z.string().min(1),
|
||||
initiativeId: z.string().min(1),
|
||||
context: z.string().optional(),
|
||||
}))
|
||||
.mutation(async ({ ctx, input }) => {
|
||||
const agentManager = requireAgentManager(ctx);
|
||||
const initiativeRepo = requireInitiativeRepository(ctx);
|
||||
|
||||
const initiative = await initiativeRepo.findById(input.initiativeId);
|
||||
if (!initiative) {
|
||||
throw new TRPCError({
|
||||
code: 'NOT_FOUND',
|
||||
message: `Initiative '${input.initiativeId}' not found`,
|
||||
});
|
||||
}
|
||||
|
||||
const prompt = buildDiscussPrompt(initiative, input.context);
|
||||
|
||||
return agentManager.spawn({
|
||||
name: input.name,
|
||||
taskId: input.initiativeId,
|
||||
prompt,
|
||||
mode: 'discuss',
|
||||
});
|
||||
}),
|
||||
|
||||
/**
|
||||
* Spawn architect in breakdown mode.
|
||||
* Uses comprehensive breakdown prompt to decompose initiative into phases.
|
||||
*/
|
||||
spawnArchitectBreakdown: publicProcedure
|
||||
.input(z.object({
|
||||
name: z.string().min(1),
|
||||
initiativeId: z.string().min(1),
|
||||
contextSummary: z.string().optional(),
|
||||
}))
|
||||
.mutation(async ({ ctx, input }) => {
|
||||
const agentManager = requireAgentManager(ctx);
|
||||
const initiativeRepo = requireInitiativeRepository(ctx);
|
||||
|
||||
const initiative = await initiativeRepo.findById(input.initiativeId);
|
||||
if (!initiative) {
|
||||
throw new TRPCError({
|
||||
code: 'NOT_FOUND',
|
||||
message: `Initiative '${input.initiativeId}' not found`,
|
||||
});
|
||||
}
|
||||
|
||||
const prompt = buildBreakdownPrompt(initiative, input.contextSummary);
|
||||
|
||||
return agentManager.spawn({
|
||||
name: input.name,
|
||||
taskId: input.initiativeId,
|
||||
prompt,
|
||||
mode: 'breakdown',
|
||||
});
|
||||
}),
|
||||
});
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user