syntax = "v1" // Flow A full copy_mission pipeline removed (stubs / orphan workers). // Only topic inspiration remains until Post Project replaces MissionsPage. // See docs/post-project-plan.md and docs/cleanup-log.md. type ( CopyMissionInspirationReq { Keyword string `json:"keyword,optional"` ContentDirection string `json:"content_direction,optional"` UseWebSearch bool `json:"use_web_search,optional"` AvoidTopics []string `json:"avoid_topics,optional"` } CopyMissionInspirationHandlerReq { PersonaID string `path:"personaId" validate:"required"` CopyMissionInspirationReq } CopyMissionInspirationSourceData { Query string `json:"query,omitempty"` Title string `json:"title,omitempty"` Snippet string `json:"snippet,omitempty"` URL string `json:"url,omitempty"` } CopyMissionInspirationData { TopicCandidateID string `json:"topic_candidate_id,omitempty"` ContentPlanID string `json:"content_plan_id,omitempty"` Label string `json:"label"` SeedQuery string `json:"seed_query"` Brief string `json:"brief"` TrendReason string `json:"trend_reason,omitempty"` TrendKeywords []string `json:"trend_keywords,omitempty"` Angles []string `json:"angles,omitempty"` Mission string `json:"mission,omitempty"` TargetAudience string `json:"target_audience,omitempty"` OpeningType string `json:"opening_type,omitempty"` BodyType string `json:"body_type,omitempty"` Emotion string `json:"emotion,omitempty"` CtaType string `json:"cta_type,omitempty"` RiskLevel string `json:"risk_level,omitempty"` Avoid []string `json:"avoid,omitempty"` Sources []CopyMissionInspirationSourceData `json:"sources,omitempty"` WebSearchUsed bool `json:"web_search_used"` Message string `json:"message"` } ) @server( group: copy_mission prefix: /api/v1/personas middleware: AuthJWT tags: "CopyMission" summary: "Topic inspiration only (legacy Flow A pipeline removed). Requires Bearer JWT." ) service gateway { @handler inspireCopyMission post /:personaId/copy-mission-inspiration (CopyMissionInspirationHandlerReq) returns (CopyMissionInspirationData) }