module Web.Types where import IHP.Prelude import IHP.ModelSupport import IHP.LoginSupport.Types import Generated.Types -- | Authentication type alias type CurrentUserRecord = User instance HasNewSessionUrl User where newSessionUrl _ = "/NewSession" -- Controllers data WebApplication = WebApplication deriving (Eq, Show) data HubsController = HubsAction | NewHubAction | ShowHubAction { hubId :: !(Id Hub) } | CreateHubAction | EditHubAction { hubId :: !(Id Hub) } | UpdateHubAction { hubId :: !(Id Hub) } | DeleteHubAction { hubId :: !(Id Hub) } | TriageDashboardAction { hubId :: !(Id Hub) } | GovernanceDashboardAction { hubId :: !(Id Hub) } | AntifragilityDashboardAction { hubId :: !(Id Hub) } | AgentAuditDashboardAction { hubId :: !(Id Hub) } | AdapterCompatibilityDashboardAction { hubId :: !(Id Hub) } | FrictionHeatmapAction { hubId :: !(Id Hub) } | RecomputeFrictionAction { hubId :: !(Id Hub) } | BottleneckDashboardAction { hubId :: !(Id Hub) } | DetectBottlenecksAction { hubId :: !(Id Hub) } | ResolveBottleneckAction { bottleneckRecordId :: !(Id BottleneckRecord) } | SnapshotHubHealthAction { hubId :: !(Id Hub) } | HubHealthHistoryAction { hubId :: !(Id Hub) } | OperationalReviewBoardAction deriving (Eq, Show, Data) data WidgetsController = WidgetsAction | NewWidgetAction | ShowWidgetAction { widgetId :: !(Id Widget) } | CreateWidgetAction | EditWidgetAction { widgetId :: !(Id Widget) } | UpdateWidgetAction { widgetId :: !(Id Widget) } | SummarizeClusterAction { widgetId :: !(Id Widget) } | DraftRequirementAction { widgetId :: !(Id Widget) } deriving (Eq, Show, Data) data InteractionEventsController = CreateInteractionEventAction { widgetId :: !(Id Widget) } deriving (Eq, Show, Data) data AnnotationsController = WidgetAnnotationsAction { widgetId :: !(Id Widget) } | ShowAnnotationAction { annotationId :: !(Id Annotation) } | NewAnnotationAction { widgetId :: !(Id Widget) } | CreateAnnotationAction { widgetId :: !(Id Widget) } | EscalateAnnotationAction { annotationId :: !(Id Annotation) } deriving (Eq, Show, Data) data AnnotationThreadsController = WidgetAnnotationThreadsAction { widgetId :: !(Id Widget) } | ShowAnnotationThreadAction { annotationThreadId :: !(Id AnnotationThread) } | NewAnnotationThreadAction { widgetId :: !(Id Widget) } | CreateAnnotationThreadAction { widgetId :: !(Id Widget) } | AssignAnnotationToThreadAction { annotationId :: !(Id Annotation) } deriving (Eq, Show, Data) data RequirementCandidatesController = RequirementCandidatesAction | ShowRequirementCandidateAction { requirementCandidateId :: !(Id RequirementCandidate) } | NewRequirementCandidateAction | CreateRequirementCandidateAction | EditRequirementCandidateAction { requirementCandidateId :: !(Id RequirementCandidate) } | UpdateRequirementCandidateAction { requirementCandidateId :: !(Id RequirementCandidate) } | UpdateTriageStatusAction { requirementCandidateId :: !(Id RequirementCandidate) } | AssignReviewerAction { requirementCandidateId :: !(Id RequirementCandidate) } | MyQueueAction | PromoteToRequirementAction { requirementCandidateId :: !(Id RequirementCandidate) } | LinkToDecisionAction { requirementCandidateId :: !(Id RequirementCandidate) } | DetectDuplicatesAction { requirementCandidateId :: !(Id RequirementCandidate) } | DetectPolicySensitivityAction { requirementCandidateId :: !(Id RequirementCandidate) } deriving (Eq, Show, Data) data RequirementsController = RequirementsAction | ShowRequirementAction { requirementId :: !(Id Requirement) } deriving (Eq, Show, Data) data DecisionRecordsController = DecisionRecordsAction | ShowDecisionRecordAction { decisionRecordId :: !(Id DecisionRecord) } | NewDecisionRecordAction | CreateDecisionRecordAction | EditDecisionRecordAction { decisionRecordId :: !(Id DecisionRecord) } | UpdateDecisionRecordAction { decisionRecordId :: !(Id DecisionRecord) } | AddPolicyReferenceAction { decisionRecordId :: !(Id DecisionRecord) } | DeletePolicyReferenceAction { policyReferenceId :: !(Id PolicyReference) } | AddImplementationRefAction { decisionRecordId :: !(Id DecisionRecord) } | DeleteImplementationRefAction { implementationChangeReferenceId :: !(Id ImplementationChangeReference) } | ProposeImplementationAction { decisionRecordId :: !(Id DecisionRecord) } deriving (Eq, Show, Data) data DeploymentRecordsController = DeploymentRecordsAction | ShowDeploymentRecordAction { deploymentRecordId :: !(Id DeploymentRecord) } | NewDeploymentRecordAction | CreateDeploymentRecordAction | RecordOutcomeSignalAction { deploymentRecordId :: !(Id DeploymentRecord) } | EvaluateChangeAction { deploymentRecordId :: !(Id DeploymentRecord) } deriving (Eq, Show, Data) data AgentProposalsController = AgentProposalsAction | ShowAgentProposalAction { agentProposalId :: !(Id AgentProposal) } | AcceptProposalAction { agentProposalId :: !(Id AgentProposal) } | RejectProposalAction { agentProposalId :: !(Id AgentProposal) } deriving (Eq, Show, Data) data ApiInteractionEventsController = CreateApiInteractionEventAction deriving (Eq, Show, Data) data EnvelopeEmissionContractsController = EnvelopeEmissionContractsAction | ShowEnvelopeEmissionContractAction { envelopeEmissionContractId :: !(Id EnvelopeEmissionContract) } deriving (Eq, Show, Data) data InteractionReportingContractsController = InteractionReportingContractsAction | ShowInteractionReportingContractAction { interactionReportingContractId :: !(Id InteractionReportingContract) } deriving (Eq, Show, Data) data WidgetAdapterSpecsController = WidgetAdapterSpecsAction | ShowWidgetAdapterSpecAction { widgetAdapterSpecId :: !(Id WidgetAdapterSpec) } | NewWidgetAdapterSpecAction | CreateWidgetAdapterSpecAction | EditWidgetAdapterSpecAction { widgetAdapterSpecId :: !(Id WidgetAdapterSpec) } | UpdateWidgetAdapterSpecAction { widgetAdapterSpecId :: !(Id WidgetAdapterSpec) } deriving (Eq, Show, Data) -- Phase 8: Federated Hub Maturity data WidgetOwnershipsController = WidgetOwnershipsAction | ShowWidgetOwnershipAction { widgetOwnershipId :: !(Id WidgetOwnership) } | NewWidgetOwnershipAction | CreateWidgetOwnershipAction | EditWidgetOwnershipAction { widgetOwnershipId :: !(Id WidgetOwnership) } | UpdateWidgetOwnershipAction { widgetOwnershipId :: !(Id WidgetOwnership) } deriving (Eq, Show, Data) data HubRoutingRulesController = HubRoutingRulesAction | ShowHubRoutingRuleAction { hubRoutingRuleId :: !(Id HubRoutingRule) } | NewHubRoutingRuleAction | CreateHubRoutingRuleAction | EditHubRoutingRuleAction { hubRoutingRuleId :: !(Id HubRoutingRule) } | UpdateHubRoutingRuleAction { hubRoutingRuleId :: !(Id HubRoutingRule) } | ActivateRoutingRuleAction { hubRoutingRuleId :: !(Id HubRoutingRule) } | DeactivateRoutingRuleAction { hubRoutingRuleId :: !(Id HubRoutingRule) } | RoutedCandidatesAction { hubId :: !(Id Hub) } | RouteNowAction { requirementCandidateId :: !(Id RequirementCandidate) } deriving (Eq, Show, Data) data FederatedPolicyOverlaysController = FederatedPolicyOverlaysAction | ShowFederatedPolicyOverlayAction { federatedPolicyOverlayId :: !(Id FederatedPolicyOverlay) } | NewFederatedPolicyOverlayAction | CreateFederatedPolicyOverlayAction | EditFederatedPolicyOverlayAction { federatedPolicyOverlayId :: !(Id FederatedPolicyOverlay) } | UpdateFederatedPolicyOverlayAction { federatedPolicyOverlayId :: !(Id FederatedPolicyOverlay) } | ActivateFederatedPolicyAction { federatedPolicyOverlayId :: !(Id FederatedPolicyOverlay) } | RetireFederatedPolicyAction { federatedPolicyOverlayId :: !(Id FederatedPolicyOverlay) } | PolicyComplianceDashboardAction deriving (Eq, Show, Data) data StewardshipRolesController = StewardshipRolesAction | ShowStewardshipRoleAction { stewardshipRoleId :: !(Id StewardshipRole) } | NewStewardshipRoleAction | CreateStewardshipRoleAction | RevokeRoleAction { stewardshipRoleId :: !(Id StewardshipRole) } deriving (Eq, Show, Data) data ArchiveRecordsController = ArchiveRecordsAction | ShowArchiveRecordAction { archiveRecordId :: !(Id ArchiveRecord) } | ArchiveWidgetAction { widgetId :: !(Id Widget) } | LineageInspectorAction { widgetId :: !(Id Widget) } deriving (Eq, Show, Data) data FederatedGovernanceController = FederatedGovernanceDashboardAction deriving (Eq, Show, Data) data CrossHubPropagationsController = CrossHubPropagationsAction | DetectPropagationsAction | AcknowledgePropagationAction { crossHubPropagationId :: !(Id CrossHubPropagation) } | ResolvePropagationAction { crossHubPropagationId :: !(Id CrossHubPropagation) } deriving (Eq, Show, Data) -- GAAF Compliance Foundation (IHUB-WP-0009) data TypeRegistriesController = WidgetTypeRegistryAction | ShowWidgetTypeAction { widgetTypeRegistryId :: !(Id WidgetTypeRegistry) } | NewWidgetTypeAction | CreateWidgetTypeAction | EditWidgetTypeAction { widgetTypeRegistryId :: !(Id WidgetTypeRegistry) } | UpdateWidgetTypeAction { widgetTypeRegistryId :: !(Id WidgetTypeRegistry) } | DeprecateWidgetTypeAction { widgetTypeRegistryId :: !(Id WidgetTypeRegistry) } | EventTypeRegistryAction | ShowEventTypeAction { eventTypeRegistryId :: !(Id EventTypeRegistry) } | NewEventTypeAction | CreateEventTypeAction | EditEventTypeAction { eventTypeRegistryId :: !(Id EventTypeRegistry) } | UpdateEventTypeAction { eventTypeRegistryId :: !(Id EventTypeRegistry) } | DeprecateEventTypeAction { eventTypeRegistryId :: !(Id EventTypeRegistry) } | AnnotationCategoryRegistryAction | ShowAnnotationCategoryAction { annotationCategoryRegistryId :: !(Id AnnotationCategoryRegistry) } | NewAnnotationCategoryAction | CreateAnnotationCategoryAction | EditAnnotationCategoryAction { annotationCategoryRegistryId :: !(Id AnnotationCategoryRegistry) } | UpdateAnnotationCategoryAction { annotationCategoryRegistryId :: !(Id AnnotationCategoryRegistry) } | DeprecateAnnotationCategoryAction { annotationCategoryRegistryId :: !(Id AnnotationCategoryRegistry) } | PolicyScopeRegistryAction | ShowPolicyScopeAction { policyScopeRegistryId :: !(Id PolicyScopeRegistry) } | NewPolicyScopeAction | CreatePolicyScopeAction | EditPolicyScopeAction { policyScopeRegistryId :: !(Id PolicyScopeRegistry) } | UpdatePolicyScopeAction { policyScopeRegistryId :: !(Id PolicyScopeRegistry) } | DeprecatePolicyScopeAction { policyScopeRegistryId :: !(Id PolicyScopeRegistry) } deriving (Eq, Show, Data) data HubCapabilityManifestsController = HubCapabilityManifestsAction | ShowHubCapabilityManifestAction { hubCapabilityManifestId :: !(Id HubCapabilityManifest) } | NewHubCapabilityManifestAction | CreateHubCapabilityManifestAction | EditHubCapabilityManifestAction { hubCapabilityManifestId :: !(Id HubCapabilityManifest) } | UpdateHubCapabilityManifestAction { hubCapabilityManifestId :: !(Id HubCapabilityManifest) } | ActivateManifestAction { hubCapabilityManifestId :: !(Id HubCapabilityManifest) } | RetireManifestAction { hubCapabilityManifestId :: !(Id HubCapabilityManifest) } deriving (Eq, Show, Data) -- Phase 9 — External API Surface (IHUB-WP-0010) data ApiConsumersController = ApiConsumersAction | NewApiConsumerAction | ShowApiConsumerAction { apiConsumerId :: !(Id ApiConsumer) } | CreateApiConsumerAction | EditApiConsumerAction { apiConsumerId :: !(Id ApiConsumer) } | UpdateApiConsumerAction { apiConsumerId :: !(Id ApiConsumer) } | DeactivateApiConsumerAction { apiConsumerId :: !(Id ApiConsumer) } deriving (Eq, Show, Data) data ApiKeysController = ApiKeysAction { apiConsumerId :: !(Id ApiConsumer) } | NewApiKeyAction { apiConsumerId :: !(Id ApiConsumer) } | CreateApiKeyAction | RevokeApiKeyAction { apiKeyId :: !(Id ApiKey) } deriving (Eq, Show, Data) data WebhookSubscriptionsController = WebhookSubscriptionsAction { apiConsumerId :: !(Id ApiConsumer) } | NewWebhookSubscriptionAction { apiConsumerId :: !(Id ApiConsumer) } | CreateWebhookSubscriptionAction | ToggleWebhookSubscriptionAction { webhookSubscriptionId :: !(Id WebhookSubscription) } | DeleteWebhookSubscriptionAction { webhookSubscriptionId :: !(Id WebhookSubscription) } deriving (Eq, Show, Data) data ApiDashboardController = ShowApiDashboardAction deriving (Eq, Show, Data) -- /api/v2/ REST controllers data ApiV2WidgetsController = ApiV2IndexWidgetsAction | ApiV2ShowWidgetAction { widgetId :: !(Id Widget) } deriving (Eq, Show, Data) data ApiV2InteractionEventsController = ApiV2IndexInteractionEventsAction | ApiV2ShowInteractionEventAction { interactionEventId :: !(Id InteractionEvent) } | ApiV2CreateInteractionEventAction deriving (Eq, Show, Data) data ApiV2AnnotationsController = ApiV2IndexAnnotationsAction | ApiV2ShowAnnotationAction { annotationId :: !(Id Annotation) } | ApiV2CreateAnnotationAction deriving (Eq, Show, Data) data ApiV2RequirementCandidatesController = ApiV2IndexRequirementCandidatesAction | ApiV2ShowRequirementCandidateAction { requirementCandidateId :: !(Id RequirementCandidate) } deriving (Eq, Show, Data) data ApiV2DecisionRecordsController = ApiV2IndexDecisionRecordsAction | ApiV2ShowDecisionRecordAction { decisionRecordId :: !(Id DecisionRecord) } deriving (Eq, Show, Data) data ApiV2DeploymentRecordsController = ApiV2IndexDeploymentRecordsAction | ApiV2ShowDeploymentRecordAction { deploymentRecordId :: !(Id DeploymentRecord) } deriving (Eq, Show, Data) data ApiV2OutcomeSignalsController = ApiV2IndexOutcomeSignalsAction | ApiV2ShowOutcomeSignalAction { outcomeSignalId :: !(Id OutcomeSignal) } deriving (Eq, Show, Data) data ApiV2RegistriesController = ApiV2ListWidgetTypesAction | ApiV2ListEventTypesAction | ApiV2ListAnnotationCategoriesAction deriving (Eq, Show, Data) data ApiV2OpenApiController = ApiV2OpenApiJsonAction | ApiV2OpenApiYamlAction | ApiV2DocsAction deriving (Eq, Show, Data) data ApiV2TokenController = ApiV2CreateTokenAction deriving (Eq, Show, Data) data ApiV2SdkController = ApiV2SdkIndexAction | ApiV2SdkTsAction | ApiV2SdkPyAction deriving (Eq, Show, Data) -- Phase 10 — Hub Registry and Widget Marketplace (IHUB-WP-0011) -- | GAAF compliance status derived from manifest and registry. data GaafStatus = GaafCompliant -- active manifest, all declared types registered | GaafNoManifest -- hub has no active manifest | GaafDraftOnly -- hub has a draft but no active manifest deriving (Eq, Show, Data) gaafStatus :: Maybe HubCapabilityManifest -> GaafStatus gaafStatus Nothing = GaafNoManifest gaafStatus (Just m) | m.status == "active" = GaafCompliant | m.status == "draft" = GaafDraftOnly | otherwise = GaafNoManifest -- | Aggregated row for the hub registry index. data HubRegistryRow = HubRegistryRow { hub :: !Hub , mManifest :: !(Maybe HubCapabilityManifest) , mLatestSnapshot :: !(Maybe HubHealthSnapshot) } data HubRegistryController = HubRegistryAction | ShowHubRegistryAction { hubId :: !(Id Hub) } deriving (Eq, Show, Data) data WidgetPatternsController = WidgetPatternsAction | ShowWidgetPatternAction { widgetPatternId :: !(Id WidgetPattern) } | NewWidgetPatternAction | CreateWidgetPatternAction | EditWidgetPatternAction { widgetPatternId :: !(Id WidgetPattern) } | UpdateWidgetPatternAction { widgetPatternId :: !(Id WidgetPattern) } | PublishWidgetPatternAction { widgetPatternId :: !(Id WidgetPattern) } | PublishNewVersionAction { widgetPatternId :: !(Id WidgetPattern) } | AdoptPatternAction { widgetPatternId :: !(Id WidgetPattern) } deriving (Eq, Show, Data) data GovernanceTemplatesController = GovernanceTemplatesAction | ShowGovernanceTemplateAction { governanceTemplateId :: !(Id GovernanceTemplate) } | NewGovernanceTemplateAction | CreateGovernanceTemplateAction | CloneGovernanceTemplateAction { governanceTemplateId :: !(Id GovernanceTemplate) } deriving (Eq, Show, Data) data MarketplaceDashboardController = MarketplaceDashboardAction deriving (Eq, Show, Data) -- /api/v2/ Phase 10 REST controllers data ApiV2HubRegistryController = ApiV2IndexHubRegistryAction | ApiV2ShowHubRegistryAction { hubId :: !(Id Hub) } deriving (Eq, Show, Data) data ApiV2WidgetPatternsController = ApiV2IndexWidgetPatternsAction | ApiV2ShowWidgetPatternAction { widgetPatternId :: !(Id WidgetPattern) } | ApiV2AdoptWidgetPatternAction { widgetPatternId :: !(Id WidgetPattern) } deriving (Eq, Show, Data) -- Phase 11 — Advanced AI Federation data AgentRegistrationsController = AgentRegistrationsAction | ShowAgentRegistrationAction { agentRegistrationId :: !(Id AgentRegistration) } | NewAgentRegistrationAction | CreateAgentRegistrationAction | EditAgentRegistrationAction { agentRegistrationId :: !(Id AgentRegistration) } | UpdateAgentRegistrationAction { agentRegistrationId :: !(Id AgentRegistration) } | DeactivateAgentAction { agentRegistrationId :: !(Id AgentRegistration) } | ComputeAgentPerformanceAction { agentRegistrationId :: !(Id AgentRegistration) } deriving (Eq, Show, Data) data ModelRoutingPoliciesController = ModelRoutingPoliciesAction | NewModelRoutingPolicyAction | CreateModelRoutingPolicyAction | DeleteModelRoutingPolicyAction { modelRoutingPolicyId :: !(Id ModelRoutingPolicy) } deriving (Eq, Show, Data) data AgentDelegationsController = AgentDelegationsAction | ShowAgentDelegationAction { agentDelegationId :: !(Id AgentDelegation) } | DelegateSubtaskAction { agentProposalId :: !(Id AgentProposal) } deriving (Eq, Show, Data) data CollectiveProposalsController = CollectiveProposalsAction | ShowCollectiveProposalAction { collectiveProposalId :: !(Id CollectiveProposal) } | CreateCollectiveProposalAction deriving (Eq, Show, Data) data AiGovernancePoliciesController = AiGovernancePoliciesAction | NewAiGovernancePolicyAction | CreateAiGovernancePolicyAction | ToggleAiGovernancePolicyAction { aiGovernancePolicyId :: !(Id AiGovernancePolicy) } deriving (Eq, Show, Data) -- Phase 12 — Platform Memory and Continuous Learning data OutcomeCorrelationsController = OutcomeCorrelationsAction | ComputeCorrelationsAction { hubId :: !(Id Hub) } deriving (Eq, Show, Data) data PatternPerformanceController = PatternPerformanceAction | ComputePatternPerformanceAction { hubIdForPerformance :: !(Id Hub) } deriving (Eq, Show, Data) data AdaptiveThresholdsController = AdaptiveThresholdsAction | CalibrateThresholdsAction { hubIdForThreshold :: !(Id Hub) } deriving (Eq, Show, Data) data InstitutionalKnowledgeController = InstitutionalKnowledgeAction | ShowInstitutionalKnowledgeAction { knowledgeEntryId :: !(Id InstitutionalKnowledgeEntry) } | QueryKnowledgeBaseAction deriving (Eq, Show, Data) data LineageEnrichmentController = LineageEnrichmentAction | EnrichLineageAction { hubIdForLineage :: !(Id Hub) } deriving (Eq, Show, Data) data LearningDashboardController = LearningDashboardAction deriving (Eq, Show, Data) data ApiV2LearningController = ApiV2IndexOutcomeCorrelationsAction | ApiV2IndexPatternPerformanceAction | ApiV2IndexKnowledgeBaseAction | ApiV2ShowKnowledgeBaseAction { knowledgeEntryId :: !(Id InstitutionalKnowledgeEntry) } deriving (Eq, Show, Data) data SessionsController = NewSessionAction | CreateSessionAction | DeleteSessionAction deriving (Eq, Show, Data)